@xpert-ai/chatkit-web-shared 0.4.3 → 0.4.4

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/dist/index.d.ts CHANGED
@@ -15,7 +15,7 @@ export declare type AnyFunction = (...args: any[]) => any;
15
15
 
16
16
  export declare type Attachment = any;
17
17
 
18
- export declare const BASE_CAPABILITY_ALLOWLIST: readonly ["command.setOptions", "command.sendUserMessage", "command.setComposerValue", "command.setRuntimeCapabilities", "command.setThreadId", "command.focusComposer", "command.fetchUpdates", "command.sendCustomAction", "command.showHistory", "command.hideHistory", "event.ready", "event.error", "event.log", "event.response.start", "event.response.end", "event.response.stop", "event.thread.change", "event.tool.change", "event.thread.load.start", "event.thread.load.end", "event.deeplink", "event.effect", "error.StreamError", "error.StreamEventParsingError", "error.WidgetItemError", "error.InitialThreadLoadError", "error.FileAttachmentError", "error.HistoryViewError", "error.FatalAppError", "error.IntegrationError", "error.EntitySearchError", "error.DomainVerificationRequestError", "backend.threads.get_by_id", "backend.threads.list", "backend.threads.update", "backend.threads.delete", "backend.threads.create", "backend.threads.add_user_message", "backend.threads.add_client_tool_output", "backend.threads.retry_after_item", "backend.threads.custom_action", "backend.attachments.create", "backend.attachments.get_preview", "backend.attachments.delete", "backend.items.list", "backend.items.feedback", "thread.item.generated_image", "thread.item.user_message", "thread.item.assistant_message", "thread.item.client_tool_call", "thread.item.widget", "thread.item.task", "thread.item.workflow", "thread.item.end_of_turn", "thread.item.image_generation", "widget.Basic", "widget.Card", "widget.ListView", "widget.ListViewItem", "widget.Badge", "widget.Box", "widget.Row", "widget.Col", "widget.Button", "widget.Caption", "widget.Chart", "widget.Checkbox", "widget.DatePicker", "widget.Divider", "widget.Form", "widget.Icon", "widget.Image", "widget.Input", "widget.Label", "widget.Markdown", "widget.RadioGroup", "widget.Select", "widget.Spacer", "widget.Text", "widget.Textarea", "widget.Title", "widget.Transition"];
18
+ export declare const BASE_CAPABILITY_ALLOWLIST: readonly ["command.setOptions", "command.sendUserMessage", "command.setComposerValue", "command.setRuntimeCapabilities", "command.setThreadId", "command.focusComposer", "command.fetchUpdates", "command.sendCustomAction", "command.showHistory", "command.hideHistory", "event.ready", "event.error", "event.log", "event.response.start", "event.response.end", "event.response.stop", "event.thread.change", "event.project.change", "event.connectors.change", "event.tool.change", "event.thread.load.start", "event.thread.load.end", "event.deeplink", "event.effect", "error.StreamError", "error.StreamEventParsingError", "error.WidgetItemError", "error.InitialThreadLoadError", "error.FileAttachmentError", "error.HistoryViewError", "error.FatalAppError", "error.IntegrationError", "error.EntitySearchError", "error.DomainVerificationRequestError", "backend.threads.get_by_id", "backend.threads.list", "backend.threads.update", "backend.threads.delete", "backend.threads.create", "backend.threads.add_user_message", "backend.threads.add_client_tool_output", "backend.threads.retry_after_item", "backend.threads.custom_action", "backend.attachments.create", "backend.attachments.get_preview", "backend.attachments.delete", "backend.items.list", "backend.items.feedback", "thread.item.generated_image", "thread.item.user_message", "thread.item.assistant_message", "thread.item.client_tool_call", "thread.item.widget", "thread.item.task", "thread.item.workflow", "thread.item.end_of_turn", "thread.item.image_generation", "widget.Basic", "widget.Card", "widget.ListView", "widget.ListViewItem", "widget.Badge", "widget.Box", "widget.Row", "widget.Col", "widget.Button", "widget.Caption", "widget.Chart", "widget.Checkbox", "widget.DatePicker", "widget.Divider", "widget.Form", "widget.Icon", "widget.Image", "widget.Input", "widget.Label", "widget.Markdown", "widget.RadioGroup", "widget.Select", "widget.Spacer", "widget.Text", "widget.Textarea", "widget.Title", "widget.Transition"];
19
19
 
20
20
  export declare const BASE_CAPABILITY_DENYLIST: readonly ["command.shareThread", "command.setTrainingOptOut", "event.thread.restore", "event.message.share", "event.image.download", "event.history.open", "event.history.close", "event.log.chatgpt", "error.HttpError", "error.NetworkError", "error.UnhandledError", "error.UnhandledPromiseRejectionError", "error.StreamEventHandlingError", "error.StreamStopError", "error.ThreadRenderingError", "error.IntlError", "error.AppError", "backend.threads.stop", "backend.threads.share", "backend.threads.create_from_shared", "backend.threads.init", "backend.attachments.process", "widget.CardCarousel", "widget.Favicon", "widget.CardLinkItem", "widget.Map"];
21
21
 
@@ -65,9 +65,9 @@ export declare namespace Capability {
65
65
  export type Command = keyof OuterCommands;
66
66
  export type Event = keyof PublicEvents;
67
67
  export type Error = PublicError;
68
- export type BackendOperation = ChatKitReq["type"];
69
- export type ThreadItemType = ThreadItem["type"];
70
- export type WidgetType = WidgetRoot["type"] | WidgetComponent["type"];
68
+ export type BackendOperation = ChatKitReq['type'];
69
+ export type ThreadItemType = ThreadItem['type'];
70
+ export type WidgetType = WidgetRoot['type'] | WidgetComponent['type'];
71
71
  export type Key = `command.${Command}` | `event.${Event}` | `thread.item.${ThreadItemType}` | `backend.${BackendOperation}` | `error.${Error}` | `widget.${WidgetType}`;
72
72
  export type Rules = {
73
73
  allow?: readonly Key[];
@@ -129,12 +129,12 @@ export declare type ChatKitMessage = {
129
129
  };
130
130
 
131
131
  export declare type ChatKitMessageAttachment = {
132
- type: "file";
132
+ type: 'file';
133
133
  id: string;
134
134
  name: string;
135
135
  mime_type: string;
136
136
  } | {
137
- type: "image";
137
+ type: 'image';
138
138
  id: string;
139
139
  preview_url: string;
140
140
  name: string;
@@ -173,7 +173,7 @@ export declare const decodeBase64: <T = unknown>(b64: string) => T;
173
173
 
174
174
  export declare const encodeBase64: (value: unknown) => string;
175
175
 
176
- export declare type FollowUpMode = "default" | "queue" | "steer";
176
+ export declare type FollowUpMode = 'default' | 'queue' | 'steer';
177
177
 
178
178
  export declare function fromPossibleFrameSafeError(err: any): any;
179
179
 
@@ -229,27 +229,33 @@ export declare type PublicEvents = {
229
229
  error: Error;
230
230
  };
231
231
  log: PublicLogEventPayload;
232
- "response.start": void;
233
- "response.end": void;
234
- "response.stop": any;
235
- "thread.change": {
232
+ 'response.start': void;
233
+ 'response.end': void;
234
+ 'response.stop': any;
235
+ 'thread.change': {
236
236
  threadId: string | null;
237
237
  };
238
- "tool.change": any;
239
- "thread.load.start": {
238
+ 'project.change': {
239
+ projectId: string | null;
240
+ };
241
+ 'connectors.change': {
242
+ connectorBindingIds: string[];
243
+ };
244
+ 'tool.change': any;
245
+ 'thread.load.start': {
240
246
  threadId: string;
241
247
  };
242
- "thread.load.end": {
248
+ 'thread.load.end': {
243
249
  threadId: string;
244
250
  };
245
251
  deeplink: PublicNamedEventPayload;
246
252
  effect: PublicNamedEventPayload;
247
253
  'thread.restore': any;
248
- "message.share": any;
249
- "image.download": any;
250
- "history.open": any;
251
- "history.close": any;
252
- "log.chatgpt": any;
254
+ 'message.share': any;
255
+ 'image.download': any;
256
+ 'history.open': any;
257
+ 'history.close': any;
258
+ 'log.chatgpt': any;
253
259
  };
254
260
 
255
261
  export declare type PublicLogEventPayload = {
@@ -271,7 +277,7 @@ export declare type RuntimeCapabilitiesSelection = RuntimeCapabilitiesSelection_
271
277
  recommended?: RuntimeCapabilitiesSelectionSet;
272
278
  };
273
279
 
274
- export declare type RuntimeCapabilitiesSelectionSet = Omit<RuntimeCapabilitiesSelection_2, "mode" | "recommended">;
280
+ export declare type RuntimeCapabilitiesSelectionSet = Omit<RuntimeCapabilitiesSelection_2, 'mode' | 'recommended'>;
275
281
 
276
282
  export declare type SendUserMessageCommandPayload = {
277
283
  text?: string;
@@ -331,9 +337,9 @@ export declare namespace Capability {
331
337
  type Command = keyof OuterCommands;
332
338
  type Event = keyof PublicEvents;
333
339
  type Error = PublicError;
334
- type BackendOperation = ChatKitReq["type"];
335
- type ThreadItemType = ThreadItem["type"];
336
- type WidgetType = WidgetRoot["type"] | WidgetComponent["type"];
340
+ type BackendOperation = ChatKitReq['type'];
341
+ type ThreadItemType = ThreadItem['type'];
342
+ type WidgetType = WidgetRoot['type'] | WidgetComponent['type'];
337
343
  type Key = `command.${Command}` | `event.${Event}` | `thread.item.${ThreadItemType}` | `backend.${BackendOperation}` | `error.${Error}` | `widget.${WidgetType}`;
338
344
  type Rules = {
339
345
  allow?: readonly Key[];
package/dist/index.js CHANGED
@@ -703,6 +703,8 @@ const BASE_CAPABILITY_ALLOWLIST = [
703
703
  "event.response.end",
704
704
  "event.response.stop",
705
705
  "event.thread.change",
706
+ "event.project.change",
707
+ "event.connectors.change",
706
708
  "event.tool.change",
707
709
  "event.thread.load.start",
708
710
  "event.thread.load.end",
@@ -808,7 +810,7 @@ const BASE_CAPABILITY_DENYLIST = [
808
810
  "widget.Map"
809
811
  ];
810
812
  const PROFILE_TO_RULES = {
811
- "chatkit": {
813
+ chatkit: {
812
814
  allow: [...BASE_CAPABILITY_ALLOWLIST, "thread.item.image_generation"],
813
815
  deny: BASE_CAPABILITY_DENYLIST
814
816
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/EventEmitter.ts","../../../node_modules/.pnpm/@microsoft+fetch-event-source@2.0.1/node_modules/@microsoft/fetch-event-source/lib/esm/parse.js","../../../node_modules/.pnpm/@microsoft+fetch-event-source@2.0.1/node_modules/@microsoft/fetch-event-source/lib/esm/fetch.js","../src/errors/WrappedError.ts","../src/errors/HttpError.ts","../src/requestRetry.ts","../src/fetchEventSourceWithRetry.ts","../src/safeRandomUUID.ts","../src/messageChannel.ts","../src/errors/IntegrationError.ts","../src/BaseMessenger.ts","../src/frameEncoding.ts","../src/types/index.ts","../src/types/capabilities.types.ts","../src/capabilities.ts"],"sourcesContent":["import type { AnyFunction } from \"./types\"\n\nexport class EventEmitter<T extends Record<string, unknown> = Record<string, unknown>> {\n private callbacks = new Map<keyof T, Set<AnyFunction>>()\n\n on<E extends keyof T>(event: E, callback: (data: T[E]) => void) {\n if (!this.callbacks.has(event)) {\n this.callbacks.set(event, new Set())\n }\n this.callbacks.get(event)!.add(callback)\n }\n\n emit<E extends keyof T>(event: E, ...args: T[E] extends void ? [data?: T[E]] : [data: T[E]]) {\n // If T[E] is void, args is [], so data is undefined\n // If T[E] is not void, args is [data]\n const data = args[0] as T[E]\n this.callbacks.get(event)?.forEach((callback) => callback(data))\n }\n\n off<E extends keyof T>(event: E, callback?: (data: T[E]) => void) {\n if (!callback) {\n this.callbacks.delete(event)\n } else {\n this.callbacks.get(event)?.delete(callback)\n }\n }\n\n allOff() {\n this.callbacks.clear()\n }\n}\n","export async function getBytes(stream, onChunk) {\r\n const reader = stream.getReader();\r\n let result;\r\n while (!(result = await reader.read()).done) {\r\n onChunk(result.value);\r\n }\r\n}\r\nexport function getLines(onLine) {\r\n let buffer;\r\n let position;\r\n let fieldLength;\r\n let discardTrailingNewline = false;\r\n return function onChunk(arr) {\r\n if (buffer === undefined) {\r\n buffer = arr;\r\n position = 0;\r\n fieldLength = -1;\r\n }\r\n else {\r\n buffer = concat(buffer, arr);\r\n }\r\n const bufLength = buffer.length;\r\n let lineStart = 0;\r\n while (position < bufLength) {\r\n if (discardTrailingNewline) {\r\n if (buffer[position] === 10) {\r\n lineStart = ++position;\r\n }\r\n discardTrailingNewline = false;\r\n }\r\n let lineEnd = -1;\r\n for (; position < bufLength && lineEnd === -1; ++position) {\r\n switch (buffer[position]) {\r\n case 58:\r\n if (fieldLength === -1) {\r\n fieldLength = position - lineStart;\r\n }\r\n break;\r\n case 13:\r\n discardTrailingNewline = true;\r\n case 10:\r\n lineEnd = position;\r\n break;\r\n }\r\n }\r\n if (lineEnd === -1) {\r\n break;\r\n }\r\n onLine(buffer.subarray(lineStart, lineEnd), fieldLength);\r\n lineStart = position;\r\n fieldLength = -1;\r\n }\r\n if (lineStart === bufLength) {\r\n buffer = undefined;\r\n }\r\n else if (lineStart !== 0) {\r\n buffer = buffer.subarray(lineStart);\r\n position -= lineStart;\r\n }\r\n };\r\n}\r\nexport function getMessages(onId, onRetry, onMessage) {\r\n let message = newMessage();\r\n const decoder = new TextDecoder();\r\n return function onLine(line, fieldLength) {\r\n if (line.length === 0) {\r\n onMessage === null || onMessage === void 0 ? void 0 : onMessage(message);\r\n message = newMessage();\r\n }\r\n else if (fieldLength > 0) {\r\n const field = decoder.decode(line.subarray(0, fieldLength));\r\n const valueOffset = fieldLength + (line[fieldLength + 1] === 32 ? 2 : 1);\r\n const value = decoder.decode(line.subarray(valueOffset));\r\n switch (field) {\r\n case 'data':\r\n message.data = message.data\r\n ? message.data + '\\n' + value\r\n : value;\r\n break;\r\n case 'event':\r\n message.event = value;\r\n break;\r\n case 'id':\r\n onId(message.id = value);\r\n break;\r\n case 'retry':\r\n const retry = parseInt(value, 10);\r\n if (!isNaN(retry)) {\r\n onRetry(message.retry = retry);\r\n }\r\n break;\r\n }\r\n }\r\n };\r\n}\r\nfunction concat(a, b) {\r\n const res = new Uint8Array(a.length + b.length);\r\n res.set(a);\r\n res.set(b, a.length);\r\n return res;\r\n}\r\nfunction newMessage() {\r\n return {\r\n data: '',\r\n event: '',\r\n id: '',\r\n retry: undefined,\r\n };\r\n}\r\n//# sourceMappingURL=parse.js.map","var __rest = (this && this.__rest) || function (s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n};\r\nimport { getBytes, getLines, getMessages } from './parse';\r\nexport const EventStreamContentType = 'text/event-stream';\r\nconst DefaultRetryInterval = 1000;\r\nconst LastEventId = 'last-event-id';\r\nexport function fetchEventSource(input, _a) {\r\n var { signal: inputSignal, headers: inputHeaders, onopen: inputOnOpen, onmessage, onclose, onerror, openWhenHidden, fetch: inputFetch } = _a, rest = __rest(_a, [\"signal\", \"headers\", \"onopen\", \"onmessage\", \"onclose\", \"onerror\", \"openWhenHidden\", \"fetch\"]);\r\n return new Promise((resolve, reject) => {\r\n const headers = Object.assign({}, inputHeaders);\r\n if (!headers.accept) {\r\n headers.accept = EventStreamContentType;\r\n }\r\n let curRequestController;\r\n function onVisibilityChange() {\r\n curRequestController.abort();\r\n if (!document.hidden) {\r\n create();\r\n }\r\n }\r\n if (!openWhenHidden) {\r\n document.addEventListener('visibilitychange', onVisibilityChange);\r\n }\r\n let retryInterval = DefaultRetryInterval;\r\n let retryTimer = 0;\r\n function dispose() {\r\n document.removeEventListener('visibilitychange', onVisibilityChange);\r\n window.clearTimeout(retryTimer);\r\n curRequestController.abort();\r\n }\r\n inputSignal === null || inputSignal === void 0 ? void 0 : inputSignal.addEventListener('abort', () => {\r\n dispose();\r\n resolve();\r\n });\r\n const fetch = inputFetch !== null && inputFetch !== void 0 ? inputFetch : window.fetch;\r\n const onopen = inputOnOpen !== null && inputOnOpen !== void 0 ? inputOnOpen : defaultOnOpen;\r\n async function create() {\r\n var _a;\r\n curRequestController = new AbortController();\r\n try {\r\n const response = await fetch(input, Object.assign(Object.assign({}, rest), { headers, signal: curRequestController.signal }));\r\n await onopen(response);\r\n await getBytes(response.body, getLines(getMessages(id => {\r\n if (id) {\r\n headers[LastEventId] = id;\r\n }\r\n else {\r\n delete headers[LastEventId];\r\n }\r\n }, retry => {\r\n retryInterval = retry;\r\n }, onmessage)));\r\n onclose === null || onclose === void 0 ? void 0 : onclose();\r\n dispose();\r\n resolve();\r\n }\r\n catch (err) {\r\n if (!curRequestController.signal.aborted) {\r\n try {\r\n const interval = (_a = onerror === null || onerror === void 0 ? void 0 : onerror(err)) !== null && _a !== void 0 ? _a : retryInterval;\r\n window.clearTimeout(retryTimer);\r\n retryTimer = window.setTimeout(create, interval);\r\n }\r\n catch (innerErr) {\r\n dispose();\r\n reject(innerErr);\r\n }\r\n }\r\n }\r\n }\r\n create();\r\n });\r\n}\r\nfunction defaultOnOpen(response) {\r\n const contentType = response.headers.get('content-type');\r\n if (!(contentType === null || contentType === void 0 ? void 0 : contentType.startsWith(EventStreamContentType))) {\r\n throw new Error(`Expected content-type to be ${EventStreamContentType}, Actual: ${contentType}`);\r\n }\r\n}\r\n//# sourceMappingURL=fetch.js.map","/// <reference path=\"../import-meta-env.d.ts\" />\n\nimport type { ChatKitResponseMetadata } from \"./HttpError\"\n\nexport const FRAME_SAFE_ERROR_KEY = \"__chatkit_error__\"\n\nexport class FrameSafeWrappedError {\n [FRAME_SAFE_ERROR_KEY]: string\n message: string\n stack?: string\n\n constructor(error: Error) {\n this[FRAME_SAFE_ERROR_KEY] = error.name\n this.message = error.message\n this.stack = error.stack\n }\n}\n\n// Wraps an original with a context-aware error message and name\n// while preserving the original error stack.\nexport abstract class WrappedError extends Error {\n override cause: unknown\n eventName: string\n metadata?: ChatKitResponseMetadata;\n // TODO(jiwon): remove after Kakao moves away from referencing __chatkit_error__ directly.\n [FRAME_SAFE_ERROR_KEY]: string\n\n // Define an explicit getter for the error name so that it is not minified away.\n protected get canonicalName(): string {\n if (import.meta.env[\"DEV\"]) {\n throw new Error(\"Subclass must override canonicalName\")\n }\n return \"AppError\"\n }\n\n constructor(original: unknown, messagePrefix?: string) {\n const errorMessage = original instanceof Error ? original.message : String(original)\n const cause = original instanceof Error ? original : undefined\n super(errorMessage, { cause })\n\n // Make sure we set the name as the runtime subclass name\n this.name = this.canonicalName\n\n const prefix = messagePrefix ? messagePrefix + \": \" : \"\"\n if (!errorMessage.startsWith(prefix)) {\n this.message = `${prefix}${errorMessage}`\n }\n\n // TODO(jiwon): remove this once partner moves away from referencing __chatkit_error__ directly\n this[FRAME_SAFE_ERROR_KEY] = this.name\n\n // MyComponentError -> error.myComponent\n this.eventName =\n this.name.length > 0\n ? `error.${this.name.charAt(0).toLowerCase() + this.name.slice(1).replace(/Error$/i, \"\")}`\n : \"error.app\"\n\n // Copy over original error stack and metadata (these won't get copied over by default).\n if (cause && cause.stack) {\n this.stack = cause.stack\n }\n if (cause && \"metadata\" in cause && cause.metadata) {\n this.metadata = cause.metadata as ChatKitResponseMetadata\n }\n }\n\n static fromPossibleFrameSafeError(error: unknown): WrappedError | null {\n if (\n error &&\n typeof error === \"object\" &&\n FRAME_SAFE_ERROR_KEY in error &&\n typeof error[FRAME_SAFE_ERROR_KEY] === \"string\" &&\n NAME_TO_ERROR_CLASS[error[FRAME_SAFE_ERROR_KEY] as keyof typeof NAME_TO_ERROR_CLASS]\n ) {\n const safeError = error as FrameSafeWrappedError\n const ErrorCls =\n NAME_TO_ERROR_CLASS[error[FRAME_SAFE_ERROR_KEY] as keyof typeof NAME_TO_ERROR_CLASS]!\n const parsedError = new ErrorCls(safeError.message)\n parsedError.stack = safeError.stack\n parsedError.name = safeError[FRAME_SAFE_ERROR_KEY]\n // TODO(jiwon): remove this once partner moves away from referencing __chatkit_error__ directly.\n parsedError[FRAME_SAFE_ERROR_KEY] = safeError[FRAME_SAFE_ERROR_KEY]\n return parsedError\n }\n return null\n }\n}\n\n// The public error version of StreamError defined in chatkit-web-inner/src/lib/errors/StreamError.ts\nexport class StreamError extends WrappedError {\n override get canonicalName(): string {\n return \"StreamError\"\n }\n}\n\nexport class StreamEventParsingError extends WrappedError {\n override get canonicalName(): string {\n return \"StreamEventParsingError\"\n }\n constructor(original: unknown) {\n const messagePrefix = \"Failed to parse stream event\"\n super(original, messagePrefix)\n }\n}\n\nexport class StreamEventHandlingError extends WrappedError {\n override get canonicalName(): string {\n return \"StreamEventHandlingError\"\n }\n constructor(original: unknown) {\n const messagePrefix = \"Failed to handle stream event\"\n super(original, messagePrefix)\n }\n}\n\nexport class StreamStopError extends WrappedError {\n override get canonicalName(): string {\n return \"StreamStopError\"\n }\n constructor(original: unknown) {\n const messagePrefix = \"Failed to stop stream\"\n super(original, messagePrefix)\n }\n}\nexport class ThreadRenderingError extends WrappedError {\n override get canonicalName(): string {\n return \"ThreadRenderingError\"\n }\n}\n\nexport class HistoryViewError extends WrappedError {\n override get canonicalName(): string {\n return \"HistoryViewError\"\n }\n constructor(original: unknown) {\n const messagePrefix = \"Failed to load conversation\"\n super(original, messagePrefix)\n }\n}\n\nexport class EntitySearchError extends WrappedError {\n override get canonicalName(): string {\n return \"EntitySearchError\"\n }\n static fromQuery(error: unknown, query: string) {\n const messagePrefix = `Failed to search entities for query: ${query}`\n return new EntitySearchError(error, messagePrefix)\n }\n}\n\nexport class WidgetItemError extends WrappedError {\n override get canonicalName(): string {\n return \"WidgetItemError\"\n }\n}\n\nexport class InitialThreadLoadError extends WrappedError {\n override get canonicalName(): string {\n return \"InitialThreadLoadError\"\n }\n constructor(original: unknown) {\n const messagePrefix = \"Failed to load initial thread\"\n super(original, messagePrefix)\n }\n}\n\nexport class FileAttachmentError extends WrappedError {\n override get canonicalName(): string {\n return \"FileAttachmentError\"\n }\n constructor(original: unknown) {\n const messagePrefix = \"Failed to upload file\"\n super(original, messagePrefix)\n }\n}\n\nexport class UnhandledError extends WrappedError {\n override get canonicalName(): string {\n return \"UnhandledError\"\n }\n}\n\nexport class UnhandledPromiseRejectionError extends WrappedError {\n override get canonicalName(): string {\n return \"UnhandledPromiseRejectionError\"\n }\n}\n\nexport class IntlError extends WrappedError {\n code: string\n\n override get canonicalName(): string {\n return \"IntlError\"\n }\n constructor(original: unknown) {\n const messagePrefix = \"Intl error\"\n super(original, messagePrefix)\n this.code =\n typeof original === \"object\" && original !== null && \"code\" in original\n ? String(original.code)\n : \"\"\n }\n}\n\nexport class FatalAppError extends WrappedError {\n override get canonicalName(): string {\n return \"FatalAppError\"\n }\n}\n\nexport class NetworkError extends WrappedError {\n override get canonicalName(): string {\n return \"NetworkError\"\n }\n}\n\nexport class DomainVerificationRequestError extends WrappedError {\n override get canonicalName(): string {\n return \"DomainVerificationRequestError\"\n }\n}\n\n/** Generic app error class for one-off errors that don't fit into other categories. */\nexport class AppError extends WrappedError {\n override get canonicalName(): string {\n return \"AppError\"\n }\n}\n\nconst NAME_TO_ERROR_CLASS = {\n StreamError,\n StreamEventParsingError,\n StreamEventHandlingError,\n StreamStopError,\n ThreadRenderingError,\n HistoryViewError,\n EntitySearchError,\n WidgetItemError,\n InitialThreadLoadError,\n FileAttachmentError,\n UnhandledError,\n UnhandledPromiseRejectionError,\n IntlError,\n DomainVerificationRequestError,\n NetworkError,\n FatalAppError,\n} as const\n","import { FRAME_SAFE_ERROR_KEY } from \"./WrappedError\"\n\nexport interface ChatKitResponseMetadata {\n requestId?: string\n [key: string]: unknown\n}\n\nexport class HttpError extends Error {\n status?: number\n statusText?: string\n metadata?: ChatKitResponseMetadata\n\n constructor(\n message: string,\n res: Response | { status?: number; statusText?: string },\n metadata?: ChatKitResponseMetadata,\n ) {\n super(message)\n this.name = \"HttpError\"\n this.statusText = res.statusText\n this.status = res.status\n this.metadata = metadata\n }\n\n static fromPossibleFrameSafeError(error: unknown): HttpError | null {\n if (error instanceof HttpError) {\n return error\n }\n\n if (\n error &&\n typeof error === \"object\" &&\n FRAME_SAFE_ERROR_KEY in error &&\n error[FRAME_SAFE_ERROR_KEY] === \"HttpError\"\n ) {\n const safeError = error as FrameSafeHttpError\n const parsedError = new HttpError(\n safeError.message,\n {\n status: safeError.status,\n statusText: safeError.statusText,\n },\n safeError.metadata,\n )\n parsedError.stack = safeError.stack\n return parsedError\n }\n\n return null\n }\n}\n\n// does not extend Error so that it serializes correctly over structured clone\nexport class FrameSafeHttpError {\n [FRAME_SAFE_ERROR_KEY] = \"HttpError\"\n message: string\n stack?: string\n status?: number\n statusText?: string\n metadata?: ChatKitResponseMetadata\n\n constructor(\n message: string,\n res: Response | { status?: number; statusText?: string },\n metadata?: ChatKitResponseMetadata,\n ) {\n this.message = message\n this.stack = new Error(message).stack\n this.status = res.status\n this.statusText = res.statusText\n this.metadata = metadata\n }\n\n static fromHttpError(error: HttpError): FrameSafeHttpError {\n return new FrameSafeHttpError(\n error.message,\n {\n status: error.status,\n statusText: error.statusText,\n },\n error.metadata,\n )\n }\n}\n","// Retry backoff parameters.\n// TODO: consider making this configurable since this concerns API requests made to\n// the integrator's server.\nconst BASE_RETRY_DELAY_MS = 1000\nconst MAX_RETRY_DELAY_MS = 10_000\nexport const MAX_RETRY_ATTEMPTS = 5\n\n// Backoff with half jitter.\n// With the default parameters, results in the following retry delays:\n// 1st: 1–2s, 2nd: 2–4s, 3rd: 4–8s, 4th+: 5–10s (capped).\nexport const nextDelay = (\n attempt: number,\n maxRetryDelay = MAX_RETRY_DELAY_MS,\n baseDelayMs = BASE_RETRY_DELAY_MS,\n) => {\n const max = Math.min(maxRetryDelay, baseDelayMs * 2 ** attempt)\n // uniform in [0.5*max, max)\n return Math.floor(max * (0.5 + Math.random() * 0.5))\n}\n","import { fetchEventSource } from \"@microsoft/fetch-event-source\"\n\nimport { FrameSafeHttpError } from \"./errors/HttpError\"\nimport { MAX_RETRY_ATTEMPTS, nextDelay } from \"./requestRetry.js\"\n\nimport type { FetchEventSourceInit } from \"@microsoft/fetch-event-source\"\n\nclass RetryableError extends Error {\n constructor(cause: FrameSafeHttpError) {\n super()\n this.cause = cause\n }\n}\n\nexport const fetchEventSourceWithRetry = async (\n url: string,\n params: Omit<FetchEventSourceInit, \"onerror\" | \"onclose\">,\n) => {\n let retryAttempt = 0\n const { onopen, ...restParams } = params\n await fetchEventSource(url, {\n ...restParams,\n onopen: async (res) => {\n onopen?.(res)\n if (res.ok && res.headers.get(\"content-type\")?.startsWith(\"text/event-stream\")) {\n // All is well, we can continue streaming.\n retryAttempt = 0 // reset on success\n return\n }\n\n // Throw FrameSafeHttpError so that it serializes correctly over postMessage\n const httpError = new FrameSafeHttpError(`Streaming failed: ${res.statusText}`, res)\n\n if (res.status >= 400 && res.status < 500) {\n // This is likely a fatal error, client's are supposed to send errors as SSE\n // but we can handle this gracefully by ending the streaming state. It could be\n // that this error is due to a misconfigured server or an upstream proxy returning\n // an error, etc.\n throw httpError\n } else {\n // A 5xx error, we can let the client retry.\n throw new RetryableError(httpError)\n }\n },\n onerror: (error) => {\n if (error instanceof RetryableError) {\n if (retryAttempt >= MAX_RETRY_ATTEMPTS) {\n throw error.cause\n }\n\n retryAttempt += 1\n return nextDelay(retryAttempt) // returning a number sets the retry wait\n }\n\n // All other errors are fatal and should not be retried.\n // TODO: log error for monitoring purposes\n throw error\n },\n })\n}\n","export function createSecureChannelId(): string | null {\n const cryptoRef = globalThis.crypto\n\n if (typeof cryptoRef?.randomUUID === \"function\") {\n return cryptoRef.randomUUID()\n }\n\n if (typeof cryptoRef?.getRandomValues === \"function\") {\n const bytes = new Uint8Array(16)\n cryptoRef.getRandomValues(bytes)\n\n bytes[6] = (bytes[6] & 0x0f) | 0x40\n bytes[8] = (bytes[8] & 0x3f) | 0x80\n\n return [...bytes]\n .map((byte) => byte.toString(16).padStart(2, \"0\"))\n .join(\"\")\n .replace(/^(.{8})(.{4})(.{4})(.{4})(.{12})$/, \"$1-$2-$3-$4-$5\")\n }\n\n return null\n}\n\nexport function safeRandomUUID(): string {\n return (\n createSecureChannelId() ??\n `ck_${Date.now()}_${Math.random().toString(16).slice(2)}`\n )\n}\n","export type ChatKitMessageChannel = {\n channelId?: string\n expectedOrigin: string\n expectedSource: MessageEventSource | null\n}\n\nexport function isTrustedChatKitMessageEvent(\n event: MessageEvent,\n { channelId, expectedOrigin, expectedSource }: ChatKitMessageChannel,\n): boolean {\n const payload = event.data\n if (\n !payload ||\n typeof payload !== \"object\" ||\n !(\"__xpaiChatKit\" in payload)\n ) {\n return false\n }\n if (payload.__xpaiChatKit !== true) {\n return false\n }\n if (expectedOrigin !== \"*\" && event.origin !== expectedOrigin) {\n return false\n }\n if (event.source === expectedSource) {\n return true\n }\n\n const normalizedChannelId = channelId?.trim()\n if (normalizedChannelId) {\n return \"channelId\" in payload && payload.channelId === normalizedChannelId\n }\n\n return false\n}\n","import { FRAME_SAFE_ERROR_KEY } from \"./WrappedError\"\n\nexport class IntegrationError extends Error {\n _name: string\n\n constructor(message: string) {\n super(message)\n this.name = \"IntegrationError\"\n this._name = this.name\n }\n\n static fromPossibleFrameSafeError(error: unknown): IntegrationError | null {\n if (\n error &&\n typeof error === \"object\" &&\n FRAME_SAFE_ERROR_KEY in error &&\n error[FRAME_SAFE_ERROR_KEY] === \"IntegrationError\"\n ) {\n const safeError = error as FrameSafeIntegrationError\n const parsedError = new IntegrationError(safeError.message)\n parsedError.stack = safeError.stack\n return parsedError\n }\n return null\n }\n}\n\n// does not extend Error so that it serializes correctly over structured clone\nexport class FrameSafeIntegrationError {\n [FRAME_SAFE_ERROR_KEY] = \"IntegrationError\"\n message: string\n stack?: string\n constructor(message: string) {\n this.message = message\n this.stack = new Error(message).stack\n }\n}\n","import type { EventSourceMessage, FetchEventSourceInit } from \"@microsoft/fetch-event-source\"\nimport { EventEmitter } from \"./EventEmitter\"\nimport { fetchEventSourceWithRetry } from \"./fetchEventSourceWithRetry.js\"\nimport { safeRandomUUID } from \"./safeRandomUUID.js\"\nimport { isTrustedChatKitMessageEvent } from \"./messageChannel.js\"\nimport type { AnyFunction } from \"./types\"\nimport { FrameSafeHttpError, HttpError } from \"./errors/HttpError\"\nimport { FrameSafeIntegrationError, IntegrationError } from \"./errors/IntegrationError\"\n\ntype ChatKitMessage =\n | {\n type: \"command\"\n nonce: string\n command: string\n data: unknown\n }\n | {\n type: \"response\"\n nonce: string\n response?: unknown\n error?: unknown\n }\n | {\n type: \"fetch\"\n nonce: string\n params: RequestInit\n formData?: Record<string, unknown>\n url: string\n }\n | {\n type: \"abortSignal\"\n nonce: string\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n reason?: any\n }\n | {\n type: \"fetchEventSource\"\n nonce: string\n params: Omit<FetchEventSourceInit, \"onmessage\" | \"onerror\" | \"onopen\" | \"onclose\">\n url: string\n }\n | {\n type: \"fetchEventSourceMessage\"\n nonce: string\n message: EventSourceMessage\n }\n | {\n type: \"event\"\n event: string\n data: unknown\n }\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n// TODO - some kind of ready state / queue for messages while waiting for the target to be ready\nexport abstract class BaseMessenger<\n Commands extends Record<string, AnyFunction> = Record<string, never>,\n ReceivedCommands extends Record<string, AnyFunction> = Record<string, never>,\n Events extends Record<string, any> = Record<string, never>,\n ReceivedEvents extends Record<string, any> = Record<string, never>,\n> {\n private targetOrigin: string\n private target: () => Window | null\n private channelId?: string\n private commandHandlers: Record<string, AnyFunction>\n private _fetch: typeof window.fetch\n\n // Override this method to implement runtime command capability validation\n abstract canReceiveCommand(_: string): boolean\n\n constructor({\n handlers,\n target,\n targetOrigin,\n channelId,\n fetch = window.fetch,\n }: {\n target: () => Window | null\n targetOrigin: string\n channelId?: string\n fetch?: typeof window.fetch\n handlers: {\n [K in keyof ReceivedCommands as K extends `${infer C}${infer S}`\n ? `on${Capitalize<C>}${S}`\n : never]: (\n data: Parameters<ReceivedCommands[K]>[0],\n ) => ReturnType<ReceivedCommands[K]> | Promise<ReturnType<ReceivedCommands[K]>>\n }\n }) {\n this.commandHandlers = handlers\n this.target = target\n this.targetOrigin = targetOrigin\n this.channelId = channelId?.trim() || undefined\n this._fetch = ((...args) => fetch(...args)) as typeof window.fetch\n }\n\n private emitter = new EventEmitter<Record<string, unknown>>()\n private handlers = new Map<\n string,\n { resolve: (data: unknown) => void; reject: (err: unknown) => void; stack: string }\n >()\n private fetchEventSourceHandlers = new Map<\n string,\n {\n onmessage?: (ev: EventSourceMessage) => void\n onclose?: () => void\n }\n >()\n\n setTargetOrigin(targetOrigin: string) {\n this.targetOrigin = targetOrigin\n }\n private abortControllers = new Map<string, AbortController>()\n\n private sendMessage(data: ChatKitMessage, transfer?: Transferable[]) {\n const message = {\n __xpaiChatKit: true,\n ...(this.channelId ? { channelId: this.channelId } : {}),\n ...data,\n }\n this.target()?.postMessage(message, this.targetOrigin, transfer)\n }\n\n connect() {\n window.addEventListener(\"message\", this.handleMessage)\n }\n\n disconnect() {\n window.removeEventListener(\"message\", this.handleMessage)\n }\n\n fetch<T = unknown>(url: string, params: RequestInit) {\n return new Promise<unknown>((resolve, reject) => {\n const nonce = safeRandomUUID()\n this.handlers.set(nonce, { resolve, reject, stack: new Error().stack || \"\" })\n\n // Special case for FormData since it isn't structured cloneable\n let formData: Record<string, unknown> | undefined\n if (params.body instanceof FormData) {\n formData = {}\n for (const [key, value] of params.body.entries()) {\n formData[key] = value\n }\n params.body = undefined\n }\n\n // special case for abortSignal since it isn't structured cloneable\n if (params.signal) {\n params.signal.addEventListener(\"abort\", () => {\n this.sendMessage({\n type: \"abortSignal\",\n nonce,\n reason: params.signal?.reason,\n })\n })\n params.signal = undefined\n }\n\n this.sendMessage({ type: \"fetch\", nonce, params, formData, url })\n }) as Promise<T>\n }\n\n // Supporting onopen would require a good way for us to serialize the Response object\n // across the iframe boundary, which is not trivial and also not really necessary.\n fetchEventSource(\n url: string,\n params: Omit<FetchEventSourceInit, \"onopen\" | \"onerror\" | \"onclose\">,\n ) {\n return new Promise<unknown>((resolve, reject) => {\n const { onmessage, signal, ...rest } = params\n const nonce = safeRandomUUID()\n\n this.handlers.set(nonce, { resolve, reject, stack: new Error().stack || \"\" })\n this.fetchEventSourceHandlers.set(nonce, {\n onmessage,\n })\n\n // special case for abortSignal since it isn't structured cloneable\n if (signal) {\n signal.addEventListener(\"abort\", () => {\n this.sendMessage({\n type: \"abortSignal\",\n nonce,\n reason: signal.reason,\n })\n })\n }\n\n this.sendMessage({ type: \"fetchEventSource\", nonce, params: rest, url })\n }) as Promise<void>\n }\n\n commands = new Proxy(\n {},\n {\n get: (_, command: string) => {\n return (data: Record<string, unknown>, transfer?: Transferable[]) => {\n return new Promise<unknown>((resolve, reject) => {\n const nonce = safeRandomUUID()\n this.handlers.set(nonce, { resolve, reject, stack: new Error().stack || \"\" })\n this.sendMessage(\n {\n type: \"command\",\n nonce,\n command: `on${command.charAt(0).toUpperCase()}${command.slice(1)}`,\n data,\n },\n transfer,\n )\n })\n }\n },\n },\n ) as {\n [K in keyof Commands]: (\n ...args: Commands[K] extends () => any\n ? [data?: void, transfer?: void]\n : [data: Parameters<Commands[K]>[0], transfer?: Transferable[]]\n ) => Promise<Awaited<ReturnType<Commands[K]>>>\n }\n\n emit<E extends keyof Events>(\n ...[event, data, transfer]: Events[E] extends void\n ? [event: E]\n : [event: E, data: Events[E], transfer?: Transferable[]]\n ) {\n this.sendMessage(\n {\n type: \"event\" as const,\n event: event as string,\n data,\n },\n transfer,\n )\n }\n\n on<E extends keyof ReceivedEvents>(\n ...[event, callback]: ReceivedEvents[E] extends void\n ? [event: E, callback: () => void]\n : [event: E, callback: (data: ReceivedEvents[E]) => void]\n ) {\n this.emitter.on(event as string, callback as AnyFunction)\n }\n\n destroy() {\n window.removeEventListener(\"message\", this.handleMessage)\n this.emitter.allOff()\n this.handlers.clear()\n }\n\n private handleMessage = async (event: MessageEvent) => {\n if (\n !isTrustedChatKitMessageEvent(event, {\n channelId: this.channelId,\n expectedOrigin: this.targetOrigin,\n expectedSource: this.target(),\n })\n ) {\n return\n }\n\n const data = event.data as ChatKitMessage\n\n switch (data.type) {\n case \"event\": {\n this.emitter.emit(data.event, data.data)\n break\n }\n case \"fetch\": {\n // TODO - handle server errors - non-200 status codes or whatever\n try {\n // Special case for FormData since it isn't structured cloneable\n if (data.formData) {\n const formData = new FormData()\n for (const [key, value] of Object.entries(data.formData)) {\n formData.append(key, value as string)\n }\n data.params.body = formData\n }\n\n // special case for abortSignal since it isn't structured cloneable\n const controller = new AbortController()\n this.abortControllers.set(data.nonce, controller)\n data.params.signal = controller.signal\n\n const res = await this._fetch(data.url, data.params)\n\n if (!res.ok) {\n // TODO - structured errors from ChatKit SDK so we can handle these a bit better\n const message = await res\n .json()\n .then((json) => json.message || res.statusText)\n .catch(() => res.statusText)\n\n throw new FrameSafeHttpError(message, res)\n }\n\n // TODO: only accept non-JSON responses when fetching external API\n // (e.g. S3/Azure blob storage uploads)\n const json = await res.json().catch(() => ({}))\n this.sendMessage({\n type: \"response\",\n response: json,\n nonce: data.nonce,\n })\n } catch (error) {\n this.sendMessage({\n type: \"response\",\n error,\n nonce: data.nonce,\n })\n }\n break\n }\n case \"fetchEventSource\": {\n try {\n // special case for abortSignal since it isn't structured cloneable\n const controller = new AbortController()\n this.abortControllers.set(data.nonce, controller)\n await fetchEventSourceWithRetry(data.url, {\n ...data.params,\n signal: controller.signal,\n fetch: this._fetch,\n onmessage: (message) => {\n this.sendMessage({\n type: \"fetchEventSourceMessage\",\n message,\n nonce: data.nonce,\n })\n },\n })\n this.sendMessage({\n type: \"response\",\n response: undefined,\n nonce: data.nonce,\n })\n } catch (error) {\n this.sendMessage({\n type: \"response\",\n error,\n nonce: data.nonce,\n })\n }\n break\n }\n case \"command\": {\n if (!this.canReceiveCommand(data.command)) {\n this.sendMessage({\n type: \"response\",\n error: new FrameSafeIntegrationError(`Command ${data.command} not supported`),\n nonce: data.nonce,\n })\n return\n }\n try {\n const response = await this.commandHandlers[data.command]?.(data.data)\n this.sendMessage({\n type: \"response\",\n response,\n nonce: data.nonce,\n })\n } catch (error) {\n this.sendMessage({\n type: \"response\",\n error,\n nonce: data.nonce,\n })\n }\n break\n }\n case \"response\": {\n const handler = this.handlers.get(data.nonce)\n if (!handler) {\n // log this\n // eslint-disable-next-line no-console\n console.error(\"No handler found for nonce\", data.nonce)\n return\n }\n if (data.error) {\n const integrationError = IntegrationError.fromPossibleFrameSafeError(data.error)\n const httpError = HttpError.fromPossibleFrameSafeError(data.error)\n if (integrationError) {\n // Set the stack from the handler so the user can see where the\n // error originated in their own integration code.\n integrationError.stack = handler.stack\n handler.reject(integrationError)\n } else if (httpError) {\n handler.reject(httpError)\n } else {\n handler.reject(data.error)\n }\n } else {\n handler.resolve(data.response)\n }\n this.handlers.delete(data.nonce)\n break\n }\n case \"fetchEventSourceMessage\": {\n const handler = this.fetchEventSourceHandlers.get(data.nonce)\n if (!handler) {\n // log this\n // eslint-disable-next-line no-console\n console.error(\"No handler found for nonce\", data.nonce)\n return\n }\n this.fetchEventSourceHandlers.get(data.nonce)?.onmessage?.(data.message)\n break\n }\n case \"abortSignal\": {\n const controller = this.abortControllers.get(data.nonce)\n if (controller) {\n controller.abort(data.reason)\n this.abortControllers.delete(data.nonce)\n }\n break\n }\n default: {\n data satisfies never\n // log this\n break\n }\n }\n }\n}\n","const toUrlBase64 = (bin: string) =>\n btoa(bin).replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=+$/, \"\")\n\nconst fromUrlBase64 = (b64: string) => atob(b64.replace(/-/g, \"+\").replace(/_/g, \"/\"))\n\nexport const encodeBase64 = (value: unknown): string => {\n if (value === undefined) {\n throw new TypeError(\n \"encodeBase64: `undefined` cannot be encoded to valid JSON. Pass null instead.\",\n )\n }\n const json = JSON.stringify(value)\n const bytes = new TextEncoder().encode(json)\n let bin = \"\"\n for (const b of bytes) bin += String.fromCharCode(b)\n return toUrlBase64(bin)\n}\n\nexport const decodeBase64 = <T = unknown>(b64: string): T => {\n const bin = fromUrlBase64(b64)\n const bytes = Uint8Array.from(bin, (c) => c.charCodeAt(0))\n const json = new TextDecoder().decode(bytes)\n return JSON.parse(json) as T\n}\n","import type { EventSourceMessage, FetchEventSourceInit } from \"@microsoft/fetch-event-source\"\n\nexport type ChatKitMessage =\n | {\n type: \"command\"\n nonce: string\n command: string\n data: unknown\n }\n | {\n type: \"response\"\n nonce: string\n response?: unknown\n error?: unknown\n }\n | {\n type: \"fetch\"\n nonce: string\n params: RequestInit\n formData?: Record<string, unknown>\n url: string\n }\n | {\n type: \"abortSignal\"\n nonce: string\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n reason?: any\n }\n | {\n type: \"fetchEventSource\"\n nonce: string\n params: Omit<FetchEventSourceInit, \"onmessage\" | \"onerror\" | \"onopen\" | \"onclose\">\n url: string\n }\n | {\n type: \"fetchEventSourceMessage\"\n nonce: string\n message: EventSourceMessage\n }\n | {\n type: \"event\"\n event: string\n data: unknown\n }\n\nexport type AnyFunction = (...args: any[]) => any\nexport type OuterEvents = any\nexport type InnerEvents = any\nexport type InnerCommands = any\nexport type Attachment = any\nexport type ChatKitFrameParams = any\nexport type ChatKitProfile = 'chatkit'\nexport type ChatKitInnerOptions = any\nexport type UserMessageContent = any\nexport type ToolChoice = any\n\nexport type RemoveMethods<T> = T extends AnyFunction ? \"[ChatKitMethod]\" : T extends object ? { [K in keyof T]: RemoveMethods<T[K]>; } : T;\nexport class IntegrationError extends Error {}\n\nexport function fromPossibleFrameSafeError(err: any): any {\n // Placeholder implementation\n return err.message\n}","import type {\n ChatKitReference,\n ChatKitReferenceCompositionMode,\n RuntimeCapabilitiesSelection as ChatKitRuntimeCapabilitiesSelection,\n} from \"@xpert-ai/chatkit-types\"\n\nexport type {\n ChatKitCodeReference,\n ChatKitElementAttribute,\n ChatKitElementReference,\n ChatKitFileElementReference,\n ChatKitImageReference,\n ChatKitQuoteReference,\n ChatKitReference,\n ChatKitReferenceBase,\n ChatKitReferenceCompositionMode,\n} from \"@xpert-ai/chatkit-types\"\n\nexport type ChatKitReq = any\n\ntype JsonRecord = Record<string, unknown>\n\nexport type SerializedChatKitOptions = JsonRecord\nexport type ChatKitCommandUserMessageContent = unknown\nexport type ChatKitCommandToolChoice = unknown\n\nexport type RuntimeCapabilitiesSelectionSet = Omit<\n ChatKitRuntimeCapabilitiesSelection,\n \"mode\" | \"recommended\"\n>\n\nexport type RuntimeCapabilitiesSelection = ChatKitRuntimeCapabilitiesSelection & {\n recommended?: RuntimeCapabilitiesSelectionSet\n}\n\nexport type ChatKitMessageAttachment =\n | {\n type: \"file\"\n id: string\n name: string\n mime_type: string\n }\n | {\n type: \"image\"\n id: string\n preview_url: string\n name: string\n mime_type: string\n }\n\nexport type WorkflowTriggerParams = JsonRecord\nexport type FollowUpMode = \"default\" | \"queue\" | \"steer\"\n\nexport type SendUserMessageCommandPayload = {\n text?: string\n content?: ChatKitCommandUserMessageContent[]\n state?: JsonRecord\n reply?: string\n attachments?: ChatKitMessageAttachment[]\n newThread?: boolean\n references?: ChatKitReference[]\n referenceComposition?: ChatKitReferenceCompositionMode\n toolChoice?: ChatKitCommandToolChoice\n model?: string\n planMode?: boolean\n runtimeCapabilities?: RuntimeCapabilitiesSelection\n trigger?: WorkflowTriggerParams\n followUpMode?: FollowUpMode\n}\n\nexport type SetComposerValueCommandPayload = {\n text?: string\n content?: ChatKitCommandUserMessageContent[]\n reply?: string\n attachments?: ChatKitMessageAttachment[]\n references?: ChatKitReference[]\n appendReferences?: boolean\n files?: File[]\n selectedToolId?: string | null\n selectedModelId?: string | null\n runtimeCapabilities?: RuntimeCapabilitiesSelection | null\n insertRuntimeCapabilities?: boolean\n}\n\nexport type CustomActionCommandPayload = {\n action: {\n type: string\n payload?: JsonRecord\n }\n itemId?: string\n}\n\nexport type PublicLogEventPayload = {\n name: string\n data?: JsonRecord\n [key: string]: unknown\n}\n\nexport type PublicNamedEventPayload = {\n name: string\n data?: JsonRecord\n}\n\nexport type OuterCommands = {\n setOptions: (options: SerializedChatKitOptions) => void\n sendUserMessage: (params: SendUserMessageCommandPayload) => void\n setPetEnabled: (params: { enabled: boolean }) => void\n setComposerValue: (params: SetComposerValueCommandPayload) => void\n setRuntimeCapabilities: (selection: RuntimeCapabilitiesSelection | null) => void\n setThreadId: (params: { threadId: string | null }) => void\n focusComposer: () => void\n fetchUpdates: () => void\n sendCustomAction: (params: CustomActionCommandPayload) => void\n showHistory: () => void\n hideHistory: () => void\n shareThread: () => void\n setTrainingOptOut: (params: { value: boolean }) => void\n}\nexport type PublicEvents = {\n ready: void\n error: { error: Error }\n log: PublicLogEventPayload\n \"response.start\": void\n \"response.end\": void\n \"response.stop\": any\n \"thread.change\": { threadId: string | null }\n \"tool.change\": any\n \"thread.load.start\": { threadId: string }\n \"thread.load.end\": { threadId: string }\n deeplink: PublicNamedEventPayload\n effect: PublicNamedEventPayload\n 'thread.restore': any\n \"message.share\": any\n \"image.download\": any\n \"history.open\": any\n \"history.close\": any\n \"log.chatgpt\": any\n}\nexport type PublicError = 'StreamError' | 'StreamEventParsingError' | 'WidgetItemError' | 'InitialThreadLoadError' | 'FileAttachmentError' | 'HistoryViewError' | 'FatalAppError' | 'IntegrationError' | 'EntitySearchError' | 'DomainVerificationRequestError' | 'HttpError' | 'NetworkError' | 'UnhandledError' | 'UnhandledPromiseRejectionError' | 'StreamEventHandlingError' | 'StreamStopError' | 'ThreadRenderingError' | 'IntlError' | 'AppError'\nexport type ThreadItem = { type: string }\nexport type WidgetRoot = { type: string }\nexport type WidgetComponent = { type: string }\n\n\n\n// This is a type-only namespace and will disappear after compile.\n// eslint-disable-next-line @typescript-eslint/no-namespace\nexport namespace Capability {\n export type Command = keyof OuterCommands\n export type Event = keyof PublicEvents\n export type Error = PublicError\n\n export type BackendOperation = ChatKitReq[\"type\"]\n export type ThreadItemType = ThreadItem[\"type\"]\n export type WidgetType = WidgetRoot[\"type\"] | WidgetComponent[\"type\"]\n\n export type Key =\n | `command.${Command}`\n | `event.${Event}`\n | `thread.item.${ThreadItemType}`\n | `backend.${BackendOperation}`\n | `error.${Error}`\n | `widget.${WidgetType}`\n\n export type Rules = {\n allow?: readonly Key[] // allow-list\n deny?: readonly Key[] // optional additional denies\n }\n}\n\n// Publicly exported capabili\nexport type Capabilities = {\n commands: Set<Capability.Command>\n events: Set<Capability.Event>\n errors: Set<Capability.Error>\n backend: Set<Capability.BackendOperation>\n threadItems: Set<Capability.ThreadItemType>\n widgets: Set<Capability.WidgetType>\n}\n\n// Default capabilities. We intersect this with allow/deny lists on profiles\n// to compute effective capabilities.\nexport const BASE_CAPABILITY_ALLOWLIST = [\n // commands\n \"command.setOptions\",\n \"command.sendUserMessage\",\n \"command.setComposerValue\",\n \"command.setRuntimeCapabilities\",\n \"command.setThreadId\",\n \"command.focusComposer\",\n \"command.fetchUpdates\",\n \"command.sendCustomAction\",\n \"command.showHistory\",\n \"command.hideHistory\",\n // events\n \"event.ready\",\n \"event.error\",\n \"event.log\",\n \"event.response.start\",\n \"event.response.end\",\n \"event.response.stop\",\n \"event.thread.change\",\n \"event.tool.change\",\n \"event.thread.load.start\",\n \"event.thread.load.end\",\n \"event.deeplink\",\n \"event.effect\",\n // errors\n \"error.StreamError\",\n \"error.StreamEventParsingError\",\n \"error.WidgetItemError\",\n \"error.InitialThreadLoadError\",\n \"error.FileAttachmentError\",\n \"error.HistoryViewError\",\n \"error.FatalAppError\",\n \"error.IntegrationError\",\n \"error.EntitySearchError\",\n \"error.DomainVerificationRequestError\",\n // backend\n \"backend.threads.get_by_id\",\n \"backend.threads.list\",\n \"backend.threads.update\",\n \"backend.threads.delete\",\n \"backend.threads.create\",\n \"backend.threads.add_user_message\",\n \"backend.threads.add_client_tool_output\",\n \"backend.threads.retry_after_item\",\n \"backend.threads.custom_action\",\n \"backend.attachments.create\",\n \"backend.attachments.get_preview\",\n \"backend.attachments.delete\",\n \"backend.items.list\",\n \"backend.items.feedback\",\n // thread item types\n \"thread.item.generated_image\",\n \"thread.item.user_message\",\n \"thread.item.assistant_message\",\n \"thread.item.client_tool_call\",\n \"thread.item.widget\",\n \"thread.item.task\",\n \"thread.item.workflow\",\n \"thread.item.end_of_turn\",\n \"thread.item.image_generation\",\n // widgets\n \"widget.Basic\",\n \"widget.Card\",\n \"widget.ListView\",\n \"widget.ListViewItem\",\n \"widget.Badge\",\n \"widget.Box\",\n \"widget.Row\",\n \"widget.Col\",\n \"widget.Button\",\n \"widget.Caption\",\n \"widget.Chart\",\n \"widget.Checkbox\",\n \"widget.DatePicker\",\n \"widget.Divider\",\n \"widget.Form\",\n \"widget.Icon\",\n \"widget.Image\",\n \"widget.Input\",\n \"widget.Label\",\n \"widget.Markdown\",\n \"widget.RadioGroup\",\n \"widget.Select\",\n \"widget.Spacer\",\n \"widget.Text\",\n \"widget.Textarea\",\n \"widget.Title\",\n \"widget.Transition\",\n] as const satisfies readonly Capability.Key[]\n\nexport const BASE_CAPABILITY_DENYLIST = [\n // --- commands\n \"command.shareThread\",\n \"command.setTrainingOptOut\",\n // --- events\n \"event.thread.restore\",\n \"event.message.share\",\n \"event.image.download\",\n \"event.history.open\",\n \"event.history.close\",\n \"event.log.chatgpt\",\n // --- errors\n // These errors considered internal and are not exposed to the user by default.\n \"error.HttpError\",\n \"error.NetworkError\",\n \"error.UnhandledError\",\n \"error.UnhandledPromiseRejectionError\",\n \"error.StreamEventHandlingError\",\n \"error.StreamStopError\",\n \"error.ThreadRenderingError\",\n \"error.IntlError\",\n \"error.AppError\",\n // --- backend\n \"backend.threads.stop\",\n \"backend.threads.share\",\n \"backend.threads.create_from_shared\",\n \"backend.threads.init\",\n \"backend.attachments.process\",\n // widgets\n \"widget.CardCarousel\",\n \"widget.Favicon\",\n \"widget.CardLinkItem\",\n \"widget.Map\",\n] as const satisfies readonly Capability.Key[]\n\nexport const PROFILE_TO_RULES = {\n \"chatkit\": {\n allow: [...BASE_CAPABILITY_ALLOWLIST, \"thread.item.image_generation\"],\n deny: BASE_CAPABILITY_DENYLIST,\n },\n}\n","import {\n PROFILE_TO_RULES,\n} from \"./types/capabilities.types\"\n\nimport type { ChatKitProfile } from \"./types\"\nimport type { Capabilities, Capability } from \"./types/capabilities.types\"\n\nexport const getCapabilities = (profile: ChatKitProfile): Capabilities => {\n const rules = PROFILE_TO_RULES[profile]\n const effective = new Set(rules.allow as readonly Capability.Key[])\n for (const capability of rules.deny ?? []) {\n effective.delete(capability)\n }\n\n const commands = new Set<Capability.Command>()\n const events = new Set<Capability.Event>()\n const backend = new Set<Capability.BackendOperation>()\n const threadItems = new Set<Capability.ThreadItemType>()\n const errors = new Set<Capability.Error>()\n const widgets = new Set<Capability.WidgetType>()\n\n for (const capability of effective) {\n if (capability.startsWith(\"command.\")) {\n commands.add(capability.slice(\"command.\".length) as Capability.Command)\n continue\n }\n if (capability.startsWith(\"event.\")) {\n events.add(capability.slice(\"event.\".length) as Capability.Event)\n continue\n }\n if (capability.startsWith(\"backend.\")) {\n backend.add(capability.slice(\"backend.\".length) as Capability.BackendOperation)\n continue\n }\n if (capability.startsWith(\"thread.item.\")) {\n threadItems.add(capability.slice(\"thread.item.\".length) as Capability.ThreadItemType)\n }\n if (capability.startsWith(\"error.\")) {\n errors.add(capability.slice(\"error.\".length) as Capability.Error)\n continue\n }\n if (capability.startsWith(\"widget.\")) {\n widgets.add(capability.slice(\"widget.\".length) as Capability.WidgetType)\n continue\n }\n }\n\n return { commands, events, backend, threadItems, errors, widgets }\n}"],"names":["_a","_b","json","IntegrationError"],"mappings":"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","x_google_ignoreList":[1,2]}
1
+ {"version":3,"file":"index.js","sources":["../src/EventEmitter.ts","../../../node_modules/.pnpm/@microsoft+fetch-event-source@2.0.1/node_modules/@microsoft/fetch-event-source/lib/esm/parse.js","../../../node_modules/.pnpm/@microsoft+fetch-event-source@2.0.1/node_modules/@microsoft/fetch-event-source/lib/esm/fetch.js","../src/errors/WrappedError.ts","../src/errors/HttpError.ts","../src/requestRetry.ts","../src/fetchEventSourceWithRetry.ts","../src/safeRandomUUID.ts","../src/messageChannel.ts","../src/errors/IntegrationError.ts","../src/BaseMessenger.ts","../src/frameEncoding.ts","../src/types/index.ts","../src/types/capabilities.types.ts","../src/capabilities.ts"],"sourcesContent":["import type { AnyFunction } from \"./types\"\n\nexport class EventEmitter<T extends Record<string, unknown> = Record<string, unknown>> {\n private callbacks = new Map<keyof T, Set<AnyFunction>>()\n\n on<E extends keyof T>(event: E, callback: (data: T[E]) => void) {\n if (!this.callbacks.has(event)) {\n this.callbacks.set(event, new Set())\n }\n this.callbacks.get(event)!.add(callback)\n }\n\n emit<E extends keyof T>(event: E, ...args: T[E] extends void ? [data?: T[E]] : [data: T[E]]) {\n // If T[E] is void, args is [], so data is undefined\n // If T[E] is not void, args is [data]\n const data = args[0] as T[E]\n this.callbacks.get(event)?.forEach((callback) => callback(data))\n }\n\n off<E extends keyof T>(event: E, callback?: (data: T[E]) => void) {\n if (!callback) {\n this.callbacks.delete(event)\n } else {\n this.callbacks.get(event)?.delete(callback)\n }\n }\n\n allOff() {\n this.callbacks.clear()\n }\n}\n","export async function getBytes(stream, onChunk) {\r\n const reader = stream.getReader();\r\n let result;\r\n while (!(result = await reader.read()).done) {\r\n onChunk(result.value);\r\n }\r\n}\r\nexport function getLines(onLine) {\r\n let buffer;\r\n let position;\r\n let fieldLength;\r\n let discardTrailingNewline = false;\r\n return function onChunk(arr) {\r\n if (buffer === undefined) {\r\n buffer = arr;\r\n position = 0;\r\n fieldLength = -1;\r\n }\r\n else {\r\n buffer = concat(buffer, arr);\r\n }\r\n const bufLength = buffer.length;\r\n let lineStart = 0;\r\n while (position < bufLength) {\r\n if (discardTrailingNewline) {\r\n if (buffer[position] === 10) {\r\n lineStart = ++position;\r\n }\r\n discardTrailingNewline = false;\r\n }\r\n let lineEnd = -1;\r\n for (; position < bufLength && lineEnd === -1; ++position) {\r\n switch (buffer[position]) {\r\n case 58:\r\n if (fieldLength === -1) {\r\n fieldLength = position - lineStart;\r\n }\r\n break;\r\n case 13:\r\n discardTrailingNewline = true;\r\n case 10:\r\n lineEnd = position;\r\n break;\r\n }\r\n }\r\n if (lineEnd === -1) {\r\n break;\r\n }\r\n onLine(buffer.subarray(lineStart, lineEnd), fieldLength);\r\n lineStart = position;\r\n fieldLength = -1;\r\n }\r\n if (lineStart === bufLength) {\r\n buffer = undefined;\r\n }\r\n else if (lineStart !== 0) {\r\n buffer = buffer.subarray(lineStart);\r\n position -= lineStart;\r\n }\r\n };\r\n}\r\nexport function getMessages(onId, onRetry, onMessage) {\r\n let message = newMessage();\r\n const decoder = new TextDecoder();\r\n return function onLine(line, fieldLength) {\r\n if (line.length === 0) {\r\n onMessage === null || onMessage === void 0 ? void 0 : onMessage(message);\r\n message = newMessage();\r\n }\r\n else if (fieldLength > 0) {\r\n const field = decoder.decode(line.subarray(0, fieldLength));\r\n const valueOffset = fieldLength + (line[fieldLength + 1] === 32 ? 2 : 1);\r\n const value = decoder.decode(line.subarray(valueOffset));\r\n switch (field) {\r\n case 'data':\r\n message.data = message.data\r\n ? message.data + '\\n' + value\r\n : value;\r\n break;\r\n case 'event':\r\n message.event = value;\r\n break;\r\n case 'id':\r\n onId(message.id = value);\r\n break;\r\n case 'retry':\r\n const retry = parseInt(value, 10);\r\n if (!isNaN(retry)) {\r\n onRetry(message.retry = retry);\r\n }\r\n break;\r\n }\r\n }\r\n };\r\n}\r\nfunction concat(a, b) {\r\n const res = new Uint8Array(a.length + b.length);\r\n res.set(a);\r\n res.set(b, a.length);\r\n return res;\r\n}\r\nfunction newMessage() {\r\n return {\r\n data: '',\r\n event: '',\r\n id: '',\r\n retry: undefined,\r\n };\r\n}\r\n//# sourceMappingURL=parse.js.map","var __rest = (this && this.__rest) || function (s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n};\r\nimport { getBytes, getLines, getMessages } from './parse';\r\nexport const EventStreamContentType = 'text/event-stream';\r\nconst DefaultRetryInterval = 1000;\r\nconst LastEventId = 'last-event-id';\r\nexport function fetchEventSource(input, _a) {\r\n var { signal: inputSignal, headers: inputHeaders, onopen: inputOnOpen, onmessage, onclose, onerror, openWhenHidden, fetch: inputFetch } = _a, rest = __rest(_a, [\"signal\", \"headers\", \"onopen\", \"onmessage\", \"onclose\", \"onerror\", \"openWhenHidden\", \"fetch\"]);\r\n return new Promise((resolve, reject) => {\r\n const headers = Object.assign({}, inputHeaders);\r\n if (!headers.accept) {\r\n headers.accept = EventStreamContentType;\r\n }\r\n let curRequestController;\r\n function onVisibilityChange() {\r\n curRequestController.abort();\r\n if (!document.hidden) {\r\n create();\r\n }\r\n }\r\n if (!openWhenHidden) {\r\n document.addEventListener('visibilitychange', onVisibilityChange);\r\n }\r\n let retryInterval = DefaultRetryInterval;\r\n let retryTimer = 0;\r\n function dispose() {\r\n document.removeEventListener('visibilitychange', onVisibilityChange);\r\n window.clearTimeout(retryTimer);\r\n curRequestController.abort();\r\n }\r\n inputSignal === null || inputSignal === void 0 ? void 0 : inputSignal.addEventListener('abort', () => {\r\n dispose();\r\n resolve();\r\n });\r\n const fetch = inputFetch !== null && inputFetch !== void 0 ? inputFetch : window.fetch;\r\n const onopen = inputOnOpen !== null && inputOnOpen !== void 0 ? inputOnOpen : defaultOnOpen;\r\n async function create() {\r\n var _a;\r\n curRequestController = new AbortController();\r\n try {\r\n const response = await fetch(input, Object.assign(Object.assign({}, rest), { headers, signal: curRequestController.signal }));\r\n await onopen(response);\r\n await getBytes(response.body, getLines(getMessages(id => {\r\n if (id) {\r\n headers[LastEventId] = id;\r\n }\r\n else {\r\n delete headers[LastEventId];\r\n }\r\n }, retry => {\r\n retryInterval = retry;\r\n }, onmessage)));\r\n onclose === null || onclose === void 0 ? void 0 : onclose();\r\n dispose();\r\n resolve();\r\n }\r\n catch (err) {\r\n if (!curRequestController.signal.aborted) {\r\n try {\r\n const interval = (_a = onerror === null || onerror === void 0 ? void 0 : onerror(err)) !== null && _a !== void 0 ? _a : retryInterval;\r\n window.clearTimeout(retryTimer);\r\n retryTimer = window.setTimeout(create, interval);\r\n }\r\n catch (innerErr) {\r\n dispose();\r\n reject(innerErr);\r\n }\r\n }\r\n }\r\n }\r\n create();\r\n });\r\n}\r\nfunction defaultOnOpen(response) {\r\n const contentType = response.headers.get('content-type');\r\n if (!(contentType === null || contentType === void 0 ? void 0 : contentType.startsWith(EventStreamContentType))) {\r\n throw new Error(`Expected content-type to be ${EventStreamContentType}, Actual: ${contentType}`);\r\n }\r\n}\r\n//# sourceMappingURL=fetch.js.map","/// <reference path=\"../import-meta-env.d.ts\" />\n\nimport type { ChatKitResponseMetadata } from \"./HttpError\"\n\nexport const FRAME_SAFE_ERROR_KEY = \"__chatkit_error__\"\n\nexport class FrameSafeWrappedError {\n [FRAME_SAFE_ERROR_KEY]: string\n message: string\n stack?: string\n\n constructor(error: Error) {\n this[FRAME_SAFE_ERROR_KEY] = error.name\n this.message = error.message\n this.stack = error.stack\n }\n}\n\n// Wraps an original with a context-aware error message and name\n// while preserving the original error stack.\nexport abstract class WrappedError extends Error {\n override cause: unknown\n eventName: string\n metadata?: ChatKitResponseMetadata;\n // TODO(jiwon): remove after Kakao moves away from referencing __chatkit_error__ directly.\n [FRAME_SAFE_ERROR_KEY]: string\n\n // Define an explicit getter for the error name so that it is not minified away.\n protected get canonicalName(): string {\n if (import.meta.env[\"DEV\"]) {\n throw new Error(\"Subclass must override canonicalName\")\n }\n return \"AppError\"\n }\n\n constructor(original: unknown, messagePrefix?: string) {\n const errorMessage = original instanceof Error ? original.message : String(original)\n const cause = original instanceof Error ? original : undefined\n super(errorMessage, { cause })\n\n // Make sure we set the name as the runtime subclass name\n this.name = this.canonicalName\n\n const prefix = messagePrefix ? messagePrefix + \": \" : \"\"\n if (!errorMessage.startsWith(prefix)) {\n this.message = `${prefix}${errorMessage}`\n }\n\n // TODO(jiwon): remove this once partner moves away from referencing __chatkit_error__ directly\n this[FRAME_SAFE_ERROR_KEY] = this.name\n\n // MyComponentError -> error.myComponent\n this.eventName =\n this.name.length > 0\n ? `error.${this.name.charAt(0).toLowerCase() + this.name.slice(1).replace(/Error$/i, \"\")}`\n : \"error.app\"\n\n // Copy over original error stack and metadata (these won't get copied over by default).\n if (cause && cause.stack) {\n this.stack = cause.stack\n }\n if (cause && \"metadata\" in cause && cause.metadata) {\n this.metadata = cause.metadata as ChatKitResponseMetadata\n }\n }\n\n static fromPossibleFrameSafeError(error: unknown): WrappedError | null {\n if (\n error &&\n typeof error === \"object\" &&\n FRAME_SAFE_ERROR_KEY in error &&\n typeof error[FRAME_SAFE_ERROR_KEY] === \"string\" &&\n NAME_TO_ERROR_CLASS[error[FRAME_SAFE_ERROR_KEY] as keyof typeof NAME_TO_ERROR_CLASS]\n ) {\n const safeError = error as FrameSafeWrappedError\n const ErrorCls =\n NAME_TO_ERROR_CLASS[error[FRAME_SAFE_ERROR_KEY] as keyof typeof NAME_TO_ERROR_CLASS]!\n const parsedError = new ErrorCls(safeError.message)\n parsedError.stack = safeError.stack\n parsedError.name = safeError[FRAME_SAFE_ERROR_KEY]\n // TODO(jiwon): remove this once partner moves away from referencing __chatkit_error__ directly.\n parsedError[FRAME_SAFE_ERROR_KEY] = safeError[FRAME_SAFE_ERROR_KEY]\n return parsedError\n }\n return null\n }\n}\n\n// The public error version of StreamError defined in chatkit-web-inner/src/lib/errors/StreamError.ts\nexport class StreamError extends WrappedError {\n override get canonicalName(): string {\n return \"StreamError\"\n }\n}\n\nexport class StreamEventParsingError extends WrappedError {\n override get canonicalName(): string {\n return \"StreamEventParsingError\"\n }\n constructor(original: unknown) {\n const messagePrefix = \"Failed to parse stream event\"\n super(original, messagePrefix)\n }\n}\n\nexport class StreamEventHandlingError extends WrappedError {\n override get canonicalName(): string {\n return \"StreamEventHandlingError\"\n }\n constructor(original: unknown) {\n const messagePrefix = \"Failed to handle stream event\"\n super(original, messagePrefix)\n }\n}\n\nexport class StreamStopError extends WrappedError {\n override get canonicalName(): string {\n return \"StreamStopError\"\n }\n constructor(original: unknown) {\n const messagePrefix = \"Failed to stop stream\"\n super(original, messagePrefix)\n }\n}\nexport class ThreadRenderingError extends WrappedError {\n override get canonicalName(): string {\n return \"ThreadRenderingError\"\n }\n}\n\nexport class HistoryViewError extends WrappedError {\n override get canonicalName(): string {\n return \"HistoryViewError\"\n }\n constructor(original: unknown) {\n const messagePrefix = \"Failed to load conversation\"\n super(original, messagePrefix)\n }\n}\n\nexport class EntitySearchError extends WrappedError {\n override get canonicalName(): string {\n return \"EntitySearchError\"\n }\n static fromQuery(error: unknown, query: string) {\n const messagePrefix = `Failed to search entities for query: ${query}`\n return new EntitySearchError(error, messagePrefix)\n }\n}\n\nexport class WidgetItemError extends WrappedError {\n override get canonicalName(): string {\n return \"WidgetItemError\"\n }\n}\n\nexport class InitialThreadLoadError extends WrappedError {\n override get canonicalName(): string {\n return \"InitialThreadLoadError\"\n }\n constructor(original: unknown) {\n const messagePrefix = \"Failed to load initial thread\"\n super(original, messagePrefix)\n }\n}\n\nexport class FileAttachmentError extends WrappedError {\n override get canonicalName(): string {\n return \"FileAttachmentError\"\n }\n constructor(original: unknown) {\n const messagePrefix = \"Failed to upload file\"\n super(original, messagePrefix)\n }\n}\n\nexport class UnhandledError extends WrappedError {\n override get canonicalName(): string {\n return \"UnhandledError\"\n }\n}\n\nexport class UnhandledPromiseRejectionError extends WrappedError {\n override get canonicalName(): string {\n return \"UnhandledPromiseRejectionError\"\n }\n}\n\nexport class IntlError extends WrappedError {\n code: string\n\n override get canonicalName(): string {\n return \"IntlError\"\n }\n constructor(original: unknown) {\n const messagePrefix = \"Intl error\"\n super(original, messagePrefix)\n this.code =\n typeof original === \"object\" && original !== null && \"code\" in original\n ? String(original.code)\n : \"\"\n }\n}\n\nexport class FatalAppError extends WrappedError {\n override get canonicalName(): string {\n return \"FatalAppError\"\n }\n}\n\nexport class NetworkError extends WrappedError {\n override get canonicalName(): string {\n return \"NetworkError\"\n }\n}\n\nexport class DomainVerificationRequestError extends WrappedError {\n override get canonicalName(): string {\n return \"DomainVerificationRequestError\"\n }\n}\n\n/** Generic app error class for one-off errors that don't fit into other categories. */\nexport class AppError extends WrappedError {\n override get canonicalName(): string {\n return \"AppError\"\n }\n}\n\nconst NAME_TO_ERROR_CLASS = {\n StreamError,\n StreamEventParsingError,\n StreamEventHandlingError,\n StreamStopError,\n ThreadRenderingError,\n HistoryViewError,\n EntitySearchError,\n WidgetItemError,\n InitialThreadLoadError,\n FileAttachmentError,\n UnhandledError,\n UnhandledPromiseRejectionError,\n IntlError,\n DomainVerificationRequestError,\n NetworkError,\n FatalAppError,\n} as const\n","import { FRAME_SAFE_ERROR_KEY } from \"./WrappedError\"\n\nexport interface ChatKitResponseMetadata {\n requestId?: string\n [key: string]: unknown\n}\n\nexport class HttpError extends Error {\n status?: number\n statusText?: string\n metadata?: ChatKitResponseMetadata\n\n constructor(\n message: string,\n res: Response | { status?: number; statusText?: string },\n metadata?: ChatKitResponseMetadata,\n ) {\n super(message)\n this.name = \"HttpError\"\n this.statusText = res.statusText\n this.status = res.status\n this.metadata = metadata\n }\n\n static fromPossibleFrameSafeError(error: unknown): HttpError | null {\n if (error instanceof HttpError) {\n return error\n }\n\n if (\n error &&\n typeof error === \"object\" &&\n FRAME_SAFE_ERROR_KEY in error &&\n error[FRAME_SAFE_ERROR_KEY] === \"HttpError\"\n ) {\n const safeError = error as FrameSafeHttpError\n const parsedError = new HttpError(\n safeError.message,\n {\n status: safeError.status,\n statusText: safeError.statusText,\n },\n safeError.metadata,\n )\n parsedError.stack = safeError.stack\n return parsedError\n }\n\n return null\n }\n}\n\n// does not extend Error so that it serializes correctly over structured clone\nexport class FrameSafeHttpError {\n [FRAME_SAFE_ERROR_KEY] = \"HttpError\"\n message: string\n stack?: string\n status?: number\n statusText?: string\n metadata?: ChatKitResponseMetadata\n\n constructor(\n message: string,\n res: Response | { status?: number; statusText?: string },\n metadata?: ChatKitResponseMetadata,\n ) {\n this.message = message\n this.stack = new Error(message).stack\n this.status = res.status\n this.statusText = res.statusText\n this.metadata = metadata\n }\n\n static fromHttpError(error: HttpError): FrameSafeHttpError {\n return new FrameSafeHttpError(\n error.message,\n {\n status: error.status,\n statusText: error.statusText,\n },\n error.metadata,\n )\n }\n}\n","// Retry backoff parameters.\n// TODO: consider making this configurable since this concerns API requests made to\n// the integrator's server.\nconst BASE_RETRY_DELAY_MS = 1000\nconst MAX_RETRY_DELAY_MS = 10_000\nexport const MAX_RETRY_ATTEMPTS = 5\n\n// Backoff with half jitter.\n// With the default parameters, results in the following retry delays:\n// 1st: 1–2s, 2nd: 2–4s, 3rd: 4–8s, 4th+: 5–10s (capped).\nexport const nextDelay = (\n attempt: number,\n maxRetryDelay = MAX_RETRY_DELAY_MS,\n baseDelayMs = BASE_RETRY_DELAY_MS,\n) => {\n const max = Math.min(maxRetryDelay, baseDelayMs * 2 ** attempt)\n // uniform in [0.5*max, max)\n return Math.floor(max * (0.5 + Math.random() * 0.5))\n}\n","import { fetchEventSource } from \"@microsoft/fetch-event-source\"\n\nimport { FrameSafeHttpError } from \"./errors/HttpError\"\nimport { MAX_RETRY_ATTEMPTS, nextDelay } from \"./requestRetry.js\"\n\nimport type { FetchEventSourceInit } from \"@microsoft/fetch-event-source\"\n\nclass RetryableError extends Error {\n constructor(cause: FrameSafeHttpError) {\n super()\n this.cause = cause\n }\n}\n\nexport const fetchEventSourceWithRetry = async (\n url: string,\n params: Omit<FetchEventSourceInit, \"onerror\" | \"onclose\">,\n) => {\n let retryAttempt = 0\n const { onopen, ...restParams } = params\n await fetchEventSource(url, {\n ...restParams,\n onopen: async (res) => {\n onopen?.(res)\n if (res.ok && res.headers.get(\"content-type\")?.startsWith(\"text/event-stream\")) {\n // All is well, we can continue streaming.\n retryAttempt = 0 // reset on success\n return\n }\n\n // Throw FrameSafeHttpError so that it serializes correctly over postMessage\n const httpError = new FrameSafeHttpError(`Streaming failed: ${res.statusText}`, res)\n\n if (res.status >= 400 && res.status < 500) {\n // This is likely a fatal error, client's are supposed to send errors as SSE\n // but we can handle this gracefully by ending the streaming state. It could be\n // that this error is due to a misconfigured server or an upstream proxy returning\n // an error, etc.\n throw httpError\n } else {\n // A 5xx error, we can let the client retry.\n throw new RetryableError(httpError)\n }\n },\n onerror: (error) => {\n if (error instanceof RetryableError) {\n if (retryAttempt >= MAX_RETRY_ATTEMPTS) {\n throw error.cause\n }\n\n retryAttempt += 1\n return nextDelay(retryAttempt) // returning a number sets the retry wait\n }\n\n // All other errors are fatal and should not be retried.\n // TODO: log error for monitoring purposes\n throw error\n },\n })\n}\n","export function createSecureChannelId(): string | null {\n const cryptoRef = globalThis.crypto\n\n if (typeof cryptoRef?.randomUUID === \"function\") {\n return cryptoRef.randomUUID()\n }\n\n if (typeof cryptoRef?.getRandomValues === \"function\") {\n const bytes = new Uint8Array(16)\n cryptoRef.getRandomValues(bytes)\n\n bytes[6] = (bytes[6] & 0x0f) | 0x40\n bytes[8] = (bytes[8] & 0x3f) | 0x80\n\n return [...bytes]\n .map((byte) => byte.toString(16).padStart(2, \"0\"))\n .join(\"\")\n .replace(/^(.{8})(.{4})(.{4})(.{4})(.{12})$/, \"$1-$2-$3-$4-$5\")\n }\n\n return null\n}\n\nexport function safeRandomUUID(): string {\n return (\n createSecureChannelId() ??\n `ck_${Date.now()}_${Math.random().toString(16).slice(2)}`\n )\n}\n","export type ChatKitMessageChannel = {\n channelId?: string\n expectedOrigin: string\n expectedSource: MessageEventSource | null\n}\n\nexport function isTrustedChatKitMessageEvent(\n event: MessageEvent,\n { channelId, expectedOrigin, expectedSource }: ChatKitMessageChannel,\n): boolean {\n const payload = event.data\n if (\n !payload ||\n typeof payload !== \"object\" ||\n !(\"__xpaiChatKit\" in payload)\n ) {\n return false\n }\n if (payload.__xpaiChatKit !== true) {\n return false\n }\n if (expectedOrigin !== \"*\" && event.origin !== expectedOrigin) {\n return false\n }\n if (event.source === expectedSource) {\n return true\n }\n\n const normalizedChannelId = channelId?.trim()\n if (normalizedChannelId) {\n return \"channelId\" in payload && payload.channelId === normalizedChannelId\n }\n\n return false\n}\n","import { FRAME_SAFE_ERROR_KEY } from \"./WrappedError\"\n\nexport class IntegrationError extends Error {\n _name: string\n\n constructor(message: string) {\n super(message)\n this.name = \"IntegrationError\"\n this._name = this.name\n }\n\n static fromPossibleFrameSafeError(error: unknown): IntegrationError | null {\n if (\n error &&\n typeof error === \"object\" &&\n FRAME_SAFE_ERROR_KEY in error &&\n error[FRAME_SAFE_ERROR_KEY] === \"IntegrationError\"\n ) {\n const safeError = error as FrameSafeIntegrationError\n const parsedError = new IntegrationError(safeError.message)\n parsedError.stack = safeError.stack\n return parsedError\n }\n return null\n }\n}\n\n// does not extend Error so that it serializes correctly over structured clone\nexport class FrameSafeIntegrationError {\n [FRAME_SAFE_ERROR_KEY] = \"IntegrationError\"\n message: string\n stack?: string\n constructor(message: string) {\n this.message = message\n this.stack = new Error(message).stack\n }\n}\n","import type { EventSourceMessage, FetchEventSourceInit } from \"@microsoft/fetch-event-source\"\nimport { EventEmitter } from \"./EventEmitter\"\nimport { fetchEventSourceWithRetry } from \"./fetchEventSourceWithRetry.js\"\nimport { safeRandomUUID } from \"./safeRandomUUID.js\"\nimport { isTrustedChatKitMessageEvent } from \"./messageChannel.js\"\nimport type { AnyFunction } from \"./types\"\nimport { FrameSafeHttpError, HttpError } from \"./errors/HttpError\"\nimport { FrameSafeIntegrationError, IntegrationError } from \"./errors/IntegrationError\"\n\ntype ChatKitMessage =\n | {\n type: \"command\"\n nonce: string\n command: string\n data: unknown\n }\n | {\n type: \"response\"\n nonce: string\n response?: unknown\n error?: unknown\n }\n | {\n type: \"fetch\"\n nonce: string\n params: RequestInit\n formData?: Record<string, unknown>\n url: string\n }\n | {\n type: \"abortSignal\"\n nonce: string\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n reason?: any\n }\n | {\n type: \"fetchEventSource\"\n nonce: string\n params: Omit<FetchEventSourceInit, \"onmessage\" | \"onerror\" | \"onopen\" | \"onclose\">\n url: string\n }\n | {\n type: \"fetchEventSourceMessage\"\n nonce: string\n message: EventSourceMessage\n }\n | {\n type: \"event\"\n event: string\n data: unknown\n }\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n// TODO - some kind of ready state / queue for messages while waiting for the target to be ready\nexport abstract class BaseMessenger<\n Commands extends Record<string, AnyFunction> = Record<string, never>,\n ReceivedCommands extends Record<string, AnyFunction> = Record<string, never>,\n Events extends Record<string, any> = Record<string, never>,\n ReceivedEvents extends Record<string, any> = Record<string, never>,\n> {\n private targetOrigin: string\n private target: () => Window | null\n private channelId?: string\n private commandHandlers: Record<string, AnyFunction>\n private _fetch: typeof window.fetch\n\n // Override this method to implement runtime command capability validation\n abstract canReceiveCommand(_: string): boolean\n\n constructor({\n handlers,\n target,\n targetOrigin,\n channelId,\n fetch = window.fetch,\n }: {\n target: () => Window | null\n targetOrigin: string\n channelId?: string\n fetch?: typeof window.fetch\n handlers: {\n [K in keyof ReceivedCommands as K extends `${infer C}${infer S}`\n ? `on${Capitalize<C>}${S}`\n : never]: (\n data: Parameters<ReceivedCommands[K]>[0],\n ) => ReturnType<ReceivedCommands[K]> | Promise<ReturnType<ReceivedCommands[K]>>\n }\n }) {\n this.commandHandlers = handlers\n this.target = target\n this.targetOrigin = targetOrigin\n this.channelId = channelId?.trim() || undefined\n this._fetch = ((...args) => fetch(...args)) as typeof window.fetch\n }\n\n private emitter = new EventEmitter<Record<string, unknown>>()\n private handlers = new Map<\n string,\n { resolve: (data: unknown) => void; reject: (err: unknown) => void; stack: string }\n >()\n private fetchEventSourceHandlers = new Map<\n string,\n {\n onmessage?: (ev: EventSourceMessage) => void\n onclose?: () => void\n }\n >()\n\n setTargetOrigin(targetOrigin: string) {\n this.targetOrigin = targetOrigin\n }\n private abortControllers = new Map<string, AbortController>()\n\n private sendMessage(data: ChatKitMessage, transfer?: Transferable[]) {\n const message = {\n __xpaiChatKit: true,\n ...(this.channelId ? { channelId: this.channelId } : {}),\n ...data,\n }\n this.target()?.postMessage(message, this.targetOrigin, transfer)\n }\n\n connect() {\n window.addEventListener(\"message\", this.handleMessage)\n }\n\n disconnect() {\n window.removeEventListener(\"message\", this.handleMessage)\n }\n\n fetch<T = unknown>(url: string, params: RequestInit) {\n return new Promise<unknown>((resolve, reject) => {\n const nonce = safeRandomUUID()\n this.handlers.set(nonce, { resolve, reject, stack: new Error().stack || \"\" })\n\n // Special case for FormData since it isn't structured cloneable\n let formData: Record<string, unknown> | undefined\n if (params.body instanceof FormData) {\n formData = {}\n for (const [key, value] of params.body.entries()) {\n formData[key] = value\n }\n params.body = undefined\n }\n\n // special case for abortSignal since it isn't structured cloneable\n if (params.signal) {\n params.signal.addEventListener(\"abort\", () => {\n this.sendMessage({\n type: \"abortSignal\",\n nonce,\n reason: params.signal?.reason,\n })\n })\n params.signal = undefined\n }\n\n this.sendMessage({ type: \"fetch\", nonce, params, formData, url })\n }) as Promise<T>\n }\n\n // Supporting onopen would require a good way for us to serialize the Response object\n // across the iframe boundary, which is not trivial and also not really necessary.\n fetchEventSource(\n url: string,\n params: Omit<FetchEventSourceInit, \"onopen\" | \"onerror\" | \"onclose\">,\n ) {\n return new Promise<unknown>((resolve, reject) => {\n const { onmessage, signal, ...rest } = params\n const nonce = safeRandomUUID()\n\n this.handlers.set(nonce, { resolve, reject, stack: new Error().stack || \"\" })\n this.fetchEventSourceHandlers.set(nonce, {\n onmessage,\n })\n\n // special case for abortSignal since it isn't structured cloneable\n if (signal) {\n signal.addEventListener(\"abort\", () => {\n this.sendMessage({\n type: \"abortSignal\",\n nonce,\n reason: signal.reason,\n })\n })\n }\n\n this.sendMessage({ type: \"fetchEventSource\", nonce, params: rest, url })\n }) as Promise<void>\n }\n\n commands = new Proxy(\n {},\n {\n get: (_, command: string) => {\n return (data: Record<string, unknown>, transfer?: Transferable[]) => {\n return new Promise<unknown>((resolve, reject) => {\n const nonce = safeRandomUUID()\n this.handlers.set(nonce, { resolve, reject, stack: new Error().stack || \"\" })\n this.sendMessage(\n {\n type: \"command\",\n nonce,\n command: `on${command.charAt(0).toUpperCase()}${command.slice(1)}`,\n data,\n },\n transfer,\n )\n })\n }\n },\n },\n ) as {\n [K in keyof Commands]: (\n ...args: Commands[K] extends () => any\n ? [data?: void, transfer?: void]\n : [data: Parameters<Commands[K]>[0], transfer?: Transferable[]]\n ) => Promise<Awaited<ReturnType<Commands[K]>>>\n }\n\n emit<E extends keyof Events>(\n ...[event, data, transfer]: Events[E] extends void\n ? [event: E]\n : [event: E, data: Events[E], transfer?: Transferable[]]\n ) {\n this.sendMessage(\n {\n type: \"event\" as const,\n event: event as string,\n data,\n },\n transfer,\n )\n }\n\n on<E extends keyof ReceivedEvents>(\n ...[event, callback]: ReceivedEvents[E] extends void\n ? [event: E, callback: () => void]\n : [event: E, callback: (data: ReceivedEvents[E]) => void]\n ) {\n this.emitter.on(event as string, callback as AnyFunction)\n }\n\n destroy() {\n window.removeEventListener(\"message\", this.handleMessage)\n this.emitter.allOff()\n this.handlers.clear()\n }\n\n private handleMessage = async (event: MessageEvent) => {\n if (\n !isTrustedChatKitMessageEvent(event, {\n channelId: this.channelId,\n expectedOrigin: this.targetOrigin,\n expectedSource: this.target(),\n })\n ) {\n return\n }\n\n const data = event.data as ChatKitMessage\n\n switch (data.type) {\n case \"event\": {\n this.emitter.emit(data.event, data.data)\n break\n }\n case \"fetch\": {\n // TODO - handle server errors - non-200 status codes or whatever\n try {\n // Special case for FormData since it isn't structured cloneable\n if (data.formData) {\n const formData = new FormData()\n for (const [key, value] of Object.entries(data.formData)) {\n formData.append(key, value as string)\n }\n data.params.body = formData\n }\n\n // special case for abortSignal since it isn't structured cloneable\n const controller = new AbortController()\n this.abortControllers.set(data.nonce, controller)\n data.params.signal = controller.signal\n\n const res = await this._fetch(data.url, data.params)\n\n if (!res.ok) {\n // TODO - structured errors from ChatKit SDK so we can handle these a bit better\n const message = await res\n .json()\n .then((json) => json.message || res.statusText)\n .catch(() => res.statusText)\n\n throw new FrameSafeHttpError(message, res)\n }\n\n // TODO: only accept non-JSON responses when fetching external API\n // (e.g. S3/Azure blob storage uploads)\n const json = await res.json().catch(() => ({}))\n this.sendMessage({\n type: \"response\",\n response: json,\n nonce: data.nonce,\n })\n } catch (error) {\n this.sendMessage({\n type: \"response\",\n error,\n nonce: data.nonce,\n })\n }\n break\n }\n case \"fetchEventSource\": {\n try {\n // special case for abortSignal since it isn't structured cloneable\n const controller = new AbortController()\n this.abortControllers.set(data.nonce, controller)\n await fetchEventSourceWithRetry(data.url, {\n ...data.params,\n signal: controller.signal,\n fetch: this._fetch,\n onmessage: (message) => {\n this.sendMessage({\n type: \"fetchEventSourceMessage\",\n message,\n nonce: data.nonce,\n })\n },\n })\n this.sendMessage({\n type: \"response\",\n response: undefined,\n nonce: data.nonce,\n })\n } catch (error) {\n this.sendMessage({\n type: \"response\",\n error,\n nonce: data.nonce,\n })\n }\n break\n }\n case \"command\": {\n if (!this.canReceiveCommand(data.command)) {\n this.sendMessage({\n type: \"response\",\n error: new FrameSafeIntegrationError(`Command ${data.command} not supported`),\n nonce: data.nonce,\n })\n return\n }\n try {\n const response = await this.commandHandlers[data.command]?.(data.data)\n this.sendMessage({\n type: \"response\",\n response,\n nonce: data.nonce,\n })\n } catch (error) {\n this.sendMessage({\n type: \"response\",\n error,\n nonce: data.nonce,\n })\n }\n break\n }\n case \"response\": {\n const handler = this.handlers.get(data.nonce)\n if (!handler) {\n // log this\n // eslint-disable-next-line no-console\n console.error(\"No handler found for nonce\", data.nonce)\n return\n }\n if (data.error) {\n const integrationError = IntegrationError.fromPossibleFrameSafeError(data.error)\n const httpError = HttpError.fromPossibleFrameSafeError(data.error)\n if (integrationError) {\n // Set the stack from the handler so the user can see where the\n // error originated in their own integration code.\n integrationError.stack = handler.stack\n handler.reject(integrationError)\n } else if (httpError) {\n handler.reject(httpError)\n } else {\n handler.reject(data.error)\n }\n } else {\n handler.resolve(data.response)\n }\n this.handlers.delete(data.nonce)\n break\n }\n case \"fetchEventSourceMessage\": {\n const handler = this.fetchEventSourceHandlers.get(data.nonce)\n if (!handler) {\n // log this\n // eslint-disable-next-line no-console\n console.error(\"No handler found for nonce\", data.nonce)\n return\n }\n this.fetchEventSourceHandlers.get(data.nonce)?.onmessage?.(data.message)\n break\n }\n case \"abortSignal\": {\n const controller = this.abortControllers.get(data.nonce)\n if (controller) {\n controller.abort(data.reason)\n this.abortControllers.delete(data.nonce)\n }\n break\n }\n default: {\n data satisfies never\n // log this\n break\n }\n }\n }\n}\n","const toUrlBase64 = (bin: string) =>\n btoa(bin).replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=+$/, \"\")\n\nconst fromUrlBase64 = (b64: string) => atob(b64.replace(/-/g, \"+\").replace(/_/g, \"/\"))\n\nexport const encodeBase64 = (value: unknown): string => {\n if (value === undefined) {\n throw new TypeError(\n \"encodeBase64: `undefined` cannot be encoded to valid JSON. Pass null instead.\",\n )\n }\n const json = JSON.stringify(value)\n const bytes = new TextEncoder().encode(json)\n let bin = \"\"\n for (const b of bytes) bin += String.fromCharCode(b)\n return toUrlBase64(bin)\n}\n\nexport const decodeBase64 = <T = unknown>(b64: string): T => {\n const bin = fromUrlBase64(b64)\n const bytes = Uint8Array.from(bin, (c) => c.charCodeAt(0))\n const json = new TextDecoder().decode(bytes)\n return JSON.parse(json) as T\n}\n","import type { EventSourceMessage, FetchEventSourceInit } from \"@microsoft/fetch-event-source\"\n\nexport type ChatKitMessage =\n | {\n type: \"command\"\n nonce: string\n command: string\n data: unknown\n }\n | {\n type: \"response\"\n nonce: string\n response?: unknown\n error?: unknown\n }\n | {\n type: \"fetch\"\n nonce: string\n params: RequestInit\n formData?: Record<string, unknown>\n url: string\n }\n | {\n type: \"abortSignal\"\n nonce: string\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n reason?: any\n }\n | {\n type: \"fetchEventSource\"\n nonce: string\n params: Omit<FetchEventSourceInit, \"onmessage\" | \"onerror\" | \"onopen\" | \"onclose\">\n url: string\n }\n | {\n type: \"fetchEventSourceMessage\"\n nonce: string\n message: EventSourceMessage\n }\n | {\n type: \"event\"\n event: string\n data: unknown\n }\n\nexport type AnyFunction = (...args: any[]) => any\nexport type OuterEvents = any\nexport type InnerEvents = any\nexport type InnerCommands = any\nexport type Attachment = any\nexport type ChatKitFrameParams = any\nexport type ChatKitProfile = 'chatkit'\nexport type ChatKitInnerOptions = any\nexport type UserMessageContent = any\nexport type ToolChoice = any\n\nexport type RemoveMethods<T> = T extends AnyFunction ? \"[ChatKitMethod]\" : T extends object ? { [K in keyof T]: RemoveMethods<T[K]>; } : T;\nexport class IntegrationError extends Error {}\n\nexport function fromPossibleFrameSafeError(err: any): any {\n // Placeholder implementation\n return err.message\n}","import type {\n ChatKitReference,\n ChatKitReferenceCompositionMode,\n RuntimeCapabilitiesSelection as ChatKitRuntimeCapabilitiesSelection,\n} from '@xpert-ai/chatkit-types';\n\nexport type {\n ChatKitCodeReference,\n ChatKitElementAttribute,\n ChatKitElementReference,\n ChatKitFileElementReference,\n ChatKitImageReference,\n ChatKitQuoteReference,\n ChatKitReference,\n ChatKitReferenceBase,\n ChatKitReferenceCompositionMode,\n} from '@xpert-ai/chatkit-types';\n\nexport type ChatKitReq = any;\n\ntype JsonRecord = Record<string, unknown>;\n\nexport type SerializedChatKitOptions = JsonRecord;\nexport type ChatKitCommandUserMessageContent = unknown;\nexport type ChatKitCommandToolChoice = unknown;\n\nexport type RuntimeCapabilitiesSelectionSet = Omit<\n ChatKitRuntimeCapabilitiesSelection,\n 'mode' | 'recommended'\n>;\n\nexport type RuntimeCapabilitiesSelection =\n ChatKitRuntimeCapabilitiesSelection & {\n recommended?: RuntimeCapabilitiesSelectionSet;\n };\n\nexport type ChatKitMessageAttachment =\n | {\n type: 'file';\n id: string;\n name: string;\n mime_type: string;\n }\n | {\n type: 'image';\n id: string;\n preview_url: string;\n name: string;\n mime_type: string;\n };\n\nexport type WorkflowTriggerParams = JsonRecord;\nexport type FollowUpMode = 'default' | 'queue' | 'steer';\n\nexport type SendUserMessageCommandPayload = {\n text?: string;\n content?: ChatKitCommandUserMessageContent[];\n state?: JsonRecord;\n reply?: string;\n attachments?: ChatKitMessageAttachment[];\n newThread?: boolean;\n references?: ChatKitReference[];\n referenceComposition?: ChatKitReferenceCompositionMode;\n toolChoice?: ChatKitCommandToolChoice;\n model?: string;\n planMode?: boolean;\n runtimeCapabilities?: RuntimeCapabilitiesSelection;\n trigger?: WorkflowTriggerParams;\n followUpMode?: FollowUpMode;\n};\n\nexport type SetComposerValueCommandPayload = {\n text?: string;\n content?: ChatKitCommandUserMessageContent[];\n reply?: string;\n attachments?: ChatKitMessageAttachment[];\n references?: ChatKitReference[];\n appendReferences?: boolean;\n files?: File[];\n selectedToolId?: string | null;\n selectedModelId?: string | null;\n runtimeCapabilities?: RuntimeCapabilitiesSelection | null;\n insertRuntimeCapabilities?: boolean;\n};\n\nexport type CustomActionCommandPayload = {\n action: {\n type: string;\n payload?: JsonRecord;\n };\n itemId?: string;\n};\n\nexport type PublicLogEventPayload = {\n name: string;\n data?: JsonRecord;\n [key: string]: unknown;\n};\n\nexport type PublicNamedEventPayload = {\n name: string;\n data?: JsonRecord;\n};\n\nexport type OuterCommands = {\n setOptions: (options: SerializedChatKitOptions) => void;\n sendUserMessage: (params: SendUserMessageCommandPayload) => void;\n setPetEnabled: (params: { enabled: boolean }) => void;\n setComposerValue: (params: SetComposerValueCommandPayload) => void;\n setRuntimeCapabilities: (\n selection: RuntimeCapabilitiesSelection | null,\n ) => void;\n setThreadId: (params: { threadId: string | null }) => void;\n focusComposer: () => void;\n fetchUpdates: () => void;\n sendCustomAction: (params: CustomActionCommandPayload) => void;\n showHistory: () => void;\n hideHistory: () => void;\n shareThread: () => void;\n setTrainingOptOut: (params: { value: boolean }) => void;\n};\nexport type PublicEvents = {\n ready: void;\n error: { error: Error };\n log: PublicLogEventPayload;\n 'response.start': void;\n 'response.end': void;\n 'response.stop': any;\n 'thread.change': { threadId: string | null };\n 'project.change': { projectId: string | null };\n 'connectors.change': { connectorBindingIds: string[] };\n 'tool.change': any;\n 'thread.load.start': { threadId: string };\n 'thread.load.end': { threadId: string };\n deeplink: PublicNamedEventPayload;\n effect: PublicNamedEventPayload;\n 'thread.restore': any;\n 'message.share': any;\n 'image.download': any;\n 'history.open': any;\n 'history.close': any;\n 'log.chatgpt': any;\n};\nexport type PublicError =\n | 'StreamError'\n | 'StreamEventParsingError'\n | 'WidgetItemError'\n | 'InitialThreadLoadError'\n | 'FileAttachmentError'\n | 'HistoryViewError'\n | 'FatalAppError'\n | 'IntegrationError'\n | 'EntitySearchError'\n | 'DomainVerificationRequestError'\n | 'HttpError'\n | 'NetworkError'\n | 'UnhandledError'\n | 'UnhandledPromiseRejectionError'\n | 'StreamEventHandlingError'\n | 'StreamStopError'\n | 'ThreadRenderingError'\n | 'IntlError'\n | 'AppError';\nexport type ThreadItem = { type: string };\nexport type WidgetRoot = { type: string };\nexport type WidgetComponent = { type: string };\n\n// This is a type-only namespace and will disappear after compile.\n// eslint-disable-next-line @typescript-eslint/no-namespace\nexport namespace Capability {\n export type Command = keyof OuterCommands;\n export type Event = keyof PublicEvents;\n export type Error = PublicError;\n\n export type BackendOperation = ChatKitReq['type'];\n export type ThreadItemType = ThreadItem['type'];\n export type WidgetType = WidgetRoot['type'] | WidgetComponent['type'];\n\n export type Key =\n | `command.${Command}`\n | `event.${Event}`\n | `thread.item.${ThreadItemType}`\n | `backend.${BackendOperation}`\n | `error.${Error}`\n | `widget.${WidgetType}`;\n\n export type Rules = {\n allow?: readonly Key[]; // allow-list\n deny?: readonly Key[]; // optional additional denies\n };\n}\n\n// Publicly exported capabili\nexport type Capabilities = {\n commands: Set<Capability.Command>;\n events: Set<Capability.Event>;\n errors: Set<Capability.Error>;\n backend: Set<Capability.BackendOperation>;\n threadItems: Set<Capability.ThreadItemType>;\n widgets: Set<Capability.WidgetType>;\n};\n\n// Default capabilities. We intersect this with allow/deny lists on profiles\n// to compute effective capabilities.\nexport const BASE_CAPABILITY_ALLOWLIST = [\n // commands\n 'command.setOptions',\n 'command.sendUserMessage',\n 'command.setComposerValue',\n 'command.setRuntimeCapabilities',\n 'command.setThreadId',\n 'command.focusComposer',\n 'command.fetchUpdates',\n 'command.sendCustomAction',\n 'command.showHistory',\n 'command.hideHistory',\n // events\n 'event.ready',\n 'event.error',\n 'event.log',\n 'event.response.start',\n 'event.response.end',\n 'event.response.stop',\n 'event.thread.change',\n 'event.project.change',\n 'event.connectors.change',\n 'event.tool.change',\n 'event.thread.load.start',\n 'event.thread.load.end',\n 'event.deeplink',\n 'event.effect',\n // errors\n 'error.StreamError',\n 'error.StreamEventParsingError',\n 'error.WidgetItemError',\n 'error.InitialThreadLoadError',\n 'error.FileAttachmentError',\n 'error.HistoryViewError',\n 'error.FatalAppError',\n 'error.IntegrationError',\n 'error.EntitySearchError',\n 'error.DomainVerificationRequestError',\n // backend\n 'backend.threads.get_by_id',\n 'backend.threads.list',\n 'backend.threads.update',\n 'backend.threads.delete',\n 'backend.threads.create',\n 'backend.threads.add_user_message',\n 'backend.threads.add_client_tool_output',\n 'backend.threads.retry_after_item',\n 'backend.threads.custom_action',\n 'backend.attachments.create',\n 'backend.attachments.get_preview',\n 'backend.attachments.delete',\n 'backend.items.list',\n 'backend.items.feedback',\n // thread item types\n 'thread.item.generated_image',\n 'thread.item.user_message',\n 'thread.item.assistant_message',\n 'thread.item.client_tool_call',\n 'thread.item.widget',\n 'thread.item.task',\n 'thread.item.workflow',\n 'thread.item.end_of_turn',\n 'thread.item.image_generation',\n // widgets\n 'widget.Basic',\n 'widget.Card',\n 'widget.ListView',\n 'widget.ListViewItem',\n 'widget.Badge',\n 'widget.Box',\n 'widget.Row',\n 'widget.Col',\n 'widget.Button',\n 'widget.Caption',\n 'widget.Chart',\n 'widget.Checkbox',\n 'widget.DatePicker',\n 'widget.Divider',\n 'widget.Form',\n 'widget.Icon',\n 'widget.Image',\n 'widget.Input',\n 'widget.Label',\n 'widget.Markdown',\n 'widget.RadioGroup',\n 'widget.Select',\n 'widget.Spacer',\n 'widget.Text',\n 'widget.Textarea',\n 'widget.Title',\n 'widget.Transition',\n] as const satisfies readonly Capability.Key[];\n\nexport const BASE_CAPABILITY_DENYLIST = [\n // --- commands\n 'command.shareThread',\n 'command.setTrainingOptOut',\n // --- events\n 'event.thread.restore',\n 'event.message.share',\n 'event.image.download',\n 'event.history.open',\n 'event.history.close',\n 'event.log.chatgpt',\n // --- errors\n // These errors considered internal and are not exposed to the user by default.\n 'error.HttpError',\n 'error.NetworkError',\n 'error.UnhandledError',\n 'error.UnhandledPromiseRejectionError',\n 'error.StreamEventHandlingError',\n 'error.StreamStopError',\n 'error.ThreadRenderingError',\n 'error.IntlError',\n 'error.AppError',\n // --- backend\n 'backend.threads.stop',\n 'backend.threads.share',\n 'backend.threads.create_from_shared',\n 'backend.threads.init',\n 'backend.attachments.process',\n // widgets\n 'widget.CardCarousel',\n 'widget.Favicon',\n 'widget.CardLinkItem',\n 'widget.Map',\n] as const satisfies readonly Capability.Key[];\n\nexport const PROFILE_TO_RULES = {\n chatkit: {\n allow: [...BASE_CAPABILITY_ALLOWLIST, 'thread.item.image_generation'],\n deny: BASE_CAPABILITY_DENYLIST,\n },\n};\n","import {\n PROFILE_TO_RULES,\n} from \"./types/capabilities.types\"\n\nimport type { ChatKitProfile } from \"./types\"\nimport type { Capabilities, Capability } from \"./types/capabilities.types\"\n\nexport const getCapabilities = (profile: ChatKitProfile): Capabilities => {\n const rules = PROFILE_TO_RULES[profile]\n const effective = new Set(rules.allow as readonly Capability.Key[])\n for (const capability of rules.deny ?? []) {\n effective.delete(capability)\n }\n\n const commands = new Set<Capability.Command>()\n const events = new Set<Capability.Event>()\n const backend = new Set<Capability.BackendOperation>()\n const threadItems = new Set<Capability.ThreadItemType>()\n const errors = new Set<Capability.Error>()\n const widgets = new Set<Capability.WidgetType>()\n\n for (const capability of effective) {\n if (capability.startsWith(\"command.\")) {\n commands.add(capability.slice(\"command.\".length) as Capability.Command)\n continue\n }\n if (capability.startsWith(\"event.\")) {\n events.add(capability.slice(\"event.\".length) as Capability.Event)\n continue\n }\n if (capability.startsWith(\"backend.\")) {\n backend.add(capability.slice(\"backend.\".length) as Capability.BackendOperation)\n continue\n }\n if (capability.startsWith(\"thread.item.\")) {\n threadItems.add(capability.slice(\"thread.item.\".length) as Capability.ThreadItemType)\n }\n if (capability.startsWith(\"error.\")) {\n errors.add(capability.slice(\"error.\".length) as Capability.Error)\n continue\n }\n if (capability.startsWith(\"widget.\")) {\n widgets.add(capability.slice(\"widget.\".length) as Capability.WidgetType)\n continue\n }\n }\n\n return { commands, events, backend, threadItems, errors, widgets }\n}"],"names":["_a","_b","json","IntegrationError"],"mappings":"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","x_google_ignoreList":[1,2]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xpert-ai/chatkit-web-shared",
3
- "version": "0.4.3",
3
+ "version": "0.4.4",
4
4
  "description": "Type definitions for the ChatKit Web Shared.",
5
5
  "sideEffects": false,
6
6
  "type": "module",
@@ -33,7 +33,7 @@
33
33
  },
34
34
  "dependencies": {
35
35
  "@microsoft/fetch-event-source": "^2.0.1",
36
- "@xpert-ai/chatkit-types": "~0.5.0"
36
+ "@xpert-ai/chatkit-types": "~0.5.6"
37
37
  },
38
38
  "scripts": {
39
39
  "build": "vite build",