{
  "version": 3,
  "sources": ["../../../../../../owl-nest/common/shadow/src/ga/types.ts", "../../../../../../owl-nest/common/shadow/src/ga/safePush.ts"],
  "sourcesContent": ["export enum BRAND_ACTION {\n  IMPRESSION = 'Brand Impression',\n  IMPRESSION_CLICKABLE = 'Brand Impression Clickable',\n  CLICK = 'Brand click',\n  ON_PAGE = 'Brands on page',\n}\n\nexport enum CATEGORY {\n  BOUTIQUE = 'Boutique',\n  CHECKOUT = 'Checkout',\n  DISCOVER_ULULE = 'Discover Ulule',\n  HOMEPAGE = 'Homepage',\n  MEMBERSHIP_NEWS = 'Membership post',\n  MEMBERSHIP_PAGE = 'Membership page',\n  PARTNERS_OPERATIONS = 'Partners operations',\n  PROJECT_FORM = 'project_form',\n  PROJECT_PAGE = 'project_page',\n  PROJECT_PROPOSAL_TRACKING = 'Project proposal',\n  REGISTRATION = 'User registration',\n  SOCIAL = 'social on Ulule',\n  ULULE = 'Ulule',\n  WIDGET = 'External widget',\n}\n\nexport enum EVENT_TYPE {\n  BRAND = 'BRANDevent',\n  GENERIC = 'GAevent',\n  PROJECT_FORM_ERROR = 'projectFormError',\n  SOCIAL = 'socialInt',\n  TRANSACTION = 'transaction',\n}\n\nexport enum SITE {\n  CHECKOUT = 'Checkout',\n  ULULE = 'Ulule',\n  WIDGET = 'External widget',\n  CONNECT = 'Connect',\n}\n\nexport enum SOCIAL_NETWORK {\n  FACEBOOK = 'Facebook',\n  HYPERLINK = 'Hyperlink',\n  LINKEDIN = 'Linkedin',\n  MESSENGER = 'Messenger',\n  NATIVE = 'Native',\n  TWITTER = 'Twitter',\n  ULULE = 'Ulule',\n  WHATSAPP = 'WhatsApp',\n  WIDGET = 'Widget',\n}\n\nexport const apiTagTypeToGTM = {\n  facebook: 'poFBpixelID',\n  google: 'poGApropertyID',\n  tiktok: 'poTTpixelID',\n  twitter: 'poTWpixelID',\n} as const\n\ntype AnalyticsTagType = (typeof apiTagTypeToGTM)[keyof typeof apiTagTypeToGTM]\n\nexport type AnalyticsTags = {\n  [key in AnalyticsTagType]?: string\n}\n\nexport type BaseTracking<EVENT extends Partial<TrackingEvent> = Partial<TrackingEvent>> = {\n  track: (event: EVENT) => void\n}\n\nexport type BrandEvent = {\n  event: EVENT_TYPE.BRAND\n  eventAction: BRAND_ACTION\n  eventCategory: 'Brand visibility'\n  eventLabel: string\n  eventValue?: string\n  logoId?: string\n  nonInteractionEvent?: boolean\n  linkUrl?: string\n  eventTimeout?: number\n  eventCallback?: () => void\n}\n\nexport type GenericEvent = {\n  event: EVENT_TYPE.GENERIC\n  eventCategory: CATEGORY\n  pageCategory: string\n  siteCategory: SITE\n  eventAction: string\n  eventValue?: string\n  eventLabel?: string\n  eventTimeout?: number\n  eventCallback?: () => void\n}\n\nexport type SocialEvent = {\n  event: EVENT_TYPE.SOCIAL\n  eventCallback?: () => void\n  eventCategory?: CATEGORY\n  eventTimeout?: number\n  socialAction: string\n  socialNetwork: SOCIAL_NETWORK\n  socialTarget: string\n  ululeProjectId?: number\n  eventAction?: string\n  eventLabel?: string\n  eventValue?: string\n}\n\nexport type TransactionEvent = {\n  event: EVENT_TYPE.TRANSACTION\n  eventCallback?: () => void\n  transactionId: number\n  transactionAffiliation: 'Ulule'\n  transactionTotal: number\n  transactionCurrencyCode: string\n  transactionProducts?: TransactionProductEvent[]\n  ululeProjectId: number\n}\n\nexport type TransactionProductEvent = {\n  sku: number\n  price: number\n  quantity: number\n}\n\nexport type RecommandedEvent = {\n  0: 'event'\n  1: string\n  2: unknown\n  eventCallback?: () => void\n}\n\nexport type EcommerceEvent = {\n  event: string\n  ecommerce: any\n  eventCallback?: () => void\n}\n\nexport type TrackingEvent =\n  | GenericEvent\n  | SocialEvent\n  | TransactionEvent\n  | BrandEvent\n  | RecommandedEvent\n  | EcommerceEvent\n", "import { EVENT_TYPE, TrackingEvent } from './types'\n\nexport type SafePush = <EVENT extends TrackingEvent = TrackingEvent>(event: EVENT) => void\n\nexport function safePusher(gtmContainerId?: string) {\n  return <EVENT extends TrackingEvent = TrackingEvent>(event: EVENT): void => {\n    if (gtmContainerId === undefined) {\n      console.warn('[shadow] tracking was not initialized (need gtmContainerId)')\n    }\n\n    if (window.dataLayer === undefined || window.google_tag_manager === undefined) {\n      return simulatePush(event)\n    }\n\n    if (\n      'event' in event &&\n      event.event === EVENT_TYPE.GENERIC &&\n      !(window.ga !== undefined && window.ga.loaded === true)\n    ) {\n      simulatePush(event)\n    } else {\n      const callback = event.eventCallback\n      const safeEvent: any = { ...event }\n      if (callback) {\n        // since the callback can be called by the `eventCallback` and\n        // `setTimeout`, we want to make sure `callback` is only called once\n        const onceCallback = once(callback)\n        if (!safeEvent.eventTimeout) {\n          safeEvent.eventTimeout = 1000\n        }\n\n        safeEvent.eventCallback = (containerId: string) => {\n          /**\n           * A bit of context: the native `eventCallback()` has an `id` argument\n           * that represents the container within which it is executed.\n           * Shimmed/stubbed versions do not have access to the ID, thus not passing\n           * the argument. We test that through `!containerId` and manually execute\n           * the callback in that case.\n           */\n          if (containerId === gtmContainerId || !containerId) {\n            onceCallback()\n          }\n        }\n\n        /**\n         * As a last resort, force manually invoking callback after 1s. This is for cases where:\n         *  - GTM fails to finish sending the event or timing out\n         *  - GTM is stubbed by the browser (hi there, strict mode Firefox) and the callback isn't naturally called\n         */\n        setTimeout(onceCallback, 1200)\n      }\n      window.dataLayer.push(safeEvent)\n    }\n  }\n}\n\n// return a function that will call `callback` only once\nfunction once(callback: () => void): () => void {\n  let called = false\n  return () => {\n    if (!called) {\n      called = true\n      callback()\n    }\n  }\n}\n\nfunction simulatePush(event: TrackingEvent): void {\n  // try to push anyway, we never know, but without callback\n  if (window.dataLayer !== undefined) {\n    window.dataLayer.push({\n      ...event,\n      eventCallback: undefined,\n    })\n  }\n\n  // run the callback ourselves\n  const callback = event.eventCallback\n  if (callback !== undefined) {\n    setTimeout(callback, 0)\n  }\n}\n"],
  "mappings": "6DAAAA,IAmDO,IAAMC,EAAkB,CAC7B,SAAU,cACV,OAAQ,iBACR,OAAQ,cACR,QAAS,aACX,ECxDAC,IAIO,SAASC,EAAWC,EAAyB,CAClD,OAAqDC,GAAuB,CAK1E,GAJID,IAAmB,QACrB,QAAQ,KAAK,6DAA6D,EAGxE,OAAO,YAAc,QAAa,OAAO,qBAAuB,OAClE,OAAOE,EAAaD,CAAK,EAG3B,GACE,UAAWA,GACXA,EAAM,mBACN,EAAE,OAAO,KAAO,QAAa,OAAO,GAAG,SAAW,IAElDC,EAAaD,CAAK,MACb,CACL,IAAME,EAAWF,EAAM,cACjBG,EAAiBC,EAAA,GAAKJ,GAC5B,GAAIE,EAAU,CAGZ,IAAMG,EAAeC,EAAKJ,CAAQ,EAC7BC,EAAU,eACbA,EAAU,aAAe,KAG3BA,EAAU,cAAiBI,GAAwB,EAQ7CA,IAAgBR,GAAkB,CAACQ,IACrCF,EAAa,CAEjB,EAOA,WAAWA,EAAc,IAAI,CAC/B,CACA,OAAO,UAAU,KAAKF,CAAS,CACjC,CACF,CACF,CAGA,SAASG,EAAKJ,EAAkC,CAC9C,IAAIM,EAAS,GACb,MAAO,IAAM,CACNA,IACHA,EAAS,GACTN,EAAS,EAEb,CACF,CAEA,SAASD,EAAaD,EAA4B,CAE5C,OAAO,YAAc,QACvB,OAAO,UAAU,KAAKS,EAAAL,EAAA,GACjBJ,GADiB,CAEpB,cAAe,MACjB,EAAC,EAIH,IAAME,EAAWF,EAAM,cACnBE,IAAa,QACf,WAAWA,EAAU,CAAC,CAE1B",
  "names": ["init_define_process_env", "apiTagTypeToGTM", "init_define_process_env", "safePusher", "gtmContainerId", "event", "simulatePush", "callback", "safeEvent", "__spreadValues", "onceCallback", "once", "containerId", "called", "__spreadProps"]
}