@beignet/core 0.0.2 → 0.0.4

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 (360) hide show
  1. package/CHANGELOG.md +173 -0
  2. package/README.md +821 -30
  3. package/dist/application/index.d.ts +28 -2
  4. package/dist/application/index.d.ts.map +1 -1
  5. package/dist/application/index.js +140 -12
  6. package/dist/application/index.js.map +1 -1
  7. package/dist/client/client.d.ts +2 -2
  8. package/dist/client/client.d.ts.map +1 -1
  9. package/dist/client/client.js +136 -48
  10. package/dist/client/client.js.map +1 -1
  11. package/dist/client/error-messages.d.ts +14 -0
  12. package/dist/client/error-messages.d.ts.map +1 -0
  13. package/dist/client/error-messages.js +23 -0
  14. package/dist/client/error-messages.js.map +1 -0
  15. package/dist/client/index.d.ts +8 -4
  16. package/dist/client/index.d.ts.map +1 -1
  17. package/dist/client/index.js +6 -2
  18. package/dist/client/index.js.map +1 -1
  19. package/dist/client/types.d.ts +35 -5
  20. package/dist/client/types.d.ts.map +1 -1
  21. package/dist/client-only.d.ts +8 -0
  22. package/dist/client-only.d.ts.map +1 -0
  23. package/dist/client-only.js +8 -0
  24. package/dist/client-only.js.map +1 -0
  25. package/dist/config/index.d.ts +5 -5
  26. package/dist/config/index.d.ts.map +1 -1
  27. package/dist/config/index.js +2 -2
  28. package/dist/config/index.js.map +1 -1
  29. package/dist/contracts/catalog-errors.d.ts +27 -0
  30. package/dist/contracts/catalog-errors.d.ts.map +1 -0
  31. package/dist/contracts/catalog-errors.js +69 -0
  32. package/dist/contracts/catalog-errors.js.map +1 -0
  33. package/dist/contracts/contract-builder.d.ts +15 -12
  34. package/dist/contracts/contract-builder.d.ts.map +1 -1
  35. package/dist/contracts/contract-builder.js +15 -41
  36. package/dist/contracts/contract-builder.js.map +1 -1
  37. package/dist/contracts/contract-group.d.ts +11 -8
  38. package/dist/contracts/contract-group.d.ts.map +1 -1
  39. package/dist/contracts/contract-group.js +13 -40
  40. package/dist/contracts/contract-group.js.map +1 -1
  41. package/dist/contracts/contract-like.d.ts +1 -1
  42. package/dist/contracts/contract-like.d.ts.map +1 -1
  43. package/dist/contracts/index.d.ts +13 -9
  44. package/dist/contracts/index.d.ts.map +1 -1
  45. package/dist/contracts/index.js +9 -5
  46. package/dist/contracts/index.js.map +1 -1
  47. package/dist/contracts/openapi-meta.d.ts +48 -0
  48. package/dist/contracts/openapi-meta.d.ts.map +1 -1
  49. package/dist/contracts/openapi-meta.js +3 -0
  50. package/dist/contracts/openapi-meta.js.map +1 -1
  51. package/dist/contracts/path-template.d.ts +1 -1
  52. package/dist/contracts/path-template.js +2 -2
  53. package/dist/contracts/path-template.js.map +1 -1
  54. package/dist/contracts/schema-shape.d.ts +37 -0
  55. package/dist/contracts/schema-shape.d.ts.map +1 -0
  56. package/dist/contracts/schema-shape.js +61 -0
  57. package/dist/contracts/schema-shape.js.map +1 -0
  58. package/dist/contracts/success-status.d.ts +32 -0
  59. package/dist/contracts/success-status.d.ts.map +1 -0
  60. package/dist/contracts/success-status.js +18 -0
  61. package/dist/contracts/success-status.js.map +1 -0
  62. package/dist/contracts/types.d.ts +25 -5
  63. package/dist/contracts/types.d.ts.map +1 -1
  64. package/dist/contracts/types.js.map +1 -1
  65. package/dist/contracts/utils.d.ts +1 -1
  66. package/dist/contracts/utils.d.ts.map +1 -1
  67. package/dist/contracts/utils.js +1 -1
  68. package/dist/contracts/utils.js.map +1 -1
  69. package/dist/domain/events.d.ts +1 -1
  70. package/dist/domain/events.d.ts.map +1 -1
  71. package/dist/domain/events.js +1 -1
  72. package/dist/domain/events.js.map +1 -1
  73. package/dist/domain/index.d.ts +3 -3
  74. package/dist/domain/index.d.ts.map +1 -1
  75. package/dist/domain/index.js +3 -3
  76. package/dist/domain/index.js.map +1 -1
  77. package/dist/errors/catalog.d.ts +9 -1
  78. package/dist/errors/catalog.d.ts.map +1 -1
  79. package/dist/errors/catalog.js +7 -1
  80. package/dist/errors/catalog.js.map +1 -1
  81. package/dist/errors/http.d.ts +10 -0
  82. package/dist/errors/http.d.ts.map +1 -1
  83. package/dist/errors/http.js +11 -1
  84. package/dist/errors/http.js.map +1 -1
  85. package/dist/errors/index.d.ts +4 -4
  86. package/dist/errors/index.d.ts.map +1 -1
  87. package/dist/errors/index.js +4 -4
  88. package/dist/errors/index.js.map +1 -1
  89. package/dist/errors/response.d.ts +4 -1
  90. package/dist/errors/response.d.ts.map +1 -1
  91. package/dist/errors/response.js.map +1 -1
  92. package/dist/events/index.d.ts +10 -12
  93. package/dist/events/index.d.ts.map +1 -1
  94. package/dist/events/index.js +10 -10
  95. package/dist/events/index.js.map +1 -1
  96. package/dist/idempotency/index.d.ts +5 -3
  97. package/dist/idempotency/index.d.ts.map +1 -1
  98. package/dist/idempotency/index.js.map +1 -1
  99. package/dist/jobs/index.d.ts +148 -16
  100. package/dist/jobs/index.d.ts.map +1 -1
  101. package/dist/jobs/index.js +174 -14
  102. package/dist/jobs/index.js.map +1 -1
  103. package/dist/notifications/index.d.ts +14 -16
  104. package/dist/notifications/index.d.ts.map +1 -1
  105. package/dist/notifications/index.js +14 -14
  106. package/dist/notifications/index.js.map +1 -1
  107. package/dist/openapi/index.d.ts +8 -3
  108. package/dist/openapi/index.d.ts.map +1 -1
  109. package/dist/openapi/index.js +41 -29
  110. package/dist/openapi/index.js.map +1 -1
  111. package/dist/openapi/schema-introspector.d.ts +37 -0
  112. package/dist/openapi/schema-introspector.d.ts.map +1 -1
  113. package/dist/openapi/schema-introspector.js +23 -17
  114. package/dist/openapi/schema-introspector.js.map +1 -1
  115. package/dist/outbox/index.d.ts +18 -4
  116. package/dist/outbox/index.d.ts.map +1 -1
  117. package/dist/outbox/index.js +104 -4
  118. package/dist/outbox/index.js.map +1 -1
  119. package/dist/ports/audit.d.ts +56 -10
  120. package/dist/ports/audit.d.ts.map +1 -1
  121. package/dist/ports/audit.js +71 -3
  122. package/dist/ports/audit.js.map +1 -1
  123. package/dist/ports/auth.d.ts +92 -0
  124. package/dist/ports/auth.d.ts.map +1 -1
  125. package/dist/ports/auth.js +92 -0
  126. package/dist/ports/auth.js.map +1 -1
  127. package/dist/ports/events.d.ts +2 -2
  128. package/dist/ports/events.d.ts.map +1 -1
  129. package/dist/ports/index.d.ts +62 -33
  130. package/dist/ports/index.d.ts.map +1 -1
  131. package/dist/ports/index.js +28 -34
  132. package/dist/ports/index.js.map +1 -1
  133. package/dist/ports/policy.d.ts +32 -3
  134. package/dist/ports/policy.d.ts.map +1 -1
  135. package/dist/ports/policy.js +13 -2
  136. package/dist/ports/policy.js.map +1 -1
  137. package/dist/ports/testing.d.ts +1030 -2
  138. package/dist/ports/testing.d.ts.map +1 -1
  139. package/dist/ports/testing.js +1031 -1
  140. package/dist/ports/testing.js.map +1 -1
  141. package/dist/ports/unbound.d.ts +21 -0
  142. package/dist/ports/unbound.d.ts.map +1 -0
  143. package/dist/ports/unbound.js +57 -0
  144. package/dist/ports/unbound.js.map +1 -0
  145. package/dist/ports/unit-of-work.d.ts +1 -1
  146. package/dist/ports/unit-of-work.d.ts.map +1 -1
  147. package/dist/ports/unit-of-work.js +1 -1
  148. package/dist/ports/unit-of-work.js.map +1 -1
  149. package/dist/providers/index.d.ts +3 -2
  150. package/dist/providers/index.d.ts.map +1 -1
  151. package/dist/providers/index.js +3 -2
  152. package/dist/providers/index.js.map +1 -1
  153. package/dist/providers/instrumentation.d.ts +46 -5
  154. package/dist/providers/instrumentation.d.ts.map +1 -1
  155. package/dist/providers/instrumentation.js +25 -6
  156. package/dist/providers/instrumentation.js.map +1 -1
  157. package/dist/providers/metadata.d.ts +39 -0
  158. package/dist/providers/metadata.d.ts.map +1 -0
  159. package/dist/providers/metadata.js +169 -0
  160. package/dist/providers/metadata.js.map +1 -0
  161. package/dist/providers/provider.d.ts +114 -9
  162. package/dist/providers/provider.d.ts.map +1 -1
  163. package/dist/providers/provider.js +3 -20
  164. package/dist/providers/provider.js.map +1 -1
  165. package/dist/schedules/index.d.ts +94 -13
  166. package/dist/schedules/index.d.ts.map +1 -1
  167. package/dist/schedules/index.js +66 -12
  168. package/dist/schedules/index.js.map +1 -1
  169. package/dist/server/audit-context.d.ts +29 -0
  170. package/dist/server/audit-context.d.ts.map +1 -0
  171. package/dist/server/audit-context.js +44 -0
  172. package/dist/server/audit-context.js.map +1 -0
  173. package/dist/server/context.d.ts +141 -0
  174. package/dist/server/context.d.ts.map +1 -0
  175. package/dist/server/context.js +39 -0
  176. package/dist/server/context.js.map +1 -0
  177. package/dist/server/contract-like.d.ts +1 -1
  178. package/dist/server/contract-like.d.ts.map +1 -1
  179. package/dist/server/contract-like.js +1 -1
  180. package/dist/server/contract-like.js.map +1 -1
  181. package/dist/server/health.d.ts +2 -2
  182. package/dist/server/health.d.ts.map +1 -1
  183. package/dist/server/hooks/auth.d.ts +89 -65
  184. package/dist/server/hooks/auth.d.ts.map +1 -1
  185. package/dist/server/hooks/auth.js +84 -55
  186. package/dist/server/hooks/auth.js.map +1 -1
  187. package/dist/server/hooks/cors.d.ts +1 -1
  188. package/dist/server/hooks/cors.d.ts.map +1 -1
  189. package/dist/server/hooks/errors.d.ts +2 -2
  190. package/dist/server/hooks/errors.d.ts.map +1 -1
  191. package/dist/server/hooks/errors.js +2 -2
  192. package/dist/server/hooks/errors.js.map +1 -1
  193. package/dist/server/hooks/idempotency.d.ts +78 -0
  194. package/dist/server/hooks/idempotency.d.ts.map +1 -0
  195. package/dist/server/hooks/idempotency.js +154 -0
  196. package/dist/server/hooks/idempotency.js.map +1 -0
  197. package/dist/server/hooks/index.d.ts +8 -7
  198. package/dist/server/hooks/index.d.ts.map +1 -1
  199. package/dist/server/hooks/index.js +6 -5
  200. package/dist/server/hooks/index.js.map +1 -1
  201. package/dist/server/hooks/logging.d.ts +2 -2
  202. package/dist/server/hooks/logging.d.ts.map +1 -1
  203. package/dist/server/hooks/logging.js +1 -1
  204. package/dist/server/hooks/logging.js.map +1 -1
  205. package/dist/server/hooks/rate-limit.d.ts +25 -7
  206. package/dist/server/hooks/rate-limit.d.ts.map +1 -1
  207. package/dist/server/hooks/rate-limit.js +47 -12
  208. package/dist/server/hooks/rate-limit.js.map +1 -1
  209. package/dist/server/hooks.d.ts +1 -1
  210. package/dist/server/hooks.d.ts.map +1 -1
  211. package/dist/server/hooks.js +1 -1
  212. package/dist/server/hooks.js.map +1 -1
  213. package/dist/server/http.d.ts +84 -6
  214. package/dist/server/http.d.ts.map +1 -1
  215. package/dist/server/index.d.ts +36 -12
  216. package/dist/server/index.d.ts.map +1 -1
  217. package/dist/server/index.js +24 -8
  218. package/dist/server/index.js.map +1 -1
  219. package/dist/server/instrumentation.d.ts +108 -0
  220. package/dist/server/instrumentation.d.ts.map +1 -0
  221. package/dist/server/instrumentation.js +297 -0
  222. package/dist/server/instrumentation.js.map +1 -0
  223. package/dist/server/openapi.d.ts +3 -3
  224. package/dist/server/openapi.d.ts.map +1 -1
  225. package/dist/server/openapi.js +1 -1
  226. package/dist/server/openapi.js.map +1 -1
  227. package/dist/server/providers/index.d.ts +3 -3
  228. package/dist/server/providers/index.d.ts.map +1 -1
  229. package/dist/server/providers/index.js +3 -3
  230. package/dist/server/providers/index.js.map +1 -1
  231. package/dist/server/providers/loadProviderConfig.d.ts +2 -2
  232. package/dist/server/providers/loadProviderConfig.d.ts.map +1 -1
  233. package/dist/server/providers/loadProviderConfig.js +2 -2
  234. package/dist/server/providers/loadProviderConfig.js.map +1 -1
  235. package/dist/server/request-context.d.ts +67 -0
  236. package/dist/server/request-context.d.ts.map +1 -0
  237. package/dist/server/request-context.js +79 -0
  238. package/dist/server/request-context.js.map +1 -0
  239. package/dist/server/server-context.d.ts +38 -0
  240. package/dist/server/server-context.d.ts.map +1 -0
  241. package/dist/server/server-context.js +38 -0
  242. package/dist/server/server-context.js.map +1 -0
  243. package/dist/server/server.d.ts +148 -35
  244. package/dist/server/server.d.ts.map +1 -1
  245. package/dist/server/server.js +482 -145
  246. package/dist/server/server.js.map +1 -1
  247. package/dist/server/types.d.ts +2 -2
  248. package/dist/server/types.d.ts.map +1 -1
  249. package/dist/server/types.js +2 -2
  250. package/dist/server/types.js.map +1 -1
  251. package/dist/server/use-case-route.d.ts +263 -0
  252. package/dist/server/use-case-route.d.ts.map +1 -0
  253. package/dist/server/use-case-route.js +77 -0
  254. package/dist/server/use-case-route.js.map +1 -0
  255. package/dist/server-only.d.ts +8 -0
  256. package/dist/server-only.d.ts.map +1 -0
  257. package/dist/server-only.js +8 -0
  258. package/dist/server-only.js.map +1 -0
  259. package/dist/tasks/index.d.ts +139 -0
  260. package/dist/tasks/index.d.ts.map +1 -0
  261. package/dist/tasks/index.js +98 -0
  262. package/dist/tasks/index.js.map +1 -0
  263. package/dist/testing/index.d.ts +611 -5
  264. package/dist/testing/index.d.ts.map +1 -1
  265. package/dist/testing/index.js +434 -4
  266. package/dist/testing/index.js.map +1 -1
  267. package/dist/tracing/index.d.ts +89 -0
  268. package/dist/tracing/index.d.ts.map +1 -0
  269. package/dist/tracing/index.js +101 -0
  270. package/dist/tracing/index.js.map +1 -0
  271. package/dist/uploads/client.d.ts +278 -0
  272. package/dist/uploads/client.d.ts.map +1 -0
  273. package/dist/uploads/client.js +428 -0
  274. package/dist/uploads/client.js.map +1 -0
  275. package/dist/uploads/index.d.ts +361 -0
  276. package/dist/uploads/index.d.ts.map +1 -0
  277. package/dist/uploads/index.js +543 -0
  278. package/dist/uploads/index.js.map +1 -0
  279. package/package.json +34 -3
  280. package/src/application/index.ts +193 -10
  281. package/src/client/client.ts +148 -150
  282. package/src/client/error-messages.ts +35 -0
  283. package/src/client/index.ts +12 -4
  284. package/src/client/types.ts +44 -5
  285. package/src/client-only.ts +7 -0
  286. package/src/config/index.ts +6 -6
  287. package/src/contracts/catalog-errors.ts +115 -0
  288. package/src/contracts/contract-builder.ts +39 -76
  289. package/src/contracts/contract-group.ts +33 -68
  290. package/src/contracts/contract-like.ts +1 -1
  291. package/src/contracts/index.ts +24 -11
  292. package/src/contracts/openapi-meta.ts +55 -0
  293. package/src/contracts/path-template.ts +2 -2
  294. package/src/contracts/schema-shape.ts +75 -0
  295. package/src/contracts/success-status.ts +68 -0
  296. package/src/contracts/types.ts +32 -5
  297. package/src/contracts/utils.ts +5 -2
  298. package/src/domain/events.ts +6 -2
  299. package/src/domain/index.ts +3 -3
  300. package/src/errors/catalog.ts +9 -1
  301. package/src/errors/http.ts +11 -1
  302. package/src/errors/index.ts +4 -4
  303. package/src/errors/response.ts +4 -1
  304. package/src/events/index.ts +12 -26
  305. package/src/idempotency/index.ts +5 -3
  306. package/src/jobs/index.ts +340 -29
  307. package/src/notifications/index.ts +17 -27
  308. package/src/openapi/index.ts +73 -38
  309. package/src/openapi/schema-introspector.ts +68 -17
  310. package/src/outbox/index.ts +151 -6
  311. package/src/ports/audit.ts +120 -11
  312. package/src/ports/auth.ts +132 -0
  313. package/src/ports/events.ts +2 -2
  314. package/src/ports/index.ts +104 -35
  315. package/src/ports/policy.ts +50 -3
  316. package/src/ports/testing.ts +2220 -33
  317. package/src/ports/unbound.ts +64 -0
  318. package/src/ports/unit-of-work.ts +6 -2
  319. package/src/providers/index.ts +16 -3
  320. package/src/providers/instrumentation.ts +93 -8
  321. package/src/providers/metadata.ts +234 -0
  322. package/src/providers/provider.ts +168 -9
  323. package/src/schedules/index.ts +173 -23
  324. package/src/server/audit-context.ts +45 -0
  325. package/src/server/context.ts +224 -0
  326. package/src/server/contract-like.ts +1 -1
  327. package/src/server/health.ts +2 -2
  328. package/src/server/hooks/auth.ts +175 -158
  329. package/src/server/hooks/cors.ts +1 -1
  330. package/src/server/hooks/errors.ts +7 -4
  331. package/src/server/hooks/idempotency.ts +263 -0
  332. package/src/server/hooks/index.ts +15 -12
  333. package/src/server/hooks/logging.ts +3 -3
  334. package/src/server/hooks/rate-limit.ts +85 -17
  335. package/src/server/hooks.ts +1 -1
  336. package/src/server/http.ts +112 -6
  337. package/src/server/index.ts +63 -12
  338. package/src/server/instrumentation.ts +470 -0
  339. package/src/server/openapi.ts +4 -4
  340. package/src/server/providers/index.ts +6 -3
  341. package/src/server/providers/loadProviderConfig.ts +4 -4
  342. package/src/server/request-context.ts +116 -0
  343. package/src/server/server-context.ts +44 -0
  344. package/src/server/server.ts +1045 -229
  345. package/src/server/types.ts +2 -2
  346. package/src/server/use-case-route.ts +430 -0
  347. package/src/server-only.ts +7 -0
  348. package/src/tasks/index.ts +275 -0
  349. package/src/testing/index.ts +1153 -6
  350. package/src/tracing/index.ts +176 -0
  351. package/src/uploads/client.ts +861 -0
  352. package/src/uploads/index.ts +1071 -0
  353. package/dist/ports/mailer.d.ts +0 -6
  354. package/dist/ports/mailer.d.ts.map +0 -1
  355. package/dist/ports/mailer.js +0 -2
  356. package/dist/ports/mailer.js.map +0 -1
  357. package/dist/ports/schedules.d.ts +0 -9
  358. package/dist/ports/schedules.d.ts.map +0 -1
  359. package/dist/ports/schedules.js +0 -2
  360. package/dist/ports/schedules.js.map +0 -1
@@ -27,7 +27,7 @@
27
27
  * - `@beignet/core/mail` owns `MailerPort` and mail test adapters
28
28
  * - `@beignet/core/notifications` owns notification helpers and test adapters
29
29
  * - `@beignet/core/outbox` owns durable outbox helpers and test adapters
30
- * - `@beignet/core/schedules` owns scheduled task definitions and runners
30
+ * - `@beignet/core/schedules` owns schedule definitions and runners
31
31
  */
32
32
  /**
33
33
  * A generic map of named "ports" (outbound dependencies) that your
@@ -37,27 +37,52 @@
37
37
  * `definePorts(...)`.
38
38
  */
39
39
  export type AnyPorts = Record<string, unknown>;
40
+ /**
41
+ * Definition accepted by the curried `definePorts<P>()(...)` form.
42
+ */
43
+ export type DeferredPortsDefinition<P extends AnyPorts, Deferred extends readonly (keyof P & string)[]> = {
44
+ /**
45
+ * Ports the app binds directly. Optional keys of `P` may be omitted here
46
+ * and contributed by providers instead.
47
+ */
48
+ bound: Omit<P, Deferred[number]>;
49
+ /**
50
+ * Port keys that providers contribute during server startup. Deferred keys
51
+ * boot as throwing placeholders; `createServer(...)` fails startup if any
52
+ * are still unbound after providers have started (see `onUnboundPorts`).
53
+ */
54
+ deferred: Deferred;
55
+ };
40
56
  /**
41
57
  * Define the set of ports (outbound dependencies) for your application.
42
58
  *
43
- * This is essentially a typed identity function. It:
44
- * - captures the exact shape of the provided `ports` object
45
- * - allows you to export `type AppPorts = typeof appPorts` in your app
59
+ * The identity form captures the exact shape of the provided `ports` object
60
+ * so you can export `type AppPorts = typeof appPorts`.
61
+ *
62
+ * The curried form, `definePorts<AppPorts>()({ bound, deferred })`, declares
63
+ * which port keys providers contribute at server startup. Deferred keys boot
64
+ * as throwing placeholders instead of hand-written stubs, and
65
+ * `createServer(...)` validates after provider startup that nothing is left
66
+ * unbound. Optional keys of `AppPorts` may go in either bucket.
46
67
  *
47
68
  * @example
48
69
  * ```ts
70
+ * // Identity form: every port is bound directly.
49
71
  * const appPorts = definePorts({
50
72
  * db: dbAdapter,
51
73
  * mailer: mailerAdapter,
52
74
  * });
53
- *
54
75
  * export type AppPorts = typeof appPorts;
55
- * ```
56
76
  *
57
- * @param ports - The ports object to define
58
- * @returns The same ports object, unchanged
77
+ * // Deferred form: providers contribute the rest at startup.
78
+ * export const appPorts = definePorts<AppPorts>()({
79
+ * bound: { gate },
80
+ * deferred: ["db", "mailer", "storage"],
81
+ * });
82
+ * ```
59
83
  */
60
84
  export declare function definePorts<P extends AnyPorts>(ports: P): P;
85
+ export declare function definePorts<P extends AnyPorts>(): <const Deferred extends readonly (keyof P & string)[]>(definition: DeferredPortsDefinition<P, Deferred>) => P;
61
86
  /**
62
87
  * A small helper type describing a context object that carries `ports`.
63
88
  *
@@ -81,101 +106,105 @@ export interface PortsContext<P extends AnyPorts = AnyPorts> {
81
106
  /**
82
107
  * Idempotency port exports.
83
108
  */
84
- export type { IdempotencyCompleteInput, IdempotencyFailInput, IdempotencyPort, IdempotencyReservation, IdempotencyReserveInput, } from "../idempotency";
109
+ export type { IdempotencyCompleteInput, IdempotencyFailInput, IdempotencyPort, IdempotencyReservation, IdempotencyReserveInput, } from "../idempotency/index.js";
85
110
  /**
86
111
  * Notification port exports.
87
112
  */
88
- export type { MemoryNotificationDelivery, MemoryNotificationPort, NotificationChannelResult, NotificationPort, SendNotificationOptions, SendNotificationResult, } from "../notifications";
113
+ export type { MemoryNotificationDelivery, MemoryNotificationPort, NotificationChannelResult, NotificationPort, SendNotificationOptions, SendNotificationResult, } from "../notifications/index.js";
89
114
  /**
90
115
  * Transactional outbox port exports.
91
116
  */
92
- export type { ClaimedOutboxMessage, OutboxClaimBatchOptions, OutboxEnqueueInput, OutboxMarkDeliveredInput, OutboxMarkFailedInput, OutboxMessage, OutboxMessageKind, OutboxMessageStatus, OutboxPort, } from "../outbox";
117
+ export type { ClaimedOutboxMessage, OutboxClaimBatchOptions, OutboxEnqueueInput, OutboxMarkDeliveredInput, OutboxMarkFailedInput, OutboxMessage, OutboxMessageKind, OutboxMessageStatus, OutboxPort, } from "../outbox/index.js";
93
118
  /**
94
119
  * Audit log port exports.
95
120
  */
96
- export type { ActivityActor, ActivityActorType, ActivityMetadata, ActivityMetadataValue, ActivityResource, ActivityTenant, AuditLogEntry, AuditLogEntryInput, AuditLogOptions, AuditLogPort, AuditOutcome, MemoryAuditLogPort, } from "./audit";
121
+ export type { ActivityActor, ActivityActorType, ActivityMetadata, ActivityMetadataValue, ActivityResource, ActivityTenant, AuditLogEntry, AuditLogEntryInput, AuditLogOptions, AuditLogPort, AuditOutcome, InstrumentedAuditLogOptions, MemoryAuditLogPort, } from "./audit.js";
97
122
  /**
98
123
  * Audit log helper exports.
99
124
  */
100
- export { createAnonymousActor, createMemoryAuditLog, createRedactedAuditLog, createServiceActor, createSystemActor, createTenant, createUserActor, normalizeAuditLogEntry, redactAuditLogEntry, } from "./audit";
125
+ export { createAnonymousActor, createInstrumentedAuditLog, createMemoryAuditLog, createRedactedAuditLog, createServiceActor, createSystemActor, createTenant, createUserActor, normalizeAuditLogEntry, redactAuditLogEntry, } from "./audit.js";
101
126
  /**
102
127
  * Auth port exports.
103
128
  */
104
- export type { AuthPort, AuthRequestLike, AuthSession, StaticAuthSessionFactory, } from "./auth";
129
+ export type { AuthPort, AuthRequestLike, AuthSession, RequireOptions, StaticAuthSessionFactory, } from "./auth.js";
105
130
  /**
106
131
  * Auth helper exports.
107
132
  */
108
- export { AuthUnauthorizedError, createAnonymousAuth, createStaticAuth, } from "./auth";
133
+ export { AuthUnauthorizedError, createAnonymousAuth, createStaticAuth, requireSession, requireTenant, requireTenantId, requireUser, requireUserId, TenantRequiredError, } from "./auth.js";
109
134
  /**
110
135
  * Ports builder exports.
111
136
  */
112
- export { createPortsBuilder, type PortsBuilder, type PortsOf, } from "./builder";
137
+ export { createPortsBuilder, type PortsBuilder, type PortsOf, } from "./builder.js";
113
138
  /**
114
139
  * Cache port exports.
115
140
  */
116
- export type { CachePort, CacheSetOptions } from "./cache";
141
+ export type { CachePort, CacheSetOptions } from "./cache.js";
117
142
  /**
118
143
  * Cache helper exports.
119
144
  */
120
- export { createMemoryCache } from "./cache";
145
+ export { createMemoryCache } from "./cache.js";
121
146
  /**
122
147
  * Clock port exports.
123
148
  */
124
- export type { ClockPort, FrozenClockPort } from "./clock";
149
+ export type { ClockPort, FrozenClockPort } from "./clock.js";
125
150
  /**
126
151
  * Clock helper exports.
127
152
  */
128
- export { createFrozenClock, createSystemClock } from "./clock";
153
+ export { createFrozenClock, createSystemClock } from "./clock.js";
129
154
  /**
130
155
  * Event bus and job dispatcher port exports.
131
156
  */
132
- export type { DomainEventDef, EventBusPort, InferEventPayload, InferJobPayload, JobDef, JobDispatcherPort, } from "./events";
157
+ export type { DomainEventDef, EventBusPort, InferEventPayload, InferJobPayload, JobDef, JobDispatcherPort, } from "./events.js";
133
158
  /**
134
159
  * ID generator port exports.
135
160
  */
136
- export type { IdGeneratorPort, SequenceIdGeneratorPort } from "./id-generator";
161
+ export type { IdGeneratorPort, SequenceIdGeneratorPort, } from "./id-generator.js";
137
162
  /**
138
163
  * ID generator helper exports.
139
164
  */
140
- export { createSequenceIdGenerator, createUuidIdGenerator, } from "./id-generator";
165
+ export { createSequenceIdGenerator, createUuidIdGenerator, } from "./id-generator.js";
141
166
  /**
142
167
  * Logger port exports.
143
168
  */
144
- export type { LoggerPort, LogLevel, MemoryLogEntry, MemoryLoggerPort, } from "./logger";
169
+ export type { LoggerPort, LogLevel, MemoryLogEntry, MemoryLoggerPort, } from "./logger.js";
145
170
  /**
146
171
  * Logger helper exports.
147
172
  */
148
- export { createMemoryLogger, createNoopLogger } from "./logger";
173
+ export { createMemoryLogger, createNoopLogger } from "./logger.js";
149
174
  /**
150
175
  * Policy and authorization gate type exports.
151
176
  */
152
- export type { BoundGate, CreateGateOptions, GateAllowedDecision, GateDecision, GateDeniedDecision, GateDenyHandler, GatePolicyResult, GatePort, PolicyContextFromDefinitions, PolicyDefinition, PolicyMapFromDefinitions, PolicyResolver, PolicySubjectArgs, } from "./policy";
177
+ export type { BoundGate, CreateGateOptions, GateAllowedDecision, GateContext, GateDecision, GateDeniedDecision, GateDenyHandler, GatePolicyResult, GatePort, PolicyContextFromDefinitions, PolicyDefinition, PolicyMapFromDefinitions, PolicyResolver, PolicySubjectArgs, } from "./policy.js";
153
178
  /**
154
179
  * Policy and authorization gate helper exports.
155
180
  */
156
- export { allow, createGate, definePolicy, deny, GateAuthorizationError, } from "./policy";
181
+ export { allow, createGate, definePolicy, deny, GateAuthorizationError, } from "./policy.js";
157
182
  /**
158
183
  * Rate limit port exports.
159
184
  */
160
- export type { RateLimitHitOptions, RateLimitPort, RateLimitResult, } from "./rate-limit";
185
+ export type { RateLimitHitOptions, RateLimitPort, RateLimitResult, } from "./rate-limit.js";
161
186
  /**
162
187
  * Rate limit helper exports.
163
188
  */
164
- export { createMemoryRateLimiter } from "./rate-limit";
189
+ export { createMemoryRateLimiter } from "./rate-limit.js";
165
190
  /**
166
191
  * Redaction helper exports.
167
192
  */
168
- export { createRedactor, DEFAULT_CIRCULAR_VALUE, DEFAULT_REDACTED_VALUE, DEFAULT_SENSITIVE_KEY_TERMS, DEFAULT_SENSITIVE_KEYS, DEFAULT_TRUNCATED_VALUE, isSensitiveKey, type RedactableHeaders, type RedactionDecisionContext, type RedactionOptions, type Redactor, redactHeaders, redactValue, } from "./redaction";
193
+ export { createRedactor, DEFAULT_CIRCULAR_VALUE, DEFAULT_REDACTED_VALUE, DEFAULT_SENSITIVE_KEY_TERMS, DEFAULT_SENSITIVE_KEYS, DEFAULT_TRUNCATED_VALUE, isSensitiveKey, type RedactableHeaders, type RedactionDecisionContext, type RedactionOptions, type Redactor, redactHeaders, redactValue, } from "./redaction.js";
169
194
  /**
170
195
  * Storage port exports.
171
196
  */
172
- export type { MemoryStorageOptions, StorageBody, StorageMetadata, StorageObject, StorageObjectBody, StoragePort, StoragePutOptions, StorageVisibility, } from "./storage";
197
+ export type { MemoryStorageOptions, StorageBody, StorageMetadata, StorageObject, StorageObjectBody, StoragePort, StoragePutOptions, StorageVisibility, } from "./storage.js";
173
198
  /**
174
199
  * Storage helper exports.
175
200
  */
176
- export { createMemoryStorage } from "./storage";
201
+ export { createMemoryStorage } from "./storage.js";
202
+ /**
203
+ * Unbound (deferred) port helper exports.
204
+ */
205
+ export { createUnboundPort, isUnboundPort } from "./unbound.js";
177
206
  /**
178
207
  * Unit of Work port exports.
179
208
  */
180
- export { type BufferedDomainEventRecorder, createDomainEventRecorder, createNoopUnitOfWork, type DomainEventRecorderPort, type NoopUnitOfWorkOptions, type RecordedDomainEvent, type UnitOfWorkCallback, type UnitOfWorkPort, } from "./unit-of-work";
209
+ export { type BufferedDomainEventRecorder, createDomainEventRecorder, createNoopUnitOfWork, type DomainEventRecorderPort, type NoopUnitOfWorkOptions, type RecordedDomainEvent, type UnitOfWorkCallback, type UnitOfWorkPort, } from "./unit-of-work.js";
181
210
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ports/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ports/index.ts"],"names":[],"mappings":"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"}
@@ -27,77 +27,71 @@
27
27
  * - `@beignet/core/mail` owns `MailerPort` and mail test adapters
28
28
  * - `@beignet/core/notifications` owns notification helpers and test adapters
29
29
  * - `@beignet/core/outbox` owns durable outbox helpers and test adapters
30
- * - `@beignet/core/schedules` owns scheduled task definitions and runners
31
- */
32
- /**
33
- * Define the set of ports (outbound dependencies) for your application.
34
- *
35
- * This is essentially a typed identity function. It:
36
- * - captures the exact shape of the provided `ports` object
37
- * - allows you to export `type AppPorts = typeof appPorts` in your app
38
- *
39
- * @example
40
- * ```ts
41
- * const appPorts = definePorts({
42
- * db: dbAdapter,
43
- * mailer: mailerAdapter,
44
- * });
45
- *
46
- * export type AppPorts = typeof appPorts;
47
- * ```
48
- *
49
- * @param ports - The ports object to define
50
- * @returns The same ports object, unchanged
30
+ * - `@beignet/core/schedules` owns schedule definitions and runners
51
31
  */
32
+ import { createUnboundPort } from "./unbound.js";
52
33
  export function definePorts(ports) {
53
- return ports;
34
+ if (ports !== undefined) {
35
+ return ports;
36
+ }
37
+ return (definition) => {
38
+ const result = { ...definition.bound };
39
+ for (const key of definition.deferred) {
40
+ result[key] = createUnboundPort(key);
41
+ }
42
+ return result;
43
+ };
54
44
  }
55
45
  /**
56
46
  * Audit log helper exports.
57
47
  */
58
- export { createAnonymousActor, createMemoryAuditLog, createRedactedAuditLog, createServiceActor, createSystemActor, createTenant, createUserActor, normalizeAuditLogEntry, redactAuditLogEntry, } from "./audit";
48
+ export { createAnonymousActor, createInstrumentedAuditLog, createMemoryAuditLog, createRedactedAuditLog, createServiceActor, createSystemActor, createTenant, createUserActor, normalizeAuditLogEntry, redactAuditLogEntry, } from "./audit.js";
59
49
  /**
60
50
  * Auth helper exports.
61
51
  */
62
- export { AuthUnauthorizedError, createAnonymousAuth, createStaticAuth, } from "./auth";
52
+ export { AuthUnauthorizedError, createAnonymousAuth, createStaticAuth, requireSession, requireTenant, requireTenantId, requireUser, requireUserId, TenantRequiredError, } from "./auth.js";
63
53
  /**
64
54
  * Ports builder exports.
65
55
  */
66
- export { createPortsBuilder, } from "./builder";
56
+ export { createPortsBuilder, } from "./builder.js";
67
57
  /**
68
58
  * Cache helper exports.
69
59
  */
70
- export { createMemoryCache } from "./cache";
60
+ export { createMemoryCache } from "./cache.js";
71
61
  /**
72
62
  * Clock helper exports.
73
63
  */
74
- export { createFrozenClock, createSystemClock } from "./clock";
64
+ export { createFrozenClock, createSystemClock } from "./clock.js";
75
65
  /**
76
66
  * ID generator helper exports.
77
67
  */
78
- export { createSequenceIdGenerator, createUuidIdGenerator, } from "./id-generator";
68
+ export { createSequenceIdGenerator, createUuidIdGenerator, } from "./id-generator.js";
79
69
  /**
80
70
  * Logger helper exports.
81
71
  */
82
- export { createMemoryLogger, createNoopLogger } from "./logger";
72
+ export { createMemoryLogger, createNoopLogger } from "./logger.js";
83
73
  /**
84
74
  * Policy and authorization gate helper exports.
85
75
  */
86
- export { allow, createGate, definePolicy, deny, GateAuthorizationError, } from "./policy";
76
+ export { allow, createGate, definePolicy, deny, GateAuthorizationError, } from "./policy.js";
87
77
  /**
88
78
  * Rate limit helper exports.
89
79
  */
90
- export { createMemoryRateLimiter } from "./rate-limit";
80
+ export { createMemoryRateLimiter } from "./rate-limit.js";
91
81
  /**
92
82
  * Redaction helper exports.
93
83
  */
94
- export { createRedactor, DEFAULT_CIRCULAR_VALUE, DEFAULT_REDACTED_VALUE, DEFAULT_SENSITIVE_KEY_TERMS, DEFAULT_SENSITIVE_KEYS, DEFAULT_TRUNCATED_VALUE, isSensitiveKey, redactHeaders, redactValue, } from "./redaction";
84
+ export { createRedactor, DEFAULT_CIRCULAR_VALUE, DEFAULT_REDACTED_VALUE, DEFAULT_SENSITIVE_KEY_TERMS, DEFAULT_SENSITIVE_KEYS, DEFAULT_TRUNCATED_VALUE, isSensitiveKey, redactHeaders, redactValue, } from "./redaction.js";
95
85
  /**
96
86
  * Storage helper exports.
97
87
  */
98
- export { createMemoryStorage } from "./storage";
88
+ export { createMemoryStorage } from "./storage.js";
89
+ /**
90
+ * Unbound (deferred) port helper exports.
91
+ */
92
+ export { createUnboundPort, isUnboundPort } from "./unbound.js";
99
93
  /**
100
94
  * Unit of Work port exports.
101
95
  */
102
- export { createDomainEventRecorder, createNoopUnitOfWork, } from "./unit-of-work";
96
+ export { createDomainEventRecorder, createNoopUnitOfWork, } from "./unit-of-work.js";
103
97
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ports/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAWH;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,WAAW,CAAqB,KAAQ;IACtD,OAAO,KAAK,CAAC;AACf,CAAC;AA2ED;;GAEG;AACH,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,sBAAsB,EACtB,kBAAkB,EAClB,iBAAiB,EACjB,YAAY,EACZ,eAAe,EACf,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,SAAS,CAAC;AAUjB;;GAEG;AACH,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,QAAQ,CAAC;AAChB;;GAEG;AACH,OAAO,EACL,kBAAkB,GAGnB,MAAM,WAAW,CAAC;AAKnB;;GAEG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAK5C;;GAEG;AACH,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAgB/D;;GAEG;AACH,OAAO,EACL,yBAAyB,EACzB,qBAAqB,GACtB,MAAM,gBAAgB,CAAC;AAUxB;;GAEG;AACH,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAmBhE;;GAEG;AACH,OAAO,EACL,KAAK,EACL,UAAU,EACV,YAAY,EACZ,IAAI,EACJ,sBAAsB,GACvB,MAAM,UAAU,CAAC;AASlB;;GAEG;AACH,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AACvD;;GAEG;AACH,OAAO,EACL,cAAc,EACd,sBAAsB,EACtB,sBAAsB,EACtB,2BAA2B,EAC3B,sBAAsB,EACtB,uBAAuB,EACvB,cAAc,EAKd,aAAa,EACb,WAAW,GACZ,MAAM,aAAa,CAAC;AAcrB;;GAEG;AACH,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD;;GAEG;AACH,OAAO,EAEL,yBAAyB,EACzB,oBAAoB,GAMrB,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ports/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAiEjD,MAAM,UAAU,WAAW,CACzB,KAAS;IAMT,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,CAAC,UAAU,EAAE,EAAE;QACpB,MAAM,MAAM,GAAa,EAAE,GAAI,UAAU,CAAC,KAAkB,EAAE,CAAC;QAC/D,KAAK,MAAM,GAAG,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;YACtC,MAAM,CAAC,GAAG,CAAC,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;QACvC,CAAC;QACD,OAAO,MAAW,CAAC;IACrB,CAAC,CAAC;AACJ,CAAC;AA4ED;;GAEG;AACH,OAAO,EACL,oBAAoB,EACpB,0BAA0B,EAC1B,oBAAoB,EACpB,sBAAsB,EACtB,kBAAkB,EAClB,iBAAiB,EACjB,YAAY,EACZ,eAAe,EACf,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,YAAY,CAAC;AAWpB;;GAEG;AACH,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,eAAe,EACf,WAAW,EACX,aAAa,EACb,mBAAmB,GACpB,MAAM,WAAW,CAAC;AACnB;;GAEG;AACH,OAAO,EACL,kBAAkB,GAGnB,MAAM,cAAc,CAAC;AAKtB;;GAEG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAK/C;;GAEG;AACH,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAmBlE;;GAEG;AACH,OAAO,EACL,yBAAyB,EACzB,qBAAqB,GACtB,MAAM,mBAAmB,CAAC;AAU3B;;GAEG;AACH,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAoBnE;;GAEG;AACH,OAAO,EACL,KAAK,EACL,UAAU,EACV,YAAY,EACZ,IAAI,EACJ,sBAAsB,GACvB,MAAM,aAAa,CAAC;AASrB;;GAEG;AACH,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC1D;;GAEG;AACH,OAAO,EACL,cAAc,EACd,sBAAsB,EACtB,sBAAsB,EACtB,2BAA2B,EAC3B,sBAAsB,EACtB,uBAAuB,EACvB,cAAc,EAKd,aAAa,EACb,WAAW,GACZ,MAAM,gBAAgB,CAAC;AAcxB;;GAEG;AACH,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD;;GAEG;AACH,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAChE;;GAEG;AACH,OAAO,EAEL,yBAAyB,EACzB,oBAAoB,GAMrB,MAAM,mBAAmB,CAAC"}
@@ -67,6 +67,12 @@ export type PolicyContextFromDefinitions<TPolicies extends readonly PolicyDefini
67
67
  * into every authorization call.
68
68
  */
69
69
  export type BoundGate<TPolicies extends readonly PolicyDefinition[]> = {
70
+ /**
71
+ * Type-only marker that keeps `TPolicies` inferable from a bound gate.
72
+ * Runtime bound gates never implement this method. Method syntax keeps the
73
+ * marker bivariant so readonly and mutable policy tuples stay compatible.
74
+ */
75
+ __policies?(policies: TPolicies): void;
70
76
  /**
71
77
  * Return only whether the ability is allowed.
72
78
  */
@@ -80,6 +86,15 @@ export type BoundGate<TPolicies extends readonly PolicyDefinition[]> = {
80
86
  */
81
87
  authorize<TAbility extends keyof PolicyMapFromDefinitions<TPolicies> & string>(ability: TAbility, ...subject: PolicySubjectArgs<PolicyMapFromDefinitions<TPolicies>[TAbility]>): Promise<GateAllowedDecision>;
82
88
  };
89
+ /**
90
+ * Context shape contributed by `gate.attach(...)`.
91
+ */
92
+ export type GateContext<TPolicies extends readonly PolicyDefinition[] = readonly PolicyDefinition[]> = {
93
+ /**
94
+ * Gate bound to the context that carries it.
95
+ */
96
+ gate: BoundGate<TPolicies>;
97
+ };
83
98
  /**
84
99
  * App-facing authorization gate.
85
100
  *
@@ -89,9 +104,23 @@ export type BoundGate<TPolicies extends readonly PolicyDefinition[]> = {
89
104
  */
90
105
  export type GatePort<TContext, TPolicies extends readonly PolicyDefinition[] = readonly PolicyDefinition[]> = {
91
106
  /**
92
- * Bind this gate to a context, usually during `createContext`.
107
+ * Bind this gate to a fixed context snapshot.
108
+ *
109
+ * This is the low-level primitive: the returned gate keeps evaluating
110
+ * against the exact object it was bound to. Prefer `attach(...)` for app
111
+ * context assembly so identity changes can never go stale.
93
112
  */
94
113
  bind(ctx: TContext): BoundGate<TPolicies>;
114
+ /**
115
+ * Attach a live `gate` property to a context object.
116
+ *
117
+ * The gate is exposed through a getter that re-binds against the receiving
118
+ * object on every access, so in-place updates to fields such as `actor` or
119
+ * `tenant` are always observed. The property is non-enumerable on purpose:
120
+ * spreading the context (`{ ...ctx }`) drops the gate instead of silently
121
+ * carrying a stale identity, and the next `ctx.gate` access fails loudly.
122
+ */
123
+ attach<C extends TContext & object>(ctx: C): C & GateContext<TPolicies>;
95
124
  /**
96
125
  * Return only whether the ability is allowed for a context.
97
126
  */
@@ -173,8 +202,8 @@ export declare function definePolicy<const TPolicies extends Record<string, Poli
173
202
  /**
174
203
  * Create an authorization gate from app-owned policy definitions.
175
204
  *
176
- * Register the gate as a port, then bind it to the request/background context:
177
- * `gate: ports.gate.bind(context)`. Use cases can then call
205
+ * Register the gate as a port, then let the server context blueprint attach
206
+ * it: `context: { gate: (ports) => ports.gate, ... }`. Use cases can then call
178
207
  * `ctx.gate.authorize(...)` for business authorization.
179
208
  *
180
209
  * @param options - Policy definitions and optional denial mapper.
@@ -1 +1 @@
1
- {"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../../src/ports/policy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../../src/ports/policy.ts"],"names":[],"mappings":"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"}
@@ -62,8 +62,8 @@ export function definePolicy(policies) {
62
62
  /**
63
63
  * Create an authorization gate from app-owned policy definitions.
64
64
  *
65
- * Register the gate as a port, then bind it to the request/background context:
66
- * `gate: ports.gate.bind(context)`. Use cases can then call
65
+ * Register the gate as a port, then let the server context blueprint attach
66
+ * it: `context: { gate: (ports) => ports.gate, ... }`. Use cases can then call
67
67
  * `ctx.gate.authorize(...)` for business authorization.
68
68
  *
69
69
  * @param options - Policy definitions and optional denial mapper.
@@ -104,8 +104,19 @@ export function createGate(options) {
104
104
  authorize: async (ability, ...subject) => gate.authorize(ctx, ability, ...subject),
105
105
  };
106
106
  }
107
+ function attach(ctx) {
108
+ Object.defineProperty(ctx, "gate", {
109
+ configurable: true,
110
+ enumerable: false,
111
+ get() {
112
+ return bind(this);
113
+ },
114
+ });
115
+ return ctx;
116
+ }
107
117
  const gate = {
108
118
  bind,
119
+ attach,
109
120
  async can(ctx, ability, ...subject) {
110
121
  return (await inspect(ctx, ability, firstSubject(subject))).allowed;
111
122
  },
@@ -1 +1 @@
1
- {"version":3,"file":"policy.js","sourceRoot":"","sources":["../../src/ports/policy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"policy.js","sourceRoot":"","sources":["../../src/ports/policy.ts"],"names":[],"mappings":"AAoPA;;GAEG;AACH,MAAM,OAAO,sBAAuB,SAAQ,KAAK;IACtC,IAAI,CAAS;IACb,MAAM,GAAG,GAAG,CAAC;IACb,OAAO,CAAW;IAE3B,YAAY,WAA+B,IAAI,EAAE;QAC/C,KAAK,CAAC,QAAQ,CAAC,MAAM,IAAI,WAAW,CAAC,CAAC;QACtC,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;QACrC,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,IAAI,WAAW,CAAC;QACzC,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;IAClC,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,UAAU,KAAK;IACnB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC3B,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,IAAI,CAClB,gBAA+D;IAE/D,IAAI,OAAO,gBAAgB,KAAK,QAAQ,EAAE,CAAC;QACzC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC;IACtD,CAAC;IAED,OAAO;QACL,OAAO,EAAE,KAAK;QACd,GAAG,gBAAgB;KACpB,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,YAAY,CAE1B,QAAmB;IACnB,OAAO,EAAE,QAAQ,EAAE,CAAC;AACtB,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,UAAU,CAIxB,OAA+C;IAE/C,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA0B,CAAC;IAEnD,KAAK,MAAM,UAAU,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QAC1C,KAAK,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACtE,IAAI,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC1B,MAAM,IAAI,KAAK,CAAC,mBAAmB,OAAO,0BAA0B,CAAC,CAAC;YACxE,CAAC;YAED,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAED,KAAK,UAAU,OAAO,CACpB,GAAa,EACb,OAAe,EACf,OAAiB;QAEjB,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACvC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,IAAI,CAAC;gBACV,MAAM,EAAE,6BAA6B,OAAO,IAAI;gBAChD,IAAI,EAAE,kBAAkB;aACzB,CAAC,CAAC;QACL,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,GAAY,EAAE,OAAgB,CAAC,CAAC;QAC9D,OAAO,iBAAiB,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC;IAED,KAAK,UAAU,SAAS,CACtB,GAAa,EACb,OAAe,EACf,OAAiB;QAEjB,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QACtD,IAAI,QAAQ,CAAC,OAAO;YAAE,OAAO,QAAQ,CAAC;QAEtC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;QAC3E,MAAM,MAAM,IAAI,IAAI,sBAAsB,CAAC,QAAQ,CAAC,CAAC;IACvD,CAAC;IAED,SAAS,IAAI,CAAC,GAAa;QACzB,OAAO;YACL,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;YACtE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,EAAE,CACrC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;YACxC,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,EAAE,CACvC,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;SAC3C,CAAC;IACJ,CAAC;IAED,SAAS,MAAM,CACb,GAAM;QAEN,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE;YACjC,YAAY,EAAE,IAAI;YAClB,UAAU,EAAE,KAAK;YACjB,GAAG;gBACD,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC;YACpB,CAAC;SACF,CAAC,CAAC;QAEH,OAAO,GAAiC,CAAC;IAC3C,CAAC;IAED,MAAM,IAAI,GAAkC;QAC1C,IAAI;QACJ,MAAM;QACN,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,OAAO;YAChC,OAAO,CAAC,MAAM,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;QACtE,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,EAAE,CAC1C,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;QAC9C,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,EAAE,CAC5C,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;KACjD,CAAC;IAEF,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAwB;IACjD,IAAI,OAAO,MAAM,KAAK,SAAS,EAAE,CAAC;QAChC,OAAO,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACnC,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,YAAY,CAAC,OAA2B;IAC/C,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC"}