import type { FunnelStartedFields, TestStartedFields, UserClickFields, ViewContentFields, } from '@xylabs/pixel' import { UserEventHandler } from '@xylabs/pixel' import type { EmptyObject } from '@xylabs/sdk-js' import { FacebookUserEventHandler } from './Facebook/index.ts' import { GoogleUserEventHandler } from './Google/index.ts' class XyoUserEventHandler extends UserEventHandler { // disabling since we are using singleton pattern // eslint-disable-next-line sonarjs/public-static-readonly static instance: XyoUserEventHandler protected handlers: UserEventHandler[] private constructor(handlers: UserEventHandler[] = []) { super() this.handlers = handlers ?? [new FacebookUserEventHandler(), new GoogleUserEventHandler()] } static get() { this.instance = this.instance ?? new XyoUserEventHandler() return this.instance } async funnelStarted(data: T | FunnelStartedFields) { await Promise.allSettled(this.handlers.map(handler => handler.funnelStarted(data))) } async testStarted(data: T | TestStartedFields) { await Promise.allSettled(this.handlers.map(handler => handler.testStarted(data))) } async userClick(data: T | UserClickFields) { await Promise.allSettled(this.handlers.map(handler => handler.userClick(data))) } async viewContent(data: T | ViewContentFields) { await Promise.allSettled(this.handlers.map(handler => handler.viewContent(data))) } } export { XyoUserEventHandler }