@geekmidas/constructs 10.0.0-alpha.37 → 10.0.0-alpha.39

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 (267) hide show
  1. package/README.md +156 -155
  2. package/dist/{Construct-Detz65RA.mjs → Construct-BO1X-kt9.mjs} +3 -6
  3. package/dist/Construct-BO1X-kt9.mjs.map +1 -0
  4. package/dist/Construct-BQALFCh2.d.cts +230 -0
  5. package/dist/Construct-BQALFCh2.d.cts.map +1 -0
  6. package/dist/{Construct-yG9Sw-5p.cjs → Construct-DmvXceVY.cjs} +3 -6
  7. package/dist/Construct-DmvXceVY.cjs.map +1 -0
  8. package/dist/Construct-QXnl3VqT.d.mts +230 -0
  9. package/dist/Construct-QXnl3VqT.d.mts.map +1 -0
  10. package/dist/{Cron-CA2oa2nC.d.cts → Cron-CMEGfRs8.d.cts} +7 -5
  11. package/dist/Cron-CMEGfRs8.d.cts.map +1 -0
  12. package/dist/{Cron-B_iuyNxr.d.mts → Cron-D6X4-xjB.d.mts} +7 -5
  13. package/dist/Cron-D6X4-xjB.d.mts.map +1 -0
  14. package/dist/{CronBuilder-B_KqaodP.d.cts → CronBuilder-CEK7aOqD.d.cts} +21 -16
  15. package/dist/CronBuilder-CEK7aOqD.d.cts.map +1 -0
  16. package/dist/{CronBuilder-BbnT7tqo.cjs → CronBuilder-DB35T5dL.cjs} +13 -11
  17. package/dist/CronBuilder-DB35T5dL.cjs.map +1 -0
  18. package/dist/{CronBuilder-BRkzUOAs.mjs → CronBuilder-Dv0IlZs0.mjs} +14 -12
  19. package/dist/CronBuilder-Dv0IlZs0.mjs.map +1 -0
  20. package/dist/{CronBuilder-BIKCLWu7.d.mts → CronBuilder-O_gvButp.d.mts} +21 -16
  21. package/dist/CronBuilder-O_gvButp.d.mts.map +1 -0
  22. package/dist/{Endpoint-DO332Dnm.mjs → Endpoint-CQAeh1Rh.mjs} +5 -5
  23. package/dist/Endpoint-CQAeh1Rh.mjs.map +1 -0
  24. package/dist/{Endpoint-QKuFg5gs.cjs → Endpoint-D1L9qu5C.cjs} +5 -5
  25. package/dist/Endpoint-D1L9qu5C.cjs.map +1 -0
  26. package/dist/{Endpoint-1-XYQSx0.d.cts → Endpoint-Dp5AKIXl.d.cts} +10 -13
  27. package/dist/Endpoint-Dp5AKIXl.d.cts.map +1 -0
  28. package/dist/{Endpoint-GFIxYb9L.d.mts → Endpoint-DtI7heFm.d.mts} +10 -13
  29. package/dist/Endpoint-DtI7heFm.d.mts.map +1 -0
  30. package/dist/{EndpointFactory-B9HAjDAP.mjs → EndpointFactory-BBdNeaGJ.mjs} +23 -52
  31. package/dist/EndpointFactory-BBdNeaGJ.mjs.map +1 -0
  32. package/dist/{EndpointFactory-BmO0WnXE.cjs → EndpointFactory-BZOCOaK6.cjs} +22 -51
  33. package/dist/EndpointFactory-BZOCOaK6.cjs.map +1 -0
  34. package/dist/{EndpointFactory-BCZdh_u3.d.mts → EndpointFactory-CgMDvERK.d.mts} +58 -48
  35. package/dist/EndpointFactory-CgMDvERK.d.mts.map +1 -0
  36. package/dist/{EndpointFactory-BnK_YkW1.d.cts → EndpointFactory-FeFRmlDZ.d.cts} +58 -48
  37. package/dist/EndpointFactory-FeFRmlDZ.d.cts.map +1 -0
  38. package/dist/{HonoEndpointAdaptor-CiqAZ5Mt.mjs → HonoEndpointAdaptor-Aui-x9Lg.mjs} +4 -3
  39. package/dist/HonoEndpointAdaptor-Aui-x9Lg.mjs.map +1 -0
  40. package/dist/{HonoEndpointAdaptor-DoEQdC3r.cjs → HonoEndpointAdaptor-Cq99r9H7.cjs} +5 -4
  41. package/dist/HonoEndpointAdaptor-Cq99r9H7.cjs.map +1 -0
  42. package/dist/{Queue-DpKTLl6E.mjs → Queue-C1uDgjxt.mjs} +29 -48
  43. package/dist/Queue-C1uDgjxt.mjs.map +1 -0
  44. package/dist/{Queue-B7yRXQmL.cjs → Queue-Ckmudcm8.cjs} +29 -48
  45. package/dist/Queue-Ckmudcm8.cjs.map +1 -0
  46. package/dist/{Queue-Bhzi2WQC.d.cts → Queue-CpQIGB_2.d.cts} +22 -33
  47. package/dist/Queue-CpQIGB_2.d.cts.map +1 -0
  48. package/dist/{Queue-BoUA-e83.d.mts → Queue-YmvN2vEP.d.mts} +21 -32
  49. package/dist/Queue-YmvN2vEP.d.mts.map +1 -0
  50. package/dist/QueueBuilder-CJNcv4dy.cjs +112 -0
  51. package/dist/QueueBuilder-CJNcv4dy.cjs.map +1 -0
  52. package/dist/QueueBuilder-CM0WUxfw.d.mts +62 -0
  53. package/dist/QueueBuilder-CM0WUxfw.d.mts.map +1 -0
  54. package/dist/QueueBuilder-XEnnOWGe.d.cts +62 -0
  55. package/dist/QueueBuilder-XEnnOWGe.d.cts.map +1 -0
  56. package/dist/QueueBuilder-XuPKZwKH.mjs +95 -0
  57. package/dist/QueueBuilder-XuPKZwKH.mjs.map +1 -0
  58. package/dist/{Subscriber-DQCaiOXF.d.cts → Subscriber-B91YSkZt.d.cts} +12 -13
  59. package/dist/Subscriber-B91YSkZt.d.cts.map +1 -0
  60. package/dist/{Subscriber-CIO3pwji.d.mts → Subscriber-BjHYe5hK.d.mts} +11 -12
  61. package/dist/Subscriber-BjHYe5hK.d.mts.map +1 -0
  62. package/dist/{SubscriberBuilder-CjDGSTZc.d.cts → SubscriberBuilder-BSpQX1JT.d.cts} +19 -23
  63. package/dist/SubscriberBuilder-BSpQX1JT.d.cts.map +1 -0
  64. package/dist/{SubscriberBuilder-C2FRfd26.d.mts → SubscriberBuilder-BhMphk4z.d.mts} +18 -22
  65. package/dist/SubscriberBuilder-BhMphk4z.d.mts.map +1 -0
  66. package/dist/{SubscriberBuilder-C2bCOuPT.cjs → SubscriberBuilder-Duk028pD.cjs} +11 -19
  67. package/dist/SubscriberBuilder-Duk028pD.cjs.map +1 -0
  68. package/dist/{SubscriberBuilder-B4YRTBng.mjs → SubscriberBuilder-DzQUWE08.mjs} +11 -19
  69. package/dist/SubscriberBuilder-DzQUWE08.mjs.map +1 -0
  70. package/dist/{Topic-D5rlM9wS.cjs → Topic-BBVXC3H4.cjs} +46 -51
  71. package/dist/Topic-BBVXC3H4.cjs.map +1 -0
  72. package/dist/Topic-DOw051ch.mjs +98 -0
  73. package/dist/Topic-DOw051ch.mjs.map +1 -0
  74. package/dist/adaptors/aws.cjs +5 -5
  75. package/dist/adaptors/aws.cjs.map +1 -1
  76. package/dist/adaptors/aws.d.cts +26 -26
  77. package/dist/adaptors/aws.d.cts.map +1 -1
  78. package/dist/adaptors/aws.d.mts +25 -25
  79. package/dist/adaptors/aws.d.mts.map +1 -1
  80. package/dist/adaptors/aws.mjs +5 -5
  81. package/dist/adaptors/aws.mjs.map +1 -1
  82. package/dist/adaptors/hono.cjs +1 -1
  83. package/dist/adaptors/hono.d.cts +4 -5
  84. package/dist/adaptors/hono.d.cts.map +1 -1
  85. package/dist/adaptors/hono.d.mts +4 -5
  86. package/dist/adaptors/hono.d.mts.map +1 -1
  87. package/dist/adaptors/hono.mjs +1 -1
  88. package/dist/adaptors/testing.cjs +59 -23
  89. package/dist/adaptors/testing.cjs.map +1 -1
  90. package/dist/adaptors/testing.d.cts +40 -28
  91. package/dist/adaptors/testing.d.cts.map +1 -1
  92. package/dist/adaptors/testing.d.mts +40 -28
  93. package/dist/adaptors/testing.d.mts.map +1 -1
  94. package/dist/adaptors/testing.mjs +59 -23
  95. package/dist/adaptors/testing.mjs.map +1 -1
  96. package/dist/{auth-c6nWnvD8.d.cts → auth-CMwml9QN.d.mts} +4 -4
  97. package/dist/{auth-c6nWnvD8.d.cts.map → auth-CMwml9QN.d.mts.map} +1 -1
  98. package/dist/{auth-pS_U1H_X.d.mts → auth-rVRDjIw_.d.cts} +4 -4
  99. package/dist/{auth-pS_U1H_X.d.mts.map → auth-rVRDjIw_.d.cts.map} +1 -1
  100. package/dist/auth.d.cts +1 -1
  101. package/dist/auth.d.mts +1 -1
  102. package/dist/{cache-B2s0b-ss.d.mts → cache-C9a_hVCc.d.cts} +3 -3
  103. package/dist/{cache-B2s0b-ss.d.mts.map → cache-C9a_hVCc.d.cts.map} +1 -1
  104. package/dist/{cache-CYe2Kzjc.d.cts → cache-CeTMI8LR.d.mts} +3 -3
  105. package/dist/{cache-CYe2Kzjc.d.cts.map → cache-CeTMI8LR.d.mts.map} +1 -1
  106. package/dist/cache.d.cts +1 -1
  107. package/dist/cache.d.mts +1 -1
  108. package/dist/{construct-interface-D2gesxos.d.mts → construct-interface-_3zgxzXl.d.mts} +11 -20
  109. package/dist/{construct-interface-D2gesxos.d.mts.map → construct-interface-_3zgxzXl.d.mts.map} +1 -1
  110. package/dist/{construct-interface-DPusCUSQ.d.cts → construct-interface-_xi4BPN8.d.cts} +11 -20
  111. package/dist/{construct-interface-DPusCUSQ.d.cts.map → construct-interface-_xi4BPN8.d.cts.map} +1 -1
  112. package/dist/construct-interface.cjs +4 -33
  113. package/dist/construct-interface.cjs.map +1 -1
  114. package/dist/construct-interface.d.cts +2 -2
  115. package/dist/construct-interface.d.mts +2 -2
  116. package/dist/construct-interface.mjs +5 -32
  117. package/dist/construct-interface.mjs.map +1 -1
  118. package/dist/credential.cjs +22 -9
  119. package/dist/credential.cjs.map +1 -1
  120. package/dist/credential.d.cts +12 -2
  121. package/dist/credential.d.cts.map +1 -1
  122. package/dist/credential.d.mts +12 -2
  123. package/dist/credential.d.mts.map +1 -1
  124. package/dist/credential.mjs +22 -10
  125. package/dist/credential.mjs.map +1 -1
  126. package/dist/crons/index.cjs +1 -1
  127. package/dist/crons/index.d.cts +2 -2
  128. package/dist/crons/index.d.mts +2 -2
  129. package/dist/crons/index.mjs +1 -1
  130. package/dist/database/kysely.d.cts +1 -1
  131. package/dist/database/kysely.d.mts +1 -1
  132. package/dist/email.d.cts +1 -1
  133. package/dist/email.d.mts +1 -1
  134. package/dist/endpoints/index.cjs +5 -4
  135. package/dist/endpoints/index.d.cts +4 -13
  136. package/dist/endpoints/index.d.cts.map +1 -1
  137. package/dist/endpoints/index.d.mts +4 -13
  138. package/dist/endpoints/index.d.mts.map +1 -1
  139. package/dist/endpoints/index.mjs +4 -3
  140. package/dist/external-api-DS3mujT5.d.mts +86 -0
  141. package/dist/external-api-DS3mujT5.d.mts.map +1 -0
  142. package/dist/external-api-LBfE-q3g.d.cts +86 -0
  143. package/dist/external-api-LBfE-q3g.d.cts.map +1 -0
  144. package/dist/external-api.cjs +124 -0
  145. package/dist/external-api.cjs.map +1 -0
  146. package/dist/external-api.d.cts +2 -0
  147. package/dist/external-api.d.mts +2 -0
  148. package/dist/external-api.mjs +121 -0
  149. package/dist/external-api.mjs.map +1 -0
  150. package/dist/file-server.d.cts +1 -1
  151. package/dist/file-server.d.mts +1 -1
  152. package/dist/functions/index.cjs +1 -1
  153. package/dist/functions/index.d.cts +1 -1
  154. package/dist/functions/index.d.mts +1 -1
  155. package/dist/functions/index.mjs +1 -1
  156. package/dist/{functions-DlFm8HmH.mjs → functions-DCIfCRR-.mjs} +94 -23
  157. package/dist/functions-DCIfCRR-.mjs.map +1 -0
  158. package/dist/{functions-DKN6aQWJ.cjs → functions-ZH60FE7H.cjs} +99 -19
  159. package/dist/functions-ZH60FE7H.cjs.map +1 -0
  160. package/dist/{index-BI23K3wy.d.cts → index-B0kxstwf.d.cts} +36 -24
  161. package/dist/index-B0kxstwf.d.cts.map +1 -0
  162. package/dist/{index-yb3fXNyH.d.mts → index-CjVEjOw0.d.mts} +36 -24
  163. package/dist/index-CjVEjOw0.d.mts.map +1 -0
  164. package/dist/index.cjs +1 -1
  165. package/dist/index.d.cts +1 -1
  166. package/dist/index.d.mts +1 -1
  167. package/dist/index.mjs +1 -1
  168. package/dist/{kysely-CEVXacPN.d.cts → kysely-BJ8IQ_1P.d.mts} +4 -4
  169. package/dist/{kysely-CEVXacPN.d.cts.map → kysely-BJ8IQ_1P.d.mts.map} +1 -1
  170. package/dist/{kysely-mcTdPNhl.d.mts → kysely-DVF8wOT4.d.cts} +4 -4
  171. package/dist/{kysely-mcTdPNhl.d.mts.map → kysely-DVF8wOT4.d.cts.map} +1 -1
  172. package/dist/{lazyAccessors-BHtcqgz2.mjs → lazyAccessors-CFanua0O.mjs} +2 -39
  173. package/dist/lazyAccessors-CFanua0O.mjs.map +1 -0
  174. package/dist/{lazyAccessors-Dx9NLwJZ.cjs → lazyAccessors-hJKGv8Ay.cjs} +1 -50
  175. package/dist/lazyAccessors-hJKGv8Ay.cjs.map +1 -0
  176. package/dist/mobile-app.d.cts +1 -1
  177. package/dist/mobile-app.d.mts +1 -1
  178. package/dist/object-storage.d.cts +1 -1
  179. package/dist/object-storage.d.mts +1 -1
  180. package/dist/processAudits-BpRlPQMW.mjs.map +1 -1
  181. package/dist/processAudits-D_2W5x8k.cjs.map +1 -1
  182. package/dist/queue/index.cjs +4 -78
  183. package/dist/queue/index.d.cts +3 -53
  184. package/dist/queue/index.d.mts +3 -53
  185. package/dist/queue/index.mjs +3 -77
  186. package/dist/rest-api.cjs +2 -4
  187. package/dist/rest-api.cjs.map +1 -1
  188. package/dist/rest-api.d.cts +4 -5
  189. package/dist/rest-api.d.cts.map +1 -1
  190. package/dist/rest-api.d.mts +4 -5
  191. package/dist/rest-api.d.mts.map +1 -1
  192. package/dist/rest-api.mjs +2 -4
  193. package/dist/rest-api.mjs.map +1 -1
  194. package/dist/site.d.cts +1 -1
  195. package/dist/site.d.mts +1 -1
  196. package/dist/subscribers/index.cjs +1 -1
  197. package/dist/subscribers/index.d.cts +2 -2
  198. package/dist/subscribers/index.d.mts +2 -2
  199. package/dist/subscribers/index.mjs +1 -1
  200. package/dist/topic/index.cjs +1 -36
  201. package/dist/topic/index.d.cts +2 -3
  202. package/dist/topic/index.d.mts +2 -3
  203. package/dist/topic/index.mjs +2 -35
  204. package/dist/worker.cjs +26 -17
  205. package/dist/worker.cjs.map +1 -1
  206. package/dist/worker.d.cts +37 -29
  207. package/dist/worker.d.cts.map +1 -1
  208. package/dist/worker.d.mts +37 -29
  209. package/dist/worker.d.mts.map +1 -1
  210. package/dist/worker.mjs +26 -17
  211. package/dist/worker.mjs.map +1 -1
  212. package/package.json +41 -31
  213. package/dist/Construct-DTqYvkPG.d.cts +0 -115
  214. package/dist/Construct-DTqYvkPG.d.cts.map +0 -1
  215. package/dist/Construct-Detz65RA.mjs.map +0 -1
  216. package/dist/Construct-pVadmURD.d.mts +0 -115
  217. package/dist/Construct-pVadmURD.d.mts.map +0 -1
  218. package/dist/Construct-yG9Sw-5p.cjs.map +0 -1
  219. package/dist/Cron-B_iuyNxr.d.mts.map +0 -1
  220. package/dist/Cron-CA2oa2nC.d.cts.map +0 -1
  221. package/dist/CronBuilder-BIKCLWu7.d.mts.map +0 -1
  222. package/dist/CronBuilder-BRkzUOAs.mjs.map +0 -1
  223. package/dist/CronBuilder-B_KqaodP.d.cts.map +0 -1
  224. package/dist/CronBuilder-BbnT7tqo.cjs.map +0 -1
  225. package/dist/Endpoint-1-XYQSx0.d.cts.map +0 -1
  226. package/dist/Endpoint-DO332Dnm.mjs.map +0 -1
  227. package/dist/Endpoint-GFIxYb9L.d.mts.map +0 -1
  228. package/dist/Endpoint-QKuFg5gs.cjs.map +0 -1
  229. package/dist/EndpointFactory-B9HAjDAP.mjs.map +0 -1
  230. package/dist/EndpointFactory-BCZdh_u3.d.mts.map +0 -1
  231. package/dist/EndpointFactory-BmO0WnXE.cjs.map +0 -1
  232. package/dist/EndpointFactory-BnK_YkW1.d.cts.map +0 -1
  233. package/dist/HonoEndpointAdaptor-CiqAZ5Mt.mjs.map +0 -1
  234. package/dist/HonoEndpointAdaptor-DoEQdC3r.cjs.map +0 -1
  235. package/dist/Queue-B7yRXQmL.cjs.map +0 -1
  236. package/dist/Queue-Bhzi2WQC.d.cts.map +0 -1
  237. package/dist/Queue-BoUA-e83.d.mts.map +0 -1
  238. package/dist/Queue-DpKTLl6E.mjs.map +0 -1
  239. package/dist/Subscriber-CIO3pwji.d.mts.map +0 -1
  240. package/dist/Subscriber-DQCaiOXF.d.cts.map +0 -1
  241. package/dist/SubscriberBuilder-B4YRTBng.mjs.map +0 -1
  242. package/dist/SubscriberBuilder-C2FRfd26.d.mts.map +0 -1
  243. package/dist/SubscriberBuilder-C2bCOuPT.cjs.map +0 -1
  244. package/dist/SubscriberBuilder-CjDGSTZc.d.cts.map +0 -1
  245. package/dist/Topic-Ct3Le8Wt.mjs +0 -103
  246. package/dist/Topic-Ct3Le8Wt.mjs.map +0 -1
  247. package/dist/Topic-D5rlM9wS.cjs.map +0 -1
  248. package/dist/Topic-D6blllEn.d.cts +0 -89
  249. package/dist/Topic-D6blllEn.d.cts.map +0 -1
  250. package/dist/Topic-DVvheJ_-.d.mts +0 -89
  251. package/dist/Topic-DVvheJ_-.d.mts.map +0 -1
  252. package/dist/functions-DKN6aQWJ.cjs.map +0 -1
  253. package/dist/functions-DlFm8HmH.mjs.map +0 -1
  254. package/dist/index-BI23K3wy.d.cts.map +0 -1
  255. package/dist/index-fnpjXiA-.d.mts +0 -26
  256. package/dist/index-fnpjXiA-.d.mts.map +0 -1
  257. package/dist/index-tE_119SX.d.cts +0 -26
  258. package/dist/index-tE_119SX.d.cts.map +0 -1
  259. package/dist/index-yb3fXNyH.d.mts.map +0 -1
  260. package/dist/lazyAccessors-BHtcqgz2.mjs.map +0 -1
  261. package/dist/lazyAccessors-Dx9NLwJZ.cjs.map +0 -1
  262. package/dist/queue/index.cjs.map +0 -1
  263. package/dist/queue/index.d.cts.map +0 -1
  264. package/dist/queue/index.d.mts.map +0 -1
  265. package/dist/queue/index.mjs.map +0 -1
  266. package/dist/topic/index.cjs.map +0 -1
  267. package/dist/topic/index.mjs.map +0 -1
@@ -1,10 +1,10 @@
1
1
  import { t as StandardSchemaV1 } from "./index-CeEtxDmK.cjs";
2
- import { a as FunctionHandler, r as Function } from "./index-BI23K3wy.cjs";
3
- import { t as Authenticator } from "./construct-interface-DPusCUSQ.cjs";
2
+ import { o as TopicEvent } from "./Construct-BQALFCh2.cjs";
3
+ import { a as FunctionHandler, r as Function } from "./index-B0kxstwf.cjs";
4
+ import { t as Authenticator } from "./construct-interface-_xi4BPN8.cjs";
4
5
  import { n as LowerHttpMethod, t as HttpMethod } from "./types-DMuSQeLL.cjs";
5
- import { n as AuthSession } from "./auth-c6nWnvD8.cjs";
6
+ import { n as AuthSession } from "./auth-rVRDjIw_.cjs";
6
7
  import { EnvironmentParser } from "@geekmidas/envkit";
7
- import { EventPublisher, ExtractPublisherMessage, MappedEvent } from "@geekmidas/events";
8
8
  import { Logger } from "@geekmidas/logger";
9
9
  import { InferComposableStandardSchema, InferStandardSchema, InferStandardSchemaInput } from "@geekmidas/schema";
10
10
  import { Service, ServiceRecord } from "@geekmidas/services";
@@ -266,7 +266,7 @@ declare class NoAuthenticator extends Error {
266
266
  * });
267
267
  * ```
268
268
  */
269
- declare class Endpoint<TRoute extends string, TMethod extends HttpMethod, TInput extends EndpointSchemas = {}, OutSchema extends StandardSchemaV1 | undefined = undefined, TServices extends Service[] = [], TLogger extends Logger = Logger, TSession = unknown, TEventPublisher extends EventPublisher<any> | undefined = undefined, TEventPublisherServiceName extends string = string, TAuditStorage extends AuditStorage | undefined = undefined, TAuditStorageServiceName extends string = string, TAuditAction extends AuditableAction<string, unknown> = AuditableAction<string, unknown>, TDatabase = undefined, TDatabaseServiceName extends string = string> extends Function<TInput, TServices, TLogger, OutSchema, TEventPublisher, TEventPublisherServiceName, TAuditStorage, TAuditStorageServiceName, TDatabase, TDatabaseServiceName, TAuditAction, FunctionHandler<TInput, TServices, TLogger, OutSchema, TDatabase, TAuditStorage, TAuditAction>> {
269
+ declare class Endpoint<TRoute extends string, TMethod extends HttpMethod, TInput extends EndpointSchemas = {}, OutSchema extends StandardSchemaV1 | undefined = undefined, TServices extends Service[] = [], TLogger extends Logger = Logger, TSession = unknown, TAuditStorage extends AuditStorage | undefined = undefined, TAuditStorageServiceName extends string = string, TAuditAction extends AuditableAction<string, unknown> = AuditableAction<string, unknown>, TDatabase = undefined, TDatabaseServiceName extends string = string> extends Function<TInput, TServices, TLogger, OutSchema, TAuditStorage, TAuditStorageServiceName, TDatabase, TDatabaseServiceName, TAuditAction, FunctionHandler<TInput, TServices, TLogger, OutSchema, TDatabase, TAuditStorage, TAuditAction>> {
270
270
  operationId?: string;
271
271
  /** The route path pattern with parameter placeholders */
272
272
  route: TRoute;
@@ -454,7 +454,7 @@ declare class Endpoint<TRoute extends string, TMethod extends HttpMethod, TInput
454
454
  * @param options.status - Success HTTP status code (default: 200)
455
455
  * @param options.authorizer - Optional authorizer configuration
456
456
  */
457
- constructor({ fn, method, route, description, tags, input, logger, output: outputSchema, services, constructs, timeout, memorySize, getSession, authorize, rateLimit, status, publisherService, events, authorizer, surface, auditorStorageService, actorExtractor, audits, databaseService, rlsConfig, rlsBypass, responseType }: EndpointOptions<TRoute, TMethod, TInput, OutSchema, TServices, TLogger, TSession, OutSchema, TEventPublisher, TEventPublisherServiceName, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName>);
457
+ constructor({ fn, method, route, description, tags, input, logger, output: outputSchema, services, constructs, timeout, memorySize, getSession, authorize, rateLimit, status, events, authorizer, surface, auditorStorageService, actorExtractor, audits, databaseService, rlsConfig, rlsBypass, responseType }: EndpointOptions<TRoute, TMethod, TInput, OutSchema, TServices, TLogger, TSession, OutSchema, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName>);
458
458
  }
459
459
  /**
460
460
  * The surface an endpoint was built from.
@@ -501,7 +501,7 @@ interface EndpointSurface {
501
501
  * @template TLogger - Logger type
502
502
  * @template TSession - Session data type
503
503
  */
504
- interface EndpointOptions<TRoute extends string, TMethod extends HttpMethod, TInput extends EndpointSchemas = {}, TOutput extends StandardSchemaV1 | undefined = undefined, TServices extends Service[] = [], TLogger extends Logger = Logger, TSession = unknown, OutSchema extends StandardSchemaV1 | undefined = undefined, TEventPublisher extends EventPublisher<any> | undefined = undefined, TEventPublisherServiceName extends string = string, TAuditStorage extends AuditStorage | undefined = undefined, TAuditStorageServiceName extends string = string, TAuditAction extends AuditableAction<string, unknown> = AuditableAction<string, unknown>, TDatabase = undefined, TDatabaseServiceName extends string = string> {
504
+ interface EndpointOptions<TRoute extends string, TMethod extends HttpMethod, TInput extends EndpointSchemas = {}, TOutput extends StandardSchemaV1 | undefined = undefined, TServices extends Service[] = [], TLogger extends Logger = Logger, TSession = unknown, OutSchema extends StandardSchemaV1 | undefined = undefined, TAuditStorage extends AuditStorage | undefined = undefined, TAuditStorageServiceName extends string = string, TAuditAction extends AuditableAction<string, unknown> = AuditableAction<string, unknown>, TDatabase = undefined, TDatabaseServiceName extends string = string> {
505
505
  /** The route path with parameter placeholders */
506
506
  route: TRoute;
507
507
  /** The HTTP method for this endpoint */
@@ -539,11 +539,8 @@ interface EndpointOptions<TRoute extends string, TMethod extends HttpMethod, TIn
539
539
  rateLimit?: RateLimitConfig;
540
540
  /** Success HTTP status code */
541
541
  status: SuccessStatus | undefined;
542
- /**
543
- * Event publisher service for publishing events from this endpoint
544
- */
545
- publisherService?: Service<TEventPublisherServiceName, TEventPublisher>;
546
- events?: MappedEvent<TEventPublisher, OutSchema>[];
542
+ /** What it publishes once its handler succeeds, each to its own topic. */
543
+ events?: TopicEvent[];
547
544
  /** Optional authorizer configuration */
548
545
  authorizer?: Authorizer;
549
546
  /** The surface this endpoint was built from. Every endpoint has one. */
@@ -872,4 +869,4 @@ declare enum SuccessStatus {
872
869
  type EndpointOutput<T> = T extends Endpoint<any, any, any, infer OutSchema, any, any, any, any> ? InferStandardSchema<OutSchema> : never;
873
870
  //#endregion
874
871
  export { getSecurityScheme as A, Authorizer as C, OAuthFlows as D, OAuthFlow as E, SecurityScheme as O, MappedAudit as S, BuiltInSecuritySchemeId as T, RlsBypass as _, EndpointContext as a, RlsContextExtractor as b, EndpointSchemas as c, ResponseBuilder as d, SessionFn as f, RLS_BYPASS as g, SessionAuth as h, Endpoint as i, isBuiltInSecurityScheme as j, createAuthorizer as k, EndpointSurface as l, NoAuthenticator as m, ConvertRouteParams as n, EndpointHandler as o, SuccessStatus as p, CookieFn as r, EndpointOutput as s, AuthorizeFn as t, HeaderFn as u, RlsConfig as v, BUILT_IN_SECURITY_SCHEMES as w, ActorExtractor as x, RlsContext as y };
875
- //# sourceMappingURL=Endpoint-1-XYQSx0.d.cts.map
872
+ //# sourceMappingURL=Endpoint-Dp5AKIXl.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Endpoint-Dp5AKIXl.d.cts","names":[],"sources":["../src/endpoints/Authorizer.ts","../src/endpoints/audit.ts","../src/endpoints/rls.ts","../src/endpoints/sessionAuth.ts","../src/endpoints/Endpoint.ts"],"mappings":"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"}
@@ -1,11 +1,11 @@
1
1
  import { t as StandardSchemaV1 } from "./index-CeEtxDmK.mjs";
2
- import { a as FunctionHandler, r as Function } from "./index-yb3fXNyH.mjs";
3
- import { t as Authenticator } from "./construct-interface-D2gesxos.mjs";
2
+ import { o as TopicEvent } from "./Construct-QXnl3VqT.mjs";
3
+ import { a as FunctionHandler, r as Function } from "./index-CjVEjOw0.mjs";
4
+ import { t as Authenticator } from "./construct-interface-_3zgxzXl.mjs";
4
5
  import { n as LowerHttpMethod, t as HttpMethod } from "./types-DMuSQeLL.mjs";
5
- import { n as AuthSession } from "./auth-pS_U1H_X.mjs";
6
+ import { n as AuthSession } from "./auth-CMwml9QN.mjs";
6
7
  import { ComponentCollector, OpenApiSchemaOptions } from "@geekmidas/schema/openapi";
7
8
  import { EnvironmentParser } from "@geekmidas/envkit";
8
- import { EventPublisher, ExtractPublisherMessage, MappedEvent } from "@geekmidas/events";
9
9
  import { RateLimitConfig } from "@geekmidas/rate-limit";
10
10
  import { Service, ServiceRecord } from "@geekmidas/services";
11
11
  import { AuditActor, AuditStorage, AuditableAction, Auditor, ExtractAuditPayload, ExtractAuditType } from "@geekmidas/audit";
@@ -266,7 +266,7 @@ declare class NoAuthenticator extends Error {
266
266
  * });
267
267
  * ```
268
268
  */
269
- declare class Endpoint<TRoute extends string, TMethod extends HttpMethod, TInput extends EndpointSchemas = {}, OutSchema extends StandardSchemaV1 | undefined = undefined, TServices extends Service[] = [], TLogger extends Logger = Logger, TSession = unknown, TEventPublisher extends EventPublisher<any> | undefined = undefined, TEventPublisherServiceName extends string = string, TAuditStorage extends AuditStorage | undefined = undefined, TAuditStorageServiceName extends string = string, TAuditAction extends AuditableAction<string, unknown> = AuditableAction<string, unknown>, TDatabase = undefined, TDatabaseServiceName extends string = string> extends Function<TInput, TServices, TLogger, OutSchema, TEventPublisher, TEventPublisherServiceName, TAuditStorage, TAuditStorageServiceName, TDatabase, TDatabaseServiceName, TAuditAction, FunctionHandler<TInput, TServices, TLogger, OutSchema, TDatabase, TAuditStorage, TAuditAction>> {
269
+ declare class Endpoint<TRoute extends string, TMethod extends HttpMethod, TInput extends EndpointSchemas = {}, OutSchema extends StandardSchemaV1 | undefined = undefined, TServices extends Service[] = [], TLogger extends Logger = Logger, TSession = unknown, TAuditStorage extends AuditStorage | undefined = undefined, TAuditStorageServiceName extends string = string, TAuditAction extends AuditableAction<string, unknown> = AuditableAction<string, unknown>, TDatabase = undefined, TDatabaseServiceName extends string = string> extends Function<TInput, TServices, TLogger, OutSchema, TAuditStorage, TAuditStorageServiceName, TDatabase, TDatabaseServiceName, TAuditAction, FunctionHandler<TInput, TServices, TLogger, OutSchema, TDatabase, TAuditStorage, TAuditAction>> {
270
270
  operationId?: string;
271
271
  /** The route path pattern with parameter placeholders */
272
272
  route: TRoute;
@@ -454,7 +454,7 @@ declare class Endpoint<TRoute extends string, TMethod extends HttpMethod, TInput
454
454
  * @param options.status - Success HTTP status code (default: 200)
455
455
  * @param options.authorizer - Optional authorizer configuration
456
456
  */
457
- constructor({ fn, method, route, description, tags, input, logger, output: outputSchema, services, constructs, timeout, memorySize, getSession, authorize, rateLimit, status, publisherService, events, authorizer, surface, auditorStorageService, actorExtractor, audits, databaseService, rlsConfig, rlsBypass, responseType }: EndpointOptions<TRoute, TMethod, TInput, OutSchema, TServices, TLogger, TSession, OutSchema, TEventPublisher, TEventPublisherServiceName, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName>);
457
+ constructor({ fn, method, route, description, tags, input, logger, output: outputSchema, services, constructs, timeout, memorySize, getSession, authorize, rateLimit, status, events, authorizer, surface, auditorStorageService, actorExtractor, audits, databaseService, rlsConfig, rlsBypass, responseType }: EndpointOptions<TRoute, TMethod, TInput, OutSchema, TServices, TLogger, TSession, OutSchema, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName>);
458
458
  }
459
459
  /**
460
460
  * The surface an endpoint was built from.
@@ -501,7 +501,7 @@ interface EndpointSurface {
501
501
  * @template TLogger - Logger type
502
502
  * @template TSession - Session data type
503
503
  */
504
- interface EndpointOptions<TRoute extends string, TMethod extends HttpMethod, TInput extends EndpointSchemas = {}, TOutput extends StandardSchemaV1 | undefined = undefined, TServices extends Service[] = [], TLogger extends Logger = Logger, TSession = unknown, OutSchema extends StandardSchemaV1 | undefined = undefined, TEventPublisher extends EventPublisher<any> | undefined = undefined, TEventPublisherServiceName extends string = string, TAuditStorage extends AuditStorage | undefined = undefined, TAuditStorageServiceName extends string = string, TAuditAction extends AuditableAction<string, unknown> = AuditableAction<string, unknown>, TDatabase = undefined, TDatabaseServiceName extends string = string> {
504
+ interface EndpointOptions<TRoute extends string, TMethod extends HttpMethod, TInput extends EndpointSchemas = {}, TOutput extends StandardSchemaV1 | undefined = undefined, TServices extends Service[] = [], TLogger extends Logger = Logger, TSession = unknown, OutSchema extends StandardSchemaV1 | undefined = undefined, TAuditStorage extends AuditStorage | undefined = undefined, TAuditStorageServiceName extends string = string, TAuditAction extends AuditableAction<string, unknown> = AuditableAction<string, unknown>, TDatabase = undefined, TDatabaseServiceName extends string = string> {
505
505
  /** The route path with parameter placeholders */
506
506
  route: TRoute;
507
507
  /** The HTTP method for this endpoint */
@@ -539,11 +539,8 @@ interface EndpointOptions<TRoute extends string, TMethod extends HttpMethod, TIn
539
539
  rateLimit?: RateLimitConfig;
540
540
  /** Success HTTP status code */
541
541
  status: SuccessStatus | undefined;
542
- /**
543
- * Event publisher service for publishing events from this endpoint
544
- */
545
- publisherService?: Service<TEventPublisherServiceName, TEventPublisher>;
546
- events?: MappedEvent<TEventPublisher, OutSchema>[];
542
+ /** What it publishes once its handler succeeds, each to its own topic. */
543
+ events?: TopicEvent[];
547
544
  /** Optional authorizer configuration */
548
545
  authorizer?: Authorizer;
549
546
  /** The surface this endpoint was built from. Every endpoint has one. */
@@ -872,4 +869,4 @@ declare enum SuccessStatus {
872
869
  type EndpointOutput<T> = T extends Endpoint<any, any, any, infer OutSchema, any, any, any, any> ? InferStandardSchema<OutSchema> : never;
873
870
  //#endregion
874
871
  export { getSecurityScheme as A, Authorizer as C, OAuthFlows as D, OAuthFlow as E, SecurityScheme as O, MappedAudit as S, BuiltInSecuritySchemeId as T, RlsBypass as _, EndpointContext as a, RlsContextExtractor as b, EndpointSchemas as c, ResponseBuilder as d, SessionFn as f, RLS_BYPASS as g, SessionAuth as h, Endpoint as i, isBuiltInSecurityScheme as j, createAuthorizer as k, EndpointSurface as l, NoAuthenticator as m, ConvertRouteParams as n, EndpointHandler as o, SuccessStatus as p, CookieFn as r, EndpointOutput as s, AuthorizeFn as t, HeaderFn as u, RlsConfig as v, BUILT_IN_SECURITY_SCHEMES as w, ActorExtractor as x, RlsContext as y };
875
- //# sourceMappingURL=Endpoint-GFIxYb9L.d.mts.map
872
+ //# sourceMappingURL=Endpoint-DtI7heFm.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Endpoint-DtI7heFm.d.mts","names":[],"sources":["../src/endpoints/Authorizer.ts","../src/endpoints/audit.ts","../src/endpoints/rls.ts","../src/endpoints/sessionAuth.ts","../src/endpoints/Endpoint.ts"],"mappings":"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"}
@@ -1,8 +1,8 @@
1
- import { o as __toESM } from "./Construct-Detz65RA.mjs";
2
- import { edgesWith, idsOf, isConsumable, serviceOf, servicesOf } from "./construct-interface.mjs";
3
- import { i as require_lodash_uniqby, r as BaseFunctionBuilder } from "./functions-DlFm8HmH.mjs";
1
+ import { o as __toESM } from "./Construct-BO1X-kt9.mjs";
2
+ import { idsOf, isConsumable, serviceOf, servicesOf } from "./construct-interface.mjs";
3
+ import { o as require_lodash_uniqby, r as BaseFunctionBuilder } from "./functions-DCIfCRR-.mjs";
4
4
  import { t as cloneWith } from "./clone-EKNovYHu.mjs";
5
- import { t as Endpoint } from "./Endpoint-DO332Dnm.mjs";
5
+ import { t as Endpoint } from "./Endpoint-CQAeh1Rh.mjs";
6
6
  import { DEFAULT_LOGGER } from "@geekmidas/logger/console";
7
7
  //#region src/endpoints/Authorizer.ts
8
8
  /**
@@ -107,9 +107,6 @@ var EndpointBuilder = class extends BaseFunctionBuilder {
107
107
  this.route = route;
108
108
  this.method = method;
109
109
  }
110
- _setPublisher(publisher) {
111
- this._publisher = publisher;
112
- }
113
110
  _setAuditorStorage(storage) {
114
111
  this._auditorStorage = storage;
115
112
  }
@@ -122,8 +119,23 @@ var EndpointBuilder = class extends BaseFunctionBuilder {
122
119
  status(status) {
123
120
  return cloneWith(this, { _status: status });
124
121
  }
125
- event(event) {
126
- return cloneWith(this, { _events: [...this._events, event] });
122
+ /**
123
+ * Publish `event` to `topic` once the handler has succeeded — repeatable,
124
+ * one call per event, to as many topics as the endpoint names. The topic
125
+ * becomes a dependency as with `.dependsOn([topic])`, so `services.<topic>`
126
+ * is there for events the handler decides on itself.
127
+ *
128
+ * @example
129
+ * ```ts
130
+ * router.post('/users')
131
+ * .event(users, {
132
+ * type: 'user.created',
133
+ * payload: (user) => ({ userId: user.id, email: user.email }),
134
+ * })
135
+ * ```
136
+ */
137
+ event(topic, event) {
138
+ return this.withEvent(topic, event);
127
139
  }
128
140
  tags(tags) {
129
141
  return cloneWith(this, { _tags: tags });
@@ -152,12 +164,6 @@ var EndpointBuilder = class extends BaseFunctionBuilder {
152
164
  responseType(type) {
153
165
  return cloneWith(this, { _responseType: type });
154
166
  }
155
- publisher(publisher) {
156
- return cloneWith(this, {
157
- _constructs: edgesWith(publisher, this._constructs),
158
- _publisher: publisher
159
- });
160
- }
161
167
  body(schema) {
162
168
  this.schemas.body = schema;
163
169
  return this;
@@ -349,7 +355,6 @@ var EndpointBuilder = class extends BaseFunctionBuilder {
349
355
  status: this._status,
350
356
  getSession: this._getSession,
351
357
  rateLimit: this._rateLimit,
352
- publisherService: this._publisher,
353
358
  events: this._events,
354
359
  authorizer,
355
360
  surface: this._surface,
@@ -382,7 +387,6 @@ var EndpointFactory = class EndpointFactory {
382
387
  defaultConstructs = [];
383
388
  basePath = "";
384
389
  defaultAuthorizeFn;
385
- defaultEventPublisher;
386
390
  defaultSessionExtractor;
387
391
  defaultLogger;
388
392
  /**
@@ -400,14 +404,13 @@ var EndpointFactory = class EndpointFactory {
400
404
  defaultActorExtractor;
401
405
  customSecuritySchemes;
402
406
  defaultRlsConfig;
403
- constructor({ basePath, defaultAuthorizeFn, defaultLogger = DEFAULT_LOGGER, defaultSessionExtractor, defaultServices = [], defaultConstructs = [], defaultEventPublisher, availableAuthorizers = [], defaultAuthorizerName, defaultAuditorStorage, defaultDatabaseService, defaultActorExtractor, customSecuritySchemes = {}, defaultRlsConfig, surface }) {
407
+ constructor({ basePath, defaultAuthorizeFn, defaultLogger = DEFAULT_LOGGER, defaultSessionExtractor, defaultServices = [], defaultConstructs = [], availableAuthorizers = [], defaultAuthorizerName, defaultAuditorStorage, defaultDatabaseService, defaultActorExtractor, customSecuritySchemes = {}, defaultRlsConfig, surface }) {
404
408
  this.defaultConstructs = [...new Set(defaultConstructs)];
405
409
  this.defaultServices = (0, import_lodash_uniqby.default)(defaultServices, (s) => s.serviceName);
406
410
  this.basePath = basePath || "";
407
411
  this.defaultAuthorizeFn = defaultAuthorizeFn;
408
412
  this.defaultLogger = defaultLogger;
409
413
  this.defaultSessionExtractor = defaultSessionExtractor;
410
- this.defaultEventPublisher = defaultEventPublisher;
411
414
  this.availableAuthorizers = availableAuthorizers;
412
415
  this.defaultAuthorizerName = defaultAuthorizerName;
413
416
  this.defaultAuditorStorage = defaultAuditorStorage;
@@ -439,7 +442,6 @@ var EndpointFactory = class EndpointFactory {
439
442
  defaultAuthorizeFn: this.defaultAuthorizeFn,
440
443
  defaultLogger: this.defaultLogger,
441
444
  defaultSessionExtractor: this.defaultSessionExtractor,
442
- defaultEventPublisher: this.defaultEventPublisher,
443
445
  availableAuthorizers: authorizerConfigs,
444
446
  defaultAuthorizerName: this.defaultAuthorizerName,
445
447
  defaultAuditorStorage: this.defaultAuditorStorage,
@@ -474,7 +476,6 @@ var EndpointFactory = class EndpointFactory {
474
476
  defaultAuthorizeFn: this.defaultAuthorizeFn,
475
477
  defaultLogger: this.defaultLogger,
476
478
  defaultSessionExtractor: this.defaultSessionExtractor,
477
- defaultEventPublisher: this.defaultEventPublisher,
478
479
  availableAuthorizers: this.availableAuthorizers,
479
480
  defaultAuthorizerName: this.defaultAuthorizerName,
480
481
  defaultAuditorStorage: this.defaultAuditorStorage,
@@ -512,7 +513,6 @@ var EndpointFactory = class EndpointFactory {
512
513
  defaultAuthorizeFn: this.defaultAuthorizeFn,
513
514
  defaultLogger: this.defaultLogger,
514
515
  defaultSessionExtractor: this.defaultSessionExtractor,
515
- defaultEventPublisher: this.defaultEventPublisher,
516
516
  availableAuthorizers: this.availableAuthorizers,
517
517
  defaultAuthorizerName: name === "none" ? void 0 : name,
518
518
  defaultAuditorStorage: this.defaultAuditorStorage,
@@ -532,7 +532,6 @@ var EndpointFactory = class EndpointFactory {
532
532
  defaultAuthorizeFn: this.defaultAuthorizeFn,
533
533
  defaultLogger: this.defaultLogger,
534
534
  defaultSessionExtractor: this.defaultSessionExtractor,
535
- defaultEventPublisher: this.defaultEventPublisher,
536
535
  availableAuthorizers: this.availableAuthorizers,
537
536
  defaultAuthorizerName: this.defaultAuthorizerName,
538
537
  defaultAuditorStorage: this.defaultAuditorStorage,
@@ -551,7 +550,6 @@ var EndpointFactory = class EndpointFactory {
551
550
  defaultAuthorizeFn: fn,
552
551
  defaultLogger: this.defaultLogger,
553
552
  defaultSessionExtractor: this.defaultSessionExtractor,
554
- defaultEventPublisher: this.defaultEventPublisher,
555
553
  availableAuthorizers: this.availableAuthorizers,
556
554
  defaultAuthorizerName: this.defaultAuthorizerName,
557
555
  defaultAuditorStorage: this.defaultAuditorStorage,
@@ -586,7 +584,6 @@ var EndpointFactory = class EndpointFactory {
586
584
  defaultAuthorizeFn: this.defaultAuthorizeFn,
587
585
  defaultLogger: this.defaultLogger,
588
586
  defaultSessionExtractor: this.defaultSessionExtractor,
589
- defaultEventPublisher: this.defaultEventPublisher,
590
587
  availableAuthorizers: this.availableAuthorizers,
591
588
  defaultAuthorizerName: this.defaultAuthorizerName,
592
589
  defaultAuditorStorage: this.defaultAuditorStorage,
@@ -605,26 +602,6 @@ var EndpointFactory = class EndpointFactory {
605
602
  defaultAuthorizeFn: this.defaultAuthorizeFn,
606
603
  defaultLogger: logger,
607
604
  defaultSessionExtractor: this.defaultSessionExtractor,
608
- defaultEventPublisher: this.defaultEventPublisher,
609
- availableAuthorizers: this.availableAuthorizers,
610
- defaultAuthorizerName: this.defaultAuthorizerName,
611
- defaultAuditorStorage: this.defaultAuditorStorage,
612
- defaultDatabaseService: this.defaultDatabaseService,
613
- defaultActorExtractor: this.defaultActorExtractor,
614
- customSecuritySchemes: this.customSecuritySchemes,
615
- surface: this.surface,
616
- defaultRlsConfig: this.defaultRlsConfig
617
- });
618
- }
619
- publisher(publisher) {
620
- return new EndpointFactory({
621
- defaultServices: this.defaultServices,
622
- defaultConstructs: edgesWith(publisher, this.defaultConstructs),
623
- basePath: this.basePath,
624
- defaultAuthorizeFn: this.defaultAuthorizeFn,
625
- defaultLogger: this.defaultLogger,
626
- defaultSessionExtractor: this.defaultSessionExtractor,
627
- defaultEventPublisher: publisher,
628
605
  availableAuthorizers: this.availableAuthorizers,
629
606
  defaultAuthorizerName: this.defaultAuthorizerName,
630
607
  defaultAuditorStorage: this.defaultAuditorStorage,
@@ -643,7 +620,6 @@ var EndpointFactory = class EndpointFactory {
643
620
  defaultAuthorizeFn: this.defaultAuthorizeFn,
644
621
  defaultLogger: this.defaultLogger,
645
622
  defaultSessionExtractor: session,
646
- defaultEventPublisher: this.defaultEventPublisher,
647
623
  availableAuthorizers: this.availableAuthorizers,
648
624
  defaultAuthorizerName: this.defaultAuthorizerName,
649
625
  defaultAuditorStorage: this.defaultAuditorStorage,
@@ -667,7 +643,6 @@ var EndpointFactory = class EndpointFactory {
667
643
  defaultAuthorizeFn: this.defaultAuthorizeFn,
668
644
  defaultLogger: this.defaultLogger,
669
645
  defaultSessionExtractor: this.defaultSessionExtractor,
670
- defaultEventPublisher: this.defaultEventPublisher,
671
646
  availableAuthorizers: this.availableAuthorizers,
672
647
  defaultAuthorizerName: this.defaultAuthorizerName,
673
648
  defaultAuditorStorage: this.defaultAuditorStorage,
@@ -690,7 +665,6 @@ var EndpointFactory = class EndpointFactory {
690
665
  defaultAuthorizeFn: this.defaultAuthorizeFn,
691
666
  defaultLogger: this.defaultLogger,
692
667
  defaultSessionExtractor: this.defaultSessionExtractor,
693
- defaultEventPublisher: this.defaultEventPublisher,
694
668
  availableAuthorizers: this.availableAuthorizers,
695
669
  defaultAuthorizerName: this.defaultAuthorizerName,
696
670
  defaultAuditorStorage: storage,
@@ -713,7 +687,6 @@ var EndpointFactory = class EndpointFactory {
713
687
  defaultAuthorizeFn: this.defaultAuthorizeFn,
714
688
  defaultLogger: this.defaultLogger,
715
689
  defaultSessionExtractor: this.defaultSessionExtractor,
716
- defaultEventPublisher: this.defaultEventPublisher,
717
690
  availableAuthorizers: this.availableAuthorizers,
718
691
  defaultAuthorizerName: this.defaultAuthorizerName,
719
692
  defaultAuditorStorage: this.defaultAuditorStorage,
@@ -750,7 +723,6 @@ var EndpointFactory = class EndpointFactory {
750
723
  defaultAuthorizeFn: this.defaultAuthorizeFn,
751
724
  defaultLogger: this.defaultLogger,
752
725
  defaultSessionExtractor: this.defaultSessionExtractor,
753
- defaultEventPublisher: this.defaultEventPublisher,
754
726
  availableAuthorizers: this.availableAuthorizers,
755
727
  defaultAuthorizerName: this.defaultAuthorizerName,
756
728
  defaultAuditorStorage: this.defaultAuditorStorage,
@@ -769,7 +741,6 @@ var EndpointFactory = class EndpointFactory {
769
741
  if (this.defaultLogger) builder._logger = this.defaultLogger;
770
742
  builder._surface = this.surface;
771
743
  if (this.defaultSessionExtractor) builder._getSession = this.defaultSessionExtractor;
772
- if (this.defaultEventPublisher) builder._setPublisher(this.defaultEventPublisher);
773
744
  builder._availableAuthorizers = this.availableAuthorizers;
774
745
  if (this.defaultAuthorizerName) builder._authorizerName = this.defaultAuthorizerName;
775
746
  if (this.defaultAuditorStorage) builder._setAuditorStorage(this.defaultAuditorStorage);
@@ -801,4 +772,4 @@ var EndpointFactory = class EndpointFactory {
801
772
  //#endregion
802
773
  export { createAuthorizer as a, BUILT_IN_SECURITY_SCHEMES as i, EndpointBuilder as n, getSecurityScheme as o, RLS_BYPASS as r, isBuiltInSecurityScheme as s, EndpointFactory as t };
803
774
 
804
- //# sourceMappingURL=EndpointFactory-B9HAjDAP.mjs.map
775
+ //# sourceMappingURL=EndpointFactory-BBdNeaGJ.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EndpointFactory-BBdNeaGJ.mjs","names":["uniqBy","uniqBy"],"sources":["../src/endpoints/Authorizer.ts","../src/endpoints/rls.ts","../src/endpoints/EndpointBuilder.ts","../src/endpoints/EndpointFactory.ts"],"sourcesContent":["/**\n * OpenAPI 3.1 compliant security scheme definition.\n * @see https://spec.openapis.org/oas/v3.1.0#security-scheme-object\n */\nexport interface SecurityScheme {\n\t/** The type of the security scheme */\n\ttype: 'apiKey' | 'http' | 'mutualTLS' | 'oauth2' | 'openIdConnect';\n\t/** A description for security scheme */\n\tdescription?: string;\n\t/** Required for apiKey. The name of the header, query or cookie parameter */\n\tname?: string;\n\t/** Required for apiKey. The location of the API key */\n\tin?: 'query' | 'header' | 'cookie';\n\t/** Required for http. The name of the HTTP Authorization scheme (e.g., 'bearer') */\n\tscheme?: string;\n\t/** Optional for http bearer. A hint to the format of the bearer token */\n\tbearerFormat?: string;\n\t/** Required for oauth2. An object containing configuration for the flow types */\n\tflows?: OAuthFlows;\n\t/** Required for openIdConnect. The URL to discover OAuth2 configuration */\n\topenIdConnectUrl?: string;\n\t/** Vendor extensions (e.g., x-amazon-apigateway-authtype) */\n\t[key: `x-${string}`]: unknown;\n}\n\n/**\n * OAuth2 flow configuration\n */\nexport interface OAuthFlows {\n\timplicit?: OAuthFlow;\n\tpassword?: OAuthFlow;\n\tclientCredentials?: OAuthFlow;\n\tauthorizationCode?: OAuthFlow;\n}\n\nexport interface OAuthFlow {\n\tauthorizationUrl?: string;\n\ttokenUrl?: string;\n\trefreshUrl?: string;\n\tscopes: Record<string, string>;\n}\n\n/**\n * Built-in security schemes available by default.\n * Users can use these without defining them via .securitySchemes().\n */\nexport const BUILT_IN_SECURITY_SCHEMES = {\n\tjwt: {\n\t\ttype: 'http',\n\t\tscheme: 'bearer',\n\t\tbearerFormat: 'JWT',\n\t\tdescription: 'JWT Bearer token authentication',\n\t},\n\tbearer: {\n\t\ttype: 'http',\n\t\tscheme: 'bearer',\n\t\tdescription: 'Bearer token authentication',\n\t},\n\tapiKey: {\n\t\ttype: 'apiKey',\n\t\tin: 'header',\n\t\tname: 'X-API-Key',\n\t\tdescription: 'API key authentication via header',\n\t},\n\toauth2: {\n\t\ttype: 'oauth2',\n\t\tflows: {},\n\t\tdescription: 'OAuth 2.0 authentication',\n\t},\n\toidc: {\n\t\ttype: 'openIdConnect',\n\t\topenIdConnectUrl: '',\n\t\tdescription: 'OpenID Connect authentication',\n\t},\n\tiam: {\n\t\ttype: 'apiKey',\n\t\tin: 'header',\n\t\tname: 'Authorization',\n\t\tdescription: 'AWS IAM Signature Version 4 authentication',\n\t\t'x-amazon-apigateway-authtype': 'awsSigv4',\n\t},\n} as const satisfies Record<string, SecurityScheme>;\n\n/** Names of built-in security schemes */\nexport type BuiltInSecuritySchemeId = keyof typeof BUILT_IN_SECURITY_SCHEMES;\n\n/**\n * Represents an authorizer configuration for endpoints\n */\nexport interface Authorizer {\n\t/**\n\t * Unique identifier for the authorizer\n\t */\n\tname: string;\n\t/**\n\t * The OpenAPI security scheme definition for this authorizer\n\t */\n\tsecurityScheme?: SecurityScheme;\n\t/**\n\t * Type of authorizer (e.g., 'iam', 'jwt', 'custom')\n\t * @deprecated Use securityScheme.type instead\n\t */\n\ttype?: string;\n\t/**\n\t * Description of what this authorizer does\n\t * @deprecated Use securityScheme.description instead\n\t */\n\tdescription?: string;\n\t/**\n\t * Additional metadata specific to the authorizer type\n\t * @deprecated Use securityScheme with x-* extensions instead\n\t */\n\tmetadata?: Record<string, unknown>;\n}\n\n/**\n * Helper to create an authorizer configuration\n */\nexport function createAuthorizer(\n\tname: string,\n\toptions?: Omit<Authorizer, 'name'>,\n): Authorizer {\n\treturn {\n\t\tname,\n\t\t...options,\n\t};\n}\n\n/**\n * Check if a name is a built-in security scheme\n */\nexport function isBuiltInSecurityScheme(\n\tname: string,\n): name is BuiltInSecuritySchemeId {\n\treturn name in BUILT_IN_SECURITY_SCHEMES;\n}\n\n/**\n * Get a security scheme by name (built-in or custom)\n */\nexport function getSecurityScheme(\n\tname: string,\n\tcustomSchemes?: Record<string, SecurityScheme>,\n): SecurityScheme | undefined {\n\tif (customSchemes && name in customSchemes) {\n\t\treturn customSchemes[name];\n\t}\n\tif (isBuiltInSecurityScheme(name)) {\n\t\treturn BUILT_IN_SECURITY_SCHEMES[name];\n\t}\n\treturn undefined;\n}\n","import type { Logger } from '@geekmidas/logger';\nimport type { Service, ServiceRecord } from '@geekmidas/services';\nimport type { CookieFn, HeaderFn } from './Endpoint';\n\n/**\n * RLS context - key-value pairs to set as PostgreSQL session variables.\n * Keys become `prefix.key` (e.g., `app.user_id`).\n */\nexport interface RlsContext {\n\t[key: string]: string | number | boolean | null | undefined;\n}\n\n/**\n * Function type for extracting RLS context from request context.\n *\n * @template TServices - Available service dependencies\n * @template TSession - Session data type\n * @template TLogger - Logger type\n *\n * @example\n * ```ts\n * const extractor: RlsContextExtractor<[], UserSession> = ({ session }) => ({\n * user_id: session.userId,\n * tenant_id: session.tenantId,\n * roles: session.roles.join(','),\n * });\n * ```\n */\nexport type RlsContextExtractor<\n\tTServices extends Service[] = [],\n\tTSession = unknown,\n\tTLogger extends Logger = Logger,\n> = (ctx: {\n\tservices: ServiceRecord<TServices>;\n\tsession: TSession;\n\theader: HeaderFn;\n\tcookie: CookieFn;\n\tlogger: TLogger;\n}) => RlsContext | Promise<RlsContext>;\n\n/**\n * Configuration for RLS on an endpoint or factory.\n *\n * @template TServices - Available service dependencies\n * @template TSession - Session data type\n * @template TLogger - Logger type\n */\nexport interface RlsConfig<\n\tTServices extends Service[] = [],\n\tTSession = unknown,\n\tTLogger extends Logger = Logger,\n> {\n\t/** Function to extract RLS context from request */\n\textractor: RlsContextExtractor<TServices, TSession, TLogger>;\n\t/** Prefix for PostgreSQL session variables (default: 'app') */\n\tprefix?: string;\n}\n\n/**\n * Symbol used to bypass RLS for an endpoint.\n */\nexport const RLS_BYPASS = Symbol.for('geekmidas.rls.bypass');\n\n/**\n * Type for RLS bypass marker.\n */\nexport type RlsBypass = typeof RLS_BYPASS;\n","import type {\n\tAuditableAction,\n\tAuditStorage,\n\tExtractStorageAuditAction,\n} from '@geekmidas/audit';\nimport type { Logger } from '@geekmidas/logger';\nimport type { RateLimitConfig } from '@geekmidas/rate-limit';\nimport type { InferStandardSchema } from '@geekmidas/schema';\nimport type { Service } from '@geekmidas/services';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\nimport uniqBy from 'lodash.uniqby';\nimport { ConstructType } from '../Construct';\nimport { cloneWith } from '../clone';\nimport {\n\ttype Consumable,\n\tidsOf,\n\ttype ServicesOf,\n\tserviceOf,\n\tservicesOf,\n} from '../construct-interface';\nimport { BaseFunctionBuilder } from '../functions';\nimport type { EventFor } from '../publisher';\nimport type { Topic } from '../topic/Topic';\nimport type { HttpMethod } from '../types';\nimport type { Authorizer, SecurityScheme } from './Authorizer';\nimport { getSecurityScheme } from './Authorizer';\nimport type { ActorExtractor, MappedAudit } from './audit';\nimport type {\n\tAuthorizeFn,\n\tEndpointHandler,\n\tSessionFn,\n\tSuccessStatus,\n} from './Endpoint';\nimport {\n\tEndpoint,\n\ttype EndpointSchemas,\n\ttype EndpointSurface,\n} from './Endpoint';\nimport type { RlsBypass, RlsConfig } from './rls';\nimport { RLS_BYPASS } from './rls';\n\nexport class EndpointBuilder<\n\tTRoute extends string,\n\tTMethod extends HttpMethod,\n\tTInput extends EndpointSchemas = {},\n\tTServices extends Service[] = [],\n\tTLogger extends Logger = Logger,\n\tOutSchema extends StandardSchemaV1 | undefined = undefined,\n\tTSession = unknown,\n\tTAuthorizers extends readonly string[] = readonly string[],\n\tTAuditStorage extends AuditStorage | undefined = undefined,\n\tTAuditStorageServiceName extends string = string,\n\tTAuditAction extends AuditableAction<string, unknown> = AuditableAction<\n\t\tstring,\n\t\tunknown\n\t>,\n\tTDatabase = undefined,\n\tTDatabaseServiceName extends string = string,\n> extends BaseFunctionBuilder<\n\tTInput,\n\tOutSchema,\n\tTServices,\n\tTLogger,\n\tTAuditStorage,\n\tTAuditStorageServiceName,\n\tTDatabase,\n\tTDatabaseServiceName\n> {\n\tprotected schemas: TInput = {} as TInput;\n\tprotected _description?: string;\n\tprotected _status?: SuccessStatus;\n\tprotected _tags?: string[];\n\tprotected _memorySize?: number;\n\tprotected _responseType: string = 'application/json';\n\t_getSession: SessionFn<TServices, TLogger, TSession, TDatabase> = () =>\n\t\t({}) as TSession;\n\t_authorize: AuthorizeFn<TServices, TLogger, TSession, TInput, TDatabase> =\n\t\t() => true;\n\t_rateLimit?: RateLimitConfig;\n\t_availableAuthorizers: Authorizer[] = [];\n\t_authorizerName?: TAuthorizers[number];\n\t_actorExtractor?: ActorExtractor<TServices, TSession, TLogger>;\n\t_audits: MappedAudit<TAuditAction, OutSchema>[] = [];\n\t/**\n\t * Internal: the surface this builder came from, carried to the endpoint.\n\t *\n\t * Assigned by the factory before the builder is handed out, which is the\n\t * only way a builder is ever created.\n\t */\n\t_surface!: EndpointSurface;\n\t_customSecuritySchemes: Record<string, SecurityScheme> = {};\n\t_rlsConfig?: RlsConfig<TServices, TSession, TLogger>;\n\t_rlsBypass?: boolean;\n\n\tconstructor(\n\t\treadonly route: TRoute,\n\t\treadonly method: TMethod,\n\t) {\n\t\tsuper(ConstructType.Endpoint);\n\t}\n\n\t// Internal setter for EndpointFactory to set default auditor storage\n\t_setAuditorStorage(\n\t\tstorage: Service<TAuditStorageServiceName, TAuditStorage>,\n\t) {\n\t\tthis._auditorStorage = storage;\n\t}\n\n\t// Internal setter for EndpointFactory to set default database service\n\t_setDatabaseService(service: Service<TDatabaseServiceName, TDatabase>) {\n\t\tthis._databaseService = service;\n\t}\n\n\tdescription(description: string): this {\n\t\treturn cloneWith(this, { _description: description });\n\t}\n\n\tstatus(status: SuccessStatus): this {\n\t\treturn cloneWith(this, { _status: status });\n\t}\n\n\t/**\n\t * Publish `event` to `topic` once the handler has succeeded — repeatable,\n\t * one call per event, to as many topics as the endpoint names. The topic\n\t * becomes a dependency as with `.dependsOn([topic])`, so `services.<topic>`\n\t * is there for events the handler decides on itself.\n\t *\n\t * @example\n\t * ```ts\n\t * router.post('/users')\n\t * .event(users, {\n\t * type: 'user.created',\n\t * payload: (user) => ({ userId: user.id, email: user.email }),\n\t * })\n\t * ```\n\t */\n\tevent<TTopic extends Topic<any, any>>(\n\t\ttopic: TTopic,\n\t\tevent: EventFor<TTopic, InferStandardSchema<OutSchema>>,\n\t): EndpointBuilder<\n\t\tTRoute,\n\t\tTMethod,\n\t\tTInput,\n\t\t[...TServices, TTopic['service']],\n\t\tTLogger,\n\t\tOutSchema,\n\t\tTSession,\n\t\tTAuthorizers,\n\t\tTAuditStorage,\n\t\tTAuditStorageServiceName,\n\t\tTAuditAction,\n\t\tTDatabase,\n\t\tTDatabaseServiceName\n\t> {\n\t\treturn this.withEvent(topic, event as never) as unknown as EndpointBuilder<\n\t\t\tTRoute,\n\t\t\tTMethod,\n\t\t\tTInput,\n\t\t\t[...TServices, TTopic['service']],\n\t\t\tTLogger,\n\t\t\tOutSchema,\n\t\t\tTSession,\n\t\t\tTAuthorizers,\n\t\t\tTAuditStorage,\n\t\t\tTAuditStorageServiceName,\n\t\t\tTAuditAction,\n\t\t\tTDatabase,\n\t\t\tTDatabaseServiceName\n\t\t>;\n\t}\n\n\ttags(tags: string[]): this {\n\t\treturn cloneWith(this, { _tags: tags });\n\t}\n\n\tmemorySize(memorySize: number): this {\n\t\treturn cloneWith(this, { _memorySize: memorySize });\n\t}\n\n\t/**\n\t * Set the response content type for this endpoint.\n\t *\n\t * Defaults to `'application/json'`. When set to any other value\n\t * (e.g. `'text/html'`, `'text/plain'`), the response body is emitted\n\t * as-is rather than JSON-serialized, and the `Content-Type` header\n\t * reflects the declared value. Runtime overrides via `r.header()` still win.\n\t *\n\t * @param type - The MIME type to return (e.g. `'text/html'`)\n\t *\n\t * @example\n\t * ```typescript\n\t * api.get('/checkout-page')\n\t * .output(z.string())\n\t * .responseType('text/html')\n\t * .handle(async () => '<html>...</html>');\n\t * ```\n\t */\n\tresponseType(type: string): this {\n\t\treturn cloneWith(this, { _responseType: type });\n\t}\n\n\tbody<T extends StandardSchemaV1>(\n\t\tschema: T,\n\t): EndpointBuilder<\n\t\tTRoute,\n\t\tTMethod,\n\t\tOmit<TInput, 'body'> & { body: T },\n\t\tTServices,\n\t\tTLogger,\n\t\tOutSchema,\n\t\tTSession,\n\t\tTAuthorizers,\n\t\tTAuditStorage,\n\t\tTAuditStorageServiceName,\n\t\tTAuditAction,\n\t\tTDatabase,\n\t\tTDatabaseServiceName\n\t> {\n\t\tthis.schemas.body = schema as unknown as T;\n\t\t// @ts-expect-error\n\t\treturn this;\n\t}\n\n\tsearch<T extends StandardSchemaV1>(\n\t\tschema: T,\n\t): EndpointBuilder<\n\t\tTRoute,\n\t\tTMethod,\n\t\tOmit<TInput, 'query'> & { query: T },\n\t\tTServices,\n\t\tTLogger,\n\t\tOutSchema,\n\t\tTSession,\n\t\tTAuthorizers,\n\t\tTAuditStorage,\n\t\tTAuditStorageServiceName,\n\t\tTAuditAction,\n\t\tTDatabase,\n\t\tTDatabaseServiceName\n\t> {\n\t\tthis.schemas.query = schema as unknown as T;\n\t\t// @ts-expect-error\n\t\treturn this;\n\t}\n\n\tquery<T extends StandardSchemaV1>(\n\t\tschema: T,\n\t): EndpointBuilder<\n\t\tTRoute,\n\t\tTMethod,\n\t\tOmit<TInput, 'query'> & { query: T },\n\t\tTServices,\n\t\tTLogger,\n\t\tOutSchema,\n\t\tTSession,\n\t\tTAuthorizers,\n\t\tTAuditStorage,\n\t\tTAuditStorageServiceName,\n\t\tTAuditAction,\n\t\tTDatabase,\n\t\tTDatabaseServiceName\n\t> {\n\t\treturn this.search(schema);\n\t}\n\n\tparams<T extends StandardSchemaV1>(\n\t\tschema: T,\n\t): EndpointBuilder<\n\t\tTRoute,\n\t\tTMethod,\n\t\tOmit<TInput, 'params'> & { params: T },\n\t\tTServices,\n\t\tTLogger,\n\t\tOutSchema,\n\t\tTSession,\n\t\tTAuthorizers,\n\t\tTAuditStorage,\n\t\tTAuditStorageServiceName,\n\t\tTAuditAction,\n\t\tTDatabase,\n\t\tTDatabaseServiceName\n\t> {\n\t\tthis.schemas.params = schema as unknown as T;\n\t\t// @ts-expect-error\n\t\treturn this;\n\t}\n\n\tauthorize(\n\t\tfn: AuthorizeFn<TServices, TLogger, TSession, TInput, TDatabase>,\n\t): this {\n\t\treturn cloneWith(this, { _authorize: fn });\n\t}\n\n\trateLimit(config: RateLimitConfig): this {\n\t\treturn cloneWith(this, { _rateLimit: config });\n\t}\n\n\tauthorizer(\n\t\tname: TAuthorizers[number] | 'none',\n\t): EndpointBuilder<\n\t\tTRoute,\n\t\tTMethod,\n\t\tTInput,\n\t\tTServices,\n\t\tTLogger,\n\t\tOutSchema,\n\t\tTSession,\n\t\tTAuthorizers,\n\t\tTAuditStorage,\n\t\tTAuditStorageServiceName,\n\t\tTAuditAction,\n\t\tTDatabase,\n\t\tTDatabaseServiceName\n\t> {\n\t\t// Special case: 'none' explicitly marks endpoint as having no authorizer\n\t\tif (name === 'none') {\n\t\t\treturn cloneWith(this, { _authorizerName: undefined });\n\t\t}\n\n\t\t// Validate that the authorizer exists in available authorizers\n\t\tconst authorizerExists = this._availableAuthorizers.some(\n\t\t\t(a) => a.name === name,\n\t\t);\n\t\tif (!authorizerExists && this._availableAuthorizers.length > 0) {\n\t\t\tconst available = this._availableAuthorizers\n\t\t\t\t.map((a) => a.name)\n\t\t\t\t.join(', ');\n\t\t\tthrow new Error(\n\t\t\t\t`Authorizer \"${name as string}\" not found in available authorizers: ${available}`,\n\t\t\t);\n\t\t}\n\n\t\treturn cloneWith(this, { _authorizerName: name });\n\t}\n\n\t/**\n\t * Depend on constructs — a database, a bucket, a mail sender, a queue, a\n\t * topic.\n\t *\n\t * It records the edge and dissolves each construct's client into the\n\t * handler's service record under the construct's own id, so\n\t * `.dependsOn([uploads])` is what makes `services.uploads` exist and type.\n\t *\n\t * Constructs only. A `Service` does not match the shape, which is what keeps\n\t * env sniffing confined to `.services()` and the explicit lift.\n\t */\n\tdependsOn<const T extends readonly Consumable[]>(\n\t\tconstructs: T,\n\t): EndpointBuilder<\n\t\tTRoute,\n\t\tTMethod,\n\t\tTInput,\n\t\t[...TServices, ...ServicesOf<T>],\n\t\tTLogger,\n\t\tOutSchema,\n\t\tTSession,\n\t\tTAuthorizers,\n\t\tTAuditStorage,\n\t\tTAuditStorageServiceName,\n\t\tTAuditAction,\n\t\tTDatabase,\n\t\tTDatabaseServiceName\n\t> {\n\t\t// Both halves of the edge, from one call and one clone: the services the\n\t\t// handler runs with, and the ids the manifest records. Recording them\n\t\t// separately is what let them drift apart.\n\t\t//\n\t\t// `servicesOf` is the half that validates, so it runs first — recording\n\t\t// ids ahead of it left a caught `NotAConstruct` with `undefined` already\n\t\t// on a `string[]`.\n\t\tconst services = servicesOf(constructs) as unknown as Service[];\n\n\t\treturn cloneWith(this, {\n\t\t\t_services: uniqBy(\n\t\t\t\t[...this._services, ...services],\n\t\t\t\t(service: Service) => service.serviceName,\n\t\t\t),\n\t\t\t_constructs: idsOf(constructs, this._constructs),\n\t\t}) as unknown as EndpointBuilder<\n\t\t\tTRoute,\n\t\t\tTMethod,\n\t\t\tTInput,\n\t\t\t[...TServices, ...ServicesOf<T>],\n\t\t\tTLogger,\n\t\t\tOutSchema,\n\t\t\tTSession,\n\t\t\tTAuthorizers,\n\t\t\tTAuditStorage,\n\t\t\tTAuditStorageServiceName,\n\t\t\tTAuditAction,\n\t\t\tTDatabase,\n\t\t\tTDatabaseServiceName\n\t\t>;\n\t}\n\n\tservices<T extends Service[]>(\n\t\tservices: T,\n\t): EndpointBuilder<\n\t\tTRoute,\n\t\tTMethod,\n\t\tTInput,\n\t\t[...TServices, ...T],\n\t\tTLogger,\n\t\tOutSchema,\n\t\tTSession,\n\t\tTAuthorizers,\n\t\tTAuditStorage,\n\t\tTAuditStorageServiceName,\n\t\tTAuditAction,\n\t\tTDatabase,\n\t\tTDatabaseServiceName\n\t> {\n\t\treturn cloneWith(this, {\n\t\t\t_services: uniqBy(\n\t\t\t\t[...this._services, ...services],\n\t\t\t\t(s) => s.serviceName,\n\t\t\t) as TServices,\n\t\t}) as unknown as EndpointBuilder<\n\t\t\tTRoute,\n\t\t\tTMethod,\n\t\t\tTInput,\n\t\t\t[...TServices, ...T],\n\t\t\tTLogger,\n\t\t\tOutSchema,\n\t\t\tTSession,\n\t\t\tTAuthorizers,\n\t\t\tTAuditStorage,\n\t\t\tTAuditStorageServiceName,\n\t\t\tTAuditAction,\n\t\t\tTDatabase,\n\t\t\tTDatabaseServiceName\n\t\t>;\n\t}\n\n\tlogger<T extends Logger>(\n\t\tlogger: T,\n\t): EndpointBuilder<\n\t\tTRoute,\n\t\tTMethod,\n\t\tTInput,\n\t\tTServices,\n\t\tT,\n\t\tOutSchema,\n\t\tTSession,\n\t\tTAuthorizers,\n\t\tTAuditStorage,\n\t\tTAuditStorageServiceName,\n\t\tTAuditAction,\n\t\tTDatabase,\n\t\tTDatabaseServiceName\n\t> {\n\t\treturn cloneWith(this, {\n\t\t\t_logger: logger as unknown as TLogger,\n\t\t}) as unknown as EndpointBuilder<\n\t\t\tTRoute,\n\t\t\tTMethod,\n\t\t\tTInput,\n\t\t\tTServices,\n\t\t\tT,\n\t\t\tOutSchema,\n\t\t\tTSession,\n\t\t\tTAuthorizers,\n\t\t\tTAuditStorage,\n\t\t\tTAuditStorageServiceName,\n\t\t\tTAuditAction,\n\t\t\tTDatabase,\n\t\t\tTDatabaseServiceName\n\t\t>;\n\t}\n\n\toutput<T extends StandardSchemaV1>(\n\t\tschema: T,\n\t): EndpointBuilder<\n\t\tTRoute,\n\t\tTMethod,\n\t\tTInput,\n\t\tTServices,\n\t\tTLogger,\n\t\tT,\n\t\tTSession,\n\t\tTAuthorizers,\n\t\tTAuditStorage,\n\t\tTAuditStorageServiceName,\n\t\tTAuditAction,\n\t\tTDatabase,\n\t\tTDatabaseServiceName\n\t> {\n\t\treturn cloneWith(this, {\n\t\t\toutputSchema: schema as unknown as OutSchema,\n\t\t}) as unknown as EndpointBuilder<\n\t\t\tTRoute,\n\t\t\tTMethod,\n\t\t\tTInput,\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tT,\n\t\t\tTSession,\n\t\t\tTAuthorizers,\n\t\t\tTAuditStorage,\n\t\t\tTAuditStorageServiceName,\n\t\t\tTAuditAction,\n\t\t\tTDatabase,\n\t\t\tTDatabaseServiceName\n\t\t>;\n\t}\n\n\t/**\n\t * Set the auditor storage service for this endpoint.\n\t * This enables audit functionality and makes `auditor` available in the handler context.\n\t * The audit action type is automatically inferred from the storage's generic parameter.\n\t */\n\toverride auditor<T extends AuditStorage<any>, TName extends string>(\n\t\tstorage: Service<TName, T>,\n\t): EndpointBuilder<\n\t\tTRoute,\n\t\tTMethod,\n\t\tTInput,\n\t\tTServices,\n\t\tTLogger,\n\t\tOutSchema,\n\t\tTSession,\n\t\tTAuthorizers,\n\t\tT,\n\t\tTName,\n\t\tExtractStorageAuditAction<T>,\n\t\tTDatabase,\n\t\tTDatabaseServiceName\n\t> {\n\t\treturn cloneWith(this, {\n\t\t\t_auditorStorage: storage as unknown as Service<\n\t\t\t\tTAuditStorageServiceName,\n\t\t\t\tTAuditStorage\n\t\t\t>,\n\t\t}) as unknown as EndpointBuilder<\n\t\t\tTRoute,\n\t\t\tTMethod,\n\t\t\tTInput,\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tOutSchema,\n\t\t\tTSession,\n\t\t\tTAuthorizers,\n\t\t\tT,\n\t\t\tTName,\n\t\t\tExtractStorageAuditAction<T>,\n\t\t\tTDatabase,\n\t\t\tTDatabaseServiceName\n\t\t>;\n\t}\n\n\t/**\n\t * Set the actor extractor function for audit records.\n\t * The actor is extracted from the request context and attached to all audits.\n\t */\n\tactor(\n\t\textractor: ActorExtractor<TServices, TSession, TLogger>,\n\t): EndpointBuilder<\n\t\tTRoute,\n\t\tTMethod,\n\t\tTInput,\n\t\tTServices,\n\t\tTLogger,\n\t\tOutSchema,\n\t\tTSession,\n\t\tTAuthorizers,\n\t\tTAuditStorage,\n\t\tTAuditStorageServiceName,\n\t\tTAuditAction,\n\t\tTDatabase,\n\t\tTDatabaseServiceName\n\t> {\n\t\treturn cloneWith(this, { _actorExtractor: extractor });\n\t}\n\n\t/**\n\t * Add declarative audit definitions that are processed after the handler executes.\n\t * Similar to `.event()` for events, but for audits.\n\t *\n\t * @example\n\t * ```typescript\n\t * .audit<AppAuditAction>([\n\t * {\n\t * type: 'user.created',\n\t * payload: (response) => ({ userId: response.id, email: response.email }),\n\t * when: (response) => response.active,\n\t * entityId: (response) => response.id,\n\t * table: 'users',\n\t * },\n\t * ])\n\t * ```\n\t */\n\taudit(audits: MappedAudit<TAuditAction, OutSchema>[]): this {\n\t\treturn cloneWith(this, { _audits: audits });\n\t}\n\n\t/**\n\t * Set the database service for this endpoint.\n\t * The database will be available in the handler context as `db`.\n\t * When audit storage is configured and uses the same database,\n\t * `db` will automatically be the transaction for ACID compliance.\n\t *\n\t * @example\n\t * ```typescript\n\t * .database(databaseService)\n\t * .handle(async ({ db }) => {\n\t * // db is the raw database or transaction (when auditor uses same db)\n\t * return await db.selectFrom('users').selectAll().execute();\n\t * })\n\t * ```\n\t */\n\toverride database<T, TName extends string>(\n\t\tsource: Consumable<TName, T> | Service<TName, T>,\n\t): EndpointBuilder<\n\t\tTRoute,\n\t\tTMethod,\n\t\tTInput,\n\t\tTServices,\n\t\tTLogger,\n\t\tOutSchema,\n\t\tTSession,\n\t\tTAuthorizers,\n\t\tTAuditStorage,\n\t\tTAuditStorageServiceName,\n\t\tTAuditAction,\n\t\tT,\n\t\tTName\n\t> {\n\t\tconst service = serviceOf(source);\n\n\t\treturn cloneWith(this, {\n\t\t\t_databaseService: service as unknown as Service<\n\t\t\t\tTDatabaseServiceName,\n\t\t\t\tTDatabase\n\t\t\t>,\n\t\t}) as unknown as EndpointBuilder<\n\t\t\tTRoute,\n\t\t\tTMethod,\n\t\t\tTInput,\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tOutSchema,\n\t\t\tTSession,\n\t\t\tTAuthorizers,\n\t\t\tTAuditStorage,\n\t\t\tTAuditStorageServiceName,\n\t\t\tTAuditAction,\n\t\t\tT,\n\t\t\tTName\n\t\t>;\n\t}\n\n\t/**\n\t * Configure RLS (Row-Level Security) context for this endpoint.\n\t * Pass `false` or `RLS_BYPASS` to explicitly bypass RLS for this endpoint.\n\t *\n\t * @example\n\t * ```typescript\n\t * // Custom RLS config for this endpoint\n\t * .rls({\n\t * extractor: ({ session }) => ({\n\t * user_id: session.userId,\n\t * tenant_id: session.tenantId,\n\t * }),\n\t * prefix: 'app',\n\t * })\n\t *\n\t * // Bypass RLS (for admin endpoints)\n\t * .rls(false)\n\t * ```\n\t */\n\trls(\n\t\tconfig: RlsConfig<TServices, TSession, TLogger> | false | RlsBypass,\n\t): this {\n\t\tif (config === false || config === RLS_BYPASS) {\n\t\t\tthis._rlsBypass = true;\n\t\t\tthis._rlsConfig = undefined;\n\t\t} else {\n\t\t\tthis._rlsConfig = config;\n\t\t\tthis._rlsBypass = false;\n\t\t}\n\t\treturn this;\n\t}\n\n\t/**\n\t * Explicitly bypass RLS for this endpoint.\n\t * Useful for admin operations that need unrestricted database access.\n\t *\n\t * @example\n\t * ```typescript\n\t * .rlsBypass()\n\t * .handle(async ({ db }) => {\n\t * // Full access, no RLS filtering\n\t * return db.selectFrom('orders').selectAll().execute();\n\t * })\n\t * ```\n\t */\n\trlsBypass(): this {\n\t\treturn cloneWith(this, { _rlsBypass: true, _rlsConfig: undefined });\n\t}\n\n\t// EndpointBuilder doesn't have a generic input method - it uses body, query, params instead\n\tinput(_schema: any): any {\n\t\tthrow new Error(\n\t\t\t'EndpointBuilder does not support generic input. Use body(), query(), or params() instead.',\n\t\t);\n\t}\n\n\thandle(\n\t\tfn: EndpointHandler<\n\t\t\tTInput,\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tOutSchema,\n\t\t\tTSession,\n\t\t\tTDatabase,\n\t\t\tTAuditStorage,\n\t\t\tTAuditAction\n\t\t>,\n\t): Endpoint<\n\t\tTRoute,\n\t\tTMethod,\n\t\tTInput,\n\t\tOutSchema,\n\t\tTServices,\n\t\tTLogger,\n\t\tTSession,\n\t\tTAuditStorage,\n\t\tTAuditStorageServiceName,\n\t\tTAuditAction,\n\t\tTDatabase,\n\t\tTDatabaseServiceName\n\t> {\n\t\t// Find authorizer metadata if name is set\n\t\t// If the authorizer name is set but not in availableAuthorizers, create a simple authorizer object\n\t\tlet authorizer: Authorizer | undefined;\n\t\tif (this._authorizerName) {\n\t\t\tconst existingAuthorizer = this._availableAuthorizers.find(\n\t\t\t\t(a) => a.name === this._authorizerName,\n\t\t\t);\n\n\t\t\tif (existingAuthorizer) {\n\t\t\t\tauthorizer = existingAuthorizer;\n\t\t\t} else {\n\t\t\t\t// Create authorizer with security scheme if available (built-in or custom)\n\t\t\t\tconst securityScheme = getSecurityScheme(\n\t\t\t\t\tthis._authorizerName as string,\n\t\t\t\t\tthis._customSecuritySchemes,\n\t\t\t\t);\n\t\t\t\tauthorizer = {\n\t\t\t\t\tname: this._authorizerName as string,\n\t\t\t\t\tsecurityScheme,\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tconst endpoint = new Endpoint({\n\t\t\tfn,\n\t\t\tmethod: this.method,\n\t\t\troute: this.route,\n\t\t\tdescription: this._description,\n\t\t\ttags: this._tags,\n\t\t\tinput: this.schemas,\n\t\t\toutput: this.outputSchema,\n\t\t\tservices: this._services,\n\t\t\tconstructs: this._constructs,\n\t\t\tlogger: this._logger,\n\t\t\ttimeout: this._timeout,\n\t\t\tmemorySize: this._memorySize,\n\t\t\tauthorize: this._authorize,\n\t\t\tstatus: this._status,\n\t\t\tgetSession: this._getSession,\n\t\t\trateLimit: this._rateLimit,\n\t\t\tevents: this._events,\n\t\t\tauthorizer,\n\t\t\tsurface: this._surface,\n\t\t\tauditorStorageService: this._auditorStorage,\n\t\t\tactorExtractor: this._actorExtractor,\n\t\t\taudits: this._audits,\n\t\t\tdatabaseService: this._databaseService,\n\t\t\trlsConfig: this._rlsConfig,\n\t\t\trlsBypass: this._rlsBypass,\n\t\t\tresponseType: this._responseType,\n\t\t});\n\n\t\t// One field says which process runs a construct, whatever its kind. An\n\t\t// endpoint's is its surface; a cron's is the worker that handed out the\n\t\t// factory. The build partitions on this rather than on directories.\n\t\tendpoint.owner = this._surface?.id;\n\n\t\treturn endpoint;\n\t}\n}\n","import type {\n\tAuditableAction,\n\tAuditStorage,\n\tExtractStorageAuditAction,\n} from '@geekmidas/audit';\nimport type { Logger } from '@geekmidas/logger';\nimport { DEFAULT_LOGGER } from '@geekmidas/logger/console';\nimport type { Service } from '@geekmidas/services';\nimport uniqBy from 'lodash.uniqby';\nimport {\n\ttype Consumable,\n\tidsOf,\n\tisConsumable,\n\ttype ServicesOf,\n\tserviceOf,\n\tservicesOf,\n} from '../construct-interface';\nimport type { HttpMethod } from '../types';\nimport {\n\ttype Authorizer,\n\ttype BuiltInSecuritySchemeId,\n\tgetSecurityScheme,\n\ttype SecurityScheme,\n} from './Authorizer';\nimport type { ActorExtractor } from './audit';\nimport type { AuthorizeFn, EndpointSurface, SessionFn } from './Endpoint';\nimport { EndpointBuilder } from './EndpointBuilder';\nimport type { RlsConfig } from './rls';\n\n// Re-export SecurityScheme to make the type portable in declaration files\nexport type { SecurityScheme } from './Authorizer';\n\nexport class EndpointFactory<\n\tTServices extends Service[] = [],\n\tTBasePath extends string = '',\n\tTLogger extends Logger = Logger,\n\tTSession = unknown,\n\tTAuthorizers extends readonly string[] = readonly string[],\n\tTAuditStorage extends AuditStorage<any> | undefined = undefined,\n\tTAuditStorageServiceName extends string = string,\n\tTAuditAction extends AuditableAction<\n\t\tstring,\n\t\tunknown\n\t> = ExtractStorageAuditAction<NonNullable<TAuditStorage>>,\n\tTDatabase = undefined,\n\tTDatabaseServiceName extends string = string,\n\tTSecuritySchemes extends Record<string, SecurityScheme> = Record<\n\t\tstring,\n\t\tSecurityScheme\n\t>,\n\tTRlsConfig extends\n\t\t| RlsConfig<TServices, TSession, TLogger>\n\t\t| undefined = undefined,\n> {\n\tprivate defaultServices: TServices = [] as unknown as TServices;\n\t/**\n\t * The constructs `.dependsOn()` was given, kept alongside the services they\n\t * dissolve into.\n\t *\n\t * `.dependsOn()` collapses straight into `.services()`, which is right for\n\t * *running* — a handler wants clients, not ids — and loses the one thing the\n\t * manifest needs: which constructs this endpoint reaches. Keeping the ids\n\t * here is what lets a route declare its edges, and lets a target derive its\n\t * environment from the graph rather than from sniffing what the code touched.\n\t */\n\tprivate defaultConstructs: string[] = [];\n\tprivate basePath: TBasePath = '' as TBasePath;\n\tprivate defaultAuthorizeFn?: AuthorizeFn<\n\t\tTServices,\n\t\tTLogger,\n\t\tTSession,\n\t\tundefined,\n\t\tTDatabase\n\t>;\n\tprivate defaultSessionExtractor?: SessionFn<\n\t\tTServices,\n\t\tTLogger,\n\t\tTSession,\n\t\tTDatabase\n\t>;\n\tprivate defaultLogger: TLogger;\n\t/**\n\t * The surface this factory belongs to, stamped onto everything it builds.\n\t *\n\t * Set only by `RestApi`, which is the only thing that has one. A factory\n\t * with no surface produces endpoints that carry none, which is what a\n\t * standalone endpoint has always been.\n\t */\n\tprivate surface: EndpointSurface;\n\tprivate availableAuthorizers: Authorizer[];\n\tprivate defaultAuthorizerName?: TAuthorizers[number];\n\tprivate defaultAuditorStorage:\n\t\t| Service<TAuditStorageServiceName, TAuditStorage>\n\t\t| undefined;\n\tprivate defaultDatabaseService:\n\t\t| Service<TDatabaseServiceName, TDatabase>\n\t\t| undefined;\n\tprivate defaultActorExtractor?: ActorExtractor<TServices, TSession, TLogger>;\n\tprivate customSecuritySchemes: TSecuritySchemes;\n\tprivate defaultRlsConfig?: TRlsConfig;\n\n\tconstructor({\n\t\tbasePath,\n\t\tdefaultAuthorizeFn,\n\t\tdefaultLogger = DEFAULT_LOGGER as TLogger,\n\t\tdefaultSessionExtractor,\n\t\t// @ts-expect-error\n\t\tdefaultServices = [] as TServices,\n\t\tdefaultConstructs = [] as string[],\n\t\tavailableAuthorizers = [],\n\t\tdefaultAuthorizerName,\n\t\tdefaultAuditorStorage,\n\t\tdefaultDatabaseService,\n\t\tdefaultActorExtractor,\n\t\tcustomSecuritySchemes = {} as TSecuritySchemes,\n\t\tdefaultRlsConfig,\n\t\tsurface,\n\t}: EndpointFactoryOptions<\n\t\tTServices,\n\t\tTBasePath,\n\t\tTLogger,\n\t\tTSession,\n\t\tTAuthorizers,\n\t\tTAuditStorage,\n\t\tTAuditStorageServiceName,\n\t\tTDatabase,\n\t\tTDatabaseServiceName,\n\t\tTSecuritySchemes,\n\t\tTRlsConfig\n\t>) {\n\t\t// Initialize default services\n\t\tthis.defaultConstructs = [...new Set(defaultConstructs)];\n\t\tthis.defaultServices = uniqBy(\n\t\t\tdefaultServices,\n\t\t\t(s) => s.serviceName,\n\t\t) as TServices;\n\n\t\tthis.basePath = basePath || ('' as TBasePath);\n\t\tthis.defaultAuthorizeFn = defaultAuthorizeFn;\n\t\tthis.defaultLogger = defaultLogger;\n\t\tthis.defaultSessionExtractor = defaultSessionExtractor;\n\t\tthis.availableAuthorizers = availableAuthorizers;\n\t\tthis.defaultAuthorizerName = defaultAuthorizerName;\n\t\tthis.defaultAuditorStorage = defaultAuditorStorage;\n\t\tthis.defaultDatabaseService = defaultDatabaseService;\n\t\tthis.defaultActorExtractor = defaultActorExtractor;\n\t\tthis.customSecuritySchemes = customSecuritySchemes;\n\t\tthis.defaultRlsConfig = defaultRlsConfig;\n\t\tthis.surface = surface;\n\t}\n\n\tstatic joinPaths<TBasePath extends string, P extends string>(\n\t\tpath: P,\n\t\tbasePath: TBasePath = '' as TBasePath,\n\t): JoinPaths<TBasePath, P> {\n\t\t// Handle empty cases\n\t\tif (!basePath && !path) return '/' as JoinPaths<TBasePath, P>;\n\t\tif (!basePath)\n\t\t\treturn (path.startsWith('/') ? path : `/${path}`) as JoinPaths<\n\t\t\t\tTBasePath,\n\t\t\t\tP\n\t\t\t>;\n\t\tif (!path)\n\t\t\treturn (\n\t\t\t\tbasePath.startsWith('/') ? basePath : `/${basePath}`\n\t\t\t) as JoinPaths<TBasePath, P>;\n\n\t\tconst base = basePath.endsWith('/') ? basePath.slice(0, -1) : basePath;\n\t\tconst segment = path.startsWith('/') ? path : `/${path}`;\n\n\t\tlet result = base + segment;\n\n\t\t// Ensure leading slash\n\t\tif (!result.startsWith('/')) {\n\t\t\tresult = `/${result}`;\n\t\t}\n\n\t\t// Normalize multiple slashes (except in the middle of the path where they might be intentional)\n\t\tresult = result.replace(/^\\/+/g, '/');\n\n\t\t// Remove trailing slash unless it's the root path \"/\"\n\t\tif (result.length > 1 && result.endsWith('/')) {\n\t\t\tresult = result.slice(0, -1);\n\t\t}\n\n\t\treturn result as JoinPaths<TBasePath, P>;\n\t}\n\n\t// Configure available authorizers\n\tauthorizers<const T extends readonly string[]>(\n\t\tauthorizers: T,\n\t): EndpointFactory<\n\t\tTServices,\n\t\tTBasePath,\n\t\tTLogger,\n\t\tTSession,\n\t\tT,\n\t\tTAuditStorage,\n\t\tTAuditStorageServiceName,\n\t\tTAuditAction,\n\t\tTDatabase,\n\t\tTDatabaseServiceName,\n\t\tTSecuritySchemes,\n\t\tTRlsConfig\n\t> {\n\t\tconst authorizerConfigs = authorizers.map((name) => ({\n\t\t\tname,\n\t\t\tsecurityScheme: getSecurityScheme(name, this.customSecuritySchemes),\n\t\t}));\n\t\treturn new EndpointFactory<\n\t\t\tTServices,\n\t\t\tTBasePath,\n\t\t\tTLogger,\n\t\t\tTSession,\n\t\t\tT,\n\t\t\tTAuditStorage,\n\t\t\tTAuditStorageServiceName,\n\t\t\tTAuditAction,\n\t\t\tTDatabase,\n\t\t\tTDatabaseServiceName,\n\t\t\tTSecuritySchemes,\n\t\t\tTRlsConfig\n\t\t>({\n\t\t\tdefaultServices: this.defaultServices,\n\t\t\tdefaultConstructs: this.defaultConstructs,\n\t\t\tbasePath: this.basePath,\n\t\t\tdefaultAuthorizeFn: this.defaultAuthorizeFn,\n\t\t\tdefaultLogger: this.defaultLogger,\n\t\t\tdefaultSessionExtractor: this.defaultSessionExtractor,\n\t\t\tavailableAuthorizers: authorizerConfigs,\n\t\t\tdefaultAuthorizerName: this.defaultAuthorizerName,\n\t\t\tdefaultAuditorStorage: this.defaultAuditorStorage,\n\t\t\tdefaultDatabaseService: this.defaultDatabaseService,\n\t\t\tdefaultActorExtractor: this.defaultActorExtractor,\n\t\t\tcustomSecuritySchemes: this.customSecuritySchemes,\n\t\t\tsurface: this.surface,\n\t\t\tdefaultRlsConfig: this.defaultRlsConfig,\n\t\t});\n\t}\n\n\t/**\n\t * Define custom security schemes for this factory.\n\t * These extend the built-in schemes (jwt, bearer, apiKey, oauth2, oidc).\n\t *\n\t * @example\n\t * ```typescript\n\t * const router = e.securitySchemes({\n\t * awsIamSigV4: {\n\t * type: 'apiKey',\n\t * in: 'header',\n\t * name: 'Authorization',\n\t * 'x-amazon-apigateway-authtype': 'awsSigv4',\n\t * },\n\t * });\n\t * ```\n\t */\n\tsecuritySchemes<T extends Record<string, SecurityScheme>>(\n\t\tschemes: T,\n\t): EndpointFactory<\n\t\tTServices,\n\t\tTBasePath,\n\t\tTLogger,\n\t\tTSession,\n\t\tTAuthorizers,\n\t\tTAuditStorage,\n\t\tTAuditStorageServiceName,\n\t\tTAuditAction,\n\t\tTDatabase,\n\t\tTDatabaseServiceName,\n\t\tTSecuritySchemes & T,\n\t\tTRlsConfig\n\t> {\n\t\treturn new EndpointFactory<\n\t\t\tTServices,\n\t\t\tTBasePath,\n\t\t\tTLogger,\n\t\t\tTSession,\n\t\t\tTAuthorizers,\n\t\t\tTAuditStorage,\n\t\t\tTAuditStorageServiceName,\n\t\t\tTAuditAction,\n\t\t\tTDatabase,\n\t\t\tTDatabaseServiceName,\n\t\t\tTSecuritySchemes & T,\n\t\t\tTRlsConfig\n\t\t>({\n\t\t\tdefaultServices: this.defaultServices,\n\t\t\tdefaultConstructs: this.defaultConstructs,\n\t\t\tbasePath: this.basePath,\n\t\t\tdefaultAuthorizeFn: this.defaultAuthorizeFn,\n\t\t\tdefaultLogger: this.defaultLogger,\n\t\t\tdefaultSessionExtractor: this.defaultSessionExtractor,\n\t\t\tavailableAuthorizers: this.availableAuthorizers,\n\t\t\tdefaultAuthorizerName: this.defaultAuthorizerName,\n\t\t\tdefaultAuditorStorage: this.defaultAuditorStorage,\n\t\t\tdefaultDatabaseService: this.defaultDatabaseService,\n\t\t\tdefaultActorExtractor: this.defaultActorExtractor,\n\t\t\tcustomSecuritySchemes: {\n\t\t\t\t...this.customSecuritySchemes,\n\t\t\t\t...schemes,\n\t\t\t} as TSecuritySchemes & T,\n\t\t\tsurface: this.surface,\n\t\t\tdefaultRlsConfig: this.defaultRlsConfig,\n\t\t});\n\t}\n\n\t/**\n\t * Set the default authorizer for all endpoints created from this factory.\n\t * Individual endpoints can override this by calling `.authorizer()` on the builder.\n\t * Use `'none'` to explicitly disable authorization for all endpoints.\n\t *\n\t * Accepts:\n\t * - Built-in security scheme names: 'jwt', 'bearer', 'apiKey', 'oauth2', 'oidc'\n\t * - Custom security scheme names defined via `.securitySchemes()`\n\t * - 'none' to disable authorization\n\t */\n\tauthorizer(\n\t\tname:\n\t\t\t| BuiltInSecuritySchemeId\n\t\t\t| keyof TSecuritySchemes\n\t\t\t| TAuthorizers[number]\n\t\t\t| 'none',\n\t): EndpointFactory<\n\t\tTServices,\n\t\tTBasePath,\n\t\tTLogger,\n\t\tTSession,\n\t\tTAuthorizers,\n\t\tTAuditStorage,\n\t\tTAuditStorageServiceName,\n\t\tTAuditAction,\n\t\tTDatabase,\n\t\tTDatabaseServiceName,\n\t\tTSecuritySchemes,\n\t\tTRlsConfig\n\t> {\n\t\t// Validate that the authorizer exists in available authorizers (if authorizers() was called)\n\t\tif (name !== 'none' && this.availableAuthorizers.length > 0) {\n\t\t\tconst authorizerExists = this.availableAuthorizers.some(\n\t\t\t\t(a) => a.name === name,\n\t\t\t);\n\t\t\tif (!authorizerExists) {\n\t\t\t\tconst available = this.availableAuthorizers\n\t\t\t\t\t.map((a) => a.name)\n\t\t\t\t\t.join(', ');\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Authorizer \"${name as string}\" not found in available authorizers: ${available}`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\treturn new EndpointFactory<\n\t\t\tTServices,\n\t\t\tTBasePath,\n\t\t\tTLogger,\n\t\t\tTSession,\n\t\t\tTAuthorizers,\n\t\t\tTAuditStorage,\n\t\t\tTAuditStorageServiceName,\n\t\t\tTAuditAction,\n\t\t\tTDatabase,\n\t\t\tTDatabaseServiceName,\n\t\t\tTSecuritySchemes,\n\t\t\tTRlsConfig\n\t\t>({\n\t\t\tdefaultServices: this.defaultServices,\n\t\t\tdefaultConstructs: this.defaultConstructs,\n\t\t\tbasePath: this.basePath,\n\t\t\tdefaultAuthorizeFn: this.defaultAuthorizeFn,\n\t\t\tdefaultLogger: this.defaultLogger,\n\t\t\tdefaultSessionExtractor: this.defaultSessionExtractor,\n\t\t\tavailableAuthorizers: this.availableAuthorizers,\n\t\t\tdefaultAuthorizerName:\n\t\t\t\tname === 'none' ? undefined : (name as TAuthorizers[number]),\n\t\t\tdefaultAuditorStorage: this.defaultAuditorStorage,\n\t\t\tdefaultDatabaseService: this.defaultDatabaseService,\n\t\t\tdefaultActorExtractor: this.defaultActorExtractor,\n\t\t\tcustomSecuritySchemes: this.customSecuritySchemes,\n\t\t\tsurface: this.surface,\n\t\t\tdefaultRlsConfig: this.defaultRlsConfig,\n\t\t});\n\t}\n\n\t// Create a sub-router with a path prefix\n\troute<TPath extends string>(\n\t\tpath: TPath,\n\t): EndpointFactory<\n\t\tTServices,\n\t\tJoinPaths<TBasePath, TPath>,\n\t\tTLogger,\n\t\tTSession,\n\t\tTAuthorizers,\n\t\tTAuditStorage,\n\t\tTAuditStorageServiceName,\n\t\tTAuditAction,\n\t\tTDatabase,\n\t\tTDatabaseServiceName,\n\t\tTSecuritySchemes,\n\t\tTRlsConfig\n\t> {\n\t\tconst newBasePath = EndpointFactory.joinPaths(path, this.basePath);\n\t\treturn new EndpointFactory<\n\t\t\tTServices,\n\t\t\tJoinPaths<TBasePath, TPath>,\n\t\t\tTLogger,\n\t\t\tTSession,\n\t\t\tTAuthorizers,\n\t\t\tTAuditStorage,\n\t\t\tTAuditStorageServiceName,\n\t\t\tTAuditAction,\n\t\t\tTDatabase,\n\t\t\tTDatabaseServiceName,\n\t\t\tTSecuritySchemes,\n\t\t\tTRlsConfig\n\t\t>({\n\t\t\tdefaultServices: this.defaultServices,\n\t\t\tdefaultConstructs: this.defaultConstructs,\n\t\t\tbasePath: newBasePath,\n\t\t\tdefaultAuthorizeFn: this.defaultAuthorizeFn,\n\t\t\tdefaultLogger: this.defaultLogger,\n\t\t\tdefaultSessionExtractor: this.defaultSessionExtractor,\n\t\t\tavailableAuthorizers: this.availableAuthorizers,\n\t\t\tdefaultAuthorizerName: this.defaultAuthorizerName,\n\t\t\tdefaultAuditorStorage: this.defaultAuditorStorage,\n\t\t\tdefaultDatabaseService: this.defaultDatabaseService,\n\t\t\tdefaultActorExtractor: this.defaultActorExtractor,\n\t\t\tcustomSecuritySchemes: this.customSecuritySchemes,\n\t\t\tsurface: this.surface,\n\t\t\tdefaultRlsConfig: this.defaultRlsConfig,\n\t\t});\n\t}\n\n\t// Create a new factory with authorization\n\tauthorize(\n\t\tfn: AuthorizeFn<TServices, TLogger, TSession, undefined, TDatabase>,\n\t): EndpointFactory<\n\t\tTServices,\n\t\tTBasePath,\n\t\tTLogger,\n\t\tTSession,\n\t\tTAuthorizers,\n\t\tTAuditStorage,\n\t\tTAuditStorageServiceName,\n\t\tTAuditAction,\n\t\tTDatabase,\n\t\tTDatabaseServiceName,\n\t\tTSecuritySchemes,\n\t\tTRlsConfig\n\t> {\n\t\treturn new EndpointFactory<\n\t\t\tTServices,\n\t\t\tTBasePath,\n\t\t\tTLogger,\n\t\t\tTSession,\n\t\t\tTAuthorizers,\n\t\t\tTAuditStorage,\n\t\t\tTAuditStorageServiceName,\n\t\t\tTAuditAction,\n\t\t\tTDatabase,\n\t\t\tTDatabaseServiceName,\n\t\t\tTSecuritySchemes,\n\t\t\tTRlsConfig\n\t\t>({\n\t\t\tdefaultServices: this.defaultServices,\n\t\t\tdefaultConstructs: this.defaultConstructs,\n\t\t\tbasePath: this.basePath,\n\t\t\tdefaultAuthorizeFn: fn,\n\t\t\tdefaultLogger: this.defaultLogger,\n\t\t\tdefaultSessionExtractor: this.defaultSessionExtractor,\n\t\t\tavailableAuthorizers: this.availableAuthorizers,\n\t\t\tdefaultAuthorizerName: this.defaultAuthorizerName,\n\t\t\tdefaultAuditorStorage: this.defaultAuditorStorage,\n\t\t\tdefaultDatabaseService: this.defaultDatabaseService,\n\t\t\tdefaultActorExtractor: this.defaultActorExtractor,\n\t\t\tcustomSecuritySchemes: this.customSecuritySchemes,\n\t\t\tsurface: this.surface,\n\t\t\tdefaultRlsConfig: this.defaultRlsConfig,\n\t\t});\n\t}\n\n\t// Create a new factory with services\n\t/**\n\t * Depend on constructs — a database, a bucket, a mail sender, a queue, a\n\t * topic.\n\t *\n\t * It records the edge and dissolves each construct's client into the\n\t * handler's service record under the construct's own id, so\n\t * `.dependsOn([uploads])` is what makes `services.uploads` exist and type.\n\t *\n\t * Constructs only. A `Service` does not match the shape, which is what keeps\n\t * env sniffing confined to `.services()` and the explicit lift.\n\t */\n\tdependsOn<const S extends readonly Consumable[]>(\n\t\tconstructs: S,\n\t): EndpointFactory<\n\t\t[...ServicesOf<S>, ...TServices],\n\t\tTBasePath,\n\t\tTLogger,\n\t\tTSession,\n\t\tTAuthorizers,\n\t\tTAuditStorage,\n\t\tTAuditStorageServiceName,\n\t\tTAuditAction,\n\t\tTDatabase,\n\t\tTDatabaseServiceName,\n\t\tTSecuritySchemes,\n\t\tRlsConfig<[...ServicesOf<S>, ...TServices], TSession, TLogger> | undefined\n\t> {\n\t\t// The services are what a handler *runs* with; the ids are what the\n\t\t// manifest needs. Dissolving to services alone is what lost the edges —\n\t\t// the same information, one of the two forms discarded.\n\t\tconst next = this.services(servicesOf(constructs) as unknown as Service[]);\n\t\tnext.defaultConstructs = [\n\t\t\t...new Set([\n\t\t\t\t...this.defaultConstructs,\n\t\t\t\t...constructs.map((construct) => construct.id),\n\t\t\t]),\n\t\t];\n\n\t\treturn next as unknown as EndpointFactory<\n\t\t\t[...ServicesOf<S>, ...TServices],\n\t\t\tTBasePath,\n\t\t\tTLogger,\n\t\t\tTSession,\n\t\t\tTAuthorizers,\n\t\t\tTAuditStorage,\n\t\t\tTAuditStorageServiceName,\n\t\t\tTAuditAction,\n\t\t\tTDatabase,\n\t\t\tTDatabaseServiceName,\n\t\t\tTSecuritySchemes,\n\t\t\tRlsConfig<[...ServicesOf<S>, ...TServices], TSession, TLogger> | undefined\n\t\t>;\n\t}\n\n\tservices<S extends Service[]>(\n\t\tservices: S,\n\t): EndpointFactory<\n\t\t[...S, ...TServices],\n\t\tTBasePath,\n\t\tTLogger,\n\t\tTSession,\n\t\tTAuthorizers,\n\t\tTAuditStorage,\n\t\tTAuditStorageServiceName,\n\t\tTAuditAction,\n\t\tTDatabase,\n\t\tTDatabaseServiceName,\n\t\tTSecuritySchemes,\n\t\tRlsConfig<[...S, ...TServices], TSession, TLogger> | undefined\n\t> {\n\t\treturn new EndpointFactory<\n\t\t\t[...S, ...TServices],\n\t\t\tTBasePath,\n\t\t\tTLogger,\n\t\t\tTSession,\n\t\t\tTAuthorizers,\n\t\t\tTAuditStorage,\n\t\t\tTAuditStorageServiceName,\n\t\t\tTAuditAction,\n\t\t\tTDatabase,\n\t\t\tTDatabaseServiceName,\n\t\t\tTSecuritySchemes,\n\t\t\tRlsConfig<[...S, ...TServices], TSession, TLogger> | undefined\n\t\t>({\n\t\t\tdefaultServices: [...services, ...this.defaultServices],\n\t\t\tdefaultConstructs: this.defaultConstructs,\n\t\t\tbasePath: this.basePath,\n\t\t\tdefaultAuthorizeFn: this.defaultAuthorizeFn as unknown as AuthorizeFn<\n\t\t\t\t[...S, ...TServices],\n\t\t\t\tTLogger,\n\t\t\t\tTSession\n\t\t\t>,\n\t\t\tdefaultLogger: this.defaultLogger,\n\t\t\tdefaultSessionExtractor: this.defaultSessionExtractor as unknown as\n\t\t\t\t| SessionFn<[...S, ...TServices], TLogger, TSession, TDatabase>\n\t\t\t\t| undefined,\n\t\t\tavailableAuthorizers: this.availableAuthorizers,\n\t\t\tdefaultAuthorizerName: this.defaultAuthorizerName,\n\t\t\tdefaultAuditorStorage: this.defaultAuditorStorage,\n\t\t\tdefaultDatabaseService: this.defaultDatabaseService,\n\t\t\tdefaultActorExtractor: this.defaultActorExtractor as unknown as\n\t\t\t\t| ActorExtractor<[...S, ...TServices], TSession, TLogger>\n\t\t\t\t| undefined,\n\t\t\tcustomSecuritySchemes: this.customSecuritySchemes,\n\t\t\tsurface: this.surface,\n\t\t\tdefaultRlsConfig: this.defaultRlsConfig as unknown as\n\t\t\t\t| RlsConfig<[...S, ...TServices], TSession, TLogger>\n\t\t\t\t| undefined,\n\t\t});\n\t}\n\n\tlogger<L extends Logger>(\n\t\tlogger: L,\n\t): EndpointFactory<\n\t\tTServices,\n\t\tTBasePath,\n\t\tL,\n\t\tTSession,\n\t\tTAuthorizers,\n\t\tTAuditStorage,\n\t\tTAuditStorageServiceName,\n\t\tTAuditAction,\n\t\tTDatabase,\n\t\tTDatabaseServiceName,\n\t\tTSecuritySchemes,\n\t\tRlsConfig<TServices, TSession, L> | undefined\n\t> {\n\t\treturn new EndpointFactory<\n\t\t\tTServices,\n\t\t\tTBasePath,\n\t\t\tL,\n\t\t\tTSession,\n\t\t\tTAuthorizers,\n\t\t\tTAuditStorage,\n\t\t\tTAuditStorageServiceName,\n\t\t\tTAuditAction,\n\t\t\tTDatabase,\n\t\t\tTDatabaseServiceName,\n\t\t\tTSecuritySchemes,\n\t\t\tRlsConfig<TServices, TSession, L> | undefined\n\t\t>({\n\t\t\tdefaultServices: this.defaultServices,\n\t\t\tdefaultConstructs: this.defaultConstructs,\n\t\t\tbasePath: this.basePath,\n\t\t\tdefaultAuthorizeFn: this.defaultAuthorizeFn as unknown as AuthorizeFn<\n\t\t\t\tTServices,\n\t\t\t\tL,\n\t\t\t\tTSession\n\t\t\t>,\n\t\t\tdefaultLogger: logger,\n\t\t\tdefaultSessionExtractor: this\n\t\t\t\t.defaultSessionExtractor as unknown as SessionFn<\n\t\t\t\tTServices,\n\t\t\t\tL,\n\t\t\t\tTSession\n\t\t\t>,\n\t\t\tavailableAuthorizers: this.availableAuthorizers,\n\t\t\tdefaultAuthorizerName: this.defaultAuthorizerName,\n\t\t\tdefaultAuditorStorage: this.defaultAuditorStorage,\n\t\t\tdefaultDatabaseService: this.defaultDatabaseService,\n\t\t\tdefaultActorExtractor: this\n\t\t\t\t.defaultActorExtractor as unknown as ActorExtractor<\n\t\t\t\tTServices,\n\t\t\t\tTSession,\n\t\t\t\tL\n\t\t\t>,\n\t\t\tcustomSecuritySchemes: this.customSecuritySchemes,\n\t\t\tsurface: this.surface,\n\t\t\tdefaultRlsConfig: this.defaultRlsConfig as unknown as\n\t\t\t\t| RlsConfig<TServices, TSession, L>\n\t\t\t\t| undefined,\n\t\t});\n\t}\n\n\tsession<T>(\n\t\tsession: SessionFn<TServices, TLogger, T, TDatabase>,\n\t): EndpointFactory<\n\t\tTServices,\n\t\tTBasePath,\n\t\tTLogger,\n\t\tT,\n\t\tTAuthorizers,\n\t\tTAuditStorage,\n\t\tTAuditStorageServiceName,\n\t\tTAuditAction,\n\t\tTDatabase,\n\t\tTDatabaseServiceName,\n\t\tTSecuritySchemes,\n\t\tRlsConfig<TServices, T, TLogger> | undefined\n\t> {\n\t\treturn new EndpointFactory<\n\t\t\tTServices,\n\t\t\tTBasePath,\n\t\t\tTLogger,\n\t\t\tT,\n\t\t\tTAuthorizers,\n\t\t\tTAuditStorage,\n\t\t\tTAuditStorageServiceName,\n\t\t\tTAuditAction,\n\t\t\tTDatabase,\n\t\t\tTDatabaseServiceName,\n\t\t\tTSecuritySchemes,\n\t\t\tRlsConfig<TServices, T, TLogger> | undefined\n\t\t>({\n\t\t\tdefaultServices: this.defaultServices,\n\t\t\tdefaultConstructs: this.defaultConstructs,\n\t\t\tbasePath: this.basePath,\n\t\t\tdefaultAuthorizeFn: this.defaultAuthorizeFn as unknown as AuthorizeFn<\n\t\t\t\tTServices,\n\t\t\t\tTLogger,\n\t\t\t\tT\n\t\t\t>,\n\t\t\tdefaultLogger: this.defaultLogger,\n\t\t\tdefaultSessionExtractor: session,\n\t\t\tavailableAuthorizers: this.availableAuthorizers,\n\t\t\tdefaultAuthorizerName: this.defaultAuthorizerName,\n\t\t\tdefaultAuditorStorage: this.defaultAuditorStorage,\n\t\t\tdefaultDatabaseService: this.defaultDatabaseService,\n\t\t\tdefaultActorExtractor: this\n\t\t\t\t.defaultActorExtractor as unknown as ActorExtractor<\n\t\t\t\tTServices,\n\t\t\t\tT,\n\t\t\t\tTLogger\n\t\t\t>,\n\t\t\tcustomSecuritySchemes: this.customSecuritySchemes,\n\t\t\tsurface: this.surface,\n\t\t\tdefaultRlsConfig: this.defaultRlsConfig as unknown as\n\t\t\t\t| RlsConfig<TServices, T, TLogger>\n\t\t\t\t| undefined,\n\t\t});\n\t}\n\n\t/**\n\t * Set the database service for endpoints created from this factory.\n\t * The database will be available in handler context as `db`.\n\t */\n\tdatabase<T, TName extends string>(\n\t\tsource: Consumable<TName, T> | Service<TName, T>,\n\t): EndpointFactory<\n\t\tTServices,\n\t\tTBasePath,\n\t\tTLogger,\n\t\tTSession,\n\t\tTAuthorizers,\n\t\tTAuditStorage,\n\t\tTAuditStorageServiceName,\n\t\tTAuditAction,\n\t\tT,\n\t\tTName,\n\t\tTSecuritySchemes,\n\t\tTRlsConfig\n\t> {\n\t\tconst service = serviceOf(source);\n\n\t\treturn new EndpointFactory<\n\t\t\tTServices,\n\t\t\tTBasePath,\n\t\t\tTLogger,\n\t\t\tTSession,\n\t\t\tTAuthorizers,\n\t\t\tTAuditStorage,\n\t\t\tTAuditStorageServiceName,\n\t\t\tTAuditAction,\n\t\t\tT,\n\t\t\tTName,\n\t\t\tTSecuritySchemes,\n\t\t\tTRlsConfig\n\t\t>({\n\t\t\tdefaultServices: this.defaultServices,\n\t\t\t// The database is an edge like any `.dependsOn()`: without its id here an\n\t\t\t// endpoint built from `api.database(db)` reached a database the\n\t\t\t// manifest never heard of, so nothing composed from the edges — a\n\t\t\t// deploy's grants, an app container's environment — included it.\n\t\t\tdefaultConstructs: isConsumable(source)\n\t\t\t\t? idsOf([source], this.defaultConstructs)\n\t\t\t\t: this.defaultConstructs,\n\t\t\tbasePath: this.basePath,\n\t\t\tdefaultAuthorizeFn: this.defaultAuthorizeFn as unknown as\n\t\t\t\t| AuthorizeFn<TServices, TLogger, TSession, undefined, T>\n\t\t\t\t| undefined,\n\t\t\tdefaultLogger: this.defaultLogger,\n\t\t\t// Reset session extractor when database changes - user should call .session() after .database()\n\t\t\t// to get proper type inference for the new database type\n\t\t\tdefaultSessionExtractor: this.defaultSessionExtractor as unknown as\n\t\t\t\t| SessionFn<TServices, TLogger, TSession, T>\n\t\t\t\t| undefined,\n\t\t\tavailableAuthorizers: this.availableAuthorizers,\n\t\t\tdefaultAuthorizerName: this.defaultAuthorizerName,\n\t\t\tdefaultAuditorStorage: this.defaultAuditorStorage,\n\t\t\tdefaultDatabaseService: service,\n\t\t\tcustomSecuritySchemes: this.customSecuritySchemes,\n\t\t\tsurface: this.surface,\n\t\t\tdefaultRlsConfig: this.defaultRlsConfig,\n\t\t});\n\t}\n\n\t/**\n\t * Set the auditor storage service for endpoints created from this factory.\n\t * This enables audit functionality and makes `auditor` available in handler context.\n\t * The audit action type is automatically inferred from the storage's generic parameter.\n\t */\n\tauditor<T extends AuditStorage<any>, TName extends string>(\n\t\tstorage: Service<TName, T>,\n\t): EndpointFactory<\n\t\tTServices,\n\t\tTBasePath,\n\t\tTLogger,\n\t\tTSession,\n\t\tTAuthorizers,\n\t\tT,\n\t\tTName,\n\t\tExtractStorageAuditAction<T>,\n\t\tTDatabase,\n\t\tTDatabaseServiceName,\n\t\tTSecuritySchemes,\n\t\tTRlsConfig\n\t> {\n\t\treturn new EndpointFactory<\n\t\t\tTServices,\n\t\t\tTBasePath,\n\t\t\tTLogger,\n\t\t\tTSession,\n\t\t\tTAuthorizers,\n\t\t\tT,\n\t\t\tTName,\n\t\t\tExtractStorageAuditAction<T>,\n\t\t\tTDatabase,\n\t\t\tTDatabaseServiceName,\n\t\t\tTSecuritySchemes,\n\t\t\tTRlsConfig\n\t\t>({\n\t\t\tdefaultServices: this.defaultServices,\n\t\t\tdefaultConstructs: this.defaultConstructs,\n\t\t\tbasePath: this.basePath,\n\t\t\tdefaultAuthorizeFn: this.defaultAuthorizeFn,\n\t\t\tdefaultLogger: this.defaultLogger,\n\t\t\tdefaultSessionExtractor: this.defaultSessionExtractor,\n\t\t\tavailableAuthorizers: this.availableAuthorizers,\n\t\t\tdefaultAuthorizerName: this.defaultAuthorizerName,\n\t\t\tdefaultAuditorStorage: storage,\n\t\t\tdefaultDatabaseService: this.defaultDatabaseService,\n\t\t\tdefaultActorExtractor: this\n\t\t\t\t.defaultActorExtractor as unknown as ActorExtractor<\n\t\t\t\tTServices,\n\t\t\t\tTSession,\n\t\t\t\tTLogger\n\t\t\t>,\n\t\t\tcustomSecuritySchemes: this.customSecuritySchemes,\n\t\t\tsurface: this.surface,\n\t\t\tdefaultRlsConfig: this.defaultRlsConfig,\n\t\t});\n\t}\n\n\t/**\n\t * Set the actor extractor function for endpoints created from this factory.\n\t * The actor is extracted from the request context and attached to all audits.\n\t */\n\tactor(\n\t\textractor: ActorExtractor<TServices, TSession, TLogger>,\n\t): EndpointFactory<\n\t\tTServices,\n\t\tTBasePath,\n\t\tTLogger,\n\t\tTSession,\n\t\tTAuthorizers,\n\t\tTAuditStorage,\n\t\tTAuditStorageServiceName,\n\t\tTAuditAction,\n\t\tTDatabase,\n\t\tTDatabaseServiceName,\n\t\tTSecuritySchemes,\n\t\tTRlsConfig\n\t> {\n\t\treturn new EndpointFactory<\n\t\t\tTServices,\n\t\t\tTBasePath,\n\t\t\tTLogger,\n\t\t\tTSession,\n\t\t\tTAuthorizers,\n\t\t\tTAuditStorage,\n\t\t\tTAuditStorageServiceName,\n\t\t\tTAuditAction,\n\t\t\tTDatabase,\n\t\t\tTDatabaseServiceName,\n\t\t\tTSecuritySchemes,\n\t\t\tTRlsConfig\n\t\t>({\n\t\t\tdefaultServices: this.defaultServices,\n\t\t\tdefaultConstructs: this.defaultConstructs,\n\t\t\tbasePath: this.basePath,\n\t\t\tdefaultAuthorizeFn: this.defaultAuthorizeFn,\n\t\t\tdefaultLogger: this.defaultLogger,\n\t\t\tdefaultSessionExtractor: this.defaultSessionExtractor,\n\t\t\tavailableAuthorizers: this.availableAuthorizers,\n\t\t\tdefaultAuthorizerName: this.defaultAuthorizerName,\n\t\t\tdefaultAuditorStorage: this.defaultAuditorStorage,\n\t\t\tdefaultDatabaseService: this.defaultDatabaseService,\n\t\t\tdefaultActorExtractor: extractor,\n\t\t\tcustomSecuritySchemes: this.customSecuritySchemes,\n\t\t\tsurface: this.surface,\n\t\t\tdefaultRlsConfig: this.defaultRlsConfig,\n\t\t});\n\t}\n\n\t/**\n\t * Set the RLS (Row-Level Security) configuration for endpoints created from this factory.\n\t * This enables automatic PostgreSQL session variable setting for RLS policies.\n\t *\n\t * @example\n\t * ```typescript\n\t * const api = new EndpointFactory()\n\t * .database(databaseService)\n\t * .session(extractSession)\n\t * .rls({\n\t * extractor: ({ session }) => ({\n\t * user_id: session.userId,\n\t * tenant_id: session.tenantId,\n\t * }),\n\t * prefix: 'app',\n\t * });\n\t * ```\n\t */\n\trls<TConfig extends RlsConfig<TServices, TSession, TLogger>>(\n\t\tconfig: TConfig,\n\t): EndpointFactory<\n\t\tTServices,\n\t\tTBasePath,\n\t\tTLogger,\n\t\tTSession,\n\t\tTAuthorizers,\n\t\tTAuditStorage,\n\t\tTAuditStorageServiceName,\n\t\tTAuditAction,\n\t\tTDatabase,\n\t\tTDatabaseServiceName,\n\t\tTSecuritySchemes,\n\t\tTConfig\n\t> {\n\t\treturn new EndpointFactory<\n\t\t\tTServices,\n\t\t\tTBasePath,\n\t\t\tTLogger,\n\t\t\tTSession,\n\t\t\tTAuthorizers,\n\t\t\tTAuditStorage,\n\t\t\tTAuditStorageServiceName,\n\t\t\tTAuditAction,\n\t\t\tTDatabase,\n\t\t\tTDatabaseServiceName,\n\t\t\tTSecuritySchemes,\n\t\t\tTConfig\n\t\t>({\n\t\t\tdefaultServices: this.defaultServices,\n\t\t\tdefaultConstructs: this.defaultConstructs,\n\t\t\tbasePath: this.basePath,\n\t\t\tdefaultAuthorizeFn: this.defaultAuthorizeFn,\n\t\t\tdefaultLogger: this.defaultLogger,\n\t\t\tdefaultSessionExtractor: this.defaultSessionExtractor,\n\t\t\tavailableAuthorizers: this.availableAuthorizers,\n\t\t\tdefaultAuthorizerName: this.defaultAuthorizerName,\n\t\t\tdefaultAuditorStorage: this.defaultAuditorStorage,\n\t\t\tdefaultDatabaseService: this.defaultDatabaseService,\n\t\t\tdefaultActorExtractor: this.defaultActorExtractor,\n\t\t\tcustomSecuritySchemes: this.customSecuritySchemes,\n\t\t\tsurface: this.surface,\n\t\t\tdefaultRlsConfig: config,\n\t\t});\n\t}\n\n\tprivate createBuilder<TMethod extends HttpMethod, TPath extends string>(\n\t\tmethod: TMethod,\n\t\tpath: TPath,\n\t): EndpointBuilder<\n\t\tJoinPaths<TBasePath, TPath>,\n\t\tTMethod,\n\t\t{},\n\t\tTServices,\n\t\tTLogger,\n\t\tundefined,\n\t\tTSession,\n\t\tTAuthorizers,\n\t\tTAuditStorage,\n\t\tTAuditStorageServiceName,\n\t\tTAuditAction,\n\t\tTDatabase,\n\t\tTDatabaseServiceName\n\t> {\n\t\tconst fullPath = EndpointFactory.joinPaths(path, this.basePath);\n\t\tconst builder = new EndpointBuilder<\n\t\t\tJoinPaths<TBasePath, TPath>,\n\t\t\tTMethod,\n\t\t\t{},\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tundefined,\n\t\t\tTSession,\n\t\t\tTAuthorizers,\n\t\t\tTAuditStorage,\n\t\t\tTAuditStorageServiceName,\n\t\t\tTAuditAction,\n\t\t\tTDatabase,\n\t\t\tTDatabaseServiceName\n\t\t>(fullPath, method);\n\n\t\tif (this.defaultAuthorizeFn) {\n\t\t\tbuilder._authorize = this.defaultAuthorizeFn as any;\n\t\t}\n\t\tif (this.defaultServices.length) {\n\t\t\t// Create a copy to avoid sharing references between builders\n\t\t\tbuilder._services = [...this.defaultServices] as TServices;\n\t\t}\n\t\tif (this.defaultConstructs.length) {\n\t\t\t// Alongside the services, not instead of them: one is what the handler\n\t\t\t// runs with, the other is what the manifest records it reaches.\n\t\t\tbuilder._constructs = [...this.defaultConstructs];\n\t\t}\n\n\t\tif (this.defaultLogger) {\n\t\t\tbuilder._logger = this.defaultLogger as TLogger;\n\t\t}\n\n\t\tbuilder._surface = this.surface;\n\n\t\tif (this.defaultSessionExtractor) {\n\t\t\tbuilder._getSession = this.defaultSessionExtractor as SessionFn<\n\t\t\t\tTServices,\n\t\t\t\tTLogger,\n\t\t\t\tTSession\n\t\t\t>;\n\t\t}\n\n\t\t// Set available authorizers and default\n\t\tbuilder._availableAuthorizers = this.availableAuthorizers;\n\t\tif (this.defaultAuthorizerName) {\n\t\t\tbuilder._authorizerName = this.defaultAuthorizerName;\n\t\t}\n\n\t\t// Set auditor storage if configured\n\t\tif (this.defaultAuditorStorage) {\n\t\t\tbuilder._setAuditorStorage(this.defaultAuditorStorage as any);\n\t\t}\n\n\t\t// Set database service if configured\n\t\tif (this.defaultDatabaseService) {\n\t\t\tbuilder._setDatabaseService(this.defaultDatabaseService as any);\n\t\t}\n\n\t\t// Set actor extractor if configured\n\t\tif (this.defaultActorExtractor) {\n\t\t\tbuilder._actorExtractor = this.defaultActorExtractor;\n\t\t}\n\n\t\t// Set custom security schemes\n\t\tbuilder._customSecuritySchemes = this.customSecuritySchemes;\n\n\t\t// Set RLS config if configured\n\t\tif (this.defaultRlsConfig) {\n\t\t\tbuilder._rlsConfig = this.defaultRlsConfig as any;\n\t\t}\n\n\t\treturn builder;\n\t}\n\n\tpost<TPath extends string>(path: TPath) {\n\t\treturn this.createBuilder('POST', path);\n\t}\n\n\tget<TPath extends string>(path: TPath) {\n\t\treturn this.createBuilder('GET', path);\n\t}\n\n\tput<TPath extends string>(path: TPath) {\n\t\treturn this.createBuilder('PUT', path);\n\t}\n\n\tdelete<TPath extends string>(path: TPath) {\n\t\treturn this.createBuilder('DELETE', path);\n\t}\n\n\tpatch<TPath extends string>(path: TPath) {\n\t\treturn this.createBuilder('PATCH', path);\n\t}\n\n\toptions<TPath extends string>(path: TPath) {\n\t\treturn this.createBuilder('OPTIONS', path);\n\t}\n}\n\nexport type RemoveTrailingSlash<T extends string> = T extends `${infer Rest}/`\n\t? Rest extends ''\n\t\t? T // Keep \"/\" as is\n\t\t: Rest\n\t: T;\n\nexport type JoinPaths<\n\tTBasePath extends string,\n\tTPath extends string,\n> = RemoveTrailingSlash<\n\tTBasePath extends ''\n\t\t? TPath\n\t\t: TPath extends ''\n\t\t\t? TBasePath\n\t\t\t: TBasePath extends '/'\n\t\t\t\t? TPath extends `/${string}`\n\t\t\t\t\t? TPath\n\t\t\t\t\t: `/${TPath}`\n\t\t\t\t: TBasePath extends `${infer Base}/`\n\t\t\t\t\t? TPath extends `/${infer Rest}`\n\t\t\t\t\t\t? `${Base}/${Rest}`\n\t\t\t\t\t\t: `${Base}/${TPath}`\n\t\t\t\t\t: TPath extends `/${infer Rest}`\n\t\t\t\t\t\t? `${TBasePath}/${Rest}`\n\t\t\t\t\t\t: `${TBasePath}/${TPath}`\n>;\n\nexport interface EndpointFactoryOptions<\n\tTServices extends Service[] = [],\n\tTBasePath extends string = '',\n\tTLogger extends Logger = Logger,\n\tTSession = unknown,\n\tTAuthorizers extends readonly string[] = readonly string[],\n\tTAuditStorage extends AuditStorage | undefined = undefined,\n\tTAuditStorageServiceName extends string = string,\n\tTDatabase = undefined,\n\tTDatabaseServiceName extends string = string,\n\tTSecuritySchemes extends Record<string, SecurityScheme> = Record<\n\t\tstring,\n\t\tSecurityScheme\n\t>,\n\tTRlsConfig extends\n\t\t| RlsConfig<TServices, TSession, TLogger>\n\t\t| undefined = undefined,\n> {\n\tdefaultServices?: TServices;\n\t/** Construct ids from `.dependsOn()`, carried so a route can declare edges. */\n\tdefaultConstructs?: string[];\n\tbasePath?: TBasePath;\n\tdefaultAuthorizeFn?: AuthorizeFn<\n\t\tTServices,\n\t\tTLogger,\n\t\tTSession,\n\t\tundefined,\n\t\tTDatabase\n\t>;\n\tdefaultLogger?: TLogger;\n\tdefaultSessionExtractor?: SessionFn<TServices, TLogger, TSession, TDatabase>;\n\tavailableAuthorizers?: Authorizer[];\n\tdefaultAuthorizerName?: TAuthorizers[number];\n\tdefaultAuditorStorage?: Service<TAuditStorageServiceName, TAuditStorage>;\n\tdefaultDatabaseService?: Service<TDatabaseServiceName, TDatabase>;\n\tdefaultActorExtractor?: ActorExtractor<TServices, TSession, TLogger>;\n\tcustomSecuritySchemes?: TSecuritySchemes;\n\tdefaultRlsConfig?: TRlsConfig;\n\t/**\n\t * The surface this factory belongs to.\n\t *\n\t * Required. A factory exists to build endpoints for a surface, and an\n\t * endpoint without one has no logger, no env parser and nothing to\n\t * attribute its traffic to — which was survivable only while `e` existed.\n\t *\n\t * Carried through every derived factory, so `api.database(db)`\n\t * still produces endpoints that know which API serves them.\n\t */\n\tsurface: EndpointSurface;\n}\n"],"mappings":"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"}