@geekmidas/constructs 0.3.2 → 0.6.0
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-C54a1doJ.mjs → AWSLambdaFunction-BMTaCrG9.mjs} +6 -6
- package/dist/AWSLambdaFunction-BMTaCrG9.mjs.map +1 -0
- package/dist/{AWSLambdaFunction-BdebRMUh.d.mts → AWSLambdaFunction-BfLF5vNa.d.cts} +6 -6
- package/dist/AWSLambdaFunction-BfLF5vNa.d.cts.map +1 -0
- package/dist/{AWSLambdaFunction-EPGY4s7i.cjs → AWSLambdaFunction-C1gRqLO7.cjs} +6 -6
- package/dist/AWSLambdaFunction-C1gRqLO7.cjs.map +1 -0
- package/dist/{AWSLambdaFunction-D0tEOTXQ.d.cts → AWSLambdaFunction-K94K8JU2.d.mts} +6 -6
- package/dist/AWSLambdaFunction-K94K8JU2.d.mts.map +1 -0
- package/dist/{AWSLambdaSubscriberAdaptor-Dx-Ks1Jp.d.cts → AWSLambdaSubscriberAdaptor-B2Gk3fgx.d.cts} +2 -2
- package/dist/AWSLambdaSubscriberAdaptor-B2Gk3fgx.d.cts.map +1 -0
- package/dist/{AWSLambdaSubscriberAdaptor-BLfO612H.mjs → AWSLambdaSubscriberAdaptor-BD3FwGUb.mjs} +3 -3
- package/dist/AWSLambdaSubscriberAdaptor-BD3FwGUb.mjs.map +1 -0
- package/dist/{AWSLambdaSubscriberAdaptor-BNcYYZ-P.cjs → AWSLambdaSubscriberAdaptor-DQDnt1Xk.cjs} +3 -3
- package/dist/AWSLambdaSubscriberAdaptor-DQDnt1Xk.cjs.map +1 -0
- package/dist/{AWSLambdaSubscriberAdaptor-DrFAvHOp.d.mts → AWSLambdaSubscriberAdaptor-QuMFwltJ.d.mts} +2 -2
- package/dist/AWSLambdaSubscriberAdaptor-QuMFwltJ.d.mts.map +1 -0
- package/dist/{AmazonApiGatewayEndpointAdaptor-BT9JXihC.mjs → AmazonApiGatewayEndpointAdaptor-B4gLJ2dx.mjs} +56 -14
- package/dist/AmazonApiGatewayEndpointAdaptor-B4gLJ2dx.mjs.map +1 -0
- package/dist/{AmazonApiGatewayEndpointAdaptor-DLqnYQ4E.d.cts → AmazonApiGatewayEndpointAdaptor-C987ZCsM.d.cts} +51 -5
- package/dist/AmazonApiGatewayEndpointAdaptor-C987ZCsM.d.cts.map +1 -0
- package/dist/{AmazonApiGatewayEndpointAdaptor-DNFvvdmW.cjs → AmazonApiGatewayEndpointAdaptor-CwRKMRr_.cjs} +55 -13
- package/dist/AmazonApiGatewayEndpointAdaptor-CwRKMRr_.cjs.map +1 -0
- package/dist/{AmazonApiGatewayEndpointAdaptor-qlKXuZxy.d.mts → AmazonApiGatewayEndpointAdaptor-DpPfO6Vj.d.mts} +52 -6
- package/dist/AmazonApiGatewayEndpointAdaptor-DpPfO6Vj.d.mts.map +1 -0
- package/dist/{AmazonApiGatewayV1EndpointAdaptor-Ccl8B8kG.cjs → AmazonApiGatewayV1EndpointAdaptor-BeZMu5DZ.cjs} +4 -4
- package/dist/AmazonApiGatewayV1EndpointAdaptor-BeZMu5DZ.cjs.map +1 -0
- package/dist/{AmazonApiGatewayV1EndpointAdaptor-MRUxs3Xi.d.mts → AmazonApiGatewayV1EndpointAdaptor-DI_5kdqw.d.mts} +5 -5
- package/dist/AmazonApiGatewayV1EndpointAdaptor-DI_5kdqw.d.mts.map +1 -0
- package/dist/{AmazonApiGatewayV1EndpointAdaptor-DyUaJIhB.d.cts → AmazonApiGatewayV1EndpointAdaptor-DkGMOpoB.d.cts} +4 -4
- package/dist/AmazonApiGatewayV1EndpointAdaptor-DkGMOpoB.d.cts.map +1 -0
- package/dist/{AmazonApiGatewayV1EndpointAdaptor-CShQI8Gk.mjs → AmazonApiGatewayV1EndpointAdaptor-VccB6FKp.mjs} +4 -4
- package/dist/AmazonApiGatewayV1EndpointAdaptor-VccB6FKp.mjs.map +1 -0
- package/dist/{AmazonApiGatewayV2EndpointAdaptor-M1-w0U5R.d.cts → AmazonApiGatewayV2EndpointAdaptor-BtBnMJS_.d.cts} +4 -6
- package/dist/AmazonApiGatewayV2EndpointAdaptor-BtBnMJS_.d.cts.map +1 -0
- package/dist/{AmazonApiGatewayV2EndpointAdaptor-D8-0Aab4.cjs → AmazonApiGatewayV2EndpointAdaptor-BwsL9Gia.cjs} +4 -4
- package/dist/AmazonApiGatewayV2EndpointAdaptor-BwsL9Gia.cjs.map +1 -0
- package/dist/{AmazonApiGatewayV2EndpointAdaptor-lCRzGE4q.mjs → AmazonApiGatewayV2EndpointAdaptor-CljxmUfz.mjs} +4 -4
- package/dist/AmazonApiGatewayV2EndpointAdaptor-CljxmUfz.mjs.map +1 -0
- package/dist/{AmazonApiGatewayV2EndpointAdaptor-fuLM6M9k.d.mts → AmazonApiGatewayV2EndpointAdaptor-DnCoqlvw.d.mts} +5 -7
- package/dist/AmazonApiGatewayV2EndpointAdaptor-DnCoqlvw.d.mts.map +1 -0
- package/dist/{Authorizer-C0ge_tc8.cjs → Authorizer-BXxBee2P.cjs} +1 -1
- package/dist/Authorizer-BXxBee2P.cjs.map +1 -0
- package/dist/{Authorizer-r9U3y_ms.mjs → Authorizer-BgjU8-z6.mjs} +1 -1
- package/dist/Authorizer-BgjU8-z6.mjs.map +1 -0
- package/dist/{Authorizer-gWxYsGEp.d.mts → Authorizer-DCcYOx3h.d.mts} +1 -1
- package/dist/Authorizer-DCcYOx3h.d.mts.map +1 -0
- package/dist/{Authorizer-B-btowNd.d.cts → Authorizer-DWtwC8we.d.cts} +1 -1
- package/dist/Authorizer-DWtwC8we.d.cts.map +1 -0
- package/dist/{BaseFunctionBuilder-BAtutR6q.d.cts → BaseFunctionBuilder-BqZCqIeU.d.mts} +3 -3
- package/dist/BaseFunctionBuilder-BqZCqIeU.d.mts.map +1 -0
- package/dist/{BaseFunctionBuilder-DRY419e7.d.mts → BaseFunctionBuilder-CcK691ni.d.cts} +3 -3
- package/dist/BaseFunctionBuilder-CcK691ni.d.cts.map +1 -0
- package/dist/{BaseFunctionBuilder-Czi1Jwza.mjs → BaseFunctionBuilder-Dsqe6pnn.mjs} +2 -2
- package/dist/BaseFunctionBuilder-Dsqe6pnn.mjs.map +1 -0
- package/dist/{BaseFunctionBuilder-MYG3C9ug.cjs → BaseFunctionBuilder-Z0XwrKB5.cjs} +2 -2
- package/dist/BaseFunctionBuilder-Z0XwrKB5.cjs.map +1 -0
- package/dist/Construct-BNDLJJfD.mjs +150 -0
- package/dist/Construct-BNDLJJfD.mjs.map +1 -0
- package/dist/{Construct-Ba5cMxib.cjs → Construct-CPrCF8NK.cjs} +93 -9
- package/dist/Construct-CPrCF8NK.cjs.map +1 -0
- package/dist/{Construct-C4rPE67v.d.cts → Construct-Dl0l2d8d.d.cts} +30 -4
- package/dist/Construct-Dl0l2d8d.d.cts.map +1 -0
- package/dist/{Construct-XrijZFFh.d.mts → Construct-E8QPyHh4.d.mts} +30 -4
- package/dist/Construct-E8QPyHh4.d.mts.map +1 -0
- package/dist/Construct.cjs +4 -2
- package/dist/Construct.d.cts +2 -2
- package/dist/Construct.d.mts +2 -2
- package/dist/Construct.mjs +2 -2
- package/dist/{Cron-CGF4YAfM.cjs → Cron-BmPNTLla.cjs} +3 -3
- package/dist/Cron-BmPNTLla.cjs.map +1 -0
- package/dist/{Cron-BxhGs5up.mjs → Cron-BpJONaFv.mjs} +3 -3
- package/dist/Cron-BpJONaFv.mjs.map +1 -0
- package/dist/{Cron-bDLcTvV5.d.cts → Cron-CnmLLh3E.d.mts} +3 -3
- package/dist/Cron-CnmLLh3E.d.mts.map +1 -0
- package/dist/{Cron-cdjlSKNp.d.mts → Cron-DufAeHry.d.cts} +3 -3
- package/dist/Cron-DufAeHry.d.cts.map +1 -0
- package/dist/{CronBuilder-d2jh-IB2.mjs → CronBuilder-02HSIHJr.mjs} +4 -4
- package/dist/CronBuilder-02HSIHJr.mjs.map +1 -0
- package/dist/{CronBuilder-CcxKRtVP.cjs → CronBuilder-DC2zUS8a.cjs} +4 -4
- package/dist/CronBuilder-DC2zUS8a.cjs.map +1 -0
- package/dist/{CronBuilder-BC4m5-p1.d.mts → CronBuilder-anUSbMxb.d.mts} +4 -4
- package/dist/CronBuilder-anUSbMxb.d.mts.map +1 -0
- package/dist/{CronBuilder-DKVXyE0Q.d.cts → CronBuilder-fyqf_X8n.d.cts} +4 -4
- package/dist/CronBuilder-fyqf_X8n.d.cts.map +1 -0
- package/dist/{Endpoint-BVGZXFyV.cjs → Endpoint-BCWVbi8l.cjs} +6 -6
- package/dist/Endpoint-BCWVbi8l.cjs.map +1 -0
- package/dist/{Endpoint-BPv9_-m_.d.cts → Endpoint-BlcHiGNx.d.cts} +3 -3
- package/dist/Endpoint-BlcHiGNx.d.cts.map +1 -0
- package/dist/{Endpoint-BdwG75G_.d.mts → Endpoint-DEHuy46S.d.mts} +4 -4
- package/dist/Endpoint-DEHuy46S.d.mts.map +1 -0
- package/dist/{Endpoint-CuOEswxJ.mjs → Endpoint-ygxv2Ia6.mjs} +6 -6
- package/dist/Endpoint-ygxv2Ia6.mjs.map +1 -0
- package/dist/{EndpointBuilder-DIy_m1bu.d.cts → EndpointBuilder-DPLAUHqg.d.cts} +4 -4
- package/dist/EndpointBuilder-DPLAUHqg.d.cts.map +1 -0
- package/dist/{EndpointBuilder-B3az942t.d.mts → EndpointBuilder-DaeCeneF.d.mts} +5 -5
- package/dist/EndpointBuilder-DaeCeneF.d.mts.map +1 -0
- package/dist/{EndpointBuilder-Cgj1P_ra.cjs → EndpointBuilder-J5D67Y6a.cjs} +6 -6
- package/dist/EndpointBuilder-J5D67Y6a.cjs.map +1 -0
- package/dist/{EndpointBuilder-DnCB1h1j.mjs → EndpointBuilder-tn4zqoyw.mjs} +6 -6
- package/dist/EndpointBuilder-tn4zqoyw.mjs.map +1 -0
- package/dist/{EndpointFactory-CbdxPCIH.mjs → EndpointFactory-CIUZTTAF.mjs} +7 -7
- package/dist/EndpointFactory-CIUZTTAF.mjs.map +1 -0
- package/dist/{EndpointFactory-CyPbm3AD.d.cts → EndpointFactory-CiKcb5PX.d.cts} +4 -4
- package/dist/EndpointFactory-CiKcb5PX.d.cts.map +1 -0
- package/dist/{EndpointFactory-C-0nE6Jg.d.mts → EndpointFactory-DufM0t2z.d.mts} +4 -4
- package/dist/EndpointFactory-DufM0t2z.d.mts.map +1 -0
- package/dist/{EndpointFactory-CYj6BYok.cjs → EndpointFactory-d5uwWFkK.cjs} +7 -7
- package/dist/EndpointFactory-d5uwWFkK.cjs.map +1 -0
- package/dist/{Function-DDZb1525.cjs → Function-2qWSZqYB.cjs} +3 -3
- package/dist/Function-2qWSZqYB.cjs.map +1 -0
- package/dist/{Function-Cf7f_kCz.d.cts → Function-CbEohg13.d.cts} +3 -3
- package/dist/Function-CbEohg13.d.cts.map +1 -0
- package/dist/{Function-BVHqIDp9.mjs → Function-CdF1HmFu.mjs} +3 -3
- package/dist/Function-CdF1HmFu.mjs.map +1 -0
- package/dist/{Function-DN2G6OT5.d.mts → Function-EjIOLxlh.d.mts} +3 -3
- package/dist/Function-EjIOLxlh.d.mts.map +1 -0
- package/dist/{FunctionBuilder-DswJ-9sD.cjs → FunctionBuilder-B-pbgm09.cjs} +4 -4
- package/dist/FunctionBuilder-B-pbgm09.cjs.map +1 -0
- package/dist/{FunctionBuilder-CJBzzXL3.d.cts → FunctionBuilder-CX3ooNdq.d.cts} +4 -4
- package/dist/FunctionBuilder-CX3ooNdq.d.cts.map +1 -0
- package/dist/{FunctionBuilder-Cxx8D2na.d.mts → FunctionBuilder-D11ytDyy.d.mts} +4 -4
- package/dist/FunctionBuilder-D11ytDyy.d.mts.map +1 -0
- package/dist/{FunctionBuilder-CrDYgfiI.mjs → FunctionBuilder-DaWVthAJ.mjs} +4 -4
- package/dist/FunctionBuilder-DaWVthAJ.mjs.map +1 -0
- package/dist/{FunctionExecutionWrapper-DF260Aaj.d.mts → FunctionExecutionWrapper-BJcRjH9Z.d.cts} +5 -5
- package/dist/FunctionExecutionWrapper-BJcRjH9Z.d.cts.map +1 -0
- package/dist/{FunctionExecutionWrapper-BYI2bGTL.cjs → FunctionExecutionWrapper-C6ChBNHs.cjs} +3 -3
- package/dist/FunctionExecutionWrapper-C6ChBNHs.cjs.map +1 -0
- package/dist/{FunctionExecutionWrapper-Qy8bmgFR.d.cts → FunctionExecutionWrapper-D3RNjGIR.d.mts} +5 -5
- package/dist/FunctionExecutionWrapper-D3RNjGIR.d.mts.map +1 -0
- package/dist/{FunctionExecutionWrapper-CLDh7Z2_.mjs → FunctionExecutionWrapper-Dj3pmXaN.mjs} +3 -3
- package/dist/FunctionExecutionWrapper-Dj3pmXaN.mjs.map +1 -0
- package/dist/{HonoEndpointAdaptor-BaPlUhz0.d.mts → HonoEndpointAdaptor-CKP6nrG2.d.mts} +11 -6
- package/dist/HonoEndpointAdaptor-CKP6nrG2.d.mts.map +1 -0
- package/dist/HonoEndpointAdaptor-Cc8Rnp9G.mjs +251 -0
- package/dist/HonoEndpointAdaptor-Cc8Rnp9G.mjs.map +1 -0
- package/dist/{HonoEndpointAdaptor-YcRHYALH.d.cts → HonoEndpointAdaptor-hrrvyfw9.d.cts} +10 -5
- package/dist/HonoEndpointAdaptor-hrrvyfw9.d.cts.map +1 -0
- package/dist/HonoEndpointAdaptor-xGnDZa3a.cjs +257 -0
- package/dist/HonoEndpointAdaptor-xGnDZa3a.cjs.map +1 -0
- package/dist/{Subscriber-COYMSevD.d.cts → Subscriber-BBcIOkhW.d.cts} +2 -2
- package/dist/Subscriber-BBcIOkhW.d.cts.map +1 -0
- package/dist/{Subscriber-ikctpU3I.d.mts → Subscriber-BpTAXvbM.d.mts} +2 -2
- package/dist/Subscriber-BpTAXvbM.d.mts.map +1 -0
- package/dist/{Subscriber-BiHjVXtM.cjs → Subscriber-CL4iYm01.cjs} +2 -2
- package/dist/Subscriber-CL4iYm01.cjs.map +1 -0
- package/dist/{Subscriber-BmPf9GFb.mjs → Subscriber-CZ8Smwd2.mjs} +2 -2
- package/dist/Subscriber-CZ8Smwd2.mjs.map +1 -0
- package/dist/{SubscriberBuilder-DJPEeYDJ.mjs → SubscriberBuilder-CxQg3TTm.mjs} +2 -2
- package/dist/SubscriberBuilder-CxQg3TTm.mjs.map +1 -0
- package/dist/{SubscriberBuilder-Cp1C-xtT.cjs → SubscriberBuilder-D0OS3hd7.cjs} +2 -2
- package/dist/SubscriberBuilder-D0OS3hd7.cjs.map +1 -0
- package/dist/{SubscriberBuilder-D_9zzllj.d.mts → SubscriberBuilder-D7IgufwB.d.cts} +3 -3
- package/dist/SubscriberBuilder-D7IgufwB.d.cts.map +1 -0
- package/dist/{SubscriberBuilder-ivHAGIVi.d.cts → SubscriberBuilder-DOFBbWLt.d.mts} +3 -3
- package/dist/SubscriberBuilder-DOFBbWLt.d.mts.map +1 -0
- package/dist/{TestEndpointAdaptor-DB7bREhS.d.mts → TestEndpointAdaptor-BnJusjf7.d.mts} +4 -4
- package/dist/TestEndpointAdaptor-BnJusjf7.d.mts.map +1 -0
- package/dist/TestEndpointAdaptor-CPL8ru6q.mjs +170 -0
- package/dist/TestEndpointAdaptor-CPL8ru6q.mjs.map +1 -0
- package/dist/TestEndpointAdaptor-Ca4K26_d.cjs +176 -0
- package/dist/TestEndpointAdaptor-Ca4K26_d.cjs.map +1 -0
- package/dist/{TestEndpointAdaptor-C10xBI--.d.cts → TestEndpointAdaptor-EPPTjntv.d.cts} +3 -3
- package/dist/TestEndpointAdaptor-EPPTjntv.d.cts.map +1 -0
- package/dist/adaptors/aws.cjs +12 -12
- package/dist/adaptors/aws.d.cts +15 -14
- package/dist/adaptors/aws.d.mts +16 -15
- package/dist/adaptors/aws.mjs +12 -12
- 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.cjs.map +1 -1
- package/dist/crons/index.d.cts +11 -11
- package/dist/crons/index.d.mts +7 -7
- package/dist/crons/index.mjs +7 -7
- package/dist/crons/index.mjs.map +1 -1
- package/dist/endpoints/AmazonApiGatewayEndpointAdaptor.cjs +7 -7
- package/dist/endpoints/AmazonApiGatewayEndpointAdaptor.d.cts +10 -9
- package/dist/endpoints/AmazonApiGatewayEndpointAdaptor.d.mts +11 -10
- package/dist/endpoints/AmazonApiGatewayEndpointAdaptor.mjs +7 -7
- package/dist/endpoints/AmazonApiGatewayV1EndpointAdaptor.cjs +8 -8
- package/dist/endpoints/AmazonApiGatewayV1EndpointAdaptor.d.cts +10 -9
- package/dist/endpoints/AmazonApiGatewayV1EndpointAdaptor.d.mts +11 -10
- package/dist/endpoints/AmazonApiGatewayV1EndpointAdaptor.mjs +8 -8
- package/dist/endpoints/AmazonApiGatewayV2EndpointAdaptor.cjs +8 -8
- package/dist/endpoints/AmazonApiGatewayV2EndpointAdaptor.d.cts +11 -10
- package/dist/endpoints/AmazonApiGatewayV2EndpointAdaptor.d.mts +12 -11
- package/dist/endpoints/AmazonApiGatewayV2EndpointAdaptor.mjs +8 -8
- package/dist/endpoints/Authorizer.cjs +1 -1
- package/dist/endpoints/Authorizer.d.cts +1 -1
- package/dist/endpoints/Authorizer.d.mts +1 -1
- package/dist/endpoints/Authorizer.mjs +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 +9 -9
- package/dist/endpoints/EndpointBuilder.d.cts +8 -8
- package/dist/endpoints/EndpointBuilder.d.mts +9 -9
- package/dist/endpoints/EndpointBuilder.mjs +9 -9
- package/dist/endpoints/EndpointFactory.cjs +10 -10
- package/dist/endpoints/EndpointFactory.d.cts +9 -9
- package/dist/endpoints/EndpointFactory.d.mts +10 -10
- package/dist/endpoints/EndpointFactory.mjs +10 -10
- 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.d.cts +7 -7
- package/dist/endpoints/audit.d.mts +8 -8
- package/dist/endpoints/helpers.cjs +7 -7
- package/dist/endpoints/helpers.d.cts +7 -7
- package/dist/endpoints/helpers.d.cts.map +1 -1
- package/dist/endpoints/helpers.d.mts +8 -8
- package/dist/endpoints/helpers.d.mts.map +1 -1
- package/dist/endpoints/helpers.mjs +7 -7
- package/dist/endpoints/index.cjs +20 -10
- package/dist/endpoints/index.cjs.map +1 -1
- package/dist/endpoints/index.d.cts +14 -12
- package/dist/endpoints/index.d.cts.map +1 -1
- package/dist/endpoints/index.d.mts +15 -13
- package/dist/endpoints/index.d.mts.map +1 -1
- package/dist/endpoints/index.mjs +13 -11
- package/dist/endpoints/index.mjs.map +1 -1
- package/dist/endpoints/lazyAccessors.cjs +10 -0
- package/dist/endpoints/lazyAccessors.d.cts +10 -0
- package/dist/endpoints/lazyAccessors.d.mts +10 -0
- package/dist/endpoints/lazyAccessors.mjs +3 -0
- package/dist/endpoints/parseHonoQuery.cjs +1 -1
- package/dist/endpoints/parseHonoQuery.mjs +1 -1
- package/dist/endpoints/parseQueryParams.d.cts.map +1 -1
- package/dist/endpoints/parseQueryParams.d.mts.map +1 -1
- package/dist/endpoints/processAudits.d.cts +7 -7
- package/dist/endpoints/processAudits.d.cts.map +1 -1
- package/dist/endpoints/processAudits.d.mts +8 -8
- package/dist/endpoints/processAudits.d.mts.map +1 -1
- package/dist/endpoints/rls.cjs +1 -1
- package/dist/endpoints/rls.d.cts +7 -7
- package/dist/endpoints/rls.d.mts +8 -8
- package/dist/endpoints/rls.mjs +1 -1
- 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 +7 -7
- package/dist/functions/TestFunctionAdaptor.cjs.map +1 -1
- package/dist/functions/TestFunctionAdaptor.d.cts +3 -3
- package/dist/functions/TestFunctionAdaptor.d.cts.map +1 -1
- package/dist/functions/TestFunctionAdaptor.d.mts +3 -3
- package/dist/functions/TestFunctionAdaptor.d.mts.map +1 -1
- package/dist/functions/TestFunctionAdaptor.mjs +7 -7
- package/dist/functions/TestFunctionAdaptor.mjs.map +1 -1
- 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-fTid0RMK.cjs → functions-CUEv5NC3.cjs} +2 -2
- package/dist/functions-CUEv5NC3.cjs.map +1 -0
- package/dist/functions-DOYBrb7n.mjs +8 -0
- package/dist/functions-DOYBrb7n.mjs.map +1 -0
- package/dist/{helpers-ByRTDO_m.mjs → helpers-Dl1eszfi.mjs} +2 -2
- package/dist/helpers-Dl1eszfi.mjs.map +1 -0
- package/dist/{helpers-BcP1tXAi.cjs → helpers-QMdfdnvU.cjs} +2 -2
- package/dist/helpers-QMdfdnvU.cjs.map +1 -0
- package/dist/{index-BWzGIj06.d.mts → index-BrGtMlpJ.d.cts} +2 -2
- package/dist/index-BrGtMlpJ.d.cts.map +1 -0
- package/dist/index-Dn4py3Db.d.mts +12 -0
- package/dist/index-Dn4py3Db.d.mts.map +1 -0
- package/dist/index.cjs +4 -2
- package/dist/index.d.cts +3 -2
- package/dist/index.d.mts +4 -3
- package/dist/index.mjs +2 -2
- package/dist/lazyAccessors-B-Jgkg2o.mjs +175 -0
- package/dist/lazyAccessors-B-Jgkg2o.mjs.map +1 -0
- package/dist/lazyAccessors-B8Hhras9.cjs +223 -0
- package/dist/lazyAccessors-B8Hhras9.cjs.map +1 -0
- package/dist/lazyAccessors-BFAj2-S4.d.mts +49 -0
- package/dist/lazyAccessors-BFAj2-S4.d.mts.map +1 -0
- package/dist/lazyAccessors-knaNZuTN.d.cts +49 -0
- package/dist/lazyAccessors-knaNZuTN.d.cts.map +1 -0
- package/dist/{parseHonoQuery-CZC5_97v.cjs → parseHonoQuery-D4MhxTRc.cjs} +1 -1
- package/dist/parseHonoQuery-D4MhxTRc.cjs.map +1 -0
- package/dist/{parseHonoQuery-DDgIkTO4.mjs → parseHonoQuery-DpK3sGPc.mjs} +1 -1
- package/dist/parseHonoQuery-DpK3sGPc.mjs.map +1 -0
- package/dist/parseQueryParams-BSNkjmZ9.cjs.map +1 -1
- package/dist/parseQueryParams-UMTRnRrW.mjs.map +1 -1
- package/dist/processAudits-CzHkPokQ.cjs.map +1 -1
- package/dist/processAudits-Dj8UGqcW.mjs.map +1 -1
- package/dist/publisher-BXG9YiRi.d.mts +16 -0
- package/dist/publisher-BXG9YiRi.d.mts.map +1 -0
- package/dist/publisher-Bw4770Hi.mjs.map +1 -1
- package/dist/publisher-D9ngDXg3.d.cts +16 -0
- package/dist/publisher-D9ngDXg3.d.cts.map +1 -0
- package/dist/publisher-lFQleddL.cjs.map +1 -1
- package/dist/publisher.d.cts +3 -16
- package/dist/publisher.d.mts +3 -16
- package/dist/{rls-CmJ7bRsz.cjs → rls-BrywnrQb.cjs} +1 -1
- package/dist/{rls-CmJ7bRsz.cjs.map → rls-BrywnrQb.cjs.map} +1 -1
- package/dist/{rls-Bf3FRwto.mjs → rls-C0cWOnk4.mjs} +1 -1
- package/dist/{rls-Bf3FRwto.mjs.map → rls-C0cWOnk4.mjs.map} +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.cjs.map +1 -1
- package/dist/subscribers/index.d.cts +5 -5
- package/dist/subscribers/index.d.cts.map +1 -1
- package/dist/subscribers/index.d.mts +5 -5
- package/dist/subscribers/index.d.mts.map +1 -1
- package/dist/subscribers/index.mjs +3 -3
- package/dist/subscribers/index.mjs.map +1 -1
- package/dist/telemetry-BTaiRqPo.d.cts +95 -0
- package/dist/telemetry-BTaiRqPo.d.cts.map +1 -0
- package/dist/telemetry-yAHf5yDs.d.mts +95 -0
- package/dist/telemetry-yAHf5yDs.d.mts.map +1 -0
- package/dist/telemetry.cjs +0 -0
- package/dist/telemetry.d.cts +2 -0
- package/dist/telemetry.d.mts +2 -0
- package/dist/telemetry.mjs +0 -0
- package/dist/types-B5H3piDg.d.cts.map +1 -1
- package/dist/{types-DdIlpxAd.d.mts → types-Dw-iLd3Y.d.mts} +1 -1
- package/dist/types-Dw-iLd3Y.d.mts.map +1 -0
- package/dist/types.d.mts +1 -1
- package/package.json +19 -18
- package/src/Construct.ts +189 -94
- package/src/__benchmarks__/build-time-optimization.bench.ts +274 -0
- package/src/__benchmarks__/endpoint.bench.ts +375 -375
- package/src/__benchmarks__/fixtures.ts +241 -0
- package/src/__benchmarks__/hono-adaptor.bench.ts +533 -0
- package/src/__benchmarks__/hono-server.bench.ts +206 -206
- package/src/__benchmarks__/response-builder.bench.ts +428 -0
- package/src/__benchmarks__/strategies/strategy-a-lazy-services.ts +319 -0
- package/src/__benchmarks__/strategies/strategy-c-middleware.ts +530 -0
- package/src/__benchmarks__/strategies/strategy-d-opt-in-events.ts +567 -0
- package/src/__tests__/Construct.environment.spec.ts +572 -351
- package/src/__tests__/publisher.setting.spec.ts +496 -499
- package/src/__tests__/publisher.spec.ts +440 -442
- package/src/crons/Cron.ts +117 -117
- package/src/crons/CronBuilder.ts +237 -238
- package/src/crons/__tests__/Cron.spec.ts +448 -448
- package/src/crons/__tests__/CronBuilder.state-isolation.spec.ts +214 -214
- package/src/crons/index.ts +4 -4
- package/src/endpoints/AmazonApiGatewayEndpointAdaptor.ts +571 -463
- package/src/endpoints/AmazonApiGatewayV1EndpointAdaptor.ts +86 -86
- package/src/endpoints/AmazonApiGatewayV2EndpointAdaptor.ts +85 -81
- package/src/endpoints/Authorizer.ts +100 -100
- package/src/endpoints/Endpoint.ts +921 -937
- package/src/endpoints/EndpointBuilder.ts +703 -703
- package/src/endpoints/EndpointFactory.ts +1054 -1056
- package/src/endpoints/HonoEndpointAdaptor.ts +621 -548
- package/src/endpoints/TestEndpointAdaptor.ts +372 -353
- package/src/endpoints/__tests__/AmazonApiGatewayV1EndpointAdaptor.audits.spec.ts +499 -0
- package/src/endpoints/__tests__/AmazonApiGatewayV1EndpointAdaptor.events.spec.ts +541 -542
- package/src/endpoints/__tests__/AmazonApiGatewayV1EndpointAdaptor.spec.ts +1172 -1174
- package/src/endpoints/__tests__/AmazonApiGatewayV2EndpointAdaptor.audits.spec.ts +599 -599
- package/src/endpoints/__tests__/AmazonApiGatewayV2EndpointAdaptor.events.spec.ts +710 -710
- package/src/endpoints/__tests__/AmazonApiGatewayV2EndpointAdaptor.factory-publisher.spec.ts +280 -280
- package/src/endpoints/__tests__/AmazonApiGatewayV2EndpointAdaptor.kysely-audit.integration.spec.ts +924 -730
- package/src/endpoints/__tests__/AmazonApiGatewayV2EndpointAdaptor.rls.spec.ts +307 -0
- package/src/endpoints/__tests__/AmazonApiGatewayV2EndpointAdaptor.spec.ts +408 -408
- package/src/endpoints/__tests__/Authorizer.spec.ts +286 -0
- package/src/endpoints/__tests__/Endpoint.cookies.spec.ts +162 -162
- package/src/endpoints/__tests__/Endpoint.headers.spec.ts +182 -182
- package/src/endpoints/__tests__/Endpoint.manifest.spec.ts +158 -159
- package/src/endpoints/__tests__/Endpoint.spec.ts +819 -822
- package/src/endpoints/__tests__/EndpointBuilder.audit.spec.ts +427 -427
- package/src/endpoints/__tests__/EndpointBuilder.spec.ts +478 -478
- package/src/endpoints/__tests__/EndpointFactory.authorizers.spec.ts +426 -426
- package/src/endpoints/__tests__/EndpointFactory.database-auditor.spec.ts +501 -501
- package/src/endpoints/__tests__/EndpointFactory.reference-audit.spec.ts +177 -177
- package/src/endpoints/__tests__/EndpointFactory.spec.ts +471 -471
- package/src/endpoints/__tests__/EndpointFactory.state-isolation.spec.ts +143 -143
- package/src/endpoints/__tests__/HonoEndpointAdaptor.audit-transactions.spec.ts +663 -663
- package/src/endpoints/__tests__/HonoEndpointAdaptor.audits.spec.ts +608 -608
- package/src/endpoints/__tests__/HonoEndpointAdaptor.events.spec.ts +561 -561
- package/src/endpoints/__tests__/HonoEndpointAdaptor.kysely-audit.integration.spec.ts +1036 -1036
- package/src/endpoints/__tests__/HonoEndpointAdaptor.openapi.spec.ts +278 -278
- package/src/endpoints/__tests__/HonoEndpointAdaptor.spec.ts +1093 -1093
- package/src/endpoints/__tests__/ResponseBuilder.spec.ts +230 -230
- package/src/endpoints/__tests__/TestEndpointAdaptor.audits.spec.ts +569 -569
- package/src/endpoints/__tests__/TestEndpointAdaptor.spec.ts +841 -841
- package/src/endpoints/__tests__/endpoint-types.test.ts +68 -68
- package/src/endpoints/__tests__/helpers.spec.ts +37 -0
- package/src/endpoints/__tests__/lazyAccessors.spec.ts +330 -0
- package/src/endpoints/__tests__/processAudits.spec.ts +631 -0
- package/src/endpoints/audit.ts +51 -51
- package/src/endpoints/helpers.ts +34 -35
- package/src/endpoints/index.ts +33 -23
- package/src/endpoints/lazyAccessors.ts +241 -0
- package/src/endpoints/parseHonoQuery.ts +41 -41
- package/src/endpoints/parseQueryParams.ts +36 -36
- package/src/endpoints/processAudits.ts +269 -269
- package/src/endpoints/rls.ts +16 -16
- package/src/functions/AWSLambdaFunction.ts +294 -295
- package/src/functions/BaseFunctionBuilder.ts +185 -185
- package/src/functions/Function.ts +190 -190
- package/src/functions/FunctionBuilder.ts +353 -353
- package/src/functions/FunctionExecutionWrapper.ts +199 -200
- package/src/functions/TestFunctionAdaptor.ts +191 -191
- package/src/functions/__tests__/AWSLambdaFunctionAdaptor.spec.ts +424 -424
- package/src/functions/__tests__/Function.audits.spec.ts +364 -364
- package/src/functions/__tests__/Function.spec.ts +453 -454
- package/src/functions/__tests__/FunctionBuilder.state-isolation.spec.ts +179 -179
- package/src/functions/__tests__/TestFunctionAdaptor.spec.ts +369 -369
- package/src/functions/index.ts +6 -4
- package/src/index.ts +18 -9
- package/src/publisher.ts +71 -72
- package/src/subscribers/AWSLambdaSubscriberAdaptor.ts +244 -248
- package/src/subscribers/Subscriber.ts +82 -84
- package/src/subscribers/SubscriberBuilder.ts +129 -129
- package/src/subscribers/__tests__/AWSLambdaSubscriberAdaptor.spec.ts +589 -589
- package/src/subscribers/__tests__/Subscriber.spec.ts +402 -404
- package/src/subscribers/index.ts +1 -0
- package/src/telemetry.ts +103 -0
- package/src/types.ts +7 -7
- package/test.ts +58 -59
- package/dist/AWSLambdaFunction-BdebRMUh.d.mts.map +0 -1
- package/dist/AWSLambdaFunction-C54a1doJ.mjs.map +0 -1
- package/dist/AWSLambdaFunction-D0tEOTXQ.d.cts.map +0 -1
- package/dist/AWSLambdaFunction-EPGY4s7i.cjs.map +0 -1
- package/dist/AWSLambdaSubscriberAdaptor-BLfO612H.mjs.map +0 -1
- package/dist/AWSLambdaSubscriberAdaptor-BNcYYZ-P.cjs.map +0 -1
- package/dist/AWSLambdaSubscriberAdaptor-DrFAvHOp.d.mts.map +0 -1
- package/dist/AWSLambdaSubscriberAdaptor-Dx-Ks1Jp.d.cts.map +0 -1
- package/dist/AmazonApiGatewayEndpointAdaptor-BT9JXihC.mjs.map +0 -1
- package/dist/AmazonApiGatewayEndpointAdaptor-DLqnYQ4E.d.cts.map +0 -1
- package/dist/AmazonApiGatewayEndpointAdaptor-DNFvvdmW.cjs.map +0 -1
- package/dist/AmazonApiGatewayEndpointAdaptor-qlKXuZxy.d.mts.map +0 -1
- package/dist/AmazonApiGatewayV1EndpointAdaptor-CShQI8Gk.mjs.map +0 -1
- package/dist/AmazonApiGatewayV1EndpointAdaptor-Ccl8B8kG.cjs.map +0 -1
- package/dist/AmazonApiGatewayV1EndpointAdaptor-DyUaJIhB.d.cts.map +0 -1
- package/dist/AmazonApiGatewayV1EndpointAdaptor-MRUxs3Xi.d.mts.map +0 -1
- package/dist/AmazonApiGatewayV2EndpointAdaptor-D8-0Aab4.cjs.map +0 -1
- package/dist/AmazonApiGatewayV2EndpointAdaptor-M1-w0U5R.d.cts.map +0 -1
- package/dist/AmazonApiGatewayV2EndpointAdaptor-fuLM6M9k.d.mts.map +0 -1
- package/dist/AmazonApiGatewayV2EndpointAdaptor-lCRzGE4q.mjs.map +0 -1
- package/dist/Authorizer-B-btowNd.d.cts.map +0 -1
- package/dist/Authorizer-C0ge_tc8.cjs.map +0 -1
- package/dist/Authorizer-gWxYsGEp.d.mts.map +0 -1
- package/dist/Authorizer-r9U3y_ms.mjs.map +0 -1
- package/dist/BaseFunctionBuilder-BAtutR6q.d.cts.map +0 -1
- package/dist/BaseFunctionBuilder-Czi1Jwza.mjs.map +0 -1
- package/dist/BaseFunctionBuilder-DRY419e7.d.mts.map +0 -1
- package/dist/BaseFunctionBuilder-MYG3C9ug.cjs.map +0 -1
- package/dist/Construct-Ba5cMxib.cjs.map +0 -1
- package/dist/Construct-C4rPE67v.d.cts.map +0 -1
- package/dist/Construct-DdyGHuag.mjs +0 -78
- package/dist/Construct-DdyGHuag.mjs.map +0 -1
- package/dist/Construct-XrijZFFh.d.mts.map +0 -1
- package/dist/Cron-BxhGs5up.mjs.map +0 -1
- package/dist/Cron-CGF4YAfM.cjs.map +0 -1
- package/dist/Cron-bDLcTvV5.d.cts.map +0 -1
- package/dist/Cron-cdjlSKNp.d.mts.map +0 -1
- package/dist/CronBuilder-BC4m5-p1.d.mts.map +0 -1
- package/dist/CronBuilder-CcxKRtVP.cjs.map +0 -1
- package/dist/CronBuilder-DKVXyE0Q.d.cts.map +0 -1
- package/dist/CronBuilder-d2jh-IB2.mjs.map +0 -1
- package/dist/Endpoint-BPv9_-m_.d.cts.map +0 -1
- package/dist/Endpoint-BVGZXFyV.cjs.map +0 -1
- package/dist/Endpoint-BdwG75G_.d.mts.map +0 -1
- package/dist/Endpoint-CuOEswxJ.mjs.map +0 -1
- package/dist/EndpointBuilder-B3az942t.d.mts.map +0 -1
- package/dist/EndpointBuilder-Cgj1P_ra.cjs.map +0 -1
- package/dist/EndpointBuilder-DIy_m1bu.d.cts.map +0 -1
- package/dist/EndpointBuilder-DnCB1h1j.mjs.map +0 -1
- package/dist/EndpointFactory-C-0nE6Jg.d.mts.map +0 -1
- package/dist/EndpointFactory-CYj6BYok.cjs.map +0 -1
- package/dist/EndpointFactory-CbdxPCIH.mjs.map +0 -1
- package/dist/EndpointFactory-CyPbm3AD.d.cts.map +0 -1
- package/dist/Function-BVHqIDp9.mjs.map +0 -1
- package/dist/Function-Cf7f_kCz.d.cts.map +0 -1
- package/dist/Function-DDZb1525.cjs.map +0 -1
- package/dist/Function-DN2G6OT5.d.mts.map +0 -1
- package/dist/FunctionBuilder-CJBzzXL3.d.cts.map +0 -1
- package/dist/FunctionBuilder-CrDYgfiI.mjs.map +0 -1
- package/dist/FunctionBuilder-Cxx8D2na.d.mts.map +0 -1
- package/dist/FunctionBuilder-DswJ-9sD.cjs.map +0 -1
- package/dist/FunctionExecutionWrapper-BYI2bGTL.cjs.map +0 -1
- package/dist/FunctionExecutionWrapper-CLDh7Z2_.mjs.map +0 -1
- package/dist/FunctionExecutionWrapper-DF260Aaj.d.mts.map +0 -1
- package/dist/FunctionExecutionWrapper-Qy8bmgFR.d.cts.map +0 -1
- package/dist/HonoEndpointAdaptor-BaPlUhz0.d.mts.map +0 -1
- package/dist/HonoEndpointAdaptor-CQe2FqMR.cjs +0 -234
- package/dist/HonoEndpointAdaptor-CQe2FqMR.cjs.map +0 -1
- package/dist/HonoEndpointAdaptor-Ce-2HBxn.mjs +0 -228
- package/dist/HonoEndpointAdaptor-Ce-2HBxn.mjs.map +0 -1
- package/dist/HonoEndpointAdaptor-YcRHYALH.d.cts.map +0 -1
- package/dist/Subscriber-BiHjVXtM.cjs.map +0 -1
- package/dist/Subscriber-BmPf9GFb.mjs.map +0 -1
- package/dist/Subscriber-COYMSevD.d.cts.map +0 -1
- package/dist/Subscriber-ikctpU3I.d.mts.map +0 -1
- package/dist/SubscriberBuilder-Cp1C-xtT.cjs.map +0 -1
- package/dist/SubscriberBuilder-DJPEeYDJ.mjs.map +0 -1
- package/dist/SubscriberBuilder-D_9zzllj.d.mts.map +0 -1
- package/dist/SubscriberBuilder-ivHAGIVi.d.cts.map +0 -1
- package/dist/TestEndpointAdaptor-C10xBI--.d.cts.map +0 -1
- package/dist/TestEndpointAdaptor-DB7bREhS.d.mts.map +0 -1
- package/dist/TestEndpointAdaptor-DJgik2Wj.mjs +0 -160
- package/dist/TestEndpointAdaptor-DJgik2Wj.mjs.map +0 -1
- package/dist/TestEndpointAdaptor-ZbtQiuHE.cjs +0 -166
- package/dist/TestEndpointAdaptor-ZbtQiuHE.cjs.map +0 -1
- package/dist/functions-C6EK1xL6.mjs +0 -8
- package/dist/functions-C6EK1xL6.mjs.map +0 -1
- package/dist/functions-fTid0RMK.cjs.map +0 -1
- package/dist/helpers-BcP1tXAi.cjs.map +0 -1
- package/dist/helpers-ByRTDO_m.mjs.map +0 -1
- package/dist/index-BWzGIj06.d.mts.map +0 -1
- package/dist/index-DmFozqLd.d.cts +0 -12
- package/dist/index-DmFozqLd.d.cts.map +0 -1
- package/dist/parseHonoQuery-CZC5_97v.cjs.map +0 -1
- package/dist/parseHonoQuery-DDgIkTO4.mjs.map +0 -1
- package/dist/publisher.d.cts.map +0 -1
- package/dist/publisher.d.mts.map +0 -1
- package/dist/types-DdIlpxAd.d.mts.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Endpoint-CuOEswxJ.mjs","names":["endpoints: Endpoint<any, any, any, any, any, any>[]","options?: OpenApiSchemaOptions","input: unknown","key: K","body: unknown","status: number","headers: Record<string, string>","key?: string","cookieHeader: string | undefined","name?: string","name: string","value: string","options?: CookieOptions","ctx: EndpointContext<TInput, TServices, TLogger, TSession>","ctx: EndpointContext<\n TInput,\n TServices,\n TLogger,\n TSession,\n TAuditAction,\n TDatabase,\n TAuditStorage\n >","response: ResponseBuilder","obj: any","response: T | ResponseWithMetadata<T>","componentCollector?: ComponentCollector","operation: OpenAPIV3_1.OperationObject","pathParameters: OpenAPIV3_1.ParameterObject[]","queryParameters: OpenAPIV3_1.ParameterObject[]","routeObject: any","key: string","options?: Pick<CookieOptions, 'domain' | 'path'>","code: SuccessStatus","data: T"],"sources":["../src/endpoints/Endpoint.ts"],"sourcesContent":["import type { AuditStorage, AuditableAction, Auditor } from '@geekmidas/audit';\nimport type {\n EventPublisher,\n ExtractPublisherMessage,\n MappedEvent,\n} from '@geekmidas/events';\nimport type { Logger } from '@geekmidas/logger';\nimport type { RateLimitConfig } from '@geekmidas/rate-limit';\nimport type {\n InferComposableStandardSchema,\n InferStandardSchema,\n} from '@geekmidas/schema';\nimport {\n convertSchemaWithComponents,\n convertStandardSchemaToJsonSchema,\n} from '@geekmidas/schema/conversion';\nimport {\n type ComponentCollector,\n type OpenApiSchemaOptions,\n buildOpenApiSchema,\n} from '@geekmidas/schema/openapi';\nimport type { Service, ServiceRecord } from '@geekmidas/services';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\nimport pick from 'lodash.pick';\nimport set from 'lodash.set';\nimport type { OpenAPIV3_1 } from 'openapi-types';\nimport { ConstructType } from '../Construct';\nimport { Function, type FunctionHandler } from '../functions';\nimport type { HttpMethod, LowerHttpMethod, RemoveUndefined } from '../types';\nimport type { Authorizer } from './Authorizer';\nimport type { ActorExtractor, MappedAudit } from './audit';\nimport type { RlsConfig } from './rls';\n\n/**\n * Represents an HTTP endpoint that can handle requests with type-safe input/output validation,\n * dependency injection, session management, and authorization.\n *\n * @template TRoute - The route path string with parameter placeholders (e.g., '/users/:id')\n * @template TMethod - The HTTP method (GET, POST, PUT, DELETE, PATCH)\n * @template TInput - The input schema definition for body, query, and path parameters\n * @template OutSchema - The output schema for response validation\n * @template TServices - Array of service dependencies to inject\n * @template TLogger - The logger instance type\n * @template TSession - The session data type\n *\n * @extends Function - Base function construct for handler execution\n *\n * @example\n * ```typescript\n * const endpoint = new Endpoint({\n * route: '/users/:id',\n * method: 'GET',\n * input: { params: userIdSchema },\n * output: userSchema,\n * fn: async ({ params }) => getUserById(params.id)\n * });\n * ```\n */\nexport class Endpoint<\n TRoute extends string,\n TMethod extends HttpMethod,\n TInput extends EndpointSchemas = {},\n OutSchema extends StandardSchemaV1 | undefined = undefined,\n TServices extends Service[] = [],\n TLogger extends Logger = Logger,\n TSession = unknown,\n TEventPublisher extends EventPublisher<any> | undefined = undefined,\n TEventPublisherServiceName extends string = string,\n TAuditStorage extends AuditStorage | undefined = undefined,\n TAuditStorageServiceName extends string = string,\n TAuditAction extends AuditableAction<string, unknown> = AuditableAction<\n string,\n unknown\n >,\n TDatabase = undefined,\n TDatabaseServiceName extends string = string,\n> extends Function<\n TInput,\n TServices,\n TLogger,\n OutSchema,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName,\n TAuditAction,\n FunctionHandler<\n TInput,\n TServices,\n TLogger,\n OutSchema,\n TDatabase,\n TAuditStorage,\n TAuditAction\n >\n> {\n operationId?: string;\n /** The route path pattern with parameter placeholders */\n route: TRoute;\n /** The HTTP method for this endpoint */\n method: TMethod;\n /** Optional description for OpenAPI documentation */\n description?: string;\n /** Optional tags for OpenAPI documentation */\n tags?: string[];\n /** The HTTP success status code to return (default: 200) */\n public readonly status: SuccessStatus;\n /** Default headers to apply to all responses */\n public readonly defaultHeaders: Record<string, string> = {};\n /** Function to extract session data from the request context */\n public getSession: SessionFn<TServices, TLogger, TSession, TDatabase> = () =>\n ({}) as TSession;\n /** Function to determine if the request is authorized */\n public authorize: AuthorizeFn<TServices, TLogger, TSession> = () => true;\n /** Optional rate limiting configuration */\n public rateLimit?: RateLimitConfig;\n /** Optional authorizer for this endpoint */\n public authorizer?: Authorizer;\n /** Optional actor extractor for audit records */\n public actorExtractor?: ActorExtractor<TServices, TSession, TLogger>;\n /** Declarative audit definitions */\n public audits: MappedAudit<TAuditAction, OutSchema>[] = [];\n /** Database service for this endpoint */\n public declare databaseService?: Service<TDatabaseServiceName, TDatabase>;\n /** RLS configuration for this endpoint */\n public rlsConfig?: RlsConfig<TServices, TSession, TLogger>;\n /** Whether to bypass RLS for this endpoint */\n public rlsBypass?: boolean;\n /** The endpoint handler function */\n private endpointFn!: EndpointHandler<\n TInput,\n TServices,\n TLogger,\n OutSchema,\n TSession,\n TDatabase,\n TAuditStorage,\n TAuditAction\n >;\n\n /**\n * Builds a complete OpenAPI 3.1 schema from an array of endpoints.\n *\n * @param endpoints - Array of endpoint instances to document\n * @param options - Optional configuration for OpenAPI generation\n * @returns OpenAPI 3.1 specification object\n *\n * @example\n * ```typescript\n * const schema = await Endpoint.buildOpenApiSchema([\n * getUserEndpoint,\n * createUserEndpoint\n * ], {\n * title: 'User API',\n * version: '1.0.0'\n * });\n * ```\n */\n static async buildOpenApiSchema(\n endpoints: Endpoint<any, any, any, any, any, any>[],\n options?: OpenApiSchemaOptions,\n ) {\n return buildOpenApiSchema(endpoints, options);\n }\n\n /**\n * Gets the full path including HTTP method and route.\n * @returns Formatted string like 'GET /users/{id}'\n */\n get fullPath() {\n return `${this.method} ${this._path}` as const;\n }\n\n /**\n * Parses and validates input data for a specific input type (body, query, params).\n *\n * @param input - The raw input data to validate\n * @param key - The input type key ('body', 'query', or 'params')\n * @returns The validated input data for the specified key\n * @throws {UnprocessableEntityError} When validation fails\n */\n async parseInput<K extends keyof TInput>(\n input: unknown,\n key: K,\n ): Promise<InferComposableStandardSchema<TInput[K]>> {\n const schema = this.input?.[key];\n return Endpoint.parseSchema(schema as StandardSchemaV1, input) as Promise<\n InferComposableStandardSchema<TInput[K]>\n >;\n }\n\n /**\n * Parses and validates the request body against the body schema.\n *\n * @param body - The raw request body to validate\n * @returns The validated body data\n * @throws {UnprocessableEntityError} When body validation fails\n */\n async parseBody(body: unknown): Promise<InferStandardSchema<TInput['body']>> {\n return this.parseInput(body, 'body') as Promise<\n InferStandardSchema<TInput['body']>\n >;\n }\n\n static isSuccessStatus(status: number): boolean {\n return status >= 200 && status < 300;\n }\n\n /**\n * Creates a case-insensitive header lookup function from a headers object.\n *\n * @param headers - Object containing header key-value pairs\n * @returns Function to retrieve header values by case-insensitive key, or all headers\n *\n * @example\n * ```typescript\n * const headerFn = Endpoint.createHeaders({ 'Content-Type': 'application/json' });\n * headerFn('content-type'); // Returns 'application/json'\n * headerFn(); // Returns { 'content-type': 'application/json' }\n * ```\n */\n static createHeaders(headers: Record<string, string>): HeaderFn {\n const headerMap = new Map<string, string>();\n for (const [k, v] of Object.entries(headers)) {\n const key = k.toLowerCase();\n headerMap.set(key, v);\n }\n\n function get(): Record<string, string>;\n function get(key: string): string | undefined;\n function get(key?: string): string | undefined | Record<string, string> {\n if (key === undefined) {\n // Return all headers as plain object\n return Object.fromEntries(headerMap.entries());\n }\n return headerMap.get(key.toLowerCase());\n }\n\n return get;\n }\n\n /**\n * Parses cookie string and creates a cookie lookup function.\n *\n * @param cookieHeader - The Cookie header value\n * @returns Function to retrieve cookie values by name, or all cookies\n *\n * @example\n * ```typescript\n * const cookieFn = Endpoint.createCookies('session=abc123; theme=dark');\n * cookieFn('session'); // Returns 'abc123'\n * cookieFn(); // Returns { session: 'abc123', theme: 'dark' }\n * ```\n */\n static createCookies(cookieHeader: string | undefined): CookieFn {\n const cookieMap = new Map<string, string>();\n\n if (cookieHeader) {\n // Parse cookie string: \"name1=value1; name2=value2\"\n const cookies = cookieHeader.split(';');\n for (const cookie of cookies) {\n const [name, ...valueParts] = cookie.trim().split('=');\n if (name) {\n const value = valueParts.join('='); // Handle values with = in them\n cookieMap.set(name, decodeURIComponent(value));\n }\n }\n }\n\n function get(): Record<string, string>;\n function get(name: string): string | undefined;\n function get(name?: string): string | undefined | Record<string, string> {\n if (name === undefined) {\n // Return all cookies as plain object\n return Object.fromEntries(cookieMap.entries());\n }\n return cookieMap.get(name);\n }\n\n return get;\n }\n\n /**\n * Formats a cookie as a Set-Cookie header string.\n *\n * @param name - Cookie name\n * @param value - Cookie value\n * @param options - Cookie options (httpOnly, secure, sameSite, etc.)\n * @returns Formatted Set-Cookie header string\n *\n * @example\n * ```typescript\n * const header = Endpoint.formatCookieHeader('session', 'abc123', {\n * httpOnly: true,\n * secure: true,\n * sameSite: 'strict',\n * maxAge: 3600\n * });\n * // Returns: \"session=abc123; Max-Age=3600; HttpOnly; Secure; SameSite=Strict\"\n * ```\n */\n static formatCookieHeader(\n name: string,\n value: string,\n options?: CookieOptions,\n ): string {\n let cookie = `${name}=${value}`;\n\n if (options) {\n if (options.domain) cookie += `; Domain=${options.domain}`;\n if (options.path) cookie += `; Path=${options.path}`;\n if (options.expires)\n cookie += `; Expires=${options.expires.toUTCString()}`;\n if (options.maxAge !== undefined) cookie += `; Max-Age=${options.maxAge}`;\n if (options.httpOnly) cookie += '; HttpOnly';\n if (options.secure) cookie += '; Secure';\n if (options.sameSite) {\n cookie += `; SameSite=${options.sameSite.charAt(0).toUpperCase() + options.sameSite.slice(1)}`;\n }\n }\n\n return cookie;\n }\n\n /**\n * Extracts and refines input data from the endpoint context.\n *\n * @param ctx - The endpoint execution context\n * @returns Object containing only the input data (body, query, params)\n * @internal\n */\n refineInput(\n ctx: EndpointContext<TInput, TServices, TLogger, TSession>,\n ): InferComposableStandardSchema<TInput> {\n const input = pick(ctx, [\n 'body',\n 'query',\n 'params',\n ]) as InferComposableStandardSchema<TInput>;\n\n return input;\n }\n\n handler = (\n ctx: EndpointContext<\n TInput,\n TServices,\n TLogger,\n TSession,\n TAuditAction,\n TDatabase,\n TAuditStorage\n >,\n response: ResponseBuilder,\n ): OutSchema extends StandardSchemaV1\n ?\n | InferStandardSchema<OutSchema>\n | ResponseWithMetadata<InferStandardSchema<OutSchema>>\n | Promise<InferStandardSchema<OutSchema>>\n | Promise<ResponseWithMetadata<InferStandardSchema<OutSchema>>>\n :\n | any\n | ResponseWithMetadata<any>\n | Promise<any>\n | Promise<ResponseWithMetadata<any>> => {\n // Apply default headers to response builder\n for (const [key, value] of Object.entries(this.defaultHeaders)) {\n response.header(key, value);\n }\n\n // Build context object, conditionally including auditor and db\n const handlerCtx = {\n ...this.refineInput(ctx),\n services: ctx.services,\n logger: ctx.logger,\n header: ctx.header,\n cookie: ctx.cookie,\n session: ctx.session,\n // These are conditionally present based on configuration\n ...('auditor' in ctx && { auditor: ctx.auditor }),\n ...('db' in ctx && { db: ctx.db }),\n } as EndpointContext<\n TInput,\n TServices,\n TLogger,\n TSession,\n TAuditAction,\n TDatabase,\n TAuditStorage\n >;\n\n return this.endpointFn(handlerCtx, response);\n };\n\n /**\n * Type guard to check if an object is an Endpoint instance.\n *\n * @param obj - The object to check\n * @returns True if the object is an Endpoint\n */\n static isEndpoint(obj: any): obj is Endpoint<any, any, any, any> {\n return Boolean(\n obj &&\n (obj as Function).__IS_FUNCTION__ === true &&\n obj.type === ConstructType.Endpoint,\n );\n }\n\n /**\n * Helper to check if response has metadata\n */\n static hasMetadata<T>(\n response: T | ResponseWithMetadata<T>,\n ): response is ResponseWithMetadata<T> {\n return (\n response !== null &&\n typeof response === 'object' &&\n 'data' in response &&\n 'metadata' in response\n );\n }\n\n /**\n * Converts Express-style route params to OpenAPI format.\n * @returns Route with ':param' converted to '{param}'\n * @internal\n */\n get _path() {\n return this.route.replace(/:(\\w+)/g, '{$1}') as ConvertRouteParams<TRoute>;\n }\n\n /**\n * Generates OpenAPI 3.1 schema for this endpoint.\n *\n * @returns OpenAPI route definition with operation details\n */\n async toOpenApi3Route(\n componentCollector?: ComponentCollector,\n ): Promise<EndpointOpenApiSchema<TRoute, TMethod>> {\n const operation: OpenAPIV3_1.OperationObject = {\n operationId: this.operationId,\n ...(this.description && { description: this.description }),\n ...(this.tags && this.tags.length > 0 && { tags: this.tags }),\n responses: {\n '200': {\n description: 'Successful response',\n } as OpenAPIV3_1.ResponseObject,\n },\n };\n\n // Add response schema\n if (this.outputSchema) {\n const responseSchema = await convertSchemaWithComponents(\n this.outputSchema,\n componentCollector,\n );\n if (responseSchema) {\n set(\n operation,\n ['responses', '200', 'content', 'application/json', 'schema'],\n responseSchema,\n );\n }\n }\n\n // Separate path and query parameters\n const pathParameters: OpenAPIV3_1.ParameterObject[] = [];\n const queryParameters: OpenAPIV3_1.ParameterObject[] = [];\n\n // Since the EndpointBuilder doesn't have body/search/params methods yet,\n // and the input is a composite type, we need to check if input exists\n // and has the expected shape\n if (this.input && typeof this.input === 'object') {\n // Add request body for methods that support it\n if (\n ['POST', 'PUT', 'PATCH'].includes(this.method) &&\n 'body' in this.input &&\n this.input.body\n ) {\n const bodySchema = await convertSchemaWithComponents(\n this.input.body as StandardSchemaV1,\n componentCollector,\n );\n if (bodySchema) {\n set(operation, ['requestBody'], {\n required: true,\n content: {\n 'application/json': {\n schema: bodySchema,\n },\n },\n });\n }\n }\n\n // Add path parameters\n if ('params' in this.input && this.input.params) {\n const paramsSchema = await convertStandardSchemaToJsonSchema(\n this.input.params as StandardSchemaV1,\n );\n if (\n paramsSchema &&\n paramsSchema.type === 'object' &&\n paramsSchema.properties\n ) {\n for (const [name, schema] of Object.entries(\n paramsSchema.properties,\n )) {\n pathParameters.push({\n name,\n in: 'path',\n required: paramsSchema.required?.includes(name) ?? true,\n schema: schema as any,\n });\n }\n }\n }\n\n // Add query parameters\n if ('query' in this.input && this.input.query) {\n const querySchema = await convertStandardSchemaToJsonSchema(\n this.input.query,\n );\n if (\n querySchema &&\n querySchema.type === 'object' &&\n querySchema.properties\n ) {\n for (const [name, schema] of Object.entries(querySchema.properties)) {\n queryParameters.push({\n name,\n in: 'query',\n required: querySchema.required?.includes(name) ?? false,\n schema: schema as any,\n });\n }\n }\n }\n }\n\n // Only add query parameters to the operation\n if (queryParameters.length > 0) {\n operation.parameters = queryParameters;\n }\n\n // Build the route object with path parameters at the route level\n const routeObject: any = {};\n if (pathParameters.length > 0) {\n routeObject.parameters = pathParameters;\n }\n routeObject[this.method.toLowerCase()] = operation;\n\n return {\n [this._path]: routeObject,\n } as EndpointOpenApiSchema<TRoute, TMethod>;\n }\n\n /**\n * Creates a new Endpoint instance.\n *\n * @param options - Configuration options for the endpoint\n * @param options.fn - The handler function to execute\n * @param options.method - HTTP method\n * @param options.route - Route path with parameter placeholders\n * @param options.description - Optional description for documentation\n * @param options.input - Input schemas for validation\n * @param options.logger - Logger instance\n * @param options.output - Output schema for response validation\n * @param options.services - Service dependencies\n * @param options.timeout - Execution timeout in milliseconds\n * @param options.getSession - Session extraction function\n * @param options.authorize - Authorization check function\n * @param options.status - Success HTTP status code (default: 200)\n * @param options.authorizer - Optional authorizer configuration\n */\n constructor({\n fn,\n method,\n route,\n description,\n tags,\n input,\n logger,\n output: outputSchema,\n services,\n timeout,\n memorySize,\n getSession,\n authorize,\n rateLimit,\n status = SuccessStatus.OK,\n publisherService,\n events,\n authorizer,\n auditorStorageService,\n actorExtractor,\n audits,\n databaseService,\n rlsConfig,\n rlsBypass,\n }: EndpointOptions<\n TRoute,\n TMethod,\n TInput,\n OutSchema,\n TServices,\n TLogger,\n TSession,\n OutSchema,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName\n >) {\n super(\n fn as unknown as FunctionHandler<TInput, TServices, TLogger, OutSchema>,\n timeout,\n ConstructType.Endpoint,\n input,\n outputSchema,\n services,\n logger,\n publisherService,\n events,\n memorySize,\n auditorStorageService,\n );\n\n this.route = route;\n this.method = method;\n this.description = description;\n this.tags = tags;\n this.status = status;\n this.endpointFn = fn;\n\n if (getSession) {\n this.getSession = getSession;\n }\n\n if (authorize) {\n this.authorize = authorize;\n }\n\n if (rateLimit) {\n this.rateLimit = rateLimit;\n }\n\n if (authorizer) {\n this.authorizer = authorizer;\n }\n\n if (actorExtractor) {\n this.actorExtractor = actorExtractor;\n }\n\n if (audits) {\n this.audits = audits;\n }\n\n if (databaseService) {\n this.databaseService = databaseService;\n }\n\n if (rlsConfig) {\n this.rlsConfig = rlsConfig;\n }\n\n if (rlsBypass) {\n this.rlsBypass = rlsBypass;\n }\n }\n}\n\n/**\n * Defines the input schema structure for an endpoint.\n *\n * @template TBody - Schema for request body validation\n * @template TSearch - Schema for query string validation\n * @template TParams - Schema for URL path parameters validation\n *\n * @example\n * ```typescript\n * type UserInput = EndpointInput<\n * typeof createUserBodySchema,\n * typeof userQuerySchema,\n * typeof userParamsSchema\n * >;\n * ```\n */\nexport type EndpointInput<\n TBody extends StandardSchemaV1 | undefined = undefined,\n TSearch extends StandardSchemaV1 | undefined = undefined,\n TParams extends StandardSchemaV1 | undefined = undefined,\n> = RemoveUndefined<{\n body: TBody;\n search: TSearch;\n params: TParams;\n}>;\n\n/**\n * Configuration options for creating an Endpoint instance.\n *\n * @template TRoute - The route path string\n * @template TMethod - The HTTP method\n * @template TInput - Input schema definitions\n * @template TOutput - Output schema definition\n * @template TServices - Service dependencies array\n * @template TLogger - Logger type\n * @template TSession - Session data type\n */\nexport interface EndpointOptions<\n TRoute extends string,\n TMethod extends HttpMethod,\n TInput extends EndpointSchemas = {},\n TOutput extends StandardSchemaV1 | undefined = undefined,\n TServices extends Service[] = [],\n TLogger extends Logger = Logger,\n TSession = unknown,\n OutSchema extends StandardSchemaV1 | undefined = undefined,\n TEventPublisher extends EventPublisher<any> | undefined = undefined,\n TEventPublisherServiceName extends string = string,\n TAuditStorage extends AuditStorage | undefined = undefined,\n TAuditStorageServiceName extends string = string,\n TAuditAction extends AuditableAction<string, unknown> = AuditableAction<\n string,\n unknown\n >,\n TDatabase = undefined,\n TDatabaseServiceName extends string = string,\n> {\n /** The route path with parameter placeholders */\n route: TRoute;\n /** The HTTP method for this endpoint */\n method: TMethod;\n /** The handler function that implements the endpoint logic */\n fn: EndpointHandler<\n TInput,\n TServices,\n TLogger,\n TOutput,\n TSession,\n TDatabase,\n TAuditStorage,\n TAuditAction\n >;\n /** Optional authorization check function */\n authorize: AuthorizeFn<TServices, TLogger, TSession> | undefined;\n /** Optional description for documentation */\n description: string | undefined;\n /** Optional tags for OpenAPI documentation */\n tags?: string[];\n /** Optional execution timeout in milliseconds */\n timeout: number | undefined;\n /** Optional memory size in MB for serverless deployments */\n memorySize: number | undefined;\n /** Input validation schemas */\n input: TInput | undefined;\n /** Output validation schema */\n output: TOutput | undefined;\n /** Service dependencies to inject */\n services: TServices;\n /** Logger instance */\n logger: TLogger;\n /** Optional session extraction function */\n getSession: SessionFn<TServices, TLogger, TSession, TDatabase> | undefined;\n /** Optional rate limiting configuration */\n rateLimit?: RateLimitConfig;\n /** Success HTTP status code */\n status: SuccessStatus | undefined;\n /**\n * Event publisher service for publishing events from this endpoint\n */\n publisherService?: Service<TEventPublisherServiceName, TEventPublisher>;\n\n events?: MappedEvent<TEventPublisher, OutSchema>[];\n /** Optional authorizer configuration */\n authorizer?: Authorizer;\n /**\n * Auditor storage service for persisting audit records from this endpoint\n */\n auditorStorageService?: Service<TAuditStorageServiceName, TAuditStorage>;\n /** Optional actor extractor function for audit records */\n actorExtractor?: ActorExtractor<TServices, TSession, TLogger>;\n /** Declarative audit definitions */\n audits?: MappedAudit<TAuditAction, OutSchema>[];\n /** Database service for this endpoint */\n databaseService?: Service<TDatabaseServiceName, TDatabase>;\n /** RLS configuration for this endpoint */\n rlsConfig?: RlsConfig<TServices, TSession, TLogger>;\n /** Whether to bypass RLS for this endpoint */\n rlsBypass?: boolean;\n}\n\n/**\n * Defines the possible input schema types for an endpoint.\n * Each property represents a different part of the HTTP request.\n */\nexport type EndpointSchemas = Partial<{\n /** Schema for URL path parameters (e.g., /users/:id) */\n params: StandardSchemaV1;\n /** Schema for query string parameters */\n query: StandardSchemaV1;\n /** Schema for request body (POST, PUT, PATCH) */\n body: StandardSchemaV1;\n}>;\n\nexport type AuthorizeContext<\n TServices extends Service[] = [],\n TLogger extends Logger = Logger,\n TSession = unknown,\n> = {\n services: ServiceRecord<TServices>;\n logger: TLogger;\n header: HeaderFn;\n cookie: CookieFn;\n session: TSession;\n};\n/**\n * Function type for endpoint authorization checks.\n *\n * @template TServices - Available service dependencies\n * @template TLogger - Logger type\n * @template TSession - Session data type\n *\n * @param ctx - Context containing services, logger, headers, and session\n * @returns Boolean indicating if the request is authorized\n *\n * @example\n * ```typescript\n * const authorize: AuthorizeFn = ({ session }) => {\n * return session.userId !== undefined;\n * };\n * ```\n */\nexport type AuthorizeFn<\n TServices extends Service[] = [],\n TLogger extends Logger = Logger,\n TSession = unknown,\n> = (\n ctx: AuthorizeContext<TServices, TLogger, TSession>,\n) => Promise<boolean> | boolean;\n\n/**\n * Base session context without database\n */\ntype BaseSessionContext<\n TServices extends Service[] = [],\n TLogger extends Logger = Logger,\n> = {\n services: ServiceRecord<TServices>;\n logger: TLogger;\n header: HeaderFn;\n cookie: CookieFn;\n};\n\n/**\n * Conditional database context for session - only present when database service is configured\n */\ntype SessionDatabaseContext<TDatabase = undefined> = TDatabase extends undefined\n ? {}\n : {\n /**\n * Database instance for session extraction.\n * Available when a database service is configured via `.database()`.\n * Useful for looking up user data from the database based on auth tokens.\n */\n db: TDatabase;\n };\n\nexport type SessionContext<\n TServices extends Service[] = [],\n TLogger extends Logger = Logger,\n TDatabase = undefined,\n> = BaseSessionContext<TServices, TLogger> & SessionDatabaseContext<TDatabase>;\n/**\n * Function type for extracting session data from a request.\n *\n * @template TServices - Available service dependencies\n * @template TLogger - Logger type\n * @template TSession - Session data type to extract\n * @template TDatabase - Database type (when database service is configured)\n *\n * @param ctx - Context containing services, logger, headers, and optionally database\n * @returns The extracted session data\n *\n * @example\n * ```typescript\n * // Without database\n * const getSession: SessionFn<Services, Logger, UserSession> = async ({ header, services }) => {\n * const token = header('authorization');\n * return await services.auth.verifyToken(token);\n * };\n *\n * // With database\n * const getSession: SessionFn<Services, Logger, UserSession, Database> = async ({ header, db }) => {\n * const token = header('authorization');\n * const user = await db.selectFrom('users').where('token', '=', token).executeTakeFirst();\n * return { userId: user?.id };\n * };\n * ```\n */\nexport type SessionFn<\n TServices extends Service[] = [],\n TLogger extends Logger = Logger,\n TSession = unknown,\n TDatabase = undefined,\n> = (\n ctx: SessionContext<TServices, TLogger, TDatabase>,\n) => Promise<TSession> | TSession;\n\n/**\n * Utility type that converts Express-style route parameters to OpenAPI format.\n * Transforms ':param' syntax to '{param}' syntax.\n *\n * @template T - The route string to convert\n *\n * @example\n * ```typescript\n * type Route1 = ConvertRouteParams<'/users/:id'>; // '/users/{id}'\n * type Route2 = ConvertRouteParams<'/users/:userId/posts/:postId'>; // '/users/{userId}/posts/{postId}'\n * ```\n */\nexport type ConvertRouteParams<T extends string> =\n T extends `${infer Start}:${infer Param}/${infer Rest}`\n ? `${Start}{${Param}}/${ConvertRouteParams<Rest>}`\n : T extends `${infer Start}:${infer Param}`\n ? `${Start}{${Param}}`\n : T;\n\n/**\n * Type representing the OpenAPI schema structure for an endpoint.\n *\n * @template TRoute - The route path\n * @template TMethod - The HTTP method\n *\n * @example\n * ```typescript\n * type Schema = EndpointOpenApiSchema<'/users/:id', 'GET'>;\n * // Results in: { '/users/{id}': { get: OperationObject, parameters?: ParameterObject[] } }\n * ```\n */\nexport type EndpointOpenApiSchema<\n TRoute extends string,\n TMethod extends HttpMethod,\n> = {\n [key in ConvertRouteParams<TRoute>]: {\n [key in LowerHttpMethod<TMethod>]: OpenAPIV3_1.OperationObject<{}>;\n } & {\n parameters?: OpenAPIV3_1.ParameterObject[];\n };\n};\n\nexport type SingleHeaderFn = (key: string) => string | undefined;\nexport type MultiHeaderFn = () => EndpointHeaders;\n/**\n * Type representing HTTP headers as a Map.\n */\nexport type EndpointHeaders = Map<string, string>;\n\n/**\n * Function type for retrieving HTTP header values.\n * Supports two calling patterns:\n * - `header(key)` - Get a single header value (case-insensitive)\n * - `header()` - Get all headers as a plain object\n *\n * @example\n * ```typescript\n * // Get single header\n * const contentType = header('content-type');\n *\n * // Get all headers\n * const allHeaders = header();\n * // { 'content-type': 'application/json', 'host': 'example.com', ... }\n * ```\n */\nexport interface HeaderFn {\n (): Record<string, string>;\n (key: string): string | undefined;\n}\n\n/**\n * Function type for retrieving cookie values.\n * Supports two calling patterns:\n * - `cookie(name)` - Get a single cookie value\n * - `cookie()` - Get all cookies as a plain object\n *\n * @example\n * ```typescript\n * // Get single cookie\n * const sessionId = cookie('session');\n *\n * // Get all cookies\n * const allCookies = cookie();\n * // { session: 'abc123', theme: 'dark', ... }\n * ```\n */\nexport interface CookieFn {\n (): Record<string, string>;\n (name: string): string | undefined;\n}\n\n/**\n * Cookie options matching standard Set-Cookie attributes\n */\nexport interface CookieOptions {\n domain?: string;\n path?: string;\n expires?: Date;\n maxAge?: number;\n httpOnly?: boolean;\n secure?: boolean;\n sameSite?: 'strict' | 'lax' | 'none';\n}\n\n/**\n * Response metadata that handlers can set\n */\nexport interface ResponseMetadata {\n headers?: Record<string, string>;\n cookies?: Map<string, { value: string; options?: CookieOptions }>;\n status?: SuccessStatus;\n}\n\n/**\n * Return type for handlers that want to set response metadata\n */\nexport interface ResponseWithMetadata<T> {\n data: T;\n metadata: ResponseMetadata;\n}\n\n/**\n * Response builder for fluent API in handlers\n */\nexport class ResponseBuilder {\n private metadata: ResponseMetadata = {\n headers: {},\n cookies: new Map(),\n };\n\n header(key: string, value: string): this {\n this.metadata.headers![key] = value;\n return this;\n }\n\n cookie(name: string, value: string, options?: CookieOptions): this {\n this.metadata.cookies!.set(name, { value, options });\n return this;\n }\n\n deleteCookie(\n name: string,\n options?: Pick<CookieOptions, 'domain' | 'path'>,\n ): this {\n this.metadata.cookies!.set(name, {\n value: '',\n options: { ...options, maxAge: 0, expires: new Date(0) },\n });\n return this;\n }\n\n status(code: SuccessStatus): this {\n this.metadata.status = code;\n return this;\n }\n\n send<T>(data: T): ResponseWithMetadata<T> {\n return { data, metadata: this.metadata };\n }\n\n getMetadata(): ResponseMetadata {\n return this.metadata;\n }\n}\n\n/**\n * Base context properties that are always available\n */\ntype BaseEndpointContext<\n TServices extends Service[] = [],\n TLogger extends Logger = Logger,\n TSession = unknown,\n> = {\n /** Injected service instances */\n services: ServiceRecord<TServices>;\n /** Logger instance for this request */\n logger: TLogger;\n /** Function to retrieve request headers */\n header: HeaderFn;\n /** Function to retrieve request cookies */\n cookie: CookieFn;\n /** Session data extracted by getSession */\n session: TSession;\n};\n\n/**\n * Conditional auditor context - only present when audit storage is configured\n */\ntype AuditorContext<\n TAuditAction extends AuditableAction<string, unknown> = AuditableAction<\n string,\n unknown\n >,\n TAuditStorage = undefined,\n> = TAuditStorage extends undefined\n ? {}\n : {\n /**\n * Auditor instance for recording audit events.\n * Only present when audit storage is configured on the endpoint.\n * When a transactional database is used for audit storage,\n * the auditor is pre-configured with the transaction context.\n */\n auditor: Auditor<TAuditAction>;\n };\n\n/**\n * Conditional database context - only present when database service is configured\n */\ntype DatabaseContext<TDatabase = undefined> = TDatabase extends undefined\n ? {}\n : {\n /**\n * Database instance for this request.\n * When audit storage is configured and uses the same database,\n * this will be the transaction for ACID compliance.\n * Otherwise, it's the raw database connection.\n */\n db: TDatabase;\n };\n\n/**\n * The execution context provided to endpoint handlers.\n * Contains all parsed input data, services, logger, headers, cookies, and session.\n *\n * @template Input - The input schemas (body, query, params)\n * @template TServices - Available service dependencies\n * @template TLogger - Logger type\n * @template TSession - Session data type\n * @template TAuditAction - Audit action types (when auditor is configured)\n * @template TDatabase - Database type (when database service is configured)\n * @template TAuditStorage - Audit storage type (determines if auditor is present)\n */\nexport type EndpointContext<\n Input extends EndpointSchemas | undefined = undefined,\n TServices extends Service[] = [],\n TLogger extends Logger = Logger,\n TSession = unknown,\n TAuditAction extends AuditableAction<string, unknown> = AuditableAction<\n string,\n unknown\n >,\n TDatabase = undefined,\n TAuditStorage = undefined,\n> = BaseEndpointContext<TServices, TLogger, TSession> &\n InferComposableStandardSchema<Input> &\n AuditorContext<TAuditAction, TAuditStorage> &\n DatabaseContext<TDatabase>;\n\n/**\n * Handler function type for endpoint implementations.\n *\n * @template TInput - Input schemas for validation\n * @template TServices - Available service dependencies\n * @template TLogger - Logger type\n * @template OutSchema - Output schema for response validation\n * @template TSession - Session data type\n *\n * @param ctx - The endpoint execution context\n * @param response - Response builder for setting cookies, headers, and status\n * @returns The response data (validated if OutSchema is provided) or ResponseWithMetadata\n *\n * @example\n * ```typescript\n * // Simple response\n * const handler: EndpointHandler<Input, [UserService], Logger, UserSchema> =\n * async ({ params, services }) => {\n * return await services.users.findById(params.id);\n * };\n *\n * // With response builder\n * const handler: EndpointHandler<Input, [UserService], Logger, UserSchema> =\n * async ({ params, services }, response) => {\n * const user = await services.users.findById(params.id);\n * return response.header('X-User-Id', user.id).send(user);\n * };\n * ```\n */\nexport type EndpointHandler<\n TInput extends EndpointSchemas | undefined = undefined,\n TServices extends Service[] = [],\n TLogger extends Logger = Logger,\n OutSchema extends StandardSchemaV1 | undefined = undefined,\n TSession = unknown,\n TDatabase = undefined,\n TAuditStorage = undefined,\n TAuditAction extends AuditableAction<string, unknown> = AuditableAction<\n string,\n unknown\n >,\n> = (\n ctx: EndpointContext<\n TInput,\n TServices,\n TLogger,\n TSession,\n TAuditAction,\n TDatabase,\n TAuditStorage\n >,\n response: ResponseBuilder,\n) => OutSchema extends StandardSchemaV1\n ?\n | InferStandardSchema<OutSchema>\n | ResponseWithMetadata<InferStandardSchema<OutSchema>>\n | Promise<InferStandardSchema<OutSchema>>\n | Promise<ResponseWithMetadata<InferStandardSchema<OutSchema>>>\n :\n | unknown\n | ResponseWithMetadata<unknown>\n | Promise<unknown>\n | Promise<ResponseWithMetadata<unknown>>;\n\n/**\n * HTTP success status codes that can be returned by endpoints.\n */\nexport enum SuccessStatus {\n /** Standard response for successful HTTP requests */\n OK = 200,\n /** Request has been fulfilled and resulted in a new resource being created */\n Created = 201,\n /** Request has been accepted for processing, but processing is not complete */\n Accepted = 202,\n /** Server successfully processed the request but is not returning any content */\n NoContent = 204,\n /** Server successfully processed the request and is not returning any content, client should reset the document view */\n ResetContent = 205,\n /** Server is delivering only part of the resource due to a range header */\n PartialContent = 206,\n}\n\nexport type EndpointOutput<T> = T extends Endpoint<\n any,\n any,\n any,\n infer OutSchema,\n any,\n any,\n any,\n any\n>\n ? InferStandardSchema<OutSchema>\n : never;\n\nexport type EndpointEvent<T> = T extends Endpoint<\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n infer TEventPublisher\n>\n ? ExtractPublisherMessage<TEventPublisher>\n : never;\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"EndpointBuilder-B3az942t.d.mts","names":[],"sources":["../src/endpoints/EndpointBuilder.ts"],"sourcesContent":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"EndpointBuilder-Cgj1P_ra.cjs","names":["BaseFunctionBuilder","route: TRoute","method: TMethod","ConstructType","publisher: Service<TEventPublisherServiceName, TEventPublisher>","storage: Service<TAuditStorageServiceName, TAuditStorage>","service: Service<TDatabaseServiceName, TDatabase>","description: string","status: SuccessStatus","event: TEvent","tags: string[]","memorySize: number","publisher: Service<TName, T>","schema: T","config: RateLimitConfig","name: TAuthorizers[number] | 'none'","services: T","logger: T","storage: Service<TName, T>","extractor: ActorExtractor<TServices, TSession, TLogger>","audits: MappedAudit<TAuditAction, OutSchema>[]","service: Service<TName, T>","config: RlsConfig<TServices, TSession, TLogger> | false | RlsBypass","RLS_BYPASS","_schema: any","fn: EndpointHandler<\n TInput,\n TServices,\n TLogger,\n OutSchema,\n TSession,\n TDatabase,\n TAuditStorage,\n TAuditAction\n >","authorizer: Authorizer | undefined","Endpoint"],"sources":["../src/endpoints/EndpointBuilder.ts"],"sourcesContent":["import type {\n AuditStorage,\n AuditableAction,\n ExtractStorageAuditAction,\n} from '@geekmidas/audit';\nimport type { EventPublisher, MappedEvent } from '@geekmidas/events';\nimport type { Logger } from '@geekmidas/logger';\nimport type { RateLimitConfig } from '@geekmidas/rate-limit';\nimport type { Service } from '@geekmidas/services';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\nimport uniqBy from 'lodash.uniqby';\nimport { ConstructType } from '../Construct';\nimport { BaseFunctionBuilder } from '../functions';\nimport type { HttpMethod } from '../types';\nimport type { Authorizer, SecurityScheme } from './Authorizer';\nimport { getSecurityScheme } from './Authorizer';\nimport { Endpoint, type EndpointSchemas } from './Endpoint';\nimport type {\n AuthorizeFn,\n EndpointHandler,\n SessionFn,\n SuccessStatus,\n} from './Endpoint';\nimport type { ActorExtractor, MappedAudit } from './audit';\nimport type { RlsBypass, RlsConfig } from './rls';\nimport { RLS_BYPASS } from './rls';\n\nexport class EndpointBuilder<\n TRoute extends string,\n TMethod extends HttpMethod,\n TInput extends EndpointSchemas = {},\n TServices extends Service[] = [],\n TLogger extends Logger = Logger,\n OutSchema extends StandardSchemaV1 | undefined = undefined,\n TSession = unknown,\n TEventPublisher extends EventPublisher<any> | undefined = undefined,\n TEventPublisherServiceName extends string = string,\n TAuthorizers extends readonly string[] = readonly string[],\n TAuditStorage extends AuditStorage | undefined = undefined,\n TAuditStorageServiceName extends string = string,\n TAuditAction extends AuditableAction<string, unknown> = AuditableAction<\n string,\n unknown\n >,\n TDatabase = undefined,\n TDatabaseServiceName extends string = string,\n> extends BaseFunctionBuilder<\n TInput,\n OutSchema,\n TServices,\n TLogger,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName\n> {\n protected schemas: TInput = {} as TInput;\n protected _description?: string;\n protected _status?: SuccessStatus;\n protected _tags?: string[];\n protected _memorySize?: number;\n _getSession: SessionFn<TServices, TLogger, TSession, TDatabase> = () =>\n ({}) as TSession;\n _authorize: AuthorizeFn<TServices, TLogger, TSession> = () => true;\n _rateLimit?: RateLimitConfig;\n _availableAuthorizers: Authorizer[] = [];\n _authorizerName?: TAuthorizers[number];\n _actorExtractor?: ActorExtractor<TServices, TSession, TLogger>;\n _audits: MappedAudit<TAuditAction, OutSchema>[] = [];\n _customSecuritySchemes: Record<string, SecurityScheme> = {};\n _rlsConfig?: RlsConfig<TServices, TSession, TLogger>;\n _rlsBypass?: boolean;\n\n constructor(\n readonly route: TRoute,\n readonly method: TMethod,\n ) {\n super(ConstructType.Endpoint);\n }\n\n // Internal setter for EndpointFactory to set default publisher\n _setPublisher(\n publisher: Service<TEventPublisherServiceName, TEventPublisher>,\n ) {\n this._publisher = publisher;\n }\n\n // Internal setter for EndpointFactory to set default auditor storage\n _setAuditorStorage(\n storage: Service<TAuditStorageServiceName, TAuditStorage>,\n ) {\n this._auditorStorage = storage;\n }\n\n // Internal setter for EndpointFactory to set default database service\n _setDatabaseService(service: Service<TDatabaseServiceName, TDatabase>) {\n this._databaseService = service;\n }\n\n description(description: string): this {\n this._description = description;\n return this;\n }\n\n status(status: SuccessStatus): this {\n this._status = status;\n return this;\n }\n\n override event<TEvent extends MappedEvent<TEventPublisher, OutSchema>>(\n event: TEvent,\n ): this {\n this._events.push(event);\n return this;\n }\n\n tags(tags: string[]): this {\n this._tags = tags;\n return this;\n }\n\n memorySize(memorySize: number): this {\n this._memorySize = memorySize;\n return this;\n }\n\n override publisher<T extends EventPublisher<any>, TName extends string>(\n publisher: Service<TName, T>,\n ): EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n TServices,\n TLogger,\n OutSchema,\n TSession,\n T,\n TName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName\n > {\n this._publisher = publisher as unknown as Service<\n TEventPublisherServiceName,\n TEventPublisher\n >;\n\n return this as unknown as EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n TServices,\n TLogger,\n OutSchema,\n TSession,\n T,\n TName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName\n >;\n }\n\n body<T extends StandardSchemaV1>(\n schema: T,\n ): EndpointBuilder<\n TRoute,\n TMethod,\n Omit<TInput, 'body'> & { body: T },\n TServices,\n TLogger,\n OutSchema,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName\n > {\n this.schemas.body = schema as unknown as T;\n // @ts-ignore\n return this;\n }\n\n search<T extends StandardSchemaV1>(\n schema: T,\n ): EndpointBuilder<\n TRoute,\n TMethod,\n Omit<TInput, 'query'> & { query: T },\n TServices,\n TLogger,\n OutSchema,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName\n > {\n this.schemas.query = schema as unknown as T;\n // @ts-ignore\n return this;\n }\n\n query<T extends StandardSchemaV1>(\n schema: T,\n ): EndpointBuilder<\n TRoute,\n TMethod,\n Omit<TInput, 'query'> & { query: T },\n TServices,\n TLogger,\n OutSchema,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName\n > {\n return this.search(schema);\n }\n\n params<T extends StandardSchemaV1>(\n schema: T,\n ): EndpointBuilder<\n TRoute,\n TMethod,\n Omit<TInput, 'params'> & { params: T },\n TServices,\n TLogger,\n OutSchema,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName\n > {\n this.schemas.params = schema as unknown as T;\n // @ts-ignore\n return this;\n }\n\n rateLimit(config: RateLimitConfig): this {\n this._rateLimit = config;\n return this;\n }\n\n authorizer(\n name: TAuthorizers[number] | 'none',\n ): EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n TServices,\n TLogger,\n OutSchema,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName\n > {\n // Special case: 'none' explicitly marks endpoint as having no authorizer\n if (name === 'none') {\n this._authorizerName = undefined;\n return this;\n }\n\n // Validate that the authorizer exists in available authorizers\n const authorizerExists = this._availableAuthorizers.some(\n (a) => a.name === name,\n );\n if (!authorizerExists && this._availableAuthorizers.length > 0) {\n const available = this._availableAuthorizers\n .map((a) => a.name)\n .join(', ');\n throw new Error(\n `Authorizer \"${name as string}\" not found in available authorizers: ${available}`,\n );\n }\n this._authorizerName = name;\n return this;\n }\n\n services<T extends Service[]>(\n services: T,\n ): EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n [...TServices, ...T],\n TLogger,\n OutSchema,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName\n > {\n this._services = uniqBy(\n [...this._services, ...services],\n (s) => s.serviceName,\n ) as TServices;\n\n return this as unknown as EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n [...TServices, ...T],\n TLogger,\n OutSchema,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName\n >;\n }\n\n logger<T extends Logger>(\n logger: T,\n ): EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n TServices,\n T,\n OutSchema,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName\n > {\n this._logger = logger as unknown as TLogger;\n\n return this as unknown as EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n TServices,\n T,\n OutSchema,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName\n >;\n }\n\n output<T extends StandardSchemaV1>(\n schema: T,\n ): EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n TServices,\n TLogger,\n T,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName\n > {\n this.outputSchema = schema as unknown as OutSchema;\n\n return this as unknown as EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n TServices,\n TLogger,\n T,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName\n >;\n }\n\n /**\n * Set the auditor storage service for this endpoint.\n * This enables audit functionality and makes `auditor` available in the handler context.\n * The audit action type is automatically inferred from the storage's generic parameter.\n */\n override auditor<T extends AuditStorage<any>, TName extends string>(\n storage: Service<TName, T>,\n ): EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n TServices,\n TLogger,\n OutSchema,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n T,\n TName,\n ExtractStorageAuditAction<T>,\n TDatabase,\n TDatabaseServiceName\n > {\n this._auditorStorage = storage as unknown as Service<\n TAuditStorageServiceName,\n TAuditStorage\n >;\n\n return this as unknown as EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n TServices,\n TLogger,\n OutSchema,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n T,\n TName,\n ExtractStorageAuditAction<T>,\n TDatabase,\n TDatabaseServiceName\n >;\n }\n\n /**\n * Set the actor extractor function for audit records.\n * The actor is extracted from the request context and attached to all audits.\n */\n actor(\n extractor: ActorExtractor<TServices, TSession, TLogger>,\n ): EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n TServices,\n TLogger,\n OutSchema,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName\n > {\n this._actorExtractor = extractor;\n return this;\n }\n\n /**\n * Add declarative audit definitions that are processed after the handler executes.\n * Similar to `.event()` for events, but for audits.\n *\n * @example\n * ```typescript\n * .audit<AppAuditAction>([\n * {\n * type: 'user.created',\n * payload: (response) => ({ userId: response.id, email: response.email }),\n * when: (response) => response.active,\n * entityId: (response) => response.id,\n * table: 'users',\n * },\n * ])\n * ```\n */\n audit(audits: MappedAudit<TAuditAction, OutSchema>[]): this {\n this._audits = audits;\n return this;\n }\n\n /**\n * Set the database service for this endpoint.\n * The database will be available in the handler context as `db`.\n * When audit storage is configured and uses the same database,\n * `db` will automatically be the transaction for ACID compliance.\n *\n * @example\n * ```typescript\n * .database(databaseService)\n * .handle(async ({ db }) => {\n * // db is the raw database or transaction (when auditor uses same db)\n * return await db.selectFrom('users').selectAll().execute();\n * })\n * ```\n */\n override database<T, TName extends string>(\n service: Service<TName, T>,\n ): EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n TServices,\n TLogger,\n OutSchema,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n T,\n TName\n > {\n this._databaseService = service as unknown as Service<\n TDatabaseServiceName,\n TDatabase\n >;\n\n return this as unknown as EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n TServices,\n TLogger,\n OutSchema,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n T,\n TName\n >;\n }\n\n /**\n * Configure RLS (Row-Level Security) context for this endpoint.\n * Pass `false` or `RLS_BYPASS` to explicitly bypass RLS for this endpoint.\n *\n * @example\n * ```typescript\n * // Custom RLS config for this endpoint\n * .rls({\n * extractor: ({ session }) => ({\n * user_id: session.userId,\n * tenant_id: session.tenantId,\n * }),\n * prefix: 'app',\n * })\n *\n * // Bypass RLS (for admin endpoints)\n * .rls(false)\n * ```\n */\n rls(\n config: RlsConfig<TServices, TSession, TLogger> | false | RlsBypass,\n ): this {\n if (config === false || config === RLS_BYPASS) {\n this._rlsBypass = true;\n this._rlsConfig = undefined;\n } else {\n this._rlsConfig = config;\n this._rlsBypass = false;\n }\n return this;\n }\n\n /**\n * Explicitly bypass RLS for this endpoint.\n * Useful for admin operations that need unrestricted database access.\n *\n * @example\n * ```typescript\n * .rlsBypass()\n * .handle(async ({ db }) => {\n * // Full access, no RLS filtering\n * return db.selectFrom('orders').selectAll().execute();\n * })\n * ```\n */\n rlsBypass(): this {\n this._rlsBypass = true;\n this._rlsConfig = undefined;\n return this;\n }\n\n // EndpointBuilder doesn't have a generic input method - it uses body, query, params instead\n input(_schema: any): any {\n throw new Error(\n 'EndpointBuilder does not support generic input. Use body(), query(), or params() instead.',\n );\n }\n\n handle(\n fn: EndpointHandler<\n TInput,\n TServices,\n TLogger,\n OutSchema,\n TSession,\n TDatabase,\n TAuditStorage,\n TAuditAction\n >,\n ): Endpoint<\n TRoute,\n TMethod,\n TInput,\n OutSchema,\n TServices,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName\n > {\n // Find authorizer metadata if name is set\n // If the authorizer name is set but not in availableAuthorizers, create a simple authorizer object\n let authorizer: Authorizer | undefined;\n if (this._authorizerName) {\n const existingAuthorizer = this._availableAuthorizers.find(\n (a) => a.name === this._authorizerName,\n );\n\n if (existingAuthorizer) {\n authorizer = existingAuthorizer;\n } else {\n // Create authorizer with security scheme if available (built-in or custom)\n const securityScheme = getSecurityScheme(\n this._authorizerName as string,\n this._customSecuritySchemes,\n );\n authorizer = {\n name: this._authorizerName as string,\n securityScheme,\n };\n }\n }\n\n return new Endpoint({\n fn,\n method: this.method,\n route: this.route,\n description: this._description,\n tags: this._tags,\n input: this.schemas,\n output: this.outputSchema,\n services: this._services,\n logger: this._logger,\n timeout: this._timeout,\n memorySize: this._memorySize,\n authorize: this._authorize,\n status: this._status,\n getSession: this._getSession,\n rateLimit: this._rateLimit,\n publisherService: this._publisher,\n events: this._events,\n authorizer,\n auditorStorageService: this._auditorStorage,\n actorExtractor: this._actorExtractor,\n audits: this._audits,\n databaseService: this._databaseService,\n rlsConfig: this._rlsConfig,\n rlsBypass: this._rlsBypass,\n });\n }\n}\n"],"mappings":";;;;;;;;;AA2BA,IAAa,kBAAb,cAmBUA,gDAWR;CACA,AAAU,UAAkB,CAAE;CAC9B,AAAU;CACV,AAAU;CACV,AAAU;CACV,AAAU;CACV,cAAkE,OAC/D,CAAE;CACL,aAAwD,MAAM;CAC9D;CACA,wBAAsC,CAAE;CACxC;CACA;CACA,UAAkD,CAAE;CACpD,yBAAyD,CAAE;CAC3D;CACA;CAEA,YACWC,OACAC,QACT;AACA,QAAMC,gCAAc,SAAS;EAHpB;EACA;CAGV;CAGD,cACEC,WACA;AACA,OAAK,aAAa;CACnB;CAGD,mBACEC,SACA;AACA,OAAK,kBAAkB;CACxB;CAGD,oBAAoBC,SAAmD;AACrE,OAAK,mBAAmB;CACzB;CAED,YAAYC,aAA2B;AACrC,OAAK,eAAe;AACpB,SAAO;CACR;CAED,OAAOC,QAA6B;AAClC,OAAK,UAAU;AACf,SAAO;CACR;CAED,AAAS,MACPC,OACM;AACN,OAAK,QAAQ,KAAK,MAAM;AACxB,SAAO;CACR;CAED,KAAKC,MAAsB;AACzB,OAAK,QAAQ;AACb,SAAO;CACR;CAED,WAAWC,YAA0B;AACnC,OAAK,cAAc;AACnB,SAAO;CACR;CAED,AAAS,UACPC,WAiBA;AACA,OAAK,aAAa;AAKlB,SAAO;CAiBR;CAED,KACEC,QAiBA;AACA,OAAK,QAAQ,OAAO;AAEpB,SAAO;CACR;CAED,OACEA,QAiBA;AACA,OAAK,QAAQ,QAAQ;AAErB,SAAO;CACR;CAED,MACEA,QAiBA;AACA,SAAO,KAAK,OAAO,OAAO;CAC3B;CAED,OACEA,QAiBA;AACA,OAAK,QAAQ,SAAS;AAEtB,SAAO;CACR;CAED,UAAUC,QAA+B;AACvC,OAAK,aAAa;AAClB,SAAO;CACR;CAED,WACEC,MAiBA;AAEA,MAAI,SAAS,QAAQ;AACnB,QAAK;AACL,UAAO;EACR;EAGD,MAAM,mBAAmB,KAAK,sBAAsB,KAClD,CAAC,MAAM,EAAE,SAAS,KACnB;AACD,OAAK,oBAAoB,KAAK,sBAAsB,SAAS,GAAG;GAC9D,MAAM,YAAY,KAAK,sBACpB,IAAI,CAAC,MAAM,EAAE,KAAK,CAClB,KAAK,KAAK;AACb,SAAM,IAAI,OACP,cAAc,KAAe,wCAAwC,UAAU;EAEnF;AACD,OAAK,kBAAkB;AACvB,SAAO;CACR;CAED,SACEC,UAiBA;AACA,OAAK,YAAY,2BACf,CAAC,GAAG,KAAK,WAAW,GAAG,QAAS,GAChC,CAAC,MAAM,EAAE,YACV;AAED,SAAO;CAiBR;CAED,OACEC,QAiBA;AACA,OAAK,UAAU;AAEf,SAAO;CAiBR;CAED,OACEJ,QAiBA;AACA,OAAK,eAAe;AAEpB,SAAO;CAiBR;;;;;;CAOD,AAAS,QACPK,SAiBA;AACA,OAAK,kBAAkB;AAKvB,SAAO;CAiBR;;;;;CAMD,MACEC,WAiBA;AACA,OAAK,kBAAkB;AACvB,SAAO;CACR;;;;;;;;;;;;;;;;;;CAmBD,MAAMC,QAAsD;AAC1D,OAAK,UAAU;AACf,SAAO;CACR;;;;;;;;;;;;;;;;CAiBD,AAAS,SACPC,SAiBA;AACA,OAAK,mBAAmB;AAKxB,SAAO;CAiBR;;;;;;;;;;;;;;;;;;;;CAqBD,IACEC,QACM;AACN,MAAI,WAAW,SAAS,WAAWC,wBAAY;AAC7C,QAAK,aAAa;AAClB,QAAK;EACN,OAAM;AACL,QAAK,aAAa;AAClB,QAAK,aAAa;EACnB;AACD,SAAO;CACR;;;;;;;;;;;;;;CAeD,YAAkB;AAChB,OAAK,aAAa;AAClB,OAAK;AACL,SAAO;CACR;CAGD,MAAMC,SAAmB;AACvB,QAAM,IAAI,MACR;CAEH;CAED,OACEC,IAyBA;EAGA,IAAIC;AACJ,MAAI,KAAK,iBAAiB;GACxB,MAAM,qBAAqB,KAAK,sBAAsB,KACpD,CAAC,MAAM,EAAE,SAAS,KAAK,gBACxB;AAED,OAAI,mBACF,cAAa;QACR;IAEL,MAAM,iBAAiB,qCACrB,KAAK,iBACL,KAAK,uBACN;AACD,iBAAa;KACX,MAAM,KAAK;KACX;IACD;GACF;EACF;AAED,SAAO,IAAIC,0BAAS;GAClB;GACA,QAAQ,KAAK;GACb,OAAO,KAAK;GACZ,aAAa,KAAK;GAClB,MAAM,KAAK;GACX,OAAO,KAAK;GACZ,QAAQ,KAAK;GACb,UAAU,KAAK;GACf,QAAQ,KAAK;GACb,SAAS,KAAK;GACd,YAAY,KAAK;GACjB,WAAW,KAAK;GAChB,QAAQ,KAAK;GACb,YAAY,KAAK;GACjB,WAAW,KAAK;GAChB,kBAAkB,KAAK;GACvB,QAAQ,KAAK;GACb;GACA,uBAAuB,KAAK;GAC5B,gBAAgB,KAAK;GACrB,QAAQ,KAAK;GACb,iBAAiB,KAAK;GACtB,WAAW,KAAK;GAChB,WAAW,KAAK;EACjB;CACF;AACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"EndpointBuilder-DIy_m1bu.d.cts","names":[],"sources":["../src/endpoints/EndpointBuilder.ts"],"sourcesContent":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"EndpointBuilder-DnCB1h1j.mjs","names":["route: TRoute","method: TMethod","publisher: Service<TEventPublisherServiceName, TEventPublisher>","storage: Service<TAuditStorageServiceName, TAuditStorage>","service: Service<TDatabaseServiceName, TDatabase>","description: string","status: SuccessStatus","event: TEvent","tags: string[]","memorySize: number","publisher: Service<TName, T>","schema: T","config: RateLimitConfig","name: TAuthorizers[number] | 'none'","services: T","logger: T","storage: Service<TName, T>","extractor: ActorExtractor<TServices, TSession, TLogger>","audits: MappedAudit<TAuditAction, OutSchema>[]","service: Service<TName, T>","config: RlsConfig<TServices, TSession, TLogger> | false | RlsBypass","_schema: any","fn: EndpointHandler<\n TInput,\n TServices,\n TLogger,\n OutSchema,\n TSession,\n TDatabase,\n TAuditStorage,\n TAuditAction\n >","authorizer: Authorizer | undefined"],"sources":["../src/endpoints/EndpointBuilder.ts"],"sourcesContent":["import type {\n AuditStorage,\n AuditableAction,\n ExtractStorageAuditAction,\n} from '@geekmidas/audit';\nimport type { EventPublisher, MappedEvent } from '@geekmidas/events';\nimport type { Logger } from '@geekmidas/logger';\nimport type { RateLimitConfig } from '@geekmidas/rate-limit';\nimport type { Service } from '@geekmidas/services';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\nimport uniqBy from 'lodash.uniqby';\nimport { ConstructType } from '../Construct';\nimport { BaseFunctionBuilder } from '../functions';\nimport type { HttpMethod } from '../types';\nimport type { Authorizer, SecurityScheme } from './Authorizer';\nimport { getSecurityScheme } from './Authorizer';\nimport { Endpoint, type EndpointSchemas } from './Endpoint';\nimport type {\n AuthorizeFn,\n EndpointHandler,\n SessionFn,\n SuccessStatus,\n} from './Endpoint';\nimport type { ActorExtractor, MappedAudit } from './audit';\nimport type { RlsBypass, RlsConfig } from './rls';\nimport { RLS_BYPASS } from './rls';\n\nexport class EndpointBuilder<\n TRoute extends string,\n TMethod extends HttpMethod,\n TInput extends EndpointSchemas = {},\n TServices extends Service[] = [],\n TLogger extends Logger = Logger,\n OutSchema extends StandardSchemaV1 | undefined = undefined,\n TSession = unknown,\n TEventPublisher extends EventPublisher<any> | undefined = undefined,\n TEventPublisherServiceName extends string = string,\n TAuthorizers extends readonly string[] = readonly string[],\n TAuditStorage extends AuditStorage | undefined = undefined,\n TAuditStorageServiceName extends string = string,\n TAuditAction extends AuditableAction<string, unknown> = AuditableAction<\n string,\n unknown\n >,\n TDatabase = undefined,\n TDatabaseServiceName extends string = string,\n> extends BaseFunctionBuilder<\n TInput,\n OutSchema,\n TServices,\n TLogger,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName\n> {\n protected schemas: TInput = {} as TInput;\n protected _description?: string;\n protected _status?: SuccessStatus;\n protected _tags?: string[];\n protected _memorySize?: number;\n _getSession: SessionFn<TServices, TLogger, TSession, TDatabase> = () =>\n ({}) as TSession;\n _authorize: AuthorizeFn<TServices, TLogger, TSession> = () => true;\n _rateLimit?: RateLimitConfig;\n _availableAuthorizers: Authorizer[] = [];\n _authorizerName?: TAuthorizers[number];\n _actorExtractor?: ActorExtractor<TServices, TSession, TLogger>;\n _audits: MappedAudit<TAuditAction, OutSchema>[] = [];\n _customSecuritySchemes: Record<string, SecurityScheme> = {};\n _rlsConfig?: RlsConfig<TServices, TSession, TLogger>;\n _rlsBypass?: boolean;\n\n constructor(\n readonly route: TRoute,\n readonly method: TMethod,\n ) {\n super(ConstructType.Endpoint);\n }\n\n // Internal setter for EndpointFactory to set default publisher\n _setPublisher(\n publisher: Service<TEventPublisherServiceName, TEventPublisher>,\n ) {\n this._publisher = publisher;\n }\n\n // Internal setter for EndpointFactory to set default auditor storage\n _setAuditorStorage(\n storage: Service<TAuditStorageServiceName, TAuditStorage>,\n ) {\n this._auditorStorage = storage;\n }\n\n // Internal setter for EndpointFactory to set default database service\n _setDatabaseService(service: Service<TDatabaseServiceName, TDatabase>) {\n this._databaseService = service;\n }\n\n description(description: string): this {\n this._description = description;\n return this;\n }\n\n status(status: SuccessStatus): this {\n this._status = status;\n return this;\n }\n\n override event<TEvent extends MappedEvent<TEventPublisher, OutSchema>>(\n event: TEvent,\n ): this {\n this._events.push(event);\n return this;\n }\n\n tags(tags: string[]): this {\n this._tags = tags;\n return this;\n }\n\n memorySize(memorySize: number): this {\n this._memorySize = memorySize;\n return this;\n }\n\n override publisher<T extends EventPublisher<any>, TName extends string>(\n publisher: Service<TName, T>,\n ): EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n TServices,\n TLogger,\n OutSchema,\n TSession,\n T,\n TName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName\n > {\n this._publisher = publisher as unknown as Service<\n TEventPublisherServiceName,\n TEventPublisher\n >;\n\n return this as unknown as EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n TServices,\n TLogger,\n OutSchema,\n TSession,\n T,\n TName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName\n >;\n }\n\n body<T extends StandardSchemaV1>(\n schema: T,\n ): EndpointBuilder<\n TRoute,\n TMethod,\n Omit<TInput, 'body'> & { body: T },\n TServices,\n TLogger,\n OutSchema,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName\n > {\n this.schemas.body = schema as unknown as T;\n // @ts-ignore\n return this;\n }\n\n search<T extends StandardSchemaV1>(\n schema: T,\n ): EndpointBuilder<\n TRoute,\n TMethod,\n Omit<TInput, 'query'> & { query: T },\n TServices,\n TLogger,\n OutSchema,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName\n > {\n this.schemas.query = schema as unknown as T;\n // @ts-ignore\n return this;\n }\n\n query<T extends StandardSchemaV1>(\n schema: T,\n ): EndpointBuilder<\n TRoute,\n TMethod,\n Omit<TInput, 'query'> & { query: T },\n TServices,\n TLogger,\n OutSchema,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName\n > {\n return this.search(schema);\n }\n\n params<T extends StandardSchemaV1>(\n schema: T,\n ): EndpointBuilder<\n TRoute,\n TMethod,\n Omit<TInput, 'params'> & { params: T },\n TServices,\n TLogger,\n OutSchema,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName\n > {\n this.schemas.params = schema as unknown as T;\n // @ts-ignore\n return this;\n }\n\n rateLimit(config: RateLimitConfig): this {\n this._rateLimit = config;\n return this;\n }\n\n authorizer(\n name: TAuthorizers[number] | 'none',\n ): EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n TServices,\n TLogger,\n OutSchema,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName\n > {\n // Special case: 'none' explicitly marks endpoint as having no authorizer\n if (name === 'none') {\n this._authorizerName = undefined;\n return this;\n }\n\n // Validate that the authorizer exists in available authorizers\n const authorizerExists = this._availableAuthorizers.some(\n (a) => a.name === name,\n );\n if (!authorizerExists && this._availableAuthorizers.length > 0) {\n const available = this._availableAuthorizers\n .map((a) => a.name)\n .join(', ');\n throw new Error(\n `Authorizer \"${name as string}\" not found in available authorizers: ${available}`,\n );\n }\n this._authorizerName = name;\n return this;\n }\n\n services<T extends Service[]>(\n services: T,\n ): EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n [...TServices, ...T],\n TLogger,\n OutSchema,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName\n > {\n this._services = uniqBy(\n [...this._services, ...services],\n (s) => s.serviceName,\n ) as TServices;\n\n return this as unknown as EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n [...TServices, ...T],\n TLogger,\n OutSchema,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName\n >;\n }\n\n logger<T extends Logger>(\n logger: T,\n ): EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n TServices,\n T,\n OutSchema,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName\n > {\n this._logger = logger as unknown as TLogger;\n\n return this as unknown as EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n TServices,\n T,\n OutSchema,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName\n >;\n }\n\n output<T extends StandardSchemaV1>(\n schema: T,\n ): EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n TServices,\n TLogger,\n T,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName\n > {\n this.outputSchema = schema as unknown as OutSchema;\n\n return this as unknown as EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n TServices,\n TLogger,\n T,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName\n >;\n }\n\n /**\n * Set the auditor storage service for this endpoint.\n * This enables audit functionality and makes `auditor` available in the handler context.\n * The audit action type is automatically inferred from the storage's generic parameter.\n */\n override auditor<T extends AuditStorage<any>, TName extends string>(\n storage: Service<TName, T>,\n ): EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n TServices,\n TLogger,\n OutSchema,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n T,\n TName,\n ExtractStorageAuditAction<T>,\n TDatabase,\n TDatabaseServiceName\n > {\n this._auditorStorage = storage as unknown as Service<\n TAuditStorageServiceName,\n TAuditStorage\n >;\n\n return this as unknown as EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n TServices,\n TLogger,\n OutSchema,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n T,\n TName,\n ExtractStorageAuditAction<T>,\n TDatabase,\n TDatabaseServiceName\n >;\n }\n\n /**\n * Set the actor extractor function for audit records.\n * The actor is extracted from the request context and attached to all audits.\n */\n actor(\n extractor: ActorExtractor<TServices, TSession, TLogger>,\n ): EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n TServices,\n TLogger,\n OutSchema,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName\n > {\n this._actorExtractor = extractor;\n return this;\n }\n\n /**\n * Add declarative audit definitions that are processed after the handler executes.\n * Similar to `.event()` for events, but for audits.\n *\n * @example\n * ```typescript\n * .audit<AppAuditAction>([\n * {\n * type: 'user.created',\n * payload: (response) => ({ userId: response.id, email: response.email }),\n * when: (response) => response.active,\n * entityId: (response) => response.id,\n * table: 'users',\n * },\n * ])\n * ```\n */\n audit(audits: MappedAudit<TAuditAction, OutSchema>[]): this {\n this._audits = audits;\n return this;\n }\n\n /**\n * Set the database service for this endpoint.\n * The database will be available in the handler context as `db`.\n * When audit storage is configured and uses the same database,\n * `db` will automatically be the transaction for ACID compliance.\n *\n * @example\n * ```typescript\n * .database(databaseService)\n * .handle(async ({ db }) => {\n * // db is the raw database or transaction (when auditor uses same db)\n * return await db.selectFrom('users').selectAll().execute();\n * })\n * ```\n */\n override database<T, TName extends string>(\n service: Service<TName, T>,\n ): EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n TServices,\n TLogger,\n OutSchema,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n T,\n TName\n > {\n this._databaseService = service as unknown as Service<\n TDatabaseServiceName,\n TDatabase\n >;\n\n return this as unknown as EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n TServices,\n TLogger,\n OutSchema,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n T,\n TName\n >;\n }\n\n /**\n * Configure RLS (Row-Level Security) context for this endpoint.\n * Pass `false` or `RLS_BYPASS` to explicitly bypass RLS for this endpoint.\n *\n * @example\n * ```typescript\n * // Custom RLS config for this endpoint\n * .rls({\n * extractor: ({ session }) => ({\n * user_id: session.userId,\n * tenant_id: session.tenantId,\n * }),\n * prefix: 'app',\n * })\n *\n * // Bypass RLS (for admin endpoints)\n * .rls(false)\n * ```\n */\n rls(\n config: RlsConfig<TServices, TSession, TLogger> | false | RlsBypass,\n ): this {\n if (config === false || config === RLS_BYPASS) {\n this._rlsBypass = true;\n this._rlsConfig = undefined;\n } else {\n this._rlsConfig = config;\n this._rlsBypass = false;\n }\n return this;\n }\n\n /**\n * Explicitly bypass RLS for this endpoint.\n * Useful for admin operations that need unrestricted database access.\n *\n * @example\n * ```typescript\n * .rlsBypass()\n * .handle(async ({ db }) => {\n * // Full access, no RLS filtering\n * return db.selectFrom('orders').selectAll().execute();\n * })\n * ```\n */\n rlsBypass(): this {\n this._rlsBypass = true;\n this._rlsConfig = undefined;\n return this;\n }\n\n // EndpointBuilder doesn't have a generic input method - it uses body, query, params instead\n input(_schema: any): any {\n throw new Error(\n 'EndpointBuilder does not support generic input. Use body(), query(), or params() instead.',\n );\n }\n\n handle(\n fn: EndpointHandler<\n TInput,\n TServices,\n TLogger,\n OutSchema,\n TSession,\n TDatabase,\n TAuditStorage,\n TAuditAction\n >,\n ): Endpoint<\n TRoute,\n TMethod,\n TInput,\n OutSchema,\n TServices,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName\n > {\n // Find authorizer metadata if name is set\n // If the authorizer name is set but not in availableAuthorizers, create a simple authorizer object\n let authorizer: Authorizer | undefined;\n if (this._authorizerName) {\n const existingAuthorizer = this._availableAuthorizers.find(\n (a) => a.name === this._authorizerName,\n );\n\n if (existingAuthorizer) {\n authorizer = existingAuthorizer;\n } else {\n // Create authorizer with security scheme if available (built-in or custom)\n const securityScheme = getSecurityScheme(\n this._authorizerName as string,\n this._customSecuritySchemes,\n );\n authorizer = {\n name: this._authorizerName as string,\n securityScheme,\n };\n }\n }\n\n return new Endpoint({\n fn,\n method: this.method,\n route: this.route,\n description: this._description,\n tags: this._tags,\n input: this.schemas,\n output: this.outputSchema,\n services: this._services,\n logger: this._logger,\n timeout: this._timeout,\n memorySize: this._memorySize,\n authorize: this._authorize,\n status: this._status,\n getSession: this._getSession,\n rateLimit: this._rateLimit,\n publisherService: this._publisher,\n events: this._events,\n authorizer,\n auditorStorageService: this._auditorStorage,\n actorExtractor: this._actorExtractor,\n audits: this._audits,\n databaseService: this._databaseService,\n rlsConfig: this._rlsConfig,\n rlsBypass: this._rlsBypass,\n });\n }\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"EndpointFactory-C-0nE6Jg.d.mts","names":[],"sources":["../src/endpoints/EndpointFactory.ts"],"sourcesContent":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"EndpointFactory-CYj6BYok.cjs","names":["ConsoleLogger","path: P","basePath: TBasePath","authorizers: T","schemes: T","name:\n | BuiltInSecuritySchemeId\n | keyof TSecuritySchemes\n | TAuthorizers[number]\n | 'none'","path: TPath","fn: AuthorizeFn<TServices, TLogger, TSession>","services: S","logger: L","publisher: Service<TServiceName, T>","session: SessionFn<TServices, TLogger, T, TDatabase>","service: Service<TName, T>","storage: Service<TName, T>","extractor: ActorExtractor<TServices, TSession, TLogger>","config: TConfig","method: TMethod","EndpointBuilder"],"sources":["../src/endpoints/EndpointFactory.ts"],"sourcesContent":["import type {\n AuditStorage,\n AuditableAction,\n ExtractStorageAuditAction,\n} from '@geekmidas/audit';\nimport type { EventPublisher, MappedEvent } from '@geekmidas/events';\nimport type { Logger } from '@geekmidas/logger';\nimport { ConsoleLogger } from '@geekmidas/logger/console';\nimport type { Service } from '@geekmidas/services';\nimport uniqBy from 'lodash.uniqby';\nimport type { HttpMethod } from '../types';\nimport type {\n Authorizer,\n BuiltInSecuritySchemeId,\n SecurityScheme,\n} from './Authorizer';\nimport type { AuthorizeFn, SessionFn } from './Endpoint';\nimport { EndpointBuilder } from './EndpointBuilder';\nimport type { ActorExtractor } from './audit';\nimport type { RlsConfig } from './rls';\n\n// Re-export SecurityScheme to make the type portable in declaration files\nexport type { SecurityScheme } from './Authorizer';\n\nconst DEFAULT_LOGGER = new ConsoleLogger() as any;\n\nexport class EndpointFactory<\n TServices extends Service[] = [],\n TBasePath extends string = '',\n TLogger extends Logger = Logger,\n TSession = unknown,\n TEventPublisher extends EventPublisher<any> | undefined = undefined,\n TEventPublisherServiceName extends string = string,\n TAuthorizers extends readonly string[] = readonly string[],\n TAuditStorage extends AuditStorage<any> | undefined = undefined,\n TAuditStorageServiceName extends string = string,\n TAuditAction extends AuditableAction<\n string,\n unknown\n > = ExtractStorageAuditAction<NonNullable<TAuditStorage>>,\n TDatabase = undefined,\n TDatabaseServiceName extends string = string,\n TSecuritySchemes extends Record<string, SecurityScheme> = Record<\n string,\n SecurityScheme\n >,\n TRlsConfig extends\n | RlsConfig<TServices, TSession, TLogger>\n | undefined = undefined,\n> {\n // @ts-ignore\n private defaultServices: TServices;\n private basePath: TBasePath = '' as TBasePath;\n private defaultAuthorizeFn?: AuthorizeFn<TServices, TLogger, TSession>;\n private defaultEventPublisher:\n | Service<TEventPublisherServiceName, TEventPublisher>\n | undefined;\n private defaultSessionExtractor?: SessionFn<\n TServices,\n TLogger,\n TSession,\n TDatabase\n >;\n private defaultLogger: TLogger = DEFAULT_LOGGER;\n private availableAuthorizers: Authorizer[] = [];\n private defaultAuthorizerName?: TAuthorizers[number];\n private defaultAuditorStorage:\n | Service<TAuditStorageServiceName, TAuditStorage>\n | undefined;\n private defaultDatabaseService:\n | Service<TDatabaseServiceName, TDatabase>\n | undefined;\n private defaultActorExtractor?: ActorExtractor<TServices, TSession, TLogger>;\n private customSecuritySchemes: TSecuritySchemes = {} as TSecuritySchemes;\n private defaultRlsConfig?: TRlsConfig;\n\n constructor({\n basePath,\n defaultAuthorizeFn,\n defaultLogger,\n defaultSessionExtractor,\n // @ts-ignore\n defaultServices = [] as TServices,\n defaultEventPublisher,\n availableAuthorizers = [],\n defaultAuthorizerName,\n defaultAuditorStorage,\n defaultDatabaseService,\n defaultActorExtractor,\n customSecuritySchemes = {} as TSecuritySchemes,\n defaultRlsConfig,\n }: EndpointFactoryOptions<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes,\n TRlsConfig\n > = {}) {\n // Initialize default services\n this.defaultServices = uniqBy(\n defaultServices,\n (s) => s.serviceName,\n ) as TServices;\n\n this.basePath = basePath || ('' as TBasePath);\n this.defaultAuthorizeFn = defaultAuthorizeFn;\n this.defaultLogger = defaultLogger || (DEFAULT_LOGGER as TLogger);\n this.defaultSessionExtractor = defaultSessionExtractor;\n this.defaultEventPublisher = defaultEventPublisher;\n this.availableAuthorizers = availableAuthorizers;\n this.defaultAuthorizerName = defaultAuthorizerName;\n this.defaultAuditorStorage = defaultAuditorStorage;\n this.defaultDatabaseService = defaultDatabaseService;\n this.defaultActorExtractor = defaultActorExtractor;\n this.customSecuritySchemes = customSecuritySchemes;\n this.defaultRlsConfig = defaultRlsConfig;\n }\n\n static joinPaths<TBasePath extends string, P extends string>(\n path: P,\n basePath: TBasePath = '' as TBasePath,\n ): JoinPaths<TBasePath, P> {\n // Handle empty cases\n if (!basePath && !path) return '/' as JoinPaths<TBasePath, P>;\n if (!basePath)\n return (path.startsWith('/') ? path : '/' + path) as JoinPaths<\n TBasePath,\n P\n >;\n if (!path)\n return (\n basePath.startsWith('/') ? basePath : '/' + basePath\n ) as JoinPaths<TBasePath, P>;\n\n const base = basePath.endsWith('/') ? basePath.slice(0, -1) : basePath;\n const segment = path.startsWith('/') ? path : '/' + path;\n\n let result = base + segment;\n\n // Ensure leading slash\n if (!result.startsWith('/')) {\n result = '/' + result;\n }\n\n // Normalize multiple slashes (except in the middle of the path where they might be intentional)\n result = result.replace(/^\\/+/g, '/');\n\n // Remove trailing slash unless it's the root path \"/\"\n if (result.length > 1 && result.endsWith('/')) {\n result = result.slice(0, -1);\n }\n\n return result as JoinPaths<TBasePath, P>;\n }\n\n // Configure available authorizers\n authorizers<const T extends readonly string[]>(\n authorizers: T,\n ): EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n T,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes,\n TRlsConfig\n > {\n const authorizerConfigs = authorizers.map((name) => ({\n name,\n }));\n return new EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n T,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes,\n TRlsConfig\n >({\n defaultServices: this.defaultServices,\n basePath: this.basePath,\n defaultAuthorizeFn: this.defaultAuthorizeFn,\n defaultLogger: this.defaultLogger,\n defaultSessionExtractor: this.defaultSessionExtractor,\n defaultEventPublisher: this.defaultEventPublisher,\n availableAuthorizers: authorizerConfigs,\n defaultAuthorizerName: this.defaultAuthorizerName,\n defaultAuditorStorage: this.defaultAuditorStorage,\n defaultDatabaseService: this.defaultDatabaseService,\n defaultActorExtractor: this.defaultActorExtractor,\n customSecuritySchemes: this.customSecuritySchemes,\n defaultRlsConfig: this.defaultRlsConfig,\n });\n }\n\n /**\n * Define custom security schemes for this factory.\n * These extend the built-in schemes (jwt, bearer, apiKey, oauth2, oidc).\n *\n * @example\n * ```typescript\n * const router = e.securitySchemes({\n * awsIamSigV4: {\n * type: 'apiKey',\n * in: 'header',\n * name: 'Authorization',\n * 'x-amazon-apigateway-authtype': 'awsSigv4',\n * },\n * });\n * ```\n */\n securitySchemes<T extends Record<string, SecurityScheme>>(\n schemes: T,\n ): EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes & T,\n TRlsConfig\n > {\n return new EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes & T,\n TRlsConfig\n >({\n defaultServices: this.defaultServices,\n basePath: this.basePath,\n defaultAuthorizeFn: this.defaultAuthorizeFn,\n defaultLogger: this.defaultLogger,\n defaultSessionExtractor: this.defaultSessionExtractor,\n defaultEventPublisher: this.defaultEventPublisher,\n availableAuthorizers: this.availableAuthorizers,\n defaultAuthorizerName: this.defaultAuthorizerName,\n defaultAuditorStorage: this.defaultAuditorStorage,\n defaultDatabaseService: this.defaultDatabaseService,\n defaultActorExtractor: this.defaultActorExtractor,\n customSecuritySchemes: {\n ...this.customSecuritySchemes,\n ...schemes,\n } as TSecuritySchemes & T,\n defaultRlsConfig: this.defaultRlsConfig,\n });\n }\n\n /**\n * Set the default authorizer for all endpoints created from this factory.\n * Individual endpoints can override this by calling `.authorizer()` on the builder.\n * Use `'none'` to explicitly disable authorization for all endpoints.\n *\n * Accepts:\n * - Built-in security scheme names: 'jwt', 'bearer', 'apiKey', 'oauth2', 'oidc'\n * - Custom security scheme names defined via `.securitySchemes()`\n * - 'none' to disable authorization\n */\n authorizer(\n name:\n | BuiltInSecuritySchemeId\n | keyof TSecuritySchemes\n | TAuthorizers[number]\n | 'none',\n ): EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes,\n TRlsConfig\n > {\n // Validate that the authorizer exists in available authorizers (if authorizers() was called)\n if (name !== 'none' && this.availableAuthorizers.length > 0) {\n const authorizerExists = this.availableAuthorizers.some(\n (a) => a.name === name,\n );\n if (!authorizerExists) {\n const available = this.availableAuthorizers\n .map((a) => a.name)\n .join(', ');\n throw new Error(\n `Authorizer \"${name as string}\" not found in available authorizers: ${available}`,\n );\n }\n }\n\n return new EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes,\n TRlsConfig\n >({\n defaultServices: this.defaultServices,\n basePath: this.basePath,\n defaultAuthorizeFn: this.defaultAuthorizeFn,\n defaultLogger: this.defaultLogger,\n defaultSessionExtractor: this.defaultSessionExtractor,\n defaultEventPublisher: this.defaultEventPublisher,\n availableAuthorizers: this.availableAuthorizers,\n defaultAuthorizerName:\n name === 'none' ? undefined : (name as TAuthorizers[number]),\n defaultAuditorStorage: this.defaultAuditorStorage,\n defaultDatabaseService: this.defaultDatabaseService,\n defaultActorExtractor: this.defaultActorExtractor,\n customSecuritySchemes: this.customSecuritySchemes,\n defaultRlsConfig: this.defaultRlsConfig,\n });\n }\n\n // Create a sub-router with a path prefix\n route<TPath extends string>(\n path: TPath,\n ): EndpointFactory<\n TServices,\n JoinPaths<TBasePath, TPath>,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes,\n TRlsConfig\n > {\n const newBasePath = EndpointFactory.joinPaths(path, this.basePath);\n return new EndpointFactory<\n TServices,\n JoinPaths<TBasePath, TPath>,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes,\n TRlsConfig\n >({\n defaultServices: this.defaultServices,\n basePath: newBasePath,\n defaultAuthorizeFn: this.defaultAuthorizeFn,\n defaultLogger: this.defaultLogger,\n defaultSessionExtractor: this.defaultSessionExtractor,\n defaultEventPublisher: this.defaultEventPublisher,\n availableAuthorizers: this.availableAuthorizers,\n defaultAuthorizerName: this.defaultAuthorizerName,\n defaultAuditorStorage: this.defaultAuditorStorage,\n defaultDatabaseService: this.defaultDatabaseService,\n defaultActorExtractor: this.defaultActorExtractor,\n customSecuritySchemes: this.customSecuritySchemes,\n defaultRlsConfig: this.defaultRlsConfig,\n });\n }\n\n // Create a new factory with authorization\n authorize(\n fn: AuthorizeFn<TServices, TLogger, TSession>,\n ): EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes,\n TRlsConfig\n > {\n return new EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes,\n TRlsConfig\n >({\n defaultServices: this.defaultServices,\n basePath: this.basePath,\n defaultAuthorizeFn: fn,\n defaultLogger: this.defaultLogger,\n defaultSessionExtractor: this.defaultSessionExtractor,\n defaultEventPublisher: this.defaultEventPublisher,\n availableAuthorizers: this.availableAuthorizers,\n defaultAuthorizerName: this.defaultAuthorizerName,\n defaultAuditorStorage: this.defaultAuditorStorage,\n defaultDatabaseService: this.defaultDatabaseService,\n defaultActorExtractor: this.defaultActorExtractor,\n customSecuritySchemes: this.customSecuritySchemes,\n defaultRlsConfig: this.defaultRlsConfig,\n });\n }\n\n // Create a new factory with services\n services<S extends Service[]>(\n services: S,\n ): EndpointFactory<\n [...S, ...TServices],\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes,\n undefined // Reset RLS config when services change - user should call .rls() after .services()\n > {\n return new EndpointFactory<\n [...S, ...TServices],\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes,\n undefined\n >({\n defaultServices: [...services, ...this.defaultServices],\n basePath: this.basePath,\n defaultAuthorizeFn: this.defaultAuthorizeFn as unknown as AuthorizeFn<\n [...S, ...TServices],\n TLogger,\n TSession\n >,\n defaultLogger: this.defaultLogger,\n defaultSessionExtractor: this.defaultSessionExtractor as unknown as\n | SessionFn<[...S, ...TServices], TLogger, TSession, TDatabase>\n | undefined,\n defaultEventPublisher: this.defaultEventPublisher,\n availableAuthorizers: this.availableAuthorizers,\n defaultAuthorizerName: this.defaultAuthorizerName,\n defaultAuditorStorage: this.defaultAuditorStorage,\n defaultDatabaseService: this.defaultDatabaseService,\n defaultActorExtractor: this.defaultActorExtractor as unknown as\n | ActorExtractor<[...S, ...TServices], TSession, TLogger>\n | undefined,\n customSecuritySchemes: this.customSecuritySchemes,\n // Reset RLS config when services change since it depends on TServices\n defaultRlsConfig: undefined,\n });\n }\n\n logger<L extends Logger>(\n logger: L,\n ): EndpointFactory<\n TServices,\n TBasePath,\n L,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes,\n undefined // Reset RLS config when logger type changes - user should call .rls() after .logger()\n > {\n return new EndpointFactory<\n TServices,\n TBasePath,\n L,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes,\n undefined\n >({\n defaultServices: this.defaultServices,\n basePath: this.basePath,\n defaultAuthorizeFn: this.defaultAuthorizeFn as unknown as AuthorizeFn<\n TServices,\n L,\n TSession\n >,\n defaultLogger: logger,\n defaultSessionExtractor: this\n .defaultSessionExtractor as unknown as SessionFn<\n TServices,\n L,\n TSession\n >,\n defaultEventPublisher: this.defaultEventPublisher,\n availableAuthorizers: this.availableAuthorizers,\n defaultAuthorizerName: this.defaultAuthorizerName,\n defaultAuditorStorage: this.defaultAuditorStorage,\n defaultDatabaseService: this.defaultDatabaseService,\n defaultActorExtractor: this\n .defaultActorExtractor as unknown as ActorExtractor<\n TServices,\n TSession,\n L\n >,\n customSecuritySchemes: this.customSecuritySchemes,\n // Reset RLS config when logger type changes since it depends on TLogger\n defaultRlsConfig: undefined,\n });\n }\n\n publisher<\n T extends EventPublisher<any>,\n TServiceName extends string = string,\n >(\n publisher: Service<TServiceName, T>,\n ): EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n T,\n TServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes,\n TRlsConfig\n > {\n return new EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n T,\n TServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes,\n TRlsConfig\n >({\n defaultServices: this.defaultServices,\n basePath: this.basePath,\n defaultAuthorizeFn: this.defaultAuthorizeFn,\n defaultLogger: this.defaultLogger,\n defaultSessionExtractor: this.defaultSessionExtractor,\n defaultEventPublisher: publisher,\n availableAuthorizers: this.availableAuthorizers,\n defaultAuthorizerName: this.defaultAuthorizerName,\n defaultAuditorStorage: this.defaultAuditorStorage,\n defaultDatabaseService: this.defaultDatabaseService,\n defaultActorExtractor: this.defaultActorExtractor,\n customSecuritySchemes: this.customSecuritySchemes,\n defaultRlsConfig: this.defaultRlsConfig,\n });\n }\n\n session<T>(\n session: SessionFn<TServices, TLogger, T, TDatabase>,\n ): EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n T,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes,\n undefined // Reset RLS config when session type changes - user should call .rls() after .session()\n > {\n return new EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n T,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes,\n undefined\n >({\n defaultServices: this.defaultServices,\n basePath: this.basePath,\n defaultAuthorizeFn: this.defaultAuthorizeFn as unknown as AuthorizeFn<\n TServices,\n TLogger,\n T\n >,\n defaultLogger: this.defaultLogger,\n defaultSessionExtractor: session,\n defaultEventPublisher: this.defaultEventPublisher,\n availableAuthorizers: this.availableAuthorizers,\n defaultAuthorizerName: this.defaultAuthorizerName,\n defaultAuditorStorage: this.defaultAuditorStorage,\n defaultDatabaseService: this.defaultDatabaseService,\n defaultActorExtractor: this\n .defaultActorExtractor as unknown as ActorExtractor<\n TServices,\n T,\n TLogger\n >,\n customSecuritySchemes: this.customSecuritySchemes,\n // Reset RLS config when session type changes since it depends on TSession\n defaultRlsConfig: undefined,\n });\n }\n\n /**\n * Set the database service for endpoints created from this factory.\n * The database will be available in handler context as `db`.\n */\n database<T, TName extends string>(\n service: Service<TName, T>,\n ): EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n T,\n TName,\n TSecuritySchemes,\n TRlsConfig\n > {\n return new EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n T,\n TName,\n TSecuritySchemes,\n TRlsConfig\n >({\n defaultServices: this.defaultServices,\n basePath: this.basePath,\n defaultAuthorizeFn: this.defaultAuthorizeFn,\n defaultLogger: this.defaultLogger,\n // Reset session extractor when database changes - user should call .session() after .database()\n // to get proper type inference for the new database type\n defaultSessionExtractor: this.defaultSessionExtractor as unknown as\n | SessionFn<TServices, TLogger, TSession, T>\n | undefined,\n defaultEventPublisher: this.defaultEventPublisher,\n availableAuthorizers: this.availableAuthorizers,\n defaultAuthorizerName: this.defaultAuthorizerName,\n defaultAuditorStorage: this.defaultAuditorStorage,\n defaultDatabaseService: service,\n customSecuritySchemes: this.customSecuritySchemes,\n defaultRlsConfig: this.defaultRlsConfig,\n });\n }\n\n /**\n * Set the auditor storage service for endpoints created from this factory.\n * This enables audit functionality and makes `auditor` available in handler context.\n * The audit action type is automatically inferred from the storage's generic parameter.\n */\n auditor<T extends AuditStorage<any>, TName extends string>(\n storage: Service<TName, T>,\n ): EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n T,\n TName,\n ExtractStorageAuditAction<T>,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes,\n TRlsConfig\n > {\n return new EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n T,\n TName,\n ExtractStorageAuditAction<T>,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes,\n TRlsConfig\n >({\n defaultServices: this.defaultServices,\n basePath: this.basePath,\n defaultAuthorizeFn: this.defaultAuthorizeFn,\n defaultLogger: this.defaultLogger,\n defaultSessionExtractor: this.defaultSessionExtractor,\n defaultEventPublisher: this.defaultEventPublisher,\n availableAuthorizers: this.availableAuthorizers,\n defaultAuthorizerName: this.defaultAuthorizerName,\n defaultAuditorStorage: storage,\n defaultDatabaseService: this.defaultDatabaseService,\n defaultActorExtractor: this\n .defaultActorExtractor as unknown as ActorExtractor<\n TServices,\n TSession,\n TLogger\n >,\n customSecuritySchemes: this.customSecuritySchemes,\n defaultRlsConfig: this.defaultRlsConfig,\n });\n }\n\n /**\n * Set the actor extractor function for endpoints created from this factory.\n * The actor is extracted from the request context and attached to all audits.\n */\n actor(\n extractor: ActorExtractor<TServices, TSession, TLogger>,\n ): EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes,\n TRlsConfig\n > {\n return new EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes,\n TRlsConfig\n >({\n defaultServices: this.defaultServices,\n basePath: this.basePath,\n defaultAuthorizeFn: this.defaultAuthorizeFn,\n defaultLogger: this.defaultLogger,\n defaultSessionExtractor: this.defaultSessionExtractor,\n defaultEventPublisher: this.defaultEventPublisher,\n availableAuthorizers: this.availableAuthorizers,\n defaultAuthorizerName: this.defaultAuthorizerName,\n defaultAuditorStorage: this.defaultAuditorStorage,\n defaultDatabaseService: this.defaultDatabaseService,\n defaultActorExtractor: extractor,\n customSecuritySchemes: this.customSecuritySchemes,\n defaultRlsConfig: this.defaultRlsConfig,\n });\n }\n\n /**\n * Set the RLS (Row-Level Security) configuration for endpoints created from this factory.\n * This enables automatic PostgreSQL session variable setting for RLS policies.\n *\n * @example\n * ```typescript\n * const api = new EndpointFactory()\n * .database(databaseService)\n * .session(extractSession)\n * .rls({\n * extractor: ({ session }) => ({\n * user_id: session.userId,\n * tenant_id: session.tenantId,\n * }),\n * prefix: 'app',\n * });\n * ```\n */\n rls<TConfig extends RlsConfig<TServices, TSession, TLogger>>(\n config: TConfig,\n ): EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes,\n TConfig\n > {\n return new EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes,\n TConfig\n >({\n defaultServices: this.defaultServices,\n basePath: this.basePath,\n defaultAuthorizeFn: this.defaultAuthorizeFn,\n defaultLogger: this.defaultLogger,\n defaultSessionExtractor: this.defaultSessionExtractor,\n defaultEventPublisher: this.defaultEventPublisher,\n availableAuthorizers: this.availableAuthorizers,\n defaultAuthorizerName: this.defaultAuthorizerName,\n defaultAuditorStorage: this.defaultAuditorStorage,\n defaultDatabaseService: this.defaultDatabaseService,\n defaultActorExtractor: this.defaultActorExtractor,\n customSecuritySchemes: this.customSecuritySchemes,\n defaultRlsConfig: config,\n });\n }\n\n private createBuilder<TMethod extends HttpMethod, TPath extends string>(\n method: TMethod,\n path: TPath,\n ): EndpointBuilder<\n JoinPaths<TBasePath, TPath>,\n TMethod,\n {},\n TServices,\n TLogger,\n undefined,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName\n > {\n const fullPath = EndpointFactory.joinPaths(path, this.basePath);\n const builder = new EndpointBuilder<\n JoinPaths<TBasePath, TPath>,\n TMethod,\n {},\n TServices,\n TLogger,\n undefined,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName\n >(fullPath, method);\n\n if (this.defaultAuthorizeFn) {\n // @ts-ignore\n builder._authorize = this.defaultAuthorizeFn;\n }\n if (this.defaultServices.length) {\n // Create a copy to avoid sharing references between builders\n builder._services = [...this.defaultServices] as TServices;\n }\n\n if (this.defaultLogger) {\n builder._logger = this.defaultLogger as TLogger;\n }\n\n if (this.defaultSessionExtractor) {\n builder._getSession = this.defaultSessionExtractor as SessionFn<\n TServices,\n TLogger,\n TSession\n >;\n }\n\n if (this.defaultEventPublisher) {\n builder._setPublisher(this.defaultEventPublisher);\n }\n\n // Set available authorizers and default\n builder._availableAuthorizers = this.availableAuthorizers;\n if (this.defaultAuthorizerName) {\n builder._authorizerName = this.defaultAuthorizerName;\n }\n\n // Set auditor storage if configured\n if (this.defaultAuditorStorage) {\n builder._setAuditorStorage(this.defaultAuditorStorage as any);\n }\n\n // Set database service if configured\n if (this.defaultDatabaseService) {\n builder._setDatabaseService(this.defaultDatabaseService as any);\n }\n\n // Set actor extractor if configured\n if (this.defaultActorExtractor) {\n builder._actorExtractor = this.defaultActorExtractor;\n }\n\n // Set custom security schemes\n builder._customSecuritySchemes = this.customSecuritySchemes;\n\n // Set RLS config if configured\n if (this.defaultRlsConfig) {\n builder._rlsConfig = this.defaultRlsConfig as any;\n }\n\n return builder;\n }\n\n post<TPath extends string>(path: TPath) {\n return this.createBuilder('POST', path);\n }\n\n get<TPath extends string>(path: TPath) {\n return this.createBuilder('GET', path);\n }\n\n put<TPath extends string>(path: TPath) {\n return this.createBuilder('PUT', path);\n }\n\n delete<TPath extends string>(path: TPath) {\n return this.createBuilder('DELETE', path);\n }\n\n patch<TPath extends string>(path: TPath) {\n return this.createBuilder('PATCH', path);\n }\n\n options<TPath extends string>(path: TPath) {\n return this.createBuilder('OPTIONS', path);\n }\n}\n\nexport type RemoveTrailingSlash<T extends string> = T extends `${infer Rest}/`\n ? Rest extends ''\n ? T // Keep \"/\" as is\n : Rest\n : T;\n\nexport type JoinPaths<\n TBasePath extends string,\n TPath extends string,\n> = RemoveTrailingSlash<\n TBasePath extends ''\n ? TPath\n : TPath extends ''\n ? TBasePath\n : TBasePath extends '/'\n ? TPath extends `/${string}`\n ? TPath\n : `/${TPath}`\n : TBasePath extends `${infer Base}/`\n ? TPath extends `/${infer Rest}`\n ? `${Base}/${Rest}`\n : `${Base}/${TPath}`\n : TPath extends `/${infer Rest}`\n ? `${TBasePath}/${Rest}`\n : `${TBasePath}/${TPath}`\n>;\n\nexport interface EndpointFactoryOptions<\n TServices extends Service[] = [],\n TBasePath extends string = '',\n TLogger extends Logger = Logger,\n TSession = unknown,\n TEventPublisher extends EventPublisher<any> | undefined = undefined,\n TEventPublisherServiceName extends string = string,\n TAuthorizers extends readonly string[] = readonly string[],\n TAuditStorage extends AuditStorage | undefined = undefined,\n TAuditStorageServiceName extends string = string,\n TDatabase = undefined,\n TDatabaseServiceName extends string = string,\n TSecuritySchemes extends Record<string, SecurityScheme> = Record<\n string,\n SecurityScheme\n >,\n TRlsConfig extends\n | RlsConfig<TServices, TSession, TLogger>\n | undefined = undefined,\n> {\n defaultServices?: TServices;\n basePath?: TBasePath;\n defaultAuthorizeFn?: AuthorizeFn<TServices, TLogger, TSession>;\n defaultLogger?: TLogger;\n defaultSessionExtractor?: SessionFn<TServices, TLogger, TSession, TDatabase>;\n defaultEventPublisher?: Service<TEventPublisherServiceName, TEventPublisher>;\n defaultEvents?: MappedEvent<TEventPublisher, undefined>[];\n availableAuthorizers?: Authorizer[];\n defaultAuthorizerName?: TAuthorizers[number];\n defaultAuditorStorage?: Service<TAuditStorageServiceName, TAuditStorage>;\n defaultDatabaseService?: Service<TDatabaseServiceName, TDatabase>;\n defaultActorExtractor?: ActorExtractor<TServices, TSession, TLogger>;\n customSecuritySchemes?: TSecuritySchemes;\n defaultRlsConfig?: TRlsConfig;\n}\n\nexport const e = new EndpointFactory();\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"EndpointFactory-CbdxPCIH.mjs","names":["DEFAULT_LOGGER","path: P","basePath: TBasePath","authorizers: T","schemes: T","name:\n | BuiltInSecuritySchemeId\n | keyof TSecuritySchemes\n | TAuthorizers[number]\n | 'none'","path: TPath","fn: AuthorizeFn<TServices, TLogger, TSession>","services: S","logger: L","publisher: Service<TServiceName, T>","session: SessionFn<TServices, TLogger, T, TDatabase>","service: Service<TName, T>","storage: Service<TName, T>","extractor: ActorExtractor<TServices, TSession, TLogger>","config: TConfig","method: TMethod"],"sources":["../src/endpoints/EndpointFactory.ts"],"sourcesContent":["import type {\n AuditStorage,\n AuditableAction,\n ExtractStorageAuditAction,\n} from '@geekmidas/audit';\nimport type { EventPublisher, MappedEvent } from '@geekmidas/events';\nimport type { Logger } from '@geekmidas/logger';\nimport { ConsoleLogger } from '@geekmidas/logger/console';\nimport type { Service } from '@geekmidas/services';\nimport uniqBy from 'lodash.uniqby';\nimport type { HttpMethod } from '../types';\nimport type {\n Authorizer,\n BuiltInSecuritySchemeId,\n SecurityScheme,\n} from './Authorizer';\nimport type { AuthorizeFn, SessionFn } from './Endpoint';\nimport { EndpointBuilder } from './EndpointBuilder';\nimport type { ActorExtractor } from './audit';\nimport type { RlsConfig } from './rls';\n\n// Re-export SecurityScheme to make the type portable in declaration files\nexport type { SecurityScheme } from './Authorizer';\n\nconst DEFAULT_LOGGER = new ConsoleLogger() as any;\n\nexport class EndpointFactory<\n TServices extends Service[] = [],\n TBasePath extends string = '',\n TLogger extends Logger = Logger,\n TSession = unknown,\n TEventPublisher extends EventPublisher<any> | undefined = undefined,\n TEventPublisherServiceName extends string = string,\n TAuthorizers extends readonly string[] = readonly string[],\n TAuditStorage extends AuditStorage<any> | undefined = undefined,\n TAuditStorageServiceName extends string = string,\n TAuditAction extends AuditableAction<\n string,\n unknown\n > = ExtractStorageAuditAction<NonNullable<TAuditStorage>>,\n TDatabase = undefined,\n TDatabaseServiceName extends string = string,\n TSecuritySchemes extends Record<string, SecurityScheme> = Record<\n string,\n SecurityScheme\n >,\n TRlsConfig extends\n | RlsConfig<TServices, TSession, TLogger>\n | undefined = undefined,\n> {\n // @ts-ignore\n private defaultServices: TServices;\n private basePath: TBasePath = '' as TBasePath;\n private defaultAuthorizeFn?: AuthorizeFn<TServices, TLogger, TSession>;\n private defaultEventPublisher:\n | Service<TEventPublisherServiceName, TEventPublisher>\n | undefined;\n private defaultSessionExtractor?: SessionFn<\n TServices,\n TLogger,\n TSession,\n TDatabase\n >;\n private defaultLogger: TLogger = DEFAULT_LOGGER;\n private availableAuthorizers: Authorizer[] = [];\n private defaultAuthorizerName?: TAuthorizers[number];\n private defaultAuditorStorage:\n | Service<TAuditStorageServiceName, TAuditStorage>\n | undefined;\n private defaultDatabaseService:\n | Service<TDatabaseServiceName, TDatabase>\n | undefined;\n private defaultActorExtractor?: ActorExtractor<TServices, TSession, TLogger>;\n private customSecuritySchemes: TSecuritySchemes = {} as TSecuritySchemes;\n private defaultRlsConfig?: TRlsConfig;\n\n constructor({\n basePath,\n defaultAuthorizeFn,\n defaultLogger,\n defaultSessionExtractor,\n // @ts-ignore\n defaultServices = [] as TServices,\n defaultEventPublisher,\n availableAuthorizers = [],\n defaultAuthorizerName,\n defaultAuditorStorage,\n defaultDatabaseService,\n defaultActorExtractor,\n customSecuritySchemes = {} as TSecuritySchemes,\n defaultRlsConfig,\n }: EndpointFactoryOptions<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes,\n TRlsConfig\n > = {}) {\n // Initialize default services\n this.defaultServices = uniqBy(\n defaultServices,\n (s) => s.serviceName,\n ) as TServices;\n\n this.basePath = basePath || ('' as TBasePath);\n this.defaultAuthorizeFn = defaultAuthorizeFn;\n this.defaultLogger = defaultLogger || (DEFAULT_LOGGER as TLogger);\n this.defaultSessionExtractor = defaultSessionExtractor;\n this.defaultEventPublisher = defaultEventPublisher;\n this.availableAuthorizers = availableAuthorizers;\n this.defaultAuthorizerName = defaultAuthorizerName;\n this.defaultAuditorStorage = defaultAuditorStorage;\n this.defaultDatabaseService = defaultDatabaseService;\n this.defaultActorExtractor = defaultActorExtractor;\n this.customSecuritySchemes = customSecuritySchemes;\n this.defaultRlsConfig = defaultRlsConfig;\n }\n\n static joinPaths<TBasePath extends string, P extends string>(\n path: P,\n basePath: TBasePath = '' as TBasePath,\n ): JoinPaths<TBasePath, P> {\n // Handle empty cases\n if (!basePath && !path) return '/' as JoinPaths<TBasePath, P>;\n if (!basePath)\n return (path.startsWith('/') ? path : '/' + path) as JoinPaths<\n TBasePath,\n P\n >;\n if (!path)\n return (\n basePath.startsWith('/') ? basePath : '/' + basePath\n ) as JoinPaths<TBasePath, P>;\n\n const base = basePath.endsWith('/') ? basePath.slice(0, -1) : basePath;\n const segment = path.startsWith('/') ? path : '/' + path;\n\n let result = base + segment;\n\n // Ensure leading slash\n if (!result.startsWith('/')) {\n result = '/' + result;\n }\n\n // Normalize multiple slashes (except in the middle of the path where they might be intentional)\n result = result.replace(/^\\/+/g, '/');\n\n // Remove trailing slash unless it's the root path \"/\"\n if (result.length > 1 && result.endsWith('/')) {\n result = result.slice(0, -1);\n }\n\n return result as JoinPaths<TBasePath, P>;\n }\n\n // Configure available authorizers\n authorizers<const T extends readonly string[]>(\n authorizers: T,\n ): EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n T,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes,\n TRlsConfig\n > {\n const authorizerConfigs = authorizers.map((name) => ({\n name,\n }));\n return new EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n T,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes,\n TRlsConfig\n >({\n defaultServices: this.defaultServices,\n basePath: this.basePath,\n defaultAuthorizeFn: this.defaultAuthorizeFn,\n defaultLogger: this.defaultLogger,\n defaultSessionExtractor: this.defaultSessionExtractor,\n defaultEventPublisher: this.defaultEventPublisher,\n availableAuthorizers: authorizerConfigs,\n defaultAuthorizerName: this.defaultAuthorizerName,\n defaultAuditorStorage: this.defaultAuditorStorage,\n defaultDatabaseService: this.defaultDatabaseService,\n defaultActorExtractor: this.defaultActorExtractor,\n customSecuritySchemes: this.customSecuritySchemes,\n defaultRlsConfig: this.defaultRlsConfig,\n });\n }\n\n /**\n * Define custom security schemes for this factory.\n * These extend the built-in schemes (jwt, bearer, apiKey, oauth2, oidc).\n *\n * @example\n * ```typescript\n * const router = e.securitySchemes({\n * awsIamSigV4: {\n * type: 'apiKey',\n * in: 'header',\n * name: 'Authorization',\n * 'x-amazon-apigateway-authtype': 'awsSigv4',\n * },\n * });\n * ```\n */\n securitySchemes<T extends Record<string, SecurityScheme>>(\n schemes: T,\n ): EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes & T,\n TRlsConfig\n > {\n return new EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes & T,\n TRlsConfig\n >({\n defaultServices: this.defaultServices,\n basePath: this.basePath,\n defaultAuthorizeFn: this.defaultAuthorizeFn,\n defaultLogger: this.defaultLogger,\n defaultSessionExtractor: this.defaultSessionExtractor,\n defaultEventPublisher: this.defaultEventPublisher,\n availableAuthorizers: this.availableAuthorizers,\n defaultAuthorizerName: this.defaultAuthorizerName,\n defaultAuditorStorage: this.defaultAuditorStorage,\n defaultDatabaseService: this.defaultDatabaseService,\n defaultActorExtractor: this.defaultActorExtractor,\n customSecuritySchemes: {\n ...this.customSecuritySchemes,\n ...schemes,\n } as TSecuritySchemes & T,\n defaultRlsConfig: this.defaultRlsConfig,\n });\n }\n\n /**\n * Set the default authorizer for all endpoints created from this factory.\n * Individual endpoints can override this by calling `.authorizer()` on the builder.\n * Use `'none'` to explicitly disable authorization for all endpoints.\n *\n * Accepts:\n * - Built-in security scheme names: 'jwt', 'bearer', 'apiKey', 'oauth2', 'oidc'\n * - Custom security scheme names defined via `.securitySchemes()`\n * - 'none' to disable authorization\n */\n authorizer(\n name:\n | BuiltInSecuritySchemeId\n | keyof TSecuritySchemes\n | TAuthorizers[number]\n | 'none',\n ): EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes,\n TRlsConfig\n > {\n // Validate that the authorizer exists in available authorizers (if authorizers() was called)\n if (name !== 'none' && this.availableAuthorizers.length > 0) {\n const authorizerExists = this.availableAuthorizers.some(\n (a) => a.name === name,\n );\n if (!authorizerExists) {\n const available = this.availableAuthorizers\n .map((a) => a.name)\n .join(', ');\n throw new Error(\n `Authorizer \"${name as string}\" not found in available authorizers: ${available}`,\n );\n }\n }\n\n return new EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes,\n TRlsConfig\n >({\n defaultServices: this.defaultServices,\n basePath: this.basePath,\n defaultAuthorizeFn: this.defaultAuthorizeFn,\n defaultLogger: this.defaultLogger,\n defaultSessionExtractor: this.defaultSessionExtractor,\n defaultEventPublisher: this.defaultEventPublisher,\n availableAuthorizers: this.availableAuthorizers,\n defaultAuthorizerName:\n name === 'none' ? undefined : (name as TAuthorizers[number]),\n defaultAuditorStorage: this.defaultAuditorStorage,\n defaultDatabaseService: this.defaultDatabaseService,\n defaultActorExtractor: this.defaultActorExtractor,\n customSecuritySchemes: this.customSecuritySchemes,\n defaultRlsConfig: this.defaultRlsConfig,\n });\n }\n\n // Create a sub-router with a path prefix\n route<TPath extends string>(\n path: TPath,\n ): EndpointFactory<\n TServices,\n JoinPaths<TBasePath, TPath>,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes,\n TRlsConfig\n > {\n const newBasePath = EndpointFactory.joinPaths(path, this.basePath);\n return new EndpointFactory<\n TServices,\n JoinPaths<TBasePath, TPath>,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes,\n TRlsConfig\n >({\n defaultServices: this.defaultServices,\n basePath: newBasePath,\n defaultAuthorizeFn: this.defaultAuthorizeFn,\n defaultLogger: this.defaultLogger,\n defaultSessionExtractor: this.defaultSessionExtractor,\n defaultEventPublisher: this.defaultEventPublisher,\n availableAuthorizers: this.availableAuthorizers,\n defaultAuthorizerName: this.defaultAuthorizerName,\n defaultAuditorStorage: this.defaultAuditorStorage,\n defaultDatabaseService: this.defaultDatabaseService,\n defaultActorExtractor: this.defaultActorExtractor,\n customSecuritySchemes: this.customSecuritySchemes,\n defaultRlsConfig: this.defaultRlsConfig,\n });\n }\n\n // Create a new factory with authorization\n authorize(\n fn: AuthorizeFn<TServices, TLogger, TSession>,\n ): EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes,\n TRlsConfig\n > {\n return new EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes,\n TRlsConfig\n >({\n defaultServices: this.defaultServices,\n basePath: this.basePath,\n defaultAuthorizeFn: fn,\n defaultLogger: this.defaultLogger,\n defaultSessionExtractor: this.defaultSessionExtractor,\n defaultEventPublisher: this.defaultEventPublisher,\n availableAuthorizers: this.availableAuthorizers,\n defaultAuthorizerName: this.defaultAuthorizerName,\n defaultAuditorStorage: this.defaultAuditorStorage,\n defaultDatabaseService: this.defaultDatabaseService,\n defaultActorExtractor: this.defaultActorExtractor,\n customSecuritySchemes: this.customSecuritySchemes,\n defaultRlsConfig: this.defaultRlsConfig,\n });\n }\n\n // Create a new factory with services\n services<S extends Service[]>(\n services: S,\n ): EndpointFactory<\n [...S, ...TServices],\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes,\n undefined // Reset RLS config when services change - user should call .rls() after .services()\n > {\n return new EndpointFactory<\n [...S, ...TServices],\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes,\n undefined\n >({\n defaultServices: [...services, ...this.defaultServices],\n basePath: this.basePath,\n defaultAuthorizeFn: this.defaultAuthorizeFn as unknown as AuthorizeFn<\n [...S, ...TServices],\n TLogger,\n TSession\n >,\n defaultLogger: this.defaultLogger,\n defaultSessionExtractor: this.defaultSessionExtractor as unknown as\n | SessionFn<[...S, ...TServices], TLogger, TSession, TDatabase>\n | undefined,\n defaultEventPublisher: this.defaultEventPublisher,\n availableAuthorizers: this.availableAuthorizers,\n defaultAuthorizerName: this.defaultAuthorizerName,\n defaultAuditorStorage: this.defaultAuditorStorage,\n defaultDatabaseService: this.defaultDatabaseService,\n defaultActorExtractor: this.defaultActorExtractor as unknown as\n | ActorExtractor<[...S, ...TServices], TSession, TLogger>\n | undefined,\n customSecuritySchemes: this.customSecuritySchemes,\n // Reset RLS config when services change since it depends on TServices\n defaultRlsConfig: undefined,\n });\n }\n\n logger<L extends Logger>(\n logger: L,\n ): EndpointFactory<\n TServices,\n TBasePath,\n L,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes,\n undefined // Reset RLS config when logger type changes - user should call .rls() after .logger()\n > {\n return new EndpointFactory<\n TServices,\n TBasePath,\n L,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes,\n undefined\n >({\n defaultServices: this.defaultServices,\n basePath: this.basePath,\n defaultAuthorizeFn: this.defaultAuthorizeFn as unknown as AuthorizeFn<\n TServices,\n L,\n TSession\n >,\n defaultLogger: logger,\n defaultSessionExtractor: this\n .defaultSessionExtractor as unknown as SessionFn<\n TServices,\n L,\n TSession\n >,\n defaultEventPublisher: this.defaultEventPublisher,\n availableAuthorizers: this.availableAuthorizers,\n defaultAuthorizerName: this.defaultAuthorizerName,\n defaultAuditorStorage: this.defaultAuditorStorage,\n defaultDatabaseService: this.defaultDatabaseService,\n defaultActorExtractor: this\n .defaultActorExtractor as unknown as ActorExtractor<\n TServices,\n TSession,\n L\n >,\n customSecuritySchemes: this.customSecuritySchemes,\n // Reset RLS config when logger type changes since it depends on TLogger\n defaultRlsConfig: undefined,\n });\n }\n\n publisher<\n T extends EventPublisher<any>,\n TServiceName extends string = string,\n >(\n publisher: Service<TServiceName, T>,\n ): EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n T,\n TServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes,\n TRlsConfig\n > {\n return new EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n T,\n TServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes,\n TRlsConfig\n >({\n defaultServices: this.defaultServices,\n basePath: this.basePath,\n defaultAuthorizeFn: this.defaultAuthorizeFn,\n defaultLogger: this.defaultLogger,\n defaultSessionExtractor: this.defaultSessionExtractor,\n defaultEventPublisher: publisher,\n availableAuthorizers: this.availableAuthorizers,\n defaultAuthorizerName: this.defaultAuthorizerName,\n defaultAuditorStorage: this.defaultAuditorStorage,\n defaultDatabaseService: this.defaultDatabaseService,\n defaultActorExtractor: this.defaultActorExtractor,\n customSecuritySchemes: this.customSecuritySchemes,\n defaultRlsConfig: this.defaultRlsConfig,\n });\n }\n\n session<T>(\n session: SessionFn<TServices, TLogger, T, TDatabase>,\n ): EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n T,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes,\n undefined // Reset RLS config when session type changes - user should call .rls() after .session()\n > {\n return new EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n T,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes,\n undefined\n >({\n defaultServices: this.defaultServices,\n basePath: this.basePath,\n defaultAuthorizeFn: this.defaultAuthorizeFn as unknown as AuthorizeFn<\n TServices,\n TLogger,\n T\n >,\n defaultLogger: this.defaultLogger,\n defaultSessionExtractor: session,\n defaultEventPublisher: this.defaultEventPublisher,\n availableAuthorizers: this.availableAuthorizers,\n defaultAuthorizerName: this.defaultAuthorizerName,\n defaultAuditorStorage: this.defaultAuditorStorage,\n defaultDatabaseService: this.defaultDatabaseService,\n defaultActorExtractor: this\n .defaultActorExtractor as unknown as ActorExtractor<\n TServices,\n T,\n TLogger\n >,\n customSecuritySchemes: this.customSecuritySchemes,\n // Reset RLS config when session type changes since it depends on TSession\n defaultRlsConfig: undefined,\n });\n }\n\n /**\n * Set the database service for endpoints created from this factory.\n * The database will be available in handler context as `db`.\n */\n database<T, TName extends string>(\n service: Service<TName, T>,\n ): EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n T,\n TName,\n TSecuritySchemes,\n TRlsConfig\n > {\n return new EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n T,\n TName,\n TSecuritySchemes,\n TRlsConfig\n >({\n defaultServices: this.defaultServices,\n basePath: this.basePath,\n defaultAuthorizeFn: this.defaultAuthorizeFn,\n defaultLogger: this.defaultLogger,\n // Reset session extractor when database changes - user should call .session() after .database()\n // to get proper type inference for the new database type\n defaultSessionExtractor: this.defaultSessionExtractor as unknown as\n | SessionFn<TServices, TLogger, TSession, T>\n | undefined,\n defaultEventPublisher: this.defaultEventPublisher,\n availableAuthorizers: this.availableAuthorizers,\n defaultAuthorizerName: this.defaultAuthorizerName,\n defaultAuditorStorage: this.defaultAuditorStorage,\n defaultDatabaseService: service,\n customSecuritySchemes: this.customSecuritySchemes,\n defaultRlsConfig: this.defaultRlsConfig,\n });\n }\n\n /**\n * Set the auditor storage service for endpoints created from this factory.\n * This enables audit functionality and makes `auditor` available in handler context.\n * The audit action type is automatically inferred from the storage's generic parameter.\n */\n auditor<T extends AuditStorage<any>, TName extends string>(\n storage: Service<TName, T>,\n ): EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n T,\n TName,\n ExtractStorageAuditAction<T>,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes,\n TRlsConfig\n > {\n return new EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n T,\n TName,\n ExtractStorageAuditAction<T>,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes,\n TRlsConfig\n >({\n defaultServices: this.defaultServices,\n basePath: this.basePath,\n defaultAuthorizeFn: this.defaultAuthorizeFn,\n defaultLogger: this.defaultLogger,\n defaultSessionExtractor: this.defaultSessionExtractor,\n defaultEventPublisher: this.defaultEventPublisher,\n availableAuthorizers: this.availableAuthorizers,\n defaultAuthorizerName: this.defaultAuthorizerName,\n defaultAuditorStorage: storage,\n defaultDatabaseService: this.defaultDatabaseService,\n defaultActorExtractor: this\n .defaultActorExtractor as unknown as ActorExtractor<\n TServices,\n TSession,\n TLogger\n >,\n customSecuritySchemes: this.customSecuritySchemes,\n defaultRlsConfig: this.defaultRlsConfig,\n });\n }\n\n /**\n * Set the actor extractor function for endpoints created from this factory.\n * The actor is extracted from the request context and attached to all audits.\n */\n actor(\n extractor: ActorExtractor<TServices, TSession, TLogger>,\n ): EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes,\n TRlsConfig\n > {\n return new EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes,\n TRlsConfig\n >({\n defaultServices: this.defaultServices,\n basePath: this.basePath,\n defaultAuthorizeFn: this.defaultAuthorizeFn,\n defaultLogger: this.defaultLogger,\n defaultSessionExtractor: this.defaultSessionExtractor,\n defaultEventPublisher: this.defaultEventPublisher,\n availableAuthorizers: this.availableAuthorizers,\n defaultAuthorizerName: this.defaultAuthorizerName,\n defaultAuditorStorage: this.defaultAuditorStorage,\n defaultDatabaseService: this.defaultDatabaseService,\n defaultActorExtractor: extractor,\n customSecuritySchemes: this.customSecuritySchemes,\n defaultRlsConfig: this.defaultRlsConfig,\n });\n }\n\n /**\n * Set the RLS (Row-Level Security) configuration for endpoints created from this factory.\n * This enables automatic PostgreSQL session variable setting for RLS policies.\n *\n * @example\n * ```typescript\n * const api = new EndpointFactory()\n * .database(databaseService)\n * .session(extractSession)\n * .rls({\n * extractor: ({ session }) => ({\n * user_id: session.userId,\n * tenant_id: session.tenantId,\n * }),\n * prefix: 'app',\n * });\n * ```\n */\n rls<TConfig extends RlsConfig<TServices, TSession, TLogger>>(\n config: TConfig,\n ): EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes,\n TConfig\n > {\n return new EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes,\n TConfig\n >({\n defaultServices: this.defaultServices,\n basePath: this.basePath,\n defaultAuthorizeFn: this.defaultAuthorizeFn,\n defaultLogger: this.defaultLogger,\n defaultSessionExtractor: this.defaultSessionExtractor,\n defaultEventPublisher: this.defaultEventPublisher,\n availableAuthorizers: this.availableAuthorizers,\n defaultAuthorizerName: this.defaultAuthorizerName,\n defaultAuditorStorage: this.defaultAuditorStorage,\n defaultDatabaseService: this.defaultDatabaseService,\n defaultActorExtractor: this.defaultActorExtractor,\n customSecuritySchemes: this.customSecuritySchemes,\n defaultRlsConfig: config,\n });\n }\n\n private createBuilder<TMethod extends HttpMethod, TPath extends string>(\n method: TMethod,\n path: TPath,\n ): EndpointBuilder<\n JoinPaths<TBasePath, TPath>,\n TMethod,\n {},\n TServices,\n TLogger,\n undefined,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName\n > {\n const fullPath = EndpointFactory.joinPaths(path, this.basePath);\n const builder = new EndpointBuilder<\n JoinPaths<TBasePath, TPath>,\n TMethod,\n {},\n TServices,\n TLogger,\n undefined,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName\n >(fullPath, method);\n\n if (this.defaultAuthorizeFn) {\n // @ts-ignore\n builder._authorize = this.defaultAuthorizeFn;\n }\n if (this.defaultServices.length) {\n // Create a copy to avoid sharing references between builders\n builder._services = [...this.defaultServices] as TServices;\n }\n\n if (this.defaultLogger) {\n builder._logger = this.defaultLogger as TLogger;\n }\n\n if (this.defaultSessionExtractor) {\n builder._getSession = this.defaultSessionExtractor as SessionFn<\n TServices,\n TLogger,\n TSession\n >;\n }\n\n if (this.defaultEventPublisher) {\n builder._setPublisher(this.defaultEventPublisher);\n }\n\n // Set available authorizers and default\n builder._availableAuthorizers = this.availableAuthorizers;\n if (this.defaultAuthorizerName) {\n builder._authorizerName = this.defaultAuthorizerName;\n }\n\n // Set auditor storage if configured\n if (this.defaultAuditorStorage) {\n builder._setAuditorStorage(this.defaultAuditorStorage as any);\n }\n\n // Set database service if configured\n if (this.defaultDatabaseService) {\n builder._setDatabaseService(this.defaultDatabaseService as any);\n }\n\n // Set actor extractor if configured\n if (this.defaultActorExtractor) {\n builder._actorExtractor = this.defaultActorExtractor;\n }\n\n // Set custom security schemes\n builder._customSecuritySchemes = this.customSecuritySchemes;\n\n // Set RLS config if configured\n if (this.defaultRlsConfig) {\n builder._rlsConfig = this.defaultRlsConfig as any;\n }\n\n return builder;\n }\n\n post<TPath extends string>(path: TPath) {\n return this.createBuilder('POST', path);\n }\n\n get<TPath extends string>(path: TPath) {\n return this.createBuilder('GET', path);\n }\n\n put<TPath extends string>(path: TPath) {\n return this.createBuilder('PUT', path);\n }\n\n delete<TPath extends string>(path: TPath) {\n return this.createBuilder('DELETE', path);\n }\n\n patch<TPath extends string>(path: TPath) {\n return this.createBuilder('PATCH', path);\n }\n\n options<TPath extends string>(path: TPath) {\n return this.createBuilder('OPTIONS', path);\n }\n}\n\nexport type RemoveTrailingSlash<T extends string> = T extends `${infer Rest}/`\n ? Rest extends ''\n ? T // Keep \"/\" as is\n : Rest\n : T;\n\nexport type JoinPaths<\n TBasePath extends string,\n TPath extends string,\n> = RemoveTrailingSlash<\n TBasePath extends ''\n ? TPath\n : TPath extends ''\n ? TBasePath\n : TBasePath extends '/'\n ? TPath extends `/${string}`\n ? TPath\n : `/${TPath}`\n : TBasePath extends `${infer Base}/`\n ? TPath extends `/${infer Rest}`\n ? `${Base}/${Rest}`\n : `${Base}/${TPath}`\n : TPath extends `/${infer Rest}`\n ? `${TBasePath}/${Rest}`\n : `${TBasePath}/${TPath}`\n>;\n\nexport interface EndpointFactoryOptions<\n TServices extends Service[] = [],\n TBasePath extends string = '',\n TLogger extends Logger = Logger,\n TSession = unknown,\n TEventPublisher extends EventPublisher<any> | undefined = undefined,\n TEventPublisherServiceName extends string = string,\n TAuthorizers extends readonly string[] = readonly string[],\n TAuditStorage extends AuditStorage | undefined = undefined,\n TAuditStorageServiceName extends string = string,\n TDatabase = undefined,\n TDatabaseServiceName extends string = string,\n TSecuritySchemes extends Record<string, SecurityScheme> = Record<\n string,\n SecurityScheme\n >,\n TRlsConfig extends\n | RlsConfig<TServices, TSession, TLogger>\n | undefined = undefined,\n> {\n defaultServices?: TServices;\n basePath?: TBasePath;\n defaultAuthorizeFn?: AuthorizeFn<TServices, TLogger, TSession>;\n defaultLogger?: TLogger;\n defaultSessionExtractor?: SessionFn<TServices, TLogger, TSession, TDatabase>;\n defaultEventPublisher?: Service<TEventPublisherServiceName, TEventPublisher>;\n defaultEvents?: MappedEvent<TEventPublisher, undefined>[];\n availableAuthorizers?: Authorizer[];\n defaultAuthorizerName?: TAuthorizers[number];\n defaultAuditorStorage?: Service<TAuditStorageServiceName, TAuditStorage>;\n defaultDatabaseService?: Service<TDatabaseServiceName, TDatabase>;\n defaultActorExtractor?: ActorExtractor<TServices, TSession, TLogger>;\n customSecuritySchemes?: TSecuritySchemes;\n defaultRlsConfig?: TRlsConfig;\n}\n\nexport const e = new EndpointFactory();\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"EndpointFactory-CyPbm3AD.d.cts","names":[],"sources":["../src/endpoints/EndpointFactory.ts"],"sourcesContent":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Function-BVHqIDp9.mjs","names":["DEFAULT_LOGGER","defaultServices: TServices","defaultLogger: TLogger","services: S","logger: L","obj: any","schema: T","data: unknown","output: unknown","fn: Fn","type: ConstructType","input?: TInput","outputSchema?: OutSchema","services: TServices","logger: TLogger","publisherService?: Service<TEventPublisherServiceName, TEventPublisher>","events: MappedEvent<TEventPublisher, OutSchema>[]","memorySize?: number","auditorStorageService?: Service<TAuditStorageServiceName, TAuditStorage>","databaseService?: Service<TDatabaseServiceName, TDatabase>"],"sources":["../src/functions/Function.ts"],"sourcesContent":["import type { AuditStorage, AuditableAction, Auditor } from '@geekmidas/audit';\nimport { UnprocessableEntityError } from '@geekmidas/errors';\nimport type { EventPublisher, MappedEvent } from '@geekmidas/events';\nimport type { Logger } from '@geekmidas/logger';\nimport { ConsoleLogger } from '@geekmidas/logger/console';\nimport type {\n ComposableStandardSchema,\n InferComposableStandardSchema,\n InferStandardSchema,\n} from '@geekmidas/schema';\nimport { parseSchema } from '@geekmidas/schema/parser';\nimport type { Service, ServiceRecord } from '@geekmidas/services';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\nimport uniqBy from 'lodash.uniqby';\nimport { Construct, ConstructType } from '../Construct';\n\nconst DEFAULT_LOGGER = new ConsoleLogger() as any;\n\nexport class FunctionFactory<\n TServices extends Service[] = [],\n TLogger extends Logger = Logger,\n> {\n private defaultServices: TServices;\n constructor(\n defaultServices: TServices,\n private defaultLogger: TLogger = DEFAULT_LOGGER,\n ) {\n // Initialize default services\n this.defaultServices = uniqBy(\n defaultServices,\n (s) => s.serviceName,\n ) as TServices;\n }\n\n // Create a new factory with services\n services<S extends Service[]>(\n services: S,\n ): FunctionFactory<[...S, ...TServices], TLogger> {\n return new FunctionFactory<[...S, ...TServices], TLogger>(\n [...services, ...this.defaultServices],\n this.defaultLogger,\n );\n }\n\n logger<L extends Logger>(logger: L): FunctionFactory<TServices, L> {\n return new FunctionFactory<TServices, L>(this.defaultServices, logger);\n }\n}\n\nexport class Function<\n TInput extends ComposableStandardSchema | undefined = undefined,\n TServices extends Service[] = [],\n TLogger extends Logger = Logger,\n OutSchema extends StandardSchemaV1 | undefined = undefined,\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 Fn extends FunctionHandler<\n TInput,\n TServices,\n TLogger,\n OutSchema,\n TDatabase,\n TAuditStorage,\n TAuditAction\n > = FunctionHandler<\n TInput,\n TServices,\n TLogger,\n OutSchema,\n TDatabase,\n TAuditStorage,\n TAuditAction\n >,\n> extends Construct<\n TLogger,\n TEventPublisherServiceName,\n TEventPublisher,\n OutSchema,\n TServices,\n TAuditStorageServiceName,\n TAuditStorage\n> {\n __IS_FUNCTION__ = true;\n\n static isFunction(obj: any): obj is Function<any, any, any, any, any> {\n return Boolean(\n obj &&\n obj.__IS_FUNCTION__ === true &&\n obj.type === ConstructType.Function,\n );\n }\n\n /**\n * Validates data against a StandardSchema.\n *\n * @param schema - The StandardSchema to validate against\n * @param data - The data to validate\n * @returns Validation result with value or issues\n */\n static validate<T extends StandardSchemaV1>(schema: T, data: unknown) {\n return schema['~standard'].validate(data);\n }\n\n /**\n * Parses and validates data against a schema, throwing an error if validation fails.\n *\n * @param schema - The StandardSchema to validate against\n * @param data - The data to parse and validate\n * @returns The validated data with proper typing\n * @throws {UnprocessableEntityError} When validation fails\n */\n static async parseSchema<T extends StandardSchemaV1>(\n schema: T,\n data: unknown,\n ): Promise<InferStandardSchema<T>> {\n try {\n return await parseSchema(schema, data);\n } catch (issues) {\n throw new UnprocessableEntityError('Validation failed', issues);\n }\n }\n\n /**\n * Parses and validates the endpoint output against the output schema.\n *\n * @param output - The raw output data to validate\n * @returns The validated output data\n * @throws {UnprocessableEntityError} When output validation fails\n */\n async parseOutput(output: unknown): Promise<InferStandardSchema<OutSchema>> {\n return Function.parseSchema(\n this.outputSchema as StandardSchemaV1,\n output,\n ) as Promise<InferStandardSchema<OutSchema>>;\n }\n\n constructor(\n protected readonly fn: Fn,\n timeout = 30000, // Default timeout of 30 seconds\n type: ConstructType = ConstructType.Function,\n public input?: TInput,\n outputSchema?: OutSchema,\n services: TServices = [] as unknown as TServices,\n logger: TLogger = DEFAULT_LOGGER,\n publisherService?: Service<TEventPublisherServiceName, TEventPublisher>,\n events: MappedEvent<TEventPublisher, OutSchema>[] = [],\n memorySize?: number,\n auditorStorageService?: Service<TAuditStorageServiceName, TAuditStorage>,\n public databaseService?: Service<TDatabaseServiceName, TDatabase>,\n ) {\n super(\n type,\n logger,\n services,\n events,\n publisherService,\n outputSchema,\n timeout,\n memorySize,\n auditorStorageService,\n );\n }\n}\n\nexport type FunctionHandler<\n TInput extends ComposableStandardSchema | undefined = undefined,\n TServices extends Service[] = [],\n TLogger extends Logger = Logger,\n OutSchema extends StandardSchemaV1 | undefined = undefined,\n TDatabase = undefined,\n TAuditStorage extends AuditStorage | undefined = undefined,\n TAuditAction extends AuditableAction<string, unknown> = AuditableAction<\n string,\n unknown\n >,\n> = (\n ctx: FunctionContext<\n TInput,\n TServices,\n TLogger,\n TDatabase,\n TAuditStorage,\n TAuditAction\n >,\n) => OutSchema extends StandardSchemaV1\n ? InferStandardSchema<OutSchema> | Promise<InferStandardSchema<OutSchema>>\n : any | Promise<any>;\n\n/**\n * Conditional type that adds `db` property only when TDatabase is configured.\n */\ntype DatabaseContext<TDatabase> = TDatabase extends undefined\n ? {}\n : { db: TDatabase };\n\n/**\n * Conditional auditor context - only present when audit storage is configured.\n */\ntype AuditorContext<\n TAuditAction extends AuditableAction<string, unknown> = AuditableAction<\n string,\n unknown\n >,\n TAuditStorage = undefined,\n> = TAuditStorage extends undefined\n ? {}\n : {\n /**\n * Auditor instance for recording audit events.\n * Only present when audit storage is configured on the function.\n */\n auditor: Auditor<TAuditAction>;\n };\n\nexport type FunctionContext<\n Input extends ComposableStandardSchema | undefined = undefined,\n TServices extends Service[] = [],\n TLogger extends Logger = Logger,\n TDatabase = undefined,\n TAuditStorage extends AuditStorage | undefined = undefined,\n TAuditAction extends AuditableAction<string, unknown> = AuditableAction<\n string,\n unknown\n >,\n> = {\n services: ServiceRecord<TServices>;\n logger: TLogger;\n input: InferComposableStandardSchema<Input>;\n} & DatabaseContext<TDatabase> &\n AuditorContext<TAuditAction, TAuditStorage>;\n"],"mappings":";;;;;;;AAgBA,MAAMA,mBAAiB,IAAI;AAE3B,IAAa,kBAAb,MAAa,gBAGX;CACA,AAAQ;CACR,YACEC,iBACQC,gBAAyBF,kBACjC;EADQ;AAGR,OAAK,kBAAkB,OACrB,iBACA,CAAC,MAAM,EAAE,YACV;CACF;CAGD,SACEG,UACgD;AAChD,SAAO,IAAI,gBACT,CAAC,GAAG,UAAU,GAAG,KAAK,eAAgB,GACtC,KAAK;CAER;CAED,OAAyBC,QAA0C;AACjE,SAAO,IAAI,gBAA8B,KAAK,iBAAiB;CAChE;AACF;AAED,IAAa,WAAb,MAAa,iBAgCH,UAQR;CACA,kBAAkB;CAElB,OAAO,WAAWC,KAAoD;AACpE,SAAO,QACL,OACE,IAAI,oBAAoB,QACxB,IAAI,SAAS,cAAc,SAC9B;CACF;;;;;;;;CASD,OAAO,SAAqCC,QAAWC,MAAe;AACpE,SAAO,OAAO,aAAa,SAAS,KAAK;CAC1C;;;;;;;;;CAUD,aAAa,YACXD,QACAC,MACiC;AACjC,MAAI;AACF,UAAO,MAAM,YAAY,QAAQ,KAAK;EACvC,SAAQ,QAAQ;AACf,SAAM,IAAI,yBAAyB,qBAAqB;EACzD;CACF;;;;;;;;CASD,MAAM,YAAYC,QAA0D;AAC1E,SAAO,SAAS,YACd,KAAK,cACL,OACD;CACF;CAED,YACqBC,IACnB,UAAU,KACVC,OAAsB,cAAc,UAC7BC,OACPC,cACAC,WAAsB,CAAE,GACxBC,SAAkBd,kBAClBe,kBACAC,SAAoD,CAAE,GACtDC,YACAC,uBACOC,iBACP;AACA,QACE,MACA,QACA,UACA,QACA,kBACA,cACA,SACA,YACA,sBACD;EAvBkB;EAGZ;EAQA;CAaR;AACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Function-Cf7f_kCz.d.cts","names":[],"sources":["../src/functions/Function.ts"],"sourcesContent":[],"mappings":"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"}
|