@geekmidas/constructs 0.2.4 → 0.3.1

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 (373) hide show
  1. package/dist/{AWSLambdaFunction-gpqm7UBb.d.cts → AWSLambdaFunction-BdebRMUh.d.mts} +7 -5
  2. package/dist/AWSLambdaFunction-BdebRMUh.d.mts.map +1 -0
  3. package/dist/{AWSLambdaFunction-H65WfXLt.mjs → AWSLambdaFunction-C54a1doJ.mjs} +3 -3
  4. package/dist/AWSLambdaFunction-C54a1doJ.mjs.map +1 -0
  5. package/dist/{AWSLambdaFunction-D9RZhm0N.d.mts → AWSLambdaFunction-D0tEOTXQ.d.cts} +7 -5
  6. package/dist/AWSLambdaFunction-D0tEOTXQ.d.cts.map +1 -0
  7. package/dist/{AWSLambdaFunction-C-fuCLA3.cjs → AWSLambdaFunction-EPGY4s7i.cjs} +3 -3
  8. package/dist/AWSLambdaFunction-EPGY4s7i.cjs.map +1 -0
  9. package/dist/{AWSLambdaSubscriberAdaptor-CyFh7MN8.mjs → AWSLambdaSubscriberAdaptor-BLfO612H.mjs} +5 -3
  10. package/dist/{AWSLambdaSubscriberAdaptor-CyFh7MN8.mjs.map → AWSLambdaSubscriberAdaptor-BLfO612H.mjs.map} +1 -1
  11. package/dist/{AWSLambdaSubscriberAdaptor-Dum5bkw3.cjs → AWSLambdaSubscriberAdaptor-BNcYYZ-P.cjs} +5 -3
  12. package/dist/{AWSLambdaSubscriberAdaptor-Dum5bkw3.cjs.map → AWSLambdaSubscriberAdaptor-BNcYYZ-P.cjs.map} +1 -1
  13. package/dist/{AWSLambdaSubscriberAdaptor-C0aZBU64.d.mts → AWSLambdaSubscriberAdaptor-DrFAvHOp.d.mts} +4 -2
  14. package/dist/AWSLambdaSubscriberAdaptor-DrFAvHOp.d.mts.map +1 -0
  15. package/dist/{AWSLambdaSubscriberAdaptor-DT8icDRf.d.cts → AWSLambdaSubscriberAdaptor-Dx-Ks1Jp.d.cts} +4 -2
  16. package/dist/AWSLambdaSubscriberAdaptor-Dx-Ks1Jp.d.cts.map +1 -0
  17. package/dist/{AmazonApiGatewayEndpointAdaptor-pEWzF2uY.mjs → AmazonApiGatewayEndpointAdaptor-BT9JXihC.mjs} +2 -2
  18. package/dist/{AmazonApiGatewayEndpointAdaptor-pEWzF2uY.mjs.map → AmazonApiGatewayEndpointAdaptor-BT9JXihC.mjs.map} +1 -1
  19. package/dist/{AmazonApiGatewayEndpointAdaptor-CbJqLU6I.d.cts → AmazonApiGatewayEndpointAdaptor-DLqnYQ4E.d.cts} +5 -3
  20. package/dist/AmazonApiGatewayEndpointAdaptor-DLqnYQ4E.d.cts.map +1 -0
  21. package/dist/{AmazonApiGatewayEndpointAdaptor-Bk6ssx3K.cjs → AmazonApiGatewayEndpointAdaptor-DNFvvdmW.cjs} +2 -2
  22. package/dist/{AmazonApiGatewayEndpointAdaptor-Bk6ssx3K.cjs.map → AmazonApiGatewayEndpointAdaptor-DNFvvdmW.cjs.map} +1 -1
  23. package/dist/{AmazonApiGatewayEndpointAdaptor-DC3N7zY_.d.mts → AmazonApiGatewayEndpointAdaptor-qlKXuZxy.d.mts} +5 -3
  24. package/dist/AmazonApiGatewayEndpointAdaptor-qlKXuZxy.d.mts.map +1 -0
  25. package/dist/{AmazonApiGatewayV1EndpointAdaptor-MJpRbIaQ.mjs → AmazonApiGatewayV1EndpointAdaptor-CShQI8Gk.mjs} +3 -3
  26. package/dist/AmazonApiGatewayV1EndpointAdaptor-CShQI8Gk.mjs.map +1 -0
  27. package/dist/{AmazonApiGatewayV1EndpointAdaptor-uBp_4zLf.cjs → AmazonApiGatewayV1EndpointAdaptor-Ccl8B8kG.cjs} +3 -3
  28. package/dist/AmazonApiGatewayV1EndpointAdaptor-Ccl8B8kG.cjs.map +1 -0
  29. package/dist/{AmazonApiGatewayV1EndpointAdaptor-BVxgQ-7J.d.mts → AmazonApiGatewayV1EndpointAdaptor-DyUaJIhB.d.cts} +8 -6
  30. package/dist/AmazonApiGatewayV1EndpointAdaptor-DyUaJIhB.d.cts.map +1 -0
  31. package/dist/{AmazonApiGatewayV1EndpointAdaptor-CVwJ5k16.d.cts → AmazonApiGatewayV1EndpointAdaptor-MRUxs3Xi.d.mts} +8 -6
  32. package/dist/AmazonApiGatewayV1EndpointAdaptor-MRUxs3Xi.d.mts.map +1 -0
  33. package/dist/{AmazonApiGatewayV2EndpointAdaptor-I1W23Nvn.cjs → AmazonApiGatewayV2EndpointAdaptor-D8-0Aab4.cjs} +3 -3
  34. package/dist/AmazonApiGatewayV2EndpointAdaptor-D8-0Aab4.cjs.map +1 -0
  35. package/dist/{AmazonApiGatewayV2EndpointAdaptor-1oBZdQH3.d.cts → AmazonApiGatewayV2EndpointAdaptor-M1-w0U5R.d.cts} +6 -4
  36. package/dist/AmazonApiGatewayV2EndpointAdaptor-M1-w0U5R.d.cts.map +1 -0
  37. package/dist/{AmazonApiGatewayV2EndpointAdaptor-C3H8Hpv7.d.mts → AmazonApiGatewayV2EndpointAdaptor-fuLM6M9k.d.mts} +6 -4
  38. package/dist/AmazonApiGatewayV2EndpointAdaptor-fuLM6M9k.d.mts.map +1 -0
  39. package/dist/{AmazonApiGatewayV2EndpointAdaptor-ChO8BlDz.mjs → AmazonApiGatewayV2EndpointAdaptor-lCRzGE4q.mjs} +3 -3
  40. package/dist/AmazonApiGatewayV2EndpointAdaptor-lCRzGE4q.mjs.map +1 -0
  41. package/dist/{Authorizer-CpSUMTIs.d.cts → Authorizer-B-btowNd.d.cts} +2 -1
  42. package/dist/Authorizer-B-btowNd.d.cts.map +1 -0
  43. package/dist/{Authorizer-Cpx59w_q.d.mts → Authorizer-gWxYsGEp.d.mts} +2 -1
  44. package/dist/Authorizer-gWxYsGEp.d.mts.map +1 -0
  45. package/dist/{BaseFunctionBuilder-CoV7J45W.d.mts → BaseFunctionBuilder-BAtutR6q.d.cts} +5 -3
  46. package/dist/BaseFunctionBuilder-BAtutR6q.d.cts.map +1 -0
  47. package/dist/{BaseFunctionBuilder-B5gkW0Kt.mjs → BaseFunctionBuilder-Czi1Jwza.mjs} +2 -2
  48. package/dist/{BaseFunctionBuilder-B5gkW0Kt.mjs.map → BaseFunctionBuilder-Czi1Jwza.mjs.map} +1 -1
  49. package/dist/{BaseFunctionBuilder-DaQA0uKE.d.cts → BaseFunctionBuilder-DRY419e7.d.mts} +5 -3
  50. package/dist/BaseFunctionBuilder-DRY419e7.d.mts.map +1 -0
  51. package/dist/{BaseFunctionBuilder-C5Se7pdL.cjs → BaseFunctionBuilder-MYG3C9ug.cjs} +2 -2
  52. package/dist/{BaseFunctionBuilder-C5Se7pdL.cjs.map → BaseFunctionBuilder-MYG3C9ug.cjs.map} +1 -1
  53. package/dist/{Construct-BYSPikVm.cjs → Construct-Ba5cMxib.cjs} +2 -2
  54. package/dist/{Construct-BYSPikVm.cjs.map → Construct-Ba5cMxib.cjs.map} +1 -1
  55. package/dist/{Construct-Dkd8Kvc9.d.cts → Construct-C4rPE67v.d.cts} +8 -7
  56. package/dist/Construct-C4rPE67v.d.cts.map +1 -0
  57. package/dist/{Construct-LWeB1rSQ.mjs → Construct-DdyGHuag.mjs} +2 -2
  58. package/dist/{Construct-LWeB1rSQ.mjs.map → Construct-DdyGHuag.mjs.map} +1 -1
  59. package/dist/{Construct-jBKqb-Zi.d.mts → Construct-XrijZFFh.d.mts} +8 -7
  60. package/dist/Construct-XrijZFFh.d.mts.map +1 -0
  61. package/dist/Construct.cjs +1 -1
  62. package/dist/Construct.d.cts +1 -1
  63. package/dist/Construct.d.mts +1 -1
  64. package/dist/Construct.mjs +1 -1
  65. package/dist/{Cron-Dy_HW2Vv.mjs → Cron-BxhGs5up.mjs} +3 -3
  66. package/dist/{Cron-Dy_HW2Vv.mjs.map → Cron-BxhGs5up.mjs.map} +1 -1
  67. package/dist/{Cron-Bi3QOge_.cjs → Cron-CGF4YAfM.cjs} +3 -3
  68. package/dist/{Cron-Bi3QOge_.cjs.map → Cron-CGF4YAfM.cjs.map} +1 -1
  69. package/dist/{Cron-7VPR2cNR.d.cts → Cron-bDLcTvV5.d.cts} +4 -4
  70. package/dist/Cron-bDLcTvV5.d.cts.map +1 -0
  71. package/dist/{Cron-JZkp_fHy.d.mts → Cron-cdjlSKNp.d.mts} +4 -4
  72. package/dist/Cron-cdjlSKNp.d.mts.map +1 -0
  73. package/dist/{CronBuilder-290th4zF.d.cts → CronBuilder-BC4m5-p1.d.mts} +7 -5
  74. package/dist/CronBuilder-BC4m5-p1.d.mts.map +1 -0
  75. package/dist/{CronBuilder-Dv_w7Yri.cjs → CronBuilder-CcxKRtVP.cjs} +4 -4
  76. package/dist/CronBuilder-CcxKRtVP.cjs.map +1 -0
  77. package/dist/{CronBuilder-BmFDO0Dm.d.mts → CronBuilder-DKVXyE0Q.d.cts} +7 -5
  78. package/dist/CronBuilder-DKVXyE0Q.d.cts.map +1 -0
  79. package/dist/{CronBuilder-Bl3A2Zp4.mjs → CronBuilder-d2jh-IB2.mjs} +4 -4
  80. package/dist/CronBuilder-d2jh-IB2.mjs.map +1 -0
  81. package/dist/{Endpoint-CC2RGjkl.d.cts → Endpoint-BPv9_-m_.d.cts} +6 -4
  82. package/dist/Endpoint-BPv9_-m_.d.cts.map +1 -0
  83. package/dist/{Endpoint-BJo9Hhwm.cjs → Endpoint-BVGZXFyV.cjs} +3 -3
  84. package/dist/{Endpoint-BJo9Hhwm.cjs.map → Endpoint-BVGZXFyV.cjs.map} +1 -1
  85. package/dist/{Endpoint-C5djXyae.d.mts → Endpoint-BdwG75G_.d.mts} +6 -4
  86. package/dist/Endpoint-BdwG75G_.d.mts.map +1 -0
  87. package/dist/{Endpoint-B70_KKhu.mjs → Endpoint-CuOEswxJ.mjs} +3 -3
  88. package/dist/{Endpoint-B70_KKhu.mjs.map → Endpoint-CuOEswxJ.mjs.map} +1 -1
  89. package/dist/{EndpointBuilder-CD8LkBda.d.mts → EndpointBuilder-B3az942t.d.mts} +7 -5
  90. package/dist/EndpointBuilder-B3az942t.d.mts.map +1 -0
  91. package/dist/{EndpointBuilder-DeswNQdG.cjs → EndpointBuilder-Cgj1P_ra.cjs} +4 -4
  92. package/dist/EndpointBuilder-Cgj1P_ra.cjs.map +1 -0
  93. package/dist/{EndpointBuilder-vXk6eIJk.d.cts → EndpointBuilder-DIy_m1bu.d.cts} +7 -5
  94. package/dist/EndpointBuilder-DIy_m1bu.d.cts.map +1 -0
  95. package/dist/{EndpointBuilder-FyyoFTJ5.mjs → EndpointBuilder-DnCB1h1j.mjs} +4 -4
  96. package/dist/EndpointBuilder-DnCB1h1j.mjs.map +1 -0
  97. package/dist/{EndpointFactory-jAkQxWRj.d.mts → EndpointFactory-C-0nE6Jg.d.mts} +6 -4
  98. package/dist/EndpointFactory-C-0nE6Jg.d.mts.map +1 -0
  99. package/dist/{EndpointFactory-eZc-XpNm.cjs → EndpointFactory-CYj6BYok.cjs} +2 -2
  100. package/dist/{EndpointFactory-eZc-XpNm.cjs.map → EndpointFactory-CYj6BYok.cjs.map} +1 -1
  101. package/dist/{EndpointFactory-CAneQs06.mjs → EndpointFactory-CbdxPCIH.mjs} +2 -2
  102. package/dist/{EndpointFactory-CAneQs06.mjs.map → EndpointFactory-CbdxPCIH.mjs.map} +1 -1
  103. package/dist/{EndpointFactory-D8I4NNCo.d.cts → EndpointFactory-CyPbm3AD.d.cts} +6 -4
  104. package/dist/EndpointFactory-CyPbm3AD.d.cts.map +1 -0
  105. package/dist/{Function-DfKsM5Kx.mjs → Function-BVHqIDp9.mjs} +2 -2
  106. package/dist/{Function-DfKsM5Kx.mjs.map → Function-BVHqIDp9.mjs.map} +1 -1
  107. package/dist/{Function-DHD1V9QW.d.cts → Function-Cf7f_kCz.d.cts} +5 -5
  108. package/dist/Function-Cf7f_kCz.d.cts.map +1 -0
  109. package/dist/{Function-DagDbeXo.cjs → Function-DDZb1525.cjs} +2 -2
  110. package/dist/{Function-DagDbeXo.cjs.map → Function-DDZb1525.cjs.map} +1 -1
  111. package/dist/{Function-Vh1t-Qjj.d.mts → Function-DN2G6OT5.d.mts} +5 -5
  112. package/dist/Function-DN2G6OT5.d.mts.map +1 -0
  113. package/dist/{FunctionBuilder-3jsoFffg.d.mts → FunctionBuilder-CJBzzXL3.d.cts} +7 -5
  114. package/dist/FunctionBuilder-CJBzzXL3.d.cts.map +1 -0
  115. package/dist/{FunctionBuilder-CVT7bG2o.mjs → FunctionBuilder-CrDYgfiI.mjs} +4 -4
  116. package/dist/FunctionBuilder-CrDYgfiI.mjs.map +1 -0
  117. package/dist/{FunctionBuilder-FV6r3I7X.d.cts → FunctionBuilder-Cxx8D2na.d.mts} +7 -5
  118. package/dist/FunctionBuilder-Cxx8D2na.d.mts.map +1 -0
  119. package/dist/{FunctionBuilder-DXvG_XD-.cjs → FunctionBuilder-DswJ-9sD.cjs} +4 -4
  120. package/dist/FunctionBuilder-DswJ-9sD.cjs.map +1 -0
  121. package/dist/{FunctionExecutionWrapper-DkNycmOh.cjs → FunctionExecutionWrapper-BYI2bGTL.cjs} +2 -2
  122. package/dist/{FunctionExecutionWrapper-DkNycmOh.cjs.map → FunctionExecutionWrapper-BYI2bGTL.cjs.map} +1 -1
  123. package/dist/{FunctionExecutionWrapper-Bubnr0zA.mjs → FunctionExecutionWrapper-CLDh7Z2_.mjs} +2 -2
  124. package/dist/{FunctionExecutionWrapper-Bubnr0zA.mjs.map → FunctionExecutionWrapper-CLDh7Z2_.mjs.map} +1 -1
  125. package/dist/{FunctionExecutionWrapper-CI3CaoCo.d.mts → FunctionExecutionWrapper-DF260Aaj.d.mts} +4 -2
  126. package/dist/FunctionExecutionWrapper-DF260Aaj.d.mts.map +1 -0
  127. package/dist/{FunctionExecutionWrapper-DYt3C8b9.d.cts → FunctionExecutionWrapper-Qy8bmgFR.d.cts} +4 -2
  128. package/dist/FunctionExecutionWrapper-Qy8bmgFR.d.cts.map +1 -0
  129. package/dist/{HonoEndpointAdaptor-BusUWu1w.d.cts → HonoEndpointAdaptor-Bqm6SEuP.d.cts} +8 -6
  130. package/dist/HonoEndpointAdaptor-Bqm6SEuP.d.cts.map +1 -0
  131. package/dist/{HonoEndpointAdaptor-DodwLM0-.cjs → HonoEndpointAdaptor-CQe2FqMR.cjs} +5 -6
  132. package/dist/{HonoEndpointAdaptor-DodwLM0-.cjs.map → HonoEndpointAdaptor-CQe2FqMR.cjs.map} +1 -1
  133. package/dist/{HonoEndpointAdaptor-g8xxh3tS.d.mts → HonoEndpointAdaptor-CRe-ij5f.d.mts} +8 -6
  134. package/dist/HonoEndpointAdaptor-CRe-ij5f.d.mts.map +1 -0
  135. package/dist/{HonoEndpointAdaptor-CcvXzoYV.mjs → HonoEndpointAdaptor-Ce-2HBxn.mjs} +5 -6
  136. package/dist/{HonoEndpointAdaptor-CcvXzoYV.mjs.map → HonoEndpointAdaptor-Ce-2HBxn.mjs.map} +1 -1
  137. package/dist/{Subscriber-DOt3svUC.cjs → Subscriber-BiHjVXtM.cjs} +2 -2
  138. package/dist/Subscriber-BiHjVXtM.cjs.map +1 -0
  139. package/dist/{Subscriber-kCHbH2fZ.mjs → Subscriber-BmPf9GFb.mjs} +2 -2
  140. package/dist/Subscriber-BmPf9GFb.mjs.map +1 -0
  141. package/dist/{Subscriber-DMSzvO_J.d.cts → Subscriber-COYMSevD.d.cts} +6 -6
  142. package/dist/Subscriber-COYMSevD.d.cts.map +1 -0
  143. package/dist/{Subscriber-aNr1qkxR.d.mts → Subscriber-ikctpU3I.d.mts} +6 -6
  144. package/dist/Subscriber-ikctpU3I.d.mts.map +1 -0
  145. package/dist/{SubscriberBuilder-Cj2u9k5Q.cjs → SubscriberBuilder-Cp1C-xtT.cjs} +2 -2
  146. package/dist/{SubscriberBuilder-Cj2u9k5Q.cjs.map → SubscriberBuilder-Cp1C-xtT.cjs.map} +1 -1
  147. package/dist/{SubscriberBuilder-DmxMU89X.mjs → SubscriberBuilder-DJPEeYDJ.mjs} +2 -2
  148. package/dist/{SubscriberBuilder-DmxMU89X.mjs.map → SubscriberBuilder-DJPEeYDJ.mjs.map} +1 -1
  149. package/dist/{SubscriberBuilder-BxJM3Hz_.d.cts → SubscriberBuilder-D_9zzllj.d.mts} +5 -3
  150. package/dist/SubscriberBuilder-D_9zzllj.d.mts.map +1 -0
  151. package/dist/{SubscriberBuilder-CWS4tdbp.d.mts → SubscriberBuilder-ivHAGIVi.d.cts} +5 -3
  152. package/dist/SubscriberBuilder-ivHAGIVi.d.cts.map +1 -0
  153. package/dist/{TestEndpointAdaptor-1pPixE6y.mjs → TestEndpointAdaptor-BXTofAKc.mjs} +17 -2
  154. package/dist/TestEndpointAdaptor-BXTofAKc.mjs.map +1 -0
  155. package/dist/{TestEndpointAdaptor-5-unBV8O.d.mts → TestEndpointAdaptor-C10xBI--.d.cts} +4 -4
  156. package/dist/TestEndpointAdaptor-C10xBI--.d.cts.map +1 -0
  157. package/dist/{TestEndpointAdaptor-wA-fmq4v.cjs → TestEndpointAdaptor-D9IwhIYg.cjs} +17 -2
  158. package/dist/TestEndpointAdaptor-D9IwhIYg.cjs.map +1 -0
  159. package/dist/{TestEndpointAdaptor-Bm0UjDtV.d.cts → TestEndpointAdaptor-DB7bREhS.d.mts} +4 -4
  160. package/dist/TestEndpointAdaptor-DB7bREhS.d.mts.map +1 -0
  161. package/dist/adaptors/aws.cjs +13 -13
  162. package/dist/adaptors/aws.d.cts +15 -15
  163. package/dist/adaptors/aws.d.mts +15 -15
  164. package/dist/adaptors/aws.mjs +13 -13
  165. package/dist/adaptors/hono.cjs +9 -9
  166. package/dist/adaptors/hono.d.cts +9 -9
  167. package/dist/adaptors/hono.d.mts +9 -9
  168. package/dist/adaptors/hono.mjs +9 -9
  169. package/dist/adaptors/testing.cjs +7 -7
  170. package/dist/adaptors/testing.d.cts +9 -9
  171. package/dist/adaptors/testing.d.mts +9 -9
  172. package/dist/adaptors/testing.mjs +7 -7
  173. package/dist/crons/Cron.cjs +6 -6
  174. package/dist/crons/Cron.d.cts +6 -6
  175. package/dist/crons/Cron.d.mts +6 -6
  176. package/dist/crons/Cron.mjs +6 -6
  177. package/dist/crons/CronBuilder.cjs +7 -7
  178. package/dist/crons/CronBuilder.d.cts +7 -7
  179. package/dist/crons/CronBuilder.d.mts +7 -7
  180. package/dist/crons/CronBuilder.mjs +7 -7
  181. package/dist/crons/index.cjs +7 -7
  182. package/dist/crons/index.d.cts +9 -7
  183. package/dist/crons/index.d.cts.map +1 -0
  184. package/dist/crons/index.d.mts +13 -11
  185. package/dist/crons/index.d.mts.map +1 -0
  186. package/dist/crons/index.mjs +7 -7
  187. package/dist/endpoints/AmazonApiGatewayEndpointAdaptor.cjs +7 -7
  188. package/dist/endpoints/AmazonApiGatewayEndpointAdaptor.d.cts +9 -9
  189. package/dist/endpoints/AmazonApiGatewayEndpointAdaptor.d.mts +9 -9
  190. package/dist/endpoints/AmazonApiGatewayEndpointAdaptor.mjs +7 -7
  191. package/dist/endpoints/AmazonApiGatewayV1EndpointAdaptor.cjs +9 -9
  192. package/dist/endpoints/AmazonApiGatewayV1EndpointAdaptor.d.cts +10 -10
  193. package/dist/endpoints/AmazonApiGatewayV1EndpointAdaptor.d.mts +10 -10
  194. package/dist/endpoints/AmazonApiGatewayV1EndpointAdaptor.mjs +9 -9
  195. package/dist/endpoints/AmazonApiGatewayV2EndpointAdaptor.cjs +9 -9
  196. package/dist/endpoints/AmazonApiGatewayV2EndpointAdaptor.d.cts +10 -10
  197. package/dist/endpoints/AmazonApiGatewayV2EndpointAdaptor.d.mts +10 -10
  198. package/dist/endpoints/AmazonApiGatewayV2EndpointAdaptor.mjs +9 -9
  199. package/dist/endpoints/Authorizer.d.cts +1 -1
  200. package/dist/endpoints/Authorizer.d.mts +1 -1
  201. package/dist/endpoints/Endpoint.cjs +6 -6
  202. package/dist/endpoints/Endpoint.d.cts +8 -8
  203. package/dist/endpoints/Endpoint.d.mts +8 -8
  204. package/dist/endpoints/Endpoint.mjs +6 -6
  205. package/dist/endpoints/EndpointBuilder.cjs +7 -7
  206. package/dist/endpoints/EndpointBuilder.d.cts +9 -9
  207. package/dist/endpoints/EndpointBuilder.d.mts +9 -9
  208. package/dist/endpoints/EndpointBuilder.mjs +7 -7
  209. package/dist/endpoints/EndpointFactory.cjs +8 -8
  210. package/dist/endpoints/EndpointFactory.d.cts +10 -10
  211. package/dist/endpoints/EndpointFactory.d.mts +10 -10
  212. package/dist/endpoints/EndpointFactory.mjs +8 -8
  213. package/dist/endpoints/HonoEndpointAdaptor.cjs +9 -9
  214. package/dist/endpoints/HonoEndpointAdaptor.d.cts +9 -9
  215. package/dist/endpoints/HonoEndpointAdaptor.d.mts +9 -9
  216. package/dist/endpoints/HonoEndpointAdaptor.mjs +9 -9
  217. package/dist/endpoints/TestEndpointAdaptor.cjs +7 -7
  218. package/dist/endpoints/TestEndpointAdaptor.d.cts +9 -9
  219. package/dist/endpoints/TestEndpointAdaptor.d.mts +9 -9
  220. package/dist/endpoints/TestEndpointAdaptor.mjs +7 -7
  221. package/dist/endpoints/audit.d.cts +8 -8
  222. package/dist/endpoints/audit.d.mts +8 -8
  223. package/dist/endpoints/helpers.cjs +7 -7
  224. package/dist/endpoints/helpers.d.cts +9 -8
  225. package/dist/endpoints/helpers.d.cts.map +1 -0
  226. package/dist/endpoints/helpers.d.mts +9 -8
  227. package/dist/endpoints/helpers.d.mts.map +1 -0
  228. package/dist/endpoints/helpers.mjs +7 -7
  229. package/dist/endpoints/index.cjs +8 -8
  230. package/dist/endpoints/index.d.cts +14 -12
  231. package/dist/endpoints/index.d.cts.map +1 -0
  232. package/dist/endpoints/index.d.mts +14 -12
  233. package/dist/endpoints/index.d.mts.map +1 -0
  234. package/dist/endpoints/index.mjs +8 -8
  235. package/dist/endpoints/parseHonoQuery.cjs +1 -1
  236. package/dist/endpoints/parseHonoQuery.d.cts +2 -0
  237. package/dist/endpoints/parseHonoQuery.d.cts.map +1 -0
  238. package/dist/endpoints/parseHonoQuery.d.mts +2 -0
  239. package/dist/endpoints/parseHonoQuery.d.mts.map +1 -0
  240. package/dist/endpoints/parseHonoQuery.mjs +1 -1
  241. package/dist/endpoints/parseQueryParams.cjs +1 -1
  242. package/dist/endpoints/parseQueryParams.d.cts +1 -0
  243. package/dist/endpoints/parseQueryParams.d.cts.map +1 -0
  244. package/dist/endpoints/parseQueryParams.d.mts +1 -0
  245. package/dist/endpoints/parseQueryParams.d.mts.map +1 -0
  246. package/dist/endpoints/parseQueryParams.mjs +1 -1
  247. package/dist/endpoints/processAudits.d.cts +10 -8
  248. package/dist/endpoints/processAudits.d.cts.map +1 -0
  249. package/dist/endpoints/processAudits.d.mts +10 -8
  250. package/dist/endpoints/processAudits.d.mts.map +1 -0
  251. package/dist/endpoints/rls.d.cts +8 -8
  252. package/dist/endpoints/rls.d.mts +8 -8
  253. package/dist/functions/AWSLambdaFunction.cjs +6 -6
  254. package/dist/functions/AWSLambdaFunction.d.cts +4 -4
  255. package/dist/functions/AWSLambdaFunction.d.mts +4 -4
  256. package/dist/functions/AWSLambdaFunction.mjs +6 -6
  257. package/dist/functions/BaseFunctionBuilder.cjs +2 -2
  258. package/dist/functions/BaseFunctionBuilder.d.cts +2 -2
  259. package/dist/functions/BaseFunctionBuilder.d.mts +2 -2
  260. package/dist/functions/BaseFunctionBuilder.mjs +2 -2
  261. package/dist/functions/Function.cjs +2 -2
  262. package/dist/functions/Function.d.cts +2 -2
  263. package/dist/functions/Function.d.mts +2 -2
  264. package/dist/functions/Function.mjs +2 -2
  265. package/dist/functions/FunctionBuilder.cjs +4 -4
  266. package/dist/functions/FunctionBuilder.d.cts +4 -4
  267. package/dist/functions/FunctionBuilder.d.mts +4 -4
  268. package/dist/functions/FunctionBuilder.mjs +4 -4
  269. package/dist/functions/FunctionExecutionWrapper.cjs +5 -5
  270. package/dist/functions/FunctionExecutionWrapper.d.cts +3 -3
  271. package/dist/functions/FunctionExecutionWrapper.d.mts +3 -3
  272. package/dist/functions/FunctionExecutionWrapper.mjs +5 -5
  273. package/dist/functions/TestFunctionAdaptor.cjs +4 -4
  274. package/dist/functions/TestFunctionAdaptor.d.cts +4 -2
  275. package/dist/functions/TestFunctionAdaptor.d.cts.map +1 -0
  276. package/dist/functions/TestFunctionAdaptor.d.mts +4 -2
  277. package/dist/functions/TestFunctionAdaptor.d.mts.map +1 -0
  278. package/dist/functions/TestFunctionAdaptor.mjs +4 -4
  279. package/dist/functions/index.cjs +5 -5
  280. package/dist/functions/index.d.cts +5 -5
  281. package/dist/functions/index.d.mts +5 -5
  282. package/dist/functions/index.mjs +5 -5
  283. package/dist/functions-C6EK1xL6.mjs +8 -0
  284. package/dist/{functions-JhRsNoAZ.mjs.map → functions-C6EK1xL6.mjs.map} +1 -1
  285. package/dist/{functions-FCb-wWFC.cjs → functions-fTid0RMK.cjs} +2 -2
  286. package/dist/{functions-FCb-wWFC.cjs.map → functions-fTid0RMK.cjs.map} +1 -1
  287. package/dist/{helpers-DxxSpLfw.cjs → helpers-BcP1tXAi.cjs} +2 -2
  288. package/dist/{helpers-DxxSpLfw.cjs.map → helpers-BcP1tXAi.cjs.map} +1 -1
  289. package/dist/{helpers-C3B2lVrM.mjs → helpers-ByRTDO_m.mjs} +2 -2
  290. package/dist/{helpers-C3B2lVrM.mjs.map → helpers-ByRTDO_m.mjs.map} +1 -1
  291. package/dist/{index-CFyaRrck.d.mts → index-BWzGIj06.d.mts} +4 -2
  292. package/dist/index-BWzGIj06.d.mts.map +1 -0
  293. package/dist/index-SI4V0XwK.d.cts +12 -0
  294. package/dist/index-SI4V0XwK.d.cts.map +1 -0
  295. package/dist/index.cjs +1 -1
  296. package/dist/index.d.cts +2 -2
  297. package/dist/index.d.mts +2 -2
  298. package/dist/index.mjs +1 -1
  299. package/dist/{parseHonoQuery-CT8Cvin-.cjs → parseHonoQuery-CZC5_97v.cjs} +3 -1
  300. package/dist/parseHonoQuery-CZC5_97v.cjs.map +1 -0
  301. package/dist/{parseHonoQuery-CwFKw2ua.mjs → parseHonoQuery-DDgIkTO4.mjs} +3 -1
  302. package/dist/parseHonoQuery-DDgIkTO4.mjs.map +1 -0
  303. package/dist/{parseQueryParams-CwvXXwkW.cjs → parseQueryParams-BSNkjmZ9.cjs} +3 -1
  304. package/dist/parseQueryParams-BSNkjmZ9.cjs.map +1 -0
  305. package/dist/{parseQueryParams-CHINupbZ.mjs → parseQueryParams-UMTRnRrW.mjs} +3 -1
  306. package/dist/parseQueryParams-UMTRnRrW.mjs.map +1 -0
  307. package/dist/publisher.d.cts +4 -2
  308. package/dist/publisher.d.cts.map +1 -0
  309. package/dist/publisher.d.mts +4 -2
  310. package/dist/publisher.d.mts.map +1 -0
  311. package/dist/subscribers/AWSLambdaSubscriberAdaptor.cjs +1 -1
  312. package/dist/subscribers/AWSLambdaSubscriberAdaptor.d.cts +3 -3
  313. package/dist/subscribers/AWSLambdaSubscriberAdaptor.d.mts +3 -3
  314. package/dist/subscribers/AWSLambdaSubscriberAdaptor.mjs +1 -1
  315. package/dist/subscribers/Subscriber.cjs +2 -2
  316. package/dist/subscribers/Subscriber.d.cts +2 -2
  317. package/dist/subscribers/Subscriber.d.mts +2 -2
  318. package/dist/subscribers/Subscriber.mjs +2 -2
  319. package/dist/subscribers/SubscriberBuilder.cjs +3 -3
  320. package/dist/subscribers/SubscriberBuilder.d.cts +3 -3
  321. package/dist/subscribers/SubscriberBuilder.d.mts +3 -3
  322. package/dist/subscribers/SubscriberBuilder.mjs +3 -3
  323. package/dist/subscribers/index.cjs +3 -3
  324. package/dist/subscribers/index.d.cts +7 -5
  325. package/dist/subscribers/index.d.cts.map +1 -0
  326. package/dist/subscribers/index.d.mts +5 -3
  327. package/dist/subscribers/index.d.mts.map +1 -0
  328. package/dist/subscribers/index.mjs +3 -3
  329. package/dist/{types-Bp9ysFXd.d.cts → types-B5H3piDg.d.cts} +3 -1
  330. package/dist/types-B5H3piDg.d.cts.map +1 -0
  331. package/dist/{types-CScirkHt.d.mts → types-DdIlpxAd.d.mts} +3 -1
  332. package/dist/types-DdIlpxAd.d.mts.map +1 -0
  333. package/dist/types.d.cts +1 -1
  334. package/dist/types.d.mts +1 -1
  335. package/package.json +64 -13
  336. package/src/Construct.ts +3 -3
  337. package/src/__benchmarks__/endpoint.bench.ts +494 -0
  338. package/src/__benchmarks__/hono-server.bench.ts +249 -0
  339. package/src/crons/CronBuilder.ts +8 -8
  340. package/src/endpoints/AmazonApiGatewayV1EndpointAdaptor.ts +4 -4
  341. package/src/endpoints/AmazonApiGatewayV2EndpointAdaptor.ts +4 -4
  342. package/src/endpoints/EndpointBuilder.ts +4 -4
  343. package/src/endpoints/HonoEndpointAdaptor.ts +1 -2
  344. package/src/endpoints/TestEndpointAdaptor.ts +18 -0
  345. package/src/endpoints/parseHonoQuery.ts +2 -0
  346. package/src/endpoints/parseQueryParams.ts +2 -0
  347. package/src/functions/AWSLambdaFunction.ts +1 -1
  348. package/src/functions/FunctionBuilder.ts +5 -5
  349. package/src/subscribers/AWSLambdaSubscriberAdaptor.ts +8 -4
  350. package/src/subscribers/Subscriber.ts +5 -5
  351. package/tsconfig.json +9 -0
  352. package/dist/AWSLambdaFunction-C-fuCLA3.cjs.map +0 -1
  353. package/dist/AWSLambdaFunction-H65WfXLt.mjs.map +0 -1
  354. package/dist/AmazonApiGatewayV1EndpointAdaptor-MJpRbIaQ.mjs.map +0 -1
  355. package/dist/AmazonApiGatewayV1EndpointAdaptor-uBp_4zLf.cjs.map +0 -1
  356. package/dist/AmazonApiGatewayV2EndpointAdaptor-ChO8BlDz.mjs.map +0 -1
  357. package/dist/AmazonApiGatewayV2EndpointAdaptor-I1W23Nvn.cjs.map +0 -1
  358. package/dist/CronBuilder-Bl3A2Zp4.mjs.map +0 -1
  359. package/dist/CronBuilder-Dv_w7Yri.cjs.map +0 -1
  360. package/dist/EndpointBuilder-DeswNQdG.cjs.map +0 -1
  361. package/dist/EndpointBuilder-FyyoFTJ5.mjs.map +0 -1
  362. package/dist/FunctionBuilder-CVT7bG2o.mjs.map +0 -1
  363. package/dist/FunctionBuilder-DXvG_XD-.cjs.map +0 -1
  364. package/dist/Subscriber-DOt3svUC.cjs.map +0 -1
  365. package/dist/Subscriber-kCHbH2fZ.mjs.map +0 -1
  366. package/dist/TestEndpointAdaptor-1pPixE6y.mjs.map +0 -1
  367. package/dist/TestEndpointAdaptor-wA-fmq4v.cjs.map +0 -1
  368. package/dist/functions-JhRsNoAZ.mjs +0 -8
  369. package/dist/index-CqH4_Ieb.d.cts +0 -10
  370. package/dist/parseHonoQuery-CT8Cvin-.cjs.map +0 -1
  371. package/dist/parseHonoQuery-CwFKw2ua.mjs.map +0 -1
  372. package/dist/parseQueryParams-CHINupbZ.mjs.map +0 -1
  373. package/dist/parseQueryParams-CwvXXwkW.cjs.map +0 -1
@@ -0,0 +1,249 @@
1
+ import { LogLevel } from '@geekmidas/logger';
2
+ import { ConsoleLogger } from '@geekmidas/logger/console';
3
+ import { Hono } from 'hono';
4
+ import { bench, describe } from 'vitest';
5
+ import { z } from 'zod';
6
+ import { e } from '../endpoints';
7
+ import type { Endpoint } from '../endpoints/Endpoint';
8
+ import { HonoEndpoint } from '../endpoints/HonoEndpointAdaptor';
9
+
10
+ /**
11
+ * E2E benchmarks with Hono app.request() - tests the full request/response cycle
12
+ * through the Hono framework without network overhead.
13
+ */
14
+
15
+ // Silent logger for benchmarks - no console output
16
+ const silentLogger = new ConsoleLogger({}, LogLevel.Silent);
17
+ const api = e.logger(silentLogger);
18
+
19
+ // Helper to create a Hono app from endpoints
20
+ function createApp(
21
+ endpoints: Endpoint<any, any, any, any, any, any, any, any, any, any, any>[],
22
+ ): Hono {
23
+ const app = new Hono();
24
+
25
+ // Silent error handler for benchmarks
26
+ app.onError((err, c) => {
27
+ return c.json({ error: err.message }, 500);
28
+ });
29
+
30
+ // Add routes using a mock service discovery
31
+ const mockServiceDiscovery = {
32
+ register: async () => ({}),
33
+ } as any;
34
+
35
+ HonoEndpoint.addRoutes(endpoints, mockServiceDiscovery, app, {
36
+ docsPath: false,
37
+ });
38
+
39
+ return app;
40
+ }
41
+
42
+ describe('Hono E2E - Simple Endpoints', () => {
43
+ const healthEndpoint = api
44
+ .get('/health')
45
+ .handle(async () => ({ status: 'ok' }));
46
+
47
+ const app = createApp([healthEndpoint]);
48
+
49
+ bench('GET /health - minimal response', async () => {
50
+ await app.request('/health');
51
+ });
52
+ });
53
+
54
+ describe('Hono E2E - CRUD Operations', () => {
55
+ const endpoints = [
56
+ api
57
+ .get('/users')
58
+ .output(z.array(z.object({ id: z.string(), name: z.string() })))
59
+ .handle(async () => [
60
+ { id: '1', name: 'Alice' },
61
+ { id: '2', name: 'Bob' },
62
+ ]),
63
+
64
+ api
65
+ .get('/users/:id')
66
+ .params(z.object({ id: z.string() }))
67
+ .output(z.object({ id: z.string(), name: z.string() }))
68
+ .handle(async ({ params }) => ({ id: params.id, name: 'User' })),
69
+
70
+ api
71
+ .post('/users')
72
+ .body(z.object({ name: z.string(), email: z.string().email() }))
73
+ .output(z.object({ id: z.string() }))
74
+ .handle(async () => ({ id: crypto.randomUUID() })),
75
+
76
+ api
77
+ .put('/users/:id')
78
+ .params(z.object({ id: z.string() }))
79
+ .body(z.object({ name: z.string() }))
80
+ .output(z.object({ success: z.boolean() }))
81
+ .handle(async () => ({ success: true })),
82
+
83
+ api
84
+ .delete('/users/:id')
85
+ .params(z.object({ id: z.string() }))
86
+ .output(z.object({ deleted: z.boolean() }))
87
+ .handle(async () => ({ deleted: true })),
88
+ ];
89
+
90
+ const app = createApp(endpoints);
91
+
92
+ bench('GET /users - list response', async () => {
93
+ await app.request('/users');
94
+ });
95
+
96
+ bench('GET /users/:id - path params', async () => {
97
+ await app.request('/users/123');
98
+ });
99
+
100
+ bench('POST /users - body validation', async () => {
101
+ await app.request('/users', {
102
+ method: 'POST',
103
+ headers: { 'Content-Type': 'application/json' },
104
+ body: JSON.stringify({ name: 'Test', email: 'test@example.com' }),
105
+ });
106
+ });
107
+
108
+ bench('PUT /users/:id - params + body', async () => {
109
+ await app.request('/users/123', {
110
+ method: 'PUT',
111
+ headers: { 'Content-Type': 'application/json' },
112
+ body: JSON.stringify({ name: 'Updated' }),
113
+ });
114
+ });
115
+
116
+ bench('DELETE /users/:id - params only', async () => {
117
+ await app.request('/users/123', { method: 'DELETE' });
118
+ });
119
+ });
120
+
121
+ describe('Hono E2E - Complex Validation', () => {
122
+ const complexEndpoint = api
123
+ .post('/orders')
124
+ .body(
125
+ z.object({
126
+ customer: z.object({
127
+ name: z.string(),
128
+ email: z.string().email(),
129
+ address: z.object({
130
+ street: z.string(),
131
+ city: z.string(),
132
+ zip: z.string(),
133
+ }),
134
+ }),
135
+ items: z.array(
136
+ z.object({
137
+ productId: z.string(),
138
+ quantity: z.number().int().positive(),
139
+ price: z.number().positive(),
140
+ }),
141
+ ),
142
+ payment: z.object({
143
+ method: z.enum(['credit_card', 'paypal', 'bank_transfer']),
144
+ details: z.record(z.string(), z.string()),
145
+ }),
146
+ }),
147
+ )
148
+ .output(z.object({ orderId: z.string(), total: z.number() }))
149
+ .handle(async () => ({ orderId: 'order-123', total: 99.99 }));
150
+
151
+ const app = createApp([complexEndpoint]);
152
+
153
+ bench('POST /orders - complex nested body', async () => {
154
+ await app.request('/orders', {
155
+ method: 'POST',
156
+ headers: { 'Content-Type': 'application/json' },
157
+ body: JSON.stringify({
158
+ customer: {
159
+ name: 'John Doe',
160
+ email: 'john@example.com',
161
+ address: {
162
+ street: '123 Main St',
163
+ city: 'Boston',
164
+ zip: '02101',
165
+ },
166
+ },
167
+ items: [
168
+ { productId: 'prod-1', quantity: 2, price: 29.99 },
169
+ { productId: 'prod-2', quantity: 1, price: 39.99 },
170
+ ],
171
+ payment: {
172
+ method: 'credit_card',
173
+ details: { last4: '4242' },
174
+ },
175
+ }),
176
+ });
177
+ });
178
+ });
179
+
180
+ describe('Hono E2E - Query Parameters', () => {
181
+ const searchEndpoint = api
182
+ .get('/search')
183
+ .query(
184
+ z.object({
185
+ q: z.string(),
186
+ page: z.coerce.number().default(1),
187
+ limit: z.coerce.number().default(10),
188
+ sort: z.enum(['asc', 'desc']).optional(),
189
+ filters: z.string().optional(),
190
+ }),
191
+ )
192
+ .output(
193
+ z.object({
194
+ results: z.array(z.unknown()),
195
+ total: z.number(),
196
+ page: z.number(),
197
+ }),
198
+ )
199
+ .handle(async ({ query }) => ({
200
+ results: [],
201
+ total: 0,
202
+ page: query.page,
203
+ }));
204
+
205
+ const app = createApp([searchEndpoint]);
206
+
207
+ bench('GET /search - with query params', async () => {
208
+ await app.request('/search?q=test&page=2&limit=20&sort=desc');
209
+ });
210
+ });
211
+
212
+ describe('Hono E2E - Concurrent Requests', () => {
213
+ const endpoints = [
214
+ api.get('/health').handle(async () => ({ status: 'ok' })),
215
+ api.get('/users').handle(async () => [{ id: '1' }]),
216
+ api
217
+ .get('/users/:id')
218
+ .params(z.object({ id: z.string() }))
219
+ .handle(async () => ({ id: '1' })),
220
+ ];
221
+
222
+ const app = createApp(endpoints);
223
+
224
+ bench('10 concurrent requests', async () => {
225
+ await Promise.all([
226
+ app.request('/health'),
227
+ app.request('/users'),
228
+ app.request('/users/1'),
229
+ app.request('/users/2'),
230
+ app.request('/users/3'),
231
+ app.request('/health'),
232
+ app.request('/users'),
233
+ app.request('/users/4'),
234
+ app.request('/users/5'),
235
+ app.request('/health'),
236
+ ]);
237
+ });
238
+
239
+ bench('50 concurrent requests', async () => {
240
+ const requests = Array.from({ length: 50 }, (_, i) =>
241
+ i % 3 === 0
242
+ ? app.request('/health')
243
+ : i % 3 === 1
244
+ ? app.request('/users')
245
+ : app.request(`/users/${i}`),
246
+ );
247
+ await Promise.all(requests);
248
+ });
249
+ });
@@ -39,7 +39,7 @@ export class CronBuilder<
39
39
  super(ConstructType.Cron);
40
40
  }
41
41
 
42
- memorySize(memorySize: number): this {
42
+ override memorySize(memorySize: number): this {
43
43
  this._memorySize = memorySize;
44
44
  return this;
45
45
  }
@@ -60,7 +60,7 @@ export class CronBuilder<
60
60
  return this;
61
61
  }
62
62
 
63
- input<T extends ComposableStandardSchema>(
63
+ override input<T extends ComposableStandardSchema>(
64
64
  schema: T,
65
65
  ): CronBuilder<
66
66
  T,
@@ -86,7 +86,7 @@ export class CronBuilder<
86
86
  >;
87
87
  }
88
88
 
89
- output<T extends StandardSchemaV1>(
89
+ override output<T extends StandardSchemaV1>(
90
90
  schema: T,
91
91
  ): CronBuilder<
92
92
  TInput,
@@ -112,7 +112,7 @@ export class CronBuilder<
112
112
  >;
113
113
  }
114
114
 
115
- services<T extends Service[]>(
115
+ override services<T extends Service[]>(
116
116
  services: T,
117
117
  ): CronBuilder<
118
118
  TInput,
@@ -141,7 +141,7 @@ export class CronBuilder<
141
141
  >;
142
142
  }
143
143
 
144
- logger<T extends Logger>(
144
+ override logger<T extends Logger>(
145
145
  logger: T,
146
146
  ): CronBuilder<
147
147
  TInput,
@@ -167,7 +167,7 @@ export class CronBuilder<
167
167
  >;
168
168
  }
169
169
 
170
- publisher<T extends EventPublisher<any>, TName extends string>(
170
+ override publisher<T extends EventPublisher<any>, TName extends string>(
171
171
  publisher: Service<TName, T>,
172
172
  ): CronBuilder<
173
173
  TInput,
@@ -200,7 +200,7 @@ export class CronBuilder<
200
200
  * Set the database service for this cron job.
201
201
  * The database will be available in the handler context as `db`.
202
202
  */
203
- database<T, TName extends string>(
203
+ override database<T, TName extends string>(
204
204
  service: Service<TName, T>,
205
205
  ): CronBuilder<
206
206
  TInput,
@@ -229,7 +229,7 @@ export class CronBuilder<
229
229
  >;
230
230
  }
231
231
 
232
- handle(
232
+ override handle(
233
233
  fn: FunctionHandler<TInput, TServices, TLogger, OutSchema, TDatabase>,
234
234
  ): Cron<
235
235
  TInput,
@@ -37,7 +37,7 @@ export class AmazonApiGatewayV1Endpoint<
37
37
  TSession,
38
38
  TEventPublisher
39
39
  > {
40
- getInput(e: APIGatewayProxyEvent): GetInputResponse {
40
+ override getInput(e: APIGatewayProxyEvent): GetInputResponse {
41
41
  // For arrays, AWS API Gateway V1 provides multiValueQueryStringParameters
42
42
  const multiValueParams = e.multiValueQueryStringParameters || {};
43
43
  const singleValueParams = e.queryStringParameters || {};
@@ -65,7 +65,7 @@ export class AmazonApiGatewayV1Endpoint<
65
65
  params: e.pathParameters || {},
66
66
  };
67
67
  }
68
- getLoggerContext(
68
+ override getLoggerContext(
69
69
  data: APIGatewayProxyEvent,
70
70
  context: Context,
71
71
  ): LoggerContext {
@@ -84,8 +84,8 @@ export class AmazonApiGatewayV1Endpoint<
84
84
  };
85
85
  }
86
86
  constructor(
87
- protected envParser: EnvironmentParser<{}>,
88
- protected readonly endpoint: Endpoint<
87
+ protected override envParser: EnvironmentParser<{}>,
88
+ protected override readonly endpoint: Endpoint<
89
89
  TRoute,
90
90
  TMethod,
91
91
  TInput,
@@ -36,7 +36,7 @@ export class AmazonApiGatewayV2Endpoint<
36
36
  TSession,
37
37
  TEventPublisher
38
38
  > {
39
- getInput(e: APIGatewayProxyEventV2): GetInputResponse {
39
+ override getInput(e: APIGatewayProxyEventV2): GetInputResponse {
40
40
  // API Gateway V2 handles arrays as comma-separated values
41
41
  const queryParams = e.queryStringParameters || {};
42
42
  const processedParams: Record<string, string | string[]> = {};
@@ -59,7 +59,7 @@ export class AmazonApiGatewayV2Endpoint<
59
59
  params: e.pathParameters || {},
60
60
  };
61
61
  }
62
- getLoggerContext(
62
+ override getLoggerContext(
63
63
  event: APIGatewayProxyEventV2,
64
64
  context: Context,
65
65
  ): LoggerContext {
@@ -78,8 +78,8 @@ export class AmazonApiGatewayV2Endpoint<
78
78
  };
79
79
  }
80
80
  constructor(
81
- protected envParser: EnvironmentParser<{}>,
82
- protected readonly endpoint: Endpoint<
81
+ protected override envParser: EnvironmentParser<{}>,
82
+ protected override readonly endpoint: Endpoint<
83
83
  TRoute,
84
84
  TMethod,
85
85
  TInput,
@@ -109,7 +109,7 @@ export class EndpointBuilder<
109
109
  return this;
110
110
  }
111
111
 
112
- event<TEvent extends MappedEvent<TEventPublisher, OutSchema>>(
112
+ override event<TEvent extends MappedEvent<TEventPublisher, OutSchema>>(
113
113
  event: TEvent,
114
114
  ): this {
115
115
  this._events.push(event);
@@ -126,7 +126,7 @@ export class EndpointBuilder<
126
126
  return this;
127
127
  }
128
128
 
129
- publisher<T extends EventPublisher<any>, TName extends string>(
129
+ override publisher<T extends EventPublisher<any>, TName extends string>(
130
130
  publisher: Service<TName, T>,
131
131
  ): EndpointBuilder<
132
132
  TRoute,
@@ -437,7 +437,7 @@ export class EndpointBuilder<
437
437
  * This enables audit functionality and makes `auditor` available in the handler context.
438
438
  * The audit action type is automatically inferred from the storage's generic parameter.
439
439
  */
440
- auditor<T extends AuditStorage<any>, TName extends string>(
440
+ override auditor<T extends AuditStorage<any>, TName extends string>(
441
441
  storage: Service<TName, T>,
442
442
  ): EndpointBuilder<
443
443
  TRoute,
@@ -544,7 +544,7 @@ export class EndpointBuilder<
544
544
  * })
545
545
  * ```
546
546
  */
547
- database<T, TName extends string>(
547
+ override database<T, TName extends string>(
548
548
  service: Service<TName, T>,
549
549
  ): EndpointBuilder<
550
550
  TRoute,
@@ -561,8 +561,7 @@ export class HonoEndpoint<
561
561
  );
562
562
 
563
563
  return c.json(openApiSchema);
564
- } catch (error) {
565
- console.error('Error generating OpenAPI schema:', error);
564
+ } catch {
566
565
  return c.json(
567
566
  { error: 'Failed to generate OpenAPI documentation' },
568
567
  500,
@@ -195,6 +195,24 @@ export class TestEndpointAdaptor<
195
195
  ...(rawDb !== undefined && { db: rawDb }),
196
196
  } as any);
197
197
 
198
+ // Check authorization
199
+ const isAuthorized = await this.endpoint.authorize({
200
+ header,
201
+ cookie,
202
+ services: ctx.services,
203
+ logger,
204
+ session,
205
+ });
206
+
207
+ if (!isAuthorized) {
208
+ logger.warn('Unauthorized access attempt');
209
+ return {
210
+ body: { error: 'Unauthorized' } as any,
211
+ status: 401,
212
+ headers: {},
213
+ };
214
+ }
215
+
198
216
  // Create audit context if audit storage is provided
199
217
  // The auditorStorage instance is required when endpoint uses .auditor()
200
218
  const auditorStorage = (ctx as any).auditorStorage as TAuditStorage;
@@ -18,6 +18,7 @@ export function parseHonoQuery(c: Context): Record<string, any> {
18
18
  // Navigate/create the nested structure
19
19
  for (let i = 0; i < parts.length - 1; i++) {
20
20
  const part = parts[i];
21
+ if (!part) continue;
21
22
  if (
22
23
  !current[part] ||
23
24
  typeof current[part] !== 'object' ||
@@ -30,6 +31,7 @@ export function parseHonoQuery(c: Context): Record<string, any> {
30
31
 
31
32
  // Set the final value, checking for arrays in nested keys
32
33
  const lastPart = parts[parts.length - 1];
34
+ if (!lastPart) continue;
33
35
  const multipleValues = c.req.queries(key);
34
36
  if (multipleValues && multipleValues.length > 1) {
35
37
  current[lastPart] = multipleValues;
@@ -28,6 +28,7 @@ export function parseQueryParams(
28
28
  // Navigate/create the nested structure
29
29
  for (let i = 0; i < parts.length - 1; i++) {
30
30
  const part = parts[i];
31
+ if (!part) continue;
31
32
  if (
32
33
  !current[part] ||
33
34
  typeof current[part] !== 'object' ||
@@ -40,6 +41,7 @@ export function parseQueryParams(
40
41
 
41
42
  // Set the final value
42
43
  const lastPart = parts[parts.length - 1];
44
+ if (!lastPart) continue;
43
45
  current[lastPart] = value;
44
46
  } else {
45
47
  // Simple key, just assign the value
@@ -88,7 +88,7 @@ export class AWSLambdaFunction<
88
88
  > {
89
89
  constructor(
90
90
  envParser: EnvironmentParser<{}>,
91
- readonly fn: Function<
91
+ override readonly fn: Function<
92
92
  TInput,
93
93
  TServices,
94
94
  TLogger,
@@ -41,11 +41,11 @@ export class FunctionBuilder<
41
41
  > {
42
42
  protected _memorySize?: number;
43
43
 
44
- constructor(public type = ConstructType.Function) {
44
+ constructor(public override type = ConstructType.Function) {
45
45
  super(type);
46
46
  }
47
47
 
48
- timeout(timeout: number): this {
48
+ override timeout(timeout: number): this {
49
49
  this._timeout = timeout;
50
50
  return this;
51
51
  }
@@ -186,7 +186,7 @@ export class FunctionBuilder<
186
186
  >;
187
187
  }
188
188
 
189
- publisher<T extends EventPublisher<any>, TName extends string>(
189
+ override publisher<T extends EventPublisher<any>, TName extends string>(
190
190
  publisher: Service<TName, T>,
191
191
  ): FunctionBuilder<
192
192
  TInput,
@@ -221,7 +221,7 @@ export class FunctionBuilder<
221
221
  >;
222
222
  }
223
223
 
224
- auditor<T extends AuditStorage, TName extends string>(
224
+ override auditor<T extends AuditStorage, TName extends string>(
225
225
  storage: Service<TName, T>,
226
226
  ): FunctionBuilder<
227
227
  TInput,
@@ -292,7 +292,7 @@ export class FunctionBuilder<
292
292
  * Set the database service for this function.
293
293
  * The database will be available in the handler context as `db`.
294
294
  */
295
- database<T, TName extends string>(
295
+ override database<T, TName extends string>(
296
296
  service: Service<TName, T>,
297
297
  ): FunctionBuilder<
298
298
  TInput,
@@ -177,20 +177,24 @@ export class AWSLambdaSubscriber<
177
177
  }
178
178
 
179
179
  private isSQSEvent(event: SQSEvent | SNSEvent): event is SQSEvent {
180
+ const firstRecord = event.Records[0];
180
181
  return (
181
182
  'Records' in event &&
182
183
  event.Records.length > 0 &&
183
- 'eventSource' in event.Records[0] &&
184
- event.Records[0].eventSource === 'aws:sqs'
184
+ firstRecord !== undefined &&
185
+ 'eventSource' in firstRecord &&
186
+ firstRecord.eventSource === 'aws:sqs'
185
187
  );
186
188
  }
187
189
 
188
190
  private isSNSEvent(event: SQSEvent | SNSEvent): event is SNSEvent {
191
+ const firstRecord = event.Records[0];
189
192
  return (
190
193
  'Records' in event &&
191
194
  event.Records.length > 0 &&
192
- 'EventSource' in event.Records[0] &&
193
- event.Records[0].EventSource === 'aws:sns'
195
+ firstRecord !== undefined &&
196
+ 'EventSource' in firstRecord &&
197
+ firstRecord.EventSource === 'aws:sns'
194
198
  );
195
199
  }
196
200
 
@@ -56,12 +56,12 @@ export class Subscriber<
56
56
  TLogger,
57
57
  OutSchema
58
58
  >,
59
- public readonly timeout: number = 30000,
59
+ public override readonly timeout: number = 30000,
60
60
  protected _subscribedEvents?: TSubscribedEvents,
61
- public readonly outputSchema?: OutSchema,
62
- public readonly services: TServices = [] as unknown as TServices,
63
- public readonly logger: TLogger = DEFAULT_LOGGER as TLogger,
64
- public readonly publisherService?: Service<
61
+ public override readonly outputSchema?: OutSchema,
62
+ public override readonly services: TServices = [] as unknown as TServices,
63
+ public override readonly logger: TLogger = DEFAULT_LOGGER as TLogger,
64
+ public override readonly publisherService?: Service<
65
65
  TEventPublisherServiceName,
66
66
  TEventPublisher
67
67
  >,
package/tsconfig.json ADDED
@@ -0,0 +1,9 @@
1
+ {
2
+ "extends": "../../tsconfig.base.json",
3
+ "compilerOptions": {
4
+ "outDir": "./dist",
5
+ "rootDir": "./src",
6
+ "composite": true
7
+ },
8
+ "include": ["src/**/*"]
9
+ }
@@ -1 +0,0 @@
1
- {"version":3,"file":"AWSLambdaFunction-C-fuCLA3.cjs","names":["FunctionExecutionWrapper","envParser: EnvironmentParser<{}>","fn: Function<\n TInput,\n TServices,\n TLogger,\n TOutSchema,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName,\n TAuditAction,\n FunctionHandler<\n TInput,\n TServices,\n TLogger,\n TOutSchema,\n TDatabase,\n TAuditStorage,\n TAuditAction\n >\n >","event: FunctionEvent<\n TEvent,\n TInput,\n TServices,\n TLogger,\n TDatabase,\n TAuditAction\n >"],"sources":["../src/functions/AWSLambdaFunction.ts"],"sourcesContent":["import type { AuditStorage, AuditableAction, Auditor } from '@geekmidas/audit';\nimport type { EnvironmentParser } from '@geekmidas/envkit';\nimport middy, { type MiddlewareObj } from '@middy/core';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\nimport type { Context, Handler } from 'aws-lambda';\nimport type { Function, FunctionHandler } from './Function';\nimport { FunctionBuilder } from './FunctionBuilder';\n\nimport { wrapError } from '@geekmidas/errors';\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 type { Service, ServiceRecord } from '@geekmidas/services';\nimport { FunctionExecutionWrapper } from './FunctionExecutionWrapper';\n\nexport type AWSLambdaHandler<TEvent = any, TResult = any> = Handler<\n TEvent,\n TResult\n>;\n\ntype FunctionEvent<\n TEvent,\n TInput extends ComposableStandardSchema | undefined,\n TServices extends Service[],\n TLogger extends Logger,\n TDatabase = undefined,\n TAuditAction extends AuditableAction<string, unknown> = AuditableAction<\n string,\n unknown\n >,\n> = TEvent & {\n parsedInput: InferComposableStandardSchema<TInput>;\n services: ServiceRecord<TServices>;\n logger: TLogger;\n db: TDatabase | undefined;\n auditor: Auditor<TAuditAction> | undefined;\n};\n\ntype Middleware<\n TEvent,\n TInput extends ComposableStandardSchema | undefined,\n TServices extends Service[],\n TLogger extends Logger,\n TOutSchema extends StandardSchemaV1 | undefined,\n TDatabase = undefined,\n TAuditAction extends AuditableAction<string, unknown> = AuditableAction<\n string,\n unknown\n >,\n> = MiddlewareObj<\n FunctionEvent<TEvent, TInput, TServices, TLogger, TDatabase, TAuditAction>,\n InferComposableStandardSchema<TOutSchema>,\n Error,\n Context\n>;\n\nexport class AWSLambdaFunction<\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 TAuditStorage extends AuditStorage | undefined = undefined,\n TAuditStorageServiceName extends string = string,\n TDatabase = undefined,\n TDatabaseServiceName extends string = string,\n TAuditAction extends AuditableAction<string, unknown> = AuditableAction<\n string,\n unknown\n >,\n> extends FunctionExecutionWrapper<\n TInput,\n TOutSchema,\n TServices,\n TLogger,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName,\n TAuditAction\n> {\n constructor(\n envParser: EnvironmentParser<{}>,\n readonly fn: Function<\n TInput,\n TServices,\n TLogger,\n TOutSchema,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName,\n TAuditAction,\n FunctionHandler<\n TInput,\n TServices,\n TLogger,\n TOutSchema,\n TDatabase,\n TAuditStorage,\n TAuditAction\n >\n >,\n ) {\n super(envParser, fn);\n }\n\n private error<TEvent>(): Middleware<\n TEvent,\n TInput,\n TServices,\n TLogger,\n TOutSchema,\n TDatabase,\n TAuditAction\n > {\n return {\n onError: (req) => {\n const logger = req.event?.logger || this.fn.logger;\n logger.error(req.error || {}, 'Error processing function');\n\n // Re-throw the wrapped error to let Lambda handle it\n throw wrapError(req.error);\n },\n };\n }\n\n private baseInput<TEvent>(): Middleware<\n TEvent,\n TInput,\n TServices,\n TLogger,\n TOutSchema,\n TDatabase,\n TAuditAction\n > {\n return {\n before: (req) => {},\n };\n }\n\n private input<\n TEvent extends { input: InferComposableStandardSchema<TInput> },\n >(): Middleware<\n TEvent,\n TInput,\n TServices,\n TLogger,\n TOutSchema,\n TDatabase,\n TAuditAction\n > {\n return {\n before: async (req) => {\n try {\n // Parse input if schema is provided\n if (this.fn.input) {\n const parsedInput =\n await FunctionBuilder.parseComposableStandardSchema(\n req.event,\n this.fn.input,\n );\n\n req.event.parsedInput =\n parsedInput as InferComposableStandardSchema<TInput>;\n } else {\n // If no schema, pass the event as-is\n req.event.parsedInput = req.event as any;\n }\n } catch (error) {\n this.logger.error(\n { error, event: req.event },\n 'Failed to parse input',\n );\n throw error;\n }\n },\n };\n }\n\n private loggerMiddleware<TEvent>(): Middleware<\n TEvent,\n TInput,\n TServices,\n TLogger,\n TOutSchema,\n TDatabase,\n TAuditAction\n > {\n return {\n before: (req) => {\n this._logger = this.fn.logger.child({\n fn: {\n name: req.context.functionName,\n version: req.context.functionVersion,\n memory: req.context.memoryLimitInMB,\n },\n req: {\n id: req.context.awsRequestId,\n },\n }) as TLogger;\n\n req.event.logger = this._logger;\n },\n };\n }\n\n private services<TEvent>(): Middleware<\n TEvent,\n TInput,\n TServices,\n TLogger,\n TOutSchema,\n TDatabase,\n TAuditAction\n > {\n return {\n before: async (req) => {\n req.event.services = await this.getServices();\n },\n };\n }\n\n private database<TEvent>(): Middleware<\n TEvent,\n TInput,\n TServices,\n TLogger,\n TOutSchema,\n TDatabase,\n TAuditAction\n > {\n return {\n before: async (req) => {\n req.event.db = await this.getDatabase();\n },\n };\n }\n\n private auditor<TEvent>(): Middleware<\n TEvent,\n TInput,\n TServices,\n TLogger,\n TOutSchema,\n TDatabase,\n TAuditAction\n > {\n return {\n before: async (req) => {\n req.event.auditor = await this.createAuditor();\n },\n after: async (req) => {\n // Flush any pending audits after successful execution\n if (req.event.auditor) {\n const records = req.event.auditor.getRecords();\n if (records.length > 0) {\n this.logger.debug(\n { auditCount: records.length },\n 'Flushing function audits',\n );\n await req.event.auditor.flush();\n }\n }\n },\n };\n }\n\n private events<TEvent>(): Middleware<\n TEvent,\n TInput,\n TServices,\n TLogger,\n TOutSchema,\n TDatabase,\n TAuditAction\n > {\n return {\n after: async (req) => {\n const response = (req.response ||\n undefined) as InferStandardSchema<TOutSchema>;\n await this.publishEvents(response);\n },\n };\n }\n\n private async _handler<TEvent>(\n event: FunctionEvent<\n TEvent,\n TInput,\n TServices,\n TLogger,\n TDatabase,\n TAuditAction\n >,\n ) {\n // Execute the function with the parsed context\n const result = await this.fn['fn']({\n input: event.parsedInput,\n services: event.services,\n logger: event.logger,\n db: event.db,\n auditor: event.auditor,\n } as any);\n\n // Parse output if schema is provided\n const output = await this.fn.parseOutput(result);\n\n return output;\n }\n\n get handler(): AWSLambdaHandler {\n const handler = this._handler.bind(this);\n\n // Apply middleware in order\n return middy(handler)\n .use(this.loggerMiddleware())\n .use(this.baseInput())\n .use(this.error())\n .use(this.services())\n .use(this.database())\n .use(this.auditor())\n .use(this.input())\n .use(this.events()) as unknown as AWSLambdaHandler;\n }\n}\n"],"mappings":";;;;;;;AA4DA,IAAa,oBAAb,cAeUA,0DAYR;CACA,YACEC,WACSC,IAsBT;AACA,QAAM,WAAW,GAAG;EAvBX;CAwBV;CAED,AAAQ,QAQN;AACA,SAAO,EACL,SAAS,CAAC,QAAQ;GAChB,MAAM,SAAS,IAAI,OAAO,UAAU,KAAK,GAAG;AAC5C,UAAO,MAAM,IAAI,SAAS,CAAE,GAAE,4BAA4B;AAG1D,SAAM,kCAAU,IAAI,MAAM;EAC3B,EACF;CACF;CAED,AAAQ,YAQN;AACA,SAAO,EACL,QAAQ,CAAC,QAAQ,CAAE,EACpB;CACF;CAED,AAAQ,QAUN;AACA,SAAO,EACL,QAAQ,OAAO,QAAQ;AACrB,OAAI;AAEF,QAAI,KAAK,GAAG,OAAO;KACjB,MAAM,cACJ,MAAM,wCAAgB,8BACpB,IAAI,OACJ,KAAK,GAAG,MACT;AAEH,SAAI,MAAM,cACR;IACH,MAEC,KAAI,MAAM,cAAc,IAAI;GAE/B,SAAQ,OAAO;AACd,SAAK,OAAO,MACV;KAAE;KAAO,OAAO,IAAI;IAAO,GAC3B,wBACD;AACD,UAAM;GACP;EACF,EACF;CACF;CAED,AAAQ,mBAQN;AACA,SAAO,EACL,QAAQ,CAAC,QAAQ;AACf,QAAK,UAAU,KAAK,GAAG,OAAO,MAAM;IAClC,IAAI;KACF,MAAM,IAAI,QAAQ;KAClB,SAAS,IAAI,QAAQ;KACrB,QAAQ,IAAI,QAAQ;IACrB;IACD,KAAK,EACH,IAAI,IAAI,QAAQ,aACjB;GACF,EAAC;AAEF,OAAI,MAAM,SAAS,KAAK;EACzB,EACF;CACF;CAED,AAAQ,WAQN;AACA,SAAO,EACL,QAAQ,OAAO,QAAQ;AACrB,OAAI,MAAM,WAAW,MAAM,KAAK,aAAa;EAC9C,EACF;CACF;CAED,AAAQ,WAQN;AACA,SAAO,EACL,QAAQ,OAAO,QAAQ;AACrB,OAAI,MAAM,KAAK,MAAM,KAAK,aAAa;EACxC,EACF;CACF;CAED,AAAQ,UAQN;AACA,SAAO;GACL,QAAQ,OAAO,QAAQ;AACrB,QAAI,MAAM,UAAU,MAAM,KAAK,eAAe;GAC/C;GACD,OAAO,OAAO,QAAQ;AAEpB,QAAI,IAAI,MAAM,SAAS;KACrB,MAAM,UAAU,IAAI,MAAM,QAAQ,YAAY;AAC9C,SAAI,QAAQ,SAAS,GAAG;AACtB,WAAK,OAAO,MACV,EAAE,YAAY,QAAQ,OAAQ,GAC9B,2BACD;AACD,YAAM,IAAI,MAAM,QAAQ,OAAO;KAChC;IACF;GACF;EACF;CACF;CAED,AAAQ,SAQN;AACA,SAAO,EACL,OAAO,OAAO,QAAQ;GACpB,MAAM,WAAY,IAAI;AAEtB,SAAM,KAAK,cAAc,SAAS;EACnC,EACF;CACF;CAED,MAAc,SACZC,OAQA;EAEA,MAAM,SAAS,MAAM,KAAK,GAAG,MAAM;GACjC,OAAO,MAAM;GACb,UAAU,MAAM;GAChB,QAAQ,MAAM;GACd,IAAI,MAAM;GACV,SAAS,MAAM;EAChB,EAAQ;EAGT,MAAM,SAAS,MAAM,KAAK,GAAG,YAAY,OAAO;AAEhD,SAAO;CACR;CAED,IAAI,UAA4B;EAC9B,MAAM,UAAU,KAAK,SAAS,KAAK,KAAK;AAGxC,SAAO,0BAAM,QAAQ,CAClB,IAAI,KAAK,kBAAkB,CAAC,CAC5B,IAAI,KAAK,WAAW,CAAC,CACrB,IAAI,KAAK,OAAO,CAAC,CACjB,IAAI,KAAK,UAAU,CAAC,CACpB,IAAI,KAAK,UAAU,CAAC,CACpB,IAAI,KAAK,SAAS,CAAC,CACnB,IAAI,KAAK,OAAO,CAAC,CACjB,IAAI,KAAK,QAAQ,CAAC;CACtB;AACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"AWSLambdaFunction-H65WfXLt.mjs","names":["envParser: EnvironmentParser<{}>","fn: Function<\n TInput,\n TServices,\n TLogger,\n TOutSchema,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName,\n TAuditAction,\n FunctionHandler<\n TInput,\n TServices,\n TLogger,\n TOutSchema,\n TDatabase,\n TAuditStorage,\n TAuditAction\n >\n >","event: FunctionEvent<\n TEvent,\n TInput,\n TServices,\n TLogger,\n TDatabase,\n TAuditAction\n >"],"sources":["../src/functions/AWSLambdaFunction.ts"],"sourcesContent":["import type { AuditStorage, AuditableAction, Auditor } from '@geekmidas/audit';\nimport type { EnvironmentParser } from '@geekmidas/envkit';\nimport middy, { type MiddlewareObj } from '@middy/core';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\nimport type { Context, Handler } from 'aws-lambda';\nimport type { Function, FunctionHandler } from './Function';\nimport { FunctionBuilder } from './FunctionBuilder';\n\nimport { wrapError } from '@geekmidas/errors';\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 type { Service, ServiceRecord } from '@geekmidas/services';\nimport { FunctionExecutionWrapper } from './FunctionExecutionWrapper';\n\nexport type AWSLambdaHandler<TEvent = any, TResult = any> = Handler<\n TEvent,\n TResult\n>;\n\ntype FunctionEvent<\n TEvent,\n TInput extends ComposableStandardSchema | undefined,\n TServices extends Service[],\n TLogger extends Logger,\n TDatabase = undefined,\n TAuditAction extends AuditableAction<string, unknown> = AuditableAction<\n string,\n unknown\n >,\n> = TEvent & {\n parsedInput: InferComposableStandardSchema<TInput>;\n services: ServiceRecord<TServices>;\n logger: TLogger;\n db: TDatabase | undefined;\n auditor: Auditor<TAuditAction> | undefined;\n};\n\ntype Middleware<\n TEvent,\n TInput extends ComposableStandardSchema | undefined,\n TServices extends Service[],\n TLogger extends Logger,\n TOutSchema extends StandardSchemaV1 | undefined,\n TDatabase = undefined,\n TAuditAction extends AuditableAction<string, unknown> = AuditableAction<\n string,\n unknown\n >,\n> = MiddlewareObj<\n FunctionEvent<TEvent, TInput, TServices, TLogger, TDatabase, TAuditAction>,\n InferComposableStandardSchema<TOutSchema>,\n Error,\n Context\n>;\n\nexport class AWSLambdaFunction<\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 TAuditStorage extends AuditStorage | undefined = undefined,\n TAuditStorageServiceName extends string = string,\n TDatabase = undefined,\n TDatabaseServiceName extends string = string,\n TAuditAction extends AuditableAction<string, unknown> = AuditableAction<\n string,\n unknown\n >,\n> extends FunctionExecutionWrapper<\n TInput,\n TOutSchema,\n TServices,\n TLogger,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName,\n TAuditAction\n> {\n constructor(\n envParser: EnvironmentParser<{}>,\n readonly fn: Function<\n TInput,\n TServices,\n TLogger,\n TOutSchema,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName,\n TAuditAction,\n FunctionHandler<\n TInput,\n TServices,\n TLogger,\n TOutSchema,\n TDatabase,\n TAuditStorage,\n TAuditAction\n >\n >,\n ) {\n super(envParser, fn);\n }\n\n private error<TEvent>(): Middleware<\n TEvent,\n TInput,\n TServices,\n TLogger,\n TOutSchema,\n TDatabase,\n TAuditAction\n > {\n return {\n onError: (req) => {\n const logger = req.event?.logger || this.fn.logger;\n logger.error(req.error || {}, 'Error processing function');\n\n // Re-throw the wrapped error to let Lambda handle it\n throw wrapError(req.error);\n },\n };\n }\n\n private baseInput<TEvent>(): Middleware<\n TEvent,\n TInput,\n TServices,\n TLogger,\n TOutSchema,\n TDatabase,\n TAuditAction\n > {\n return {\n before: (req) => {},\n };\n }\n\n private input<\n TEvent extends { input: InferComposableStandardSchema<TInput> },\n >(): Middleware<\n TEvent,\n TInput,\n TServices,\n TLogger,\n TOutSchema,\n TDatabase,\n TAuditAction\n > {\n return {\n before: async (req) => {\n try {\n // Parse input if schema is provided\n if (this.fn.input) {\n const parsedInput =\n await FunctionBuilder.parseComposableStandardSchema(\n req.event,\n this.fn.input,\n );\n\n req.event.parsedInput =\n parsedInput as InferComposableStandardSchema<TInput>;\n } else {\n // If no schema, pass the event as-is\n req.event.parsedInput = req.event as any;\n }\n } catch (error) {\n this.logger.error(\n { error, event: req.event },\n 'Failed to parse input',\n );\n throw error;\n }\n },\n };\n }\n\n private loggerMiddleware<TEvent>(): Middleware<\n TEvent,\n TInput,\n TServices,\n TLogger,\n TOutSchema,\n TDatabase,\n TAuditAction\n > {\n return {\n before: (req) => {\n this._logger = this.fn.logger.child({\n fn: {\n name: req.context.functionName,\n version: req.context.functionVersion,\n memory: req.context.memoryLimitInMB,\n },\n req: {\n id: req.context.awsRequestId,\n },\n }) as TLogger;\n\n req.event.logger = this._logger;\n },\n };\n }\n\n private services<TEvent>(): Middleware<\n TEvent,\n TInput,\n TServices,\n TLogger,\n TOutSchema,\n TDatabase,\n TAuditAction\n > {\n return {\n before: async (req) => {\n req.event.services = await this.getServices();\n },\n };\n }\n\n private database<TEvent>(): Middleware<\n TEvent,\n TInput,\n TServices,\n TLogger,\n TOutSchema,\n TDatabase,\n TAuditAction\n > {\n return {\n before: async (req) => {\n req.event.db = await this.getDatabase();\n },\n };\n }\n\n private auditor<TEvent>(): Middleware<\n TEvent,\n TInput,\n TServices,\n TLogger,\n TOutSchema,\n TDatabase,\n TAuditAction\n > {\n return {\n before: async (req) => {\n req.event.auditor = await this.createAuditor();\n },\n after: async (req) => {\n // Flush any pending audits after successful execution\n if (req.event.auditor) {\n const records = req.event.auditor.getRecords();\n if (records.length > 0) {\n this.logger.debug(\n { auditCount: records.length },\n 'Flushing function audits',\n );\n await req.event.auditor.flush();\n }\n }\n },\n };\n }\n\n private events<TEvent>(): Middleware<\n TEvent,\n TInput,\n TServices,\n TLogger,\n TOutSchema,\n TDatabase,\n TAuditAction\n > {\n return {\n after: async (req) => {\n const response = (req.response ||\n undefined) as InferStandardSchema<TOutSchema>;\n await this.publishEvents(response);\n },\n };\n }\n\n private async _handler<TEvent>(\n event: FunctionEvent<\n TEvent,\n TInput,\n TServices,\n TLogger,\n TDatabase,\n TAuditAction\n >,\n ) {\n // Execute the function with the parsed context\n const result = await this.fn['fn']({\n input: event.parsedInput,\n services: event.services,\n logger: event.logger,\n db: event.db,\n auditor: event.auditor,\n } as any);\n\n // Parse output if schema is provided\n const output = await this.fn.parseOutput(result);\n\n return output;\n }\n\n get handler(): AWSLambdaHandler {\n const handler = this._handler.bind(this);\n\n // Apply middleware in order\n return middy(handler)\n .use(this.loggerMiddleware())\n .use(this.baseInput())\n .use(this.error())\n .use(this.services())\n .use(this.database())\n .use(this.auditor())\n .use(this.input())\n .use(this.events()) as unknown as AWSLambdaHandler;\n }\n}\n"],"mappings":";;;;;;AA4DA,IAAa,oBAAb,cAeU,yBAYR;CACA,YACEA,WACSC,IAsBT;AACA,QAAM,WAAW,GAAG;EAvBX;CAwBV;CAED,AAAQ,QAQN;AACA,SAAO,EACL,SAAS,CAAC,QAAQ;GAChB,MAAM,SAAS,IAAI,OAAO,UAAU,KAAK,GAAG;AAC5C,UAAO,MAAM,IAAI,SAAS,CAAE,GAAE,4BAA4B;AAG1D,SAAM,UAAU,IAAI,MAAM;EAC3B,EACF;CACF;CAED,AAAQ,YAQN;AACA,SAAO,EACL,QAAQ,CAAC,QAAQ,CAAE,EACpB;CACF;CAED,AAAQ,QAUN;AACA,SAAO,EACL,QAAQ,OAAO,QAAQ;AACrB,OAAI;AAEF,QAAI,KAAK,GAAG,OAAO;KACjB,MAAM,cACJ,MAAM,gBAAgB,8BACpB,IAAI,OACJ,KAAK,GAAG,MACT;AAEH,SAAI,MAAM,cACR;IACH,MAEC,KAAI,MAAM,cAAc,IAAI;GAE/B,SAAQ,OAAO;AACd,SAAK,OAAO,MACV;KAAE;KAAO,OAAO,IAAI;IAAO,GAC3B,wBACD;AACD,UAAM;GACP;EACF,EACF;CACF;CAED,AAAQ,mBAQN;AACA,SAAO,EACL,QAAQ,CAAC,QAAQ;AACf,QAAK,UAAU,KAAK,GAAG,OAAO,MAAM;IAClC,IAAI;KACF,MAAM,IAAI,QAAQ;KAClB,SAAS,IAAI,QAAQ;KACrB,QAAQ,IAAI,QAAQ;IACrB;IACD,KAAK,EACH,IAAI,IAAI,QAAQ,aACjB;GACF,EAAC;AAEF,OAAI,MAAM,SAAS,KAAK;EACzB,EACF;CACF;CAED,AAAQ,WAQN;AACA,SAAO,EACL,QAAQ,OAAO,QAAQ;AACrB,OAAI,MAAM,WAAW,MAAM,KAAK,aAAa;EAC9C,EACF;CACF;CAED,AAAQ,WAQN;AACA,SAAO,EACL,QAAQ,OAAO,QAAQ;AACrB,OAAI,MAAM,KAAK,MAAM,KAAK,aAAa;EACxC,EACF;CACF;CAED,AAAQ,UAQN;AACA,SAAO;GACL,QAAQ,OAAO,QAAQ;AACrB,QAAI,MAAM,UAAU,MAAM,KAAK,eAAe;GAC/C;GACD,OAAO,OAAO,QAAQ;AAEpB,QAAI,IAAI,MAAM,SAAS;KACrB,MAAM,UAAU,IAAI,MAAM,QAAQ,YAAY;AAC9C,SAAI,QAAQ,SAAS,GAAG;AACtB,WAAK,OAAO,MACV,EAAE,YAAY,QAAQ,OAAQ,GAC9B,2BACD;AACD,YAAM,IAAI,MAAM,QAAQ,OAAO;KAChC;IACF;GACF;EACF;CACF;CAED,AAAQ,SAQN;AACA,SAAO,EACL,OAAO,OAAO,QAAQ;GACpB,MAAM,WAAY,IAAI;AAEtB,SAAM,KAAK,cAAc,SAAS;EACnC,EACF;CACF;CAED,MAAc,SACZC,OAQA;EAEA,MAAM,SAAS,MAAM,KAAK,GAAG,MAAM;GACjC,OAAO,MAAM;GACb,UAAU,MAAM;GAChB,QAAQ,MAAM;GACd,IAAI,MAAM;GACV,SAAS,MAAM;EAChB,EAAQ;EAGT,MAAM,SAAS,MAAM,KAAK,GAAG,YAAY,OAAO;AAEhD,SAAO;CACR;CAED,IAAI,UAA4B;EAC9B,MAAM,UAAU,KAAK,SAAS,KAAK,KAAK;AAGxC,SAAO,MAAM,QAAQ,CAClB,IAAI,KAAK,kBAAkB,CAAC,CAC5B,IAAI,KAAK,WAAW,CAAC,CACrB,IAAI,KAAK,OAAO,CAAC,CACjB,IAAI,KAAK,UAAU,CAAC,CACpB,IAAI,KAAK,UAAU,CAAC,CACpB,IAAI,KAAK,SAAS,CAAC,CACnB,IAAI,KAAK,OAAO,CAAC,CACjB,IAAI,KAAK,QAAQ,CAAC;CACtB;AACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"AmazonApiGatewayV1EndpointAdaptor-MJpRbIaQ.mjs","names":["e: APIGatewayProxyEvent","mergedParams: Record<string, string | string[]>","data: APIGatewayProxyEvent","context: Context","envParser: EnvironmentParser<{}>","endpoint: Endpoint<\n TRoute,\n TMethod,\n TInput,\n TOutSchema,\n TServices,\n TLogger,\n TSession,\n TEventPublisher\n >"],"sources":["../src/endpoints/AmazonApiGatewayV1EndpointAdaptor.ts"],"sourcesContent":["import type { Logger } from '@geekmidas/logger';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\nimport type { HttpMethod } from '../types';\nimport type { Endpoint, EndpointSchemas } from './Endpoint';\n\nimport type { EnvironmentParser } from '@geekmidas/envkit';\nimport type { APIGatewayProxyEvent, Context } from 'aws-lambda';\n\nimport type { EventPublisher } from '@geekmidas/events';\nimport type { Service } from '@geekmidas/services';\nimport {\n AmazonApiGatewayEndpoint,\n type AmazonApiGatewayV1EndpointHandler,\n type GetInputResponse,\n type LoggerContext,\n} from './AmazonApiGatewayEndpointAdaptor';\nimport { parseQueryParams } from './parseQueryParams';\n\nexport class AmazonApiGatewayV1Endpoint<\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> extends AmazonApiGatewayEndpoint<\n AmazonApiGatewayV1EndpointHandler,\n APIGatewayProxyEvent,\n TRoute,\n TMethod,\n TInput,\n TOutSchema,\n TServices,\n TLogger,\n TSession,\n TEventPublisher\n> {\n getInput(e: APIGatewayProxyEvent): GetInputResponse {\n // For arrays, AWS API Gateway V1 provides multiValueQueryStringParameters\n const multiValueParams = e.multiValueQueryStringParameters || {};\n const singleValueParams = e.queryStringParameters || {};\n\n // Merge single and multi-value parameters\n const mergedParams: Record<string, string | string[]> = {};\n\n // Add single value parameters\n for (const [key, value] of Object.entries(singleValueParams)) {\n if (value !== undefined) {\n mergedParams[key] = value;\n }\n }\n\n // Override with multi-value parameters where applicable\n for (const [key, values] of Object.entries(multiValueParams)) {\n if (values && values.length > 1) {\n mergedParams[key] = values;\n }\n }\n\n return {\n body: e.body ? JSON.parse(e.body) : undefined,\n query: parseQueryParams(mergedParams),\n params: e.pathParameters || {},\n };\n }\n getLoggerContext(\n data: APIGatewayProxyEvent,\n context: Context,\n ): LoggerContext {\n return {\n fn: {\n name: context.functionName,\n version: context.functionVersion,\n },\n req: {\n id: data.requestContext.requestId,\n awsRequestId: context.awsRequestId,\n ip: data.requestContext.identity.sourceIp,\n userAgent: data.requestContext.identity.userAgent || undefined,\n path: data.requestContext.path,\n },\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 >,\n ) {\n super(envParser, endpoint);\n }\n}\n"],"mappings":";;;;AAkBA,IAAa,6BAAb,cASU,yBAWR;CACA,SAASA,GAA2C;EAElD,MAAM,mBAAmB,EAAE,mCAAmC,CAAE;EAChE,MAAM,oBAAoB,EAAE,yBAAyB,CAAE;EAGvD,MAAMC,eAAkD,CAAE;AAG1D,OAAK,MAAM,CAAC,KAAK,MAAM,IAAI,OAAO,QAAQ,kBAAkB,CAC1D,KAAI,iBACF,cAAa,OAAO;AAKxB,OAAK,MAAM,CAAC,KAAK,OAAO,IAAI,OAAO,QAAQ,iBAAiB,CAC1D,KAAI,UAAU,OAAO,SAAS,EAC5B,cAAa,OAAO;AAIxB,SAAO;GACL,MAAM,EAAE,OAAO,KAAK,MAAM,EAAE,KAAK;GACjC,OAAO,iBAAiB,aAAa;GACrC,QAAQ,EAAE,kBAAkB,CAAE;EAC/B;CACF;CACD,iBACEC,MACAC,SACe;AACf,SAAO;GACL,IAAI;IACF,MAAM,QAAQ;IACd,SAAS,QAAQ;GAClB;GACD,KAAK;IACH,IAAI,KAAK,eAAe;IACxB,cAAc,QAAQ;IACtB,IAAI,KAAK,eAAe,SAAS;IACjC,WAAW,KAAK,eAAe,SAAS;IACxC,MAAM,KAAK,eAAe;GAC3B;EACF;CACF;CACD,YACYC,WACSC,UAUnB;AACA,QAAM,WAAW,SAAS;EAZhB;EACS;CAYpB;AACF"}