@orpc/server 2.0.0-beta.48 → 2.0.0-beta.49

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 (269) hide show
  1. package/README.md +4 -4
  2. package/dist/adapters/aws-lambda/handler.d.ts +25 -0
  3. package/dist/adapters/aws-lambda/handler.js +24 -0
  4. package/dist/adapters/aws-lambda/index.d.ts +16 -0
  5. package/dist/adapters/aws-lambda/index.js +2 -0
  6. package/dist/adapters/aws-lambda/rpc-handler.d.ts +19 -0
  7. package/dist/adapters/aws-lambda/rpc-handler.js +18 -0
  8. package/dist/adapters/crossws/handler.d.ts +45 -0
  9. package/dist/adapters/crossws/handler.js +60 -0
  10. package/dist/adapters/crossws/index.d.ts +2 -0
  11. package/dist/adapters/crossws/index.js +2 -0
  12. package/dist/adapters/crossws/rpc-handler.d.ts +16 -0
  13. package/dist/adapters/crossws/rpc-handler.js +15 -0
  14. package/dist/adapters/fastify/handler.d.ts +21 -0
  15. package/dist/adapters/fastify/handler.js +20 -0
  16. package/dist/adapters/fastify/index.d.ts +2 -0
  17. package/dist/adapters/fastify/index.js +2 -0
  18. package/dist/adapters/fastify/rpc-handler.d.ts +15 -0
  19. package/dist/adapters/fastify/rpc-handler.js +14 -0
  20. package/dist/adapters/fetch/handler.d.ts +23 -0
  21. package/dist/adapters/fetch/handler.js +22 -0
  22. package/dist/adapters/fetch/index.d.ts +7 -0
  23. package/dist/adapters/fetch/index.js +7 -0
  24. package/dist/adapters/fetch/rpc-handler.d.ts +17 -0
  25. package/dist/adapters/fetch/rpc-handler.js +16 -0
  26. package/dist/adapters/message-port/handler.d.ts +64 -0
  27. package/dist/adapters/message-port/handler.js +86 -0
  28. package/dist/adapters/message-port/index.d.ts +2 -0
  29. package/dist/adapters/message-port/index.js +2 -0
  30. package/dist/adapters/message-port/rpc-handler.d.ts +16 -0
  31. package/dist/adapters/message-port/rpc-handler.js +15 -0
  32. package/dist/adapters/node/handler.d.ts +21 -0
  33. package/dist/adapters/node/handler.js +20 -0
  34. package/dist/adapters/node/index.d.ts +7 -0
  35. package/dist/adapters/node/index.js +7 -0
  36. package/dist/adapters/node/rpc-handler.d.ts +16 -0
  37. package/dist/adapters/node/rpc-handler.js +15 -0
  38. package/dist/adapters/standard/codec.d.ts +16 -0
  39. package/dist/adapters/standard/handler.d.ts +68 -0
  40. package/dist/adapters/standard/handler.js +205 -0
  41. package/dist/adapters/standard/index.d.ts +6 -0
  42. package/dist/adapters/standard/index.js +5 -0
  43. package/dist/adapters/standard/plugin.d.ts +32 -0
  44. package/dist/adapters/standard/plugin.js +16 -0
  45. package/dist/adapters/standard/rpc-handler-codec.d.ts +46 -0
  46. package/dist/adapters/standard/rpc-handler-codec.js +51 -0
  47. package/dist/adapters/standard/rpc-matcher.d.ts +53 -0
  48. package/dist/adapters/standard/rpc-matcher.js +152 -0
  49. package/dist/adapters/standard/utils.d.ts +10 -0
  50. package/dist/adapters/standard/utils.js +6 -0
  51. package/dist/adapters/standard-peer/index.d.ts +1 -0
  52. package/dist/adapters/standard-peer/index.js +1 -0
  53. package/dist/adapters/standard-peer/{utils.d.mts → utils.d.ts} +3 -3
  54. package/dist/adapters/standard-peer/utils.js +7 -0
  55. package/dist/adapters/websocket/handler.d.ts +59 -0
  56. package/dist/adapters/websocket/handler.js +85 -0
  57. package/dist/adapters/websocket/index.d.ts +2 -0
  58. package/dist/adapters/websocket/index.js +2 -0
  59. package/dist/adapters/websocket/rpc-handler.d.ts +16 -0
  60. package/dist/adapters/websocket/rpc-handler.js +15 -0
  61. package/dist/builder-variants.d.ts +226 -0
  62. package/dist/builder.d.ts +127 -0
  63. package/dist/builder.js +226 -0
  64. package/dist/context.d.ts +6 -0
  65. package/dist/extensions/callable.d.ts +11 -0
  66. package/dist/extensions/callable.js +7 -0
  67. package/dist/helpers/base64url.d.ts +31 -0
  68. package/dist/helpers/base64url.js +53 -0
  69. package/dist/helpers/cookie.d.ts +51 -0
  70. package/dist/helpers/cookie.js +69 -0
  71. package/dist/helpers/encryption.d.ts +28 -0
  72. package/dist/helpers/encryption.js +80 -0
  73. package/dist/helpers/index.d.ts +4 -0
  74. package/dist/helpers/index.js +4 -0
  75. package/dist/helpers/signing.d.ts +50 -0
  76. package/dist/helpers/signing.js +88 -0
  77. package/dist/implementer-procedure.d.ts +16 -0
  78. package/dist/implementer-procedure.js +44 -0
  79. package/dist/implementer-router.d.ts +40 -0
  80. package/dist/implementer-router.js +117 -0
  81. package/dist/implementer.d.ts +16 -0
  82. package/dist/implementer.js +37 -0
  83. package/dist/index.d.ts +61 -0
  84. package/dist/index.js +48 -0
  85. package/dist/lazy.d.ts +20 -0
  86. package/dist/lazy.js +31 -0
  87. package/dist/middleware-decorated.d.ts +10 -0
  88. package/dist/middleware-decorated.js +71 -0
  89. package/dist/middleware.d.ts +54 -0
  90. package/dist/plugins/batch.d.ts +102 -0
  91. package/dist/plugins/batch.js +405 -0
  92. package/dist/plugins/cors.d.ts +73 -0
  93. package/dist/plugins/cors.js +112 -0
  94. package/dist/plugins/get-method-csrf-protection.d.ts +23 -0
  95. package/dist/plugins/get-method-csrf-protection.js +64 -0
  96. package/dist/plugins/head-method.d.ts +23 -0
  97. package/dist/plugins/head-method.js +104 -0
  98. package/dist/plugins/index.d.ts +39 -0
  99. package/dist/plugins/index.js +29 -0
  100. package/dist/plugins/method-override.d.ts +38 -0
  101. package/dist/plugins/method-override.js +50 -0
  102. package/dist/plugins/request-compression.d.ts +16 -0
  103. package/dist/plugins/request-compression.js +82 -0
  104. package/dist/plugins/request-headers.d.ts +22 -0
  105. package/dist/plugins/request-headers.js +30 -0
  106. package/dist/plugins/request-limit.d.ts +30 -0
  107. package/dist/plugins/request-limit.js +68 -0
  108. package/dist/plugins/response-compression.d.ts +59 -0
  109. package/dist/plugins/response-compression.js +209 -0
  110. package/dist/plugins/response-headers.d.ts +30 -0
  111. package/dist/plugins/response-headers.js +47 -0
  112. package/dist/plugins/rethrow.d.ts +33 -0
  113. package/dist/plugins/rethrow.js +59 -0
  114. package/dist/plugins/signal-sync.d.ts +13 -0
  115. package/dist/plugins/signal-sync.js +91 -0
  116. package/dist/plugins/timeout.d.ts +37 -0
  117. package/dist/plugins/timeout.js +59 -0
  118. package/dist/procedure-client.d.ts +19 -0
  119. package/dist/procedure-client.js +175 -0
  120. package/dist/procedure-decorated.d.ts +10 -0
  121. package/dist/procedure-decorated.js +44 -0
  122. package/dist/procedure-utils.d.ts +41 -0
  123. package/dist/procedure-utils.js +49 -0
  124. package/dist/procedure.d.ts +72 -0
  125. package/dist/procedure.js +24 -0
  126. package/dist/router-client.d.ts +23 -0
  127. package/dist/router-client.js +43 -0
  128. package/dist/{router-hidden.d.mts → router-hidden.d.ts} +3 -3
  129. package/dist/router-hidden.js +14 -0
  130. package/dist/router-utils.d.ts +48 -0
  131. package/dist/router-utils.js +202 -0
  132. package/dist/router.d.ts +72 -0
  133. package/package.json +84 -86
  134. package/dist/adapters/aws-lambda/handler.d.mts +0 -25
  135. package/dist/adapters/aws-lambda/handler.mjs +0 -21
  136. package/dist/adapters/aws-lambda/index.d.mts +0 -16
  137. package/dist/adapters/aws-lambda/index.mjs +0 -2
  138. package/dist/adapters/aws-lambda/rpc-handler.d.mts +0 -18
  139. package/dist/adapters/aws-lambda/rpc-handler.mjs +0 -10
  140. package/dist/adapters/crossws/handler.d.mts +0 -41
  141. package/dist/adapters/crossws/handler.mjs +0 -38
  142. package/dist/adapters/crossws/index.d.mts +0 -2
  143. package/dist/adapters/crossws/index.mjs +0 -2
  144. package/dist/adapters/crossws/rpc-handler.d.mts +0 -15
  145. package/dist/adapters/crossws/rpc-handler.mjs +0 -10
  146. package/dist/adapters/fastify/handler.d.mts +0 -21
  147. package/dist/adapters/fastify/handler.mjs +0 -20
  148. package/dist/adapters/fastify/index.d.mts +0 -2
  149. package/dist/adapters/fastify/index.mjs +0 -2
  150. package/dist/adapters/fastify/rpc-handler.d.mts +0 -14
  151. package/dist/adapters/fastify/rpc-handler.mjs +0 -10
  152. package/dist/adapters/fetch/handler.d.mts +0 -23
  153. package/dist/adapters/fetch/handler.mjs +0 -22
  154. package/dist/adapters/fetch/index.d.mts +0 -7
  155. package/dist/adapters/fetch/index.mjs +0 -5
  156. package/dist/adapters/fetch/rpc-handler.d.mts +0 -16
  157. package/dist/adapters/fetch/rpc-handler.mjs +0 -10
  158. package/dist/adapters/message-port/handler.d.mts +0 -57
  159. package/dist/adapters/message-port/handler.mjs +0 -62
  160. package/dist/adapters/message-port/index.d.mts +0 -2
  161. package/dist/adapters/message-port/index.mjs +0 -2
  162. package/dist/adapters/message-port/rpc-handler.d.mts +0 -15
  163. package/dist/adapters/message-port/rpc-handler.mjs +0 -10
  164. package/dist/adapters/node/handler.d.mts +0 -21
  165. package/dist/adapters/node/handler.mjs +0 -20
  166. package/dist/adapters/node/index.d.mts +0 -7
  167. package/dist/adapters/node/index.mjs +0 -5
  168. package/dist/adapters/node/rpc-handler.d.mts +0 -15
  169. package/dist/adapters/node/rpc-handler.mjs +0 -10
  170. package/dist/adapters/standard/codec.d.mts +0 -16
  171. package/dist/adapters/standard/handler.d.mts +0 -68
  172. package/dist/adapters/standard/handler.mjs +0 -185
  173. package/dist/adapters/standard/index.d.mts +0 -6
  174. package/dist/adapters/standard/index.mjs +0 -5
  175. package/dist/adapters/standard/plugin.d.mts +0 -32
  176. package/dist/adapters/standard/plugin.mjs +0 -16
  177. package/dist/adapters/standard/rpc-handler-codec.d.mts +0 -42
  178. package/dist/adapters/standard/rpc-handler-codec.mjs +0 -51
  179. package/dist/adapters/standard/rpc-matcher.d.mts +0 -53
  180. package/dist/adapters/standard/rpc-matcher.mjs +0 -140
  181. package/dist/adapters/standard/utils.d.mts +0 -10
  182. package/dist/adapters/standard/utils.mjs +0 -6
  183. package/dist/adapters/standard-peer/index.d.mts +0 -1
  184. package/dist/adapters/standard-peer/index.mjs +0 -1
  185. package/dist/adapters/standard-peer/utils.mjs +0 -11
  186. package/dist/adapters/websocket/handler.d.mts +0 -55
  187. package/dist/adapters/websocket/handler.mjs +0 -55
  188. package/dist/adapters/websocket/index.d.mts +0 -2
  189. package/dist/adapters/websocket/index.mjs +0 -2
  190. package/dist/adapters/websocket/rpc-handler.d.mts +0 -15
  191. package/dist/adapters/websocket/rpc-handler.mjs +0 -10
  192. package/dist/builder-variants.d.mts +0 -267
  193. package/dist/builder.d.mts +0 -141
  194. package/dist/builder.mjs +0 -145
  195. package/dist/context.d.mts +0 -13
  196. package/dist/extensions/callable.d.mts +0 -17
  197. package/dist/extensions/callable.mjs +0 -7
  198. package/dist/helpers/base64url.d.mts +0 -31
  199. package/dist/helpers/base64url.mjs +0 -25
  200. package/dist/helpers/cookie.d.mts +0 -50
  201. package/dist/helpers/cookie.mjs +0 -35
  202. package/dist/helpers/encryption.d.mts +0 -28
  203. package/dist/helpers/encryption.mjs +0 -62
  204. package/dist/helpers/index.d.mts +0 -4
  205. package/dist/helpers/index.mjs +0 -4
  206. package/dist/helpers/signing.d.mts +0 -50
  207. package/dist/helpers/signing.mjs +0 -43
  208. package/dist/implementer-procedure.d.mts +0 -36
  209. package/dist/implementer-procedure.mjs +0 -38
  210. package/dist/implementer-router.d.mts +0 -78
  211. package/dist/implementer-router.mjs +0 -77
  212. package/dist/implementer.d.mts +0 -22
  213. package/dist/implementer.mjs +0 -30
  214. package/dist/index.d.mts +0 -57
  215. package/dist/index.mjs +0 -30
  216. package/dist/lazy.d.mts +0 -20
  217. package/dist/lazy.mjs +0 -22
  218. package/dist/middleware-decorated.d.mts +0 -27
  219. package/dist/middleware-decorated.mjs +0 -65
  220. package/dist/middleware.d.mts +0 -70
  221. package/dist/plugins/batch.d.mts +0 -104
  222. package/dist/plugins/batch.mjs +0 -373
  223. package/dist/plugins/cors.d.mts +0 -67
  224. package/dist/plugins/cors.mjs +0 -134
  225. package/dist/plugins/get-method-csrf-protection.d.mts +0 -23
  226. package/dist/plugins/get-method-csrf-protection.mjs +0 -45
  227. package/dist/plugins/head-method.d.mts +0 -23
  228. package/dist/plugins/head-method.mjs +0 -95
  229. package/dist/plugins/index.d.mts +0 -39
  230. package/dist/plugins/index.mjs +0 -23
  231. package/dist/plugins/method-override.d.mts +0 -38
  232. package/dist/plugins/method-override.mjs +0 -50
  233. package/dist/plugins/request-compression.d.mts +0 -16
  234. package/dist/plugins/request-compression.mjs +0 -67
  235. package/dist/plugins/request-headers.d.mts +0 -22
  236. package/dist/plugins/request-headers.mjs +0 -21
  237. package/dist/plugins/request-limit.d.mts +0 -30
  238. package/dist/plugins/request-limit.mjs +0 -53
  239. package/dist/plugins/response-compression.d.mts +0 -59
  240. package/dist/plugins/response-compression.mjs +0 -172
  241. package/dist/plugins/response-headers.d.mts +0 -30
  242. package/dist/plugins/response-headers.mjs +0 -34
  243. package/dist/plugins/rethrow.d.mts +0 -33
  244. package/dist/plugins/rethrow.mjs +0 -46
  245. package/dist/plugins/signal-sync.d.mts +0 -13
  246. package/dist/plugins/signal-sync.mjs +0 -84
  247. package/dist/plugins/timeout.d.mts +0 -37
  248. package/dist/plugins/timeout.mjs +0 -56
  249. package/dist/procedure-client.d.mts +0 -41
  250. package/dist/procedure-client.mjs +0 -157
  251. package/dist/procedure-decorated.d.mts +0 -20
  252. package/dist/procedure-decorated.mjs +0 -41
  253. package/dist/procedure-utils.d.mts +0 -52
  254. package/dist/procedure-utils.mjs +0 -33
  255. package/dist/procedure.d.mts +0 -93
  256. package/dist/procedure.mjs +0 -20
  257. package/dist/router-client.d.mts +0 -27
  258. package/dist/router-client.mjs +0 -35
  259. package/dist/router-hidden.mjs +0 -12
  260. package/dist/router-utils.d.mts +0 -59
  261. package/dist/router-utils.mjs +0 -191
  262. package/dist/router.d.mts +0 -61
  263. /package/dist/adapters/standard/{codec.mjs → codec.js} +0 -0
  264. /package/dist/{builder-variants.mjs → builder-variants.js} +0 -0
  265. /package/dist/{constants.d.mts → constants.d.ts} +0 -0
  266. /package/dist/{constants.mjs → constants.js} +0 -0
  267. /package/dist/{context.mjs → context.js} +0 -0
  268. /package/dist/{middleware.mjs → middleware.js} +0 -0
  269. /package/dist/{router.mjs → router.js} +0 -0
@@ -0,0 +1,127 @@
1
+ import type { AnySchema, ErrorMap, InferSchemaInput, InferSchemaOutput, InitialInputSchema, InitialOutputSchema, MergedErrorMap, MetaPlugin, ORPCErrorConstructorMap, ProcedureContractDefinition, Schema } from '@orpc/contract';
2
+ import type { IntersectPick } from '@orpc/shared';
3
+ import type { BuilderWithInput, BuilderWithMiddlewares, BuilderWithOutput } from './builder-variants.ts';
4
+ import type { Context, MergedInitialContext } from './context.ts';
5
+ import { Lazy } from './lazy.ts';
6
+ import type { DecoratedMiddleware } from './middleware-decorated.ts';
7
+ import type { Middleware } from './middleware.ts';
8
+ import { DecoratedProcedure } from './procedure-decorated.ts';
9
+ import type { OrderedMiddleware, ProcedureConfig, ProcedureHandler } from './procedure.ts';
10
+ import type { AugmentedRouter } from './router-utils.ts';
11
+ import type { AnyRouter } from './router.ts';
12
+ /**
13
+ * The initial context type used when `.$context` is not called.
14
+ * Augment this interface with `declare module '@orpc/server'` to define
15
+ * a default initial context type globally.
16
+ *
17
+ * @see {@link https://orpc.dev/docs/context#default-initial-context | Context - Default Initial Context}
18
+ */
19
+ export interface DefaultInitialContext {
20
+ }
21
+ export interface BuilderDefinition<TInputSchema extends AnySchema, TInjectedContext extends AnySchema, TErrorMap extends ErrorMap> extends ProcedureContractDefinition<TInputSchema, TInjectedContext, TErrorMap>, ProcedureConfig {
22
+ orderedMiddlewares: OrderedMiddleware[];
23
+ }
24
+ /**
25
+ * The procedure builder behind `os`. Chain its methods to gradually define
26
+ * context, middleware, errors, schemas, and finally a handler or router.
27
+ *
28
+ * @see {@link https://orpc.dev/docs/procedure | Procedure}
29
+ */
30
+ export declare class Builder<TInitialContext extends Context, TErrorMap extends ErrorMap> {
31
+ '~orpc': BuilderDefinition<InitialInputSchema, InitialOutputSchema, TErrorMap>;
32
+ /**
33
+ * Private constructor to prevent direct instantiation.
34
+ * Use the static `create` method to initialize a new instance with a safe initial definition.
35
+ */
36
+ private constructor();
37
+ /**
38
+ * Creates a fresh builder with an empty definition.
39
+ * Prefer the exported `os` instance over calling this directly.
40
+ *
41
+ * @see {@link https://orpc.dev/docs/procedure | Procedure}
42
+ */
43
+ static 'create'<T extends Context = DefaultInitialContext>(): Builder<T & object, Record<never, never>>;
44
+ /**
45
+ * Declares the initial context type that must be provided when executing
46
+ * procedures built from this builder.
47
+ *
48
+ * @see {@link https://orpc.dev/docs/context#initial-context | Context - Initial Context}
49
+ */
50
+ '$context'<T extends Context = DefaultInitialContext>(): Builder<T & object, TErrorMap>;
51
+ /**
52
+ * Overrides the procedure configuration, such as disabling runtime
53
+ * input/output validation.
54
+ *
55
+ * @see {@link https://orpc.dev/docs/recipes/validation-customization | Validation Customization}
56
+ */
57
+ '$config'(config: ProcedureConfig): Builder<TInitialContext, TErrorMap>;
58
+ /**
59
+ * Applies metadata plugins to procedures built from this builder.
60
+ *
61
+ * @see {@link https://orpc.dev/docs/metadata | Metadata}
62
+ */
63
+ 'meta'(...plugins: MetaPlugin<InitialInputSchema, InitialOutputSchema, TErrorMap>[]): Builder<TInitialContext, TErrorMap>;
64
+ /**
65
+ * Defines typesafe errors that procedures built from this builder can throw
66
+ * via the `errors` utility in handlers and middleware.
67
+ *
68
+ * @see {@link https://orpc.dev/docs/error-handling#typesafe-errors | Error Handling - Typesafe Errors}
69
+ */
70
+ 'errors'<U extends ErrorMap>(errors: U): Builder<TInitialContext, MergedErrorMap<TErrorMap, U>>;
71
+ /**
72
+ * Applies a middleware that runs before the handler of every procedure
73
+ * built from this builder.
74
+ *
75
+ * @see {@link https://orpc.dev/docs/middleware | Middleware}
76
+ */
77
+ 'use'<$OutContext extends IntersectPick<TInitialContext, $OutContext>, $InContext extends Context = TInitialContext, $ErrorMap extends ErrorMap = TErrorMap>(middleware: Middleware<$InContext | TInitialContext, $OutContext, InferSchemaOutput<InitialInputSchema>, InferSchemaInput<InitialOutputSchema>, $ErrorMap>): BuilderWithMiddlewares<MergedInitialContext<TInitialContext, object, $InContext>, $OutContext, MergedErrorMap<$ErrorMap, TErrorMap>>;
78
+ /**
79
+ * Creates a standalone middleware that can be composed and applied to any
80
+ * compatible builder or procedure with `.use`.
81
+ *
82
+ * @see {@link https://orpc.dev/docs/middleware | Middleware}
83
+ */
84
+ 'middleware'<$OutContext extends IntersectPick<TInitialContext, $OutContext>, $Input, $Output = any>(middleware: Middleware<TInitialContext, $OutContext, $Input, $Output, TErrorMap>): DecoratedMiddleware<TInitialContext, $OutContext, $Input, $Output, TErrorMap>;
85
+ /**
86
+ * Defines the input schema used to validate and type the procedure input.
87
+ *
88
+ * @see {@link https://orpc.dev/docs/procedure#inputoutput-validation | Procedure - Input/Output Validation}
89
+ */
90
+ 'input'<$ extends AnySchema>(schema: $): BuilderWithInput<TInitialContext, object, $, TErrorMap>;
91
+ /**
92
+ * Defines the output schema used to validate and type the procedure output.
93
+ *
94
+ * @see {@link https://orpc.dev/docs/procedure#inputoutput-validation | Procedure - Input/Output Validation}
95
+ */
96
+ 'output'<$ extends AnySchema>(schema: $): BuilderWithOutput<TInitialContext, object, $, TErrorMap>;
97
+ /**
98
+ * Defines the function that implements the procedure and completes the
99
+ * chain, returning a callable procedure.
100
+ *
101
+ * @see {@link https://orpc.dev/docs/procedure | Procedure}
102
+ */
103
+ 'handler'<T>(handler: ProcedureHandler<TInitialContext, InferSchemaOutput<InitialInputSchema>, T, ORPCErrorConstructorMap<TErrorMap>>): DecoratedProcedure<TInitialContext, object, InitialInputSchema, Schema<T>, TErrorMap>;
104
+ /**
105
+ * Applies the builder's middleware, errors, and metadata to every procedure
106
+ * in the given router.
107
+ *
108
+ * @see {@link https://orpc.dev/docs/router#extending-router | Router - Extending Router}
109
+ */
110
+ 'router'<T extends AnyRouter>(router: T): AugmentedRouter<T, TErrorMap>;
111
+ /**
112
+ * Like `.router`, but loads the router lazily on first access, which helps
113
+ * reduce startup time for large applications.
114
+ *
115
+ * @see {@link https://orpc.dev/docs/router#lazy-router | Router - Lazy Router}
116
+ */
117
+ 'lazy'<T extends AnyRouter>(loader: () => Promise<{
118
+ default: T;
119
+ }>): Lazy<AugmentedRouter<T, TErrorMap>>;
120
+ }
121
+ /**
122
+ * The oRPC procedure builder. Chain methods like `.input`, `.use`, and `.handler`
123
+ * to define procedures, then compose them into routers.
124
+ *
125
+ * @see {@link https://orpc.dev/docs/procedure | Procedure}
126
+ */
127
+ export declare const os: Builder<DefaultInitialContext & object, Record<never, never>>;
@@ -0,0 +1,226 @@
1
+ import { getHiddenMetaPlugins, mergeErrorMap, resolveMetaPlugins } from '@orpc/contract';
2
+ import { toArray } from '@orpc/shared';
3
+ import { Lazy } from './lazy.js';
4
+ import { decorateMiddleware } from './middleware-decorated.js';
5
+ import { DecoratedProcedure } from './procedure-decorated.js';
6
+ import { augmentRouter } from './router-utils.js';
7
+ /**
8
+ * The procedure builder behind `os`. Chain its methods to gradually define
9
+ * context, middleware, errors, schemas, and finally a handler or router.
10
+ *
11
+ * @see {@link https://orpc.dev/docs/procedure | Procedure}
12
+ */
13
+ export class Builder {
14
+ '~orpc';
15
+ /**
16
+ * Private constructor to prevent direct instantiation.
17
+ * Use the static `create` method to initialize a new instance with a safe initial definition.
18
+ */
19
+ constructor(definition) {
20
+ this['~orpc'] = definition;
21
+ }
22
+ /**
23
+ * Creates a fresh builder with an empty definition.
24
+ * Prefer the exported `os` instance over calling this directly.
25
+ *
26
+ * @see {@link https://orpc.dev/docs/procedure | Procedure}
27
+ */
28
+ static 'create'() {
29
+ // Using `& object` avoids "has no properties in common with type" errors
30
+ // when combining procedures or routers with compatible but non-overlapping contexts.
31
+ return new Builder({
32
+ errorMap: {},
33
+ meta: {},
34
+ orderedMiddlewares: [],
35
+ });
36
+ }
37
+ /**
38
+ * Declares the initial context type that must be provided when executing
39
+ * procedures built from this builder.
40
+ *
41
+ * @see {@link https://orpc.dev/docs/context#initial-context | Context - Initial Context}
42
+ */
43
+ '$context'() {
44
+ // Using `& object` avoids "has no properties in common with type" errors
45
+ // when combining procedures or routers with compatible but non-overlapping contexts.
46
+ // because we can't call $context after .use method so we don't need reset middlewares here
47
+ return this;
48
+ }
49
+ /**
50
+ * Overrides the procedure configuration, such as disabling runtime
51
+ * input/output validation.
52
+ *
53
+ * @see {@link https://orpc.dev/docs/recipes/validation-customization | Validation Customization}
54
+ */
55
+ '$config'(config) {
56
+ return new Builder({
57
+ ...this['~orpc'],
58
+ ...config,
59
+ });
60
+ }
61
+ /**
62
+ * Applies metadata plugins to procedures built from this builder.
63
+ *
64
+ * @see {@link https://orpc.dev/docs/metadata | Metadata}
65
+ */
66
+ 'meta'(...plugins) {
67
+ const [meta, metaPlugins] = resolveMetaPlugins(this['~orpc'].meta, this['~orpc'].metaPlugins, plugins);
68
+ return new Builder({
69
+ ...this['~orpc'],
70
+ meta,
71
+ metaPlugins,
72
+ });
73
+ }
74
+ /**
75
+ * Defines typesafe errors that procedures built from this builder can throw
76
+ * via the `errors` utility in handlers and middleware.
77
+ *
78
+ * @see {@link https://orpc.dev/docs/error-handling#typesafe-errors | Error Handling - Typesafe Errors}
79
+ */
80
+ 'errors'(errors) {
81
+ let builder = new Builder({
82
+ ...this['~orpc'],
83
+ errorMap: mergeErrorMap(this['~orpc'].errorMap, errors),
84
+ });
85
+ const plugins = getHiddenMetaPlugins(errors);
86
+ if (plugins) {
87
+ builder = builder.meta(...plugins);
88
+ }
89
+ return builder;
90
+ }
91
+ /**
92
+ * Applies a middleware that runs before the handler of every procedure
93
+ * built from this builder.
94
+ *
95
+ * @see {@link https://orpc.dev/docs/middleware | Middleware}
96
+ */
97
+ 'use'(middleware) {
98
+ let builder = new Builder({
99
+ ...this['~orpc'],
100
+ errorMap: mergeErrorMap(middleware['~orpc']?.errorMap ?? {}, this['~orpc'].errorMap),
101
+ orderedMiddlewares: [
102
+ ...this['~orpc'].orderedMiddlewares,
103
+ {
104
+ middleware,
105
+ inputSchemasLengthAtUse: this['~orpc'].inputSchemas?.length,
106
+ outputSchemasLengthAtUse: this['~orpc'].outputSchemas?.length,
107
+ },
108
+ ],
109
+ });
110
+ if (middleware['~orpc']?.metaPlugins) {
111
+ builder = builder.meta(...middleware['~orpc']?.metaPlugins);
112
+ }
113
+ return builder;
114
+ }
115
+ /**
116
+ * Creates a standalone middleware that can be composed and applied to any
117
+ * compatible builder or procedure with `.use`.
118
+ *
119
+ * @see {@link https://orpc.dev/docs/middleware | Middleware}
120
+ */
121
+ 'middleware'(middleware) {
122
+ const allMiddlewares = [
123
+ ...this['~orpc'].orderedMiddlewares.map(({ middleware }) => middleware),
124
+ middleware,
125
+ ];
126
+ let current = decorateMiddleware(allMiddlewares.shift());
127
+ for (const mid of allMiddlewares) {
128
+ current = current.use(mid);
129
+ }
130
+ current['~orpc'] = {
131
+ ...current['~orpc'],
132
+ errorMap: this['~orpc'].errorMap,
133
+ metaPlugins: [
134
+ ...toArray(this['~orpc'].metaPlugins),
135
+ ...toArray(middleware['~orpc']?.metaPlugins),
136
+ ],
137
+ };
138
+ return current;
139
+ }
140
+ /**
141
+ * Defines the input schema used to validate and type the procedure input.
142
+ *
143
+ * @see {@link https://orpc.dev/docs/procedure#inputoutput-validation | Procedure - Input/Output Validation}
144
+ */
145
+ 'input'(schema) {
146
+ let builder = new Builder({
147
+ ...this['~orpc'],
148
+ inputSchemas: [...toArray(this['~orpc'].inputSchemas), schema],
149
+ });
150
+ const plugins = getHiddenMetaPlugins(schema);
151
+ if (plugins) {
152
+ builder = builder.meta(...plugins);
153
+ }
154
+ return builder;
155
+ }
156
+ /**
157
+ * Defines the output schema used to validate and type the procedure output.
158
+ *
159
+ * @see {@link https://orpc.dev/docs/procedure#inputoutput-validation | Procedure - Input/Output Validation}
160
+ */
161
+ 'output'(schema) {
162
+ let builder = new Builder({
163
+ ...this['~orpc'],
164
+ outputSchemas: [...toArray(this['~orpc'].outputSchemas), schema],
165
+ });
166
+ const plugins = getHiddenMetaPlugins(schema);
167
+ if (plugins) {
168
+ builder = builder.meta(...plugins);
169
+ }
170
+ return builder;
171
+ }
172
+ /**
173
+ * Defines the function that implements the procedure and completes the
174
+ * chain, returning a callable procedure.
175
+ *
176
+ * @see {@link https://orpc.dev/docs/procedure | Procedure}
177
+ */
178
+ 'handler'(handler) {
179
+ let procedure = new DecoratedProcedure({
180
+ ...this['~orpc'],
181
+ handler,
182
+ });
183
+ const plugins = getHiddenMetaPlugins(handler);
184
+ if (plugins) {
185
+ procedure = procedure.meta(...plugins);
186
+ }
187
+ return procedure;
188
+ }
189
+ /**
190
+ * Applies the builder's middleware, errors, and metadata to every procedure
191
+ * in the given router.
192
+ *
193
+ * @see {@link https://orpc.dev/docs/router#extending-router | Router - Extending Router}
194
+ */
195
+ 'router'(router) {
196
+ return augmentRouter(router, {
197
+ ...this['~orpc'],
198
+ middlewares: this['~orpc'].orderedMiddlewares.map(({ middleware }) => middleware),
199
+ });
200
+ }
201
+ /**
202
+ * Like `.router`, but loads the router lazily on first access, which helps
203
+ * reduce startup time for large applications.
204
+ *
205
+ * @see {@link https://orpc.dev/docs/router#lazy-router | Router - Lazy Router}
206
+ */
207
+ 'lazy'(loader) {
208
+ return new Lazy({
209
+ loader: async () => {
210
+ const { default: router } = await loader();
211
+ return {
212
+ default: this.router(router),
213
+ };
214
+ },
215
+ meta: this['~orpc'].meta,
216
+ metaPlugins: this['~orpc'].metaPlugins,
217
+ });
218
+ }
219
+ }
220
+ /**
221
+ * The oRPC procedure builder. Chain methods like `.input`, `.use`, and `.handler`
222
+ * to define procedures, then compose them into routers.
223
+ *
224
+ * @see {@link https://orpc.dev/docs/procedure | Procedure}
225
+ */
226
+ export const os = /* @__PURE__ */ Builder.create();
@@ -0,0 +1,6 @@
1
+ import type { DistributiveOmit } from '@orpc/shared';
2
+ export interface Context {
3
+ [key: PropertyKey]: any;
4
+ }
5
+ export type MergedInitialContext<TInitial extends Context, TOutContext extends Context, TInContext extends Context> = TInContext extends any ? Exclude<keyof TInContext, keyof TInitial | keyof TOutContext> extends never ? TInitial : TInitial & DistributiveOmit<TInContext, keyof TInitial | keyof TOutContext> : never;
6
+ export type MergedContext<TCurrent extends Context, TOutContext extends Context> = keyof TOutContext extends never ? TCurrent : DistributiveOmit<TCurrent, keyof TOutContext> & TOutContext;
@@ -0,0 +1,11 @@
1
+ import type { ClientContext } from '@orpc/client';
2
+ import type { AnySchema, ErrorMap } from '@orpc/contract';
3
+ import type { MaybeOptionalOptions } from '@orpc/shared';
4
+ import type { Context } from '../context.ts';
5
+ import type { ProcedureClient, ProcedureClientOptions } from '../procedure-client.ts';
6
+ import type { Procedure } from '../procedure.ts';
7
+ declare module '@orpc/server' {
8
+ interface DecoratedProcedure<TInitialContext extends Context, TInjectedContext extends Context, TInputSchema extends AnySchema, TOutputSchema extends AnySchema, TErrorMap extends ErrorMap> {
9
+ callable<TClientContext extends ClientContext>(...rest: MaybeOptionalOptions<ProcedureClientOptions<TInitialContext, TOutputSchema, TErrorMap, TClientContext>>): Procedure<TInitialContext, TInjectedContext, TInputSchema, TOutputSchema, TErrorMap> & ProcedureClient<TClientContext, TInputSchema, TOutputSchema, TErrorMap>;
10
+ }
11
+ }
@@ -0,0 +1,7 @@
1
+ import { createProcedureClient } from '../procedure-client.js';
2
+ import { DecoratedProcedure } from '../procedure-decorated.js';
3
+ DecoratedProcedure.prototype.callable = function callable(...rest) {
4
+ const callable = createProcedureClient(this, ...rest);
5
+ callable['~orpc'] = this['~orpc'];
6
+ return callable;
7
+ };
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Encodes a Uint8Array to base64url format
3
+ * Base64url is URL-safe and doesn't use padding
4
+ *
5
+ * @example
6
+ * ```ts
7
+ * const text = "Hello World"
8
+ * const encoded = encodeBase64url(new TextEncoder().encode(text))
9
+ * const decoded = decodeBase64url(encoded)
10
+ * expect(new TextDecoder().decode(decoded)).toEqual(text)
11
+ * ```
12
+ *
13
+ * @see {@link https://orpc.dev/docs/helpers/base64url | Base64Url Helpers}
14
+ */
15
+ export declare function encodeBase64url(data: Uint8Array): string;
16
+ /**
17
+ * Decodes a base64url string to Uint8Array
18
+ * Only accepts canonical, unpadded base64url (the form produced by `encodeBase64url`),
19
+ * returns undefined for anything else, including padded or standard base64 input
20
+ *
21
+ * @example
22
+ * ```ts
23
+ * const text = "Hello World"
24
+ * const encoded = encodeBase64url(new TextEncoder().encode(text))
25
+ * const decoded = decodeBase64url(encoded)
26
+ * expect(new TextDecoder().decode(decoded)).toEqual(text)
27
+ * ```
28
+ *
29
+ * @see {@link https://orpc.dev/docs/helpers/base64url | Base64Url Helpers}
30
+ */
31
+ export declare function decodeBase64url(base64url: string | undefined | null): Uint8Array<ArrayBuffer> | undefined;
@@ -0,0 +1,53 @@
1
+ import { encodeBase64 } from '@orpc/shared';
2
+ /**
3
+ * Encodes a Uint8Array to base64url format
4
+ * Base64url is URL-safe and doesn't use padding
5
+ *
6
+ * @example
7
+ * ```ts
8
+ * const text = "Hello World"
9
+ * const encoded = encodeBase64url(new TextEncoder().encode(text))
10
+ * const decoded = decodeBase64url(encoded)
11
+ * expect(new TextDecoder().decode(decoded)).toEqual(text)
12
+ * ```
13
+ *
14
+ * @see {@link https://orpc.dev/docs/helpers/base64url | Base64Url Helpers}
15
+ */
16
+ export function encodeBase64url(data) {
17
+ return encodeBase64(data).replace(/\+/g, '-').replace(/\//g, '_').replace(/=/g, '');
18
+ }
19
+ /**
20
+ * Decodes a base64url string to Uint8Array
21
+ * Only accepts canonical, unpadded base64url (the form produced by `encodeBase64url`),
22
+ * returns undefined for anything else, including padded or standard base64 input
23
+ *
24
+ * @example
25
+ * ```ts
26
+ * const text = "Hello World"
27
+ * const encoded = encodeBase64url(new TextEncoder().encode(text))
28
+ * const decoded = decodeBase64url(encoded)
29
+ * expect(new TextDecoder().decode(decoded)).toEqual(text)
30
+ * ```
31
+ *
32
+ * @see {@link https://orpc.dev/docs/helpers/base64url | Base64Url Helpers}
33
+ */
34
+ export function decodeBase64url(base64url) {
35
+ try {
36
+ if (typeof base64url !== 'string') {
37
+ return undefined;
38
+ }
39
+ let base64 = base64url.replace(/-/g, '+').replace(/_/g, '/');
40
+ while (base64.length % 4) {
41
+ base64 += '=';
42
+ }
43
+ const binaryString = atob(base64);
44
+ const bytes = new Uint8Array(binaryString.length);
45
+ for (let i = 0; i < binaryString.length; i++) {
46
+ bytes[i] = binaryString.charCodeAt(i);
47
+ }
48
+ return encodeBase64url(bytes) === base64url ? bytes : undefined;
49
+ }
50
+ catch {
51
+ return undefined;
52
+ }
53
+ }
@@ -0,0 +1,51 @@
1
+ import type { ParseOptions, SetCookie, StringifyOptions } from 'cookie';
2
+ export interface SetCookieOptions extends Omit<SetCookie, 'name' | 'value'>, StringifyOptions {
3
+ /**
4
+ * Specifies the value for the [`Path` `Set-Cookie` attribute](https://tools.ietf.org/html/rfc6265#section-5.2.4).
5
+ *
6
+ * @default '/'
7
+ */
8
+ path?: string;
9
+ }
10
+ /**
11
+ * Sets a cookie in the response headers.
12
+ *
13
+ * Does nothing if `headers` is `undefined`.
14
+ *
15
+ * @example
16
+ * ```ts
17
+ * const headers = new Headers()
18
+ *
19
+ * setCookie(headers, 'sessionId', 'abc123', { httpOnly: true, maxAge: 3600 })
20
+ *
21
+ * expect(headers.get('Set-Cookie')).toBe('sessionId=abc123; Max-Age=3600; Path=/; HttpOnly')
22
+ * ```
23
+ *
24
+ * @see {@link https://orpc.dev/docs/helpers/cookie | Cookie Helpers}
25
+ */
26
+ export declare function setCookie(headers: Headers | undefined, name: string, value: string, options?: SetCookieOptions): void;
27
+ export interface GetCookieOptions extends ParseOptions {
28
+ }
29
+ /**
30
+ * Gets a cookie value from request headers
31
+ *
32
+ * Returns `undefined` if the cookie is not found or headers are `undefined`.
33
+ *
34
+ * @example
35
+ * ```ts
36
+ * const headers = new Headers({ 'Cookie': 'sessionId=abc123; theme=dark' })
37
+ *
38
+ * const sessionId = getCookie(headers, 'sessionId')
39
+ *
40
+ * expect(sessionId).toEqual('abc123')
41
+ * ```
42
+ *
43
+ * @see {@link https://orpc.dev/docs/helpers/cookie | Cookie Helpers}
44
+ */
45
+ export declare function getCookie(headers: Headers | undefined, name: string, options?: GetCookieOptions): string | undefined;
46
+ /**
47
+ * Deletes a cookie by marking it expired.
48
+ *
49
+ * @see {@link https://orpc.dev/docs/helpers/cookie | Cookie Helpers}
50
+ */
51
+ export declare function deleteCookie(headers: Headers | undefined, name: string, options?: Omit<SetCookieOptions, 'maxAge'>): void;
@@ -0,0 +1,69 @@
1
+ import { parseCookie, stringifySetCookie } from 'cookie';
2
+ /**
3
+ * Sets a cookie in the response headers.
4
+ *
5
+ * Does nothing if `headers` is `undefined`.
6
+ *
7
+ * @example
8
+ * ```ts
9
+ * const headers = new Headers()
10
+ *
11
+ * setCookie(headers, 'sessionId', 'abc123', { httpOnly: true, maxAge: 3600 })
12
+ *
13
+ * expect(headers.get('Set-Cookie')).toBe('sessionId=abc123; Max-Age=3600; Path=/; HttpOnly')
14
+ * ```
15
+ *
16
+ * @see {@link https://orpc.dev/docs/helpers/cookie | Cookie Helpers}
17
+ */
18
+ export function setCookie(headers, name, value, options = {}) {
19
+ if (headers === undefined) {
20
+ return;
21
+ }
22
+ const cookieString = stringifySetCookie({
23
+ // Force path to '/' by default so the cookie is available across the
24
+ // entire app, not just under the directory of the request that set it
25
+ // (which is what browsers do per RFC 6265 §5.1.4 when Path is omitted).
26
+ path: '/',
27
+ ...options,
28
+ name, // prioritize
29
+ value, // prioritize
30
+ }, options);
31
+ headers.append('Set-Cookie', cookieString);
32
+ }
33
+ /**
34
+ * Gets a cookie value from request headers
35
+ *
36
+ * Returns `undefined` if the cookie is not found or headers are `undefined`.
37
+ *
38
+ * @example
39
+ * ```ts
40
+ * const headers = new Headers({ 'Cookie': 'sessionId=abc123; theme=dark' })
41
+ *
42
+ * const sessionId = getCookie(headers, 'sessionId')
43
+ *
44
+ * expect(sessionId).toEqual('abc123')
45
+ * ```
46
+ *
47
+ * @see {@link https://orpc.dev/docs/helpers/cookie | Cookie Helpers}
48
+ */
49
+ export function getCookie(headers, name, options = {}) {
50
+ if (headers === undefined) {
51
+ return undefined;
52
+ }
53
+ const cookieHeader = headers.get('cookie');
54
+ if (cookieHeader === null) {
55
+ return undefined;
56
+ }
57
+ return parseCookie(cookieHeader, options)[name];
58
+ }
59
+ /**
60
+ * Deletes a cookie by marking it expired.
61
+ *
62
+ * @see {@link https://orpc.dev/docs/helpers/cookie | Cookie Helpers}
63
+ */
64
+ export function deleteCookie(headers, name, options = {}) {
65
+ return setCookie(headers, name, '', {
66
+ ...options,
67
+ maxAge: 0, // prioritize
68
+ });
69
+ }
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Encrypts a string using AES-GCM with a secret key.
3
+ * The output is base64url encoded to be URL-safe.
4
+ *
5
+ * @example
6
+ * ```ts
7
+ * const encrypted = await encrypt("Hello, World!", "test-secret-key")
8
+ * const decrypted = await decrypt(encrypted, "test-secret-key")
9
+ * expect(decrypted).toBe("Hello, World!")
10
+ * ```
11
+ *
12
+ * @see {@link https://orpc.dev/docs/helpers/encryption | Encryption Helpers}
13
+ */
14
+ export declare function encrypt(value: string, secret: string): Promise<string>;
15
+ /**
16
+ * Decrypts a base64url encoded string using AES-GCM with a secret key.
17
+ * Returns the original string if decryption is successful, or undefined if it fails.
18
+ *
19
+ * @example
20
+ * ```ts
21
+ * const encrypted = await encrypt("Hello, World!", "test-secret-key")
22
+ * const decrypted = await decrypt(encrypted, "test-secret-key")
23
+ * expect(decrypted).toBe("Hello, World!")
24
+ * ```
25
+ *
26
+ * @see {@link https://orpc.dev/docs/helpers/encryption | Encryption Helpers}
27
+ */
28
+ export declare function decrypt(encrypted: string | undefined | null, secret: string): Promise<string | undefined>;