export enum DataResidencyEnum { 'EU' = 'EU', 'US' = 'US', 'UAE' = 'UAE', 'AU' = 'AU', 'IN' = 'IN', 'QA' = 'QA', 'DEV' = 'DEV', } export enum DataRequestTypeEnum { 'SESSION' = 'SESSION', 'CLIENT' = 'CLIENT', 'EVENT' = 'EVENT', 'CHECKOUT' = 'CHECKOUT', 'PURCHASE' = 'PURCHASE', } export enum EventTypeEnum { APP_START = 'APP_START', CONTENT_VIEW = 'CONTENT_VIEW', CATEGORY_VIEW = 'CATEGORY_VIEW', PRODUCT_VIEW = 'PRODUCT_VIEW', CART_ADD = 'CART_ADD', CART_VIEW = 'CART_VIEW', CART_REMOVE = 'CART_REMOVE', SEARCH = 'SEARCH', SEARCH_CLEAR = 'SEARCH_CLEAR', CHECKOUT = 'CHECKOUT', PURCHASE = 'PURCHASE', QR_RUN = 'QR_RUN', RATING = 'RATING', CART_CLEAR = 'CART_CLEAR', FEEDBACK = 'FEEDBACK', APP_ONLINE = 'APP_ONLINE', APP_OFFLINE = 'APP_OFFLINE', ORDER_ITEM = 'ORDER_ITEM', PROCESS_ORDER_START = 'PROCESS_ORDER_START', PROCESS_ORDER_END = 'PROCESS_ORDER_END', PROCESS_ORDER_SUCCESS = 'PROCESS_ORDER_SUCCESS', PROCESS_ORDER_FAILED = 'PROCESS_ORDER_FAILED', PROCESS_ORDER_ITEM_DELIVERED = 'PROCESS_ORDER_ITEM_DELIVERED', PROCESS_ORDER_ITEM_FAILED = 'PROCESS_ORDER_ITEM_FAILED', AUTHENTICATION_FAILED = 'AUTHENTICATION_FAILED', AUTHENTICATION_SUCCESS = 'AUTHENTICATION_SUCCESS', SCAN_BARCODE = 'SCAN_BARCODE', MEDIA_FINISHED = 'MEDIA_FINISHED', } export interface TrackEvent { captureId?: string; categoryId?: string; eventType: string; int1?: number; int2?: number; int3?: number; int4?: number; int5?: number; interaction: boolean; productId?: string; public?: number; stateful?: boolean; str1?: string; str2?: string; str3?: string; str4?: string; str5?: string; } export interface Session { appId: string; appVersion?: string; captureId?: string; clientId?: string; country?: string; dataResidency: string; deviceId?: string | null; environment: string; installationId: string; installationVersion?: string; ip?: string; latitude?: number; locationAccuracy?: number; longitude?: number; sessionCreated?: string; sessionId: string; spaceId: string; tenantId: string; } export interface Event extends TrackEvent { clientId?: string; dataResidency: string; eventTime?: string; ip?: string; sessionId: string; spaceId: string; tenantId: string; } export interface BaseCheckoutEvent extends Omit { transactionId: string; currency: string; revenue: number; affiliation?: string; shipping?: number; tax?: number; coupon?: string; products: { id: string; name: string; categoryId: string; spaceId: string; quantity: number; price: number; affiliation?: string; coupon?: string; discount?: number; }[]; } export interface CheckoutEvent extends BaseCheckoutEvent {} export interface PurchaseEvent extends BaseCheckoutEvent {} export interface CheckoutProps { transactionId: string; currency: string; revenue: number; affiliation?: string; shipping?: number; tax?: number; coupon?: string; products: { id: string; name: string; categoryId: string; spaceId: string; quantity: number; price: number; affiliation?: string; coupon?: string; discount?: number; }[]; } export interface PurchaseProps { transactionId: string; currency: string; revenue: number; affiliation?: string; shipping?: number; tax?: number; coupon?: string; products: { id: string; name: string; categoryId: string; spaceId: string; quantity: number; price: number; affiliation?: string; coupon?: string; discount?: number; }[]; } export interface Client { captureId?: string; clientBrowserEngine?: string; clientBrowserEngineVersion?: string; clientBrowserMajor?: string; clientBrowserName?: string; clientBrowserVersion?: string; clientCreated: string; clientCpuArchitecture?: string; clientDeviceModel?: string; clientDeviceType?: string; clientDeviceVendor?: string; clientHeight?: number; clientId?: string; // Mobile - Generate uuid // Device - Device ID clientIp?: string; clientOsName?: string; clientOsVersion?: string; clientScreenColorDepth?: number; clientScreenHeight?: number; clientScreenPixelDepth?: number; clientScreenWidth?: number; clientUserAgent?: string; country?: string; dataResidency: string; latitude?: number; locationAccuracy?: number; longitude?: number; tenantId: string; } export interface InitSignalPayload { tenantId: string; environment: string; dataResidency: string; country: string; locationAccuracy?: number; latitude?: number; longitude?: number; spaceId: string; appId: string; appVersion: string; installationId: string; installationVersion: string; lastActivity?: string; clientUserAgent?: string; clientScreenWidth?: number; clientScreenHeight?: number; clientScreenColorDepth?: number; clientScreenPixelDepth?: number; sessionId?: string; sessionCreated?: string; deviceId?: string; accessId?: string; accessToken?: string; clientCreated?: string; clientId?: string; useValidCachedSessionOnInit?: boolean; createNewSessionAfterLastActivityMins?: number; ip?: string; } export interface SignalInstance extends Session, Client { accessId: string; accessToken: string; lastActivity: string; } export type RequestData = Session | Event | CheckoutEvent | PurchaseEvent | Client; export type SendOrCacheDataProps = (type: DataRequestTypeEnum, data: RequestData) => Promise; export type GetSessionStateParams = { tenantId: string; sessionId: string; dataResidency: string; }; export type GetSessionStateResponse = { CART: { [productId: string]: number; }; SEARCH: string[]; }; export type GetSpaceStateParams = { accessId: string; accessToken: string; tenantId: string; spaceId: string; dataResidency: string; }; export type GetSpaceStateRowsParams = { accessId: string; accessToken: string; tenantId: string; sessionId: string; dataResidency: string; }; export type GetSpaceStateResponse = { RATING: { type: string; value: { min: number; max: number; mean: number; length: number; }; expiry: number; created: string; updated: string; }; CART: { [productId: string]: { quantity: number; contacts: number; }; }; }; export type GetSpaceStateRowsResponse = { RATING: { [sessionId: string]: { value: number; expiry: number; updated: string; }; }; CART: { [sessionId: string]: { expiry: string; updated: string; value: { [productId: string]: number; }; }; }; }; export type SubscribeSessionStateParams = { sessionId: string; dataResidency: string; callback: (data: any) => void; onStop?: () => void; onRefresh?: () => void; }; export type SubscribeSessionStateResponse = GetSessionStateResponse; export type SubscribeSpaceStateParams = { accessId: string; accessToken: string; spaceId: string; dataResidency: string; callback: (data: any) => void; }; export type SubscribeSpaceStateResponse = { CART: { [productId: string]: { quantity: number; contacts: number; }; }; }; export type SubscribeEventResponse = { captureId: string; clientId?: string; dataResidency: string; eventTime: string; eventType: string; interaction: boolean; ip: string; productId: string; sessionId: string; tenantId: string; int1?: number; int2?: number; int3?: number; int4?: number; int5?: number; str1?: string; str2?: string; str3?: string; str4?: string; str5?: string; }; export type CreatePubSub = { sessionId: string; dataResidency: string; }; export type PubSubData = { eventType: string; payload: string; }; export type GetContactParams = { tenantId: string; sessionId: string; dataResidency: DataResidencyEnum; }; export type SubscriptionGetTokenResponse = { accessToken: string; url: string; }; export type SendDataOptions = { expectResponse?: boolean; type: DataRequestTypeEnum; };