@geekmidas/constructs 0.0.11 → 0.0.13

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 (363) hide show
  1. package/README.md +448 -0
  2. package/dist/AWSLambdaFunction-B-Oxr8qt.d.cts +30 -0
  3. package/dist/{AWSLambdaFunction-DcI_77u8.cjs → AWSLambdaFunction-C-fuCLA3.cjs} +28 -5
  4. package/dist/AWSLambdaFunction-C-fuCLA3.cjs.map +1 -0
  5. package/dist/AWSLambdaFunction-CAm9r5ZX.d.mts +30 -0
  6. package/dist/{AWSLambdaFunction-BTSGYZSx.mjs → AWSLambdaFunction-H65WfXLt.mjs} +28 -5
  7. package/dist/AWSLambdaFunction-H65WfXLt.mjs.map +1 -0
  8. package/dist/{AWSLambdaSubscriberAdaptor-mLOpS63x.d.mts → AWSLambdaSubscriberAdaptor-Cknp_nn1.d.cts} +4 -4
  9. package/dist/{AWSLambdaSubscriberAdaptor-G8y3YkWj.mjs → AWSLambdaSubscriberAdaptor-CyFh7MN8.mjs} +1 -1
  10. package/dist/{AWSLambdaSubscriberAdaptor-G8y3YkWj.mjs.map → AWSLambdaSubscriberAdaptor-CyFh7MN8.mjs.map} +1 -1
  11. package/dist/{AWSLambdaSubscriberAdaptor-DX5NFdWf.d.cts → AWSLambdaSubscriberAdaptor-DpHzp-AM.d.mts} +4 -4
  12. package/dist/{AWSLambdaSubscriberAdaptor-CmPZ10JF.cjs → AWSLambdaSubscriberAdaptor-Dum5bkw3.cjs} +1 -1
  13. package/dist/{AWSLambdaSubscriberAdaptor-CmPZ10JF.cjs.map → AWSLambdaSubscriberAdaptor-Dum5bkw3.cjs.map} +1 -1
  14. package/dist/{AmazonApiGatewayEndpointAdaptor-CATWBIJo.d.mts → AmazonApiGatewayEndpointAdaptor-4hPy5vty.d.mts} +9 -8
  15. package/dist/{AmazonApiGatewayEndpointAdaptor-vi0D3dWg.mjs → AmazonApiGatewayEndpointAdaptor-C6Jk5HSy.mjs} +51 -16
  16. package/dist/AmazonApiGatewayEndpointAdaptor-C6Jk5HSy.mjs.map +1 -0
  17. package/dist/{AmazonApiGatewayEndpointAdaptor-BTqB3c1_.cjs → AmazonApiGatewayEndpointAdaptor-CI9L7Ucn.cjs} +51 -16
  18. package/dist/AmazonApiGatewayEndpointAdaptor-CI9L7Ucn.cjs.map +1 -0
  19. package/dist/{AmazonApiGatewayEndpointAdaptor-BwtDtS-i.d.cts → AmazonApiGatewayEndpointAdaptor-ro0RMLzr.d.cts} +8 -7
  20. package/dist/{AmazonApiGatewayV1EndpointAdaptor-D2_u_zR6.mjs → AmazonApiGatewayV1EndpointAdaptor-BMy8DdNJ.mjs} +3 -3
  21. package/dist/{AmazonApiGatewayV1EndpointAdaptor-D2_u_zR6.mjs.map → AmazonApiGatewayV1EndpointAdaptor-BMy8DdNJ.mjs.map} +1 -1
  22. package/dist/{AmazonApiGatewayV1EndpointAdaptor-B1AVk2MM.d.cts → AmazonApiGatewayV1EndpointAdaptor-BWJWKqQT.d.cts} +3 -3
  23. package/dist/{AmazonApiGatewayV1EndpointAdaptor-nwrtG5L9.cjs → AmazonApiGatewayV1EndpointAdaptor-DYL1bCBS.cjs} +3 -3
  24. package/dist/{AmazonApiGatewayV1EndpointAdaptor-nwrtG5L9.cjs.map → AmazonApiGatewayV1EndpointAdaptor-DYL1bCBS.cjs.map} +1 -1
  25. package/dist/{AmazonApiGatewayV1EndpointAdaptor-2Rd0LLz4.d.mts → AmazonApiGatewayV1EndpointAdaptor-hyR-WwyP.d.mts} +4 -4
  26. package/dist/{AmazonApiGatewayV2EndpointAdaptor-DoWAJ9oN.mjs → AmazonApiGatewayV2EndpointAdaptor-BU5wQMOe.mjs} +3 -3
  27. package/dist/{AmazonApiGatewayV2EndpointAdaptor-DoWAJ9oN.mjs.map → AmazonApiGatewayV2EndpointAdaptor-BU5wQMOe.mjs.map} +1 -1
  28. package/dist/{AmazonApiGatewayV2EndpointAdaptor-FSIdXYV6.cjs → AmazonApiGatewayV2EndpointAdaptor-CPLCMeaN.cjs} +3 -3
  29. package/dist/{AmazonApiGatewayV2EndpointAdaptor-FSIdXYV6.cjs.map → AmazonApiGatewayV2EndpointAdaptor-CPLCMeaN.cjs.map} +1 -1
  30. package/dist/{AmazonApiGatewayV2EndpointAdaptor-DmY_QfjO.d.cts → AmazonApiGatewayV2EndpointAdaptor-D1Irdggp.d.cts} +3 -3
  31. package/dist/{AmazonApiGatewayV2EndpointAdaptor-cBDfwdBx.d.mts → AmazonApiGatewayV2EndpointAdaptor-DX3SuI5S.d.mts} +4 -4
  32. package/dist/{Authorizer-Bbk9ziuG.d.mts → Authorizer-BTmly8ps.d.cts} +1 -1
  33. package/dist/{Authorizer-iXsSB600.d.cts → Authorizer-pmPvIVgv.d.mts} +1 -1
  34. package/dist/{BaseFunctionBuilder-DSqF1r3a.mjs → BaseFunctionBuilder-B5gkW0Kt.mjs} +16 -2
  35. package/dist/BaseFunctionBuilder-B5gkW0Kt.mjs.map +1 -0
  36. package/dist/{BaseFunctionBuilder-bTDKP7bd.cjs → BaseFunctionBuilder-C5Se7pdL.cjs} +16 -2
  37. package/dist/BaseFunctionBuilder-C5Se7pdL.cjs.map +1 -0
  38. package/dist/{BaseFunctionBuilder-DOcm1heZ.d.mts → BaseFunctionBuilder-CbDnPZpD.d.mts} +13 -4
  39. package/dist/{BaseFunctionBuilder-hWNVKXQB.d.cts → BaseFunctionBuilder-DUZMbEr3.d.cts} +13 -4
  40. package/dist/{Construct-XCGKof_O.cjs → Construct-BYSPikVm.cjs} +8 -3
  41. package/dist/Construct-BYSPikVm.cjs.map +1 -0
  42. package/dist/{Construct-rZQg2yus.mjs → Construct-LWeB1rSQ.mjs} +8 -3
  43. package/dist/Construct-LWeB1rSQ.mjs.map +1 -0
  44. package/dist/{Construct-iDmbkZ3o.d.mts → Construct-ZPqE0vhn.d.mts} +5 -3
  45. package/dist/{Construct-zc8BkRSp.d.cts → Construct-dI_rgdSp.d.cts} +5 -3
  46. package/dist/Construct.cjs +1 -1
  47. package/dist/Construct.d.cts +1 -1
  48. package/dist/Construct.d.mts +1 -1
  49. package/dist/Construct.mjs +1 -1
  50. package/dist/{Cron-CYIhd0VE.cjs → Cron-Bi3QOge_.cjs} +5 -5
  51. package/dist/Cron-Bi3QOge_.cjs.map +1 -0
  52. package/dist/{Cron-D5HGEt6g.d.mts → Cron-COdfP0Jd.d.cts} +5 -5
  53. package/dist/{Cron-DbJNPTbP.d.cts → Cron-D8cn_ahj.d.mts} +5 -5
  54. package/dist/{Cron-BnO1uXhh.mjs → Cron-Dy_HW2Vv.mjs} +5 -5
  55. package/dist/Cron-Dy_HW2Vv.mjs.map +1 -0
  56. package/dist/{CronBuilder-BxKwHCdJ.mjs → CronBuilder-Bl3A2Zp4.mjs} +15 -6
  57. package/dist/CronBuilder-Bl3A2Zp4.mjs.map +1 -0
  58. package/dist/{CronBuilder-D-546XtP.d.cts → CronBuilder-DntF6H3A.d.cts} +17 -12
  59. package/dist/{CronBuilder-vRiZb1_N.d.mts → CronBuilder-DoMnSs_0.d.mts} +17 -12
  60. package/dist/{CronBuilder-D_3AiPFO.cjs → CronBuilder-Dv_w7Yri.cjs} +15 -6
  61. package/dist/CronBuilder-Dv_w7Yri.cjs.map +1 -0
  62. package/dist/{Endpoint-DqZkc6ft.d.mts → Endpoint-Bbs_sFvg.d.mts} +120 -23
  63. package/dist/{Endpoint-BpTSQn7W.d.cts → Endpoint-Bu8Phz6y.d.cts} +120 -23
  64. package/dist/{Endpoint-BdIGWw1H.cjs → Endpoint-DDpF7NO1.cjs} +22 -10
  65. package/dist/Endpoint-DDpF7NO1.cjs.map +1 -0
  66. package/dist/{Endpoint-ChzcIFdV.mjs → Endpoint-S6Yh2_PN.mjs} +22 -10
  67. package/dist/Endpoint-S6Yh2_PN.mjs.map +1 -0
  68. package/dist/EndpointBuilder-CPxmF_w7.d.cts +103 -0
  69. package/dist/EndpointBuilder-Csfyfjd7.d.mts +103 -0
  70. package/dist/{EndpointBuilder-dmMiNRm9.cjs → EndpointBuilder-DpGmObMb.cjs} +68 -5
  71. package/dist/EndpointBuilder-DpGmObMb.cjs.map +1 -0
  72. package/dist/{EndpointBuilder-yo40Qkf_.mjs → EndpointBuilder-aE2E6WTx.mjs} +68 -5
  73. package/dist/EndpointBuilder-aE2E6WTx.mjs.map +1 -0
  74. package/dist/{EndpointFactory-D_mmO7Gu.d.mts → EndpointFactory-Bf9JSWzI.d.cts} +12 -11
  75. package/dist/{EndpointFactory-CNbcr8u_.cjs → EndpointFactory-BfH6mjJ3.cjs} +3 -3
  76. package/dist/EndpointFactory-BfH6mjJ3.cjs.map +1 -0
  77. package/dist/{EndpointFactory-JPhk0Qom.d.cts → EndpointFactory-Cgk1R0oO.d.mts} +12 -11
  78. package/dist/{EndpointFactory-LD3upVQK.mjs → EndpointFactory-D4leYk1N.mjs} +3 -3
  79. package/dist/EndpointFactory-D4leYk1N.mjs.map +1 -0
  80. package/dist/{Function-DDaSfL_E.cjs → Function-DagDbeXo.cjs} +7 -6
  81. package/dist/Function-DagDbeXo.cjs.map +1 -0
  82. package/dist/{Function-Cl9fiR3a.mjs → Function-DfKsM5Kx.mjs} +7 -6
  83. package/dist/Function-DfKsM5Kx.mjs.map +1 -0
  84. package/dist/{Function-C-5_23Wi.d.mts → Function-V9M9UVHp.d.mts} +25 -7
  85. package/dist/{Function-CW-WcZTu.d.cts → Function-VI1TB3Mh.d.cts} +25 -7
  86. package/dist/{FunctionBuilder-vW12WFOw.mjs → FunctionBuilder-CVT7bG2o.mjs} +27 -6
  87. package/dist/FunctionBuilder-CVT7bG2o.mjs.map +1 -0
  88. package/dist/FunctionBuilder-CjVEFTYC.d.cts +38 -0
  89. package/dist/FunctionBuilder-D1ofSeMd.d.mts +38 -0
  90. package/dist/{FunctionBuilder-LQuBiqRc.cjs → FunctionBuilder-DXvG_XD-.cjs} +27 -6
  91. package/dist/FunctionBuilder-DXvG_XD-.cjs.map +1 -0
  92. package/dist/FunctionExecutionWrapper-Bubnr0zA.mjs +101 -0
  93. package/dist/FunctionExecutionWrapper-Bubnr0zA.mjs.map +1 -0
  94. package/dist/FunctionExecutionWrapper-CwtwYozd.d.cts +48 -0
  95. package/dist/FunctionExecutionWrapper-DkNycmOh.cjs +107 -0
  96. package/dist/FunctionExecutionWrapper-DkNycmOh.cjs.map +1 -0
  97. package/dist/FunctionExecutionWrapper-rhbIYT0Q.d.mts +48 -0
  98. package/dist/{HonoEndpointAdaptor-BVQtyvna.d.cts → HonoEndpointAdaptor-B34kNobH.d.cts} +8 -7
  99. package/dist/{HonoEndpointAdaptor-W-disJnm.d.mts → HonoEndpointAdaptor-BDpi32mH.d.mts} +9 -8
  100. package/dist/{HonoEndpointAdaptor-Bc61IS6Q.cjs → HonoEndpointAdaptor-CfLRHHFw.cjs} +55 -20
  101. package/dist/HonoEndpointAdaptor-CfLRHHFw.cjs.map +1 -0
  102. package/dist/{HonoEndpointAdaptor-NR3h5gml.mjs → HonoEndpointAdaptor-DuyE06nH.mjs} +55 -20
  103. package/dist/HonoEndpointAdaptor-DuyE06nH.mjs.map +1 -0
  104. package/dist/{Subscriber-C2OPATI8.cjs → Subscriber-Bdh8rMSL.cjs} +2 -2
  105. package/dist/{Subscriber-C2OPATI8.cjs.map → Subscriber-Bdh8rMSL.cjs.map} +1 -1
  106. package/dist/{Subscriber-BVq3ST4C.d.cts → Subscriber-BhzqUzs-.d.cts} +2 -2
  107. package/dist/{Subscriber-BKftCzwT.mjs → Subscriber-CJOWwaw1.mjs} +2 -2
  108. package/dist/{Subscriber-BKftCzwT.mjs.map → Subscriber-CJOWwaw1.mjs.map} +1 -1
  109. package/dist/{Subscriber-BuHaqWo4.d.mts → Subscriber-s6yfjeOc.d.mts} +2 -2
  110. package/dist/{SubscriberBuilder-2asHtGbl.d.mts → SubscriberBuilder-BCVkp-ga.d.cts} +3 -3
  111. package/dist/{SubscriberBuilder-yDfpHPZE.mjs → SubscriberBuilder-BWQmiYd8.mjs} +2 -2
  112. package/dist/{SubscriberBuilder-yDfpHPZE.mjs.map → SubscriberBuilder-BWQmiYd8.mjs.map} +1 -1
  113. package/dist/{SubscriberBuilder-yikoQ8ND.cjs → SubscriberBuilder-DieD_60p.cjs} +2 -2
  114. package/dist/{SubscriberBuilder-yikoQ8ND.cjs.map → SubscriberBuilder-DieD_60p.cjs.map} +1 -1
  115. package/dist/{SubscriberBuilder-CHIRyNjy.d.cts → SubscriberBuilder-aCua5_wA.d.mts} +3 -3
  116. package/dist/{TestEndpointAdaptor-DpmNXp7G.mjs → TestEndpointAdaptor-BEyZa0Yg.mjs} +51 -18
  117. package/dist/TestEndpointAdaptor-BEyZa0Yg.mjs.map +1 -0
  118. package/dist/{TestEndpointAdaptor-DA1D6l-U.cjs → TestEndpointAdaptor-C8425RJ0.cjs} +51 -18
  119. package/dist/TestEndpointAdaptor-C8425RJ0.cjs.map +1 -0
  120. package/dist/{TestEndpointAdaptor-BrE5Rs4U.d.cts → TestEndpointAdaptor-H5To8PH7.d.cts} +6 -5
  121. package/dist/{TestEndpointAdaptor-B10J-cI-.d.mts → TestEndpointAdaptor-jxn68ayg.d.mts} +7 -6
  122. package/dist/adaptors/aws.cjs +14 -13
  123. package/dist/adaptors/aws.d.cts +14 -14
  124. package/dist/adaptors/aws.d.mts +15 -15
  125. package/dist/adaptors/aws.mjs +14 -13
  126. package/dist/adaptors/hono.cjs +10 -9
  127. package/dist/adaptors/hono.d.cts +8 -8
  128. package/dist/adaptors/hono.d.mts +9 -9
  129. package/dist/adaptors/hono.mjs +10 -9
  130. package/dist/adaptors/testing.cjs +8 -7
  131. package/dist/adaptors/testing.d.cts +8 -8
  132. package/dist/adaptors/testing.d.mts +9 -9
  133. package/dist/adaptors/testing.mjs +8 -7
  134. package/dist/crons/Cron.cjs +6 -6
  135. package/dist/crons/Cron.d.cts +6 -6
  136. package/dist/crons/Cron.d.mts +6 -6
  137. package/dist/crons/Cron.mjs +6 -6
  138. package/dist/crons/CronBuilder.cjs +7 -7
  139. package/dist/crons/CronBuilder.d.cts +7 -7
  140. package/dist/crons/CronBuilder.d.mts +7 -7
  141. package/dist/crons/CronBuilder.mjs +7 -7
  142. package/dist/crons/index.cjs +7 -7
  143. package/dist/crons/index.d.cts +11 -11
  144. package/dist/crons/index.d.mts +8 -8
  145. package/dist/crons/index.mjs +7 -7
  146. package/dist/endpoints/AmazonApiGatewayEndpointAdaptor.cjs +8 -7
  147. package/dist/endpoints/AmazonApiGatewayEndpointAdaptor.d.cts +8 -8
  148. package/dist/endpoints/AmazonApiGatewayEndpointAdaptor.d.mts +9 -9
  149. package/dist/endpoints/AmazonApiGatewayEndpointAdaptor.mjs +8 -7
  150. package/dist/endpoints/AmazonApiGatewayV1EndpointAdaptor.cjs +10 -9
  151. package/dist/endpoints/AmazonApiGatewayV1EndpointAdaptor.d.cts +9 -9
  152. package/dist/endpoints/AmazonApiGatewayV1EndpointAdaptor.d.mts +10 -10
  153. package/dist/endpoints/AmazonApiGatewayV1EndpointAdaptor.mjs +10 -9
  154. package/dist/endpoints/AmazonApiGatewayV2EndpointAdaptor.cjs +10 -9
  155. package/dist/endpoints/AmazonApiGatewayV2EndpointAdaptor.d.cts +9 -9
  156. package/dist/endpoints/AmazonApiGatewayV2EndpointAdaptor.d.mts +10 -10
  157. package/dist/endpoints/AmazonApiGatewayV2EndpointAdaptor.mjs +10 -9
  158. package/dist/endpoints/Authorizer.d.cts +1 -1
  159. package/dist/endpoints/Authorizer.d.mts +1 -1
  160. package/dist/endpoints/Endpoint.cjs +6 -6
  161. package/dist/endpoints/Endpoint.d.cts +7 -7
  162. package/dist/endpoints/Endpoint.d.mts +8 -8
  163. package/dist/endpoints/Endpoint.mjs +6 -6
  164. package/dist/endpoints/EndpointBuilder.cjs +7 -7
  165. package/dist/endpoints/EndpointBuilder.d.cts +8 -8
  166. package/dist/endpoints/EndpointBuilder.d.mts +9 -9
  167. package/dist/endpoints/EndpointBuilder.mjs +7 -7
  168. package/dist/endpoints/EndpointFactory.cjs +8 -8
  169. package/dist/endpoints/EndpointFactory.d.cts +9 -9
  170. package/dist/endpoints/EndpointFactory.d.mts +10 -10
  171. package/dist/endpoints/EndpointFactory.mjs +8 -8
  172. package/dist/endpoints/HonoEndpointAdaptor.cjs +10 -9
  173. package/dist/endpoints/HonoEndpointAdaptor.d.cts +8 -8
  174. package/dist/endpoints/HonoEndpointAdaptor.d.mts +9 -9
  175. package/dist/endpoints/HonoEndpointAdaptor.mjs +10 -9
  176. package/dist/endpoints/TestEndpointAdaptor.cjs +8 -7
  177. package/dist/endpoints/TestEndpointAdaptor.d.cts +8 -8
  178. package/dist/endpoints/TestEndpointAdaptor.d.mts +9 -9
  179. package/dist/endpoints/TestEndpointAdaptor.mjs +8 -7
  180. package/dist/endpoints/audit.cjs +0 -0
  181. package/dist/endpoints/audit.d.cts +9 -0
  182. package/dist/endpoints/audit.d.mts +9 -0
  183. package/dist/endpoints/audit.mjs +0 -0
  184. package/dist/endpoints/helpers.cjs +7 -7
  185. package/dist/endpoints/helpers.d.cts +7 -7
  186. package/dist/endpoints/helpers.d.mts +8 -8
  187. package/dist/endpoints/helpers.mjs +7 -7
  188. package/dist/endpoints/index.cjs +8 -8
  189. package/dist/endpoints/index.cjs.map +1 -1
  190. package/dist/endpoints/index.d.cts +12 -12
  191. package/dist/endpoints/index.d.mts +13 -13
  192. package/dist/endpoints/index.mjs +8 -8
  193. package/dist/endpoints/index.mjs.map +1 -1
  194. package/dist/endpoints/parseHonoQuery.cjs +1 -1
  195. package/dist/endpoints/parseHonoQuery.mjs +1 -1
  196. package/dist/endpoints/parseQueryParams.cjs +1 -1
  197. package/dist/endpoints/parseQueryParams.mjs +1 -1
  198. package/dist/endpoints/processAudits.cjs +5 -0
  199. package/dist/endpoints/processAudits.d.cts +74 -0
  200. package/dist/endpoints/processAudits.d.mts +74 -0
  201. package/dist/endpoints/processAudits.mjs +3 -0
  202. package/dist/functions/AWSLambdaFunction.cjs +6 -6
  203. package/dist/functions/AWSLambdaFunction.d.cts +4 -4
  204. package/dist/functions/AWSLambdaFunction.d.mts +4 -4
  205. package/dist/functions/AWSLambdaFunction.mjs +6 -6
  206. package/dist/functions/BaseFunctionBuilder.cjs +2 -2
  207. package/dist/functions/BaseFunctionBuilder.d.cts +2 -2
  208. package/dist/functions/BaseFunctionBuilder.d.mts +2 -2
  209. package/dist/functions/BaseFunctionBuilder.mjs +2 -2
  210. package/dist/functions/Function.cjs +2 -2
  211. package/dist/functions/Function.d.cts +2 -2
  212. package/dist/functions/Function.d.mts +2 -2
  213. package/dist/functions/Function.mjs +2 -2
  214. package/dist/functions/FunctionBuilder.cjs +4 -4
  215. package/dist/functions/FunctionBuilder.d.cts +4 -4
  216. package/dist/functions/FunctionBuilder.d.mts +4 -4
  217. package/dist/functions/FunctionBuilder.mjs +4 -4
  218. package/dist/functions/FunctionExecutionWrapper.cjs +5 -5
  219. package/dist/functions/FunctionExecutionWrapper.d.cts +3 -3
  220. package/dist/functions/FunctionExecutionWrapper.d.mts +3 -3
  221. package/dist/functions/FunctionExecutionWrapper.mjs +5 -5
  222. package/dist/functions/TestFunctionAdaptor.cjs +38 -5
  223. package/dist/functions/TestFunctionAdaptor.cjs.map +1 -1
  224. package/dist/functions/TestFunctionAdaptor.d.cts +10 -7
  225. package/dist/functions/TestFunctionAdaptor.d.mts +10 -7
  226. package/dist/functions/TestFunctionAdaptor.mjs +38 -5
  227. package/dist/functions/TestFunctionAdaptor.mjs.map +1 -1
  228. package/dist/functions/index.cjs +5 -5
  229. package/dist/functions/index.d.cts +5 -5
  230. package/dist/functions/index.d.mts +5 -5
  231. package/dist/functions/index.mjs +5 -5
  232. package/dist/{functions-yg097ymU.cjs → functions-FCb-wWFC.cjs} +2 -2
  233. package/dist/{functions-yg097ymU.cjs.map → functions-FCb-wWFC.cjs.map} +1 -1
  234. package/dist/functions-JhRsNoAZ.mjs +8 -0
  235. package/dist/{functions-HCoZ4YKF.mjs.map → functions-JhRsNoAZ.mjs.map} +1 -1
  236. package/dist/{helpers-CHsIWAEx.mjs → helpers-2CLKTnRm.mjs} +2 -2
  237. package/dist/{helpers-CHsIWAEx.mjs.map → helpers-2CLKTnRm.mjs.map} +1 -1
  238. package/dist/{helpers-Cq6wjo7s.cjs → helpers-Khuhi_Qx.cjs} +2 -2
  239. package/dist/{helpers-Cq6wjo7s.cjs.map → helpers-Khuhi_Qx.cjs.map} +1 -1
  240. package/dist/index-Bomy7R9z.d.mts +10 -0
  241. package/dist/index-DRYfZHb3.d.cts +10 -0
  242. package/dist/index.cjs +1 -1
  243. package/dist/index.d.cts +1 -1
  244. package/dist/index.d.mts +2 -2
  245. package/dist/index.mjs +1 -1
  246. package/dist/{parseHonoQuery-DopC24vB.cjs → parseHonoQuery-CT8Cvin-.cjs} +1 -1
  247. package/dist/{parseHonoQuery-DopC24vB.cjs.map → parseHonoQuery-CT8Cvin-.cjs.map} +1 -1
  248. package/dist/{parseHonoQuery-znDKBhdE.mjs → parseHonoQuery-CwFKw2ua.mjs} +1 -1
  249. package/dist/{parseHonoQuery-znDKBhdE.mjs.map → parseHonoQuery-CwFKw2ua.mjs.map} +1 -1
  250. package/dist/{parseQueryParams-BJaRh3OB.mjs → parseQueryParams-CHINupbZ.mjs} +1 -1
  251. package/dist/{parseQueryParams-BJaRh3OB.mjs.map → parseQueryParams-CHINupbZ.mjs.map} +1 -1
  252. package/dist/{parseQueryParams-BzPop4I1.cjs → parseQueryParams-CwvXXwkW.cjs} +1 -1
  253. package/dist/{parseQueryParams-BzPop4I1.cjs.map → parseQueryParams-CwvXXwkW.cjs.map} +1 -1
  254. package/dist/processAudits-BFokHhCO.cjs +174 -0
  255. package/dist/processAudits-BFokHhCO.cjs.map +1 -0
  256. package/dist/processAudits-DfcB-X-4.mjs +156 -0
  257. package/dist/processAudits-DfcB-X-4.mjs.map +1 -0
  258. package/dist/publisher-Bw4770Hi.mjs.map +1 -1
  259. package/dist/publisher-lFQleddL.cjs.map +1 -1
  260. package/dist/publisher.d.cts +3 -2
  261. package/dist/publisher.d.mts +3 -2
  262. package/dist/subscribers/AWSLambdaSubscriberAdaptor.cjs +1 -1
  263. package/dist/subscribers/AWSLambdaSubscriberAdaptor.d.cts +3 -3
  264. package/dist/subscribers/AWSLambdaSubscriberAdaptor.d.mts +3 -3
  265. package/dist/subscribers/AWSLambdaSubscriberAdaptor.mjs +1 -1
  266. package/dist/subscribers/Subscriber.cjs +2 -2
  267. package/dist/subscribers/Subscriber.d.cts +2 -2
  268. package/dist/subscribers/Subscriber.d.mts +2 -2
  269. package/dist/subscribers/Subscriber.mjs +2 -2
  270. package/dist/subscribers/SubscriberBuilder.cjs +3 -3
  271. package/dist/subscribers/SubscriberBuilder.d.cts +3 -3
  272. package/dist/subscribers/SubscriberBuilder.d.mts +3 -3
  273. package/dist/subscribers/SubscriberBuilder.mjs +3 -3
  274. package/dist/subscribers/index.cjs +3 -3
  275. package/dist/subscribers/index.d.cts +5 -5
  276. package/dist/subscribers/index.d.mts +5 -5
  277. package/dist/subscribers/index.mjs +3 -3
  278. package/dist/{types-CVq20-fE.d.mts → types-DKf0juBf.d.mts} +1 -1
  279. package/dist/types.d.mts +1 -1
  280. package/package.json +15 -11
  281. package/src/Construct.ts +8 -0
  282. package/src/crons/Cron.ts +12 -3
  283. package/src/crons/CronBuilder.ts +85 -13
  284. package/src/crons/__tests__/CronBuilder.state-isolation.spec.ts +2 -2
  285. package/src/endpoints/AmazonApiGatewayEndpointAdaptor.ts +112 -20
  286. package/src/endpoints/Endpoint.ts +208 -39
  287. package/src/endpoints/EndpointBuilder.ts +291 -21
  288. package/src/endpoints/EndpointFactory.ts +5 -1
  289. package/src/endpoints/HonoEndpointAdaptor.ts +144 -33
  290. package/src/endpoints/TestEndpointAdaptor.ts +116 -21
  291. package/src/endpoints/__tests__/AmazonApiGatewayV1EndpointAdaptor.events.spec.ts +8 -0
  292. package/src/endpoints/__tests__/AmazonApiGatewayV1EndpointAdaptor.spec.ts +29 -0
  293. package/src/endpoints/__tests__/AmazonApiGatewayV2EndpointAdaptor.audits.spec.ts +626 -0
  294. package/src/endpoints/__tests__/AmazonApiGatewayV2EndpointAdaptor.events.spec.ts +9 -0
  295. package/src/endpoints/__tests__/AmazonApiGatewayV2EndpointAdaptor.kysely-audit.integration.spec.ts +757 -0
  296. package/src/endpoints/__tests__/Endpoint.cookies.spec.ts +3 -1
  297. package/src/endpoints/__tests__/Endpoint.manifest.spec.ts +1 -1
  298. package/src/endpoints/__tests__/Endpoint.spec.ts +19 -0
  299. package/src/endpoints/__tests__/EndpointBuilder.audit.spec.ts +448 -0
  300. package/src/endpoints/__tests__/EndpointFactory.authorizers.spec.ts +51 -14
  301. package/src/endpoints/__tests__/EndpointFactory.reference-audit.spec.ts +8 -8
  302. package/src/endpoints/__tests__/EndpointFactory.state-isolation.spec.ts +11 -11
  303. package/src/endpoints/__tests__/HonoEndpointAdaptor.audit-transactions.spec.ts +703 -0
  304. package/src/endpoints/__tests__/HonoEndpointAdaptor.audits.spec.ts +632 -0
  305. package/src/endpoints/__tests__/HonoEndpointAdaptor.events.spec.ts +8 -0
  306. package/src/endpoints/__tests__/HonoEndpointAdaptor.kysely-audit.integration.spec.ts +1063 -0
  307. package/src/endpoints/__tests__/HonoEndpointAdaptor.openapi.spec.ts +4 -0
  308. package/src/endpoints/__tests__/HonoEndpointAdaptor.spec.ts +25 -0
  309. package/src/endpoints/audit.ts +87 -0
  310. package/src/endpoints/index.ts +1 -0
  311. package/src/endpoints/processAudits.ts +348 -0
  312. package/src/functions/AWSLambdaFunction.ts +125 -12
  313. package/src/functions/BaseFunctionBuilder.ts +98 -7
  314. package/src/functions/Function.ts +83 -15
  315. package/src/functions/FunctionBuilder.ts +217 -17
  316. package/src/functions/FunctionExecutionWrapper.ts +133 -2
  317. package/src/functions/TestFunctionAdaptor.ts +94 -8
  318. package/src/functions/__tests__/AWSLambdaFunctionAdaptor.spec.ts +82 -0
  319. package/src/functions/__tests__/Function.audits.spec.ts +393 -0
  320. package/src/functions/__tests__/Function.spec.ts +76 -0
  321. package/src/functions/__tests__/FunctionBuilder.state-isolation.spec.ts +54 -7
  322. package/src/publisher.ts +12 -1
  323. package/dist/AWSLambdaFunction-BTSGYZSx.mjs.map +0 -1
  324. package/dist/AWSLambdaFunction-Bel0NFTl.d.mts +0 -27
  325. package/dist/AWSLambdaFunction-DcI_77u8.cjs.map +0 -1
  326. package/dist/AWSLambdaFunction-xyCenuD7.d.cts +0 -27
  327. package/dist/AmazonApiGatewayEndpointAdaptor-BTqB3c1_.cjs.map +0 -1
  328. package/dist/AmazonApiGatewayEndpointAdaptor-vi0D3dWg.mjs.map +0 -1
  329. package/dist/BaseFunctionBuilder-DSqF1r3a.mjs.map +0 -1
  330. package/dist/BaseFunctionBuilder-bTDKP7bd.cjs.map +0 -1
  331. package/dist/Construct-XCGKof_O.cjs.map +0 -1
  332. package/dist/Construct-rZQg2yus.mjs.map +0 -1
  333. package/dist/Cron-BnO1uXhh.mjs.map +0 -1
  334. package/dist/Cron-CYIhd0VE.cjs.map +0 -1
  335. package/dist/CronBuilder-BxKwHCdJ.mjs.map +0 -1
  336. package/dist/CronBuilder-D_3AiPFO.cjs.map +0 -1
  337. package/dist/Endpoint-BdIGWw1H.cjs.map +0 -1
  338. package/dist/Endpoint-ChzcIFdV.mjs.map +0 -1
  339. package/dist/EndpointBuilder-Cx6pUcCn.d.mts +0 -55
  340. package/dist/EndpointBuilder-Xka8ULR1.d.cts +0 -55
  341. package/dist/EndpointBuilder-dmMiNRm9.cjs.map +0 -1
  342. package/dist/EndpointBuilder-yo40Qkf_.mjs.map +0 -1
  343. package/dist/EndpointFactory-CNbcr8u_.cjs.map +0 -1
  344. package/dist/EndpointFactory-LD3upVQK.mjs.map +0 -1
  345. package/dist/Function-Cl9fiR3a.mjs.map +0 -1
  346. package/dist/Function-DDaSfL_E.cjs.map +0 -1
  347. package/dist/FunctionBuilder-LQuBiqRc.cjs.map +0 -1
  348. package/dist/FunctionBuilder-fU1H7tFN.d.cts +0 -26
  349. package/dist/FunctionBuilder-udObIGV0.d.mts +0 -26
  350. package/dist/FunctionBuilder-vW12WFOw.mjs.map +0 -1
  351. package/dist/FunctionExecutionWrapper-BBIoHUt6.cjs +0 -42
  352. package/dist/FunctionExecutionWrapper-BBIoHUt6.cjs.map +0 -1
  353. package/dist/FunctionExecutionWrapper-DYBy9OP3.d.mts +0 -24
  354. package/dist/FunctionExecutionWrapper-Dtyhid1Q.mjs +0 -36
  355. package/dist/FunctionExecutionWrapper-Dtyhid1Q.mjs.map +0 -1
  356. package/dist/FunctionExecutionWrapper-Dwr2ZKzC.d.cts +0 -24
  357. package/dist/HonoEndpointAdaptor-Bc61IS6Q.cjs.map +0 -1
  358. package/dist/HonoEndpointAdaptor-NR3h5gml.mjs.map +0 -1
  359. package/dist/TestEndpointAdaptor-DA1D6l-U.cjs.map +0 -1
  360. package/dist/TestEndpointAdaptor-DpmNXp7G.mjs.map +0 -1
  361. package/dist/functions-HCoZ4YKF.mjs +0 -8
  362. package/dist/index-RtxMVjUZ.d.mts +0 -9
  363. package/dist/index-fiIGH95t.d.cts +0 -9
@@ -0,0 +1,626 @@
1
+ import type {
2
+ AuditRecord,
3
+ AuditStorage,
4
+ AuditableAction,
5
+ } from '@geekmidas/audit';
6
+ import { EnvironmentParser } from '@geekmidas/envkit';
7
+ import type { Logger } from '@geekmidas/logger';
8
+ import { type Service, ServiceDiscovery } from '@geekmidas/services';
9
+ import { createMockContext, createMockV2Event } from '@geekmidas/testkit/aws';
10
+ import { beforeEach, describe, expect, it, vi } from 'vitest';
11
+ import { z } from 'zod';
12
+ import { AmazonApiGatewayV2Endpoint } from '../AmazonApiGatewayV2EndpointAdaptor';
13
+ import { Endpoint } from '../Endpoint';
14
+ import type { ActorExtractor, MappedAudit } from '../audit';
15
+
16
+ // In-memory audit storage for testing
17
+ class InMemoryAuditStorage implements AuditStorage {
18
+ records: AuditRecord[] = [];
19
+
20
+ async write(records: AuditRecord[]): Promise<void> {
21
+ this.records.push(...records);
22
+ }
23
+
24
+ async query(): Promise<AuditRecord[]> {
25
+ return this.records;
26
+ }
27
+
28
+ clear(): void {
29
+ this.records = [];
30
+ }
31
+ }
32
+
33
+ // Test audit action types
34
+ type TestAuditAction =
35
+ | AuditableAction<'user.created', { userId: string; email: string }>
36
+ | AuditableAction<'user.updated', { userId: string; changes: string[] }>
37
+ | AuditableAction<'order.placed', { orderId: string; total: number }>;
38
+
39
+ // Mock logger
40
+ const createMockLogger = (): Logger => {
41
+ const logger: Logger = {
42
+ debug: vi.fn(),
43
+ info: vi.fn(),
44
+ warn: vi.fn(),
45
+ error: vi.fn(),
46
+ fatal: vi.fn(),
47
+ trace: vi.fn(),
48
+ child: vi.fn(() => logger),
49
+ };
50
+ return logger;
51
+ };
52
+
53
+ describe('AmazonApiGatewayV2Endpoint Audits', () => {
54
+ let mockLogger: Logger;
55
+ let envParser: EnvironmentParser<{}>;
56
+
57
+ beforeEach(() => {
58
+ vi.clearAllMocks();
59
+ ServiceDiscovery.reset();
60
+ mockLogger = createMockLogger();
61
+ envParser = new EnvironmentParser({});
62
+ });
63
+
64
+ it('should process audits after successful endpoint execution', async () => {
65
+ const auditStorage = new InMemoryAuditStorage();
66
+
67
+ const auditStorageService: Service<'auditStorage', InMemoryAuditStorage> = {
68
+ serviceName: 'auditStorage' as const,
69
+ register: vi.fn().mockResolvedValue(auditStorage),
70
+ };
71
+
72
+ const outputSchema = z.object({ id: z.string(), email: z.string() });
73
+
74
+ const audits: MappedAudit<TestAuditAction, typeof outputSchema>[] = [
75
+ {
76
+ type: 'user.created',
77
+ payload: (response) => ({ userId: response.id, email: response.email }),
78
+ },
79
+ ];
80
+
81
+ const endpoint = new Endpoint({
82
+ route: '/users',
83
+ method: 'POST',
84
+ fn: async () => ({ id: '123', email: 'test@example.com' }),
85
+ input: undefined,
86
+ output: outputSchema,
87
+ services: [],
88
+ logger: mockLogger,
89
+ timeout: undefined,
90
+ memorySize: undefined,
91
+ status: 200,
92
+ getSession: undefined,
93
+ authorize: undefined,
94
+ description: undefined,
95
+ events: [],
96
+ publisherService: undefined,
97
+ auditorStorageService: auditStorageService,
98
+ audits,
99
+ });
100
+
101
+ const adapter = new AmazonApiGatewayV2Endpoint(envParser, endpoint as any);
102
+ const handler = adapter.handler;
103
+
104
+ const event = createMockV2Event({
105
+ requestContext: {
106
+ ...createMockV2Event().requestContext,
107
+ http: {
108
+ method: 'POST',
109
+ path: '/users',
110
+ protocol: 'HTTP/1.1',
111
+ sourceIp: '192.168.1.1',
112
+ userAgent: 'test-agent',
113
+ },
114
+ },
115
+ body: JSON.stringify({}),
116
+ });
117
+ const context = createMockContext();
118
+ const response = await handler(event, context);
119
+
120
+ expect(response.statusCode).toBe(200);
121
+ expect(response.body).toBe(
122
+ JSON.stringify({ id: '123', email: 'test@example.com' }),
123
+ );
124
+
125
+ // Verify audit was written
126
+ expect(auditStorage.records).toHaveLength(1);
127
+ expect(auditStorage.records[0].type).toBe('user.created');
128
+ expect(auditStorage.records[0].payload).toEqual({
129
+ userId: '123',
130
+ email: 'test@example.com',
131
+ });
132
+ });
133
+
134
+ it('should process multiple audits after successful endpoint execution', async () => {
135
+ const auditStorage = new InMemoryAuditStorage();
136
+
137
+ const auditStorageService: Service<'auditStorage', InMemoryAuditStorage> = {
138
+ serviceName: 'auditStorage' as const,
139
+ register: vi.fn().mockResolvedValue(auditStorage),
140
+ };
141
+
142
+ const outputSchema = z.object({
143
+ id: z.string(),
144
+ email: z.string(),
145
+ changes: z.array(z.string()),
146
+ });
147
+
148
+ const audits: MappedAudit<TestAuditAction, typeof outputSchema>[] = [
149
+ {
150
+ type: 'user.created',
151
+ payload: (response) => ({ userId: response.id, email: response.email }),
152
+ },
153
+ {
154
+ type: 'user.updated',
155
+ payload: (response) => ({
156
+ userId: response.id,
157
+ changes: response.changes,
158
+ }),
159
+ },
160
+ ];
161
+
162
+ const endpoint = new Endpoint({
163
+ route: '/users',
164
+ method: 'POST',
165
+ fn: async () => ({
166
+ id: '456',
167
+ email: 'user@example.com',
168
+ changes: ['name', 'email'],
169
+ }),
170
+ input: undefined,
171
+ output: outputSchema,
172
+ services: [],
173
+ logger: mockLogger,
174
+ timeout: undefined,
175
+ memorySize: undefined,
176
+ status: 201,
177
+ getSession: undefined,
178
+ authorize: undefined,
179
+ description: undefined,
180
+ events: [],
181
+ publisherService: undefined,
182
+ auditorStorageService: auditStorageService,
183
+ audits,
184
+ });
185
+
186
+ const adapter = new AmazonApiGatewayV2Endpoint(envParser, endpoint as any);
187
+ const handler = adapter.handler;
188
+
189
+ const event = createMockV2Event({
190
+ requestContext: {
191
+ ...createMockV2Event().requestContext,
192
+ http: {
193
+ method: 'POST',
194
+ path: '/users',
195
+ protocol: 'HTTP/1.1',
196
+ sourceIp: '192.168.1.1',
197
+ userAgent: 'test-agent',
198
+ },
199
+ },
200
+ body: JSON.stringify({}),
201
+ });
202
+ const context = createMockContext();
203
+ const response = await handler(event, context);
204
+
205
+ expect(response.statusCode).toBe(201);
206
+
207
+ // Verify both audits were written
208
+ expect(auditStorage.records).toHaveLength(2);
209
+ expect(auditStorage.records[0].type).toBe('user.created');
210
+ expect(auditStorage.records[1].type).toBe('user.updated');
211
+ });
212
+
213
+ it('should respect when conditions for audits', async () => {
214
+ const auditStorage = new InMemoryAuditStorage();
215
+
216
+ const auditStorageService: Service<'auditStorage', InMemoryAuditStorage> = {
217
+ serviceName: 'auditStorage' as const,
218
+ register: vi.fn().mockResolvedValue(auditStorage),
219
+ };
220
+
221
+ const outputSchema = z.object({
222
+ id: z.string(),
223
+ email: z.string(),
224
+ isNew: z.boolean(),
225
+ });
226
+
227
+ const audits: MappedAudit<TestAuditAction, typeof outputSchema>[] = [
228
+ {
229
+ type: 'user.created',
230
+ payload: (response) => ({ userId: response.id, email: response.email }),
231
+ when: (response) => response.isNew === true,
232
+ },
233
+ {
234
+ type: 'user.updated',
235
+ payload: (response) => ({ userId: response.id, changes: ['profile'] }),
236
+ when: (response) => response.isNew === false,
237
+ },
238
+ ];
239
+
240
+ const endpoint = new Endpoint({
241
+ route: '/users/:id',
242
+ method: 'PUT',
243
+ fn: async () => ({
244
+ id: '789',
245
+ email: 'updated@example.com',
246
+ isNew: false,
247
+ }),
248
+ input: undefined,
249
+ output: outputSchema,
250
+ services: [],
251
+ logger: mockLogger,
252
+ timeout: undefined,
253
+ memorySize: undefined,
254
+ status: 200,
255
+ getSession: undefined,
256
+ authorize: undefined,
257
+ description: undefined,
258
+ events: [],
259
+ publisherService: undefined,
260
+ auditorStorageService: auditStorageService,
261
+ audits,
262
+ });
263
+
264
+ const adapter = new AmazonApiGatewayV2Endpoint(envParser, endpoint as any);
265
+ const handler = adapter.handler;
266
+
267
+ const event = createMockV2Event({
268
+ requestContext: {
269
+ ...createMockV2Event().requestContext,
270
+ http: {
271
+ method: 'PUT',
272
+ path: '/users/789',
273
+ protocol: 'HTTP/1.1',
274
+ sourceIp: '192.168.1.1',
275
+ userAgent: 'test-agent',
276
+ },
277
+ },
278
+ pathParameters: { id: '789' },
279
+ body: JSON.stringify({}),
280
+ });
281
+ const context = createMockContext();
282
+ const response = await handler(event, context);
283
+
284
+ expect(response.statusCode).toBe(200);
285
+
286
+ // Only user.updated audit should be written due to when condition
287
+ expect(auditStorage.records).toHaveLength(1);
288
+ expect(auditStorage.records[0].type).toBe('user.updated');
289
+ });
290
+
291
+ it('should extract actor from request context', async () => {
292
+ const auditStorage = new InMemoryAuditStorage();
293
+
294
+ const auditStorageService: Service<'auditStorage', InMemoryAuditStorage> = {
295
+ serviceName: 'auditStorage' as const,
296
+ register: vi.fn().mockResolvedValue(auditStorage),
297
+ };
298
+
299
+ const actorExtractor: ActorExtractor = ({ header }) => ({
300
+ id: header('x-user-id') ?? 'anonymous',
301
+ type: 'user',
302
+ ip: header('x-forwarded-for'),
303
+ });
304
+
305
+ const outputSchema = z.object({ id: z.string(), email: z.string() });
306
+
307
+ const audits: MappedAudit<TestAuditAction, typeof outputSchema>[] = [
308
+ {
309
+ type: 'user.created',
310
+ payload: (response) => ({ userId: response.id, email: response.email }),
311
+ },
312
+ ];
313
+
314
+ const endpoint = new Endpoint({
315
+ route: '/users',
316
+ method: 'POST',
317
+ fn: async () => ({ id: '123', email: 'test@example.com' }),
318
+ input: undefined,
319
+ output: outputSchema,
320
+ services: [],
321
+ logger: mockLogger,
322
+ timeout: undefined,
323
+ memorySize: undefined,
324
+ status: 200,
325
+ getSession: undefined,
326
+ authorize: undefined,
327
+ description: undefined,
328
+ events: [],
329
+ publisherService: undefined,
330
+ auditorStorageService: auditStorageService,
331
+ actorExtractor,
332
+ audits,
333
+ });
334
+
335
+ const adapter = new AmazonApiGatewayV2Endpoint(envParser, endpoint as any);
336
+ const handler = adapter.handler;
337
+
338
+ const event = createMockV2Event({
339
+ requestContext: {
340
+ ...createMockV2Event().requestContext,
341
+ http: {
342
+ method: 'POST',
343
+ path: '/users',
344
+ protocol: 'HTTP/1.1',
345
+ sourceIp: '192.168.1.1',
346
+ userAgent: 'test-agent',
347
+ },
348
+ },
349
+ headers: {
350
+ 'content-type': 'application/json',
351
+ 'x-user-id': 'user-456',
352
+ 'x-forwarded-for': '192.168.1.1',
353
+ },
354
+ body: JSON.stringify({}),
355
+ });
356
+ const context = createMockContext();
357
+ const response = await handler(event, context);
358
+
359
+ expect(response.statusCode).toBe(200);
360
+
361
+ // Verify actor was extracted correctly
362
+ expect(auditStorage.records).toHaveLength(1);
363
+ expect(auditStorage.records[0].actor).toEqual({
364
+ id: 'user-456',
365
+ type: 'user',
366
+ ip: '192.168.1.1',
367
+ });
368
+ });
369
+
370
+ it('should not process audits when no auditor storage is configured', async () => {
371
+ const outputSchema = z.object({ id: z.string(), email: z.string() });
372
+
373
+ const audits: MappedAudit<TestAuditAction, typeof outputSchema>[] = [
374
+ {
375
+ type: 'user.created',
376
+ payload: (response) => ({ userId: response.id, email: response.email }),
377
+ },
378
+ ];
379
+
380
+ const endpoint = new Endpoint({
381
+ route: '/users',
382
+ method: 'POST',
383
+ fn: async () => ({ id: '999', email: 'test@example.com' }),
384
+ input: undefined,
385
+ output: outputSchema,
386
+ services: [],
387
+ logger: mockLogger,
388
+ timeout: undefined,
389
+ memorySize: undefined,
390
+ status: 200,
391
+ getSession: undefined,
392
+ authorize: undefined,
393
+ description: undefined,
394
+ events: [],
395
+ publisherService: undefined,
396
+ auditorStorageService: undefined, // No auditor storage
397
+ audits,
398
+ });
399
+
400
+ const adapter = new AmazonApiGatewayV2Endpoint(envParser, endpoint as any);
401
+ const handler = adapter.handler;
402
+
403
+ const event = createMockV2Event({
404
+ requestContext: {
405
+ ...createMockV2Event().requestContext,
406
+ http: {
407
+ method: 'POST',
408
+ path: '/users',
409
+ protocol: 'HTTP/1.1',
410
+ sourceIp: '192.168.1.1',
411
+ userAgent: 'test-agent',
412
+ },
413
+ },
414
+ body: JSON.stringify({}),
415
+ });
416
+ const context = createMockContext();
417
+ const response = await handler(event, context);
418
+
419
+ expect(response.statusCode).toBe(200);
420
+ expect(response.body).toBe(
421
+ JSON.stringify({ id: '999', email: 'test@example.com' }),
422
+ );
423
+
424
+ // Should log warning
425
+ expect(mockLogger.warn).toHaveBeenCalledWith(
426
+ 'No auditor storage service available',
427
+ );
428
+ });
429
+
430
+ it('should not process audits when endpoint throws an error', async () => {
431
+ const auditStorage = new InMemoryAuditStorage();
432
+
433
+ const auditStorageService: Service<'auditStorage', InMemoryAuditStorage> = {
434
+ serviceName: 'auditStorage' as const,
435
+ register: vi.fn().mockResolvedValue(auditStorage),
436
+ };
437
+
438
+ const outputSchema = z.object({ id: z.string(), email: z.string() });
439
+
440
+ const audits: MappedAudit<TestAuditAction, typeof outputSchema>[] = [
441
+ {
442
+ type: 'user.created',
443
+ payload: (response) => ({ userId: response.id, email: response.email }),
444
+ },
445
+ ];
446
+
447
+ const endpoint = new Endpoint({
448
+ route: '/users',
449
+ method: 'POST',
450
+ fn: async () => {
451
+ throw new Error('Something went wrong');
452
+ },
453
+ input: undefined,
454
+ output: outputSchema,
455
+ services: [],
456
+ logger: mockLogger,
457
+ timeout: undefined,
458
+ memorySize: undefined,
459
+ status: 200,
460
+ getSession: undefined,
461
+ authorize: undefined,
462
+ description: undefined,
463
+ events: [],
464
+ publisherService: undefined,
465
+ auditorStorageService: auditStorageService,
466
+ audits,
467
+ });
468
+
469
+ const adapter = new AmazonApiGatewayV2Endpoint(envParser, endpoint as any);
470
+ const handler = adapter.handler;
471
+
472
+ const event = createMockV2Event({
473
+ requestContext: {
474
+ ...createMockV2Event().requestContext,
475
+ http: {
476
+ method: 'POST',
477
+ path: '/users',
478
+ protocol: 'HTTP/1.1',
479
+ sourceIp: '192.168.1.1',
480
+ userAgent: 'test-agent',
481
+ },
482
+ },
483
+ body: JSON.stringify({}),
484
+ });
485
+ const context = createMockContext();
486
+ const response = await handler(event, context);
487
+
488
+ // Should return 500 due to error
489
+ expect(response.statusCode).toBe(500);
490
+
491
+ // No audits should be written when endpoint throws an error
492
+ expect(auditStorage.records).toHaveLength(0);
493
+ });
494
+
495
+ it('should include entityId in audit record when configured', async () => {
496
+ const auditStorage = new InMemoryAuditStorage();
497
+
498
+ const auditStorageService: Service<'auditStorage', InMemoryAuditStorage> = {
499
+ serviceName: 'auditStorage' as const,
500
+ register: vi.fn().mockResolvedValue(auditStorage),
501
+ };
502
+
503
+ const outputSchema = z.object({ id: z.string(), email: z.string() });
504
+
505
+ const audits: MappedAudit<TestAuditAction, typeof outputSchema>[] = [
506
+ {
507
+ type: 'user.created',
508
+ payload: (response) => ({ userId: response.id, email: response.email }),
509
+ entityId: (response) => response.id,
510
+ table: 'users',
511
+ },
512
+ ];
513
+
514
+ const endpoint = new Endpoint({
515
+ route: '/users',
516
+ method: 'POST',
517
+ fn: async () => ({ id: 'user-123', email: 'test@example.com' }),
518
+ input: undefined,
519
+ output: outputSchema,
520
+ services: [],
521
+ logger: mockLogger,
522
+ timeout: undefined,
523
+ memorySize: undefined,
524
+ status: 201,
525
+ getSession: undefined,
526
+ authorize: undefined,
527
+ description: undefined,
528
+ events: [],
529
+ publisherService: undefined,
530
+ auditorStorageService: auditStorageService,
531
+ audits,
532
+ });
533
+
534
+ const adapter = new AmazonApiGatewayV2Endpoint(envParser, endpoint as any);
535
+ const handler = adapter.handler;
536
+
537
+ const event = createMockV2Event({
538
+ requestContext: {
539
+ ...createMockV2Event().requestContext,
540
+ http: {
541
+ method: 'POST',
542
+ path: '/users',
543
+ protocol: 'HTTP/1.1',
544
+ sourceIp: '192.168.1.1',
545
+ userAgent: 'test-agent',
546
+ },
547
+ },
548
+ body: JSON.stringify({}),
549
+ });
550
+ const context = createMockContext();
551
+ const response = await handler(event, context);
552
+
553
+ expect(response.statusCode).toBe(201);
554
+
555
+ // Verify entityId and table are included
556
+ expect(auditStorage.records).toHaveLength(1);
557
+ expect(auditStorage.records[0].entityId).toBe('user-123');
558
+ expect(auditStorage.records[0].table).toBe('users');
559
+ });
560
+
561
+ it('should include endpoint metadata in audit records', async () => {
562
+ const auditStorage = new InMemoryAuditStorage();
563
+
564
+ const auditStorageService: Service<'auditStorage', InMemoryAuditStorage> = {
565
+ serviceName: 'auditStorage' as const,
566
+ register: vi.fn().mockResolvedValue(auditStorage),
567
+ };
568
+
569
+ const outputSchema = z.object({ id: z.string(), email: z.string() });
570
+
571
+ const audits: MappedAudit<TestAuditAction, typeof outputSchema>[] = [
572
+ {
573
+ type: 'user.created',
574
+ payload: (response) => ({ userId: response.id, email: response.email }),
575
+ },
576
+ ];
577
+
578
+ const endpoint = new Endpoint({
579
+ route: '/users',
580
+ method: 'POST',
581
+ fn: async () => ({ id: '123', email: 'test@example.com' }),
582
+ input: undefined,
583
+ output: outputSchema,
584
+ services: [],
585
+ logger: mockLogger,
586
+ timeout: undefined,
587
+ memorySize: undefined,
588
+ status: 200,
589
+ getSession: undefined,
590
+ authorize: undefined,
591
+ description: undefined,
592
+ events: [],
593
+ publisherService: undefined,
594
+ auditorStorageService: auditStorageService,
595
+ audits,
596
+ });
597
+
598
+ const adapter = new AmazonApiGatewayV2Endpoint(envParser, endpoint as any);
599
+ const handler = adapter.handler;
600
+
601
+ const event = createMockV2Event({
602
+ requestContext: {
603
+ ...createMockV2Event().requestContext,
604
+ http: {
605
+ method: 'POST',
606
+ path: '/users',
607
+ protocol: 'HTTP/1.1',
608
+ sourceIp: '192.168.1.1',
609
+ userAgent: 'test-agent',
610
+ },
611
+ },
612
+ body: JSON.stringify({}),
613
+ });
614
+ const context = createMockContext();
615
+ const response = await handler(event, context);
616
+
617
+ expect(response.statusCode).toBe(200);
618
+
619
+ // Verify metadata includes endpoint info
620
+ expect(auditStorage.records).toHaveLength(1);
621
+ expect(auditStorage.records[0].metadata).toEqual({
622
+ endpoint: '/users',
623
+ method: 'POST',
624
+ });
625
+ });
626
+ });
@@ -76,6 +76,7 @@ describe('AmazonApiGatewayV2Endpoint Events', () => {
76
76
  services: [],
77
77
  logger: mockLogger,
78
78
  timeout: undefined,
79
+ memorySize: undefined,
79
80
  status: 200,
80
81
  getSession: undefined,
81
82
  authorize: undefined,
@@ -151,6 +152,7 @@ describe('AmazonApiGatewayV2Endpoint Events', () => {
151
152
  services: [],
152
153
  logger: mockLogger,
153
154
  timeout: undefined,
155
+ memorySize: undefined,
154
156
  status: 201,
155
157
  getSession: undefined,
156
158
  authorize: undefined,
@@ -240,6 +242,7 @@ describe('AmazonApiGatewayV2Endpoint Events', () => {
240
242
  services: [],
241
243
  logger: mockLogger,
242
244
  timeout: undefined,
245
+ memorySize: undefined,
243
246
  status: 200,
244
247
  getSession: undefined,
245
248
  authorize: undefined,
@@ -308,6 +311,7 @@ describe('AmazonApiGatewayV2Endpoint Events', () => {
308
311
  services: [],
309
312
  logger: mockLogger,
310
313
  timeout: undefined,
314
+ memorySize: undefined,
311
315
  status: 200,
312
316
  getSession: undefined,
313
317
  authorize: undefined,
@@ -367,6 +371,7 @@ describe('AmazonApiGatewayV2Endpoint Events', () => {
367
371
  services: [],
368
372
  logger: mockLogger,
369
373
  timeout: undefined,
374
+ memorySize: undefined,
370
375
  status: 200,
371
376
  getSession: undefined,
372
377
  authorize: undefined,
@@ -436,6 +441,7 @@ describe('AmazonApiGatewayV2Endpoint Events', () => {
436
441
  services: [],
437
442
  logger: mockLogger,
438
443
  timeout: undefined,
444
+ memorySize: undefined,
439
445
  status: 200,
440
446
  getSession: undefined,
441
447
  authorize: undefined,
@@ -516,6 +522,7 @@ describe('AmazonApiGatewayV2Endpoint Events', () => {
516
522
  services: [],
517
523
  logger: mockLogger,
518
524
  timeout: undefined,
525
+ memorySize: undefined,
519
526
  status: 201,
520
527
  getSession: undefined,
521
528
  authorize: undefined,
@@ -593,6 +600,7 @@ describe('AmazonApiGatewayV2Endpoint Events', () => {
593
600
  services: [],
594
601
  logger: mockLogger,
595
602
  timeout: undefined,
603
+ memorySize: undefined,
596
604
  status: 200,
597
605
  getSession: undefined,
598
606
  authorize: undefined,
@@ -670,6 +678,7 @@ describe('AmazonApiGatewayV2Endpoint Events', () => {
670
678
  services: [],
671
679
  logger: mockLogger,
672
680
  timeout: undefined,
681
+ memorySize: undefined,
673
682
  status: 200,
674
683
  getSession: undefined,
675
684
  authorize: undefined,