@trpc/server 10.0.0-alpha.3 → 10.0.0-alpha.30
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/dist/trpc-server-adapters-aws-lambda.cjs.d.ts +1 -0
- package/adapters/aws-lambda/dist/trpc-server-adapters-aws-lambda.cjs.dev.js +170 -0
- package/adapters/aws-lambda/dist/trpc-server-adapters-aws-lambda.cjs.js +7 -0
- package/adapters/aws-lambda/dist/trpc-server-adapters-aws-lambda.cjs.prod.js +170 -0
- package/adapters/aws-lambda/dist/trpc-server-adapters-aws-lambda.esm.js +166 -0
- package/adapters/aws-lambda/index.d.ts +1 -0
- package/adapters/aws-lambda/index.js +1 -0
- package/adapters/express/dist/trpc-server-adapters-express.cjs.dev.js +7 -6
- package/adapters/express/dist/trpc-server-adapters-express.cjs.prod.js +7 -6
- package/adapters/express/dist/trpc-server-adapters-express.esm.js +7 -6
- package/adapters/fastify/dist/trpc-server-adapters-fastify.cjs.d.ts +1 -0
- package/adapters/fastify/dist/trpc-server-adapters-fastify.cjs.dev.js +109 -0
- package/adapters/fastify/dist/trpc-server-adapters-fastify.cjs.js +7 -0
- package/adapters/fastify/dist/trpc-server-adapters-fastify.cjs.prod.js +109 -0
- package/adapters/fastify/dist/trpc-server-adapters-fastify.esm.js +104 -0
- package/adapters/fastify/index.d.ts +1 -0
- package/adapters/fastify/index.js +1 -0
- package/adapters/fetch/index.d.ts +1 -0
- package/adapters/fetch/index.js +1 -0
- package/adapters/lambda/dist/trpc-server-adapters-lambda.cjs.d.ts +1 -0
- package/adapters/lambda/dist/trpc-server-adapters-lambda.cjs.dev.js +25 -0
- package/adapters/lambda/dist/trpc-server-adapters-lambda.cjs.js +7 -0
- package/adapters/lambda/dist/trpc-server-adapters-lambda.cjs.prod.js +25 -0
- package/adapters/lambda/dist/trpc-server-adapters-lambda.esm.js +21 -0
- package/adapters/next/dist/trpc-server-adapters-next.cjs.dev.js +4 -3
- package/adapters/next/dist/trpc-server-adapters-next.cjs.prod.js +4 -3
- package/adapters/next/dist/trpc-server-adapters-next.esm.js +4 -3
- package/adapters/node-http/dist/trpc-server-adapters-node-http.cjs.dev.js +4 -3
- package/adapters/node-http/dist/trpc-server-adapters-node-http.cjs.prod.js +4 -3
- package/adapters/node-http/dist/trpc-server-adapters-node-http.esm.js +4 -3
- package/adapters/standalone/dist/trpc-server-adapters-standalone.cjs.dev.js +5 -4
- package/adapters/standalone/dist/trpc-server-adapters-standalone.cjs.prod.js +5 -4
- package/adapters/standalone/dist/trpc-server-adapters-standalone.esm.js +5 -4
- package/adapters/ws/dist/trpc-server-adapters-ws.cjs.dev.js +6 -5
- package/adapters/ws/dist/trpc-server-adapters-ws.cjs.prod.js +6 -5
- package/adapters/ws/dist/trpc-server-adapters-ws.esm.js +6 -5
- package/dist/TRPCError-9050a68d.js +69 -0
- package/dist/TRPCError-b7fa0c31.mjs +65 -0
- package/dist/adapters/aws-lambda/index.d.ts +14 -0
- package/dist/adapters/aws-lambda/index.d.ts.map +1 -0
- package/dist/adapters/aws-lambda/utils.d.ts +34 -0
- package/dist/adapters/aws-lambda/utils.d.ts.map +1 -0
- package/dist/adapters/express.d.ts +1 -1
- package/dist/adapters/express.d.ts.map +1 -1
- package/dist/adapters/express.js +8 -7
- package/dist/adapters/express.mjs +8 -7
- package/dist/adapters/fastify/fastifyRequestHandler.d.ts +13 -0
- package/dist/adapters/fastify/fastifyRequestHandler.d.ts.map +1 -0
- package/dist/adapters/fastify/fastifyTRPCPlugin.d.ts +12 -0
- package/dist/adapters/fastify/fastifyTRPCPlugin.d.ts.map +1 -0
- package/dist/adapters/fastify/index.d.ts +3 -0
- package/dist/adapters/fastify/index.d.ts.map +1 -0
- package/dist/adapters/fastify/index.js +108 -0
- package/dist/adapters/fastify/index.mjs +103 -0
- package/dist/{ws → adapters/fastify}/index.ts.js +0 -0
- package/dist/adapters/fetch/fetchRequestHandler.d.ts +8 -0
- package/dist/adapters/fetch/fetchRequestHandler.d.ts.map +1 -0
- package/dist/adapters/fetch/index.d.ts +3 -0
- package/dist/adapters/fetch/index.d.ts.map +1 -0
- package/dist/adapters/fetch/index.js +69 -0
- package/dist/adapters/fetch/index.mjs +65 -0
- package/dist/adapters/fetch/index.ts.js +1 -0
- package/dist/adapters/fetch/types.d.ts +21 -0
- package/dist/adapters/fetch/types.d.ts.map +1 -0
- package/dist/adapters/lambda/index.d.ts +12 -0
- package/dist/adapters/lambda/index.d.ts.map +1 -0
- package/dist/adapters/next.d.ts +2 -2
- package/dist/adapters/next.d.ts.map +1 -1
- package/dist/adapters/next.js +9 -9
- package/dist/adapters/next.mjs +8 -8
- package/dist/adapters/node-http/index.js +5 -4
- package/dist/adapters/node-http/index.mjs +5 -4
- package/dist/adapters/node-http/internals/getPostBody.d.ts +1 -1
- package/dist/adapters/node-http/internals/getPostBody.d.ts.map +1 -1
- package/dist/adapters/node-http/nodeHTTPRequestHandler.d.ts +2 -2
- package/dist/adapters/node-http/nodeHTTPRequestHandler.d.ts.map +1 -1
- package/dist/adapters/node-http/types.d.ts +11 -9
- package/dist/adapters/node-http/types.d.ts.map +1 -1
- package/dist/adapters/standalone.d.ts +2 -2
- package/dist/adapters/standalone.d.ts.map +1 -1
- package/dist/adapters/standalone.js +11 -7
- package/dist/adapters/standalone.mjs +11 -6
- package/dist/adapters/ws.d.ts +8 -6
- package/dist/adapters/ws.d.ts.map +1 -1
- package/dist/adapters/ws.js +123 -90
- package/dist/adapters/ws.mjs +118 -85
- package/dist/assertNotBrowser.d.ts.map +1 -1
- package/dist/core/index.d.ts +5 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/initTRPC.d.ts +64 -0
- package/dist/core/initTRPC.d.ts.map +1 -0
- package/dist/core/internals/__generated__/mergeRoutersGeneric.d.ts +222 -0
- package/dist/core/internals/__generated__/mergeRoutersGeneric.d.ts.map +1 -0
- package/dist/core/internals/config.d.ts +36 -0
- package/dist/core/internals/config.d.ts.map +1 -0
- package/dist/core/internals/getParseFn.d.ts +9 -0
- package/dist/core/internals/getParseFn.d.ts.map +1 -0
- package/dist/core/internals/internalProcedure.d.ts +78 -0
- package/dist/core/internals/internalProcedure.d.ts.map +1 -0
- package/dist/core/internals/mergeRouters.d.ts +3 -0
- package/dist/core/internals/mergeRouters.d.ts.map +1 -0
- package/dist/core/internals/mergeWithoutOverrides.d.ts +5 -0
- package/dist/core/internals/mergeWithoutOverrides.d.ts.map +1 -0
- package/dist/core/internals/omitPrototype.d.ts +6 -0
- package/dist/core/internals/omitPrototype.d.ts.map +1 -0
- package/dist/core/internals/prefixObjectKeys.d.ts +2 -0
- package/dist/core/internals/prefixObjectKeys.d.ts.map +1 -0
- package/dist/core/internals/procedureBuilder.d.ts +99 -0
- package/dist/core/internals/procedureBuilder.d.ts.map +1 -0
- package/dist/core/internals/utils.d.ts +44 -0
- package/dist/core/internals/utils.d.ts.map +1 -0
- package/dist/core/middleware.d.ts +79 -0
- package/dist/core/middleware.d.ts.map +1 -0
- package/dist/core/parser.d.ts +25 -0
- package/dist/core/parser.d.ts.map +1 -0
- package/dist/core/procedure.d.ts +69 -0
- package/dist/core/procedure.d.ts.map +1 -0
- package/dist/core/router.d.ts +104 -0
- package/dist/core/router.d.ts.map +1 -0
- package/dist/core/types.d.ts +17 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/{internals → deprecated/internals}/callProcedure.d.ts +5 -2
- package/dist/deprecated/internals/callProcedure.d.ts.map +1 -0
- package/dist/{internals → deprecated/internals}/middlewares.d.ts +21 -3
- package/dist/deprecated/internals/middlewares.d.ts.map +1 -0
- package/dist/deprecated/internals/procedure.d.ts +96 -0
- package/dist/deprecated/internals/procedure.d.ts.map +1 -0
- package/dist/deprecated/interop.d.ts +18 -0
- package/dist/deprecated/interop.d.ts.map +1 -0
- package/dist/deprecated/router.d.ts +194 -0
- package/dist/deprecated/router.d.ts.map +1 -0
- package/dist/{codes-7a3d4f65.mjs → envelopes-af8c2959.mjs} +30 -1
- package/dist/{codes-7f46544e.js → envelopes-b6dd0367.js} +29 -1
- package/dist/error/TRPCError.d.ts +11 -0
- package/dist/error/TRPCError.d.ts.map +1 -0
- package/dist/error/formatter.d.ts +33 -0
- package/dist/error/formatter.d.ts.map +1 -0
- package/dist/{internals/errors.d.ts → error/utils.d.ts} +3 -2
- package/dist/error/utils.d.ts.map +1 -0
- package/dist/http/index.d.ts +1 -1
- package/dist/http/index.d.ts.map +1 -1
- package/dist/http/internals/getHTTPStatusCode.d.ts +2 -1
- package/dist/http/internals/getHTTPStatusCode.d.ts.map +1 -1
- package/dist/http/internals/types.d.ts +11 -8
- package/dist/http/internals/types.d.ts.map +1 -1
- package/dist/http/resolveHTTPResponse.d.ts +4 -4
- package/dist/http/resolveHTTPResponse.d.ts.map +1 -1
- package/dist/http/{ResponseMeta.d.ts → types.d.ts} +1 -1
- package/dist/http/types.d.ts.map +1 -0
- package/dist/index.d.ts +3 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +797 -105
- package/dist/index.mjs +786 -90
- package/dist/internals/transformTRPCResponse.d.ts +5 -3
- package/dist/internals/transformTRPCResponse.d.ts.map +1 -1
- package/dist/internals/types.d.ts +23 -0
- package/dist/internals/types.d.ts.map +1 -0
- package/dist/nodeHTTPRequestHandler-174459c5.mjs +105 -0
- package/dist/nodeHTTPRequestHandler-6b7c8622.js +107 -0
- package/dist/observable/index.d.ts +5 -0
- package/dist/observable/index.d.ts.map +1 -0
- package/dist/observable/index.js +204 -0
- package/dist/observable/index.mjs +195 -0
- package/dist/observable/index.ts.js +1 -0
- package/dist/observable/internals/identity.d.ts +2 -0
- package/dist/observable/internals/identity.d.ts.map +1 -0
- package/dist/observable/internals/observableToPromise.d.ts +10 -0
- package/dist/observable/internals/observableToPromise.d.ts.map +1 -0
- package/dist/observable/internals/pipe.d.ts +4 -0
- package/dist/observable/internals/pipe.d.ts.map +1 -0
- package/dist/observable/observable.d.ts +5 -0
- package/dist/observable/observable.d.ts.map +1 -0
- package/dist/observable/operators/index.d.ts +4 -0
- package/dist/observable/operators/index.d.ts.map +1 -0
- package/dist/observable/operators/map.d.ts +3 -0
- package/dist/observable/operators/map.d.ts.map +1 -0
- package/dist/observable/operators/share.d.ts +6 -0
- package/dist/observable/operators/share.d.ts.map +1 -0
- package/dist/observable/operators/tap.d.ts +3 -0
- package/dist/observable/operators/tap.d.ts.map +1 -0
- package/dist/observable/types.d.ts +29 -0
- package/dist/observable/types.d.ts.map +1 -0
- package/dist/observable-137ea1bd.mjs +105 -0
- package/dist/observable-3aa4d911.js +108 -0
- package/dist/{nodeHTTPRequestHandler-10e6d2f9.mjs → resolveHTTPResponse-8657b8de.mjs} +32 -133
- package/dist/{nodeHTTPRequestHandler-d7c307d3.js → resolveHTTPResponse-fcc8f644.js} +37 -139
- package/dist/rpc/codes.d.ts +2 -0
- package/dist/rpc/codes.d.ts.map +1 -1
- package/dist/rpc/envelopes.d.ts +62 -40
- package/dist/rpc/envelopes.d.ts.map +1 -1
- package/dist/rpc/index.js +7 -3
- package/dist/rpc/index.mjs +1 -1
- package/dist/rpc/internals/invert.d.ts +18 -0
- package/dist/rpc/internals/invert.d.ts.map +1 -0
- package/dist/subscription.d.ts +3 -52
- package/dist/subscription.d.ts.map +1 -1
- package/dist/subscription.js +44 -0
- package/dist/subscription.mjs +40 -0
- package/dist/subscription.ts.js +1 -0
- package/dist/transformTRPCResponse-0c261655.js +29 -0
- package/dist/transformTRPCResponse-747b9a68.mjs +27 -0
- package/dist/transformer.d.ts +14 -0
- package/dist/transformer.d.ts.map +1 -1
- package/dist/types.d.ts +23 -8
- package/dist/types.d.ts.map +1 -1
- package/observable/index.d.ts +1 -0
- package/observable/index.js +1 -0
- package/package.json +50 -16
- package/rpc/dist/trpc-server-rpc.cjs.dev.js +1 -1
- package/rpc/dist/trpc-server-rpc.cjs.prod.js +1 -1
- package/rpc/dist/trpc-server-rpc.esm.js +1 -1
- package/src/adapters/aws-lambda/index.ts +156 -0
- package/src/adapters/aws-lambda/utils.ts +91 -0
- package/src/adapters/express.ts +4 -4
- package/src/adapters/fastify/fastifyRequestHandler.ts +77 -0
- package/src/adapters/fastify/fastifyTRPCPlugin.ts +56 -0
- package/src/adapters/fastify/index.ts +2 -0
- package/src/adapters/fetch/fetchRequestHandler.ts +61 -0
- package/src/adapters/fetch/index.ts +2 -0
- package/src/adapters/fetch/types.ts +28 -0
- package/src/adapters/lambda/index.ts +18 -0
- package/src/adapters/next.ts +10 -8
- package/src/adapters/node-http/internals/getPostBody.test.ts +2 -1
- package/src/adapters/node-http/internals/getPostBody.ts +1 -1
- package/src/adapters/node-http/nodeHTTPRequestHandler.ts +7 -7
- package/src/adapters/node-http/types.ts +11 -9
- package/src/adapters/standalone.ts +12 -4
- package/src/adapters/ws.ts +135 -91
- package/src/assertNotBrowser.ts +1 -0
- package/src/core/index.ts +5 -0
- package/src/core/initTRPC.ts +95 -0
- package/src/core/internals/__generated__/mergeRoutersGeneric.ts +326 -0
- package/src/core/internals/config.ts +42 -0
- package/src/core/internals/getParseFn.ts +47 -0
- package/src/core/internals/internalProcedure.ts +296 -0
- package/src/core/internals/mergeRouters.ts +45 -0
- package/src/core/internals/mergeWithoutOverrides.ts +19 -0
- package/src/core/internals/omitPrototype.ts +9 -0
- package/src/core/internals/prefixObjectKeys.ts +9 -0
- package/src/core/internals/procedureBuilder.ts +180 -0
- package/src/core/internals/utils.ts +64 -0
- package/src/core/middleware.ts +94 -0
- package/src/core/parser.ts +45 -0
- package/src/core/procedure.ts +95 -0
- package/src/core/router.ts +336 -0
- package/src/core/types.ts +53 -0
- package/src/{internals → deprecated/internals}/callProcedure.ts +9 -3
- package/src/{internals → deprecated/internals}/middlewares.ts +23 -3
- package/src/deprecated/internals/procedure.ts +415 -0
- package/src/deprecated/interop.ts +196 -0
- package/src/{router.ts → deprecated/router.ts} +216 -100
- package/src/{TRPCError.ts → error/TRPCError.ts} +6 -14
- package/src/error/formatter.ts +51 -0
- package/src/{internals/errors.ts → error/utils.ts} +21 -5
- package/src/http/index.ts +1 -1
- package/src/http/internals/getHTTPStatusCode.ts +3 -2
- package/src/http/internals/types.ts +11 -14
- package/src/http/resolveHTTPResponse.ts +28 -37
- package/src/http/{ResponseMeta.ts → types.ts} +0 -0
- package/src/index.ts +3 -7
- package/src/internals/transformTRPCResponse.ts +21 -16
- package/src/internals/types.ts +24 -0
- package/src/observable/index.ts +4 -0
- package/src/observable/internals/identity.ts +3 -0
- package/src/observable/internals/observableToPromise.ts +49 -0
- package/src/observable/internals/pipe.ts +22 -0
- package/src/observable/observable.test.ts +101 -0
- package/src/observable/observable.ts +78 -0
- package/src/observable/operators/index.ts +3 -0
- package/src/observable/operators/map.test.ts +92 -0
- package/src/observable/operators/map.ts +25 -0
- package/src/observable/operators/share.test.ts +60 -0
- package/src/observable/operators/share.ts +67 -0
- package/src/observable/operators/tap.ts +26 -0
- package/src/observable/types.ts +69 -0
- package/src/rpc/codes.ts +2 -1
- package/src/rpc/envelopes.ts +88 -69
- package/src/rpc/internals/invert.ts +27 -0
- package/src/subscription.ts +7 -125
- package/src/transformer.ts +28 -0
- package/src/types.ts +26 -9
- package/dist/TRPCError.d.ts +0 -19
- package/dist/TRPCError.d.ts.map +0 -1
- package/dist/deprecated/LegacyRouter.d.ts +0 -3
- package/dist/deprecated/LegacyRouter.d.ts.map +0 -1
- package/dist/deprecated/createHttpServer.d.ts +0 -19
- package/dist/deprecated/createHttpServer.d.ts.map +0 -1
- package/dist/deprecated/requestHandler.d.ts +0 -15
- package/dist/deprecated/requestHandler.d.ts.map +0 -1
- package/dist/http/ResponseMeta.d.ts.map +0 -1
- package/dist/internals/BaseHandlerOptions.d.ts +0 -13
- package/dist/internals/BaseHandlerOptions.d.ts.map +0 -1
- package/dist/internals/OnErrorFunction.d.ts +0 -11
- package/dist/internals/OnErrorFunction.d.ts.map +0 -1
- package/dist/internals/callProcedure.d.ts.map +0 -1
- package/dist/internals/errors.d.ts.map +0 -1
- package/dist/internals/middlewares.d.ts.map +0 -1
- package/dist/internals/procedure.d.ts +0 -74
- package/dist/internals/procedure.d.ts.map +0 -1
- package/dist/internals/wrapCallSafe.d.ts +0 -16
- package/dist/internals/wrapCallSafe.d.ts.map +0 -1
- package/dist/router.d.ts +0 -176
- package/dist/router.d.ts.map +0 -1
- package/dist/subscription-5b7e1eba.js +0 -136
- package/dist/subscription-e1d42e69.mjs +0 -133
- package/dist/transformTRPCResponse-76e0c91e.mjs +0 -109
- package/dist/transformTRPCResponse-bd24f548.js +0 -114
- package/dist/ws/index.d.ts +0 -7
- package/dist/ws/index.d.ts.map +0 -1
- package/dist/ws/index.js +0 -15
- package/dist/ws/index.mjs +0 -11
- package/src/deprecated/LegacyRouter.ts +0 -3
- package/src/deprecated/createHttpServer.ts +0 -29
- package/src/deprecated/requestHandler.ts +0 -26
- package/src/internals/BaseHandlerOptions.ts +0 -13
- package/src/internals/OnErrorFunction.ts +0 -11
- package/src/internals/procedure.ts +0 -283
- package/src/internals/wrapCallSafe.ts +0 -19
- package/src/ws/index.ts +0 -8
- package/ws/dist/trpc-server-ws.cjs.d.ts +0 -1
- package/ws/dist/trpc-server-ws.cjs.dev.js +0 -15
- package/ws/dist/trpc-server-ws.cjs.js +0 -7
- package/ws/dist/trpc-server-ws.cjs.prod.js +0 -15
- package/ws/dist/trpc-server-ws.esm.js +0 -11
- package/ws/index.d.ts +0 -1
- package/ws/index.js +0 -1
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/// <reference types="@fastify/websocket" />
|
|
2
|
+
import { FastifyInstance, FastifyReply, FastifyRequest } from 'fastify';
|
|
3
|
+
import { FastifyHandlerOptions } from '.';
|
|
4
|
+
import { AnyRouter } from '../../core';
|
|
5
|
+
import { NodeHTTPCreateContextFnOptions } from '../node-http';
|
|
6
|
+
import { WSSHandlerOptions, applyWSSHandler } from '../ws';
|
|
7
|
+
import { fastifyRequestHandler } from './fastifyRequestHandler';
|
|
8
|
+
|
|
9
|
+
export interface FastifyTRPCPluginOptions<TRouter extends AnyRouter> {
|
|
10
|
+
prefix?: string;
|
|
11
|
+
useWSS?: boolean;
|
|
12
|
+
trpcOptions: FastifyHandlerOptions<TRouter, FastifyRequest, FastifyReply>;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export type CreateFastifyContextOptions = NodeHTTPCreateContextFnOptions<
|
|
16
|
+
FastifyRequest,
|
|
17
|
+
FastifyReply
|
|
18
|
+
>;
|
|
19
|
+
|
|
20
|
+
export function fastifyTRPCPlugin<TRouter extends AnyRouter>(
|
|
21
|
+
fastify: FastifyInstance,
|
|
22
|
+
opts: FastifyTRPCPluginOptions<TRouter>,
|
|
23
|
+
done: (err?: Error) => void,
|
|
24
|
+
) {
|
|
25
|
+
fastify.addContentTypeParser(
|
|
26
|
+
'application/json',
|
|
27
|
+
{ parseAs: 'string' },
|
|
28
|
+
function (_, body, _done) {
|
|
29
|
+
_done(null, body);
|
|
30
|
+
},
|
|
31
|
+
);
|
|
32
|
+
|
|
33
|
+
let prefix = opts.prefix ?? '';
|
|
34
|
+
|
|
35
|
+
// https://github.com/fastify/fastify-plugin/blob/fe079bef6557a83794bf437e14b9b9edb8a74104/plugin.js#L11
|
|
36
|
+
// @ts-expect-error property 'default' does not exists on type ...
|
|
37
|
+
if (typeof fastifyTRPCPlugin.default !== 'function') {
|
|
38
|
+
prefix = ''; // handled by fastify internally
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
fastify.all(`${prefix}/:path`, async (req, res) => {
|
|
42
|
+
const path = (req.params as any).path;
|
|
43
|
+
await fastifyRequestHandler({ ...opts.trpcOptions, req, res, path });
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
if (opts.useWSS) {
|
|
47
|
+
applyWSSHandler<TRouter>({
|
|
48
|
+
...(opts.trpcOptions as unknown as WSSHandlerOptions<TRouter>),
|
|
49
|
+
wss: fastify.websocketServer,
|
|
50
|
+
});
|
|
51
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
52
|
+
fastify.get(prefix ?? '/', { websocket: true }, () => {});
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
done();
|
|
56
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { assertNotBrowser } from '../../assertNotBrowser';
|
|
2
|
+
import { AnyRouter } from '../../core';
|
|
3
|
+
import { HTTPRequest } from '../../http/internals/types';
|
|
4
|
+
import { resolveHTTPResponse } from '../../http/resolveHTTPResponse';
|
|
5
|
+
import { FetchHandlerOptions } from './types';
|
|
6
|
+
|
|
7
|
+
assertNotBrowser();
|
|
8
|
+
|
|
9
|
+
export type FetchHandlerRequestOptions<TRouter extends AnyRouter> = {
|
|
10
|
+
req: Request;
|
|
11
|
+
endpoint: string;
|
|
12
|
+
} & FetchHandlerOptions<TRouter>;
|
|
13
|
+
|
|
14
|
+
export async function fetchRequestHandler<TRouter extends AnyRouter>(
|
|
15
|
+
opts: FetchHandlerRequestOptions<TRouter>,
|
|
16
|
+
): Promise<Response> {
|
|
17
|
+
const createContext = async () => {
|
|
18
|
+
return opts.createContext?.({ req: opts.req });
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
const url = new URL(opts.req.url);
|
|
22
|
+
const path = url.pathname.slice(opts.endpoint.length + 1);
|
|
23
|
+
const req: HTTPRequest = {
|
|
24
|
+
query: url.searchParams,
|
|
25
|
+
method: opts.req.method,
|
|
26
|
+
headers: Object.fromEntries(opts.req.headers),
|
|
27
|
+
body: await opts.req.text(),
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
const result = await resolveHTTPResponse({
|
|
31
|
+
req,
|
|
32
|
+
createContext,
|
|
33
|
+
path,
|
|
34
|
+
router: opts.router,
|
|
35
|
+
batching: opts.batching,
|
|
36
|
+
responseMeta: opts.responseMeta,
|
|
37
|
+
onError(o) {
|
|
38
|
+
opts?.onError?.({ ...o, req: opts.req });
|
|
39
|
+
},
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
const res = new Response(result.body, {
|
|
43
|
+
status: result.status,
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
for (const [key, value] of Object.entries(result.headers ?? {})) {
|
|
47
|
+
if (typeof value === 'undefined') {
|
|
48
|
+
continue;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
if (typeof value === 'string') {
|
|
52
|
+
res.headers.set(key, value);
|
|
53
|
+
continue;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
for (const v of value) {
|
|
57
|
+
res.headers.append(key, v);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return res;
|
|
61
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { AnyRouter, inferRouterContext } from '../../core';
|
|
2
|
+
import { HTTPBaseHandlerOptions } from '../../http/internals/types';
|
|
3
|
+
|
|
4
|
+
export type FetchCreateContextFnOptions = {
|
|
5
|
+
req: Request;
|
|
6
|
+
};
|
|
7
|
+
|
|
8
|
+
export type FetchCreateContextFn<TRouter extends AnyRouter> = (opts: {
|
|
9
|
+
req: Request;
|
|
10
|
+
}) => inferRouterContext<TRouter> | Promise<inferRouterContext<TRouter>>;
|
|
11
|
+
|
|
12
|
+
export type FetchCreateContextOption<TRouter extends AnyRouter> =
|
|
13
|
+
unknown extends inferRouterContext<TRouter>
|
|
14
|
+
? {
|
|
15
|
+
/**
|
|
16
|
+
* @link https://trpc.io/docs/context
|
|
17
|
+
**/
|
|
18
|
+
createContext?: FetchCreateContextFn<TRouter>;
|
|
19
|
+
}
|
|
20
|
+
: {
|
|
21
|
+
/**
|
|
22
|
+
* @link https://trpc.io/docs/context
|
|
23
|
+
**/
|
|
24
|
+
createContext: FetchCreateContextFn<TRouter>;
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
export type FetchHandlerOptions<TRouter extends AnyRouter> =
|
|
28
|
+
HTTPBaseHandlerOptions<TRouter, Request> & FetchCreateContextOption<TRouter>;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import {
|
|
2
|
+
CreateAWSLambdaContextOptions,
|
|
3
|
+
awsLambdaRequestHandler,
|
|
4
|
+
} from '../aws-lambda';
|
|
5
|
+
import { APIGatewayEvent } from '../aws-lambda/utils';
|
|
6
|
+
|
|
7
|
+
export * from '../aws-lambda';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* @deprecated use `aws-lambda` instead
|
|
11
|
+
*/
|
|
12
|
+
export type CreateLambdaContextOptions<T extends APIGatewayEvent> =
|
|
13
|
+
CreateAWSLambdaContextOptions<T>;
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* @deprecated use `aws-lambda` instead
|
|
17
|
+
*/
|
|
18
|
+
export const lambdaRequestHandler = awsLambdaRequestHandler;
|
package/src/adapters/next.ts
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
2
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
3
|
-
import type {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
import type {
|
|
4
|
+
NextApiHandler,
|
|
5
|
+
NextApiRequest,
|
|
6
|
+
NextApiResponse,
|
|
7
|
+
} from 'next/types';
|
|
8
|
+
import { AnyRouter } from '../core';
|
|
9
|
+
import { TRPCError } from '../error/TRPCError';
|
|
7
10
|
import { nodeHTTPRequestHandler } from './node-http';
|
|
8
11
|
import {
|
|
9
12
|
NodeHTTPCreateContextFnOptions,
|
|
@@ -42,12 +45,11 @@ export function createNextApiHandler<TRouter extends AnyRouter>(
|
|
|
42
45
|
path: undefined,
|
|
43
46
|
input: undefined,
|
|
44
47
|
});
|
|
45
|
-
|
|
48
|
+
res.statusCode = 500;
|
|
49
|
+
res.json({
|
|
46
50
|
id: -1,
|
|
47
51
|
error,
|
|
48
|
-
};
|
|
49
|
-
res.statusCode = 500;
|
|
50
|
-
res.json(json);
|
|
52
|
+
});
|
|
51
53
|
return;
|
|
52
54
|
}
|
|
53
55
|
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-non-null-assertion */
|
|
2
|
-
import { URLSearchParams } from 'url';
|
|
3
2
|
import { assertNotBrowser } from '../../assertNotBrowser';
|
|
3
|
+
import { AnyRouter } from '../../core';
|
|
4
|
+
import { inferRouterDef } from '../../core/types';
|
|
5
|
+
import { HTTPRequest } from '../../http/internals/types';
|
|
6
|
+
import { resolveHTTPResponse } from '../../http/resolveHTTPResponse';
|
|
7
|
+
import { getPostBody } from './internals/getPostBody';
|
|
4
8
|
import {
|
|
9
|
+
NodeHTTPHandlerOptions,
|
|
5
10
|
NodeHTTPRequest,
|
|
6
11
|
NodeHTTPResponse,
|
|
7
|
-
NodeHTTPHandlerOptions,
|
|
8
12
|
} from './types';
|
|
9
|
-
import { AnyRouter, inferRouterContext } from '../../router';
|
|
10
|
-
import { getPostBody } from './internals/getPostBody';
|
|
11
|
-
import { HTTPRequest } from '../../http/internals/types';
|
|
12
|
-
import { resolveHTTPResponse } from '../../http/resolveHTTPResponse';
|
|
13
13
|
|
|
14
14
|
assertNotBrowser();
|
|
15
15
|
|
|
@@ -29,7 +29,7 @@ export async function nodeHTTPRequestHandler<
|
|
|
29
29
|
TResponse extends NodeHTTPResponse,
|
|
30
30
|
>(opts: NodeHTTPRequestHandlerOptions<TRouter, TRequest, TResponse>) {
|
|
31
31
|
const createContext = async function _createContext(): Promise<
|
|
32
|
-
|
|
32
|
+
inferRouterDef<TRouter>['_ctx']
|
|
33
33
|
> {
|
|
34
34
|
return await opts.createContext?.(opts);
|
|
35
35
|
};
|
|
@@ -1,15 +1,17 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
1
|
+
import { IncomingMessage, ServerResponse } from 'http';
|
|
2
|
+
import { AnyRouter, inferRouterContext } from '../../core';
|
|
3
|
+
import { inferRouterDef } from '../../core';
|
|
4
4
|
import { HTTPBaseHandlerOptions } from '../../http/internals/types';
|
|
5
|
-
import { AnyRouter } from '../../router';
|
|
6
5
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
interface ParsedQs {
|
|
7
|
+
[key: string]: undefined | string | string[] | ParsedQs | ParsedQs[];
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export type NodeHTTPRequest = IncomingMessage & {
|
|
11
|
+
query?: ParsedQs;
|
|
10
12
|
body?: unknown;
|
|
11
13
|
};
|
|
12
|
-
export type NodeHTTPResponse =
|
|
14
|
+
export type NodeHTTPResponse = ServerResponse;
|
|
13
15
|
|
|
14
16
|
export type NodeHTTPCreateContextOption<
|
|
15
17
|
TRouter extends AnyRouter,
|
|
@@ -48,4 +50,4 @@ export type NodeHTTPCreateContextFn<
|
|
|
48
50
|
TResponse,
|
|
49
51
|
> = (
|
|
50
52
|
opts: NodeHTTPCreateContextFnOptions<TRequest, TResponse>,
|
|
51
|
-
) =>
|
|
53
|
+
) => inferRouterDef<TRouter>['_ctx'] | Promise<inferRouterDef<TRouter>['_ctx']>;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-non-null-assertion */
|
|
2
|
+
|
|
2
3
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
3
4
|
import http from 'http';
|
|
4
|
-
import
|
|
5
|
-
import { AnyRouter } from '../router';
|
|
5
|
+
import { AnyRouter } from '../core';
|
|
6
6
|
import {
|
|
7
7
|
NodeHTTPCreateContextFnOptions,
|
|
8
8
|
NodeHTTPHandlerOptions,
|
|
@@ -21,12 +21,20 @@ export function createHTTPHandler<TRouter extends AnyRouter>(
|
|
|
21
21
|
opts: CreateHTTPHandlerOptions<TRouter>,
|
|
22
22
|
) {
|
|
23
23
|
return async (req: http.IncomingMessage, res: http.ServerResponse) => {
|
|
24
|
-
|
|
24
|
+
// if no hostname, set a dummy one
|
|
25
|
+
const href = req.url!.startsWith('/')
|
|
26
|
+
? `http://127.0.0.1${req.url}`
|
|
27
|
+
: req.url!;
|
|
28
|
+
|
|
29
|
+
// get procedure path and remove the leading slash
|
|
30
|
+
// /procedure -> procedure
|
|
31
|
+
const path = new URL(href).pathname.slice(1);
|
|
32
|
+
|
|
25
33
|
await nodeHTTPRequestHandler({
|
|
26
34
|
...opts,
|
|
27
35
|
req,
|
|
28
36
|
res,
|
|
29
|
-
path
|
|
37
|
+
path,
|
|
30
38
|
});
|
|
31
39
|
};
|
|
32
40
|
}
|
package/src/adapters/ws.ts
CHANGED
|
@@ -1,20 +1,22 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { IncomingMessage } from 'http';
|
|
2
2
|
import ws from 'ws';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { getErrorFromUnknown } from '../
|
|
3
|
+
import { AnyRouter, ProcedureType, inferRouterContext } from '../core';
|
|
4
|
+
import { TRPCError } from '../error/TRPCError';
|
|
5
|
+
import { getCauseFromUnknown, getErrorFromUnknown } from '../error/utils';
|
|
6
6
|
import { transformTRPCResponse } from '../internals/transformTRPCResponse';
|
|
7
|
-
import {
|
|
7
|
+
import { BaseHandlerOptions } from '../internals/types';
|
|
8
|
+
import { Unsubscribable, isObservable } from '../observable';
|
|
8
9
|
import {
|
|
9
|
-
|
|
10
|
+
JSONRPC2,
|
|
11
|
+
TRPCClientOutgoingMessage,
|
|
10
12
|
TRPCReconnectNotification,
|
|
11
|
-
|
|
12
|
-
TRPCResponse,
|
|
13
|
+
TRPCResponseMessage,
|
|
13
14
|
} from '../rpc';
|
|
14
|
-
import { Subscription } from '../subscription';
|
|
15
15
|
import { CombinedDataTransformer } from '../transformer';
|
|
16
|
-
import {
|
|
17
|
-
|
|
16
|
+
import {
|
|
17
|
+
NodeHTTPCreateContextFnOptions,
|
|
18
|
+
NodeHTTPCreateContextOption,
|
|
19
|
+
} from './node-http';
|
|
18
20
|
|
|
19
21
|
/* istanbul ignore next */
|
|
20
22
|
function assertIsObject(obj: unknown): asserts obj is Record<string, unknown> {
|
|
@@ -58,7 +60,7 @@ function assertIsJSONRPC2OrUndefined(
|
|
|
58
60
|
function parseMessage(
|
|
59
61
|
obj: unknown,
|
|
60
62
|
transformer: CombinedDataTransformer,
|
|
61
|
-
):
|
|
63
|
+
): TRPCClientOutgoingMessage {
|
|
62
64
|
assertIsObject(obj);
|
|
63
65
|
const { method, params, id, jsonrpc } = obj;
|
|
64
66
|
assertIsRequestId(id);
|
|
@@ -66,8 +68,8 @@ function parseMessage(
|
|
|
66
68
|
if (method === 'subscription.stop') {
|
|
67
69
|
return {
|
|
68
70
|
id,
|
|
71
|
+
jsonrpc,
|
|
69
72
|
method,
|
|
70
|
-
params: undefined,
|
|
71
73
|
};
|
|
72
74
|
}
|
|
73
75
|
assertIsProcedureType(method);
|
|
@@ -76,7 +78,15 @@ function parseMessage(
|
|
|
76
78
|
const { input: rawInput, path } = params;
|
|
77
79
|
assertIsString(path);
|
|
78
80
|
const input = transformer.input.deserialize(rawInput);
|
|
79
|
-
return {
|
|
81
|
+
return {
|
|
82
|
+
id,
|
|
83
|
+
jsonrpc,
|
|
84
|
+
method,
|
|
85
|
+
params: {
|
|
86
|
+
input,
|
|
87
|
+
path,
|
|
88
|
+
},
|
|
89
|
+
};
|
|
80
90
|
}
|
|
81
91
|
|
|
82
92
|
/**
|
|
@@ -84,11 +94,16 @@ function parseMessage(
|
|
|
84
94
|
*/
|
|
85
95
|
export type WSSHandlerOptions<TRouter extends AnyRouter> = BaseHandlerOptions<
|
|
86
96
|
TRouter,
|
|
87
|
-
|
|
97
|
+
IncomingMessage
|
|
88
98
|
> & {
|
|
89
99
|
wss: ws.Server;
|
|
90
100
|
process?: NodeJS.Process;
|
|
91
|
-
} & NodeHTTPCreateContextOption<TRouter,
|
|
101
|
+
} & NodeHTTPCreateContextOption<TRouter, IncomingMessage, ws>;
|
|
102
|
+
|
|
103
|
+
export type CreateWSSContextFnOptions = NodeHTTPCreateContextFnOptions<
|
|
104
|
+
IncomingMessage,
|
|
105
|
+
ws
|
|
106
|
+
>;
|
|
92
107
|
|
|
93
108
|
export function applyWSSHandler<TRouter extends AnyRouter>(
|
|
94
109
|
opts: WSSHandlerOptions<TRouter>,
|
|
@@ -96,22 +111,35 @@ export function applyWSSHandler<TRouter extends AnyRouter>(
|
|
|
96
111
|
const { wss, createContext, router } = opts;
|
|
97
112
|
|
|
98
113
|
const { transformer } = router._def;
|
|
99
|
-
wss.on('connection', (client, req) => {
|
|
100
|
-
const clientSubscriptions = new Map<
|
|
101
|
-
number | string,
|
|
102
|
-
Subscription<TRouter>
|
|
103
|
-
>();
|
|
114
|
+
wss.on('connection', async (client, req) => {
|
|
115
|
+
const clientSubscriptions = new Map<number | string, Unsubscribable>();
|
|
104
116
|
|
|
105
|
-
function respond(untransformedJSON:
|
|
117
|
+
function respond(untransformedJSON: TRPCResponseMessage) {
|
|
106
118
|
client.send(
|
|
107
119
|
JSON.stringify(transformTRPCResponse(router, untransformedJSON)),
|
|
108
120
|
);
|
|
109
121
|
}
|
|
122
|
+
|
|
123
|
+
function stopSubscription(
|
|
124
|
+
subscription: Unsubscribable,
|
|
125
|
+
{ id, jsonrpc }: { id: JSONRPC2.RequestId } & JSONRPC2.BaseEnvelope,
|
|
126
|
+
) {
|
|
127
|
+
subscription.unsubscribe();
|
|
128
|
+
|
|
129
|
+
respond({
|
|
130
|
+
id,
|
|
131
|
+
jsonrpc,
|
|
132
|
+
result: {
|
|
133
|
+
type: 'stopped',
|
|
134
|
+
},
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
|
|
110
138
|
const ctxPromise = createContext?.({ req, res: client });
|
|
111
139
|
let ctx: inferRouterContext<TRouter> | undefined = undefined;
|
|
112
140
|
|
|
113
|
-
async function handleRequest(msg:
|
|
114
|
-
const { id } = msg;
|
|
141
|
+
async function handleRequest(msg: TRPCClientOutgoingMessage) {
|
|
142
|
+
const { id, jsonrpc } = msg;
|
|
115
143
|
/* istanbul ignore next */
|
|
116
144
|
if (id === null) {
|
|
117
145
|
throw new TRPCError({
|
|
@@ -122,7 +150,7 @@ export function applyWSSHandler<TRouter extends AnyRouter>(
|
|
|
122
150
|
if (msg.method === 'subscription.stop') {
|
|
123
151
|
const sub = clientSubscriptions.get(id);
|
|
124
152
|
if (sub) {
|
|
125
|
-
sub
|
|
153
|
+
stopSubscription(sub, { id, jsonrpc });
|
|
126
154
|
}
|
|
127
155
|
clientSubscriptions.delete(id);
|
|
128
156
|
return;
|
|
@@ -131,17 +159,22 @@ export function applyWSSHandler<TRouter extends AnyRouter>(
|
|
|
131
159
|
const type = msg.method;
|
|
132
160
|
try {
|
|
133
161
|
await ctxPromise; // asserts context has been set
|
|
134
|
-
const result = await callProcedure({
|
|
135
|
-
path,
|
|
136
|
-
input,
|
|
137
|
-
type,
|
|
138
|
-
router,
|
|
139
|
-
ctx,
|
|
140
|
-
});
|
|
141
162
|
|
|
142
|
-
|
|
163
|
+
const caller = router.createCaller(ctx);
|
|
164
|
+
const result = await caller[type](path, input as any);
|
|
165
|
+
|
|
166
|
+
if (type === 'subscription') {
|
|
167
|
+
if (!isObservable(result)) {
|
|
168
|
+
throw new 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
|
|
143
175
|
respond({
|
|
144
176
|
id,
|
|
177
|
+
jsonrpc,
|
|
145
178
|
result: {
|
|
146
179
|
type: 'data',
|
|
147
180
|
data: result,
|
|
@@ -150,86 +183,98 @@ export function applyWSSHandler<TRouter extends AnyRouter>(
|
|
|
150
183
|
return;
|
|
151
184
|
}
|
|
152
185
|
|
|
153
|
-
const
|
|
186
|
+
const observable = result;
|
|
187
|
+
const sub = observable.subscribe({
|
|
188
|
+
next(data) {
|
|
189
|
+
respond({
|
|
190
|
+
id,
|
|
191
|
+
jsonrpc,
|
|
192
|
+
result: {
|
|
193
|
+
type: 'data',
|
|
194
|
+
data,
|
|
195
|
+
},
|
|
196
|
+
});
|
|
197
|
+
},
|
|
198
|
+
error(err) {
|
|
199
|
+
const error = getErrorFromUnknown(err);
|
|
200
|
+
opts.onError?.({ error, path, type, ctx, req, input });
|
|
201
|
+
respond({
|
|
202
|
+
id,
|
|
203
|
+
jsonrpc,
|
|
204
|
+
error: router.getErrorShape({
|
|
205
|
+
error,
|
|
206
|
+
type,
|
|
207
|
+
path,
|
|
208
|
+
input,
|
|
209
|
+
ctx,
|
|
210
|
+
}),
|
|
211
|
+
});
|
|
212
|
+
},
|
|
213
|
+
complete() {
|
|
214
|
+
respond({
|
|
215
|
+
id,
|
|
216
|
+
jsonrpc,
|
|
217
|
+
result: {
|
|
218
|
+
type: 'stopped',
|
|
219
|
+
},
|
|
220
|
+
});
|
|
221
|
+
},
|
|
222
|
+
});
|
|
154
223
|
/* istanbul ignore next */
|
|
155
224
|
if (client.readyState !== client.OPEN) {
|
|
156
225
|
// if the client got disconnected whilst initializing the subscription
|
|
157
|
-
|
|
226
|
+
// no need to send stopped message if the client is disconnected
|
|
227
|
+
sub.unsubscribe();
|
|
158
228
|
return;
|
|
159
229
|
}
|
|
230
|
+
|
|
160
231
|
/* istanbul ignore next */
|
|
161
232
|
if (clientSubscriptions.has(id)) {
|
|
162
233
|
// duplicate request ids for client
|
|
163
|
-
sub
|
|
234
|
+
stopSubscription(sub, { id, jsonrpc });
|
|
164
235
|
throw new TRPCError({
|
|
165
236
|
message: `Duplicate id ${id}`,
|
|
166
237
|
code: 'BAD_REQUEST',
|
|
167
238
|
});
|
|
168
239
|
}
|
|
169
240
|
clientSubscriptions.set(id, sub);
|
|
170
|
-
sub.on('data', (data: unknown) => {
|
|
171
|
-
respond({
|
|
172
|
-
id,
|
|
173
|
-
result: {
|
|
174
|
-
type: 'data',
|
|
175
|
-
data,
|
|
176
|
-
},
|
|
177
|
-
});
|
|
178
|
-
});
|
|
179
|
-
sub.on('error', (_error: unknown) => {
|
|
180
|
-
const error = getErrorFromUnknown(_error);
|
|
181
|
-
const json: TRPCErrorResponse = {
|
|
182
|
-
id,
|
|
183
|
-
error: router.getErrorShape({
|
|
184
|
-
error,
|
|
185
|
-
type,
|
|
186
|
-
path,
|
|
187
|
-
input,
|
|
188
|
-
ctx,
|
|
189
|
-
}),
|
|
190
|
-
};
|
|
191
|
-
opts.onError?.({ error, path, type, ctx, req, input });
|
|
192
|
-
respond(json);
|
|
193
|
-
});
|
|
194
|
-
sub.on('destroy', () => {
|
|
195
|
-
respond({
|
|
196
|
-
id,
|
|
197
|
-
result: {
|
|
198
|
-
type: 'stopped',
|
|
199
|
-
},
|
|
200
|
-
});
|
|
201
|
-
});
|
|
202
241
|
|
|
203
242
|
respond({
|
|
204
243
|
id,
|
|
244
|
+
jsonrpc,
|
|
205
245
|
result: {
|
|
206
246
|
type: 'started',
|
|
207
247
|
},
|
|
208
248
|
});
|
|
209
|
-
await sub.start();
|
|
210
249
|
} catch (cause) /* istanbul ignore next */ {
|
|
211
250
|
// procedure threw an error
|
|
212
251
|
const error = getErrorFromUnknown(cause);
|
|
213
|
-
const json = router.getErrorShape({
|
|
214
|
-
error,
|
|
215
|
-
type,
|
|
216
|
-
path,
|
|
217
|
-
input,
|
|
218
|
-
ctx,
|
|
219
|
-
});
|
|
220
252
|
opts.onError?.({ error, path, type, ctx, req, input });
|
|
221
|
-
respond({
|
|
253
|
+
respond({
|
|
254
|
+
id,
|
|
255
|
+
jsonrpc,
|
|
256
|
+
error: router.getErrorShape({
|
|
257
|
+
error,
|
|
258
|
+
type,
|
|
259
|
+
path,
|
|
260
|
+
input,
|
|
261
|
+
ctx,
|
|
262
|
+
}),
|
|
263
|
+
});
|
|
222
264
|
}
|
|
223
265
|
}
|
|
224
266
|
client.on('message', async (message) => {
|
|
225
267
|
try {
|
|
226
268
|
const msgJSON: unknown = JSON.parse(message.toString());
|
|
227
269
|
const msgs: unknown[] = Array.isArray(msgJSON) ? msgJSON : [msgJSON];
|
|
228
|
-
|
|
270
|
+
const promises = msgs
|
|
271
|
+
.map((raw) => parseMessage(raw, transformer))
|
|
272
|
+
.map(handleRequest);
|
|
273
|
+
await Promise.all(promises);
|
|
229
274
|
} catch (cause) {
|
|
230
275
|
const error = new TRPCError({
|
|
231
276
|
code: 'PARSE_ERROR',
|
|
232
|
-
cause,
|
|
277
|
+
cause: getCauseFromUnknown(cause),
|
|
233
278
|
});
|
|
234
279
|
|
|
235
280
|
respond({
|
|
@@ -247,7 +292,7 @@ export function applyWSSHandler<TRouter extends AnyRouter>(
|
|
|
247
292
|
|
|
248
293
|
client.once('close', () => {
|
|
249
294
|
for (const sub of clientSubscriptions.values()) {
|
|
250
|
-
sub.
|
|
295
|
+
sub.unsubscribe();
|
|
251
296
|
}
|
|
252
297
|
clientSubscriptions.clear();
|
|
253
298
|
});
|
|
@@ -256,7 +301,15 @@ export function applyWSSHandler<TRouter extends AnyRouter>(
|
|
|
256
301
|
ctx = await ctxPromise;
|
|
257
302
|
} catch (cause) {
|
|
258
303
|
const error = getErrorFromUnknown(cause);
|
|
259
|
-
|
|
304
|
+
opts.onError?.({
|
|
305
|
+
error,
|
|
306
|
+
path: undefined,
|
|
307
|
+
type: 'unknown',
|
|
308
|
+
ctx,
|
|
309
|
+
req,
|
|
310
|
+
input: undefined,
|
|
311
|
+
});
|
|
312
|
+
respond({
|
|
260
313
|
id: null,
|
|
261
314
|
error: router.getErrorShape({
|
|
262
315
|
error,
|
|
@@ -265,16 +318,7 @@ export function applyWSSHandler<TRouter extends AnyRouter>(
|
|
|
265
318
|
input: undefined,
|
|
266
319
|
ctx,
|
|
267
320
|
}),
|
|
268
|
-
};
|
|
269
|
-
opts.onError?.({
|
|
270
|
-
error,
|
|
271
|
-
path: undefined,
|
|
272
|
-
type: 'unknown',
|
|
273
|
-
ctx,
|
|
274
|
-
req,
|
|
275
|
-
input: undefined,
|
|
276
321
|
});
|
|
277
|
-
respond(json);
|
|
278
322
|
|
|
279
323
|
// close in next tick
|
|
280
324
|
(global.setImmediate ?? global.setTimeout)(() => {
|
|
@@ -282,7 +326,7 @@ export function applyWSSHandler<TRouter extends AnyRouter>(
|
|
|
282
326
|
});
|
|
283
327
|
}
|
|
284
328
|
}
|
|
285
|
-
createContextAsync();
|
|
329
|
+
await createContextAsync();
|
|
286
330
|
});
|
|
287
331
|
|
|
288
332
|
return {
|