@tracelog/lib 0.7.3 → 0.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +39 -1
- package/dist/browser/tracelog.esm.js +382 -404
- package/dist/browser/tracelog.esm.js.map +1 -1
- package/dist/browser/tracelog.js +2 -2
- package/dist/browser/tracelog.js.map +1 -1
- package/dist/cjs/api.d.ts +2 -1
- package/dist/cjs/api.d.ts.map +1 -0
- package/dist/cjs/api.js +7 -6
- package/dist/cjs/api.js.map +1 -0
- package/dist/cjs/app.constants.d.ts +1 -0
- package/dist/cjs/app.constants.d.ts.map +1 -0
- package/dist/cjs/app.constants.js +1 -0
- package/dist/cjs/app.constants.js.map +1 -0
- package/dist/cjs/app.d.ts +2 -1
- package/dist/cjs/app.d.ts.map +1 -0
- package/dist/cjs/app.js +9 -9
- package/dist/cjs/app.js.map +1 -0
- package/dist/cjs/constants/config.constants.d.ts +2 -3
- package/dist/cjs/constants/config.constants.d.ts.map +1 -0
- package/dist/cjs/constants/config.constants.js +6 -7
- package/dist/cjs/constants/config.constants.js.map +1 -0
- package/dist/cjs/constants/error.constants.d.ts +7 -0
- package/dist/cjs/constants/error.constants.d.ts.map +1 -0
- package/dist/cjs/constants/error.constants.js +11 -1
- package/dist/cjs/constants/error.constants.js.map +1 -0
- package/dist/cjs/constants/index.d.ts +1 -0
- package/dist/cjs/constants/index.d.ts.map +1 -0
- package/dist/cjs/constants/index.js +1 -0
- package/dist/cjs/constants/index.js.map +1 -0
- package/dist/cjs/constants/performance.constants.d.ts +1 -0
- package/dist/cjs/constants/performance.constants.d.ts.map +1 -0
- package/dist/cjs/constants/performance.constants.js +1 -0
- package/dist/cjs/constants/performance.constants.js.map +1 -0
- package/dist/cjs/constants/storage.constants.d.ts +1 -0
- package/dist/cjs/constants/storage.constants.d.ts.map +1 -0
- package/dist/cjs/constants/storage.constants.js +1 -0
- package/dist/cjs/constants/storage.constants.js.map +1 -0
- package/dist/cjs/handlers/click.handler.d.ts +1 -0
- package/dist/cjs/handlers/click.handler.d.ts.map +1 -0
- package/dist/cjs/handlers/click.handler.js +1 -0
- package/dist/cjs/handlers/click.handler.js.map +1 -0
- package/dist/cjs/handlers/error.handler.d.ts +1 -0
- package/dist/cjs/handlers/error.handler.d.ts.map +1 -0
- package/dist/cjs/handlers/error.handler.js +1 -0
- package/dist/cjs/handlers/error.handler.js.map +1 -0
- package/dist/cjs/handlers/page-view.handler.d.ts +1 -0
- package/dist/cjs/handlers/page-view.handler.d.ts.map +1 -0
- package/dist/cjs/handlers/page-view.handler.js +2 -1
- package/dist/cjs/handlers/page-view.handler.js.map +1 -0
- package/dist/cjs/handlers/performance.handler.d.ts +1 -0
- package/dist/cjs/handlers/performance.handler.d.ts.map +1 -0
- package/dist/cjs/handlers/performance.handler.js +1 -0
- package/dist/cjs/handlers/performance.handler.js.map +1 -0
- package/dist/cjs/handlers/scroll.handler.d.ts +1 -0
- package/dist/cjs/handlers/scroll.handler.d.ts.map +1 -0
- package/dist/cjs/handlers/scroll.handler.js +1 -0
- package/dist/cjs/handlers/scroll.handler.js.map +1 -0
- package/dist/cjs/handlers/session.handler.d.ts +3 -2
- package/dist/cjs/handlers/session.handler.d.ts.map +1 -0
- package/dist/cjs/handlers/session.handler.js +7 -6
- package/dist/cjs/handlers/session.handler.js.map +1 -0
- package/dist/cjs/integrations/google-analytics.integration.d.ts +1 -0
- package/dist/cjs/integrations/google-analytics.integration.d.ts.map +1 -0
- package/dist/cjs/integrations/google-analytics.integration.js +1 -0
- package/dist/cjs/integrations/google-analytics.integration.js.map +1 -0
- package/dist/cjs/listeners/activity-listener-manager.d.ts +1 -0
- package/dist/cjs/listeners/activity-listener-manager.d.ts.map +1 -0
- package/dist/cjs/listeners/activity-listener-manager.js +1 -0
- package/dist/cjs/listeners/activity-listener-manager.js.map +1 -0
- package/dist/cjs/listeners/index.d.ts +1 -0
- package/dist/cjs/listeners/index.d.ts.map +1 -0
- package/dist/cjs/listeners/index.js +1 -0
- package/dist/cjs/listeners/index.js.map +1 -0
- package/dist/cjs/listeners/input-listener-managers.d.ts +1 -0
- package/dist/cjs/listeners/input-listener-managers.d.ts.map +1 -0
- package/dist/cjs/listeners/input-listener-managers.js +1 -0
- package/dist/cjs/listeners/input-listener-managers.js.map +1 -0
- package/dist/cjs/listeners/listeners.types.d.ts +1 -0
- package/dist/cjs/listeners/listeners.types.d.ts.map +1 -0
- package/dist/cjs/listeners/listeners.types.js +1 -0
- package/dist/cjs/listeners/listeners.types.js.map +1 -0
- package/dist/cjs/listeners/touch-listener-manager.d.ts +1 -0
- package/dist/cjs/listeners/touch-listener-manager.d.ts.map +1 -0
- package/dist/cjs/listeners/touch-listener-manager.js +1 -0
- package/dist/cjs/listeners/touch-listener-manager.js.map +1 -0
- package/dist/cjs/listeners/unload-listener-manager.d.ts +1 -0
- package/dist/cjs/listeners/unload-listener-manager.d.ts.map +1 -0
- package/dist/cjs/listeners/unload-listener-manager.js +1 -0
- package/dist/cjs/listeners/unload-listener-manager.js.map +1 -0
- package/dist/cjs/listeners/visibility-listener-manager.d.ts +1 -0
- package/dist/cjs/listeners/visibility-listener-manager.d.ts.map +1 -0
- package/dist/cjs/listeners/visibility-listener-manager.js +1 -0
- package/dist/cjs/listeners/visibility-listener-manager.js.map +1 -0
- package/dist/cjs/managers/event.manager.d.ts +1 -0
- package/dist/cjs/managers/event.manager.d.ts.map +1 -0
- package/dist/cjs/managers/event.manager.js +4 -3
- package/dist/cjs/managers/event.manager.js.map +1 -0
- package/dist/cjs/managers/sender.manager.d.ts +3 -8
- package/dist/cjs/managers/sender.manager.d.ts.map +1 -0
- package/dist/cjs/managers/sender.manager.js +71 -91
- package/dist/cjs/managers/sender.manager.js.map +1 -0
- package/dist/cjs/managers/session.manager.d.ts +3 -2
- package/dist/cjs/managers/session.manager.d.ts.map +1 -0
- package/dist/cjs/managers/session.manager.js +23 -26
- package/dist/cjs/managers/session.manager.js.map +1 -0
- package/dist/cjs/managers/state.manager.d.ts +1 -0
- package/dist/cjs/managers/state.manager.d.ts.map +1 -0
- package/dist/cjs/managers/state.manager.js +1 -0
- package/dist/cjs/managers/state.manager.js.map +1 -0
- package/dist/cjs/managers/storage.manager.d.ts +1 -0
- package/dist/cjs/managers/storage.manager.d.ts.map +1 -0
- package/dist/cjs/managers/storage.manager.js +1 -0
- package/dist/cjs/managers/storage.manager.js.map +1 -0
- package/dist/cjs/managers/user.manager.d.ts +1 -0
- package/dist/cjs/managers/user.manager.d.ts.map +1 -0
- package/dist/cjs/managers/user.manager.js +1 -0
- package/dist/cjs/managers/user.manager.js.map +1 -0
- package/dist/cjs/public-api.d.ts +2 -1
- package/dist/cjs/public-api.d.ts.map +1 -0
- package/dist/cjs/public-api.js +1 -0
- package/dist/cjs/public-api.js.map +1 -0
- package/dist/cjs/test-bridge.d.ts +2 -5
- package/dist/cjs/test-bridge.d.ts.map +1 -0
- package/dist/cjs/test-bridge.js +3 -10
- package/dist/cjs/test-bridge.js.map +1 -0
- package/dist/cjs/types/common.types.d.ts +6 -1
- package/dist/cjs/types/common.types.d.ts.map +1 -0
- package/dist/cjs/types/common.types.js +1 -0
- package/dist/cjs/types/common.types.js.map +1 -0
- package/dist/cjs/types/config.types.d.ts +1 -0
- package/dist/cjs/types/config.types.d.ts.map +1 -0
- package/dist/cjs/types/config.types.js +1 -0
- package/dist/cjs/types/config.types.js.map +1 -0
- package/dist/cjs/types/device.types.d.ts +1 -0
- package/dist/cjs/types/device.types.d.ts.map +1 -0
- package/dist/cjs/types/device.types.js +1 -0
- package/dist/cjs/types/device.types.js.map +1 -0
- package/dist/cjs/types/emitter.types.d.ts +1 -0
- package/dist/cjs/types/emitter.types.d.ts.map +1 -0
- package/dist/cjs/types/emitter.types.js +1 -0
- package/dist/cjs/types/emitter.types.js.map +1 -0
- package/dist/cjs/types/error.types.d.ts +12 -0
- package/dist/cjs/types/error.types.d.ts.map +1 -0
- package/dist/cjs/types/error.types.js +23 -0
- package/dist/cjs/types/error.types.js.map +1 -0
- package/dist/cjs/types/event.types.d.ts +1 -0
- package/dist/cjs/types/event.types.d.ts.map +1 -0
- package/dist/cjs/types/event.types.js +1 -0
- package/dist/cjs/types/event.types.js.map +1 -0
- package/dist/cjs/types/index.d.ts +2 -0
- package/dist/cjs/types/index.d.ts.map +1 -0
- package/dist/cjs/types/index.js +2 -0
- package/dist/cjs/types/index.js.map +1 -0
- package/dist/cjs/types/log.types.d.ts +1 -0
- package/dist/cjs/types/log.types.d.ts.map +1 -0
- package/dist/cjs/types/log.types.js +1 -0
- package/dist/cjs/types/log.types.js.map +1 -0
- package/dist/cjs/types/mode.types.d.ts +1 -0
- package/dist/cjs/types/mode.types.d.ts.map +1 -0
- package/dist/cjs/types/mode.types.js +1 -0
- package/dist/cjs/types/mode.types.js.map +1 -0
- package/dist/cjs/types/queue.types.d.ts +1 -0
- package/dist/cjs/types/queue.types.d.ts.map +1 -0
- package/dist/cjs/types/queue.types.js +1 -0
- package/dist/cjs/types/queue.types.js.map +1 -0
- package/dist/cjs/types/session.types.d.ts +1 -0
- package/dist/cjs/types/session.types.d.ts.map +1 -0
- package/dist/cjs/types/session.types.js +1 -0
- package/dist/cjs/types/session.types.js.map +1 -0
- package/dist/cjs/types/state.types.d.ts +1 -0
- package/dist/cjs/types/state.types.d.ts.map +1 -0
- package/dist/cjs/types/state.types.js +1 -0
- package/dist/cjs/types/state.types.js.map +1 -0
- package/dist/cjs/types/test-bridge.types.d.ts +2 -1
- package/dist/cjs/types/test-bridge.types.d.ts.map +1 -0
- package/dist/cjs/types/test-bridge.types.js +1 -0
- package/dist/cjs/types/test-bridge.types.js.map +1 -0
- package/dist/cjs/types/validation-error.types.d.ts +1 -0
- package/dist/cjs/types/validation-error.types.d.ts.map +1 -0
- package/dist/cjs/types/validation-error.types.js +1 -0
- package/dist/cjs/types/validation-error.types.js.map +1 -0
- package/dist/cjs/types/window.types.d.ts +1 -0
- package/dist/cjs/types/window.types.d.ts.map +1 -0
- package/dist/cjs/types/window.types.js +1 -0
- package/dist/cjs/types/window.types.js.map +1 -0
- package/dist/cjs/utils/browser/device-detector.utils.d.ts +1 -0
- package/dist/cjs/utils/browser/device-detector.utils.d.ts.map +1 -0
- package/dist/cjs/utils/browser/device-detector.utils.js +1 -0
- package/dist/cjs/utils/browser/device-detector.utils.js.map +1 -0
- package/dist/cjs/utils/browser/index.d.ts +1 -0
- package/dist/cjs/utils/browser/index.d.ts.map +1 -0
- package/dist/cjs/utils/browser/index.js +1 -0
- package/dist/cjs/utils/browser/index.js.map +1 -0
- package/dist/cjs/utils/browser/qa-mode.utils.d.ts +1 -0
- package/dist/cjs/utils/browser/qa-mode.utils.d.ts.map +1 -0
- package/dist/cjs/utils/browser/qa-mode.utils.js +1 -0
- package/dist/cjs/utils/browser/qa-mode.utils.js.map +1 -0
- package/dist/cjs/utils/browser/utm-params.utils.d.ts +1 -0
- package/dist/cjs/utils/browser/utm-params.utils.d.ts.map +1 -0
- package/dist/cjs/utils/browser/utm-params.utils.js +1 -0
- package/dist/cjs/utils/browser/utm-params.utils.js.map +1 -0
- package/dist/cjs/utils/data/index.d.ts +1 -0
- package/dist/cjs/utils/data/index.d.ts.map +1 -0
- package/dist/cjs/utils/data/index.js +1 -0
- package/dist/cjs/utils/data/index.js.map +1 -0
- package/dist/cjs/utils/data/uuid.utils.d.ts +1 -0
- package/dist/cjs/utils/data/uuid.utils.d.ts.map +1 -0
- package/dist/cjs/utils/data/uuid.utils.js +1 -0
- package/dist/cjs/utils/data/uuid.utils.js.map +1 -0
- package/dist/cjs/utils/emitter.utils.d.ts +1 -0
- package/dist/cjs/utils/emitter.utils.d.ts.map +1 -0
- package/dist/cjs/utils/emitter.utils.js +1 -0
- package/dist/cjs/utils/emitter.utils.js.map +1 -0
- package/dist/cjs/utils/index.d.ts +1 -0
- package/dist/cjs/utils/index.d.ts.map +1 -0
- package/dist/cjs/utils/index.js +1 -0
- package/dist/cjs/utils/index.js.map +1 -0
- package/dist/cjs/utils/logging.utils.d.ts +1 -0
- package/dist/cjs/utils/logging.utils.d.ts.map +1 -0
- package/dist/cjs/utils/logging.utils.js +1 -0
- package/dist/cjs/utils/logging.utils.js.map +1 -0
- package/dist/cjs/utils/network/index.d.ts +1 -0
- package/dist/cjs/utils/network/index.d.ts.map +1 -0
- package/dist/cjs/utils/network/index.js +1 -0
- package/dist/cjs/utils/network/index.js.map +1 -0
- package/dist/cjs/utils/network/url.utils.d.ts +1 -0
- package/dist/cjs/utils/network/url.utils.d.ts.map +1 -0
- package/dist/cjs/utils/network/url.utils.js +1 -0
- package/dist/cjs/utils/network/url.utils.js.map +1 -0
- package/dist/cjs/utils/security/index.d.ts +1 -0
- package/dist/cjs/utils/security/index.d.ts.map +1 -0
- package/dist/cjs/utils/security/index.js +1 -0
- package/dist/cjs/utils/security/index.js.map +1 -0
- package/dist/cjs/utils/security/sanitize.utils.d.ts +1 -0
- package/dist/cjs/utils/security/sanitize.utils.d.ts.map +1 -0
- package/dist/cjs/utils/security/sanitize.utils.js +1 -0
- package/dist/cjs/utils/security/sanitize.utils.js.map +1 -0
- package/dist/cjs/utils/validations/config-validations.utils.d.ts +1 -0
- package/dist/cjs/utils/validations/config-validations.utils.d.ts.map +1 -0
- package/dist/cjs/utils/validations/config-validations.utils.js +1 -0
- package/dist/cjs/utils/validations/config-validations.utils.js.map +1 -0
- package/dist/cjs/utils/validations/event-validations.utils.d.ts +1 -0
- package/dist/cjs/utils/validations/event-validations.utils.d.ts.map +1 -0
- package/dist/cjs/utils/validations/event-validations.utils.js +1 -0
- package/dist/cjs/utils/validations/event-validations.utils.js.map +1 -0
- package/dist/cjs/utils/validations/index.d.ts +1 -0
- package/dist/cjs/utils/validations/index.d.ts.map +1 -0
- package/dist/cjs/utils/validations/index.js +1 -0
- package/dist/cjs/utils/validations/index.js.map +1 -0
- package/dist/cjs/utils/validations/metadata-validations.utils.d.ts +1 -0
- package/dist/cjs/utils/validations/metadata-validations.utils.d.ts.map +1 -0
- package/dist/cjs/utils/validations/metadata-validations.utils.js +1 -0
- package/dist/cjs/utils/validations/metadata-validations.utils.js.map +1 -0
- package/dist/cjs/utils/validations/type-guards.utils.d.ts +5 -2
- package/dist/cjs/utils/validations/type-guards.utils.d.ts.map +1 -0
- package/dist/cjs/utils/validations/type-guards.utils.js +16 -2
- package/dist/cjs/utils/validations/type-guards.utils.js.map +1 -0
- package/dist/esm/api.d.ts +2 -1
- package/dist/esm/api.d.ts.map +1 -0
- package/dist/esm/api.js +7 -6
- package/dist/esm/api.js.map +1 -0
- package/dist/esm/app.constants.d.ts +1 -0
- package/dist/esm/app.constants.d.ts.map +1 -0
- package/dist/esm/app.constants.js +1 -0
- package/dist/esm/app.constants.js.map +1 -0
- package/dist/esm/app.d.ts +2 -1
- package/dist/esm/app.d.ts.map +1 -0
- package/dist/esm/app.js +9 -9
- package/dist/esm/app.js.map +1 -0
- package/dist/esm/constants/config.constants.d.ts +2 -3
- package/dist/esm/constants/config.constants.d.ts.map +1 -0
- package/dist/esm/constants/config.constants.js +4 -5
- package/dist/esm/constants/config.constants.js.map +1 -0
- package/dist/esm/constants/error.constants.d.ts +7 -0
- package/dist/esm/constants/error.constants.d.ts.map +1 -0
- package/dist/esm/constants/error.constants.js +10 -0
- package/dist/esm/constants/error.constants.js.map +1 -0
- package/dist/esm/constants/index.d.ts +1 -0
- package/dist/esm/constants/index.d.ts.map +1 -0
- package/dist/esm/constants/index.js +1 -0
- package/dist/esm/constants/index.js.map +1 -0
- package/dist/esm/constants/performance.constants.d.ts +1 -0
- package/dist/esm/constants/performance.constants.d.ts.map +1 -0
- package/dist/esm/constants/performance.constants.js +1 -0
- package/dist/esm/constants/performance.constants.js.map +1 -0
- package/dist/esm/constants/storage.constants.d.ts +1 -0
- package/dist/esm/constants/storage.constants.d.ts.map +1 -0
- package/dist/esm/constants/storage.constants.js +1 -0
- package/dist/esm/constants/storage.constants.js.map +1 -0
- package/dist/esm/handlers/click.handler.d.ts +1 -0
- package/dist/esm/handlers/click.handler.d.ts.map +1 -0
- package/dist/esm/handlers/click.handler.js +1 -0
- package/dist/esm/handlers/click.handler.js.map +1 -0
- package/dist/esm/handlers/error.handler.d.ts +1 -0
- package/dist/esm/handlers/error.handler.d.ts.map +1 -0
- package/dist/esm/handlers/error.handler.js +1 -0
- package/dist/esm/handlers/error.handler.js.map +1 -0
- package/dist/esm/handlers/page-view.handler.d.ts +1 -0
- package/dist/esm/handlers/page-view.handler.d.ts.map +1 -0
- package/dist/esm/handlers/page-view.handler.js +2 -1
- package/dist/esm/handlers/page-view.handler.js.map +1 -0
- package/dist/esm/handlers/performance.handler.d.ts +1 -0
- package/dist/esm/handlers/performance.handler.d.ts.map +1 -0
- package/dist/esm/handlers/performance.handler.js +1 -0
- package/dist/esm/handlers/performance.handler.js.map +1 -0
- package/dist/esm/handlers/scroll.handler.d.ts +1 -0
- package/dist/esm/handlers/scroll.handler.d.ts.map +1 -0
- package/dist/esm/handlers/scroll.handler.js +1 -0
- package/dist/esm/handlers/scroll.handler.js.map +1 -0
- package/dist/esm/handlers/session.handler.d.ts +3 -2
- package/dist/esm/handlers/session.handler.d.ts.map +1 -0
- package/dist/esm/handlers/session.handler.js +7 -6
- package/dist/esm/handlers/session.handler.js.map +1 -0
- package/dist/esm/integrations/google-analytics.integration.d.ts +1 -0
- package/dist/esm/integrations/google-analytics.integration.d.ts.map +1 -0
- package/dist/esm/integrations/google-analytics.integration.js +1 -0
- package/dist/esm/integrations/google-analytics.integration.js.map +1 -0
- package/dist/esm/listeners/activity-listener-manager.d.ts +1 -0
- package/dist/esm/listeners/activity-listener-manager.d.ts.map +1 -0
- package/dist/esm/listeners/activity-listener-manager.js +1 -0
- package/dist/esm/listeners/activity-listener-manager.js.map +1 -0
- package/dist/esm/listeners/index.d.ts +1 -0
- package/dist/esm/listeners/index.d.ts.map +1 -0
- package/dist/esm/listeners/index.js +1 -0
- package/dist/esm/listeners/index.js.map +1 -0
- package/dist/esm/listeners/input-listener-managers.d.ts +1 -0
- package/dist/esm/listeners/input-listener-managers.d.ts.map +1 -0
- package/dist/esm/listeners/input-listener-managers.js +1 -0
- package/dist/esm/listeners/input-listener-managers.js.map +1 -0
- package/dist/esm/listeners/listeners.types.d.ts +1 -0
- package/dist/esm/listeners/listeners.types.d.ts.map +1 -0
- package/dist/esm/listeners/listeners.types.js +1 -0
- package/dist/esm/listeners/listeners.types.js.map +1 -0
- package/dist/esm/listeners/touch-listener-manager.d.ts +1 -0
- package/dist/esm/listeners/touch-listener-manager.d.ts.map +1 -0
- package/dist/esm/listeners/touch-listener-manager.js +1 -0
- package/dist/esm/listeners/touch-listener-manager.js.map +1 -0
- package/dist/esm/listeners/unload-listener-manager.d.ts +1 -0
- package/dist/esm/listeners/unload-listener-manager.d.ts.map +1 -0
- package/dist/esm/listeners/unload-listener-manager.js +1 -0
- package/dist/esm/listeners/unload-listener-manager.js.map +1 -0
- package/dist/esm/listeners/visibility-listener-manager.d.ts +1 -0
- package/dist/esm/listeners/visibility-listener-manager.d.ts.map +1 -0
- package/dist/esm/listeners/visibility-listener-manager.js +1 -0
- package/dist/esm/listeners/visibility-listener-manager.js.map +1 -0
- package/dist/esm/managers/event.manager.d.ts +1 -0
- package/dist/esm/managers/event.manager.d.ts.map +1 -0
- package/dist/esm/managers/event.manager.js +4 -3
- package/dist/esm/managers/event.manager.js.map +1 -0
- package/dist/esm/managers/sender.manager.d.ts +3 -8
- package/dist/esm/managers/sender.manager.d.ts.map +1 -0
- package/dist/esm/managers/sender.manager.js +73 -93
- package/dist/esm/managers/sender.manager.js.map +1 -0
- package/dist/esm/managers/session.manager.d.ts +3 -2
- package/dist/esm/managers/session.manager.d.ts.map +1 -0
- package/dist/esm/managers/session.manager.js +23 -26
- package/dist/esm/managers/session.manager.js.map +1 -0
- package/dist/esm/managers/state.manager.d.ts +1 -0
- package/dist/esm/managers/state.manager.d.ts.map +1 -0
- package/dist/esm/managers/state.manager.js +1 -0
- package/dist/esm/managers/state.manager.js.map +1 -0
- package/dist/esm/managers/storage.manager.d.ts +1 -0
- package/dist/esm/managers/storage.manager.d.ts.map +1 -0
- package/dist/esm/managers/storage.manager.js +1 -0
- package/dist/esm/managers/storage.manager.js.map +1 -0
- package/dist/esm/managers/user.manager.d.ts +1 -0
- package/dist/esm/managers/user.manager.d.ts.map +1 -0
- package/dist/esm/managers/user.manager.js +1 -0
- package/dist/esm/managers/user.manager.js.map +1 -0
- package/dist/esm/public-api.d.ts +2 -1
- package/dist/esm/public-api.d.ts.map +1 -0
- package/dist/esm/public-api.js +1 -0
- package/dist/esm/public-api.js.map +1 -0
- package/dist/esm/test-bridge.d.ts +2 -5
- package/dist/esm/test-bridge.d.ts.map +1 -0
- package/dist/esm/test-bridge.js +3 -10
- package/dist/esm/test-bridge.js.map +1 -0
- package/dist/esm/types/common.types.d.ts +6 -1
- package/dist/esm/types/common.types.d.ts.map +1 -0
- package/dist/esm/types/common.types.js +1 -0
- package/dist/esm/types/common.types.js.map +1 -0
- package/dist/esm/types/config.types.d.ts +1 -0
- package/dist/esm/types/config.types.d.ts.map +1 -0
- package/dist/esm/types/config.types.js +1 -0
- package/dist/esm/types/config.types.js.map +1 -0
- package/dist/esm/types/device.types.d.ts +1 -0
- package/dist/esm/types/device.types.d.ts.map +1 -0
- package/dist/esm/types/device.types.js +1 -0
- package/dist/esm/types/device.types.js.map +1 -0
- package/dist/esm/types/emitter.types.d.ts +1 -0
- package/dist/esm/types/emitter.types.d.ts.map +1 -0
- package/dist/esm/types/emitter.types.js +1 -0
- package/dist/esm/types/emitter.types.js.map +1 -0
- package/dist/esm/types/error.types.d.ts +12 -0
- package/dist/esm/types/error.types.d.ts.map +1 -0
- package/dist/esm/types/error.types.js +19 -0
- package/dist/esm/types/error.types.js.map +1 -0
- package/dist/esm/types/event.types.d.ts +1 -0
- package/dist/esm/types/event.types.d.ts.map +1 -0
- package/dist/esm/types/event.types.js +1 -0
- package/dist/esm/types/event.types.js.map +1 -0
- package/dist/esm/types/index.d.ts +2 -0
- package/dist/esm/types/index.d.ts.map +1 -0
- package/dist/esm/types/index.js +2 -0
- package/dist/esm/types/index.js.map +1 -0
- package/dist/esm/types/log.types.d.ts +1 -0
- package/dist/esm/types/log.types.d.ts.map +1 -0
- package/dist/esm/types/log.types.js +1 -0
- package/dist/esm/types/log.types.js.map +1 -0
- package/dist/esm/types/mode.types.d.ts +1 -0
- package/dist/esm/types/mode.types.d.ts.map +1 -0
- package/dist/esm/types/mode.types.js +1 -0
- package/dist/esm/types/mode.types.js.map +1 -0
- package/dist/esm/types/queue.types.d.ts +1 -0
- package/dist/esm/types/queue.types.d.ts.map +1 -0
- package/dist/esm/types/queue.types.js +1 -0
- package/dist/esm/types/queue.types.js.map +1 -0
- package/dist/esm/types/session.types.d.ts +1 -0
- package/dist/esm/types/session.types.d.ts.map +1 -0
- package/dist/esm/types/session.types.js +1 -0
- package/dist/esm/types/session.types.js.map +1 -0
- package/dist/esm/types/state.types.d.ts +1 -0
- package/dist/esm/types/state.types.d.ts.map +1 -0
- package/dist/esm/types/state.types.js +1 -0
- package/dist/esm/types/state.types.js.map +1 -0
- package/dist/esm/types/test-bridge.types.d.ts +2 -1
- package/dist/esm/types/test-bridge.types.d.ts.map +1 -0
- package/dist/esm/types/test-bridge.types.js +1 -0
- package/dist/esm/types/test-bridge.types.js.map +1 -0
- package/dist/esm/types/validation-error.types.d.ts +1 -0
- package/dist/esm/types/validation-error.types.d.ts.map +1 -0
- package/dist/esm/types/validation-error.types.js +1 -0
- package/dist/esm/types/validation-error.types.js.map +1 -0
- package/dist/esm/types/window.types.d.ts +1 -0
- package/dist/esm/types/window.types.d.ts.map +1 -0
- package/dist/esm/types/window.types.js +1 -0
- package/dist/esm/types/window.types.js.map +1 -0
- package/dist/esm/utils/browser/device-detector.utils.d.ts +1 -0
- package/dist/esm/utils/browser/device-detector.utils.d.ts.map +1 -0
- package/dist/esm/utils/browser/device-detector.utils.js +1 -0
- package/dist/esm/utils/browser/device-detector.utils.js.map +1 -0
- package/dist/esm/utils/browser/index.d.ts +1 -0
- package/dist/esm/utils/browser/index.d.ts.map +1 -0
- package/dist/esm/utils/browser/index.js +1 -0
- package/dist/esm/utils/browser/index.js.map +1 -0
- package/dist/esm/utils/browser/qa-mode.utils.d.ts +1 -0
- package/dist/esm/utils/browser/qa-mode.utils.d.ts.map +1 -0
- package/dist/esm/utils/browser/qa-mode.utils.js +1 -0
- package/dist/esm/utils/browser/qa-mode.utils.js.map +1 -0
- package/dist/esm/utils/browser/utm-params.utils.d.ts +1 -0
- package/dist/esm/utils/browser/utm-params.utils.d.ts.map +1 -0
- package/dist/esm/utils/browser/utm-params.utils.js +1 -0
- package/dist/esm/utils/browser/utm-params.utils.js.map +1 -0
- package/dist/esm/utils/data/index.d.ts +1 -0
- package/dist/esm/utils/data/index.d.ts.map +1 -0
- package/dist/esm/utils/data/index.js +1 -0
- package/dist/esm/utils/data/index.js.map +1 -0
- package/dist/esm/utils/data/uuid.utils.d.ts +1 -0
- package/dist/esm/utils/data/uuid.utils.d.ts.map +1 -0
- package/dist/esm/utils/data/uuid.utils.js +1 -0
- package/dist/esm/utils/data/uuid.utils.js.map +1 -0
- package/dist/esm/utils/emitter.utils.d.ts +1 -0
- package/dist/esm/utils/emitter.utils.d.ts.map +1 -0
- package/dist/esm/utils/emitter.utils.js +1 -0
- package/dist/esm/utils/emitter.utils.js.map +1 -0
- package/dist/esm/utils/index.d.ts +1 -0
- package/dist/esm/utils/index.d.ts.map +1 -0
- package/dist/esm/utils/index.js +1 -0
- package/dist/esm/utils/index.js.map +1 -0
- package/dist/esm/utils/logging.utils.d.ts +1 -0
- package/dist/esm/utils/logging.utils.d.ts.map +1 -0
- package/dist/esm/utils/logging.utils.js +1 -0
- package/dist/esm/utils/logging.utils.js.map +1 -0
- package/dist/esm/utils/network/index.d.ts +1 -0
- package/dist/esm/utils/network/index.d.ts.map +1 -0
- package/dist/esm/utils/network/index.js +1 -0
- package/dist/esm/utils/network/index.js.map +1 -0
- package/dist/esm/utils/network/url.utils.d.ts +1 -0
- package/dist/esm/utils/network/url.utils.d.ts.map +1 -0
- package/dist/esm/utils/network/url.utils.js +1 -0
- package/dist/esm/utils/network/url.utils.js.map +1 -0
- package/dist/esm/utils/security/index.d.ts +1 -0
- package/dist/esm/utils/security/index.d.ts.map +1 -0
- package/dist/esm/utils/security/index.js +1 -0
- package/dist/esm/utils/security/index.js.map +1 -0
- package/dist/esm/utils/security/sanitize.utils.d.ts +1 -0
- package/dist/esm/utils/security/sanitize.utils.d.ts.map +1 -0
- package/dist/esm/utils/security/sanitize.utils.js +1 -0
- package/dist/esm/utils/security/sanitize.utils.js.map +1 -0
- package/dist/esm/utils/validations/config-validations.utils.d.ts +1 -0
- package/dist/esm/utils/validations/config-validations.utils.d.ts.map +1 -0
- package/dist/esm/utils/validations/config-validations.utils.js +1 -0
- package/dist/esm/utils/validations/config-validations.utils.js.map +1 -0
- package/dist/esm/utils/validations/event-validations.utils.d.ts +1 -0
- package/dist/esm/utils/validations/event-validations.utils.d.ts.map +1 -0
- package/dist/esm/utils/validations/event-validations.utils.js +1 -0
- package/dist/esm/utils/validations/event-validations.utils.js.map +1 -0
- package/dist/esm/utils/validations/index.d.ts +1 -0
- package/dist/esm/utils/validations/index.d.ts.map +1 -0
- package/dist/esm/utils/validations/index.js +1 -0
- package/dist/esm/utils/validations/index.js.map +1 -0
- package/dist/esm/utils/validations/metadata-validations.utils.d.ts +1 -0
- package/dist/esm/utils/validations/metadata-validations.utils.d.ts.map +1 -0
- package/dist/esm/utils/validations/metadata-validations.utils.js +1 -0
- package/dist/esm/utils/validations/metadata-validations.utils.js.map +1 -0
- package/dist/esm/utils/validations/type-guards.utils.d.ts +5 -2
- package/dist/esm/utils/validations/type-guards.utils.d.ts.map +1 -0
- package/dist/esm/utils/validations/type-guards.utils.js +16 -2
- package/dist/esm/utils/validations/type-guards.utils.js.map +1 -0
- package/package.json +2 -2
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const
|
|
1
|
+
const P = "data-tlog", Oe = [
|
|
2
2
|
"button",
|
|
3
3
|
"a",
|
|
4
4
|
'input[type="button"]',
|
|
@@ -30,7 +30,7 @@ const O = "data-tlog", Ce = [
|
|
|
30
30
|
".menu-item",
|
|
31
31
|
"[data-testid]",
|
|
32
32
|
'[tabindex="0"]'
|
|
33
|
-
],
|
|
33
|
+
], Pe = ["utm_source", "utm_medium", "utm_campaign", "utm_term", "utm_content"];
|
|
34
34
|
const m = {
|
|
35
35
|
INVALID_SESSION_TIMEOUT: "Session timeout must be between 30000ms (30 seconds) and 86400000ms (24 hours)",
|
|
36
36
|
INVALID_SAMPLING_RATE: "Sampling rate must be between 0 and 1",
|
|
@@ -41,7 +41,7 @@ const m = {
|
|
|
41
41
|
INVALID_SCROLL_CONTAINER_SELECTORS: "Scroll container selectors must be valid CSS selectors",
|
|
42
42
|
INVALID_GLOBAL_METADATA: "Global metadata must be an object",
|
|
43
43
|
INVALID_SENSITIVE_QUERY_PARAMS: "Sensitive query params must be an array of strings"
|
|
44
|
-
},
|
|
44
|
+
}, De = [
|
|
45
45
|
/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
|
|
46
46
|
/javascript:/gi,
|
|
47
47
|
/on\w+\s*=/gi,
|
|
@@ -49,38 +49,44 @@ const m = {
|
|
|
49
49
|
/<embed\b[^>]*>/gi,
|
|
50
50
|
/<object\b[^<]*(?:(?!<\/object>)<[^<]*)*<\/object>/gi
|
|
51
51
|
];
|
|
52
|
-
var
|
|
53
|
-
class
|
|
52
|
+
var W = /* @__PURE__ */ ((r) => (r.Localhost = "localhost:8080", r.Fail = "localhost:9999", r))(W || {}), _ = /* @__PURE__ */ ((r) => (r.Mobile = "mobile", r.Tablet = "tablet", r.Desktop = "desktop", r.Unknown = "unknown", r))(_ || {}), X = /* @__PURE__ */ ((r) => (r.EVENT = "event", r.QUEUE = "queue", r))(X || {});
|
|
53
|
+
class y extends Error {
|
|
54
|
+
constructor(e, t) {
|
|
55
|
+
super(e), this.statusCode = t, this.name = "PermanentError", Error.captureStackTrace && Error.captureStackTrace(this, y);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
var d = /* @__PURE__ */ ((r) => (r.PAGE_VIEW = "page_view", r.CLICK = "click", r.SCROLL = "scroll", r.SESSION_START = "session_start", r.SESSION_END = "session_end", r.CUSTOM = "custom", r.WEB_VITALS = "web_vitals", r.ERROR = "error", r))(d || {}), k = /* @__PURE__ */ ((r) => (r.UP = "up", r.DOWN = "down", r))(k || {}), C = /* @__PURE__ */ ((r) => (r.JS_ERROR = "js_error", r.PROMISE_REJECTION = "promise_rejection", r))(C || {}), R = /* @__PURE__ */ ((r) => (r.QA = "qa", r))(R || {});
|
|
59
|
+
class b extends Error {
|
|
54
60
|
constructor(e, t, s) {
|
|
55
61
|
super(e), this.errorCode = t, this.layer = s, this.name = this.constructor.name, Error.captureStackTrace && Error.captureStackTrace(this, this.constructor);
|
|
56
62
|
}
|
|
57
63
|
}
|
|
58
|
-
class
|
|
64
|
+
class A extends b {
|
|
59
65
|
constructor(e, t = "config") {
|
|
60
66
|
super(e, "APP_CONFIG_INVALID", t);
|
|
61
67
|
}
|
|
62
68
|
}
|
|
63
|
-
class
|
|
69
|
+
class ke extends b {
|
|
64
70
|
constructor(e, t = "config") {
|
|
65
71
|
super(e, "SESSION_TIMEOUT_INVALID", t);
|
|
66
72
|
}
|
|
67
73
|
}
|
|
68
|
-
class
|
|
74
|
+
class le extends b {
|
|
69
75
|
constructor(e, t = "config") {
|
|
70
76
|
super(e, "SAMPLING_RATE_INVALID", t);
|
|
71
77
|
}
|
|
72
78
|
}
|
|
73
|
-
class v extends
|
|
79
|
+
class v extends b {
|
|
74
80
|
constructor(e, t = "config") {
|
|
75
81
|
super(e, "INTEGRATION_INVALID", t);
|
|
76
82
|
}
|
|
77
83
|
}
|
|
78
|
-
class
|
|
84
|
+
class Ft extends b {
|
|
79
85
|
constructor(e, t, s = "runtime") {
|
|
80
86
|
super(e, "INITIALIZATION_TIMEOUT", s), this.timeoutMs = t;
|
|
81
87
|
}
|
|
82
88
|
}
|
|
83
|
-
const
|
|
89
|
+
const Ue = (r, e) => {
|
|
84
90
|
if (e) {
|
|
85
91
|
if (e instanceof Error) {
|
|
86
92
|
const t = e.message.replace(/\s+at\s+.*$/gm, "").replace(/\(.*?:\d+:\d+\)/g, "");
|
|
@@ -90,13 +96,13 @@ const De = (r, e) => {
|
|
|
90
96
|
}
|
|
91
97
|
return `[TraceLog] ${r}`;
|
|
92
98
|
}, o = (r, e, t) => {
|
|
93
|
-
const { error: s, data: n, showToClient: i = !1 } = t ?? {}, a = s ?
|
|
99
|
+
const { error: s, data: n, showToClient: i = !1 } = t ?? {}, a = s ? Ue(e, s) : `[TraceLog] ${e}`, l = r === "error" ? "error" : r === "warn" ? "warn" : "log";
|
|
94
100
|
if (!(r === "debug" || r === "info" && !i))
|
|
95
101
|
if (n !== void 0) {
|
|
96
|
-
const c =
|
|
102
|
+
const c = He(n);
|
|
97
103
|
console[l](a, c);
|
|
98
104
|
} else n !== void 0 ? console[l](a, n) : console[l](a);
|
|
99
|
-
},
|
|
105
|
+
}, He = (r) => {
|
|
100
106
|
const e = {}, t = ["token", "password", "secret", "key", "apikey", "api_key", "sessionid", "session_id"];
|
|
101
107
|
for (const [s, n] of Object.entries(r)) {
|
|
102
108
|
const i = s.toLowerCase();
|
|
@@ -104,28 +110,28 @@ const De = (r, e) => {
|
|
|
104
110
|
}
|
|
105
111
|
return e;
|
|
106
112
|
};
|
|
107
|
-
let
|
|
108
|
-
const
|
|
109
|
-
typeof window < "u" && !
|
|
110
|
-
},
|
|
113
|
+
let Y, _e;
|
|
114
|
+
const xe = () => {
|
|
115
|
+
typeof window < "u" && !Y && (Y = window.matchMedia("(pointer: coarse)"), _e = window.matchMedia("(hover: none)"));
|
|
116
|
+
}, Ve = () => {
|
|
111
117
|
try {
|
|
112
118
|
const r = navigator;
|
|
113
119
|
if (r.userAgentData && typeof r.userAgentData.mobile == "boolean")
|
|
114
120
|
return r.userAgentData.platform && /ipad|tablet/i.test(r.userAgentData.platform) ? _.Tablet : r.userAgentData.mobile ? _.Mobile : _.Desktop;
|
|
115
|
-
|
|
116
|
-
const e = window.innerWidth, t =
|
|
121
|
+
xe();
|
|
122
|
+
const e = window.innerWidth, t = Y?.matches ?? !1, s = _e?.matches ?? !1, n = "ontouchstart" in window || navigator.maxTouchPoints > 0, i = navigator.userAgent.toLowerCase(), a = /mobile|android|iphone|ipod|blackberry|iemobile|opera mini/.test(i), l = /tablet|ipad|android(?!.*mobile)/.test(i);
|
|
117
123
|
return e <= 767 || a && n ? _.Mobile : e >= 768 && e <= 1024 || l || t && s && n ? _.Tablet : _.Desktop;
|
|
118
124
|
} catch (r) {
|
|
119
125
|
return o("warn", "Device detection failed, defaulting to desktop", { error: r }), _.Desktop;
|
|
120
126
|
}
|
|
121
|
-
}, T = "tlog",
|
|
127
|
+
}, T = "tlog", ce = `${T}:qa_mode`, Fe = `${T}:uid`, Ge = (r) => r ? `${T}:${r}:queue` : `${T}:queue`, $e = (r) => r ? `${T}:${r}:session` : `${T}:session`, ze = (r) => r ? `${T}:${r}:broadcast` : `${T}:broadcast`, Te = {
|
|
122
128
|
LCP: 4e3,
|
|
123
129
|
FCP: 1800,
|
|
124
130
|
CLS: 0.25,
|
|
125
131
|
INP: 200,
|
|
126
132
|
TTFB: 800,
|
|
127
133
|
LONG_TASK: 50
|
|
128
|
-
},
|
|
134
|
+
}, Qe = 1e3, ve = [
|
|
129
135
|
// Email addresses
|
|
130
136
|
/\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b/gi,
|
|
131
137
|
// US Phone numbers (various formats)
|
|
@@ -140,12 +146,12 @@ const Ue = () => {
|
|
|
140
146
|
/Bearer\s+[A-Za-z0-9_-]+(?:\.[A-Za-z0-9_-]+)?(?:\.[A-Za-z0-9_-]+)?/gi,
|
|
141
147
|
// Passwords in connection strings (protocol://user:password@host)
|
|
142
148
|
/:\/\/[^:/]+:([^@]+)@/gi
|
|
143
|
-
],
|
|
144
|
-
if (sessionStorage.getItem(
|
|
149
|
+
], ue = 500, de = 5e3, U = 50, je = U * 2, Be = 6e4, he = "tlog_mode", We = "qa", Xe = () => {
|
|
150
|
+
if (sessionStorage.getItem(ce) === "true")
|
|
145
151
|
return !0;
|
|
146
|
-
const e = new URLSearchParams(window.location.search), s = e.get(
|
|
152
|
+
const e = new URLSearchParams(window.location.search), s = e.get(he) === We;
|
|
147
153
|
if (s) {
|
|
148
|
-
sessionStorage.setItem(
|
|
154
|
+
sessionStorage.setItem(ce, "true"), e.delete(he);
|
|
149
155
|
const n = e.toString(), i = `${window.location.pathname}${n ? "?" + n : ""}${window.location.hash}`;
|
|
150
156
|
try {
|
|
151
157
|
window.history.replaceState({}, "", i);
|
|
@@ -158,19 +164,19 @@ const Ue = () => {
|
|
|
158
164
|
);
|
|
159
165
|
}
|
|
160
166
|
return s;
|
|
161
|
-
},
|
|
167
|
+
}, fe = () => {
|
|
162
168
|
const r = new URLSearchParams(window.location.search), e = {};
|
|
163
|
-
return
|
|
169
|
+
return Pe.forEach((s) => {
|
|
164
170
|
const n = r.get(s);
|
|
165
171
|
if (n) {
|
|
166
172
|
const i = s.split("utm_")[1];
|
|
167
173
|
e[i] = n;
|
|
168
174
|
}
|
|
169
175
|
}), Object.keys(e).length ? e : void 0;
|
|
170
|
-
},
|
|
176
|
+
}, Ye = () => typeof crypto < "u" && crypto.randomUUID ? crypto.randomUUID() : "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (r) => {
|
|
171
177
|
const e = Math.random() * 16 | 0;
|
|
172
178
|
return (r === "x" ? e : e & 3 | 8).toString(16);
|
|
173
|
-
}),
|
|
179
|
+
}), Ke = () => {
|
|
174
180
|
const r = Date.now();
|
|
175
181
|
let e = "";
|
|
176
182
|
try {
|
|
@@ -181,32 +187,32 @@ const Ue = () => {
|
|
|
181
187
|
} catch {
|
|
182
188
|
}
|
|
183
189
|
return e || (e = Math.floor(Math.random() * 4294967295).toString(16).padStart(8, "0")), `${r}-${e}`;
|
|
184
|
-
},
|
|
190
|
+
}, ge = (r, e = !1) => {
|
|
185
191
|
try {
|
|
186
192
|
const t = new URL(r), s = t.protocol === "https:", n = t.protocol === "http:";
|
|
187
193
|
return s || e && n;
|
|
188
194
|
} catch {
|
|
189
195
|
return !1;
|
|
190
196
|
}
|
|
191
|
-
},
|
|
197
|
+
}, qe = (r) => {
|
|
192
198
|
if (r.integrations?.tracelog?.projectId) {
|
|
193
199
|
const n = new URL(window.location.href).hostname.split(".");
|
|
194
200
|
if (n.length === 0)
|
|
195
201
|
throw new Error("Invalid URL");
|
|
196
202
|
const i = r.integrations.tracelog.projectId, a = n.slice(-2).join("."), l = `https://${i}.${a}/collect`;
|
|
197
|
-
if (!
|
|
203
|
+
if (!ge(l))
|
|
198
204
|
throw new Error("Invalid URL");
|
|
199
205
|
return l;
|
|
200
206
|
}
|
|
201
207
|
const e = r.integrations?.custom?.collectApiUrl;
|
|
202
208
|
if (e) {
|
|
203
209
|
const t = r.integrations?.custom?.allowHttp ?? !1;
|
|
204
|
-
if (!
|
|
210
|
+
if (!ge(e, t))
|
|
205
211
|
throw new Error("Invalid URL");
|
|
206
212
|
return e;
|
|
207
213
|
}
|
|
208
214
|
return "";
|
|
209
|
-
},
|
|
215
|
+
}, K = (r, e = []) => {
|
|
210
216
|
try {
|
|
211
217
|
const t = new URL(r), s = t.searchParams;
|
|
212
218
|
let n = !1;
|
|
@@ -217,13 +223,13 @@ const Ue = () => {
|
|
|
217
223
|
} catch (t) {
|
|
218
224
|
return o("warn", "URL normalization failed, returning original", { error: t, data: { url: r.slice(0, 100) } }), r;
|
|
219
225
|
}
|
|
220
|
-
},
|
|
226
|
+
}, Ee = (r) => {
|
|
221
227
|
if (!r || typeof r != "string" || r.trim().length === 0)
|
|
222
228
|
return "";
|
|
223
229
|
let e = r;
|
|
224
230
|
r.length > 1e3 && (e = r.slice(0, Math.max(0, 1e3)));
|
|
225
231
|
let t = 0;
|
|
226
|
-
for (const n of
|
|
232
|
+
for (const n of De) {
|
|
227
233
|
const i = e;
|
|
228
234
|
e = e.replace(n, ""), i !== e && t++;
|
|
229
235
|
}
|
|
@@ -233,60 +239,60 @@ const Ue = () => {
|
|
|
233
239
|
originalValue: r.slice(0, 100)
|
|
234
240
|
}
|
|
235
241
|
}), e = e.replaceAll("&", "&").replaceAll("<", "<").replaceAll(">", ">").replaceAll('"', """).replaceAll("'", "'").replaceAll("/", "/"), e.trim();
|
|
236
|
-
},
|
|
242
|
+
}, q = (r, e = 0) => {
|
|
237
243
|
if (e > 3 || r == null)
|
|
238
244
|
return null;
|
|
239
245
|
if (typeof r == "string")
|
|
240
|
-
return
|
|
246
|
+
return Ee(r);
|
|
241
247
|
if (typeof r == "number")
|
|
242
248
|
return !Number.isFinite(r) || r < -Number.MAX_SAFE_INTEGER || r > Number.MAX_SAFE_INTEGER ? 0 : r;
|
|
243
249
|
if (typeof r == "boolean")
|
|
244
250
|
return r;
|
|
245
251
|
if (Array.isArray(r))
|
|
246
|
-
return r.slice(0, 100).map((n) =>
|
|
252
|
+
return r.slice(0, 100).map((n) => q(n, e + 1)).filter((n) => n !== null);
|
|
247
253
|
if (typeof r == "object") {
|
|
248
254
|
const t = {}, n = Object.entries(r).slice(0, 20);
|
|
249
255
|
for (const [i, a] of n) {
|
|
250
|
-
const l =
|
|
256
|
+
const l = Ee(i);
|
|
251
257
|
if (l) {
|
|
252
|
-
const c =
|
|
258
|
+
const c = q(a, e + 1);
|
|
253
259
|
c !== null && (t[l] = c);
|
|
254
260
|
}
|
|
255
261
|
}
|
|
256
262
|
return t;
|
|
257
263
|
}
|
|
258
264
|
return null;
|
|
259
|
-
},
|
|
265
|
+
}, Ze = (r) => {
|
|
260
266
|
if (typeof r != "object" || r === null)
|
|
261
267
|
return {};
|
|
262
268
|
try {
|
|
263
|
-
const e =
|
|
269
|
+
const e = q(r);
|
|
264
270
|
return typeof e == "object" && e !== null ? e : {};
|
|
265
271
|
} catch (e) {
|
|
266
272
|
const t = e instanceof Error ? e.message : String(e);
|
|
267
273
|
throw new Error(`[TraceLog] Metadata sanitization failed: ${t}`);
|
|
268
274
|
}
|
|
269
|
-
},
|
|
275
|
+
}, Je = (r) => {
|
|
270
276
|
if (r !== void 0 && (r === null || typeof r != "object"))
|
|
271
|
-
throw new
|
|
277
|
+
throw new A("Configuration must be an object", "config");
|
|
272
278
|
if (r) {
|
|
273
279
|
if (r.sessionTimeout !== void 0 && (typeof r.sessionTimeout != "number" || r.sessionTimeout < 3e4 || r.sessionTimeout > 864e5))
|
|
274
|
-
throw new
|
|
280
|
+
throw new ke(m.INVALID_SESSION_TIMEOUT, "config");
|
|
275
281
|
if (r.globalMetadata !== void 0 && (typeof r.globalMetadata != "object" || r.globalMetadata === null))
|
|
276
|
-
throw new
|
|
277
|
-
if (r.scrollContainerSelectors !== void 0 &&
|
|
282
|
+
throw new A(m.INVALID_GLOBAL_METADATA, "config");
|
|
283
|
+
if (r.scrollContainerSelectors !== void 0 && tt(r.scrollContainerSelectors), r.integrations && rt(r.integrations), r.sensitiveQueryParams !== void 0) {
|
|
278
284
|
if (!Array.isArray(r.sensitiveQueryParams))
|
|
279
|
-
throw new
|
|
285
|
+
throw new A(m.INVALID_SENSITIVE_QUERY_PARAMS, "config");
|
|
280
286
|
for (const e of r.sensitiveQueryParams)
|
|
281
287
|
if (typeof e != "string")
|
|
282
|
-
throw new
|
|
288
|
+
throw new A("All sensitive query params must be strings", "config");
|
|
283
289
|
}
|
|
284
290
|
if (r.errorSampling !== void 0 && (typeof r.errorSampling != "number" || r.errorSampling < 0 || r.errorSampling > 1))
|
|
285
|
-
throw new
|
|
291
|
+
throw new le(m.INVALID_ERROR_SAMPLING_RATE, "config");
|
|
286
292
|
if (r.samplingRate !== void 0 && (typeof r.samplingRate != "number" || r.samplingRate < 0 || r.samplingRate > 1))
|
|
287
|
-
throw new
|
|
293
|
+
throw new le(m.INVALID_SAMPLING_RATE, "config");
|
|
288
294
|
}
|
|
289
|
-
},
|
|
295
|
+
}, et = (r) => {
|
|
290
296
|
if (r.includes("<") || r.includes(">") || /on\w+\s*=/i.test(r) || !/^[a-zA-Z0-9\-_#.[\]="':, >+~*()]+$/.test(r))
|
|
291
297
|
return !1;
|
|
292
298
|
let t = 0;
|
|
@@ -297,7 +303,7 @@ const Ue = () => {
|
|
|
297
303
|
for (const n of r)
|
|
298
304
|
if (n === "[" && s++, n === "]" && s--, s < 0) return !1;
|
|
299
305
|
return s === 0;
|
|
300
|
-
},
|
|
306
|
+
}, tt = (r) => {
|
|
301
307
|
const e = Array.isArray(r) ? r : [r];
|
|
302
308
|
for (const t of e) {
|
|
303
309
|
if (typeof t != "string" || t.trim() === "")
|
|
@@ -308,17 +314,17 @@ const Ue = () => {
|
|
|
308
314
|
type: typeof t,
|
|
309
315
|
isEmpty: t === "" || typeof t == "string" && t.trim() === ""
|
|
310
316
|
}
|
|
311
|
-
}), new
|
|
312
|
-
if (!
|
|
317
|
+
}), new A(m.INVALID_SCROLL_CONTAINER_SELECTORS, "config");
|
|
318
|
+
if (!et(t))
|
|
313
319
|
throw o("error", "Invalid or potentially unsafe CSS selector", {
|
|
314
320
|
showToClient: !0,
|
|
315
321
|
data: {
|
|
316
322
|
selector: t,
|
|
317
323
|
reason: "Failed security validation"
|
|
318
324
|
}
|
|
319
|
-
}), new
|
|
325
|
+
}), new A("Invalid or potentially unsafe CSS selector", "config");
|
|
320
326
|
}
|
|
321
|
-
},
|
|
327
|
+
}, rt = (r) => {
|
|
322
328
|
if (r) {
|
|
323
329
|
if (r.tracelog && (!r.tracelog.projectId || typeof r.tracelog.projectId != "string" || r.tracelog.projectId.trim() === ""))
|
|
324
330
|
throw new v(m.INVALID_TRACELOG_PROJECT_ID, "config");
|
|
@@ -343,8 +349,8 @@ const Ue = () => {
|
|
|
343
349
|
throw new v('Google Analytics measurement ID must start with "G-" or "UA-"', "config");
|
|
344
350
|
}
|
|
345
351
|
}
|
|
346
|
-
},
|
|
347
|
-
|
|
352
|
+
}, st = (r) => {
|
|
353
|
+
Je(r);
|
|
348
354
|
const e = {
|
|
349
355
|
...r ?? {},
|
|
350
356
|
sessionTimeout: r?.sessionTimeout ?? 9e5,
|
|
@@ -357,7 +363,7 @@ const Ue = () => {
|
|
|
357
363
|
...e.integrations.custom,
|
|
358
364
|
allowHttp: e.integrations.custom.allowHttp ?? !1
|
|
359
365
|
}), e;
|
|
360
|
-
},
|
|
366
|
+
}, nt = (r) => {
|
|
361
367
|
if (typeof r == "string")
|
|
362
368
|
return !0;
|
|
363
369
|
if (typeof r == "object" && r !== null && !Array.isArray(r)) {
|
|
@@ -374,21 +380,26 @@ const Ue = () => {
|
|
|
374
380
|
return !0;
|
|
375
381
|
}
|
|
376
382
|
return !1;
|
|
377
|
-
},
|
|
378
|
-
if (typeof r != "object" || r === null)
|
|
383
|
+
}, Ie = (r, e = 0) => {
|
|
384
|
+
if (typeof r != "object" || r === null || e > 1)
|
|
379
385
|
return !1;
|
|
380
|
-
for (const
|
|
381
|
-
if (
|
|
386
|
+
for (const t of Object.values(r)) {
|
|
387
|
+
if (t == null)
|
|
382
388
|
continue;
|
|
383
|
-
const
|
|
384
|
-
if (!(
|
|
385
|
-
if (Array.isArray(
|
|
386
|
-
if (
|
|
389
|
+
const s = typeof t;
|
|
390
|
+
if (!(s === "string" || s === "number" || s === "boolean")) {
|
|
391
|
+
if (Array.isArray(t)) {
|
|
392
|
+
if (t.length === 0)
|
|
387
393
|
continue;
|
|
388
|
-
if (typeof
|
|
389
|
-
if (!
|
|
394
|
+
if (typeof t[0] == "string") {
|
|
395
|
+
if (!t.every((a) => typeof a == "string"))
|
|
390
396
|
return !1;
|
|
391
|
-
} else if (!
|
|
397
|
+
} else if (!t.every((a) => nt(a)))
|
|
398
|
+
return !1;
|
|
399
|
+
continue;
|
|
400
|
+
}
|
|
401
|
+
if (s === "object" && e === 0) {
|
|
402
|
+
if (!Ie(t, e + 1))
|
|
392
403
|
return !1;
|
|
393
404
|
continue;
|
|
394
405
|
}
|
|
@@ -396,7 +407,7 @@ const Ue = () => {
|
|
|
396
407
|
}
|
|
397
408
|
}
|
|
398
409
|
return !0;
|
|
399
|
-
},
|
|
410
|
+
}, it = (r) => typeof r != "string" ? {
|
|
400
411
|
valid: !1,
|
|
401
412
|
error: "Event name must be a string"
|
|
402
413
|
} : r.length === 0 ? {
|
|
@@ -412,8 +423,8 @@ const Ue = () => {
|
|
|
412
423
|
valid: !1,
|
|
413
424
|
error: "Event name cannot be a reserved word"
|
|
414
425
|
} : { valid: !0 }, Se = (r, e, t) => {
|
|
415
|
-
const s =
|
|
416
|
-
if (!
|
|
426
|
+
const s = Ze(e), n = `${t} "${r}" metadata error`;
|
|
427
|
+
if (!Ie(s))
|
|
417
428
|
return {
|
|
418
429
|
valid: !1,
|
|
419
430
|
error: `${n}: object has invalid types. Valid types are string, number, boolean or string arrays.`
|
|
@@ -461,7 +472,7 @@ const Ue = () => {
|
|
|
461
472
|
valid: !0,
|
|
462
473
|
sanitizedMetadata: s
|
|
463
474
|
};
|
|
464
|
-
},
|
|
475
|
+
}, at = (r, e, t) => {
|
|
465
476
|
if (Array.isArray(e)) {
|
|
466
477
|
const s = [], n = `${t} "${r}" metadata error`;
|
|
467
478
|
for (let i = 0; i < e.length; i++) {
|
|
@@ -485,8 +496,8 @@ const Ue = () => {
|
|
|
485
496
|
};
|
|
486
497
|
}
|
|
487
498
|
return Se(r, e, t);
|
|
488
|
-
},
|
|
489
|
-
const t =
|
|
499
|
+
}, ot = (r, e) => {
|
|
500
|
+
const t = it(r);
|
|
490
501
|
if (!t.valid)
|
|
491
502
|
return o("error", "Event name validation failed", {
|
|
492
503
|
showToClient: !0,
|
|
@@ -494,7 +505,7 @@ const Ue = () => {
|
|
|
494
505
|
}), t;
|
|
495
506
|
if (!e)
|
|
496
507
|
return { valid: !0 };
|
|
497
|
-
const s =
|
|
508
|
+
const s = at(r, e, "customEvent");
|
|
498
509
|
return s.valid || o("error", "Event metadata validation failed", {
|
|
499
510
|
showToClient: !0,
|
|
500
511
|
data: {
|
|
@@ -503,7 +514,7 @@ const Ue = () => {
|
|
|
503
514
|
}
|
|
504
515
|
}), s;
|
|
505
516
|
};
|
|
506
|
-
class
|
|
517
|
+
class lt {
|
|
507
518
|
listeners = /* @__PURE__ */ new Map();
|
|
508
519
|
on(e, t) {
|
|
509
520
|
this.listeners.has(e) || this.listeners.set(e, []), this.listeners.get(e).push(t);
|
|
@@ -523,44 +534,40 @@ class at {
|
|
|
523
534
|
this.listeners.clear();
|
|
524
535
|
}
|
|
525
536
|
}
|
|
526
|
-
const
|
|
537
|
+
const Q = {};
|
|
527
538
|
class f {
|
|
528
539
|
get(e) {
|
|
529
|
-
return
|
|
540
|
+
return Q[e];
|
|
530
541
|
}
|
|
531
542
|
set(e, t) {
|
|
532
|
-
|
|
543
|
+
Q[e] = t;
|
|
533
544
|
}
|
|
534
545
|
getState() {
|
|
535
|
-
return {
|
|
546
|
+
return { ...Q };
|
|
536
547
|
}
|
|
537
548
|
}
|
|
538
|
-
class
|
|
549
|
+
class ct extends f {
|
|
539
550
|
storeManager;
|
|
540
|
-
|
|
541
|
-
retryCount = 0;
|
|
542
|
-
isRetrying = !1;
|
|
551
|
+
lastPermanentErrorLog = null;
|
|
543
552
|
constructor(e) {
|
|
544
553
|
super(), this.storeManager = e;
|
|
545
554
|
}
|
|
546
555
|
getQueueStorageKey() {
|
|
547
556
|
const e = this.get("userId") || "anonymous";
|
|
548
|
-
return
|
|
557
|
+
return Ge(e);
|
|
549
558
|
}
|
|
550
559
|
sendEventsQueueSync(e) {
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
return o("warn", "Fail mode: simulating network failure (sync)", {
|
|
555
|
-
data: { events: e.events.length }
|
|
556
|
-
}), !1;
|
|
557
|
-
const s = this.sendQueueSyncInternal(e);
|
|
558
|
-
return s && this.resetRetryState(), s;
|
|
560
|
+
return this.shouldSkipSend() ? !0 : this.get("config")?.integrations?.custom?.collectApiUrl === W.Fail ? (o("warn", "Fail mode: simulating network failure (sync)", {
|
|
561
|
+
data: { events: e.events.length }
|
|
562
|
+
}), !1) : this.sendQueueSyncInternal(e);
|
|
559
563
|
}
|
|
560
564
|
async sendEventsQueue(e, t) {
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
565
|
+
try {
|
|
566
|
+
const s = await this.send(e);
|
|
567
|
+
return s ? (this.clearPersistedEvents(), t?.onSuccess?.(e.events.length, e.events, e)) : (this.persistEvents(e), t?.onFailure?.()), s;
|
|
568
|
+
} catch (s) {
|
|
569
|
+
return s instanceof y ? (this.logPermanentError("Permanent error, not retrying", s), this.clearPersistedEvents(), t?.onFailure?.(), !1) : (this.persistEvents(e), t?.onFailure?.(), !1);
|
|
570
|
+
}
|
|
564
571
|
}
|
|
565
572
|
async recoverPersistedEvents(e) {
|
|
566
573
|
try {
|
|
@@ -570,24 +577,21 @@ class ot extends f {
|
|
|
570
577
|
return;
|
|
571
578
|
}
|
|
572
579
|
const s = this.createRecoveryBody(t);
|
|
573
|
-
await this.send(s) ? (this.clearPersistedEvents(),
|
|
580
|
+
await this.send(s) ? (this.clearPersistedEvents(), e?.onSuccess?.(t.events.length, t.events, s)) : e?.onFailure?.();
|
|
574
581
|
} catch (t) {
|
|
575
|
-
|
|
582
|
+
if (t instanceof y) {
|
|
583
|
+
this.logPermanentError("Permanent error during recovery, clearing persisted events", t), this.clearPersistedEvents(), e?.onFailure?.();
|
|
584
|
+
return;
|
|
585
|
+
}
|
|
586
|
+
o("error", "Failed to recover persisted events", { error: t });
|
|
576
587
|
}
|
|
577
588
|
}
|
|
578
|
-
persistEventsForRecovery(e) {
|
|
579
|
-
return this.persistEvents(e);
|
|
580
|
-
}
|
|
581
|
-
async sendEventsQueueAsync(e) {
|
|
582
|
-
return this.sendEventsQueue(e);
|
|
583
|
-
}
|
|
584
589
|
stop() {
|
|
585
|
-
this.clearRetryTimeout(), this.resetRetryState();
|
|
586
590
|
}
|
|
587
591
|
async send(e) {
|
|
588
592
|
if (this.shouldSkipSend())
|
|
589
593
|
return this.simulateSuccessfulSend();
|
|
590
|
-
if (this.get("config")?.integrations?.custom?.collectApiUrl ===
|
|
594
|
+
if (this.get("config")?.integrations?.custom?.collectApiUrl === W.Fail)
|
|
591
595
|
return o("warn", "Fail mode: simulating network failure", {
|
|
592
596
|
data: { events: e.events.length }
|
|
593
597
|
}), !1;
|
|
@@ -595,6 +599,8 @@ class ot extends f {
|
|
|
595
599
|
try {
|
|
596
600
|
return (await this.sendWithTimeout(s, n)).ok;
|
|
597
601
|
} catch (i) {
|
|
602
|
+
if (i instanceof y)
|
|
603
|
+
throw i;
|
|
598
604
|
return o("error", "Send request failed", {
|
|
599
605
|
error: i,
|
|
600
606
|
data: {
|
|
@@ -618,7 +624,7 @@ class ot extends f {
|
|
|
618
624
|
}
|
|
619
625
|
});
|
|
620
626
|
if (!i.ok)
|
|
621
|
-
throw new Error(`HTTP ${i.status}: ${i.statusText}`);
|
|
627
|
+
throw i.status >= 400 && i.status < 500 ? new y(`HTTP ${i.status}: ${i.statusText}`, i.status) : new Error(`HTTP ${i.status}: ${i.statusText}`);
|
|
622
628
|
return i;
|
|
623
629
|
} finally {
|
|
624
630
|
clearTimeout(n);
|
|
@@ -626,13 +632,10 @@ class ot extends f {
|
|
|
626
632
|
}
|
|
627
633
|
sendQueueSyncInternal(e) {
|
|
628
634
|
const { url: t, payload: s } = this.prepareRequest(e), n = new Blob([s], { type: "application/json" });
|
|
629
|
-
if (this.isSendBeaconAvailable())
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
} else
|
|
634
|
-
o("warn", "sendBeacon not available, persisting events for recovery");
|
|
635
|
-
return this.persistEventsForRecovery(e), !1;
|
|
635
|
+
if (!this.isSendBeaconAvailable())
|
|
636
|
+
return o("warn", "sendBeacon not available, persisting events for recovery"), this.persistEvents(e), !1;
|
|
637
|
+
const i = navigator.sendBeacon(t, n);
|
|
638
|
+
return i || (o("warn", "sendBeacon rejected request, persisting events for recovery"), this.persistEvents(e)), i;
|
|
636
639
|
}
|
|
637
640
|
prepareRequest(e) {
|
|
638
641
|
const t = {
|
|
@@ -658,7 +661,7 @@ class ot extends f {
|
|
|
658
661
|
return null;
|
|
659
662
|
}
|
|
660
663
|
isDataRecent(e) {
|
|
661
|
-
return !e.timestamp || typeof e.timestamp != "number" ? !1 : (Date.now() - e.timestamp) / (1e3 * 60 * 60) <
|
|
664
|
+
return !e.timestamp || typeof e.timestamp != "number" ? !1 : (Date.now() - e.timestamp) / (1e3 * 60 * 60) < 2;
|
|
662
665
|
}
|
|
663
666
|
createRecoveryBody(e) {
|
|
664
667
|
return {
|
|
@@ -692,26 +695,6 @@ class ot extends f {
|
|
|
692
695
|
o("warn", "Failed to clear persisted events", { error: e });
|
|
693
696
|
}
|
|
694
697
|
}
|
|
695
|
-
resetRetryState() {
|
|
696
|
-
this.retryCount = 0, this.isRetrying = !1, this.clearRetryTimeout();
|
|
697
|
-
}
|
|
698
|
-
scheduleRetry(e, t) {
|
|
699
|
-
if (this.retryTimeoutId !== null || this.isRetrying)
|
|
700
|
-
return;
|
|
701
|
-
if (this.retryCount >= 3) {
|
|
702
|
-
o("warn", "Max retries reached, giving up", { data: { retryCount: this.retryCount } }), this.clearPersistedEvents(), this.resetRetryState(), t?.onFailure?.();
|
|
703
|
-
return;
|
|
704
|
-
}
|
|
705
|
-
const s = 5e3 * Math.pow(2, this.retryCount);
|
|
706
|
-
this.isRetrying = !0, this.retryTimeoutId = window.setTimeout(async () => {
|
|
707
|
-
this.retryTimeoutId = null, this.retryCount++;
|
|
708
|
-
try {
|
|
709
|
-
await this.send(e) ? (this.clearPersistedEvents(), this.resetRetryState(), t?.onSuccess?.(e.events.length)) : this.retryCount >= 3 ? (this.clearPersistedEvents(), this.resetRetryState(), t?.onFailure?.()) : this.scheduleRetry(e, t);
|
|
710
|
-
} finally {
|
|
711
|
-
this.isRetrying = !1;
|
|
712
|
-
}
|
|
713
|
-
}, s);
|
|
714
|
-
}
|
|
715
698
|
shouldSkipSend() {
|
|
716
699
|
return !this.get("collectApiUrl");
|
|
717
700
|
}
|
|
@@ -722,11 +705,14 @@ class ot extends f {
|
|
|
722
705
|
isSendBeaconAvailable() {
|
|
723
706
|
return typeof navigator < "u" && typeof navigator.sendBeacon == "function";
|
|
724
707
|
}
|
|
725
|
-
|
|
726
|
-
|
|
708
|
+
logPermanentError(e, t) {
|
|
709
|
+
const s = Date.now();
|
|
710
|
+
(!this.lastPermanentErrorLog || this.lastPermanentErrorLog.statusCode !== t.statusCode || s - this.lastPermanentErrorLog.timestamp >= Be) && (o("error", e, {
|
|
711
|
+
data: { status: t.statusCode, message: t.message }
|
|
712
|
+
}), this.lastPermanentErrorLog = { statusCode: t.statusCode, timestamp: s });
|
|
727
713
|
}
|
|
728
714
|
}
|
|
729
|
-
class
|
|
715
|
+
class ut extends f {
|
|
730
716
|
googleAnalytics;
|
|
731
717
|
dataSender;
|
|
732
718
|
emitter;
|
|
@@ -738,7 +724,7 @@ class lt extends f {
|
|
|
738
724
|
rateLimitCounter = 0;
|
|
739
725
|
rateLimitWindowStart = 0;
|
|
740
726
|
constructor(e, t = null, s = null) {
|
|
741
|
-
super(), this.googleAnalytics = t, this.dataSender = new
|
|
727
|
+
super(), this.googleAnalytics = t, this.dataSender = new ct(e), this.emitter = s;
|
|
742
728
|
}
|
|
743
729
|
async recoverPersistedEvents() {
|
|
744
730
|
await this.dataSender.recoverPersistedEvents({
|
|
@@ -748,7 +734,7 @@ class lt extends f {
|
|
|
748
734
|
this.removeProcessedEvents(n), s && this.emitEventsQueue(s);
|
|
749
735
|
}
|
|
750
736
|
},
|
|
751
|
-
onFailure:
|
|
737
|
+
onFailure: () => {
|
|
752
738
|
o("warn", "Failed to recover persisted events");
|
|
753
739
|
}
|
|
754
740
|
});
|
|
@@ -787,9 +773,9 @@ class lt extends f {
|
|
|
787
773
|
const p = e === d.SESSION_START || e === d.SESSION_END;
|
|
788
774
|
if (!p && !this.checkRateLimit())
|
|
789
775
|
return;
|
|
790
|
-
const
|
|
791
|
-
type:
|
|
792
|
-
page_url:
|
|
776
|
+
const L = e, Re = L === d.SESSION_START, be = t || this.get("pageUrl"), z = this.buildEventPayload({
|
|
777
|
+
type: L,
|
|
778
|
+
page_url: be,
|
|
793
779
|
from_page_url: s,
|
|
794
780
|
scroll_data: n,
|
|
795
781
|
click_data: i,
|
|
@@ -799,22 +785,22 @@ class lt extends f {
|
|
|
799
785
|
session_end_reason: u
|
|
800
786
|
});
|
|
801
787
|
if (!(!p && !this.shouldSample())) {
|
|
802
|
-
if (
|
|
803
|
-
const
|
|
804
|
-
if (!
|
|
788
|
+
if (Re) {
|
|
789
|
+
const oe = this.get("sessionId");
|
|
790
|
+
if (!oe) {
|
|
805
791
|
o("error", "Session start event requires sessionId - event will be ignored");
|
|
806
792
|
return;
|
|
807
793
|
}
|
|
808
794
|
if (this.get("hasStartSession")) {
|
|
809
795
|
o("warn", "Duplicate session_start detected", {
|
|
810
|
-
data: { sessionId:
|
|
796
|
+
data: { sessionId: oe }
|
|
811
797
|
});
|
|
812
798
|
return;
|
|
813
799
|
}
|
|
814
800
|
this.set("hasStartSession", !0);
|
|
815
801
|
}
|
|
816
802
|
if (!this.isDuplicateEvent(z)) {
|
|
817
|
-
if (this.get("mode") === R.QA &&
|
|
803
|
+
if (this.get("mode") === R.QA && L === d.CUSTOM && a) {
|
|
818
804
|
console.log("[TraceLog] Event", {
|
|
819
805
|
name: a.name,
|
|
820
806
|
...a.metadata && { metadata: a.metadata }
|
|
@@ -881,7 +867,7 @@ class lt extends f {
|
|
|
881
867
|
onSuccess: () => {
|
|
882
868
|
this.removeProcessedEvents(s), this.emitEventsQueue(e);
|
|
883
869
|
},
|
|
884
|
-
onFailure:
|
|
870
|
+
onFailure: () => {
|
|
885
871
|
o("warn", "Events send failed, keeping in queue", {
|
|
886
872
|
data: { eventCount: t.length }
|
|
887
873
|
});
|
|
@@ -906,7 +892,7 @@ class lt extends f {
|
|
|
906
892
|
buildEventPayload(e) {
|
|
907
893
|
const t = e.type === d.SESSION_START, s = e.page_url ?? this.get("pageUrl");
|
|
908
894
|
return {
|
|
909
|
-
id:
|
|
895
|
+
id: Ke(),
|
|
910
896
|
type: e.type,
|
|
911
897
|
page_url: s,
|
|
912
898
|
timestamp: Date.now(),
|
|
@@ -918,7 +904,7 @@ class lt extends f {
|
|
|
918
904
|
...e.web_vitals && { web_vitals: e.web_vitals },
|
|
919
905
|
...e.error_data && { error_data: e.error_data },
|
|
920
906
|
...e.session_end_reason && { session_end_reason: e.session_end_reason },
|
|
921
|
-
...t &&
|
|
907
|
+
...t && fe() && { utm: fe() }
|
|
922
908
|
};
|
|
923
909
|
}
|
|
924
910
|
isDuplicateEvent(e) {
|
|
@@ -983,7 +969,7 @@ class lt extends f {
|
|
|
983
969
|
this.emitter && this.emitter.emit(X.QUEUE, e);
|
|
984
970
|
}
|
|
985
971
|
}
|
|
986
|
-
class
|
|
972
|
+
class dt {
|
|
987
973
|
/**
|
|
988
974
|
* Gets or creates a unique user ID for the given project.
|
|
989
975
|
* The user ID is persisted in localStorage and reused across sessions.
|
|
@@ -993,14 +979,14 @@ class ct {
|
|
|
993
979
|
* @returns Persistent unique user ID
|
|
994
980
|
*/
|
|
995
981
|
static getId(e) {
|
|
996
|
-
const t =
|
|
982
|
+
const t = Fe, s = e.getItem(t);
|
|
997
983
|
if (s)
|
|
998
984
|
return s;
|
|
999
|
-
const n =
|
|
985
|
+
const n = Ye();
|
|
1000
986
|
return e.setItem(t, n), n;
|
|
1001
987
|
}
|
|
1002
988
|
}
|
|
1003
|
-
class
|
|
989
|
+
class ht extends f {
|
|
1004
990
|
storageManager;
|
|
1005
991
|
eventManager;
|
|
1006
992
|
projectId;
|
|
@@ -1019,7 +1005,7 @@ class ut extends f {
|
|
|
1019
1005
|
return;
|
|
1020
1006
|
}
|
|
1021
1007
|
const e = this.getProjectId();
|
|
1022
|
-
this.broadcastChannel = new BroadcastChannel(
|
|
1008
|
+
this.broadcastChannel = new BroadcastChannel(ze(e)), this.broadcastChannel.onmessage = (t) => {
|
|
1023
1009
|
const { action: s, sessionId: n, timestamp: i, projectId: a } = t.data ?? {};
|
|
1024
1010
|
if (a === e) {
|
|
1025
1011
|
if (s === "session_end") {
|
|
@@ -1039,13 +1025,18 @@ class ut extends f {
|
|
|
1039
1025
|
});
|
|
1040
1026
|
}
|
|
1041
1027
|
broadcastSessionEnd(e, t) {
|
|
1042
|
-
e && this.broadcastChannel && typeof this.broadcastChannel.postMessage == "function"
|
|
1043
|
-
|
|
1044
|
-
|
|
1045
|
-
|
|
1046
|
-
|
|
1047
|
-
|
|
1048
|
-
|
|
1028
|
+
if (e && this.broadcastChannel && typeof this.broadcastChannel.postMessage == "function")
|
|
1029
|
+
try {
|
|
1030
|
+
this.broadcastChannel.postMessage({
|
|
1031
|
+
action: "session_end",
|
|
1032
|
+
projectId: this.getProjectId(),
|
|
1033
|
+
sessionId: e,
|
|
1034
|
+
reason: t,
|
|
1035
|
+
timestamp: Date.now()
|
|
1036
|
+
});
|
|
1037
|
+
} catch (s) {
|
|
1038
|
+
o("warn", "Failed to broadcast session end", { error: s, data: { sessionId: e, reason: t } });
|
|
1039
|
+
}
|
|
1049
1040
|
}
|
|
1050
1041
|
cleanupCrossTabSync() {
|
|
1051
1042
|
this.broadcastChannel && (typeof this.broadcastChannel.close == "function" && this.broadcastChannel.close(), this.broadcastChannel = null);
|
|
@@ -1083,12 +1074,12 @@ class ut extends f {
|
|
|
1083
1074
|
this.storageManager.setItem(t, JSON.stringify(e));
|
|
1084
1075
|
}
|
|
1085
1076
|
getSessionStorageKey() {
|
|
1086
|
-
return
|
|
1077
|
+
return $e(this.getProjectId());
|
|
1087
1078
|
}
|
|
1088
1079
|
getProjectId() {
|
|
1089
1080
|
return this.projectId;
|
|
1090
1081
|
}
|
|
1091
|
-
|
|
1082
|
+
startTracking() {
|
|
1092
1083
|
if (this.isTracking) {
|
|
1093
1084
|
o("warn", "Session tracking already active");
|
|
1094
1085
|
return;
|
|
@@ -1137,7 +1128,7 @@ class ut extends f {
|
|
|
1137
1128
|
cleanupLifecycleListeners() {
|
|
1138
1129
|
this.visibilityChangeHandler && (document.removeEventListener("visibilitychange", this.visibilityChangeHandler), this.visibilityChangeHandler = null), this.beforeUnloadHandler && (window.removeEventListener("beforeunload", this.beforeUnloadHandler), this.beforeUnloadHandler = null);
|
|
1139
1130
|
}
|
|
1140
|
-
|
|
1131
|
+
endSession(e) {
|
|
1141
1132
|
const t = this.get("sessionId");
|
|
1142
1133
|
if (!t) {
|
|
1143
1134
|
o("warn", "endSession called without active session", { data: { reason: e } }), this.resetSessionState(e);
|
|
@@ -1146,31 +1137,21 @@ class ut extends f {
|
|
|
1146
1137
|
this.eventManager.track({
|
|
1147
1138
|
type: d.SESSION_END,
|
|
1148
1139
|
session_end_reason: e
|
|
1149
|
-
})
|
|
1150
|
-
|
|
1151
|
-
|
|
1152
|
-
};
|
|
1153
|
-
if (this.eventManager.flushImmediatelySync()) {
|
|
1154
|
-
s();
|
|
1155
|
-
return;
|
|
1156
|
-
}
|
|
1157
|
-
try {
|
|
1158
|
-
await this.eventManager.flushImmediately(), s();
|
|
1159
|
-
} catch (i) {
|
|
1160
|
-
o("warn", "Async flush failed during session end", { error: i }), s();
|
|
1161
|
-
}
|
|
1140
|
+
}), this.eventManager.flushImmediatelySync() || o("warn", "Sync flush failed during session end, events persisted for recovery", {
|
|
1141
|
+
data: { reason: e, sessionId: t }
|
|
1142
|
+
}), this.broadcastSessionEnd(t, e), this.resetSessionState(e);
|
|
1162
1143
|
}
|
|
1163
1144
|
resetSessionState(e) {
|
|
1164
1145
|
this.clearSessionTimeout(), this.cleanupActivityListeners(), this.cleanupLifecycleListeners(), this.cleanupCrossTabSync(), e !== "page_unload" && this.clearStoredSession(), this.set("sessionId", null), this.set("hasStartSession", !1), this.isTracking = !1;
|
|
1165
1146
|
}
|
|
1166
|
-
|
|
1167
|
-
|
|
1147
|
+
stopTracking() {
|
|
1148
|
+
this.endSession("manual_stop");
|
|
1168
1149
|
}
|
|
1169
1150
|
destroy() {
|
|
1170
1151
|
this.clearSessionTimeout(), this.cleanupActivityListeners(), this.cleanupCrossTabSync(), this.cleanupLifecycleListeners(), this.isTracking = !1, this.set("hasStartSession", !1);
|
|
1171
1152
|
}
|
|
1172
1153
|
}
|
|
1173
|
-
class
|
|
1154
|
+
class ft extends f {
|
|
1174
1155
|
eventManager;
|
|
1175
1156
|
storageManager;
|
|
1176
1157
|
sessionManager = null;
|
|
@@ -1178,7 +1159,7 @@ class dt extends f {
|
|
|
1178
1159
|
constructor(e, t) {
|
|
1179
1160
|
super(), this.eventManager = t, this.storageManager = e;
|
|
1180
1161
|
}
|
|
1181
|
-
|
|
1162
|
+
startTracking() {
|
|
1182
1163
|
if (this.isActive())
|
|
1183
1164
|
return;
|
|
1184
1165
|
if (this.destroyed) {
|
|
@@ -1189,7 +1170,7 @@ class dt extends f {
|
|
|
1189
1170
|
if (!t)
|
|
1190
1171
|
throw new Error("Cannot start session tracking: config not available");
|
|
1191
1172
|
try {
|
|
1192
|
-
this.sessionManager = new
|
|
1173
|
+
this.sessionManager = new ht(this.storageManager, this.eventManager, t), this.sessionManager.startTracking(), this.eventManager.flushPendingEvents();
|
|
1193
1174
|
} catch (s) {
|
|
1194
1175
|
if (this.sessionManager) {
|
|
1195
1176
|
try {
|
|
@@ -1204,17 +1185,17 @@ class dt extends f {
|
|
|
1204
1185
|
isActive() {
|
|
1205
1186
|
return this.sessionManager !== null && !this.destroyed;
|
|
1206
1187
|
}
|
|
1207
|
-
|
|
1208
|
-
this.sessionManager && (
|
|
1188
|
+
cleanupSessionManager() {
|
|
1189
|
+
this.sessionManager && (this.sessionManager.stopTracking(), this.sessionManager.destroy(), this.sessionManager = null);
|
|
1209
1190
|
}
|
|
1210
|
-
|
|
1211
|
-
|
|
1191
|
+
stopTracking() {
|
|
1192
|
+
this.cleanupSessionManager();
|
|
1212
1193
|
}
|
|
1213
1194
|
destroy() {
|
|
1214
1195
|
this.destroyed || (this.sessionManager && (this.sessionManager.destroy(), this.sessionManager = null), this.destroyed = !0, this.set("hasStartSession", !1));
|
|
1215
1196
|
}
|
|
1216
1197
|
}
|
|
1217
|
-
class
|
|
1198
|
+
class gt extends f {
|
|
1218
1199
|
eventManager;
|
|
1219
1200
|
onTrack;
|
|
1220
1201
|
originalPushState;
|
|
@@ -1234,8 +1215,8 @@ class ht extends f {
|
|
|
1234
1215
|
t.apply(window.history, s), this.trackCurrentPage();
|
|
1235
1216
|
};
|
|
1236
1217
|
}
|
|
1237
|
-
trackCurrentPage =
|
|
1238
|
-
const e = window.location.href, t =
|
|
1218
|
+
trackCurrentPage = () => {
|
|
1219
|
+
const e = window.location.href, t = K(e, this.get("config").sensitiveQueryParams);
|
|
1239
1220
|
if (this.get("pageUrl") === t)
|
|
1240
1221
|
return;
|
|
1241
1222
|
this.onTrack();
|
|
@@ -1250,7 +1231,7 @@ class ht extends f {
|
|
|
1250
1231
|
});
|
|
1251
1232
|
};
|
|
1252
1233
|
trackInitialPageView() {
|
|
1253
|
-
const e =
|
|
1234
|
+
const e = K(window.location.href, this.get("config").sensitiveQueryParams), t = this.extractPageViewData();
|
|
1254
1235
|
this.eventManager.track({
|
|
1255
1236
|
type: d.PAGE_VIEW,
|
|
1256
1237
|
page_url: e,
|
|
@@ -1268,7 +1249,7 @@ class ht extends f {
|
|
|
1268
1249
|
};
|
|
1269
1250
|
}
|
|
1270
1251
|
}
|
|
1271
|
-
class
|
|
1252
|
+
class Et extends f {
|
|
1272
1253
|
eventManager;
|
|
1273
1254
|
clickHandler;
|
|
1274
1255
|
constructor(e) {
|
|
@@ -1306,10 +1287,10 @@ class ft extends f {
|
|
|
1306
1287
|
this.clickHandler && (window.removeEventListener("click", this.clickHandler, !0), this.clickHandler = void 0);
|
|
1307
1288
|
}
|
|
1308
1289
|
findTrackingElement(e) {
|
|
1309
|
-
return e.hasAttribute(`${
|
|
1290
|
+
return e.hasAttribute(`${P}-name`) ? e : e.closest(`[${P}-name]`) || void 0;
|
|
1310
1291
|
}
|
|
1311
1292
|
getRelevantClickElement(e) {
|
|
1312
|
-
for (const t of
|
|
1293
|
+
for (const t of Oe)
|
|
1313
1294
|
try {
|
|
1314
1295
|
if (e.matches(t))
|
|
1315
1296
|
return e;
|
|
@@ -1330,7 +1311,7 @@ class ft extends f {
|
|
|
1330
1311
|
return { x: n, y: i, relativeX: a, relativeY: l };
|
|
1331
1312
|
}
|
|
1332
1313
|
extractTrackingData(e) {
|
|
1333
|
-
const t = e.getAttribute(`${
|
|
1314
|
+
const t = e.getAttribute(`${P}-name`), s = e.getAttribute(`${P}-value`);
|
|
1334
1315
|
if (t)
|
|
1335
1316
|
return {
|
|
1336
1317
|
element: e,
|
|
@@ -1387,7 +1368,7 @@ class ft extends f {
|
|
|
1387
1368
|
};
|
|
1388
1369
|
}
|
|
1389
1370
|
}
|
|
1390
|
-
class
|
|
1371
|
+
class St extends f {
|
|
1391
1372
|
eventManager;
|
|
1392
1373
|
containers = [];
|
|
1393
1374
|
limitWarningLogged = !1;
|
|
@@ -1442,7 +1423,7 @@ class gt extends f {
|
|
|
1442
1423
|
this.getScrollHeight(e),
|
|
1443
1424
|
this.getViewportHeight(e)
|
|
1444
1425
|
),
|
|
1445
|
-
lastDirection:
|
|
1426
|
+
lastDirection: k.DOWN,
|
|
1446
1427
|
lastEventTime: 0,
|
|
1447
1428
|
debounceTimer: null,
|
|
1448
1429
|
listener: t
|
|
@@ -1486,7 +1467,7 @@ class gt extends f {
|
|
|
1486
1467
|
e.debounceTimer !== null && (clearTimeout(e.debounceTimer), e.debounceTimer = null);
|
|
1487
1468
|
}
|
|
1488
1469
|
getScrollDirection(e, t) {
|
|
1489
|
-
return e > t ?
|
|
1470
|
+
return e > t ? k.DOWN : k.UP;
|
|
1490
1471
|
}
|
|
1491
1472
|
calculateScrollDepth(e, t, s) {
|
|
1492
1473
|
if (t <= s)
|
|
@@ -1526,7 +1507,7 @@ class gt extends f {
|
|
|
1526
1507
|
}
|
|
1527
1508
|
}
|
|
1528
1509
|
}
|
|
1529
|
-
class
|
|
1510
|
+
class mt extends f {
|
|
1530
1511
|
isInitialized = !1;
|
|
1531
1512
|
async initialize() {
|
|
1532
1513
|
if (this.isInitialized)
|
|
@@ -1578,7 +1559,7 @@ class St extends f {
|
|
|
1578
1559
|
`, document.head.appendChild(s);
|
|
1579
1560
|
}
|
|
1580
1561
|
}
|
|
1581
|
-
class
|
|
1562
|
+
class pt {
|
|
1582
1563
|
storage;
|
|
1583
1564
|
sessionStorageRef;
|
|
1584
1565
|
fallbackStorage = /* @__PURE__ */ new Map();
|
|
@@ -1754,12 +1735,12 @@ class Et {
|
|
|
1754
1735
|
this.fallbackSessionStorage.delete(e);
|
|
1755
1736
|
}
|
|
1756
1737
|
}
|
|
1757
|
-
class
|
|
1738
|
+
class _t extends f {
|
|
1758
1739
|
eventManager;
|
|
1759
1740
|
reportedByNav = /* @__PURE__ */ new Map();
|
|
1760
1741
|
observers = [];
|
|
1761
1742
|
lastLongTaskSentAt = 0;
|
|
1762
|
-
vitalThresholds =
|
|
1743
|
+
vitalThresholds = Te;
|
|
1763
1744
|
constructor(e) {
|
|
1764
1745
|
super(), this.eventManager = e;
|
|
1765
1746
|
}
|
|
@@ -1825,7 +1806,7 @@ class mt extends f {
|
|
|
1825
1806
|
}
|
|
1826
1807
|
async initWebVitals() {
|
|
1827
1808
|
try {
|
|
1828
|
-
const { onLCP: e, onCLS: t, onFCP: s, onTTFB: n, onINP: i } = await Promise.resolve().then(() =>
|
|
1809
|
+
const { onLCP: e, onCLS: t, onFCP: s, onTTFB: n, onINP: i } = await Promise.resolve().then(() => Vt), a = (l) => (c) => {
|
|
1829
1810
|
const u = Number(c.value.toFixed(2));
|
|
1830
1811
|
this.sendVital({ type: l, value: u });
|
|
1831
1812
|
};
|
|
@@ -1852,7 +1833,7 @@ class mt extends f {
|
|
|
1852
1833
|
const t = e.getEntries();
|
|
1853
1834
|
for (const s of t) {
|
|
1854
1835
|
const n = Number(s.duration.toFixed(2)), i = Date.now();
|
|
1855
|
-
i - this.lastLongTaskSentAt >=
|
|
1836
|
+
i - this.lastLongTaskSentAt >= Qe && (this.shouldSendVital("LONG_TASK", n) && this.trackWebVital("LONG_TASK", n), this.lastLongTaskSentAt = i);
|
|
1856
1837
|
}
|
|
1857
1838
|
},
|
|
1858
1839
|
{ type: "longtask", buffered: !0 }
|
|
@@ -1933,7 +1914,7 @@ class mt extends f {
|
|
|
1933
1914
|
return !(typeof s == "number" && t <= s);
|
|
1934
1915
|
}
|
|
1935
1916
|
}
|
|
1936
|
-
class
|
|
1917
|
+
class Tt extends f {
|
|
1937
1918
|
eventManager;
|
|
1938
1919
|
recentErrors = /* @__PURE__ */ new Map();
|
|
1939
1920
|
constructor(e) {
|
|
@@ -1953,10 +1934,10 @@ class pt extends f {
|
|
|
1953
1934
|
if (!this.shouldSample())
|
|
1954
1935
|
return;
|
|
1955
1936
|
const t = this.sanitize(e.message || "Unknown error");
|
|
1956
|
-
this.shouldSuppressError(
|
|
1937
|
+
this.shouldSuppressError(C.JS_ERROR, t) || this.eventManager.track({
|
|
1957
1938
|
type: d.ERROR,
|
|
1958
1939
|
error_data: {
|
|
1959
|
-
type:
|
|
1940
|
+
type: C.JS_ERROR,
|
|
1960
1941
|
message: t,
|
|
1961
1942
|
...e.filename && { filename: e.filename },
|
|
1962
1943
|
...e.lineno && { line: e.lineno },
|
|
@@ -1968,10 +1949,10 @@ class pt extends f {
|
|
|
1968
1949
|
if (!this.shouldSample())
|
|
1969
1950
|
return;
|
|
1970
1951
|
const t = this.extractRejectionMessage(e.reason), s = this.sanitize(t);
|
|
1971
|
-
this.shouldSuppressError(
|
|
1952
|
+
this.shouldSuppressError(C.PROMISE_REJECTION, s) || this.eventManager.track({
|
|
1972
1953
|
type: d.ERROR,
|
|
1973
1954
|
error_data: {
|
|
1974
|
-
type:
|
|
1955
|
+
type: C.PROMISE_REJECTION,
|
|
1975
1956
|
message: s
|
|
1976
1957
|
}
|
|
1977
1958
|
});
|
|
@@ -1990,8 +1971,8 @@ class pt extends f {
|
|
|
1990
1971
|
}
|
|
1991
1972
|
}
|
|
1992
1973
|
sanitize(e) {
|
|
1993
|
-
let t = e.length >
|
|
1994
|
-
for (const s of
|
|
1974
|
+
let t = e.length > ue ? e.slice(0, ue) + "..." : e;
|
|
1975
|
+
for (const s of ve) {
|
|
1995
1976
|
const n = new RegExp(s.source, s.flags);
|
|
1996
1977
|
t = t.replace(n, "[REDACTED]");
|
|
1997
1978
|
}
|
|
@@ -1999,25 +1980,25 @@ class pt extends f {
|
|
|
1999
1980
|
}
|
|
2000
1981
|
shouldSuppressError(e, t) {
|
|
2001
1982
|
const s = Date.now(), n = `${e}:${t}`, i = this.recentErrors.get(n);
|
|
2002
|
-
return i && s - i <
|
|
1983
|
+
return i && s - i < de ? (this.recentErrors.set(n, s), !0) : (this.recentErrors.set(n, s), this.recentErrors.size > je ? (this.recentErrors.clear(), this.recentErrors.set(n, s), !1) : (this.recentErrors.size > U && this.pruneOldErrors(), !1));
|
|
2003
1984
|
}
|
|
2004
1985
|
pruneOldErrors() {
|
|
2005
1986
|
const e = Date.now();
|
|
2006
1987
|
for (const [n, i] of this.recentErrors.entries())
|
|
2007
|
-
e - i >
|
|
2008
|
-
if (this.recentErrors.size <=
|
|
1988
|
+
e - i > de && this.recentErrors.delete(n);
|
|
1989
|
+
if (this.recentErrors.size <= U)
|
|
2009
1990
|
return;
|
|
2010
|
-
const t = Array.from(this.recentErrors.entries()).sort((n, i) => n[1] - i[1]), s = this.recentErrors.size -
|
|
1991
|
+
const t = Array.from(this.recentErrors.entries()).sort((n, i) => n[1] - i[1]), s = this.recentErrors.size - U;
|
|
2011
1992
|
for (let n = 0; n < s; n += 1) {
|
|
2012
1993
|
const i = t[n];
|
|
2013
1994
|
i && this.recentErrors.delete(i[0]);
|
|
2014
1995
|
}
|
|
2015
1996
|
}
|
|
2016
1997
|
}
|
|
2017
|
-
class
|
|
1998
|
+
class vt extends f {
|
|
2018
1999
|
isInitialized = !1;
|
|
2019
2000
|
suppressNextScrollTimer = null;
|
|
2020
|
-
emitter = new
|
|
2001
|
+
emitter = new lt();
|
|
2021
2002
|
managers = {};
|
|
2022
2003
|
handlers = {};
|
|
2023
2004
|
integrations = {};
|
|
@@ -2026,13 +2007,13 @@ class _t extends f {
|
|
|
2026
2007
|
}
|
|
2027
2008
|
async init(e = {}) {
|
|
2028
2009
|
if (!this.isInitialized) {
|
|
2029
|
-
this.managers.storage = new
|
|
2010
|
+
this.managers.storage = new pt();
|
|
2030
2011
|
try {
|
|
2031
|
-
this.setupState(e), await this.setupIntegrations(), this.managers.event = new
|
|
2012
|
+
this.setupState(e), await this.setupIntegrations(), this.managers.event = new ut(this.managers.storage, this.integrations.googleAnalytics, this.emitter), this.initializeHandlers(), await this.managers.event.recoverPersistedEvents().catch((t) => {
|
|
2032
2013
|
o("warn", "Failed to recover persisted events", { error: t });
|
|
2033
2014
|
}), this.isInitialized = !0;
|
|
2034
2015
|
} catch (t) {
|
|
2035
|
-
|
|
2016
|
+
this.destroy(!0);
|
|
2036
2017
|
const s = t instanceof Error ? t.message : String(t);
|
|
2037
2018
|
throw new Error(`[TraceLog] TraceLog initialization failed: ${s}`);
|
|
2038
2019
|
}
|
|
@@ -2041,7 +2022,7 @@ class _t extends f {
|
|
|
2041
2022
|
sendCustomEvent(e, t) {
|
|
2042
2023
|
if (!this.managers.event)
|
|
2043
2024
|
return;
|
|
2044
|
-
const { valid: s, error: n, sanitizedMetadata: i } =
|
|
2025
|
+
const { valid: s, error: n, sanitizedMetadata: i } = ot(e, t);
|
|
2045
2026
|
if (!s) {
|
|
2046
2027
|
if (this.get("mode") === R.QA)
|
|
2047
2028
|
throw new Error(`[TraceLog] Custom event "${e}" validation failed: ${n}`);
|
|
@@ -2061,64 +2042,60 @@ class _t extends f {
|
|
|
2061
2042
|
off(e, t) {
|
|
2062
2043
|
this.emitter.off(e, t);
|
|
2063
2044
|
}
|
|
2064
|
-
|
|
2065
|
-
|
|
2066
|
-
return;
|
|
2067
|
-
this.integrations.googleAnalytics?.cleanup();
|
|
2068
|
-
const t = Object.values(this.handlers).filter(Boolean).map(async (s) => {
|
|
2045
|
+
destroy(e = !1) {
|
|
2046
|
+
!this.isInitialized && !e || (this.integrations.googleAnalytics?.cleanup(), Object.values(this.handlers).filter(Boolean).forEach((t) => {
|
|
2069
2047
|
try {
|
|
2070
|
-
|
|
2071
|
-
} catch (
|
|
2072
|
-
o("warn", "Failed to stop tracking", { error:
|
|
2048
|
+
t.stopTracking();
|
|
2049
|
+
} catch (s) {
|
|
2050
|
+
o("warn", "Failed to stop tracking", { error: s });
|
|
2073
2051
|
}
|
|
2074
|
-
});
|
|
2075
|
-
await Promise.allSettled(t), this.suppressNextScrollTimer && (clearTimeout(this.suppressNextScrollTimer), this.suppressNextScrollTimer = null), this.managers.event?.flushImmediatelySync(), this.managers.event?.stop(), this.emitter.removeAllListeners(), this.set("hasStartSession", !1), this.set("suppressNextScroll", !1), this.set("sessionId", null), this.isInitialized = !1, this.handlers = {};
|
|
2052
|
+
}), this.suppressNextScrollTimer && (clearTimeout(this.suppressNextScrollTimer), this.suppressNextScrollTimer = null), this.managers.event?.flushImmediatelySync(), this.managers.event?.stop(), this.emitter.removeAllListeners(), this.set("hasStartSession", !1), this.set("suppressNextScroll", !1), this.set("sessionId", null), this.isInitialized = !1, this.handlers = {});
|
|
2076
2053
|
}
|
|
2077
2054
|
setupState(e = {}) {
|
|
2078
2055
|
this.set("config", e);
|
|
2079
|
-
const t =
|
|
2056
|
+
const t = dt.getId(this.managers.storage);
|
|
2080
2057
|
this.set("userId", t);
|
|
2081
|
-
const s =
|
|
2058
|
+
const s = qe(e);
|
|
2082
2059
|
this.set("collectApiUrl", s);
|
|
2083
|
-
const n =
|
|
2060
|
+
const n = Ve();
|
|
2084
2061
|
this.set("device", n);
|
|
2085
|
-
const i =
|
|
2062
|
+
const i = K(window.location.href, e.sensitiveQueryParams);
|
|
2086
2063
|
this.set("pageUrl", i);
|
|
2087
|
-
const a =
|
|
2064
|
+
const a = Xe() ? R.QA : void 0;
|
|
2088
2065
|
a && this.set("mode", a);
|
|
2089
2066
|
}
|
|
2090
2067
|
async setupIntegrations() {
|
|
2091
2068
|
if (this.get("config").integrations?.googleAnalytics?.measurementId?.trim())
|
|
2092
2069
|
try {
|
|
2093
|
-
this.integrations.googleAnalytics = new
|
|
2070
|
+
this.integrations.googleAnalytics = new mt(), await this.integrations.googleAnalytics.initialize();
|
|
2094
2071
|
} catch {
|
|
2095
2072
|
this.integrations.googleAnalytics = void 0;
|
|
2096
2073
|
}
|
|
2097
2074
|
}
|
|
2098
|
-
|
|
2099
|
-
this.handlers.session = new
|
|
2075
|
+
initializeHandlers() {
|
|
2076
|
+
this.handlers.session = new ft(
|
|
2100
2077
|
this.managers.storage,
|
|
2101
2078
|
this.managers.event
|
|
2102
|
-
),
|
|
2079
|
+
), this.handlers.session.startTracking();
|
|
2103
2080
|
const e = () => {
|
|
2104
2081
|
this.set("suppressNextScroll", !0), this.suppressNextScrollTimer && clearTimeout(this.suppressNextScrollTimer), this.suppressNextScrollTimer = window.setTimeout(() => {
|
|
2105
2082
|
this.set("suppressNextScroll", !1);
|
|
2106
2083
|
}, 250 * 2);
|
|
2107
2084
|
};
|
|
2108
|
-
this.handlers.pageView = new
|
|
2085
|
+
this.handlers.pageView = new gt(this.managers.event, e), this.handlers.pageView.startTracking(), this.handlers.click = new Et(this.managers.event), this.handlers.click.startTracking(), this.handlers.scroll = new St(this.managers.event), this.handlers.scroll.startTracking(), this.handlers.performance = new _t(this.managers.event), this.handlers.performance.startTracking().catch((t) => {
|
|
2109
2086
|
o("warn", "Failed to start performance tracking", { error: t });
|
|
2110
|
-
}), this.handlers.error = new
|
|
2087
|
+
}), this.handlers.error = new Tt(this.managers.event), this.handlers.error.startTracking();
|
|
2111
2088
|
}
|
|
2112
2089
|
}
|
|
2113
2090
|
const I = [];
|
|
2114
|
-
let h = null,
|
|
2115
|
-
const
|
|
2091
|
+
let h = null, M = !1, H = !1;
|
|
2092
|
+
const It = async (r) => {
|
|
2116
2093
|
if (typeof window > "u" || typeof document > "u")
|
|
2117
2094
|
throw new Error("[TraceLog] This library can only be used in a browser environment");
|
|
2118
|
-
if (!window.__traceLogDisabled && !h && !
|
|
2119
|
-
|
|
2095
|
+
if (!window.__traceLogDisabled && !h && !M) {
|
|
2096
|
+
M = !0;
|
|
2120
2097
|
try {
|
|
2121
|
-
const e =
|
|
2098
|
+
const e = st(r ?? {}), t = new vt();
|
|
2122
2099
|
try {
|
|
2123
2100
|
I.forEach(({ event: i, callback: a }) => {
|
|
2124
2101
|
t.on(i, a);
|
|
@@ -2131,7 +2108,7 @@ const Tt = async (r) => {
|
|
|
2131
2108
|
await Promise.race([s, n]), h = t;
|
|
2132
2109
|
} catch (s) {
|
|
2133
2110
|
try {
|
|
2134
|
-
|
|
2111
|
+
t.destroy(!0);
|
|
2135
2112
|
} catch (n) {
|
|
2136
2113
|
o("error", "Failed to cleanup partially initialized app", { error: n });
|
|
2137
2114
|
}
|
|
@@ -2140,48 +2117,48 @@ const Tt = async (r) => {
|
|
|
2140
2117
|
} catch (e) {
|
|
2141
2118
|
throw h = null, e;
|
|
2142
2119
|
} finally {
|
|
2143
|
-
|
|
2120
|
+
M = !1;
|
|
2144
2121
|
}
|
|
2145
2122
|
}
|
|
2146
|
-
},
|
|
2123
|
+
}, yt = (r, e) => {
|
|
2147
2124
|
if (!h)
|
|
2148
2125
|
throw new Error("[TraceLog] TraceLog not initialized. Please call init() first.");
|
|
2149
|
-
if (
|
|
2126
|
+
if (H)
|
|
2150
2127
|
throw new Error("[TraceLog] Cannot send events while TraceLog is being destroyed");
|
|
2151
2128
|
h.sendCustomEvent(r, e);
|
|
2152
|
-
},
|
|
2153
|
-
if (!h ||
|
|
2129
|
+
}, At = (r, e) => {
|
|
2130
|
+
if (!h || M) {
|
|
2154
2131
|
I.push({ event: r, callback: e });
|
|
2155
2132
|
return;
|
|
2156
2133
|
}
|
|
2157
2134
|
h.on(r, e);
|
|
2158
|
-
},
|
|
2135
|
+
}, wt = (r, e) => {
|
|
2159
2136
|
if (!h) {
|
|
2160
2137
|
const t = I.findIndex((s) => s.event === r && s.callback === e);
|
|
2161
2138
|
t !== -1 && I.splice(t, 1);
|
|
2162
2139
|
return;
|
|
2163
2140
|
}
|
|
2164
2141
|
h.off(r, e);
|
|
2165
|
-
},
|
|
2142
|
+
}, Mt = () => h !== null, Nt = () => {
|
|
2143
|
+
if (H)
|
|
2144
|
+
throw new Error("[TraceLog] Destroy operation already in progress");
|
|
2166
2145
|
if (!h)
|
|
2167
2146
|
throw new Error("[TraceLog] App not initialized");
|
|
2168
|
-
|
|
2169
|
-
throw new Error("[TraceLog] Destroy operation already in progress");
|
|
2170
|
-
U = !0;
|
|
2147
|
+
H = !0;
|
|
2171
2148
|
try {
|
|
2172
|
-
|
|
2149
|
+
h.destroy(), h = null, M = !1, I.length = 0;
|
|
2173
2150
|
} catch (r) {
|
|
2174
|
-
h = null,
|
|
2151
|
+
h = null, M = !1, I.length = 0, o("warn", "Error during destroy, forced cleanup completed", { error: r });
|
|
2175
2152
|
} finally {
|
|
2176
|
-
|
|
2153
|
+
H = !1;
|
|
2177
2154
|
}
|
|
2178
|
-
},
|
|
2179
|
-
WEB_VITALS_THRESHOLDS:
|
|
2155
|
+
}, Gt = {
|
|
2156
|
+
WEB_VITALS_THRESHOLDS: Te
|
|
2180
2157
|
// Business thresholds for performance analysis
|
|
2181
|
-
},
|
|
2182
|
-
PII_PATTERNS:
|
|
2158
|
+
}, $t = {
|
|
2159
|
+
PII_PATTERNS: ve
|
|
2183
2160
|
// Patterns for sensitive data protection
|
|
2184
|
-
},
|
|
2161
|
+
}, zt = {
|
|
2185
2162
|
LOW_ACTIVITY_EVENT_COUNT: 50,
|
|
2186
2163
|
HIGH_ACTIVITY_EVENT_COUNT: 1e3,
|
|
2187
2164
|
MIN_EVENTS_FOR_DYNAMIC_CALCULATION: 100,
|
|
@@ -2191,7 +2168,7 @@ const Tt = async (r) => {
|
|
|
2191
2168
|
MIN_ENGAGED_SESSION_DURATION_MS: 30 * 1e3,
|
|
2192
2169
|
MIN_SCROLL_DEPTH_ENGAGEMENT: 25
|
|
2193
2170
|
// 25% scroll depth for engagement
|
|
2194
|
-
},
|
|
2171
|
+
}, Qt = {
|
|
2195
2172
|
INACTIVITY_TIMEOUT_MS: 30 * 60 * 1e3,
|
|
2196
2173
|
// 30min for analytics (vs 15min client)
|
|
2197
2174
|
SHORT_SESSION_THRESHOLD_MS: 30 * 1e3,
|
|
@@ -2199,20 +2176,20 @@ const Tt = async (r) => {
|
|
|
2199
2176
|
LONG_SESSION_THRESHOLD_MS: 30 * 60 * 1e3,
|
|
2200
2177
|
MAX_REALISTIC_SESSION_DURATION_MS: 8 * 60 * 60 * 1e3
|
|
2201
2178
|
// Filter outliers
|
|
2202
|
-
},
|
|
2179
|
+
}, jt = {
|
|
2203
2180
|
MOBILE_MAX_WIDTH: 768,
|
|
2204
2181
|
TABLET_MAX_WIDTH: 1024,
|
|
2205
2182
|
MOBILE_PERFORMANCE_FACTOR: 1.5,
|
|
2206
2183
|
// Mobile typically 1.5x slower
|
|
2207
2184
|
TABLET_PERFORMANCE_FACTOR: 1.2
|
|
2208
|
-
},
|
|
2185
|
+
}, Bt = {
|
|
2209
2186
|
MIN_TEXT_LENGTH_FOR_ANALYSIS: 10,
|
|
2210
2187
|
MIN_CLICKS_FOR_HOT_ELEMENT: 10,
|
|
2211
2188
|
// Popular element threshold
|
|
2212
2189
|
MIN_SCROLL_COMPLETION_PERCENT: 80,
|
|
2213
2190
|
// Page consumption threshold
|
|
2214
2191
|
MIN_TIME_ON_PAGE_FOR_READ_MS: 15 * 1e3
|
|
2215
|
-
},
|
|
2192
|
+
}, Wt = {
|
|
2216
2193
|
SIGNIFICANT_CHANGE_PERCENT: 20,
|
|
2217
2194
|
MAJOR_CHANGE_PERCENT: 50,
|
|
2218
2195
|
MIN_EVENTS_FOR_INSIGHT: 100,
|
|
@@ -2222,19 +2199,19 @@ const Tt = async (r) => {
|
|
|
2222
2199
|
LOW_ERROR_RATE_PERCENT: 1,
|
|
2223
2200
|
HIGH_ERROR_RATE_PERCENT: 5,
|
|
2224
2201
|
CRITICAL_ERROR_RATE_PERCENT: 10
|
|
2225
|
-
},
|
|
2202
|
+
}, Xt = {
|
|
2226
2203
|
SHORT_TERM_TREND_HOURS: 24,
|
|
2227
2204
|
MEDIUM_TERM_TREND_DAYS: 7,
|
|
2228
2205
|
LONG_TERM_TREND_DAYS: 30,
|
|
2229
2206
|
MIN_DATA_POINTS_FOR_TREND: 5,
|
|
2230
2207
|
WEEKLY_PATTERN_MIN_WEEKS: 4,
|
|
2231
2208
|
DAILY_PATTERN_MIN_DAYS: 14
|
|
2232
|
-
},
|
|
2209
|
+
}, Yt = {
|
|
2233
2210
|
MIN_SEGMENT_SIZE: 10,
|
|
2234
2211
|
MIN_COHORT_SIZE: 5,
|
|
2235
2212
|
COHORT_ANALYSIS_DAYS: [1, 3, 7, 14, 30],
|
|
2236
2213
|
MIN_FUNNEL_EVENTS: 20
|
|
2237
|
-
},
|
|
2214
|
+
}, Kt = {
|
|
2238
2215
|
DEFAULT_EVENTS_LIMIT: 5,
|
|
2239
2216
|
DEFAULT_SESSIONS_LIMIT: 5,
|
|
2240
2217
|
DEFAULT_PAGES_LIMIT: 5,
|
|
@@ -2242,38 +2219,38 @@ const Tt = async (r) => {
|
|
|
2242
2219
|
MAX_TIME_RANGE_DAYS: 365,
|
|
2243
2220
|
ANALYTICS_BATCH_SIZE: 1e3
|
|
2244
2221
|
// For historical analysis
|
|
2245
|
-
},
|
|
2222
|
+
}, qt = {
|
|
2246
2223
|
ANOMALY_THRESHOLD_SIGMA: 2.5,
|
|
2247
2224
|
STRONG_ANOMALY_THRESHOLD_SIGMA: 3,
|
|
2248
2225
|
TRAFFIC_DROP_ALERT_PERCENT: -30,
|
|
2249
2226
|
TRAFFIC_SPIKE_ALERT_PERCENT: 200,
|
|
2250
2227
|
MIN_BASELINE_DAYS: 7,
|
|
2251
2228
|
MIN_EVENTS_FOR_ANOMALY_DETECTION: 50
|
|
2252
|
-
},
|
|
2229
|
+
}, Zt = {
|
|
2253
2230
|
PAGE_URL_EXCLUDED: "excluded",
|
|
2254
2231
|
PAGE_URL_UNKNOWN: "unknown"
|
|
2255
|
-
},
|
|
2256
|
-
init:
|
|
2257
|
-
event:
|
|
2258
|
-
on:
|
|
2259
|
-
off:
|
|
2260
|
-
isInitialized:
|
|
2261
|
-
destroy:
|
|
2232
|
+
}, Jt = {
|
|
2233
|
+
init: It,
|
|
2234
|
+
event: yt,
|
|
2235
|
+
on: At,
|
|
2236
|
+
off: wt,
|
|
2237
|
+
isInitialized: Mt,
|
|
2238
|
+
destroy: Nt
|
|
2262
2239
|
};
|
|
2263
|
-
var
|
|
2240
|
+
var Z, ye = -1, N = function(r) {
|
|
2264
2241
|
addEventListener("pageshow", function(e) {
|
|
2265
|
-
e.persisted && (
|
|
2242
|
+
e.persisted && (ye = e.timeStamp, r(e));
|
|
2266
2243
|
}, !0);
|
|
2267
|
-
},
|
|
2244
|
+
}, ne = function() {
|
|
2268
2245
|
var r = self.performance && performance.getEntriesByType && performance.getEntriesByType("navigation")[0];
|
|
2269
2246
|
if (r && r.responseStart > 0 && r.responseStart < performance.now()) return r;
|
|
2270
|
-
},
|
|
2271
|
-
var r =
|
|
2247
|
+
}, F = function() {
|
|
2248
|
+
var r = ne();
|
|
2272
2249
|
return r && r.activationStart || 0;
|
|
2273
|
-
},
|
|
2274
|
-
var t =
|
|
2275
|
-
return
|
|
2276
|
-
},
|
|
2250
|
+
}, E = function(r, e) {
|
|
2251
|
+
var t = ne(), s = "navigate";
|
|
2252
|
+
return ye >= 0 ? s = "back-forward-cache" : t && (document.prerendering || F() > 0 ? s = "prerender" : document.wasDiscarded ? s = "restore" : t.type && (s = t.type.replace(/_/g, "-"))), { name: r, value: e === void 0 ? -1 : e, rating: "good", delta: 0, entries: [], id: "v4-".concat(Date.now(), "-").concat(Math.floor(8999999999999 * Math.random()) + 1e12), navigationType: s };
|
|
2253
|
+
}, O = function(r, e, t) {
|
|
2277
2254
|
try {
|
|
2278
2255
|
if (PerformanceObserver.supportedEntryTypes.includes(r)) {
|
|
2279
2256
|
var s = new PerformanceObserver(function(n) {
|
|
@@ -2285,205 +2262,206 @@ var q, ve = -1, M = function(r) {
|
|
|
2285
2262
|
}
|
|
2286
2263
|
} catch {
|
|
2287
2264
|
}
|
|
2288
|
-
},
|
|
2265
|
+
}, S = function(r, e, t, s) {
|
|
2289
2266
|
var n, i;
|
|
2290
2267
|
return function(a) {
|
|
2291
2268
|
e.value >= 0 && (a || s) && ((i = e.value - (n || 0)) || n === void 0) && (n = e.value, e.delta = i, e.rating = function(l, c) {
|
|
2292
2269
|
return l > c[1] ? "poor" : l > c[0] ? "needs-improvement" : "good";
|
|
2293
2270
|
}(e.value, t), r(e));
|
|
2294
2271
|
};
|
|
2295
|
-
},
|
|
2272
|
+
}, ie = function(r) {
|
|
2296
2273
|
requestAnimationFrame(function() {
|
|
2297
2274
|
return requestAnimationFrame(function() {
|
|
2298
2275
|
return r();
|
|
2299
2276
|
});
|
|
2300
2277
|
});
|
|
2301
|
-
},
|
|
2278
|
+
}, G = function(r) {
|
|
2302
2279
|
document.addEventListener("visibilitychange", function() {
|
|
2303
2280
|
document.visibilityState === "hidden" && r();
|
|
2304
2281
|
});
|
|
2305
|
-
},
|
|
2282
|
+
}, ae = function(r) {
|
|
2306
2283
|
var e = !1;
|
|
2307
2284
|
return function() {
|
|
2308
2285
|
e || (r(), e = !0);
|
|
2309
2286
|
};
|
|
2310
|
-
},
|
|
2287
|
+
}, w = -1, me = function() {
|
|
2311
2288
|
return document.visibilityState !== "hidden" || document.prerendering ? 1 / 0 : 0;
|
|
2312
|
-
},
|
|
2313
|
-
document.visibilityState === "hidden" &&
|
|
2314
|
-
},
|
|
2315
|
-
addEventListener("visibilitychange",
|
|
2316
|
-
},
|
|
2317
|
-
removeEventListener("visibilitychange",
|
|
2318
|
-
},
|
|
2319
|
-
return
|
|
2289
|
+
}, V = function(r) {
|
|
2290
|
+
document.visibilityState === "hidden" && w > -1 && (w = r.type === "visibilitychange" ? r.timeStamp : 0, Lt());
|
|
2291
|
+
}, pe = function() {
|
|
2292
|
+
addEventListener("visibilitychange", V, !0), addEventListener("prerenderingchange", V, !0);
|
|
2293
|
+
}, Lt = function() {
|
|
2294
|
+
removeEventListener("visibilitychange", V, !0), removeEventListener("prerenderingchange", V, !0);
|
|
2295
|
+
}, Ae = function() {
|
|
2296
|
+
return w < 0 && (w = me(), pe(), N(function() {
|
|
2320
2297
|
setTimeout(function() {
|
|
2321
|
-
|
|
2298
|
+
w = me(), pe();
|
|
2322
2299
|
}, 0);
|
|
2323
2300
|
})), { get firstHiddenTime() {
|
|
2324
|
-
return
|
|
2301
|
+
return w;
|
|
2325
2302
|
} };
|
|
2326
|
-
},
|
|
2303
|
+
}, $ = function(r) {
|
|
2327
2304
|
document.prerendering ? addEventListener("prerenderingchange", function() {
|
|
2328
2305
|
return r();
|
|
2329
2306
|
}, !0) : r();
|
|
2330
|
-
},
|
|
2331
|
-
e = e || {},
|
|
2332
|
-
var t, s =
|
|
2307
|
+
}, J = [1800, 3e3], we = function(r, e) {
|
|
2308
|
+
e = e || {}, $(function() {
|
|
2309
|
+
var t, s = Ae(), n = E("FCP"), i = O("paint", function(a) {
|
|
2333
2310
|
a.forEach(function(l) {
|
|
2334
|
-
l.name === "first-contentful-paint" && (i.disconnect(), l.startTime < s.firstHiddenTime && (n.value = Math.max(l.startTime -
|
|
2311
|
+
l.name === "first-contentful-paint" && (i.disconnect(), l.startTime < s.firstHiddenTime && (n.value = Math.max(l.startTime - F(), 0), n.entries.push(l), t(!0)));
|
|
2335
2312
|
});
|
|
2336
2313
|
});
|
|
2337
|
-
i && (t =
|
|
2338
|
-
n =
|
|
2314
|
+
i && (t = S(r, n, J, e.reportAllChanges), N(function(a) {
|
|
2315
|
+
n = E("FCP"), t = S(r, n, J, e.reportAllChanges), ie(function() {
|
|
2339
2316
|
n.value = performance.now() - a.timeStamp, t(!0);
|
|
2340
2317
|
});
|
|
2341
2318
|
}));
|
|
2342
2319
|
});
|
|
2343
|
-
},
|
|
2344
|
-
e = e || {},
|
|
2345
|
-
var t, s =
|
|
2320
|
+
}, ee = [0.1, 0.25], Ct = function(r, e) {
|
|
2321
|
+
e = e || {}, we(ae(function() {
|
|
2322
|
+
var t, s = E("CLS", 0), n = 0, i = [], a = function(c) {
|
|
2346
2323
|
c.forEach(function(u) {
|
|
2347
2324
|
if (!u.hadRecentInput) {
|
|
2348
|
-
var p = i[0],
|
|
2349
|
-
n && u.startTime -
|
|
2325
|
+
var p = i[0], L = i[i.length - 1];
|
|
2326
|
+
n && u.startTime - L.startTime < 1e3 && u.startTime - p.startTime < 5e3 ? (n += u.value, i.push(u)) : (n = u.value, i = [u]);
|
|
2350
2327
|
}
|
|
2351
2328
|
}), n > s.value && (s.value = n, s.entries = i, t());
|
|
2352
|
-
}, l =
|
|
2353
|
-
l && (t =
|
|
2329
|
+
}, l = O("layout-shift", a);
|
|
2330
|
+
l && (t = S(r, s, ee, e.reportAllChanges), G(function() {
|
|
2354
2331
|
a(l.takeRecords()), t(!0);
|
|
2355
|
-
}),
|
|
2356
|
-
n = 0, s =
|
|
2332
|
+
}), N(function() {
|
|
2333
|
+
n = 0, s = E("CLS", 0), t = S(r, s, ee, e.reportAllChanges), ie(function() {
|
|
2357
2334
|
return t();
|
|
2358
2335
|
});
|
|
2359
2336
|
}), setTimeout(t, 0));
|
|
2360
2337
|
}));
|
|
2361
|
-
},
|
|
2338
|
+
}, Me = 0, j = 1 / 0, D = 0, Rt = function(r) {
|
|
2362
2339
|
r.forEach(function(e) {
|
|
2363
|
-
e.interactionId && (
|
|
2340
|
+
e.interactionId && (j = Math.min(j, e.interactionId), D = Math.max(D, e.interactionId), Me = D ? (D - j) / 7 + 1 : 0);
|
|
2364
2341
|
});
|
|
2365
|
-
},
|
|
2366
|
-
return
|
|
2367
|
-
},
|
|
2368
|
-
"interactionCount" in performance ||
|
|
2369
|
-
}, g = [],
|
|
2370
|
-
var r = Math.min(g.length - 1, Math.floor((
|
|
2342
|
+
}, Ne = function() {
|
|
2343
|
+
return Z ? Me : performance.interactionCount || 0;
|
|
2344
|
+
}, bt = function() {
|
|
2345
|
+
"interactionCount" in performance || Z || (Z = O("event", Rt, { type: "event", buffered: !0, durationThreshold: 0 }));
|
|
2346
|
+
}, g = [], x = /* @__PURE__ */ new Map(), Le = 0, Ot = function() {
|
|
2347
|
+
var r = Math.min(g.length - 1, Math.floor((Ne() - Le) / 50));
|
|
2371
2348
|
return g[r];
|
|
2372
|
-
},
|
|
2373
|
-
if (
|
|
2349
|
+
}, Pt = [], Dt = function(r) {
|
|
2350
|
+
if (Pt.forEach(function(n) {
|
|
2374
2351
|
return n(r);
|
|
2375
2352
|
}), r.interactionId || r.entryType === "first-input") {
|
|
2376
|
-
var e = g[g.length - 1], t =
|
|
2353
|
+
var e = g[g.length - 1], t = x.get(r.interactionId);
|
|
2377
2354
|
if (t || g.length < 10 || r.duration > e.latency) {
|
|
2378
2355
|
if (t) r.duration > t.latency ? (t.entries = [r], t.latency = r.duration) : r.duration === t.latency && r.startTime === t.entries[0].startTime && t.entries.push(r);
|
|
2379
2356
|
else {
|
|
2380
2357
|
var s = { id: r.interactionId, latency: r.duration, entries: [r] };
|
|
2381
|
-
|
|
2358
|
+
x.set(s.id, s), g.push(s);
|
|
2382
2359
|
}
|
|
2383
2360
|
g.sort(function(n, i) {
|
|
2384
2361
|
return i.latency - n.latency;
|
|
2385
2362
|
}), g.length > 10 && g.splice(10).forEach(function(n) {
|
|
2386
|
-
return
|
|
2363
|
+
return x.delete(n.id);
|
|
2387
2364
|
});
|
|
2388
2365
|
}
|
|
2389
2366
|
}
|
|
2390
|
-
},
|
|
2367
|
+
}, Ce = function(r) {
|
|
2391
2368
|
var e = self.requestIdleCallback || self.setTimeout, t = -1;
|
|
2392
|
-
return r =
|
|
2393
|
-
},
|
|
2394
|
-
"PerformanceEventTiming" in self && "interactionId" in PerformanceEventTiming.prototype && (e = e || {},
|
|
2369
|
+
return r = ae(r), document.visibilityState === "hidden" ? r() : (t = e(r), G(r)), t;
|
|
2370
|
+
}, te = [200, 500], kt = function(r, e) {
|
|
2371
|
+
"PerformanceEventTiming" in self && "interactionId" in PerformanceEventTiming.prototype && (e = e || {}, $(function() {
|
|
2395
2372
|
var t;
|
|
2396
|
-
|
|
2397
|
-
var s, n =
|
|
2398
|
-
|
|
2399
|
-
l.forEach(
|
|
2400
|
-
var c =
|
|
2373
|
+
bt();
|
|
2374
|
+
var s, n = E("INP"), i = function(l) {
|
|
2375
|
+
Ce(function() {
|
|
2376
|
+
l.forEach(Dt);
|
|
2377
|
+
var c = Ot();
|
|
2401
2378
|
c && c.latency !== n.value && (n.value = c.latency, n.entries = c.entries, s());
|
|
2402
2379
|
});
|
|
2403
|
-
}, a =
|
|
2404
|
-
s =
|
|
2380
|
+
}, a = O("event", i, { durationThreshold: (t = e.durationThreshold) !== null && t !== void 0 ? t : 40 });
|
|
2381
|
+
s = S(r, n, te, e.reportAllChanges), a && (a.observe({ type: "first-input", buffered: !0 }), G(function() {
|
|
2405
2382
|
i(a.takeRecords()), s(!0);
|
|
2406
|
-
}),
|
|
2407
|
-
|
|
2383
|
+
}), N(function() {
|
|
2384
|
+
Le = Ne(), g.length = 0, x.clear(), n = E("INP"), s = S(r, n, te, e.reportAllChanges);
|
|
2408
2385
|
}));
|
|
2409
2386
|
}));
|
|
2410
|
-
},
|
|
2411
|
-
e = e || {},
|
|
2412
|
-
var t, s =
|
|
2387
|
+
}, re = [2500, 4e3], B = {}, Ut = function(r, e) {
|
|
2388
|
+
e = e || {}, $(function() {
|
|
2389
|
+
var t, s = Ae(), n = E("LCP"), i = function(c) {
|
|
2413
2390
|
e.reportAllChanges || (c = c.slice(-1)), c.forEach(function(u) {
|
|
2414
|
-
u.startTime < s.firstHiddenTime && (n.value = Math.max(u.startTime -
|
|
2391
|
+
u.startTime < s.firstHiddenTime && (n.value = Math.max(u.startTime - F(), 0), n.entries = [u], t());
|
|
2415
2392
|
});
|
|
2416
|
-
}, a =
|
|
2393
|
+
}, a = O("largest-contentful-paint", i);
|
|
2417
2394
|
if (a) {
|
|
2418
|
-
t =
|
|
2419
|
-
var l =
|
|
2395
|
+
t = S(r, n, re, e.reportAllChanges);
|
|
2396
|
+
var l = ae(function() {
|
|
2420
2397
|
B[n.id] || (i(a.takeRecords()), a.disconnect(), B[n.id] = !0, t(!0));
|
|
2421
2398
|
});
|
|
2422
2399
|
["keydown", "click"].forEach(function(c) {
|
|
2423
2400
|
addEventListener(c, function() {
|
|
2424
|
-
return
|
|
2401
|
+
return Ce(l);
|
|
2425
2402
|
}, { once: !0, capture: !0 });
|
|
2426
|
-
}),
|
|
2427
|
-
n =
|
|
2403
|
+
}), G(l), N(function(c) {
|
|
2404
|
+
n = E("LCP"), t = S(r, n, re, e.reportAllChanges), ie(function() {
|
|
2428
2405
|
n.value = performance.now() - c.timeStamp, B[n.id] = !0, t(!0);
|
|
2429
2406
|
});
|
|
2430
2407
|
});
|
|
2431
2408
|
}
|
|
2432
2409
|
});
|
|
2433
|
-
},
|
|
2434
|
-
document.prerendering ?
|
|
2410
|
+
}, se = [800, 1800], Ht = function r(e) {
|
|
2411
|
+
document.prerendering ? $(function() {
|
|
2435
2412
|
return r(e);
|
|
2436
2413
|
}) : document.readyState !== "complete" ? addEventListener("load", function() {
|
|
2437
2414
|
return r(e);
|
|
2438
2415
|
}, !0) : setTimeout(e, 0);
|
|
2439
|
-
},
|
|
2416
|
+
}, xt = function(r, e) {
|
|
2440
2417
|
e = e || {};
|
|
2441
|
-
var t =
|
|
2442
|
-
|
|
2443
|
-
var n =
|
|
2444
|
-
n && (t.value = Math.max(n.responseStart -
|
|
2445
|
-
t =
|
|
2418
|
+
var t = E("TTFB"), s = S(r, t, se, e.reportAllChanges);
|
|
2419
|
+
Ht(function() {
|
|
2420
|
+
var n = ne();
|
|
2421
|
+
n && (t.value = Math.max(n.responseStart - F(), 0), t.entries = [n], s(!0), N(function() {
|
|
2422
|
+
t = E("TTFB", 0), (s = S(r, t, se, e.reportAllChanges))(!0);
|
|
2446
2423
|
}));
|
|
2447
2424
|
});
|
|
2448
2425
|
};
|
|
2449
|
-
const
|
|
2426
|
+
const Vt = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
2450
2427
|
__proto__: null,
|
|
2451
|
-
CLSThresholds:
|
|
2452
|
-
FCPThresholds:
|
|
2453
|
-
INPThresholds:
|
|
2454
|
-
LCPThresholds:
|
|
2455
|
-
TTFBThresholds:
|
|
2456
|
-
onCLS:
|
|
2457
|
-
onFCP:
|
|
2458
|
-
onINP:
|
|
2459
|
-
onLCP:
|
|
2460
|
-
onTTFB:
|
|
2428
|
+
CLSThresholds: ee,
|
|
2429
|
+
FCPThresholds: J,
|
|
2430
|
+
INPThresholds: te,
|
|
2431
|
+
LCPThresholds: re,
|
|
2432
|
+
TTFBThresholds: se,
|
|
2433
|
+
onCLS: Ct,
|
|
2434
|
+
onFCP: we,
|
|
2435
|
+
onINP: kt,
|
|
2436
|
+
onLCP: Ut,
|
|
2437
|
+
onTTFB: xt
|
|
2461
2438
|
}, Symbol.toStringTag, { value: "Module" }));
|
|
2462
2439
|
export {
|
|
2463
|
-
|
|
2464
|
-
|
|
2465
|
-
|
|
2466
|
-
|
|
2467
|
-
|
|
2468
|
-
|
|
2440
|
+
Kt as ANALYTICS_QUERY_LIMITS,
|
|
2441
|
+
qt as ANOMALY_DETECTION,
|
|
2442
|
+
A as AppConfigValidationError,
|
|
2443
|
+
Bt as CONTENT_ANALYTICS,
|
|
2444
|
+
$t as DATA_PROTECTION,
|
|
2445
|
+
jt as DEVICE_ANALYTICS,
|
|
2469
2446
|
_ as DeviceType,
|
|
2470
|
-
|
|
2447
|
+
zt as ENGAGEMENT_THRESHOLDS,
|
|
2471
2448
|
X as EmitterEvent,
|
|
2472
|
-
|
|
2449
|
+
C as ErrorType,
|
|
2473
2450
|
d as EventType,
|
|
2474
|
-
|
|
2475
|
-
|
|
2451
|
+
Wt as INSIGHT_THRESHOLDS,
|
|
2452
|
+
Ft as InitializationTimeoutError,
|
|
2476
2453
|
v as IntegrationValidationError,
|
|
2477
2454
|
R as Mode,
|
|
2478
|
-
|
|
2479
|
-
|
|
2480
|
-
|
|
2481
|
-
|
|
2482
|
-
|
|
2483
|
-
|
|
2484
|
-
|
|
2485
|
-
|
|
2486
|
-
|
|
2487
|
-
|
|
2488
|
-
|
|
2455
|
+
Gt as PERFORMANCE_CONFIG,
|
|
2456
|
+
y as PermanentError,
|
|
2457
|
+
Yt as SEGMENTATION_ANALYTICS,
|
|
2458
|
+
Qt as SESSION_ANALYTICS,
|
|
2459
|
+
Zt as SPECIAL_PAGE_URLS,
|
|
2460
|
+
le as SamplingRateValidationError,
|
|
2461
|
+
k as ScrollDirection,
|
|
2462
|
+
ke as SessionTimeoutValidationError,
|
|
2463
|
+
W as SpecialApiUrl,
|
|
2464
|
+
Xt as TEMPORAL_ANALYSIS,
|
|
2465
|
+
b as TraceLogValidationError,
|
|
2466
|
+
Jt as tracelog
|
|
2489
2467
|
};
|