@geekmidas/constructs 0.0.10 → 0.0.12

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 (324) hide show
  1. package/dist/{AWSLambdaFunction-DhUb-Vs6.cjs → AWSLambdaFunction-DMxScuaw.cjs} +3 -3
  2. package/dist/{AWSLambdaFunction-DhUb-Vs6.cjs.map → AWSLambdaFunction-DMxScuaw.cjs.map} +1 -1
  3. package/dist/{AWSLambdaFunction-D5V3YVqv.d.cts → AWSLambdaFunction-DSB2oaFG.d.mts} +5 -5
  4. package/dist/{AWSLambdaFunction-D_V-ZQmS.mjs → AWSLambdaFunction-cL8A169J.mjs} +3 -3
  5. package/dist/{AWSLambdaFunction-D_V-ZQmS.mjs.map → AWSLambdaFunction-cL8A169J.mjs.map} +1 -1
  6. package/dist/{AWSLambdaFunction-DvZcnL8a.d.mts → AWSLambdaFunction-t6q2o8EL.d.cts} +5 -5
  7. package/dist/{AWSLambdaSubscriberAdaptor-J_pSz6pu.d.cts → AWSLambdaSubscriberAdaptor-Cknp_nn1.d.cts} +2 -2
  8. package/dist/{AWSLambdaSubscriberAdaptor-G8y3YkWj.mjs → AWSLambdaSubscriberAdaptor-CyFh7MN8.mjs} +1 -1
  9. package/dist/{AWSLambdaSubscriberAdaptor-G8y3YkWj.mjs.map → AWSLambdaSubscriberAdaptor-CyFh7MN8.mjs.map} +1 -1
  10. package/dist/{AWSLambdaSubscriberAdaptor-D6kjKjSf.d.mts → AWSLambdaSubscriberAdaptor-DpHzp-AM.d.mts} +2 -2
  11. package/dist/{AWSLambdaSubscriberAdaptor-CmPZ10JF.cjs → AWSLambdaSubscriberAdaptor-Dum5bkw3.cjs} +1 -1
  12. package/dist/{AWSLambdaSubscriberAdaptor-CmPZ10JF.cjs.map → AWSLambdaSubscriberAdaptor-Dum5bkw3.cjs.map} +1 -1
  13. package/dist/{AmazonApiGatewayEndpointAdaptor-DHcUetbw.mjs → AmazonApiGatewayEndpointAdaptor-CIEhW1TQ.mjs} +47 -16
  14. package/dist/AmazonApiGatewayEndpointAdaptor-CIEhW1TQ.mjs.map +1 -0
  15. package/dist/{AmazonApiGatewayEndpointAdaptor-BnNd8tCz.d.cts → AmazonApiGatewayEndpointAdaptor-CwItKPz2.d.cts} +6 -5
  16. package/dist/{AmazonApiGatewayEndpointAdaptor-DHBF_5jn.cjs → AmazonApiGatewayEndpointAdaptor-H8YvtfQm.cjs} +47 -16
  17. package/dist/AmazonApiGatewayEndpointAdaptor-H8YvtfQm.cjs.map +1 -0
  18. package/dist/{AmazonApiGatewayEndpointAdaptor-B7MKo8h3.d.mts → AmazonApiGatewayEndpointAdaptor-eDQgPNLH.d.mts} +7 -6
  19. package/dist/{AmazonApiGatewayV1EndpointAdaptor-CmUxFoPx.cjs → AmazonApiGatewayV1EndpointAdaptor-0n71d3gq.cjs} +3 -3
  20. package/dist/{AmazonApiGatewayV1EndpointAdaptor-CmUxFoPx.cjs.map → AmazonApiGatewayV1EndpointAdaptor-0n71d3gq.cjs.map} +1 -1
  21. package/dist/{AmazonApiGatewayV1EndpointAdaptor-CsV6zyvn.mjs → AmazonApiGatewayV1EndpointAdaptor-B36zXLJ7.mjs} +3 -3
  22. package/dist/{AmazonApiGatewayV1EndpointAdaptor-CsV6zyvn.mjs.map → AmazonApiGatewayV1EndpointAdaptor-B36zXLJ7.mjs.map} +1 -1
  23. package/dist/{AmazonApiGatewayV1EndpointAdaptor-gO9OxdZl.d.mts → AmazonApiGatewayV1EndpointAdaptor-CnGVpA38.d.mts} +4 -4
  24. package/dist/{AmazonApiGatewayV1EndpointAdaptor-BC-a2tt3.d.cts → AmazonApiGatewayV1EndpointAdaptor-DaCvUL6y.d.cts} +3 -3
  25. package/dist/{AmazonApiGatewayV2EndpointAdaptor-D1uz4wNg.d.mts → AmazonApiGatewayV2EndpointAdaptor-BELz2ijs.d.mts} +4 -4
  26. package/dist/{AmazonApiGatewayV2EndpointAdaptor-_bFcbEa-.mjs → AmazonApiGatewayV2EndpointAdaptor-CE3wZEb8.mjs} +3 -3
  27. package/dist/{AmazonApiGatewayV2EndpointAdaptor-_bFcbEa-.mjs.map → AmazonApiGatewayV2EndpointAdaptor-CE3wZEb8.mjs.map} +1 -1
  28. package/dist/{AmazonApiGatewayV2EndpointAdaptor-zNFUPxSY.d.cts → AmazonApiGatewayV2EndpointAdaptor-DA1PH0nc.d.cts} +3 -3
  29. package/dist/{AmazonApiGatewayV2EndpointAdaptor-cZbaqiUi.cjs → AmazonApiGatewayV2EndpointAdaptor-DtU3Cb8F.cjs} +3 -3
  30. package/dist/{AmazonApiGatewayV2EndpointAdaptor-cZbaqiUi.cjs.map → AmazonApiGatewayV2EndpointAdaptor-DtU3Cb8F.cjs.map} +1 -1
  31. package/dist/{Authorizer-Bbk9ziuG.d.mts → Authorizer-BRCVPz_O.d.mts} +1 -1
  32. package/dist/{Authorizer-iXsSB600.d.cts → Authorizer-DG54w1m2.d.cts} +1 -1
  33. package/dist/{BaseFunctionBuilder-BmsbV0BU.cjs → BaseFunctionBuilder-B8rT07QR.cjs} +7 -2
  34. package/dist/BaseFunctionBuilder-B8rT07QR.cjs.map +1 -0
  35. package/dist/{BaseFunctionBuilder-DCUtCdVL.mjs → BaseFunctionBuilder-CT7p10K1.mjs} +7 -2
  36. package/dist/BaseFunctionBuilder-CT7p10K1.mjs.map +1 -0
  37. package/dist/{BaseFunctionBuilder-C4ZJPkIZ.d.cts → BaseFunctionBuilder-Cf0op65o.d.cts} +7 -4
  38. package/dist/{BaseFunctionBuilder-CxBX0arJ.d.mts → BaseFunctionBuilder-DilipY1y.d.mts} +7 -4
  39. package/dist/{Construct-VEI7M3fs.cjs → Construct-BYSPikVm.cjs} +28 -10
  40. package/dist/Construct-BYSPikVm.cjs.map +1 -0
  41. package/dist/{Construct-C3hsQBy4.mjs → Construct-LWeB1rSQ.mjs} +28 -10
  42. package/dist/Construct-LWeB1rSQ.mjs.map +1 -0
  43. package/dist/{Construct-ci5u8Xnu.d.cts → Construct-ZPqE0vhn.d.mts} +9 -4
  44. package/dist/{Construct-zhmcmIdY.d.mts → Construct-dI_rgdSp.d.cts} +9 -4
  45. package/dist/Construct.cjs +1 -1
  46. package/dist/Construct.d.cts +1 -1
  47. package/dist/Construct.d.mts +1 -1
  48. package/dist/Construct.mjs +1 -1
  49. package/dist/{Cron-ByNYsQDH.d.mts → Cron-6lOgKqSA.d.cts} +3 -3
  50. package/dist/{Cron-DkPL-Fms.d.cts → Cron-BH_07atD.d.mts} +3 -3
  51. package/dist/{Cron-Dfgr8F9d.cjs → Cron-Bnd-2pgE.cjs} +3 -3
  52. package/dist/{Cron-Dfgr8F9d.cjs.map → Cron-Bnd-2pgE.cjs.map} +1 -1
  53. package/dist/{Cron-wP6Ob48_.mjs → Cron-DNRjf2cp.mjs} +3 -3
  54. package/dist/{Cron-wP6Ob48_.mjs.map → Cron-DNRjf2cp.mjs.map} +1 -1
  55. package/dist/{CronBuilder-BknVTWLE.d.mts → CronBuilder-5oK2AL2n.d.cts} +5 -5
  56. package/dist/{CronBuilder-BqTTozUi.d.cts → CronBuilder-D2b4zY4l.d.mts} +5 -5
  57. package/dist/{CronBuilder-C27c5oqh.mjs → CronBuilder-DdR2TuQa.mjs} +5 -5
  58. package/dist/{CronBuilder-C27c5oqh.mjs.map → CronBuilder-DdR2TuQa.mjs.map} +1 -1
  59. package/dist/{CronBuilder-W1ZqCJ7m.cjs → CronBuilder-dtw4ZyH6.cjs} +5 -5
  60. package/dist/{CronBuilder-W1ZqCJ7m.cjs.map → CronBuilder-dtw4ZyH6.cjs.map} +1 -1
  61. package/dist/{Endpoint-C98BwZjA.mjs → Endpoint-B69TqESg.mjs} +15 -8
  62. package/dist/Endpoint-B69TqESg.mjs.map +1 -0
  63. package/dist/{Endpoint-BjpQmTek.cjs → Endpoint-B9PryZES.cjs} +15 -8
  64. package/dist/Endpoint-B9PryZES.cjs.map +1 -0
  65. package/dist/{Endpoint-zHPjZ35J.d.cts → Endpoint-Cs-MsYlY.d.cts} +80 -12
  66. package/dist/{Endpoint-C16whGI-.d.mts → Endpoint-DuZlyjd4.d.mts} +80 -12
  67. package/dist/EndpointBuilder-BrB-K1jO.d.mts +86 -0
  68. package/dist/EndpointBuilder-C-PHInEW.d.cts +86 -0
  69. package/dist/{EndpointBuilder-CCUx4vep.mjs → EndpointBuilder-DnVL-EU_.mjs} +47 -5
  70. package/dist/EndpointBuilder-DnVL-EU_.mjs.map +1 -0
  71. package/dist/{EndpointBuilder-D2Zu8i9b.cjs → EndpointBuilder-DofwCnWJ.cjs} +47 -5
  72. package/dist/EndpointBuilder-DofwCnWJ.cjs.map +1 -0
  73. package/dist/{EndpointFactory-KkyIOE62.d.cts → EndpointFactory-6zNpVSYp.d.mts} +12 -11
  74. package/dist/{EndpointFactory-C4YhgXOc.cjs → EndpointFactory-Ba9mx9MU.cjs} +3 -3
  75. package/dist/{EndpointFactory-C4YhgXOc.cjs.map → EndpointFactory-Ba9mx9MU.cjs.map} +1 -1
  76. package/dist/{EndpointFactory-VnSAdwdv.d.mts → EndpointFactory-e5WYVR6t.d.cts} +12 -11
  77. package/dist/{EndpointFactory-RAb2zcw0.mjs → EndpointFactory-pPaIGFHV.mjs} +3 -3
  78. package/dist/{EndpointFactory-RAb2zcw0.mjs.map → EndpointFactory-pPaIGFHV.mjs.map} +1 -1
  79. package/dist/{Function-BbLYIKLL.d.cts → Function-6EWabl_X.d.cts} +5 -4
  80. package/dist/{Function-1Fh6Tdkg.cjs → Function-CO-s2pB8.cjs} +6 -6
  81. package/dist/Function-CO-s2pB8.cjs.map +1 -0
  82. package/dist/{Function-D-QEfH7k.mjs → Function-COnc-tWM.mjs} +6 -6
  83. package/dist/Function-COnc-tWM.mjs.map +1 -0
  84. package/dist/{Function-DFRZZCC-.d.mts → Function-G3JPHMaY.d.mts} +5 -4
  85. package/dist/{FunctionBuilder-DdGjpiFT.d.cts → FunctionBuilder-B3fpp3hA.d.cts} +13 -11
  86. package/dist/{FunctionBuilder-DuktGyZc.d.mts → FunctionBuilder-ByaB_LQ4.d.mts} +13 -11
  87. package/dist/{FunctionBuilder-Bxyr1Pf9.mjs → FunctionBuilder-CMhLQ4dt.mjs} +11 -6
  88. package/dist/FunctionBuilder-CMhLQ4dt.mjs.map +1 -0
  89. package/dist/{FunctionBuilder-DcEFYgbn.cjs → FunctionBuilder-_hMwZUof.cjs} +11 -6
  90. package/dist/FunctionBuilder-_hMwZUof.cjs.map +1 -0
  91. package/dist/{FunctionExecutionWrapper-CRYi047B.d.cts → FunctionExecutionWrapper-Ci-ookJG.d.cts} +2 -2
  92. package/dist/{FunctionExecutionWrapper-DaR-dSLw.d.mts → FunctionExecutionWrapper-DHFMLrOl.d.mts} +2 -2
  93. package/dist/{FunctionExecutionWrapper-BL6PE6Dv.mjs → FunctionExecutionWrapper-i9v5L3Av.mjs} +2 -2
  94. package/dist/{FunctionExecutionWrapper-BL6PE6Dv.mjs.map → FunctionExecutionWrapper-i9v5L3Av.mjs.map} +1 -1
  95. package/dist/{FunctionExecutionWrapper-Ee-CE8Fz.cjs → FunctionExecutionWrapper-sxJNTpuc.cjs} +2 -2
  96. package/dist/{FunctionExecutionWrapper-Ee-CE8Fz.cjs.map → FunctionExecutionWrapper-sxJNTpuc.cjs.map} +1 -1
  97. package/dist/{HonoEndpointAdaptor-CY1mXTe6.d.mts → HonoEndpointAdaptor-BElil8O5.d.mts} +9 -8
  98. package/dist/{HonoEndpointAdaptor-DcvZdYzx.cjs → HonoEndpointAdaptor-Cw2if5cG.cjs} +51 -20
  99. package/dist/HonoEndpointAdaptor-Cw2if5cG.cjs.map +1 -0
  100. package/dist/{HonoEndpointAdaptor-CyVPl4w2.mjs → HonoEndpointAdaptor-DAfnTFVS.mjs} +51 -20
  101. package/dist/HonoEndpointAdaptor-DAfnTFVS.mjs.map +1 -0
  102. package/dist/{HonoEndpointAdaptor-CYvrXBe-.d.cts → HonoEndpointAdaptor-DSHl8ZCY.d.cts} +8 -7
  103. package/dist/{Subscriber-Cy28j8MS.d.cts → Subscriber-BhzqUzs-.d.cts} +2 -2
  104. package/dist/{Subscriber-CTczVFsF.mjs → Subscriber-CGb8LjZa.mjs} +2 -2
  105. package/dist/{Subscriber-CTczVFsF.mjs.map → Subscriber-CGb8LjZa.mjs.map} +1 -1
  106. package/dist/{Subscriber-BL30GpWp.cjs → Subscriber-D-FPWts6.cjs} +2 -2
  107. package/dist/{Subscriber-BL30GpWp.cjs.map → Subscriber-D-FPWts6.cjs.map} +1 -1
  108. package/dist/{Subscriber-g3IWM1_d.d.mts → Subscriber-s6yfjeOc.d.mts} +2 -2
  109. package/dist/{SubscriberBuilder-BzK8kc2a.d.cts → SubscriberBuilder-BCVkp-ga.d.cts} +2 -2
  110. package/dist/{SubscriberBuilder-CekL3BoP.mjs → SubscriberBuilder-BcAspHv9.mjs} +2 -2
  111. package/dist/{SubscriberBuilder-CekL3BoP.mjs.map → SubscriberBuilder-BcAspHv9.mjs.map} +1 -1
  112. package/dist/{SubscriberBuilder-D1hojYLa.cjs → SubscriberBuilder-BfE2cL1q.cjs} +2 -2
  113. package/dist/{SubscriberBuilder-D1hojYLa.cjs.map → SubscriberBuilder-BfE2cL1q.cjs.map} +1 -1
  114. package/dist/{SubscriberBuilder-YjQ7qIpQ.d.mts → SubscriberBuilder-aCua5_wA.d.mts} +2 -2
  115. package/dist/{TestEndpointAdaptor-C-ahwGW6.cjs → TestEndpointAdaptor-Bn1WRFph.cjs} +47 -18
  116. package/dist/TestEndpointAdaptor-Bn1WRFph.cjs.map +1 -0
  117. package/dist/{TestEndpointAdaptor-DGWuai69.d.mts → TestEndpointAdaptor-DnlAA_rm.d.mts} +7 -6
  118. package/dist/{TestEndpointAdaptor-B4z9G5Ap.mjs → TestEndpointAdaptor-DubQOJk_.mjs} +47 -18
  119. package/dist/TestEndpointAdaptor-DubQOJk_.mjs.map +1 -0
  120. package/dist/{TestEndpointAdaptor-uXliWYjS.d.cts → TestEndpointAdaptor-o-xtSyQ3.d.cts} +6 -5
  121. package/dist/adaptors/aws.cjs +14 -13
  122. package/dist/adaptors/aws.d.cts +14 -14
  123. package/dist/adaptors/aws.d.mts +15 -15
  124. package/dist/adaptors/aws.mjs +14 -13
  125. package/dist/adaptors/hono.cjs +10 -9
  126. package/dist/adaptors/hono.d.cts +8 -8
  127. package/dist/adaptors/hono.d.mts +9 -9
  128. package/dist/adaptors/hono.mjs +10 -9
  129. package/dist/adaptors/testing.cjs +8 -7
  130. package/dist/adaptors/testing.d.cts +8 -8
  131. package/dist/adaptors/testing.d.mts +9 -9
  132. package/dist/adaptors/testing.mjs +8 -7
  133. package/dist/crons/Cron.cjs +6 -6
  134. package/dist/crons/Cron.d.cts +6 -6
  135. package/dist/crons/Cron.d.mts +6 -6
  136. package/dist/crons/Cron.mjs +6 -6
  137. package/dist/crons/CronBuilder.cjs +7 -7
  138. package/dist/crons/CronBuilder.d.cts +7 -7
  139. package/dist/crons/CronBuilder.d.mts +7 -7
  140. package/dist/crons/CronBuilder.mjs +7 -7
  141. package/dist/crons/index.cjs +7 -7
  142. package/dist/crons/index.d.cts +11 -11
  143. package/dist/crons/index.d.mts +11 -11
  144. package/dist/crons/index.mjs +7 -7
  145. package/dist/endpoints/AmazonApiGatewayEndpointAdaptor.cjs +8 -7
  146. package/dist/endpoints/AmazonApiGatewayEndpointAdaptor.d.cts +8 -8
  147. package/dist/endpoints/AmazonApiGatewayEndpointAdaptor.d.mts +9 -9
  148. package/dist/endpoints/AmazonApiGatewayEndpointAdaptor.mjs +8 -7
  149. package/dist/endpoints/AmazonApiGatewayV1EndpointAdaptor.cjs +10 -9
  150. package/dist/endpoints/AmazonApiGatewayV1EndpointAdaptor.d.cts +9 -9
  151. package/dist/endpoints/AmazonApiGatewayV1EndpointAdaptor.d.mts +10 -10
  152. package/dist/endpoints/AmazonApiGatewayV1EndpointAdaptor.mjs +10 -9
  153. package/dist/endpoints/AmazonApiGatewayV2EndpointAdaptor.cjs +10 -9
  154. package/dist/endpoints/AmazonApiGatewayV2EndpointAdaptor.d.cts +9 -9
  155. package/dist/endpoints/AmazonApiGatewayV2EndpointAdaptor.d.mts +10 -10
  156. package/dist/endpoints/AmazonApiGatewayV2EndpointAdaptor.mjs +10 -9
  157. package/dist/endpoints/Authorizer.d.cts +1 -1
  158. package/dist/endpoints/Authorizer.d.mts +1 -1
  159. package/dist/endpoints/Endpoint.cjs +6 -6
  160. package/dist/endpoints/Endpoint.d.cts +7 -7
  161. package/dist/endpoints/Endpoint.d.mts +8 -8
  162. package/dist/endpoints/Endpoint.mjs +6 -6
  163. package/dist/endpoints/EndpointBuilder.cjs +7 -7
  164. package/dist/endpoints/EndpointBuilder.d.cts +8 -8
  165. package/dist/endpoints/EndpointBuilder.d.mts +9 -9
  166. package/dist/endpoints/EndpointBuilder.mjs +7 -7
  167. package/dist/endpoints/EndpointFactory.cjs +8 -8
  168. package/dist/endpoints/EndpointFactory.d.cts +9 -9
  169. package/dist/endpoints/EndpointFactory.d.mts +10 -10
  170. package/dist/endpoints/EndpointFactory.mjs +8 -8
  171. package/dist/endpoints/HonoEndpointAdaptor.cjs +10 -9
  172. package/dist/endpoints/HonoEndpointAdaptor.d.cts +8 -8
  173. package/dist/endpoints/HonoEndpointAdaptor.d.mts +9 -9
  174. package/dist/endpoints/HonoEndpointAdaptor.mjs +10 -9
  175. package/dist/endpoints/TestEndpointAdaptor.cjs +8 -7
  176. package/dist/endpoints/TestEndpointAdaptor.d.cts +8 -8
  177. package/dist/endpoints/TestEndpointAdaptor.d.mts +9 -9
  178. package/dist/endpoints/TestEndpointAdaptor.mjs +8 -7
  179. package/dist/endpoints/audit.cjs +0 -0
  180. package/dist/endpoints/audit.d.cts +9 -0
  181. package/dist/endpoints/audit.d.mts +9 -0
  182. package/dist/endpoints/audit.mjs +0 -0
  183. package/dist/endpoints/helpers.cjs +7 -7
  184. package/dist/endpoints/helpers.d.cts +7 -7
  185. package/dist/endpoints/helpers.d.mts +8 -8
  186. package/dist/endpoints/helpers.mjs +7 -7
  187. package/dist/endpoints/index.cjs +8 -8
  188. package/dist/endpoints/index.cjs.map +1 -1
  189. package/dist/endpoints/index.d.cts +12 -12
  190. package/dist/endpoints/index.d.mts +13 -13
  191. package/dist/endpoints/index.mjs +8 -8
  192. package/dist/endpoints/index.mjs.map +1 -1
  193. package/dist/endpoints/parseHonoQuery.cjs +1 -1
  194. package/dist/endpoints/parseHonoQuery.mjs +1 -1
  195. package/dist/endpoints/parseQueryParams.cjs +1 -1
  196. package/dist/endpoints/parseQueryParams.mjs +1 -1
  197. package/dist/endpoints/processAudits.cjs +5 -0
  198. package/dist/endpoints/processAudits.d.cts +74 -0
  199. package/dist/endpoints/processAudits.d.mts +74 -0
  200. package/dist/endpoints/processAudits.mjs +3 -0
  201. package/dist/functions/AWSLambdaFunction.cjs +6 -6
  202. package/dist/functions/AWSLambdaFunction.d.cts +4 -4
  203. package/dist/functions/AWSLambdaFunction.d.mts +4 -4
  204. package/dist/functions/AWSLambdaFunction.mjs +6 -6
  205. package/dist/functions/BaseFunctionBuilder.cjs +2 -2
  206. package/dist/functions/BaseFunctionBuilder.d.cts +2 -2
  207. package/dist/functions/BaseFunctionBuilder.d.mts +2 -2
  208. package/dist/functions/BaseFunctionBuilder.mjs +2 -2
  209. package/dist/functions/Function.cjs +2 -2
  210. package/dist/functions/Function.d.cts +2 -2
  211. package/dist/functions/Function.d.mts +2 -2
  212. package/dist/functions/Function.mjs +2 -2
  213. package/dist/functions/FunctionBuilder.cjs +4 -4
  214. package/dist/functions/FunctionBuilder.d.cts +4 -4
  215. package/dist/functions/FunctionBuilder.d.mts +4 -4
  216. package/dist/functions/FunctionBuilder.mjs +4 -4
  217. package/dist/functions/FunctionExecutionWrapper.cjs +5 -5
  218. package/dist/functions/FunctionExecutionWrapper.d.cts +3 -3
  219. package/dist/functions/FunctionExecutionWrapper.d.mts +3 -3
  220. package/dist/functions/FunctionExecutionWrapper.mjs +5 -5
  221. package/dist/functions/TestFunctionAdaptor.cjs +4 -4
  222. package/dist/functions/TestFunctionAdaptor.d.cts +2 -2
  223. package/dist/functions/TestFunctionAdaptor.d.mts +2 -2
  224. package/dist/functions/TestFunctionAdaptor.mjs +4 -4
  225. package/dist/functions/index.cjs +5 -5
  226. package/dist/functions/index.d.cts +5 -5
  227. package/dist/functions/index.d.mts +5 -5
  228. package/dist/functions/index.mjs +5 -5
  229. package/dist/functions-BYqZAob8.mjs +8 -0
  230. package/dist/{functions-DD-00sWF.mjs.map → functions-BYqZAob8.mjs.map} +1 -1
  231. package/dist/{functions-BtgBiuC_.cjs → functions-D03lqK-r.cjs} +2 -2
  232. package/dist/{functions-BtgBiuC_.cjs.map → functions-D03lqK-r.cjs.map} +1 -1
  233. package/dist/{helpers-QM_FSjPY.cjs → helpers-BApRyhly.cjs} +2 -2
  234. package/dist/{helpers-QM_FSjPY.cjs.map → helpers-BApRyhly.cjs.map} +1 -1
  235. package/dist/{helpers-DtPeOhUV.mjs → helpers-BPDogwac.mjs} +2 -2
  236. package/dist/{helpers-DtPeOhUV.mjs.map → helpers-BPDogwac.mjs.map} +1 -1
  237. package/dist/index-CUg_hSq-.d.cts +9 -0
  238. package/dist/index-D-a7e2gv.d.mts +9 -0
  239. package/dist/index.cjs +1 -1
  240. package/dist/index.d.cts +1 -1
  241. package/dist/index.d.mts +2 -2
  242. package/dist/index.mjs +1 -1
  243. package/dist/{parseHonoQuery-DopC24vB.cjs → parseHonoQuery-CT8Cvin-.cjs} +1 -1
  244. package/dist/{parseHonoQuery-DopC24vB.cjs.map → parseHonoQuery-CT8Cvin-.cjs.map} +1 -1
  245. package/dist/{parseHonoQuery-znDKBhdE.mjs → parseHonoQuery-CwFKw2ua.mjs} +1 -1
  246. package/dist/{parseHonoQuery-znDKBhdE.mjs.map → parseHonoQuery-CwFKw2ua.mjs.map} +1 -1
  247. package/dist/{parseQueryParams-BJaRh3OB.mjs → parseQueryParams-CHINupbZ.mjs} +1 -1
  248. package/dist/{parseQueryParams-BJaRh3OB.mjs.map → parseQueryParams-CHINupbZ.mjs.map} +1 -1
  249. package/dist/{parseQueryParams-BzPop4I1.cjs → parseQueryParams-CwvXXwkW.cjs} +1 -1
  250. package/dist/{parseQueryParams-BzPop4I1.cjs.map → parseQueryParams-CwvXXwkW.cjs.map} +1 -1
  251. package/dist/processAudits-BFokHhCO.cjs +174 -0
  252. package/dist/processAudits-BFokHhCO.cjs.map +1 -0
  253. package/dist/processAudits-DfcB-X-4.mjs +156 -0
  254. package/dist/processAudits-DfcB-X-4.mjs.map +1 -0
  255. package/dist/publisher.d.cts +1 -1
  256. package/dist/publisher.d.mts +1 -1
  257. package/dist/subscribers/AWSLambdaSubscriberAdaptor.cjs +1 -1
  258. package/dist/subscribers/AWSLambdaSubscriberAdaptor.d.cts +3 -3
  259. package/dist/subscribers/AWSLambdaSubscriberAdaptor.d.mts +3 -3
  260. package/dist/subscribers/AWSLambdaSubscriberAdaptor.mjs +1 -1
  261. package/dist/subscribers/Subscriber.cjs +2 -2
  262. package/dist/subscribers/Subscriber.d.cts +2 -2
  263. package/dist/subscribers/Subscriber.d.mts +2 -2
  264. package/dist/subscribers/Subscriber.mjs +2 -2
  265. package/dist/subscribers/SubscriberBuilder.cjs +3 -3
  266. package/dist/subscribers/SubscriberBuilder.d.cts +3 -3
  267. package/dist/subscribers/SubscriberBuilder.d.mts +3 -3
  268. package/dist/subscribers/SubscriberBuilder.mjs +3 -3
  269. package/dist/subscribers/index.cjs +3 -3
  270. package/dist/subscribers/index.d.cts +5 -5
  271. package/dist/subscribers/index.d.mts +5 -5
  272. package/dist/subscribers/index.mjs +3 -3
  273. package/dist/{types-CVq20-fE.d.mts → types-DKf0juBf.d.mts} +1 -1
  274. package/dist/types.d.mts +1 -1
  275. package/package.json +14 -10
  276. package/src/Construct.ts +31 -5
  277. package/src/endpoints/AmazonApiGatewayEndpointAdaptor.ts +88 -19
  278. package/src/endpoints/Endpoint.ts +66 -13
  279. package/src/endpoints/EndpointBuilder.ts +183 -19
  280. package/src/endpoints/HonoEndpointAdaptor.ts +114 -33
  281. package/src/endpoints/TestEndpointAdaptor.ts +96 -21
  282. package/src/endpoints/__tests__/AmazonApiGatewayV1EndpointAdaptor.events.spec.ts +8 -0
  283. package/src/endpoints/__tests__/AmazonApiGatewayV1EndpointAdaptor.spec.ts +29 -0
  284. package/src/endpoints/__tests__/AmazonApiGatewayV2EndpointAdaptor.audits.spec.ts +626 -0
  285. package/src/endpoints/__tests__/AmazonApiGatewayV2EndpointAdaptor.events.spec.ts +9 -0
  286. package/src/endpoints/__tests__/AmazonApiGatewayV2EndpointAdaptor.kysely-audit.integration.spec.ts +718 -0
  287. package/src/endpoints/__tests__/Endpoint.spec.ts +19 -0
  288. package/src/endpoints/__tests__/EndpointBuilder.audit.spec.ts +424 -0
  289. package/src/endpoints/__tests__/HonoEndpointAdaptor.audit-transactions.spec.ts +685 -0
  290. package/src/endpoints/__tests__/HonoEndpointAdaptor.audits.spec.ts +632 -0
  291. package/src/endpoints/__tests__/HonoEndpointAdaptor.events.spec.ts +8 -0
  292. package/src/endpoints/__tests__/HonoEndpointAdaptor.kysely-audit.integration.spec.ts +678 -0
  293. package/src/endpoints/__tests__/HonoEndpointAdaptor.openapi.spec.ts +4 -0
  294. package/src/endpoints/__tests__/HonoEndpointAdaptor.spec.ts +25 -0
  295. package/src/endpoints/audit.ts +87 -0
  296. package/src/endpoints/index.ts +1 -0
  297. package/src/endpoints/processAudits.ts +339 -0
  298. package/src/functions/BaseFunctionBuilder.ts +50 -7
  299. package/src/functions/Function.ts +13 -9
  300. package/src/functions/FunctionBuilder.ts +78 -14
  301. package/src/functions/__tests__/FunctionBuilder.state-isolation.spec.ts +43 -2
  302. package/dist/AmazonApiGatewayEndpointAdaptor-DHBF_5jn.cjs.map +0 -1
  303. package/dist/AmazonApiGatewayEndpointAdaptor-DHcUetbw.mjs.map +0 -1
  304. package/dist/BaseFunctionBuilder-BmsbV0BU.cjs.map +0 -1
  305. package/dist/BaseFunctionBuilder-DCUtCdVL.mjs.map +0 -1
  306. package/dist/Construct-C3hsQBy4.mjs.map +0 -1
  307. package/dist/Construct-VEI7M3fs.cjs.map +0 -1
  308. package/dist/Endpoint-BjpQmTek.cjs.map +0 -1
  309. package/dist/Endpoint-C98BwZjA.mjs.map +0 -1
  310. package/dist/EndpointBuilder-B5l7zQU1.d.cts +0 -55
  311. package/dist/EndpointBuilder-BzqR0xvt.d.mts +0 -55
  312. package/dist/EndpointBuilder-CCUx4vep.mjs.map +0 -1
  313. package/dist/EndpointBuilder-D2Zu8i9b.cjs.map +0 -1
  314. package/dist/Function-1Fh6Tdkg.cjs.map +0 -1
  315. package/dist/Function-D-QEfH7k.mjs.map +0 -1
  316. package/dist/FunctionBuilder-Bxyr1Pf9.mjs.map +0 -1
  317. package/dist/FunctionBuilder-DcEFYgbn.cjs.map +0 -1
  318. package/dist/HonoEndpointAdaptor-CyVPl4w2.mjs.map +0 -1
  319. package/dist/HonoEndpointAdaptor-DcvZdYzx.cjs.map +0 -1
  320. package/dist/TestEndpointAdaptor-B4z9G5Ap.mjs.map +0 -1
  321. package/dist/TestEndpointAdaptor-C-ahwGW6.cjs.map +0 -1
  322. package/dist/functions-DD-00sWF.mjs +0 -8
  323. package/dist/index-CcmV3PKF.d.cts +0 -9
  324. package/dist/index-DQt3pQtF.d.mts +0 -9
@@ -0,0 +1,632 @@
1
+ import type {
2
+ AuditableAction,
3
+ AuditRecord,
4
+ AuditStorage,
5
+ } from '@geekmidas/audit';
6
+ import { EnvironmentParser } from '@geekmidas/envkit';
7
+ import type { Logger } from '@geekmidas/logger';
8
+ import type { Service } from '@geekmidas/services';
9
+ import { ServiceDiscovery } from '@geekmidas/services';
10
+ import { Hono } from 'hono';
11
+ import { describe, expect, it, vi } from 'vitest';
12
+ import { z } from 'zod';
13
+ import { Endpoint } from '../Endpoint';
14
+ import { HonoEndpoint } from '../HonoEndpointAdaptor';
15
+ import type { ActorExtractor, MappedAudit } from '../audit';
16
+
17
+ // In-memory audit storage for testing
18
+ class InMemoryAuditStorage implements AuditStorage {
19
+ records: AuditRecord[] = [];
20
+
21
+ async write(records: AuditRecord[]): Promise<void> {
22
+ this.records.push(...records);
23
+ }
24
+
25
+ async query(): Promise<AuditRecord[]> {
26
+ return this.records;
27
+ }
28
+
29
+ clear(): void {
30
+ this.records = [];
31
+ }
32
+ }
33
+
34
+ // Test audit action types
35
+ type TestAuditAction =
36
+ | AuditableAction<'user.created', { userId: string; email: string }>
37
+ | AuditableAction<'user.updated', { userId: string; changes: string[] }>
38
+ | AuditableAction<'order.placed', { orderId: string; total: number }>;
39
+
40
+ describe('HonoEndpoint Audits', () => {
41
+ const createMockLogger = (): 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(function (this: Logger) {
49
+ return this;
50
+ }),
51
+ });
52
+
53
+ const createServiceDiscovery = (logger: Logger) => {
54
+ const envParser = new EnvironmentParser({});
55
+ // Create a fresh instance by clearing the singleton
56
+ ServiceDiscovery.reset();
57
+ return ServiceDiscovery.getInstance(logger, envParser);
58
+ };
59
+
60
+ it('should process audits after successful endpoint execution', async () => {
61
+ const mockLogger = createMockLogger();
62
+ const serviceDiscovery = createServiceDiscovery(mockLogger);
63
+ const auditStorage = new InMemoryAuditStorage();
64
+
65
+ const auditStorageService: Service<'auditStorage', InMemoryAuditStorage> = {
66
+ serviceName: 'auditStorage' as const,
67
+ register: vi.fn().mockResolvedValue(auditStorage),
68
+ };
69
+
70
+ const outputSchema = z.object({ id: z.string(), email: z.string() });
71
+
72
+ const audits: MappedAudit<TestAuditAction, typeof outputSchema>[] = [
73
+ {
74
+ type: 'user.created',
75
+ payload: (response) => ({ userId: response.id, email: response.email }),
76
+ },
77
+ ];
78
+
79
+ const endpoint = new Endpoint({
80
+ route: '/users',
81
+ method: 'POST',
82
+ fn: async () => ({ id: '123', email: 'test@example.com' }),
83
+ input: undefined,
84
+ output: outputSchema,
85
+ services: [],
86
+ logger: mockLogger,
87
+ timeout: undefined,
88
+ memorySize: undefined,
89
+ status: 200,
90
+ getSession: undefined,
91
+ authorize: undefined,
92
+ description: undefined,
93
+ events: [],
94
+ publisherService: undefined,
95
+ auditorStorageService: auditStorageService,
96
+ audits,
97
+ });
98
+
99
+ const adaptor = new HonoEndpoint(endpoint);
100
+ const app = new Hono();
101
+ HonoEndpoint.applyEventMiddleware(app, serviceDiscovery);
102
+
103
+ adaptor.addRoute(serviceDiscovery, app);
104
+
105
+ const response = await app.request('/users', {
106
+ method: 'POST',
107
+ body: JSON.stringify({}),
108
+ headers: { 'Content-Type': 'application/json' },
109
+ });
110
+
111
+ expect(response.status).toBe(200);
112
+ expect(await response.json()).toEqual({
113
+ id: '123',
114
+ email: 'test@example.com',
115
+ });
116
+
117
+ // Verify audit was written
118
+ expect(auditStorage.records).toHaveLength(1);
119
+ expect(auditStorage.records[0].type).toBe('user.created');
120
+ expect(auditStorage.records[0].payload).toEqual({
121
+ userId: '123',
122
+ email: 'test@example.com',
123
+ });
124
+ });
125
+
126
+ it('should process multiple audits after successful endpoint execution', async () => {
127
+ const mockLogger = createMockLogger();
128
+ const serviceDiscovery = createServiceDiscovery(mockLogger);
129
+ const auditStorage = new InMemoryAuditStorage();
130
+
131
+ const auditStorageService: Service<'auditStorage', InMemoryAuditStorage> = {
132
+ serviceName: 'auditStorage' as const,
133
+ register: vi.fn().mockResolvedValue(auditStorage),
134
+ };
135
+
136
+ const outputSchema = z.object({
137
+ id: z.string(),
138
+ email: z.string(),
139
+ changes: z.array(z.string()),
140
+ });
141
+
142
+ const audits: MappedAudit<TestAuditAction, typeof outputSchema>[] = [
143
+ {
144
+ type: 'user.created',
145
+ payload: (response) => ({ userId: response.id, email: response.email }),
146
+ },
147
+ {
148
+ type: 'user.updated',
149
+ payload: (response) => ({
150
+ userId: response.id,
151
+ changes: response.changes,
152
+ }),
153
+ },
154
+ ];
155
+
156
+ const endpoint = new Endpoint({
157
+ route: '/users',
158
+ method: 'POST',
159
+ fn: async () => ({
160
+ id: '456',
161
+ email: 'user@example.com',
162
+ changes: ['name', 'email'],
163
+ }),
164
+ input: undefined,
165
+ output: outputSchema,
166
+ services: [],
167
+ logger: mockLogger,
168
+ timeout: undefined,
169
+ memorySize: undefined,
170
+ status: 201,
171
+ getSession: undefined,
172
+ authorize: undefined,
173
+ description: undefined,
174
+ events: [],
175
+ publisherService: undefined,
176
+ auditorStorageService: auditStorageService,
177
+ audits,
178
+ });
179
+
180
+ const adaptor = new HonoEndpoint(endpoint);
181
+ const app = new Hono();
182
+ HonoEndpoint.applyEventMiddleware(app, serviceDiscovery);
183
+
184
+ adaptor.addRoute(serviceDiscovery, app);
185
+
186
+ const response = await app.request('/users', {
187
+ method: 'POST',
188
+ body: JSON.stringify({}),
189
+ headers: { 'Content-Type': 'application/json' },
190
+ });
191
+
192
+ expect(response.status).toBe(201);
193
+
194
+ // Verify both audits were written
195
+ expect(auditStorage.records).toHaveLength(2);
196
+ expect(auditStorage.records[0].type).toBe('user.created');
197
+ expect(auditStorage.records[1].type).toBe('user.updated');
198
+ });
199
+
200
+ it('should respect when conditions for audits', async () => {
201
+ const mockLogger = createMockLogger();
202
+ const serviceDiscovery = createServiceDiscovery(mockLogger);
203
+ const auditStorage = new InMemoryAuditStorage();
204
+
205
+ const auditStorageService: Service<'auditStorage', InMemoryAuditStorage> = {
206
+ serviceName: 'auditStorage' as const,
207
+ register: vi.fn().mockResolvedValue(auditStorage),
208
+ };
209
+
210
+ const outputSchema = z.object({
211
+ id: z.string(),
212
+ email: z.string(),
213
+ isNew: z.boolean(),
214
+ });
215
+
216
+ const audits: MappedAudit<TestAuditAction, typeof outputSchema>[] = [
217
+ {
218
+ type: 'user.created',
219
+ payload: (response) => ({ userId: response.id, email: response.email }),
220
+ when: (response) => response.isNew === true,
221
+ },
222
+ {
223
+ type: 'user.updated',
224
+ payload: (response) => ({ userId: response.id, changes: ['profile'] }),
225
+ when: (response) => response.isNew === false,
226
+ },
227
+ ];
228
+
229
+ const endpoint = new Endpoint({
230
+ route: '/users/:id',
231
+ method: 'PUT',
232
+ fn: async () => ({
233
+ id: '789',
234
+ email: 'updated@example.com',
235
+ isNew: false,
236
+ }),
237
+ input: undefined,
238
+ output: outputSchema,
239
+ services: [],
240
+ logger: mockLogger,
241
+ timeout: undefined,
242
+ memorySize: undefined,
243
+ status: 200,
244
+ getSession: undefined,
245
+ authorize: undefined,
246
+ description: undefined,
247
+ events: [],
248
+ publisherService: undefined,
249
+ auditorStorageService: auditStorageService,
250
+ audits,
251
+ });
252
+
253
+ const adaptor = new HonoEndpoint(endpoint);
254
+ const app = new Hono();
255
+ HonoEndpoint.applyEventMiddleware(app, serviceDiscovery);
256
+
257
+ adaptor.addRoute(serviceDiscovery, app);
258
+
259
+ const response = await app.request('/users/789', {
260
+ method: 'PUT',
261
+ body: JSON.stringify({}),
262
+ headers: { 'Content-Type': 'application/json' },
263
+ });
264
+
265
+ expect(response.status).toBe(200);
266
+
267
+ // Only user.updated audit should be written due to when condition
268
+ expect(auditStorage.records).toHaveLength(1);
269
+ expect(auditStorage.records[0].type).toBe('user.updated');
270
+ });
271
+
272
+ it('should extract actor from request context', async () => {
273
+ const mockLogger = createMockLogger();
274
+ const serviceDiscovery = createServiceDiscovery(mockLogger);
275
+ const auditStorage = new InMemoryAuditStorage();
276
+
277
+ const auditStorageService: Service<'auditStorage', InMemoryAuditStorage> = {
278
+ serviceName: 'auditStorage' as const,
279
+ register: vi.fn().mockResolvedValue(auditStorage),
280
+ };
281
+
282
+ const actorExtractor: ActorExtractor = ({ header }) => ({
283
+ id: header('x-user-id') ?? 'anonymous',
284
+ type: 'user',
285
+ ip: header('x-forwarded-for'),
286
+ });
287
+
288
+ const outputSchema = z.object({ id: z.string(), email: z.string() });
289
+
290
+ const audits: MappedAudit<TestAuditAction, typeof outputSchema>[] = [
291
+ {
292
+ type: 'user.created',
293
+ payload: (response) => ({ userId: response.id, email: response.email }),
294
+ },
295
+ ];
296
+
297
+ const endpoint = new Endpoint({
298
+ route: '/users',
299
+ method: 'POST',
300
+ fn: async () => ({ id: '123', email: 'test@example.com' }),
301
+ input: undefined,
302
+ output: outputSchema,
303
+ services: [],
304
+ logger: mockLogger,
305
+ timeout: undefined,
306
+ memorySize: undefined,
307
+ status: 200,
308
+ getSession: undefined,
309
+ authorize: undefined,
310
+ description: undefined,
311
+ events: [],
312
+ publisherService: undefined,
313
+ auditorStorageService: auditStorageService,
314
+ actorExtractor,
315
+ audits,
316
+ });
317
+
318
+ const adaptor = new HonoEndpoint(endpoint);
319
+ const app = new Hono();
320
+ HonoEndpoint.applyEventMiddleware(app, serviceDiscovery);
321
+
322
+ adaptor.addRoute(serviceDiscovery, app);
323
+
324
+ const response = await app.request('/users', {
325
+ method: 'POST',
326
+ body: JSON.stringify({}),
327
+ headers: {
328
+ 'Content-Type': 'application/json',
329
+ 'x-user-id': 'user-456',
330
+ 'x-forwarded-for': '192.168.1.1',
331
+ },
332
+ });
333
+
334
+ expect(response.status).toBe(200);
335
+
336
+ // Verify actor was extracted correctly
337
+ expect(auditStorage.records).toHaveLength(1);
338
+ expect(auditStorage.records[0].actor).toEqual({
339
+ id: 'user-456',
340
+ type: 'user',
341
+ ip: '192.168.1.1',
342
+ });
343
+ });
344
+
345
+ it('should not process audits when no auditor storage is configured', async () => {
346
+ const mockLogger = createMockLogger();
347
+ const serviceDiscovery = createServiceDiscovery(mockLogger);
348
+ const outputSchema = z.object({ id: z.string(), email: z.string() });
349
+
350
+ const audits: MappedAudit<TestAuditAction, typeof outputSchema>[] = [
351
+ {
352
+ type: 'user.created',
353
+ payload: (response) => ({ userId: response.id, email: response.email }),
354
+ },
355
+ ];
356
+
357
+ const endpoint = new Endpoint({
358
+ route: '/users',
359
+ method: 'POST',
360
+ fn: async () => ({ id: '999', email: 'test@example.com' }),
361
+ input: undefined,
362
+ output: outputSchema,
363
+ services: [],
364
+ logger: mockLogger,
365
+ timeout: undefined,
366
+ memorySize: undefined,
367
+ status: 200,
368
+ getSession: undefined,
369
+ authorize: undefined,
370
+ description: undefined,
371
+ events: [],
372
+ publisherService: undefined,
373
+ auditorStorageService: undefined, // No auditor storage
374
+ audits,
375
+ });
376
+
377
+ const adaptor = new HonoEndpoint(endpoint);
378
+ const app = new Hono();
379
+ HonoEndpoint.applyEventMiddleware(app, serviceDiscovery);
380
+
381
+ adaptor.addRoute(serviceDiscovery, app);
382
+
383
+ const response = await app.request('/users', {
384
+ method: 'POST',
385
+ body: JSON.stringify({}),
386
+ headers: { 'Content-Type': 'application/json' },
387
+ });
388
+
389
+ expect(response.status).toBe(200);
390
+ expect(await response.json()).toEqual({
391
+ id: '999',
392
+ email: 'test@example.com',
393
+ });
394
+
395
+ // Should log warning
396
+ expect(mockLogger.warn).toHaveBeenCalledWith(
397
+ 'No auditor storage service available',
398
+ );
399
+ });
400
+
401
+ it('should not process audits when no audits are configured', async () => {
402
+ const mockLogger = createMockLogger();
403
+ const serviceDiscovery = createServiceDiscovery(mockLogger);
404
+ const auditStorage = new InMemoryAuditStorage();
405
+
406
+ const auditStorageService: Service<'auditStorage', InMemoryAuditStorage> = {
407
+ serviceName: 'auditStorage' as const,
408
+ register: vi.fn().mockResolvedValue(auditStorage),
409
+ };
410
+
411
+ const outputSchema = z.object({ id: z.string(), email: z.string() });
412
+
413
+ const endpoint = new Endpoint({
414
+ route: '/users',
415
+ method: 'POST',
416
+ fn: async () => ({ id: '111', email: 'test@example.com' }),
417
+ input: undefined,
418
+ output: outputSchema,
419
+ services: [],
420
+ logger: mockLogger,
421
+ timeout: undefined,
422
+ memorySize: undefined,
423
+ status: 200,
424
+ getSession: undefined,
425
+ authorize: undefined,
426
+ description: undefined,
427
+ events: [],
428
+ publisherService: undefined,
429
+ auditorStorageService: auditStorageService,
430
+ audits: [], // No audits
431
+ });
432
+
433
+ const adaptor = new HonoEndpoint(endpoint);
434
+ const app = new Hono();
435
+ HonoEndpoint.applyEventMiddleware(app, serviceDiscovery);
436
+
437
+ adaptor.addRoute(serviceDiscovery, app);
438
+
439
+ const response = await app.request('/users', {
440
+ method: 'POST',
441
+ body: JSON.stringify({}),
442
+ headers: { 'Content-Type': 'application/json' },
443
+ });
444
+
445
+ expect(response.status).toBe(200);
446
+
447
+ // No audits should be written
448
+ expect(auditStorage.records).toHaveLength(0);
449
+ });
450
+
451
+ it('should not process audits when endpoint throws an error', async () => {
452
+ const mockLogger = createMockLogger();
453
+ const serviceDiscovery = createServiceDiscovery(mockLogger);
454
+ const auditStorage = new InMemoryAuditStorage();
455
+
456
+ const auditStorageService: Service<'auditStorage', InMemoryAuditStorage> = {
457
+ serviceName: 'auditStorage' as const,
458
+ register: vi.fn().mockResolvedValue(auditStorage),
459
+ };
460
+
461
+ const outputSchema = z.object({ id: z.string(), email: z.string() });
462
+
463
+ const audits: MappedAudit<TestAuditAction, typeof outputSchema>[] = [
464
+ {
465
+ type: 'user.created',
466
+ payload: (response) => ({ userId: response.id, email: response.email }),
467
+ },
468
+ ];
469
+
470
+ const endpoint = new Endpoint({
471
+ route: '/users',
472
+ method: 'POST',
473
+ fn: async () => {
474
+ throw new Error('Something went wrong');
475
+ },
476
+ input: undefined,
477
+ output: outputSchema,
478
+ services: [],
479
+ logger: mockLogger,
480
+ timeout: undefined,
481
+ memorySize: undefined,
482
+ status: 200,
483
+ getSession: undefined,
484
+ authorize: undefined,
485
+ description: undefined,
486
+ events: [],
487
+ publisherService: undefined,
488
+ auditorStorageService: auditStorageService,
489
+ audits,
490
+ });
491
+
492
+ const adaptor = new HonoEndpoint(endpoint);
493
+ const app = new Hono();
494
+ HonoEndpoint.applyEventMiddleware(app, serviceDiscovery);
495
+
496
+ adaptor.addRoute(serviceDiscovery, app);
497
+
498
+ const response = await app.request('/users', {
499
+ method: 'POST',
500
+ body: JSON.stringify({}),
501
+ headers: { 'Content-Type': 'application/json' },
502
+ });
503
+
504
+ // Should return 500 due to error
505
+ expect(response.status).toBe(500);
506
+
507
+ // No audits should be written when endpoint throws an error
508
+ expect(auditStorage.records).toHaveLength(0);
509
+ });
510
+
511
+ it('should include entityId in audit record when configured', async () => {
512
+ const mockLogger = createMockLogger();
513
+ const serviceDiscovery = createServiceDiscovery(mockLogger);
514
+ const auditStorage = new InMemoryAuditStorage();
515
+
516
+ const auditStorageService: Service<'auditStorage', InMemoryAuditStorage> = {
517
+ serviceName: 'auditStorage' as const,
518
+ register: vi.fn().mockResolvedValue(auditStorage),
519
+ };
520
+
521
+ const outputSchema = z.object({ id: z.string(), email: z.string() });
522
+
523
+ const audits: MappedAudit<TestAuditAction, typeof outputSchema>[] = [
524
+ {
525
+ type: 'user.created',
526
+ payload: (response) => ({ userId: response.id, email: response.email }),
527
+ entityId: (response) => response.id,
528
+ table: 'users',
529
+ },
530
+ ];
531
+
532
+ const endpoint = new Endpoint({
533
+ route: '/users',
534
+ method: 'POST',
535
+ fn: async () => ({ id: 'user-123', email: 'test@example.com' }),
536
+ input: undefined,
537
+ output: outputSchema,
538
+ services: [],
539
+ logger: mockLogger,
540
+ timeout: undefined,
541
+ memorySize: undefined,
542
+ status: 201,
543
+ getSession: undefined,
544
+ authorize: undefined,
545
+ description: undefined,
546
+ events: [],
547
+ publisherService: undefined,
548
+ auditorStorageService: auditStorageService,
549
+ audits,
550
+ });
551
+
552
+ const adaptor = new HonoEndpoint(endpoint);
553
+ const app = new Hono();
554
+ HonoEndpoint.applyEventMiddleware(app, serviceDiscovery);
555
+
556
+ adaptor.addRoute(serviceDiscovery, app);
557
+
558
+ const response = await app.request('/users', {
559
+ method: 'POST',
560
+ body: JSON.stringify({}),
561
+ headers: { 'Content-Type': 'application/json' },
562
+ });
563
+
564
+ expect(response.status).toBe(201);
565
+
566
+ // Verify entityId and table are included
567
+ expect(auditStorage.records).toHaveLength(1);
568
+ expect(auditStorage.records[0].entityId).toBe('user-123');
569
+ expect(auditStorage.records[0].table).toBe('users');
570
+ });
571
+
572
+ it('should include endpoint metadata in audit records', async () => {
573
+ const mockLogger = createMockLogger();
574
+ const serviceDiscovery = createServiceDiscovery(mockLogger);
575
+ const auditStorage = new InMemoryAuditStorage();
576
+
577
+ const auditStorageService: Service<'auditStorage', InMemoryAuditStorage> = {
578
+ serviceName: 'auditStorage' as const,
579
+ register: vi.fn().mockResolvedValue(auditStorage),
580
+ };
581
+
582
+ const outputSchema = z.object({ id: z.string(), email: z.string() });
583
+
584
+ const audits: MappedAudit<TestAuditAction, typeof outputSchema>[] = [
585
+ {
586
+ type: 'user.created',
587
+ payload: (response) => ({ userId: response.id, email: response.email }),
588
+ },
589
+ ];
590
+
591
+ const endpoint = new Endpoint({
592
+ route: '/users',
593
+ method: 'POST',
594
+ fn: async () => ({ id: '123', email: 'test@example.com' }),
595
+ input: undefined,
596
+ output: outputSchema,
597
+ services: [],
598
+ logger: mockLogger,
599
+ timeout: undefined,
600
+ memorySize: undefined,
601
+ status: 200,
602
+ getSession: undefined,
603
+ authorize: undefined,
604
+ description: undefined,
605
+ events: [],
606
+ publisherService: undefined,
607
+ auditorStorageService: auditStorageService,
608
+ audits,
609
+ });
610
+
611
+ const adaptor = new HonoEndpoint(endpoint);
612
+ const app = new Hono();
613
+ HonoEndpoint.applyEventMiddleware(app, serviceDiscovery);
614
+
615
+ adaptor.addRoute(serviceDiscovery, app);
616
+
617
+ const response = await app.request('/users', {
618
+ method: 'POST',
619
+ body: JSON.stringify({}),
620
+ headers: { 'Content-Type': 'application/json' },
621
+ });
622
+
623
+ expect(response.status).toBe(200);
624
+
625
+ // Verify metadata includes endpoint info
626
+ expect(auditStorage.records).toHaveLength(1);
627
+ expect(auditStorage.records[0].metadata).toEqual({
628
+ endpoint: '/users',
629
+ method: 'POST',
630
+ });
631
+ });
632
+ });
@@ -65,6 +65,7 @@ describe('HonoEndpoint Events', () => {
65
65
  services: [],
66
66
  logger: mockLogger,
67
67
  timeout: undefined,
68
+ memorySize: undefined,
68
69
  status: 200,
69
70
  getSession: undefined,
70
71
  authorize: undefined,
@@ -134,6 +135,7 @@ describe('HonoEndpoint Events', () => {
134
135
  services: [],
135
136
  logger: mockLogger,
136
137
  timeout: undefined,
138
+ memorySize: undefined,
137
139
  status: 201,
138
140
  getSession: undefined,
139
141
  authorize: undefined,
@@ -218,6 +220,7 @@ describe('HonoEndpoint Events', () => {
218
220
  services: [],
219
221
  logger: mockLogger,
220
222
  timeout: undefined,
223
+ memorySize: undefined,
221
224
  status: 200,
222
225
  getSession: undefined,
223
226
  authorize: undefined,
@@ -276,6 +279,7 @@ describe('HonoEndpoint Events', () => {
276
279
  services: [],
277
280
  logger: mockLogger,
278
281
  timeout: undefined,
282
+ memorySize: undefined,
279
283
  status: 200,
280
284
  getSession: undefined,
281
285
  authorize: undefined,
@@ -332,6 +336,7 @@ describe('HonoEndpoint Events', () => {
332
336
  services: [],
333
337
  logger: mockLogger,
334
338
  timeout: undefined,
339
+ memorySize: undefined,
335
340
  status: 200,
336
341
  getSession: undefined,
337
342
  authorize: undefined,
@@ -395,6 +400,7 @@ describe('HonoEndpoint Events', () => {
395
400
  services: [],
396
401
  logger: mockLogger,
397
402
  timeout: undefined,
403
+ memorySize: undefined,
398
404
  status: 200,
399
405
  getSession: undefined,
400
406
  authorize: undefined,
@@ -469,6 +475,7 @@ describe('HonoEndpoint Events', () => {
469
475
  services: [],
470
476
  logger: mockLogger,
471
477
  timeout: undefined,
478
+ memorySize: undefined,
472
479
  status: 201,
473
480
  getSession: undefined,
474
481
  authorize: undefined,
@@ -540,6 +547,7 @@ describe('HonoEndpoint Events', () => {
540
547
  services: [],
541
548
  logger: mockLogger,
542
549
  timeout: undefined,
550
+ memorySize: undefined,
543
551
  status: 200,
544
552
  getSession: undefined,
545
553
  authorize: undefined,