@x-oasis/async-call-rpc 0.1.38

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (104) hide show
  1. package/README.md +48 -0
  2. package/dist/async-call-rpc.cjs.development.js +1275 -0
  3. package/dist/async-call-rpc.cjs.development.js.map +1 -0
  4. package/dist/async-call-rpc.cjs.production.min.js +2 -0
  5. package/dist/async-call-rpc.cjs.production.min.js.map +1 -0
  6. package/dist/async-call-rpc.esm.js +1559 -0
  7. package/dist/async-call-rpc.esm.js.map +1 -0
  8. package/dist/buffer/BufferFactory.d.ts +12 -0
  9. package/dist/buffer/DataBuffer.d.ts +2 -0
  10. package/dist/buffer/MessagePackBuffer.d.ts +10 -0
  11. package/dist/buffer/ReadBaseBuffer.d.ts +5 -0
  12. package/dist/buffer/ReadBuffer.d.ts +14 -0
  13. package/dist/buffer/SerializationFormat.d.ts +16 -0
  14. package/dist/buffer/WriteBaseBuffer.d.ts +5 -0
  15. package/dist/buffer/WriteBuffer.d.ts +5 -0
  16. package/dist/buffer/examples.d.ts +10 -0
  17. package/dist/buffer/index.d.ts +8 -0
  18. package/dist/common.d.ts +4 -0
  19. package/dist/endpoint/ProxyRPCClient.d.ts +12 -0
  20. package/dist/endpoint/RPCClientHost.d.ts +12 -0
  21. package/dist/endpoint/RPCService.d.ts +20 -0
  22. package/dist/endpoint/RPCServiceHost.d.ts +10 -0
  23. package/dist/error.d.ts +21 -0
  24. package/dist/index.d.ts +11 -0
  25. package/dist/index.js +8 -0
  26. package/dist/middlewares/buffer.d.ts +18 -0
  27. package/dist/middlewares/handleDisconnectedRequest.d.ts +7 -0
  28. package/dist/middlewares/handlePortRequest.d.ts +3 -0
  29. package/dist/middlewares/handleRequest.d.ts +3 -0
  30. package/dist/middlewares/handleRequestUtils.d.ts +10 -0
  31. package/dist/middlewares/handleResponse.d.ts +3 -0
  32. package/dist/middlewares/index.d.ts +7 -0
  33. package/dist/middlewares/logger.d.ts +4 -0
  34. package/dist/middlewares/normalize.d.ts +14 -0
  35. package/dist/middlewares/prepareRequestData.d.ts +28 -0
  36. package/dist/middlewares/sendRequest.d.ts +6 -0
  37. package/dist/middlewares/updateSeqInfo.d.ts +6 -0
  38. package/dist/middlewares/utils.d.ts +3 -0
  39. package/dist/protocol/AbstractChannelProtocol.d.ts +55 -0
  40. package/dist/protocol/MessageChannel.d.ts +18 -0
  41. package/dist/protocol/WebSocketChannel.d.ts +23 -0
  42. package/dist/protocol/WorkerChannel.d.ts +11 -0
  43. package/dist/types/buffer.d.ts +4 -0
  44. package/dist/types/channel.d.ts +27 -0
  45. package/dist/types/index.d.ts +7 -0
  46. package/dist/types/middleware.d.ts +44 -0
  47. package/dist/types/proxyChannel.d.ts +3 -0
  48. package/dist/types/proxyService.d.ts +11 -0
  49. package/dist/types/rpc.d.ts +25 -0
  50. package/dist/types/rpcProtocol.d.ts +22 -0
  51. package/dist/utils/constants.d.ts +5 -0
  52. package/dist/utils/index.d.ts +2 -0
  53. package/dist/utils/jsonrpc.d.ts +36 -0
  54. package/package.json +36 -0
  55. package/src/buffer/ARCHITECTURE.md +298 -0
  56. package/src/buffer/BufferFactory.ts +124 -0
  57. package/src/buffer/CHANGELOG.md +207 -0
  58. package/src/buffer/DataBuffer.ts +1 -0
  59. package/src/buffer/MessagePackBuffer.ts +79 -0
  60. package/src/buffer/OPTIMIZATION.md +258 -0
  61. package/src/buffer/README.md +147 -0
  62. package/src/buffer/ReadBaseBuffer.ts +20 -0
  63. package/src/buffer/ReadBuffer.ts +58 -0
  64. package/src/buffer/SerializationFormat.ts +81 -0
  65. package/src/buffer/WriteBaseBuffer.ts +20 -0
  66. package/src/buffer/WriteBuffer.ts +15 -0
  67. package/src/buffer/examples.ts +242 -0
  68. package/src/buffer/index.ts +15 -0
  69. package/src/common.ts +20 -0
  70. package/src/endpoint/ProxyRPCClient.ts +64 -0
  71. package/src/endpoint/RPCClientHost.ts +45 -0
  72. package/src/endpoint/RPCService.ts +54 -0
  73. package/src/endpoint/RPCServiceHost.ts +18 -0
  74. package/src/error.ts +98 -0
  75. package/src/index.ts +16 -0
  76. package/src/middlewares/buffer.ts +33 -0
  77. package/src/middlewares/handleDisconnectedRequest.ts +30 -0
  78. package/src/middlewares/handlePortRequest.ts +141 -0
  79. package/src/middlewares/handleRequest.ts +128 -0
  80. package/src/middlewares/handleRequestUtils.ts +43 -0
  81. package/src/middlewares/handleResponse.ts +36 -0
  82. package/src/middlewares/index.ts +11 -0
  83. package/src/middlewares/logger.ts +22 -0
  84. package/src/middlewares/normalize.ts +167 -0
  85. package/src/middlewares/prepareRequestData.ts +137 -0
  86. package/src/middlewares/sendRequest.ts +15 -0
  87. package/src/middlewares/updateSeqInfo.ts +34 -0
  88. package/src/middlewares/utils.ts +67 -0
  89. package/src/protocol/AbstractChannelProtocol.ts +343 -0
  90. package/src/protocol/MessageChannel.ts +80 -0
  91. package/src/protocol/WebSocketChannel.ts +179 -0
  92. package/src/protocol/WorkerChannel.ts +36 -0
  93. package/src/types/buffer.ts +5 -0
  94. package/src/types/channel.ts +50 -0
  95. package/src/types/index.ts +9 -0
  96. package/src/types/messageChannel.ts +133 -0
  97. package/src/types/middleware.ts +54 -0
  98. package/src/types/proxyChannel.ts +3 -0
  99. package/src/types/proxyService.ts +18 -0
  100. package/src/types/rpc.ts +61 -0
  101. package/src/types/rpcProtocol.ts +24 -0
  102. package/src/utils/constants.ts +17 -0
  103. package/src/utils/index.ts +5 -0
  104. package/src/utils/jsonrpc.ts +242 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"async-call-rpc.esm.js","sources":["../src/endpoint/ProxyRPCClient.ts","../src/endpoint/RPCClientHost.ts","../src/endpoint/RPCService.ts","../src/endpoint/RPCServiceHost.ts","../../../event/emitter/src/Event.ts","../../../misc/id/src/index.ts","../src/types/rpc.ts","../src/types/middleware.ts","../src/middlewares/buffer.ts","../src/middlewares/normalize.ts","../src/middlewares/handleResponse.ts","../src/middlewares/prepareRequestData.ts","../../../promise/deferred/src/index.ts","../src/common.ts","../src/middlewares/updateSeqInfo.ts","../src/middlewares/sendRequest.ts","../src/middlewares/utils.ts","../src/buffer/ReadBaseBuffer.ts","../src/buffer/ReadBuffer.ts","../src/buffer/WriteBaseBuffer.ts","../src/buffer/WriteBuffer.ts","../src/buffer/SerializationFormat.ts","../src/buffer/BufferFactory.ts","../../../proto/to-string/src/index.ts","../../../assertion/is-promise/src/index.ts","../src/utils/constants.ts","../src/utils/jsonrpc.ts","../src/error.ts","../src/middlewares/handleRequest.ts","../src/protocol/AbstractChannelProtocol.ts","../src/protocol/MessageChannel.ts","../src/protocol/WorkerChannel.ts","../src/protocol/WebSocketChannel.ts"],"sourcesContent":["import AbstractChannelProtocol from '../protocol/AbstractChannelProtocol';\n\nclass ProxyRPCClient {\n readonly requestPath: string;\n\n private channel: AbstractChannelProtocol;\n\n constructor(\n requestPath: string,\n options?: {\n channel?: AbstractChannelProtocol;\n }\n ) {\n const { channel } = options || {};\n this.requestPath = requestPath;\n if (channel) {\n this.setChannel(channel);\n }\n }\n\n setChannel(channel: AbstractChannelProtocol) {\n this.channel = channel;\n // this.channel.on(this.handleMessage.bind(this));\n }\n\n handleMessage(...args: any[]) {\n this.channel.onMessage(...args);\n }\n\n createProxy<T = object>(): T {\n const getTrap =\n (_: any, methodName: string) =>\n (...args: any[]) => {\n if (!this.channel) {\n throw new Error(\n `[ProxyRPCClient error] \\`this.channel\\` is null, when invoke function ${methodName}`\n );\n }\n return this.channel.makeRequest({\n requestPath: this.requestPath,\n methodName,\n args,\n // @ts-ignore, 这个地方其实是跟 `updateSeqInfo` 中间件配合的\n // 因为`updateSeqInfo` 中间件会在`makeRequest`之后,将返回值设置到`returnValue`中\n // 所以这里需要返回`promise`,以便于在`createProxy`中能够正确地返回`promise`\n // 否则的话,会出现`promise`不正确的问题\n // 因为`makeRequest`会返回`promise`,但是`createProxy`会返回`proxy`\n // 所以这里需要返回`promise`,以便于在`createProxy`中能够正确地返回`promise`\n // 否则的话,会出现`promise`不正确的问题\n // 因为`makeRequest`会返回`promise`,但是`createProxy`会返回`proxy`\n // 所以这里需要返回`promise`,以便于在`createProxy`中能够正确地返回`promise`\n }).promise;\n };\n\n return new Proxy(\n {},\n {\n get: getTrap,\n }\n ) as any as T;\n }\n}\n\nexport default ProxyRPCClient;\n","import ProxyRPCClient from './ProxyRPCClient';\nimport AbstractChannelProtocol from '../protocol/AbstractChannelProtocol';\n\nclass RPCClientHost {\n protected readonly hostPath: string;\n\n private hostMap = new Map<string, ProxyRPCClient>();\n\n // handlersMap = new Map<ServiceHandlerPath, IService>();\n\n registerClient(\n requestPath: string,\n options?: {\n channel?: AbstractChannelProtocol;\n }\n ) {\n const client = new ProxyRPCClient(requestPath, options);\n this.hostMap.set(requestPath, client);\n return client;\n }\n\n // registerServiceHandler(handlerPath: ServiceHandlerPath, service: IService) {\n // this.handlersMap.set(handlerPath, service);\n // }\n\n // getHandlers(handlerPath: ServiceHandlerPath) {\n // const handlers = this.handlersMap.get(handlerPath);\n // return handlers;\n // }\n\n // getHandler(handlerPath: ServiceHandlerPath, fnName: string) {\n // const handlers = this.handlersMap.get(handlerPath);\n // // should bind to current service object\n // if (handlers && handlers[fnName]) return handlers[fnName].bind(handlers);\n // return null;\n // }\n\n // merge(serviceHost: RPCClientHost) {\n // for (const [key, value] of serviceHost.handlersMap) {\n // this.registerServiceHandler(key, value);\n // }\n // }\n}\nexport { RPCClientHost };\nexport default new RPCClientHost();\n","import AbstractChannelProtocol from '../protocol/AbstractChannelProtocol';\nimport { RPCServiceHost } from './RPCServiceHost';\nimport { ServiceHandlers } from '../types/proxyService';\n\nclass RPCService {\n private channel: AbstractChannelProtocol;\n readonly serviceHost: RPCServiceHost;\n readonly servicePath: string;\n readonly handlersMap = new Map<string, (...args: any[]) => any>();\n\n constructor(\n servicePath: string,\n options?: {\n channel?: AbstractChannelProtocol;\n handlers: ServiceHandlers;\n serviceHost?: RPCServiceHost;\n }\n ) {\n const { channel, handlers, serviceHost } = options || {};\n this.servicePath = servicePath;\n this.serviceHost = serviceHost;\n if (channel) {\n this.setChannel(channel);\n }\n this.registerHandlers(handlers);\n }\n\n setChannel(channel: AbstractChannelProtocol) {\n this.channel = channel;\n this.channel.setService(this);\n this.channel.on(this.handleMessage.bind(this));\n }\n\n registerHandlers(handlers: Record<string, (...args: any[]) => any>) {\n if (!handlers) return;\n for (const [methodName, handler] of Object.entries(handlers)) {\n this.registerHandler(methodName, handler);\n }\n }\n\n handleMessage(...args: any[]) {\n this.channel.onMessage(...args);\n }\n\n registerHandler(methodName: string, handler: (...args: any[]) => any) {\n this.handlersMap.set(methodName, handler);\n }\n\n getHandler(methodName: string) {\n return this.handlersMap.get(methodName);\n }\n}\n\nexport default RPCService;\n","import { ServiceHandlers } from '../types/proxyService';\nimport RPCService from './RPCService';\n\nclass RPCServiceHost {\n protected readonly hostPath: string;\n\n private hostMap = new Map<string, RPCService>();\n\n // handlersMap = new Map<ServiceHandlerPath, IService>();\n\n registerService(servicePath: string, serviceHandlers: ServiceHandlers) {\n const service = new RPCService(servicePath, { handlers: serviceHandlers });\n this.hostMap.set(servicePath, service);\n return service;\n }\n}\nexport { RPCServiceHost };\nexport default new RPCServiceHost();\n","import { toDisposable } from '@x-oasis/disposable';\nimport { EventListener, EventProps } from './types';\n\nexport default class Event {\n readonly name: string;\n\n private _listeners: EventListener[] = [];\n\n private _onWillAddFirstListener?: Function;\n\n private _onDidAddFirstListener?: Function;\n\n private _onDidAddListener?: Function;\n\n private _onWillRemoveListener?: Function;\n\n private _onDidRemoveLastListener?: Function;\n\n private _coldTrigger?: boolean;\n\n private _cacheCurrentValue?: any[] | undefined;\n\n constructor(props: EventProps & { name: string }) {\n const {\n name,\n onWillAddFirstListener,\n onDidAddFirstListener,\n onDidAddListener,\n onWillRemoveListener,\n onDidRemoveLastListener,\n coldTrigger,\n } = props;\n\n this.name = name;\n\n this._coldTrigger = coldTrigger;\n this._onWillAddFirstListener = onWillAddFirstListener;\n this._onDidAddFirstListener = onDidAddFirstListener;\n this._onDidAddListener = onDidAddListener;\n this._onWillRemoveListener = onWillRemoveListener;\n this._onDidRemoveLastListener = onDidRemoveLastListener;\n this.subscribe = this.subscribe.bind(this);\n }\n\n subscribe(listener: EventListener) {\n if (!this._listeners.length) {\n this._onWillAddFirstListener?.();\n }\n\n const index = this._listeners.indexOf(listener);\n if (index !== -1) {\n console.error('add a duplicate listener');\n } else {\n this._listeners.push(listener);\n if (this._listeners.length === 1) this._onDidAddFirstListener?.();\n this._onDidAddListener?.();\n if (this._coldTrigger && this._cacheCurrentValue)\n listener(...this._cacheCurrentValue);\n }\n\n return toDisposable(() => {\n this.removeListener(listener);\n });\n }\n\n removeListener(listener: EventListener) {\n const index = this._listeners.indexOf(listener);\n if (index === -1) return;\n this._onWillRemoveListener?.();\n\n this._listeners.splice(index, 1);\n if (!this._listeners.length) {\n this._onDidRemoveLastListener?.();\n }\n }\n\n dispose() {\n this._listeners = [];\n this._onDidRemoveLastListener?.();\n }\n\n fire(...args: any[]) {\n if (this._coldTrigger) {\n this._cacheCurrentValue = args;\n }\n for (const listener of this._listeners) {\n listener(...args);\n }\n }\n}\n","const seenKeys: {\n [key: string]: true;\n} = {};\nconst MULTIPLIER = Math.pow(2, 24); // eslint-disable-line\nexport const generateRandomKey = () => {\n let key;\n\n while (key === undefined || seenKeys[key]) {\n key = Math.floor(Math.random() * MULTIPLIER).toString(32);\n }\n\n seenKeys[key] = true;\n return key;\n};\n\nexport const buildId = (entry: string, id: string | number) => `${entry}.${id}`;\n","export enum RequestType {\n /**\n * for normal request, wait for return value\n */\n PromiseRequest = 'pr',\n PromiseAbort = 'pa',\n\n /**\n * send a command\n */\n SignalRequest = 'sr',\n SignalAbort = 'sa',\n}\n\nexport type RequestRawSequenceId = number;\n\nexport type RequestSequenceId = string;\nexport type RequestServicePath = string;\nexport type RequestFnName = string;\n\nexport type RequestEntryHeader = [\n RequestType,\n RequestSequenceId,\n RequestServicePath,\n RequestFnName\n];\nexport type RequestEntryBody = any;\nexport type RequestEntry = [RequestEntryHeader, RequestEntryBody];\n\nexport enum ResponseType {\n ReturnSuccess = 'rs',\n ReturnFail = 'rf',\n\n PortSuccess = 'ps',\n PortFail = 'pf',\n}\nexport type ResponseEntryHeader = [ResponseType, RequestSequenceId];\nexport type ResponseEntryBody = any;\n\nexport type HostName = string;\n\n/**\n * 0 RequestType: PromiseRequest, PromiseAbort, SignalRequest, SignalAbort\n * 1 RequestSequenceId: string\n */\nexport type HostRequestEntryHeader = [\n RequestType,\n RequestSequenceId,\n RequestServicePath,\n RequestFnName,\n HostName\n];\nexport type HostRequestEntryBody = any;\nexport type HostRequestEntry = [HostRequestEntryHeader, HostRequestEntryBody];\n\n// export type SendingProps = {\n// requestPath?: string;\n// fnName?: string;\n// args?: any;\n// isOptionsRequest?: boolean;\n// };\n","import { Deferred } from '@x-oasis/deferred';\n\nimport { HostRequestEntry, RequestEntry } from './rpc';\n\nexport type MiddlewareFunction = {\n (...args: any[]): any;\n displayName?: string;\n lifecycle?: SendMiddlewareLifecycle;\n};\n\nexport type MessageOutput = {\n event: any;\n ports: any;\n};\n\nexport type NormalizedRawMessageOutput = MessageOutput & {\n data: string;\n};\n\nexport type DeserializedMessageOutput = MessageOutput & {\n data: HostRequestEntry | RequestEntry;\n};\n\nexport type SenderMiddlewareOutput = {\n data: any;\n transfer: any;\n seqId: number;\n returnValue: Deferred;\n isOptionsRequest: boolean;\n middlewareContext: MiddlewareContext;\n};\n\nexport type PendingSendEntry = SenderMiddlewareOutput & {\n // fnName: string;\n methodName: string;\n lifecycle: SendMiddlewareLifecycle;\n middlewareContext: MiddlewareContext;\n};\n\nexport type MiddlewareContext = {\n isResumed?: boolean;\n startLifecycle: SendMiddlewareLifecycle;\n minLifecycle: SendMiddlewareLifecycle;\n reserved: PendingSendEntry;\n};\n\nexport enum SendMiddlewareLifecycle {\n Initial = 0,\n Prepare = 10,\n Transform = 20,\n DataOperation = 30,\n Send = 40,\n Aborted = 100,\n}\n","import {\n NormalizedRawMessageOutput,\n SenderMiddlewareOutput,\n SendMiddlewareLifecycle,\n} from '../types';\nimport AbstractChannelProtocol from '../protocol/AbstractChannelProtocol';\n\nexport const serialize = (channel: AbstractChannelProtocol) => {\n const fn = (value: SenderMiddlewareOutput) => ({\n ...value,\n data: channel.writeBuffer.encode(value.data),\n });\n\n fn.lifecycle = SendMiddlewareLifecycle.DataOperation;\n return fn;\n};\n\nexport const deserialize =\n (channel: AbstractChannelProtocol) => (value: NormalizedRawMessageOutput) => {\n const { data } = value;\n let decoded = data;\n\n try {\n decoded = channel.readBuffer.decode(data);\n } catch (err) {\n console.error('[decode error]', data, err);\n }\n\n return {\n ...value,\n data: decoded,\n };\n };\n","import { NormalizedRawMessageOutput } from '../types';\n\nexport const normalizeMessageChannelRawMessage =\n () =>\n (event: MessageEvent): NormalizedRawMessageOutput => {\n return {\n event,\n data: event.data,\n ports: event.ports || [],\n };\n };\n\nexport const normalizeIPCChannelRawMessage =\n () => (event: MessageEvent, data: string) => {\n return {\n event,\n data,\n ports: event.ports || [],\n };\n };\n\nexport const processClientRawMessage = () => (data: string) => {\n return {\n event: null,\n data,\n ports: [],\n };\n};\n\n/**\n * Helper function to check if Buffer is available (Node.js environment)\n */\nfunction isBufferAvailable(): boolean {\n return typeof Buffer !== 'undefined' && Buffer.isBuffer !== undefined;\n}\n\n/**\n * Helper function to check if value is a Buffer (works in both browser and Node.js)\n */\nfunction isBuffer(value: any): boolean {\n if (!isBufferAvailable()) {\n return false;\n }\n return Buffer.isBuffer(value);\n}\n\n/**\n * Helper function to convert ArrayBuffer to string (works in both browser and Node.js)\n */\nfunction arrayBufferToString(buffer: ArrayBuffer): string {\n if (isBufferAvailable()) {\n return Buffer.from(buffer).toString('utf8');\n } else {\n // Browser environment: use TextDecoder\n try {\n return new TextDecoder('utf-8').decode(buffer);\n } catch (e) {\n // Fallback: convert Uint8Array to string\n const uint8Array = new Uint8Array(buffer);\n return String.fromCharCode.apply(null, Array.from(uint8Array));\n }\n }\n}\n\n/**\n * Helper function to convert Buffer to string (Node.js only)\n */\nfunction bufferToString(buffer: any): string {\n if (isBufferAvailable() && Buffer.isBuffer(buffer)) {\n return buffer.toString('utf8');\n }\n return String(buffer);\n}\n\n/**\n * Normalize WebSocket raw message\n * Handles both browser MessageEvent and Node.js ws library format\n */\nexport const normalizeWebSocketRawMessage =\n () =>\n (\n eventOrData: MessageEvent | Buffer | string | any,\n ...args: any[]\n ): NormalizedRawMessageOutput => {\n // Handle undefined or null\n if (eventOrData === undefined || eventOrData === null) {\n console.warn(\n '[normalizeWebSocketRawMessage] Received undefined or null data'\n );\n return {\n event: null,\n data: '',\n ports: [],\n };\n }\n\n let normalizedData = '';\n let event: MessageEvent | null = null;\n let ports: MessagePort[] = [];\n\n // Check if this is a MessageEvent (browser or ws library with EventTarget)\n if (\n eventOrData &&\n typeof eventOrData === 'object' &&\n 'data' in eventOrData\n ) {\n event = eventOrData as MessageEvent;\n const data = event.data;\n // Create a new array to avoid readonly type issues\n ports = event.ports ? [...event.ports] : [];\n\n // Handle different data types in MessageEvent\n if (data === undefined || data === null) {\n normalizedData = '';\n } else if (typeof data === 'string') {\n normalizedData = data;\n } else if (isBuffer(data)) {\n normalizedData = bufferToString(data);\n } else if (data instanceof ArrayBuffer) {\n normalizedData = arrayBufferToString(data);\n } else if (data instanceof Blob) {\n // For Blob, we'd need async handling, but for now return empty\n // In practice, WebSocket text frames should be strings\n normalizedData = '';\n } else {\n normalizedData = String(data);\n }\n } else {\n // Node.js ws library: direct data (Buffer or string)\n // The ws library may pass data directly, or as (data, isBinary) tuple\n // If args[0] exists and eventOrData is not an object with 'data',\n // then args might contain the actual data\n let actualData = eventOrData;\n\n // Check if this might be a tuple (data, isBinary) from ws library\n if (\n args.length > 0 &&\n (typeof eventOrData === 'string' || isBuffer(eventOrData))\n ) {\n // This is likely (data, isBinary) format, use eventOrData as data\n actualData = eventOrData;\n }\n\n // Convert Buffer to string if needed\n if (isBuffer(actualData)) {\n normalizedData = bufferToString(actualData);\n } else if (typeof actualData === 'string') {\n normalizedData = actualData;\n } else if (actualData instanceof ArrayBuffer) {\n normalizedData = arrayBufferToString(actualData);\n } else {\n // Fallback: try to stringify\n normalizedData = String(actualData);\n }\n }\n\n // Ensure normalizedData is never undefined or null\n if (normalizedData === undefined || normalizedData === null) {\n normalizedData = '';\n }\n\n return {\n event,\n data: normalizedData,\n ports,\n };\n };\n","import { RequestType, ResponseType, DeserializedMessageOutput } from '../types';\nimport AbstractChannelProtocol from '../protocol/AbstractChannelProtocol';\n\nexport const handleResponse =\n (protocol: AbstractChannelProtocol) =>\n (message: DeserializedMessageOutput) => {\n if (!message) return message;\n const { data } = message;\n const header = data[0];\n const body = data[1];\n const type = header[0] as any;\n\n if (Object.values(RequestType).includes(type)) {\n return message;\n }\n\n const seqId = header[1];\n\n const findDefer = protocol.ongoingRequests.get(`${seqId}`);\n\n if (findDefer) {\n protocol.ongoingRequests.delete(`${seqId}`);\n if (type === ResponseType.PortSuccess) {\n findDefer.resolve(message.ports[0]);\n } else if (type === ResponseType.ReturnFail) {\n findDefer.reject(body[0]);\n } else findDefer.resolve(body[0]);\n } else {\n const findListener = protocol.requestEvents.get(`${seqId}`);\n\n if (findListener) {\n findListener(...body);\n }\n }\n return null;\n };\n","import AbstractChannelProtocol from '../protocol/AbstractChannelProtocol';\nimport {\n SendingProps,\n RequestEntryHeader,\n HostRequestEntryHeader,\n RequestType,\n SendMiddlewareLifecycle,\n} from '../types';\n\nexport const preparePortData = (channel: AbstractChannelProtocol) => {\n const fn = (props: string | SendingProps, ...args: any[]) => {\n let requestPath = '';\n let methodName = '';\n let params = [] as any[];\n let transfer = [];\n let isOptionsRequest = false;\n\n const seqId = channel.seqId;\n\n if (typeof props === 'string') {\n requestPath = props;\n methodName = args[0];\n params = args.slice(1);\n } else {\n requestPath = props.requestPath;\n methodName = props.methodName;\n isOptionsRequest = props.isOptionsRequest;\n // args will convert to array on default\n params = [].concat(props.args);\n transfer = args[0] ? args[0] : [];\n }\n\n const header: RequestEntryHeader = [\n RequestType.PromiseRequest,\n seqId,\n requestPath,\n methodName,\n ];\n\n const body = params;\n return {\n seqId,\n transfer,\n isOptionsRequest,\n data: [header, body],\n };\n };\n\n fn.lifecycle = SendMiddlewareLifecycle.Prepare;\n return fn;\n};\n\nexport const prepareHostPortData = (channel: AbstractChannelProtocol) => {\n const fn = (props: string | SendingProps, ...args: any[]) => {\n let requestPath = '';\n let methodName = '';\n let params = [] as any[];\n let transfer = [];\n const seqId = channel.seqId;\n let isOptionsRequest = false;\n\n if (typeof props === 'string') {\n requestPath = props;\n methodName = args[0];\n params = args.slice(1);\n } else {\n requestPath = props.requestPath;\n methodName = props.methodName;\n isOptionsRequest = props.isOptionsRequest;\n // args will convert to array on default\n params = [].concat(props.args);\n transfer = args[0] ? args[0] : [];\n }\n\n const header: HostRequestEntryHeader = [\n RequestType.PromiseRequest,\n seqId,\n requestPath,\n methodName,\n // @ts-ignore\n channel.channelName,\n ];\n\n const body = params;\n\n return {\n seqId,\n transfer,\n isOptionsRequest,\n data: [header, body],\n };\n };\n\n fn.lifecycle = SendMiddlewareLifecycle.Prepare;\n return fn;\n};\n\nexport const prepareNormalData = (channel: AbstractChannelProtocol) => {\n const fn = (props: string | SendingProps, ...args: any[]) => {\n let requestPath = '';\n let methodName = '';\n let params = [] as any[];\n const seqId = channel.seqId;\n let isOptionsRequest = false;\n\n if (typeof props === 'string') {\n requestPath = props;\n methodName = args[0];\n params = args.slice(1);\n } else {\n requestPath = props.requestPath;\n methodName = props.methodName;\n isOptionsRequest = props.isOptionsRequest;\n // args will convert to array on default\n params = [].concat(props.args);\n }\n\n const header: RequestEntryHeader = [\n RequestType.PromiseRequest,\n seqId,\n requestPath,\n methodName,\n ];\n\n const body = params;\n\n return {\n seqId,\n isOptionsRequest,\n data: [header, body],\n };\n };\n\n fn.lifecycle = SendMiddlewareLifecycle.Prepare;\n\n return fn;\n};\n","export type Deferred<T = any> = {\n resolve: (value: T | PromiseLike<T>) => void;\n reject: (err?: unknown) => void;\n promise: PromiseLike<T>;\n};\n\nexport function createDeferred<T>(): Deferred<T> {\n let resolve: (value: T | PromiseLike<T>) => void = null;\n let reject: (err?: unknown) => void = null;\n\n const promise = new Promise<T>((_resolve, _reject) => {\n resolve = _resolve;\n reject = _reject;\n });\n\n return {\n promise,\n resolve,\n reject,\n };\n}\n","import { isUpperAsciiLetter } from '@x-oasis/is-ascii';\n\nexport const isEventMethod = (name: string) => {\n if (typeof name !== 'string') return false;\n return (\n name[0] === 'o' && name[1] === 'n' && isUpperAsciiLetter(name.charCodeAt(2))\n );\n};\n\nexport const isAssignPassingPortMethod = (name: string) => {\n return /^assignPassingPort$/.test(name);\n};\n\nexport const isAcquirePortMethod = (name: string) => {\n return /^acquire.*Port$/.test(name);\n};\n\nexport const isOptionsMethod = (name: string) => {\n return /Options$/.test(name) || /OptionsRequest$/.test(name);\n};\n","import { createDeferred } from '@x-oasis/deferred';\nimport { isEventMethod } from '../common';\nimport { SenderMiddlewareOutput, SendMiddlewareLifecycle } from '../types';\nimport AbstractChannelProtocol from '../protocol/AbstractChannelProtocol';\n\n/**\n *\n * @param channelProtocol\n * @returns\n *\n * Add how to handle the request and response\n */\nexport const updateSeqInfo = (channelProtocol: AbstractChannelProtocol) => {\n const fn = (value: SenderMiddlewareOutput) => {\n const { data, seqId } = value;\n const header = data[0];\n const body = data[1];\n const methodName = header[3];\n\n // 如果说是event method的话,需要将body重制一下\n if (methodName && isEventMethod(methodName)) {\n channelProtocol.requestEvents.set(`${seqId}`, body[0]);\n data[1] = [];\n } else {\n const returnValue = createDeferred();\n channelProtocol.ongoingRequests.set(`${seqId}`, returnValue);\n value.returnValue = returnValue;\n }\n return value;\n };\n\n fn.lifecycle = SendMiddlewareLifecycle.Transform;\n return fn;\n};\n","import { SenderMiddlewareOutput, SendMiddlewareLifecycle } from '../types';\nimport AbstractChannelProtocol from '../protocol/AbstractChannelProtocol';\n\nexport const sendRequest = (channelProtocol: AbstractChannelProtocol) => {\n const fn = (value: SenderMiddlewareOutput) => {\n const { data, transfer } = value;\n if (transfer) channelProtocol.send(data, transfer);\n else channelProtocol.send(data);\n\n return value;\n };\n\n fn.lifecycle = SendMiddlewareLifecycle.Send;\n return fn;\n};\n","import {\n MiddlewareContext,\n PendingSendEntry,\n MiddlewareFunction,\n SendMiddlewareLifecycle,\n} from '../types';\n\nexport const resumeMiddlewares = (\n middlewares: any,\n entry: PendingSendEntry\n) => {\n let start = false;\n\n return middlewares.reduce((a: any, b: MiddlewareFunction) => {\n if (!b.lifecycle) return a;\n if (a.lifecycle >= b.lifecycle && b.displayName === a.methodName) {\n start = true;\n }\n if (!start) return a;\n\n const targetLifecycle = a?.middlewareContext?.minLifecycle;\n const currentLifecycle = b?.lifecycle;\n\n // @ts-ignore\n if (\n targetLifecycle &&\n currentLifecycle &&\n currentLifecycle < targetLifecycle\n ) {\n return a;\n }\n\n return b(a);\n }, entry);\n};\n\nexport const runMiddlewares = (\n middlewares: any,\n args: any[],\n _context?: MiddlewareContext\n) => {\n const context = {\n isResumed: false,\n startLifecycle: SendMiddlewareLifecycle.Initial,\n minLifecycle: SendMiddlewareLifecycle.Initial,\n ...(_context || {}),\n };\n\n return middlewares.reduce((a: any, b: MiddlewareFunction, index: number) => {\n if (!index) return b(...a);\n if (index === 1) {\n a.middlewareContext = context;\n }\n\n const targetLifecycle = a?.middlewareContext?.minLifecycle;\n const currentLifecycle = b?.lifecycle;\n\n if (\n targetLifecycle &&\n currentLifecycle &&\n currentLifecycle < targetLifecycle\n ) {\n return a;\n }\n return b(a);\n }, args);\n};\n","/**\n * Base class for read buffer/deserialization\n * Supports both string and binary (ArrayBuffer/Uint8Array) input\n */\nabstract class ReadBaseBuffer {\n /**\n * Decode/deserialize data\n * @param data - Encoded data (string or binary)\n * @returns Decoded data\n */\n abstract decode(data: string | ArrayBuffer | Uint8Array): any;\n\n /**\n * Get the format identifier this decoder supports\n * @returns Format name (e.g., 'json', 'msgpack', 'cbor')\n */\n abstract getFormat(): string;\n}\n\nexport default ReadBaseBuffer;\n","import ReadBaseBuffer from './ReadBaseBuffer';\n\nexport enum DataType {\n Undefined = 0,\n String = 1,\n Buffer = 2,\n VSBuffer = 3,\n Array = 4,\n Object = 5,\n Int = 6,\n}\n\n/**\n * JSON-based read buffer implementation\n * Default deserializer using JSON.parse\n */\nexport default class ReadBuffer extends ReadBaseBuffer {\n decode(data: string | ArrayBuffer | Uint8Array): any {\n // Handle binary input (convert to string first)\n if (data instanceof ArrayBuffer || data instanceof Uint8Array) {\n const decoder = new TextDecoder();\n const text = decoder.decode(data);\n return JSON.parse(text);\n }\n // Handle string input\n return JSON.parse(data as string);\n }\n\n getFormat(): string {\n return 'json';\n }\n}\n\n// export class BufferReader implements IReader {\n\n// \tprivate pos = 0;\n\n// \tconstructor(private buffer: VSBuffer) { }\n\n// \tread(bytes: number): VSBuffer {\n// \t\tconst result = this.buffer.slice(this.pos, this.pos + bytes);\n// \t\tthis.pos += result.byteLength;\n// \t\treturn result;\n// \t}\n// }\n\n// export class BufferWriter implements IWriter {\n\n// \tprivate buffers: VSBuffer[] = [];\n\n// \tget buffer(): VSBuffer {\n// \t\treturn VSBuffer.concat(this.buffers);\n// \t}\n\n// \twrite(buffer: VSBuffer): void {\n// \t\tthis.buffers.push(buffer);\n// \t}\n// }\n","/**\n * Base class for write buffer/serialization\n * Supports both string and binary (ArrayBuffer/Uint8Array) output\n */\nabstract class WriteBaseBuffer {\n /**\n * Encode/serialize data\n * @param data - Data to encode\n * @returns Encoded data (string for text formats, ArrayBuffer/Uint8Array for binary formats)\n */\n abstract encode(data: any): string | ArrayBuffer | Uint8Array;\n\n /**\n * Get the format identifier for content negotiation\n * @returns Format name (e.g., 'json', 'msgpack', 'cbor')\n */\n abstract getFormat(): string;\n}\n\nexport default WriteBaseBuffer;\n","import WriteBaseBuffer from './WriteBaseBuffer';\n\n/**\n * JSON-based write buffer implementation\n * Default serializer using JSON.stringify\n */\nexport default class WriteBuffer extends WriteBaseBuffer {\n encode(data: any): string {\n return JSON.stringify(data);\n }\n\n getFormat(): string {\n return 'json';\n }\n}\n","/**\n * Supported serialization formats for RPC communication\n *\n * Based on JSON-RPC community practices:\n * - JSON: Default, human-readable, good for debugging\n * - MessagePack: Binary format, 2-3x faster, smaller size\n * - CBOR: Standard binary format (RFC 7049)\n * - Protobuf: High performance, requires schema\n */\nexport enum SerializationFormat {\n /** JSON - Default text format, human-readable */\n JSON = 'json',\n /** MessagePack - Binary format, high performance */\n MESSAGEPACK = 'msgpack',\n /** CBOR - Concise Binary Object Representation (RFC 7049) */\n CBOR = 'cbor',\n /** Protocol Buffers - High performance, schema-based */\n PROTOBUF = 'protobuf',\n /** Custom format - User-defined serialization */\n CUSTOM = 'custom',\n}\n\n/**\n * Serialization format metadata\n */\nexport interface SerializationFormatInfo {\n format: SerializationFormat;\n name: string;\n description: string;\n mimeType: string;\n isBinary: boolean;\n isText: boolean;\n}\n\n/**\n * Format metadata registry\n */\nexport const FORMAT_INFO: Record<SerializationFormat, SerializationFormatInfo> =\n {\n [SerializationFormat.JSON]: {\n format: SerializationFormat.JSON,\n name: 'JSON',\n description: 'JavaScript Object Notation - Human-readable text format',\n mimeType: 'application/json',\n isBinary: false,\n isText: true,\n },\n [SerializationFormat.MESSAGEPACK]: {\n format: SerializationFormat.MESSAGEPACK,\n name: 'MessagePack',\n description:\n 'Binary serialization format - High performance, compact size',\n mimeType: 'application/x-msgpack',\n isBinary: true,\n isText: false,\n },\n [SerializationFormat.CBOR]: {\n format: SerializationFormat.CBOR,\n name: 'CBOR',\n description: 'Concise Binary Object Representation (RFC 7049)',\n mimeType: 'application/cbor',\n isBinary: true,\n isText: false,\n },\n [SerializationFormat.PROTOBUF]: {\n format: SerializationFormat.PROTOBUF,\n name: 'Protocol Buffers',\n description: 'Google Protocol Buffers - Schema-based binary format',\n mimeType: 'application/x-protobuf',\n isBinary: true,\n isText: false,\n },\n [SerializationFormat.CUSTOM]: {\n format: SerializationFormat.CUSTOM,\n name: 'Custom',\n description: 'User-defined custom serialization format',\n mimeType: 'application/octet-stream',\n isBinary: true,\n isText: false,\n },\n };\n","import ReadBaseBuffer from './ReadBaseBuffer';\nimport WriteBaseBuffer from './WriteBaseBuffer';\nimport ReadBuffer from './ReadBuffer';\nimport WriteBuffer from './WriteBuffer';\nimport { SerializationFormat } from './SerializationFormat';\n\n/**\n * Factory for creating buffer instances based on serialization format\n *\n * This factory allows easy switching between different serialization formats\n * and supports custom implementations.\n */\nexport class BufferFactory {\n private static readBufferRegistry = new Map<string, () => ReadBaseBuffer>();\n private static writeBufferRegistry = new Map<string, () => WriteBaseBuffer>();\n\n /**\n * Register a custom read buffer implementation\n */\n static registerReadBuffer(\n format: string,\n factory: () => ReadBaseBuffer\n ): void {\n this.readBufferRegistry.set(format, factory);\n }\n\n /**\n * Register a custom write buffer implementation\n */\n static registerWriteBuffer(\n format: string,\n factory: () => WriteBaseBuffer\n ): void {\n this.writeBufferRegistry.set(format, factory);\n }\n\n /**\n * Create a read buffer for the specified format\n */\n static createReadBuffer(\n format: SerializationFormat | string = SerializationFormat.JSON\n ): ReadBaseBuffer {\n const factory = this.readBufferRegistry.get(format);\n if (factory) {\n return factory();\n }\n\n // Default to JSON\n switch (format) {\n case SerializationFormat.JSON:\n return new ReadBuffer();\n case SerializationFormat.MESSAGEPACK:\n // Try to load MessagePack if available\n try {\n // Dynamic import example (would need actual implementation)\n // const { MessagePackReadBuffer } = require('./MessagePackBuffer');\n // return new MessagePackReadBuffer();\n throw new Error(\n 'MessagePack not available. Install @msgpack/msgpack and register it.'\n );\n } catch (e) {\n throw new Error(\n `Unsupported read buffer format: ${format}. Register a custom implementation.`\n );\n }\n default:\n throw new Error(`Unsupported read buffer format: ${format}`);\n }\n }\n\n /**\n * Create a write buffer for the specified format\n */\n static createWriteBuffer(\n format: SerializationFormat | string = SerializationFormat.JSON\n ): WriteBaseBuffer {\n const factory = this.writeBufferRegistry.get(format);\n if (factory) {\n return factory();\n }\n\n // Default to JSON\n switch (format) {\n case SerializationFormat.JSON:\n return new WriteBuffer();\n case SerializationFormat.MESSAGEPACK:\n // Try to load MessagePack if available\n try {\n // Dynamic import example (would need actual implementation)\n // const { MessagePackWriteBuffer } = require('./MessagePackBuffer');\n // return new MessagePackWriteBuffer();\n throw new Error(\n 'MessagePack not available. Install @msgpack/msgpack and register it.'\n );\n } catch (e) {\n throw new Error(\n `Unsupported write buffer format: ${format}. Register a custom implementation.`\n );\n }\n default:\n throw new Error(`Unsupported write buffer format: ${format}`);\n }\n }\n\n /**\n * Get list of registered formats\n */\n static getRegisteredFormats(): string[] {\n const formats = new Set<string>();\n this.readBufferRegistry.forEach((_, format) => formats.add(format));\n this.writeBufferRegistry.forEach((_, format) => formats.add(format));\n return Array.from(formats);\n }\n}\n\n// Register default JSON format\nBufferFactory.registerReadBuffer(\n SerializationFormat.JSON,\n () => new ReadBuffer()\n);\nBufferFactory.registerWriteBuffer(\n SerializationFormat.JSON,\n () => new WriteBuffer()\n);\n","export default Function.call.bind(Object.prototype.toString);\n","import toString from '@x-oasis/to-string';\n\n// https://github.com/lodash/lodash/blob/main/src/isEmpty.ts\n// https://stackoverflow.com/a/53751866\n\nexport default (obj: any) => {\n if (toString(obj) === '[object Promise]') return true;\n if (toString(obj) === '[object Object]') {\n return typeof obj.then === 'function';\n }\n return false;\n};\n","/**\n * Constants used for JSONRPC implementation\n */\n\nexport const ERROR = 'Error';\n\nexport const isArray = Array.isArray;\n\nexport const isObject = (val: unknown): val is object => {\n return val !== null && typeof val === 'object' && !isArray(val);\n};\n\nexport const isFunction = (val: unknown): val is Function => {\n return typeof val === 'function';\n};\n\nexport const UNDEFINED = void 0;\n","import { ID, ErrorResponse } from '../error';\nimport { ERROR, isArray, isFunction, isObject, UNDEFINED } from './constants';\n\n/**\n * JSONRPC version constant\n */\nexport const jsonrpc = '2.0' as const;\n\n/**\n * JSONRPC Request interface\n */\nexport interface Request {\n readonly jsonrpc: typeof jsonrpc;\n readonly id?: ID;\n readonly method: string;\n readonly params: readonly unknown[] | object;\n readonly remoteStack?: string;\n}\n\n/**\n * JSONRPC Success Response interface\n */\nexport interface SuccessResponse {\n readonly jsonrpc: typeof jsonrpc;\n readonly id?: ID;\n readonly result: unknown;\n readonly undef?: boolean; // Non-standard extension for undefined values\n}\n\n/**\n * JSONRPC Response type (success or error)\n */\nexport type Response = SuccessResponse | ErrorResponse<unknown>;\n\n/**\n * Error map function type for custom error mapping\n */\nexport type ErrorMapFunction<T = unknown> = (\n error: unknown,\n request: Request\n) => {\n code: number;\n message: string;\n data?: T;\n};\n\n/**\n * AsyncCall error detail structure\n */\nexport interface AsyncCallErrorDetail {\n readonly stack?: string;\n readonly type?: string;\n}\n\n/**\n * Create a JSONRPC request object\n */\nexport const makeRequest = (\n id: ID,\n method: string,\n params: readonly unknown[] | object,\n remoteStack?: string\n): Request => {\n const x: Request = { jsonrpc, id, method, params, remoteStack };\n deleteUndefined(x, 'id');\n deleteFalsy(x, 'remoteStack');\n return x;\n};\n\n/**\n * Create a JSONRPC success response object\n */\nexport const makeSuccessResponse = (\n id: ID,\n result: unknown\n): SuccessResponse => {\n const x: SuccessResponse = { jsonrpc, id, result };\n deleteUndefined(x, 'id');\n return x;\n};\n\n/**\n * Create a JSONRPC error response object\n * Pre-defined errors from JSONRPC 2.0 specification section 5.1\n */\nexport const makeErrorResponse = <T>(\n id: ID,\n code: number,\n message: string,\n data?: T\n): ErrorResponse<T> => {\n if (id === UNDEFINED) id = null;\n code = Math.floor(code);\n if (Number.isNaN(code)) code = -1;\n const x: ErrorResponse<T> = {\n jsonrpc,\n id,\n error: { code, message, data },\n };\n deleteUndefined(x.error, 'data');\n return x;\n};\n\n/**\n * Parse error response (-32700)\n * Pre-defined error in JSONRPC 2.0 specification section 5.1\n */\nexport const ErrorResponseParseError = <T>(\n e: unknown,\n mapper: ErrorMapFunction<T>\n): ErrorResponse<T> => {\n const obj = ErrorResponseMapped({} as any, e, mapper);\n const o = obj.error as Mutable<ErrorResponse['error']>;\n o.code = -32700;\n o.message = 'Parse error';\n return obj;\n};\n\n/**\n * Invalid Request error response (-32600)\n * Pre-defined error in JSONRPC 2.0 specification section 5.1\n */\nexport const ErrorResponseInvalidRequest = (id: ID): ErrorResponse => {\n return makeErrorResponse(id, -32600, 'Invalid Request');\n};\n\n/**\n * Method not found error response (-32601)\n * Pre-defined error in JSONRPC 2.0 specification section 5.1\n */\nexport const ErrorResponseMethodNotFound = (id: ID): ErrorResponse => {\n return makeErrorResponse(id, -32601, 'Method not found');\n};\n\n/**\n * Invalid params error response (-32602)\n * Pre-defined error in JSONRPC 2.0 specification section 5.1\n */\nexport const ErrorResponseInvalidParams = (id: ID): ErrorResponse => {\n return makeErrorResponse(id, -32602, 'Invalid params');\n};\n\n/**\n * Internal error response (-32603)\n * Pre-defined error in JSONRPC 2.0 specification section 5.1\n */\nexport const ErrorResponseInternalError = (id: ID): ErrorResponse => {\n return makeErrorResponse(id, -32603, 'Internal error');\n};\n\n/**\n * Map an error to a JSONRPC error response using a custom mapper\n */\nexport const ErrorResponseMapped = <T>(\n request: Request,\n e: unknown,\n mapper: ErrorMapFunction<T>\n): ErrorResponse<T> => {\n const { id } = request;\n const { code, message, data } = mapper(e, request);\n return makeErrorResponse(id, code, message, data);\n};\n\n/**\n * Default error mapper that extracts error information\n */\nexport const defaultErrorMapper =\n (stack = '', code = -1): ErrorMapFunction<AsyncCallErrorDetail> =>\n (e) => {\n let message = toString('', () => (e as any).message);\n let type = toString(\n ERROR,\n (ctor = (e as any).constructor) => isFunction(ctor) && ctor.name\n );\n\n // Check for DOMException\n const E = globalThis.DOMException;\n if (E && e instanceof E) {\n type = `DOMException:${e.name}`;\n }\n\n const eType = typeof e;\n if (\n eType === 'string' ||\n eType === 'number' ||\n eType === 'boolean' ||\n eType === 'bigint'\n ) {\n type = ERROR;\n message = String(e);\n }\n\n const data: AsyncCallErrorDetail = stack ? { stack, type } : { type };\n return { code, message, data };\n };\n\n/**\n * Check if an object is a valid JSONRPC request or response\n */\nexport const isJSONRPCObject = (data: any): data is Response | Request => {\n if (!isObject(data)) return false;\n if (!('jsonrpc' in data)) return false;\n const obj = data as { jsonrpc?: string; params?: unknown };\n if (obj.jsonrpc !== jsonrpc) return false;\n if ('params' in obj) {\n const params = obj.params;\n if (!isArray(params) && !isObject(params)) return false;\n }\n return true;\n};\n\n/**\n * Helper function to safely convert value to string\n */\nconst toString = (_default: string, val: () => any): string => {\n try {\n const v = val();\n if (v === UNDEFINED) return _default;\n return String(v);\n } catch {\n return _default;\n }\n};\n\n/**\n * Delete undefined property from object\n */\nconst deleteUndefined = <O>(x: O, key: keyof O): void => {\n if (x[key] === UNDEFINED) delete x[key];\n};\n\n/**\n * Delete falsy property from object\n */\nconst deleteFalsy = <T>(x: T, key: keyof T): void => {\n if (!x[key]) delete x[key];\n};\n\n/**\n * Make a type mutable\n */\ntype Mutable<T> = { -readonly [key in keyof T]: T[key] };\n","/* eslint-disable no-param-reassign */\n\n/**\n * JSONRPC Error Response Detail\n * Based on JSONRPC 2.0 specification\n */\nexport interface ErrorResponseDetail<Error = unknown> {\n readonly code: number;\n readonly message: string;\n readonly data?: Error;\n}\n\n/**\n * JSONRPC Request/Response ID type\n * Can be string, number, null, or undefined (for notifications)\n */\nexport type ID = string | number | null | undefined;\n\n/**\n * JSONRPC Error Response\n * Based on JSONRPC 2.0 specification\n */\nexport interface ErrorResponse<Error = unknown> {\n readonly jsonrpc: '2.0';\n readonly id?: ID;\n readonly error: ErrorResponseDetail<Error>;\n}\n\n/**\n * Standard JSONRPC 2.0 Error Codes\n * Based on JSONRPC 2.0 specification section 5.1\n */\nexport enum JSONRPCErrorCode {\n /**\n * Parse error (-32700)\n * Invalid JSON was received by the server.\n * An error occurred on the server while parsing the JSON text.\n */\n ParseError = -32700,\n\n /**\n * Invalid Request (-32600)\n * The JSON sent is not a valid Request object.\n */\n InvalidRequest = -32600,\n\n /**\n * Method not found (-32601)\n * The method does not exist / is not available.\n */\n MethodNotFound = -32601,\n\n /**\n * Invalid params (-32602)\n * Invalid method parameter(s).\n */\n InvalidParams = -32602,\n\n /**\n * Internal error (-32603)\n * Internal JSON-RPC error.\n */\n InternalError = -32603,\n\n /**\n * Server error (-32000 to -32099)\n * Reserved for implementation-defined server-errors.\n * The remainder of the space is available for application defined errors.\n */\n ServerErrorStart = -32000,\n ServerErrorEnd = -32099,\n}\n\n/**\n * Create a JSONRPC error response object\n * This function is kept for backward compatibility.\n * For new code, prefer using functions from utils/jsonrpc.ts\n */\nexport const makeErrorResponse = <T>(\n id: ID,\n code: number,\n message: string,\n data?: T\n): ErrorResponse<T> => {\n if (id === undefined) id = null;\n code = Math.floor(code);\n if (Number.isNaN(code)) code = -1;\n const x: ErrorResponse<T> = {\n jsonrpc: '2.0',\n id,\n error: { code, message, data },\n };\n // Remove undefined data field\n if (x.error.data === undefined) {\n delete (x.error as any).data;\n }\n return x;\n};\n","import isPromise from '@x-oasis/is-promise';\nimport { ResponseType, DeserializedMessageOutput } from '../types';\nimport AbstractChannelProtocol from '../protocol/AbstractChannelProtocol';\nimport {\n ErrorResponseMethodNotFound,\n defaultErrorMapper,\n ErrorResponseMapped,\n makeRequest,\n Request,\n AsyncCallErrorDetail,\n} from '../utils/jsonrpc';\nimport { JSONRPCErrorCode } from '../error';\n\n/**\n * Create standardized error response body\n */\nconst createErrorResponseBody = (\n error: unknown,\n request?: Request\n): {\n code: number;\n message: string;\n data?: AsyncCallErrorDetail;\n} => {\n const mapper = defaultErrorMapper(\n error instanceof Error ? error.stack : '',\n JSONRPCErrorCode.InternalError\n );\n\n if (request) {\n const errorResponse = ErrorResponseMapped(request, error, mapper);\n return errorResponse.error;\n }\n\n // Fallback when no request context is available\n const { code, message, data } = mapper(error, {} as Request);\n return { code, message, data };\n};\n\nexport const handleRequest =\n (protocol: AbstractChannelProtocol) =>\n (message: DeserializedMessageOutput) => {\n const service = protocol.service;\n\n const { data } = message;\n const header = data[0];\n\n const body = data[1];\n const type = header[0] as any;\n\n /**\n * if the message is a response, do nothing and return the message\n */\n if (Object.values(ResponseType).includes(type)) {\n return message;\n }\n\n const seqId = header[1];\n const requestPath = header[2];\n const methodName = header[3];\n const args = body[0];\n\n // Create JSONRPC request object for error context\n const jsonrpcRequest = makeRequest(seqId, methodName, args);\n\n const handler = service.getHandler(methodName);\n\n // Check if method exists\n if (!handler) {\n const errorResponse = ErrorResponseMethodNotFound(seqId);\n const responseHeader = [ResponseType.ReturnFail, seqId];\n const responseBody = [errorResponse.error];\n\n protocol.sendReply(\n protocol.writeBuffer.encode([responseHeader, responseBody])\n );\n return message;\n }\n\n const _result = handler(args);\n\n // todo\n const result = Promise.resolve(_result);\n\n if (isPromise(result)) {\n result.then(\n (response: any) => {\n const responseHeader = [ResponseType.ReturnSuccess, seqId];\n let responseBody = [];\n let sendData = null;\n try {\n responseBody = [response];\n sendData = protocol.writeBuffer.encode([\n responseHeader,\n responseBody,\n ]);\n } catch (err) {\n // Encoding error - use standardized error format\n const errorBody = createErrorResponseBody(err, jsonrpcRequest);\n responseBody = [errorBody];\n sendData = protocol.writeBuffer.encode([\n responseHeader,\n responseBody,\n ]);\n console.error(\n `[handleRequest sendReply encode error ] ${requestPath} ${methodName}`,\n err\n );\n }\n\n protocol.sendReply(sendData);\n },\n (err: unknown) => {\n // Use standardized JSONRPC error format\n const errorBody = createErrorResponseBody(err, jsonrpcRequest);\n const responseHeader = [ResponseType.ReturnFail, seqId];\n const responseBody = [errorBody];\n\n protocol.sendReply(\n protocol.writeBuffer.encode([responseHeader, responseBody])\n );\n }\n );\n }\n // 其实这儿不应该这么处理,应该返回一个空值,但是为了方便,还是返回原来的消息\n // 因为假如说是一个request的话,到这一步就算处理完了\n return message;\n };\n","import { Disposable } from '@x-oasis/disposable';\nimport { Event } from '@x-oasis/emitter';\nimport { Deferred } from '@x-oasis/deferred';\nimport { generateRandomKey } from '@x-oasis/id';\n\nimport {\n SendingProps,\n IMessageChannel,\n ClientMiddleware,\n SenderMiddleware,\n RequestRawSequenceId,\n PendingSendEntry,\n AbstractChannelProtocolProps,\n} from '../types';\nimport { runMiddlewares, sendRequest } from '../middlewares';\nimport ReadBaseBuffer from '../buffer/ReadBaseBuffer';\nimport WriteBaseBuffer from '../buffer/WriteBaseBuffer';\nimport { BufferFactory } from '../buffer/BufferFactory';\nimport { SerializationFormat } from '../buffer/SerializationFormat';\nimport { resumeMiddlewares } from '../middlewares/utils';\n\nimport { deserialize, serialize } from '../middlewares/buffer';\nimport { handleResponse } from '../middlewares/handleResponse';\nimport RPCService from '../endpoint/RPCService';\nimport { prepareNormalData } from '../middlewares/prepareRequestData';\nimport { updateSeqInfo } from '../middlewares/updateSeqInfo';\nimport { normalizeMessageChannelRawMessage } from '../middlewares/normalize';\nimport { handleRequest } from '../middlewares/handleRequest';\n\nabstract class AbstractChannelProtocol\n extends Disposable\n implements IMessageChannel\n{\n private readonly _masterProcessName: string;\n\n private _key: string;\n\n private _service: RPCService;\n\n private readonly _description: string;\n\n private _seqId: RequestRawSequenceId = -1;\n\n // decoder should comes first !!!!\n protected _onMessageMiddleware: ClientMiddleware[] = [\n normalizeMessageChannelRawMessage,\n deserialize,\n handleRequest,\n handleResponse,\n ];\n\n private _senderMiddleware: SenderMiddleware[] = [\n prepareNormalData,\n updateSeqInfo,\n serialize,\n sendRequest,\n ];\n\n private _readBuffer: ReadBaseBuffer | null = null;\n\n private _writeBuffer: WriteBaseBuffer | null = null;\n\n private _serializationFormat: string;\n\n private _isConnected = true;\n\n /**\n * 如果说channel存在的话,那么就是ongoing request\n */\n public ongoingRequests: Map<string, Deferred> = new Map();\n\n /**\n * 如果说channel不存在,那么请求就会暂时放到这个里面\n */\n public pendingSendEntries = new Set<PendingSendEntry>();\n\n public requestEvents: Map<string, any> = new Map();\n\n private onDidConnectedEvent = new Event({ name: 'on-did-connected' });\n\n onDidConnected = this.onDidConnectedEvent.subscribe;\n\n private onDidDisconnectedEvent = new Event({ name: 'on-did-disconnect' });\n\n onDidDisconnected = this.onDidDisconnectedEvent.subscribe;\n\n constructor(props?: AbstractChannelProtocolProps) {\n super();\n const {\n description,\n masterProcessName,\n connected = true,\n serializationFormat = SerializationFormat.JSON,\n readBuffer,\n writeBuffer,\n } = props || {};\n\n this._description = description;\n this._isConnected = connected;\n this._masterProcessName = masterProcessName;\n this._serializationFormat = serializationFormat;\n\n // 如果提供了自定义 buffer,直接使用\n if (readBuffer) {\n this._readBuffer = readBuffer;\n }\n if (writeBuffer) {\n this._writeBuffer = writeBuffer;\n }\n\n // 需要创建,否则创建'message'监听时,会出现混乱\n this._key = generateRandomKey();\n this.registerDisposable(this.onDidConnected(this.didConnected.bind(this)));\n\n this._onMessageMiddleware = this.decorateOnMessageMiddleware(\n this._onMessageMiddleware\n );\n this._senderMiddleware = this.decorateSendMiddleware(\n this._senderMiddleware\n );\n\n this.applyOnMessageMiddleware(this._onMessageMiddleware);\n this.applySendMiddleware(this._senderMiddleware);\n }\n\n get service() {\n return this._service;\n }\n\n setService(service: RPCService) {\n this._service = service;\n }\n\n get senderMiddleware() {\n return this._senderMiddleware;\n }\n\n /**\n * Get or create read buffer instance\n * Uses lazy initialization with caching for performance\n *\n * Priority:\n * 1. Custom buffer provided in constructor\n * 2. Cached instance\n * 3. Create new instance using BufferFactory with configured format\n *\n * Subclasses can override this method to provide custom buffer logic\n */\n get readBuffer(): ReadBaseBuffer {\n if (this._readBuffer) {\n return this._readBuffer;\n }\n\n // Try to create using BufferFactory\n try {\n this._readBuffer = BufferFactory.createReadBuffer(\n this._serializationFormat\n );\n } catch (error) {\n // Fallback to JSON if configured format is not available\n console.warn(\n `[AbstractChannelProtocol] Failed to create read buffer with format \"${this._serializationFormat}\", falling back to JSON.`,\n error\n );\n this._readBuffer = BufferFactory.createReadBuffer(\n SerializationFormat.JSON\n );\n }\n\n return this._readBuffer;\n }\n\n /**\n * Get or create write buffer instance\n * Uses lazy initialization with caching for performance\n *\n * Priority:\n * 1. Custom buffer provided in constructor\n * 2. Cached instance\n * 3. Create new instance using BufferFactory with configured format\n *\n * Subclasses can override this method to provide custom buffer logic\n */\n get writeBuffer(): WriteBaseBuffer {\n if (this._writeBuffer) {\n return this._writeBuffer;\n }\n\n // Try to create using BufferFactory\n try {\n this._writeBuffer = BufferFactory.createWriteBuffer(\n this._serializationFormat\n );\n } catch (error) {\n // Fallback to JSON if configured format is not available\n console.warn(\n `[AbstractChannelProtocol] Failed to create write buffer with format \"${this._serializationFormat}\", falling back to JSON.`,\n error\n );\n this._writeBuffer = BufferFactory.createWriteBuffer(\n SerializationFormat.JSON\n );\n }\n\n return this._writeBuffer;\n }\n\n /**\n * Get the configured serialization format\n */\n get serializationFormat(): string {\n return this._serializationFormat;\n }\n\n /**\n * Set serialization format (will recreate buffers on next access)\n * Note: This will clear cached buffers, new instances will be created on next access\n */\n setSerializationFormat(format: string): void {\n if (this._serializationFormat !== format) {\n this._serializationFormat = format;\n // Clear cached buffers to force recreation with new format\n this._readBuffer = null;\n this._writeBuffer = null;\n }\n }\n\n // start from 1\n get seqId() {\n this._seqId += 1;\n return `${this._key}_${this._seqId}`;\n }\n\n get description() {\n return this._description;\n }\n\n get masterProcessName() {\n return this._masterProcessName;\n }\n\n addPendingSendEntry(entry: PendingSendEntry) {\n this.pendingSendEntries.add(entry);\n }\n\n /**\n *\n * @param middlewares\n * @returns\n *\n * 增加自定义的middleware,需要重写这个方法\n */\n decorateSendMiddleware(middlewares: SenderMiddleware[]) {\n return middlewares;\n }\n\n decorateOnMessageMiddleware(middlewares: ClientMiddleware[]) {\n return middlewares;\n }\n\n applyOnMessageMiddleware(fns: Function | Function[]) {\n const copy = [].concat(fns);\n this._onMessageMiddleware = [];\n copy.forEach((fn) => {\n if (typeof fn === 'function') {\n this._onMessageMiddleware.push(fn(this));\n }\n });\n }\n\n applySendMiddleware(fns: Function | Function[]) {\n const copy = [].concat(fns);\n this._senderMiddleware = [];\n\n copy.forEach((fn) => {\n if (typeof fn === 'function') {\n this._senderMiddleware.push(fn(this));\n }\n });\n }\n\n isConnected() {\n return this._isConnected;\n }\n\n send(..._args: any[]) {\n throw new Error('send method is not implemented');\n }\n\n on(..._args: any[]) {\n throw new Error('onMessage method is not implemented');\n }\n\n resumePendingEntry() {\n this.pendingSendEntries.forEach((entry) => {\n this.pendingSendEntries.delete(entry);\n resumeMiddlewares(this.senderMiddleware, entry);\n });\n }\n\n didConnected() {\n this.resumePendingEntry();\n }\n\n connect() {\n this.onDidConnectedEvent.fire();\n }\n\n // 已经绑定了channel,这个时候需要直接触发\n activate() {\n this._isConnected = true;\n this.onDidConnectedEvent.fire();\n }\n\n disconnect() {\n this._isConnected = false;\n this.onDidDisconnectedEvent.fire();\n }\n\n makeRequest(props: SendingProps, transfer?: MessagePort[]): Deferred | void;\n\n makeRequest(\n requestPath: string,\n fnName: string,\n ...args: any[]\n ): Deferred | void;\n\n makeRequest(...args: any[]) {\n //\n const { returnValue } = runMiddlewares(this.senderMiddleware, args);\n if (returnValue) return returnValue;\n }\n\n sendReply(...args: any[]) {\n this.send(...args);\n }\n\n onMessage(...args: any[]) {\n runMiddlewares(this._onMessageMiddleware, args);\n }\n}\n\nexport default AbstractChannelProtocol;\n","// https://developer.mozilla.org/en-US/docs/Web/API/MessageChannel\nimport {\n IMessageChannel,\n AbstractChannelProtocolProps,\n} from '../types/channel';\nimport AbstractChannelProtocol from './AbstractChannelProtocol';\nimport { SenderMiddleware, ClientMiddleware } from '../types';\n\nexport default class RPCMessageChannel\n extends AbstractChannelProtocol\n implements IMessageChannel\n{\n private readonly port: MessagePort;\n private sender: any;\n private targetOrigin: string;\n\n constructor(\n options: {\n port: MessagePort;\n sender?: any;\n targetOrigin?: string;\n } & AbstractChannelProtocolProps\n ) {\n // Extract channel-specific options and pass the rest to parent\n const {\n port,\n sender = window,\n targetOrigin = '*',\n ...protocolOptions\n } = options;\n super(protocolOptions);\n this.port = port;\n this.targetOrigin = targetOrigin;\n this.sender = sender;\n // MessagePort 需要调用 start() 才能开始接收消息(当使用 addEventListener 时)\n if (this.port.start) {\n this.port.start();\n }\n }\n\n on(listener: (event: MessageEvent) => void): void | (() => void) {\n const f = (ev: MessageEvent): void => {\n listener(ev);\n };\n this.port.addEventListener('message', f);\n return () => this.port.removeEventListener('message', f);\n }\n\n send(message: any, transfer?: Transferable[]) {\n if (transfer && transfer.length > 0) {\n this.port.postMessage(message, transfer);\n } else {\n this.port.postMessage(message);\n }\n }\n\n /**\n * Inherits buffer getters from AbstractChannelProtocol\n * Uses BufferFactory with configured serialization format\n *\n * To use a different format, pass serializationFormat in constructor:\n * new RPCMessageChannel({ port, serializationFormat: 'msgpack' })\n *\n * Or override these getters if you need custom buffer logic\n */\n\n decorateSendMiddleware(middlewares: SenderMiddleware[]) {\n return middlewares;\n }\n\n decorateOnMessageMiddleware(middlewares: ClientMiddleware[]) {\n return middlewares;\n }\n\n disconnect() {\n if (this.port) {\n this.port.close();\n }\n }\n}\n","import AbstractChannelProtocol from './AbstractChannelProtocol';\nimport { AbstractChannelProtocolProps } from '../types/channel';\n\nexport default class WorkerChannel extends AbstractChannelProtocol {\n private worker: any;\n readonly name: string;\n\n /**\n * @param worker Pass the Worker in the main thread.\n * @param options Configuration options including serialization format\n */\n constructor(\n worker: any,\n options?: {\n name?: string;\n } & AbstractChannelProtocolProps\n ) {\n // Extract Worker-specific options and pass the rest to parent\n const { name, ...protocolOptions } = options || {};\n super(protocolOptions);\n this.worker = worker;\n this.name = name || 'worker';\n }\n\n on(listener: (data: unknown) => void): void | (() => void) {\n const f = (ev: MessageEvent): void => {\n listener(ev);\n };\n this.worker.addEventListener('message', f);\n return () => this.worker.removeEventListener('message', f);\n }\n\n send(data: unknown): void {\n this.worker.postMessage(data);\n }\n}\n","import AbstractChannelProtocol from './AbstractChannelProtocol';\nimport {\n SenderMiddleware,\n ClientMiddleware,\n AbstractChannelProtocolProps,\n} from '../types';\nimport { normalizeWebSocketRawMessage } from '../middlewares/normalize';\n\nexport default class WebSocketChannel extends AbstractChannelProtocol {\n private socket: WebSocket;\n readonly name: string;\n private reconnectAttempts: number;\n private maxReconnectAttempts: number;\n private reconnectDelay: number;\n\n /**\n * @param socket Pass the WebSocket instance (client-side) or WebSocket connection (server-side).\n * @param options Configuration options\n */\n constructor(\n socket: WebSocket,\n options?: {\n name?: string;\n maxReconnectAttempts?: number;\n reconnectDelay?: number;\n connected?: boolean;\n } & AbstractChannelProtocolProps\n ) {\n // super() must be the first statement - extract options inline using IIFE\n const opts = options || {};\n const {\n name,\n maxReconnectAttempts,\n reconnectDelay,\n connected,\n ...protocolOptions\n } = opts;\n\n super({\n connected: connected ?? false,\n ...protocolOptions,\n });\n\n // Now we can assign to instance properties\n this.socket = socket;\n this.name = name || 'websocket';\n this.reconnectAttempts = 0;\n this.maxReconnectAttempts = maxReconnectAttempts ?? 5;\n this.reconnectDelay = reconnectDelay ?? 1000;\n\n // Set up WebSocket event handlers\n this.setupSocketHandlers();\n }\n\n private setupSocketHandlers() {\n this.socket.addEventListener('open', () => {\n // WebSocket 已打开,激活连接\n this.activate();\n });\n\n this.socket.addEventListener('close', () => {\n // WebSocket 已关闭,断开连接\n super.disconnect();\n });\n\n this.socket.addEventListener('error', (error) => {\n console.error(`[WebSocketChannel ${this.name}] Error:`, error);\n });\n }\n\n on(listener: (data: unknown) => void): void | (() => void) {\n // Handle both browser MessageEvent and Node.js ws library format\n const f = (ev: MessageEvent | Buffer | string | any): void => {\n // Debug: log the event structure\n if (ev === undefined || ev === null) {\n console.warn(\n `[WebSocketChannel ${this.name}] Received undefined/null message event`\n );\n return;\n }\n\n // Pass the raw event/data to listener\n // The normalizeWebSocketRawMessage middleware will handle the conversion\n listener(ev);\n };\n\n // Try addEventListener first (works in both browser and ws library)\n if (typeof this.socket.addEventListener === 'function') {\n this.socket.addEventListener('message', f);\n return () => {\n if (typeof this.socket.removeEventListener === 'function') {\n this.socket.removeEventListener('message', f);\n }\n };\n } else {\n // Fallback to 'on' method for older ws library versions\n // Type assertion for Node.js ws library\n const wsSocket = this.socket as any;\n if (typeof wsSocket.on === 'function') {\n wsSocket.on('message', f);\n return () => {\n if (typeof wsSocket.off === 'function') {\n wsSocket.off('message', f);\n } else if (typeof wsSocket.removeListener === 'function') {\n wsSocket.removeListener('message', f);\n }\n };\n }\n }\n\n // If neither method works, return a no-op cleanup function\n return () => {};\n }\n\n send(data: unknown): void {\n if (this.socket.readyState === WebSocket.OPEN) {\n // Data should already be serialized (string) by the middleware\n // WebSocket.send() accepts string, ArrayBuffer, or Blob\n if (typeof data === 'string') {\n this.socket.send(data);\n } else if (data instanceof ArrayBuffer || data instanceof Blob) {\n this.socket.send(data);\n } else {\n // Fallback: serialize if not already serialized\n this.socket.send(JSON.stringify(data));\n }\n } else {\n console.warn(\n `[WebSocketChannel ${this.name}] Cannot send: WebSocket is not open. State: ${this.socket.readyState}`\n );\n }\n }\n\n /**\n * Inherits buffer getters from AbstractChannelProtocol\n * Uses BufferFactory with configured serialization format\n *\n * To use a different format, pass serializationFormat in constructor:\n * new WebSocketChannel(socket, { serializationFormat: 'msgpack' })\n *\n * Or override these getters if you need custom buffer logic\n */\n\n decorateSendMiddleware(middlewares: SenderMiddleware[]) {\n return middlewares;\n }\n\n decorateOnMessageMiddleware(middlewares: ClientMiddleware[]) {\n // Replace the first middleware (normalizeMessageChannelRawMessage)\n // with normalizeWebSocketRawMessage to handle both browser and Node.js ws library formats\n // Note: We return the factory function, not the result of calling it\n // because applyOnMessageMiddleware will call fn(this) for each middleware\n if (middlewares.length > 0) {\n return [normalizeWebSocketRawMessage, ...middlewares.slice(1)];\n }\n return middlewares;\n }\n\n disconnect() {\n if (this.socket) {\n this.socket.close();\n }\n super.disconnect();\n }\n\n /**\n * Get the current WebSocket ready state\n */\n get readyState(): number {\n return this.socket.readyState;\n }\n\n /**\n * Check if WebSocket is open\n */\n isOpen(): boolean {\n return this.socket.readyState === WebSocket.OPEN;\n }\n}\n"],"names":["ProxyRPCClient","requestPath","options","_ref","channel","setChannel","_proto","prototype","handleMessage","_this$channel","onMessage","apply","arguments","createProxy","getTrap","_","methodName","_this","Error","_len","length","args","Array","_key","makeRequest","promise","Proxy","get","RPCClientHost","Map","registerClient","client","hostMap","set","RPCService","servicePath","handlers","serviceHost","registerHandlers","setService","on","bind","_i","_Object$entries","Object","entries","_Object$entries$_i","handler","registerHandler","handlersMap","getHandler","RPCServiceHost","registerService","serviceHandlers","service","name","onWillAddFirstListener","onDidAddListener","onWillRemoveListener","generateRandomKey","key","seenKeys","RequestType","ResponseType","SendMiddlewareLifecycle","serialize","fn","value","_extends","data","writeBuffer","encode","lifecycle","DataOperation","deserialize","decoded","readBuffer","decode","err","console","error","normalizeMessageChannelRawMessage","event","ports","isBufferAvailable","Buffer","isBuffer","undefined","arrayBufferToString","buffer","from","toString","TextDecoder","e","uint8Array","Uint8Array","String","fromCharCode","bufferToString","normalizeWebSocketRawMessage","eventOrData","warn","normalizedData","concat","ArrayBuffer","Blob","actualData","handleResponse","protocol","message","header","body","type","values","includes","seqId","findDefer","ongoingRequests","PortSuccess","resolve","ReturnFail","reject","findListener","requestEvents","prepareNormalData","props","params","isOptionsRequest","_len3","_key3","slice","PromiseRequest","Prepare","isEventMethod","isUpperAsciiLetter","charCodeAt","updateSeqInfo","channelProtocol","returnValue","createDeferred","Transform","sendRequest","transfer","send","Send","resumeMiddlewares","middlewares","entry","start","reduce","a","b","displayName","targetLifecycle","_a$middlewareContext","middlewareContext","minLifecycle","currentLifecycle","runMiddlewares","_context","context","isResumed","startLifecycle","Initial","index","_a$middlewareContext2","ReadBaseBuffer","DataType","ReadBuffer","_ReadBaseBuffer","_inheritsLoose","decoder","text","JSON","parse","getFormat","WriteBaseBuffer","WriteBuffer","_WriteBaseBuffer","stringify","SerializationFormat","FORMAT_INFO","_FORMAT_INFO","format","description","mimeType","isBinary","isText","MESSAGEPACK","CBOR","PROTOBUF","CUSTOM","BufferFactory","registerReadBuffer","factory","readBufferRegistry","registerWriteBuffer","writeBufferRegistry","createReadBuffer","createWriteBuffer","getRegisteredFormats","formats","Set","forEach","add","call","ERROR","isArray","isObject","val","isFunction","UNDEFINED","jsonrpc","id","method","remoteStack","x","deleteUndefined","deleteFalsy","makeSuccessResponse","result","makeErrorResponse","code","Math","floor","Number","isNaN","ErrorResponseParseError","mapper","obj","ErrorResponseMapped","o","ErrorResponseInvalidRequest","ErrorResponseMethodNotFound","ErrorResponseInvalidParams","ErrorResponseInternalError","request","_mapper","defaultErrorMapper","stack","ctor","constructor","E","globalThis","DOMException","eType","isJSONRPCObject","_default","v","_unused","JSONRPCErrorCode","createErrorResponseBody","InternalError","errorResponse","handleRequest","jsonrpcRequest","responseHeader","responseBody","sendReply","_result","Promise","isPromise","then","response","ReturnSuccess","sendData","errorBody","AbstractChannelProtocol","_Disposable","Event","onDidConnectedEvent","subscribe","onDidDisconnectedEvent","masterProcessName","_ref$connected","connected","_ref$serializationFor","serializationFormat","_description","_isConnected","_masterProcessName","_serializationFormat","_readBuffer","_writeBuffer","registerDisposable","onDidConnected","didConnected","_assertThisInitialized","_onMessageMiddleware","decorateOnMessageMiddleware","_senderMiddleware","decorateSendMiddleware","applyOnMessageMiddleware","applySendMiddleware","_service","setSerializationFormat","addPendingSendEntry","pendingSendEntries","fns","copy","_this2","push","_this3","isConnected","resumePendingEntry","_this4","senderMiddleware","connect","fire","activate","disconnect","_runMiddlewares","_len2","_key2","_createClass","_seqId","Disposable","RPCMessageChannel","_AbstractChannelProto","port","_options$sender","sender","window","_options$targetOrigin","targetOrigin","protocolOptions","_objectWithoutPropertiesLoose","_excluded","listener","f","ev","addEventListener","removeEventListener","postMessage","close","WorkerChannel","worker","WebSocketChannel","socket","opts","maxReconnectAttempts","reconnectDelay","reconnectAttempts","setupSocketHandlers","wsSocket","off","removeListener","readyState","WebSocket","OPEN","isOpen"],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import ReadBaseBuffer from './ReadBaseBuffer';
2
+ import WriteBaseBuffer from './WriteBaseBuffer';
3
+ import { SerializationFormat } from './SerializationFormat';
4
+ export declare class BufferFactory {
5
+ private static readBufferRegistry;
6
+ private static writeBufferRegistry;
7
+ static registerReadBuffer(format: string, factory: () => ReadBaseBuffer): void;
8
+ static registerWriteBuffer(format: string, factory: () => WriteBaseBuffer): void;
9
+ static createReadBuffer(format?: SerializationFormat | string): ReadBaseBuffer;
10
+ static createWriteBuffer(format?: SerializationFormat | string): WriteBaseBuffer;
11
+ static getRegisteredFormats(): string[];
12
+ }
@@ -0,0 +1,2 @@
1
+ export default class DataBuffer {
2
+ }
@@ -0,0 +1,10 @@
1
+ import ReadBaseBuffer from './ReadBaseBuffer';
2
+ import WriteBaseBuffer from './WriteBaseBuffer';
3
+ export declare class MessagePackReadBuffer extends ReadBaseBuffer {
4
+ decode(_data: string | ArrayBuffer | Uint8Array): any;
5
+ getFormat(): string;
6
+ }
7
+ export declare class MessagePackWriteBuffer extends WriteBaseBuffer {
8
+ encode(_data: any): Uint8Array;
9
+ getFormat(): string;
10
+ }
@@ -0,0 +1,5 @@
1
+ declare abstract class ReadBaseBuffer {
2
+ abstract decode(data: string | ArrayBuffer | Uint8Array): any;
3
+ abstract getFormat(): string;
4
+ }
5
+ export default ReadBaseBuffer;
@@ -0,0 +1,14 @@
1
+ import ReadBaseBuffer from './ReadBaseBuffer';
2
+ export declare enum DataType {
3
+ Undefined = 0,
4
+ String = 1,
5
+ Buffer = 2,
6
+ VSBuffer = 3,
7
+ Array = 4,
8
+ Object = 5,
9
+ Int = 6
10
+ }
11
+ export default class ReadBuffer extends ReadBaseBuffer {
12
+ decode(data: string | ArrayBuffer | Uint8Array): any;
13
+ getFormat(): string;
14
+ }
@@ -0,0 +1,16 @@
1
+ export declare enum SerializationFormat {
2
+ JSON = "json",
3
+ MESSAGEPACK = "msgpack",
4
+ CBOR = "cbor",
5
+ PROTOBUF = "protobuf",
6
+ CUSTOM = "custom"
7
+ }
8
+ export interface SerializationFormatInfo {
9
+ format: SerializationFormat;
10
+ name: string;
11
+ description: string;
12
+ mimeType: string;
13
+ isBinary: boolean;
14
+ isText: boolean;
15
+ }
16
+ export declare const FORMAT_INFO: Record<SerializationFormat, SerializationFormatInfo>;
@@ -0,0 +1,5 @@
1
+ declare abstract class WriteBaseBuffer {
2
+ abstract encode(data: any): string | ArrayBuffer | Uint8Array;
3
+ abstract getFormat(): string;
4
+ }
5
+ export default WriteBaseBuffer;
@@ -0,0 +1,5 @@
1
+ import WriteBaseBuffer from './WriteBaseBuffer';
2
+ export default class WriteBuffer extends WriteBaseBuffer {
3
+ encode(data: any): string;
4
+ getFormat(): string;
5
+ }
@@ -0,0 +1,10 @@
1
+ export declare function registerMessagePack(): boolean;
2
+ export declare function registerCBOR(): boolean;
3
+ export declare function registerCompressedJSON(): void;
4
+ export declare function createChannelWithMessagePack(): void;
5
+ export interface FormatNegotiation {
6
+ clientFormats: string[];
7
+ serverFormats: string[];
8
+ selectedFormat?: string;
9
+ }
10
+ export declare function negotiateFormat(clientFormats: string[], serverFormats: string[]): string | null;
@@ -0,0 +1,8 @@
1
+ export { default as ReadBuffer } from './ReadBuffer';
2
+ export { default as WriteBuffer } from './WriteBuffer';
3
+ export { default as DataBuffer } from './DataBuffer';
4
+ export { default as ReadBaseBuffer } from './ReadBaseBuffer';
5
+ export { default as WriteBaseBuffer } from './WriteBaseBuffer';
6
+ export { SerializationFormat, FORMAT_INFO, type, SerializationFormatInfo, } from './SerializationFormat';
7
+ export { BufferFactory } from './BufferFactory';
8
+ export { MessagePackReadBuffer, MessagePackWriteBuffer, } from './MessagePackBuffer';
@@ -0,0 +1,4 @@
1
+ export declare const isEventMethod: (name: string) => boolean;
2
+ export declare const isAssignPassingPortMethod: (name: string) => boolean;
3
+ export declare const isAcquirePortMethod: (name: string) => boolean;
4
+ export declare const isOptionsMethod: (name: string) => boolean;
@@ -0,0 +1,12 @@
1
+ import AbstractChannelProtocol from '../protocol/AbstractChannelProtocol';
2
+ declare class ProxyRPCClient {
3
+ readonly requestPath: string;
4
+ private channel;
5
+ constructor(requestPath: string, options?: {
6
+ channel?: AbstractChannelProtocol;
7
+ });
8
+ setChannel(channel: AbstractChannelProtocol): void;
9
+ handleMessage(...args: any[]): void;
10
+ createProxy<T = object>(): T;
11
+ }
12
+ export default ProxyRPCClient;
@@ -0,0 +1,12 @@
1
+ import ProxyRPCClient from './ProxyRPCClient';
2
+ import AbstractChannelProtocol from '../protocol/AbstractChannelProtocol';
3
+ declare class RPCClientHost {
4
+ protected readonly hostPath: string;
5
+ private hostMap;
6
+ registerClient(requestPath: string, options?: {
7
+ channel?: AbstractChannelProtocol;
8
+ }): ProxyRPCClient;
9
+ }
10
+ export { RPCClientHost };
11
+ declare const _default: RPCClientHost;
12
+ export default _default;
@@ -0,0 +1,20 @@
1
+ import AbstractChannelProtocol from '../protocol/AbstractChannelProtocol';
2
+ import { RPCServiceHost } from './RPCServiceHost';
3
+ import { ServiceHandlers } from '../types/proxyService';
4
+ declare class RPCService {
5
+ private channel;
6
+ readonly serviceHost: RPCServiceHost;
7
+ readonly servicePath: string;
8
+ readonly handlersMap: Map<string, (...args: any[]) => any>;
9
+ constructor(servicePath: string, options?: {
10
+ channel?: AbstractChannelProtocol;
11
+ handlers: ServiceHandlers;
12
+ serviceHost?: RPCServiceHost;
13
+ });
14
+ setChannel(channel: AbstractChannelProtocol): void;
15
+ registerHandlers(handlers: Record<string, (...args: any[]) => any>): void;
16
+ handleMessage(...args: any[]): void;
17
+ registerHandler(methodName: string, handler: (...args: any[]) => any): void;
18
+ getHandler(methodName: string): (...args: any[]) => any;
19
+ }
20
+ export default RPCService;
@@ -0,0 +1,10 @@
1
+ import { ServiceHandlers } from '../types/proxyService';
2
+ import RPCService from './RPCService';
3
+ declare class RPCServiceHost {
4
+ protected readonly hostPath: string;
5
+ private hostMap;
6
+ registerService(servicePath: string, serviceHandlers: ServiceHandlers): RPCService;
7
+ }
8
+ export { RPCServiceHost };
9
+ declare const _default: RPCServiceHost;
10
+ export default _default;
@@ -0,0 +1,21 @@
1
+ export interface ErrorResponseDetail<Error = unknown> {
2
+ readonly code: number;
3
+ readonly message: string;
4
+ readonly data?: Error;
5
+ }
6
+ export declare type ID = string | number | null | undefined;
7
+ export interface ErrorResponse<Error = unknown> {
8
+ readonly jsonrpc: '2.0';
9
+ readonly id?: ID;
10
+ readonly error: ErrorResponseDetail<Error>;
11
+ }
12
+ export declare enum JSONRPCErrorCode {
13
+ ParseError = -32700,
14
+ InvalidRequest = -32600,
15
+ MethodNotFound = -32601,
16
+ InvalidParams = -32602,
17
+ InternalError = -32603,
18
+ ServerErrorStart = -32000,
19
+ ServerErrorEnd = -32099
20
+ }
21
+ export declare const makeErrorResponse: <T>(id: ID, code: number, message: string, data?: T) => ErrorResponse<T>;
@@ -0,0 +1,11 @@
1
+ import clientHost from './endpoint/RPCClientHost';
2
+ import ProxyRPCClient from './endpoint/ProxyRPCClient';
3
+ import RPCService from './endpoint/RPCService';
4
+ import serviceHost from './endpoint/RPCServiceHost';
5
+ export { default as MessageChannel } from './protocol/MessageChannel';
6
+ export { default as WorkerChannel } from './protocol/WorkerChannel';
7
+ export { default as WebSocketChannel } from './protocol/WebSocketChannel';
8
+ export { ProxyRPCClient, RPCService, clientHost, serviceHost };
9
+ export * from './utils';
10
+ export type { ErrorResponse, ErrorResponseDetail, ID } from './error';
11
+ export { JSONRPCErrorCode } from './error';
package/dist/index.js ADDED
@@ -0,0 +1,8 @@
1
+
2
+ 'use strict'
3
+
4
+ if (process.env.NODE_ENV === 'production') {
5
+ module.exports = require('./async-call-rpc.cjs.production.min.js')
6
+ } else {
7
+ module.exports = require('./async-call-rpc.cjs.development.js')
8
+ }
@@ -0,0 +1,18 @@
1
+ import { NormalizedRawMessageOutput, SenderMiddlewareOutput, SendMiddlewareLifecycle } from '../types';
2
+ import AbstractChannelProtocol from '../protocol/AbstractChannelProtocol';
3
+ export declare const serialize: (channel: AbstractChannelProtocol) => {
4
+ (value: SenderMiddlewareOutput): {
5
+ data: string | ArrayBuffer | Uint8Array;
6
+ transfer: any;
7
+ seqId: number;
8
+ returnValue: import("@x-oasis/deferred").Deferred<any>;
9
+ isOptionsRequest: boolean;
10
+ middlewareContext: import("../types").MiddlewareContext;
11
+ };
12
+ lifecycle: SendMiddlewareLifecycle;
13
+ };
14
+ export declare const deserialize: (channel: AbstractChannelProtocol) => (value: NormalizedRawMessageOutput) => {
15
+ data: string;
16
+ event: any;
17
+ ports: any;
18
+ };
@@ -0,0 +1,7 @@
1
+ import { SenderMiddlewareOutput, SendMiddlewareLifecycle } from '../types';
2
+ import AbstractChannelProtocol from '../protocol/AbstractChannelProtocol';
3
+ export declare const handleDisconnectedRequest: (protocol: AbstractChannelProtocol) => {
4
+ (value: SenderMiddlewareOutput): SenderMiddlewareOutput;
5
+ displayName: string;
6
+ lifecycle: SendMiddlewareLifecycle;
7
+ };
@@ -0,0 +1,3 @@
1
+ import { DeserializedMessageOutput } from '../types';
2
+ import AbstractChannelProtocol from '../protocol/AbstractChannelProtocol';
3
+ export declare const handlePortRequest: (protocol: AbstractChannelProtocol) => (message: DeserializedMessageOutput) => DeserializedMessageOutput;
@@ -0,0 +1,3 @@
1
+ import { DeserializedMessageOutput } from '../types';
2
+ import AbstractChannelProtocol from '../protocol/AbstractChannelProtocol';
3
+ export declare const handleRequest: (protocol: AbstractChannelProtocol) => (message: DeserializedMessageOutput) => DeserializedMessageOutput;
@@ -0,0 +1,10 @@
1
+ import AbstractChannelProtocol from '../protocol/AbstractChannelProtocol';
2
+ import RPCService from '../endpoint/RPCService';
3
+ export declare const handleAcquirePort: (props: {
4
+ protocol: AbstractChannelProtocol;
5
+ service: RPCService;
6
+ requestPath: string;
7
+ methodName: string;
8
+ seqId: string;
9
+ args: any[];
10
+ }) => any[];
@@ -0,0 +1,3 @@
1
+ import { DeserializedMessageOutput } from '../types';
2
+ import AbstractChannelProtocol from '../protocol/AbstractChannelProtocol';
3
+ export declare const handleResponse: (protocol: AbstractChannelProtocol) => (message: DeserializedMessageOutput) => DeserializedMessageOutput;
@@ -0,0 +1,7 @@
1
+ export * from './buffer';
2
+ export * from './normalize';
3
+ export * from './handleResponse';
4
+ export * from './prepareRequestData';
5
+ export * from './updateSeqInfo';
6
+ export * from './sendRequest';
7
+ export { runMiddlewares } from './utils';
@@ -0,0 +1,4 @@
1
+ import AbstractChannelProtocol from '../protocol/AbstractChannelProtocol';
2
+ import { NormalizedRawMessageOutput } from '../types';
3
+ export declare const createSenderLogger: (logService: any) => (channel: AbstractChannelProtocol) => (value: NormalizedRawMessageOutput) => NormalizedRawMessageOutput;
4
+ export declare const createClientLogger: (logService: any) => (channel: AbstractChannelProtocol) => (value: NormalizedRawMessageOutput) => NormalizedRawMessageOutput;
@@ -0,0 +1,14 @@
1
+ /// <reference types="node" />
2
+ import { NormalizedRawMessageOutput } from '../types';
3
+ export declare const normalizeMessageChannelRawMessage: () => (event: MessageEvent) => NormalizedRawMessageOutput;
4
+ export declare const normalizeIPCChannelRawMessage: () => (event: MessageEvent, data: string) => {
5
+ event: MessageEvent;
6
+ data: string;
7
+ ports: readonly MessagePort[];
8
+ };
9
+ export declare const processClientRawMessage: () => (data: string) => {
10
+ event: any;
11
+ data: string;
12
+ ports: any[];
13
+ };
14
+ export declare const normalizeWebSocketRawMessage: () => (eventOrData: MessageEvent | Buffer | string | any, ...args: any[]) => NormalizedRawMessageOutput;
@@ -0,0 +1,28 @@
1
+ import AbstractChannelProtocol from '../protocol/AbstractChannelProtocol';
2
+ import { SendingProps, SendMiddlewareLifecycle } from '../types';
3
+ export declare const preparePortData: (channel: AbstractChannelProtocol) => {
4
+ (props: string | SendingProps, ...args: any[]): {
5
+ seqId: string;
6
+ transfer: any[];
7
+ isOptionsRequest: boolean;
8
+ data: any[][];
9
+ };
10
+ lifecycle: SendMiddlewareLifecycle;
11
+ };
12
+ export declare const prepareHostPortData: (channel: AbstractChannelProtocol) => {
13
+ (props: string | SendingProps, ...args: any[]): {
14
+ seqId: string;
15
+ transfer: any[];
16
+ isOptionsRequest: boolean;
17
+ data: any[][];
18
+ };
19
+ lifecycle: SendMiddlewareLifecycle;
20
+ };
21
+ export declare const prepareNormalData: (channel: AbstractChannelProtocol) => {
22
+ (props: string | SendingProps, ...args: any[]): {
23
+ seqId: string;
24
+ isOptionsRequest: boolean;
25
+ data: any[][];
26
+ };
27
+ lifecycle: SendMiddlewareLifecycle;
28
+ };
@@ -0,0 +1,6 @@
1
+ import { SenderMiddlewareOutput, SendMiddlewareLifecycle } from '../types';
2
+ import AbstractChannelProtocol from '../protocol/AbstractChannelProtocol';
3
+ export declare const sendRequest: (channelProtocol: AbstractChannelProtocol) => {
4
+ (value: SenderMiddlewareOutput): SenderMiddlewareOutput;
5
+ lifecycle: SendMiddlewareLifecycle;
6
+ };