utneque 1.0.0

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 (431) hide show
  1. package/.editorconfig +10 -0
  2. package/.eslintrc.isomorphic.js +26 -0
  3. package/.eslintrc.js +86 -0
  4. package/.gitattributes +1 -0
  5. package/.github/workflows/ci.yml +33 -0
  6. package/.github/workflows/deploy-browser-cdn-candidate.yml +51 -0
  7. package/.github/workflows/deploy-releases.yml +178 -0
  8. package/.nvmrc +1 -0
  9. package/.prettierrc +7 -0
  10. package/.vscode/extensions.json +3 -0
  11. package/.vscode/launch.json +81 -0
  12. package/.vscode/settings.json +41 -0
  13. package/.yarn/plugins/@yarnpkg/plugin-constraints.cjs +52 -0
  14. package/.yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs +546 -0
  15. package/.yarn/plugins/@yarnpkg/plugin-typescript.cjs +9 -0
  16. package/.yarn/plugins/@yarnpkg/plugin-workspace-tools.cjs +28 -0
  17. package/.yarn/releases/yarn-3.4.1.cjs +873 -0
  18. package/.yarnrc.yml +15 -0
  19. package/jest.config.js +18 -0
  20. package/package.json +59 -0
  21. package/packages/browser/.eslintrc.js +9 -0
  22. package/packages/browser/.lintstagedrc.js +1 -0
  23. package/packages/browser/ARCHITECTURE.md +48 -0
  24. package/packages/browser/LICENSE.MD +45 -0
  25. package/packages/browser/Makefile +64 -0
  26. package/packages/browser/README.md +227 -0
  27. package/packages/browser/e2e-tests/local-server.ts +28 -0
  28. package/packages/browser/e2e-tests/performance/ajs-perf-browser.test.ts +75 -0
  29. package/packages/browser/jest.config.js +15 -0
  30. package/packages/browser/jest.setup.js +10 -0
  31. package/packages/browser/package.json +106 -0
  32. package/packages/browser/qa/README.md +41 -0
  33. package/packages/browser/qa/__fixtures__/snippets.ts +148 -0
  34. package/packages/browser/qa/__tests__/backwards-compatibility.test.ts +180 -0
  35. package/packages/browser/qa/__tests__/destinations.test.ts +101 -0
  36. package/packages/browser/qa/__tests__/smoke.test.ts +170 -0
  37. package/packages/browser/qa/lib/benchmark.ts +36 -0
  38. package/packages/browser/qa/lib/browser.ts +28 -0
  39. package/packages/browser/qa/lib/jest-reporter.js +57 -0
  40. package/packages/browser/qa/lib/runner.ts +142 -0
  41. package/packages/browser/qa/lib/schema.ts +59 -0
  42. package/packages/browser/qa/lib/server.ts +54 -0
  43. package/packages/browser/qa/lib/stats.ts +52 -0
  44. package/packages/browser/scripts/build-prep.sh +7 -0
  45. package/packages/browser/scripts/ci.sh +15 -0
  46. package/packages/browser/scripts/release.js +121 -0
  47. package/packages/browser/scripts/release.sh +9 -0
  48. package/packages/browser/scripts/run.sh +8 -0
  49. package/packages/browser/src/browser/__tests__/analytics-lazy-init.integration.test.ts +51 -0
  50. package/packages/browser/src/browser/__tests__/analytics-pre-init.integration.test.ts +440 -0
  51. package/packages/browser/src/browser/__tests__/anon-id-and-reset.integration.test.ts +73 -0
  52. package/packages/browser/src/browser/__tests__/cdn.test.ts +53 -0
  53. package/packages/browser/src/browser/__tests__/csp-detection.test.ts +140 -0
  54. package/packages/browser/src/browser/__tests__/inspector.integration.test.ts +121 -0
  55. package/packages/browser/src/browser/__tests__/integration.test.ts +1213 -0
  56. package/packages/browser/src/browser/__tests__/integrations.integration.test.ts +260 -0
  57. package/packages/browser/src/browser/__tests__/page-enrichment.integration.test.ts +216 -0
  58. package/packages/browser/src/browser/__tests__/query-string.integration.test.ts +116 -0
  59. package/packages/browser/src/browser/__tests__/standalone-analytics.test.ts +303 -0
  60. package/packages/browser/src/browser/__tests__/standalone-errors.test.ts +136 -0
  61. package/packages/browser/src/browser/__tests__/standalone.test.ts +97 -0
  62. package/packages/browser/src/browser/__tests__/typedef-tests/analytics-browser.ts +150 -0
  63. package/packages/browser/src/browser/__tests__/update-cdn-settings.test.ts +71 -0
  64. package/packages/browser/src/browser/browser-umd.ts +19 -0
  65. package/packages/browser/src/browser/index.ts +486 -0
  66. package/packages/browser/src/browser/standalone-analytics.ts +62 -0
  67. package/packages/browser/src/browser/standalone-interface.ts +11 -0
  68. package/packages/browser/src/browser/standalone.ts +92 -0
  69. package/packages/browser/src/core/__tests__/track-form.test.ts +193 -0
  70. package/packages/browser/src/core/__tests__/track-link.test.ts +252 -0
  71. package/packages/browser/src/core/analytics/__tests__/integration.test.ts +334 -0
  72. package/packages/browser/src/core/analytics/__tests__/test-plugins.ts +94 -0
  73. package/packages/browser/src/core/analytics/index.ts +672 -0
  74. package/packages/browser/src/core/analytics/interfaces.ts +100 -0
  75. package/packages/browser/src/core/arguments-resolver/__tests__/index.test.ts +524 -0
  76. package/packages/browser/src/core/arguments-resolver/index.ts +200 -0
  77. package/packages/browser/src/core/auto-track.ts +152 -0
  78. package/packages/browser/src/core/buffer/__tests__/index.test.ts +455 -0
  79. package/packages/browser/src/core/buffer/index.ts +371 -0
  80. package/packages/browser/src/core/callback/index.ts +1 -0
  81. package/packages/browser/src/core/connection/__tests__/index.test.ts +25 -0
  82. package/packages/browser/src/core/connection/index.ts +13 -0
  83. package/packages/browser/src/core/constants/index.ts +1 -0
  84. package/packages/browser/src/core/context/__tests__/index.test.ts +201 -0
  85. package/packages/browser/src/core/context/index.ts +21 -0
  86. package/packages/browser/src/core/environment/index.ts +7 -0
  87. package/packages/browser/src/core/events/__tests__/index.test.ts +450 -0
  88. package/packages/browser/src/core/events/index.ts +280 -0
  89. package/packages/browser/src/core/events/interfaces.ts +36 -0
  90. package/packages/browser/src/core/inspector/index.ts +14 -0
  91. package/packages/browser/src/core/page/__tests__/index.test.ts +130 -0
  92. package/packages/browser/src/core/page/add-page-context.ts +33 -0
  93. package/packages/browser/src/core/page/get-page-context.ts +140 -0
  94. package/packages/browser/src/core/page/index.ts +2 -0
  95. package/packages/browser/src/core/plugin/index.ts +12 -0
  96. package/packages/browser/src/core/query-string/__tests__/gracefulDecodeURIComponent.test.ts +17 -0
  97. package/packages/browser/src/core/query-string/__tests__/index.test.ts +149 -0
  98. package/packages/browser/src/core/query-string/__tests__/pickPrefix.test.ts +31 -0
  99. package/packages/browser/src/core/query-string/__tests__/useQueryString.test.ts +60 -0
  100. package/packages/browser/src/core/query-string/gracefulDecodeURIComponent.ts +16 -0
  101. package/packages/browser/src/core/query-string/index.ts +64 -0
  102. package/packages/browser/src/core/query-string/pickPrefix.ts +20 -0
  103. package/packages/browser/src/core/queue/__tests__/event-queue.test.ts +82 -0
  104. package/packages/browser/src/core/queue/event-queue.ts +22 -0
  105. package/packages/browser/src/core/session/__tests__/index.test.ts +41 -0
  106. package/packages/browser/src/core/session/index.ts +107 -0
  107. package/packages/browser/src/core/stats/__tests__/index.test.ts +15 -0
  108. package/packages/browser/src/core/stats/__tests__/remote-metrics.test.ts +189 -0
  109. package/packages/browser/src/core/stats/index.ts +15 -0
  110. package/packages/browser/src/core/stats/remote-metrics.ts +144 -0
  111. package/packages/browser/src/core/storage/__tests__/cookieStorage.test.ts +58 -0
  112. package/packages/browser/src/core/storage/__tests__/localStorage.test.ts +70 -0
  113. package/packages/browser/src/core/storage/__tests__/test-helpers.ts +26 -0
  114. package/packages/browser/src/core/storage/__tests__/universalStorage.test.ts +167 -0
  115. package/packages/browser/src/core/storage/cookieStorage.ts +80 -0
  116. package/packages/browser/src/core/storage/index.ts +64 -0
  117. package/packages/browser/src/core/storage/localStorage.ts +45 -0
  118. package/packages/browser/src/core/storage/memoryStorage.ts +22 -0
  119. package/packages/browser/src/core/storage/settings.ts +23 -0
  120. package/packages/browser/src/core/storage/types.ts +49 -0
  121. package/packages/browser/src/core/storage/universalStorage.ts +78 -0
  122. package/packages/browser/src/core/user/__tests__/index.test.ts +922 -0
  123. package/packages/browser/src/core/user/__tests__/migrate.test.ts +101 -0
  124. package/packages/browser/src/core/user/__tests__/session.test.ts +136 -0
  125. package/packages/browser/src/core/user/__tests__/tld.test.ts +36 -0
  126. package/packages/browser/src/core/user/index.ts +399 -0
  127. package/packages/browser/src/core/user/migrate.ts +126 -0
  128. package/packages/browser/src/core/user/tld.ts +65 -0
  129. package/packages/browser/src/core/user/vendor/crypto-es/LICENSE +53 -0
  130. package/packages/browser/src/core/user/vendor/crypto-es/lib/aes.ts +302 -0
  131. package/packages/browser/src/core/user/vendor/crypto-es/lib/cipher-core.ts +922 -0
  132. package/packages/browser/src/core/user/vendor/crypto-es/lib/core.ts +806 -0
  133. package/packages/browser/src/core/user/vendor/crypto-es/lib/enc-base64.ts +110 -0
  134. package/packages/browser/src/core/user/vendor/crypto-es/lib/evpkdf.ts +110 -0
  135. package/packages/browser/src/core/user/vendor/crypto-es/lib/md5.ts +238 -0
  136. package/packages/browser/src/core/user/vendor/readme.md +7 -0
  137. package/packages/browser/src/generated/__tests__/version.test.ts +18 -0
  138. package/packages/browser/src/generated/version.ts +2 -0
  139. package/packages/browser/src/index.ts +13 -0
  140. package/packages/browser/src/lib/__tests__/embedded-write-key.test.ts +15 -0
  141. package/packages/browser/src/lib/__tests__/fetch.test.ts +35 -0
  142. package/packages/browser/src/lib/__tests__/get-process-env.test.ts +5 -0
  143. package/packages/browser/src/lib/__tests__/group-by.test.ts +96 -0
  144. package/packages/browser/src/lib/__tests__/is-plan-event-enabled.test.ts +36 -0
  145. package/packages/browser/src/lib/__tests__/is-thenable.test.ts +39 -0
  146. package/packages/browser/src/lib/__tests__/merged-options.test.ts +123 -0
  147. package/packages/browser/src/lib/__tests__/on-page-change.test.ts +74 -0
  148. package/packages/browser/src/lib/__tests__/parse-cdn.test.ts +88 -0
  149. package/packages/browser/src/lib/__tests__/pick.test.ts +34 -0
  150. package/packages/browser/src/lib/__tests__/pick.typedef.ts +39 -0
  151. package/packages/browser/src/lib/bind-all.ts +19 -0
  152. package/packages/browser/src/lib/browser-polyfill.ts +23 -0
  153. package/packages/browser/src/lib/client-hints/__tests__/index.test.ts +66 -0
  154. package/packages/browser/src/lib/client-hints/index.ts +16 -0
  155. package/packages/browser/src/lib/client-hints/interfaces.ts +42 -0
  156. package/packages/browser/src/lib/create-deferred.ts +16 -0
  157. package/packages/browser/src/lib/csp-detection.ts +8 -0
  158. package/packages/browser/src/lib/embedded-write-key.ts +24 -0
  159. package/packages/browser/src/lib/fetch.ts +10 -0
  160. package/packages/browser/src/lib/get-global.ts +16 -0
  161. package/packages/browser/src/lib/get-process-env.ts +11 -0
  162. package/packages/browser/src/lib/global-analytics-helper.ts +31 -0
  163. package/packages/browser/src/lib/group-by.ts +30 -0
  164. package/packages/browser/src/lib/is-plan-event-enabled.ts +20 -0
  165. package/packages/browser/src/lib/is-thenable.ts +9 -0
  166. package/packages/browser/src/lib/load-script.ts +66 -0
  167. package/packages/browser/src/lib/merged-options.ts +46 -0
  168. package/packages/browser/src/lib/on-page-change.ts +29 -0
  169. package/packages/browser/src/lib/p-while.ts +12 -0
  170. package/packages/browser/src/lib/parse-cdn.ts +56 -0
  171. package/packages/browser/src/lib/pick.ts +28 -0
  172. package/packages/browser/src/lib/priority-queue/__tests__/backoff.test.ts +23 -0
  173. package/packages/browser/src/lib/priority-queue/__tests__/index.test.ts +158 -0
  174. package/packages/browser/src/lib/priority-queue/__tests__/persisted.test.ts +228 -0
  175. package/packages/browser/src/lib/priority-queue/backoff.ts +24 -0
  176. package/packages/browser/src/lib/priority-queue/index.ts +6 -0
  177. package/packages/browser/src/lib/priority-queue/persisted.ts +127 -0
  178. package/packages/browser/src/lib/sleep.ts +4 -0
  179. package/packages/browser/src/lib/to-facade.ts +53 -0
  180. package/packages/browser/src/lib/version-type.ts +10 -0
  181. package/packages/browser/src/node/__tests__/node-integration.test.ts +19 -0
  182. package/packages/browser/src/node/index.ts +36 -0
  183. package/packages/browser/src/node/node.browser.ts +7 -0
  184. package/packages/browser/src/plugins/ajs-destination/__tests__/index.test.ts +834 -0
  185. package/packages/browser/src/plugins/ajs-destination/index.ts +392 -0
  186. package/packages/browser/src/plugins/ajs-destination/loader.ts +129 -0
  187. package/packages/browser/src/plugins/ajs-destination/types.ts +44 -0
  188. package/packages/browser/src/plugins/ajs-destination/utils.ts +32 -0
  189. package/packages/browser/src/plugins/analytics-node/__tests__/index.test.ts +69 -0
  190. package/packages/browser/src/plugins/analytics-node/index.ts +67 -0
  191. package/packages/browser/src/plugins/env-enrichment/__tests__/index.test.ts +421 -0
  192. package/packages/browser/src/plugins/env-enrichment/index.ts +208 -0
  193. package/packages/browser/src/plugins/hightouchio/__tests__/batched-dispatcher.test.ts +299 -0
  194. package/packages/browser/src/plugins/hightouchio/__tests__/index.test.ts +317 -0
  195. package/packages/browser/src/plugins/hightouchio/__tests__/normalize.test.ts +181 -0
  196. package/packages/browser/src/plugins/hightouchio/__tests__/retries.test.ts +82 -0
  197. package/packages/browser/src/plugins/hightouchio/batched-dispatcher.ts +127 -0
  198. package/packages/browser/src/plugins/hightouchio/fetch-dispatcher.ts +27 -0
  199. package/packages/browser/src/plugins/hightouchio/index.ts +147 -0
  200. package/packages/browser/src/plugins/hightouchio/normalize.ts +71 -0
  201. package/packages/browser/src/plugins/hightouchio/schedule-flush.ts +58 -0
  202. package/packages/browser/src/plugins/legacy-video-plugins/__tests__/index.test.ts +48 -0
  203. package/packages/browser/src/plugins/legacy-video-plugins/index.ts +16 -0
  204. package/packages/browser/src/plugins/middleware/__tests__/index.test.ts +268 -0
  205. package/packages/browser/src/plugins/middleware/index.ts +131 -0
  206. package/packages/browser/src/plugins/remote-loader/__tests__/index.test.ts +943 -0
  207. package/packages/browser/src/plugins/remote-loader/index.ts +256 -0
  208. package/packages/browser/src/plugins/remote-middleware/__tests__/index.test.ts +116 -0
  209. package/packages/browser/src/plugins/remote-middleware/index.ts +44 -0
  210. package/packages/browser/src/plugins/routing-middleware/__tests__/index.test.ts +64 -0
  211. package/packages/browser/src/plugins/routing-middleware/index.ts +37 -0
  212. package/packages/browser/src/plugins/schema-filter/__tests__/index.test.ts +520 -0
  213. package/packages/browser/src/plugins/schema-filter/index.ts +90 -0
  214. package/packages/browser/src/plugins/validation/__tests__/index.test.ts +78 -0
  215. package/packages/browser/src/plugins/validation/index.ts +44 -0
  216. package/packages/browser/src/test-helpers/browser-storage.ts +75 -0
  217. package/packages/browser/src/test-helpers/factories.ts +18 -0
  218. package/packages/browser/src/test-helpers/fetch-parse.ts +8 -0
  219. package/packages/browser/src/test-helpers/fixtures/cdn-settings.ts +301 -0
  220. package/packages/browser/src/test-helpers/fixtures/classic-destination.ts +25 -0
  221. package/packages/browser/src/test-helpers/fixtures/client-hints.ts +28 -0
  222. package/packages/browser/src/test-helpers/fixtures/create-fetch-method.ts +30 -0
  223. package/packages/browser/src/test-helpers/fixtures/index.ts +4 -0
  224. package/packages/browser/src/test-helpers/fixtures/page-context.ts +11 -0
  225. package/packages/browser/src/test-helpers/test-writekeys.ts +5 -0
  226. package/packages/browser/src/test-helpers/type-assertions.ts +11 -0
  227. package/packages/browser/src/tester/__fixtures__/hightouch-snippet.ts +64 -0
  228. package/packages/browser/src/tester/__fixtures__/index.html +8 -0
  229. package/packages/browser/src/tester/ajs-perf.ts +30 -0
  230. package/packages/browser/src/tester/ajs-tester.ts +119 -0
  231. package/packages/browser/src/tester/server.js +16 -0
  232. package/packages/browser/tsconfig.build.json +9 -0
  233. package/packages/browser/tsconfig.json +13 -0
  234. package/packages/browser/webpack.config.js +106 -0
  235. package/packages/config/package.json +10 -0
  236. package/packages/config/src/index.js +4 -0
  237. package/packages/config/src/jest/config.js +50 -0
  238. package/packages/config/src/jest/get-module-map.js +34 -0
  239. package/packages/config/src/lint-staged/config.js +4 -0
  240. package/packages/config-webpack/package.json +20 -0
  241. package/packages/config-webpack/webpack.config.common.js +75 -0
  242. package/packages/consent/consent-tools/.eslintrc.js +7 -0
  243. package/packages/consent/consent-tools/.lintstagedrc.js +1 -0
  244. package/packages/consent/consent-tools/LICENSE +45 -0
  245. package/packages/consent/consent-tools/README.md +104 -0
  246. package/packages/consent/consent-tools/jest.config.js +6 -0
  247. package/packages/consent/consent-tools/jest.setup.js +4 -0
  248. package/packages/consent/consent-tools/package.json +48 -0
  249. package/packages/consent/consent-tools/src/domain/__tests__/assertions/integrations-assertions.ts +37 -0
  250. package/packages/consent/consent-tools/src/domain/__tests__/consent-stamping.test.ts +45 -0
  251. package/packages/consent/consent-tools/src/domain/__tests__/create-wrapper.test.ts +816 -0
  252. package/packages/consent/consent-tools/src/domain/__tests__/typedef-tests.ts +21 -0
  253. package/packages/consent/consent-tools/src/domain/consent-changed.ts +51 -0
  254. package/packages/consent/consent-tools/src/domain/consent-stamping.ts +19 -0
  255. package/packages/consent/consent-tools/src/domain/create-wrapper.ts +238 -0
  256. package/packages/consent/consent-tools/src/domain/get-initialized-analytics.ts +25 -0
  257. package/packages/consent/consent-tools/src/domain/load-cancellation.ts +31 -0
  258. package/packages/consent/consent-tools/src/domain/validation/__tests__/options-validators.test.ts +77 -0
  259. package/packages/consent/consent-tools/src/domain/validation/__tests__/validation-error.test.ts +15 -0
  260. package/packages/consent/consent-tools/src/domain/validation/common-validators.ts +19 -0
  261. package/packages/consent/consent-tools/src/domain/validation/index.ts +1 -0
  262. package/packages/consent/consent-tools/src/domain/validation/options-validators.ts +74 -0
  263. package/packages/consent/consent-tools/src/domain/validation/validation-error.ts +11 -0
  264. package/packages/consent/consent-tools/src/index.ts +16 -0
  265. package/packages/consent/consent-tools/src/types/errors.ts +14 -0
  266. package/packages/consent/consent-tools/src/types/index.ts +3 -0
  267. package/packages/consent/consent-tools/src/types/settings.ts +121 -0
  268. package/packages/consent/consent-tools/src/types/wrapper.ts +107 -0
  269. package/packages/consent/consent-tools/src/utils/index.ts +4 -0
  270. package/packages/consent/consent-tools/src/utils/pick.ts +18 -0
  271. package/packages/consent/consent-tools/src/utils/pipe.ts +14 -0
  272. package/packages/consent/consent-tools/src/utils/resolve-when.ts +32 -0
  273. package/packages/consent/consent-tools/src/utils/uniq.ts +4 -0
  274. package/packages/consent/consent-tools/tsconfig.build.json +9 -0
  275. package/packages/consent/consent-tools/tsconfig.json +12 -0
  276. package/packages/consent/consent-wrapper-onetrust/.eslintrc.js +7 -0
  277. package/packages/consent/consent-wrapper-onetrust/.lintstagedrc.js +1 -0
  278. package/packages/consent/consent-wrapper-onetrust/LICENSE +45 -0
  279. package/packages/consent/consent-wrapper-onetrust/README.md +125 -0
  280. package/packages/consent/consent-wrapper-onetrust/img/onetrust-cat-id.jpg +0 -0
  281. package/packages/consent/consent-wrapper-onetrust/img/onetrust-popup.jpg +0 -0
  282. package/packages/consent/consent-wrapper-onetrust/jest.config.js +6 -0
  283. package/packages/consent/consent-wrapper-onetrust/jest.setup.js +4 -0
  284. package/packages/consent/consent-wrapper-onetrust/package.json +60 -0
  285. package/packages/consent/consent-wrapper-onetrust/src/domain/__tests__/wrapper.test.ts +151 -0
  286. package/packages/consent/consent-wrapper-onetrust/src/domain/wrapper.ts +61 -0
  287. package/packages/consent/consent-wrapper-onetrust/src/index.ts +6 -0
  288. package/packages/consent/consent-wrapper-onetrust/src/index.umd.ts +11 -0
  289. package/packages/consent/consent-wrapper-onetrust/src/lib/__tests__/onetrust-api.test.ts +181 -0
  290. package/packages/consent/consent-wrapper-onetrust/src/lib/onetrust-api.ts +155 -0
  291. package/packages/consent/consent-wrapper-onetrust/src/lib/validation/index.ts +1 -0
  292. package/packages/consent/consent-wrapper-onetrust/src/lib/validation/onetrust-api-error.ts +11 -0
  293. package/packages/consent/consent-wrapper-onetrust/src/test-helpers/mocks.ts +23 -0
  294. package/packages/consent/consent-wrapper-onetrust/src/test-helpers/onetrust-globals.d.ts +11 -0
  295. package/packages/consent/consent-wrapper-onetrust/src/test-helpers/utils.ts +3 -0
  296. package/packages/consent/consent-wrapper-onetrust/tsconfig.build.json +9 -0
  297. package/packages/consent/consent-wrapper-onetrust/tsconfig.json +11 -0
  298. package/packages/consent/consent-wrapper-onetrust/webpack.config.js +25 -0
  299. package/packages/core/.eslintrc.js +4 -0
  300. package/packages/core/.lintstagedrc.js +1 -0
  301. package/packages/core/LICENSE.MD +45 -0
  302. package/packages/core/README.md +3 -0
  303. package/packages/core/jest.config.js +5 -0
  304. package/packages/core/jest.setup.js +10 -0
  305. package/packages/core/package.json +40 -0
  306. package/packages/core/src/analytics/__tests__/dispatch.test.ts +95 -0
  307. package/packages/core/src/analytics/dispatch.ts +58 -0
  308. package/packages/core/src/analytics/index.ts +11 -0
  309. package/packages/core/src/callback/__tests__/index.test.ts +85 -0
  310. package/packages/core/src/callback/index.ts +51 -0
  311. package/packages/core/src/context/index.ts +123 -0
  312. package/packages/core/src/emitter/__tests__/emitter.test.ts +74 -0
  313. package/packages/core/src/emitter/index.ts +65 -0
  314. package/packages/core/src/emitter/interface.ts +31 -0
  315. package/packages/core/src/events/__tests__/index.test.ts +394 -0
  316. package/packages/core/src/events/index.ts +280 -0
  317. package/packages/core/src/events/interfaces.ts +475 -0
  318. package/packages/core/src/index.ts +19 -0
  319. package/packages/core/src/logger/__tests__/index.test.ts +66 -0
  320. package/packages/core/src/logger/index.ts +74 -0
  321. package/packages/core/src/plugins/index.ts +43 -0
  322. package/packages/core/src/priority-queue/__tests__/backoff.test.ts +23 -0
  323. package/packages/core/src/priority-queue/__tests__/index.test.ts +158 -0
  324. package/packages/core/src/priority-queue/backoff.ts +24 -0
  325. package/packages/core/src/priority-queue/index.ts +103 -0
  326. package/packages/core/src/queue/__tests__/event-queue.test.ts +678 -0
  327. package/packages/core/src/queue/__tests__/extension-flushing.test.ts +416 -0
  328. package/packages/core/src/queue/delivery.ts +73 -0
  329. package/packages/core/src/queue/event-queue.ts +318 -0
  330. package/packages/core/src/stats/__tests__/index.test.ts +103 -0
  331. package/packages/core/src/stats/index.ts +88 -0
  332. package/packages/core/src/task/__tests__/task-group.test.ts +26 -0
  333. package/packages/core/src/task/task-group.ts +31 -0
  334. package/packages/core/src/user/index.ts +7 -0
  335. package/packages/core/src/utils/__tests__/group-by.test.ts +96 -0
  336. package/packages/core/src/utils/__tests__/is-plain-object.test.ts +27 -0
  337. package/packages/core/src/utils/__tests__/is-thenable.test.ts +39 -0
  338. package/packages/core/src/utils/bind-all.ts +19 -0
  339. package/packages/core/src/utils/get-global.ts +17 -0
  340. package/packages/core/src/utils/group-by.ts +30 -0
  341. package/packages/core/src/utils/has-properties.ts +7 -0
  342. package/packages/core/src/utils/is-plain-object.ts +26 -0
  343. package/packages/core/src/utils/is-thenable.ts +9 -0
  344. package/packages/core/src/utils/p-while.ts +12 -0
  345. package/packages/core/src/utils/pick.ts +8 -0
  346. package/packages/core/src/utils/ts-helpers.ts +13 -0
  347. package/packages/core/src/validation/__tests__/assertions.test.ts +155 -0
  348. package/packages/core/src/validation/assertions.ts +72 -0
  349. package/packages/core/src/validation/errors.ts +8 -0
  350. package/packages/core/src/validation/helpers.ts +23 -0
  351. package/packages/core/test-helpers/index.ts +2 -0
  352. package/packages/core/test-helpers/test-ctx.ts +7 -0
  353. package/packages/core/test-helpers/test-event-queue.ts +7 -0
  354. package/packages/core/tsconfig.build.json +9 -0
  355. package/packages/core/tsconfig.json +11 -0
  356. package/packages/node/.eslintrc.js +7 -0
  357. package/packages/node/.lintstagedrc.js +1 -0
  358. package/packages/node/LICENSE +45 -0
  359. package/packages/node/README.md +138 -0
  360. package/packages/node/jest.config.js +5 -0
  361. package/packages/node/jest.setup.js +4 -0
  362. package/packages/node/package.json +50 -0
  363. package/packages/node/scripts/version.sh +11 -0
  364. package/packages/node/src/__tests__/callback.test.ts +47 -0
  365. package/packages/node/src/__tests__/disable.integration.test.ts +42 -0
  366. package/packages/node/src/__tests__/emitter.integration.test.ts +45 -0
  367. package/packages/node/src/__tests__/graceful-shutdown-integration.test.ts +244 -0
  368. package/packages/node/src/__tests__/http-client.integration.test.ts +69 -0
  369. package/packages/node/src/__tests__/http-integration.test.ts +362 -0
  370. package/packages/node/src/__tests__/integration.test.ts +357 -0
  371. package/packages/node/src/__tests__/plugins.test.ts +16 -0
  372. package/packages/node/src/__tests__/settings.test.ts +9 -0
  373. package/packages/node/src/__tests__/test-helpers/assert-shape/http-request-event.ts +13 -0
  374. package/packages/node/src/__tests__/test-helpers/assert-shape/index.ts +2 -0
  375. package/packages/node/src/__tests__/test-helpers/assert-shape/segment-http-api.ts +43 -0
  376. package/packages/node/src/__tests__/test-helpers/create-test-analytics.ts +42 -0
  377. package/packages/node/src/__tests__/test-helpers/factories.ts +17 -0
  378. package/packages/node/src/__tests__/test-helpers/is-valid-date.ts +6 -0
  379. package/packages/node/src/__tests__/test-helpers/resolve-ctx.ts +19 -0
  380. package/packages/node/src/__tests__/test-helpers/resolve-emitter.ts +11 -0
  381. package/packages/node/src/__tests__/test-helpers/sleep.ts +3 -0
  382. package/packages/node/src/__tests__/test-helpers/test-plugin.ts +16 -0
  383. package/packages/node/src/__tests__/typedef-tests.ts +120 -0
  384. package/packages/node/src/app/analytics-node.ts +299 -0
  385. package/packages/node/src/app/context.ts +11 -0
  386. package/packages/node/src/app/dispatch-emit.ts +42 -0
  387. package/packages/node/src/app/emitter.ts +23 -0
  388. package/packages/node/src/app/event-factory.ts +20 -0
  389. package/packages/node/src/app/event-queue.ts +23 -0
  390. package/packages/node/src/app/settings.ts +49 -0
  391. package/packages/node/src/app/types/index.ts +3 -0
  392. package/packages/node/src/app/types/params.ts +76 -0
  393. package/packages/node/src/app/types/plugin.ts +5 -0
  394. package/packages/node/src/app/types/segment-event.ts +7 -0
  395. package/packages/node/src/generated/version.ts +2 -0
  396. package/packages/node/src/index.ts +26 -0
  397. package/packages/node/src/lib/__tests__/abort.test.ts +54 -0
  398. package/packages/node/src/lib/__tests__/create-url.test.ts +35 -0
  399. package/packages/node/src/lib/__tests__/env.test.ts +52 -0
  400. package/packages/node/src/lib/__tests__/get-message-id.test.ts +21 -0
  401. package/packages/node/src/lib/abort.ts +77 -0
  402. package/packages/node/src/lib/base-64-encode.ts +8 -0
  403. package/packages/node/src/lib/create-url.ts +11 -0
  404. package/packages/node/src/lib/env.ts +45 -0
  405. package/packages/node/src/lib/extract-promise-parts.ts +21 -0
  406. package/packages/node/src/lib/fetch.ts +16 -0
  407. package/packages/node/src/lib/get-message-id.ts +10 -0
  408. package/packages/node/src/lib/http-client.ts +95 -0
  409. package/packages/node/src/lib/uuid.ts +1 -0
  410. package/packages/node/src/plugins/segmentio/__tests__/methods.test.ts +223 -0
  411. package/packages/node/src/plugins/segmentio/__tests__/publisher.test.ts +411 -0
  412. package/packages/node/src/plugins/segmentio/context-batch.ts +71 -0
  413. package/packages/node/src/plugins/segmentio/index.ts +66 -0
  414. package/packages/node/src/plugins/segmentio/publisher.ts +265 -0
  415. package/packages/node/tsconfig.build.json +9 -0
  416. package/packages/node/tsconfig.json +10 -0
  417. package/packages/test-helpers/.eslintrc.js +7 -0
  418. package/packages/test-helpers/.lintstagedrc.js +1 -0
  419. package/packages/test-helpers/jest.config.js +3 -0
  420. package/packages/test-helpers/package.json +26 -0
  421. package/packages/test-helpers/src/analytics/cdn-settings-builder.ts +79 -0
  422. package/packages/test-helpers/src/analytics/index.ts +1 -0
  423. package/packages/test-helpers/src/index.ts +2 -0
  424. package/packages/test-helpers/src/utils/index.ts +1 -0
  425. package/packages/test-helpers/src/utils/sleep.ts +4 -0
  426. package/packages/test-helpers/tsconfig.build.json +9 -0
  427. package/packages/test-helpers/tsconfig.json +11 -0
  428. package/tsconfig.json +21 -0
  429. package/turbo.json +39 -0
  430. package/typings/get-monorepo-packages.d.ts +9 -0
  431. package/typings/spawn.d.ts +10 -0
@@ -0,0 +1,119 @@
1
+ import { Analytics } from '../core/analytics'
2
+ import { SerializedContext } from '../core/context'
3
+ import mem from 'micro-memoize'
4
+ import playwright from 'playwright'
5
+
6
+ type BrowserType = 'chromium' | 'firefox' | 'webkit'
7
+
8
+ // eslint-disable-next-line @typescript-eslint/explicit-function-return-type
9
+ function makeStub(page: playwright.Page) {
10
+ const stub = {
11
+ async register(
12
+ ...args: Parameters<Analytics['register']>
13
+ ): Promise<SerializedContext> {
14
+ return await page.evaluate((innerArgs) => {
15
+ return (
16
+ // @ts-ignore
17
+ window.htevents
18
+ .register(...innerArgs)
19
+ // @ts-ignore
20
+ .then((ctx) => ctx.toJSON())
21
+ )
22
+ }, args)
23
+ },
24
+ async track(
25
+ ...args: Parameters<Analytics['track']>
26
+ ): Promise<SerializedContext> {
27
+ // @ts-expect-error
28
+ const ctx = await page.evaluate((innerArgs) => {
29
+ // @ts-ignore
30
+ return window.htevents.track(...innerArgs).then((ctx) => {
31
+ return ctx.toJSON()
32
+ })
33
+ // @ts-ignore
34
+ }, args)
35
+
36
+ return ctx
37
+ },
38
+ async page(
39
+ ...args: Parameters<Analytics['page']>
40
+ ): Promise<SerializedContext> {
41
+ const ctx = await page.evaluate((innerArgs) => {
42
+ // @ts-ignore
43
+ return window.htevents.page(...innerArgs).then((ctx) => {
44
+ return ctx.toJSON()
45
+ })
46
+ // @ts-ignore
47
+ }, args)
48
+
49
+ return ctx
50
+ },
51
+
52
+ async identify(
53
+ ...args: Parameters<Analytics['identify']>
54
+ ): Promise<SerializedContext> {
55
+ const ctx = await page.evaluate((innerArgs) => {
56
+ // @ts-ignore
57
+ return window.htevents.identify(...innerArgs).then((ctx) => {
58
+ return ctx.toJSON()
59
+ })
60
+ // @ts-ignore
61
+ }, args)
62
+
63
+ return ctx
64
+ },
65
+
66
+ browserPage: page,
67
+ }
68
+
69
+ return stub
70
+ }
71
+
72
+ export const getBrowser = mem(
73
+ async (browserType?: BrowserType, remoteDebug?: boolean) => {
74
+ const browser = await playwright[browserType ?? 'chromium'].launch({
75
+ headless: true,
76
+ devtools: true,
77
+ args: [
78
+ '--no-sandbox',
79
+ '--disable-setuid-sandbox',
80
+ remoteDebug ? '--remote-debugging-port=9222' : '',
81
+ ],
82
+ })
83
+
84
+ process.on('unhandledRejection', () => {
85
+ browser && browser.close()
86
+ })
87
+
88
+ return browser
89
+ }
90
+ )
91
+
92
+ export async function testerTeardown(): Promise<void> {
93
+ const browser = await getBrowser()
94
+ await browser.close()
95
+ }
96
+
97
+ export async function tester(
98
+ _writeKey: string,
99
+ url?: string,
100
+ browserType?: BrowserType,
101
+ remoteDebug?: boolean
102
+ ): Promise<ReturnType<typeof makeStub>> {
103
+ const browser = await getBrowser(browserType, remoteDebug)
104
+ const page = await browser.newPage()
105
+
106
+ await page.goto(
107
+ url || `file://${process.cwd()}/src/tester/__fixtures__/index.html`
108
+ )
109
+ await page.evaluate(`
110
+ window.AnalyticsNext.HtEventsBrowser.load({
111
+ writeKey: '${_writeKey}',
112
+ }).then(loaded => {
113
+ window.htevents = loaded[0]
114
+ })
115
+ `)
116
+
117
+ await page.waitForFunction('window.htevents !== undefined')
118
+ return makeStub(page)
119
+ }
@@ -0,0 +1,16 @@
1
+ const path = require('path')
2
+ const express = require('express')
3
+ const port = 3001
4
+
5
+ const app = express()
6
+
7
+ app.get('*.js', function (req, res, next) {
8
+ req.url = req.url + '.gz'
9
+ res.set('Content-Encoding', 'gzip')
10
+ res.set('Content-Type', 'text/javascript')
11
+ next()
12
+ })
13
+ app.use('/', express.static(path.join(__dirname, '__fixtures__')))
14
+ app.use('/dist/umd', express.static(path.join(__dirname, '../../dist/umd')))
15
+
16
+ app.listen(port)
@@ -0,0 +1,9 @@
1
+ {
2
+ "extends": "./tsconfig.json",
3
+ "include": ["src"],
4
+ "exclude": ["**/__tests__/**", "**/test-helpers/**", "**/tester/**"],
5
+ "compilerOptions": {
6
+ "outDir": "./dist/pkg",
7
+ "declarationDir": "./dist/types"
8
+ }
9
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "extends": "../../tsconfig.json",
3
+ "compilerOptions": {
4
+ "module": "esnext",
5
+ "target": "ES5",
6
+ "moduleResolution": "node",
7
+ "resolveJsonModule": true,
8
+ "lib": ["es2020", "DOM", "DOM.Iterable"],
9
+ "baseUrl": "./src",
10
+ "keyofStringsOnly": true
11
+ },
12
+ "exclude": ["node_modules", "dist"]
13
+ }
@@ -0,0 +1,106 @@
1
+ const path = require('path')
2
+ const webpack = require('webpack')
3
+ const TerserPlugin = require('terser-webpack-plugin')
4
+ const CompressionPlugin = require('compression-webpack-plugin')
5
+ const BundleAnalyzerPlugin =
6
+ require('webpack-bundle-analyzer').BundleAnalyzerPlugin
7
+ const CircularDependencyPlugin = require('circular-dependency-plugin')
8
+
9
+ const isProd = process.env.NODE_ENV === 'production'
10
+ // See release.js and pathPrefix / PATH_PREFIX
11
+ const PATH_PREFIX = process.env.PATH_PREFIX ?? 'browser/candidate'
12
+ const PATH_VERSION = process.env.PATH_VERSION ?? 'bundles'
13
+ const ASSET_PATH = isProd
14
+ ? `https://cdn.hightouch-events.com/${PATH_PREFIX}/${PATH_VERSION}/`
15
+ : '/dist/umd/'
16
+
17
+ const plugins = [
18
+ new CompressionPlugin({}),
19
+ new webpack.EnvironmentPlugin({
20
+ ASSET_PATH,
21
+ PATH_PREFIX,
22
+ PATH_VERSION,
23
+ }),
24
+ new CircularDependencyPlugin({
25
+ failOnError: true,
26
+ }),
27
+ ]
28
+
29
+ if (process.env.ANALYZE) {
30
+ plugins.push(new BundleAnalyzerPlugin())
31
+ }
32
+
33
+ /** @type { import('webpack').Configuration } */
34
+ const config = {
35
+ stats: process.env.WATCH === 'true' ? 'errors-warnings' : 'normal',
36
+ node: {
37
+ global: false, // do not polyfill global object, we can use getGlobal function if needed.
38
+ },
39
+ mode: process.env.NODE_ENV || 'development',
40
+ devtool: 'source-map',
41
+ entry: {
42
+ index: {
43
+ import: path.resolve(__dirname, 'src/browser/browser-umd.ts'),
44
+ library: {
45
+ name: 'HtEvents',
46
+ type: 'umd',
47
+ },
48
+ },
49
+ 'events.min': {
50
+ import: path.resolve(__dirname, 'src/browser/standalone.ts'),
51
+ library: {
52
+ name: 'HtEvents',
53
+ type: 'window',
54
+ },
55
+ },
56
+ },
57
+ output: {
58
+ publicPath: '', // Hack - we're overriding publicPath but IE needs this set or it won't load.
59
+ filename: '[name].js',
60
+ path: path.resolve(__dirname, 'dist/umd'),
61
+ chunkFilename: '[name].bundle.[contenthash].js',
62
+ },
63
+ target: ['web', 'es5'],
64
+ module: {
65
+ rules: [
66
+ {
67
+ test: /\.tsx?$/,
68
+ use: [
69
+ {
70
+ loader: 'ts-loader',
71
+ options: {
72
+ configFile: 'tsconfig.build.json',
73
+ transpileOnly: true,
74
+ },
75
+ },
76
+ ],
77
+ },
78
+ ],
79
+ },
80
+ resolve: {
81
+ extensions: ['.ts', '.js'],
82
+ },
83
+ devServer: {
84
+ contentBase: path.resolve(__dirname, 'dist/umd'),
85
+ },
86
+ optimization: {
87
+ moduleIds: 'deterministic',
88
+ minimize: isProd,
89
+ minimizer: [
90
+ new TerserPlugin({
91
+ extractComments: false,
92
+ terserOptions: {
93
+ ecma: '2015',
94
+ mangle: true,
95
+ compress: true,
96
+ output: {
97
+ comments: false,
98
+ },
99
+ },
100
+ }),
101
+ ],
102
+ },
103
+ plugins,
104
+ }
105
+
106
+ module.exports = config
@@ -0,0 +1,10 @@
1
+ {
2
+ "name": "@internal/config",
3
+ "version": "0.0.0",
4
+ "private": true,
5
+ "main": "./src",
6
+ "packageManager": "yarn@3.4.1",
7
+ "devDependencies": {
8
+ "app-root-path": "^3.1.0"
9
+ }
10
+ }
@@ -0,0 +1,4 @@
1
+ module.exports = {
2
+ createJestTSConfig: require('./jest/config').createJestTSConfig,
3
+ lintStagedConfig: require('./lint-staged/config'),
4
+ }
@@ -0,0 +1,50 @@
1
+ const { getJestModuleMap } = require('./get-module-map')
2
+ const path = require('path')
3
+
4
+ /**
5
+ * Create Config
6
+ * @param {string} dirname - __dirname from the package that's importing this config.
7
+ * @param {import('jest').Config} Overrides.
8
+ * @returns {import('jest').Config}
9
+ */
10
+ const createJestTSConfig = (
11
+ dirname,
12
+ { modulePathIgnorePatterns, testMatch, ...overridesToMerge } = {}
13
+ ) => {
14
+ if (typeof dirname !== 'string') {
15
+ throw new Error('Please pass __dirname as the first argument.')
16
+ }
17
+ const isRootConfig = dirname === process.cwd()
18
+ const moduleMap = getJestModuleMap(dirname, isRootConfig)
19
+ return {
20
+ ...(isRootConfig ? {} : { displayName: path.basename(process.cwd()) }),
21
+ /**
22
+ * No need to manually run yarn build all the time.
23
+ * This resolve packages for ts-jest so typescript compilation happens in-memory.
24
+ */
25
+ moduleNameMapper: moduleMap,
26
+ preset: 'ts-jest',
27
+ modulePathIgnorePatterns: [
28
+ '<rootDir>/dist/',
29
+ ...(modulePathIgnorePatterns || []),
30
+ ],
31
+ testEnvironment: 'node',
32
+ testMatch: ['**/?(*.)+(test).[jt]s?(x)', ...(testMatch || [])],
33
+ /**
34
+ * No need to call jest.clearAllMocks() or jest.resetMocks() manually.
35
+ * Automatically clear mock calls, instances and results before every test.
36
+ * Equivalent to calling jest.clearAllMocks() before each test.
37
+ */
38
+ clearMocks: true,
39
+ globals: {
40
+ 'ts-jest': {
41
+ isolatedModules: true,
42
+ },
43
+ },
44
+ ...(overridesToMerge || {}),
45
+ }
46
+ }
47
+
48
+ module.exports = {
49
+ createJestTSConfig,
50
+ }
@@ -0,0 +1,34 @@
1
+ const getPackages = require('get-monorepo-packages')
2
+ const appRootPath = require('app-root-path')
3
+ const path = require('path')
4
+
5
+ /**
6
+ * Create module mapping that resolve packages for ts-jest so typescript compilation happens in-memory
7
+ */
8
+ const getJestModuleMap = (configDirname, isRootConfig) => {
9
+ // for the sake of getPackages working correctly during a project-wide test run, the working directory must be hardcoded to the root
10
+ const packageRoot = isRootConfig
11
+ ? '.'
12
+ : path.relative(configDirname, appRootPath.path)
13
+
14
+ const packages = getPackages(configDirname, packageRoot)
15
+
16
+ const createPackageMappedPath = (packagePath) => {
17
+ const pathToMappedPackage = path.relative(configDirname, packagePath)
18
+ // alert: yes, this _does_ expect all modules to be in src, and it's completely ignorant of export maps.
19
+ const result = `<rootDir>/${pathToMappedPackage}/src/$1`
20
+ return result
21
+ }
22
+
23
+ const moduleMap = packages.reduce(
24
+ (acc, pkg) => ({
25
+ ...acc,
26
+ [`${pkg.package.name}(.*)$`]: createPackageMappedPath(pkg.location),
27
+ }),
28
+ {}
29
+ )
30
+
31
+ return moduleMap
32
+ }
33
+
34
+ module.exports = { getJestModuleMap }
@@ -0,0 +1,4 @@
1
+ module.exports = {
2
+ '*.{js,jsx,ts,tsx}': ['eslint --fix'],
3
+ '*.json*': ['prettier --write'],
4
+ }
@@ -0,0 +1,20 @@
1
+ {
2
+ "name": "@internal/config-webpack",
3
+ "version": "0.0.0",
4
+ "private": true,
5
+ "packageManager": "yarn@3.4.1",
6
+ "devDependencies": {
7
+ "@babel/cli": "^7.22.10",
8
+ "@babel/core": "^7.22.11",
9
+ "@babel/preset-env": "^7.22.10",
10
+ "@babel/preset-typescript": "^7.22.11",
11
+ "@types/circular-dependency-plugin": "^5",
12
+ "babel-loader": "^8.0.0",
13
+ "circular-dependency-plugin": "^5.2.2",
14
+ "ecma-version-validator-webpack-plugin": "^1.2.1",
15
+ "terser-webpack-plugin": "^5.1.4",
16
+ "webpack": "^5.76.0",
17
+ "webpack-cli": "^4.8.0",
18
+ "webpack-merge": "^5.9.0"
19
+ }
20
+ }
@@ -0,0 +1,75 @@
1
+ const TerserPlugin = require('terser-webpack-plugin')
2
+ const CircularDependencyPlugin = require('circular-dependency-plugin')
3
+ const {
4
+ ECMAVersionValidatorPlugin,
5
+ } = require('ecma-version-validator-webpack-plugin')
6
+
7
+ const isProd = process.env.NODE_ENV === 'production'
8
+ const isWatch = process.env.WATCH === 'true'
9
+
10
+ /**
11
+ * This is a base webpack config that is used for all generic web packages.
12
+ * It should contain the same support as analytics.js (e.g. es5, minified, etc)
13
+ *
14
+ *
15
+ * @type { import('webpack').Configuration }
16
+ */
17
+ module.exports = {
18
+ devtool: 'source-map',
19
+ stats: isWatch ? 'errors-warnings' : 'normal',
20
+ mode: isProd ? 'production' : 'development',
21
+ target: ['web', 'es5'], // target es5 for ie11 support (generates module boilerplate in es5)
22
+ module: {
23
+ rules: [
24
+ {
25
+ test: /\.(ts|js)$/,
26
+ use: [
27
+ {
28
+ loader: 'babel-loader',
29
+ options: {
30
+ presets: [
31
+ ['@babel/preset-typescript'],
32
+ [
33
+ '@babel/preset-env',
34
+ {
35
+ targets: {
36
+ ie: 11,
37
+ },
38
+ },
39
+ ],
40
+ ],
41
+ },
42
+ },
43
+ ],
44
+ },
45
+ ],
46
+ },
47
+ optimization: {
48
+ moduleIds: 'deterministic',
49
+ minimize: isProd,
50
+ minimizer: [
51
+ new TerserPlugin({
52
+ extractComments: false,
53
+ terserOptions: {
54
+ // not sure why, if we target es5, we can set ecma to 2015 here without breaking ie11.
55
+ // this from the original webpack config had that netto set up, so leaving it as is.
56
+ ecma: '2015',
57
+ mangle: true,
58
+ compress: true,
59
+ output: {
60
+ comments: false,
61
+ },
62
+ },
63
+ }),
64
+ ],
65
+ },
66
+ resolve: {
67
+ extensions: ['.ts', '.js'],
68
+ },
69
+ plugins: [
70
+ new CircularDependencyPlugin({
71
+ failOnError: true,
72
+ }),
73
+ new ECMAVersionValidatorPlugin({ ecmaVersion: 5 }), // ensure our js bundle only contains syntax supported in ie11. This does not check polyfills.
74
+ ],
75
+ }
@@ -0,0 +1,7 @@
1
+ /** @type { import('eslint').Linter.Config } */
2
+ module.exports = {
3
+ extends: ['../../../.eslintrc'],
4
+ env: {
5
+ browser: true,
6
+ },
7
+ }
@@ -0,0 +1 @@
1
+ module.exports = require("@internal/config").lintStagedConfig
@@ -0,0 +1,45 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright © 2023 Hightouch
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
22
+
23
+ ---
24
+
25
+ The MIT License (MIT)
26
+
27
+ Copyright © 2023 Segment
28
+
29
+ Permission is hereby granted, free of charge, to any person obtaining a copy
30
+ of this software and associated documentation files (the "Software"), to deal
31
+ in the Software without restriction, including without limitation the rights
32
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
33
+ copies of the Software, and to permit persons to whom the Software is
34
+ furnished to do so, subject to the following conditions:
35
+
36
+ The above copyright notice and this permission notice shall be included in
37
+ all copies or substantial portions of the Software.
38
+
39
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
40
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
41
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
42
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
43
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
44
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
45
+ THE SOFTWARE.
@@ -0,0 +1,104 @@
1
+ # @ht-sdks/events-sdk-js-consent-tools
2
+
3
+ ## Quick Start
4
+
5
+ ```ts
6
+ // wrapper.js
7
+ import { createWrapper, resolveWhen } from '@ht-sdks/events-sdk-js-consent-tools'
8
+
9
+ export const withCMP = createWrapper({
10
+
11
+ // Wrapper waits to load hightouch / get categories until this function returns / resolves
12
+ shouldLoad: async (ctx) => {
13
+ const CMP = await getCMP()
14
+ await resolveWhen(
15
+ () => !CMP.popUpVisible(),
16
+ 500
17
+ )
18
+
19
+ // Optional -- for granular control of initialization
20
+ if (noConsentNeeded) {
21
+ ctx.abort({ loadHightouchNormally: true })
22
+ } else if (allTrackingDisabled) {
23
+ ctx.abort({ loadHightouchNormally: false })
24
+ }
25
+ },
26
+
27
+ getCategories: async () => {
28
+ const CMP = await getCMP()
29
+ return normalizeCategories(CMP.consentedCategories()) // Expected format: { foo: true, bar: false }
30
+ },
31
+
32
+ registerOnConsentChanged: async (setCategories) => {
33
+ const CMP = await getCMP()
34
+ CMP.onConsentChanged((event) => {
35
+ setCategories(normalizeCategories(event.detail))
36
+ })
37
+ },
38
+ })
39
+
40
+
41
+ const getCMP = async () => {
42
+ await resolveWhen(() => window.CMP !== undefined, 500)
43
+ return window.CMP
44
+ }
45
+ ```
46
+
47
+ ## Wrapper Usage API
48
+
49
+ ## `npm`
50
+
51
+ ```js
52
+ import { withCMP } from './wrapper'
53
+ import { HtEventsBrowser } from '@ht-sdks/events-sdk-js-browser'
54
+
55
+ export const htevents = new HtEventsBrowser()
56
+
57
+ withCMP(htevents).load({
58
+ writeKey: '<MY_WRITE_KEY'>
59
+ })
60
+
61
+ ```
62
+
63
+ ## Snippet users (window.htevents)
64
+ ### Note: This assumes a project that can consume the library via es6 imports, using a like Webpack.
65
+
66
+ 1. Delete the `htevents.load()` line from the snippet
67
+
68
+ ```diff
69
+ - htevents.load("<MY_WRITE_KEY>");
70
+ ```
71
+
72
+ 2. Import Analytics
73
+
74
+ ```js
75
+ import { withCMP } from './wrapper'
76
+
77
+ withCMP(window.htevents).load('<MY_WRITE_KEY')
78
+ ```
79
+
80
+ ## Wrapper Examples
81
+
82
+ - [OneTrust](../consent-wrapper-onetrust) (beta)
83
+
84
+ ## Settings / Options / Configuration
85
+
86
+ See the complete list of settings in the **[Settings interface](src/types/settings.ts)**
87
+
88
+ ## Special Requirements
89
+
90
+ - For npm users, this library expects a version of `@ht-sdks/events-sdk-js-browser` >= **1.53.1**. Note: If your library depends on this library, you should have the appropriate peer dependency declaration. See our `package.json` for an example.
91
+
92
+ ## Development
93
+
94
+ 1. Build this package + all dependencies
95
+
96
+ ```sh
97
+ yarn . build
98
+ ```
99
+
100
+ 2. Run tests
101
+
102
+ ```
103
+ yarn test
104
+ ```
@@ -0,0 +1,6 @@
1
+ const { createJestTSConfig } = require('@internal/config')
2
+
3
+ module.exports = createJestTSConfig(__dirname, {
4
+ testEnvironment: 'jsdom',
5
+ setupFilesAfterEnv: ['./jest.setup.js'],
6
+ })
@@ -0,0 +1,4 @@
1
+ const fetch = require('node-fetch')
2
+
3
+ // eslint-disable-next-line no-undef
4
+ globalThis.fetch = fetch // polyfill fetch so nock will work correctly on node 18 (https://github.com/nock/nock/issues/2336)