@c15t/scripts 2.2.0 → 3.0.0-alpha.1

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 (202) hide show
  1. package/AGENTS.md +77 -48
  2. package/README.md +4 -3
  3. package/dist/e2e-test-utils.js +60 -24
  4. package/dist/engine/compile.js +45 -45
  5. package/dist/engine/runtime.js +130 -119
  6. package/dist/registry.js +196 -176
  7. package/dist/resolve.js +12 -12
  8. package/dist/vendors/_shared/attributes.js +5 -5
  9. package/dist/vendors/_shared/google-consent.js +10 -10
  10. package/dist/vendors/_shared/install-builders.js +9 -9
  11. package/dist/vendors/_shared/script-url.js +12 -12
  12. package/dist/vendors/ads-and-pixels/linkedin-insights.js +16 -16
  13. package/dist/vendors/ads-and-pixels/meta-pixel.js +82 -82
  14. package/dist/vendors/ads-and-pixels/microsoft-uet.js +57 -57
  15. package/dist/vendors/ads-and-pixels/openai-pixel.js +88 -0
  16. package/dist/vendors/ads-and-pixels/reddit-pixel.js +39 -39
  17. package/dist/vendors/ads-and-pixels/snapchat-pixel.js +25 -25
  18. package/dist/vendors/ads-and-pixels/tiktok-pixel.js +31 -31
  19. package/dist/vendors/ads-and-pixels/x-pixel.js +17 -17
  20. package/dist/vendors/analytics/adobe-analytics.js +17 -17
  21. package/dist/vendors/analytics/ahrefs-analytics.js +8 -8
  22. package/dist/vendors/analytics/amplitude.js +39 -39
  23. package/dist/vendors/analytics/clearbit.js +11 -11
  24. package/dist/vendors/analytics/cloudflare-web-analytics.js +13 -13
  25. package/dist/vendors/analytics/databuddy.js +45 -45
  26. package/dist/vendors/analytics/fathom-analytics.js +15 -15
  27. package/dist/vendors/analytics/google-tag.js +23 -23
  28. package/dist/vendors/analytics/heap.js +37 -37
  29. package/dist/vendors/analytics/hightouch.js +30 -30
  30. package/dist/vendors/analytics/hotjar.js +14 -14
  31. package/dist/vendors/analytics/logrocket.js +24 -24
  32. package/dist/vendors/analytics/matomo-analytics.js +51 -51
  33. package/dist/vendors/analytics/microsoft-clarity.js +34 -31
  34. package/dist/vendors/analytics/mixpanel-analytics.js +31 -31
  35. package/dist/vendors/analytics/pirsch.js +27 -27
  36. package/dist/vendors/analytics/plausible-analytics.js +24 -24
  37. package/dist/vendors/analytics/posthog.js +84 -79
  38. package/dist/vendors/analytics/promptwatch.js +8 -8
  39. package/dist/vendors/analytics/rudderstack.js +50 -50
  40. package/dist/vendors/analytics/rybbit-analytics.js +30 -30
  41. package/dist/vendors/analytics/segment.js +16 -16
  42. package/dist/vendors/analytics/umami-analytics.js +16 -16
  43. package/dist/vendors/analytics/vercel-analytics.js +22 -22
  44. package/dist/vendors/functional/crisp.js +49 -51
  45. package/dist/vendors/functional/intercom.js +18 -18
  46. package/dist/vendors/tag-managers/cloudflare-zaraz.js +98 -0
  47. package/dist/vendors/tag-managers/google-tag-manager.js +20 -20
  48. package/dist-types/__tests__/helpers.d.ts +11 -11
  49. package/dist-types/engine/compile.d.ts +3 -3
  50. package/dist-types/engine/runtime.d.ts +3 -3
  51. package/dist-types/registry.d.ts +191 -173
  52. package/dist-types/resolve.d.ts +3 -3
  53. package/dist-types/types.d.ts +2 -2
  54. package/dist-types/vendors/_shared/attributes.d.ts +2 -2
  55. package/dist-types/vendors/_shared/google-consent.d.ts +2 -2
  56. package/dist-types/vendors/_shared/install-builders.d.ts +2 -2
  57. package/dist-types/vendors/_shared/script-url.d.ts +6 -6
  58. package/dist-types/vendors/ads-and-pixels/linkedin-insights.d.ts +14 -14
  59. package/dist-types/vendors/ads-and-pixels/meta-pixel.d.ts +27 -27
  60. package/dist-types/vendors/ads-and-pixels/microsoft-uet.d.ts +40 -40
  61. package/dist-types/vendors/ads-and-pixels/openai-pixel.d.ts +211 -0
  62. package/dist-types/vendors/ads-and-pixels/reddit-pixel.d.ts +28 -29
  63. package/dist-types/vendors/ads-and-pixels/snapchat-pixel.d.ts +23 -23
  64. package/dist-types/vendors/ads-and-pixels/tiktok-pixel.d.ts +22 -22
  65. package/dist-types/vendors/ads-and-pixels/x-pixel.d.ts +15 -15
  66. package/dist-types/vendors/analytics/adobe-analytics.d.ts +3 -3
  67. package/dist-types/vendors/analytics/ahrefs-analytics.d.ts +5 -5
  68. package/dist-types/vendors/analytics/amplitude.d.ts +24 -24
  69. package/dist-types/vendors/analytics/clearbit.d.ts +5 -5
  70. package/dist-types/vendors/analytics/cloudflare-web-analytics.d.ts +6 -6
  71. package/dist-types/vendors/analytics/databuddy.d.ts +34 -31
  72. package/dist-types/vendors/analytics/fathom-analytics.d.ts +8 -8
  73. package/dist-types/vendors/analytics/google-tag.d.ts +17 -17
  74. package/dist-types/vendors/analytics/heap.d.ts +17 -17
  75. package/dist-types/vendors/analytics/hightouch.d.ts +15 -15
  76. package/dist-types/vendors/analytics/hotjar.d.ts +9 -9
  77. package/dist-types/vendors/analytics/logrocket.d.ts +11 -11
  78. package/dist-types/vendors/analytics/matomo-analytics.d.ts +3 -3
  79. package/dist-types/vendors/analytics/microsoft-clarity.d.ts +12 -13
  80. package/dist-types/vendors/analytics/mixpanel-analytics.d.ts +20 -20
  81. package/dist-types/vendors/analytics/pirsch.d.ts +10 -10
  82. package/dist-types/vendors/analytics/plausible-analytics.d.ts +13 -13
  83. package/dist-types/vendors/analytics/posthog.d.ts +35 -32
  84. package/dist-types/vendors/analytics/promptwatch.d.ts +5 -5
  85. package/dist-types/vendors/analytics/rudderstack.d.ts +16 -16
  86. package/dist-types/vendors/analytics/rybbit-analytics.d.ts +15 -15
  87. package/dist-types/vendors/analytics/segment.d.ts +11 -11
  88. package/dist-types/vendors/analytics/umami-analytics.d.ts +9 -9
  89. package/dist-types/vendors/analytics/vercel-analytics.d.ts +13 -13
  90. package/dist-types/vendors/functional/crisp.d.ts +9 -9
  91. package/dist-types/vendors/functional/intercom.d.ts +12 -12
  92. package/dist-types/vendors/tag-managers/cloudflare-zaraz.d.ts +39 -0
  93. package/dist-types/vendors/tag-managers/google-tag-manager.d.ts +16 -16
  94. package/docs/README.md +77 -48
  95. package/docs/assets/v3/brand-bar.png +0 -0
  96. package/docs/assets/v3/brand-card.png +0 -0
  97. package/docs/assets/v3/choice-wall.png +0 -0
  98. package/docs/assets/v3/mobile-card.png +0 -0
  99. package/docs/assets/v3/preferences.png +0 -0
  100. package/docs/customization/overview.md +45 -0
  101. package/docs/customization/recipes.md +79 -0
  102. package/docs/customization/slots.md +55 -0
  103. package/docs/customization/tokens.md +76 -0
  104. package/docs/customization/translations.md +49 -0
  105. package/docs/frameworks/javascript/script-loader.md +81 -343
  106. package/docs/frameworks/next/script-loader.md +164 -455
  107. package/docs/frameworks/react/script-loader.md +41 -533
  108. package/docs/guides/consent-state.md +60 -0
  109. package/docs/guides/data-fetching.md +163 -0
  110. package/docs/guides/deployment-modes.md +75 -0
  111. package/docs/guides/troubleshooting.md +68 -0
  112. package/docs/guides/verify-consent.md +62 -0
  113. package/docs/integrations/adobe-analytics.md +239 -105
  114. package/docs/integrations/ahrefs-analytics.md +238 -104
  115. package/docs/integrations/amplitude.md +219 -157
  116. package/docs/integrations/building-integrations.md +36 -223
  117. package/docs/integrations/clear-on-revocation.md +167 -0
  118. package/docs/integrations/clearbit.md +247 -86
  119. package/docs/integrations/cloudflare-web-analytics.md +250 -84
  120. package/docs/integrations/cloudflare-zaraz.md +399 -0
  121. package/docs/integrations/crisp.md +251 -97
  122. package/docs/integrations/databuddy.md +259 -153
  123. package/docs/integrations/fathom-analytics.md +239 -96
  124. package/docs/integrations/google-maps.md +328 -207
  125. package/docs/integrations/google-tag-manager.md +248 -96
  126. package/docs/integrations/google-tag.md +261 -90
  127. package/docs/integrations/granular-consent.md +208 -0
  128. package/docs/integrations/heap.md +222 -149
  129. package/docs/integrations/hightouch.md +225 -131
  130. package/docs/integrations/hotjar.md +239 -90
  131. package/docs/integrations/intercom.md +239 -98
  132. package/docs/integrations/linkedin-insights.md +243 -113
  133. package/docs/integrations/logrocket.md +241 -123
  134. package/docs/integrations/matomo-analytics.md +256 -111
  135. package/docs/integrations/meta-pixel.md +197 -324
  136. package/docs/integrations/microsoft-clarity.md +233 -114
  137. package/docs/integrations/microsoft-uet.md +245 -110
  138. package/docs/integrations/mixpanel-analytics.md +252 -87
  139. package/docs/integrations/openai-pixel.md +441 -0
  140. package/docs/integrations/overview.md +96 -133
  141. package/docs/integrations/pirsch.md +249 -96
  142. package/docs/integrations/plausible-analytics.md +241 -100
  143. package/docs/integrations/posthog.md +353 -214
  144. package/docs/integrations/promptwatch.md +251 -81
  145. package/docs/integrations/reddit-pixel.md +226 -173
  146. package/docs/integrations/rudderstack.md +244 -187
  147. package/docs/integrations/rybbit-analytics.md +244 -91
  148. package/docs/integrations/segment.md +238 -92
  149. package/docs/integrations/snapchat-pixel.md +240 -110
  150. package/docs/integrations/tiktok-pixel.md +249 -81
  151. package/docs/integrations/umami-analytics.md +242 -95
  152. package/docs/integrations/vercel-analytics.md +242 -90
  153. package/docs/integrations/x-pixel.md +238 -104
  154. package/docs/integrations/youtube.md +359 -142
  155. package/docs/upgrade-v3.md +381 -0
  156. package/package.json +90 -78
  157. package/dist/e2e-test-utils.cjs +0 -166
  158. package/dist/engine/compile.cjs +0 -130
  159. package/dist/engine/runtime.cjs +0 -475
  160. package/dist/registry.cjs +0 -423
  161. package/dist/resolve.cjs +0 -71
  162. package/dist/types.cjs +0 -69
  163. package/dist/vendors/_shared/attributes.cjs +0 -55
  164. package/dist/vendors/_shared/google-consent.cjs +0 -69
  165. package/dist/vendors/_shared/install-builders.cjs +0 -59
  166. package/dist/vendors/_shared/script-url.cjs +0 -78
  167. package/dist/vendors/ads-and-pixels/linkedin-insights.cjs +0 -89
  168. package/dist/vendors/ads-and-pixels/meta-pixel.cjs +0 -206
  169. package/dist/vendors/ads-and-pixels/microsoft-uet.cjs +0 -151
  170. package/dist/vendors/ads-and-pixels/reddit-pixel.cjs +0 -151
  171. package/dist/vendors/ads-and-pixels/snapchat-pixel.cjs +0 -131
  172. package/dist/vendors/ads-and-pixels/tiktok-pixel.cjs +0 -130
  173. package/dist/vendors/ads-and-pixels/x-pixel.cjs +0 -92
  174. package/dist/vendors/analytics/adobe-analytics.cjs +0 -90
  175. package/dist/vendors/analytics/ahrefs-analytics.cjs +0 -68
  176. package/dist/vendors/analytics/amplitude.cjs +0 -193
  177. package/dist/vendors/analytics/clearbit.cjs +0 -69
  178. package/dist/vendors/analytics/cloudflare-web-analytics.cjs +0 -73
  179. package/dist/vendors/analytics/databuddy.cjs +0 -144
  180. package/dist/vendors/analytics/fathom-analytics.cjs +0 -76
  181. package/dist/vendors/analytics/google-tag.cjs +0 -107
  182. package/dist/vendors/analytics/heap.cjs +0 -181
  183. package/dist/vendors/analytics/hightouch.cjs +0 -153
  184. package/dist/vendors/analytics/hotjar.cjs +0 -85
  185. package/dist/vendors/analytics/logrocket.cjs +0 -99
  186. package/dist/vendors/analytics/matomo-analytics.cjs +0 -232
  187. package/dist/vendors/analytics/microsoft-clarity.cjs +0 -138
  188. package/dist/vendors/analytics/mixpanel-analytics.cjs +0 -134
  189. package/dist/vendors/analytics/pirsch.cjs +0 -108
  190. package/dist/vendors/analytics/plausible-analytics.cjs +0 -122
  191. package/dist/vendors/analytics/posthog.cjs +0 -236
  192. package/dist/vendors/analytics/promptwatch.cjs +0 -70
  193. package/dist/vendors/analytics/rudderstack.cjs +0 -227
  194. package/dist/vendors/analytics/rybbit-analytics.cjs +0 -104
  195. package/dist/vendors/analytics/segment.cjs +0 -97
  196. package/dist/vendors/analytics/umami-analytics.cjs +0 -80
  197. package/dist/vendors/analytics/vercel-analytics.cjs +0 -94
  198. package/dist/vendors/functional/crisp.cjs +0 -143
  199. package/dist/vendors/functional/intercom.cjs +0 -89
  200. package/dist/vendors/tag-managers/google-tag-manager.cjs +0 -100
  201. package/docs/shared/react/guides/script-loader.md +0 -311
  202. package/readme.json +0 -19
@@ -4,37 +4,37 @@ import { booleanDataAttribute } from "../_shared/attributes.js";
4
4
  import { joinUrlPath } from "../_shared/script-url.js";
5
5
  const rybbitAnalyticsManifest = {
6
6
  ...vendorManifestContract,
7
- vendor: 'rybbit-analytics',
8
7
  category: 'measurement',
9
8
  install: [
10
9
  {
11
- type: 'loadScript',
12
- src: "{{scriptUrl}}",
13
- defer: true,
14
10
  attributes: {
15
- 'data-site-id': '{{siteId}}',
11
+ 'data-api-key': '{{apiKey}}',
16
12
  'data-auto-track-pageview': '{{autoTrackPageview}}',
17
- 'data-track-spa': '{{trackSpa}}',
18
- 'data-track-query': '{{trackQuery}}',
19
- 'data-track-outbound': '{{trackOutbound}}',
20
- 'data-track-errors': '{{trackErrors}}',
13
+ 'data-debounce': '{{debounce}}',
14
+ 'data-mask-patterns': '{{maskPatterns}}',
21
15
  'data-session-replay': '{{sessionReplay}}',
22
- 'data-web-vitals': '{{webVitals}}',
16
+ 'data-site-id': '{{siteId}}',
23
17
  'data-skip-patterns': '{{skipPatterns}}',
24
- 'data-mask-patterns': '{{maskPatterns}}',
25
- 'data-debounce': '{{debounce}}',
26
- 'data-api-key': '{{apiKey}}'
27
- }
18
+ 'data-track-errors': '{{trackErrors}}',
19
+ 'data-track-outbound': '{{trackOutbound}}',
20
+ 'data-track-query': '{{trackQuery}}',
21
+ 'data-track-spa': '{{trackSpa}}',
22
+ 'data-web-vitals': '{{webVitals}}'
23
+ },
24
+ defer: true,
25
+ src: "{{scriptUrl}}",
26
+ type: 'loadScript'
28
27
  }
29
- ]
28
+ ],
29
+ vendor: 'rybbit-analytics'
30
30
  };
31
- function getRybbitScriptUrl(options) {
31
+ const rybbit_analytics_getRybbitScriptUrl = function(options) {
32
32
  const url = options.scriptUrl?.trim();
33
33
  if (url && url.length > 0) return url;
34
34
  if (options.analyticsHost) return joinUrlPath(options.analyticsHost, "script.js");
35
35
  return "https://app.rybbit.io/api/script.js";
36
- }
37
- function rybbitAnalytics(options) {
36
+ };
37
+ const rybbit_analytics_rybbitAnalytics = function(options) {
38
38
  let siteId;
39
39
  siteId = void 0 === options.siteId || null === options.siteId ? '' : String(options.siteId).trim();
40
40
  if (0 === siteId.length) throw new Error('rybbitAnalytics: missing siteId');
@@ -45,19 +45,19 @@ function rybbitAnalytics(options) {
45
45
  let maskPatterns;
46
46
  if (options.maskPatterns) maskPatterns = JSON.stringify(options.maskPatterns);
47
47
  return resolveManifest(rybbitAnalyticsManifest, {
48
- scriptUrl: getRybbitScriptUrl(options),
49
- siteId,
48
+ apiKey: options.apiKey,
50
49
  autoTrackPageview: booleanDataAttribute(options.autoTrackPageview),
51
- trackSpa: booleanDataAttribute(options.trackSpa),
52
- trackQuery: booleanDataAttribute(options.trackQuery),
53
- trackOutbound: booleanDataAttribute(options.trackOutbound),
54
- trackErrors: booleanDataAttribute(options.trackErrors),
50
+ debounce,
51
+ maskPatterns,
52
+ scriptUrl: rybbit_analytics_getRybbitScriptUrl(options),
55
53
  sessionReplay: booleanDataAttribute(options.sessionReplay),
56
- webVitals: booleanDataAttribute(options.webVitals),
54
+ siteId,
57
55
  skipPatterns,
58
- maskPatterns,
59
- debounce,
60
- apiKey: options.apiKey
56
+ trackErrors: booleanDataAttribute(options.trackErrors),
57
+ trackOutbound: booleanDataAttribute(options.trackOutbound),
58
+ trackQuery: booleanDataAttribute(options.trackQuery),
59
+ trackSpa: booleanDataAttribute(options.trackSpa),
60
+ webVitals: booleanDataAttribute(options.webVitals)
61
61
  });
62
- }
63
- export { rybbitAnalytics, rybbitAnalyticsManifest };
62
+ };
63
+ export { rybbitAnalyticsManifest, rybbit_analytics_rybbitAnalytics as rybbitAnalytics };
@@ -3,18 +3,14 @@ import { vendorManifestContract } from "../../types.js";
3
3
  import { resolveScriptUrl } from "../_shared/script-url.js";
4
4
  const segmentManifest = {
5
5
  ...vendorManifestContract,
6
- vendor: 'segment',
7
- category: 'measurement',
8
6
  bootstrap: [
9
7
  {
10
- type: 'setGlobal',
8
+ ifUndefined: true,
11
9
  name: 'analytics',
12
- value: [],
13
- ifUndefined: true
10
+ type: 'setGlobal',
11
+ value: []
14
12
  },
15
13
  {
16
- type: 'defineQueueMethods',
17
- target: 'analytics',
18
14
  methods: [
19
15
  'track',
20
16
  'page',
@@ -22,23 +18,27 @@ const segmentManifest = {
22
18
  'group',
23
19
  'alias',
24
20
  'reset'
25
- ]
21
+ ],
22
+ target: 'analytics',
23
+ type: 'defineQueueMethods'
26
24
  }
27
25
  ],
26
+ category: 'measurement',
28
27
  install: [
29
28
  {
30
- type: 'callGlobal',
31
29
  global: 'analytics',
32
- method: 'page'
30
+ method: 'page',
31
+ type: 'callGlobal'
33
32
  },
34
33
  {
35
- type: 'loadScript',
34
+ async: true,
36
35
  src: "{{scriptUrl}}",
37
- async: true
36
+ type: 'loadScript'
38
37
  }
39
- ]
38
+ ],
39
+ vendor: 'segment'
40
40
  };
41
- function segment({ writeKey, trackPageView = true, scriptUrl }) {
41
+ const segment_segment = function({ writeKey, trackPageView = true, scriptUrl }) {
42
42
  let normalizedWriteKey = '';
43
43
  if ('string' == typeof writeKey) normalizedWriteKey = writeKey.trim();
44
44
  if (0 === normalizedWriteKey.length) throw new Error('segment: missing or invalid writeKey');
@@ -52,5 +52,5 @@ function segment({ writeKey, trackPageView = true, scriptUrl }) {
52
52
  return resolveManifest(manifest, {
53
53
  scriptUrl: resolveScriptUrl(scriptUrl, defaultScriptUrl)
54
54
  });
55
- }
56
- export { segment, segmentManifest };
55
+ };
56
+ export { segmentManifest, segment_segment as segment };
@@ -4,36 +4,36 @@ import { booleanDataAttribute, listDataAttribute } from "../_shared/attributes.j
4
4
  import { resolveScriptUrl } from "../_shared/script-url.js";
5
5
  const umamiAnalyticsManifest = {
6
6
  ...vendorManifestContract,
7
- vendor: 'umami-analytics',
8
7
  category: 'measurement',
9
8
  install: [
10
9
  {
11
- type: 'loadScript',
12
- src: "{{scriptUrl}}",
13
- defer: true,
14
10
  attributes: {
15
- 'data-website-id': '{{websiteId}}',
16
- 'data-host-url': '{{hostUrl}}',
17
11
  'data-auto-track': '{{autoTrackAttribute}}',
12
+ 'data-before-send': '{{beforeSend}}',
18
13
  'data-domains': '{{domains}}',
14
+ 'data-host-url': '{{hostUrl}}',
19
15
  'data-tag': '{{tag}}',
20
- 'data-before-send': '{{beforeSend}}'
21
- }
16
+ 'data-website-id': '{{websiteId}}'
17
+ },
18
+ defer: true,
19
+ src: "{{scriptUrl}}",
20
+ type: 'loadScript'
22
21
  }
23
- ]
22
+ ],
23
+ vendor: 'umami-analytics'
24
24
  };
25
- function umamiAnalytics(options) {
25
+ const umami_analytics_umamiAnalytics = function(options) {
26
26
  const websiteId = options.websiteId.trim();
27
27
  if (0 === websiteId.length) throw new Error('umamiAnalytics: invalid websiteId - must be a non-empty string');
28
28
  const resolved = resolveManifest(umamiAnalyticsManifest, {
29
- websiteId,
30
- hostUrl: options.hostUrl,
31
29
  autoTrackAttribute: booleanDataAttribute(options.autoTrack),
30
+ beforeSend: options.beforeSend,
32
31
  domains: listDataAttribute(options.domains),
32
+ hostUrl: options.hostUrl,
33
+ scriptUrl: resolveScriptUrl(options.scriptUrl, "https://cloud.umami.is/script.js"),
33
34
  tag: options.tag,
34
- beforeSend: options.beforeSend,
35
- scriptUrl: resolveScriptUrl(options.scriptUrl, "https://cloud.umami.is/script.js")
35
+ websiteId
36
36
  });
37
37
  return resolved;
38
- }
39
- export { umamiAnalytics, umamiAnalyticsManifest };
38
+ };
39
+ export { umamiAnalyticsManifest, umami_analytics_umamiAnalytics as umamiAnalytics };
@@ -2,52 +2,52 @@ import { resolveManifest } from "../../resolve.js";
2
2
  import { vendorManifestContract } from "../../types.js";
3
3
  const vercelAnalyticsManifest = {
4
4
  ...vendorManifestContract,
5
- vendor: 'vercel-analytics',
6
- category: 'measurement',
7
5
  bootstrap: [
8
6
  {
9
- type: 'setGlobal',
7
+ ifUndefined: true,
10
8
  name: 'vaq',
11
- value: [],
12
- ifUndefined: true
9
+ type: 'setGlobal',
10
+ value: []
13
11
  },
14
12
  {
15
- type: 'defineStubFunction',
13
+ ifUndefined: true,
16
14
  name: 'va',
17
15
  queue: {
18
16
  global: 'vaq'
19
17
  },
20
18
  queueFormat: 'array',
21
- ifUndefined: true
19
+ type: 'defineStubFunction'
22
20
  }
23
21
  ],
22
+ category: 'measurement',
24
23
  install: [
25
24
  {
26
- type: 'loadScript',
27
- src: "{{scriptUrl}}",
28
- defer: true,
29
25
  attributes: {
30
- 'data-sdkn': 'c15t',
31
- 'data-dsn': '{{dsn}}',
32
26
  'data-disable-auto-track': '{{disableAutoTrackAttribute}}',
33
- 'data-endpoint': '{{endpoint}}'
34
- }
27
+ 'data-dsn': '{{dsn}}',
28
+ 'data-endpoint': '{{endpoint}}',
29
+ 'data-sdkn': 'c15t'
30
+ },
31
+ defer: true,
32
+ src: "{{scriptUrl}}",
33
+ type: 'loadScript'
35
34
  }
36
- ]
35
+ ],
36
+ vendor: 'vercel-analytics'
37
37
  };
38
- function getVercelScriptUrl(options) {
38
+ const vercel_analytics_getVercelScriptUrl = function(options) {
39
39
  if (options.scriptUrl) return options.scriptUrl;
40
40
  if ('development' === options.mode || options.debug) return "https://va.vercel-scripts.com/v1/script.debug.js";
41
41
  return "https://va.vercel-scripts.com/v1/script.js";
42
- }
43
- function vercelAnalytics(options = {}) {
42
+ };
43
+ const vercel_analytics_vercelAnalytics = function(options = {}) {
44
44
  let disableAutoTrackAttribute;
45
45
  if (options.disableAutoTrack) disableAutoTrackAttribute = '1';
46
46
  return resolveManifest(vercelAnalyticsManifest, {
47
- scriptUrl: getVercelScriptUrl(options),
47
+ disableAutoTrackAttribute,
48
48
  dsn: options.dsn,
49
49
  endpoint: options.endpoint,
50
- disableAutoTrackAttribute
50
+ scriptUrl: vercel_analytics_getVercelScriptUrl(options)
51
51
  });
52
- }
53
- export { vercelAnalytics, vercelAnalyticsManifest };
52
+ };
53
+ export { vercelAnalyticsManifest, vercel_analytics_vercelAnalytics as vercelAnalytics };
@@ -2,101 +2,99 @@ import { resolveManifest } from "../../resolve.js";
2
2
  import { vendorManifestContract } from "../../types.js";
3
3
  const crispManifest = {
4
4
  ...vendorManifestContract,
5
- vendor: 'crisp',
6
5
  category: 'functionality',
7
6
  install: [
8
7
  {
9
- type: 'setGlobal',
8
+ ifUndefined: false,
10
9
  name: '$crisp',
11
- value: [],
12
- ifUndefined: false
10
+ type: 'setGlobal',
11
+ value: []
13
12
  },
14
13
  {
15
- type: 'setGlobal',
14
+ ifUndefined: false,
16
15
  name: 'CRISP_WEBSITE_ID',
17
- value: '{{websiteId}}',
18
- ifUndefined: false
16
+ type: 'setGlobal',
17
+ value: '{{websiteId}}'
19
18
  },
20
19
  {
21
- type: 'loadScript',
20
+ async: true,
22
21
  src: "{{scriptSrc}}",
23
- async: true
22
+ type: 'loadScript'
24
23
  }
25
- ]
24
+ ],
25
+ vendor: 'crisp'
26
26
  };
27
- function createCrispManifest(options) {
27
+ const crisp_createCrispManifest = function(options) {
28
28
  const install = [
29
29
  {
30
- type: 'setGlobal',
30
+ ifUndefined: false,
31
31
  name: '$crisp',
32
- value: [],
33
- ifUndefined: false
32
+ type: 'setGlobal',
33
+ value: []
34
34
  },
35
35
  {
36
- type: 'setGlobal',
36
+ ifUndefined: false,
37
37
  name: 'CRISP_WEBSITE_ID',
38
- value: '{{websiteId}}',
39
- ifUndefined: false
38
+ type: 'setGlobal',
39
+ value: '{{websiteId}}'
40
40
  }
41
41
  ];
42
- if (void 0 !== options.locale || void 0 !== options.sessionMerge) install.push({
43
- type: 'setGlobal',
44
- name: 'CRISP_RUNTIME_CONFIG',
45
- value: {
46
- ...void 0 !== options.locale ? {
47
- locale: '{{locale}}'
48
- } : {},
49
- ...void 0 !== options.sessionMerge ? {
50
- session_merge: '{{sessionMerge}}'
51
- } : {}
52
- },
53
- ifUndefined: false
54
- });
42
+ if (void 0 !== options.locale || void 0 !== options.sessionMerge) {
43
+ const value = {};
44
+ if (void 0 !== options.locale) value.locale = '{{locale}}';
45
+ if (void 0 !== options.sessionMerge) value.session_merge = '{{sessionMerge}}';
46
+ install.push({
47
+ ifUndefined: false,
48
+ name: 'CRISP_RUNTIME_CONFIG',
49
+ type: 'setGlobal',
50
+ value
51
+ });
52
+ }
55
53
  if (options.cookieDomain) install.push({
56
- type: 'setGlobal',
54
+ ifUndefined: false,
57
55
  name: 'CRISP_COOKIE_DOMAIN',
58
- value: '{{cookieDomain}}',
59
- ifUndefined: false
56
+ type: 'setGlobal',
57
+ value: '{{cookieDomain}}'
60
58
  });
61
59
  if (void 0 !== options.cookieExpiry) install.push({
62
- type: 'setGlobal',
60
+ ifUndefined: false,
63
61
  name: 'CRISP_COOKIE_EXPIRE',
64
- value: '{{cookieExpiry}}',
65
- ifUndefined: false
62
+ type: 'setGlobal',
63
+ value: '{{cookieExpiry}}'
66
64
  });
67
65
  if (options.tokenId) install.push({
68
- type: 'setGlobal',
66
+ ifUndefined: false,
69
67
  name: 'CRISP_TOKEN_ID',
70
- value: '{{tokenId}}',
71
- ifUndefined: false
68
+ type: 'setGlobal',
69
+ value: '{{tokenId}}'
72
70
  });
73
71
  if (options.safeMode) install.push({
74
- type: 'pushToQueue',
75
72
  queue: '$crisp',
73
+ type: 'pushToQueue',
76
74
  value: [
77
75
  'safe',
78
76
  true
79
77
  ]
80
78
  });
81
79
  install.push({
82
- type: 'loadScript',
80
+ async: true,
83
81
  src: "{{scriptSrc}}",
84
- async: true
82
+ type: 'loadScript'
85
83
  });
86
84
  return {
87
85
  ...crispManifest,
88
86
  install
89
87
  };
90
- }
91
- function crisp(options) {
92
- return resolveManifest(createCrispManifest(options), {
93
- websiteId: options.websiteId,
94
- locale: options.locale,
88
+ };
89
+ const crisp_crisp = function(options) {
90
+ return resolveManifest(crisp_createCrispManifest(options), {
95
91
  cookieDomain: options.cookieDomain,
96
92
  cookieExpiry: options.cookieExpiry,
97
- tokenId: options.tokenId,
93
+ locale: options.locale,
94
+ scriptSrc: options.scriptSrc ?? 'https://client.crisp.chat/l.js',
98
95
  sessionMerge: options.sessionMerge,
99
- scriptSrc: options.scriptSrc ?? 'https://client.crisp.chat/l.js'
96
+ tokenId: options.tokenId,
97
+ websiteId: options.websiteId
100
98
  });
101
- }
102
- export { crisp, crispManifest };
99
+ };
100
+ export { crispManifest, crisp_crisp as crisp };
@@ -1,45 +1,45 @@
1
1
  import { resolveManifest } from "../../resolve.js";
2
2
  import { vendorManifestContract } from "../../types.js";
3
3
  const INTERCOM_API_BASES = {
4
- us: 'https://api-iam.intercom.io',
4
+ au: 'https://api-iam.au.intercom.io',
5
5
  eu: 'https://api-iam.eu.intercom.io',
6
- au: 'https://api-iam.au.intercom.io'
6
+ us: 'https://api-iam.intercom.io'
7
7
  };
8
8
  const intercomManifest = {
9
9
  ...vendorManifestContract,
10
- vendor: 'intercom',
11
10
  category: 'functionality',
12
11
  install: [
13
12
  {
14
- type: 'defineStubFunction',
13
+ ifUndefined: true,
15
14
  name: 'Intercom',
16
15
  queue: {
17
16
  property: 'q'
18
17
  },
19
18
  queueFormat: 'array',
20
- ifUndefined: true
19
+ type: 'defineStubFunction'
21
20
  },
22
21
  {
23
- type: 'setGlobal',
22
+ ifUndefined: false,
24
23
  name: 'intercomSettings',
25
- value: '{{settings}}',
26
- ifUndefined: false
24
+ type: 'setGlobal',
25
+ value: '{{settings}}'
27
26
  },
28
27
  {
29
- type: 'loadScript',
28
+ async: true,
30
29
  src: "{{scriptSrc}}",
31
- async: true
30
+ type: 'loadScript'
32
31
  }
33
- ]
32
+ ],
33
+ vendor: 'intercom'
34
34
  };
35
- function intercom({ appId, apiBase = INTERCOM_API_BASES.us, settings, scriptSrc }) {
35
+ const intercom_intercom = function({ appId, apiBase = INTERCOM_API_BASES.us, settings, scriptSrc }) {
36
36
  return resolveManifest(intercomManifest, {
37
+ scriptSrc: scriptSrc ?? `https://widget.intercom.io/widget/${appId}`,
37
38
  settings: {
38
39
  ...settings ?? {},
39
- app_id: appId,
40
- api_base: apiBase
41
- },
42
- scriptSrc: scriptSrc ?? `https://widget.intercom.io/widget/${appId}`
40
+ api_base: apiBase,
41
+ app_id: appId
42
+ }
43
43
  });
44
- }
45
- export { INTERCOM_API_BASES, intercom, intercomManifest };
44
+ };
45
+ export { INTERCOM_API_BASES, intercomManifest, intercom_intercom as intercom };
@@ -0,0 +1,98 @@
1
+ const consentCategories = [
2
+ 'necessary',
3
+ 'functionality',
4
+ 'experience',
5
+ 'measurement',
6
+ 'marketing'
7
+ ];
8
+ const readyEvent = 'zarazConsentAPIReady';
9
+ const isConsentApi = (api)=>'object' == typeof api && null !== api && 'APIReady' in api && true === api.APIReady && 'getAll' in api && 'function' == typeof api.getAll && 'set' in api && 'function' == typeof api.set && 'sendQueuedEvents' in api && 'function' == typeof api.sendQueuedEvents;
10
+ const getConsentApi = ()=>{
11
+ if ("u" < typeof window || !('zaraz' in window)) return;
12
+ const { zaraz } = window;
13
+ if ('object' != typeof zaraz || null === zaraz || !('consent' in zaraz)) return;
14
+ return isConsentApi(zaraz.consent) ? zaraz.consent : void 0;
15
+ };
16
+ const cloudflareZaraz = (options)=>{
17
+ const mappings = new Map();
18
+ for (const category of consentCategories)for (const purpose of options.purposes[category] ?? []){
19
+ if (!purpose.trim() || purpose !== purpose.trim()) throw new Error('Zaraz purpose IDs must be non-empty and have no surrounding whitespace.');
20
+ if (mappings.has(purpose)) throw new Error(`Zaraz purpose '${purpose}' is mapped more than once.`);
21
+ mappings.set(purpose, category);
22
+ }
23
+ if (0 === mappings.size) throw new Error('Map at least one Zaraz purpose to a c15t category.');
24
+ let latest;
25
+ let listeningDocument;
26
+ let initialized = false;
27
+ const pendingReplay = new Set();
28
+ const synchronize = ()=>{
29
+ const api = getConsentApi();
30
+ if (!latest || !api) return false;
31
+ const previous = api.getAll();
32
+ const permissions = {};
33
+ let changed = false;
34
+ for (const purpose of Object.keys(previous)){
35
+ const category = mappings.get(purpose);
36
+ const allowed = void 0 !== category && true === latest[category];
37
+ Object.defineProperty(permissions, purpose, {
38
+ enumerable: true,
39
+ value: allowed
40
+ });
41
+ changed ||= previous[purpose] !== allowed;
42
+ if (allowed && true !== previous[purpose]) pendingReplay.add(purpose);
43
+ }
44
+ for (const purpose of pendingReplay)if (true !== permissions[purpose]) pendingReplay.delete(purpose);
45
+ if (false !== options.hideBuiltInModal && true === api.modal) api.modal = false;
46
+ if (changed) api.set(permissions);
47
+ if (pendingReplay.size > 0 && false !== options.sendQueuedEvents) api.sendQueuedEvents();
48
+ pendingReplay.clear();
49
+ return true;
50
+ };
51
+ const apply = ()=>{
52
+ try {
53
+ if (!synchronize()) return false;
54
+ } catch (error) {
55
+ if (!options.onError) throw error;
56
+ options.onError(error);
57
+ return false;
58
+ }
59
+ listeningDocument?.removeEventListener(readyEvent, apply);
60
+ listeningDocument = void 0;
61
+ if (!initialized) {
62
+ initialized = true;
63
+ options.onReady?.();
64
+ }
65
+ return true;
66
+ };
67
+ const update = ({ consents })=>{
68
+ latest = consents;
69
+ if ("u" < typeof document) return;
70
+ let applied = false;
71
+ try {
72
+ applied = apply();
73
+ } finally{
74
+ if (!applied && !listeningDocument) {
75
+ listeningDocument = document;
76
+ document.addEventListener(readyEvent, apply);
77
+ }
78
+ }
79
+ };
80
+ return {
81
+ alwaysLoad: true,
82
+ callbackOnly: true,
83
+ category: 'necessary',
84
+ id: 'cloudflare-zaraz',
85
+ onConsentChange: (info)=>{
86
+ if (info.hasConsent) update(info);
87
+ },
88
+ onDispose: ()=>{
89
+ listeningDocument?.removeEventListener(readyEvent, apply);
90
+ listeningDocument = void 0;
91
+ latest = void 0;
92
+ initialized = false;
93
+ pendingReplay.clear();
94
+ },
95
+ onLoad: update
96
+ };
97
+ };
98
+ export { cloudflareZaraz };