@geekmidas/constructs 0.0.19 → 0.0.21

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 (242) hide show
  1. package/dist/{AWSLambdaFunction-vobYqQ0w.cjs → AWSLambdaFunction-C-fuCLA3.cjs} +2 -2
  2. package/dist/{AWSLambdaFunction-vobYqQ0w.cjs.map → AWSLambdaFunction-C-fuCLA3.cjs.map} +1 -1
  3. package/dist/{AWSLambdaFunction-DBUENdP0.mjs → AWSLambdaFunction-H65WfXLt.mjs} +2 -2
  4. package/dist/{AWSLambdaFunction-DBUENdP0.mjs.map → AWSLambdaFunction-H65WfXLt.mjs.map} +1 -1
  5. package/dist/{AWSLambdaFunction-B-Oxr8qt.d.cts → AWSLambdaFunction-gpqm7UBb.d.cts} +3 -3
  6. package/dist/{AWSLambdaFunction-CAm9r5ZX.d.mts → AWSLambdaFunction-qWpalqfr.d.mts} +3 -3
  7. package/dist/{AWSLambdaSubscriberAdaptor-DpHzp-AM.d.mts → AWSLambdaSubscriberAdaptor-CWbBNRz3.d.mts} +2 -2
  8. package/dist/{AWSLambdaSubscriberAdaptor-BLHDyqzQ.mjs → AWSLambdaSubscriberAdaptor-CyFh7MN8.mjs} +1 -1
  9. package/dist/{AWSLambdaSubscriberAdaptor-BLHDyqzQ.mjs.map → AWSLambdaSubscriberAdaptor-CyFh7MN8.mjs.map} +1 -1
  10. package/dist/{AWSLambdaSubscriberAdaptor-Cknp_nn1.d.cts → AWSLambdaSubscriberAdaptor-DT8icDRf.d.cts} +2 -2
  11. package/dist/{AWSLambdaSubscriberAdaptor-DVC4VAQR.cjs → AWSLambdaSubscriberAdaptor-Dum5bkw3.cjs} +1 -1
  12. package/dist/{AWSLambdaSubscriberAdaptor-DVC4VAQR.cjs.map → AWSLambdaSubscriberAdaptor-Dum5bkw3.cjs.map} +1 -1
  13. package/dist/{AmazonApiGatewayEndpointAdaptor-4hPy5vty.d.mts → AmazonApiGatewayEndpointAdaptor-BQ0IJdaI.d.mts} +3 -2
  14. package/dist/{AmazonApiGatewayEndpointAdaptor-DBK53gB5.mjs → AmazonApiGatewayEndpointAdaptor-CacGag6F.mjs} +18 -7
  15. package/dist/AmazonApiGatewayEndpointAdaptor-CacGag6F.mjs.map +1 -0
  16. package/dist/{AmazonApiGatewayEndpointAdaptor-BLUW--OF.cjs → AmazonApiGatewayEndpointAdaptor-DXssXsJi.cjs} +18 -7
  17. package/dist/AmazonApiGatewayEndpointAdaptor-DXssXsJi.cjs.map +1 -0
  18. package/dist/{AmazonApiGatewayEndpointAdaptor-ro0RMLzr.d.cts → AmazonApiGatewayEndpointAdaptor-Da9BR5On.d.cts} +3 -2
  19. package/dist/{AmazonApiGatewayV1EndpointAdaptor-DfU3n5im.mjs → AmazonApiGatewayV1EndpointAdaptor-BpnG55R7.mjs} +3 -3
  20. package/dist/{AmazonApiGatewayV1EndpointAdaptor-DfU3n5im.mjs.map → AmazonApiGatewayV1EndpointAdaptor-BpnG55R7.mjs.map} +1 -1
  21. package/dist/{AmazonApiGatewayV1EndpointAdaptor-hyR-WwyP.d.mts → AmazonApiGatewayV1EndpointAdaptor-C4_AZ1ek.d.mts} +3 -3
  22. package/dist/{AmazonApiGatewayV1EndpointAdaptor-BWJWKqQT.d.cts → AmazonApiGatewayV1EndpointAdaptor-CSm3NsWz.d.cts} +3 -3
  23. package/dist/{AmazonApiGatewayV1EndpointAdaptor-B-i9_OtQ.cjs → AmazonApiGatewayV1EndpointAdaptor-Df4kszio.cjs} +3 -3
  24. package/dist/{AmazonApiGatewayV1EndpointAdaptor-B-i9_OtQ.cjs.map → AmazonApiGatewayV1EndpointAdaptor-Df4kszio.cjs.map} +1 -1
  25. package/dist/{AmazonApiGatewayV2EndpointAdaptor-D4k_Bg7Q.cjs → AmazonApiGatewayV2EndpointAdaptor-5SIvqPby.cjs} +3 -3
  26. package/dist/{AmazonApiGatewayV2EndpointAdaptor-D4k_Bg7Q.cjs.map → AmazonApiGatewayV2EndpointAdaptor-5SIvqPby.cjs.map} +1 -1
  27. package/dist/{AmazonApiGatewayV2EndpointAdaptor-D1Irdggp.d.cts → AmazonApiGatewayV2EndpointAdaptor-6hsBFVLf.d.cts} +3 -3
  28. package/dist/{AmazonApiGatewayV2EndpointAdaptor-DX3SuI5S.d.mts → AmazonApiGatewayV2EndpointAdaptor-DdM8Tr1X.d.mts} +3 -3
  29. package/dist/{AmazonApiGatewayV2EndpointAdaptor-D-AFyzaQ.mjs → AmazonApiGatewayV2EndpointAdaptor-ZORzMEET.mjs} +3 -3
  30. package/dist/{AmazonApiGatewayV2EndpointAdaptor-D-AFyzaQ.mjs.map → AmazonApiGatewayV2EndpointAdaptor-ZORzMEET.mjs.map} +1 -1
  31. package/dist/{BaseFunctionBuilder-CbDnPZpD.d.mts → BaseFunctionBuilder-Ct6zY6Jq.d.mts} +2 -2
  32. package/dist/{BaseFunctionBuilder-DUZMbEr3.d.cts → BaseFunctionBuilder-DaQA0uKE.d.cts} +2 -2
  33. package/dist/{Construct-ZPqE0vhn.d.mts → Construct-DDR0295I.d.mts} +7 -7
  34. package/dist/{Construct-dI_rgdSp.d.cts → Construct-Dkd8Kvc9.d.cts} +7 -7
  35. package/dist/Construct.d.cts +1 -1
  36. package/dist/Construct.d.mts +1 -1
  37. package/dist/{Cron-COdfP0Jd.d.cts → Cron-7VPR2cNR.d.cts} +6 -5
  38. package/dist/{Cron-CmtKQOmE.cjs → Cron-Bi3QOge_.cjs} +1 -1
  39. package/dist/Cron-Bi3QOge_.cjs.map +1 -0
  40. package/dist/{Cron-D8cn_ahj.d.mts → Cron-DnMRWPFR.d.mts} +6 -5
  41. package/dist/{Cron-mWi3PQxt.mjs → Cron-Dy_HW2Vv.mjs} +1 -1
  42. package/dist/Cron-Dy_HW2Vv.mjs.map +1 -0
  43. package/dist/{CronBuilder-DntF6H3A.d.cts → CronBuilder-290th4zF.d.cts} +4 -4
  44. package/dist/{CronBuilder-4DxT6wUa.mjs → CronBuilder-Bl3A2Zp4.mjs} +2 -2
  45. package/dist/{CronBuilder-4DxT6wUa.mjs.map → CronBuilder-Bl3A2Zp4.mjs.map} +1 -1
  46. package/dist/{CronBuilder-CeffP9Rs.cjs → CronBuilder-Dv_w7Yri.cjs} +2 -2
  47. package/dist/{CronBuilder-CeffP9Rs.cjs.map → CronBuilder-Dv_w7Yri.cjs.map} +1 -1
  48. package/dist/{CronBuilder-DoMnSs_0.d.mts → CronBuilder-RLDitFmP.d.mts} +4 -4
  49. package/dist/{Endpoint-BTvS2vwp.cjs → Endpoint-CA-byrDr.cjs} +1 -3
  50. package/dist/Endpoint-CA-byrDr.cjs.map +1 -0
  51. package/dist/{Endpoint-Bu8Phz6y.d.cts → Endpoint-D2Imgihs.d.cts} +31 -7
  52. package/dist/{Endpoint-D2LVHBEO.mjs → Endpoint-DbPsw13b.mjs} +1 -3
  53. package/dist/Endpoint-DbPsw13b.mjs.map +1 -0
  54. package/dist/{Endpoint-Bbs_sFvg.d.mts → Endpoint-PtQ-wLIS.d.mts} +31 -7
  55. package/dist/{EndpointBuilder-O6B1zJ6v.mjs → EndpointBuilder-B5QPf5Wd.mjs} +2 -2
  56. package/dist/EndpointBuilder-B5QPf5Wd.mjs.map +1 -0
  57. package/dist/{EndpointBuilder-D02Qo4Ha.d.mts → EndpointBuilder-BPHpUekp.d.mts} +4 -4
  58. package/dist/{EndpointBuilder-C4qahFeS.cjs → EndpointBuilder-DrJbIf3Z.cjs} +2 -2
  59. package/dist/EndpointBuilder-DrJbIf3Z.cjs.map +1 -0
  60. package/dist/{EndpointBuilder-DHPOWw0B.d.cts → EndpointBuilder-TApJQhtG.d.cts} +4 -4
  61. package/dist/{EndpointFactory-C_neYSiA.cjs → EndpointFactory-CSeDcWYn.cjs} +2 -2
  62. package/dist/EndpointFactory-CSeDcWYn.cjs.map +1 -0
  63. package/dist/{EndpointFactory-DFFXRU-l.d.cts → EndpointFactory-D94AFjIc.d.cts} +5 -5
  64. package/dist/{EndpointFactory-BUYrnjau.mjs → EndpointFactory-DNwMexc7.mjs} +2 -2
  65. package/dist/EndpointFactory-DNwMexc7.mjs.map +1 -0
  66. package/dist/{EndpointFactory-g84YJjGf.d.mts → EndpointFactory-TJ6gtM0W.d.mts} +5 -5
  67. package/dist/{Function-V9M9UVHp.d.mts → Function-CD3rXWfa.d.mts} +5 -5
  68. package/dist/{Function-VI1TB3Mh.d.cts → Function-DHD1V9QW.d.cts} +5 -5
  69. package/dist/{FunctionBuilder-CjVEFTYC.d.cts → FunctionBuilder-FV6r3I7X.d.cts} +4 -4
  70. package/dist/{FunctionBuilder-D1ofSeMd.d.mts → FunctionBuilder-j2VkwuGf.d.mts} +4 -4
  71. package/dist/{FunctionExecutionWrapper-CwtwYozd.d.cts → FunctionExecutionWrapper-B0WP-Vec.d.mts} +4 -4
  72. package/dist/{FunctionExecutionWrapper-BPIdmPe8.mjs → FunctionExecutionWrapper-Bubnr0zA.mjs} +1 -1
  73. package/dist/{FunctionExecutionWrapper-BPIdmPe8.mjs.map → FunctionExecutionWrapper-Bubnr0zA.mjs.map} +1 -1
  74. package/dist/{FunctionExecutionWrapper-rhbIYT0Q.d.mts → FunctionExecutionWrapper-DYt3C8b9.d.cts} +4 -4
  75. package/dist/{FunctionExecutionWrapper-B8agyYHk.cjs → FunctionExecutionWrapper-DkNycmOh.cjs} +1 -1
  76. package/dist/{FunctionExecutionWrapper-B8agyYHk.cjs.map → FunctionExecutionWrapper-DkNycmOh.cjs.map} +1 -1
  77. package/dist/{HonoEndpointAdaptor-DbLeXkR6.cjs → HonoEndpointAdaptor-B_gJPWGD.cjs} +9 -8
  78. package/dist/HonoEndpointAdaptor-B_gJPWGD.cjs.map +1 -0
  79. package/dist/{HonoEndpointAdaptor-DEFNrIv7.mjs → HonoEndpointAdaptor-Bg_vTyA5.mjs} +9 -8
  80. package/dist/HonoEndpointAdaptor-Bg_vTyA5.mjs.map +1 -0
  81. package/dist/{HonoEndpointAdaptor-Br1vuQ3A.d.mts → HonoEndpointAdaptor-D99d4b-Z.d.mts} +4 -4
  82. package/dist/{HonoEndpointAdaptor-C9wC10-w.d.cts → HonoEndpointAdaptor-DB_DdiJr.d.cts} +5 -5
  83. package/dist/{Subscriber-BhzqUzs-.d.cts → Subscriber-DMSzvO_J.d.cts} +6 -6
  84. package/dist/{Subscriber-s6yfjeOc.d.mts → Subscriber-itwm7ugy.d.mts} +6 -6
  85. package/dist/{SubscriberBuilder-BCVkp-ga.d.cts → SubscriberBuilder-9j3JCu8-.d.mts} +3 -3
  86. package/dist/{SubscriberBuilder-aCua5_wA.d.mts → SubscriberBuilder-BxJM3Hz_.d.cts} +3 -3
  87. package/dist/{TestEndpointAdaptor-ByXqQufk.d.cts → TestEndpointAdaptor-BYCwwiYk.d.cts} +2 -2
  88. package/dist/{TestEndpointAdaptor-JCvZ3VVi.cjs → TestEndpointAdaptor-Bew9lWsx.cjs} +6 -5
  89. package/dist/TestEndpointAdaptor-Bew9lWsx.cjs.map +1 -0
  90. package/dist/{TestEndpointAdaptor-Bl2ic-yr.d.mts → TestEndpointAdaptor-C-c8v7VI.d.mts} +2 -2
  91. package/dist/{TestEndpointAdaptor-BGrZsg5c.mjs → TestEndpointAdaptor-JONQJeXc.mjs} +6 -5
  92. package/dist/TestEndpointAdaptor-JONQJeXc.mjs.map +1 -0
  93. package/dist/adaptors/aws.cjs +9 -9
  94. package/dist/adaptors/aws.d.cts +13 -13
  95. package/dist/adaptors/aws.d.mts +13 -13
  96. package/dist/adaptors/aws.mjs +9 -9
  97. package/dist/adaptors/hono.cjs +5 -5
  98. package/dist/adaptors/hono.d.cts +7 -7
  99. package/dist/adaptors/hono.d.mts +7 -7
  100. package/dist/adaptors/hono.mjs +5 -5
  101. package/dist/adaptors/testing.cjs +3 -3
  102. package/dist/adaptors/testing.d.cts +7 -7
  103. package/dist/adaptors/testing.d.mts +7 -7
  104. package/dist/adaptors/testing.mjs +3 -3
  105. package/dist/crons/Cron.cjs +1 -1
  106. package/dist/crons/Cron.d.cts +6 -6
  107. package/dist/crons/Cron.d.mts +6 -6
  108. package/dist/crons/Cron.mjs +1 -1
  109. package/dist/crons/CronBuilder.cjs +2 -2
  110. package/dist/crons/CronBuilder.d.cts +7 -7
  111. package/dist/crons/CronBuilder.d.mts +7 -7
  112. package/dist/crons/CronBuilder.mjs +2 -2
  113. package/dist/crons/index.cjs +2 -2
  114. package/dist/crons/index.d.cts +11 -11
  115. package/dist/crons/index.d.mts +7 -7
  116. package/dist/crons/index.mjs +2 -2
  117. package/dist/endpoints/AmazonApiGatewayEndpointAdaptor.cjs +3 -3
  118. package/dist/endpoints/AmazonApiGatewayEndpointAdaptor.d.cts +7 -7
  119. package/dist/endpoints/AmazonApiGatewayEndpointAdaptor.d.mts +7 -7
  120. package/dist/endpoints/AmazonApiGatewayEndpointAdaptor.mjs +3 -3
  121. package/dist/endpoints/AmazonApiGatewayV1EndpointAdaptor.cjs +5 -5
  122. package/dist/endpoints/AmazonApiGatewayV1EndpointAdaptor.d.cts +8 -8
  123. package/dist/endpoints/AmazonApiGatewayV1EndpointAdaptor.d.mts +8 -8
  124. package/dist/endpoints/AmazonApiGatewayV1EndpointAdaptor.mjs +5 -5
  125. package/dist/endpoints/AmazonApiGatewayV2EndpointAdaptor.cjs +5 -5
  126. package/dist/endpoints/AmazonApiGatewayV2EndpointAdaptor.d.cts +8 -8
  127. package/dist/endpoints/AmazonApiGatewayV2EndpointAdaptor.d.mts +8 -8
  128. package/dist/endpoints/AmazonApiGatewayV2EndpointAdaptor.mjs +5 -5
  129. package/dist/endpoints/Endpoint.cjs +1 -1
  130. package/dist/endpoints/Endpoint.d.cts +6 -6
  131. package/dist/endpoints/Endpoint.d.mts +6 -6
  132. package/dist/endpoints/Endpoint.mjs +1 -1
  133. package/dist/endpoints/EndpointBuilder.cjs +2 -2
  134. package/dist/endpoints/EndpointBuilder.d.cts +7 -7
  135. package/dist/endpoints/EndpointBuilder.d.mts +7 -7
  136. package/dist/endpoints/EndpointBuilder.mjs +2 -2
  137. package/dist/endpoints/EndpointFactory.cjs +3 -3
  138. package/dist/endpoints/EndpointFactory.d.cts +8 -8
  139. package/dist/endpoints/EndpointFactory.d.mts +8 -8
  140. package/dist/endpoints/EndpointFactory.mjs +3 -3
  141. package/dist/endpoints/HonoEndpointAdaptor.cjs +5 -5
  142. package/dist/endpoints/HonoEndpointAdaptor.d.cts +7 -7
  143. package/dist/endpoints/HonoEndpointAdaptor.d.mts +7 -7
  144. package/dist/endpoints/HonoEndpointAdaptor.mjs +5 -5
  145. package/dist/endpoints/TestEndpointAdaptor.cjs +3 -3
  146. package/dist/endpoints/TestEndpointAdaptor.d.cts +7 -7
  147. package/dist/endpoints/TestEndpointAdaptor.d.mts +7 -7
  148. package/dist/endpoints/TestEndpointAdaptor.mjs +3 -3
  149. package/dist/endpoints/audit.d.cts +6 -6
  150. package/dist/endpoints/audit.d.mts +6 -6
  151. package/dist/endpoints/helpers.cjs +2 -2
  152. package/dist/endpoints/helpers.d.cts +6 -6
  153. package/dist/endpoints/helpers.d.mts +6 -6
  154. package/dist/endpoints/helpers.mjs +2 -2
  155. package/dist/endpoints/index.cjs +3 -3
  156. package/dist/endpoints/index.d.cts +10 -10
  157. package/dist/endpoints/index.d.mts +8 -8
  158. package/dist/endpoints/index.mjs +3 -3
  159. package/dist/endpoints/parseHonoQuery.cjs +1 -1
  160. package/dist/endpoints/parseHonoQuery.mjs +1 -1
  161. package/dist/endpoints/parseQueryParams.cjs +1 -1
  162. package/dist/endpoints/parseQueryParams.mjs +1 -1
  163. package/dist/endpoints/processAudits.cjs +1 -1
  164. package/dist/endpoints/processAudits.d.cts +6 -6
  165. package/dist/endpoints/processAudits.d.mts +6 -6
  166. package/dist/endpoints/processAudits.mjs +1 -1
  167. package/dist/functions/AWSLambdaFunction.cjs +2 -2
  168. package/dist/functions/AWSLambdaFunction.d.cts +4 -4
  169. package/dist/functions/AWSLambdaFunction.d.mts +4 -4
  170. package/dist/functions/AWSLambdaFunction.mjs +2 -2
  171. package/dist/functions/BaseFunctionBuilder.d.cts +2 -2
  172. package/dist/functions/BaseFunctionBuilder.d.mts +2 -2
  173. package/dist/functions/Function.d.cts +2 -2
  174. package/dist/functions/Function.d.mts +2 -2
  175. package/dist/functions/FunctionBuilder.d.cts +4 -4
  176. package/dist/functions/FunctionBuilder.d.mts +4 -4
  177. package/dist/functions/FunctionExecutionWrapper.cjs +1 -1
  178. package/dist/functions/FunctionExecutionWrapper.d.cts +3 -3
  179. package/dist/functions/FunctionExecutionWrapper.d.mts +3 -3
  180. package/dist/functions/FunctionExecutionWrapper.mjs +1 -1
  181. package/dist/functions/TestFunctionAdaptor.d.cts +2 -2
  182. package/dist/functions/TestFunctionAdaptor.d.mts +2 -2
  183. package/dist/functions/index.d.cts +5 -5
  184. package/dist/functions/index.d.mts +5 -5
  185. package/dist/{helpers-D-OW3LI_.mjs → helpers-CrrdyA04.mjs} +2 -2
  186. package/dist/{helpers-D-OW3LI_.mjs.map → helpers-CrrdyA04.mjs.map} +1 -1
  187. package/dist/{helpers-CUYRcimZ.cjs → helpers-DiPZVJQC.cjs} +2 -2
  188. package/dist/{helpers-CUYRcimZ.cjs.map → helpers-DiPZVJQC.cjs.map} +1 -1
  189. package/dist/index-C6vCFivC.d.cts +10 -0
  190. package/dist/index-IoTEI3As.d.mts +10 -0
  191. package/dist/index.d.cts +1 -1
  192. package/dist/index.d.mts +1 -1
  193. package/dist/{parseHonoQuery-D-fMmSbA.cjs → parseHonoQuery-CT8Cvin-.cjs} +1 -1
  194. package/dist/{parseHonoQuery-D-fMmSbA.cjs.map → parseHonoQuery-CT8Cvin-.cjs.map} +1 -1
  195. package/dist/{parseHonoQuery-BlwMModJ.mjs → parseHonoQuery-CwFKw2ua.mjs} +1 -1
  196. package/dist/{parseHonoQuery-BlwMModJ.mjs.map → parseHonoQuery-CwFKw2ua.mjs.map} +1 -1
  197. package/dist/{parseQueryParams-DlbV3_SB.mjs → parseQueryParams-CHINupbZ.mjs} +1 -1
  198. package/dist/{parseQueryParams-DlbV3_SB.mjs.map → parseQueryParams-CHINupbZ.mjs.map} +1 -1
  199. package/dist/{parseQueryParams-CbY1zcCU.cjs → parseQueryParams-CwvXXwkW.cjs} +1 -1
  200. package/dist/{parseQueryParams-CbY1zcCU.cjs.map → parseQueryParams-CwvXXwkW.cjs.map} +1 -1
  201. package/dist/{processAudits-MHp5_fc7.cjs → processAudits-BFokHhCO.cjs} +1 -1
  202. package/dist/{processAudits-MHp5_fc7.cjs.map → processAudits-BFokHhCO.cjs.map} +1 -1
  203. package/dist/{processAudits-CW7z5Kj9.mjs → processAudits-DfcB-X-4.mjs} +1 -1
  204. package/dist/{processAudits-CW7z5Kj9.mjs.map → processAudits-DfcB-X-4.mjs.map} +1 -1
  205. package/dist/publisher.d.cts +2 -2
  206. package/dist/publisher.d.mts +2 -2
  207. package/dist/subscribers/AWSLambdaSubscriberAdaptor.cjs +1 -1
  208. package/dist/subscribers/AWSLambdaSubscriberAdaptor.d.cts +3 -3
  209. package/dist/subscribers/AWSLambdaSubscriberAdaptor.d.mts +3 -3
  210. package/dist/subscribers/AWSLambdaSubscriberAdaptor.mjs +1 -1
  211. package/dist/subscribers/Subscriber.d.cts +2 -2
  212. package/dist/subscribers/Subscriber.d.mts +2 -2
  213. package/dist/subscribers/SubscriberBuilder.d.cts +3 -3
  214. package/dist/subscribers/SubscriberBuilder.d.mts +3 -3
  215. package/dist/subscribers/index.d.cts +5 -5
  216. package/dist/subscribers/index.d.mts +5 -5
  217. package/package.json +6 -6
  218. package/src/crons/Cron.ts +7 -6
  219. package/src/endpoints/AmazonApiGatewayEndpointAdaptor.ts +31 -10
  220. package/src/endpoints/Endpoint.ts +41 -6
  221. package/src/endpoints/EndpointBuilder.ts +2 -1
  222. package/src/endpoints/EndpointFactory.ts +13 -4
  223. package/src/endpoints/HonoEndpointAdaptor.ts +14 -13
  224. package/src/endpoints/TestEndpointAdaptor.ts +11 -6
  225. package/src/endpoints/__tests__/HonoEndpointAdaptor.spec.ts +3 -2
  226. package/src/endpoints/__tests__/TestEndpointAdaptor.audits.spec.ts +30 -42
  227. package/dist/AmazonApiGatewayEndpointAdaptor-BLUW--OF.cjs.map +0 -1
  228. package/dist/AmazonApiGatewayEndpointAdaptor-DBK53gB5.mjs.map +0 -1
  229. package/dist/Cron-CmtKQOmE.cjs.map +0 -1
  230. package/dist/Cron-mWi3PQxt.mjs.map +0 -1
  231. package/dist/Endpoint-BTvS2vwp.cjs.map +0 -1
  232. package/dist/Endpoint-D2LVHBEO.mjs.map +0 -1
  233. package/dist/EndpointBuilder-C4qahFeS.cjs.map +0 -1
  234. package/dist/EndpointBuilder-O6B1zJ6v.mjs.map +0 -1
  235. package/dist/EndpointFactory-BUYrnjau.mjs.map +0 -1
  236. package/dist/EndpointFactory-C_neYSiA.cjs.map +0 -1
  237. package/dist/HonoEndpointAdaptor-DEFNrIv7.mjs.map +0 -1
  238. package/dist/HonoEndpointAdaptor-DbLeXkR6.cjs.map +0 -1
  239. package/dist/TestEndpointAdaptor-BGrZsg5c.mjs.map +0 -1
  240. package/dist/TestEndpointAdaptor-JCvZ3VVi.cjs.map +0 -1
  241. package/dist/index-Doa8YPmH.d.cts +0 -10
  242. package/dist/index-TxufD5Xp.d.mts +0 -10
package/src/crons/Cron.ts CHANGED
@@ -1,13 +1,13 @@
1
+ import type { AuditableAction } from '@geekmidas/audit';
2
+ import type { EventPublisher } from '@geekmidas/events';
1
3
  import type { Logger } from '@geekmidas/logger';
4
+ import type { ComposableStandardSchema } from '@geekmidas/schema';
5
+ import type { Service } from '@geekmidas/services';
2
6
  import type { StandardSchemaV1 } from '@standard-schema/spec';
3
7
 
4
8
  import { ConstructType } from '../Construct';
5
9
  import { Function, type FunctionHandler } from '../functions';
6
10
 
7
- import type { EventPublisher } from '@geekmidas/events';
8
- import type { ComposableStandardSchema } from '@geekmidas/schema';
9
- import type { Service } from '@geekmidas/services';
10
-
11
11
  export class Cron<
12
12
  TInput extends ComposableStandardSchema | undefined = undefined,
13
13
  TServices extends Service[] = [],
@@ -22,13 +22,14 @@ export class Cron<
22
22
  TServices,
23
23
  TLogger,
24
24
  OutSchema,
25
- FunctionHandler<TInput, TServices, TLogger, OutSchema, TDatabase>,
26
25
  TEventPublisher,
27
26
  TEventPublisherServiceName,
28
27
  undefined,
29
28
  string,
30
29
  TDatabase,
31
- TDatabaseServiceName
30
+ TDatabaseServiceName,
31
+ AuditableAction<string, unknown>,
32
+ FunctionHandler<TInput, TServices, TLogger, OutSchema, TDatabase>
32
33
  > {
33
34
  static isCron(obj: any): obj is Cron<any, any, any, any> {
34
35
  return Boolean(
@@ -191,17 +191,44 @@ export abstract class AmazonApiGatewayEndpoint<
191
191
  };
192
192
  }
193
193
 
194
+ private database(): Middleware<TEvent, TInput, TServices, TLogger> {
195
+ return {
196
+ before: async (req) => {
197
+ if (!this.endpoint.databaseService) {
198
+ return;
199
+ }
200
+
201
+ const logger = req.event.logger as TLogger;
202
+ const serviceDiscovery = ServiceDiscovery.getInstance<
203
+ ServiceRecord<TServices>,
204
+ TLogger
205
+ >(logger, this.envParser);
206
+
207
+ const db = await serviceDiscovery
208
+ .register([this.endpoint.databaseService])
209
+ .then(
210
+ (s) =>
211
+ s[this.endpoint.databaseService!.serviceName as keyof typeof s],
212
+ );
213
+
214
+ (req.event as any).db = db;
215
+ },
216
+ };
217
+ }
218
+
194
219
  private session(): Middleware<TEvent, TInput, TServices, TLogger> {
195
220
  return {
196
221
  before: async (req) => {
197
222
  const logger = req.event.logger as TLogger;
198
223
  const services = req.event.services;
224
+ const db = (req.event as any).db;
199
225
  req.event.session = (await this.endpoint.getSession({
200
226
  logger,
201
227
  services,
202
228
  header: req.event.header,
203
229
  cookie: req.event.cookie,
204
- })) as TSession;
230
+ ...(db !== undefined && { db }),
231
+ } as any)) as TSession;
205
232
  },
206
233
  };
207
234
  }
@@ -267,15 +294,8 @@ export abstract class AmazonApiGatewayEndpoint<
267
294
  logger.warn('No auditor storage service available');
268
295
  }
269
296
 
270
- // Resolve database service if configured
271
- const rawDb = this.endpoint.databaseService
272
- ? await serviceDiscovery
273
- .register([this.endpoint.databaseService])
274
- .then(
275
- (s) =>
276
- s[this.endpoint.databaseService!.serviceName as keyof typeof s],
277
- )
278
- : undefined;
297
+ // Get pre-resolved database from middleware
298
+ const rawDb = (event as any).db;
279
299
 
280
300
  // Execute handler with automatic audit transaction support
281
301
  const result = await executeWithAuditTransaction(
@@ -382,6 +402,7 @@ export abstract class AmazonApiGatewayEndpoint<
382
402
  .use(this.error())
383
403
  .use(this.services())
384
404
  .use(this.input())
405
+ .use(this.database())
385
406
  .use(this.session())
386
407
  .use(this.authorize())
387
408
  .use(this.events()) as unknown as THandler;
@@ -109,7 +109,7 @@ export class Endpoint<
109
109
  /** Default headers to apply to all responses */
110
110
  public readonly defaultHeaders: Record<string, string> = {};
111
111
  /** Function to extract session data from the request context */
112
- public getSession: SessionFn<TServices, TLogger, TSession> = () =>
112
+ public getSession: SessionFn<TServices, TLogger, TSession, TDatabase> = () =>
113
113
  ({}) as TSession;
114
114
  /** Function to determine if the request is authorized */
115
115
  public authorize: AuthorizeFn<TServices, TLogger, TSession> = () => true;
@@ -122,7 +122,7 @@ export class Endpoint<
122
122
  /** Declarative audit definitions */
123
123
  public audits: MappedAudit<TAuditAction, OutSchema>[] = [];
124
124
  /** Database service for this endpoint */
125
- public databaseService?: Service<TDatabaseServiceName, TDatabase>;
125
+ public declare databaseService?: Service<TDatabaseServiceName, TDatabase>;
126
126
  /** The endpoint handler function */
127
127
  private endpointFn!: EndpointHandler<
128
128
  TInput,
@@ -752,7 +752,7 @@ export interface EndpointOptions<
752
752
  /** Logger instance */
753
753
  logger: TLogger;
754
754
  /** Optional session extraction function */
755
- getSession: SessionFn<TServices, TLogger, TSession> | undefined;
755
+ getSession: SessionFn<TServices, TLogger, TSession, TDatabase> | undefined;
756
756
  /** Optional rate limiting configuration */
757
757
  rateLimit?: RateLimitConfig;
758
758
  /** Success HTTP status code */
@@ -826,7 +826,10 @@ export type AuthorizeFn<
826
826
  ctx: AuthorizeContext<TServices, TLogger, TSession>,
827
827
  ) => Promise<boolean> | boolean;
828
828
 
829
- export type SessionContext<
829
+ /**
830
+ * Base session context without database
831
+ */
832
+ type BaseSessionContext<
830
833
  TServices extends Service[] = [],
831
834
  TLogger extends Logger = Logger,
832
835
  > = {
@@ -835,29 +838,61 @@ export type SessionContext<
835
838
  header: HeaderFn;
836
839
  cookie: CookieFn;
837
840
  };
841
+
842
+ /**
843
+ * Conditional database context for session - only present when database service is configured
844
+ */
845
+ type SessionDatabaseContext<TDatabase = undefined> = TDatabase extends undefined
846
+ ? {}
847
+ : {
848
+ /**
849
+ * Database instance for session extraction.
850
+ * Available when a database service is configured via `.database()`.
851
+ * Useful for looking up user data from the database based on auth tokens.
852
+ */
853
+ db: TDatabase;
854
+ };
855
+
856
+ export type SessionContext<
857
+ TServices extends Service[] = [],
858
+ TLogger extends Logger = Logger,
859
+ TDatabase = undefined,
860
+ > = BaseSessionContext<TServices, TLogger> & SessionDatabaseContext<TDatabase>;
838
861
  /**
839
862
  * Function type for extracting session data from a request.
840
863
  *
841
864
  * @template TServices - Available service dependencies
842
865
  * @template TLogger - Logger type
843
866
  * @template TSession - Session data type to extract
867
+ * @template TDatabase - Database type (when database service is configured)
844
868
  *
845
- * @param ctx - Context containing services, logger, and headers
869
+ * @param ctx - Context containing services, logger, headers, and optionally database
846
870
  * @returns The extracted session data
847
871
  *
848
872
  * @example
849
873
  * ```typescript
874
+ * // Without database
850
875
  * const getSession: SessionFn<Services, Logger, UserSession> = async ({ header, services }) => {
851
876
  * const token = header('authorization');
852
877
  * return await services.auth.verifyToken(token);
853
878
  * };
879
+ *
880
+ * // With database
881
+ * const getSession: SessionFn<Services, Logger, UserSession, Database> = async ({ header, db }) => {
882
+ * const token = header('authorization');
883
+ * const user = await db.selectFrom('users').where('token', '=', token).executeTakeFirst();
884
+ * return { userId: user?.id };
885
+ * };
854
886
  * ```
855
887
  */
856
888
  export type SessionFn<
857
889
  TServices extends Service[] = [],
858
890
  TLogger extends Logger = Logger,
859
891
  TSession = unknown,
860
- > = (ctx: SessionContext<TServices, TLogger>) => Promise<TSession> | TSession;
892
+ TDatabase = undefined,
893
+ > = (
894
+ ctx: SessionContext<TServices, TLogger, TDatabase>,
895
+ ) => Promise<TSession> | TSession;
861
896
 
862
897
  /**
863
898
  * Utility type that converts Express-style route parameters to OpenAPI format.
@@ -58,7 +58,8 @@ export class EndpointBuilder<
58
58
  protected _status?: SuccessStatus;
59
59
  protected _tags?: string[];
60
60
  protected _memorySize?: number;
61
- _getSession: SessionFn<TServices, TLogger, TSession> = () => ({}) as TSession;
61
+ _getSession: SessionFn<TServices, TLogger, TSession, TDatabase> = () =>
62
+ ({}) as TSession;
62
63
  _authorize: AuthorizeFn<TServices, TLogger, TSession> = () => true;
63
64
  _rateLimit?: RateLimitConfig;
64
65
  _availableAuthorizers: Authorizer[] = [];
@@ -40,7 +40,12 @@ export class EndpointFactory<
40
40
  private defaultEventPublisher:
41
41
  | Service<TEventPublisherServiceName, TEventPublisher>
42
42
  | undefined;
43
- private defaultSessionExtractor?: SessionFn<TServices, TLogger, TSession>;
43
+ private defaultSessionExtractor?: SessionFn<
44
+ TServices,
45
+ TLogger,
46
+ TSession,
47
+ TDatabase
48
+ >;
44
49
  private defaultLogger: TLogger = DEFAULT_LOGGER;
45
50
  private availableAuthorizers: Authorizer[] = [];
46
51
  private defaultAuthorizerName?: TAuthorizers[number];
@@ -423,7 +428,7 @@ export class EndpointFactory<
423
428
  }
424
429
 
425
430
  session<T>(
426
- session: SessionFn<TServices, TLogger, T>,
431
+ session: SessionFn<TServices, TLogger, T, TDatabase>,
427
432
  ): EndpointFactory<
428
433
  TServices,
429
434
  TBasePath,
@@ -513,7 +518,11 @@ export class EndpointFactory<
513
518
  basePath: this.basePath,
514
519
  defaultAuthorizeFn: this.defaultAuthorizeFn,
515
520
  defaultLogger: this.defaultLogger,
516
- defaultSessionExtractor: this.defaultSessionExtractor,
521
+ // Reset session extractor when database changes - user should call .session() after .database()
522
+ // to get proper type inference for the new database type
523
+ defaultSessionExtractor: this.defaultSessionExtractor as unknown as
524
+ | SessionFn<TServices, TLogger, TSession, T>
525
+ | undefined,
517
526
  defaultEventPublisher: this.defaultEventPublisher,
518
527
  availableAuthorizers: this.availableAuthorizers,
519
528
  defaultAuthorizerName: this.defaultAuthorizerName,
@@ -781,7 +790,7 @@ export interface EndpointFactoryOptions<
781
790
  basePath?: TBasePath;
782
791
  defaultAuthorizeFn?: AuthorizeFn<TServices, TLogger, TSession>;
783
792
  defaultLogger?: TLogger;
784
- defaultSessionExtractor?: SessionFn<TServices, TLogger, TSession>;
793
+ defaultSessionExtractor?: SessionFn<TServices, TLogger, TSession, TDatabase>;
785
794
  defaultEventPublisher?: Service<TEventPublisherServiceName, TEventPublisher>;
786
795
  defaultEvents?: MappedEvent<TEventPublisher, undefined>[];
787
796
  availableAuthorizers?: Authorizer[];
@@ -298,12 +298,23 @@ export class HonoEndpoint<
298
298
 
299
299
  const services = await serviceDiscovery.register(endpoint.services);
300
300
 
301
+ // Resolve database service early so it's available for session extraction
302
+ const rawDb = endpoint.databaseService
303
+ ? await serviceDiscovery
304
+ .register([endpoint.databaseService])
305
+ .then(
306
+ (s) =>
307
+ s[endpoint.databaseService!.serviceName as keyof typeof s],
308
+ )
309
+ : undefined;
310
+
301
311
  const session = await endpoint.getSession({
302
312
  services,
303
313
  logger,
304
314
  header,
305
315
  cookie,
306
- });
316
+ ...(rawDb !== undefined && { db: rawDb }),
317
+ } as any);
307
318
 
308
319
  const isAuthorized = await endpoint.authorize({
309
320
  header,
@@ -363,16 +374,6 @@ export class HonoEndpoint<
363
374
  logger.warn('No auditor storage service available');
364
375
  }
365
376
 
366
- // Resolve database service if configured
367
- const rawDb = endpoint.databaseService
368
- ? await serviceDiscovery
369
- .register([endpoint.databaseService])
370
- .then(
371
- (s) =>
372
- s[endpoint.databaseService!.serviceName as keyof typeof s],
373
- )
374
- : undefined;
375
-
376
377
  // Execute handler with automatic audit transaction support
377
378
  const result = await executeWithAuditTransaction(
378
379
  auditContext,
@@ -480,8 +481,8 @@ export class HonoEndpoint<
480
481
  if (HonoEndpoint.isDev) {
481
482
  logger.info({ status, body: output }, 'Outgoing response');
482
483
  }
483
-
484
- return c.json(output ?? {}, status);
484
+ // @ts-ignore
485
+ return c.json(output, status);
485
486
  } catch (validationError: any) {
486
487
  logger.error(validationError, 'Output validation failed');
487
488
  const error = wrapError(
@@ -1,4 +1,8 @@
1
- import type { AuditActor, AuditStorage, AuditableAction } from '@geekmidas/audit';
1
+ import type {
2
+ AuditActor,
3
+ AuditStorage,
4
+ AuditableAction,
5
+ } from '@geekmidas/audit';
2
6
  import { DefaultAuditor } from '@geekmidas/audit';
3
7
  import { EnvironmentParser } from '@geekmidas/envkit';
4
8
  import type { EventPublisher } from '@geekmidas/events';
@@ -179,12 +183,17 @@ export class TestEndpointAdaptor<
179
183
  host: ctx.headers.host,
180
184
  method: this.endpoint.method,
181
185
  }) as TLogger;
186
+
187
+ // Get database from context for session extraction
188
+ const rawDb = (ctx as any).database as TDatabase;
189
+
182
190
  const session = await this.endpoint.getSession({
183
191
  logger,
184
192
  services: ctx.services,
185
193
  header,
186
194
  cookie,
187
- });
195
+ ...(rawDb !== undefined && { db: rawDb }),
196
+ } as any);
188
197
 
189
198
  // Create audit context if audit storage is provided
190
199
  // The auditorStorage instance is required when endpoint uses .auditor()
@@ -229,10 +238,6 @@ export class TestEndpointAdaptor<
229
238
  logger.warn('No auditor storage service available');
230
239
  }
231
240
 
232
- // Use database instance directly from context
233
- // The database instance is required when endpoint uses .database()
234
- const rawDb = (ctx as any).database as TDatabase;
235
-
236
241
  // Execute handler with automatic audit transaction support
237
242
  const result = await executeWithAuditTransaction(
238
243
  auditContext,
@@ -1073,7 +1073,7 @@ describe('HonoEndpointAdaptor', () => {
1073
1073
  expect(error).toHaveProperty('message', 'Validation failed');
1074
1074
  });
1075
1075
 
1076
- it('should return empty object when no output schema is defined', async () => {
1076
+ it('should return empty response when no output schema is defined', async () => {
1077
1077
  const endpoint = new Endpoint({
1078
1078
  route: '/users/no-schema',
1079
1079
  method: 'GET',
@@ -1097,7 +1097,8 @@ describe('HonoEndpointAdaptor', () => {
1097
1097
 
1098
1098
  const response = await app.request('/users/no-schema');
1099
1099
  expect(response.status).toBe(200);
1100
- expect(await response.json()).toEqual({});
1100
+ // When no output schema is defined, response body is empty
1101
+ expect(await response.text()).toBe('');
1101
1102
  });
1102
1103
  });
1103
1104
  });
@@ -71,13 +71,11 @@ describe('TestEndpointAdaptor with auditorStorage and database', () => {
71
71
  it('should process declarative audits when auditorStorage is provided', async () => {
72
72
  const auditStorage = new InMemoryAuditStorage();
73
73
 
74
- const auditStorageService: Service<
75
- 'auditStorage',
76
- InMemoryAuditStorage
77
- > = {
78
- serviceName: 'auditStorage' as const,
79
- register: vi.fn().mockResolvedValue(auditStorage),
80
- };
74
+ const auditStorageService: Service<'auditStorage', InMemoryAuditStorage> =
75
+ {
76
+ serviceName: 'auditStorage' as const,
77
+ register: vi.fn().mockResolvedValue(auditStorage),
78
+ };
81
79
 
82
80
  const outputSchema = z.object({ id: z.string(), email: z.string() });
83
81
 
@@ -123,13 +121,11 @@ describe('TestEndpointAdaptor with auditorStorage and database', () => {
123
121
  it('should allow manual auditing via auditor in handler context', async () => {
124
122
  const auditStorage = new InMemoryAuditStorage();
125
123
 
126
- const auditStorageService: Service<
127
- 'auditStorage',
128
- InMemoryAuditStorage
129
- > = {
130
- serviceName: 'auditStorage' as const,
131
- register: vi.fn().mockResolvedValue(auditStorage),
132
- };
124
+ const auditStorageService: Service<'auditStorage', InMemoryAuditStorage> =
125
+ {
126
+ serviceName: 'auditStorage' as const,
127
+ register: vi.fn().mockResolvedValue(auditStorage),
128
+ };
133
129
 
134
130
  const endpoint = e
135
131
  .post('/users')
@@ -168,13 +164,11 @@ describe('TestEndpointAdaptor with auditorStorage and database', () => {
168
164
  it('should extract actor from session when actorExtractor is configured', async () => {
169
165
  const auditStorage = new InMemoryAuditStorage();
170
166
 
171
- const auditStorageService: Service<
172
- 'auditStorage',
173
- InMemoryAuditStorage
174
- > = {
175
- serviceName: 'auditStorage' as const,
176
- register: vi.fn().mockResolvedValue(auditStorage),
177
- };
167
+ const auditStorageService: Service<'auditStorage', InMemoryAuditStorage> =
168
+ {
169
+ serviceName: 'auditStorage' as const,
170
+ register: vi.fn().mockResolvedValue(auditStorage),
171
+ };
178
172
 
179
173
  const outputSchema = z.object({ id: z.string(), email: z.string() });
180
174
 
@@ -349,13 +343,11 @@ describe('TestEndpointAdaptor with auditorStorage and database', () => {
349
343
  { id: 'db-user-1', email: 'dbuser@example.com' },
350
344
  ]);
351
345
 
352
- const auditStorageService: Service<
353
- 'auditStorage',
354
- InMemoryAuditStorage
355
- > = {
356
- serviceName: 'auditStorage' as const,
357
- register: vi.fn().mockResolvedValue(auditStorage),
358
- };
346
+ const auditStorageService: Service<'auditStorage', InMemoryAuditStorage> =
347
+ {
348
+ serviceName: 'auditStorage' as const,
349
+ register: vi.fn().mockResolvedValue(auditStorage),
350
+ };
359
351
 
360
352
  const databaseService: Service<'database', MockDatabase> = {
361
353
  serviceName: 'database' as const,
@@ -438,13 +430,11 @@ describe('TestEndpointAdaptor with auditorStorage and database', () => {
438
430
  const mockDb = createMockDatabase();
439
431
  (mockDb.query as any).mockResolvedValue([]);
440
432
 
441
- const auditStorageService: Service<
442
- 'auditStorage',
443
- InMemoryAuditStorage
444
- > = {
445
- serviceName: 'auditStorage' as const,
446
- register: vi.fn().mockResolvedValue(auditStorage),
447
- };
433
+ const auditStorageService: Service<'auditStorage', InMemoryAuditStorage> =
434
+ {
435
+ serviceName: 'auditStorage' as const,
436
+ register: vi.fn().mockResolvedValue(auditStorage),
437
+ };
448
438
 
449
439
  const databaseService: Service<'database', MockDatabase> = {
450
440
  serviceName: 'database' as const,
@@ -508,13 +498,11 @@ describe('TestEndpointAdaptor with auditorStorage and database', () => {
508
498
  it('should require auditorStorage when endpoint uses .auditor()', async () => {
509
499
  const auditStorage = new InMemoryAuditStorage();
510
500
 
511
- const auditStorageService: Service<
512
- 'auditStorage',
513
- InMemoryAuditStorage
514
- > = {
515
- serviceName: 'auditStorage' as const,
516
- register: vi.fn().mockResolvedValue(auditStorage),
517
- };
501
+ const auditStorageService: Service<'auditStorage', InMemoryAuditStorage> =
502
+ {
503
+ serviceName: 'auditStorage' as const,
504
+ register: vi.fn().mockResolvedValue(auditStorage),
505
+ };
518
506
 
519
507
  const endpoint = e
520
508
  .post('/users')
@@ -1 +0,0 @@
1
- {"version":3,"file":"AmazonApiGatewayEndpointAdaptor-BLUW--OF.cjs","names":["envParser: EnvironmentParser<{}>","endpoint: Endpoint<\n TRoute,\n TMethod,\n TInput,\n TOutSchema,\n TServices,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction\n >","UnprocessableEntityError","UnauthorizedError","event: Event<TEvent, TInput, TServices, TLogger, TSession>","ResponseBuilder","metadata","output","result","lambdaResponse: AmazonApiGatewayEndpointHandlerResponse","setCookieHeaders: string[]"],"sources":["../src/endpoints/AmazonApiGatewayEndpointAdaptor.ts"],"sourcesContent":["import type { AuditStorage, AuditableAction } from '@geekmidas/audit';\nimport type { Logger } from '@geekmidas/logger';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\nimport type { HttpMethod } from '../types';\nimport { Endpoint, type EndpointSchemas, ResponseBuilder } from './Endpoint';\n\nimport type { EnvironmentParser } from '@geekmidas/envkit';\nimport middy, { type MiddlewareObj } from '@middy/core';\nimport type {\n APIGatewayProxyEvent,\n APIGatewayProxyEventV2,\n Context,\n} from 'aws-lambda';\nimport set from 'lodash.set';\n\nimport {\n UnauthorizedError,\n UnprocessableEntityError,\n wrapError,\n} from '@geekmidas/errors';\nimport type { EventPublisher } from '@geekmidas/events';\nimport {\n type Service,\n ServiceDiscovery,\n type ServiceRecord,\n} from '@geekmidas/services';\n\nimport type {\n InferComposableStandardSchema,\n InferStandardSchema,\n} from '@geekmidas/schema';\nimport { publishConstructEvents } from '../publisher';\nimport type { CookieFn, HeaderFn } from './Endpoint';\nimport type { MappedAudit } from './audit';\nimport {\n createAuditContext,\n executeWithAuditTransaction,\n} from './processAudits';\n\n// Helper function to publish events\n\nexport abstract class AmazonApiGatewayEndpoint<\n THandler extends\n | AmazonApiGatewayV1EndpointHandler\n | AmazonApiGatewayV2EndpointHandler,\n TEvent extends HandlerEvent<THandler>,\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 TEventPublisherServiceName extends string = string,\n TAuditStorage extends AuditStorage | undefined = undefined,\n TAuditStorageServiceName extends string = string,\n TAuditAction extends AuditableAction<string, unknown> = AuditableAction<\n string,\n unknown\n >,\n> {\n constructor(\n protected envParser: EnvironmentParser<{}>,\n protected readonly endpoint: Endpoint<\n TRoute,\n TMethod,\n TInput,\n TOutSchema,\n TServices,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction\n >,\n ) {}\n\n private error(): Middleware<TEvent, TInput, TServices, TLogger> {\n return {\n onError: (req) => {\n (req.event.logger || this.endpoint.logger).error(\n req.error || {},\n 'Error processing request',\n );\n const wrappedError = wrapError(req.error);\n\n // Set the response with the proper status code from the HttpError\n req.response = {\n statusCode: wrappedError.statusCode,\n body: wrappedError.body,\n };\n },\n };\n }\n abstract getInput(e: TEvent): GetInputResponse;\n\n private input(): Middleware<TEvent, TInput, TServices, TLogger> {\n return {\n before: async (req) => {\n try {\n const { body, query, params } = this.getInput(req.event);\n const headers = req.event.headers as Record<string, string>;\n const header = Endpoint.createHeaders(headers);\n const cookie = Endpoint.createCookies(headers.cookie);\n\n set(req.event, 'body', await this.endpoint.parseInput(body, 'body'));\n\n set(\n req.event,\n 'query',\n await this.endpoint.parseInput(query, 'query'),\n );\n set(\n req.event,\n 'params',\n await this.endpoint.parseInput(params, 'params'),\n );\n set(req.event, 'header', header);\n set(req.event, 'cookie', cookie);\n } catch (error) {\n // Convert validation errors to 422 Unprocessable Entity\n if (error && typeof error === 'object' && Array.isArray(error)) {\n throw new UnprocessableEntityError('Validation failed', error);\n }\n throw error;\n }\n },\n };\n }\n\n abstract getLoggerContext(data: TEvent, context: Context): LoggerContext;\n\n private logger(): Middleware<TEvent, TInput, TServices, TLogger> {\n return {\n before: (req) => {\n req.event.logger = this.endpoint.logger.child({\n route: this.endpoint.route,\n host: req.event.headers?.host,\n method: this.endpoint.method,\n ...this.getLoggerContext(req.event, req.context),\n }) as TLogger;\n },\n };\n }\n private services(): Middleware<TEvent, TInput, TServices, TLogger> {\n return {\n before: async (req) => {\n const logger = req.event.logger as TLogger;\n const serviceDiscovery = ServiceDiscovery.getInstance<\n ServiceRecord<TServices>,\n TLogger\n >(logger, this.envParser);\n\n const services = await serviceDiscovery.register(\n this.endpoint.services,\n );\n\n req.event.services = services;\n },\n };\n }\n\n private authorize(): Middleware<TEvent, TInput, TServices, TLogger> {\n return {\n before: async (req) => {\n const logger = req.event.logger as TLogger;\n const services = req.event.services;\n const header = req.event.header;\n const cookie = req.event.cookie;\n const session = req.event.session as TSession;\n\n const isAuthorized = await this.endpoint.authorize({\n header,\n cookie,\n services,\n logger,\n session,\n });\n\n if (!isAuthorized) {\n logger.warn('Unauthorized access attempt');\n throw new UnauthorizedError(\n 'Unauthorized access to the endpoint',\n 'You do not have permission to access this resource.',\n );\n }\n },\n };\n }\n\n private session(): Middleware<TEvent, TInput, TServices, TLogger> {\n return {\n before: async (req) => {\n const logger = req.event.logger as TLogger;\n const services = req.event.services;\n req.event.session = (await this.endpoint.getSession({\n logger,\n services,\n header: req.event.header,\n cookie: req.event.cookie,\n })) as TSession;\n },\n };\n }\n\n private events(): Middleware<TEvent, TInput, TServices, TLogger> {\n return {\n after: async (req) => {\n const event = req.event;\n const response = (event as any)\n .__response as InferStandardSchema<TOutSchema>;\n const statusCode = req.response?.statusCode ?? this.endpoint.status;\n\n // Only publish events on successful responses (2xx status codes)\n // Note: Audits are processed inside the handler's transaction\n if (Endpoint.isSuccessStatus(statusCode)) {\n const logger = event.logger as TLogger;\n const serviceDiscovery = ServiceDiscovery.getInstance<\n ServiceRecord<TServices>,\n TLogger\n >(logger, this.envParser);\n\n // Publish events\n await publishConstructEvents(\n this.endpoint,\n response,\n serviceDiscovery,\n logger,\n );\n }\n },\n };\n }\n\n private async _handler(\n event: Event<TEvent, TInput, TServices, TLogger, TSession>,\n ) {\n const input = this.endpoint.refineInput(event);\n const logger = event.logger as TLogger;\n const serviceDiscovery = ServiceDiscovery.getInstance<\n ServiceRecord<TServices>,\n TLogger\n >(logger, this.envParser);\n\n // Create audit context if audit storage is configured\n const auditContext = await createAuditContext(\n this.endpoint,\n serviceDiscovery,\n logger,\n {\n session: event.session,\n header: event.header,\n cookie: event.cookie,\n services: event.services as Record<string, unknown>,\n },\n );\n\n // Warn if declarative audits are configured but no audit storage\n const audits = this.endpoint.audits as MappedAudit<\n TAuditAction,\n TOutSchema\n >[];\n if (!auditContext && audits?.length) {\n logger.warn('No auditor storage service available');\n }\n\n // Resolve database service if configured\n const rawDb = this.endpoint.databaseService\n ? await serviceDiscovery\n .register([this.endpoint.databaseService])\n .then(\n (s) =>\n s[this.endpoint.databaseService!.serviceName as keyof typeof s],\n )\n : undefined;\n\n // Execute handler with automatic audit transaction support\n const result = await executeWithAuditTransaction(\n auditContext,\n async (auditor) => {\n // Use audit transaction as db only if the storage uses the same database service\n const sameDatabase =\n auditContext?.storage?.databaseServiceName &&\n auditContext.storage.databaseServiceName ===\n this.endpoint.databaseService?.serviceName;\n const db = sameDatabase\n ? (auditor?.getTransaction?.() ?? rawDb)\n : rawDb;\n\n const responseBuilder = new ResponseBuilder();\n const response = await this.endpoint.handler(\n {\n header: event.header,\n cookie: event.cookie,\n logger: event.logger,\n services: event.services,\n session: event.session,\n auditor,\n db,\n ...input,\n } as any,\n responseBuilder,\n );\n\n // Check if response has metadata\n let data = response;\n let metadata = responseBuilder.getMetadata();\n\n if (Endpoint.hasMetadata(response)) {\n data = response.data;\n metadata = response.metadata;\n }\n\n const output = this.endpoint.outputSchema\n ? await this.endpoint.parseOutput(data)\n : undefined;\n\n return { output, metadata, responseBuilder };\n },\n // Process declarative audits after handler (inside transaction)\n async (result, auditor) => {\n if (!audits?.length) return;\n\n for (const audit of audits) {\n if (audit.when && !audit.when(result.output as any)) {\n continue;\n }\n const payload = audit.payload(result.output as any);\n const entityId = audit.entityId?.(result.output as any);\n auditor.audit(audit.type as any, payload as any, {\n table: audit.table,\n entityId,\n });\n }\n },\n );\n\n const { output, metadata } = result;\n const body = output !== undefined ? JSON.stringify(output) : undefined;\n\n // Store response for middleware access\n (event as any).__response = output;\n\n // Build response with metadata\n const lambdaResponse: AmazonApiGatewayEndpointHandlerResponse = {\n statusCode: metadata.status ?? this.endpoint.status,\n body,\n };\n\n // Add custom headers\n if (metadata.headers && Object.keys(metadata.headers).length > 0) {\n lambdaResponse.headers = { ...metadata.headers };\n }\n\n // Format cookies as Set-Cookie headers\n if (metadata.cookies && metadata.cookies.size > 0) {\n const setCookieHeaders: string[] = [];\n for (const [name, { value, options }] of metadata.cookies) {\n setCookieHeaders.push(\n Endpoint.formatCookieHeader(name, value, options),\n );\n }\n\n if (setCookieHeaders.length > 0) {\n lambdaResponse.multiValueHeaders = {\n ...lambdaResponse.multiValueHeaders,\n 'Set-Cookie': setCookieHeaders,\n };\n }\n }\n\n return lambdaResponse;\n }\n\n get handler() {\n const handler = this._handler.bind(this);\n return middy(handler)\n .use(this.logger())\n .use(this.error())\n .use(this.services())\n .use(this.input())\n .use(this.session())\n .use(this.authorize())\n .use(this.events()) as unknown as THandler;\n }\n}\n\nexport type Event<\n TEvent extends APIGatewayProxyEvent | APIGatewayProxyEventV2,\n TInput extends EndpointSchemas = {},\n TServices extends Service[] = [],\n TLogger extends Logger = Logger,\n TSession = unknown,\n> = {\n services: ServiceRecord<TServices>;\n logger: TLogger;\n header: HeaderFn;\n cookie: CookieFn;\n session: TSession;\n} & TEvent &\n InferComposableStandardSchema<TInput>;\n\ntype Middleware<\n TEvent extends APIGatewayProxyEvent | APIGatewayProxyEventV2,\n TInput extends EndpointSchemas = {},\n TServices extends Service[] = [],\n TLogger extends Logger = Logger,\n TSession = unknown,\n> = MiddlewareObj<Event<TEvent, TInput, TServices, TLogger, TSession>>;\n\nexport type AmazonApiGatewayEndpointHandlerResponse = {\n statusCode: number;\n body: string | undefined;\n headers?: Record<string, string>;\n multiValueHeaders?: Record<string, string[]>;\n};\n\nexport type LoggerContext = {\n fn: {\n name: string;\n version: string;\n };\n req: {\n id: string | undefined;\n awsRequestId: string;\n path: string;\n ip: string | undefined;\n userAgent: string | undefined;\n };\n};\n\nexport type GetInputResponse = {\n body: any;\n query: any;\n params: any;\n};\n\nexport type AmazonApiGatewayV1EndpointHandler = (\n event: APIGatewayProxyEvent,\n context: Context,\n) => Promise<AmazonApiGatewayEndpointHandlerResponse>;\n\nexport type AmazonApiGatewayV2EndpointHandler = (\n event: APIGatewayProxyEventV2,\n context: Context,\n) => Promise<AmazonApiGatewayEndpointHandlerResponse>;\n\nexport type HandlerEvent<T extends Function> = T extends (\n event: infer E,\n context: Context,\n) => any\n ? E\n : never;\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"AmazonApiGatewayEndpointAdaptor-DBK53gB5.mjs","names":["envParser: EnvironmentParser<{}>","endpoint: Endpoint<\n TRoute,\n TMethod,\n TInput,\n TOutSchema,\n TServices,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction\n >","event: Event<TEvent, TInput, TServices, TLogger, TSession>","metadata","output","result","lambdaResponse: AmazonApiGatewayEndpointHandlerResponse","setCookieHeaders: string[]"],"sources":["../src/endpoints/AmazonApiGatewayEndpointAdaptor.ts"],"sourcesContent":["import type { AuditStorage, AuditableAction } from '@geekmidas/audit';\nimport type { Logger } from '@geekmidas/logger';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\nimport type { HttpMethod } from '../types';\nimport { Endpoint, type EndpointSchemas, ResponseBuilder } from './Endpoint';\n\nimport type { EnvironmentParser } from '@geekmidas/envkit';\nimport middy, { type MiddlewareObj } from '@middy/core';\nimport type {\n APIGatewayProxyEvent,\n APIGatewayProxyEventV2,\n Context,\n} from 'aws-lambda';\nimport set from 'lodash.set';\n\nimport {\n UnauthorizedError,\n UnprocessableEntityError,\n wrapError,\n} from '@geekmidas/errors';\nimport type { EventPublisher } from '@geekmidas/events';\nimport {\n type Service,\n ServiceDiscovery,\n type ServiceRecord,\n} from '@geekmidas/services';\n\nimport type {\n InferComposableStandardSchema,\n InferStandardSchema,\n} from '@geekmidas/schema';\nimport { publishConstructEvents } from '../publisher';\nimport type { CookieFn, HeaderFn } from './Endpoint';\nimport type { MappedAudit } from './audit';\nimport {\n createAuditContext,\n executeWithAuditTransaction,\n} from './processAudits';\n\n// Helper function to publish events\n\nexport abstract class AmazonApiGatewayEndpoint<\n THandler extends\n | AmazonApiGatewayV1EndpointHandler\n | AmazonApiGatewayV2EndpointHandler,\n TEvent extends HandlerEvent<THandler>,\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 TEventPublisherServiceName extends string = string,\n TAuditStorage extends AuditStorage | undefined = undefined,\n TAuditStorageServiceName extends string = string,\n TAuditAction extends AuditableAction<string, unknown> = AuditableAction<\n string,\n unknown\n >,\n> {\n constructor(\n protected envParser: EnvironmentParser<{}>,\n protected readonly endpoint: Endpoint<\n TRoute,\n TMethod,\n TInput,\n TOutSchema,\n TServices,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction\n >,\n ) {}\n\n private error(): Middleware<TEvent, TInput, TServices, TLogger> {\n return {\n onError: (req) => {\n (req.event.logger || this.endpoint.logger).error(\n req.error || {},\n 'Error processing request',\n );\n const wrappedError = wrapError(req.error);\n\n // Set the response with the proper status code from the HttpError\n req.response = {\n statusCode: wrappedError.statusCode,\n body: wrappedError.body,\n };\n },\n };\n }\n abstract getInput(e: TEvent): GetInputResponse;\n\n private input(): Middleware<TEvent, TInput, TServices, TLogger> {\n return {\n before: async (req) => {\n try {\n const { body, query, params } = this.getInput(req.event);\n const headers = req.event.headers as Record<string, string>;\n const header = Endpoint.createHeaders(headers);\n const cookie = Endpoint.createCookies(headers.cookie);\n\n set(req.event, 'body', await this.endpoint.parseInput(body, 'body'));\n\n set(\n req.event,\n 'query',\n await this.endpoint.parseInput(query, 'query'),\n );\n set(\n req.event,\n 'params',\n await this.endpoint.parseInput(params, 'params'),\n );\n set(req.event, 'header', header);\n set(req.event, 'cookie', cookie);\n } catch (error) {\n // Convert validation errors to 422 Unprocessable Entity\n if (error && typeof error === 'object' && Array.isArray(error)) {\n throw new UnprocessableEntityError('Validation failed', error);\n }\n throw error;\n }\n },\n };\n }\n\n abstract getLoggerContext(data: TEvent, context: Context): LoggerContext;\n\n private logger(): Middleware<TEvent, TInput, TServices, TLogger> {\n return {\n before: (req) => {\n req.event.logger = this.endpoint.logger.child({\n route: this.endpoint.route,\n host: req.event.headers?.host,\n method: this.endpoint.method,\n ...this.getLoggerContext(req.event, req.context),\n }) as TLogger;\n },\n };\n }\n private services(): Middleware<TEvent, TInput, TServices, TLogger> {\n return {\n before: async (req) => {\n const logger = req.event.logger as TLogger;\n const serviceDiscovery = ServiceDiscovery.getInstance<\n ServiceRecord<TServices>,\n TLogger\n >(logger, this.envParser);\n\n const services = await serviceDiscovery.register(\n this.endpoint.services,\n );\n\n req.event.services = services;\n },\n };\n }\n\n private authorize(): Middleware<TEvent, TInput, TServices, TLogger> {\n return {\n before: async (req) => {\n const logger = req.event.logger as TLogger;\n const services = req.event.services;\n const header = req.event.header;\n const cookie = req.event.cookie;\n const session = req.event.session as TSession;\n\n const isAuthorized = await this.endpoint.authorize({\n header,\n cookie,\n services,\n logger,\n session,\n });\n\n if (!isAuthorized) {\n logger.warn('Unauthorized access attempt');\n throw new UnauthorizedError(\n 'Unauthorized access to the endpoint',\n 'You do not have permission to access this resource.',\n );\n }\n },\n };\n }\n\n private session(): Middleware<TEvent, TInput, TServices, TLogger> {\n return {\n before: async (req) => {\n const logger = req.event.logger as TLogger;\n const services = req.event.services;\n req.event.session = (await this.endpoint.getSession({\n logger,\n services,\n header: req.event.header,\n cookie: req.event.cookie,\n })) as TSession;\n },\n };\n }\n\n private events(): Middleware<TEvent, TInput, TServices, TLogger> {\n return {\n after: async (req) => {\n const event = req.event;\n const response = (event as any)\n .__response as InferStandardSchema<TOutSchema>;\n const statusCode = req.response?.statusCode ?? this.endpoint.status;\n\n // Only publish events on successful responses (2xx status codes)\n // Note: Audits are processed inside the handler's transaction\n if (Endpoint.isSuccessStatus(statusCode)) {\n const logger = event.logger as TLogger;\n const serviceDiscovery = ServiceDiscovery.getInstance<\n ServiceRecord<TServices>,\n TLogger\n >(logger, this.envParser);\n\n // Publish events\n await publishConstructEvents(\n this.endpoint,\n response,\n serviceDiscovery,\n logger,\n );\n }\n },\n };\n }\n\n private async _handler(\n event: Event<TEvent, TInput, TServices, TLogger, TSession>,\n ) {\n const input = this.endpoint.refineInput(event);\n const logger = event.logger as TLogger;\n const serviceDiscovery = ServiceDiscovery.getInstance<\n ServiceRecord<TServices>,\n TLogger\n >(logger, this.envParser);\n\n // Create audit context if audit storage is configured\n const auditContext = await createAuditContext(\n this.endpoint,\n serviceDiscovery,\n logger,\n {\n session: event.session,\n header: event.header,\n cookie: event.cookie,\n services: event.services as Record<string, unknown>,\n },\n );\n\n // Warn if declarative audits are configured but no audit storage\n const audits = this.endpoint.audits as MappedAudit<\n TAuditAction,\n TOutSchema\n >[];\n if (!auditContext && audits?.length) {\n logger.warn('No auditor storage service available');\n }\n\n // Resolve database service if configured\n const rawDb = this.endpoint.databaseService\n ? await serviceDiscovery\n .register([this.endpoint.databaseService])\n .then(\n (s) =>\n s[this.endpoint.databaseService!.serviceName as keyof typeof s],\n )\n : undefined;\n\n // Execute handler with automatic audit transaction support\n const result = await executeWithAuditTransaction(\n auditContext,\n async (auditor) => {\n // Use audit transaction as db only if the storage uses the same database service\n const sameDatabase =\n auditContext?.storage?.databaseServiceName &&\n auditContext.storage.databaseServiceName ===\n this.endpoint.databaseService?.serviceName;\n const db = sameDatabase\n ? (auditor?.getTransaction?.() ?? rawDb)\n : rawDb;\n\n const responseBuilder = new ResponseBuilder();\n const response = await this.endpoint.handler(\n {\n header: event.header,\n cookie: event.cookie,\n logger: event.logger,\n services: event.services,\n session: event.session,\n auditor,\n db,\n ...input,\n } as any,\n responseBuilder,\n );\n\n // Check if response has metadata\n let data = response;\n let metadata = responseBuilder.getMetadata();\n\n if (Endpoint.hasMetadata(response)) {\n data = response.data;\n metadata = response.metadata;\n }\n\n const output = this.endpoint.outputSchema\n ? await this.endpoint.parseOutput(data)\n : undefined;\n\n return { output, metadata, responseBuilder };\n },\n // Process declarative audits after handler (inside transaction)\n async (result, auditor) => {\n if (!audits?.length) return;\n\n for (const audit of audits) {\n if (audit.when && !audit.when(result.output as any)) {\n continue;\n }\n const payload = audit.payload(result.output as any);\n const entityId = audit.entityId?.(result.output as any);\n auditor.audit(audit.type as any, payload as any, {\n table: audit.table,\n entityId,\n });\n }\n },\n );\n\n const { output, metadata } = result;\n const body = output !== undefined ? JSON.stringify(output) : undefined;\n\n // Store response for middleware access\n (event as any).__response = output;\n\n // Build response with metadata\n const lambdaResponse: AmazonApiGatewayEndpointHandlerResponse = {\n statusCode: metadata.status ?? this.endpoint.status,\n body,\n };\n\n // Add custom headers\n if (metadata.headers && Object.keys(metadata.headers).length > 0) {\n lambdaResponse.headers = { ...metadata.headers };\n }\n\n // Format cookies as Set-Cookie headers\n if (metadata.cookies && metadata.cookies.size > 0) {\n const setCookieHeaders: string[] = [];\n for (const [name, { value, options }] of metadata.cookies) {\n setCookieHeaders.push(\n Endpoint.formatCookieHeader(name, value, options),\n );\n }\n\n if (setCookieHeaders.length > 0) {\n lambdaResponse.multiValueHeaders = {\n ...lambdaResponse.multiValueHeaders,\n 'Set-Cookie': setCookieHeaders,\n };\n }\n }\n\n return lambdaResponse;\n }\n\n get handler() {\n const handler = this._handler.bind(this);\n return middy(handler)\n .use(this.logger())\n .use(this.error())\n .use(this.services())\n .use(this.input())\n .use(this.session())\n .use(this.authorize())\n .use(this.events()) as unknown as THandler;\n }\n}\n\nexport type Event<\n TEvent extends APIGatewayProxyEvent | APIGatewayProxyEventV2,\n TInput extends EndpointSchemas = {},\n TServices extends Service[] = [],\n TLogger extends Logger = Logger,\n TSession = unknown,\n> = {\n services: ServiceRecord<TServices>;\n logger: TLogger;\n header: HeaderFn;\n cookie: CookieFn;\n session: TSession;\n} & TEvent &\n InferComposableStandardSchema<TInput>;\n\ntype Middleware<\n TEvent extends APIGatewayProxyEvent | APIGatewayProxyEventV2,\n TInput extends EndpointSchemas = {},\n TServices extends Service[] = [],\n TLogger extends Logger = Logger,\n TSession = unknown,\n> = MiddlewareObj<Event<TEvent, TInput, TServices, TLogger, TSession>>;\n\nexport type AmazonApiGatewayEndpointHandlerResponse = {\n statusCode: number;\n body: string | undefined;\n headers?: Record<string, string>;\n multiValueHeaders?: Record<string, string[]>;\n};\n\nexport type LoggerContext = {\n fn: {\n name: string;\n version: string;\n };\n req: {\n id: string | undefined;\n awsRequestId: string;\n path: string;\n ip: string | undefined;\n userAgent: string | undefined;\n };\n};\n\nexport type GetInputResponse = {\n body: any;\n query: any;\n params: any;\n};\n\nexport type AmazonApiGatewayV1EndpointHandler = (\n event: APIGatewayProxyEvent,\n context: Context,\n) => Promise<AmazonApiGatewayEndpointHandlerResponse>;\n\nexport type AmazonApiGatewayV2EndpointHandler = (\n event: APIGatewayProxyEventV2,\n context: Context,\n) => Promise<AmazonApiGatewayEndpointHandlerResponse>;\n\nexport type HandlerEvent<T extends Function> = T extends (\n event: infer E,\n context: Context,\n) => any\n ? E\n : never;\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Cron-CmtKQOmE.cjs","names":["Function","obj: any","ConstructType","fn: FunctionHandler<TInput, TServices, TLogger, OutSchema, TDatabase>","timeout?: number","_schedule?: ScheduleExpression","input?: TInput","outputSchema?: OutSchema","services: TServices","logger?: TLogger","publisherService?: Service<TEventPublisherServiceName, TEventPublisher>","events: any[]","memorySize?: number","databaseService?: Service<TDatabaseServiceName, TDatabase>"],"sources":["../src/crons/Cron.ts"],"sourcesContent":["import type { Logger } from '@geekmidas/logger';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\n\nimport { ConstructType } from '../Construct';\nimport { Function, type FunctionHandler } from '../functions';\n\nimport type { EventPublisher } from '@geekmidas/events';\nimport type { ComposableStandardSchema } from '@geekmidas/schema';\nimport type { Service } from '@geekmidas/services';\n\nexport class Cron<\n TInput extends ComposableStandardSchema | undefined = undefined,\n TServices extends Service[] = [],\n TLogger extends Logger = Logger,\n OutSchema extends StandardSchemaV1 | undefined = undefined,\n TEventPublisher extends EventPublisher<any> | undefined = undefined,\n TEventPublisherServiceName extends string = string,\n TDatabase = undefined,\n TDatabaseServiceName extends string = string,\n> extends Function<\n TInput,\n TServices,\n TLogger,\n OutSchema,\n FunctionHandler<TInput, TServices, TLogger, OutSchema, TDatabase>,\n TEventPublisher,\n TEventPublisherServiceName,\n undefined,\n string,\n TDatabase,\n TDatabaseServiceName\n> {\n static isCron(obj: any): obj is Cron<any, any, any, any> {\n return Boolean(\n obj &&\n (obj as Function).__IS_FUNCTION__ === true &&\n obj.type === ConstructType.Cron,\n );\n }\n\n constructor(\n fn: FunctionHandler<TInput, TServices, TLogger, OutSchema, TDatabase>,\n timeout?: number,\n protected _schedule?: ScheduleExpression,\n input?: TInput,\n outputSchema?: OutSchema,\n services: TServices = [] as unknown as TServices,\n logger?: TLogger,\n publisherService?: Service<TEventPublisherServiceName, TEventPublisher>,\n events: any[] = [],\n memorySize?: number,\n databaseService?: Service<TDatabaseServiceName, TDatabase>,\n ) {\n super(\n fn,\n timeout,\n ConstructType.Cron,\n input,\n outputSchema,\n services,\n logger,\n publisherService,\n events,\n memorySize,\n undefined, // auditorStorageService\n databaseService,\n );\n }\n\n get schedule(): ScheduleExpression | undefined {\n return this._schedule;\n }\n}\n\nexport type RateExpression = `rate(${string})`;\n\ntype CronMinute =\n | '*'\n | number\n | `${number}`\n | `${number}-${number}`\n | `${number}/${number}`\n | `*/${number}`\n | `${number},${number}`\n | string; // Allow more complex patterns\n\ntype CronHour =\n | '*'\n | number\n | `${number}`\n | `${number}-${number}`\n | `${number}/${number}`\n | `*/${number}`\n | `${number},${number}`\n | string; // Allow more complex patterns\n\ntype CronDay =\n | '*'\n | number\n | `${number}`\n | `${number}-${number}`\n | `${number}/${number}`\n | `*/${number}`\n | `${number},${number}`\n | string; // Allow more complex patterns\n\ntype CronMonth =\n | '*'\n | number\n | `${number}`\n | `${number}-${number}`\n | `${number}/${number}`\n | `*/${number}`\n | 'JAN'\n | 'FEB'\n | 'MAR'\n | 'APR'\n | 'MAY'\n | 'JUN'\n | 'JUL'\n | 'AUG'\n | 'SEP'\n | 'OCT'\n | 'NOV'\n | 'DEC'\n | string; // Allow more complex patterns\n\ntype CronWeekday =\n | '*'\n | number\n | `${number}`\n | `${number}-${number}`\n | `${number}/${number}`\n | `*/${number}`\n | 'SUN'\n | 'MON'\n | 'TUE'\n | 'WED'\n | 'THU'\n | 'FRI'\n | 'SAT'\n | `${string}-${string}` // Allow patterns like MON-FRI\n | string; // Allow more complex patterns\n\nexport type CronExpression =\n `cron(${CronMinute} ${CronHour} ${CronDay} ${CronMonth} ${CronWeekday})`;\n\nexport type ScheduleExpression = RateExpression | CronExpression;\n"],"mappings":";;;;AAUA,IAAa,OAAb,cASUA,0BAYR;CACA,OAAO,OAAOC,KAA2C;AACvD,SAAO,QACL,OACG,IAAiB,oBAAoB,QACtC,IAAI,SAASC,gCAAc,KAC9B;CACF;CAED,YACEC,IACAC,SACUC,WACVC,OACAC,cACAC,WAAsB,CAAE,GACxBC,QACAC,kBACAC,SAAgB,CAAE,GAClBC,YACAC,iBACA;AACA,QACE,IACA,SACAX,gCAAc,MACd,OACA,cACA,UACA,QACA,kBACA,QACA,oBAEA,gBACD;EAvBS;CAwBX;CAED,IAAI,WAA2C;AAC7C,SAAO,KAAK;CACb;AACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Cron-mWi3PQxt.mjs","names":["obj: any","fn: FunctionHandler<TInput, TServices, TLogger, OutSchema, TDatabase>","timeout?: number","_schedule?: ScheduleExpression","input?: TInput","outputSchema?: OutSchema","services: TServices","logger?: TLogger","publisherService?: Service<TEventPublisherServiceName, TEventPublisher>","events: any[]","memorySize?: number","databaseService?: Service<TDatabaseServiceName, TDatabase>"],"sources":["../src/crons/Cron.ts"],"sourcesContent":["import type { Logger } from '@geekmidas/logger';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\n\nimport { ConstructType } from '../Construct';\nimport { Function, type FunctionHandler } from '../functions';\n\nimport type { EventPublisher } from '@geekmidas/events';\nimport type { ComposableStandardSchema } from '@geekmidas/schema';\nimport type { Service } from '@geekmidas/services';\n\nexport class Cron<\n TInput extends ComposableStandardSchema | undefined = undefined,\n TServices extends Service[] = [],\n TLogger extends Logger = Logger,\n OutSchema extends StandardSchemaV1 | undefined = undefined,\n TEventPublisher extends EventPublisher<any> | undefined = undefined,\n TEventPublisherServiceName extends string = string,\n TDatabase = undefined,\n TDatabaseServiceName extends string = string,\n> extends Function<\n TInput,\n TServices,\n TLogger,\n OutSchema,\n FunctionHandler<TInput, TServices, TLogger, OutSchema, TDatabase>,\n TEventPublisher,\n TEventPublisherServiceName,\n undefined,\n string,\n TDatabase,\n TDatabaseServiceName\n> {\n static isCron(obj: any): obj is Cron<any, any, any, any> {\n return Boolean(\n obj &&\n (obj as Function).__IS_FUNCTION__ === true &&\n obj.type === ConstructType.Cron,\n );\n }\n\n constructor(\n fn: FunctionHandler<TInput, TServices, TLogger, OutSchema, TDatabase>,\n timeout?: number,\n protected _schedule?: ScheduleExpression,\n input?: TInput,\n outputSchema?: OutSchema,\n services: TServices = [] as unknown as TServices,\n logger?: TLogger,\n publisherService?: Service<TEventPublisherServiceName, TEventPublisher>,\n events: any[] = [],\n memorySize?: number,\n databaseService?: Service<TDatabaseServiceName, TDatabase>,\n ) {\n super(\n fn,\n timeout,\n ConstructType.Cron,\n input,\n outputSchema,\n services,\n logger,\n publisherService,\n events,\n memorySize,\n undefined, // auditorStorageService\n databaseService,\n );\n }\n\n get schedule(): ScheduleExpression | undefined {\n return this._schedule;\n }\n}\n\nexport type RateExpression = `rate(${string})`;\n\ntype CronMinute =\n | '*'\n | number\n | `${number}`\n | `${number}-${number}`\n | `${number}/${number}`\n | `*/${number}`\n | `${number},${number}`\n | string; // Allow more complex patterns\n\ntype CronHour =\n | '*'\n | number\n | `${number}`\n | `${number}-${number}`\n | `${number}/${number}`\n | `*/${number}`\n | `${number},${number}`\n | string; // Allow more complex patterns\n\ntype CronDay =\n | '*'\n | number\n | `${number}`\n | `${number}-${number}`\n | `${number}/${number}`\n | `*/${number}`\n | `${number},${number}`\n | string; // Allow more complex patterns\n\ntype CronMonth =\n | '*'\n | number\n | `${number}`\n | `${number}-${number}`\n | `${number}/${number}`\n | `*/${number}`\n | 'JAN'\n | 'FEB'\n | 'MAR'\n | 'APR'\n | 'MAY'\n | 'JUN'\n | 'JUL'\n | 'AUG'\n | 'SEP'\n | 'OCT'\n | 'NOV'\n | 'DEC'\n | string; // Allow more complex patterns\n\ntype CronWeekday =\n | '*'\n | number\n | `${number}`\n | `${number}-${number}`\n | `${number}/${number}`\n | `*/${number}`\n | 'SUN'\n | 'MON'\n | 'TUE'\n | 'WED'\n | 'THU'\n | 'FRI'\n | 'SAT'\n | `${string}-${string}` // Allow patterns like MON-FRI\n | string; // Allow more complex patterns\n\nexport type CronExpression =\n `cron(${CronMinute} ${CronHour} ${CronDay} ${CronMonth} ${CronWeekday})`;\n\nexport type ScheduleExpression = RateExpression | CronExpression;\n"],"mappings":";;;;AAUA,IAAa,OAAb,cASU,SAYR;CACA,OAAO,OAAOA,KAA2C;AACvD,SAAO,QACL,OACG,IAAiB,oBAAoB,QACtC,IAAI,SAAS,cAAc,KAC9B;CACF;CAED,YACEC,IACAC,SACUC,WACVC,OACAC,cACAC,WAAsB,CAAE,GACxBC,QACAC,kBACAC,SAAgB,CAAE,GAClBC,YACAC,iBACA;AACA,QACE,IACA,SACA,cAAc,MACd,OACA,cACA,UACA,QACA,kBACA,QACA,oBAEA,gBACD;EAvBS;CAwBX;CAED,IAAI,WAA2C;AAC7C,SAAO,KAAK;CACb;AACF"}