@geekmidas/cli 10.0.0-alpha.122 → 10.0.0-alpha.124
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{EndpointGenerator-BDa6pPgE.cjs → EndpointGenerator-B2MUa4M2.cjs} +2 -2
- package/dist/{EndpointGenerator-BDa6pPgE.cjs.map → EndpointGenerator-B2MUa4M2.cjs.map} +1 -1
- package/dist/{EndpointGenerator-CP_z_E3e.mjs → EndpointGenerator-Z_BUTocT.mjs} +2 -2
- package/dist/{EndpointGenerator-CP_z_E3e.mjs.map → EndpointGenerator-Z_BUTocT.mjs.map} +1 -1
- package/dist/{GoDaddyProvider-BJ9j9mR7.cjs → GoDaddyProvider-0z5RAN1k.cjs} +3 -3
- package/dist/{GoDaddyProvider-BJ9j9mR7.cjs.map → GoDaddyProvider-0z5RAN1k.cjs.map} +1 -1
- package/dist/{GoDaddyProvider-wIKYdm7V.mjs → GoDaddyProvider-55x4o-4z.mjs} +3 -3
- package/dist/{GoDaddyProvider-wIKYdm7V.mjs.map → GoDaddyProvider-55x4o-4z.mjs.map} +1 -1
- package/dist/{HostingerProvider-BNpS9aRJ.mjs → HostingerProvider-Cjh_2Ml6.mjs} +2 -2
- package/dist/{HostingerProvider-BNpS9aRJ.mjs.map → HostingerProvider-Cjh_2Ml6.mjs.map} +1 -1
- package/dist/{HostingerProvider-DR1iws1P.cjs → HostingerProvider-OdQmKXE3.cjs} +2 -2
- package/dist/{HostingerProvider-DR1iws1P.cjs.map → HostingerProvider-OdQmKXE3.cjs.map} +1 -1
- package/dist/{LegacyStateStore-CkXUJP7i.mjs → LegacyStateStore-C-vumKSN.mjs} +3 -3
- package/dist/{LegacyStateStore-CkXUJP7i.mjs.map → LegacyStateStore-C-vumKSN.mjs.map} +1 -1
- package/dist/{LegacyStateStore-D1S87I_B.cjs → LegacyStateStore-DRpB-yC5.cjs} +3 -3
- package/dist/{LegacyStateStore-D1S87I_B.cjs.map → LegacyStateStore-DRpB-yC5.cjs.map} +1 -1
- package/dist/{LocalStateStore-DmXfpvu4.cjs → LocalStateStore-C3ummuDT.cjs} +2 -2
- package/dist/{LocalStateStore-DmXfpvu4.cjs.map → LocalStateStore-C3ummuDT.cjs.map} +1 -1
- package/dist/{LocalStateStore-BWoWeSq0.mjs → LocalStateStore-CtOjpV1w.mjs} +2 -2
- package/dist/{LocalStateStore-BWoWeSq0.mjs.map → LocalStateStore-CtOjpV1w.mjs.map} +1 -1
- package/dist/{OpenApiTsGenerator-CsrukCE-.mjs → OpenApiTsGenerator-MtnMQL_g.mjs} +2 -2
- package/dist/{OpenApiTsGenerator-CsrukCE-.mjs.map → OpenApiTsGenerator-MtnMQL_g.mjs.map} +1 -1
- package/dist/{OpenApiTsGenerator-FNhY7Ssz.cjs → OpenApiTsGenerator-t3_E98Fi.cjs} +2 -2
- package/dist/{OpenApiTsGenerator-FNhY7Ssz.cjs.map → OpenApiTsGenerator-t3_E98Fi.cjs.map} +1 -1
- package/dist/{S3StateStore-D19JSGE9.mjs → S3StateStore-BC4Jm3Tw.mjs} +2 -2
- package/dist/{S3StateStore-D19JSGE9.mjs.map → S3StateStore-BC4Jm3Tw.mjs.map} +1 -1
- package/dist/{S3StateStore-BEdsjjP4.cjs → S3StateStore-BeArp0aF.cjs} +2 -2
- package/dist/{S3StateStore-BEdsjjP4.cjs.map → S3StateStore-BeArp0aF.cjs.map} +1 -1
- package/dist/{SSMStateStore-7xKw0Zz9.mjs → SSMStateStore-Crl76aYZ.mjs} +2 -2
- package/dist/{SSMStateStore-7xKw0Zz9.mjs.map → SSMStateStore-Crl76aYZ.mjs.map} +1 -1
- package/dist/{SSMStateStore--2bcxoiH.cjs → SSMStateStore-DcstR6cW.cjs} +2 -2
- package/dist/{SSMStateStore--2bcxoiH.cjs.map → SSMStateStore-DcstR6cW.cjs.map} +1 -1
- package/dist/{SubscriberGenerator-C8CPxrCK.cjs → SubscriberGenerator-C3QTae-R.cjs} +237 -54
- package/dist/SubscriberGenerator-C3QTae-R.cjs.map +1 -0
- package/dist/{SubscriberGenerator-y3pncae_.mjs → SubscriberGenerator-COAVPgM-.mjs} +227 -56
- package/dist/SubscriberGenerator-COAVPgM-.mjs.map +1 -0
- package/dist/{add-DlFUKdjX.cjs → add-BFjb6mMq.cjs} +7 -7
- package/dist/{add-DlFUKdjX.cjs.map → add-BFjb6mMq.cjs.map} +1 -1
- package/dist/{add-Bu6FkaTn.mjs → add-CIjmgzkb.mjs} +6 -6
- package/dist/{add-Bu6FkaTn.mjs.map → add-CIjmgzkb.mjs.map} +1 -1
- package/dist/{bundler-Bg0lPDoi.cjs → bundler-CiUoIsku.cjs} +5 -5
- package/dist/{bundler-Bg0lPDoi.cjs.map → bundler-CiUoIsku.cjs.map} +1 -1
- package/dist/{bundler-CgE5XTyr.mjs → bundler-D6KFNpQk.mjs} +5 -5
- package/dist/{bundler-CgE5XTyr.mjs.map → bundler-D6KFNpQk.mjs.map} +1 -1
- package/dist/{cli-z5S3bHyK.mjs → cli-DNtSTtMc.mjs} +4 -4
- package/dist/{cli-z5S3bHyK.mjs.map → cli-DNtSTtMc.mjs.map} +1 -1
- package/dist/{cli-Cvjlnpon.cjs → cli-r4eUr98C.cjs} +4 -4
- package/dist/{cli-Cvjlnpon.cjs.map → cli-r4eUr98C.cjs.map} +1 -1
- package/dist/{compose-bKLAtHLj.cjs → compose-BfXXWJSp.cjs} +362 -59
- package/dist/compose-BfXXWJSp.cjs.map +1 -0
- package/dist/{compose-CgBPA44v.mjs → compose-DJvvmF3X.mjs} +336 -33
- package/dist/compose-DJvvmF3X.mjs.map +1 -0
- package/dist/{config-D48erO2j.d.mts → config-IgK6YaGp.d.cts} +3 -4
- package/dist/config-IgK6YaGp.d.cts.map +1 -0
- package/dist/{config-DHDtsQrB.d.cts → config-kE-p5hxq.d.mts} +3 -4
- package/dist/config-kE-p5hxq.d.mts.map +1 -0
- package/dist/config.cjs +2 -2
- package/dist/config.d.cts +3 -3
- package/dist/config.d.mts +3 -3
- package/dist/config.mjs +2 -2
- package/dist/{credentialSchemas-B67WJOOm.cjs → credentialSchemas-AhIBuQxQ.cjs} +2 -2
- package/dist/{credentialSchemas-B67WJOOm.cjs.map → credentialSchemas-AhIBuQxQ.cjs.map} +1 -1
- package/dist/{credentialSchemas-DDOLRCLF.mjs → credentialSchemas-DLKbxYBy.mjs} +2 -2
- package/dist/{credentialSchemas-DDOLRCLF.mjs.map → credentialSchemas-DLKbxYBy.mjs.map} +1 -1
- package/dist/{credentials-Zqr3QQYB.cjs → credentials-D7XJypNd.cjs} +173 -3
- package/dist/credentials-D7XJypNd.cjs.map +1 -0
- package/dist/{credentials-B5N5yKk6.mjs → credentials-DpfnUvIR.mjs} +132 -4
- package/dist/credentials-DpfnUvIR.mjs.map +1 -0
- package/dist/deploy/public.cjs +16 -17
- package/dist/deploy/public.cjs.map +1 -1
- package/dist/deploy/public.d.cts +3 -5
- package/dist/deploy/public.d.cts.map +1 -1
- package/dist/deploy/public.d.mts +3 -5
- package/dist/deploy/public.d.mts.map +1 -1
- package/dist/deploy/public.mjs +11 -12
- package/dist/deploy/public.mjs.map +1 -1
- package/dist/{deploy-CI85F6dr.cjs → deploy-BbI1UMh3.cjs} +477 -156
- package/dist/deploy-BbI1UMh3.cjs.map +1 -0
- package/dist/{deploy-Ddy8UBoE.mjs → deploy-CiRYwFmr.mjs} +456 -117
- package/dist/deploy-CiRYwFmr.mjs.map +1 -0
- package/dist/{discover-C5roJuc9.mjs → discover-BvJOVsYG.mjs} +66 -14
- package/dist/discover-BvJOVsYG.mjs.map +1 -0
- package/dist/{discover-DozUKs8f.cjs → discover-ojkcbxHw.cjs} +88 -12
- package/dist/discover-ojkcbxHw.cjs.map +1 -0
- package/dist/{dokploy-CiozgdKO.cjs → dokploy-C0aQrCgs.cjs} +2 -2
- package/dist/{dokploy-CiozgdKO.cjs.map → dokploy-C0aQrCgs.cjs.map} +1 -1
- package/dist/{dokploy-Boj1NSHV.mjs → dokploy-MM7c3IE0.mjs} +2 -2
- package/dist/{dokploy-Boj1NSHV.mjs.map → dokploy-MM7c3IE0.mjs.map} +1 -1
- package/dist/{drivers-DbjiYpW6.cjs → drivers-CQ32PB5w.cjs} +2 -2
- package/dist/{drivers-DbjiYpW6.cjs.map → drivers-CQ32PB5w.cjs.map} +1 -1
- package/dist/{drivers-BjGDYfnC.mjs → drivers-Chb5Akov.mjs} +2 -2
- package/dist/{drivers-BjGDYfnC.mjs.map → drivers-Chb5Akov.mjs.map} +1 -1
- package/dist/{eas-DCg41jKK.mjs → eas-1Ee6kql0.mjs} +2 -2
- package/dist/{eas-DCg41jKK.mjs.map → eas-1Ee6kql0.mjs.map} +1 -1
- package/dist/{eas-BmBjIFf_.cjs → eas-CJoys9yh.cjs} +2 -2
- package/dist/{eas-BmBjIFf_.cjs.map → eas-CJoys9yh.cjs.map} +1 -1
- package/dist/{emit-C1e8qD08.mjs → emit-CNpuV_6Q.mjs} +17 -1
- package/dist/emit-CNpuV_6Q.mjs.map +1 -0
- package/dist/{emit-Dmc1nvdS.cjs → emit-qvHxMV9b.cjs} +17 -1
- package/dist/emit-qvHxMV9b.cjs.map +1 -0
- package/dist/{encryption-QOQbGXgV.mjs → encryption-B8Bk1Mvu.mjs} +3 -3
- package/dist/{encryption-QOQbGXgV.mjs.map → encryption-B8Bk1Mvu.mjs.map} +1 -1
- package/dist/{encryption-CwLWV2ig.cjs → encryption-Bo9VlRnl.cjs} +3 -3
- package/dist/{encryption-CwLWV2ig.cjs.map → encryption-Bo9VlRnl.cjs.map} +1 -1
- package/dist/{engine-HVqo3mQu.mjs → engine-BuinpJfS.mjs} +7 -8
- package/dist/{engine-HVqo3mQu.mjs.map → engine-BuinpJfS.mjs.map} +1 -1
- package/dist/{engine-D7YNY3v7.cjs → engine-esxTxcIx.cjs} +10 -11
- package/dist/{engine-D7YNY3v7.cjs.map → engine-esxTxcIx.cjs.map} +1 -1
- package/dist/{github-CO8W9SDs.cjs → github-BEA4K3_X.cjs} +80 -47
- package/dist/github-BEA4K3_X.cjs.map +1 -0
- package/dist/{github-CQt3xc3o.mjs → github-BUlKJfOV.mjs} +78 -45
- package/dist/github-BUlKJfOV.mjs.map +1 -0
- package/dist/{googlePlay-Cfu17aEp.mjs → googlePlay-CK05QiTq.mjs} +4 -4
- package/dist/{googlePlay-Cfu17aEp.mjs.map → googlePlay-CK05QiTq.mjs.map} +1 -1
- package/dist/{googlePlay-DSuF6jbF.cjs → googlePlay-CiqAS2ma.cjs} +5 -5
- package/dist/{googlePlay-DSuF6jbF.cjs.map → googlePlay-CiqAS2ma.cjs.map} +1 -1
- package/dist/{index-8OfpOtSI.d.cts → index-4CO0HD27.d.cts} +2 -2
- package/dist/{index-8OfpOtSI.d.cts.map → index-4CO0HD27.d.cts.map} +1 -1
- package/dist/{index-Dpji6Bxq.d.mts → index-DhUf0B0m.d.mts} +2 -2
- package/dist/{index-Dpji6Bxq.d.mts.map → index-DhUf0B0m.d.mts.map} +1 -1
- package/dist/index.cjs +81 -82
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +64 -65
- package/dist/index.mjs.map +1 -1
- package/dist/{local-BwC2v2Y8.mjs → local-B7Zv1NoA.mjs} +2 -2
- package/dist/{local-BwC2v2Y8.mjs.map → local-B7Zv1NoA.mjs.map} +1 -1
- package/dist/{local-DNhnkugT.cjs → local-OPC9BCZt.cjs} +3 -3
- package/dist/{local-DNhnkugT.cjs.map → local-OPC9BCZt.cjs.map} +1 -1
- package/dist/{migrate-CGkir5LM.mjs → migrate-BzCHT9qs.mjs} +3 -3
- package/dist/{migrate-CGkir5LM.mjs.map → migrate-BzCHT9qs.mjs.map} +1 -1
- package/dist/{migrate-CXsMaHbb.cjs → migrate-C-hmbjpG.cjs} +3 -3
- package/dist/{migrate-CXsMaHbb.cjs.map → migrate-C-hmbjpG.cjs.map} +1 -1
- package/dist/{migrate-Bkz8BGaZ.mjs → migrate-CnbvrVag.mjs} +4 -4
- package/dist/{migrate-Bkz8BGaZ.mjs.map → migrate-CnbvrVag.mjs.map} +1 -1
- package/dist/{migrate-dbAI2XF8.cjs → migrate-DeQJBexh.cjs} +4 -4
- package/dist/{migrate-dbAI2XF8.cjs.map → migrate-DeQJBexh.cjs.map} +1 -1
- package/dist/openapi.cjs +3 -3
- package/dist/openapi.d.cts +1 -1
- package/dist/openapi.d.mts +1 -1
- package/dist/openapi.mjs +3 -3
- package/dist/{publish-eUcWvSdP.mjs → publish-BISBrrqR.mjs} +2 -2
- package/dist/{publish-eUcWvSdP.mjs.map → publish-BISBrrqR.mjs.map} +1 -1
- package/dist/{publish-Bbd-2PI2.cjs → publish-DtSIB-hZ.cjs} +2 -2
- package/dist/{publish-Bbd-2PI2.cjs.map → publish-DtSIB-hZ.cjs.map} +1 -1
- package/dist/{ready-BOfogqzr.mjs → ready-DqsyadOs.mjs} +6 -6
- package/dist/{ready-BOfogqzr.mjs.map → ready-DqsyadOs.mjs.map} +1 -1
- package/dist/{ready-BFFP838V.cjs → ready-IVGu-q18.cjs} +6 -6
- package/dist/{ready-BFFP838V.cjs.map → ready-IVGu-q18.cjs.map} +1 -1
- package/dist/reconcile/public.cjs +2 -2
- package/dist/reconcile/public.d.cts +1 -2
- package/dist/reconcile/public.d.cts.map +1 -1
- package/dist/reconcile/public.d.mts +1 -2
- package/dist/reconcile/public.d.mts.map +1 -1
- package/dist/reconcile/public.mjs +2 -2
- package/dist/{resolve-DSilYpzm.mjs → resolve-BT7fkPN5.mjs} +4 -4
- package/dist/{resolve-DSilYpzm.mjs.map → resolve-BT7fkPN5.mjs.map} +1 -1
- package/dist/{resolve-CyprRcQo.cjs → resolve-C7GKQcE4.cjs} +4 -4
- package/dist/{resolve-CyprRcQo.cjs.map → resolve-C7GKQcE4.cjs.map} +1 -1
- package/dist/{rollback-DfwsnwGO.cjs → rollback-BEiB-Pje.cjs} +7 -7
- package/dist/{rollback-DfwsnwGO.cjs.map → rollback-BEiB-Pje.cjs.map} +1 -1
- package/dist/{rollback-C4ri3h7i.mjs → rollback-DbP0KuDw.mjs} +7 -7
- package/dist/{rollback-C4ri3h7i.mjs.map → rollback-DbP0KuDw.mjs.map} +1 -1
- package/dist/{runtime-ACdfK59n.d.cts → runtime-BFJQNqwd.d.mts} +2 -2
- package/dist/{runtime-ACdfK59n.d.cts.map → runtime-BFJQNqwd.d.mts.map} +1 -1
- package/dist/{runtime-YyQuekxi.d.mts → runtime-BJO-FFef.d.cts} +2 -2
- package/dist/{runtime-YyQuekxi.d.mts.map → runtime-BJO-FFef.d.cts.map} +1 -1
- package/dist/{s3-DQXZdmCM.mjs → s3-B4FTQQkV.mjs} +2 -2
- package/dist/{s3-DQXZdmCM.mjs.map → s3-B4FTQQkV.mjs.map} +1 -1
- package/dist/{s3-CrPoA89T.cjs → s3-DwKLXwUT.cjs} +2 -2
- package/dist/{s3-CrPoA89T.cjs.map → s3-DwKLXwUT.cjs.map} +1 -1
- package/dist/sandbox/credentials-worker.cjs +2 -2
- package/dist/sandbox/credentials-worker.mjs +2 -2
- package/dist/sandbox/discover-worker.cjs +1 -1
- package/dist/sandbox/discover-worker.mjs +1 -1
- package/dist/sandbox/migrate-worker.cjs +1 -1
- package/dist/sandbox/migrate-worker.mjs +1 -1
- package/dist/{seeds-CFG-f24B.cjs → seeds-DOfxmDRO.cjs} +362 -34
- package/dist/seeds-DOfxmDRO.cjs.map +1 -0
- package/dist/{seeds-oY0qDqui.mjs → seeds-rG-Evfz9.mjs} +341 -31
- package/dist/seeds-rG-Evfz9.mjs.map +1 -0
- package/dist/{serverSetup-CQZt0OT6.cjs → serverSetup-CWWVcU6Y.cjs} +6 -6
- package/dist/{serverSetup-CQZt0OT6.cjs.map → serverSetup-CWWVcU6Y.cjs.map} +1 -1
- package/dist/{serverSetup-D8nngcNL.mjs → serverSetup-xGw1fxuZ.mjs} +6 -6
- package/dist/{serverSetup-D8nngcNL.mjs.map → serverSetup-xGw1fxuZ.mjs.map} +1 -1
- package/dist/{sniffer-BAmtXzou.cjs → sniffer-C7O9Pna_.cjs} +9 -9
- package/dist/{sniffer-BAmtXzou.cjs.map → sniffer-C7O9Pna_.cjs.map} +1 -1
- package/dist/{sniffer-Cgx608Tl.mjs → sniffer-DVPgfyHr.mjs} +9 -9
- package/dist/{sniffer-Cgx608Tl.mjs.map → sniffer-DVPgfyHr.mjs.map} +1 -1
- package/dist/{dns-CfEZHt7r.cjs → snsSubscriptions-CSkteK2J.cjs} +520 -3
- package/dist/snsSubscriptions-CSkteK2J.cjs.map +1 -0
- package/dist/{dns-BgxvvcQa.mjs → snsSubscriptions-CvBIGGp0.mjs} +431 -6
- package/dist/snsSubscriptions-CvBIGGp0.mjs.map +1 -0
- package/dist/{sst-C1pxbFEd.mjs → sst-CTqZZl1_.mjs} +3 -4
- package/dist/{sst-C1pxbFEd.mjs.map → sst-CTqZZl1_.mjs.map} +1 -1
- package/dist/{sst-B-Uz4cvm.cjs → sst-lEkBwzGc.cjs} +4 -5
- package/dist/{sst-B-Uz4cvm.cjs.map → sst-lEkBwzGc.cjs.map} +1 -1
- package/dist/{stage-BKDdQm65.mjs → stage-2EKpzPQ1.mjs} +6 -6
- package/dist/{stage-BKDdQm65.mjs.map → stage-2EKpzPQ1.mjs.map} +1 -1
- package/dist/{stage-CJysBXWB.cjs → stage-fRfFtLwj.cjs} +7 -7
- package/dist/{stage-CJysBXWB.cjs.map → stage-fRfFtLwj.cjs.map} +1 -1
- package/dist/{stages-D4SnG5yl.cjs → stages-B7mCWI_R.cjs} +2 -2
- package/dist/{stages-D4SnG5yl.cjs.map → stages-B7mCWI_R.cjs.map} +1 -1
- package/dist/{stages-Cb9rqRbN.mjs → stages-DSltTW2d.mjs} +2 -2
- package/dist/{stages-Cb9rqRbN.mjs.map → stages-DSltTW2d.mjs.map} +1 -1
- package/dist/target/public.cjs +1 -1
- package/dist/target/public.d.cts +2 -2
- package/dist/target/public.d.mts +2 -2
- package/dist/target/public.mjs +1 -1
- package/dist/{terminal-CW_dWeTe.mjs → terminal-BAVrDhhN.mjs} +3 -3
- package/dist/{terminal-CW_dWeTe.mjs.map → terminal-BAVrDhhN.mjs.map} +1 -1
- package/dist/{terminal-DJlqcW_U.cjs → terminal-D1aeTkgv.cjs} +3 -3
- package/dist/{terminal-DJlqcW_U.cjs.map → terminal-D1aeTkgv.cjs.map} +1 -1
- package/dist/{types-HqVPddRK.d.mts → types-CFU2uvrz.d.cts} +263 -4
- package/dist/types-CFU2uvrz.d.cts.map +1 -0
- package/dist/{types-B6UXlEkf.d.cts → types-D3BeGucy.d.mts} +262 -5
- package/dist/types-D3BeGucy.d.mts.map +1 -0
- package/dist/vitest.cjs +1 -1
- package/dist/vitest.mjs +1 -1
- package/dist/workspace/index.cjs +1 -1
- package/dist/workspace/index.d.cts +2 -2
- package/dist/workspace/index.d.mts +2 -2
- package/dist/workspace/index.mjs +1 -1
- package/dist/{workspace-BwqQnool.cjs → workspace-C82GLPnf.cjs} +8 -2
- package/dist/workspace-C82GLPnf.cjs.map +1 -0
- package/dist/{workspace-D1QbNd55.mjs → workspace-DUnnVjqC.mjs} +8 -2
- package/dist/workspace-DUnnVjqC.mjs.map +1 -0
- package/package.json +17 -16
- package/dist/SubscriberGenerator-C8CPxrCK.cjs.map +0 -1
- package/dist/SubscriberGenerator-y3pncae_.mjs.map +0 -1
- package/dist/compose-CgBPA44v.mjs.map +0 -1
- package/dist/compose-bKLAtHLj.cjs.map +0 -1
- package/dist/config-D48erO2j.d.mts.map +0 -1
- package/dist/config-DHDtsQrB.d.cts.map +0 -1
- package/dist/credentials-B5N5yKk6.mjs.map +0 -1
- package/dist/credentials-Zqr3QQYB.cjs.map +0 -1
- package/dist/deploy-CI85F6dr.cjs.map +0 -1
- package/dist/deploy-Ddy8UBoE.mjs.map +0 -1
- package/dist/discover-C5roJuc9.mjs.map +0 -1
- package/dist/discover-CSW_BMWa.d.cts +0 -125
- package/dist/discover-CSW_BMWa.d.cts.map +0 -1
- package/dist/discover-DozUKs8f.cjs.map +0 -1
- package/dist/discover-xtT7fgWg.d.mts +0 -125
- package/dist/discover-xtT7fgWg.d.mts.map +0 -1
- package/dist/dns-BgxvvcQa.mjs.map +0 -1
- package/dist/dns-CfEZHt7r.cjs.map +0 -1
- package/dist/emit-C1e8qD08.mjs.map +0 -1
- package/dist/emit-Dmc1nvdS.cjs.map +0 -1
- package/dist/github-CO8W9SDs.cjs.map +0 -1
- package/dist/github-CQt3xc3o.mjs.map +0 -1
- package/dist/run-BJLIerMM.mjs +0 -133
- package/dist/run-BJLIerMM.mjs.map +0 -1
- package/dist/run-fVZ-rLnc.cjs +0 -174
- package/dist/run-fVZ-rLnc.cjs.map +0 -1
- package/dist/sandbox-C4g1eG31.d.mts +0 -104
- package/dist/sandbox-C4g1eG31.d.mts.map +0 -1
- package/dist/sandbox-CdKgQ3XU.d.cts +0 -104
- package/dist/sandbox-CdKgQ3XU.d.cts.map +0 -1
- package/dist/seeds-CFG-f24B.cjs.map +0 -1
- package/dist/seeds-oY0qDqui.mjs.map +0 -1
- package/dist/types-B6UXlEkf.d.cts.map +0 -1
- package/dist/types-HqVPddRK.d.mts.map +0 -1
- package/dist/workspace-BwqQnool.cjs.map +0 -1
- package/dist/workspace-D1QbNd55.mjs.map +0 -1
|
@@ -1,6 +1,9 @@
|
|
|
1
|
+
const require_rolldown_runtime = require("./rolldown-runtime-C0BPl7ul.cjs");
|
|
1
2
|
const require_errors = require("./errors-DMC4Umsb.cjs");
|
|
2
|
-
const
|
|
3
|
-
const
|
|
3
|
+
const require_credentials = require("./credentials-D7XJypNd.cjs");
|
|
4
|
+
const require_workspace = require("./workspace-C82GLPnf.cjs");
|
|
5
|
+
const require_seeds = require("./seeds-DOfxmDRO.cjs");
|
|
6
|
+
const require_derive = require("./derive-DAbo49sm.cjs");
|
|
4
7
|
let node_path = require("node:path");
|
|
5
8
|
let node_fs = require("node:fs");
|
|
6
9
|
let node_net = require("node:net");
|
|
@@ -8,6 +11,8 @@ let node_crypto = require("node:crypto");
|
|
|
8
11
|
let _geekmidas_manifest = require("@geekmidas/manifest");
|
|
9
12
|
let node_module = require("node:module");
|
|
10
13
|
let node_url = require("node:url");
|
|
14
|
+
let bcryptjs = require("bcryptjs");
|
|
15
|
+
bcryptjs = require_rolldown_runtime.__toESM(bcryptjs, 1);
|
|
11
16
|
let node_dns_promises = require("node:dns/promises");
|
|
12
17
|
//#region src/providers/dns.ts
|
|
13
18
|
/** Whether the workspace deploys through the compose target. */
|
|
@@ -319,6 +324,226 @@ function backupsRoleStatements(backups) {
|
|
|
319
324
|
];
|
|
320
325
|
}
|
|
321
326
|
//#endregion
|
|
327
|
+
//#region src/compose/sitePassword.ts
|
|
328
|
+
/**
|
|
329
|
+
* A deployed stage's sites behind a password — `deploy.sitePassword` — so a
|
|
330
|
+
* staging build is not public while it is being tried.
|
|
331
|
+
*
|
|
332
|
+
* The edge asks for it with HTTP basic auth, before a request reaches the
|
|
333
|
+
* site: the browser prompts, and nothing of the site loads until the stage's
|
|
334
|
+
* login is given. The user is the stage's name; the password is generated
|
|
335
|
+
* once per site and kept in the stage's secrets, where one set by hand wins.
|
|
336
|
+
* Only its bcrypt hash reaches the edge's config.
|
|
337
|
+
*
|
|
338
|
+
* Pure.
|
|
339
|
+
*/
|
|
340
|
+
/** `deploy.sitePassword` names something that is not one of the stage's sites. */
|
|
341
|
+
var UnknownPasswordSite = class extends require_errors.GkmError {
|
|
342
|
+
stage;
|
|
343
|
+
site;
|
|
344
|
+
sites;
|
|
345
|
+
constructor(stage, site, sites) {
|
|
346
|
+
super(`deploy.sitePassword.${stage} names '${site}', which is not a site of this workspace. ${sites.length > 0 ? `Its sites: ${sites.map((s) => `'${s}'`).join(", ")}.` : "It declares no site."} Name one of them, or set ${stage}: true for every site.`);
|
|
347
|
+
this.stage = stage;
|
|
348
|
+
this.site = site;
|
|
349
|
+
this.sites = sites;
|
|
350
|
+
this.name = "UnknownPasswordSite";
|
|
351
|
+
}
|
|
352
|
+
};
|
|
353
|
+
/** A site the stage puts behind a password, with none in the stage's secrets. */
|
|
354
|
+
var SitePasswordMissing = class extends require_errors.GkmError {
|
|
355
|
+
stage;
|
|
356
|
+
key;
|
|
357
|
+
constructor(stage, key) {
|
|
358
|
+
super(`deploy.sitePassword puts a site of '${stage}' behind a password, and the stage has no ${key} in its secrets. Run gkm compose --stage ${stage} once to generate it, or set one: gkm secrets:set ${key} '…' --stage ${stage}`);
|
|
359
|
+
this.stage = stage;
|
|
360
|
+
this.key = key;
|
|
361
|
+
this.name = "SitePasswordMissing";
|
|
362
|
+
}
|
|
363
|
+
};
|
|
364
|
+
/**
|
|
365
|
+
* `deploy.sitePassword` names a stage that deploys through a target that
|
|
366
|
+
* cannot ask for a login. Refused rather than ignored: ignored, the stage
|
|
367
|
+
* would be public while its config says it is not.
|
|
368
|
+
*/
|
|
369
|
+
var SitePasswordNeedsCompose = class extends require_errors.GkmError {
|
|
370
|
+
stage;
|
|
371
|
+
target;
|
|
372
|
+
constructor(stage, target) {
|
|
373
|
+
super(`deploy.sitePassword puts '${stage}' behind a password, and it deploys through '${target}', which cannot ask for one yet — only compose does. Remove ${stage} from deploy.sitePassword, or deploy it with compose.`);
|
|
374
|
+
this.stage = stage;
|
|
375
|
+
this.target = target;
|
|
376
|
+
this.name = "SitePasswordNeedsCompose";
|
|
377
|
+
}
|
|
378
|
+
};
|
|
379
|
+
/**
|
|
380
|
+
* @throws {SitePasswordNeedsCompose} where `stage` asks for a site password
|
|
381
|
+
* and `target` is not compose
|
|
382
|
+
*/
|
|
383
|
+
function assertSitePasswordTarget(workspace, stage, target) {
|
|
384
|
+
if (workspace.deploy?.sitePassword?.[stage] && target !== "compose") throw new SitePasswordNeedsCompose(stage, target);
|
|
385
|
+
}
|
|
386
|
+
/** The stage secret a site's password is kept in: `WEB_SITE_PASSWORD`. */
|
|
387
|
+
function sitePasswordKey(site) {
|
|
388
|
+
return `${(0, _geekmidas_manifest.environmentCase)(site)}_SITE_PASSWORD`;
|
|
389
|
+
}
|
|
390
|
+
/** Every site the manifest declares, by app name. */
|
|
391
|
+
function siteNames(manifest) {
|
|
392
|
+
return Object.values(manifest).filter((declaration) => declaration.kind === "site").map((declaration) => require_derive.appKey(declaration.id));
|
|
393
|
+
}
|
|
394
|
+
/**
|
|
395
|
+
* The sites `deploy.sitePassword` puts behind a password on `stage`, by app
|
|
396
|
+
* name: every one for `true`, the ones it names otherwise.
|
|
397
|
+
*
|
|
398
|
+
* @throws {UnknownPasswordSite} for a name that is not one of `sites`
|
|
399
|
+
*/
|
|
400
|
+
function passwordSites(workspace, stage, sites) {
|
|
401
|
+
const choice = workspace.deploy?.sitePassword?.[stage];
|
|
402
|
+
if (!choice) return [];
|
|
403
|
+
if (choice === true) return [...sites];
|
|
404
|
+
const chosen = /* @__PURE__ */ new Set();
|
|
405
|
+
for (const name of choice) {
|
|
406
|
+
const site = require_derive.appKey(name);
|
|
407
|
+
if (!sites.includes(site)) throw new UnknownPasswordSite(stage, name, sites);
|
|
408
|
+
chosen.add(site);
|
|
409
|
+
}
|
|
410
|
+
return [...chosen];
|
|
411
|
+
}
|
|
412
|
+
/** A password: 192 random bits, URL-safe, so it is typed or pasted as is. */
|
|
413
|
+
function generateSitePassword() {
|
|
414
|
+
return (0, node_crypto.randomBytes)(24).toString("base64url");
|
|
415
|
+
}
|
|
416
|
+
/**
|
|
417
|
+
* The stage's secrets with a generated password for each site, where it has
|
|
418
|
+
* none. Pure, like `withGeneratedSecrets`: the caller keeps the result once
|
|
419
|
+
* the run goes ahead.
|
|
420
|
+
*/
|
|
421
|
+
function withSitePasswords(secrets, sites) {
|
|
422
|
+
const missing = sites.map(sitePasswordKey).filter((key) => !secrets.custom?.[key]);
|
|
423
|
+
if (missing.length === 0) return {
|
|
424
|
+
secrets,
|
|
425
|
+
generated: []
|
|
426
|
+
};
|
|
427
|
+
return {
|
|
428
|
+
secrets: {
|
|
429
|
+
...secrets,
|
|
430
|
+
custom: {
|
|
431
|
+
...secrets.custom,
|
|
432
|
+
...Object.fromEntries(missing.map((key) => [key, generateSitePassword()]))
|
|
433
|
+
},
|
|
434
|
+
updatedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
435
|
+
},
|
|
436
|
+
generated: missing
|
|
437
|
+
};
|
|
438
|
+
}
|
|
439
|
+
/**
|
|
440
|
+
* The login a site is served behind on `stage`.
|
|
441
|
+
*
|
|
442
|
+
* The hash's salt is derived from the password, so the same password always
|
|
443
|
+
* renders the same edge config: a deploy that changed nothing rewrites
|
|
444
|
+
* nothing, and the proxy is not reloaded for it. A per-hash random salt
|
|
445
|
+
* guards against a precomputed table of common passwords; a generated one is
|
|
446
|
+
* 192 random bits, which no table holds.
|
|
447
|
+
*
|
|
448
|
+
* @throws {SitePasswordMissing} where the stage's secrets hold none
|
|
449
|
+
*/
|
|
450
|
+
function siteAuth(stage, site, custom) {
|
|
451
|
+
const key = sitePasswordKey(site);
|
|
452
|
+
const password = custom[key];
|
|
453
|
+
if (!password) throw new SitePasswordMissing(stage, key);
|
|
454
|
+
return {
|
|
455
|
+
user: stage,
|
|
456
|
+
password,
|
|
457
|
+
hash: bcryptjs.default.hashSync(password, saltFor(password)),
|
|
458
|
+
key
|
|
459
|
+
};
|
|
460
|
+
}
|
|
461
|
+
/** bcrypt's own base-64 alphabet, in which a salt is written. */
|
|
462
|
+
const BCRYPT_ALPHABET = "./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
|
|
463
|
+
/**
|
|
464
|
+
* A bcrypt salt — `$2a$`, which Caddy and Traefik both read, at cost 10 —
|
|
465
|
+
* derived from the password.
|
|
466
|
+
*/
|
|
467
|
+
function saltFor(password) {
|
|
468
|
+
const digest = (0, node_crypto.createHash)("sha256").update(password).digest();
|
|
469
|
+
let salt = "";
|
|
470
|
+
for (let i = 0; i < 22; i++) salt += BCRYPT_ALPHABET[digest[i] % 64];
|
|
471
|
+
return `$2a$10$${salt}`;
|
|
472
|
+
}
|
|
473
|
+
//#endregion
|
|
474
|
+
//#region src/providers/aws.ts
|
|
475
|
+
/**
|
|
476
|
+
* The AWS account a provider provisions in — the stage's, found the way the
|
|
477
|
+
* SSM and Secrets Manager stores find it.
|
|
478
|
+
*
|
|
479
|
+
* 1. `--profile`, resolved on its own: exported keys left over from another
|
|
480
|
+
* account never win over a profile someone named.
|
|
481
|
+
* 2. `AWS_PROFILE`, else `AWS_ACCESS_KEY_ID`/`AWS_SECRET_ACCESS_KEY` — the
|
|
482
|
+
* deploy's own `aws` credential kind (`storedCredentials`).
|
|
483
|
+
* 3. The SDK's default chain: `~/.aws` default profile, SSO, a role. In CI,
|
|
484
|
+
* whatever `aws-actions/configure-aws-credentials` exported.
|
|
485
|
+
*
|
|
486
|
+
* None of them: the provider has no provisioning credentials, and the stage
|
|
487
|
+
* is treated as `external`.
|
|
488
|
+
*/
|
|
489
|
+
async function awsProvisioningCredentials(lookup) {
|
|
490
|
+
const region = lookup.env.AWS_REGION ?? lookup.env.AWS_DEFAULT_REGION;
|
|
491
|
+
const where = region ? { region } : {};
|
|
492
|
+
if (lookup.profile) return {
|
|
493
|
+
profile: lookup.profile,
|
|
494
|
+
...where
|
|
495
|
+
};
|
|
496
|
+
const stored = await require_credentials.storedCredentials({
|
|
497
|
+
env: lookup.env,
|
|
498
|
+
...lookup.home ? { home: lookup.home } : {}
|
|
499
|
+
}).get({
|
|
500
|
+
kind: "aws",
|
|
501
|
+
stage: lookup.stage
|
|
502
|
+
});
|
|
503
|
+
if (stored) return stored;
|
|
504
|
+
try {
|
|
505
|
+
const { fromNodeProviderChain } = await import("@aws-sdk/credential-providers");
|
|
506
|
+
await fromNodeProviderChain({
|
|
507
|
+
timeout: 1e3,
|
|
508
|
+
maxRetries: 0
|
|
509
|
+
})();
|
|
510
|
+
return {
|
|
511
|
+
chain: true,
|
|
512
|
+
...where
|
|
513
|
+
};
|
|
514
|
+
} catch {
|
|
515
|
+
return;
|
|
516
|
+
}
|
|
517
|
+
}
|
|
518
|
+
/**
|
|
519
|
+
* An S3-compatible endpoint the environment points the SDK at — the AWS
|
|
520
|
+
* emulator in tests. The SDK reads it itself; it is read here too, because
|
|
521
|
+
* an emulator takes path-style requests, and a key written for one has to
|
|
522
|
+
* say where it is.
|
|
523
|
+
*/
|
|
524
|
+
function awsEndpoint(env, service) {
|
|
525
|
+
return env[`AWS_ENDPOINT_URL_${service}`] ?? env.AWS_ENDPOINT_URL;
|
|
526
|
+
}
|
|
527
|
+
/** An SDK client's config for a provisioning credential. */
|
|
528
|
+
async function awsClientConfig(credential, region) {
|
|
529
|
+
if ("profile" in credential) {
|
|
530
|
+
const { fromIni } = await import("@aws-sdk/credential-providers");
|
|
531
|
+
return {
|
|
532
|
+
region,
|
|
533
|
+
credentials: fromIni({ profile: credential.profile })
|
|
534
|
+
};
|
|
535
|
+
}
|
|
536
|
+
if ("accessKeyId" in credential) return {
|
|
537
|
+
region,
|
|
538
|
+
credentials: {
|
|
539
|
+
accessKeyId: credential.accessKeyId,
|
|
540
|
+
secretAccessKey: credential.secretAccessKey,
|
|
541
|
+
...credential.sessionToken ? { sessionToken: credential.sessionToken } : {}
|
|
542
|
+
}
|
|
543
|
+
};
|
|
544
|
+
return { region };
|
|
545
|
+
}
|
|
546
|
+
//#endregion
|
|
322
547
|
//#region src/compose/dns.ts
|
|
323
548
|
/**
|
|
324
549
|
* A compose stage's DNS: the records its public hosts need, and the check that
|
|
@@ -1059,6 +1284,208 @@ async function stageDns(input) {
|
|
|
1059
1284
|
};
|
|
1060
1285
|
}
|
|
1061
1286
|
//#endregion
|
|
1287
|
+
//#region src/deploy/snsSubscriptions.ts
|
|
1288
|
+
/** The type every recorded subscription has in the stage's state. */
|
|
1289
|
+
const SUBSCRIPTION_TYPE = "sns-subscription";
|
|
1290
|
+
/** The state key a subscriber's SNS subscription is recorded under. */
|
|
1291
|
+
const subscriptionKey = (worker, name) => `${SUBSCRIPTION_TYPE}:${worker}/${name}`;
|
|
1292
|
+
/** What a recorded subscription is written to the stage's state as. */
|
|
1293
|
+
function subscriptionResource(subscription, arn) {
|
|
1294
|
+
const { name, ...data } = subscription;
|
|
1295
|
+
return {
|
|
1296
|
+
key: subscriptionKey(subscription.worker, name),
|
|
1297
|
+
type: SUBSCRIPTION_TYPE,
|
|
1298
|
+
id: arn,
|
|
1299
|
+
status: "ready",
|
|
1300
|
+
data: {
|
|
1301
|
+
...data,
|
|
1302
|
+
...data.events ? { events: [...data.events] } : {}
|
|
1303
|
+
}
|
|
1304
|
+
};
|
|
1305
|
+
}
|
|
1306
|
+
/** The subscription a record holds, as an endpoint to reconcile. */
|
|
1307
|
+
function specOf(record) {
|
|
1308
|
+
const events = record.data?.events;
|
|
1309
|
+
return {
|
|
1310
|
+
name: record.key.split("/").pop(),
|
|
1311
|
+
endpoint: String(record.data?.endpoint),
|
|
1312
|
+
...record.data?.deadLetterQueueArn ? { deadLetterQueueArn: String(record.data.deadLetterQueueArn) } : {},
|
|
1313
|
+
...Array.isArray(events) ? { events: events.map(String) } : {}
|
|
1314
|
+
};
|
|
1315
|
+
}
|
|
1316
|
+
/**
|
|
1317
|
+
* The subscriptions the deploy recorded, by worker and export — what each
|
|
1318
|
+
* worker is handed as `GKM_SNS_SUBSCRIPTIONS`.
|
|
1319
|
+
*/
|
|
1320
|
+
function recordedPushSubscriptions(resources) {
|
|
1321
|
+
const byWorker = {};
|
|
1322
|
+
for (const record of Object.values(resources ?? {})) {
|
|
1323
|
+
if (record.type !== "sns-subscription" || !record.id) continue;
|
|
1324
|
+
const [worker, name] = record.key.slice(`${SUBSCRIPTION_TYPE}:`.length).split("/");
|
|
1325
|
+
if (!worker || !name) continue;
|
|
1326
|
+
byWorker[worker] = {
|
|
1327
|
+
...byWorker[worker],
|
|
1328
|
+
[name]: record.id
|
|
1329
|
+
};
|
|
1330
|
+
}
|
|
1331
|
+
return byWorker;
|
|
1332
|
+
}
|
|
1333
|
+
/** A topic connection string the deploy cannot sign with. */
|
|
1334
|
+
var TopicSubscriptionUnsigned = class extends require_errors.GkmError {
|
|
1335
|
+
connectionKey;
|
|
1336
|
+
constructor(connectionKey) {
|
|
1337
|
+
super(`'${connectionKey}' carries no keys, and the deploy found no AWS credentials of its own to subscribe the worker's routes with. Put accessKeyId and secretAccessKey in it — keys allowed sns:Subscribe, sns:ListSubscriptionsByTopic, sns:GetSubscriptionAttributes, sns:SetSubscriptionAttributes and sns:Unsubscribe on the topic — or sign in with \`gkm login\`.`);
|
|
1338
|
+
this.connectionKey = connectionKey;
|
|
1339
|
+
this.name = "TopicSubscriptionUnsigned";
|
|
1340
|
+
}
|
|
1341
|
+
};
|
|
1342
|
+
/**
|
|
1343
|
+
* A connection to the topic a stage's connection string names, signed with
|
|
1344
|
+
* its own keys — or, carrying none, the deploy's.
|
|
1345
|
+
*
|
|
1346
|
+
* The emulator the environment points the SDK at stands in for SNS, as it
|
|
1347
|
+
* does for every provider: a string with no `endpoint` is SNS itself.
|
|
1348
|
+
*
|
|
1349
|
+
* @throws {TopicSubscriptionUnsigned} with no keys from either
|
|
1350
|
+
*/
|
|
1351
|
+
async function topicConnection(input) {
|
|
1352
|
+
const { SNSConnection, snsUrl } = await import("@geekmidas/events/sns");
|
|
1353
|
+
const { topicArn, region, endpoint } = snsUrl.parse(input.connectionString);
|
|
1354
|
+
const params = new URL(input.connectionString).searchParams;
|
|
1355
|
+
const accessKeyId = params.get("accessKeyId");
|
|
1356
|
+
const secretAccessKey = params.get("secretAccessKey");
|
|
1357
|
+
const where = region ?? topicArn.split(":")[3];
|
|
1358
|
+
let credentials;
|
|
1359
|
+
if (accessKeyId && secretAccessKey) {
|
|
1360
|
+
const sessionToken = params.get("sessionToken");
|
|
1361
|
+
credentials = {
|
|
1362
|
+
accessKeyId,
|
|
1363
|
+
secretAccessKey,
|
|
1364
|
+
...sessionToken ? { sessionToken } : {}
|
|
1365
|
+
};
|
|
1366
|
+
} else {
|
|
1367
|
+
const provisioning = await awsProvisioningCredentials({
|
|
1368
|
+
stage: input.stage,
|
|
1369
|
+
env: input.env,
|
|
1370
|
+
...input.home ? { home: input.home } : {}
|
|
1371
|
+
});
|
|
1372
|
+
if (!provisioning) throw new TopicSubscriptionUnsigned(input.connectionKey);
|
|
1373
|
+
credentials = (await awsClientConfig(provisioning, where ?? "us-east-1")).credentials;
|
|
1374
|
+
}
|
|
1375
|
+
const override = endpoint ?? awsEndpoint(input.env, "SNS");
|
|
1376
|
+
return new SNSConnection({
|
|
1377
|
+
topicArn,
|
|
1378
|
+
...where ? { region: where } : {},
|
|
1379
|
+
...override ? { endpoint: override } : {},
|
|
1380
|
+
...credentials ? { credentials } : {}
|
|
1381
|
+
});
|
|
1382
|
+
}
|
|
1383
|
+
/** A subscription still waiting to be confirmed once its worker is up. */
|
|
1384
|
+
var PushSubscriptionsUnconfirmed = class extends require_errors.GkmError {
|
|
1385
|
+
endpoints;
|
|
1386
|
+
constructor(endpoints) {
|
|
1387
|
+
super(`SNS still waits for ${endpoints.join(", ")} to confirm ${endpoints.length === 1 ? "its subscription" : "their subscriptions"}, so nothing is pushed there yet. Check the worker's logs for the confirmation it refused, and that its host answers from the internet; the next deploy sends the confirmation again.`);
|
|
1388
|
+
this.endpoints = endpoints;
|
|
1389
|
+
this.name = "PushSubscriptionsUnconfirmed";
|
|
1390
|
+
}
|
|
1391
|
+
};
|
|
1392
|
+
/**
|
|
1393
|
+
* Once the workers are up: every subscription recorded as pending is
|
|
1394
|
+
* subscribed again — SNS resends its confirmation to a worker now there to
|
|
1395
|
+
* answer it — and waited on until confirmed.
|
|
1396
|
+
*
|
|
1397
|
+
* The first deploy needs it: the subscription is made before the worker
|
|
1398
|
+
* starts, so SNS's first confirmation finds nobody.
|
|
1399
|
+
*
|
|
1400
|
+
* A bucket's subscriptions are reached with the deploy's provisioning
|
|
1401
|
+
* credentials; a hand-set topic's with the connection string they were made
|
|
1402
|
+
* with, read from the stage's secrets.
|
|
1403
|
+
*
|
|
1404
|
+
* @returns what is still pending when the wait ran out — none, normally.
|
|
1405
|
+
*/
|
|
1406
|
+
async function confirmPendingSubscriptions(input) {
|
|
1407
|
+
const env = input.env ?? process.env;
|
|
1408
|
+
const records = Object.values(input.resources ?? {}).filter((r) => r.type === "sns-subscription" && r.id);
|
|
1409
|
+
if (!records.some((r) => r.data?.pending === true)) return [];
|
|
1410
|
+
const { SNSConnection, reconcileHttpSubscriptions } = await import("@geekmidas/events/sns");
|
|
1411
|
+
const { GetSubscriptionAttributesCommand } = await import("@aws-sdk/client-sns");
|
|
1412
|
+
const endpoint = awsEndpoint(env, "SNS");
|
|
1413
|
+
let provisioning = null;
|
|
1414
|
+
const groups = /* @__PURE__ */ new Map();
|
|
1415
|
+
for (const record of records) {
|
|
1416
|
+
const host = new URL(String(record.data?.endpoint)).host;
|
|
1417
|
+
const group = `${record.data?.topicArn}|${host}`;
|
|
1418
|
+
groups.set(group, [...groups.get(group) ?? [], record]);
|
|
1419
|
+
}
|
|
1420
|
+
const left = [];
|
|
1421
|
+
for (const [group, members] of groups) {
|
|
1422
|
+
const pending = members.filter((r) => r.data?.pending === true);
|
|
1423
|
+
if (pending.length === 0) continue;
|
|
1424
|
+
const [topicArn, host] = group.split("|");
|
|
1425
|
+
const unreachable = () => left.push(...pending.map((r) => String(r.data?.endpoint)));
|
|
1426
|
+
let connection;
|
|
1427
|
+
const connectionKey = members[0].data?.connectionKey;
|
|
1428
|
+
if (typeof connectionKey === "string") {
|
|
1429
|
+
const connectionString = input.secrets?.[connectionKey];
|
|
1430
|
+
if (!connectionString?.startsWith("sns:")) {
|
|
1431
|
+
unreachable();
|
|
1432
|
+
continue;
|
|
1433
|
+
}
|
|
1434
|
+
connection = await topicConnection({
|
|
1435
|
+
connectionKey,
|
|
1436
|
+
connectionString,
|
|
1437
|
+
stage: input.stage,
|
|
1438
|
+
env,
|
|
1439
|
+
...input.home ? { home: input.home } : {}
|
|
1440
|
+
});
|
|
1441
|
+
} else {
|
|
1442
|
+
if (provisioning === null) provisioning = await awsProvisioningCredentials({
|
|
1443
|
+
stage: input.stage,
|
|
1444
|
+
env,
|
|
1445
|
+
...input.home ? { home: input.home } : {}
|
|
1446
|
+
});
|
|
1447
|
+
if (!provisioning) {
|
|
1448
|
+
unreachable();
|
|
1449
|
+
continue;
|
|
1450
|
+
}
|
|
1451
|
+
const region = topicArn.split(":")[3];
|
|
1452
|
+
const { credentials } = await awsClientConfig(provisioning, region);
|
|
1453
|
+
connection = new SNSConnection({
|
|
1454
|
+
topicArn,
|
|
1455
|
+
region,
|
|
1456
|
+
...endpoint ? { endpoint } : {},
|
|
1457
|
+
...credentials ? { credentials } : {}
|
|
1458
|
+
});
|
|
1459
|
+
}
|
|
1460
|
+
await reconcileHttpSubscriptions(connection, {
|
|
1461
|
+
endpoints: members.map(specOf),
|
|
1462
|
+
ownedHost: host
|
|
1463
|
+
});
|
|
1464
|
+
const deadline = Date.now() + (input.timeoutMs ?? 6e4);
|
|
1465
|
+
for (const record of pending) {
|
|
1466
|
+
let confirmed = false;
|
|
1467
|
+
while (!confirmed) {
|
|
1468
|
+
const { Attributes = {} } = await connection.snsClient.send(new GetSubscriptionAttributesCommand({ SubscriptionArn: record.id }));
|
|
1469
|
+
confirmed = Attributes.PendingConfirmation !== "true";
|
|
1470
|
+
if (confirmed || Date.now() > deadline) break;
|
|
1471
|
+
await new Promise((resolve) => setTimeout(resolve, 1e3));
|
|
1472
|
+
}
|
|
1473
|
+
if (confirmed) {
|
|
1474
|
+
input.log?.(` ✓ ${record.data?.endpoint} confirmed its subscription`);
|
|
1475
|
+
await input.record?.({
|
|
1476
|
+
...record,
|
|
1477
|
+
data: {
|
|
1478
|
+
...record.data,
|
|
1479
|
+
pending: false
|
|
1480
|
+
}
|
|
1481
|
+
});
|
|
1482
|
+
} else left.push(String(record.data?.endpoint));
|
|
1483
|
+
}
|
|
1484
|
+
await connection.close();
|
|
1485
|
+
}
|
|
1486
|
+
return left;
|
|
1487
|
+
}
|
|
1488
|
+
//#endregion
|
|
1062
1489
|
Object.defineProperty(exports, "BACKUPS_SERVICE", {
|
|
1063
1490
|
enumerable: true,
|
|
1064
1491
|
get: function() {
|
|
@@ -1077,12 +1504,48 @@ Object.defineProperty(exports, "HostNotPointingAtServer", {
|
|
|
1077
1504
|
return HostNotPointingAtServer;
|
|
1078
1505
|
}
|
|
1079
1506
|
});
|
|
1507
|
+
Object.defineProperty(exports, "PushSubscriptionsUnconfirmed", {
|
|
1508
|
+
enumerable: true,
|
|
1509
|
+
get: function() {
|
|
1510
|
+
return PushSubscriptionsUnconfirmed;
|
|
1511
|
+
}
|
|
1512
|
+
});
|
|
1080
1513
|
Object.defineProperty(exports, "RUNNER_PATH", {
|
|
1081
1514
|
enumerable: true,
|
|
1082
1515
|
get: function() {
|
|
1083
1516
|
return RUNNER_PATH;
|
|
1084
1517
|
}
|
|
1085
1518
|
});
|
|
1519
|
+
Object.defineProperty(exports, "SUBSCRIPTION_TYPE", {
|
|
1520
|
+
enumerable: true,
|
|
1521
|
+
get: function() {
|
|
1522
|
+
return SUBSCRIPTION_TYPE;
|
|
1523
|
+
}
|
|
1524
|
+
});
|
|
1525
|
+
Object.defineProperty(exports, "assertSitePasswordTarget", {
|
|
1526
|
+
enumerable: true,
|
|
1527
|
+
get: function() {
|
|
1528
|
+
return assertSitePasswordTarget;
|
|
1529
|
+
}
|
|
1530
|
+
});
|
|
1531
|
+
Object.defineProperty(exports, "awsClientConfig", {
|
|
1532
|
+
enumerable: true,
|
|
1533
|
+
get: function() {
|
|
1534
|
+
return awsClientConfig;
|
|
1535
|
+
}
|
|
1536
|
+
});
|
|
1537
|
+
Object.defineProperty(exports, "awsEndpoint", {
|
|
1538
|
+
enumerable: true,
|
|
1539
|
+
get: function() {
|
|
1540
|
+
return awsEndpoint;
|
|
1541
|
+
}
|
|
1542
|
+
});
|
|
1543
|
+
Object.defineProperty(exports, "awsProvisioningCredentials", {
|
|
1544
|
+
enumerable: true,
|
|
1545
|
+
get: function() {
|
|
1546
|
+
return awsProvisioningCredentials;
|
|
1547
|
+
}
|
|
1548
|
+
});
|
|
1086
1549
|
Object.defineProperty(exports, "backupDatabases", {
|
|
1087
1550
|
enumerable: true,
|
|
1088
1551
|
get: function() {
|
|
@@ -1119,6 +1582,12 @@ Object.defineProperty(exports, "backupsService", {
|
|
|
1119
1582
|
return backupsService;
|
|
1120
1583
|
}
|
|
1121
1584
|
});
|
|
1585
|
+
Object.defineProperty(exports, "confirmPendingSubscriptions", {
|
|
1586
|
+
enumerable: true,
|
|
1587
|
+
get: function() {
|
|
1588
|
+
return confirmPendingSubscriptions;
|
|
1589
|
+
}
|
|
1590
|
+
});
|
|
1122
1591
|
Object.defineProperty(exports, "deploysWithCompose", {
|
|
1123
1592
|
enumerable: true,
|
|
1124
1593
|
get: function() {
|
|
@@ -1137,6 +1606,18 @@ Object.defineProperty(exports, "isLocalHost", {
|
|
|
1137
1606
|
return isLocalHost;
|
|
1138
1607
|
}
|
|
1139
1608
|
});
|
|
1609
|
+
Object.defineProperty(exports, "passwordSites", {
|
|
1610
|
+
enumerable: true,
|
|
1611
|
+
get: function() {
|
|
1612
|
+
return passwordSites;
|
|
1613
|
+
}
|
|
1614
|
+
});
|
|
1615
|
+
Object.defineProperty(exports, "recordedPushSubscriptions", {
|
|
1616
|
+
enumerable: true,
|
|
1617
|
+
get: function() {
|
|
1618
|
+
return recordedPushSubscriptions;
|
|
1619
|
+
}
|
|
1620
|
+
});
|
|
1140
1621
|
Object.defineProperty(exports, "requiredServerAddress", {
|
|
1141
1622
|
enumerable: true,
|
|
1142
1623
|
get: function() {
|
|
@@ -1155,6 +1636,18 @@ Object.defineProperty(exports, "serverAddressHint", {
|
|
|
1155
1636
|
return serverAddressHint;
|
|
1156
1637
|
}
|
|
1157
1638
|
});
|
|
1639
|
+
Object.defineProperty(exports, "siteAuth", {
|
|
1640
|
+
enumerable: true,
|
|
1641
|
+
get: function() {
|
|
1642
|
+
return siteAuth;
|
|
1643
|
+
}
|
|
1644
|
+
});
|
|
1645
|
+
Object.defineProperty(exports, "siteNames", {
|
|
1646
|
+
enumerable: true,
|
|
1647
|
+
get: function() {
|
|
1648
|
+
return siteNames;
|
|
1649
|
+
}
|
|
1650
|
+
});
|
|
1158
1651
|
Object.defineProperty(exports, "stackBackups", {
|
|
1159
1652
|
enumerable: true,
|
|
1160
1653
|
get: function() {
|
|
@@ -1185,11 +1678,35 @@ Object.defineProperty(exports, "stageDnsDomains", {
|
|
|
1185
1678
|
return stageDnsDomains;
|
|
1186
1679
|
}
|
|
1187
1680
|
});
|
|
1681
|
+
Object.defineProperty(exports, "subscriptionKey", {
|
|
1682
|
+
enumerable: true,
|
|
1683
|
+
get: function() {
|
|
1684
|
+
return subscriptionKey;
|
|
1685
|
+
}
|
|
1686
|
+
});
|
|
1687
|
+
Object.defineProperty(exports, "subscriptionResource", {
|
|
1688
|
+
enumerable: true,
|
|
1689
|
+
get: function() {
|
|
1690
|
+
return subscriptionResource;
|
|
1691
|
+
}
|
|
1692
|
+
});
|
|
1188
1693
|
Object.defineProperty(exports, "systemLookup", {
|
|
1189
1694
|
enumerable: true,
|
|
1190
1695
|
get: function() {
|
|
1191
1696
|
return systemLookup;
|
|
1192
1697
|
}
|
|
1193
1698
|
});
|
|
1699
|
+
Object.defineProperty(exports, "topicConnection", {
|
|
1700
|
+
enumerable: true,
|
|
1701
|
+
get: function() {
|
|
1702
|
+
return topicConnection;
|
|
1703
|
+
}
|
|
1704
|
+
});
|
|
1705
|
+
Object.defineProperty(exports, "withSitePasswords", {
|
|
1706
|
+
enumerable: true,
|
|
1707
|
+
get: function() {
|
|
1708
|
+
return withSitePasswords;
|
|
1709
|
+
}
|
|
1710
|
+
});
|
|
1194
1711
|
|
|
1195
|
-
//# sourceMappingURL=
|
|
1712
|
+
//# sourceMappingURL=snsSubscriptions-CSkteK2J.cjs.map
|