@geekmidas/constructs 0.0.11 → 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.
- package/dist/{AWSLambdaFunction-DcI_77u8.cjs → AWSLambdaFunction-DMxScuaw.cjs} +3 -3
- package/dist/{AWSLambdaFunction-DcI_77u8.cjs.map → AWSLambdaFunction-DMxScuaw.cjs.map} +1 -1
- package/dist/{AWSLambdaFunction-xyCenuD7.d.cts → AWSLambdaFunction-DSB2oaFG.d.mts} +5 -5
- package/dist/{AWSLambdaFunction-BTSGYZSx.mjs → AWSLambdaFunction-cL8A169J.mjs} +3 -3
- package/dist/{AWSLambdaFunction-BTSGYZSx.mjs.map → AWSLambdaFunction-cL8A169J.mjs.map} +1 -1
- package/dist/{AWSLambdaFunction-Bel0NFTl.d.mts → AWSLambdaFunction-t6q2o8EL.d.cts} +5 -5
- package/dist/{AWSLambdaSubscriberAdaptor-mLOpS63x.d.mts → AWSLambdaSubscriberAdaptor-Cknp_nn1.d.cts} +4 -4
- package/dist/{AWSLambdaSubscriberAdaptor-G8y3YkWj.mjs → AWSLambdaSubscriberAdaptor-CyFh7MN8.mjs} +1 -1
- package/dist/{AWSLambdaSubscriberAdaptor-G8y3YkWj.mjs.map → AWSLambdaSubscriberAdaptor-CyFh7MN8.mjs.map} +1 -1
- package/dist/{AWSLambdaSubscriberAdaptor-DX5NFdWf.d.cts → AWSLambdaSubscriberAdaptor-DpHzp-AM.d.mts} +4 -4
- package/dist/{AWSLambdaSubscriberAdaptor-CmPZ10JF.cjs → AWSLambdaSubscriberAdaptor-Dum5bkw3.cjs} +1 -1
- package/dist/{AWSLambdaSubscriberAdaptor-CmPZ10JF.cjs.map → AWSLambdaSubscriberAdaptor-Dum5bkw3.cjs.map} +1 -1
- package/dist/{AmazonApiGatewayEndpointAdaptor-vi0D3dWg.mjs → AmazonApiGatewayEndpointAdaptor-CIEhW1TQ.mjs} +47 -16
- package/dist/AmazonApiGatewayEndpointAdaptor-CIEhW1TQ.mjs.map +1 -0
- package/dist/{AmazonApiGatewayEndpointAdaptor-BwtDtS-i.d.cts → AmazonApiGatewayEndpointAdaptor-CwItKPz2.d.cts} +6 -5
- package/dist/{AmazonApiGatewayEndpointAdaptor-BTqB3c1_.cjs → AmazonApiGatewayEndpointAdaptor-H8YvtfQm.cjs} +47 -16
- package/dist/AmazonApiGatewayEndpointAdaptor-H8YvtfQm.cjs.map +1 -0
- package/dist/{AmazonApiGatewayEndpointAdaptor-CATWBIJo.d.mts → AmazonApiGatewayEndpointAdaptor-eDQgPNLH.d.mts} +7 -6
- package/dist/{AmazonApiGatewayV1EndpointAdaptor-nwrtG5L9.cjs → AmazonApiGatewayV1EndpointAdaptor-0n71d3gq.cjs} +3 -3
- package/dist/{AmazonApiGatewayV1EndpointAdaptor-nwrtG5L9.cjs.map → AmazonApiGatewayV1EndpointAdaptor-0n71d3gq.cjs.map} +1 -1
- package/dist/{AmazonApiGatewayV1EndpointAdaptor-D2_u_zR6.mjs → AmazonApiGatewayV1EndpointAdaptor-B36zXLJ7.mjs} +3 -3
- package/dist/{AmazonApiGatewayV1EndpointAdaptor-D2_u_zR6.mjs.map → AmazonApiGatewayV1EndpointAdaptor-B36zXLJ7.mjs.map} +1 -1
- package/dist/{AmazonApiGatewayV1EndpointAdaptor-2Rd0LLz4.d.mts → AmazonApiGatewayV1EndpointAdaptor-CnGVpA38.d.mts} +4 -4
- package/dist/{AmazonApiGatewayV1EndpointAdaptor-B1AVk2MM.d.cts → AmazonApiGatewayV1EndpointAdaptor-DaCvUL6y.d.cts} +3 -3
- package/dist/{AmazonApiGatewayV2EndpointAdaptor-cBDfwdBx.d.mts → AmazonApiGatewayV2EndpointAdaptor-BELz2ijs.d.mts} +4 -4
- package/dist/{AmazonApiGatewayV2EndpointAdaptor-DoWAJ9oN.mjs → AmazonApiGatewayV2EndpointAdaptor-CE3wZEb8.mjs} +3 -3
- package/dist/{AmazonApiGatewayV2EndpointAdaptor-DoWAJ9oN.mjs.map → AmazonApiGatewayV2EndpointAdaptor-CE3wZEb8.mjs.map} +1 -1
- package/dist/{AmazonApiGatewayV2EndpointAdaptor-DmY_QfjO.d.cts → AmazonApiGatewayV2EndpointAdaptor-DA1PH0nc.d.cts} +3 -3
- package/dist/{AmazonApiGatewayV2EndpointAdaptor-FSIdXYV6.cjs → AmazonApiGatewayV2EndpointAdaptor-DtU3Cb8F.cjs} +3 -3
- package/dist/{AmazonApiGatewayV2EndpointAdaptor-FSIdXYV6.cjs.map → AmazonApiGatewayV2EndpointAdaptor-DtU3Cb8F.cjs.map} +1 -1
- package/dist/{Authorizer-Bbk9ziuG.d.mts → Authorizer-BRCVPz_O.d.mts} +1 -1
- package/dist/{Authorizer-iXsSB600.d.cts → Authorizer-DG54w1m2.d.cts} +1 -1
- package/dist/{BaseFunctionBuilder-bTDKP7bd.cjs → BaseFunctionBuilder-B8rT07QR.cjs} +7 -2
- package/dist/BaseFunctionBuilder-B8rT07QR.cjs.map +1 -0
- package/dist/{BaseFunctionBuilder-DSqF1r3a.mjs → BaseFunctionBuilder-CT7p10K1.mjs} +7 -2
- package/dist/BaseFunctionBuilder-CT7p10K1.mjs.map +1 -0
- package/dist/{BaseFunctionBuilder-DOcm1heZ.d.mts → BaseFunctionBuilder-Cf0op65o.d.cts} +8 -5
- package/dist/{BaseFunctionBuilder-hWNVKXQB.d.cts → BaseFunctionBuilder-DilipY1y.d.mts} +8 -5
- package/dist/{Construct-XCGKof_O.cjs → Construct-BYSPikVm.cjs} +8 -3
- package/dist/Construct-BYSPikVm.cjs.map +1 -0
- package/dist/{Construct-rZQg2yus.mjs → Construct-LWeB1rSQ.mjs} +8 -3
- package/dist/Construct-LWeB1rSQ.mjs.map +1 -0
- package/dist/{Construct-iDmbkZ3o.d.mts → Construct-ZPqE0vhn.d.mts} +5 -3
- package/dist/{Construct-zc8BkRSp.d.cts → Construct-dI_rgdSp.d.cts} +5 -3
- 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-D5HGEt6g.d.mts → Cron-6lOgKqSA.d.cts} +3 -3
- package/dist/{Cron-DbJNPTbP.d.cts → Cron-BH_07atD.d.mts} +3 -3
- package/dist/{Cron-CYIhd0VE.cjs → Cron-Bnd-2pgE.cjs} +3 -3
- package/dist/{Cron-CYIhd0VE.cjs.map → Cron-Bnd-2pgE.cjs.map} +1 -1
- package/dist/{Cron-BnO1uXhh.mjs → Cron-DNRjf2cp.mjs} +3 -3
- package/dist/{Cron-BnO1uXhh.mjs.map → Cron-DNRjf2cp.mjs.map} +1 -1
- package/dist/{CronBuilder-D-546XtP.d.cts → CronBuilder-5oK2AL2n.d.cts} +4 -4
- package/dist/{CronBuilder-vRiZb1_N.d.mts → CronBuilder-D2b4zY4l.d.mts} +4 -4
- package/dist/{CronBuilder-BxKwHCdJ.mjs → CronBuilder-DdR2TuQa.mjs} +5 -5
- package/dist/{CronBuilder-BxKwHCdJ.mjs.map → CronBuilder-DdR2TuQa.mjs.map} +1 -1
- package/dist/{CronBuilder-D_3AiPFO.cjs → CronBuilder-dtw4ZyH6.cjs} +5 -5
- package/dist/{CronBuilder-D_3AiPFO.cjs.map → CronBuilder-dtw4ZyH6.cjs.map} +1 -1
- package/dist/{Endpoint-ChzcIFdV.mjs → Endpoint-B69TqESg.mjs} +15 -8
- package/dist/Endpoint-B69TqESg.mjs.map +1 -0
- package/dist/{Endpoint-BdIGWw1H.cjs → Endpoint-B9PryZES.cjs} +15 -8
- package/dist/Endpoint-B9PryZES.cjs.map +1 -0
- package/dist/{Endpoint-BpTSQn7W.d.cts → Endpoint-Cs-MsYlY.d.cts} +80 -12
- package/dist/{Endpoint-DqZkc6ft.d.mts → Endpoint-DuZlyjd4.d.mts} +80 -12
- package/dist/EndpointBuilder-BrB-K1jO.d.mts +86 -0
- package/dist/EndpointBuilder-C-PHInEW.d.cts +86 -0
- package/dist/{EndpointBuilder-yo40Qkf_.mjs → EndpointBuilder-DnVL-EU_.mjs} +47 -5
- package/dist/EndpointBuilder-DnVL-EU_.mjs.map +1 -0
- package/dist/{EndpointBuilder-dmMiNRm9.cjs → EndpointBuilder-DofwCnWJ.cjs} +47 -5
- package/dist/EndpointBuilder-DofwCnWJ.cjs.map +1 -0
- package/dist/{EndpointFactory-JPhk0Qom.d.cts → EndpointFactory-6zNpVSYp.d.mts} +12 -11
- package/dist/{EndpointFactory-CNbcr8u_.cjs → EndpointFactory-Ba9mx9MU.cjs} +3 -3
- package/dist/{EndpointFactory-CNbcr8u_.cjs.map → EndpointFactory-Ba9mx9MU.cjs.map} +1 -1
- package/dist/{EndpointFactory-D_mmO7Gu.d.mts → EndpointFactory-e5WYVR6t.d.cts} +12 -11
- package/dist/{EndpointFactory-LD3upVQK.mjs → EndpointFactory-pPaIGFHV.mjs} +3 -3
- package/dist/{EndpointFactory-LD3upVQK.mjs.map → EndpointFactory-pPaIGFHV.mjs.map} +1 -1
- package/dist/{Function-C-5_23Wi.d.mts → Function-6EWabl_X.d.cts} +6 -5
- package/dist/{Function-DDaSfL_E.cjs → Function-CO-s2pB8.cjs} +6 -6
- package/dist/Function-CO-s2pB8.cjs.map +1 -0
- package/dist/{Function-Cl9fiR3a.mjs → Function-COnc-tWM.mjs} +6 -6
- package/dist/Function-COnc-tWM.mjs.map +1 -0
- package/dist/{Function-CW-WcZTu.d.cts → Function-G3JPHMaY.d.mts} +6 -5
- package/dist/{FunctionBuilder-fU1H7tFN.d.cts → FunctionBuilder-B3fpp3hA.d.cts} +13 -11
- package/dist/{FunctionBuilder-udObIGV0.d.mts → FunctionBuilder-ByaB_LQ4.d.mts} +13 -11
- package/dist/{FunctionBuilder-vW12WFOw.mjs → FunctionBuilder-CMhLQ4dt.mjs} +11 -6
- package/dist/FunctionBuilder-CMhLQ4dt.mjs.map +1 -0
- package/dist/{FunctionBuilder-LQuBiqRc.cjs → FunctionBuilder-_hMwZUof.cjs} +11 -6
- package/dist/FunctionBuilder-_hMwZUof.cjs.map +1 -0
- package/dist/{FunctionExecutionWrapper-DYBy9OP3.d.mts → FunctionExecutionWrapper-Ci-ookJG.d.cts} +4 -4
- package/dist/{FunctionExecutionWrapper-Dwr2ZKzC.d.cts → FunctionExecutionWrapper-DHFMLrOl.d.mts} +4 -4
- package/dist/{FunctionExecutionWrapper-Dtyhid1Q.mjs → FunctionExecutionWrapper-i9v5L3Av.mjs} +2 -2
- package/dist/{FunctionExecutionWrapper-Dtyhid1Q.mjs.map → FunctionExecutionWrapper-i9v5L3Av.mjs.map} +1 -1
- package/dist/{FunctionExecutionWrapper-BBIoHUt6.cjs → FunctionExecutionWrapper-sxJNTpuc.cjs} +2 -2
- package/dist/{FunctionExecutionWrapper-BBIoHUt6.cjs.map → FunctionExecutionWrapper-sxJNTpuc.cjs.map} +1 -1
- package/dist/{HonoEndpointAdaptor-W-disJnm.d.mts → HonoEndpointAdaptor-BElil8O5.d.mts} +7 -6
- package/dist/{HonoEndpointAdaptor-Bc61IS6Q.cjs → HonoEndpointAdaptor-Cw2if5cG.cjs} +51 -20
- package/dist/HonoEndpointAdaptor-Cw2if5cG.cjs.map +1 -0
- package/dist/{HonoEndpointAdaptor-NR3h5gml.mjs → HonoEndpointAdaptor-DAfnTFVS.mjs} +51 -20
- package/dist/HonoEndpointAdaptor-DAfnTFVS.mjs.map +1 -0
- package/dist/{HonoEndpointAdaptor-BVQtyvna.d.cts → HonoEndpointAdaptor-DSHl8ZCY.d.cts} +8 -7
- package/dist/{Subscriber-BVq3ST4C.d.cts → Subscriber-BhzqUzs-.d.cts} +2 -2
- package/dist/{Subscriber-BKftCzwT.mjs → Subscriber-CGb8LjZa.mjs} +2 -2
- package/dist/{Subscriber-BKftCzwT.mjs.map → Subscriber-CGb8LjZa.mjs.map} +1 -1
- package/dist/{Subscriber-C2OPATI8.cjs → Subscriber-D-FPWts6.cjs} +2 -2
- package/dist/{Subscriber-C2OPATI8.cjs.map → Subscriber-D-FPWts6.cjs.map} +1 -1
- package/dist/{Subscriber-BuHaqWo4.d.mts → Subscriber-s6yfjeOc.d.mts} +2 -2
- package/dist/{SubscriberBuilder-2asHtGbl.d.mts → SubscriberBuilder-BCVkp-ga.d.cts} +3 -3
- package/dist/{SubscriberBuilder-yDfpHPZE.mjs → SubscriberBuilder-BcAspHv9.mjs} +2 -2
- package/dist/{SubscriberBuilder-yDfpHPZE.mjs.map → SubscriberBuilder-BcAspHv9.mjs.map} +1 -1
- package/dist/{SubscriberBuilder-yikoQ8ND.cjs → SubscriberBuilder-BfE2cL1q.cjs} +2 -2
- package/dist/{SubscriberBuilder-yikoQ8ND.cjs.map → SubscriberBuilder-BfE2cL1q.cjs.map} +1 -1
- package/dist/{SubscriberBuilder-CHIRyNjy.d.cts → SubscriberBuilder-aCua5_wA.d.mts} +3 -3
- package/dist/{TestEndpointAdaptor-DA1D6l-U.cjs → TestEndpointAdaptor-Bn1WRFph.cjs} +47 -18
- package/dist/TestEndpointAdaptor-Bn1WRFph.cjs.map +1 -0
- package/dist/{TestEndpointAdaptor-B10J-cI-.d.mts → TestEndpointAdaptor-DnlAA_rm.d.mts} +7 -6
- package/dist/{TestEndpointAdaptor-DpmNXp7G.mjs → TestEndpointAdaptor-DubQOJk_.mjs} +47 -18
- package/dist/TestEndpointAdaptor-DubQOJk_.mjs.map +1 -0
- package/dist/{TestEndpointAdaptor-BrE5Rs4U.d.cts → TestEndpointAdaptor-o-xtSyQ3.d.cts} +6 -5
- package/dist/adaptors/aws.cjs +14 -13
- package/dist/adaptors/aws.d.cts +14 -14
- package/dist/adaptors/aws.d.mts +15 -15
- package/dist/adaptors/aws.mjs +14 -13
- package/dist/adaptors/hono.cjs +10 -9
- package/dist/adaptors/hono.d.cts +8 -8
- package/dist/adaptors/hono.d.mts +9 -9
- package/dist/adaptors/hono.mjs +10 -9
- package/dist/adaptors/testing.cjs +8 -7
- package/dist/adaptors/testing.d.cts +8 -8
- package/dist/adaptors/testing.d.mts +9 -9
- package/dist/adaptors/testing.mjs +8 -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 +11 -11
- package/dist/crons/index.d.mts +11 -11
- package/dist/crons/index.mjs +7 -7
- package/dist/endpoints/AmazonApiGatewayEndpointAdaptor.cjs +8 -7
- package/dist/endpoints/AmazonApiGatewayEndpointAdaptor.d.cts +8 -8
- package/dist/endpoints/AmazonApiGatewayEndpointAdaptor.d.mts +9 -9
- package/dist/endpoints/AmazonApiGatewayEndpointAdaptor.mjs +8 -7
- package/dist/endpoints/AmazonApiGatewayV1EndpointAdaptor.cjs +10 -9
- package/dist/endpoints/AmazonApiGatewayV1EndpointAdaptor.d.cts +9 -9
- package/dist/endpoints/AmazonApiGatewayV1EndpointAdaptor.d.mts +10 -10
- package/dist/endpoints/AmazonApiGatewayV1EndpointAdaptor.mjs +10 -9
- package/dist/endpoints/AmazonApiGatewayV2EndpointAdaptor.cjs +10 -9
- package/dist/endpoints/AmazonApiGatewayV2EndpointAdaptor.d.cts +9 -9
- package/dist/endpoints/AmazonApiGatewayV2EndpointAdaptor.d.mts +10 -10
- package/dist/endpoints/AmazonApiGatewayV2EndpointAdaptor.mjs +10 -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 +7 -7
- 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 +8 -8
- 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 +9 -9
- package/dist/endpoints/EndpointFactory.d.mts +10 -10
- package/dist/endpoints/EndpointFactory.mjs +8 -8
- package/dist/endpoints/HonoEndpointAdaptor.cjs +10 -9
- package/dist/endpoints/HonoEndpointAdaptor.d.cts +8 -8
- package/dist/endpoints/HonoEndpointAdaptor.d.mts +9 -9
- package/dist/endpoints/HonoEndpointAdaptor.mjs +10 -9
- package/dist/endpoints/TestEndpointAdaptor.cjs +8 -7
- package/dist/endpoints/TestEndpointAdaptor.d.cts +8 -8
- package/dist/endpoints/TestEndpointAdaptor.d.mts +9 -9
- package/dist/endpoints/TestEndpointAdaptor.mjs +8 -7
- package/dist/endpoints/audit.cjs +0 -0
- package/dist/endpoints/audit.d.cts +9 -0
- package/dist/endpoints/audit.d.mts +9 -0
- package/dist/endpoints/audit.mjs +0 -0
- package/dist/endpoints/helpers.cjs +7 -7
- package/dist/endpoints/helpers.d.cts +7 -7
- package/dist/endpoints/helpers.d.mts +8 -8
- package/dist/endpoints/helpers.mjs +7 -7
- package/dist/endpoints/index.cjs +8 -8
- package/dist/endpoints/index.cjs.map +1 -1
- package/dist/endpoints/index.d.cts +12 -12
- package/dist/endpoints/index.d.mts +13 -13
- package/dist/endpoints/index.mjs +8 -8
- package/dist/endpoints/index.mjs.map +1 -1
- package/dist/endpoints/parseHonoQuery.cjs +1 -1
- package/dist/endpoints/parseHonoQuery.mjs +1 -1
- package/dist/endpoints/parseQueryParams.cjs +1 -1
- package/dist/endpoints/parseQueryParams.mjs +1 -1
- package/dist/endpoints/processAudits.cjs +5 -0
- package/dist/endpoints/processAudits.d.cts +74 -0
- package/dist/endpoints/processAudits.d.mts +74 -0
- package/dist/endpoints/processAudits.mjs +3 -0
- 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 +2 -2
- package/dist/functions/TestFunctionAdaptor.d.mts +2 -2
- 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-BYqZAob8.mjs +8 -0
- package/dist/{functions-HCoZ4YKF.mjs.map → functions-BYqZAob8.mjs.map} +1 -1
- package/dist/{functions-yg097ymU.cjs → functions-D03lqK-r.cjs} +2 -2
- package/dist/{functions-yg097ymU.cjs.map → functions-D03lqK-r.cjs.map} +1 -1
- package/dist/{helpers-Cq6wjo7s.cjs → helpers-BApRyhly.cjs} +2 -2
- package/dist/{helpers-Cq6wjo7s.cjs.map → helpers-BApRyhly.cjs.map} +1 -1
- package/dist/{helpers-CHsIWAEx.mjs → helpers-BPDogwac.mjs} +2 -2
- package/dist/{helpers-CHsIWAEx.mjs.map → helpers-BPDogwac.mjs.map} +1 -1
- package/dist/{index-RtxMVjUZ.d.mts → index-CUg_hSq-.d.cts} +3 -3
- package/dist/index-D-a7e2gv.d.mts +9 -0
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.mts +2 -2
- package/dist/index.mjs +1 -1
- package/dist/{parseHonoQuery-DopC24vB.cjs → parseHonoQuery-CT8Cvin-.cjs} +1 -1
- package/dist/{parseHonoQuery-DopC24vB.cjs.map → parseHonoQuery-CT8Cvin-.cjs.map} +1 -1
- package/dist/{parseHonoQuery-znDKBhdE.mjs → parseHonoQuery-CwFKw2ua.mjs} +1 -1
- package/dist/{parseHonoQuery-znDKBhdE.mjs.map → parseHonoQuery-CwFKw2ua.mjs.map} +1 -1
- package/dist/{parseQueryParams-BJaRh3OB.mjs → parseQueryParams-CHINupbZ.mjs} +1 -1
- package/dist/{parseQueryParams-BJaRh3OB.mjs.map → parseQueryParams-CHINupbZ.mjs.map} +1 -1
- package/dist/{parseQueryParams-BzPop4I1.cjs → parseQueryParams-CwvXXwkW.cjs} +1 -1
- package/dist/{parseQueryParams-BzPop4I1.cjs.map → parseQueryParams-CwvXXwkW.cjs.map} +1 -1
- package/dist/processAudits-BFokHhCO.cjs +174 -0
- package/dist/processAudits-BFokHhCO.cjs.map +1 -0
- package/dist/processAudits-DfcB-X-4.mjs +156 -0
- package/dist/processAudits-DfcB-X-4.mjs.map +1 -0
- package/dist/publisher.d.cts +1 -1
- package/dist/publisher.d.mts +1 -1
- 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 +5 -5
- package/dist/subscribers/index.d.mts +5 -5
- package/dist/subscribers/index.mjs +3 -3
- package/dist/{types-CVq20-fE.d.mts → types-DKf0juBf.d.mts} +1 -1
- package/dist/types.d.mts +1 -1
- package/package.json +14 -10
- package/src/Construct.ts +8 -0
- package/src/endpoints/AmazonApiGatewayEndpointAdaptor.ts +88 -19
- package/src/endpoints/Endpoint.ts +66 -13
- package/src/endpoints/EndpointBuilder.ts +183 -19
- package/src/endpoints/HonoEndpointAdaptor.ts +114 -33
- package/src/endpoints/TestEndpointAdaptor.ts +96 -21
- package/src/endpoints/__tests__/AmazonApiGatewayV1EndpointAdaptor.events.spec.ts +8 -0
- package/src/endpoints/__tests__/AmazonApiGatewayV1EndpointAdaptor.spec.ts +29 -0
- package/src/endpoints/__tests__/AmazonApiGatewayV2EndpointAdaptor.audits.spec.ts +626 -0
- package/src/endpoints/__tests__/AmazonApiGatewayV2EndpointAdaptor.events.spec.ts +9 -0
- package/src/endpoints/__tests__/AmazonApiGatewayV2EndpointAdaptor.kysely-audit.integration.spec.ts +718 -0
- package/src/endpoints/__tests__/Endpoint.spec.ts +19 -0
- package/src/endpoints/__tests__/EndpointBuilder.audit.spec.ts +424 -0
- package/src/endpoints/__tests__/HonoEndpointAdaptor.audit-transactions.spec.ts +685 -0
- package/src/endpoints/__tests__/HonoEndpointAdaptor.audits.spec.ts +632 -0
- package/src/endpoints/__tests__/HonoEndpointAdaptor.events.spec.ts +8 -0
- package/src/endpoints/__tests__/HonoEndpointAdaptor.kysely-audit.integration.spec.ts +678 -0
- package/src/endpoints/__tests__/HonoEndpointAdaptor.openapi.spec.ts +4 -0
- package/src/endpoints/__tests__/HonoEndpointAdaptor.spec.ts +25 -0
- package/src/endpoints/audit.ts +87 -0
- package/src/endpoints/index.ts +1 -0
- package/src/endpoints/processAudits.ts +339 -0
- package/src/functions/BaseFunctionBuilder.ts +50 -7
- package/src/functions/Function.ts +13 -9
- package/src/functions/FunctionBuilder.ts +78 -14
- package/src/functions/__tests__/FunctionBuilder.state-isolation.spec.ts +43 -2
- package/dist/AmazonApiGatewayEndpointAdaptor-BTqB3c1_.cjs.map +0 -1
- package/dist/AmazonApiGatewayEndpointAdaptor-vi0D3dWg.mjs.map +0 -1
- package/dist/BaseFunctionBuilder-DSqF1r3a.mjs.map +0 -1
- package/dist/BaseFunctionBuilder-bTDKP7bd.cjs.map +0 -1
- package/dist/Construct-XCGKof_O.cjs.map +0 -1
- package/dist/Construct-rZQg2yus.mjs.map +0 -1
- package/dist/Endpoint-BdIGWw1H.cjs.map +0 -1
- package/dist/Endpoint-ChzcIFdV.mjs.map +0 -1
- package/dist/EndpointBuilder-Cx6pUcCn.d.mts +0 -55
- package/dist/EndpointBuilder-Xka8ULR1.d.cts +0 -55
- package/dist/EndpointBuilder-dmMiNRm9.cjs.map +0 -1
- package/dist/EndpointBuilder-yo40Qkf_.mjs.map +0 -1
- package/dist/Function-Cl9fiR3a.mjs.map +0 -1
- package/dist/Function-DDaSfL_E.cjs.map +0 -1
- package/dist/FunctionBuilder-LQuBiqRc.cjs.map +0 -1
- package/dist/FunctionBuilder-vW12WFOw.mjs.map +0 -1
- package/dist/HonoEndpointAdaptor-Bc61IS6Q.cjs.map +0 -1
- package/dist/HonoEndpointAdaptor-NR3h5gml.mjs.map +0 -1
- package/dist/TestEndpointAdaptor-DA1D6l-U.cjs.map +0 -1
- package/dist/TestEndpointAdaptor-DpmNXp7G.mjs.map +0 -1
- package/dist/functions-HCoZ4YKF.mjs +0 -8
- package/dist/index-fiIGH95t.d.cts +0 -9
|
@@ -1,11 +1,15 @@
|
|
|
1
|
+
import type { AuditableAction, AuditStorage } from '@geekmidas/audit';
|
|
2
|
+
import type { EventPublisher, MappedEvent } from '@geekmidas/events';
|
|
1
3
|
import type { Logger } from '@geekmidas/logger';
|
|
2
4
|
import type { RateLimitConfig } from '@geekmidas/rate-limit';
|
|
3
5
|
import type { Service } from '@geekmidas/services';
|
|
4
6
|
import type { StandardSchemaV1 } from '@standard-schema/spec';
|
|
5
7
|
import uniqBy from 'lodash.uniqby';
|
|
6
|
-
import type { Authorizer } from './Authorizer';
|
|
7
8
|
import { ConstructType } from '../Construct';
|
|
8
9
|
import { BaseFunctionBuilder } from '../functions';
|
|
10
|
+
import type { HttpMethod } from '../types';
|
|
11
|
+
import type { ActorExtractor, MappedAudit } from './audit';
|
|
12
|
+
import type { Authorizer } from './Authorizer';
|
|
9
13
|
import { Endpoint, type EndpointSchemas } from './Endpoint';
|
|
10
14
|
import type {
|
|
11
15
|
AuthorizeFn,
|
|
@@ -14,9 +18,6 @@ import type {
|
|
|
14
18
|
SuccessStatus,
|
|
15
19
|
} from './Endpoint';
|
|
16
20
|
|
|
17
|
-
import type { EventPublisher, MappedEvent } from '@geekmidas/events';
|
|
18
|
-
import type { HttpMethod } from '../types';
|
|
19
|
-
|
|
20
21
|
export class EndpointBuilder<
|
|
21
22
|
TRoute extends string,
|
|
22
23
|
TMethod extends HttpMethod,
|
|
@@ -28,13 +29,21 @@ export class EndpointBuilder<
|
|
|
28
29
|
TEventPublisher extends EventPublisher<any> | undefined = undefined,
|
|
29
30
|
TEventPublisherServiceName extends string = string,
|
|
30
31
|
TAuthorizers extends readonly string[] = readonly string[],
|
|
32
|
+
TAuditStorage extends AuditStorage | undefined = undefined,
|
|
33
|
+
TAuditStorageServiceName extends string = string,
|
|
34
|
+
TAuditAction extends AuditableAction<string, unknown> = AuditableAction<
|
|
35
|
+
string,
|
|
36
|
+
unknown
|
|
37
|
+
>,
|
|
31
38
|
> extends BaseFunctionBuilder<
|
|
32
39
|
TInput,
|
|
33
40
|
OutSchema,
|
|
34
41
|
TServices,
|
|
35
42
|
TLogger,
|
|
36
43
|
TEventPublisher,
|
|
37
|
-
TEventPublisherServiceName
|
|
44
|
+
TEventPublisherServiceName,
|
|
45
|
+
TAuditStorage,
|
|
46
|
+
TAuditStorageServiceName
|
|
38
47
|
> {
|
|
39
48
|
protected schemas: TInput = {} as TInput;
|
|
40
49
|
protected _description?: string;
|
|
@@ -46,6 +55,8 @@ export class EndpointBuilder<
|
|
|
46
55
|
_rateLimit?: RateLimitConfig;
|
|
47
56
|
_availableAuthorizers: Authorizer[] = [];
|
|
48
57
|
_authorizerName?: TAuthorizers[number];
|
|
58
|
+
_actorExtractor?: ActorExtractor<TServices, TSession, TLogger>;
|
|
59
|
+
_audits: MappedAudit<TAuditAction, OutSchema>[] = [];
|
|
49
60
|
|
|
50
61
|
constructor(
|
|
51
62
|
readonly route: TRoute,
|
|
@@ -100,7 +111,9 @@ export class EndpointBuilder<
|
|
|
100
111
|
TSession,
|
|
101
112
|
T,
|
|
102
113
|
TName,
|
|
103
|
-
TAuthorizers
|
|
114
|
+
TAuthorizers,
|
|
115
|
+
TAuditStorage,
|
|
116
|
+
TAuditStorageServiceName
|
|
104
117
|
> {
|
|
105
118
|
this._publisher = publisher as unknown as Service<
|
|
106
119
|
TEventPublisherServiceName,
|
|
@@ -117,7 +130,9 @@ export class EndpointBuilder<
|
|
|
117
130
|
TSession,
|
|
118
131
|
T,
|
|
119
132
|
TName,
|
|
120
|
-
TAuthorizers
|
|
133
|
+
TAuthorizers,
|
|
134
|
+
TAuditStorage,
|
|
135
|
+
TAuditStorageServiceName
|
|
121
136
|
>;
|
|
122
137
|
}
|
|
123
138
|
|
|
@@ -133,7 +148,9 @@ export class EndpointBuilder<
|
|
|
133
148
|
TSession,
|
|
134
149
|
TEventPublisher,
|
|
135
150
|
TEventPublisherServiceName,
|
|
136
|
-
TAuthorizers
|
|
151
|
+
TAuthorizers,
|
|
152
|
+
TAuditStorage,
|
|
153
|
+
TAuditStorageServiceName
|
|
137
154
|
> {
|
|
138
155
|
this.schemas.body = schema as unknown as T;
|
|
139
156
|
// @ts-ignore
|
|
@@ -152,7 +169,9 @@ export class EndpointBuilder<
|
|
|
152
169
|
TSession,
|
|
153
170
|
TEventPublisher,
|
|
154
171
|
TEventPublisherServiceName,
|
|
155
|
-
TAuthorizers
|
|
172
|
+
TAuthorizers,
|
|
173
|
+
TAuditStorage,
|
|
174
|
+
TAuditStorageServiceName
|
|
156
175
|
> {
|
|
157
176
|
this.schemas.query = schema as unknown as T;
|
|
158
177
|
// @ts-ignore
|
|
@@ -171,7 +190,9 @@ export class EndpointBuilder<
|
|
|
171
190
|
TSession,
|
|
172
191
|
TEventPublisher,
|
|
173
192
|
TEventPublisherServiceName,
|
|
174
|
-
TAuthorizers
|
|
193
|
+
TAuthorizers,
|
|
194
|
+
TAuditStorage,
|
|
195
|
+
TAuditStorageServiceName
|
|
175
196
|
> {
|
|
176
197
|
return this.search(schema);
|
|
177
198
|
}
|
|
@@ -188,7 +209,9 @@ export class EndpointBuilder<
|
|
|
188
209
|
TSession,
|
|
189
210
|
TEventPublisher,
|
|
190
211
|
TEventPublisherServiceName,
|
|
191
|
-
TAuthorizers
|
|
212
|
+
TAuthorizers,
|
|
213
|
+
TAuditStorage,
|
|
214
|
+
TAuditStorageServiceName
|
|
192
215
|
> {
|
|
193
216
|
this.schemas.params = schema as unknown as T;
|
|
194
217
|
// @ts-ignore
|
|
@@ -212,7 +235,9 @@ export class EndpointBuilder<
|
|
|
212
235
|
TSession,
|
|
213
236
|
TEventPublisher,
|
|
214
237
|
TEventPublisherServiceName,
|
|
215
|
-
TAuthorizers
|
|
238
|
+
TAuthorizers,
|
|
239
|
+
TAuditStorage,
|
|
240
|
+
TAuditStorageServiceName
|
|
216
241
|
> {
|
|
217
242
|
// Special case: 'none' explicitly marks endpoint as having no authorizer
|
|
218
243
|
if (name === 'none') {
|
|
@@ -246,7 +271,9 @@ export class EndpointBuilder<
|
|
|
246
271
|
TSession,
|
|
247
272
|
TEventPublisher,
|
|
248
273
|
TEventPublisherServiceName,
|
|
249
|
-
TAuthorizers
|
|
274
|
+
TAuthorizers,
|
|
275
|
+
TAuditStorage,
|
|
276
|
+
TAuditStorageServiceName
|
|
250
277
|
> {
|
|
251
278
|
this._services = uniqBy(
|
|
252
279
|
[...this._services, ...services],
|
|
@@ -263,7 +290,9 @@ export class EndpointBuilder<
|
|
|
263
290
|
TSession,
|
|
264
291
|
TEventPublisher,
|
|
265
292
|
TEventPublisherServiceName,
|
|
266
|
-
TAuthorizers
|
|
293
|
+
TAuthorizers,
|
|
294
|
+
TAuditStorage,
|
|
295
|
+
TAuditStorageServiceName
|
|
267
296
|
>;
|
|
268
297
|
}
|
|
269
298
|
|
|
@@ -279,7 +308,9 @@ export class EndpointBuilder<
|
|
|
279
308
|
TSession,
|
|
280
309
|
TEventPublisher,
|
|
281
310
|
TEventPublisherServiceName,
|
|
282
|
-
TAuthorizers
|
|
311
|
+
TAuthorizers,
|
|
312
|
+
TAuditStorage,
|
|
313
|
+
TAuditStorageServiceName
|
|
283
314
|
> {
|
|
284
315
|
this._logger = logger as unknown as TLogger;
|
|
285
316
|
|
|
@@ -293,7 +324,9 @@ export class EndpointBuilder<
|
|
|
293
324
|
TSession,
|
|
294
325
|
TEventPublisher,
|
|
295
326
|
TEventPublisherServiceName,
|
|
296
|
-
TAuthorizers
|
|
327
|
+
TAuthorizers,
|
|
328
|
+
TAuditStorage,
|
|
329
|
+
TAuditStorageServiceName
|
|
297
330
|
>;
|
|
298
331
|
}
|
|
299
332
|
|
|
@@ -309,7 +342,9 @@ export class EndpointBuilder<
|
|
|
309
342
|
TSession,
|
|
310
343
|
TEventPublisher,
|
|
311
344
|
TEventPublisherServiceName,
|
|
312
|
-
TAuthorizers
|
|
345
|
+
TAuthorizers,
|
|
346
|
+
TAuditStorage,
|
|
347
|
+
TAuditStorageServiceName
|
|
313
348
|
> {
|
|
314
349
|
this.outputSchema = schema as unknown as OutSchema;
|
|
315
350
|
|
|
@@ -323,7 +358,129 @@ export class EndpointBuilder<
|
|
|
323
358
|
TSession,
|
|
324
359
|
TEventPublisher,
|
|
325
360
|
TEventPublisherServiceName,
|
|
326
|
-
TAuthorizers
|
|
361
|
+
TAuthorizers,
|
|
362
|
+
TAuditStorage,
|
|
363
|
+
TAuditStorageServiceName
|
|
364
|
+
>;
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
/**
|
|
368
|
+
* Set the auditor storage service for this endpoint.
|
|
369
|
+
* This enables audit functionality and makes `auditor` available in the handler context.
|
|
370
|
+
*/
|
|
371
|
+
auditor<T extends AuditStorage, TName extends string>(
|
|
372
|
+
storage: Service<TName, T>,
|
|
373
|
+
): EndpointBuilder<
|
|
374
|
+
TRoute,
|
|
375
|
+
TMethod,
|
|
376
|
+
TInput,
|
|
377
|
+
TServices,
|
|
378
|
+
TLogger,
|
|
379
|
+
OutSchema,
|
|
380
|
+
TSession,
|
|
381
|
+
TEventPublisher,
|
|
382
|
+
TEventPublisherServiceName,
|
|
383
|
+
TAuthorizers,
|
|
384
|
+
T,
|
|
385
|
+
TName,
|
|
386
|
+
TAuditAction
|
|
387
|
+
> {
|
|
388
|
+
this._auditorStorage = storage as unknown as Service<
|
|
389
|
+
TAuditStorageServiceName,
|
|
390
|
+
TAuditStorage
|
|
391
|
+
>;
|
|
392
|
+
|
|
393
|
+
return this as unknown as EndpointBuilder<
|
|
394
|
+
TRoute,
|
|
395
|
+
TMethod,
|
|
396
|
+
TInput,
|
|
397
|
+
TServices,
|
|
398
|
+
TLogger,
|
|
399
|
+
OutSchema,
|
|
400
|
+
TSession,
|
|
401
|
+
TEventPublisher,
|
|
402
|
+
TEventPublisherServiceName,
|
|
403
|
+
TAuthorizers,
|
|
404
|
+
T,
|
|
405
|
+
TName,
|
|
406
|
+
TAuditAction
|
|
407
|
+
>;
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
/**
|
|
411
|
+
* Set the actor extractor function for audit records.
|
|
412
|
+
* The actor is extracted from the request context and attached to all audits.
|
|
413
|
+
*/
|
|
414
|
+
actor(
|
|
415
|
+
extractor: ActorExtractor<TServices, TSession, TLogger>,
|
|
416
|
+
): EndpointBuilder<
|
|
417
|
+
TRoute,
|
|
418
|
+
TMethod,
|
|
419
|
+
TInput,
|
|
420
|
+
TServices,
|
|
421
|
+
TLogger,
|
|
422
|
+
OutSchema,
|
|
423
|
+
TSession,
|
|
424
|
+
TEventPublisher,
|
|
425
|
+
TEventPublisherServiceName,
|
|
426
|
+
TAuthorizers,
|
|
427
|
+
TAuditStorage,
|
|
428
|
+
TAuditStorageServiceName,
|
|
429
|
+
TAuditAction
|
|
430
|
+
> {
|
|
431
|
+
this._actorExtractor = extractor;
|
|
432
|
+
return this;
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
/**
|
|
436
|
+
* Add declarative audit definitions that are processed after the handler executes.
|
|
437
|
+
* Similar to `.event()` for events, but for audits.
|
|
438
|
+
*
|
|
439
|
+
* @example
|
|
440
|
+
* ```typescript
|
|
441
|
+
* .audit<AppAuditAction>([
|
|
442
|
+
* {
|
|
443
|
+
* type: 'user.created',
|
|
444
|
+
* payload: (response) => ({ userId: response.id, email: response.email }),
|
|
445
|
+
* when: (response) => response.active,
|
|
446
|
+
* entityId: (response) => response.id,
|
|
447
|
+
* table: 'users',
|
|
448
|
+
* },
|
|
449
|
+
* ])
|
|
450
|
+
* ```
|
|
451
|
+
*/
|
|
452
|
+
audit<T extends AuditableAction<string, unknown>>(
|
|
453
|
+
audits: MappedAudit<T, OutSchema>[],
|
|
454
|
+
): EndpointBuilder<
|
|
455
|
+
TRoute,
|
|
456
|
+
TMethod,
|
|
457
|
+
TInput,
|
|
458
|
+
TServices,
|
|
459
|
+
TLogger,
|
|
460
|
+
OutSchema,
|
|
461
|
+
TSession,
|
|
462
|
+
TEventPublisher,
|
|
463
|
+
TEventPublisherServiceName,
|
|
464
|
+
TAuthorizers,
|
|
465
|
+
TAuditStorage,
|
|
466
|
+
TAuditStorageServiceName,
|
|
467
|
+
T
|
|
468
|
+
> {
|
|
469
|
+
this._audits = audits as unknown as MappedAudit<TAuditAction, OutSchema>[];
|
|
470
|
+
return this as unknown as EndpointBuilder<
|
|
471
|
+
TRoute,
|
|
472
|
+
TMethod,
|
|
473
|
+
TInput,
|
|
474
|
+
TServices,
|
|
475
|
+
TLogger,
|
|
476
|
+
OutSchema,
|
|
477
|
+
TSession,
|
|
478
|
+
TEventPublisher,
|
|
479
|
+
TEventPublisherServiceName,
|
|
480
|
+
TAuthorizers,
|
|
481
|
+
TAuditStorage,
|
|
482
|
+
TAuditStorageServiceName,
|
|
483
|
+
T
|
|
327
484
|
>;
|
|
328
485
|
}
|
|
329
486
|
|
|
@@ -344,7 +501,11 @@ export class EndpointBuilder<
|
|
|
344
501
|
TServices,
|
|
345
502
|
TLogger,
|
|
346
503
|
TSession,
|
|
347
|
-
TEventPublisher
|
|
504
|
+
TEventPublisher,
|
|
505
|
+
TEventPublisherServiceName,
|
|
506
|
+
TAuditStorage,
|
|
507
|
+
TAuditStorageServiceName,
|
|
508
|
+
TAuditAction
|
|
348
509
|
> {
|
|
349
510
|
// Find authorizer metadata if name is set
|
|
350
511
|
const authorizer = this._authorizerName
|
|
@@ -370,6 +531,9 @@ export class EndpointBuilder<
|
|
|
370
531
|
publisherService: this._publisher,
|
|
371
532
|
events: this._events,
|
|
372
533
|
authorizer,
|
|
534
|
+
auditorStorageService: this._auditorStorage,
|
|
535
|
+
actorExtractor: this._actorExtractor,
|
|
536
|
+
audits: this._audits,
|
|
373
537
|
});
|
|
374
538
|
}
|
|
375
539
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { AuditableAction, AuditStorage } from '@geekmidas/audit';
|
|
1
2
|
import type { EnvironmentParser } from '@geekmidas/envkit';
|
|
2
3
|
import type { EventPublisher } from '@geekmidas/events';
|
|
3
4
|
import type { Logger } from '@geekmidas/logger';
|
|
@@ -19,6 +20,7 @@ import { getEndpointsFromRoutes } from './helpers';
|
|
|
19
20
|
import { parseHonoQuery } from './parseHonoQuery';
|
|
20
21
|
|
|
21
22
|
import { wrapError } from '@geekmidas/errors';
|
|
23
|
+
import type { InferStandardSchema } from '@geekmidas/schema';
|
|
22
24
|
import {
|
|
23
25
|
type Service,
|
|
24
26
|
ServiceDiscovery,
|
|
@@ -26,6 +28,11 @@ import {
|
|
|
26
28
|
} from '@geekmidas/services';
|
|
27
29
|
import type { ContentfulStatusCode } from 'hono/utils/http-status';
|
|
28
30
|
import { publishConstructEvents } from '../publisher';
|
|
31
|
+
import type { MappedAudit } from './audit';
|
|
32
|
+
import {
|
|
33
|
+
createAuditContext,
|
|
34
|
+
executeWithAuditTransaction,
|
|
35
|
+
} from './processAudits';
|
|
29
36
|
|
|
30
37
|
export interface HonoEndpointOptions {
|
|
31
38
|
/**
|
|
@@ -53,6 +60,13 @@ export class HonoEndpoint<
|
|
|
53
60
|
TLogger extends Logger = Logger,
|
|
54
61
|
TSession = unknown,
|
|
55
62
|
TEventPublisher extends EventPublisher<any> | undefined = undefined,
|
|
63
|
+
TEventPublisherServiceName extends string = string,
|
|
64
|
+
TAuditStorage extends AuditStorage | undefined = undefined,
|
|
65
|
+
TAuditStorageServiceName extends string = string,
|
|
66
|
+
TAuditAction extends AuditableAction<string, unknown> = AuditableAction<
|
|
67
|
+
string,
|
|
68
|
+
unknown
|
|
69
|
+
>,
|
|
56
70
|
> {
|
|
57
71
|
constructor(
|
|
58
72
|
private readonly endpoint: Endpoint<
|
|
@@ -63,7 +77,11 @@ export class HonoEndpoint<
|
|
|
63
77
|
TServices,
|
|
64
78
|
TLogger,
|
|
65
79
|
TSession,
|
|
66
|
-
TEventPublisher
|
|
80
|
+
TEventPublisher,
|
|
81
|
+
TEventPublisherServiceName,
|
|
82
|
+
TAuditStorage,
|
|
83
|
+
TAuditStorageServiceName,
|
|
84
|
+
TAuditAction
|
|
67
85
|
>,
|
|
68
86
|
) {}
|
|
69
87
|
|
|
@@ -111,11 +129,12 @@ export class HonoEndpoint<
|
|
|
111
129
|
any
|
|
112
130
|
>;
|
|
113
131
|
// @ts-ignore
|
|
114
|
-
const response = c.get('__response')
|
|
132
|
+
const response = c.get('__response');
|
|
115
133
|
// @ts-ignore
|
|
116
134
|
const logger = c.get('__logger') as Logger;
|
|
117
135
|
|
|
118
136
|
if (Endpoint.isSuccessStatus(c.res.status) && endpoint) {
|
|
137
|
+
// Process events (audits are handled in the handler with transaction support)
|
|
119
138
|
await publishConstructEvents<any, any>(
|
|
120
139
|
endpoint,
|
|
121
140
|
response,
|
|
@@ -215,6 +234,13 @@ export class HonoEndpoint<
|
|
|
215
234
|
TLogger extends Logger = Logger,
|
|
216
235
|
TSession = unknown,
|
|
217
236
|
TEventPublisher extends EventPublisher<any> | undefined = undefined,
|
|
237
|
+
TEventPublisherServiceName extends string = string,
|
|
238
|
+
TAuditStorage extends AuditStorage | undefined = undefined,
|
|
239
|
+
TAuditStorageServiceName extends string = string,
|
|
240
|
+
TAuditAction extends AuditableAction<string, unknown> = AuditableAction<
|
|
241
|
+
string,
|
|
242
|
+
unknown
|
|
243
|
+
>,
|
|
218
244
|
>(
|
|
219
245
|
endpoint: Endpoint<
|
|
220
246
|
TRoute,
|
|
@@ -224,7 +250,11 @@ export class HonoEndpoint<
|
|
|
224
250
|
TServices,
|
|
225
251
|
TLogger,
|
|
226
252
|
TSession,
|
|
227
|
-
TEventPublisher
|
|
253
|
+
TEventPublisher,
|
|
254
|
+
TEventPublisherServiceName,
|
|
255
|
+
TAuditStorage,
|
|
256
|
+
TAuditStorageServiceName,
|
|
257
|
+
TAuditAction
|
|
228
258
|
>,
|
|
229
259
|
serviceDiscovery: ServiceDiscovery<ServiceRecord<TServices>, TLogger>,
|
|
230
260
|
app: Hono,
|
|
@@ -304,41 +334,91 @@ export class HonoEndpoint<
|
|
|
304
334
|
}
|
|
305
335
|
}
|
|
306
336
|
|
|
307
|
-
|
|
308
|
-
const
|
|
337
|
+
// Create audit context if audit storage is configured
|
|
338
|
+
const auditContext = await createAuditContext(
|
|
339
|
+
endpoint,
|
|
340
|
+
serviceDiscovery,
|
|
341
|
+
logger,
|
|
309
342
|
{
|
|
310
|
-
services,
|
|
311
|
-
logger,
|
|
312
|
-
body: c.req.valid('json'),
|
|
313
|
-
query: c.req.valid('query'),
|
|
314
|
-
params: c.req.valid('param'),
|
|
315
343
|
session,
|
|
316
|
-
header
|
|
317
|
-
cookie
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
TServices,
|
|
321
|
-
TLogger,
|
|
322
|
-
TSession
|
|
323
|
-
>,
|
|
324
|
-
responseBuilder,
|
|
344
|
+
header,
|
|
345
|
+
cookie,
|
|
346
|
+
services: services as Record<string, unknown>,
|
|
347
|
+
},
|
|
325
348
|
);
|
|
326
349
|
|
|
327
|
-
//
|
|
350
|
+
// Warn if declarative audits are configured but no audit storage
|
|
351
|
+
const audits = endpoint.audits as MappedAudit<
|
|
352
|
+
TAuditAction,
|
|
353
|
+
TOutSchema
|
|
354
|
+
>[];
|
|
355
|
+
if (!auditContext && audits?.length) {
|
|
356
|
+
logger.warn('No auditor storage service available');
|
|
357
|
+
}
|
|
328
358
|
|
|
329
|
-
//
|
|
359
|
+
// Execute handler with automatic audit transaction support
|
|
360
|
+
const result = await executeWithAuditTransaction(
|
|
361
|
+
auditContext,
|
|
362
|
+
async (auditor) => {
|
|
363
|
+
const responseBuilder = new ResponseBuilder();
|
|
364
|
+
const response = await endpoint.handler(
|
|
365
|
+
{
|
|
366
|
+
services,
|
|
367
|
+
logger,
|
|
368
|
+
body: c.req.valid('json'),
|
|
369
|
+
query: c.req.valid('query'),
|
|
370
|
+
params: c.req.valid('param'),
|
|
371
|
+
session,
|
|
372
|
+
header,
|
|
373
|
+
cookie,
|
|
374
|
+
auditor,
|
|
375
|
+
} as unknown as EndpointContext<
|
|
376
|
+
TInput,
|
|
377
|
+
TServices,
|
|
378
|
+
TLogger,
|
|
379
|
+
TSession
|
|
380
|
+
>,
|
|
381
|
+
responseBuilder,
|
|
382
|
+
);
|
|
383
|
+
|
|
384
|
+
// Check if response has metadata
|
|
385
|
+
let data = response;
|
|
386
|
+
let metadata = responseBuilder.getMetadata();
|
|
387
|
+
|
|
388
|
+
if (Endpoint.hasMetadata(response)) {
|
|
389
|
+
data = response.data;
|
|
390
|
+
metadata = response.metadata;
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
const output = endpoint.outputSchema
|
|
394
|
+
? await endpoint.parseOutput(data)
|
|
395
|
+
: undefined;
|
|
396
|
+
|
|
397
|
+
return { output, metadata, responseBuilder };
|
|
398
|
+
},
|
|
399
|
+
// Process declarative audits after handler (inside transaction)
|
|
400
|
+
async (result, auditor) => {
|
|
401
|
+
if (!audits?.length) return;
|
|
402
|
+
|
|
403
|
+
for (const audit of audits) {
|
|
404
|
+
if (audit.when && !audit.when(result.output as any)) {
|
|
405
|
+
continue;
|
|
406
|
+
}
|
|
407
|
+
const payload = audit.payload(result.output as any);
|
|
408
|
+
const entityId = audit.entityId?.(result.output as any);
|
|
409
|
+
auditor.audit(audit.type as any, payload as any, {
|
|
410
|
+
table: audit.table,
|
|
411
|
+
entityId,
|
|
412
|
+
});
|
|
413
|
+
}
|
|
414
|
+
},
|
|
415
|
+
);
|
|
416
|
+
|
|
417
|
+
const { output, metadata } = result;
|
|
330
418
|
|
|
331
419
|
try {
|
|
332
|
-
// Check if response has metadata
|
|
333
|
-
let data = response;
|
|
334
|
-
let metadata = responseBuilder.getMetadata();
|
|
335
420
|
let status = endpoint.status as ContentfulStatusCode;
|
|
336
421
|
|
|
337
|
-
if (Endpoint.hasMetadata(response)) {
|
|
338
|
-
data = response.data;
|
|
339
|
-
metadata = response.metadata;
|
|
340
|
-
}
|
|
341
|
-
|
|
342
422
|
// Apply response metadata
|
|
343
423
|
if (metadata.status) {
|
|
344
424
|
status = metadata.status as ContentfulStatusCode;
|
|
@@ -356,21 +436,22 @@ export class HonoEndpoint<
|
|
|
356
436
|
}
|
|
357
437
|
}
|
|
358
438
|
|
|
359
|
-
const output = endpoint.outputSchema
|
|
360
|
-
? await endpoint.parseOutput(data)
|
|
361
|
-
: ({} as any);
|
|
362
439
|
// @ts-ignore
|
|
363
440
|
c.set('__response', output);
|
|
364
441
|
// @ts-ignore
|
|
365
442
|
c.set('__endpoint', endpoint);
|
|
366
443
|
// @ts-ignore
|
|
367
444
|
c.set('__logger', logger);
|
|
445
|
+
// @ts-ignore
|
|
446
|
+
c.set('__session', session);
|
|
447
|
+
// @ts-ignore
|
|
448
|
+
c.set('__services', services);
|
|
368
449
|
|
|
369
450
|
if (HonoEndpoint.isDev) {
|
|
370
451
|
logger.info({ status, body: output }, 'Outgoing response');
|
|
371
452
|
}
|
|
372
453
|
|
|
373
|
-
return c.json(output, status);
|
|
454
|
+
return c.json(output ?? {}, status);
|
|
374
455
|
} catch (validationError: any) {
|
|
375
456
|
logger.error(validationError, 'Output validation failed');
|
|
376
457
|
const error = wrapError(
|