@ht-sdks/events-sdk-js-browser 1.0.4
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/LICENSE.MD +45 -0
- package/README.md +227 -0
- package/dist/cjs/browser/browser-umd.js +21 -0
- package/dist/cjs/browser/browser-umd.js.map +1 -0
- package/dist/cjs/browser/index.js +351 -0
- package/dist/cjs/browser/index.js.map +1 -0
- package/dist/cjs/browser/standalone-analytics.js +62 -0
- package/dist/cjs/browser/standalone-analytics.js.map +1 -0
- package/dist/cjs/browser/standalone-interface.js +3 -0
- package/dist/cjs/browser/standalone-interface.js.map +1 -0
- package/dist/cjs/browser/standalone.js +95 -0
- package/dist/cjs/browser/standalone.js.map +1 -0
- package/dist/cjs/core/analytics/index.js +589 -0
- package/dist/cjs/core/analytics/index.js.map +1 -0
- package/dist/cjs/core/analytics/interfaces.js +3 -0
- package/dist/cjs/core/analytics/interfaces.js.map +1 -0
- package/dist/cjs/core/arguments-resolver/index.js +134 -0
- package/dist/cjs/core/arguments-resolver/index.js.map +1 -0
- package/dist/cjs/core/auto-track.js +108 -0
- package/dist/cjs/core/auto-track.js.map +1 -0
- package/dist/cjs/core/buffer/index.js +303 -0
- package/dist/cjs/core/buffer/index.js.map +1 -0
- package/dist/cjs/core/callback/index.js +7 -0
- package/dist/cjs/core/callback/index.js.map +1 -0
- package/dist/cjs/core/connection/index.js +16 -0
- package/dist/cjs/core/connection/index.js.map +1 -0
- package/dist/cjs/core/constants/index.js +5 -0
- package/dist/cjs/core/constants/index.js.map +1 -0
- package/dist/cjs/core/context/index.js +19 -0
- package/dist/cjs/core/context/index.js.map +1 -0
- package/dist/cjs/core/environment/index.js +12 -0
- package/dist/cjs/core/environment/index.js.map +1 -0
- package/dist/cjs/core/events/index.js +138 -0
- package/dist/cjs/core/events/index.js.map +1 -0
- package/dist/cjs/core/events/interfaces.js +3 -0
- package/dist/cjs/core/events/interfaces.js.map +1 -0
- package/dist/cjs/core/inspector/index.js +14 -0
- package/dist/cjs/core/inspector/index.js.map +1 -0
- package/dist/cjs/core/page/add-page-context.js +25 -0
- package/dist/cjs/core/page/add-page-context.js.map +1 -0
- package/dist/cjs/core/page/get-page-context.js +92 -0
- package/dist/cjs/core/page/get-page-context.js.map +1 -0
- package/dist/cjs/core/page/index.js +6 -0
- package/dist/cjs/core/page/index.js.map +1 -0
- package/dist/cjs/core/plugin/index.js +3 -0
- package/dist/cjs/core/plugin/index.js.map +1 -0
- package/dist/cjs/core/query-string/gracefulDecodeURIComponent.js +20 -0
- package/dist/cjs/core/query-string/gracefulDecodeURIComponent.js.map +1 -0
- package/dist/cjs/core/query-string/index.js +48 -0
- package/dist/cjs/core/query-string/index.js.map +1 -0
- package/dist/cjs/core/query-string/pickPrefix.js +20 -0
- package/dist/cjs/core/query-string/pickPrefix.js.map +1 -0
- package/dist/cjs/core/queue/event-queue.js +27 -0
- package/dist/cjs/core/queue/event-queue.js.map +1 -0
- package/dist/cjs/core/session/index.js +71 -0
- package/dist/cjs/core/session/index.js.map +1 -0
- package/dist/cjs/core/stats/index.js +23 -0
- package/dist/cjs/core/stats/index.js.map +1 -0
- package/dist/cjs/core/stats/remote-metrics.js +111 -0
- package/dist/cjs/core/stats/remote-metrics.js.map +1 -0
- package/dist/cjs/core/storage/cookieStorage.js +72 -0
- package/dist/cjs/core/storage/cookieStorage.js.map +1 -0
- package/dist/cjs/core/storage/index.js +64 -0
- package/dist/cjs/core/storage/index.js.map +1 -0
- package/dist/cjs/core/storage/localStorage.js +51 -0
- package/dist/cjs/core/storage/localStorage.js.map +1 -0
- package/dist/cjs/core/storage/memoryStorage.js +24 -0
- package/dist/cjs/core/storage/memoryStorage.js.map +1 -0
- package/dist/cjs/core/storage/settings.js +16 -0
- package/dist/cjs/core/storage/settings.js.map +1 -0
- package/dist/cjs/core/storage/types.js +9 -0
- package/dist/cjs/core/storage/types.js.map +1 -0
- package/dist/cjs/core/storage/universalStorage.js +66 -0
- package/dist/cjs/core/storage/universalStorage.js.map +1 -0
- package/dist/cjs/core/user/index.js +273 -0
- package/dist/cjs/core/user/index.js.map +1 -0
- package/dist/cjs/core/user/migrate.js +114 -0
- package/dist/cjs/core/user/migrate.js.map +1 -0
- package/dist/cjs/core/user/tld.js +64 -0
- package/dist/cjs/core/user/tld.js.map +1 -0
- package/dist/cjs/core/user/vendor/crypto-es/lib/aes.js +248 -0
- package/dist/cjs/core/user/vendor/crypto-es/lib/aes.js.map +1 -0
- package/dist/cjs/core/user/vendor/crypto-es/lib/cipher-core.js +841 -0
- package/dist/cjs/core/user/vendor/crypto-es/lib/cipher-core.js.map +1 -0
- package/dist/cjs/core/user/vendor/crypto-es/lib/core.js +747 -0
- package/dist/cjs/core/user/vendor/crypto-es/lib/core.js.map +1 -0
- package/dist/cjs/core/user/vendor/crypto-es/lib/enc-base64.js +102 -0
- package/dist/cjs/core/user/vendor/crypto-es/lib/enc-base64.js.map +1 -0
- package/dist/cjs/core/user/vendor/crypto-es/lib/evpkdf.js +105 -0
- package/dist/cjs/core/user/vendor/crypto-es/lib/evpkdf.js.map +1 -0
- package/dist/cjs/core/user/vendor/crypto-es/lib/md5.js +217 -0
- package/dist/cjs/core/user/vendor/crypto-es/lib/md5.js.map +1 -0
- package/dist/cjs/generated/version.js +6 -0
- package/dist/cjs/generated/version.js.map +1 -0
- package/dist/cjs/index.js +16 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/lib/bind-all.js +17 -0
- package/dist/cjs/lib/bind-all.js.map +1 -0
- package/dist/cjs/lib/browser-polyfill.js +22 -0
- package/dist/cjs/lib/browser-polyfill.js.map +1 -0
- package/dist/cjs/lib/client-hints/index.js +21 -0
- package/dist/cjs/lib/client-hints/index.js.map +1 -0
- package/dist/cjs/lib/client-hints/interfaces.js +3 -0
- package/dist/cjs/lib/client-hints/interfaces.js.map +1 -0
- package/dist/cjs/lib/create-deferred.js +21 -0
- package/dist/cjs/lib/create-deferred.js.map +1 -0
- package/dist/cjs/lib/csp-detection.js +8 -0
- package/dist/cjs/lib/csp-detection.js.map +1 -0
- package/dist/cjs/lib/embedded-write-key.js +22 -0
- package/dist/cjs/lib/embedded-write-key.js.map +1 -0
- package/dist/cjs/lib/fetch.js +19 -0
- package/dist/cjs/lib/fetch.js.map +1 -0
- package/dist/cjs/lib/get-global.js +21 -0
- package/dist/cjs/lib/get-global.js.map +1 -0
- package/dist/cjs/lib/get-process-env.js +15 -0
- package/dist/cjs/lib/get-process-env.js.map +1 -0
- package/dist/cjs/lib/global-analytics-helper.js +34 -0
- package/dist/cjs/lib/global-analytics-helper.js.map +1 -0
- package/dist/cjs/lib/group-by.js +28 -0
- package/dist/cjs/lib/group-by.js.map +1 -0
- package/dist/cjs/lib/is-plan-event-enabled.js +20 -0
- package/dist/cjs/lib/is-plan-event-enabled.js.map +1 -0
- package/dist/cjs/lib/is-thenable.js +15 -0
- package/dist/cjs/lib/is-thenable.js.map +1 -0
- package/dist/cjs/lib/load-script.js +56 -0
- package/dist/cjs/lib/load-script.js.map +1 -0
- package/dist/cjs/lib/merged-options.js +31 -0
- package/dist/cjs/lib/merged-options.js.map +1 -0
- package/dist/cjs/lib/on-page-change.js +35 -0
- package/dist/cjs/lib/on-page-change.js.map +1 -0
- package/dist/cjs/lib/p-while.js +25 -0
- package/dist/cjs/lib/p-while.js.map +1 -0
- package/dist/cjs/lib/parse-cdn.js +55 -0
- package/dist/cjs/lib/parse-cdn.js.map +1 -0
- package/dist/cjs/lib/pick.js +19 -0
- package/dist/cjs/lib/pick.js.map +1 -0
- package/dist/cjs/lib/priority-queue/backoff.js +10 -0
- package/dist/cjs/lib/priority-queue/backoff.js.map +1 -0
- package/dist/cjs/lib/priority-queue/index.js +7 -0
- package/dist/cjs/lib/priority-queue/index.js.map +1 -0
- package/dist/cjs/lib/priority-queue/persisted.js +108 -0
- package/dist/cjs/lib/priority-queue/persisted.js.map +1 -0
- package/dist/cjs/lib/sleep.js +10 -0
- package/dist/cjs/lib/sleep.js.map +1 -0
- package/dist/cjs/lib/to-facade.js +32 -0
- package/dist/cjs/lib/to-facade.js.map +1 -0
- package/dist/cjs/lib/version-type.js +14 -0
- package/dist/cjs/lib/version-type.js.map +1 -0
- package/dist/cjs/node/index.js +43 -0
- package/dist/cjs/node/index.js.map +1 -0
- package/dist/cjs/node/node.browser.js +13 -0
- package/dist/cjs/node/node.browser.js.map +1 -0
- package/dist/cjs/plugins/ajs-destination/index.js +345 -0
- package/dist/cjs/plugins/ajs-destination/index.js.map +1 -0
- package/dist/cjs/plugins/ajs-destination/loader.js +110 -0
- package/dist/cjs/plugins/ajs-destination/loader.js.map +1 -0
- package/dist/cjs/plugins/ajs-destination/types.js +3 -0
- package/dist/cjs/plugins/ajs-destination/types.js.map +1 -0
- package/dist/cjs/plugins/ajs-destination/utils.js +23 -0
- package/dist/cjs/plugins/ajs-destination/utils.js.map +1 -0
- package/dist/cjs/plugins/analytics-node/index.js +65 -0
- package/dist/cjs/plugins/analytics-node/index.js.map +1 -0
- package/dist/cjs/plugins/env-enrichment/index.js +181 -0
- package/dist/cjs/plugins/env-enrichment/index.js.map +1 -0
- package/dist/cjs/plugins/hightouchio/batched-dispatcher.js +113 -0
- package/dist/cjs/plugins/hightouchio/batched-dispatcher.js.map +1 -0
- package/dist/cjs/plugins/hightouchio/fetch-dispatcher.js +21 -0
- package/dist/cjs/plugins/hightouchio/fetch-dispatcher.js.map +1 -0
- package/dist/cjs/plugins/hightouchio/index.js +100 -0
- package/dist/cjs/plugins/hightouchio/index.js.map +1 -0
- package/dist/cjs/plugins/hightouchio/normalize.js +54 -0
- package/dist/cjs/plugins/hightouchio/normalize.js.map +1 -0
- package/dist/cjs/plugins/hightouchio/schedule-flush.js +76 -0
- package/dist/cjs/plugins/hightouchio/schedule-flush.js.map +1 -0
- package/dist/cjs/plugins/legacy-video-plugins/index.js +25 -0
- package/dist/cjs/plugins/legacy-video-plugins/index.js.map +1 -0
- package/dist/cjs/plugins/middleware/index.js +124 -0
- package/dist/cjs/plugins/middleware/index.js.map +1 -0
- package/dist/cjs/plugins/remote-loader/index.js +236 -0
- package/dist/cjs/plugins/remote-loader/index.js.map +1 -0
- package/dist/cjs/plugins/remote-middleware/index.js +70 -0
- package/dist/cjs/plugins/remote-middleware/index.js.map +1 -0
- package/dist/cjs/plugins/routing-middleware/index.js +26 -0
- package/dist/cjs/plugins/routing-middleware/index.js.map +1 -0
- package/dist/cjs/plugins/schema-filter/index.js +67 -0
- package/dist/cjs/plugins/schema-filter/index.js.map +1 -0
- package/dist/cjs/plugins/validation/index.js +33 -0
- package/dist/cjs/plugins/validation/index.js.map +1 -0
- package/dist/pkg/browser/browser-umd.js +18 -0
- package/dist/pkg/browser/browser-umd.js.map +1 -0
- package/dist/pkg/browser/index.js +347 -0
- package/dist/pkg/browser/index.js.map +1 -0
- package/dist/pkg/browser/standalone-analytics.js +58 -0
- package/dist/pkg/browser/standalone-analytics.js.map +1 -0
- package/dist/pkg/browser/standalone-interface.js +2 -0
- package/dist/pkg/browser/standalone-interface.js.map +1 -0
- package/dist/pkg/browser/standalone.js +93 -0
- package/dist/pkg/browser/standalone.js.map +1 -0
- package/dist/pkg/core/analytics/index.js +586 -0
- package/dist/pkg/core/analytics/index.js.map +1 -0
- package/dist/pkg/core/analytics/interfaces.js +2 -0
- package/dist/pkg/core/analytics/interfaces.js.map +1 -0
- package/dist/pkg/core/arguments-resolver/index.js +127 -0
- package/dist/pkg/core/arguments-resolver/index.js.map +1 -0
- package/dist/pkg/core/auto-track.js +103 -0
- package/dist/pkg/core/auto-track.js.map +1 -0
- package/dist/pkg/core/buffer/index.js +295 -0
- package/dist/pkg/core/buffer/index.js.map +1 -0
- package/dist/pkg/core/callback/index.js +2 -0
- package/dist/pkg/core/callback/index.js.map +1 -0
- package/dist/pkg/core/connection/index.js +11 -0
- package/dist/pkg/core/connection/index.js.map +1 -0
- package/dist/pkg/core/constants/index.js +2 -0
- package/dist/pkg/core/constants/index.js.map +1 -0
- package/dist/pkg/core/context/index.js +16 -0
- package/dist/pkg/core/context/index.js.map +1 -0
- package/dist/pkg/core/environment/index.js +7 -0
- package/dist/pkg/core/environment/index.js.map +1 -0
- package/dist/pkg/core/events/index.js +135 -0
- package/dist/pkg/core/events/index.js.map +1 -0
- package/dist/pkg/core/events/interfaces.js +2 -0
- package/dist/pkg/core/events/interfaces.js.map +1 -0
- package/dist/pkg/core/inspector/index.js +10 -0
- package/dist/pkg/core/inspector/index.js.map +1 -0
- package/dist/pkg/core/page/add-page-context.js +21 -0
- package/dist/pkg/core/page/add-page-context.js.map +1 -0
- package/dist/pkg/core/page/get-page-context.js +84 -0
- package/dist/pkg/core/page/get-page-context.js.map +1 -0
- package/dist/pkg/core/page/index.js +3 -0
- package/dist/pkg/core/page/index.js.map +1 -0
- package/dist/pkg/core/plugin/index.js +2 -0
- package/dist/pkg/core/plugin/index.js.map +1 -0
- package/dist/pkg/core/query-string/gracefulDecodeURIComponent.js +16 -0
- package/dist/pkg/core/query-string/gracefulDecodeURIComponent.js.map +1 -0
- package/dist/pkg/core/query-string/index.js +44 -0
- package/dist/pkg/core/query-string/index.js.map +1 -0
- package/dist/pkg/core/query-string/pickPrefix.js +16 -0
- package/dist/pkg/core/query-string/pickPrefix.js.map +1 -0
- package/dist/pkg/core/queue/event-queue.js +24 -0
- package/dist/pkg/core/queue/event-queue.js.map +1 -0
- package/dist/pkg/core/session/index.js +63 -0
- package/dist/pkg/core/session/index.js.map +1 -0
- package/dist/pkg/core/stats/index.js +20 -0
- package/dist/pkg/core/stats/index.js.map +1 -0
- package/dist/pkg/core/stats/remote-metrics.js +108 -0
- package/dist/pkg/core/stats/remote-metrics.js.map +1 -0
- package/dist/pkg/core/storage/cookieStorage.js +69 -0
- package/dist/pkg/core/storage/cookieStorage.js.map +1 -0
- package/dist/pkg/core/storage/index.js +58 -0
- package/dist/pkg/core/storage/index.js.map +1 -0
- package/dist/pkg/core/storage/localStorage.js +48 -0
- package/dist/pkg/core/storage/localStorage.js.map +1 -0
- package/dist/pkg/core/storage/memoryStorage.js +21 -0
- package/dist/pkg/core/storage/memoryStorage.js.map +1 -0
- package/dist/pkg/core/storage/settings.js +11 -0
- package/dist/pkg/core/storage/settings.js.map +1 -0
- package/dist/pkg/core/storage/types.js +6 -0
- package/dist/pkg/core/storage/types.js.map +1 -0
- package/dist/pkg/core/storage/universalStorage.js +63 -0
- package/dist/pkg/core/storage/universalStorage.js.map +1 -0
- package/dist/pkg/core/user/index.js +270 -0
- package/dist/pkg/core/user/index.js.map +1 -0
- package/dist/pkg/core/user/migrate.js +109 -0
- package/dist/pkg/core/user/migrate.js.map +1 -0
- package/dist/pkg/core/user/tld.js +59 -0
- package/dist/pkg/core/user/tld.js.map +1 -0
- package/dist/pkg/core/user/vendor/crypto-es/lib/aes.js +245 -0
- package/dist/pkg/core/user/vendor/crypto-es/lib/aes.js.map +1 -0
- package/dist/pkg/core/user/vendor/crypto-es/lib/cipher-core.js +838 -0
- package/dist/pkg/core/user/vendor/crypto-es/lib/cipher-core.js.map +1 -0
- package/dist/pkg/core/user/vendor/crypto-es/lib/core.js +744 -0
- package/dist/pkg/core/user/vendor/crypto-es/lib/core.js.map +1 -0
- package/dist/pkg/core/user/vendor/crypto-es/lib/enc-base64.js +98 -0
- package/dist/pkg/core/user/vendor/crypto-es/lib/enc-base64.js.map +1 -0
- package/dist/pkg/core/user/vendor/crypto-es/lib/evpkdf.js +101 -0
- package/dist/pkg/core/user/vendor/crypto-es/lib/evpkdf.js.map +1 -0
- package/dist/pkg/core/user/vendor/crypto-es/lib/md5.js +214 -0
- package/dist/pkg/core/user/vendor/crypto-es/lib/md5.js.map +1 -0
- package/dist/pkg/generated/version.js +3 -0
- package/dist/pkg/generated/version.js.map +1 -0
- package/dist/pkg/index.js +10 -0
- package/dist/pkg/index.js.map +1 -0
- package/dist/pkg/lib/bind-all.js +14 -0
- package/dist/pkg/lib/bind-all.js.map +1 -0
- package/dist/pkg/lib/browser-polyfill.js +18 -0
- package/dist/pkg/lib/browser-polyfill.js.map +1 -0
- package/dist/pkg/lib/client-hints/index.js +17 -0
- package/dist/pkg/lib/client-hints/index.js.map +1 -0
- package/dist/pkg/lib/client-hints/interfaces.js +2 -0
- package/dist/pkg/lib/client-hints/interfaces.js.map +1 -0
- package/dist/pkg/lib/create-deferred.js +17 -0
- package/dist/pkg/lib/create-deferred.js.map +1 -0
- package/dist/pkg/lib/csp-detection.js +4 -0
- package/dist/pkg/lib/csp-detection.js.map +1 -0
- package/dist/pkg/lib/embedded-write-key.js +18 -0
- package/dist/pkg/lib/embedded-write-key.js.map +1 -0
- package/dist/pkg/lib/fetch.js +14 -0
- package/dist/pkg/lib/fetch.js.map +1 -0
- package/dist/pkg/lib/get-global.js +17 -0
- package/dist/pkg/lib/get-global.js.map +1 -0
- package/dist/pkg/lib/get-process-env.js +11 -0
- package/dist/pkg/lib/get-process-env.js.map +1 -0
- package/dist/pkg/lib/global-analytics-helper.js +28 -0
- package/dist/pkg/lib/global-analytics-helper.js.map +1 -0
- package/dist/pkg/lib/group-by.js +24 -0
- package/dist/pkg/lib/group-by.js.map +1 -0
- package/dist/pkg/lib/is-plan-event-enabled.js +16 -0
- package/dist/pkg/lib/is-plan-event-enabled.js.map +1 -0
- package/dist/pkg/lib/is-thenable.js +11 -0
- package/dist/pkg/lib/is-thenable.js.map +1 -0
- package/dist/pkg/lib/load-script.js +51 -0
- package/dist/pkg/lib/load-script.js.map +1 -0
- package/dist/pkg/lib/merged-options.js +27 -0
- package/dist/pkg/lib/merged-options.js.map +1 -0
- package/dist/pkg/lib/on-page-change.js +31 -0
- package/dist/pkg/lib/on-page-change.js.map +1 -0
- package/dist/pkg/lib/p-while.js +21 -0
- package/dist/pkg/lib/p-while.js.map +1 -0
- package/dist/pkg/lib/parse-cdn.js +49 -0
- package/dist/pkg/lib/parse-cdn.js.map +1 -0
- package/dist/pkg/lib/pick.js +15 -0
- package/dist/pkg/lib/pick.js.map +1 -0
- package/dist/pkg/lib/priority-queue/backoff.js +6 -0
- package/dist/pkg/lib/priority-queue/backoff.js.map +1 -0
- package/dist/pkg/lib/priority-queue/index.js +3 -0
- package/dist/pkg/lib/priority-queue/index.js.map +1 -0
- package/dist/pkg/lib/priority-queue/persisted.js +105 -0
- package/dist/pkg/lib/priority-queue/persisted.js.map +1 -0
- package/dist/pkg/lib/sleep.js +6 -0
- package/dist/pkg/lib/sleep.js.map +1 -0
- package/dist/pkg/lib/to-facade.js +28 -0
- package/dist/pkg/lib/to-facade.js.map +1 -0
- package/dist/pkg/lib/version-type.js +9 -0
- package/dist/pkg/lib/version-type.js.map +1 -0
- package/dist/pkg/node/index.js +40 -0
- package/dist/pkg/node/index.js.map +1 -0
- package/dist/pkg/node/node.browser.js +10 -0
- package/dist/pkg/node/node.browser.js.map +1 -0
- package/dist/pkg/plugins/ajs-destination/index.js +341 -0
- package/dist/pkg/plugins/ajs-destination/index.js.map +1 -0
- package/dist/pkg/plugins/ajs-destination/loader.js +102 -0
- package/dist/pkg/plugins/ajs-destination/loader.js.map +1 -0
- package/dist/pkg/plugins/ajs-destination/types.js +2 -0
- package/dist/pkg/plugins/ajs-destination/types.js.map +1 -0
- package/dist/pkg/plugins/ajs-destination/utils.js +18 -0
- package/dist/pkg/plugins/ajs-destination/utils.js.map +1 -0
- package/dist/pkg/plugins/analytics-node/index.js +60 -0
- package/dist/pkg/plugins/analytics-node/index.js.map +1 -0
- package/dist/pkg/plugins/env-enrichment/index.js +176 -0
- package/dist/pkg/plugins/env-enrichment/index.js.map +1 -0
- package/dist/pkg/plugins/hightouchio/batched-dispatcher.js +110 -0
- package/dist/pkg/plugins/hightouchio/batched-dispatcher.js.map +1 -0
- package/dist/pkg/plugins/hightouchio/fetch-dispatcher.js +18 -0
- package/dist/pkg/plugins/hightouchio/fetch-dispatcher.js.map +1 -0
- package/dist/pkg/plugins/hightouchio/index.js +96 -0
- package/dist/pkg/plugins/hightouchio/index.js.map +1 -0
- package/dist/pkg/plugins/hightouchio/normalize.js +50 -0
- package/dist/pkg/plugins/hightouchio/normalize.js.map +1 -0
- package/dist/pkg/plugins/hightouchio/schedule-flush.js +72 -0
- package/dist/pkg/plugins/hightouchio/schedule-flush.js.map +1 -0
- package/dist/pkg/plugins/legacy-video-plugins/index.js +25 -0
- package/dist/pkg/plugins/legacy-video-plugins/index.js.map +1 -0
- package/dist/pkg/plugins/middleware/index.js +119 -0
- package/dist/pkg/plugins/middleware/index.js.map +1 -0
- package/dist/pkg/plugins/remote-loader/index.js +232 -0
- package/dist/pkg/plugins/remote-loader/index.js.map +1 -0
- package/dist/pkg/plugins/remote-middleware/index.js +66 -0
- package/dist/pkg/plugins/remote-middleware/index.js.map +1 -0
- package/dist/pkg/plugins/routing-middleware/index.js +21 -0
- package/dist/pkg/plugins/routing-middleware/index.js.map +1 -0
- package/dist/pkg/plugins/schema-filter/index.js +63 -0
- package/dist/pkg/plugins/schema-filter/index.js.map +1 -0
- package/dist/pkg/plugins/validation/index.js +30 -0
- package/dist/pkg/plugins/validation/index.js.map +1 -0
- package/dist/types/browser/browser-umd.d.ts +2 -0
- package/dist/types/browser/browser-umd.d.ts.map +1 -0
- package/dist/types/browser/index.d.ts +109 -0
- package/dist/types/browser/index.d.ts.map +1 -0
- package/dist/types/browser/standalone-analytics.d.ts +2 -0
- package/dist/types/browser/standalone-analytics.d.ts.map +1 -0
- package/dist/types/browser/standalone-interface.d.ts +10 -0
- package/dist/types/browser/standalone-interface.d.ts.map +1 -0
- package/dist/types/browser/standalone.d.ts +2 -0
- package/dist/types/browser/standalone.d.ts.map +1 -0
- package/dist/types/core/analytics/index.d.ts +149 -0
- package/dist/types/core/analytics/index.d.ts.map +1 -0
- package/dist/types/core/analytics/interfaces.d.ts +77 -0
- package/dist/types/core/analytics/interfaces.d.ts.map +1 -0
- package/dist/types/core/arguments-resolver/index.d.ts +34 -0
- package/dist/types/core/arguments-resolver/index.d.ts.map +1 -0
- package/dist/types/core/auto-track.d.ts +10 -0
- package/dist/types/core/auto-track.d.ts.map +1 -0
- package/dist/types/core/buffer/index.d.ts +102 -0
- package/dist/types/core/buffer/index.d.ts.map +1 -0
- package/dist/types/core/callback/index.d.ts +2 -0
- package/dist/types/core/callback/index.d.ts.map +1 -0
- package/dist/types/core/connection/index.d.ts +3 -0
- package/dist/types/core/connection/index.d.ts.map +1 -0
- package/dist/types/core/constants/index.d.ts +2 -0
- package/dist/types/core/constants/index.d.ts.map +1 -0
- package/dist/types/core/context/index.d.ts +9 -0
- package/dist/types/core/context/index.d.ts.map +1 -0
- package/dist/types/core/environment/index.d.ts +3 -0
- package/dist/types/core/environment/index.d.ts.map +1 -0
- package/dist/types/core/events/index.d.ts +22 -0
- package/dist/types/core/events/index.d.ts.map +1 -0
- package/dist/types/core/events/interfaces.d.ts +9 -0
- package/dist/types/core/events/interfaces.d.ts.map +1 -0
- package/dist/types/core/inspector/index.d.ts +3 -0
- package/dist/types/core/inspector/index.d.ts.map +1 -0
- package/dist/types/core/page/add-page-context.d.ts +9 -0
- package/dist/types/core/page/add-page-context.d.ts.map +1 -0
- package/dist/types/core/page/get-page-context.d.ts +45 -0
- package/dist/types/core/page/get-page-context.d.ts.map +1 -0
- package/dist/types/core/page/index.d.ts +3 -0
- package/dist/types/core/page/index.d.ts.map +1 -0
- package/dist/types/core/plugin/index.d.ts +11 -0
- package/dist/types/core/plugin/index.d.ts.map +1 -0
- package/dist/types/core/query-string/gracefulDecodeURIComponent.d.ts +9 -0
- package/dist/types/core/query-string/gracefulDecodeURIComponent.d.ts.map +1 -0
- package/dist/types/core/query-string/index.d.ts +7 -0
- package/dist/types/core/query-string/index.d.ts.map +1 -0
- package/dist/types/core/query-string/pickPrefix.d.ts +9 -0
- package/dist/types/core/query-string/pickPrefix.d.ts.map +1 -0
- package/dist/types/core/queue/event-queue.d.ts +10 -0
- package/dist/types/core/queue/event-queue.d.ts.map +1 -0
- package/dist/types/core/session/index.d.ts +32 -0
- package/dist/types/core/session/index.d.ts.map +1 -0
- package/dist/types/core/stats/index.d.ts +7 -0
- package/dist/types/core/stats/index.d.ts.map +1 -0
- package/dist/types/core/stats/remote-metrics.d.ts +32 -0
- package/dist/types/core/stats/remote-metrics.d.ts.map +1 -0
- package/dist/types/core/storage/cookieStorage.d.ts +21 -0
- package/dist/types/core/storage/cookieStorage.d.ts.map +1 -0
- package/dist/types/core/storage/index.d.ts +22 -0
- package/dist/types/core/storage/index.d.ts.map +1 -0
- package/dist/types/core/storage/localStorage.d.ts +11 -0
- package/dist/types/core/storage/localStorage.d.ts.map +1 -0
- package/dist/types/core/storage/memoryStorage.d.ts +11 -0
- package/dist/types/core/storage/memoryStorage.d.ts.map +1 -0
- package/dist/types/core/storage/settings.d.ts +8 -0
- package/dist/types/core/storage/settings.d.ts.map +1 -0
- package/dist/types/core/storage/types.d.ts +43 -0
- package/dist/types/core/storage/types.d.ts.map +1 -0
- package/dist/types/core/storage/universalStorage.d.ts +13 -0
- package/dist/types/core/storage/universalStorage.d.ts.map +1 -0
- package/dist/types/core/user/index.d.ts +81 -0
- package/dist/types/core/user/index.d.ts.map +1 -0
- package/dist/types/core/user/migrate.d.ts +11 -0
- package/dist/types/core/user/migrate.d.ts.map +1 -0
- package/dist/types/core/user/tld.d.ts +2 -0
- package/dist/types/core/user/tld.d.ts.map +1 -0
- package/dist/types/core/user/vendor/crypto-es/lib/aes.d.ts +23 -0
- package/dist/types/core/user/vendor/crypto-es/lib/aes.d.ts.map +1 -0
- package/dist/types/core/user/vendor/crypto-es/lib/cipher-core.d.ts +436 -0
- package/dist/types/core/user/vendor/crypto-es/lib/cipher-core.d.ts.map +1 -0
- package/dist/types/core/user/vendor/crypto-es/lib/core.d.ts +432 -0
- package/dist/types/core/user/vendor/crypto-es/lib/core.d.ts.map +1 -0
- package/dist/types/core/user/vendor/crypto-es/lib/enc-base64.d.ts +36 -0
- package/dist/types/core/user/vendor/crypto-es/lib/enc-base64.d.ts.map +1 -0
- package/dist/types/core/user/vendor/crypto-es/lib/evpkdf.d.ts +51 -0
- package/dist/types/core/user/vendor/crypto-es/lib/evpkdf.d.ts.map +1 -0
- package/dist/types/core/user/vendor/crypto-es/lib/md5.d.ts +41 -0
- package/dist/types/core/user/vendor/crypto-es/lib/md5.d.ts.map +1 -0
- package/dist/types/generated/version.d.ts +2 -0
- package/dist/types/generated/version.d.ts.map +1 -0
- package/dist/types/index.d.ts +12 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/lib/bind-all.d.ts +4 -0
- package/dist/types/lib/bind-all.d.ts.map +1 -0
- package/dist/types/lib/browser-polyfill.d.ts +2 -0
- package/dist/types/lib/browser-polyfill.d.ts.map +1 -0
- package/dist/types/lib/client-hints/index.d.ts +3 -0
- package/dist/types/lib/client-hints/index.d.ts.map +1 -0
- package/dist/types/lib/client-hints/interfaces.d.ts +28 -0
- package/dist/types/lib/client-hints/interfaces.d.ts.map +1 -0
- package/dist/types/lib/create-deferred.d.ts +9 -0
- package/dist/types/lib/create-deferred.d.ts.map +1 -0
- package/dist/types/lib/csp-detection.d.ts +6 -0
- package/dist/types/lib/csp-detection.d.ts.map +1 -0
- package/dist/types/lib/embedded-write-key.d.ts +7 -0
- package/dist/types/lib/embedded-write-key.d.ts.map +1 -0
- package/dist/types/lib/fetch.d.ts +5 -0
- package/dist/types/lib/fetch.d.ts.map +1 -0
- package/dist/types/lib/get-global.d.ts +2 -0
- package/dist/types/lib/get-global.d.ts.map +1 -0
- package/dist/types/lib/get-process-env.d.ts +8 -0
- package/dist/types/lib/get-process-env.d.ts.map +1 -0
- package/dist/types/lib/global-analytics-helper.d.ts +18 -0
- package/dist/types/lib/global-analytics-helper.d.ts.map +1 -0
- package/dist/types/lib/group-by.d.ts +4 -0
- package/dist/types/lib/group-by.d.ts.map +1 -0
- package/dist/types/lib/is-plan-event-enabled.d.ts +9 -0
- package/dist/types/lib/is-plan-event-enabled.d.ts.map +1 -0
- package/dist/types/lib/is-thenable.d.ts +6 -0
- package/dist/types/lib/is-thenable.d.ts.map +1 -0
- package/dist/types/lib/load-script.d.ts +3 -0
- package/dist/types/lib/load-script.d.ts.map +1 -0
- package/dist/types/lib/merged-options.d.ts +13 -0
- package/dist/types/lib/merged-options.d.ts.map +1 -0
- package/dist/types/lib/on-page-change.d.ts +11 -0
- package/dist/types/lib/on-page-change.d.ts.map +1 -0
- package/dist/types/lib/p-while.d.ts +2 -0
- package/dist/types/lib/p-while.d.ts.map +1 -0
- package/dist/types/lib/parse-cdn.d.ts +4 -0
- package/dist/types/lib/parse-cdn.d.ts.map +1 -0
- package/dist/types/lib/pick.d.ts +3 -0
- package/dist/types/lib/pick.d.ts.map +1 -0
- package/dist/types/lib/priority-queue/backoff.d.ts +13 -0
- package/dist/types/lib/priority-queue/backoff.d.ts.map +1 -0
- package/dist/types/lib/priority-queue/index.d.ts +3 -0
- package/dist/types/lib/priority-queue/index.d.ts.map +1 -0
- package/dist/types/lib/priority-queue/persisted.d.ts +6 -0
- package/dist/types/lib/priority-queue/persisted.d.ts.map +1 -0
- package/dist/types/lib/sleep.d.ts +2 -0
- package/dist/types/lib/sleep.d.ts.map +1 -0
- package/dist/types/lib/to-facade.d.ts +7 -0
- package/dist/types/lib/to-facade.d.ts.map +1 -0
- package/dist/types/lib/version-type.d.ts +5 -0
- package/dist/types/lib/version-type.d.ts.map +1 -0
- package/dist/types/node/index.d.ts +8 -0
- package/dist/types/node/index.d.ts.map +1 -0
- package/dist/types/node/node.browser.d.ts +4 -0
- package/dist/types/node/node.browser.d.ts.map +1 -0
- package/dist/types/plugins/ajs-destination/index.d.ts +42 -0
- package/dist/types/plugins/ajs-destination/index.d.ts.map +1 -0
- package/dist/types/plugins/ajs-destination/loader.d.ts +12 -0
- package/dist/types/plugins/ajs-destination/loader.d.ts.map +1 -0
- package/dist/types/plugins/ajs-destination/types.d.ts +36 -0
- package/dist/types/plugins/ajs-destination/types.d.ts.map +1 -0
- package/dist/types/plugins/ajs-destination/utils.d.ts +5 -0
- package/dist/types/plugins/ajs-destination/utils.d.ts.map +1 -0
- package/dist/types/plugins/analytics-node/index.d.ts +12 -0
- package/dist/types/plugins/analytics-node/index.d.ts.map +1 -0
- package/dist/types/plugins/env-enrichment/index.d.ts +25 -0
- package/dist/types/plugins/env-enrichment/index.d.ts.map +1 -0
- package/dist/types/plugins/hightouchio/batched-dispatcher.d.ts +8 -0
- package/dist/types/plugins/hightouchio/batched-dispatcher.d.ts.map +1 -0
- package/dist/types/plugins/hightouchio/fetch-dispatcher.d.ts +8 -0
- package/dist/types/plugins/hightouchio/fetch-dispatcher.d.ts.map +1 -0
- package/dist/types/plugins/hightouchio/index.d.ts +26 -0
- package/dist/types/plugins/hightouchio/index.d.ts.map +1 -0
- package/dist/types/plugins/hightouchio/normalize.d.ts +6 -0
- package/dist/types/plugins/hightouchio/normalize.d.ts.map +1 -0
- package/dist/types/plugins/hightouchio/schedule-flush.d.ts +5 -0
- package/dist/types/plugins/hightouchio/schedule-flush.d.ts.map +1 -0
- package/dist/types/plugins/legacy-video-plugins/index.d.ts +3 -0
- package/dist/types/plugins/legacy-video-plugins/index.d.ts.map +1 -0
- package/dist/types/plugins/middleware/index.d.ts +18 -0
- package/dist/types/plugins/middleware/index.d.ts.map +1 -0
- package/dist/types/plugins/remote-loader/index.d.ts +47 -0
- package/dist/types/plugins/remote-loader/index.d.ts.map +1 -0
- package/dist/types/plugins/remote-middleware/index.d.ts +5 -0
- package/dist/types/plugins/remote-middleware/index.d.ts.map +1 -0
- package/dist/types/plugins/routing-middleware/index.d.ts +13 -0
- package/dist/types/plugins/routing-middleware/index.d.ts.map +1 -0
- package/dist/types/plugins/schema-filter/index.d.ts +5 -0
- package/dist/types/plugins/schema-filter/index.d.ts.map +1 -0
- package/dist/types/plugins/validation/index.d.ts +3 -0
- package/dist/types/plugins/validation/index.d.ts.map +1 -0
- package/dist/umd/799.bundle.cf7e55682bfd23cde904.js +2 -0
- package/dist/umd/799.bundle.cf7e55682bfd23cde904.js.map +1 -0
- package/dist/umd/870.bundle.6d7307379da86a3bf277.js +2 -0
- package/dist/umd/870.bundle.6d7307379da86a3bf277.js.map +1 -0
- package/dist/umd/ajs-destination.bundle.5a985a542b0de08e3e49.js +2 -0
- package/dist/umd/ajs-destination.bundle.5a985a542b0de08e3e49.js.map +1 -0
- package/dist/umd/auto-track.bundle.08c0e0f63bb92f96f8b5.js +2 -0
- package/dist/umd/auto-track.bundle.08c0e0f63bb92f96f8b5.js.map +1 -0
- package/dist/umd/events.min.js +2 -0
- package/dist/umd/events.min.js.map +1 -0
- package/dist/umd/index.js +2 -0
- package/dist/umd/index.js.map +1 -0
- package/dist/umd/legacyVideos.bundle.6250709892bb05b68333.js +2 -0
- package/dist/umd/legacyVideos.bundle.6250709892bb05b68333.js.map +1 -0
- package/dist/umd/queryString.bundle.e47b8db88c102418c8c2.js +2 -0
- package/dist/umd/queryString.bundle.e47b8db88c102418c8c2.js.map +1 -0
- package/dist/umd/remoteMiddleware.bundle.4da71e934f9fcee73678.js +2 -0
- package/dist/umd/remoteMiddleware.bundle.4da71e934f9fcee73678.js.map +1 -0
- package/dist/umd/schemaFilter.bundle.a17fd62888b293279f4b.js +2 -0
- package/dist/umd/schemaFilter.bundle.a17fd62888b293279f4b.js.map +1 -0
- package/dist/umd/tsub-middleware.bundle.a9604b3195f6189e429b.js +2 -0
- package/dist/umd/tsub-middleware.bundle.a9604b3195f6189e429b.js.map +1 -0
- package/package.json +106 -0
- package/src/browser/browser-umd.ts +19 -0
- package/src/browser/index.ts +486 -0
- package/src/browser/standalone-analytics.ts +62 -0
- package/src/browser/standalone-interface.ts +11 -0
- package/src/browser/standalone.ts +92 -0
- package/src/core/analytics/index.ts +672 -0
- package/src/core/analytics/interfaces.ts +100 -0
- package/src/core/arguments-resolver/index.ts +200 -0
- package/src/core/auto-track.ts +152 -0
- package/src/core/buffer/index.ts +371 -0
- package/src/core/callback/index.ts +1 -0
- package/src/core/connection/index.ts +13 -0
- package/src/core/constants/index.ts +1 -0
- package/src/core/context/index.ts +21 -0
- package/src/core/environment/index.ts +7 -0
- package/src/core/events/index.ts +277 -0
- package/src/core/events/interfaces.ts +36 -0
- package/src/core/inspector/index.ts +14 -0
- package/src/core/page/add-page-context.ts +33 -0
- package/src/core/page/get-page-context.ts +140 -0
- package/src/core/page/index.ts +2 -0
- package/src/core/plugin/index.ts +12 -0
- package/src/core/query-string/gracefulDecodeURIComponent.ts +16 -0
- package/src/core/query-string/index.ts +64 -0
- package/src/core/query-string/pickPrefix.ts +20 -0
- package/src/core/queue/event-queue.ts +22 -0
- package/src/core/session/index.ts +107 -0
- package/src/core/stats/index.ts +15 -0
- package/src/core/stats/remote-metrics.ts +144 -0
- package/src/core/storage/cookieStorage.ts +80 -0
- package/src/core/storage/index.ts +64 -0
- package/src/core/storage/localStorage.ts +45 -0
- package/src/core/storage/memoryStorage.ts +22 -0
- package/src/core/storage/settings.ts +23 -0
- package/src/core/storage/types.ts +49 -0
- package/src/core/storage/universalStorage.ts +78 -0
- package/src/core/user/index.ts +399 -0
- package/src/core/user/migrate.ts +126 -0
- package/src/core/user/tld.ts +65 -0
- package/src/core/user/vendor/crypto-es/LICENSE +53 -0
- package/src/core/user/vendor/crypto-es/lib/aes.ts +302 -0
- package/src/core/user/vendor/crypto-es/lib/cipher-core.ts +922 -0
- package/src/core/user/vendor/crypto-es/lib/core.ts +806 -0
- package/src/core/user/vendor/crypto-es/lib/enc-base64.ts +110 -0
- package/src/core/user/vendor/crypto-es/lib/evpkdf.ts +110 -0
- package/src/core/user/vendor/crypto-es/lib/md5.ts +238 -0
- package/src/core/user/vendor/readme.md +7 -0
- package/src/generated/version.ts +2 -0
- package/src/index.ts +13 -0
- package/src/lib/bind-all.ts +19 -0
- package/src/lib/browser-polyfill.ts +23 -0
- package/src/lib/client-hints/index.ts +16 -0
- package/src/lib/client-hints/interfaces.ts +42 -0
- package/src/lib/create-deferred.ts +16 -0
- package/src/lib/csp-detection.ts +8 -0
- package/src/lib/embedded-write-key.ts +24 -0
- package/src/lib/fetch.ts +10 -0
- package/src/lib/get-global.ts +16 -0
- package/src/lib/get-process-env.ts +11 -0
- package/src/lib/global-analytics-helper.ts +31 -0
- package/src/lib/group-by.ts +30 -0
- package/src/lib/is-plan-event-enabled.ts +20 -0
- package/src/lib/is-thenable.ts +9 -0
- package/src/lib/load-script.ts +66 -0
- package/src/lib/merged-options.ts +46 -0
- package/src/lib/on-page-change.ts +29 -0
- package/src/lib/p-while.ts +12 -0
- package/src/lib/parse-cdn.ts +56 -0
- package/src/lib/pick.ts +28 -0
- package/src/lib/priority-queue/backoff.ts +24 -0
- package/src/lib/priority-queue/index.ts +6 -0
- package/src/lib/priority-queue/persisted.ts +127 -0
- package/src/lib/sleep.ts +4 -0
- package/src/lib/to-facade.ts +50 -0
- package/src/lib/version-type.ts +10 -0
- package/src/node/index.ts +36 -0
- package/src/node/node.browser.ts +7 -0
- package/src/plugins/ajs-destination/index.ts +392 -0
- package/src/plugins/ajs-destination/loader.ts +129 -0
- package/src/plugins/ajs-destination/types.ts +44 -0
- package/src/plugins/ajs-destination/utils.ts +32 -0
- package/src/plugins/analytics-node/index.ts +67 -0
- package/src/plugins/env-enrichment/index.ts +208 -0
- package/src/plugins/hightouchio/batched-dispatcher.ts +127 -0
- package/src/plugins/hightouchio/fetch-dispatcher.ts +27 -0
- package/src/plugins/hightouchio/index.ts +147 -0
- package/src/plugins/hightouchio/normalize.ts +71 -0
- package/src/plugins/hightouchio/schedule-flush.ts +58 -0
- package/src/plugins/legacy-video-plugins/index.ts +16 -0
- package/src/plugins/middleware/index.ts +131 -0
- package/src/plugins/remote-loader/index.ts +256 -0
- package/src/plugins/remote-middleware/index.ts +44 -0
- package/src/plugins/routing-middleware/index.ts +37 -0
- package/src/plugins/schema-filter/index.ts +90 -0
- package/src/plugins/validation/index.ts +44 -0
- package/src/test-helpers/browser-storage.ts +75 -0
- package/src/test-helpers/factories.ts +18 -0
- package/src/test-helpers/fetch-parse.ts +8 -0
- package/src/test-helpers/fixtures/cdn-settings.ts +301 -0
- package/src/test-helpers/fixtures/classic-destination.ts +25 -0
- package/src/test-helpers/fixtures/client-hints.ts +28 -0
- package/src/test-helpers/fixtures/create-fetch-method.ts +30 -0
- package/src/test-helpers/fixtures/index.ts +4 -0
- package/src/test-helpers/fixtures/page-context.ts +11 -0
- package/src/test-helpers/test-writekeys.ts +5 -0
- package/src/test-helpers/type-assertions.ts +11 -0
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import {
|
|
2
|
+
CoreOptions,
|
|
3
|
+
CoreSegmentEvent,
|
|
4
|
+
Callback,
|
|
5
|
+
Integrations,
|
|
6
|
+
Plan,
|
|
7
|
+
TrackPlan,
|
|
8
|
+
PlanEvent,
|
|
9
|
+
JSONArray,
|
|
10
|
+
JSONValue,
|
|
11
|
+
JSONPrimitive,
|
|
12
|
+
JSONObject,
|
|
13
|
+
GroupTraits,
|
|
14
|
+
UserTraits,
|
|
15
|
+
Traits,
|
|
16
|
+
} from '@ht-sdks/events-sdk-js-core'
|
|
17
|
+
|
|
18
|
+
export interface Options extends CoreOptions {}
|
|
19
|
+
|
|
20
|
+
export type { GroupTraits, UserTraits, Traits }
|
|
21
|
+
|
|
22
|
+
export type EventProperties = Record<string, any>
|
|
23
|
+
|
|
24
|
+
export interface SegmentEvent extends CoreSegmentEvent {}
|
|
25
|
+
|
|
26
|
+
export type {
|
|
27
|
+
Integrations,
|
|
28
|
+
Plan,
|
|
29
|
+
TrackPlan,
|
|
30
|
+
PlanEvent,
|
|
31
|
+
Callback,
|
|
32
|
+
JSONArray,
|
|
33
|
+
JSONValue,
|
|
34
|
+
JSONPrimitive,
|
|
35
|
+
JSONObject,
|
|
36
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { getGlobal } from '../../lib/get-global'
|
|
2
|
+
import type { Analytics } from '../analytics'
|
|
3
|
+
|
|
4
|
+
const env = getGlobal()
|
|
5
|
+
|
|
6
|
+
// The code below assumes the inspector extension will use Object.assign
|
|
7
|
+
// to add the inspect interface on to this object reference (unless the
|
|
8
|
+
// extension code ran first and has already set up the variable)
|
|
9
|
+
const inspectorHost: {
|
|
10
|
+
attach: (analytics: Analytics) => void
|
|
11
|
+
} = ((env as any)['__HIGHTOUCH_INSPECTOR__'] ??= {})
|
|
12
|
+
|
|
13
|
+
export const attachInspector = (analytics: Analytics) =>
|
|
14
|
+
inspectorHost.attach?.(analytics as any)
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { pick } from '../../lib/pick'
|
|
2
|
+
import { EventProperties, SegmentEvent } from '../events'
|
|
3
|
+
import { getDefaultPageContext } from './get-page-context'
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Augments an event with information about the current page.
|
|
7
|
+
* Page information like URL changes frequently, so this is meant to be captured as close to the event call as possible.
|
|
8
|
+
* Things like `userAgent` do not change, so they can be added later in the flow.
|
|
9
|
+
* We prefer not to add this information to this function, as it increases the main bundle size.
|
|
10
|
+
*/
|
|
11
|
+
export const addPageContext = (
|
|
12
|
+
event: SegmentEvent,
|
|
13
|
+
pageCtx = getDefaultPageContext()
|
|
14
|
+
): void => {
|
|
15
|
+
const evtCtx = event.context! // Context should be set earlier in the flow
|
|
16
|
+
let pageContextFromEventProps: Pick<EventProperties, string> | undefined
|
|
17
|
+
if (event.type === 'page') {
|
|
18
|
+
pageContextFromEventProps =
|
|
19
|
+
event.properties && pick(event.properties, Object.keys(pageCtx))
|
|
20
|
+
|
|
21
|
+
event.properties = {
|
|
22
|
+
...pageCtx,
|
|
23
|
+
...event.properties,
|
|
24
|
+
...(event.name ? { name: event.name } : {}),
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
evtCtx.page = {
|
|
29
|
+
...pageCtx,
|
|
30
|
+
...pageContextFromEventProps,
|
|
31
|
+
...evtCtx.page,
|
|
32
|
+
}
|
|
33
|
+
}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import { isPlainObject } from '@ht-sdks/events-sdk-js-core'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Final Page Context object expected in the Segment Event context
|
|
5
|
+
*/
|
|
6
|
+
export interface PageContext {
|
|
7
|
+
path: string
|
|
8
|
+
referrer: string
|
|
9
|
+
search: string
|
|
10
|
+
title: string
|
|
11
|
+
url: string
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
type CanonicalUrl = string | undefined
|
|
15
|
+
|
|
16
|
+
export const BufferedPageContextDiscriminant = 'bpc' as const
|
|
17
|
+
/**
|
|
18
|
+
* Page Context expected to be built by the snippet.
|
|
19
|
+
* Note: The key names are super short because we want to keep the strings in the html snippet short to save bytes.
|
|
20
|
+
*/
|
|
21
|
+
export interface BufferedPageContext {
|
|
22
|
+
__t: typeof BufferedPageContextDiscriminant // for extra uniqeness
|
|
23
|
+
c: CanonicalUrl
|
|
24
|
+
p: PageContext['path']
|
|
25
|
+
u: PageContext['url']
|
|
26
|
+
s: PageContext['search']
|
|
27
|
+
t: PageContext['title']
|
|
28
|
+
r: PageContext['referrer']
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* `BufferedPageContext` object builder
|
|
33
|
+
*/
|
|
34
|
+
export const createBufferedPageContext = (
|
|
35
|
+
url: string,
|
|
36
|
+
canonicalUrl: CanonicalUrl,
|
|
37
|
+
search: string,
|
|
38
|
+
path: string,
|
|
39
|
+
title: string,
|
|
40
|
+
referrer: string
|
|
41
|
+
): BufferedPageContext => ({
|
|
42
|
+
__t: BufferedPageContextDiscriminant,
|
|
43
|
+
c: canonicalUrl,
|
|
44
|
+
p: path,
|
|
45
|
+
u: url,
|
|
46
|
+
s: search,
|
|
47
|
+
t: title,
|
|
48
|
+
r: referrer,
|
|
49
|
+
})
|
|
50
|
+
|
|
51
|
+
// my clever/dubious way of making sure this type guard does not get out sync with the type definition
|
|
52
|
+
const BUFFERED_PAGE_CONTEXT_KEYS = Object.keys(
|
|
53
|
+
createBufferedPageContext('', '', '', '', '', '')
|
|
54
|
+
) as (keyof BufferedPageContext)[]
|
|
55
|
+
|
|
56
|
+
export function isBufferedPageContext(
|
|
57
|
+
bufferedPageCtx: unknown
|
|
58
|
+
): bufferedPageCtx is BufferedPageContext {
|
|
59
|
+
if (!isPlainObject(bufferedPageCtx)) return false
|
|
60
|
+
if (bufferedPageCtx.__t !== BufferedPageContextDiscriminant) return false
|
|
61
|
+
|
|
62
|
+
// ensure obj has all the keys we expect, and none we don't.
|
|
63
|
+
for (const k in bufferedPageCtx) {
|
|
64
|
+
if (!BUFFERED_PAGE_CONTEXT_KEYS.includes(k as keyof BufferedPageContext)) {
|
|
65
|
+
return false
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return true
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
// Legacy logic: we are we appending search parameters to the canonical URL -- I guess the canonical URL is "not canonical enough" (lol)
|
|
72
|
+
const createCanonicalURL = (canonicalUrl: string, searchParams: string) => {
|
|
73
|
+
return canonicalUrl.indexOf('?') > -1
|
|
74
|
+
? canonicalUrl
|
|
75
|
+
: canonicalUrl + searchParams
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Strips hash from URL.
|
|
80
|
+
* http://www.hightouch.local#test -> http://www.hightouch.local
|
|
81
|
+
*/
|
|
82
|
+
const removeHash = (href: string) => {
|
|
83
|
+
const hashIdx = href.indexOf('#')
|
|
84
|
+
return hashIdx === -1 ? href : href.slice(0, hashIdx)
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
const parseCanonicalPath = (canonicalUrl: string): string => {
|
|
88
|
+
try {
|
|
89
|
+
return new URL(canonicalUrl).pathname
|
|
90
|
+
} catch (_e) {
|
|
91
|
+
// this is classic behavior -- we assume that if the canonical URL is invalid, it's a raw path.
|
|
92
|
+
return canonicalUrl[0] === '/' ? canonicalUrl : '/' + canonicalUrl
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Create a `PageContext` from a `BufferedPageContext`.
|
|
98
|
+
* `BufferedPageContext` keys are minified to save bytes in the snippet.
|
|
99
|
+
*/
|
|
100
|
+
export const createPageContext = ({
|
|
101
|
+
c: canonicalUrl,
|
|
102
|
+
p: pathname,
|
|
103
|
+
s: search,
|
|
104
|
+
u: url,
|
|
105
|
+
r: referrer,
|
|
106
|
+
t: title,
|
|
107
|
+
}: BufferedPageContext): PageContext => {
|
|
108
|
+
const newPath = canonicalUrl ? parseCanonicalPath(canonicalUrl) : pathname
|
|
109
|
+
const newUrl = canonicalUrl
|
|
110
|
+
? createCanonicalURL(canonicalUrl, search)
|
|
111
|
+
: removeHash(url)
|
|
112
|
+
return {
|
|
113
|
+
path: newPath,
|
|
114
|
+
referrer,
|
|
115
|
+
search,
|
|
116
|
+
title,
|
|
117
|
+
url: newUrl,
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* Get page properties from the browser window/document.
|
|
123
|
+
*/
|
|
124
|
+
export const getDefaultBufferedPageContext = (): BufferedPageContext => {
|
|
125
|
+
const c = document.querySelector("link[rel='canonical']")
|
|
126
|
+
return createBufferedPageContext(
|
|
127
|
+
location.href,
|
|
128
|
+
(c && c.getAttribute('href')) || undefined,
|
|
129
|
+
location.search,
|
|
130
|
+
location.pathname,
|
|
131
|
+
document.title,
|
|
132
|
+
document.referrer
|
|
133
|
+
)
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* Get page properties from the browser window/document.
|
|
138
|
+
*/
|
|
139
|
+
export const getDefaultPageContext = (): PageContext =>
|
|
140
|
+
createPageContext(getDefaultBufferedPageContext())
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { CorePlugin } from '@ht-sdks/events-sdk-js-core'
|
|
2
|
+
import type { DestinationMiddlewareFunction } from '../../plugins/middleware'
|
|
3
|
+
import type { Analytics } from '../analytics'
|
|
4
|
+
import type { Context } from '../context'
|
|
5
|
+
|
|
6
|
+
export interface Plugin extends CorePlugin<Context, Analytics> {}
|
|
7
|
+
|
|
8
|
+
export interface DestinationPlugin extends Plugin {
|
|
9
|
+
addMiddleware: (...fns: DestinationMiddlewareFunction[]) => void
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export type AnyBrowserPlugin = Plugin | DestinationPlugin
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tries to gets the unencoded version of an encoded component of a
|
|
3
|
+
* Uniform Resource Identifier (URI). If input string is malformed,
|
|
4
|
+
* returns it back as-is.
|
|
5
|
+
*
|
|
6
|
+
* Note: All occurences of the `+` character become ` ` (spaces).
|
|
7
|
+
**/
|
|
8
|
+
export function gracefulDecodeURIComponent(
|
|
9
|
+
encodedURIComponent: string
|
|
10
|
+
): string {
|
|
11
|
+
try {
|
|
12
|
+
return decodeURIComponent(encodedURIComponent.replace(/\+/g, ' '))
|
|
13
|
+
} catch {
|
|
14
|
+
return encodedURIComponent
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { pickPrefix } from './pickPrefix'
|
|
2
|
+
import { gracefulDecodeURIComponent } from './gracefulDecodeURIComponent'
|
|
3
|
+
import { Analytics } from '../analytics'
|
|
4
|
+
import { Context } from '../context'
|
|
5
|
+
import { isPlainObject } from '@ht-sdks/events-sdk-js-core'
|
|
6
|
+
|
|
7
|
+
export interface QueryStringParams {
|
|
8
|
+
[key: string]: string | null
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export function queryString(
|
|
12
|
+
analytics: Analytics,
|
|
13
|
+
query: string
|
|
14
|
+
): Promise<Context[]> {
|
|
15
|
+
const a = document.createElement('a')
|
|
16
|
+
a.href = query
|
|
17
|
+
const parsed = a.search.slice(1)
|
|
18
|
+
const params = parsed.split('&').reduce((acc: QueryStringParams, str) => {
|
|
19
|
+
const [k, v] = str.split('=')
|
|
20
|
+
acc[k] = gracefulDecodeURIComponent(v)
|
|
21
|
+
return acc
|
|
22
|
+
}, {})
|
|
23
|
+
|
|
24
|
+
const calls = []
|
|
25
|
+
|
|
26
|
+
const { ajs_uid, ajs_event, ajs_aid } = params
|
|
27
|
+
const { aid: aidPattern = /.+/, uid: uidPattern = /.+/ } = isPlainObject(
|
|
28
|
+
analytics.options.useQueryString
|
|
29
|
+
)
|
|
30
|
+
? analytics.options.useQueryString
|
|
31
|
+
: {}
|
|
32
|
+
|
|
33
|
+
if (ajs_aid) {
|
|
34
|
+
const anonId = Array.isArray(params.ajs_aid)
|
|
35
|
+
? params.ajs_aid[0]
|
|
36
|
+
: params.ajs_aid
|
|
37
|
+
|
|
38
|
+
if (aidPattern.test(anonId)) {
|
|
39
|
+
analytics.setAnonymousId(anonId)
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
if (ajs_uid) {
|
|
44
|
+
const uid = Array.isArray(params.ajs_uid)
|
|
45
|
+
? params.ajs_uid[0]
|
|
46
|
+
: params.ajs_uid
|
|
47
|
+
|
|
48
|
+
if (uidPattern.test(uid)) {
|
|
49
|
+
const traits = pickPrefix('ajs_trait_', params)
|
|
50
|
+
|
|
51
|
+
calls.push(analytics.identify(uid, traits))
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
if (ajs_event) {
|
|
56
|
+
const event = Array.isArray(params.ajs_event)
|
|
57
|
+
? params.ajs_event[0]
|
|
58
|
+
: params.ajs_event
|
|
59
|
+
const props = pickPrefix('ajs_prop_', params)
|
|
60
|
+
calls.push(analytics.track(event, props))
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
return Promise.all(calls)
|
|
64
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { QueryStringParams } from '.'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Returns an object containing only the properties prefixed by the input
|
|
5
|
+
* string.
|
|
6
|
+
* Ex: prefix('ajs_traits_', { ajs_traits_address: '123 St' })
|
|
7
|
+
* will return { address: '123 St' }
|
|
8
|
+
**/
|
|
9
|
+
export function pickPrefix(
|
|
10
|
+
prefix: string,
|
|
11
|
+
object: QueryStringParams
|
|
12
|
+
): QueryStringParams {
|
|
13
|
+
return Object.keys(object).reduce((acc: QueryStringParams, key: string) => {
|
|
14
|
+
if (key.startsWith(prefix)) {
|
|
15
|
+
const field = key.substr(prefix.length)
|
|
16
|
+
acc[field] = object[key]!
|
|
17
|
+
}
|
|
18
|
+
return acc
|
|
19
|
+
}, {})
|
|
20
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { PriorityQueue } from '../../lib/priority-queue'
|
|
2
|
+
import { PersistedPriorityQueue } from '../../lib/priority-queue/persisted'
|
|
3
|
+
import { Context } from '../context'
|
|
4
|
+
import { AnyBrowserPlugin } from '../plugin'
|
|
5
|
+
import { CoreEventQueue } from '@ht-sdks/events-sdk-js-core'
|
|
6
|
+
import { isOffline } from '../connection'
|
|
7
|
+
|
|
8
|
+
export class EventQueue extends CoreEventQueue<Context, AnyBrowserPlugin> {
|
|
9
|
+
constructor(name: string)
|
|
10
|
+
constructor(priorityQueue: PriorityQueue<Context>)
|
|
11
|
+
constructor(nameOrQueue: string | PriorityQueue<Context>) {
|
|
12
|
+
super(
|
|
13
|
+
typeof nameOrQueue === 'string'
|
|
14
|
+
? new PersistedPriorityQueue(4, nameOrQueue)
|
|
15
|
+
: nameOrQueue
|
|
16
|
+
)
|
|
17
|
+
}
|
|
18
|
+
async flush(): Promise<Context[]> {
|
|
19
|
+
if (isOffline()) return []
|
|
20
|
+
return super.flush()
|
|
21
|
+
}
|
|
22
|
+
}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
// https://github.com/rudderlabs/rudder-sdk-js/blob/3a818accd24e6b3667c75a6b60fb12aba36bdf7e/packages/analytics-js/LICENSE
|
|
2
|
+
// MIT License
|
|
3
|
+
|
|
4
|
+
// Copyright (c) 2021 RudderStack
|
|
5
|
+
|
|
6
|
+
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
7
|
+
// of this software and associated documentation files (the "Software"), to deal
|
|
8
|
+
// in the Software without restriction, including without limitation the rights
|
|
9
|
+
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
10
|
+
// copies of the Software, and to permit persons to whom the Software is
|
|
11
|
+
// furnished to do so, subject to the following conditions:
|
|
12
|
+
|
|
13
|
+
// The above copyright notice and this permission notice shall be included in all
|
|
14
|
+
// copies or substantial portions of the Software.
|
|
15
|
+
|
|
16
|
+
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
17
|
+
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
18
|
+
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
19
|
+
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
20
|
+
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
21
|
+
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
22
|
+
// SOFTWARE.
|
|
23
|
+
|
|
24
|
+
export type SessionInfo = {
|
|
25
|
+
autoTrack?: boolean
|
|
26
|
+
manualTrack?: boolean
|
|
27
|
+
timeout?: number
|
|
28
|
+
expiresAt?: number
|
|
29
|
+
id?: number
|
|
30
|
+
sessionStart?: boolean
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export type SessionContext = {
|
|
34
|
+
sessionId?: number
|
|
35
|
+
sessionStart?: boolean
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* A function to validate current session and return true/false depending on that
|
|
40
|
+
* @returns boolean
|
|
41
|
+
*/
|
|
42
|
+
export const hasSessionExpired = (expiresAt: number): boolean => {
|
|
43
|
+
const timestamp = Date.now()
|
|
44
|
+
return Boolean(timestamp > expiresAt)
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
const generateSessionId = (): number => Date.now()
|
|
48
|
+
|
|
49
|
+
export const isManualSessionIdValid = (sessionId?: number): boolean => {
|
|
50
|
+
if (
|
|
51
|
+
!sessionId ||
|
|
52
|
+
sessionId.toString().startsWith('-') ||
|
|
53
|
+
sessionId.toString().length < 10
|
|
54
|
+
) {
|
|
55
|
+
return false
|
|
56
|
+
}
|
|
57
|
+
return true
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
const MIN_SESSION_TIMEOUT_MS = 10 * 1000 // 10 seconds
|
|
61
|
+
const DEFAULT_SESSION_TIMEOUT_MS = 30 * 60 * 1000 // 30 minutes
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* A function to generate new auto tracking session
|
|
65
|
+
* @param sessionTimeout current timestamp
|
|
66
|
+
* @returns SessionInfo
|
|
67
|
+
*/
|
|
68
|
+
export const generateAutoTrackingSession = (
|
|
69
|
+
sessionTimeout?: number
|
|
70
|
+
): SessionInfo => {
|
|
71
|
+
const timestamp = Date.now()
|
|
72
|
+
const timeout: number = sessionTimeout || DEFAULT_SESSION_TIMEOUT_MS
|
|
73
|
+
if (timeout < MIN_SESSION_TIMEOUT_MS) {
|
|
74
|
+
console.warn('Session timeouts of less than 10 seconds are not recommended')
|
|
75
|
+
}
|
|
76
|
+
return {
|
|
77
|
+
id: timestamp, // set the current timestamp
|
|
78
|
+
expiresAt: timestamp + timeout, // set the expiry time of the session
|
|
79
|
+
timeout,
|
|
80
|
+
sessionStart: true,
|
|
81
|
+
autoTrack: true,
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* A function to generate new manual tracking session
|
|
87
|
+
* @param id Provided sessionId
|
|
88
|
+
* @returns SessionInfo
|
|
89
|
+
*/
|
|
90
|
+
export const generateManualTrackingSession = (id?: number): SessionInfo => {
|
|
91
|
+
const sessionId: number = isManualSessionIdValid(id)
|
|
92
|
+
? (id as number)
|
|
93
|
+
: generateSessionId()
|
|
94
|
+
return {
|
|
95
|
+
id: sessionId,
|
|
96
|
+
sessionStart: true,
|
|
97
|
+
manualTrack: true,
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
export const updateSessionExpiration = (session: SessionInfo): SessionInfo => {
|
|
102
|
+
session.sessionStart = false
|
|
103
|
+
if (session.autoTrack) {
|
|
104
|
+
session.expiresAt = session.expiresAt! + session.timeout!
|
|
105
|
+
}
|
|
106
|
+
return session
|
|
107
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { CoreStats } from '@ht-sdks/events-sdk-js-core'
|
|
2
|
+
import { MetricsOptions, RemoteMetrics } from './remote-metrics'
|
|
3
|
+
|
|
4
|
+
let remoteMetrics: RemoteMetrics | undefined
|
|
5
|
+
|
|
6
|
+
export class Stats extends CoreStats {
|
|
7
|
+
static initRemoteMetrics(options?: MetricsOptions) {
|
|
8
|
+
remoteMetrics = new RemoteMetrics(options)
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
override increment(metric: string, by?: number, tags?: string[]): void {
|
|
12
|
+
super.increment(metric, by, tags)
|
|
13
|
+
remoteMetrics?.increment(metric, tags ?? [])
|
|
14
|
+
}
|
|
15
|
+
}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import { fetch } from '../../lib/fetch'
|
|
2
|
+
import { version } from '../../generated/version'
|
|
3
|
+
import { getVersionType } from '../../lib/version-type'
|
|
4
|
+
import { HIGHTOUCH_API_HOST } from '../constants'
|
|
5
|
+
|
|
6
|
+
export interface MetricsOptions {
|
|
7
|
+
host?: string
|
|
8
|
+
sampleRate?: number
|
|
9
|
+
flushTimer?: number
|
|
10
|
+
maxQueueSize?: number
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Type expected by the segment metrics API endpoint
|
|
15
|
+
*/
|
|
16
|
+
type RemoteMetric = {
|
|
17
|
+
type: 'Counter'
|
|
18
|
+
metric: string
|
|
19
|
+
value: 1
|
|
20
|
+
tags: {
|
|
21
|
+
library: string
|
|
22
|
+
library_version: string
|
|
23
|
+
[key: string]: string
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
const createRemoteMetric = (
|
|
28
|
+
metric: string,
|
|
29
|
+
tags: string[],
|
|
30
|
+
versionType: 'web' | 'npm'
|
|
31
|
+
): RemoteMetric => {
|
|
32
|
+
const formattedTags = tags.reduce((acc, t) => {
|
|
33
|
+
const [k, v] = t.split(':')
|
|
34
|
+
acc[k] = v
|
|
35
|
+
return acc
|
|
36
|
+
}, {} as Record<string, string>)
|
|
37
|
+
|
|
38
|
+
return {
|
|
39
|
+
type: 'Counter',
|
|
40
|
+
metric,
|
|
41
|
+
value: 1,
|
|
42
|
+
tags: {
|
|
43
|
+
...formattedTags,
|
|
44
|
+
library: 'analytics.js',
|
|
45
|
+
library_version:
|
|
46
|
+
versionType === 'web' ? `next-${version}` : `npm:next-${version}`,
|
|
47
|
+
},
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
function logError(err: unknown): void {
|
|
52
|
+
console.error('Error sending hightouch performance metrics', err)
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export class RemoteMetrics {
|
|
56
|
+
private host: string
|
|
57
|
+
private flushTimer: number
|
|
58
|
+
private maxQueueSize: number
|
|
59
|
+
|
|
60
|
+
sampleRate: number
|
|
61
|
+
queue: RemoteMetric[]
|
|
62
|
+
|
|
63
|
+
constructor(options?: MetricsOptions) {
|
|
64
|
+
this.host = options?.host ?? HIGHTOUCH_API_HOST
|
|
65
|
+
this.sampleRate = options?.sampleRate ?? 1
|
|
66
|
+
this.flushTimer = options?.flushTimer ?? 30 * 1000 /* 30s */
|
|
67
|
+
this.maxQueueSize = options?.maxQueueSize ?? 20
|
|
68
|
+
|
|
69
|
+
this.queue = []
|
|
70
|
+
|
|
71
|
+
if (this.sampleRate > 0) {
|
|
72
|
+
let flushing = false
|
|
73
|
+
|
|
74
|
+
const run = (): void => {
|
|
75
|
+
if (flushing) {
|
|
76
|
+
return
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
flushing = true
|
|
80
|
+
this.flush().catch(logError)
|
|
81
|
+
|
|
82
|
+
flushing = false
|
|
83
|
+
|
|
84
|
+
setTimeout(run, this.flushTimer)
|
|
85
|
+
}
|
|
86
|
+
run()
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
increment(metric: string, tags: string[]): void {
|
|
91
|
+
// All metrics are part of an allow list in Tracking API
|
|
92
|
+
if (!metric.includes('analytics_js.')) {
|
|
93
|
+
return
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
// /m doesn't like empty tags
|
|
97
|
+
if (tags.length === 0) {
|
|
98
|
+
return
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
if (Math.random() > this.sampleRate) {
|
|
102
|
+
return
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
if (this.queue.length >= this.maxQueueSize) {
|
|
106
|
+
return
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
const remoteMetric = createRemoteMetric(metric, tags, getVersionType())
|
|
110
|
+
this.queue.push(remoteMetric)
|
|
111
|
+
|
|
112
|
+
if (metric.includes('error')) {
|
|
113
|
+
this.flush().catch(logError)
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
async flush(): Promise<void> {
|
|
118
|
+
if (this.queue.length <= 0) {
|
|
119
|
+
return
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
await this.send().catch((error) => {
|
|
123
|
+
logError(error)
|
|
124
|
+
this.sampleRate = 0
|
|
125
|
+
})
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
private async send(): Promise<Response> {
|
|
129
|
+
const payload = { series: this.queue }
|
|
130
|
+
this.queue = []
|
|
131
|
+
|
|
132
|
+
const headers = {
|
|
133
|
+
Accept: 'application/json',
|
|
134
|
+
'Content-Type': 'application/json',
|
|
135
|
+
}
|
|
136
|
+
const url = `https://${this.host}/v1/m`
|
|
137
|
+
|
|
138
|
+
return fetch(url, {
|
|
139
|
+
headers,
|
|
140
|
+
body: JSON.stringify(payload),
|
|
141
|
+
method: 'POST',
|
|
142
|
+
})
|
|
143
|
+
}
|
|
144
|
+
}
|