@qualified-salesforce/web 0.0.1-oidc-bootstrap
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/41842993ec71d6628e4949e9a22b146b.svg +3 -0
- package/7271f3433ed82fc7f56adcd9e30275f4.svg +17 -0
- package/LICENSE.txt +82 -0
- package/components/helpers/entriesStringValidations.js +69 -0
- package/components/helpers/languages.js +32 -0
- package/components/shared/assertUnreachable.js +5 -0
- package/components/shared/controls/imageCropperHelpers.js +43 -0
- package/components/shared/meetingLoadingProgressSpec.js +116 -0
- package/constants.generated.js +9883 -0
- package/css/widget/multimodal_v2/host.split-css.css +162 -0
- package/css/widget/multimodal_v2/index.split-css.panda.css +5240 -0
- package/css/widget/widget.split-css.css +100 -0
- package/fonts/inter/Inter-Black.woff +0 -0
- package/fonts/inter/Inter-Black.woff2 +0 -0
- package/fonts/inter/Inter-BlackItalic.woff +0 -0
- package/fonts/inter/Inter-BlackItalic.woff2 +0 -0
- package/fonts/inter/Inter-Bold.woff +0 -0
- package/fonts/inter/Inter-Bold.woff2 +0 -0
- package/fonts/inter/Inter-BoldItalic.woff +0 -0
- package/fonts/inter/Inter-BoldItalic.woff2 +0 -0
- package/fonts/inter/Inter-ExtraBold.woff +0 -0
- package/fonts/inter/Inter-ExtraBold.woff2 +0 -0
- package/fonts/inter/Inter-ExtraBoldItalic.woff +0 -0
- package/fonts/inter/Inter-ExtraBoldItalic.woff2 +0 -0
- package/fonts/inter/Inter-ExtraLight.woff +0 -0
- package/fonts/inter/Inter-ExtraLight.woff2 +0 -0
- package/fonts/inter/Inter-ExtraLightItalic.woff +0 -0
- package/fonts/inter/Inter-ExtraLightItalic.woff2 +0 -0
- package/fonts/inter/Inter-Italic.woff +0 -0
- package/fonts/inter/Inter-Italic.woff2 +0 -0
- package/fonts/inter/Inter-Light.woff +0 -0
- package/fonts/inter/Inter-Light.woff2 +0 -0
- package/fonts/inter/Inter-LightItalic.woff +0 -0
- package/fonts/inter/Inter-LightItalic.woff2 +0 -0
- package/fonts/inter/Inter-Medium.woff +0 -0
- package/fonts/inter/Inter-Medium.woff2 +0 -0
- package/fonts/inter/Inter-MediumItalic.woff +0 -0
- package/fonts/inter/Inter-MediumItalic.woff2 +0 -0
- package/fonts/inter/Inter-Regular.woff +0 -0
- package/fonts/inter/Inter-Regular.woff2 +0 -0
- package/fonts/inter/Inter-SemiBold.woff +0 -0
- package/fonts/inter/Inter-SemiBold.woff2 +0 -0
- package/fonts/inter/Inter-SemiBoldItalic.woff +0 -0
- package/fonts/inter/Inter-SemiBoldItalic.woff2 +0 -0
- package/fonts/inter/Inter-Thin.woff +0 -0
- package/fonts/inter/Inter-Thin.woff2 +0 -0
- package/fonts/inter/Inter-ThinItalic.woff +0 -0
- package/fonts/inter/Inter-ThinItalic.woff2 +0 -0
- package/fonts/inter/Inter-italic.var.woff2 +0 -0
- package/fonts/inter/Inter-roman.var.woff2 +0 -0
- package/images/close.js +63 -0
- package/images/logo.js +22 -0
- package/js/4101.js +19721 -0
- package/js/daily-esm.js +9948 -0
- package/js/date-fns.js +427 -0
- package/js/multimodal_v2.js +1653 -0
- package/js/runtime.js +109 -0
- package/media/Inter-Black.796be8d8bf.woff2 +0 -0
- package/media/Inter-Black.b254104c56.woff +0 -0
- package/media/Inter-BlackItalic.70306b0eae.woff +0 -0
- package/media/Inter-BlackItalic.752f1e0aaa.woff2 +0 -0
- package/media/Inter-Bold.579e0f95ca.woff2 +0 -0
- package/media/Inter-Bold.b1234477a5.woff +0 -0
- package/media/Inter-BoldItalic.3d0d804323.woff +0 -0
- package/media/Inter-BoldItalic.828a494e04.woff2 +0 -0
- package/media/Inter-ExtraBold.208a9e6c99.woff +0 -0
- package/media/Inter-ExtraBold.d65f028165.woff2 +0 -0
- package/media/Inter-ExtraBoldItalic.30429962ec.woff +0 -0
- package/media/Inter-ExtraBoldItalic.8c7eac5ce3.woff2 +0 -0
- package/media/Inter-ExtraLight.15c082a57d.woff +0 -0
- package/media/Inter-ExtraLight.6824177d1e.woff2 +0 -0
- package/media/Inter-ExtraLightItalic.05138dddf3.woff2 +0 -0
- package/media/Inter-ExtraLightItalic.3beee54f59.woff +0 -0
- package/media/Inter-Italic.9beab78452.woff +0 -0
- package/media/Inter-Italic.d593a8df79.woff2 +0 -0
- package/media/Inter-Light.27083fa637.woff2 +0 -0
- package/media/Inter-Light.91dfddd842.woff +0 -0
- package/media/Inter-LightItalic.0a783b89b3.woff2 +0 -0
- package/media/Inter-LightItalic.f8ccf2813f.woff +0 -0
- package/media/Inter-Medium.dc792b508e.woff2 +0 -0
- package/media/Inter-Medium.ec7dd2d9d8.woff +0 -0
- package/media/Inter-MediumItalic.17301e5b40.woff +0 -0
- package/media/Inter-MediumItalic.84d3493a9f.woff2 +0 -0
- package/media/Inter-Regular.f1f0c35b32.woff2 +0 -0
- package/media/Inter-Regular.f356e84aa0.woff +0 -0
- package/media/Inter-SemiBold.55027e4724.woff +0 -0
- package/media/Inter-SemiBold.fcb100c760.woff2 +0 -0
- package/media/Inter-SemiBoldItalic.ab9105ed3b.woff +0 -0
- package/media/Inter-SemiBoldItalic.d90f295d0c.woff2 +0 -0
- package/media/Inter-Thin.16325d9b0f.woff +0 -0
- package/media/Inter-Thin.dafaa44d99.woff2 +0 -0
- package/media/Inter-ThinItalic.4fc662b3cf.woff2 +0 -0
- package/media/Inter-ThinItalic.d3d8994788.woff +0 -0
- package/media/Inter-italic.var.958a0b9742.woff2 +0 -0
- package/media/Inter-roman.var.b2129c009c.woff2 +0 -0
- package/package.json +20 -0
- package/packs/widget/api/docking/docking_host.js +97 -0
- package/packs/widget/api/docking/index.js +294 -0
- package/packs/widget/api/docking/shared.js +164 -0
- package/packs/widget/api/docking/viewport_lock.js +488 -0
- package/packs/widget/api/docking/viewport_resize.js +1203 -0
- package/packs/widget/esm/fonts/Inter-Black.796be8d8bf.woff2 +0 -0
- package/packs/widget/esm/fonts/Inter-Black.b254104c56.woff +0 -0
- package/packs/widget/esm/fonts/Inter-BlackItalic.70306b0eae.woff +0 -0
- package/packs/widget/esm/fonts/Inter-BlackItalic.752f1e0aaa.woff2 +0 -0
- package/packs/widget/esm/fonts/Inter-Bold.579e0f95ca.woff2 +0 -0
- package/packs/widget/esm/fonts/Inter-Bold.b1234477a5.woff +0 -0
- package/packs/widget/esm/fonts/Inter-BoldItalic.3d0d804323.woff +0 -0
- package/packs/widget/esm/fonts/Inter-BoldItalic.828a494e04.woff2 +0 -0
- package/packs/widget/esm/fonts/Inter-ExtraBold.208a9e6c99.woff +0 -0
- package/packs/widget/esm/fonts/Inter-ExtraBold.d65f028165.woff2 +0 -0
- package/packs/widget/esm/fonts/Inter-ExtraBoldItalic.30429962ec.woff +0 -0
- package/packs/widget/esm/fonts/Inter-ExtraBoldItalic.8c7eac5ce3.woff2 +0 -0
- package/packs/widget/esm/fonts/Inter-ExtraLight.15c082a57d.woff +0 -0
- package/packs/widget/esm/fonts/Inter-ExtraLight.6824177d1e.woff2 +0 -0
- package/packs/widget/esm/fonts/Inter-ExtraLightItalic.05138dddf3.woff2 +0 -0
- package/packs/widget/esm/fonts/Inter-ExtraLightItalic.3beee54f59.woff +0 -0
- package/packs/widget/esm/fonts/Inter-Italic.9beab78452.woff +0 -0
- package/packs/widget/esm/fonts/Inter-Italic.d593a8df79.woff2 +0 -0
- package/packs/widget/esm/fonts/Inter-Light.27083fa637.woff2 +0 -0
- package/packs/widget/esm/fonts/Inter-Light.91dfddd842.woff +0 -0
- package/packs/widget/esm/fonts/Inter-LightItalic.0a783b89b3.woff2 +0 -0
- package/packs/widget/esm/fonts/Inter-LightItalic.f8ccf2813f.woff +0 -0
- package/packs/widget/esm/fonts/Inter-Medium.dc792b508e.woff2 +0 -0
- package/packs/widget/esm/fonts/Inter-Medium.ec7dd2d9d8.woff +0 -0
- package/packs/widget/esm/fonts/Inter-MediumItalic.17301e5b40.woff +0 -0
- package/packs/widget/esm/fonts/Inter-MediumItalic.84d3493a9f.woff2 +0 -0
- package/packs/widget/esm/fonts/Inter-Regular.f1f0c35b32.woff2 +0 -0
- package/packs/widget/esm/fonts/Inter-Regular.f356e84aa0.woff +0 -0
- package/packs/widget/esm/fonts/Inter-SemiBold.55027e4724.woff +0 -0
- package/packs/widget/esm/fonts/Inter-SemiBold.fcb100c760.woff2 +0 -0
- package/packs/widget/esm/fonts/Inter-SemiBoldItalic.ab9105ed3b.woff +0 -0
- package/packs/widget/esm/fonts/Inter-SemiBoldItalic.d90f295d0c.woff2 +0 -0
- package/packs/widget/esm/fonts/Inter-Thin.16325d9b0f.woff +0 -0
- package/packs/widget/esm/fonts/Inter-Thin.dafaa44d99.woff2 +0 -0
- package/packs/widget/esm/fonts/Inter-ThinItalic.4fc662b3cf.woff2 +0 -0
- package/packs/widget/esm/fonts/Inter-ThinItalic.d3d8994788.woff +0 -0
- package/packs/widget/esm/fonts/Inter-italic.var.958a0b9742.woff2 +0 -0
- package/packs/widget/esm/fonts/Inter-roman.var.b2129c009c.woff2 +0 -0
- package/packs/widget/esm/index.js +183 -0
- package/packs/widget/esm/qualified.css +5502 -0
- package/routes/app/offers/scripts/OfferMainScript.js +154 -0
- package/routes/app/offers/scripts/constants.js +71 -0
- package/routes/app/offers/scripts/main/ButtonManager.js +65 -0
- package/routes/app/offers/scripts/main/FormManager.js +325 -0
- package/routes/app/offers/scripts/main/MainContext.js +19 -0
- package/routes/app/offers/scripts/main/OfferManager.js +91 -0
- package/routes/app/offers/scripts/main/TriggerManager.js +125 -0
- package/routes/app/offers/scripts/rendering/ContentManager.js +53 -0
- package/routes/app/offers/scripts/rendering/LocationManager.js +83 -0
- package/routes/app/offers/scripts/rendering/RenderedOffer.js +188 -0
- package/routes/app/offers/scripts/rendering/Renderer.js +69 -0
- package/routes/app/offers/scripts/rendering/RenderingInitializer.js +62 -0
- package/routes/app/offers/scripts/rendering/animations/AnimationManager.js +31 -0
- package/routes/app/offers/scripts/rendering/animations/AnimationManagerFooter.js +81 -0
- package/routes/app/offers/scripts/rendering/animations/AnimationManagerHeader.js +81 -0
- package/routes/app/offers/scripts/rendering/animations/AnimationManagerModal.js +117 -0
- package/routes/app/offers/scripts/rendering/animations/AnimationManagerSidebar.js +75 -0
- package/routes/app/offers/scripts/rendering/animations/AnimationResult.js +43 -0
- package/routes/app/offers/scripts/rendering/animations/Animator.js +78 -0
- package/routes/app/offers/scripts/rendering/animations/BaseAnimationManager.js +25 -0
- package/routes/app/offers/scripts/rendering/lib/BaseComponent.js +106 -0
- package/routes/app/offers/scripts/rendering/lib/FormComponent.js +134 -0
- package/routes/app/offers/scripts/rendering/lib/OfferComponent.js +144 -0
- package/routes/app/offers/scripts/rendering/lib/ScrollbarWidth.js +27 -0
- package/routes/app/offers/scripts/rendering/lib/decorators.js +20 -0
- package/routes/app/offers/scripts/rendering/locations/CSSVarsManager.js +66 -0
- package/routes/app/offers/scripts/rendering/locations/ElementResizeObserver.js +49 -0
- package/routes/app/offers/scripts/rendering/locations/footer.js +53 -0
- package/routes/app/offers/scripts/rendering/locations/header/AsyncBatchProcessor.js +70 -0
- package/routes/app/offers/scripts/rendering/locations/header/CSSTransitionObserver.js +182 -0
- package/routes/app/offers/scripts/rendering/locations/header/ElementStyleChangeObserver.js +138 -0
- package/routes/app/offers/scripts/rendering/locations/header/ExternalStyleManager.js +110 -0
- package/routes/app/offers/scripts/rendering/locations/header/Header.js +353 -0
- package/routes/app/offers/scripts/rendering/locations/header/InlineStyleManager.js +105 -0
- package/routes/app/offers/scripts/rendering/locations/header/MatchingElementsObserver.js +107 -0
- package/routes/app/offers/scripts/rendering/locations/header/NewElementsObserver.js +129 -0
- package/routes/app/offers/scripts/rendering/locations/header/RuleWrapper.js +46 -0
- package/routes/app/offers/scripts/rendering/locations/header/SelectorObservable.js +23 -0
- package/routes/app/offers/scripts/rendering/locations/header/SelectorObserver.js +61 -0
- package/routes/app/offers/scripts/rendering/locations/header/ShiftedElementsManager.js +45 -0
- package/routes/app/offers/scripts/rendering/locations/header/StyleElementManager.js +37 -0
- package/routes/app/offers/scripts/rendering/locations/header/StyleElementWrapper.js +62 -0
- package/routes/app/offers/scripts/rendering/locations/header/StyleSelectorObserver/ObservedSelectorValue.js +45 -0
- package/routes/app/offers/scripts/rendering/locations/header/StyleSelectorObserver/ObservedSelectors.js +62 -0
- package/routes/app/offers/scripts/rendering/locations/header/StyleSelectorObserver/StyleSelectorObserver.js +294 -0
- package/routes/app/offers/scripts/rendering/locations/header/StyleSelectorObserver/constants.js +21 -0
- package/routes/app/offers/scripts/rendering/locations/header/WindowResizeObserver.js +43 -0
- package/routes/app/offers/scripts/rendering/locations/header/utils.js +25 -0
- package/routes/app/offers/scripts/rendering/locations/popup.js +66 -0
- package/routes/app/offers/scripts/rendering/locations/sidebar.js +21 -0
- package/routes/app/offers/scripts/rendering/variations/ButtonBanner.js +105 -0
- package/routes/app/offers/scripts/rendering/variations/ButtonModal.js +114 -0
- package/routes/app/offers/scripts/rendering/variations/FormBanner.js +214 -0
- package/routes/app/offers/scripts/rendering/variations/FormModal.js +325 -0
- package/routes/app/offers/scripts/rendering/variations/LinkBanner.js +105 -0
- package/routes/app/offers/scripts/rendering/variations/components/Body.js +29 -0
- package/routes/app/offers/scripts/rendering/variations/components/Button.js +128 -0
- package/routes/app/offers/scripts/rendering/variations/components/DismissButton.js +39 -0
- package/routes/app/offers/scripts/rendering/variations/components/ForegroundImageBanner.js +110 -0
- package/routes/app/offers/scripts/rendering/variations/components/ForegroundImageModal.js +128 -0
- package/routes/app/offers/scripts/rendering/variations/components/Headline.js +94 -0
- package/routes/app/offers/scripts/rendering/variations/components/MultiFieldForm.js +302 -0
- package/routes/app/offers/scripts/rendering/variations/components/Tooltip.js +74 -0
- package/routes/app/offers/scripts/rendering/variations/icons.js +15 -0
- package/routes/app/offers/scripts/utils.js +115 -0
- package/routes/app/offers/utils/HTMLUtils.js +10 -0
- package/routes/app/offers/utils/createTypeGuard.js +32 -0
- package/routes/app/offers/utils/promise-utils.js +22 -0
- package/routes/app/websiteBuilder/stores/storeHelpers.js +18 -0
- package/sounds/message-initial.mp3 +0 -0
- package/sounds/message-received.mp3 +0 -0
- package/sounds/message-sent.mp3 +0 -0
- package/src/arrays.js +15 -0
- package/src/audio.js +106 -0
- package/src/bounded-set.js +16 -0
- package/src/bounding_box_observer.js +129 -0
- package/src/decorators.js +29 -0
- package/src/dom.js +128 -0
- package/src/dom_roots.js +26 -0
- package/src/embedded_forms/EmbeddedForm.js +638 -0
- package/src/embedded_forms/QualifiedEmbeddedForm.js +51 -0
- package/src/embedded_forms/QualifiedFormField.js +137 -0
- package/src/embedded_forms/utils.js +17 -0
- package/src/graphql-types.js +1686 -0
- package/src/iframes.js +86 -0
- package/src/localstorage.js +43 -0
- package/src/mirror/Shipper.js +133 -0
- package/src/mirror/constants.generated.js +13 -0
- package/src/mirror/constants.js +238 -0
- package/src/mirror/shipper/ChangeQueue.js +155 -0
- package/src/mirror/shipper/DOMSerializer.js +392 -0
- package/src/mirror/shipper/observers.js +441 -0
- package/src/mirror/shipper/utils.js +98 -0
- package/src/mixins/disposable.js +125 -0
- package/src/mixins/injectable.js +37 -0
- package/src/personalizations/personalization-manager.js +110 -0
- package/src/personalizations/strategies/node-freezing-strategy.js +174 -0
- package/src/personalizations/utils.js +187 -0
- package/src/promises.js +107 -0
- package/src/proxy.js +144 -0
- package/src/qualified_root.js +35 -0
- package/src/query_params.js +55 -0
- package/src/shadow-dom-helper.js +63 -0
- package/src/singleton_host.js +39 -0
- package/src/smart_website/trigger.js +49 -0
- package/src/smart_website/utils.js +149 -0
- package/src/string.js +53 -0
- package/src/timezone.js +57 -0
- package/src/timing.js +49 -0
- package/src/type-utils.js +76 -0
- package/src/url-utils.js +102 -0
- package/src/url.js +50 -0
- package/src/utils.js +72 -0
- package/src/validation.js.js +29 -0
- package/src/validation_ts.js +6 -0
- package/vendor/actioncable/adapters.js +6 -0
- package/vendor/actioncable/connection.js +204 -0
- package/vendor/actioncable/connection_monitor.js +129 -0
- package/vendor/actioncable/consumer.js +91 -0
- package/vendor/actioncable/index.js +34 -0
- package/vendor/actioncable/internal.js +22 -0
- package/vendor/actioncable/logger.js +28 -0
- package/vendor/actioncable/subscription.js +93 -0
- package/vendor/actioncable/subscriptions.js +89 -0
- package/vendor/open-telemetry-idgenerator.js +43 -0
- package/widget/analytics/facebook_tracker.js +8 -0
- package/widget/analytics/google_analytics_tracker.js +83 -0
- package/widget/analytics/google_tag_manager_tracker.js +22 -0
- package/widget/analytics.js +58 -0
- package/widget/api_handler/api_handler.js +730 -0
- package/widget/api_handler/base_api_handler.js +249 -0
- package/widget/booker_intent_tracker.js +391 -0
- package/widget/booker_outcome_tracker.js +329 -0
- package/widget/capture_widget_exceptions.js +150 -0
- package/widget/channel.js +282 -0
- package/widget/composite_experience_adapter.js +101 -0
- package/widget/constants.generated.js +350 -0
- package/widget/constants.js +21 -0
- package/widget/container.js +193 -0
- package/widget/content_activity_emitter.js +36 -0
- package/widget/data360_visitor.js +67 -0
- package/widget/date_provider.js +11 -0
- package/widget/debug_mode_state.js +175 -0
- package/widget/dummy_module.js +9 -0
- package/widget/eloqua_visitor.js +17 -0
- package/widget/form_cta_booker_intent.js +246 -0
- package/widget/hubspot_visitor.js +39 -0
- package/widget/inline_meeting_booker_page.js +90 -0
- package/widget/local_state/abstract_local_state.js +38 -0
- package/widget/local_state/debug_state/abstract_debug_flow.js +29 -0
- package/widget/local_state/debug_state/custom_form_flow.js +14 -0
- package/widget/local_state/debug_state/hubspot_form_flow.js +19 -0
- package/widget/local_state/debug_state/hubspot_v4_form_flow.js +19 -0
- package/widget/local_state/debug_state/marketo_form_flow.js +20 -0
- package/widget/local_state/debug_state/pardot_form_flow.js +18 -0
- package/widget/local_state/debug_state.js +362 -0
- package/widget/local_state/trace_state.js +20 -0
- package/widget/location_provider.js +9 -0
- package/widget/marketo_visitor.js +39 -0
- package/widget/meetings/tracing/buttons_forms_triggering_tracer.js +124 -0
- package/widget/meetings/tracing/spans/button_spans.js +18 -0
- package/widget/meetings/tracing/spans/form_spans.js +11 -0
- package/widget/multimodal_v2/assets_preloader.js +97 -0
- package/widget/multimodal_v2/components/AppLayout.js +93 -0
- package/widget/multimodal_v2/components/CursorOverlay.js +93 -0
- package/widget/multimodal_v2/components/PointerRectOverlay.js +74 -0
- package/widget/multimodal_v2/components/app/Artifact.js +109 -0
- package/widget/multimodal_v2/components/app/Background.js +27 -0
- package/widget/multimodal_v2/components/app/CalendarLoadingContent.js +255 -0
- package/widget/multimodal_v2/components/app/Chat.js +39 -0
- package/widget/multimodal_v2/components/app/CookieConsentModal.js +149 -0
- package/widget/multimodal_v2/components/app/Foreground.js +48 -0
- package/widget/multimodal_v2/components/app/HiddenInput.js +41 -0
- package/widget/multimodal_v2/components/app/Input.js +72 -0
- package/widget/multimodal_v2/components/app/LightboxExperience.js +769 -0
- package/widget/multimodal_v2/components/app/LoadingOverlay.js +97 -0
- package/widget/multimodal_v2/components/app/Main.js +985 -0
- package/widget/multimodal_v2/components/app/MessengerButton.js +160 -0
- package/widget/multimodal_v2/components/app/Multimodal.js +17 -0
- package/widget/multimodal_v2/components/app/OverlayControls.js +79 -0
- package/widget/multimodal_v2/components/app/Preview.js +32 -0
- package/widget/multimodal_v2/components/app/PrivacyDisclosure.js +57 -0
- package/widget/multimodal_v2/components/app/RotateDeviceOverlay.js +70 -0
- package/widget/multimodal_v2/components/app/Toolbar.js +156 -0
- package/widget/multimodal_v2/components/chat/ChatComposer.js +129 -0
- package/widget/multimodal_v2/components/chat/ChatInputForm.js +398 -0
- package/widget/multimodal_v2/components/chat/ColdStartQuestions.js +354 -0
- package/widget/multimodal_v2/components/chat/ComposerErrorBanner.js +62 -0
- package/widget/multimodal_v2/components/chat/PostCallSurvey.js +359 -0
- package/widget/multimodal_v2/components/chat/preview/FieldRequestRenderer.js +41 -0
- package/widget/multimodal_v2/components/chat/preview/PreviewMessageRenderer.js +60 -0
- package/widget/multimodal_v2/components/chat/preview/SharedOfferRenderer.js +143 -0
- package/widget/multimodal_v2/components/chat/preview/TextRenderer.js +27 -0
- package/widget/multimodal_v2/components/chat/preview/TimelinePreview.js +254 -0
- package/widget/multimodal_v2/components/chat/timeline/CalendarEventOfferRenderer.js +103 -0
- package/widget/multimodal_v2/components/chat/timeline/CalendarEventPickRenderer.js +148 -0
- package/widget/multimodal_v2/components/chat/timeline/FieldEntryRenderer.js +84 -0
- package/widget/multimodal_v2/components/chat/timeline/FieldRequestRenderer.js +56 -0
- package/widget/multimodal_v2/components/chat/timeline/InlinePrivacyDisclosure.js +66 -0
- package/widget/multimodal_v2/components/chat/timeline/LinkPreviewCard.js +70 -0
- package/widget/multimodal_v2/components/chat/timeline/MessageEntry.js +88 -0
- package/widget/multimodal_v2/components/chat/timeline/PresentContentRenderer.js +30 -0
- package/widget/multimodal_v2/components/chat/timeline/PresentDeckRenderer.js +279 -0
- package/widget/multimodal_v2/components/chat/timeline/PresentVideoRenderer.js +131 -0
- package/widget/multimodal_v2/components/chat/timeline/ShareContentRenderer.js +59 -0
- package/widget/multimodal_v2/components/chat/timeline/SharedOfferRenderer.js +131 -0
- package/widget/multimodal_v2/components/chat/timeline/SystemRenderer.js +82 -0
- package/widget/multimodal_v2/components/chat/timeline/TextRenderer.js +66 -0
- package/widget/multimodal_v2/components/chat/timeline/Timeline.js +158 -0
- package/widget/multimodal_v2/components/debug/DebugMultimodalPanel.js +327 -0
- package/widget/multimodal_v2/components/decks/index.js +160 -0
- package/widget/multimodal_v2/components/field_request/BooleanField.js +77 -0
- package/widget/multimodal_v2/components/field_request/FieldComponents.js +69 -0
- package/widget/multimodal_v2/components/field_request/Form.js +87 -0
- package/widget/multimodal_v2/components/field_request/MultiPicklistField.js +240 -0
- package/widget/multimodal_v2/components/field_request/PicklistField.js +166 -0
- package/widget/multimodal_v2/components/field_request/SingleLineInputField.js +69 -0
- package/widget/multimodal_v2/components/field_request/TextField.js +37 -0
- package/widget/multimodal_v2/components/field_request/index.js +170 -0
- package/widget/multimodal_v2/components/helpers/AutoScroll.js +37 -0
- package/widget/multimodal_v2/components/helpers/ErrorBoundary.js +53 -0
- package/widget/multimodal_v2/components/helpers/FocusTrapDialog.js +26 -0
- package/widget/multimodal_v2/components/helpers/ImpressionTracker.js +94 -0
- package/widget/multimodal_v2/components/helpers/ListRenderer.js +37 -0
- package/widget/multimodal_v2/components/helpers/Localization.js +76 -0
- package/widget/multimodal_v2/components/helpers/Persisted.js +166 -0
- package/widget/multimodal_v2/components/helpers/RichText.js +358 -0
- package/widget/multimodal_v2/components/helpers/ScreenReaderHeading.js +17 -0
- package/widget/multimodal_v2/components/helpers/Thumbnail.js +190 -0
- package/widget/multimodal_v2/components/helpers/VisuallyHidden.js +41 -0
- package/widget/multimodal_v2/components/helpers/content_click_payloads.js +58 -0
- package/widget/multimodal_v2/components/helpers/useDraggable.js +103 -0
- package/widget/multimodal_v2/components/helpers/useTextOverflow.js +44 -0
- package/widget/multimodal_v2/components/lightbox_gather/index.js +741 -0
- package/widget/multimodal_v2/components/meetings/ArtifactEntryPoint.js +252 -0
- package/widget/multimodal_v2/components/meetings/MeetingAdditionalAttendees.js +325 -0
- package/widget/multimodal_v2/components/meetings/MeetingBookerEntry.js +100 -0
- package/widget/multimodal_v2/components/meetings/MeetingDetailsCard.js +99 -0
- package/widget/multimodal_v2/components/meetings/MeetingErrorBanner.js +62 -0
- package/widget/multimodal_v2/components/meetings/MeetingOfferEmailStep.js +239 -0
- package/widget/multimodal_v2/components/meetings/MeetingOfferFooter.js +104 -0
- package/widget/multimodal_v2/components/meetings/MeetingOfferSelectionStep.js +60 -0
- package/widget/multimodal_v2/components/meetings/MeetingRepHeader.js +222 -0
- package/widget/multimodal_v2/components/meetings/MeetingStepShell.js +92 -0
- package/widget/multimodal_v2/components/meetings/MeetingSummaryRail.js +515 -0
- package/widget/multimodal_v2/components/meetings/MeetingTimeSelector.js +603 -0
- package/widget/multimodal_v2/components/meetings/MonthDatePicker.js +422 -0
- package/widget/multimodal_v2/components/meetings/NavigationButtons.js +76 -0
- package/widget/multimodal_v2/components/meetings/TimeSlotHeader.js +357 -0
- package/widget/multimodal_v2/components/meetings/WeekViewHeader.js +20 -0
- package/widget/multimodal_v2/components/meetings/constants.js +7 -0
- package/widget/multimodal_v2/components/meetings/index.js +47 -0
- package/widget/multimodal_v2/components/meetings/utils.js +328 -0
- package/widget/multimodal_v2/components/multimodal/Audio.js +28 -0
- package/widget/multimodal_v2/components/multimodal/Controls.js +188 -0
- package/widget/multimodal_v2/components/multimodal/LiveVideo.js +63 -0
- package/widget/multimodal_v2/components/multimodal/MultiModalComponent.js +424 -0
- package/widget/multimodal_v2/components/multimodal/MultimodalAvatar.js +36 -0
- package/widget/multimodal_v2/components/multimodal/OrbAvatar.js +326 -0
- package/widget/multimodal_v2/components/multimodal/Status.js +220 -0
- package/widget/multimodal_v2/components/multimodal/VideoAvatar.js +24 -0
- package/widget/multimodal_v2/components/multimodal/VideoPreview.js +114 -0
- package/widget/multimodal_v2/components/multimodal/useAudioLevelMonitoring.js +96 -0
- package/widget/multimodal_v2/components/multimodal/useMultimodal.js +434 -0
- package/widget/multimodal_v2/components/presentations/index.js +372 -0
- package/widget/multimodal_v2/components/shared/Avatar.js +92 -0
- package/widget/multimodal_v2/components/shared/AvatarGroup.js +135 -0
- package/widget/multimodal_v2/components/shared/Button.js +245 -0
- package/widget/multimodal_v2/components/shared/ButtonGroup.js +133 -0
- package/widget/multimodal_v2/components/shared/ComposerForm.js +98 -0
- package/widget/multimodal_v2/components/shared/SpeakingIndicator.js +239 -0
- package/widget/multimodal_v2/components/shared/ThinkingAnimation.js +165 -0
- package/widget/multimodal_v2/components/shared/Tooltip.js +266 -0
- package/widget/multimodal_v2/components/shared/controls/Dropdown.js +79 -0
- package/widget/multimodal_v2/components/shared/controls/PillToggle.js +142 -0
- package/widget/multimodal_v2/components/shared/controls/TextArea.js +114 -0
- package/widget/multimodal_v2/components/shared/toolCallLabels.js +12 -0
- package/widget/multimodal_v2/components/slides/SlidesThumbnail.js +47 -0
- package/widget/multimodal_v2/components/slides/index.js +61 -0
- package/widget/multimodal_v2/constants.js +88 -0
- package/widget/multimodal_v2/host.split-css.js +2 -0
- package/widget/multimodal_v2/host.string.js +96 -0
- package/widget/multimodal_v2/images/icons.js +582 -0
- package/widget/multimodal_v2/images/posters/piper_low_res.jpg +0 -0
- package/widget/multimodal_v2/index.js +23 -0
- package/widget/multimodal_v2/index.panda.js +28 -0
- package/widget/multimodal_v2/index.split-css.panda.js +2 -0
- package/widget/multimodal_v2/inline_meeting_booker.js +182 -0
- package/widget/multimodal_v2/locales/cs.js +196 -0
- package/widget/multimodal_v2/locales/da.js +196 -0
- package/widget/multimodal_v2/locales/de.js +196 -0
- package/widget/multimodal_v2/locales/en.js +196 -0
- package/widget/multimodal_v2/locales/en_AU.js +197 -0
- package/widget/multimodal_v2/locales/en_GB.js +197 -0
- package/widget/multimodal_v2/locales/es.js +197 -0
- package/widget/multimodal_v2/locales/es_LA.js +196 -0
- package/widget/multimodal_v2/locales/fi.js +196 -0
- package/widget/multimodal_v2/locales/fr.js +197 -0
- package/widget/multimodal_v2/locales/fr_CA.js +196 -0
- package/widget/multimodal_v2/locales/id.js +196 -0
- package/widget/multimodal_v2/locales/index.js +48 -0
- package/widget/multimodal_v2/locales/it.js +196 -0
- package/widget/multimodal_v2/locales/ja.js +196 -0
- package/widget/multimodal_v2/locales/ko.js +196 -0
- package/widget/multimodal_v2/locales/nb.js +196 -0
- package/widget/multimodal_v2/locales/nl.js +196 -0
- package/widget/multimodal_v2/locales/pl.js +196 -0
- package/widget/multimodal_v2/locales/pt_BR.js +196 -0
- package/widget/multimodal_v2/locales/ru.js +196 -0
- package/widget/multimodal_v2/locales/sv.js +196 -0
- package/widget/multimodal_v2/locales/th.js +196 -0
- package/widget/multimodal_v2/locales/tr.js +196 -0
- package/widget/multimodal_v2/locales/vi.js +196 -0
- package/widget/multimodal_v2/locales/zh_CN.js +196 -0
- package/widget/multimodal_v2/locales/zh_TW.js +196 -0
- package/widget/multimodal_v2/multimodal.js +633 -0
- package/widget/multimodal_v2/multimodal_channel.js +195 -0
- package/widget/multimodal_v2/signals/active_conversation_signal.js +33 -0
- package/widget/multimodal_v2/signals/allowed_conversation_mode_signal.js +38 -0
- package/widget/multimodal_v2/signals/artifact_signal.js +22 -0
- package/widget/multimodal_v2/signals/layout_signal.js +98 -0
- package/widget/multimodal_v2/signals/messages_signal.js +207 -0
- package/widget/multimodal_v2/signals/ui_state_signal.js +128 -0
- package/widget/multimodal_v2/stable_bundle_src.js +44 -0
- package/widget/multimodal_v2/stores/ai_conversation_store.js +221 -0
- package/widget/multimodal_v2/stores/artifact_store.js +205 -0
- package/widget/multimodal_v2/stores/base_store.js +16 -0
- package/widget/multimodal_v2/stores/call_store.js +770 -0
- package/widget/multimodal_v2/stores/call_ui_adapter.js +225 -0
- package/widget/multimodal_v2/stores/debug_multimodal_scenario_store.js +471 -0
- package/widget/multimodal_v2/stores/decks_store.js +285 -0
- package/widget/multimodal_v2/stores/device_store.js +63 -0
- package/widget/multimodal_v2/stores/docking_store.js +62 -0
- package/widget/multimodal_v2/stores/field_request_store.js +326 -0
- package/widget/multimodal_v2/stores/meeting_store.js +477 -0
- package/widget/multimodal_v2/stores/participant_store.js +73 -0
- package/widget/multimodal_v2/stores/post_call_survey_store.js +160 -0
- package/widget/multimodal_v2/stores/pounce_tracking_store.js +163 -0
- package/widget/multimodal_v2/stores/pounce_tracking_store_v2.js +511 -0
- package/widget/multimodal_v2/stores/presentations_store.js +111 -0
- package/widget/multimodal_v2/stores/root_store.js +1919 -0
- package/widget/multimodal_v2/stores/screen_share_store.js +217 -0
- package/widget/multimodal_v2/stores/slides_store.js +21 -0
- package/widget/multimodal_v2/stores/translation_store.js +185 -0
- package/widget/multimodal_v2/stores/ui_store.js +496 -0
- package/widget/multimodal_v2/stores/waiting_store.js +159 -0
- package/widget/multimodal_v2/stores/website_navigation_store.js +767 -0
- package/widget/multimodal_v2/styled-system/css/conditions.js +34 -0
- package/widget/multimodal_v2/styled-system/css/css.js +48 -0
- package/widget/multimodal_v2/styled-system/css/cva.js +96 -0
- package/widget/multimodal_v2/styled-system/css/cx.js +13 -0
- package/widget/multimodal_v2/styled-system/css/index.js +15 -0
- package/widget/multimodal_v2/styled-system/css/sva.js +69 -0
- package/widget/multimodal_v2/styled-system/helpers.js +384 -0
- package/widget/multimodal_v2/styled-system/jsx/create-style-context.js +96 -0
- package/widget/multimodal_v2/styled-system/jsx/factory-helper.js +19 -0
- package/widget/multimodal_v2/styled-system/jsx/factory.js +111 -0
- package/widget/multimodal_v2/styled-system/jsx/index.js +12 -0
- package/widget/multimodal_v2/styled-system/jsx/is-valid-prop.js +22 -0
- package/widget/multimodal_v2/types.js +105 -0
- package/widget/multimodal_v2/utils/auto_scroller.js +157 -0
- package/widget/multimodal_v2/utils/flip_animation.js +124 -0
- package/widget/multimodal_v2/utils/focus_gate.js +237 -0
- package/widget/multimodal_v2/utils/locale.js +16 -0
- package/widget/multimodal_v2/utils/media_queries.js +30 -0
- package/widget/multimodal_v2/utils/multimodal_cache.js +19 -0
- package/widget/multimodal_v2/utils/mutation_effect.js +14 -0
- package/widget/multimodal_v2/utils/navigation_interceptor.js +205 -0
- package/widget/multimodal_v2/utils/navigation_strategies/dom_swap.js +393 -0
- package/widget/multimodal_v2/utils/navigation_strategies/index.js +12 -0
- package/widget/multimodal_v2/utils/navigation_strategies/lwr.js +61 -0
- package/widget/multimodal_v2/utils/navigation_strategies/navigation_utils.js +46 -0
- package/widget/multimodal_v2/utils/navigation_strategies/next_js.js +24 -0
- package/widget/multimodal_v2/utils/navigation_strategies/wouter_v3.js +15 -0
- package/widget/multimodal_v2/utils/objects_map.js +38 -0
- package/widget/multimodal_v2/utils/perceived_voice_turn_tracker.js +345 -0
- package/widget/multimodal_v2/utils/sanitize_html.js +132 -0
- package/widget/multimodal_v2/utils/signals.js +97 -0
- package/widget/multimodal_v2/utils/slide_zoom.js +114 -0
- package/widget/multimodal_v2/utils/theme_styles.js +137 -0
- package/widget/multimodal_v2/utils/url_observer.js +52 -0
- package/widget/multimodal_v2/utils/voice_onset_detector.js +127 -0
- package/widget/page_mirror.js +89 -0
- package/widget/page_view_activity_emitter.js +71 -0
- package/widget/pardot_visitor.js +137 -0
- package/widget/personalization_observer.js +96 -0
- package/widget/personalizations_config.js +160 -0
- package/widget/qualified_form/constants.js +23 -0
- package/widget/qualified_form/phone_utils.js +38 -0
- package/widget/qualified_form/qualified_form_action.js +91 -0
- package/widget/qualified_form/qualified_form_action_orchestrator.js +21 -0
- package/widget/qualified_form/qualified_form_api.js +471 -0
- package/widget/scroll_disabler.js +109 -0
- package/widget/server-logger.js +156 -0
- package/widget/smart_website_config.js +112 -0
- package/widget/telemetry/context.js +75 -0
- package/widget/telemetry/index.js +16 -0
- package/widget/telemetry/messenger_uptime.js +80 -0
- package/widget/telemetry/metrics.js +120 -0
- package/widget/telemetry/span.js +82 -0
- package/widget/telemetry/telemetry.js +180 -0
- package/widget/telemetry/tracer.js +41 -0
- package/widget/telemetry/tracing_store.js +310 -0
- package/widget/tracker.js +916 -0
- package/widget/utils/native_globals.js +129 -0
- package/widget/v1_adapter.js +50 -0
- package/widget/v2_adapter.js +368 -0
- package/widget/visitor/base_visitor_state.js +11 -0
- package/widget/visitor/cookie_visitor_state.js +128 -0
- package/widget/visitor/in_memory_visitor_state.js +29 -0
- package/widget/visitor/visitor_state.js +384 -0
- package/widget/visitor.js +356 -0
- package/widget/widget/linked_widget_v2.js +227 -0
- package/widget/widget/page_mirror_factory.js +22 -0
- package/widget/widget/sentry.js +130 -0
- package/widget/widget/widget.js +1698 -0
- package/widget/widget.split-css.js +2 -0
- package/widget/widget_bootstrap.js +97 -0
- package/widget/widget_object.js +73 -0
|
@@ -0,0 +1,329 @@
|
|
|
1
|
+
import { __webpack_require__ } from "../js/runtime.js";
|
|
2
|
+
import "./utils/native_globals.js";
|
|
3
|
+
import { _extends } from "../js/4101.js";
|
|
4
|
+
|
|
5
|
+
/* provided dependency */ var booker_outcome_tracker_setTimeout = __webpack_require__(68034).pS;
|
|
6
|
+
/* provided dependency */ var __nativeWindowAddEventListener = __webpack_require__(68034).zh;
|
|
7
|
+
/* provided dependency */ var __nativeDocumentAddEventListener = __webpack_require__(68034).Qj;
|
|
8
|
+
/* provided dependency */ var booker_outcome_tracker_clearTimeout = __webpack_require__(68034).Kj;
|
|
9
|
+
/* provided dependency */ var __nativeWindowRemoveEventListener = __webpack_require__(68034).kZ;
|
|
10
|
+
/* provided dependency */ var __nativeDocumentRemoveEventListener = __webpack_require__(68034).LA;
|
|
11
|
+
|
|
12
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
13
|
+
// Booker SLI classification — two ORTHOGONAL axes; do not conflate them:
|
|
14
|
+
//
|
|
15
|
+
// pathway_origin — how/where the visitor reached the offer. SERVER-CANONICAL:
|
|
16
|
+
// values MUST match Ruby `Telemetry::Attributes::PathwayOrigin` (derived from
|
|
17
|
+
// conversation_type + offer.source + live_booker) so this client SLI
|
|
18
|
+
// reconciles with the server `book_calendar_event` log.
|
|
19
|
+
// surface — which client app rendered the booker (ours; failure-localization).
|
|
20
|
+
// NOT "where the visitor was" — that's pathway_origin.
|
|
21
|
+
//
|
|
22
|
+
// pathway_origin | conversation_type | surface | this SLI?
|
|
23
|
+
// ---------------|-------------------------------|------------------------|----------
|
|
24
|
+
// chat | chat (source != auto_respond) | legacy | yes
|
|
25
|
+
// ai_agent | chat (source == auto_respond) | multimodal | yes
|
|
26
|
+
// form | element | legacy | multimodal | yes (each app's lightbox)
|
|
27
|
+
// meeting_link | meeting_link[_routed] | standalone | not yet (convergence)
|
|
28
|
+
// live_booking | live_booking | (live_booker) | no (rep-side)
|
|
29
|
+
//
|
|
30
|
+
// web_extension composes slot links in Gmail; the prospect self-books on the
|
|
31
|
+
// standalone page (flagged `web_extension_offer` server-side) — not a surface here.
|
|
32
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
33
|
+
const BOOKER_OUTCOME = {
|
|
34
|
+
SHOWN: "shown",
|
|
35
|
+
FAILED: "failed",
|
|
36
|
+
ABANDONED: "abandoned"
|
|
37
|
+
};
|
|
38
|
+
// Mirror of Ruby `Telemetry::Attributes::PathwayOrigin` — values MUST stay
|
|
39
|
+
// identical so the SLI reconciles with `book_calendar_event`. The client only
|
|
40
|
+
// derives chat/form/ai_agent; meeting_link/live_booking belong to surfaces this
|
|
41
|
+
// SLI does not emit (standalone, live booker) and are kept for the shared vocabulary.
|
|
42
|
+
const BOOKER_PATHWAY_ORIGIN = {
|
|
43
|
+
CHAT: "chat",
|
|
44
|
+
FORM: "form",
|
|
45
|
+
AI_AGENT: "ai_agent",
|
|
46
|
+
MEETING_LINK: "meeting_link",
|
|
47
|
+
LIVE_BOOKING: "live_booking"
|
|
48
|
+
};
|
|
49
|
+
// Which client app rendered the booker (NOT where the visitor was — that is
|
|
50
|
+
// pathway_origin). `legacy` = the classic React widget runtime (in-chat messenger
|
|
51
|
+
// + its form/CTA lightbox); `multimodal` = the Preact multimodal widget;
|
|
52
|
+
// `standalone` = the meeting-link page, which emits this vocabulary through its
|
|
53
|
+
// own `StandaloneBookerSli` rather than through this tracker.
|
|
54
|
+
const BOOKER_SURFACE = {
|
|
55
|
+
LEGACY: "legacy",
|
|
56
|
+
MULTIMODAL: "multimodal",
|
|
57
|
+
STANDALONE: "standalone"
|
|
58
|
+
};
|
|
59
|
+
// Client-observed pipeline stage this SLI reports on, stamped on the same
|
|
60
|
+
// `@meeting_stage` facet as the server meeting logs. Distinct from the server's
|
|
61
|
+
// `available_slots` ("calendar computed") - this is the client "booker rendered
|
|
62
|
+
// to the visitor" step.
|
|
63
|
+
const BOOKER_SHOWN_MEETING_STAGE = "booker_shown";
|
|
64
|
+
// Standalone booker uses a 90s watchdog; mirror it for the embedded surfaces.
|
|
65
|
+
const BOOKER_LOAD_TIMEOUT_MS = 90000;
|
|
66
|
+
/**
|
|
67
|
+
* Mirror of Ruby `PathwayOrigin::CONVERSATION_TYPE_MAP`. Kept as a map rather
|
|
68
|
+
* than a chain of conditionals so a missing entry is visible against the server's
|
|
69
|
+
* own table instead of silently falling through to the default.
|
|
70
|
+
*/ const CONVERSATION_TYPE_TO_PATHWAY = {
|
|
71
|
+
chat: BOOKER_PATHWAY_ORIGIN.CHAT,
|
|
72
|
+
element: BOOKER_PATHWAY_ORIGIN.FORM,
|
|
73
|
+
meeting_link: BOOKER_PATHWAY_ORIGIN.MEETING_LINK,
|
|
74
|
+
meeting_link_routed: BOOKER_PATHWAY_ORIGIN.MEETING_LINK
|
|
75
|
+
};
|
|
76
|
+
/**
|
|
77
|
+
* Derives the canonical `pathway_origin` tag from socket-serialized values,
|
|
78
|
+
* normalized defensively for enum casing.
|
|
79
|
+
*
|
|
80
|
+
* Follows the server's precedence exactly (`PathwayOrigin.derive`): conversation
|
|
81
|
+
* type decides first, and `auto_respond` only promotes to `ai_agent` when that
|
|
82
|
+
* type is `chat`. Checking the offer source first — as this did — reported
|
|
83
|
+
* `ai_agent` for an `auto_respond` offer in a `meeting_link` conversation, where
|
|
84
|
+
* the server says `meeting_link`.
|
|
85
|
+
*
|
|
86
|
+
* `meeting_link` / `meeting_link_routed` are unreachable from today's callers:
|
|
87
|
+
* `StandaloneMeetingBooker` renders `LightboxEntry` without a `serverLog`, so the
|
|
88
|
+
* widget tracker no-ops there and standalone emits through `StandaloneBookerSli`
|
|
89
|
+
* with the pathway passed as a literal. They are mapped anyway because this
|
|
90
|
+
* function is specified to mirror the Ruby enum — see the file header — and a
|
|
91
|
+
* partial mirror is the bug it just had for `element`: a type the server
|
|
92
|
+
* recognises, silently relabelled `chat` here. Completeness is the contract,
|
|
93
|
+
* independent of which entries anything currently reaches.
|
|
94
|
+
*
|
|
95
|
+
* One deliberate divergence: the server returns `nil` for an unrecognised type
|
|
96
|
+
* ("never assert a pathway we can't determine"); this returns `chat`, because the
|
|
97
|
+
* tracker needs a value to emit at all and dropping the event loses more than a
|
|
98
|
+
* slightly wrong tag on a conversation type that does not exist yet.
|
|
99
|
+
*/ function bookerPathwayOrigin(conversationType, offerSource) {
|
|
100
|
+
var _CONVERSATION_TYPE_TO_PATHWAY__toLowerCase;
|
|
101
|
+
const origin = (_CONVERSATION_TYPE_TO_PATHWAY__toLowerCase = CONVERSATION_TYPE_TO_PATHWAY[(conversationType != null ? conversationType : "").toLowerCase()]) != null ? _CONVERSATION_TYPE_TO_PATHWAY__toLowerCase : BOOKER_PATHWAY_ORIGIN.CHAT;
|
|
102
|
+
if (origin === BOOKER_PATHWAY_ORIGIN.CHAT && (offerSource != null ? offerSource : "").toLowerCase() === "auto_respond") {
|
|
103
|
+
return BOOKER_PATHWAY_ORIGIN.AI_AGENT;
|
|
104
|
+
}
|
|
105
|
+
return origin;
|
|
106
|
+
}
|
|
107
|
+
// One terminal outcome per offer, enforced across tracker instances: a booker
|
|
108
|
+
// component can mount more than once for the same offer (e.g. a remount in the
|
|
109
|
+
// legacy lightbox), and each mount arms its own tracker. Dedupe by offer id so
|
|
110
|
+
// the SLI counts each offer once regardless of how many trackers see it.
|
|
111
|
+
const emittedOfferIds = new Set();
|
|
112
|
+
/** Test-only: clears the cross-instance dedupe set between cases. */ function resetEmittedBookerOutcomes() {
|
|
113
|
+
emittedOfferIds.clear();
|
|
114
|
+
}
|
|
115
|
+
class BookerOutcomeTracker {
|
|
116
|
+
arm(offerMessageId, pathwayOrigin, conversationType) {
|
|
117
|
+
this.safely(()=>{
|
|
118
|
+
// Re-arming (offer -> offer without an intervening dispose) must cancel the
|
|
119
|
+
// previous offer's watchdog and listener first; otherwise the stale timer
|
|
120
|
+
// fires against the new offer's id and emits a premature `failed`.
|
|
121
|
+
this.teardown();
|
|
122
|
+
this.offerMessageId = offerMessageId;
|
|
123
|
+
this.pathwayOrigin = pathwayOrigin;
|
|
124
|
+
this.conversationType = conversationType;
|
|
125
|
+
// `undefined`, not 0, when there is no clock: 0 is a legitimate
|
|
126
|
+
// `performance.now()` reading, so falling back to it made an unmeasurable
|
|
127
|
+
// arm indistinguishable from one at page load. `timing()` then computed
|
|
128
|
+
// `now() - 0` — time since navigation start, not since arm (claude).
|
|
129
|
+
this.armedAtMs = typeof performance !== "undefined" ? performance.now() : undefined;
|
|
130
|
+
this.resolved = false;
|
|
131
|
+
// Seeded from the current state, not just from later transitions: an offer
|
|
132
|
+
// that arrives while the tab is already backgrounded never fires
|
|
133
|
+
// `visibilitychange`, so without this its whole wait would be timed as if
|
|
134
|
+
// the visitor had been watching.
|
|
135
|
+
this.armedWhileHidden = !this.documentVisible();
|
|
136
|
+
this.hiddenAtMs = undefined;
|
|
137
|
+
this.returnedFromHidden = false;
|
|
138
|
+
this.timeoutId = booker_outcome_tracker_setTimeout(this.handleTimeout, this.timeoutMs);
|
|
139
|
+
if (typeof window !== "undefined") {
|
|
140
|
+
__nativeWindowAddEventListener("pagehide", this.handlePagehide);
|
|
141
|
+
}
|
|
142
|
+
if (typeof document !== "undefined") {
|
|
143
|
+
__nativeDocumentAddEventListener("visibilitychange", this.handleVisibilityChange);
|
|
144
|
+
}
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
markShown() {
|
|
148
|
+
this.safely(()=>this.resolve(BOOKER_OUTCOME.SHOWN));
|
|
149
|
+
}
|
|
150
|
+
dispose() {
|
|
151
|
+
this.safely(()=>{
|
|
152
|
+
this.teardown();
|
|
153
|
+
this.offerMessageId = null;
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
documentVisible() {
|
|
157
|
+
if (typeof document === "undefined") return true;
|
|
158
|
+
return document.visibilityState === "visible";
|
|
159
|
+
}
|
|
160
|
+
nowMs() {
|
|
161
|
+
return typeof performance !== "undefined" ? performance.now() : 0;
|
|
162
|
+
}
|
|
163
|
+
// This tracker is pure observability; a fault here must never disrupt the
|
|
164
|
+
// booker it instruments. Every public entry point and event handler runs
|
|
165
|
+
// through this guard, so a broken transport (or an exotic browser API) drops
|
|
166
|
+
// one SLI datapoint instead of throwing into the booker's render/init path.
|
|
167
|
+
safely(fn) {
|
|
168
|
+
try {
|
|
169
|
+
fn();
|
|
170
|
+
} catch (unused) {
|
|
171
|
+
// Intentionally swallowed: losing a datapoint is strictly preferable to
|
|
172
|
+
// breaking the meeting booker.
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
resolve(outcome) {
|
|
176
|
+
if (this.resolved || !this.offerMessageId) return;
|
|
177
|
+
this.resolved = true;
|
|
178
|
+
// Tear down before emitting so a throwing transport cannot leak the pending
|
|
179
|
+
// timeout or the pagehide listener.
|
|
180
|
+
this.teardown();
|
|
181
|
+
this.emit(outcome);
|
|
182
|
+
}
|
|
183
|
+
emit(outcome) {
|
|
184
|
+
if (!this.offerMessageId) return;
|
|
185
|
+
if (emittedOfferIds.has(this.offerMessageId)) return;
|
|
186
|
+
emittedOfferIds.add(this.offerMessageId);
|
|
187
|
+
this.log(_extends({
|
|
188
|
+
type: "log",
|
|
189
|
+
message: "booker_outcome",
|
|
190
|
+
extra: _extends({
|
|
191
|
+
meeting_stage: BOOKER_SHOWN_MEETING_STAGE,
|
|
192
|
+
outcome,
|
|
193
|
+
surface: this.surface,
|
|
194
|
+
pathway_origin: this.pathwayOrigin,
|
|
195
|
+
conversation_type: this.conversationType,
|
|
196
|
+
offer_message_id: this.offerMessageId
|
|
197
|
+
}, this.timing(outcome))
|
|
198
|
+
}, outcome === BOOKER_OUTCOME.ABANDONED ? {
|
|
199
|
+
fireAndForget: true
|
|
200
|
+
} : {}));
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Elapsed time from arm, or nothing when it cannot be trusted.
|
|
204
|
+
*
|
|
205
|
+
* Withheld rather than clamped: an absent value is honest about not knowing,
|
|
206
|
+
* whereas a capped one invents a number that looks like a real measurement.
|
|
207
|
+
* Mirrors `StandaloneBookerSli#timing`, which has always done this — the guard
|
|
208
|
+
* was simply never applied to this tracker, though the same reasoning already
|
|
209
|
+
* gates `failed` in `handleTimeout`.
|
|
210
|
+
*
|
|
211
|
+
* The outcome itself is never withheld; only the timing is.
|
|
212
|
+
*
|
|
213
|
+
* What the number means depends on the outcome, so the rule does too.
|
|
214
|
+
*
|
|
215
|
+
* `abandoned` measures the wait before giving up, so its clock stops at the
|
|
216
|
+
* first hidden transition. Browsers fire `visibilitychange:hidden` before
|
|
217
|
+
* `pagehide` on a navigation, so a blanket "was ever hidden" rule would discard
|
|
218
|
+
* every abandoned timing — including the ones where that transition *was* the
|
|
219
|
+
* visitor leaving, which is the number this outcome exists to report.
|
|
220
|
+
*
|
|
221
|
+
* `shown` and `failed` measure time to render, so they need the tab visible
|
|
222
|
+
* throughout. Applying the same clock-stop here would report a paint time from
|
|
223
|
+
* before the paint, which matches no real event.
|
|
224
|
+
*
|
|
225
|
+
* A backgrounded visitor is never penalised by any of this: the booker still
|
|
226
|
+
* resolves `shown` when it renders, and `handleTimeout` refuses to fire while
|
|
227
|
+
* hidden, so not seeing the UI never becomes a failure. Only the timing is
|
|
228
|
+
* withheld.
|
|
229
|
+
*/ timing(outcome) {
|
|
230
|
+
if (typeof performance === "undefined") return {};
|
|
231
|
+
// No visible baseline: the offer arrived to an already-backgrounded tab, so
|
|
232
|
+
// there is no point at which the visitor started waiting.
|
|
233
|
+
if (this.armedWhileHidden) return {};
|
|
234
|
+
// `abandoned` measures how long the visitor waited before giving up, so the
|
|
235
|
+
// clock stops when they stopped watching. On a navigation that transition is
|
|
236
|
+
// the departure itself, which is the number this outcome exists to report.
|
|
237
|
+
if (outcome === BOOKER_OUTCOME.ABANDONED) {
|
|
238
|
+
var _this_hiddenAtMs;
|
|
239
|
+
// Hidden, returned, then left: they waited across two intervals with idle
|
|
240
|
+
// time between, and the tracker cannot subtract the middle out.
|
|
241
|
+
if (this.returnedFromHidden) return {};
|
|
242
|
+
return this.elapsedTo((_this_hiddenAtMs = this.hiddenAtMs) != null ? _this_hiddenAtMs : this.nowMs());
|
|
243
|
+
}
|
|
244
|
+
// `shown` and `failed` measure time to render, which is only meaningful if
|
|
245
|
+
// the visitor was watching for all of it. Stopping the clock at a hidden
|
|
246
|
+
// transition here would report a paint time from before the paint happened —
|
|
247
|
+
// a number matching no real event.
|
|
248
|
+
if (this.hiddenAtMs !== undefined || !this.documentVisible()) return {};
|
|
249
|
+
return this.elapsedTo(this.nowMs());
|
|
250
|
+
}
|
|
251
|
+
elapsedTo(endMs) {
|
|
252
|
+
if (this.armedAtMs === undefined) return {};
|
|
253
|
+
const elapsed = Math.round(endMs - this.armedAtMs);
|
|
254
|
+
return Number.isFinite(elapsed) && elapsed >= 0 ? {
|
|
255
|
+
timing: elapsed
|
|
256
|
+
} : {};
|
|
257
|
+
}
|
|
258
|
+
teardown() {
|
|
259
|
+
if (this.timeoutId !== undefined) {
|
|
260
|
+
booker_outcome_tracker_clearTimeout(this.timeoutId);
|
|
261
|
+
this.timeoutId = undefined;
|
|
262
|
+
}
|
|
263
|
+
if (typeof window !== "undefined") {
|
|
264
|
+
__nativeWindowRemoveEventListener("pagehide", this.handlePagehide);
|
|
265
|
+
}
|
|
266
|
+
if (typeof document !== "undefined") {
|
|
267
|
+
__nativeDocumentRemoveEventListener("visibilitychange", this.handleVisibilityChange);
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
constructor({ surface, log, timeoutMs = BOOKER_LOAD_TIMEOUT_MS }){
|
|
271
|
+
this.offerMessageId = null;
|
|
272
|
+
this.pathwayOrigin = BOOKER_PATHWAY_ORIGIN.CHAT;
|
|
273
|
+
this.conversationType = "chat";
|
|
274
|
+
this.resolved = false;
|
|
275
|
+
// Visibility state for the timing guard. Three fields rather than one boolean
|
|
276
|
+
// because "the tab went hidden" has two very different meanings: the visitor
|
|
277
|
+
// left (the hidden transition IS the departure, and the elapsed time up to it
|
|
278
|
+
// is exactly what we want to report) or the visitor tab-switched and came back
|
|
279
|
+
// (the elapsed time now spans an interval they were not watching, and we
|
|
280
|
+
// cannot subtract it out).
|
|
281
|
+
this.armedWhileHidden = false;
|
|
282
|
+
this.returnedFromHidden = false;
|
|
283
|
+
this.handleTimeout = ()=>{
|
|
284
|
+
this.safely(()=>{
|
|
285
|
+
// Only count a load timeout as a failure when the page is actually visible;
|
|
286
|
+
// a timeout that fires in a hidden tab is not an honest "didn't show".
|
|
287
|
+
if (typeof document !== "undefined" && document.visibilityState !== "visible") return;
|
|
288
|
+
this.resolve(BOOKER_OUTCOME.FAILED);
|
|
289
|
+
});
|
|
290
|
+
};
|
|
291
|
+
// Records visibility transitions for the timing guard only. This deliberately
|
|
292
|
+
// does NOT resolve an outcome: `visibilitychange:hidden` fires on plain tab
|
|
293
|
+
// switches, so treating it as abandonment would be a false positive.
|
|
294
|
+
// Abandonment stays on `pagehide` below; this only decides whether, and up to
|
|
295
|
+
// what moment, the measurement can be trusted.
|
|
296
|
+
this.handleVisibilityChange = ()=>{
|
|
297
|
+
this.safely(()=>{
|
|
298
|
+
if (!this.documentVisible()) {
|
|
299
|
+
var // First hidden transition only — that is when the visitor stopped
|
|
300
|
+
// watching. A later one is irrelevant because returning already
|
|
301
|
+
// invalidated the measurement.
|
|
302
|
+
_this_hiddenAtMs;
|
|
303
|
+
(_this_hiddenAtMs = this.hiddenAtMs) != null ? _this_hiddenAtMs : this.hiddenAtMs = this.nowMs();
|
|
304
|
+
} else if (this.hiddenAtMs !== undefined) {
|
|
305
|
+
this.returnedFromHidden = true;
|
|
306
|
+
}
|
|
307
|
+
});
|
|
308
|
+
};
|
|
309
|
+
// Drive abandonment from `pagehide` (fires reliably on tab close, navigation,
|
|
310
|
+
// refresh) but skip bfcache transitions (`persisted`) — the page can be
|
|
311
|
+
// restored, so the visitor has not abandoned. We deliberately ignore
|
|
312
|
+
// `visibilitychange:hidden`, which fires on plain tab switches too.
|
|
313
|
+
this.handlePagehide = (event)=>{
|
|
314
|
+
this.safely(()=>{
|
|
315
|
+
if (event.persisted) return;
|
|
316
|
+
this.resolve(BOOKER_OUTCOME.ABANDONED);
|
|
317
|
+
});
|
|
318
|
+
};
|
|
319
|
+
this.surface = surface;
|
|
320
|
+
this.log = log;
|
|
321
|
+
this.timeoutMs = timeoutMs;
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
var booker_outcome_tracker_BOOKER_LOAD_TIMEOUT_MS = /* unused export */ undefined;
|
|
326
|
+
var booker_outcome_tracker_BOOKER_OUTCOME = /* unused export */ undefined;
|
|
327
|
+
var booker_outcome_tracker_BOOKER_SHOWN_MEETING_STAGE = /* unused export */ undefined;
|
|
328
|
+
var booker_outcome_tracker_resetEmittedBookerOutcomes = /* unused export */ undefined;
|
|
329
|
+
export { BOOKER_PATHWAY_ORIGIN, BOOKER_SURFACE, BookerOutcomeTracker, bookerPathwayOrigin, booker_outcome_tracker_BOOKER_LOAD_TIMEOUT_MS as BOOKER_LOAD_TIMEOUT_MS, booker_outcome_tracker_BOOKER_OUTCOME as BOOKER_OUTCOME, booker_outcome_tracker_BOOKER_SHOWN_MEETING_STAGE as BOOKER_SHOWN_MEETING_STAGE, booker_outcome_tracker_resetEmittedBookerOutcomes as resetEmittedBookerOutcomes };
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import { getSentryClient } from "./widget/sentry.js";
|
|
2
|
+
import { createPropertyDecorator } from "../src/decorators.js";
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
const handleErrorFn = (options, target, propertyKey, widget)=>(error)=>{
|
|
7
|
+
try {
|
|
8
|
+
var _getSentryClient;
|
|
9
|
+
// Cannot act on falsy errors
|
|
10
|
+
if (!error) return;
|
|
11
|
+
(_getSentryClient = getSentryClient()) == null ? void 0 : _getSentryClient.captureException(error);
|
|
12
|
+
if (options == null ? void 0 : options.sendToServer) {
|
|
13
|
+
const context = (options == null ? void 0 : options.context) || target.constructor.name + "#" + propertyKey;
|
|
14
|
+
const normalizedError = normalizeError(error);
|
|
15
|
+
const extra = {
|
|
16
|
+
context
|
|
17
|
+
};
|
|
18
|
+
if (typeof normalizedError.stack === "string") {
|
|
19
|
+
extra.stack = normalizedError.stack;
|
|
20
|
+
}
|
|
21
|
+
widget.serverLog({
|
|
22
|
+
message: normalizedError.message,
|
|
23
|
+
type: "both",
|
|
24
|
+
extra
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
} catch (e) {
|
|
28
|
+
// Wrap in a try/catch to prevent error-handling code from causing regressions
|
|
29
|
+
console.warn("Qualified: An unexpected issue occurred in captureWidgetExceptions", e); // eslint-disable-line no-console
|
|
30
|
+
}
|
|
31
|
+
// Rethrow unless explicitly told not to
|
|
32
|
+
if ((options == null ? void 0 : options.rethrow) !== false) {
|
|
33
|
+
throw error;
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* Creates a decorator that wraps a method with exception capturing functionality.
|
|
38
|
+
* @param {CaptureWidgetExceptionsOptions | undefined} options - Configuration options for exception capturing
|
|
39
|
+
* @param {any} target - The prototype of the class (for instance methods) or the constructor (for static methods)
|
|
40
|
+
* @param {string} propertyKey - The name of the method being decorated
|
|
41
|
+
* @param {WidgetPropertyDescriptor} descriptor - The property descriptor for the method
|
|
42
|
+
* @returns {PropertyDescriptor} A modified property descriptor with error capturing logic
|
|
43
|
+
*/ const captureWidgetExceptions = createPropertyDecorator((options, target, propertyKey, descriptor)=>{
|
|
44
|
+
const originalMethod = descriptor.value;
|
|
45
|
+
descriptor.value = function() {
|
|
46
|
+
for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){
|
|
47
|
+
args[_key] = arguments[_key];
|
|
48
|
+
}
|
|
49
|
+
const handleError = handleErrorFn(options, target, propertyKey, this.widget);
|
|
50
|
+
try {
|
|
51
|
+
const result = originalMethod.apply(this, args);
|
|
52
|
+
// If the original method was an async function, it'll return a thenable:
|
|
53
|
+
if (result && typeof result.catch === "function") {
|
|
54
|
+
return result.catch(handleError);
|
|
55
|
+
}
|
|
56
|
+
return result;
|
|
57
|
+
} catch (error) {
|
|
58
|
+
handleError(error);
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
return descriptor;
|
|
62
|
+
});
|
|
63
|
+
/**
|
|
64
|
+
* This function handles different error formats and converts them into
|
|
65
|
+
* a standardized object with a 'message' property and an optional 'stack' property.
|
|
66
|
+
* @param {unknown} error - The error to be normalized. Can be a string, Error object,
|
|
67
|
+
* an object with a 'message' property, or any other type.
|
|
68
|
+
* @returns {{ message: string; stack?: string }} An object with the following properties:
|
|
69
|
+
* - message: A string representation of the error message.
|
|
70
|
+
* - stack: (Optional) The error stack trace, if available.
|
|
71
|
+
* @example
|
|
72
|
+
* // 1) String error:
|
|
73
|
+
* normalizeError("err msg") => { message: "err msg" }
|
|
74
|
+
*
|
|
75
|
+
* // 2) Error object:
|
|
76
|
+
* normalizeError(new Error("err msg")) => { message: "err msg", stack: "<STACK_TRACE_HERE>" }
|
|
77
|
+
*
|
|
78
|
+
* // 3) Plain object - attempts JSON.stringify first:
|
|
79
|
+
* normalizeError({ abc: 123 }) => { message: '{"abc":123}' }
|
|
80
|
+
*
|
|
81
|
+
* // 4) Non-stringify-able objects (e.g. circular objects) - falls back to String():
|
|
82
|
+
* const circular = { self: {} }
|
|
83
|
+
* circular.self = circular
|
|
84
|
+
* normalizeError(circular) => { message: "[object Object]" }
|
|
85
|
+
*
|
|
86
|
+
* // 5) Everything else - uses String():
|
|
87
|
+
* normalizeError(42) => { message: "42" }
|
|
88
|
+
*/ function normalizeError(error) {
|
|
89
|
+
// Cannot act on falsy errors
|
|
90
|
+
if (!error) return {
|
|
91
|
+
message: "Unknown error"
|
|
92
|
+
};
|
|
93
|
+
if (typeof error === "string") {
|
|
94
|
+
return {
|
|
95
|
+
message: error
|
|
96
|
+
};
|
|
97
|
+
} else if (error instanceof Error) {
|
|
98
|
+
return {
|
|
99
|
+
message: error.message,
|
|
100
|
+
stack: error.stack
|
|
101
|
+
};
|
|
102
|
+
} else if (error && typeof error === "object") {
|
|
103
|
+
try {
|
|
104
|
+
return {
|
|
105
|
+
message: JSON.stringify(error)
|
|
106
|
+
};
|
|
107
|
+
} catch (unused) {
|
|
108
|
+
/* NOOP - Fall back to String(error) */ }
|
|
109
|
+
}
|
|
110
|
+
return {
|
|
111
|
+
message: String(error)
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* A function that wraps a class with exception capturing functionality.
|
|
116
|
+
* It adds error logging to all methods of the provided class.
|
|
117
|
+
* Applied at runtime, because not all instances of a given class
|
|
118
|
+
* require exception capturing.
|
|
119
|
+
*
|
|
120
|
+
* @template T - A type that extends a constructor function
|
|
121
|
+
* @param {T} BaseClass - The class to be wrapped with exception capturing
|
|
122
|
+
* @param {Widget} widget - The widget instance required to use captureWidgetExceptions
|
|
123
|
+
* @param {CaptureWidgetExceptionsOptions} options - Configuration options for exception capturing
|
|
124
|
+
* @returns {T} A new class that extends BaseClass with added error capturing
|
|
125
|
+
*/ function withCaptureExceptions(BaseClass, widget, options) {
|
|
126
|
+
if (options === void 0) options = {};
|
|
127
|
+
return class extends BaseClass {
|
|
128
|
+
constructor(...args){
|
|
129
|
+
super(...args);
|
|
130
|
+
this.widget = widget;
|
|
131
|
+
try {
|
|
132
|
+
const methodNames = Object.getOwnPropertyNames(BaseClass.prototype);
|
|
133
|
+
methodNames.forEach((methodName)=>{
|
|
134
|
+
if (methodName !== "constructor" && typeof this[methodName] === "function") {
|
|
135
|
+
const originalMethod = this[methodName];
|
|
136
|
+
this[methodName] = captureWidgetExceptions(options)(this, methodName, {
|
|
137
|
+
value: originalMethod
|
|
138
|
+
}).value;
|
|
139
|
+
}
|
|
140
|
+
});
|
|
141
|
+
} catch (e) {
|
|
142
|
+
// Wrap in a try/catch to prevent error-handling code from causing regressions
|
|
143
|
+
console.warn("Qualified: An unexpected issue occurred in withCaptureExceptions", e); // eslint-disable-line no-console
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
var capture_widget_exceptions_normalizeError = /* unused export */ undefined;
|
|
150
|
+
export { captureWidgetExceptions, capture_widget_exceptions_normalizeError as normalizeError, withCaptureExceptions };
|