@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,237 +0,0 @@
|
|
|
1
|
-
import { existsSync } from 'node:fs';
|
|
2
|
-
import { mkdir, rm } from 'node:fs/promises';
|
|
3
|
-
import { tmpdir } from 'node:os';
|
|
4
|
-
import { join } from 'node:path';
|
|
5
|
-
import { HttpResponse, http } from 'msw';
|
|
6
|
-
import { setupServer } from 'msw/node';
|
|
7
|
-
import { afterEach, beforeEach, describe, expect, it } from 'vitest';
|
|
8
|
-
|
|
9
|
-
import {
|
|
10
|
-
getDokployCredentials,
|
|
11
|
-
removeDokployCredentials,
|
|
12
|
-
storeDokployCredentials,
|
|
13
|
-
} from '../credentials';
|
|
14
|
-
import { maskToken, validateDokployToken } from '../index';
|
|
15
|
-
|
|
16
|
-
// MSW server for mocking API calls
|
|
17
|
-
const server = setupServer();
|
|
18
|
-
|
|
19
|
-
describe('auth commands', () => {
|
|
20
|
-
let tempDir: string;
|
|
21
|
-
|
|
22
|
-
beforeEach(async () => {
|
|
23
|
-
tempDir = join(tmpdir(), `gkm-auth-cmd-test-${Date.now()}`);
|
|
24
|
-
await mkdir(tempDir, { recursive: true });
|
|
25
|
-
server.listen({ onUnhandledRequest: 'bypass' });
|
|
26
|
-
});
|
|
27
|
-
|
|
28
|
-
afterEach(async () => {
|
|
29
|
-
server.resetHandlers();
|
|
30
|
-
server.close();
|
|
31
|
-
if (existsSync(tempDir)) {
|
|
32
|
-
await rm(tempDir, { recursive: true });
|
|
33
|
-
}
|
|
34
|
-
});
|
|
35
|
-
|
|
36
|
-
describe('validateDokployToken', () => {
|
|
37
|
-
it('should return true for valid token', async () => {
|
|
38
|
-
server.use(
|
|
39
|
-
http.get('https://dokploy.example.com/api/project.all', () => {
|
|
40
|
-
return HttpResponse.json([{ projectId: 'proj_1', name: 'Test' }]);
|
|
41
|
-
}),
|
|
42
|
-
);
|
|
43
|
-
|
|
44
|
-
const result = await validateDokployToken(
|
|
45
|
-
'https://dokploy.example.com',
|
|
46
|
-
'valid-token',
|
|
47
|
-
);
|
|
48
|
-
|
|
49
|
-
expect(result).toBe(true);
|
|
50
|
-
});
|
|
51
|
-
|
|
52
|
-
it('should return false for invalid token (401)', async () => {
|
|
53
|
-
server.use(
|
|
54
|
-
http.get('https://dokploy.example.com/api/project.all', () => {
|
|
55
|
-
return new HttpResponse(null, { status: 401 });
|
|
56
|
-
}),
|
|
57
|
-
);
|
|
58
|
-
|
|
59
|
-
const result = await validateDokployToken(
|
|
60
|
-
'https://dokploy.example.com',
|
|
61
|
-
'invalid-token',
|
|
62
|
-
);
|
|
63
|
-
|
|
64
|
-
expect(result).toBe(false);
|
|
65
|
-
});
|
|
66
|
-
|
|
67
|
-
it('should return false for server error (500)', async () => {
|
|
68
|
-
server.use(
|
|
69
|
-
http.get('https://dokploy.example.com/api/project.all', () => {
|
|
70
|
-
return new HttpResponse(null, { status: 500 });
|
|
71
|
-
}),
|
|
72
|
-
);
|
|
73
|
-
|
|
74
|
-
const result = await validateDokployToken(
|
|
75
|
-
'https://dokploy.example.com',
|
|
76
|
-
'token',
|
|
77
|
-
);
|
|
78
|
-
|
|
79
|
-
expect(result).toBe(false);
|
|
80
|
-
});
|
|
81
|
-
|
|
82
|
-
it('should return false on network error', async () => {
|
|
83
|
-
server.use(
|
|
84
|
-
http.get('https://dokploy.example.com/api/project.all', () => {
|
|
85
|
-
return HttpResponse.error();
|
|
86
|
-
}),
|
|
87
|
-
);
|
|
88
|
-
|
|
89
|
-
const result = await validateDokployToken(
|
|
90
|
-
'https://dokploy.example.com',
|
|
91
|
-
'token',
|
|
92
|
-
);
|
|
93
|
-
|
|
94
|
-
expect(result).toBe(false);
|
|
95
|
-
});
|
|
96
|
-
});
|
|
97
|
-
|
|
98
|
-
describe('maskToken', () => {
|
|
99
|
-
it('should mask long tokens showing first and last 4 chars', () => {
|
|
100
|
-
expect(maskToken('abcdefghijklmnop')).toBe('abcd...mnop');
|
|
101
|
-
});
|
|
102
|
-
|
|
103
|
-
it('should fully mask tokens 8 chars or less', () => {
|
|
104
|
-
expect(maskToken('short')).toBe('****');
|
|
105
|
-
expect(maskToken('12345678')).toBe('****');
|
|
106
|
-
});
|
|
107
|
-
|
|
108
|
-
it('should handle exactly 9 character token', () => {
|
|
109
|
-
expect(maskToken('123456789')).toBe('1234...6789');
|
|
110
|
-
});
|
|
111
|
-
|
|
112
|
-
it('should handle very long tokens', () => {
|
|
113
|
-
const longToken = 'a'.repeat(100);
|
|
114
|
-
expect(maskToken(longToken)).toBe('aaaa...aaaa');
|
|
115
|
-
});
|
|
116
|
-
|
|
117
|
-
it('should handle empty string', () => {
|
|
118
|
-
expect(maskToken('')).toBe('****');
|
|
119
|
-
});
|
|
120
|
-
});
|
|
121
|
-
|
|
122
|
-
describe('credentials flow', () => {
|
|
123
|
-
it('should store and retrieve credentials', async () => {
|
|
124
|
-
await storeDokployCredentials('my-token', 'https://dokploy.example.com', {
|
|
125
|
-
root: tempDir,
|
|
126
|
-
});
|
|
127
|
-
|
|
128
|
-
const creds = await getDokployCredentials({ root: tempDir });
|
|
129
|
-
expect(creds).not.toBeNull();
|
|
130
|
-
expect(creds!.token).toBe('my-token');
|
|
131
|
-
expect(creds!.endpoint).toBe('https://dokploy.example.com');
|
|
132
|
-
});
|
|
133
|
-
|
|
134
|
-
it('should remove credentials', async () => {
|
|
135
|
-
await storeDokployCredentials('my-token', 'https://dokploy.example.com', {
|
|
136
|
-
root: tempDir,
|
|
137
|
-
});
|
|
138
|
-
|
|
139
|
-
const removed = await removeDokployCredentials({ root: tempDir });
|
|
140
|
-
expect(removed).toBe(true);
|
|
141
|
-
|
|
142
|
-
const creds = await getDokployCredentials({ root: tempDir });
|
|
143
|
-
expect(creds).toBeNull();
|
|
144
|
-
});
|
|
145
|
-
|
|
146
|
-
it('should return false when removing non-existent credentials', async () => {
|
|
147
|
-
const removed = await removeDokployCredentials({ root: tempDir });
|
|
148
|
-
expect(removed).toBe(false);
|
|
149
|
-
});
|
|
150
|
-
});
|
|
151
|
-
});
|
|
152
|
-
|
|
153
|
-
describe('URL normalization', () => {
|
|
154
|
-
it('should remove trailing slash from endpoint', () => {
|
|
155
|
-
const endpoint = 'https://dokploy.example.com/'.replace(/\/$/, '');
|
|
156
|
-
expect(endpoint).toBe('https://dokploy.example.com');
|
|
157
|
-
});
|
|
158
|
-
|
|
159
|
-
it('should not modify endpoint without trailing slash', () => {
|
|
160
|
-
const endpoint = 'https://dokploy.example.com'.replace(/\/$/, '');
|
|
161
|
-
expect(endpoint).toBe('https://dokploy.example.com');
|
|
162
|
-
});
|
|
163
|
-
|
|
164
|
-
it('should validate URL format', () => {
|
|
165
|
-
expect(() => new URL('https://dokploy.example.com')).not.toThrow();
|
|
166
|
-
expect(() => new URL('invalid-url')).toThrow();
|
|
167
|
-
});
|
|
168
|
-
});
|
|
169
|
-
|
|
170
|
-
describe('logoutCommand', () => {
|
|
171
|
-
let tempDir: string;
|
|
172
|
-
|
|
173
|
-
beforeEach(async () => {
|
|
174
|
-
tempDir = join(tmpdir(), `gkm-logout-test-${Date.now()}`);
|
|
175
|
-
await mkdir(tempDir, { recursive: true });
|
|
176
|
-
});
|
|
177
|
-
|
|
178
|
-
afterEach(async () => {
|
|
179
|
-
if (existsSync(tempDir)) {
|
|
180
|
-
await rm(tempDir, { recursive: true });
|
|
181
|
-
}
|
|
182
|
-
});
|
|
183
|
-
|
|
184
|
-
it('should remove dokploy credentials', async () => {
|
|
185
|
-
// First store credentials
|
|
186
|
-
await storeDokployCredentials('my-token', 'https://dokploy.example.com', {
|
|
187
|
-
root: tempDir,
|
|
188
|
-
});
|
|
189
|
-
|
|
190
|
-
// Verify they exist
|
|
191
|
-
let creds = await getDokployCredentials({ root: tempDir });
|
|
192
|
-
expect(creds).not.toBeNull();
|
|
193
|
-
|
|
194
|
-
// Remove credentials
|
|
195
|
-
const removed = await removeDokployCredentials({ root: tempDir });
|
|
196
|
-
expect(removed).toBe(true);
|
|
197
|
-
|
|
198
|
-
// Verify they're gone
|
|
199
|
-
creds = await getDokployCredentials({ root: tempDir });
|
|
200
|
-
expect(creds).toBeNull();
|
|
201
|
-
});
|
|
202
|
-
|
|
203
|
-
it('should return false when no credentials to remove', async () => {
|
|
204
|
-
const removed = await removeDokployCredentials({ root: tempDir });
|
|
205
|
-
expect(removed).toBe(false);
|
|
206
|
-
});
|
|
207
|
-
});
|
|
208
|
-
|
|
209
|
-
describe('whoamiCommand helpers', () => {
|
|
210
|
-
let tempDir: string;
|
|
211
|
-
|
|
212
|
-
beforeEach(async () => {
|
|
213
|
-
tempDir = join(tmpdir(), `gkm-whoami-test-${Date.now()}`);
|
|
214
|
-
await mkdir(tempDir, { recursive: true });
|
|
215
|
-
});
|
|
216
|
-
|
|
217
|
-
afterEach(async () => {
|
|
218
|
-
if (existsSync(tempDir)) {
|
|
219
|
-
await rm(tempDir, { recursive: true });
|
|
220
|
-
}
|
|
221
|
-
});
|
|
222
|
-
|
|
223
|
-
it('should return null when no credentials stored', async () => {
|
|
224
|
-
const creds = await getDokployCredentials({ root: tempDir });
|
|
225
|
-
expect(creds).toBeNull();
|
|
226
|
-
});
|
|
227
|
-
|
|
228
|
-
it('should return credentials when stored', async () => {
|
|
229
|
-
await storeDokployCredentials('test-token', 'https://test.example.com', {
|
|
230
|
-
root: tempDir,
|
|
231
|
-
});
|
|
232
|
-
|
|
233
|
-
const creds = await getDokployCredentials({ root: tempDir });
|
|
234
|
-
expect(creds).not.toBeNull();
|
|
235
|
-
expect(creds!.endpoint).toBe('https://test.example.com');
|
|
236
|
-
});
|
|
237
|
-
});
|
package/src/auth/credentials.ts
DELETED
|
@@ -1,286 +0,0 @@
|
|
|
1
|
-
import { existsSync, mkdirSync } from 'node:fs';
|
|
2
|
-
import { readFile, unlink, writeFile } from 'node:fs/promises';
|
|
3
|
-
import { homedir } from 'node:os';
|
|
4
|
-
import { join } from 'node:path';
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Stored credentials for various services
|
|
8
|
-
*/
|
|
9
|
-
export interface StoredCredentials {
|
|
10
|
-
dokploy?: {
|
|
11
|
-
/** API token */
|
|
12
|
-
token: string;
|
|
13
|
-
/** Dokploy endpoint URL */
|
|
14
|
-
endpoint: string;
|
|
15
|
-
/** Registry ID in Dokploy (for Docker image pulls) */
|
|
16
|
-
registryId?: string;
|
|
17
|
-
/** When the credentials were stored */
|
|
18
|
-
storedAt: string;
|
|
19
|
-
};
|
|
20
|
-
hostinger?: {
|
|
21
|
-
/** API token from hpanel.hostinger.com/profile/api */
|
|
22
|
-
token: string;
|
|
23
|
-
/** When the credentials were stored */
|
|
24
|
-
storedAt: string;
|
|
25
|
-
};
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* Options for credential operations
|
|
30
|
-
*/
|
|
31
|
-
export interface CredentialOptions {
|
|
32
|
-
/** Root directory for credentials storage (default: user home directory) */
|
|
33
|
-
root?: string;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
/**
|
|
37
|
-
* Get the path to the credentials directory
|
|
38
|
-
*/
|
|
39
|
-
export function getCredentialsDir(options?: CredentialOptions): string {
|
|
40
|
-
const root = options?.root ?? homedir();
|
|
41
|
-
return join(root, '.gkm');
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
/**
|
|
45
|
-
* Get the path to the credentials file
|
|
46
|
-
*/
|
|
47
|
-
export function getCredentialsPath(options?: CredentialOptions): string {
|
|
48
|
-
return join(getCredentialsDir(options), 'credentials.json');
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* Ensure the credentials directory exists
|
|
53
|
-
*/
|
|
54
|
-
function ensureCredentialsDir(options?: CredentialOptions): void {
|
|
55
|
-
const dir = getCredentialsDir(options);
|
|
56
|
-
if (!existsSync(dir)) {
|
|
57
|
-
mkdirSync(dir, { recursive: true, mode: 0o700 });
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
/**
|
|
62
|
-
* Read stored credentials from disk
|
|
63
|
-
*/
|
|
64
|
-
export async function readCredentials(
|
|
65
|
-
options?: CredentialOptions,
|
|
66
|
-
): Promise<StoredCredentials> {
|
|
67
|
-
const path = getCredentialsPath(options);
|
|
68
|
-
|
|
69
|
-
if (!existsSync(path)) {
|
|
70
|
-
return {};
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
try {
|
|
74
|
-
const content = await readFile(path, 'utf-8');
|
|
75
|
-
return JSON.parse(content) as StoredCredentials;
|
|
76
|
-
} catch {
|
|
77
|
-
return {};
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
/**
|
|
82
|
-
* Write credentials to disk
|
|
83
|
-
*/
|
|
84
|
-
export async function writeCredentials(
|
|
85
|
-
credentials: StoredCredentials,
|
|
86
|
-
options?: CredentialOptions,
|
|
87
|
-
): Promise<void> {
|
|
88
|
-
ensureCredentialsDir(options);
|
|
89
|
-
const path = getCredentialsPath(options);
|
|
90
|
-
|
|
91
|
-
await writeFile(path, JSON.stringify(credentials, null, 2), {
|
|
92
|
-
mode: 0o600, // Owner read/write only
|
|
93
|
-
});
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
/**
|
|
97
|
-
* Store Dokploy credentials
|
|
98
|
-
*/
|
|
99
|
-
export async function storeDokployCredentials(
|
|
100
|
-
token: string,
|
|
101
|
-
endpoint: string,
|
|
102
|
-
options?: CredentialOptions,
|
|
103
|
-
): Promise<void> {
|
|
104
|
-
const credentials = await readCredentials(options);
|
|
105
|
-
|
|
106
|
-
credentials.dokploy = {
|
|
107
|
-
token,
|
|
108
|
-
endpoint,
|
|
109
|
-
storedAt: new Date().toISOString(),
|
|
110
|
-
};
|
|
111
|
-
|
|
112
|
-
await writeCredentials(credentials, options);
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
/**
|
|
116
|
-
* Get stored Dokploy credentials
|
|
117
|
-
*/
|
|
118
|
-
export async function getDokployCredentials(
|
|
119
|
-
options?: CredentialOptions,
|
|
120
|
-
): Promise<{
|
|
121
|
-
token: string;
|
|
122
|
-
endpoint: string;
|
|
123
|
-
registryId?: string;
|
|
124
|
-
} | null> {
|
|
125
|
-
const credentials = await readCredentials(options);
|
|
126
|
-
|
|
127
|
-
if (!credentials.dokploy) {
|
|
128
|
-
return null;
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
return {
|
|
132
|
-
token: credentials.dokploy.token,
|
|
133
|
-
endpoint: credentials.dokploy.endpoint,
|
|
134
|
-
registryId: credentials.dokploy.registryId,
|
|
135
|
-
};
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
/**
|
|
139
|
-
* Remove Dokploy credentials
|
|
140
|
-
*/
|
|
141
|
-
export async function removeDokployCredentials(
|
|
142
|
-
options?: CredentialOptions,
|
|
143
|
-
): Promise<boolean> {
|
|
144
|
-
const credentials = await readCredentials(options);
|
|
145
|
-
|
|
146
|
-
if (!credentials.dokploy) {
|
|
147
|
-
return false;
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
delete credentials.dokploy;
|
|
151
|
-
await writeCredentials(credentials, options);
|
|
152
|
-
return true;
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
/**
|
|
156
|
-
* Remove all stored credentials
|
|
157
|
-
*/
|
|
158
|
-
export async function removeAllCredentials(
|
|
159
|
-
options?: CredentialOptions,
|
|
160
|
-
): Promise<void> {
|
|
161
|
-
const path = getCredentialsPath(options);
|
|
162
|
-
|
|
163
|
-
if (existsSync(path)) {
|
|
164
|
-
await unlink(path);
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
/**
|
|
169
|
-
* Get Dokploy API token, checking stored credentials first, then environment
|
|
170
|
-
*/
|
|
171
|
-
export async function getDokployToken(
|
|
172
|
-
options?: CredentialOptions,
|
|
173
|
-
): Promise<string | null> {
|
|
174
|
-
// First check environment variable (takes precedence)
|
|
175
|
-
const envToken = process.env.DOKPLOY_API_TOKEN;
|
|
176
|
-
if (envToken) {
|
|
177
|
-
return envToken;
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
// Then check stored credentials
|
|
181
|
-
const stored = await getDokployCredentials(options);
|
|
182
|
-
if (stored) {
|
|
183
|
-
return stored.token;
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
return null;
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
/**
|
|
190
|
-
* Get Dokploy endpoint from stored credentials
|
|
191
|
-
*/
|
|
192
|
-
export async function getDokployEndpoint(
|
|
193
|
-
options?: CredentialOptions,
|
|
194
|
-
): Promise<string | null> {
|
|
195
|
-
const stored = await getDokployCredentials(options);
|
|
196
|
-
return stored?.endpoint ?? null;
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
/**
|
|
200
|
-
* Store Dokploy registry ID
|
|
201
|
-
*/
|
|
202
|
-
export async function storeDokployRegistryId(
|
|
203
|
-
registryId: string,
|
|
204
|
-
options?: CredentialOptions,
|
|
205
|
-
): Promise<void> {
|
|
206
|
-
const credentials = await readCredentials(options);
|
|
207
|
-
|
|
208
|
-
if (!credentials.dokploy) {
|
|
209
|
-
throw new Error(
|
|
210
|
-
'Dokploy credentials not found. Run "gkm login --service dokploy" first.',
|
|
211
|
-
);
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
credentials.dokploy.registryId = registryId;
|
|
215
|
-
await writeCredentials(credentials, options);
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
/**
|
|
219
|
-
* Get Dokploy registry ID from stored credentials
|
|
220
|
-
*/
|
|
221
|
-
export async function getDokployRegistryId(
|
|
222
|
-
options?: CredentialOptions,
|
|
223
|
-
): Promise<string | undefined> {
|
|
224
|
-
const stored = await getDokployCredentials(options);
|
|
225
|
-
return stored?.registryId ?? undefined;
|
|
226
|
-
}
|
|
227
|
-
|
|
228
|
-
// ============================================
|
|
229
|
-
// Hostinger credentials
|
|
230
|
-
// ============================================
|
|
231
|
-
|
|
232
|
-
/**
|
|
233
|
-
* Store Hostinger API token
|
|
234
|
-
*
|
|
235
|
-
* @param token - API token from hpanel.hostinger.com/profile/api
|
|
236
|
-
*/
|
|
237
|
-
export async function storeHostingerToken(
|
|
238
|
-
token: string,
|
|
239
|
-
options?: CredentialOptions,
|
|
240
|
-
): Promise<void> {
|
|
241
|
-
const credentials = await readCredentials(options);
|
|
242
|
-
|
|
243
|
-
credentials.hostinger = {
|
|
244
|
-
token,
|
|
245
|
-
storedAt: new Date().toISOString(),
|
|
246
|
-
};
|
|
247
|
-
|
|
248
|
-
await writeCredentials(credentials, options);
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
/**
|
|
252
|
-
* Get stored Hostinger API token
|
|
253
|
-
*
|
|
254
|
-
* Checks environment variable first (HOSTINGER_API_TOKEN),
|
|
255
|
-
* then falls back to stored credentials.
|
|
256
|
-
*/
|
|
257
|
-
export async function getHostingerToken(
|
|
258
|
-
options?: CredentialOptions,
|
|
259
|
-
): Promise<string | null> {
|
|
260
|
-
// First check environment variable (takes precedence)
|
|
261
|
-
const envToken = process.env.HOSTINGER_API_TOKEN;
|
|
262
|
-
if (envToken) {
|
|
263
|
-
return envToken;
|
|
264
|
-
}
|
|
265
|
-
|
|
266
|
-
// Then check stored credentials
|
|
267
|
-
const credentials = await readCredentials(options);
|
|
268
|
-
return credentials.hostinger?.token ?? null;
|
|
269
|
-
}
|
|
270
|
-
|
|
271
|
-
/**
|
|
272
|
-
* Remove Hostinger credentials
|
|
273
|
-
*/
|
|
274
|
-
export async function removeHostingerCredentials(
|
|
275
|
-
options?: CredentialOptions,
|
|
276
|
-
): Promise<boolean> {
|
|
277
|
-
const credentials = await readCredentials(options);
|
|
278
|
-
|
|
279
|
-
if (!credentials.hostinger) {
|
|
280
|
-
return false;
|
|
281
|
-
}
|
|
282
|
-
|
|
283
|
-
delete credentials.hostinger;
|
|
284
|
-
await writeCredentials(credentials, options);
|
|
285
|
-
return true;
|
|
286
|
-
}
|