@pulse-editor/shared-utils 0.1.1-beta.58 → 0.1.1-beta.59
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/main.js.map +1 -1
- package/dist/types/types.d.ts +1 -1
- package/package.json +1 -1
package/dist/main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","sources":["../src/types/constants.ts","../src/types/types.ts","../src/imc/message-receiver.ts","../../../node_modules/uuid/dist/stringify.js","../../../node_modules/uuid/dist/rng.js","../../../node_modules/uuid/dist/native.js","../../../node_modules/uuid/dist/v4.js","../src/imc/message-sender.ts","../src/imc/inter-module-communication.ts","../src/imc/poly-imc.ts"],"sourcesContent":["export const messageTimeout = 300000;\r\n","// #region Inter-Module Communication\r\n/* Inter Module Communication messages */\r\nexport enum IMCMessageTypeEnum {\r\n // #region AI modality tools\r\n ModalityVAD = \"modality-vad\",\r\n ModalitySTT = \"modality-stt\",\r\n ModalityLLM = \"modality-llm\",\r\n ModalityTTS = \"modality-tts\",\r\n ModalitySpeech2Speech = \"modality-speech-to-speech\",\r\n // TODO: Do not use UseX2Y or Use__Gen in the future.\r\n // Instead, use a common AI IO adapter.\r\n ModalityImageGen = \"modality-image-gen\",\r\n ModalityVideoGen = \"modality-video-gen\",\r\n ModalityOCR = \"modality-ocr\",\r\n ModalityMusicGen = \"modality-music-gen\",\r\n // #endregion\r\n\r\n // #region App states\r\n // Notify Pulse that app window is available\r\n AppReady = \"app-ready\",\r\n // Notify Pulse that aoo is closing\r\n AppClose = \"app-close\",\r\n // #endregion\r\n\r\n // #region Editor states\r\n // Notify editor that app is loading or loaded\r\n EditorLoadingApp = \"editor-loading-app\",\r\n // App actions\r\n EditorRegisterAction = \"editor-register-action\",\r\n EditorRunAppAction = \"editor-run-app-action\",\r\n // Execute agent method\r\n EditorRunAgentMethod = \"editor-run-agent-method\",\r\n // Get theme\r\n EditorThemeUpdate = \"editor-theme-update\",\r\n EditorAppRequestTheme = \"editor-app-request-theme\",\r\n // Send notification\r\n EditorShowNotification = \"editor-show-notification\",\r\n // Get environment variables\r\n EditorGetEnv = \"editor-get-env\",\r\n // App state snapshot upon importing & exporting\r\n EditorAppStateSnapshotRestore = \"editor-app-state-snapshot-restore\",\r\n EditorAppStateSnapshotSave = \"editor-app-state-snapshot-save\",\r\n // Handle editor file selection or drop\r\n EditorAppReceiveFileUri = \"editor-app-receive-file-uri\",\r\n // App uses owned app\r\n EditorAppUseOwnedApp = \"editor-app-use-owned-app\",\r\n // App requests workspace info\r\n EditorAppRequestWorkspace = \"editor-app-request-workspace\",\r\n // #endregion\r\n\r\n // #region Platform API interaction messages (require OS-like environment)\r\n /* Terminal */\r\n PlatformCreateTerminal = \"platform-create-terminal\",\r\n // Update view file\r\n PlatformWriteFile = \"platform-write-file\",\r\n // Request view file\r\n PlatformReadFile = \"platform-read-file\",\r\n // File update (file watch notification from platform to view)\r\n PlatformFileUpdate = \"platform-file-update\",\r\n // #endregion\r\n\r\n // #region Signal messages\r\n SignalRequestOtherWindowId = \"signal-request-other-window-id\",\r\n // A message to notify sender that the message\r\n // has been received and finished processing\r\n SignalAcknowledge = \"signal-acknowledge\",\r\n // Notify abort\r\n SignalAbort = \"signal-abort\",\r\n // Error\r\n SignalError = \"signal-error\",\r\n // Ignore\r\n SignalIgnore = \"signal-ignore\",\r\n // #endregion\r\n}\r\n\r\nexport type IMCMessage = {\r\n messageId: string;\r\n channelId?: string;\r\n from: string;\r\n type: IMCMessageTypeEnum;\r\n payload?: any;\r\n};\r\n\r\nexport type ReceiverHandler = (\r\n senderWindow: Window,\r\n message: IMCMessage,\r\n abortSignal?: AbortSignal,\r\n) => Promise<any>;\r\n\r\n// IMC receiver handler map\r\nexport type ReceiverHandlerMap = Map<IMCMessageTypeEnum, ReceiverHandler>;\r\n// #endregion\r\n\r\n/* File view */\r\nexport type TextFileSelection = {\r\n lineStart: number;\r\n lineEnd: number;\r\n text: string;\r\n};\r\n\r\nexport type ViewModel = {\r\n viewId: string;\r\n appConfig: AppConfig;\r\n};\r\n\r\nexport enum ViewModeEnum {\r\n App = \"app\",\r\n Canvas = \"canvas\",\r\n Home = \"home\",\r\n}\r\n\r\n/* Fetch API */\r\nexport type FetchPayload = {\r\n uri: string;\r\n options?: RequestInit;\r\n};\r\n\r\n/* Notification */\r\nexport enum NotificationTypeEnum {\r\n Success = \"success\",\r\n Error = \"error\",\r\n Info = \"info\",\r\n Warning = \"warning\",\r\n}\r\n\r\n// #region App settings\r\nexport enum AppTypeEnum {\r\n Generic = \"generic\",\r\n FileView = \"file-view\",\r\n ConsoleView = \"console-view\",\r\n}\r\n\r\nexport type AppConfig = {\r\n id: string;\r\n version: string;\r\n libVersion?: string;\r\n visibility?: \"public\" | \"private\" | \"unlisted\";\r\n author?: string;\r\n displayName?: string;\r\n description?: string;\r\n materialIcon?: string;\r\n license?: string;\r\n repository?: string;\r\n appType?: AppTypeEnum;\r\n fileTypes?: string[];\r\n thumbnail?: string;\r\n enabledPlatforms?: Record<string, boolean>;\r\n\r\n // App installed agents\r\n agents?: Agent[];\r\n // Exposed actions in the modular app\r\n preRegisteredActions?: Action[];\r\n // Recommended dimensions for app view in canvas\r\n recommendedHeight?: number;\r\n recommendedWidth?: number;\r\n};\r\n\r\nexport type Action = {\r\n name: string;\r\n description: string;\r\n parameters: Record<string, TypedVariable>;\r\n returns: Record<string, TypedVariable>;\r\n handler?: (args: any) => Promise<any>;\r\n};\r\n// #endregion\r\n\r\n// #region Agent config\r\nexport type Agent = {\r\n name: string;\r\n version: string;\r\n systemPrompt: string;\r\n availableMethods: AgentMethod[];\r\n description: string;\r\n tools?: AgentTool[];\r\n LLMConfig?: LLMConfig;\r\n};\r\n\r\n/**\r\n * An agent method is a sub task that an agent can perform.\r\n */\r\nexport type AgentMethod = {\r\n access: AccessEnum;\r\n name: string;\r\n parameters: Record<string, TypedVariable>;\r\n prompt: string;\r\n returns: Record<string, TypedVariable>;\r\n // If this config does not exist, use the class's LLMConfig\r\n LLMConfig?: LLMConfig;\r\n};\r\n\r\nexport type TypedVariable = {\r\n type: TypedVariableType;\r\n // Describe the variable for LLM to better understand it\r\n description: string;\r\n optional?: boolean;\r\n defaultValue?: any;\r\n};\r\n\r\n/**\r\n * A tool that agent can use during method execution.\r\n *\r\n *\r\n * The tool may optionally return a value to the agent.\r\n */\r\nexport type AgentTool = {\r\n access: AccessEnum;\r\n name: string;\r\n description: string;\r\n parameters: Record<string, TypedVariable>;\r\n returns: Record<string, TypedVariable>;\r\n};\r\n// #endregion\r\n\r\nexport type TypedVariableType =\r\n | \"string\"\r\n | \"number\"\r\n | \"boolean\"\r\n | \"any\"\r\n // An app instance is a reference to another app.\r\n // This instance could be possessed by the owner,\r\n // or it can be initialized by the caller.\r\n | \"app-instance\"\r\n | TypedVariableObjectType\r\n | TypedVariableArrayType;\r\n\r\nexport type TypedVariableObjectType = {\r\n [key: string]: TypedVariable;\r\n};\r\n\r\nexport type TypedVariableArrayType = [TypedVariableType];\r\n\r\nexport function isArrayType(\r\n value: TypedVariableType,\r\n): value is TypedVariableArrayType {\r\n return Array.isArray(value) && value.length === 1;\r\n}\r\n\r\nexport function isObjectType(\r\n value: TypedVariableType,\r\n): value is TypedVariableObjectType {\r\n return typeof value === \"object\" && !Array.isArray(value);\r\n}\r\n\r\nexport enum AccessEnum {\r\n public = \"public\",\r\n private = \"private\",\r\n}\r\n\r\n// #region AI settings\r\nexport type STTConfig = {\r\n provider: string;\r\n modelName: string;\r\n};\r\n\r\nexport type LLMConfig = {\r\n provider: string;\r\n modelName: string;\r\n temperature: number;\r\n};\r\n\r\nexport type TTSConfig = {\r\n provider: string;\r\n modelName: string;\r\n voice: string;\r\n};\r\n\r\nexport type ImageModelConfig = {\r\n provider: string;\r\n modelName: string;\r\n};\r\n\r\nexport type VideoModelConfig = {\r\n provider: string;\r\n modelName: string;\r\n};\r\n// #endregion\r\n\r\n// TODO: In the future, add a common AI IO adapter\r\n// where the input and output types are arbitrary\r\n// modalities. So we can plug in any AI model,\r\n// or even a program, for either input or output.\r\n// e.g. similar to how a function works.\r\n// export type FuncAdapter = {\r\n// input:\r\n// output:\r\n// }\r\n","import {\r\n IMCMessage,\r\n IMCMessageTypeEnum,\r\n ReceiverHandlerMap,\r\n} from \"../types/types\";\r\n\r\nexport class MessageReceiver {\r\n private handlerMap: ReceiverHandlerMap;\r\n private pendingTasks: Map<\r\n string,\r\n {\r\n controller: AbortController;\r\n }\r\n >;\r\n private windowId: string;\r\n private intent: string | undefined;\r\n\r\n constructor(\r\n listenerMap: ReceiverHandlerMap,\r\n windowId: string,\r\n intent: string | undefined\r\n ) {\r\n this.handlerMap = listenerMap;\r\n this.pendingTasks = new Map();\r\n this.windowId = windowId;\r\n this.intent = intent;\r\n }\r\n\r\n public receiveMessage(senderWindow: Window, message: IMCMessage) {\r\n // Not handling messages from self\r\n if (this.windowId === message.from) return;\r\n\r\n // Abort the task if the message type is Abort\r\n if (message.type === IMCMessageTypeEnum.SignalAbort) {\r\n const id = message.messageId;\r\n const pendingTask = this.pendingTasks.get(id);\r\n\r\n if (pendingTask) {\r\n console.log(\"Aborting task\", id);\r\n pendingTask.controller.abort();\r\n this.pendingTasks.delete(id);\r\n }\r\n\r\n return;\r\n }\r\n\r\n const handler = this.handlerMap.get(message.type);\r\n\r\n if (!handler) {\r\n if (this.intent === \"connection-listener\") {\r\n // Ignore missing handler for connection listener,\r\n // as it handles connection related messages only.\r\n // There should be another channel created to handle other messages.\r\n return;\r\n }\r\n\r\n console.warn(`No handler found for message type: ${message.type}`);\r\n\r\n // Ignore the message if no handler is found\r\n this.ignoreSender(senderWindow, message);\r\n\r\n return;\r\n }\r\n\r\n // Create abort controller to listen for abort signal from sender.\r\n // Then save the message id and abort controller to the pending tasks.\r\n const controller = new AbortController();\r\n const signal = controller.signal;\r\n this.pendingTasks.set(message.messageId, {\r\n controller,\r\n });\r\n\r\n const promise = handler(senderWindow, message, signal);\r\n promise\r\n .then((result) => {\r\n // Don't send the result if the task has been aborted\r\n if (signal.aborted) return;\r\n\r\n // Acknowledge the sender with the result if the message type is not Acknowledge\r\n if (message.type !== IMCMessageTypeEnum.SignalAcknowledge) {\r\n this.acknowledgeSender(\r\n senderWindow,\r\n message.messageId,\r\n message.channelId,\r\n result\r\n );\r\n }\r\n })\r\n .catch((error) => {\r\n if (error.message === \"Message ignored by receiver\") {\r\n // Ignore the message if no handler is found\r\n this.ignoreSender(senderWindow, message);\r\n return;\r\n }\r\n\r\n // Send the error message to the sender\r\n const errMsg: IMCMessage = {\r\n messageId: message.messageId,\r\n channelId: message.channelId,\r\n type: IMCMessageTypeEnum.SignalError,\r\n payload: error.message,\r\n from: this.windowId,\r\n };\r\n\r\n console.error(\"Error handling message:\", error);\r\n\r\n senderWindow.postMessage(errMsg, \"*\");\r\n })\r\n .finally(() => {\r\n this.pendingTasks.delete(message.messageId);\r\n });\r\n }\r\n\r\n private acknowledgeSender(\r\n senderWindow: Window,\r\n messageId: string,\r\n channelId: string | undefined,\r\n payload: any\r\n ): void {\r\n const message: IMCMessage = {\r\n messageId: messageId,\r\n channelId: channelId,\r\n type: IMCMessageTypeEnum.SignalAcknowledge,\r\n payload: payload,\r\n from: this.windowId,\r\n };\r\n senderWindow.postMessage(message, \"*\");\r\n }\r\n\r\n private ignoreSender(senderWindow: Window, message: IMCMessage) {\r\n // Ignore the message if no handler is found\r\n senderWindow.postMessage(\r\n {\r\n messageId: message.messageId,\r\n channelId: message.channelId,\r\n type: IMCMessageTypeEnum.SignalIgnore,\r\n payload: `No handler for message type: ${message.type}`,\r\n from: this.windowId,\r\n } as IMCMessage,\r\n \"*\"\r\n );\r\n }\r\n}\r\n","import validate from './validate.js';\nconst byteToHex = [];\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\nexport function unsafeStringify(arr, offset = 0) {\n return (byteToHex[arr[offset + 0]] +\n byteToHex[arr[offset + 1]] +\n byteToHex[arr[offset + 2]] +\n byteToHex[arr[offset + 3]] +\n '-' +\n byteToHex[arr[offset + 4]] +\n byteToHex[arr[offset + 5]] +\n '-' +\n byteToHex[arr[offset + 6]] +\n byteToHex[arr[offset + 7]] +\n '-' +\n byteToHex[arr[offset + 8]] +\n byteToHex[arr[offset + 9]] +\n '-' +\n byteToHex[arr[offset + 10]] +\n byteToHex[arr[offset + 11]] +\n byteToHex[arr[offset + 12]] +\n byteToHex[arr[offset + 13]] +\n byteToHex[arr[offset + 14]] +\n byteToHex[arr[offset + 15]]).toLowerCase();\n}\nfunction stringify(arr, offset = 0) {\n const uuid = unsafeStringify(arr, offset);\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n return uuid;\n}\nexport default stringify;\n","let getRandomValues;\nconst rnds8 = new Uint8Array(16);\nexport default function rng() {\n if (!getRandomValues) {\n if (typeof crypto === 'undefined' || !crypto.getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n getRandomValues = crypto.getRandomValues.bind(crypto);\n }\n return getRandomValues(rnds8);\n}\n","const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);\nexport default { randomUUID };\n","import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\nfunction _v4(options, buf, offset) {\n options = options || {};\n const rnds = options.random ?? options.rng?.() ?? rng();\n if (rnds.length < 16) {\n throw new Error('Random bytes length must be >= 16');\n }\n rnds[6] = (rnds[6] & 0x0f) | 0x40;\n rnds[8] = (rnds[8] & 0x3f) | 0x80;\n if (buf) {\n offset = offset || 0;\n if (offset < 0 || offset + 16 > buf.length) {\n throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);\n }\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n return buf;\n }\n return unsafeStringify(rnds);\n}\nfunction v4(options, buf, offset) {\n if (native.randomUUID && !buf && !options) {\n return native.randomUUID();\n }\n return _v4(options, buf, offset);\n}\nexport default v4;\n","import { v4 } from \"uuid\";\r\nimport { IMCMessage, IMCMessageTypeEnum } from \"../types/types\";\r\n\r\nexport class MessageSender {\r\n private targetWindow: Window;\r\n private timeout: number;\r\n\r\n private pendingMessages: Map<\r\n string,\r\n { resolve: (value: any) => void; reject: (reason: any) => void }\r\n >;\r\n\r\n private moduleId: string;\r\n private channelId: string | undefined;\r\n\r\n constructor(\r\n targetWindow: Window,\r\n timeout: number,\r\n moduleId: string,\r\n channelId?: string\r\n ) {\r\n this.targetWindow = targetWindow;\r\n this.timeout = timeout;\r\n\r\n this.pendingMessages = new Map();\r\n this.moduleId = moduleId;\r\n this.channelId = channelId;\r\n }\r\n\r\n public async sendMessage(\r\n handlingType: IMCMessageTypeEnum,\r\n payload?: any,\r\n abortSignal?: AbortSignal\r\n ): Promise<any> {\r\n // Generate a unique id for the message using timestamp\r\n const id = v4() + new Date().getTime().toString();\r\n const message: IMCMessage = {\r\n messageId: id,\r\n channelId: this.channelId,\r\n type: handlingType,\r\n payload: payload,\r\n from: this.moduleId,\r\n };\r\n\r\n return new Promise((resolve, reject) => {\r\n // If the signal is already aborted, reject immediately\r\n if (abortSignal?.aborted) {\r\n return reject(new Error(\"Request aborted\"));\r\n }\r\n\r\n const abortHandler = () => {\r\n this.pendingMessages.delete(id);\r\n // Notify the target window that the request has been aborted\r\n this.targetWindow.postMessage(\r\n {\r\n id,\r\n type: IMCMessageTypeEnum.SignalAbort,\r\n payload: JSON.stringify({\r\n status: \"Task aborted\",\r\n data: null,\r\n }),\r\n },\r\n \"*\"\r\n );\r\n reject(new Error(\"Request aborted\"));\r\n };\r\n // Attach abort listener\r\n abortSignal?.addEventListener(\"abort\", abortHandler);\r\n\r\n // Check timeout\r\n const timeoutId = setTimeout(() => {\r\n this.pendingMessages.delete(id);\r\n abortSignal?.removeEventListener(\"abort\", abortHandler);\r\n reject(new Error(\"Communication with Pulse Editor timeout.\"));\r\n }, this.timeout);\r\n // Ensure cleanup on resolution\r\n const onResolve = (value: any) => {\r\n clearTimeout(timeoutId);\r\n abortSignal?.removeEventListener(\"abort\", abortHandler);\r\n this.pendingMessages.delete(id);\r\n resolve(value);\r\n };\r\n\r\n const onReject = (reason: any) => {\r\n clearTimeout(timeoutId);\r\n abortSignal?.removeEventListener(\"abort\", abortHandler);\r\n this.pendingMessages.delete(id);\r\n reject(reason);\r\n };\r\n \r\n this.pendingMessages.set(id, {\r\n resolve: onResolve,\r\n reject: onReject,\r\n });\r\n\r\n // Send message\r\n this.targetWindow.postMessage(message, \"*\");\r\n });\r\n }\r\n\r\n public getPendingMessage(id: string) {\r\n return this.pendingMessages.get(id);\r\n }\r\n}\r\n","import { messageTimeout } from \"../types/constants\";\r\nimport {\r\n IMCMessage,\r\n IMCMessageTypeEnum,\r\n ReceiverHandlerMap,\r\n} from \"../types/types\";\r\nimport { MessageReceiver } from \"./message-receiver\";\r\nimport { MessageSender } from \"./message-sender\";\r\n\r\nexport class InterModuleCommunication {\r\n private thisWindow: Window | undefined;\r\n private otherWindow: Window | undefined;\r\n\r\n private receiver: MessageReceiver | undefined;\r\n private sender: MessageSender | undefined;\r\n\r\n private thisWindowId: string | undefined;\r\n private otherWindowId: string | undefined;\r\n\r\n private receiverHandlerMap: ReceiverHandlerMap | undefined;\r\n\r\n private listener: ((event: MessageEvent) => void) | undefined;\r\n\r\n private messageRecords: Map<string, IMCMessage> | undefined;\r\n\r\n public intent: string | undefined;\r\n public channelId: string | undefined;\r\n\r\n constructor(intent: string | undefined, channelId: string | undefined) {\r\n this.intent = intent;\r\n this.channelId = channelId;\r\n }\r\n\r\n /**\r\n * Initialize a receiver to receive message.\r\n * @param window The current window.\r\n * @param otherWindowId The ID of the other window. This is optional and can be undefined.\r\n * When defined, the receiver will only receive messages from window with the ID.\r\n */\r\n public initThisWindow(window: Window, otherWindowId?: string) {\r\n this.thisWindow = window;\r\n // @ts-expect-error viewId is injected by the browser\r\n const thisWindowId = window.viewId as string | undefined;\r\n if (!thisWindowId) {\r\n throw new Error(\"Current window's ID is not defined.\");\r\n }\r\n this.thisWindowId = thisWindowId;\r\n\r\n this.receiverHandlerMap = new Map();\r\n\r\n const receiver = new MessageReceiver(\r\n this.receiverHandlerMap,\r\n this.thisWindowId,\r\n this.intent\r\n );\r\n this.receiver = receiver;\r\n\r\n this.messageRecords = new Map<string, IMCMessage>();\r\n\r\n this.listener = (event: MessageEvent<IMCMessage>) => {\r\n const message = event.data;\r\n const messageId = message.messageId;\r\n const channelId = message.channelId;\r\n const type = message.type;\r\n\r\n // Return if the channel ID exists but does not match the current channel ID\r\n // (channel ID can be undefined during initial handshake)\r\n if (\r\n this.channelId !== undefined &&\r\n channelId !== undefined &&\r\n channelId !== this.channelId\r\n ) {\r\n return;\r\n }\r\n\r\n if (\r\n this.messageRecords?.has(messageId) &&\r\n type !== IMCMessageTypeEnum.SignalRequestOtherWindowId\r\n ) {\r\n console.warn(\r\n `[${\r\n this.thisWindowId\r\n }]: Duplicate message received with message ID: ${messageId}. Ignoring this message. Message: ${JSON.stringify(\r\n message\r\n )}`\r\n );\r\n return;\r\n }\r\n this.messageRecords?.set(messageId, message);\r\n\r\n if (!receiver) {\r\n throw new Error(\r\n \"Receiver not initialized at module \" + this.thisWindowId\r\n );\r\n }\r\n\r\n if (message.from !== undefined && message.type !== IMCMessageTypeEnum.SignalIgnore) {\r\n console.log(\r\n `Module ${this.thisWindowId} received message from module ${\r\n message.from\r\n }:\\n ${JSON.stringify(message)}`\r\n );\r\n }\r\n\r\n if (otherWindowId && message.from !== otherWindowId) {\r\n return;\r\n }\r\n const win = event.source as Window;\r\n receiver.receiveMessage(win, message);\r\n };\r\n window.addEventListener(\"message\", this.listener);\r\n console.log(\"Adding IMC listener in \" + this.thisWindowId);\r\n // refresh the receiver handler map\r\n this.setBaseHandler();\r\n }\r\n\r\n /* Initialize a sender to send message ot the other window. */\r\n public async initOtherWindow(window: Window) {\r\n return new Promise<void>((resolve) => {\r\n if (!this.thisWindow || !this.thisWindowId) {\r\n throw new Error(\"You must initialize the current window first.\");\r\n }\r\n\r\n const onReceiveWindowID = (event: MessageEvent) => {\r\n if (!this.thisWindow || !this.thisWindowId) {\r\n throw new Error(\"You must initialize the current window first.\");\r\n }\r\n\r\n const message = event.data;\r\n const otherWindowId = message.payload;\r\n this.otherWindowId = otherWindowId;\r\n\r\n const sender = new MessageSender(\r\n window,\r\n messageTimeout,\r\n this.thisWindowId,\r\n this.channelId\r\n );\r\n this.sender = sender;\r\n\r\n if (!this.receiverHandlerMap) {\r\n throw new Error(\"You must initialize the current window first.\");\r\n }\r\n\r\n this.setBaseHandler();\r\n resolve();\r\n };\r\n\r\n // Wait for the other window to send its ID.\r\n this.thisWindow.addEventListener(\"message\", onReceiveWindowID, {\r\n once: true,\r\n });\r\n\r\n this.otherWindow = window;\r\n this.otherWindow.postMessage(\r\n {\r\n type: IMCMessageTypeEnum.SignalRequestOtherWindowId,\r\n from: this.thisWindowId,\r\n },\r\n \"*\"\r\n );\r\n });\r\n }\r\n\r\n public close() {\r\n if (this.listener) {\r\n window.removeEventListener(\"message\", this.listener);\r\n }\r\n }\r\n\r\n public async sendMessage(\r\n type: IMCMessageTypeEnum,\r\n payload?: any,\r\n abortSignal?: AbortSignal\r\n ): Promise<any> {\r\n const sender = this.sender;\r\n if (!sender) {\r\n throw new Error(\"Sender not initialized\");\r\n }\r\n\r\n return await sender.sendMessage(type, payload, abortSignal);\r\n }\r\n\r\n public updateReceiverHandlerMap(\r\n receiverHandlerMap: ReceiverHandlerMap\r\n ): void {\r\n if (!this.receiver) {\r\n throw new Error(\"Receiver not initialized\");\r\n }\r\n\r\n // Clear all existing handlers except the acknowledgement handler.\r\n this.receiverHandlerMap?.clear();\r\n this.setBaseHandler();\r\n receiverHandlerMap.forEach((value, key) => {\r\n this.receiverHandlerMap?.set(key, value);\r\n });\r\n }\r\n\r\n public getThisWindowId(): string {\r\n if (!this.thisWindowId) {\r\n throw new Error(\"This window ID is not defined.\");\r\n }\r\n return this.thisWindowId;\r\n }\r\n\r\n public getOtherWindowId(): string {\r\n if (!this.otherWindowId) {\r\n throw new Error(\"Other window ID is not defined.\");\r\n }\r\n return this.otherWindowId;\r\n }\r\n\r\n private setBaseHandler() {\r\n // Add an acknowledgement handler in current window's receiver for results of sent messages.\r\n // This is to receive the acknowledgement from the other window, so that we know the other\r\n // window has received the message and finished processing it.\r\n // The current window must be initialized first. i.e. call initThisWindow() before initOtherWindow().\r\n this.receiverHandlerMap?.set(\r\n IMCMessageTypeEnum.SignalAcknowledge,\r\n async (senderWindow: Window, message: IMCMessage) => {\r\n const pendingMessage = this.sender?.getPendingMessage(\r\n message.messageId\r\n );\r\n if (pendingMessage) {\r\n pendingMessage.resolve(message.payload);\r\n }\r\n }\r\n );\r\n\r\n // Handle error message from the other window.\r\n this.receiverHandlerMap?.set(\r\n IMCMessageTypeEnum.SignalError,\r\n async (senderWindow: Window, message: IMCMessage) => {\r\n const pendingMessage = this.sender?.getPendingMessage(\r\n message.messageId\r\n );\r\n if (pendingMessage) {\r\n pendingMessage.reject(new Error(message.payload));\r\n }\r\n }\r\n );\r\n\r\n // Set get window ID handler in the receiver handler map.\r\n this.receiverHandlerMap?.set(\r\n IMCMessageTypeEnum.SignalRequestOtherWindowId,\r\n async (senderWindow: Window, message: IMCMessage) => {\r\n console.log(\r\n \"Received window ID request. Sending current window ID to other window: \"\r\n );\r\n const id = this.thisWindowId;\r\n if (!id) {\r\n throw new Error(\"This window ID is not defined.\");\r\n }\r\n\r\n return id;\r\n }\r\n );\r\n\r\n // Handle ignore signal\r\n this.receiverHandlerMap?.set(\r\n IMCMessageTypeEnum.SignalIgnore,\r\n async (senderWindow: Window, message: IMCMessage) => {\r\n console.warn(\r\n `Message ignored by receiver. Message ID: ${message.messageId}, Payload: ${message.payload}`\r\n );\r\n const pendingMessage = this.sender?.getPendingMessage(\r\n message.messageId\r\n );\r\n if (pendingMessage) {\r\n pendingMessage.reject(new Error(\"Message ignored by receiver\"));\r\n }\r\n }\r\n );\r\n }\r\n}\r\n","import {\r\n IMCMessage,\r\n IMCMessageTypeEnum,\r\n ReceiverHandler,\r\n ReceiverHandlerMap,\r\n} from \"../types/types\";\r\nimport { InterModuleCommunication } from \"./inter-module-communication\";\r\n\r\n/**\r\n * Poly IMC establishes two-way inter-module communication channels,\r\n * where each channel consists of a sender and a receiver to send and\r\n * receive messages between host window and the other module's window.\r\n *\r\n * This assumes the other window has IMC or Poly-IMC setup.\r\n */\r\nexport class PolyIMC {\r\n // A map that maps the other window ID,\r\n // and IMC between current window and the other window.\r\n private channelsMap: Map<string, InterModuleCommunication[]>;\r\n private baseReceiverHandlerMap: ReceiverHandlerMap;\r\n private channelReceiverHandlerMapMap: Map<string, ReceiverHandlerMap>;\r\n\r\n /**\r\n *\r\n * @param baseReceiverHandlerMap A base receiver handler map for universal handlers.\r\n * E.g. Pulse Editor API handler\r\n */\r\n constructor(baseReceiverHandlerMap: ReceiverHandlerMap) {\r\n this.channelsMap = new Map();\r\n this.baseReceiverHandlerMap = baseReceiverHandlerMap;\r\n this.channelReceiverHandlerMapMap = new Map();\r\n }\r\n\r\n public async sendMessage(\r\n targetWindowId: string,\r\n handlingType: IMCMessageTypeEnum,\r\n payload?: any,\r\n abortSignal?: AbortSignal\r\n ) {\r\n const channels = this.channelsMap.get(targetWindowId);\r\n if (!channels) {\r\n throw new Error(\"Channel not found for window ID \" + targetWindowId);\r\n }\r\n\r\n // - some channels here are not returning results\r\n // - and the result now is an array instead of a single value\r\n\r\n const results: any[] = [];\r\n\r\n await Promise.all(\r\n channels.map(async (channel) => {\r\n try {\r\n const result = await channel.sendMessage(\r\n handlingType,\r\n payload,\r\n abortSignal\r\n );\r\n results.push(result);\r\n } catch (error: any) {\r\n // TODO: better ignore handling\r\n if (error.message === \"Message ignored by receiver\") {\r\n console.warn(\r\n `Message ignored by receiver (window ID ${targetWindowId})`,\r\n error\r\n );\r\n // nothing returned, nothing pushed — completely skipped\r\n return;\r\n }\r\n throw error; // rethrow real errors\r\n }\r\n })\r\n );\r\n\r\n return results;\r\n }\r\n\r\n public updateBaseReceiverHandlerMap(handlerMap: ReceiverHandlerMap) {\r\n this.baseReceiverHandlerMap = handlerMap;\r\n this.channelsMap.forEach((channels, key) => {\r\n const combinedMap = this.getCombinedHandlerMap(\r\n this.baseReceiverHandlerMap,\r\n this.channelReceiverHandlerMapMap.get(key)\r\n );\r\n channels.forEach((channel) => {\r\n channel.updateReceiverHandlerMap(combinedMap);\r\n });\r\n });\r\n }\r\n\r\n public updateChannelReceiverHandlerMap(\r\n targetWindowId: string,\r\n handlerMap: ReceiverHandlerMap\r\n ) {\r\n const channels = this.channelsMap.get(targetWindowId);\r\n if (!channels) {\r\n throw new Error(\"Channel not found for window ID \" + targetWindowId);\r\n }\r\n\r\n const combinedMap = this.getCombinedHandlerMap(\r\n this.baseReceiverHandlerMap,\r\n handlerMap\r\n );\r\n\r\n channels.forEach((channel) => {\r\n channel.updateReceiverHandlerMap(combinedMap);\r\n });\r\n\r\n this.channelReceiverHandlerMapMap.set(targetWindowId, handlerMap);\r\n }\r\n\r\n public async createChannel(\r\n targetWindow: Window,\r\n targetWindowId: string,\r\n intent: string,\r\n channelId?: string,\r\n receiverHandlerMap?: ReceiverHandlerMap\r\n ) {\r\n console.log(\"Creating channel for window ID: \" + targetWindowId);\r\n const channel = new InterModuleCommunication(intent, channelId);\r\n channel.initThisWindow(window, targetWindowId);\r\n await channel.initOtherWindow(targetWindow);\r\n\r\n const newChannels = this.channelsMap.get(targetWindowId) ?? [];\r\n // Add to existing channels\r\n newChannels.push(channel);\r\n\r\n this.channelsMap.set(targetWindowId, newChannels);\r\n\r\n // If there is a channel specific receiver handler map,\r\n // combine it with the base receiver handler map.\r\n if (receiverHandlerMap) {\r\n this.updateChannelReceiverHandlerMap(targetWindowId, receiverHandlerMap);\r\n } else {\r\n channel.updateReceiverHandlerMap(this.baseReceiverHandlerMap);\r\n }\r\n }\r\n\r\n public removeWindowChannels(targetWindowId: string) {\r\n const channels = this.channelsMap.get(targetWindowId);\r\n if (!channels) {\r\n throw new Error(\"Channel not found for window ID \" + targetWindowId);\r\n }\r\n\r\n channels.forEach((channel) => {\r\n channel.close();\r\n });\r\n this.channelsMap.delete(targetWindowId);\r\n this.channelReceiverHandlerMapMap.delete(targetWindowId);\r\n }\r\n\r\n public hasChannel(targetWindowId: string): boolean {\r\n return this.channelsMap.has(targetWindowId);\r\n }\r\n\r\n public close() {\r\n this.channelsMap.forEach((channels) =>\r\n channels.forEach((channel) => channel.close())\r\n );\r\n this.channelsMap.clear();\r\n this.channelReceiverHandlerMapMap.clear();\r\n }\r\n\r\n private getCombinedHandlerMap(\r\n map1?: ReceiverHandlerMap,\r\n map2?: ReceiverHandlerMap\r\n ): ReceiverHandlerMap {\r\n if (map1 && map2) {\r\n // Combine two maps\r\n const combinedMap = new Map([...map1, ...map2]);\r\n\r\n return combinedMap;\r\n } else if (map1) {\r\n return map1;\r\n } else if (map2) {\r\n return map2;\r\n } else {\r\n return new Map();\r\n }\r\n }\r\n}\r\n\r\nexport class ConnectionListener {\r\n private polyIMC: PolyIMC;\r\n private newConnectionReceiverHandlerMap: ReceiverHandlerMap;\r\n private onConnection?: (senderWindow: Window, message: IMCMessage) => void;\r\n\r\n private listener: InterModuleCommunication;\r\n\r\n /**\r\n *\r\n * @param polyIMC The polyIMC instance.\r\n * @param newConnectionReceiverHandlerMap Receiver handler map for newly established poly-IMC channel.\r\n * @param onConnection Callback function to be called when a new connection is established.\r\n * @param expectedOtherWindowId Optional expected other window ID to validate incoming connections.\r\n */\r\n constructor(\r\n polyIMC: PolyIMC,\r\n newConnectionReceiverHandlerMap: ReceiverHandlerMap,\r\n onConnection?: (senderWindow: Window, message: IMCMessage) => void,\r\n expectedOtherWindowId?: string\r\n ) {\r\n this.polyIMC = polyIMC;\r\n this.newConnectionReceiverHandlerMap = newConnectionReceiverHandlerMap;\r\n this.onConnection = onConnection;\r\n\r\n const listener = new InterModuleCommunication(\r\n \"connection-listener\",\r\n undefined\r\n );\r\n this.listener = listener;\r\n listener.initThisWindow(window, expectedOtherWindowId);\r\n\r\n listener.updateReceiverHandlerMap(\r\n new Map<IMCMessageTypeEnum, ReceiverHandler>([\r\n [\r\n IMCMessageTypeEnum.AppReady,\r\n async (\r\n senderWindow: Window,\r\n message: IMCMessage,\r\n abortSignal?: AbortSignal\r\n ) => {\r\n await this.handleExtReady(senderWindow, message, abortSignal);\r\n },\r\n ],\r\n ])\r\n );\r\n }\r\n\r\n public close() {\r\n this.listener?.close();\r\n }\r\n\r\n public updateReceiverHandlerMap(\r\n newReceiverHandlerMap: ReceiverHandlerMap\r\n ): void {\r\n this.newConnectionReceiverHandlerMap = newReceiverHandlerMap;\r\n }\r\n\r\n private async handleExtReady(\r\n senderWindow: Window,\r\n message: IMCMessage,\r\n abortSignal?: AbortSignal\r\n ) {\r\n const targetWindowId = message.from;\r\n const { intent, channelId }: { intent: string; channelId?: string } =\r\n message.payload;\r\n\r\n if (!channelId) {\r\n throw new Error(\"Channel ID is missing in AppReady message.\");\r\n }\r\n\r\n // Create a new channel for the incoming connection\r\n await this.polyIMC.createChannel(\r\n senderWindow,\r\n targetWindowId,\r\n intent,\r\n channelId,\r\n this.newConnectionReceiverHandlerMap\r\n );\r\n\r\n if (this.onConnection) {\r\n this.onConnection(senderWindow, message);\r\n }\r\n }\r\n}\r\n"],"names":["byteToHex","i","push","toString","slice","unsafeStringify","arr","offset","arguments","length","undefined","toLowerCase","getRandomValues","rnds8","Uint8Array","rng","crypto","Error","bind","randomUUID","_v4","options","buf","_ref","_options$random","_options$rng","_options","rnds","random","call","v4","native"],"mappings":"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","x_google_ignoreList":[3,4,5,6]}
|
|
1
|
+
{"version":3,"file":"main.js","sources":["../src/types/constants.ts","../src/types/types.ts","../src/imc/message-receiver.ts","../../../node_modules/uuid/dist/stringify.js","../../../node_modules/uuid/dist/rng.js","../../../node_modules/uuid/dist/native.js","../../../node_modules/uuid/dist/v4.js","../src/imc/message-sender.ts","../src/imc/inter-module-communication.ts","../src/imc/poly-imc.ts"],"sourcesContent":["export const messageTimeout = 300000;\r\n","// #region Inter-Module Communication\r\n/* Inter Module Communication messages */\r\nexport enum IMCMessageTypeEnum {\r\n // #region AI modality tools\r\n ModalityVAD = \"modality-vad\",\r\n ModalitySTT = \"modality-stt\",\r\n ModalityLLM = \"modality-llm\",\r\n ModalityTTS = \"modality-tts\",\r\n ModalitySpeech2Speech = \"modality-speech-to-speech\",\r\n // TODO: Do not use UseX2Y or Use__Gen in the future.\r\n // Instead, use a common AI IO adapter.\r\n ModalityImageGen = \"modality-image-gen\",\r\n ModalityVideoGen = \"modality-video-gen\",\r\n ModalityOCR = \"modality-ocr\",\r\n ModalityMusicGen = \"modality-music-gen\",\r\n // #endregion\r\n\r\n // #region App states\r\n // Notify Pulse that app window is available\r\n AppReady = \"app-ready\",\r\n // Notify Pulse that aoo is closing\r\n AppClose = \"app-close\",\r\n // #endregion\r\n\r\n // #region Editor states\r\n // Notify editor that app is loading or loaded\r\n EditorLoadingApp = \"editor-loading-app\",\r\n // App actions\r\n EditorRegisterAction = \"editor-register-action\",\r\n EditorRunAppAction = \"editor-run-app-action\",\r\n // Execute agent method\r\n EditorRunAgentMethod = \"editor-run-agent-method\",\r\n // Get theme\r\n EditorThemeUpdate = \"editor-theme-update\",\r\n EditorAppRequestTheme = \"editor-app-request-theme\",\r\n // Send notification\r\n EditorShowNotification = \"editor-show-notification\",\r\n // Get environment variables\r\n EditorGetEnv = \"editor-get-env\",\r\n // App state snapshot upon importing & exporting\r\n EditorAppStateSnapshotRestore = \"editor-app-state-snapshot-restore\",\r\n EditorAppStateSnapshotSave = \"editor-app-state-snapshot-save\",\r\n // Handle editor file selection or drop\r\n EditorAppReceiveFileUri = \"editor-app-receive-file-uri\",\r\n // App uses owned app\r\n EditorAppUseOwnedApp = \"editor-app-use-owned-app\",\r\n // App requests workspace info\r\n EditorAppRequestWorkspace = \"editor-app-request-workspace\",\r\n // #endregion\r\n\r\n // #region Platform API interaction messages (require OS-like environment)\r\n /* Terminal */\r\n PlatformCreateTerminal = \"platform-create-terminal\",\r\n // Update view file\r\n PlatformWriteFile = \"platform-write-file\",\r\n // Request view file\r\n PlatformReadFile = \"platform-read-file\",\r\n // File update (file watch notification from platform to view)\r\n PlatformFileUpdate = \"platform-file-update\",\r\n // #endregion\r\n\r\n // #region Signal messages\r\n SignalRequestOtherWindowId = \"signal-request-other-window-id\",\r\n // A message to notify sender that the message\r\n // has been received and finished processing\r\n SignalAcknowledge = \"signal-acknowledge\",\r\n // Notify abort\r\n SignalAbort = \"signal-abort\",\r\n // Error\r\n SignalError = \"signal-error\",\r\n // Ignore\r\n SignalIgnore = \"signal-ignore\",\r\n // #endregion\r\n}\r\n\r\nexport type IMCMessage = {\r\n messageId: string;\r\n channelId?: string;\r\n from: string;\r\n type: IMCMessageTypeEnum;\r\n payload?: any;\r\n};\r\n\r\nexport type ReceiverHandler = (\r\n senderWindow: Window,\r\n message: IMCMessage,\r\n abortSignal?: AbortSignal,\r\n) => Promise<any>;\r\n\r\n// IMC receiver handler map\r\nexport type ReceiverHandlerMap = Map<IMCMessageTypeEnum, ReceiverHandler>;\r\n// #endregion\r\n\r\n/* File view */\r\nexport type TextFileSelection = {\r\n lineStart: number;\r\n lineEnd: number;\r\n text: string;\r\n};\r\n\r\nexport type ViewModel = {\r\n viewId: string;\r\n appConfig: AppConfig;\r\n};\r\n\r\nexport enum ViewModeEnum {\r\n App = \"app\",\r\n Canvas = \"canvas\",\r\n Home = \"home\",\r\n}\r\n\r\n/* Fetch API */\r\nexport type FetchPayload = {\r\n uri: string;\r\n options?: RequestInit;\r\n};\r\n\r\n/* Notification */\r\nexport enum NotificationTypeEnum {\r\n Success = \"success\",\r\n Error = \"error\",\r\n Info = \"info\",\r\n Warning = \"warning\",\r\n}\r\n\r\n// #region App settings\r\nexport enum AppTypeEnum {\r\n Generic = \"generic\",\r\n FileView = \"file-view\",\r\n ConsoleView = \"console-view\",\r\n}\r\n\r\nexport type AppConfig = {\r\n id: string;\r\n version: string;\r\n libVersion?: string;\r\n visibility?: \"public\" | \"private\" | \"unlisted\";\r\n author?: string;\r\n displayName?: string;\r\n description?: string;\r\n materialIcon?: string;\r\n license?: string;\r\n repository?: string;\r\n appType?: AppTypeEnum;\r\n fileTypes?: string[];\r\n thumbnail?: string;\r\n enabledPlatforms?: Record<string, boolean>;\r\n\r\n // App installed agents\r\n agents?: Agent[];\r\n // Exposed actions in the modular app\r\n preRegisteredActions?: Action[];\r\n // Recommended dimensions for app view in canvas\r\n recommendedHeight?: number;\r\n recommendedWidth?: number;\r\n};\r\n\r\nexport type Action = {\r\n name: string;\r\n description: string;\r\n parameters: Record<string, TypedVariable>;\r\n returns: Record<string, TypedVariable>;\r\n handler?: (args: any) => Promise<any>;\r\n};\r\n// #endregion\r\n\r\n// #region Agent config\r\nexport type Agent = {\r\n name: string;\r\n version: string;\r\n systemPrompt: string;\r\n availableMethods: AgentMethod[];\r\n description: string;\r\n tools?: AgentTool[];\r\n LLMConfig?: LLMConfig;\r\n};\r\n\r\n/**\r\n * An agent method is a sub task that an agent can perform.\r\n */\r\nexport type AgentMethod = {\r\n access: AccessEnum;\r\n name: string;\r\n parameters: Record<string, TypedVariable>;\r\n prompt: string;\r\n returns: Record<string, TypedVariable>;\r\n // If this config does not exist, use the class's LLMConfig\r\n LLMConfig?: LLMConfig;\r\n};\r\n\r\nexport type TypedVariable = {\r\n type: TypedVariableType;\r\n // Describe the variable for LLM to better understand it\r\n description: string;\r\n optional?: boolean;\r\n defaultValue?: any;\r\n};\r\n\r\n/**\r\n * A tool that agent can use during method execution.\r\n *\r\n *\r\n * The tool may optionally return a value to the agent.\r\n */\r\nexport type AgentTool = {\r\n access: AccessEnum;\r\n name: string;\r\n description: string;\r\n parameters: Record<string, TypedVariable>;\r\n returns: Record<string, TypedVariable>;\r\n};\r\n// #endregion\r\n\r\nexport type TypedVariableType =\r\n | \"string\"\r\n | \"number\"\r\n | \"boolean\"\r\n | \"object\"\r\n // An app instance is a reference to another app.\r\n // This instance could be possessed by the owner,\r\n // or it can be initialized by the caller.\r\n | \"app-instance\"\r\n | TypedVariableObjectType\r\n | TypedVariableArrayType;\r\n\r\nexport type TypedVariableObjectType = {\r\n [key: string]: TypedVariable;\r\n};\r\n\r\nexport type TypedVariableArrayType = [TypedVariableType];\r\n\r\nexport function isArrayType(\r\n value: TypedVariableType,\r\n): value is TypedVariableArrayType {\r\n return Array.isArray(value) && value.length === 1;\r\n}\r\n\r\nexport function isObjectType(\r\n value: TypedVariableType,\r\n): value is TypedVariableObjectType {\r\n return typeof value === \"object\" && !Array.isArray(value);\r\n}\r\n\r\nexport enum AccessEnum {\r\n public = \"public\",\r\n private = \"private\",\r\n}\r\n\r\n// #region AI settings\r\nexport type STTConfig = {\r\n provider: string;\r\n modelName: string;\r\n};\r\n\r\nexport type LLMConfig = {\r\n provider: string;\r\n modelName: string;\r\n temperature: number;\r\n};\r\n\r\nexport type TTSConfig = {\r\n provider: string;\r\n modelName: string;\r\n voice: string;\r\n};\r\n\r\nexport type ImageModelConfig = {\r\n provider: string;\r\n modelName: string;\r\n};\r\n\r\nexport type VideoModelConfig = {\r\n provider: string;\r\n modelName: string;\r\n};\r\n// #endregion\r\n\r\n// TODO: In the future, add a common AI IO adapter\r\n// where the input and output types are arbitrary\r\n// modalities. So we can plug in any AI model,\r\n// or even a program, for either input or output.\r\n// e.g. similar to how a function works.\r\n// export type FuncAdapter = {\r\n// input:\r\n// output:\r\n// }\r\n","import {\r\n IMCMessage,\r\n IMCMessageTypeEnum,\r\n ReceiverHandlerMap,\r\n} from \"../types/types\";\r\n\r\nexport class MessageReceiver {\r\n private handlerMap: ReceiverHandlerMap;\r\n private pendingTasks: Map<\r\n string,\r\n {\r\n controller: AbortController;\r\n }\r\n >;\r\n private windowId: string;\r\n private intent: string | undefined;\r\n\r\n constructor(\r\n listenerMap: ReceiverHandlerMap,\r\n windowId: string,\r\n intent: string | undefined\r\n ) {\r\n this.handlerMap = listenerMap;\r\n this.pendingTasks = new Map();\r\n this.windowId = windowId;\r\n this.intent = intent;\r\n }\r\n\r\n public receiveMessage(senderWindow: Window, message: IMCMessage) {\r\n // Not handling messages from self\r\n if (this.windowId === message.from) return;\r\n\r\n // Abort the task if the message type is Abort\r\n if (message.type === IMCMessageTypeEnum.SignalAbort) {\r\n const id = message.messageId;\r\n const pendingTask = this.pendingTasks.get(id);\r\n\r\n if (pendingTask) {\r\n console.log(\"Aborting task\", id);\r\n pendingTask.controller.abort();\r\n this.pendingTasks.delete(id);\r\n }\r\n\r\n return;\r\n }\r\n\r\n const handler = this.handlerMap.get(message.type);\r\n\r\n if (!handler) {\r\n if (this.intent === \"connection-listener\") {\r\n // Ignore missing handler for connection listener,\r\n // as it handles connection related messages only.\r\n // There should be another channel created to handle other messages.\r\n return;\r\n }\r\n\r\n console.warn(`No handler found for message type: ${message.type}`);\r\n\r\n // Ignore the message if no handler is found\r\n this.ignoreSender(senderWindow, message);\r\n\r\n return;\r\n }\r\n\r\n // Create abort controller to listen for abort signal from sender.\r\n // Then save the message id and abort controller to the pending tasks.\r\n const controller = new AbortController();\r\n const signal = controller.signal;\r\n this.pendingTasks.set(message.messageId, {\r\n controller,\r\n });\r\n\r\n const promise = handler(senderWindow, message, signal);\r\n promise\r\n .then((result) => {\r\n // Don't send the result if the task has been aborted\r\n if (signal.aborted) return;\r\n\r\n // Acknowledge the sender with the result if the message type is not Acknowledge\r\n if (message.type !== IMCMessageTypeEnum.SignalAcknowledge) {\r\n this.acknowledgeSender(\r\n senderWindow,\r\n message.messageId,\r\n message.channelId,\r\n result\r\n );\r\n }\r\n })\r\n .catch((error) => {\r\n if (error.message === \"Message ignored by receiver\") {\r\n // Ignore the message if no handler is found\r\n this.ignoreSender(senderWindow, message);\r\n return;\r\n }\r\n\r\n // Send the error message to the sender\r\n const errMsg: IMCMessage = {\r\n messageId: message.messageId,\r\n channelId: message.channelId,\r\n type: IMCMessageTypeEnum.SignalError,\r\n payload: error.message,\r\n from: this.windowId,\r\n };\r\n\r\n console.error(\"Error handling message:\", error);\r\n\r\n senderWindow.postMessage(errMsg, \"*\");\r\n })\r\n .finally(() => {\r\n this.pendingTasks.delete(message.messageId);\r\n });\r\n }\r\n\r\n private acknowledgeSender(\r\n senderWindow: Window,\r\n messageId: string,\r\n channelId: string | undefined,\r\n payload: any\r\n ): void {\r\n const message: IMCMessage = {\r\n messageId: messageId,\r\n channelId: channelId,\r\n type: IMCMessageTypeEnum.SignalAcknowledge,\r\n payload: payload,\r\n from: this.windowId,\r\n };\r\n senderWindow.postMessage(message, \"*\");\r\n }\r\n\r\n private ignoreSender(senderWindow: Window, message: IMCMessage) {\r\n // Ignore the message if no handler is found\r\n senderWindow.postMessage(\r\n {\r\n messageId: message.messageId,\r\n channelId: message.channelId,\r\n type: IMCMessageTypeEnum.SignalIgnore,\r\n payload: `No handler for message type: ${message.type}`,\r\n from: this.windowId,\r\n } as IMCMessage,\r\n \"*\"\r\n );\r\n }\r\n}\r\n","import validate from './validate.js';\nconst byteToHex = [];\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\nexport function unsafeStringify(arr, offset = 0) {\n return (byteToHex[arr[offset + 0]] +\n byteToHex[arr[offset + 1]] +\n byteToHex[arr[offset + 2]] +\n byteToHex[arr[offset + 3]] +\n '-' +\n byteToHex[arr[offset + 4]] +\n byteToHex[arr[offset + 5]] +\n '-' +\n byteToHex[arr[offset + 6]] +\n byteToHex[arr[offset + 7]] +\n '-' +\n byteToHex[arr[offset + 8]] +\n byteToHex[arr[offset + 9]] +\n '-' +\n byteToHex[arr[offset + 10]] +\n byteToHex[arr[offset + 11]] +\n byteToHex[arr[offset + 12]] +\n byteToHex[arr[offset + 13]] +\n byteToHex[arr[offset + 14]] +\n byteToHex[arr[offset + 15]]).toLowerCase();\n}\nfunction stringify(arr, offset = 0) {\n const uuid = unsafeStringify(arr, offset);\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n return uuid;\n}\nexport default stringify;\n","let getRandomValues;\nconst rnds8 = new Uint8Array(16);\nexport default function rng() {\n if (!getRandomValues) {\n if (typeof crypto === 'undefined' || !crypto.getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n getRandomValues = crypto.getRandomValues.bind(crypto);\n }\n return getRandomValues(rnds8);\n}\n","const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);\nexport default { randomUUID };\n","import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\nfunction _v4(options, buf, offset) {\n options = options || {};\n const rnds = options.random ?? options.rng?.() ?? rng();\n if (rnds.length < 16) {\n throw new Error('Random bytes length must be >= 16');\n }\n rnds[6] = (rnds[6] & 0x0f) | 0x40;\n rnds[8] = (rnds[8] & 0x3f) | 0x80;\n if (buf) {\n offset = offset || 0;\n if (offset < 0 || offset + 16 > buf.length) {\n throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);\n }\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n return buf;\n }\n return unsafeStringify(rnds);\n}\nfunction v4(options, buf, offset) {\n if (native.randomUUID && !buf && !options) {\n return native.randomUUID();\n }\n return _v4(options, buf, offset);\n}\nexport default v4;\n","import { v4 } from \"uuid\";\r\nimport { IMCMessage, IMCMessageTypeEnum } from \"../types/types\";\r\n\r\nexport class MessageSender {\r\n private targetWindow: Window;\r\n private timeout: number;\r\n\r\n private pendingMessages: Map<\r\n string,\r\n { resolve: (value: any) => void; reject: (reason: any) => void }\r\n >;\r\n\r\n private moduleId: string;\r\n private channelId: string | undefined;\r\n\r\n constructor(\r\n targetWindow: Window,\r\n timeout: number,\r\n moduleId: string,\r\n channelId?: string\r\n ) {\r\n this.targetWindow = targetWindow;\r\n this.timeout = timeout;\r\n\r\n this.pendingMessages = new Map();\r\n this.moduleId = moduleId;\r\n this.channelId = channelId;\r\n }\r\n\r\n public async sendMessage(\r\n handlingType: IMCMessageTypeEnum,\r\n payload?: any,\r\n abortSignal?: AbortSignal\r\n ): Promise<any> {\r\n // Generate a unique id for the message using timestamp\r\n const id = v4() + new Date().getTime().toString();\r\n const message: IMCMessage = {\r\n messageId: id,\r\n channelId: this.channelId,\r\n type: handlingType,\r\n payload: payload,\r\n from: this.moduleId,\r\n };\r\n\r\n return new Promise((resolve, reject) => {\r\n // If the signal is already aborted, reject immediately\r\n if (abortSignal?.aborted) {\r\n return reject(new Error(\"Request aborted\"));\r\n }\r\n\r\n const abortHandler = () => {\r\n this.pendingMessages.delete(id);\r\n // Notify the target window that the request has been aborted\r\n this.targetWindow.postMessage(\r\n {\r\n id,\r\n type: IMCMessageTypeEnum.SignalAbort,\r\n payload: JSON.stringify({\r\n status: \"Task aborted\",\r\n data: null,\r\n }),\r\n },\r\n \"*\"\r\n );\r\n reject(new Error(\"Request aborted\"));\r\n };\r\n // Attach abort listener\r\n abortSignal?.addEventListener(\"abort\", abortHandler);\r\n\r\n // Check timeout\r\n const timeoutId = setTimeout(() => {\r\n this.pendingMessages.delete(id);\r\n abortSignal?.removeEventListener(\"abort\", abortHandler);\r\n reject(new Error(\"Communication with Pulse Editor timeout.\"));\r\n }, this.timeout);\r\n // Ensure cleanup on resolution\r\n const onResolve = (value: any) => {\r\n clearTimeout(timeoutId);\r\n abortSignal?.removeEventListener(\"abort\", abortHandler);\r\n this.pendingMessages.delete(id);\r\n resolve(value);\r\n };\r\n\r\n const onReject = (reason: any) => {\r\n clearTimeout(timeoutId);\r\n abortSignal?.removeEventListener(\"abort\", abortHandler);\r\n this.pendingMessages.delete(id);\r\n reject(reason);\r\n };\r\n \r\n this.pendingMessages.set(id, {\r\n resolve: onResolve,\r\n reject: onReject,\r\n });\r\n\r\n // Send message\r\n this.targetWindow.postMessage(message, \"*\");\r\n });\r\n }\r\n\r\n public getPendingMessage(id: string) {\r\n return this.pendingMessages.get(id);\r\n }\r\n}\r\n","import { messageTimeout } from \"../types/constants\";\r\nimport {\r\n IMCMessage,\r\n IMCMessageTypeEnum,\r\n ReceiverHandlerMap,\r\n} from \"../types/types\";\r\nimport { MessageReceiver } from \"./message-receiver\";\r\nimport { MessageSender } from \"./message-sender\";\r\n\r\nexport class InterModuleCommunication {\r\n private thisWindow: Window | undefined;\r\n private otherWindow: Window | undefined;\r\n\r\n private receiver: MessageReceiver | undefined;\r\n private sender: MessageSender | undefined;\r\n\r\n private thisWindowId: string | undefined;\r\n private otherWindowId: string | undefined;\r\n\r\n private receiverHandlerMap: ReceiverHandlerMap | undefined;\r\n\r\n private listener: ((event: MessageEvent) => void) | undefined;\r\n\r\n private messageRecords: Map<string, IMCMessage> | undefined;\r\n\r\n public intent: string | undefined;\r\n public channelId: string | undefined;\r\n\r\n constructor(intent: string | undefined, channelId: string | undefined) {\r\n this.intent = intent;\r\n this.channelId = channelId;\r\n }\r\n\r\n /**\r\n * Initialize a receiver to receive message.\r\n * @param window The current window.\r\n * @param otherWindowId The ID of the other window. This is optional and can be undefined.\r\n * When defined, the receiver will only receive messages from window with the ID.\r\n */\r\n public initThisWindow(window: Window, otherWindowId?: string) {\r\n this.thisWindow = window;\r\n // @ts-expect-error viewId is injected by the browser\r\n const thisWindowId = window.viewId as string | undefined;\r\n if (!thisWindowId) {\r\n throw new Error(\"Current window's ID is not defined.\");\r\n }\r\n this.thisWindowId = thisWindowId;\r\n\r\n this.receiverHandlerMap = new Map();\r\n\r\n const receiver = new MessageReceiver(\r\n this.receiverHandlerMap,\r\n this.thisWindowId,\r\n this.intent\r\n );\r\n this.receiver = receiver;\r\n\r\n this.messageRecords = new Map<string, IMCMessage>();\r\n\r\n this.listener = (event: MessageEvent<IMCMessage>) => {\r\n const message = event.data;\r\n const messageId = message.messageId;\r\n const channelId = message.channelId;\r\n const type = message.type;\r\n\r\n // Return if the channel ID exists but does not match the current channel ID\r\n // (channel ID can be undefined during initial handshake)\r\n if (\r\n this.channelId !== undefined &&\r\n channelId !== undefined &&\r\n channelId !== this.channelId\r\n ) {\r\n return;\r\n }\r\n\r\n if (\r\n this.messageRecords?.has(messageId) &&\r\n type !== IMCMessageTypeEnum.SignalRequestOtherWindowId\r\n ) {\r\n console.warn(\r\n `[${\r\n this.thisWindowId\r\n }]: Duplicate message received with message ID: ${messageId}. Ignoring this message. Message: ${JSON.stringify(\r\n message\r\n )}`\r\n );\r\n return;\r\n }\r\n this.messageRecords?.set(messageId, message);\r\n\r\n if (!receiver) {\r\n throw new Error(\r\n \"Receiver not initialized at module \" + this.thisWindowId\r\n );\r\n }\r\n\r\n if (message.from !== undefined && message.type !== IMCMessageTypeEnum.SignalIgnore) {\r\n console.log(\r\n `Module ${this.thisWindowId} received message from module ${\r\n message.from\r\n }:\\n ${JSON.stringify(message)}`\r\n );\r\n }\r\n\r\n if (otherWindowId && message.from !== otherWindowId) {\r\n return;\r\n }\r\n const win = event.source as Window;\r\n receiver.receiveMessage(win, message);\r\n };\r\n window.addEventListener(\"message\", this.listener);\r\n console.log(\"Adding IMC listener in \" + this.thisWindowId);\r\n // refresh the receiver handler map\r\n this.setBaseHandler();\r\n }\r\n\r\n /* Initialize a sender to send message ot the other window. */\r\n public async initOtherWindow(window: Window) {\r\n return new Promise<void>((resolve) => {\r\n if (!this.thisWindow || !this.thisWindowId) {\r\n throw new Error(\"You must initialize the current window first.\");\r\n }\r\n\r\n const onReceiveWindowID = (event: MessageEvent) => {\r\n if (!this.thisWindow || !this.thisWindowId) {\r\n throw new Error(\"You must initialize the current window first.\");\r\n }\r\n\r\n const message = event.data;\r\n const otherWindowId = message.payload;\r\n this.otherWindowId = otherWindowId;\r\n\r\n const sender = new MessageSender(\r\n window,\r\n messageTimeout,\r\n this.thisWindowId,\r\n this.channelId\r\n );\r\n this.sender = sender;\r\n\r\n if (!this.receiverHandlerMap) {\r\n throw new Error(\"You must initialize the current window first.\");\r\n }\r\n\r\n this.setBaseHandler();\r\n resolve();\r\n };\r\n\r\n // Wait for the other window to send its ID.\r\n this.thisWindow.addEventListener(\"message\", onReceiveWindowID, {\r\n once: true,\r\n });\r\n\r\n this.otherWindow = window;\r\n this.otherWindow.postMessage(\r\n {\r\n type: IMCMessageTypeEnum.SignalRequestOtherWindowId,\r\n from: this.thisWindowId,\r\n },\r\n \"*\"\r\n );\r\n });\r\n }\r\n\r\n public close() {\r\n if (this.listener) {\r\n window.removeEventListener(\"message\", this.listener);\r\n }\r\n }\r\n\r\n public async sendMessage(\r\n type: IMCMessageTypeEnum,\r\n payload?: any,\r\n abortSignal?: AbortSignal\r\n ): Promise<any> {\r\n const sender = this.sender;\r\n if (!sender) {\r\n throw new Error(\"Sender not initialized\");\r\n }\r\n\r\n return await sender.sendMessage(type, payload, abortSignal);\r\n }\r\n\r\n public updateReceiverHandlerMap(\r\n receiverHandlerMap: ReceiverHandlerMap\r\n ): void {\r\n if (!this.receiver) {\r\n throw new Error(\"Receiver not initialized\");\r\n }\r\n\r\n // Clear all existing handlers except the acknowledgement handler.\r\n this.receiverHandlerMap?.clear();\r\n this.setBaseHandler();\r\n receiverHandlerMap.forEach((value, key) => {\r\n this.receiverHandlerMap?.set(key, value);\r\n });\r\n }\r\n\r\n public getThisWindowId(): string {\r\n if (!this.thisWindowId) {\r\n throw new Error(\"This window ID is not defined.\");\r\n }\r\n return this.thisWindowId;\r\n }\r\n\r\n public getOtherWindowId(): string {\r\n if (!this.otherWindowId) {\r\n throw new Error(\"Other window ID is not defined.\");\r\n }\r\n return this.otherWindowId;\r\n }\r\n\r\n private setBaseHandler() {\r\n // Add an acknowledgement handler in current window's receiver for results of sent messages.\r\n // This is to receive the acknowledgement from the other window, so that we know the other\r\n // window has received the message and finished processing it.\r\n // The current window must be initialized first. i.e. call initThisWindow() before initOtherWindow().\r\n this.receiverHandlerMap?.set(\r\n IMCMessageTypeEnum.SignalAcknowledge,\r\n async (senderWindow: Window, message: IMCMessage) => {\r\n const pendingMessage = this.sender?.getPendingMessage(\r\n message.messageId\r\n );\r\n if (pendingMessage) {\r\n pendingMessage.resolve(message.payload);\r\n }\r\n }\r\n );\r\n\r\n // Handle error message from the other window.\r\n this.receiverHandlerMap?.set(\r\n IMCMessageTypeEnum.SignalError,\r\n async (senderWindow: Window, message: IMCMessage) => {\r\n const pendingMessage = this.sender?.getPendingMessage(\r\n message.messageId\r\n );\r\n if (pendingMessage) {\r\n pendingMessage.reject(new Error(message.payload));\r\n }\r\n }\r\n );\r\n\r\n // Set get window ID handler in the receiver handler map.\r\n this.receiverHandlerMap?.set(\r\n IMCMessageTypeEnum.SignalRequestOtherWindowId,\r\n async (senderWindow: Window, message: IMCMessage) => {\r\n console.log(\r\n \"Received window ID request. Sending current window ID to other window: \"\r\n );\r\n const id = this.thisWindowId;\r\n if (!id) {\r\n throw new Error(\"This window ID is not defined.\");\r\n }\r\n\r\n return id;\r\n }\r\n );\r\n\r\n // Handle ignore signal\r\n this.receiverHandlerMap?.set(\r\n IMCMessageTypeEnum.SignalIgnore,\r\n async (senderWindow: Window, message: IMCMessage) => {\r\n console.warn(\r\n `Message ignored by receiver. Message ID: ${message.messageId}, Payload: ${message.payload}`\r\n );\r\n const pendingMessage = this.sender?.getPendingMessage(\r\n message.messageId\r\n );\r\n if (pendingMessage) {\r\n pendingMessage.reject(new Error(\"Message ignored by receiver\"));\r\n }\r\n }\r\n );\r\n }\r\n}\r\n","import {\r\n IMCMessage,\r\n IMCMessageTypeEnum,\r\n ReceiverHandler,\r\n ReceiverHandlerMap,\r\n} from \"../types/types\";\r\nimport { InterModuleCommunication } from \"./inter-module-communication\";\r\n\r\n/**\r\n * Poly IMC establishes two-way inter-module communication channels,\r\n * where each channel consists of a sender and a receiver to send and\r\n * receive messages between host window and the other module's window.\r\n *\r\n * This assumes the other window has IMC or Poly-IMC setup.\r\n */\r\nexport class PolyIMC {\r\n // A map that maps the other window ID,\r\n // and IMC between current window and the other window.\r\n private channelsMap: Map<string, InterModuleCommunication[]>;\r\n private baseReceiverHandlerMap: ReceiverHandlerMap;\r\n private channelReceiverHandlerMapMap: Map<string, ReceiverHandlerMap>;\r\n\r\n /**\r\n *\r\n * @param baseReceiverHandlerMap A base receiver handler map for universal handlers.\r\n * E.g. Pulse Editor API handler\r\n */\r\n constructor(baseReceiverHandlerMap: ReceiverHandlerMap) {\r\n this.channelsMap = new Map();\r\n this.baseReceiverHandlerMap = baseReceiverHandlerMap;\r\n this.channelReceiverHandlerMapMap = new Map();\r\n }\r\n\r\n public async sendMessage(\r\n targetWindowId: string,\r\n handlingType: IMCMessageTypeEnum,\r\n payload?: any,\r\n abortSignal?: AbortSignal\r\n ) {\r\n const channels = this.channelsMap.get(targetWindowId);\r\n if (!channels) {\r\n throw new Error(\"Channel not found for window ID \" + targetWindowId);\r\n }\r\n\r\n // - some channels here are not returning results\r\n // - and the result now is an array instead of a single value\r\n\r\n const results: any[] = [];\r\n\r\n await Promise.all(\r\n channels.map(async (channel) => {\r\n try {\r\n const result = await channel.sendMessage(\r\n handlingType,\r\n payload,\r\n abortSignal\r\n );\r\n results.push(result);\r\n } catch (error: any) {\r\n // TODO: better ignore handling\r\n if (error.message === \"Message ignored by receiver\") {\r\n console.warn(\r\n `Message ignored by receiver (window ID ${targetWindowId})`,\r\n error\r\n );\r\n // nothing returned, nothing pushed — completely skipped\r\n return;\r\n }\r\n throw error; // rethrow real errors\r\n }\r\n })\r\n );\r\n\r\n return results;\r\n }\r\n\r\n public updateBaseReceiverHandlerMap(handlerMap: ReceiverHandlerMap) {\r\n this.baseReceiverHandlerMap = handlerMap;\r\n this.channelsMap.forEach((channels, key) => {\r\n const combinedMap = this.getCombinedHandlerMap(\r\n this.baseReceiverHandlerMap,\r\n this.channelReceiverHandlerMapMap.get(key)\r\n );\r\n channels.forEach((channel) => {\r\n channel.updateReceiverHandlerMap(combinedMap);\r\n });\r\n });\r\n }\r\n\r\n public updateChannelReceiverHandlerMap(\r\n targetWindowId: string,\r\n handlerMap: ReceiverHandlerMap\r\n ) {\r\n const channels = this.channelsMap.get(targetWindowId);\r\n if (!channels) {\r\n throw new Error(\"Channel not found for window ID \" + targetWindowId);\r\n }\r\n\r\n const combinedMap = this.getCombinedHandlerMap(\r\n this.baseReceiverHandlerMap,\r\n handlerMap\r\n );\r\n\r\n channels.forEach((channel) => {\r\n channel.updateReceiverHandlerMap(combinedMap);\r\n });\r\n\r\n this.channelReceiverHandlerMapMap.set(targetWindowId, handlerMap);\r\n }\r\n\r\n public async createChannel(\r\n targetWindow: Window,\r\n targetWindowId: string,\r\n intent: string,\r\n channelId?: string,\r\n receiverHandlerMap?: ReceiverHandlerMap\r\n ) {\r\n console.log(\"Creating channel for window ID: \" + targetWindowId);\r\n const channel = new InterModuleCommunication(intent, channelId);\r\n channel.initThisWindow(window, targetWindowId);\r\n await channel.initOtherWindow(targetWindow);\r\n\r\n const newChannels = this.channelsMap.get(targetWindowId) ?? [];\r\n // Add to existing channels\r\n newChannels.push(channel);\r\n\r\n this.channelsMap.set(targetWindowId, newChannels);\r\n\r\n // If there is a channel specific receiver handler map,\r\n // combine it with the base receiver handler map.\r\n if (receiverHandlerMap) {\r\n this.updateChannelReceiverHandlerMap(targetWindowId, receiverHandlerMap);\r\n } else {\r\n channel.updateReceiverHandlerMap(this.baseReceiverHandlerMap);\r\n }\r\n }\r\n\r\n public removeWindowChannels(targetWindowId: string) {\r\n const channels = this.channelsMap.get(targetWindowId);\r\n if (!channels) {\r\n throw new Error(\"Channel not found for window ID \" + targetWindowId);\r\n }\r\n\r\n channels.forEach((channel) => {\r\n channel.close();\r\n });\r\n this.channelsMap.delete(targetWindowId);\r\n this.channelReceiverHandlerMapMap.delete(targetWindowId);\r\n }\r\n\r\n public hasChannel(targetWindowId: string): boolean {\r\n return this.channelsMap.has(targetWindowId);\r\n }\r\n\r\n public close() {\r\n this.channelsMap.forEach((channels) =>\r\n channels.forEach((channel) => channel.close())\r\n );\r\n this.channelsMap.clear();\r\n this.channelReceiverHandlerMapMap.clear();\r\n }\r\n\r\n private getCombinedHandlerMap(\r\n map1?: ReceiverHandlerMap,\r\n map2?: ReceiverHandlerMap\r\n ): ReceiverHandlerMap {\r\n if (map1 && map2) {\r\n // Combine two maps\r\n const combinedMap = new Map([...map1, ...map2]);\r\n\r\n return combinedMap;\r\n } else if (map1) {\r\n return map1;\r\n } else if (map2) {\r\n return map2;\r\n } else {\r\n return new Map();\r\n }\r\n }\r\n}\r\n\r\nexport class ConnectionListener {\r\n private polyIMC: PolyIMC;\r\n private newConnectionReceiverHandlerMap: ReceiverHandlerMap;\r\n private onConnection?: (senderWindow: Window, message: IMCMessage) => void;\r\n\r\n private listener: InterModuleCommunication;\r\n\r\n /**\r\n *\r\n * @param polyIMC The polyIMC instance.\r\n * @param newConnectionReceiverHandlerMap Receiver handler map for newly established poly-IMC channel.\r\n * @param onConnection Callback function to be called when a new connection is established.\r\n * @param expectedOtherWindowId Optional expected other window ID to validate incoming connections.\r\n */\r\n constructor(\r\n polyIMC: PolyIMC,\r\n newConnectionReceiverHandlerMap: ReceiverHandlerMap,\r\n onConnection?: (senderWindow: Window, message: IMCMessage) => void,\r\n expectedOtherWindowId?: string\r\n ) {\r\n this.polyIMC = polyIMC;\r\n this.newConnectionReceiverHandlerMap = newConnectionReceiverHandlerMap;\r\n this.onConnection = onConnection;\r\n\r\n const listener = new InterModuleCommunication(\r\n \"connection-listener\",\r\n undefined\r\n );\r\n this.listener = listener;\r\n listener.initThisWindow(window, expectedOtherWindowId);\r\n\r\n listener.updateReceiverHandlerMap(\r\n new Map<IMCMessageTypeEnum, ReceiverHandler>([\r\n [\r\n IMCMessageTypeEnum.AppReady,\r\n async (\r\n senderWindow: Window,\r\n message: IMCMessage,\r\n abortSignal?: AbortSignal\r\n ) => {\r\n await this.handleExtReady(senderWindow, message, abortSignal);\r\n },\r\n ],\r\n ])\r\n );\r\n }\r\n\r\n public close() {\r\n this.listener?.close();\r\n }\r\n\r\n public updateReceiverHandlerMap(\r\n newReceiverHandlerMap: ReceiverHandlerMap\r\n ): void {\r\n this.newConnectionReceiverHandlerMap = newReceiverHandlerMap;\r\n }\r\n\r\n private async handleExtReady(\r\n senderWindow: Window,\r\n message: IMCMessage,\r\n abortSignal?: AbortSignal\r\n ) {\r\n const targetWindowId = message.from;\r\n const { intent, channelId }: { intent: string; channelId?: string } =\r\n message.payload;\r\n\r\n if (!channelId) {\r\n throw new Error(\"Channel ID is missing in AppReady message.\");\r\n }\r\n\r\n // Create a new channel for the incoming connection\r\n await this.polyIMC.createChannel(\r\n senderWindow,\r\n targetWindowId,\r\n intent,\r\n channelId,\r\n this.newConnectionReceiverHandlerMap\r\n );\r\n\r\n if (this.onConnection) {\r\n this.onConnection(senderWindow, message);\r\n }\r\n }\r\n}\r\n"],"names":["byteToHex","i","push","toString","slice","unsafeStringify","arr","offset","arguments","length","undefined","toLowerCase","getRandomValues","rnds8","Uint8Array","rng","crypto","Error","bind","randomUUID","_v4","options","buf","_ref","_options$random","_options$rng","_options","rnds","random","call","v4","native"],"mappings":"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","x_google_ignoreList":[3,4,5,6]}
|
package/dist/types/types.d.ts
CHANGED
|
@@ -137,7 +137,7 @@ export type AgentTool = {
|
|
|
137
137
|
parameters: Record<string, TypedVariable>;
|
|
138
138
|
returns: Record<string, TypedVariable>;
|
|
139
139
|
};
|
|
140
|
-
export type TypedVariableType = "string" | "number" | "boolean" | "
|
|
140
|
+
export type TypedVariableType = "string" | "number" | "boolean" | "object" | "app-instance" | TypedVariableObjectType | TypedVariableArrayType;
|
|
141
141
|
export type TypedVariableObjectType = {
|
|
142
142
|
[key: string]: TypedVariable;
|
|
143
143
|
};
|