@orpc/server 1.14.9 → 1.14.11

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.
Files changed (78) hide show
  1. package/README.md +52 -98
  2. package/dist/adapters/crossws/index.d.mts +45 -21
  3. package/dist/adapters/crossws/index.d.ts +45 -21
  4. package/dist/adapters/crossws/index.mjs +40 -18
  5. package/dist/adapters/fetch/index.d.mts +64 -96
  6. package/dist/adapters/fetch/index.d.ts +64 -96
  7. package/dist/adapters/fetch/index.mjs +34 -139
  8. package/dist/adapters/message-port/index.d.mts +49 -34
  9. package/dist/adapters/message-port/index.d.ts +49 -34
  10. package/dist/adapters/message-port/index.mjs +68 -37
  11. package/dist/adapters/node/index.d.mts +63 -71
  12. package/dist/adapters/node/index.d.ts +63 -71
  13. package/dist/adapters/node/index.mjs +36 -113
  14. package/dist/adapters/standard/index.d.mts +16 -18
  15. package/dist/adapters/standard/index.d.ts +16 -18
  16. package/dist/adapters/standard/index.mjs +5 -5
  17. package/dist/adapters/standard-peer/index.d.mts +12 -14
  18. package/dist/adapters/standard-peer/index.d.ts +12 -14
  19. package/dist/adapters/standard-peer/index.mjs +2 -21
  20. package/dist/adapters/websocket/index.d.mts +53 -38
  21. package/dist/adapters/websocket/index.d.ts +53 -38
  22. package/dist/adapters/websocket/index.mjs +59 -42
  23. package/dist/extensions/callable.d.mts +10 -0
  24. package/dist/extensions/callable.d.ts +10 -0
  25. package/dist/extensions/callable.mjs +11 -0
  26. package/dist/helpers/index.d.mts +4 -4
  27. package/dist/helpers/index.d.ts +4 -4
  28. package/dist/helpers/index.mjs +13 -5
  29. package/dist/index.d.mts +166 -770
  30. package/dist/index.d.ts +166 -770
  31. package/dist/index.mjs +306 -399
  32. package/dist/plugins/index.d.mts +214 -121
  33. package/dist/plugins/index.d.ts +214 -121
  34. package/dist/plugins/index.mjs +576 -214
  35. package/dist/shared/server.15O7oC1p.d.mts +61 -0
  36. package/dist/shared/server.B4BnEWWm.d.mts +67 -0
  37. package/dist/shared/server.BhsVw7m7.d.ts +104 -0
  38. package/dist/shared/server.BoiFpNT7.mjs +224 -0
  39. package/dist/shared/server.COPVXhDG.mjs +271 -0
  40. package/dist/shared/server.CX4vUnDk.mjs +11 -0
  41. package/dist/shared/server.CcR4kgje.d.mts +206 -0
  42. package/dist/shared/server.CcR4kgje.d.ts +206 -0
  43. package/dist/shared/server.CnN50DHH.d.ts +67 -0
  44. package/dist/shared/server.DBs0rrf9.mjs +41 -0
  45. package/dist/shared/server.DDFizwfU.d.mts +104 -0
  46. package/dist/shared/server.D_QauotT.mjs +30 -0
  47. package/dist/shared/server.DofEOwf-.mjs +237 -0
  48. package/dist/shared/{server.DZ5BIITo.mjs → server.W91HSRkE.mjs} +2 -2
  49. package/dist/shared/server.m3szVJGU.d.ts +61 -0
  50. package/package.json +26 -56
  51. package/dist/adapters/aws-lambda/index.d.mts +0 -46
  52. package/dist/adapters/aws-lambda/index.d.ts +0 -46
  53. package/dist/adapters/aws-lambda/index.mjs +0 -40
  54. package/dist/adapters/bun-ws/index.d.mts +0 -36
  55. package/dist/adapters/bun-ws/index.d.ts +0 -36
  56. package/dist/adapters/bun-ws/index.mjs +0 -47
  57. package/dist/adapters/fastify/index.d.mts +0 -53
  58. package/dist/adapters/fastify/index.d.ts +0 -53
  59. package/dist/adapters/fastify/index.mjs +0 -52
  60. package/dist/adapters/ws/index.d.mts +0 -31
  61. package/dist/adapters/ws/index.d.ts +0 -31
  62. package/dist/adapters/ws/index.mjs +0 -41
  63. package/dist/hibernation/index.d.mts +0 -44
  64. package/dist/hibernation/index.d.ts +0 -44
  65. package/dist/hibernation/index.mjs +0 -65
  66. package/dist/shared/server.7cEtMB30.d.ts +0 -74
  67. package/dist/shared/server.B8gYOD5g.d.mts +0 -12
  68. package/dist/shared/server.BqadksTP.d.mts +0 -74
  69. package/dist/shared/server.C8_sRzQB.d.mts +0 -42
  70. package/dist/shared/server.ChUyt5-i.d.mts +0 -32
  71. package/dist/shared/server.ChyoA9XY.d.ts +0 -42
  72. package/dist/shared/server.DEBcqOjg.mjs +0 -418
  73. package/dist/shared/server.EfTOZ2Q7.d.ts +0 -12
  74. package/dist/shared/server.TEVCLCFC.mjs +0 -39
  75. package/dist/shared/server.ZxHCEN1h.mjs +0 -226
  76. package/dist/shared/server.qKsRrdxW.d.mts +0 -193
  77. package/dist/shared/server.qKsRrdxW.d.ts +0 -193
  78. package/dist/shared/server.yoEB3Fx4.d.ts +0 -32
@@ -1,56 +1,71 @@
1
1
  import { SupportedMessagePort } from '@orpc/client/message-port';
2
2
  import { Value, Promisable, MaybeOptionalOptions } from '@orpc/shared';
3
- import { DecodedResponseMessage } from '@orpc/standard-server-peer';
4
- import { C as Context, R as Router } from '../../shared/server.qKsRrdxW.mjs';
5
- import { f as StandardHandler } from '../../shared/server.BqadksTP.mjs';
6
- import { HandleStandardServerPeerMessageOptions } from '../standard-peer/index.mjs';
7
- import { S as StandardRPCHandlerOptions } from '../../shared/server.ChUyt5-i.mjs';
3
+ import { ServerPeer, EncodePeerMessageOptions, DecodePeerMessageOptions } from '@standardserver/peer';
4
+ import { C as Context } from '../../shared/server.CcR4kgje.mjs';
5
+ import { S as StandardHandler, a as StandardHandlerOptions } from '../../shared/server.DDFizwfU.mjs';
6
+ import { StandardPeerRequestHandlerOptions } from '../standard-peer/index.mjs';
7
+ import { R as Router } from '../../shared/server.15O7oC1p.mjs';
8
+ import { R as RPCHandlerCodecOptions } from '../../shared/server.B4BnEWWm.mjs';
8
9
  import '@orpc/client';
9
10
  import '@orpc/contract';
10
- import '@orpc/standard-server';
11
- import '../../shared/server.B8gYOD5g.mjs';
12
- import '@orpc/client/standard';
13
- import '../../shared/server.C8_sRzQB.mjs';
11
+ import '@standardserver/core';
14
12
 
13
+ type DecodedResponseMessage = ConstructorParameters<typeof ServerPeer>[0] extends (message: infer TMessage) => unknown ? TMessage : never;
15
14
  interface MessagePortHandlerOptions<_T extends Context> {
16
15
  /**
17
- * By default, oRPC serializes request/response messages to string/binary data before sending over message port.
18
- * If needed, you can define the this option to utilize full power of [MessagePort: postMessage() method](https://developer.mozilla.org/en-US/docs/Web/API/MessagePort/postMessage),
19
- * such as transferring ownership of objects to the other side or support unserializable objects like `OffscreenCanvas`.
16
+ * By default, oRPC encodes peer messages as strings or binary data before sending them over the message port.
17
+ * Use this option to bypass encoding and leverage the full capabilities of the
18
+ * [MessagePort: postMessage() method](https://developer.mozilla.org/en-US/docs/Web/API/MessagePort/postMessage),
19
+ * such as transferring object ownership or supporting non-serializable objects like `OffscreenCanvas` or improving performance.
20
20
  *
21
21
  * @remarks
22
- * - return null | undefined to disable this feature
22
+ * - Returning `null` or `undefined` disables this feature.
23
23
  *
24
- * @warning Make sure your message port supports `transfer` before using this feature.
25
- * @example
26
- * ```ts
27
- * experimental_transfer: (message, port) => {
28
- * const transfer = deepFindTransferableObjects(message) // implement your own logic
29
- * return transfer.length ? transfer : null // only enable when needed
30
- * }
31
- * ```
32
- *
33
- * @see {@link https://orpc.dev/docs/adapters/message-port#transfer Message Port Transfer Docs}
24
+ * @warning Ensure your message port implementation supports `transferable` objects before enabling this.
34
25
  */
35
26
  experimental_transfer?: Value<Promisable<object[] | null | undefined>, [message: DecodedResponseMessage, port: SupportedMessagePort]>;
27
+ /**
28
+ * Options for encoding peer messages. such as `prefix` for distinguishing messages on the same channel..
29
+ */
30
+ encodePeerMessage?: EncodePeerMessageOptions | undefined;
31
+ /**
32
+ * Options for decoding peer messages. such as `prefix` for distinguishing messages on the same channel..
33
+ */
34
+ decodePeerMessage?: DecodePeerMessageOptions | undefined;
36
35
  }
37
36
  declare class MessagePortHandler<T extends Context> {
38
- private readonly standardHandler;
37
+ private readonly handler;
38
+ private readonly peers;
39
39
  private readonly transfer;
40
- constructor(standardHandler: StandardHandler<T>, options?: NoInfer<MessagePortHandlerOptions<T>>);
41
- upgrade(port: SupportedMessagePort, ...rest: MaybeOptionalOptions<HandleStandardServerPeerMessageOptions<T>>): void;
40
+ private readonly encodePeerMessageOptions;
41
+ private readonly decodePeerMessageOptions;
42
+ constructor(handler: StandardHandler<T>, options?: NoInfer<MessagePortHandlerOptions<T>>);
43
+ /**
44
+ * Attaches message and close listeners to a message port.
45
+ *
46
+ * Prefer this over calling `.message()` and `.close()` manually.
47
+ */
48
+ upgrade(port: SupportedMessagePort, ...rest: MaybeOptionalOptions<StandardPeerRequestHandlerOptions<T>>): void;
49
+ /**
50
+ * Handles a single message received from a message port.
51
+ *
52
+ * @param port The message port instance. Use the same instance for all messages.
53
+ */
54
+ message(port: SupportedMessagePort, data: unknown, ...rest: MaybeOptionalOptions<StandardPeerRequestHandlerOptions<T>>): Promise<{
55
+ matched: boolean;
56
+ }>;
57
+ /**
58
+ * Cleans up peer state for a closed message port.
59
+ *
60
+ * @param port The same message port instance passed to `.message()`.
61
+ */
62
+ close(port: SupportedMessagePort): Promise<void>;
42
63
  }
43
64
 
44
- interface RPCHandlerOptions<T extends Context> extends StandardRPCHandlerOptions<T>, MessagePortHandlerOptions<T> {
65
+ interface RPCHandlerOptions<T extends Context> extends StandardHandlerOptions<T>, RPCHandlerCodecOptions<T>, MessagePortHandlerOptions<T> {
45
66
  }
46
- /**
47
- * RPC Handler for common message port implementations.
48
- *
49
- * @see {@link https://orpc.dev/docs/rpc-handler RPC Handler Docs}
50
- * @see {@link https://orpc.dev/docs/adapters/message-port Message Port Adapter Docs}
51
- */
52
67
  declare class RPCHandler<T extends Context> extends MessagePortHandler<T> {
53
- constructor(router: Router<any, T>, options?: NoInfer<RPCHandlerOptions<T>>);
68
+ constructor(router: Router<T>, options?: NoInfer<RPCHandlerOptions<T>>);
54
69
  }
55
70
 
56
71
  export { MessagePortHandler, RPCHandler };
@@ -1,56 +1,71 @@
1
1
  import { SupportedMessagePort } from '@orpc/client/message-port';
2
2
  import { Value, Promisable, MaybeOptionalOptions } from '@orpc/shared';
3
- import { DecodedResponseMessage } from '@orpc/standard-server-peer';
4
- import { C as Context, R as Router } from '../../shared/server.qKsRrdxW.js';
5
- import { f as StandardHandler } from '../../shared/server.7cEtMB30.js';
6
- import { HandleStandardServerPeerMessageOptions } from '../standard-peer/index.js';
7
- import { S as StandardRPCHandlerOptions } from '../../shared/server.yoEB3Fx4.js';
3
+ import { ServerPeer, EncodePeerMessageOptions, DecodePeerMessageOptions } from '@standardserver/peer';
4
+ import { C as Context } from '../../shared/server.CcR4kgje.js';
5
+ import { S as StandardHandler, a as StandardHandlerOptions } from '../../shared/server.BhsVw7m7.js';
6
+ import { StandardPeerRequestHandlerOptions } from '../standard-peer/index.js';
7
+ import { R as Router } from '../../shared/server.m3szVJGU.js';
8
+ import { R as RPCHandlerCodecOptions } from '../../shared/server.CnN50DHH.js';
8
9
  import '@orpc/client';
9
10
  import '@orpc/contract';
10
- import '@orpc/standard-server';
11
- import '../../shared/server.EfTOZ2Q7.js';
12
- import '@orpc/client/standard';
13
- import '../../shared/server.ChyoA9XY.js';
11
+ import '@standardserver/core';
14
12
 
13
+ type DecodedResponseMessage = ConstructorParameters<typeof ServerPeer>[0] extends (message: infer TMessage) => unknown ? TMessage : never;
15
14
  interface MessagePortHandlerOptions<_T extends Context> {
16
15
  /**
17
- * By default, oRPC serializes request/response messages to string/binary data before sending over message port.
18
- * If needed, you can define the this option to utilize full power of [MessagePort: postMessage() method](https://developer.mozilla.org/en-US/docs/Web/API/MessagePort/postMessage),
19
- * such as transferring ownership of objects to the other side or support unserializable objects like `OffscreenCanvas`.
16
+ * By default, oRPC encodes peer messages as strings or binary data before sending them over the message port.
17
+ * Use this option to bypass encoding and leverage the full capabilities of the
18
+ * [MessagePort: postMessage() method](https://developer.mozilla.org/en-US/docs/Web/API/MessagePort/postMessage),
19
+ * such as transferring object ownership or supporting non-serializable objects like `OffscreenCanvas` or improving performance.
20
20
  *
21
21
  * @remarks
22
- * - return null | undefined to disable this feature
22
+ * - Returning `null` or `undefined` disables this feature.
23
23
  *
24
- * @warning Make sure your message port supports `transfer` before using this feature.
25
- * @example
26
- * ```ts
27
- * experimental_transfer: (message, port) => {
28
- * const transfer = deepFindTransferableObjects(message) // implement your own logic
29
- * return transfer.length ? transfer : null // only enable when needed
30
- * }
31
- * ```
32
- *
33
- * @see {@link https://orpc.dev/docs/adapters/message-port#transfer Message Port Transfer Docs}
24
+ * @warning Ensure your message port implementation supports `transferable` objects before enabling this.
34
25
  */
35
26
  experimental_transfer?: Value<Promisable<object[] | null | undefined>, [message: DecodedResponseMessage, port: SupportedMessagePort]>;
27
+ /**
28
+ * Options for encoding peer messages. such as `prefix` for distinguishing messages on the same channel..
29
+ */
30
+ encodePeerMessage?: EncodePeerMessageOptions | undefined;
31
+ /**
32
+ * Options for decoding peer messages. such as `prefix` for distinguishing messages on the same channel..
33
+ */
34
+ decodePeerMessage?: DecodePeerMessageOptions | undefined;
36
35
  }
37
36
  declare class MessagePortHandler<T extends Context> {
38
- private readonly standardHandler;
37
+ private readonly handler;
38
+ private readonly peers;
39
39
  private readonly transfer;
40
- constructor(standardHandler: StandardHandler<T>, options?: NoInfer<MessagePortHandlerOptions<T>>);
41
- upgrade(port: SupportedMessagePort, ...rest: MaybeOptionalOptions<HandleStandardServerPeerMessageOptions<T>>): void;
40
+ private readonly encodePeerMessageOptions;
41
+ private readonly decodePeerMessageOptions;
42
+ constructor(handler: StandardHandler<T>, options?: NoInfer<MessagePortHandlerOptions<T>>);
43
+ /**
44
+ * Attaches message and close listeners to a message port.
45
+ *
46
+ * Prefer this over calling `.message()` and `.close()` manually.
47
+ */
48
+ upgrade(port: SupportedMessagePort, ...rest: MaybeOptionalOptions<StandardPeerRequestHandlerOptions<T>>): void;
49
+ /**
50
+ * Handles a single message received from a message port.
51
+ *
52
+ * @param port The message port instance. Use the same instance for all messages.
53
+ */
54
+ message(port: SupportedMessagePort, data: unknown, ...rest: MaybeOptionalOptions<StandardPeerRequestHandlerOptions<T>>): Promise<{
55
+ matched: boolean;
56
+ }>;
57
+ /**
58
+ * Cleans up peer state for a closed message port.
59
+ *
60
+ * @param port The same message port instance passed to `.message()`.
61
+ */
62
+ close(port: SupportedMessagePort): Promise<void>;
42
63
  }
43
64
 
44
- interface RPCHandlerOptions<T extends Context> extends StandardRPCHandlerOptions<T>, MessagePortHandlerOptions<T> {
65
+ interface RPCHandlerOptions<T extends Context> extends StandardHandlerOptions<T>, RPCHandlerCodecOptions<T>, MessagePortHandlerOptions<T> {
45
66
  }
46
- /**
47
- * RPC Handler for common message port implementations.
48
- *
49
- * @see {@link https://orpc.dev/docs/rpc-handler RPC Handler Docs}
50
- * @see {@link https://orpc.dev/docs/adapters/message-port Message Port Adapter Docs}
51
- */
52
67
  declare class RPCHandler<T extends Context> extends MessagePortHandler<T> {
53
- constructor(router: Router<any, T>, options?: NoInfer<RPCHandlerOptions<T>>);
68
+ constructor(router: Router<T>, options?: NoInfer<RPCHandlerOptions<T>>);
54
69
  }
55
70
 
56
71
  export { MessagePortHandler, RPCHandler };
@@ -1,54 +1,85 @@
1
- import { postMessagePortMessage, onMessagePortMessage, onMessagePortClose } from '@orpc/client/message-port';
2
- import { value, resolveMaybeOptionalOptions, isObject } from '@orpc/shared';
3
- import { experimental_ServerPeerWithoutCodec, serializeResponseMessage, encodeResponseMessage, deserializeRequestMessage, decodeRequestMessage } from '@orpc/standard-server-peer';
4
- import { createServerPeerHandleRequestFn } from '../standard-peer/index.mjs';
5
- import { b as StandardRPCHandler } from '../../shared/server.ZxHCEN1h.mjs';
6
- import '../../shared/server.DZ5BIITo.mjs';
7
- import '@orpc/client/standard';
1
+ import { onMessagePortMessage, onMessagePortClose, postMessagePortMessage } from '@orpc/client/message-port';
2
+ import { value, resolveMaybeOptionalOptions } from '@orpc/shared';
3
+ import { ServerPeer, encodePeerMessage, decodePeerMessage, isClientPeerSendMessage, isPeerMessage } from '@standardserver/peer';
4
+ import { c as createStandardPeerRequestHandler } from '../../shared/server.CX4vUnDk.mjs';
5
+ import { R as RPCHandlerCodec, S as StandardHandler } from '../../shared/server.COPVXhDG.mjs';
8
6
  import '@orpc/client';
9
- import '@orpc/standard-server';
10
- import '../../shared/server.DEBcqOjg.mjs';
7
+ import '@standardserver/core';
8
+ import '../../shared/server.DofEOwf-.mjs';
11
9
  import '@orpc/contract';
10
+ import '../../shared/server.BoiFpNT7.mjs';
12
11
 
13
12
  class MessagePortHandler {
14
- constructor(standardHandler, options = {}) {
15
- this.standardHandler = standardHandler;
13
+ constructor(handler, options = {}) {
14
+ this.handler = handler;
16
15
  this.transfer = options.experimental_transfer;
16
+ this.encodePeerMessageOptions = options.encodePeerMessage;
17
+ this.decodePeerMessageOptions = options.decodePeerMessage;
17
18
  }
19
+ peers = /* @__PURE__ */ new WeakMap();
18
20
  transfer;
21
+ encodePeerMessageOptions;
22
+ decodePeerMessageOptions;
23
+ /**
24
+ * Attaches message and close listeners to a message port.
25
+ *
26
+ * Prefer this over calling `.message()` and `.close()` manually.
27
+ */
19
28
  upgrade(port, ...rest) {
20
- const peer = new experimental_ServerPeerWithoutCodec(async (message) => {
21
- const [id, type, payload] = message;
22
- const transfer = await value(this.transfer, message, port);
23
- if (transfer) {
24
- postMessagePortMessage(port, serializeResponseMessage(id, type, payload), transfer);
25
- } else {
26
- postMessagePortMessage(port, await encodeResponseMessage(id, type, payload));
27
- }
28
- });
29
- onMessagePortMessage(port, async (message) => {
30
- const handleFn = createServerPeerHandleRequestFn(this.standardHandler, resolveMaybeOptionalOptions(rest));
31
- if (isObject(message)) {
32
- await peer.message(
33
- deserializeRequestMessage(message),
34
- handleFn
35
- );
36
- } else {
37
- await peer.message(
38
- await decodeRequestMessage(message),
39
- handleFn
40
- );
29
+ onMessagePortMessage(port, (message) => this.message(port, message, ...rest));
30
+ onMessagePortClose(port, () => this.close(port));
31
+ }
32
+ /**
33
+ * Handles a single message received from a message port.
34
+ *
35
+ * @param port The message port instance. Use the same instance for all messages.
36
+ */
37
+ async message(port, data, ...rest) {
38
+ let peer = this.peers.get(port);
39
+ if (!peer) {
40
+ this.peers.set(port, peer = new ServerPeer(async (message) => {
41
+ const transfer = await value(this.transfer, message, port);
42
+ if (transfer) {
43
+ postMessagePortMessage(port, message, transfer);
44
+ } else {
45
+ postMessagePortMessage(port, await encodePeerMessage(message, this.encodePeerMessageOptions));
46
+ }
47
+ }));
48
+ }
49
+ let peerMessage;
50
+ if (typeof data === "string" || data instanceof Uint8Array) {
51
+ const result = decodePeerMessage(data, this.decodePeerMessageOptions);
52
+ if (result.matched && isClientPeerSendMessage(result.message)) {
53
+ peerMessage = result.message;
41
54
  }
42
- });
43
- onMessagePortClose(port, () => {
44
- peer.close();
45
- });
55
+ } else if (isPeerMessage(data) && isClientPeerSendMessage(data)) {
56
+ peerMessage = data;
57
+ }
58
+ if (peerMessage === void 0) {
59
+ return { matched: false };
60
+ }
61
+ await peer.message(peerMessage, createStandardPeerRequestHandler(this.handler, resolveMaybeOptionalOptions(rest)));
62
+ return { matched: true };
63
+ }
64
+ /**
65
+ * Cleans up peer state for a closed message port.
66
+ *
67
+ * @param port The same message port instance passed to `.message()`.
68
+ */
69
+ async close(port) {
70
+ const peer = this.peers.get(port);
71
+ if (peer) {
72
+ this.peers.delete(port);
73
+ await peer.close();
74
+ }
46
75
  }
47
76
  }
48
77
 
49
78
  class RPCHandler extends MessagePortHandler {
50
79
  constructor(router, options = {}) {
51
- super(new StandardRPCHandler(router, options), options);
80
+ const codec = new RPCHandlerCodec(router, options);
81
+ const handler = new StandardHandler(codec, options);
82
+ super(handler, options);
52
83
  }
53
84
  }
54
85
 
@@ -1,99 +1,91 @@
1
- import { C as Context, R as Router } from '../../shared/server.qKsRrdxW.mjs';
2
1
  import { Interceptor, MaybeOptionalOptions } from '@orpc/shared';
3
- import { SendStandardResponseOptions, NodeHttpRequest, NodeHttpResponse } from '@orpc/standard-server-node';
4
- import { F as FriendlyStandardHandleOptions } from '../../shared/server.B8gYOD5g.mjs';
5
- import { g as StandardHandlerPlugin, C as CompositeStandardHandlerPlugin, b as StandardHandleOptions, f as StandardHandler } from '../../shared/server.BqadksTP.mjs';
6
- import compression from '@orpc/interop/compression';
7
- import { S as StandardRPCHandlerOptions } from '../../shared/server.ChUyt5-i.mjs';
2
+ import { SendStandardResponseOptions, NodeHttpRequest, NodeHttpResponse } from '@standardserver/node';
3
+ import { C as Context } from '../../shared/server.CcR4kgje.mjs';
4
+ import { e as StandardHandlerPlugin, b as StandardHandlerHandleOptions, S as StandardHandler, a as StandardHandlerOptions } from '../../shared/server.DDFizwfU.mjs';
5
+ import { FriendlyStandardHandlerHandleOptions } from '../standard/index.mjs';
6
+ import { R as Router } from '../../shared/server.15O7oC1p.mjs';
7
+ import { R as RPCHandlerCodecOptions } from '../../shared/server.B4BnEWWm.mjs';
8
8
  import '@orpc/client';
9
9
  import '@orpc/contract';
10
- import '@orpc/standard-server';
11
- import '@orpc/client/standard';
12
- import '../../shared/server.C8_sRzQB.mjs';
10
+ import '@standardserver/core';
13
11
 
14
12
  interface NodeHttpHandlerPlugin<T extends Context> extends StandardHandlerPlugin<T> {
15
- initRuntimeAdapter?(options: NodeHttpHandlerOptions<T>): void;
13
+ /**
14
+ * Initializes the plugin and returns new node HTTP handler options.
15
+ * Called once per plugin instance during composition.
16
+ *
17
+ * This method allows plugins to wrap, extend, or transform node HTTP handler options
18
+ * such as interceptors, or other configuration.
19
+ *
20
+ * @param options - The current handler options from previous plugins or base configuration
21
+ * @returns Transformed handler options with plugin's modifications applied
22
+ *
23
+ * @example
24
+ * ```ts
25
+ * initNodeHttpHandlerOptions(options) {
26
+ * return {
27
+ * ...options,
28
+ * nodeHttpInterceptors: [...(options.nodeHttpInterceptors || []), myInterceptor]
29
+ * }
30
+ * }
31
+ * ```
32
+ */
33
+ initNodeHttpHandlerOptions?(options: NodeHttpHandlerOptions<T>): NodeHttpHandlerOptions<T>;
16
34
  }
17
- declare class CompositeNodeHttpHandlerPlugin<T extends Context, TPlugin extends NodeHttpHandlerPlugin<T>> extends CompositeStandardHandlerPlugin<T, TPlugin> implements NodeHttpHandlerPlugin<T> {
18
- initRuntimeAdapter(options: NodeHttpHandlerOptions<T>): void;
35
+ declare class CompositeNodeHttpHandlerPlugin<T extends Context> implements NodeHttpHandlerPlugin<T> {
36
+ readonly name = "~composite/node-http-handler";
37
+ protected readonly plugins: NodeHttpHandlerPlugin<T>[];
38
+ constructor(plugins?: NodeHttpHandlerPlugin<T>[]);
39
+ initNodeHttpHandlerOptions(options: NodeHttpHandlerOptions<T>): NodeHttpHandlerOptions<T>;
19
40
  }
20
41
 
21
- type NodeHttpHandleResult = {
42
+ type NodeHttpHandlerHandleResult = {
22
43
  matched: true;
23
44
  } | {
24
45
  matched: false;
25
46
  };
26
- interface NodeHttpHandlerInterceptorOptions<T extends Context> extends StandardHandleOptions<T> {
47
+ interface NodeHttpHandlerNodeHttpInterceptorOptions<T extends Context> extends StandardHandlerHandleOptions<T> {
27
48
  request: NodeHttpRequest;
28
49
  response: NodeHttpResponse;
29
- sendStandardResponseOptions: SendStandardResponseOptions;
30
- }
31
- interface NodeHttpHandlerOptions<T extends Context> extends SendStandardResponseOptions {
32
- adapterInterceptors?: Interceptor<NodeHttpHandlerInterceptorOptions<T>, Promise<NodeHttpHandleResult>>[];
33
- plugins?: NodeHttpHandlerPlugin<T>[];
34
- }
35
- declare class NodeHttpHandler<T extends Context> {
36
- private readonly standardHandler;
37
- private readonly sendStandardResponseOptions;
38
- private readonly adapterInterceptors;
39
- constructor(standardHandler: StandardHandler<T>, options?: NoInfer<NodeHttpHandlerOptions<T>>);
40
- handle(request: NodeHttpRequest, response: NodeHttpResponse, ...rest: MaybeOptionalOptions<FriendlyStandardHandleOptions<T>>): Promise<NodeHttpHandleResult>;
50
+ sendStandardResponseOptions: SendStandardResponseOptions | undefined;
41
51
  }
42
-
43
- interface BodyLimitPluginOptions {
52
+ type NodeHttpHandlerNodeHttpInterceptor<T extends Context> = Interceptor<NodeHttpHandlerNodeHttpInterceptorOptions<T>, Promise<NodeHttpHandlerHandleResult>>;
53
+ interface NodeHttpHandlerOptions<T extends Context> {
44
54
  /**
45
- * The maximum size of the body in bytes.
55
+ * Custom options for `sendStandardResponse`, used to send a `Standard Response`
46
56
  */
47
- maxBodySize: number;
48
- }
49
- /**
50
- * The Body Limit Plugin restricts the size of the request body for the Node.js HTTP Server.
51
- *
52
- * @see {@link https://orpc.dev/docs/plugins/body-limit Body Limit Plugin Docs}
53
- */
54
- declare class BodyLimitPlugin<T extends Context> implements NodeHttpHandlerPlugin<T> {
55
- private readonly maxBodySize;
56
- constructor(options: BodyLimitPluginOptions);
57
- initRuntimeAdapter(options: NodeHttpHandlerOptions<T>): void;
58
- }
59
-
60
- interface CompressionPluginOptions extends compression.CompressionOptions {
57
+ sendStandardResponse?: SendStandardResponseOptions | undefined;
61
58
  /**
62
- * Override the default content-type filter used to determine which responses should be compressed.
63
- *
64
- * @warning [Event Iterator](https://orpc.dev/docs/event-iterator) responses are never compressed, regardless of this filter's return value.
65
- * @default only responses with compressible content types are compressed.
59
+ * Interceptors that run before the mapping between the Standard API and Node HTTP API,
60
+ * useful for extending Node HTTP request/response before handling, ...
66
61
  */
67
- filter?: (req: NodeHttpRequest, res: NodeHttpResponse) => boolean;
62
+ nodeHttpInterceptors?: NodeHttpHandlerNodeHttpInterceptor<T>[] | undefined;
63
+ plugins?: NodeHttpHandlerPlugin<T>[] | undefined;
68
64
  }
69
- /**
70
- * The Compression Plugin adds response compression to the Node.js HTTP Server.
71
- *
72
- * @see {@link https://orpc.dev/docs/plugins/compression Compression Plugin Docs}
73
- */
74
- declare class CompressionPlugin<T extends Context> implements NodeHttpHandlerPlugin<T> {
75
- private readonly compressionHandler;
76
- constructor(options?: CompressionPluginOptions);
77
- initRuntimeAdapter(options: NodeHttpHandlerOptions<T>): void;
65
+ declare class NodeHttpHandler<T extends Context> {
66
+ private readonly standardHandler;
67
+ private readonly sendStandardResponseOptions;
68
+ private readonly nodeHttpInterceptors;
69
+ constructor(standardHandler: StandardHandler<T>, options?: NoInfer<NodeHttpHandlerOptions<T>>);
70
+ handle(request: NodeHttpRequest, response: NodeHttpResponse, ...rest: MaybeOptionalOptions<FriendlyStandardHandlerHandleOptions<T>>): Promise<NodeHttpHandlerHandleResult>;
78
71
  }
79
72
 
80
- interface RPCHandlerOptions<T extends Context> extends NodeHttpHandlerOptions<T>, Omit<StandardRPCHandlerOptions<T>, 'plugins'> {
73
+ interface RPCHandlerOptions<T extends Context> extends NodeHttpHandlerOptions<T>, Omit<StandardHandlerOptions<T>, 'plugins'>, RPCHandlerCodecOptions<T> {
81
74
  /**
82
- * Enables or disables the StrictGetMethodPlugin.
83
- *
84
- * @default true
75
+ * Configuration for {@link CSRFGuardHandlerPlugin}, which is enabled by default for `RPCHandler` over HTTP.
85
76
  */
86
- strictGetMethodPluginEnabled?: boolean;
77
+ csrfGuardPlugin?: {
78
+ /**
79
+ * If `false`, this plugin is disabled.
80
+ *
81
+ * @default true
82
+ */
83
+ enabled?: boolean;
84
+ };
87
85
  }
88
- /**
89
- * RPC Handler for Node.js HTTP Server
90
- *
91
- * @see {@link https://orpc.dev/docs/rpc-handler RPC Handler Docs}
92
- * @see {@link https://orpc.dev/docs/adapters/http HTTP Adapter Docs}
93
- */
94
86
  declare class RPCHandler<T extends Context> extends NodeHttpHandler<T> {
95
- constructor(router: Router<any, T>, options?: NoInfer<RPCHandlerOptions<T>>);
87
+ constructor(router: Router<T>, options?: NoInfer<RPCHandlerOptions<T>>);
96
88
  }
97
89
 
98
- export { BodyLimitPlugin, CompositeNodeHttpHandlerPlugin, CompressionPlugin, NodeHttpHandler, RPCHandler };
99
- export type { BodyLimitPluginOptions, CompressionPluginOptions, NodeHttpHandleResult, NodeHttpHandlerInterceptorOptions, NodeHttpHandlerOptions, NodeHttpHandlerPlugin, RPCHandlerOptions };
90
+ export { CompositeNodeHttpHandlerPlugin, NodeHttpHandler, RPCHandler };
91
+ export type { NodeHttpHandlerHandleResult, NodeHttpHandlerNodeHttpInterceptor, NodeHttpHandlerNodeHttpInterceptorOptions, NodeHttpHandlerOptions, NodeHttpHandlerPlugin, RPCHandlerOptions };