@orpc/standard-server-peer 1.10.0 → 1.10.2
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/index.d.mts +123 -39
- package/dist/index.d.ts +123 -39
- package/dist/index.mjs +153 -59
- package/package.json +3 -3
package/dist/index.d.mts
CHANGED
|
@@ -1,11 +1,100 @@
|
|
|
1
1
|
import { Promisable, AsyncIdQueueCloseOptions as AsyncIdQueueCloseOptions$1, SetSpanErrorOptions, AsyncIteratorClassCleanupFn, AsyncIteratorClass } from '@orpc/shared';
|
|
2
|
-
import { StandardRequest, StandardResponse,
|
|
2
|
+
import { StandardRequest, EventMeta, StandardResponse, StandardBody, StandardHeaders } from '@orpc/standard-server';
|
|
3
3
|
|
|
4
4
|
type EncodedMessage = string | ArrayBufferLike | Uint8Array;
|
|
5
5
|
interface EncodedMessageSendFn {
|
|
6
6
|
(message: EncodedMessage): Promisable<void>;
|
|
7
7
|
}
|
|
8
8
|
|
|
9
|
+
declare enum MessageType {
|
|
10
|
+
REQUEST = 1,
|
|
11
|
+
RESPONSE = 2,
|
|
12
|
+
EVENT_ITERATOR = 3,
|
|
13
|
+
ABORT_SIGNAL = 4
|
|
14
|
+
}
|
|
15
|
+
type EventIteratorEvent = 'message' | 'error' | 'done';
|
|
16
|
+
interface EventIteratorPayload {
|
|
17
|
+
event: EventIteratorEvent;
|
|
18
|
+
data: unknown;
|
|
19
|
+
meta?: EventMeta;
|
|
20
|
+
}
|
|
21
|
+
interface RequestMessageMap {
|
|
22
|
+
[MessageType.REQUEST]: Omit<StandardRequest, 'signal'>;
|
|
23
|
+
[MessageType.EVENT_ITERATOR]: EventIteratorPayload;
|
|
24
|
+
[MessageType.ABORT_SIGNAL]: void;
|
|
25
|
+
}
|
|
26
|
+
interface ResponseMessageMap {
|
|
27
|
+
[MessageType.RESPONSE]: StandardResponse;
|
|
28
|
+
[MessageType.EVENT_ITERATOR]: EventIteratorPayload;
|
|
29
|
+
[MessageType.ABORT_SIGNAL]: void;
|
|
30
|
+
}
|
|
31
|
+
interface BaseMessageFormat<P = unknown> {
|
|
32
|
+
/**
|
|
33
|
+
* Client-guaranteed unique identifier
|
|
34
|
+
*/
|
|
35
|
+
i: string;
|
|
36
|
+
/**
|
|
37
|
+
* @default REQUEST | RESPONSE
|
|
38
|
+
*/
|
|
39
|
+
t?: MessageType;
|
|
40
|
+
p: P;
|
|
41
|
+
}
|
|
42
|
+
interface SerializedEventIteratorPayload {
|
|
43
|
+
e: EventIteratorEvent;
|
|
44
|
+
d: unknown;
|
|
45
|
+
m?: EventMeta;
|
|
46
|
+
}
|
|
47
|
+
interface SerializedRequestPayload {
|
|
48
|
+
/**
|
|
49
|
+
* The url of the request
|
|
50
|
+
*
|
|
51
|
+
* might be relative path if origin is `orpc://localhost`
|
|
52
|
+
*/
|
|
53
|
+
u: string;
|
|
54
|
+
b: StandardBody;
|
|
55
|
+
/**
|
|
56
|
+
* @default {}
|
|
57
|
+
*/
|
|
58
|
+
h?: StandardHeaders;
|
|
59
|
+
/**
|
|
60
|
+
* @default POST
|
|
61
|
+
*/
|
|
62
|
+
m?: string;
|
|
63
|
+
}
|
|
64
|
+
interface SerializedResponsePayload {
|
|
65
|
+
/**
|
|
66
|
+
* @default 200
|
|
67
|
+
*/
|
|
68
|
+
s?: number;
|
|
69
|
+
/**
|
|
70
|
+
* @default {}
|
|
71
|
+
*/
|
|
72
|
+
h?: StandardHeaders;
|
|
73
|
+
b: StandardBody;
|
|
74
|
+
}
|
|
75
|
+
type DecodedMessageUnion<TMap extends RequestMessageMap | ResponseMessageMap> = {
|
|
76
|
+
[K in keyof TMap]: [id: string, type: K, payload: TMap[K]];
|
|
77
|
+
}[keyof TMap];
|
|
78
|
+
type DecodedRequestMessage = DecodedMessageUnion<RequestMessageMap>;
|
|
79
|
+
type DecodedResponseMessage = DecodedMessageUnion<ResponseMessageMap>;
|
|
80
|
+
/**
|
|
81
|
+
* New serialization functions without Blob handling
|
|
82
|
+
*/
|
|
83
|
+
declare function serializeRequestMessage<T extends keyof RequestMessageMap>(id: string, type: T, payload: RequestMessageMap[T]): BaseMessageFormat;
|
|
84
|
+
declare function deserializeRequestMessage(message: BaseMessageFormat): DecodedRequestMessage;
|
|
85
|
+
declare function serializeResponseMessage<T extends keyof ResponseMessageMap>(id: string, type: T, payload: ResponseMessageMap[T]): BaseMessageFormat;
|
|
86
|
+
declare function deserializeResponseMessage(message: BaseMessageFormat): DecodedResponseMessage;
|
|
87
|
+
/**
|
|
88
|
+
* Original encode/decode functions now using the new serialize/deserialize functions
|
|
89
|
+
*/
|
|
90
|
+
declare function encodeRequestMessage<T extends keyof RequestMessageMap>(id: string, type: T, payload: RequestMessageMap[T]): Promise<EncodedMessage>;
|
|
91
|
+
declare function decodeRequestMessage(raw: EncodedMessage): Promise<DecodedRequestMessage>;
|
|
92
|
+
declare function encodeResponseMessage<T extends keyof ResponseMessageMap>(id: string, type: T, payload: ResponseMessageMap[T]): Promise<EncodedMessage>;
|
|
93
|
+
declare function decodeResponseMessage(raw: EncodedMessage): Promise<DecodedResponseMessage>;
|
|
94
|
+
|
|
95
|
+
interface experimental_RequestMessageSendFn {
|
|
96
|
+
(message: DecodedRequestMessage): Promisable<void>;
|
|
97
|
+
}
|
|
9
98
|
interface ClientPeerCloseOptions extends AsyncIdQueueCloseOptions$1 {
|
|
10
99
|
/**
|
|
11
100
|
* Should abort or not?
|
|
@@ -15,6 +104,15 @@ interface ClientPeerCloseOptions extends AsyncIdQueueCloseOptions$1 {
|
|
|
15
104
|
abort?: boolean;
|
|
16
105
|
}
|
|
17
106
|
declare class ClientPeer {
|
|
107
|
+
private readonly peer;
|
|
108
|
+
constructor(send: EncodedMessageSendFn);
|
|
109
|
+
get length(): number;
|
|
110
|
+
open(id: string): AbortController;
|
|
111
|
+
request(request: StandardRequest): Promise<StandardResponse>;
|
|
112
|
+
message(raw: EncodedMessage): Promise<void>;
|
|
113
|
+
close(options?: AsyncIdQueueCloseOptions$1): void;
|
|
114
|
+
}
|
|
115
|
+
declare class experimental_ClientPeerWithoutCodec {
|
|
18
116
|
private readonly idGenerator;
|
|
19
117
|
/**
|
|
20
118
|
* Queue of responses sent from server, awaiting consumption
|
|
@@ -33,46 +131,14 @@ declare class ClientPeer {
|
|
|
33
131
|
*/
|
|
34
132
|
private readonly cleanupFns;
|
|
35
133
|
private readonly send;
|
|
36
|
-
constructor(send:
|
|
134
|
+
constructor(send: experimental_RequestMessageSendFn);
|
|
37
135
|
get length(): number;
|
|
38
136
|
open(id: string): AbortController;
|
|
39
137
|
request(request: StandardRequest): Promise<StandardResponse>;
|
|
40
|
-
message(
|
|
138
|
+
message([id, type, payload]: DecodedResponseMessage): Promise<void>;
|
|
41
139
|
close(options?: AsyncIdQueueCloseOptions$1): void;
|
|
42
140
|
}
|
|
43
141
|
|
|
44
|
-
declare enum MessageType {
|
|
45
|
-
REQUEST = 1,
|
|
46
|
-
RESPONSE = 2,
|
|
47
|
-
EVENT_ITERATOR = 3,
|
|
48
|
-
ABORT_SIGNAL = 4
|
|
49
|
-
}
|
|
50
|
-
type EventIteratorEvent = 'message' | 'error' | 'done';
|
|
51
|
-
interface EventIteratorPayload {
|
|
52
|
-
event: EventIteratorEvent;
|
|
53
|
-
data: unknown;
|
|
54
|
-
meta?: EventMeta;
|
|
55
|
-
}
|
|
56
|
-
interface RequestMessageMap {
|
|
57
|
-
[MessageType.REQUEST]: Omit<StandardRequest, 'signal'>;
|
|
58
|
-
[MessageType.EVENT_ITERATOR]: EventIteratorPayload;
|
|
59
|
-
[MessageType.ABORT_SIGNAL]: void;
|
|
60
|
-
}
|
|
61
|
-
interface ResponseMessageMap {
|
|
62
|
-
[MessageType.RESPONSE]: StandardResponse;
|
|
63
|
-
[MessageType.EVENT_ITERATOR]: EventIteratorPayload;
|
|
64
|
-
[MessageType.ABORT_SIGNAL]: void;
|
|
65
|
-
}
|
|
66
|
-
type DecodedMessageUnion<TMap extends RequestMessageMap | ResponseMessageMap> = {
|
|
67
|
-
[K in keyof TMap]: [id: string, type: K, payload: TMap[K]];
|
|
68
|
-
}[keyof TMap];
|
|
69
|
-
type DecodedRequestMessage = DecodedMessageUnion<RequestMessageMap>;
|
|
70
|
-
type DecodedResponseMessage = DecodedMessageUnion<ResponseMessageMap>;
|
|
71
|
-
declare function encodeRequestMessage<T extends keyof RequestMessageMap>(id: string, type: T, payload: RequestMessageMap[T]): Promise<EncodedMessage>;
|
|
72
|
-
declare function decodeRequestMessage(raw: EncodedMessage): Promise<DecodedRequestMessage>;
|
|
73
|
-
declare function encodeResponseMessage<T extends keyof ResponseMessageMap>(id: string, type: T, payload: ResponseMessageMap[T]): Promise<EncodedMessage>;
|
|
74
|
-
declare function decodeResponseMessage(raw: EncodedMessage): Promise<DecodedResponseMessage>;
|
|
75
|
-
|
|
76
142
|
interface AsyncIdQueueCloseOptions {
|
|
77
143
|
id?: string;
|
|
78
144
|
reason?: unknown;
|
|
@@ -97,6 +163,9 @@ interface ToEventIteratorOptions extends SetSpanErrorOptions {
|
|
|
97
163
|
declare function toEventIterator(queue: AsyncIdQueue<EventIteratorPayload>, id: string, cleanup: AsyncIteratorClassCleanupFn, options?: ToEventIteratorOptions): AsyncIteratorClass<unknown>;
|
|
98
164
|
declare function resolveEventIterator(iterator: AsyncIterator<any>, callback: (payload: EventIteratorPayload) => Promise<'next' | 'abort'>): Promise<void>;
|
|
99
165
|
|
|
166
|
+
interface experimental_ResponseMessageSendFn {
|
|
167
|
+
(message: DecodedResponseMessage): Promisable<void>;
|
|
168
|
+
}
|
|
100
169
|
interface ServerPeerHandleRequestFn {
|
|
101
170
|
(request: StandardRequest): Promise<StandardResponse>;
|
|
102
171
|
}
|
|
@@ -109,6 +178,21 @@ interface ServerPeerCloseOptions extends AsyncIdQueueCloseOptions$1 {
|
|
|
109
178
|
abort?: boolean;
|
|
110
179
|
}
|
|
111
180
|
declare class ServerPeer {
|
|
181
|
+
private readonly peer;
|
|
182
|
+
constructor(send: EncodedMessageSendFn);
|
|
183
|
+
get length(): number;
|
|
184
|
+
open(id: string): AbortController;
|
|
185
|
+
/**
|
|
186
|
+
* @todo This method will return Promise<void> in the next major version.
|
|
187
|
+
*/
|
|
188
|
+
message(raw: EncodedMessage, handleRequest?: ServerPeerHandleRequestFn): Promise<[id: string, StandardRequest | undefined]>;
|
|
189
|
+
/**
|
|
190
|
+
* @deprecated Please pass the `handleRequest` (second arg) function to the `message` method instead.
|
|
191
|
+
*/
|
|
192
|
+
response(id: string, response: StandardResponse): Promise<void>;
|
|
193
|
+
close({ abort, ...options }?: ServerPeerCloseOptions): void;
|
|
194
|
+
}
|
|
195
|
+
declare class experimental_ServerPeerWithoutCodec {
|
|
112
196
|
/**
|
|
113
197
|
* Queue of event iterator messages sent from client, awaiting consumption
|
|
114
198
|
*/
|
|
@@ -118,13 +202,13 @@ declare class ServerPeer {
|
|
|
118
202
|
*/
|
|
119
203
|
private readonly clientControllers;
|
|
120
204
|
private readonly send;
|
|
121
|
-
constructor(send:
|
|
205
|
+
constructor(send: experimental_ResponseMessageSendFn);
|
|
122
206
|
get length(): number;
|
|
123
207
|
open(id: string): AbortController;
|
|
124
208
|
/**
|
|
125
209
|
* @todo This method will return Promise<void> in the next major version.
|
|
126
210
|
*/
|
|
127
|
-
message(
|
|
211
|
+
message([id, type, payload]: DecodedRequestMessage, handleRequest?: ServerPeerHandleRequestFn): Promise<[id: string, StandardRequest | undefined]>;
|
|
128
212
|
/**
|
|
129
213
|
* @deprecated Please pass the `handleRequest` (second arg) function to the `message` method instead.
|
|
130
214
|
*/
|
|
@@ -132,5 +216,5 @@ declare class ServerPeer {
|
|
|
132
216
|
close({ abort, ...options }?: ServerPeerCloseOptions): void;
|
|
133
217
|
}
|
|
134
218
|
|
|
135
|
-
export { ClientPeer, MessageType, ServerPeer, decodeRequestMessage, decodeResponseMessage, encodeRequestMessage, encodeResponseMessage, resolveEventIterator, toEventIterator };
|
|
136
|
-
export type { ClientPeerCloseOptions, DecodedRequestMessage, DecodedResponseMessage, EncodedMessage, EncodedMessageSendFn, EventIteratorEvent, EventIteratorPayload, RequestMessageMap, ResponseMessageMap, ServerPeerCloseOptions, ServerPeerHandleRequestFn, ToEventIteratorOptions };
|
|
219
|
+
export { ClientPeer, MessageType, ServerPeer, decodeRequestMessage, decodeResponseMessage, deserializeRequestMessage, deserializeResponseMessage, encodeRequestMessage, encodeResponseMessage, experimental_ClientPeerWithoutCodec, experimental_ServerPeerWithoutCodec, resolveEventIterator, serializeRequestMessage, serializeResponseMessage, toEventIterator };
|
|
220
|
+
export type { BaseMessageFormat, ClientPeerCloseOptions, DecodedMessageUnion, DecodedRequestMessage, DecodedResponseMessage, EncodedMessage, EncodedMessageSendFn, EventIteratorEvent, EventIteratorPayload, RequestMessageMap, ResponseMessageMap, SerializedEventIteratorPayload, SerializedRequestPayload, SerializedResponsePayload, ServerPeerCloseOptions, ServerPeerHandleRequestFn, ToEventIteratorOptions, experimental_RequestMessageSendFn, experimental_ResponseMessageSendFn };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,11 +1,100 @@
|
|
|
1
1
|
import { Promisable, AsyncIdQueueCloseOptions as AsyncIdQueueCloseOptions$1, SetSpanErrorOptions, AsyncIteratorClassCleanupFn, AsyncIteratorClass } from '@orpc/shared';
|
|
2
|
-
import { StandardRequest, StandardResponse,
|
|
2
|
+
import { StandardRequest, EventMeta, StandardResponse, StandardBody, StandardHeaders } from '@orpc/standard-server';
|
|
3
3
|
|
|
4
4
|
type EncodedMessage = string | ArrayBufferLike | Uint8Array;
|
|
5
5
|
interface EncodedMessageSendFn {
|
|
6
6
|
(message: EncodedMessage): Promisable<void>;
|
|
7
7
|
}
|
|
8
8
|
|
|
9
|
+
declare enum MessageType {
|
|
10
|
+
REQUEST = 1,
|
|
11
|
+
RESPONSE = 2,
|
|
12
|
+
EVENT_ITERATOR = 3,
|
|
13
|
+
ABORT_SIGNAL = 4
|
|
14
|
+
}
|
|
15
|
+
type EventIteratorEvent = 'message' | 'error' | 'done';
|
|
16
|
+
interface EventIteratorPayload {
|
|
17
|
+
event: EventIteratorEvent;
|
|
18
|
+
data: unknown;
|
|
19
|
+
meta?: EventMeta;
|
|
20
|
+
}
|
|
21
|
+
interface RequestMessageMap {
|
|
22
|
+
[MessageType.REQUEST]: Omit<StandardRequest, 'signal'>;
|
|
23
|
+
[MessageType.EVENT_ITERATOR]: EventIteratorPayload;
|
|
24
|
+
[MessageType.ABORT_SIGNAL]: void;
|
|
25
|
+
}
|
|
26
|
+
interface ResponseMessageMap {
|
|
27
|
+
[MessageType.RESPONSE]: StandardResponse;
|
|
28
|
+
[MessageType.EVENT_ITERATOR]: EventIteratorPayload;
|
|
29
|
+
[MessageType.ABORT_SIGNAL]: void;
|
|
30
|
+
}
|
|
31
|
+
interface BaseMessageFormat<P = unknown> {
|
|
32
|
+
/**
|
|
33
|
+
* Client-guaranteed unique identifier
|
|
34
|
+
*/
|
|
35
|
+
i: string;
|
|
36
|
+
/**
|
|
37
|
+
* @default REQUEST | RESPONSE
|
|
38
|
+
*/
|
|
39
|
+
t?: MessageType;
|
|
40
|
+
p: P;
|
|
41
|
+
}
|
|
42
|
+
interface SerializedEventIteratorPayload {
|
|
43
|
+
e: EventIteratorEvent;
|
|
44
|
+
d: unknown;
|
|
45
|
+
m?: EventMeta;
|
|
46
|
+
}
|
|
47
|
+
interface SerializedRequestPayload {
|
|
48
|
+
/**
|
|
49
|
+
* The url of the request
|
|
50
|
+
*
|
|
51
|
+
* might be relative path if origin is `orpc://localhost`
|
|
52
|
+
*/
|
|
53
|
+
u: string;
|
|
54
|
+
b: StandardBody;
|
|
55
|
+
/**
|
|
56
|
+
* @default {}
|
|
57
|
+
*/
|
|
58
|
+
h?: StandardHeaders;
|
|
59
|
+
/**
|
|
60
|
+
* @default POST
|
|
61
|
+
*/
|
|
62
|
+
m?: string;
|
|
63
|
+
}
|
|
64
|
+
interface SerializedResponsePayload {
|
|
65
|
+
/**
|
|
66
|
+
* @default 200
|
|
67
|
+
*/
|
|
68
|
+
s?: number;
|
|
69
|
+
/**
|
|
70
|
+
* @default {}
|
|
71
|
+
*/
|
|
72
|
+
h?: StandardHeaders;
|
|
73
|
+
b: StandardBody;
|
|
74
|
+
}
|
|
75
|
+
type DecodedMessageUnion<TMap extends RequestMessageMap | ResponseMessageMap> = {
|
|
76
|
+
[K in keyof TMap]: [id: string, type: K, payload: TMap[K]];
|
|
77
|
+
}[keyof TMap];
|
|
78
|
+
type DecodedRequestMessage = DecodedMessageUnion<RequestMessageMap>;
|
|
79
|
+
type DecodedResponseMessage = DecodedMessageUnion<ResponseMessageMap>;
|
|
80
|
+
/**
|
|
81
|
+
* New serialization functions without Blob handling
|
|
82
|
+
*/
|
|
83
|
+
declare function serializeRequestMessage<T extends keyof RequestMessageMap>(id: string, type: T, payload: RequestMessageMap[T]): BaseMessageFormat;
|
|
84
|
+
declare function deserializeRequestMessage(message: BaseMessageFormat): DecodedRequestMessage;
|
|
85
|
+
declare function serializeResponseMessage<T extends keyof ResponseMessageMap>(id: string, type: T, payload: ResponseMessageMap[T]): BaseMessageFormat;
|
|
86
|
+
declare function deserializeResponseMessage(message: BaseMessageFormat): DecodedResponseMessage;
|
|
87
|
+
/**
|
|
88
|
+
* Original encode/decode functions now using the new serialize/deserialize functions
|
|
89
|
+
*/
|
|
90
|
+
declare function encodeRequestMessage<T extends keyof RequestMessageMap>(id: string, type: T, payload: RequestMessageMap[T]): Promise<EncodedMessage>;
|
|
91
|
+
declare function decodeRequestMessage(raw: EncodedMessage): Promise<DecodedRequestMessage>;
|
|
92
|
+
declare function encodeResponseMessage<T extends keyof ResponseMessageMap>(id: string, type: T, payload: ResponseMessageMap[T]): Promise<EncodedMessage>;
|
|
93
|
+
declare function decodeResponseMessage(raw: EncodedMessage): Promise<DecodedResponseMessage>;
|
|
94
|
+
|
|
95
|
+
interface experimental_RequestMessageSendFn {
|
|
96
|
+
(message: DecodedRequestMessage): Promisable<void>;
|
|
97
|
+
}
|
|
9
98
|
interface ClientPeerCloseOptions extends AsyncIdQueueCloseOptions$1 {
|
|
10
99
|
/**
|
|
11
100
|
* Should abort or not?
|
|
@@ -15,6 +104,15 @@ interface ClientPeerCloseOptions extends AsyncIdQueueCloseOptions$1 {
|
|
|
15
104
|
abort?: boolean;
|
|
16
105
|
}
|
|
17
106
|
declare class ClientPeer {
|
|
107
|
+
private readonly peer;
|
|
108
|
+
constructor(send: EncodedMessageSendFn);
|
|
109
|
+
get length(): number;
|
|
110
|
+
open(id: string): AbortController;
|
|
111
|
+
request(request: StandardRequest): Promise<StandardResponse>;
|
|
112
|
+
message(raw: EncodedMessage): Promise<void>;
|
|
113
|
+
close(options?: AsyncIdQueueCloseOptions$1): void;
|
|
114
|
+
}
|
|
115
|
+
declare class experimental_ClientPeerWithoutCodec {
|
|
18
116
|
private readonly idGenerator;
|
|
19
117
|
/**
|
|
20
118
|
* Queue of responses sent from server, awaiting consumption
|
|
@@ -33,46 +131,14 @@ declare class ClientPeer {
|
|
|
33
131
|
*/
|
|
34
132
|
private readonly cleanupFns;
|
|
35
133
|
private readonly send;
|
|
36
|
-
constructor(send:
|
|
134
|
+
constructor(send: experimental_RequestMessageSendFn);
|
|
37
135
|
get length(): number;
|
|
38
136
|
open(id: string): AbortController;
|
|
39
137
|
request(request: StandardRequest): Promise<StandardResponse>;
|
|
40
|
-
message(
|
|
138
|
+
message([id, type, payload]: DecodedResponseMessage): Promise<void>;
|
|
41
139
|
close(options?: AsyncIdQueueCloseOptions$1): void;
|
|
42
140
|
}
|
|
43
141
|
|
|
44
|
-
declare enum MessageType {
|
|
45
|
-
REQUEST = 1,
|
|
46
|
-
RESPONSE = 2,
|
|
47
|
-
EVENT_ITERATOR = 3,
|
|
48
|
-
ABORT_SIGNAL = 4
|
|
49
|
-
}
|
|
50
|
-
type EventIteratorEvent = 'message' | 'error' | 'done';
|
|
51
|
-
interface EventIteratorPayload {
|
|
52
|
-
event: EventIteratorEvent;
|
|
53
|
-
data: unknown;
|
|
54
|
-
meta?: EventMeta;
|
|
55
|
-
}
|
|
56
|
-
interface RequestMessageMap {
|
|
57
|
-
[MessageType.REQUEST]: Omit<StandardRequest, 'signal'>;
|
|
58
|
-
[MessageType.EVENT_ITERATOR]: EventIteratorPayload;
|
|
59
|
-
[MessageType.ABORT_SIGNAL]: void;
|
|
60
|
-
}
|
|
61
|
-
interface ResponseMessageMap {
|
|
62
|
-
[MessageType.RESPONSE]: StandardResponse;
|
|
63
|
-
[MessageType.EVENT_ITERATOR]: EventIteratorPayload;
|
|
64
|
-
[MessageType.ABORT_SIGNAL]: void;
|
|
65
|
-
}
|
|
66
|
-
type DecodedMessageUnion<TMap extends RequestMessageMap | ResponseMessageMap> = {
|
|
67
|
-
[K in keyof TMap]: [id: string, type: K, payload: TMap[K]];
|
|
68
|
-
}[keyof TMap];
|
|
69
|
-
type DecodedRequestMessage = DecodedMessageUnion<RequestMessageMap>;
|
|
70
|
-
type DecodedResponseMessage = DecodedMessageUnion<ResponseMessageMap>;
|
|
71
|
-
declare function encodeRequestMessage<T extends keyof RequestMessageMap>(id: string, type: T, payload: RequestMessageMap[T]): Promise<EncodedMessage>;
|
|
72
|
-
declare function decodeRequestMessage(raw: EncodedMessage): Promise<DecodedRequestMessage>;
|
|
73
|
-
declare function encodeResponseMessage<T extends keyof ResponseMessageMap>(id: string, type: T, payload: ResponseMessageMap[T]): Promise<EncodedMessage>;
|
|
74
|
-
declare function decodeResponseMessage(raw: EncodedMessage): Promise<DecodedResponseMessage>;
|
|
75
|
-
|
|
76
142
|
interface AsyncIdQueueCloseOptions {
|
|
77
143
|
id?: string;
|
|
78
144
|
reason?: unknown;
|
|
@@ -97,6 +163,9 @@ interface ToEventIteratorOptions extends SetSpanErrorOptions {
|
|
|
97
163
|
declare function toEventIterator(queue: AsyncIdQueue<EventIteratorPayload>, id: string, cleanup: AsyncIteratorClassCleanupFn, options?: ToEventIteratorOptions): AsyncIteratorClass<unknown>;
|
|
98
164
|
declare function resolveEventIterator(iterator: AsyncIterator<any>, callback: (payload: EventIteratorPayload) => Promise<'next' | 'abort'>): Promise<void>;
|
|
99
165
|
|
|
166
|
+
interface experimental_ResponseMessageSendFn {
|
|
167
|
+
(message: DecodedResponseMessage): Promisable<void>;
|
|
168
|
+
}
|
|
100
169
|
interface ServerPeerHandleRequestFn {
|
|
101
170
|
(request: StandardRequest): Promise<StandardResponse>;
|
|
102
171
|
}
|
|
@@ -109,6 +178,21 @@ interface ServerPeerCloseOptions extends AsyncIdQueueCloseOptions$1 {
|
|
|
109
178
|
abort?: boolean;
|
|
110
179
|
}
|
|
111
180
|
declare class ServerPeer {
|
|
181
|
+
private readonly peer;
|
|
182
|
+
constructor(send: EncodedMessageSendFn);
|
|
183
|
+
get length(): number;
|
|
184
|
+
open(id: string): AbortController;
|
|
185
|
+
/**
|
|
186
|
+
* @todo This method will return Promise<void> in the next major version.
|
|
187
|
+
*/
|
|
188
|
+
message(raw: EncodedMessage, handleRequest?: ServerPeerHandleRequestFn): Promise<[id: string, StandardRequest | undefined]>;
|
|
189
|
+
/**
|
|
190
|
+
* @deprecated Please pass the `handleRequest` (second arg) function to the `message` method instead.
|
|
191
|
+
*/
|
|
192
|
+
response(id: string, response: StandardResponse): Promise<void>;
|
|
193
|
+
close({ abort, ...options }?: ServerPeerCloseOptions): void;
|
|
194
|
+
}
|
|
195
|
+
declare class experimental_ServerPeerWithoutCodec {
|
|
112
196
|
/**
|
|
113
197
|
* Queue of event iterator messages sent from client, awaiting consumption
|
|
114
198
|
*/
|
|
@@ -118,13 +202,13 @@ declare class ServerPeer {
|
|
|
118
202
|
*/
|
|
119
203
|
private readonly clientControllers;
|
|
120
204
|
private readonly send;
|
|
121
|
-
constructor(send:
|
|
205
|
+
constructor(send: experimental_ResponseMessageSendFn);
|
|
122
206
|
get length(): number;
|
|
123
207
|
open(id: string): AbortController;
|
|
124
208
|
/**
|
|
125
209
|
* @todo This method will return Promise<void> in the next major version.
|
|
126
210
|
*/
|
|
127
|
-
message(
|
|
211
|
+
message([id, type, payload]: DecodedRequestMessage, handleRequest?: ServerPeerHandleRequestFn): Promise<[id: string, StandardRequest | undefined]>;
|
|
128
212
|
/**
|
|
129
213
|
* @deprecated Please pass the `handleRequest` (second arg) function to the `message` method instead.
|
|
130
214
|
*/
|
|
@@ -132,5 +216,5 @@ declare class ServerPeer {
|
|
|
132
216
|
close({ abort, ...options }?: ServerPeerCloseOptions): void;
|
|
133
217
|
}
|
|
134
218
|
|
|
135
|
-
export { ClientPeer, MessageType, ServerPeer, decodeRequestMessage, decodeResponseMessage, encodeRequestMessage, encodeResponseMessage, resolveEventIterator, toEventIterator };
|
|
136
|
-
export type { ClientPeerCloseOptions, DecodedRequestMessage, DecodedResponseMessage, EncodedMessage, EncodedMessageSendFn, EventIteratorEvent, EventIteratorPayload, RequestMessageMap, ResponseMessageMap, ServerPeerCloseOptions, ServerPeerHandleRequestFn, ToEventIteratorOptions };
|
|
219
|
+
export { ClientPeer, MessageType, ServerPeer, decodeRequestMessage, decodeResponseMessage, deserializeRequestMessage, deserializeResponseMessage, encodeRequestMessage, encodeResponseMessage, experimental_ClientPeerWithoutCodec, experimental_ServerPeerWithoutCodec, resolveEventIterator, serializeRequestMessage, serializeResponseMessage, toEventIterator };
|
|
220
|
+
export type { BaseMessageFormat, ClientPeerCloseOptions, DecodedMessageUnion, DecodedRequestMessage, DecodedResponseMessage, EncodedMessage, EncodedMessageSendFn, EventIteratorEvent, EventIteratorPayload, RequestMessageMap, ResponseMessageMap, SerializedEventIteratorPayload, SerializedRequestPayload, SerializedResponsePayload, ServerPeerCloseOptions, ServerPeerHandleRequestFn, ToEventIteratorOptions, experimental_RequestMessageSendFn, experimental_ResponseMessageSendFn };
|
package/dist/index.mjs
CHANGED
|
@@ -10,7 +10,7 @@ var MessageType = /* @__PURE__ */ ((MessageType2) => {
|
|
|
10
10
|
MessageType2[MessageType2["ABORT_SIGNAL"] = 4] = "ABORT_SIGNAL";
|
|
11
11
|
return MessageType2;
|
|
12
12
|
})(MessageType || {});
|
|
13
|
-
|
|
13
|
+
function serializeRequestMessage(id, type, payload) {
|
|
14
14
|
if (type === 3 /* EVENT_ITERATOR */) {
|
|
15
15
|
const eventPayload = payload;
|
|
16
16
|
const serializedPayload2 = {
|
|
@@ -18,35 +18,26 @@ async function encodeRequestMessage(id, type, payload) {
|
|
|
18
18
|
d: eventPayload.data,
|
|
19
19
|
m: eventPayload.meta
|
|
20
20
|
};
|
|
21
|
-
return
|
|
21
|
+
return { i: id, t: type, p: serializedPayload2 };
|
|
22
22
|
}
|
|
23
23
|
if (type === 4 /* ABORT_SIGNAL */) {
|
|
24
|
-
return
|
|
24
|
+
return { i: id, t: type, p: payload };
|
|
25
25
|
}
|
|
26
26
|
const request = payload;
|
|
27
|
-
const { body: processedBody, headers: processedHeaders } = await serializeBodyAndHeaders(
|
|
28
|
-
request.body,
|
|
29
|
-
request.headers
|
|
30
|
-
);
|
|
31
27
|
const serializedPayload = {
|
|
32
28
|
u: request.url.toString().replace(SHORTABLE_ORIGIN_MATCHER, "/"),
|
|
33
|
-
b:
|
|
34
|
-
h: Object.keys(
|
|
29
|
+
b: request.body,
|
|
30
|
+
h: Object.keys(request.headers).length > 0 ? request.headers : void 0,
|
|
35
31
|
m: request.method === "POST" ? void 0 : request.method
|
|
36
32
|
};
|
|
37
|
-
|
|
33
|
+
return {
|
|
38
34
|
i: id,
|
|
39
35
|
p: serializedPayload
|
|
40
36
|
};
|
|
41
|
-
if (processedBody instanceof Blob) {
|
|
42
|
-
return encodeRawMessage(baseMessage, processedBody);
|
|
43
|
-
}
|
|
44
|
-
return encodeRawMessage(baseMessage);
|
|
45
37
|
}
|
|
46
|
-
|
|
47
|
-
const { json: message, buffer } = await decodeRawMessage(raw);
|
|
38
|
+
function deserializeRequestMessage(message) {
|
|
48
39
|
const id = message.i;
|
|
49
|
-
const type = message.t
|
|
40
|
+
const type = message.t ?? 1 /* REQUEST */;
|
|
50
41
|
if (type === 3 /* EVENT_ITERATOR */) {
|
|
51
42
|
const payload2 = message.p;
|
|
52
43
|
return [id, type, { event: payload2.e, data: payload2.d, meta: payload2.m }];
|
|
@@ -55,16 +46,14 @@ async function decodeRequestMessage(raw) {
|
|
|
55
46
|
return [id, type, message.p];
|
|
56
47
|
}
|
|
57
48
|
const payload = message.p;
|
|
58
|
-
const headers = payload.h ?? {};
|
|
59
|
-
const body = await deserializeBody(headers, payload.b, buffer);
|
|
60
49
|
return [id, 1 /* REQUEST */, {
|
|
61
50
|
url: payload.u.startsWith("/") ? new URL(`${SHORTABLE_ORIGIN}${payload.u}`) : new URL(payload.u),
|
|
62
|
-
headers,
|
|
51
|
+
headers: payload.h ?? {},
|
|
63
52
|
method: payload.m ?? "POST",
|
|
64
|
-
body
|
|
53
|
+
body: payload.b
|
|
65
54
|
}];
|
|
66
55
|
}
|
|
67
|
-
|
|
56
|
+
function serializeResponseMessage(id, type, payload) {
|
|
68
57
|
if (type === 3 /* EVENT_ITERATOR */) {
|
|
69
58
|
const eventPayload = payload;
|
|
70
59
|
const serializedPayload2 = {
|
|
@@ -72,32 +61,23 @@ async function encodeResponseMessage(id, type, payload) {
|
|
|
72
61
|
d: eventPayload.data,
|
|
73
62
|
m: eventPayload.meta
|
|
74
63
|
};
|
|
75
|
-
return
|
|
64
|
+
return { i: id, t: type, p: serializedPayload2 };
|
|
76
65
|
}
|
|
77
66
|
if (type === 4 /* ABORT_SIGNAL */) {
|
|
78
|
-
return
|
|
67
|
+
return { i: id, t: type, p: void 0 };
|
|
79
68
|
}
|
|
80
69
|
const response = payload;
|
|
81
|
-
const { body: processedBody, headers: processedHeaders } = await serializeBodyAndHeaders(
|
|
82
|
-
response.body,
|
|
83
|
-
response.headers
|
|
84
|
-
);
|
|
85
70
|
const serializedPayload = {
|
|
86
71
|
s: response.status === 200 ? void 0 : response.status,
|
|
87
|
-
h: Object.keys(
|
|
88
|
-
b:
|
|
72
|
+
h: Object.keys(response.headers).length > 0 ? response.headers : void 0,
|
|
73
|
+
b: response.body
|
|
89
74
|
};
|
|
90
|
-
|
|
75
|
+
return {
|
|
91
76
|
i: id,
|
|
92
77
|
p: serializedPayload
|
|
93
78
|
};
|
|
94
|
-
if (processedBody instanceof Blob) {
|
|
95
|
-
return encodeRawMessage(baseMessage, processedBody);
|
|
96
|
-
}
|
|
97
|
-
return encodeRawMessage(baseMessage);
|
|
98
79
|
}
|
|
99
|
-
|
|
100
|
-
const { json: message, buffer } = await decodeRawMessage(raw);
|
|
80
|
+
function deserializeResponseMessage(message) {
|
|
101
81
|
const id = message.i;
|
|
102
82
|
const type = message.t;
|
|
103
83
|
if (type === 3 /* EVENT_ITERATOR */) {
|
|
@@ -108,9 +88,71 @@ async function decodeResponseMessage(raw) {
|
|
|
108
88
|
return [id, type, message.p];
|
|
109
89
|
}
|
|
110
90
|
const payload = message.p;
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
91
|
+
return [id, 2 /* RESPONSE */, {
|
|
92
|
+
status: payload.s ?? 200,
|
|
93
|
+
headers: payload.h ?? {},
|
|
94
|
+
body: payload.b
|
|
95
|
+
}];
|
|
96
|
+
}
|
|
97
|
+
async function encodeRequestMessage(id, type, payload) {
|
|
98
|
+
if (type === 3 /* EVENT_ITERATOR */ || type === 4 /* ABORT_SIGNAL */) {
|
|
99
|
+
return encodeRawMessage(serializeRequestMessage(id, type, payload));
|
|
100
|
+
}
|
|
101
|
+
const request = payload;
|
|
102
|
+
const { body: processedBody, headers: processedHeaders } = await serializeBodyAndHeaders(
|
|
103
|
+
request.body,
|
|
104
|
+
request.headers
|
|
105
|
+
);
|
|
106
|
+
const modifiedRequest = {
|
|
107
|
+
...request,
|
|
108
|
+
body: processedBody instanceof Blob ? void 0 : processedBody,
|
|
109
|
+
headers: processedHeaders
|
|
110
|
+
};
|
|
111
|
+
const baseMessage = serializeRequestMessage(id, 1 /* REQUEST */, modifiedRequest);
|
|
112
|
+
if (processedBody instanceof Blob) {
|
|
113
|
+
return encodeRawMessage(baseMessage, processedBody);
|
|
114
|
+
}
|
|
115
|
+
return encodeRawMessage(baseMessage);
|
|
116
|
+
}
|
|
117
|
+
async function decodeRequestMessage(raw) {
|
|
118
|
+
const { json: message, buffer } = await decodeRawMessage(raw);
|
|
119
|
+
const [id, type, payload] = deserializeRequestMessage(message);
|
|
120
|
+
if (type === 3 /* EVENT_ITERATOR */ || type === 4 /* ABORT_SIGNAL */) {
|
|
121
|
+
return [id, type, payload];
|
|
122
|
+
}
|
|
123
|
+
const request = payload;
|
|
124
|
+
const body = await deserializeBody(request.headers, request.body, buffer);
|
|
125
|
+
return [id, type, { ...request, body }];
|
|
126
|
+
}
|
|
127
|
+
async function encodeResponseMessage(id, type, payload) {
|
|
128
|
+
if (type === 3 /* EVENT_ITERATOR */ || type === 4 /* ABORT_SIGNAL */) {
|
|
129
|
+
return encodeRawMessage(serializeResponseMessage(id, type, payload));
|
|
130
|
+
}
|
|
131
|
+
const response = payload;
|
|
132
|
+
const { body: processedBody, headers: processedHeaders } = await serializeBodyAndHeaders(
|
|
133
|
+
response.body,
|
|
134
|
+
response.headers
|
|
135
|
+
);
|
|
136
|
+
const modifiedResponse = {
|
|
137
|
+
...response,
|
|
138
|
+
body: processedBody instanceof Blob ? void 0 : processedBody,
|
|
139
|
+
headers: processedHeaders
|
|
140
|
+
};
|
|
141
|
+
const baseMessage = serializeResponseMessage(id, 2 /* RESPONSE */, modifiedResponse);
|
|
142
|
+
if (processedBody instanceof Blob) {
|
|
143
|
+
return encodeRawMessage(baseMessage, processedBody);
|
|
144
|
+
}
|
|
145
|
+
return encodeRawMessage(baseMessage);
|
|
146
|
+
}
|
|
147
|
+
async function decodeResponseMessage(raw) {
|
|
148
|
+
const { json: message, buffer } = await decodeRawMessage(raw);
|
|
149
|
+
const [id, type, payload] = deserializeResponseMessage(message);
|
|
150
|
+
if (type === 3 /* EVENT_ITERATOR */ || type === 4 /* ABORT_SIGNAL */) {
|
|
151
|
+
return [id, type, payload];
|
|
152
|
+
}
|
|
153
|
+
const response = payload;
|
|
154
|
+
const body = await deserializeBody(response.headers, response.body, buffer);
|
|
155
|
+
return [id, type, { ...response, body }];
|
|
114
156
|
}
|
|
115
157
|
async function serializeBodyAndHeaders(body, originalHeaders) {
|
|
116
158
|
const headers = { ...originalHeaders };
|
|
@@ -301,6 +343,29 @@ function resolveEventIterator(iterator, callback) {
|
|
|
301
343
|
}
|
|
302
344
|
|
|
303
345
|
class ClientPeer {
|
|
346
|
+
peer;
|
|
347
|
+
constructor(send) {
|
|
348
|
+
this.peer = new experimental_ClientPeerWithoutCodec(async ([id, type, payload]) => {
|
|
349
|
+
await send(await encodeRequestMessage(id, type, payload));
|
|
350
|
+
});
|
|
351
|
+
}
|
|
352
|
+
get length() {
|
|
353
|
+
return this.peer.length;
|
|
354
|
+
}
|
|
355
|
+
open(id) {
|
|
356
|
+
return this.peer.open(id);
|
|
357
|
+
}
|
|
358
|
+
async request(request) {
|
|
359
|
+
return this.peer.request(request);
|
|
360
|
+
}
|
|
361
|
+
async message(raw) {
|
|
362
|
+
return this.peer.message(await decodeResponseMessage(raw));
|
|
363
|
+
}
|
|
364
|
+
close(options = {}) {
|
|
365
|
+
return this.peer.close(options);
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
class experimental_ClientPeerWithoutCodec {
|
|
304
369
|
idGenerator = new SequentialIdGenerator();
|
|
305
370
|
/**
|
|
306
371
|
* Queue of responses sent from server, awaiting consumption
|
|
@@ -320,11 +385,12 @@ class ClientPeer {
|
|
|
320
385
|
cleanupFns = /* @__PURE__ */ new Map();
|
|
321
386
|
send;
|
|
322
387
|
constructor(send) {
|
|
323
|
-
this.send = async (
|
|
388
|
+
this.send = async (message) => {
|
|
389
|
+
const id = message[0];
|
|
324
390
|
if (this.serverControllers.has(id)) {
|
|
325
|
-
await send(
|
|
391
|
+
await send(message);
|
|
326
392
|
}
|
|
327
|
-
}
|
|
393
|
+
};
|
|
328
394
|
}
|
|
329
395
|
get length() {
|
|
330
396
|
return (+this.responseQueue.length + this.serverEventIteratorQueue.length + this.serverControllers.size + this.cleanupFns.size) / 4;
|
|
@@ -354,14 +420,14 @@ class ClientPeer {
|
|
|
354
420
|
otelConfig.propagation.inject(otelConfig.context.active(), headers);
|
|
355
421
|
request = { ...request, headers };
|
|
356
422
|
}
|
|
357
|
-
await this.send(id, MessageType.REQUEST, request);
|
|
423
|
+
await this.send([id, MessageType.REQUEST, request]);
|
|
358
424
|
if (signal?.aborted) {
|
|
359
|
-
await this.send(id, MessageType.ABORT_SIGNAL, void 0);
|
|
425
|
+
await this.send([id, MessageType.ABORT_SIGNAL, void 0]);
|
|
360
426
|
throw signal.reason;
|
|
361
427
|
}
|
|
362
428
|
let abortListener;
|
|
363
429
|
signal?.addEventListener("abort", abortListener = async () => {
|
|
364
|
-
await this.send(id, MessageType.ABORT_SIGNAL, void 0);
|
|
430
|
+
await this.send([id, MessageType.ABORT_SIGNAL, void 0]);
|
|
365
431
|
this.close({ id, reason: signal.reason });
|
|
366
432
|
}, { once: true });
|
|
367
433
|
this.cleanupFns.get(id)?.push(() => {
|
|
@@ -373,7 +439,7 @@ class ClientPeer {
|
|
|
373
439
|
if (serverController.signal.aborted) {
|
|
374
440
|
return "abort";
|
|
375
441
|
}
|
|
376
|
-
await this.send(id, MessageType.EVENT_ITERATOR, payload);
|
|
442
|
+
await this.send([id, MessageType.EVENT_ITERATOR, payload]);
|
|
377
443
|
return "next";
|
|
378
444
|
});
|
|
379
445
|
}
|
|
@@ -385,7 +451,7 @@ class ClientPeer {
|
|
|
385
451
|
async (reason) => {
|
|
386
452
|
try {
|
|
387
453
|
if (reason !== "next") {
|
|
388
|
-
await this.send(id, MessageType.ABORT_SIGNAL, void 0);
|
|
454
|
+
await this.send([id, MessageType.ABORT_SIGNAL, void 0]);
|
|
389
455
|
}
|
|
390
456
|
} finally {
|
|
391
457
|
this.close({ id });
|
|
@@ -407,8 +473,7 @@ class ClientPeer {
|
|
|
407
473
|
}
|
|
408
474
|
);
|
|
409
475
|
}
|
|
410
|
-
async message(
|
|
411
|
-
const [id, type, payload] = await decodeResponseMessage(raw);
|
|
476
|
+
async message([id, type, payload]) {
|
|
412
477
|
if (type === MessageType.ABORT_SIGNAL) {
|
|
413
478
|
this.serverControllers.get(id)?.abort();
|
|
414
479
|
return;
|
|
@@ -442,6 +507,35 @@ class ClientPeer {
|
|
|
442
507
|
}
|
|
443
508
|
|
|
444
509
|
class ServerPeer {
|
|
510
|
+
peer;
|
|
511
|
+
constructor(send) {
|
|
512
|
+
this.peer = new experimental_ServerPeerWithoutCodec(async ([id, type, payload]) => {
|
|
513
|
+
await send(await encodeResponseMessage(id, type, payload));
|
|
514
|
+
});
|
|
515
|
+
}
|
|
516
|
+
get length() {
|
|
517
|
+
return this.peer.length;
|
|
518
|
+
}
|
|
519
|
+
open(id) {
|
|
520
|
+
return this.peer.open(id);
|
|
521
|
+
}
|
|
522
|
+
/**
|
|
523
|
+
* @todo This method will return Promise<void> in the next major version.
|
|
524
|
+
*/
|
|
525
|
+
async message(raw, handleRequest) {
|
|
526
|
+
return this.peer.message(await decodeRequestMessage(raw), handleRequest);
|
|
527
|
+
}
|
|
528
|
+
/**
|
|
529
|
+
* @deprecated Please pass the `handleRequest` (second arg) function to the `message` method instead.
|
|
530
|
+
*/
|
|
531
|
+
async response(id, response) {
|
|
532
|
+
return this.peer.response(id, response);
|
|
533
|
+
}
|
|
534
|
+
close({ abort = true, ...options } = {}) {
|
|
535
|
+
return this.peer.close({ ...options, abort });
|
|
536
|
+
}
|
|
537
|
+
}
|
|
538
|
+
class experimental_ServerPeerWithoutCodec {
|
|
445
539
|
/**
|
|
446
540
|
* Queue of event iterator messages sent from client, awaiting consumption
|
|
447
541
|
*/
|
|
@@ -452,11 +546,12 @@ class ServerPeer {
|
|
|
452
546
|
clientControllers = /* @__PURE__ */ new Map();
|
|
453
547
|
send;
|
|
454
548
|
constructor(send) {
|
|
455
|
-
this.send =
|
|
549
|
+
this.send = async (message) => {
|
|
550
|
+
const id = message[0];
|
|
456
551
|
if (this.clientControllers.has(id)) {
|
|
457
|
-
await send(
|
|
552
|
+
await send(message);
|
|
458
553
|
}
|
|
459
|
-
}
|
|
554
|
+
};
|
|
460
555
|
}
|
|
461
556
|
get length() {
|
|
462
557
|
return (this.clientEventIteratorQueue.length + this.clientControllers.size) / 2;
|
|
@@ -470,8 +565,7 @@ class ServerPeer {
|
|
|
470
565
|
/**
|
|
471
566
|
* @todo This method will return Promise<void> in the next major version.
|
|
472
567
|
*/
|
|
473
|
-
async message(
|
|
474
|
-
const [id, type, payload] = await decodeRequestMessage(raw);
|
|
568
|
+
async message([id, type, payload], handleRequest) {
|
|
475
569
|
if (type === MessageType.ABORT_SIGNAL) {
|
|
476
570
|
this.close({ id, reason: new AbortError("Client aborted the request") });
|
|
477
571
|
return [id, void 0];
|
|
@@ -492,7 +586,7 @@ class ServerPeer {
|
|
|
492
586
|
id,
|
|
493
587
|
async (reason) => {
|
|
494
588
|
if (reason !== "next") {
|
|
495
|
-
await this.send(id, MessageType.ABORT_SIGNAL, void 0);
|
|
589
|
+
await this.send([id, MessageType.ABORT_SIGNAL, void 0]);
|
|
496
590
|
}
|
|
497
591
|
},
|
|
498
592
|
{ signal }
|
|
@@ -536,7 +630,7 @@ class ServerPeer {
|
|
|
536
630
|
return;
|
|
537
631
|
}
|
|
538
632
|
try {
|
|
539
|
-
await this.send(id, MessageType.RESPONSE, response);
|
|
633
|
+
await this.send([id, MessageType.RESPONSE, response]);
|
|
540
634
|
if (!signal.aborted && isAsyncIteratorObject(response.body)) {
|
|
541
635
|
if (response.body instanceof HibernationEventIterator) {
|
|
542
636
|
response.body.hibernationCallback?.(id);
|
|
@@ -546,7 +640,7 @@ class ServerPeer {
|
|
|
546
640
|
if (signal.aborted) {
|
|
547
641
|
return "abort";
|
|
548
642
|
}
|
|
549
|
-
await this.send(id, MessageType.EVENT_ITERATOR, payload);
|
|
643
|
+
await this.send([id, MessageType.EVENT_ITERATOR, payload]);
|
|
550
644
|
return "next";
|
|
551
645
|
});
|
|
552
646
|
}
|
|
@@ -573,4 +667,4 @@ class ServerPeer {
|
|
|
573
667
|
}
|
|
574
668
|
}
|
|
575
669
|
|
|
576
|
-
export { ClientPeer, MessageType, ServerPeer, decodeRequestMessage, decodeResponseMessage, encodeRequestMessage, encodeResponseMessage, resolveEventIterator, toEventIterator };
|
|
670
|
+
export { ClientPeer, MessageType, ServerPeer, decodeRequestMessage, decodeResponseMessage, deserializeRequestMessage, deserializeResponseMessage, encodeRequestMessage, encodeResponseMessage, experimental_ClientPeerWithoutCodec, experimental_ServerPeerWithoutCodec, resolveEventIterator, serializeRequestMessage, serializeResponseMessage, toEventIterator };
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@orpc/standard-server-peer",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "1.10.
|
|
4
|
+
"version": "1.10.2",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"homepage": "https://unnoq.com",
|
|
7
7
|
"repository": {
|
|
@@ -23,8 +23,8 @@
|
|
|
23
23
|
"dist"
|
|
24
24
|
],
|
|
25
25
|
"dependencies": {
|
|
26
|
-
"@orpc/shared": "1.10.
|
|
27
|
-
"@orpc/standard-server": "1.10.
|
|
26
|
+
"@orpc/shared": "1.10.2",
|
|
27
|
+
"@orpc/standard-server": "1.10.2"
|
|
28
28
|
},
|
|
29
29
|
"scripts": {
|
|
30
30
|
"build": "unbuild",
|