@se-studio/brightline-shared 0.0.4 → 0.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/dist/adapters/BrightlineAnalyticsAdapter.d.ts +4 -0
  2. package/dist/adapters/BrightlineAnalyticsAdapter.d.ts.map +1 -0
  3. package/dist/adapters/BrightlineAnalyticsAdapter.js +26 -0
  4. package/dist/adapters/BrightlineAnalyticsAdapter.js.map +1 -0
  5. package/dist/components/GTMScript.d.ts +5 -0
  6. package/dist/components/GTMScript.d.ts.map +1 -0
  7. package/dist/components/GTMScript.js +37 -0
  8. package/dist/components/GTMScript.js.map +1 -0
  9. package/dist/components/NavigationEvents.d.ts +5 -0
  10. package/dist/components/NavigationEvents.d.ts.map +1 -0
  11. package/dist/components/NavigationEvents.js +28 -0
  12. package/dist/components/NavigationEvents.js.map +1 -0
  13. package/dist/components/PrivacyFooterLinks.d.ts +2 -0
  14. package/dist/components/PrivacyFooterLinks.d.ts.map +1 -0
  15. package/dist/components/PrivacyFooterLinks.js +26 -0
  16. package/dist/components/PrivacyFooterLinks.js.map +1 -0
  17. package/dist/components/index.d.ts +6 -0
  18. package/dist/components/index.d.ts.map +1 -0
  19. package/dist/components/index.js +4 -0
  20. package/dist/components/index.js.map +1 -0
  21. package/dist/config.d.ts +11 -0
  22. package/dist/config.d.ts.map +1 -0
  23. package/dist/config.js +2 -0
  24. package/dist/config.js.map +1 -0
  25. package/dist/consent/index.d.ts +4 -0
  26. package/dist/consent/index.d.ts.map +1 -0
  27. package/dist/consent/index.js +2 -0
  28. package/dist/consent/index.js.map +1 -0
  29. package/dist/consent/oursPrivacy.d.ts +10 -0
  30. package/dist/consent/oursPrivacy.d.ts.map +1 -0
  31. package/dist/consent/oursPrivacy.js +121 -0
  32. package/dist/consent/oursPrivacy.js.map +1 -0
  33. package/dist/consent/types.d.ts +21 -0
  34. package/dist/consent/types.d.ts.map +1 -0
  35. package/dist/consent/types.js +2 -0
  36. package/dist/consent/types.js.map +1 -0
  37. package/dist/context.d.ts +8 -0
  38. package/dist/context.d.ts.map +1 -0
  39. package/dist/context.js +11 -0
  40. package/dist/context.js.map +1 -0
  41. package/dist/index.d.ts +10 -1
  42. package/dist/index.d.ts.map +1 -1
  43. package/dist/index.js +6 -1
  44. package/dist/index.js.map +1 -1
  45. package/dist/init.d.ts +3 -0
  46. package/dist/init.d.ts.map +1 -0
  47. package/dist/init.js +5 -0
  48. package/dist/init.js.map +1 -0
  49. package/dist/tracking/analytics.d.ts +9 -0
  50. package/dist/tracking/analytics.d.ts.map +1 -0
  51. package/dist/tracking/analytics.js +36 -0
  52. package/dist/tracking/analytics.js.map +1 -0
  53. package/dist/tracking/fbcTracking.d.ts +3 -0
  54. package/dist/tracking/fbcTracking.d.ts.map +1 -0
  55. package/dist/tracking/fbcTracking.js +38 -0
  56. package/dist/tracking/fbcTracking.js.map +1 -0
  57. package/dist/tracking/gtm.d.ts +13 -0
  58. package/dist/tracking/gtm.d.ts.map +1 -0
  59. package/dist/tracking/gtm.js +53 -0
  60. package/dist/tracking/gtm.js.map +1 -0
  61. package/dist/tracking/index.d.ts +6 -0
  62. package/dist/tracking/index.d.ts.map +1 -0
  63. package/dist/tracking/index.js +4 -0
  64. package/dist/tracking/index.js.map +1 -0
  65. package/dist/tracking/landingPageHistory.d.ts +19 -0
  66. package/dist/tracking/landingPageHistory.d.ts.map +1 -0
  67. package/dist/tracking/landingPageHistory.js +123 -0
  68. package/dist/tracking/landingPageHistory.js.map +1 -0
  69. package/dist/tracking/landingPageProperties.d.ts +10 -0
  70. package/dist/tracking/landingPageProperties.d.ts.map +1 -0
  71. package/dist/tracking/landingPageProperties.js +23 -0
  72. package/dist/tracking/landingPageProperties.js.map +1 -0
  73. package/dist/tracking/oursPrivacySdk.d.ts +7 -0
  74. package/dist/tracking/oursPrivacySdk.d.ts.map +1 -0
  75. package/dist/tracking/oursPrivacySdk.js +105 -0
  76. package/dist/tracking/oursPrivacySdk.js.map +1 -0
  77. package/dist/tracking/segment.d.ts +8 -0
  78. package/dist/tracking/segment.d.ts.map +1 -0
  79. package/dist/tracking/segment.js +163 -0
  80. package/dist/tracking/segment.js.map +1 -0
  81. package/package.json +7 -6
@@ -0,0 +1,38 @@
1
+ const FBC_SESSION_KEY = 'fbc_value';
2
+ export function getFbcValue() {
3
+ if (typeof window === 'undefined') {
4
+ return null;
5
+ }
6
+ try {
7
+ const cachedFbc = sessionStorage.getItem(FBC_SESSION_KEY);
8
+ if (cachedFbc) {
9
+ return cachedFbc;
10
+ }
11
+ }
12
+ catch {
13
+ }
14
+ const urlParams = new URLSearchParams(window.location.search);
15
+ const fbclid = urlParams.get('fbclid');
16
+ if (!fbclid) {
17
+ return null;
18
+ }
19
+ const timestamp = Date.now();
20
+ const fbc = `fb.1.${timestamp}.${fbclid}`;
21
+ try {
22
+ sessionStorage.setItem(FBC_SESSION_KEY, fbc);
23
+ }
24
+ catch {
25
+ }
26
+ return fbc;
27
+ }
28
+ export function clearFbcCache() {
29
+ if (typeof window === 'undefined') {
30
+ return;
31
+ }
32
+ try {
33
+ sessionStorage.removeItem(FBC_SESSION_KEY);
34
+ }
35
+ catch {
36
+ }
37
+ }
38
+ //# sourceMappingURL=fbcTracking.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fbcTracking.js","sourceRoot":"","sources":["../../src/tracking/fbcTracking.ts"],"names":[],"mappings":"AAUA,MAAM,eAAe,GAAG,WAAW,CAAC;AAQpC,MAAM,UAAU,WAAW;IACzB,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,cAAc,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;QAC1D,IAAI,SAAS,EAAE,CAAC;YACd,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;IAET,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC9D,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAEvC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,MAAM,GAAG,GAAG,QAAQ,SAAS,IAAI,MAAM,EAAE,CAAC;IAE1C,IAAI,CAAC;QACH,cAAc,CAAC,OAAO,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;IAC/C,CAAC;IAAC,MAAM,CAAC;IAET,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAMD,MAAM,UAAU,aAAa;IAC3B,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QAClC,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,cAAc,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;IAC7C,CAAC;IAAC,MAAM,CAAC;IAET,CAAC;AACH,CAAC"}
@@ -0,0 +1,13 @@
1
+ interface FormSubmitGtmData {
2
+ formName: string;
3
+ data: Record<string, unknown>;
4
+ trackingEventName?: string | null;
5
+ conversionId?: string | null;
6
+ conversionLabel?: string | null;
7
+ sectionLabel?: string | null;
8
+ optIn?: boolean | null;
9
+ partial?: boolean;
10
+ }
11
+ export declare function pushFormSubmitToDataLayer({ formName, data, trackingEventName, conversionId, conversionLabel, sectionLabel, optIn, partial, }: FormSubmitGtmData): void;
12
+ export {};
13
+ //# sourceMappingURL=gtm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gtm.d.ts","sourceRoot":"","sources":["../../src/tracking/gtm.ts"],"names":[],"mappings":"AAwCA,UAAU,iBAAiB;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,KAAK,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAKD,wBAAgB,yBAAyB,CAAC,EACxC,QAAQ,EACR,IAAI,EACJ,iBAAiB,EACjB,YAAY,EACZ,eAAe,EACf,YAAY,EACZ,KAAK,EACL,OAAe,GAChB,EAAE,iBAAiB,GAAG,IAAI,CAiC1B"}
@@ -0,0 +1,53 @@
1
+ import { isCategoryAccepted } from '../consent';
2
+ import { getFbcValue } from './fbcTracking';
3
+ function createFormDataHash(formName, data, conversionId, conversionLabel) {
4
+ const sortedData = Object.keys(data)
5
+ .sort()
6
+ .reduce((result, key) => {
7
+ result[key] = data[key];
8
+ return result;
9
+ }, {});
10
+ const hashInput = JSON.stringify({
11
+ formName,
12
+ data: sortedData,
13
+ conversionId: conversionId || '',
14
+ conversionLabel: conversionLabel || '',
15
+ });
16
+ let hash = 5381;
17
+ for (let i = 0; i < hashInput.length; i++) {
18
+ hash = (hash * 33) ^ hashInput.charCodeAt(i);
19
+ }
20
+ return Math.abs(hash).toString(36);
21
+ }
22
+ export function pushFormSubmitToDataLayer({ formName, data, trackingEventName, conversionId, conversionLabel, sectionLabel, optIn, partial = false, }) {
23
+ if (typeof window === 'undefined' || !window.dataLayer || !isCategoryAccepted('analytics')) {
24
+ return;
25
+ }
26
+ const transactionId = createFormDataHash(formName, data, conversionId, conversionLabel);
27
+ const fbclid = getFbcValue();
28
+ window.dataLayer.push({
29
+ event: 'form_submit',
30
+ transaction_id: transactionId,
31
+ form_name: formName,
32
+ tracking_event_name: trackingEventName || '',
33
+ conversion_id: conversionId || '',
34
+ conversion_label: conversionLabel || '',
35
+ section_label: sectionLabel || undefined,
36
+ opt_in: optIn ?? false,
37
+ partial,
38
+ fbclid: fbclid ?? undefined,
39
+ });
40
+ window.dataLayer.push({
41
+ event: 'clear_data_layer',
42
+ transaction_id: '',
43
+ form_name: undefined,
44
+ tracking_event_name: '',
45
+ conversion_id: '',
46
+ conversion_label: '',
47
+ section_label: undefined,
48
+ opt_in: undefined,
49
+ partial: undefined,
50
+ fbclid: undefined,
51
+ });
52
+ }
53
+ //# sourceMappingURL=gtm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gtm.js","sourceRoot":"","sources":["../../src/tracking/gtm.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAK5C,SAAS,kBAAkB,CACzB,QAAgB,EAChB,IAA6B,EAC7B,YAA4B,EAC5B,eAA+B;IAE/B,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;SACjC,IAAI,EAAE;SACN,MAAM,CACL,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;QACd,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;QACxB,OAAO,MAAM,CAAC;IAChB,CAAC,EACD,EAA6B,CAC9B,CAAC;IAEJ,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QAC/B,QAAQ;QACR,IAAI,EAAE,UAAU;QAChB,YAAY,EAAE,YAAY,IAAI,EAAE;QAChC,eAAe,EAAE,eAAe,IAAI,EAAE;KACvC,CAAC,CAAC;IAEH,IAAI,IAAI,GAAG,IAAI,CAAC;IAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC1C,IAAI,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC;IACD,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACrC,CAAC;AAgBD,MAAM,UAAU,yBAAyB,CAAC,EACxC,QAAQ,EACR,IAAI,EACJ,iBAAiB,EACjB,YAAY,EACZ,eAAe,EACf,YAAY,EACZ,KAAK,EACL,OAAO,GAAG,KAAK,GACG;IAClB,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,EAAE,CAAC;QAC3F,OAAO;IACT,CAAC;IAED,MAAM,aAAa,GAAG,kBAAkB,CAAC,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,eAAe,CAAC,CAAC;IACxF,MAAM,MAAM,GAAG,WAAW,EAAE,CAAC;IAE7B,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;QACpB,KAAK,EAAE,aAAa;QACpB,cAAc,EAAE,aAAa;QAC7B,SAAS,EAAE,QAAQ;QACnB,mBAAmB,EAAE,iBAAiB,IAAI,EAAE;QAC5C,aAAa,EAAE,YAAY,IAAI,EAAE;QACjC,gBAAgB,EAAE,eAAe,IAAI,EAAE;QACvC,aAAa,EAAE,YAAY,IAAI,SAAS;QACxC,MAAM,EAAE,KAAK,IAAI,KAAK;QACtB,OAAO;QACP,MAAM,EAAE,MAAM,IAAI,SAAS;KAC5B,CAAC,CAAC;IAEH,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;QACpB,KAAK,EAAE,kBAAkB;QACzB,cAAc,EAAE,EAAE;QAClB,SAAS,EAAE,SAAS;QACpB,mBAAmB,EAAE,EAAE;QACvB,aAAa,EAAE,EAAE;QACjB,gBAAgB,EAAE,EAAE;QACpB,aAAa,EAAE,SAAS;QACxB,MAAM,EAAE,SAAS;QACjB,OAAO,EAAE,SAAS;QAClB,MAAM,EAAE,SAAS;KAClB,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,6 @@
1
+ export { analyticsButtonClick, analyticsFormSubmit, analyticsPageView, analyticsTrack, analyticsTrackingEventName, buildLandingPageProperties, } from './analytics';
2
+ export { clearFbcCache, getFbcValue } from './fbcTracking';
3
+ export type { LandingPageInformation } from './landingPageHistory';
4
+ export { cleanupFirstLp, recordLandingPageIfRequired, tryGetLandingPageInformation, useAugmentedHref, useLandingPageInformationToBuildSignupUrl, } from './landingPageHistory';
5
+ export type { LandingPageProperties } from './landingPageProperties';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tracking/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,iBAAiB,EACjB,cAAc,EACd,0BAA0B,EAC1B,0BAA0B,GAC3B,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC3D,YAAY,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EACL,cAAc,EACd,2BAA2B,EAC3B,4BAA4B,EAC5B,gBAAgB,EAChB,yCAAyC,GAC1C,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { analyticsButtonClick, analyticsFormSubmit, analyticsPageView, analyticsTrack, analyticsTrackingEventName, buildLandingPageProperties, } from './analytics';
2
+ export { clearFbcCache, getFbcValue } from './fbcTracking';
3
+ export { cleanupFirstLp, recordLandingPageIfRequired, tryGetLandingPageInformation, useAugmentedHref, useLandingPageInformationToBuildSignupUrl, } from './landingPageHistory';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tracking/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,iBAAiB,EACjB,cAAc,EACd,0BAA0B,EAC1B,0BAA0B,GAC3B,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE3D,OAAO,EACL,cAAc,EACd,2BAA2B,EAC3B,4BAA4B,EAC5B,gBAAgB,EAChB,yCAAyC,GAC1C,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,19 @@
1
+ interface LocationData {
2
+ pathname: string;
3
+ search: string;
4
+ href: string;
5
+ hash: string;
6
+ origin: string;
7
+ }
8
+ export interface LandingPageInformation {
9
+ referrer: string;
10
+ location: LocationData;
11
+ lang: string;
12
+ }
13
+ export declare function recordLandingPageIfRequired(lang: string): Promise<void>;
14
+ export declare function tryGetLandingPageInformation(): LandingPageInformation | undefined;
15
+ export declare function useAugmentedHref(href: string): string;
16
+ export declare function useLandingPageInformationToBuildSignupUrl(isEnterprisePage: boolean | null, currentPath: string | undefined, lang: string | undefined): string;
17
+ export declare function cleanupFirstLp(firstLp: string | null | undefined): string | null | undefined;
18
+ export {};
19
+ //# sourceMappingURL=landingPageHistory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"landingPageHistory.d.ts","sourceRoot":"","sources":["../../src/tracking/landingPageHistory.ts"],"names":[],"mappings":"AAQA,UAAU,YAAY;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,YAAY,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;CACd;AAKD,wBAAsB,2BAA2B,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA0B7E;AAED,wBAAgB,4BAA4B,IAAI,sBAAsB,GAAG,SAAS,CAajF;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAoBrD;AA0DD,wBAAgB,yCAAyC,CACvD,gBAAgB,EAAE,OAAO,GAAG,IAAI,EAChC,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,IAAI,EAAE,MAAM,GAAG,SAAS,GACvB,MAAM,CAeR;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAK5F"}
@@ -0,0 +1,123 @@
1
+ 'use client';
2
+ import { useEffect, useState } from 'react';
3
+ import { useBrightlineConfig } from '../context';
4
+ const LandingPageInformationKey = 'landing-page';
5
+ export async function recordLandingPageIfRequired(lang) {
6
+ if (typeof window === 'undefined')
7
+ return;
8
+ const storage = window.sessionStorage;
9
+ if (!storage)
10
+ return;
11
+ const current = storage.getItem(LandingPageInformationKey);
12
+ const currentInformation = current
13
+ ? JSON.parse(current)
14
+ : undefined;
15
+ const locationData = {
16
+ pathname: window.location.pathname,
17
+ search: window.location.search,
18
+ href: window.location.href,
19
+ hash: window.location.hash,
20
+ origin: window.location.origin,
21
+ };
22
+ const information = {
23
+ referrer: currentInformation?.referrer ?? document.referrer,
24
+ location: currentInformation?.location ?? locationData,
25
+ lang,
26
+ };
27
+ storage.setItem(LandingPageInformationKey, JSON.stringify(information));
28
+ }
29
+ export function tryGetLandingPageInformation() {
30
+ if (typeof window === 'undefined')
31
+ return undefined;
32
+ const storage = window.sessionStorage;
33
+ if (!storage)
34
+ return undefined;
35
+ const current = storage.getItem(LandingPageInformationKey);
36
+ if (!current)
37
+ return undefined;
38
+ const information = JSON.parse(current);
39
+ if (!information.location)
40
+ return undefined;
41
+ return information;
42
+ }
43
+ export function useAugmentedHref(href) {
44
+ const [augmentedHref, setAugmentedHref] = useState(href);
45
+ useEffect(() => {
46
+ const anonymous_id = window.localStorage.getItem('ajs_anonymous_id');
47
+ const ours_user_id = window.localStorage.getItem('ours_device_id');
48
+ if (anonymous_id || ours_user_id) {
49
+ const url = new URL(href);
50
+ if (anonymous_id) {
51
+ url.searchParams.set('anonymous_id', anonymous_id.replaceAll('"', ''));
52
+ }
53
+ if (ours_user_id) {
54
+ url.searchParams.set('ours_user_id', ours_user_id.replaceAll('"', ''));
55
+ }
56
+ setAugmentedHref(url.href);
57
+ }
58
+ }, [href]);
59
+ return augmentedHref;
60
+ }
61
+ function buildUrl(config, isEnterprisePage, currentPath, lang, information) {
62
+ const signUpUrl = config?.signUpUrl ?? 'https://app.hellobrightline.com/sign_up';
63
+ const isKids = config?.site === 'kids';
64
+ const url = new URL(signUpUrl);
65
+ const search = information?.location.search;
66
+ if (search) {
67
+ url.search = search;
68
+ }
69
+ if (lang) {
70
+ url.searchParams.set('locale', lang);
71
+ }
72
+ if (typeof window !== 'undefined') {
73
+ const anonymous_id = window.localStorage.getItem('ajs_anonymous_id');
74
+ if (anonymous_id) {
75
+ url.searchParams.set('anonymous_id', anonymous_id.replaceAll('"', ''));
76
+ }
77
+ const ours_user_id = window.localStorage.getItem('ours_device_id');
78
+ if (ours_user_id) {
79
+ url.searchParams.set('ours_user_id', ours_user_id.replaceAll('"', ''));
80
+ }
81
+ }
82
+ if (!isKids && isEnterprisePage && !url.searchParams.has('enterprise')) {
83
+ url.searchParams.set('enterprise', 'True');
84
+ }
85
+ if (isKids) {
86
+ url.searchParams.set('first_lp', 'brightlifekids');
87
+ }
88
+ else if (currentPath?.includes('/brightlifekids')) {
89
+ const firstLp = cleanupFirstLp(currentPath);
90
+ if (firstLp) {
91
+ url.searchParams.set('first_lp', firstLp);
92
+ }
93
+ }
94
+ else {
95
+ const pathname = information?.location.pathname;
96
+ if (pathname) {
97
+ const firstLp = cleanupFirstLp(pathname);
98
+ if (firstLp) {
99
+ url.searchParams.set('first_lp', firstLp);
100
+ }
101
+ }
102
+ }
103
+ return url.href;
104
+ }
105
+ export function useLandingPageInformationToBuildSignupUrl(isEnterprisePage, currentPath, lang) {
106
+ const config = useBrightlineConfig();
107
+ const [fullHref, setFullHref] = useState(() => buildUrl(config, isEnterprisePage, currentPath, lang));
108
+ useEffect(() => {
109
+ const landingPageInformation = tryGetLandingPageInformation();
110
+ if (landingPageInformation) {
111
+ const href = buildUrl(config, isEnterprisePage, currentPath, lang, landingPageInformation);
112
+ setFullHref(href);
113
+ }
114
+ }, [config, isEnterprisePage, currentPath, lang]);
115
+ return fullHref;
116
+ }
117
+ export function cleanupFirstLp(firstLp) {
118
+ if (firstLp?.endsWith('/')) {
119
+ return firstLp.substring(0, firstLp.length - 1);
120
+ }
121
+ return firstLp;
122
+ }
123
+ //# sourceMappingURL=landingPageHistory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"landingPageHistory.js","sourceRoot":"","sources":["../../src/tracking/landingPageHistory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export interface LandingPageProperties {
2
+ first_lp?: string;
3
+ first_referrer?: string;
4
+ first_parameters?: string;
5
+ lang?: string;
6
+ fbclid?: string;
7
+ [key: string]: string | undefined;
8
+ }
9
+ export declare function buildLandingPageProperties(): LandingPageProperties | undefined;
10
+ //# sourceMappingURL=landingPageProperties.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"landingPageProperties.d.ts","sourceRoot":"","sources":["../../src/tracking/landingPageProperties.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;CACnC;AAKD,wBAAgB,0BAA0B,IAAI,qBAAqB,GAAG,SAAS,CAwB9E"}
@@ -0,0 +1,23 @@
1
+ import { getFbcValue } from './fbcTracking';
2
+ import { cleanupFirstLp, tryGetLandingPageInformation } from './landingPageHistory';
3
+ export function buildLandingPageProperties() {
4
+ const information = tryGetLandingPageInformation();
5
+ if (!information) {
6
+ return undefined;
7
+ }
8
+ const url = new URL(information.location.href);
9
+ const queryParams = {};
10
+ url.searchParams.forEach((value, key) => {
11
+ queryParams[key] = value;
12
+ });
13
+ const fbclid = getFbcValue();
14
+ return {
15
+ first_lp: cleanupFirstLp(information.location.pathname) ?? undefined,
16
+ first_referrer: information.referrer,
17
+ first_parameters: url.search,
18
+ lang: information.lang,
19
+ ...queryParams,
20
+ fbclid: fbclid ?? undefined,
21
+ };
22
+ }
23
+ //# sourceMappingURL=landingPageProperties.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"landingPageProperties.js","sourceRoot":"","sources":["../../src/tracking/landingPageProperties.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,4BAA4B,EAAE,MAAM,sBAAsB,CAAC;AAcpF,MAAM,UAAU,0BAA0B;IACxC,MAAM,WAAW,GAAG,4BAA4B,EAAE,CAAC;IAEnD,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAE/C,MAAM,WAAW,GAA2B,EAAE,CAAC;IAC/C,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACtC,WAAW,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,WAAW,EAAE,CAAC;IAE7B,OAAO;QACL,QAAQ,EAAE,cAAc,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,SAAS;QACpE,cAAc,EAAE,WAAW,CAAC,QAAQ;QACpC,gBAAgB,EAAE,GAAG,CAAC,MAAM;QAC5B,IAAI,EAAE,WAAW,CAAC,IAAI;QACtB,GAAG,WAAW;QACd,MAAM,EAAE,MAAM,IAAI,SAAS;KAC5B,CAAC;AACJ,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { EventProperties } from '@segment/analytics-next';
2
+ import type { BrightlineSharedConfig } from '../config';
3
+ export declare function initializeOursPrivacy(config: BrightlineSharedConfig): Promise<boolean>;
4
+ export declare function reportFormSubmitToOurPrivacy<T extends EventProperties>(formName: string, sectionLabel: string | null | undefined, optIn: boolean | null, trackingEventName: string | null | undefined, data: T, partial?: boolean, conversionId?: string | null, conversionLabel?: string | null): Promise<void>;
5
+ export declare function reportButtonClickToOurPrivacy<T extends EventProperties>(sectionLabel: string | null | undefined, trackingEventName: string | null | undefined, data?: T, conversionId?: string | null, conversionLabel?: string | null): Promise<void>;
6
+ export declare function trackWithOurPrivacy<T extends EventProperties>(eventName: string, data: T): Promise<void>;
7
+ //# sourceMappingURL=oursPrivacySdk.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oursPrivacySdk.d.ts","sourceRoot":"","sources":["../../src/tracking/oursPrivacySdk.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAUxD,wBAAsB,qBAAqB,CAAC,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,OAAO,CAAC,CAoC5F;AAKD,wBAAsB,4BAA4B,CAAC,CAAC,SAAS,eAAe,EAC1E,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACvC,KAAK,EAAE,OAAO,GAAG,IAAI,EACrB,iBAAiB,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAC5C,IAAI,EAAE,CAAC,EACP,OAAO,CAAC,EAAE,OAAO,EACjB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,EAC5B,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,GAC9B,OAAO,CAAC,IAAI,CAAC,CA+Bf;AAKD,wBAAsB,6BAA6B,CAAC,CAAC,SAAS,eAAe,EAC3E,YAAY,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACvC,iBAAiB,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAC5C,IAAI,CAAC,EAAE,CAAC,EACR,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,EAC5B,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,GAC9B,OAAO,CAAC,IAAI,CAAC,CAsBf;AAKD,wBAAsB,mBAAmB,CAAC,CAAC,SAAS,eAAe,EACjE,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,CAAC,GACN,OAAO,CAAC,IAAI,CAAC,CAef"}
@@ -0,0 +1,105 @@
1
+ import ours from '@oursprivacy/cdp-sdk';
2
+ import { waitForOursCMP } from '../consent';
3
+ import { buildLandingPageProperties } from './landingPageProperties';
4
+ let isInitialized = false;
5
+ let initPromise = null;
6
+ export async function initializeOursPrivacy(config) {
7
+ if (initPromise) {
8
+ return initPromise;
9
+ }
10
+ initPromise = (async () => {
11
+ if (typeof window === 'undefined') {
12
+ return false;
13
+ }
14
+ const writeKey = config.oursPrivacyKey;
15
+ const domains = config.oursPrivacyDomains;
16
+ if (!writeKey || !domains) {
17
+ return false;
18
+ }
19
+ await waitForOursCMP();
20
+ try {
21
+ ours.init(writeKey, {
22
+ custom_domain: domains.custom_domain,
23
+ force_ipv4: true,
24
+ custom_domain_ipv4: domains.custom_domain_ipv4,
25
+ track_web_events: true,
26
+ enhanced_web_events: true,
27
+ });
28
+ isInitialized = true;
29
+ return true;
30
+ }
31
+ catch (error) {
32
+ console.error('Failed to initialize OurPrivacy:', error);
33
+ return false;
34
+ }
35
+ })();
36
+ return initPromise;
37
+ }
38
+ export async function reportFormSubmitToOurPrivacy(formName, sectionLabel, optIn, trackingEventName, data, partial, conversionId, conversionLabel) {
39
+ if (!isInitialized) {
40
+ return;
41
+ }
42
+ try {
43
+ const realData = sectionLabel
44
+ ? {
45
+ ...data,
46
+ sectionLabel,
47
+ formName,
48
+ partial: partial ?? false,
49
+ optIn: optIn ?? false,
50
+ }
51
+ : data;
52
+ const properties = {
53
+ ...(buildLandingPageProperties() ?? {}),
54
+ trackingEventName: trackingEventName ?? undefined,
55
+ conversionId: conversionId ?? undefined,
56
+ conversionLabel: conversionLabel ?? undefined,
57
+ ...realData,
58
+ };
59
+ ours.track('form_submitted', properties);
60
+ if (trackingEventName) {
61
+ ours.track(trackingEventName, properties);
62
+ }
63
+ }
64
+ catch (error) {
65
+ console.error('Failed to track form submission with OurPrivacy:', error);
66
+ }
67
+ }
68
+ export async function reportButtonClickToOurPrivacy(sectionLabel, trackingEventName, data, conversionId, conversionLabel) {
69
+ if (!isInitialized) {
70
+ return;
71
+ }
72
+ try {
73
+ const properties = {
74
+ ...(buildLandingPageProperties() ?? {}),
75
+ trackingEventName: trackingEventName ?? undefined,
76
+ sectionLabel: sectionLabel ?? undefined,
77
+ conversionId: conversionId ?? undefined,
78
+ conversionLabel: conversionLabel ?? undefined,
79
+ ...data,
80
+ };
81
+ ours.track('button_clicked', properties);
82
+ if (trackingEventName) {
83
+ ours.track(trackingEventName, properties);
84
+ }
85
+ }
86
+ catch (error) {
87
+ console.error('Failed to track button click with OurPrivacy:', error);
88
+ }
89
+ }
90
+ export async function trackWithOurPrivacy(eventName, data) {
91
+ if (!isInitialized) {
92
+ return;
93
+ }
94
+ try {
95
+ const properties = {
96
+ ...(buildLandingPageProperties() ?? {}),
97
+ ...data,
98
+ };
99
+ ours.track(eventName, properties);
100
+ }
101
+ catch (error) {
102
+ console.error(`Failed to track event "${eventName}" with OurPrivacy:`, error);
103
+ }
104
+ }
105
+ //# sourceMappingURL=oursPrivacySdk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oursPrivacySdk.js","sourceRoot":"","sources":["../../src/tracking/oursPrivacySdk.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { EventProperties } from '@segment/analytics-next';
2
+ import type { BrightlineSharedConfig } from '../config';
3
+ export declare function SegmentPageView(config: BrightlineSharedConfig | undefined, path: string): Promise<void>;
4
+ export declare function reportFormSubmit<T extends EventProperties>(config: BrightlineSharedConfig | undefined, formName: string, sectionLabel: string | null | undefined, optIn: boolean | null, trackingEventName: string | null | undefined, data: T, partial?: boolean, conversionId?: string | null, conversionLabel?: string | null): Promise<void>;
5
+ export declare function reportTrackingEventName<T extends EventProperties>(config: BrightlineSharedConfig | undefined, sectionLabel: string | null | undefined, trackingEventName: string | null | undefined, data?: T): Promise<void>;
6
+ export declare function reportButtonClick<T extends EventProperties>(config: BrightlineSharedConfig | undefined, sectionLabel: string | null | undefined, trackingEventName: string | null | undefined, data?: T, conversionId?: string | null, conversionLabel?: string | null): Promise<void>;
7
+ export declare function trackWithSegment<T extends EventProperties>(config: BrightlineSharedConfig | undefined, eventName: string, data: T): Promise<void>;
8
+ //# sourceMappingURL=segment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"segment.d.ts","sourceRoot":"","sources":["../../src/tracking/segment.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE/D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAyDxD,wBAAsB,eAAe,CACnC,MAAM,EAAE,sBAAsB,GAAG,SAAS,EAC1C,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,IAAI,CAAC,CAef;AAED,wBAAsB,gBAAgB,CAAC,CAAC,SAAS,eAAe,EAC9D,MAAM,EAAE,sBAAsB,GAAG,SAAS,EAC1C,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACvC,KAAK,EAAE,OAAO,GAAG,IAAI,EACrB,iBAAiB,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAC5C,IAAI,EAAE,CAAC,EACP,OAAO,CAAC,EAAE,OAAO,EACjB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,EAC5B,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,GAC9B,OAAO,CAAC,IAAI,CAAC,CAuCf;AAED,wBAAsB,uBAAuB,CAAC,CAAC,SAAS,eAAe,EACrE,MAAM,EAAE,sBAAsB,GAAG,SAAS,EAC1C,YAAY,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACvC,iBAAiB,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAC5C,IAAI,CAAC,EAAE,CAAC,GACP,OAAO,CAAC,IAAI,CAAC,CAgBf;AAED,wBAAsB,iBAAiB,CAAC,CAAC,SAAS,eAAe,EAC/D,MAAM,EAAE,sBAAsB,GAAG,SAAS,EAC1C,YAAY,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACvC,iBAAiB,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAC5C,IAAI,CAAC,EAAE,CAAC,EACR,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,EAC5B,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,GAC9B,OAAO,CAAC,IAAI,CAAC,CA2Cf;AAED,wBAAsB,gBAAgB,CAAC,CAAC,SAAS,eAAe,EAC9D,MAAM,EAAE,sBAAsB,GAAG,SAAS,EAC1C,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,CAAC,GACN,OAAO,CAAC,IAAI,CAAC,CAcf"}
@@ -0,0 +1,163 @@
1
+ import { AnalyticsBrowser } from '@segment/analytics-next';
2
+ import { isCategoryAccepted, onConsentReady } from '../consent';
3
+ import { getFbcValue } from './fbcTracking';
4
+ import { pushFormSubmitToDataLayer } from './gtm';
5
+ import { buildLandingPageProperties } from './landingPageProperties';
6
+ let analytics = null;
7
+ let consentListenerAttached = false;
8
+ function getWriteKey(config) {
9
+ if (typeof window === 'undefined')
10
+ return undefined;
11
+ return config?.segmentWriteKey;
12
+ }
13
+ function createAnalytics(config) {
14
+ if (typeof window === 'undefined') {
15
+ return null;
16
+ }
17
+ if (!isCategoryAccepted('analytics')) {
18
+ return null;
19
+ }
20
+ const writeKey = getWriteKey(config);
21
+ if (!writeKey) {
22
+ return null;
23
+ }
24
+ if (window.dataLayer) {
25
+ window.dataLayer.push({
26
+ event: 'clear_data_layer',
27
+ transaction_id: '',
28
+ tracking_event_name: '',
29
+ conversion_id: '',
30
+ conversion_label: '',
31
+ fbclid: '',
32
+ });
33
+ }
34
+ return AnalyticsBrowser.load({ writeKey }, { initialPageview: false });
35
+ }
36
+ function ensureConsentListener(config) {
37
+ if (typeof window === 'undefined' || consentListenerAttached) {
38
+ return;
39
+ }
40
+ consentListenerAttached = true;
41
+ onConsentReady((categories) => {
42
+ if (categories.includes('analytics') && !analytics) {
43
+ analytics = createAnalytics(config);
44
+ }
45
+ });
46
+ }
47
+ export async function SegmentPageView(config, path) {
48
+ ensureConsentListener(config);
49
+ if (!analytics) {
50
+ analytics = createAnalytics(config);
51
+ }
52
+ if (analytics) {
53
+ const properties = {
54
+ ...(buildLandingPageProperties() ?? {}),
55
+ path,
56
+ url: typeof window !== 'undefined' ? window.location.href : '',
57
+ };
58
+ await analytics.page(properties);
59
+ }
60
+ }
61
+ export async function reportFormSubmit(config, formName, sectionLabel, optIn, trackingEventName, data, partial, conversionId, conversionLabel) {
62
+ ensureConsentListener(config);
63
+ if (!analytics) {
64
+ analytics = createAnalytics(config);
65
+ }
66
+ if (analytics) {
67
+ const realData = sectionLabel
68
+ ? {
69
+ ...data,
70
+ sectionLabel,
71
+ formName,
72
+ partial: partial ?? false,
73
+ optIn: optIn ?? false,
74
+ }
75
+ : data;
76
+ const properties = {
77
+ ...(buildLandingPageProperties() ?? {}),
78
+ trackingEventName: trackingEventName ?? undefined,
79
+ conversionId: conversionId ?? undefined,
80
+ conversionLabel: conversionLabel ?? undefined,
81
+ ...realData,
82
+ };
83
+ await analytics.track('FormSubmit', properties);
84
+ }
85
+ pushFormSubmitToDataLayer({
86
+ formName,
87
+ data,
88
+ trackingEventName,
89
+ conversionId,
90
+ conversionLabel,
91
+ sectionLabel,
92
+ optIn,
93
+ partial,
94
+ });
95
+ }
96
+ export async function reportTrackingEventName(config, sectionLabel, trackingEventName, data) {
97
+ ensureConsentListener(config);
98
+ if (!analytics) {
99
+ analytics = createAnalytics(config);
100
+ }
101
+ if (analytics && trackingEventName) {
102
+ const properties = {
103
+ ...(buildLandingPageProperties() ?? {}),
104
+ trackingEventName,
105
+ sectionLabel: sectionLabel ?? undefined,
106
+ ...data,
107
+ };
108
+ await analytics.track(trackingEventName, properties);
109
+ }
110
+ }
111
+ export async function reportButtonClick(config, sectionLabel, trackingEventName, data, conversionId, conversionLabel) {
112
+ ensureConsentListener(config);
113
+ if (!analytics) {
114
+ analytics = createAnalytics(config);
115
+ }
116
+ if (analytics) {
117
+ const properties = {
118
+ ...(buildLandingPageProperties() ?? {}),
119
+ trackingEventName: trackingEventName ?? undefined,
120
+ sectionLabel: sectionLabel ?? undefined,
121
+ conversionId: conversionId ?? undefined,
122
+ conversionLabel: conversionLabel ?? undefined,
123
+ ...data,
124
+ };
125
+ if (trackingEventName) {
126
+ await reportTrackingEventName(config, sectionLabel, trackingEventName, data);
127
+ }
128
+ await analytics.track('ButtonClick', properties);
129
+ }
130
+ if (typeof window !== 'undefined' && window.dataLayer && isCategoryAccepted('analytics')) {
131
+ const fbclid = getFbcValue();
132
+ window.dataLayer.push({
133
+ event: 'button_click',
134
+ tracking_event_name: trackingEventName || '',
135
+ conversion_id: conversionId || '',
136
+ conversion_label: conversionLabel || '',
137
+ section_label: sectionLabel || undefined,
138
+ fbclid: fbclid ?? undefined,
139
+ });
140
+ window.dataLayer.push({
141
+ event: 'clear_data_layer',
142
+ tracking_event_name: '',
143
+ conversion_id: '',
144
+ conversion_label: '',
145
+ section_label: undefined,
146
+ fbclid: undefined,
147
+ });
148
+ }
149
+ }
150
+ export async function trackWithSegment(config, eventName, data) {
151
+ ensureConsentListener(config);
152
+ if (!analytics) {
153
+ analytics = createAnalytics(config);
154
+ }
155
+ if (analytics) {
156
+ const properties = {
157
+ ...(buildLandingPageProperties() ?? {}),
158
+ ...data,
159
+ };
160
+ await analytics.track(eventName, properties);
161
+ }
162
+ }
163
+ //# sourceMappingURL=segment.js.map