Definitions

Note that the driving insights feature is in Early Access. The API is subject to change in the future.

declare module "@sentiance-react-native/driving-insights" {
  import {EmitterSubscription} from "react-native";

  export interface DrivingInsights {
    transportEvent: TransportEvent,
    safetyScores: SafetyScores
  }

  export interface SafetyScores {
    /**
     * Smooth driving score, between 0 and 1, where 1 is the perfect score.
     */
    smoothScore?: number;
    
    /**
     * Focused driving score, between 0 and 1, where 1 is the perfect score.
     */
    focusScore?: number;
    
   /**
     * Legal driving score, between 0 and 1, where 1 is the perfect score.
     */
    legalScore?: number;
    
    /**
     * Call while moving score, between 0 and 1, where 1 is the perfect score.
     */
    callWhileMovingScore?: number;
    
    /**
     * Overall driving score, between 0 and 1, where 1 is the perfect score.
     */
    overallScore?: number;
  }

  export interface DrivingEvent {
    startTime: string;
    startTimeEpoch: number; // in milliseconds
    endTime: string;
    endTimeEpoch: number;   // in milliseconds
  }

  export interface HarshDrivingEvent extends DrivingEvent {
    magnitude: number
  }

  export interface PhoneUsageEvent extends DrivingEvent {
  }
  
 export interface CallWhileMovingEvent extends DrivingEvent {
    maxTravelledSpeedInMps?: number;
    minTravelledSpeedInMps?: number;
  }

 /**
  * An event that represents a period of time where speeding was observed.
  *
  * A speeding event is based on the speed and speed limit information of individual 
  * waypoints.These waypoints are accessible from this speeding event.
  */
  export interface SpeedingEvent extends DrivingEvent {
    /**
     * The transport waypoints that capture the speeding, where each waypoint 
     * contains the transport speed and speed limit information at the given 
     * waypoint location.
     */
    waypoints: Waypoint[];
  }

  export interface TransportEvent {
    id: string;
    startTime: string;
    startTimeEpoch: number; // in milliseconds
    endTime: string | null;
    endTimeEpoch: number | null; // in milliseconds
    durationInSeconds: number | null;
    type: string;
    transportMode: TransportMode | null;
    waypoints: Waypoint[];
    distance?: number; // in meters
  }

  export type TransportMode =
    | "UNKNOWN"
    | "BICYCLE"
    | "WALKING"
    | "RUNNING"
    | "TRAM"
    | "TRAIN"
    | "CAR"
    | "BUS"
    | "MOTORCYCLE";

  export interface Waypoint {
    latitude: number;
    longitude: number;
    accuracy: number;   // in meters
    timestamp: number;  // UTC epoch time in milliseconds
    speedInMps?: number;  // in meters per second
    speedLimitInMps?: number;  // in meters per second
    hasUnlimitedSpeedLimit: boolean;
  }

  export interface SentianceDrivingInsights {
    addDrivingInsightsReadyListener(onDrivingInsightsReady: (drivingInsights: DrivingInsights) => void): Promise<EmitterSubscription>;

    getDrivingInsights(transportId: string): Promise<DrivingInsights>;

    getHarshDrivingEvents(transportId: string): Promise<HarshDrivingEvent[]>;
    
    getPhoneUsageEvents(transportId: string): Promise<PhoneUsageEvent[]>;
        
    getCallWhileMovingEvents(transportId: string): Promise<CallWhileMovingEvent[]>;

    getSpeedingEvents(transportId: string): Promise<SpeedingEvent[]>;
  }

  const SentianceDrivingInsights: SentianceDrivingInsights;
  export default SentianceDrivingInsights;
}

Last updated