@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.
- package/dist/{AWSLambdaFunction-gpqm7UBb.d.cts → AWSLambdaFunction-BdebRMUh.d.mts} +7 -5
- package/dist/AWSLambdaFunction-BdebRMUh.d.mts.map +1 -0
- package/dist/{AWSLambdaFunction-H65WfXLt.mjs → AWSLambdaFunction-C54a1doJ.mjs} +3 -3
- package/dist/AWSLambdaFunction-C54a1doJ.mjs.map +1 -0
- package/dist/{AWSLambdaFunction-D9RZhm0N.d.mts → AWSLambdaFunction-D0tEOTXQ.d.cts} +7 -5
- package/dist/AWSLambdaFunction-D0tEOTXQ.d.cts.map +1 -0
- package/dist/{AWSLambdaFunction-C-fuCLA3.cjs → AWSLambdaFunction-EPGY4s7i.cjs} +3 -3
- package/dist/AWSLambdaFunction-EPGY4s7i.cjs.map +1 -0
- package/dist/{AWSLambdaSubscriberAdaptor-CyFh7MN8.mjs → AWSLambdaSubscriberAdaptor-BLfO612H.mjs} +5 -3
- package/dist/{AWSLambdaSubscriberAdaptor-CyFh7MN8.mjs.map → AWSLambdaSubscriberAdaptor-BLfO612H.mjs.map} +1 -1
- package/dist/{AWSLambdaSubscriberAdaptor-Dum5bkw3.cjs → AWSLambdaSubscriberAdaptor-BNcYYZ-P.cjs} +5 -3
- package/dist/{AWSLambdaSubscriberAdaptor-Dum5bkw3.cjs.map → AWSLambdaSubscriberAdaptor-BNcYYZ-P.cjs.map} +1 -1
- package/dist/{AWSLambdaSubscriberAdaptor-C0aZBU64.d.mts → AWSLambdaSubscriberAdaptor-DrFAvHOp.d.mts} +4 -2
- package/dist/AWSLambdaSubscriberAdaptor-DrFAvHOp.d.mts.map +1 -0
- package/dist/{AWSLambdaSubscriberAdaptor-DT8icDRf.d.cts → AWSLambdaSubscriberAdaptor-Dx-Ks1Jp.d.cts} +4 -2
- package/dist/AWSLambdaSubscriberAdaptor-Dx-Ks1Jp.d.cts.map +1 -0
- package/dist/{AmazonApiGatewayEndpointAdaptor-pEWzF2uY.mjs → AmazonApiGatewayEndpointAdaptor-BT9JXihC.mjs} +2 -2
- package/dist/{AmazonApiGatewayEndpointAdaptor-pEWzF2uY.mjs.map → AmazonApiGatewayEndpointAdaptor-BT9JXihC.mjs.map} +1 -1
- package/dist/{AmazonApiGatewayEndpointAdaptor-CbJqLU6I.d.cts → AmazonApiGatewayEndpointAdaptor-DLqnYQ4E.d.cts} +5 -3
- package/dist/AmazonApiGatewayEndpointAdaptor-DLqnYQ4E.d.cts.map +1 -0
- package/dist/{AmazonApiGatewayEndpointAdaptor-Bk6ssx3K.cjs → AmazonApiGatewayEndpointAdaptor-DNFvvdmW.cjs} +2 -2
- package/dist/{AmazonApiGatewayEndpointAdaptor-Bk6ssx3K.cjs.map → AmazonApiGatewayEndpointAdaptor-DNFvvdmW.cjs.map} +1 -1
- package/dist/{AmazonApiGatewayEndpointAdaptor-DC3N7zY_.d.mts → AmazonApiGatewayEndpointAdaptor-qlKXuZxy.d.mts} +5 -3
- package/dist/AmazonApiGatewayEndpointAdaptor-qlKXuZxy.d.mts.map +1 -0
- package/dist/{AmazonApiGatewayV1EndpointAdaptor-MJpRbIaQ.mjs → AmazonApiGatewayV1EndpointAdaptor-CShQI8Gk.mjs} +3 -3
- package/dist/AmazonApiGatewayV1EndpointAdaptor-CShQI8Gk.mjs.map +1 -0
- package/dist/{AmazonApiGatewayV1EndpointAdaptor-uBp_4zLf.cjs → AmazonApiGatewayV1EndpointAdaptor-Ccl8B8kG.cjs} +3 -3
- package/dist/AmazonApiGatewayV1EndpointAdaptor-Ccl8B8kG.cjs.map +1 -0
- package/dist/{AmazonApiGatewayV1EndpointAdaptor-BVxgQ-7J.d.mts → AmazonApiGatewayV1EndpointAdaptor-DyUaJIhB.d.cts} +8 -6
- package/dist/AmazonApiGatewayV1EndpointAdaptor-DyUaJIhB.d.cts.map +1 -0
- package/dist/{AmazonApiGatewayV1EndpointAdaptor-CVwJ5k16.d.cts → AmazonApiGatewayV1EndpointAdaptor-MRUxs3Xi.d.mts} +8 -6
- package/dist/AmazonApiGatewayV1EndpointAdaptor-MRUxs3Xi.d.mts.map +1 -0
- package/dist/{AmazonApiGatewayV2EndpointAdaptor-I1W23Nvn.cjs → AmazonApiGatewayV2EndpointAdaptor-D8-0Aab4.cjs} +3 -3
- package/dist/AmazonApiGatewayV2EndpointAdaptor-D8-0Aab4.cjs.map +1 -0
- package/dist/{AmazonApiGatewayV2EndpointAdaptor-1oBZdQH3.d.cts → AmazonApiGatewayV2EndpointAdaptor-M1-w0U5R.d.cts} +6 -4
- package/dist/AmazonApiGatewayV2EndpointAdaptor-M1-w0U5R.d.cts.map +1 -0
- package/dist/{AmazonApiGatewayV2EndpointAdaptor-C3H8Hpv7.d.mts → AmazonApiGatewayV2EndpointAdaptor-fuLM6M9k.d.mts} +6 -4
- package/dist/AmazonApiGatewayV2EndpointAdaptor-fuLM6M9k.d.mts.map +1 -0
- package/dist/{AmazonApiGatewayV2EndpointAdaptor-ChO8BlDz.mjs → AmazonApiGatewayV2EndpointAdaptor-lCRzGE4q.mjs} +3 -3
- package/dist/AmazonApiGatewayV2EndpointAdaptor-lCRzGE4q.mjs.map +1 -0
- package/dist/{Authorizer-CpSUMTIs.d.cts → Authorizer-B-btowNd.d.cts} +2 -1
- package/dist/Authorizer-B-btowNd.d.cts.map +1 -0
- package/dist/{Authorizer-Cpx59w_q.d.mts → Authorizer-gWxYsGEp.d.mts} +2 -1
- package/dist/Authorizer-gWxYsGEp.d.mts.map +1 -0
- package/dist/{BaseFunctionBuilder-CoV7J45W.d.mts → BaseFunctionBuilder-BAtutR6q.d.cts} +5 -3
- package/dist/BaseFunctionBuilder-BAtutR6q.d.cts.map +1 -0
- package/dist/{BaseFunctionBuilder-B5gkW0Kt.mjs → BaseFunctionBuilder-Czi1Jwza.mjs} +2 -2
- package/dist/{BaseFunctionBuilder-B5gkW0Kt.mjs.map → BaseFunctionBuilder-Czi1Jwza.mjs.map} +1 -1
- package/dist/{BaseFunctionBuilder-DaQA0uKE.d.cts → BaseFunctionBuilder-DRY419e7.d.mts} +5 -3
- package/dist/BaseFunctionBuilder-DRY419e7.d.mts.map +1 -0
- package/dist/{BaseFunctionBuilder-C5Se7pdL.cjs → BaseFunctionBuilder-MYG3C9ug.cjs} +2 -2
- package/dist/{BaseFunctionBuilder-C5Se7pdL.cjs.map → BaseFunctionBuilder-MYG3C9ug.cjs.map} +1 -1
- package/dist/{Construct-BYSPikVm.cjs → Construct-Ba5cMxib.cjs} +2 -2
- package/dist/{Construct-BYSPikVm.cjs.map → Construct-Ba5cMxib.cjs.map} +1 -1
- package/dist/{Construct-Dkd8Kvc9.d.cts → Construct-C4rPE67v.d.cts} +8 -7
- package/dist/Construct-C4rPE67v.d.cts.map +1 -0
- package/dist/{Construct-LWeB1rSQ.mjs → Construct-DdyGHuag.mjs} +2 -2
- package/dist/{Construct-LWeB1rSQ.mjs.map → Construct-DdyGHuag.mjs.map} +1 -1
- package/dist/{Construct-jBKqb-Zi.d.mts → Construct-XrijZFFh.d.mts} +8 -7
- package/dist/Construct-XrijZFFh.d.mts.map +1 -0
- package/dist/Construct.cjs +1 -1
- package/dist/Construct.d.cts +1 -1
- package/dist/Construct.d.mts +1 -1
- package/dist/Construct.mjs +1 -1
- package/dist/{Cron-Dy_HW2Vv.mjs → Cron-BxhGs5up.mjs} +3 -3
- package/dist/{Cron-Dy_HW2Vv.mjs.map → Cron-BxhGs5up.mjs.map} +1 -1
- package/dist/{Cron-Bi3QOge_.cjs → Cron-CGF4YAfM.cjs} +3 -3
- package/dist/{Cron-Bi3QOge_.cjs.map → Cron-CGF4YAfM.cjs.map} +1 -1
- package/dist/{Cron-7VPR2cNR.d.cts → Cron-bDLcTvV5.d.cts} +4 -4
- package/dist/Cron-bDLcTvV5.d.cts.map +1 -0
- package/dist/{Cron-JZkp_fHy.d.mts → Cron-cdjlSKNp.d.mts} +4 -4
- package/dist/Cron-cdjlSKNp.d.mts.map +1 -0
- package/dist/{CronBuilder-290th4zF.d.cts → CronBuilder-BC4m5-p1.d.mts} +7 -5
- package/dist/CronBuilder-BC4m5-p1.d.mts.map +1 -0
- package/dist/{CronBuilder-Dv_w7Yri.cjs → CronBuilder-CcxKRtVP.cjs} +4 -4
- package/dist/CronBuilder-CcxKRtVP.cjs.map +1 -0
- package/dist/{CronBuilder-BmFDO0Dm.d.mts → CronBuilder-DKVXyE0Q.d.cts} +7 -5
- package/dist/CronBuilder-DKVXyE0Q.d.cts.map +1 -0
- package/dist/{CronBuilder-Bl3A2Zp4.mjs → CronBuilder-d2jh-IB2.mjs} +4 -4
- package/dist/CronBuilder-d2jh-IB2.mjs.map +1 -0
- package/dist/{Endpoint-CC2RGjkl.d.cts → Endpoint-BPv9_-m_.d.cts} +6 -4
- package/dist/Endpoint-BPv9_-m_.d.cts.map +1 -0
- package/dist/{Endpoint-BJo9Hhwm.cjs → Endpoint-BVGZXFyV.cjs} +3 -3
- package/dist/{Endpoint-BJo9Hhwm.cjs.map → Endpoint-BVGZXFyV.cjs.map} +1 -1
- package/dist/{Endpoint-C5djXyae.d.mts → Endpoint-BdwG75G_.d.mts} +6 -4
- package/dist/Endpoint-BdwG75G_.d.mts.map +1 -0
- package/dist/{Endpoint-B70_KKhu.mjs → Endpoint-CuOEswxJ.mjs} +3 -3
- package/dist/{Endpoint-B70_KKhu.mjs.map → Endpoint-CuOEswxJ.mjs.map} +1 -1
- package/dist/{EndpointBuilder-CD8LkBda.d.mts → EndpointBuilder-B3az942t.d.mts} +7 -5
- package/dist/EndpointBuilder-B3az942t.d.mts.map +1 -0
- package/dist/{EndpointBuilder-DeswNQdG.cjs → EndpointBuilder-Cgj1P_ra.cjs} +4 -4
- package/dist/EndpointBuilder-Cgj1P_ra.cjs.map +1 -0
- package/dist/{EndpointBuilder-vXk6eIJk.d.cts → EndpointBuilder-DIy_m1bu.d.cts} +7 -5
- package/dist/EndpointBuilder-DIy_m1bu.d.cts.map +1 -0
- package/dist/{EndpointBuilder-FyyoFTJ5.mjs → EndpointBuilder-DnCB1h1j.mjs} +4 -4
- package/dist/EndpointBuilder-DnCB1h1j.mjs.map +1 -0
- package/dist/{EndpointFactory-jAkQxWRj.d.mts → EndpointFactory-C-0nE6Jg.d.mts} +6 -4
- package/dist/EndpointFactory-C-0nE6Jg.d.mts.map +1 -0
- package/dist/{EndpointFactory-eZc-XpNm.cjs → EndpointFactory-CYj6BYok.cjs} +2 -2
- package/dist/{EndpointFactory-eZc-XpNm.cjs.map → EndpointFactory-CYj6BYok.cjs.map} +1 -1
- package/dist/{EndpointFactory-CAneQs06.mjs → EndpointFactory-CbdxPCIH.mjs} +2 -2
- package/dist/{EndpointFactory-CAneQs06.mjs.map → EndpointFactory-CbdxPCIH.mjs.map} +1 -1
- package/dist/{EndpointFactory-D8I4NNCo.d.cts → EndpointFactory-CyPbm3AD.d.cts} +6 -4
- package/dist/EndpointFactory-CyPbm3AD.d.cts.map +1 -0
- package/dist/{Function-DfKsM5Kx.mjs → Function-BVHqIDp9.mjs} +2 -2
- package/dist/{Function-DfKsM5Kx.mjs.map → Function-BVHqIDp9.mjs.map} +1 -1
- package/dist/{Function-DHD1V9QW.d.cts → Function-Cf7f_kCz.d.cts} +5 -5
- package/dist/Function-Cf7f_kCz.d.cts.map +1 -0
- package/dist/{Function-DagDbeXo.cjs → Function-DDZb1525.cjs} +2 -2
- package/dist/{Function-DagDbeXo.cjs.map → Function-DDZb1525.cjs.map} +1 -1
- package/dist/{Function-Vh1t-Qjj.d.mts → Function-DN2G6OT5.d.mts} +5 -5
- package/dist/Function-DN2G6OT5.d.mts.map +1 -0
- package/dist/{FunctionBuilder-3jsoFffg.d.mts → FunctionBuilder-CJBzzXL3.d.cts} +7 -5
- package/dist/FunctionBuilder-CJBzzXL3.d.cts.map +1 -0
- package/dist/{FunctionBuilder-CVT7bG2o.mjs → FunctionBuilder-CrDYgfiI.mjs} +4 -4
- package/dist/FunctionBuilder-CrDYgfiI.mjs.map +1 -0
- package/dist/{FunctionBuilder-FV6r3I7X.d.cts → FunctionBuilder-Cxx8D2na.d.mts} +7 -5
- package/dist/FunctionBuilder-Cxx8D2na.d.mts.map +1 -0
- package/dist/{FunctionBuilder-DXvG_XD-.cjs → FunctionBuilder-DswJ-9sD.cjs} +4 -4
- package/dist/FunctionBuilder-DswJ-9sD.cjs.map +1 -0
- package/dist/{FunctionExecutionWrapper-DkNycmOh.cjs → FunctionExecutionWrapper-BYI2bGTL.cjs} +2 -2
- package/dist/{FunctionExecutionWrapper-DkNycmOh.cjs.map → FunctionExecutionWrapper-BYI2bGTL.cjs.map} +1 -1
- package/dist/{FunctionExecutionWrapper-Bubnr0zA.mjs → FunctionExecutionWrapper-CLDh7Z2_.mjs} +2 -2
- package/dist/{FunctionExecutionWrapper-Bubnr0zA.mjs.map → FunctionExecutionWrapper-CLDh7Z2_.mjs.map} +1 -1
- package/dist/{FunctionExecutionWrapper-CI3CaoCo.d.mts → FunctionExecutionWrapper-DF260Aaj.d.mts} +4 -2
- package/dist/FunctionExecutionWrapper-DF260Aaj.d.mts.map +1 -0
- package/dist/{FunctionExecutionWrapper-DYt3C8b9.d.cts → FunctionExecutionWrapper-Qy8bmgFR.d.cts} +4 -2
- package/dist/FunctionExecutionWrapper-Qy8bmgFR.d.cts.map +1 -0
- package/dist/{HonoEndpointAdaptor-BusUWu1w.d.cts → HonoEndpointAdaptor-Bqm6SEuP.d.cts} +8 -6
- package/dist/HonoEndpointAdaptor-Bqm6SEuP.d.cts.map +1 -0
- package/dist/{HonoEndpointAdaptor-DodwLM0-.cjs → HonoEndpointAdaptor-CQe2FqMR.cjs} +5 -6
- package/dist/{HonoEndpointAdaptor-DodwLM0-.cjs.map → HonoEndpointAdaptor-CQe2FqMR.cjs.map} +1 -1
- package/dist/{HonoEndpointAdaptor-g8xxh3tS.d.mts → HonoEndpointAdaptor-CRe-ij5f.d.mts} +8 -6
- package/dist/HonoEndpointAdaptor-CRe-ij5f.d.mts.map +1 -0
- package/dist/{HonoEndpointAdaptor-CcvXzoYV.mjs → HonoEndpointAdaptor-Ce-2HBxn.mjs} +5 -6
- package/dist/{HonoEndpointAdaptor-CcvXzoYV.mjs.map → HonoEndpointAdaptor-Ce-2HBxn.mjs.map} +1 -1
- package/dist/{Subscriber-DOt3svUC.cjs → Subscriber-BiHjVXtM.cjs} +2 -2
- package/dist/Subscriber-BiHjVXtM.cjs.map +1 -0
- package/dist/{Subscriber-kCHbH2fZ.mjs → Subscriber-BmPf9GFb.mjs} +2 -2
- package/dist/Subscriber-BmPf9GFb.mjs.map +1 -0
- package/dist/{Subscriber-DMSzvO_J.d.cts → Subscriber-COYMSevD.d.cts} +6 -6
- package/dist/Subscriber-COYMSevD.d.cts.map +1 -0
- package/dist/{Subscriber-aNr1qkxR.d.mts → Subscriber-ikctpU3I.d.mts} +6 -6
- package/dist/Subscriber-ikctpU3I.d.mts.map +1 -0
- package/dist/{SubscriberBuilder-Cj2u9k5Q.cjs → SubscriberBuilder-Cp1C-xtT.cjs} +2 -2
- package/dist/{SubscriberBuilder-Cj2u9k5Q.cjs.map → SubscriberBuilder-Cp1C-xtT.cjs.map} +1 -1
- package/dist/{SubscriberBuilder-DmxMU89X.mjs → SubscriberBuilder-DJPEeYDJ.mjs} +2 -2
- package/dist/{SubscriberBuilder-DmxMU89X.mjs.map → SubscriberBuilder-DJPEeYDJ.mjs.map} +1 -1
- package/dist/{SubscriberBuilder-BxJM3Hz_.d.cts → SubscriberBuilder-D_9zzllj.d.mts} +5 -3
- package/dist/SubscriberBuilder-D_9zzllj.d.mts.map +1 -0
- package/dist/{SubscriberBuilder-CWS4tdbp.d.mts → SubscriberBuilder-ivHAGIVi.d.cts} +5 -3
- package/dist/SubscriberBuilder-ivHAGIVi.d.cts.map +1 -0
- package/dist/{TestEndpointAdaptor-1pPixE6y.mjs → TestEndpointAdaptor-BXTofAKc.mjs} +17 -2
- package/dist/TestEndpointAdaptor-BXTofAKc.mjs.map +1 -0
- package/dist/{TestEndpointAdaptor-5-unBV8O.d.mts → TestEndpointAdaptor-C10xBI--.d.cts} +4 -4
- package/dist/TestEndpointAdaptor-C10xBI--.d.cts.map +1 -0
- package/dist/{TestEndpointAdaptor-wA-fmq4v.cjs → TestEndpointAdaptor-D9IwhIYg.cjs} +17 -2
- package/dist/TestEndpointAdaptor-D9IwhIYg.cjs.map +1 -0
- package/dist/{TestEndpointAdaptor-Bm0UjDtV.d.cts → TestEndpointAdaptor-DB7bREhS.d.mts} +4 -4
- package/dist/TestEndpointAdaptor-DB7bREhS.d.mts.map +1 -0
- package/dist/adaptors/aws.cjs +13 -13
- package/dist/adaptors/aws.d.cts +15 -15
- package/dist/adaptors/aws.d.mts +15 -15
- package/dist/adaptors/aws.mjs +13 -13
- package/dist/adaptors/hono.cjs +9 -9
- package/dist/adaptors/hono.d.cts +9 -9
- package/dist/adaptors/hono.d.mts +9 -9
- package/dist/adaptors/hono.mjs +9 -9
- package/dist/adaptors/testing.cjs +7 -7
- package/dist/adaptors/testing.d.cts +9 -9
- package/dist/adaptors/testing.d.mts +9 -9
- package/dist/adaptors/testing.mjs +7 -7
- package/dist/crons/Cron.cjs +6 -6
- package/dist/crons/Cron.d.cts +6 -6
- package/dist/crons/Cron.d.mts +6 -6
- package/dist/crons/Cron.mjs +6 -6
- package/dist/crons/CronBuilder.cjs +7 -7
- package/dist/crons/CronBuilder.d.cts +7 -7
- package/dist/crons/CronBuilder.d.mts +7 -7
- package/dist/crons/CronBuilder.mjs +7 -7
- package/dist/crons/index.cjs +7 -7
- package/dist/crons/index.d.cts +9 -7
- package/dist/crons/index.d.cts.map +1 -0
- package/dist/crons/index.d.mts +13 -11
- package/dist/crons/index.d.mts.map +1 -0
- package/dist/crons/index.mjs +7 -7
- package/dist/endpoints/AmazonApiGatewayEndpointAdaptor.cjs +7 -7
- package/dist/endpoints/AmazonApiGatewayEndpointAdaptor.d.cts +9 -9
- package/dist/endpoints/AmazonApiGatewayEndpointAdaptor.d.mts +9 -9
- package/dist/endpoints/AmazonApiGatewayEndpointAdaptor.mjs +7 -7
- package/dist/endpoints/AmazonApiGatewayV1EndpointAdaptor.cjs +9 -9
- package/dist/endpoints/AmazonApiGatewayV1EndpointAdaptor.d.cts +10 -10
- package/dist/endpoints/AmazonApiGatewayV1EndpointAdaptor.d.mts +10 -10
- package/dist/endpoints/AmazonApiGatewayV1EndpointAdaptor.mjs +9 -9
- package/dist/endpoints/AmazonApiGatewayV2EndpointAdaptor.cjs +9 -9
- package/dist/endpoints/AmazonApiGatewayV2EndpointAdaptor.d.cts +10 -10
- package/dist/endpoints/AmazonApiGatewayV2EndpointAdaptor.d.mts +10 -10
- package/dist/endpoints/AmazonApiGatewayV2EndpointAdaptor.mjs +9 -9
- package/dist/endpoints/Authorizer.d.cts +1 -1
- package/dist/endpoints/Authorizer.d.mts +1 -1
- package/dist/endpoints/Endpoint.cjs +6 -6
- package/dist/endpoints/Endpoint.d.cts +8 -8
- package/dist/endpoints/Endpoint.d.mts +8 -8
- package/dist/endpoints/Endpoint.mjs +6 -6
- package/dist/endpoints/EndpointBuilder.cjs +7 -7
- package/dist/endpoints/EndpointBuilder.d.cts +9 -9
- package/dist/endpoints/EndpointBuilder.d.mts +9 -9
- package/dist/endpoints/EndpointBuilder.mjs +7 -7
- package/dist/endpoints/EndpointFactory.cjs +8 -8
- package/dist/endpoints/EndpointFactory.d.cts +10 -10
- package/dist/endpoints/EndpointFactory.d.mts +10 -10
- package/dist/endpoints/EndpointFactory.mjs +8 -8
- package/dist/endpoints/HonoEndpointAdaptor.cjs +9 -9
- package/dist/endpoints/HonoEndpointAdaptor.d.cts +9 -9
- package/dist/endpoints/HonoEndpointAdaptor.d.mts +9 -9
- package/dist/endpoints/HonoEndpointAdaptor.mjs +9 -9
- package/dist/endpoints/TestEndpointAdaptor.cjs +7 -7
- package/dist/endpoints/TestEndpointAdaptor.d.cts +9 -9
- package/dist/endpoints/TestEndpointAdaptor.d.mts +9 -9
- package/dist/endpoints/TestEndpointAdaptor.mjs +7 -7
- package/dist/endpoints/audit.d.cts +8 -8
- package/dist/endpoints/audit.d.mts +8 -8
- package/dist/endpoints/helpers.cjs +7 -7
- package/dist/endpoints/helpers.d.cts +9 -8
- package/dist/endpoints/helpers.d.cts.map +1 -0
- package/dist/endpoints/helpers.d.mts +9 -8
- package/dist/endpoints/helpers.d.mts.map +1 -0
- package/dist/endpoints/helpers.mjs +7 -7
- package/dist/endpoints/index.cjs +8 -8
- package/dist/endpoints/index.d.cts +14 -12
- package/dist/endpoints/index.d.cts.map +1 -0
- package/dist/endpoints/index.d.mts +14 -12
- package/dist/endpoints/index.d.mts.map +1 -0
- package/dist/endpoints/index.mjs +8 -8
- package/dist/endpoints/parseHonoQuery.cjs +1 -1
- package/dist/endpoints/parseHonoQuery.d.cts +2 -0
- package/dist/endpoints/parseHonoQuery.d.cts.map +1 -0
- package/dist/endpoints/parseHonoQuery.d.mts +2 -0
- package/dist/endpoints/parseHonoQuery.d.mts.map +1 -0
- package/dist/endpoints/parseHonoQuery.mjs +1 -1
- package/dist/endpoints/parseQueryParams.cjs +1 -1
- package/dist/endpoints/parseQueryParams.d.cts +1 -0
- package/dist/endpoints/parseQueryParams.d.cts.map +1 -0
- package/dist/endpoints/parseQueryParams.d.mts +1 -0
- package/dist/endpoints/parseQueryParams.d.mts.map +1 -0
- package/dist/endpoints/parseQueryParams.mjs +1 -1
- package/dist/endpoints/processAudits.d.cts +10 -8
- package/dist/endpoints/processAudits.d.cts.map +1 -0
- package/dist/endpoints/processAudits.d.mts +10 -8
- package/dist/endpoints/processAudits.d.mts.map +1 -0
- package/dist/endpoints/rls.d.cts +8 -8
- package/dist/endpoints/rls.d.mts +8 -8
- package/dist/functions/AWSLambdaFunction.cjs +6 -6
- package/dist/functions/AWSLambdaFunction.d.cts +4 -4
- package/dist/functions/AWSLambdaFunction.d.mts +4 -4
- package/dist/functions/AWSLambdaFunction.mjs +6 -6
- package/dist/functions/BaseFunctionBuilder.cjs +2 -2
- package/dist/functions/BaseFunctionBuilder.d.cts +2 -2
- package/dist/functions/BaseFunctionBuilder.d.mts +2 -2
- package/dist/functions/BaseFunctionBuilder.mjs +2 -2
- package/dist/functions/Function.cjs +2 -2
- package/dist/functions/Function.d.cts +2 -2
- package/dist/functions/Function.d.mts +2 -2
- package/dist/functions/Function.mjs +2 -2
- package/dist/functions/FunctionBuilder.cjs +4 -4
- package/dist/functions/FunctionBuilder.d.cts +4 -4
- package/dist/functions/FunctionBuilder.d.mts +4 -4
- package/dist/functions/FunctionBuilder.mjs +4 -4
- package/dist/functions/FunctionExecutionWrapper.cjs +5 -5
- package/dist/functions/FunctionExecutionWrapper.d.cts +3 -3
- package/dist/functions/FunctionExecutionWrapper.d.mts +3 -3
- package/dist/functions/FunctionExecutionWrapper.mjs +5 -5
- package/dist/functions/TestFunctionAdaptor.cjs +4 -4
- package/dist/functions/TestFunctionAdaptor.d.cts +4 -2
- package/dist/functions/TestFunctionAdaptor.d.cts.map +1 -0
- package/dist/functions/TestFunctionAdaptor.d.mts +4 -2
- package/dist/functions/TestFunctionAdaptor.d.mts.map +1 -0
- package/dist/functions/TestFunctionAdaptor.mjs +4 -4
- package/dist/functions/index.cjs +5 -5
- package/dist/functions/index.d.cts +5 -5
- package/dist/functions/index.d.mts +5 -5
- package/dist/functions/index.mjs +5 -5
- package/dist/functions-C6EK1xL6.mjs +8 -0
- package/dist/{functions-JhRsNoAZ.mjs.map → functions-C6EK1xL6.mjs.map} +1 -1
- package/dist/{functions-FCb-wWFC.cjs → functions-fTid0RMK.cjs} +2 -2
- package/dist/{functions-FCb-wWFC.cjs.map → functions-fTid0RMK.cjs.map} +1 -1
- package/dist/{helpers-DxxSpLfw.cjs → helpers-BcP1tXAi.cjs} +2 -2
- package/dist/{helpers-DxxSpLfw.cjs.map → helpers-BcP1tXAi.cjs.map} +1 -1
- package/dist/{helpers-C3B2lVrM.mjs → helpers-ByRTDO_m.mjs} +2 -2
- package/dist/{helpers-C3B2lVrM.mjs.map → helpers-ByRTDO_m.mjs.map} +1 -1
- package/dist/{index-CFyaRrck.d.mts → index-BWzGIj06.d.mts} +4 -2
- package/dist/index-BWzGIj06.d.mts.map +1 -0
- package/dist/index-SI4V0XwK.d.cts +12 -0
- package/dist/index-SI4V0XwK.d.cts.map +1 -0
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +2 -2
- package/dist/index.d.mts +2 -2
- package/dist/index.mjs +1 -1
- package/dist/{parseHonoQuery-CT8Cvin-.cjs → parseHonoQuery-CZC5_97v.cjs} +3 -1
- package/dist/parseHonoQuery-CZC5_97v.cjs.map +1 -0
- package/dist/{parseHonoQuery-CwFKw2ua.mjs → parseHonoQuery-DDgIkTO4.mjs} +3 -1
- package/dist/parseHonoQuery-DDgIkTO4.mjs.map +1 -0
- package/dist/{parseQueryParams-CwvXXwkW.cjs → parseQueryParams-BSNkjmZ9.cjs} +3 -1
- package/dist/parseQueryParams-BSNkjmZ9.cjs.map +1 -0
- package/dist/{parseQueryParams-CHINupbZ.mjs → parseQueryParams-UMTRnRrW.mjs} +3 -1
- package/dist/parseQueryParams-UMTRnRrW.mjs.map +1 -0
- package/dist/publisher.d.cts +4 -2
- package/dist/publisher.d.cts.map +1 -0
- package/dist/publisher.d.mts +4 -2
- package/dist/publisher.d.mts.map +1 -0
- package/dist/subscribers/AWSLambdaSubscriberAdaptor.cjs +1 -1
- package/dist/subscribers/AWSLambdaSubscriberAdaptor.d.cts +3 -3
- package/dist/subscribers/AWSLambdaSubscriberAdaptor.d.mts +3 -3
- package/dist/subscribers/AWSLambdaSubscriberAdaptor.mjs +1 -1
- package/dist/subscribers/Subscriber.cjs +2 -2
- package/dist/subscribers/Subscriber.d.cts +2 -2
- package/dist/subscribers/Subscriber.d.mts +2 -2
- package/dist/subscribers/Subscriber.mjs +2 -2
- package/dist/subscribers/SubscriberBuilder.cjs +3 -3
- package/dist/subscribers/SubscriberBuilder.d.cts +3 -3
- package/dist/subscribers/SubscriberBuilder.d.mts +3 -3
- package/dist/subscribers/SubscriberBuilder.mjs +3 -3
- package/dist/subscribers/index.cjs +3 -3
- package/dist/subscribers/index.d.cts +7 -5
- package/dist/subscribers/index.d.cts.map +1 -0
- package/dist/subscribers/index.d.mts +5 -3
- package/dist/subscribers/index.d.mts.map +1 -0
- package/dist/subscribers/index.mjs +3 -3
- package/dist/{types-Bp9ysFXd.d.cts → types-B5H3piDg.d.cts} +3 -1
- package/dist/types-B5H3piDg.d.cts.map +1 -0
- package/dist/{types-CScirkHt.d.mts → types-DdIlpxAd.d.mts} +3 -1
- package/dist/types-DdIlpxAd.d.mts.map +1 -0
- package/dist/types.d.cts +1 -1
- package/dist/types.d.mts +1 -1
- package/package.json +64 -13
- package/src/Construct.ts +3 -3
- package/src/__benchmarks__/endpoint.bench.ts +494 -0
- package/src/__benchmarks__/hono-server.bench.ts +249 -0
- package/src/crons/CronBuilder.ts +8 -8
- package/src/endpoints/AmazonApiGatewayV1EndpointAdaptor.ts +4 -4
- package/src/endpoints/AmazonApiGatewayV2EndpointAdaptor.ts +4 -4
- package/src/endpoints/EndpointBuilder.ts +4 -4
- package/src/endpoints/HonoEndpointAdaptor.ts +1 -2
- package/src/endpoints/TestEndpointAdaptor.ts +18 -0
- package/src/endpoints/parseHonoQuery.ts +2 -0
- package/src/endpoints/parseQueryParams.ts +2 -0
- package/src/functions/AWSLambdaFunction.ts +1 -1
- package/src/functions/FunctionBuilder.ts +5 -5
- package/src/subscribers/AWSLambdaSubscriberAdaptor.ts +8 -4
- package/src/subscribers/Subscriber.ts +5 -5
- package/tsconfig.json +9 -0
- package/dist/AWSLambdaFunction-C-fuCLA3.cjs.map +0 -1
- package/dist/AWSLambdaFunction-H65WfXLt.mjs.map +0 -1
- package/dist/AmazonApiGatewayV1EndpointAdaptor-MJpRbIaQ.mjs.map +0 -1
- package/dist/AmazonApiGatewayV1EndpointAdaptor-uBp_4zLf.cjs.map +0 -1
- package/dist/AmazonApiGatewayV2EndpointAdaptor-ChO8BlDz.mjs.map +0 -1
- package/dist/AmazonApiGatewayV2EndpointAdaptor-I1W23Nvn.cjs.map +0 -1
- package/dist/CronBuilder-Bl3A2Zp4.mjs.map +0 -1
- package/dist/CronBuilder-Dv_w7Yri.cjs.map +0 -1
- package/dist/EndpointBuilder-DeswNQdG.cjs.map +0 -1
- package/dist/EndpointBuilder-FyyoFTJ5.mjs.map +0 -1
- package/dist/FunctionBuilder-CVT7bG2o.mjs.map +0 -1
- package/dist/FunctionBuilder-DXvG_XD-.cjs.map +0 -1
- package/dist/Subscriber-DOt3svUC.cjs.map +0 -1
- package/dist/Subscriber-kCHbH2fZ.mjs.map +0 -1
- package/dist/TestEndpointAdaptor-1pPixE6y.mjs.map +0 -1
- package/dist/TestEndpointAdaptor-wA-fmq4v.cjs.map +0 -1
- package/dist/functions-JhRsNoAZ.mjs +0 -8
- package/dist/index-CqH4_Ieb.d.cts +0 -10
- package/dist/parseHonoQuery-CT8Cvin-.cjs.map +0 -1
- package/dist/parseHonoQuery-CwFKw2ua.mjs.map +0 -1
- package/dist/parseQueryParams-CHINupbZ.mjs.map +0 -1
- 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
|
+
});
|
package/src/crons/CronBuilder.ts
CHANGED
|
@@ -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
|
|
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
|
|
@@ -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
|
-
|
|
184
|
-
|
|
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
|
-
|
|
193
|
-
|
|
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
|
@@ -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"}
|