@nmtjs/protocol 0.6.4 → 0.7.0
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/client/events.js +29 -26
- package/dist/client/events.js.map +1 -1
- package/dist/client/format.js +1 -2
- package/dist/client/format.js.map +1 -1
- package/dist/client/index.js.map +1 -1
- package/dist/client/protocol.js +331 -308
- package/dist/client/protocol.js.map +1 -1
- package/dist/client/stream.js +79 -92
- package/dist/client/stream.js.map +1 -1
- package/dist/common/binary.js +20 -20
- package/dist/common/binary.js.map +1 -1
- package/dist/common/blob.js +36 -40
- package/dist/common/blob.js.map +1 -1
- package/dist/common/enums.js +44 -44
- package/dist/common/enums.js.map +1 -1
- package/dist/common/index.js.map +1 -1
- package/dist/common/types.js +1 -1
- package/dist/common/types.js.map +1 -1
- package/dist/server/api.js +1 -1
- package/dist/server/api.js.map +1 -1
- package/dist/server/connection.js +18 -18
- package/dist/server/connection.js.map +1 -1
- package/dist/server/constants.js +1 -1
- package/dist/server/constants.js.map +1 -1
- package/dist/server/format.js +42 -45
- package/dist/server/format.js.map +1 -1
- package/dist/server/index.js.map +1 -1
- package/dist/server/injectables.js +18 -18
- package/dist/server/injectables.js.map +1 -1
- package/dist/server/protocol.js +282 -296
- package/dist/server/protocol.js.map +1 -1
- package/dist/server/registry.js +2 -19
- package/dist/server/registry.js.map +1 -1
- package/dist/server/stream.js +24 -26
- package/dist/server/stream.js.map +1 -1
- package/dist/server/transport.js +6 -6
- package/dist/server/transport.js.map +1 -1
- package/dist/server/utils.js +9 -9
- package/dist/server/utils.js.map +1 -1
- package/package.json +12 -16
- package/{lib → src}/client/protocol.ts +46 -5
- package/{lib → src}/client/stream.ts +18 -26
- package/{lib → src}/server/connection.ts +1 -1
- package/{lib → src}/server/protocol.ts +19 -9
- package/src/server/registry.ts +3 -0
- package/lib/server/registry.ts +0 -24
- /package/{lib → src}/client/events.ts +0 -0
- /package/{lib → src}/client/format.ts +0 -0
- /package/{lib → src}/client/index.ts +0 -0
- /package/{lib → src}/common/binary.ts +0 -0
- /package/{lib → src}/common/blob.ts +0 -0
- /package/{lib → src}/common/enums.ts +0 -0
- /package/{lib → src}/common/index.ts +0 -0
- /package/{lib → src}/common/types.ts +0 -0
- /package/{lib → src}/server/api.ts +0 -0
- /package/{lib → src}/server/constants.ts +0 -0
- /package/{lib → src}/server/format.ts +0 -0
- /package/{lib → src}/server/index.ts +0 -0
- /package/{lib → src}/server/injectables.ts +0 -0
- /package/{lib → src}/server/stream.ts +0 -0
- /package/{lib → src}/server/transport.ts +0 -0
- /package/{lib → src}/server/utils.ts +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../lib/client/protocol.ts"],"sourcesContent":["import {\n createPromise,\n type InteractivePromise,\n onceAborted,\n} from '@nmtjs/common'\nimport { concat, decodeNumber, encodeNumber } from '../common/binary.ts'\nimport type { ProtocolBlobMetadata } from '../common/blob.ts'\nimport {\n ClientMessageType,\n ErrorCode,\n ServerMessageType,\n} from '../common/enums.ts'\nimport type { ProtocolRPC } from '../common/types.ts'\nimport { EventEmitter } from './events.ts'\nimport type { BaseClientFormat } from './format.ts'\nimport {\n ProtocolClientBlobStream,\n ProtocolServerBlobStream,\n ProtocolServerStream,\n} from './stream.ts'\n\nexport class ProtocolError extends Error {\n code: string\n data?: any\n\n constructor(code: string, message?: string, data?: any) {\n super(message)\n this.code = code\n this.data = data\n }\n\n get message() {\n return `${this.code} ${super.message}`\n }\n\n toString() {\n return `${this.code} ${this.message}`\n }\n\n toJSON() {\n return {\n code: this.code,\n message: this.message,\n data: this.data,\n }\n }\n}\n\nexport class ProtocolClientStreams {\n readonly #collection = new Map<number, ProtocolClientBlobStream>()\n\n get(streamId: number) {\n const stream = this.#collection.get(streamId)\n if (!stream) throw new Error('Stream not found')\n return stream\n }\n\n add(\n source: ReadableStream,\n streamId: number,\n metadata: ProtocolBlobMetadata,\n ) {\n const stream = new ProtocolClientBlobStream(source, streamId, metadata)\n this.#collection.set(streamId, stream)\n return stream\n }\n\n remove(streamId: number) {\n this.#collection.delete(streamId)\n }\n\n abort(streamId: number) {\n const stream = this.get(streamId)\n stream.abort()\n this.remove(streamId)\n }\n\n pull(streamId: number, size: number) {\n const stream = this.get(streamId)\n return stream.read(size)\n }\n\n end(streamId: number) {\n const stream = this.get(streamId)\n stream.end()\n this.remove(streamId)\n }\n}\n\nexport class ProtocolServerStreams {\n readonly #collection = new Map<number, ProtocolServerStream>()\n\n has(streamId: number) {\n return this.#collection.has(streamId)\n }\n\n get(streamId: number) {\n const stream = this.#collection.get(streamId)\n if (!stream) throw new Error('Stream not found')\n return stream\n }\n\n add(streamId: number, stream: ProtocolServerStream) {\n this.#collection.set(streamId, stream)\n return stream\n }\n\n remove(streamId: number) {\n this.#collection.delete(streamId)\n }\n\n abort(streamId: number) {\n if (this.has(streamId)) {\n const stream = this.get(streamId)\n stream.abort()\n this.remove(streamId)\n }\n }\n\n async push(streamId: number, chunk: ArrayBuffer) {\n const stream = this.get(streamId)\n return await stream.push(chunk)\n }\n\n end(streamId: number) {\n const stream = this.get(streamId)\n stream.end()\n this.remove(streamId)\n }\n}\n\nexport interface ProtocolTransport\n extends EventEmitter<{\n [K in `${ServerMessageType}`]: [ArrayBuffer]\n }> {\n connect(\n auth: any,\n contentType: BaseClientFormat['contentType'],\n ): Promise<void>\n disconnect(): Promise<void>\n send(messageType: ClientMessageType, buffer: ArrayBuffer): Promise<void>\n}\n\nexport class ProtocolBaseTransformer {\n encodeRPC(namespace: string, procedure: string, payload: any) {\n return payload\n }\n decodeRPC(namespace: string, procedure: string, payload: any) {\n return payload\n }\n decodeRPCChunk(namespace: string, procedure: string, payload: any) {\n return payload\n }\n decodeEvent(namespace: string, event: string, payload: any) {\n return payload\n }\n}\n\nexport type ProtocolClientCall = InteractivePromise<any> &\n Pick<ProtocolRPC, 'namespace' | 'procedure'>\n\nexport type ProtocolBaseClientOptions = {\n transport: ProtocolTransport\n format: BaseClientFormat\n transformer?: ProtocolBaseTransformer\n timeout?: number\n}\n\nexport type ProtocolBaseClientCallOptions = {\n signal?: AbortSignal\n timeout?: number\n}\n\nexport abstract class ProtocolBaseClient<\n T extends Record<string, Record<string, any>>,\n> extends EventEmitter<\n {\n [N in keyof T]: {\n [E in keyof T[N] as `${Extract<N, string>}/${Extract<E, string>}`]: [\n payload: T[N][E],\n ]\n }\n }[keyof T]\n> {\n readonly #clientStreams: ProtocolClientStreams\n readonly #serverStreams: ProtocolServerStreams\n readonly #rpcStreams: ProtocolServerStreams\n readonly #rpcStreamData = new Map<\n number,\n Pick<ProtocolRPC, 'namespace' | 'procedure'>\n >()\n readonly #calls = new Map<number, ProtocolClientCall>()\n\n readonly #transport: ProtocolTransport\n readonly #format: BaseClientFormat\n readonly transformer: ProtocolBaseTransformer = new ProtocolBaseTransformer()\n readonly #timeout: number\n\n #callId = 0\n #streamId = 0\n\n constructor(options: ProtocolBaseClientOptions) {\n super()\n\n this.#transport = options.transport\n this.#format = options.format\n this.#timeout = options.timeout ?? 60000\n\n this.#clientStreams = new ProtocolClientStreams()\n this.#serverStreams = new ProtocolServerStreams()\n this.#rpcStreams = new ProtocolServerStreams()\n\n this.#transport.on(`${ServerMessageType.Event}`, (buffer) => {\n const [namespace, event, payload] = this.#format.decode(buffer)\n const name = `${namespace}/${event}`\n const transformed = this.transformer.decodeEvent(\n namespace,\n event,\n payload,\n )\n this.emit(name, transformed)\n })\n\n this.#transport.on(`${ServerMessageType.RpcResponse}`, (buffer) => {\n const { call, error, payload } = this.#handleResponse(buffer)\n if (error) call.reject(error)\n else call.resolve(payload)\n })\n\n this.#transport.on(`${ServerMessageType.RpcStreamResponse}`, (buffer) => {\n const { call, response, payload, error } = this.#handleResponse(buffer)\n if (error) return call.reject(error)\n console.log('Creating RPC stream', response)\n const stream = new ProtocolServerStream()\n this.#rpcStreams.add(response.callId, stream)\n this.#rpcStreamData.set(response.callId, {\n namespace: call.namespace,\n procedure: call.procedure,\n })\n call.resolve({ payload, stream })\n })\n\n this.#transport.on(\n `${ServerMessageType.RpcStreamChunk}`,\n async (buffer) => {\n const callId = decodeNumber(buffer, 'Uint32')\n console.log('RPC stream chunk', callId)\n\n const chunk = buffer.slice(Uint32Array.BYTES_PER_ELEMENT)\n if (chunk.byteLength === 0) {\n this.#rpcStreams.end(callId)\n this.#rpcStreamData.delete(callId)\n } else {\n const call = this.#rpcStreamData.get(callId)\n console.log('RPC stream call', call)\n if (call) {\n const payload = this.#format.decode(chunk)\n console.log('RPC stream payload', payload)\n try {\n const transformed = this.transformer.decodeRPCChunk(\n call.namespace,\n call.procedure,\n payload,\n )\n await this.#rpcStreams.push(callId, transformed)\n } catch (error) {\n this.#send(\n ClientMessageType.RpcStreamAbort,\n encodeNumber(callId, 'Uint32'),\n )\n this.#rpcStreams.remove(callId)\n this.#rpcStreamData.delete(callId)\n }\n }\n }\n },\n )\n\n this.#transport.on(`${ServerMessageType.RpcStreamAbort}`, (buffer) => {\n const callId = decodeNumber(buffer, 'Uint32')\n console.log('RPC stream abort', callId)\n const call = this.#calls.get(callId)\n if (call) {\n this.#serverStreams.end(callId)\n this.#rpcStreams.abort(callId)\n }\n })\n\n this.#transport.on(\n `${ServerMessageType.ServerStreamPush}`,\n async (buffer) => {\n const streamId = decodeNumber(buffer, 'Uint32')\n const chunk = buffer.slice(Uint32Array.BYTES_PER_ELEMENT)\n console.log('Server stream push', streamId, chunk.byteLength)\n try {\n await this.#serverStreams.push(streamId, chunk)\n this.#send(\n ClientMessageType.ServerStreamPull,\n encodeNumber(streamId, 'Uint32'),\n )\n } catch (error) {\n this.#send(\n ClientMessageType.ServerStreamAbort,\n encodeNumber(streamId, 'Uint32'),\n )\n this.#serverStreams.remove(streamId)\n }\n },\n )\n\n this.#transport.on(`${ServerMessageType.ServerStreamEnd}`, (buffer) => {\n const streamId = decodeNumber(buffer, 'Uint32')\n console.log('Server stream end', streamId)\n this.#serverStreams.end(streamId)\n })\n\n this.#transport.on(`${ServerMessageType.ServerStreamAbort}`, (buffer) => {\n const streamId = decodeNumber(buffer, 'Uint32')\n console.log('Server stream abort', streamId)\n this.#serverStreams.abort(streamId)\n })\n\n this.#transport.on(`${ServerMessageType.ClientStreamAbort}`, (buffer) => {\n const streamId = decodeNumber(buffer, 'Uint32')\n console.log('Client stream abort', streamId)\n this.#clientStreams.abort(streamId)\n })\n\n this.#transport.on(\n `${ServerMessageType.ClientStreamPull}`,\n async (buffer) => {\n const streamId = decodeNumber(buffer, 'Uint32')\n console.log('Client stream pull', streamId)\n const size = decodeNumber(\n buffer,\n 'Uint32',\n Uint32Array.BYTES_PER_ELEMENT,\n )\n const streamIdEncoded = encodeNumber(streamId, 'Uint32')\n try {\n const chunk = await this.#clientStreams.pull(streamId, size)\n if (chunk) {\n this.#send(\n ClientMessageType.ClientStreamPush,\n concat(streamIdEncoded, chunk),\n )\n } else {\n this.#send(ClientMessageType.ClientStreamEnd, streamIdEncoded)\n this.#clientStreams.end(streamId)\n }\n } catch (error) {\n console.error(error)\n this.#send(ClientMessageType.ClientStreamAbort, streamIdEncoded)\n }\n },\n )\n }\n\n async connect(auth: any) {\n return await this.#transport.connect(auth, this.#format.contentType)\n }\n\n async disconnect() {\n return await this.#transport.disconnect()\n }\n\n async #send(messageType: ClientMessageType, buffer: ArrayBuffer) {\n console.log(\n 'Client transport send',\n ClientMessageType[messageType],\n buffer.byteLength,\n )\n return await this.#transport.send(messageType, buffer)\n }\n\n protected async _call(\n namespace: string,\n procedure: string,\n payload: any,\n options: ProtocolBaseClientCallOptions = {},\n ) {\n const timeoutSignal = AbortSignal.timeout(options.timeout || this.#timeout)\n const signal = options.signal\n ? AbortSignal.any([options.signal, timeoutSignal])\n : timeoutSignal\n\n const callId = ++this.#callId\n const call = Object.assign(createPromise(), {\n namespace,\n procedure,\n })\n const buffer = this.#format.encodeRPC(\n {\n callId,\n namespace,\n procedure,\n payload: this.transformer.encodeRPC(namespace, procedure, payload),\n },\n {\n addStream: (blob) => {\n const streamId = ++this.#streamId\n const stream = this.#clientStreams.add(\n blob.source,\n streamId,\n blob.metadata,\n )\n return stream\n },\n getStream: (id) => {\n const stream = this.#clientStreams.get(id)\n return stream\n },\n },\n )\n\n this.#transport.send(ClientMessageType.Rpc, buffer).catch(console.error)\n\n this.#calls.set(callId, call)\n\n const onAborted = onceAborted(signal).then(() => {\n if (this.#calls.has(callId)) {\n this.#send(ClientMessageType.RpcAbort, encodeNumber(callId, 'Uint32'))\n }\n throw new ProtocolError(ErrorCode.RequestTimeout, 'Request timeout')\n })\n\n return Promise.race([call.promise, onAborted])\n }\n\n #handleResponse(buffer: ArrayBuffer) {\n const callStreams: ProtocolServerBlobStream[] = []\n const response = this.#format.decodeRPC(buffer, {\n addStream: (id, metadata) => {\n console.log('Client transport blob stream', id, metadata)\n const stream = new ProtocolServerBlobStream(id, metadata, () => {\n this.#send(\n ClientMessageType.ServerStreamPull,\n encodeNumber(id, 'Uint32'),\n )\n })\n callStreams.push(stream)\n this.#serverStreams.add(id, stream)\n return stream\n },\n getStream: (id) => {\n return this.#serverStreams.get(id)\n },\n })\n\n console.log('Client transport response', response)\n\n const call = this.#calls.get(response.callId)\n\n if (call) {\n this.#calls.delete(response.callId)\n\n if (response.error) {\n const error = new ProtocolError(\n response.error.code,\n response.error.message,\n response.error.data,\n )\n return { call, response, error }\n } else {\n const payload = this.transformer.decodeRPC(\n call.namespace,\n call.procedure,\n response.payload,\n )\n return { call, response, payload }\n }\n }\n\n for (const stream of callStreams) {\n this.#serverStreams.abort(stream.id)\n }\n\n throw new Error('Call not found')\n }\n}\n"],"names":["createPromise","onceAborted","concat","decodeNumber","encodeNumber","ClientMessageType","ErrorCode","ServerMessageType","EventEmitter","ProtocolClientBlobStream","ProtocolServerBlobStream","ProtocolServerStream","ProtocolError","Error","code","data","constructor","message","toString","toJSON","ProtocolClientStreams","Map","get","streamId","stream","add","source","metadata","set","remove","delete","abort","pull","size","read","end","ProtocolServerStreams","has","push","chunk","ProtocolBaseTransformer","encodeRPC","namespace","procedure","payload","decodeRPC","decodeRPCChunk","decodeEvent","event","ProtocolBaseClient","transformer","options","transport","format","timeout","on","Event","buffer","decode","name","transformed","emit","RpcResponse","call","error","reject","resolve","RpcStreamResponse","response","console","log","callId","RpcStreamChunk","slice","Uint32Array","BYTES_PER_ELEMENT","byteLength","RpcStreamAbort","ServerStreamPush","ServerStreamPull","ServerStreamAbort","ServerStreamEnd","ClientStreamAbort","ClientStreamPull","streamIdEncoded","ClientStreamPush","ClientStreamEnd","connect","auth","contentType","disconnect","messageType","send","_call","timeoutSignal","AbortSignal","signal","any","Object","assign","addStream","blob","getStream","id","Rpc","catch","onAborted","then","RpcAbort","RequestTimeout","Promise","race","promise","callStreams"],"mappings":"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"}
|
|
1
|
+
{"mappings":"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","names":["code: string","message?: string","data?: any","#collection","streamId: number","source: ReadableStream","metadata: ProtocolBlobMetadata","size: number","error?: Error","stream: ProtocolServerStream","chunk: ArrayBuffer","namespace: string","procedure: string","payload: any","event: string","#clientStreams","#serverStreams","#rpcStreams","#rpcStreamData","#calls","#transport","#format","#timeout","options: ProtocolBaseClientOptions","#handleResponse","#send","#clear","auth: any","messageType: ClientMessageType","buffer: ArrayBuffer","#callId","#streamId","options: ProtocolBaseClientCallOptions","callStreams: ProtocolServerBlobStream[]"],"sources":["src/client/protocol.ts"],"sourcesContent":["import {\n createPromise,\n type InteractivePromise,\n onceAborted,\n} from '@nmtjs/common'\nimport { concat, decodeNumber, encodeNumber } from '../common/binary.ts'\nimport type { ProtocolBlobMetadata } from '../common/blob.ts'\nimport {\n ClientMessageType,\n ErrorCode,\n ServerMessageType,\n} from '../common/enums.ts'\nimport type { ProtocolRPC } from '../common/types.ts'\nimport { EventEmitter } from './events.ts'\nimport type { BaseClientFormat } from './format.ts'\nimport {\n ProtocolClientBlobStream,\n ProtocolServerBlobStream,\n ProtocolServerStream,\n} from './stream.ts'\n\nexport class ProtocolError extends Error {\n code: string\n data?: any\n\n constructor(code: string, message?: string, data?: any) {\n super(message)\n this.code = code\n this.data = data\n }\n\n get message() {\n return `${this.code} ${super.message}`\n }\n\n toString() {\n return `${this.code} ${this.message}`\n }\n\n toJSON() {\n return {\n code: this.code,\n message: this.message,\n data: this.data,\n }\n }\n}\n\nexport class ProtocolClientStreams {\n readonly #collection = new Map<number, ProtocolClientBlobStream>()\n\n get(streamId: number) {\n const stream = this.#collection.get(streamId)\n if (!stream) throw new Error('Stream not found')\n return stream\n }\n\n add(\n source: ReadableStream,\n streamId: number,\n metadata: ProtocolBlobMetadata,\n ) {\n const stream = new ProtocolClientBlobStream(source, streamId, metadata)\n this.#collection.set(streamId, stream)\n return stream\n }\n\n remove(streamId: number) {\n this.#collection.delete(streamId)\n }\n\n abort(streamId: number) {\n const stream = this.get(streamId)\n stream.abort()\n this.remove(streamId)\n }\n\n pull(streamId: number, size: number) {\n const stream = this.get(streamId)\n return stream.read(size)\n }\n\n end(streamId: number) {\n this.get(streamId).end()\n this.remove(streamId)\n }\n\n clear(error?: Error) {\n if (error) {\n for (const stream of this.#collection.values()) {\n stream.abort(error)\n }\n }\n this.#collection.clear()\n }\n}\n\nexport class ProtocolServerStreams {\n readonly #collection = new Map<number, ProtocolServerStream>()\n\n has(streamId: number) {\n return this.#collection.has(streamId)\n }\n\n get(streamId: number) {\n const stream = this.#collection.get(streamId)\n if (!stream) throw new Error('Stream not found')\n return stream\n }\n\n add(streamId: number, stream: ProtocolServerStream) {\n this.#collection.set(streamId, stream)\n return stream\n }\n\n remove(streamId: number) {\n this.#collection.delete(streamId)\n }\n\n abort(streamId: number) {\n if (this.has(streamId)) {\n const stream = this.get(streamId)\n stream.abort()\n this.remove(streamId)\n }\n }\n\n async push(streamId: number, chunk: ArrayBuffer) {\n const stream = this.get(streamId)\n return await stream.push(chunk)\n }\n\n end(streamId: number) {\n const stream = this.get(streamId)\n stream.end()\n this.remove(streamId)\n }\n\n clear(error?: Error) {\n if (error) {\n for (const stream of this.#collection.values()) {\n stream.abort(error)\n }\n }\n this.#collection.clear()\n }\n}\n\nexport interface ProtocolTransport\n extends EventEmitter<\n {\n [K in `${ServerMessageType}`]: [ArrayBuffer]\n } & {\n connected: []\n disconnected: []\n }\n > {\n connect(\n auth: any,\n contentType: BaseClientFormat['contentType'],\n ): Promise<void>\n disconnect(): Promise<void>\n send(messageType: ClientMessageType, buffer: ArrayBuffer): Promise<void>\n}\n\nexport class ProtocolBaseTransformer {\n encodeRPC(namespace: string, procedure: string, payload: any) {\n return payload\n }\n decodeRPC(namespace: string, procedure: string, payload: any) {\n return payload\n }\n decodeRPCChunk(namespace: string, procedure: string, payload: any) {\n return payload\n }\n decodeEvent(namespace: string, event: string, payload: any) {\n return payload\n }\n}\n\nexport type ProtocolClientCall = InteractivePromise<any> &\n Pick<ProtocolRPC, 'namespace' | 'procedure'>\n\nexport type ProtocolBaseClientOptions = {\n transport: ProtocolTransport\n format: BaseClientFormat\n transformer?: ProtocolBaseTransformer\n timeout?: number\n}\n\nexport type ProtocolBaseClientCallOptions = {\n signal?: AbortSignal\n timeout?: number\n}\n\nexport abstract class ProtocolBaseClient<\n T extends Record<string, Record<string, any>>,\n> extends EventEmitter<\n {\n [N in keyof T]: {\n [E in keyof T[N] as `${Extract<N, string>}/${Extract<E, string>}`]: [\n payload: T[N][E],\n ]\n }\n }[keyof T]\n> {\n readonly #clientStreams: ProtocolClientStreams\n readonly #serverStreams: ProtocolServerStreams\n readonly #rpcStreams: ProtocolServerStreams\n readonly #rpcStreamData = new Map<\n number,\n Pick<ProtocolRPC, 'namespace' | 'procedure'>\n >()\n readonly #calls = new Map<number, ProtocolClientCall>()\n\n readonly #transport: ProtocolTransport\n readonly #format: BaseClientFormat\n readonly transformer: ProtocolBaseTransformer = new ProtocolBaseTransformer()\n readonly #timeout: number\n\n #callId = 0\n #streamId = 0\n\n constructor(options: ProtocolBaseClientOptions) {\n super()\n\n this.#transport = options.transport\n this.#format = options.format\n this.#timeout = options.timeout ?? 60000\n\n this.#clientStreams = new ProtocolClientStreams()\n this.#serverStreams = new ProtocolServerStreams()\n this.#rpcStreams = new ProtocolServerStreams()\n\n this.#transport.on(`${ServerMessageType.Event}`, (buffer) => {\n const [namespace, event, payload] = this.#format.decode(buffer)\n const name = `${namespace}/${event}`\n const transformed = this.transformer.decodeEvent(\n namespace,\n event,\n payload,\n )\n this.emit(name, transformed)\n })\n\n this.#transport.on(`${ServerMessageType.RpcResponse}`, (buffer) => {\n const { call, error, payload } = this.#handleResponse(buffer)\n if (error) call.reject(error)\n else call.resolve(payload)\n })\n\n this.#transport.on(`${ServerMessageType.RpcStreamResponse}`, (buffer) => {\n const { call, response, payload, error } = this.#handleResponse(buffer)\n if (error) return call.reject(error)\n console.log('Creating RPC stream', response)\n const stream = new ProtocolServerStream()\n this.#rpcStreams.add(response.callId, stream)\n this.#rpcStreamData.set(response.callId, {\n namespace: call.namespace,\n procedure: call.procedure,\n })\n call.resolve({ payload, stream })\n })\n\n this.#transport.on(\n `${ServerMessageType.RpcStreamChunk}`,\n async (buffer) => {\n const callId = decodeNumber(buffer, 'Uint32')\n console.log('RPC stream chunk', callId)\n\n const chunk = buffer.slice(Uint32Array.BYTES_PER_ELEMENT)\n if (chunk.byteLength === 0) {\n this.#rpcStreams.end(callId)\n this.#rpcStreamData.delete(callId)\n } else {\n const call = this.#rpcStreamData.get(callId)\n console.log('RPC stream call', call)\n if (call) {\n const payload = this.#format.decode(chunk)\n console.log('RPC stream payload', payload)\n try {\n const transformed = this.transformer.decodeRPCChunk(\n call.namespace,\n call.procedure,\n payload,\n )\n await this.#rpcStreams.push(callId, transformed)\n } catch (error) {\n this.#send(\n ClientMessageType.RpcStreamAbort,\n encodeNumber(callId, 'Uint32'),\n )\n this.#rpcStreams.remove(callId)\n this.#rpcStreamData.delete(callId)\n }\n }\n }\n },\n )\n\n this.#transport.on(`${ServerMessageType.RpcStreamAbort}`, (buffer) => {\n const callId = decodeNumber(buffer, 'Uint32')\n console.log('RPC stream abort', callId)\n const call = this.#calls.get(callId)\n if (call) {\n this.#serverStreams.end(callId)\n this.#rpcStreams.abort(callId)\n }\n })\n\n this.#transport.on(\n `${ServerMessageType.ServerStreamPush}`,\n async (buffer) => {\n const streamId = decodeNumber(buffer, 'Uint32')\n const chunk = buffer.slice(Uint32Array.BYTES_PER_ELEMENT)\n console.log('Server stream push', streamId, chunk.byteLength)\n try {\n await this.#serverStreams.push(streamId, chunk)\n this.#send(\n ClientMessageType.ServerStreamPull,\n encodeNumber(streamId, 'Uint32'),\n )\n } catch (error) {\n this.#send(\n ClientMessageType.ServerStreamAbort,\n encodeNumber(streamId, 'Uint32'),\n )\n this.#serverStreams.remove(streamId)\n }\n },\n )\n\n this.#transport.on(`${ServerMessageType.ServerStreamEnd}`, (buffer) => {\n const streamId = decodeNumber(buffer, 'Uint32')\n console.log('Server stream end', streamId)\n this.#serverStreams.end(streamId)\n })\n\n this.#transport.on(`${ServerMessageType.ServerStreamAbort}`, (buffer) => {\n const streamId = decodeNumber(buffer, 'Uint32')\n console.log('Server stream abort', streamId)\n this.#serverStreams.abort(streamId)\n })\n\n this.#transport.on(`${ServerMessageType.ClientStreamAbort}`, (buffer) => {\n const streamId = decodeNumber(buffer, 'Uint32')\n console.log('Client stream abort', streamId)\n this.#clientStreams.abort(streamId)\n })\n\n this.#transport.on(\n `${ServerMessageType.ClientStreamPull}`,\n async (buffer) => {\n const streamId = decodeNumber(buffer, 'Uint32')\n console.log('Client stream pull', streamId)\n const size = decodeNumber(\n buffer,\n 'Uint32',\n Uint32Array.BYTES_PER_ELEMENT,\n )\n const streamIdEncoded = encodeNumber(streamId, 'Uint32')\n try {\n const chunk = await this.#clientStreams.pull(streamId, size)\n if (chunk) {\n this.#send(\n ClientMessageType.ClientStreamPush,\n concat(streamIdEncoded, chunk),\n )\n } else {\n this.#send(ClientMessageType.ClientStreamEnd, streamIdEncoded)\n this.#clientStreams.end(streamId)\n }\n } catch (error) {\n console.error(error)\n this.#send(ClientMessageType.ClientStreamAbort, streamIdEncoded)\n }\n },\n )\n\n this.#transport.on('disconnected', () => {\n this.#clear()\n })\n }\n\n async connect(auth: any) {\n return await this.#transport.connect(auth, this.#format.contentType)\n }\n\n async disconnect() {\n this.#clear()\n return await this.#transport.disconnect()\n }\n\n async #send(messageType: ClientMessageType, buffer: ArrayBuffer) {\n console.log(\n 'Client transport send',\n ClientMessageType[messageType],\n buffer.byteLength,\n )\n return await this.#transport.send(messageType, buffer)\n }\n\n async #clear() {\n const error = new ProtocolError(\n ErrorCode.ConnectionError,\n 'Connection closed',\n )\n for (const call of this.#calls.values()) call.reject(error)\n this.#calls.clear()\n this.#serverStreams.clear(error)\n this.#clientStreams.clear(error)\n this.#rpcStreams.clear(error)\n this.#callId = 0\n this.#streamId = 0\n }\n\n protected async _call(\n namespace: string,\n procedure: string,\n payload: any,\n options: ProtocolBaseClientCallOptions = {},\n ) {\n const timeoutSignal = AbortSignal.timeout(options.timeout || this.#timeout)\n const signal = options.signal\n ? AbortSignal.any([options.signal, timeoutSignal])\n : timeoutSignal\n\n const callId = ++this.#callId\n const call = Object.assign(createPromise(), {\n namespace,\n procedure,\n })\n const buffer = this.#format.encodeRPC(\n {\n callId,\n namespace,\n procedure,\n payload: this.transformer.encodeRPC(namespace, procedure, payload),\n },\n {\n addStream: (blob) => {\n const streamId = ++this.#streamId\n const stream = this.#clientStreams.add(\n blob.source,\n streamId,\n blob.metadata,\n )\n return stream\n },\n getStream: (id) => {\n const stream = this.#clientStreams.get(id)\n return stream\n },\n },\n )\n\n this.#transport.send(ClientMessageType.Rpc, buffer).catch(console.error)\n\n this.#calls.set(callId, call)\n\n const onAborted = onceAborted(signal).then(() => {\n if (this.#calls.has(callId)) {\n this.#send(ClientMessageType.RpcAbort, encodeNumber(callId, 'Uint32'))\n }\n throw new ProtocolError(ErrorCode.RequestTimeout, 'Request timeout')\n })\n\n return Promise.race([call.promise, onAborted])\n }\n\n #handleResponse(buffer: ArrayBuffer) {\n const callStreams: ProtocolServerBlobStream[] = []\n const response = this.#format.decodeRPC(buffer, {\n addStream: (id, metadata) => {\n console.log('Client transport blob stream', id, metadata)\n const stream = new ProtocolServerBlobStream(id, metadata, () => {\n this.#send(\n ClientMessageType.ServerStreamPull,\n encodeNumber(id, 'Uint32'),\n )\n })\n callStreams.push(stream)\n this.#serverStreams.add(id, stream)\n return stream\n },\n getStream: (id) => {\n return this.#serverStreams.get(id)\n },\n })\n\n console.log('Client transport response', response)\n\n const call = this.#calls.get(response.callId)\n\n if (call) {\n this.#calls.delete(response.callId)\n\n if (response.error) {\n const error = new ProtocolError(\n response.error.code,\n response.error.message,\n response.error.data,\n )\n return { call, response, error }\n } else {\n const payload = this.transformer.decodeRPC(\n call.namespace,\n call.procedure,\n response.payload,\n )\n return { call, response, payload }\n }\n }\n\n for (const stream of callStreams) {\n this.#serverStreams.abort(stream.id)\n }\n\n throw new Error('Call not found')\n }\n}\n"],"version":3}
|
package/dist/client/stream.js
CHANGED
|
@@ -1,98 +1,85 @@
|
|
|
1
|
-
import { defer } from
|
|
2
|
-
import { encodeText } from "../common/binary.js";
|
|
1
|
+
import { defer } from "@nmtjs/common";
|
|
2
|
+
import { concat, encodeText } from "../common/binary.js";
|
|
3
3
|
export class ProtocolClientBlobStream extends TransformStream {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
if (!this.writable.locked) await this.writable.close();
|
|
55
|
-
else await this.writable.abort(new Error('Stream closed'));
|
|
56
|
-
}
|
|
4
|
+
#queue;
|
|
5
|
+
#reader;
|
|
6
|
+
constructor(source, id, metadata) {
|
|
7
|
+
super({
|
|
8
|
+
start: () => {
|
|
9
|
+
defer(() => source.pipeThrough(this));
|
|
10
|
+
},
|
|
11
|
+
transform: (chunk, controller) => {
|
|
12
|
+
if (chunk instanceof ArrayBuffer) {
|
|
13
|
+
controller.enqueue(chunk);
|
|
14
|
+
} else if (chunk instanceof Uint8Array) {
|
|
15
|
+
controller.enqueue(chunk.buffer);
|
|
16
|
+
} else if (typeof chunk === "string") {
|
|
17
|
+
controller.enqueue(encodeText(chunk));
|
|
18
|
+
} else {
|
|
19
|
+
throw new Error("Invalid chunk data type. Expected ArrayBuffer, Uint8Array, or string.");
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
this.source = source;
|
|
24
|
+
this.id = id;
|
|
25
|
+
this.metadata = metadata;
|
|
26
|
+
this.#queue = new ArrayBuffer(0);
|
|
27
|
+
this.#reader = this.readable.getReader();
|
|
28
|
+
}
|
|
29
|
+
async read(size) {
|
|
30
|
+
while (this.#queue.byteLength < size) {
|
|
31
|
+
const { done, value } = await this.#reader.read();
|
|
32
|
+
if (done) {
|
|
33
|
+
if (this.#queue.byteLength > 0) {
|
|
34
|
+
const chunk = this.#queue;
|
|
35
|
+
this.#queue = new ArrayBuffer(0);
|
|
36
|
+
return chunk;
|
|
37
|
+
}
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
const buffer = value;
|
|
41
|
+
this.#queue = concat(this.#queue, buffer);
|
|
42
|
+
}
|
|
43
|
+
const chunk = this.#queue.slice(0, size);
|
|
44
|
+
this.#queue = this.#queue.slice(size);
|
|
45
|
+
return chunk;
|
|
46
|
+
}
|
|
47
|
+
abort(error = new Error("Stream aborted")) {
|
|
48
|
+
this.#reader.cancel(error);
|
|
49
|
+
this.source.cancel(error);
|
|
50
|
+
}
|
|
51
|
+
end() {
|
|
52
|
+
return this.source.cancel("Stream ended");
|
|
53
|
+
}
|
|
57
54
|
}
|
|
58
55
|
export class ProtocolServerStream extends TransformStream {
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
this.#writer.abort(error);
|
|
82
|
-
}
|
|
56
|
+
#writer;
|
|
57
|
+
constructor(start) {
|
|
58
|
+
super({ start });
|
|
59
|
+
this.#writer = this.writable.getWriter();
|
|
60
|
+
}
|
|
61
|
+
async *[Symbol.asyncIterator]() {
|
|
62
|
+
const reader = this.readable.getReader();
|
|
63
|
+
while (true) {
|
|
64
|
+
const { done, value } = await reader.read();
|
|
65
|
+
if (!done) yield value;
|
|
66
|
+
else return void 0;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
async push(chunk) {
|
|
70
|
+
await this.#writer.write(chunk);
|
|
71
|
+
}
|
|
72
|
+
async end() {
|
|
73
|
+
await this.#writer.close();
|
|
74
|
+
}
|
|
75
|
+
abort(error = new Error("Stream aborted")) {
|
|
76
|
+
this.#writer.abort(error);
|
|
77
|
+
}
|
|
83
78
|
}
|
|
84
79
|
export class ProtocolServerBlobStream extends ProtocolServerStream {
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
this.metadata = metadata;
|
|
91
|
-
}
|
|
92
|
-
push(chunk) {
|
|
93
|
-
return super.push(chunk);
|
|
94
|
-
}
|
|
95
|
-
end() {
|
|
96
|
-
return super.end();
|
|
97
|
-
}
|
|
80
|
+
constructor(id, metadata, start) {
|
|
81
|
+
super(start);
|
|
82
|
+
this.id = id;
|
|
83
|
+
this.metadata = metadata;
|
|
84
|
+
}
|
|
98
85
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"
|
|
1
|
+
{"mappings":"AAAA,SAAwB,aAAa,eAAe;AACpD,SAAS,QAAQ,kBAAkB,qBAAqB;AAGxD,OAAO,MAAM,iCAAiC,gBAG5C;CACA;CACA;CAEA,YACWA,QACAC,IACAC,UACT;AACA,QAAM;GACJ,OAAO,MAAM;AACX,UAAM,MAAM,OAAO,YAAY,KAAK,CAAC;GACtC;GACD,WAAW,CAAC,OAAO,eAAe;AAChC,QAAI,iBAAiB,aAAa;AAChC,gBAAW,QAAQ,MAAM;IAC1B,WAAU,iBAAiB,YAAY;AACtC,gBAAW,QAAQ,MAAM,OAAiC;IAC3D,kBAAiB,UAAU,UAAU;AACpC,gBAAW,QAAQ,WAAW,MAAM,CAAC;IACtC,OAAM;AACL,WAAM,IAAI,MACR;IAEH;GACF;EACF,EAAC;OArBO;OACA;OACA;AAqBT,OAAKC,SAAS,IAAI,YAAY;AAC9B,OAAKC,UAAU,KAAK,SAAS,WAAW;CACzC;CAED,MAAM,KAAKC,MAAc;AACvB,SAAO,KAAKF,OAAO,aAAa,MAAM;GACpC,MAAM,EAAE,MAAM,OAAO,GAAG,MAAM,KAAKC,QAAQ,MAAM;AACjD,OAAI,MAAM;AACR,QAAI,KAAKD,OAAO,aAAa,GAAG;KAC9B,MAAM,QAAQ,KAAKA;AACnB,UAAKA,SAAS,IAAI,YAAY;AAC9B,YAAO;IACR;AACD,WAAO;GACR;GACD,MAAM,SAAS;AACf,QAAKA,SAAS,OAAO,KAAKA,QAAQ,OAAO;EAC1C;EACD,MAAM,QAAQ,KAAKA,OAAO,MAAM,GAAG,KAAK;AACxC,OAAKA,SAAS,KAAKA,OAAO,MAAM,KAAK;AACrC,SAAO;CACR;CAED,MAAM,QAAQ,IAAI,MAAM,mBAAmB;AACzC,OAAKC,QAAQ,OAAO,MAAM;AAC1B,OAAK,OAAO,OAAO,MAAM;CAC1B;CAED,MAAM;AACJ,SAAO,KAAK,OAAO,OAAO,eAAe;CAC1C;AACF;AAOD,OAAO,MAAM,6BACH,gBAEV;CACE;CAEA,YAAYE,OAAkB;AAC5B,QAAM,EAAE,MAAO,EAAC;AAChB,OAAKC,UAAU,KAAK,SAAS,WAAW;CACzC;CAED,QAAQ,OAAO,iBAAiB;EAC9B,MAAM,SAAS,KAAK,SAAS,WAAW;AACxC,SAAO,MAAM;GACX,MAAM,EAAE,MAAM,OAAO,GAAG,MAAM,OAAO,MAAM;AAC3C,QAAK,KAAM,OAAM;OACZ,aAAY;EAClB;CACF;CAED,MAAM,KAAKC,OAAU;AACnB,QAAM,KAAKD,QAAQ,MAAM,MAAM;CAChC;CAED,MAAM,MAAM;AACV,QAAM,KAAKA,QAAQ,OAAO;CAC3B;CAED,MAAM,QAAQ,IAAI,MAAM,mBAAmB;AACzC,OAAKA,QAAQ,MAAM,MAAM;CAC1B;AACF;AAED,OAAO,MAAM,iCAAiC,qBAAkC;CAC9E,YACWN,IACAC,UACTO,OACA;AACA,QAAM,MAAM;OAJH;OACA;CAIV;AACF","names":["source: ReadableStream","id: number","metadata: ProtocolBlobMetadata","#queue","#reader","size: number","start?: Callback","#writer","chunk: T","start: Callback"],"sources":["src/client/stream.ts"],"sourcesContent":["import { type Callback, defer } from '@nmtjs/common'\nimport { concat, encodeText } from '../common/binary.ts'\nimport type { ProtocolBlobMetadata } from '../common/blob.ts'\n\nexport class ProtocolClientBlobStream extends TransformStream<\n any,\n ArrayBuffer\n> {\n #queue: ArrayBuffer\n #reader: ReadableStreamDefaultReader\n\n constructor(\n readonly source: ReadableStream,\n readonly id: number,\n readonly metadata: ProtocolBlobMetadata,\n ) {\n super({\n start: () => {\n defer(() => source.pipeThrough(this))\n },\n transform: (chunk, controller) => {\n if (chunk instanceof ArrayBuffer) {\n controller.enqueue(chunk)\n } else if (chunk instanceof Uint8Array) {\n controller.enqueue(chunk.buffer as unknown as ArrayBuffer)\n } else if (typeof chunk === 'string') {\n controller.enqueue(encodeText(chunk))\n } else {\n throw new Error(\n 'Invalid chunk data type. Expected ArrayBuffer, Uint8Array, or string.',\n )\n }\n },\n })\n\n this.#queue = new ArrayBuffer(0)\n this.#reader = this.readable.getReader()\n }\n\n async read(size: number) {\n while (this.#queue.byteLength < size) {\n const { done, value } = await this.#reader.read()\n if (done) {\n if (this.#queue.byteLength > 0) {\n const chunk = this.#queue\n this.#queue = new ArrayBuffer(0)\n return chunk\n }\n return null\n }\n const buffer = value as ArrayBuffer\n this.#queue = concat(this.#queue, buffer)\n }\n const chunk = this.#queue.slice(0, size)\n this.#queue = this.#queue.slice(size)\n return chunk\n }\n\n abort(error = new Error('Stream aborted')) {\n this.#reader.cancel(error)\n this.source.cancel(error)\n }\n\n end() {\n return this.source.cancel('Stream ended')\n }\n}\n\nexport interface ProtocolServerStreamInterface<T = any> {\n [Symbol.asyncIterator](): AsyncGenerator<T>\n abort(error?: Error): void\n}\n\nexport class ProtocolServerStream<T = any>\n extends TransformStream<any, T>\n implements ProtocolServerStreamInterface<T>\n{\n #writer: WritableStreamDefaultWriter\n\n constructor(start?: Callback) {\n super({ start })\n this.#writer = this.writable.getWriter()\n }\n\n async *[Symbol.asyncIterator]() {\n const reader = this.readable.getReader()\n while (true) {\n const { done, value } = await reader.read()\n if (!done) yield value\n else return void 0\n }\n }\n\n async push(chunk: T) {\n await this.#writer.write(chunk)\n }\n\n async end() {\n await this.#writer.close()\n }\n\n abort(error = new Error('Stream aborted')) {\n this.#writer.abort(error)\n }\n}\n\nexport class ProtocolServerBlobStream extends ProtocolServerStream<ArrayBuffer> {\n constructor(\n readonly id: number,\n readonly metadata: ProtocolBlobMetadata,\n start: Callback,\n ) {\n super(start)\n }\n}\n"],"version":3}
|
package/dist/common/binary.js
CHANGED
|
@@ -1,25 +1,25 @@
|
|
|
1
1
|
const utf8decoder = new TextDecoder();
|
|
2
2
|
const utf8encoder = new TextEncoder();
|
|
3
|
-
export const encodeNumber = (value, type, littleEndian = false)=>{
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
3
|
+
export const encodeNumber = (value, type, littleEndian = false) => {
|
|
4
|
+
const bytesNeeded = globalThis[`${type}Array`].BYTES_PER_ELEMENT;
|
|
5
|
+
const ab = new ArrayBuffer(bytesNeeded);
|
|
6
|
+
const dv = new DataView(ab);
|
|
7
|
+
dv[`set${type}`](0, value, littleEndian);
|
|
8
|
+
return ab;
|
|
9
9
|
};
|
|
10
|
-
export const decodeNumber = (buffer, type, offset = 0, littleEndian = false)=>{
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
export const decodeNumber = (buffer, type, offset = 0, littleEndian = false) => {
|
|
11
|
+
const view = new DataView(buffer);
|
|
12
|
+
return view[`get${type}`](offset, littleEndian);
|
|
13
13
|
};
|
|
14
|
-
export const encodeText = (text)=>new Uint8Array(utf8encoder.encode(text)).buffer;
|
|
15
|
-
export const decodeText = (buffer)=>utf8decoder.decode(buffer);
|
|
16
|
-
export const concat = (...buffers)=>{
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
14
|
+
export const encodeText = (text) => new Uint8Array(utf8encoder.encode(text)).buffer;
|
|
15
|
+
export const decodeText = (buffer) => utf8decoder.decode(buffer);
|
|
16
|
+
export const concat = (...buffers) => {
|
|
17
|
+
const totalLength = buffers.reduce((acc, buffer) => acc + buffer.byteLength, 0);
|
|
18
|
+
const view = new Uint8Array(totalLength);
|
|
19
|
+
let offset = 0;
|
|
20
|
+
for (const buffer of buffers) {
|
|
21
|
+
view.set(new Uint8Array(buffer), offset);
|
|
22
|
+
offset += buffer.byteLength;
|
|
23
|
+
}
|
|
24
|
+
return view.buffer;
|
|
25
25
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"
|
|
1
|
+
{"mappings":"AAGA,MAAM,cAAc,IAAI;AACxB,MAAM,cAAc,IAAI;AAexB,OAAO,MAAM,eAAe,CAC1BA,OACAC,MACA,eAAe,UACZ;CACH,MAAM,cAAc,YAAY,EAAE,KAAK,QAAQ;CAC/C,MAAM,KAAK,IAAI,YAAY;CAC3B,MAAM,KAAK,IAAI,SAAS;AACxB,KAAI,KAAK,KAAK,GAAG,GAAG,OAAgB,aAAa;AACjD,QAAO;AACR;AAED,OAAO,MAAM,eAAe,CAC1BC,QACAD,MACA,SAAS,GACT,eAAe,UACI;CACnB,MAAM,OAAO,IAAI,SAAS;AAC1B,QAAO,MAAM,KAAK,KAAK,GAAG,QAAQ,aAAa;AAChD;AAED,OAAO,MAAM,aAAa,CAACE,SACzB,IAAI,WAAW,YAAY,OAAO,KAAK,EAAE;AAE3C,OAAO,MAAM,aAAa,CAACC,WACzB,YAAY,OAAO,OAAO;AAE5B,OAAO,MAAM,SAAS,CAAC,GAAG,YAA2B;CACnD,MAAM,cAAc,QAAQ,OAC1B,CAAC,KAAK,WAAW,MAAM,OAAO,YAC9B,EACD;CACD,MAAM,OAAO,IAAI,WAAW;CAC5B,IAAI,SAAS;AACb,MAAK,MAAM,UAAU,SAAS;AAC5B,OAAK,IAAI,IAAI,WAAW,SAAS,OAAO;AACxC,YAAU,OAAO;CAClB;AACD,QAAO,KAAK;AACb","names":["value: BinaryTypes[T]","type: T","buffer: ArrayBuffer","text: string","buffer: Parameters<typeof utf8decoder.decode>[0]"],"sources":["src/common/binary.ts"],"sourcesContent":["// TODO: get rid of lib DOM somehow...\n/// <reference lib=\"dom\" />\n\nconst utf8decoder = new TextDecoder()\nconst utf8encoder = new TextEncoder()\n\nexport type BinaryTypes = {\n Int8: number\n Int16: number\n Int32: number\n Uint8: number\n Uint16: number\n Uint32: number\n Float32: number\n Float64: number\n BigInt64: bigint\n BigUint64: bigint\n}\n\nexport const encodeNumber = <T extends keyof BinaryTypes>(\n value: BinaryTypes[T],\n type: T,\n littleEndian = false,\n) => {\n const bytesNeeded = globalThis[`${type}Array`].BYTES_PER_ELEMENT\n const ab = new ArrayBuffer(bytesNeeded)\n const dv = new DataView(ab)\n dv[`set${type}`](0, value as never, littleEndian)\n return ab\n}\n\nexport const decodeNumber = <T extends keyof BinaryTypes>(\n buffer: ArrayBuffer,\n type: T,\n offset = 0,\n littleEndian = false,\n): BinaryTypes[T] => {\n const view = new DataView(buffer)\n return view[`get${type}`](offset, littleEndian) as BinaryTypes[T]\n}\n\nexport const encodeText = (text: string) =>\n new Uint8Array(utf8encoder.encode(text)).buffer as ArrayBuffer\n\nexport const decodeText = (buffer: Parameters<typeof utf8decoder.decode>[0]) =>\n utf8decoder.decode(buffer)\n\nexport const concat = (...buffers: ArrayBuffer[]) => {\n const totalLength = buffers.reduce(\n (acc, buffer) => acc + buffer.byteLength,\n 0,\n )\n const view = new Uint8Array(totalLength)\n let offset = 0\n for (const buffer of buffers) {\n view.set(new Uint8Array(buffer), offset)\n offset += buffer.byteLength\n }\n return view.buffer\n}\n"],"version":3}
|
package/dist/common/blob.js
CHANGED
|
@@ -1,42 +1,38 @@
|
|
|
1
1
|
export class ProtocolBlob {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
_source = source;
|
|
39
|
-
}
|
|
40
|
-
return new ProtocolBlob(_source, metadata.size, metadata.type, metadata.filename);
|
|
41
|
-
}
|
|
2
|
+
metadata;
|
|
3
|
+
source;
|
|
4
|
+
constructor(source, size = -1, type = "application/octet-stream", filename) {
|
|
5
|
+
if (size < -1 || size === 0) throw new Error("Blob size is invalid");
|
|
6
|
+
this.source = source;
|
|
7
|
+
this.metadata = {
|
|
8
|
+
size,
|
|
9
|
+
type,
|
|
10
|
+
filename
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
static from(source, metadata = {}) {
|
|
14
|
+
let _source = undefined;
|
|
15
|
+
if (source instanceof globalThis.ReadableStream) {
|
|
16
|
+
_source = source;
|
|
17
|
+
} else if ("File" in globalThis && source instanceof globalThis.File) {
|
|
18
|
+
_source = source.stream();
|
|
19
|
+
metadata.size = source.size;
|
|
20
|
+
metadata.filename = source.name;
|
|
21
|
+
} else if (source instanceof globalThis.Blob) {
|
|
22
|
+
_source = source.stream();
|
|
23
|
+
metadata.size = source.size;
|
|
24
|
+
} else if (typeof source === "string") {
|
|
25
|
+
const blob = new Blob([source]);
|
|
26
|
+
_source = blob.stream();
|
|
27
|
+
metadata.size = blob.size;
|
|
28
|
+
metadata.type = metadata.type || "text/plain";
|
|
29
|
+
} else if (source instanceof globalThis.ArrayBuffer) {
|
|
30
|
+
const blob = new Blob([source]);
|
|
31
|
+
_source = blob.stream();
|
|
32
|
+
metadata.size = blob.size;
|
|
33
|
+
} else {
|
|
34
|
+
_source = source;
|
|
35
|
+
}
|
|
36
|
+
return new ProtocolBlob(_source, metadata.size, metadata.type, metadata.filename);
|
|
37
|
+
}
|
|
42
38
|
}
|
package/dist/common/blob.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"
|
|
1
|
+
{"mappings":"AAUA,OAAO,MAAM,aAA8C;CACzD,AAAgB;CAChB,AAAgB;CAEhB,YACEA,QACA,QAAQ,GACR,OAAO,4BACPC,UACA;AACA,MAAI,QAAQ,KAAK,SAAS,EAAG,OAAM,IAAI,MAAM;AAE7C,OAAK,SAAS;AACd,OAAK,WAAW;GACd;GACA;GACA;EACD;CACF;CAED,OAAO,KACLD,QACAE,WAII,CAAE,GACN;EACA,IAAIC,UAAe;AAEnB,MAAI,kBAAkB,WAAW,gBAAgB;AAC/C,aAAU;EACX,WAAU,UAAU,cAAc,kBAAkB,WAAW,MAAM;AACpE,aAAU,OAAO,QAAQ;AACzB,YAAS,OAAO,OAAO;AACvB,YAAS,WAAW,OAAO;EAC5B,WAAU,kBAAkB,WAAW,MAAM;AAC5C,aAAU,OAAO,QAAQ;AACzB,YAAS,OAAO,OAAO;EACxB,kBAAiB,WAAW,UAAU;GACrC,MAAM,OAAO,IAAI,KAAK,CAAC,MAAO;AAC9B,aAAU,KAAK,QAAQ;AACvB,YAAS,OAAO,KAAK;AACrB,YAAS,OAAO,SAAS,QAAQ;EAClC,WAAU,kBAAkB,WAAW,aAAa;GACnD,MAAM,OAAO,IAAI,KAAK,CAAC,MAAO;AAC9B,aAAU,KAAK,QAAQ;AACvB,YAAS,OAAO,KAAK;EACtB,OAAM;AACL,aAAU;EACX;AAED,SAAO,IAAI,aACT,SACA,SAAS,MACT,SAAS,MACT,SAAS;CAEZ;AACF","names":["source: any","filename?: string","metadata: {\n size?: number\n type?: string\n filename?: string\n }","_source: any"],"sources":["src/common/blob.ts"],"sourcesContent":["export type ProtocolBlobMetadata = {\n type: string\n size: number\n filename?: string\n}\n\nexport interface ProtocolBlobInterface {\n readonly metadata: ProtocolBlobMetadata\n}\n\nexport class ProtocolBlob implements ProtocolBlobInterface {\n public readonly metadata: ProtocolBlobMetadata\n public readonly source: any\n\n constructor(\n source: any,\n size = -1,\n type = 'application/octet-stream',\n filename?: string,\n ) {\n if (size < -1 || size === 0) throw new Error('Blob size is invalid')\n\n this.source = source\n this.metadata = {\n size,\n type,\n filename,\n }\n }\n\n static from(\n source: any,\n metadata: {\n size?: number\n type?: string\n filename?: string\n } = {},\n ) {\n let _source: any = undefined\n\n if (source instanceof globalThis.ReadableStream) {\n _source = source\n } else if ('File' in globalThis && source instanceof globalThis.File) {\n _source = source.stream()\n metadata.size = source.size\n metadata.filename = source.name\n } else if (source instanceof globalThis.Blob) {\n _source = source.stream()\n metadata.size = source.size\n } else if (typeof source === 'string') {\n const blob = new Blob([source])\n _source = blob.stream()\n metadata.size = blob.size\n metadata.type = metadata.type || 'text/plain'\n } else if (source instanceof globalThis.ArrayBuffer) {\n const blob = new Blob([source])\n _source = blob.stream()\n metadata.size = blob.size\n } else {\n _source = source\n }\n\n return new ProtocolBlob(\n _source,\n metadata.size,\n metadata.type,\n metadata.filename,\n )\n }\n}\n"],"version":3}
|
package/dist/common/enums.js
CHANGED
|
@@ -1,44 +1,44 @@
|
|
|
1
|
-
export
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
}
|
|
12
|
-
export
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
}
|
|
25
|
-
export
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
}
|
|
30
|
-
export
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
}
|
|
1
|
+
export let ClientMessageType = /* @__PURE__ */ function(ClientMessageType) {
|
|
2
|
+
ClientMessageType[ClientMessageType["Rpc"] = 10] = "Rpc";
|
|
3
|
+
ClientMessageType[ClientMessageType["RpcAbort"] = 11] = "RpcAbort";
|
|
4
|
+
ClientMessageType[ClientMessageType["RpcStreamAbort"] = 12] = "RpcStreamAbort";
|
|
5
|
+
ClientMessageType[ClientMessageType["ClientStreamPush"] = 20] = "ClientStreamPush";
|
|
6
|
+
ClientMessageType[ClientMessageType["ClientStreamEnd"] = 21] = "ClientStreamEnd";
|
|
7
|
+
ClientMessageType[ClientMessageType["ClientStreamAbort"] = 22] = "ClientStreamAbort";
|
|
8
|
+
ClientMessageType[ClientMessageType["ServerStreamAbort"] = 23] = "ServerStreamAbort";
|
|
9
|
+
ClientMessageType[ClientMessageType["ServerStreamPull"] = 24] = "ServerStreamPull";
|
|
10
|
+
return ClientMessageType;
|
|
11
|
+
}({});
|
|
12
|
+
export let ServerMessageType = /* @__PURE__ */ function(ServerMessageType) {
|
|
13
|
+
ServerMessageType[ServerMessageType["Event"] = 1] = "Event";
|
|
14
|
+
ServerMessageType[ServerMessageType["RpcResponse"] = 10] = "RpcResponse";
|
|
15
|
+
ServerMessageType[ServerMessageType["RpcStreamResponse"] = 11] = "RpcStreamResponse";
|
|
16
|
+
ServerMessageType[ServerMessageType["RpcStreamChunk"] = 12] = "RpcStreamChunk";
|
|
17
|
+
ServerMessageType[ServerMessageType["RpcStreamAbort"] = 13] = "RpcStreamAbort";
|
|
18
|
+
ServerMessageType[ServerMessageType["ServerStreamPush"] = 20] = "ServerStreamPush";
|
|
19
|
+
ServerMessageType[ServerMessageType["ServerStreamEnd"] = 21] = "ServerStreamEnd";
|
|
20
|
+
ServerMessageType[ServerMessageType["ServerStreamAbort"] = 22] = "ServerStreamAbort";
|
|
21
|
+
ServerMessageType[ServerMessageType["ClientStreamAbort"] = 23] = "ClientStreamAbort";
|
|
22
|
+
ServerMessageType[ServerMessageType["ClientStreamPull"] = 24] = "ClientStreamPull";
|
|
23
|
+
return ServerMessageType;
|
|
24
|
+
}({});
|
|
25
|
+
export let TransportType = /* @__PURE__ */ function(TransportType) {
|
|
26
|
+
TransportType["Bidirectional"] = "Bidirectional";
|
|
27
|
+
TransportType["Unidirectional"] = "Unidirectional";
|
|
28
|
+
return TransportType;
|
|
29
|
+
}({});
|
|
30
|
+
export let ErrorCode = /* @__PURE__ */ function(ErrorCode) {
|
|
31
|
+
ErrorCode["ValidationError"] = "ValidationError";
|
|
32
|
+
ErrorCode["BadRequest"] = "BadRequest";
|
|
33
|
+
ErrorCode["NotFound"] = "NotFound";
|
|
34
|
+
ErrorCode["Forbidden"] = "Forbidden";
|
|
35
|
+
ErrorCode["Unauthorized"] = "Unauthorized";
|
|
36
|
+
ErrorCode["InternalServerError"] = "InternalServerError";
|
|
37
|
+
ErrorCode["NotAcceptable"] = "NotAcceptable";
|
|
38
|
+
ErrorCode["RequestTimeout"] = "RequestTimeout";
|
|
39
|
+
ErrorCode["GatewayTimeout"] = "GatewayTimeout";
|
|
40
|
+
ErrorCode["ServiceUnavailable"] = "ServiceUnavailable";
|
|
41
|
+
ErrorCode["ClientRequestError"] = "ClientRequestError";
|
|
42
|
+
ErrorCode["ConnectionError"] = "ConnectionError";
|
|
43
|
+
return ErrorCode;
|
|
44
|
+
}({});
|
package/dist/common/enums.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"
|
|
1
|
+
{"mappings":"AAAA,OAAO,IAAK,gEAAL;AACL;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;AACD;AAED,OAAO,IAAK,gEAAL;AACL;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;AACD;AAED,OAAO,IAAK,wDAAL;AACL;AACA;;AACD;AAED,OAAO,IAAK,gDAAL;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACD","names":[],"sources":["src/common/enums.ts"],"sourcesContent":["export enum ClientMessageType {\n Rpc = 10,\n RpcAbort = 11,\n RpcStreamAbort = 12,\n\n ClientStreamPush = 20,\n ClientStreamEnd = 21,\n ClientStreamAbort = 22,\n ServerStreamAbort = 23,\n ServerStreamPull = 24,\n}\n\nexport enum ServerMessageType {\n Event = 1,\n\n RpcResponse = 10,\n RpcStreamResponse = 11,\n RpcStreamChunk = 12,\n RpcStreamAbort = 13,\n\n ServerStreamPush = 20,\n ServerStreamEnd = 21,\n ServerStreamAbort = 22,\n ClientStreamAbort = 23,\n ClientStreamPull = 24,\n}\n\nexport enum TransportType {\n Bidirectional = 'Bidirectional',\n Unidirectional = 'Unidirectional',\n}\n\nexport enum ErrorCode {\n ValidationError = 'ValidationError',\n BadRequest = 'BadRequest',\n NotFound = 'NotFound',\n Forbidden = 'Forbidden',\n Unauthorized = 'Unauthorized',\n InternalServerError = 'InternalServerError',\n NotAcceptable = 'NotAcceptable',\n RequestTimeout = 'RequestTimeout',\n GatewayTimeout = 'GatewayTimeout',\n ServiceUnavailable = 'ServiceUnavailable',\n ClientRequestError = 'ClientRequestError',\n ConnectionError = 'ConnectionError',\n}\n"],"version":3}
|
package/dist/common/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"
|
|
1
|
+
{"mappings":"AAAA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc","names":[],"sources":["src/common/index.ts"],"sourcesContent":["export * from './binary.ts'\nexport * from './blob.ts'\nexport * from './enums.ts'\nexport * from './types.ts'\n"],"version":3}
|
package/dist/common/types.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export {};
|