@geekmidas/constructs 10.0.0-alpha.11 → 10.0.0-alpha.111
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/README.md +222 -158
- package/dist/Construct-BQALFCh2.d.cts +230 -0
- package/dist/Construct-BQALFCh2.d.cts.map +1 -0
- package/dist/{Construct-BD5neF7w.mjs → Construct-CKUA-CTA.mjs} +35 -35
- package/dist/Construct-CKUA-CTA.mjs.map +1 -0
- package/dist/{Construct-CyS3RpTL.cjs → Construct-DEOVauyA.cjs} +55 -49
- package/dist/Construct-DEOVauyA.cjs.map +1 -0
- package/dist/Construct-QXnl3VqT.d.mts +230 -0
- package/dist/Construct-QXnl3VqT.d.mts.map +1 -0
- package/dist/{Cron-DmQ8vQ4b.d.cts → Cron-CQJqqkhY.d.mts} +17 -11
- package/dist/Cron-CQJqqkhY.d.mts.map +1 -0
- package/dist/{Cron-dh4rUgib.d.mts → Cron-DI3nKoic.d.cts} +17 -11
- package/dist/Cron-DI3nKoic.d.cts.map +1 -0
- package/dist/{CronBuilder-Da0C0edR.cjs → CronBuilder-BXTG10u5.cjs} +47 -31
- package/dist/CronBuilder-BXTG10u5.cjs.map +1 -0
- package/dist/{CronBuilder-CYKT5RiO.mjs → CronBuilder-D3sF9tS_.mjs} +37 -21
- package/dist/CronBuilder-D3sF9tS_.mjs.map +1 -0
- package/dist/CronBuilder-Xx_zakuc.d.mts +47 -0
- package/dist/CronBuilder-Xx_zakuc.d.mts.map +1 -0
- package/dist/CronBuilder-g1lZLWyG.d.cts +47 -0
- package/dist/CronBuilder-g1lZLWyG.d.cts.map +1 -0
- package/dist/{Endpoint-BjWKinFA.d.mts → Endpoint-BWyKCa2x.d.cts} +130 -100
- package/dist/Endpoint-BWyKCa2x.d.cts.map +1 -0
- package/dist/{Endpoint-dav89W6-.d.cts → Endpoint-CrE9Ppdk.d.mts} +130 -100
- package/dist/Endpoint-CrE9Ppdk.d.mts.map +1 -0
- package/dist/{Endpoint-DCQPMdUX.mjs → Endpoint-gPXhHKhJ.mjs} +208 -100
- package/dist/Endpoint-gPXhHKhJ.mjs.map +1 -0
- package/dist/{Endpoint-DcWXE-SZ.cjs → Endpoint-yhR2T2Wt.cjs} +248 -122
- package/dist/Endpoint-yhR2T2Wt.cjs.map +1 -0
- package/dist/{index-lAO9egTb.d.mts → EndpointFactory-BV-nfnaP.d.mts} +85 -136
- package/dist/EndpointFactory-BV-nfnaP.d.mts.map +1 -0
- package/dist/{EndpointFactory-CdWB7wPw.cjs → EndpointFactory-BVv6EIDu.cjs} +98 -112
- package/dist/EndpointFactory-BVv6EIDu.cjs.map +1 -0
- package/dist/{index-Bd5FqCoe.d.cts → EndpointFactory-C1-IBwm4.d.cts} +84 -135
- package/dist/EndpointFactory-C1-IBwm4.d.cts.map +1 -0
- package/dist/{EndpointFactory-CjV8F_lJ.mjs → EndpointFactory-Cs8IHvwF.mjs} +62 -76
- package/dist/EndpointFactory-Cs8IHvwF.mjs.map +1 -0
- package/dist/Function-DuqGcbOI.d.mts +76 -0
- package/dist/Function-DuqGcbOI.d.mts.map +1 -0
- package/dist/Function-Pu-1kKZz.d.cts +76 -0
- package/dist/Function-Pu-1kKZz.d.cts.map +1 -0
- package/dist/{HonoEndpointAdaptor-DtL9j19R.cjs → HonoEndpointAdaptor-CN1jjUBJ.cjs} +115 -71
- package/dist/HonoEndpointAdaptor-CN1jjUBJ.cjs.map +1 -0
- package/dist/{HonoEndpointAdaptor-P1ahhZHu.mjs → HonoEndpointAdaptor-euH1oSdY.mjs} +105 -64
- package/dist/HonoEndpointAdaptor-euH1oSdY.mjs.map +1 -0
- package/dist/Queue-BhuofM3k.cjs +109 -0
- package/dist/Queue-BhuofM3k.cjs.map +1 -0
- package/dist/{Queue-D7ZuwBhy.d.cts → Queue-DlsHRzUp.d.mts} +48 -48
- package/dist/Queue-DlsHRzUp.d.mts.map +1 -0
- package/dist/{Queue-gVGfi2Yk.d.mts → Queue-HPyi0e1i.d.cts} +49 -49
- package/dist/Queue-HPyi0e1i.d.cts.map +1 -0
- package/dist/Queue-cmhqEBOB.mjs +104 -0
- package/dist/Queue-cmhqEBOB.mjs.map +1 -0
- package/dist/QueueBuilder-Cx9lKC5d.d.mts +75 -0
- package/dist/QueueBuilder-Cx9lKC5d.d.mts.map +1 -0
- package/dist/QueueBuilder-DXu1qxT1.mjs +118 -0
- package/dist/QueueBuilder-DXu1qxT1.mjs.map +1 -0
- package/dist/QueueBuilder-DdU2klPu.cjs +135 -0
- package/dist/QueueBuilder-DdU2klPu.cjs.map +1 -0
- package/dist/QueueBuilder-OSi6LkV9.d.cts +75 -0
- package/dist/QueueBuilder-OSi6LkV9.d.cts.map +1 -0
- package/dist/{Subscriber-2mEi0ImH.d.cts → Subscriber-Bpp02cGr.d.cts} +29 -20
- package/dist/Subscriber-Bpp02cGr.d.cts.map +1 -0
- package/dist/{Subscriber-xTJ9ayPN.d.mts → Subscriber-CtN9R48-.d.mts} +29 -20
- package/dist/Subscriber-CtN9R48-.d.mts.map +1 -0
- package/dist/SubscriberBuilder-4DWe9feX.d.mts +67 -0
- package/dist/SubscriberBuilder-4DWe9feX.d.mts.map +1 -0
- package/dist/{SubscriberBuilder-BjkbeT9l.mjs → SubscriberBuilder-DRXfxWn_.mjs} +50 -24
- package/dist/SubscriberBuilder-DRXfxWn_.mjs.map +1 -0
- package/dist/{SubscriberBuilder-4OPehf2R.cjs → SubscriberBuilder-M2EAgQhC.cjs} +61 -36
- package/dist/SubscriberBuilder-M2EAgQhC.cjs.map +1 -0
- package/dist/SubscriberBuilder-g3fAVWgs.d.cts +67 -0
- package/dist/SubscriberBuilder-g3fAVWgs.d.cts.map +1 -0
- package/dist/Topic-D2R0r24C.mjs +99 -0
- package/dist/Topic-D2R0r24C.mjs.map +1 -0
- package/dist/Topic-DwS3QO0m.cjs +104 -0
- package/dist/Topic-DwS3QO0m.cjs.map +1 -0
- package/dist/adaptors/aws.cjs +200 -246
- package/dist/adaptors/aws.cjs.map +1 -1
- package/dist/adaptors/aws.d.cts +58 -62
- package/dist/adaptors/aws.d.cts.map +1 -1
- package/dist/adaptors/aws.d.mts +59 -63
- package/dist/adaptors/aws.d.mts.map +1 -1
- package/dist/adaptors/aws.mjs +171 -219
- package/dist/adaptors/aws.mjs.map +1 -1
- package/dist/adaptors/hono.cjs +3 -10
- package/dist/adaptors/hono.d.cts +7 -16
- package/dist/adaptors/hono.d.cts.map +1 -1
- package/dist/adaptors/hono.d.mts +9 -18
- package/dist/adaptors/hono.d.mts.map +1 -1
- package/dist/adaptors/hono.mjs +2 -10
- package/dist/adaptors/testing.cjs +765 -99
- package/dist/adaptors/testing.cjs.map +1 -1
- package/dist/adaptors/testing.d.cts +351 -54
- package/dist/adaptors/testing.d.cts.map +1 -1
- package/dist/adaptors/testing.d.mts +351 -54
- package/dist/adaptors/testing.d.mts.map +1 -1
- package/dist/adaptors/testing.mjs +726 -78
- package/dist/adaptors/testing.mjs.map +1 -1
- package/dist/auth-BMCJN30Y.d.cts +268 -0
- package/dist/auth-BMCJN30Y.d.cts.map +1 -0
- package/dist/auth-D_0788uW.d.mts +268 -0
- package/dist/auth-D_0788uW.d.mts.map +1 -0
- package/dist/auth.cjs +301 -33
- package/dist/auth.cjs.map +1 -1
- package/dist/auth.d.cts +2 -108
- package/dist/auth.d.mts +2 -108
- package/dist/auth.mjs +289 -27
- package/dist/auth.mjs.map +1 -1
- package/dist/{cache-BrRz3fEB.d.mts → cache-5QZzh5Er.d.mts} +3 -6
- package/dist/cache-5QZzh5Er.d.mts.map +1 -0
- package/dist/{cache-BtZY_tHe.d.cts → cache-DnGDGly3.d.cts} +3 -6
- package/dist/cache-DnGDGly3.d.cts.map +1 -0
- package/dist/cache.cjs +68 -2
- package/dist/cache.cjs.map +1 -0
- package/dist/cache.d.cts +1 -2
- package/dist/cache.d.mts +1 -2
- package/dist/cache.mjs +67 -2
- package/dist/cache.mjs.map +1 -0
- package/dist/cipher-C1lEFX63.mjs +225 -0
- package/dist/cipher-C1lEFX63.mjs.map +1 -0
- package/dist/cipher-CVxfwLjk.cjs +332 -0
- package/dist/cipher-CVxfwLjk.cjs.map +1 -0
- package/dist/{clone-DblgEZZa.mjs → clone-EKNovYHu.mjs} +3 -3
- package/dist/clone-EKNovYHu.mjs.map +1 -0
- package/dist/{clone-Dy0cR2SZ.cjs → clone-UGJpvQnL.cjs} +7 -8
- package/dist/clone-UGJpvQnL.cjs.map +1 -0
- package/dist/{construct-interface-D9d4Gm4p.d.cts → construct-interface-B1AfqRl4.d.cts} +42 -11
- package/dist/construct-interface-B1AfqRl4.d.cts.map +1 -0
- package/dist/{construct-interface-g5GM5pwR.d.mts → construct-interface-ZvYQbivO.d.mts} +42 -11
- package/dist/construct-interface-ZvYQbivO.d.mts.map +1 -0
- package/dist/construct-interface.cjs +113 -7
- package/dist/construct-interface.cjs.map +1 -0
- package/dist/construct-interface.d.cts +2 -2
- package/dist/construct-interface.d.mts +2 -2
- package/dist/construct-interface.mjs +106 -2
- package/dist/construct-interface.mjs.map +1 -0
- package/dist/credential-DYymbp_7.cjs +257 -0
- package/dist/credential-DYymbp_7.cjs.map +1 -0
- package/dist/credential-DfSAOOdY.mjs +222 -0
- package/dist/credential-DfSAOOdY.mjs.map +1 -0
- package/dist/credential.cjs +8 -96
- package/dist/credential.d.cts +2 -61
- package/dist/credential.d.mts +2 -61
- package/dist/credential.mjs +2 -94
- package/dist/crons/index.cjs +129 -7
- package/dist/crons/index.cjs.map +1 -1
- package/dist/crons/index.d.cts +45 -11
- package/dist/crons/index.d.cts.map +1 -1
- package/dist/crons/index.d.mts +45 -11
- package/dist/crons/index.d.mts.map +1 -1
- package/dist/crons/index.mjs +127 -8
- package/dist/crons/index.mjs.map +1 -1
- package/dist/database/kysely.cjs +4 -181
- package/dist/database/kysely.d.cts +2 -152
- package/dist/database/kysely.d.mts +2 -152
- package/dist/database/kysely.mjs +2 -180
- package/dist/email.cjs +25 -12
- package/dist/email.cjs.map +1 -1
- package/dist/email.d.cts +3 -7
- package/dist/email.d.cts.map +1 -1
- package/dist/email.d.mts +4 -8
- package/dist/email.d.mts.map +1 -1
- package/dist/email.mjs +16 -3
- package/dist/email.mjs.map +1 -1
- package/dist/encryption.cjs +96 -0
- package/dist/encryption.cjs.map +1 -0
- package/dist/encryption.d.cts +117 -0
- package/dist/encryption.d.cts.map +1 -0
- package/dist/encryption.d.mts +117 -0
- package/dist/encryption.d.mts.map +1 -0
- package/dist/encryption.mjs +83 -0
- package/dist/encryption.mjs.map +1 -0
- package/dist/endpoints/index.cjs +20 -16
- package/dist/endpoints/index.d.cts +105 -7
- package/dist/endpoints/index.d.cts.map +1 -0
- package/dist/endpoints/index.d.mts +105 -7
- package/dist/endpoints/index.d.mts.map +1 -0
- package/dist/endpoints/index.mjs +6 -10
- package/dist/external-api.cjs +106 -0
- package/dist/external-api.cjs.map +1 -0
- package/dist/external-api.d.cts +2 -0
- package/dist/external-api.d.mts +2 -0
- package/dist/external-api.mjs +103 -0
- package/dist/external-api.mjs.map +1 -0
- package/dist/fake-DqKo8INJ.d.mts +201 -0
- package/dist/fake-DqKo8INJ.d.mts.map +1 -0
- package/dist/fake-Dvion_Fh.d.cts +201 -0
- package/dist/fake-Dvion_Fh.d.cts.map +1 -0
- package/dist/file-server.cjs +42 -10
- package/dist/file-server.cjs.map +1 -1
- package/dist/file-server.d.cts +6 -10
- package/dist/file-server.d.cts.map +1 -1
- package/dist/file-server.d.mts +6 -10
- package/dist/file-server.d.mts.map +1 -1
- package/dist/file-server.mjs +34 -2
- package/dist/file-server.mjs.map +1 -1
- package/dist/functions/index.cjs +3 -6
- package/dist/functions/index.d.cts +3 -4
- package/dist/functions/index.d.mts +3 -4
- package/dist/functions/index.mjs +2 -6
- package/dist/{functions-14lpEFL4.mjs → functions-CTI-hDem.mjs} +376 -238
- package/dist/{functions-14lpEFL4.mjs.map → functions-CTI-hDem.mjs.map} +1 -1
- package/dist/{functions-i_la-N5r.cjs → functions-D7O5SGVc.cjs} +414 -264
- package/dist/functions-D7O5SGVc.cjs.map +1 -0
- package/dist/index-B13kQB_U.d.mts +115 -0
- package/dist/index-B13kQB_U.d.mts.map +1 -0
- package/dist/index-BuzRvKOQ.d.cts +115 -0
- package/dist/index-BuzRvKOQ.d.cts.map +1 -0
- package/dist/index-CeEtxDmK.d.cts +79 -0
- package/dist/index-CeEtxDmK.d.cts.map +1 -0
- package/dist/index-CeEtxDmK.d.mts +79 -0
- package/dist/index-CeEtxDmK.d.mts.map +1 -0
- package/dist/index.cjs +6 -3
- package/dist/index.d.cts +27 -4
- package/dist/index.d.cts.map +1 -0
- package/dist/index.d.mts +27 -4
- package/dist/index.d.mts.map +1 -0
- package/dist/index.mjs +3 -3
- package/dist/kms-B-Hm3d5r.cjs +85 -0
- package/dist/kms-B-Hm3d5r.cjs.map +1 -0
- package/dist/kms-BdUlMJEZ.mjs +85 -0
- package/dist/kms-BdUlMJEZ.mjs.map +1 -0
- package/dist/kysely-B3zfg9ti.cjs +383 -0
- package/dist/kysely-B3zfg9ti.cjs.map +1 -0
- package/dist/kysely-B_0BAr0T.mjs +370 -0
- package/dist/kysely-B_0BAr0T.mjs.map +1 -0
- package/dist/kysely-D0bpzgPs.d.cts +175 -0
- package/dist/kysely-D0bpzgPs.d.cts.map +1 -0
- package/dist/kysely-DKwnl0nf.d.mts +175 -0
- package/dist/kysely-DKwnl0nf.d.mts.map +1 -0
- package/dist/{telemetry-C3L0iS28.d.cts → lambdaTelemetry-8vnmVZQ5.d.cts} +3 -6
- package/dist/lambdaTelemetry-8vnmVZQ5.d.cts.map +1 -0
- package/dist/{telemetry-D7bVFLGi.d.mts → lambdaTelemetry-8vnmVZQ5.d.mts} +3 -6
- package/dist/lambdaTelemetry-8vnmVZQ5.d.mts.map +1 -0
- package/dist/mobile-app.cjs +74 -0
- package/dist/mobile-app.cjs.map +1 -0
- package/dist/mobile-app.d.cts +73 -0
- package/dist/mobile-app.d.cts.map +1 -0
- package/dist/mobile-app.d.mts +73 -0
- package/dist/mobile-app.d.mts.map +1 -0
- package/dist/mobile-app.mjs +73 -0
- package/dist/mobile-app.mjs.map +1 -0
- package/dist/object-storage.cjs +18 -10
- package/dist/object-storage.cjs.map +1 -1
- package/dist/object-storage.d.cts +3 -7
- package/dist/object-storage.d.cts.map +1 -1
- package/dist/object-storage.d.mts +3 -7
- package/dist/object-storage.d.mts.map +1 -1
- package/dist/object-storage.mjs +11 -3
- package/dist/object-storage.mjs.map +1 -1
- package/dist/queue/index.cjs +6 -189
- package/dist/queue/index.d.cts +3 -60
- package/dist/queue/index.d.mts +3 -60
- package/dist/queue/index.mjs +3 -186
- package/dist/random-password.cjs +86 -0
- package/dist/random-password.cjs.map +1 -0
- package/dist/random-password.d.cts +30 -0
- package/dist/random-password.d.cts.map +1 -0
- package/dist/random-password.d.mts +30 -0
- package/dist/random-password.d.mts.map +1 -0
- package/dist/random-password.mjs +84 -0
- package/dist/random-password.mjs.map +1 -0
- package/dist/{lazyAccessors-BoJN3SMd.mjs → readRequestBody-BTIl3k-D.mjs} +117 -60
- package/dist/readRequestBody-BTIl3k-D.mjs.map +1 -0
- package/dist/readRequestBody-Dej_L3c4.cjs +342 -0
- package/dist/readRequestBody-Dej_L3c4.cjs.map +1 -0
- package/dist/requestLogger-BZcXwdBs.cjs +207 -0
- package/dist/requestLogger-BZcXwdBs.cjs.map +1 -0
- package/dist/requestLogger-pA4gi3E1.mjs +178 -0
- package/dist/requestLogger-pA4gi3E1.mjs.map +1 -0
- package/dist/rest-api.cjs +90 -59
- package/dist/rest-api.cjs.map +1 -1
- package/dist/rest-api.d.cts +70 -42
- package/dist/rest-api.d.cts.map +1 -1
- package/dist/rest-api.d.mts +70 -42
- package/dist/rest-api.d.mts.map +1 -1
- package/dist/rest-api.mjs +82 -51
- package/dist/rest-api.mjs.map +1 -1
- package/dist/{chunk-DWy1uDak.cjs → rolldown-runtime-y5ARvAq5.cjs} +14 -18
- package/dist/runSubscriber-BHvJ8POr.mjs +109 -0
- package/dist/runSubscriber-BHvJ8POr.mjs.map +1 -0
- package/dist/runSubscriber-D8nLXIv1.cjs +126 -0
- package/dist/runSubscriber-D8nLXIv1.cjs.map +1 -0
- package/dist/shutdown-BMJmAhSt.cjs +38 -0
- package/dist/shutdown-BMJmAhSt.cjs.map +1 -0
- package/dist/shutdown-C7xa8x9S.mjs +27 -0
- package/dist/shutdown-C7xa8x9S.mjs.map +1 -0
- package/dist/site.cjs +33 -7
- package/dist/site.cjs.map +1 -1
- package/dist/site.d.cts +17 -7
- package/dist/site.d.cts.map +1 -1
- package/dist/site.d.mts +17 -7
- package/dist/site.d.mts.map +1 -1
- package/dist/site.mjs +29 -3
- package/dist/site.mjs.map +1 -1
- package/dist/stages-BSCF19o2.d.cts +56 -0
- package/dist/stages-BSCF19o2.d.cts.map +1 -0
- package/dist/stages-BSCF19o2.d.mts +56 -0
- package/dist/stages-BSCF19o2.d.mts.map +1 -0
- package/dist/subscribers/index.cjs +118 -6
- package/dist/subscribers/index.cjs.map +1 -0
- package/dist/subscribers/index.d.cts +51 -6
- package/dist/subscribers/index.d.cts.map +1 -0
- package/dist/subscribers/index.d.mts +51 -6
- package/dist/subscribers/index.d.mts.map +1 -0
- package/dist/subscribers/index.mjs +115 -5
- package/dist/subscribers/index.mjs.map +1 -0
- package/dist/surfaceEnv-CNimK76p.cjs +56 -0
- package/dist/surfaceEnv-CNimK76p.cjs.map +1 -0
- package/dist/surfaceEnv-wMT5QzgZ.mjs +45 -0
- package/dist/surfaceEnv-wMT5QzgZ.mjs.map +1 -0
- package/dist/telemetry-B48RLjyk.d.cts +40 -0
- package/dist/telemetry-B48RLjyk.d.cts.map +1 -0
- package/dist/telemetry-BEoBn6GO.d.mts +40 -0
- package/dist/telemetry-BEoBn6GO.d.mts.map +1 -0
- package/dist/telemetry.cjs +56 -0
- package/dist/telemetry.cjs.map +1 -0
- package/dist/telemetry.d.cts +2 -0
- package/dist/telemetry.d.mts +2 -0
- package/dist/telemetry.mjs +55 -0
- package/dist/telemetry.mjs.map +1 -0
- package/dist/topic/index.cjs +3 -137
- package/dist/topic/index.d.cts +2 -4
- package/dist/topic/index.d.mts +2 -4
- package/dist/topic/index.mjs +2 -134
- package/dist/tracing-Bbj1uoFJ.mjs +127 -0
- package/dist/tracing-Bbj1uoFJ.mjs.map +1 -0
- package/dist/tracing-C0ooU0V2.cjs +150 -0
- package/dist/tracing-C0ooU0V2.cjs.map +1 -0
- package/dist/{types-BlAkSuGI.d.cts → types-DMuSQeLL.d.cts} +3 -5
- package/dist/types-DMuSQeLL.d.cts.map +1 -0
- package/dist/{types-aKksMEWL.d.mts → types-DMuSQeLL.d.mts} +3 -5
- package/dist/types-DMuSQeLL.d.mts.map +1 -0
- package/dist/types.d.cts +1 -1
- package/dist/types.d.mts +1 -1
- package/dist/types.mjs +1 -0
- package/dist/worker.cjs +59 -34
- package/dist/worker.cjs.map +1 -1
- package/dist/worker.d.cts +70 -45
- package/dist/worker.d.cts.map +1 -1
- package/dist/worker.d.mts +71 -46
- package/dist/worker.d.mts.map +1 -1
- package/dist/worker.mjs +54 -29
- package/dist/worker.mjs.map +1 -1
- package/package.json +106 -42
- package/dist/Construct-BD5neF7w.mjs.map +0 -1
- package/dist/Construct-C0ijr2qp.d.cts +0 -117
- package/dist/Construct-C0ijr2qp.d.cts.map +0 -1
- package/dist/Construct-Ct8nalEi.d.mts +0 -117
- package/dist/Construct-Ct8nalEi.d.mts.map +0 -1
- package/dist/Construct-CyS3RpTL.cjs.map +0 -1
- package/dist/Cron-DmQ8vQ4b.d.cts.map +0 -1
- package/dist/Cron-dh4rUgib.d.mts.map +0 -1
- package/dist/CronBuilder-BquXDbDI.d.cts +0 -44
- package/dist/CronBuilder-BquXDbDI.d.cts.map +0 -1
- package/dist/CronBuilder-CGgY2080.d.mts +0 -44
- package/dist/CronBuilder-CGgY2080.d.mts.map +0 -1
- package/dist/CronBuilder-CYKT5RiO.mjs.map +0 -1
- package/dist/CronBuilder-Da0C0edR.cjs.map +0 -1
- package/dist/Endpoint-BjWKinFA.d.mts.map +0 -1
- package/dist/Endpoint-DCQPMdUX.mjs.map +0 -1
- package/dist/Endpoint-DcWXE-SZ.cjs.map +0 -1
- package/dist/Endpoint-dav89W6-.d.cts.map +0 -1
- package/dist/EndpointFactory-CdWB7wPw.cjs.map +0 -1
- package/dist/EndpointFactory-CjV8F_lJ.mjs.map +0 -1
- package/dist/HonoEndpointAdaptor-DtL9j19R.cjs.map +0 -1
- package/dist/HonoEndpointAdaptor-P1ahhZHu.mjs.map +0 -1
- package/dist/Queue-D7ZuwBhy.d.cts.map +0 -1
- package/dist/Queue-gVGfi2Yk.d.mts.map +0 -1
- package/dist/Subscriber-2mEi0ImH.d.cts.map +0 -1
- package/dist/Subscriber-xTJ9ayPN.d.mts.map +0 -1
- package/dist/SubscriberBuilder-4OPehf2R.cjs.map +0 -1
- package/dist/SubscriberBuilder-BjkbeT9l.mjs.map +0 -1
- package/dist/SubscriberBuilder-Dptmo-1A.d.mts +0 -62
- package/dist/SubscriberBuilder-Dptmo-1A.d.mts.map +0 -1
- package/dist/SubscriberBuilder-waNhzjSM.d.cts +0 -62
- package/dist/SubscriberBuilder-waNhzjSM.d.cts.map +0 -1
- package/dist/Topic-19QeHBIR.d.cts +0 -91
- package/dist/Topic-19QeHBIR.d.cts.map +0 -1
- package/dist/Topic-DuFeqkBh.d.mts +0 -91
- package/dist/Topic-DuFeqkBh.d.mts.map +0 -1
- package/dist/auth.d.cts.map +0 -1
- package/dist/auth.d.mts.map +0 -1
- package/dist/cache-0ANvRQnD.mjs +0 -51
- package/dist/cache-0ANvRQnD.mjs.map +0 -1
- package/dist/cache-3WSvAulx.cjs +0 -57
- package/dist/cache-3WSvAulx.cjs.map +0 -1
- package/dist/cache-BrRz3fEB.d.mts.map +0 -1
- package/dist/cache-BtZY_tHe.d.cts.map +0 -1
- package/dist/clone-DblgEZZa.mjs.map +0 -1
- package/dist/clone-Dy0cR2SZ.cjs.map +0 -1
- package/dist/construct-interface-BfjcOD_E.cjs +0 -117
- package/dist/construct-interface-BfjcOD_E.cjs.map +0 -1
- package/dist/construct-interface-D9d4Gm4p.d.cts.map +0 -1
- package/dist/construct-interface-Z4CpS8tK.mjs +0 -81
- package/dist/construct-interface-Z4CpS8tK.mjs.map +0 -1
- package/dist/construct-interface-g5GM5pwR.d.mts.map +0 -1
- package/dist/credential.cjs.map +0 -1
- package/dist/credential.d.cts.map +0 -1
- package/dist/credential.d.mts.map +0 -1
- package/dist/credential.mjs.map +0 -1
- package/dist/database/kysely.cjs.map +0 -1
- package/dist/database/kysely.d.cts.map +0 -1
- package/dist/database/kysely.d.mts.map +0 -1
- package/dist/database/kysely.mjs.map +0 -1
- package/dist/functions-i_la-N5r.cjs.map +0 -1
- package/dist/index-Bd5FqCoe.d.cts.map +0 -1
- package/dist/index-BknhM6Ux.d.mts +0 -31
- package/dist/index-BknhM6Ux.d.mts.map +0 -1
- package/dist/index-CBSfrowv.d.cts +0 -31
- package/dist/index-CBSfrowv.d.cts.map +0 -1
- package/dist/index-D24Xm79M.d.cts +0 -171
- package/dist/index-D24Xm79M.d.cts.map +0 -1
- package/dist/index-_ajboYxK.d.mts +0 -171
- package/dist/index-_ajboYxK.d.mts.map +0 -1
- package/dist/index-lAO9egTb.d.mts.map +0 -1
- package/dist/lazyAccessors-BoJN3SMd.mjs.map +0 -1
- package/dist/lazyAccessors-e3j2oE2m.cjs +0 -274
- package/dist/lazyAccessors-e3j2oE2m.cjs.map +0 -1
- package/dist/processAudits-CGqttuXm.cjs +0 -92
- package/dist/processAudits-CGqttuXm.cjs.map +0 -1
- package/dist/processAudits-Dmts9H_b.mjs +0 -80
- package/dist/processAudits-Dmts9H_b.mjs.map +0 -1
- package/dist/queue/index.cjs.map +0 -1
- package/dist/queue/index.d.cts.map +0 -1
- package/dist/queue/index.d.mts.map +0 -1
- package/dist/queue/index.mjs.map +0 -1
- package/dist/surfaceEnv-BFXEms2f.cjs +0 -39
- package/dist/surfaceEnv-BFXEms2f.cjs.map +0 -1
- package/dist/surfaceEnv-C3Ktahea.mjs +0 -27
- package/dist/surfaceEnv-C3Ktahea.mjs.map +0 -1
- package/dist/telemetry-C3L0iS28.d.cts.map +0 -1
- package/dist/telemetry-D7bVFLGi.d.mts.map +0 -1
- package/dist/topic/index.cjs.map +0 -1
- package/dist/topic/index.mjs.map +0 -1
- package/dist/types-BlAkSuGI.d.cts.map +0 -1
- package/dist/types-aKksMEWL.d.mts.map +0 -1
package/dist/adaptors/aws.mjs
CHANGED
|
@@ -1,21 +1,23 @@
|
|
|
1
|
-
import { __toESM } from "../Construct-
|
|
2
|
-
import "../
|
|
3
|
-
import { FunctionBuilder } from "../functions-
|
|
4
|
-
import "../
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import { createAuditContext,
|
|
1
|
+
import { o as __toESM } from "../Construct-CKUA-CTA.mjs";
|
|
2
|
+
import { r as recordCarrier } from "../tracing-Bbj1uoFJ.mjs";
|
|
3
|
+
import { a as publishEvents, i as publishConstructEvents, t as FunctionBuilder } from "../functions-CTI-hDem.mjs";
|
|
4
|
+
import { o as require_lodash_set, r as ResponseBuilder, t as Endpoint } from "../Endpoint-gPXhHKhJ.mjs";
|
|
5
|
+
import { n as envParserFor } from "../surfaceEnv-wMT5QzgZ.mjs";
|
|
6
|
+
import { a as createApiGatewayCookies, i as readRequestBody } from "../readRequestBody-BTIl3k-D.mjs";
|
|
7
|
+
import { n as subscribedEvents, r as subscriberContext, t as runSubscriber } from "../runSubscriber-BHvJ8POr.mjs";
|
|
8
|
+
import { i as executeWithAuditTransaction, n as enforceRateLimit, r as createAuditContext, t as requestLogger } from "../requestLogger-pA4gi3E1.mjs";
|
|
9
|
+
import { consumeBatchTraced } from "@geekmidas/events";
|
|
10
|
+
import { ServiceDiscovery, currentRequestContext, runWithRequestContext } from "@geekmidas/services";
|
|
9
11
|
import { ForbiddenError, UnprocessableEntityError, wrapError } from "@geekmidas/errors";
|
|
10
|
-
import
|
|
12
|
+
import qs from "qs";
|
|
11
13
|
import middy from "@middy/core";
|
|
12
14
|
import { DefaultAuditor } from "@geekmidas/audit";
|
|
13
15
|
import { withAuditableTransaction } from "@geekmidas/audit/kysely";
|
|
14
16
|
import { withRlsContext } from "@geekmidas/db/rls";
|
|
15
|
-
import qs from "qs";
|
|
16
|
-
|
|
17
17
|
//#region src/functions/FunctionExecutionWrapper.ts
|
|
18
18
|
var FunctionExecutionWrapper = class {
|
|
19
|
+
envParser;
|
|
20
|
+
fn;
|
|
19
21
|
constructor(envParser, fn) {
|
|
20
22
|
this.envParser = envParser;
|
|
21
23
|
this.fn = fn;
|
|
@@ -25,25 +27,22 @@ var FunctionExecutionWrapper = class {
|
|
|
25
27
|
return this._logger || this.fn.logger;
|
|
26
28
|
}
|
|
27
29
|
get serviceDiscovery() {
|
|
28
|
-
|
|
29
|
-
return serviceDiscovery;
|
|
30
|
+
return ServiceDiscovery.getInstance(this.envParser);
|
|
30
31
|
}
|
|
31
32
|
getServices() {
|
|
32
33
|
return this.serviceDiscovery.register(this.fn.services);
|
|
33
34
|
}
|
|
34
35
|
async getDatabase() {
|
|
35
|
-
if (!this.fn.databaseService) return
|
|
36
|
-
|
|
37
|
-
return services[this.fn.databaseService.serviceName];
|
|
36
|
+
if (!this.fn.databaseService) return;
|
|
37
|
+
return (await this.serviceDiscovery.register([this.fn.databaseService]))[this.fn.databaseService.serviceName];
|
|
38
38
|
}
|
|
39
39
|
/**
|
|
40
40
|
* Get the audit storage service if configured.
|
|
41
41
|
* Returns undefined if no auditor storage is configured.
|
|
42
42
|
*/
|
|
43
43
|
async getAuditStorage() {
|
|
44
|
-
if (!this.fn.auditorStorageService) return
|
|
45
|
-
|
|
46
|
-
return services[this.fn.auditorStorageService.serviceName];
|
|
44
|
+
if (!this.fn.auditorStorageService) return;
|
|
45
|
+
return (await this.serviceDiscovery.register([this.fn.auditorStorageService]))[this.fn.auditorStorageService.serviceName];
|
|
47
46
|
}
|
|
48
47
|
/**
|
|
49
48
|
* Create an auditor instance for the function.
|
|
@@ -51,7 +50,7 @@ var FunctionExecutionWrapper = class {
|
|
|
51
50
|
*/
|
|
52
51
|
async createAuditor() {
|
|
53
52
|
const storage = await this.getAuditStorage();
|
|
54
|
-
if (!storage) return
|
|
53
|
+
if (!storage) return;
|
|
55
54
|
return new DefaultAuditor({
|
|
56
55
|
actor: {
|
|
57
56
|
id: "system",
|
|
@@ -72,51 +71,44 @@ var FunctionExecutionWrapper = class {
|
|
|
72
71
|
async executeWithAudit(handler) {
|
|
73
72
|
const auditor = await this.createAuditor();
|
|
74
73
|
const storage = await this.getAuditStorage();
|
|
75
|
-
if (!auditor || !storage) {
|
|
76
|
-
const db$1 = await this.getDatabase();
|
|
77
|
-
return handler({ db: db$1 });
|
|
78
|
-
}
|
|
74
|
+
if (!auditor || !storage) return handler({ db: await this.getDatabase() });
|
|
79
75
|
const storageDb = storage.getDatabase?.();
|
|
80
76
|
const databaseServiceName = this.fn.databaseService?.serviceName;
|
|
81
77
|
const auditDbServiceName = this.fn.auditorStorageService?.serviceName;
|
|
82
78
|
if (storageDb && databaseServiceName && auditDbServiceName) return withAuditableTransaction(storageDb, auditor, async (trx) => {
|
|
83
|
-
|
|
79
|
+
return await handler({
|
|
84
80
|
auditor,
|
|
85
81
|
db: trx
|
|
86
82
|
});
|
|
87
|
-
return response$1;
|
|
88
83
|
});
|
|
89
|
-
const db = await this.getDatabase();
|
|
90
84
|
const response = await handler({
|
|
91
85
|
auditor,
|
|
92
|
-
db
|
|
86
|
+
db: await this.getDatabase()
|
|
93
87
|
});
|
|
94
88
|
await auditor.flush();
|
|
95
89
|
return response;
|
|
96
90
|
}
|
|
97
91
|
async getFunctionInput(event) {
|
|
98
|
-
|
|
99
|
-
return parsedInput;
|
|
92
|
+
return await FunctionBuilder.parseComposableStandardSchema(event, this.fn.input);
|
|
100
93
|
}
|
|
101
94
|
async publishEvents(response) {
|
|
102
|
-
await publishEvents(this.logger, this.serviceDiscovery, this.fn.events, response
|
|
95
|
+
await publishEvents(this.logger, this.serviceDiscovery, this.fn.events, response);
|
|
103
96
|
}
|
|
104
97
|
async parseComposableStandardSchema(data, schema) {
|
|
105
98
|
return FunctionBuilder.parseComposableStandardSchema(data, schema);
|
|
106
99
|
}
|
|
107
100
|
};
|
|
108
|
-
|
|
109
101
|
//#endregion
|
|
110
102
|
//#region src/functions/AWSLambdaFunction.ts
|
|
111
103
|
var AWSLambdaFunction = class extends FunctionExecutionWrapper {
|
|
104
|
+
fn;
|
|
112
105
|
constructor(envParser, fn) {
|
|
113
106
|
super(envParser, fn);
|
|
114
107
|
this.fn = fn;
|
|
115
108
|
}
|
|
116
109
|
error() {
|
|
117
110
|
return { onError: (req) => {
|
|
118
|
-
|
|
119
|
-
logger.error(req.error || {}, "Error processing function");
|
|
111
|
+
(req.event?.logger || this.fn.logger).error(req.error || {}, "Error processing function");
|
|
120
112
|
throw wrapError(req.error);
|
|
121
113
|
} };
|
|
122
114
|
}
|
|
@@ -132,7 +124,7 @@ var AWSLambdaFunction = class extends FunctionExecutionWrapper {
|
|
|
132
124
|
} else req.event.parsedInput = req.event;
|
|
133
125
|
} catch (error) {
|
|
134
126
|
this.logger.error({
|
|
135
|
-
error,
|
|
127
|
+
err: error,
|
|
136
128
|
event: req.event
|
|
137
129
|
}, "Failed to parse input");
|
|
138
130
|
throw error;
|
|
@@ -192,8 +184,7 @@ var AWSLambdaFunction = class extends FunctionExecutionWrapper {
|
|
|
192
184
|
db: event.db,
|
|
193
185
|
auditor: event.auditor
|
|
194
186
|
});
|
|
195
|
-
|
|
196
|
-
return output;
|
|
187
|
+
return await this.fn.parseOutput(result);
|
|
197
188
|
}
|
|
198
189
|
get handler() {
|
|
199
190
|
const handler = this._handler.bind(this);
|
|
@@ -205,13 +196,13 @@ var AWSLambdaFunction = class extends FunctionExecutionWrapper {
|
|
|
205
196
|
return runWithRequestContext({
|
|
206
197
|
logger,
|
|
207
198
|
requestId,
|
|
208
|
-
startTime
|
|
199
|
+
startTime,
|
|
200
|
+
operation: context.functionName
|
|
209
201
|
}, () => chain(event, context));
|
|
210
202
|
};
|
|
211
203
|
return wrappedHandler;
|
|
212
204
|
}
|
|
213
205
|
};
|
|
214
|
-
|
|
215
206
|
//#endregion
|
|
216
207
|
//#region src/crons/AWSScheduledFunction.ts
|
|
217
208
|
/**
|
|
@@ -245,11 +236,11 @@ var AWSScheduledFunction = class extends AWSLambdaFunction {
|
|
|
245
236
|
super(envParser, cron);
|
|
246
237
|
}
|
|
247
238
|
};
|
|
248
|
-
|
|
249
239
|
//#endregion
|
|
250
240
|
//#region src/endpoints/AmazonApiGatewayEndpointAdaptor.ts
|
|
251
|
-
var
|
|
252
|
-
var AmazonApiGatewayEndpoint = class {
|
|
241
|
+
var import_lodash_set = /* @__PURE__ */ __toESM(require_lodash_set(), 1);
|
|
242
|
+
var AmazonApiGatewayEndpoint = class AmazonApiGatewayEndpoint {
|
|
243
|
+
endpoint;
|
|
253
244
|
options;
|
|
254
245
|
/**
|
|
255
246
|
* The parser this adaptor discovers services with.
|
|
@@ -272,24 +263,36 @@ var AmazonApiGatewayEndpoint = class {
|
|
|
272
263
|
const wrappedError = wrapError(req.error);
|
|
273
264
|
req.response = {
|
|
274
265
|
statusCode: wrappedError.statusCode,
|
|
275
|
-
body: wrappedError.body
|
|
266
|
+
body: wrappedError.body,
|
|
267
|
+
...wrappedError.headers ? { headers: { ...wrappedError.headers } } : {}
|
|
276
268
|
};
|
|
277
269
|
} };
|
|
278
270
|
}
|
|
279
271
|
/**
|
|
280
|
-
* Decodes the raw body from an API Gateway event
|
|
281
|
-
*
|
|
282
|
-
*
|
|
283
|
-
* - Anything else → return decoded string as-is, let the schema handle it
|
|
272
|
+
* Decodes the raw body from an API Gateway event — base64 when API
|
|
273
|
+
* Gateway says so — and reads it by its Content-Type, as every adaptor
|
|
274
|
+
* does (see {@link readRequestBody}): JSON, an HTML form's fields, or text.
|
|
284
275
|
*
|
|
285
|
-
*
|
|
276
|
+
* A body with no Content-Type is read as JSON, as it always has been here.
|
|
286
277
|
*/
|
|
287
|
-
static decodeBody(body, isBase64Encoded, contentType) {
|
|
278
|
+
static async decodeBody(body, isBase64Encoded, contentType) {
|
|
288
279
|
if (!body) return void 0;
|
|
289
|
-
const
|
|
290
|
-
const
|
|
291
|
-
|
|
292
|
-
|
|
280
|
+
const bytes = Buffer.from(body, isBase64Encoded ? "base64" : "utf-8");
|
|
281
|
+
const request = new Request("http://api-gateway.invalid/", {
|
|
282
|
+
method: "POST",
|
|
283
|
+
headers: contentType ? { "content-type": contentType } : {},
|
|
284
|
+
body: bytes
|
|
285
|
+
});
|
|
286
|
+
return readRequestBody(request, contentType, { untyped: "json" });
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* The event's body, read only for an endpoint with a `.body()` schema —
|
|
290
|
+
* one without is handed no body, and is not refused a content type it
|
|
291
|
+
* never reads.
|
|
292
|
+
*/
|
|
293
|
+
readBody(body, isBase64Encoded, contentType) {
|
|
294
|
+
if (!this.endpoint.input?.body) return Promise.resolve(void 0);
|
|
295
|
+
return AmazonApiGatewayEndpoint.decodeBody(body, isBase64Encoded, contentType);
|
|
293
296
|
}
|
|
294
297
|
getCookies(e) {
|
|
295
298
|
const headers = e.headers;
|
|
@@ -298,36 +301,38 @@ var AmazonApiGatewayEndpoint = class {
|
|
|
298
301
|
input() {
|
|
299
302
|
return { before: async (req) => {
|
|
300
303
|
try {
|
|
301
|
-
const { body, query, params } = this.getInput(req.event);
|
|
304
|
+
const { body, query, params } = await this.getInput(req.event);
|
|
302
305
|
const headers = req.event.headers;
|
|
303
306
|
const header = Endpoint.createHeaders(headers);
|
|
304
307
|
const cookie = this.getCookies(req.event);
|
|
305
|
-
(0,
|
|
306
|
-
(0,
|
|
307
|
-
(0,
|
|
308
|
-
(0,
|
|
309
|
-
(0,
|
|
308
|
+
(0, import_lodash_set.default)(req.event, "body", await this.endpoint.parseInput(body, "body"));
|
|
309
|
+
(0, import_lodash_set.default)(req.event, "query", await this.endpoint.parseInput(query, "query"));
|
|
310
|
+
(0, import_lodash_set.default)(req.event, "params", await this.endpoint.parseInput(params, "params"));
|
|
311
|
+
(0, import_lodash_set.default)(req.event, "header", header);
|
|
312
|
+
(0, import_lodash_set.default)(req.event, "cookie", cookie);
|
|
310
313
|
} catch (error) {
|
|
311
314
|
if (error && typeof error === "object" && Array.isArray(error)) throw new UnprocessableEntityError("Validation failed", error);
|
|
312
315
|
throw error;
|
|
313
316
|
}
|
|
314
317
|
} };
|
|
315
318
|
}
|
|
319
|
+
/** This request's logger: see {@link requestLogger}. */
|
|
320
|
+
requestLogger(event, context) {
|
|
321
|
+
return requestLogger(this.endpoint, {
|
|
322
|
+
requestId: context.awsRequestId,
|
|
323
|
+
host: event.headers?.host,
|
|
324
|
+
...this.getLoggerContext(event, context)
|
|
325
|
+
});
|
|
326
|
+
}
|
|
316
327
|
logger() {
|
|
317
328
|
return { before: (req) => {
|
|
318
|
-
req.event.logger = this.
|
|
319
|
-
route: this.endpoint.route,
|
|
320
|
-
host: req.event.headers?.host,
|
|
321
|
-
method: this.endpoint.method,
|
|
322
|
-
...this.getLoggerContext(req.event, req.context)
|
|
323
|
-
});
|
|
329
|
+
req.event.logger = currentRequestContext()?.logger ?? this.requestLogger(req.event, req.context);
|
|
324
330
|
} };
|
|
325
331
|
}
|
|
326
332
|
services() {
|
|
327
333
|
return { before: async (req) => {
|
|
328
|
-
|
|
329
|
-
const
|
|
330
|
-
const services = await serviceDiscovery.register(this.endpoint.services);
|
|
334
|
+
req.event.logger;
|
|
335
|
+
const services = await ServiceDiscovery.getInstance(this.envParser).register(this.endpoint.services);
|
|
331
336
|
req.event.services = services;
|
|
332
337
|
} };
|
|
333
338
|
}
|
|
@@ -338,7 +343,7 @@ var AmazonApiGatewayEndpoint = class {
|
|
|
338
343
|
const header = req.event.header;
|
|
339
344
|
const cookie = req.event.cookie;
|
|
340
345
|
const session = req.event.session;
|
|
341
|
-
|
|
346
|
+
if (!await this.endpoint.authorize({
|
|
342
347
|
header,
|
|
343
348
|
cookie,
|
|
344
349
|
services,
|
|
@@ -348,19 +353,39 @@ var AmazonApiGatewayEndpoint = class {
|
|
|
348
353
|
body: req.event.body,
|
|
349
354
|
query: req.event.query,
|
|
350
355
|
params: req.event.params
|
|
351
|
-
})
|
|
352
|
-
if (!isAuthorized) {
|
|
356
|
+
})) {
|
|
353
357
|
logger.warn("Forbidden access attempt");
|
|
354
358
|
throw new ForbiddenError("Forbidden access to the endpoint", "You do not have permission to access this resource.");
|
|
355
359
|
}
|
|
356
360
|
} };
|
|
357
361
|
}
|
|
362
|
+
/**
|
|
363
|
+
* The endpoint's `.rateLimit()`, after authorization as on every adaptor:
|
|
364
|
+
* over the limit it throws a 429, which `error()` answers with its
|
|
365
|
+
* headers; under it, the `X-RateLimit-*` headers go on the response.
|
|
366
|
+
*/
|
|
367
|
+
rateLimit() {
|
|
368
|
+
return { before: async (req) => {
|
|
369
|
+
if (!this.endpoint.rateLimit) return;
|
|
370
|
+
req.event.rateLimitHeaders = await enforceRateLimit(this.endpoint.rateLimit, {
|
|
371
|
+
header: req.event.header,
|
|
372
|
+
services: req.event.services,
|
|
373
|
+
logger: req.event.logger,
|
|
374
|
+
session: req.event.session,
|
|
375
|
+
path: this.requestPath(req.event),
|
|
376
|
+
method: this.endpoint.method
|
|
377
|
+
});
|
|
378
|
+
} };
|
|
379
|
+
}
|
|
380
|
+
/** The path the request was made to, as the limiter keys a client by. */
|
|
381
|
+
requestPath(event) {
|
|
382
|
+
return event.path ?? event.rawPath ?? this.endpoint.route;
|
|
383
|
+
}
|
|
358
384
|
database() {
|
|
359
385
|
return { before: async (req) => {
|
|
360
386
|
if (!this.endpoint.databaseService) return;
|
|
361
|
-
|
|
362
|
-
const
|
|
363
|
-
const db = await serviceDiscovery.register([this.endpoint.databaseService]).then((s) => s[this.endpoint.databaseService?.serviceName]);
|
|
387
|
+
req.event.logger;
|
|
388
|
+
const db = await ServiceDiscovery.getInstance(this.envParser).register([this.endpoint.databaseService]).then((s) => s[this.endpoint.databaseService?.serviceName]);
|
|
364
389
|
req.event.db = db;
|
|
365
390
|
} };
|
|
366
391
|
}
|
|
@@ -376,6 +401,7 @@ var AmazonApiGatewayEndpoint = class {
|
|
|
376
401
|
cookie: req.event.cookie,
|
|
377
402
|
...db !== void 0 && { db }
|
|
378
403
|
});
|
|
404
|
+
req.event.logger = currentRequestContext()?.logger ?? req.event.logger;
|
|
379
405
|
} };
|
|
380
406
|
}
|
|
381
407
|
events() {
|
|
@@ -411,9 +437,8 @@ var AmazonApiGatewayEndpoint = class {
|
|
|
411
437
|
cookie: event.cookie,
|
|
412
438
|
logger
|
|
413
439
|
}) : void 0;
|
|
414
|
-
const
|
|
415
|
-
const
|
|
416
|
-
const baseDb = sameDatabase ? auditor?.getTransaction?.() ?? rawDb : rawDb;
|
|
440
|
+
const { output, metadata } = await executeWithAuditTransaction(auditContext, async (auditor) => {
|
|
441
|
+
const baseDb = auditContext?.storage?.databaseServiceName && auditContext.storage.databaseServiceName === this.endpoint.databaseService?.serviceName ? auditor?.getTransaction?.() ?? rawDb : rawDb;
|
|
417
442
|
const executeHandler = async (db) => {
|
|
418
443
|
const responseBuilder = new ResponseBuilder();
|
|
419
444
|
const response = await this.endpoint.handler({
|
|
@@ -427,33 +452,33 @@ var AmazonApiGatewayEndpoint = class {
|
|
|
427
452
|
...input
|
|
428
453
|
}, responseBuilder);
|
|
429
454
|
let data = response;
|
|
430
|
-
let metadata
|
|
455
|
+
let metadata = responseBuilder.getMetadata();
|
|
431
456
|
if (Endpoint.hasMetadata(response)) {
|
|
432
457
|
data = response.data;
|
|
433
|
-
metadata
|
|
458
|
+
metadata = response.metadata;
|
|
434
459
|
}
|
|
435
|
-
const
|
|
460
|
+
const redirect = Endpoint.isRedirectStatus(metadata.status ?? this.endpoint.status);
|
|
436
461
|
return {
|
|
437
|
-
output:
|
|
438
|
-
metadata
|
|
439
|
-
responseBuilder
|
|
462
|
+
output: this.endpoint.outputSchema && !redirect ? await this.endpoint.parseOutput(data) : void 0,
|
|
463
|
+
metadata,
|
|
464
|
+
responseBuilder,
|
|
465
|
+
redirect
|
|
440
466
|
};
|
|
441
467
|
};
|
|
442
468
|
if (rlsActive && rlsContext && baseDb) return withRlsContext(baseDb, rlsContext, async (trx) => executeHandler(trx), { prefix: this.endpoint.rlsConfig?.prefix });
|
|
443
469
|
return executeHandler(baseDb);
|
|
444
|
-
}, async (result
|
|
445
|
-
if (!audits?.length) return;
|
|
470
|
+
}, async (result, auditor) => {
|
|
471
|
+
if (!audits?.length || result.redirect) return;
|
|
446
472
|
for (const audit of audits) {
|
|
447
|
-
if (audit.when && !audit.when(result
|
|
448
|
-
const payload = audit.payload(result
|
|
449
|
-
const entityId = audit.entityId?.(result
|
|
473
|
+
if (audit.when && !audit.when(result.output)) continue;
|
|
474
|
+
const payload = audit.payload(result.output);
|
|
475
|
+
const entityId = audit.entityId?.(result.output);
|
|
450
476
|
auditor.audit(audit.type, payload, {
|
|
451
477
|
table: audit.table,
|
|
452
478
|
entityId
|
|
453
479
|
});
|
|
454
480
|
}
|
|
455
481
|
}, { db: rawDb });
|
|
456
|
-
const { output, metadata } = result;
|
|
457
482
|
const isJsonResponse = this.endpoint.responseType === "application/json";
|
|
458
483
|
const body = output === void 0 ? void 0 : isJsonResponse ? JSON.stringify(output) : typeof output === "string" ? output : String(output);
|
|
459
484
|
event.__response = output;
|
|
@@ -462,8 +487,10 @@ var AmazonApiGatewayEndpoint = class {
|
|
|
462
487
|
body
|
|
463
488
|
};
|
|
464
489
|
const baseHeaders = isJsonResponse ? void 0 : { "content-type": this.endpoint.responseType };
|
|
465
|
-
|
|
490
|
+
const rateLimitHeaders = event.rateLimitHeaders;
|
|
491
|
+
if (baseHeaders || rateLimitHeaders || metadata.headers && Object.keys(metadata.headers).length > 0) lambdaResponse.headers = {
|
|
466
492
|
...baseHeaders ?? {},
|
|
493
|
+
...rateLimitHeaders ?? {},
|
|
467
494
|
...metadata.headers ?? {}
|
|
468
495
|
};
|
|
469
496
|
if (metadata.cookies && metadata.cookies.size > 0) {
|
|
@@ -504,24 +531,25 @@ var AmazonApiGatewayEndpoint = class {
|
|
|
504
531
|
}
|
|
505
532
|
get handler() {
|
|
506
533
|
const handler = this._handler.bind(this);
|
|
507
|
-
let chain = middy(handler).use(this.logger()).use(this.error()).use(this.services()).use(this.input()).use(this.database()).use(this.session()).use(this.authorize()).use(this.events());
|
|
534
|
+
let chain = middy(handler).use(this.logger()).use(this.error()).use(this.services()).use(this.input()).use(this.database()).use(this.session()).use(this.authorize()).use(this.rateLimit()).use(this.events());
|
|
508
535
|
const telemetryMiddleware = this.telemetry();
|
|
509
536
|
if (telemetryMiddleware) chain = chain.use(telemetryMiddleware);
|
|
510
537
|
if (this.options.telescope?.middleware) chain = chain.use(this.options.telescope.middleware);
|
|
511
538
|
const wrappedHandler = async (event, context) => {
|
|
512
539
|
const startTime = Date.now();
|
|
513
540
|
const requestId = context.awsRequestId;
|
|
514
|
-
const logger = this.
|
|
541
|
+
const logger = this.requestLogger(event, context);
|
|
542
|
+
const operation = `${this.endpoint.method} ${this.endpoint.route}`;
|
|
515
543
|
return runWithRequestContext({
|
|
516
544
|
logger,
|
|
517
545
|
requestId,
|
|
518
|
-
startTime
|
|
546
|
+
startTime,
|
|
547
|
+
operation
|
|
519
548
|
}, () => chain(event, context));
|
|
520
549
|
};
|
|
521
550
|
return wrappedHandler;
|
|
522
551
|
}
|
|
523
552
|
};
|
|
524
|
-
|
|
525
553
|
//#endregion
|
|
526
554
|
//#region src/endpoints/parseQueryParams.ts
|
|
527
555
|
/**
|
|
@@ -542,18 +570,18 @@ function parseQueryParams(queryParams) {
|
|
|
542
570
|
}
|
|
543
571
|
return qs.parse(parts.join("&"));
|
|
544
572
|
}
|
|
545
|
-
|
|
546
573
|
//#endregion
|
|
547
574
|
//#region src/endpoints/AmazonApiGatewayV1EndpointAdaptor.ts
|
|
548
575
|
var AmazonApiGatewayV1Endpoint = class extends AmazonApiGatewayEndpoint {
|
|
549
|
-
|
|
576
|
+
endpoint;
|
|
577
|
+
async getInput(e) {
|
|
550
578
|
const multiValueParams = e.multiValueQueryStringParameters || {};
|
|
551
579
|
const singleValueParams = e.queryStringParameters || {};
|
|
552
580
|
const mergedParams = {};
|
|
553
581
|
for (const [key, value] of Object.entries(singleValueParams)) if (value !== void 0) mergedParams[key] = value;
|
|
554
582
|
for (const [key, values] of Object.entries(multiValueParams)) if (values && values.length > 1) mergedParams[key] = values;
|
|
555
583
|
return {
|
|
556
|
-
body:
|
|
584
|
+
body: await this.readBody(e.body, e.isBase64Encoded, e.headers?.["Content-Type"] ?? e.headers?.["content-type"]),
|
|
557
585
|
query: parseQueryParams(mergedParams),
|
|
558
586
|
params: e.pathParameters || {}
|
|
559
587
|
};
|
|
@@ -578,17 +606,16 @@ var AmazonApiGatewayV1Endpoint = class extends AmazonApiGatewayEndpoint {
|
|
|
578
606
|
this.endpoint = endpoint;
|
|
579
607
|
}
|
|
580
608
|
};
|
|
581
|
-
|
|
582
609
|
//#endregion
|
|
583
610
|
//#region src/endpoints/AmazonApiGatewayV2EndpointAdaptor.ts
|
|
584
611
|
var AmazonApiGatewayV2Endpoint = class extends AmazonApiGatewayEndpoint {
|
|
612
|
+
endpoint;
|
|
585
613
|
getCookies(e) {
|
|
586
614
|
return createApiGatewayCookies(e.cookies, e.headers?.cookie);
|
|
587
615
|
}
|
|
588
|
-
getInput(e) {
|
|
589
|
-
const raw = AmazonApiGatewayEndpoint.decodeBody(e.body, e.isBase64Encoded, e.headers?.["content-type"]);
|
|
616
|
+
async getInput(e) {
|
|
590
617
|
return {
|
|
591
|
-
body:
|
|
618
|
+
body: await this.readBody(e.body, e.isBase64Encoded, e.headers?.["content-type"]),
|
|
592
619
|
query: qs.parse(e.rawQueryString),
|
|
593
620
|
params: e.pathParameters || {}
|
|
594
621
|
};
|
|
@@ -613,7 +640,6 @@ var AmazonApiGatewayV2Endpoint = class extends AmazonApiGatewayEndpoint {
|
|
|
613
640
|
this.endpoint = endpoint;
|
|
614
641
|
}
|
|
615
642
|
};
|
|
616
|
-
|
|
617
643
|
//#endregion
|
|
618
644
|
//#region src/queue/AWSLambdaQueueAdaptor.ts
|
|
619
645
|
/**
|
|
@@ -628,6 +654,8 @@ var AmazonApiGatewayV2Endpoint = class extends AmazonApiGatewayEndpoint {
|
|
|
628
654
|
* retries only those records.
|
|
629
655
|
*/
|
|
630
656
|
var AWSLambdaQueue = class {
|
|
657
|
+
envParser;
|
|
658
|
+
queue;
|
|
631
659
|
_services;
|
|
632
660
|
constructor(envParser, queue) {
|
|
633
661
|
this.envParser = envParser;
|
|
@@ -642,6 +670,12 @@ var AWSLambdaQueue = class {
|
|
|
642
670
|
this._services = this.queue.services.length > 0 ? await serviceDiscovery.register(this.queue.services) : {};
|
|
643
671
|
return this._services;
|
|
644
672
|
}
|
|
673
|
+
/** The queue's database, registered as functions register theirs. */
|
|
674
|
+
async getDatabase() {
|
|
675
|
+
const service = this.queue.databaseService;
|
|
676
|
+
if (!service) return void 0;
|
|
677
|
+
return (await ServiceDiscovery.getInstance(this.envParser).register([service]))[service.serviceName];
|
|
678
|
+
}
|
|
645
679
|
safeJsonParse(value) {
|
|
646
680
|
try {
|
|
647
681
|
return JSON.parse(value);
|
|
@@ -667,6 +701,7 @@ var AWSLambdaQueue = class {
|
|
|
667
701
|
req: { id: context.awsRequestId }
|
|
668
702
|
});
|
|
669
703
|
const services = await this.getServices();
|
|
704
|
+
const db = await this.getDatabase();
|
|
670
705
|
const schema = this.queue.messageSchema;
|
|
671
706
|
const batchItemFailures = [];
|
|
672
707
|
const messages = [];
|
|
@@ -684,7 +719,7 @@ var AWSLambdaQueue = class {
|
|
|
684
719
|
messages.push(validation.value);
|
|
685
720
|
} catch (error) {
|
|
686
721
|
logger.error({
|
|
687
|
-
error,
|
|
722
|
+
err: error,
|
|
688
723
|
messageId: record.messageId
|
|
689
724
|
}, "Failed to parse SQS record");
|
|
690
725
|
batchItemFailures.push({ itemIdentifier: record.messageId });
|
|
@@ -694,7 +729,8 @@ var AWSLambdaQueue = class {
|
|
|
694
729
|
await this.queue.handler({
|
|
695
730
|
messages,
|
|
696
731
|
services,
|
|
697
|
-
logger
|
|
732
|
+
logger,
|
|
733
|
+
db
|
|
698
734
|
});
|
|
699
735
|
} catch (error) {
|
|
700
736
|
logger.error(wrapError(error), "Queue handler failed; retrying batch");
|
|
@@ -704,24 +740,28 @@ var AWSLambdaQueue = class {
|
|
|
704
740
|
}
|
|
705
741
|
get handler() {
|
|
706
742
|
const handler = this._handler.bind(this);
|
|
707
|
-
return async (event, context) => {
|
|
743
|
+
return (async (event, context) => {
|
|
708
744
|
const startTime = Date.now();
|
|
709
745
|
const requestId = context.awsRequestId;
|
|
710
746
|
const logger = this.queue.logger.child({ requestId });
|
|
711
747
|
return runWithRequestContext({
|
|
712
748
|
logger,
|
|
713
749
|
requestId,
|
|
714
|
-
startTime
|
|
715
|
-
|
|
716
|
-
|
|
750
|
+
startTime,
|
|
751
|
+
operation: `queue ${this.queue.name}`
|
|
752
|
+
}, () => consumeBatchTraced({
|
|
753
|
+
system: "aws_sqs",
|
|
754
|
+
destination: this.queue.name
|
|
755
|
+
}, event.Records.map(recordCarrier), () => handler(event, context)));
|
|
756
|
+
});
|
|
717
757
|
}
|
|
718
758
|
};
|
|
719
|
-
|
|
720
759
|
//#endregion
|
|
721
760
|
//#region src/subscribers/AWSLambdaSubscriberAdaptor.ts
|
|
722
761
|
var AWSLambdaSubscriber = class {
|
|
762
|
+
envParser;
|
|
763
|
+
subscriber;
|
|
723
764
|
_logger;
|
|
724
|
-
_services;
|
|
725
765
|
constructor(envParser, subscriber) {
|
|
726
766
|
this.envParser = envParser;
|
|
727
767
|
this.subscriber = subscriber;
|
|
@@ -730,19 +770,9 @@ var AWSLambdaSubscriber = class {
|
|
|
730
770
|
get logger() {
|
|
731
771
|
return this._logger;
|
|
732
772
|
}
|
|
733
|
-
async getServices() {
|
|
734
|
-
if (this._services) return this._services;
|
|
735
|
-
const serviceDiscovery = ServiceDiscovery.getInstance(this.envParser);
|
|
736
|
-
if (this.subscriber.services.length > 0) {
|
|
737
|
-
const registered = await serviceDiscovery.register(this.subscriber.services);
|
|
738
|
-
this._services = registered;
|
|
739
|
-
} else this._services = {};
|
|
740
|
-
return this._services;
|
|
741
|
-
}
|
|
742
773
|
error() {
|
|
743
774
|
return { onError: (req) => {
|
|
744
|
-
|
|
745
|
-
logger.error(req.error || {}, "Error processing subscriber");
|
|
775
|
+
(req.event?.logger || this.subscriber.logger).error(req.error || {}, "Error processing subscriber");
|
|
746
776
|
throw wrapError(req.error);
|
|
747
777
|
} };
|
|
748
778
|
}
|
|
@@ -761,110 +791,26 @@ var AWSLambdaSubscriber = class {
|
|
|
761
791
|
}
|
|
762
792
|
services() {
|
|
763
793
|
return { before: async (req) => {
|
|
764
|
-
|
|
794
|
+
const { services, db } = await subscriberContext(this.subscriber, this.envParser);
|
|
795
|
+
req.event.services = services;
|
|
796
|
+
req.event.db = db;
|
|
765
797
|
} };
|
|
766
798
|
}
|
|
767
799
|
parseEvents() {
|
|
768
800
|
return { before: async (req) => {
|
|
769
|
-
const { logger
|
|
770
|
-
const rawEvent = e;
|
|
801
|
+
const { logger, ...rawEvent } = req.event;
|
|
771
802
|
logger.info({ rawEvent });
|
|
772
|
-
|
|
773
|
-
if ("Records" in rawEvent) {
|
|
774
|
-
if (this.isSQSEvent(rawEvent)) for (const record of rawEvent.Records) try {
|
|
775
|
-
const event = this.parseSQSRecord(record);
|
|
776
|
-
if (this.shouldIncludeEvent(event)) events.push(event);
|
|
777
|
-
} catch (error) {
|
|
778
|
-
this.logger.error({
|
|
779
|
-
error,
|
|
780
|
-
record
|
|
781
|
-
}, "Failed to parse SQS record");
|
|
782
|
-
}
|
|
783
|
-
else if (this.isSNSEvent(rawEvent)) for (const record of rawEvent.Records) try {
|
|
784
|
-
const event = this.parseSNSRecord(record);
|
|
785
|
-
if (this.shouldIncludeEvent(event)) events.push(event);
|
|
786
|
-
} catch (error) {
|
|
787
|
-
this.logger.error({
|
|
788
|
-
error,
|
|
789
|
-
record
|
|
790
|
-
}, "Failed to parse SNS record");
|
|
791
|
-
}
|
|
792
|
-
}
|
|
793
|
-
req.event.events = events;
|
|
803
|
+
req.event.events = subscribedEvents(this.subscriber, rawEvent, this.logger);
|
|
794
804
|
} };
|
|
795
805
|
}
|
|
796
|
-
isSQSEvent(event) {
|
|
797
|
-
const firstRecord = event.Records[0];
|
|
798
|
-
return "Records" in event && event.Records.length > 0 && firstRecord !== void 0 && "eventSource" in firstRecord && firstRecord.eventSource === "aws:sqs";
|
|
799
|
-
}
|
|
800
|
-
isSNSEvent(event) {
|
|
801
|
-
const firstRecord = event.Records[0];
|
|
802
|
-
return "Records" in event && event.Records.length > 0 && firstRecord !== void 0 && "EventSource" in firstRecord && firstRecord.EventSource === "aws:sns";
|
|
803
|
-
}
|
|
804
|
-
parseSNSRecord(record) {
|
|
805
|
-
const message = this.safeJsonParse(record.Sns.Message);
|
|
806
|
-
const messageType = record.Sns.MessageAttributes?.type?.Value;
|
|
807
|
-
if (message === null) return messageType ? {
|
|
808
|
-
type: messageType,
|
|
809
|
-
payload: record.Sns.Message
|
|
810
|
-
} : record.Sns.Message;
|
|
811
|
-
const resolvedType = messageType ?? message.type;
|
|
812
|
-
if (message.type) return message;
|
|
813
|
-
return resolvedType ? {
|
|
814
|
-
type: resolvedType,
|
|
815
|
-
payload: message
|
|
816
|
-
} : message;
|
|
817
|
-
}
|
|
818
|
-
parseSQSRecord(record) {
|
|
819
|
-
const body = this.safeJsonParse(record.body);
|
|
820
|
-
if (body === null) return record.body;
|
|
821
|
-
if (body.Type === "Notification" && body.Message) {
|
|
822
|
-
const snsMessage = this.safeJsonParse(body.Message);
|
|
823
|
-
const messageType = body.MessageAttributes?.type?.Value;
|
|
824
|
-
if (snsMessage === null) return messageType ? {
|
|
825
|
-
type: messageType,
|
|
826
|
-
payload: body.Message
|
|
827
|
-
} : body.Message;
|
|
828
|
-
if (snsMessage.type) return snsMessage;
|
|
829
|
-
const resolvedType = messageType ?? snsMessage.type;
|
|
830
|
-
return resolvedType ? {
|
|
831
|
-
type: resolvedType,
|
|
832
|
-
payload: snsMessage
|
|
833
|
-
} : snsMessage;
|
|
834
|
-
}
|
|
835
|
-
return body;
|
|
836
|
-
}
|
|
837
|
-
safeJsonParse(value) {
|
|
838
|
-
try {
|
|
839
|
-
return JSON.parse(value);
|
|
840
|
-
} catch {
|
|
841
|
-
return null;
|
|
842
|
-
}
|
|
843
|
-
}
|
|
844
|
-
shouldIncludeEvent(event) {
|
|
845
|
-
if (typeof event !== "object" || !event?.type) return true;
|
|
846
|
-
if (!this.subscriber.subscribedEvents) return true;
|
|
847
|
-
return this.subscriber.subscribedEvents.includes(event.type);
|
|
848
|
-
}
|
|
849
806
|
async _handler(event) {
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
services: event.services,
|
|
857
|
-
logger: event.logger
|
|
807
|
+
const { events, services, logger, db } = event;
|
|
808
|
+
return runSubscriber(this.subscriber, {
|
|
809
|
+
events,
|
|
810
|
+
services,
|
|
811
|
+
logger,
|
|
812
|
+
db
|
|
858
813
|
});
|
|
859
|
-
if (this.subscriber.outputSchema && result) {
|
|
860
|
-
const validationResult = await this.subscriber.outputSchema["~standard"].validate(result);
|
|
861
|
-
if (validationResult.issues) {
|
|
862
|
-
this.logger.error({ issues: validationResult.issues }, "Subscriber output validation failed");
|
|
863
|
-
throw new Error("Subscriber output validation failed");
|
|
864
|
-
}
|
|
865
|
-
return validationResult.value;
|
|
866
|
-
}
|
|
867
|
-
return result;
|
|
868
814
|
}
|
|
869
815
|
get handler() {
|
|
870
816
|
const handler = this._handler.bind(this);
|
|
@@ -873,16 +819,22 @@ var AWSLambdaSubscriber = class {
|
|
|
873
819
|
const startTime = Date.now();
|
|
874
820
|
const requestId = context.awsRequestId;
|
|
875
821
|
const logger = this.subscriber.logger.child({ requestId });
|
|
822
|
+
const operation = `subscriber ${this.subscriber.topicName ?? context.functionName}`;
|
|
823
|
+
const records = event?.Records ?? [];
|
|
876
824
|
return runWithRequestContext({
|
|
877
825
|
logger,
|
|
878
826
|
requestId,
|
|
879
|
-
startTime
|
|
880
|
-
|
|
827
|
+
startTime,
|
|
828
|
+
operation
|
|
829
|
+
}, () => consumeBatchTraced({
|
|
830
|
+
system: records[0]?.Sns ? "aws_sns" : "aws_sqs",
|
|
831
|
+
destination: this.subscriber.topicName ?? context.functionName
|
|
832
|
+
}, records.map(recordCarrier), () => chain(event, context)));
|
|
881
833
|
};
|
|
882
834
|
return wrappedHandler;
|
|
883
835
|
}
|
|
884
836
|
};
|
|
885
|
-
|
|
886
837
|
//#endregion
|
|
887
838
|
export { AWSLambdaFunction, AWSLambdaQueue, AWSLambdaSubscriber, AWSScheduledFunction, AmazonApiGatewayV1Endpoint, AmazonApiGatewayV2Endpoint };
|
|
839
|
+
|
|
888
840
|
//# sourceMappingURL=aws.mjs.map
|