@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,14 +1,17 @@
|
|
|
1
|
-
import { RPCHandlerCodec
|
|
2
|
-
import {
|
|
1
|
+
import { RPCHandlerCodec } from "../standard/rpc-handler-codec.js";
|
|
2
|
+
import { StandardHandler } from "../standard/handler.js";
|
|
3
|
+
import { FastifyHandler } from "./handler.js";
|
|
4
|
+
// src/adapters/fastify/rpc-handler.ts
|
|
3
5
|
/**
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
}
|
|
6
|
+
* Serves an oRPC router over the RPC protocol inside a Fastify server.
|
|
7
|
+
*
|
|
8
|
+
* @see {@link https://orpc.dev/docs/adapters/fastify | Fastify Adapter}
|
|
9
|
+
*/
|
|
10
|
+
var RPCHandler = class extends FastifyHandler {
|
|
11
|
+
constructor(router, options = {}) {
|
|
12
|
+
const codec = new RPCHandlerCodec(router, options);
|
|
13
|
+
const handler = new StandardHandler(codec, options);
|
|
14
|
+
super(handler, options);
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
export { RPCHandler };
|
|
@@ -1,23 +1,25 @@
|
|
|
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 { ToFetchResponseOptions } from "@standard-server/fetch";
|
|
5
7
|
export type FetchHandlerHandleResult = {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
+
matched: true;
|
|
9
|
+
response: Response;
|
|
8
10
|
} | {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
+
matched: false;
|
|
12
|
+
response?: undefined;
|
|
11
13
|
};
|
|
12
14
|
export interface FetchHandlerOptions<_T extends Context> {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
15
|
+
/**
|
|
16
|
+
* Options for how to convert the Fetch Response to a Standard Response, like event stream options, etc.
|
|
17
|
+
*/
|
|
18
|
+
toFetchResponse?: ToFetchResponseOptions | undefined;
|
|
17
19
|
}
|
|
18
20
|
export declare class FetchHandler<T extends Context> {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
}
|
|
21
|
+
private readonly standardHandler;
|
|
22
|
+
private readonly toFetchResponseOptions;
|
|
23
|
+
constructor(standardHandler: StandardHandler<T>, options?: NoInfer<FetchHandlerOptions<T>>);
|
|
24
|
+
handle(request: Request, ...rest: MaybeOptionalOptions<FriendlyStandardHandlerHandleOptions<T>>): Promise<FetchHandlerHandleResult>;
|
|
25
|
+
}
|
|
@@ -1,22 +1,22 @@
|
|
|
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
|
-
}
|
|
1
|
+
import { resolveFriendlyStandardHandlerHandleOptions } from "../standard/utils.js";
|
|
2
|
+
import { resolveMaybeOptionalOptions } from "@orpc/shared";
|
|
3
|
+
import { toFetchResponse, toStandardLazyRequest } from "@standard-server/fetch";
|
|
4
|
+
// src/adapters/fetch/handler.ts
|
|
5
|
+
var FetchHandler = class {
|
|
6
|
+
standardHandler;
|
|
7
|
+
toFetchResponseOptions;
|
|
8
|
+
constructor(standardHandler, options = {}) {
|
|
9
|
+
this.standardHandler = standardHandler;
|
|
10
|
+
this.toFetchResponseOptions = options.toFetchResponse;
|
|
11
|
+
}
|
|
12
|
+
async handle(request, ...rest) {
|
|
13
|
+
const standardRequest = toStandardLazyRequest(request);
|
|
14
|
+
const result = await this.standardHandler.handle(standardRequest, resolveFriendlyStandardHandlerHandleOptions(resolveMaybeOptionalOptions(rest)));
|
|
15
|
+
if (!result.matched) return result;
|
|
16
|
+
return {
|
|
17
|
+
matched: true,
|
|
18
|
+
response: toFetchResponse(result.response, this.toFetchResponseOptions)
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
export { FetchHandler };
|
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
RequestLimitHandlerPlugin as BodyLimitPlugin, } from '../../plugins/request-limit.ts';
|
|
6
|
-
export * from './handler.ts';
|
|
7
|
-
export * from './rpc-handler.ts';
|
|
1
|
+
import { RequestLimitHandlerPlugin } from "../../plugins/request-limit.js";
|
|
2
|
+
import { FetchHandler, FetchHandlerHandleResult, FetchHandlerOptions } from "./handler.js";
|
|
3
|
+
import { RPCHandler, RPCHandlerOptions } from "./rpc-handler.js";
|
|
4
|
+
export { RequestLimitHandlerPlugin as BodyLimitPlugin, FetchHandler, FetchHandlerHandleResult, FetchHandlerOptions, RPCHandler, RPCHandlerOptions };
|
|
@@ -1,7 +1,3 @@
|
|
|
1
|
-
export {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
*/
|
|
5
|
-
RequestLimitHandlerPlugin as BodyLimitPlugin, } from '../../plugins/request-limit.js';
|
|
6
|
-
export * from './handler.js';
|
|
7
|
-
export * from './rpc-handler.js';
|
|
1
|
+
export { RequestLimitHandlerPlugin as BodyLimitPlugin } from "../../plugins/request-limit.js";
|
|
2
|
+
export { FetchHandler } from "./handler.js";
|
|
3
|
+
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 { FetchHandler, FetchHandlerOptions } from "./handler.js";
|
|
7
|
+
export interface RPCHandlerOptions<T extends Context> extends FetchHandlerOptions<T>, StandardHandlerOptions<T>, RPCHandlerCodecOptions<T> {}
|
|
8
8
|
/**
|
|
9
9
|
* Serves an oRPC router over the RPC protocol using the Fetch API
|
|
10
10
|
* (Request/Response), supported by modern runtimes like Deno, Bun,
|
|
@@ -13,5 +13,5 @@ export interface RPCHandlerOptions<T extends Context> extends FetchHandlerOption
|
|
|
13
13
|
* @see {@link https://orpc.dev/docs/adapters/fetch-api | Fetch API Adapter}
|
|
14
14
|
*/
|
|
15
15
|
export declare class RPCHandler<T extends Context> extends FetchHandler<T> {
|
|
16
|
-
|
|
17
|
-
}
|
|
16
|
+
constructor(router: Router<T>, options?: NoInfer<RPCHandlerOptions<T>>);
|
|
17
|
+
}
|
|
@@ -1,16 +1,19 @@
|
|
|
1
|
-
import { RPCHandlerCodec
|
|
2
|
-
import {
|
|
1
|
+
import { RPCHandlerCodec } from "../standard/rpc-handler-codec.js";
|
|
2
|
+
import { StandardHandler } from "../standard/handler.js";
|
|
3
|
+
import { FetchHandler } from "./handler.js";
|
|
4
|
+
// src/adapters/fetch/rpc-handler.ts
|
|
3
5
|
/**
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
}
|
|
6
|
+
* Serves an oRPC router over the RPC protocol using the Fetch API
|
|
7
|
+
* (Request/Response), supported by modern runtimes like Deno, Bun,
|
|
8
|
+
* Cloudflare Workers, and browsers.
|
|
9
|
+
*
|
|
10
|
+
* @see {@link https://orpc.dev/docs/adapters/fetch-api | Fetch API Adapter}
|
|
11
|
+
*/
|
|
12
|
+
var RPCHandler = class extends FetchHandler {
|
|
13
|
+
constructor(router, options = {}) {
|
|
14
|
+
const codec = new RPCHandlerCodec(router, options);
|
|
15
|
+
const handler = new StandardHandler(codec, options);
|
|
16
|
+
super(handler, options);
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
export { RPCHandler };
|
|
@@ -1,64 +1,62 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
import
|
|
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, Promisable, Value } from "@orpc/shared";
|
|
6
|
+
import { DecodePeerMessageOptions, EncodePeerMessageOptions, ServerPeer } from "@standard-server/peer";
|
|
7
|
+
import { SupportedMessagePort } from "@orpc/client/message-port";
|
|
8
|
+
type DecodedResponseMessage = ConstructorParameters<typeof ServerPeer>[0] extends ((message: infer TMessage) => unknown) ? TMessage : never;
|
|
8
9
|
export interface MessagePortHandlerOptions<_T extends Context> {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
* Options for decoding peer messages. such as `prefix` for distinguishing messages on the same channel..
|
|
29
|
-
*/
|
|
30
|
-
decodePeerMessage?: DecodePeerMessageOptions | undefined;
|
|
10
|
+
/**
|
|
11
|
+
* By default, oRPC encodes peer messages as strings or binary data before sending them over the message port.
|
|
12
|
+
* Use this option to bypass encoding and leverage the full capabilities of the
|
|
13
|
+
* [MessagePort: postMessage() method](https://developer.mozilla.org/en-US/docs/Web/API/MessagePort/postMessage),
|
|
14
|
+
* such as transferring object ownership or supporting non-serializable objects like `OffscreenCanvas` or improving performance.
|
|
15
|
+
*
|
|
16
|
+
* @remarks
|
|
17
|
+
* **Note**: Returning `null` or `undefined` disables this feature.
|
|
18
|
+
* **Warning**: Ensure your message port implementation supports `transferable` objects before enabling this.
|
|
19
|
+
*/
|
|
20
|
+
experimental_transfer?: Value<Promisable<object[] | null | undefined>, [message: DecodedResponseMessage, port: SupportedMessagePort]> | undefined;
|
|
21
|
+
/**
|
|
22
|
+
* Options for encoding peer messages. such as `prefix` for distinguishing messages on the same channel..
|
|
23
|
+
*/
|
|
24
|
+
encodePeerMessage?: EncodePeerMessageOptions | undefined;
|
|
25
|
+
/**
|
|
26
|
+
* Options for decoding peer messages. such as `prefix` for distinguishing messages on the same channel..
|
|
27
|
+
*/
|
|
28
|
+
decodePeerMessage?: DecodePeerMessageOptions | undefined;
|
|
31
29
|
}
|
|
32
30
|
export declare class MessagePortHandler<T extends Context> {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
31
|
+
private readonly handler;
|
|
32
|
+
/**
|
|
33
|
+
* `null` marks a closed port, so late messages never create a new peer.
|
|
34
|
+
*/
|
|
35
|
+
private readonly peers;
|
|
36
|
+
private readonly transfer;
|
|
37
|
+
private readonly encodePeerMessageOptions;
|
|
38
|
+
private readonly decodePeerMessageOptions;
|
|
39
|
+
constructor(handler: StandardHandler<T>, options?: NoInfer<MessagePortHandlerOptions<T>>);
|
|
40
|
+
/**
|
|
41
|
+
* Attaches message and close listeners to a message port.
|
|
42
|
+
*
|
|
43
|
+
* Prefer this over calling `.message()` and `.close()` manually.
|
|
44
|
+
*/
|
|
45
|
+
upgrade(port: SupportedMessagePort, ...rest: MaybeOptionalOptions<FriendlyStandardHandlerHandleOptions<T>>): void;
|
|
46
|
+
/**
|
|
47
|
+
* Handles a single message received from a message port.
|
|
48
|
+
*
|
|
49
|
+
* @param port The message port instance. Use the same instance for all messages.
|
|
50
|
+
*/
|
|
51
|
+
message(port: SupportedMessagePort, data: unknown, ...rest: MaybeOptionalOptions<FriendlyStandardHandlerHandleOptions<T>>): Promise<{
|
|
52
|
+
matched: boolean;
|
|
53
|
+
}>;
|
|
54
|
+
/**
|
|
55
|
+
* Cleans up peer state for a closed message port.
|
|
56
|
+
* Messages passed to `.message()` for this port afterwards are ignored.
|
|
57
|
+
*
|
|
58
|
+
* @param port The same message port instance passed to `.message()`.
|
|
59
|
+
*/
|
|
60
|
+
close(port: SupportedMessagePort): Promise<void>;
|
|
63
61
|
}
|
|
64
|
-
export {};
|
|
62
|
+
export {};
|
|
@@ -1,86 +1,72 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { resolveMaybeOptionalOptions, value } from
|
|
3
|
-
import { decodePeerMessage, encodePeerMessage, isClientPeerSendMessage, isPeerMessage
|
|
4
|
-
import {
|
|
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
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
return { matched: true };
|
|
74
|
-
}
|
|
75
|
-
/**
|
|
76
|
-
* Cleans up peer state for a closed message port.
|
|
77
|
-
* Messages passed to `.message()` for this port afterwards are ignored.
|
|
78
|
-
*
|
|
79
|
-
* @param port The same message port instance passed to `.message()`.
|
|
80
|
-
*/
|
|
81
|
-
async close(port) {
|
|
82
|
-
const peer = this.peers.get(port);
|
|
83
|
-
this.peers.set(port, null);
|
|
84
|
-
await peer?.close();
|
|
85
|
-
}
|
|
86
|
-
}
|
|
1
|
+
import { createStandardPeerRequestHandler } from "../standard-peer/utils.js";
|
|
2
|
+
import { resolveMaybeOptionalOptions, value } from "@orpc/shared";
|
|
3
|
+
import { ServerPeer, decodePeerMessage, encodePeerMessage, isClientPeerSendMessage, isPeerMessage } from "@standard-server/peer";
|
|
4
|
+
import { onMessagePortClose, onMessagePortMessage, postMessagePortMessage } from "@orpc/client/message-port";
|
|
5
|
+
// src/adapters/message-port/handler.ts
|
|
6
|
+
var MessagePortHandler = class {
|
|
7
|
+
handler;
|
|
8
|
+
/**
|
|
9
|
+
* `null` marks a closed port, so late messages never create a new peer.
|
|
10
|
+
*/
|
|
11
|
+
peers = /* @__PURE__ */ new WeakMap();
|
|
12
|
+
transfer;
|
|
13
|
+
encodePeerMessageOptions;
|
|
14
|
+
decodePeerMessageOptions;
|
|
15
|
+
constructor(handler, options = {}) {
|
|
16
|
+
this.handler = handler;
|
|
17
|
+
this.transfer = options.experimental_transfer;
|
|
18
|
+
this.encodePeerMessageOptions = options.encodePeerMessage;
|
|
19
|
+
this.decodePeerMessageOptions = options.decodePeerMessage;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Attaches message and close listeners to a message port.
|
|
23
|
+
*
|
|
24
|
+
* Prefer this over calling `.message()` and `.close()` manually.
|
|
25
|
+
*/
|
|
26
|
+
upgrade(port, ...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
|
+
onMessagePortMessage(port, (message) => this.message(port, message, ...rest));
|
|
32
|
+
onMessagePortClose(port, () => this.close(port));
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Handles a single message received from a message port.
|
|
36
|
+
*
|
|
37
|
+
* @param port The message port instance. Use the same instance for all messages.
|
|
38
|
+
*/
|
|
39
|
+
async message(port, data, ...rest) {
|
|
40
|
+
let peerMessage;
|
|
41
|
+
if (typeof data === "string" || data instanceof Uint8Array) {
|
|
42
|
+
const result = decodePeerMessage(data, this.decodePeerMessageOptions);
|
|
43
|
+
if (result.matched && isClientPeerSendMessage(result.message)) peerMessage = result.message;
|
|
44
|
+
} else if (isPeerMessage(data) && isClientPeerSendMessage(data)) peerMessage = data;
|
|
45
|
+
if (peerMessage === void 0) return { matched: false };
|
|
46
|
+
let peer = this.peers.get(port);
|
|
47
|
+
if (peer === null) return { matched: true };
|
|
48
|
+
if (!peer) this.peers.set(port, peer = new ServerPeer(async (message) => {
|
|
49
|
+
const transfer = await value(this.transfer, message, port);
|
|
50
|
+
if (transfer) postMessagePortMessage(port, message, transfer);
|
|
51
|
+
else postMessagePortMessage(port, await encodePeerMessage(message, this.encodePeerMessageOptions));
|
|
52
|
+
}));
|
|
53
|
+
/**
|
|
54
|
+
* Message order is important: loading -> decode -> .message.
|
|
55
|
+
* This flow must stay synchronous, or we need to use `sequential` helper
|
|
56
|
+
*/
|
|
57
|
+
await peer.message(peerMessage, createStandardPeerRequestHandler(this.handler, resolveMaybeOptionalOptions(rest)));
|
|
58
|
+
return { matched: true };
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Cleans up peer state for a closed message port.
|
|
62
|
+
* Messages passed to `.message()` for this port afterwards are ignored.
|
|
63
|
+
*
|
|
64
|
+
* @param port The same message port instance passed to `.message()`.
|
|
65
|
+
*/
|
|
66
|
+
async close(port) {
|
|
67
|
+
const peer = this.peers.get(port);
|
|
68
|
+
this.peers.set(port, null);
|
|
69
|
+
await peer?.close();
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
export { MessagePortHandler };
|
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import { MessagePortHandler, MessagePortHandlerOptions } from "./handler.js";
|
|
2
|
+
import { RPCHandler, RPCHandlerOptions } from "./rpc-handler.js";
|
|
3
|
+
export { MessagePortHandler, MessagePortHandlerOptions, RPCHandler, RPCHandlerOptions };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export
|
|
2
|
-
export
|
|
1
|
+
export { MessagePortHandler } 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 { MessagePortHandler, MessagePortHandlerOptions } from "./handler.js";
|
|
7
|
+
export interface RPCHandlerOptions<T extends Context> extends StandardHandlerOptions<T>, RPCHandlerCodecOptions<T>, MessagePortHandlerOptions<T> {}
|
|
8
8
|
/**
|
|
9
9
|
* Serves an oRPC router over the RPC protocol on a message port,
|
|
10
10
|
* such as browser extensions, Electron, or worker threads.
|
|
@@ -12,5 +12,5 @@ export interface RPCHandlerOptions<T extends Context> extends StandardHandlerOpt
|
|
|
12
12
|
* @see {@link https://orpc.dev/docs/adapters/message-port | Message Port Adapter}
|
|
13
13
|
*/
|
|
14
14
|
export declare class RPCHandler<T extends Context> extends MessagePortHandler<T> {
|
|
15
|
-
|
|
16
|
-
}
|
|
15
|
+
constructor(router: Router<T>, options?: NoInfer<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 { MessagePortHandler } from "./handler.js";
|
|
4
|
+
// src/adapters/message-port/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 message port,
|
|
7
|
+
* such as browser extensions, Electron, or worker threads.
|
|
8
|
+
*
|
|
9
|
+
* @see {@link https://orpc.dev/docs/adapters/message-port | Message Port Adapter}
|
|
10
|
+
*/
|
|
11
|
+
var RPCHandler = class extends MessagePortHandler {
|
|
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 { 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 { NodeHttpRequest, NodeHttpResponse, SendStandardResponseOptions } from "@standard-server/node";
|
|
5
7
|
export type NodeHttpHandlerHandleResult = {
|
|
6
|
-
|
|
8
|
+
matched: true;
|
|
7
9
|
} | {
|
|
8
|
-
|
|
10
|
+
matched: false;
|
|
9
11
|
};
|
|
10
12
|
export interface NodeHttpHandlerOptions<_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 NodeHttpHandler<T extends Context> {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
}
|
|
19
|
+
private readonly standardHandler;
|
|
20
|
+
private readonly sendStandardResponseOptions;
|
|
21
|
+
constructor(standardHandler: StandardHandler<T>, options?: NoInfer<NodeHttpHandlerOptions<T>>);
|
|
22
|
+
handle(request: NodeHttpRequest, response: NodeHttpResponse, ...rest: MaybeOptionalOptions<FriendlyStandardHandlerHandleOptions<T>>): Promise<NodeHttpHandlerHandleResult>;
|
|
23
|
+
}
|