@geekmidas/constructs 0.0.1 → 0.0.3

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 (215) hide show
  1. package/dist/{AWSLambdaFunction-CpHFE2m6.d.mts → AWSLambdaFunction-CANc3Qo2.d.mts} +3 -3
  2. package/dist/{AWSLambdaFunction-qA5LqPsv.cjs → AWSLambdaFunction-DW9qrBNR.cjs} +2 -2
  3. package/dist/{AWSLambdaFunction-qA5LqPsv.cjs.map → AWSLambdaFunction-DW9qrBNR.cjs.map} +1 -1
  4. package/dist/{AWSLambdaFunction-DWIZYsCy.mjs → AWSLambdaFunction-nic3vzt3.mjs} +2 -2
  5. package/dist/{AWSLambdaFunction-DWIZYsCy.mjs.map → AWSLambdaFunction-nic3vzt3.mjs.map} +1 -1
  6. package/dist/{AWSLambdaSubscriberAdaptor-G8y3YkWj.mjs → AWSLambdaSubscriberAdaptor-BhqrpTVc.mjs} +1 -1
  7. package/dist/{AWSLambdaSubscriberAdaptor-G8y3YkWj.mjs.map → AWSLambdaSubscriberAdaptor-BhqrpTVc.mjs.map} +1 -1
  8. package/dist/{AWSLambdaSubscriberAdaptor-C1wQuucQ.d.mts → AWSLambdaSubscriberAdaptor-C6JYIZxn.d.mts} +2 -2
  9. package/dist/{AWSLambdaSubscriberAdaptor-CmPZ10JF.cjs → AWSLambdaSubscriberAdaptor-ZuQAhW9_.cjs} +1 -1
  10. package/dist/{AWSLambdaSubscriberAdaptor-CmPZ10JF.cjs.map → AWSLambdaSubscriberAdaptor-ZuQAhW9_.cjs.map} +1 -1
  11. package/dist/{AmazonApiGatewayEndpointAdaptor-BoBh7vvD.d.mts → AmazonApiGatewayEndpointAdaptor-DNZLntHj.d.mts} +3 -3
  12. package/dist/{AmazonApiGatewayEndpointAdaptor-i74DEUbc.cjs → AmazonApiGatewayEndpointAdaptor-D_Q_NTMT.cjs} +3 -3
  13. package/dist/{AmazonApiGatewayEndpointAdaptor-i74DEUbc.cjs.map → AmazonApiGatewayEndpointAdaptor-D_Q_NTMT.cjs.map} +1 -1
  14. package/dist/{AmazonApiGatewayEndpointAdaptor-Cx1oqcqh.mjs → AmazonApiGatewayEndpointAdaptor-QzIAnWzS.mjs} +3 -3
  15. package/dist/{AmazonApiGatewayEndpointAdaptor-Cx1oqcqh.mjs.map → AmazonApiGatewayEndpointAdaptor-QzIAnWzS.mjs.map} +1 -1
  16. package/dist/{AmazonApiGatewayV1EndpointAdaptor-CLmBDYsl.mjs → AmazonApiGatewayV1EndpointAdaptor-BF5bGWV1.mjs} +3 -3
  17. package/dist/{AmazonApiGatewayV1EndpointAdaptor-CLmBDYsl.mjs.map → AmazonApiGatewayV1EndpointAdaptor-BF5bGWV1.mjs.map} +1 -1
  18. package/dist/{AmazonApiGatewayV1EndpointAdaptor-GkMAUPL5.cjs → AmazonApiGatewayV1EndpointAdaptor-Bh4tckwd.cjs} +3 -3
  19. package/dist/{AmazonApiGatewayV1EndpointAdaptor-GkMAUPL5.cjs.map → AmazonApiGatewayV1EndpointAdaptor-Bh4tckwd.cjs.map} +1 -1
  20. package/dist/{AmazonApiGatewayV1EndpointAdaptor-EhMd1YqV.d.mts → AmazonApiGatewayV1EndpointAdaptor-DbJa4cpU.d.mts} +4 -4
  21. package/dist/{AmazonApiGatewayV2EndpointAdaptor-3RqegmJC.mjs → AmazonApiGatewayV2EndpointAdaptor-BOaOkLXF.mjs} +3 -3
  22. package/dist/{AmazonApiGatewayV2EndpointAdaptor-3RqegmJC.mjs.map → AmazonApiGatewayV2EndpointAdaptor-BOaOkLXF.mjs.map} +1 -1
  23. package/dist/{AmazonApiGatewayV2EndpointAdaptor-zfd1gqXA.d.mts → AmazonApiGatewayV2EndpointAdaptor-BlKn-KJ6.d.mts} +4 -4
  24. package/dist/{AmazonApiGatewayV2EndpointAdaptor-YlFoFSS9.cjs → AmazonApiGatewayV2EndpointAdaptor-L4Ywv3Pk.cjs} +3 -3
  25. package/dist/{AmazonApiGatewayV2EndpointAdaptor-YlFoFSS9.cjs.map → AmazonApiGatewayV2EndpointAdaptor-L4Ywv3Pk.cjs.map} +1 -1
  26. package/dist/{BaseFunctionBuilder-BFPVGnKi.d.mts → BaseFunctionBuilder-Dda7AiID.d.mts} +2 -2
  27. package/dist/{Construct-DIguIyw4.d.mts → Construct-DdyYENBD.d.mts} +1 -1
  28. package/dist/Construct.d.mts +1 -1
  29. package/dist/{Cron-Bgs6EQOb.mjs → Cron-BgJo6EW6.mjs} +1 -1
  30. package/dist/{Cron-Bgs6EQOb.mjs.map → Cron-BgJo6EW6.mjs.map} +1 -1
  31. package/dist/{Cron-ztnK6zgU.d.cts → Cron-BxMXmn4t.d.cts} +1 -1
  32. package/dist/{Cron-DQiCj3ef.cjs → Cron-JYYGj5ik.cjs} +1 -1
  33. package/dist/{Cron-DQiCj3ef.cjs.map → Cron-JYYGj5ik.cjs.map} +1 -1
  34. package/dist/{Cron-FpAw03k6.d.mts → Cron-NDBlJhb3.d.mts} +2 -2
  35. package/dist/{CronBuilder-DIBqJkh_.cjs → CronBuilder-BDDS21OP.cjs} +2 -2
  36. package/dist/{CronBuilder-DIBqJkh_.cjs.map → CronBuilder-BDDS21OP.cjs.map} +1 -1
  37. package/dist/{CronBuilder-Cje9K8lZ.d.cts → CronBuilder-C6K5AbIO.d.cts} +2 -2
  38. package/dist/{CronBuilder-DecAvvcn.mjs → CronBuilder-DVuhB_kA.mjs} +2 -2
  39. package/dist/{CronBuilder-DecAvvcn.mjs.map → CronBuilder-DVuhB_kA.mjs.map} +1 -1
  40. package/dist/{CronBuilder-B2clNQSP.d.mts → CronBuilder-s5x8V8hH.d.mts} +4 -4
  41. package/dist/{Endpoint-BaHC9y4Z.cjs → Endpoint-D1nnEsBU.cjs} +1 -1
  42. package/dist/{Endpoint-BaHC9y4Z.cjs.map → Endpoint-D1nnEsBU.cjs.map} +1 -1
  43. package/dist/{Endpoint-ierdM62O.mjs → Endpoint-DNlmybXV.mjs} +1 -1
  44. package/dist/{Endpoint-ierdM62O.mjs.map → Endpoint-DNlmybXV.mjs.map} +1 -1
  45. package/dist/{Endpoint-DCn53Vd8.d.mts → Endpoint-DYUjJdEs.d.mts} +3 -3
  46. package/dist/{EndpointBuilder-CP9RGwZH.d.cts → EndpointBuilder-1fw103D6.d.cts} +1 -1
  47. package/dist/{EndpointBuilder-Bfnb2oJr.d.mts → EndpointBuilder-B2iScUND.d.mts} +4 -4
  48. package/dist/{EndpointBuilder-BHFSpbPR.cjs → EndpointBuilder-BhRd626m.cjs} +2 -2
  49. package/dist/{EndpointBuilder-BHFSpbPR.cjs.map → EndpointBuilder-BhRd626m.cjs.map} +1 -1
  50. package/dist/{EndpointBuilder-BLUsoK3l.mjs → EndpointBuilder-CpjIMYb0.mjs} +2 -2
  51. package/dist/{EndpointBuilder-BLUsoK3l.mjs.map → EndpointBuilder-CpjIMYb0.mjs.map} +1 -1
  52. package/dist/{EndpointFactory-CXX4E6Gx.cjs → EndpointFactory-ChmVHWim.cjs} +2 -2
  53. package/dist/{EndpointFactory-CXX4E6Gx.cjs.map → EndpointFactory-ChmVHWim.cjs.map} +1 -1
  54. package/dist/{EndpointFactory-D2zgWbXZ.d.cts → EndpointFactory-D576BhaH.d.cts} +2 -2
  55. package/dist/{EndpointFactory-BYdDVCNj.mjs → EndpointFactory-DLpEbLzL.mjs} +2 -2
  56. package/dist/{EndpointFactory-BYdDVCNj.mjs.map → EndpointFactory-DLpEbLzL.mjs.map} +1 -1
  57. package/dist/{EndpointFactory-CNtMXgIh.d.mts → EndpointFactory-DZQpM-9K.d.mts} +3 -3
  58. package/dist/{Function-BsBxc2wA.d.mts → Function-C98H68DW.d.mts} +2 -2
  59. package/dist/{FunctionBuilder-C-PfPN3r.d.mts → FunctionBuilder-DBwR7jg7.d.mts} +4 -4
  60. package/dist/{FunctionExecutionWrapper-DvglBBjE.d.mts → FunctionExecutionWrapper-B0V7V8YS.d.mts} +2 -2
  61. package/dist/{FunctionExecutionWrapper-XGrSAAPD.mjs → FunctionExecutionWrapper-CPzSbfaI.mjs} +1 -1
  62. package/dist/{FunctionExecutionWrapper-XGrSAAPD.mjs.map → FunctionExecutionWrapper-CPzSbfaI.mjs.map} +1 -1
  63. package/dist/{FunctionExecutionWrapper-CElXEjPe.cjs → FunctionExecutionWrapper-UzfHDM2R.cjs} +1 -1
  64. package/dist/{FunctionExecutionWrapper-CElXEjPe.cjs.map → FunctionExecutionWrapper-UzfHDM2R.cjs.map} +1 -1
  65. package/dist/{HonoEndpointAdaptor-B0IO1zj2.d.mts → HonoEndpointAdaptor-01cH100U.d.mts} +5 -5
  66. package/dist/{HonoEndpointAdaptor-B4snrp7v.cjs → HonoEndpointAdaptor-6LERutxi.cjs} +4 -4
  67. package/dist/{HonoEndpointAdaptor-B4snrp7v.cjs.map → HonoEndpointAdaptor-6LERutxi.cjs.map} +1 -1
  68. package/dist/{HonoEndpointAdaptor-D-M4-6Tf.mjs → HonoEndpointAdaptor-fs2928iO.mjs} +4 -4
  69. package/dist/{HonoEndpointAdaptor-D-M4-6Tf.mjs.map → HonoEndpointAdaptor-fs2928iO.mjs.map} +1 -1
  70. package/dist/{HonoEndpointAdaptor-B6lW9Q1k.d.cts → HonoEndpointAdaptor-ua6mp3gt.d.cts} +3 -3
  71. package/dist/{Subscriber-BwuCaC9G.mjs → Subscriber-BTwKnz3c.mjs} +1 -1
  72. package/dist/{Subscriber-BwuCaC9G.mjs.map → Subscriber-BTwKnz3c.mjs.map} +1 -1
  73. package/dist/{Subscriber-THGsj7Iy.d.mts → Subscriber-BxH6n8zQ.d.mts} +2 -2
  74. package/dist/{Subscriber-iMRFG7ba.cjs → Subscriber-G7EUI3yc.cjs} +1 -1
  75. package/dist/{Subscriber-iMRFG7ba.cjs.map → Subscriber-G7EUI3yc.cjs.map} +1 -1
  76. package/dist/{SubscriberBuilder-CiPxgnKT.d.mts → SubscriberBuilder-BpSDPzBz.d.mts} +2 -2
  77. package/dist/{SubscriberBuilder-Dhz0C_t-.mjs → SubscriberBuilder-C1me_972.mjs} +2 -2
  78. package/dist/{SubscriberBuilder-Dhz0C_t-.mjs.map → SubscriberBuilder-C1me_972.mjs.map} +1 -1
  79. package/dist/{SubscriberBuilder-wthr-FL9.cjs → SubscriberBuilder-C6iZvuDe.cjs} +2 -2
  80. package/dist/{SubscriberBuilder-wthr-FL9.cjs.map → SubscriberBuilder-C6iZvuDe.cjs.map} +1 -1
  81. package/dist/{SubscriberBuilder-DuIgxuzc.d.cts → SubscriberBuilder-DgljKtYu.d.cts} +1 -1
  82. package/dist/TestEndpointAdaptor-B4SvJvK-.cjs +54 -0
  83. package/dist/TestEndpointAdaptor-B4SvJvK-.cjs.map +1 -0
  84. package/dist/TestEndpointAdaptor-CHcgyI3V.d.cts +24 -0
  85. package/dist/TestEndpointAdaptor-CelYsQi0.mjs +48 -0
  86. package/dist/TestEndpointAdaptor-CelYsQi0.mjs.map +1 -0
  87. package/dist/TestEndpointAdaptor-Da0ooGt2.d.mts +24 -0
  88. package/dist/adaptors/aws.cjs +8 -8
  89. package/dist/adaptors/aws.d.cts +1 -1
  90. package/dist/adaptors/aws.d.mts +14 -14
  91. package/dist/adaptors/aws.mjs +8 -8
  92. package/dist/adaptors/hono.cjs +4 -4
  93. package/dist/adaptors/hono.d.cts +2 -2
  94. package/dist/adaptors/hono.d.mts +8 -8
  95. package/dist/adaptors/hono.mjs +4 -4
  96. package/dist/adaptors/testing.cjs +10 -0
  97. package/dist/adaptors/testing.d.cts +9 -0
  98. package/dist/adaptors/testing.d.mts +9 -0
  99. package/dist/adaptors/testing.mjs +10 -0
  100. package/dist/crons/Cron.cjs +1 -1
  101. package/dist/crons/Cron.d.cts +2 -2
  102. package/dist/crons/Cron.d.mts +6 -6
  103. package/dist/crons/Cron.mjs +1 -1
  104. package/dist/crons/CronBuilder.cjs +2 -2
  105. package/dist/crons/CronBuilder.d.cts +3 -3
  106. package/dist/crons/CronBuilder.d.mts +7 -7
  107. package/dist/crons/CronBuilder.mjs +2 -2
  108. package/dist/crons/index.cjs +2 -2
  109. package/dist/crons/index.d.cts +7 -7
  110. package/dist/crons/index.d.mts +11 -11
  111. package/dist/crons/index.mjs +2 -2
  112. package/dist/endpoints/AmazonApiGatewayEndpointAdaptor.cjs +2 -2
  113. package/dist/endpoints/AmazonApiGatewayEndpointAdaptor.d.cts +1 -1
  114. package/dist/endpoints/AmazonApiGatewayEndpointAdaptor.d.mts +8 -8
  115. package/dist/endpoints/AmazonApiGatewayEndpointAdaptor.mjs +2 -2
  116. package/dist/endpoints/AmazonApiGatewayV1EndpointAdaptor.cjs +4 -4
  117. package/dist/endpoints/AmazonApiGatewayV1EndpointAdaptor.d.cts +1 -1
  118. package/dist/endpoints/AmazonApiGatewayV1EndpointAdaptor.d.mts +9 -9
  119. package/dist/endpoints/AmazonApiGatewayV1EndpointAdaptor.mjs +4 -4
  120. package/dist/endpoints/AmazonApiGatewayV2EndpointAdaptor.cjs +4 -4
  121. package/dist/endpoints/AmazonApiGatewayV2EndpointAdaptor.d.cts +1 -1
  122. package/dist/endpoints/AmazonApiGatewayV2EndpointAdaptor.d.mts +9 -9
  123. package/dist/endpoints/AmazonApiGatewayV2EndpointAdaptor.mjs +4 -4
  124. package/dist/endpoints/Endpoint.cjs +1 -1
  125. package/dist/endpoints/Endpoint.d.cts +1 -1
  126. package/dist/endpoints/Endpoint.d.mts +7 -7
  127. package/dist/endpoints/Endpoint.mjs +1 -1
  128. package/dist/endpoints/EndpointBuilder.cjs +2 -2
  129. package/dist/endpoints/EndpointBuilder.d.cts +2 -2
  130. package/dist/endpoints/EndpointBuilder.d.mts +8 -8
  131. package/dist/endpoints/EndpointBuilder.mjs +2 -2
  132. package/dist/endpoints/EndpointFactory.cjs +3 -3
  133. package/dist/endpoints/EndpointFactory.d.cts +3 -3
  134. package/dist/endpoints/EndpointFactory.d.mts +9 -9
  135. package/dist/endpoints/EndpointFactory.mjs +3 -3
  136. package/dist/endpoints/HonoEndpointAdaptor.cjs +4 -4
  137. package/dist/endpoints/HonoEndpointAdaptor.d.cts +2 -2
  138. package/dist/endpoints/HonoEndpointAdaptor.d.mts +8 -8
  139. package/dist/endpoints/HonoEndpointAdaptor.mjs +4 -4
  140. package/dist/endpoints/TestEndpointAdaptor.cjs +4 -48
  141. package/dist/endpoints/TestEndpointAdaptor.d.cts +5 -25
  142. package/dist/endpoints/TestEndpointAdaptor.d.mts +9 -29
  143. package/dist/endpoints/TestEndpointAdaptor.mjs +4 -47
  144. package/dist/endpoints/helpers.cjs +2 -2
  145. package/dist/endpoints/helpers.d.cts +1 -1
  146. package/dist/endpoints/helpers.d.mts +7 -7
  147. package/dist/endpoints/helpers.mjs +2 -2
  148. package/dist/endpoints/index.cjs +3 -3
  149. package/dist/endpoints/index.d.cts +5 -5
  150. package/dist/endpoints/index.d.mts +11 -11
  151. package/dist/endpoints/index.mjs +3 -3
  152. package/dist/endpoints/parseHonoQuery.cjs +1 -1
  153. package/dist/endpoints/parseHonoQuery.mjs +1 -1
  154. package/dist/endpoints/parseQueryParams.cjs +1 -1
  155. package/dist/endpoints/parseQueryParams.mjs +1 -1
  156. package/dist/functions/AWSLambdaFunction.cjs +2 -2
  157. package/dist/functions/AWSLambdaFunction.d.mts +4 -4
  158. package/dist/functions/AWSLambdaFunction.mjs +2 -2
  159. package/dist/functions/BaseFunctionBuilder.d.mts +2 -2
  160. package/dist/functions/Function.d.mts +2 -2
  161. package/dist/functions/FunctionBuilder.d.mts +4 -4
  162. package/dist/functions/FunctionExecutionWrapper.cjs +1 -1
  163. package/dist/functions/FunctionExecutionWrapper.d.mts +3 -3
  164. package/dist/functions/FunctionExecutionWrapper.mjs +1 -1
  165. package/dist/functions/TestFunctionAdaptor.d.mts +2 -2
  166. package/dist/functions/index.d.cts +1 -1
  167. package/dist/functions/index.d.mts +5 -5
  168. package/dist/{helpers-DbpO95aE.mjs → helpers-CP7A0U_s.mjs} +2 -2
  169. package/dist/{helpers-DbpO95aE.mjs.map → helpers-CP7A0U_s.mjs.map} +1 -1
  170. package/dist/{helpers-BeGM4pP_.cjs → helpers-CjvCSIF5.cjs} +2 -2
  171. package/dist/{helpers-BeGM4pP_.cjs.map → helpers-CjvCSIF5.cjs.map} +1 -1
  172. package/dist/index-BXTN4mwI.d.mts +9 -0
  173. package/dist/index-zOH9f4sh.d.cts +9 -0
  174. package/dist/index.d.mts +2 -2
  175. package/dist/{parseHonoQuery-DopC24vB.cjs → parseHonoQuery-BiPp8bEJ.cjs} +1 -1
  176. package/dist/{parseHonoQuery-DopC24vB.cjs.map → parseHonoQuery-BiPp8bEJ.cjs.map} +1 -1
  177. package/dist/{parseHonoQuery-znDKBhdE.mjs → parseHonoQuery-yWRoKFFl.mjs} +1 -1
  178. package/dist/{parseHonoQuery-znDKBhdE.mjs.map → parseHonoQuery-yWRoKFFl.mjs.map} +1 -1
  179. package/dist/{parseQueryParams-BzPop4I1.cjs → parseQueryParams-C2EjouGt.cjs} +1 -1
  180. package/dist/{parseQueryParams-BzPop4I1.cjs.map → parseQueryParams-C2EjouGt.cjs.map} +1 -1
  181. package/dist/{parseQueryParams-BJaRh3OB.mjs → parseQueryParams-DSk9xl09.mjs} +1 -1
  182. package/dist/{parseQueryParams-BJaRh3OB.mjs.map → parseQueryParams-DSk9xl09.mjs.map} +1 -1
  183. package/dist/publisher.d.mts +1 -1
  184. package/dist/subscribers/AWSLambdaSubscriberAdaptor.cjs +1 -1
  185. package/dist/subscribers/AWSLambdaSubscriberAdaptor.d.mts +3 -3
  186. package/dist/subscribers/AWSLambdaSubscriberAdaptor.mjs +1 -1
  187. package/dist/subscribers/Subscriber.cjs +1 -1
  188. package/dist/subscribers/Subscriber.d.mts +2 -2
  189. package/dist/subscribers/Subscriber.mjs +1 -1
  190. package/dist/subscribers/SubscriberBuilder.cjs +2 -2
  191. package/dist/subscribers/SubscriberBuilder.d.cts +1 -1
  192. package/dist/subscribers/SubscriberBuilder.d.mts +3 -3
  193. package/dist/subscribers/SubscriberBuilder.mjs +2 -2
  194. package/dist/subscribers/index.cjs +2 -2
  195. package/dist/subscribers/index.d.cts +3 -3
  196. package/dist/subscribers/index.d.mts +5 -5
  197. package/dist/subscribers/index.mjs +2 -2
  198. package/dist/{types-DBKNYvsW.d.mts → types-CVq20-fE.d.mts} +1 -1
  199. package/dist/types.d.mts +1 -1
  200. package/package.json +10 -5
  201. package/src/adaptors/testing.ts +1 -0
  202. package/src/endpoints/AmazonApiGatewayEndpointAdaptor.ts +62 -13
  203. package/src/endpoints/Endpoint.ts +243 -19
  204. package/src/endpoints/HonoEndpointAdaptor.ts +52 -16
  205. package/src/endpoints/TestEndpointAdaptor.ts +45 -12
  206. package/src/endpoints/__tests__/AmazonApiGatewayV1EndpointAdaptor.spec.ts +240 -0
  207. package/src/endpoints/__tests__/AmazonApiGatewayV2EndpointAdaptor.spec.ts +177 -200
  208. package/src/endpoints/__tests__/Endpoint.cookies.spec.ts +120 -0
  209. package/src/endpoints/__tests__/Endpoint.spec.ts +12 -0
  210. package/src/endpoints/__tests__/ResponseBuilder.spec.ts +235 -0
  211. package/src/endpoints/__tests__/TestEndpointAdaptor.spec.ts +348 -0
  212. package/dist/endpoints/TestEndpointAdaptor.cjs.map +0 -1
  213. package/dist/endpoints/TestEndpointAdaptor.mjs.map +0 -1
  214. package/dist/index-CuGR4L7O.d.mts +0 -9
  215. package/dist/index-Fg3N3EKD.d.cts +0 -9
@@ -1,5 +1,5 @@
1
- import { HttpMethod, LowerHttpMethod, RemoveUndefined } from "./types-DBKNYvsW.mjs";
2
- import { Function, FunctionHandler } from "./Function-BsBxc2wA.mjs";
1
+ import { HttpMethod, LowerHttpMethod, RemoveUndefined } from "./types-CVq20-fE.mjs";
2
+ import { Function, FunctionHandler } from "./Function-C98H68DW.mjs";
3
3
  import { ComponentCollector, OpenApiSchemaOptions } from "@geekmidas/schema/openapi";
4
4
  import { Service, ServiceRecord } from "@geekmidas/services";
5
5
  import { RateLimitConfig } from "@geekmidas/rate-limit";
@@ -402,4 +402,4 @@ type EndpointOutput<T> = T extends Endpoint<any, any, any, infer OutSchema, any,
402
402
  type EndpointEvent<T> = T extends Endpoint<any, any, any, any, any, any, any, infer TEventPublisher> ? ExtractPublisherMessage<TEventPublisher> : never;
403
403
  //#endregion
404
404
  export { AuthorizeContext, AuthorizeFn, ConvertRouteParams, Endpoint, EndpointContext, EndpointEvent, EndpointHandler, EndpointHeaders, EndpointInput, EndpointOpenApiSchema, EndpointOptions, EndpointOutput, EndpointSchemas, HeaderFn, MultiHeaderFn, SessionContext, SessionFn, SingleHeaderFn, SuccessStatus };
405
- //# sourceMappingURL=Endpoint-DCn53Vd8.d.mts.map
405
+ //# sourceMappingURL=Endpoint-DYUjJdEs.d.mts.map
@@ -46,4 +46,4 @@ declare class EndpointBuilder<TRoute extends string, TMethod extends HttpMethod,
46
46
  }
47
47
  //#endregion
48
48
  export { EndpointBuilder };
49
- //# sourceMappingURL=EndpointBuilder-CP9RGwZH.d.cts.map
49
+ //# sourceMappingURL=EndpointBuilder-1fw103D6.d.cts.map
@@ -1,6 +1,6 @@
1
- import { HttpMethod } from "./types-DBKNYvsW.mjs";
2
- import { BaseFunctionBuilder } from "./BaseFunctionBuilder-BFPVGnKi.mjs";
3
- import { AuthorizeFn, Endpoint, EndpointHandler, EndpointSchemas, SessionFn, SuccessStatus } from "./Endpoint-DCn53Vd8.mjs";
1
+ import { HttpMethod } from "./types-CVq20-fE.mjs";
2
+ import { BaseFunctionBuilder } from "./BaseFunctionBuilder-Dda7AiID.mjs";
3
+ import { AuthorizeFn, Endpoint, EndpointHandler, EndpointSchemas, SessionFn, SuccessStatus } from "./Endpoint-DYUjJdEs.mjs";
4
4
  import { Service } from "@geekmidas/services";
5
5
  import { RateLimitConfig } from "@geekmidas/rate-limit";
6
6
  import { EventPublisher, MappedEvent } from "@geekmidas/events";
@@ -46,4 +46,4 @@ declare class EndpointBuilder<TRoute extends string, TMethod extends HttpMethod,
46
46
  }
47
47
  //#endregion
48
48
  export { EndpointBuilder };
49
- //# sourceMappingURL=EndpointBuilder-Bfnb2oJr.d.mts.map
49
+ //# sourceMappingURL=EndpointBuilder-B2iScUND.d.mts.map
@@ -1,7 +1,7 @@
1
1
  const require_chunk = require('./chunk-CUT6urMc.cjs');
2
2
  const require_Construct = require('./Construct-BSEs6uwW.cjs');
3
3
  const require_BaseFunctionBuilder = require('./BaseFunctionBuilder-DtO4Nwxm.cjs');
4
- const require_Endpoint = require('./Endpoint-BaHC9y4Z.cjs');
4
+ const require_Endpoint = require('./Endpoint-D1nnEsBU.cjs');
5
5
  const lodash_uniqby = require_chunk.__toESM(require("lodash.uniqby"));
6
6
 
7
7
  //#region src/endpoints/EndpointBuilder.ts
@@ -104,4 +104,4 @@ Object.defineProperty(exports, 'EndpointBuilder', {
104
104
  return EndpointBuilder;
105
105
  }
106
106
  });
107
- //# sourceMappingURL=EndpointBuilder-BHFSpbPR.cjs.map
107
+ //# sourceMappingURL=EndpointBuilder-BhRd626m.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"EndpointBuilder-BHFSpbPR.cjs","names":["BaseFunctionBuilder","route: TRoute","method: TMethod","ConstructType","publisher: Service<TEventPublisherServiceName, TEventPublisher>","description: string","status: SuccessStatus","event: TEvent","tags: string[]","publisher: Service<TName, T>","schema: T","config: RateLimitConfig","services: T","logger: T","_schema: any","fn: EndpointHandler<TInput, TServices, TLogger, OutSchema, TSession>","Endpoint"],"sources":["../src/endpoints/EndpointBuilder.ts"],"sourcesContent":["import type { Logger } from '@geekmidas/logger';\nimport type { RateLimitConfig } from '@geekmidas/rate-limit';\nimport type { Service } from '@geekmidas/services';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\nimport uniqBy from 'lodash.uniqby';\nimport { ConstructType } from '../Construct';\nimport { BaseFunctionBuilder } from '../functions';\nimport { Endpoint, type EndpointSchemas } from './Endpoint';\nimport type {\n AuthorizeFn,\n EndpointHandler,\n SessionFn,\n SuccessStatus,\n} from './Endpoint';\n\nimport type { EventPublisher, MappedEvent } from '@geekmidas/events';\nimport type { HttpMethod } from '../types';\n\nexport class EndpointBuilder<\n TRoute extends string,\n TMethod extends HttpMethod,\n TInput extends EndpointSchemas = {},\n TServices extends Service[] = [],\n TLogger extends Logger = Logger,\n OutSchema extends StandardSchemaV1 | undefined = undefined,\n TSession = unknown,\n TEventPublisher extends EventPublisher<any> | undefined = undefined,\n TEventPublisherServiceName extends string = string,\n> extends BaseFunctionBuilder<\n TInput,\n OutSchema,\n TServices,\n TLogger,\n TEventPublisher,\n TEventPublisherServiceName\n> {\n protected schemas: TInput = {} as TInput;\n protected _description?: string;\n protected _status?: SuccessStatus;\n protected _tags?: string[];\n _getSession: SessionFn<TServices, TLogger, TSession> = () => ({}) as TSession;\n _authorize: AuthorizeFn<TServices, TLogger, TSession> = () => true;\n _rateLimit?: RateLimitConfig;\n\n constructor(\n readonly route: TRoute,\n readonly method: TMethod,\n ) {\n super(ConstructType.Endpoint);\n }\n\n // Internal setter for EndpointFactory to set default publisher\n _setPublisher(\n publisher: Service<TEventPublisherServiceName, TEventPublisher>,\n ) {\n this._publisher = publisher;\n }\n\n description(description: string): this {\n this._description = description;\n return this;\n }\n\n status(status: SuccessStatus): this {\n this._status = status;\n return this;\n }\n\n event<TEvent extends MappedEvent<TEventPublisher, OutSchema>>(\n event: TEvent,\n ): this {\n this._events.push(event);\n return this;\n }\n\n tags(tags: string[]): this {\n this._tags = tags;\n return this;\n }\n\n publisher<T extends EventPublisher<any>, TName extends string>(\n publisher: Service<TName, T>,\n ): EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n TServices,\n TLogger,\n OutSchema,\n TSession,\n T,\n TName\n > {\n this._publisher = publisher as unknown as Service<\n TEventPublisherServiceName,\n TEventPublisher\n >;\n\n return this as unknown as EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n TServices,\n TLogger,\n OutSchema,\n TSession,\n T,\n TName\n >;\n }\n\n body<T extends StandardSchemaV1>(\n schema: T,\n ): EndpointBuilder<\n TRoute,\n TMethod,\n Omit<TInput, 'body'> & { body: T },\n TServices,\n TLogger,\n OutSchema,\n TSession,\n TEventPublisher\n > {\n this.schemas.body = schema as unknown as T;\n // @ts-ignore\n return this;\n }\n\n search<T extends StandardSchemaV1>(\n schema: T,\n ): EndpointBuilder<\n TRoute,\n TMethod,\n Omit<TInput, 'query'> & { query: T },\n TServices,\n TLogger,\n OutSchema,\n TSession,\n TEventPublisher\n > {\n this.schemas.query = schema as unknown as T;\n // @ts-ignore\n return this;\n }\n\n query<T extends StandardSchemaV1>(\n schema: T,\n ): EndpointBuilder<\n TRoute,\n TMethod,\n Omit<TInput, 'query'> & { query: T },\n TServices,\n TLogger,\n OutSchema,\n TSession,\n TEventPublisher\n > {\n return this.search(schema);\n }\n\n params<T extends StandardSchemaV1>(\n schema: T,\n ): EndpointBuilder<\n TRoute,\n TMethod,\n Omit<TInput, 'params'> & { params: T },\n TServices,\n TLogger,\n OutSchema,\n TSession,\n TEventPublisher\n > {\n this.schemas.params = schema as unknown as T;\n // @ts-ignore\n return this;\n }\n\n rateLimit(config: RateLimitConfig): this {\n this._rateLimit = config;\n return this;\n }\n\n services<T extends Service[]>(\n services: T,\n ): EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n [...TServices, ...T],\n TLogger,\n OutSchema,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName\n > {\n this._services = uniqBy(\n [...this._services, ...services],\n (s) => s.serviceName,\n ) as TServices;\n\n return this as unknown as EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n [...TServices, ...T],\n TLogger,\n OutSchema,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName\n >;\n }\n\n logger<T extends Logger>(\n logger: T,\n ): EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n TServices,\n T,\n OutSchema,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName\n > {\n this._logger = logger as unknown as TLogger;\n\n return this as unknown as EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n TServices,\n T,\n OutSchema,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName\n >;\n }\n\n output<T extends StandardSchemaV1>(\n schema: T,\n ): EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n TServices,\n TLogger,\n T,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName\n > {\n this.outputSchema = schema as unknown as OutSchema;\n\n return this as unknown as EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n TServices,\n TLogger,\n T,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName\n >;\n }\n\n // EndpointBuilder doesn't have a generic input method - it uses body, query, params instead\n input(_schema: any): any {\n throw new Error(\n 'EndpointBuilder does not support generic input. Use body(), query(), or params() instead.',\n );\n }\n\n handle(\n fn: EndpointHandler<TInput, TServices, TLogger, OutSchema, TSession>,\n ): Endpoint<\n TRoute,\n TMethod,\n TInput,\n OutSchema,\n TServices,\n TLogger,\n TSession,\n TEventPublisher\n > {\n return new Endpoint({\n fn,\n method: this.method,\n route: this.route,\n description: this._description,\n tags: this._tags,\n input: this.schemas,\n output: this.outputSchema,\n services: this._services,\n logger: this._logger,\n timeout: this._timeout,\n authorize: this._authorize,\n status: this._status,\n getSession: this._getSession,\n rateLimit: this._rateLimit,\n publisherService: this._publisher,\n events: this._events,\n });\n }\n}\n"],"mappings":";;;;;;;AAkBA,IAAa,kBAAb,cAUUA,gDAOR;CACA,AAAU,UAAkB,CAAE;CAC9B,AAAU;CACV,AAAU;CACV,AAAU;CACV,cAAuD,OAAO,CAAE;CAChE,aAAwD,MAAM;CAC9D;CAEA,YACWC,OACAC,QACT;AACA,QAAMC,gCAAc,SAAS;EAHpB;EACA;CAGV;CAGD,cACEC,WACA;AACA,OAAK,aAAa;CACnB;CAED,YAAYC,aAA2B;AACrC,OAAK,eAAe;AACpB,SAAO;CACR;CAED,OAAOC,QAA6B;AAClC,OAAK,UAAU;AACf,SAAO;CACR;CAED,MACEC,OACM;AACN,OAAK,QAAQ,KAAK,MAAM;AACxB,SAAO;CACR;CAED,KAAKC,MAAsB;AACzB,OAAK,QAAQ;AACb,SAAO;CACR;CAED,UACEC,WAWA;AACA,OAAK,aAAa;AAKlB,SAAO;CAWR;CAED,KACEC,QAUA;AACA,OAAK,QAAQ,OAAO;AAEpB,SAAO;CACR;CAED,OACEA,QAUA;AACA,OAAK,QAAQ,QAAQ;AAErB,SAAO;CACR;CAED,MACEA,QAUA;AACA,SAAO,KAAK,OAAO,OAAO;CAC3B;CAED,OACEA,QAUA;AACA,OAAK,QAAQ,SAAS;AAEtB,SAAO;CACR;CAED,UAAUC,QAA+B;AACvC,OAAK,aAAa;AAClB,SAAO;CACR;CAED,SACEC,UAWA;AACA,OAAK,YAAY,2BACf,CAAC,GAAG,KAAK,WAAW,GAAG,QAAS,GAChC,CAAC,MAAM,EAAE,YACV;AAED,SAAO;CAWR;CAED,OACEC,QAWA;AACA,OAAK,UAAU;AAEf,SAAO;CAWR;CAED,OACEH,QAWA;AACA,OAAK,eAAe;AAEpB,SAAO;CAWR;CAGD,MAAMI,SAAmB;AACvB,QAAM,IAAI,MACR;CAEH;CAED,OACEC,IAUA;AACA,SAAO,IAAIC,0BAAS;GAClB;GACA,QAAQ,KAAK;GACb,OAAO,KAAK;GACZ,aAAa,KAAK;GAClB,MAAM,KAAK;GACX,OAAO,KAAK;GACZ,QAAQ,KAAK;GACb,UAAU,KAAK;GACf,QAAQ,KAAK;GACb,SAAS,KAAK;GACd,WAAW,KAAK;GAChB,QAAQ,KAAK;GACb,YAAY,KAAK;GACjB,WAAW,KAAK;GAChB,kBAAkB,KAAK;GACvB,QAAQ,KAAK;EACd;CACF;AACF"}
1
+ {"version":3,"file":"EndpointBuilder-BhRd626m.cjs","names":["BaseFunctionBuilder","route: TRoute","method: TMethod","ConstructType","publisher: Service<TEventPublisherServiceName, TEventPublisher>","description: string","status: SuccessStatus","event: TEvent","tags: string[]","publisher: Service<TName, T>","schema: T","config: RateLimitConfig","services: T","logger: T","_schema: any","fn: EndpointHandler<TInput, TServices, TLogger, OutSchema, TSession>","Endpoint"],"sources":["../src/endpoints/EndpointBuilder.ts"],"sourcesContent":["import type { Logger } from '@geekmidas/logger';\nimport type { RateLimitConfig } from '@geekmidas/rate-limit';\nimport type { Service } from '@geekmidas/services';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\nimport uniqBy from 'lodash.uniqby';\nimport { ConstructType } from '../Construct';\nimport { BaseFunctionBuilder } from '../functions';\nimport { Endpoint, type EndpointSchemas } from './Endpoint';\nimport type {\n AuthorizeFn,\n EndpointHandler,\n SessionFn,\n SuccessStatus,\n} from './Endpoint';\n\nimport type { EventPublisher, MappedEvent } from '@geekmidas/events';\nimport type { HttpMethod } from '../types';\n\nexport class EndpointBuilder<\n TRoute extends string,\n TMethod extends HttpMethod,\n TInput extends EndpointSchemas = {},\n TServices extends Service[] = [],\n TLogger extends Logger = Logger,\n OutSchema extends StandardSchemaV1 | undefined = undefined,\n TSession = unknown,\n TEventPublisher extends EventPublisher<any> | undefined = undefined,\n TEventPublisherServiceName extends string = string,\n> extends BaseFunctionBuilder<\n TInput,\n OutSchema,\n TServices,\n TLogger,\n TEventPublisher,\n TEventPublisherServiceName\n> {\n protected schemas: TInput = {} as TInput;\n protected _description?: string;\n protected _status?: SuccessStatus;\n protected _tags?: string[];\n _getSession: SessionFn<TServices, TLogger, TSession> = () => ({}) as TSession;\n _authorize: AuthorizeFn<TServices, TLogger, TSession> = () => true;\n _rateLimit?: RateLimitConfig;\n\n constructor(\n readonly route: TRoute,\n readonly method: TMethod,\n ) {\n super(ConstructType.Endpoint);\n }\n\n // Internal setter for EndpointFactory to set default publisher\n _setPublisher(\n publisher: Service<TEventPublisherServiceName, TEventPublisher>,\n ) {\n this._publisher = publisher;\n }\n\n description(description: string): this {\n this._description = description;\n return this;\n }\n\n status(status: SuccessStatus): this {\n this._status = status;\n return this;\n }\n\n event<TEvent extends MappedEvent<TEventPublisher, OutSchema>>(\n event: TEvent,\n ): this {\n this._events.push(event);\n return this;\n }\n\n tags(tags: string[]): this {\n this._tags = tags;\n return this;\n }\n\n publisher<T extends EventPublisher<any>, TName extends string>(\n publisher: Service<TName, T>,\n ): EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n TServices,\n TLogger,\n OutSchema,\n TSession,\n T,\n TName\n > {\n this._publisher = publisher as unknown as Service<\n TEventPublisherServiceName,\n TEventPublisher\n >;\n\n return this as unknown as EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n TServices,\n TLogger,\n OutSchema,\n TSession,\n T,\n TName\n >;\n }\n\n body<T extends StandardSchemaV1>(\n schema: T,\n ): EndpointBuilder<\n TRoute,\n TMethod,\n Omit<TInput, 'body'> & { body: T },\n TServices,\n TLogger,\n OutSchema,\n TSession,\n TEventPublisher\n > {\n this.schemas.body = schema as unknown as T;\n // @ts-ignore\n return this;\n }\n\n search<T extends StandardSchemaV1>(\n schema: T,\n ): EndpointBuilder<\n TRoute,\n TMethod,\n Omit<TInput, 'query'> & { query: T },\n TServices,\n TLogger,\n OutSchema,\n TSession,\n TEventPublisher\n > {\n this.schemas.query = schema as unknown as T;\n // @ts-ignore\n return this;\n }\n\n query<T extends StandardSchemaV1>(\n schema: T,\n ): EndpointBuilder<\n TRoute,\n TMethod,\n Omit<TInput, 'query'> & { query: T },\n TServices,\n TLogger,\n OutSchema,\n TSession,\n TEventPublisher\n > {\n return this.search(schema);\n }\n\n params<T extends StandardSchemaV1>(\n schema: T,\n ): EndpointBuilder<\n TRoute,\n TMethod,\n Omit<TInput, 'params'> & { params: T },\n TServices,\n TLogger,\n OutSchema,\n TSession,\n TEventPublisher\n > {\n this.schemas.params = schema as unknown as T;\n // @ts-ignore\n return this;\n }\n\n rateLimit(config: RateLimitConfig): this {\n this._rateLimit = config;\n return this;\n }\n\n services<T extends Service[]>(\n services: T,\n ): EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n [...TServices, ...T],\n TLogger,\n OutSchema,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName\n > {\n this._services = uniqBy(\n [...this._services, ...services],\n (s) => s.serviceName,\n ) as TServices;\n\n return this as unknown as EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n [...TServices, ...T],\n TLogger,\n OutSchema,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName\n >;\n }\n\n logger<T extends Logger>(\n logger: T,\n ): EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n TServices,\n T,\n OutSchema,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName\n > {\n this._logger = logger as unknown as TLogger;\n\n return this as unknown as EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n TServices,\n T,\n OutSchema,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName\n >;\n }\n\n output<T extends StandardSchemaV1>(\n schema: T,\n ): EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n TServices,\n TLogger,\n T,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName\n > {\n this.outputSchema = schema as unknown as OutSchema;\n\n return this as unknown as EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n TServices,\n TLogger,\n T,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName\n >;\n }\n\n // EndpointBuilder doesn't have a generic input method - it uses body, query, params instead\n input(_schema: any): any {\n throw new Error(\n 'EndpointBuilder does not support generic input. Use body(), query(), or params() instead.',\n );\n }\n\n handle(\n fn: EndpointHandler<TInput, TServices, TLogger, OutSchema, TSession>,\n ): Endpoint<\n TRoute,\n TMethod,\n TInput,\n OutSchema,\n TServices,\n TLogger,\n TSession,\n TEventPublisher\n > {\n return new Endpoint({\n fn,\n method: this.method,\n route: this.route,\n description: this._description,\n tags: this._tags,\n input: this.schemas,\n output: this.outputSchema,\n services: this._services,\n logger: this._logger,\n timeout: this._timeout,\n authorize: this._authorize,\n status: this._status,\n getSession: this._getSession,\n rateLimit: this._rateLimit,\n publisherService: this._publisher,\n events: this._events,\n });\n }\n}\n"],"mappings":";;;;;;;AAkBA,IAAa,kBAAb,cAUUA,gDAOR;CACA,AAAU,UAAkB,CAAE;CAC9B,AAAU;CACV,AAAU;CACV,AAAU;CACV,cAAuD,OAAO,CAAE;CAChE,aAAwD,MAAM;CAC9D;CAEA,YACWC,OACAC,QACT;AACA,QAAMC,gCAAc,SAAS;EAHpB;EACA;CAGV;CAGD,cACEC,WACA;AACA,OAAK,aAAa;CACnB;CAED,YAAYC,aAA2B;AACrC,OAAK,eAAe;AACpB,SAAO;CACR;CAED,OAAOC,QAA6B;AAClC,OAAK,UAAU;AACf,SAAO;CACR;CAED,MACEC,OACM;AACN,OAAK,QAAQ,KAAK,MAAM;AACxB,SAAO;CACR;CAED,KAAKC,MAAsB;AACzB,OAAK,QAAQ;AACb,SAAO;CACR;CAED,UACEC,WAWA;AACA,OAAK,aAAa;AAKlB,SAAO;CAWR;CAED,KACEC,QAUA;AACA,OAAK,QAAQ,OAAO;AAEpB,SAAO;CACR;CAED,OACEA,QAUA;AACA,OAAK,QAAQ,QAAQ;AAErB,SAAO;CACR;CAED,MACEA,QAUA;AACA,SAAO,KAAK,OAAO,OAAO;CAC3B;CAED,OACEA,QAUA;AACA,OAAK,QAAQ,SAAS;AAEtB,SAAO;CACR;CAED,UAAUC,QAA+B;AACvC,OAAK,aAAa;AAClB,SAAO;CACR;CAED,SACEC,UAWA;AACA,OAAK,YAAY,2BACf,CAAC,GAAG,KAAK,WAAW,GAAG,QAAS,GAChC,CAAC,MAAM,EAAE,YACV;AAED,SAAO;CAWR;CAED,OACEC,QAWA;AACA,OAAK,UAAU;AAEf,SAAO;CAWR;CAED,OACEH,QAWA;AACA,OAAK,eAAe;AAEpB,SAAO;CAWR;CAGD,MAAMI,SAAmB;AACvB,QAAM,IAAI,MACR;CAEH;CAED,OACEC,IAUA;AACA,SAAO,IAAIC,0BAAS;GAClB;GACA,QAAQ,KAAK;GACb,OAAO,KAAK;GACZ,aAAa,KAAK;GAClB,MAAM,KAAK;GACX,OAAO,KAAK;GACZ,QAAQ,KAAK;GACb,UAAU,KAAK;GACf,QAAQ,KAAK;GACb,SAAS,KAAK;GACd,WAAW,KAAK;GAChB,QAAQ,KAAK;GACb,YAAY,KAAK;GACjB,WAAW,KAAK;GAChB,kBAAkB,KAAK;GACvB,QAAQ,KAAK;EACd;CACF;AACF"}
@@ -1,6 +1,6 @@
1
1
  import { ConstructType } from "./Construct-BbKCIPQm.mjs";
2
2
  import { BaseFunctionBuilder } from "./BaseFunctionBuilder-BPE9JBbT.mjs";
3
- import { Endpoint } from "./Endpoint-ierdM62O.mjs";
3
+ import { Endpoint } from "./Endpoint-DNlmybXV.mjs";
4
4
  import uniqBy from "lodash.uniqby";
5
5
 
6
6
  //#region src/endpoints/EndpointBuilder.ts
@@ -98,4 +98,4 @@ var EndpointBuilder = class extends BaseFunctionBuilder {
98
98
 
99
99
  //#endregion
100
100
  export { EndpointBuilder };
101
- //# sourceMappingURL=EndpointBuilder-BLUsoK3l.mjs.map
101
+ //# sourceMappingURL=EndpointBuilder-CpjIMYb0.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"EndpointBuilder-BLUsoK3l.mjs","names":["route: TRoute","method: TMethod","publisher: Service<TEventPublisherServiceName, TEventPublisher>","description: string","status: SuccessStatus","event: TEvent","tags: string[]","publisher: Service<TName, T>","schema: T","config: RateLimitConfig","services: T","logger: T","_schema: any","fn: EndpointHandler<TInput, TServices, TLogger, OutSchema, TSession>"],"sources":["../src/endpoints/EndpointBuilder.ts"],"sourcesContent":["import type { Logger } from '@geekmidas/logger';\nimport type { RateLimitConfig } from '@geekmidas/rate-limit';\nimport type { Service } from '@geekmidas/services';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\nimport uniqBy from 'lodash.uniqby';\nimport { ConstructType } from '../Construct';\nimport { BaseFunctionBuilder } from '../functions';\nimport { Endpoint, type EndpointSchemas } from './Endpoint';\nimport type {\n AuthorizeFn,\n EndpointHandler,\n SessionFn,\n SuccessStatus,\n} from './Endpoint';\n\nimport type { EventPublisher, MappedEvent } from '@geekmidas/events';\nimport type { HttpMethod } from '../types';\n\nexport class EndpointBuilder<\n TRoute extends string,\n TMethod extends HttpMethod,\n TInput extends EndpointSchemas = {},\n TServices extends Service[] = [],\n TLogger extends Logger = Logger,\n OutSchema extends StandardSchemaV1 | undefined = undefined,\n TSession = unknown,\n TEventPublisher extends EventPublisher<any> | undefined = undefined,\n TEventPublisherServiceName extends string = string,\n> extends BaseFunctionBuilder<\n TInput,\n OutSchema,\n TServices,\n TLogger,\n TEventPublisher,\n TEventPublisherServiceName\n> {\n protected schemas: TInput = {} as TInput;\n protected _description?: string;\n protected _status?: SuccessStatus;\n protected _tags?: string[];\n _getSession: SessionFn<TServices, TLogger, TSession> = () => ({}) as TSession;\n _authorize: AuthorizeFn<TServices, TLogger, TSession> = () => true;\n _rateLimit?: RateLimitConfig;\n\n constructor(\n readonly route: TRoute,\n readonly method: TMethod,\n ) {\n super(ConstructType.Endpoint);\n }\n\n // Internal setter for EndpointFactory to set default publisher\n _setPublisher(\n publisher: Service<TEventPublisherServiceName, TEventPublisher>,\n ) {\n this._publisher = publisher;\n }\n\n description(description: string): this {\n this._description = description;\n return this;\n }\n\n status(status: SuccessStatus): this {\n this._status = status;\n return this;\n }\n\n event<TEvent extends MappedEvent<TEventPublisher, OutSchema>>(\n event: TEvent,\n ): this {\n this._events.push(event);\n return this;\n }\n\n tags(tags: string[]): this {\n this._tags = tags;\n return this;\n }\n\n publisher<T extends EventPublisher<any>, TName extends string>(\n publisher: Service<TName, T>,\n ): EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n TServices,\n TLogger,\n OutSchema,\n TSession,\n T,\n TName\n > {\n this._publisher = publisher as unknown as Service<\n TEventPublisherServiceName,\n TEventPublisher\n >;\n\n return this as unknown as EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n TServices,\n TLogger,\n OutSchema,\n TSession,\n T,\n TName\n >;\n }\n\n body<T extends StandardSchemaV1>(\n schema: T,\n ): EndpointBuilder<\n TRoute,\n TMethod,\n Omit<TInput, 'body'> & { body: T },\n TServices,\n TLogger,\n OutSchema,\n TSession,\n TEventPublisher\n > {\n this.schemas.body = schema as unknown as T;\n // @ts-ignore\n return this;\n }\n\n search<T extends StandardSchemaV1>(\n schema: T,\n ): EndpointBuilder<\n TRoute,\n TMethod,\n Omit<TInput, 'query'> & { query: T },\n TServices,\n TLogger,\n OutSchema,\n TSession,\n TEventPublisher\n > {\n this.schemas.query = schema as unknown as T;\n // @ts-ignore\n return this;\n }\n\n query<T extends StandardSchemaV1>(\n schema: T,\n ): EndpointBuilder<\n TRoute,\n TMethod,\n Omit<TInput, 'query'> & { query: T },\n TServices,\n TLogger,\n OutSchema,\n TSession,\n TEventPublisher\n > {\n return this.search(schema);\n }\n\n params<T extends StandardSchemaV1>(\n schema: T,\n ): EndpointBuilder<\n TRoute,\n TMethod,\n Omit<TInput, 'params'> & { params: T },\n TServices,\n TLogger,\n OutSchema,\n TSession,\n TEventPublisher\n > {\n this.schemas.params = schema as unknown as T;\n // @ts-ignore\n return this;\n }\n\n rateLimit(config: RateLimitConfig): this {\n this._rateLimit = config;\n return this;\n }\n\n services<T extends Service[]>(\n services: T,\n ): EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n [...TServices, ...T],\n TLogger,\n OutSchema,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName\n > {\n this._services = uniqBy(\n [...this._services, ...services],\n (s) => s.serviceName,\n ) as TServices;\n\n return this as unknown as EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n [...TServices, ...T],\n TLogger,\n OutSchema,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName\n >;\n }\n\n logger<T extends Logger>(\n logger: T,\n ): EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n TServices,\n T,\n OutSchema,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName\n > {\n this._logger = logger as unknown as TLogger;\n\n return this as unknown as EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n TServices,\n T,\n OutSchema,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName\n >;\n }\n\n output<T extends StandardSchemaV1>(\n schema: T,\n ): EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n TServices,\n TLogger,\n T,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName\n > {\n this.outputSchema = schema as unknown as OutSchema;\n\n return this as unknown as EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n TServices,\n TLogger,\n T,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName\n >;\n }\n\n // EndpointBuilder doesn't have a generic input method - it uses body, query, params instead\n input(_schema: any): any {\n throw new Error(\n 'EndpointBuilder does not support generic input. Use body(), query(), or params() instead.',\n );\n }\n\n handle(\n fn: EndpointHandler<TInput, TServices, TLogger, OutSchema, TSession>,\n ): Endpoint<\n TRoute,\n TMethod,\n TInput,\n OutSchema,\n TServices,\n TLogger,\n TSession,\n TEventPublisher\n > {\n return new Endpoint({\n fn,\n method: this.method,\n route: this.route,\n description: this._description,\n tags: this._tags,\n input: this.schemas,\n output: this.outputSchema,\n services: this._services,\n logger: this._logger,\n timeout: this._timeout,\n authorize: this._authorize,\n status: this._status,\n getSession: this._getSession,\n rateLimit: this._rateLimit,\n publisherService: this._publisher,\n events: this._events,\n });\n }\n}\n"],"mappings":";;;;;;AAkBA,IAAa,kBAAb,cAUU,oBAOR;CACA,AAAU,UAAkB,CAAE;CAC9B,AAAU;CACV,AAAU;CACV,AAAU;CACV,cAAuD,OAAO,CAAE;CAChE,aAAwD,MAAM;CAC9D;CAEA,YACWA,OACAC,QACT;AACA,QAAM,cAAc,SAAS;EAHpB;EACA;CAGV;CAGD,cACEC,WACA;AACA,OAAK,aAAa;CACnB;CAED,YAAYC,aAA2B;AACrC,OAAK,eAAe;AACpB,SAAO;CACR;CAED,OAAOC,QAA6B;AAClC,OAAK,UAAU;AACf,SAAO;CACR;CAED,MACEC,OACM;AACN,OAAK,QAAQ,KAAK,MAAM;AACxB,SAAO;CACR;CAED,KAAKC,MAAsB;AACzB,OAAK,QAAQ;AACb,SAAO;CACR;CAED,UACEC,WAWA;AACA,OAAK,aAAa;AAKlB,SAAO;CAWR;CAED,KACEC,QAUA;AACA,OAAK,QAAQ,OAAO;AAEpB,SAAO;CACR;CAED,OACEA,QAUA;AACA,OAAK,QAAQ,QAAQ;AAErB,SAAO;CACR;CAED,MACEA,QAUA;AACA,SAAO,KAAK,OAAO,OAAO;CAC3B;CAED,OACEA,QAUA;AACA,OAAK,QAAQ,SAAS;AAEtB,SAAO;CACR;CAED,UAAUC,QAA+B;AACvC,OAAK,aAAa;AAClB,SAAO;CACR;CAED,SACEC,UAWA;AACA,OAAK,YAAY,OACf,CAAC,GAAG,KAAK,WAAW,GAAG,QAAS,GAChC,CAAC,MAAM,EAAE,YACV;AAED,SAAO;CAWR;CAED,OACEC,QAWA;AACA,OAAK,UAAU;AAEf,SAAO;CAWR;CAED,OACEH,QAWA;AACA,OAAK,eAAe;AAEpB,SAAO;CAWR;CAGD,MAAMI,SAAmB;AACvB,QAAM,IAAI,MACR;CAEH;CAED,OACEC,IAUA;AACA,SAAO,IAAI,SAAS;GAClB;GACA,QAAQ,KAAK;GACb,OAAO,KAAK;GACZ,aAAa,KAAK;GAClB,MAAM,KAAK;GACX,OAAO,KAAK;GACZ,QAAQ,KAAK;GACb,UAAU,KAAK;GACf,QAAQ,KAAK;GACb,SAAS,KAAK;GACd,WAAW,KAAK;GAChB,QAAQ,KAAK;GACb,YAAY,KAAK;GACjB,WAAW,KAAK;GAChB,kBAAkB,KAAK;GACvB,QAAQ,KAAK;EACd;CACF;AACF"}
1
+ {"version":3,"file":"EndpointBuilder-CpjIMYb0.mjs","names":["route: TRoute","method: TMethod","publisher: Service<TEventPublisherServiceName, TEventPublisher>","description: string","status: SuccessStatus","event: TEvent","tags: string[]","publisher: Service<TName, T>","schema: T","config: RateLimitConfig","services: T","logger: T","_schema: any","fn: EndpointHandler<TInput, TServices, TLogger, OutSchema, TSession>"],"sources":["../src/endpoints/EndpointBuilder.ts"],"sourcesContent":["import type { Logger } from '@geekmidas/logger';\nimport type { RateLimitConfig } from '@geekmidas/rate-limit';\nimport type { Service } from '@geekmidas/services';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\nimport uniqBy from 'lodash.uniqby';\nimport { ConstructType } from '../Construct';\nimport { BaseFunctionBuilder } from '../functions';\nimport { Endpoint, type EndpointSchemas } from './Endpoint';\nimport type {\n AuthorizeFn,\n EndpointHandler,\n SessionFn,\n SuccessStatus,\n} from './Endpoint';\n\nimport type { EventPublisher, MappedEvent } from '@geekmidas/events';\nimport type { HttpMethod } from '../types';\n\nexport class EndpointBuilder<\n TRoute extends string,\n TMethod extends HttpMethod,\n TInput extends EndpointSchemas = {},\n TServices extends Service[] = [],\n TLogger extends Logger = Logger,\n OutSchema extends StandardSchemaV1 | undefined = undefined,\n TSession = unknown,\n TEventPublisher extends EventPublisher<any> | undefined = undefined,\n TEventPublisherServiceName extends string = string,\n> extends BaseFunctionBuilder<\n TInput,\n OutSchema,\n TServices,\n TLogger,\n TEventPublisher,\n TEventPublisherServiceName\n> {\n protected schemas: TInput = {} as TInput;\n protected _description?: string;\n protected _status?: SuccessStatus;\n protected _tags?: string[];\n _getSession: SessionFn<TServices, TLogger, TSession> = () => ({}) as TSession;\n _authorize: AuthorizeFn<TServices, TLogger, TSession> = () => true;\n _rateLimit?: RateLimitConfig;\n\n constructor(\n readonly route: TRoute,\n readonly method: TMethod,\n ) {\n super(ConstructType.Endpoint);\n }\n\n // Internal setter for EndpointFactory to set default publisher\n _setPublisher(\n publisher: Service<TEventPublisherServiceName, TEventPublisher>,\n ) {\n this._publisher = publisher;\n }\n\n description(description: string): this {\n this._description = description;\n return this;\n }\n\n status(status: SuccessStatus): this {\n this._status = status;\n return this;\n }\n\n event<TEvent extends MappedEvent<TEventPublisher, OutSchema>>(\n event: TEvent,\n ): this {\n this._events.push(event);\n return this;\n }\n\n tags(tags: string[]): this {\n this._tags = tags;\n return this;\n }\n\n publisher<T extends EventPublisher<any>, TName extends string>(\n publisher: Service<TName, T>,\n ): EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n TServices,\n TLogger,\n OutSchema,\n TSession,\n T,\n TName\n > {\n this._publisher = publisher as unknown as Service<\n TEventPublisherServiceName,\n TEventPublisher\n >;\n\n return this as unknown as EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n TServices,\n TLogger,\n OutSchema,\n TSession,\n T,\n TName\n >;\n }\n\n body<T extends StandardSchemaV1>(\n schema: T,\n ): EndpointBuilder<\n TRoute,\n TMethod,\n Omit<TInput, 'body'> & { body: T },\n TServices,\n TLogger,\n OutSchema,\n TSession,\n TEventPublisher\n > {\n this.schemas.body = schema as unknown as T;\n // @ts-ignore\n return this;\n }\n\n search<T extends StandardSchemaV1>(\n schema: T,\n ): EndpointBuilder<\n TRoute,\n TMethod,\n Omit<TInput, 'query'> & { query: T },\n TServices,\n TLogger,\n OutSchema,\n TSession,\n TEventPublisher\n > {\n this.schemas.query = schema as unknown as T;\n // @ts-ignore\n return this;\n }\n\n query<T extends StandardSchemaV1>(\n schema: T,\n ): EndpointBuilder<\n TRoute,\n TMethod,\n Omit<TInput, 'query'> & { query: T },\n TServices,\n TLogger,\n OutSchema,\n TSession,\n TEventPublisher\n > {\n return this.search(schema);\n }\n\n params<T extends StandardSchemaV1>(\n schema: T,\n ): EndpointBuilder<\n TRoute,\n TMethod,\n Omit<TInput, 'params'> & { params: T },\n TServices,\n TLogger,\n OutSchema,\n TSession,\n TEventPublisher\n > {\n this.schemas.params = schema as unknown as T;\n // @ts-ignore\n return this;\n }\n\n rateLimit(config: RateLimitConfig): this {\n this._rateLimit = config;\n return this;\n }\n\n services<T extends Service[]>(\n services: T,\n ): EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n [...TServices, ...T],\n TLogger,\n OutSchema,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName\n > {\n this._services = uniqBy(\n [...this._services, ...services],\n (s) => s.serviceName,\n ) as TServices;\n\n return this as unknown as EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n [...TServices, ...T],\n TLogger,\n OutSchema,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName\n >;\n }\n\n logger<T extends Logger>(\n logger: T,\n ): EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n TServices,\n T,\n OutSchema,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName\n > {\n this._logger = logger as unknown as TLogger;\n\n return this as unknown as EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n TServices,\n T,\n OutSchema,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName\n >;\n }\n\n output<T extends StandardSchemaV1>(\n schema: T,\n ): EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n TServices,\n TLogger,\n T,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName\n > {\n this.outputSchema = schema as unknown as OutSchema;\n\n return this as unknown as EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n TServices,\n TLogger,\n T,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName\n >;\n }\n\n // EndpointBuilder doesn't have a generic input method - it uses body, query, params instead\n input(_schema: any): any {\n throw new Error(\n 'EndpointBuilder does not support generic input. Use body(), query(), or params() instead.',\n );\n }\n\n handle(\n fn: EndpointHandler<TInput, TServices, TLogger, OutSchema, TSession>,\n ): Endpoint<\n TRoute,\n TMethod,\n TInput,\n OutSchema,\n TServices,\n TLogger,\n TSession,\n TEventPublisher\n > {\n return new Endpoint({\n fn,\n method: this.method,\n route: this.route,\n description: this._description,\n tags: this._tags,\n input: this.schemas,\n output: this.outputSchema,\n services: this._services,\n logger: this._logger,\n timeout: this._timeout,\n authorize: this._authorize,\n status: this._status,\n getSession: this._getSession,\n rateLimit: this._rateLimit,\n publisherService: this._publisher,\n events: this._events,\n });\n }\n}\n"],"mappings":";;;;;;AAkBA,IAAa,kBAAb,cAUU,oBAOR;CACA,AAAU,UAAkB,CAAE;CAC9B,AAAU;CACV,AAAU;CACV,AAAU;CACV,cAAuD,OAAO,CAAE;CAChE,aAAwD,MAAM;CAC9D;CAEA,YACWA,OACAC,QACT;AACA,QAAM,cAAc,SAAS;EAHpB;EACA;CAGV;CAGD,cACEC,WACA;AACA,OAAK,aAAa;CACnB;CAED,YAAYC,aAA2B;AACrC,OAAK,eAAe;AACpB,SAAO;CACR;CAED,OAAOC,QAA6B;AAClC,OAAK,UAAU;AACf,SAAO;CACR;CAED,MACEC,OACM;AACN,OAAK,QAAQ,KAAK,MAAM;AACxB,SAAO;CACR;CAED,KAAKC,MAAsB;AACzB,OAAK,QAAQ;AACb,SAAO;CACR;CAED,UACEC,WAWA;AACA,OAAK,aAAa;AAKlB,SAAO;CAWR;CAED,KACEC,QAUA;AACA,OAAK,QAAQ,OAAO;AAEpB,SAAO;CACR;CAED,OACEA,QAUA;AACA,OAAK,QAAQ,QAAQ;AAErB,SAAO;CACR;CAED,MACEA,QAUA;AACA,SAAO,KAAK,OAAO,OAAO;CAC3B;CAED,OACEA,QAUA;AACA,OAAK,QAAQ,SAAS;AAEtB,SAAO;CACR;CAED,UAAUC,QAA+B;AACvC,OAAK,aAAa;AAClB,SAAO;CACR;CAED,SACEC,UAWA;AACA,OAAK,YAAY,OACf,CAAC,GAAG,KAAK,WAAW,GAAG,QAAS,GAChC,CAAC,MAAM,EAAE,YACV;AAED,SAAO;CAWR;CAED,OACEC,QAWA;AACA,OAAK,UAAU;AAEf,SAAO;CAWR;CAED,OACEH,QAWA;AACA,OAAK,eAAe;AAEpB,SAAO;CAWR;CAGD,MAAMI,SAAmB;AACvB,QAAM,IAAI,MACR;CAEH;CAED,OACEC,IAUA;AACA,SAAO,IAAI,SAAS;GAClB;GACA,QAAQ,KAAK;GACb,OAAO,KAAK;GACZ,aAAa,KAAK;GAClB,MAAM,KAAK;GACX,OAAO,KAAK;GACZ,QAAQ,KAAK;GACb,UAAU,KAAK;GACf,QAAQ,KAAK;GACb,SAAS,KAAK;GACd,WAAW,KAAK;GAChB,QAAQ,KAAK;GACb,YAAY,KAAK;GACjB,WAAW,KAAK;GAChB,kBAAkB,KAAK;GACvB,QAAQ,KAAK;EACd;CACF;AACF"}
@@ -1,5 +1,5 @@
1
1
  const require_chunk = require('./chunk-CUT6urMc.cjs');
2
- const require_EndpointBuilder = require('./EndpointBuilder-BHFSpbPR.cjs');
2
+ const require_EndpointBuilder = require('./EndpointBuilder-BhRd626m.cjs');
3
3
  const lodash_uniqby = require_chunk.__toESM(require("lodash.uniqby"));
4
4
  const __geekmidas_logger_console = require_chunk.__toESM(require("@geekmidas/logger/console"));
5
5
 
@@ -136,4 +136,4 @@ Object.defineProperty(exports, 'e', {
136
136
  return e;
137
137
  }
138
138
  });
139
- //# sourceMappingURL=EndpointFactory-CXX4E6Gx.cjs.map
139
+ //# sourceMappingURL=EndpointFactory-ChmVHWim.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"EndpointFactory-CXX4E6Gx.cjs","names":["ConsoleLogger","path: P","basePath: TBasePath","path: TPath","fn: AuthorizeFn<TServices, TLogger, TSession>","services: S","logger: L","publisher: Service<TServiceName, T>","session: SessionFn<TServices, TLogger, T>","method: TMethod","EndpointBuilder"],"sources":["../src/endpoints/EndpointFactory.ts"],"sourcesContent":["import type { Logger } from '@geekmidas/logger';\nimport { ConsoleLogger } from '@geekmidas/logger/console';\nimport type { Service } from '@geekmidas/services';\nimport uniqBy from 'lodash.uniqby';\nimport type { AuthorizeFn, SessionFn } from './Endpoint';\nimport { EndpointBuilder } from './EndpointBuilder';\n\nimport type { EventPublisher, MappedEvent } from '@geekmidas/events';\nimport type { HttpMethod } from '../types';\n\nconst DEFAULT_LOGGER = new ConsoleLogger() as any;\n\nexport class EndpointFactory<\n TServices extends Service[] = [],\n TBasePath extends string = '',\n TLogger extends Logger = Logger,\n TSession = unknown,\n TEventPublisher extends EventPublisher<any> | undefined = undefined,\n TEventPublisherServiceName extends string = string,\n> {\n // @ts-ignore\n private defaultServices: TServices;\n private basePath: TBasePath = '' as TBasePath;\n private defaultAuthorizeFn?: AuthorizeFn<TServices, TLogger, TSession>;\n private defaultEventPublisher:\n | Service<TEventPublisherServiceName, TEventPublisher>\n | undefined;\n private defaultSessionExtractor?: SessionFn<TServices, TLogger, TSession>;\n private defaultLogger: TLogger = DEFAULT_LOGGER;\n\n constructor({\n basePath,\n defaultAuthorizeFn,\n defaultLogger,\n defaultSessionExtractor,\n // @ts-ignore\n defaultServices = [] as TServices,\n defaultEventPublisher,\n }: EndpointFactoryOptions<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName\n > = {}) {\n // Initialize default services\n this.defaultServices = uniqBy(\n defaultServices,\n (s) => s.serviceName,\n ) as TServices;\n\n this.basePath = basePath || ('' as TBasePath);\n this.defaultAuthorizeFn = defaultAuthorizeFn;\n this.defaultLogger = defaultLogger || (DEFAULT_LOGGER as TLogger);\n this.defaultSessionExtractor = defaultSessionExtractor;\n this.defaultEventPublisher = defaultEventPublisher;\n }\n\n static joinPaths<TBasePath extends string, P extends string>(\n path: P,\n basePath: TBasePath = '' as TBasePath,\n ): JoinPaths<TBasePath, P> {\n // Handle empty cases\n if (!basePath && !path) return '/' as JoinPaths<TBasePath, P>;\n if (!basePath)\n return (path.startsWith('/') ? path : '/' + path) as JoinPaths<\n TBasePath,\n P\n >;\n if (!path)\n return (\n basePath.startsWith('/') ? basePath : '/' + basePath\n ) as JoinPaths<TBasePath, P>;\n\n const base = basePath.endsWith('/') ? basePath.slice(0, -1) : basePath;\n const segment = path.startsWith('/') ? path : '/' + path;\n\n let result = base + segment;\n\n // Ensure leading slash\n if (!result.startsWith('/')) {\n result = '/' + result;\n }\n\n // Normalize multiple slashes (except in the middle of the path where they might be intentional)\n result = result.replace(/^\\/+/g, '/');\n\n // Remove trailing slash unless it's the root path \"/\"\n if (result.length > 1 && result.endsWith('/')) {\n result = result.slice(0, -1);\n }\n\n return result as JoinPaths<TBasePath, P>;\n }\n\n // Create a sub-router with a path prefix\n route<TPath extends string>(\n path: TPath,\n ): EndpointFactory<\n TServices,\n JoinPaths<TBasePath, TPath>,\n TLogger,\n TSession,\n TEventPublisher\n > {\n const newBasePath = EndpointFactory.joinPaths(path, this.basePath);\n return new EndpointFactory({\n defaultServices: this.defaultServices,\n basePath: newBasePath,\n defaultAuthorizeFn: this.defaultAuthorizeFn,\n defaultLogger: this.defaultLogger,\n defaultSessionExtractor: this.defaultSessionExtractor,\n defaultEventPublisher: this.defaultEventPublisher,\n });\n }\n\n // Create a new factory with authorization\n authorize(\n fn: AuthorizeFn<TServices, TLogger, TSession>,\n ): EndpointFactory<TServices, TBasePath, TLogger, TSession, TEventPublisher> {\n return new EndpointFactory({\n defaultServices: this.defaultServices,\n basePath: this.basePath,\n defaultAuthorizeFn: fn,\n defaultLogger: this.defaultLogger,\n defaultSessionExtractor: this.defaultSessionExtractor,\n defaultEventPublisher: this.defaultEventPublisher,\n });\n }\n\n // Create a new factory with services\n services<S extends Service[]>(\n services: S,\n ): EndpointFactory<\n [...S, ...TServices],\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher\n > {\n return new EndpointFactory<\n [...S, ...TServices],\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher\n >({\n defaultServices: [...services, ...this.defaultServices],\n basePath: this.basePath,\n defaultAuthorizeFn: this.defaultAuthorizeFn,\n defaultLogger: this.defaultLogger,\n defaultSessionExtractor: this.defaultSessionExtractor,\n defaultEventPublisher: this.defaultEventPublisher,\n });\n }\n\n logger<L extends Logger>(\n logger: L,\n ): EndpointFactory<TServices, TBasePath, L, TSession> {\n return new EndpointFactory<TServices, TBasePath, L, TSession>({\n defaultServices: this.defaultServices,\n basePath: this.basePath,\n defaultAuthorizeFn: this.defaultAuthorizeFn,\n defaultLogger: logger,\n defaultSessionExtractor: this.defaultSessionExtractor,\n } as EndpointFactoryOptions<TServices, TBasePath, L, TSession>);\n }\n\n publisher<\n T extends EventPublisher<any>,\n TServiceName extends string = string,\n >(\n publisher: Service<TServiceName, T>,\n ): EndpointFactory<TServices, TBasePath, TLogger, TSession, T> {\n return new EndpointFactory<TServices, TBasePath, TLogger, TSession, T>({\n defaultServices: this.defaultServices,\n basePath: this.basePath,\n defaultAuthorizeFn: this.defaultAuthorizeFn,\n defaultLogger: this.defaultLogger,\n defaultSessionExtractor: this.defaultSessionExtractor,\n defaultEventPublisher: publisher,\n });\n }\n\n session<T>(session: SessionFn<TServices, TLogger, T>) {\n return new EndpointFactory<TServices, TBasePath, TLogger, T>({\n defaultServices: this.defaultServices,\n basePath: this.basePath,\n // @ts-ignore\n defaultAuthorizeFn: this.defaultAuthorizeFn,\n defaultLogger: this.defaultLogger,\n defaultSessionExtractor: session,\n defaultEventPublisher: this.defaultEventPublisher as any,\n });\n }\n\n private createBuilder<TMethod extends HttpMethod, TPath extends string>(\n method: TMethod,\n path: TPath,\n ): EndpointBuilder<\n JoinPaths<TBasePath, TPath>,\n TMethod,\n {},\n TServices,\n TLogger,\n undefined,\n TSession,\n TEventPublisher\n > {\n const fullPath = EndpointFactory.joinPaths(path, this.basePath);\n const builder = new EndpointBuilder<\n JoinPaths<TBasePath, TPath>,\n TMethod,\n {},\n TServices,\n TLogger,\n undefined,\n TSession,\n TEventPublisher\n >(fullPath, method);\n\n if (this.defaultAuthorizeFn) {\n // @ts-ignore\n builder._authorize = this.defaultAuthorizeFn;\n }\n if (this.defaultServices.length) {\n builder._services = this.defaultServices as TServices;\n }\n\n if (this.defaultLogger) {\n builder._logger = this.defaultLogger as TLogger;\n }\n\n if (this.defaultSessionExtractor) {\n builder._getSession = this.defaultSessionExtractor as SessionFn<\n TServices,\n TLogger,\n TSession\n >;\n }\n\n if (this.defaultEventPublisher) {\n builder._setPublisher(this.defaultEventPublisher);\n }\n\n return builder as unknown as EndpointBuilder<\n JoinPaths<TBasePath, TPath>,\n TMethod,\n {},\n TServices,\n TLogger,\n undefined,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName\n >;\n }\n\n post<TPath extends string>(path: TPath) {\n return this.createBuilder('POST', path);\n }\n\n get<TPath extends string>(path: TPath) {\n return this.createBuilder('GET', path);\n }\n\n put<TPath extends string>(path: TPath) {\n return this.createBuilder('PUT', path);\n }\n\n delete<TPath extends string>(path: TPath) {\n return this.createBuilder('DELETE', path);\n }\n\n patch<TPath extends string>(path: TPath) {\n return this.createBuilder('PATCH', path);\n }\n\n options<TPath extends string>(path: TPath) {\n return this.createBuilder('OPTIONS', path);\n }\n}\n\nexport type RemoveTrailingSlash<T extends string> = T extends `${infer Rest}/`\n ? Rest extends ''\n ? T // Keep \"/\" as is\n : Rest\n : T;\n\nexport type JoinPaths<\n TBasePath extends string,\n TPath extends string,\n> = RemoveTrailingSlash<\n TBasePath extends ''\n ? TPath\n : TPath extends ''\n ? TBasePath\n : TBasePath extends '/'\n ? TPath extends `/${string}`\n ? TPath\n : `/${TPath}`\n : TBasePath extends `${infer Base}/`\n ? TPath extends `/${infer Rest}`\n ? `${Base}/${Rest}`\n : `${Base}/${TPath}`\n : TPath extends `/${infer Rest}`\n ? `${TBasePath}/${Rest}`\n : `${TBasePath}/${TPath}`\n>;\n\nexport interface EndpointFactoryOptions<\n TServices extends Service[] = [],\n TBasePath extends string = '',\n TLogger extends Logger = Logger,\n TSession = unknown,\n TEventPublisher extends EventPublisher<any> | undefined = undefined,\n TEventPublisherServiceName extends string = string,\n> {\n defaultServices?: TServices;\n basePath?: TBasePath;\n defaultAuthorizeFn?: AuthorizeFn<TServices, TLogger, TSession>;\n defaultLogger?: TLogger;\n defaultSessionExtractor?: SessionFn<TServices, TLogger, TSession>;\n defaultEventPublisher?: Service<TEventPublisherServiceName, TEventPublisher>;\n defaultEvents?: MappedEvent<TEventPublisher, undefined>[];\n}\n\nexport const e = new EndpointFactory();\n"],"mappings":"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"}
1
+ {"version":3,"file":"EndpointFactory-ChmVHWim.cjs","names":["ConsoleLogger","path: P","basePath: TBasePath","path: TPath","fn: AuthorizeFn<TServices, TLogger, TSession>","services: S","logger: L","publisher: Service<TServiceName, T>","session: SessionFn<TServices, TLogger, T>","method: TMethod","EndpointBuilder"],"sources":["../src/endpoints/EndpointFactory.ts"],"sourcesContent":["import type { Logger } from '@geekmidas/logger';\nimport { ConsoleLogger } from '@geekmidas/logger/console';\nimport type { Service } from '@geekmidas/services';\nimport uniqBy from 'lodash.uniqby';\nimport type { AuthorizeFn, SessionFn } from './Endpoint';\nimport { EndpointBuilder } from './EndpointBuilder';\n\nimport type { EventPublisher, MappedEvent } from '@geekmidas/events';\nimport type { HttpMethod } from '../types';\n\nconst DEFAULT_LOGGER = new ConsoleLogger() as any;\n\nexport class EndpointFactory<\n TServices extends Service[] = [],\n TBasePath extends string = '',\n TLogger extends Logger = Logger,\n TSession = unknown,\n TEventPublisher extends EventPublisher<any> | undefined = undefined,\n TEventPublisherServiceName extends string = string,\n> {\n // @ts-ignore\n private defaultServices: TServices;\n private basePath: TBasePath = '' as TBasePath;\n private defaultAuthorizeFn?: AuthorizeFn<TServices, TLogger, TSession>;\n private defaultEventPublisher:\n | Service<TEventPublisherServiceName, TEventPublisher>\n | undefined;\n private defaultSessionExtractor?: SessionFn<TServices, TLogger, TSession>;\n private defaultLogger: TLogger = DEFAULT_LOGGER;\n\n constructor({\n basePath,\n defaultAuthorizeFn,\n defaultLogger,\n defaultSessionExtractor,\n // @ts-ignore\n defaultServices = [] as TServices,\n defaultEventPublisher,\n }: EndpointFactoryOptions<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName\n > = {}) {\n // Initialize default services\n this.defaultServices = uniqBy(\n defaultServices,\n (s) => s.serviceName,\n ) as TServices;\n\n this.basePath = basePath || ('' as TBasePath);\n this.defaultAuthorizeFn = defaultAuthorizeFn;\n this.defaultLogger = defaultLogger || (DEFAULT_LOGGER as TLogger);\n this.defaultSessionExtractor = defaultSessionExtractor;\n this.defaultEventPublisher = defaultEventPublisher;\n }\n\n static joinPaths<TBasePath extends string, P extends string>(\n path: P,\n basePath: TBasePath = '' as TBasePath,\n ): JoinPaths<TBasePath, P> {\n // Handle empty cases\n if (!basePath && !path) return '/' as JoinPaths<TBasePath, P>;\n if (!basePath)\n return (path.startsWith('/') ? path : '/' + path) as JoinPaths<\n TBasePath,\n P\n >;\n if (!path)\n return (\n basePath.startsWith('/') ? basePath : '/' + basePath\n ) as JoinPaths<TBasePath, P>;\n\n const base = basePath.endsWith('/') ? basePath.slice(0, -1) : basePath;\n const segment = path.startsWith('/') ? path : '/' + path;\n\n let result = base + segment;\n\n // Ensure leading slash\n if (!result.startsWith('/')) {\n result = '/' + result;\n }\n\n // Normalize multiple slashes (except in the middle of the path where they might be intentional)\n result = result.replace(/^\\/+/g, '/');\n\n // Remove trailing slash unless it's the root path \"/\"\n if (result.length > 1 && result.endsWith('/')) {\n result = result.slice(0, -1);\n }\n\n return result as JoinPaths<TBasePath, P>;\n }\n\n // Create a sub-router with a path prefix\n route<TPath extends string>(\n path: TPath,\n ): EndpointFactory<\n TServices,\n JoinPaths<TBasePath, TPath>,\n TLogger,\n TSession,\n TEventPublisher\n > {\n const newBasePath = EndpointFactory.joinPaths(path, this.basePath);\n return new EndpointFactory({\n defaultServices: this.defaultServices,\n basePath: newBasePath,\n defaultAuthorizeFn: this.defaultAuthorizeFn,\n defaultLogger: this.defaultLogger,\n defaultSessionExtractor: this.defaultSessionExtractor,\n defaultEventPublisher: this.defaultEventPublisher,\n });\n }\n\n // Create a new factory with authorization\n authorize(\n fn: AuthorizeFn<TServices, TLogger, TSession>,\n ): EndpointFactory<TServices, TBasePath, TLogger, TSession, TEventPublisher> {\n return new EndpointFactory({\n defaultServices: this.defaultServices,\n basePath: this.basePath,\n defaultAuthorizeFn: fn,\n defaultLogger: this.defaultLogger,\n defaultSessionExtractor: this.defaultSessionExtractor,\n defaultEventPublisher: this.defaultEventPublisher,\n });\n }\n\n // Create a new factory with services\n services<S extends Service[]>(\n services: S,\n ): EndpointFactory<\n [...S, ...TServices],\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher\n > {\n return new EndpointFactory<\n [...S, ...TServices],\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher\n >({\n defaultServices: [...services, ...this.defaultServices],\n basePath: this.basePath,\n defaultAuthorizeFn: this.defaultAuthorizeFn,\n defaultLogger: this.defaultLogger,\n defaultSessionExtractor: this.defaultSessionExtractor,\n defaultEventPublisher: this.defaultEventPublisher,\n });\n }\n\n logger<L extends Logger>(\n logger: L,\n ): EndpointFactory<TServices, TBasePath, L, TSession> {\n return new EndpointFactory<TServices, TBasePath, L, TSession>({\n defaultServices: this.defaultServices,\n basePath: this.basePath,\n defaultAuthorizeFn: this.defaultAuthorizeFn,\n defaultLogger: logger,\n defaultSessionExtractor: this.defaultSessionExtractor,\n } as EndpointFactoryOptions<TServices, TBasePath, L, TSession>);\n }\n\n publisher<\n T extends EventPublisher<any>,\n TServiceName extends string = string,\n >(\n publisher: Service<TServiceName, T>,\n ): EndpointFactory<TServices, TBasePath, TLogger, TSession, T> {\n return new EndpointFactory<TServices, TBasePath, TLogger, TSession, T>({\n defaultServices: this.defaultServices,\n basePath: this.basePath,\n defaultAuthorizeFn: this.defaultAuthorizeFn,\n defaultLogger: this.defaultLogger,\n defaultSessionExtractor: this.defaultSessionExtractor,\n defaultEventPublisher: publisher,\n });\n }\n\n session<T>(session: SessionFn<TServices, TLogger, T>) {\n return new EndpointFactory<TServices, TBasePath, TLogger, T>({\n defaultServices: this.defaultServices,\n basePath: this.basePath,\n // @ts-ignore\n defaultAuthorizeFn: this.defaultAuthorizeFn,\n defaultLogger: this.defaultLogger,\n defaultSessionExtractor: session,\n defaultEventPublisher: this.defaultEventPublisher as any,\n });\n }\n\n private createBuilder<TMethod extends HttpMethod, TPath extends string>(\n method: TMethod,\n path: TPath,\n ): EndpointBuilder<\n JoinPaths<TBasePath, TPath>,\n TMethod,\n {},\n TServices,\n TLogger,\n undefined,\n TSession,\n TEventPublisher\n > {\n const fullPath = EndpointFactory.joinPaths(path, this.basePath);\n const builder = new EndpointBuilder<\n JoinPaths<TBasePath, TPath>,\n TMethod,\n {},\n TServices,\n TLogger,\n undefined,\n TSession,\n TEventPublisher\n >(fullPath, method);\n\n if (this.defaultAuthorizeFn) {\n // @ts-ignore\n builder._authorize = this.defaultAuthorizeFn;\n }\n if (this.defaultServices.length) {\n builder._services = this.defaultServices as TServices;\n }\n\n if (this.defaultLogger) {\n builder._logger = this.defaultLogger as TLogger;\n }\n\n if (this.defaultSessionExtractor) {\n builder._getSession = this.defaultSessionExtractor as SessionFn<\n TServices,\n TLogger,\n TSession\n >;\n }\n\n if (this.defaultEventPublisher) {\n builder._setPublisher(this.defaultEventPublisher);\n }\n\n return builder as unknown as EndpointBuilder<\n JoinPaths<TBasePath, TPath>,\n TMethod,\n {},\n TServices,\n TLogger,\n undefined,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName\n >;\n }\n\n post<TPath extends string>(path: TPath) {\n return this.createBuilder('POST', path);\n }\n\n get<TPath extends string>(path: TPath) {\n return this.createBuilder('GET', path);\n }\n\n put<TPath extends string>(path: TPath) {\n return this.createBuilder('PUT', path);\n }\n\n delete<TPath extends string>(path: TPath) {\n return this.createBuilder('DELETE', path);\n }\n\n patch<TPath extends string>(path: TPath) {\n return this.createBuilder('PATCH', path);\n }\n\n options<TPath extends string>(path: TPath) {\n return this.createBuilder('OPTIONS', path);\n }\n}\n\nexport type RemoveTrailingSlash<T extends string> = T extends `${infer Rest}/`\n ? Rest extends ''\n ? T // Keep \"/\" as is\n : Rest\n : T;\n\nexport type JoinPaths<\n TBasePath extends string,\n TPath extends string,\n> = RemoveTrailingSlash<\n TBasePath extends ''\n ? TPath\n : TPath extends ''\n ? TBasePath\n : TBasePath extends '/'\n ? TPath extends `/${string}`\n ? TPath\n : `/${TPath}`\n : TBasePath extends `${infer Base}/`\n ? TPath extends `/${infer Rest}`\n ? `${Base}/${Rest}`\n : `${Base}/${TPath}`\n : TPath extends `/${infer Rest}`\n ? `${TBasePath}/${Rest}`\n : `${TBasePath}/${TPath}`\n>;\n\nexport interface EndpointFactoryOptions<\n TServices extends Service[] = [],\n TBasePath extends string = '',\n TLogger extends Logger = Logger,\n TSession = unknown,\n TEventPublisher extends EventPublisher<any> | undefined = undefined,\n TEventPublisherServiceName extends string = string,\n> {\n defaultServices?: TServices;\n basePath?: TBasePath;\n defaultAuthorizeFn?: AuthorizeFn<TServices, TLogger, TSession>;\n defaultLogger?: TLogger;\n defaultSessionExtractor?: SessionFn<TServices, TLogger, TSession>;\n defaultEventPublisher?: Service<TEventPublisherServiceName, TEventPublisher>;\n defaultEvents?: MappedEvent<TEventPublisher, undefined>[];\n}\n\nexport const e = new EndpointFactory();\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { AuthorizeFn, SessionFn } from "./Endpoint-C7z9YJHK.cjs";
2
- import { EndpointBuilder } from "./EndpointBuilder-CP9RGwZH.cjs";
2
+ import { EndpointBuilder } from "./EndpointBuilder-1fw103D6.cjs";
3
3
  import { EventPublisher, MappedEvent } from "@geekmidas/events";
4
4
  import { Logger } from "@geekmidas/logger";
5
5
  import { Service } from "@geekmidas/services";
@@ -49,4 +49,4 @@ interface EndpointFactoryOptions<TServices extends Service[] = [], TBasePath ext
49
49
  declare const e: EndpointFactory<[], "", Logger, unknown, undefined, string>;
50
50
  //#endregion
51
51
  export { EndpointFactory, EndpointFactoryOptions, JoinPaths, RemoveTrailingSlash, e };
52
- //# sourceMappingURL=EndpointFactory-D2zgWbXZ.d.cts.map
52
+ //# sourceMappingURL=EndpointFactory-D576BhaH.d.cts.map
@@ -1,4 +1,4 @@
1
- import { EndpointBuilder } from "./EndpointBuilder-BLUsoK3l.mjs";
1
+ import { EndpointBuilder } from "./EndpointBuilder-CpjIMYb0.mjs";
2
2
  import uniqBy from "lodash.uniqby";
3
3
  import { ConsoleLogger } from "@geekmidas/logger/console";
4
4
 
@@ -124,4 +124,4 @@ const e = new EndpointFactory();
124
124
 
125
125
  //#endregion
126
126
  export { EndpointFactory, e };
127
- //# sourceMappingURL=EndpointFactory-BYdDVCNj.mjs.map
127
+ //# sourceMappingURL=EndpointFactory-DLpEbLzL.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"EndpointFactory-BYdDVCNj.mjs","names":["DEFAULT_LOGGER","path: P","basePath: TBasePath","path: TPath","fn: AuthorizeFn<TServices, TLogger, TSession>","services: S","logger: L","publisher: Service<TServiceName, T>","session: SessionFn<TServices, TLogger, T>","method: TMethod"],"sources":["../src/endpoints/EndpointFactory.ts"],"sourcesContent":["import type { Logger } from '@geekmidas/logger';\nimport { ConsoleLogger } from '@geekmidas/logger/console';\nimport type { Service } from '@geekmidas/services';\nimport uniqBy from 'lodash.uniqby';\nimport type { AuthorizeFn, SessionFn } from './Endpoint';\nimport { EndpointBuilder } from './EndpointBuilder';\n\nimport type { EventPublisher, MappedEvent } from '@geekmidas/events';\nimport type { HttpMethod } from '../types';\n\nconst DEFAULT_LOGGER = new ConsoleLogger() as any;\n\nexport class EndpointFactory<\n TServices extends Service[] = [],\n TBasePath extends string = '',\n TLogger extends Logger = Logger,\n TSession = unknown,\n TEventPublisher extends EventPublisher<any> | undefined = undefined,\n TEventPublisherServiceName extends string = string,\n> {\n // @ts-ignore\n private defaultServices: TServices;\n private basePath: TBasePath = '' as TBasePath;\n private defaultAuthorizeFn?: AuthorizeFn<TServices, TLogger, TSession>;\n private defaultEventPublisher:\n | Service<TEventPublisherServiceName, TEventPublisher>\n | undefined;\n private defaultSessionExtractor?: SessionFn<TServices, TLogger, TSession>;\n private defaultLogger: TLogger = DEFAULT_LOGGER;\n\n constructor({\n basePath,\n defaultAuthorizeFn,\n defaultLogger,\n defaultSessionExtractor,\n // @ts-ignore\n defaultServices = [] as TServices,\n defaultEventPublisher,\n }: EndpointFactoryOptions<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName\n > = {}) {\n // Initialize default services\n this.defaultServices = uniqBy(\n defaultServices,\n (s) => s.serviceName,\n ) as TServices;\n\n this.basePath = basePath || ('' as TBasePath);\n this.defaultAuthorizeFn = defaultAuthorizeFn;\n this.defaultLogger = defaultLogger || (DEFAULT_LOGGER as TLogger);\n this.defaultSessionExtractor = defaultSessionExtractor;\n this.defaultEventPublisher = defaultEventPublisher;\n }\n\n static joinPaths<TBasePath extends string, P extends string>(\n path: P,\n basePath: TBasePath = '' as TBasePath,\n ): JoinPaths<TBasePath, P> {\n // Handle empty cases\n if (!basePath && !path) return '/' as JoinPaths<TBasePath, P>;\n if (!basePath)\n return (path.startsWith('/') ? path : '/' + path) as JoinPaths<\n TBasePath,\n P\n >;\n if (!path)\n return (\n basePath.startsWith('/') ? basePath : '/' + basePath\n ) as JoinPaths<TBasePath, P>;\n\n const base = basePath.endsWith('/') ? basePath.slice(0, -1) : basePath;\n const segment = path.startsWith('/') ? path : '/' + path;\n\n let result = base + segment;\n\n // Ensure leading slash\n if (!result.startsWith('/')) {\n result = '/' + result;\n }\n\n // Normalize multiple slashes (except in the middle of the path where they might be intentional)\n result = result.replace(/^\\/+/g, '/');\n\n // Remove trailing slash unless it's the root path \"/\"\n if (result.length > 1 && result.endsWith('/')) {\n result = result.slice(0, -1);\n }\n\n return result as JoinPaths<TBasePath, P>;\n }\n\n // Create a sub-router with a path prefix\n route<TPath extends string>(\n path: TPath,\n ): EndpointFactory<\n TServices,\n JoinPaths<TBasePath, TPath>,\n TLogger,\n TSession,\n TEventPublisher\n > {\n const newBasePath = EndpointFactory.joinPaths(path, this.basePath);\n return new EndpointFactory({\n defaultServices: this.defaultServices,\n basePath: newBasePath,\n defaultAuthorizeFn: this.defaultAuthorizeFn,\n defaultLogger: this.defaultLogger,\n defaultSessionExtractor: this.defaultSessionExtractor,\n defaultEventPublisher: this.defaultEventPublisher,\n });\n }\n\n // Create a new factory with authorization\n authorize(\n fn: AuthorizeFn<TServices, TLogger, TSession>,\n ): EndpointFactory<TServices, TBasePath, TLogger, TSession, TEventPublisher> {\n return new EndpointFactory({\n defaultServices: this.defaultServices,\n basePath: this.basePath,\n defaultAuthorizeFn: fn,\n defaultLogger: this.defaultLogger,\n defaultSessionExtractor: this.defaultSessionExtractor,\n defaultEventPublisher: this.defaultEventPublisher,\n });\n }\n\n // Create a new factory with services\n services<S extends Service[]>(\n services: S,\n ): EndpointFactory<\n [...S, ...TServices],\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher\n > {\n return new EndpointFactory<\n [...S, ...TServices],\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher\n >({\n defaultServices: [...services, ...this.defaultServices],\n basePath: this.basePath,\n defaultAuthorizeFn: this.defaultAuthorizeFn,\n defaultLogger: this.defaultLogger,\n defaultSessionExtractor: this.defaultSessionExtractor,\n defaultEventPublisher: this.defaultEventPublisher,\n });\n }\n\n logger<L extends Logger>(\n logger: L,\n ): EndpointFactory<TServices, TBasePath, L, TSession> {\n return new EndpointFactory<TServices, TBasePath, L, TSession>({\n defaultServices: this.defaultServices,\n basePath: this.basePath,\n defaultAuthorizeFn: this.defaultAuthorizeFn,\n defaultLogger: logger,\n defaultSessionExtractor: this.defaultSessionExtractor,\n } as EndpointFactoryOptions<TServices, TBasePath, L, TSession>);\n }\n\n publisher<\n T extends EventPublisher<any>,\n TServiceName extends string = string,\n >(\n publisher: Service<TServiceName, T>,\n ): EndpointFactory<TServices, TBasePath, TLogger, TSession, T> {\n return new EndpointFactory<TServices, TBasePath, TLogger, TSession, T>({\n defaultServices: this.defaultServices,\n basePath: this.basePath,\n defaultAuthorizeFn: this.defaultAuthorizeFn,\n defaultLogger: this.defaultLogger,\n defaultSessionExtractor: this.defaultSessionExtractor,\n defaultEventPublisher: publisher,\n });\n }\n\n session<T>(session: SessionFn<TServices, TLogger, T>) {\n return new EndpointFactory<TServices, TBasePath, TLogger, T>({\n defaultServices: this.defaultServices,\n basePath: this.basePath,\n // @ts-ignore\n defaultAuthorizeFn: this.defaultAuthorizeFn,\n defaultLogger: this.defaultLogger,\n defaultSessionExtractor: session,\n defaultEventPublisher: this.defaultEventPublisher as any,\n });\n }\n\n private createBuilder<TMethod extends HttpMethod, TPath extends string>(\n method: TMethod,\n path: TPath,\n ): EndpointBuilder<\n JoinPaths<TBasePath, TPath>,\n TMethod,\n {},\n TServices,\n TLogger,\n undefined,\n TSession,\n TEventPublisher\n > {\n const fullPath = EndpointFactory.joinPaths(path, this.basePath);\n const builder = new EndpointBuilder<\n JoinPaths<TBasePath, TPath>,\n TMethod,\n {},\n TServices,\n TLogger,\n undefined,\n TSession,\n TEventPublisher\n >(fullPath, method);\n\n if (this.defaultAuthorizeFn) {\n // @ts-ignore\n builder._authorize = this.defaultAuthorizeFn;\n }\n if (this.defaultServices.length) {\n builder._services = this.defaultServices as TServices;\n }\n\n if (this.defaultLogger) {\n builder._logger = this.defaultLogger as TLogger;\n }\n\n if (this.defaultSessionExtractor) {\n builder._getSession = this.defaultSessionExtractor as SessionFn<\n TServices,\n TLogger,\n TSession\n >;\n }\n\n if (this.defaultEventPublisher) {\n builder._setPublisher(this.defaultEventPublisher);\n }\n\n return builder as unknown as EndpointBuilder<\n JoinPaths<TBasePath, TPath>,\n TMethod,\n {},\n TServices,\n TLogger,\n undefined,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName\n >;\n }\n\n post<TPath extends string>(path: TPath) {\n return this.createBuilder('POST', path);\n }\n\n get<TPath extends string>(path: TPath) {\n return this.createBuilder('GET', path);\n }\n\n put<TPath extends string>(path: TPath) {\n return this.createBuilder('PUT', path);\n }\n\n delete<TPath extends string>(path: TPath) {\n return this.createBuilder('DELETE', path);\n }\n\n patch<TPath extends string>(path: TPath) {\n return this.createBuilder('PATCH', path);\n }\n\n options<TPath extends string>(path: TPath) {\n return this.createBuilder('OPTIONS', path);\n }\n}\n\nexport type RemoveTrailingSlash<T extends string> = T extends `${infer Rest}/`\n ? Rest extends ''\n ? T // Keep \"/\" as is\n : Rest\n : T;\n\nexport type JoinPaths<\n TBasePath extends string,\n TPath extends string,\n> = RemoveTrailingSlash<\n TBasePath extends ''\n ? TPath\n : TPath extends ''\n ? TBasePath\n : TBasePath extends '/'\n ? TPath extends `/${string}`\n ? TPath\n : `/${TPath}`\n : TBasePath extends `${infer Base}/`\n ? TPath extends `/${infer Rest}`\n ? `${Base}/${Rest}`\n : `${Base}/${TPath}`\n : TPath extends `/${infer Rest}`\n ? `${TBasePath}/${Rest}`\n : `${TBasePath}/${TPath}`\n>;\n\nexport interface EndpointFactoryOptions<\n TServices extends Service[] = [],\n TBasePath extends string = '',\n TLogger extends Logger = Logger,\n TSession = unknown,\n TEventPublisher extends EventPublisher<any> | undefined = undefined,\n TEventPublisherServiceName extends string = string,\n> {\n defaultServices?: TServices;\n basePath?: TBasePath;\n defaultAuthorizeFn?: AuthorizeFn<TServices, TLogger, TSession>;\n defaultLogger?: TLogger;\n defaultSessionExtractor?: SessionFn<TServices, TLogger, TSession>;\n defaultEventPublisher?: Service<TEventPublisherServiceName, TEventPublisher>;\n defaultEvents?: MappedEvent<TEventPublisher, undefined>[];\n}\n\nexport const e = new EndpointFactory();\n"],"mappings":"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"}
1
+ {"version":3,"file":"EndpointFactory-DLpEbLzL.mjs","names":["DEFAULT_LOGGER","path: P","basePath: TBasePath","path: TPath","fn: AuthorizeFn<TServices, TLogger, TSession>","services: S","logger: L","publisher: Service<TServiceName, T>","session: SessionFn<TServices, TLogger, T>","method: TMethod"],"sources":["../src/endpoints/EndpointFactory.ts"],"sourcesContent":["import type { Logger } from '@geekmidas/logger';\nimport { ConsoleLogger } from '@geekmidas/logger/console';\nimport type { Service } from '@geekmidas/services';\nimport uniqBy from 'lodash.uniqby';\nimport type { AuthorizeFn, SessionFn } from './Endpoint';\nimport { EndpointBuilder } from './EndpointBuilder';\n\nimport type { EventPublisher, MappedEvent } from '@geekmidas/events';\nimport type { HttpMethod } from '../types';\n\nconst DEFAULT_LOGGER = new ConsoleLogger() as any;\n\nexport class EndpointFactory<\n TServices extends Service[] = [],\n TBasePath extends string = '',\n TLogger extends Logger = Logger,\n TSession = unknown,\n TEventPublisher extends EventPublisher<any> | undefined = undefined,\n TEventPublisherServiceName extends string = string,\n> {\n // @ts-ignore\n private defaultServices: TServices;\n private basePath: TBasePath = '' as TBasePath;\n private defaultAuthorizeFn?: AuthorizeFn<TServices, TLogger, TSession>;\n private defaultEventPublisher:\n | Service<TEventPublisherServiceName, TEventPublisher>\n | undefined;\n private defaultSessionExtractor?: SessionFn<TServices, TLogger, TSession>;\n private defaultLogger: TLogger = DEFAULT_LOGGER;\n\n constructor({\n basePath,\n defaultAuthorizeFn,\n defaultLogger,\n defaultSessionExtractor,\n // @ts-ignore\n defaultServices = [] as TServices,\n defaultEventPublisher,\n }: EndpointFactoryOptions<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName\n > = {}) {\n // Initialize default services\n this.defaultServices = uniqBy(\n defaultServices,\n (s) => s.serviceName,\n ) as TServices;\n\n this.basePath = basePath || ('' as TBasePath);\n this.defaultAuthorizeFn = defaultAuthorizeFn;\n this.defaultLogger = defaultLogger || (DEFAULT_LOGGER as TLogger);\n this.defaultSessionExtractor = defaultSessionExtractor;\n this.defaultEventPublisher = defaultEventPublisher;\n }\n\n static joinPaths<TBasePath extends string, P extends string>(\n path: P,\n basePath: TBasePath = '' as TBasePath,\n ): JoinPaths<TBasePath, P> {\n // Handle empty cases\n if (!basePath && !path) return '/' as JoinPaths<TBasePath, P>;\n if (!basePath)\n return (path.startsWith('/') ? path : '/' + path) as JoinPaths<\n TBasePath,\n P\n >;\n if (!path)\n return (\n basePath.startsWith('/') ? basePath : '/' + basePath\n ) as JoinPaths<TBasePath, P>;\n\n const base = basePath.endsWith('/') ? basePath.slice(0, -1) : basePath;\n const segment = path.startsWith('/') ? path : '/' + path;\n\n let result = base + segment;\n\n // Ensure leading slash\n if (!result.startsWith('/')) {\n result = '/' + result;\n }\n\n // Normalize multiple slashes (except in the middle of the path where they might be intentional)\n result = result.replace(/^\\/+/g, '/');\n\n // Remove trailing slash unless it's the root path \"/\"\n if (result.length > 1 && result.endsWith('/')) {\n result = result.slice(0, -1);\n }\n\n return result as JoinPaths<TBasePath, P>;\n }\n\n // Create a sub-router with a path prefix\n route<TPath extends string>(\n path: TPath,\n ): EndpointFactory<\n TServices,\n JoinPaths<TBasePath, TPath>,\n TLogger,\n TSession,\n TEventPublisher\n > {\n const newBasePath = EndpointFactory.joinPaths(path, this.basePath);\n return new EndpointFactory({\n defaultServices: this.defaultServices,\n basePath: newBasePath,\n defaultAuthorizeFn: this.defaultAuthorizeFn,\n defaultLogger: this.defaultLogger,\n defaultSessionExtractor: this.defaultSessionExtractor,\n defaultEventPublisher: this.defaultEventPublisher,\n });\n }\n\n // Create a new factory with authorization\n authorize(\n fn: AuthorizeFn<TServices, TLogger, TSession>,\n ): EndpointFactory<TServices, TBasePath, TLogger, TSession, TEventPublisher> {\n return new EndpointFactory({\n defaultServices: this.defaultServices,\n basePath: this.basePath,\n defaultAuthorizeFn: fn,\n defaultLogger: this.defaultLogger,\n defaultSessionExtractor: this.defaultSessionExtractor,\n defaultEventPublisher: this.defaultEventPublisher,\n });\n }\n\n // Create a new factory with services\n services<S extends Service[]>(\n services: S,\n ): EndpointFactory<\n [...S, ...TServices],\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher\n > {\n return new EndpointFactory<\n [...S, ...TServices],\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher\n >({\n defaultServices: [...services, ...this.defaultServices],\n basePath: this.basePath,\n defaultAuthorizeFn: this.defaultAuthorizeFn,\n defaultLogger: this.defaultLogger,\n defaultSessionExtractor: this.defaultSessionExtractor,\n defaultEventPublisher: this.defaultEventPublisher,\n });\n }\n\n logger<L extends Logger>(\n logger: L,\n ): EndpointFactory<TServices, TBasePath, L, TSession> {\n return new EndpointFactory<TServices, TBasePath, L, TSession>({\n defaultServices: this.defaultServices,\n basePath: this.basePath,\n defaultAuthorizeFn: this.defaultAuthorizeFn,\n defaultLogger: logger,\n defaultSessionExtractor: this.defaultSessionExtractor,\n } as EndpointFactoryOptions<TServices, TBasePath, L, TSession>);\n }\n\n publisher<\n T extends EventPublisher<any>,\n TServiceName extends string = string,\n >(\n publisher: Service<TServiceName, T>,\n ): EndpointFactory<TServices, TBasePath, TLogger, TSession, T> {\n return new EndpointFactory<TServices, TBasePath, TLogger, TSession, T>({\n defaultServices: this.defaultServices,\n basePath: this.basePath,\n defaultAuthorizeFn: this.defaultAuthorizeFn,\n defaultLogger: this.defaultLogger,\n defaultSessionExtractor: this.defaultSessionExtractor,\n defaultEventPublisher: publisher,\n });\n }\n\n session<T>(session: SessionFn<TServices, TLogger, T>) {\n return new EndpointFactory<TServices, TBasePath, TLogger, T>({\n defaultServices: this.defaultServices,\n basePath: this.basePath,\n // @ts-ignore\n defaultAuthorizeFn: this.defaultAuthorizeFn,\n defaultLogger: this.defaultLogger,\n defaultSessionExtractor: session,\n defaultEventPublisher: this.defaultEventPublisher as any,\n });\n }\n\n private createBuilder<TMethod extends HttpMethod, TPath extends string>(\n method: TMethod,\n path: TPath,\n ): EndpointBuilder<\n JoinPaths<TBasePath, TPath>,\n TMethod,\n {},\n TServices,\n TLogger,\n undefined,\n TSession,\n TEventPublisher\n > {\n const fullPath = EndpointFactory.joinPaths(path, this.basePath);\n const builder = new EndpointBuilder<\n JoinPaths<TBasePath, TPath>,\n TMethod,\n {},\n TServices,\n TLogger,\n undefined,\n TSession,\n TEventPublisher\n >(fullPath, method);\n\n if (this.defaultAuthorizeFn) {\n // @ts-ignore\n builder._authorize = this.defaultAuthorizeFn;\n }\n if (this.defaultServices.length) {\n builder._services = this.defaultServices as TServices;\n }\n\n if (this.defaultLogger) {\n builder._logger = this.defaultLogger as TLogger;\n }\n\n if (this.defaultSessionExtractor) {\n builder._getSession = this.defaultSessionExtractor as SessionFn<\n TServices,\n TLogger,\n TSession\n >;\n }\n\n if (this.defaultEventPublisher) {\n builder._setPublisher(this.defaultEventPublisher);\n }\n\n return builder as unknown as EndpointBuilder<\n JoinPaths<TBasePath, TPath>,\n TMethod,\n {},\n TServices,\n TLogger,\n undefined,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName\n >;\n }\n\n post<TPath extends string>(path: TPath) {\n return this.createBuilder('POST', path);\n }\n\n get<TPath extends string>(path: TPath) {\n return this.createBuilder('GET', path);\n }\n\n put<TPath extends string>(path: TPath) {\n return this.createBuilder('PUT', path);\n }\n\n delete<TPath extends string>(path: TPath) {\n return this.createBuilder('DELETE', path);\n }\n\n patch<TPath extends string>(path: TPath) {\n return this.createBuilder('PATCH', path);\n }\n\n options<TPath extends string>(path: TPath) {\n return this.createBuilder('OPTIONS', path);\n }\n}\n\nexport type RemoveTrailingSlash<T extends string> = T extends `${infer Rest}/`\n ? Rest extends ''\n ? T // Keep \"/\" as is\n : Rest\n : T;\n\nexport type JoinPaths<\n TBasePath extends string,\n TPath extends string,\n> = RemoveTrailingSlash<\n TBasePath extends ''\n ? TPath\n : TPath extends ''\n ? TBasePath\n : TBasePath extends '/'\n ? TPath extends `/${string}`\n ? TPath\n : `/${TPath}`\n : TBasePath extends `${infer Base}/`\n ? TPath extends `/${infer Rest}`\n ? `${Base}/${Rest}`\n : `${Base}/${TPath}`\n : TPath extends `/${infer Rest}`\n ? `${TBasePath}/${Rest}`\n : `${TBasePath}/${TPath}`\n>;\n\nexport interface EndpointFactoryOptions<\n TServices extends Service[] = [],\n TBasePath extends string = '',\n TLogger extends Logger = Logger,\n TSession = unknown,\n TEventPublisher extends EventPublisher<any> | undefined = undefined,\n TEventPublisherServiceName extends string = string,\n> {\n defaultServices?: TServices;\n basePath?: TBasePath;\n defaultAuthorizeFn?: AuthorizeFn<TServices, TLogger, TSession>;\n defaultLogger?: TLogger;\n defaultSessionExtractor?: SessionFn<TServices, TLogger, TSession>;\n defaultEventPublisher?: Service<TEventPublisherServiceName, TEventPublisher>;\n defaultEvents?: MappedEvent<TEventPublisher, undefined>[];\n}\n\nexport const e = new EndpointFactory();\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import { AuthorizeFn, SessionFn } from "./Endpoint-DCn53Vd8.mjs";
2
- import { EndpointBuilder } from "./EndpointBuilder-Bfnb2oJr.mjs";
1
+ import { AuthorizeFn, SessionFn } from "./Endpoint-DYUjJdEs.mjs";
2
+ import { EndpointBuilder } from "./EndpointBuilder-B2iScUND.mjs";
3
3
  import { Service } from "@geekmidas/services";
4
4
  import { EventPublisher, MappedEvent } from "@geekmidas/events";
5
5
  import { Logger } from "@geekmidas/logger";
@@ -49,4 +49,4 @@ interface EndpointFactoryOptions<TServices extends Service[] = [], TBasePath ext
49
49
  declare const e: EndpointFactory<[], "", Logger, unknown, undefined, string>;
50
50
  //#endregion
51
51
  export { EndpointFactory, EndpointFactoryOptions, JoinPaths, RemoveTrailingSlash, e };
52
- //# sourceMappingURL=EndpointFactory-CNtMXgIh.d.mts.map
52
+ //# sourceMappingURL=EndpointFactory-DZQpM-9K.d.mts.map
@@ -1,4 +1,4 @@
1
- import { Construct, ConstructType } from "./Construct-DIguIyw4.mjs";
1
+ import { Construct, ConstructType } from "./Construct-DdyYENBD.mjs";
2
2
  import { Service, ServiceRecord } from "@geekmidas/services";
3
3
  import { EventPublisher, MappedEvent } from "@geekmidas/events";
4
4
  import { Logger } from "@geekmidas/logger";
@@ -56,4 +56,4 @@ type FunctionContext<Input extends ComposableStandardSchema | undefined = undefi
56
56
  };
57
57
  //#endregion
58
58
  export { Function, FunctionContext, FunctionFactory, FunctionHandler };
59
- //# sourceMappingURL=Function-BsBxc2wA.d.mts.map
59
+ //# sourceMappingURL=Function-C98H68DW.d.mts.map
@@ -1,6 +1,6 @@
1
- import { ConstructType } from "./Construct-DIguIyw4.mjs";
2
- import { Function, FunctionHandler } from "./Function-BsBxc2wA.mjs";
3
- import { BaseFunctionBuilder } from "./BaseFunctionBuilder-BFPVGnKi.mjs";
1
+ import { ConstructType } from "./Construct-DdyYENBD.mjs";
2
+ import { Function, FunctionHandler } from "./Function-C98H68DW.mjs";
3
+ import { BaseFunctionBuilder } from "./BaseFunctionBuilder-Dda7AiID.mjs";
4
4
  import { Service } from "@geekmidas/services";
5
5
  import { EventPublisher } from "@geekmidas/events";
6
6
  import { Logger } from "@geekmidas/logger";
@@ -21,4 +21,4 @@ declare class FunctionBuilder<TInput extends ComposableStandardSchema, OutSchema
21
21
  }
22
22
  //#endregion
23
23
  export { FunctionBuilder };
24
- //# sourceMappingURL=FunctionBuilder-C-PfPN3r.d.mts.map
24
+ //# sourceMappingURL=FunctionBuilder-DBwR7jg7.d.mts.map
@@ -1,4 +1,4 @@
1
- import { Function, FunctionHandler } from "./Function-BsBxc2wA.mjs";
1
+ import { Function, FunctionHandler } from "./Function-C98H68DW.mjs";
2
2
  import { EnvironmentParser } from "@geekmidas/envkit";
3
3
  import { Service, ServiceDiscovery, ServiceRecord } from "@geekmidas/services";
4
4
  import { EventPublisher } from "@geekmidas/events";
@@ -21,4 +21,4 @@ declare abstract class FunctionExecutionWrapper<TInput extends ComposableStandar
21
21
  }
22
22
  //#endregion
23
23
  export { FunctionExecutionWrapper };
24
- //# sourceMappingURL=FunctionExecutionWrapper-DvglBBjE.d.mts.map
24
+ //# sourceMappingURL=FunctionExecutionWrapper-B0V7V8YS.d.mts.map
@@ -33,4 +33,4 @@ var FunctionExecutionWrapper = class {
33
33
 
34
34
  //#endregion
35
35
  export { FunctionExecutionWrapper };
36
- //# sourceMappingURL=FunctionExecutionWrapper-XGrSAAPD.mjs.map
36
+ //# sourceMappingURL=FunctionExecutionWrapper-CPzSbfaI.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"FunctionExecutionWrapper-XGrSAAPD.mjs","names":["envParser: EnvironmentParser<{}>","fn: Function<\n TInput,\n TServices,\n TLogger,\n TOutSchema,\n FunctionHandler<TInput, TServices, TLogger, TOutSchema>,\n TEventPublisher,\n TEventPublisherServiceName\n >","event: TEvent","response: InferStandardSchema<TOutSchema>","data: unknown","schema: T"],"sources":["../src/functions/FunctionExecutionWrapper.ts"],"sourcesContent":["import type { EnvironmentParser } from '@geekmidas/envkit';\nimport type { EventPublisher } from '@geekmidas/events';\nimport type { Logger } from '@geekmidas/logger';\nimport type {\n ComposableStandardSchema,\n InferComposableStandardSchema,\n InferStandardSchema,\n} from '@geekmidas/schema';\nimport {\n type Service,\n ServiceDiscovery,\n type ServiceRecord,\n} from '@geekmidas/services';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\nimport { publishEvents } from '../publisher';\nimport type { Function, FunctionHandler } from './Function';\nimport { FunctionBuilder } from './FunctionBuilder';\n\nexport abstract class FunctionExecutionWrapper<\n TInput extends ComposableStandardSchema | undefined = undefined,\n TOutSchema extends StandardSchemaV1 | undefined = undefined,\n TServices extends Service[] = [],\n TLogger extends Logger = Logger,\n TEventPublisher extends EventPublisher<any> | undefined = undefined,\n TEventPublisherServiceName extends string = string,\n> {\n constructor(\n protected envParser: EnvironmentParser<{}>,\n protected readonly fn: Function<\n TInput,\n TServices,\n TLogger,\n TOutSchema,\n FunctionHandler<TInput, TServices, TLogger, TOutSchema>,\n TEventPublisher,\n TEventPublisherServiceName\n >,\n ) {}\n\n protected _logger?: TLogger;\n\n get logger(): TLogger {\n return this._logger || this.fn.logger;\n }\n\n get serviceDiscovery(): ServiceDiscovery<ServiceRecord<TServices>, Logger> {\n const serviceDiscovery = ServiceDiscovery.getInstance<\n ServiceRecord<TServices>,\n TLogger\n >(this.logger, this.envParser);\n\n return serviceDiscovery;\n }\n\n getServices(): Promise<ServiceRecord<TServices>> {\n return this.serviceDiscovery.register(this.fn.services);\n }\n\n async getFunctionInput<TEvent>(\n event: TEvent,\n ): Promise<InferComposableStandardSchema<TInput>> {\n const parsedInput = await FunctionBuilder.parseComposableStandardSchema(\n event,\n this.fn.input,\n );\n\n return parsedInput as InferComposableStandardSchema<TInput>;\n }\n\n async publishEvents(response: InferStandardSchema<TOutSchema>) {\n await publishEvents(\n this.logger,\n this.serviceDiscovery,\n this.fn.events,\n response,\n this.fn.publisherService,\n );\n }\n\n async parseComposableStandardSchema<T extends ComposableStandardSchema>(\n data: unknown,\n schema: T,\n ): Promise<InferComposableStandardSchema<T>> {\n return FunctionBuilder.parseComposableStandardSchema(data, schema);\n }\n}\n"],"mappings":";;;;;AAkBA,IAAsB,2BAAtB,MAOE;CACA,YACYA,WACSC,IASnB;EAVU;EACS;CASjB;CAEJ,AAAU;CAEV,IAAI,SAAkB;AACpB,SAAO,KAAK,WAAW,KAAK,GAAG;CAChC;CAED,IAAI,mBAAuE;EACzE,MAAM,mBAAmB,iBAAiB,YAGxC,KAAK,QAAQ,KAAK,UAAU;AAE9B,SAAO;CACR;CAED,cAAiD;AAC/C,SAAO,KAAK,iBAAiB,SAAS,KAAK,GAAG,SAAS;CACxD;CAED,MAAM,iBACJC,OACgD;EAChD,MAAM,cAAc,MAAM,gBAAgB,8BACxC,OACA,KAAK,GAAG,MACT;AAED,SAAO;CACR;CAED,MAAM,cAAcC,UAA2C;AAC7D,QAAM,cACJ,KAAK,QACL,KAAK,kBACL,KAAK,GAAG,QACR,UACA,KAAK,GAAG,iBACT;CACF;CAED,MAAM,8BACJC,MACAC,QAC2C;AAC3C,SAAO,gBAAgB,8BAA8B,MAAM,OAAO;CACnE;AACF"}
1
+ {"version":3,"file":"FunctionExecutionWrapper-CPzSbfaI.mjs","names":["envParser: EnvironmentParser<{}>","fn: Function<\n TInput,\n TServices,\n TLogger,\n TOutSchema,\n FunctionHandler<TInput, TServices, TLogger, TOutSchema>,\n TEventPublisher,\n TEventPublisherServiceName\n >","event: TEvent","response: InferStandardSchema<TOutSchema>","data: unknown","schema: T"],"sources":["../src/functions/FunctionExecutionWrapper.ts"],"sourcesContent":["import type { EnvironmentParser } from '@geekmidas/envkit';\nimport type { EventPublisher } from '@geekmidas/events';\nimport type { Logger } from '@geekmidas/logger';\nimport type {\n ComposableStandardSchema,\n InferComposableStandardSchema,\n InferStandardSchema,\n} from '@geekmidas/schema';\nimport {\n type Service,\n ServiceDiscovery,\n type ServiceRecord,\n} from '@geekmidas/services';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\nimport { publishEvents } from '../publisher';\nimport type { Function, FunctionHandler } from './Function';\nimport { FunctionBuilder } from './FunctionBuilder';\n\nexport abstract class FunctionExecutionWrapper<\n TInput extends ComposableStandardSchema | undefined = undefined,\n TOutSchema extends StandardSchemaV1 | undefined = undefined,\n TServices extends Service[] = [],\n TLogger extends Logger = Logger,\n TEventPublisher extends EventPublisher<any> | undefined = undefined,\n TEventPublisherServiceName extends string = string,\n> {\n constructor(\n protected envParser: EnvironmentParser<{}>,\n protected readonly fn: Function<\n TInput,\n TServices,\n TLogger,\n TOutSchema,\n FunctionHandler<TInput, TServices, TLogger, TOutSchema>,\n TEventPublisher,\n TEventPublisherServiceName\n >,\n ) {}\n\n protected _logger?: TLogger;\n\n get logger(): TLogger {\n return this._logger || this.fn.logger;\n }\n\n get serviceDiscovery(): ServiceDiscovery<ServiceRecord<TServices>, Logger> {\n const serviceDiscovery = ServiceDiscovery.getInstance<\n ServiceRecord<TServices>,\n TLogger\n >(this.logger, this.envParser);\n\n return serviceDiscovery;\n }\n\n getServices(): Promise<ServiceRecord<TServices>> {\n return this.serviceDiscovery.register(this.fn.services);\n }\n\n async getFunctionInput<TEvent>(\n event: TEvent,\n ): Promise<InferComposableStandardSchema<TInput>> {\n const parsedInput = await FunctionBuilder.parseComposableStandardSchema(\n event,\n this.fn.input,\n );\n\n return parsedInput as InferComposableStandardSchema<TInput>;\n }\n\n async publishEvents(response: InferStandardSchema<TOutSchema>) {\n await publishEvents(\n this.logger,\n this.serviceDiscovery,\n this.fn.events,\n response,\n this.fn.publisherService,\n );\n }\n\n async parseComposableStandardSchema<T extends ComposableStandardSchema>(\n data: unknown,\n schema: T,\n ): Promise<InferComposableStandardSchema<T>> {\n return FunctionBuilder.parseComposableStandardSchema(data, schema);\n }\n}\n"],"mappings":";;;;;AAkBA,IAAsB,2BAAtB,MAOE;CACA,YACYA,WACSC,IASnB;EAVU;EACS;CASjB;CAEJ,AAAU;CAEV,IAAI,SAAkB;AACpB,SAAO,KAAK,WAAW,KAAK,GAAG;CAChC;CAED,IAAI,mBAAuE;EACzE,MAAM,mBAAmB,iBAAiB,YAGxC,KAAK,QAAQ,KAAK,UAAU;AAE9B,SAAO;CACR;CAED,cAAiD;AAC/C,SAAO,KAAK,iBAAiB,SAAS,KAAK,GAAG,SAAS;CACxD;CAED,MAAM,iBACJC,OACgD;EAChD,MAAM,cAAc,MAAM,gBAAgB,8BACxC,OACA,KAAK,GAAG,MACT;AAED,SAAO;CACR;CAED,MAAM,cAAcC,UAA2C;AAC7D,QAAM,cACJ,KAAK,QACL,KAAK,kBACL,KAAK,GAAG,QACR,UACA,KAAK,GAAG,iBACT;CACF;CAED,MAAM,8BACJC,MACAC,QAC2C;AAC3C,SAAO,gBAAgB,8BAA8B,MAAM,OAAO;CACnE;AACF"}
@@ -39,4 +39,4 @@ Object.defineProperty(exports, 'FunctionExecutionWrapper', {
39
39
  return FunctionExecutionWrapper;
40
40
  }
41
41
  });
42
- //# sourceMappingURL=FunctionExecutionWrapper-CElXEjPe.cjs.map
42
+ //# sourceMappingURL=FunctionExecutionWrapper-UzfHDM2R.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"FunctionExecutionWrapper-CElXEjPe.cjs","names":["envParser: EnvironmentParser<{}>","fn: Function<\n TInput,\n TServices,\n TLogger,\n TOutSchema,\n FunctionHandler<TInput, TServices, TLogger, TOutSchema>,\n TEventPublisher,\n TEventPublisherServiceName\n >","event: TEvent","response: InferStandardSchema<TOutSchema>","data: unknown","schema: T"],"sources":["../src/functions/FunctionExecutionWrapper.ts"],"sourcesContent":["import type { EnvironmentParser } from '@geekmidas/envkit';\nimport type { EventPublisher } from '@geekmidas/events';\nimport type { Logger } from '@geekmidas/logger';\nimport type {\n ComposableStandardSchema,\n InferComposableStandardSchema,\n InferStandardSchema,\n} from '@geekmidas/schema';\nimport {\n type Service,\n ServiceDiscovery,\n type ServiceRecord,\n} from '@geekmidas/services';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\nimport { publishEvents } from '../publisher';\nimport type { Function, FunctionHandler } from './Function';\nimport { FunctionBuilder } from './FunctionBuilder';\n\nexport abstract class FunctionExecutionWrapper<\n TInput extends ComposableStandardSchema | undefined = undefined,\n TOutSchema extends StandardSchemaV1 | undefined = undefined,\n TServices extends Service[] = [],\n TLogger extends Logger = Logger,\n TEventPublisher extends EventPublisher<any> | undefined = undefined,\n TEventPublisherServiceName extends string = string,\n> {\n constructor(\n protected envParser: EnvironmentParser<{}>,\n protected readonly fn: Function<\n TInput,\n TServices,\n TLogger,\n TOutSchema,\n FunctionHandler<TInput, TServices, TLogger, TOutSchema>,\n TEventPublisher,\n TEventPublisherServiceName\n >,\n ) {}\n\n protected _logger?: TLogger;\n\n get logger(): TLogger {\n return this._logger || this.fn.logger;\n }\n\n get serviceDiscovery(): ServiceDiscovery<ServiceRecord<TServices>, Logger> {\n const serviceDiscovery = ServiceDiscovery.getInstance<\n ServiceRecord<TServices>,\n TLogger\n >(this.logger, this.envParser);\n\n return serviceDiscovery;\n }\n\n getServices(): Promise<ServiceRecord<TServices>> {\n return this.serviceDiscovery.register(this.fn.services);\n }\n\n async getFunctionInput<TEvent>(\n event: TEvent,\n ): Promise<InferComposableStandardSchema<TInput>> {\n const parsedInput = await FunctionBuilder.parseComposableStandardSchema(\n event,\n this.fn.input,\n );\n\n return parsedInput as InferComposableStandardSchema<TInput>;\n }\n\n async publishEvents(response: InferStandardSchema<TOutSchema>) {\n await publishEvents(\n this.logger,\n this.serviceDiscovery,\n this.fn.events,\n response,\n this.fn.publisherService,\n );\n }\n\n async parseComposableStandardSchema<T extends ComposableStandardSchema>(\n data: unknown,\n schema: T,\n ): Promise<InferComposableStandardSchema<T>> {\n return FunctionBuilder.parseComposableStandardSchema(data, schema);\n }\n}\n"],"mappings":";;;;;;AAkBA,IAAsB,2BAAtB,MAOE;CACA,YACYA,WACSC,IASnB;EAVU;EACS;CASjB;CAEJ,AAAU;CAEV,IAAI,SAAkB;AACpB,SAAO,KAAK,WAAW,KAAK,GAAG;CAChC;CAED,IAAI,mBAAuE;EACzE,MAAM,mBAAmB,sCAAiB,YAGxC,KAAK,QAAQ,KAAK,UAAU;AAE9B,SAAO;CACR;CAED,cAAiD;AAC/C,SAAO,KAAK,iBAAiB,SAAS,KAAK,GAAG,SAAS;CACxD;CAED,MAAM,iBACJC,OACgD;EAChD,MAAM,cAAc,MAAM,wCAAgB,8BACxC,OACA,KAAK,GAAG,MACT;AAED,SAAO;CACR;CAED,MAAM,cAAcC,UAA2C;AAC7D,QAAM,gCACJ,KAAK,QACL,KAAK,kBACL,KAAK,GAAG,QACR,UACA,KAAK,GAAG,iBACT;CACF;CAED,MAAM,8BACJC,MACAC,QAC2C;AAC3C,SAAO,wCAAgB,8BAA8B,MAAM,OAAO;CACnE;AACF"}
1
+ {"version":3,"file":"FunctionExecutionWrapper-UzfHDM2R.cjs","names":["envParser: EnvironmentParser<{}>","fn: Function<\n TInput,\n TServices,\n TLogger,\n TOutSchema,\n FunctionHandler<TInput, TServices, TLogger, TOutSchema>,\n TEventPublisher,\n TEventPublisherServiceName\n >","event: TEvent","response: InferStandardSchema<TOutSchema>","data: unknown","schema: T"],"sources":["../src/functions/FunctionExecutionWrapper.ts"],"sourcesContent":["import type { EnvironmentParser } from '@geekmidas/envkit';\nimport type { EventPublisher } from '@geekmidas/events';\nimport type { Logger } from '@geekmidas/logger';\nimport type {\n ComposableStandardSchema,\n InferComposableStandardSchema,\n InferStandardSchema,\n} from '@geekmidas/schema';\nimport {\n type Service,\n ServiceDiscovery,\n type ServiceRecord,\n} from '@geekmidas/services';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\nimport { publishEvents } from '../publisher';\nimport type { Function, FunctionHandler } from './Function';\nimport { FunctionBuilder } from './FunctionBuilder';\n\nexport abstract class FunctionExecutionWrapper<\n TInput extends ComposableStandardSchema | undefined = undefined,\n TOutSchema extends StandardSchemaV1 | undefined = undefined,\n TServices extends Service[] = [],\n TLogger extends Logger = Logger,\n TEventPublisher extends EventPublisher<any> | undefined = undefined,\n TEventPublisherServiceName extends string = string,\n> {\n constructor(\n protected envParser: EnvironmentParser<{}>,\n protected readonly fn: Function<\n TInput,\n TServices,\n TLogger,\n TOutSchema,\n FunctionHandler<TInput, TServices, TLogger, TOutSchema>,\n TEventPublisher,\n TEventPublisherServiceName\n >,\n ) {}\n\n protected _logger?: TLogger;\n\n get logger(): TLogger {\n return this._logger || this.fn.logger;\n }\n\n get serviceDiscovery(): ServiceDiscovery<ServiceRecord<TServices>, Logger> {\n const serviceDiscovery = ServiceDiscovery.getInstance<\n ServiceRecord<TServices>,\n TLogger\n >(this.logger, this.envParser);\n\n return serviceDiscovery;\n }\n\n getServices(): Promise<ServiceRecord<TServices>> {\n return this.serviceDiscovery.register(this.fn.services);\n }\n\n async getFunctionInput<TEvent>(\n event: TEvent,\n ): Promise<InferComposableStandardSchema<TInput>> {\n const parsedInput = await FunctionBuilder.parseComposableStandardSchema(\n event,\n this.fn.input,\n );\n\n return parsedInput as InferComposableStandardSchema<TInput>;\n }\n\n async publishEvents(response: InferStandardSchema<TOutSchema>) {\n await publishEvents(\n this.logger,\n this.serviceDiscovery,\n this.fn.events,\n response,\n this.fn.publisherService,\n );\n }\n\n async parseComposableStandardSchema<T extends ComposableStandardSchema>(\n data: unknown,\n schema: T,\n ): Promise<InferComposableStandardSchema<T>> {\n return FunctionBuilder.parseComposableStandardSchema(data, schema);\n }\n}\n"],"mappings":";;;;;;AAkBA,IAAsB,2BAAtB,MAOE;CACA,YACYA,WACSC,IASnB;EAVU;EACS;CASjB;CAEJ,AAAU;CAEV,IAAI,SAAkB;AACpB,SAAO,KAAK,WAAW,KAAK,GAAG;CAChC;CAED,IAAI,mBAAuE;EACzE,MAAM,mBAAmB,sCAAiB,YAGxC,KAAK,QAAQ,KAAK,UAAU;AAE9B,SAAO;CACR;CAED,cAAiD;AAC/C,SAAO,KAAK,iBAAiB,SAAS,KAAK,GAAG,SAAS;CACxD;CAED,MAAM,iBACJC,OACgD;EAChD,MAAM,cAAc,MAAM,wCAAgB,8BACxC,OACA,KAAK,GAAG,MACT;AAED,SAAO;CACR;CAED,MAAM,cAAcC,UAA2C;AAC7D,QAAM,gCACJ,KAAK,QACL,KAAK,kBACL,KAAK,GAAG,QACR,UACA,KAAK,GAAG,iBACT;CACF;CAED,MAAM,8BACJC,MACAC,QAC2C;AAC3C,SAAO,wCAAgB,8BAA8B,MAAM,OAAO;CACnE;AACF"}
@@ -1,12 +1,12 @@
1
- import { HttpMethod } from "./types-DBKNYvsW.mjs";
2
- import { Endpoint, EndpointSchemas } from "./Endpoint-DCn53Vd8.mjs";
1
+ import { HttpMethod } from "./types-CVq20-fE.mjs";
2
+ import { Endpoint, EndpointSchemas } from "./Endpoint-DYUjJdEs.mjs";
3
3
  import { EnvironmentParser } from "@geekmidas/envkit";
4
4
  import { Service, ServiceDiscovery, ServiceRecord } from "@geekmidas/services";
5
5
  import { Context, Hono } from "hono";
6
6
  import { EventPublisher } from "@geekmidas/events";
7
7
  import { Logger } from "@geekmidas/logger";
8
8
  import { StandardSchemaV1 } from "@standard-schema/spec";
9
- import * as hono_types5 from "hono/types";
9
+ import * as hono_types7 from "hono/types";
10
10
 
11
11
  //#region src/endpoints/HonoEndpointAdaptor.d.ts
12
12
  interface HonoEndpointOptions {
@@ -31,11 +31,11 @@ declare class HonoEndpoint<TRoute extends string, TMethod extends HttpMethod, TI
31
31
  static validate<T extends StandardSchemaV1>(c: Context<any, string, {}>, data: unknown, schema?: T): Promise<unknown>;
32
32
  addRoute(serviceDiscovery: ServiceDiscovery<ServiceRecord<TServices>, TLogger>, app: Hono): void;
33
33
  static applyEventMiddleware(app: Hono, serviceDiscovery: ServiceDiscovery<any, any>): void;
34
- static fromRoutes<TLogger extends Logger, TServices extends Service[]>(routes: string[], envParser: EnvironmentParser<{}>, app: Hono<hono_types5.BlankEnv, hono_types5.BlankSchema, "/"> | undefined, logger: TLogger, cwd?: string, options?: HonoEndpointOptions): Promise<Hono>;
34
+ static fromRoutes<TLogger extends Logger, TServices extends Service[]>(routes: string[], envParser: EnvironmentParser<{}>, app: Hono<hono_types7.BlankEnv, hono_types7.BlankSchema, "/"> | undefined, logger: TLogger, cwd?: string, options?: HonoEndpointOptions): Promise<Hono>;
35
35
  static addRoutes<TServices extends Service[] = [], TLogger extends Logger = Logger>(endpoints: Endpoint<string, HttpMethod, any, any, TServices, TLogger>[], serviceDiscovery: ServiceDiscovery<ServiceRecord<TServices>, TLogger>, app: Hono, options?: HonoEndpointOptions): void;
36
36
  static addRoute<TRoute extends string, TMethod extends HttpMethod, TInput extends EndpointSchemas = {}, TOutSchema extends StandardSchemaV1 | undefined = undefined, TServices extends Service[] = [], TLogger extends Logger = Logger, TSession = unknown, TEventPublisher extends EventPublisher<any> | undefined = undefined>(endpoint: Endpoint<TRoute, TMethod, TInput, TOutSchema, TServices, TLogger, TSession, TEventPublisher>, serviceDiscovery: ServiceDiscovery<ServiceRecord<TServices>, TLogger>, app: Hono): void;
37
37
  static addDocsRoute<TServices extends Service[] = [], TLogger extends Logger = Logger>(endpoints: Endpoint<string, HttpMethod, any, any, TServices, TLogger>[], app: Hono, docsPath: string, openApiOptions?: HonoEndpointOptions['openApiOptions']): void;
38
38
  }
39
39
  //#endregion
40
40
  export { HonoEndpoint, HonoEndpointOptions };
41
- //# sourceMappingURL=HonoEndpointAdaptor-B0IO1zj2.d.mts.map
41
+ //# sourceMappingURL=HonoEndpointAdaptor-01cH100U.d.mts.map
@@ -1,8 +1,8 @@
1
1
  const require_chunk = require('./chunk-CUT6urMc.cjs');
2
2
  const require_publisher = require('./publisher-lFQleddL.cjs');
3
- const require_Endpoint = require('./Endpoint-BaHC9y4Z.cjs');
4
- const require_helpers = require('./helpers-BeGM4pP_.cjs');
5
- const require_parseHonoQuery = require('./parseHonoQuery-DopC24vB.cjs');
3
+ const require_Endpoint = require('./Endpoint-D1nnEsBU.cjs');
4
+ const require_helpers = require('./helpers-CjvCSIF5.cjs');
5
+ const require_parseHonoQuery = require('./parseHonoQuery-BiPp8bEJ.cjs');
6
6
  const __geekmidas_errors = require_chunk.__toESM(require("@geekmidas/errors"));
7
7
  const __geekmidas_services = require_chunk.__toESM(require("@geekmidas/services"));
8
8
  const __geekmidas_rate_limit = require_chunk.__toESM(require("@geekmidas/rate-limit"));
@@ -151,4 +151,4 @@ Object.defineProperty(exports, 'HonoEndpoint', {
151
151
  return HonoEndpoint;
152
152
  }
153
153
  });
154
- //# sourceMappingURL=HonoEndpointAdaptor-B4snrp7v.cjs.map
154
+ //# sourceMappingURL=HonoEndpointAdaptor-6LERutxi.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"HonoEndpointAdaptor-B4snrp7v.cjs","names":["endpoint: Endpoint<\n TRoute,\n TMethod,\n TInput,\n TOutSchema,\n TServices,\n TLogger,\n TSession,\n TEventPublisher\n >","c: Context<any, string, {}>","data: unknown","schema?: T","serviceDiscovery: ServiceDiscovery<ServiceRecord<TServices>, TLogger>","app: Hono","serviceDiscovery: ServiceDiscovery<any, any>","routes: string[]","envParser: EnvironmentParser<{}>","Hono","logger: TLogger","options?: HonoEndpointOptions","endpoints: Endpoint<string, HttpMethod, any, any, TServices, TLogger>[]","validationError: any","e: any","docsPath: string","openApiOptions?: HonoEndpointOptions['openApiOptions']"],"sources":["../src/endpoints/HonoEndpointAdaptor.ts"],"sourcesContent":["import type { EnvironmentParser } from '@geekmidas/envkit';\nimport type { EventPublisher } from '@geekmidas/events';\nimport type { Logger } from '@geekmidas/logger';\nimport { checkRateLimit, getRateLimitHeaders } from '@geekmidas/rate-limit';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\nimport { type Context, Hono } from 'hono';\nimport { validator } from 'hono/validator';\nimport type { HttpMethod, LowerHttpMethod } from '../types';\nimport {\n Endpoint,\n type EndpointContext,\n type EndpointSchemas,\n} from './Endpoint';\nimport { getEndpointsFromRoutes } from './helpers';\nimport { parseHonoQuery } from './parseHonoQuery';\n\nimport { wrapError } from '@geekmidas/errors';\nimport {\n type Service,\n ServiceDiscovery,\n type ServiceRecord,\n} from '@geekmidas/services';\nimport type { ContentfulStatusCode } from 'hono/utils/http-status';\nimport { publishConstructEvents } from '../publisher';\n\nexport interface HonoEndpointOptions {\n /**\n * Path where OpenAPI documentation will be served.\n * Set to false to disable docs route.\n * @default '/docs'\n */\n docsPath?: string | false;\n /**\n * OpenAPI schema options\n */\n openApiOptions?: {\n title?: string;\n version?: string;\n description?: string;\n };\n}\n\nexport class HonoEndpoint<\n TRoute extends string,\n TMethod extends HttpMethod,\n TInput extends EndpointSchemas = {},\n TOutSchema extends StandardSchemaV1 | undefined = undefined,\n TServices extends Service[] = [],\n TLogger extends Logger = Logger,\n TSession = unknown,\n TEventPublisher extends EventPublisher<any> | undefined = undefined,\n> {\n constructor(\n private readonly endpoint: Endpoint<\n TRoute,\n TMethod,\n TInput,\n TOutSchema,\n TServices,\n TLogger,\n TSession,\n TEventPublisher\n >,\n ) {}\n\n static async validate<T extends StandardSchemaV1>(\n c: Context<any, string, {}>,\n data: unknown,\n schema?: T,\n ) {\n if (!schema) {\n return undefined;\n }\n\n const parsed = await Endpoint.validate(schema, data);\n\n if (parsed.issues) {\n return c.json(parsed.issues, 422);\n }\n\n return parsed.value;\n }\n addRoute(\n serviceDiscovery: ServiceDiscovery<ServiceRecord<TServices>, TLogger>,\n app: Hono,\n ): void {\n HonoEndpoint.addRoute(this.endpoint, serviceDiscovery, app);\n }\n\n static applyEventMiddleware(\n app: Hono,\n serviceDiscovery: ServiceDiscovery<any, any>,\n ) {\n app.use(async (c, next) => {\n await next();\n // @ts-ignore\n const endpoint = c.get('__endpoint') as Endpoint<\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any\n >;\n // @ts-ignore\n const response = c.get('__response') as InferStandardSchema<TOutSchema>;\n // @ts-ignore\n const logger = c.get('__logger') as Logger;\n\n if (Endpoint.isSuccessStatus(c.res.status) && endpoint) {\n await publishConstructEvents<any, any>(\n endpoint,\n response,\n serviceDiscovery,\n logger,\n );\n }\n });\n }\n\n static async fromRoutes<TLogger extends Logger, TServices extends Service[]>(\n routes: string[],\n envParser: EnvironmentParser<{}>,\n app = new Hono(),\n logger: TLogger,\n cwd = process.cwd(),\n options?: HonoEndpointOptions,\n ): Promise<Hono> {\n const endpoints = await getEndpointsFromRoutes<TServices>(routes, cwd);\n const serviceDiscovery = ServiceDiscovery.getInstance<\n ServiceRecord<TServices>,\n TLogger\n >(logger, envParser);\n\n HonoEndpoint.addRoutes(endpoints, serviceDiscovery, app, options);\n\n return app;\n }\n\n static addRoutes<\n TServices extends Service[] = [],\n TLogger extends Logger = Logger,\n >(\n endpoints: Endpoint<string, HttpMethod, any, any, TServices, TLogger>[],\n serviceDiscovery: ServiceDiscovery<ServiceRecord<TServices>, TLogger>,\n app: Hono,\n options?: HonoEndpointOptions,\n ): void {\n // Add docs route if not disabled\n const docsPath =\n options?.docsPath !== false ? options?.docsPath || '/docs' : null;\n if (docsPath) {\n HonoEndpoint.addDocsRoute(\n endpoints,\n app,\n docsPath,\n options?.openApiOptions,\n );\n }\n\n // Sort endpoints to ensure static routes come before dynamic ones\n const sortedEndpoints = endpoints.sort((a, b) => {\n const aSegments = a.route.split('/');\n const bSegments = b.route.split('/');\n\n // Compare each segment\n for (let i = 0; i < Math.max(aSegments.length, bSegments.length); i++) {\n const aSegment = aSegments[i] || '';\n const bSegment = bSegments[i] || '';\n\n // If one is dynamic and the other is not, static comes first\n const aIsDynamic = aSegment.startsWith(':');\n const bIsDynamic = bSegment.startsWith(':');\n\n if (!aIsDynamic && bIsDynamic) return -1;\n if (aIsDynamic && !bIsDynamic) return 1;\n\n // If both are the same type, compare alphabetically\n if (aSegment !== bSegment) {\n return aSegment.localeCompare(bSegment);\n }\n }\n\n return 0;\n });\n HonoEndpoint.applyEventMiddleware(app, serviceDiscovery);\n for (const endpoint of sortedEndpoints) {\n HonoEndpoint.addRoute(endpoint, serviceDiscovery, app);\n }\n }\n\n static addRoute<\n TRoute extends string,\n TMethod extends HttpMethod,\n TInput extends EndpointSchemas = {},\n TOutSchema extends StandardSchemaV1 | undefined = undefined,\n TServices extends Service[] = [],\n TLogger extends Logger = Logger,\n TSession = unknown,\n TEventPublisher extends EventPublisher<any> | undefined = undefined,\n >(\n endpoint: Endpoint<\n TRoute,\n TMethod,\n TInput,\n TOutSchema,\n TServices,\n TLogger,\n TSession,\n TEventPublisher\n >,\n serviceDiscovery: ServiceDiscovery<ServiceRecord<TServices>, TLogger>,\n app: Hono,\n ): void {\n const { route } = endpoint;\n const method = endpoint.method.toLowerCase() as LowerHttpMethod<TMethod>;\n\n app[method](\n route,\n validator('json', (value, c) =>\n HonoEndpoint.validate(c, value, endpoint.input?.body),\n ),\n validator('query', (_, c) => {\n const parsedQuery = parseHonoQuery(c);\n return HonoEndpoint.validate(c, parsedQuery, endpoint.input?.query);\n }),\n validator('param', (params, c) =>\n HonoEndpoint.validate(c, params, endpoint.input?.params),\n ),\n async (c) => {\n const logger = endpoint.logger.child({\n endpoint: endpoint.fullPath,\n route: endpoint.route,\n host: c.header('host'),\n method: endpoint.method,\n path: c.req.path,\n }) as TLogger;\n\n try {\n const headerValues = c.req.header();\n\n const header = Endpoint.createHeaders(headerValues);\n\n const services = await serviceDiscovery.register(endpoint.services);\n\n const session = await endpoint.getSession({\n services,\n logger,\n header,\n });\n\n const isAuthorized = await endpoint.authorize({\n header,\n services,\n logger,\n session,\n });\n\n if (!isAuthorized) {\n logger.warn('Unauthorized access attempt');\n return c.json({ error: 'Unauthorized' }, 401);\n }\n\n // Check rate limit if configured\n if (endpoint.rateLimit) {\n const rateLimitInfo = await checkRateLimit(endpoint.rateLimit, {\n header,\n services,\n logger,\n session,\n path: c.req.path,\n method: endpoint.method,\n });\n\n // Set rate limit headers\n const rateLimitHeaders = getRateLimitHeaders(\n rateLimitInfo,\n endpoint.rateLimit,\n );\n for (const [key, value] of Object.entries(rateLimitHeaders)) {\n if (value) {\n c.header(key, value);\n }\n }\n }\n\n const response = await endpoint.handler({\n services,\n logger,\n body: c.req.valid('json'),\n query: c.req.valid('query'),\n params: c.req.valid('param'),\n session,\n header: Endpoint.createHeaders(headerValues),\n } as unknown as EndpointContext<\n TInput,\n TServices,\n TLogger,\n TSession\n >);\n\n // Publish events if configured\n\n // Validate output if schema is defined\n\n try {\n const status = endpoint.status as ContentfulStatusCode;\n const output = endpoint.outputSchema\n ? await endpoint.parseOutput(response)\n : ({} as any);\n // @ts-ignore\n c.set('__response', output);\n // @ts-ignore\n c.set('__endpoint', endpoint);\n // @ts-ignore\n c.set('__logger', logger);\n\n return c.json(output, status);\n } catch (validationError: any) {\n logger.error(validationError, 'Output validation failed');\n const error = wrapError(\n validationError,\n 422,\n 'Response validation failed',\n );\n return c.json(error, error.statusCode as ContentfulStatusCode);\n }\n } catch (e: any) {\n logger.error(e, 'Error processing endpoint request');\n const error = wrapError(e, 500, 'Internal Server Error');\n return c.json(error, error.statusCode as ContentfulStatusCode);\n }\n },\n );\n }\n\n static addDocsRoute<\n TServices extends Service[] = [],\n TLogger extends Logger = Logger,\n >(\n endpoints: Endpoint<string, HttpMethod, any, any, TServices, TLogger>[],\n app: Hono,\n docsPath: string,\n openApiOptions?: HonoEndpointOptions['openApiOptions'],\n ): void {\n app.get(docsPath, async (c) => {\n try {\n const openApiSchema = await Endpoint.buildOpenApiSchema(\n endpoints,\n openApiOptions,\n );\n\n return c.json(openApiSchema);\n } catch (error) {\n console.error('Error generating OpenAPI schema:', error);\n return c.json(\n { error: 'Failed to generate OpenAPI documentation' },\n 500,\n );\n }\n });\n }\n}\n"],"mappings":";;;;;;;;;;;;AA0CA,IAAa,eAAb,MAAa,aASX;CACA,YACmBA,UAUjB;EAViB;CAUf;CAEJ,aAAa,SACXC,GACAC,MACAC,QACA;AACA,OAAK,OACH;EAGF,MAAM,SAAS,MAAM,0BAAS,SAAS,QAAQ,KAAK;AAEpD,MAAI,OAAO,OACT,QAAO,EAAE,KAAK,OAAO,QAAQ,IAAI;AAGnC,SAAO,OAAO;CACf;CACD,SACEC,kBACAC,KACM;AACN,eAAa,SAAS,KAAK,UAAU,kBAAkB,IAAI;CAC5D;CAED,OAAO,qBACLA,KACAC,kBACA;AACA,MAAI,IAAI,OAAO,GAAG,SAAS;AACzB,SAAM,MAAM;GAEZ,MAAM,WAAW,EAAE,IAAI,aAAa;GAWpC,MAAM,WAAW,EAAE,IAAI,aAAa;GAEpC,MAAM,SAAS,EAAE,IAAI,WAAW;AAEhC,OAAI,0BAAS,gBAAgB,EAAE,IAAI,OAAO,IAAI,SAC5C,OAAM,yCACJ,UACA,UACA,kBACA,OACD;EAEJ,EAAC;CACH;CAED,aAAa,WACXC,QACAC,WACA,MAAM,IAAIC,aACVC,QACA,MAAM,QAAQ,KAAK,EACnBC,SACe;EACf,MAAM,YAAY,MAAM,uCAAkC,QAAQ,IAAI;EACtE,MAAM,mBAAmB,sCAAiB,YAGxC,QAAQ,UAAU;AAEpB,eAAa,UAAU,WAAW,kBAAkB,KAAK,QAAQ;AAEjE,SAAO;CACR;CAED,OAAO,UAILC,WACAR,kBACAC,KACAM,SACM;EAEN,MAAM,WACJ,SAAS,aAAa,QAAQ,SAAS,YAAY,UAAU;AAC/D,MAAI,SACF,cAAa,aACX,WACA,KACA,UACA,SAAS,eACV;EAIH,MAAM,kBAAkB,UAAU,KAAK,CAAC,GAAG,MAAM;GAC/C,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;IACrE,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,SACf,QAAO,SAAS,cAAc,SAAS;GAE1C;AAED,UAAO;EACR,EAAC;AACF,eAAa,qBAAqB,KAAK,iBAAiB;AACxD,OAAK,MAAM,YAAY,gBACrB,cAAa,SAAS,UAAU,kBAAkB,IAAI;CAEzD;CAED,OAAO,SAULX,UAUAI,kBACAC,KACM;EACN,MAAM,EAAE,OAAO,GAAG;EAClB,MAAM,SAAS,SAAS,OAAO,aAAa;AAE5C,MAAI,QACF,OACA,8BAAU,QAAQ,CAAC,OAAO,MACxB,aAAa,SAAS,GAAG,OAAO,SAAS,OAAO,KAAK,CACtD,EACD,8BAAU,SAAS,CAAC,GAAG,MAAM;GAC3B,MAAM,cAAc,sCAAe,EAAE;AACrC,UAAO,aAAa,SAAS,GAAG,aAAa,SAAS,OAAO,MAAM;EACpE,EAAC,EACF,8BAAU,SAAS,CAAC,QAAQ,MAC1B,aAAa,SAAS,GAAG,QAAQ,SAAS,OAAO,OAAO,CACzD,EACD,OAAO,MAAM;GACX,MAAM,SAAS,SAAS,OAAO,MAAM;IACnC,UAAU,SAAS;IACnB,OAAO,SAAS;IAChB,MAAM,EAAE,OAAO,OAAO;IACtB,QAAQ,SAAS;IACjB,MAAM,EAAE,IAAI;GACb,EAAC;AAEF,OAAI;IACF,MAAM,eAAe,EAAE,IAAI,QAAQ;IAEnC,MAAM,SAAS,0BAAS,cAAc,aAAa;IAEnD,MAAM,WAAW,MAAM,iBAAiB,SAAS,SAAS,SAAS;IAEnE,MAAM,UAAU,MAAM,SAAS,WAAW;KACxC;KACA;KACA;IACD,EAAC;IAEF,MAAM,eAAe,MAAM,SAAS,UAAU;KAC5C;KACA;KACA;KACA;IACD,EAAC;AAEF,SAAK,cAAc;AACjB,YAAO,KAAK,8BAA8B;AAC1C,YAAO,EAAE,KAAK,EAAE,OAAO,eAAgB,GAAE,IAAI;IAC9C;AAGD,QAAI,SAAS,WAAW;KACtB,MAAM,gBAAgB,MAAM,2CAAe,SAAS,WAAW;MAC7D;MACA;MACA;MACA;MACA,MAAM,EAAE,IAAI;MACZ,QAAQ,SAAS;KAClB,EAAC;KAGF,MAAM,mBAAmB,gDACvB,eACA,SAAS,UACV;AACD,UAAK,MAAM,CAAC,KAAK,MAAM,IAAI,OAAO,QAAQ,iBAAiB,CACzD,KAAI,MACF,GAAE,OAAO,KAAK,MAAM;IAGzB;IAED,MAAM,WAAW,MAAM,SAAS,QAAQ;KACtC;KACA;KACA,MAAM,EAAE,IAAI,MAAM,OAAO;KACzB,OAAO,EAAE,IAAI,MAAM,QAAQ;KAC3B,QAAQ,EAAE,IAAI,MAAM,QAAQ;KAC5B;KACA,QAAQ,0BAAS,cAAc,aAAa;IAC7C,EAKC;AAMF,QAAI;KACF,MAAM,SAAS,SAAS;KACxB,MAAM,SAAS,SAAS,eACpB,MAAM,SAAS,YAAY,SAAS,GACnC,CAAE;AAEP,OAAE,IAAI,cAAc,OAAO;AAE3B,OAAE,IAAI,cAAc,SAAS;AAE7B,OAAE,IAAI,YAAY,OAAO;AAEzB,YAAO,EAAE,KAAK,QAAQ,OAAO;IAC9B,SAAQQ,iBAAsB;AAC7B,YAAO,MAAM,iBAAiB,2BAA2B;KACzD,MAAM,QAAQ,kCACZ,iBACA,KACA,6BACD;AACD,YAAO,EAAE,KAAK,OAAO,MAAM,WAAmC;IAC/D;GACF,SAAQC,GAAQ;AACf,WAAO,MAAM,GAAG,oCAAoC;IACpD,MAAM,QAAQ,kCAAU,GAAG,KAAK,wBAAwB;AACxD,WAAO,EAAE,KAAK,OAAO,MAAM,WAAmC;GAC/D;EACF,EACF;CACF;CAED,OAAO,aAILF,WACAP,KACAU,UACAC,gBACM;AACN,MAAI,IAAI,UAAU,OAAO,MAAM;AAC7B,OAAI;IACF,MAAM,gBAAgB,MAAM,0BAAS,mBACnC,WACA,eACD;AAED,WAAO,EAAE,KAAK,cAAc;GAC7B,SAAQ,OAAO;AACd,YAAQ,MAAM,oCAAoC,MAAM;AACxD,WAAO,EAAE,KACP,EAAE,OAAO,2CAA4C,GACrD,IACD;GACF;EACF,EAAC;CACH;AACF"}
1
+ {"version":3,"file":"HonoEndpointAdaptor-6LERutxi.cjs","names":["endpoint: Endpoint<\n TRoute,\n TMethod,\n TInput,\n TOutSchema,\n TServices,\n TLogger,\n TSession,\n TEventPublisher\n >","c: Context<any, string, {}>","data: unknown","schema?: T","serviceDiscovery: ServiceDiscovery<ServiceRecord<TServices>, TLogger>","app: Hono","serviceDiscovery: ServiceDiscovery<any, any>","routes: string[]","envParser: EnvironmentParser<{}>","Hono","logger: TLogger","options?: HonoEndpointOptions","endpoints: Endpoint<string, HttpMethod, any, any, TServices, TLogger>[]","validationError: any","e: any","docsPath: string","openApiOptions?: HonoEndpointOptions['openApiOptions']"],"sources":["../src/endpoints/HonoEndpointAdaptor.ts"],"sourcesContent":["import type { EnvironmentParser } from '@geekmidas/envkit';\nimport type { EventPublisher } from '@geekmidas/events';\nimport type { Logger } from '@geekmidas/logger';\nimport { checkRateLimit, getRateLimitHeaders } from '@geekmidas/rate-limit';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\nimport { type Context, Hono } from 'hono';\nimport { validator } from 'hono/validator';\nimport type { HttpMethod, LowerHttpMethod } from '../types';\nimport {\n Endpoint,\n type EndpointContext,\n type EndpointSchemas,\n} from './Endpoint';\nimport { getEndpointsFromRoutes } from './helpers';\nimport { parseHonoQuery } from './parseHonoQuery';\n\nimport { wrapError } from '@geekmidas/errors';\nimport {\n type Service,\n ServiceDiscovery,\n type ServiceRecord,\n} from '@geekmidas/services';\nimport type { ContentfulStatusCode } from 'hono/utils/http-status';\nimport { publishConstructEvents } from '../publisher';\n\nexport interface HonoEndpointOptions {\n /**\n * Path where OpenAPI documentation will be served.\n * Set to false to disable docs route.\n * @default '/docs'\n */\n docsPath?: string | false;\n /**\n * OpenAPI schema options\n */\n openApiOptions?: {\n title?: string;\n version?: string;\n description?: string;\n };\n}\n\nexport class HonoEndpoint<\n TRoute extends string,\n TMethod extends HttpMethod,\n TInput extends EndpointSchemas = {},\n TOutSchema extends StandardSchemaV1 | undefined = undefined,\n TServices extends Service[] = [],\n TLogger extends Logger = Logger,\n TSession = unknown,\n TEventPublisher extends EventPublisher<any> | undefined = undefined,\n> {\n constructor(\n private readonly endpoint: Endpoint<\n TRoute,\n TMethod,\n TInput,\n TOutSchema,\n TServices,\n TLogger,\n TSession,\n TEventPublisher\n >,\n ) {}\n\n static async validate<T extends StandardSchemaV1>(\n c: Context<any, string, {}>,\n data: unknown,\n schema?: T,\n ) {\n if (!schema) {\n return undefined;\n }\n\n const parsed = await Endpoint.validate(schema, data);\n\n if (parsed.issues) {\n return c.json(parsed.issues, 422);\n }\n\n return parsed.value;\n }\n addRoute(\n serviceDiscovery: ServiceDiscovery<ServiceRecord<TServices>, TLogger>,\n app: Hono,\n ): void {\n HonoEndpoint.addRoute(this.endpoint, serviceDiscovery, app);\n }\n\n static applyEventMiddleware(\n app: Hono,\n serviceDiscovery: ServiceDiscovery<any, any>,\n ) {\n app.use(async (c, next) => {\n await next();\n // @ts-ignore\n const endpoint = c.get('__endpoint') as Endpoint<\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any\n >;\n // @ts-ignore\n const response = c.get('__response') as InferStandardSchema<TOutSchema>;\n // @ts-ignore\n const logger = c.get('__logger') as Logger;\n\n if (Endpoint.isSuccessStatus(c.res.status) && endpoint) {\n await publishConstructEvents<any, any>(\n endpoint,\n response,\n serviceDiscovery,\n logger,\n );\n }\n });\n }\n\n static async fromRoutes<TLogger extends Logger, TServices extends Service[]>(\n routes: string[],\n envParser: EnvironmentParser<{}>,\n app = new Hono(),\n logger: TLogger,\n cwd = process.cwd(),\n options?: HonoEndpointOptions,\n ): Promise<Hono> {\n const endpoints = await getEndpointsFromRoutes<TServices>(routes, cwd);\n const serviceDiscovery = ServiceDiscovery.getInstance<\n ServiceRecord<TServices>,\n TLogger\n >(logger, envParser);\n\n HonoEndpoint.addRoutes(endpoints, serviceDiscovery, app, options);\n\n return app;\n }\n\n static addRoutes<\n TServices extends Service[] = [],\n TLogger extends Logger = Logger,\n >(\n endpoints: Endpoint<string, HttpMethod, any, any, TServices, TLogger>[],\n serviceDiscovery: ServiceDiscovery<ServiceRecord<TServices>, TLogger>,\n app: Hono,\n options?: HonoEndpointOptions,\n ): void {\n // Add docs route if not disabled\n const docsPath =\n options?.docsPath !== false ? options?.docsPath || '/docs' : null;\n if (docsPath) {\n HonoEndpoint.addDocsRoute(\n endpoints,\n app,\n docsPath,\n options?.openApiOptions,\n );\n }\n\n // Sort endpoints to ensure static routes come before dynamic ones\n const sortedEndpoints = endpoints.sort((a, b) => {\n const aSegments = a.route.split('/');\n const bSegments = b.route.split('/');\n\n // Compare each segment\n for (let i = 0; i < Math.max(aSegments.length, bSegments.length); i++) {\n const aSegment = aSegments[i] || '';\n const bSegment = bSegments[i] || '';\n\n // If one is dynamic and the other is not, static comes first\n const aIsDynamic = aSegment.startsWith(':');\n const bIsDynamic = bSegment.startsWith(':');\n\n if (!aIsDynamic && bIsDynamic) return -1;\n if (aIsDynamic && !bIsDynamic) return 1;\n\n // If both are the same type, compare alphabetically\n if (aSegment !== bSegment) {\n return aSegment.localeCompare(bSegment);\n }\n }\n\n return 0;\n });\n HonoEndpoint.applyEventMiddleware(app, serviceDiscovery);\n for (const endpoint of sortedEndpoints) {\n HonoEndpoint.addRoute(endpoint, serviceDiscovery, app);\n }\n }\n\n static addRoute<\n TRoute extends string,\n TMethod extends HttpMethod,\n TInput extends EndpointSchemas = {},\n TOutSchema extends StandardSchemaV1 | undefined = undefined,\n TServices extends Service[] = [],\n TLogger extends Logger = Logger,\n TSession = unknown,\n TEventPublisher extends EventPublisher<any> | undefined = undefined,\n >(\n endpoint: Endpoint<\n TRoute,\n TMethod,\n TInput,\n TOutSchema,\n TServices,\n TLogger,\n TSession,\n TEventPublisher\n >,\n serviceDiscovery: ServiceDiscovery<ServiceRecord<TServices>, TLogger>,\n app: Hono,\n ): void {\n const { route } = endpoint;\n const method = endpoint.method.toLowerCase() as LowerHttpMethod<TMethod>;\n\n app[method](\n route,\n validator('json', (value, c) =>\n HonoEndpoint.validate(c, value, endpoint.input?.body),\n ),\n validator('query', (_, c) => {\n const parsedQuery = parseHonoQuery(c);\n return HonoEndpoint.validate(c, parsedQuery, endpoint.input?.query);\n }),\n validator('param', (params, c) =>\n HonoEndpoint.validate(c, params, endpoint.input?.params),\n ),\n async (c) => {\n const logger = endpoint.logger.child({\n endpoint: endpoint.fullPath,\n route: endpoint.route,\n host: c.header('host'),\n method: endpoint.method,\n path: c.req.path,\n }) as TLogger;\n\n try {\n const headerValues = c.req.header();\n\n const header = Endpoint.createHeaders(headerValues);\n\n const services = await serviceDiscovery.register(endpoint.services);\n\n const session = await endpoint.getSession({\n services,\n logger,\n header,\n });\n\n const isAuthorized = await endpoint.authorize({\n header,\n services,\n logger,\n session,\n });\n\n if (!isAuthorized) {\n logger.warn('Unauthorized access attempt');\n return c.json({ error: 'Unauthorized' }, 401);\n }\n\n // Check rate limit if configured\n if (endpoint.rateLimit) {\n const rateLimitInfo = await checkRateLimit(endpoint.rateLimit, {\n header,\n services,\n logger,\n session,\n path: c.req.path,\n method: endpoint.method,\n });\n\n // Set rate limit headers\n const rateLimitHeaders = getRateLimitHeaders(\n rateLimitInfo,\n endpoint.rateLimit,\n );\n for (const [key, value] of Object.entries(rateLimitHeaders)) {\n if (value) {\n c.header(key, value);\n }\n }\n }\n\n const response = await endpoint.handler({\n services,\n logger,\n body: c.req.valid('json'),\n query: c.req.valid('query'),\n params: c.req.valid('param'),\n session,\n header: Endpoint.createHeaders(headerValues),\n } as unknown as EndpointContext<\n TInput,\n TServices,\n TLogger,\n TSession\n >);\n\n // Publish events if configured\n\n // Validate output if schema is defined\n\n try {\n const status = endpoint.status as ContentfulStatusCode;\n const output = endpoint.outputSchema\n ? await endpoint.parseOutput(response)\n : ({} as any);\n // @ts-ignore\n c.set('__response', output);\n // @ts-ignore\n c.set('__endpoint', endpoint);\n // @ts-ignore\n c.set('__logger', logger);\n\n return c.json(output, status);\n } catch (validationError: any) {\n logger.error(validationError, 'Output validation failed');\n const error = wrapError(\n validationError,\n 422,\n 'Response validation failed',\n );\n return c.json(error, error.statusCode as ContentfulStatusCode);\n }\n } catch (e: any) {\n logger.error(e, 'Error processing endpoint request');\n const error = wrapError(e, 500, 'Internal Server Error');\n return c.json(error, error.statusCode as ContentfulStatusCode);\n }\n },\n );\n }\n\n static addDocsRoute<\n TServices extends Service[] = [],\n TLogger extends Logger = Logger,\n >(\n endpoints: Endpoint<string, HttpMethod, any, any, TServices, TLogger>[],\n app: Hono,\n docsPath: string,\n openApiOptions?: HonoEndpointOptions['openApiOptions'],\n ): void {\n app.get(docsPath, async (c) => {\n try {\n const openApiSchema = await Endpoint.buildOpenApiSchema(\n endpoints,\n openApiOptions,\n );\n\n return c.json(openApiSchema);\n } catch (error) {\n console.error('Error generating OpenAPI schema:', error);\n return c.json(\n { error: 'Failed to generate OpenAPI documentation' },\n 500,\n );\n }\n });\n }\n}\n"],"mappings":"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"}