@scalebun-release/web 2.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +57 -0
- package/dist/bootstrap/FeatureRegistry.d.ts +44 -0
- package/dist/bootstrap/FeatureRegistry.d.ts.map +1 -0
- package/dist/bootstrap/FeatureRegistry.js +85 -0
- package/dist/bootstrap/FeatureRegistry.js.map +1 -0
- package/dist/bootstrap/SDKBootstrapper.d.ts +37 -0
- package/dist/bootstrap/SDKBootstrapper.d.ts.map +1 -0
- package/dist/bootstrap/SDKBootstrapper.js +346 -0
- package/dist/bootstrap/SDKBootstrapper.js.map +1 -0
- package/dist/browser.d.ts +51 -0
- package/dist/browser.d.ts.map +1 -0
- package/dist/browser.js +86 -0
- package/dist/browser.js.map +1 -0
- package/dist/config/endpoints.d.ts +12 -0
- package/dist/config/endpoints.d.ts.map +1 -0
- package/dist/config/endpoints.js +12 -0
- package/dist/config/endpoints.js.map +1 -0
- package/dist/config/schema.d.ts +120 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +117 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/core/breadcrumbs.d.ts +56 -0
- package/dist/core/breadcrumbs.d.ts.map +1 -0
- package/dist/core/breadcrumbs.js +141 -0
- package/dist/core/breadcrumbs.js.map +1 -0
- package/dist/core/capabilities.d.ts +38 -0
- package/dist/core/capabilities.d.ts.map +1 -0
- package/dist/core/capabilities.js +78 -0
- package/dist/core/capabilities.js.map +1 -0
- package/dist/core/consent.d.ts +17 -0
- package/dist/core/consent.d.ts.map +1 -0
- package/dist/core/consent.js +38 -0
- package/dist/core/consent.js.map +1 -0
- package/dist/core/csp.d.ts +31 -0
- package/dist/core/csp.d.ts.map +1 -0
- package/dist/core/csp.js +74 -0
- package/dist/core/csp.js.map +1 -0
- package/dist/core/evalContext.d.ts +7 -0
- package/dist/core/evalContext.d.ts.map +1 -0
- package/dist/core/evalContext.js +22 -0
- package/dist/core/evalContext.js.map +1 -0
- package/dist/core/ids.d.ts +6 -0
- package/dist/core/ids.d.ts.map +1 -0
- package/dist/core/ids.js +35 -0
- package/dist/core/ids.js.map +1 -0
- package/dist/core/index.d.ts +16 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +16 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/lifecycle.d.ts +4 -0
- package/dist/core/lifecycle.d.ts.map +1 -0
- package/dist/core/lifecycle.js +24 -0
- package/dist/core/lifecycle.js.map +1 -0
- package/dist/core/logger.d.ts +12 -0
- package/dist/core/logger.d.ts.map +1 -0
- package/dist/core/logger.js +14 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/core/observe.d.ts +3 -0
- package/dist/core/observe.d.ts.map +1 -0
- package/dist/core/observe.js +22 -0
- package/dist/core/observe.js.map +1 -0
- package/dist/core/pageContext.d.ts +13 -0
- package/dist/core/pageContext.d.ts.map +1 -0
- package/dist/core/pageContext.js +90 -0
- package/dist/core/pageContext.js.map +1 -0
- package/dist/core/prune.d.ts +31 -0
- package/dist/core/prune.d.ts.map +1 -0
- package/dist/core/prune.js +112 -0
- package/dist/core/prune.js.map +1 -0
- package/dist/core/redact.d.ts +15 -0
- package/dist/core/redact.d.ts.map +1 -0
- package/dist/core/redact.js +72 -0
- package/dist/core/redact.js.map +1 -0
- package/dist/core/replayCoord.d.ts +22 -0
- package/dist/core/replayCoord.d.ts.map +1 -0
- package/dist/core/replayCoord.js +20 -0
- package/dist/core/replayCoord.js.map +1 -0
- package/dist/core/retry.d.ts +25 -0
- package/dist/core/retry.d.ts.map +1 -0
- package/dist/core/retry.js +44 -0
- package/dist/core/retry.js.map +1 -0
- package/dist/core/runtime.d.ts +28 -0
- package/dist/core/runtime.d.ts.map +1 -0
- package/dist/core/runtime.js +67 -0
- package/dist/core/runtime.js.map +1 -0
- package/dist/core/scrollDepth.d.ts +48 -0
- package/dist/core/scrollDepth.d.ts.map +1 -0
- package/dist/core/scrollDepth.js +63 -0
- package/dist/core/scrollDepth.js.map +1 -0
- package/dist/core/uiStateReader.d.ts +35 -0
- package/dist/core/uiStateReader.d.ts.map +1 -0
- package/dist/core/uiStateReader.js +47 -0
- package/dist/core/uiStateReader.js.map +1 -0
- package/dist/core/version.generated.d.ts +9 -0
- package/dist/core/version.generated.d.ts.map +1 -0
- package/dist/core/version.generated.js +9 -0
- package/dist/core/version.generated.js.map +1 -0
- package/dist/debug/index.d.ts +6 -0
- package/dist/debug/index.d.ts.map +1 -0
- package/dist/debug/index.js +2 -0
- package/dist/debug/index.js.map +1 -0
- package/dist/features/analytics/AnalyticsFeature.d.ts +123 -0
- package/dist/features/analytics/AnalyticsFeature.d.ts.map +1 -0
- package/dist/features/analytics/AnalyticsFeature.js +785 -0
- package/dist/features/analytics/AnalyticsFeature.js.map +1 -0
- package/dist/features/analytics/autocapture.d.ts +13 -0
- package/dist/features/analytics/autocapture.d.ts.map +1 -0
- package/dist/features/analytics/autocapture.js +436 -0
- package/dist/features/analytics/autocapture.js.map +1 -0
- package/dist/features/analytics/governance.d.ts +15 -0
- package/dist/features/analytics/governance.d.ts.map +1 -0
- package/dist/features/analytics/governance.js +30 -0
- package/dist/features/analytics/governance.js.map +1 -0
- package/dist/features/analytics/revenue.d.ts +77 -0
- package/dist/features/analytics/revenue.d.ts.map +1 -0
- package/dist/features/analytics/revenue.js +56 -0
- package/dist/features/analytics/revenue.js.map +1 -0
- package/dist/features/analytics/sampler.d.ts +2 -0
- package/dist/features/analytics/sampler.d.ts.map +1 -0
- package/dist/features/analytics/sampler.js +24 -0
- package/dist/features/analytics/sampler.js.map +1 -0
- package/dist/features/analytics/subscription.d.ts +35 -0
- package/dist/features/analytics/subscription.d.ts.map +1 -0
- package/dist/features/analytics/subscription.js +95 -0
- package/dist/features/analytics/subscription.js.map +1 -0
- package/dist/features/attention/index.d.ts +29 -0
- package/dist/features/attention/index.d.ts.map +1 -0
- package/dist/features/attention/index.js +128 -0
- package/dist/features/attention/index.js.map +1 -0
- package/dist/features/bugreport/BugReportFeature.d.ts +37 -0
- package/dist/features/bugreport/BugReportFeature.d.ts.map +1 -0
- package/dist/features/bugreport/BugReportFeature.js +56 -0
- package/dist/features/bugreport/BugReportFeature.js.map +1 -0
- package/dist/features/bugreport/collect.d.ts +33 -0
- package/dist/features/bugreport/collect.d.ts.map +1 -0
- package/dist/features/bugreport/collect.js +30 -0
- package/dist/features/bugreport/collect.js.map +1 -0
- package/dist/features/bugreport/widget.d.ts +40 -0
- package/dist/features/bugreport/widget.d.ts.map +1 -0
- package/dist/features/bugreport/widget.js +145 -0
- package/dist/features/bugreport/widget.js.map +1 -0
- package/dist/features/coach/CoachmarkFeature.d.ts +78 -0
- package/dist/features/coach/CoachmarkFeature.d.ts.map +1 -0
- package/dist/features/coach/CoachmarkFeature.js +161 -0
- package/dist/features/coach/CoachmarkFeature.js.map +1 -0
- package/dist/features/coach/anchor.d.ts +32 -0
- package/dist/features/coach/anchor.d.ts.map +1 -0
- package/dist/features/coach/anchor.js +128 -0
- package/dist/features/coach/anchor.js.map +1 -0
- package/dist/features/coach/observers.d.ts +17 -0
- package/dist/features/coach/observers.d.ts.map +1 -0
- package/dist/features/coach/observers.js +49 -0
- package/dist/features/coach/observers.js.map +1 -0
- package/dist/features/coach/overlay.d.ts +15 -0
- package/dist/features/coach/overlay.d.ts.map +1 -0
- package/dist/features/coach/overlay.js +205 -0
- package/dist/features/coach/overlay.js.map +1 -0
- package/dist/features/coach/position.d.ts +9 -0
- package/dist/features/coach/position.d.ts.map +1 -0
- package/dist/features/coach/position.js +83 -0
- package/dist/features/coach/position.js.map +1 -0
- package/dist/features/coach/predicate.d.ts +10 -0
- package/dist/features/coach/predicate.d.ts.map +1 -0
- package/dist/features/coach/predicate.js +36 -0
- package/dist/features/coach/predicate.js.map +1 -0
- package/dist/features/coach/tour.d.ts +55 -0
- package/dist/features/coach/tour.d.ts.map +1 -0
- package/dist/features/coach/tour.js +181 -0
- package/dist/features/coach/tour.js.map +1 -0
- package/dist/features/coach/types.d.ts +161 -0
- package/dist/features/coach/types.d.ts.map +1 -0
- package/dist/features/coach/types.js +2 -0
- package/dist/features/coach/types.js.map +1 -0
- package/dist/features/coach/wait.d.ts +34 -0
- package/dist/features/coach/wait.d.ts.map +1 -0
- package/dist/features/coach/wait.js +107 -0
- package/dist/features/coach/wait.js.map +1 -0
- package/dist/features/config/ConfigFeature.d.ts +117 -0
- package/dist/features/config/ConfigFeature.d.ts.map +1 -0
- package/dist/features/config/ConfigFeature.js +437 -0
- package/dist/features/config/ConfigFeature.js.map +1 -0
- package/dist/features/config/bucketing.d.ts +20 -0
- package/dist/features/config/bucketing.d.ts.map +1 -0
- package/dist/features/config/bucketing.js +37 -0
- package/dist/features/config/bucketing.js.map +1 -0
- package/dist/features/config/configStore.d.ts +11 -0
- package/dist/features/config/configStore.d.ts.map +1 -0
- package/dist/features/config/configStore.js +66 -0
- package/dist/features/config/configStore.js.map +1 -0
- package/dist/features/config/targeting.d.ts +11 -0
- package/dist/features/config/targeting.d.ts.map +1 -0
- package/dist/features/config/targeting.js +57 -0
- package/dist/features/config/targeting.js.map +1 -0
- package/dist/features/config/types.d.ts +100 -0
- package/dist/features/config/types.d.ts.map +1 -0
- package/dist/features/config/types.js +9 -0
- package/dist/features/config/types.js.map +1 -0
- package/dist/features/console/ConsoleFeature.d.ts +31 -0
- package/dist/features/console/ConsoleFeature.d.ts.map +1 -0
- package/dist/features/console/ConsoleFeature.js +98 -0
- package/dist/features/console/ConsoleFeature.js.map +1 -0
- package/dist/features/console/normalize.d.ts +18 -0
- package/dist/features/console/normalize.d.ts.map +1 -0
- package/dist/features/console/normalize.js +64 -0
- package/dist/features/console/normalize.js.map +1 -0
- package/dist/features/console/serialize.d.ts +24 -0
- package/dist/features/console/serialize.d.ts.map +1 -0
- package/dist/features/console/serialize.js +99 -0
- package/dist/features/console/serialize.js.map +1 -0
- package/dist/features/console/throttle.d.ts +27 -0
- package/dist/features/console/throttle.d.ts.map +1 -0
- package/dist/features/console/throttle.js +37 -0
- package/dist/features/console/throttle.js.map +1 -0
- package/dist/features/crash/CrashFeature.d.ts +46 -0
- package/dist/features/crash/CrashFeature.d.ts.map +1 -0
- package/dist/features/crash/CrashFeature.js +173 -0
- package/dist/features/crash/CrashFeature.js.map +1 -0
- package/dist/features/crash/liveness.d.ts +30 -0
- package/dist/features/crash/liveness.d.ts.map +1 -0
- package/dist/features/crash/liveness.js +131 -0
- package/dist/features/crash/liveness.js.map +1 -0
- package/dist/features/engage/EngageFeature.d.ts +67 -0
- package/dist/features/engage/EngageFeature.d.ts.map +1 -0
- package/dist/features/engage/EngageFeature.js +243 -0
- package/dist/features/engage/EngageFeature.js.map +1 -0
- package/dist/features/engage/attachments.d.ts +24 -0
- package/dist/features/engage/attachments.d.ts.map +1 -0
- package/dist/features/engage/attachments.js +209 -0
- package/dist/features/engage/attachments.js.map +1 -0
- package/dist/features/engage/gameLogic.d.ts +60 -0
- package/dist/features/engage/gameLogic.d.ts.map +1 -0
- package/dist/features/engage/gameLogic.js +213 -0
- package/dist/features/engage/gameLogic.js.map +1 -0
- package/dist/features/engage/gameResolver.d.ts +35 -0
- package/dist/features/engage/gameResolver.d.ts.map +1 -0
- package/dist/features/engage/gameResolver.js +81 -0
- package/dist/features/engage/gameResolver.js.map +1 -0
- package/dist/features/engage/gameTypes.d.ts +76 -0
- package/dist/features/engage/gameTypes.d.ts.map +1 -0
- package/dist/features/engage/gameTypes.js +17 -0
- package/dist/features/engage/gameTypes.js.map +1 -0
- package/dist/features/engage/inappSlots.d.ts +39 -0
- package/dist/features/engage/inappSlots.d.ts.map +1 -0
- package/dist/features/engage/inappSlots.js +50 -0
- package/dist/features/engage/inappSlots.js.map +1 -0
- package/dist/features/engage/normalize.d.ts +11 -0
- package/dist/features/engage/normalize.d.ts.map +1 -0
- package/dist/features/engage/normalize.js +210 -0
- package/dist/features/engage/normalize.js.map +1 -0
- package/dist/features/engage/richInApp.d.ts +64 -0
- package/dist/features/engage/richInApp.d.ts.map +1 -0
- package/dist/features/engage/richInApp.js +1082 -0
- package/dist/features/engage/richInApp.js.map +1 -0
- package/dist/features/engage/runtime.d.ts +89 -0
- package/dist/features/engage/runtime.d.ts.map +1 -0
- package/dist/features/engage/runtime.js +364 -0
- package/dist/features/engage/runtime.js.map +1 -0
- package/dist/features/engage/shakeDetector.d.ts +6 -0
- package/dist/features/engage/shakeDetector.d.ts.map +1 -0
- package/dist/features/engage/shakeDetector.js +105 -0
- package/dist/features/engage/shakeDetector.js.map +1 -0
- package/dist/features/engage/theme.d.ts +129 -0
- package/dist/features/engage/theme.d.ts.map +1 -0
- package/dist/features/engage/theme.js +270 -0
- package/dist/features/engage/theme.js.map +1 -0
- package/dist/features/engage/throttle.d.ts +41 -0
- package/dist/features/engage/throttle.d.ts.map +1 -0
- package/dist/features/engage/throttle.js +220 -0
- package/dist/features/engage/throttle.js.map +1 -0
- package/dist/features/engage/transport.d.ts +62 -0
- package/dist/features/engage/transport.d.ts.map +1 -0
- package/dist/features/engage/transport.js +185 -0
- package/dist/features/engage/transport.js.map +1 -0
- package/dist/features/engage/triggerEngine.d.ts +39 -0
- package/dist/features/engage/triggerEngine.d.ts.map +1 -0
- package/dist/features/engage/triggerEngine.js +105 -0
- package/dist/features/engage/triggerEngine.js.map +1 -0
- package/dist/features/engage/types.d.ts +271 -0
- package/dist/features/engage/types.d.ts.map +1 -0
- package/dist/features/engage/types.js +3 -0
- package/dist/features/engage/types.js.map +1 -0
- package/dist/features/engage/widget/InAppWidget.d.ts +10 -0
- package/dist/features/engage/widget/InAppWidget.d.ts.map +1 -0
- package/dist/features/engage/widget/InAppWidget.js +137 -0
- package/dist/features/engage/widget/InAppWidget.js.map +1 -0
- package/dist/features/engage/widget/SurveyWidget.d.ts +11 -0
- package/dist/features/engage/widget/SurveyWidget.d.ts.map +1 -0
- package/dist/features/engage/widget/SurveyWidget.js +547 -0
- package/dist/features/engage/widget/SurveyWidget.js.map +1 -0
- package/dist/features/errors/ErrorsFeature.d.ts +62 -0
- package/dist/features/errors/ErrorsFeature.d.ts.map +1 -0
- package/dist/features/errors/ErrorsFeature.js +209 -0
- package/dist/features/errors/ErrorsFeature.js.map +1 -0
- package/dist/features/errors/causes.d.ts +15 -0
- package/dist/features/errors/causes.d.ts.map +1 -0
- package/dist/features/errors/causes.js +29 -0
- package/dist/features/errors/causes.js.map +1 -0
- package/dist/features/errors/dedup.d.ts +28 -0
- package/dist/features/errors/dedup.d.ts.map +1 -0
- package/dist/features/errors/dedup.js +42 -0
- package/dist/features/errors/dedup.js.map +1 -0
- package/dist/features/errors/group/fingerprint.d.ts +13 -0
- package/dist/features/errors/group/fingerprint.d.ts.map +1 -0
- package/dist/features/errors/group/fingerprint.js +45 -0
- package/dist/features/errors/group/fingerprint.js.map +1 -0
- package/dist/features/errors/lazy.d.ts +8 -0
- package/dist/features/errors/lazy.d.ts.map +1 -0
- package/dist/features/errors/lazy.js +8 -0
- package/dist/features/errors/lazy.js.map +1 -0
- package/dist/features/errors/normalize.d.ts +26 -0
- package/dist/features/errors/normalize.d.ts.map +1 -0
- package/dist/features/errors/normalize.js +58 -0
- package/dist/features/errors/normalize.js.map +1 -0
- package/dist/features/errors/parse/stacktrace.d.ts +13 -0
- package/dist/features/errors/parse/stacktrace.d.ts.map +1 -0
- package/dist/features/errors/parse/stacktrace.js +85 -0
- package/dist/features/errors/parse/stacktrace.js.map +1 -0
- package/dist/features/errors/redact.d.ts +7 -0
- package/dist/features/errors/redact.d.ts.map +1 -0
- package/dist/features/errors/redact.js +39 -0
- package/dist/features/errors/redact.js.map +1 -0
- package/dist/features/errors/sampling.d.ts +2 -0
- package/dist/features/errors/sampling.d.ts.map +1 -0
- package/dist/features/errors/sampling.js +24 -0
- package/dist/features/errors/sampling.js.map +1 -0
- package/dist/features/errors/scope.d.ts +26 -0
- package/dist/features/errors/scope.d.ts.map +1 -0
- package/dist/features/errors/scope.js +30 -0
- package/dist/features/errors/scope.js.map +1 -0
- package/dist/features/exit-intent/ExitIntentFeature.d.ts +16 -0
- package/dist/features/exit-intent/ExitIntentFeature.d.ts.map +1 -0
- package/dist/features/exit-intent/ExitIntentFeature.js +25 -0
- package/dist/features/exit-intent/ExitIntentFeature.js.map +1 -0
- package/dist/features/exit-intent/engine.d.ts +127 -0
- package/dist/features/exit-intent/engine.d.ts.map +1 -0
- package/dist/features/exit-intent/engine.js +227 -0
- package/dist/features/exit-intent/engine.js.map +1 -0
- package/dist/features/forms/index.d.ts +83 -0
- package/dist/features/forms/index.d.ts.map +1 -0
- package/dist/features/forms/index.js +405 -0
- package/dist/features/forms/index.js.map +1 -0
- package/dist/features/inapp/InApp2Feature.d.ts +24 -0
- package/dist/features/inapp/InApp2Feature.d.ts.map +1 -0
- package/dist/features/inapp/InApp2Feature.js +44 -0
- package/dist/features/inapp/InApp2Feature.js.map +1 -0
- package/dist/features/inapp/a11y/focus.d.ts +24 -0
- package/dist/features/inapp/a11y/focus.d.ts.map +1 -0
- package/dist/features/inapp/a11y/focus.js +112 -0
- package/dist/features/inapp/a11y/focus.js.map +1 -0
- package/dist/features/inapp/anchor/controller.d.ts +64 -0
- package/dist/features/inapp/anchor/controller.d.ts.map +1 -0
- package/dist/features/inapp/anchor/controller.js +155 -0
- package/dist/features/inapp/anchor/controller.js.map +1 -0
- package/dist/features/inapp/api.d.ts +28 -0
- package/dist/features/inapp/api.d.ts.map +1 -0
- package/dist/features/inapp/api.js +41 -0
- package/dist/features/inapp/api.js.map +1 -0
- package/dist/features/inapp/blocks/blocks.d.ts +65 -0
- package/dist/features/inapp/blocks/blocks.d.ts.map +1 -0
- package/dist/features/inapp/blocks/blocks.js +196 -0
- package/dist/features/inapp/blocks/blocks.js.map +1 -0
- package/dist/features/inapp/blocks/feedback.d.ts +13 -0
- package/dist/features/inapp/blocks/feedback.d.ts.map +1 -0
- package/dist/features/inapp/blocks/feedback.js +154 -0
- package/dist/features/inapp/blocks/feedback.js.map +1 -0
- package/dist/features/inapp/blocks/heavy/carousel.d.ts +8 -0
- package/dist/features/inapp/blocks/heavy/carousel.d.ts.map +1 -0
- package/dist/features/inapp/blocks/heavy/carousel.js +67 -0
- package/dist/features/inapp/blocks/heavy/carousel.js.map +1 -0
- package/dist/features/inapp/blocks/heavy/chart.d.ts +9 -0
- package/dist/features/inapp/blocks/heavy/chart.d.ts.map +1 -0
- package/dist/features/inapp/blocks/heavy/chart.js +83 -0
- package/dist/features/inapp/blocks/heavy/chart.js.map +1 -0
- package/dist/features/inapp/blocks/heavy/code.d.ts +8 -0
- package/dist/features/inapp/blocks/heavy/code.d.ts.map +1 -0
- package/dist/features/inapp/blocks/heavy/code.js +47 -0
- package/dist/features/inapp/blocks/heavy/code.js.map +1 -0
- package/dist/features/inapp/blocks/heavy/confetti.d.ts +9 -0
- package/dist/features/inapp/blocks/heavy/confetti.d.ts.map +1 -0
- package/dist/features/inapp/blocks/heavy/confetti.js +76 -0
- package/dist/features/inapp/blocks/heavy/confetti.js.map +1 -0
- package/dist/features/inapp/blocks/heavy/countdown.d.ts +9 -0
- package/dist/features/inapp/blocks/heavy/countdown.d.ts.map +1 -0
- package/dist/features/inapp/blocks/heavy/countdown.js +59 -0
- package/dist/features/inapp/blocks/heavy/countdown.js.map +1 -0
- package/dist/features/inapp/blocks/heavy/index.d.ts +11 -0
- package/dist/features/inapp/blocks/heavy/index.d.ts.map +1 -0
- package/dist/features/inapp/blocks/heavy/index.js +45 -0
- package/dist/features/inapp/blocks/heavy/index.js.map +1 -0
- package/dist/features/inapp/blocks/heavy/markdown.d.ts +9 -0
- package/dist/features/inapp/blocks/heavy/markdown.d.ts.map +1 -0
- package/dist/features/inapp/blocks/heavy/markdown.js +76 -0
- package/dist/features/inapp/blocks/heavy/markdown.js.map +1 -0
- package/dist/features/inapp/blocks/heavy/productgrid.d.ts +8 -0
- package/dist/features/inapp/blocks/heavy/productgrid.d.ts.map +1 -0
- package/dist/features/inapp/blocks/heavy/productgrid.js +46 -0
- package/dist/features/inapp/blocks/heavy/productgrid.js.map +1 -0
- package/dist/features/inapp/blocks/heavy/qr.d.ts +10 -0
- package/dist/features/inapp/blocks/heavy/qr.d.ts.map +1 -0
- package/dist/features/inapp/blocks/heavy/qr.js +69 -0
- package/dist/features/inapp/blocks/heavy/qr.js.map +1 -0
- package/dist/features/inapp/blocks/heavy/scratch.d.ts +8 -0
- package/dist/features/inapp/blocks/heavy/scratch.d.ts.map +1 -0
- package/dist/features/inapp/blocks/heavy/scratch.js +141 -0
- package/dist/features/inapp/blocks/heavy/scratch.js.map +1 -0
- package/dist/features/inapp/blocks/heavy/slot.d.ts +8 -0
- package/dist/features/inapp/blocks/heavy/slot.d.ts.map +1 -0
- package/dist/features/inapp/blocks/heavy/slot.js +96 -0
- package/dist/features/inapp/blocks/heavy/slot.js.map +1 -0
- package/dist/features/inapp/blocks/heavy/spinwheel.d.ts +9 -0
- package/dist/features/inapp/blocks/heavy/spinwheel.d.ts.map +1 -0
- package/dist/features/inapp/blocks/heavy/spinwheel.js +127 -0
- package/dist/features/inapp/blocks/heavy/spinwheel.js.map +1 -0
- package/dist/features/inapp/blocks/heavy/steps.d.ts +27 -0
- package/dist/features/inapp/blocks/heavy/steps.d.ts.map +1 -0
- package/dist/features/inapp/blocks/heavy/steps.js +135 -0
- package/dist/features/inapp/blocks/heavy/steps.js.map +1 -0
- package/dist/features/inapp/blocks/heavy/streak.d.ts +18 -0
- package/dist/features/inapp/blocks/heavy/streak.d.ts.map +1 -0
- package/dist/features/inapp/blocks/heavy/streak.js +52 -0
- package/dist/features/inapp/blocks/heavy/streak.js.map +1 -0
- package/dist/features/inapp/blocks/heavy/table.d.ts +7 -0
- package/dist/features/inapp/blocks/heavy/table.d.ts.map +1 -0
- package/dist/features/inapp/blocks/heavy/table.js +30 -0
- package/dist/features/inapp/blocks/heavy/table.js.map +1 -0
- package/dist/features/inapp/blocks/heavy/unavailable.d.ts +28 -0
- package/dist/features/inapp/blocks/heavy/unavailable.d.ts.map +1 -0
- package/dist/features/inapp/blocks/heavy/unavailable.js +33 -0
- package/dist/features/inapp/blocks/heavy/unavailable.js.map +1 -0
- package/dist/features/inapp/blocks/heavy/video.d.ts +7 -0
- package/dist/features/inapp/blocks/heavy/video.d.ts.map +1 -0
- package/dist/features/inapp/blocks/heavy/video.js +38 -0
- package/dist/features/inapp/blocks/heavy/video.js.map +1 -0
- package/dist/features/inapp/blocks/styles.d.ts +7 -0
- package/dist/features/inapp/blocks/styles.d.ts.map +1 -0
- package/dist/features/inapp/blocks/styles.js +225 -0
- package/dist/features/inapp/blocks/styles.js.map +1 -0
- package/dist/features/inapp/center/bridge.d.ts +12 -0
- package/dist/features/inapp/center/bridge.d.ts.map +1 -0
- package/dist/features/inapp/center/bridge.js +59 -0
- package/dist/features/inapp/center/bridge.js.map +1 -0
- package/dist/features/inapp/center/panel.d.ts +20 -0
- package/dist/features/inapp/center/panel.d.ts.map +1 -0
- package/dist/features/inapp/center/panel.js +228 -0
- package/dist/features/inapp/center/panel.js.map +1 -0
- package/dist/features/inapp/center/store.d.ts +50 -0
- package/dist/features/inapp/center/store.d.ts.map +1 -0
- package/dist/features/inapp/center/store.js +188 -0
- package/dist/features/inapp/center/store.js.map +1 -0
- package/dist/features/inapp/center/sync.d.ts +32 -0
- package/dist/features/inapp/center/sync.d.ts.map +1 -0
- package/dist/features/inapp/center/sync.js +60 -0
- package/dist/features/inapp/center/sync.js.map +1 -0
- package/dist/features/inapp/center/types.d.ts +46 -0
- package/dist/features/inapp/center/types.d.ts.map +1 -0
- package/dist/features/inapp/center/types.js +5 -0
- package/dist/features/inapp/center/types.js.map +1 -0
- package/dist/features/inapp/core/analytics.d.ts +35 -0
- package/dist/features/inapp/core/analytics.d.ts.map +1 -0
- package/dist/features/inapp/core/analytics.js +70 -0
- package/dist/features/inapp/core/analytics.js.map +1 -0
- package/dist/features/inapp/core/compat.d.ts +28 -0
- package/dist/features/inapp/core/compat.d.ts.map +1 -0
- package/dist/features/inapp/core/compat.js +104 -0
- package/dist/features/inapp/core/compat.js.map +1 -0
- package/dist/features/inapp/core/debugOverlay.d.ts +5 -0
- package/dist/features/inapp/core/debugOverlay.d.ts.map +1 -0
- package/dist/features/inapp/core/debugOverlay.js +79 -0
- package/dist/features/inapp/core/debugOverlay.js.map +1 -0
- package/dist/features/inapp/core/engine.d.ts +72 -0
- package/dist/features/inapp/core/engine.d.ts.map +1 -0
- package/dist/features/inapp/core/engine.js +248 -0
- package/dist/features/inapp/core/engine.js.map +1 -0
- package/dist/features/inapp/core/environment.d.ts +21 -0
- package/dist/features/inapp/core/environment.d.ts.map +1 -0
- package/dist/features/inapp/core/environment.js +57 -0
- package/dist/features/inapp/core/environment.js.map +1 -0
- package/dist/features/inapp/core/host.d.ts +53 -0
- package/dist/features/inapp/core/host.d.ts.map +1 -0
- package/dist/features/inapp/core/host.js +243 -0
- package/dist/features/inapp/core/host.js.map +1 -0
- package/dist/features/inapp/core/keyboard.d.ts +27 -0
- package/dist/features/inapp/core/keyboard.d.ts.map +1 -0
- package/dist/features/inapp/core/keyboard.js +69 -0
- package/dist/features/inapp/core/keyboard.js.map +1 -0
- package/dist/features/inapp/core/metrics.d.ts +73 -0
- package/dist/features/inapp/core/metrics.d.ts.map +1 -0
- package/dist/features/inapp/core/metrics.js +125 -0
- package/dist/features/inapp/core/metrics.js.map +1 -0
- package/dist/features/inapp/core/migration.d.ts +32 -0
- package/dist/features/inapp/core/migration.d.ts.map +1 -0
- package/dist/features/inapp/core/migration.js +28 -0
- package/dist/features/inapp/core/migration.js.map +1 -0
- package/dist/features/inapp/core/orchestrator.d.ts +77 -0
- package/dist/features/inapp/core/orchestrator.d.ts.map +1 -0
- package/dist/features/inapp/core/orchestrator.js +144 -0
- package/dist/features/inapp/core/orchestrator.js.map +1 -0
- package/dist/features/inapp/core/respect.d.ts +51 -0
- package/dist/features/inapp/core/respect.d.ts.map +1 -0
- package/dist/features/inapp/core/respect.js +78 -0
- package/dist/features/inapp/core/respect.js.map +1 -0
- package/dist/features/inapp/core/slots.d.ts +19 -0
- package/dist/features/inapp/core/slots.d.ts.map +1 -0
- package/dist/features/inapp/core/slots.js +53 -0
- package/dist/features/inapp/core/slots.js.map +1 -0
- package/dist/features/inapp/core/targeting.d.ts +85 -0
- package/dist/features/inapp/core/targeting.d.ts.map +1 -0
- package/dist/features/inapp/core/targeting.js +255 -0
- package/dist/features/inapp/core/targeting.js.map +1 -0
- package/dist/features/inapp/core/transport.d.ts +66 -0
- package/dist/features/inapp/core/transport.d.ts.map +1 -0
- package/dist/features/inapp/core/transport.js +154 -0
- package/dist/features/inapp/core/transport.js.map +1 -0
- package/dist/features/inapp/core/triggers.d.ts +94 -0
- package/dist/features/inapp/core/triggers.d.ts.map +1 -0
- package/dist/features/inapp/core/triggers.js +368 -0
- package/dist/features/inapp/core/triggers.js.map +1 -0
- package/dist/features/inapp/inappContract.web.d.ts +47 -0
- package/dist/features/inapp/inappContract.web.d.ts.map +1 -0
- package/dist/features/inapp/inappContract.web.js +230 -0
- package/dist/features/inapp/inappContract.web.js.map +1 -0
- package/dist/features/inapp/index.d.ts +23 -0
- package/dist/features/inapp/index.d.ts.map +1 -0
- package/dist/features/inapp/index.js +23 -0
- package/dist/features/inapp/index.js.map +1 -0
- package/dist/features/inapp/registry.canonical.hash.d.ts +7 -0
- package/dist/features/inapp/registry.canonical.hash.d.ts.map +1 -0
- package/dist/features/inapp/registry.canonical.hash.js +7 -0
- package/dist/features/inapp/registry.canonical.hash.js.map +1 -0
- package/dist/features/inapp/registry.web.canonical.d.ts +21 -0
- package/dist/features/inapp/registry.web.canonical.d.ts.map +1 -0
- package/dist/features/inapp/registry.web.canonical.js +136 -0
- package/dist/features/inapp/registry.web.canonical.js.map +1 -0
- package/dist/features/inapp/registry.web.catalog.d.ts +12 -0
- package/dist/features/inapp/registry.web.catalog.d.ts.map +1 -0
- package/dist/features/inapp/registry.web.catalog.js +208 -0
- package/dist/features/inapp/registry.web.catalog.js.map +1 -0
- package/dist/features/inapp/surfaces/banner.d.ts +7 -0
- package/dist/features/inapp/surfaces/banner.d.ts.map +1 -0
- package/dist/features/inapp/surfaces/banner.js +30 -0
- package/dist/features/inapp/surfaces/banner.js.map +1 -0
- package/dist/features/inapp/surfaces/checklist.d.ts +13 -0
- package/dist/features/inapp/surfaces/checklist.d.ts.map +1 -0
- package/dist/features/inapp/surfaces/checklist.js +127 -0
- package/dist/features/inapp/surfaces/checklist.js.map +1 -0
- package/dist/features/inapp/surfaces/coachmark.d.ts +10 -0
- package/dist/features/inapp/surfaces/coachmark.d.ts.map +1 -0
- package/dist/features/inapp/surfaces/coachmark.js +95 -0
- package/dist/features/inapp/surfaces/coachmark.js.map +1 -0
- package/dist/features/inapp/surfaces/hotspot.d.ts +8 -0
- package/dist/features/inapp/surfaces/hotspot.d.ts.map +1 -0
- package/dist/features/inapp/surfaces/hotspot.js +91 -0
- package/dist/features/inapp/surfaces/hotspot.js.map +1 -0
- package/dist/features/inapp/surfaces/inline.d.ts +13 -0
- package/dist/features/inapp/surfaces/inline.d.ts.map +1 -0
- package/dist/features/inapp/surfaces/inline.js +78 -0
- package/dist/features/inapp/surfaces/inline.js.map +1 -0
- package/dist/features/inapp/surfaces/launcher.d.ts +9 -0
- package/dist/features/inapp/surfaces/launcher.d.ts.map +1 -0
- package/dist/features/inapp/surfaces/launcher.js +54 -0
- package/dist/features/inapp/surfaces/launcher.js.map +1 -0
- package/dist/features/inapp/surfaces/modal.d.ts +8 -0
- package/dist/features/inapp/surfaces/modal.d.ts.map +1 -0
- package/dist/features/inapp/surfaces/modal.js +70 -0
- package/dist/features/inapp/surfaces/modal.js.map +1 -0
- package/dist/features/inapp/surfaces/mount.d.ts +19 -0
- package/dist/features/inapp/surfaces/mount.d.ts.map +1 -0
- package/dist/features/inapp/surfaces/mount.js +29 -0
- package/dist/features/inapp/surfaces/mount.js.map +1 -0
- package/dist/features/inapp/surfaces/palette.d.ts +9 -0
- package/dist/features/inapp/surfaces/palette.d.ts.map +1 -0
- package/dist/features/inapp/surfaces/palette.js +127 -0
- package/dist/features/inapp/surfaces/palette.js.map +1 -0
- package/dist/features/inapp/surfaces/panel.d.ts +14 -0
- package/dist/features/inapp/surfaces/panel.d.ts.map +1 -0
- package/dist/features/inapp/surfaces/panel.js +91 -0
- package/dist/features/inapp/surfaces/panel.js.map +1 -0
- package/dist/features/inapp/surfaces/popover.d.ts +10 -0
- package/dist/features/inapp/surfaces/popover.d.ts.map +1 -0
- package/dist/features/inapp/surfaces/popover.js +69 -0
- package/dist/features/inapp/surfaces/popover.js.map +1 -0
- package/dist/features/inapp/surfaces/render.d.ts +34 -0
- package/dist/features/inapp/surfaces/render.d.ts.map +1 -0
- package/dist/features/inapp/surfaces/render.js +56 -0
- package/dist/features/inapp/surfaces/render.js.map +1 -0
- package/dist/features/inapp/surfaces/slideover.d.ts +9 -0
- package/dist/features/inapp/surfaces/slideover.d.ts.map +1 -0
- package/dist/features/inapp/surfaces/slideover.js +144 -0
- package/dist/features/inapp/surfaces/slideover.js.map +1 -0
- package/dist/features/inapp/surfaces/styles.d.ts +7 -0
- package/dist/features/inapp/surfaces/styles.d.ts.map +1 -0
- package/dist/features/inapp/surfaces/styles.js +235 -0
- package/dist/features/inapp/surfaces/styles.js.map +1 -0
- package/dist/features/inapp/surfaces/surface.d.ts +69 -0
- package/dist/features/inapp/surfaces/surface.d.ts.map +1 -0
- package/dist/features/inapp/surfaces/surface.js +80 -0
- package/dist/features/inapp/surfaces/surface.js.map +1 -0
- package/dist/features/inapp/surfaces/takeover.d.ts +9 -0
- package/dist/features/inapp/surfaces/takeover.d.ts.map +1 -0
- package/dist/features/inapp/surfaces/takeover.js +60 -0
- package/dist/features/inapp/surfaces/takeover.js.map +1 -0
- package/dist/features/inapp/surfaces/toast.d.ts +7 -0
- package/dist/features/inapp/surfaces/toast.d.ts.map +1 -0
- package/dist/features/inapp/surfaces/toast.js +48 -0
- package/dist/features/inapp/surfaces/toast.js.map +1 -0
- package/dist/features/inapp/surfaces/toolbar.d.ts +8 -0
- package/dist/features/inapp/surfaces/toolbar.d.ts.map +1 -0
- package/dist/features/inapp/surfaces/toolbar.js +65 -0
- package/dist/features/inapp/surfaces/toolbar.js.map +1 -0
- package/dist/features/inapp/surfaces/tour.d.ts +14 -0
- package/dist/features/inapp/surfaces/tour.d.ts.map +1 -0
- package/dist/features/inapp/surfaces/tour.js +202 -0
- package/dist/features/inapp/surfaces/tour.js.map +1 -0
- package/dist/features/inapp/types.d.ts +165 -0
- package/dist/features/inapp/types.d.ts.map +1 -0
- package/dist/features/inapp/types.js +12 -0
- package/dist/features/inapp/types.js.map +1 -0
- package/dist/features/inbox/InboxFeature.d.ts +57 -0
- package/dist/features/inbox/InboxFeature.d.ts.map +1 -0
- package/dist/features/inbox/InboxFeature.js +225 -0
- package/dist/features/inbox/InboxFeature.js.map +1 -0
- package/dist/features/inbox/runtime.d.ts +67 -0
- package/dist/features/inbox/runtime.d.ts.map +1 -0
- package/dist/features/inbox/runtime.js +376 -0
- package/dist/features/inbox/runtime.js.map +1 -0
- package/dist/features/inbox/store.d.ts +37 -0
- package/dist/features/inbox/store.d.ts.map +1 -0
- package/dist/features/inbox/store.js +149 -0
- package/dist/features/inbox/store.js.map +1 -0
- package/dist/features/inbox/sync.d.ts +49 -0
- package/dist/features/inbox/sync.d.ts.map +1 -0
- package/dist/features/inbox/sync.js +131 -0
- package/dist/features/inbox/sync.js.map +1 -0
- package/dist/features/inbox/types.d.ts +275 -0
- package/dist/features/inbox/types.d.ts.map +1 -0
- package/dist/features/inbox/types.js +42 -0
- package/dist/features/inbox/types.js.map +1 -0
- package/dist/features/inbox/widget/InboxWidget.d.ts +16 -0
- package/dist/features/inbox/widget/InboxWidget.d.ts.map +1 -0
- package/dist/features/inbox/widget/InboxWidget.js +609 -0
- package/dist/features/inbox/widget/InboxWidget.js.map +1 -0
- package/dist/features/index.d.ts +21 -0
- package/dist/features/index.d.ts.map +1 -0
- package/dist/features/index.js +2 -0
- package/dist/features/index.js.map +1 -0
- package/dist/features/journey/InteractionTracker.d.ts +87 -0
- package/dist/features/journey/InteractionTracker.d.ts.map +1 -0
- package/dist/features/journey/InteractionTracker.js +466 -0
- package/dist/features/journey/InteractionTracker.js.map +1 -0
- package/dist/features/journey/JourneyFeature.d.ts +18 -0
- package/dist/features/journey/JourneyFeature.d.ts.map +1 -0
- package/dist/features/journey/JourneyFeature.js +71 -0
- package/dist/features/journey/JourneyFeature.js.map +1 -0
- package/dist/features/journey/NavigationTracker.d.ts +16 -0
- package/dist/features/journey/NavigationTracker.d.ts.map +1 -0
- package/dist/features/journey/NavigationTracker.js +92 -0
- package/dist/features/journey/NavigationTracker.js.map +1 -0
- package/dist/features/journey/friction.d.ts +28 -0
- package/dist/features/journey/friction.d.ts.map +1 -0
- package/dist/features/journey/friction.js +64 -0
- package/dist/features/journey/friction.js.map +1 -0
- package/dist/features/journey/positionContext.d.ts +30 -0
- package/dist/features/journey/positionContext.d.ts.map +1 -0
- package/dist/features/journey/positionContext.js +116 -0
- package/dist/features/journey/positionContext.js.map +1 -0
- package/dist/features/journey/uiState.d.ts +44 -0
- package/dist/features/journey/uiState.d.ts.map +1 -0
- package/dist/features/journey/uiState.js +158 -0
- package/dist/features/journey/uiState.js.map +1 -0
- package/dist/features/manifest.d.ts +41 -0
- package/dist/features/manifest.d.ts.map +1 -0
- package/dist/features/manifest.js +93 -0
- package/dist/features/manifest.js.map +1 -0
- package/dist/features/network/NetworkFeature.d.ts +60 -0
- package/dist/features/network/NetworkFeature.d.ts.map +1 -0
- package/dist/features/network/NetworkFeature.js +260 -0
- package/dist/features/network/NetworkFeature.js.map +1 -0
- package/dist/features/network/capture/body.d.ts +31 -0
- package/dist/features/network/capture/body.d.ts.map +1 -0
- package/dist/features/network/capture/body.js +81 -0
- package/dist/features/network/capture/body.js.map +1 -0
- package/dist/features/network/classify.d.ts +21 -0
- package/dist/features/network/classify.d.ts.map +1 -0
- package/dist/features/network/classify.js +50 -0
- package/dist/features/network/classify.js.map +1 -0
- package/dist/features/network/dedup.d.ts +36 -0
- package/dist/features/network/dedup.d.ts.map +1 -0
- package/dist/features/network/dedup.js +68 -0
- package/dist/features/network/dedup.js.map +1 -0
- package/dist/features/network/fetchInterceptor.d.ts +20 -0
- package/dist/features/network/fetchInterceptor.d.ts.map +1 -0
- package/dist/features/network/fetchInterceptor.js +158 -0
- package/dist/features/network/fetchInterceptor.js.map +1 -0
- package/dist/features/network/intercept/beacon.d.ts +14 -0
- package/dist/features/network/intercept/beacon.d.ts.map +1 -0
- package/dist/features/network/intercept/beacon.js +56 -0
- package/dist/features/network/intercept/beacon.js.map +1 -0
- package/dist/features/network/intercept/sse.d.ts +16 -0
- package/dist/features/network/intercept/sse.d.ts.map +1 -0
- package/dist/features/network/intercept/sse.js +74 -0
- package/dist/features/network/intercept/sse.js.map +1 -0
- package/dist/features/network/intercept/streams.d.ts +23 -0
- package/dist/features/network/intercept/streams.d.ts.map +1 -0
- package/dist/features/network/intercept/streams.js +25 -0
- package/dist/features/network/intercept/streams.js.map +1 -0
- package/dist/features/network/intercept/websocket.d.ts +14 -0
- package/dist/features/network/intercept/websocket.d.ts.map +1 -0
- package/dist/features/network/intercept/websocket.js +97 -0
- package/dist/features/network/intercept/websocket.js.map +1 -0
- package/dist/features/network/lazy.d.ts +23 -0
- package/dist/features/network/lazy.d.ts.map +1 -0
- package/dist/features/network/lazy.js +65 -0
- package/dist/features/network/lazy.js.map +1 -0
- package/dist/features/network/normalize.d.ts +9 -0
- package/dist/features/network/normalize.d.ts.map +1 -0
- package/dist/features/network/normalize.js +49 -0
- package/dist/features/network/normalize.js.map +1 -0
- package/dist/features/network/parse/graphql.d.ts +17 -0
- package/dist/features/network/parse/graphql.d.ts.map +1 -0
- package/dist/features/network/parse/graphql.js +106 -0
- package/dist/features/network/parse/graphql.js.map +1 -0
- package/dist/features/network/parse/url.d.ts +12 -0
- package/dist/features/network/parse/url.d.ts.map +1 -0
- package/dist/features/network/parse/url.js +52 -0
- package/dist/features/network/parse/url.js.map +1 -0
- package/dist/features/network/sampler.d.ts +21 -0
- package/dist/features/network/sampler.d.ts.map +1 -0
- package/dist/features/network/sampler.js +25 -0
- package/dist/features/network/sampler.js.map +1 -0
- package/dist/features/network/size.d.ts +21 -0
- package/dist/features/network/size.d.ts.map +1 -0
- package/dist/features/network/size.js +63 -0
- package/dist/features/network/size.js.map +1 -0
- package/dist/features/network/thirdParty.d.ts +95 -0
- package/dist/features/network/thirdParty.d.ts.map +1 -0
- package/dist/features/network/thirdParty.js +126 -0
- package/dist/features/network/thirdParty.js.map +1 -0
- package/dist/features/network/timing.d.ts +41 -0
- package/dist/features/network/timing.d.ts.map +1 -0
- package/dist/features/network/timing.js +134 -0
- package/dist/features/network/timing.js.map +1 -0
- package/dist/features/network/tracing.d.ts +18 -0
- package/dist/features/network/tracing.d.ts.map +1 -0
- package/dist/features/network/tracing.js +46 -0
- package/dist/features/network/tracing.js.map +1 -0
- package/dist/features/network/types.d.ts +75 -0
- package/dist/features/network/types.d.ts.map +1 -0
- package/dist/features/network/types.js +2 -0
- package/dist/features/network/types.js.map +1 -0
- package/dist/features/network/xhrInterceptor.d.ts +12 -0
- package/dist/features/network/xhrInterceptor.d.ts.map +1 -0
- package/dist/features/network/xhrInterceptor.js +108 -0
- package/dist/features/network/xhrInterceptor.js.map +1 -0
- package/dist/features/performance/PerformanceFeature.d.ts +76 -0
- package/dist/features/performance/PerformanceFeature.d.ts.map +1 -0
- package/dist/features/performance/PerformanceFeature.js +265 -0
- package/dist/features/performance/PerformanceFeature.js.map +1 -0
- package/dist/features/performance/jankTap.d.ts +23 -0
- package/dist/features/performance/jankTap.d.ts.map +1 -0
- package/dist/features/performance/jankTap.js +20 -0
- package/dist/features/performance/jankTap.js.map +1 -0
- package/dist/features/performance/longTasks.d.ts +14 -0
- package/dist/features/performance/longTasks.d.ts.map +1 -0
- package/dist/features/performance/longTasks.js +55 -0
- package/dist/features/performance/longTasks.js.map +1 -0
- package/dist/features/performance/normalize.d.ts +15 -0
- package/dist/features/performance/normalize.d.ts.map +1 -0
- package/dist/features/performance/normalize.js +30 -0
- package/dist/features/performance/normalize.js.map +1 -0
- package/dist/features/performance/resources.d.ts +19 -0
- package/dist/features/performance/resources.d.ts.map +1 -0
- package/dist/features/performance/resources.js +78 -0
- package/dist/features/performance/resources.js.map +1 -0
- package/dist/features/performance/sampler.d.ts +10 -0
- package/dist/features/performance/sampler.d.ts.map +1 -0
- package/dist/features/performance/sampler.js +23 -0
- package/dist/features/performance/sampler.js.map +1 -0
- package/dist/features/performance/spa.d.ts +2 -0
- package/dist/features/performance/spa.d.ts.map +1 -0
- package/dist/features/performance/spa.js +40 -0
- package/dist/features/performance/spa.js.map +1 -0
- package/dist/features/performance/throttle.d.ts +21 -0
- package/dist/features/performance/throttle.d.ts.map +1 -0
- package/dist/features/performance/throttle.js +26 -0
- package/dist/features/performance/throttle.js.map +1 -0
- package/dist/features/performance/trace/context.d.ts +17 -0
- package/dist/features/performance/trace/context.d.ts.map +1 -0
- package/dist/features/performance/trace/context.js +33 -0
- package/dist/features/performance/trace/context.js.map +1 -0
- package/dist/features/performance/trace/index.d.ts +7 -0
- package/dist/features/performance/trace/index.d.ts.map +1 -0
- package/dist/features/performance/trace/index.js +6 -0
- package/dist/features/performance/trace/index.js.map +1 -0
- package/dist/features/performance/trace/pageload.d.ts +3 -0
- package/dist/features/performance/trace/pageload.d.ts.map +1 -0
- package/dist/features/performance/trace/pageload.js +34 -0
- package/dist/features/performance/trace/pageload.js.map +1 -0
- package/dist/features/performance/trace/transaction.d.ts +61 -0
- package/dist/features/performance/trace/transaction.d.ts.map +1 -0
- package/dist/features/performance/trace/transaction.js +90 -0
- package/dist/features/performance/trace/transaction.js.map +1 -0
- package/dist/features/performance/trace/types.d.ts +23 -0
- package/dist/features/performance/trace/types.d.ts.map +1 -0
- package/dist/features/performance/trace/types.js +10 -0
- package/dist/features/performance/trace/types.js.map +1 -0
- package/dist/features/performance/traces.d.ts +36 -0
- package/dist/features/performance/traces.d.ts.map +1 -0
- package/dist/features/performance/traces.js +50 -0
- package/dist/features/performance/traces.js.map +1 -0
- package/dist/features/profiler/ProfilerFeature.d.ts +28 -0
- package/dist/features/profiler/ProfilerFeature.d.ts.map +1 -0
- package/dist/features/profiler/ProfilerFeature.js +82 -0
- package/dist/features/profiler/ProfilerFeature.js.map +1 -0
- package/dist/features/profiler/capture.d.ts +8 -0
- package/dist/features/profiler/capture.d.ts.map +1 -0
- package/dist/features/profiler/capture.js +21 -0
- package/dist/features/profiler/capture.js.map +1 -0
- package/dist/features/push/PushFeature.d.ts +120 -0
- package/dist/features/push/PushFeature.d.ts.map +1 -0
- package/dist/features/push/PushFeature.js +319 -0
- package/dist/features/push/PushFeature.js.map +1 -0
- package/dist/features/push/diagnostics.d.ts +55 -0
- package/dist/features/push/diagnostics.d.ts.map +1 -0
- package/dist/features/push/diagnostics.js +383 -0
- package/dist/features/push/diagnostics.js.map +1 -0
- package/dist/features/push/pushState.d.ts +58 -0
- package/dist/features/push/pushState.d.ts.map +1 -0
- package/dist/features/push/pushState.js +75 -0
- package/dist/features/push/pushState.js.map +1 -0
- package/dist/features/push/softAsk.d.ts +68 -0
- package/dist/features/push/softAsk.d.ts.map +1 -0
- package/dist/features/push/softAsk.js +142 -0
- package/dist/features/push/softAsk.js.map +1 -0
- package/dist/features/replay/ReplayFeature.d.ts +52 -0
- package/dist/features/replay/ReplayFeature.d.ts.map +1 -0
- package/dist/features/replay/ReplayFeature.js +282 -0
- package/dist/features/replay/ReplayFeature.js.map +1 -0
- package/dist/features/replay/engine/canvas.d.ts +45 -0
- package/dist/features/replay/engine/canvas.d.ts.map +1 -0
- package/dist/features/replay/engine/canvas.js +122 -0
- package/dist/features/replay/engine/canvas.js.map +1 -0
- package/dist/features/replay/engine/crossOrigin.d.ts +23 -0
- package/dist/features/replay/engine/crossOrigin.d.ts.map +1 -0
- package/dist/features/replay/engine/crossOrigin.js +108 -0
- package/dist/features/replay/engine/crossOrigin.js.map +1 -0
- package/dist/features/replay/engine/cssom.d.ts +31 -0
- package/dist/features/replay/engine/cssom.d.ts.map +1 -0
- package/dist/features/replay/engine/cssom.js +128 -0
- package/dist/features/replay/engine/cssom.js.map +1 -0
- package/dist/features/replay/engine/iframe.d.ts +65 -0
- package/dist/features/replay/engine/iframe.d.ts.map +1 -0
- package/dist/features/replay/engine/iframe.js +186 -0
- package/dist/features/replay/engine/iframe.js.map +1 -0
- package/dist/features/replay/engine/interactions.d.ts +172 -0
- package/dist/features/replay/engine/interactions.d.ts.map +1 -0
- package/dist/features/replay/engine/interactions.js +437 -0
- package/dist/features/replay/engine/interactions.js.map +1 -0
- package/dist/features/replay/engine/mutations.d.ts +65 -0
- package/dist/features/replay/engine/mutations.d.ts.map +1 -0
- package/dist/features/replay/engine/mutations.js +304 -0
- package/dist/features/replay/engine/mutations.js.map +1 -0
- package/dist/features/replay/engine/nodeRegistry.d.ts +23 -0
- package/dist/features/replay/engine/nodeRegistry.d.ts.map +1 -0
- package/dist/features/replay/engine/nodeRegistry.js +51 -0
- package/dist/features/replay/engine/nodeRegistry.js.map +1 -0
- package/dist/features/replay/engine/player.d.ts +11 -0
- package/dist/features/replay/engine/player.d.ts.map +1 -0
- package/dist/features/replay/engine/player.js +284 -0
- package/dist/features/replay/engine/player.js.map +1 -0
- package/dist/features/replay/engine/rebuild.d.ts +8 -0
- package/dist/features/replay/engine/rebuild.d.ts.map +1 -0
- package/dist/features/replay/engine/rebuild.js +46 -0
- package/dist/features/replay/engine/rebuild.js.map +1 -0
- package/dist/features/replay/engine/replayWorker.d.ts +33 -0
- package/dist/features/replay/engine/replayWorker.d.ts.map +1 -0
- package/dist/features/replay/engine/replayWorker.js +175 -0
- package/dist/features/replay/engine/replayWorker.js.map +1 -0
- package/dist/features/replay/engine/resources.d.ts +52 -0
- package/dist/features/replay/engine/resources.d.ts.map +1 -0
- package/dist/features/replay/engine/resources.js +132 -0
- package/dist/features/replay/engine/resources.js.map +1 -0
- package/dist/features/replay/engine/snapshot.d.ts +103 -0
- package/dist/features/replay/engine/snapshot.d.ts.map +1 -0
- package/dist/features/replay/engine/snapshot.js +459 -0
- package/dist/features/replay/engine/snapshot.js.map +1 -0
- package/dist/features/replay/engine/traverse.d.ts +19 -0
- package/dist/features/replay/engine/traverse.d.ts.map +1 -0
- package/dist/features/replay/engine/traverse.js +39 -0
- package/dist/features/replay/engine/traverse.js.map +1 -0
- package/dist/features/replay/engine/types.d.ts +149 -0
- package/dist/features/replay/engine/types.d.ts.map +1 -0
- package/dist/features/replay/engine/types.js +6 -0
- package/dist/features/replay/engine/types.js.map +1 -0
- package/dist/features/replay/engine/webglPatch.d.ts +26 -0
- package/dist/features/replay/engine/webglPatch.d.ts.map +1 -0
- package/dist/features/replay/engine/webglPatch.js +83 -0
- package/dist/features/replay/engine/webglPatch.js.map +1 -0
- package/dist/features/replay/lifecycle/adaptive.d.ts +38 -0
- package/dist/features/replay/lifecycle/adaptive.d.ts.map +1 -0
- package/dist/features/replay/lifecycle/adaptive.js +90 -0
- package/dist/features/replay/lifecycle/adaptive.js.map +1 -0
- package/dist/features/replay/lifecycle/cadence.d.ts +35 -0
- package/dist/features/replay/lifecycle/cadence.d.ts.map +1 -0
- package/dist/features/replay/lifecycle/cadence.js +149 -0
- package/dist/features/replay/lifecycle/cadence.js.map +1 -0
- package/dist/features/replay/lifecycle/deltaBatcher.d.ts +31 -0
- package/dist/features/replay/lifecycle/deltaBatcher.d.ts.map +1 -0
- package/dist/features/replay/lifecycle/deltaBatcher.js +32 -0
- package/dist/features/replay/lifecycle/deltaBatcher.js.map +1 -0
- package/dist/features/replay/lifecycle/deviceSignals.d.ts +35 -0
- package/dist/features/replay/lifecycle/deviceSignals.d.ts.map +1 -0
- package/dist/features/replay/lifecycle/deviceSignals.js +61 -0
- package/dist/features/replay/lifecycle/deviceSignals.js.map +1 -0
- package/dist/features/replay/lifecycle/offloadDomFrames.d.ts +69 -0
- package/dist/features/replay/lifecycle/offloadDomFrames.d.ts.map +1 -0
- package/dist/features/replay/lifecycle/offloadDomFrames.js +107 -0
- package/dist/features/replay/lifecycle/offloadDomFrames.js.map +1 -0
- package/dist/features/replay/lifecycle/pii.d.ts +14 -0
- package/dist/features/replay/lifecycle/pii.d.ts.map +1 -0
- package/dist/features/replay/lifecycle/pii.js +52 -0
- package/dist/features/replay/lifecycle/pii.js.map +1 -0
- package/dist/features/replay/lifecycle/recorder.d.ts +178 -0
- package/dist/features/replay/lifecycle/recorder.d.ts.map +1 -0
- package/dist/features/replay/lifecycle/recorder.js +644 -0
- package/dist/features/replay/lifecycle/recorder.js.map +1 -0
- package/dist/features/replay/lifecycle/sampling.d.ts +28 -0
- package/dist/features/replay/lifecycle/sampling.d.ts.map +1 -0
- package/dist/features/replay/lifecycle/sampling.js +31 -0
- package/dist/features/replay/lifecycle/sampling.js.map +1 -0
- package/dist/features/replay/lifecycle/segmentBuffer.d.ts +75 -0
- package/dist/features/replay/lifecycle/segmentBuffer.d.ts.map +1 -0
- package/dist/features/replay/lifecycle/segmentBuffer.js +130 -0
- package/dist/features/replay/lifecycle/segmentBuffer.js.map +1 -0
- package/dist/features/replay/lifecycle/viewContext.d.ts +7 -0
- package/dist/features/replay/lifecycle/viewContext.d.ts.map +1 -0
- package/dist/features/replay/lifecycle/viewContext.js +51 -0
- package/dist/features/replay/lifecycle/viewContext.js.map +1 -0
- package/dist/features/scroll/index.d.ts +33 -0
- package/dist/features/scroll/index.d.ts.map +1 -0
- package/dist/features/scroll/index.js +106 -0
- package/dist/features/scroll/index.js.map +1 -0
- package/dist/features/session/sessionManager.d.ts +41 -0
- package/dist/features/session/sessionManager.d.ts.map +1 -0
- package/dist/features/session/sessionManager.js +67 -0
- package/dist/features/session/sessionManager.js.map +1 -0
- package/dist/features/session/sessionStore.d.ts +137 -0
- package/dist/features/session/sessionStore.d.ts.map +1 -0
- package/dist/features/session/sessionStore.js +323 -0
- package/dist/features/session/sessionStore.js.map +1 -0
- package/dist/features/watchdog/WatchdogFeature.d.ts +23 -0
- package/dist/features/watchdog/WatchdogFeature.d.ts.map +1 -0
- package/dist/features/watchdog/WatchdogFeature.js +29 -0
- package/dist/features/watchdog/WatchdogFeature.js.map +1 -0
- package/dist/features/watchdog/collectors.d.ts +18 -0
- package/dist/features/watchdog/collectors.d.ts.map +1 -0
- package/dist/features/watchdog/collectors.js +107 -0
- package/dist/features/watchdog/collectors.js.map +1 -0
- package/dist/features/watchdog/config.d.ts +51 -0
- package/dist/features/watchdog/config.d.ts.map +1 -0
- package/dist/features/watchdog/config.js +28 -0
- package/dist/features/watchdog/config.js.map +1 -0
- package/dist/features/watchdog/engine.d.ts +22 -0
- package/dist/features/watchdog/engine.d.ts.map +1 -0
- package/dist/features/watchdog/engine.js +123 -0
- package/dist/features/watchdog/engine.js.map +1 -0
- package/dist/features/watchdog/incidents.d.ts +79 -0
- package/dist/features/watchdog/incidents.d.ts.map +1 -0
- package/dist/features/watchdog/incidents.js +204 -0
- package/dist/features/watchdog/incidents.js.map +1 -0
- package/dist/features/watchdog/rollup.d.ts +41 -0
- package/dist/features/watchdog/rollup.d.ts.map +1 -0
- package/dist/features/watchdog/rollup.js +76 -0
- package/dist/features/watchdog/rollup.js.map +1 -0
- package/dist/features/webVitals/WebVitalsFeature.d.ts +46 -0
- package/dist/features/webVitals/WebVitalsFeature.d.ts.map +1 -0
- package/dist/features/webVitals/WebVitalsFeature.js +252 -0
- package/dist/features/webVitals/WebVitalsFeature.js.map +1 -0
- package/dist/features/webVitals/attribution.d.ts +50 -0
- package/dist/features/webVitals/attribution.d.ts.map +1 -0
- package/dist/features/webVitals/attribution.js +186 -0
- package/dist/features/webVitals/attribution.js.map +1 -0
- package/dist/features/webVitals/observe.d.ts +6 -0
- package/dist/features/webVitals/observe.d.ts.map +1 -0
- package/dist/features/webVitals/observe.js +6 -0
- package/dist/features/webVitals/observe.js.map +1 -0
- package/dist/features/webVitals/vitals.d.ts +99 -0
- package/dist/features/webVitals/vitals.d.ts.map +1 -0
- package/dist/features/webVitals/vitals.js +166 -0
- package/dist/features/webVitals/vitals.js.map +1 -0
- package/dist/features/webperf/WebPerfFeature.d.ts +19 -0
- package/dist/features/webperf/WebPerfFeature.d.ts.map +1 -0
- package/dist/features/webperf/WebPerfFeature.js +48 -0
- package/dist/features/webperf/WebPerfFeature.js.map +1 -0
- package/dist/features/webperf/collectors.d.ts +3 -0
- package/dist/features/webperf/collectors.d.ts.map +1 -0
- package/dist/features/webperf/collectors.js +118 -0
- package/dist/features/webperf/collectors.js.map +1 -0
- package/dist/features/webperf/math.d.ts +12 -0
- package/dist/features/webperf/math.d.ts.map +1 -0
- package/dist/features/webperf/math.js +26 -0
- package/dist/features/webperf/math.js.map +1 -0
- package/dist/inapp.d.ts +6 -0
- package/dist/inapp.d.ts.map +1 -0
- package/dist/inapp.js +6 -0
- package/dist/inapp.js.map +1 -0
- package/dist/index.d.ts +34 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/dist/integrations/index.d.ts +7 -0
- package/dist/integrations/index.d.ts.map +1 -0
- package/dist/integrations/index.js +2 -0
- package/dist/integrations/index.js.map +1 -0
- package/dist/pipeline/index.d.ts +3 -0
- package/dist/pipeline/index.d.ts.map +1 -0
- package/dist/pipeline/index.js +3 -0
- package/dist/pipeline/index.js.map +1 -0
- package/dist/pipeline/pipeline.d.ts +263 -0
- package/dist/pipeline/pipeline.d.ts.map +1 -0
- package/dist/pipeline/pipeline.js +783 -0
- package/dist/pipeline/pipeline.js.map +1 -0
- package/dist/public/ScaleBunFacade.d.ts +436 -0
- package/dist/public/ScaleBunFacade.d.ts.map +1 -0
- package/dist/public/ScaleBunFacade.js +857 -0
- package/dist/public/ScaleBunFacade.js.map +1 -0
- package/dist/public/index.d.ts +5 -0
- package/dist/public/index.d.ts.map +1 -0
- package/dist/public/index.js +4 -0
- package/dist/public/index.js.map +1 -0
- package/dist/public/typedTracker.d.ts +91 -0
- package/dist/public/typedTracker.d.ts.map +1 -0
- package/dist/public/typedTracker.js +60 -0
- package/dist/public/typedTracker.js.map +1 -0
- package/dist/scalebun-push-sw.js +236 -0
- package/dist/scalebun.min.js +717 -0
- package/dist/scalebun.min.js.map +7 -0
- package/dist/storage/idb.d.ts +16 -0
- package/dist/storage/idb.d.ts.map +1 -0
- package/dist/storage/idb.js +76 -0
- package/dist/storage/idb.js.map +1 -0
- package/dist/storage/index.d.ts +3 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +3 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/transport/gzip.d.ts +2 -0
- package/dist/transport/gzip.d.ts.map +1 -0
- package/dist/transport/gzip.js +20 -0
- package/dist/transport/gzip.js.map +1 -0
- package/dist/transport/httpClient.d.ts +156 -0
- package/dist/transport/httpClient.d.ts.map +1 -0
- package/dist/transport/httpClient.js +277 -0
- package/dist/transport/httpClient.js.map +1 -0
- package/dist/transport/index.d.ts +3 -0
- package/dist/transport/index.d.ts.map +1 -0
- package/dist/transport/index.js +3 -0
- package/dist/transport/index.js.map +1 -0
- package/dist/transport/sign.d.ts +25 -0
- package/dist/transport/sign.d.ts.map +1 -0
- package/dist/transport/sign.js +58 -0
- package/dist/transport/sign.js.map +1 -0
- package/package.json +67 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* features/ — pluggable capture features (each implements IFeature from @scalebun/sdk-contracts
|
|
3
|
+
* and registers with the FeatureRegistry). Mirrors RN react-native/src/features.
|
|
4
|
+
*
|
|
5
|
+
* 🚧 NOT IMPLEMENTED YET (intentionally — scaffold only). Planned folders, mapped to mobile:
|
|
6
|
+
*
|
|
7
|
+
* errors/ JS errors: window.onerror + unhandledrejection + manual capture (RN: crash/)
|
|
8
|
+
* network/ fetch + XHR + sendBeacon interceptors, denylist-by-default (RN: network/)
|
|
9
|
+
* webVitals/ LCP / INP / CLS / FCP / TTFB — in the core, no web-vitals dep (RN: performance/)
|
|
10
|
+
* performance/ custom traces, resource timing, LoAF attribution (RN: performance/)
|
|
11
|
+
* replay/ DOM snapshot + mutations (renderer:'dom'), capture-on-signal (RN: replay/)
|
|
12
|
+
* session/ SessionManager + boundary (timeout / pagehide) (RN: session/)
|
|
13
|
+
* journey/ route/page tracking, click / rage-click / dead-click (RN: journey/)
|
|
14
|
+
* navigation/ Navigation API + history fallback (SPA route names) (RN: navigation/)
|
|
15
|
+
* bugreport/ embeddable widget + auto-context report (RN: bugreport/)
|
|
16
|
+
* ratings/ in-app rating / survey response (RN: rating)
|
|
17
|
+
*
|
|
18
|
+
* See ../../../../WEB-SDK-PLAN.md §5 (parity) and §7 (sequenced work).
|
|
19
|
+
*/
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/features/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/features/index.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
export interface InteractionTrackerOptions {
|
|
2
|
+
deadMs?: number;
|
|
3
|
+
rageWindowMs?: number;
|
|
4
|
+
rageRadius?: number;
|
|
5
|
+
rageMin?: number;
|
|
6
|
+
/** Mask the label text (`privacy.maskEventText`). Default false — the real label is sent. */
|
|
7
|
+
maskText?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export interface InteractionEmission {
|
|
10
|
+
interactionId: string;
|
|
11
|
+
timestamp: number;
|
|
12
|
+
/**
|
|
13
|
+
* THE PAGE THE CLICK HAPPENED ON — pinned when it happened, not when it is emitted.
|
|
14
|
+
*
|
|
15
|
+
* A USER_ACTION is emitted from `finish()`, which runs after the dead-click observation window
|
|
16
|
+
* closes. The caller then filled `screenName` from `location.pathname` AT THAT MOMENT, so any
|
|
17
|
+
* click that navigates — every CTA, every nav link, every "sign in" button — was filed against
|
|
18
|
+
* the page it navigated TO, where that control does not exist.
|
|
19
|
+
*
|
|
20
|
+
* Measured on production (joint web, 3 days, 16,602 clicks with a witness frame): 9.3% of clicks
|
|
21
|
+
* disagreed with the route of the frame they were captured against, after normalising the query
|
|
22
|
+
* string away. The disagreeing clicks sit CLOSER to their frame than the agreeing ones (median
|
|
23
|
+
* 4.9 s vs 9.2 s), which is the signature of a route read after a navigation rather than of a
|
|
24
|
+
* stale frame. `/` -> `/sign-in`, `/` -> `/doctors` and `/patient/main` -> `/patient/booking`
|
|
25
|
+
* were the three largest pairs.
|
|
26
|
+
*
|
|
27
|
+
* The timestamp beside it has always been the pointerdown time, and `ui` has always been read at
|
|
28
|
+
* pointerdown too, for exactly this reason: what was on screen when the visitor reached for the
|
|
29
|
+
* control. The route was the one piece of that moment still being read at the end. Now it is not.
|
|
30
|
+
*
|
|
31
|
+
* Optional, because a caller that does not pin one keeps the old behaviour rather than losing the
|
|
32
|
+
* field entirely.
|
|
33
|
+
*/
|
|
34
|
+
route?: string;
|
|
35
|
+
}
|
|
36
|
+
type EmitAction = (name: string, data: Record<string, unknown>, label?: string, interaction?: InteractionEmission) => void;
|
|
37
|
+
export declare class InteractionTracker {
|
|
38
|
+
private readonly emit;
|
|
39
|
+
/** Raise a capture signal ('rage'|'dead') onto the bus — arms friction-triggered features
|
|
40
|
+
* (replay capture-on-signal, struggle-triggered surveys/in-app). Optional (tests omit it). */
|
|
41
|
+
private readonly signal?;
|
|
42
|
+
private readonly rage;
|
|
43
|
+
private readonly dead;
|
|
44
|
+
private readonly maskText;
|
|
45
|
+
private onClickFn?;
|
|
46
|
+
private onPointerDownFn?;
|
|
47
|
+
private onPageHideFn?;
|
|
48
|
+
private pointerDown?;
|
|
49
|
+
private pending;
|
|
50
|
+
constructor(emit: EmitAction, opts?: InteractionTrackerOptions,
|
|
51
|
+
/** Raise a capture signal ('rage'|'dead') onto the bus — arms friction-triggered features
|
|
52
|
+
* (replay capture-on-signal, struggle-triggered surveys/in-app). Optional (tests omit it). */
|
|
53
|
+
signal?: ((reason: string) => void) | undefined);
|
|
54
|
+
start(): void;
|
|
55
|
+
stop(): void;
|
|
56
|
+
/**
|
|
57
|
+
* Emit the one row for this interaction.
|
|
58
|
+
*
|
|
59
|
+
* `dead` is THREE-VALUED here, and that is the point. `true` and `false` are verdicts the watcher
|
|
60
|
+
* actually reached; `undefined` means the page went away before the observation window closed, so
|
|
61
|
+
* nobody looked. Writing `dead: false` in that case asserts a measurement never taken — "this click
|
|
62
|
+
* DID cause a change" — and a dead-click rate computed from it is wrong in exactly the situation
|
|
63
|
+
* where dead clicks matter most: the visitor left immediately after clicking.
|
|
64
|
+
*
|
|
65
|
+
* So the key is omitted rather than defaulted, the same rule the rest of this pipeline follows:
|
|
66
|
+
* absent means unknown, never zero. `deadUnknown` records WHY it is absent, so a consumer can tell
|
|
67
|
+
* "not dead" from "we never found out".
|
|
68
|
+
*/
|
|
69
|
+
private finish;
|
|
70
|
+
/**
|
|
71
|
+
* Flush every interaction still awaiting its dead-click verdict.
|
|
72
|
+
*
|
|
73
|
+
* Runs on `pagehide` and on `stop()`. Without it a click followed immediately by a navigation is
|
|
74
|
+
* never emitted at all — the whole row is lost, which is strictly worse than an unknown flag. The
|
|
75
|
+
* verdict is passed as `undefined` because none was reached; see finish().
|
|
76
|
+
*/
|
|
77
|
+
private flushPending;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* A human-ish label: tag + short text, e.g. `button: Buy now`.
|
|
81
|
+
*
|
|
82
|
+
* `maskText` (from `privacy.maskEventText`) replaces every non-whitespace character with `*`, keeping
|
|
83
|
+
* the word shape. Exported so the unit tests can drive both branches directly.
|
|
84
|
+
*/
|
|
85
|
+
export declare function describe(el: Element, maskText?: boolean): string;
|
|
86
|
+
export {};
|
|
87
|
+
//# sourceMappingURL=InteractionTracker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InteractionTracker.d.ts","sourceRoot":"","sources":["../../../src/features/journey/InteractionTracker.ts"],"names":[],"mappings":"AAgBA,MAAM,WAAW,yBAAyB;IACxC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,6FAA6F;IAC7F,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,KAAK,UAAU,GAAG,CAChB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,KAAK,CAAC,EAAE,MAAM,EACd,WAAW,CAAC,EAAE,mBAAmB,KAC9B,IAAI,CAAC;AAUV,qBAAa,kBAAkB;IAW3B,OAAO,CAAC,QAAQ,CAAC,IAAI;IAErB;mGAC+F;IAC/F,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;IAd1B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAe;IACpC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAmB;IACxC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAU;IACnC,OAAO,CAAC,SAAS,CAAC,CAAqB;IACvC,OAAO,CAAC,eAAe,CAAC,CAAqB;IAC7C,OAAO,CAAC,YAAY,CAAC,CAAa;IAClC,OAAO,CAAC,WAAW,CAAC,CAAgB;IACpC,OAAO,CAAC,OAAO,CAAoC;gBAGhC,IAAI,EAAE,UAAU,EACjC,IAAI,GAAE,yBAA8B;IACpC;mGAC+F;IAC9E,MAAM,CAAC,GAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,aAAA;IAOpD,KAAK,IAAI,IAAI;IAsCb,IAAI,IAAI,IAAI;IAaZ;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,MAAM;IAad;;;;;;OAMG;IACH,OAAO,CAAC,YAAY;CAGrB;AAuSD;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,EAAE,EAAE,OAAO,EAAE,QAAQ,UAAQ,GAAG,MAAM,CAK9D"}
|
|
@@ -0,0 +1,466 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Clicks → USER_ACTION analytics events, with rage + dead-click flags (the friction signals) and a
|
|
3
|
+
* target label/selector. Always-on + cheap; does NOT depend on replay.
|
|
4
|
+
*
|
|
5
|
+
* LABEL TEXT IS NO LONGER MASKED BY DEFAULT (`privacy.maskEventText`, default false). It used to be
|
|
6
|
+
* unconditional — every non-whitespace character replaced with `*` — which is why the Events explorer
|
|
7
|
+
* rendered `button: *** ***`. Because rows there group by label, masking preserved the SHAPE of the
|
|
8
|
+
* text and destroyed its identity: two different buttons whose text happened to be the same length
|
|
9
|
+
* merged into a single row, so per-element click analytics could not exist. The selector was always
|
|
10
|
+
* unmasked, so this never was the SDK's privacy boundary anyway.
|
|
11
|
+
*/
|
|
12
|
+
import { RageDetector, DeadClickWatcher } from './friction.js';
|
|
13
|
+
import { getPositionContext } from './positionContext.js';
|
|
14
|
+
import { uiStateSignature } from './uiState.js';
|
|
15
|
+
import { getReplayCoord, uuid } from '../../core/index.js';
|
|
16
|
+
export class InteractionTracker {
|
|
17
|
+
constructor(emit, opts = {},
|
|
18
|
+
/** Raise a capture signal ('rage'|'dead') onto the bus — arms friction-triggered features
|
|
19
|
+
* (replay capture-on-signal, struggle-triggered surveys/in-app). Optional (tests omit it). */
|
|
20
|
+
signal) {
|
|
21
|
+
this.emit = emit;
|
|
22
|
+
this.signal = signal;
|
|
23
|
+
this.pending = new Map();
|
|
24
|
+
this.rage = new RageDetector(opts.rageWindowMs ?? 800, opts.rageRadius ?? 30, opts.rageMin ?? 3);
|
|
25
|
+
this.dead = new DeadClickWatcher(opts.deadMs ?? 700);
|
|
26
|
+
this.maskText = opts.maskText ?? false;
|
|
27
|
+
}
|
|
28
|
+
start() {
|
|
29
|
+
if (typeof document === 'undefined')
|
|
30
|
+
return;
|
|
31
|
+
this.dead.observe(document);
|
|
32
|
+
this.onPointerDownFn = (e) => {
|
|
33
|
+
const pe = e;
|
|
34
|
+
if (pe.isPrimary === false || (typeof pe.button === 'number' && pe.button !== 0))
|
|
35
|
+
return;
|
|
36
|
+
const target = eventTarget(e);
|
|
37
|
+
if (!target)
|
|
38
|
+
return;
|
|
39
|
+
this.pointerDown = capture(target, pe, Date.now(), this.maskText);
|
|
40
|
+
};
|
|
41
|
+
this.onClickFn = (e) => {
|
|
42
|
+
const me = e;
|
|
43
|
+
const target = eventTarget(e);
|
|
44
|
+
if (!target)
|
|
45
|
+
return;
|
|
46
|
+
const down = this.pointerDown;
|
|
47
|
+
this.pointerDown = undefined;
|
|
48
|
+
// A real pointer click reuses the evidence captured when the finger/button landed. Keyboard
|
|
49
|
+
// and programmatic clicks have no pointerdown and are measured honestly at click time.
|
|
50
|
+
const captured = me.detail !== 0 && down && down.target === target && Date.now() - down.timestamp < 5000
|
|
51
|
+
? down
|
|
52
|
+
: capture(target, me, Date.now(), this.maskText);
|
|
53
|
+
const rage = this.rage.push(captured.x, captured.y, captured.timestamp);
|
|
54
|
+
if (rage)
|
|
55
|
+
captured.data.rage = true;
|
|
56
|
+
if (rage)
|
|
57
|
+
this.signal?.('rage'); // RageDetector coalesces → one signal per cluster
|
|
58
|
+
this.pending.set(captured.interactionId, captured);
|
|
59
|
+
this.dead.onClick((dead) => {
|
|
60
|
+
this.finish(captured.interactionId, dead);
|
|
61
|
+
if (dead)
|
|
62
|
+
this.signal?.('dead');
|
|
63
|
+
});
|
|
64
|
+
};
|
|
65
|
+
this.onPageHideFn = () => this.flushPending();
|
|
66
|
+
document.addEventListener('pointerdown', this.onPointerDownFn, true);
|
|
67
|
+
document.addEventListener('click', this.onClickFn, true);
|
|
68
|
+
if (typeof window !== 'undefined')
|
|
69
|
+
window.addEventListener('pagehide', this.onPageHideFn, true);
|
|
70
|
+
}
|
|
71
|
+
stop() {
|
|
72
|
+
this.flushPending();
|
|
73
|
+
this.dead.disconnect();
|
|
74
|
+
if (typeof document !== 'undefined') {
|
|
75
|
+
if (this.onPointerDownFn)
|
|
76
|
+
document.removeEventListener('pointerdown', this.onPointerDownFn, true);
|
|
77
|
+
if (this.onClickFn)
|
|
78
|
+
document.removeEventListener('click', this.onClickFn, true);
|
|
79
|
+
}
|
|
80
|
+
if (this.onPageHideFn && typeof window !== 'undefined') {
|
|
81
|
+
window.removeEventListener('pagehide', this.onPageHideFn, true);
|
|
82
|
+
}
|
|
83
|
+
this.pointerDown = undefined;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Emit the one row for this interaction.
|
|
87
|
+
*
|
|
88
|
+
* `dead` is THREE-VALUED here, and that is the point. `true` and `false` are verdicts the watcher
|
|
89
|
+
* actually reached; `undefined` means the page went away before the observation window closed, so
|
|
90
|
+
* nobody looked. Writing `dead: false` in that case asserts a measurement never taken — "this click
|
|
91
|
+
* DID cause a change" — and a dead-click rate computed from it is wrong in exactly the situation
|
|
92
|
+
* where dead clicks matter most: the visitor left immediately after clicking.
|
|
93
|
+
*
|
|
94
|
+
* So the key is omitted rather than defaulted, the same rule the rest of this pipeline follows:
|
|
95
|
+
* absent means unknown, never zero. `deadUnknown` records WHY it is absent, so a consumer can tell
|
|
96
|
+
* "not dead" from "we never found out".
|
|
97
|
+
*/
|
|
98
|
+
finish(interactionId, dead) {
|
|
99
|
+
const captured = this.pending.get(interactionId);
|
|
100
|
+
if (!captured)
|
|
101
|
+
return;
|
|
102
|
+
this.pending.delete(interactionId);
|
|
103
|
+
if (dead === true)
|
|
104
|
+
captured.data.dead = true;
|
|
105
|
+
else if (dead === undefined)
|
|
106
|
+
captured.data.deadUnknown = true;
|
|
107
|
+
this.emit('USER_ACTION', captured.data, captured.label, {
|
|
108
|
+
interactionId,
|
|
109
|
+
timestamp: captured.timestamp,
|
|
110
|
+
route: captured.route,
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Flush every interaction still awaiting its dead-click verdict.
|
|
115
|
+
*
|
|
116
|
+
* Runs on `pagehide` and on `stop()`. Without it a click followed immediately by a navigation is
|
|
117
|
+
* never emitted at all — the whole row is lost, which is strictly worse than an unknown flag. The
|
|
118
|
+
* verdict is passed as `undefined` because none was reached; see finish().
|
|
119
|
+
*/
|
|
120
|
+
flushPending() {
|
|
121
|
+
for (const interactionId of [...this.pending.keys()])
|
|
122
|
+
this.finish(interactionId, undefined);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
function eventTarget(e) {
|
|
126
|
+
// SHADOW DOM — see the note below. `e.target` is retargeted to the host, so the composed
|
|
127
|
+
// path is what identifies the control. Our own surfaces stay reported as their host, which
|
|
128
|
+
// is what keeps the query-side exclusion matching them.
|
|
129
|
+
let target = e.target;
|
|
130
|
+
if (!target || !target.tagName)
|
|
131
|
+
return null;
|
|
132
|
+
if (!target.hasAttribute('data-scalebun')) {
|
|
133
|
+
const deep = e.composedPath?.()[0];
|
|
134
|
+
if (deep && deep.tagName)
|
|
135
|
+
target = deep;
|
|
136
|
+
}
|
|
137
|
+
return target;
|
|
138
|
+
}
|
|
139
|
+
function capture(target, pointerEvent, timestamp, maskText) {
|
|
140
|
+
const ui = uiStateSignature();
|
|
141
|
+
const data = {
|
|
142
|
+
action: 'click',
|
|
143
|
+
...pointer(pointerEvent),
|
|
144
|
+
selector: selectorOf(target),
|
|
145
|
+
...anchor(target, maskText),
|
|
146
|
+
state_status: ui ? 'captured_nonempty' : 'captured_empty',
|
|
147
|
+
};
|
|
148
|
+
if (ui)
|
|
149
|
+
data.ui = ui;
|
|
150
|
+
const replay = getReplayCoord();
|
|
151
|
+
if (replay)
|
|
152
|
+
data.replayCoord = replay;
|
|
153
|
+
return {
|
|
154
|
+
target,
|
|
155
|
+
x: pointerEvent.clientX,
|
|
156
|
+
y: pointerEvent.clientY,
|
|
157
|
+
data,
|
|
158
|
+
label: describe(target, maskText),
|
|
159
|
+
interactionId: `ixw-${uuid()}`,
|
|
160
|
+
timestamp,
|
|
161
|
+
/* Read HERE, in the same breath as the coordinates and the ui state. See InteractionEmission. */
|
|
162
|
+
route: currentPath(),
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* The element the visitor actually clicked, not the wrapper the browser reports.
|
|
167
|
+
*
|
|
168
|
+
* `event.target` is RETARGETED at a shadow boundary: a click on a button inside a web component is
|
|
169
|
+
* reported as a click on the component's host, so every control inside it collapses onto one
|
|
170
|
+
* element and neither the selector nor the path describes what was hit. `composedPath()[0]` is the
|
|
171
|
+
* real node, and both of the SDK's other capture lanes already use it — the replay engine says so
|
|
172
|
+
* outright ("composedPath()[0] beats e.target, which is the host"). This lane was the one that
|
|
173
|
+
* never got the fix, and it is the lane heatmaps read.
|
|
174
|
+
*
|
|
175
|
+
* OUR OWN WIDGETS ARE DELIBERATELY NOT UNWRAPPED. Every ScaleBun surface — in-app, inbox, survey,
|
|
176
|
+
* coachmark, soft-ask, bug report — is mounted in a shadow root too, and the query layer keeps
|
|
177
|
+
* those clicks out of customer heatmaps by matching the HOST's selector. Resolving through them
|
|
178
|
+
* would produce an inner control the filter does not recognise, so clicks on ScaleBun's own UI
|
|
179
|
+
* would start being reported as clicks on the customer's page. Reporting the host for our surfaces
|
|
180
|
+
* is therefore not a limitation, it is what keeps the existing exclusion working — and it keeps
|
|
181
|
+
* that decision in one place rather than splitting it across two repos.
|
|
182
|
+
*
|
|
183
|
+
* Falls back to `event.target` whenever the composed path is unavailable or its first entry is not
|
|
184
|
+
* an element (text nodes, the document, a closed root's boundary), so nothing is lost when the
|
|
185
|
+
* answer cannot be improved.
|
|
186
|
+
*/
|
|
187
|
+
/* resolution happens inline in the click handler — see the note above. */
|
|
188
|
+
/** Click position + viewport + scroll + document height, so the dashboard can place clicks in
|
|
189
|
+
* viewport-% or DOCUMENT space across different screen sizes. `x`/`y` are viewport-relative (clientX/Y).
|
|
190
|
+
*
|
|
191
|
+
* `dh` is the whole document's height. Without it a click's page position is unrecoverable — `y + sy`
|
|
192
|
+
* is a pixel offset with no denominator — so heatmaps of a scrollable page had to fold the entire
|
|
193
|
+
* document onto one screenful, stacking below-fold clicks on top of the hero. Read unguarded because
|
|
194
|
+
* `pointer` only runs from the click handler, which `start()` never installs without a document; one
|
|
195
|
+
* layout read per click, next to the target rect the handler already measures. Width is deliberately
|
|
196
|
+
* NOT sent: horizontal scrolling is vanishingly rare, and the viewport width the dashboard already
|
|
197
|
+
* has is the right horizontal denominator for a responsive layout. */
|
|
198
|
+
function pointer(me) {
|
|
199
|
+
const w = typeof window !== 'undefined' ? window : undefined;
|
|
200
|
+
return {
|
|
201
|
+
x: me.clientX,
|
|
202
|
+
y: me.clientY,
|
|
203
|
+
vw: w?.innerWidth ?? 0,
|
|
204
|
+
vh: w?.innerHeight ?? 0,
|
|
205
|
+
sx: w ? Math.round(w.scrollX) : 0,
|
|
206
|
+
sy: w ? Math.round(w.scrollY) : 0,
|
|
207
|
+
dh: document.documentElement.scrollHeight,
|
|
208
|
+
// H5 — devicePixelRatio: sharper backdrops + a device-density bucketing dimension for heatmaps.
|
|
209
|
+
dpr: w?.devicePixelRatio ?? 1,
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* A CONTRADICTION SIGNAL, NOT A LOCATOR — one independent fact about what was clicked.
|
|
214
|
+
*
|
|
215
|
+
* `path` resolves uniquely on real markup (measured 30/30 on the reported site) but is FRAGILE: one
|
|
216
|
+
* inserted sibling shifts an `nth-of-type` segment onto a different control, and the reader has no
|
|
217
|
+
* way to notice. This field exists so it can notice. When the element a stored path resolves to
|
|
218
|
+
* contradicts this, the reader refuses to anchor.
|
|
219
|
+
*
|
|
220
|
+
* IT MAY ONLY EVER REFUSE. Agreement is not evidence of identity: a duplicate sibling carrying the
|
|
221
|
+
* same href satisfies it exactly, which is why promoting on agreement was measured and rejected —
|
|
222
|
+
* it raised silent mis-anchors from 12 to 14 across 156 adversarial trials while looking like an
|
|
223
|
+
* improvement. Refusal-only took them from 12 to 2 and cannot, by construction, add an anchor.
|
|
224
|
+
*
|
|
225
|
+
* PRIVACY. Four signals, in this order, and nothing else:
|
|
226
|
+
* · href PATHNAME — query string and fragment stripped, so tokens, emails and ids never travel.
|
|
227
|
+
* · aria-label — author-written UI wording, capped at 32 chars and rejected outright if it carries
|
|
228
|
+
* an address or a long digit run, which is what a personalised label looks like.
|
|
229
|
+
* · the element’s own VISIBLE TEXT, under the same cap and the same two refusals, and only when
|
|
230
|
+
* `privacy.maskEventText` is off. See the note on the fallback for why it had to be added.
|
|
231
|
+
* · type — a build-time constant on form controls.
|
|
232
|
+
* Deliberately excluded: input values, full URLs, class lists.
|
|
233
|
+
*
|
|
234
|
+
* THIS PARAGRAPH SAID THE OPPOSITE FOR ONE RELEASE. 2.2.0 added the text fallback and left the line
|
|
235
|
+
* above reading "nothing derived from user text / Deliberately excluded: visible text" — a privacy
|
|
236
|
+
* claim the code beneath it had stopped honouring. It is the paragraph an auditor reads and the one
|
|
237
|
+
* quoted when this field comes up in due diligence, so correcting it is part of the change rather
|
|
238
|
+
* than documentation to catch up later.
|
|
239
|
+
*
|
|
240
|
+
* One optional field, absent when nothing safe is available, so the common case adds no bytes and an
|
|
241
|
+
* old reader that ignores it behaves exactly as before.
|
|
242
|
+
*/
|
|
243
|
+
function constraintOf(el, maskText) {
|
|
244
|
+
// Same normalisation as `stripQuery` in core/breadcrumbs and performance/resources — one regex,
|
|
245
|
+
// and it drops the fragment as well, so `#anchor` links reduce to their path.
|
|
246
|
+
const h = (el.getAttribute('href') || '').replace(/[?#].*$/, '');
|
|
247
|
+
// No `javascript:` guard: this is a comparison token, not a URL to follow, so an odd scheme is
|
|
248
|
+
// harmless and the check cost more bytes than the case is worth.
|
|
249
|
+
if (h)
|
|
250
|
+
return 'h' + h;
|
|
251
|
+
/**
|
|
252
|
+
* TEXT IS THE FALLBACK, AND FOR MOST CONTROLS IT IS THE ONLY IDENTITY THERE IS.
|
|
253
|
+
*
|
|
254
|
+
* With href, aria-label and type all absent this returned undefined — and a plain
|
|
255
|
+
* `<button>Book now</button>` is exactly that shape. Without a constraint the viewer cannot
|
|
256
|
+
* witness uniqueness, so the click cannot anchor and is drawn at a coordinate instead of on the
|
|
257
|
+
* control. Measured on the live application: 54% of clicks carry no constraint at all, and the
|
|
258
|
+
* page's main call to action is one of them, which is the reported "the CTA has no heat on it".
|
|
259
|
+
*
|
|
260
|
+
* `heat:groundtruth` is what says this is the missing piece rather than the trust rule: it
|
|
261
|
+
* reports that id-less targets DO classify as TRUSTED once uniqueness is witnessed, and that a
|
|
262
|
+
* sibling or duplicate inserted beside them is caught every time — 0 silently wrong across every
|
|
263
|
+
* adversarial pass. So the evidence machinery works; it was simply being handed nothing to work
|
|
264
|
+
* with for most elements.
|
|
265
|
+
*
|
|
266
|
+
* SHARES THE ARIA GUARD DELIBERATELY, not just to save bytes. A label and a caption carry the
|
|
267
|
+
* same privacy risk — a name, an email, an order number — and the same rule handles both: short,
|
|
268
|
+
* no address, no long digit run. One rule is also one thing to audit, and this is a field that
|
|
269
|
+
* leaves the device.
|
|
270
|
+
*
|
|
271
|
+
* `textContent` rather than innerText: it does not force layout, it is what the reconstruction
|
|
272
|
+
* will compare against, and it is stable when the control is off screen.
|
|
273
|
+
*/
|
|
274
|
+
/**
|
|
275
|
+
* MASKING APPLIES HERE TOO, AND FOR ONE RELEASE IT DID NOT.
|
|
276
|
+
*
|
|
277
|
+
* `privacy.maskEventText` already stars out `label` (see describe), so a tenant who turns it on
|
|
278
|
+
* has every visible string masked on the way out — except this one, which 2.2.0 quietly began
|
|
279
|
+
* sending in clear. Same text, same event, one field over. A masking switch that misses a field is
|
|
280
|
+
* worse than no switch, because it is relied on.
|
|
281
|
+
*
|
|
282
|
+
* aria-label stays on BOTH sides of the branch. It is author-written wording, it shipped in this
|
|
283
|
+
* field before the text fallback existed, and it is what the paragraph above has always promised;
|
|
284
|
+
* withholding it under masking would change behaviour nobody asked to change. Only the fallback —
|
|
285
|
+
* the part that reads what the USER sees — is withheld.
|
|
286
|
+
*
|
|
287
|
+
* The consequence is deliberate: with masking on, a control whose only identity is its text has no
|
|
288
|
+
* constraint, cannot witness uniqueness, and is drawn at a coordinate. Less anchoring is the right
|
|
289
|
+
* trade against sending text a tenant asked us not to send.
|
|
290
|
+
*/
|
|
291
|
+
const a = (el.getAttribute('aria-label') || (maskText ? '' : el.textContent) || '').trim();
|
|
292
|
+
// A long digit run or an address is what a personalised label looks like — refuse those.
|
|
293
|
+
if (a && a.length < 33 && !/@|\d{4,}/.test(a))
|
|
294
|
+
return 'a' + a;
|
|
295
|
+
const t = el.getAttribute('type');
|
|
296
|
+
return t ? 'y' + t : undefined;
|
|
297
|
+
}
|
|
298
|
+
/** H7 — element bounding rect (for responsive re-anchoring) + opt-in component name (for component heatmaps). */
|
|
299
|
+
function anchor(el, maskText) {
|
|
300
|
+
const r = el.getBoundingClientRect();
|
|
301
|
+
const out = { ex: r.x | 0, ey: r.y | 0, ew: r.width | 0, eh: r.height | 0 };
|
|
302
|
+
/**
|
|
303
|
+
* VIEWPORT ANCHORING — `fx` is now 1 for fixed and 2 for STICKY.
|
|
304
|
+
*
|
|
305
|
+
* Additive by widening the value rather than by adding a field. Every deployed reader tests `fx`
|
|
306
|
+
* for truthiness, and 2 is as truthy as 1, so an old backend treats a sticky click as
|
|
307
|
+
* element-owned — exactly the intended behaviour — while a new one can tell them apart. Nothing
|
|
308
|
+
* changes meaning and no deploy ordering is required.
|
|
309
|
+
*
|
|
310
|
+
* A separate `pc: 'sticky'` string was written first and reverted: it cost 60 bytes against 14
|
|
311
|
+
* bytes of core headroom. See positionContext.ts.
|
|
312
|
+
*
|
|
313
|
+
* STICKY IS WHY THIS CHANGED AT ALL. The old check looked for `position: fixed` and nothing else,
|
|
314
|
+
* so a sticky header read as ordinary content and its clicks went to the document-space lane —
|
|
315
|
+
* which must choose one page coordinate for a control clicked at every scroll depth.
|
|
316
|
+
*/
|
|
317
|
+
const pc = getPositionContext(el);
|
|
318
|
+
// Emitted only when there is something to say, so the common case still adds no bytes.
|
|
319
|
+
if (pc)
|
|
320
|
+
out.fx = pc;
|
|
321
|
+
out.path = structuralPath(el);
|
|
322
|
+
const cx = constraintOf(el, maskText);
|
|
323
|
+
if (cx)
|
|
324
|
+
out.cx = cx;
|
|
325
|
+
const comp = el.closest('[data-scalebun-component]')?.getAttribute('data-scalebun-component');
|
|
326
|
+
if (comp)
|
|
327
|
+
out.component = comp;
|
|
328
|
+
return out;
|
|
329
|
+
}
|
|
330
|
+
/**
|
|
331
|
+
* True when this click landed on a VIEWPORT-anchored element — one that does not move as the page
|
|
332
|
+
* scrolls, because it or an ancestor computes to `position: fixed`.
|
|
333
|
+
*
|
|
334
|
+
* WHY THE DASHBOARD NEEDS THIS. A click's page position is derived as `y + sy`: viewport coordinate
|
|
335
|
+
* plus scroll offset. For a fixed element that arithmetic is meaningless — it never moved, so adding
|
|
336
|
+
* how far the visitor happened to have scrolled scatters one physical button down the whole document.
|
|
337
|
+
* Measured on real data before this field existed: a single fixed host produced clicks at 22 distinct
|
|
338
|
+
* page depths between 0.5% and 50.8%, which is 10% of all placeable clicks laid down as a false
|
|
339
|
+
* vertical streak. A structured artefact like that reads as a finding; noise does not.
|
|
340
|
+
*
|
|
341
|
+
* It was worked around by excluding one selector we own by name. That only ever covered OUR widget —
|
|
342
|
+
* the customer's sticky header, cookie banner and third-party chat have the identical defect and
|
|
343
|
+
* cannot be recognised from a selector. This field is the general fix, and it is the ELEMENT that
|
|
344
|
+
* knows: only capture can answer it, which is why it belongs here and not in the query.
|
|
345
|
+
*
|
|
346
|
+
* ONLY `fixed`, DELIBERATELY NOT `sticky`. A sticky element behaves like a fixed one *while stuck*
|
|
347
|
+
* and like normal content otherwise, and which of the two it is at click time cannot be decided from
|
|
348
|
+
* the element alone without reconstructing its natural flow position. Reporting a guess would put
|
|
349
|
+
* clicks in a confidently wrong place, which is the failure this field exists to remove. Sticky
|
|
350
|
+
* therefore keeps today's behaviour until it can be answered rather than estimated.
|
|
351
|
+
*
|
|
352
|
+
* Emitted only when TRUE (`fx: 1`), so the common case adds no bytes to the payload.
|
|
353
|
+
*
|
|
354
|
+
* Cost: `getComputedStyle` per ancestor, on click only. Layout is already flushed by the
|
|
355
|
+
* `getBoundingClientRect` above, so these reads hit a clean style tree rather than forcing a
|
|
356
|
+
* recalculation. Uncapped depth on purpose — a cap would silently misreport exactly the deeply
|
|
357
|
+
* nested content inside a fixed modal that most needs this to be right.
|
|
358
|
+
*/
|
|
359
|
+
/**
|
|
360
|
+
* A STRUCTURAL path to the clicked element — `main>div:nth-of-type(2)>button`.
|
|
361
|
+
*
|
|
362
|
+
* WHY, given `selector` already exists. `selector` is the element's own tag and classes, which turns
|
|
363
|
+
* out to identify almost nothing: measured across 849 real clicks, the single commonest value is a
|
|
364
|
+
* bare `div` (159 of them), followed by Tailwind utility soups like `div.flex.flex-col`. None of
|
|
365
|
+
* those distinguish one element from thousands of others, so anything built on them — anchoring a
|
|
366
|
+
* click to the control it hit, following a control across a redesign — is no more reliable than raw
|
|
367
|
+
* coordinates while LOOKING far more precise. That combination is the worst of the two.
|
|
368
|
+
*
|
|
369
|
+
* A path is stable where classes are not: utility classes change whenever the design does, but a
|
|
370
|
+
* button's position in the document structure usually survives a restyle.
|
|
371
|
+
*
|
|
372
|
+
* ADDED ALONGSIDE `selector`, NOT REPLACING IT. The component heatmap aggregates on `selector`
|
|
373
|
+
* today; changing its meaning underneath would silently re-bucket every existing aggregate against
|
|
374
|
+
* history captured under the old rule.
|
|
375
|
+
*
|
|
376
|
+
* Captured now although nothing consumes it yet, which is a deliberate exception to not shipping
|
|
377
|
+
* unused fields: a path cannot be reconstructed after the fact from a stored click, so the data has
|
|
378
|
+
* to start accumulating before the feature that needs it can be built at all. The alternative is
|
|
379
|
+
* building it later and having no history to run it against.
|
|
380
|
+
*
|
|
381
|
+
* An `id` ENDS the walk — an id is unique in the document, so everything above it is noise, and
|
|
382
|
+
* stopping keeps the common case short. Depth is capped for the same reason: bytes on every click
|
|
383
|
+
* are real, and the segments nearest the element carry nearly all of the identifying power.
|
|
384
|
+
*
|
|
385
|
+
* `nth-of-type` is emitted only when a parent holds more than one child of that tag, so a page whose
|
|
386
|
+
* structure is already unambiguous pays nothing for it.
|
|
387
|
+
*/
|
|
388
|
+
function structuralPath(el) {
|
|
389
|
+
const parts = [];
|
|
390
|
+
let n = el;
|
|
391
|
+
for (let depth = 0; n && depth < 6; depth++) {
|
|
392
|
+
const tag = n.tagName.toLowerCase();
|
|
393
|
+
if (tag === 'html' || tag === 'body')
|
|
394
|
+
break;
|
|
395
|
+
if (n.id) {
|
|
396
|
+
parts.unshift(`${tag}#${n.id}`);
|
|
397
|
+
break;
|
|
398
|
+
}
|
|
399
|
+
const up = n.parentElement;
|
|
400
|
+
if (up) {
|
|
401
|
+
let index = 0;
|
|
402
|
+
let total = 0;
|
|
403
|
+
const kids = up.children;
|
|
404
|
+
const self = n;
|
|
405
|
+
for (let i = 0; i < kids.length; i++) {
|
|
406
|
+
const kid = kids[i];
|
|
407
|
+
if (!kid || kid.tagName !== self.tagName)
|
|
408
|
+
continue;
|
|
409
|
+
total++;
|
|
410
|
+
if (kid === self)
|
|
411
|
+
index = total;
|
|
412
|
+
}
|
|
413
|
+
parts.unshift(total > 1 ? `${tag}:nth-of-type(${index})` : tag);
|
|
414
|
+
}
|
|
415
|
+
else {
|
|
416
|
+
parts.unshift(tag);
|
|
417
|
+
}
|
|
418
|
+
n = up;
|
|
419
|
+
}
|
|
420
|
+
return parts.join('>');
|
|
421
|
+
}
|
|
422
|
+
const mask = (s) => s.replace(/\S/g, '*');
|
|
423
|
+
/**
|
|
424
|
+
* A human-ish label: tag + short text, e.g. `button: Buy now`.
|
|
425
|
+
*
|
|
426
|
+
* `maskText` (from `privacy.maskEventText`) replaces every non-whitespace character with `*`, keeping
|
|
427
|
+
* the word shape. Exported so the unit tests can drive both branches directly.
|
|
428
|
+
*/
|
|
429
|
+
export function describe(el, maskText = false) {
|
|
430
|
+
const tag = el.tagName.toLowerCase();
|
|
431
|
+
const text = (el.textContent || '').trim().slice(0, 40);
|
|
432
|
+
if (!text)
|
|
433
|
+
return tag;
|
|
434
|
+
return `${tag}: ${maskText ? mask(text) : text}`;
|
|
435
|
+
}
|
|
436
|
+
/**
|
|
437
|
+
* A compact CSS-ish selector (tag#id.class) — structure only, no text/PII.
|
|
438
|
+
*
|
|
439
|
+
* Byte-identical to autocapture's copy, and DELIBERATELY left duplicated. Sharing it through a
|
|
440
|
+
* `core/` module was tried and measured: the eager bundle grew 136 B rather than shrinking, because
|
|
441
|
+
* gzip already collapses the second copy to almost nothing while a new module boundary costs real
|
|
442
|
+
* bytes. Deduplicate this only if the two lanes ever need to agree on the value, not to save space.
|
|
443
|
+
*/
|
|
444
|
+
function selectorOf(el) {
|
|
445
|
+
let s = el.tagName.toLowerCase();
|
|
446
|
+
if (el.id)
|
|
447
|
+
s += `#${el.id}`;
|
|
448
|
+
const cls = (el.getAttribute('class') || '')
|
|
449
|
+
.trim()
|
|
450
|
+
.split(/\s+/)
|
|
451
|
+
.filter(Boolean)
|
|
452
|
+
.slice(0, 2);
|
|
453
|
+
if (cls.length)
|
|
454
|
+
s += '.' + cls.join('.');
|
|
455
|
+
return s;
|
|
456
|
+
}
|
|
457
|
+
/** The path the visitor is on, read at capture time. Undefined outside a browser. */
|
|
458
|
+
function currentPath() {
|
|
459
|
+
try {
|
|
460
|
+
return typeof location !== 'undefined' ? location.pathname : undefined;
|
|
461
|
+
}
|
|
462
|
+
catch {
|
|
463
|
+
return undefined;
|
|
464
|
+
}
|
|
465
|
+
}
|
|
466
|
+
//# sourceMappingURL=InteractionTracker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InteractionTracker.js","sourceRoot":"","sources":["../../../src/features/journey/InteractionTracker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* F-JRN — journey + navigation. Emits SCREEN_VIEW (route changes) and USER_ACTION (clicks enriched with rage/dead
|
|
3
|
+
* friction) as `kind:'event'` items → the existing funnels / flows / friction analytics. Always-on,
|
|
4
|
+
* decoupled from replay.
|
|
5
|
+
*/
|
|
6
|
+
import type { IFeature, FeatureContext } from '@scalebun/sdk-contracts';
|
|
7
|
+
export declare class JourneyFeature implements IFeature {
|
|
8
|
+
readonly name = "journey";
|
|
9
|
+
private ctx;
|
|
10
|
+
private active;
|
|
11
|
+
private nav?;
|
|
12
|
+
private interactions?;
|
|
13
|
+
get isActive(): boolean;
|
|
14
|
+
setup(ctx: FeatureContext): void;
|
|
15
|
+
private emit;
|
|
16
|
+
teardown(): void;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=JourneyFeature.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"JourneyFeature.d.ts","sourceRoot":"","sources":["../../../src/features/journey/JourneyFeature.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAOxE,qBAAa,cAAe,YAAW,QAAQ;IAC7C,QAAQ,CAAC,IAAI,aAAa;IAC1B,OAAO,CAAC,GAAG,CAA+B;IAC1C,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,GAAG,CAAC,CAAoB;IAChC,OAAO,CAAC,YAAY,CAAC,CAAqB;IAE1C,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,KAAK,CAAC,GAAG,EAAE,cAAc,GAAG,IAAI;IA8BhC,OAAO,CAAC,IAAI;IA0BZ,QAAQ,IAAI,IAAI;CAKjB"}
|