@geekmidas/constructs 3.0.3 → 3.0.6

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 (219) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/dist/{AmazonApiGatewayEndpointAdaptor-jDYqkgFE.cjs → AmazonApiGatewayEndpointAdaptor-BIltcbAc.cjs} +21 -2
  3. package/dist/AmazonApiGatewayEndpointAdaptor-BIltcbAc.cjs.map +1 -0
  4. package/dist/{AmazonApiGatewayEndpointAdaptor-ciUHVvPX.mjs → AmazonApiGatewayEndpointAdaptor-BpYtYCeW.mjs} +21 -2
  5. package/dist/AmazonApiGatewayEndpointAdaptor-BpYtYCeW.mjs.map +1 -0
  6. package/dist/{AmazonApiGatewayEndpointAdaptor-D4lAuXA-.d.cts → AmazonApiGatewayEndpointAdaptor-DqNcQGMf.d.cts} +11 -2
  7. package/dist/AmazonApiGatewayEndpointAdaptor-DqNcQGMf.d.cts.map +1 -0
  8. package/dist/{AmazonApiGatewayEndpointAdaptor-B30TqZRX.d.mts → AmazonApiGatewayEndpointAdaptor-Hi8Pbp2d.d.mts} +11 -2
  9. package/dist/AmazonApiGatewayEndpointAdaptor-Hi8Pbp2d.d.mts.map +1 -0
  10. package/dist/{AmazonApiGatewayV1EndpointAdaptor-DCfEo-Tu.mjs → AmazonApiGatewayV1EndpointAdaptor-CRwyWT6t.mjs} +3 -3
  11. package/dist/{AmazonApiGatewayV1EndpointAdaptor-DCfEo-Tu.mjs.map → AmazonApiGatewayV1EndpointAdaptor-CRwyWT6t.mjs.map} +1 -1
  12. package/dist/{AmazonApiGatewayV1EndpointAdaptor-DwKlAfnb.cjs → AmazonApiGatewayV1EndpointAdaptor-DEETT6Wj.cjs} +3 -3
  13. package/dist/{AmazonApiGatewayV1EndpointAdaptor-DwKlAfnb.cjs.map → AmazonApiGatewayV1EndpointAdaptor-DEETT6Wj.cjs.map} +1 -1
  14. package/dist/{AmazonApiGatewayV1EndpointAdaptor-B5xFYauV.d.cts → AmazonApiGatewayV1EndpointAdaptor-DcN2fYsv.d.cts} +3 -3
  15. package/dist/AmazonApiGatewayV1EndpointAdaptor-DcN2fYsv.d.cts.map +1 -0
  16. package/dist/{AmazonApiGatewayV1EndpointAdaptor-CG1UJoAK.d.mts → AmazonApiGatewayV1EndpointAdaptor-cpwJzU4W.d.mts} +3 -3
  17. package/dist/AmazonApiGatewayV1EndpointAdaptor-cpwJzU4W.d.mts.map +1 -0
  18. package/dist/{AmazonApiGatewayV2EndpointAdaptor-B126fL6i.cjs → AmazonApiGatewayV2EndpointAdaptor-C2qO8FN6.cjs} +4 -3
  19. package/dist/{AmazonApiGatewayV2EndpointAdaptor-B126fL6i.cjs.map → AmazonApiGatewayV2EndpointAdaptor-C2qO8FN6.cjs.map} +1 -1
  20. package/dist/{AmazonApiGatewayV2EndpointAdaptor-OkwjABOz.d.cts → AmazonApiGatewayV2EndpointAdaptor-Cn9UoRgB.d.cts} +3 -3
  21. package/dist/AmazonApiGatewayV2EndpointAdaptor-Cn9UoRgB.d.cts.map +1 -0
  22. package/dist/{AmazonApiGatewayV2EndpointAdaptor-ofjuxcPV.d.mts → AmazonApiGatewayV2EndpointAdaptor-LzH3hkB-.d.mts} +3 -3
  23. package/dist/AmazonApiGatewayV2EndpointAdaptor-LzH3hkB-.d.mts.map +1 -0
  24. package/dist/{AmazonApiGatewayV2EndpointAdaptor-CGMF4lD4.mjs → AmazonApiGatewayV2EndpointAdaptor-m9YKI294.mjs} +4 -3
  25. package/dist/AmazonApiGatewayV2EndpointAdaptor-m9YKI294.mjs.map +1 -0
  26. package/dist/{Authorizer-BgjU8-z6.mjs → Authorizer-4unKN3Xn.mjs} +1 -1
  27. package/dist/{Authorizer-BgjU8-z6.mjs.map → Authorizer-4unKN3Xn.mjs.map} +1 -1
  28. package/dist/{Authorizer-BXxBee2P.cjs → Authorizer-Dx57psuM.cjs} +1 -1
  29. package/dist/{Authorizer-BXxBee2P.cjs.map → Authorizer-Dx57psuM.cjs.map} +1 -1
  30. package/dist/{Cron-BUpUS-0f.mjs → Cron-B3vrGuaD.mjs} +1 -1
  31. package/dist/{Cron-BUpUS-0f.mjs.map → Cron-B3vrGuaD.mjs.map} +1 -1
  32. package/dist/{Cron-Bp08dJ4R.cjs → Cron-DEKZg5j4.cjs} +1 -1
  33. package/dist/{Cron-Bp08dJ4R.cjs.map → Cron-DEKZg5j4.cjs.map} +1 -1
  34. package/dist/{CronBuilder-CIxJQ1Ps.cjs → CronBuilder-BHpY6w3b.cjs} +2 -2
  35. package/dist/{CronBuilder-CIxJQ1Ps.cjs.map → CronBuilder-BHpY6w3b.cjs.map} +1 -1
  36. package/dist/{CronBuilder-DUggbCHc.mjs → CronBuilder-VXpyNfp2.mjs} +2 -2
  37. package/dist/{CronBuilder-DUggbCHc.mjs.map → CronBuilder-VXpyNfp2.mjs.map} +1 -1
  38. package/dist/Endpoint-BcxvF4F3.cjs.map +1 -1
  39. package/dist/{Endpoint-C9N6CmvB.d.cts → Endpoint-CGdCGJkC.d.cts} +6 -6
  40. package/dist/Endpoint-CGdCGJkC.d.cts.map +1 -0
  41. package/dist/{Endpoint-BiPM0glm.d.mts → Endpoint-DtFQFL63.d.mts} +6 -6
  42. package/dist/Endpoint-DtFQFL63.d.mts.map +1 -0
  43. package/dist/Endpoint-DvY3aqAy.mjs.map +1 -1
  44. package/dist/{EndpointBuilder-CF-ZWtdu.mjs → EndpointBuilder-CMzbGG2c.mjs} +7 -3
  45. package/dist/EndpointBuilder-CMzbGG2c.mjs.map +1 -0
  46. package/dist/{EndpointBuilder-B0Aj5jbB.d.mts → EndpointBuilder-DIAsH97h.d.mts} +4 -3
  47. package/dist/EndpointBuilder-DIAsH97h.d.mts.map +1 -0
  48. package/dist/{EndpointBuilder-Bel6RS7W.d.cts → EndpointBuilder-Dzqcm8Yv.d.cts} +4 -3
  49. package/dist/EndpointBuilder-Dzqcm8Yv.d.cts.map +1 -0
  50. package/dist/{EndpointBuilder-CyszO0bs.cjs → EndpointBuilder-QdDf3x87.cjs} +7 -3
  51. package/dist/EndpointBuilder-QdDf3x87.cjs.map +1 -0
  52. package/dist/{EndpointFactory-B0D6d6t9.cjs → EndpointFactory-AsfUsn-v.cjs} +3 -3
  53. package/dist/EndpointFactory-AsfUsn-v.cjs.map +1 -0
  54. package/dist/{EndpointFactory-CXvakOkn.d.cts → EndpointFactory-C1rh407J.d.cts} +5 -5
  55. package/dist/EndpointFactory-C1rh407J.d.cts.map +1 -0
  56. package/dist/{EndpointFactory-Do498RmG.mjs → EndpointFactory-CkPaFZA0.mjs} +3 -3
  57. package/dist/EndpointFactory-CkPaFZA0.mjs.map +1 -0
  58. package/dist/{EndpointFactory-CWIeWCRG.d.mts → EndpointFactory-pCuCu_1H.d.mts} +5 -5
  59. package/dist/EndpointFactory-pCuCu_1H.d.mts.map +1 -0
  60. package/dist/{HonoEndpointAdaptor-CQqQPLHH.cjs → HonoEndpointAdaptor-B5fKdLi7.cjs} +6 -2
  61. package/dist/HonoEndpointAdaptor-B5fKdLi7.cjs.map +1 -0
  62. package/dist/{HonoEndpointAdaptor-DgoeqUX6.d.mts → HonoEndpointAdaptor-BXga7Jqh.d.mts} +4 -4
  63. package/dist/{HonoEndpointAdaptor-BNHGwpvZ.d.cts.map → HonoEndpointAdaptor-BXga7Jqh.d.mts.map} +1 -1
  64. package/dist/{HonoEndpointAdaptor-BNHGwpvZ.d.cts → HonoEndpointAdaptor-D3IgM-0B.d.cts} +4 -4
  65. package/dist/{HonoEndpointAdaptor-DgoeqUX6.d.mts.map → HonoEndpointAdaptor-D3IgM-0B.d.cts.map} +1 -1
  66. package/dist/{HonoEndpointAdaptor-BvxQreVM.mjs → HonoEndpointAdaptor-DOUODM7n.mjs} +6 -2
  67. package/dist/HonoEndpointAdaptor-DOUODM7n.mjs.map +1 -0
  68. package/dist/{Subscriber-DKQK5gLD.mjs → Subscriber-BEhOdNQi.mjs} +1 -1
  69. package/dist/{Subscriber-DKQK5gLD.mjs.map → Subscriber-BEhOdNQi.mjs.map} +1 -1
  70. package/dist/{Subscriber-ClqSPbIZ.cjs → Subscriber-Scz7hrV6.cjs} +1 -1
  71. package/dist/{Subscriber-ClqSPbIZ.cjs.map → Subscriber-Scz7hrV6.cjs.map} +1 -1
  72. package/dist/{SubscriberBuilder-BS5B_688.cjs → SubscriberBuilder-B82h4v-S.cjs} +2 -2
  73. package/dist/{SubscriberBuilder-BS5B_688.cjs.map → SubscriberBuilder-B82h4v-S.cjs.map} +1 -1
  74. package/dist/{SubscriberBuilder-BswTuvUc.mjs → SubscriberBuilder-DlUaG0Ej.mjs} +2 -2
  75. package/dist/{SubscriberBuilder-BswTuvUc.mjs.map → SubscriberBuilder-DlUaG0Ej.mjs.map} +1 -1
  76. package/dist/{TestEndpointAdaptor-CCf3Dg0u.d.cts → TestEndpointAdaptor-Clz_L8Xj.d.cts} +2 -2
  77. package/dist/{TestEndpointAdaptor-CCf3Dg0u.d.cts.map → TestEndpointAdaptor-Clz_L8Xj.d.cts.map} +1 -1
  78. package/dist/{TestEndpointAdaptor-qSWV8dpS.d.mts → TestEndpointAdaptor-DxXJoBBf.d.mts} +2 -2
  79. package/dist/{TestEndpointAdaptor-qSWV8dpS.d.mts.map → TestEndpointAdaptor-DxXJoBBf.d.mts.map} +1 -1
  80. package/dist/{TestEndpointAdaptor-CDOhCmIk.mjs → TestEndpointAdaptor-G2T789bH.mjs} +6 -2
  81. package/dist/TestEndpointAdaptor-G2T789bH.mjs.map +1 -0
  82. package/dist/{TestEndpointAdaptor-DjQSuxRq.cjs → TestEndpointAdaptor-YlwOEisx.cjs} +6 -2
  83. package/dist/TestEndpointAdaptor-YlwOEisx.cjs.map +1 -0
  84. package/dist/adaptors/aws.cjs +3 -3
  85. package/dist/adaptors/aws.d.cts +5 -5
  86. package/dist/adaptors/aws.d.mts +5 -5
  87. package/dist/adaptors/aws.mjs +3 -3
  88. package/dist/adaptors/hono.cjs +1 -1
  89. package/dist/adaptors/hono.d.cts +3 -3
  90. package/dist/adaptors/hono.d.mts +3 -3
  91. package/dist/adaptors/hono.mjs +1 -1
  92. package/dist/adaptors/testing.cjs +1 -1
  93. package/dist/adaptors/testing.d.cts +3 -3
  94. package/dist/adaptors/testing.d.mts +3 -3
  95. package/dist/adaptors/testing.mjs +1 -1
  96. package/dist/crons/Cron.cjs +1 -1
  97. package/dist/crons/Cron.d.cts +1 -1
  98. package/dist/crons/Cron.d.mts +1 -1
  99. package/dist/crons/Cron.mjs +1 -1
  100. package/dist/crons/CronBuilder.cjs +2 -2
  101. package/dist/crons/CronBuilder.d.cts +1 -1
  102. package/dist/crons/CronBuilder.d.mts +1 -1
  103. package/dist/crons/CronBuilder.mjs +2 -2
  104. package/dist/crons/index.cjs +2 -2
  105. package/dist/crons/index.d.cts +5 -5
  106. package/dist/crons/index.d.cts.map +1 -1
  107. package/dist/crons/index.d.mts +5 -5
  108. package/dist/crons/index.d.mts.map +1 -1
  109. package/dist/crons/index.mjs +2 -2
  110. package/dist/endpoints/AmazonApiGatewayEndpointAdaptor.cjs +1 -1
  111. package/dist/endpoints/AmazonApiGatewayEndpointAdaptor.d.cts +3 -3
  112. package/dist/endpoints/AmazonApiGatewayEndpointAdaptor.d.mts +3 -3
  113. package/dist/endpoints/AmazonApiGatewayEndpointAdaptor.mjs +1 -1
  114. package/dist/endpoints/AmazonApiGatewayV1EndpointAdaptor.cjs +2 -2
  115. package/dist/endpoints/AmazonApiGatewayV1EndpointAdaptor.d.cts +4 -4
  116. package/dist/endpoints/AmazonApiGatewayV1EndpointAdaptor.d.mts +4 -4
  117. package/dist/endpoints/AmazonApiGatewayV1EndpointAdaptor.mjs +2 -2
  118. package/dist/endpoints/AmazonApiGatewayV2EndpointAdaptor.cjs +2 -2
  119. package/dist/endpoints/AmazonApiGatewayV2EndpointAdaptor.d.cts +4 -4
  120. package/dist/endpoints/AmazonApiGatewayV2EndpointAdaptor.d.mts +4 -4
  121. package/dist/endpoints/AmazonApiGatewayV2EndpointAdaptor.mjs +2 -2
  122. package/dist/endpoints/Authorizer.cjs +1 -1
  123. package/dist/endpoints/Authorizer.mjs +1 -1
  124. package/dist/endpoints/Endpoint.d.cts +2 -2
  125. package/dist/endpoints/Endpoint.d.mts +2 -2
  126. package/dist/endpoints/EndpointBuilder.cjs +3 -3
  127. package/dist/endpoints/EndpointBuilder.d.cts +3 -3
  128. package/dist/endpoints/EndpointBuilder.d.mts +3 -3
  129. package/dist/endpoints/EndpointBuilder.mjs +3 -3
  130. package/dist/endpoints/EndpointFactory.cjs +4 -4
  131. package/dist/endpoints/EndpointFactory.d.cts +4 -4
  132. package/dist/endpoints/EndpointFactory.d.mts +4 -4
  133. package/dist/endpoints/EndpointFactory.mjs +4 -4
  134. package/dist/endpoints/HonoEndpointAdaptor.cjs +1 -1
  135. package/dist/endpoints/HonoEndpointAdaptor.d.cts +3 -3
  136. package/dist/endpoints/HonoEndpointAdaptor.d.mts +3 -3
  137. package/dist/endpoints/HonoEndpointAdaptor.mjs +1 -1
  138. package/dist/endpoints/TestEndpointAdaptor.cjs +1 -1
  139. package/dist/endpoints/TestEndpointAdaptor.d.cts +3 -3
  140. package/dist/endpoints/TestEndpointAdaptor.d.mts +3 -3
  141. package/dist/endpoints/TestEndpointAdaptor.mjs +1 -1
  142. package/dist/endpoints/audit.d.cts +2 -2
  143. package/dist/endpoints/audit.d.mts +2 -2
  144. package/dist/endpoints/helpers.d.cts +2 -2
  145. package/dist/endpoints/helpers.d.mts +2 -2
  146. package/dist/endpoints/index.cjs +4 -4
  147. package/dist/endpoints/index.d.cts +7 -7
  148. package/dist/endpoints/index.d.mts +7 -7
  149. package/dist/endpoints/index.mjs +4 -4
  150. package/dist/endpoints/lazyAccessors.d.cts +3 -3
  151. package/dist/endpoints/lazyAccessors.d.mts +3 -3
  152. package/dist/endpoints/processAudits.d.cts +2 -2
  153. package/dist/endpoints/processAudits.d.mts +2 -2
  154. package/dist/endpoints/rls.cjs +1 -1
  155. package/dist/endpoints/rls.d.cts +2 -2
  156. package/dist/endpoints/rls.d.mts +2 -2
  157. package/dist/endpoints/rls.mjs +1 -1
  158. package/dist/functions/index.d.cts +1 -1
  159. package/dist/functions/index.d.mts +1 -1
  160. package/dist/index-BfeupgMl.d.cts +12 -0
  161. package/dist/{index-Br-zTYii.d.mts.map → index-BfeupgMl.d.cts.map} +1 -1
  162. package/dist/index-DQo_Csy7.d.mts +12 -0
  163. package/dist/{index-dRNH0dT6.d.cts.map → index-DQo_Csy7.d.mts.map} +1 -1
  164. package/dist/{lazyAccessors-DXkJpnyX.d.mts → lazyAccessors-Bled3FVc.d.mts} +2 -2
  165. package/dist/{lazyAccessors-DXkJpnyX.d.mts.map → lazyAccessors-Bled3FVc.d.mts.map} +1 -1
  166. package/dist/{lazyAccessors-DdZaA716.d.cts → lazyAccessors-C8AF1hNi.d.cts} +2 -2
  167. package/dist/{lazyAccessors-DdZaA716.d.cts.map → lazyAccessors-C8AF1hNi.d.cts.map} +1 -1
  168. package/dist/{rls-C0cWOnk4.mjs → rls-7XXX7DvY.mjs} +1 -1
  169. package/dist/{rls-C0cWOnk4.mjs.map → rls-7XXX7DvY.mjs.map} +1 -1
  170. package/dist/{rls-BrywnrQb.cjs → rls-DxFqdIA0.cjs} +1 -1
  171. package/dist/{rls-BrywnrQb.cjs.map → rls-DxFqdIA0.cjs.map} +1 -1
  172. package/dist/subscribers/Subscriber.cjs +1 -1
  173. package/dist/subscribers/Subscriber.mjs +1 -1
  174. package/dist/subscribers/SubscriberBuilder.cjs +2 -2
  175. package/dist/subscribers/SubscriberBuilder.mjs +2 -2
  176. package/dist/subscribers/index.cjs +2 -2
  177. package/dist/subscribers/index.d.cts +2 -2
  178. package/dist/subscribers/index.d.cts.map +1 -1
  179. package/dist/subscribers/index.d.mts +2 -2
  180. package/dist/subscribers/index.mjs +2 -2
  181. package/package.json +11 -11
  182. package/src/endpoints/AmazonApiGatewayEndpointAdaptor.ts +35 -1
  183. package/src/endpoints/AmazonApiGatewayV1EndpointAdaptor.ts +5 -1
  184. package/src/endpoints/AmazonApiGatewayV2EndpointAdaptor.ts +7 -1
  185. package/src/endpoints/Endpoint.ts +17 -4
  186. package/src/endpoints/EndpointBuilder.ts +9 -1
  187. package/src/endpoints/EndpointFactory.ts +19 -5
  188. package/src/endpoints/HonoEndpointAdaptor.ts +11 -1
  189. package/src/endpoints/TestEndpointAdaptor.ts +5 -1
  190. package/src/endpoints/__tests__/AmazonApiGatewayV1EndpointAdaptor.spec.ts +112 -0
  191. package/src/endpoints/__tests__/AmazonApiGatewayV2EndpointAdaptor.spec.ts +137 -0
  192. package/src/endpoints/__tests__/EndpointBuilder.spec.ts +35 -0
  193. package/src/endpoints/__tests__/HonoEndpointAdaptor.spec.ts +105 -0
  194. package/src/endpoints/__tests__/TestEndpointAdaptor.spec.ts +193 -0
  195. package/dist/AmazonApiGatewayEndpointAdaptor-B30TqZRX.d.mts.map +0 -1
  196. package/dist/AmazonApiGatewayEndpointAdaptor-D4lAuXA-.d.cts.map +0 -1
  197. package/dist/AmazonApiGatewayEndpointAdaptor-ciUHVvPX.mjs.map +0 -1
  198. package/dist/AmazonApiGatewayEndpointAdaptor-jDYqkgFE.cjs.map +0 -1
  199. package/dist/AmazonApiGatewayV1EndpointAdaptor-B5xFYauV.d.cts.map +0 -1
  200. package/dist/AmazonApiGatewayV1EndpointAdaptor-CG1UJoAK.d.mts.map +0 -1
  201. package/dist/AmazonApiGatewayV2EndpointAdaptor-CGMF4lD4.mjs.map +0 -1
  202. package/dist/AmazonApiGatewayV2EndpointAdaptor-OkwjABOz.d.cts.map +0 -1
  203. package/dist/AmazonApiGatewayV2EndpointAdaptor-ofjuxcPV.d.mts.map +0 -1
  204. package/dist/Endpoint-BiPM0glm.d.mts.map +0 -1
  205. package/dist/Endpoint-C9N6CmvB.d.cts.map +0 -1
  206. package/dist/EndpointBuilder-B0Aj5jbB.d.mts.map +0 -1
  207. package/dist/EndpointBuilder-Bel6RS7W.d.cts.map +0 -1
  208. package/dist/EndpointBuilder-CF-ZWtdu.mjs.map +0 -1
  209. package/dist/EndpointBuilder-CyszO0bs.cjs.map +0 -1
  210. package/dist/EndpointFactory-B0D6d6t9.cjs.map +0 -1
  211. package/dist/EndpointFactory-CWIeWCRG.d.mts.map +0 -1
  212. package/dist/EndpointFactory-CXvakOkn.d.cts.map +0 -1
  213. package/dist/EndpointFactory-Do498RmG.mjs.map +0 -1
  214. package/dist/HonoEndpointAdaptor-BvxQreVM.mjs.map +0 -1
  215. package/dist/HonoEndpointAdaptor-CQqQPLHH.cjs.map +0 -1
  216. package/dist/TestEndpointAdaptor-CDOhCmIk.mjs.map +0 -1
  217. package/dist/TestEndpointAdaptor-DjQSuxRq.cjs.map +0 -1
  218. package/dist/index-Br-zTYii.d.mts +0 -12
  219. package/dist/index-dRNH0dT6.d.cts +0 -12
@@ -1 +0,0 @@
1
- {"version":3,"file":"EndpointFactory-B0D6d6t9.cjs","names":["ConsoleLogger","path: P","basePath: TBasePath","authorizers: T","schemes: T","name:\n\t\t\t| BuiltInSecuritySchemeId\n\t\t\t| keyof TSecuritySchemes\n\t\t\t| TAuthorizers[number]\n\t\t\t| 'none'","path: TPath","fn: AuthorizeFn<TServices, TLogger, TSession>","services: S","logger: L","publisher: Service<TServiceName, T>","session: SessionFn<TServices, TLogger, T, TDatabase>","service: Service<TName, T>","storage: Service<TName, T>","extractor: ActorExtractor<TServices, TSession, TLogger>","config: TConfig","method: TMethod","EndpointBuilder"],"sources":["../src/endpoints/EndpointFactory.ts"],"sourcesContent":["import type {\n\tAuditableAction,\n\tAuditStorage,\n\tExtractStorageAuditAction,\n} from '@geekmidas/audit';\nimport type { EventPublisher, MappedEvent } from '@geekmidas/events';\nimport type { Logger } from '@geekmidas/logger';\nimport { ConsoleLogger } from '@geekmidas/logger/console';\nimport type { Service } from '@geekmidas/services';\nimport uniqBy from 'lodash.uniqby';\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, 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\nconst DEFAULT_LOGGER = new ConsoleLogger() as any;\n\nexport class EndpointFactory<\n\tTServices extends Service[] = [],\n\tTBasePath extends string = '',\n\tTLogger extends Logger = Logger,\n\tTSession = unknown,\n\tTEventPublisher extends EventPublisher<any> | undefined = undefined,\n\tTEventPublisherServiceName extends string = string,\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\tprivate basePath: TBasePath = '' as TBasePath;\n\tprivate defaultAuthorizeFn?: AuthorizeFn<TServices, TLogger, TSession>;\n\tprivate defaultEventPublisher:\n\t\t| Service<TEventPublisherServiceName, TEventPublisher>\n\t\t| undefined;\n\tprivate defaultSessionExtractor?: SessionFn<\n\t\tTServices,\n\t\tTLogger,\n\t\tTSession,\n\t\tTDatabase\n\t>;\n\tprivate defaultLogger: TLogger = DEFAULT_LOGGER;\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 = {} as TSecuritySchemes;\n\tprivate defaultRlsConfig?: TRlsConfig;\n\n\tconstructor({\n\t\tbasePath,\n\t\tdefaultAuthorizeFn,\n\t\tdefaultLogger,\n\t\tdefaultSessionExtractor,\n\t\t// @ts-expect-error\n\t\tdefaultServices = [] as TServices,\n\t\tdefaultEventPublisher,\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}: EndpointFactoryOptions<\n\t\tTServices,\n\t\tTBasePath,\n\t\tTLogger,\n\t\tTSession,\n\t\tTEventPublisher,\n\t\tTEventPublisherServiceName,\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.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 || (DEFAULT_LOGGER as TLogger);\n\t\tthis.defaultSessionExtractor = defaultSessionExtractor;\n\t\tthis.defaultEventPublisher = defaultEventPublisher;\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}\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\tTEventPublisher,\n\t\tTEventPublisherServiceName,\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\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\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\tbasePath: this.basePath,\n\t\t\tdefaultAuthorizeFn: this.defaultAuthorizeFn,\n\t\t\tdefaultLogger: this.defaultLogger,\n\t\t\tdefaultSessionExtractor: this.defaultSessionExtractor,\n\t\t\tdefaultEventPublisher: this.defaultEventPublisher,\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\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\tTEventPublisher,\n\t\tTEventPublisherServiceName,\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\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\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\tbasePath: this.basePath,\n\t\t\tdefaultAuthorizeFn: this.defaultAuthorizeFn,\n\t\t\tdefaultLogger: this.defaultLogger,\n\t\t\tdefaultSessionExtractor: this.defaultSessionExtractor,\n\t\t\tdefaultEventPublisher: this.defaultEventPublisher,\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\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\tTEventPublisher,\n\t\tTEventPublisherServiceName,\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\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\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\tbasePath: this.basePath,\n\t\t\tdefaultAuthorizeFn: this.defaultAuthorizeFn,\n\t\t\tdefaultLogger: this.defaultLogger,\n\t\t\tdefaultSessionExtractor: this.defaultSessionExtractor,\n\t\t\tdefaultEventPublisher: this.defaultEventPublisher,\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\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\tTEventPublisher,\n\t\tTEventPublisherServiceName,\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\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\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\tbasePath: newBasePath,\n\t\t\tdefaultAuthorizeFn: this.defaultAuthorizeFn,\n\t\t\tdefaultLogger: this.defaultLogger,\n\t\t\tdefaultSessionExtractor: this.defaultSessionExtractor,\n\t\t\tdefaultEventPublisher: this.defaultEventPublisher,\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\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>,\n\t): EndpointFactory<\n\t\tTServices,\n\t\tTBasePath,\n\t\tTLogger,\n\t\tTSession,\n\t\tTEventPublisher,\n\t\tTEventPublisherServiceName,\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\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\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\tbasePath: this.basePath,\n\t\t\tdefaultAuthorizeFn: fn,\n\t\t\tdefaultLogger: this.defaultLogger,\n\t\t\tdefaultSessionExtractor: this.defaultSessionExtractor,\n\t\t\tdefaultEventPublisher: this.defaultEventPublisher,\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\tdefaultRlsConfig: this.defaultRlsConfig,\n\t\t});\n\t}\n\n\t// Create a new factory with services\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\tTEventPublisher,\n\t\tTEventPublisherServiceName,\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\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\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\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\tdefaultEventPublisher: this.defaultEventPublisher,\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\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\tTEventPublisher,\n\t\tTEventPublisherServiceName,\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\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\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\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\tdefaultEventPublisher: this.defaultEventPublisher,\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\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\tpublisher<\n\t\tT extends EventPublisher<any>,\n\t\tTServiceName extends string = string,\n\t>(\n\t\tpublisher: Service<TServiceName, T>,\n\t): EndpointFactory<\n\t\tTServices,\n\t\tTBasePath,\n\t\tTLogger,\n\t\tTSession,\n\t\tT,\n\t\tTServiceName,\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\tT,\n\t\t\tTServiceName,\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\tbasePath: this.basePath,\n\t\t\tdefaultAuthorizeFn: this.defaultAuthorizeFn,\n\t\t\tdefaultLogger: this.defaultLogger,\n\t\t\tdefaultSessionExtractor: this.defaultSessionExtractor,\n\t\t\tdefaultEventPublisher: publisher,\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\tdefaultRlsConfig: this.defaultRlsConfig,\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\tTEventPublisher,\n\t\tTEventPublisherServiceName,\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\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\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\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\tdefaultEventPublisher: this.defaultEventPublisher,\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\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\tservice: Service<TName, T>,\n\t): EndpointFactory<\n\t\tTServices,\n\t\tTBasePath,\n\t\tTLogger,\n\t\tTSession,\n\t\tTEventPublisher,\n\t\tTEventPublisherServiceName,\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\treturn new EndpointFactory<\n\t\t\tTServices,\n\t\t\tTBasePath,\n\t\t\tTLogger,\n\t\t\tTSession,\n\t\t\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\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\tbasePath: this.basePath,\n\t\t\tdefaultAuthorizeFn: this.defaultAuthorizeFn,\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\tdefaultEventPublisher: this.defaultEventPublisher,\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\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\tTEventPublisher,\n\t\tTEventPublisherServiceName,\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\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\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\tbasePath: this.basePath,\n\t\t\tdefaultAuthorizeFn: this.defaultAuthorizeFn,\n\t\t\tdefaultLogger: this.defaultLogger,\n\t\t\tdefaultSessionExtractor: this.defaultSessionExtractor,\n\t\t\tdefaultEventPublisher: this.defaultEventPublisher,\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\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\tTEventPublisher,\n\t\tTEventPublisherServiceName,\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\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\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\tbasePath: this.basePath,\n\t\t\tdefaultAuthorizeFn: this.defaultAuthorizeFn,\n\t\t\tdefaultLogger: this.defaultLogger,\n\t\t\tdefaultSessionExtractor: this.defaultSessionExtractor,\n\t\t\tdefaultEventPublisher: this.defaultEventPublisher,\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\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\tTEventPublisher,\n\t\tTEventPublisherServiceName,\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\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\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\tbasePath: this.basePath,\n\t\t\tdefaultAuthorizeFn: this.defaultAuthorizeFn,\n\t\t\tdefaultLogger: this.defaultLogger,\n\t\t\tdefaultSessionExtractor: this.defaultSessionExtractor,\n\t\t\tdefaultEventPublisher: this.defaultEventPublisher,\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\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\tTEventPublisher,\n\t\tTEventPublisherServiceName,\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\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\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;\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\n\t\tif (this.defaultLogger) {\n\t\t\tbuilder._logger = this.defaultLogger as TLogger;\n\t\t}\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\tif (this.defaultEventPublisher) {\n\t\t\tbuilder._setPublisher(this.defaultEventPublisher);\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\tTEventPublisher extends EventPublisher<any> | undefined = undefined,\n\tTEventPublisherServiceName extends string = string,\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\tbasePath?: TBasePath;\n\tdefaultAuthorizeFn?: AuthorizeFn<TServices, TLogger, TSession>;\n\tdefaultLogger?: TLogger;\n\tdefaultSessionExtractor?: SessionFn<TServices, TLogger, TSession, TDatabase>;\n\tdefaultEventPublisher?: Service<TEventPublisherServiceName, TEventPublisher>;\n\tdefaultEvents?: MappedEvent<TEventPublisher, undefined>[];\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}\n\nexport const e = new EndpointFactory();\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"EndpointFactory-CWIeWCRG.d.mts","names":[],"sources":["../src/endpoints/EndpointFactory.ts"],"sourcesContent":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"EndpointFactory-CXvakOkn.d.cts","names":[],"sources":["../src/endpoints/EndpointFactory.ts"],"sourcesContent":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"EndpointFactory-Do498RmG.mjs","names":["DEFAULT_LOGGER","path: P","basePath: TBasePath","authorizers: T","schemes: T","name:\n\t\t\t| BuiltInSecuritySchemeId\n\t\t\t| keyof TSecuritySchemes\n\t\t\t| TAuthorizers[number]\n\t\t\t| 'none'","path: TPath","fn: AuthorizeFn<TServices, TLogger, TSession>","services: S","logger: L","publisher: Service<TServiceName, T>","session: SessionFn<TServices, TLogger, T, TDatabase>","service: Service<TName, T>","storage: Service<TName, T>","extractor: ActorExtractor<TServices, TSession, TLogger>","config: TConfig","method: TMethod"],"sources":["../src/endpoints/EndpointFactory.ts"],"sourcesContent":["import type {\n\tAuditableAction,\n\tAuditStorage,\n\tExtractStorageAuditAction,\n} from '@geekmidas/audit';\nimport type { EventPublisher, MappedEvent } from '@geekmidas/events';\nimport type { Logger } from '@geekmidas/logger';\nimport { ConsoleLogger } from '@geekmidas/logger/console';\nimport type { Service } from '@geekmidas/services';\nimport uniqBy from 'lodash.uniqby';\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, 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\nconst DEFAULT_LOGGER = new ConsoleLogger() as any;\n\nexport class EndpointFactory<\n\tTServices extends Service[] = [],\n\tTBasePath extends string = '',\n\tTLogger extends Logger = Logger,\n\tTSession = unknown,\n\tTEventPublisher extends EventPublisher<any> | undefined = undefined,\n\tTEventPublisherServiceName extends string = string,\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\tprivate basePath: TBasePath = '' as TBasePath;\n\tprivate defaultAuthorizeFn?: AuthorizeFn<TServices, TLogger, TSession>;\n\tprivate defaultEventPublisher:\n\t\t| Service<TEventPublisherServiceName, TEventPublisher>\n\t\t| undefined;\n\tprivate defaultSessionExtractor?: SessionFn<\n\t\tTServices,\n\t\tTLogger,\n\t\tTSession,\n\t\tTDatabase\n\t>;\n\tprivate defaultLogger: TLogger = DEFAULT_LOGGER;\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 = {} as TSecuritySchemes;\n\tprivate defaultRlsConfig?: TRlsConfig;\n\n\tconstructor({\n\t\tbasePath,\n\t\tdefaultAuthorizeFn,\n\t\tdefaultLogger,\n\t\tdefaultSessionExtractor,\n\t\t// @ts-expect-error\n\t\tdefaultServices = [] as TServices,\n\t\tdefaultEventPublisher,\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}: EndpointFactoryOptions<\n\t\tTServices,\n\t\tTBasePath,\n\t\tTLogger,\n\t\tTSession,\n\t\tTEventPublisher,\n\t\tTEventPublisherServiceName,\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.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 || (DEFAULT_LOGGER as TLogger);\n\t\tthis.defaultSessionExtractor = defaultSessionExtractor;\n\t\tthis.defaultEventPublisher = defaultEventPublisher;\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}\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\tTEventPublisher,\n\t\tTEventPublisherServiceName,\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\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\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\tbasePath: this.basePath,\n\t\t\tdefaultAuthorizeFn: this.defaultAuthorizeFn,\n\t\t\tdefaultLogger: this.defaultLogger,\n\t\t\tdefaultSessionExtractor: this.defaultSessionExtractor,\n\t\t\tdefaultEventPublisher: this.defaultEventPublisher,\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\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\tTEventPublisher,\n\t\tTEventPublisherServiceName,\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\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\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\tbasePath: this.basePath,\n\t\t\tdefaultAuthorizeFn: this.defaultAuthorizeFn,\n\t\t\tdefaultLogger: this.defaultLogger,\n\t\t\tdefaultSessionExtractor: this.defaultSessionExtractor,\n\t\t\tdefaultEventPublisher: this.defaultEventPublisher,\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\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\tTEventPublisher,\n\t\tTEventPublisherServiceName,\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\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\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\tbasePath: this.basePath,\n\t\t\tdefaultAuthorizeFn: this.defaultAuthorizeFn,\n\t\t\tdefaultLogger: this.defaultLogger,\n\t\t\tdefaultSessionExtractor: this.defaultSessionExtractor,\n\t\t\tdefaultEventPublisher: this.defaultEventPublisher,\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\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\tTEventPublisher,\n\t\tTEventPublisherServiceName,\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\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\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\tbasePath: newBasePath,\n\t\t\tdefaultAuthorizeFn: this.defaultAuthorizeFn,\n\t\t\tdefaultLogger: this.defaultLogger,\n\t\t\tdefaultSessionExtractor: this.defaultSessionExtractor,\n\t\t\tdefaultEventPublisher: this.defaultEventPublisher,\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\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>,\n\t): EndpointFactory<\n\t\tTServices,\n\t\tTBasePath,\n\t\tTLogger,\n\t\tTSession,\n\t\tTEventPublisher,\n\t\tTEventPublisherServiceName,\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\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\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\tbasePath: this.basePath,\n\t\t\tdefaultAuthorizeFn: fn,\n\t\t\tdefaultLogger: this.defaultLogger,\n\t\t\tdefaultSessionExtractor: this.defaultSessionExtractor,\n\t\t\tdefaultEventPublisher: this.defaultEventPublisher,\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\tdefaultRlsConfig: this.defaultRlsConfig,\n\t\t});\n\t}\n\n\t// Create a new factory with services\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\tTEventPublisher,\n\t\tTEventPublisherServiceName,\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\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\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\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\tdefaultEventPublisher: this.defaultEventPublisher,\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\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\tTEventPublisher,\n\t\tTEventPublisherServiceName,\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\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\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\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\tdefaultEventPublisher: this.defaultEventPublisher,\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\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\tpublisher<\n\t\tT extends EventPublisher<any>,\n\t\tTServiceName extends string = string,\n\t>(\n\t\tpublisher: Service<TServiceName, T>,\n\t): EndpointFactory<\n\t\tTServices,\n\t\tTBasePath,\n\t\tTLogger,\n\t\tTSession,\n\t\tT,\n\t\tTServiceName,\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\tT,\n\t\t\tTServiceName,\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\tbasePath: this.basePath,\n\t\t\tdefaultAuthorizeFn: this.defaultAuthorizeFn,\n\t\t\tdefaultLogger: this.defaultLogger,\n\t\t\tdefaultSessionExtractor: this.defaultSessionExtractor,\n\t\t\tdefaultEventPublisher: publisher,\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\tdefaultRlsConfig: this.defaultRlsConfig,\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\tTEventPublisher,\n\t\tTEventPublisherServiceName,\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\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\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\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\tdefaultEventPublisher: this.defaultEventPublisher,\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\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\tservice: Service<TName, T>,\n\t): EndpointFactory<\n\t\tTServices,\n\t\tTBasePath,\n\t\tTLogger,\n\t\tTSession,\n\t\tTEventPublisher,\n\t\tTEventPublisherServiceName,\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\treturn new EndpointFactory<\n\t\t\tTServices,\n\t\t\tTBasePath,\n\t\t\tTLogger,\n\t\t\tTSession,\n\t\t\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\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\tbasePath: this.basePath,\n\t\t\tdefaultAuthorizeFn: this.defaultAuthorizeFn,\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\tdefaultEventPublisher: this.defaultEventPublisher,\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\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\tTEventPublisher,\n\t\tTEventPublisherServiceName,\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\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\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\tbasePath: this.basePath,\n\t\t\tdefaultAuthorizeFn: this.defaultAuthorizeFn,\n\t\t\tdefaultLogger: this.defaultLogger,\n\t\t\tdefaultSessionExtractor: this.defaultSessionExtractor,\n\t\t\tdefaultEventPublisher: this.defaultEventPublisher,\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\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\tTEventPublisher,\n\t\tTEventPublisherServiceName,\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\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\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\tbasePath: this.basePath,\n\t\t\tdefaultAuthorizeFn: this.defaultAuthorizeFn,\n\t\t\tdefaultLogger: this.defaultLogger,\n\t\t\tdefaultSessionExtractor: this.defaultSessionExtractor,\n\t\t\tdefaultEventPublisher: this.defaultEventPublisher,\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\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\tTEventPublisher,\n\t\tTEventPublisherServiceName,\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\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\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\tbasePath: this.basePath,\n\t\t\tdefaultAuthorizeFn: this.defaultAuthorizeFn,\n\t\t\tdefaultLogger: this.defaultLogger,\n\t\t\tdefaultSessionExtractor: this.defaultSessionExtractor,\n\t\t\tdefaultEventPublisher: this.defaultEventPublisher,\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\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\tTEventPublisher,\n\t\tTEventPublisherServiceName,\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\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\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;\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\n\t\tif (this.defaultLogger) {\n\t\t\tbuilder._logger = this.defaultLogger as TLogger;\n\t\t}\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\tif (this.defaultEventPublisher) {\n\t\t\tbuilder._setPublisher(this.defaultEventPublisher);\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\tTEventPublisher extends EventPublisher<any> | undefined = undefined,\n\tTEventPublisherServiceName extends string = string,\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\tbasePath?: TBasePath;\n\tdefaultAuthorizeFn?: AuthorizeFn<TServices, TLogger, TSession>;\n\tdefaultLogger?: TLogger;\n\tdefaultSessionExtractor?: SessionFn<TServices, TLogger, TSession, TDatabase>;\n\tdefaultEventPublisher?: Service<TEventPublisherServiceName, TEventPublisher>;\n\tdefaultEvents?: MappedEvent<TEventPublisher, undefined>[];\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}\n\nexport const e = new EndpointFactory();\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"HonoEndpointAdaptor-BvxQreVM.mjs","names":["endpoint: Endpoint<\n\t\tany,\n\t\tany,\n\t\tany,\n\t\tany,\n\t\tany,\n\t\tany,\n\t\tany,\n\t\tany,\n\t\tany,\n\t\tany,\n\t\tany,\n\t\tany,\n\t\tany,\n\t\tany\n\t>","endpoint: Endpoint<\n\t\t\tTRoute,\n\t\t\tTMethod,\n\t\t\tTInput,\n\t\t\tTOutSchema,\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tTSession,\n\t\t\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\n\t\t\tTAuditStorage,\n\t\t\tTAuditStorageServiceName,\n\t\t\tTAuditAction,\n\t\t\tTDatabase,\n\t\t\tTDatabaseServiceName\n\t\t>","c: Context<any, string, {}>","data: unknown","schema?: T","serviceDiscovery: ServiceDiscovery<ServiceRecord<TServices>>","app: Hono","_app: Hono","_serviceDiscovery: ServiceDiscovery<any>","routes: string[]","envParser: EnvironmentParser<{}>","_logger: TLogger","options?: HonoEndpointOptions","endpoints: Endpoint<string, HttpMethod, any, any, TServices, TLogger>[]","validators: any[]","c: Context","logger","db: TDatabase | undefined","metadata","output","result","validationError: any","e: any","docsPath: string","openApiOptions?: HonoEndpointOptions['openApiOptions']"],"sources":["../src/endpoints/HonoEndpointAdaptor.ts"],"sourcesContent":["import type { AuditableAction, AuditStorage } from '@geekmidas/audit';\nimport { withRlsContext } from '@geekmidas/db/rls';\nimport type { EnvironmentParser } from '@geekmidas/envkit';\nimport { wrapError } from '@geekmidas/errors';\nimport type { EventPublisher } from '@geekmidas/events';\nimport type { Logger } from '@geekmidas/logger';\nimport { checkRateLimit, getRateLimitHeaders } from '@geekmidas/rate-limit';\nimport {\n\trunWithRequestContext,\n\ttype Service,\n\tServiceDiscovery,\n\ttype ServiceRecord,\n} from '@geekmidas/services';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\nimport { type Context, Hono } from 'hono';\nimport { setCookie } from 'hono/cookie';\nimport { logger as honoLogger } from 'hono/logger';\nimport { timing } from 'hono/timing';\nimport type { ContentfulStatusCode } from 'hono/utils/http-status';\nimport { validator } from 'hono/validator';\nimport { publishConstructEvents } from '../publisher';\nimport type { HttpMethod, LowerHttpMethod } from '../types';\nimport type { MappedAudit } from './audit';\nimport {\n\tEndpoint,\n\ttype EndpointContext,\n\ttype EndpointSchemas,\n\tResponseBuilder,\n} from './Endpoint';\nimport { getEndpointsFromRoutes } from './helpers';\nimport { createHonoCookies, createHonoHeaders } from './lazyAccessors';\nimport { parseHonoQuery } from './parseHonoQuery';\nimport {\n\tcreateAuditContext,\n\texecuteWithAuditTransaction,\n} from './processAudits';\n\nexport interface HonoEndpointOptions {\n\t/**\n\t * Path where OpenAPI documentation will be served.\n\t * Set to false to disable docs route.\n\t * @default '/docs'\n\t */\n\tdocsPath?: string | false;\n\t/**\n\t * OpenAPI schema options\n\t */\n\topenApiOptions?: {\n\t\ttitle?: string;\n\t\tversion?: string;\n\t\tdescription?: string;\n\t};\n}\n\n/**\n * Feature flags for an endpoint, analyzed once at route registration time.\n * This avoids per-request feature detection overhead.\n */\ninterface EndpointFeatures {\n\thasServices: boolean;\n\thasDatabase: boolean;\n\thasBodyValidation: boolean;\n\thasQueryValidation: boolean;\n\thasParamValidation: boolean;\n\thasAudits: boolean;\n\thasEvents: boolean;\n\thasRateLimit: boolean;\n\thasRls: boolean;\n}\n\n/**\n * Analyze endpoint features at registration time (not per-request)\n */\nfunction analyzeEndpointFeatures(\n\tendpoint: Endpoint<\n\t\tany,\n\t\tany,\n\t\tany,\n\t\tany,\n\t\tany,\n\t\tany,\n\t\tany,\n\t\tany,\n\t\tany,\n\t\tany,\n\t\tany,\n\t\tany,\n\t\tany,\n\t\tany\n\t>,\n): EndpointFeatures {\n\treturn {\n\t\thasServices: endpoint.services.length > 0,\n\t\thasDatabase: !!endpoint.databaseService,\n\t\thasBodyValidation: !!endpoint.input?.body,\n\t\thasQueryValidation: !!endpoint.input?.query,\n\t\thasParamValidation: !!endpoint.input?.params,\n\t\t// Audit context needed if declarative audits OR auditor storage service configured (for manual audits)\n\t\thasAudits:\n\t\t\t(endpoint.audits?.length ?? 0) > 0 || !!endpoint.auditorStorageService,\n\t\thasEvents: (endpoint.events?.length ?? 0) > 0,\n\t\thasRateLimit: !!endpoint.rateLimit,\n\t\thasRls: !!endpoint.rlsConfig && !endpoint.rlsBypass,\n\t};\n}\n\nexport class HonoEndpoint<\n\tTRoute extends string,\n\tTMethod extends HttpMethod,\n\tTInput extends EndpointSchemas = {},\n\tTOutSchema extends StandardSchemaV1 | undefined = undefined,\n\tTServices extends Service[] = [],\n\tTLogger extends Logger = Logger,\n\tTSession = unknown,\n\tTEventPublisher extends EventPublisher<any> | undefined = undefined,\n\tTEventPublisherServiceName extends string = 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> {\n\tconstructor(\n\t\tprivate readonly endpoint: Endpoint<\n\t\t\tTRoute,\n\t\t\tTMethod,\n\t\t\tTInput,\n\t\t\tTOutSchema,\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tTSession,\n\t\t\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\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\tstatic isDev = process.env.NODE_ENV === 'development';\n\n\tstatic async validate<T extends StandardSchemaV1>(\n\t\tc: Context<any, string, {}>,\n\t\tdata: unknown,\n\t\tschema?: T,\n\t) {\n\t\tif (!schema) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst parsed = await Endpoint.validate(schema, data);\n\n\t\tif (parsed.issues) {\n\t\t\treturn c.json(parsed.issues, 422);\n\t\t}\n\n\t\treturn parsed.value;\n\t}\n\taddRoute(\n\t\tserviceDiscovery: ServiceDiscovery<ServiceRecord<TServices>>,\n\t\tapp: Hono,\n\t): void {\n\t\tHonoEndpoint.addRoute(this.endpoint, serviceDiscovery, app);\n\t}\n\n\t/**\n\t * @deprecated Global event middleware is no longer used.\n\t * Events are now published per-route only for endpoints that have events configured.\n\t * This method is kept for backward compatibility but does nothing.\n\t */\n\tstatic applyEventMiddleware(\n\t\t_app: Hono,\n\t\t_serviceDiscovery: ServiceDiscovery<any>,\n\t) {\n\t\t// No-op: Event publishing is now handled per-route in addRoute\n\t\t// This avoids running middleware on every request including 404s\n\t}\n\n\tstatic async fromRoutes<TLogger extends Logger, TServices extends Service[]>(\n\t\troutes: string[],\n\t\tenvParser: EnvironmentParser<{}>,\n\t\tapp = new Hono(),\n\t\t_logger: TLogger,\n\t\tcwd = process.cwd(),\n\t\toptions?: HonoEndpointOptions,\n\t): Promise<Hono> {\n\t\tconst endpoints = await getEndpointsFromRoutes<TServices>(routes, cwd);\n\t\tconst serviceDiscovery =\n\t\t\tServiceDiscovery.getInstance<ServiceRecord<TServices>>(envParser);\n\n\t\tHonoEndpoint.addRoutes(endpoints, serviceDiscovery, app, options);\n\n\t\treturn app;\n\t}\n\n\tstatic addRoutes<\n\t\tTServices extends Service[] = [],\n\t\tTLogger extends Logger = Logger,\n\t>(\n\t\tendpoints: Endpoint<string, HttpMethod, any, any, TServices, TLogger>[],\n\t\tserviceDiscovery: ServiceDiscovery<ServiceRecord<TServices>>,\n\t\tapp: Hono,\n\t\toptions?: HonoEndpointOptions,\n\t): void {\n\t\t// Add timing middleware (always enabled)\n\t\tapp.use('*', timing());\n\n\t\t// Add logger middleware in development mode\n\n\t\tif (HonoEndpoint.isDev) {\n\t\t\tapp.use('*', honoLogger());\n\t\t}\n\n\t\t// Add docs route if not disabled\n\t\tconst docsPath =\n\t\t\toptions?.docsPath !== false ? options?.docsPath || '/docs' : null;\n\t\tif (docsPath) {\n\t\t\tHonoEndpoint.addDocsRoute(\n\t\t\t\tendpoints,\n\t\t\t\tapp,\n\t\t\t\tdocsPath,\n\t\t\t\toptions?.openApiOptions,\n\t\t\t);\n\t\t}\n\n\t\t// Sort endpoints to ensure static routes come before dynamic ones\n\t\tconst sortedEndpoints = endpoints.sort((a, b) => {\n\t\t\tconst aSegments = a.route.split('/');\n\t\t\tconst bSegments = b.route.split('/');\n\n\t\t\t// Compare each segment\n\t\t\tfor (let i = 0; i < Math.max(aSegments.length, bSegments.length); i++) {\n\t\t\t\tconst aSegment = aSegments[i] || '';\n\t\t\t\tconst bSegment = bSegments[i] || '';\n\n\t\t\t\t// If one is dynamic and the other is not, static comes first\n\t\t\t\tconst aIsDynamic = aSegment.startsWith(':');\n\t\t\t\tconst bIsDynamic = bSegment.startsWith(':');\n\n\t\t\t\tif (!aIsDynamic && bIsDynamic) return -1;\n\t\t\t\tif (aIsDynamic && !bIsDynamic) return 1;\n\n\t\t\t\t// If both are the same type, compare alphabetically\n\t\t\t\tif (aSegment !== bSegment) {\n\t\t\t\t\treturn aSegment.localeCompare(bSegment);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn 0;\n\t\t});\n\n\t\t// Note: Global event middleware removed for performance\n\t\t// Events are now published per-route only for endpoints with events configured\n\t\tfor (const endpoint of sortedEndpoints) {\n\t\t\tHonoEndpoint.addRoute(endpoint, serviceDiscovery, app);\n\t\t}\n\t}\n\n\tstatic addRoute<\n\t\tTRoute extends string,\n\t\tTMethod extends HttpMethod,\n\t\tTInput extends EndpointSchemas = {},\n\t\tTOutSchema extends StandardSchemaV1 | undefined = undefined,\n\t\tTServices extends Service[] = [],\n\t\tTLogger extends Logger = Logger,\n\t\tTSession = unknown,\n\t\tTEventPublisher extends EventPublisher<any> | undefined = undefined,\n\t\tTEventPublisherServiceName extends string = string,\n\t\tTAuditStorage extends AuditStorage | undefined = undefined,\n\t\tTAuditStorageServiceName extends string = string,\n\t\tTAuditAction extends AuditableAction<string, unknown> = AuditableAction<\n\t\t\tstring,\n\t\t\tunknown\n\t\t>,\n\t\tTDatabase = undefined,\n\t\tTDatabaseServiceName extends string = string,\n\t>(\n\t\tendpoint: Endpoint<\n\t\t\tTRoute,\n\t\t\tTMethod,\n\t\t\tTInput,\n\t\t\tTOutSchema,\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tTSession,\n\t\t\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\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\tserviceDiscovery: ServiceDiscovery<ServiceRecord<TServices>>,\n\t\tapp: Hono,\n\t): void {\n\t\tconst { route } = endpoint;\n\t\tconst method = endpoint.method.toLowerCase() as LowerHttpMethod<TMethod>;\n\n\t\t// Analyze endpoint features once at registration time (not per-request)\n\t\tconst features = analyzeEndpointFeatures(endpoint);\n\n\t\t// Build validators array - only add validators for schemas that exist\n\t\tconst validators: any[] = [];\n\n\t\tif (features.hasBodyValidation) {\n\t\t\tvalidators.push(\n\t\t\t\tvalidator('json', (value, c) =>\n\t\t\t\t\tHonoEndpoint.validate(c, value, endpoint.input?.body),\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\n\t\tif (features.hasQueryValidation) {\n\t\t\tvalidators.push(\n\t\t\t\tvalidator('query', (_, c) => {\n\t\t\t\t\tconst parsedQuery = parseHonoQuery(c);\n\t\t\t\t\treturn HonoEndpoint.validate(c, parsedQuery, endpoint.input?.query);\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\n\t\tif (features.hasParamValidation) {\n\t\t\tvalidators.push(\n\t\t\t\tvalidator('param', (params, c) =>\n\t\t\t\t\tHonoEndpoint.validate(c, params, endpoint.input?.params),\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\n\t\t// Main handler\n\t\tconst handler = async (c: Context) => {\n\t\t\t// Request context setup\n\t\t\tconst startTime = Date.now();\n\t\t\tconst requestId = c.req.header('X-Request-ID') ?? crypto.randomUUID();\n\n\t\t\tconst logger = endpoint.logger.child({\n\t\t\t\trequestId,\n\t\t\t\tendpoint: endpoint.fullPath,\n\t\t\t\troute: endpoint.route,\n\t\t\t\thost: c.req.header('host'),\n\t\t\t\tmethod: endpoint.method,\n\t\t\t\tpath: c.req.path,\n\t\t\t}) as TLogger;\n\n\t\t\t// Set response header\n\t\t\tc.header('X-Request-ID', requestId);\n\n\t\t\t// Wrap entire handler in request context for services to access\n\t\t\treturn runWithRequestContext(\n\t\t\t\t{ logger, requestId, startTime },\n\t\t\t\tasync () => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\t// Lazy accessors - no upfront parsing, use native Hono methods\n\t\t\t\t\t\tconst header = createHonoHeaders(c);\n\t\t\t\t\t\tconst cookie = createHonoCookies(c);\n\n\t\t\t\t\t\t// Only register services if endpoint has any\n\t\t\t\t\t\tconst services = features.hasServices\n\t\t\t\t\t\t\t? await serviceDiscovery.register(endpoint.services)\n\t\t\t\t\t\t\t: ({} as ServiceRecord<TServices>);\n\n\t\t\t\t\t\t// Resolve database service only if configured\n\t\t\t\t\t\tconst rawDb = features.hasDatabase\n\t\t\t\t\t\t\t? await serviceDiscovery\n\t\t\t\t\t\t\t\t\t.register([endpoint.databaseService!])\n\t\t\t\t\t\t\t\t\t.then(\n\t\t\t\t\t\t\t\t\t\t(s) =>\n\t\t\t\t\t\t\t\t\t\t\ts[\n\t\t\t\t\t\t\t\t\t\t\t\tendpoint.databaseService?.serviceName as keyof typeof s\n\t\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t: undefined;\n\n\t\t\t\t\t\t// Extract session (defaults to empty object)\n\t\t\t\t\t\tconst session = await endpoint.getSession({\n\t\t\t\t\t\t\tservices,\n\t\t\t\t\t\t\tlogger,\n\t\t\t\t\t\t\theader,\n\t\t\t\t\t\t\tcookie,\n\t\t\t\t\t\t\t...(rawDb !== undefined && { db: rawDb }),\n\t\t\t\t\t\t} as any);\n\n\t\t\t\t\t\t// Check authorization (defaults to true)\n\t\t\t\t\t\tconst isAuthorized = await endpoint.authorize({\n\t\t\t\t\t\t\theader,\n\t\t\t\t\t\t\tcookie,\n\t\t\t\t\t\t\tservices,\n\t\t\t\t\t\t\tlogger,\n\t\t\t\t\t\t\tsession,\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (!isAuthorized) {\n\t\t\t\t\t\t\tlogger.warn('Unauthorized access attempt');\n\t\t\t\t\t\t\treturn c.json({ error: 'Unauthorized' }, 401);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Check rate limit only if configured\n\t\t\t\t\t\tif (features.hasRateLimit) {\n\t\t\t\t\t\t\tconst rateLimitInfo = await checkRateLimit(endpoint.rateLimit!, {\n\t\t\t\t\t\t\t\theader,\n\t\t\t\t\t\t\t\tservices,\n\t\t\t\t\t\t\t\tlogger,\n\t\t\t\t\t\t\t\tsession,\n\t\t\t\t\t\t\t\tpath: c.req.path,\n\t\t\t\t\t\t\t\tmethod: endpoint.method,\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tconst rateLimitHeaders = getRateLimitHeaders(\n\t\t\t\t\t\t\t\trateLimitInfo,\n\t\t\t\t\t\t\t\tendpoint.rateLimit!,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tfor (const [key, value] of Object.entries(rateLimitHeaders)) {\n\t\t\t\t\t\t\t\tif (value) {\n\t\t\t\t\t\t\t\t\tc.header(key, value);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Create audit context only if audits are configured\n\t\t\t\t\t\tconst auditContext = features.hasAudits\n\t\t\t\t\t\t\t? await createAuditContext(\n\t\t\t\t\t\t\t\t\tendpoint as any,\n\t\t\t\t\t\t\t\t\tserviceDiscovery,\n\t\t\t\t\t\t\t\t\tlogger,\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tsession,\n\t\t\t\t\t\t\t\t\t\theader,\n\t\t\t\t\t\t\t\t\t\tcookie,\n\t\t\t\t\t\t\t\t\t\tservices: services as Record<string, unknown>,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t: undefined;\n\n\t\t\t\t\t\tconst audits = features.hasAudits\n\t\t\t\t\t\t\t? (endpoint.audits as MappedAudit<TAuditAction, TOutSchema>[])\n\t\t\t\t\t\t\t: [];\n\n\t\t\t\t\t\t// Warn if declarative audits are configured but no audit storage\n\t\t\t\t\t\tif (features.hasAudits && !auditContext) {\n\t\t\t\t\t\t\tlogger.warn('No auditor storage service available');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Extract RLS context only if configured and not bypassed\n\t\t\t\t\t\tconst rlsContext =\n\t\t\t\t\t\t\tfeatures.hasRls && rawDb !== undefined\n\t\t\t\t\t\t\t\t? await endpoint.rlsConfig?.extractor({\n\t\t\t\t\t\t\t\t\t\tservices,\n\t\t\t\t\t\t\t\t\t\tsession: session as TSession,\n\t\t\t\t\t\t\t\t\t\theader,\n\t\t\t\t\t\t\t\t\t\tcookie,\n\t\t\t\t\t\t\t\t\t\tlogger,\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t: undefined;\n\n\t\t\t\t\t\t// Execute handler with automatic audit transaction support\n\t\t\t\t\t\tconst result = await executeWithAuditTransaction(\n\t\t\t\t\t\t\tauditContext,\n\t\t\t\t\t\t\tasync (auditor) => {\n\t\t\t\t\t\t\t\tconst sameDatabase =\n\t\t\t\t\t\t\t\t\tauditContext?.storage?.databaseServiceName &&\n\t\t\t\t\t\t\t\t\tauditContext.storage.databaseServiceName ===\n\t\t\t\t\t\t\t\t\t\tendpoint.databaseService?.serviceName;\n\t\t\t\t\t\t\t\tconst baseDb = sameDatabase\n\t\t\t\t\t\t\t\t\t? (auditor?.getTransaction?.() ?? rawDb)\n\t\t\t\t\t\t\t\t\t: rawDb;\n\n\t\t\t\t\t\t\t\tconst executeHandler = async (db: TDatabase | undefined) => {\n\t\t\t\t\t\t\t\t\tconst responseBuilder = new ResponseBuilder();\n\t\t\t\t\t\t\t\t\tconst response = await endpoint.handler(\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tservices,\n\t\t\t\t\t\t\t\t\t\t\tlogger,\n\t\t\t\t\t\t\t\t\t\t\tbody: features.hasBodyValidation\n\t\t\t\t\t\t\t\t\t\t\t\t? (c.req.valid as any)('json')\n\t\t\t\t\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t\t\t\t\t\tquery: features.hasQueryValidation\n\t\t\t\t\t\t\t\t\t\t\t\t? (c.req.valid as any)('query')\n\t\t\t\t\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t\t\t\t\t\tparams: features.hasParamValidation\n\t\t\t\t\t\t\t\t\t\t\t\t? (c.req.valid as any)('param')\n\t\t\t\t\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t\t\t\t\t\tsession,\n\t\t\t\t\t\t\t\t\t\t\theader,\n\t\t\t\t\t\t\t\t\t\t\tcookie,\n\t\t\t\t\t\t\t\t\t\t\tauditor,\n\t\t\t\t\t\t\t\t\t\t\tdb,\n\t\t\t\t\t\t\t\t\t\t} as unknown as EndpointContext<\n\t\t\t\t\t\t\t\t\t\t\tTInput,\n\t\t\t\t\t\t\t\t\t\t\tTServices,\n\t\t\t\t\t\t\t\t\t\t\tTLogger,\n\t\t\t\t\t\t\t\t\t\t\tTSession,\n\t\t\t\t\t\t\t\t\t\t\tTAuditAction,\n\t\t\t\t\t\t\t\t\t\t\tTDatabase,\n\t\t\t\t\t\t\t\t\t\t\tTAuditStorage\n\t\t\t\t\t\t\t\t\t\t>,\n\t\t\t\t\t\t\t\t\t\tresponseBuilder,\n\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\tlet data = response;\n\t\t\t\t\t\t\t\t\tlet metadata = responseBuilder.getMetadata();\n\n\t\t\t\t\t\t\t\t\tif (Endpoint.hasMetadata(response)) {\n\t\t\t\t\t\t\t\t\t\tdata = response.data;\n\t\t\t\t\t\t\t\t\t\tmetadata = response.metadata;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tconst output = endpoint.outputSchema\n\t\t\t\t\t\t\t\t\t\t? await endpoint.parseOutput(data)\n\t\t\t\t\t\t\t\t\t\t: undefined;\n\n\t\t\t\t\t\t\t\t\treturn { output, metadata, responseBuilder };\n\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t\tif (features.hasRls && rlsContext && baseDb) {\n\t\t\t\t\t\t\t\t\treturn withRlsContext(\n\t\t\t\t\t\t\t\t\t\tbaseDb as any,\n\t\t\t\t\t\t\t\t\t\trlsContext,\n\t\t\t\t\t\t\t\t\t\tasync (trx) => executeHandler(trx as TDatabase),\n\t\t\t\t\t\t\t\t\t\t{ prefix: endpoint.rlsConfig?.prefix },\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\treturn executeHandler(baseDb as TDatabase | undefined);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tasync (result, auditor) => {\n\t\t\t\t\t\t\t\tif (!audits?.length) return;\n\n\t\t\t\t\t\t\t\tfor (const audit of audits) {\n\t\t\t\t\t\t\t\t\tif (audit.when && !audit.when(result.output as any)) {\n\t\t\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tconst payload = audit.payload(result.output as any);\n\t\t\t\t\t\t\t\t\tconst entityId = audit.entityId?.(result.output as any);\n\t\t\t\t\t\t\t\t\tauditor.audit(audit.type as any, payload as any, {\n\t\t\t\t\t\t\t\t\t\ttable: audit.table,\n\t\t\t\t\t\t\t\t\t\tentityId,\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{ db: rawDb },\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tconst { output, metadata } = result;\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tlet status = endpoint.status as ContentfulStatusCode;\n\n\t\t\t\t\t\t\tif (metadata.status) {\n\t\t\t\t\t\t\t\tstatus = metadata.status as ContentfulStatusCode;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (metadata.headers) {\n\t\t\t\t\t\t\t\tfor (const [key, value] of Object.entries(metadata.headers)) {\n\t\t\t\t\t\t\t\t\tc.header(key, value);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (metadata.cookies) {\n\t\t\t\t\t\t\t\tfor (const [name, { value, options }] of metadata.cookies) {\n\t\t\t\t\t\t\t\t\tsetCookie(c, name, value, options);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Only publish events if configured (no global middleware overhead)\n\t\t\t\t\t\t\tif (features.hasEvents && Endpoint.isSuccessStatus(status)) {\n\t\t\t\t\t\t\t\tawait publishConstructEvents<any, any>(\n\t\t\t\t\t\t\t\t\tendpoint as any,\n\t\t\t\t\t\t\t\t\toutput,\n\t\t\t\t\t\t\t\t\tserviceDiscovery,\n\t\t\t\t\t\t\t\t\tlogger,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (HonoEndpoint.isDev) {\n\t\t\t\t\t\t\t\tlogger.info({ status, body: output }, 'Outgoing response');\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// @ts-expect-error\n\t\t\t\t\t\t\treturn c.json(output, status);\n\t\t\t\t\t\t} catch (validationError: any) {\n\t\t\t\t\t\t\tlogger.error(validationError, 'Output validation failed');\n\t\t\t\t\t\t\tconst error = wrapError(\n\t\t\t\t\t\t\t\tvalidationError,\n\t\t\t\t\t\t\t\t422,\n\t\t\t\t\t\t\t\t'Response validation failed',\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tif (HonoEndpoint.isDev) {\n\t\t\t\t\t\t\t\tlogger.info(\n\t\t\t\t\t\t\t\t\t{ status: error.statusCode, body: error },\n\t\t\t\t\t\t\t\t\t'Outgoing response',\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn c.json(error, error.statusCode as ContentfulStatusCode);\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch (e: any) {\n\t\t\t\t\t\tlogger.error(e, 'Error processing endpoint request');\n\t\t\t\t\t\tconst error = wrapError(e, 500, 'Internal Server Error');\n\t\t\t\t\t\tif (HonoEndpoint.isDev) {\n\t\t\t\t\t\t\tlogger.info(\n\t\t\t\t\t\t\t\t{ status: error.statusCode, body: error },\n\t\t\t\t\t\t\t\t'Outgoing response',\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn c.json(error, error.statusCode as ContentfulStatusCode);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t);\n\t\t};\n\n\t\t// Register route with conditional validators\n\t\tapp[method](route, ...validators, handler);\n\t}\n\n\tstatic addDocsRoute<\n\t\tTServices extends Service[] = [],\n\t\tTLogger extends Logger = Logger,\n\t>(\n\t\tendpoints: Endpoint<string, HttpMethod, any, any, TServices, TLogger>[],\n\t\tapp: Hono,\n\t\tdocsPath: string,\n\t\topenApiOptions?: HonoEndpointOptions['openApiOptions'],\n\t): void {\n\t\tapp.get(docsPath, async (c) => {\n\t\t\ttry {\n\t\t\t\tconst openApiSchema = await Endpoint.buildOpenApiSchema(\n\t\t\t\t\tendpoints,\n\t\t\t\t\topenApiOptions,\n\t\t\t\t);\n\n\t\t\t\treturn c.json(openApiSchema);\n\t\t\t} catch {\n\t\t\t\treturn c.json(\n\t\t\t\t\t{ error: 'Failed to generate OpenAPI documentation' },\n\t\t\t\t\t500,\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAyEA,SAAS,wBACRA,UAgBmB;AACnB,QAAO;EACN,aAAa,SAAS,SAAS,SAAS;EACxC,eAAe,SAAS;EACxB,qBAAqB,SAAS,OAAO;EACrC,sBAAsB,SAAS,OAAO;EACtC,sBAAsB,SAAS,OAAO;EAEtC,YACE,SAAS,QAAQ,UAAU,KAAK,OAAO,SAAS;EAClD,YAAY,SAAS,QAAQ,UAAU,KAAK;EAC5C,gBAAgB,SAAS;EACzB,UAAU,SAAS,cAAc,SAAS;CAC1C;AACD;AAED,IAAa,eAAb,MAAa,aAkBX;CACD,YACkBC,UAgBhB;EAhBgB;CAgBd;CAEJ,OAAO,QAAQ,QAAQ,IAAI,aAAa;CAExC,aAAa,SACZC,GACAC,MACAC,QACC;AACD,OAAK,OACJ;EAGD,MAAM,SAAS,MAAM,SAAS,SAAS,QAAQ,KAAK;AAEpD,MAAI,OAAO,OACV,QAAO,EAAE,KAAK,OAAO,QAAQ,IAAI;AAGlC,SAAO,OAAO;CACd;CACD,SACCC,kBACAC,KACO;AACP,eAAa,SAAS,KAAK,UAAU,kBAAkB,IAAI;CAC3D;;;;;;CAOD,OAAO,qBACNC,MACAC,mBACC,CAGD;CAED,aAAa,WACZC,QACAC,WACA,MAAM,IAAI,QACVC,SACA,MAAM,QAAQ,KAAK,EACnBC,SACgB;EAChB,MAAM,YAAY,MAAM,uBAAkC,QAAQ,IAAI;EACtE,MAAM,mBACL,iBAAiB,YAAsC,UAAU;AAElE,eAAa,UAAU,WAAW,kBAAkB,KAAK,QAAQ;AAEjE,SAAO;CACP;CAED,OAAO,UAINC,WACAR,kBACAC,KACAM,SACO;AAEP,MAAI,IAAI,KAAK,QAAQ,CAAC;AAItB,MAAI,aAAa,MAChB,KAAI,IAAI,KAAK,QAAY,CAAC;EAI3B,MAAM,WACL,SAAS,aAAa,QAAQ,SAAS,YAAY,UAAU;AAC9D,MAAI,SACH,cAAa,aACZ,WACA,KACA,UACA,SAAS,eACT;EAIF,MAAM,kBAAkB,UAAU,KAAK,CAAC,GAAG,MAAM;GAChD,MAAM,YAAY,EAAE,MAAM,MAAM,IAAI;GACpC,MAAM,YAAY,EAAE,MAAM,MAAM,IAAI;AAGpC,QAAK,IAAI,IAAI,GAAG,IAAI,KAAK,IAAI,UAAU,QAAQ,UAAU,OAAO,EAAE,KAAK;IACtE,MAAM,WAAW,UAAU,MAAM;IACjC,MAAM,WAAW,UAAU,MAAM;IAGjC,MAAM,aAAa,SAAS,WAAW,IAAI;IAC3C,MAAM,aAAa,SAAS,WAAW,IAAI;AAE3C,SAAK,cAAc,WAAY,QAAO;AACtC,QAAI,eAAe,WAAY,QAAO;AAGtC,QAAI,aAAa,SAChB,QAAO,SAAS,cAAc,SAAS;GAExC;AAED,UAAO;EACP,EAAC;AAIF,OAAK,MAAM,YAAY,gBACtB,cAAa,SAAS,UAAU,kBAAkB,IAAI;CAEvD;CAED,OAAO,SAmBNX,UAgBAI,kBACAC,KACO;EACP,MAAM,EAAE,OAAO,GAAG;EAClB,MAAM,SAAS,SAAS,OAAO,aAAa;EAG5C,MAAM,WAAW,wBAAwB,SAAS;EAGlD,MAAMQ,aAAoB,CAAE;AAE5B,MAAI,SAAS,kBACZ,YAAW,KACV,UAAU,QAAQ,CAAC,OAAO,MACzB,aAAa,SAAS,GAAG,OAAO,SAAS,OAAO,KAAK,CACrD,CACD;AAGF,MAAI,SAAS,mBACZ,YAAW,KACV,UAAU,SAAS,CAAC,GAAG,MAAM;GAC5B,MAAM,cAAc,eAAe,EAAE;AACrC,UAAO,aAAa,SAAS,GAAG,aAAa,SAAS,OAAO,MAAM;EACnE,EAAC,CACF;AAGF,MAAI,SAAS,mBACZ,YAAW,KACV,UAAU,SAAS,CAAC,QAAQ,MAC3B,aAAa,SAAS,GAAG,QAAQ,SAAS,OAAO,OAAO,CACxD,CACD;EAIF,MAAM,UAAU,OAAOC,MAAe;GAErC,MAAM,YAAY,KAAK,KAAK;GAC5B,MAAM,YAAY,EAAE,IAAI,OAAO,eAAe,IAAI,OAAO,YAAY;GAErE,MAAMC,WAAS,SAAS,OAAO,MAAM;IACpC;IACA,UAAU,SAAS;IACnB,OAAO,SAAS;IAChB,MAAM,EAAE,IAAI,OAAO,OAAO;IAC1B,QAAQ,SAAS;IACjB,MAAM,EAAE,IAAI;GACZ,EAAC;AAGF,KAAE,OAAO,gBAAgB,UAAU;AAGnC,UAAO,sBACN;IAAE;IAAQ;IAAW;GAAW,GAChC,YAAY;AACX,QAAI;KAEH,MAAM,SAAS,kBAAkB,EAAE;KACnC,MAAM,SAAS,kBAAkB,EAAE;KAGnC,MAAM,WAAW,SAAS,cACvB,MAAM,iBAAiB,SAAS,SAAS,SAAS,GACjD,CAAE;KAGN,MAAM,QAAQ,SAAS,cACpB,MAAM,iBACL,SAAS,CAAC,SAAS,eAAiB,EAAC,CACrC,KACA,CAAC,MACA,EACC,SAAS,iBAAiB,aAE5B;KAIJ,MAAM,UAAU,MAAM,SAAS,WAAW;MACzC;MACA;MACA;MACA;MACA,GAAI,oBAAuB,EAAE,IAAI,MAAO;KACxC,EAAQ;KAGT,MAAM,eAAe,MAAM,SAAS,UAAU;MAC7C;MACA;MACA;MACA;MACA;KACA,EAAC;AAEF,UAAK,cAAc;AAClB,eAAO,KAAK,8BAA8B;AAC1C,aAAO,EAAE,KAAK,EAAE,OAAO,eAAgB,GAAE,IAAI;KAC7C;AAGD,SAAI,SAAS,cAAc;MAC1B,MAAM,gBAAgB,MAAM,eAAe,SAAS,WAAY;OAC/D;OACA;OACA;OACA;OACA,MAAM,EAAE,IAAI;OACZ,QAAQ,SAAS;MACjB,EAAC;MAEF,MAAM,mBAAmB,oBACxB,eACA,SAAS,UACT;AACD,WAAK,MAAM,CAAC,KAAK,MAAM,IAAI,OAAO,QAAQ,iBAAiB,CAC1D,KAAI,MACH,GAAE,OAAO,KAAK,MAAM;KAGtB;KAGD,MAAM,eAAe,SAAS,YAC3B,MAAM,mBACN,UACA,kBACAA,UACA;MACC;MACA;MACA;MACU;KACV,EACD;KAGH,MAAM,SAAS,SAAS,YACpB,SAAS,SACV,CAAE;AAGL,SAAI,SAAS,cAAc,aAC1B,UAAO,KAAK,uCAAuC;KAIpD,MAAM,aACL,SAAS,UAAU,mBAChB,MAAM,SAAS,WAAW,UAAU;MACpC;MACS;MACT;MACA;MACA;KACA,EAAC;KAIL,MAAM,SAAS,MAAM,4BACpB,cACA,OAAO,YAAY;MAClB,MAAM,eACL,cAAc,SAAS,uBACvB,aAAa,QAAQ,wBACpB,SAAS,iBAAiB;MAC5B,MAAM,SAAS,eACX,SAAS,kBAAkB,IAAI,QAChC;MAEH,MAAM,iBAAiB,OAAOC,OAA8B;OAC3D,MAAM,kBAAkB,IAAI;OAC5B,MAAM,WAAW,MAAM,SAAS,QAC/B;QACC;QACA;QACA,MAAM,SAAS,oBACZ,AAAC,EAAE,IAAI,MAAc,OAAO;QAE/B,OAAO,SAAS,qBACb,AAAC,EAAE,IAAI,MAAc,QAAQ;QAEhC,QAAQ,SAAS,qBACd,AAAC,EAAE,IAAI,MAAc,QAAQ;QAEhC;QACA;QACA;QACA;QACA;OACA,GASD,gBACA;OAED,IAAI,OAAO;OACX,IAAIC,aAAW,gBAAgB,aAAa;AAE5C,WAAI,SAAS,YAAY,SAAS,EAAE;AACnC,eAAO,SAAS;AAChB,qBAAW,SAAS;OACpB;OAED,MAAMC,WAAS,SAAS,eACrB,MAAM,SAAS,YAAY,KAAK;AAGnC,cAAO;QAAE;QAAQ;QAAU;OAAiB;MAC5C;AAED,UAAI,SAAS,UAAU,cAAc,OACpC,QAAO,eACN,QACA,YACA,OAAO,QAAQ,eAAe,IAAiB,EAC/C,EAAE,QAAQ,SAAS,WAAW,OAAQ,EACtC;AAGF,aAAO,eAAe,OAAgC;KACtD,GACD,OAAOC,UAAQ,YAAY;AAC1B,WAAK,QAAQ,OAAQ;AAErB,WAAK,MAAM,SAAS,QAAQ;AAC3B,WAAI,MAAM,SAAS,MAAM,KAAKA,SAAO,OAAc,CAClD;OAED,MAAM,UAAU,MAAM,QAAQA,SAAO,OAAc;OACnD,MAAM,WAAW,MAAM,WAAWA,SAAO,OAAc;AACvD,eAAQ,MAAM,MAAM,MAAa,SAAgB;QAChD,OAAO,MAAM;QACb;OACA,EAAC;MACF;KACD,GACD,EAAE,IAAI,MAAO,EACb;KAED,MAAM,EAAE,QAAQ,UAAU,GAAG;AAE7B,SAAI;MACH,IAAI,SAAS,SAAS;AAEtB,UAAI,SAAS,OACZ,UAAS,SAAS;AAGnB,UAAI,SAAS,QACZ,MAAK,MAAM,CAAC,KAAK,MAAM,IAAI,OAAO,QAAQ,SAAS,QAAQ,CAC1D,GAAE,OAAO,KAAK,MAAM;AAItB,UAAI,SAAS,QACZ,MAAK,MAAM,CAAC,MAAM,EAAE,OAAO,SAAS,CAAC,IAAI,SAAS,QACjD,WAAU,GAAG,MAAM,OAAO,QAAQ;AAKpC,UAAI,SAAS,aAAa,SAAS,gBAAgB,OAAO,CACzD,OAAM,uBACL,UACA,QACA,kBACAJ,SACA;AAGF,UAAI,aAAa,MAChB,UAAO,KAAK;OAAE;OAAQ,MAAM;MAAQ,GAAE,oBAAoB;AAI3D,aAAO,EAAE,KAAK,QAAQ,OAAO;KAC7B,SAAQK,iBAAsB;AAC9B,eAAO,MAAM,iBAAiB,2BAA2B;MACzD,MAAM,QAAQ,UACb,iBACA,KACA,6BACA;AACD,UAAI,aAAa,MAChB,UAAO,KACN;OAAE,QAAQ,MAAM;OAAY,MAAM;MAAO,GACzC,oBACA;AAEF,aAAO,EAAE,KAAK,OAAO,MAAM,WAAmC;KAC9D;IACD,SAAQC,GAAQ;AAChB,cAAO,MAAM,GAAG,oCAAoC;KACpD,MAAM,QAAQ,UAAU,GAAG,KAAK,wBAAwB;AACxD,SAAI,aAAa,MAChB,UAAO,KACN;MAAE,QAAQ,MAAM;MAAY,MAAM;KAAO,GACzC,oBACA;AAEF,YAAO,EAAE,KAAK,OAAO,MAAM,WAAmC;IAC9D;GACD,EACD;EACD;AAGD,MAAI,QAAQ,OAAO,GAAG,YAAY,QAAQ;CAC1C;CAED,OAAO,aAINT,WACAP,KACAiB,UACAC,gBACO;AACP,MAAI,IAAI,UAAU,OAAO,MAAM;AAC9B,OAAI;IACH,MAAM,gBAAgB,MAAM,SAAS,mBACpC,WACA,eACA;AAED,WAAO,EAAE,KAAK,cAAc;GAC5B,QAAO;AACP,WAAO,EAAE,KACR,EAAE,OAAO,2CAA4C,GACrD,IACA;GACD;EACD,EAAC;CACF;AACD"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"HonoEndpointAdaptor-CQqQPLHH.cjs","names":["endpoint: Endpoint<\n\t\tany,\n\t\tany,\n\t\tany,\n\t\tany,\n\t\tany,\n\t\tany,\n\t\tany,\n\t\tany,\n\t\tany,\n\t\tany,\n\t\tany,\n\t\tany,\n\t\tany,\n\t\tany\n\t>","endpoint: Endpoint<\n\t\t\tTRoute,\n\t\t\tTMethod,\n\t\t\tTInput,\n\t\t\tTOutSchema,\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tTSession,\n\t\t\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\n\t\t\tTAuditStorage,\n\t\t\tTAuditStorageServiceName,\n\t\t\tTAuditAction,\n\t\t\tTDatabase,\n\t\t\tTDatabaseServiceName\n\t\t>","c: Context<any, string, {}>","data: unknown","schema?: T","serviceDiscovery: ServiceDiscovery<ServiceRecord<TServices>>","app: Hono","_app: Hono","_serviceDiscovery: ServiceDiscovery<any>","routes: string[]","envParser: EnvironmentParser<{}>","Hono","_logger: TLogger","options?: HonoEndpointOptions","endpoints: Endpoint<string, HttpMethod, any, any, TServices, TLogger>[]","validators: any[]","c: Context","db: TDatabase | undefined","ResponseBuilder","metadata","output","result","validationError: any","e: any","docsPath: string","openApiOptions?: HonoEndpointOptions['openApiOptions']"],"sources":["../src/endpoints/HonoEndpointAdaptor.ts"],"sourcesContent":["import type { AuditableAction, AuditStorage } from '@geekmidas/audit';\nimport { withRlsContext } from '@geekmidas/db/rls';\nimport type { EnvironmentParser } from '@geekmidas/envkit';\nimport { wrapError } from '@geekmidas/errors';\nimport type { EventPublisher } from '@geekmidas/events';\nimport type { Logger } from '@geekmidas/logger';\nimport { checkRateLimit, getRateLimitHeaders } from '@geekmidas/rate-limit';\nimport {\n\trunWithRequestContext,\n\ttype Service,\n\tServiceDiscovery,\n\ttype ServiceRecord,\n} from '@geekmidas/services';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\nimport { type Context, Hono } from 'hono';\nimport { setCookie } from 'hono/cookie';\nimport { logger as honoLogger } from 'hono/logger';\nimport { timing } from 'hono/timing';\nimport type { ContentfulStatusCode } from 'hono/utils/http-status';\nimport { validator } from 'hono/validator';\nimport { publishConstructEvents } from '../publisher';\nimport type { HttpMethod, LowerHttpMethod } from '../types';\nimport type { MappedAudit } from './audit';\nimport {\n\tEndpoint,\n\ttype EndpointContext,\n\ttype EndpointSchemas,\n\tResponseBuilder,\n} from './Endpoint';\nimport { getEndpointsFromRoutes } from './helpers';\nimport { createHonoCookies, createHonoHeaders } from './lazyAccessors';\nimport { parseHonoQuery } from './parseHonoQuery';\nimport {\n\tcreateAuditContext,\n\texecuteWithAuditTransaction,\n} from './processAudits';\n\nexport interface HonoEndpointOptions {\n\t/**\n\t * Path where OpenAPI documentation will be served.\n\t * Set to false to disable docs route.\n\t * @default '/docs'\n\t */\n\tdocsPath?: string | false;\n\t/**\n\t * OpenAPI schema options\n\t */\n\topenApiOptions?: {\n\t\ttitle?: string;\n\t\tversion?: string;\n\t\tdescription?: string;\n\t};\n}\n\n/**\n * Feature flags for an endpoint, analyzed once at route registration time.\n * This avoids per-request feature detection overhead.\n */\ninterface EndpointFeatures {\n\thasServices: boolean;\n\thasDatabase: boolean;\n\thasBodyValidation: boolean;\n\thasQueryValidation: boolean;\n\thasParamValidation: boolean;\n\thasAudits: boolean;\n\thasEvents: boolean;\n\thasRateLimit: boolean;\n\thasRls: boolean;\n}\n\n/**\n * Analyze endpoint features at registration time (not per-request)\n */\nfunction analyzeEndpointFeatures(\n\tendpoint: Endpoint<\n\t\tany,\n\t\tany,\n\t\tany,\n\t\tany,\n\t\tany,\n\t\tany,\n\t\tany,\n\t\tany,\n\t\tany,\n\t\tany,\n\t\tany,\n\t\tany,\n\t\tany,\n\t\tany\n\t>,\n): EndpointFeatures {\n\treturn {\n\t\thasServices: endpoint.services.length > 0,\n\t\thasDatabase: !!endpoint.databaseService,\n\t\thasBodyValidation: !!endpoint.input?.body,\n\t\thasQueryValidation: !!endpoint.input?.query,\n\t\thasParamValidation: !!endpoint.input?.params,\n\t\t// Audit context needed if declarative audits OR auditor storage service configured (for manual audits)\n\t\thasAudits:\n\t\t\t(endpoint.audits?.length ?? 0) > 0 || !!endpoint.auditorStorageService,\n\t\thasEvents: (endpoint.events?.length ?? 0) > 0,\n\t\thasRateLimit: !!endpoint.rateLimit,\n\t\thasRls: !!endpoint.rlsConfig && !endpoint.rlsBypass,\n\t};\n}\n\nexport class HonoEndpoint<\n\tTRoute extends string,\n\tTMethod extends HttpMethod,\n\tTInput extends EndpointSchemas = {},\n\tTOutSchema extends StandardSchemaV1 | undefined = undefined,\n\tTServices extends Service[] = [],\n\tTLogger extends Logger = Logger,\n\tTSession = unknown,\n\tTEventPublisher extends EventPublisher<any> | undefined = undefined,\n\tTEventPublisherServiceName extends string = 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> {\n\tconstructor(\n\t\tprivate readonly endpoint: Endpoint<\n\t\t\tTRoute,\n\t\t\tTMethod,\n\t\t\tTInput,\n\t\t\tTOutSchema,\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tTSession,\n\t\t\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\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\tstatic isDev = process.env.NODE_ENV === 'development';\n\n\tstatic async validate<T extends StandardSchemaV1>(\n\t\tc: Context<any, string, {}>,\n\t\tdata: unknown,\n\t\tschema?: T,\n\t) {\n\t\tif (!schema) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst parsed = await Endpoint.validate(schema, data);\n\n\t\tif (parsed.issues) {\n\t\t\treturn c.json(parsed.issues, 422);\n\t\t}\n\n\t\treturn parsed.value;\n\t}\n\taddRoute(\n\t\tserviceDiscovery: ServiceDiscovery<ServiceRecord<TServices>>,\n\t\tapp: Hono,\n\t): void {\n\t\tHonoEndpoint.addRoute(this.endpoint, serviceDiscovery, app);\n\t}\n\n\t/**\n\t * @deprecated Global event middleware is no longer used.\n\t * Events are now published per-route only for endpoints that have events configured.\n\t * This method is kept for backward compatibility but does nothing.\n\t */\n\tstatic applyEventMiddleware(\n\t\t_app: Hono,\n\t\t_serviceDiscovery: ServiceDiscovery<any>,\n\t) {\n\t\t// No-op: Event publishing is now handled per-route in addRoute\n\t\t// This avoids running middleware on every request including 404s\n\t}\n\n\tstatic async fromRoutes<TLogger extends Logger, TServices extends Service[]>(\n\t\troutes: string[],\n\t\tenvParser: EnvironmentParser<{}>,\n\t\tapp = new Hono(),\n\t\t_logger: TLogger,\n\t\tcwd = process.cwd(),\n\t\toptions?: HonoEndpointOptions,\n\t): Promise<Hono> {\n\t\tconst endpoints = await getEndpointsFromRoutes<TServices>(routes, cwd);\n\t\tconst serviceDiscovery =\n\t\t\tServiceDiscovery.getInstance<ServiceRecord<TServices>>(envParser);\n\n\t\tHonoEndpoint.addRoutes(endpoints, serviceDiscovery, app, options);\n\n\t\treturn app;\n\t}\n\n\tstatic addRoutes<\n\t\tTServices extends Service[] = [],\n\t\tTLogger extends Logger = Logger,\n\t>(\n\t\tendpoints: Endpoint<string, HttpMethod, any, any, TServices, TLogger>[],\n\t\tserviceDiscovery: ServiceDiscovery<ServiceRecord<TServices>>,\n\t\tapp: Hono,\n\t\toptions?: HonoEndpointOptions,\n\t): void {\n\t\t// Add timing middleware (always enabled)\n\t\tapp.use('*', timing());\n\n\t\t// Add logger middleware in development mode\n\n\t\tif (HonoEndpoint.isDev) {\n\t\t\tapp.use('*', honoLogger());\n\t\t}\n\n\t\t// Add docs route if not disabled\n\t\tconst docsPath =\n\t\t\toptions?.docsPath !== false ? options?.docsPath || '/docs' : null;\n\t\tif (docsPath) {\n\t\t\tHonoEndpoint.addDocsRoute(\n\t\t\t\tendpoints,\n\t\t\t\tapp,\n\t\t\t\tdocsPath,\n\t\t\t\toptions?.openApiOptions,\n\t\t\t);\n\t\t}\n\n\t\t// Sort endpoints to ensure static routes come before dynamic ones\n\t\tconst sortedEndpoints = endpoints.sort((a, b) => {\n\t\t\tconst aSegments = a.route.split('/');\n\t\t\tconst bSegments = b.route.split('/');\n\n\t\t\t// Compare each segment\n\t\t\tfor (let i = 0; i < Math.max(aSegments.length, bSegments.length); i++) {\n\t\t\t\tconst aSegment = aSegments[i] || '';\n\t\t\t\tconst bSegment = bSegments[i] || '';\n\n\t\t\t\t// If one is dynamic and the other is not, static comes first\n\t\t\t\tconst aIsDynamic = aSegment.startsWith(':');\n\t\t\t\tconst bIsDynamic = bSegment.startsWith(':');\n\n\t\t\t\tif (!aIsDynamic && bIsDynamic) return -1;\n\t\t\t\tif (aIsDynamic && !bIsDynamic) return 1;\n\n\t\t\t\t// If both are the same type, compare alphabetically\n\t\t\t\tif (aSegment !== bSegment) {\n\t\t\t\t\treturn aSegment.localeCompare(bSegment);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn 0;\n\t\t});\n\n\t\t// Note: Global event middleware removed for performance\n\t\t// Events are now published per-route only for endpoints with events configured\n\t\tfor (const endpoint of sortedEndpoints) {\n\t\t\tHonoEndpoint.addRoute(endpoint, serviceDiscovery, app);\n\t\t}\n\t}\n\n\tstatic addRoute<\n\t\tTRoute extends string,\n\t\tTMethod extends HttpMethod,\n\t\tTInput extends EndpointSchemas = {},\n\t\tTOutSchema extends StandardSchemaV1 | undefined = undefined,\n\t\tTServices extends Service[] = [],\n\t\tTLogger extends Logger = Logger,\n\t\tTSession = unknown,\n\t\tTEventPublisher extends EventPublisher<any> | undefined = undefined,\n\t\tTEventPublisherServiceName extends string = string,\n\t\tTAuditStorage extends AuditStorage | undefined = undefined,\n\t\tTAuditStorageServiceName extends string = string,\n\t\tTAuditAction extends AuditableAction<string, unknown> = AuditableAction<\n\t\t\tstring,\n\t\t\tunknown\n\t\t>,\n\t\tTDatabase = undefined,\n\t\tTDatabaseServiceName extends string = string,\n\t>(\n\t\tendpoint: Endpoint<\n\t\t\tTRoute,\n\t\t\tTMethod,\n\t\t\tTInput,\n\t\t\tTOutSchema,\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tTSession,\n\t\t\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\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\tserviceDiscovery: ServiceDiscovery<ServiceRecord<TServices>>,\n\t\tapp: Hono,\n\t): void {\n\t\tconst { route } = endpoint;\n\t\tconst method = endpoint.method.toLowerCase() as LowerHttpMethod<TMethod>;\n\n\t\t// Analyze endpoint features once at registration time (not per-request)\n\t\tconst features = analyzeEndpointFeatures(endpoint);\n\n\t\t// Build validators array - only add validators for schemas that exist\n\t\tconst validators: any[] = [];\n\n\t\tif (features.hasBodyValidation) {\n\t\t\tvalidators.push(\n\t\t\t\tvalidator('json', (value, c) =>\n\t\t\t\t\tHonoEndpoint.validate(c, value, endpoint.input?.body),\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\n\t\tif (features.hasQueryValidation) {\n\t\t\tvalidators.push(\n\t\t\t\tvalidator('query', (_, c) => {\n\t\t\t\t\tconst parsedQuery = parseHonoQuery(c);\n\t\t\t\t\treturn HonoEndpoint.validate(c, parsedQuery, endpoint.input?.query);\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\n\t\tif (features.hasParamValidation) {\n\t\t\tvalidators.push(\n\t\t\t\tvalidator('param', (params, c) =>\n\t\t\t\t\tHonoEndpoint.validate(c, params, endpoint.input?.params),\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\n\t\t// Main handler\n\t\tconst handler = async (c: Context) => {\n\t\t\t// Request context setup\n\t\t\tconst startTime = Date.now();\n\t\t\tconst requestId = c.req.header('X-Request-ID') ?? crypto.randomUUID();\n\n\t\t\tconst logger = endpoint.logger.child({\n\t\t\t\trequestId,\n\t\t\t\tendpoint: endpoint.fullPath,\n\t\t\t\troute: endpoint.route,\n\t\t\t\thost: c.req.header('host'),\n\t\t\t\tmethod: endpoint.method,\n\t\t\t\tpath: c.req.path,\n\t\t\t}) as TLogger;\n\n\t\t\t// Set response header\n\t\t\tc.header('X-Request-ID', requestId);\n\n\t\t\t// Wrap entire handler in request context for services to access\n\t\t\treturn runWithRequestContext(\n\t\t\t\t{ logger, requestId, startTime },\n\t\t\t\tasync () => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\t// Lazy accessors - no upfront parsing, use native Hono methods\n\t\t\t\t\t\tconst header = createHonoHeaders(c);\n\t\t\t\t\t\tconst cookie = createHonoCookies(c);\n\n\t\t\t\t\t\t// Only register services if endpoint has any\n\t\t\t\t\t\tconst services = features.hasServices\n\t\t\t\t\t\t\t? await serviceDiscovery.register(endpoint.services)\n\t\t\t\t\t\t\t: ({} as ServiceRecord<TServices>);\n\n\t\t\t\t\t\t// Resolve database service only if configured\n\t\t\t\t\t\tconst rawDb = features.hasDatabase\n\t\t\t\t\t\t\t? await serviceDiscovery\n\t\t\t\t\t\t\t\t\t.register([endpoint.databaseService!])\n\t\t\t\t\t\t\t\t\t.then(\n\t\t\t\t\t\t\t\t\t\t(s) =>\n\t\t\t\t\t\t\t\t\t\t\ts[\n\t\t\t\t\t\t\t\t\t\t\t\tendpoint.databaseService?.serviceName as keyof typeof s\n\t\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t: undefined;\n\n\t\t\t\t\t\t// Extract session (defaults to empty object)\n\t\t\t\t\t\tconst session = await endpoint.getSession({\n\t\t\t\t\t\t\tservices,\n\t\t\t\t\t\t\tlogger,\n\t\t\t\t\t\t\theader,\n\t\t\t\t\t\t\tcookie,\n\t\t\t\t\t\t\t...(rawDb !== undefined && { db: rawDb }),\n\t\t\t\t\t\t} as any);\n\n\t\t\t\t\t\t// Check authorization (defaults to true)\n\t\t\t\t\t\tconst isAuthorized = await endpoint.authorize({\n\t\t\t\t\t\t\theader,\n\t\t\t\t\t\t\tcookie,\n\t\t\t\t\t\t\tservices,\n\t\t\t\t\t\t\tlogger,\n\t\t\t\t\t\t\tsession,\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (!isAuthorized) {\n\t\t\t\t\t\t\tlogger.warn('Unauthorized access attempt');\n\t\t\t\t\t\t\treturn c.json({ error: 'Unauthorized' }, 401);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Check rate limit only if configured\n\t\t\t\t\t\tif (features.hasRateLimit) {\n\t\t\t\t\t\t\tconst rateLimitInfo = await checkRateLimit(endpoint.rateLimit!, {\n\t\t\t\t\t\t\t\theader,\n\t\t\t\t\t\t\t\tservices,\n\t\t\t\t\t\t\t\tlogger,\n\t\t\t\t\t\t\t\tsession,\n\t\t\t\t\t\t\t\tpath: c.req.path,\n\t\t\t\t\t\t\t\tmethod: endpoint.method,\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tconst rateLimitHeaders = getRateLimitHeaders(\n\t\t\t\t\t\t\t\trateLimitInfo,\n\t\t\t\t\t\t\t\tendpoint.rateLimit!,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tfor (const [key, value] of Object.entries(rateLimitHeaders)) {\n\t\t\t\t\t\t\t\tif (value) {\n\t\t\t\t\t\t\t\t\tc.header(key, value);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Create audit context only if audits are configured\n\t\t\t\t\t\tconst auditContext = features.hasAudits\n\t\t\t\t\t\t\t? await createAuditContext(\n\t\t\t\t\t\t\t\t\tendpoint as any,\n\t\t\t\t\t\t\t\t\tserviceDiscovery,\n\t\t\t\t\t\t\t\t\tlogger,\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tsession,\n\t\t\t\t\t\t\t\t\t\theader,\n\t\t\t\t\t\t\t\t\t\tcookie,\n\t\t\t\t\t\t\t\t\t\tservices: services as Record<string, unknown>,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t: undefined;\n\n\t\t\t\t\t\tconst audits = features.hasAudits\n\t\t\t\t\t\t\t? (endpoint.audits as MappedAudit<TAuditAction, TOutSchema>[])\n\t\t\t\t\t\t\t: [];\n\n\t\t\t\t\t\t// Warn if declarative audits are configured but no audit storage\n\t\t\t\t\t\tif (features.hasAudits && !auditContext) {\n\t\t\t\t\t\t\tlogger.warn('No auditor storage service available');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Extract RLS context only if configured and not bypassed\n\t\t\t\t\t\tconst rlsContext =\n\t\t\t\t\t\t\tfeatures.hasRls && rawDb !== undefined\n\t\t\t\t\t\t\t\t? await endpoint.rlsConfig?.extractor({\n\t\t\t\t\t\t\t\t\t\tservices,\n\t\t\t\t\t\t\t\t\t\tsession: session as TSession,\n\t\t\t\t\t\t\t\t\t\theader,\n\t\t\t\t\t\t\t\t\t\tcookie,\n\t\t\t\t\t\t\t\t\t\tlogger,\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t: undefined;\n\n\t\t\t\t\t\t// Execute handler with automatic audit transaction support\n\t\t\t\t\t\tconst result = await executeWithAuditTransaction(\n\t\t\t\t\t\t\tauditContext,\n\t\t\t\t\t\t\tasync (auditor) => {\n\t\t\t\t\t\t\t\tconst sameDatabase =\n\t\t\t\t\t\t\t\t\tauditContext?.storage?.databaseServiceName &&\n\t\t\t\t\t\t\t\t\tauditContext.storage.databaseServiceName ===\n\t\t\t\t\t\t\t\t\t\tendpoint.databaseService?.serviceName;\n\t\t\t\t\t\t\t\tconst baseDb = sameDatabase\n\t\t\t\t\t\t\t\t\t? (auditor?.getTransaction?.() ?? rawDb)\n\t\t\t\t\t\t\t\t\t: rawDb;\n\n\t\t\t\t\t\t\t\tconst executeHandler = async (db: TDatabase | undefined) => {\n\t\t\t\t\t\t\t\t\tconst responseBuilder = new ResponseBuilder();\n\t\t\t\t\t\t\t\t\tconst response = await endpoint.handler(\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tservices,\n\t\t\t\t\t\t\t\t\t\t\tlogger,\n\t\t\t\t\t\t\t\t\t\t\tbody: features.hasBodyValidation\n\t\t\t\t\t\t\t\t\t\t\t\t? (c.req.valid as any)('json')\n\t\t\t\t\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t\t\t\t\t\tquery: features.hasQueryValidation\n\t\t\t\t\t\t\t\t\t\t\t\t? (c.req.valid as any)('query')\n\t\t\t\t\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t\t\t\t\t\tparams: features.hasParamValidation\n\t\t\t\t\t\t\t\t\t\t\t\t? (c.req.valid as any)('param')\n\t\t\t\t\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t\t\t\t\t\tsession,\n\t\t\t\t\t\t\t\t\t\t\theader,\n\t\t\t\t\t\t\t\t\t\t\tcookie,\n\t\t\t\t\t\t\t\t\t\t\tauditor,\n\t\t\t\t\t\t\t\t\t\t\tdb,\n\t\t\t\t\t\t\t\t\t\t} as unknown as EndpointContext<\n\t\t\t\t\t\t\t\t\t\t\tTInput,\n\t\t\t\t\t\t\t\t\t\t\tTServices,\n\t\t\t\t\t\t\t\t\t\t\tTLogger,\n\t\t\t\t\t\t\t\t\t\t\tTSession,\n\t\t\t\t\t\t\t\t\t\t\tTAuditAction,\n\t\t\t\t\t\t\t\t\t\t\tTDatabase,\n\t\t\t\t\t\t\t\t\t\t\tTAuditStorage\n\t\t\t\t\t\t\t\t\t\t>,\n\t\t\t\t\t\t\t\t\t\tresponseBuilder,\n\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\tlet data = response;\n\t\t\t\t\t\t\t\t\tlet metadata = responseBuilder.getMetadata();\n\n\t\t\t\t\t\t\t\t\tif (Endpoint.hasMetadata(response)) {\n\t\t\t\t\t\t\t\t\t\tdata = response.data;\n\t\t\t\t\t\t\t\t\t\tmetadata = response.metadata;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tconst output = endpoint.outputSchema\n\t\t\t\t\t\t\t\t\t\t? await endpoint.parseOutput(data)\n\t\t\t\t\t\t\t\t\t\t: undefined;\n\n\t\t\t\t\t\t\t\t\treturn { output, metadata, responseBuilder };\n\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t\tif (features.hasRls && rlsContext && baseDb) {\n\t\t\t\t\t\t\t\t\treturn withRlsContext(\n\t\t\t\t\t\t\t\t\t\tbaseDb as any,\n\t\t\t\t\t\t\t\t\t\trlsContext,\n\t\t\t\t\t\t\t\t\t\tasync (trx) => executeHandler(trx as TDatabase),\n\t\t\t\t\t\t\t\t\t\t{ prefix: endpoint.rlsConfig?.prefix },\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\treturn executeHandler(baseDb as TDatabase | undefined);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tasync (result, auditor) => {\n\t\t\t\t\t\t\t\tif (!audits?.length) return;\n\n\t\t\t\t\t\t\t\tfor (const audit of audits) {\n\t\t\t\t\t\t\t\t\tif (audit.when && !audit.when(result.output as any)) {\n\t\t\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tconst payload = audit.payload(result.output as any);\n\t\t\t\t\t\t\t\t\tconst entityId = audit.entityId?.(result.output as any);\n\t\t\t\t\t\t\t\t\tauditor.audit(audit.type as any, payload as any, {\n\t\t\t\t\t\t\t\t\t\ttable: audit.table,\n\t\t\t\t\t\t\t\t\t\tentityId,\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{ db: rawDb },\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tconst { output, metadata } = result;\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tlet status = endpoint.status as ContentfulStatusCode;\n\n\t\t\t\t\t\t\tif (metadata.status) {\n\t\t\t\t\t\t\t\tstatus = metadata.status as ContentfulStatusCode;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (metadata.headers) {\n\t\t\t\t\t\t\t\tfor (const [key, value] of Object.entries(metadata.headers)) {\n\t\t\t\t\t\t\t\t\tc.header(key, value);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (metadata.cookies) {\n\t\t\t\t\t\t\t\tfor (const [name, { value, options }] of metadata.cookies) {\n\t\t\t\t\t\t\t\t\tsetCookie(c, name, value, options);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Only publish events if configured (no global middleware overhead)\n\t\t\t\t\t\t\tif (features.hasEvents && Endpoint.isSuccessStatus(status)) {\n\t\t\t\t\t\t\t\tawait publishConstructEvents<any, any>(\n\t\t\t\t\t\t\t\t\tendpoint as any,\n\t\t\t\t\t\t\t\t\toutput,\n\t\t\t\t\t\t\t\t\tserviceDiscovery,\n\t\t\t\t\t\t\t\t\tlogger,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (HonoEndpoint.isDev) {\n\t\t\t\t\t\t\t\tlogger.info({ status, body: output }, 'Outgoing response');\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// @ts-expect-error\n\t\t\t\t\t\t\treturn c.json(output, status);\n\t\t\t\t\t\t} catch (validationError: any) {\n\t\t\t\t\t\t\tlogger.error(validationError, 'Output validation failed');\n\t\t\t\t\t\t\tconst error = wrapError(\n\t\t\t\t\t\t\t\tvalidationError,\n\t\t\t\t\t\t\t\t422,\n\t\t\t\t\t\t\t\t'Response validation failed',\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tif (HonoEndpoint.isDev) {\n\t\t\t\t\t\t\t\tlogger.info(\n\t\t\t\t\t\t\t\t\t{ status: error.statusCode, body: error },\n\t\t\t\t\t\t\t\t\t'Outgoing response',\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn c.json(error, error.statusCode as ContentfulStatusCode);\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch (e: any) {\n\t\t\t\t\t\tlogger.error(e, 'Error processing endpoint request');\n\t\t\t\t\t\tconst error = wrapError(e, 500, 'Internal Server Error');\n\t\t\t\t\t\tif (HonoEndpoint.isDev) {\n\t\t\t\t\t\t\tlogger.info(\n\t\t\t\t\t\t\t\t{ status: error.statusCode, body: error },\n\t\t\t\t\t\t\t\t'Outgoing response',\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn c.json(error, error.statusCode as ContentfulStatusCode);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t);\n\t\t};\n\n\t\t// Register route with conditional validators\n\t\tapp[method](route, ...validators, handler);\n\t}\n\n\tstatic addDocsRoute<\n\t\tTServices extends Service[] = [],\n\t\tTLogger extends Logger = Logger,\n\t>(\n\t\tendpoints: Endpoint<string, HttpMethod, any, any, TServices, TLogger>[],\n\t\tapp: Hono,\n\t\tdocsPath: string,\n\t\topenApiOptions?: HonoEndpointOptions['openApiOptions'],\n\t): void {\n\t\tapp.get(docsPath, async (c) => {\n\t\t\ttry {\n\t\t\t\tconst openApiSchema = await Endpoint.buildOpenApiSchema(\n\t\t\t\t\tendpoints,\n\t\t\t\t\topenApiOptions,\n\t\t\t\t);\n\n\t\t\t\treturn c.json(openApiSchema);\n\t\t\t} catch {\n\t\t\t\treturn c.json(\n\t\t\t\t\t{ error: 'Failed to generate OpenAPI documentation' },\n\t\t\t\t\t500,\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\t}\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"TestEndpointAdaptor-CDOhCmIk.mjs","names":["name: string","value: string","options?: CookieOptions","_endpoint: Endpoint<\n\t\t\tTRoute,\n\t\t\tTMethod,\n\t\t\tTInput,\n\t\t\tTOutSchema,\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tTSession,\n\t\t\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\n\t\t\tTAuditStorage,\n\t\t\tTAuditStorageServiceName,\n\t\t\tTAuditAction,\n\t\t\tTDatabase,\n\t\t\tTDatabaseServiceName\n\t\t>","endpoint: Endpoint<\n\t\t\tTRoute,\n\t\t\tTMethod,\n\t\t\tTInput,\n\t\t\tTOutSchema,\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tTSession,\n\t\t\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\n\t\t\tTAuditStorage,\n\t\t\tTAuditStorageServiceName,\n\t\t\tTAuditAction,\n\t\t\tTDatabase,\n\t\t\tTDatabaseServiceName\n\t\t>","serviceDiscovery: ServiceDiscovery<any>","ctx: TestRequestAdaptor<\n\t\t\tTInput,\n\t\t\tTServices,\n\t\t\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\n\t\t\tTAuditStorage,\n\t\t\tTAuditStorageServiceName,\n\t\t\tTDatabase,\n\t\t\tTDatabaseServiceName\n\t\t>","auditContext: AuditExecutionContext<TAuditAction> | undefined","actor: AuditActor","metadata","output","result","headers: Record<string, string | string[]>","setCookieValues: string[]","cookie"],"sources":["../src/endpoints/TestEndpointAdaptor.ts"],"sourcesContent":["import type {\n\tAuditActor,\n\tAuditableAction,\n\tAuditStorage,\n} from '@geekmidas/audit';\nimport { DefaultAuditor } from '@geekmidas/audit';\nimport { EnvironmentParser } from '@geekmidas/envkit';\nimport { UnauthorizedError } from '@geekmidas/errors';\nimport type { EventPublisher } from '@geekmidas/events';\nimport type { Logger } from '@geekmidas/logger';\nimport type {\n\tInferComposableStandardSchema,\n\tInferStandardSchema,\n} from '@geekmidas/schema';\nimport {\n\trunWithRequestContext,\n\ttype Service,\n\tServiceDiscovery,\n\ttype ServiceRecord,\n} from '@geekmidas/services';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\nimport { publishConstructEvents } from '../publisher';\nimport type { HttpMethod } from '../types';\nimport type { MappedAudit } from './audit';\nimport {\n\ttype CookieOptions,\n\tEndpoint,\n\ttype EndpointSchemas,\n\tResponseBuilder,\n} from './Endpoint';\nimport {\n\tcreateCookieHeaderAccessor,\n\tcreateObjectHeaders,\n} from './lazyAccessors';\nimport {\n\ttype AuditExecutionContext,\n\texecuteWithAuditTransaction,\n} from './processAudits';\n\nexport type TestHttpResponse<TBody = any> = {\n\tbody: TBody;\n\tstatus: number;\n\theaders: Record<string, string | string[]>;\n};\n\n/**\n * Serializes a cookie into a Set-Cookie header string\n */\nfunction serializeCookie(\n\tname: string,\n\tvalue: string,\n\toptions?: CookieOptions,\n): string {\n\tlet cookieString = `${name}=${value}`;\n\n\tif (options) {\n\t\tif (options.maxAge !== undefined) {\n\t\t\tcookieString += `; Max-Age=${options.maxAge}`;\n\t\t}\n\t\tif (options.expires) {\n\t\t\tcookieString += `; Expires=${options.expires.toUTCString()}`;\n\t\t}\n\t\tif (options.domain) {\n\t\t\tcookieString += `; Domain=${options.domain}`;\n\t\t}\n\t\tif (options.path) {\n\t\t\tcookieString += `; Path=${options.path}`;\n\t\t}\n\t\tif (options.httpOnly) {\n\t\t\tcookieString += '; HttpOnly';\n\t\t}\n\t\tif (options.secure) {\n\t\t\tcookieString += '; Secure';\n\t\t}\n\t\tif (options.sameSite) {\n\t\t\tcookieString += `; SameSite=${options.sameSite}`;\n\t\t}\n\t}\n\n\treturn cookieString;\n}\n\nexport class TestEndpointAdaptor<\n\tTRoute extends string,\n\tTMethod extends HttpMethod,\n\tTInput extends EndpointSchemas = {},\n\tTOutSchema extends StandardSchemaV1 | undefined = undefined,\n\tTServices extends Service[] = [],\n\tTLogger extends Logger = Logger,\n\tTSession = unknown,\n\tTEventPublisher extends EventPublisher<any> | undefined = undefined,\n\tTEventPublisherServiceName extends string = 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> {\n\tstatic getDefaultServiceDiscover<\n\t\tTRoute extends string,\n\t\tTMethod extends HttpMethod,\n\t\tTInput extends EndpointSchemas = {},\n\t\tTOutSchema extends StandardSchemaV1 | undefined = undefined,\n\t\tTServices extends Service[] = [],\n\t\tTLogger extends Logger = Logger,\n\t\tTSession = unknown,\n\t\tTEventPublisher extends EventPublisher<any> | undefined = undefined,\n\t\tTEventPublisherServiceName extends string = string,\n\t\tTAuditStorage extends AuditStorage | undefined = undefined,\n\t\tTAuditStorageServiceName extends string = string,\n\t\tTAuditAction extends AuditableAction<string, unknown> = AuditableAction<\n\t\t\tstring,\n\t\t\tunknown\n\t\t>,\n\t\tTDatabase = undefined,\n\t\tTDatabaseServiceName extends string = string,\n\t>(\n\t\t_endpoint: Endpoint<\n\t\t\tTRoute,\n\t\t\tTMethod,\n\t\t\tTInput,\n\t\t\tTOutSchema,\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tTSession,\n\t\t\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\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\t\treturn ServiceDiscovery.getInstance(new EnvironmentParser({}));\n\t}\n\tconstructor(\n\t\tprivate readonly endpoint: Endpoint<\n\t\t\tTRoute,\n\t\t\tTMethod,\n\t\t\tTInput,\n\t\t\tTOutSchema,\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tTSession,\n\t\t\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\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\tprivate serviceDiscovery: ServiceDiscovery<any> = TestEndpointAdaptor.getDefaultServiceDiscover(\n\t\t\tendpoint,\n\t\t),\n\t) {}\n\n\tasync fullRequest(\n\t\tctx: TestRequestAdaptor<\n\t\t\tTInput,\n\t\t\tTServices,\n\t\t\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\n\t\t\tTAuditStorage,\n\t\t\tTAuditStorageServiceName,\n\t\t\tTDatabase,\n\t\t\tTDatabaseServiceName\n\t\t>,\n\t): Promise<TestHttpResponse<InferStandardSchema<TOutSchema>>> {\n\t\tconst body = await this.endpoint.parseInput((ctx as any).body, 'body');\n\t\tconst query = await this.endpoint.parseInput((ctx as any).query, 'query');\n\t\tconst params = await this.endpoint.parseInput(\n\t\t\t(ctx as any).params,\n\t\t\t'params',\n\t\t);\n\n\t\t// Lazy accessors - defer parsing until needed\n\t\tconst header = createObjectHeaders(ctx.headers);\n\t\tconst cookie = createCookieHeaderAccessor(ctx.headers.cookie);\n\n\t\t// Request context setup\n\t\tconst startTime = Date.now();\n\t\tconst requestId =\n\t\t\t(ctx as any).requestId ??\n\t\t\tctx.headers['x-request-id'] ??\n\t\t\tcrypto.randomUUID();\n\n\t\tconst logger = this.endpoint.logger.child({\n\t\t\trequestId,\n\t\t\troute: this.endpoint.route,\n\t\t\thost: ctx.headers.host,\n\t\t\tmethod: this.endpoint.method,\n\t\t}) as TLogger;\n\n\t\t// Get database from context for session extraction\n\t\tconst rawDb = (ctx as any).database as TDatabase;\n\n\t\t// Wrap handler execution in request context\n\t\treturn runWithRequestContext({ logger, requestId, startTime }, async () => {\n\t\t\tconst session = await this.endpoint.getSession({\n\t\t\t\tlogger,\n\t\t\t\tservices: ctx.services,\n\t\t\t\theader,\n\t\t\t\tcookie,\n\t\t\t\t...(rawDb !== undefined && { db: rawDb }),\n\t\t\t} as any);\n\n\t\t\t// Check authorization\n\t\t\tconst isAuthorized = await this.endpoint.authorize({\n\t\t\t\theader,\n\t\t\t\tcookie,\n\t\t\t\tservices: ctx.services,\n\t\t\t\tlogger,\n\t\t\t\tsession,\n\t\t\t});\n\n\t\t\tif (!isAuthorized) {\n\t\t\t\tlogger.warn('Unauthorized access attempt');\n\t\t\t\tthrow new UnauthorizedError(\n\t\t\t\t\t'Unauthorized access to the endpoint',\n\t\t\t\t\t'You do not have permission to access this resource.',\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Create audit context if audit storage is provided\n\t\t\t// The auditorStorage instance is required when endpoint uses .auditor()\n\t\t\tconst auditorStorage = (ctx as any).auditorStorage as TAuditStorage;\n\t\t\tlet auditContext: AuditExecutionContext<TAuditAction> | undefined;\n\n\t\t\tif (auditorStorage) {\n\t\t\t\t// Extract actor if configured\n\t\t\t\tlet actor: AuditActor = { id: 'system', type: 'system' };\n\t\t\t\tif (this.endpoint.actorExtractor) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tactor = await this.endpoint.actorExtractor({\n\t\t\t\t\t\t\tservices: ctx.services as any,\n\t\t\t\t\t\t\tsession,\n\t\t\t\t\t\t\theader,\n\t\t\t\t\t\t\tcookie,\n\t\t\t\t\t\t\tlogger,\n\t\t\t\t\t\t});\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tlogger.error(error as Error, 'Failed to extract actor for audits');\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst auditor = new DefaultAuditor<TAuditAction>({\n\t\t\t\t\tactor,\n\t\t\t\t\tstorage: auditorStorage as AuditStorage,\n\t\t\t\t\tmetadata: {\n\t\t\t\t\t\tendpoint: this.endpoint.route,\n\t\t\t\t\t\tmethod: this.endpoint.method,\n\t\t\t\t\t},\n\t\t\t\t});\n\n\t\t\t\tauditContext = { auditor, storage: auditorStorage as AuditStorage };\n\t\t\t}\n\n\t\t\t// Warn if declarative audits are configured but no audit storage\n\t\t\tconst audits = this.endpoint.audits as MappedAudit<\n\t\t\t\tTAuditAction,\n\t\t\t\tTOutSchema\n\t\t\t>[];\n\t\t\tif (!auditContext && audits?.length) {\n\t\t\t\tlogger.warn('No auditor storage service available');\n\t\t\t}\n\n\t\t\t// Execute handler with automatic audit transaction support\n\t\t\tconst result = await executeWithAuditTransaction(\n\t\t\t\tauditContext,\n\t\t\t\tasync (auditor) => {\n\t\t\t\t\t// Use audit transaction as db if available (when storage has same database)\n\t\t\t\t\t// For testing, the tester controls whether to use transactional auditing\n\t\t\t\t\tconst trx = auditor?.getTransaction?.();\n\t\t\t\t\tconst db = trx ?? rawDb;\n\n\t\t\t\t\tconst responseBuilder = new ResponseBuilder();\n\t\t\t\t\tconst response = await this.endpoint.handler(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tbody,\n\t\t\t\t\t\t\tquery,\n\t\t\t\t\t\t\tparams,\n\t\t\t\t\t\t\tsession,\n\t\t\t\t\t\t\tservices: ctx.services,\n\t\t\t\t\t\t\tlogger,\n\t\t\t\t\t\t\theader,\n\t\t\t\t\t\t\tcookie,\n\t\t\t\t\t\t\tauditor,\n\t\t\t\t\t\t\tdb,\n\t\t\t\t\t\t} as any,\n\t\t\t\t\t\tresponseBuilder,\n\t\t\t\t\t);\n\n\t\t\t\t\t// Check if response has metadata\n\t\t\t\t\tlet data = response;\n\t\t\t\t\tlet metadata = responseBuilder.getMetadata();\n\n\t\t\t\t\tif (Endpoint.hasMetadata(response)) {\n\t\t\t\t\t\tdata = response.data;\n\t\t\t\t\t\tmetadata = response.metadata;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst output = await this.endpoint.parseOutput(data);\n\n\t\t\t\t\treturn { output, metadata, responseBuilder };\n\t\t\t\t},\n\t\t\t\t// Process declarative audits after handler (inside transaction)\n\t\t\t\tasync (result, auditor) => {\n\t\t\t\t\tif (!audits?.length) return;\n\n\t\t\t\t\tfor (const audit of audits) {\n\t\t\t\t\t\tif (audit.when && !audit.when(result.output as any)) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst payload = audit.payload(result.output as any);\n\t\t\t\t\t\tconst entityId = audit.entityId?.(result.output as any);\n\t\t\t\t\t\tauditor.audit(audit.type as any, payload as any, {\n\t\t\t\t\t\t\ttable: audit.table,\n\t\t\t\t\t\t\tentityId,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// Pass rawDb so storage can reuse existing transactions\n\t\t\t\t{ db: rawDb },\n\t\t\t);\n\n\t\t\tconst { output, metadata } = result;\n\n\t\t\tctx.publisher && (await this.serviceDiscovery.register([ctx.publisher]));\n\t\t\tawait publishConstructEvents(\n\t\t\t\tthis.endpoint,\n\t\t\t\toutput,\n\t\t\t\tthis.serviceDiscovery,\n\t\t\t);\n\n\t\t\t// Convert cookies to Set-Cookie headers\n\t\t\tconst headers: Record<string, string | string[]> = {\n\t\t\t\t...(metadata.headers || {}),\n\t\t\t};\n\n\t\t\tif (metadata.cookies && metadata.cookies.size > 0) {\n\t\t\t\tconst setCookieValues: string[] = [];\n\t\t\t\tfor (const [name, cookie] of metadata.cookies.entries()) {\n\t\t\t\t\tsetCookieValues.push(\n\t\t\t\t\t\tserializeCookie(name, cookie.value, cookie.options),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\theaders['set-cookie'] = setCookieValues;\n\t\t\t}\n\n\t\t\t// Return HTTP response format\n\t\t\treturn {\n\t\t\t\tbody: output,\n\t\t\t\tstatus: metadata.status || 200,\n\t\t\t\theaders,\n\t\t\t};\n\t\t});\n\t}\n\n\tasync request(\n\t\tctx: TestRequestAdaptor<\n\t\t\tTInput,\n\t\t\tTServices,\n\t\t\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\n\t\t\tTAuditStorage,\n\t\t\tTAuditStorageServiceName,\n\t\t\tTDatabase,\n\t\t\tTDatabaseServiceName\n\t\t>,\n\t): Promise<InferStandardSchema<TOutSchema>> {\n\t\tconst response = await this.fullRequest(ctx);\n\t\treturn response.body;\n\t}\n}\n\n/**\n * Conditional audit storage requirement - required when TAuditStorage is configured\n */\ntype AuditStorageRequirement<\n\tTAuditStorage extends AuditStorage | undefined = undefined,\n> = TAuditStorage extends undefined\n\t? {}\n\t: {\n\t\t\t/** Audit storage instance - required when endpoint uses .auditor() */\n\t\t\tauditorStorage: TAuditStorage;\n\t\t};\n\n/**\n * Conditional database requirement - required when TDatabase is configured\n */\ntype DatabaseRequirement<TDatabase = undefined> = TDatabase extends undefined\n\t? {}\n\t: {\n\t\t\t/** Database instance - required when endpoint uses .database() */\n\t\t\tdatabase: TDatabase;\n\t\t};\n\nexport type TestRequestAdaptor<\n\tTInput extends EndpointSchemas = {},\n\tTServices extends Service[] = [],\n\tTEventPublisher extends EventPublisher<any> | undefined = undefined,\n\tTEventPublisherServiceName extends string = string,\n\tTAuditStorage extends AuditStorage | undefined = undefined,\n\t_TAuditStorageServiceName extends string = string,\n\tTDatabase = undefined,\n\t_TDatabaseServiceName extends string = string,\n> = {\n\tservices: ServiceRecord<TServices>;\n\theaders: Record<string, string>;\n\tpublisher?: Service<TEventPublisherServiceName, TEventPublisher>;\n} & InferComposableStandardSchema<TInput> &\n\tAuditStorageRequirement<TAuditStorage> &\n\tDatabaseRequirement<TDatabase>;\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"TestEndpointAdaptor-DjQSuxRq.cjs","names":["name: string","value: string","options?: CookieOptions","_endpoint: Endpoint<\n\t\t\tTRoute,\n\t\t\tTMethod,\n\t\t\tTInput,\n\t\t\tTOutSchema,\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tTSession,\n\t\t\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\n\t\t\tTAuditStorage,\n\t\t\tTAuditStorageServiceName,\n\t\t\tTAuditAction,\n\t\t\tTDatabase,\n\t\t\tTDatabaseServiceName\n\t\t>","EnvironmentParser","endpoint: Endpoint<\n\t\t\tTRoute,\n\t\t\tTMethod,\n\t\t\tTInput,\n\t\t\tTOutSchema,\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tTSession,\n\t\t\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\n\t\t\tTAuditStorage,\n\t\t\tTAuditStorageServiceName,\n\t\t\tTAuditAction,\n\t\t\tTDatabase,\n\t\t\tTDatabaseServiceName\n\t\t>","serviceDiscovery: ServiceDiscovery<any>","ctx: TestRequestAdaptor<\n\t\t\tTInput,\n\t\t\tTServices,\n\t\t\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\n\t\t\tTAuditStorage,\n\t\t\tTAuditStorageServiceName,\n\t\t\tTDatabase,\n\t\t\tTDatabaseServiceName\n\t\t>","UnauthorizedError","auditContext: AuditExecutionContext<TAuditAction> | undefined","actor: AuditActor","DefaultAuditor","ResponseBuilder","metadata","output","result","headers: Record<string, string | string[]>","setCookieValues: string[]","cookie"],"sources":["../src/endpoints/TestEndpointAdaptor.ts"],"sourcesContent":["import type {\n\tAuditActor,\n\tAuditableAction,\n\tAuditStorage,\n} from '@geekmidas/audit';\nimport { DefaultAuditor } from '@geekmidas/audit';\nimport { EnvironmentParser } from '@geekmidas/envkit';\nimport { UnauthorizedError } from '@geekmidas/errors';\nimport type { EventPublisher } from '@geekmidas/events';\nimport type { Logger } from '@geekmidas/logger';\nimport type {\n\tInferComposableStandardSchema,\n\tInferStandardSchema,\n} from '@geekmidas/schema';\nimport {\n\trunWithRequestContext,\n\ttype Service,\n\tServiceDiscovery,\n\ttype ServiceRecord,\n} from '@geekmidas/services';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\nimport { publishConstructEvents } from '../publisher';\nimport type { HttpMethod } from '../types';\nimport type { MappedAudit } from './audit';\nimport {\n\ttype CookieOptions,\n\tEndpoint,\n\ttype EndpointSchemas,\n\tResponseBuilder,\n} from './Endpoint';\nimport {\n\tcreateCookieHeaderAccessor,\n\tcreateObjectHeaders,\n} from './lazyAccessors';\nimport {\n\ttype AuditExecutionContext,\n\texecuteWithAuditTransaction,\n} from './processAudits';\n\nexport type TestHttpResponse<TBody = any> = {\n\tbody: TBody;\n\tstatus: number;\n\theaders: Record<string, string | string[]>;\n};\n\n/**\n * Serializes a cookie into a Set-Cookie header string\n */\nfunction serializeCookie(\n\tname: string,\n\tvalue: string,\n\toptions?: CookieOptions,\n): string {\n\tlet cookieString = `${name}=${value}`;\n\n\tif (options) {\n\t\tif (options.maxAge !== undefined) {\n\t\t\tcookieString += `; Max-Age=${options.maxAge}`;\n\t\t}\n\t\tif (options.expires) {\n\t\t\tcookieString += `; Expires=${options.expires.toUTCString()}`;\n\t\t}\n\t\tif (options.domain) {\n\t\t\tcookieString += `; Domain=${options.domain}`;\n\t\t}\n\t\tif (options.path) {\n\t\t\tcookieString += `; Path=${options.path}`;\n\t\t}\n\t\tif (options.httpOnly) {\n\t\t\tcookieString += '; HttpOnly';\n\t\t}\n\t\tif (options.secure) {\n\t\t\tcookieString += '; Secure';\n\t\t}\n\t\tif (options.sameSite) {\n\t\t\tcookieString += `; SameSite=${options.sameSite}`;\n\t\t}\n\t}\n\n\treturn cookieString;\n}\n\nexport class TestEndpointAdaptor<\n\tTRoute extends string,\n\tTMethod extends HttpMethod,\n\tTInput extends EndpointSchemas = {},\n\tTOutSchema extends StandardSchemaV1 | undefined = undefined,\n\tTServices extends Service[] = [],\n\tTLogger extends Logger = Logger,\n\tTSession = unknown,\n\tTEventPublisher extends EventPublisher<any> | undefined = undefined,\n\tTEventPublisherServiceName extends string = 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> {\n\tstatic getDefaultServiceDiscover<\n\t\tTRoute extends string,\n\t\tTMethod extends HttpMethod,\n\t\tTInput extends EndpointSchemas = {},\n\t\tTOutSchema extends StandardSchemaV1 | undefined = undefined,\n\t\tTServices extends Service[] = [],\n\t\tTLogger extends Logger = Logger,\n\t\tTSession = unknown,\n\t\tTEventPublisher extends EventPublisher<any> | undefined = undefined,\n\t\tTEventPublisherServiceName extends string = string,\n\t\tTAuditStorage extends AuditStorage | undefined = undefined,\n\t\tTAuditStorageServiceName extends string = string,\n\t\tTAuditAction extends AuditableAction<string, unknown> = AuditableAction<\n\t\t\tstring,\n\t\t\tunknown\n\t\t>,\n\t\tTDatabase = undefined,\n\t\tTDatabaseServiceName extends string = string,\n\t>(\n\t\t_endpoint: Endpoint<\n\t\t\tTRoute,\n\t\t\tTMethod,\n\t\t\tTInput,\n\t\t\tTOutSchema,\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tTSession,\n\t\t\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\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\t\treturn ServiceDiscovery.getInstance(new EnvironmentParser({}));\n\t}\n\tconstructor(\n\t\tprivate readonly endpoint: Endpoint<\n\t\t\tTRoute,\n\t\t\tTMethod,\n\t\t\tTInput,\n\t\t\tTOutSchema,\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tTSession,\n\t\t\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\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\tprivate serviceDiscovery: ServiceDiscovery<any> = TestEndpointAdaptor.getDefaultServiceDiscover(\n\t\t\tendpoint,\n\t\t),\n\t) {}\n\n\tasync fullRequest(\n\t\tctx: TestRequestAdaptor<\n\t\t\tTInput,\n\t\t\tTServices,\n\t\t\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\n\t\t\tTAuditStorage,\n\t\t\tTAuditStorageServiceName,\n\t\t\tTDatabase,\n\t\t\tTDatabaseServiceName\n\t\t>,\n\t): Promise<TestHttpResponse<InferStandardSchema<TOutSchema>>> {\n\t\tconst body = await this.endpoint.parseInput((ctx as any).body, 'body');\n\t\tconst query = await this.endpoint.parseInput((ctx as any).query, 'query');\n\t\tconst params = await this.endpoint.parseInput(\n\t\t\t(ctx as any).params,\n\t\t\t'params',\n\t\t);\n\n\t\t// Lazy accessors - defer parsing until needed\n\t\tconst header = createObjectHeaders(ctx.headers);\n\t\tconst cookie = createCookieHeaderAccessor(ctx.headers.cookie);\n\n\t\t// Request context setup\n\t\tconst startTime = Date.now();\n\t\tconst requestId =\n\t\t\t(ctx as any).requestId ??\n\t\t\tctx.headers['x-request-id'] ??\n\t\t\tcrypto.randomUUID();\n\n\t\tconst logger = this.endpoint.logger.child({\n\t\t\trequestId,\n\t\t\troute: this.endpoint.route,\n\t\t\thost: ctx.headers.host,\n\t\t\tmethod: this.endpoint.method,\n\t\t}) as TLogger;\n\n\t\t// Get database from context for session extraction\n\t\tconst rawDb = (ctx as any).database as TDatabase;\n\n\t\t// Wrap handler execution in request context\n\t\treturn runWithRequestContext({ logger, requestId, startTime }, async () => {\n\t\t\tconst session = await this.endpoint.getSession({\n\t\t\t\tlogger,\n\t\t\t\tservices: ctx.services,\n\t\t\t\theader,\n\t\t\t\tcookie,\n\t\t\t\t...(rawDb !== undefined && { db: rawDb }),\n\t\t\t} as any);\n\n\t\t\t// Check authorization\n\t\t\tconst isAuthorized = await this.endpoint.authorize({\n\t\t\t\theader,\n\t\t\t\tcookie,\n\t\t\t\tservices: ctx.services,\n\t\t\t\tlogger,\n\t\t\t\tsession,\n\t\t\t});\n\n\t\t\tif (!isAuthorized) {\n\t\t\t\tlogger.warn('Unauthorized access attempt');\n\t\t\t\tthrow new UnauthorizedError(\n\t\t\t\t\t'Unauthorized access to the endpoint',\n\t\t\t\t\t'You do not have permission to access this resource.',\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Create audit context if audit storage is provided\n\t\t\t// The auditorStorage instance is required when endpoint uses .auditor()\n\t\t\tconst auditorStorage = (ctx as any).auditorStorage as TAuditStorage;\n\t\t\tlet auditContext: AuditExecutionContext<TAuditAction> | undefined;\n\n\t\t\tif (auditorStorage) {\n\t\t\t\t// Extract actor if configured\n\t\t\t\tlet actor: AuditActor = { id: 'system', type: 'system' };\n\t\t\t\tif (this.endpoint.actorExtractor) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tactor = await this.endpoint.actorExtractor({\n\t\t\t\t\t\t\tservices: ctx.services as any,\n\t\t\t\t\t\t\tsession,\n\t\t\t\t\t\t\theader,\n\t\t\t\t\t\t\tcookie,\n\t\t\t\t\t\t\tlogger,\n\t\t\t\t\t\t});\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tlogger.error(error as Error, 'Failed to extract actor for audits');\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst auditor = new DefaultAuditor<TAuditAction>({\n\t\t\t\t\tactor,\n\t\t\t\t\tstorage: auditorStorage as AuditStorage,\n\t\t\t\t\tmetadata: {\n\t\t\t\t\t\tendpoint: this.endpoint.route,\n\t\t\t\t\t\tmethod: this.endpoint.method,\n\t\t\t\t\t},\n\t\t\t\t});\n\n\t\t\t\tauditContext = { auditor, storage: auditorStorage as AuditStorage };\n\t\t\t}\n\n\t\t\t// Warn if declarative audits are configured but no audit storage\n\t\t\tconst audits = this.endpoint.audits as MappedAudit<\n\t\t\t\tTAuditAction,\n\t\t\t\tTOutSchema\n\t\t\t>[];\n\t\t\tif (!auditContext && audits?.length) {\n\t\t\t\tlogger.warn('No auditor storage service available');\n\t\t\t}\n\n\t\t\t// Execute handler with automatic audit transaction support\n\t\t\tconst result = await executeWithAuditTransaction(\n\t\t\t\tauditContext,\n\t\t\t\tasync (auditor) => {\n\t\t\t\t\t// Use audit transaction as db if available (when storage has same database)\n\t\t\t\t\t// For testing, the tester controls whether to use transactional auditing\n\t\t\t\t\tconst trx = auditor?.getTransaction?.();\n\t\t\t\t\tconst db = trx ?? rawDb;\n\n\t\t\t\t\tconst responseBuilder = new ResponseBuilder();\n\t\t\t\t\tconst response = await this.endpoint.handler(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tbody,\n\t\t\t\t\t\t\tquery,\n\t\t\t\t\t\t\tparams,\n\t\t\t\t\t\t\tsession,\n\t\t\t\t\t\t\tservices: ctx.services,\n\t\t\t\t\t\t\tlogger,\n\t\t\t\t\t\t\theader,\n\t\t\t\t\t\t\tcookie,\n\t\t\t\t\t\t\tauditor,\n\t\t\t\t\t\t\tdb,\n\t\t\t\t\t\t} as any,\n\t\t\t\t\t\tresponseBuilder,\n\t\t\t\t\t);\n\n\t\t\t\t\t// Check if response has metadata\n\t\t\t\t\tlet data = response;\n\t\t\t\t\tlet metadata = responseBuilder.getMetadata();\n\n\t\t\t\t\tif (Endpoint.hasMetadata(response)) {\n\t\t\t\t\t\tdata = response.data;\n\t\t\t\t\t\tmetadata = response.metadata;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst output = await this.endpoint.parseOutput(data);\n\n\t\t\t\t\treturn { output, metadata, responseBuilder };\n\t\t\t\t},\n\t\t\t\t// Process declarative audits after handler (inside transaction)\n\t\t\t\tasync (result, auditor) => {\n\t\t\t\t\tif (!audits?.length) return;\n\n\t\t\t\t\tfor (const audit of audits) {\n\t\t\t\t\t\tif (audit.when && !audit.when(result.output as any)) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst payload = audit.payload(result.output as any);\n\t\t\t\t\t\tconst entityId = audit.entityId?.(result.output as any);\n\t\t\t\t\t\tauditor.audit(audit.type as any, payload as any, {\n\t\t\t\t\t\t\ttable: audit.table,\n\t\t\t\t\t\t\tentityId,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// Pass rawDb so storage can reuse existing transactions\n\t\t\t\t{ db: rawDb },\n\t\t\t);\n\n\t\t\tconst { output, metadata } = result;\n\n\t\t\tctx.publisher && (await this.serviceDiscovery.register([ctx.publisher]));\n\t\t\tawait publishConstructEvents(\n\t\t\t\tthis.endpoint,\n\t\t\t\toutput,\n\t\t\t\tthis.serviceDiscovery,\n\t\t\t);\n\n\t\t\t// Convert cookies to Set-Cookie headers\n\t\t\tconst headers: Record<string, string | string[]> = {\n\t\t\t\t...(metadata.headers || {}),\n\t\t\t};\n\n\t\t\tif (metadata.cookies && metadata.cookies.size > 0) {\n\t\t\t\tconst setCookieValues: string[] = [];\n\t\t\t\tfor (const [name, cookie] of metadata.cookies.entries()) {\n\t\t\t\t\tsetCookieValues.push(\n\t\t\t\t\t\tserializeCookie(name, cookie.value, cookie.options),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\theaders['set-cookie'] = setCookieValues;\n\t\t\t}\n\n\t\t\t// Return HTTP response format\n\t\t\treturn {\n\t\t\t\tbody: output,\n\t\t\t\tstatus: metadata.status || 200,\n\t\t\t\theaders,\n\t\t\t};\n\t\t});\n\t}\n\n\tasync request(\n\t\tctx: TestRequestAdaptor<\n\t\t\tTInput,\n\t\t\tTServices,\n\t\t\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\n\t\t\tTAuditStorage,\n\t\t\tTAuditStorageServiceName,\n\t\t\tTDatabase,\n\t\t\tTDatabaseServiceName\n\t\t>,\n\t): Promise<InferStandardSchema<TOutSchema>> {\n\t\tconst response = await this.fullRequest(ctx);\n\t\treturn response.body;\n\t}\n}\n\n/**\n * Conditional audit storage requirement - required when TAuditStorage is configured\n */\ntype AuditStorageRequirement<\n\tTAuditStorage extends AuditStorage | undefined = undefined,\n> = TAuditStorage extends undefined\n\t? {}\n\t: {\n\t\t\t/** Audit storage instance - required when endpoint uses .auditor() */\n\t\t\tauditorStorage: TAuditStorage;\n\t\t};\n\n/**\n * Conditional database requirement - required when TDatabase is configured\n */\ntype DatabaseRequirement<TDatabase = undefined> = TDatabase extends undefined\n\t? {}\n\t: {\n\t\t\t/** Database instance - required when endpoint uses .database() */\n\t\t\tdatabase: TDatabase;\n\t\t};\n\nexport type TestRequestAdaptor<\n\tTInput extends EndpointSchemas = {},\n\tTServices extends Service[] = [],\n\tTEventPublisher extends EventPublisher<any> | undefined = undefined,\n\tTEventPublisherServiceName extends string = string,\n\tTAuditStorage extends AuditStorage | undefined = undefined,\n\t_TAuditStorageServiceName extends string = string,\n\tTDatabase = undefined,\n\t_TDatabaseServiceName extends string = string,\n> = {\n\tservices: ServiceRecord<TServices>;\n\theaders: Record<string, string>;\n\tpublisher?: Service<TEventPublisherServiceName, TEventPublisher>;\n} & InferComposableStandardSchema<TInput> &\n\tAuditStorageRequirement<TAuditStorage> &\n\tDatabaseRequirement<TDatabase>;\n"],"mappings":"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"}
@@ -1,12 +0,0 @@
1
- import { FunctionBuilder } from "./FunctionBuilder-m5BNA2Ap.mjs";
2
- import * as _geekmidas_audit4 from "@geekmidas/audit";
3
- import * as _geekmidas_logger3 from "@geekmidas/logger";
4
- import * as _geekmidas_schema2 from "@geekmidas/schema";
5
-
6
- //#region src/functions/index.d.ts
7
- declare const f: FunctionBuilder<_geekmidas_schema2.ComposableStandardSchema, undefined, [], _geekmidas_logger3.Logger, undefined, string, undefined, string, undefined, string, _geekmidas_audit4.AuditableAction<string, unknown>>;
8
- //# sourceMappingURL=index.d.ts.map
9
-
10
- //#endregion
11
- export { f };
12
- //# sourceMappingURL=index-Br-zTYii.d.mts.map
@@ -1,12 +0,0 @@
1
- import { FunctionBuilder } from "./FunctionBuilder-D_7f5MfS.cjs";
2
- import * as _geekmidas_audit6 from "@geekmidas/audit";
3
- import * as _geekmidas_logger5 from "@geekmidas/logger";
4
- import * as _geekmidas_schema4 from "@geekmidas/schema";
5
-
6
- //#region src/functions/index.d.ts
7
- declare const f: FunctionBuilder<_geekmidas_schema4.ComposableStandardSchema, undefined, [], _geekmidas_logger5.Logger, undefined, string, undefined, string, undefined, string, _geekmidas_audit6.AuditableAction<string, unknown>>;
8
- //# sourceMappingURL=index.d.ts.map
9
-
10
- //#endregion
11
- export { f };
12
- //# sourceMappingURL=index-dRNH0dT6.d.cts.map