@ada-cx/messaging-sdk 1.9.5 → 1.10.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/dist/client/client-channel-handlers.d.ts +3 -0
  2. package/dist/client/client-host-runtime.d.ts +6 -0
  3. package/dist/client/client-types.d.ts +1 -0
  4. package/dist/client/client.d.ts +16 -2
  5. package/dist/client/config-helpers.d.ts +1 -17
  6. package/dist/client/embed-interface.d.ts +2 -0
  7. package/dist/client/frame-styles.d.ts +1 -1
  8. package/dist/client/frame-visibility.d.ts +1 -0
  9. package/dist/client/proactive/proactive-channel.d.ts +1 -0
  10. package/dist/client/proactive/proactive-runtime.d.ts +1 -0
  11. package/dist/embed-host/bridge.d.ts +17 -0
  12. package/dist/embed-host/controller-origin.d.ts +3 -0
  13. package/dist/embed-host/index.d.ts +2 -0
  14. package/dist/embed-host/layout.d.ts +16 -0
  15. package/dist/embed-host/registry.d.ts +220 -0
  16. package/dist/embed-host/window-events.d.ts +2 -0
  17. package/dist/embed-host/wire.d.ts +13 -0
  18. package/dist/embed-protocol.d.ts +217 -0
  19. package/dist/frame-channel/types.d.ts +2 -0
  20. package/dist/helpers/api-endpoint.d.ts +17 -0
  21. package/dist/helpers/bridge-validation.d.ts +1 -0
  22. package/dist/helpers/host-environment.d.ts +40 -0
  23. package/dist/helpers/iframe-embed-mode.d.ts +23 -0
  24. package/dist/helpers/integration-lifecycle.d.ts +1 -0
  25. package/dist/helpers/launch-controls.d.ts +3 -2
  26. package/dist/npm/index.cjs +1 -1
  27. package/dist/npm/index.cjs.map +1 -1
  28. package/dist/npm/index.js +1 -1
  29. package/dist/npm/index.js.map +1 -1
  30. package/dist/npm/testing.cjs +1 -1
  31. package/dist/npm/testing.cjs.map +1 -1
  32. package/dist/npm/testing.js +79 -95
  33. package/dist/npm/testing.js.map +1 -1
  34. package/package.json +8 -2
@@ -1,5 +1,6 @@
1
1
  import type { CustomAppFrameStyles } from "../shared-utils/index.js";
2
2
  import type { FrameChannel, FrameName, FrameRegistry, FrameToSdkEvents, StartupConfig } from "../frame-channel/index.js";
3
+ import type { IframeEmbedHost } from "../helpers/iframe-embed-mode.js";
3
4
  import type { AdaMessagingClientConfig, AdaSdkEventCallback, WindowInfo } from "./client-types.js";
4
5
  interface BaseChannelDependencies {
5
6
  channels: Map<FrameName, FrameChannel>;
@@ -19,6 +20,8 @@ export interface ProactiveDisplayRequest {
19
20
  export interface CoreChannelDependencies extends BaseChannelDependencies {
20
21
  channel: FrameChannel;
21
22
  openHostNavigationInNewWindow?: boolean;
23
+ iframeEmbedMode?: boolean;
24
+ embedHost?: IframeEmbedHost;
22
25
  config: {
23
26
  handle: string;
24
27
  language?: string;
@@ -39,6 +39,11 @@ export interface DeliverConfigRuntimeOptions {
39
39
  testMode?: boolean;
40
40
  privateMode?: boolean;
41
41
  isParentElementMode?: boolean;
42
+ isIframeEmbed?: boolean;
43
+ iframeEmbedNavigation?: boolean;
44
+ embedHostOrigin?: string;
45
+ embedMode?: "inline" | "floating";
46
+ shimVersion?: string;
42
47
  headless?: boolean;
43
48
  isMobileViewport?: boolean;
44
49
  hideDefaultHeader?: boolean;
@@ -56,6 +61,7 @@ export interface DeliverConfigRuntimeOptions {
56
61
  initialURL?: string | null;
57
62
  /** Internal (EXP-1082): the mobile webview runtime mirrors session state natively. */
58
63
  nativeSessionMirror?: boolean;
64
+ embedEngagement?: boolean;
59
65
  }
60
66
  /** Send the client configuration to a frame. */
61
67
  export declare function deliverConfigRuntime(channel: FrameChannel, config: DeliverConfigRuntimeOptions): void;
@@ -165,6 +165,7 @@ export interface AdaMessagingSettings {
165
165
  adaReadyCallback?: (params: AdaReadyCallbackParams) => void;
166
166
  /** Legacy callback fired when a chatter token becomes available. */
167
167
  chatterTokenCallback?: (chatterToken: string) => void;
168
+ analyticsCallback?: AdaSdkEventCallback;
168
169
  /** Legacy callback fired when the conversation ends. */
169
170
  conversationEndCallback?: (event?: Record<string, unknown>) => void;
170
171
  /** Legacy callback fired when the drawer opens or closes. */
@@ -133,6 +133,7 @@ declare class AdaMessagingClient {
133
133
  /** An acknowledgement that landed before the chatter token existed to send it. */
134
134
  private _pendingUnreadAcknowledgement;
135
135
  private _isChatOpen;
136
+ private _isChatOpenPending;
136
137
  private _runtimeGeneration;
137
138
  private _resetGeneration;
138
139
  private _visibilityGeneration;
@@ -146,6 +147,7 @@ declare class AdaMessagingClient {
146
147
  /** Explicit host/user engagement, distinct from a hidden background resume. */
147
148
  private _hasExplicitlyEngaged;
148
149
  private _nativeViewVisible;
150
+ private _embedVisibilityObserver;
149
151
  private _nativeVisibilityReported;
150
152
  private _sessionPreparationSent;
151
153
  /** Resolved HTMLElement when parentElement config is active, null otherwise */
@@ -172,6 +174,7 @@ declare class AdaMessagingClient {
172
174
  private _pendingHostCallbackErrors;
173
175
  private readonly _hostCallbackErrorSink;
174
176
  private _cleanupCoreChannelHandlers;
177
+ private _hasConnectedCore;
175
178
  private _restoreStandaloneDocument;
176
179
  private _cleanupServiceWorkerNotificationClick;
177
180
  private _activationId;
@@ -227,6 +230,7 @@ declare class AdaMessagingClient {
227
230
  private _shownCampaign;
228
231
  private _openedCampaignSeq;
229
232
  private _introSurfaceSeq;
233
+ private _reportedPageUrl;
230
234
  private _currentIntroSurface;
231
235
  private _internalHostTelemetry?;
232
236
  private _isStandaloneChatPage;
@@ -325,6 +329,9 @@ declare class AdaMessagingClient {
325
329
  private _warnAboutLegacySettings;
326
330
  private get _isLegacyLoader();
327
331
  private _createContainer;
332
+ private _cancelLauncherExposureRetry;
333
+ private _launcherExposureRetryAttempt;
334
+ private _retryLauncherExposure;
328
335
  /**
329
336
  * Give a height-less inline (`parentElement`) host a 720px floor so the
330
337
  * absolutely-filled chat frame is visible instead of collapsing to 0.
@@ -616,6 +623,8 @@ declare class AdaMessagingClient {
616
623
  * @deprecated Messaging supports only generative features; scripted/declarative campaigns are ignored.
617
624
  */
618
625
  evaluateCampaignConditions(..._args: unknown[]): void;
626
+ /** Report an absolute HTTP(S) page URL on load and navigation. Embed URLs must match the parent origin. */
627
+ setPageUrl(url: string): void;
619
628
  /** Close the currently displayed proactive or campaign bubble. */
620
629
  closeCampaign(): void;
621
630
  /**
@@ -634,8 +643,8 @@ declare class AdaMessagingClient {
634
643
  * Use with {@link AdaMessagingClientConfig.lazy} = `true` to defer initialization
635
644
  * until an explicit user action, then call `start()` to mount.
636
645
  * Optional settings overrides are applied before first initialization.
637
- * Headless and capable native hosts restore at start and create on engagement.
638
- * Web parentElement hosts activate through the document visibility wait.
646
+ * Headless, observer-capable iframe embeds, and capable native hosts restore at start and create on engagement.
647
+ * Other web parentElement hosts activate through the document visibility wait.
639
648
  *
640
649
  * @example
641
650
  * // Defer loading until consent granted:
@@ -745,6 +754,7 @@ declare class AdaMessagingClient {
745
754
  private _ensureIntroFrame;
746
755
  private _showOrQueueEmojiDisplay;
747
756
  private _drainPendingEmojiDisplay;
757
+ private _displayIntroWithLayout;
748
758
  private _drainPendingIntroDisplay;
749
759
  private _clearPendingIntroDisplay;
750
760
  private _dropPendingIntroDisplay;
@@ -896,6 +906,7 @@ declare class AdaMessagingClient {
896
906
  private _setChatterToken;
897
907
  private _scheduleCandidateDiscovery;
898
908
  private _setPersistedChatterCandidate;
909
+ private get _usesEmbedVisibility();
899
910
  private get _waitsForEngagement();
900
911
  private _reportNativeViewVisibility;
901
912
  private _beginExplicitEngagement;
@@ -942,6 +953,7 @@ declare class AdaMessagingClient {
942
953
  /** Patch only the current chatter when an accepted proactive is removed. */
943
954
  private _markProactiveIntroShown;
944
955
  /**
956
+ * Iframe embeds cannot observe the host page URL.
945
957
  * Standalone URLs can carry credentials and metadata.
946
958
  * The SDK suppresses URLs for marked asset documents and HTTPS `/chat[/]` pages without ports
947
959
  * on a strict subdomain of the configured cluster domain.
@@ -949,6 +961,7 @@ declare class AdaMessagingClient {
949
961
  * Host-supplied markers or endpoint overrides cannot establish either document origin.
950
962
  */
951
963
  private _initialUrlMetaField;
964
+ private _pageUrl;
952
965
  /**
953
966
  * Where this build loads its own frames from. Preserves any path prefix (e.g.
954
967
  * "/messaging" on the static.ada.support root) so frame URLs don't 404 there;
@@ -971,6 +984,7 @@ declare class AdaMessagingClient {
971
984
  private _scheduleRuntimeMetaSync;
972
985
  /** Called on every SPA navigation. Re-evaluates intro and proactive conditions. */
973
986
  private _onLocationChange;
987
+ private _cancelPendingChatOpen;
974
988
  /**
975
989
  * Evaluate URL-triggered proactive conversations for the current page,
976
990
  * without the intro-greeting scheduling that `_onLocationChange` also does.
@@ -1,21 +1,12 @@
1
1
  import { CSAT_INTEGRATION_ID, CSAT_SUBMIT_ACTION, normalizeCsatSubmitAction, VALID_ADA_CLUSTERS } from "../shared-utils/index.js";
2
2
  import type { MetaFieldCounts } from "../frame-channel/types.js";
3
3
  import type { AdaMessagingBranding, MetaFieldValue } from "./client-types.js";
4
+ export { buildApiEndpoint, deriveLocalhostApiProxyBase, LOCAL_ASSETS_HOSTNAME, LOCAL_BOT_API_PORT, LOCALHOST_API_PROXY_BASE, LOOPBACK_API_PROXY_PORT, validateEndpointOverride, } from "../helpers/api-endpoint.js";
4
5
  export declare const LOCALHOST_CLUSTER = "localhost";
5
6
  export declare const DEFAULT_ADA_DOMAIN = "ada";
6
7
  export { VALID_ADA_CLUSTERS };
7
8
  export declare const KNOWN_ADA_BASE_DOMAINS: Set<string>;
8
9
  export declare const HANDLE_PATTERN: RegExp;
9
- export declare const LOCALHOST_API_PROXY_BASE = "https://messaging-demo.net:5040/api";
10
- export declare const LOOPBACK_API_PROXY_PORT = 5040;
11
- /** Hostname of the local messaging asset server (the /etc/hosts alias serving the SDK
12
- * on :4900). When the SDK loads from here the demo-server proxy (:5040) is running
13
- * too, so the bot API is reached through it — not the direct-bot fallback. */
14
- export declare const LOCAL_ASSETS_HOSTNAME = "messaging-assets.net";
15
- /** The api's default local `APP_PORT`. A `<handle>.localhost` host page (e.g. the
16
- * app dashboard's Test Chat) talks to its bot api directly on this port. */
17
- export declare const LOCAL_BOT_API_PORT = 8000;
18
- export declare function deriveLocalhostApiProxyBase(sdkUrl: string, pageHost?: string): string;
19
10
  export declare function normalizeIdentityToken(value: unknown): string | undefined;
20
11
  export declare function normalizeCrossWindowPersistence(value: unknown): boolean | undefined;
21
12
  /**
@@ -74,13 +65,6 @@ export interface TrackedIntegrationCommand {
74
65
  requestId?: string;
75
66
  zendeskOperationSeq?: number;
76
67
  }
77
- /**
78
- * Normalize and validate a customer-provided endpoint override.
79
- * Throws on invalid input so the constructor surfaces config errors early.
80
- */
81
- export declare function validateEndpointOverride(endpoint: string): string;
82
- /** Append `/api/` to a base URL, avoiding double-appending if already present. */
83
- export declare function buildApiEndpoint(apiBase: string): string;
84
68
  export declare function normalizeClusterInput(value: string | null | undefined): string | null;
85
69
  export declare function validateCluster(cluster: string, label: string): string;
86
70
  /**
@@ -146,6 +146,8 @@ export interface AdaEmbedInterface {
146
146
  evaluateCampaignConditions: (options?: Record<string, unknown>) => Promise<void>;
147
147
  /** Close the currently displayed proactive or campaign bubble. */
148
148
  closeCampaign: () => Promise<void>;
149
+ /** Set the page URL used for targeting and SDK metadata on load and navigation. */
150
+ setPageUrl: (url: string) => Promise<void>;
149
151
  /** Trigger a generative Answer by its response id. */
150
152
  triggerAnswer: (answerId: string) => Promise<void>;
151
153
  /** Trigger a proactive message by key, with optional template params. */
@@ -114,7 +114,7 @@ export declare function isMobileContentLayout(): boolean;
114
114
  * {@link isMobileViewport}.
115
115
  */
116
116
  export declare function prefersReducedMotion(): boolean;
117
- export declare function syncFrameViewportHeight(element: HTMLElement): () => void;
117
+ export declare function syncFrameViewportHeight(element: HTMLElement, followVisualViewport?: boolean): () => void;
118
118
  /**
119
119
  * CSS styles for the button launcher iframe.
120
120
  *
@@ -38,6 +38,7 @@ export declare function hasMeasuredSize(frame: HTMLElement | null | undefined):
38
38
  * cannot override a hidden ancestor and so reads as an opt-back-in it can never be.
39
39
  */
40
40
  export declare function setFrameHidden(frame: HTMLElement | null | undefined, hidden: boolean): void;
41
+ export declare function hideFrameUntilLayoutApplied(frame: HTMLElement): void;
41
42
  /**
42
43
  * Write a frame's style block and bring its accessibility exposure with it.
43
44
  *
@@ -28,6 +28,7 @@ export interface IntroChannelDependencies {
28
28
  /** Open a proactive bubble's branded CTA URL from the host-page context. The
29
29
  * intro frame is sandboxed without allow-popups, so it cannot navigate itself;
30
30
  * it delegates the open to the SDK running on the host page. */
31
+ retireLayoutSurface?: () => void;
31
32
  openCtaUrl?: (url: string, openInNewTab: boolean) => void;
32
33
  }
33
34
  /** Wire all message handlers for the intro (proactive messages + greeting) frame. */
@@ -3,6 +3,7 @@ export type IntroShowingState = "greeting" | "proactive" | null;
3
3
  export type IntroDisplayKind = "greeting" | "proactive";
4
4
  export interface ProactiveRuntimeDependencies {
5
5
  handle: string;
6
+ getPageUrl?: () => string | null;
6
7
  language?: string;
7
8
  parentElement: HTMLElement | null;
8
9
  /** Whether the resolved host layout currently permits launcher/intro chrome. */
@@ -0,0 +1,17 @@
1
+ export interface ConnectInbox {
2
+ drain(receive: (event: MessageEvent) => void): void;
3
+ close(): void;
4
+ }
5
+ export declare function createConnectInbox(win: Window): ConnectInbox;
6
+ export declare function validConnect(data: Record<string, unknown>): boolean;
7
+ export declare function createEmbedHostBridge(options: {
8
+ window: Window;
9
+ documentId: string;
10
+ handle: string;
11
+ cluster: string;
12
+ parentElement: HTMLElement;
13
+ inbox?: ConnectInbox;
14
+ }): {
15
+ configure: (config: unknown) => boolean;
16
+ destroy: () => void;
17
+ };
@@ -0,0 +1,3 @@
1
+ export declare function controllerConfigValid(config: unknown): boolean;
2
+ export declare function embedControllerAllowed(origin: string, config: unknown): boolean;
3
+ export declare function ancestorsAllowed(win: Window, config: unknown): boolean;
@@ -0,0 +1,2 @@
1
+ import type { ConnectInbox } from "./bridge.js";
2
+ export declare function mountIframeEmbed(parentElement: HTMLElement, inbox?: ConnectInbox): Promise<boolean>;
@@ -0,0 +1,16 @@
1
+ import type { DrawnRegions, HostEnvironment } from "../helpers/host-environment.js";
2
+ export declare function drawnRegion(element: HTMLElement): DrawnRegions;
3
+ export declare function covers(cover: DrawnRegions, required: DrawnRegions): boolean;
4
+ export declare function createLayoutChannel(options: {
5
+ window: Window;
6
+ send(kind: string, fields: Record<string, unknown>): void;
7
+ generation(): number;
8
+ restart(): void;
9
+ failure(): void;
10
+ }): {
11
+ environment: HostEnvironment;
12
+ receive: (data: Record<string, unknown>) => boolean;
13
+ resync: () => void;
14
+ restarted(): void;
15
+ destroy(): void;
16
+ };
@@ -0,0 +1,220 @@
1
+ export declare const METHOD_CLASSIFICATION: {
2
+ readonly open: "exposed";
3
+ readonly close: "exposed";
4
+ readonly reset: "exposed";
5
+ readonly toggle: "exposed";
6
+ readonly getInfo: "exposed";
7
+ readonly isOpen: "exposed";
8
+ readonly getMetaFields: "exposed";
9
+ readonly getConversation: "exposed";
10
+ readonly getMessages: "exposed";
11
+ readonly setComposerText: "exposed";
12
+ readonly setDelegate: "exposed";
13
+ readonly deleteHistory: "exposed";
14
+ readonly setLanguage: "exposed";
15
+ readonly setTheme: "exposed";
16
+ readonly setMetaFields: "exposed";
17
+ readonly setSensitiveMetaFields: "exposed";
18
+ readonly setDeviceToken: "exposed";
19
+ readonly sendMessage: "exposed";
20
+ readonly triggerPlaybook: "exposed";
21
+ readonly selectQuickReply: "exposed";
22
+ readonly trackEvent: "exposed";
23
+ readonly subscribeEvent: "exposed";
24
+ readonly unsubscribeEvent: "exposed";
25
+ readonly subscribeAll: "exposed";
26
+ readonly triggerProactive: "exposed";
27
+ readonly triggerProactiveConversation: "exposed";
28
+ readonly createProactive: "exposed";
29
+ readonly triggerCampaign: "exposed";
30
+ readonly evaluateCampaignConditions: "exposed";
31
+ readonly closeCampaign: "exposed";
32
+ readonly setPageUrl: "exposed";
33
+ readonly triggerAnswer: "exposed";
34
+ readonly start: "exposed";
35
+ readonly stop: "exposed";
36
+ readonly triggerGreeting: "exposed";
37
+ readonly destroy: "exposed";
38
+ readonly requestNotifications: "exposed";
39
+ readonly handleNotification: "exposed";
40
+ readonly setTestModeBanner: "internal";
41
+ readonly acknowledgeSessionMirrorClear: "internal";
42
+ readonly deliverSessionMirrorSeed: "internal";
43
+ };
44
+ export declare const CONFIG_CLASSIFICATION: {
45
+ readonly handle: "fixed";
46
+ readonly cluster: "fixed";
47
+ readonly domain: "fixed";
48
+ readonly endpoint: "fixed";
49
+ readonly rolloutOverride: "fixed";
50
+ readonly parentElement: "embed_owned";
51
+ readonly align: "embed_owned";
52
+ readonly hideMask: "embed_owned";
53
+ readonly lazy: "embed_owned";
54
+ readonly toggleCallback: "embed_owned";
55
+ readonly onAdaEmbedLoaded: "embed_owned";
56
+ readonly deviceToken: "passthrough";
57
+ readonly language: "passthrough";
58
+ readonly greeting: "passthrough";
59
+ readonly skipGreeting: "passthrough";
60
+ readonly identityToken: "passthrough";
61
+ readonly appUrl: "passthrough";
62
+ readonly appUrlFallback: "passthrough";
63
+ readonly metaFields: "passthrough";
64
+ readonly allowMetaFieldsInReset: "passthrough";
65
+ readonly enableProgrammaticControl: "passthrough";
66
+ readonly styles: "passthrough";
67
+ readonly branding: "passthrough";
68
+ readonly hideDefaultHeader: "passthrough";
69
+ readonly privateMode: "passthrough";
70
+ readonly testMode: "passthrough";
71
+ readonly headless: "passthrough";
72
+ readonly showFallbackOnTimeout: "passthrough";
73
+ readonly sensitiveMetaFields: "passthrough";
74
+ readonly eventCallbacks: "passthrough";
75
+ readonly crossWindowPersistence: "passthrough";
76
+ readonly theme: "passthrough";
77
+ readonly adaReadyCallback: "passthrough";
78
+ readonly chatterTokenCallback: "passthrough";
79
+ readonly conversationEndCallback: "passthrough";
80
+ readonly zdChatterAuthCallback: "passthrough";
81
+ readonly analyticsCallback: "passthrough";
82
+ };
83
+ export declare const FLOATING_CONFIG_CLASSIFICATION: {
84
+ readonly align: "passthrough";
85
+ readonly hideMask: "passthrough";
86
+ readonly toggleCallback: "passthrough";
87
+ readonly handle: "fixed";
88
+ readonly cluster: "fixed";
89
+ readonly domain: "fixed";
90
+ readonly endpoint: "fixed";
91
+ readonly rolloutOverride: "fixed";
92
+ readonly parentElement: "embed_owned";
93
+ readonly lazy: "embed_owned";
94
+ readonly onAdaEmbedLoaded: "embed_owned";
95
+ readonly deviceToken: "passthrough";
96
+ readonly language: "passthrough";
97
+ readonly greeting: "passthrough";
98
+ readonly skipGreeting: "passthrough";
99
+ readonly identityToken: "passthrough";
100
+ readonly appUrl: "passthrough";
101
+ readonly appUrlFallback: "passthrough";
102
+ readonly metaFields: "passthrough";
103
+ readonly allowMetaFieldsInReset: "passthrough";
104
+ readonly enableProgrammaticControl: "passthrough";
105
+ readonly styles: "passthrough";
106
+ readonly branding: "passthrough";
107
+ readonly hideDefaultHeader: "passthrough";
108
+ readonly privateMode: "passthrough";
109
+ readonly testMode: "passthrough";
110
+ readonly headless: "passthrough";
111
+ readonly showFallbackOnTimeout: "passthrough";
112
+ readonly sensitiveMetaFields: "passthrough";
113
+ readonly eventCallbacks: "passthrough";
114
+ readonly crossWindowPersistence: "passthrough";
115
+ readonly theme: "passthrough";
116
+ readonly adaReadyCallback: "passthrough";
117
+ readonly chatterTokenCallback: "passthrough";
118
+ readonly conversationEndCallback: "passthrough";
119
+ readonly zdChatterAuthCallback: "passthrough";
120
+ readonly analyticsCallback: "passthrough";
121
+ };
122
+ export declare const CONFIG_CLASSIFICATION_BY_MODE: {
123
+ readonly inline: {
124
+ readonly handle: "fixed";
125
+ readonly cluster: "fixed";
126
+ readonly domain: "fixed";
127
+ readonly endpoint: "fixed";
128
+ readonly rolloutOverride: "fixed";
129
+ readonly parentElement: "embed_owned";
130
+ readonly align: "embed_owned";
131
+ readonly hideMask: "embed_owned";
132
+ readonly lazy: "embed_owned";
133
+ readonly toggleCallback: "embed_owned";
134
+ readonly onAdaEmbedLoaded: "embed_owned";
135
+ readonly deviceToken: "passthrough";
136
+ readonly language: "passthrough";
137
+ readonly greeting: "passthrough";
138
+ readonly skipGreeting: "passthrough";
139
+ readonly identityToken: "passthrough";
140
+ readonly appUrl: "passthrough";
141
+ readonly appUrlFallback: "passthrough";
142
+ readonly metaFields: "passthrough";
143
+ readonly allowMetaFieldsInReset: "passthrough";
144
+ readonly enableProgrammaticControl: "passthrough";
145
+ readonly styles: "passthrough";
146
+ readonly branding: "passthrough";
147
+ readonly hideDefaultHeader: "passthrough";
148
+ readonly privateMode: "passthrough";
149
+ readonly testMode: "passthrough";
150
+ readonly headless: "passthrough";
151
+ readonly showFallbackOnTimeout: "passthrough";
152
+ readonly sensitiveMetaFields: "passthrough";
153
+ readonly eventCallbacks: "passthrough";
154
+ readonly crossWindowPersistence: "passthrough";
155
+ readonly theme: "passthrough";
156
+ readonly adaReadyCallback: "passthrough";
157
+ readonly chatterTokenCallback: "passthrough";
158
+ readonly conversationEndCallback: "passthrough";
159
+ readonly zdChatterAuthCallback: "passthrough";
160
+ readonly analyticsCallback: "passthrough";
161
+ };
162
+ readonly floating: {
163
+ readonly align: "passthrough";
164
+ readonly hideMask: "passthrough";
165
+ readonly toggleCallback: "passthrough";
166
+ readonly handle: "fixed";
167
+ readonly cluster: "fixed";
168
+ readonly domain: "fixed";
169
+ readonly endpoint: "fixed";
170
+ readonly rolloutOverride: "fixed";
171
+ readonly parentElement: "embed_owned";
172
+ readonly lazy: "embed_owned";
173
+ readonly onAdaEmbedLoaded: "embed_owned";
174
+ readonly deviceToken: "passthrough";
175
+ readonly language: "passthrough";
176
+ readonly greeting: "passthrough";
177
+ readonly skipGreeting: "passthrough";
178
+ readonly identityToken: "passthrough";
179
+ readonly appUrl: "passthrough";
180
+ readonly appUrlFallback: "passthrough";
181
+ readonly metaFields: "passthrough";
182
+ readonly allowMetaFieldsInReset: "passthrough";
183
+ readonly enableProgrammaticControl: "passthrough";
184
+ readonly styles: "passthrough";
185
+ readonly branding: "passthrough";
186
+ readonly hideDefaultHeader: "passthrough";
187
+ readonly privateMode: "passthrough";
188
+ readonly testMode: "passthrough";
189
+ readonly headless: "passthrough";
190
+ readonly showFallbackOnTimeout: "passthrough";
191
+ readonly sensitiveMetaFields: "passthrough";
192
+ readonly eventCallbacks: "passthrough";
193
+ readonly crossWindowPersistence: "passthrough";
194
+ readonly theme: "passthrough";
195
+ readonly adaReadyCallback: "passthrough";
196
+ readonly chatterTokenCallback: "passthrough";
197
+ readonly conversationEndCallback: "passthrough";
198
+ readonly zdChatterAuthCallback: "passthrough";
199
+ readonly analyticsCallback: "passthrough";
200
+ };
201
+ };
202
+ export declare const WINDOW_EVENTS: readonly ["ada:error", "ada:integration:event"];
203
+ export declare const ENVELOPE_KINDS: readonly ["connect", "connected", "already_connected", "connect_rejected", "layout.clip", "layout.applied", "layout.reset", "layout.heartbeat", "host.viewport", "host.scroll_lock", "host.escape_listen", "host.key", "host.resume", "host.navigate", "host.navigate_result", "host.notification_state", "host.notification", "host.notification_click", "request", "response", "callback", "callback_result", "release_callbacks", "release_request", "disconnect", "window_event"];
204
+ export declare const ERROR_CODES: readonly ["unsupported", "invalid_params", "not_started", "disconnected", "timeout", "limit_exceeded", "sdk_error", "internal"];
205
+ export declare const ID_LENGTH: {
206
+ readonly min: 1;
207
+ readonly max: 128;
208
+ };
209
+ export declare const RANDOM_ID_PATTERN = "^[A-Za-z0-9_-]{22}$";
210
+ export declare const LIMITS: {
211
+ readonly depth: 32;
212
+ readonly nodes: 50000;
213
+ readonly bytes: number;
214
+ readonly registrations: 256;
215
+ readonly callbacks: 64;
216
+ readonly requests: 64;
217
+ };
218
+ export declare function callbackSlot(method: string, path: readonly (string | number)[], mode?: "inline" | "floating"): "event" | "beforeSend" | "zendesk" | undefined;
219
+ export declare const EMBED_CAPABILITIES: readonly ["layout.v1", "notifications.v1", "navigate.v1"];
220
+ export declare const CONNECT_FIELDS: readonly ["protocol", "v", "kind", "nonce", "pageUrl", "mode", "capabilities", "shimVersion"];
@@ -0,0 +1,2 @@
1
+ import type { EmbedWindowEvent } from "../embed-protocol.js";
2
+ export declare function projectWindowEvent(name: string, value: unknown): Pick<EmbedWindowEvent, "name" | "detail"> | undefined;
@@ -0,0 +1,13 @@
1
+ import type { EmbedError, EmbedErrorCode } from "../embed-protocol.js";
2
+ export declare class ProtocolError extends Error {
3
+ readonly code: EmbedErrorCode;
4
+ constructor(code: EmbedErrorCode);
5
+ }
6
+ export declare function normalizeError(error: unknown): EmbedError;
7
+ export declare function record(value: unknown): Record<string, unknown> | undefined;
8
+ export declare function copyWire(value: unknown, marker?: (value: Record<string, unknown>, path: (string | number)[]) => unknown): unknown;
9
+ export declare function envelope(kind: string, fields?: Record<string, unknown>): {
10
+ protocol: string;
11
+ v: number;
12
+ kind: string;
13
+ };