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,806 @@
1
+ //@ts-nocheck
2
+ /* eslint-disable no-use-before-define */
3
+
4
+ const crypto =
5
+ (typeof globalThis != 'undefined' ? globalThis : void 0)?.crypto ||
6
+ (typeof global != 'undefined' ? global : void 0)?.crypto ||
7
+ (typeof window != 'undefined' ? window : void 0)?.crypto ||
8
+ (typeof self != 'undefined' ? self : void 0)?.crypto ||
9
+ (typeof frames != 'undefined' ? frames : void 0)?.[0]?.crypto
10
+
11
+ let randomWordArray
12
+
13
+ if (crypto) {
14
+ randomWordArray = (nBytes) => {
15
+ const words = []
16
+
17
+ for (let i = 0, rcache; i < nBytes; i += 4) {
18
+ words.push(crypto.getRandomValues(new Uint32Array(1))[0])
19
+ }
20
+
21
+ return new WordArray(words, nBytes)
22
+ }
23
+ } else {
24
+ // Because there is no global crypto property in this context, cryptographically unsafe Math.random() is used.
25
+
26
+ randomWordArray = (nBytes) => {
27
+ const words = []
28
+
29
+ const r = (m_w) => {
30
+ let _m_w = m_w
31
+ let _m_z = 0x3ade68b1
32
+ const mask = 0xffffffff
33
+
34
+ return () => {
35
+ _m_z = (0x9069 * (_m_z & 0xffff) + (_m_z >> 0x10)) & mask
36
+ _m_w = (0x4650 * (_m_w & 0xffff) + (_m_w >> 0x10)) & mask
37
+ let result = ((_m_z << 0x10) + _m_w) & mask
38
+ result /= 0x100000000
39
+ result += 0.5
40
+ return result * (Math.random() > 0.5 ? 1 : -1)
41
+ }
42
+ }
43
+
44
+ for (let i = 0, rcache; i < nBytes; i += 4) {
45
+ const _r = r((rcache || Math.random()) * 0x100000000)
46
+
47
+ rcache = _r() * 0x3ade67b7
48
+ words.push((_r() * 0x100000000) | 0)
49
+ }
50
+
51
+ return new WordArray(words, nBytes)
52
+ }
53
+ }
54
+
55
+ /**
56
+ * Base class for inheritance.
57
+ */
58
+ export class Base {
59
+ /**
60
+ * Extends this object and runs the init method.
61
+ * Arguments to create() will be passed to init().
62
+ *
63
+ * @return {Object} The new object.
64
+ *
65
+ * @static
66
+ *
67
+ * @example
68
+ *
69
+ * var instance = MyType.create();
70
+ */
71
+ static create(...args) {
72
+ return new this(...args)
73
+ }
74
+
75
+ /**
76
+ * Copies properties into this object.
77
+ *
78
+ * @param {Object} properties The properties to mix in.
79
+ *
80
+ * @example
81
+ *
82
+ * MyType.mixIn({
83
+ * field: 'value'
84
+ * });
85
+ */
86
+ mixIn(properties) {
87
+ return Object.assign(this, properties)
88
+ }
89
+
90
+ /**
91
+ * Creates a copy of this object.
92
+ *
93
+ * @return {Object} The clone.
94
+ *
95
+ * @example
96
+ *
97
+ * var clone = instance.clone();
98
+ */
99
+ clone() {
100
+ const clone = new this.constructor()
101
+ Object.assign(clone, this)
102
+ return clone
103
+ }
104
+ }
105
+
106
+ /**
107
+ * An array of 32-bit words.
108
+ *
109
+ * @property {Array} words The array of 32-bit words.
110
+ * @property {number} sigBytes The number of significant bytes in this word array.
111
+ */
112
+ export class WordArray extends Base {
113
+ /**
114
+ * Initializes a newly created word array.
115
+ *
116
+ * @param {Array} words (Optional) An array of 32-bit words.
117
+ * @param {number} sigBytes (Optional) The number of significant bytes in the words.
118
+ *
119
+ * @example
120
+ *
121
+ * var wordArray = CryptoJS.lib.WordArray.create();
122
+ * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]);
123
+ * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6);
124
+ */
125
+ constructor(words = [], sigBytes = words.length * 4) {
126
+ super()
127
+
128
+ let typedArray = words
129
+ // Convert buffers to uint8
130
+ if (typedArray instanceof ArrayBuffer) {
131
+ typedArray = new Uint8Array(typedArray)
132
+ }
133
+
134
+ // Convert other array views to uint8
135
+ if (
136
+ typedArray instanceof Int8Array ||
137
+ typedArray instanceof Uint8ClampedArray ||
138
+ typedArray instanceof Int16Array ||
139
+ typedArray instanceof Uint16Array ||
140
+ typedArray instanceof Int32Array ||
141
+ typedArray instanceof Uint32Array ||
142
+ typedArray instanceof Float32Array ||
143
+ typedArray instanceof Float64Array
144
+ ) {
145
+ typedArray = new Uint8Array(
146
+ typedArray.buffer,
147
+ typedArray.byteOffset,
148
+ typedArray.byteLength
149
+ )
150
+ }
151
+
152
+ // Handle Uint8Array
153
+ if (typedArray instanceof Uint8Array) {
154
+ // Shortcut
155
+ const typedArrayByteLength = typedArray.byteLength
156
+
157
+ // Extract bytes
158
+ const _words = []
159
+ for (let i = 0; i < typedArrayByteLength; i += 1) {
160
+ _words[i >>> 2] |= typedArray[i] << (24 - (i % 4) * 8)
161
+ }
162
+
163
+ // Initialize this word array
164
+ this.words = _words
165
+ this.sigBytes = typedArrayByteLength
166
+ } else {
167
+ // Else call normal init
168
+ this.words = words
169
+ this.sigBytes = sigBytes
170
+ }
171
+ }
172
+
173
+ /**
174
+ * Creates a word array filled with random bytes.
175
+ *
176
+ * @param {number} nBytes The number of random bytes to generate.
177
+ *
178
+ * @return {WordArray} The random word array.
179
+ *
180
+ * @static
181
+ *
182
+ * @example
183
+ *
184
+ * var wordArray = CryptoJS.lib.WordArray.random(16);
185
+ */
186
+ static random = randomWordArray
187
+
188
+ /**
189
+ * Converts this word array to a string.
190
+ *
191
+ * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex
192
+ *
193
+ * @return {string} The stringified word array.
194
+ *
195
+ * @example
196
+ *
197
+ * var string = wordArray + '';
198
+ * var string = wordArray.toString();
199
+ * var string = wordArray.toString(CryptoJS.enc.Utf8);
200
+ */
201
+ toString(encoder = Hex) {
202
+ return encoder.stringify(this)
203
+ }
204
+
205
+ /**
206
+ * Concatenates a word array to this word array.
207
+ *
208
+ * @param {WordArray} wordArray The word array to append.
209
+ *
210
+ * @return {WordArray} This word array.
211
+ *
212
+ * @example
213
+ *
214
+ * wordArray1.concat(wordArray2);
215
+ */
216
+ concat(wordArray) {
217
+ // Shortcuts
218
+ const thisWords = this.words
219
+ const thatWords = wordArray.words
220
+ const thisSigBytes = this.sigBytes
221
+ const thatSigBytes = wordArray.sigBytes
222
+
223
+ // Clamp excess bits
224
+ this.clamp()
225
+
226
+ // Concat
227
+ if (thisSigBytes % 4) {
228
+ // Copy one byte at a time
229
+ for (let i = 0; i < thatSigBytes; i += 1) {
230
+ const thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff
231
+ thisWords[(thisSigBytes + i) >>> 2] |=
232
+ thatByte << (24 - ((thisSigBytes + i) % 4) * 8)
233
+ }
234
+ } else {
235
+ // Copy one word at a time
236
+ for (let i = 0; i < thatSigBytes; i += 4) {
237
+ thisWords[(thisSigBytes + i) >>> 2] = thatWords[i >>> 2]
238
+ }
239
+ }
240
+ this.sigBytes += thatSigBytes
241
+
242
+ // Chainable
243
+ return this
244
+ }
245
+
246
+ /**
247
+ * Removes insignificant bits.
248
+ *
249
+ * @example
250
+ *
251
+ * wordArray.clamp();
252
+ */
253
+ clamp() {
254
+ // Shortcuts
255
+ const { words, sigBytes } = this
256
+
257
+ // Clamp
258
+ words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8)
259
+ words.length = Math.ceil(sigBytes / 4)
260
+ }
261
+
262
+ /**
263
+ * Creates a copy of this word array.
264
+ *
265
+ * @return {WordArray} The clone.
266
+ *
267
+ * @example
268
+ *
269
+ * var clone = wordArray.clone();
270
+ */
271
+ clone() {
272
+ const clone = super.clone.call(this)
273
+ clone.words = this.words.slice(0)
274
+
275
+ return clone
276
+ }
277
+ }
278
+
279
+ /**
280
+ * Hex encoding strategy.
281
+ */
282
+ export const Hex = {
283
+ /**
284
+ * Converts a word array to a hex string.
285
+ *
286
+ * @param {WordArray} wordArray The word array.
287
+ *
288
+ * @return {string} The hex string.
289
+ *
290
+ * @static
291
+ *
292
+ * @example
293
+ *
294
+ * var hexString = CryptoJS.enc.Hex.stringify(wordArray);
295
+ */
296
+ stringify(wordArray) {
297
+ // Shortcuts
298
+ const { words, sigBytes } = wordArray
299
+
300
+ // Convert
301
+ const hexChars = []
302
+ for (let i = 0; i < sigBytes; i += 1) {
303
+ const bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff
304
+ hexChars.push((bite >>> 4).toString(16))
305
+ hexChars.push((bite & 0x0f).toString(16))
306
+ }
307
+
308
+ return hexChars.join('')
309
+ },
310
+
311
+ /**
312
+ * Converts a hex string to a word array.
313
+ *
314
+ * @param {string} hexStr The hex string.
315
+ *
316
+ * @return {WordArray} The word array.
317
+ *
318
+ * @static
319
+ *
320
+ * @example
321
+ *
322
+ * var wordArray = CryptoJS.enc.Hex.parse(hexString);
323
+ */
324
+ parse(hexStr) {
325
+ // Shortcut
326
+ const hexStrLength = hexStr.length
327
+
328
+ // Convert
329
+ const words = []
330
+ for (let i = 0; i < hexStrLength; i += 2) {
331
+ words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4)
332
+ }
333
+
334
+ return new WordArray(words, hexStrLength / 2)
335
+ },
336
+ }
337
+
338
+ /**
339
+ * Latin1 encoding strategy.
340
+ */
341
+ export const Latin1 = {
342
+ /**
343
+ * Converts a word array to a Latin1 string.
344
+ *
345
+ * @param {WordArray} wordArray The word array.
346
+ *
347
+ * @return {string} The Latin1 string.
348
+ *
349
+ * @static
350
+ *
351
+ * @example
352
+ *
353
+ * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray);
354
+ */
355
+ stringify(wordArray) {
356
+ // Shortcuts
357
+ const { words, sigBytes } = wordArray
358
+
359
+ // Convert
360
+ const latin1Chars = []
361
+ for (let i = 0; i < sigBytes; i += 1) {
362
+ const bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff
363
+ latin1Chars.push(String.fromCharCode(bite))
364
+ }
365
+
366
+ return latin1Chars.join('')
367
+ },
368
+
369
+ /**
370
+ * Converts a Latin1 string to a word array.
371
+ *
372
+ * @param {string} latin1Str The Latin1 string.
373
+ *
374
+ * @return {WordArray} The word array.
375
+ *
376
+ * @static
377
+ *
378
+ * @example
379
+ *
380
+ * var wordArray = CryptoJS.enc.Latin1.parse(latin1String);
381
+ */
382
+ parse(latin1Str) {
383
+ // Shortcut
384
+ const latin1StrLength = latin1Str.length
385
+
386
+ // Convert
387
+ const words = []
388
+ for (let i = 0; i < latin1StrLength; i += 1) {
389
+ words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8)
390
+ }
391
+
392
+ return new WordArray(words, latin1StrLength)
393
+ },
394
+ }
395
+
396
+ /**
397
+ * UTF-8 encoding strategy.
398
+ */
399
+ export const Utf8 = {
400
+ /**
401
+ * Converts a word array to a UTF-8 string.
402
+ *
403
+ * @param {WordArray} wordArray The word array.
404
+ *
405
+ * @return {string} The UTF-8 string.
406
+ *
407
+ * @static
408
+ *
409
+ * @example
410
+ *
411
+ * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray);
412
+ */
413
+ stringify(wordArray) {
414
+ try {
415
+ return decodeURIComponent(escape(Latin1.stringify(wordArray)))
416
+ } catch (e) {
417
+ throw new Error('Malformed UTF-8 data')
418
+ }
419
+ },
420
+
421
+ /**
422
+ * Converts a UTF-8 string to a word array.
423
+ *
424
+ * @param {string} utf8Str The UTF-8 string.
425
+ *
426
+ * @return {WordArray} The word array.
427
+ *
428
+ * @static
429
+ *
430
+ * @example
431
+ *
432
+ * var wordArray = CryptoJS.enc.Utf8.parse(utf8String);
433
+ */
434
+ parse(utf8Str) {
435
+ return Latin1.parse(unescape(encodeURIComponent(utf8Str)))
436
+ },
437
+ }
438
+
439
+ /**
440
+ * Abstract buffered block algorithm template.
441
+ *
442
+ * The property blockSize must be implemented in a concrete subtype.
443
+ *
444
+ * @property {number} _minBufferSize
445
+ *
446
+ * The number of blocks that should be kept unprocessed in the buffer. Default: 0
447
+ */
448
+ export class BufferedBlockAlgorithm extends Base {
449
+ constructor() {
450
+ super()
451
+ this._minBufferSize = 0
452
+ }
453
+
454
+ /**
455
+ * Resets this block algorithm's data buffer to its initial state.
456
+ *
457
+ * @example
458
+ *
459
+ * bufferedBlockAlgorithm.reset();
460
+ */
461
+ reset() {
462
+ // Initial values
463
+ this._data = new WordArray()
464
+ this._nDataBytes = 0
465
+ }
466
+
467
+ /**
468
+ * Adds new data to this block algorithm's buffer.
469
+ *
470
+ * @param {WordArray|string} data
471
+ *
472
+ * The data to append. Strings are converted to a WordArray using UTF-8.
473
+ *
474
+ * @example
475
+ *
476
+ * bufferedBlockAlgorithm._append('data');
477
+ * bufferedBlockAlgorithm._append(wordArray);
478
+ */
479
+ _append(data) {
480
+ let m_data = data
481
+
482
+ // Convert string to WordArray, else assume WordArray already
483
+ if (typeof m_data === 'string') {
484
+ m_data = Utf8.parse(m_data)
485
+ }
486
+
487
+ // Append
488
+ this._data.concat(m_data)
489
+ this._nDataBytes += m_data.sigBytes
490
+ }
491
+
492
+ /**
493
+ * Processes available data blocks.
494
+ *
495
+ * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype.
496
+ *
497
+ * @param {boolean} doFlush Whether all blocks and partial blocks should be processed.
498
+ *
499
+ * @return {WordArray} The processed data.
500
+ *
501
+ * @example
502
+ *
503
+ * var processedData = bufferedBlockAlgorithm._process();
504
+ * var processedData = bufferedBlockAlgorithm._process(!!'flush');
505
+ */
506
+ _process(doFlush) {
507
+ let processedWords
508
+
509
+ // Shortcuts
510
+ const { _data: data, blockSize } = this
511
+ const dataWords = data.words
512
+ const dataSigBytes = data.sigBytes
513
+ const blockSizeBytes = blockSize * 4
514
+
515
+ // Count blocks ready
516
+ let nBlocksReady = dataSigBytes / blockSizeBytes
517
+ if (doFlush) {
518
+ // Round up to include partial blocks
519
+ nBlocksReady = Math.ceil(nBlocksReady)
520
+ } else {
521
+ // Round down to include only full blocks,
522
+ // less the number of blocks that must remain in the buffer
523
+ nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0)
524
+ }
525
+
526
+ // Count words ready
527
+ const nWordsReady = nBlocksReady * blockSize
528
+
529
+ // Count bytes ready
530
+ const nBytesReady = Math.min(nWordsReady * 4, dataSigBytes)
531
+
532
+ // Process blocks
533
+ if (nWordsReady) {
534
+ for (let offset = 0; offset < nWordsReady; offset += blockSize) {
535
+ // Perform concrete-algorithm logic
536
+ this._doProcessBlock(dataWords, offset)
537
+ }
538
+
539
+ // Remove processed words
540
+ processedWords = dataWords.splice(0, nWordsReady)
541
+ data.sigBytes -= nBytesReady
542
+ }
543
+
544
+ // Return processed words
545
+ return new WordArray(processedWords, nBytesReady)
546
+ }
547
+
548
+ /**
549
+ * Creates a copy of this object.
550
+ *
551
+ * @return {Object} The clone.
552
+ *
553
+ * @example
554
+ *
555
+ * var clone = bufferedBlockAlgorithm.clone();
556
+ */
557
+ clone() {
558
+ const clone = super.clone.call(this)
559
+ clone._data = this._data.clone()
560
+
561
+ return clone
562
+ }
563
+ }
564
+
565
+ /**
566
+ * Abstract hasher template.
567
+ *
568
+ * @property {number} blockSize
569
+ *
570
+ * The number of 32-bit words this hasher operates on. Default: 16 (512 bits)
571
+ */
572
+ export class Hasher extends BufferedBlockAlgorithm {
573
+ constructor(cfg) {
574
+ super()
575
+
576
+ this.blockSize = 512 / 32
577
+
578
+ /**
579
+ * Configuration options.
580
+ */
581
+ this.cfg = Object.assign(new Base(), cfg)
582
+
583
+ // Set initial values
584
+ this.reset()
585
+ }
586
+
587
+ /**
588
+ * Creates a shortcut function to a hasher's object interface.
589
+ *
590
+ * @param {Hasher} SubHasher The hasher to create a helper for.
591
+ *
592
+ * @return {Function} The shortcut function.
593
+ *
594
+ * @static
595
+ *
596
+ * @example
597
+ *
598
+ * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256);
599
+ */
600
+ static _createHelper(SubHasher) {
601
+ return (message, cfg) => new SubHasher(cfg).finalize(message)
602
+ }
603
+
604
+ /**
605
+ * Creates a shortcut function to the HMAC's object interface.
606
+ *
607
+ * @param {Hasher} SubHasher The hasher to use in this HMAC helper.
608
+ *
609
+ * @return {Function} The shortcut function.
610
+ *
611
+ * @static
612
+ *
613
+ * @example
614
+ *
615
+ * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256);
616
+ */
617
+ static _createHmacHelper(SubHasher) {
618
+ return (message, key) => new HMAC(SubHasher, key).finalize(message)
619
+ }
620
+
621
+ /**
622
+ * Resets this hasher to its initial state.
623
+ *
624
+ * @example
625
+ *
626
+ * hasher.reset();
627
+ */
628
+ reset() {
629
+ // Reset data buffer
630
+ super.reset.call(this)
631
+
632
+ // Perform concrete-hasher logic
633
+ this._doReset()
634
+ }
635
+
636
+ /**
637
+ * Updates this hasher with a message.
638
+ *
639
+ * @param {WordArray|string} messageUpdate The message to append.
640
+ *
641
+ * @return {Hasher} This hasher.
642
+ *
643
+ * @example
644
+ *
645
+ * hasher.update('message');
646
+ * hasher.update(wordArray);
647
+ */
648
+ update(messageUpdate) {
649
+ // Append
650
+ this._append(messageUpdate)
651
+
652
+ // Update the hash
653
+ this._process()
654
+
655
+ // Chainable
656
+ return this
657
+ }
658
+
659
+ /**
660
+ * Finalizes the hash computation.
661
+ * Note that the finalize operation is effectively a destructive, read-once operation.
662
+ *
663
+ * @param {WordArray|string} messageUpdate (Optional) A final message update.
664
+ *
665
+ * @return {WordArray} The hash.
666
+ *
667
+ * @example
668
+ *
669
+ * var hash = hasher.finalize();
670
+ * var hash = hasher.finalize('message');
671
+ * var hash = hasher.finalize(wordArray);
672
+ */
673
+ finalize(messageUpdate) {
674
+ // Final message update
675
+ if (messageUpdate) {
676
+ this._append(messageUpdate)
677
+ }
678
+
679
+ // Perform concrete-hasher logic
680
+ const hash = this._doFinalize()
681
+
682
+ return hash
683
+ }
684
+ }
685
+
686
+ /**
687
+ * HMAC algorithm.
688
+ */
689
+ export class HMAC extends Base {
690
+ /**
691
+ * Initializes a newly created HMAC.
692
+ *
693
+ * @param {Hasher} SubHasher The hash algorithm to use.
694
+ * @param {WordArray|string} key The secret key.
695
+ *
696
+ * @example
697
+ *
698
+ * var hmacHasher = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, key);
699
+ */
700
+ constructor(SubHasher, key) {
701
+ super()
702
+
703
+ const hasher = new SubHasher()
704
+ this._hasher = hasher
705
+
706
+ // Convert string to WordArray, else assume WordArray already
707
+ let _key = key
708
+ if (typeof _key === 'string') {
709
+ _key = Utf8.parse(_key)
710
+ }
711
+
712
+ // Shortcuts
713
+ const hasherBlockSize = hasher.blockSize
714
+ const hasherBlockSizeBytes = hasherBlockSize * 4
715
+
716
+ // Allow arbitrary length keys
717
+ if (_key.sigBytes > hasherBlockSizeBytes) {
718
+ _key = hasher.finalize(key)
719
+ }
720
+
721
+ // Clamp excess bits
722
+ _key.clamp()
723
+
724
+ // Clone key for inner and outer pads
725
+ const oKey = _key.clone()
726
+ this._oKey = oKey
727
+ const iKey = _key.clone()
728
+ this._iKey = iKey
729
+
730
+ // Shortcuts
731
+ const oKeyWords = oKey.words
732
+ const iKeyWords = iKey.words
733
+
734
+ // XOR keys with pad constants
735
+ for (let i = 0; i < hasherBlockSize; i += 1) {
736
+ oKeyWords[i] ^= 0x5c5c5c5c
737
+ iKeyWords[i] ^= 0x36363636
738
+ }
739
+ oKey.sigBytes = hasherBlockSizeBytes
740
+ iKey.sigBytes = hasherBlockSizeBytes
741
+
742
+ // Set initial values
743
+ this.reset()
744
+ }
745
+
746
+ /**
747
+ * Resets this HMAC to its initial state.
748
+ *
749
+ * @example
750
+ *
751
+ * hmacHasher.reset();
752
+ */
753
+ reset() {
754
+ // Shortcut
755
+ const hasher = this._hasher
756
+
757
+ // Reset
758
+ hasher.reset()
759
+ hasher.update(this._iKey)
760
+ }
761
+
762
+ /**
763
+ * Updates this HMAC with a message.
764
+ *
765
+ * @param {WordArray|string} messageUpdate The message to append.
766
+ *
767
+ * @return {HMAC} This HMAC instance.
768
+ *
769
+ * @example
770
+ *
771
+ * hmacHasher.update('message');
772
+ * hmacHasher.update(wordArray);
773
+ */
774
+ update(messageUpdate) {
775
+ this._hasher.update(messageUpdate)
776
+
777
+ // Chainable
778
+ return this
779
+ }
780
+
781
+ /**
782
+ * Finalizes the HMAC computation.
783
+ * Note that the finalize operation is effectively a destructive, read-once operation.
784
+ *
785
+ * @param {WordArray|string} messageUpdate (Optional) A final message update.
786
+ *
787
+ * @return {WordArray} The HMAC.
788
+ *
789
+ * @example
790
+ *
791
+ * var hmac = hmacHasher.finalize();
792
+ * var hmac = hmacHasher.finalize('message');
793
+ * var hmac = hmacHasher.finalize(wordArray);
794
+ */
795
+ finalize(messageUpdate) {
796
+ // Shortcut
797
+ const hasher = this._hasher
798
+
799
+ // Compute HMAC
800
+ const innerHash = hasher.finalize(messageUpdate)
801
+ hasher.reset()
802
+ const hmac = hasher.finalize(this._oKey.clone().concat(innerHash))
803
+
804
+ return hmac
805
+ }
806
+ }