@nmtjs/protocol 0.14.5 → 0.15.0-beta.10

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 (93) hide show
  1. package/LICENSE.md +1 -1
  2. package/README.md +1 -1
  3. package/dist/client/format.d.ts +18 -13
  4. package/dist/client/format.js +1 -0
  5. package/dist/client/format.js.map +1 -0
  6. package/dist/client/index.d.ts +4 -1
  7. package/dist/client/index.js +4 -1
  8. package/dist/client/index.js.map +1 -0
  9. package/dist/client/protocol.d.ts +102 -138
  10. package/dist/client/protocol.js +7 -336
  11. package/dist/client/protocol.js.map +1 -0
  12. package/dist/client/stream.d.ts +37 -19
  13. package/dist/client/stream.js +138 -46
  14. package/dist/client/stream.js.map +1 -0
  15. package/dist/client/versions/v1.d.ts +108 -0
  16. package/dist/client/versions/v1.js +128 -0
  17. package/dist/client/versions/v1.js.map +1 -0
  18. package/dist/common/binary.d.ts +4 -3
  19. package/dist/common/binary.js +22 -9
  20. package/dist/common/binary.js.map +1 -0
  21. package/dist/common/blob.d.ts +15 -8
  22. package/dist/common/blob.js +55 -30
  23. package/dist/common/blob.js.map +1 -0
  24. package/dist/common/constants.d.ts +2 -0
  25. package/dist/common/constants.js +2 -0
  26. package/dist/common/constants.js.map +1 -0
  27. package/dist/common/enums.d.ts +17 -7
  28. package/dist/common/enums.js +25 -11
  29. package/dist/common/enums.js.map +1 -0
  30. package/dist/common/index.d.ts +2 -0
  31. package/dist/common/index.js +3 -0
  32. package/dist/common/index.js.map +1 -0
  33. package/dist/common/types.d.ts +5 -24
  34. package/dist/common/types.js +1 -0
  35. package/dist/common/types.js.map +1 -0
  36. package/dist/common/utils.d.ts +2 -0
  37. package/dist/common/utils.js +7 -0
  38. package/dist/common/utils.js.map +1 -0
  39. package/dist/server/format.d.ts +14 -22
  40. package/dist/server/format.js +11 -8
  41. package/dist/server/format.js.map +1 -0
  42. package/dist/server/index.d.ts +4 -6
  43. package/dist/server/index.js +4 -6
  44. package/dist/server/index.js.map +1 -0
  45. package/dist/server/protocol.d.ts +88 -114
  46. package/dist/server/protocol.js +5 -354
  47. package/dist/server/protocol.js.map +1 -0
  48. package/dist/server/stream.d.ts +2 -0
  49. package/dist/server/stream.js +11 -1
  50. package/dist/server/stream.js.map +1 -0
  51. package/dist/server/types.d.ts +29 -8
  52. package/dist/server/types.js +1 -0
  53. package/dist/server/types.js.map +1 -0
  54. package/dist/server/utils.d.ts +3 -6
  55. package/dist/server/utils.js +5 -4
  56. package/dist/server/utils.js.map +1 -0
  57. package/dist/server/versions/v1.d.ts +77 -0
  58. package/dist/server/versions/v1.js +119 -0
  59. package/dist/server/versions/v1.js.map +1 -0
  60. package/package.json +19 -23
  61. package/src/client/format.ts +49 -0
  62. package/src/client/index.ts +8 -0
  63. package/src/client/protocol.ts +107 -0
  64. package/src/client/stream.ts +222 -0
  65. package/src/client/versions/v1.ts +205 -0
  66. package/src/common/binary.ts +70 -0
  67. package/src/common/blob.ts +99 -0
  68. package/src/common/constants.ts +2 -0
  69. package/src/common/enums.ts +62 -0
  70. package/src/common/index.ts +6 -0
  71. package/src/common/types.ts +18 -0
  72. package/src/common/utils.ts +12 -0
  73. package/src/server/format.ts +113 -0
  74. package/src/server/index.ts +10 -0
  75. package/src/server/protocol.ts +97 -0
  76. package/src/server/stream.ts +51 -0
  77. package/src/server/types.ts +42 -0
  78. package/src/server/utils.ts +22 -0
  79. package/src/server/versions/v1.ts +198 -0
  80. package/dist/client/events.d.ts +0 -15
  81. package/dist/client/events.js +0 -28
  82. package/dist/server/api.d.ts +0 -33
  83. package/dist/server/api.js +0 -7
  84. package/dist/server/connection.d.ts +0 -25
  85. package/dist/server/connection.js +0 -22
  86. package/dist/server/constants.d.ts +0 -4
  87. package/dist/server/constants.js +0 -2
  88. package/dist/server/injectables.d.ts +0 -14
  89. package/dist/server/injectables.js +0 -22
  90. package/dist/server/registry.d.ts +0 -3
  91. package/dist/server/registry.js +0 -3
  92. package/dist/server/transport.d.ts +0 -23
  93. package/dist/server/transport.js +0 -3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/server/types.ts"],"names":[],"mappings":""}
@@ -1,15 +1,12 @@
1
- import type { ProtocolFormat } from './format.ts';
2
- export type ResolveFormatParams = {
3
- contentType?: string | null;
4
- acceptType?: string | null;
5
- };
1
+ import type { ProtocolFormats } from './format.ts';
2
+ import type { ResolveFormatParams } from './types.ts';
6
3
  export declare class UnsupportedFormatError extends Error {
7
4
  }
8
5
  export declare class UnsupportedContentTypeError extends UnsupportedFormatError {
9
6
  }
10
7
  export declare class UnsupportedAcceptTypeError extends UnsupportedFormatError {
11
8
  }
12
- export declare const getFormat: (format: ProtocolFormat, { acceptType, contentType }: ResolveFormatParams) => {
9
+ export declare const getFormat: (format: ProtocolFormats, { accept, contentType }: ResolveFormatParams) => {
13
10
  encoder: import("./format.ts").BaseServerEncoder;
14
11
  decoder: import("./format.ts").BaseServerDecoder;
15
12
  };
@@ -4,12 +4,13 @@ export class UnsupportedContentTypeError extends UnsupportedFormatError {
4
4
  }
5
5
  export class UnsupportedAcceptTypeError extends UnsupportedFormatError {
6
6
  }
7
- export const getFormat = (format, { acceptType, contentType }) => {
7
+ export const getFormat = (format, { accept, contentType }) => {
8
8
  const encoder = contentType ? format.supportsEncoder(contentType) : undefined;
9
9
  if (!encoder)
10
- throw new UnsupportedContentTypeError('Unsupported Content-Type');
11
- const decoder = acceptType ? format.supportsDecoder(acceptType) : undefined;
10
+ throw new UnsupportedContentTypeError('Unsupported Content type');
11
+ const decoder = accept ? format.supportsDecoder(accept) : undefined;
12
12
  if (!decoder)
13
- throw new UnsupportedAcceptTypeError('Unsupported Accept-Type');
13
+ throw new UnsupportedAcceptTypeError('Unsupported Accept type');
14
14
  return { encoder, decoder };
15
15
  };
16
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/server/utils.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,sBAAuB,SAAQ,KAAK;CAAG;AAEpD,MAAM,OAAO,2BAA4B,SAAQ,sBAAsB;CAAG;AAE1E,MAAM,OAAO,0BAA2B,SAAQ,sBAAsB;CAAG;AAEzE,MAAM,CAAC,MAAM,SAAS,GAAG,CACvB,MAAuB,EACvB,EAAE,MAAM,EAAE,WAAW,EAAuB,EAC5C,EAAE;IACF,MAAM,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IAC7E,IAAI,CAAC,OAAO;QACV,MAAM,IAAI,2BAA2B,CAAC,0BAA0B,CAAC,CAAA;IAEnE,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IACnE,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,0BAA0B,CAAC,yBAAyB,CAAC,CAAA;IAE7E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAA;AAC7B,CAAC,CAAA"}
@@ -0,0 +1,77 @@
1
+ import type { ServerMessageTypePayload } from '../protocol.ts';
2
+ import type { MessageContext } from '../types.ts';
3
+ import { ClientMessageType, ProtocolVersion, ServerMessageType } from '../../common/enums.ts';
4
+ import { ProtocolVersionInterface } from '../protocol.ts';
5
+ export declare class ProtocolVersion1 extends ProtocolVersionInterface {
6
+ version: ProtocolVersion;
7
+ decodeMessage(context: MessageContext, buffer: Buffer): {
8
+ type: ClientMessageType.Rpc;
9
+ rpc: {
10
+ callId: number;
11
+ procedure: string;
12
+ payload: unknown;
13
+ };
14
+ callId?: undefined;
15
+ reason?: undefined;
16
+ streamId?: undefined;
17
+ size?: undefined;
18
+ chunk?: undefined;
19
+ } | {
20
+ type: ClientMessageType.RpcPull;
21
+ callId: number;
22
+ rpc?: undefined;
23
+ reason?: undefined;
24
+ streamId?: undefined;
25
+ size?: undefined;
26
+ chunk?: undefined;
27
+ } | {
28
+ type: ClientMessageType.RpcAbort;
29
+ callId: number;
30
+ reason: string | undefined;
31
+ rpc?: undefined;
32
+ streamId?: undefined;
33
+ size?: undefined;
34
+ chunk?: undefined;
35
+ } | {
36
+ type: ClientMessageType.ServerStreamAbort;
37
+ streamId: number;
38
+ reason: string | undefined;
39
+ rpc?: undefined;
40
+ callId?: undefined;
41
+ size?: undefined;
42
+ chunk?: undefined;
43
+ } | {
44
+ type: ClientMessageType.ServerStreamPull;
45
+ streamId: number;
46
+ size: number;
47
+ rpc?: undefined;
48
+ callId?: undefined;
49
+ reason?: undefined;
50
+ chunk?: undefined;
51
+ } | {
52
+ type: ClientMessageType.ClientStreamAbort;
53
+ streamId: number;
54
+ reason: string | undefined;
55
+ rpc?: undefined;
56
+ callId?: undefined;
57
+ size?: undefined;
58
+ chunk?: undefined;
59
+ } | {
60
+ type: ClientMessageType.ClientStreamEnd;
61
+ streamId: number;
62
+ rpc?: undefined;
63
+ callId?: undefined;
64
+ reason?: undefined;
65
+ size?: undefined;
66
+ chunk?: undefined;
67
+ } | {
68
+ type: ClientMessageType.ClientStreamPush;
69
+ streamId: number;
70
+ chunk: Buffer<ArrayBufferLike>;
71
+ rpc?: undefined;
72
+ callId?: undefined;
73
+ reason?: undefined;
74
+ size?: undefined;
75
+ };
76
+ encodeMessage<T extends ServerMessageType>(context: MessageContext, messageType: T, payload: ServerMessageTypePayload[T]): ArrayBufferView<ArrayBufferLike>;
77
+ }
@@ -0,0 +1,119 @@
1
+ import { decodeText, encodeNumber, encodeText } from "../../common/binary.js";
2
+ import { ClientMessageType, MessageByteLength, ProtocolVersion, ServerMessageType, } from "../../common/enums.js";
3
+ import { ProtocolVersionInterface } from "../protocol.js";
4
+ export class ProtocolVersion1 extends ProtocolVersionInterface {
5
+ version = ProtocolVersion.v1;
6
+ decodeMessage(context, buffer) {
7
+ const messageType = buffer.readUint8(0);
8
+ const messagePayload = buffer.subarray(MessageByteLength.MessageType);
9
+ switch (messageType) {
10
+ case ClientMessageType.Rpc: {
11
+ const callId = messagePayload.readUint32LE(0);
12
+ const procedureLength = messagePayload.readUInt16LE(MessageByteLength.CallId);
13
+ const procedureOffset = MessageByteLength.CallId + MessageByteLength.ProcedureLength;
14
+ const procedure = messagePayload.toString('utf-8', procedureOffset, procedureOffset + procedureLength);
15
+ const formatPayload = messagePayload.subarray(procedureOffset + procedureLength);
16
+ const payload = context.decoder.decodeRPC(formatPayload, {
17
+ addStream: (streamId, metadata) => {
18
+ return context.addClientStream({ callId, streamId, metadata });
19
+ },
20
+ });
21
+ return { type: messageType, rpc: { callId, procedure, payload } };
22
+ }
23
+ case ClientMessageType.RpcPull: {
24
+ const callId = messagePayload.readUInt32LE(0);
25
+ return { type: messageType, callId };
26
+ }
27
+ case ClientMessageType.RpcAbort: {
28
+ const callId = messagePayload.readUInt32LE(0);
29
+ const reasonPayload = messagePayload.subarray(MessageByteLength.CallId);
30
+ const reason = reasonPayload.byteLength > 0 ? decodeText(reasonPayload) : undefined;
31
+ return { type: messageType, callId, reason };
32
+ }
33
+ case ClientMessageType.ServerStreamAbort: {
34
+ const streamId = messagePayload.readUInt32LE(0);
35
+ const reasonPayload = messagePayload.subarray(MessageByteLength.StreamId);
36
+ const reason = reasonPayload.byteLength > 0 ? decodeText(reasonPayload) : undefined;
37
+ return { type: messageType, streamId, reason };
38
+ }
39
+ case ClientMessageType.ServerStreamPull: {
40
+ const streamId = messagePayload.readUInt32LE(0);
41
+ const size = messagePayload.readUInt32LE(MessageByteLength.StreamId);
42
+ return { type: messageType, streamId, size };
43
+ }
44
+ case ClientMessageType.ClientStreamAbort: {
45
+ const streamId = messagePayload.readUInt32LE(0);
46
+ const reasonPayload = messagePayload.subarray(MessageByteLength.StreamId);
47
+ const reason = reasonPayload.byteLength > 0 ? decodeText(reasonPayload) : undefined;
48
+ return { type: messageType, streamId, reason };
49
+ }
50
+ case ClientMessageType.ClientStreamEnd: {
51
+ return { type: messageType, streamId: messagePayload.readUInt32LE(0) };
52
+ }
53
+ case ClientMessageType.ClientStreamPush: {
54
+ const streamId = messagePayload.readUInt32LE(0);
55
+ const chunk = messagePayload.subarray(MessageByteLength.StreamId);
56
+ return { type: messageType, streamId, chunk };
57
+ }
58
+ default:
59
+ throw new Error(`Unsupported message type: ${messageType}`);
60
+ }
61
+ }
62
+ encodeMessage(context, messageType, payload) {
63
+ switch (messageType) {
64
+ // case ServerMessageType.Event: {
65
+ // const { event, data } =
66
+ // payload as ServerMessageTypePayload[ServerMessageType.Event]
67
+ // return this.encode(
68
+ // encodeNumber(messageType, 'Uint8'),
69
+ // context.encoder.encode({ event, data }),
70
+ // )
71
+ // }
72
+ case ServerMessageType.RpcResponse: {
73
+ const { callId, result, streams, error } = payload;
74
+ return this.encode(encodeNumber(messageType, 'Uint8'), encodeNumber(callId, 'Uint32'), encodeNumber(error ? 1 : 0, 'Uint8'), error
75
+ ? context.encoder.encode(error)
76
+ : context.encoder.encodeRPC(result, streams));
77
+ }
78
+ case ServerMessageType.RpcStreamResponse: {
79
+ const { callId } = payload;
80
+ return this.encode(encodeNumber(messageType, 'Uint8'), encodeNumber(callId, 'Uint32'));
81
+ }
82
+ case ServerMessageType.RpcStreamChunk: {
83
+ const { callId, chunk } = payload;
84
+ return this.encode(encodeNumber(messageType, 'Uint8'), encodeNumber(callId, 'Uint32'), chunk);
85
+ }
86
+ case ServerMessageType.RpcStreamEnd: {
87
+ const { callId } = payload;
88
+ return this.encode(encodeNumber(messageType, 'Uint8'), encodeNumber(callId, 'Uint32'));
89
+ }
90
+ case ServerMessageType.RpcStreamAbort: {
91
+ const { callId, reason } = payload;
92
+ return this.encode(encodeNumber(messageType, 'Uint8'), encodeNumber(callId, 'Uint32'), reason ? encodeText(reason) : Buffer.alloc(0));
93
+ }
94
+ case ServerMessageType.ClientStreamPull: {
95
+ const { size, streamId } = payload;
96
+ return this.encode(encodeNumber(messageType, 'Uint8'), encodeNumber(streamId, 'Uint32'), encodeNumber(size, 'Uint32'));
97
+ }
98
+ case ServerMessageType.ClientStreamAbort: {
99
+ const { streamId, reason } = payload;
100
+ return this.encode(encodeNumber(messageType, 'Uint8'), encodeNumber(streamId, 'Uint32'), reason ? encodeText(reason) : Buffer.alloc(0));
101
+ }
102
+ case ServerMessageType.ServerStreamPush: {
103
+ const { streamId, chunk } = payload;
104
+ return this.encode(encodeNumber(messageType, 'Uint8'), encodeNumber(streamId, 'Uint32'), chunk);
105
+ }
106
+ case ServerMessageType.ServerStreamEnd: {
107
+ const { streamId } = payload;
108
+ return this.encode(encodeNumber(messageType, 'Uint8'), encodeNumber(streamId, 'Uint32'));
109
+ }
110
+ case ServerMessageType.ServerStreamAbort: {
111
+ const { streamId, reason } = payload;
112
+ return this.encode(encodeNumber(messageType, 'Uint8'), encodeNumber(streamId, 'Uint32'), reason ? encodeText(reason) : Buffer.alloc(0));
113
+ }
114
+ default:
115
+ throw new Error(`Unsupported message type: ${messageType}`);
116
+ }
117
+ }
118
+ }
119
+ //# sourceMappingURL=v1.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"v1.js","sourceRoot":"","sources":["../../../src/server/versions/v1.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -2,40 +2,36 @@
2
2
  "name": "@nmtjs/protocol",
3
3
  "type": "module",
4
4
  "exports": {
5
- ".": {
6
- "types": "./dist/common/index.d.ts",
7
- "import": "./dist/common/index.js",
8
- "module-sync": "./dist/common/index.js"
9
- },
10
- "./server": {
11
- "types": "./dist/server/index.d.ts",
12
- "import": "./dist/server/index.js",
13
- "module-sync": "./dist/server/index.js"
14
- },
15
- "./client": {
16
- "types": "./dist/client/index.d.ts",
17
- "import": "./dist/client/index.js",
18
- "module-sync": "./dist/client/index.js"
19
- }
5
+ ".": "./dist/common/index.js",
6
+ "./server": "./dist/server/index.js",
7
+ "./client": "./dist/client/index.js"
20
8
  },
21
9
  "dependencies": {
22
- "@nmtjs/common": "0.14.5",
23
- "@nmtjs/type": "0.14.5",
24
- "@nmtjs/core": "0.14.5"
10
+ "hookable": "6.0.0-rc.1",
11
+ "@nmtjs/common": "0.15.0-beta.10",
12
+ "@nmtjs/type": "0.15.0-beta.10",
13
+ "@nmtjs/contract": "0.15.0-beta.10"
14
+ },
15
+ "devDependencies": {
16
+ "@nmtjs/core": "0.15.0-beta.10"
25
17
  },
26
18
  "peerDependencies": {
27
- "@nmtjs/common": "0.14.5",
28
- "@nmtjs/type": "0.14.5",
29
- "@nmtjs/core": "0.14.5"
19
+ "@nmtjs/common": "0.15.0-beta.10",
20
+ "@nmtjs/core": "0.15.0-beta.10",
21
+ "@nmtjs/contract": "0.15.0-beta.10",
22
+ "@nmtjs/type": "0.15.0-beta.10"
30
23
  },
31
24
  "files": [
32
25
  "dist",
26
+ "src",
33
27
  "LICENSE.md",
34
28
  "README.md"
35
29
  ],
36
- "version": "0.14.5",
30
+ "version": "0.15.0-beta.10",
37
31
  "scripts": {
38
- "build": "tsc",
32
+ "clean-build": "rm -rf ./dist",
33
+ "build": "tsc --declaration --sourcemap",
34
+ "dev": "tsc --watch",
39
35
  "type-check": "tsc --noEmit"
40
36
  }
41
37
  }
@@ -0,0 +1,49 @@
1
+ import type { ProtocolBlob } from '../common/blob.ts'
2
+ import type { DecodeRPCContext } from '../common/types.ts'
3
+ import type {
4
+ ProtocolClientBlobStream,
5
+ ProtocolServerBlobStream,
6
+ } from './stream.ts'
7
+
8
+ export interface EncodeRPCContext<T = any> {
9
+ addStream: (blob: ProtocolBlob) => T
10
+ }
11
+
12
+ export type ProtocolRPCEncode = ArrayBufferView
13
+
14
+ export interface BaseClientDecoder {
15
+ decode(buffer: ArrayBufferView): unknown
16
+ decodeRPC(
17
+ buffer: ArrayBufferView,
18
+ context: DecodeRPCContext<
19
+ (options?: { signal?: AbortSignal }) => ProtocolServerBlobStream
20
+ >,
21
+ ): unknown
22
+ }
23
+
24
+ export interface BaseClientEncoder {
25
+ encode(data: unknown): ArrayBufferView
26
+ encodeRPC(
27
+ data: unknown,
28
+ context: EncodeRPCContext<ProtocolClientBlobStream>,
29
+ ): ProtocolRPCEncode
30
+ }
31
+
32
+ export abstract class BaseClientFormat
33
+ implements BaseClientDecoder, BaseClientEncoder
34
+ {
35
+ abstract contentType: string
36
+
37
+ abstract encode(data: unknown): ArrayBufferView
38
+ abstract encodeRPC(
39
+ data: unknown,
40
+ context: EncodeRPCContext,
41
+ ): ProtocolRPCEncode
42
+ abstract decode(buffer: ArrayBufferView): unknown
43
+ abstract decodeRPC(
44
+ buffer: ArrayBufferView,
45
+ context: DecodeRPCContext<
46
+ (options?: { signal?: AbortSignal }) => ProtocolServerBlobStream
47
+ >,
48
+ ): unknown
49
+ }
@@ -0,0 +1,8 @@
1
+ export * from './format.ts'
2
+ export * from './protocol.ts'
3
+ export * from './stream.ts'
4
+
5
+ import { ProtocolVersion } from '../common/enums.ts'
6
+ import { ProtocolVersion1 } from './versions/v1.ts'
7
+
8
+ export const versions = { [ProtocolVersion.v1]: new ProtocolVersion1() }
@@ -0,0 +1,107 @@
1
+ import type { ProtocolBlob, ProtocolBlobMetadata } from '../common/blob.ts'
2
+ import type {
3
+ ClientMessageType,
4
+ ProtocolVersion,
5
+ ServerMessageType,
6
+ } from '../common/enums.ts'
7
+ import type { BaseProtocolError, EncodeRPCStreams } from '../common/types.ts'
8
+ import type { BaseClientDecoder, BaseClientEncoder } from './format.ts'
9
+ import type {
10
+ ProtocolClientBlobStream,
11
+ ProtocolServerBlobStream,
12
+ } from './stream.ts'
13
+ import { concat } from '../common/binary.ts'
14
+
15
+ export type MessageContext = {
16
+ decoder: BaseClientDecoder
17
+ encoder: BaseClientEncoder
18
+ addClientStream: (blob: ProtocolBlob) => ProtocolClientBlobStream
19
+ addServerStream: (
20
+ streamId: number,
21
+ metadata: ProtocolBlobMetadata,
22
+ ) => (options?: { signal?: AbortSignal }) => ProtocolServerBlobStream
23
+ transport: { send: (buffer: ArrayBufferView) => void }
24
+ streamId: () => number
25
+ }
26
+
27
+ export type ClientMessageTypePayload = {
28
+ [ClientMessageType.Rpc]: { callId: number; procedure: string; payload: any }
29
+ [ClientMessageType.RpcAbort]: { callId: number; reason?: string }
30
+ [ClientMessageType.RpcPull]: { callId: number }
31
+ [ClientMessageType.ClientStreamPush]: {
32
+ streamId: number
33
+ chunk: ArrayBufferView
34
+ }
35
+ [ClientMessageType.ClientStreamEnd]: { streamId: number }
36
+ [ClientMessageType.ClientStreamAbort]: { streamId: number; reason?: string }
37
+ [ClientMessageType.ServerStreamPull]: { streamId: number; size: number }
38
+ [ClientMessageType.ServerStreamAbort]: { streamId: number; reason?: string }
39
+ }
40
+
41
+ export type ServerMessageTypePayload = {
42
+ [ServerMessageType.RpcResponse]: {
43
+ callId: number
44
+ result?: any
45
+ error?: BaseProtocolError
46
+ streams?: EncodeRPCStreams
47
+ }
48
+ [ServerMessageType.RpcStreamResponse]: {
49
+ callId: number
50
+ error?: BaseProtocolError
51
+ }
52
+ [ServerMessageType.RpcStreamChunk]: { callId: number; chunk: ArrayBufferView }
53
+ [ServerMessageType.RpcStreamEnd]: { callId: number }
54
+ [ServerMessageType.RpcStreamAbort]: { callId: number; reason?: string }
55
+ [ServerMessageType.ServerStreamAbort]: { streamId: number; reason?: string }
56
+ [ServerMessageType.ServerStreamEnd]: { streamId: number }
57
+ [ServerMessageType.ServerStreamPush]: {
58
+ streamId: number
59
+ chunk: ArrayBufferView
60
+ }
61
+ [ServerMessageType.ClientStreamAbort]: { streamId: number; reason?: string }
62
+ [ServerMessageType.ClientStreamPull]: { streamId: number; size: number }
63
+ }
64
+
65
+ export abstract class ProtocolVersionInterface {
66
+ abstract version: ProtocolVersion
67
+ abstract decodeMessage(
68
+ context: MessageContext,
69
+ buffer: ArrayBufferView,
70
+ ): {
71
+ [K in keyof ServerMessageTypePayload]: {
72
+ type: K
73
+ } & ServerMessageTypePayload[K]
74
+ }[keyof ServerMessageTypePayload]
75
+ abstract encodeMessage<T extends ClientMessageType>(
76
+ context: MessageContext,
77
+ messageType: T,
78
+ payload: ClientMessageTypePayload[T],
79
+ ): any
80
+
81
+ protected encode(...chunks: (ArrayBuffer | ArrayBufferView)[]) {
82
+ return concat(...chunks)
83
+ }
84
+ }
85
+
86
+ export class ProtocolError extends Error implements BaseProtocolError {
87
+ code: string
88
+ data?: any
89
+
90
+ constructor(code: string, message?: string, data?: any) {
91
+ super(message)
92
+ this.code = code
93
+ this.data = data
94
+ }
95
+
96
+ get message() {
97
+ return `${this.code} ${super.message}`
98
+ }
99
+
100
+ toString() {
101
+ return `${this.code} ${this.message}`
102
+ }
103
+
104
+ toJSON() {
105
+ return { code: this.code, message: this.message, data: this.data }
106
+ }
107
+ }