UNPKG

@chordcommerce/analytics

Version:

Chord Commerce event tracking

98 lines (97 loc) 2.54 kB
import type { EventProperties, AnalyticsSnippet, Analytics, AnalyticsBrowser, Options } from '@segment/analytics-next'; import { ChordAnalyticsFormatters } from './formatters.js'; export interface ValidateResult { success: boolean; error?: any[]; data?: any; } export interface ObjectTypes { Cart: any; Checkout: any; LineItem: any; Product: any; } export type AnyAnalytics = AnalyticsSnippet | Analytics | AnalyticsBrowser | ChordAnalyticsQueue; export type AnyOptions = Options; export type AnyProduct = { [key: string]: unknown; }; export type AnyCart = { [key: string]: unknown; }; export type AnyCheckout = { [key: string]: unknown; }; export type AnyId = string | number; export type AnyLineItem = { [key: string]: unknown; }; export interface ChordAnalyticsOptions<T extends ObjectTypes = ObjectTypes> { cdp?: AnyAnalytics | (() => AnyAnalytics); cdpDomain?: string; cdpWriteKey?: string; consent?: 'ketch' | 'onetrust' | 'shopify' | 'segment'; awaitConsent?: boolean; debug?: boolean; enableLogging?: boolean; enableWebPixelListener?: boolean; formatters: ChordAnalyticsFormatters<T>; namespace?: string; stripNull?: boolean; metadata: EventMetadata; awaitConsentTimeout?: number; middleware?: Array<() => void>; } export interface EventMetadata { i18n: i18nMetadata; ownership: ownershipMetadata; platform: platformMetadata; store: storeMetadata; version?: versionMetadata; } export interface i18nMetadata { currency: string; locale: string; } export interface ownershipMetadata { omsId: string; storeId: string; tenantId: string; } export interface platformMetadata { name: string; type: string; } export interface versionMetadata { major: number; minor: number; patch: number; } export interface storeMetadata { domain: string; } export type ChordAnalyticsQueue = { track: (...args: any[]) => void; identify: (...args: any[]) => void; page: (...args: any[]) => void; reset: (...args: any[]) => void; }; type PageContext = { search: string; searchParams: Record<string, string>; }; type MiddlewarePayload = { obj: { properties?: EventProperties; event: string; context: { page: PageContext; }; }; }; type MiddlewareArgs = { payload: MiddlewarePayload; next: <T>(arg: T) => T; }; export type AnalyticsMiddleware = (args: MiddlewareArgs) => Partial<EventProperties> | void; export {};