@geekmidas/cli 9.0.2 → 10.0.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +71 -120
- package/dist/{CachedStateProvider-BdX7klRc.cjs → CachedStateProvider-BLo7zv7S.cjs} +1 -1
- package/dist/CachedStateProvider-BxoAm-B2.mjs +3 -0
- package/dist/{CachedStateProvider-klLWZXWF.cjs → CachedStateProvider-CqPdW7CB.cjs} +1 -1
- package/dist/{CachedStateProvider-klLWZXWF.cjs.map → CachedStateProvider-CqPdW7CB.cjs.map} +1 -1
- package/dist/{CachedStateProvider-CzyFct42.mjs → CachedStateProvider-DTniehMP.mjs} +1 -1
- package/dist/{CachedStateProvider-CzyFct42.mjs.map → CachedStateProvider-DTniehMP.mjs.map} +1 -1
- package/dist/{HostingerProvider-B2ZYz7Yc.mjs → HostingerProvider-Cft7lEYr.mjs} +4 -3
- package/dist/HostingerProvider-Cft7lEYr.mjs.map +1 -0
- package/dist/{HostingerProvider-CrHfsgz9.cjs → HostingerProvider-h3EbEp-Z.cjs} +4 -3
- package/dist/HostingerProvider-h3EbEp-Z.cjs.map +1 -0
- package/dist/{LocalStateProvider-CP49rjzt.mjs → LocalStateProvider-Bn6tS-oL.mjs} +1 -1
- package/dist/{LocalStateProvider-CP49rjzt.mjs.map → LocalStateProvider-Bn6tS-oL.mjs.map} +1 -1
- package/dist/{LocalStateProvider-CalzNfNA.cjs → LocalStateProvider-Db9SEjyH.cjs} +1 -1
- package/dist/{LocalStateProvider-CalzNfNA.cjs.map → LocalStateProvider-Db9SEjyH.cjs.map} +1 -1
- package/dist/{Route53Provider-tlgBzrRQ.mjs → Route53Provider-RdpUDJQk.mjs} +1 -1
- package/dist/{Route53Provider-tlgBzrRQ.mjs.map → Route53Provider-RdpUDJQk.mjs.map} +1 -1
- package/dist/{Route53Provider-DwgXiLxt.cjs → Route53Provider-di2fMM5N.cjs} +1 -1
- package/dist/{Route53Provider-DwgXiLxt.cjs.map → Route53Provider-di2fMM5N.cjs.map} +1 -1
- package/dist/{SSMStateProvider-BlrTiV5m.mjs → SSMStateProvider-BRt2py-A.mjs} +1 -1
- package/dist/{SSMStateProvider-BlrTiV5m.mjs.map → SSMStateProvider-BRt2py-A.mjs.map} +1 -1
- package/dist/{SSMStateProvider-Bt6r8CTL.cjs → SSMStateProvider-DyX8s9HI.cjs} +1 -1
- package/dist/{SSMStateProvider-Bt6r8CTL.cjs.map → SSMStateProvider-DyX8s9HI.cjs.map} +1 -1
- package/dist/{backup-provisioner-Xunq-p_8.mjs → backup-provisioner-Bgj5Vi_L.mjs} +2 -2
- package/dist/{backup-provisioner-Xunq-p_8.mjs.map → backup-provisioner-Bgj5Vi_L.mjs.map} +1 -1
- package/dist/{backup-provisioner-B3HBN-2k.cjs → backup-provisioner-BrsHwYG0.cjs} +2 -2
- package/dist/{backup-provisioner-B3HBN-2k.cjs.map → backup-provisioner-BrsHwYG0.cjs.map} +1 -1
- package/dist/{bundler-Dufq3uvI.cjs → bundler-BY1OmV1e.cjs} +44 -14
- package/dist/bundler-BY1OmV1e.cjs.map +1 -0
- package/dist/{bundler-DkA4qzUD.mjs → bundler-Be8Zg4Wd.mjs} +45 -15
- package/dist/bundler-Be8Zg4Wd.mjs.map +1 -0
- package/dist/config-D8o6I_7Z.mjs +469 -0
- package/dist/config-D8o6I_7Z.mjs.map +1 -0
- package/dist/config-DbPE1KXF.cjs +535 -0
- package/dist/config-DbPE1KXF.cjs.map +1 -0
- package/dist/config.cjs +3 -2
- package/dist/config.d.cts +2 -2
- package/dist/config.d.cts.map +1 -1
- package/dist/config.d.mts +2 -2
- package/dist/config.d.mts.map +1 -1
- package/dist/config.mjs +3 -2
- package/dist/{credentials-s1kLcIzK.mjs → credentials-B5zRHdAl.mjs} +21 -6
- package/dist/credentials-B5zRHdAl.mjs.map +1 -0
- package/dist/{credentials-C8DWtnMY.cjs → credentials-BapzjyV5.cjs} +26 -5
- package/dist/credentials-BapzjyV5.cjs.map +1 -0
- package/dist/credentials-Dh0Q6HzY.mjs +2548 -0
- package/dist/credentials-Dh0Q6HzY.mjs.map +1 -0
- package/dist/credentials-K961ThG3.cjs +2680 -0
- package/dist/credentials-K961ThG3.cjs.map +1 -0
- package/dist/deploy/sniffer-routes-worker.cjs +6 -2
- package/dist/deploy/sniffer-routes-worker.cjs.map +1 -1
- package/dist/deploy/sniffer-routes-worker.mjs +6 -2
- package/dist/deploy/sniffer-routes-worker.mjs.map +1 -1
- package/dist/discover-CAlFgYec.mjs +229 -0
- package/dist/discover-CAlFgYec.mjs.map +1 -0
- package/dist/discover-DTmFeloL.cjs +271 -0
- package/dist/discover-DTmFeloL.cjs.map +1 -0
- package/dist/dokploy-api-BS2xnJLZ.mjs +3 -0
- package/dist/{dokploy-api-CqOIKHme.cjs → dokploy-api-BsVH0y_s.cjs} +141 -32
- package/dist/dokploy-api-BsVH0y_s.cjs.map +1 -0
- package/dist/dokploy-api-BuxDRo3l.cjs +3 -0
- package/dist/{dokploy-api-sfZFlWuE.mjs → dokploy-api-aTFPz7_4.mjs} +141 -32
- package/dist/dokploy-api-aTFPz7_4.mjs.map +1 -0
- package/dist/emit-CbcRolsa.cjs +236 -0
- package/dist/emit-CbcRolsa.cjs.map +1 -0
- package/dist/emit-CiZS_5Ub.mjs +206 -0
- package/dist/emit-CiZS_5Ub.mjs.map +1 -0
- package/dist/{encryption-MfXAiFTm.cjs → encryption-C6jaU0hE.cjs} +1 -1
- package/dist/{encryption-MfXAiFTm.cjs.map → encryption-C6jaU0hE.cjs.map} +1 -1
- package/dist/{encryption-BVS7Vmzs.cjs → encryption-CHzzeR8a.cjs} +1 -1
- package/dist/encryption-CQUncu7v.mjs +3 -0
- package/dist/{encryption-CO5Q4Bhf.mjs → encryption-D-abyhZx.mjs} +1 -1
- package/dist/{encryption-CO5Q4Bhf.mjs.map → encryption-D-abyhZx.mjs.map} +1 -1
- package/dist/fullstack-secrets-C-GGohke.cjs +111 -0
- package/dist/fullstack-secrets-C-GGohke.cjs.map +1 -0
- package/dist/fullstack-secrets-D1o9-G5l.mjs +87 -0
- package/dist/fullstack-secrets-D1o9-G5l.mjs.map +1 -0
- package/dist/{fullstack-secrets-BYzi6Hwl.cjs → generator-CNzBw7g5.cjs} +1 -114
- package/dist/generator-CNzBw7g5.cjs.map +1 -0
- package/dist/{fullstack-secrets-l8s3II_H.mjs → generator-VE2JrFlY.mjs} +2 -85
- package/dist/generator-VE2JrFlY.mjs.map +1 -0
- package/dist/index-BThUzEIp.d.mts +175 -0
- package/dist/index-BThUzEIp.d.mts.map +1 -0
- package/dist/index-CHB4tSzX.d.cts +175 -0
- package/dist/index-CHB4tSzX.d.cts.map +1 -0
- package/dist/index.cjs +2329 -1584
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +2306 -1561
- package/dist/index.mjs.map +1 -1
- package/dist/{openapi-Cfwi0fqF.mjs → openapi-CgpMWMmM.mjs} +174 -95
- package/dist/openapi-CgpMWMmM.mjs.map +1 -0
- package/dist/{openapi-BzNOC7_i.cjs → openapi-CljONd_M.cjs} +175 -108
- package/dist/openapi-CljONd_M.cjs.map +1 -0
- package/dist/{openapi-react-query-C4iIvpPf.mjs → openapi-react-query-Byltvm_7.mjs} +2 -2
- package/dist/openapi-react-query-Byltvm_7.mjs.map +1 -0
- package/dist/{openapi-react-query-CYWik72n.cjs → openapi-react-query-CmJ1xDbn.cjs} +2 -2
- package/dist/openapi-react-query-CmJ1xDbn.cjs.map +1 -0
- package/dist/openapi-react-query.cjs +1 -1
- package/dist/openapi-react-query.mjs +1 -1
- package/dist/openapi.cjs +4 -3
- package/dist/openapi.d.cts +1 -1
- package/dist/openapi.d.mts +1 -1
- package/dist/openapi.mjs +4 -3
- package/dist/reconcile/public.cjs +9 -0
- package/dist/reconcile/public.d.cts +125 -0
- package/dist/reconcile/public.d.cts.map +1 -0
- package/dist/reconcile/public.d.mts +125 -0
- package/dist/reconcile/public.d.mts.map +1 -0
- package/dist/reconcile/public.mjs +4 -0
- package/dist/{reconcile-B2FoJE0a.mjs → reconcile-CFs8C_1a.mjs} +5 -4
- package/dist/reconcile-CFs8C_1a.mjs.map +1 -0
- package/dist/{reconcile-BzqKJ2Rt.cjs → reconcile-D0pimNiy.cjs} +5 -4
- package/dist/reconcile-D0pimNiy.cjs.map +1 -0
- package/dist/setup-CJiQM2pX.cjs +473 -0
- package/dist/setup-CJiQM2pX.cjs.map +1 -0
- package/dist/setup-DMtU3p41.cjs +11 -0
- package/dist/setup-DOsYueeQ.mjs +443 -0
- package/dist/setup-DOsYueeQ.mjs.map +1 -0
- package/dist/setup-DSutDAlt.mjs +11 -0
- package/dist/{storage-B1wvztiJ.cjs → storage-BJmzYxt8.cjs} +1 -1
- package/dist/{storage-B1wvztiJ.cjs.map → storage-BJmzYxt8.cjs.map} +1 -1
- package/dist/{storage-DOEtT2Hr.cjs → storage-BM9hGpgv.cjs} +1 -1
- package/dist/{storage-dbb9RyBl.mjs → storage-Bi24WfoW.mjs} +1 -1
- package/dist/{storage-dbb9RyBl.mjs.map → storage-Bi24WfoW.mjs.map} +1 -1
- package/dist/{storage-Cs4WBsc4.mjs → storage-CYlGwWTj.mjs} +1 -1
- package/dist/{sync-CSooqRQ8.mjs → sync-CmEuNZsB.mjs} +2 -2
- package/dist/{sync-CSooqRQ8.mjs.map → sync-CmEuNZsB.mjs.map} +1 -1
- package/dist/sync-D306yOWu.cjs +4 -0
- package/dist/{sync-o_CtEbvR.cjs → sync-SizaChmC.cjs} +2 -2
- package/dist/{sync-o_CtEbvR.cjs.map → sync-SizaChmC.cjs.map} +1 -1
- package/dist/{sync-B5UHXwRM.mjs → sync-hOqAWHR6.mjs} +1 -1
- package/dist/{index-Bw548Bta.d.mts → types-C-arnQ1r.d.mts} +590 -143
- package/dist/types-C-arnQ1r.d.mts.map +1 -0
- package/dist/{index-DTpkeFb8.d.cts → types-abJQuk7m.d.cts} +590 -143
- package/dist/types-abJQuk7m.d.cts.map +1 -0
- package/dist/workspace/index.cjs +5 -1
- package/dist/workspace/index.d.cts +3 -3
- package/dist/workspace/index.d.mts +3 -3
- package/dist/workspace/index.mjs +2 -2
- package/dist/{workspace-D-37Ylqo.mjs → workspace-7FqprxuJ.mjs} +117 -30
- package/dist/workspace-7FqprxuJ.mjs.map +1 -0
- package/dist/workspace-8acupeaI.cjs +9 -0
- package/dist/{workspace-CQTT7HJQ.cjs → workspace-XvqO9jIv.cjs} +139 -28
- package/dist/workspace-XvqO9jIv.cjs.map +1 -0
- package/dist/workspace-yP5AHnrn.mjs +8 -0
- package/package.json +26 -9
- package/CHANGELOG.md +0 -650
- package/FUNCTION_CRON_SUPPORT.md +0 -266
- package/dist/CachedStateProvider-GcGziXh1.mjs +0 -3
- package/dist/HostingerProvider-B2ZYz7Yc.mjs.map +0 -1
- package/dist/HostingerProvider-CrHfsgz9.cjs.map +0 -1
- package/dist/bundler-DkA4qzUD.mjs.map +0 -1
- package/dist/bundler-Dufq3uvI.cjs.map +0 -1
- package/dist/config-Bbu1JKvf.mjs +0 -211
- package/dist/config-Bbu1JKvf.mjs.map +0 -1
- package/dist/config-DujV8DbR.cjs +0 -253
- package/dist/config-DujV8DbR.cjs.map +0 -1
- package/dist/credentials-C8DWtnMY.cjs.map +0 -1
- package/dist/credentials-s1kLcIzK.mjs.map +0 -1
- package/dist/dokploy-api-BPYkG-ZZ.cjs +0 -3
- package/dist/dokploy-api-BiSzWM4v.mjs +0 -3
- package/dist/dokploy-api-CqOIKHme.cjs.map +0 -1
- package/dist/dokploy-api-sfZFlWuE.mjs.map +0 -1
- package/dist/encryption-Bd_m4q3g.mjs +0 -3
- package/dist/fullstack-secrets-BYzi6Hwl.cjs.map +0 -1
- package/dist/fullstack-secrets-l8s3II_H.mjs.map +0 -1
- package/dist/index-Bw548Bta.d.mts.map +0 -1
- package/dist/index-DTpkeFb8.d.cts.map +0 -1
- package/dist/openapi-BzNOC7_i.cjs.map +0 -1
- package/dist/openapi-Cfwi0fqF.mjs.map +0 -1
- package/dist/openapi-react-query-C4iIvpPf.mjs.map +0 -1
- package/dist/openapi-react-query-CYWik72n.cjs.map +0 -1
- package/dist/reconcile-B2FoJE0a.mjs.map +0 -1
- package/dist/reconcile-BzqKJ2Rt.cjs.map +0 -1
- package/dist/setup-DDXUXzzl.mjs +0 -765
- package/dist/setup-DDXUXzzl.mjs.map +0 -1
- package/dist/setup-DLwhfyt-.cjs +0 -8
- package/dist/setup-Dh-B7YTX.mjs +0 -8
- package/dist/setup-WZ-xqAQO.cjs +0 -849
- package/dist/setup-WZ-xqAQO.cjs.map +0 -1
- package/dist/sync-BLA94rgC.cjs +0 -4
- package/dist/types-B3GQUg3k.d.mts +0 -280
- package/dist/types-B3GQUg3k.d.mts.map +0 -1
- package/dist/types-BWQDiooe.d.cts +0 -280
- package/dist/types-BWQDiooe.d.cts.map +0 -1
- package/dist/workspace-CQTT7HJQ.cjs.map +0 -1
- package/dist/workspace-D-37Ylqo.mjs.map +0 -1
- package/docs/OPENAPI_TYPESCRIPT_DESIGN.md +0 -408
- package/docs/dev-server-resilience-design.md +0 -189
- package/docs/manifest-refactor-design.md +0 -287
- package/examples/cron-example.ts +0 -45
- package/examples/env.ts +0 -33
- package/examples/function-example.ts +0 -40
- package/examples/gkm.config.json +0 -22
- package/examples/gkm.config.ts +0 -14
- package/examples/gkm.minimal.config.json +0 -7
- package/examples/gkm.production.config.json +0 -27
- package/examples/logger.ts +0 -10
- package/scripts/sync-versions.ts +0 -108
- package/src/__tests__/EndpointGenerator.hooks.spec.ts +0 -204
- package/src/__tests__/config.spec.ts +0 -422
- package/src/__tests__/loadEnvFiles.spec.ts +0 -131
- package/src/__tests__/normalizeHooksConfig.spec.ts +0 -63
- package/src/__tests__/openapi-react-query.spec.ts +0 -506
- package/src/__tests__/openapi.spec.ts +0 -625
- package/src/__tests__/test-helpers.ts +0 -181
- package/src/auth/__tests__/credentials.spec.ts +0 -331
- package/src/auth/__tests__/index.spec.ts +0 -237
- package/src/auth/credentials.ts +0 -286
- package/src/auth/index.ts +0 -233
- package/src/build/__tests__/bundler.spec.ts +0 -446
- package/src/build/__tests__/endpoint-analyzer.spec.ts +0 -623
- package/src/build/__tests__/handler-templates.spec.ts +0 -1287
- package/src/build/__tests__/index-new.spec.ts +0 -550
- package/src/build/__tests__/manifests.spec.ts +0 -583
- package/src/build/__tests__/partitions.spec.ts +0 -110
- package/src/build/__tests__/workspace-build.spec.ts +0 -215
- package/src/build/bundler.ts +0 -256
- package/src/build/endpoint-analyzer.ts +0 -236
- package/src/build/handler-templates.ts +0 -1253
- package/src/build/index.ts +0 -616
- package/src/build/manifests.ts +0 -285
- package/src/build/partitions.ts +0 -58
- package/src/build/providerResolver.ts +0 -184
- package/src/build/types.ts +0 -104
- package/src/config.ts +0 -330
- package/src/credentials/__tests__/fullDockerPorts.spec.ts +0 -144
- package/src/credentials/__tests__/helpers.ts +0 -112
- package/src/credentials/__tests__/prepareEntryCredentials.spec.ts +0 -125
- package/src/credentials/__tests__/readonlyDockerPorts.spec.ts +0 -190
- package/src/credentials/__tests__/workspaceCredentials.spec.ts +0 -209
- package/src/credentials/index.ts +0 -843
- package/src/debug.ts +0 -68
- package/src/deploy/CachedStateProvider.ts +0 -86
- package/src/deploy/LocalStateProvider.ts +0 -57
- package/src/deploy/SSMStateProvider.ts +0 -117
- package/src/deploy/StateProvider.ts +0 -175
- package/src/deploy/__tests__/CachedStateProvider.spec.ts +0 -235
- package/src/deploy/__tests__/HostingerProvider.spec.ts +0 -347
- package/src/deploy/__tests__/LocalStateProvider.spec.ts +0 -130
- package/src/deploy/__tests__/Route53Provider.spec.ts +0 -425
- package/src/deploy/__tests__/SSMStateProvider.spec.ts +0 -201
- package/src/deploy/__tests__/__fixtures__/entry-apps/async-entry.ts +0 -24
- package/src/deploy/__tests__/__fixtures__/entry-apps/nested-config-entry.ts +0 -24
- package/src/deploy/__tests__/__fixtures__/entry-apps/no-env-entry.ts +0 -12
- package/src/deploy/__tests__/__fixtures__/entry-apps/simple-entry.ts +0 -14
- package/src/deploy/__tests__/__fixtures__/entry-apps/throwing-entry.ts +0 -16
- package/src/deploy/__tests__/__fixtures__/env-parsers/non-function-export.ts +0 -10
- package/src/deploy/__tests__/__fixtures__/env-parsers/optional-env-parser.ts +0 -21
- package/src/deploy/__tests__/__fixtures__/env-parsers/parseable-env-parser.ts +0 -18
- package/src/deploy/__tests__/__fixtures__/env-parsers/throwing-env-parser.ts +0 -16
- package/src/deploy/__tests__/__fixtures__/env-parsers/valid-env-parser.ts +0 -16
- package/src/deploy/__tests__/__fixtures__/route-apps/endpoints/auth.ts +0 -16
- package/src/deploy/__tests__/__fixtures__/route-apps/endpoints/health.ts +0 -13
- package/src/deploy/__tests__/__fixtures__/route-apps/endpoints/users.ts +0 -15
- package/src/deploy/__tests__/__fixtures__/route-apps/services.ts +0 -55
- package/src/deploy/__tests__/backup-provisioner.spec.ts +0 -428
- package/src/deploy/__tests__/createDnsProvider.spec.ts +0 -195
- package/src/deploy/__tests__/createStateProvider.spec.ts +0 -126
- package/src/deploy/__tests__/dns-orchestration.spec.ts +0 -192
- package/src/deploy/__tests__/dns-verification.spec.ts +0 -229
- package/src/deploy/__tests__/docker.spec.ts +0 -149
- package/src/deploy/__tests__/dokploy-api.spec.ts +0 -697
- package/src/deploy/__tests__/dokploy.spec.ts +0 -435
- package/src/deploy/__tests__/domain.spec.ts +0 -235
- package/src/deploy/__tests__/env-resolver.spec.ts +0 -903
- package/src/deploy/__tests__/index.spec.ts +0 -1091
- package/src/deploy/__tests__/init.spec.ts +0 -793
- package/src/deploy/__tests__/secrets.spec.ts +0 -303
- package/src/deploy/__tests__/sniffer.spec.ts +0 -838
- package/src/deploy/__tests__/state-e2e.spec.ts +0 -387
- package/src/deploy/__tests__/state.spec.ts +0 -876
- package/src/deploy/__tests__/undeploy.spec.ts +0 -758
- package/src/deploy/backup-provisioner.ts +0 -316
- package/src/deploy/dns/DnsProvider.ts +0 -201
- package/src/deploy/dns/HostingerProvider.ts +0 -174
- package/src/deploy/dns/Route53Provider.ts +0 -340
- package/src/deploy/dns/hostinger-api.ts +0 -261
- package/src/deploy/dns/index.ts +0 -627
- package/src/deploy/docker.ts +0 -260
- package/src/deploy/dokploy-api.ts +0 -1101
- package/src/deploy/dokploy.ts +0 -177
- package/src/deploy/domain.ts +0 -134
- package/src/deploy/env-resolver.ts +0 -305
- package/src/deploy/index.ts +0 -2094
- package/src/deploy/init.ts +0 -427
- package/src/deploy/secrets.ts +0 -187
- package/src/deploy/sniffer-envkit-patch.ts +0 -61
- package/src/deploy/sniffer-hooks.ts +0 -57
- package/src/deploy/sniffer-loader.ts +0 -28
- package/src/deploy/sniffer-routes-worker.ts +0 -104
- package/src/deploy/sniffer-worker.ts +0 -75
- package/src/deploy/sniffer.ts +0 -578
- package/src/deploy/state-commands.ts +0 -274
- package/src/deploy/state.ts +0 -482
- package/src/deploy/types.ts +0 -102
- package/src/deploy/undeploy.ts +0 -407
- package/src/dev/__tests__/entry-integration.spec.ts +0 -347
- package/src/dev/__tests__/entry.spec.ts +0 -144
- package/src/dev/__tests__/index.spec.ts +0 -2084
- package/src/dev/index.ts +0 -1649
- package/src/docker/__tests__/compose.spec.ts +0 -1142
- package/src/docker/__tests__/templates.spec.ts +0 -694
- package/src/docker/compose.ts +0 -808
- package/src/docker/index.ts +0 -523
- package/src/docker/templates.ts +0 -1067
- package/src/exec/index.ts +0 -118
- package/src/generators/CronGenerator.ts +0 -105
- package/src/generators/EndpointGenerator.ts +0 -954
- package/src/generators/FunctionGenerator.ts +0 -117
- package/src/generators/Generator.ts +0 -147
- package/src/generators/OpenApiTsGenerator.ts +0 -821
- package/src/generators/QueueGenerator.ts +0 -245
- package/src/generators/SubscriberGenerator.ts +0 -282
- package/src/generators/TopicGenerator.ts +0 -45
- package/src/generators/__tests__/CronGenerator.spec.ts +0 -445
- package/src/generators/__tests__/EndpointGenerator.spec.ts +0 -544
- package/src/generators/__tests__/FunctionGenerator.spec.ts +0 -256
- package/src/generators/__tests__/Generator.bustCache.spec.ts +0 -72
- package/src/generators/__tests__/OpenApiTsGenerator.registry.spec.ts +0 -98
- package/src/generators/__tests__/OpenApiTsGenerator.responseType.spec.ts +0 -56
- package/src/generators/__tests__/QueueGenerator.spec.ts +0 -141
- package/src/generators/__tests__/SubscriberGenerator.spec.ts +0 -410
- package/src/generators/index.ts +0 -11
- package/src/index.ts +0 -972
- package/src/init/__tests__/generators.spec.ts +0 -1070
- package/src/init/__tests__/init.spec.ts +0 -577
- package/src/init/__tests__/utils.spec.ts +0 -104
- package/src/init/generators/auth.ts +0 -225
- package/src/init/generators/config.ts +0 -316
- package/src/init/generators/docker.ts +0 -388
- package/src/init/generators/env.ts +0 -62
- package/src/init/generators/index.ts +0 -6
- package/src/init/generators/mobile-expo.ts +0 -576
- package/src/init/generators/models.ts +0 -153
- package/src/init/generators/monorepo.ts +0 -475
- package/src/init/generators/package.ts +0 -95
- package/src/init/generators/source.ts +0 -15
- package/src/init/generators/test.ts +0 -178
- package/src/init/generators/ui.ts +0 -1473
- package/src/init/generators/web-tanstack.ts +0 -348
- package/src/init/generators/web.ts +0 -363
- package/src/init/index.ts +0 -542
- package/src/init/templates/api.ts +0 -404
- package/src/init/templates/index.ts +0 -342
- package/src/init/templates/minimal.ts +0 -207
- package/src/init/templates/serverless.ts +0 -148
- package/src/init/templates/worker.ts +0 -216
- package/src/init/utils.ts +0 -197
- package/src/init/versions.ts +0 -52
- package/src/openapi-react-query.ts +0 -288
- package/src/openapi.ts +0 -259
- package/src/secrets/__tests__/encryption.spec.ts +0 -226
- package/src/secrets/__tests__/generator.spec.ts +0 -575
- package/src/secrets/__tests__/index.spec.ts +0 -91
- package/src/secrets/__tests__/reconcile.spec.ts +0 -123
- package/src/secrets/__tests__/storage.spec.ts +0 -645
- package/src/secrets/encryption.ts +0 -91
- package/src/secrets/generator.ts +0 -329
- package/src/secrets/index.ts +0 -417
- package/src/secrets/keystore.ts +0 -144
- package/src/secrets/reconcile.ts +0 -53
- package/src/secrets/storage.ts +0 -337
- package/src/secrets/sync.ts +0 -136
- package/src/secrets/types.ts +0 -70
- package/src/setup/__tests__/auto-setup.spec.ts +0 -147
- package/src/setup/__tests__/reconcile-secrets.spec.ts +0 -439
- package/src/setup/fullstack-secrets.ts +0 -140
- package/src/setup/index.ts +0 -411
- package/src/test/__tests__/__fixtures__/workspace.ts +0 -104
- package/src/test/__tests__/api.spec.ts +0 -199
- package/src/test/__tests__/auth.spec.ts +0 -162
- package/src/test/__tests__/index.spec.ts +0 -502
- package/src/test/__tests__/web.spec.ts +0 -210
- package/src/test/index.ts +0 -198
- package/src/types.ts +0 -363
- package/src/upgrade/__tests__/index.spec.ts +0 -354
- package/src/upgrade/index.ts +0 -253
- package/src/workspace/__tests__/client-generator.spec.ts +0 -326
- package/src/workspace/__tests__/index.spec.ts +0 -766
- package/src/workspace/__tests__/publicEnv.spec.ts +0 -64
- package/src/workspace/__tests__/schema.spec.ts +0 -737
- package/src/workspace/__tests__/type-inference.spec.ts +0 -251
- package/src/workspace/client-generator.ts +0 -109
- package/src/workspace/index.ts +0 -433
- package/src/workspace/publicEnv.ts +0 -57
- package/src/workspace/schema.ts +0 -861
- package/src/workspace/types.ts +0 -943
- package/tsconfig.json +0 -9
- package/tsdown.config.ts +0 -22
|
@@ -1,425 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
ChangeResourceRecordSetsCommand,
|
|
3
|
-
CreateHostedZoneCommand,
|
|
4
|
-
DeleteHostedZoneCommand,
|
|
5
|
-
ListResourceRecordSetsCommand,
|
|
6
|
-
Route53Client,
|
|
7
|
-
} from '@aws-sdk/client-route-53';
|
|
8
|
-
import {
|
|
9
|
-
afterAll,
|
|
10
|
-
afterEach,
|
|
11
|
-
beforeAll,
|
|
12
|
-
beforeEach,
|
|
13
|
-
describe,
|
|
14
|
-
expect,
|
|
15
|
-
it,
|
|
16
|
-
} from 'vitest';
|
|
17
|
-
import { Route53Provider } from '../dns/Route53Provider';
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* Route53Provider Tests
|
|
21
|
-
*
|
|
22
|
-
* These tests require LocalStack to be running with Route53 enabled.
|
|
23
|
-
* Run: docker compose up -d localstack
|
|
24
|
-
*/
|
|
25
|
-
describe('Route53Provider', () => {
|
|
26
|
-
const LOCALSTACK_ENDPOINT = 'http://localhost:4566';
|
|
27
|
-
const TEST_DOMAIN = 'test-example.com';
|
|
28
|
-
let client: Route53Client;
|
|
29
|
-
let provider: Route53Provider;
|
|
30
|
-
let hostedZoneId: string;
|
|
31
|
-
|
|
32
|
-
beforeAll(async () => {
|
|
33
|
-
process.env.AWS_ACCESS_KEY_ID = 'test';
|
|
34
|
-
process.env.AWS_SECRET_ACCESS_KEY = 'test';
|
|
35
|
-
process.env.AWS_REGION = 'us-east-1';
|
|
36
|
-
|
|
37
|
-
client = new Route53Client({
|
|
38
|
-
region: 'us-east-1',
|
|
39
|
-
endpoint: LOCALSTACK_ENDPOINT,
|
|
40
|
-
credentials: {
|
|
41
|
-
accessKeyId: 'test',
|
|
42
|
-
secretAccessKey: 'test',
|
|
43
|
-
},
|
|
44
|
-
});
|
|
45
|
-
|
|
46
|
-
// Create a hosted zone for testing
|
|
47
|
-
const createResponse = await client.send(
|
|
48
|
-
new CreateHostedZoneCommand({
|
|
49
|
-
Name: TEST_DOMAIN,
|
|
50
|
-
CallerReference: `test-${Date.now()}`,
|
|
51
|
-
}),
|
|
52
|
-
);
|
|
53
|
-
|
|
54
|
-
hostedZoneId = createResponse.HostedZone!.Id!.replace('/hostedzone/', '');
|
|
55
|
-
});
|
|
56
|
-
|
|
57
|
-
beforeEach(() => {
|
|
58
|
-
provider = new Route53Provider({
|
|
59
|
-
endpoint: LOCALSTACK_ENDPOINT,
|
|
60
|
-
hostedZoneId,
|
|
61
|
-
});
|
|
62
|
-
});
|
|
63
|
-
|
|
64
|
-
afterEach(async () => {
|
|
65
|
-
// Clean up any test records (excluding NS and SOA which are auto-created)
|
|
66
|
-
try {
|
|
67
|
-
const response = await client.send(
|
|
68
|
-
new ListResourceRecordSetsCommand({
|
|
69
|
-
HostedZoneId: hostedZoneId,
|
|
70
|
-
}),
|
|
71
|
-
);
|
|
72
|
-
|
|
73
|
-
const recordsToDelete = (response.ResourceRecordSets ?? []).filter(
|
|
74
|
-
(record) => record.Type !== 'NS' && record.Type !== 'SOA',
|
|
75
|
-
);
|
|
76
|
-
|
|
77
|
-
if (recordsToDelete.length > 0) {
|
|
78
|
-
await client.send(
|
|
79
|
-
new ChangeResourceRecordSetsCommand({
|
|
80
|
-
HostedZoneId: hostedZoneId,
|
|
81
|
-
ChangeBatch: {
|
|
82
|
-
Changes: recordsToDelete.map((record) => ({
|
|
83
|
-
Action: 'DELETE',
|
|
84
|
-
ResourceRecordSet: record,
|
|
85
|
-
})),
|
|
86
|
-
},
|
|
87
|
-
}),
|
|
88
|
-
);
|
|
89
|
-
}
|
|
90
|
-
} catch {
|
|
91
|
-
// Ignore errors during cleanup
|
|
92
|
-
}
|
|
93
|
-
});
|
|
94
|
-
|
|
95
|
-
afterAll(async () => {
|
|
96
|
-
// Delete the hosted zone - need to remove all non-default records first
|
|
97
|
-
try {
|
|
98
|
-
const response = await client.send(
|
|
99
|
-
new ListResourceRecordSetsCommand({
|
|
100
|
-
HostedZoneId: hostedZoneId,
|
|
101
|
-
}),
|
|
102
|
-
);
|
|
103
|
-
|
|
104
|
-
const recordsToDelete = (response.ResourceRecordSets ?? []).filter(
|
|
105
|
-
(record) => record.Type !== 'NS' && record.Type !== 'SOA',
|
|
106
|
-
);
|
|
107
|
-
|
|
108
|
-
if (recordsToDelete.length > 0) {
|
|
109
|
-
await client.send(
|
|
110
|
-
new ChangeResourceRecordSetsCommand({
|
|
111
|
-
HostedZoneId: hostedZoneId,
|
|
112
|
-
ChangeBatch: {
|
|
113
|
-
Changes: recordsToDelete.map((record) => ({
|
|
114
|
-
Action: 'DELETE',
|
|
115
|
-
ResourceRecordSet: record,
|
|
116
|
-
})),
|
|
117
|
-
},
|
|
118
|
-
}),
|
|
119
|
-
);
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
await client.send(
|
|
123
|
-
new DeleteHostedZoneCommand({
|
|
124
|
-
Id: hostedZoneId,
|
|
125
|
-
}),
|
|
126
|
-
);
|
|
127
|
-
} catch {
|
|
128
|
-
// Ignore cleanup errors
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
client.destroy();
|
|
132
|
-
});
|
|
133
|
-
|
|
134
|
-
describe('name', () => {
|
|
135
|
-
it('should have name "route53"', () => {
|
|
136
|
-
expect(provider.name).toBe('route53');
|
|
137
|
-
});
|
|
138
|
-
});
|
|
139
|
-
|
|
140
|
-
describe('getRecords', () => {
|
|
141
|
-
it('should return empty array for domain with no custom records', async () => {
|
|
142
|
-
const records = await provider.getRecords(TEST_DOMAIN);
|
|
143
|
-
|
|
144
|
-
// Should be empty - NS and SOA are filtered out
|
|
145
|
-
expect(records).toEqual([]);
|
|
146
|
-
});
|
|
147
|
-
|
|
148
|
-
it('should return A records', async () => {
|
|
149
|
-
// Create a test record (use UPSERT to handle idempotency)
|
|
150
|
-
await client.send(
|
|
151
|
-
new ChangeResourceRecordSetsCommand({
|
|
152
|
-
HostedZoneId: hostedZoneId,
|
|
153
|
-
ChangeBatch: {
|
|
154
|
-
Changes: [
|
|
155
|
-
{
|
|
156
|
-
Action: 'UPSERT',
|
|
157
|
-
ResourceRecordSet: {
|
|
158
|
-
Name: `api.${TEST_DOMAIN}`,
|
|
159
|
-
Type: 'A',
|
|
160
|
-
TTL: 300,
|
|
161
|
-
ResourceRecords: [{ Value: '1.2.3.4' }],
|
|
162
|
-
},
|
|
163
|
-
},
|
|
164
|
-
],
|
|
165
|
-
},
|
|
166
|
-
}),
|
|
167
|
-
);
|
|
168
|
-
|
|
169
|
-
const records = await provider.getRecords(TEST_DOMAIN);
|
|
170
|
-
|
|
171
|
-
expect(records).toHaveLength(1);
|
|
172
|
-
expect(records[0]).toEqual({
|
|
173
|
-
name: 'api',
|
|
174
|
-
type: 'A',
|
|
175
|
-
ttl: 300,
|
|
176
|
-
values: ['1.2.3.4'],
|
|
177
|
-
});
|
|
178
|
-
});
|
|
179
|
-
|
|
180
|
-
it('should handle root domain records (@)', async () => {
|
|
181
|
-
// Create a root domain record (use UPSERT to handle idempotency)
|
|
182
|
-
await client.send(
|
|
183
|
-
new ChangeResourceRecordSetsCommand({
|
|
184
|
-
HostedZoneId: hostedZoneId,
|
|
185
|
-
ChangeBatch: {
|
|
186
|
-
Changes: [
|
|
187
|
-
{
|
|
188
|
-
Action: 'UPSERT',
|
|
189
|
-
ResourceRecordSet: {
|
|
190
|
-
Name: TEST_DOMAIN,
|
|
191
|
-
Type: 'A',
|
|
192
|
-
TTL: 300,
|
|
193
|
-
ResourceRecords: [{ Value: '1.2.3.4' }],
|
|
194
|
-
},
|
|
195
|
-
},
|
|
196
|
-
],
|
|
197
|
-
},
|
|
198
|
-
}),
|
|
199
|
-
);
|
|
200
|
-
|
|
201
|
-
const records = await provider.getRecords(TEST_DOMAIN);
|
|
202
|
-
|
|
203
|
-
expect(records).toHaveLength(1);
|
|
204
|
-
expect(records[0]?.name).toBe('@');
|
|
205
|
-
});
|
|
206
|
-
|
|
207
|
-
it('should return multiple records', async () => {
|
|
208
|
-
// Create multiple test records (use UPSERT to handle idempotency)
|
|
209
|
-
await client.send(
|
|
210
|
-
new ChangeResourceRecordSetsCommand({
|
|
211
|
-
HostedZoneId: hostedZoneId,
|
|
212
|
-
ChangeBatch: {
|
|
213
|
-
Changes: [
|
|
214
|
-
{
|
|
215
|
-
Action: 'UPSERT',
|
|
216
|
-
ResourceRecordSet: {
|
|
217
|
-
Name: `api.${TEST_DOMAIN}`,
|
|
218
|
-
Type: 'A',
|
|
219
|
-
TTL: 300,
|
|
220
|
-
ResourceRecords: [{ Value: '1.2.3.4' }],
|
|
221
|
-
},
|
|
222
|
-
},
|
|
223
|
-
{
|
|
224
|
-
Action: 'UPSERT',
|
|
225
|
-
ResourceRecordSet: {
|
|
226
|
-
Name: `www.${TEST_DOMAIN}`,
|
|
227
|
-
Type: 'CNAME',
|
|
228
|
-
TTL: 300,
|
|
229
|
-
ResourceRecords: [{ Value: TEST_DOMAIN }],
|
|
230
|
-
},
|
|
231
|
-
},
|
|
232
|
-
],
|
|
233
|
-
},
|
|
234
|
-
}),
|
|
235
|
-
);
|
|
236
|
-
|
|
237
|
-
const records = await provider.getRecords(TEST_DOMAIN);
|
|
238
|
-
|
|
239
|
-
expect(records).toHaveLength(2);
|
|
240
|
-
expect(records.find((r) => r.name === 'api')).toBeDefined();
|
|
241
|
-
expect(records.find((r) => r.name === 'www')).toBeDefined();
|
|
242
|
-
});
|
|
243
|
-
});
|
|
244
|
-
|
|
245
|
-
describe('upsertRecords', () => {
|
|
246
|
-
it('should create new records', async () => {
|
|
247
|
-
const results = await provider.upsertRecords(TEST_DOMAIN, [
|
|
248
|
-
{ name: 'api', type: 'A', ttl: 300, value: '1.2.3.4' },
|
|
249
|
-
]);
|
|
250
|
-
|
|
251
|
-
expect(results).toHaveLength(1);
|
|
252
|
-
expect(results[0]).toEqual({
|
|
253
|
-
record: { name: 'api', type: 'A', ttl: 300, value: '1.2.3.4' },
|
|
254
|
-
created: true,
|
|
255
|
-
unchanged: false,
|
|
256
|
-
});
|
|
257
|
-
|
|
258
|
-
// Verify record was created
|
|
259
|
-
const records = await provider.getRecords(TEST_DOMAIN);
|
|
260
|
-
expect(records.find((r) => r.name === 'api')).toBeDefined();
|
|
261
|
-
});
|
|
262
|
-
|
|
263
|
-
it('should handle root domain records (@)', async () => {
|
|
264
|
-
const results = await provider.upsertRecords(TEST_DOMAIN, [
|
|
265
|
-
{ name: '@', type: 'A', ttl: 300, value: '1.2.3.4' },
|
|
266
|
-
]);
|
|
267
|
-
|
|
268
|
-
expect(results).toHaveLength(1);
|
|
269
|
-
expect(results[0]?.created).toBe(true);
|
|
270
|
-
|
|
271
|
-
// Verify record was created at root
|
|
272
|
-
const records = await provider.getRecords(TEST_DOMAIN);
|
|
273
|
-
expect(records.find((r) => r.name === '@')).toBeDefined();
|
|
274
|
-
});
|
|
275
|
-
|
|
276
|
-
it('should mark unchanged when record exists with same value', async () => {
|
|
277
|
-
// Create initial record (use UPSERT to handle idempotency)
|
|
278
|
-
await client.send(
|
|
279
|
-
new ChangeResourceRecordSetsCommand({
|
|
280
|
-
HostedZoneId: hostedZoneId,
|
|
281
|
-
ChangeBatch: {
|
|
282
|
-
Changes: [
|
|
283
|
-
{
|
|
284
|
-
Action: 'UPSERT',
|
|
285
|
-
ResourceRecordSet: {
|
|
286
|
-
Name: `api.${TEST_DOMAIN}`,
|
|
287
|
-
Type: 'A',
|
|
288
|
-
TTL: 300,
|
|
289
|
-
ResourceRecords: [{ Value: '1.2.3.4' }],
|
|
290
|
-
},
|
|
291
|
-
},
|
|
292
|
-
],
|
|
293
|
-
},
|
|
294
|
-
}),
|
|
295
|
-
);
|
|
296
|
-
|
|
297
|
-
const results = await provider.upsertRecords(TEST_DOMAIN, [
|
|
298
|
-
{ name: 'api', type: 'A', ttl: 300, value: '1.2.3.4' },
|
|
299
|
-
]);
|
|
300
|
-
|
|
301
|
-
expect(results).toHaveLength(1);
|
|
302
|
-
expect(results[0]).toEqual({
|
|
303
|
-
record: { name: 'api', type: 'A', ttl: 300, value: '1.2.3.4' },
|
|
304
|
-
created: false,
|
|
305
|
-
unchanged: true,
|
|
306
|
-
});
|
|
307
|
-
});
|
|
308
|
-
|
|
309
|
-
it('should update record when value changes', async () => {
|
|
310
|
-
// Create initial record (use UPSERT to handle idempotency)
|
|
311
|
-
await client.send(
|
|
312
|
-
new ChangeResourceRecordSetsCommand({
|
|
313
|
-
HostedZoneId: hostedZoneId,
|
|
314
|
-
ChangeBatch: {
|
|
315
|
-
Changes: [
|
|
316
|
-
{
|
|
317
|
-
Action: 'UPSERT',
|
|
318
|
-
ResourceRecordSet: {
|
|
319
|
-
Name: `api.${TEST_DOMAIN}`,
|
|
320
|
-
Type: 'A',
|
|
321
|
-
TTL: 300,
|
|
322
|
-
ResourceRecords: [{ Value: '1.2.3.4' }],
|
|
323
|
-
},
|
|
324
|
-
},
|
|
325
|
-
],
|
|
326
|
-
},
|
|
327
|
-
}),
|
|
328
|
-
);
|
|
329
|
-
|
|
330
|
-
const results = await provider.upsertRecords(TEST_DOMAIN, [
|
|
331
|
-
{ name: 'api', type: 'A', ttl: 300, value: '5.6.7.8' },
|
|
332
|
-
]);
|
|
333
|
-
|
|
334
|
-
expect(results).toHaveLength(1);
|
|
335
|
-
expect(results[0]).toEqual({
|
|
336
|
-
record: { name: 'api', type: 'A', ttl: 300, value: '5.6.7.8' },
|
|
337
|
-
created: false,
|
|
338
|
-
unchanged: false,
|
|
339
|
-
});
|
|
340
|
-
|
|
341
|
-
// Verify record was updated
|
|
342
|
-
const records = await provider.getRecords(TEST_DOMAIN);
|
|
343
|
-
const apiRecord = records.find((r) => r.name === 'api');
|
|
344
|
-
expect(apiRecord?.values[0]).toBe('5.6.7.8');
|
|
345
|
-
});
|
|
346
|
-
|
|
347
|
-
it('should handle multiple records with mixed states', async () => {
|
|
348
|
-
// Create initial record (use UPSERT to handle idempotency)
|
|
349
|
-
await client.send(
|
|
350
|
-
new ChangeResourceRecordSetsCommand({
|
|
351
|
-
HostedZoneId: hostedZoneId,
|
|
352
|
-
ChangeBatch: {
|
|
353
|
-
Changes: [
|
|
354
|
-
{
|
|
355
|
-
Action: 'UPSERT',
|
|
356
|
-
ResourceRecordSet: {
|
|
357
|
-
Name: `api.${TEST_DOMAIN}`,
|
|
358
|
-
Type: 'A',
|
|
359
|
-
TTL: 300,
|
|
360
|
-
ResourceRecords: [{ Value: '1.2.3.4' }],
|
|
361
|
-
},
|
|
362
|
-
},
|
|
363
|
-
],
|
|
364
|
-
},
|
|
365
|
-
}),
|
|
366
|
-
);
|
|
367
|
-
|
|
368
|
-
const results = await provider.upsertRecords(TEST_DOMAIN, [
|
|
369
|
-
{ name: 'api', type: 'A', ttl: 300, value: '1.2.3.4' }, // Unchanged
|
|
370
|
-
{ name: 'www', type: 'A', ttl: 300, value: '1.2.3.4' }, // New
|
|
371
|
-
]);
|
|
372
|
-
|
|
373
|
-
expect(results).toHaveLength(2);
|
|
374
|
-
expect(results[0]?.unchanged).toBe(true);
|
|
375
|
-
expect(results[1]?.created).toBe(true);
|
|
376
|
-
});
|
|
377
|
-
});
|
|
378
|
-
|
|
379
|
-
describe('hosted zone auto-detection', () => {
|
|
380
|
-
it('should auto-detect hosted zone from domain', async () => {
|
|
381
|
-
// Create provider without hostedZoneId
|
|
382
|
-
const autoProvider = new Route53Provider({
|
|
383
|
-
endpoint: LOCALSTACK_ENDPOINT,
|
|
384
|
-
});
|
|
385
|
-
|
|
386
|
-
const records = await autoProvider.getRecords(TEST_DOMAIN);
|
|
387
|
-
|
|
388
|
-
// Should work without error
|
|
389
|
-
expect(Array.isArray(records)).toBe(true);
|
|
390
|
-
});
|
|
391
|
-
|
|
392
|
-
it('should throw error when hosted zone not found', async () => {
|
|
393
|
-
const autoProvider = new Route53Provider({
|
|
394
|
-
endpoint: LOCALSTACK_ENDPOINT,
|
|
395
|
-
});
|
|
396
|
-
|
|
397
|
-
await expect(
|
|
398
|
-
autoProvider.getRecords('nonexistent-domain.com'),
|
|
399
|
-
).rejects.toThrow('No hosted zone found for domain');
|
|
400
|
-
});
|
|
401
|
-
});
|
|
402
|
-
|
|
403
|
-
describe('default region', () => {
|
|
404
|
-
it('should use us-east-1 as default region when none specified', () => {
|
|
405
|
-
// This test verifies the provider can be created without region
|
|
406
|
-
// and doesn't throw "Region is missing" error
|
|
407
|
-
const providerWithoutRegion = new Route53Provider({
|
|
408
|
-
endpoint: LOCALSTACK_ENDPOINT,
|
|
409
|
-
hostedZoneId: 'test-zone',
|
|
410
|
-
});
|
|
411
|
-
|
|
412
|
-
expect(providerWithoutRegion.name).toBe('route53');
|
|
413
|
-
});
|
|
414
|
-
|
|
415
|
-
it('should use provided region when specified', () => {
|
|
416
|
-
const providerWithRegion = new Route53Provider({
|
|
417
|
-
endpoint: LOCALSTACK_ENDPOINT,
|
|
418
|
-
region: 'eu-west-1',
|
|
419
|
-
hostedZoneId: 'test-zone',
|
|
420
|
-
});
|
|
421
|
-
|
|
422
|
-
expect(providerWithRegion.name).toBe('route53');
|
|
423
|
-
});
|
|
424
|
-
});
|
|
425
|
-
});
|
|
@@ -1,201 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
DeleteParameterCommand,
|
|
3
|
-
GetParameterCommand,
|
|
4
|
-
PutParameterCommand,
|
|
5
|
-
SSMClient,
|
|
6
|
-
} from '@aws-sdk/client-ssm';
|
|
7
|
-
import {
|
|
8
|
-
afterAll,
|
|
9
|
-
afterEach,
|
|
10
|
-
beforeAll,
|
|
11
|
-
beforeEach,
|
|
12
|
-
describe,
|
|
13
|
-
expect,
|
|
14
|
-
it,
|
|
15
|
-
} from 'vitest';
|
|
16
|
-
import { SSMStateProvider } from '../SSMStateProvider';
|
|
17
|
-
import type { DokployStageState } from '../state';
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* SSMStateProvider Tests
|
|
21
|
-
*
|
|
22
|
-
* These tests require LocalStack to be running with SSM enabled.
|
|
23
|
-
* Run: docker compose up -d localstack
|
|
24
|
-
*/
|
|
25
|
-
describe('SSMStateProvider', () => {
|
|
26
|
-
const LOCALSTACK_ENDPOINT = 'http://localhost:4566';
|
|
27
|
-
let client: SSMClient;
|
|
28
|
-
let provider: SSMStateProvider;
|
|
29
|
-
const workspaceName = 'test-workspace';
|
|
30
|
-
const testStage = 'test-stage';
|
|
31
|
-
|
|
32
|
-
beforeAll(() => {
|
|
33
|
-
process.env.AWS_ACCESS_KEY_ID = 'test';
|
|
34
|
-
process.env.AWS_SECRET_ACCESS_KEY = 'test';
|
|
35
|
-
});
|
|
36
|
-
|
|
37
|
-
beforeEach(() => {
|
|
38
|
-
client = new SSMClient({
|
|
39
|
-
region: 'us-east-1',
|
|
40
|
-
endpoint: LOCALSTACK_ENDPOINT,
|
|
41
|
-
credentials: {
|
|
42
|
-
accessKeyId: 'test',
|
|
43
|
-
secretAccessKey: 'test',
|
|
44
|
-
},
|
|
45
|
-
});
|
|
46
|
-
|
|
47
|
-
// Create provider with injected client
|
|
48
|
-
provider = new SSMStateProvider(workspaceName, client);
|
|
49
|
-
});
|
|
50
|
-
|
|
51
|
-
afterEach(async () => {
|
|
52
|
-
try {
|
|
53
|
-
await client.send(
|
|
54
|
-
new DeleteParameterCommand({
|
|
55
|
-
Name: `/gkm/${workspaceName}/${testStage}/state`,
|
|
56
|
-
}),
|
|
57
|
-
);
|
|
58
|
-
} catch {
|
|
59
|
-
// Ignore if parameter doesn't exist
|
|
60
|
-
}
|
|
61
|
-
});
|
|
62
|
-
|
|
63
|
-
afterAll(() => {
|
|
64
|
-
client.destroy();
|
|
65
|
-
});
|
|
66
|
-
|
|
67
|
-
describe('static create', () => {
|
|
68
|
-
it('should create provider with options', () => {
|
|
69
|
-
const provider = SSMStateProvider.create({
|
|
70
|
-
workspaceName: 'my-workspace',
|
|
71
|
-
region: 'us-west-2',
|
|
72
|
-
endpoint: LOCALSTACK_ENDPOINT,
|
|
73
|
-
});
|
|
74
|
-
|
|
75
|
-
expect(provider).toBeInstanceOf(SSMStateProvider);
|
|
76
|
-
expect(provider.workspaceName).toBe('my-workspace');
|
|
77
|
-
});
|
|
78
|
-
|
|
79
|
-
it('should create provider with profile option', () => {
|
|
80
|
-
const provider = SSMStateProvider.create({
|
|
81
|
-
workspaceName: 'my-workspace',
|
|
82
|
-
region: 'us-west-2',
|
|
83
|
-
profile: 'my-profile',
|
|
84
|
-
endpoint: LOCALSTACK_ENDPOINT,
|
|
85
|
-
});
|
|
86
|
-
|
|
87
|
-
expect(provider).toBeInstanceOf(SSMStateProvider);
|
|
88
|
-
expect(provider.workspaceName).toBe('my-workspace');
|
|
89
|
-
});
|
|
90
|
-
});
|
|
91
|
-
|
|
92
|
-
describe('read', () => {
|
|
93
|
-
it('should return null when parameter does not exist', async () => {
|
|
94
|
-
const state = await provider.read('nonexistent-stage');
|
|
95
|
-
expect(state).toBeNull();
|
|
96
|
-
});
|
|
97
|
-
|
|
98
|
-
it('should read existing parameter', async () => {
|
|
99
|
-
const stateData: DokployStageState = {
|
|
100
|
-
provider: 'dokploy',
|
|
101
|
-
stage: testStage,
|
|
102
|
-
projectId: 'proj_test',
|
|
103
|
-
environmentId: 'env_123',
|
|
104
|
-
applications: { api: 'app_123' },
|
|
105
|
-
services: { postgresId: 'pg_123' },
|
|
106
|
-
lastDeployedAt: '2024-01-01T00:00:00.000Z',
|
|
107
|
-
};
|
|
108
|
-
|
|
109
|
-
await client.send(
|
|
110
|
-
new PutParameterCommand({
|
|
111
|
-
Name: `/gkm/${workspaceName}/${testStage}/state`,
|
|
112
|
-
Value: JSON.stringify(stateData),
|
|
113
|
-
Type: 'SecureString',
|
|
114
|
-
Overwrite: true,
|
|
115
|
-
}),
|
|
116
|
-
);
|
|
117
|
-
|
|
118
|
-
const state = await provider.read(testStage);
|
|
119
|
-
expect(state).toEqual(stateData);
|
|
120
|
-
});
|
|
121
|
-
});
|
|
122
|
-
|
|
123
|
-
describe('write', () => {
|
|
124
|
-
it('should create new parameter', async () => {
|
|
125
|
-
const state: DokployStageState = {
|
|
126
|
-
provider: 'dokploy',
|
|
127
|
-
stage: testStage,
|
|
128
|
-
projectId: 'proj_test',
|
|
129
|
-
environmentId: 'env_123',
|
|
130
|
-
applications: { api: 'app_123' },
|
|
131
|
-
services: {},
|
|
132
|
-
lastDeployedAt: '2024-01-01T00:00:00.000Z',
|
|
133
|
-
};
|
|
134
|
-
|
|
135
|
-
await provider.write(testStage, state);
|
|
136
|
-
|
|
137
|
-
const response = await client.send(
|
|
138
|
-
new GetParameterCommand({
|
|
139
|
-
Name: `/gkm/${workspaceName}/${testStage}/state`,
|
|
140
|
-
WithDecryption: true,
|
|
141
|
-
}),
|
|
142
|
-
);
|
|
143
|
-
|
|
144
|
-
const stored = JSON.parse(response.Parameter!.Value!);
|
|
145
|
-
expect(stored.applications).toEqual({ api: 'app_123' });
|
|
146
|
-
});
|
|
147
|
-
|
|
148
|
-
it('should update existing parameter', async () => {
|
|
149
|
-
const state1: DokployStageState = {
|
|
150
|
-
provider: 'dokploy',
|
|
151
|
-
stage: testStage,
|
|
152
|
-
projectId: 'proj_test',
|
|
153
|
-
environmentId: 'env_123',
|
|
154
|
-
applications: { api: 'app_old' },
|
|
155
|
-
services: {},
|
|
156
|
-
lastDeployedAt: '2024-01-01T00:00:00.000Z',
|
|
157
|
-
};
|
|
158
|
-
|
|
159
|
-
const state2: DokployStageState = {
|
|
160
|
-
provider: 'dokploy',
|
|
161
|
-
stage: testStage,
|
|
162
|
-
projectId: 'proj_test',
|
|
163
|
-
environmentId: 'env_123',
|
|
164
|
-
applications: { api: 'app_new' },
|
|
165
|
-
services: {},
|
|
166
|
-
lastDeployedAt: '2024-01-01T00:00:00.000Z',
|
|
167
|
-
};
|
|
168
|
-
|
|
169
|
-
await provider.write(testStage, state1);
|
|
170
|
-
await provider.write(testStage, state2);
|
|
171
|
-
|
|
172
|
-
const response = await client.send(
|
|
173
|
-
new GetParameterCommand({
|
|
174
|
-
Name: `/gkm/${workspaceName}/${testStage}/state`,
|
|
175
|
-
WithDecryption: true,
|
|
176
|
-
}),
|
|
177
|
-
);
|
|
178
|
-
|
|
179
|
-
const stored = JSON.parse(response.Parameter!.Value!);
|
|
180
|
-
expect(stored.applications.api).toBe('app_new');
|
|
181
|
-
});
|
|
182
|
-
|
|
183
|
-
it('should update lastDeployedAt timestamp', async () => {
|
|
184
|
-
const state: DokployStageState = {
|
|
185
|
-
provider: 'dokploy',
|
|
186
|
-
stage: testStage,
|
|
187
|
-
projectId: 'proj_test',
|
|
188
|
-
environmentId: 'env_123',
|
|
189
|
-
applications: {},
|
|
190
|
-
services: {},
|
|
191
|
-
lastDeployedAt: '2024-01-01T00:00:00.000Z',
|
|
192
|
-
};
|
|
193
|
-
|
|
194
|
-
const originalTimestamp = state.lastDeployedAt;
|
|
195
|
-
await new Promise((resolve) => setTimeout(resolve, 10));
|
|
196
|
-
await provider.write(testStage, state);
|
|
197
|
-
|
|
198
|
-
expect(state.lastDeployedAt).not.toBe(originalTimestamp);
|
|
199
|
-
});
|
|
200
|
-
});
|
|
201
|
-
});
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Entry app fixture with async initialization.
|
|
3
|
-
* Tests that env vars are captured even with async code paths.
|
|
4
|
-
*/
|
|
5
|
-
import { EnvironmentParser } from '@geekmidas/envkit';
|
|
6
|
-
|
|
7
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
8
|
-
const _config = new EnvironmentParser(process.env as Record<string, string>)
|
|
9
|
-
.create((get) => ({
|
|
10
|
-
port: get('PORT').string().transform(Number),
|
|
11
|
-
databaseUrl: get('DATABASE_URL').string(),
|
|
12
|
-
}))
|
|
13
|
-
.parse();
|
|
14
|
-
|
|
15
|
-
// Simulate async initialization (fire-and-forget style)
|
|
16
|
-
const init = async () => {
|
|
17
|
-
await Promise.resolve();
|
|
18
|
-
// This would normally connect to database, etc.
|
|
19
|
-
};
|
|
20
|
-
|
|
21
|
-
// Fire-and-forget promise
|
|
22
|
-
init().catch(() => {
|
|
23
|
-
// Silently ignore - common pattern in entry apps
|
|
24
|
-
});
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Entry app fixture with nested configuration.
|
|
3
|
-
* Tests that nested env var access is tracked correctly.
|
|
4
|
-
*/
|
|
5
|
-
import { EnvironmentParser } from '@geekmidas/envkit';
|
|
6
|
-
|
|
7
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
8
|
-
const _config = new EnvironmentParser(process.env as Record<string, string>)
|
|
9
|
-
.create((get) => ({
|
|
10
|
-
server: {
|
|
11
|
-
port: get('PORT').string().transform(Number),
|
|
12
|
-
host: get('HOST').string(),
|
|
13
|
-
},
|
|
14
|
-
database: {
|
|
15
|
-
url: get('DATABASE_URL').string(),
|
|
16
|
-
poolSize: get('DB_POOL_SIZE').string().transform(Number),
|
|
17
|
-
},
|
|
18
|
-
auth: {
|
|
19
|
-
secret: get('BETTER_AUTH_SECRET').string(),
|
|
20
|
-
url: get('BETTER_AUTH_URL').string(),
|
|
21
|
-
trustedOrigins: get('BETTER_AUTH_TRUSTED_ORIGINS').string(),
|
|
22
|
-
},
|
|
23
|
-
}))
|
|
24
|
-
.parse();
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Simple entry app fixture that uses @geekmidas/envkit.
|
|
3
|
-
* Used for testing entry app sniffing via subprocess.
|
|
4
|
-
*/
|
|
5
|
-
import { EnvironmentParser } from '@geekmidas/envkit';
|
|
6
|
-
|
|
7
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
8
|
-
const _config = new EnvironmentParser(process.env as Record<string, string>)
|
|
9
|
-
.create((get) => ({
|
|
10
|
-
port: get('PORT').string().transform(Number),
|
|
11
|
-
databaseUrl: get('DATABASE_URL').string(),
|
|
12
|
-
redisUrl: get('REDIS_URL').string(),
|
|
13
|
-
}))
|
|
14
|
-
.parse();
|