@geekmidas/cli 9.0.2 → 10.0.0-alpha.1
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 +66 -122
- 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 +2530 -1810
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +2506 -1786
- 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,181 +0,0 @@
|
|
|
1
|
-
import { mkdir, rm, writeFile } from 'node:fs/promises';
|
|
2
|
-
import { tmpdir } from 'node:os';
|
|
3
|
-
import { join } from 'node:path';
|
|
4
|
-
import {
|
|
5
|
-
CronBuilder,
|
|
6
|
-
type ScheduleExpression,
|
|
7
|
-
} from '@geekmidas/constructs/crons';
|
|
8
|
-
import { e } from '@geekmidas/constructs/endpoints';
|
|
9
|
-
import { z } from 'zod';
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* Creates a temporary directory for testing
|
|
13
|
-
*/
|
|
14
|
-
export async function createTempDir(prefix = 'cli-test-'): Promise<string> {
|
|
15
|
-
const tempPath = join(
|
|
16
|
-
tmpdir(),
|
|
17
|
-
`${prefix}${Date.now()}-${Math.random().toString(36).slice(2)}`,
|
|
18
|
-
);
|
|
19
|
-
await mkdir(tempPath, { recursive: true });
|
|
20
|
-
return tempPath;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* Cleans up a directory
|
|
25
|
-
*/
|
|
26
|
-
export async function cleanupDir(path: string): Promise<void> {
|
|
27
|
-
try {
|
|
28
|
-
await rm(path, { recursive: true, force: true });
|
|
29
|
-
} catch (_error) {
|
|
30
|
-
// Ignore errors during cleanup
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
/**
|
|
35
|
-
* Creates a test file with content
|
|
36
|
-
*/
|
|
37
|
-
export async function createTestFile(
|
|
38
|
-
dir: string,
|
|
39
|
-
filename: string,
|
|
40
|
-
content: string,
|
|
41
|
-
): Promise<string> {
|
|
42
|
-
const filePath = join(dir, filename);
|
|
43
|
-
await mkdir(dirname(filePath), { recursive: true });
|
|
44
|
-
await writeFile(filePath, content);
|
|
45
|
-
return filePath;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
/**
|
|
49
|
-
* Creates a mock endpoint file with real endpoint construct
|
|
50
|
-
*/
|
|
51
|
-
export async function createMockEndpointFile(
|
|
52
|
-
dir: string,
|
|
53
|
-
filename: string,
|
|
54
|
-
exportName: string,
|
|
55
|
-
path: string = '/test',
|
|
56
|
-
method: string = 'GET',
|
|
57
|
-
): Promise<string> {
|
|
58
|
-
const content = `
|
|
59
|
-
import { e } from '@geekmidas/constructs/endpoints';
|
|
60
|
-
import { z } from 'zod';
|
|
61
|
-
|
|
62
|
-
export const ${exportName} = e
|
|
63
|
-
.${method.toLowerCase()}('${path}')
|
|
64
|
-
.output(z.object({ message: z.string() }))
|
|
65
|
-
.handle(async () => ({ message: 'Hello from ${exportName}' }));
|
|
66
|
-
`;
|
|
67
|
-
return createTestFile(dir, filename, content);
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
/**
|
|
71
|
-
* Creates a mock function file with real function construct
|
|
72
|
-
*/
|
|
73
|
-
export async function createMockFunctionFile(
|
|
74
|
-
dir: string,
|
|
75
|
-
filename: string,
|
|
76
|
-
exportName: string,
|
|
77
|
-
timeout = 30,
|
|
78
|
-
): Promise<string> {
|
|
79
|
-
const content = `
|
|
80
|
-
import { f } from '@geekmidas/constructs/functions';
|
|
81
|
-
import { z } from 'zod';
|
|
82
|
-
|
|
83
|
-
export const ${exportName} = f
|
|
84
|
-
.input(z.object({ name: z.string() }))
|
|
85
|
-
.output(z.object({ greeting: z.string() }))
|
|
86
|
-
.timeout(${timeout})
|
|
87
|
-
.handle(async ({ input }) => ({ greeting: \`Hello, \${input.name}!\` }));
|
|
88
|
-
`;
|
|
89
|
-
return createTestFile(dir, filename, content);
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
/**
|
|
93
|
-
* Creates a mock cron file with real cron construct
|
|
94
|
-
*/
|
|
95
|
-
export async function createMockCronFile(
|
|
96
|
-
dir: string,
|
|
97
|
-
filename: string,
|
|
98
|
-
exportName: string,
|
|
99
|
-
schedule = 'rate(1 hour)',
|
|
100
|
-
): Promise<string> {
|
|
101
|
-
const content = `
|
|
102
|
-
import { CronBuilder } from '@geekmidas/constructs/crons';
|
|
103
|
-
import { z } from 'zod';
|
|
104
|
-
|
|
105
|
-
export const ${exportName} = new CronBuilder()
|
|
106
|
-
.schedule('${schedule}')
|
|
107
|
-
.output(z.object({ processed: z.number() }))
|
|
108
|
-
.handle(async () => {
|
|
109
|
-
console.log('Running cron job: ${exportName}');
|
|
110
|
-
return { processed: 10 };
|
|
111
|
-
});
|
|
112
|
-
`;
|
|
113
|
-
return createTestFile(dir, filename, content);
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
/**
|
|
117
|
-
* Helper functions to create real constructs for testing
|
|
118
|
-
*/
|
|
119
|
-
export function createTestEndpoint(path: string, method: HttpMethod = 'GET') {
|
|
120
|
-
const m = method.toLowerCase() as Lowercase<HttpMethod>;
|
|
121
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
122
|
-
const builder = (e as any)[m](path);
|
|
123
|
-
builder.output(z.object({ message: z.string() }));
|
|
124
|
-
return builder.handle(async () => ({ message: `Hello from ${path}` }));
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
export function createTestFunction(timeout: number = 30) {
|
|
128
|
-
const builder = new FunctionBuilder();
|
|
129
|
-
builder.input(z.object({ name: z.string() }));
|
|
130
|
-
builder.output(z.object({ greeting: z.string() }));
|
|
131
|
-
builder.timeout(timeout);
|
|
132
|
-
return builder.handle(async ({ input }: any) => ({
|
|
133
|
-
greeting: `Hello, ${input.name}!`,
|
|
134
|
-
}));
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
export function createTestCron(
|
|
138
|
-
schedule: ScheduleExpression = 'rate(1 hour)',
|
|
139
|
-
timeout: number = 30,
|
|
140
|
-
) {
|
|
141
|
-
const builder = new CronBuilder();
|
|
142
|
-
builder.schedule(schedule);
|
|
143
|
-
builder.output(z.object({ processed: z.number() }));
|
|
144
|
-
builder.timeout(timeout);
|
|
145
|
-
return builder.handle(async () => {
|
|
146
|
-
return { processed: 10 };
|
|
147
|
-
});
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
/**
|
|
151
|
-
* Creates a mock build context
|
|
152
|
-
*/
|
|
153
|
-
export function createMockBuildContext() {
|
|
154
|
-
return {
|
|
155
|
-
envParserPath: './env',
|
|
156
|
-
envParserImportPattern: 'envParser',
|
|
157
|
-
loggerPath: './logger',
|
|
158
|
-
loggerImportPattern: 'logger',
|
|
159
|
-
};
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
/**
|
|
163
|
-
* Waits for a condition to be true
|
|
164
|
-
*/
|
|
165
|
-
export async function waitFor(
|
|
166
|
-
condition: () => boolean,
|
|
167
|
-
timeout = 5000,
|
|
168
|
-
interval = 100,
|
|
169
|
-
): Promise<void> {
|
|
170
|
-
const start = Date.now();
|
|
171
|
-
while (!condition() && Date.now() - start < timeout) {
|
|
172
|
-
await new Promise((resolve) => setTimeout(resolve, interval));
|
|
173
|
-
}
|
|
174
|
-
if (!condition()) {
|
|
175
|
-
throw new Error('Timeout waiting for condition');
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
import { dirname } from 'node:path';
|
|
180
|
-
import { FunctionBuilder } from '@geekmidas/constructs/functions';
|
|
181
|
-
import type { HttpMethod } from '@geekmidas/constructs/types';
|
|
@@ -1,331 +0,0 @@
|
|
|
1
|
-
import { existsSync } from 'node:fs';
|
|
2
|
-
import { mkdir, readFile, rm } from 'node:fs/promises';
|
|
3
|
-
import { tmpdir } from 'node:os';
|
|
4
|
-
import { join } from 'node:path';
|
|
5
|
-
import { afterEach, beforeEach, describe, expect, it } from 'vitest';
|
|
6
|
-
|
|
7
|
-
import {
|
|
8
|
-
getCredentialsDir,
|
|
9
|
-
getCredentialsPath,
|
|
10
|
-
getDokployCredentials,
|
|
11
|
-
getDokployRegistryId,
|
|
12
|
-
getDokployToken,
|
|
13
|
-
readCredentials,
|
|
14
|
-
removeDokployCredentials,
|
|
15
|
-
storeDokployCredentials,
|
|
16
|
-
storeDokployRegistryId,
|
|
17
|
-
writeCredentials,
|
|
18
|
-
} from '../credentials';
|
|
19
|
-
|
|
20
|
-
describe('credentials storage', () => {
|
|
21
|
-
let tempDir: string;
|
|
22
|
-
|
|
23
|
-
beforeEach(async () => {
|
|
24
|
-
tempDir = join(tmpdir(), `gkm-auth-test-${Date.now()}`);
|
|
25
|
-
await mkdir(tempDir, { recursive: true });
|
|
26
|
-
});
|
|
27
|
-
|
|
28
|
-
afterEach(async () => {
|
|
29
|
-
if (existsSync(tempDir)) {
|
|
30
|
-
await rm(tempDir, { recursive: true });
|
|
31
|
-
}
|
|
32
|
-
});
|
|
33
|
-
|
|
34
|
-
describe('path utilities', () => {
|
|
35
|
-
it('should return credentials dir in specified root directory', () => {
|
|
36
|
-
const dir = getCredentialsDir({ root: tempDir });
|
|
37
|
-
expect(dir).toBe(join(tempDir, '.gkm'));
|
|
38
|
-
});
|
|
39
|
-
|
|
40
|
-
it('should return credentials path', () => {
|
|
41
|
-
const path = getCredentialsPath({ root: tempDir });
|
|
42
|
-
expect(path).toBe(join(tempDir, '.gkm', 'credentials.json'));
|
|
43
|
-
});
|
|
44
|
-
});
|
|
45
|
-
|
|
46
|
-
describe('readCredentials / writeCredentials', () => {
|
|
47
|
-
it('should return empty object when no credentials file exists', async () => {
|
|
48
|
-
const creds = await readCredentials({ root: tempDir });
|
|
49
|
-
expect(creds).toEqual({});
|
|
50
|
-
});
|
|
51
|
-
|
|
52
|
-
it('should write and read credentials', async () => {
|
|
53
|
-
const credentials = {
|
|
54
|
-
dokploy: {
|
|
55
|
-
token: 'test-token',
|
|
56
|
-
endpoint: 'https://dokploy.example.com',
|
|
57
|
-
storedAt: new Date().toISOString(),
|
|
58
|
-
},
|
|
59
|
-
};
|
|
60
|
-
|
|
61
|
-
await writeCredentials(credentials, { root: tempDir });
|
|
62
|
-
const read = await readCredentials({ root: tempDir });
|
|
63
|
-
|
|
64
|
-
expect(read).toEqual(credentials);
|
|
65
|
-
});
|
|
66
|
-
|
|
67
|
-
it('should create credentials directory if it does not exist', async () => {
|
|
68
|
-
const credentials = {
|
|
69
|
-
dokploy: {
|
|
70
|
-
token: 'test',
|
|
71
|
-
endpoint: 'https://test.com',
|
|
72
|
-
storedAt: new Date().toISOString(),
|
|
73
|
-
},
|
|
74
|
-
};
|
|
75
|
-
|
|
76
|
-
await writeCredentials(credentials, { root: tempDir });
|
|
77
|
-
|
|
78
|
-
expect(existsSync(join(tempDir, '.gkm'))).toBe(true);
|
|
79
|
-
expect(existsSync(join(tempDir, '.gkm', 'credentials.json'))).toBe(true);
|
|
80
|
-
});
|
|
81
|
-
|
|
82
|
-
it('should set secure file permissions', async () => {
|
|
83
|
-
const credentials = {
|
|
84
|
-
dokploy: {
|
|
85
|
-
token: 'test',
|
|
86
|
-
endpoint: 'https://test.com',
|
|
87
|
-
storedAt: new Date().toISOString(),
|
|
88
|
-
},
|
|
89
|
-
};
|
|
90
|
-
|
|
91
|
-
await writeCredentials(credentials, { root: tempDir });
|
|
92
|
-
|
|
93
|
-
// Verify the file was created (we can't easily check permissions in tests)
|
|
94
|
-
const content = await readFile(
|
|
95
|
-
getCredentialsPath({ root: tempDir }),
|
|
96
|
-
'utf-8',
|
|
97
|
-
);
|
|
98
|
-
expect(JSON.parse(content)).toEqual(credentials);
|
|
99
|
-
});
|
|
100
|
-
});
|
|
101
|
-
|
|
102
|
-
describe('storeDokployCredentials', () => {
|
|
103
|
-
it('should store dokploy credentials', async () => {
|
|
104
|
-
await storeDokployCredentials('my-token', 'https://dokploy.example.com', {
|
|
105
|
-
root: tempDir,
|
|
106
|
-
});
|
|
107
|
-
|
|
108
|
-
const creds = await readCredentials({ root: tempDir });
|
|
109
|
-
expect(creds.dokploy).toBeDefined();
|
|
110
|
-
expect(creds.dokploy!.token).toBe('my-token');
|
|
111
|
-
expect(creds.dokploy!.endpoint).toBe('https://dokploy.example.com');
|
|
112
|
-
expect(creds.dokploy!.storedAt).toBeDefined();
|
|
113
|
-
});
|
|
114
|
-
|
|
115
|
-
it('should overwrite existing credentials', async () => {
|
|
116
|
-
await storeDokployCredentials('old-token', 'https://old.com', {
|
|
117
|
-
root: tempDir,
|
|
118
|
-
});
|
|
119
|
-
await storeDokployCredentials('new-token', 'https://new.com', {
|
|
120
|
-
root: tempDir,
|
|
121
|
-
});
|
|
122
|
-
|
|
123
|
-
const creds = await getDokployCredentials({ root: tempDir });
|
|
124
|
-
expect(creds!.token).toBe('new-token');
|
|
125
|
-
expect(creds!.endpoint).toBe('https://new.com');
|
|
126
|
-
});
|
|
127
|
-
});
|
|
128
|
-
|
|
129
|
-
describe('getDokployCredentials', () => {
|
|
130
|
-
it('should return null when no credentials stored', async () => {
|
|
131
|
-
const creds = await getDokployCredentials({ root: tempDir });
|
|
132
|
-
expect(creds).toBeNull();
|
|
133
|
-
});
|
|
134
|
-
|
|
135
|
-
it('should return stored credentials', async () => {
|
|
136
|
-
await storeDokployCredentials('test-token', 'https://test.com', {
|
|
137
|
-
root: tempDir,
|
|
138
|
-
});
|
|
139
|
-
|
|
140
|
-
const creds = await getDokployCredentials({ root: tempDir });
|
|
141
|
-
expect(creds).toEqual({
|
|
142
|
-
token: 'test-token',
|
|
143
|
-
endpoint: 'https://test.com',
|
|
144
|
-
});
|
|
145
|
-
});
|
|
146
|
-
});
|
|
147
|
-
|
|
148
|
-
describe('removeDokployCredentials', () => {
|
|
149
|
-
it('should return false when no credentials to remove', async () => {
|
|
150
|
-
const removed = await removeDokployCredentials({ root: tempDir });
|
|
151
|
-
expect(removed).toBe(false);
|
|
152
|
-
});
|
|
153
|
-
|
|
154
|
-
it('should remove dokploy credentials', async () => {
|
|
155
|
-
await storeDokployCredentials('test-token', 'https://test.com', {
|
|
156
|
-
root: tempDir,
|
|
157
|
-
});
|
|
158
|
-
|
|
159
|
-
const removed = await removeDokployCredentials({ root: tempDir });
|
|
160
|
-
expect(removed).toBe(true);
|
|
161
|
-
|
|
162
|
-
const creds = await getDokployCredentials({ root: tempDir });
|
|
163
|
-
expect(creds).toBeNull();
|
|
164
|
-
});
|
|
165
|
-
});
|
|
166
|
-
|
|
167
|
-
describe('getDokployToken', () => {
|
|
168
|
-
it('should return null when no token available', async () => {
|
|
169
|
-
const token = await getDokployToken({ root: tempDir });
|
|
170
|
-
expect(token).toBeNull();
|
|
171
|
-
});
|
|
172
|
-
|
|
173
|
-
it('should return stored token', async () => {
|
|
174
|
-
await storeDokployCredentials('stored-token', 'https://test.com', {
|
|
175
|
-
root: tempDir,
|
|
176
|
-
});
|
|
177
|
-
|
|
178
|
-
const token = await getDokployToken({ root: tempDir });
|
|
179
|
-
expect(token).toBe('stored-token');
|
|
180
|
-
});
|
|
181
|
-
|
|
182
|
-
it('should prefer environment variable over stored token', async () => {
|
|
183
|
-
await storeDokployCredentials('stored-token', 'https://test.com', {
|
|
184
|
-
root: tempDir,
|
|
185
|
-
});
|
|
186
|
-
process.env.DOKPLOY_API_TOKEN = 'env-token';
|
|
187
|
-
|
|
188
|
-
try {
|
|
189
|
-
const token = await getDokployToken({ root: tempDir });
|
|
190
|
-
expect(token).toBe('env-token');
|
|
191
|
-
} finally {
|
|
192
|
-
delete process.env.DOKPLOY_API_TOKEN;
|
|
193
|
-
}
|
|
194
|
-
});
|
|
195
|
-
|
|
196
|
-
it('should fall back to stored token when env var not set', async () => {
|
|
197
|
-
delete process.env.DOKPLOY_API_TOKEN;
|
|
198
|
-
await storeDokployCredentials('stored-token', 'https://test.com', {
|
|
199
|
-
root: tempDir,
|
|
200
|
-
});
|
|
201
|
-
|
|
202
|
-
const token = await getDokployToken({ root: tempDir });
|
|
203
|
-
expect(token).toBe('stored-token');
|
|
204
|
-
});
|
|
205
|
-
});
|
|
206
|
-
|
|
207
|
-
describe('storeDokployRegistryId', () => {
|
|
208
|
-
it('should throw error when no dokploy credentials exist', async () => {
|
|
209
|
-
await expect(
|
|
210
|
-
storeDokployRegistryId('reg_123', { root: tempDir }),
|
|
211
|
-
).rejects.toThrow('Dokploy credentials not found');
|
|
212
|
-
});
|
|
213
|
-
|
|
214
|
-
it('should store registryId with existing credentials', async () => {
|
|
215
|
-
await storeDokployCredentials('token', 'https://test.com', {
|
|
216
|
-
root: tempDir,
|
|
217
|
-
});
|
|
218
|
-
|
|
219
|
-
await storeDokployRegistryId('reg_123', { root: tempDir });
|
|
220
|
-
|
|
221
|
-
const creds = await readCredentials({ root: tempDir });
|
|
222
|
-
expect(creds.dokploy?.registryId).toBe('reg_123');
|
|
223
|
-
});
|
|
224
|
-
|
|
225
|
-
it('should overwrite existing registryId', async () => {
|
|
226
|
-
await storeDokployCredentials('token', 'https://test.com', {
|
|
227
|
-
root: tempDir,
|
|
228
|
-
});
|
|
229
|
-
await storeDokployRegistryId('old_reg', { root: tempDir });
|
|
230
|
-
await storeDokployRegistryId('new_reg', { root: tempDir });
|
|
231
|
-
|
|
232
|
-
const creds = await readCredentials({ root: tempDir });
|
|
233
|
-
expect(creds.dokploy?.registryId).toBe('new_reg');
|
|
234
|
-
});
|
|
235
|
-
});
|
|
236
|
-
|
|
237
|
-
describe('getDokployRegistryId', () => {
|
|
238
|
-
it('should return undefined when no credentials exist', async () => {
|
|
239
|
-
const registryId = await getDokployRegistryId({ root: tempDir });
|
|
240
|
-
expect(registryId).toBeUndefined();
|
|
241
|
-
});
|
|
242
|
-
|
|
243
|
-
it('should return undefined when credentials exist but no registryId', async () => {
|
|
244
|
-
await storeDokployCredentials('token', 'https://test.com', {
|
|
245
|
-
root: tempDir,
|
|
246
|
-
});
|
|
247
|
-
|
|
248
|
-
const registryId = await getDokployRegistryId({ root: tempDir });
|
|
249
|
-
expect(registryId).toBeUndefined();
|
|
250
|
-
});
|
|
251
|
-
|
|
252
|
-
it('should return stored registryId', async () => {
|
|
253
|
-
await storeDokployCredentials('token', 'https://test.com', {
|
|
254
|
-
root: tempDir,
|
|
255
|
-
});
|
|
256
|
-
await storeDokployRegistryId('reg_456', { root: tempDir });
|
|
257
|
-
|
|
258
|
-
const registryId = await getDokployRegistryId({ root: tempDir });
|
|
259
|
-
expect(registryId).toBe('reg_456');
|
|
260
|
-
});
|
|
261
|
-
});
|
|
262
|
-
|
|
263
|
-
describe('getDokployCredentials with registryId', () => {
|
|
264
|
-
it('should return registryId when stored', async () => {
|
|
265
|
-
await storeDokployCredentials('token', 'https://test.com', {
|
|
266
|
-
root: tempDir,
|
|
267
|
-
});
|
|
268
|
-
await storeDokployRegistryId('reg_789', { root: tempDir });
|
|
269
|
-
|
|
270
|
-
const creds = await getDokployCredentials({ root: tempDir });
|
|
271
|
-
expect(creds).toEqual({
|
|
272
|
-
token: 'token',
|
|
273
|
-
endpoint: 'https://test.com',
|
|
274
|
-
registryId: 'reg_789',
|
|
275
|
-
});
|
|
276
|
-
});
|
|
277
|
-
|
|
278
|
-
it('should return undefined registryId when not stored', async () => {
|
|
279
|
-
await storeDokployCredentials('token', 'https://test.com', {
|
|
280
|
-
root: tempDir,
|
|
281
|
-
});
|
|
282
|
-
|
|
283
|
-
const creds = await getDokployCredentials({ root: tempDir });
|
|
284
|
-
expect(creds?.registryId).toBeUndefined();
|
|
285
|
-
});
|
|
286
|
-
});
|
|
287
|
-
|
|
288
|
-
describe('getDokployEndpoint', () => {
|
|
289
|
-
it('should return null when no credentials exist', async () => {
|
|
290
|
-
const { getDokployEndpoint } = await import('../credentials');
|
|
291
|
-
const endpoint = await getDokployEndpoint({ root: tempDir });
|
|
292
|
-
expect(endpoint).toBeNull();
|
|
293
|
-
});
|
|
294
|
-
|
|
295
|
-
it('should return stored endpoint', async () => {
|
|
296
|
-
const { getDokployEndpoint } = await import('../credentials');
|
|
297
|
-
await storeDokployCredentials('token', 'https://my-dokploy.com', {
|
|
298
|
-
root: tempDir,
|
|
299
|
-
});
|
|
300
|
-
|
|
301
|
-
const endpoint = await getDokployEndpoint({ root: tempDir });
|
|
302
|
-
expect(endpoint).toBe('https://my-dokploy.com');
|
|
303
|
-
});
|
|
304
|
-
});
|
|
305
|
-
|
|
306
|
-
describe('removeAllCredentials', () => {
|
|
307
|
-
it('should remove credentials file', async () => {
|
|
308
|
-
const { removeAllCredentials } = await import('../credentials');
|
|
309
|
-
await storeDokployCredentials('token', 'https://test.com', {
|
|
310
|
-
root: tempDir,
|
|
311
|
-
});
|
|
312
|
-
|
|
313
|
-
// Verify file exists
|
|
314
|
-
const pathBefore = getCredentialsPath({ root: tempDir });
|
|
315
|
-
expect(existsSync(pathBefore)).toBe(true);
|
|
316
|
-
|
|
317
|
-
await removeAllCredentials({ root: tempDir });
|
|
318
|
-
|
|
319
|
-
// Verify file is removed
|
|
320
|
-
expect(existsSync(pathBefore)).toBe(false);
|
|
321
|
-
});
|
|
322
|
-
|
|
323
|
-
it('should not throw when credentials file does not exist', async () => {
|
|
324
|
-
const { removeAllCredentials } = await import('../credentials');
|
|
325
|
-
// Should not throw
|
|
326
|
-
await expect(
|
|
327
|
-
removeAllCredentials({ root: tempDir }),
|
|
328
|
-
).resolves.toBeUndefined();
|
|
329
|
-
});
|
|
330
|
-
});
|
|
331
|
-
});
|