@nmtjs/protocol 0.12.5 → 0.12.6
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.d.ts +17 -0
- package/dist/client/events.js +26 -30
- package/dist/client/format.d.ts +21 -0
- package/dist/client/format.js +2 -3
- package/dist/client/index.d.ts +5 -0
- package/dist/client/index.js +1 -2
- package/dist/client/protocol.d.ts +149 -0
- package/dist/client/protocol.js +342 -343
- package/dist/client/stream.d.ts +28 -0
- package/dist/client/stream.js +88 -80
- package/dist/client/types.d.ts +8 -0
- package/dist/client/types.js +0 -2
- package/dist/common/binary.d.ts +19 -0
- package/dist/common/binary.js +17 -17
- package/dist/common/blob.d.ts +22 -0
- package/dist/common/blob.js +44 -40
- package/dist/common/enums.d.ts +41 -0
- package/dist/common/enums.js +45 -47
- package/dist/common/index.d.ts +4 -0
- package/dist/common/index.js +0 -2
- package/dist/common/types.d.ts +34 -0
- package/dist/common/types.js +0 -2
- package/dist/server/api.d.ts +34 -0
- package/dist/server/api.js +7 -9
- package/dist/server/connection.d.ts +25 -0
- package/dist/server/connection.js +18 -20
- package/dist/server/constants.d.ts +4 -0
- package/dist/server/constants.js +2 -4
- package/dist/server/format.d.ts +40 -0
- package/dist/server/format.js +56 -43
- package/dist/server/index.d.ts +11 -0
- package/dist/server/index.js +0 -2
- package/dist/server/injectables.d.ts +14 -0
- package/dist/server/injectables.js +18 -20
- package/dist/server/protocol.d.ts +118 -0
- package/dist/server/protocol.js +365 -384
- package/dist/server/registry.d.ts +3 -0
- package/dist/server/registry.js +3 -4
- package/dist/server/stream.d.ts +12 -0
- package/dist/server/stream.js +28 -26
- package/dist/server/transport.d.ts +23 -0
- package/dist/server/transport.js +1 -7
- package/dist/server/types.d.ts +13 -0
- package/dist/server/types.js +0 -2
- package/dist/server/utils.d.ts +15 -0
- package/dist/server/utils.js +16 -13
- package/package.json +17 -14
- package/dist/client/events.js.map +0 -1
- package/dist/client/format.js.map +0 -1
- package/dist/client/index.js.map +0 -1
- package/dist/client/protocol.js.map +0 -1
- package/dist/client/stream.js.map +0 -1
- package/dist/client/types.js.map +0 -1
- package/dist/common/binary.js.map +0 -1
- package/dist/common/blob.js.map +0 -1
- package/dist/common/enums.js.map +0 -1
- package/dist/common/index.js.map +0 -1
- package/dist/common/types.js.map +0 -1
- package/dist/server/api.js.map +0 -1
- package/dist/server/connection.js.map +0 -1
- package/dist/server/constants.js.map +0 -1
- package/dist/server/format.js.map +0 -1
- package/dist/server/index.js.map +0 -1
- package/dist/server/injectables.js.map +0 -1
- package/dist/server/protocol.js.map +0 -1
- package/dist/server/registry.js.map +0 -1
- package/dist/server/stream.js.map +0 -1
- package/dist/server/transport.js.map +0 -1
- package/dist/server/types.js.map +0 -1
- package/dist/server/utils.js.map +0 -1
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { Callback } from '@nmtjs/common';
|
|
2
|
+
export type EventMap = {
|
|
3
|
+
[K: string]: any[];
|
|
4
|
+
};
|
|
5
|
+
/**
|
|
6
|
+
* Very simple node-like event emitter wrapper around EventTarget
|
|
7
|
+
*
|
|
8
|
+
* @todo add errors and promise rejections handling
|
|
9
|
+
*/
|
|
10
|
+
export declare class EventEmitter<Events extends EventMap = EventMap, EventNames extends Extract<keyof Events, string> = Extract<keyof Events, string>> {
|
|
11
|
+
#private;
|
|
12
|
+
static once<T extends EventEmitter, E extends T extends EventEmitter<any, infer Event> ? Event : never>(ee: T, event: E): Promise<unknown>;
|
|
13
|
+
on<E extends EventNames>(event: E | (Object & string), listener: (...args: Events[E]) => void, options?: AddEventListenerOptions): () => void;
|
|
14
|
+
once<E extends EventNames>(event: E | (Object & string), listener: (...args: Events[E]) => void, options?: AddEventListenerOptions): () => void;
|
|
15
|
+
off(event: EventNames | (Object & string), listener: Callback): void;
|
|
16
|
+
emit<E extends EventNames | (Object & string)>(event: E, ...args: E extends EventEmitter ? Events[E] : any[]): boolean;
|
|
17
|
+
}
|
package/dist/client/events.js
CHANGED
|
@@ -1,33 +1,29 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Very simple node-like event emitter wrapper around EventTarget
|
|
3
|
-
*
|
|
4
|
-
* @todo add errors and promise rejections handling
|
|
5
|
-
*/
|
|
2
|
+
* Very simple node-like event emitter wrapper around EventTarget
|
|
3
|
+
*
|
|
4
|
+
* @todo add errors and promise rejections handling
|
|
5
|
+
*/
|
|
6
6
|
export class EventEmitter {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
return this.#target.dispatchEvent(new CustomEvent(event, { detail: args }));
|
|
30
|
-
}
|
|
7
|
+
static once(ee, event) {
|
|
8
|
+
return new Promise((resolve) => ee.once(event, resolve));
|
|
9
|
+
}
|
|
10
|
+
#target = new EventTarget();
|
|
11
|
+
#listeners = new Map();
|
|
12
|
+
on(event, listener, options) {
|
|
13
|
+
const wrapper = (event) => listener(...event.detail);
|
|
14
|
+
this.#listeners.set(listener, wrapper);
|
|
15
|
+
this.#target.addEventListener(event, wrapper, options);
|
|
16
|
+
return () => this.#target.removeEventListener(event, wrapper);
|
|
17
|
+
}
|
|
18
|
+
once(event, listener, options) {
|
|
19
|
+
return this.on(event, listener, { ...options, once: true });
|
|
20
|
+
}
|
|
21
|
+
off(event, listener) {
|
|
22
|
+
const wrapper = this.#listeners.get(listener);
|
|
23
|
+
if (wrapper)
|
|
24
|
+
this.#target.removeEventListener(event, wrapper);
|
|
25
|
+
}
|
|
26
|
+
emit(event, ...args) {
|
|
27
|
+
return this.#target.dispatchEvent(new CustomEvent(event, { detail: args }));
|
|
28
|
+
}
|
|
31
29
|
}
|
|
32
|
-
|
|
33
|
-
//# sourceMappingURL=events.js.map
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { DecodeRPCContext, EncodeRPCContext, ProtocolRPC, ProtocolRPCResponse } from '../common/types.ts';
|
|
2
|
+
import type { ProtocolClientBlobStream, ProtocolServerBlobStream } from './stream.ts';
|
|
3
|
+
export type ProtocolRPCEncode = {
|
|
4
|
+
buffer: ArrayBuffer;
|
|
5
|
+
streams: Record<number, ProtocolClientBlobStream>;
|
|
6
|
+
};
|
|
7
|
+
export interface BaseClientDecoder {
|
|
8
|
+
decode(buffer: ArrayBuffer): any;
|
|
9
|
+
decodeRPC(buffer: ArrayBuffer, context: DecodeRPCContext<ProtocolServerBlobStream>): ProtocolRPCResponse<ProtocolServerBlobStream>;
|
|
10
|
+
}
|
|
11
|
+
export interface BaseClientEncoder {
|
|
12
|
+
encode(data: any): ArrayBuffer;
|
|
13
|
+
encodeRPC(rpc: ProtocolRPC, context: EncodeRPCContext<ProtocolClientBlobStream>): ProtocolRPCEncode;
|
|
14
|
+
}
|
|
15
|
+
export declare abstract class BaseClientFormat implements BaseClientDecoder, BaseClientEncoder {
|
|
16
|
+
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>;
|
|
21
|
+
}
|
package/dist/client/format.js
CHANGED
|
@@ -1,3 +1,2 @@
|
|
|
1
|
-
export class BaseClientFormat {
|
|
2
|
-
|
|
3
|
-
//# sourceMappingURL=format.js.map
|
|
1
|
+
export class BaseClientFormat {
|
|
2
|
+
}
|
package/dist/client/index.js
CHANGED
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import { type InteractivePromise, type OneOf } from '@nmtjs/common';
|
|
2
|
+
import type { ProtocolBlobMetadata } from '../common/blob.ts';
|
|
3
|
+
import { ClientMessageType, ServerMessageType } from '../common/enums.ts';
|
|
4
|
+
import type { BaseProtocolError, ProtocolRPC, ProtocolRPCResponse } from '../common/types.ts';
|
|
5
|
+
import { EventEmitter } from './events.ts';
|
|
6
|
+
import type { BaseClientFormat } from './format.ts';
|
|
7
|
+
import { ProtocolClientBlobStream, ProtocolServerBlobStream, ProtocolServerStream } from './stream.ts';
|
|
8
|
+
export declare class ProtocolError extends Error implements BaseProtocolError {
|
|
9
|
+
code: string;
|
|
10
|
+
data?: any;
|
|
11
|
+
constructor(code: string, message?: string, data?: any);
|
|
12
|
+
get message(): string;
|
|
13
|
+
toString(): string;
|
|
14
|
+
toJSON(): {
|
|
15
|
+
code: string;
|
|
16
|
+
message: string;
|
|
17
|
+
data: any;
|
|
18
|
+
};
|
|
19
|
+
}
|
|
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: [];
|
|
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 extends EventEmitter<ProtocolTransportEventMap> {
|
|
55
|
+
status: ProtocolTransportStatus;
|
|
56
|
+
abstract connect(auth: any, transformer: ProtocolBaseTransformer): Promise<void>;
|
|
57
|
+
abstract disconnect(): Promise<void>;
|
|
58
|
+
abstract call(namespace: string, procedure: string, payload: any, options: ProtocolBaseClientCallOptions, transformer: ProtocolBaseTransformer): Promise<ProtocolClientCall>;
|
|
59
|
+
abstract send(messageType: ClientMessageType, buffer: ArrayBuffer, metadata: ProtocolSendMetadata): Promise<void>;
|
|
60
|
+
}
|
|
61
|
+
export declare class ProtocolBaseTransformer {
|
|
62
|
+
encodeRPC(namespace: string, procedure: string, payload: any): any;
|
|
63
|
+
decodeRPC(namespace: string, procedure: string, payload: any): any;
|
|
64
|
+
decodeRPCChunk(namespace: string, procedure: string, payload: any): any;
|
|
65
|
+
decodeEvent(namespace: string, event: string, payload: any): any;
|
|
66
|
+
}
|
|
67
|
+
export type ProtocolClientCall = InteractivePromise<any> & Pick<ProtocolRPC, 'namespace' | 'procedure'> & {
|
|
68
|
+
signal: AbortSignal;
|
|
69
|
+
};
|
|
70
|
+
export type ProtocolBaseClientOptions = {
|
|
71
|
+
transport: ProtocolTransport;
|
|
72
|
+
format: BaseClientFormat;
|
|
73
|
+
transformer?: ProtocolBaseTransformer;
|
|
74
|
+
timeout?: number;
|
|
75
|
+
};
|
|
76
|
+
export type ProtocolBaseClientCallOptions = {
|
|
77
|
+
signal?: AbortSignal;
|
|
78
|
+
timeout: number;
|
|
79
|
+
};
|
|
80
|
+
export declare class BaseProtocol<T extends Record<string, Record<string, any>> = Record<string, Record<string, any>>> extends EventEmitter<{
|
|
81
|
+
[N in keyof T]: {
|
|
82
|
+
[E in keyof T[N] as `${Extract<N, string>}/${Extract<E, string>}`]: [
|
|
83
|
+
payload: T[N][E]
|
|
84
|
+
];
|
|
85
|
+
};
|
|
86
|
+
}[keyof T]> {
|
|
87
|
+
readonly format: BaseClientFormat;
|
|
88
|
+
protected readonly clientStreams: ProtocolClientStreams;
|
|
89
|
+
protected readonly serverStreams: ProtocolServerStreams<ProtocolServerBlobStream>;
|
|
90
|
+
protected readonly rpcStreams: ProtocolServerStreams;
|
|
91
|
+
protected readonly calls: Map<number, ProtocolClientCall>;
|
|
92
|
+
protected callId: number;
|
|
93
|
+
protected streamId: number;
|
|
94
|
+
constructor(format: BaseClientFormat);
|
|
95
|
+
get contentType(): string;
|
|
96
|
+
handleCallResponse(callId: number, call: ProtocolClientCall, response: OneOf<[
|
|
97
|
+
{
|
|
98
|
+
error: BaseProtocolError;
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
result: any;
|
|
102
|
+
stream?: any;
|
|
103
|
+
}
|
|
104
|
+
]>, transformer: ProtocolBaseTransformer): void;
|
|
105
|
+
handleRpcResponse({ callId, error, result, streams }: ProtocolRPCResponse, transformer: ProtocolBaseTransformer, stream?: ProtocolServerStream): ProtocolClientCall;
|
|
106
|
+
handleRpcStreamResponse(response: ProtocolRPCResponse, stream: ProtocolServerStream, transformer: ProtocolBaseTransformer): ProtocolClientCall;
|
|
107
|
+
createCall(namespace: string, procedure: string, options: ProtocolBaseClientCallOptions): InteractivePromise<unknown> & {
|
|
108
|
+
namespace: string;
|
|
109
|
+
procedure: string;
|
|
110
|
+
signal: AbortSignal;
|
|
111
|
+
};
|
|
112
|
+
createRpc(namespace: string, procedure: string, payload: any, options: ProtocolBaseClientCallOptions, transformer: ProtocolBaseTransformer): {
|
|
113
|
+
callId: number;
|
|
114
|
+
call: InteractivePromise<unknown> & {
|
|
115
|
+
namespace: string;
|
|
116
|
+
procedure: string;
|
|
117
|
+
signal: AbortSignal;
|
|
118
|
+
};
|
|
119
|
+
streams: Record<number, ProtocolClientBlobStream>;
|
|
120
|
+
buffer: ArrayBuffer;
|
|
121
|
+
};
|
|
122
|
+
pushRpcStream(callId: number, chunk: any): void;
|
|
123
|
+
endRpcStream(callId: number): void;
|
|
124
|
+
abortRpcStream(callId: number): void;
|
|
125
|
+
removeClientStream(streamId: number): void;
|
|
126
|
+
pullClientStream(streamId: number, size: number): Promise<ArrayBuffer | null>;
|
|
127
|
+
endClientStream(streamId: number): void;
|
|
128
|
+
abortClientStream(streamId: number, error?: Error): void;
|
|
129
|
+
addServerStream(stream: ProtocolServerBlobStream): void;
|
|
130
|
+
removeServerStream(streamId: number): void;
|
|
131
|
+
pushServerStream(streamId: number, chunk: ArrayBuffer): Promise<void>;
|
|
132
|
+
endServerStream(streamId: number): void;
|
|
133
|
+
abortServerStream(streamId: number, error?: Error): void;
|
|
134
|
+
emitEvent(namespace: string, event: string, payload: string, transformer: ProtocolBaseTransformer): void;
|
|
135
|
+
}
|
|
136
|
+
export declare class Protocol<T extends Record<string, Record<string, any>> = Record<string, Record<string, any>>> extends BaseProtocol<T> {
|
|
137
|
+
handleServerMessage(buffer: ArrayBuffer, transport: ProtocolTransport, transformer: ProtocolBaseTransformer): void;
|
|
138
|
+
protected [ServerMessageType.Event](buffer: ArrayBuffer, transport: ProtocolTransport, transformer: ProtocolBaseTransformer): void;
|
|
139
|
+
protected [ServerMessageType.RpcResponse](buffer: ArrayBuffer, transport: ProtocolTransport, transformer: ProtocolBaseTransformer): void;
|
|
140
|
+
protected [ServerMessageType.RpcStreamResponse](buffer: ArrayBuffer, transport: ProtocolTransport, transformer: ProtocolBaseTransformer): void;
|
|
141
|
+
protected [ServerMessageType.RpcStreamChunk](buffer: ArrayBuffer, transport: ProtocolTransport, transformer: ProtocolBaseTransformer): void;
|
|
142
|
+
protected [ServerMessageType.RpcStreamEnd](buffer: ArrayBuffer, transport: ProtocolTransport, transformer: ProtocolBaseTransformer): void;
|
|
143
|
+
protected [ServerMessageType.RpcStreamAbort](buffer: ArrayBuffer, transport: ProtocolTransport, transformer: ProtocolBaseTransformer): void;
|
|
144
|
+
protected [ServerMessageType.ServerStreamPush](buffer: ArrayBuffer, transport: ProtocolTransport, transformer: ProtocolBaseTransformer): void;
|
|
145
|
+
protected [ServerMessageType.ServerStreamEnd](buffer: ArrayBuffer, transport: ProtocolTransport, transformer: ProtocolBaseTransformer): void;
|
|
146
|
+
protected [ServerMessageType.ServerStreamAbort](buffer: ArrayBuffer, transport: ProtocolTransport, transformer: ProtocolBaseTransformer): void;
|
|
147
|
+
protected [ServerMessageType.ClientStreamPull](buffer: ArrayBuffer, transport: ProtocolTransport, transformer: ProtocolBaseTransformer): void;
|
|
148
|
+
protected [ServerMessageType.ClientStreamAbort](buffer: ArrayBuffer, transport: ProtocolTransport, transformer: ProtocolBaseTransformer): void;
|
|
149
|
+
}
|