@nmtjs/protocol 0.15.0-beta.3 → 0.15.0-beta.31

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 (49) hide show
  1. package/dist/client/index.js +5 -5
  2. package/dist/client/protocol.js +1 -1
  3. package/dist/client/protocol.js.map +1 -1
  4. package/dist/client/stream.js +2 -2
  5. package/dist/client/stream.js.map +1 -1
  6. package/dist/client/versions/v1.d.ts +38 -38
  7. package/dist/client/versions/v1.js +3 -3
  8. package/dist/client/versions/v1.js.map +1 -1
  9. package/dist/common/binary.d.ts +3 -5
  10. package/dist/common/binary.js.map +1 -1
  11. package/dist/common/blob.d.ts +3 -3
  12. package/dist/common/blob.js +3 -3
  13. package/dist/common/blob.js.map +1 -1
  14. package/dist/common/enums.js +12 -6
  15. package/dist/common/enums.js.map +1 -1
  16. package/dist/common/index.js +6 -6
  17. package/dist/common/utils.js +1 -1
  18. package/dist/common/utils.js.map +1 -1
  19. package/dist/server/format.d.ts +5 -3
  20. package/dist/server/format.js +2 -0
  21. package/dist/server/format.js.map +1 -1
  22. package/dist/server/index.js +7 -7
  23. package/dist/server/protocol.js +1 -1
  24. package/dist/server/protocol.js.map +1 -1
  25. package/dist/server/stream.js.map +1 -1
  26. package/dist/server/utils.js.map +1 -1
  27. package/dist/server/versions/v1.d.ts +27 -27
  28. package/dist/server/versions/v1.js +3 -3
  29. package/dist/server/versions/v1.js.map +1 -1
  30. package/package.json +11 -13
  31. package/src/client/format.ts +49 -0
  32. package/src/client/index.ts +8 -0
  33. package/src/client/protocol.ts +107 -0
  34. package/src/client/stream.ts +222 -0
  35. package/src/client/versions/v1.ts +205 -0
  36. package/src/common/binary.ts +70 -0
  37. package/src/common/blob.ts +94 -0
  38. package/src/common/constants.ts +2 -0
  39. package/src/common/enums.ts +62 -0
  40. package/src/common/index.ts +6 -0
  41. package/src/common/types.ts +18 -0
  42. package/src/common/utils.ts +12 -0
  43. package/src/server/format.ts +117 -0
  44. package/src/server/index.ts +10 -0
  45. package/src/server/protocol.ts +97 -0
  46. package/src/server/stream.ts +51 -0
  47. package/src/server/types.ts +42 -0
  48. package/src/server/utils.ts +22 -0
  49. package/src/server/versions/v1.ts +198 -0
@@ -5,73 +5,73 @@ import { ProtocolVersionInterface } from '../protocol.ts';
5
5
  export declare class ProtocolVersion1 extends ProtocolVersionInterface {
6
6
  version: ProtocolVersion;
7
7
  decodeMessage(context: MessageContext, buffer: Buffer): {
8
+ callId?: undefined;
9
+ size?: undefined;
10
+ chunk?: undefined;
11
+ streamId?: undefined;
12
+ reason?: undefined;
8
13
  type: ClientMessageType.Rpc;
9
14
  rpc: {
10
15
  callId: number;
11
16
  procedure: string;
12
17
  payload: unknown;
13
18
  };
14
- callId?: undefined;
15
- reason?: undefined;
16
- streamId?: undefined;
19
+ } | {
17
20
  size?: undefined;
18
21
  chunk?: undefined;
19
- } | {
22
+ streamId?: undefined;
23
+ reason?: undefined;
24
+ rpc?: undefined;
20
25
  type: ClientMessageType.RpcPull;
21
26
  callId: number;
22
- rpc?: undefined;
23
- reason?: undefined;
24
- streamId?: undefined;
27
+ } | {
25
28
  size?: undefined;
26
29
  chunk?: undefined;
27
- } | {
30
+ streamId?: undefined;
31
+ rpc?: undefined;
28
32
  type: ClientMessageType.RpcAbort;
29
33
  callId: number;
30
34
  reason: string | undefined;
31
- rpc?: undefined;
32
- streamId?: undefined;
35
+ } | {
36
+ callId?: undefined;
33
37
  size?: undefined;
34
38
  chunk?: undefined;
35
- } | {
39
+ rpc?: undefined;
36
40
  type: ClientMessageType.ServerStreamAbort;
37
41
  streamId: number;
38
42
  reason: string | undefined;
39
- rpc?: undefined;
43
+ } | {
40
44
  callId?: undefined;
41
- size?: undefined;
42
45
  chunk?: undefined;
43
- } | {
46
+ reason?: undefined;
47
+ rpc?: undefined;
44
48
  type: ClientMessageType.ServerStreamPull;
45
49
  streamId: number;
46
50
  size: number;
47
- rpc?: undefined;
51
+ } | {
48
52
  callId?: undefined;
49
- reason?: undefined;
53
+ size?: undefined;
50
54
  chunk?: undefined;
51
- } | {
55
+ rpc?: undefined;
52
56
  type: ClientMessageType.ClientStreamAbort;
53
57
  streamId: number;
54
58
  reason: string | undefined;
55
- rpc?: undefined;
59
+ } | {
56
60
  callId?: undefined;
57
61
  size?: undefined;
58
62
  chunk?: undefined;
59
- } | {
63
+ reason?: undefined;
64
+ rpc?: undefined;
60
65
  type: ClientMessageType.ClientStreamEnd;
61
66
  streamId: number;
62
- rpc?: undefined;
67
+ } | {
63
68
  callId?: undefined;
64
- reason?: undefined;
65
69
  size?: undefined;
66
- chunk?: undefined;
67
- } | {
70
+ reason?: undefined;
71
+ rpc?: undefined;
68
72
  type: ClientMessageType.ClientStreamPush;
69
73
  streamId: number;
70
74
  chunk: Buffer<ArrayBufferLike>;
71
- rpc?: undefined;
72
- callId?: undefined;
73
- reason?: undefined;
74
- size?: undefined;
75
75
  };
76
76
  encodeMessage<T extends ServerMessageType>(context: MessageContext, messageType: T, payload: ServerMessageTypePayload[T]): ArrayBufferView<ArrayBufferLike>;
77
77
  }
@@ -1,6 +1,6 @@
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";
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
4
  export class ProtocolVersion1 extends ProtocolVersionInterface {
5
5
  version = ProtocolVersion.v1;
6
6
  decodeMessage(context, buffer) {
@@ -1 +1 @@
1
- {"version":3,"file":"v1.js","sourceRoot":"","sources":["../../../src/server/versions/v1.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"v1.js","sourceRoot":"","sources":["../../../src/server/versions/v1.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -8,29 +8,27 @@
8
8
  },
9
9
  "dependencies": {
10
10
  "hookable": "6.0.0-rc.1",
11
- "@nmtjs/common": "0.15.0-beta.3",
12
- "@nmtjs/type": "0.15.0-beta.3",
13
- "@nmtjs/contract": "0.15.0-beta.3"
11
+ "@nmtjs/common": "0.15.0-beta.31",
12
+ "@nmtjs/contract": "0.15.0-beta.31",
13
+ "@nmtjs/type": "0.15.0-beta.31"
14
14
  },
15
15
  "devDependencies": {
16
- "@nmtjs/core": "0.15.0-beta.3"
16
+ "@nmtjs/core": "0.15.0-beta.31"
17
17
  },
18
18
  "peerDependencies": {
19
- "@nmtjs/common": "0.15.0-beta.3",
20
- "@nmtjs/core": "0.15.0-beta.3",
21
- "@nmtjs/contract": "0.15.0-beta.3",
22
- "@nmtjs/type": "0.15.0-beta.3"
19
+ "@nmtjs/common": "0.15.0-beta.31",
20
+ "@nmtjs/core": "0.15.0-beta.31",
21
+ "@nmtjs/type": "0.15.0-beta.31",
22
+ "@nmtjs/contract": "0.15.0-beta.31"
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.3",
30
+ "version": "0.15.0-beta.31",
30
31
  "scripts": {
31
- "clean-build": "rm -rf ./dist",
32
- "build": "tsc --declaration --sourcemap",
33
- "dev": "tsc --watch",
34
- "type-check": "tsc --noEmit"
32
+ "clean-build": "rm -rf ./dist"
35
33
  }
36
34
  }
@@ -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
+ }
@@ -0,0 +1,222 @@
1
+ import type { Callback, DuplexStreamOptions } from '@nmtjs/common'
2
+ import { DuplexStream } from '@nmtjs/common'
3
+
4
+ import type {
5
+ ProtocolBlobInterface,
6
+ ProtocolBlobMetadata,
7
+ } from '../common/blob.ts'
8
+ import { concat, decodeText, encodeText } from '../common/binary.ts'
9
+ import { kBlobKey } from '../common/constants.ts'
10
+
11
+ export class ProtocolClientBlobStream
12
+ extends DuplexStream<any, ArrayBufferView>
13
+ implements ProtocolBlobInterface
14
+ {
15
+ readonly [kBlobKey] = true
16
+
17
+ #queue: Uint8Array
18
+ #reader: ReadableStreamDefaultReader
19
+ #sourceReader: ReadableStreamDefaultReader | null = null
20
+
21
+ constructor(
22
+ readonly source: ReadableStream,
23
+ readonly id: number,
24
+ readonly metadata: ProtocolBlobMetadata,
25
+ ) {
26
+ let sourceReader: ReadableStreamDefaultReader | null = null
27
+ super({
28
+ start: () => {
29
+ sourceReader = source.getReader()
30
+ },
31
+ pull: async (controller) => {
32
+ const { done, value } = await sourceReader!.read()
33
+ if (done) {
34
+ controller.close()
35
+ return
36
+ }
37
+ const chunk = value
38
+ controller.enqueue(
39
+ chunk instanceof Uint8Array
40
+ ? chunk
41
+ : new Uint8Array(chunk.buffer, chunk.byteOffset, chunk.byteLength),
42
+ )
43
+ },
44
+ transform: (chunk) => {
45
+ if (chunk instanceof ArrayBuffer) {
46
+ return new Uint8Array(chunk)
47
+ } else if (chunk instanceof Uint8Array) {
48
+ return chunk
49
+ } else if (typeof chunk === 'string') {
50
+ return encodeText(chunk)
51
+ } else {
52
+ throw new Error(
53
+ 'Invalid chunk data type. Expected ArrayBuffer, Uint8Array, or string.',
54
+ )
55
+ }
56
+ },
57
+ cancel: (reason) => {
58
+ // Use reader.cancel() if reader exists (stream is locked), otherwise source.cancel()
59
+ if (sourceReader) {
60
+ sourceReader.cancel(reason)
61
+ } else {
62
+ source.cancel(reason)
63
+ }
64
+ },
65
+ })
66
+
67
+ this.#queue = new Uint8Array(0)
68
+ this.#reader = this.readable.getReader()
69
+ this.#sourceReader = sourceReader
70
+ }
71
+
72
+ async abort(reason = 'Stream aborted') {
73
+ await this.#reader.cancel(reason)
74
+ this.#reader.releaseLock()
75
+ this.#sourceReader?.releaseLock()
76
+ }
77
+
78
+ async end() {
79
+ // Release the reader lock when the stream is finished
80
+ this.#reader.releaseLock()
81
+ this.#sourceReader?.releaseLock()
82
+ }
83
+
84
+ async read(size: number) {
85
+ while (this.#queue.byteLength < size) {
86
+ const { done, value } = await this.#reader.read()
87
+ if (done) {
88
+ if (this.#queue.byteLength > 0) {
89
+ const chunk = this.#queue
90
+ this.#queue = new Uint8Array(0)
91
+ return chunk
92
+ }
93
+ return null
94
+ }
95
+ const buffer = value
96
+ this.#queue = concat(this.#queue, buffer)
97
+ }
98
+ const chunk = this.#queue.subarray(0, size)
99
+ this.#queue = this.#queue.subarray(size)
100
+ return chunk
101
+ }
102
+ }
103
+
104
+ export abstract class ProtocolServerStreamInterface<
105
+ O = unknown,
106
+ > extends DuplexStream<O, ArrayBufferView> {
107
+ async *[Symbol.asyncIterator]() {
108
+ const reader = this.readable.getReader()
109
+ try {
110
+ while (true) {
111
+ const { done, value } = await reader.read()
112
+ if (!done) yield value
113
+ else break
114
+ }
115
+ } finally {
116
+ reader.releaseLock()
117
+ }
118
+ }
119
+ }
120
+
121
+ export class ProtocolServerStream<T = unknown>
122
+ extends ProtocolServerStreamInterface<T>
123
+ implements ProtocolServerStreamInterface<T> {}
124
+
125
+ export class ProtocolServerRPCStream<
126
+ T = unknown,
127
+ > extends ProtocolServerStream<T> {
128
+ createAsyncIterable(onDone: Callback) {
129
+ return {
130
+ [Symbol.asyncIterator]: () => {
131
+ const iterator = this[Symbol.asyncIterator]()
132
+ return {
133
+ async next() {
134
+ const result = await iterator.next()
135
+ if (result.done) onDone()
136
+ return result
137
+ },
138
+ async return(value) {
139
+ onDone()
140
+ return iterator.return?.(value) ?? { done: true, value }
141
+ },
142
+ async throw(error) {
143
+ onDone()
144
+ return iterator.throw?.(error) ?? Promise.reject(error)
145
+ },
146
+ }
147
+ },
148
+ }
149
+ }
150
+ }
151
+
152
+ export class ProtocolServerBlobStream
153
+ extends ProtocolServerStreamInterface<ArrayBufferView>
154
+ implements ProtocolBlobInterface, Blob
155
+ {
156
+ readonly [kBlobKey] = true
157
+
158
+ constructor(
159
+ readonly metadata: ProtocolBlobMetadata,
160
+ options?: DuplexStreamOptions<ArrayBufferView, ArrayBufferView>,
161
+ ) {
162
+ super(options)
163
+ }
164
+
165
+ get size() {
166
+ return this.metadata.size || Number.NaN
167
+ }
168
+
169
+ get type() {
170
+ return this.metadata.type || 'application/octet-stream'
171
+ }
172
+
173
+ async text() {
174
+ const chunks: ArrayBufferView[] = []
175
+ for await (const chunk of this) chunks.push(chunk)
176
+ return decodeText(concat(...chunks))
177
+ }
178
+
179
+ async bytes() {
180
+ const chunks: ArrayBufferView[] = []
181
+ for await (const chunk of this) chunks.push(chunk)
182
+ return concat(...chunks)
183
+ }
184
+
185
+ async arrayBuffer() {
186
+ const bytes = await this.bytes()
187
+ return bytes.buffer
188
+ }
189
+
190
+ async json<T = unknown>() {
191
+ const text = await this.text()
192
+ return JSON.parse(text) as T
193
+ }
194
+
195
+ stream() {
196
+ const transform = new TransformStream<ArrayBufferView, Uint8Array>({
197
+ transform: (chunk, controller) => {
198
+ controller.enqueue(
199
+ chunk instanceof Uint8Array
200
+ ? chunk
201
+ : new Uint8Array(chunk.buffer, chunk.byteOffset, chunk.byteLength),
202
+ )
203
+ },
204
+ })
205
+ this.readable.pipeThrough(transform)
206
+ return transform.readable as ReadableStream<Uint8Array<ArrayBuffer>>
207
+ }
208
+
209
+ /**
210
+ * Throws an error
211
+ */
212
+ async formData(): Promise<FormData> {
213
+ throw new Error('Method not implemented.')
214
+ }
215
+
216
+ /**
217
+ * Throws an error
218
+ */
219
+ slice(): Blob {
220
+ throw new Error('Unable to slice')
221
+ }
222
+ }