@trpc/server 10.0.0-alpha.45 → 10.0.0-alpha.46
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/adapters/aws-lambda/index.js +1 -1
- package/adapters/fastify/index.js +1 -1
- package/adapters/fetch/index.js +1 -1
- package/adapters/node-http/index.js +1 -1
- package/dist/TRPCError-6f61762c.mjs +54 -0
- package/dist/TRPCError-9c7830b4.js +58 -0
- package/dist/adapters/aws-lambda/index.d.ts.map +1 -1
- package/dist/adapters/aws-lambda/index.js +119 -156
- package/dist/adapters/aws-lambda/index.mjs +119 -156
- package/dist/adapters/aws-lambda/utils.d.ts.map +1 -1
- package/dist/adapters/express.d.ts.map +1 -1
- package/dist/adapters/express.js +14 -14
- package/dist/adapters/express.mjs +14 -14
- package/dist/adapters/fastify/fastifyRequestHandler.d.ts.map +1 -1
- package/dist/adapters/fastify/fastifyTRPCPlugin.d.ts.map +1 -1
- package/dist/adapters/fastify/index.d.ts.map +1 -1
- package/dist/adapters/fastify/index.js +68 -89
- package/dist/adapters/fastify/index.mjs +68 -89
- package/dist/adapters/fetch/fetchRequestHandler.d.ts.map +1 -1
- package/dist/adapters/fetch/index.d.ts.map +1 -1
- package/dist/adapters/fetch/index.js +45 -57
- package/dist/adapters/fetch/index.mjs +45 -57
- package/dist/adapters/fetch/types.d.ts.map +1 -1
- package/dist/adapters/lambda/index.d.ts.map +1 -1
- package/dist/adapters/next.d.ts.map +1 -1
- package/dist/adapters/next.js +42 -46
- package/dist/adapters/next.mjs +42 -46
- package/dist/adapters/node-http/index.d.ts.map +1 -1
- package/dist/adapters/node-http/index.js +5 -5
- package/dist/adapters/node-http/index.mjs +5 -5
- package/dist/adapters/node-http/internals/getPostBody.d.ts.map +1 -1
- package/dist/adapters/node-http/nodeHTTPRequestHandler.d.ts.map +1 -1
- package/dist/adapters/node-http/types.d.ts.map +1 -1
- package/dist/adapters/standalone.d.ts.map +1 -1
- package/dist/adapters/standalone.js +30 -32
- package/dist/adapters/standalone.mjs +30 -32
- package/dist/adapters/ws.d.ts.map +1 -1
- package/dist/adapters/ws.js +272 -352
- package/dist/adapters/ws.mjs +272 -352
- package/dist/codes-1c24d919.js +47 -0
- package/dist/codes-aaa7d554.mjs +44 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/initTRPC.d.ts.map +1 -1
- package/dist/core/internals/__generated__/mergeRoutersGeneric.d.ts.map +1 -1
- package/dist/core/internals/config.d.ts.map +1 -1
- package/dist/core/internals/getParseFn.d.ts.map +1 -1
- package/dist/core/internals/mergeRouters.d.ts.map +1 -1
- package/dist/core/internals/mergeWithoutOverrides.d.ts.map +1 -1
- package/dist/core/internals/omitPrototype.d.ts.map +1 -1
- package/dist/core/internals/prefixObjectKeys.d.ts.map +1 -1
- package/dist/core/internals/procedureBuilder.d.ts.map +1 -1
- package/dist/core/internals/utils.d.ts.map +1 -1
- package/dist/core/middleware.d.ts.map +1 -1
- package/dist/core/parser.d.ts.map +1 -1
- package/dist/core/procedure.d.ts.map +1 -1
- package/dist/core/router.d.ts.map +1 -1
- package/dist/core/types.d.ts.map +1 -1
- package/dist/deprecated/internals/callProcedure.d.ts.map +1 -1
- package/dist/deprecated/internals/middlewares.d.ts.map +1 -1
- package/dist/deprecated/internals/procedure.d.ts.map +1 -1
- package/dist/deprecated/interop.d.ts.map +1 -1
- package/dist/deprecated/router.d.ts.map +1 -1
- package/dist/error/TRPCError.d.ts.map +1 -1
- package/dist/error/formatter.d.ts.map +1 -1
- package/dist/error/utils.d.ts.map +1 -1
- package/dist/http/index.d.ts.map +1 -1
- package/dist/http/internals/getHTTPStatusCode.d.ts.map +1 -1
- package/dist/http/internals/types.d.ts.map +1 -1
- package/dist/http/resolveHTTPResponse.d.ts.map +1 -1
- package/dist/http/types.d.ts.map +1 -1
- package/dist/index-47817162.mjs +26 -0
- package/dist/index-9d687d33.js +28 -0
- package/dist/index.js +59 -95
- package/dist/index.mjs +60 -96
- package/dist/internals/invert.d.ts.map +1 -1
- package/dist/internals/transformTRPCResponse.d.ts.map +1 -1
- package/dist/internals/types.d.ts.map +1 -1
- package/dist/nodeHTTPRequestHandler-7c2a3037.js +82 -0
- package/dist/nodeHTTPRequestHandler-b37609f7.mjs +80 -0
- package/dist/observable/index.d.ts.map +1 -1
- package/dist/observable/index.js +125 -172
- package/dist/observable/index.mjs +125 -172
- package/dist/observable/internals/identity.d.ts.map +1 -1
- package/dist/observable/internals/observableToPromise.d.ts.map +1 -1
- package/dist/observable/internals/pipe.d.ts.map +1 -1
- package/dist/observable/observable.d.ts.map +1 -1
- package/dist/observable/operators/index.d.ts.map +1 -1
- package/dist/observable/operators/map.d.ts.map +1 -1
- package/dist/observable/operators/share.d.ts.map +1 -1
- package/dist/observable/operators/tap.d.ts.map +1 -1
- package/dist/observable/types.d.ts.map +1 -1
- package/dist/observable-b651bf11.js +84 -0
- package/dist/observable-e129ac9d.mjs +81 -0
- package/dist/resolveHTTPResponse-83703ee8.mjs +251 -0
- package/dist/resolveHTTPResponse-b486996d.js +255 -0
- package/dist/router-8372703e.js +886 -0
- package/dist/router-f21b6d06.mjs +876 -0
- package/dist/rpc/codes.d.ts.map +1 -1
- package/dist/rpc/envelopes.d.ts.map +1 -1
- package/dist/rpc/index.d.ts.map +1 -1
- package/dist/rpc/index.js +3 -7
- package/dist/rpc/index.mjs +1 -1
- package/dist/rpc/internals/invert.d.ts.map +1 -1
- package/dist/shared/createProxy/index.d.ts.map +1 -1
- package/dist/shared/index.d.ts.map +1 -1
- package/dist/shared/index.js +1 -1
- package/dist/shared/index.mjs +1 -1
- package/dist/subscription.js +24 -34
- package/dist/subscription.mjs +24 -34
- package/dist/transformTRPCResponse-11ac69cc.js +27 -0
- package/dist/transformTRPCResponse-c8138d5f.mjs +25 -0
- package/observable/index.js +1 -1
- package/package.json +12 -16
- package/rpc/index.js +1 -1
- package/shared/index.js +1 -1
- package/subscription/index.d.ts +1 -0
- package/subscription/index.js +1 -0
- package/dist/TRPCError-9050a68d.js +0 -69
- package/dist/TRPCError-97212592.mjs +0 -65
- package/dist/adapters/aws-lambda/index.ts.js +0 -1
- package/dist/adapters/express.ts.js +0 -1
- package/dist/adapters/fastify/index.ts.js +0 -1
- package/dist/adapters/fetch/index.ts.js +0 -1
- package/dist/adapters/next.ts.js +0 -1
- package/dist/adapters/node-http/index.ts.js +0 -1
- package/dist/adapters/standalone.ts.js +0 -1
- package/dist/adapters/ws.ts.js +0 -1
- package/dist/envelopes-2ae27c9f.js +0 -85
- package/dist/envelopes-b9f49d4d.mjs +0 -82
- package/dist/index-1a25ccbd.js +0 -33
- package/dist/index-a3bd54c7.mjs +0 -31
- package/dist/index.ts.js +0 -1
- package/dist/nodeHTTPRequestHandler-bee7aacc.js +0 -107
- package/dist/nodeHTTPRequestHandler-f1656eba.mjs +0 -105
- package/dist/observable/index.ts.js +0 -1
- package/dist/observable-341a0506.js +0 -109
- package/dist/observable-cfedfa30.mjs +0 -106
- package/dist/resolveHTTPResponse-455f1e51.mjs +0 -293
- package/dist/resolveHTTPResponse-5d90abc5.js +0 -297
- package/dist/router-4e50a6ac.js +0 -1104
- package/dist/router-a3db8f3a.mjs +0 -1094
- package/dist/rpc/index.ts.js +0 -1
- package/dist/shared/index.ts.js +0 -1
- package/dist/subscription.ts.js +0 -1
- package/dist/transformTRPCResponse-0c261655.js +0 -29
- package/dist/transformTRPCResponse-747b9a68.mjs +0 -27
package/dist/adapters/ws.js
CHANGED
|
@@ -2,378 +2,298 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
-
var TRPCError = require('../TRPCError-
|
|
6
|
-
var transformTRPCResponse = require('../transformTRPCResponse-
|
|
7
|
-
var observable = require('../observable-
|
|
5
|
+
var TRPCError = require('../TRPCError-9c7830b4.js');
|
|
6
|
+
var transformTRPCResponse = require('../transformTRPCResponse-11ac69cc.js');
|
|
7
|
+
var observable = require('../observable-b651bf11.js');
|
|
8
8
|
|
|
9
|
-
/* istanbul ignore next */
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
/* istanbul ignore next */
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
function assertIsProcedureType(obj) {
|
|
19
|
-
if (obj !== 'query' && obj !== 'subscription' && obj !== 'mutation') {
|
|
20
|
-
throw new Error('Invalid procedure type');
|
|
21
|
-
}
|
|
9
|
+
/* istanbul ignore next */ function assertIsObject(obj) {
|
|
10
|
+
if (typeof obj !== 'object' || Array.isArray(obj) || !obj) {
|
|
11
|
+
throw new Error('Not an object');
|
|
12
|
+
}
|
|
22
13
|
}
|
|
23
|
-
/* istanbul ignore next */
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
if (obj !== null && typeof obj === 'number' && isNaN(obj) && typeof obj !== 'string') {
|
|
28
|
-
throw new Error('Invalid request id');
|
|
29
|
-
}
|
|
14
|
+
/* istanbul ignore next */ function assertIsProcedureType(obj) {
|
|
15
|
+
if (obj !== 'query' && obj !== 'subscription' && obj !== 'mutation') {
|
|
16
|
+
throw new Error('Invalid procedure type');
|
|
17
|
+
}
|
|
30
18
|
}
|
|
31
|
-
/* istanbul ignore next */
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
if (typeof obj !== 'string') {
|
|
36
|
-
throw new Error('Invalid string');
|
|
37
|
-
}
|
|
19
|
+
/* istanbul ignore next */ function assertIsRequestId(obj) {
|
|
20
|
+
if (obj !== null && typeof obj === 'number' && isNaN(obj) && typeof obj !== 'string') {
|
|
21
|
+
throw new Error('Invalid request id');
|
|
22
|
+
}
|
|
38
23
|
}
|
|
39
|
-
/* istanbul ignore next */
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
if (typeof obj !== 'undefined' && obj !== '2.0') {
|
|
44
|
-
throw new Error('Must be JSONRPC 2.0');
|
|
45
|
-
}
|
|
24
|
+
/* istanbul ignore next */ function assertIsString(obj) {
|
|
25
|
+
if (typeof obj !== 'string') {
|
|
26
|
+
throw new Error('Invalid string');
|
|
27
|
+
}
|
|
46
28
|
}
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
const {
|
|
51
|
-
method,
|
|
52
|
-
params,
|
|
53
|
-
id,
|
|
54
|
-
jsonrpc
|
|
55
|
-
} = obj;
|
|
56
|
-
assertIsRequestId(id);
|
|
57
|
-
assertIsJSONRPC2OrUndefined(jsonrpc);
|
|
58
|
-
|
|
59
|
-
if (method === 'subscription.stop') {
|
|
60
|
-
return {
|
|
61
|
-
id,
|
|
62
|
-
jsonrpc,
|
|
63
|
-
method
|
|
64
|
-
};
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
assertIsProcedureType(method);
|
|
68
|
-
assertIsObject(params);
|
|
69
|
-
const {
|
|
70
|
-
input: rawInput,
|
|
71
|
-
path
|
|
72
|
-
} = params;
|
|
73
|
-
assertIsString(path);
|
|
74
|
-
const input = transformer.input.deserialize(rawInput);
|
|
75
|
-
return {
|
|
76
|
-
id,
|
|
77
|
-
jsonrpc,
|
|
78
|
-
method,
|
|
79
|
-
params: {
|
|
80
|
-
input,
|
|
81
|
-
path
|
|
29
|
+
/* istanbul ignore next */ function assertIsJSONRPC2OrUndefined(obj) {
|
|
30
|
+
if (typeof obj !== 'undefined' && obj !== '2.0') {
|
|
31
|
+
throw new Error('Must be JSONRPC 2.0');
|
|
82
32
|
}
|
|
83
|
-
};
|
|
84
33
|
}
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
const {
|
|
97
|
-
transformer
|
|
98
|
-
} = router._def;
|
|
99
|
-
wss.on('connection', async (client, req) => {
|
|
100
|
-
const clientSubscriptions = new Map();
|
|
101
|
-
|
|
102
|
-
function respond(untransformedJSON) {
|
|
103
|
-
client.send(JSON.stringify(transformTRPCResponse.transformTRPCResponse(router, untransformedJSON)));
|
|
34
|
+
function parseMessage(obj, transformer) {
|
|
35
|
+
assertIsObject(obj);
|
|
36
|
+
const { method , params , id , jsonrpc } = obj;
|
|
37
|
+
assertIsRequestId(id);
|
|
38
|
+
assertIsJSONRPC2OrUndefined(jsonrpc);
|
|
39
|
+
if (method === 'subscription.stop') {
|
|
40
|
+
return {
|
|
41
|
+
id,
|
|
42
|
+
jsonrpc,
|
|
43
|
+
method
|
|
44
|
+
};
|
|
104
45
|
}
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
respond({
|
|
46
|
+
assertIsProcedureType(method);
|
|
47
|
+
assertIsObject(params);
|
|
48
|
+
const { input: rawInput , path } = params;
|
|
49
|
+
assertIsString(path);
|
|
50
|
+
const input = transformer.input.deserialize(rawInput);
|
|
51
|
+
return {
|
|
112
52
|
id,
|
|
113
53
|
jsonrpc,
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
const ctxPromise = createContext === null || createContext === void 0 ? void 0 : createContext({
|
|
121
|
-
req,
|
|
122
|
-
res: client
|
|
123
|
-
});
|
|
124
|
-
let ctx = undefined;
|
|
125
|
-
|
|
126
|
-
async function handleRequest(msg) {
|
|
127
|
-
const {
|
|
128
|
-
id,
|
|
129
|
-
jsonrpc
|
|
130
|
-
} = msg;
|
|
131
|
-
/* istanbul ignore next */
|
|
132
|
-
|
|
133
|
-
if (id === null) {
|
|
134
|
-
throw new TRPCError.TRPCError({
|
|
135
|
-
code: 'BAD_REQUEST',
|
|
136
|
-
message: '`id` is required'
|
|
137
|
-
});
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
if (msg.method === 'subscription.stop') {
|
|
141
|
-
const sub = clientSubscriptions.get(id);
|
|
142
|
-
|
|
143
|
-
if (sub) {
|
|
144
|
-
stopSubscription(sub, {
|
|
145
|
-
id,
|
|
146
|
-
jsonrpc
|
|
147
|
-
});
|
|
54
|
+
method,
|
|
55
|
+
params: {
|
|
56
|
+
input,
|
|
57
|
+
path
|
|
148
58
|
}
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
const type = msg.method;
|
|
159
|
-
|
|
160
|
-
try {
|
|
161
|
-
await ctxPromise; // asserts context has been set
|
|
162
|
-
|
|
163
|
-
const caller = router.createCaller(ctx);
|
|
164
|
-
const result = await caller[type](path, input);
|
|
165
|
-
|
|
166
|
-
if (type === 'subscription') {
|
|
167
|
-
if (!observable.isObservable(result)) {
|
|
168
|
-
throw new TRPCError.TRPCError({
|
|
169
|
-
message: `Subscription ${path} did not return an observable`,
|
|
170
|
-
code: 'INTERNAL_SERVER_ERROR'
|
|
171
|
-
});
|
|
172
|
-
}
|
|
173
|
-
} else {
|
|
174
|
-
// send the value as data if the method is not a subscription
|
|
175
|
-
respond({
|
|
176
|
-
id,
|
|
177
|
-
jsonrpc,
|
|
178
|
-
result: {
|
|
179
|
-
type: 'data',
|
|
180
|
-
data: result
|
|
181
|
-
}
|
|
182
|
-
});
|
|
183
|
-
return;
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
function applyWSSHandler(opts) {
|
|
62
|
+
const { wss , createContext , router } = opts;
|
|
63
|
+
const { transformer } = router._def;
|
|
64
|
+
wss.on('connection', async (client, req)=>{
|
|
65
|
+
const clientSubscriptions = new Map();
|
|
66
|
+
function respond(untransformedJSON) {
|
|
67
|
+
client.send(JSON.stringify(transformTRPCResponse.transformTRPCResponse(router, untransformedJSON)));
|
|
184
68
|
}
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
const sub = observable$1.subscribe({
|
|
188
|
-
next(data) {
|
|
189
|
-
respond({
|
|
190
|
-
id,
|
|
191
|
-
jsonrpc,
|
|
192
|
-
result: {
|
|
193
|
-
type: 'data',
|
|
194
|
-
data
|
|
195
|
-
}
|
|
196
|
-
});
|
|
197
|
-
},
|
|
198
|
-
|
|
199
|
-
error(err) {
|
|
200
|
-
var _opts$onError;
|
|
201
|
-
|
|
202
|
-
const error = TRPCError.getErrorFromUnknown(err);
|
|
203
|
-
(_opts$onError = opts.onError) === null || _opts$onError === void 0 ? void 0 : _opts$onError.call(opts, {
|
|
204
|
-
error,
|
|
205
|
-
path,
|
|
206
|
-
type,
|
|
207
|
-
ctx,
|
|
208
|
-
req,
|
|
209
|
-
input
|
|
210
|
-
});
|
|
211
|
-
respond({
|
|
212
|
-
id,
|
|
213
|
-
jsonrpc,
|
|
214
|
-
error: router.getErrorShape({
|
|
215
|
-
error,
|
|
216
|
-
type,
|
|
217
|
-
path,
|
|
218
|
-
input,
|
|
219
|
-
ctx
|
|
220
|
-
})
|
|
221
|
-
});
|
|
222
|
-
},
|
|
223
|
-
|
|
224
|
-
complete() {
|
|
69
|
+
function stopSubscription(subscription, { id , jsonrpc }) {
|
|
70
|
+
subscription.unsubscribe();
|
|
225
71
|
respond({
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
72
|
+
id,
|
|
73
|
+
jsonrpc,
|
|
74
|
+
result: {
|
|
75
|
+
type: 'stopped'
|
|
76
|
+
}
|
|
231
77
|
});
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
});
|
|
235
|
-
/* istanbul ignore next */
|
|
236
|
-
|
|
237
|
-
if (client.readyState !== client.OPEN) {
|
|
238
|
-
// if the client got disconnected whilst initializing the subscription
|
|
239
|
-
// no need to send stopped message if the client is disconnected
|
|
240
|
-
sub.unsubscribe();
|
|
241
|
-
return;
|
|
242
|
-
}
|
|
243
|
-
/* istanbul ignore next */
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
if (clientSubscriptions.has(id)) {
|
|
247
|
-
// duplicate request ids for client
|
|
248
|
-
stopSubscription(sub, {
|
|
249
|
-
id,
|
|
250
|
-
jsonrpc
|
|
251
|
-
});
|
|
252
|
-
throw new TRPCError.TRPCError({
|
|
253
|
-
message: `Duplicate id ${id}`,
|
|
254
|
-
code: 'BAD_REQUEST'
|
|
255
|
-
});
|
|
256
78
|
}
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
id,
|
|
261
|
-
jsonrpc,
|
|
262
|
-
result: {
|
|
263
|
-
type: 'started'
|
|
264
|
-
}
|
|
265
|
-
});
|
|
266
|
-
} catch (cause)
|
|
267
|
-
/* istanbul ignore next */
|
|
268
|
-
{
|
|
269
|
-
var _opts$onError2;
|
|
270
|
-
|
|
271
|
-
// procedure threw an error
|
|
272
|
-
const error = TRPCError.getErrorFromUnknown(cause);
|
|
273
|
-
(_opts$onError2 = opts.onError) === null || _opts$onError2 === void 0 ? void 0 : _opts$onError2.call(opts, {
|
|
274
|
-
error,
|
|
275
|
-
path,
|
|
276
|
-
type,
|
|
277
|
-
ctx,
|
|
278
|
-
req,
|
|
279
|
-
input
|
|
280
|
-
});
|
|
281
|
-
respond({
|
|
282
|
-
id,
|
|
283
|
-
jsonrpc,
|
|
284
|
-
error: router.getErrorShape({
|
|
285
|
-
error,
|
|
286
|
-
type,
|
|
287
|
-
path,
|
|
288
|
-
input,
|
|
289
|
-
ctx
|
|
290
|
-
})
|
|
79
|
+
const ctxPromise = createContext?.({
|
|
80
|
+
req,
|
|
81
|
+
res: client
|
|
291
82
|
});
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
83
|
+
let ctx = undefined;
|
|
84
|
+
async function handleRequest(msg) {
|
|
85
|
+
const { id , jsonrpc } = msg;
|
|
86
|
+
/* istanbul ignore next */ if (id === null) {
|
|
87
|
+
throw new TRPCError.TRPCError({
|
|
88
|
+
code: 'BAD_REQUEST',
|
|
89
|
+
message: '`id` is required'
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
if (msg.method === 'subscription.stop') {
|
|
93
|
+
const sub = clientSubscriptions.get(id);
|
|
94
|
+
if (sub) {
|
|
95
|
+
stopSubscription(sub, {
|
|
96
|
+
id,
|
|
97
|
+
jsonrpc
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
clientSubscriptions.delete(id);
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
const { path , input } = msg.params;
|
|
104
|
+
const type = msg.method;
|
|
105
|
+
try {
|
|
106
|
+
await ctxPromise; // asserts context has been set
|
|
107
|
+
const caller = router.createCaller(ctx);
|
|
108
|
+
const result = await caller[type](path, input);
|
|
109
|
+
if (type === 'subscription') {
|
|
110
|
+
if (!observable.isObservable(result)) {
|
|
111
|
+
throw new TRPCError.TRPCError({
|
|
112
|
+
message: `Subscription ${path} did not return an observable`,
|
|
113
|
+
code: 'INTERNAL_SERVER_ERROR'
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
} else {
|
|
117
|
+
// send the value as data if the method is not a subscription
|
|
118
|
+
respond({
|
|
119
|
+
id,
|
|
120
|
+
jsonrpc,
|
|
121
|
+
result: {
|
|
122
|
+
type: 'data',
|
|
123
|
+
data: result
|
|
124
|
+
}
|
|
125
|
+
});
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
const observable$1 = result;
|
|
129
|
+
const sub1 = observable$1.subscribe({
|
|
130
|
+
next (data) {
|
|
131
|
+
respond({
|
|
132
|
+
id,
|
|
133
|
+
jsonrpc,
|
|
134
|
+
result: {
|
|
135
|
+
type: 'data',
|
|
136
|
+
data
|
|
137
|
+
}
|
|
138
|
+
});
|
|
139
|
+
},
|
|
140
|
+
error (err) {
|
|
141
|
+
const error = TRPCError.getErrorFromUnknown(err);
|
|
142
|
+
opts.onError?.({
|
|
143
|
+
error,
|
|
144
|
+
path,
|
|
145
|
+
type,
|
|
146
|
+
ctx,
|
|
147
|
+
req,
|
|
148
|
+
input
|
|
149
|
+
});
|
|
150
|
+
respond({
|
|
151
|
+
id,
|
|
152
|
+
jsonrpc,
|
|
153
|
+
error: router.getErrorShape({
|
|
154
|
+
error,
|
|
155
|
+
type,
|
|
156
|
+
path,
|
|
157
|
+
input,
|
|
158
|
+
ctx
|
|
159
|
+
})
|
|
160
|
+
});
|
|
161
|
+
},
|
|
162
|
+
complete () {
|
|
163
|
+
respond({
|
|
164
|
+
id,
|
|
165
|
+
jsonrpc,
|
|
166
|
+
result: {
|
|
167
|
+
type: 'stopped'
|
|
168
|
+
}
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
});
|
|
172
|
+
/* istanbul ignore next */ if (client.readyState !== client.OPEN) {
|
|
173
|
+
// if the client got disconnected whilst initializing the subscription
|
|
174
|
+
// no need to send stopped message if the client is disconnected
|
|
175
|
+
sub1.unsubscribe();
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
178
|
+
/* istanbul ignore next */ if (clientSubscriptions.has(id)) {
|
|
179
|
+
// duplicate request ids for client
|
|
180
|
+
stopSubscription(sub1, {
|
|
181
|
+
id,
|
|
182
|
+
jsonrpc
|
|
183
|
+
});
|
|
184
|
+
throw new TRPCError.TRPCError({
|
|
185
|
+
message: `Duplicate id ${id}`,
|
|
186
|
+
code: 'BAD_REQUEST'
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
clientSubscriptions.set(id, sub1);
|
|
190
|
+
respond({
|
|
191
|
+
id,
|
|
192
|
+
jsonrpc,
|
|
193
|
+
result: {
|
|
194
|
+
type: 'started'
|
|
195
|
+
}
|
|
196
|
+
});
|
|
197
|
+
} catch (cause) /* istanbul ignore next */ {
|
|
198
|
+
// procedure threw an error
|
|
199
|
+
const error = TRPCError.getErrorFromUnknown(cause);
|
|
200
|
+
opts.onError?.({
|
|
201
|
+
error,
|
|
202
|
+
path,
|
|
203
|
+
type,
|
|
204
|
+
ctx,
|
|
205
|
+
req,
|
|
206
|
+
input
|
|
207
|
+
});
|
|
208
|
+
respond({
|
|
209
|
+
id,
|
|
210
|
+
jsonrpc,
|
|
211
|
+
error: router.getErrorShape({
|
|
212
|
+
error,
|
|
213
|
+
type,
|
|
214
|
+
path,
|
|
215
|
+
input,
|
|
216
|
+
ctx
|
|
217
|
+
})
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
client.on('message', async (message)=>{
|
|
222
|
+
try {
|
|
223
|
+
const msgJSON = JSON.parse(message.toString());
|
|
224
|
+
const msgs = Array.isArray(msgJSON) ? msgJSON : [
|
|
225
|
+
msgJSON
|
|
226
|
+
];
|
|
227
|
+
const promises = msgs.map((raw)=>parseMessage(raw, transformer)).map(handleRequest);
|
|
228
|
+
await Promise.all(promises);
|
|
229
|
+
} catch (cause) {
|
|
230
|
+
const error = new TRPCError.TRPCError({
|
|
231
|
+
code: 'PARSE_ERROR',
|
|
232
|
+
cause: TRPCError.getCauseFromUnknown(cause)
|
|
233
|
+
});
|
|
234
|
+
respond({
|
|
235
|
+
id: null,
|
|
236
|
+
error: router.getErrorShape({
|
|
237
|
+
error,
|
|
238
|
+
type: 'unknown',
|
|
239
|
+
path: undefined,
|
|
240
|
+
input: undefined,
|
|
241
|
+
ctx: undefined
|
|
242
|
+
})
|
|
243
|
+
});
|
|
244
|
+
}
|
|
305
245
|
});
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
path: undefined,
|
|
312
|
-
input: undefined,
|
|
313
|
-
ctx: undefined
|
|
314
|
-
})
|
|
246
|
+
client.once('close', ()=>{
|
|
247
|
+
for (const sub of clientSubscriptions.values()){
|
|
248
|
+
sub.unsubscribe();
|
|
249
|
+
}
|
|
250
|
+
clientSubscriptions.clear();
|
|
315
251
|
});
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
252
|
+
async function createContextAsync() {
|
|
253
|
+
try {
|
|
254
|
+
ctx = await ctxPromise;
|
|
255
|
+
} catch (cause) {
|
|
256
|
+
const error = TRPCError.getErrorFromUnknown(cause);
|
|
257
|
+
opts.onError?.({
|
|
258
|
+
error,
|
|
259
|
+
path: undefined,
|
|
260
|
+
type: 'unknown',
|
|
261
|
+
ctx,
|
|
262
|
+
req,
|
|
263
|
+
input: undefined
|
|
264
|
+
});
|
|
265
|
+
respond({
|
|
266
|
+
id: null,
|
|
267
|
+
error: router.getErrorShape({
|
|
268
|
+
error,
|
|
269
|
+
type: 'unknown',
|
|
270
|
+
path: undefined,
|
|
271
|
+
input: undefined,
|
|
272
|
+
ctx
|
|
273
|
+
})
|
|
274
|
+
});
|
|
275
|
+
// close in next tick
|
|
276
|
+
(global.setImmediate ?? global.setTimeout)(()=>{
|
|
277
|
+
client.close();
|
|
278
|
+
});
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
await createContextAsync();
|
|
324
282
|
});
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
ctx,
|
|
338
|
-
req,
|
|
339
|
-
input: undefined
|
|
340
|
-
});
|
|
341
|
-
respond({
|
|
342
|
-
id: null,
|
|
343
|
-
error: router.getErrorShape({
|
|
344
|
-
error,
|
|
345
|
-
type: 'unknown',
|
|
346
|
-
path: undefined,
|
|
347
|
-
input: undefined,
|
|
348
|
-
ctx
|
|
349
|
-
})
|
|
350
|
-
}); // close in next tick
|
|
351
|
-
|
|
352
|
-
((_global$setImmediate = global.setImmediate) !== null && _global$setImmediate !== void 0 ? _global$setImmediate : global.setTimeout)(() => {
|
|
353
|
-
client.close();
|
|
354
|
-
});
|
|
355
|
-
}
|
|
356
|
-
}
|
|
357
|
-
|
|
358
|
-
await createContextAsync();
|
|
359
|
-
});
|
|
360
|
-
return {
|
|
361
|
-
broadcastReconnectNotification: () => {
|
|
362
|
-
const response = {
|
|
363
|
-
id: null,
|
|
364
|
-
method: 'reconnect'
|
|
365
|
-
};
|
|
366
|
-
const data = JSON.stringify(response);
|
|
367
|
-
|
|
368
|
-
for (const client of wss.clients) {
|
|
369
|
-
if (client.readyState === 1
|
|
370
|
-
/* ws.OPEN */
|
|
371
|
-
) {
|
|
372
|
-
client.send(data);
|
|
283
|
+
return {
|
|
284
|
+
broadcastReconnectNotification: ()=>{
|
|
285
|
+
const response = {
|
|
286
|
+
id: null,
|
|
287
|
+
method: 'reconnect'
|
|
288
|
+
};
|
|
289
|
+
const data = JSON.stringify(response);
|
|
290
|
+
for (const client of wss.clients){
|
|
291
|
+
if (client.readyState === 1 /* ws.OPEN */ ) {
|
|
292
|
+
client.send(data);
|
|
293
|
+
}
|
|
294
|
+
}
|
|
373
295
|
}
|
|
374
|
-
|
|
375
|
-
}
|
|
376
|
-
};
|
|
296
|
+
};
|
|
377
297
|
}
|
|
378
298
|
|
|
379
299
|
exports.applyWSSHandler = applyWSSHandler;
|