@nmtjs/protocol 0.15.0-beta.1 → 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.
- package/dist/client/format.d.ts +26 -0
- package/dist/client/format.js +3 -0
- package/dist/client/format.js.map +1 -0
- package/dist/client/index.d.ts +7 -0
- package/dist/client/index.js +7 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/protocol.d.ts +114 -0
- package/dist/client/protocol.js +25 -0
- package/dist/client/protocol.js.map +1 -0
- package/dist/client/stream.d.ts +49 -0
- package/dist/client/stream.js +190 -0
- package/dist/client/stream.js.map +1 -0
- package/dist/client/versions/v1.d.ts +108 -0
- package/dist/client/versions/v1.js +128 -0
- package/dist/client/versions/v1.js.map +1 -0
- package/dist/common/binary.d.ts +20 -0
- package/dist/common/binary.js +40 -0
- package/dist/common/binary.js.map +1 -0
- package/dist/common/blob.d.ts +29 -0
- package/dist/common/blob.js +67 -0
- package/dist/common/blob.js.map +1 -0
- package/dist/common/constants.d.ts +2 -0
- package/dist/common/constants.js +2 -0
- package/dist/common/constants.js.map +1 -0
- package/dist/common/enums.d.ts +51 -0
- package/dist/common/enums.js +59 -0
- package/dist/common/enums.js.map +1 -0
- package/dist/common/index.d.ts +6 -0
- package/dist/common/index.js +7 -0
- package/dist/common/index.js.map +1 -0
- package/dist/common/types.d.ts +14 -0
- package/dist/common/types.js +2 -0
- package/dist/common/types.js.map +1 -0
- package/dist/common/utils.d.ts +2 -0
- package/dist/common/utils.js +7 -0
- package/dist/common/utils.js.map +1 -0
- package/dist/server/format.d.ts +32 -0
- package/dist/server/format.js +63 -0
- package/dist/server/format.js.map +1 -0
- package/dist/server/index.d.ts +9 -0
- package/dist/server/index.js +9 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/protocol.d.ts +102 -0
- package/dist/server/protocol.js +25 -0
- package/dist/server/protocol.js.map +1 -0
- package/dist/server/stream.d.ts +15 -0
- package/dist/server/stream.js +42 -0
- package/dist/server/stream.js.map +1 -0
- package/dist/server/types.d.ts +34 -0
- package/dist/server/types.js +2 -0
- package/dist/server/types.js.map +1 -0
- package/dist/server/utils.d.ts +12 -0
- package/dist/server/utils.js +16 -0
- package/dist/server/utils.js.map +1 -0
- package/dist/server/versions/v1.d.ts +77 -0
- package/dist/server/versions/v1.js +119 -0
- package/dist/server/versions/v1.js.map +1 -0
- package/package.json +11 -10
- package/src/client/format.ts +49 -0
- package/src/client/index.ts +8 -0
- package/src/client/protocol.ts +107 -0
- package/src/client/stream.ts +222 -0
- package/src/client/versions/v1.ts +205 -0
- package/src/common/binary.ts +70 -0
- package/src/common/blob.ts +99 -0
- package/src/common/constants.ts +2 -0
- package/src/common/enums.ts +62 -0
- package/src/common/index.ts +6 -0
- package/src/common/types.ts +18 -0
- package/src/common/utils.ts +12 -0
- package/src/server/format.ts +113 -0
- package/src/server/index.ts +10 -0
- package/src/server/protocol.ts +97 -0
- package/src/server/stream.ts +51 -0
- package/src/server/types.ts +42 -0
- package/src/server/utils.ts +22 -0
- package/src/server/versions/v1.ts +198 -0
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import type { ClientMessageType, ProtocolVersion, ServerMessageType } from '../common/enums.ts';
|
|
2
|
+
import type { BaseProtocolError, EncodeRPCStreams } from '../common/types.ts';
|
|
3
|
+
import type { MessageContext } from './types.ts';
|
|
4
|
+
export declare class ProtocolError extends Error implements BaseProtocolError {
|
|
5
|
+
code: string;
|
|
6
|
+
data?: any;
|
|
7
|
+
constructor(code: string, message?: string, data?: any);
|
|
8
|
+
get message(): string;
|
|
9
|
+
toString(): string;
|
|
10
|
+
toJSON(): {
|
|
11
|
+
code: string;
|
|
12
|
+
message: string;
|
|
13
|
+
data: any;
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
export declare abstract class ProtocolVersionInterface {
|
|
17
|
+
abstract version: ProtocolVersion;
|
|
18
|
+
abstract decodeMessage(context: MessageContext, buffer: ArrayBufferView): {
|
|
19
|
+
[K in keyof ClientMessageTypePayload]: {
|
|
20
|
+
type: K;
|
|
21
|
+
} & ClientMessageTypePayload[K];
|
|
22
|
+
}[keyof ClientMessageTypePayload];
|
|
23
|
+
abstract encodeMessage<T extends ServerMessageType = ServerMessageType>(context: MessageContext, messageType: T, payload: ServerMessageTypePayload[T]): ArrayBufferView;
|
|
24
|
+
protected encode(...chunks: (ArrayBuffer | ArrayBufferView)[]): ArrayBufferView;
|
|
25
|
+
}
|
|
26
|
+
export type ServerMessageTypePayload = {
|
|
27
|
+
[ServerMessageType.RpcResponse]: {
|
|
28
|
+
callId: number;
|
|
29
|
+
result: any;
|
|
30
|
+
streams: EncodeRPCStreams;
|
|
31
|
+
error: any | null;
|
|
32
|
+
};
|
|
33
|
+
[ServerMessageType.RpcStreamAbort]: {
|
|
34
|
+
callId: number;
|
|
35
|
+
reason?: string;
|
|
36
|
+
};
|
|
37
|
+
[ServerMessageType.RpcStreamEnd]: {
|
|
38
|
+
callId: number;
|
|
39
|
+
};
|
|
40
|
+
[ServerMessageType.RpcStreamChunk]: {
|
|
41
|
+
callId: number;
|
|
42
|
+
chunk: ArrayBufferView;
|
|
43
|
+
};
|
|
44
|
+
[ServerMessageType.RpcStreamResponse]: {
|
|
45
|
+
callId: number;
|
|
46
|
+
};
|
|
47
|
+
[ServerMessageType.ClientStreamAbort]: {
|
|
48
|
+
streamId: number;
|
|
49
|
+
reason?: string;
|
|
50
|
+
};
|
|
51
|
+
[ServerMessageType.ClientStreamPull]: {
|
|
52
|
+
streamId: number;
|
|
53
|
+
size: number;
|
|
54
|
+
};
|
|
55
|
+
[ServerMessageType.ServerStreamAbort]: {
|
|
56
|
+
streamId: number;
|
|
57
|
+
reason?: string;
|
|
58
|
+
};
|
|
59
|
+
[ServerMessageType.ServerStreamEnd]: {
|
|
60
|
+
streamId: number;
|
|
61
|
+
};
|
|
62
|
+
[ServerMessageType.ServerStreamPush]: {
|
|
63
|
+
streamId: number;
|
|
64
|
+
chunk: ArrayBufferView;
|
|
65
|
+
};
|
|
66
|
+
};
|
|
67
|
+
export type ClientMessageTypePayload = {
|
|
68
|
+
[ClientMessageType.Rpc]: {
|
|
69
|
+
rpc: {
|
|
70
|
+
callId: number;
|
|
71
|
+
procedure: string;
|
|
72
|
+
payload: unknown;
|
|
73
|
+
streams?: EncodeRPCStreams;
|
|
74
|
+
};
|
|
75
|
+
};
|
|
76
|
+
[ClientMessageType.RpcPull]: {
|
|
77
|
+
callId: number;
|
|
78
|
+
};
|
|
79
|
+
[ClientMessageType.RpcAbort]: {
|
|
80
|
+
callId: number;
|
|
81
|
+
reason?: string;
|
|
82
|
+
};
|
|
83
|
+
[ClientMessageType.ClientStreamPush]: {
|
|
84
|
+
streamId: number;
|
|
85
|
+
chunk: ArrayBufferView;
|
|
86
|
+
};
|
|
87
|
+
[ClientMessageType.ClientStreamEnd]: {
|
|
88
|
+
streamId: number;
|
|
89
|
+
};
|
|
90
|
+
[ClientMessageType.ClientStreamAbort]: {
|
|
91
|
+
streamId: number;
|
|
92
|
+
reason?: string;
|
|
93
|
+
};
|
|
94
|
+
[ClientMessageType.ServerStreamPull]: {
|
|
95
|
+
streamId: number;
|
|
96
|
+
size: number;
|
|
97
|
+
};
|
|
98
|
+
[ClientMessageType.ServerStreamAbort]: {
|
|
99
|
+
streamId: number;
|
|
100
|
+
reason?: string;
|
|
101
|
+
};
|
|
102
|
+
};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { concat } from "../common/binary.js";
|
|
2
|
+
export class ProtocolError extends Error {
|
|
3
|
+
code;
|
|
4
|
+
data;
|
|
5
|
+
constructor(code, message, data) {
|
|
6
|
+
super(message);
|
|
7
|
+
this.code = code;
|
|
8
|
+
this.data = data;
|
|
9
|
+
}
|
|
10
|
+
get message() {
|
|
11
|
+
return `${this.code} ${super.message}`;
|
|
12
|
+
}
|
|
13
|
+
toString() {
|
|
14
|
+
return `${this.code} ${this.message}`;
|
|
15
|
+
}
|
|
16
|
+
toJSON() {
|
|
17
|
+
return { code: this.code, message: this.message, data: this.data };
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
export class ProtocolVersionInterface {
|
|
21
|
+
encode(...chunks) {
|
|
22
|
+
return concat(...chunks);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=protocol.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../src/server/protocol.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAE5C,MAAM,OAAO,aAAc,SAAQ,KAAK;IACtC,IAAI,CAAQ;IACZ,IAAI,CAAM;IAEV,YAAY,IAAY,EAAE,OAAgB,EAAE,IAAU;QACpD,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;IAClB,CAAC;IAED,IAAI,OAAO;QACT,OAAO,GAAG,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,OAAO,EAAE,CAAA;IACxC,CAAC;IAED,QAAQ;QACN,OAAO,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE,CAAA;IACvC,CAAC;IAED,MAAM;QACJ,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAA;IACpE,CAAC;CACF;AAED,MAAM,OAAgB,wBAAwB;IAgBlC,MAAM,CACd,GAAG,MAAyC;QAE5C,OAAO,MAAM,CAAC,GAAG,MAAM,CAAC,CAAA;IAC1B,CAAC;CACF"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { ReadableOptions } from 'node:stream';
|
|
2
|
+
import { PassThrough } from 'node:stream';
|
|
3
|
+
import type { ProtocolBlob, ProtocolBlobMetadata } from '../common/blob.ts';
|
|
4
|
+
export declare class ProtocolClientStream extends PassThrough {
|
|
5
|
+
#private;
|
|
6
|
+
readonly id: number;
|
|
7
|
+
readonly metadata: ProtocolBlobMetadata;
|
|
8
|
+
constructor(id: number, metadata: ProtocolBlobMetadata, options?: ReadableOptions);
|
|
9
|
+
_read(size: number): void;
|
|
10
|
+
}
|
|
11
|
+
export declare class ProtocolServerStream extends PassThrough {
|
|
12
|
+
readonly id: number;
|
|
13
|
+
readonly metadata: ProtocolBlobMetadata;
|
|
14
|
+
constructor(id: number, blob: ProtocolBlob);
|
|
15
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { PassThrough, Readable } from 'node:stream';
|
|
2
|
+
import { ReadableStream } from 'node:stream/web';
|
|
3
|
+
export class ProtocolClientStream extends PassThrough {
|
|
4
|
+
id;
|
|
5
|
+
metadata;
|
|
6
|
+
#read;
|
|
7
|
+
constructor(id, metadata, options) {
|
|
8
|
+
const { read, ...rest } = options ?? {};
|
|
9
|
+
super(rest);
|
|
10
|
+
this.id = id;
|
|
11
|
+
this.metadata = metadata;
|
|
12
|
+
this.#read = read;
|
|
13
|
+
}
|
|
14
|
+
_read(size) {
|
|
15
|
+
if (this.#read) {
|
|
16
|
+
this.#read.call(this, size);
|
|
17
|
+
}
|
|
18
|
+
super._read(size);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
export class ProtocolServerStream extends PassThrough {
|
|
22
|
+
id;
|
|
23
|
+
metadata;
|
|
24
|
+
constructor(id, blob) {
|
|
25
|
+
let readable;
|
|
26
|
+
if (blob.source instanceof Readable) {
|
|
27
|
+
readable = blob.source;
|
|
28
|
+
}
|
|
29
|
+
else if (blob.source instanceof ReadableStream) {
|
|
30
|
+
readable = Readable.fromWeb(blob.source);
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
throw new Error('Invalid source type');
|
|
34
|
+
}
|
|
35
|
+
super();
|
|
36
|
+
this.pause();
|
|
37
|
+
readable.pipe(this);
|
|
38
|
+
this.id = id;
|
|
39
|
+
this.metadata = blob.metadata;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=stream.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream.js","sourceRoot":"","sources":["../../src/server/stream.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAIhD,MAAM,OAAO,oBAAqB,SAAQ,WAAW;IAIjC;IACA;IAJT,KAAK,CAA0B;IAExC,YACkB,EAAU,EACV,QAA8B,EAC9C,OAAyB;QAEzB,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,GAAG,OAAO,IAAI,EAAE,CAAA;QACvC,KAAK,CAAC,IAAI,CAAC,CAAA;QALK,OAAE,GAAF,EAAE,CAAQ;QACV,aAAQ,GAAR,QAAQ,CAAsB;QAK9C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAA;IACnB,CAAC;IAEQ,KAAK,CAAC,IAAY;QACzB,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;QAC7B,CAAC;QACD,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IACnB,CAAC;CACF;AAED,MAAM,OAAO,oBAAqB,SAAQ,WAAW;IACnC,EAAE,CAAQ;IACV,QAAQ,CAAsB;IAE9C,YAAY,EAAU,EAAE,IAAkB;QACxC,IAAI,QAAkB,CAAA;QAEtB,IAAI,IAAI,CAAC,MAAM,YAAY,QAAQ,EAAE,CAAC;YACpC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAA;QACxB,CAAC;aAAM,IAAI,IAAI,CAAC,MAAM,YAAY,cAAc,EAAE,CAAC;YACjD,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,MAAwB,CAAC,CAAA;QAC5D,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAA;QACxC,CAAC;QAED,KAAK,EAAE,CAAA;QAEP,IAAI,CAAC,KAAK,EAAE,CAAA;QACZ,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAEnB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAA;QACZ,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAA;IAC/B,CAAC;CACF"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { PlainType } from '@nmtjs/type';
|
|
2
|
+
import type { ProtocolBlobInterface, ProtocolBlobMetadata } from '../common/blob.ts';
|
|
3
|
+
import type { kBlobKey } from '../common/constants.ts';
|
|
4
|
+
import type { BaseServerDecoder, BaseServerEncoder } from './format.ts';
|
|
5
|
+
import type { ProtocolVersionInterface } from './protocol.ts';
|
|
6
|
+
import type { ProtocolClientStream } from './stream.ts';
|
|
7
|
+
export type ClientStreamConsumer = (() => ProtocolClientStream) & {
|
|
8
|
+
readonly [kBlobKey]: any;
|
|
9
|
+
readonly metadata: ProtocolBlobMetadata;
|
|
10
|
+
};
|
|
11
|
+
export type MessageContext = {
|
|
12
|
+
protocol: ProtocolVersionInterface;
|
|
13
|
+
connectionId: string;
|
|
14
|
+
streamId: () => number;
|
|
15
|
+
decoder: BaseServerDecoder;
|
|
16
|
+
encoder: BaseServerEncoder;
|
|
17
|
+
addClientStream: (options: {
|
|
18
|
+
streamId: number;
|
|
19
|
+
metadata: ProtocolBlobMetadata;
|
|
20
|
+
callId: number;
|
|
21
|
+
}) => ClientStreamConsumer;
|
|
22
|
+
transport: {
|
|
23
|
+
send?: (connectionId: string, buffer: ArrayBufferView) => boolean | null;
|
|
24
|
+
};
|
|
25
|
+
};
|
|
26
|
+
export type ResolveFormatParams = {
|
|
27
|
+
contentType?: string | null;
|
|
28
|
+
accept?: string | null;
|
|
29
|
+
};
|
|
30
|
+
export type InputType<T> = T extends ProtocolBlobInterface ? ClientStreamConsumer : T extends {
|
|
31
|
+
[PlainType]?: true;
|
|
32
|
+
} ? {
|
|
33
|
+
[K in keyof Omit<T, PlainType>]: InputType<T[K]>;
|
|
34
|
+
} : T;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/server/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { ProtocolFormats } from './format.ts';
|
|
2
|
+
import type { ResolveFormatParams } from './types.ts';
|
|
3
|
+
export declare class UnsupportedFormatError extends Error {
|
|
4
|
+
}
|
|
5
|
+
export declare class UnsupportedContentTypeError extends UnsupportedFormatError {
|
|
6
|
+
}
|
|
7
|
+
export declare class UnsupportedAcceptTypeError extends UnsupportedFormatError {
|
|
8
|
+
}
|
|
9
|
+
export declare const getFormat: (format: ProtocolFormats, { accept, contentType }: ResolveFormatParams) => {
|
|
10
|
+
encoder: import("./format.ts").BaseServerEncoder;
|
|
11
|
+
decoder: import("./format.ts").BaseServerDecoder;
|
|
12
|
+
};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export class UnsupportedFormatError extends Error {
|
|
2
|
+
}
|
|
3
|
+
export class UnsupportedContentTypeError extends UnsupportedFormatError {
|
|
4
|
+
}
|
|
5
|
+
export class UnsupportedAcceptTypeError extends UnsupportedFormatError {
|
|
6
|
+
}
|
|
7
|
+
export const getFormat = (format, { accept, contentType }) => {
|
|
8
|
+
const encoder = contentType ? format.supportsEncoder(contentType) : undefined;
|
|
9
|
+
if (!encoder)
|
|
10
|
+
throw new UnsupportedContentTypeError('Unsupported Content type');
|
|
11
|
+
const decoder = accept ? format.supportsDecoder(accept) : undefined;
|
|
12
|
+
if (!decoder)
|
|
13
|
+
throw new UnsupportedAcceptTypeError('Unsupported Accept type');
|
|
14
|
+
return { encoder, decoder };
|
|
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
|
@@ -8,28 +8,29 @@
|
|
|
8
8
|
},
|
|
9
9
|
"dependencies": {
|
|
10
10
|
"hookable": "6.0.0-rc.1",
|
|
11
|
-
"@nmtjs/common": "0.15.0-beta.
|
|
12
|
-
"@nmtjs/
|
|
13
|
-
"@nmtjs/
|
|
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
14
|
},
|
|
15
15
|
"devDependencies": {
|
|
16
|
-
"@nmtjs/core": "0.15.0-beta.
|
|
16
|
+
"@nmtjs/core": "0.15.0-beta.10"
|
|
17
17
|
},
|
|
18
18
|
"peerDependencies": {
|
|
19
|
-
"@nmtjs/common": "0.15.0-beta.
|
|
20
|
-
"@nmtjs/core": "0.15.0-beta.
|
|
21
|
-
"@nmtjs/
|
|
22
|
-
"@nmtjs/
|
|
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"
|
|
23
23
|
},
|
|
24
24
|
"files": [
|
|
25
25
|
"dist",
|
|
26
|
+
"src",
|
|
26
27
|
"LICENSE.md",
|
|
27
28
|
"README.md"
|
|
28
29
|
],
|
|
29
|
-
"version": "0.15.0-beta.
|
|
30
|
+
"version": "0.15.0-beta.10",
|
|
30
31
|
"scripts": {
|
|
31
32
|
"clean-build": "rm -rf ./dist",
|
|
32
|
-
"build": "tsc",
|
|
33
|
+
"build": "tsc --declaration --sourcemap",
|
|
33
34
|
"dev": "tsc --watch",
|
|
34
35
|
"type-check": "tsc --noEmit"
|
|
35
36
|
}
|
|
@@ -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() }
|