@chordcommerce/analytics
Version:
Chord Commerce event tracking
98 lines (97 loc) • 2.54 kB
TypeScript
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 {};