@orpc/server 1.1.1 → 1.3.0

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 (41) hide show
  1. package/README.md +1 -0
  2. package/dist/adapters/bun-ws/index.d.mts +35 -0
  3. package/dist/adapters/bun-ws/index.d.ts +35 -0
  4. package/dist/adapters/bun-ws/index.mjs +51 -0
  5. package/dist/adapters/crossws/index.d.mts +30 -0
  6. package/dist/adapters/crossws/index.d.ts +30 -0
  7. package/dist/adapters/crossws/index.mjs +51 -0
  8. package/dist/adapters/fetch/index.d.mts +17 -9
  9. package/dist/adapters/fetch/index.d.ts +17 -9
  10. package/dist/adapters/fetch/index.mjs +7 -2
  11. package/dist/adapters/message-port/index.d.mts +28 -0
  12. package/dist/adapters/message-port/index.d.ts +28 -0
  13. package/dist/adapters/message-port/index.mjs +41 -0
  14. package/dist/adapters/node/index.d.mts +17 -9
  15. package/dist/adapters/node/index.d.ts +17 -9
  16. package/dist/adapters/node/index.mjs +7 -2
  17. package/dist/adapters/standard/index.d.mts +4 -4
  18. package/dist/adapters/standard/index.d.ts +4 -4
  19. package/dist/adapters/standard/index.mjs +4 -5
  20. package/dist/adapters/websocket/index.d.mts +27 -0
  21. package/dist/adapters/websocket/index.d.ts +27 -0
  22. package/dist/adapters/websocket/index.mjs +38 -0
  23. package/dist/adapters/ws/index.d.mts +28 -0
  24. package/dist/adapters/ws/index.d.ts +28 -0
  25. package/dist/adapters/ws/index.mjs +38 -0
  26. package/dist/index.d.mts +2 -2
  27. package/dist/index.d.ts +2 -2
  28. package/dist/index.mjs +3 -2
  29. package/dist/plugins/index.d.mts +11 -11
  30. package/dist/plugins/index.d.ts +11 -11
  31. package/dist/plugins/index.mjs +6 -7
  32. package/dist/shared/{server.YZzrREz9.d.ts → server.-ACo36I0.d.ts} +6 -6
  33. package/dist/shared/{server.BM1HMJGg.mjs → server.4FnxLwwr.mjs} +7 -11
  34. package/dist/shared/{server.DEgjJVit.d.ts → server.BPAWobQg.d.ts} +3 -9
  35. package/dist/shared/{server.CzSMXd8y.d.mts → server.Bd52nNaH.d.mts} +3 -9
  36. package/dist/shared/{server.QUe9N8P4.d.mts → server.BliFSTnG.d.mts} +2 -2
  37. package/dist/shared/{server.DPWk5pjW.d.mts → server.DD2C4ujN.d.mts} +4 -4
  38. package/dist/shared/{server.DPWk5pjW.d.ts → server.DD2C4ujN.d.ts} +4 -4
  39. package/dist/shared/{server.eWLxY3lq.d.mts → server.Dq8xr7PQ.d.mts} +6 -6
  40. package/dist/shared/{server.BjiJH9Vo.d.ts → server.IG2MjhrD.d.ts} +2 -2
  41. package/package.json +49 -8
@@ -1,8 +1,7 @@
1
- export { C as CompositeStandardHandlerPlugin, S as StandardHandler, a as StandardRPCCodec, b as StandardRPCHandler, c as StandardRPCMatcher } from '../../shared/server.BM1HMJGg.mjs';
1
+ export { C as CompositeStandardHandlerPlugin, S as StandardHandler, a as StandardRPCCodec, b as StandardRPCHandler, c as StandardRPCMatcher } from '../../shared/server.4FnxLwwr.mjs';
2
2
  import '@orpc/client/standard';
3
- import '@orpc/shared';
4
- import '@orpc/standard-server/batch';
5
3
  import '@orpc/client';
6
- import '../../shared/server.BW-nUGgA.mjs';
7
- import '@orpc/contract';
4
+ import '@orpc/shared';
5
+ import '@orpc/standard-server';
8
6
  import '../../shared/server.DG7Tamti.mjs';
7
+ import '@orpc/contract';
@@ -0,0 +1,27 @@
1
+ import { MaybeOptionalOptions } from '@orpc/shared';
2
+ import { C as Context, R as Router } from '../../shared/server.DD2C4ujN.mjs';
3
+ import { i as StandardHandler } from '../../shared/server.Dq8xr7PQ.mjs';
4
+ import { F as FriendlyStandardHandleOptions } from '../../shared/server.BliFSTnG.mjs';
5
+ import { S as StandardRPCHandlerOptions } from '../../shared/server.Bd52nNaH.mjs';
6
+ import '@orpc/client';
7
+ import '@orpc/contract';
8
+ import '@orpc/standard-server';
9
+ import '@orpc/client/standard';
10
+
11
+ declare class experimental_WebsocketHandler<T extends Context> {
12
+ private readonly standardHandler;
13
+ constructor(standardHandler: StandardHandler<T>);
14
+ upgrade(ws: Pick<WebSocket, 'addEventListener' | 'send'>, ...rest: MaybeOptionalOptions<Omit<FriendlyStandardHandleOptions<T>, 'prefix'>>): void;
15
+ }
16
+
17
+ /**
18
+ * RPC Handler for Websocket adapter
19
+ *
20
+ * @see {@link https://orpc.unnoq.com/docs/rpc-handler RPC Handler Docs}
21
+ * @see {@link https://orpc.unnoq.com/docs/adapters/websocket Websocket Adapter Docs}
22
+ */
23
+ declare class experimental_RPCHandler<T extends Context> extends experimental_WebsocketHandler<T> {
24
+ constructor(router: Router<any, T>, options?: NoInfer<StandardRPCHandlerOptions<T>>);
25
+ }
26
+
27
+ export { experimental_RPCHandler, experimental_WebsocketHandler };
@@ -0,0 +1,27 @@
1
+ import { MaybeOptionalOptions } from '@orpc/shared';
2
+ import { C as Context, R as Router } from '../../shared/server.DD2C4ujN.js';
3
+ import { i as StandardHandler } from '../../shared/server.-ACo36I0.js';
4
+ import { F as FriendlyStandardHandleOptions } from '../../shared/server.IG2MjhrD.js';
5
+ import { S as StandardRPCHandlerOptions } from '../../shared/server.BPAWobQg.js';
6
+ import '@orpc/client';
7
+ import '@orpc/contract';
8
+ import '@orpc/standard-server';
9
+ import '@orpc/client/standard';
10
+
11
+ declare class experimental_WebsocketHandler<T extends Context> {
12
+ private readonly standardHandler;
13
+ constructor(standardHandler: StandardHandler<T>);
14
+ upgrade(ws: Pick<WebSocket, 'addEventListener' | 'send'>, ...rest: MaybeOptionalOptions<Omit<FriendlyStandardHandleOptions<T>, 'prefix'>>): void;
15
+ }
16
+
17
+ /**
18
+ * RPC Handler for Websocket adapter
19
+ *
20
+ * @see {@link https://orpc.unnoq.com/docs/rpc-handler RPC Handler Docs}
21
+ * @see {@link https://orpc.unnoq.com/docs/adapters/websocket Websocket Adapter Docs}
22
+ */
23
+ declare class experimental_RPCHandler<T extends Context> extends experimental_WebsocketHandler<T> {
24
+ constructor(router: Router<any, T>, options?: NoInfer<StandardRPCHandlerOptions<T>>);
25
+ }
26
+
27
+ export { experimental_RPCHandler, experimental_WebsocketHandler };
@@ -0,0 +1,38 @@
1
+ import { resolveMaybeOptionalOptions } from '@orpc/shared';
2
+ import { ServerPeer } from '@orpc/standard-server-peer';
3
+ import { r as resolveFriendlyStandardHandleOptions } from '../../shared/server.BVwwTHyO.mjs';
4
+ import '@orpc/client';
5
+ import '@orpc/standard-server';
6
+ import '@orpc/contract';
7
+ import { b as StandardRPCHandler } from '../../shared/server.4FnxLwwr.mjs';
8
+ import '@orpc/client/standard';
9
+ import '../../shared/server.DG7Tamti.mjs';
10
+
11
+ class experimental_WebsocketHandler {
12
+ constructor(standardHandler) {
13
+ this.standardHandler = standardHandler;
14
+ }
15
+ upgrade(ws, ...rest) {
16
+ const peer = new ServerPeer(ws.send.bind(ws));
17
+ ws.addEventListener("message", async (event) => {
18
+ const [id, request] = await peer.message(event.data);
19
+ if (!request) {
20
+ return;
21
+ }
22
+ const options = resolveFriendlyStandardHandleOptions(resolveMaybeOptionalOptions(rest));
23
+ const { response } = await this.standardHandler.handle({ ...request, body: () => Promise.resolve(request.body) }, options);
24
+ await peer.response(id, response ?? { status: 404, headers: {}, body: "No procedure matched" });
25
+ });
26
+ ws.addEventListener("close", () => {
27
+ peer.close();
28
+ });
29
+ }
30
+ }
31
+
32
+ class experimental_RPCHandler extends experimental_WebsocketHandler {
33
+ constructor(router, options = {}) {
34
+ super(new StandardRPCHandler(router, options));
35
+ }
36
+ }
37
+
38
+ export { experimental_RPCHandler, experimental_WebsocketHandler };
@@ -0,0 +1,28 @@
1
+ import { MaybeOptionalOptions } from '@orpc/shared';
2
+ import { WebSocket } from 'ws';
3
+ import { C as Context, R as Router } from '../../shared/server.DD2C4ujN.mjs';
4
+ import { i as StandardHandler } from '../../shared/server.Dq8xr7PQ.mjs';
5
+ import { F as FriendlyStandardHandleOptions } from '../../shared/server.BliFSTnG.mjs';
6
+ import { S as StandardRPCHandlerOptions } from '../../shared/server.Bd52nNaH.mjs';
7
+ import '@orpc/client';
8
+ import '@orpc/contract';
9
+ import '@orpc/standard-server';
10
+ import '@orpc/client/standard';
11
+
12
+ declare class experimental_WsHandler<T extends Context> {
13
+ private readonly standardHandler;
14
+ constructor(standardHandler: StandardHandler<T>);
15
+ upgrade(ws: Pick<WebSocket, 'addEventListener' | 'send'>, ...rest: MaybeOptionalOptions<Omit<FriendlyStandardHandleOptions<T>, 'prefix'>>): Promise<void>;
16
+ }
17
+
18
+ /**
19
+ * RPC Handler for ws (node ws) adapter
20
+ *
21
+ * @see {@link https://orpc.unnoq.com/docs/rpc-handler RPC Handler Docs}
22
+ * @see {@link https://orpc.unnoq.com/docs/adapters/websocket Websocket Adapter Docs}
23
+ */
24
+ declare class experimental_RPCHandler<T extends Context> extends experimental_WsHandler<T> {
25
+ constructor(router: Router<any, T>, options?: NoInfer<StandardRPCHandlerOptions<T>>);
26
+ }
27
+
28
+ export { experimental_RPCHandler, experimental_WsHandler };
@@ -0,0 +1,28 @@
1
+ import { MaybeOptionalOptions } from '@orpc/shared';
2
+ import { WebSocket } from 'ws';
3
+ import { C as Context, R as Router } from '../../shared/server.DD2C4ujN.js';
4
+ import { i as StandardHandler } from '../../shared/server.-ACo36I0.js';
5
+ import { F as FriendlyStandardHandleOptions } from '../../shared/server.IG2MjhrD.js';
6
+ import { S as StandardRPCHandlerOptions } from '../../shared/server.BPAWobQg.js';
7
+ import '@orpc/client';
8
+ import '@orpc/contract';
9
+ import '@orpc/standard-server';
10
+ import '@orpc/client/standard';
11
+
12
+ declare class experimental_WsHandler<T extends Context> {
13
+ private readonly standardHandler;
14
+ constructor(standardHandler: StandardHandler<T>);
15
+ upgrade(ws: Pick<WebSocket, 'addEventListener' | 'send'>, ...rest: MaybeOptionalOptions<Omit<FriendlyStandardHandleOptions<T>, 'prefix'>>): Promise<void>;
16
+ }
17
+
18
+ /**
19
+ * RPC Handler for ws (node ws) adapter
20
+ *
21
+ * @see {@link https://orpc.unnoq.com/docs/rpc-handler RPC Handler Docs}
22
+ * @see {@link https://orpc.unnoq.com/docs/adapters/websocket Websocket Adapter Docs}
23
+ */
24
+ declare class experimental_RPCHandler<T extends Context> extends experimental_WsHandler<T> {
25
+ constructor(router: Router<any, T>, options?: NoInfer<StandardRPCHandlerOptions<T>>);
26
+ }
27
+
28
+ export { experimental_RPCHandler, experimental_WsHandler };
@@ -0,0 +1,38 @@
1
+ import { resolveMaybeOptionalOptions } from '@orpc/shared';
2
+ import { ServerPeer } from '@orpc/standard-server-peer';
3
+ import { r as resolveFriendlyStandardHandleOptions } from '../../shared/server.BVwwTHyO.mjs';
4
+ import '@orpc/client';
5
+ import '@orpc/standard-server';
6
+ import '@orpc/contract';
7
+ import { b as StandardRPCHandler } from '../../shared/server.4FnxLwwr.mjs';
8
+ import '@orpc/client/standard';
9
+ import '../../shared/server.DG7Tamti.mjs';
10
+
11
+ class experimental_WsHandler {
12
+ constructor(standardHandler) {
13
+ this.standardHandler = standardHandler;
14
+ }
15
+ async upgrade(ws, ...rest) {
16
+ const peer = new ServerPeer(ws.send.bind(ws));
17
+ ws.addEventListener("message", async (event) => {
18
+ const [id, request] = await peer.message(new Blob(Array.isArray(event.data) ? event.data : [event.data]));
19
+ if (!request) {
20
+ return;
21
+ }
22
+ const options = resolveFriendlyStandardHandleOptions(resolveMaybeOptionalOptions(rest));
23
+ const { response } = await this.standardHandler.handle({ ...request, body: () => Promise.resolve(request.body) }, options);
24
+ await peer.response(id, response ?? { status: 404, headers: {}, body: "No procedure matched" });
25
+ });
26
+ ws.addEventListener("close", () => {
27
+ peer.close();
28
+ });
29
+ }
30
+ }
31
+
32
+ class experimental_RPCHandler extends experimental_WsHandler {
33
+ constructor(router, options = {}) {
34
+ super(new StandardRPCHandler(router, options));
35
+ }
36
+ }
37
+
38
+ export { experimental_RPCHandler, experimental_WsHandler };
package/dist/index.d.mts CHANGED
@@ -4,8 +4,8 @@ import { AnySchema, ErrorMap, InferSchemaInput, InferSchemaOutput, ErrorFromErro
4
4
  export { ContractProcedure, ContractProcedureDef, ContractRouter, ErrorMap, ErrorMapItem, InferSchemaInput, InferSchemaOutput, InputStructure, MergedErrorMap, Meta, OutputStructure, Route, Schema, ValidationError, eventIterator, type } from '@orpc/contract';
5
5
  import { ThrowableError, IntersectPick, MaybeOptionalOptions } from '@orpc/shared';
6
6
  export { IntersectPick, Registry, ThrowableError, onError, onFinish, onStart, onSuccess } from '@orpc/shared';
7
- import { C as Context, P as Procedure, M as Middleware, O as ORPCErrorConstructorMap, a as MergedInitialContext, b as MergedCurrentContext, c as MapInputMiddleware, d as CreateProcedureClientOptions, e as ProcedureClient, A as AnyMiddleware, L as Lazyable, f as AnyRouter, g as Lazy, h as AnyProcedure, i as ProcedureHandler, R as Router, I as InferRouterInitialContext } from './shared/server.DPWk5pjW.mjs';
8
- export { J as InferRouterCurrentContexts, H as InferRouterInitialContexts, K as InferRouterInputs, N as InferRouterOutputs, n as LAZY_SYMBOL, o as LazyMeta, w as MiddlewareNextFn, t as MiddlewareNextFnOptions, y as MiddlewareOptions, x as MiddlewareOutputFn, s as MiddlewareResult, k as ORPCErrorConstructorMapItem, j as ORPCErrorConstructorMapItemOptions, F as ProcedureClientInterceptorOptions, D as ProcedureDef, B as ProcedureHandlerOptions, l as createORPCErrorConstructorMap, G as createProcedureClient, r as getLazyMeta, q as isLazy, E as isProcedure, p as lazy, m as mergeCurrentContext, z as middlewareOutputFn, u as unlazy, v as validateORPCError } from './shared/server.DPWk5pjW.mjs';
7
+ import { C as Context, P as Procedure, M as Middleware, O as ORPCErrorConstructorMap, a as MergedInitialContext, b as MergedCurrentContext, c as MapInputMiddleware, d as CreateProcedureClientOptions, e as ProcedureClient, A as AnyMiddleware, L as Lazyable, f as AnyRouter, g as Lazy, h as AnyProcedure, i as ProcedureHandler, R as Router, I as InferRouterInitialContext } from './shared/server.DD2C4ujN.mjs';
8
+ export { J as InferRouterCurrentContexts, H as InferRouterInitialContexts, K as InferRouterInputs, N as InferRouterOutputs, n as LAZY_SYMBOL, o as LazyMeta, w as MiddlewareNextFn, t as MiddlewareNextFnOptions, y as MiddlewareOptions, x as MiddlewareOutputFn, s as MiddlewareResult, k as ORPCErrorConstructorMapItem, j as ORPCErrorConstructorMapItemOptions, F as ProcedureClientInterceptorOptions, D as ProcedureDef, B as ProcedureHandlerOptions, l as createORPCErrorConstructorMap, G as createProcedureClient, r as getLazyMeta, q as isLazy, E as isProcedure, p as lazy, m as mergeCurrentContext, z as middlewareOutputFn, u as unlazy, v as validateORPCError } from './shared/server.DD2C4ujN.mjs';
9
9
  export { getEventMeta, withEventMeta } from '@orpc/standard-server';
10
10
 
11
11
  type ActionableError<T> = T extends ORPCError<infer U, infer V> ? ORPCErrorJSON<U, V> & {
package/dist/index.d.ts CHANGED
@@ -4,8 +4,8 @@ import { AnySchema, ErrorMap, InferSchemaInput, InferSchemaOutput, ErrorFromErro
4
4
  export { ContractProcedure, ContractProcedureDef, ContractRouter, ErrorMap, ErrorMapItem, InferSchemaInput, InferSchemaOutput, InputStructure, MergedErrorMap, Meta, OutputStructure, Route, Schema, ValidationError, eventIterator, type } from '@orpc/contract';
5
5
  import { ThrowableError, IntersectPick, MaybeOptionalOptions } from '@orpc/shared';
6
6
  export { IntersectPick, Registry, ThrowableError, onError, onFinish, onStart, onSuccess } from '@orpc/shared';
7
- import { C as Context, P as Procedure, M as Middleware, O as ORPCErrorConstructorMap, a as MergedInitialContext, b as MergedCurrentContext, c as MapInputMiddleware, d as CreateProcedureClientOptions, e as ProcedureClient, A as AnyMiddleware, L as Lazyable, f as AnyRouter, g as Lazy, h as AnyProcedure, i as ProcedureHandler, R as Router, I as InferRouterInitialContext } from './shared/server.DPWk5pjW.js';
8
- export { J as InferRouterCurrentContexts, H as InferRouterInitialContexts, K as InferRouterInputs, N as InferRouterOutputs, n as LAZY_SYMBOL, o as LazyMeta, w as MiddlewareNextFn, t as MiddlewareNextFnOptions, y as MiddlewareOptions, x as MiddlewareOutputFn, s as MiddlewareResult, k as ORPCErrorConstructorMapItem, j as ORPCErrorConstructorMapItemOptions, F as ProcedureClientInterceptorOptions, D as ProcedureDef, B as ProcedureHandlerOptions, l as createORPCErrorConstructorMap, G as createProcedureClient, r as getLazyMeta, q as isLazy, E as isProcedure, p as lazy, m as mergeCurrentContext, z as middlewareOutputFn, u as unlazy, v as validateORPCError } from './shared/server.DPWk5pjW.js';
7
+ import { C as Context, P as Procedure, M as Middleware, O as ORPCErrorConstructorMap, a as MergedInitialContext, b as MergedCurrentContext, c as MapInputMiddleware, d as CreateProcedureClientOptions, e as ProcedureClient, A as AnyMiddleware, L as Lazyable, f as AnyRouter, g as Lazy, h as AnyProcedure, i as ProcedureHandler, R as Router, I as InferRouterInitialContext } from './shared/server.DD2C4ujN.js';
8
+ export { J as InferRouterCurrentContexts, H as InferRouterInitialContexts, K as InferRouterInputs, N as InferRouterOutputs, n as LAZY_SYMBOL, o as LazyMeta, w as MiddlewareNextFn, t as MiddlewareNextFnOptions, y as MiddlewareOptions, x as MiddlewareOutputFn, s as MiddlewareResult, k as ORPCErrorConstructorMapItem, j as ORPCErrorConstructorMapItemOptions, F as ProcedureClientInterceptorOptions, D as ProcedureDef, B as ProcedureHandlerOptions, l as createORPCErrorConstructorMap, G as createProcedureClient, r as getLazyMeta, q as isLazy, E as isProcedure, p as lazy, m as mergeCurrentContext, z as middlewareOutputFn, u as unlazy, v as validateORPCError } from './shared/server.DD2C4ujN.js';
9
9
  export { getEventMeta, withEventMeta } from '@orpc/standard-server';
10
10
 
11
11
  type ActionableError<T> = T extends ORPCError<infer U, infer V> ? ORPCErrorJSON<U, V> & {
package/dist/index.mjs CHANGED
@@ -4,6 +4,7 @@ import { P as Procedure, b as addMiddleware, c as createProcedureClient, e as en
4
4
  export { L as LAZY_SYMBOL, p as call, r as createAccessibleLazyRouter, a as createContractedProcedure, h as createORPCErrorConstructorMap, q as getHiddenRouterContract, j as getLazyMeta, n as isStartWithMiddlewares, m as mergeCurrentContext, o as mergeMiddlewares, k as middlewareOutputFn, w as resolveContractProcedures, t as traverseContractProcedures, u as unlazy, x as unlazyRouter, v as validateORPCError } from './shared/server.DG7Tamti.mjs';
5
5
  import { toORPCError } from '@orpc/client';
6
6
  export { ORPCError, isDefinedError, safe } from '@orpc/client';
7
+ import { resolveMaybeOptionalOptions } from '@orpc/shared';
7
8
  export { onError, onFinish, onStart, onSuccess } from '@orpc/shared';
8
9
  export { getEventMeta, withEventMeta } from '@orpc/standard-server';
9
10
 
@@ -449,10 +450,10 @@ function implement(contract, config = {}) {
449
450
 
450
451
  function createRouterClient(router, ...rest) {
451
452
  if (isProcedure(router)) {
452
- const caller = createProcedureClient(router, ...rest);
453
+ const caller = createProcedureClient(router, resolveMaybeOptionalOptions(rest));
453
454
  return caller;
454
455
  }
455
- const procedureCaller = isLazy(router) ? createProcedureClient(createAssertedLazyProcedure(router), ...rest) : {};
456
+ const procedureCaller = isLazy(router) ? createProcedureClient(createAssertedLazyProcedure(router), resolveMaybeOptionalOptions(rest)) : {};
456
457
  const recursive = new Proxy(procedureCaller, {
457
458
  get(target, key) {
458
459
  if (typeof key !== "string") {
@@ -1,8 +1,8 @@
1
- import { Value } from '@orpc/shared';
1
+ import { Value, Promisable } from '@orpc/shared';
2
2
  import { StandardRequest, StandardHeaders } from '@orpc/standard-server';
3
3
  import { BatchResponseBodyItem } from '@orpc/standard-server/batch';
4
- import { S as StandardHandlerInterceptorOptions, a as StandardHandlerPlugin, b as StandardHandlerOptions } from '../shared/server.eWLxY3lq.mjs';
5
- import { C as Context, F as ProcedureClientInterceptorOptions } from '../shared/server.DPWk5pjW.mjs';
4
+ import { S as StandardHandlerInterceptorOptions, a as StandardHandlerPlugin, b as StandardHandlerOptions } from '../shared/server.Dq8xr7PQ.mjs';
5
+ import { C as Context, F as ProcedureClientInterceptorOptions } from '../shared/server.DD2C4ujN.mjs';
6
6
  import { Meta, ORPCError as ORPCError$1 } from '@orpc/contract';
7
7
  import { ORPCError } from '@orpc/client';
8
8
 
@@ -12,7 +12,7 @@ interface BatchHandlerOptions<T extends Context> {
12
12
  *
13
13
  * @default 10
14
14
  */
15
- maxSize?: Value<number, [StandardHandlerInterceptorOptions<T>]>;
15
+ maxSize?: Value<Promisable<number>, [StandardHandlerInterceptorOptions<T>]>;
16
16
  /**
17
17
  * Map the request before processing it.
18
18
  *
@@ -24,13 +24,13 @@ interface BatchHandlerOptions<T extends Context> {
24
24
  *
25
25
  * @default 207
26
26
  */
27
- successStatus?: Value<number, [responses: Promise<BatchResponseBodyItem>[], batchOptions: StandardHandlerInterceptorOptions<T>]>;
27
+ successStatus?: Value<Promisable<number>, [responses: Promise<BatchResponseBodyItem>[], batchOptions: StandardHandlerInterceptorOptions<T>]>;
28
28
  /**
29
29
  * success batch response headers.
30
30
  *
31
31
  * @default {}
32
32
  */
33
- headers?: Value<StandardHeaders, [responses: Promise<BatchResponseBodyItem>[], batchOptions: StandardHandlerInterceptorOptions<T>]>;
33
+ headers?: Value<Promisable<StandardHeaders>, [responses: Promise<BatchResponseBodyItem>[], batchOptions: StandardHandlerInterceptorOptions<T>]>;
34
34
  }
35
35
  /**
36
36
  * The Batch Request/Response Plugin allows you to combine multiple requests and responses into a single batch,
@@ -49,8 +49,8 @@ declare class BatchHandlerPlugin<T extends Context> implements StandardHandlerPl
49
49
  }
50
50
 
51
51
  interface CORSOptions<T extends Context> {
52
- origin?: Value<string | readonly string[] | null | undefined, [origin: string, options: StandardHandlerInterceptorOptions<T>]>;
53
- timingOrigin?: Value<string | readonly string[] | null | undefined, [origin: string, options: StandardHandlerInterceptorOptions<T>]>;
52
+ origin?: Value<Promisable<string | readonly string[] | null | undefined>, [origin: string, options: StandardHandlerInterceptorOptions<T>]>;
53
+ timingOrigin?: Value<Promisable<string | readonly string[] | null | undefined>, [origin: string, options: StandardHandlerInterceptorOptions<T>]>;
54
54
  allowMethods?: readonly string[];
55
55
  allowHeaders?: readonly string[];
56
56
  maxAge?: number;
@@ -88,21 +88,21 @@ interface SimpleCsrfProtectionHandlerPluginOptions<T extends Context> {
88
88
  *
89
89
  * @default 'x-csrf-token'
90
90
  */
91
- headerName?: Value<string, [options: StandardHandlerInterceptorOptions<T>]>;
91
+ headerName?: Value<Promisable<string>, [options: StandardHandlerInterceptorOptions<T>]>;
92
92
  /**
93
93
  * The value of the header to check.
94
94
  *
95
95
  * @default 'orpc'
96
96
  *
97
97
  */
98
- headerValue?: Value<string, [options: StandardHandlerInterceptorOptions<T>]>;
98
+ headerValue?: Value<Promisable<string>, [options: StandardHandlerInterceptorOptions<T>]>;
99
99
  /**
100
100
  * Exclude a procedure from the plugin.
101
101
  *
102
102
  * @default false
103
103
  *
104
104
  */
105
- exclude?: Value<boolean, [options: ProcedureClientInterceptorOptions<T, Record<never, never>, Meta>]>;
105
+ exclude?: Value<Promisable<boolean>, [options: ProcedureClientInterceptorOptions<T, Record<never, never>, Meta>]>;
106
106
  /**
107
107
  * The error thrown when the CSRF token is invalid.
108
108
  *
@@ -1,8 +1,8 @@
1
- import { Value } from '@orpc/shared';
1
+ import { Value, Promisable } from '@orpc/shared';
2
2
  import { StandardRequest, StandardHeaders } from '@orpc/standard-server';
3
3
  import { BatchResponseBodyItem } from '@orpc/standard-server/batch';
4
- import { S as StandardHandlerInterceptorOptions, a as StandardHandlerPlugin, b as StandardHandlerOptions } from '../shared/server.YZzrREz9.js';
5
- import { C as Context, F as ProcedureClientInterceptorOptions } from '../shared/server.DPWk5pjW.js';
4
+ import { S as StandardHandlerInterceptorOptions, a as StandardHandlerPlugin, b as StandardHandlerOptions } from '../shared/server.-ACo36I0.js';
5
+ import { C as Context, F as ProcedureClientInterceptorOptions } from '../shared/server.DD2C4ujN.js';
6
6
  import { Meta, ORPCError as ORPCError$1 } from '@orpc/contract';
7
7
  import { ORPCError } from '@orpc/client';
8
8
 
@@ -12,7 +12,7 @@ interface BatchHandlerOptions<T extends Context> {
12
12
  *
13
13
  * @default 10
14
14
  */
15
- maxSize?: Value<number, [StandardHandlerInterceptorOptions<T>]>;
15
+ maxSize?: Value<Promisable<number>, [StandardHandlerInterceptorOptions<T>]>;
16
16
  /**
17
17
  * Map the request before processing it.
18
18
  *
@@ -24,13 +24,13 @@ interface BatchHandlerOptions<T extends Context> {
24
24
  *
25
25
  * @default 207
26
26
  */
27
- successStatus?: Value<number, [responses: Promise<BatchResponseBodyItem>[], batchOptions: StandardHandlerInterceptorOptions<T>]>;
27
+ successStatus?: Value<Promisable<number>, [responses: Promise<BatchResponseBodyItem>[], batchOptions: StandardHandlerInterceptorOptions<T>]>;
28
28
  /**
29
29
  * success batch response headers.
30
30
  *
31
31
  * @default {}
32
32
  */
33
- headers?: Value<StandardHeaders, [responses: Promise<BatchResponseBodyItem>[], batchOptions: StandardHandlerInterceptorOptions<T>]>;
33
+ headers?: Value<Promisable<StandardHeaders>, [responses: Promise<BatchResponseBodyItem>[], batchOptions: StandardHandlerInterceptorOptions<T>]>;
34
34
  }
35
35
  /**
36
36
  * The Batch Request/Response Plugin allows you to combine multiple requests and responses into a single batch,
@@ -49,8 +49,8 @@ declare class BatchHandlerPlugin<T extends Context> implements StandardHandlerPl
49
49
  }
50
50
 
51
51
  interface CORSOptions<T extends Context> {
52
- origin?: Value<string | readonly string[] | null | undefined, [origin: string, options: StandardHandlerInterceptorOptions<T>]>;
53
- timingOrigin?: Value<string | readonly string[] | null | undefined, [origin: string, options: StandardHandlerInterceptorOptions<T>]>;
52
+ origin?: Value<Promisable<string | readonly string[] | null | undefined>, [origin: string, options: StandardHandlerInterceptorOptions<T>]>;
53
+ timingOrigin?: Value<Promisable<string | readonly string[] | null | undefined>, [origin: string, options: StandardHandlerInterceptorOptions<T>]>;
54
54
  allowMethods?: readonly string[];
55
55
  allowHeaders?: readonly string[];
56
56
  maxAge?: number;
@@ -88,21 +88,21 @@ interface SimpleCsrfProtectionHandlerPluginOptions<T extends Context> {
88
88
  *
89
89
  * @default 'x-csrf-token'
90
90
  */
91
- headerName?: Value<string, [options: StandardHandlerInterceptorOptions<T>]>;
91
+ headerName?: Value<Promisable<string>, [options: StandardHandlerInterceptorOptions<T>]>;
92
92
  /**
93
93
  * The value of the header to check.
94
94
  *
95
95
  * @default 'orpc'
96
96
  *
97
97
  */
98
- headerValue?: Value<string, [options: StandardHandlerInterceptorOptions<T>]>;
98
+ headerValue?: Value<Promisable<string>, [options: StandardHandlerInterceptorOptions<T>]>;
99
99
  /**
100
100
  * Exclude a procedure from the plugin.
101
101
  *
102
102
  * @default false
103
103
  *
104
104
  */
105
- exclude?: Value<boolean, [options: ProcedureClientInterceptorOptions<T, Record<never, never>, Meta>]>;
105
+ exclude?: Value<Promisable<boolean>, [options: ProcedureClientInterceptorOptions<T, Record<never, never>, Meta>]>;
106
106
  /**
107
107
  * The error thrown when the CSRF token is invalid.
108
108
  *
@@ -1,5 +1,6 @@
1
1
  import { value, isAsyncIteratorObject } from '@orpc/shared';
2
2
  import { parseBatchRequest, toBatchResponse } from '@orpc/standard-server/batch';
3
+ import { flattenHeader } from '@orpc/standard-server';
3
4
  import { ORPCError } from '@orpc/client';
4
5
  export { S as StrictGetMethodPlugin } from '../shared/server.BW-nUGgA.mjs';
5
6
  import '@orpc/contract';
@@ -123,13 +124,11 @@ class CORSPlugin {
123
124
  resHeaders["access-control-max-age"] = this.options.maxAge.toString();
124
125
  }
125
126
  if (this.options.allowMethods?.length) {
126
- resHeaders["access-control-allow-methods"] = this.options.allowMethods.join(",");
127
+ resHeaders["access-control-allow-methods"] = flattenHeader(this.options.allowMethods);
127
128
  }
128
129
  const allowHeaders = this.options.allowHeaders ?? interceptorOptions.request.headers["access-control-request-headers"];
129
- if (Array.isArray(allowHeaders) && allowHeaders.length) {
130
- resHeaders["access-control-allow-headers"] = allowHeaders.join(",");
131
- } else if (typeof allowHeaders === "string") {
132
- resHeaders["access-control-allow-headers"] = allowHeaders;
130
+ if (typeof allowHeaders === "string" || allowHeaders?.length) {
131
+ resHeaders["access-control-allow-headers"] = flattenHeader(allowHeaders);
133
132
  }
134
133
  return {
135
134
  matched: true,
@@ -147,7 +146,7 @@ class CORSPlugin {
147
146
  if (!result.matched) {
148
147
  return result;
149
148
  }
150
- const origin = Array.isArray(interceptorOptions.request.headers.origin) ? interceptorOptions.request.headers.origin.join(",") : interceptorOptions.request.headers.origin || "";
149
+ const origin = flattenHeader(interceptorOptions.request.headers.origin) ?? "";
151
150
  const allowedOrigin = await value(this.options.origin, origin, interceptorOptions);
152
151
  const allowedOriginArr = Array.isArray(allowedOrigin) ? allowedOrigin : [allowedOrigin];
153
152
  if (allowedOriginArr.includes("*")) {
@@ -169,7 +168,7 @@ class CORSPlugin {
169
168
  result.response.headers["access-control-allow-credentials"] = "true";
170
169
  }
171
170
  if (this.options.exposeHeaders?.length) {
172
- result.response.headers["access-control-expose-headers"] = this.options.exposeHeaders.join(",");
171
+ result.response.headers["access-control-expose-headers"] = flattenHeader(this.options.exposeHeaders);
173
172
  }
174
173
  return result;
175
174
  });
@@ -1,8 +1,8 @@
1
1
  import { HTTPPath, ORPCError } from '@orpc/client';
2
- import { Meta, InferSchemaOutput, AnySchema, ErrorFromErrorMap } from '@orpc/contract';
3
- import { Interceptor, ThrowableError } from '@orpc/shared';
2
+ import { Meta } from '@orpc/contract';
3
+ import { Interceptor } from '@orpc/shared';
4
4
  import { StandardResponse, StandardLazyRequest } from '@orpc/standard-server';
5
- import { C as Context, R as Router, f as AnyRouter, h as AnyProcedure, F as ProcedureClientInterceptorOptions } from './server.DPWk5pjW.js';
5
+ import { C as Context, R as Router, f as AnyRouter, h as AnyProcedure, F as ProcedureClientInterceptorOptions } from './server.DD2C4ujN.js';
6
6
 
7
7
  interface StandardHandlerPlugin<T extends Context> {
8
8
  order?: number;
@@ -49,16 +49,16 @@ interface StandardHandlerOptions<TContext extends Context> {
49
49
  /**
50
50
  * Interceptors at the request level, helpful when you want catch errors
51
51
  */
52
- interceptors?: Interceptor<StandardHandlerInterceptorOptions<TContext>, StandardHandleResult, ThrowableError>[];
52
+ interceptors?: Interceptor<StandardHandlerInterceptorOptions<TContext>, Promise<StandardHandleResult>>[];
53
53
  /**
54
54
  * Interceptors at the root level, helpful when you want override the request/response
55
55
  */
56
- rootInterceptors?: Interceptor<StandardHandlerInterceptorOptions<TContext>, StandardHandleResult, ThrowableError>[];
56
+ rootInterceptors?: Interceptor<StandardHandlerInterceptorOptions<TContext>, Promise<StandardHandleResult>>[];
57
57
  /**
58
58
  *
59
59
  * Interceptors for procedure client.
60
60
  */
61
- clientInterceptors?: Interceptor<ProcedureClientInterceptorOptions<TContext, Record<never, never>, Meta>, InferSchemaOutput<AnySchema>, ErrorFromErrorMap<Record<never, never>>>[];
61
+ clientInterceptors?: Interceptor<ProcedureClientInterceptorOptions<TContext, Record<never, never>, Meta>, Promise<unknown>>[];
62
62
  }
63
63
  declare class StandardHandler<T extends Context> {
64
64
  private readonly matcher;
@@ -1,8 +1,7 @@
1
1
  import { toHttpPath, StandardRPCJsonSerializer, StandardRPCSerializer } from '@orpc/client/standard';
2
- import { toArray, intercept, parseEmptyableJSON } from '@orpc/shared';
3
- import '@orpc/standard-server/batch';
4
2
  import { ORPCError, toORPCError } from '@orpc/client';
5
- import { S as StrictGetMethodPlugin } from './server.BW-nUGgA.mjs';
3
+ import { toArray, intercept, parseEmptyableJSON } from '@orpc/shared';
4
+ import { flattenHeader } from '@orpc/standard-server';
6
5
  import { c as createProcedureClient, t as traverseContractProcedures, i as isProcedure, u as unlazy, g as getRouter, a as createContractedProcedure } from './server.DG7Tamti.mjs';
7
6
 
8
7
  class CompositeStandardHandlerPlugin {
@@ -61,8 +60,10 @@ class StandardHandler {
61
60
  isDecoding = true;
62
61
  const input = await this.codec.decode(request2, match.params, match.procedure);
63
62
  isDecoding = false;
64
- const lastEventId = Array.isArray(request2.headers["last-event-id"]) ? request2.headers["last-event-id"].at(-1) : request2.headers["last-event-id"];
65
- const output = await client(input, { signal: request2.signal, lastEventId });
63
+ const output = await client(input, {
64
+ signal: request2.signal,
65
+ lastEventId: flattenHeader(request2.headers["last-event-id"])
66
+ });
66
67
  const response = this.codec.encode(output, match.procedure);
67
68
  return {
68
69
  matched: true,
@@ -173,12 +174,7 @@ class StandardRPCMatcher {
173
174
  }
174
175
 
175
176
  class StandardRPCHandler extends StandardHandler {
176
- constructor(router, options) {
177
- options.plugins ??= [];
178
- const strictGetMethodPluginEnabled = options.strictGetMethodPluginEnabled ?? true;
179
- if (strictGetMethodPluginEnabled) {
180
- options.plugins.push(new StrictGetMethodPlugin());
181
- }
177
+ constructor(router, options = {}) {
182
178
  const jsonSerializer = new StandardRPCJsonSerializer(options);
183
179
  const serializer = new StandardRPCSerializer(jsonSerializer);
184
180
  const matcher = new StandardRPCMatcher();
@@ -1,17 +1,11 @@
1
1
  import { StandardRPCJsonSerializerOptions } from '@orpc/client/standard';
2
- import { C as Context, R as Router } from './server.DPWk5pjW.js';
3
- import { b as StandardHandlerOptions, i as StandardHandler } from './server.YZzrREz9.js';
2
+ import { C as Context, R as Router } from './server.DD2C4ujN.js';
3
+ import { b as StandardHandlerOptions, i as StandardHandler } from './server.-ACo36I0.js';
4
4
 
5
5
  interface StandardRPCHandlerOptions<T extends Context> extends StandardHandlerOptions<T>, StandardRPCJsonSerializerOptions {
6
- /**
7
- * Enables or disables the StrictGetMethodPlugin.
8
- *
9
- * @default true
10
- */
11
- strictGetMethodPluginEnabled?: boolean;
12
6
  }
13
7
  declare class StandardRPCHandler<T extends Context> extends StandardHandler<T> {
14
- constructor(router: Router<any, T>, options: StandardRPCHandlerOptions<T>);
8
+ constructor(router: Router<any, T>, options?: StandardRPCHandlerOptions<T>);
15
9
  }
16
10
 
17
11
  export { StandardRPCHandler as a };
@@ -1,17 +1,11 @@
1
1
  import { StandardRPCJsonSerializerOptions } from '@orpc/client/standard';
2
- import { C as Context, R as Router } from './server.DPWk5pjW.mjs';
3
- import { b as StandardHandlerOptions, i as StandardHandler } from './server.eWLxY3lq.mjs';
2
+ import { C as Context, R as Router } from './server.DD2C4ujN.mjs';
3
+ import { b as StandardHandlerOptions, i as StandardHandler } from './server.Dq8xr7PQ.mjs';
4
4
 
5
5
  interface StandardRPCHandlerOptions<T extends Context> extends StandardHandlerOptions<T>, StandardRPCJsonSerializerOptions {
6
- /**
7
- * Enables or disables the StrictGetMethodPlugin.
8
- *
9
- * @default true
10
- */
11
- strictGetMethodPluginEnabled?: boolean;
12
6
  }
13
7
  declare class StandardRPCHandler<T extends Context> extends StandardHandler<T> {
14
- constructor(router: Router<any, T>, options: StandardRPCHandlerOptions<T>);
8
+ constructor(router: Router<any, T>, options?: StandardRPCHandlerOptions<T>);
15
9
  }
16
10
 
17
11
  export { StandardRPCHandler as a };
@@ -1,5 +1,5 @@
1
- import { C as Context } from './server.DPWk5pjW.mjs';
2
- import { g as StandardHandleOptions } from './server.eWLxY3lq.mjs';
1
+ import { C as Context } from './server.DD2C4ujN.mjs';
2
+ import { g as StandardHandleOptions } from './server.Dq8xr7PQ.mjs';
3
3
 
4
4
  type FriendlyStandardHandleOptions<T extends Context> = Omit<StandardHandleOptions<T>, 'context'> & (Record<never, never> extends T ? {
5
5
  context?: T;
@@ -1,6 +1,6 @@
1
1
  import { ORPCErrorCode, ORPCErrorOptions, ORPCError, HTTPPath, ClientContext, Client } from '@orpc/client';
2
2
  import { ErrorMap, ErrorMapItem, InferSchemaInput, AnySchema, Meta, ContractProcedureDef, InferSchemaOutput, ErrorFromErrorMap, AnyContractRouter, ContractProcedure } from '@orpc/contract';
3
- import { MaybeOptionalOptions, Promisable, Interceptor, Value } from '@orpc/shared';
3
+ import { MaybeOptionalOptions, Promisable, Interceptor, PromiseWithError, Value } from '@orpc/shared';
4
4
 
5
5
  type Context = Record<PropertyKey, any>;
6
6
  type MergedInitialContext<TInitial extends Context, TAdditional extends Context, TCurrent extends Context> = TInitial & Omit<TAdditional, keyof TCurrent>;
@@ -127,11 +127,11 @@ type CreateProcedureClientOptions<TInitialContext extends Context, TOutputSchema
127
127
  * This is helpful for logging and analytics.
128
128
  */
129
129
  path?: readonly string[];
130
- interceptors?: Interceptor<ProcedureClientInterceptorOptions<TInitialContext, TErrorMap, TMeta>, InferSchemaOutput<TOutputSchema>, ErrorFromErrorMap<TErrorMap>>[];
130
+ interceptors?: Interceptor<ProcedureClientInterceptorOptions<TInitialContext, TErrorMap, TMeta>, PromiseWithError<InferSchemaOutput<TOutputSchema>, ErrorFromErrorMap<TErrorMap>>>[];
131
131
  } & (Record<never, never> extends TInitialContext ? {
132
- context?: Value<TInitialContext, [clientContext: TClientContext]>;
132
+ context?: Value<Promisable<TInitialContext>, [clientContext: TClientContext]>;
133
133
  } : {
134
- context: Value<TInitialContext, [clientContext: TClientContext]>;
134
+ context: Value<Promisable<TInitialContext>, [clientContext: TClientContext]>;
135
135
  });
136
136
  /**
137
137
  * Create Server-side client from a procedure.
@@ -1,6 +1,6 @@
1
1
  import { ORPCErrorCode, ORPCErrorOptions, ORPCError, HTTPPath, ClientContext, Client } from '@orpc/client';
2
2
  import { ErrorMap, ErrorMapItem, InferSchemaInput, AnySchema, Meta, ContractProcedureDef, InferSchemaOutput, ErrorFromErrorMap, AnyContractRouter, ContractProcedure } from '@orpc/contract';
3
- import { MaybeOptionalOptions, Promisable, Interceptor, Value } from '@orpc/shared';
3
+ import { MaybeOptionalOptions, Promisable, Interceptor, PromiseWithError, Value } from '@orpc/shared';
4
4
 
5
5
  type Context = Record<PropertyKey, any>;
6
6
  type MergedInitialContext<TInitial extends Context, TAdditional extends Context, TCurrent extends Context> = TInitial & Omit<TAdditional, keyof TCurrent>;
@@ -127,11 +127,11 @@ type CreateProcedureClientOptions<TInitialContext extends Context, TOutputSchema
127
127
  * This is helpful for logging and analytics.
128
128
  */
129
129
  path?: readonly string[];
130
- interceptors?: Interceptor<ProcedureClientInterceptorOptions<TInitialContext, TErrorMap, TMeta>, InferSchemaOutput<TOutputSchema>, ErrorFromErrorMap<TErrorMap>>[];
130
+ interceptors?: Interceptor<ProcedureClientInterceptorOptions<TInitialContext, TErrorMap, TMeta>, PromiseWithError<InferSchemaOutput<TOutputSchema>, ErrorFromErrorMap<TErrorMap>>>[];
131
131
  } & (Record<never, never> extends TInitialContext ? {
132
- context?: Value<TInitialContext, [clientContext: TClientContext]>;
132
+ context?: Value<Promisable<TInitialContext>, [clientContext: TClientContext]>;
133
133
  } : {
134
- context: Value<TInitialContext, [clientContext: TClientContext]>;
134
+ context: Value<Promisable<TInitialContext>, [clientContext: TClientContext]>;
135
135
  });
136
136
  /**
137
137
  * Create Server-side client from a procedure.