@nmtjs/protocol 0.15.0-beta.37 → 0.15.0-beta.39

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 +7 -4
  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 +34 -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 +5 -6
  19. package/dist/common/binary.js +22 -9
  20. package/dist/common/binary.js.map +1 -0
  21. package/dist/common/blob.d.ts +14 -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 +34 -14
  29. package/dist/common/enums.js.map +1 -0
  30. package/dist/common/index.d.ts +2 -0
  31. package/dist/common/index.js +7 -4
  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 +17 -23
  40. package/dist/server/format.js +13 -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 +9 -11
  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 +5 -0
  49. package/dist/server/stream.js +31 -2
  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 +18 -24
  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 +94 -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 +117 -0
  74. package/src/server/index.ts +10 -0
  75. package/src/server/protocol.ts +97 -0
  76. package/src/server/stream.ts +72 -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
package/LICENSE.md CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2024 Denis Ilchyshyn
1
+ Copyright (c) 2025 Denys Ilchyshyn
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
4
4
 
package/README.md CHANGED
@@ -6,4 +6,4 @@
6
6
  - binary data streaming and event subscriptions
7
7
  - contract-based API
8
8
  - end-to-end type safety
9
- - CPU-intensive task execution on separate workers
9
+ - CPU-intensive task execution on separate workers
@@ -1,21 +1,26 @@
1
- import type { DecodeRPCContext, EncodeRPCContext, ProtocolRPC, ProtocolRPCResponse } from '../common/types.ts';
1
+ import type { ProtocolBlob } from '../common/blob.ts';
2
+ import type { DecodeRPCContext } from '../common/types.ts';
2
3
  import type { ProtocolClientBlobStream, ProtocolServerBlobStream } from './stream.ts';
3
- export type ProtocolRPCEncode = {
4
- buffer: ArrayBuffer;
5
- streams: Record<number, ProtocolClientBlobStream>;
6
- };
4
+ export interface EncodeRPCContext<T = any> {
5
+ addStream: (blob: ProtocolBlob) => T;
6
+ }
7
+ export type ProtocolRPCEncode = ArrayBufferView;
7
8
  export interface BaseClientDecoder {
8
- decode(buffer: ArrayBuffer): any;
9
- decodeRPC(buffer: ArrayBuffer, context: DecodeRPCContext<ProtocolServerBlobStream>): ProtocolRPCResponse<ProtocolServerBlobStream>;
9
+ decode(buffer: ArrayBufferView): unknown;
10
+ decodeRPC(buffer: ArrayBufferView, context: DecodeRPCContext<(options?: {
11
+ signal?: AbortSignal;
12
+ }) => ProtocolServerBlobStream>): unknown;
10
13
  }
11
14
  export interface BaseClientEncoder {
12
- encode(data: any): ArrayBuffer;
13
- encodeRPC(rpc: ProtocolRPC, context: EncodeRPCContext<ProtocolClientBlobStream>): ProtocolRPCEncode;
15
+ encode(data: unknown): ArrayBufferView;
16
+ encodeRPC(data: unknown, context: EncodeRPCContext<ProtocolClientBlobStream>): ProtocolRPCEncode;
14
17
  }
15
18
  export declare abstract class BaseClientFormat implements BaseClientDecoder, BaseClientEncoder {
16
19
  abstract contentType: string;
17
- abstract encode(data: any): ArrayBuffer;
18
- abstract encodeRPC(rpc: ProtocolRPC, context: EncodeRPCContext<ProtocolClientBlobStream>): ProtocolRPCEncode;
19
- abstract decode(buffer: ArrayBuffer): any;
20
- abstract decodeRPC(buffer: ArrayBuffer, context: DecodeRPCContext<ProtocolServerBlobStream>): ProtocolRPCResponse<ProtocolServerBlobStream>;
20
+ abstract encode(data: unknown): ArrayBufferView;
21
+ abstract encodeRPC(data: unknown, context: EncodeRPCContext): ProtocolRPCEncode;
22
+ abstract decode(buffer: ArrayBufferView): unknown;
23
+ abstract decodeRPC(buffer: ArrayBufferView, context: DecodeRPCContext<(options?: {
24
+ signal?: AbortSignal;
25
+ }) => ProtocolServerBlobStream>): unknown;
21
26
  }
@@ -1,2 +1,3 @@
1
1
  export class BaseClientFormat {
2
2
  }
3
+ //# sourceMappingURL=format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/client/format.ts"],"names":[],"mappings":"AA+BA,MAAM,OAAgB,gBAAgB;CAiBrC"}
@@ -1,4 +1,7 @@
1
- export * from './events.ts';
2
1
  export * from './format.ts';
3
2
  export * from './protocol.ts';
4
3
  export * from './stream.ts';
4
+ import { ProtocolVersion1 } from './versions/v1.ts';
5
+ export declare const versions: {
6
+ 1: ProtocolVersion1;
7
+ };
@@ -1,4 +1,7 @@
1
- export * from "./events.js";
2
- export * from "./format.js";
3
- export * from "./protocol.js";
4
- export * from "./stream.js";
1
+ export * from './format.js';
2
+ export * from './protocol.js';
3
+ export * from './stream.js';
4
+ import { ProtocolVersion } from '../common/enums.js';
5
+ import { ProtocolVersion1 } from './versions/v1.js';
6
+ export const versions = { [ProtocolVersion.v1]: new ProtocolVersion1() };
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAC3B,cAAc,eAAe,CAAA;AAC7B,cAAc,aAAa,CAAA;AAE3B,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAEnD,MAAM,CAAC,MAAM,QAAQ,GAAG,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC,EAAE,IAAI,gBAAgB,EAAE,EAAE,CAAA"}
@@ -1,10 +1,105 @@
1
- import type { InteractivePromise, OneOf } from '@nmtjs/common';
2
- import type { ProtocolBlobMetadata } from '../common/blob.ts';
3
- import type { BaseProtocolError, ProtocolRPCResponse } from '../common/types.ts';
4
- import type { BaseClientFormat } from './format.ts';
5
- import { ClientMessageType, ServerMessageType } from '../common/enums.ts';
6
- import { EventEmitter } from './events.ts';
7
- import { ProtocolClientBlobStream, ProtocolServerBlobStream, ProtocolServerStream } from './stream.ts';
1
+ import type { ProtocolBlob, ProtocolBlobMetadata } from '../common/blob.ts';
2
+ import type { ClientMessageType, ProtocolVersion, ServerMessageType } from '../common/enums.ts';
3
+ import type { BaseProtocolError, EncodeRPCStreams } from '../common/types.ts';
4
+ import type { BaseClientDecoder, BaseClientEncoder } from './format.ts';
5
+ import type { ProtocolClientBlobStream, ProtocolServerBlobStream } from './stream.ts';
6
+ export type MessageContext = {
7
+ decoder: BaseClientDecoder;
8
+ encoder: BaseClientEncoder;
9
+ addClientStream: (blob: ProtocolBlob) => ProtocolClientBlobStream;
10
+ addServerStream: (streamId: number, metadata: ProtocolBlobMetadata) => (options?: {
11
+ signal?: AbortSignal;
12
+ }) => ProtocolServerBlobStream;
13
+ transport: {
14
+ send: (buffer: ArrayBufferView) => void;
15
+ };
16
+ streamId: () => number;
17
+ };
18
+ export type ClientMessageTypePayload = {
19
+ [ClientMessageType.Rpc]: {
20
+ callId: number;
21
+ procedure: string;
22
+ payload: any;
23
+ };
24
+ [ClientMessageType.RpcAbort]: {
25
+ callId: number;
26
+ reason?: string;
27
+ };
28
+ [ClientMessageType.RpcPull]: {
29
+ callId: number;
30
+ };
31
+ [ClientMessageType.ClientStreamPush]: {
32
+ streamId: number;
33
+ chunk: ArrayBufferView;
34
+ };
35
+ [ClientMessageType.ClientStreamEnd]: {
36
+ streamId: number;
37
+ };
38
+ [ClientMessageType.ClientStreamAbort]: {
39
+ streamId: number;
40
+ reason?: string;
41
+ };
42
+ [ClientMessageType.ServerStreamPull]: {
43
+ streamId: number;
44
+ size: number;
45
+ };
46
+ [ClientMessageType.ServerStreamAbort]: {
47
+ streamId: number;
48
+ reason?: string;
49
+ };
50
+ };
51
+ export type ServerMessageTypePayload = {
52
+ [ServerMessageType.RpcResponse]: {
53
+ callId: number;
54
+ result?: any;
55
+ error?: BaseProtocolError;
56
+ streams?: EncodeRPCStreams;
57
+ };
58
+ [ServerMessageType.RpcStreamResponse]: {
59
+ callId: number;
60
+ error?: BaseProtocolError;
61
+ };
62
+ [ServerMessageType.RpcStreamChunk]: {
63
+ callId: number;
64
+ chunk: ArrayBufferView;
65
+ };
66
+ [ServerMessageType.RpcStreamEnd]: {
67
+ callId: number;
68
+ };
69
+ [ServerMessageType.RpcStreamAbort]: {
70
+ callId: number;
71
+ reason?: string;
72
+ };
73
+ [ServerMessageType.ServerStreamAbort]: {
74
+ streamId: number;
75
+ reason?: string;
76
+ };
77
+ [ServerMessageType.ServerStreamEnd]: {
78
+ streamId: number;
79
+ };
80
+ [ServerMessageType.ServerStreamPush]: {
81
+ streamId: number;
82
+ chunk: ArrayBufferView;
83
+ };
84
+ [ServerMessageType.ClientStreamAbort]: {
85
+ streamId: number;
86
+ reason?: string;
87
+ };
88
+ [ServerMessageType.ClientStreamPull]: {
89
+ streamId: number;
90
+ size: number;
91
+ };
92
+ };
93
+ export declare abstract class ProtocolVersionInterface {
94
+ abstract version: ProtocolVersion;
95
+ abstract decodeMessage(context: MessageContext, buffer: ArrayBufferView): {
96
+ [K in keyof ServerMessageTypePayload]: {
97
+ type: K;
98
+ } & ServerMessageTypePayload[K];
99
+ }[keyof ServerMessageTypePayload];
100
+ abstract encodeMessage<T extends ClientMessageType>(context: MessageContext, messageType: T, payload: ClientMessageTypePayload[T]): any;
101
+ protected encode(...chunks: (ArrayBuffer | ArrayBufferView)[]): Uint8Array<ArrayBuffer>;
102
+ }
8
103
  export declare class ProtocolError extends Error implements BaseProtocolError {
9
104
  code: string;
10
105
  data?: any;
@@ -17,134 +112,3 @@ export declare class ProtocolError extends Error implements BaseProtocolError {
17
112
  data: any;
18
113
  };
19
114
  }
20
- export declare class ProtocolClientStreams {
21
- #private;
22
- get(streamId: number): ProtocolClientBlobStream;
23
- add(source: ReadableStream, streamId: number, metadata: ProtocolBlobMetadata): ProtocolClientBlobStream;
24
- remove(streamId: number): void;
25
- abort(streamId: number, error?: Error): void;
26
- pull(streamId: number, size: number): Promise<ArrayBuffer | null>;
27
- end(streamId: number): void;
28
- clear(error?: Error): void;
29
- }
30
- export declare class ProtocolServerStreams<T extends ProtocolServerStream = ProtocolServerStream> {
31
- #private;
32
- has(streamId: number): boolean;
33
- get(streamId: number): T;
34
- add(streamId: number, stream: T): T;
35
- remove(streamId: number): void;
36
- abort(streamId: number): void;
37
- push(streamId: number, chunk: ArrayBuffer): Promise<void>;
38
- end(streamId: number): void;
39
- clear(error?: Error): void;
40
- }
41
- export type ProtocolTransportEventMap = {
42
- connected: [];
43
- disconnected: [reason: 'server' | 'client' | 'error'];
44
- };
45
- export interface ProtocolSendMetadata {
46
- callId?: number;
47
- streamId?: number;
48
- }
49
- export declare enum ProtocolTransportStatus {
50
- CONNECTED = "CONNECTED",
51
- DISCONNECTED = "DISCONNECTED",
52
- CONNECTING = "CONNECTING"
53
- }
54
- export declare abstract class ProtocolTransport<Options = unknown> extends EventEmitter<ProtocolTransportEventMap> {
55
- protected options?: Options | undefined;
56
- status: ProtocolTransportStatus;
57
- constructor(options?: Options | undefined);
58
- abstract connect(auth: any, transformer: ProtocolBaseTransformer): Promise<void>;
59
- abstract disconnect(): Promise<void>;
60
- abstract call(procedure: string, payload: any, options: ProtocolBaseClientCallOptions, transformer: ProtocolBaseTransformer): Promise<ProtocolClientCall>;
61
- abstract send(messageType: ClientMessageType, buffer: ArrayBuffer, metadata: ProtocolSendMetadata): Promise<void>;
62
- }
63
- export declare class ProtocolBaseTransformer {
64
- encodeRPC(_procedure: string, payload: any): any;
65
- decodeRPC(_procedure: string, payload: any): any;
66
- decodeRPCChunk(_procedure: string, payload: any): any;
67
- decodeEvent(_event: string, payload: any): any;
68
- }
69
- export type ProtocolClientCall = InteractivePromise<any> & {
70
- procedure: string;
71
- signal: AbortSignal;
72
- };
73
- export type ProtocolBaseClientOptions = {
74
- transport: ProtocolTransport;
75
- format: BaseClientFormat;
76
- transformer?: ProtocolBaseTransformer;
77
- timeout?: number;
78
- };
79
- export type ProtocolBaseClientCallOptions = {
80
- signal?: AbortSignal;
81
- timeout: number;
82
- };
83
- export declare class BaseProtocol<T extends Record<string, Record<string, any>> = Record<string, Record<string, any>>> extends EventEmitter<{
84
- [N in keyof T]: {
85
- [E in keyof T[N] as `${Extract<N, string>}/${Extract<E, string>}`]: [
86
- payload: T[N][E]
87
- ];
88
- };
89
- }[keyof T]> {
90
- readonly format: BaseClientFormat;
91
- protected readonly clientStreams: ProtocolClientStreams;
92
- protected readonly serverStreams: ProtocolServerStreams<ProtocolServerBlobStream>;
93
- protected readonly rpcStreams: ProtocolServerStreams;
94
- protected readonly calls: Map<number, ProtocolClientCall>;
95
- protected callId: number;
96
- protected streamId: number;
97
- constructor(format: BaseClientFormat);
98
- get contentType(): string;
99
- handleCallResponse(callId: number, call: ProtocolClientCall, response: OneOf<[
100
- {
101
- error: BaseProtocolError;
102
- },
103
- {
104
- result: any;
105
- stream?: any;
106
- }
107
- ]>, transformer: ProtocolBaseTransformer): void;
108
- handleRpcResponse({ callId, error, result, streams }: ProtocolRPCResponse, transformer: ProtocolBaseTransformer, stream?: ProtocolServerStream): ProtocolClientCall;
109
- handleRpcStreamResponse(response: ProtocolRPCResponse, stream: ProtocolServerStream, transformer: ProtocolBaseTransformer): ProtocolClientCall;
110
- createCall(procedure: string, options: ProtocolBaseClientCallOptions): InteractivePromise<unknown> & {
111
- procedure: string;
112
- signal: AbortSignal;
113
- };
114
- createRpc(procedure: string, payload: any, options: ProtocolBaseClientCallOptions, transformer: ProtocolBaseTransformer): {
115
- callId: number;
116
- call: InteractivePromise<unknown> & {
117
- procedure: string;
118
- signal: AbortSignal;
119
- };
120
- streams: Record<number, ProtocolClientBlobStream>;
121
- buffer: ArrayBuffer;
122
- };
123
- pushRpcStream(callId: number, chunk: any): void;
124
- endRpcStream(callId: number): void;
125
- abortRpcStream(callId: number): void;
126
- removeClientStream(streamId: number): void;
127
- pullClientStream(streamId: number, size: number): Promise<ArrayBuffer | null>;
128
- endClientStream(streamId: number): void;
129
- abortClientStream(streamId: number, error?: Error): void;
130
- addServerStream(stream: ProtocolServerBlobStream): void;
131
- removeServerStream(streamId: number): void;
132
- pushServerStream(streamId: number, chunk: ArrayBuffer): Promise<void>;
133
- endServerStream(streamId: number): void;
134
- abortServerStream(streamId: number, _error?: Error): void;
135
- emitEvent(event: string, payload: string, transformer: ProtocolBaseTransformer): void;
136
- }
137
- export declare class Protocol<T extends Record<string, Record<string, any>> = Record<string, Record<string, any>>> extends BaseProtocol<T> {
138
- handleServerMessage(buffer: ArrayBuffer, transport: ProtocolTransport, transformer: ProtocolBaseTransformer): void;
139
- protected [ServerMessageType.Event](buffer: ArrayBuffer, _transport: ProtocolTransport, transformer: ProtocolBaseTransformer): void;
140
- protected [ServerMessageType.RpcResponse](buffer: ArrayBuffer, transport: ProtocolTransport, transformer: ProtocolBaseTransformer): void;
141
- protected [ServerMessageType.RpcStreamResponse](buffer: ArrayBuffer, transport: ProtocolTransport, transformer: ProtocolBaseTransformer): void;
142
- protected [ServerMessageType.RpcStreamChunk](buffer: ArrayBuffer, _transport: ProtocolTransport, _transformer: ProtocolBaseTransformer): void;
143
- protected [ServerMessageType.RpcStreamEnd](buffer: ArrayBuffer, _transport: ProtocolTransport, _transformer: ProtocolBaseTransformer): void;
144
- protected [ServerMessageType.RpcStreamAbort](buffer: ArrayBuffer, _transport: ProtocolTransport, _transformer: ProtocolBaseTransformer): void;
145
- protected [ServerMessageType.ServerStreamPush](buffer: ArrayBuffer, transport: ProtocolTransport, _transformer: ProtocolBaseTransformer): void;
146
- protected [ServerMessageType.ServerStreamEnd](buffer: ArrayBuffer, _transport: ProtocolTransport, _transformer: ProtocolBaseTransformer): void;
147
- protected [ServerMessageType.ServerStreamAbort](buffer: ArrayBuffer, _transport: ProtocolTransport, _transformer: ProtocolBaseTransformer): void;
148
- protected [ServerMessageType.ClientStreamPull](buffer: ArrayBuffer, transport: ProtocolTransport, _transformer: ProtocolBaseTransformer): void;
149
- protected [ServerMessageType.ClientStreamAbort](buffer: ArrayBuffer, _transport: ProtocolTransport, _transformer: ProtocolBaseTransformer): void;
150
- }