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.
- package/.editorconfig +10 -0
- package/.eslintrc.isomorphic.js +26 -0
- package/.eslintrc.js +86 -0
- package/.gitattributes +1 -0
- package/.github/workflows/ci.yml +33 -0
- package/.github/workflows/deploy-browser-cdn-candidate.yml +51 -0
- package/.github/workflows/deploy-releases.yml +178 -0
- package/.nvmrc +1 -0
- package/.prettierrc +7 -0
- package/.vscode/extensions.json +3 -0
- package/.vscode/launch.json +81 -0
- package/.vscode/settings.json +41 -0
- package/.yarn/plugins/@yarnpkg/plugin-constraints.cjs +52 -0
- package/.yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs +546 -0
- package/.yarn/plugins/@yarnpkg/plugin-typescript.cjs +9 -0
- package/.yarn/plugins/@yarnpkg/plugin-workspace-tools.cjs +28 -0
- package/.yarn/releases/yarn-3.4.1.cjs +873 -0
- package/.yarnrc.yml +15 -0
- package/jest.config.js +18 -0
- package/package.json +59 -0
- package/packages/browser/.eslintrc.js +9 -0
- package/packages/browser/.lintstagedrc.js +1 -0
- package/packages/browser/ARCHITECTURE.md +48 -0
- package/packages/browser/LICENSE.MD +45 -0
- package/packages/browser/Makefile +64 -0
- package/packages/browser/README.md +227 -0
- package/packages/browser/e2e-tests/local-server.ts +28 -0
- package/packages/browser/e2e-tests/performance/ajs-perf-browser.test.ts +75 -0
- package/packages/browser/jest.config.js +15 -0
- package/packages/browser/jest.setup.js +10 -0
- package/packages/browser/package.json +106 -0
- package/packages/browser/qa/README.md +41 -0
- package/packages/browser/qa/__fixtures__/snippets.ts +148 -0
- package/packages/browser/qa/__tests__/backwards-compatibility.test.ts +180 -0
- package/packages/browser/qa/__tests__/destinations.test.ts +101 -0
- package/packages/browser/qa/__tests__/smoke.test.ts +170 -0
- package/packages/browser/qa/lib/benchmark.ts +36 -0
- package/packages/browser/qa/lib/browser.ts +28 -0
- package/packages/browser/qa/lib/jest-reporter.js +57 -0
- package/packages/browser/qa/lib/runner.ts +142 -0
- package/packages/browser/qa/lib/schema.ts +59 -0
- package/packages/browser/qa/lib/server.ts +54 -0
- package/packages/browser/qa/lib/stats.ts +52 -0
- package/packages/browser/scripts/build-prep.sh +7 -0
- package/packages/browser/scripts/ci.sh +15 -0
- package/packages/browser/scripts/release.js +121 -0
- package/packages/browser/scripts/release.sh +9 -0
- package/packages/browser/scripts/run.sh +8 -0
- package/packages/browser/src/browser/__tests__/analytics-lazy-init.integration.test.ts +51 -0
- package/packages/browser/src/browser/__tests__/analytics-pre-init.integration.test.ts +440 -0
- package/packages/browser/src/browser/__tests__/anon-id-and-reset.integration.test.ts +73 -0
- package/packages/browser/src/browser/__tests__/cdn.test.ts +53 -0
- package/packages/browser/src/browser/__tests__/csp-detection.test.ts +140 -0
- package/packages/browser/src/browser/__tests__/inspector.integration.test.ts +121 -0
- package/packages/browser/src/browser/__tests__/integration.test.ts +1213 -0
- package/packages/browser/src/browser/__tests__/integrations.integration.test.ts +260 -0
- package/packages/browser/src/browser/__tests__/page-enrichment.integration.test.ts +216 -0
- package/packages/browser/src/browser/__tests__/query-string.integration.test.ts +116 -0
- package/packages/browser/src/browser/__tests__/standalone-analytics.test.ts +303 -0
- package/packages/browser/src/browser/__tests__/standalone-errors.test.ts +136 -0
- package/packages/browser/src/browser/__tests__/standalone.test.ts +97 -0
- package/packages/browser/src/browser/__tests__/typedef-tests/analytics-browser.ts +150 -0
- package/packages/browser/src/browser/__tests__/update-cdn-settings.test.ts +71 -0
- package/packages/browser/src/browser/browser-umd.ts +19 -0
- package/packages/browser/src/browser/index.ts +486 -0
- package/packages/browser/src/browser/standalone-analytics.ts +62 -0
- package/packages/browser/src/browser/standalone-interface.ts +11 -0
- package/packages/browser/src/browser/standalone.ts +92 -0
- package/packages/browser/src/core/__tests__/track-form.test.ts +193 -0
- package/packages/browser/src/core/__tests__/track-link.test.ts +252 -0
- package/packages/browser/src/core/analytics/__tests__/integration.test.ts +334 -0
- package/packages/browser/src/core/analytics/__tests__/test-plugins.ts +94 -0
- package/packages/browser/src/core/analytics/index.ts +672 -0
- package/packages/browser/src/core/analytics/interfaces.ts +100 -0
- package/packages/browser/src/core/arguments-resolver/__tests__/index.test.ts +524 -0
- package/packages/browser/src/core/arguments-resolver/index.ts +200 -0
- package/packages/browser/src/core/auto-track.ts +152 -0
- package/packages/browser/src/core/buffer/__tests__/index.test.ts +455 -0
- package/packages/browser/src/core/buffer/index.ts +371 -0
- package/packages/browser/src/core/callback/index.ts +1 -0
- package/packages/browser/src/core/connection/__tests__/index.test.ts +25 -0
- package/packages/browser/src/core/connection/index.ts +13 -0
- package/packages/browser/src/core/constants/index.ts +1 -0
- package/packages/browser/src/core/context/__tests__/index.test.ts +201 -0
- package/packages/browser/src/core/context/index.ts +21 -0
- package/packages/browser/src/core/environment/index.ts +7 -0
- package/packages/browser/src/core/events/__tests__/index.test.ts +450 -0
- package/packages/browser/src/core/events/index.ts +280 -0
- package/packages/browser/src/core/events/interfaces.ts +36 -0
- package/packages/browser/src/core/inspector/index.ts +14 -0
- package/packages/browser/src/core/page/__tests__/index.test.ts +130 -0
- package/packages/browser/src/core/page/add-page-context.ts +33 -0
- package/packages/browser/src/core/page/get-page-context.ts +140 -0
- package/packages/browser/src/core/page/index.ts +2 -0
- package/packages/browser/src/core/plugin/index.ts +12 -0
- package/packages/browser/src/core/query-string/__tests__/gracefulDecodeURIComponent.test.ts +17 -0
- package/packages/browser/src/core/query-string/__tests__/index.test.ts +149 -0
- package/packages/browser/src/core/query-string/__tests__/pickPrefix.test.ts +31 -0
- package/packages/browser/src/core/query-string/__tests__/useQueryString.test.ts +60 -0
- package/packages/browser/src/core/query-string/gracefulDecodeURIComponent.ts +16 -0
- package/packages/browser/src/core/query-string/index.ts +64 -0
- package/packages/browser/src/core/query-string/pickPrefix.ts +20 -0
- package/packages/browser/src/core/queue/__tests__/event-queue.test.ts +82 -0
- package/packages/browser/src/core/queue/event-queue.ts +22 -0
- package/packages/browser/src/core/session/__tests__/index.test.ts +41 -0
- package/packages/browser/src/core/session/index.ts +107 -0
- package/packages/browser/src/core/stats/__tests__/index.test.ts +15 -0
- package/packages/browser/src/core/stats/__tests__/remote-metrics.test.ts +189 -0
- package/packages/browser/src/core/stats/index.ts +15 -0
- package/packages/browser/src/core/stats/remote-metrics.ts +144 -0
- package/packages/browser/src/core/storage/__tests__/cookieStorage.test.ts +58 -0
- package/packages/browser/src/core/storage/__tests__/localStorage.test.ts +70 -0
- package/packages/browser/src/core/storage/__tests__/test-helpers.ts +26 -0
- package/packages/browser/src/core/storage/__tests__/universalStorage.test.ts +167 -0
- package/packages/browser/src/core/storage/cookieStorage.ts +80 -0
- package/packages/browser/src/core/storage/index.ts +64 -0
- package/packages/browser/src/core/storage/localStorage.ts +45 -0
- package/packages/browser/src/core/storage/memoryStorage.ts +22 -0
- package/packages/browser/src/core/storage/settings.ts +23 -0
- package/packages/browser/src/core/storage/types.ts +49 -0
- package/packages/browser/src/core/storage/universalStorage.ts +78 -0
- package/packages/browser/src/core/user/__tests__/index.test.ts +922 -0
- package/packages/browser/src/core/user/__tests__/migrate.test.ts +101 -0
- package/packages/browser/src/core/user/__tests__/session.test.ts +136 -0
- package/packages/browser/src/core/user/__tests__/tld.test.ts +36 -0
- package/packages/browser/src/core/user/index.ts +399 -0
- package/packages/browser/src/core/user/migrate.ts +126 -0
- package/packages/browser/src/core/user/tld.ts +65 -0
- package/packages/browser/src/core/user/vendor/crypto-es/LICENSE +53 -0
- package/packages/browser/src/core/user/vendor/crypto-es/lib/aes.ts +302 -0
- package/packages/browser/src/core/user/vendor/crypto-es/lib/cipher-core.ts +922 -0
- package/packages/browser/src/core/user/vendor/crypto-es/lib/core.ts +806 -0
- package/packages/browser/src/core/user/vendor/crypto-es/lib/enc-base64.ts +110 -0
- package/packages/browser/src/core/user/vendor/crypto-es/lib/evpkdf.ts +110 -0
- package/packages/browser/src/core/user/vendor/crypto-es/lib/md5.ts +238 -0
- package/packages/browser/src/core/user/vendor/readme.md +7 -0
- package/packages/browser/src/generated/__tests__/version.test.ts +18 -0
- package/packages/browser/src/generated/version.ts +2 -0
- package/packages/browser/src/index.ts +13 -0
- package/packages/browser/src/lib/__tests__/embedded-write-key.test.ts +15 -0
- package/packages/browser/src/lib/__tests__/fetch.test.ts +35 -0
- package/packages/browser/src/lib/__tests__/get-process-env.test.ts +5 -0
- package/packages/browser/src/lib/__tests__/group-by.test.ts +96 -0
- package/packages/browser/src/lib/__tests__/is-plan-event-enabled.test.ts +36 -0
- package/packages/browser/src/lib/__tests__/is-thenable.test.ts +39 -0
- package/packages/browser/src/lib/__tests__/merged-options.test.ts +123 -0
- package/packages/browser/src/lib/__tests__/on-page-change.test.ts +74 -0
- package/packages/browser/src/lib/__tests__/parse-cdn.test.ts +88 -0
- package/packages/browser/src/lib/__tests__/pick.test.ts +34 -0
- package/packages/browser/src/lib/__tests__/pick.typedef.ts +39 -0
- package/packages/browser/src/lib/bind-all.ts +19 -0
- package/packages/browser/src/lib/browser-polyfill.ts +23 -0
- package/packages/browser/src/lib/client-hints/__tests__/index.test.ts +66 -0
- package/packages/browser/src/lib/client-hints/index.ts +16 -0
- package/packages/browser/src/lib/client-hints/interfaces.ts +42 -0
- package/packages/browser/src/lib/create-deferred.ts +16 -0
- package/packages/browser/src/lib/csp-detection.ts +8 -0
- package/packages/browser/src/lib/embedded-write-key.ts +24 -0
- package/packages/browser/src/lib/fetch.ts +10 -0
- package/packages/browser/src/lib/get-global.ts +16 -0
- package/packages/browser/src/lib/get-process-env.ts +11 -0
- package/packages/browser/src/lib/global-analytics-helper.ts +31 -0
- package/packages/browser/src/lib/group-by.ts +30 -0
- package/packages/browser/src/lib/is-plan-event-enabled.ts +20 -0
- package/packages/browser/src/lib/is-thenable.ts +9 -0
- package/packages/browser/src/lib/load-script.ts +66 -0
- package/packages/browser/src/lib/merged-options.ts +46 -0
- package/packages/browser/src/lib/on-page-change.ts +29 -0
- package/packages/browser/src/lib/p-while.ts +12 -0
- package/packages/browser/src/lib/parse-cdn.ts +56 -0
- package/packages/browser/src/lib/pick.ts +28 -0
- package/packages/browser/src/lib/priority-queue/__tests__/backoff.test.ts +23 -0
- package/packages/browser/src/lib/priority-queue/__tests__/index.test.ts +158 -0
- package/packages/browser/src/lib/priority-queue/__tests__/persisted.test.ts +228 -0
- package/packages/browser/src/lib/priority-queue/backoff.ts +24 -0
- package/packages/browser/src/lib/priority-queue/index.ts +6 -0
- package/packages/browser/src/lib/priority-queue/persisted.ts +127 -0
- package/packages/browser/src/lib/sleep.ts +4 -0
- package/packages/browser/src/lib/to-facade.ts +53 -0
- package/packages/browser/src/lib/version-type.ts +10 -0
- package/packages/browser/src/node/__tests__/node-integration.test.ts +19 -0
- package/packages/browser/src/node/index.ts +36 -0
- package/packages/browser/src/node/node.browser.ts +7 -0
- package/packages/browser/src/plugins/ajs-destination/__tests__/index.test.ts +834 -0
- package/packages/browser/src/plugins/ajs-destination/index.ts +392 -0
- package/packages/browser/src/plugins/ajs-destination/loader.ts +129 -0
- package/packages/browser/src/plugins/ajs-destination/types.ts +44 -0
- package/packages/browser/src/plugins/ajs-destination/utils.ts +32 -0
- package/packages/browser/src/plugins/analytics-node/__tests__/index.test.ts +69 -0
- package/packages/browser/src/plugins/analytics-node/index.ts +67 -0
- package/packages/browser/src/plugins/env-enrichment/__tests__/index.test.ts +421 -0
- package/packages/browser/src/plugins/env-enrichment/index.ts +208 -0
- package/packages/browser/src/plugins/hightouchio/__tests__/batched-dispatcher.test.ts +299 -0
- package/packages/browser/src/plugins/hightouchio/__tests__/index.test.ts +317 -0
- package/packages/browser/src/plugins/hightouchio/__tests__/normalize.test.ts +181 -0
- package/packages/browser/src/plugins/hightouchio/__tests__/retries.test.ts +82 -0
- package/packages/browser/src/plugins/hightouchio/batched-dispatcher.ts +127 -0
- package/packages/browser/src/plugins/hightouchio/fetch-dispatcher.ts +27 -0
- package/packages/browser/src/plugins/hightouchio/index.ts +147 -0
- package/packages/browser/src/plugins/hightouchio/normalize.ts +71 -0
- package/packages/browser/src/plugins/hightouchio/schedule-flush.ts +58 -0
- package/packages/browser/src/plugins/legacy-video-plugins/__tests__/index.test.ts +48 -0
- package/packages/browser/src/plugins/legacy-video-plugins/index.ts +16 -0
- package/packages/browser/src/plugins/middleware/__tests__/index.test.ts +268 -0
- package/packages/browser/src/plugins/middleware/index.ts +131 -0
- package/packages/browser/src/plugins/remote-loader/__tests__/index.test.ts +943 -0
- package/packages/browser/src/plugins/remote-loader/index.ts +256 -0
- package/packages/browser/src/plugins/remote-middleware/__tests__/index.test.ts +116 -0
- package/packages/browser/src/plugins/remote-middleware/index.ts +44 -0
- package/packages/browser/src/plugins/routing-middleware/__tests__/index.test.ts +64 -0
- package/packages/browser/src/plugins/routing-middleware/index.ts +37 -0
- package/packages/browser/src/plugins/schema-filter/__tests__/index.test.ts +520 -0
- package/packages/browser/src/plugins/schema-filter/index.ts +90 -0
- package/packages/browser/src/plugins/validation/__tests__/index.test.ts +78 -0
- package/packages/browser/src/plugins/validation/index.ts +44 -0
- package/packages/browser/src/test-helpers/browser-storage.ts +75 -0
- package/packages/browser/src/test-helpers/factories.ts +18 -0
- package/packages/browser/src/test-helpers/fetch-parse.ts +8 -0
- package/packages/browser/src/test-helpers/fixtures/cdn-settings.ts +301 -0
- package/packages/browser/src/test-helpers/fixtures/classic-destination.ts +25 -0
- package/packages/browser/src/test-helpers/fixtures/client-hints.ts +28 -0
- package/packages/browser/src/test-helpers/fixtures/create-fetch-method.ts +30 -0
- package/packages/browser/src/test-helpers/fixtures/index.ts +4 -0
- package/packages/browser/src/test-helpers/fixtures/page-context.ts +11 -0
- package/packages/browser/src/test-helpers/test-writekeys.ts +5 -0
- package/packages/browser/src/test-helpers/type-assertions.ts +11 -0
- package/packages/browser/src/tester/__fixtures__/hightouch-snippet.ts +64 -0
- package/packages/browser/src/tester/__fixtures__/index.html +8 -0
- package/packages/browser/src/tester/ajs-perf.ts +30 -0
- package/packages/browser/src/tester/ajs-tester.ts +119 -0
- package/packages/browser/src/tester/server.js +16 -0
- package/packages/browser/tsconfig.build.json +9 -0
- package/packages/browser/tsconfig.json +13 -0
- package/packages/browser/webpack.config.js +106 -0
- package/packages/config/package.json +10 -0
- package/packages/config/src/index.js +4 -0
- package/packages/config/src/jest/config.js +50 -0
- package/packages/config/src/jest/get-module-map.js +34 -0
- package/packages/config/src/lint-staged/config.js +4 -0
- package/packages/config-webpack/package.json +20 -0
- package/packages/config-webpack/webpack.config.common.js +75 -0
- package/packages/consent/consent-tools/.eslintrc.js +7 -0
- package/packages/consent/consent-tools/.lintstagedrc.js +1 -0
- package/packages/consent/consent-tools/LICENSE +45 -0
- package/packages/consent/consent-tools/README.md +104 -0
- package/packages/consent/consent-tools/jest.config.js +6 -0
- package/packages/consent/consent-tools/jest.setup.js +4 -0
- package/packages/consent/consent-tools/package.json +48 -0
- package/packages/consent/consent-tools/src/domain/__tests__/assertions/integrations-assertions.ts +37 -0
- package/packages/consent/consent-tools/src/domain/__tests__/consent-stamping.test.ts +45 -0
- package/packages/consent/consent-tools/src/domain/__tests__/create-wrapper.test.ts +816 -0
- package/packages/consent/consent-tools/src/domain/__tests__/typedef-tests.ts +21 -0
- package/packages/consent/consent-tools/src/domain/consent-changed.ts +51 -0
- package/packages/consent/consent-tools/src/domain/consent-stamping.ts +19 -0
- package/packages/consent/consent-tools/src/domain/create-wrapper.ts +238 -0
- package/packages/consent/consent-tools/src/domain/get-initialized-analytics.ts +25 -0
- package/packages/consent/consent-tools/src/domain/load-cancellation.ts +31 -0
- package/packages/consent/consent-tools/src/domain/validation/__tests__/options-validators.test.ts +77 -0
- package/packages/consent/consent-tools/src/domain/validation/__tests__/validation-error.test.ts +15 -0
- package/packages/consent/consent-tools/src/domain/validation/common-validators.ts +19 -0
- package/packages/consent/consent-tools/src/domain/validation/index.ts +1 -0
- package/packages/consent/consent-tools/src/domain/validation/options-validators.ts +74 -0
- package/packages/consent/consent-tools/src/domain/validation/validation-error.ts +11 -0
- package/packages/consent/consent-tools/src/index.ts +16 -0
- package/packages/consent/consent-tools/src/types/errors.ts +14 -0
- package/packages/consent/consent-tools/src/types/index.ts +3 -0
- package/packages/consent/consent-tools/src/types/settings.ts +121 -0
- package/packages/consent/consent-tools/src/types/wrapper.ts +107 -0
- package/packages/consent/consent-tools/src/utils/index.ts +4 -0
- package/packages/consent/consent-tools/src/utils/pick.ts +18 -0
- package/packages/consent/consent-tools/src/utils/pipe.ts +14 -0
- package/packages/consent/consent-tools/src/utils/resolve-when.ts +32 -0
- package/packages/consent/consent-tools/src/utils/uniq.ts +4 -0
- package/packages/consent/consent-tools/tsconfig.build.json +9 -0
- package/packages/consent/consent-tools/tsconfig.json +12 -0
- package/packages/consent/consent-wrapper-onetrust/.eslintrc.js +7 -0
- package/packages/consent/consent-wrapper-onetrust/.lintstagedrc.js +1 -0
- package/packages/consent/consent-wrapper-onetrust/LICENSE +45 -0
- package/packages/consent/consent-wrapper-onetrust/README.md +125 -0
- package/packages/consent/consent-wrapper-onetrust/img/onetrust-cat-id.jpg +0 -0
- package/packages/consent/consent-wrapper-onetrust/img/onetrust-popup.jpg +0 -0
- package/packages/consent/consent-wrapper-onetrust/jest.config.js +6 -0
- package/packages/consent/consent-wrapper-onetrust/jest.setup.js +4 -0
- package/packages/consent/consent-wrapper-onetrust/package.json +60 -0
- package/packages/consent/consent-wrapper-onetrust/src/domain/__tests__/wrapper.test.ts +151 -0
- package/packages/consent/consent-wrapper-onetrust/src/domain/wrapper.ts +61 -0
- package/packages/consent/consent-wrapper-onetrust/src/index.ts +6 -0
- package/packages/consent/consent-wrapper-onetrust/src/index.umd.ts +11 -0
- package/packages/consent/consent-wrapper-onetrust/src/lib/__tests__/onetrust-api.test.ts +181 -0
- package/packages/consent/consent-wrapper-onetrust/src/lib/onetrust-api.ts +155 -0
- package/packages/consent/consent-wrapper-onetrust/src/lib/validation/index.ts +1 -0
- package/packages/consent/consent-wrapper-onetrust/src/lib/validation/onetrust-api-error.ts +11 -0
- package/packages/consent/consent-wrapper-onetrust/src/test-helpers/mocks.ts +23 -0
- package/packages/consent/consent-wrapper-onetrust/src/test-helpers/onetrust-globals.d.ts +11 -0
- package/packages/consent/consent-wrapper-onetrust/src/test-helpers/utils.ts +3 -0
- package/packages/consent/consent-wrapper-onetrust/tsconfig.build.json +9 -0
- package/packages/consent/consent-wrapper-onetrust/tsconfig.json +11 -0
- package/packages/consent/consent-wrapper-onetrust/webpack.config.js +25 -0
- package/packages/core/.eslintrc.js +4 -0
- package/packages/core/.lintstagedrc.js +1 -0
- package/packages/core/LICENSE.MD +45 -0
- package/packages/core/README.md +3 -0
- package/packages/core/jest.config.js +5 -0
- package/packages/core/jest.setup.js +10 -0
- package/packages/core/package.json +40 -0
- package/packages/core/src/analytics/__tests__/dispatch.test.ts +95 -0
- package/packages/core/src/analytics/dispatch.ts +58 -0
- package/packages/core/src/analytics/index.ts +11 -0
- package/packages/core/src/callback/__tests__/index.test.ts +85 -0
- package/packages/core/src/callback/index.ts +51 -0
- package/packages/core/src/context/index.ts +123 -0
- package/packages/core/src/emitter/__tests__/emitter.test.ts +74 -0
- package/packages/core/src/emitter/index.ts +65 -0
- package/packages/core/src/emitter/interface.ts +31 -0
- package/packages/core/src/events/__tests__/index.test.ts +394 -0
- package/packages/core/src/events/index.ts +280 -0
- package/packages/core/src/events/interfaces.ts +475 -0
- package/packages/core/src/index.ts +19 -0
- package/packages/core/src/logger/__tests__/index.test.ts +66 -0
- package/packages/core/src/logger/index.ts +74 -0
- package/packages/core/src/plugins/index.ts +43 -0
- package/packages/core/src/priority-queue/__tests__/backoff.test.ts +23 -0
- package/packages/core/src/priority-queue/__tests__/index.test.ts +158 -0
- package/packages/core/src/priority-queue/backoff.ts +24 -0
- package/packages/core/src/priority-queue/index.ts +103 -0
- package/packages/core/src/queue/__tests__/event-queue.test.ts +678 -0
- package/packages/core/src/queue/__tests__/extension-flushing.test.ts +416 -0
- package/packages/core/src/queue/delivery.ts +73 -0
- package/packages/core/src/queue/event-queue.ts +318 -0
- package/packages/core/src/stats/__tests__/index.test.ts +103 -0
- package/packages/core/src/stats/index.ts +88 -0
- package/packages/core/src/task/__tests__/task-group.test.ts +26 -0
- package/packages/core/src/task/task-group.ts +31 -0
- package/packages/core/src/user/index.ts +7 -0
- package/packages/core/src/utils/__tests__/group-by.test.ts +96 -0
- package/packages/core/src/utils/__tests__/is-plain-object.test.ts +27 -0
- package/packages/core/src/utils/__tests__/is-thenable.test.ts +39 -0
- package/packages/core/src/utils/bind-all.ts +19 -0
- package/packages/core/src/utils/get-global.ts +17 -0
- package/packages/core/src/utils/group-by.ts +30 -0
- package/packages/core/src/utils/has-properties.ts +7 -0
- package/packages/core/src/utils/is-plain-object.ts +26 -0
- package/packages/core/src/utils/is-thenable.ts +9 -0
- package/packages/core/src/utils/p-while.ts +12 -0
- package/packages/core/src/utils/pick.ts +8 -0
- package/packages/core/src/utils/ts-helpers.ts +13 -0
- package/packages/core/src/validation/__tests__/assertions.test.ts +155 -0
- package/packages/core/src/validation/assertions.ts +72 -0
- package/packages/core/src/validation/errors.ts +8 -0
- package/packages/core/src/validation/helpers.ts +23 -0
- package/packages/core/test-helpers/index.ts +2 -0
- package/packages/core/test-helpers/test-ctx.ts +7 -0
- package/packages/core/test-helpers/test-event-queue.ts +7 -0
- package/packages/core/tsconfig.build.json +9 -0
- package/packages/core/tsconfig.json +11 -0
- package/packages/node/.eslintrc.js +7 -0
- package/packages/node/.lintstagedrc.js +1 -0
- package/packages/node/LICENSE +45 -0
- package/packages/node/README.md +138 -0
- package/packages/node/jest.config.js +5 -0
- package/packages/node/jest.setup.js +4 -0
- package/packages/node/package.json +50 -0
- package/packages/node/scripts/version.sh +11 -0
- package/packages/node/src/__tests__/callback.test.ts +47 -0
- package/packages/node/src/__tests__/disable.integration.test.ts +42 -0
- package/packages/node/src/__tests__/emitter.integration.test.ts +45 -0
- package/packages/node/src/__tests__/graceful-shutdown-integration.test.ts +244 -0
- package/packages/node/src/__tests__/http-client.integration.test.ts +69 -0
- package/packages/node/src/__tests__/http-integration.test.ts +362 -0
- package/packages/node/src/__tests__/integration.test.ts +357 -0
- package/packages/node/src/__tests__/plugins.test.ts +16 -0
- package/packages/node/src/__tests__/settings.test.ts +9 -0
- package/packages/node/src/__tests__/test-helpers/assert-shape/http-request-event.ts +13 -0
- package/packages/node/src/__tests__/test-helpers/assert-shape/index.ts +2 -0
- package/packages/node/src/__tests__/test-helpers/assert-shape/segment-http-api.ts +43 -0
- package/packages/node/src/__tests__/test-helpers/create-test-analytics.ts +42 -0
- package/packages/node/src/__tests__/test-helpers/factories.ts +17 -0
- package/packages/node/src/__tests__/test-helpers/is-valid-date.ts +6 -0
- package/packages/node/src/__tests__/test-helpers/resolve-ctx.ts +19 -0
- package/packages/node/src/__tests__/test-helpers/resolve-emitter.ts +11 -0
- package/packages/node/src/__tests__/test-helpers/sleep.ts +3 -0
- package/packages/node/src/__tests__/test-helpers/test-plugin.ts +16 -0
- package/packages/node/src/__tests__/typedef-tests.ts +120 -0
- package/packages/node/src/app/analytics-node.ts +299 -0
- package/packages/node/src/app/context.ts +11 -0
- package/packages/node/src/app/dispatch-emit.ts +42 -0
- package/packages/node/src/app/emitter.ts +23 -0
- package/packages/node/src/app/event-factory.ts +20 -0
- package/packages/node/src/app/event-queue.ts +23 -0
- package/packages/node/src/app/settings.ts +49 -0
- package/packages/node/src/app/types/index.ts +3 -0
- package/packages/node/src/app/types/params.ts +76 -0
- package/packages/node/src/app/types/plugin.ts +5 -0
- package/packages/node/src/app/types/segment-event.ts +7 -0
- package/packages/node/src/generated/version.ts +2 -0
- package/packages/node/src/index.ts +26 -0
- package/packages/node/src/lib/__tests__/abort.test.ts +54 -0
- package/packages/node/src/lib/__tests__/create-url.test.ts +35 -0
- package/packages/node/src/lib/__tests__/env.test.ts +52 -0
- package/packages/node/src/lib/__tests__/get-message-id.test.ts +21 -0
- package/packages/node/src/lib/abort.ts +77 -0
- package/packages/node/src/lib/base-64-encode.ts +8 -0
- package/packages/node/src/lib/create-url.ts +11 -0
- package/packages/node/src/lib/env.ts +45 -0
- package/packages/node/src/lib/extract-promise-parts.ts +21 -0
- package/packages/node/src/lib/fetch.ts +16 -0
- package/packages/node/src/lib/get-message-id.ts +10 -0
- package/packages/node/src/lib/http-client.ts +95 -0
- package/packages/node/src/lib/uuid.ts +1 -0
- package/packages/node/src/plugins/segmentio/__tests__/methods.test.ts +223 -0
- package/packages/node/src/plugins/segmentio/__tests__/publisher.test.ts +411 -0
- package/packages/node/src/plugins/segmentio/context-batch.ts +71 -0
- package/packages/node/src/plugins/segmentio/index.ts +66 -0
- package/packages/node/src/plugins/segmentio/publisher.ts +265 -0
- package/packages/node/tsconfig.build.json +9 -0
- package/packages/node/tsconfig.json +10 -0
- package/packages/test-helpers/.eslintrc.js +7 -0
- package/packages/test-helpers/.lintstagedrc.js +1 -0
- package/packages/test-helpers/jest.config.js +3 -0
- package/packages/test-helpers/package.json +26 -0
- package/packages/test-helpers/src/analytics/cdn-settings-builder.ts +79 -0
- package/packages/test-helpers/src/analytics/index.ts +1 -0
- package/packages/test-helpers/src/index.ts +2 -0
- package/packages/test-helpers/src/utils/index.ts +1 -0
- package/packages/test-helpers/src/utils/sleep.ts +4 -0
- package/packages/test-helpers/tsconfig.build.json +9 -0
- package/packages/test-helpers/tsconfig.json +11 -0
- package/tsconfig.json +21 -0
- package/turbo.json +39 -0
- package/typings/get-monorepo-packages.d.ts +9 -0
- 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
|
+
}
|