@geekmidas/constructs 10.0.0-alpha.12 → 10.0.0-alpha.120
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-B7AXn0xH.d.mts +230 -0
- package/dist/Construct-B7AXn0xH.d.mts.map +1 -0
- package/dist/Construct-CFW0zjdD.d.cts +230 -0
- package/dist/Construct-CFW0zjdD.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/{Cron-DmQ8vQ4b.d.cts → Cron-bdGRSROY.d.cts} +15 -9
- package/dist/Cron-bdGRSROY.d.cts.map +1 -0
- package/dist/{Cron-dh4rUgib.d.mts → Cron-i4Uetezh.d.mts} +15 -9
- package/dist/Cron-i4Uetezh.d.mts.map +1 -0
- package/dist/CronBuilder-9H4BnD6W.d.mts +47 -0
- package/dist/CronBuilder-9H4BnD6W.d.mts.map +1 -0
- package/dist/{CronBuilder-Da0C0edR.cjs → CronBuilder-BXTG10u5.cjs} +47 -31
- package/dist/CronBuilder-BXTG10u5.cjs.map +1 -0
- package/dist/CronBuilder-B_24LZpn.d.cts +47 -0
- package/dist/CronBuilder-B_24LZpn.d.cts.map +1 -0
- package/dist/{CronBuilder-CYKT5RiO.mjs → CronBuilder-D3sF9tS_.mjs} +37 -21
- package/dist/CronBuilder-D3sF9tS_.mjs.map +1 -0
- package/dist/{Endpoint-BjWKinFA.d.mts → Endpoint-CeFkSwh5.d.mts} +129 -99
- package/dist/Endpoint-CeFkSwh5.d.mts.map +1 -0
- package/dist/{Endpoint-dav89W6-.d.cts → Endpoint-DgrpG15P.d.cts} +127 -97
- package/dist/Endpoint-DgrpG15P.d.cts.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/{EndpointFactory-CdWB7wPw.cjs → EndpointFactory-CSrAyazj.cjs} +361 -112
- package/dist/EndpointFactory-CSrAyazj.cjs.map +1 -0
- package/dist/{index-lAO9egTb.d.mts → EndpointFactory-Cc863XJS.d.cts} +190 -136
- package/dist/EndpointFactory-Cc863XJS.d.cts.map +1 -0
- package/dist/{index-Bd5FqCoe.d.cts → EndpointFactory-Dbw9ugkX.d.mts} +189 -135
- package/dist/EndpointFactory-Dbw9ugkX.d.mts.map +1 -0
- package/dist/{EndpointFactory-CjV8F_lJ.mjs → EndpointFactory-c2ZugGig.mjs} +283 -76
- package/dist/EndpointFactory-c2ZugGig.mjs.map +1 -0
- package/dist/Function-B0uZhZnU.d.cts +76 -0
- package/dist/Function-B0uZhZnU.d.cts.map +1 -0
- package/dist/Function-B_9R7Zy1.d.mts +76 -0
- package/dist/Function-B_9R7Zy1.d.mts.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-D7ZuwBhy.d.cts → Queue-B-dDXyjF.d.mts} +48 -48
- package/dist/Queue-B-dDXyjF.d.mts.map +1 -0
- package/dist/Queue-BhuofM3k.cjs +109 -0
- package/dist/Queue-BhuofM3k.cjs.map +1 -0
- package/dist/{Queue-gVGfi2Yk.d.mts → Queue-JbIjVtTf.d.cts} +49 -49
- package/dist/Queue-JbIjVtTf.d.cts.map +1 -0
- package/dist/Queue-cmhqEBOB.mjs +104 -0
- package/dist/Queue-cmhqEBOB.mjs.map +1 -0
- package/dist/QueueBuilder-48W-q8In.d.mts +75 -0
- package/dist/QueueBuilder-48W-q8In.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-MfpkJ3R9.d.cts +75 -0
- package/dist/QueueBuilder-MfpkJ3R9.d.cts.map +1 -0
- package/dist/{Subscriber-2mEi0ImH.d.cts → Subscriber-CEt7kHkc.d.cts} +29 -20
- package/dist/Subscriber-CEt7kHkc.d.cts.map +1 -0
- package/dist/{Subscriber-xTJ9ayPN.d.mts → Subscriber-dsxc5LKa.d.mts} +29 -20
- package/dist/Subscriber-dsxc5LKa.d.mts.map +1 -0
- package/dist/SubscriberBuilder-BRa_nrmH.d.cts +67 -0
- package/dist/SubscriberBuilder-BRa_nrmH.d.cts.map +1 -0
- package/dist/SubscriberBuilder-D9bkrYzH.d.mts +67 -0
- package/dist/SubscriberBuilder-D9bkrYzH.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/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/cipher-DSDxPRIp.d.cts +106 -0
- package/dist/cipher-DSDxPRIp.d.cts.map +1 -0
- package/dist/cipher-DSDxPRIp.d.mts +106 -0
- package/dist/cipher-DSDxPRIp.d.mts.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/kms.cjs +95 -0
- package/dist/encryption/kms.cjs.map +1 -0
- package/dist/encryption/kms.d.cts +7 -0
- package/dist/encryption/kms.d.cts.map +1 -0
- package/dist/encryption/kms.d.mts +7 -0
- package/dist/encryption/kms.d.mts.map +1 -0
- package/dist/encryption/kms.mjs +93 -0
- package/dist/encryption/kms.mjs.map +1 -0
- package/dist/encryption.cjs +116 -0
- package/dist/encryption.cjs.map +1 -0
- package/dist/encryption.d.cts +37 -0
- package/dist/encryption.d.cts.map +1 -0
- package/dist/encryption.d.mts +37 -0
- package/dist/encryption.d.mts.map +1 -0
- package/dist/encryption.mjs +101 -0
- package/dist/encryption.mjs.map +1 -0
- package/dist/endpoints/index.cjs +27 -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/expire-C586zznE.d.cts +38 -0
- package/dist/expire-C586zznE.d.cts.map +1 -0
- package/dist/expire-C586zznE.d.mts +38 -0
- package/dist/expire-C586zznE.d.mts.map +1 -0
- package/dist/expire-CieftS01.cjs +67 -0
- package/dist/expire-CieftS01.cjs.map +1 -0
- package/dist/expire-CpzUAfr9.mjs +50 -0
- package/dist/expire-CpzUAfr9.mjs.map +1 -0
- 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-B7rvi4Qp.d.cts +201 -0
- package/dist/fake-B7rvi4Qp.d.cts.map +1 -0
- package/dist/fake-JXbkdao8.d.mts +201 -0
- package/dist/fake-JXbkdao8.d.mts.map +1 -0
- package/dist/file-server.cjs +66 -11
- package/dist/file-server.cjs.map +1 -1
- package/dist/file-server.d.cts +25 -10
- package/dist/file-server.d.cts.map +1 -1
- package/dist/file-server.d.mts +25 -10
- package/dist/file-server.d.mts.map +1 -1
- package/dist/file-server.mjs +58 -4
- 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-Cd2w-DRL.d.cts +115 -0
- package/dist/index-Cd2w-DRL.d.cts.map +1 -0
- package/dist/index-DdRjYhiJ.d.cts +119 -0
- package/dist/index-DdRjYhiJ.d.cts.map +1 -0
- package/dist/index-DdRjYhiJ.d.mts +119 -0
- package/dist/index-DdRjYhiJ.d.mts.map +1 -0
- package/dist/index-aBIcAiH5.d.mts +115 -0
- package/dist/index-aBIcAiH5.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/kysely-BHYV-WC-.d.cts +216 -0
- package/dist/kysely-BHYV-WC-.d.cts.map +1 -0
- package/dist/kysely-CAW3QSqp.d.mts +216 -0
- package/dist/kysely-CAW3QSqp.d.mts.map +1 -0
- package/dist/kysely-Cs4uPO8k.mjs +371 -0
- package/dist/kysely-Cs4uPO8k.mjs.map +1 -0
- package/dist/kysely-CukArHJ0.cjs +384 -0
- package/dist/kysely-CukArHJ0.cjs.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 +26 -11
- package/dist/object-storage.cjs.map +1 -1
- package/dist/object-storage.d.cts +12 -7
- package/dist/object-storage.d.cts.map +1 -1
- package/dist/object-storage.d.mts +12 -7
- package/dist/object-storage.d.mts.map +1 -1
- package/dist/object-storage.mjs +18 -5
- 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 -45
- package/dist/worker.d.mts.map +1 -1
- package/dist/worker.mjs +54 -29
- package/dist/worker.mjs.map +1 -1
- package/package.json +115 -41
- 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
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { idsOf, serviceOf, servicesOf } from "./construct-interface
|
|
3
|
-
import {
|
|
4
|
-
import { cloneWith } from "./clone-
|
|
5
|
-
import { Endpoint } from "./Endpoint-
|
|
1
|
+
import { o as __toESM } from "./Construct-CKUA-CTA.mjs";
|
|
2
|
+
import { idsOf, isConsumable, serviceOf, servicesOf } from "./construct-interface.mjs";
|
|
3
|
+
import { o as require_lodash_uniqby, r as BaseFunctionBuilder } from "./functions-CTI-hDem.mjs";
|
|
4
|
+
import { t as cloneWith } from "./clone-EKNovYHu.mjs";
|
|
5
|
+
import { t as Endpoint } from "./Endpoint-gPXhHKhJ.mjs";
|
|
6
6
|
import { DEFAULT_LOGGER } from "@geekmidas/logger/console";
|
|
7
|
-
|
|
7
|
+
import { HttpError } from "@geekmidas/errors";
|
|
8
8
|
//#region src/endpoints/Authorizer.ts
|
|
9
9
|
/**
|
|
10
10
|
* Built-in security schemes available by default.
|
|
@@ -67,27 +67,186 @@ function isBuiltInSecurityScheme(name) {
|
|
|
67
67
|
function getSecurityScheme(name, customSchemes) {
|
|
68
68
|
if (customSchemes && name in customSchemes) return customSchemes[name];
|
|
69
69
|
if (isBuiltInSecurityScheme(name)) return BUILT_IN_SECURITY_SCHEMES[name];
|
|
70
|
-
return void 0;
|
|
71
70
|
}
|
|
72
|
-
|
|
73
71
|
//#endregion
|
|
74
72
|
//#region src/endpoints/rls.ts
|
|
73
|
+
var import_lodash_uniqby = /* @__PURE__ */ __toESM(require_lodash_uniqby(), 1);
|
|
75
74
|
/**
|
|
76
75
|
* Symbol used to bypass RLS for an endpoint.
|
|
77
76
|
*/
|
|
78
77
|
const RLS_BYPASS = Symbol.for("geekmidas.rls.bypass");
|
|
79
|
-
|
|
78
|
+
//#endregion
|
|
79
|
+
//#region src/endpoints/upload.ts
|
|
80
|
+
/**
|
|
81
|
+
* Direct uploads: an endpoint that hands the browser a signed form, so the
|
|
82
|
+
* file goes straight to the bucket and never through the server.
|
|
83
|
+
*
|
|
84
|
+
* The endpoint decides *where* — the key, from the session and the body — and
|
|
85
|
+
* the form's policy decides *what*: the storage itself refuses a file larger
|
|
86
|
+
* than `maxSize`, or of a type `accept` does not allow. Nothing the client
|
|
87
|
+
* sends after this request is trusted to the server that issued it. That the
|
|
88
|
+
* upload finished arrives as the bucket's `object.created` event.
|
|
89
|
+
*/
|
|
90
|
+
/** The longest a signature may be valid for: S3's limit, seven days. */
|
|
91
|
+
const MAX_EXPIRES_IN = 604800;
|
|
92
|
+
/** A media type, or a whole top-level type: `image/png`, `image/*`. */
|
|
93
|
+
const MEDIA_TYPE = /^[a-z0-9][a-z0-9!#$&^_.+-]*\/(\*|[a-z0-9][a-z0-9!#$&^_.+-]*)$/i;
|
|
94
|
+
/** An upload's `maxSize` that is not a positive whole number of bytes. */
|
|
95
|
+
var UploadMaxSizeInvalid = class extends Error {
|
|
96
|
+
maxSize;
|
|
97
|
+
constructor(maxSize) {
|
|
98
|
+
super(`An upload's maxSize is ${maxSize}, and it has to be a positive whole number of bytes — 5 * 1024 * 1024 for 5 MiB.`);
|
|
99
|
+
this.maxSize = maxSize;
|
|
100
|
+
this.name = "UploadMaxSizeInvalid";
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
/** An upload's `expiresIn` outside what a signature can be valid for. */
|
|
104
|
+
var UploadExpiryInvalid = class extends Error {
|
|
105
|
+
expiresIn;
|
|
106
|
+
constructor(expiresIn) {
|
|
107
|
+
super(`An upload's expiresIn is ${expiresIn}, and it has to be a whole number of seconds from 1 to ${MAX_EXPIRES_IN} (seven days, the longest S3 signs for). The default, 300, is usually right.`);
|
|
108
|
+
this.expiresIn = expiresIn;
|
|
109
|
+
this.name = "UploadExpiryInvalid";
|
|
110
|
+
}
|
|
111
|
+
};
|
|
112
|
+
/** An entry in `accept` that is not a media type. */
|
|
113
|
+
var UploadAcceptInvalid = class extends Error {
|
|
114
|
+
entry;
|
|
115
|
+
constructor(entry) {
|
|
116
|
+
super(`'${entry}' in an upload's accept is not a media type. Name one ('image/png') or a whole type ('image/*').`);
|
|
117
|
+
this.entry = entry;
|
|
118
|
+
this.name = "UploadAcceptInvalid";
|
|
119
|
+
}
|
|
120
|
+
};
|
|
121
|
+
/** Several accepted types, and nothing saying which one an upload is. */
|
|
122
|
+
var UploadContentTypeUnresolved = class extends Error {
|
|
123
|
+
accept;
|
|
124
|
+
constructor(accept) {
|
|
125
|
+
super(`An upload accepts ${accept.join(", ")}, and a signed form can fix only one type. Add contentType: ({ body }) => body.contentType, with the body naming which of them this file is.`);
|
|
126
|
+
this.accept = accept;
|
|
127
|
+
this.name = "UploadContentTypeUnresolved";
|
|
128
|
+
}
|
|
129
|
+
};
|
|
130
|
+
/** A request for an upload of a type the endpoint does not accept. */
|
|
131
|
+
var UploadContentTypeRefused = class extends HttpError {
|
|
132
|
+
contentType;
|
|
133
|
+
accept;
|
|
134
|
+
constructor(contentType, accept) {
|
|
135
|
+
super(415, `'${contentType}' is not accepted here. Upload one of: ${accept.join(", ")}.`, { details: {
|
|
136
|
+
contentType,
|
|
137
|
+
accept
|
|
138
|
+
} });
|
|
139
|
+
this.contentType = contentType;
|
|
140
|
+
this.accept = accept;
|
|
141
|
+
this.name = "UploadContentTypeRefused";
|
|
142
|
+
}
|
|
143
|
+
};
|
|
144
|
+
/**
|
|
145
|
+
* Check an upload's options when the endpoint is built, so a mistake fails at
|
|
146
|
+
* startup rather than on the first request.
|
|
147
|
+
*/
|
|
148
|
+
function checkUploadOptions(options) {
|
|
149
|
+
if (!Number.isInteger(options.maxSize) || options.maxSize <= 0) throw new UploadMaxSizeInvalid(options.maxSize);
|
|
150
|
+
const { expiresIn } = options;
|
|
151
|
+
if (expiresIn !== void 0 && (!Number.isInteger(expiresIn) || expiresIn < 1 || expiresIn > MAX_EXPIRES_IN)) throw new UploadExpiryInvalid(expiresIn);
|
|
152
|
+
for (const entry of options.accept ?? []) if (!MEDIA_TYPE.test(entry)) throw new UploadAcceptInvalid(entry);
|
|
153
|
+
if ((options.accept?.length ?? 0) > 1 && !options.contentType) throw new UploadContentTypeUnresolved(options.accept);
|
|
154
|
+
}
|
|
155
|
+
/** Whether `type` is one `accept` allows — exactly, or under a `type/*`. */
|
|
156
|
+
function accepts(accept, type) {
|
|
157
|
+
const wanted = type.toLowerCase();
|
|
158
|
+
return accept.some((entry) => {
|
|
159
|
+
const allowed = entry.toLowerCase();
|
|
160
|
+
return allowed.endsWith("/*") ? wanted.startsWith(allowed.slice(0, -1)) : allowed === wanted;
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* The signed form for one request: the key and type resolved from the
|
|
165
|
+
* handler's context, and the policy the storage enforces.
|
|
166
|
+
*
|
|
167
|
+
* @throws {UploadContentTypeRefused} when the resolved type is not accepted
|
|
168
|
+
*/
|
|
169
|
+
async function issueUpload(storage, ctx, options) {
|
|
170
|
+
const key = await options.key(ctx);
|
|
171
|
+
const accept = options.accept ?? [];
|
|
172
|
+
const resolved = options.contentType ? await options.contentType(ctx) : void 0;
|
|
173
|
+
let contentType;
|
|
174
|
+
if (resolved !== void 0) {
|
|
175
|
+
if (accept.length > 0 && !accepts(accept, resolved)) throw new UploadContentTypeRefused(resolved, accept);
|
|
176
|
+
contentType = resolved;
|
|
177
|
+
} else if (accept.length === 1) {
|
|
178
|
+
const only = accept[0];
|
|
179
|
+
contentType = only.endsWith("/*") ? { startsWith: only.slice(0, -1) } : only;
|
|
180
|
+
}
|
|
181
|
+
return storage.getUploadPost({
|
|
182
|
+
key,
|
|
183
|
+
maxSize: options.maxSize,
|
|
184
|
+
...contentType ? { contentType } : {},
|
|
185
|
+
...options.expiresIn !== void 0 ? { expiresIn: options.expiresIn } : {}
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
/** The JSON Schema of an {@link UploadPost}, for the endpoint's OpenAPI. */
|
|
189
|
+
const UPLOAD_POST_JSON_SCHEMA = {
|
|
190
|
+
type: "object",
|
|
191
|
+
properties: {
|
|
192
|
+
url: {
|
|
193
|
+
type: "string",
|
|
194
|
+
format: "uri"
|
|
195
|
+
},
|
|
196
|
+
fields: {
|
|
197
|
+
type: "object",
|
|
198
|
+
additionalProperties: { type: "string" }
|
|
199
|
+
},
|
|
200
|
+
key: { type: "string" },
|
|
201
|
+
expiresAt: {
|
|
202
|
+
type: "string",
|
|
203
|
+
format: "date-time"
|
|
204
|
+
}
|
|
205
|
+
},
|
|
206
|
+
required: [
|
|
207
|
+
"url",
|
|
208
|
+
"fields",
|
|
209
|
+
"key",
|
|
210
|
+
"expiresAt"
|
|
211
|
+
],
|
|
212
|
+
additionalProperties: false
|
|
213
|
+
};
|
|
214
|
+
/** Whether `value` is an {@link UploadPost}. */
|
|
215
|
+
function isUploadPost(value) {
|
|
216
|
+
if (!value || typeof value !== "object") return false;
|
|
217
|
+
const { url, fields, key, expiresAt } = value;
|
|
218
|
+
return typeof url === "string" && typeof key === "string" && typeof expiresAt === "string" && !!fields && typeof fields === "object" && Object.values(fields).every((field) => typeof field === "string");
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* An upload endpoint's output, when it declares none of its own: the signed
|
|
222
|
+
* form, as the handler is given it.
|
|
223
|
+
*
|
|
224
|
+
* Written by hand rather than with a schema library, so the endpoint runtime
|
|
225
|
+
* imports none — the Standard Schema and Standard JSON Schema interfaces are
|
|
226
|
+
* the whole of what validation and OpenAPI need.
|
|
227
|
+
*/
|
|
228
|
+
const UPLOAD_POST_SCHEMA = { "~standard": {
|
|
229
|
+
version: 1,
|
|
230
|
+
vendor: "geekmidas",
|
|
231
|
+
validate: (value) => isUploadPost(value) ? { value } : { issues: [{ message: "Expected an upload form" }] },
|
|
232
|
+
jsonSchema: {
|
|
233
|
+
input: () => structuredClone(UPLOAD_POST_JSON_SCHEMA),
|
|
234
|
+
output: () => structuredClone(UPLOAD_POST_JSON_SCHEMA)
|
|
235
|
+
}
|
|
236
|
+
} };
|
|
80
237
|
//#endregion
|
|
81
238
|
//#region src/endpoints/EndpointBuilder.ts
|
|
82
|
-
var import_lodash$1 = __toESM(require_lodash(), 1);
|
|
83
239
|
var EndpointBuilder = class extends BaseFunctionBuilder {
|
|
240
|
+
route;
|
|
241
|
+
method;
|
|
84
242
|
schemas = {};
|
|
85
243
|
_description;
|
|
86
244
|
_status;
|
|
87
245
|
_tags;
|
|
88
246
|
_memorySize;
|
|
89
247
|
_responseType = "application/json";
|
|
90
|
-
|
|
248
|
+
/** Set by a factory's `.session()`; absent, the endpoint reads none. */
|
|
249
|
+
_getSession;
|
|
91
250
|
_authorize = () => true;
|
|
92
251
|
_rateLimit;
|
|
93
252
|
_availableAuthorizers = [];
|
|
@@ -104,14 +263,12 @@ var EndpointBuilder = class extends BaseFunctionBuilder {
|
|
|
104
263
|
_customSecuritySchemes = {};
|
|
105
264
|
_rlsConfig;
|
|
106
265
|
_rlsBypass;
|
|
266
|
+
_telemetry;
|
|
107
267
|
constructor(route, method) {
|
|
108
|
-
super(
|
|
268
|
+
super("dev.geekmidas.function.endpoint");
|
|
109
269
|
this.route = route;
|
|
110
270
|
this.method = method;
|
|
111
271
|
}
|
|
112
|
-
_setPublisher(publisher) {
|
|
113
|
-
this._publisher = publisher;
|
|
114
|
-
}
|
|
115
272
|
_setAuditorStorage(storage) {
|
|
116
273
|
this._auditorStorage = storage;
|
|
117
274
|
}
|
|
@@ -121,11 +278,31 @@ var EndpointBuilder = class extends BaseFunctionBuilder {
|
|
|
121
278
|
description(description) {
|
|
122
279
|
return cloneWith(this, { _description: description });
|
|
123
280
|
}
|
|
281
|
+
/**
|
|
282
|
+
* The status a successful request is answered with — a 2xx, or a 3xx for
|
|
283
|
+
* an endpoint that always redirects (with a `Location` header). One that
|
|
284
|
+
* sometimes redirects returns `response.redirect(url)` instead.
|
|
285
|
+
*/
|
|
124
286
|
status(status) {
|
|
125
287
|
return cloneWith(this, { _status: status });
|
|
126
288
|
}
|
|
127
|
-
|
|
128
|
-
|
|
289
|
+
/**
|
|
290
|
+
* Publish `event` to `topic` once the handler has succeeded — repeatable,
|
|
291
|
+
* one call per event, to as many topics as the endpoint names. The topic
|
|
292
|
+
* becomes a dependency as with `.dependsOn([topic])`, so `services.<topic>`
|
|
293
|
+
* is there for events the handler decides on itself.
|
|
294
|
+
*
|
|
295
|
+
* @example
|
|
296
|
+
* ```ts
|
|
297
|
+
* router.post('/users')
|
|
298
|
+
* .event(users, {
|
|
299
|
+
* type: 'user.created',
|
|
300
|
+
* payload: (user) => ({ userId: user.id, email: user.email }),
|
|
301
|
+
* })
|
|
302
|
+
* ```
|
|
303
|
+
*/
|
|
304
|
+
event(topic, event) {
|
|
305
|
+
return this.withEvent(topic, event);
|
|
129
306
|
}
|
|
130
307
|
tags(tags) {
|
|
131
308
|
return cloneWith(this, { _tags: tags });
|
|
@@ -134,6 +311,19 @@ var EndpointBuilder = class extends BaseFunctionBuilder {
|
|
|
134
311
|
return cloneWith(this, { _memorySize: memorySize });
|
|
135
312
|
}
|
|
136
313
|
/**
|
|
314
|
+
* This route's telemetry, beside what its surface's `Telemetry` says for
|
|
315
|
+
* every route: `{ ignore: true }` records no span for it — a health check,
|
|
316
|
+
* a probe — and `attributes` are set on its request span.
|
|
317
|
+
*
|
|
318
|
+
* @example
|
|
319
|
+
* ```ts
|
|
320
|
+
* router.get('/health').telemetry({ ignore: true }).handle(() => 'ok');
|
|
321
|
+
* ```
|
|
322
|
+
*/
|
|
323
|
+
telemetry(options) {
|
|
324
|
+
return cloneWith(this, { _telemetry: { ...options } });
|
|
325
|
+
}
|
|
326
|
+
/**
|
|
137
327
|
* Set the response content type for this endpoint.
|
|
138
328
|
*
|
|
139
329
|
* Defaults to `'application/json'`. When set to any other value
|
|
@@ -154,9 +344,6 @@ var EndpointBuilder = class extends BaseFunctionBuilder {
|
|
|
154
344
|
responseType(type) {
|
|
155
345
|
return cloneWith(this, { _responseType: type });
|
|
156
346
|
}
|
|
157
|
-
publisher(publisher) {
|
|
158
|
-
return cloneWith(this, { _publisher: publisher });
|
|
159
|
-
}
|
|
160
347
|
body(schema) {
|
|
161
348
|
this.schemas.body = schema;
|
|
162
349
|
return this;
|
|
@@ -180,8 +367,7 @@ var EndpointBuilder = class extends BaseFunctionBuilder {
|
|
|
180
367
|
}
|
|
181
368
|
authorizer(name) {
|
|
182
369
|
if (name === "none") return cloneWith(this, { _authorizerName: void 0 });
|
|
183
|
-
|
|
184
|
-
if (!authorizerExists && this._availableAuthorizers.length > 0) {
|
|
370
|
+
if (!this._availableAuthorizers.some((a) => a.name === name) && this._availableAuthorizers.length > 0) {
|
|
185
371
|
const available = this._availableAuthorizers.map((a) => a.name).join(", ");
|
|
186
372
|
throw new Error(`Authorizer "${name}" not found in available authorizers: ${available}`);
|
|
187
373
|
}
|
|
@@ -201,12 +387,52 @@ var EndpointBuilder = class extends BaseFunctionBuilder {
|
|
|
201
387
|
dependsOn(constructs) {
|
|
202
388
|
const services = servicesOf(constructs);
|
|
203
389
|
return cloneWith(this, {
|
|
204
|
-
_services: (0,
|
|
390
|
+
_services: (0, import_lodash_uniqby.default)([...this._services, ...services], (service) => service.serviceName),
|
|
205
391
|
_constructs: idsOf(constructs, this._constructs)
|
|
206
392
|
});
|
|
207
393
|
}
|
|
394
|
+
/**
|
|
395
|
+
* Hand the browser a signed form that uploads one file straight to
|
|
396
|
+
* `bucket` — the file never passes through this server.
|
|
397
|
+
*
|
|
398
|
+
* The endpoint decides where (`key`, from what the handler is given) and
|
|
399
|
+
* the form's policy decides what: the storage refuses a file over
|
|
400
|
+
* `maxSize`, or of a type `accept` does not allow. The handler receives
|
|
401
|
+
* the form as `upload`, and returns it unless it has more to say — it is
|
|
402
|
+
* the endpoint's output when no `.output()` came first. The bucket
|
|
403
|
+
* becomes a dependency, as with `.dependsOn([bucket])`.
|
|
404
|
+
*
|
|
405
|
+
* The last step before `.handle()`: the key is resolved from the body,
|
|
406
|
+
* params and session, so they are declared first.
|
|
407
|
+
*
|
|
408
|
+
* @example
|
|
409
|
+
* ```ts
|
|
410
|
+
* router
|
|
411
|
+
* .post('/me/avatar')
|
|
412
|
+
* .upload(uploads, {
|
|
413
|
+
* key: ({ session }) => `avatars/${session.userId}.png`,
|
|
414
|
+
* maxSize: 5 * 1024 * 1024,
|
|
415
|
+
* accept: ['image/png'],
|
|
416
|
+
* })
|
|
417
|
+
* .handle(async ({ upload }) => upload);
|
|
418
|
+
* ```
|
|
419
|
+
*/
|
|
420
|
+
upload(bucket, options) {
|
|
421
|
+
checkUploadOptions(options);
|
|
422
|
+
const [service] = servicesOf([bucket]);
|
|
423
|
+
const next = Object.create(UploadEndpointBuilder.prototype);
|
|
424
|
+
return Object.assign(next, this, {
|
|
425
|
+
_services: (0, import_lodash_uniqby.default)([...this._services, service], (s) => s.serviceName),
|
|
426
|
+
_constructs: idsOf([bucket], this._constructs),
|
|
427
|
+
outputSchema: this.outputSchema ?? UPLOAD_POST_SCHEMA,
|
|
428
|
+
_upload: {
|
|
429
|
+
serviceName: service.serviceName,
|
|
430
|
+
options
|
|
431
|
+
}
|
|
432
|
+
});
|
|
433
|
+
}
|
|
208
434
|
services(services) {
|
|
209
|
-
return cloneWith(this, { _services: (0,
|
|
435
|
+
return cloneWith(this, { _services: (0, import_lodash_uniqby.default)([...this._services, ...services], (s) => s.serviceName) });
|
|
210
436
|
}
|
|
211
437
|
logger(logger) {
|
|
212
438
|
return cloneWith(this, { _logger: logger });
|
|
@@ -349,7 +575,6 @@ var EndpointBuilder = class extends BaseFunctionBuilder {
|
|
|
349
575
|
status: this._status,
|
|
350
576
|
getSession: this._getSession,
|
|
351
577
|
rateLimit: this._rateLimit,
|
|
352
|
-
publisherService: this._publisher,
|
|
353
578
|
events: this._events,
|
|
354
579
|
authorizer,
|
|
355
580
|
surface: this._surface,
|
|
@@ -359,16 +584,36 @@ var EndpointBuilder = class extends BaseFunctionBuilder {
|
|
|
359
584
|
databaseService: this._databaseService,
|
|
360
585
|
rlsConfig: this._rlsConfig,
|
|
361
586
|
rlsBypass: this._rlsBypass,
|
|
362
|
-
responseType: this._responseType
|
|
587
|
+
responseType: this._responseType,
|
|
588
|
+
...this._telemetry ? { telemetry: this._telemetry } : {}
|
|
363
589
|
});
|
|
364
590
|
endpoint.owner = this._surface?.id;
|
|
365
591
|
return endpoint;
|
|
366
592
|
}
|
|
367
593
|
};
|
|
368
|
-
|
|
594
|
+
/**
|
|
595
|
+
* What `.upload(bucket, …)` returns: the same builder, whose handler is also
|
|
596
|
+
* given the signed form.
|
|
597
|
+
*/
|
|
598
|
+
var UploadEndpointBuilder = class extends EndpointBuilder {
|
|
599
|
+
/** The bucket's service, and what an upload to it allows. */
|
|
600
|
+
_upload;
|
|
601
|
+
handle(fn) {
|
|
602
|
+
const { serviceName, options } = this._upload;
|
|
603
|
+
const handler = (async (ctx, response) => {
|
|
604
|
+
const storage = ctx.services[serviceName];
|
|
605
|
+
const upload = await issueUpload(storage, ctx, options);
|
|
606
|
+
Object.defineProperty(ctx, "upload", {
|
|
607
|
+
value: upload,
|
|
608
|
+
enumerable: true
|
|
609
|
+
});
|
|
610
|
+
return fn(ctx, response);
|
|
611
|
+
});
|
|
612
|
+
return super.handle(handler);
|
|
613
|
+
}
|
|
614
|
+
};
|
|
369
615
|
//#endregion
|
|
370
616
|
//#region src/endpoints/EndpointFactory.ts
|
|
371
|
-
var import_lodash = __toESM(require_lodash(), 1);
|
|
372
617
|
var EndpointFactory = class EndpointFactory {
|
|
373
618
|
defaultServices = [];
|
|
374
619
|
/**
|
|
@@ -384,7 +629,6 @@ var EndpointFactory = class EndpointFactory {
|
|
|
384
629
|
defaultConstructs = [];
|
|
385
630
|
basePath = "";
|
|
386
631
|
defaultAuthorizeFn;
|
|
387
|
-
defaultEventPublisher;
|
|
388
632
|
defaultSessionExtractor;
|
|
389
633
|
defaultLogger;
|
|
390
634
|
/**
|
|
@@ -402,14 +646,13 @@ var EndpointFactory = class EndpointFactory {
|
|
|
402
646
|
defaultActorExtractor;
|
|
403
647
|
customSecuritySchemes;
|
|
404
648
|
defaultRlsConfig;
|
|
405
|
-
constructor({ basePath, defaultAuthorizeFn, defaultLogger = DEFAULT_LOGGER, defaultSessionExtractor, defaultServices = [], defaultConstructs = [],
|
|
649
|
+
constructor({ basePath, defaultAuthorizeFn, defaultLogger = DEFAULT_LOGGER, defaultSessionExtractor, defaultServices = [], defaultConstructs = [], availableAuthorizers = [], defaultAuthorizerName, defaultAuditorStorage, defaultDatabaseService, defaultActorExtractor, customSecuritySchemes = {}, defaultRlsConfig, surface }) {
|
|
406
650
|
this.defaultConstructs = [...new Set(defaultConstructs)];
|
|
407
|
-
this.defaultServices = (0,
|
|
651
|
+
this.defaultServices = (0, import_lodash_uniqby.default)(defaultServices, (s) => s.serviceName);
|
|
408
652
|
this.basePath = basePath || "";
|
|
409
653
|
this.defaultAuthorizeFn = defaultAuthorizeFn;
|
|
410
654
|
this.defaultLogger = defaultLogger;
|
|
411
655
|
this.defaultSessionExtractor = defaultSessionExtractor;
|
|
412
|
-
this.defaultEventPublisher = defaultEventPublisher;
|
|
413
656
|
this.availableAuthorizers = availableAuthorizers;
|
|
414
657
|
this.defaultAuthorizerName = defaultAuthorizerName;
|
|
415
658
|
this.defaultAuditorStorage = defaultAuditorStorage;
|
|
@@ -423,9 +666,7 @@ var EndpointFactory = class EndpointFactory {
|
|
|
423
666
|
if (!basePath && !path) return "/";
|
|
424
667
|
if (!basePath) return path.startsWith("/") ? path : `/${path}`;
|
|
425
668
|
if (!path) return basePath.startsWith("/") ? basePath : `/${basePath}`;
|
|
426
|
-
|
|
427
|
-
const segment = path.startsWith("/") ? path : `/${path}`;
|
|
428
|
-
let result = base + segment;
|
|
669
|
+
let result = (basePath.endsWith("/") ? basePath.slice(0, -1) : basePath) + (path.startsWith("/") ? path : `/${path}`);
|
|
429
670
|
if (!result.startsWith("/")) result = `/${result}`;
|
|
430
671
|
result = result.replace(/^\/+/g, "/");
|
|
431
672
|
if (result.length > 1 && result.endsWith("/")) result = result.slice(0, -1);
|
|
@@ -443,7 +684,6 @@ var EndpointFactory = class EndpointFactory {
|
|
|
443
684
|
defaultAuthorizeFn: this.defaultAuthorizeFn,
|
|
444
685
|
defaultLogger: this.defaultLogger,
|
|
445
686
|
defaultSessionExtractor: this.defaultSessionExtractor,
|
|
446
|
-
defaultEventPublisher: this.defaultEventPublisher,
|
|
447
687
|
availableAuthorizers: authorizerConfigs,
|
|
448
688
|
defaultAuthorizerName: this.defaultAuthorizerName,
|
|
449
689
|
defaultAuditorStorage: this.defaultAuditorStorage,
|
|
@@ -478,7 +718,6 @@ var EndpointFactory = class EndpointFactory {
|
|
|
478
718
|
defaultAuthorizeFn: this.defaultAuthorizeFn,
|
|
479
719
|
defaultLogger: this.defaultLogger,
|
|
480
720
|
defaultSessionExtractor: this.defaultSessionExtractor,
|
|
481
|
-
defaultEventPublisher: this.defaultEventPublisher,
|
|
482
721
|
availableAuthorizers: this.availableAuthorizers,
|
|
483
722
|
defaultAuthorizerName: this.defaultAuthorizerName,
|
|
484
723
|
defaultAuditorStorage: this.defaultAuditorStorage,
|
|
@@ -504,8 +743,7 @@ var EndpointFactory = class EndpointFactory {
|
|
|
504
743
|
*/
|
|
505
744
|
authorizer(name) {
|
|
506
745
|
if (name !== "none" && this.availableAuthorizers.length > 0) {
|
|
507
|
-
|
|
508
|
-
if (!authorizerExists) {
|
|
746
|
+
if (!this.availableAuthorizers.some((a) => a.name === name)) {
|
|
509
747
|
const available = this.availableAuthorizers.map((a) => a.name).join(", ");
|
|
510
748
|
throw new Error(`Authorizer "${name}" not found in available authorizers: ${available}`);
|
|
511
749
|
}
|
|
@@ -517,7 +755,6 @@ var EndpointFactory = class EndpointFactory {
|
|
|
517
755
|
defaultAuthorizeFn: this.defaultAuthorizeFn,
|
|
518
756
|
defaultLogger: this.defaultLogger,
|
|
519
757
|
defaultSessionExtractor: this.defaultSessionExtractor,
|
|
520
|
-
defaultEventPublisher: this.defaultEventPublisher,
|
|
521
758
|
availableAuthorizers: this.availableAuthorizers,
|
|
522
759
|
defaultAuthorizerName: name === "none" ? void 0 : name,
|
|
523
760
|
defaultAuditorStorage: this.defaultAuditorStorage,
|
|
@@ -537,7 +774,6 @@ var EndpointFactory = class EndpointFactory {
|
|
|
537
774
|
defaultAuthorizeFn: this.defaultAuthorizeFn,
|
|
538
775
|
defaultLogger: this.defaultLogger,
|
|
539
776
|
defaultSessionExtractor: this.defaultSessionExtractor,
|
|
540
|
-
defaultEventPublisher: this.defaultEventPublisher,
|
|
541
777
|
availableAuthorizers: this.availableAuthorizers,
|
|
542
778
|
defaultAuthorizerName: this.defaultAuthorizerName,
|
|
543
779
|
defaultAuditorStorage: this.defaultAuditorStorage,
|
|
@@ -556,7 +792,6 @@ var EndpointFactory = class EndpointFactory {
|
|
|
556
792
|
defaultAuthorizeFn: fn,
|
|
557
793
|
defaultLogger: this.defaultLogger,
|
|
558
794
|
defaultSessionExtractor: this.defaultSessionExtractor,
|
|
559
|
-
defaultEventPublisher: this.defaultEventPublisher,
|
|
560
795
|
availableAuthorizers: this.availableAuthorizers,
|
|
561
796
|
defaultAuthorizerName: this.defaultAuthorizerName,
|
|
562
797
|
defaultAuditorStorage: this.defaultAuditorStorage,
|
|
@@ -580,7 +815,7 @@ var EndpointFactory = class EndpointFactory {
|
|
|
580
815
|
*/
|
|
581
816
|
dependsOn(constructs) {
|
|
582
817
|
const next = this.services(servicesOf(constructs));
|
|
583
|
-
next.defaultConstructs = [
|
|
818
|
+
next.defaultConstructs = [.../* @__PURE__ */ new Set([...this.defaultConstructs, ...constructs.map((construct) => construct.id)])];
|
|
584
819
|
return next;
|
|
585
820
|
}
|
|
586
821
|
services(services) {
|
|
@@ -591,7 +826,6 @@ var EndpointFactory = class EndpointFactory {
|
|
|
591
826
|
defaultAuthorizeFn: this.defaultAuthorizeFn,
|
|
592
827
|
defaultLogger: this.defaultLogger,
|
|
593
828
|
defaultSessionExtractor: this.defaultSessionExtractor,
|
|
594
|
-
defaultEventPublisher: this.defaultEventPublisher,
|
|
595
829
|
availableAuthorizers: this.availableAuthorizers,
|
|
596
830
|
defaultAuthorizerName: this.defaultAuthorizerName,
|
|
597
831
|
defaultAuditorStorage: this.defaultAuditorStorage,
|
|
@@ -610,26 +844,6 @@ var EndpointFactory = class EndpointFactory {
|
|
|
610
844
|
defaultAuthorizeFn: this.defaultAuthorizeFn,
|
|
611
845
|
defaultLogger: logger,
|
|
612
846
|
defaultSessionExtractor: this.defaultSessionExtractor,
|
|
613
|
-
defaultEventPublisher: this.defaultEventPublisher,
|
|
614
|
-
availableAuthorizers: this.availableAuthorizers,
|
|
615
|
-
defaultAuthorizerName: this.defaultAuthorizerName,
|
|
616
|
-
defaultAuditorStorage: this.defaultAuditorStorage,
|
|
617
|
-
defaultDatabaseService: this.defaultDatabaseService,
|
|
618
|
-
defaultActorExtractor: this.defaultActorExtractor,
|
|
619
|
-
customSecuritySchemes: this.customSecuritySchemes,
|
|
620
|
-
surface: this.surface,
|
|
621
|
-
defaultRlsConfig: this.defaultRlsConfig
|
|
622
|
-
});
|
|
623
|
-
}
|
|
624
|
-
publisher(publisher) {
|
|
625
|
-
return new EndpointFactory({
|
|
626
|
-
defaultServices: this.defaultServices,
|
|
627
|
-
defaultConstructs: this.defaultConstructs,
|
|
628
|
-
basePath: this.basePath,
|
|
629
|
-
defaultAuthorizeFn: this.defaultAuthorizeFn,
|
|
630
|
-
defaultLogger: this.defaultLogger,
|
|
631
|
-
defaultSessionExtractor: this.defaultSessionExtractor,
|
|
632
|
-
defaultEventPublisher: publisher,
|
|
633
847
|
availableAuthorizers: this.availableAuthorizers,
|
|
634
848
|
defaultAuthorizerName: this.defaultAuthorizerName,
|
|
635
849
|
defaultAuditorStorage: this.defaultAuditorStorage,
|
|
@@ -648,7 +862,6 @@ var EndpointFactory = class EndpointFactory {
|
|
|
648
862
|
defaultAuthorizeFn: this.defaultAuthorizeFn,
|
|
649
863
|
defaultLogger: this.defaultLogger,
|
|
650
864
|
defaultSessionExtractor: session,
|
|
651
|
-
defaultEventPublisher: this.defaultEventPublisher,
|
|
652
865
|
availableAuthorizers: this.availableAuthorizers,
|
|
653
866
|
defaultAuthorizerName: this.defaultAuthorizerName,
|
|
654
867
|
defaultAuditorStorage: this.defaultAuditorStorage,
|
|
@@ -667,12 +880,11 @@ var EndpointFactory = class EndpointFactory {
|
|
|
667
880
|
const service = serviceOf(source);
|
|
668
881
|
return new EndpointFactory({
|
|
669
882
|
defaultServices: this.defaultServices,
|
|
670
|
-
defaultConstructs: this.defaultConstructs,
|
|
883
|
+
defaultConstructs: isConsumable(source) ? idsOf([source], this.defaultConstructs) : this.defaultConstructs,
|
|
671
884
|
basePath: this.basePath,
|
|
672
885
|
defaultAuthorizeFn: this.defaultAuthorizeFn,
|
|
673
886
|
defaultLogger: this.defaultLogger,
|
|
674
887
|
defaultSessionExtractor: this.defaultSessionExtractor,
|
|
675
|
-
defaultEventPublisher: this.defaultEventPublisher,
|
|
676
888
|
availableAuthorizers: this.availableAuthorizers,
|
|
677
889
|
defaultAuthorizerName: this.defaultAuthorizerName,
|
|
678
890
|
defaultAuditorStorage: this.defaultAuditorStorage,
|
|
@@ -695,7 +907,6 @@ var EndpointFactory = class EndpointFactory {
|
|
|
695
907
|
defaultAuthorizeFn: this.defaultAuthorizeFn,
|
|
696
908
|
defaultLogger: this.defaultLogger,
|
|
697
909
|
defaultSessionExtractor: this.defaultSessionExtractor,
|
|
698
|
-
defaultEventPublisher: this.defaultEventPublisher,
|
|
699
910
|
availableAuthorizers: this.availableAuthorizers,
|
|
700
911
|
defaultAuthorizerName: this.defaultAuthorizerName,
|
|
701
912
|
defaultAuditorStorage: storage,
|
|
@@ -718,7 +929,6 @@ var EndpointFactory = class EndpointFactory {
|
|
|
718
929
|
defaultAuthorizeFn: this.defaultAuthorizeFn,
|
|
719
930
|
defaultLogger: this.defaultLogger,
|
|
720
931
|
defaultSessionExtractor: this.defaultSessionExtractor,
|
|
721
|
-
defaultEventPublisher: this.defaultEventPublisher,
|
|
722
932
|
availableAuthorizers: this.availableAuthorizers,
|
|
723
933
|
defaultAuthorizerName: this.defaultAuthorizerName,
|
|
724
934
|
defaultAuditorStorage: this.defaultAuditorStorage,
|
|
@@ -755,7 +965,6 @@ var EndpointFactory = class EndpointFactory {
|
|
|
755
965
|
defaultAuthorizeFn: this.defaultAuthorizeFn,
|
|
756
966
|
defaultLogger: this.defaultLogger,
|
|
757
967
|
defaultSessionExtractor: this.defaultSessionExtractor,
|
|
758
|
-
defaultEventPublisher: this.defaultEventPublisher,
|
|
759
968
|
availableAuthorizers: this.availableAuthorizers,
|
|
760
969
|
defaultAuthorizerName: this.defaultAuthorizerName,
|
|
761
970
|
defaultAuditorStorage: this.defaultAuditorStorage,
|
|
@@ -767,15 +976,13 @@ var EndpointFactory = class EndpointFactory {
|
|
|
767
976
|
});
|
|
768
977
|
}
|
|
769
978
|
createBuilder(method, path) {
|
|
770
|
-
const
|
|
771
|
-
const builder = new EndpointBuilder(fullPath, method);
|
|
979
|
+
const builder = new EndpointBuilder(EndpointFactory.joinPaths(path, this.basePath), method);
|
|
772
980
|
if (this.defaultAuthorizeFn) builder._authorize = this.defaultAuthorizeFn;
|
|
773
981
|
if (this.defaultServices.length) builder._services = [...this.defaultServices];
|
|
774
982
|
if (this.defaultConstructs.length) builder._constructs = [...this.defaultConstructs];
|
|
775
983
|
if (this.defaultLogger) builder._logger = this.defaultLogger;
|
|
776
984
|
builder._surface = this.surface;
|
|
777
985
|
if (this.defaultSessionExtractor) builder._getSession = this.defaultSessionExtractor;
|
|
778
|
-
if (this.defaultEventPublisher) builder._setPublisher(this.defaultEventPublisher);
|
|
779
986
|
builder._availableAuthorizers = this.availableAuthorizers;
|
|
780
987
|
if (this.defaultAuthorizerName) builder._authorizerName = this.defaultAuthorizerName;
|
|
781
988
|
if (this.defaultAuditorStorage) builder._setAuditorStorage(this.defaultAuditorStorage);
|
|
@@ -804,7 +1011,7 @@ var EndpointFactory = class EndpointFactory {
|
|
|
804
1011
|
return this.createBuilder("OPTIONS", path);
|
|
805
1012
|
}
|
|
806
1013
|
};
|
|
807
|
-
|
|
808
1014
|
//#endregion
|
|
809
|
-
export { BUILT_IN_SECURITY_SCHEMES,
|
|
810
|
-
|
|
1015
|
+
export { UploadAcceptInvalid as a, UploadExpiryInvalid as c, BUILT_IN_SECURITY_SCHEMES as d, createAuthorizer as f, UPLOAD_POST_SCHEMA as i, UploadMaxSizeInvalid as l, isBuiltInSecurityScheme as m, EndpointBuilder as n, UploadContentTypeRefused as o, getSecurityScheme as p, UploadEndpointBuilder as r, UploadContentTypeUnresolved as s, EndpointFactory as t, RLS_BYPASS as u };
|
|
1016
|
+
|
|
1017
|
+
//# sourceMappingURL=EndpointFactory-c2ZugGig.mjs.map
|