import Logger from '../utils/logger'; import { API_ENDPOINTS } from './apiEndpoints'; import type { GetIdSdk } from '..'; import { Platform } from 'react-native'; const { version } = require('../../package'); export const eventStepValues = [ 'welcome', 'error', 'upload', 'verify', 'change-device', 'consent', 'form', 'document-type', 'document-source-choice', 'document-from-gallery', 'document-rules', 'front-side-from-gallery', 'back-side-from-gallery', 'front-or-single-guide', 'front-or-single', 'front-guide', 'front-rules', 'front', 'front-preview', 'back-guide', 'back-rules', 'back', 'back-preview', 'single-guide', 'single', 'nfc', 'video', 'video-preview', 'video-thanks', 'selfie-guide', 'selfie-rules', 'selfie-preview', 'selfie', 'liveness', 'liveness-preparations', 'loading', 'thank-you', 'waiting-complete', 'front-retake', 'back-retake', 'selfie-retake', 'jumping', 'jump-env-open', 'prediction-stopped', 'init-sdk', 'proof-of-address-document-type', 'proof-of-address-form', 'proof-of-address-add-document', 'proof-of-address-preview', 'passive-liveness', ] as const; export type EventStep = (typeof eventStepValues)[number]; export const eventStepPhaseValues = [ 'started', 'completed', 'go-back', 'check-prediction', 'DocumentDetectionStopped', ] as const; export type EventStepPhase = (typeof eventStepPhaseValues)[number]; export type ClientTimestamp = string; export type PostEventRequestBody = { event: { step: EventStep; stepPhase?: EventStepPhase; clientTimestamp: ClientTimestamp; /** * All the messages from the liveness server should be resent as is. */ livenessServerMessage?: Record; additional?: { retakeCode?: string; }; }; }; type PostEventResult = Promise; type PostEventProps = { requestBody: PostEventRequestBody; sdk: GetIdSdk; }; export type TrySendEvent = ( step: EventStep, stepPhase?: EventStepPhase, additional?: Record, livenessServerMessage?: Record, screenEvent?: unknown ) => Promise; export const postEvent = async ({ sdk, requestBody, }: PostEventProps): PostEventResult => { Logger.log( `Event ${requestBody.event.step}->${requestBody.event.stepPhase}...` ); try { const headers = { 'X-Schema-Version': '2.1.2', 'X-Sdk-Platform': Platform.OS, 'X-Sdk-Version': version, 'Content-Type': 'application/json', 'Authorization': 'Bearer ' + sdk.config.token, }; await fetch(sdk.config.apiUrl + API_ENDPOINTS.EVENT, { method: 'POST', headers: headers, body: JSON.stringify(requestBody), }); } catch (error: any) { Logger.error( `Error while sending event: ${JSON.stringify(error)}`, sdk.tracking.trySendEvent ); } }; export default postEvent;