@beignet/core 0.0.1

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 (331) hide show
  1. package/CHANGELOG.md +5 -0
  2. package/README.md +288 -0
  3. package/dist/application/index.d.ts +260 -0
  4. package/dist/application/index.d.ts.map +1 -0
  5. package/dist/application/index.js +324 -0
  6. package/dist/application/index.js.map +1 -0
  7. package/dist/client/client.d.ts +241 -0
  8. package/dist/client/client.d.ts.map +1 -0
  9. package/dist/client/client.js +531 -0
  10. package/dist/client/client.js.map +1 -0
  11. package/dist/client/index.d.ts +10 -0
  12. package/dist/client/index.d.ts.map +1 -0
  13. package/dist/client/index.js +8 -0
  14. package/dist/client/index.js.map +1 -0
  15. package/dist/client/types.d.ts +139 -0
  16. package/dist/client/types.d.ts.map +1 -0
  17. package/dist/client/types.js +2 -0
  18. package/dist/client/types.js.map +1 -0
  19. package/dist/config/index.d.ts +122 -0
  20. package/dist/config/index.d.ts.map +1 -0
  21. package/dist/config/index.js +216 -0
  22. package/dist/config/index.js.map +1 -0
  23. package/dist/contracts/contract-builder.d.ts +121 -0
  24. package/dist/contracts/contract-builder.d.ts.map +1 -0
  25. package/dist/contracts/contract-builder.js +346 -0
  26. package/dist/contracts/contract-builder.js.map +1 -0
  27. package/dist/contracts/contract-group.d.ts +106 -0
  28. package/dist/contracts/contract-group.d.ts.map +1 -0
  29. package/dist/contracts/contract-group.js +240 -0
  30. package/dist/contracts/contract-group.js.map +1 -0
  31. package/dist/contracts/contract-like.d.ts +21 -0
  32. package/dist/contracts/contract-like.d.ts.map +1 -0
  33. package/dist/contracts/contract-like.js +9 -0
  34. package/dist/contracts/contract-like.js.map +1 -0
  35. package/dist/contracts/index.d.ts +15 -0
  36. package/dist/contracts/index.d.ts.map +1 -0
  37. package/dist/contracts/index.js +11 -0
  38. package/dist/contracts/index.js.map +1 -0
  39. package/dist/contracts/openapi-meta.d.ts +23 -0
  40. package/dist/contracts/openapi-meta.d.ts.map +1 -0
  41. package/dist/contracts/openapi-meta.js +2 -0
  42. package/dist/contracts/openapi-meta.js.map +1 -0
  43. package/dist/contracts/path-template.d.ts +17 -0
  44. package/dist/contracts/path-template.d.ts.map +1 -0
  45. package/dist/contracts/path-template.js +50 -0
  46. package/dist/contracts/path-template.js.map +1 -0
  47. package/dist/contracts/rate-limit.d.ts +50 -0
  48. package/dist/contracts/rate-limit.d.ts.map +1 -0
  49. package/dist/contracts/rate-limit.js +2 -0
  50. package/dist/contracts/rate-limit.js.map +1 -0
  51. package/dist/contracts/types.d.ts +97 -0
  52. package/dist/contracts/types.d.ts.map +1 -0
  53. package/dist/contracts/types.js +54 -0
  54. package/dist/contracts/types.js.map +1 -0
  55. package/dist/contracts/utils.d.ts +3 -0
  56. package/dist/contracts/utils.d.ts.map +1 -0
  57. package/dist/contracts/utils.js +44 -0
  58. package/dist/contracts/utils.js.map +1 -0
  59. package/dist/domain/entity.d.ts +87 -0
  60. package/dist/domain/entity.d.ts.map +1 -0
  61. package/dist/domain/entity.js +155 -0
  62. package/dist/domain/entity.js.map +1 -0
  63. package/dist/domain/events.d.ts +41 -0
  64. package/dist/domain/events.d.ts.map +1 -0
  65. package/dist/domain/events.js +21 -0
  66. package/dist/domain/events.js.map +1 -0
  67. package/dist/domain/index.d.ts +14 -0
  68. package/dist/domain/index.d.ts.map +1 -0
  69. package/dist/domain/index.js +14 -0
  70. package/dist/domain/index.js.map +1 -0
  71. package/dist/domain/value-object.d.ts +60 -0
  72. package/dist/domain/value-object.d.ts.map +1 -0
  73. package/dist/domain/value-object.js +87 -0
  74. package/dist/domain/value-object.js.map +1 -0
  75. package/dist/errors/catalog.d.ts +71 -0
  76. package/dist/errors/catalog.d.ts.map +1 -0
  77. package/dist/errors/catalog.js +71 -0
  78. package/dist/errors/catalog.js.map +1 -0
  79. package/dist/errors/http.d.ts +77 -0
  80. package/dist/errors/http.d.ts.map +1 -0
  81. package/dist/errors/http.js +74 -0
  82. package/dist/errors/http.js.map +1 -0
  83. package/dist/errors/index.d.ts +10 -0
  84. package/dist/errors/index.d.ts.map +1 -0
  85. package/dist/errors/index.js +14 -0
  86. package/dist/errors/index.js.map +1 -0
  87. package/dist/errors/response.d.ts +26 -0
  88. package/dist/errors/response.d.ts.map +1 -0
  89. package/dist/errors/response.js +34 -0
  90. package/dist/errors/response.js.map +1 -0
  91. package/dist/errors/validation.d.ts +18 -0
  92. package/dist/errors/validation.d.ts.map +1 -0
  93. package/dist/errors/validation.js +21 -0
  94. package/dist/errors/validation.js.map +1 -0
  95. package/dist/events/index.d.ts +58 -0
  96. package/dist/events/index.d.ts.map +1 -0
  97. package/dist/events/index.js +102 -0
  98. package/dist/events/index.js.map +1 -0
  99. package/dist/jobs/index.d.ts +56 -0
  100. package/dist/jobs/index.d.ts.map +1 -0
  101. package/dist/jobs/index.js +89 -0
  102. package/dist/jobs/index.js.map +1 -0
  103. package/dist/mail/index.d.ts +75 -0
  104. package/dist/mail/index.d.ts.map +1 -0
  105. package/dist/mail/index.js +84 -0
  106. package/dist/mail/index.js.map +1 -0
  107. package/dist/openapi/index.d.ts +207 -0
  108. package/dist/openapi/index.d.ts.map +1 -0
  109. package/dist/openapi/index.js +449 -0
  110. package/dist/openapi/index.js.map +1 -0
  111. package/dist/openapi/schema-introspector.d.ts +38 -0
  112. package/dist/openapi/schema-introspector.d.ts.map +1 -0
  113. package/dist/openapi/schema-introspector.js +67 -0
  114. package/dist/openapi/schema-introspector.js.map +1 -0
  115. package/dist/ports/audit.d.ts +58 -0
  116. package/dist/ports/audit.d.ts.map +1 -0
  117. package/dist/ports/audit.js +74 -0
  118. package/dist/ports/audit.js.map +1 -0
  119. package/dist/ports/auth.d.ts +23 -0
  120. package/dist/ports/auth.d.ts.map +1 -0
  121. package/dist/ports/auth.js +31 -0
  122. package/dist/ports/auth.js.map +1 -0
  123. package/dist/ports/builder.d.ts +61 -0
  124. package/dist/ports/builder.d.ts.map +1 -0
  125. package/dist/ports/builder.js +48 -0
  126. package/dist/ports/builder.js.map +1 -0
  127. package/dist/ports/cache.d.ts +15 -0
  128. package/dist/ports/cache.d.ts.map +1 -0
  129. package/dist/ports/cache.js +57 -0
  130. package/dist/ports/cache.js.map +1 -0
  131. package/dist/ports/clock.d.ts +10 -0
  132. package/dist/ports/clock.d.ts.map +1 -0
  133. package/dist/ports/clock.js +21 -0
  134. package/dist/ports/clock.js.map +1 -0
  135. package/dist/ports/events.d.ts +71 -0
  136. package/dist/ports/events.d.ts.map +1 -0
  137. package/dist/ports/events.js +2 -0
  138. package/dist/ports/events.js.map +1 -0
  139. package/dist/ports/id-generator.d.ts +12 -0
  140. package/dist/ports/id-generator.d.ts.map +1 -0
  141. package/dist/ports/id-generator.js +22 -0
  142. package/dist/ports/id-generator.js.map +1 -0
  143. package/dist/ports/index.d.ts +98 -0
  144. package/dist/ports/index.d.ts.map +1 -0
  145. package/dist/ports/index.js +67 -0
  146. package/dist/ports/index.js.map +1 -0
  147. package/dist/ports/logger.d.ts +22 -0
  148. package/dist/ports/logger.d.ts.map +1 -0
  149. package/dist/ports/logger.js +34 -0
  150. package/dist/ports/logger.js.map +1 -0
  151. package/dist/ports/mailer.d.ts +6 -0
  152. package/dist/ports/mailer.d.ts.map +1 -0
  153. package/dist/ports/mailer.js +2 -0
  154. package/dist/ports/mailer.js.map +1 -0
  155. package/dist/ports/policy.d.ts +53 -0
  156. package/dist/ports/policy.d.ts.map +1 -0
  157. package/dist/ports/policy.js +81 -0
  158. package/dist/ports/policy.js.map +1 -0
  159. package/dist/ports/rate-limit.d.ts +41 -0
  160. package/dist/ports/rate-limit.d.ts.map +1 -0
  161. package/dist/ports/rate-limit.js +37 -0
  162. package/dist/ports/rate-limit.js.map +1 -0
  163. package/dist/ports/redaction.d.ts +26 -0
  164. package/dist/ports/redaction.d.ts.map +1 -0
  165. package/dist/ports/redaction.js +126 -0
  166. package/dist/ports/redaction.js.map +1 -0
  167. package/dist/ports/schedules.d.ts +9 -0
  168. package/dist/ports/schedules.d.ts.map +1 -0
  169. package/dist/ports/schedules.js +2 -0
  170. package/dist/ports/schedules.js.map +1 -0
  171. package/dist/ports/storage.d.ts +47 -0
  172. package/dist/ports/storage.d.ts.map +1 -0
  173. package/dist/ports/storage.js +185 -0
  174. package/dist/ports/storage.js.map +1 -0
  175. package/dist/ports/testing.d.ts +73 -0
  176. package/dist/ports/testing.d.ts.map +1 -0
  177. package/dist/ports/testing.js +105 -0
  178. package/dist/ports/testing.js.map +1 -0
  179. package/dist/ports/unit-of-work.d.ts +56 -0
  180. package/dist/ports/unit-of-work.d.ts.map +1 -0
  181. package/dist/ports/unit-of-work.js +64 -0
  182. package/dist/ports/unit-of-work.js.map +1 -0
  183. package/dist/providers/index.d.ts +8 -0
  184. package/dist/providers/index.d.ts.map +1 -0
  185. package/dist/providers/index.js +8 -0
  186. package/dist/providers/index.js.map +1 -0
  187. package/dist/providers/instrumentation.d.ts +91 -0
  188. package/dist/providers/instrumentation.d.ts.map +1 -0
  189. package/dist/providers/instrumentation.js +93 -0
  190. package/dist/providers/instrumentation.js.map +1 -0
  191. package/dist/providers/provider.d.ts +146 -0
  192. package/dist/providers/provider.d.ts.map +1 -0
  193. package/dist/providers/provider.js +31 -0
  194. package/dist/providers/provider.js.map +1 -0
  195. package/dist/schedules/index.d.ts +105 -0
  196. package/dist/schedules/index.d.ts.map +1 -0
  197. package/dist/schedules/index.js +178 -0
  198. package/dist/schedules/index.js.map +1 -0
  199. package/dist/server/contract-like.d.ts +5 -0
  200. package/dist/server/contract-like.d.ts.map +1 -0
  201. package/dist/server/contract-like.js +5 -0
  202. package/dist/server/contract-like.js.map +1 -0
  203. package/dist/server/health.d.ts +41 -0
  204. package/dist/server/health.d.ts.map +1 -0
  205. package/dist/server/health.js +46 -0
  206. package/dist/server/health.js.map +1 -0
  207. package/dist/server/hooks/auth.d.ts +42 -0
  208. package/dist/server/hooks/auth.d.ts.map +1 -0
  209. package/dist/server/hooks/auth.js +61 -0
  210. package/dist/server/hooks/auth.js.map +1 -0
  211. package/dist/server/hooks/cors.d.ts +13 -0
  212. package/dist/server/hooks/cors.d.ts.map +1 -0
  213. package/dist/server/hooks/cors.js +70 -0
  214. package/dist/server/hooks/cors.js.map +1 -0
  215. package/dist/server/hooks/errors.d.ts +66 -0
  216. package/dist/server/hooks/errors.d.ts.map +1 -0
  217. package/dist/server/hooks/errors.js +83 -0
  218. package/dist/server/hooks/errors.js.map +1 -0
  219. package/dist/server/hooks/index.d.ts +12 -0
  220. package/dist/server/hooks/index.d.ts.map +1 -0
  221. package/dist/server/hooks/index.js +12 -0
  222. package/dist/server/hooks/index.js.map +1 -0
  223. package/dist/server/hooks/logging.d.ts +33 -0
  224. package/dist/server/hooks/logging.d.ts.map +1 -0
  225. package/dist/server/hooks/logging.js +90 -0
  226. package/dist/server/hooks/logging.js.map +1 -0
  227. package/dist/server/hooks/rate-limit.d.ts +29 -0
  228. package/dist/server/hooks/rate-limit.d.ts.map +1 -0
  229. package/dist/server/hooks/rate-limit.js +93 -0
  230. package/dist/server/hooks/rate-limit.js.map +1 -0
  231. package/dist/server/hooks/utils.d.ts +9 -0
  232. package/dist/server/hooks/utils.d.ts.map +1 -0
  233. package/dist/server/hooks/utils.js +16 -0
  234. package/dist/server/hooks/utils.js.map +1 -0
  235. package/dist/server/hooks.d.ts +2 -0
  236. package/dist/server/hooks.d.ts.map +1 -0
  237. package/dist/server/hooks.js +2 -0
  238. package/dist/server/hooks.js.map +1 -0
  239. package/dist/server/http.d.ts +124 -0
  240. package/dist/server/http.d.ts.map +1 -0
  241. package/dist/server/http.js +2 -0
  242. package/dist/server/http.js.map +1 -0
  243. package/dist/server/index.d.ts +19 -0
  244. package/dist/server/index.d.ts.map +1 -0
  245. package/dist/server/index.js +15 -0
  246. package/dist/server/index.js.map +1 -0
  247. package/dist/server/openapi.d.ts +32 -0
  248. package/dist/server/openapi.d.ts.map +1 -0
  249. package/dist/server/openapi.js +43 -0
  250. package/dist/server/openapi.js.map +1 -0
  251. package/dist/server/providers/index.d.ts +4 -0
  252. package/dist/server/providers/index.d.ts.map +1 -0
  253. package/dist/server/providers/index.js +4 -0
  254. package/dist/server/providers/index.js.map +1 -0
  255. package/dist/server/providers/loadProviderConfig.d.ts +7 -0
  256. package/dist/server/providers/loadProviderConfig.d.ts.map +1 -0
  257. package/dist/server/providers/loadProviderConfig.js +42 -0
  258. package/dist/server/providers/loadProviderConfig.js.map +1 -0
  259. package/dist/server/server.d.ts +86 -0
  260. package/dist/server/server.d.ts.map +1 -0
  261. package/dist/server/server.js +1031 -0
  262. package/dist/server/server.js.map +1 -0
  263. package/dist/server/types.d.ts +3 -0
  264. package/dist/server/types.d.ts.map +1 -0
  265. package/dist/server/types.js +3 -0
  266. package/dist/server/types.js.map +1 -0
  267. package/package.json +129 -0
  268. package/src/application/index.ts +747 -0
  269. package/src/client/client.ts +1105 -0
  270. package/src/client/index.ts +45 -0
  271. package/src/client/types.ts +305 -0
  272. package/src/config/index.ts +497 -0
  273. package/src/contracts/contract-builder.ts +583 -0
  274. package/src/contracts/contract-group.ts +502 -0
  275. package/src/contracts/contract-like.ts +29 -0
  276. package/src/contracts/index.ts +53 -0
  277. package/src/contracts/openapi-meta.ts +22 -0
  278. package/src/contracts/path-template.ts +91 -0
  279. package/src/contracts/rate-limit.ts +50 -0
  280. package/src/contracts/types.ts +207 -0
  281. package/src/contracts/utils.ts +56 -0
  282. package/src/domain/entity.ts +256 -0
  283. package/src/domain/events.ts +52 -0
  284. package/src/domain/index.ts +18 -0
  285. package/src/domain/value-object.ts +135 -0
  286. package/src/errors/catalog.ts +149 -0
  287. package/src/errors/http.ts +80 -0
  288. package/src/errors/index.ts +28 -0
  289. package/src/errors/response.ts +54 -0
  290. package/src/errors/validation.ts +35 -0
  291. package/src/events/index.ts +246 -0
  292. package/src/jobs/index.ts +211 -0
  293. package/src/mail/index.ts +177 -0
  294. package/src/openapi/index.ts +865 -0
  295. package/src/openapi/schema-introspector.ts +107 -0
  296. package/src/ports/audit.ts +176 -0
  297. package/src/ports/auth.ts +76 -0
  298. package/src/ports/builder.ts +97 -0
  299. package/src/ports/cache.ts +94 -0
  300. package/src/ports/clock.ts +34 -0
  301. package/src/ports/events.ts +100 -0
  302. package/src/ports/id-generator.ts +36 -0
  303. package/src/ports/index.ts +221 -0
  304. package/src/ports/logger.ts +67 -0
  305. package/src/ports/policy.ts +242 -0
  306. package/src/ports/rate-limit.ts +91 -0
  307. package/src/ports/redaction.ts +199 -0
  308. package/src/ports/storage.ts +282 -0
  309. package/src/ports/testing.ts +234 -0
  310. package/src/ports/unit-of-work.ts +134 -0
  311. package/src/providers/index.ts +40 -0
  312. package/src/providers/instrumentation.ts +248 -0
  313. package/src/providers/provider.ts +191 -0
  314. package/src/schedules/index.ts +442 -0
  315. package/src/server/contract-like.ts +8 -0
  316. package/src/server/health.ts +82 -0
  317. package/src/server/hooks/auth.ts +147 -0
  318. package/src/server/hooks/cors.ts +87 -0
  319. package/src/server/hooks/errors.ts +126 -0
  320. package/src/server/hooks/index.ts +43 -0
  321. package/src/server/hooks/logging.ts +121 -0
  322. package/src/server/hooks/rate-limit.ts +171 -0
  323. package/src/server/hooks/utils.ts +16 -0
  324. package/src/server/hooks.ts +1 -0
  325. package/src/server/http.ts +189 -0
  326. package/src/server/index.ts +35 -0
  327. package/src/server/openapi.ts +72 -0
  328. package/src/server/providers/index.ts +3 -0
  329. package/src/server/providers/loadProviderConfig.ts +72 -0
  330. package/src/server/server.ts +1521 -0
  331. package/src/server/types.ts +2 -0
@@ -0,0 +1,139 @@
1
+ import type { BodyHttpMethod, HttpContractConfig, InferHeaderSchemaInput, InferInput, InferOutput, StandardSchema, StandardSchemaV1 } from "../contracts";
2
+ import type { ErrorResponseBody } from "../errors";
3
+ /**
4
+ * Client configuration
5
+ */
6
+ export type ClientConfig<TProvidedHeaders extends string = never> = {
7
+ baseUrl?: string;
8
+ headers?: () => Promise<Record<string, string>> | Record<string, string>;
9
+ providedHeaders?: readonly TProvidedHeaders[];
10
+ fetch?: typeof fetch;
11
+ /** Enable client-side input validation for path, query, and body. Default: false. */
12
+ validate?: boolean;
13
+ };
14
+ type PathParamPrimitive = string | number | boolean;
15
+ type UnsupportedPathParamName<Name extends string> = Name extends "" ? true : Name extends `...${string}` ? true : Name extends `[${string}` ? true : Name extends `${string}.${string}` ? true : false;
16
+ type SegmentPathParam<Segment extends string> = Segment extends `:${infer Name}` ? UnsupportedPathParamName<Name> extends true ? never : Name : Segment extends `[${infer Name}]` ? UnsupportedPathParamName<Name> extends true ? never : Name : never;
17
+ type PathParamNames<TPath extends string> = string extends TPath ? never : TPath extends `${infer Segment}/${infer Rest}` ? SegmentPathParam<Segment> | PathParamNames<Rest> : SegmentPathParam<TPath>;
18
+ type InferPathParamsFromTemplate<TPath extends string> = [
19
+ PathParamNames<TPath>
20
+ ] extends [never] ? undefined : {
21
+ [K in PathParamNames<TPath>]: PathParamPrimitive;
22
+ };
23
+ /**
24
+ * Infer path params from contract
25
+ */
26
+ export type InferPathParams<TContract extends HttpContractConfig> = TContract["pathParams"] extends StandardSchemaV1 ? InferInput<TContract["pathParams"]> : InferPathParamsFromTemplate<TContract["path"]>;
27
+ /**
28
+ * Infer query params from contract
29
+ */
30
+ export type InferQuery<TContract extends HttpContractConfig> = TContract["query"] extends StandardSchemaV1 ? InferInput<TContract["query"]> : undefined;
31
+ export type InferHeaders<TContract extends HttpContractConfig> = InferHeaderSchemaInput<Exclude<TContract["headers"], undefined>> extends undefined ? undefined : InferHeaderSchemaInput<Exclude<TContract["headers"], undefined>>;
32
+ /**
33
+ * Infer body from contract
34
+ */
35
+ export type InferBody<TContract extends HttpContractConfig> = TContract["method"] extends BodyHttpMethod ? TContract["body"] extends StandardSchemaV1 ? InferInput<TContract["body"]> : undefined : undefined;
36
+ /**
37
+ * Any 2xx HTTP success status code (200–299).
38
+ */
39
+ type Digit = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9;
40
+ type ToNumber<S extends string> = S extends `${infer N extends number}` ? N : never;
41
+ type Any2xxCode = ToNumber<`2${Digit}${Digit}`>;
42
+ type NumericKey<K> = K extends number ? K : K extends `${infer N extends number}` ? N : never;
43
+ /**
44
+ * Find all 2xx status keys from a responses record
45
+ */
46
+ type Any2xxKey<T extends object> = {
47
+ [K in keyof T]: NumericKey<K> extends Any2xxCode ? K : never;
48
+ }[keyof T];
49
+ /**
50
+ * Find all non-2xx status keys from a responses record
51
+ */
52
+ type AnyErrorKey<T extends object> = {
53
+ [K in keyof T]: NumericKey<K> extends Any2xxCode ? never : K;
54
+ }[keyof T];
55
+ type ResponseForStatus<TResponses extends object, TStatus extends number> = TStatus extends keyof TResponses ? TResponses[TStatus] : `${TStatus}` extends keyof TResponses ? TResponses[`${TStatus}`] : never;
56
+ /**
57
+ * Infer a single response type from a schema or null
58
+ */
59
+ type InferResponseType<T> = T extends null ? undefined : T extends StandardSchemaV1 ? InferOutput<T> : unknown;
60
+ /**
61
+ * Infer success response from contract (union of all 2xx response types)
62
+ */
63
+ export type InferSuccessResponse<TContract extends HttpContractConfig> = TContract["responses"] extends Partial<Record<number, StandardSchema | null>> ? Any2xxKey<TContract["responses"]> extends infer K ? K extends keyof TContract["responses"] ? InferResponseType<TContract["responses"][K]> : unknown : unknown : unknown;
64
+ /**
65
+ * Infer error response from contract (union of all non-2xx response types)
66
+ */
67
+ export type InferErrorResponse<TContract extends HttpContractConfig> = TContract["responses"] extends Partial<Record<number, StandardSchema | null>> ? AnyErrorKey<TContract["responses"]> extends infer K ? K extends keyof TContract["responses"] ? InferResponseType<TContract["responses"][K]> : unknown : unknown : unknown;
68
+ /**
69
+ * Infer declared non-2xx status codes from a contract.
70
+ */
71
+ export type InferEndpointErrorStatus<TContract extends HttpContractConfig> = TContract["responses"] extends Partial<Record<number, StandardSchema | null>> ? NumericKey<AnyErrorKey<TContract["responses"]>> : never;
72
+ /**
73
+ * Infer a declared non-2xx response body for a specific status.
74
+ */
75
+ export type InferErrorResponseByStatus<TContract extends HttpContractConfig, TStatus extends number> = TContract["responses"] extends Partial<Record<number, StandardSchema | null>> ? InferResponseType<ResponseForStatus<TContract["responses"], TStatus>> : unknown;
76
+ /**
77
+ * Error bodies a Beignet client can receive for a specific status.
78
+ */
79
+ export type InferEndpointErrorResponseByStatus<TContract extends HttpContractConfig, TStatus extends number> = InferErrorResponseByStatus<TContract, TStatus> | ErrorResponseBody | string | undefined;
80
+ /**
81
+ * Error bodies a Beignet client can receive for an endpoint.
82
+ *
83
+ * Declared route-owned errors come from the contract. Framework-owned errors
84
+ * use the standard envelope. Transport escape hatches may return text or no body.
85
+ */
86
+ export type InferEndpointErrorResponse<TContract extends HttpContractConfig> = InferErrorResponse<TContract> | ErrorResponseBody | string | undefined;
87
+ export type EndpointSuccessResult<TContract extends HttpContractConfig> = {
88
+ ok: true;
89
+ status: number;
90
+ data: InferSuccessResponse<TContract>;
91
+ response: Response;
92
+ };
93
+ export type EndpointErrorResult<TError> = {
94
+ ok: false;
95
+ status?: number;
96
+ error: TError;
97
+ response?: Response;
98
+ };
99
+ export type EndpointResult<TContract extends HttpContractConfig, TError> = EndpointSuccessResult<TContract> | EndpointErrorResult<TError>;
100
+ /**
101
+ * Call arguments for an endpoint
102
+ */
103
+ type RequestArg<Name extends "path" | "query" | "body", Value> = Value extends undefined ? {
104
+ [K in Name]?: undefined;
105
+ } : undefined extends Value ? {
106
+ [K in Name]?: Value;
107
+ } : {
108
+ [K in Name]: Value;
109
+ };
110
+ type PathArgs<TContract extends HttpContractConfig> = RequestArg<"path", InferPathParams<TContract>>;
111
+ type QueryArgs<TContract extends HttpContractConfig> = RequestArg<"query", InferQuery<TContract>>;
112
+ type BodyArgs<TContract extends HttpContractConfig> = RequestArg<"body", InferBody<TContract>>;
113
+ type ProvidedHeaderKeys<THeaders, TProvidedHeaders extends string> = Extract<keyof THeaders, TProvidedHeaders>;
114
+ type ApplyProvidedHeaders<THeaders, TProvidedHeaders extends string> = Omit<THeaders, ProvidedHeaderKeys<THeaders, TProvidedHeaders>> & Partial<Pick<THeaders, ProvidedHeaderKeys<THeaders, TProvidedHeaders>>>;
115
+ type HeaderInput<TContract extends HttpContractConfig, TProvidedHeaders extends string> = InferHeaders<TContract> extends undefined ? Record<string, string> : ApplyProvidedHeaders<InferHeaders<TContract>, TProvidedHeaders>;
116
+ type HeadersArgs<TContract extends HttpContractConfig, TProvidedHeaders extends string> = InferHeaders<TContract> extends undefined ? {
117
+ headers?: Record<string, string>;
118
+ } : HasRequiredKeys<HeaderInput<TContract, TProvidedHeaders>> extends never ? {
119
+ headers?: HeaderInput<TContract, TProvidedHeaders>;
120
+ } : {
121
+ headers: HeaderInput<TContract, TProvidedHeaders>;
122
+ };
123
+ export type EndpointCallArgs<TContract extends HttpContractConfig, TProvidedHeaders extends string = never> = PathArgs<TContract> & QueryArgs<TContract> & BodyArgs<TContract> & {
124
+ /**
125
+ * Escape hatch for non-JSON request bodies such as FormData, Blob,
126
+ * ArrayBuffer, ReadableStream, or pre-serialized text.
127
+ *
128
+ * Use `body` for contract-validated JSON requests. `rawBody` is sent as-is
129
+ * and is not validated or JSON-serialized.
130
+ */
131
+ rawBody?: TContract["method"] extends BodyHttpMethod ? BodyInit : never;
132
+ signal?: AbortSignal;
133
+ } & HeadersArgs<TContract, TProvidedHeaders>;
134
+ type HasRequiredKeys<T> = {
135
+ [K in keyof T]-?: Record<string, never> extends Pick<T, K> ? never : K;
136
+ }[keyof T];
137
+ export type CallArgs<TContract extends HttpContractConfig, TProvidedHeaders extends string = never> = HasRequiredKeys<EndpointCallArgs<TContract, TProvidedHeaders>> extends never ? [args?: EndpointCallArgs<TContract, TProvidedHeaders>] : [args: EndpointCallArgs<TContract, TProvidedHeaders>];
138
+ export {};
139
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/client/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/client/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,122 @@
1
+ /**
2
+ * @beignet/core/config
3
+ *
4
+ * Environment-first configuration layer using Standard Schema (Zod, Valibot,
5
+ * ArkType, etc.) for Beignet applications and providers.
6
+ */
7
+ import type { StandardSchemaV1 } from "@standard-schema/spec";
8
+ export type StandardSchema = StandardSchemaV1<unknown, unknown>;
9
+ export type RuntimeEnv = Record<string, string | undefined>;
10
+ export type EnvSchemaShape = Record<string, StandardSchema>;
11
+ type EmptyEnvSchemaShape = Record<keyof never, never>;
12
+ type NoInferType<T> = [T][T extends unknown ? 0 : never];
13
+ export type InferOutput<T extends StandardSchemaV1> = StandardSchemaV1.InferOutput<T>;
14
+ export type InferEnvShape<Shape extends EnvSchemaShape> = {
15
+ [Key in keyof Shape]: InferOutput<Shape[Key]>;
16
+ };
17
+ export type ClientEnvSchemaShape<ClientPrefix extends string> = ClientPrefix extends "" ? EnvSchemaShape : Record<`${ClientPrefix}${string}`, StandardSchema>;
18
+ type ValidateClientEnvShape<ClientPrefix extends string, Client extends EnvSchemaShape> = ClientPrefix extends "" ? Client : {
19
+ [Key in keyof Client]: Key extends `${ClientPrefix}${string}` ? Client[Key] : never;
20
+ };
21
+ export type EnvValidationIssue = StandardSchemaV1.Issue;
22
+ export declare class ConfigValidationError extends Error {
23
+ readonly issues: readonly EnvValidationIssue[];
24
+ constructor(issues: readonly EnvValidationIssue[], message?: string);
25
+ }
26
+ export interface ReadEnvOptions {
27
+ env?: RuntimeEnv;
28
+ prefix?: string;
29
+ emptyStringAsUndefined?: boolean;
30
+ }
31
+ export interface DefineEnvOptions<Schema extends StandardSchemaV1> {
32
+ /**
33
+ * Standard Schema for validating the full environment object.
34
+ */
35
+ schema: Schema;
36
+ /**
37
+ * Optional prefix to filter env vars. Matching keys are stripped before
38
+ * validation, so `APP_DATABASE_URL` becomes `DATABASE_URL`.
39
+ */
40
+ prefix?: string;
41
+ /**
42
+ * Runtime environment object. Defaults to `process.env` when available.
43
+ */
44
+ runtimeEnv?: RuntimeEnv;
45
+ /**
46
+ * Treat empty strings as missing values before validation.
47
+ */
48
+ emptyStringAsUndefined?: boolean;
49
+ /**
50
+ * Skip validation and return the raw env object. This is intended for build
51
+ * phases where real secrets are unavailable.
52
+ */
53
+ skipValidation?: boolean;
54
+ /**
55
+ * Called when validation fails. Throw from this hook to customize the error.
56
+ */
57
+ onValidationError?: (issues: readonly EnvValidationIssue[]) => never;
58
+ }
59
+ export interface EnvInstance<Out> {
60
+ load(options?: {
61
+ env?: RuntimeEnv;
62
+ }): Out;
63
+ }
64
+ export interface CreateEnvOptions<Server extends EnvSchemaShape, ClientPrefix extends string, Client extends EnvSchemaShape> {
65
+ /**
66
+ * Server-only environment variables. These throw if accessed from a client
67
+ * runtime through the returned env object.
68
+ */
69
+ server?: Server;
70
+ /**
71
+ * Client-safe environment variables. Keys must use `clientPrefix` when a
72
+ * prefix is provided.
73
+ */
74
+ client?: Client & ValidateClientEnvShape<NoInferType<ClientPrefix>, Client>;
75
+ /**
76
+ * Prefix required for client variables, e.g. `NEXT_PUBLIC_`.
77
+ */
78
+ clientPrefix?: ClientPrefix;
79
+ /**
80
+ * Runtime environment object. Defaults to `process.env` when available.
81
+ */
82
+ runtimeEnv?: RuntimeEnv;
83
+ /**
84
+ * Strict runtime environment object. Every declared key must be present on the
85
+ * object, even if the value is `undefined`. This catches framework bundling
86
+ * mistakes where an env var was not explicitly accessed.
87
+ */
88
+ runtimeEnvStrict?: RuntimeEnv;
89
+ /**
90
+ * Treat empty strings as missing values before validation.
91
+ *
92
+ * Defaults to `true` for `createEnv` because it keeps defaults ergonomic in
93
+ * framework starters.
94
+ */
95
+ emptyStringAsUndefined?: boolean;
96
+ /**
97
+ * Skip validation and return raw values. Use sparingly for build phases where
98
+ * deployment secrets are unavailable.
99
+ */
100
+ skipValidation?: boolean;
101
+ /**
102
+ * Override server detection. Defaults to checking for `window` on globalThis.
103
+ */
104
+ isServer?: boolean;
105
+ /**
106
+ * Called when validation fails. Throw from this hook to customize the error.
107
+ */
108
+ onValidationError?: (issues: readonly EnvValidationIssue[]) => never;
109
+ /**
110
+ * Called when a server-only variable is read from a client runtime.
111
+ */
112
+ onInvalidAccess?: (key: string) => never;
113
+ }
114
+ export type CreateEnvResult<Server extends EnvSchemaShape, Client extends EnvSchemaShape> = Readonly<InferEnvShape<Server> & InferEnvShape<Client>>;
115
+ export declare function formatStandardSchemaIssues(issues: readonly StandardSchemaV1.Issue[]): string;
116
+ export declare function readEnv({ env, prefix, emptyStringAsUndefined, }?: ReadEnvOptions): Record<string, string | undefined>;
117
+ export declare function parseStandardSchemaSync<Schema extends StandardSchemaV1>(schema: Schema, input: unknown): InferOutput<Schema>;
118
+ export declare function parseStandardSchemaAsync<Schema extends StandardSchemaV1>(schema: Schema, input: unknown): Promise<InferOutput<Schema>>;
119
+ export declare function defineEnv<Schema extends StandardSchemaV1>(options: DefineEnvOptions<Schema>): EnvInstance<InferOutput<Schema>>;
120
+ export declare function createEnv<const ClientPrefix extends string = "", Server extends EnvSchemaShape = EmptyEnvSchemaShape, Client extends EnvSchemaShape = EmptyEnvSchemaShape>(options: CreateEnvOptions<Server, ClientPrefix, Client>): CreateEnvResult<Server, Client>;
121
+ export {};
122
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,216 @@
1
+ /**
2
+ * @beignet/core/config
3
+ *
4
+ * Environment-first configuration layer using Standard Schema (Zod, Valibot,
5
+ * ArkType, etc.) for Beignet applications and providers.
6
+ */
7
+ export class ConfigValidationError extends Error {
8
+ issues;
9
+ constructor(issues, message) {
10
+ super(message ?? formatStandardSchemaIssues(issues));
11
+ this.name = "ConfigValidationError";
12
+ this.issues = issues;
13
+ }
14
+ }
15
+ function defaultRuntimeEnv() {
16
+ return typeof process !== "undefined" && process.env ? process.env : {};
17
+ }
18
+ function isPromiseLike(value) {
19
+ return (value !== null &&
20
+ (typeof value === "object" || typeof value === "function") &&
21
+ "then" in value &&
22
+ typeof value.then === "function");
23
+ }
24
+ function normalizeEnvValue(value, emptyStringAsUndefined) {
25
+ if (emptyStringAsUndefined && value === "")
26
+ return undefined;
27
+ return value;
28
+ }
29
+ function issuePath(issue) {
30
+ if (!issue.path?.length)
31
+ return undefined;
32
+ return issue.path
33
+ .map((segment) => {
34
+ if (segment && typeof segment === "object" && "key" in segment) {
35
+ return String(segment.key);
36
+ }
37
+ if (typeof segment === "string" ||
38
+ typeof segment === "number" ||
39
+ typeof segment === "symbol") {
40
+ return String(segment);
41
+ }
42
+ return undefined;
43
+ })
44
+ .filter((segment) => Boolean(segment))
45
+ .join(".");
46
+ }
47
+ function prependIssuePath(key, issue) {
48
+ return {
49
+ ...issue,
50
+ path: [{ key }, ...(issue.path ?? [])],
51
+ };
52
+ }
53
+ export function formatStandardSchemaIssues(issues) {
54
+ return issues
55
+ .map((issue) => {
56
+ const path = issuePath(issue);
57
+ return path ? `${path}: ${issue.message}` : issue.message;
58
+ })
59
+ .join("; ");
60
+ }
61
+ export function readEnv({ env = defaultRuntimeEnv(), prefix, emptyStringAsUndefined = false, } = {}) {
62
+ const raw = {};
63
+ for (const [key, value] of Object.entries(env)) {
64
+ if (value == null)
65
+ continue;
66
+ if (prefix && prefix.length > 0) {
67
+ if (!key.startsWith(prefix))
68
+ continue;
69
+ raw[key.slice(prefix.length)] = normalizeEnvValue(value, emptyStringAsUndefined);
70
+ continue;
71
+ }
72
+ raw[key] = normalizeEnvValue(value, emptyStringAsUndefined);
73
+ }
74
+ return raw;
75
+ }
76
+ function validationResultValue(result) {
77
+ if (result.issues?.length) {
78
+ throw new ConfigValidationError(result.issues);
79
+ }
80
+ if ("value" in result) {
81
+ return result.value;
82
+ }
83
+ throw new Error("Invalid Standard Schema result: missing value");
84
+ }
85
+ export function parseStandardSchemaSync(schema, input) {
86
+ const validate = schema?.["~standard"]?.validate;
87
+ if (typeof validate !== "function") {
88
+ throw new Error("Invalid Standard Schema: missing ~standard.validate()");
89
+ }
90
+ const result = validate(input);
91
+ if (isPromiseLike(result)) {
92
+ throw new Error("[Beignet env] Schema uses async validation, which is not supported by load().");
93
+ }
94
+ return validationResultValue(result);
95
+ }
96
+ export async function parseStandardSchemaAsync(schema, input) {
97
+ const validate = schema?.["~standard"]?.validate;
98
+ if (typeof validate !== "function") {
99
+ throw new Error("Invalid Standard Schema: missing ~standard.validate()");
100
+ }
101
+ return validationResultValue(await validate(input));
102
+ }
103
+ function wrapEnvError(err, prefix) {
104
+ if (err instanceof ConfigValidationError) {
105
+ return new Error(`[Beignet env] Invalid environment${prefix ? ` for prefix "${prefix}"` : ""}: ${err.message}`);
106
+ }
107
+ if (err instanceof Error) {
108
+ return new Error(`[Beignet env] Invalid environment${prefix ? ` for prefix "${prefix}"` : ""}: ${err.message}`);
109
+ }
110
+ return new Error(`[Beignet env] Invalid environment${prefix ? ` for prefix "${prefix}"` : ""}: ${String(err)}`);
111
+ }
112
+ export function defineEnv(options) {
113
+ const { schema, prefix, runtimeEnv, emptyStringAsUndefined = false, skipValidation = false, onValidationError, } = options;
114
+ function load({ env = runtimeEnv ?? defaultRuntimeEnv(), } = {}) {
115
+ const raw = readEnv({ env, prefix, emptyStringAsUndefined });
116
+ if (skipValidation) {
117
+ return raw;
118
+ }
119
+ try {
120
+ return parseStandardSchemaSync(schema, raw);
121
+ }
122
+ catch (err) {
123
+ if (err instanceof ConfigValidationError) {
124
+ onValidationError?.(err.issues);
125
+ }
126
+ throw wrapEnvError(err, prefix);
127
+ }
128
+ }
129
+ return { load };
130
+ }
131
+ function validateEnvShape(shape, runtimeEnv, emptyStringAsUndefined) {
132
+ const output = {};
133
+ const issues = [];
134
+ for (const [key, schema] of Object.entries(shape)) {
135
+ const value = normalizeEnvValue(runtimeEnv[key], emptyStringAsUndefined);
136
+ try {
137
+ output[key] = parseStandardSchemaSync(schema, value);
138
+ }
139
+ catch (error) {
140
+ if (error instanceof ConfigValidationError) {
141
+ issues.push(...error.issues.map((issue) => prependIssuePath(key, issue)));
142
+ continue;
143
+ }
144
+ throw error;
145
+ }
146
+ }
147
+ if (issues.length) {
148
+ throw new ConfigValidationError(issues);
149
+ }
150
+ return output;
151
+ }
152
+ function validateClientPrefix(client, clientPrefix) {
153
+ if (!clientPrefix)
154
+ return;
155
+ for (const key of Object.keys(client)) {
156
+ if (!key.startsWith(clientPrefix)) {
157
+ throw new Error(`[Beignet env] Client environment variable "${key}" must start with "${clientPrefix}".`);
158
+ }
159
+ }
160
+ }
161
+ function validateRuntimeEnvStrict(runtimeEnv, keys) {
162
+ const missing = keys.filter((key) => !Object.hasOwn(runtimeEnv, key));
163
+ if (missing.length === 0)
164
+ return;
165
+ throw new Error(`[Beignet env] runtimeEnvStrict is missing declared keys: ${missing.join(", ")}`);
166
+ }
167
+ export function createEnv(options) {
168
+ const server = (options.server ?? {});
169
+ const client = (options.client ?? {});
170
+ const runtimeEnv = options.runtimeEnvStrict ?? options.runtimeEnv ?? defaultRuntimeEnv();
171
+ const emptyStringAsUndefined = options.emptyStringAsUndefined ?? true;
172
+ const isServer = options.isServer ?? !("window" in globalThis);
173
+ if (options.runtimeEnv && options.runtimeEnvStrict) {
174
+ throw new Error("[Beignet env] Specify runtimeEnv or runtimeEnvStrict, not both.");
175
+ }
176
+ validateClientPrefix(client, options.clientPrefix);
177
+ const declaredKeys = [...Object.keys(server), ...Object.keys(client)];
178
+ const validationShape = isServer ? { ...server, ...client } : client;
179
+ const validationKeys = isServer ? declaredKeys : Object.keys(client);
180
+ if (options.runtimeEnvStrict) {
181
+ validateRuntimeEnvStrict(runtimeEnv, validationKeys);
182
+ }
183
+ let parsed;
184
+ if (options.skipValidation) {
185
+ parsed = Object.fromEntries(validationKeys.map((key) => [
186
+ key,
187
+ normalizeEnvValue(runtimeEnv[key], emptyStringAsUndefined),
188
+ ]));
189
+ }
190
+ else {
191
+ try {
192
+ parsed = validateEnvShape(validationShape, runtimeEnv, emptyStringAsUndefined);
193
+ }
194
+ catch (error) {
195
+ if (error instanceof ConfigValidationError) {
196
+ options.onValidationError?.(error.issues);
197
+ }
198
+ throw wrapEnvError(error);
199
+ }
200
+ }
201
+ const serverKeys = new Set(Object.keys(server));
202
+ const clientKeys = new Set(Object.keys(client));
203
+ return new Proxy(parsed, {
204
+ get(target, property, receiver) {
205
+ if (typeof property === "string" &&
206
+ !isServer &&
207
+ serverKeys.has(property) &&
208
+ !clientKeys.has(property)) {
209
+ options.onInvalidAccess?.(property);
210
+ throw new Error(`[Beignet env] Attempted to access server-only environment variable "${property}" from a client runtime.`);
211
+ }
212
+ return Reflect.get(target, property, receiver);
213
+ },
214
+ });
215
+ }
216
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,121 @@
1
+ import type { StandardSchemaV1 } from "@standard-schema/spec";
2
+ import type { OpenAPIOperationMeta } from "./openapi-meta";
3
+ import type { BodyHttpMethod, ContractErrorResponses, ContractHeaderSchemas, ContractMeta, ContractResponses, HttpContractConfig, HttpMethod, ResponsesFromErrorDefinitions, StandardSchema } from "./types";
4
+ /**
5
+ * Contract builder for constructing HTTP contracts in a fluent API style
6
+ * Schemas are accessible via the .schema property for introspection
7
+ */
8
+ export declare class ContractBuilder<TMethod extends HttpMethod, TPathParams extends StandardSchema | null, TQuery extends StandardSchema | null, TBody extends StandardSchema | null, THeaders extends ContractHeaderSchemas, TResponses extends ContractResponses, TMeta extends ContractMeta, TPath extends string = string> {
9
+ readonly kind: "http";
10
+ readonly name: string;
11
+ readonly namespace?: string;
12
+ readonly localName: string;
13
+ readonly method: TMethod;
14
+ private readonly _path;
15
+ private readonly _pathParams;
16
+ private readonly _query;
17
+ private readonly _body;
18
+ private readonly _headers;
19
+ private readonly _responses;
20
+ private readonly _meta;
21
+ constructor(config: HttpContractConfig<TMethod, TPathParams, TQuery, TBody, TResponses, TMeta, TPath, THeaders>);
22
+ /**
23
+ * Access schemas for introspection
24
+ */
25
+ get schema(): {
26
+ pathParams: TPathParams;
27
+ query: TQuery;
28
+ headers: THeaders;
29
+ body: TBody;
30
+ responses: TResponses;
31
+ };
32
+ /**
33
+ * Get response schemas for introspection
34
+ */
35
+ get responseSchemas(): TResponses;
36
+ /**
37
+ * Get the URL path template
38
+ */
39
+ get pathTemplate(): TPath;
40
+ /**
41
+ * Get the URL path (alias for pathTemplate)
42
+ */
43
+ get path(): TPath;
44
+ /**
45
+ * Get contract metadata
46
+ */
47
+ get metadata(): TMeta;
48
+ /**
49
+ * Get the contract as an HttpContractConfig object
50
+ * Use this when passing to adapters that expect the plain config type
51
+ */
52
+ get config(): HttpContractConfig<TMethod, TPathParams, TQuery, TBody, TResponses, TMeta, TPath, THeaders>;
53
+ /**
54
+ * Set path parameters schema (chainable builder method)
55
+ */
56
+ pathParams<TNewPathParams extends StandardSchemaV1>(schema: TNewPathParams): ContractBuilder<TMethod, TNewPathParams, TQuery, TBody, THeaders, TResponses, TMeta, TPath>;
57
+ /**
58
+ * Set query parameters schema (chainable builder method)
59
+ */
60
+ query<TNewQuery extends StandardSchemaV1>(schema: TNewQuery): ContractBuilder<TMethod, TPathParams, TNewQuery, TBody, THeaders, TResponses, TMeta, TPath>;
61
+ /**
62
+ * Set request body schema (chainable builder method)
63
+ * Only available on POST, PUT, and PATCH contracts.
64
+ */
65
+ body<TNewBody extends StandardSchemaV1>(this: ContractBuilder<BodyHttpMethod, StandardSchema | null, StandardSchema | null, StandardSchema | null, ContractHeaderSchemas, ContractResponses, ContractMeta, TPath>, schema: TNewBody): ContractBuilder<TMethod, TPathParams, TQuery, TNewBody, THeaders, TResponses, TMeta, TPath>;
66
+ /**
67
+ * Add request header schema (chainable).
68
+ *
69
+ * Multiple schemas are evaluated in declaration order and their parsed
70
+ * outputs are merged. This keeps group-level headers library-agnostic.
71
+ */
72
+ headers<TNewHeaders extends StandardSchemaV1>(schema: TNewHeaders): ContractBuilder<TMethod, TPathParams, TQuery, TBody, THeaders extends readonly StandardSchema[] ? readonly [...THeaders, TNewHeaders] : THeaders extends StandardSchema ? readonly [THeaders, TNewHeaders] : readonly [TNewHeaders], TResponses, TMeta, TPath>;
73
+ /**
74
+ * Add or replace response schemas by status code (chainable).
75
+ * Use `null` for void/empty responses such as 204 No Content.
76
+ */
77
+ responses<TNewResponses extends ContractResponses>(responseSchemas: TNewResponses): ContractBuilder<TMethod, TPathParams, TQuery, TBody, THeaders, Omit<TResponses, keyof TNewResponses> & TNewResponses, TMeta, TPath>;
78
+ /**
79
+ * Declare route-owned application errors from an error catalog.
80
+ *
81
+ * Catalog errors use Beignet's standard error response envelope. Use
82
+ * `.responses()` when a route needs a custom error response body.
83
+ */
84
+ errors<TErrorDefs extends ContractErrorResponses>(errorDefs: TErrorDefs): ContractBuilder<TMethod, TPathParams, TQuery, TBody, THeaders, Omit<TResponses, keyof ResponsesFromErrorDefinitions<TErrorDefs>> & ResponsesFromErrorDefinitions<TErrorDefs>, Omit<TMeta, "errors"> & {
85
+ errors: TErrorDefs;
86
+ }, TPath>;
87
+ /**
88
+ * Set or merge contract metadata (chainable builder method)
89
+ */
90
+ meta<TNewMeta extends ContractMeta>(newMeta: TNewMeta): ContractBuilder<TMethod, TPathParams, TQuery, TBody, THeaders, TResponses, Omit<TMeta, keyof TNewMeta> & TNewMeta, TPath>;
91
+ /**
92
+ * Set or merge OpenAPI metadata for this operation (chainable)
93
+ */
94
+ openapi(patch: Partial<OpenAPIOperationMeta>): ContractBuilder<TMethod, TPathParams, TQuery, TBody, THeaders, TResponses, TMeta, TPath>;
95
+ }
96
+ /**
97
+ * Options for creating a contract with the factory function
98
+ */
99
+ export type CreateContractOptions<TMethod extends HttpMethod = HttpMethod, TPath extends string = string> = {
100
+ /** HTTP method (GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS) */
101
+ method: TMethod;
102
+ /** URL path template (e.g., "/api/users/:id") */
103
+ path: TPath;
104
+ /** Optional contract name (auto-generated from method + path if not provided) */
105
+ name?: string;
106
+ };
107
+ /**
108
+ * Create a new HTTP contract with the builder pattern.
109
+ *
110
+ * @example
111
+ * ```ts
112
+ * const getTodo = createContract({
113
+ * method: "GET",
114
+ * path: "/api/todos/:id",
115
+ * })
116
+ * .pathParams(z.object({ id: z.string() }))
117
+ * .responses({ 200: TodoSchema });
118
+ * ```
119
+ */
120
+ export declare function createContract<TMethod extends HttpMethod, const TPath extends string>(options: CreateContractOptions<TMethod, TPath>): ContractBuilder<TMethod, null, null, null, null, Record<never, never>, ContractMeta, TPath>;
121
+ //# sourceMappingURL=contract-builder.d.ts.map