@orpc/server 2.0.0-beta.49 → 2.0.0-beta.50
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/adapters/aws-lambda/handler.d.ts +17 -15
- package/dist/adapters/aws-lambda/handler.js +23 -23
- package/dist/adapters/aws-lambda/index.d.ts +4 -16
- package/dist/adapters/aws-lambda/index.js +2 -2
- package/dist/adapters/aws-lambda/rpc-handler.d.ts +9 -9
- package/dist/adapters/aws-lambda/rpc-handler.js +20 -17
- package/dist/adapters/crossws/handler.d.ts +44 -42
- package/dist/adapters/crossws/handler.js +53 -60
- package/dist/adapters/crossws/index.d.ts +3 -2
- package/dist/adapters/crossws/index.js +2 -2
- package/dist/adapters/crossws/rpc-handler.d.ts +10 -10
- package/dist/adapters/crossws/rpc-handler.js +17 -14
- package/dist/adapters/fastify/handler.d.ts +17 -15
- package/dist/adapters/fastify/handler.js +20 -20
- package/dist/adapters/fastify/index.d.ts +3 -2
- package/dist/adapters/fastify/index.js +2 -2
- package/dist/adapters/fastify/rpc-handler.d.ts +9 -9
- package/dist/adapters/fastify/rpc-handler.js +16 -13
- package/dist/adapters/fetch/handler.d.ts +19 -17
- package/dist/adapters/fetch/handler.js +22 -22
- package/dist/adapters/fetch/index.d.ts +4 -7
- package/dist/adapters/fetch/index.js +3 -7
- package/dist/adapters/fetch/rpc-handler.d.ts +9 -9
- package/dist/adapters/fetch/rpc-handler.js +18 -15
- package/dist/adapters/message-port/handler.d.ts +58 -60
- package/dist/adapters/message-port/handler.js +72 -86
- package/dist/adapters/message-port/index.d.ts +3 -2
- package/dist/adapters/message-port/index.js +2 -2
- package/dist/adapters/message-port/rpc-handler.d.ts +9 -9
- package/dist/adapters/message-port/rpc-handler.js +17 -14
- package/dist/adapters/node/handler.d.ts +17 -15
- package/dist/adapters/node/handler.js +20 -20
- package/dist/adapters/node/index.d.ts +4 -7
- package/dist/adapters/node/index.js +3 -7
- package/dist/adapters/node/rpc-handler.d.ts +9 -9
- package/dist/adapters/node/rpc-handler.js +17 -14
- package/dist/adapters/standard/codec.d.ts +13 -13
- package/dist/adapters/standard/handler.d.ts +49 -49
- package/dist/adapters/standard/handler.js +205 -205
- package/dist/adapters/standard/index.d.ts +7 -6
- package/dist/adapters/standard/index.js +4 -5
- package/dist/adapters/standard/plugin.d.ts +25 -31
- package/dist/adapters/standard/plugin.js +14 -16
- package/dist/adapters/standard/rpc-handler-codec.d.ts +39 -43
- package/dist/adapters/standard/rpc-handler-codec.js +50 -51
- package/dist/adapters/standard/rpc-matcher.d.ts +40 -40
- package/dist/adapters/standard/rpc-matcher.js +103 -149
- package/dist/adapters/standard/utils.d.ts +8 -8
- package/dist/adapters/standard/utils.js +7 -5
- package/dist/adapters/standard-peer/index.d.ts +2 -1
- package/dist/adapters/standard-peer/index.js +1 -1
- package/dist/adapters/standard-peer/utils.d.ts +6 -4
- package/dist/adapters/standard-peer/utils.js +12 -6
- package/dist/adapters/websocket/handler.d.ts +52 -50
- package/dist/adapters/websocket/handler.js +75 -85
- package/dist/adapters/websocket/index.d.ts +3 -2
- package/dist/adapters/websocket/index.js +2 -2
- package/dist/adapters/websocket/rpc-handler.d.ts +9 -9
- package/dist/adapters/websocket/rpc-handler.js +17 -14
- package/dist/builder-variants.d.ts +195 -195
- package/dist/builder.d.ts +103 -104
- package/dist/builder.js +198 -224
- package/dist/constants.d.ts +1 -1
- package/dist/constants.js +4 -2
- package/dist/context.d.ts +3 -3
- package/dist/extensions/callable.d.ts +11 -11
- package/dist/extensions/callable.js +6 -5
- package/dist/helpers/base64url.d.ts +1 -1
- package/dist/helpers/base64url.js +44 -49
- package/dist/helpers/cookie.d.ts +10 -11
- package/dist/helpers/cookie.js +56 -63
- package/dist/helpers/encryption.d.ts +1 -1
- package/dist/helpers/encryption.js +80 -70
- package/dist/helpers/index.d.ts +5 -4
- package/dist/helpers/index.js +4 -4
- package/dist/helpers/signing.d.ts +1 -1
- package/dist/helpers/signing.js +72 -82
- package/dist/implementer-procedure.d.ts +12 -13
- package/dist/implementer-procedure.js +37 -44
- package/dist/implementer-router.d.ts +30 -36
- package/dist/implementer-router.js +92 -111
- package/dist/implementer.d.ts +8 -8
- package/dist/implementer.js +28 -35
- package/dist/index.d.ts +22 -61
- package/dist/index.js +16 -48
- package/dist/lazy.d.ts +14 -14
- package/dist/lazy.js +19 -30
- package/dist/middleware-decorated.d.ts +8 -9
- package/dist/middleware-decorated.js +66 -70
- package/dist/middleware.d.ts +34 -34
- package/dist/plugins/batch.d.ts +75 -75
- package/dist/plugins/batch.js +345 -379
- package/dist/plugins/cors.d.ts +60 -64
- package/dist/plugins/cors.js +118 -111
- package/dist/plugins/get-method-csrf-protection.d.ts +8 -6
- package/dist/plugins/get-method-csrf-protection.js +47 -63
- package/dist/plugins/head-method.d.ts +11 -9
- package/dist/plugins/head-method.js +97 -94
- package/dist/plugins/index.d.ts +15 -39
- package/dist/plugins/index.js +14 -29
- package/dist/plugins/method-override.d.ts +30 -28
- package/dist/plugins/method-override.js +53 -49
- package/dist/plugins/request-compression.d.ts +11 -9
- package/dist/plugins/request-compression.js +52 -79
- package/dist/plugins/request-headers.d.ts +10 -8
- package/dist/plugins/request-headers.js +27 -29
- package/dist/plugins/request-limit.d.ts +21 -19
- package/dist/plugins/request-limit.js +60 -67
- package/dist/plugins/response-compression.d.ts +42 -39
- package/dist/plugins/response-compression.js +150 -202
- package/dist/plugins/response-headers.d.ts +15 -13
- package/dist/plugins/response-headers.js +43 -46
- package/dist/plugins/rethrow.d.ts +25 -23
- package/dist/plugins/rethrow.js +46 -58
- package/dist/plugins/signal-sync.d.ts +7 -5
- package/dist/plugins/signal-sync.js +71 -86
- package/dist/plugins/timeout.d.ts +29 -27
- package/dist/plugins/timeout.js +61 -58
- package/dist/procedure-client.d.ts +14 -15
- package/dist/procedure-client.js +149 -166
- package/dist/procedure-decorated.d.ts +9 -9
- package/dist/procedure-decorated.js +36 -44
- package/dist/procedure-utils.d.ts +10 -30
- package/dist/procedure-utils.js +39 -40
- package/dist/procedure.d.ts +60 -60
- package/dist/procedure.js +18 -24
- package/dist/router-client.d.ts +9 -11
- package/dist/router-client.js +33 -41
- package/dist/router-hidden.js +10 -12
- package/dist/router-utils.d.ts +13 -30
- package/dist/router-utils.js +146 -191
- package/dist/router.d.ts +12 -26
- package/package.json +10 -10
- package/dist/adapters/standard/codec.js +0 -1
- package/dist/builder-variants.js +0 -1
- package/dist/context.js +0 -1
- package/dist/middleware.js +0 -1
- package/dist/router-hidden.d.ts +0 -5
- package/dist/router.js +0 -1
|
@@ -1,25 +1,27 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import
|
|
1
|
+
import { Context } from "../../context.js";
|
|
2
|
+
import { StandardHandler } from "../standard/handler.js";
|
|
3
|
+
import { FriendlyStandardHandlerHandleOptions } from "../standard/utils.js";
|
|
4
|
+
import "../standard/index.js";
|
|
5
|
+
import { MaybeOptionalOptions } from "@orpc/shared";
|
|
6
|
+
import { AnyAPIGatewayProxyEvent, HttpResponseStream, SendStandardResponseOptions } from "@standard-server/aws-lambda";
|
|
5
7
|
export type AwsLambdaHandlerHandleResult = {
|
|
6
|
-
|
|
8
|
+
matched: true;
|
|
7
9
|
} | {
|
|
8
|
-
|
|
10
|
+
matched: false;
|
|
9
11
|
};
|
|
10
12
|
export interface AwsLambdaHandlerOptions<_T extends Context> {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
/**
|
|
14
|
+
* Custom options for `sendStandardResponse`, used to send a `Standard Response`
|
|
15
|
+
*/
|
|
16
|
+
sendStandardResponse?: SendStandardResponseOptions | undefined;
|
|
15
17
|
}
|
|
16
18
|
/**
|
|
17
19
|
* Requires the AWS Lambda Node.js runtime with response streaming enabled,
|
|
18
20
|
* handlers should be wrapped with `awslambda.streamifyResponse`.
|
|
19
21
|
*/
|
|
20
22
|
export declare class AwsLambdaHandler<T extends Context> {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
}
|
|
23
|
+
private readonly standardHandler;
|
|
24
|
+
private readonly sendStandardResponseOptions;
|
|
25
|
+
constructor(standardHandler: StandardHandler<T>, options?: NoInfer<AwsLambdaHandlerOptions<T>>);
|
|
26
|
+
handle(event: AnyAPIGatewayProxyEvent, responseStream: HttpResponseStream, ...rest: MaybeOptionalOptions<FriendlyStandardHandlerHandleOptions<T>>): Promise<AwsLambdaHandlerHandleResult>;
|
|
27
|
+
}
|
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { resolveFriendlyStandardHandlerHandleOptions } from "../standard/utils.js";
|
|
2
|
+
import { resolveMaybeOptionalOptions } from "@orpc/shared";
|
|
3
|
+
import { sendStandardResponse, toStandardLazyRequest } from "@standard-server/aws-lambda";
|
|
4
|
+
// src/adapters/aws-lambda/handler.ts
|
|
4
5
|
/**
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
}
|
|
6
|
+
* Requires the AWS Lambda Node.js runtime with response streaming enabled,
|
|
7
|
+
* handlers should be wrapped with `awslambda.streamifyResponse`.
|
|
8
|
+
*/
|
|
9
|
+
var AwsLambdaHandler = class {
|
|
10
|
+
standardHandler;
|
|
11
|
+
sendStandardResponseOptions;
|
|
12
|
+
constructor(standardHandler, options = {}) {
|
|
13
|
+
this.standardHandler = standardHandler;
|
|
14
|
+
this.sendStandardResponseOptions = options.sendStandardResponse;
|
|
15
|
+
}
|
|
16
|
+
async handle(event, responseStream, ...rest) {
|
|
17
|
+
const standardRequest = toStandardLazyRequest(event, responseStream);
|
|
18
|
+
const result = await this.standardHandler.handle(standardRequest, resolveFriendlyStandardHandlerHandleOptions(resolveMaybeOptionalOptions(rest)));
|
|
19
|
+
if (!result.matched) return result;
|
|
20
|
+
await sendStandardResponse(responseStream, result.response, this.sendStandardResponseOptions);
|
|
21
|
+
return result;
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
export { AwsLambdaHandler };
|
|
@@ -1,16 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
* AWS API Gateway proxy event, payload format 2.0, also used by Lambda Function URLs.
|
|
6
|
-
*
|
|
7
|
-
* @see {@link https://orpc.dev/docs/adapters/aws-lambda | AWS Lambda Adapter}
|
|
8
|
-
*/
|
|
9
|
-
APIGatewayProxyEventV2,
|
|
10
|
-
/**
|
|
11
|
-
* Shape of the `awslambda` global the Lambda Node.js runtime injects when response streaming is enabled.
|
|
12
|
-
* Declare it yourself: `declare const awslambda: AwsLambdaGlobal`.
|
|
13
|
-
*
|
|
14
|
-
* @see {@link https://orpc.dev/docs/adapters/aws-lambda | AWS Lambda Adapter}
|
|
15
|
-
*/
|
|
16
|
-
AwsLambdaGlobal, HttpResponseStream, } from '@standard-server/aws-lambda';
|
|
1
|
+
import { AwsLambdaHandler, AwsLambdaHandlerHandleResult, AwsLambdaHandlerOptions } from "./handler.js";
|
|
2
|
+
import { RPCHandler, RPCHandlerOptions } from "./rpc-handler.js";
|
|
3
|
+
import { APIGatewayProxyEvent, APIGatewayProxyEventV2, AnyAPIGatewayProxyEvent, AwsLambdaGlobal, HttpResponseStream } from "@standard-server/aws-lambda";
|
|
4
|
+
export { type APIGatewayProxyEvent, type APIGatewayProxyEventV2, type AnyAPIGatewayProxyEvent, type AwsLambdaGlobal, AwsLambdaHandler, AwsLambdaHandlerHandleResult, AwsLambdaHandlerOptions, type HttpResponseStream, RPCHandler, RPCHandlerOptions };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export
|
|
2
|
-
export
|
|
1
|
+
export { AwsLambdaHandler } from "./handler.js";
|
|
2
|
+
export { RPCHandler } from "./rpc-handler.js";
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
|
|
7
|
-
}
|
|
1
|
+
import { Context } from "../../context.js";
|
|
2
|
+
import { StandardHandlerOptions } from "../standard/handler.js";
|
|
3
|
+
import { Router } from "../../router.js";
|
|
4
|
+
import { RPCHandlerCodecOptions } from "../standard/rpc-handler-codec.js";
|
|
5
|
+
import "../standard/index.js";
|
|
6
|
+
import { AwsLambdaHandler, AwsLambdaHandlerOptions } from "./handler.js";
|
|
7
|
+
export interface RPCHandlerOptions<T extends Context> extends AwsLambdaHandlerOptions<T>, StandardHandlerOptions<T>, RPCHandlerCodecOptions<T> {}
|
|
8
8
|
/**
|
|
9
9
|
* Serves an oRPC router over the RPC protocol on AWS Lambda,
|
|
10
10
|
* behind API Gateway or Lambda Function URLs.
|
|
@@ -15,5 +15,5 @@ export interface RPCHandlerOptions<T extends Context> extends AwsLambdaHandlerOp
|
|
|
15
15
|
* @see {@link https://orpc.dev/docs/adapters/aws-lambda | AWS Lambda Adapter}
|
|
16
16
|
*/
|
|
17
17
|
export declare class RPCHandler<T extends Context> extends AwsLambdaHandler<T> {
|
|
18
|
-
|
|
19
|
-
}
|
|
18
|
+
constructor(router: Router<T>, options?: NoInfer<RPCHandlerOptions<T>>);
|
|
19
|
+
}
|
|
@@ -1,18 +1,21 @@
|
|
|
1
|
-
import { RPCHandlerCodec
|
|
2
|
-
import {
|
|
1
|
+
import { RPCHandlerCodec } from "../standard/rpc-handler-codec.js";
|
|
2
|
+
import { StandardHandler } from "../standard/handler.js";
|
|
3
|
+
import { AwsLambdaHandler } from "./handler.js";
|
|
4
|
+
// src/adapters/aws-lambda/rpc-handler.ts
|
|
3
5
|
/**
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
}
|
|
6
|
+
* Serves an oRPC router over the RPC protocol on AWS Lambda,
|
|
7
|
+
* behind API Gateway or Lambda Function URLs.
|
|
8
|
+
*
|
|
9
|
+
* @remarks
|
|
10
|
+
* **Warning**: Requires the Lambda Node.js runtime with response streaming enabled, so handlers must be wrapped with `awslambda.streamifyResponse`.
|
|
11
|
+
*
|
|
12
|
+
* @see {@link https://orpc.dev/docs/adapters/aws-lambda | AWS Lambda Adapter}
|
|
13
|
+
*/
|
|
14
|
+
var RPCHandler = class extends AwsLambdaHandler {
|
|
15
|
+
constructor(router, options = {}) {
|
|
16
|
+
const codec = new RPCHandlerCodec(router, options);
|
|
17
|
+
const handler = new StandardHandler(codec, options);
|
|
18
|
+
super(handler, options);
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
export { RPCHandler };
|
|
@@ -1,45 +1,47 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
import { Context } from "../../context.js";
|
|
2
|
+
import { StandardHandler } from "../standard/handler.js";
|
|
3
|
+
import { FriendlyStandardHandlerHandleOptions } from "../standard/utils.js";
|
|
4
|
+
import "../standard/index.js";
|
|
5
|
+
import { MaybeOptionalOptions } from "@orpc/shared";
|
|
6
|
+
import { DecodePeerMessageOptions, EncodePeerMessageOptions } from "@standard-server/peer";
|
|
7
|
+
import { Message, Peer } from "crossws";
|
|
8
|
+
export type CrosswsPeerLike = Pick<Peer, "send">;
|
|
9
|
+
export type CrosswsMessageLike = Pick<Message, "rawData" | "uint8Array">;
|
|
8
10
|
export interface experimental_CrosswsHandlerOptions<_T extends Context> {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
11
|
+
/**
|
|
12
|
+
* Options for encoding peer messages. such as `prefix` for distinguishing messages on the same channel..
|
|
13
|
+
*/
|
|
14
|
+
encodePeerMessage?: EncodePeerMessageOptions | undefined;
|
|
15
|
+
/**
|
|
16
|
+
* Options for decoding peer messages. such as `prefix` for distinguishing messages on the same channel..
|
|
17
|
+
*/
|
|
18
|
+
decodePeerMessage?: DecodePeerMessageOptions | undefined;
|
|
17
19
|
}
|
|
18
20
|
export declare class experimental_CrosswsHandler<T extends Context> {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
}
|
|
21
|
+
private readonly handler;
|
|
22
|
+
/**
|
|
23
|
+
* `null` marks a closed peer, so late messages never create a new server peer.
|
|
24
|
+
*/
|
|
25
|
+
private readonly peers;
|
|
26
|
+
private readonly encodePeerMessageOptions;
|
|
27
|
+
private readonly decodePeerMessageOptions;
|
|
28
|
+
constructor(handler: StandardHandler<T>, options?: NoInfer<experimental_CrosswsHandlerOptions<T>>);
|
|
29
|
+
/**
|
|
30
|
+
* Handles a single WebSocket message.
|
|
31
|
+
*
|
|
32
|
+
* Message order matters. Call this immediately after receiving a message,
|
|
33
|
+
* before any other async work, to preserve ordering.
|
|
34
|
+
*
|
|
35
|
+
* @param ws The crossws peer instance. Use the same instance for all messages.
|
|
36
|
+
*/
|
|
37
|
+
message(ws: CrosswsPeerLike, message: CrosswsMessageLike, ...rest: MaybeOptionalOptions<FriendlyStandardHandlerHandleOptions<T>>): Promise<{
|
|
38
|
+
matched: boolean;
|
|
39
|
+
}>;
|
|
40
|
+
/**
|
|
41
|
+
* Cleans up peer state for a closed WebSocket.
|
|
42
|
+
* Messages passed to `.message()` for this peer afterwards are ignored.
|
|
43
|
+
*
|
|
44
|
+
* @param ws The same crossws peer instance passed to `.message()`.
|
|
45
|
+
*/
|
|
46
|
+
close(ws: CrosswsPeerLike): Promise<void>;
|
|
47
|
+
}
|
|
@@ -1,60 +1,53 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
*/
|
|
55
|
-
async close(ws) {
|
|
56
|
-
const peer = this.peers.get(ws);
|
|
57
|
-
this.peers.set(ws, null);
|
|
58
|
-
await peer?.close();
|
|
59
|
-
}
|
|
60
|
-
}
|
|
1
|
+
import { createStandardPeerRequestHandler } from "../standard-peer/utils.js";
|
|
2
|
+
import { resolveMaybeOptionalOptions } from "@orpc/shared";
|
|
3
|
+
import { ServerPeer, decodePeerMessage, encodePeerMessage, isClientPeerSendMessage } from "@standard-server/peer";
|
|
4
|
+
// src/adapters/crossws/handler.ts
|
|
5
|
+
var experimental_CrosswsHandler = class {
|
|
6
|
+
handler;
|
|
7
|
+
/**
|
|
8
|
+
* `null` marks a closed peer, so late messages never create a new server peer.
|
|
9
|
+
*/
|
|
10
|
+
peers = /* @__PURE__ */ new WeakMap();
|
|
11
|
+
encodePeerMessageOptions;
|
|
12
|
+
decodePeerMessageOptions;
|
|
13
|
+
constructor(handler, options = {}) {
|
|
14
|
+
this.handler = handler;
|
|
15
|
+
this.encodePeerMessageOptions = options.encodePeerMessage;
|
|
16
|
+
this.decodePeerMessageOptions = options.decodePeerMessage;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Handles a single WebSocket message.
|
|
20
|
+
*
|
|
21
|
+
* Message order matters. Call this immediately after receiving a message,
|
|
22
|
+
* before any other async work, to preserve ordering.
|
|
23
|
+
*
|
|
24
|
+
* @param ws The crossws peer instance. Use the same instance for all messages.
|
|
25
|
+
*/
|
|
26
|
+
async message(ws, message, ...rest) {
|
|
27
|
+
/**
|
|
28
|
+
* Message order is important: loading -> decode -> .message.
|
|
29
|
+
* This flow must stay synchronous, or we need to use `sequential` helper
|
|
30
|
+
*/
|
|
31
|
+
const encodedMessage = typeof message.rawData === "string" ? message.rawData : message.uint8Array();
|
|
32
|
+
const result = decodePeerMessage(encodedMessage, this.decodePeerMessageOptions);
|
|
33
|
+
let peer = this.peers.get(ws);
|
|
34
|
+
if (peer === null) return result;
|
|
35
|
+
if (!peer) this.peers.set(ws, peer = new ServerPeer(async (message) => {
|
|
36
|
+
ws.send(await encodePeerMessage(message, this.encodePeerMessageOptions));
|
|
37
|
+
}));
|
|
38
|
+
if (result.matched && isClientPeerSendMessage(result.message)) await peer.message(result.message, createStandardPeerRequestHandler(this.handler, resolveMaybeOptionalOptions(rest)));
|
|
39
|
+
return result;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Cleans up peer state for a closed WebSocket.
|
|
43
|
+
* Messages passed to `.message()` for this peer afterwards are ignored.
|
|
44
|
+
*
|
|
45
|
+
* @param ws The same crossws peer instance passed to `.message()`.
|
|
46
|
+
*/
|
|
47
|
+
async close(ws) {
|
|
48
|
+
const peer = this.peers.get(ws);
|
|
49
|
+
this.peers.set(ws, null);
|
|
50
|
+
await peer?.close();
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
export { experimental_CrosswsHandler };
|
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import { CrosswsMessageLike, CrosswsPeerLike, experimental_CrosswsHandler, experimental_CrosswsHandlerOptions } from "./handler.js";
|
|
2
|
+
import { experimental_RPCHandler, experimental_RPCHandlerOptions } from "./rpc-handler.js";
|
|
3
|
+
export { CrosswsMessageLike, CrosswsPeerLike, experimental_CrosswsHandler, experimental_CrosswsHandlerOptions, experimental_RPCHandler, experimental_RPCHandlerOptions };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export
|
|
2
|
-
export
|
|
1
|
+
export { experimental_CrosswsHandler } from "./handler.js";
|
|
2
|
+
export { experimental_RPCHandler } from "./rpc-handler.js";
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
|
|
7
|
-
}
|
|
1
|
+
import { Context } from "../../context.js";
|
|
2
|
+
import { StandardHandlerOptions } from "../standard/handler.js";
|
|
3
|
+
import { Router } from "../../router.js";
|
|
4
|
+
import { RPCHandlerCodecOptions } from "../standard/rpc-handler-codec.js";
|
|
5
|
+
import "../standard/index.js";
|
|
6
|
+
import { experimental_CrosswsHandler, experimental_CrosswsHandlerOptions } from "./handler.js";
|
|
7
|
+
export interface experimental_RPCHandlerOptions<T extends Context> extends StandardHandlerOptions<T>, RPCHandlerCodecOptions<T>, experimental_CrosswsHandlerOptions<T> {}
|
|
8
8
|
/**
|
|
9
9
|
* Serves an oRPC router over the RPC protocol on a WebSocket connection
|
|
10
10
|
* managed by [crossws](https://github.com/h3js/crossws).
|
|
11
11
|
*
|
|
12
12
|
* @see {@link https://orpc.dev/docs/adapters/websocket | WebSocket Adapters}
|
|
13
13
|
*/
|
|
14
|
-
export declare class experimental_RPCHandler<T extends Context> extends
|
|
15
|
-
|
|
16
|
-
}
|
|
14
|
+
export declare class experimental_RPCHandler<T extends Context> extends experimental_CrosswsHandler<T> {
|
|
15
|
+
constructor(router: Router<T>, options?: NoInfer<experimental_RPCHandlerOptions<T>>);
|
|
16
|
+
}
|
|
@@ -1,15 +1,18 @@
|
|
|
1
|
-
import { RPCHandlerCodec
|
|
2
|
-
import {
|
|
1
|
+
import { RPCHandlerCodec } from "../standard/rpc-handler-codec.js";
|
|
2
|
+
import { StandardHandler } from "../standard/handler.js";
|
|
3
|
+
import { experimental_CrosswsHandler } from "./handler.js";
|
|
4
|
+
// src/adapters/crossws/rpc-handler.ts
|
|
3
5
|
/**
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
}
|
|
6
|
+
* Serves an oRPC router over the RPC protocol on a WebSocket connection
|
|
7
|
+
* managed by [crossws](https://github.com/h3js/crossws).
|
|
8
|
+
*
|
|
9
|
+
* @see {@link https://orpc.dev/docs/adapters/websocket | WebSocket Adapters}
|
|
10
|
+
*/
|
|
11
|
+
var experimental_RPCHandler = class extends experimental_CrosswsHandler {
|
|
12
|
+
constructor(router, options = {}) {
|
|
13
|
+
const codec = new RPCHandlerCodec(router, options);
|
|
14
|
+
const handler = new StandardHandler(codec, options);
|
|
15
|
+
super(handler, options);
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
export { experimental_RPCHandler };
|
|
@@ -1,21 +1,23 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import
|
|
1
|
+
import { Context } from "../../context.js";
|
|
2
|
+
import { StandardHandler } from "../standard/handler.js";
|
|
3
|
+
import { FriendlyStandardHandlerHandleOptions } from "../standard/utils.js";
|
|
4
|
+
import "../standard/index.js";
|
|
5
|
+
import { MaybeOptionalOptions } from "@orpc/shared";
|
|
6
|
+
import { AnyFastifyReply, AnyFastifyRequest, SendStandardResponseOptions } from "@standard-server/fastify";
|
|
5
7
|
export type FastifyHandlerHandleResult = {
|
|
6
|
-
|
|
8
|
+
matched: true;
|
|
7
9
|
} | {
|
|
8
|
-
|
|
10
|
+
matched: false;
|
|
9
11
|
};
|
|
10
12
|
export interface FastifyHandlerOptions<_T extends Context> {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
/**
|
|
14
|
+
* Custom options for `sendStandardResponse`, used to send a `Standard Response`
|
|
15
|
+
*/
|
|
16
|
+
sendStandardResponse?: SendStandardResponseOptions | undefined;
|
|
15
17
|
}
|
|
16
18
|
export declare class FastifyHandler<T extends Context> {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
}
|
|
19
|
+
private readonly standardHandler;
|
|
20
|
+
private readonly sendStandardResponseOptions;
|
|
21
|
+
constructor(standardHandler: StandardHandler<T>, options?: NoInfer<FastifyHandlerOptions<T>>);
|
|
22
|
+
handle(request: AnyFastifyRequest, reply: AnyFastifyReply, ...rest: MaybeOptionalOptions<FriendlyStandardHandlerHandleOptions<T>>): Promise<FastifyHandlerHandleResult>;
|
|
23
|
+
}
|
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
}
|
|
1
|
+
import { resolveFriendlyStandardHandlerHandleOptions } from "../standard/utils.js";
|
|
2
|
+
import { resolveMaybeOptionalOptions } from "@orpc/shared";
|
|
3
|
+
import { sendStandardResponse, toStandardLazyRequest } from "@standard-server/fastify";
|
|
4
|
+
// src/adapters/fastify/handler.ts
|
|
5
|
+
var FastifyHandler = class {
|
|
6
|
+
standardHandler;
|
|
7
|
+
sendStandardResponseOptions;
|
|
8
|
+
constructor(standardHandler, options = {}) {
|
|
9
|
+
this.standardHandler = standardHandler;
|
|
10
|
+
this.sendStandardResponseOptions = options.sendStandardResponse;
|
|
11
|
+
}
|
|
12
|
+
async handle(request, reply, ...rest) {
|
|
13
|
+
const standardRequest = toStandardLazyRequest(request, reply);
|
|
14
|
+
const result = await this.standardHandler.handle(standardRequest, resolveFriendlyStandardHandlerHandleOptions(resolveMaybeOptionalOptions(rest)));
|
|
15
|
+
if (!result.matched) return result;
|
|
16
|
+
await sendStandardResponse(reply, result.response, this.sendStandardResponseOptions);
|
|
17
|
+
return result;
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
export { FastifyHandler };
|
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import { FastifyHandler, FastifyHandlerHandleResult, FastifyHandlerOptions } from "./handler.js";
|
|
2
|
+
import { RPCHandler, RPCHandlerOptions } from "./rpc-handler.js";
|
|
3
|
+
export { FastifyHandler, FastifyHandlerHandleResult, FastifyHandlerOptions, RPCHandler, RPCHandlerOptions };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export
|
|
2
|
-
export
|
|
1
|
+
export { FastifyHandler } from "./handler.js";
|
|
2
|
+
export { RPCHandler } from "./rpc-handler.js";
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
|
|
7
|
-
}
|
|
1
|
+
import { Context } from "../../context.js";
|
|
2
|
+
import { StandardHandlerOptions } from "../standard/handler.js";
|
|
3
|
+
import { Router } from "../../router.js";
|
|
4
|
+
import { RPCHandlerCodecOptions } from "../standard/rpc-handler-codec.js";
|
|
5
|
+
import "../standard/index.js";
|
|
6
|
+
import { FastifyHandler, FastifyHandlerOptions } from "./handler.js";
|
|
7
|
+
export interface RPCHandlerOptions<T extends Context> extends FastifyHandlerOptions<T>, StandardHandlerOptions<T>, RPCHandlerCodecOptions<T> {}
|
|
8
8
|
/**
|
|
9
9
|
* Serves an oRPC router over the RPC protocol inside a Fastify server.
|
|
10
10
|
*
|
|
11
11
|
* @see {@link https://orpc.dev/docs/adapters/fastify | Fastify Adapter}
|
|
12
12
|
*/
|
|
13
13
|
export declare class RPCHandler<T extends Context> extends FastifyHandler<T> {
|
|
14
|
-
|
|
15
|
-
}
|
|
14
|
+
constructor(router: Router<T>, options?: NoInfer<RPCHandlerOptions<T>>);
|
|
15
|
+
}
|