@corti/embedded-web 0.2.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -43,9 +43,16 @@ const interaction = await myComponent.createInteraction({
43
43
  }
44
44
  });
45
45
 
46
- await myComponent.configureSession({"defaultTemplateKey": "soap_note"});
46
+ await myComponent.setInteractionOptions({
47
+ templates: {
48
+ defaultTemplate: {
49
+ behaviour: "fallback",
50
+ template: { source: "standard", id: "soap_note" },
51
+ },
52
+ },
53
+ });
47
54
  await myComponent.addFacts([{"text": "Chest pain", "group": "other"}]);
48
- await myComponent.navigate('/interactions/123');
55
+ await myComponent.navigate({ path: "/interactions/123" });
49
56
  await myComponent.show()
50
57
  ```
51
58
 
@@ -100,7 +107,14 @@ function App() {
100
107
  });
101
108
  console.log("Authenticated:", user);
102
109
 
103
- await api.configureSession({ defaultTemplateKey: "soap_note" });
110
+ await api.setInteractionOptions({
111
+ templates: {
112
+ defaultTemplate: {
113
+ behaviour: "fallback",
114
+ template: { source: "standard", id: "soap_note" },
115
+ },
116
+ },
117
+ });
104
118
  await api.createInteraction({
105
119
  encounter: {
106
120
  identifier: `encounter-${Date.now()}`,
@@ -172,14 +186,37 @@ const authResponse = await component.auth({
172
186
  });
173
187
  ```
174
188
 
175
- #### configureSession
189
+ #### configureApp
176
190
 
177
191
  ```javascript
178
- await component.configureSession({
179
- defaultLanguage: "en",
180
- defaultOutputLanguage: "en",
181
- defaultTemplateKey: "discharge-summary",
182
- defaultMode: "virtual",
192
+ await component.configureApp({
193
+ ui: {
194
+ aiChat: true,
195
+ navigation: false,
196
+ },
197
+ appearance: {
198
+ primaryColor: "#000000",
199
+ },
200
+ });
201
+ ```
202
+
203
+ #### setInteractionOptions
204
+
205
+ ```javascript
206
+ await component.setInteractionOptions({
207
+ mode: {
208
+ fallback: "virtual",
209
+ options: ["in-person", "virtual"],
210
+ },
211
+ spokenLanguage: {
212
+ fallback: "en",
213
+ },
214
+ templates: {
215
+ defaultTemplate: {
216
+ behaviour: "fallback",
217
+ template: { source: "standard", id: "discharge-summary" },
218
+ },
219
+ },
183
220
  });
184
221
  ```
185
222
 
@@ -195,7 +232,7 @@ await component.addFacts([
195
232
  #### navigate
196
233
 
197
234
  ```javascript
198
- await component.navigate("/interactions/123");
235
+ await component.navigate({ path: "/interactions/123" });
199
236
  ```
200
237
 
201
238
  #### createInteraction
@@ -302,7 +339,7 @@ function Example() {
302
339
  const run = async () => {
303
340
  await api.auth({ access_token: '...', token_type: 'Bearer' });
304
341
  const created = await api.createInteraction({ encounter: { ... } });
305
- await api.navigate(`/session/${created.id}`);
342
+ await api.navigate({ path: `/session/${created.id}` });
306
343
  };
307
344
 
308
345
  return (
@@ -316,6 +353,8 @@ function Example() {
316
353
 
317
354
  For detailed React usage examples, see [docs/react-usage.md](./docs/react-usage.md).
318
355
 
356
+ For configuration migration details, see [docs/migration-guide.md](./docs/migration-guide.md) and [docs/deprecation-timeline.md](./docs/deprecation-timeline.md).
357
+
319
358
  ## Package Structure
320
359
 
321
360
  - **Default export**: Web component only (`dist/web-bundle.js`, readable non-minified bundle)
@@ -1,12 +1,24 @@
1
1
  import type { Corti } from "@corti/sdk";
2
2
  import { LitElement, type PropertyValues } from "lit";
3
- import type { ConfigureAppPayload, ConfigureAppResponse, CreateInteractionPayload, SetCredentialsPayload, CortiEmbeddedAPI, InteractionDetails, SessionConfig, User, GetStatusResponse, GetTemplatesResponse, KeycloakTokenResponse } from "./types";
3
+ import type { ConfigureApplicationPayload, ConfigureApplicationResponse, ConfigurePayload, ConfigureResponse, CreateInteractionPayload, NavigatePayload, SetInteractionOptionsPayload, SetCredentialsPayload, CortiEmbeddedAPI, InteractionDetails, SessionConfig, User, GetStatusResponse, GetTemplatesResponse, KeycloakTokenResponse } from "./public-types.js";
4
+ type DOMEventListener = ((event: Event) => void) | {
5
+ handleEvent(event: Event): void;
6
+ };
7
+ type DOMAddEventListenerOptions = boolean | {
8
+ capture?: boolean;
9
+ once?: boolean;
10
+ passive?: boolean;
11
+ signal?: AbortSignal;
12
+ };
4
13
  export declare class CortiEmbedded extends LitElement implements CortiEmbeddedAPI {
5
14
  static styles: import("lit").CSSResult[];
6
15
  visibility: string;
7
16
  baseURL: string;
8
17
  private postMessageHandler;
9
18
  private normalizedBaseURL;
19
+ private warnedDeprecatedEventSubscriptions;
20
+ addEventListener(type: string, callback: DOMEventListener, options?: DOMAddEventListenerOptions): void;
21
+ private warnDeprecatedEventSubscription;
10
22
  private getIframeAllowPolicy;
11
23
  connectedCallback(): void;
12
24
  disconnectedCallback(): void;
@@ -14,6 +26,7 @@ export declare class CortiEmbedded extends LitElement implements CortiEmbeddedAP
14
26
  private dispatchPublicEvent;
15
27
  private dispatchEmbeddedEvent;
16
28
  private dispatchErrorEvent;
29
+ private static warnDeprecatedAPI;
17
30
  private isRealIframeLoad;
18
31
  private handleIframeLoad;
19
32
  private getIframe;
@@ -44,10 +57,10 @@ export declare class CortiEmbedded extends LitElement implements CortiEmbeddedAP
44
57
  addFacts(facts: Corti.FactsCreateInput[]): Promise<void>;
45
58
  /**
46
59
  * Navigate to a specific path within the embedded UI
47
- * @param path Path to navigate to
60
+ * @param payload Navigation request payload or legacy path string
48
61
  * @returns Promise that resolves when navigation is complete
49
62
  */
50
- navigate(path: string): Promise<void>;
63
+ navigate(payload: NavigatePayload | string): Promise<void>;
51
64
  /**
52
65
  * Start recording
53
66
  * @returns Promise that resolves when recording starts
@@ -68,7 +81,19 @@ export declare class CortiEmbedded extends LitElement implements CortiEmbeddedAP
68
81
  * @param config Component configuration
69
82
  * @returns Promise that resolves when configuration is applied
70
83
  */
71
- configure(config: ConfigureAppPayload): Promise<ConfigureAppResponse>;
84
+ configureApp(config: ConfigureApplicationPayload): Promise<ConfigureApplicationResponse>;
85
+ /**
86
+ * Configure the component
87
+ * @param config Component configuration
88
+ * @returns Promise that resolves when configuration is applied
89
+ */
90
+ configure(config: ConfigurePayload): Promise<ConfigureResponse>;
91
+ /**
92
+ * Set one-shot interaction options for the embedded instance.
93
+ * @param config Interaction/session-level options
94
+ * @returns Promise that resolves when options are applied
95
+ */
96
+ setInteractionOptions(config: SetInteractionOptionsPayload): Promise<void>;
72
97
  /**
73
98
  * Set authentication credentials without triggering auth flow
74
99
  * @param credentials Authentication credentials to store
@@ -105,3 +130,4 @@ export declare class CortiEmbedded extends LitElement implements CortiEmbeddedAP
105
130
  };
106
131
  render(): import("lit-html").TemplateResult<1>;
107
132
  }
133
+ export {};
@@ -13,12 +13,41 @@ import { buildEmbeddedUrl, isRealEmbeddedLoad } from "./utils/embedUrl.js";
13
13
  import { formatError } from "./utils/errorFormatter.js";
14
14
  import { PostMessageHandler, } from "./utils/PostMessageHandler.js";
15
15
  const IFRAME_SANDBOX_POLICY = "allow-forms allow-modals allow-scripts allow-same-origin";
16
+ const DEPRECATION_TIMELINE_URL = "https://docs.corti.ai/assistant/deprecation-timeline";
17
+ const CONFIGURATION_MIGRATION_URL = "https://docs.corti.ai/assistant/configuration-migration";
18
+ const DEPRECATED_EVENT_SUBSCRIPTIONS = new Set([
19
+ "ready",
20
+ "loaded",
21
+ "recordingStarted",
22
+ "recordingStopped",
23
+ "documentGenerated",
24
+ "documentUpdated",
25
+ "documentSynced",
26
+ "authChanged",
27
+ "interactionCreated",
28
+ "navigationChanged",
29
+ "usage",
30
+ "embedded-event",
31
+ ]);
16
32
  export class CortiEmbedded extends LitElement {
17
33
  constructor() {
18
34
  super(...arguments);
19
35
  this.visibility = "hidden";
20
36
  this.postMessageHandler = null;
21
37
  this.normalizedBaseURL = null;
38
+ this.warnedDeprecatedEventSubscriptions = new Set();
39
+ }
40
+ addEventListener(type, callback, options) {
41
+ this.warnDeprecatedEventSubscription(type);
42
+ super.addEventListener(type, callback, options);
43
+ }
44
+ warnDeprecatedEventSubscription(eventName) {
45
+ if (!DEPRECATED_EVENT_SUBSCRIPTIONS.has(eventName) ||
46
+ this.warnedDeprecatedEventSubscriptions.has(eventName)) {
47
+ return;
48
+ }
49
+ this.warnedDeprecatedEventSubscriptions.add(eventName);
50
+ console.warn(`[Corti Embedded] The '${eventName}' event subscription is deprecated and will be removed in a future release. Subscribe to the canonical 'event' stream instead. See ${DEPRECATION_TIMELINE_URL}.`);
22
51
  }
23
52
  // eslint-disable-next-line class-methods-use-this
24
53
  getIframeAllowPolicy(normalizedBaseURL) {
@@ -109,6 +138,9 @@ export class CortiEmbedded extends LitElement {
109
138
  dispatchErrorEvent(error) {
110
139
  this.dispatchPublicEvent("error", error);
111
140
  }
141
+ static warnDeprecatedAPI(methodName, replacement) {
142
+ console.warn(`[Corti Embedded] ${methodName} is deprecated and will be removed in a future release. Use ${replacement} instead. See ${CONFIGURATION_MIGRATION_URL} and ${DEPRECATION_TIMELINE_URL}.`);
143
+ }
112
144
  isRealIframeLoad(iframe) {
113
145
  const src = iframe.getAttribute("src") || "";
114
146
  if (!this.normalizedBaseURL)
@@ -250,6 +282,7 @@ export class CortiEmbedded extends LitElement {
250
282
  throw new Error("Component not ready");
251
283
  }
252
284
  try {
285
+ CortiEmbedded.warnDeprecatedAPI("configureSession()", "setInteractionOptions()");
253
286
  const payload = {
254
287
  defaultLanguage: config.defaultLanguage,
255
288
  defaultOutputLanguage: config.defaultOutputLanguage,
@@ -293,20 +326,20 @@ export class CortiEmbedded extends LitElement {
293
326
  }
294
327
  /**
295
328
  * Navigate to a specific path within the embedded UI
296
- * @param path Path to navigate to
329
+ * @param payload Navigation request payload or legacy path string
297
330
  * @returns Promise that resolves when navigation is complete
298
331
  */
299
- async navigate(path) {
332
+ async navigate(payload) {
300
333
  if (!this.postMessageHandler) {
301
334
  throw new Error("Component not ready");
302
335
  }
303
336
  try {
304
- const payload = { path };
337
+ const normalizedPayload = typeof payload === "string" ? { path: payload } : payload;
305
338
  await this.postMessageHandler.postMessage({
306
339
  type: "CORTI_EMBEDDED",
307
340
  version: "v1",
308
341
  action: "navigate",
309
- payload,
342
+ payload: normalizedPayload,
310
343
  });
311
344
  }
312
345
  catch (error) {
@@ -388,6 +421,32 @@ export class CortiEmbedded extends LitElement {
388
421
  throw new Error(JSON.stringify(formattedError));
389
422
  }
390
423
  }
424
+ /**
425
+ * Configure the component
426
+ * @param config Component configuration
427
+ * @returns Promise that resolves when configuration is applied
428
+ */
429
+ async configureApp(config) {
430
+ if (!this.postMessageHandler) {
431
+ throw new Error("Component not ready");
432
+ }
433
+ try {
434
+ const response = await this.postMessageHandler.postMessage({
435
+ type: "CORTI_EMBEDDED",
436
+ version: "v1",
437
+ action: "configureApp",
438
+ payload: config,
439
+ });
440
+ if (response.success && response.payload) {
441
+ return response.payload;
442
+ }
443
+ throw new Error(response.error);
444
+ }
445
+ catch (error) {
446
+ const formattedError = formatError(error, "Failed to configure app");
447
+ throw new Error(JSON.stringify(formattedError));
448
+ }
449
+ }
391
450
  /**
392
451
  * Configure the component
393
452
  * @param config Component configuration
@@ -398,6 +457,7 @@ export class CortiEmbedded extends LitElement {
398
457
  throw new Error("Component not ready");
399
458
  }
400
459
  try {
460
+ CortiEmbedded.warnDeprecatedAPI("configure()", "configureApp()");
401
461
  const response = await this.postMessageHandler.postMessage({
402
462
  type: "CORTI_EMBEDDED",
403
463
  version: "v1",
@@ -414,6 +474,31 @@ export class CortiEmbedded extends LitElement {
414
474
  throw new Error(JSON.stringify(formattedError));
415
475
  }
416
476
  }
477
+ /**
478
+ * Set one-shot interaction options for the embedded instance.
479
+ * @param config Interaction/session-level options
480
+ * @returns Promise that resolves when options are applied
481
+ */
482
+ async setInteractionOptions(config) {
483
+ if (!this.postMessageHandler) {
484
+ throw new Error("Component not ready");
485
+ }
486
+ try {
487
+ const response = await this.postMessageHandler.postMessage({
488
+ type: "CORTI_EMBEDDED",
489
+ version: "v1",
490
+ action: "setInteractionOptions",
491
+ payload: config,
492
+ });
493
+ if (response.success === false || response.error) {
494
+ throw new Error(response.error);
495
+ }
496
+ }
497
+ catch (error) {
498
+ const formattedError = formatError(error, "Failed to set interaction options");
499
+ throw new Error(JSON.stringify(formattedError));
500
+ }
501
+ }
417
502
  /**
418
503
  * Set authentication credentials without triggering auth flow
419
504
  * @param credentials Authentication credentials to store
@@ -1 +1 @@
1
- {"version":3,"file":"CortiEmbedded.js","sourceRoot":"","sources":["../src/CortiEmbedded.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable no-console */\nimport type { Corti } from \"@corti/sdk\";\nimport { html, LitElement, type PropertyValues } from \"lit\";\nimport { property } from \"lit/decorators.js\";\nimport type {\n AuthResponse,\n AddFactsPayload,\n ConfigureAppPayload,\n ConfigureAppResponse,\n ConfigureSessionPayload,\n CreateInteractionPayload,\n CreateInteractionResponse,\n NavigatePayload,\n SetCredentialsPayload,\n CortiEmbeddedAPI,\n InteractionDetails,\n SessionConfig,\n User,\n GetStatusResponse,\n GetTemplatesResponse,\n KeycloakTokenResponse,\n} from \"./types\";\nimport { baseStyles } from \"./styles/base.js\";\nimport { containerStyles } from \"./styles/container-styles.js\";\nimport { validateAndNormalizeBaseURL } from \"./utils/baseUrl.js\";\nimport { buildEmbeddedUrl, isRealEmbeddedLoad } from \"./utils/embedUrl.js\";\nimport { formatError } from \"./utils/errorFormatter.js\";\nimport {\n PostMessageHandler,\n type PostMessageHandlerCallbacks,\n} from \"./utils/PostMessageHandler.js\";\n\nconst IFRAME_SANDBOX_POLICY =\n \"allow-forms allow-modals allow-scripts allow-same-origin\";\n\nexport class CortiEmbedded extends LitElement implements CortiEmbeddedAPI {\n static styles = [baseStyles, containerStyles];\n\n @property({ type: String, reflect: true })\n visibility = \"hidden\";\n\n @property({ type: String, reflect: true })\n baseURL!: string;\n\n private postMessageHandler: PostMessageHandler | null = null;\n\n private normalizedBaseURL: string | null = null;\n\n // eslint-disable-next-line class-methods-use-this\n private getIframeAllowPolicy(normalizedBaseURL?: string | null): string {\n const permissionTarget = normalizedBaseURL\n ? new URL(normalizedBaseURL).origin\n : \"*\";\n\n return [\n `microphone ${permissionTarget}`,\n `camera ${permissionTarget}`,\n `device-capture ${permissionTarget}`,\n `display-capture ${permissionTarget}`,\n `clipboard-write ${permissionTarget}`,\n ].join(\"; \");\n }\n\n connectedCallback() {\n super.connectedCallback();\n\n // Ensure baseURL is provided\n if (!this.baseURL) {\n this.dispatchErrorEvent({\n message: \"baseURL is required\",\n });\n return;\n }\n\n // Validate and normalize the initial baseURL early (fail fast)\n try {\n this.normalizedBaseURL = validateAndNormalizeBaseURL(this.baseURL);\n } catch (error) {\n this.dispatchErrorEvent({\n message: (error as Error).message || \"Invalid baseURL\",\n });\n // Dispatch the error event rather than throwing so consumers can handle it\n // via the 'error' event listener without wrapping connectedCallback in try/catch.\n }\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n if (this.postMessageHandler) {\n this.postMessageHandler.destroy();\n this.postMessageHandler = null;\n }\n }\n\n private async setupPostMessageHandler() {\n // Prevent multiple setups\n if (this.postMessageHandler) {\n return;\n }\n\n const iframe = this.getIframe();\n\n if (iframe?.contentWindow) {\n const callbacks: PostMessageHandlerCallbacks = {\n onEvent: event => {\n this.dispatchEmbeddedEvent(event.name, event.payload);\n },\n onError: error => {\n this.dispatchErrorEvent(error);\n },\n };\n\n this.postMessageHandler = new PostMessageHandler(iframe, callbacks);\n } else {\n this.dispatchErrorEvent({\n message: \"No iframe or contentWindow available\",\n });\n }\n }\n\n private dispatchPublicEvent(event: string, data: unknown) {\n this.dispatchEvent(new CustomEvent(event, { detail: data }));\n }\n\n private dispatchEmbeddedEvent(rawEventName: string, payload: unknown) {\n if (rawEventName === \"ready\" || rawEventName === \"loaded\") return;\n // Pass all other events through as raw DOM events for direct listeners.\n this.dispatchPublicEvent(rawEventName, payload);\n\n // Forward supported embedded events through the generic 'event' stream so\n // consumers can observe them without subscribing to each raw event name.\n this.dispatchPublicEvent(\"event\", {\n name: rawEventName,\n payload,\n });\n\n // Also emit the legacy 'embedded-event' stream for backward compatibility.\n // This allows existing integrations listening for 'embedded-event' to continue\n // working while newer consumers can use the 'event' stream.\n this.dispatchPublicEvent(\"embedded-event\", {\n name: rawEventName,\n payload,\n });\n }\n\n private dispatchErrorEvent(error: {\n message: string;\n code?: string;\n details?: unknown;\n }) {\n this.dispatchPublicEvent(\"error\", error);\n }\n\n private isRealIframeLoad(iframe: HTMLIFrameElement): boolean {\n const src = iframe.getAttribute(\"src\") || \"\";\n if (!this.normalizedBaseURL) return false;\n return isRealEmbeddedLoad(src, this.normalizedBaseURL);\n }\n\n private async handleIframeLoad(event: Event) {\n const iframe = event.target as HTMLIFrameElement | null;\n if (!iframe) {\n return;\n }\n // Only initialize on real URL load, ignore about:blank\n if (!this.isRealIframeLoad(iframe)) {\n return;\n }\n try {\n await this.setupPostMessageHandler();\n } catch (error) {\n this.dispatchErrorEvent({\n message: `Failed to setup PostMessageHandler on iframe load: ${error}`,\n });\n }\n }\n\n private getIframe(): HTMLIFrameElement | null {\n return this.shadowRoot?.querySelector(\"iframe\") || null;\n }\n\n protected updated(changedProps: PropertyValues) {\n super.updated(changedProps);\n if (changedProps.has(\"baseURL\")) {\n // Tear down the existing handler; the new one is created in handleIframeLoad\n if (this.postMessageHandler) {\n this.postMessageHandler.destroy();\n this.postMessageHandler = null;\n }\n\n // Validate the new URL\n try {\n this.normalizedBaseURL = validateAndNormalizeBaseURL(this.baseURL);\n } catch (error) {\n this.normalizedBaseURL = null;\n const iframe = this.getIframe();\n if (iframe) {\n iframe.setAttribute(\"src\", \"about:blank\");\n }\n this.dispatchErrorEvent({\n message: (error as Error).message || \"Invalid baseURL\",\n });\n return;\n }\n\n // Update the iframe to the new URL\n const iframe = this.getIframe();\n if (iframe) {\n const expected = buildEmbeddedUrl(this.normalizedBaseURL);\n iframe.setAttribute(\"allow\", this.getIframeAllowPolicy(expected));\n if (iframe.getAttribute(\"src\") !== expected) {\n iframe.setAttribute(\"src\", expected);\n }\n }\n }\n }\n\n // Public API Implementation\n\n /**\n * Authenticate with the Corti system\n * @param credentials Authentication credentials\n * @returns Promise resolving to user information\n */\n async auth(credentials: KeycloakTokenResponse): Promise<User> {\n if (!this.postMessageHandler) {\n throw new Error(\"Component not ready\");\n }\n\n try {\n const payload: KeycloakTokenResponse = {\n access_token: credentials.access_token,\n token_type: credentials.token_type,\n expires_at: credentials.expires_at,\n expires_in: credentials.expires_in,\n refresh_expires_in: credentials.refresh_expires_in,\n refresh_token: credentials.refresh_token,\n id_token: credentials.id_token,\n \"not-before-policy\": credentials[\"not-before-policy\"],\n session_state: credentials.session_state,\n scope: credentials.scope,\n profile: credentials.profile,\n };\n\n const response = await this.postMessageHandler.postMessage({\n type: \"CORTI_EMBEDDED\",\n version: \"v1\",\n action: \"auth\",\n payload,\n });\n\n if (response.success && response.payload) {\n return (response.payload as AuthResponse).user;\n }\n throw new Error(response.error);\n } catch (error) {\n const formattedError = formatError(error, \"Authentication failed\");\n throw new Error(JSON.stringify(formattedError));\n }\n }\n\n /**\n * Create a new interaction\n * @param encounter Encounter request data\n * @returns Promise resolving to interaction details\n */\n async createInteraction(\n encounter: CreateInteractionPayload,\n ): Promise<InteractionDetails> {\n if (!this.postMessageHandler) {\n throw new Error(\"Component not ready\");\n }\n\n try {\n const response = await this.postMessageHandler.postMessage({\n type: \"CORTI_EMBEDDED\",\n version: \"v1\",\n action: \"createInteraction\",\n payload: encounter,\n });\n\n if (response.success && response.payload) {\n const result = response.payload as CreateInteractionResponse;\n return {\n id: result.id,\n createdAt: result.createdAt,\n };\n }\n throw new Error(response.error);\n } catch (error) {\n const formattedError = formatError(error, \"Failed to create interaction\");\n throw new Error(JSON.stringify(formattedError));\n }\n }\n\n /**\n * Configure the current session\n * @param config Session configuration\n * @returns Promise that resolves when configuration is complete\n */\n async configureSession(config: SessionConfig): Promise<void> {\n if (!this.postMessageHandler) {\n throw new Error(\"Component not ready\");\n }\n\n try {\n const payload: ConfigureSessionPayload = {\n defaultLanguage: config.defaultLanguage,\n defaultOutputLanguage: config.defaultOutputLanguage,\n defaultTemplateKey: config.defaultTemplateKey,\n defaultMode: config.defaultMode,\n };\n\n await this.postMessageHandler.postMessage({\n type: \"CORTI_EMBEDDED\",\n version: \"v1\",\n action: \"configureSession\",\n payload,\n });\n } catch (error) {\n const formattedError = formatError(error, \"Failed to configure session\");\n throw new Error(JSON.stringify(formattedError));\n }\n }\n\n /**\n * Add facts to the current session\n * @param facts Array of facts to add\n * @returns Promise that resolves when facts are added\n */\n async addFacts(facts: Corti.FactsCreateInput[]): Promise<void> {\n if (!this.postMessageHandler) {\n throw new Error(\"Component not ready\");\n }\n\n try {\n const payload: AddFactsPayload = { facts };\n await this.postMessageHandler.postMessage({\n type: \"CORTI_EMBEDDED\",\n version: \"v1\",\n action: \"addFacts\",\n payload,\n });\n } catch (error) {\n const formattedError = formatError(error, \"Failed to add facts\");\n throw new Error(JSON.stringify(formattedError));\n }\n }\n\n /**\n * Navigate to a specific path within the embedded UI\n * @param path Path to navigate to\n * @returns Promise that resolves when navigation is complete\n */\n async navigate(path: string): Promise<void> {\n if (!this.postMessageHandler) {\n throw new Error(\"Component not ready\");\n }\n\n try {\n const payload: NavigatePayload = { path };\n await this.postMessageHandler.postMessage({\n type: \"CORTI_EMBEDDED\",\n version: \"v1\",\n action: \"navigate\",\n payload,\n });\n } catch (error) {\n const formattedError = formatError(error, \"Failed to navigate\");\n throw new Error(JSON.stringify(formattedError));\n }\n }\n\n /**\n * Start recording\n * @returns Promise that resolves when recording starts\n */\n async startRecording(): Promise<void> {\n if (!this.postMessageHandler) {\n throw new Error(\"Component not ready\");\n }\n\n try {\n await this.postMessageHandler.postMessage({\n type: \"CORTI_EMBEDDED\",\n version: \"v1\",\n action: \"startRecording\",\n payload: {},\n });\n } catch (error) {\n const formattedError = formatError(error, \"Failed to start recording\");\n throw new Error(JSON.stringify(formattedError));\n }\n }\n\n /**\n * Stop recording\n * @returns Promise that resolves when recording stops\n */\n async stopRecording(): Promise<void> {\n if (!this.postMessageHandler) {\n throw new Error(\"Component not ready\");\n }\n\n try {\n await this.postMessageHandler.postMessage({\n type: \"CORTI_EMBEDDED\",\n version: \"v1\",\n action: \"stopRecording\",\n payload: {},\n });\n } catch (error) {\n const formattedError = formatError(error, \"Failed to stop recording\");\n throw new Error(JSON.stringify(formattedError));\n }\n }\n\n /**\n * Get current component status\n * @returns Promise resolving to current status\n */\n async getStatus(): Promise<GetStatusResponse> {\n if (!this.postMessageHandler) {\n return {\n auth: {\n isAuthenticated: false,\n user: undefined,\n },\n currentUrl: \"\",\n interaction: null,\n };\n }\n\n try {\n const response = await this.postMessageHandler.postMessage({\n type: \"CORTI_EMBEDDED\",\n version: \"v1\",\n action: \"getStatus\",\n payload: {},\n });\n\n if (response.success && response.payload) {\n return response.payload as GetStatusResponse;\n }\n throw new Error(response.error);\n } catch (error) {\n const formattedError = formatError(error, \"Failed to get status\");\n throw new Error(JSON.stringify(formattedError));\n }\n }\n\n /**\n * Configure the component\n * @param config Component configuration\n * @returns Promise that resolves when configuration is applied\n */\n async configure(config: ConfigureAppPayload): Promise<ConfigureAppResponse> {\n if (!this.postMessageHandler) {\n throw new Error(\"Component not ready\");\n }\n\n try {\n const response = await this.postMessageHandler.postMessage({\n type: \"CORTI_EMBEDDED\",\n version: \"v1\",\n action: \"configure\",\n payload: config,\n });\n\n if (response.success && response.payload) {\n return response.payload as ConfigureAppResponse;\n }\n throw new Error(response.error);\n } catch (error) {\n const formattedError = formatError(\n error,\n \"Failed to configure component\",\n );\n throw new Error(JSON.stringify(formattedError));\n }\n }\n\n /**\n * Set authentication credentials without triggering auth flow\n * @param credentials Authentication credentials to store\n * @returns Promise that resolves when credentials are set\n */\n async setCredentials(credentials: SetCredentialsPayload): Promise<void> {\n if (!this.postMessageHandler) {\n throw new Error(\"Component not ready\");\n }\n\n try {\n if (!credentials.password) {\n throw new Error(\"Password is required\");\n }\n await this.postMessageHandler.postMessage({\n type: \"CORTI_EMBEDDED\",\n version: \"v1\",\n action: \"setCredentials\",\n payload: credentials,\n });\n } catch (error) {\n const formattedError = formatError(error, \"Failed to set credentials\");\n throw new Error(JSON.stringify(formattedError));\n }\n }\n\n /**\n * Show the embedded UI\n */\n show(): void {\n this.visibility = \"visible\";\n }\n\n /**\n * Hide the embedded UI\n */\n hide(): void {\n this.visibility = \"hidden\";\n }\n\n /**\n * Get templates\n */\n async getTemplates(): Promise<GetTemplatesResponse> {\n if (!this.postMessageHandler) {\n throw new Error(\"Component not ready\");\n }\n\n try {\n const response = await this.postMessageHandler.postMessage({\n type: \"CORTI_EMBEDDED\",\n version: \"v1\",\n action: \"getTemplates\",\n });\n\n if (response.success && response.payload) {\n return response.payload as GetTemplatesResponse;\n }\n throw new Error(response.error);\n } catch (error) {\n const formattedError = formatError(error, \"Failed to get templates\");\n throw new Error(JSON.stringify(formattedError));\n }\n }\n\n /**\n * Check the current status of the iframe and PostMessageHandler\n * Useful for debugging\n * @deprecated Use getStatus() instead\n */\n getDebugStatus() {\n const iframe = this.getIframe();\n return {\n ready: iframe?.contentDocument?.readyState === \"complete\",\n iframeExists: !!iframe,\n iframeSrc: iframe?.src,\n iframeContentWindow: !!iframe?.contentWindow,\n iframeContentDocument: !!iframe?.contentDocument,\n iframeReadyState: iframe?.contentDocument?.readyState,\n postMessageHandlerExists: !!this.postMessageHandler,\n postMessageHandlerReady: this.postMessageHandler?.ready || false,\n baseURL: this.baseURL,\n };\n }\n\n render() {\n // Use the pre-validated normalizedBaseURL so render() never throws.\n // normalizedBaseURL is set in connectedCallback (before first render) and\n // kept up to date by updated() on each baseURL change.\n if (!this.normalizedBaseURL) {\n return html``;\n }\n\n return html`\n <iframe\n src=${buildEmbeddedUrl(this.normalizedBaseURL)}\n title=\"Corti Embedded UI\"\n sandbox=${IFRAME_SANDBOX_POLICY}\n allow=${this.getIframeAllowPolicy(this.normalizedBaseURL)}\n @load=${(event: Event) => this.handleIframeLoad(event)}\n @unload=${() => this.postMessageHandler?.destroy()}\n style=${this.visibility === \"hidden\"\n ? \"display: none;\"\n : \"display: block;\"}\n ></iframe>\n `;\n }\n}\n"]}
1
+ {"version":3,"file":"CortiEmbedded.js","sourceRoot":"","sources":["../src/CortiEmbedded.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable no-console */\nimport type { Corti } from \"@corti/sdk\";\nimport { html, LitElement, type PropertyValues } from \"lit\";\nimport { property } from \"lit/decorators.js\";\nimport type {\n AuthResponse,\n AddFactsPayload,\n ConfigureApplicationPayload,\n ConfigureApplicationResponse,\n ConfigurePayload,\n ConfigureResponse,\n ConfigureSessionPayload,\n CreateInteractionPayload,\n CreateInteractionResponse,\n NavigatePayload,\n SetInteractionOptionsPayload,\n SetCredentialsPayload,\n CortiEmbeddedAPI,\n InteractionDetails,\n SessionConfig,\n User,\n GetStatusResponse,\n GetTemplatesResponse,\n KeycloakTokenResponse,\n} from \"./public-types.js\";\nimport { baseStyles } from \"./styles/base.js\";\nimport { containerStyles } from \"./styles/container-styles.js\";\nimport { validateAndNormalizeBaseURL } from \"./utils/baseUrl.js\";\nimport { buildEmbeddedUrl, isRealEmbeddedLoad } from \"./utils/embedUrl.js\";\nimport { formatError } from \"./utils/errorFormatter.js\";\nimport {\n PostMessageHandler,\n type PostMessageHandlerCallbacks,\n} from \"./utils/PostMessageHandler.js\";\n\nconst IFRAME_SANDBOX_POLICY =\n \"allow-forms allow-modals allow-scripts allow-same-origin\";\n\nconst DEPRECATION_TIMELINE_URL =\n \"https://docs.corti.ai/assistant/deprecation-timeline\";\n\nconst CONFIGURATION_MIGRATION_URL =\n \"https://docs.corti.ai/assistant/configuration-migration\";\n\nconst DEPRECATED_EVENT_SUBSCRIPTIONS = new Set([\n \"ready\",\n \"loaded\",\n \"recordingStarted\",\n \"recordingStopped\",\n \"documentGenerated\",\n \"documentUpdated\",\n \"documentSynced\",\n \"authChanged\",\n \"interactionCreated\",\n \"navigationChanged\",\n \"usage\",\n \"embedded-event\",\n]);\n\ntype DOMEventListener =\n | ((event: Event) => void)\n | { handleEvent(event: Event): void };\n\ntype DOMAddEventListenerOptions =\n | boolean\n | {\n capture?: boolean;\n once?: boolean;\n passive?: boolean;\n signal?: AbortSignal;\n };\n\nexport class CortiEmbedded extends LitElement implements CortiEmbeddedAPI {\n static styles = [baseStyles, containerStyles];\n\n @property({ type: String, reflect: true })\n visibility = \"hidden\";\n\n @property({ type: String, reflect: true })\n baseURL!: string;\n\n private postMessageHandler: PostMessageHandler | null = null;\n\n private normalizedBaseURL: string | null = null;\n\n private warnedDeprecatedEventSubscriptions = new Set<string>();\n\n addEventListener(\n type: string,\n callback: DOMEventListener,\n options?: DOMAddEventListenerOptions,\n ): void {\n this.warnDeprecatedEventSubscription(type);\n super.addEventListener(type, callback, options);\n }\n\n private warnDeprecatedEventSubscription(eventName: string): void {\n if (\n !DEPRECATED_EVENT_SUBSCRIPTIONS.has(eventName) ||\n this.warnedDeprecatedEventSubscriptions.has(eventName)\n ) {\n return;\n }\n\n this.warnedDeprecatedEventSubscriptions.add(eventName);\n console.warn(\n `[Corti Embedded] The '${eventName}' event subscription is deprecated and will be removed in a future release. Subscribe to the canonical 'event' stream instead. See ${DEPRECATION_TIMELINE_URL}.`,\n );\n }\n\n // eslint-disable-next-line class-methods-use-this\n private getIframeAllowPolicy(normalizedBaseURL?: string | null): string {\n const permissionTarget = normalizedBaseURL\n ? new URL(normalizedBaseURL).origin\n : \"*\";\n\n return [\n `microphone ${permissionTarget}`,\n `camera ${permissionTarget}`,\n `device-capture ${permissionTarget}`,\n `display-capture ${permissionTarget}`,\n `clipboard-write ${permissionTarget}`,\n ].join(\"; \");\n }\n\n connectedCallback() {\n super.connectedCallback();\n\n // Ensure baseURL is provided\n if (!this.baseURL) {\n this.dispatchErrorEvent({\n message: \"baseURL is required\",\n });\n return;\n }\n\n // Validate and normalize the initial baseURL early (fail fast)\n try {\n this.normalizedBaseURL = validateAndNormalizeBaseURL(this.baseURL);\n } catch (error) {\n this.dispatchErrorEvent({\n message: (error as Error).message || \"Invalid baseURL\",\n });\n // Dispatch the error event rather than throwing so consumers can handle it\n // via the 'error' event listener without wrapping connectedCallback in try/catch.\n }\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n if (this.postMessageHandler) {\n this.postMessageHandler.destroy();\n this.postMessageHandler = null;\n }\n }\n\n private async setupPostMessageHandler() {\n // Prevent multiple setups\n if (this.postMessageHandler) {\n return;\n }\n\n const iframe = this.getIframe();\n\n if (iframe?.contentWindow) {\n const callbacks: PostMessageHandlerCallbacks = {\n onEvent: event => {\n this.dispatchEmbeddedEvent(event.name, event.payload);\n },\n onError: error => {\n this.dispatchErrorEvent(error);\n },\n };\n\n this.postMessageHandler = new PostMessageHandler(iframe, callbacks);\n } else {\n this.dispatchErrorEvent({\n message: \"No iframe or contentWindow available\",\n });\n }\n }\n\n private dispatchPublicEvent(event: string, data: unknown) {\n this.dispatchEvent(new CustomEvent(event, { detail: data }));\n }\n\n private dispatchEmbeddedEvent(rawEventName: string, payload: unknown) {\n if (rawEventName === \"ready\" || rawEventName === \"loaded\") return;\n // Pass all other events through as raw DOM events for direct listeners.\n this.dispatchPublicEvent(rawEventName, payload);\n\n // Forward supported embedded events through the generic 'event' stream so\n // consumers can observe them without subscribing to each raw event name.\n this.dispatchPublicEvent(\"event\", {\n name: rawEventName,\n payload,\n });\n\n // Also emit the legacy 'embedded-event' stream for backward compatibility.\n // This allows existing integrations listening for 'embedded-event' to continue\n // working while newer consumers can use the 'event' stream.\n this.dispatchPublicEvent(\"embedded-event\", {\n name: rawEventName,\n payload,\n });\n }\n\n private dispatchErrorEvent(error: {\n message: string;\n code?: string;\n details?: unknown;\n }) {\n this.dispatchPublicEvent(\"error\", error);\n }\n\n private static warnDeprecatedAPI(\n methodName: string,\n replacement: string,\n ): void {\n console.warn(\n `[Corti Embedded] ${methodName} is deprecated and will be removed in a future release. Use ${replacement} instead. See ${CONFIGURATION_MIGRATION_URL} and ${DEPRECATION_TIMELINE_URL}.`,\n );\n }\n\n private isRealIframeLoad(iframe: HTMLIFrameElement): boolean {\n const src = iframe.getAttribute(\"src\") || \"\";\n if (!this.normalizedBaseURL) return false;\n return isRealEmbeddedLoad(src, this.normalizedBaseURL);\n }\n\n private async handleIframeLoad(event: Event) {\n const iframe = event.target as HTMLIFrameElement | null;\n if (!iframe) {\n return;\n }\n // Only initialize on real URL load, ignore about:blank\n if (!this.isRealIframeLoad(iframe)) {\n return;\n }\n try {\n await this.setupPostMessageHandler();\n } catch (error) {\n this.dispatchErrorEvent({\n message: `Failed to setup PostMessageHandler on iframe load: ${error}`,\n });\n }\n }\n\n private getIframe(): HTMLIFrameElement | null {\n return this.shadowRoot?.querySelector(\"iframe\") || null;\n }\n\n protected updated(changedProps: PropertyValues) {\n super.updated(changedProps);\n if (changedProps.has(\"baseURL\")) {\n // Tear down the existing handler; the new one is created in handleIframeLoad\n if (this.postMessageHandler) {\n this.postMessageHandler.destroy();\n this.postMessageHandler = null;\n }\n\n // Validate the new URL\n try {\n this.normalizedBaseURL = validateAndNormalizeBaseURL(this.baseURL);\n } catch (error) {\n this.normalizedBaseURL = null;\n const iframe = this.getIframe();\n if (iframe) {\n iframe.setAttribute(\"src\", \"about:blank\");\n }\n this.dispatchErrorEvent({\n message: (error as Error).message || \"Invalid baseURL\",\n });\n return;\n }\n\n // Update the iframe to the new URL\n const iframe = this.getIframe();\n if (iframe) {\n const expected = buildEmbeddedUrl(this.normalizedBaseURL);\n iframe.setAttribute(\"allow\", this.getIframeAllowPolicy(expected));\n if (iframe.getAttribute(\"src\") !== expected) {\n iframe.setAttribute(\"src\", expected);\n }\n }\n }\n }\n\n // Public API Implementation\n\n /**\n * Authenticate with the Corti system\n * @param credentials Authentication credentials\n * @returns Promise resolving to user information\n */\n async auth(credentials: KeycloakTokenResponse): Promise<User> {\n if (!this.postMessageHandler) {\n throw new Error(\"Component not ready\");\n }\n\n try {\n const payload: KeycloakTokenResponse = {\n access_token: credentials.access_token,\n token_type: credentials.token_type,\n expires_at: credentials.expires_at,\n expires_in: credentials.expires_in,\n refresh_expires_in: credentials.refresh_expires_in,\n refresh_token: credentials.refresh_token,\n id_token: credentials.id_token,\n \"not-before-policy\": credentials[\"not-before-policy\"],\n session_state: credentials.session_state,\n scope: credentials.scope,\n profile: credentials.profile,\n };\n\n const response = await this.postMessageHandler.postMessage({\n type: \"CORTI_EMBEDDED\",\n version: \"v1\",\n action: \"auth\",\n payload,\n });\n\n if (response.success && response.payload) {\n return (response.payload as AuthResponse).user;\n }\n throw new Error(response.error);\n } catch (error) {\n const formattedError = formatError(error, \"Authentication failed\");\n throw new Error(JSON.stringify(formattedError));\n }\n }\n\n /**\n * Create a new interaction\n * @param encounter Encounter request data\n * @returns Promise resolving to interaction details\n */\n async createInteraction(\n encounter: CreateInteractionPayload,\n ): Promise<InteractionDetails> {\n if (!this.postMessageHandler) {\n throw new Error(\"Component not ready\");\n }\n\n try {\n const response = await this.postMessageHandler.postMessage({\n type: \"CORTI_EMBEDDED\",\n version: \"v1\",\n action: \"createInteraction\",\n payload: encounter,\n });\n\n if (response.success && response.payload) {\n const result = response.payload as CreateInteractionResponse;\n return {\n id: result.id,\n createdAt: result.createdAt,\n };\n }\n throw new Error(response.error);\n } catch (error) {\n const formattedError = formatError(error, \"Failed to create interaction\");\n throw new Error(JSON.stringify(formattedError));\n }\n }\n\n /**\n * Configure the current session\n * @param config Session configuration\n * @returns Promise that resolves when configuration is complete\n */\n async configureSession(config: SessionConfig): Promise<void> {\n if (!this.postMessageHandler) {\n throw new Error(\"Component not ready\");\n }\n\n try {\n CortiEmbedded.warnDeprecatedAPI(\n \"configureSession()\",\n \"setInteractionOptions()\",\n );\n const payload: ConfigureSessionPayload = {\n defaultLanguage: config.defaultLanguage,\n defaultOutputLanguage: config.defaultOutputLanguage,\n defaultTemplateKey: config.defaultTemplateKey,\n defaultMode: config.defaultMode,\n };\n\n await this.postMessageHandler.postMessage({\n type: \"CORTI_EMBEDDED\",\n version: \"v1\",\n action: \"configureSession\",\n payload,\n });\n } catch (error) {\n const formattedError = formatError(error, \"Failed to configure session\");\n throw new Error(JSON.stringify(formattedError));\n }\n }\n\n /**\n * Add facts to the current session\n * @param facts Array of facts to add\n * @returns Promise that resolves when facts are added\n */\n async addFacts(facts: Corti.FactsCreateInput[]): Promise<void> {\n if (!this.postMessageHandler) {\n throw new Error(\"Component not ready\");\n }\n\n try {\n const payload: AddFactsPayload = { facts };\n await this.postMessageHandler.postMessage({\n type: \"CORTI_EMBEDDED\",\n version: \"v1\",\n action: \"addFacts\",\n payload,\n });\n } catch (error) {\n const formattedError = formatError(error, \"Failed to add facts\");\n throw new Error(JSON.stringify(formattedError));\n }\n }\n\n /**\n * Navigate to a specific path within the embedded UI\n * @param payload Navigation request payload or legacy path string\n * @returns Promise that resolves when navigation is complete\n */\n async navigate(payload: NavigatePayload | string): Promise<void> {\n if (!this.postMessageHandler) {\n throw new Error(\"Component not ready\");\n }\n\n try {\n const normalizedPayload: NavigatePayload =\n typeof payload === \"string\" ? { path: payload } : payload;\n await this.postMessageHandler.postMessage({\n type: \"CORTI_EMBEDDED\",\n version: \"v1\",\n action: \"navigate\",\n payload: normalizedPayload,\n });\n } catch (error) {\n const formattedError = formatError(error, \"Failed to navigate\");\n throw new Error(JSON.stringify(formattedError));\n }\n }\n\n /**\n * Start recording\n * @returns Promise that resolves when recording starts\n */\n async startRecording(): Promise<void> {\n if (!this.postMessageHandler) {\n throw new Error(\"Component not ready\");\n }\n\n try {\n await this.postMessageHandler.postMessage({\n type: \"CORTI_EMBEDDED\",\n version: \"v1\",\n action: \"startRecording\",\n payload: {},\n });\n } catch (error) {\n const formattedError = formatError(error, \"Failed to start recording\");\n throw new Error(JSON.stringify(formattedError));\n }\n }\n\n /**\n * Stop recording\n * @returns Promise that resolves when recording stops\n */\n async stopRecording(): Promise<void> {\n if (!this.postMessageHandler) {\n throw new Error(\"Component not ready\");\n }\n\n try {\n await this.postMessageHandler.postMessage({\n type: \"CORTI_EMBEDDED\",\n version: \"v1\",\n action: \"stopRecording\",\n payload: {},\n });\n } catch (error) {\n const formattedError = formatError(error, \"Failed to stop recording\");\n throw new Error(JSON.stringify(formattedError));\n }\n }\n\n /**\n * Get current component status\n * @returns Promise resolving to current status\n */\n async getStatus(): Promise<GetStatusResponse> {\n if (!this.postMessageHandler) {\n return {\n auth: {\n isAuthenticated: false,\n user: undefined,\n },\n currentUrl: \"\",\n interaction: null,\n };\n }\n\n try {\n const response = await this.postMessageHandler.postMessage({\n type: \"CORTI_EMBEDDED\",\n version: \"v1\",\n action: \"getStatus\",\n payload: {},\n });\n\n if (response.success && response.payload) {\n return response.payload as GetStatusResponse;\n }\n throw new Error(response.error);\n } catch (error) {\n const formattedError = formatError(error, \"Failed to get status\");\n throw new Error(JSON.stringify(formattedError));\n }\n }\n\n /**\n * Configure the component\n * @param config Component configuration\n * @returns Promise that resolves when configuration is applied\n */\n async configureApp(\n config: ConfigureApplicationPayload,\n ): Promise<ConfigureApplicationResponse> {\n if (!this.postMessageHandler) {\n throw new Error(\"Component not ready\");\n }\n\n try {\n const response = await this.postMessageHandler.postMessage({\n type: \"CORTI_EMBEDDED\",\n version: \"v1\",\n action: \"configureApp\",\n payload: config,\n });\n\n if (response.success && response.payload) {\n return response.payload as ConfigureApplicationResponse;\n }\n throw new Error(response.error);\n } catch (error) {\n const formattedError = formatError(error, \"Failed to configure app\");\n throw new Error(JSON.stringify(formattedError));\n }\n }\n\n /**\n * Configure the component\n * @param config Component configuration\n * @returns Promise that resolves when configuration is applied\n */\n async configure(config: ConfigurePayload): Promise<ConfigureResponse> {\n if (!this.postMessageHandler) {\n throw new Error(\"Component not ready\");\n }\n\n try {\n CortiEmbedded.warnDeprecatedAPI(\"configure()\", \"configureApp()\");\n const response = await this.postMessageHandler.postMessage({\n type: \"CORTI_EMBEDDED\",\n version: \"v1\",\n action: \"configure\",\n payload: config,\n });\n\n if (response.success && response.payload) {\n return response.payload as ConfigureResponse;\n }\n throw new Error(response.error);\n } catch (error) {\n const formattedError = formatError(\n error,\n \"Failed to configure component\",\n );\n throw new Error(JSON.stringify(formattedError));\n }\n }\n\n /**\n * Set one-shot interaction options for the embedded instance.\n * @param config Interaction/session-level options\n * @returns Promise that resolves when options are applied\n */\n async setInteractionOptions(\n config: SetInteractionOptionsPayload,\n ): Promise<void> {\n if (!this.postMessageHandler) {\n throw new Error(\"Component not ready\");\n }\n\n try {\n const response = await this.postMessageHandler.postMessage({\n type: \"CORTI_EMBEDDED\",\n version: \"v1\",\n action: \"setInteractionOptions\",\n payload: config,\n });\n\n if (response.success === false || response.error) {\n throw new Error(response.error);\n }\n } catch (error) {\n const formattedError = formatError(\n error,\n \"Failed to set interaction options\",\n );\n throw new Error(JSON.stringify(formattedError));\n }\n }\n\n /**\n * Set authentication credentials without triggering auth flow\n * @param credentials Authentication credentials to store\n * @returns Promise that resolves when credentials are set\n */\n async setCredentials(credentials: SetCredentialsPayload): Promise<void> {\n if (!this.postMessageHandler) {\n throw new Error(\"Component not ready\");\n }\n\n try {\n if (!credentials.password) {\n throw new Error(\"Password is required\");\n }\n await this.postMessageHandler.postMessage({\n type: \"CORTI_EMBEDDED\",\n version: \"v1\",\n action: \"setCredentials\",\n payload: credentials,\n });\n } catch (error) {\n const formattedError = formatError(error, \"Failed to set credentials\");\n throw new Error(JSON.stringify(formattedError));\n }\n }\n\n /**\n * Show the embedded UI\n */\n show(): void {\n this.visibility = \"visible\";\n }\n\n /**\n * Hide the embedded UI\n */\n hide(): void {\n this.visibility = \"hidden\";\n }\n\n /**\n * Get templates\n */\n async getTemplates(): Promise<GetTemplatesResponse> {\n if (!this.postMessageHandler) {\n throw new Error(\"Component not ready\");\n }\n\n try {\n const response = await this.postMessageHandler.postMessage({\n type: \"CORTI_EMBEDDED\",\n version: \"v1\",\n action: \"getTemplates\",\n });\n\n if (response.success && response.payload) {\n return response.payload as GetTemplatesResponse;\n }\n throw new Error(response.error);\n } catch (error) {\n const formattedError = formatError(error, \"Failed to get templates\");\n throw new Error(JSON.stringify(formattedError));\n }\n }\n\n /**\n * Check the current status of the iframe and PostMessageHandler\n * Useful for debugging\n * @deprecated Use getStatus() instead\n */\n getDebugStatus() {\n const iframe = this.getIframe();\n return {\n ready: iframe?.contentDocument?.readyState === \"complete\",\n iframeExists: !!iframe,\n iframeSrc: iframe?.src,\n iframeContentWindow: !!iframe?.contentWindow,\n iframeContentDocument: !!iframe?.contentDocument,\n iframeReadyState: iframe?.contentDocument?.readyState,\n postMessageHandlerExists: !!this.postMessageHandler,\n postMessageHandlerReady: this.postMessageHandler?.ready || false,\n baseURL: this.baseURL,\n };\n }\n\n render() {\n // Use the pre-validated normalizedBaseURL so render() never throws.\n // normalizedBaseURL is set in connectedCallback (before first render) and\n // kept up to date by updated() on each baseURL change.\n if (!this.normalizedBaseURL) {\n return html``;\n }\n\n return html`\n <iframe\n src=${buildEmbeddedUrl(this.normalizedBaseURL)}\n title=\"Corti Embedded UI\"\n sandbox=${IFRAME_SANDBOX_POLICY}\n allow=${this.getIframeAllowPolicy(this.normalizedBaseURL)}\n @load=${(event: Event) => this.handleIframeLoad(event)}\n @unload=${() => this.postMessageHandler?.destroy()}\n style=${this.visibility === \"hidden\"\n ? \"display: none;\"\n : \"display: block;\"}\n ></iframe>\n `;\n }\n}\n"]}