@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
package/src/auth/index.ts
DELETED
|
@@ -1,233 +0,0 @@
|
|
|
1
|
-
import { stdin as input, stdout as output } from 'node:process';
|
|
2
|
-
import * as readline from 'node:readline/promises';
|
|
3
|
-
import {
|
|
4
|
-
getCredentialsPath,
|
|
5
|
-
getDokployCredentials,
|
|
6
|
-
removeDokployCredentials,
|
|
7
|
-
storeDokployCredentials,
|
|
8
|
-
} from './credentials';
|
|
9
|
-
|
|
10
|
-
const logger = console;
|
|
11
|
-
|
|
12
|
-
export interface LoginOptions {
|
|
13
|
-
/** Service to login to */
|
|
14
|
-
service: 'dokploy';
|
|
15
|
-
/** API token (if not provided, will prompt) */
|
|
16
|
-
token?: string;
|
|
17
|
-
/** Endpoint URL */
|
|
18
|
-
endpoint?: string;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
export interface LogoutOptions {
|
|
22
|
-
/** Service to logout from */
|
|
23
|
-
service?: 'dokploy' | 'all';
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
* Validate Dokploy token by making a test API call
|
|
28
|
-
*/
|
|
29
|
-
export async function validateDokployToken(
|
|
30
|
-
endpoint: string,
|
|
31
|
-
token: string,
|
|
32
|
-
): Promise<boolean> {
|
|
33
|
-
const { DokployApi } = await import('../deploy/dokploy-api');
|
|
34
|
-
const api = new DokployApi({ baseUrl: endpoint, token });
|
|
35
|
-
return api.validateToken();
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
/**
|
|
39
|
-
* Prompt for input (handles both TTY and non-TTY)
|
|
40
|
-
*/
|
|
41
|
-
async function prompt(message: string, hidden = false): Promise<string> {
|
|
42
|
-
if (!process.stdin.isTTY) {
|
|
43
|
-
throw new Error(
|
|
44
|
-
'Interactive input required. Please provide --token option.',
|
|
45
|
-
);
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
if (hidden) {
|
|
49
|
-
// For hidden input, use raw mode directly without readline
|
|
50
|
-
process.stdout.write(message);
|
|
51
|
-
|
|
52
|
-
return new Promise((resolve, reject) => {
|
|
53
|
-
let value = '';
|
|
54
|
-
|
|
55
|
-
const cleanup = () => {
|
|
56
|
-
process.stdin.setRawMode(false);
|
|
57
|
-
process.stdin.pause();
|
|
58
|
-
process.stdin.removeListener('data', onData);
|
|
59
|
-
process.stdin.removeListener('error', onError);
|
|
60
|
-
};
|
|
61
|
-
|
|
62
|
-
const onError = (err: Error) => {
|
|
63
|
-
cleanup();
|
|
64
|
-
reject(err);
|
|
65
|
-
};
|
|
66
|
-
|
|
67
|
-
const onData = (char: Buffer) => {
|
|
68
|
-
const c = char.toString();
|
|
69
|
-
|
|
70
|
-
if (c === '\n' || c === '\r') {
|
|
71
|
-
cleanup();
|
|
72
|
-
process.stdout.write('\n');
|
|
73
|
-
resolve(value);
|
|
74
|
-
} else if (c === '\u0003') {
|
|
75
|
-
// Ctrl+C
|
|
76
|
-
cleanup();
|
|
77
|
-
process.stdout.write('\n');
|
|
78
|
-
process.exit(1);
|
|
79
|
-
} else if (c === '\u007F' || c === '\b') {
|
|
80
|
-
// Backspace
|
|
81
|
-
if (value.length > 0) {
|
|
82
|
-
value = value.slice(0, -1);
|
|
83
|
-
}
|
|
84
|
-
} else {
|
|
85
|
-
value += c;
|
|
86
|
-
}
|
|
87
|
-
};
|
|
88
|
-
|
|
89
|
-
process.stdin.setRawMode(true);
|
|
90
|
-
process.stdin.resume();
|
|
91
|
-
process.stdin.on('data', onData);
|
|
92
|
-
process.stdin.on('error', onError);
|
|
93
|
-
});
|
|
94
|
-
} else {
|
|
95
|
-
// For visible input, use readline
|
|
96
|
-
const rl = readline.createInterface({ input, output });
|
|
97
|
-
try {
|
|
98
|
-
return await rl.question(message);
|
|
99
|
-
} finally {
|
|
100
|
-
rl.close();
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
/**
|
|
106
|
-
* Login to a service
|
|
107
|
-
*/
|
|
108
|
-
export async function loginCommand(options: LoginOptions): Promise<void> {
|
|
109
|
-
const { service, token: providedToken, endpoint: providedEndpoint } = options;
|
|
110
|
-
|
|
111
|
-
if (service === 'dokploy') {
|
|
112
|
-
logger.log('\n🔐 Logging in to Dokploy...\n');
|
|
113
|
-
|
|
114
|
-
// Get endpoint
|
|
115
|
-
let endpoint = providedEndpoint;
|
|
116
|
-
if (!endpoint) {
|
|
117
|
-
endpoint = await prompt(
|
|
118
|
-
'Dokploy URL (e.g., https://dokploy.example.com): ',
|
|
119
|
-
);
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
// Normalize endpoint (remove trailing slash)
|
|
123
|
-
endpoint = endpoint.replace(/\/$/, '');
|
|
124
|
-
|
|
125
|
-
// Validate endpoint format
|
|
126
|
-
try {
|
|
127
|
-
new URL(endpoint);
|
|
128
|
-
} catch {
|
|
129
|
-
logger.error('Invalid URL format');
|
|
130
|
-
process.exit(1);
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
// Get token
|
|
134
|
-
let token = providedToken;
|
|
135
|
-
if (!token) {
|
|
136
|
-
logger.log(`\nGenerate a token at: ${endpoint}/settings/profile\n`);
|
|
137
|
-
token = await prompt('API Token: ', true);
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
if (!token) {
|
|
141
|
-
logger.error('Token is required');
|
|
142
|
-
process.exit(1);
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
// Validate token
|
|
146
|
-
logger.log('\nValidating credentials...');
|
|
147
|
-
const isValid = await validateDokployToken(endpoint, token);
|
|
148
|
-
|
|
149
|
-
if (!isValid) {
|
|
150
|
-
logger.error(
|
|
151
|
-
'\n✗ Invalid credentials. Please check your token and try again.',
|
|
152
|
-
);
|
|
153
|
-
process.exit(1);
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
// Store credentials
|
|
157
|
-
await storeDokployCredentials(token, endpoint);
|
|
158
|
-
|
|
159
|
-
logger.log('\n✓ Successfully logged in to Dokploy!');
|
|
160
|
-
logger.log(` Endpoint: ${endpoint}`);
|
|
161
|
-
logger.log(` Credentials stored in: ${getCredentialsPath()}`);
|
|
162
|
-
logger.log(
|
|
163
|
-
'\nYou can now use deploy commands without setting DOKPLOY_API_TOKEN.',
|
|
164
|
-
);
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
/**
|
|
169
|
-
* Logout from a service
|
|
170
|
-
*/
|
|
171
|
-
export async function logoutCommand(options: LogoutOptions): Promise<void> {
|
|
172
|
-
const { service = 'dokploy' } = options;
|
|
173
|
-
|
|
174
|
-
if (service === 'all') {
|
|
175
|
-
const dokployRemoved = await removeDokployCredentials();
|
|
176
|
-
|
|
177
|
-
if (dokployRemoved) {
|
|
178
|
-
logger.log('\n✓ Logged out from all services');
|
|
179
|
-
} else {
|
|
180
|
-
logger.log('\nNo stored credentials found');
|
|
181
|
-
}
|
|
182
|
-
return;
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
if (service === 'dokploy') {
|
|
186
|
-
const removed = await removeDokployCredentials();
|
|
187
|
-
|
|
188
|
-
if (removed) {
|
|
189
|
-
logger.log('\n✓ Logged out from Dokploy');
|
|
190
|
-
} else {
|
|
191
|
-
logger.log('\nNo Dokploy credentials found');
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
/**
|
|
197
|
-
* Show current login status
|
|
198
|
-
*/
|
|
199
|
-
export async function whoamiCommand(): Promise<void> {
|
|
200
|
-
logger.log('\n📋 Current credentials:\n');
|
|
201
|
-
|
|
202
|
-
const dokploy = await getDokployCredentials();
|
|
203
|
-
|
|
204
|
-
if (dokploy) {
|
|
205
|
-
logger.log(' Dokploy:');
|
|
206
|
-
logger.log(` Endpoint: ${dokploy.endpoint}`);
|
|
207
|
-
logger.log(` Token: ${maskToken(dokploy.token)}`);
|
|
208
|
-
} else {
|
|
209
|
-
logger.log(' Dokploy: Not logged in');
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
logger.log(`\n Credentials file: ${getCredentialsPath()}`);
|
|
213
|
-
}
|
|
214
|
-
|
|
215
|
-
/**
|
|
216
|
-
* Mask a token for display
|
|
217
|
-
*/
|
|
218
|
-
export function maskToken(token: string): string {
|
|
219
|
-
if (token.length <= 8) {
|
|
220
|
-
return '****';
|
|
221
|
-
}
|
|
222
|
-
return `${token.slice(0, 4)}...${token.slice(-4)}`;
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
// Re-export credentials utilities for use in other modules
|
|
226
|
-
export {
|
|
227
|
-
getDokployCredentials,
|
|
228
|
-
getDokployEndpoint,
|
|
229
|
-
getDokployRegistryId,
|
|
230
|
-
getDokployToken,
|
|
231
|
-
storeDokployCredentials,
|
|
232
|
-
storeDokployRegistryId,
|
|
233
|
-
} from './credentials';
|
|
@@ -1,446 +0,0 @@
|
|
|
1
|
-
import { mkdir, writeFile } from 'node:fs/promises';
|
|
2
|
-
import { join } from 'node:path';
|
|
3
|
-
import type { Construct } from '@geekmidas/constructs';
|
|
4
|
-
import { itWithDir } from '@geekmidas/testkit/os';
|
|
5
|
-
import { beforeEach, describe, expect, vi } from 'vitest';
|
|
6
|
-
import type { StageSecrets } from '../../secrets/types';
|
|
7
|
-
import { bundleServer } from '../bundler';
|
|
8
|
-
|
|
9
|
-
// Mock child_process to avoid actually running tsdown
|
|
10
|
-
vi.mock('node:child_process', () => ({
|
|
11
|
-
spawnSync: vi.fn().mockReturnValue({ status: 0, error: null }),
|
|
12
|
-
execSync: vi.fn().mockReturnValue('tsdown/0.12.8 darwin-arm64 node-v22.21.1'),
|
|
13
|
-
}));
|
|
14
|
-
|
|
15
|
-
// Mock construct that returns specific environment variables
|
|
16
|
-
function createMockConstruct(envVars: string[]): Construct {
|
|
17
|
-
return {
|
|
18
|
-
getEnvironment: vi.fn().mockResolvedValue(envVars),
|
|
19
|
-
} as unknown as Construct;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
// Helper to create a minimal secrets file
|
|
23
|
-
async function createSecretsFile(
|
|
24
|
-
dir: string,
|
|
25
|
-
stage: string,
|
|
26
|
-
secrets: Partial<StageSecrets>,
|
|
27
|
-
): Promise<void> {
|
|
28
|
-
const secretsDir = join(dir, '.gkm', 'secrets');
|
|
29
|
-
await mkdir(secretsDir, { recursive: true });
|
|
30
|
-
|
|
31
|
-
const fullSecrets: StageSecrets = {
|
|
32
|
-
stage,
|
|
33
|
-
createdAt: new Date().toISOString(),
|
|
34
|
-
updatedAt: new Date().toISOString(),
|
|
35
|
-
services: {},
|
|
36
|
-
urls: {},
|
|
37
|
-
custom: {},
|
|
38
|
-
...secrets,
|
|
39
|
-
};
|
|
40
|
-
|
|
41
|
-
await writeFile(
|
|
42
|
-
join(secretsDir, `${stage}.json`),
|
|
43
|
-
JSON.stringify(fullSecrets, null, 2),
|
|
44
|
-
);
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
// Helper to create a minimal entry point file and mock the bundle output
|
|
48
|
-
async function createEntryPoint(dir: string): Promise<string> {
|
|
49
|
-
const outputDir = join(dir, '.gkm', 'server');
|
|
50
|
-
const distDir = join(outputDir, 'dist');
|
|
51
|
-
await mkdir(outputDir, { recursive: true });
|
|
52
|
-
await mkdir(distDir, { recursive: true });
|
|
53
|
-
|
|
54
|
-
const entryPoint = join(outputDir, 'server.ts');
|
|
55
|
-
await writeFile(entryPoint, 'console.log("hello");');
|
|
56
|
-
|
|
57
|
-
// Create the output file that esbuild would normally create
|
|
58
|
-
// (since we're mocking spawnSync, the file won't be created automatically)
|
|
59
|
-
await writeFile(join(distDir, 'server.mjs'), 'console.log("bundled");');
|
|
60
|
-
|
|
61
|
-
return entryPoint;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
describe('bundleServer environment validation', () => {
|
|
65
|
-
beforeEach(() => {
|
|
66
|
-
vi.clearAllMocks();
|
|
67
|
-
});
|
|
68
|
-
|
|
69
|
-
itWithDir(
|
|
70
|
-
'should pass validation when all required env vars are present',
|
|
71
|
-
async ({ dir }) => {
|
|
72
|
-
const entryPoint = await createEntryPoint(dir);
|
|
73
|
-
await createSecretsFile(dir, 'production', {
|
|
74
|
-
urls: { DATABASE_URL: 'postgresql://localhost/db' },
|
|
75
|
-
custom: { API_KEY: 'sk_test_123' },
|
|
76
|
-
});
|
|
77
|
-
|
|
78
|
-
const constructs = [
|
|
79
|
-
createMockConstruct(['DATABASE_URL']),
|
|
80
|
-
createMockConstruct(['API_KEY']),
|
|
81
|
-
];
|
|
82
|
-
|
|
83
|
-
const originalCwd = process.cwd();
|
|
84
|
-
process.chdir(dir);
|
|
85
|
-
|
|
86
|
-
try {
|
|
87
|
-
// Should not throw
|
|
88
|
-
const result = await bundleServer({
|
|
89
|
-
entryPoint,
|
|
90
|
-
outputDir: join(dir, '.gkm', 'server', 'dist'),
|
|
91
|
-
minify: false,
|
|
92
|
-
sourcemap: false,
|
|
93
|
-
external: [],
|
|
94
|
-
stage: 'production',
|
|
95
|
-
constructs,
|
|
96
|
-
});
|
|
97
|
-
|
|
98
|
-
expect(result.masterKey).toBeDefined();
|
|
99
|
-
expect(constructs[0].getEnvironment).toHaveBeenCalled();
|
|
100
|
-
expect(constructs[1].getEnvironment).toHaveBeenCalled();
|
|
101
|
-
} finally {
|
|
102
|
-
process.chdir(originalCwd);
|
|
103
|
-
}
|
|
104
|
-
},
|
|
105
|
-
);
|
|
106
|
-
|
|
107
|
-
itWithDir(
|
|
108
|
-
'should throw error when required env vars are missing',
|
|
109
|
-
async ({ dir }) => {
|
|
110
|
-
const entryPoint = await createEntryPoint(dir);
|
|
111
|
-
await createSecretsFile(dir, 'production', {
|
|
112
|
-
urls: { DATABASE_URL: 'postgresql://localhost/db' },
|
|
113
|
-
custom: {},
|
|
114
|
-
});
|
|
115
|
-
|
|
116
|
-
const constructs = [
|
|
117
|
-
createMockConstruct(['DATABASE_URL', 'API_KEY', 'JWT_SECRET']),
|
|
118
|
-
];
|
|
119
|
-
|
|
120
|
-
const originalCwd = process.cwd();
|
|
121
|
-
process.chdir(dir);
|
|
122
|
-
|
|
123
|
-
try {
|
|
124
|
-
await expect(
|
|
125
|
-
bundleServer({
|
|
126
|
-
entryPoint,
|
|
127
|
-
outputDir: join(dir, '.gkm', 'server', 'dist'),
|
|
128
|
-
minify: false,
|
|
129
|
-
sourcemap: false,
|
|
130
|
-
external: [],
|
|
131
|
-
stage: 'production',
|
|
132
|
-
constructs,
|
|
133
|
-
}),
|
|
134
|
-
).rejects.toThrow('Missing environment variables');
|
|
135
|
-
} finally {
|
|
136
|
-
process.chdir(originalCwd);
|
|
137
|
-
}
|
|
138
|
-
},
|
|
139
|
-
);
|
|
140
|
-
|
|
141
|
-
itWithDir(
|
|
142
|
-
'should include missing variables in error message',
|
|
143
|
-
async ({ dir }) => {
|
|
144
|
-
const entryPoint = await createEntryPoint(dir);
|
|
145
|
-
await createSecretsFile(dir, 'staging', {
|
|
146
|
-
custom: { EXISTING_VAR: 'value' },
|
|
147
|
-
});
|
|
148
|
-
|
|
149
|
-
const constructs = [
|
|
150
|
-
createMockConstruct(['EXISTING_VAR', 'MISSING_VAR_1', 'MISSING_VAR_2']),
|
|
151
|
-
];
|
|
152
|
-
|
|
153
|
-
const originalCwd = process.cwd();
|
|
154
|
-
process.chdir(dir);
|
|
155
|
-
|
|
156
|
-
try {
|
|
157
|
-
await expect(
|
|
158
|
-
bundleServer({
|
|
159
|
-
entryPoint,
|
|
160
|
-
outputDir: join(dir, '.gkm', 'server', 'dist'),
|
|
161
|
-
minify: false,
|
|
162
|
-
sourcemap: false,
|
|
163
|
-
external: [],
|
|
164
|
-
stage: 'staging',
|
|
165
|
-
constructs,
|
|
166
|
-
}),
|
|
167
|
-
).rejects.toThrow(/MISSING_VAR_1/);
|
|
168
|
-
|
|
169
|
-
await expect(
|
|
170
|
-
bundleServer({
|
|
171
|
-
entryPoint,
|
|
172
|
-
outputDir: join(dir, '.gkm', 'server', 'dist'),
|
|
173
|
-
minify: false,
|
|
174
|
-
sourcemap: false,
|
|
175
|
-
external: [],
|
|
176
|
-
stage: 'staging',
|
|
177
|
-
constructs,
|
|
178
|
-
}),
|
|
179
|
-
).rejects.toThrow(/MISSING_VAR_2/);
|
|
180
|
-
} finally {
|
|
181
|
-
process.chdir(originalCwd);
|
|
182
|
-
}
|
|
183
|
-
},
|
|
184
|
-
);
|
|
185
|
-
|
|
186
|
-
itWithDir(
|
|
187
|
-
'should collect env vars from multiple constructs',
|
|
188
|
-
async ({ dir }) => {
|
|
189
|
-
const entryPoint = await createEntryPoint(dir);
|
|
190
|
-
await createSecretsFile(dir, 'production', {
|
|
191
|
-
urls: { DATABASE_URL: 'postgresql://localhost/db' },
|
|
192
|
-
custom: {
|
|
193
|
-
API_KEY: 'key',
|
|
194
|
-
REDIS_URL: 'redis://localhost',
|
|
195
|
-
JWT_SECRET: 'secret',
|
|
196
|
-
},
|
|
197
|
-
});
|
|
198
|
-
|
|
199
|
-
const constructs = [
|
|
200
|
-
createMockConstruct(['DATABASE_URL']),
|
|
201
|
-
createMockConstruct(['API_KEY', 'REDIS_URL']),
|
|
202
|
-
createMockConstruct(['JWT_SECRET']),
|
|
203
|
-
];
|
|
204
|
-
|
|
205
|
-
const originalCwd = process.cwd();
|
|
206
|
-
process.chdir(dir);
|
|
207
|
-
|
|
208
|
-
try {
|
|
209
|
-
const result = await bundleServer({
|
|
210
|
-
entryPoint,
|
|
211
|
-
outputDir: join(dir, '.gkm', 'server', 'dist'),
|
|
212
|
-
minify: false,
|
|
213
|
-
sourcemap: false,
|
|
214
|
-
external: [],
|
|
215
|
-
stage: 'production',
|
|
216
|
-
constructs,
|
|
217
|
-
});
|
|
218
|
-
|
|
219
|
-
expect(result.masterKey).toBeDefined();
|
|
220
|
-
|
|
221
|
-
// All constructs should have been checked
|
|
222
|
-
for (const construct of constructs) {
|
|
223
|
-
expect(construct.getEnvironment).toHaveBeenCalled();
|
|
224
|
-
}
|
|
225
|
-
} finally {
|
|
226
|
-
process.chdir(originalCwd);
|
|
227
|
-
}
|
|
228
|
-
},
|
|
229
|
-
);
|
|
230
|
-
|
|
231
|
-
itWithDir(
|
|
232
|
-
'should deduplicate env vars from multiple constructs',
|
|
233
|
-
async ({ dir }) => {
|
|
234
|
-
const entryPoint = await createEntryPoint(dir);
|
|
235
|
-
await createSecretsFile(dir, 'production', {
|
|
236
|
-
custom: { SHARED_VAR: 'value' },
|
|
237
|
-
});
|
|
238
|
-
|
|
239
|
-
// Multiple constructs requiring the same variable
|
|
240
|
-
const constructs = [
|
|
241
|
-
createMockConstruct(['SHARED_VAR']),
|
|
242
|
-
createMockConstruct(['SHARED_VAR']),
|
|
243
|
-
createMockConstruct(['SHARED_VAR']),
|
|
244
|
-
];
|
|
245
|
-
|
|
246
|
-
const originalCwd = process.cwd();
|
|
247
|
-
process.chdir(dir);
|
|
248
|
-
|
|
249
|
-
try {
|
|
250
|
-
// Should pass since SHARED_VAR is provided once
|
|
251
|
-
const result = await bundleServer({
|
|
252
|
-
entryPoint,
|
|
253
|
-
outputDir: join(dir, '.gkm', 'server', 'dist'),
|
|
254
|
-
minify: false,
|
|
255
|
-
sourcemap: false,
|
|
256
|
-
external: [],
|
|
257
|
-
stage: 'production',
|
|
258
|
-
constructs,
|
|
259
|
-
});
|
|
260
|
-
|
|
261
|
-
expect(result.masterKey).toBeDefined();
|
|
262
|
-
} finally {
|
|
263
|
-
process.chdir(originalCwd);
|
|
264
|
-
}
|
|
265
|
-
},
|
|
266
|
-
);
|
|
267
|
-
|
|
268
|
-
itWithDir(
|
|
269
|
-
'should skip validation when no constructs provided',
|
|
270
|
-
async ({ dir }) => {
|
|
271
|
-
const entryPoint = await createEntryPoint(dir);
|
|
272
|
-
await createSecretsFile(dir, 'production', {
|
|
273
|
-
custom: {},
|
|
274
|
-
});
|
|
275
|
-
|
|
276
|
-
const originalCwd = process.cwd();
|
|
277
|
-
process.chdir(dir);
|
|
278
|
-
|
|
279
|
-
try {
|
|
280
|
-
// Should not throw even with empty secrets
|
|
281
|
-
const result = await bundleServer({
|
|
282
|
-
entryPoint,
|
|
283
|
-
outputDir: join(dir, '.gkm', 'server', 'dist'),
|
|
284
|
-
minify: false,
|
|
285
|
-
sourcemap: false,
|
|
286
|
-
external: [],
|
|
287
|
-
stage: 'production',
|
|
288
|
-
constructs: [],
|
|
289
|
-
});
|
|
290
|
-
|
|
291
|
-
expect(result.masterKey).toBeDefined();
|
|
292
|
-
} finally {
|
|
293
|
-
process.chdir(originalCwd);
|
|
294
|
-
}
|
|
295
|
-
},
|
|
296
|
-
);
|
|
297
|
-
|
|
298
|
-
itWithDir(
|
|
299
|
-
'should skip validation when constructs is undefined',
|
|
300
|
-
async ({ dir }) => {
|
|
301
|
-
const entryPoint = await createEntryPoint(dir);
|
|
302
|
-
await createSecretsFile(dir, 'production', {
|
|
303
|
-
custom: {},
|
|
304
|
-
});
|
|
305
|
-
|
|
306
|
-
const originalCwd = process.cwd();
|
|
307
|
-
process.chdir(dir);
|
|
308
|
-
|
|
309
|
-
try {
|
|
310
|
-
const result = await bundleServer({
|
|
311
|
-
entryPoint,
|
|
312
|
-
outputDir: join(dir, '.gkm', 'server', 'dist'),
|
|
313
|
-
minify: false,
|
|
314
|
-
sourcemap: false,
|
|
315
|
-
external: [],
|
|
316
|
-
stage: 'production',
|
|
317
|
-
// No constructs provided
|
|
318
|
-
});
|
|
319
|
-
|
|
320
|
-
expect(result.masterKey).toBeDefined();
|
|
321
|
-
} finally {
|
|
322
|
-
process.chdir(originalCwd);
|
|
323
|
-
}
|
|
324
|
-
},
|
|
325
|
-
);
|
|
326
|
-
|
|
327
|
-
itWithDir(
|
|
328
|
-
'should recognize service credentials as provided',
|
|
329
|
-
async ({ dir }) => {
|
|
330
|
-
const entryPoint = await createEntryPoint(dir);
|
|
331
|
-
await createSecretsFile(dir, 'production', {
|
|
332
|
-
services: {
|
|
333
|
-
postgres: {
|
|
334
|
-
host: 'localhost',
|
|
335
|
-
port: 5432,
|
|
336
|
-
username: 'app',
|
|
337
|
-
password: 'secret',
|
|
338
|
-
database: 'mydb',
|
|
339
|
-
},
|
|
340
|
-
},
|
|
341
|
-
});
|
|
342
|
-
|
|
343
|
-
const constructs = [
|
|
344
|
-
createMockConstruct([
|
|
345
|
-
'POSTGRES_HOST',
|
|
346
|
-
'POSTGRES_PORT',
|
|
347
|
-
'POSTGRES_USER',
|
|
348
|
-
'POSTGRES_PASSWORD',
|
|
349
|
-
'POSTGRES_DB',
|
|
350
|
-
]),
|
|
351
|
-
];
|
|
352
|
-
|
|
353
|
-
const originalCwd = process.cwd();
|
|
354
|
-
process.chdir(dir);
|
|
355
|
-
|
|
356
|
-
try {
|
|
357
|
-
const result = await bundleServer({
|
|
358
|
-
entryPoint,
|
|
359
|
-
outputDir: join(dir, '.gkm', 'server', 'dist'),
|
|
360
|
-
minify: false,
|
|
361
|
-
sourcemap: false,
|
|
362
|
-
external: [],
|
|
363
|
-
stage: 'production',
|
|
364
|
-
constructs,
|
|
365
|
-
});
|
|
366
|
-
|
|
367
|
-
expect(result.masterKey).toBeDefined();
|
|
368
|
-
} finally {
|
|
369
|
-
process.chdir(originalCwd);
|
|
370
|
-
}
|
|
371
|
-
},
|
|
372
|
-
);
|
|
373
|
-
|
|
374
|
-
itWithDir(
|
|
375
|
-
'should auto-initialize secrets and throw for missing env vars',
|
|
376
|
-
async ({ dir }) => {
|
|
377
|
-
const entryPoint = await createEntryPoint(dir);
|
|
378
|
-
// Don't create secrets file - it should be auto-initialized
|
|
379
|
-
|
|
380
|
-
const constructs = [createMockConstruct(['DATABASE_URL'])];
|
|
381
|
-
|
|
382
|
-
const originalCwd = process.cwd();
|
|
383
|
-
process.chdir(dir);
|
|
384
|
-
|
|
385
|
-
try {
|
|
386
|
-
// Should auto-initialize secrets but then fail because DATABASE_URL is required
|
|
387
|
-
await expect(
|
|
388
|
-
bundleServer({
|
|
389
|
-
entryPoint,
|
|
390
|
-
outputDir: join(dir, '.gkm', 'server', 'dist'),
|
|
391
|
-
minify: false,
|
|
392
|
-
sourcemap: false,
|
|
393
|
-
external: [],
|
|
394
|
-
stage: 'production',
|
|
395
|
-
constructs,
|
|
396
|
-
}),
|
|
397
|
-
).rejects.toThrow('Missing environment variables');
|
|
398
|
-
} finally {
|
|
399
|
-
process.chdir(originalCwd);
|
|
400
|
-
}
|
|
401
|
-
},
|
|
402
|
-
);
|
|
403
|
-
|
|
404
|
-
itWithDir(
|
|
405
|
-
'should include helpful instructions in error message',
|
|
406
|
-
async ({ dir }) => {
|
|
407
|
-
const entryPoint = await createEntryPoint(dir);
|
|
408
|
-
await createSecretsFile(dir, 'myapp', {
|
|
409
|
-
custom: {},
|
|
410
|
-
});
|
|
411
|
-
|
|
412
|
-
const constructs = [createMockConstruct(['MISSING_VAR'])];
|
|
413
|
-
|
|
414
|
-
const originalCwd = process.cwd();
|
|
415
|
-
process.chdir(dir);
|
|
416
|
-
|
|
417
|
-
try {
|
|
418
|
-
await expect(
|
|
419
|
-
bundleServer({
|
|
420
|
-
entryPoint,
|
|
421
|
-
outputDir: join(dir, '.gkm', 'server', 'dist'),
|
|
422
|
-
minify: false,
|
|
423
|
-
sourcemap: false,
|
|
424
|
-
external: [],
|
|
425
|
-
stage: 'myapp',
|
|
426
|
-
constructs,
|
|
427
|
-
}),
|
|
428
|
-
).rejects.toThrow(/gkm secrets:set/);
|
|
429
|
-
|
|
430
|
-
await expect(
|
|
431
|
-
bundleServer({
|
|
432
|
-
entryPoint,
|
|
433
|
-
outputDir: join(dir, '.gkm', 'server', 'dist'),
|
|
434
|
-
minify: false,
|
|
435
|
-
sourcemap: false,
|
|
436
|
-
external: [],
|
|
437
|
-
stage: 'myapp',
|
|
438
|
-
constructs,
|
|
439
|
-
}),
|
|
440
|
-
).rejects.toThrow(/gkm secrets:import/);
|
|
441
|
-
} finally {
|
|
442
|
-
process.chdir(originalCwd);
|
|
443
|
-
}
|
|
444
|
-
},
|
|
445
|
-
);
|
|
446
|
-
});
|