@geekmidas/cli 10.0.0-alpha.11 → 10.0.0-alpha.12
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 +13 -40
- package/dist/{bundler-CaTGtiaO.cjs → bundler-BMekgx7a.cjs} +2 -17
- package/dist/bundler-BMekgx7a.cjs.map +1 -0
- package/dist/{bundler-S3ek7ea-.mjs → bundler-Bux2iF-v.mjs} +2 -17
- package/dist/bundler-Bux2iF-v.mjs.map +1 -0
- package/dist/{config-B0L2tvvC.mjs → config-DTsVjKZD.mjs} +3 -3
- package/dist/{config-B0L2tvvC.mjs.map → config-DTsVjKZD.mjs.map} +1 -1
- package/dist/{config-HhDpJmLO.cjs → config-RYR9j6EF.cjs} +3 -3
- package/dist/{config-HhDpJmLO.cjs.map → config-RYR9j6EF.cjs.map} +1 -1
- package/dist/config.cjs +3 -3
- package/dist/config.d.cts +2 -2
- package/dist/config.d.mts +2 -2
- package/dist/config.mjs +3 -3
- package/dist/{credentials-B2Pyh3bJ.cjs → credentials-DQRvPz2S.cjs} +1165 -1077
- package/dist/credentials-DQRvPz2S.cjs.map +1 -0
- package/dist/{credentials-CZrys9C5.mjs → credentials-jMJC63qs.mjs} +1144 -1068
- package/dist/credentials-jMJC63qs.mjs.map +1 -0
- package/dist/{discover-CAlFgYec.mjs → discover-BYHQwQqu.mjs} +15 -2
- package/dist/discover-BYHQwQqu.mjs.map +1 -0
- package/dist/{discover-DTmFeloL.cjs → discover-DmW9Bscc.cjs} +20 -1
- package/dist/discover-DmW9Bscc.cjs.map +1 -0
- package/dist/{fullstack-secrets-METaRLS1.mjs → fullstack-secrets-B6KBHf-g.mjs} +2 -2
- package/dist/{fullstack-secrets-METaRLS1.mjs.map → fullstack-secrets-B6KBHf-g.mjs.map} +1 -1
- package/dist/{fullstack-secrets-D6MyHhQP.cjs → fullstack-secrets-DL8v0y4D.cjs} +1 -13
- package/dist/{fullstack-secrets-D6MyHhQP.cjs.map → fullstack-secrets-DL8v0y4D.cjs.map} +1 -1
- package/dist/{github-BrvaPkFf.cjs → github-BThvbf2W.cjs} +4 -4
- package/dist/{github-BrvaPkFf.cjs.map → github-BThvbf2W.cjs.map} +1 -1
- package/dist/{github-CrpsXSfV.mjs → github-DpMZurEK.mjs} +4 -4
- package/dist/{github-CrpsXSfV.mjs.map → github-DpMZurEK.mjs.map} +1 -1
- package/dist/{index-CR5urhWX.d.cts → index-BzJ7QJ9c.d.mts} +2 -6
- package/dist/index-BzJ7QJ9c.d.mts.map +1 -0
- package/dist/{index-Ayxg_DQY.d.mts → index-CfMjtdVC.d.cts} +2 -6
- package/dist/index-CfMjtdVC.d.cts.map +1 -0
- package/dist/index.cjs +403 -1356
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +404 -1357
- package/dist/index.mjs.map +1 -1
- package/dist/{openapi-y1d7Kalt.mjs → openapi-Bs3-5q_r.mjs} +3 -3
- package/dist/{openapi-y1d7Kalt.mjs.map → openapi-Bs3-5q_r.mjs.map} +1 -1
- package/dist/{openapi-DaKlTKxz.cjs → openapi-DWLTsYLL.cjs} +3 -3
- package/dist/{openapi-DaKlTKxz.cjs.map → openapi-DWLTsYLL.cjs.map} +1 -1
- package/dist/{openapi-react-query-DoR5CmzQ.mjs → openapi-react-query-Byltvm_7.mjs} +1 -1
- package/dist/{openapi-react-query-DoR5CmzQ.mjs.map → openapi-react-query-Byltvm_7.mjs.map} +1 -1
- package/dist/{openapi-react-query-BKH334Ug.cjs → openapi-react-query-CmJ1xDbn.cjs} +1 -1
- package/dist/{openapi-react-query-BKH334Ug.cjs.map → openapi-react-query-CmJ1xDbn.cjs.map} +1 -1
- package/dist/openapi-react-query.cjs +1 -1
- package/dist/openapi-react-query.mjs +1 -1
- package/dist/openapi.cjs +4 -4
- package/dist/openapi.d.cts +1 -1
- package/dist/openapi.d.mts +1 -1
- package/dist/openapi.mjs +4 -4
- package/dist/reconcile/public.cjs +1 -1
- package/dist/reconcile/public.d.cts +1 -1
- package/dist/reconcile/public.d.mts +1 -1
- package/dist/reconcile/public.mjs +1 -1
- package/dist/{reconcile-C13ERt1U.mjs → reconcile-BI0tWkwz.mjs} +2 -2
- package/dist/{reconcile-C13ERt1U.mjs.map → reconcile-BI0tWkwz.mjs.map} +1 -1
- package/dist/{reconcile-CYMhFSYy.cjs → reconcile-Bhw5fmKu.cjs} +2 -2
- package/dist/{reconcile-CYMhFSYy.cjs.map → reconcile-Bhw5fmKu.cjs.map} +1 -1
- package/dist/setup-BmLoNrDX.mjs +12 -0
- package/dist/setup-BrR1_xGy.cjs +12 -0
- package/dist/{setup-DOv92pIu.cjs → setup-BsNR2LBG.cjs} +14 -20
- package/dist/setup-BsNR2LBG.cjs.map +1 -0
- package/dist/{setup-DQo_h_yK.mjs → setup-D5-JMknk.mjs} +14 -20
- package/dist/setup-D5-JMknk.mjs.map +1 -0
- package/dist/{types-Y3fKQSAK.d.cts → types-DVIx8I1N.d.mts} +4 -274
- package/dist/types-DVIx8I1N.d.mts.map +1 -0
- package/dist/{types-CL7jPFM2.d.mts → types-PMP_qXRY.d.cts} +4 -274
- package/dist/types-PMP_qXRY.d.cts.map +1 -0
- package/dist/workspace/index.cjs +1 -1
- package/dist/workspace/index.d.cts +3 -3
- package/dist/workspace/index.d.mts +3 -3
- package/dist/workspace/index.mjs +1 -1
- package/dist/{workspace-DQxxs7Jk.cjs → workspace-Cji6lE8E.cjs} +4 -4
- package/dist/workspace-CkJAtRIX.mjs +9 -0
- package/dist/{workspace-DaEX7FEg.mjs → workspace-CtnZnWsa.mjs} +16 -68
- package/dist/workspace-CtnZnWsa.mjs.map +1 -0
- package/dist/{workspace-C-a3G_U0.cjs → workspace-DPV7FtAv.cjs} +16 -68
- package/dist/workspace-DPV7FtAv.cjs.map +1 -0
- package/package.json +11 -11
- package/dist/bundler-CaTGtiaO.cjs.map +0 -1
- package/dist/bundler-S3ek7ea-.mjs.map +0 -1
- package/dist/credentials-B2Pyh3bJ.cjs.map +0 -1
- package/dist/credentials-CZrys9C5.mjs.map +0 -1
- package/dist/discover-CAlFgYec.mjs.map +0 -1
- package/dist/discover-DTmFeloL.cjs.map +0 -1
- package/dist/index-Ayxg_DQY.d.mts.map +0 -1
- package/dist/index-CR5urhWX.d.cts.map +0 -1
- package/dist/setup-BWgMs4gg.mjs +0 -12
- package/dist/setup-DOv92pIu.cjs.map +0 -1
- package/dist/setup-DQo_h_yK.mjs.map +0 -1
- package/dist/setup-lCx_DcUo.cjs +0 -12
- package/dist/types-CL7jPFM2.d.mts.map +0 -1
- package/dist/types-Y3fKQSAK.d.cts.map +0 -1
- package/dist/workspace-C-a3G_U0.cjs.map +0 -1
- package/dist/workspace-DaEX7FEg.mjs.map +0 -1
- package/dist/workspace-DbI580qS.mjs +0 -9
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup-D5-JMknk.mjs","names":["logger","platform: NodeJS.Platform","certificate: string","options: TrustOptions","root: string","url: string","options: { assumeYes?: boolean }","path: string","platform: string","options: SetupOptions","loadedConfig: LoadedConfig","workspace: NormalizedWorkspace","stage: string","containers: readonly string[]","byContainer: Readonly<Record<string, ComposeServiceName>>","secrets: StageSecrets","missing: Record<string, string>","cwd: string"],"sources":["../src/trust/index.ts","../src/setup/index.ts"],"sourcesContent":["/**\n * Installing the local edge's certificate authority into the OS trust store.\n *\n * `NODE_EXTRA_CA_CERTS` covers everything gkm starts — the dev server, the test\n * suite, anything under `gkm exec` — because reconcile injects it. A browser\n * reads none of that: it asks the operating system, so until the root is in the\n * system store a local `https://` address is \"not secure\", which is true and\n * unhelpful.\n *\n * A separate command rather than part of `gkm setup`, for one reason: this\n * needs `sudo`, and a setup that silently escalates on every run is a worse\n * trade than one that tells you what to type. Caddy's own `caddy trust` draws\n * the line in the same place.\n */\n\nimport { execFile } from 'node:child_process';\nimport { existsSync } from 'node:fs';\nimport { copyFile, mkdir, readFile, writeFile } from 'node:fs/promises';\nimport { dirname, join } from 'node:path';\nimport { promisify } from 'node:util';\nimport prompts from 'prompts';\nimport { loadWorkspaceConfig } from '../config.js';\nimport { LOCAL_CA_PATH } from '../reconcile/index.js';\n\nconst logger = console;\n\nconst run = promisify(execFile);\n\nexport interface TrustOptions {\n\t/** Print the commands rather than running them. */\n\tdryRun?: boolean;\n}\n\n/**\n * How each platform is told about a new authority.\n *\n * Separate rather than shelled through one script because the failure modes\n * differ and the message should name the real one: macOS refuses without an\n * admin password, Debian needs the file in a specific directory before its\n * updater will look at it.\n */\nfunction installation(\n\tplatform: NodeJS.Platform,\n\tcertificate: string,\n): { describe: string; steps: [string, string[]][] } {\n\tif (platform === 'darwin') {\n\t\treturn {\n\t\t\tdescribe: 'the System keychain',\n\t\t\tsteps: [\n\t\t\t\t[\n\t\t\t\t\t'sudo',\n\t\t\t\t\t[\n\t\t\t\t\t\t'security',\n\t\t\t\t\t\t'add-trusted-cert',\n\t\t\t\t\t\t'-d',\n\t\t\t\t\t\t'-r',\n\t\t\t\t\t\t'trustRoot',\n\t\t\t\t\t\t'-k',\n\t\t\t\t\t\t'/Library/Keychains/System.keychain',\n\t\t\t\t\t\tcertificate,\n\t\t\t\t\t],\n\t\t\t\t],\n\t\t\t],\n\t\t};\n\t}\n\n\tif (platform === 'linux') {\n\t\t// Debian and Fedora keep anchors in different places and run different\n\t\t// updaters. Whichever directory exists is the one this system uses.\n\t\tconst debian = existsSync('/usr/local/share/ca-certificates');\n\n\t\treturn {\n\t\t\tdescribe: debian ? 'the system CA bundle' : 'the system trust anchors',\n\t\t\tsteps: debian\n\t\t\t\t? [\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t'sudo',\n\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t'cp',\n\t\t\t\t\t\t\t\tcertificate,\n\t\t\t\t\t\t\t\t'/usr/local/share/ca-certificates/gkm-local-ca.crt',\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t],\n\t\t\t\t\t\t['sudo', ['update-ca-certificates']],\n\t\t\t\t\t]\n\t\t\t\t: [\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t'sudo',\n\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t'cp',\n\t\t\t\t\t\t\t\tcertificate,\n\t\t\t\t\t\t\t\t'/etc/pki/ca-trust/source/anchors/gkm-local-ca.crt',\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t],\n\t\t\t\t\t\t['sudo', ['update-ca-trust']],\n\t\t\t\t\t],\n\t\t};\n\t}\n\n\tthrow new UnsupportedPlatform(platform, certificate);\n}\n\n/**\n * Trust the certificate authority this project's edge issues from.\n *\n * Idempotent in effect: installing a root that is already trusted replaces the\n * same entry, so running it twice is not an error.\n */\nexport async function trustCommand(options: TrustOptions = {}): Promise<void> {\n\tconst { workspace } = await loadWorkspaceConfig();\n\tconst certificate = join(workspace.root, LOCAL_CA_PATH);\n\n\tif (!existsSync(certificate)) {\n\t\tthrow new NoLocalAuthority(certificate);\n\t}\n\n\tconst { describe, steps } = installation(process.platform, certificate);\n\n\tlogger.log(`\\n🔐 Trusting the local authority in ${describe}`);\n\tlogger.log(` ${certificate}\\n`);\n\n\tif (options.dryRun) {\n\t\tfor (const [command, args] of steps) {\n\t\t\tlogger.log(` ${command} ${args.join(' ')}`);\n\t\t}\n\t\treturn;\n\t}\n\n\tlogger.log(' This needs an admin password.\\n');\n\n\tfor (const [command, args] of steps) {\n\t\t// Inherited stdio, because sudo prompts on the terminal and a captured\n\t\t// prompt is a command that appears to hang.\n\t\tawait run(command, args, { stdio: 'inherit' } as never);\n\t}\n\n\tlogger.log('\\n✅ Local https addresses are trusted. Restart your browser.\\n');\n}\n\n/**\n * Trust the authority if this machine lacks it and its owner agrees.\n *\n * A machine's answer, not the project's: whether a laptop installs a root\n * certificate is its owner's call, so the decision is `--yes`, then what this\n * machine previously answered, then a prompt. Never a silent `sudo` — that is\n * the one thing a setup command should not do on somebody's behalf.\n *\n * Silent and free when the machine already trusts it, which is what makes it\n * acceptable to call on every `gkm setup`.\n */\nexport async function ensureTrusted(\n\troot: string,\n\turl: string,\n\toptions: { assumeYes?: boolean } = {},\n): Promise<void> {\n\tif (await isTrusted(url)) return;\n\n\tif (!options.assumeYes) {\n\t\t// Nothing to answer a prompt in CI, a hook, or a piped shell — and a\n\t\t// setup that stops there waiting is worse than one that leaves the\n\t\t// authority untrusted. Not recorded as declined, because nobody\n\t\t// declined: the next interactive run should still ask.\n\t\tif (!process.stdin.isTTY) {\n\t\t\tlogger.log(\n\t\t\t\t' Local https addresses are not trusted here. Run \"gkm trust\", ' +\n\t\t\t\t\t'or \"gkm setup --yes\".',\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\t// A recorded \"no\" is why this asks once rather than every start. There is\n\t\t// no recorded \"yes\": trusting is checked directly above, so a yes that\n\t\t// worked answers itself and a yes that did not should ask again.\n\t\tif (await declined(root)) return;\n\n\t\tconst { install } = await prompts({\n\t\t\ttype: 'confirm',\n\t\t\tname: 'install',\n\t\t\tmessage:\n\t\t\t\t\"Trust this project's local certificate authority, so a browser \" +\n\t\t\t\t'accepts its https addresses? (needs sudo)',\n\t\t\tinitial: false,\n\t\t});\n\n\t\tif (!install) {\n\t\t\tawait recordDeclined(root);\n\t\t\tlogger.log(' Skipped. Run \"gkm trust\" later.');\n\t\t\treturn;\n\t\t}\n\t}\n\n\tawait trustCommand();\n}\n\n/** Where a declined answer is remembered, so setup asks once and not again. */\nconst TRUST_STATE = '.gkm/trust.json';\n\nasync function declined(root: string): Promise<boolean> {\n\ttry {\n\t\tconst raw = await readFile(join(root, TRUST_STATE), 'utf-8');\n\n\t\treturn (JSON.parse(raw) as { declined?: boolean }).declined === true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nasync function recordDeclined(root: string): Promise<void> {\n\tconst path = join(root, TRUST_STATE);\n\n\tawait mkdir(dirname(path), { recursive: true });\n\tawait writeFile(path, `${JSON.stringify({ declined: true }, null, 2)}\\n`);\n}\n\n/**\n * Whether this machine already trusts the local authority.\n *\n * Asked by connecting rather than by reading a keychain: what matters is\n * whether a client with no special configuration verifies the edge, and that is\n * one platform-neutral question instead of three platform-specific ones. It is\n * also the exact thing a browser is about to do.\n *\n * A child process, because `NODE_EXTRA_CA_CERTS` is read once at startup and\n * this process almost certainly has it set — asking in-process would answer\n * \"yes\" for everyone.\n */\nexport async function isTrusted(url: string): Promise<boolean> {\n\tconst { NODE_EXTRA_CA_CERTS: _ignored, ...env } = process.env;\n\n\ttry {\n\t\tawait run(\n\t\t\tprocess.execPath,\n\t\t\t['-e', `fetch(${JSON.stringify(url)}).then(()=>0,()=>process.exit(1))`],\n\t\t\t{ env, timeout: 15_000 },\n\t\t);\n\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\n/**\n * Copy the root somewhere a tool that wants a file can read it.\n *\n * For anything that takes a CA bundle rather than reading the system store —\n * another language's HTTP client, a container, a CI job.\n */\nexport async function exportLocalAuthority(to: string): Promise<void> {\n\tconst { workspace } = await loadWorkspaceConfig();\n\tconst certificate = join(workspace.root, LOCAL_CA_PATH);\n\n\tif (!existsSync(certificate)) throw new NoLocalAuthority(certificate);\n\n\tawait copyFile(certificate, to);\n}\n\n/** The edge has not run, so there is no authority to trust yet. */\nexport class NoLocalAuthority extends Error {\n\tconstructor(readonly path: string) {\n\t\tsuper(\n\t\t\t`No local certificate authority at ${path}. It is generated the first ` +\n\t\t\t\t`time the edge starts, so run \"gkm setup\" (or \"gkm dev\") once — and ` +\n\t\t\t\t`if this project declares no file server, nothing needs one.`,\n\t\t);\n\t\tthis.name = 'NoLocalAuthority';\n\t}\n}\n\n/** A platform with no trust store this knows how to write to. */\nexport class UnsupportedPlatform extends Error {\n\tconstructor(\n\t\treadonly platform: string,\n\t\treadonly certificate: string,\n\t) {\n\t\tsuper(\n\t\t\t`gkm does not know how to install a certificate authority on ` +\n\t\t\t\t`${platform}. The root is at ${certificate} — add it to the trust ` +\n\t\t\t\t`store by hand, or point a client at it with NODE_EXTRA_CA_CERTS.`,\n\t\t);\n\t\tthis.name = 'UnsupportedPlatform';\n\t}\n}\n","import prompts from 'prompts';\nimport { loadWorkspaceConfig } from '../config.js';\nimport {\n\tderivedContainers,\n\treconcileWorkspace,\n} from '../reconcile/workspace.js';\nimport {\n\tcreateStageSecrets,\n\tgenerateConnectionUrls,\n\tgenerateSecurePassword,\n\tgenerateServiceCredentials,\n} from '../secrets/generator.js';\nimport {\n\treadStageSecrets,\n\tsecretsExist,\n\twriteStageSecrets,\n} from '../secrets/storage.js';\nimport { isSSMConfigured, pullSecrets, pushSecrets } from '../secrets/sync.js';\nimport type { StageSecrets } from '../secrets/types.js';\nimport { ensureTrusted } from '../trust/index.js';\nimport type { ComposeServiceName } from '../types.js';\nimport type { LoadedConfig, NormalizedWorkspace } from '../workspace/types.js';\nimport {\n\tgenerateFullstackCustomSecrets,\n\twriteDockerEnvFromSecrets,\n} from './fullstack-secrets.js';\n\nconst logger = console;\n\nexport interface SetupOptions {\n\tstage?: string;\n\tforce?: boolean;\n\tskipDocker?: boolean;\n\tyes?: boolean;\n}\n\n/**\n * Setup development environment.\n *\n * Orchestrates:\n * 1. Load workspace config\n * 2. Resolve secrets (local → SSM → generate fresh)\n * 3. Write docker/.env from secrets\n * 4. Start Docker services\n */\nexport async function setupCommand(options: SetupOptions = {}): Promise<void> {\n\tlogger.log('\\n🔧 Setting up the local environment...\\n');\n\n\t// 1. Load workspace config\n\tlet loadedConfig: LoadedConfig;\n\ttry {\n\t\tloadedConfig = await loadWorkspaceConfig();\n\t} catch {\n\t\tlogger.error(\n\t\t\t'❌ No gkm.config.ts found. Run this command from a workspace root.',\n\t\t);\n\t\tprocess.exit(1);\n\t}\n\n\tconst stage = options.stage ?? loadedConfig.workspace.stages.local;\n\n\tconst { workspace } = loadedConfig;\n\tconst isMultiApp = Object.keys(workspace.apps).length > 1;\n\n\tlogger.log(`📦 Workspace: ${workspace.name}`);\n\tlogger.log(`📱 Apps: ${Object.keys(workspace.apps).join(', ')}`);\n\tlogger.log(`🔑 Stage: ${stage}\\n`);\n\n\t// 2. Resolve secrets\n\tconst secrets = await resolveSecrets(stage, workspace, options);\n\n\tif (!secrets) {\n\t\tlogger.error('❌ Failed to resolve secrets. Exiting.');\n\t\tprocess.exit(1);\n\t}\n\n\t// 3. Write docker/.env from secrets (always regenerated as derived file)\n\tconst containers = await derivedContainers(workspace, stage);\n\n\tif (isMultiApp && containers.includes('postgres')) {\n\t\tawait writeDockerEnvFromSecrets(secrets, workspace.root);\n\t\tlogger.log('📄 Generated docker/.env with database passwords');\n\t}\n\n\t// 4. Reconcile the local target: derive containers, allocate ports, start.\n\tif (!options.skipDocker) {\n\t\tlogger.log('');\n\n\t\tawait reconcileLocal(workspace, stage, options);\n\t}\n\n\t// Print summary\n\tprintSummary(workspace, stage);\n}\n\n/**\n * Converge this machine on what the manifest declares.\n *\n * Says what it did in one line and stays silent when it did nothing, because\n * reconciling on every start is only tolerable if the converged case is both\n * free and quiet.\n */\nasync function reconcileLocal(\n\tworkspace: NormalizedWorkspace,\n\tstage: string,\n\toptions: SetupOptions,\n): Promise<void> {\n\tconst result = await reconcileWorkspace(workspace, { stage });\n\n\tif (result.plan.containers.length === 0) {\n\t\tlogger.log('🐳 No containers declared');\n\t\treturn;\n\t}\n\n\tif (!result.changed) {\n\t\tlogger.log('🐳 Services already up to date');\n\t\treturn;\n\t}\n\n\tlogger.log(`🐳 Services: ${result.plan.containers.join(', ')}`);\n\tfor (const [container, address] of Object.entries(result.addresses)) {\n\t\tlogger.log(` ${container}: ${address}`);\n\t}\n\n\t// Only where something actually answers on https. A project with no edge has\n\t// no authority to trust and should never be asked about one.\n\tconst served = result.plan.resources.find((r) => r.kind === 'file-server');\n\tconst url = served ? result.env[served.envKey] : undefined;\n\n\tif (url) {\n\t\tawait ensureTrusted(workspace.root, url, {\n\t\t\t...(options.yes ? { assumeYes: true } : {}),\n\t\t});\n\t}\n}\n\n/**\n * Resolve secrets with priority:\n * 1. Local secrets exist → use them (preserves manual additions)\n * 2. SSM configured and has secrets → pull and use\n * 3. Neither → generate fresh secrets\n *\n * --force skips checks 1 and 2 and always regenerates.\n */\nasync function resolveSecrets(\n\tstage: string,\n\tworkspace: NormalizedWorkspace,\n\toptions: SetupOptions,\n) {\n\t// Force regeneration\n\tif (options.force) {\n\t\tlogger.log('🔐 Generating fresh secrets (--force)...');\n\t\treturn generateFreshSecrets(stage, workspace, options);\n\t}\n\n\t// Check local secrets first\n\tif (secretsExist(stage, workspace.root)) {\n\t\tlogger.log('🔐 Using existing local secrets');\n\t\tconst secrets = await readStageSecrets(stage, workspace.root);\n\t\tif (secrets) {\n\t\t\t// Reconcile: add any missing workspace-derived keys without overwriting\n\t\t\tconst reconciled = reconcileSecrets(\n\t\t\t\tsecrets,\n\t\t\t\tworkspace,\n\t\t\t\tawait derivedContainers(workspace, stage),\n\t\t\t);\n\t\t\tif (reconciled) {\n\t\t\t\tawait writeStageSecrets(reconciled, workspace.root);\n\t\t\t}\n\t\t\treturn reconciled ?? secrets;\n\t\t}\n\t}\n\n\t// Try SSM pull if configured\n\tif (isSSMConfigured(workspace)) {\n\t\tlogger.log('☁️ Checking for remote secrets in SSM...');\n\t\ttry {\n\t\t\tconst remoteSecrets = await pullSecrets(stage, workspace);\n\t\t\tif (remoteSecrets) {\n\t\t\t\tlogger.log('✅ Pulled secrets from SSM');\n\t\t\t\tawait writeStageSecrets(remoteSecrets, workspace.root);\n\t\t\t\treturn remoteSecrets;\n\t\t\t}\n\t\t\tlogger.log(' No remote secrets found');\n\t\t} catch (error) {\n\t\t\tlogger.warn(`⚠️ Failed to pull from SSM: ${(error as Error).message}`);\n\t\t}\n\t}\n\n\t// Generate fresh secrets\n\tlogger.log('🔐 Generating fresh development secrets...');\n\treturn generateFreshSecrets(stage, workspace, options);\n}\n\n/**\n * Reconcile existing secrets with expected workspace-derived keys.\n * Adds missing keys (e.g. BETTER_AUTH_*) without overwriting existing values.\n * Returns the updated secrets if changes were made, or null if no changes needed.\n * @internal Exported for testing\n */\n/**\n * Which containers hold a credential worth generating.\n *\n * Reconcile's container names, mapped to the service a credential is stored\n * under. `redis-http` is the Upstash-protocol proxy in front of Redis and holds\n * no credential of its own — its token is derived — so it maps to nothing, and\n * `caddy` is an edge with nothing to log into.\n */\nfunction credentialedServices(\n\tcontainers: readonly string[],\n): ComposeServiceName[] {\n\tconst byContainer: Readonly<Record<string, ComposeServiceName>> = {\n\t\tpostgres: 'postgres',\n\t\tredis: 'redis',\n\t\tminio: 'minio',\n\t\tmailpit: 'mailpit',\n\t\tlocalstack: 'localstack',\n\t\trabbitmq: 'rabbitmq',\n\t};\n\n\treturn [\n\t\t...new Set(\n\t\t\tcontainers\n\t\t\t\t.map((container) => byContainer[container])\n\t\t\t\t.filter((name): name is ComposeServiceName => Boolean(name)),\n\t\t),\n\t];\n}\n\nexport function reconcileSecrets(\n\tsecrets: StageSecrets,\n\tworkspace: NormalizedWorkspace,\n\tcontainers: readonly string[] = [],\n): StageSecrets | null {\n\tlet changed = false;\n\tlet result = { ...secrets };\n\n\t// Reconcile service credentials: add missing services\n\tfor (const name of credentialedServices(containers)) {\n\t\tif (!result.services[name]) {\n\t\t\tconst creds = generateServiceCredentials(name);\n\t\t\t// Override defaults with project-derived names\n\t\t\tif (name === 'minio') {\n\t\t\t\tcreds.bucket = workspace.name;\n\t\t\t\tcreds.username = workspace.name;\n\t\t\t}\n\t\t\tresult = {\n\t\t\t\t...result,\n\t\t\t\tservices: { ...result.services, [name]: creds },\n\t\t\t};\n\t\t\tresult.urls = generateConnectionUrls(\n\t\t\t\tresult.services,\n\t\t\t\tresult.eventsBackend,\n\t\t\t);\n\t\t\tlogger.log(` 🔄 Adding missing service credentials: ${name}`);\n\t\t\tchanged = true;\n\t\t}\n\t}\n\n\t// Always add pgboss credentials when postgres is available\n\tif (result.services.postgres && !result.services.pgboss) {\n\t\tresult = {\n\t\t\t...result,\n\t\t\tservices: {\n\t\t\t\t...result.services,\n\t\t\t\tpgboss: {\n\t\t\t\t\thost: result.services.postgres.host,\n\t\t\t\t\tport: result.services.postgres.port,\n\t\t\t\t\tusername: 'pgboss',\n\t\t\t\t\tpassword: generateSecurePassword(),\n\t\t\t\t\tdatabase: result.services.postgres.database ?? 'app',\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\t\tresult.urls = generateConnectionUrls(result.services, result.eventsBackend);\n\t\tlogger.log(' 🔄 Adding missing service credentials: pgboss');\n\t\tchanged = true;\n\t}\n\n\t// Reconcile custom secrets for multi-app workspaces\n\tconst isMultiApp = Object.keys(workspace.apps).length > 1;\n\tif (isMultiApp) {\n\t\tconst expected = generateFullstackCustomSecrets(workspace, containers);\n\t\tconst missing: Record<string, string> = {};\n\n\t\tfor (const [key, value] of Object.entries(expected)) {\n\t\t\tif (!(key in result.custom)) {\n\t\t\t\tmissing[key] = value;\n\t\t\t}\n\t\t}\n\n\t\tif (Object.keys(missing).length > 0) {\n\t\t\tlogger.log(\n\t\t\t\t` 🔄 Adding missing secrets: ${Object.keys(missing).join(', ')}`,\n\t\t\t);\n\t\t\tresult = {\n\t\t\t\t...result,\n\t\t\t\tcustom: { ...result.custom, ...missing },\n\t\t\t};\n\t\t\tchanged = true;\n\t\t}\n\t}\n\n\tif (!changed) {\n\t\treturn null;\n\t}\n\n\treturn {\n\t\t...result,\n\t\tupdatedAt: new Date().toISOString(),\n\t};\n}\n\n/**\n * Build a fresh StageSecrets object for a workspace: service credentials,\n * connection URLs, and custom secrets. Pure — does not write to disk or touch\n * SSM. Service passwords are freshly randomized, so the result must be the same\n * one used to start the matching Docker containers.\n * @internal Exported for reuse by `gkm test` auto-setup.\n */\nexport function createFreshWorkspaceSecrets(\n\tstage: string,\n\tworkspace: NormalizedWorkspace,\n\tcontainers: readonly string[] = [],\n): StageSecrets {\n\t// Which services need a credential is which containers exist, and that is\n\t// the manifest's answer. It used to be a boolean per service read from\n\t// config, which generated a Postgres password for a project with no\n\t// database and none for a project that declared one and set no flag.\n\tconst serviceNames = credentialedServices(containers);\n\n\t// Create base secrets with service credentials\n\t// No events backend: whether there are events is a declared `Topic` or\n\t// `Queue`, and reconcile derives their connection strings from those.\n\t// Passing the target's broker here would demand broker credentials from a\n\t// project that declared no queue at all.\n\tconst secrets = createStageSecrets(stage, serviceNames, {\n\t\tprojectName: workspace.name,\n\t});\n\n\t// Generate fullstack-aware custom secrets\n\tconst isMultiApp = Object.keys(workspace.apps).length > 1;\n\tif (isMultiApp) {\n\t\tsecrets.custom = generateFullstackCustomSecrets(workspace, containers);\n\t} else {\n\t\tsecrets.custom = {\n\t\t\tNODE_ENV: 'development',\n\t\t\tPORT: '3000',\n\t\t\tLOG_LEVEL: 'debug',\n\t\t\tJWT_SECRET: `dev-${Date.now()}-${Math.random().toString(36).slice(2)}`,\n\t\t};\n\t}\n\n\treturn secrets;\n}\n\n/**\n * Ensure a usable secret set exists for a stage, generating a fresh one from the\n * workspace config when none is present. No-op if secrets already exist.\n *\n * Powers `gkm test --auto-setup` / `GKM_AUTO_SETUP`: CI can run without a\n * committed secrets file or a shared encryption key — the stage is regenerated\n * from the committed `gkm.config.ts`, and `writeStageSecrets` mints a local key.\n *\n * @returns true if fresh secrets were generated, false if existing ones were kept\n */\nexport async function ensureStageSecrets(\n\tstage: string,\n\tcwd: string = process.cwd(),\n): Promise<boolean> {\n\tconst { workspace } = await loadWorkspaceConfig(cwd);\n\n\tif (secretsExist(stage, workspace.root)) {\n\t\treturn false;\n\t}\n\n\tconst secrets = createFreshWorkspaceSecrets(\n\t\tstage,\n\t\tworkspace,\n\t\tawait derivedContainers(workspace, stage),\n\t);\n\tawait writeStageSecrets(secrets, workspace.root);\n\treturn true;\n}\n\n/**\n * Generate fresh secrets for the workspace.\n */\nasync function generateFreshSecrets(\n\tstage: string,\n\tworkspace: NormalizedWorkspace,\n\toptions: SetupOptions,\n) {\n\tconst secrets = createFreshWorkspaceSecrets(\n\t\tstage,\n\t\tworkspace,\n\t\tawait derivedContainers(workspace, stage),\n\t);\n\n\t// Write secrets\n\tawait writeStageSecrets(secrets, workspace.root);\n\tlogger.log(` Secrets written to .gkm/secrets/${stage}.json`);\n\n\t// Offer to push to SSM if configured\n\tif (isSSMConfigured(workspace) && !options.yes) {\n\t\tconst { shouldPush } = await prompts({\n\t\t\ttype: 'confirm',\n\t\t\tname: 'shouldPush',\n\t\t\tmessage: 'Push secrets to SSM for team sharing?',\n\t\t\tinitial: true,\n\t\t});\n\n\t\tif (shouldPush) {\n\t\t\ttry {\n\t\t\t\tawait pushSecrets(stage, workspace);\n\t\t\t\tlogger.log('☁️ Secrets pushed to SSM');\n\t\t\t} catch (error) {\n\t\t\t\tlogger.warn(`⚠️ Failed to push to SSM: ${(error as Error).message}`);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn secrets;\n}\n\n/**\n * Print setup summary with next steps.\n */\nfunction printSummary(workspace: NormalizedWorkspace, stage: string): void {\n\tlogger.log(`\\n${'─'.repeat(50)}`);\n\tlogger.log('\\n✅ Development environment ready!\\n');\n\n\tlogger.log('📋 Apps:');\n\tfor (const [name, app] of Object.entries(workspace.apps)) {\n\t\tconst icon =\n\t\t\tapp.type === 'web' ? '🌐' : app.type === 'mobile' ? '📱' : '🔧';\n\t\tlogger.log(` ${icon} ${name} → http://localhost:${app.port}`);\n\t}\n\n\tlogger.log('\\n🚀 Next steps:');\n\tlogger.log(' gkm dev # Start all apps');\n\tlogger.log(` gkm secrets:show --stage ${stage} # View secrets`);\n\tlogger.log('');\n}\n"],"mappings":"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"}
|
|
@@ -722,48 +722,6 @@ declare const WorkspaceConfigSchema: z.ZodObject<{
|
|
|
722
722
|
retention: z.ZodOptional<z.ZodNumber>;
|
|
723
723
|
}, z.core.$strip>>;
|
|
724
724
|
}, z.core.$strip>>;
|
|
725
|
-
services: z.ZodOptional<z.ZodObject<{
|
|
726
|
-
db: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodObject<{
|
|
727
|
-
version: z.ZodOptional<z.ZodString>;
|
|
728
|
-
image: z.ZodOptional<z.ZodString>;
|
|
729
|
-
}, z.core.$strip>]>>;
|
|
730
|
-
cache: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodObject<{
|
|
731
|
-
version: z.ZodOptional<z.ZodString>;
|
|
732
|
-
image: z.ZodOptional<z.ZodString>;
|
|
733
|
-
}, z.core.$strip>, z.ZodEnum<{
|
|
734
|
-
upstash: "upstash";
|
|
735
|
-
elasticache: "elasticache";
|
|
736
|
-
db: "db";
|
|
737
|
-
}>]>>;
|
|
738
|
-
mail: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodObject<{
|
|
739
|
-
version: z.ZodOptional<z.ZodString>;
|
|
740
|
-
image: z.ZodOptional<z.ZodString>;
|
|
741
|
-
smtp: z.ZodOptional<z.ZodObject<{
|
|
742
|
-
host: z.ZodString;
|
|
743
|
-
port: z.ZodNumber;
|
|
744
|
-
user: z.ZodOptional<z.ZodString>;
|
|
745
|
-
pass: z.ZodOptional<z.ZodString>;
|
|
746
|
-
}, z.core.$strip>>;
|
|
747
|
-
}, z.core.$strip>, z.ZodEnum<{
|
|
748
|
-
resend: "resend";
|
|
749
|
-
ses: "ses";
|
|
750
|
-
smtp: "smtp";
|
|
751
|
-
}>]>>;
|
|
752
|
-
storage: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodObject<{
|
|
753
|
-
version: z.ZodOptional<z.ZodString>;
|
|
754
|
-
image: z.ZodOptional<z.ZodString>;
|
|
755
|
-
}, z.core.$strip>, z.ZodEnum<{
|
|
756
|
-
minio: "minio";
|
|
757
|
-
s3: "s3";
|
|
758
|
-
r2: "r2";
|
|
759
|
-
}>]>>;
|
|
760
|
-
events: z.ZodOptional<z.ZodEnum<{
|
|
761
|
-
pgboss: "pgboss";
|
|
762
|
-
sns: "sns";
|
|
763
|
-
rabbitmq: "rabbitmq";
|
|
764
|
-
}>>;
|
|
765
|
-
trustLocalCa: z.ZodOptional<z.ZodBoolean>;
|
|
766
|
-
}, z.core.$strip>>;
|
|
767
725
|
stages: z.ZodObject<{
|
|
768
726
|
local: z.ZodString;
|
|
769
727
|
deployed: z.ZodArray<z.ZodString>;
|
|
@@ -820,7 +778,7 @@ declare const WorkspaceConfigSchema: z.ZodObject<{
|
|
|
820
778
|
write: Function;
|
|
821
779
|
}>;
|
|
822
780
|
}, z.core.$strip>]>>;
|
|
823
|
-
}, z.core.$
|
|
781
|
+
}, z.core.$strict>;
|
|
824
782
|
/**
|
|
825
783
|
* Validate workspace configuration.
|
|
826
784
|
* Throws ZodError with detailed messages on validation failure.
|
|
@@ -856,153 +814,6 @@ declare function formatValidationErrors(error: z.ZodError): string;
|
|
|
856
814
|
* ```
|
|
857
815
|
*/
|
|
858
816
|
type DeployTarget = 'dokploy' | 'vercel' | 'cloudflare';
|
|
859
|
-
/**
|
|
860
|
-
* Service image configuration for custom Docker images.
|
|
861
|
-
*
|
|
862
|
-
* @example
|
|
863
|
-
* ```ts
|
|
864
|
-
* // Use specific version
|
|
865
|
-
* db: { version: '18-alpine' }
|
|
866
|
-
*
|
|
867
|
-
* // Use custom image
|
|
868
|
-
* db: { image: 'timescale/timescaledb:latest-pg16' }
|
|
869
|
-
* ```
|
|
870
|
-
*/
|
|
871
|
-
interface ServiceImageConfig {
|
|
872
|
-
/** Docker image version/tag (e.g., '18-alpine') */
|
|
873
|
-
version?: string;
|
|
874
|
-
/** Full Docker image reference (overrides version) */
|
|
875
|
-
image?: string;
|
|
876
|
-
}
|
|
877
|
-
/**
|
|
878
|
-
* Mail service configuration.
|
|
879
|
-
*
|
|
880
|
-
* In development, uses Mailpit for email testing.
|
|
881
|
-
* In production, uses SMTP configuration.
|
|
882
|
-
*
|
|
883
|
-
* @example
|
|
884
|
-
* ```ts
|
|
885
|
-
* services: {
|
|
886
|
-
* mail: {
|
|
887
|
-
* smtp: {
|
|
888
|
-
* host: 'smtp.sendgrid.net',
|
|
889
|
-
* port: 587,
|
|
890
|
-
* user: 'apikey',
|
|
891
|
-
* pass: process.env.SENDGRID_API_KEY,
|
|
892
|
-
* }
|
|
893
|
-
* }
|
|
894
|
-
* }
|
|
895
|
-
* ```
|
|
896
|
-
*/
|
|
897
|
-
interface MailServiceConfig extends ServiceImageConfig {
|
|
898
|
-
/** SMTP configuration for production */
|
|
899
|
-
smtp?: {
|
|
900
|
-
host: string;
|
|
901
|
-
port: number;
|
|
902
|
-
user?: string;
|
|
903
|
-
pass?: string;
|
|
904
|
-
};
|
|
905
|
-
}
|
|
906
|
-
/**
|
|
907
|
-
* Development services configuration.
|
|
908
|
-
*
|
|
909
|
-
* Configures shared infrastructure services like databases and caches.
|
|
910
|
-
* These are automatically provisioned in Dokploy during deployment.
|
|
911
|
-
*
|
|
912
|
-
* @example
|
|
913
|
-
* ```ts
|
|
914
|
-
* // Enable with defaults
|
|
915
|
-
* services: {
|
|
916
|
-
* db: true, // postgres:18-alpine
|
|
917
|
-
* cache: true, // redis:8-alpine
|
|
918
|
-
* }
|
|
919
|
-
*
|
|
920
|
-
* // Custom versions
|
|
921
|
-
* services: {
|
|
922
|
-
* db: { version: '18-alpine' },
|
|
923
|
-
* cache: { version: '7-alpine' },
|
|
924
|
-
* }
|
|
925
|
-
*
|
|
926
|
-
* // Custom images
|
|
927
|
-
* services: {
|
|
928
|
-
* db: { image: 'timescale/timescaledb:latest-pg16' },
|
|
929
|
-
* }
|
|
930
|
-
*
|
|
931
|
-
* // With mail service
|
|
932
|
-
* services: {
|
|
933
|
-
* db: true,
|
|
934
|
-
* cache: true,
|
|
935
|
-
* mail: true, // Mailpit in dev
|
|
936
|
-
* }
|
|
937
|
-
*
|
|
938
|
-
* // With event backend
|
|
939
|
-
* services: {
|
|
940
|
-
* db: true,
|
|
941
|
-
* cache: true,
|
|
942
|
-
* events: 'pgboss', // reuses postgres (auto-enables db)
|
|
943
|
-
* // events: 'sns', // adds LocalStack container
|
|
944
|
-
* // events: 'rabbitmq', // adds RabbitMQ container
|
|
945
|
-
* }
|
|
946
|
-
* ```
|
|
947
|
-
*/
|
|
948
|
-
interface ServicesConfig {
|
|
949
|
-
/**
|
|
950
|
-
* Whether to install the local edge's certificate authority automatically.
|
|
951
|
-
*
|
|
952
|
-
* A declared `file-server` answers on `https://` locally, which needs a
|
|
953
|
-
* certificate, which needs an authority this machine trusts. Everything gkm
|
|
954
|
-
* starts trusts it already — reconcile injects `NODE_EXTRA_CA_CERTS` — but a
|
|
955
|
-
* *browser* asks the operating system, and until the root is in its store a
|
|
956
|
-
* local address reads as "not secure".
|
|
957
|
-
*
|
|
958
|
-
* Installing it needs `sudo`, so it is never silent by default:
|
|
959
|
-
*
|
|
960
|
-
* - unset — `gkm setup` asks once, on a machine that does not trust it yet,
|
|
961
|
-
* and remembers a "no" so it stops asking.
|
|
962
|
-
* - `true` — install without asking. For a team that has decided, and for
|
|
963
|
-
* any machine where a prompt has nobody to answer it.
|
|
964
|
-
* - `false` — never. Correct for CI, and for anyone who only ever reaches
|
|
965
|
-
* these addresses from code, which trusts the root without any of this.
|
|
966
|
-
*/
|
|
967
|
-
trustLocalCa?: boolean;
|
|
968
|
-
/**
|
|
969
|
-
* Where a declared cache lives — `'upstash'`, `'elasticache'` or `'db'`.
|
|
970
|
-
*
|
|
971
|
-
* A backend name and nothing else. Whether there *is* a cache comes from the
|
|
972
|
-
* manifest: declaring one implies its container the way declaring a database
|
|
973
|
-
* implies Postgres, so this only ever answers the second question.
|
|
974
|
-
*
|
|
975
|
-
* Defaults by target — see `DEFAULT_CACHE`.
|
|
976
|
-
*/
|
|
977
|
-
cache?: CacheBackend;
|
|
978
|
-
/**
|
|
979
|
-
* Who delivers a declared app's mail — `'ses'`, `'resend'` or `'smtp'`.
|
|
980
|
-
*
|
|
981
|
-
* Locally every one of them is Mailpit, because every one speaks SMTP.
|
|
982
|
-
*/
|
|
983
|
-
mail?: EmailBackend;
|
|
984
|
-
/** Where a declared bucket lives — `'minio'`, `'s3'` or `'r2'`. */
|
|
985
|
-
storage?: StorageBackend;
|
|
986
|
-
/** What carries a declared queue or topic — pgboss, sns or rabbitmq. */
|
|
987
|
-
events?: EventsBackend;
|
|
988
|
-
/**
|
|
989
|
-
* Image pins for the containers the manifest derives.
|
|
990
|
-
*
|
|
991
|
-
* Separate from the backend names above, because they answer unrelated
|
|
992
|
-
* questions: a backend says where a thing lives, a pin says which image runs
|
|
993
|
-
* locally. They shared one key until `cache: true` meant "start a Redis" —
|
|
994
|
-
* which was the last way a container could exist because config asked for
|
|
995
|
-
* it rather than because something declared it.
|
|
996
|
-
*
|
|
997
|
-
* ```ts
|
|
998
|
-
* services: { cache: 'elasticache', images: { redis: 'redis:6-alpine' } }
|
|
999
|
-
* ```
|
|
1000
|
-
*
|
|
1001
|
-
* Pinning an image for a container nothing declares is a no-op, not an
|
|
1002
|
-
* error: it says which image *would* run, and nothing runs.
|
|
1003
|
-
*/
|
|
1004
|
-
images?: Partial<Record<ComposeServiceName, string>>;
|
|
1005
|
-
}
|
|
1006
817
|
/**
|
|
1007
818
|
* Stage-based domain configuration.
|
|
1008
819
|
*
|
|
@@ -1537,10 +1348,6 @@ type ConstrainedApps<TApps extends AppsRecord> = { [K in keyof TApps]: Omit<TApp
|
|
|
1537
1348
|
* dependencies: ['api'],
|
|
1538
1349
|
* },
|
|
1539
1350
|
* },
|
|
1540
|
-
* services: {
|
|
1541
|
-
* db: true,
|
|
1542
|
-
* cache: true,
|
|
1543
|
-
* },
|
|
1544
1351
|
* deploy: {
|
|
1545
1352
|
* default: 'dokploy',
|
|
1546
1353
|
* },
|
|
@@ -1569,8 +1376,6 @@ type WorkspaceInput<TApps extends AppsRecord> = {
|
|
|
1569
1376
|
shared?: SharedConfig;
|
|
1570
1377
|
/** Deployment configuration */
|
|
1571
1378
|
deploy?: DeployConfig;
|
|
1572
|
-
/** Development services (db, cache, mail, storage, events) */
|
|
1573
|
-
services?: ServicesConfig;
|
|
1574
1379
|
/** The project's stages: which one is local, which deploy */
|
|
1575
1380
|
stages: StagesConfig;
|
|
1576
1381
|
/** Encrypted secrets configuration */
|
|
@@ -1599,7 +1404,6 @@ type InferredWorkspaceConfig<TApps extends AppsRecord> = {
|
|
|
1599
1404
|
} };
|
|
1600
1405
|
shared?: SharedConfig;
|
|
1601
1406
|
deploy?: DeployConfig;
|
|
1602
|
-
services?: ServicesConfig;
|
|
1603
1407
|
stages: StagesConfig;
|
|
1604
1408
|
secrets?: SecretsConfig;
|
|
1605
1409
|
state?: StateConfig;
|
|
@@ -1651,12 +1455,6 @@ type InferredWorkspaceConfig<TApps extends AppsRecord> = {
|
|
|
1651
1455
|
* },
|
|
1652
1456
|
* },
|
|
1653
1457
|
*
|
|
1654
|
-
* // Infrastructure services
|
|
1655
|
-
* services: {
|
|
1656
|
-
* db: true, // PostgreSQL
|
|
1657
|
-
* cache: true, // Redis
|
|
1658
|
-
* },
|
|
1659
|
-
*
|
|
1660
1458
|
* // Deployment configuration
|
|
1661
1459
|
* deploy: {
|
|
1662
1460
|
* default: 'dokploy',
|
|
@@ -1697,8 +1495,6 @@ interface WorkspaceConfig {
|
|
|
1697
1495
|
shared?: SharedConfig;
|
|
1698
1496
|
/** Default deployment configuration */
|
|
1699
1497
|
deploy?: DeployConfig;
|
|
1700
|
-
/** Development services (db, cache, mail, storage, events) */
|
|
1701
|
-
services?: ServicesConfig;
|
|
1702
1498
|
/** The project's stages: which one is local, which deploy */
|
|
1703
1499
|
stages: StagesConfig;
|
|
1704
1500
|
/** Encrypted secrets configuration */
|
|
@@ -1760,8 +1556,6 @@ interface NormalizedWorkspace {
|
|
|
1760
1556
|
constructs?: Routes;
|
|
1761
1557
|
/** Normalized app configurations */
|
|
1762
1558
|
apps: Record<string, NormalizedAppConfig>;
|
|
1763
|
-
/** Services configuration (empty object if not specified) */
|
|
1764
|
-
services: ServicesConfig;
|
|
1765
1559
|
/** Deploy configuration (empty object if not specified) */
|
|
1766
1560
|
deploy: DeployConfig;
|
|
1767
1561
|
/** Shared packages configuration (empty object if not specified) */
|
|
@@ -1845,19 +1639,6 @@ interface ProductionConfig {
|
|
|
1845
1639
|
*/
|
|
1846
1640
|
optimizedHandlers?: boolean;
|
|
1847
1641
|
}
|
|
1848
|
-
/** Service-specific configuration for docker-compose */
|
|
1849
|
-
interface ServiceConfig {
|
|
1850
|
-
/**
|
|
1851
|
-
* Full Docker image reference (e.g., 'postgis/postgis:16-3.4-alpine').
|
|
1852
|
-
* When specified, overrides the default image entirely.
|
|
1853
|
-
*/
|
|
1854
|
-
image?: string;
|
|
1855
|
-
/**
|
|
1856
|
-
* Docker image version/tag (e.g., '15-alpine' for postgres).
|
|
1857
|
-
* Only used when `image` is not specified.
|
|
1858
|
-
*/
|
|
1859
|
-
version?: string;
|
|
1860
|
-
}
|
|
1861
1642
|
/**
|
|
1862
1643
|
* Supported event backend types.
|
|
1863
1644
|
*
|
|
@@ -1867,7 +1648,7 @@ interface ServiceConfig {
|
|
|
1867
1648
|
*
|
|
1868
1649
|
* All backends generate EVENT_PUBLISHER_CONNECTION_STRING and EVENT_SUBSCRIBER_CONNECTION_STRING.
|
|
1869
1650
|
*/
|
|
1870
|
-
|
|
1651
|
+
|
|
1871
1652
|
/**
|
|
1872
1653
|
* Where a declared cache actually lives.
|
|
1873
1654
|
*
|
|
@@ -1903,25 +1684,6 @@ type CacheBackend = 'upstash' | 'elasticache' | 'db';
|
|
|
1903
1684
|
* is what makes a single-host deploy self-contained, and what makes it a
|
|
1904
1685
|
* single disk with no replication. Locally this is what every backend is.
|
|
1905
1686
|
*/
|
|
1906
|
-
type StorageBackend = 'minio' | 's3' | 'r2';
|
|
1907
|
-
/**
|
|
1908
|
-
* The backend a project gets when it says nothing, by where it deploys.
|
|
1909
|
-
*
|
|
1910
|
-
* Flat defaults could not be right for both: `upstash` on a single box means a
|
|
1911
|
-
* SaaS round-trip for a cache the database could have held, and `minio` on AWS
|
|
1912
|
-
* means running a bucket beside S3. So the default is a function of the target,
|
|
1913
|
-
* and an app that says nothing gets the obvious answer in both places — which
|
|
1914
|
-
* is the whole of what "zero config" can mean once there is more than one
|
|
1915
|
-
* target.
|
|
1916
|
-
*
|
|
1917
|
-
* `server` covers Dokploy and a bare host alike: the question these answer is
|
|
1918
|
-
* whether the app is next to a managed cloud or next to its own containers, and
|
|
1919
|
-
* on that question the two are the same.
|
|
1920
|
-
*
|
|
1921
|
-
* A per-construct, per-stage override is the layer above this — see
|
|
1922
|
-
* `constructs-outstanding.md` — so two buckets in one app can differ. This is
|
|
1923
|
-
* only what happens when nobody has said anything at all.
|
|
1924
|
-
*/
|
|
1925
1687
|
|
|
1926
1688
|
/**
|
|
1927
1689
|
* Who delivers a declared app's mail.
|
|
@@ -1953,10 +1715,6 @@ type EmailBackend = 'resend' | 'ses' | 'smtp';
|
|
|
1953
1715
|
* give and would only be `ses` written twice.
|
|
1954
1716
|
*/
|
|
1955
1717
|
|
|
1956
|
-
/** Supported docker-compose service names */
|
|
1957
|
-
type ComposeServiceName = 'postgres' | 'redis' | 'rabbitmq' | 'minio' | 'mailpit' | 'localstack';
|
|
1958
|
-
/** Services configuration - can be boolean (use defaults) or object with version */
|
|
1959
|
-
type ComposeServicesConfig = { [K in ComposeServiceName]?: boolean | ServiceConfig };
|
|
1960
1718
|
interface DockerConfig {
|
|
1961
1719
|
/** Container registry URL (e.g., 'ghcr.io/myorg') */
|
|
1962
1720
|
registry?: string;
|
|
@@ -1966,23 +1724,6 @@ interface DockerConfig {
|
|
|
1966
1724
|
baseImage?: string;
|
|
1967
1725
|
/** Container port (default: 3000) */
|
|
1968
1726
|
port?: number;
|
|
1969
|
-
/** docker-compose services to include */
|
|
1970
|
-
compose?: {
|
|
1971
|
-
/**
|
|
1972
|
-
* Services to include in docker-compose.
|
|
1973
|
-
* Can be an object with service configs or an array of service names (legacy).
|
|
1974
|
-
*
|
|
1975
|
-
* @example Object format (recommended)
|
|
1976
|
-
* services: {
|
|
1977
|
-
* postgres: { version: '15-alpine' },
|
|
1978
|
-
* redis: true, // use default version
|
|
1979
|
-
* }
|
|
1980
|
-
*
|
|
1981
|
-
* @example Array format (legacy, uses default versions)
|
|
1982
|
-
* services: ['postgres', 'redis']
|
|
1983
|
-
*/
|
|
1984
|
-
services?: ComposeServicesConfig | ComposeServiceName[];
|
|
1985
|
-
};
|
|
1986
1727
|
}
|
|
1987
1728
|
interface ServerConfig extends ProviderConfig {
|
|
1988
1729
|
enableOpenApi?: boolean;
|
|
@@ -2101,17 +1842,6 @@ interface GkmConfig {
|
|
|
2101
1842
|
name?: string;
|
|
2102
1843
|
/** The project's stages: which one is local, which deploy */
|
|
2103
1844
|
stages: StagesConfig;
|
|
2104
|
-
/**
|
|
2105
|
-
* Where the things no construct implies live.
|
|
2106
|
-
*
|
|
2107
|
-
* The same block a workspace config carries, and the same split: `db` and
|
|
2108
|
-
* `storage` are derived from the declared `KyselyDatabase` and
|
|
2109
|
-
* `ObjectStorage` and are ignored here, while `cache`, `mail`, and `events`
|
|
2110
|
-
* name a *backend* — where the cache lives, who delivers the mail, which
|
|
2111
|
-
* broker carries events. A single-app project had no way to say any of that
|
|
2112
|
-
* before, so its event backend could only be guessed.
|
|
2113
|
-
*/
|
|
2114
|
-
services?: ServicesConfig;
|
|
2115
1845
|
/**
|
|
2116
1846
|
* Constructs glob pattern — one glob, every kind.
|
|
2117
1847
|
*
|
|
@@ -2216,5 +1946,5 @@ interface GkmConfig {
|
|
|
2216
1946
|
deploy?: DeployConfig;
|
|
2217
1947
|
}
|
|
2218
1948
|
//#endregion
|
|
2219
|
-
export { AppConfig, AppConfigInput, AppInput, AppsRecord, BackendFramework, CacheBackend, ConstrainedApps, DeployConfig, DeployTarget, DokployWorkspaceConfig, EmailBackend, Framework, FrontendFramework, GkmConfig, InferAppNames, InferredWorkspaceConfig, LoadedConfig,
|
|
2220
|
-
//# sourceMappingURL=types-
|
|
1949
|
+
export { AppConfig, AppConfigInput, AppInput, AppsRecord, BackendFramework, CacheBackend, ConstrainedApps, DeployConfig, DeployTarget, DokployWorkspaceConfig, EmailBackend, Framework, FrontendFramework, GkmConfig, InferAppNames, InferredWorkspaceConfig, LoadedConfig, MobileFramework, ModelsConfig, NormalizedAppConfig, NormalizedWorkspace, OpenApiConfig, PHASE_2_DEPLOY_TARGETS, Routes, SUPPORTED_DEPLOY_TARGETS, SecretsConfig, SharedConfig, WorkspaceConfig, WorkspaceConfigSchema, WorkspaceInput, formatValidationErrors, getDeployTargetError, isDeployTargetSupported, isPhase2DeployTarget, isWorkspaceConfig, safeValidateWorkspaceConfig, validateWorkspaceConfig };
|
|
1950
|
+
//# sourceMappingURL=types-DVIx8I1N.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types-DVIx8I1N.d.mts","names":[],"sources":["../src/deploy/state.ts","../src/deploy/StateProvider.ts","../src/workspace/schema.ts","../src/workspace/types.ts","../src/types.ts"],"sourcesContent":[],"mappings":"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"}
|