@geekmidas/cli 10.0.0-alpha.0 → 10.0.0-alpha.10
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 +12 -15
- package/bin/adjacent-tsconfig.mjs +59 -0
- package/bin/gkm.mjs +7 -1
- package/dist/{config-DbPE1KXF.cjs → config-BZ1F0WuA.cjs} +7 -80
- package/dist/config-BZ1F0WuA.cjs.map +1 -0
- package/dist/{config-D8o6I_7Z.mjs → config-DVVph9yz.mjs} +9 -76
- package/dist/config-DVVph9yz.mjs.map +1 -0
- package/dist/config.cjs +2 -2
- package/dist/config.d.cts +2 -2
- package/dist/config.d.mts +2 -2
- package/dist/config.mjs +2 -2
- package/dist/{credentials-K961ThG3.cjs → credentials-Xamqe_NJ.cjs} +20 -19
- package/dist/credentials-Xamqe_NJ.cjs.map +1 -0
- package/dist/{credentials-Dh0Q6HzY.mjs → credentials-dP8vRVRv.mjs} +20 -19
- package/dist/credentials-dP8vRVRv.mjs.map +1 -0
- package/dist/discover-CAlFgYec.mjs.map +1 -1
- package/dist/discover-DTmFeloL.cjs.map +1 -1
- package/dist/{index-BThUzEIp.d.mts → index-C6e-ULLx.d.mts} +2 -2
- package/dist/index-C6e-ULLx.d.mts.map +1 -0
- package/dist/{index-CHB4tSzX.d.cts → index-CR5urhWX.d.cts} +2 -2
- package/dist/index-CR5urhWX.d.cts.map +1 -0
- package/dist/index.cjs +2154 -859
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +2156 -861
- package/dist/index.mjs.map +1 -1
- package/dist/{openapi-CljONd_M.cjs → openapi-SjsgARie.cjs} +127 -50
- package/dist/openapi-SjsgARie.cjs.map +1 -0
- package/dist/{openapi-CgpMWMmM.mjs → openapi-Xx0A7Wg0.mjs} +109 -50
- package/dist/openapi-Xx0A7Wg0.mjs.map +1 -0
- package/dist/openapi.cjs +5 -3
- package/dist/openapi.d.cts +46 -10
- package/dist/openapi.d.cts.map +1 -1
- package/dist/openapi.d.mts +46 -10
- package/dist/openapi.d.mts.map +1 -1
- package/dist/openapi.mjs +4 -4
- package/dist/reconcile/public.d.cts +1 -1
- package/dist/reconcile/public.d.mts +1 -1
- package/dist/{setup-DSutDAlt.mjs → setup-BA8ciTPU.mjs} +4 -4
- package/dist/setup-BsZvZP6f.cjs +11 -0
- package/dist/{setup-DOsYueeQ.mjs → setup-C8KOx8_8.mjs} +5 -5
- package/dist/setup-C8KOx8_8.mjs.map +1 -0
- package/dist/{setup-CJiQM2pX.cjs → setup-hC6hI86f.cjs} +5 -5
- package/dist/setup-hC6hI86f.cjs.map +1 -0
- package/dist/{types-C-arnQ1r.d.mts → types-6pkp2RRj.d.mts} +46 -10
- package/dist/types-6pkp2RRj.d.mts.map +1 -0
- package/dist/{types-abJQuk7m.d.cts → types-Y3fKQSAK.d.cts} +46 -10
- package/dist/types-Y3fKQSAK.d.cts.map +1 -0
- package/dist/workspace/index.cjs +1 -1
- package/dist/workspace/index.d.cts +2 -2
- package/dist/workspace/index.d.mts +2 -2
- package/dist/workspace/index.mjs +1 -1
- package/dist/workspace-BzrG_2SI.mjs +8 -0
- package/dist/workspace-C6VJQVtG.cjs +6845 -0
- package/dist/workspace-C6VJQVtG.cjs.map +1 -0
- package/dist/{workspace-8acupeaI.cjs → workspace-XXtNhqJl.cjs} +3 -3
- package/dist/workspace-zoqRbihZ.mjs +6678 -0
- package/dist/workspace-zoqRbihZ.mjs.map +1 -0
- package/package.json +33 -32
- package/dist/config-D8o6I_7Z.mjs.map +0 -1
- package/dist/config-DbPE1KXF.cjs.map +0 -1
- package/dist/credentials-Dh0Q6HzY.mjs.map +0 -1
- package/dist/credentials-K961ThG3.cjs.map +0 -1
- package/dist/index-BThUzEIp.d.mts.map +0 -1
- package/dist/index-CHB4tSzX.d.cts.map +0 -1
- package/dist/openapi-CgpMWMmM.mjs.map +0 -1
- package/dist/openapi-CljONd_M.cjs.map +0 -1
- package/dist/setup-CJiQM2pX.cjs.map +0 -1
- package/dist/setup-DMtU3p41.cjs +0 -11
- package/dist/setup-DOsYueeQ.mjs.map +0 -1
- package/dist/types-C-arnQ1r.d.mts.map +0 -1
- package/dist/types-abJQuk7m.d.cts.map +0 -1
- package/dist/workspace-7FqprxuJ.mjs +0 -4323
- package/dist/workspace-7FqprxuJ.mjs.map +0 -1
- package/dist/workspace-XvqO9jIv.cjs +0 -4472
- package/dist/workspace-XvqO9jIv.cjs.map +0 -1
- package/dist/workspace-yP5AHnrn.mjs +0 -8
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import "./discover-CAlFgYec.mjs";
|
|
2
|
-
import "./config-
|
|
3
|
-
import "./workspace-
|
|
4
|
-
import "./credentials-
|
|
2
|
+
import "./config-DVVph9yz.mjs";
|
|
3
|
+
import "./workspace-zoqRbihZ.mjs";
|
|
4
|
+
import "./credentials-dP8vRVRv.mjs";
|
|
5
5
|
import "./generator-VE2JrFlY.mjs";
|
|
6
6
|
import "./storage-Bi24WfoW.mjs";
|
|
7
7
|
import "./fullstack-secrets-D1o9-G5l.mjs";
|
|
8
8
|
import "./sync-CmEuNZsB.mjs";
|
|
9
|
-
import { createFreshWorkspaceSecrets, ensureStageSecrets, reconcileSecrets, setupCommand } from "./setup-
|
|
9
|
+
import { createFreshWorkspaceSecrets, ensureStageSecrets, reconcileSecrets, setupCommand } from "./setup-C8KOx8_8.mjs";
|
|
10
10
|
|
|
11
11
|
export { ensureStageSecrets };
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
require('./discover-DTmFeloL.cjs');
|
|
2
|
+
require('./config-BZ1F0WuA.cjs');
|
|
3
|
+
require('./workspace-C6VJQVtG.cjs');
|
|
4
|
+
require('./credentials-Xamqe_NJ.cjs');
|
|
5
|
+
require('./generator-CNzBw7g5.cjs');
|
|
6
|
+
require('./storage-BJmzYxt8.cjs');
|
|
7
|
+
require('./fullstack-secrets-C-GGohke.cjs');
|
|
8
|
+
require('./sync-SizaChmC.cjs');
|
|
9
|
+
const require_setup = require('./setup-hC6hI86f.cjs');
|
|
10
|
+
|
|
11
|
+
exports.ensureStageSecrets = require_setup.ensureStageSecrets;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { loadWorkspaceConfig } from "./config-
|
|
2
|
-
import { LOCAL_CA_PATH, derivedContainers, reconcileWorkspace } from "./credentials-
|
|
1
|
+
import { loadWorkspaceConfig } from "./config-DVVph9yz.mjs";
|
|
2
|
+
import { LOCAL_CA_PATH, derivedContainers, reconcileWorkspace } from "./credentials-dP8vRVRv.mjs";
|
|
3
3
|
import { createStageSecrets, generateConnectionUrls, generateSecurePassword, generateServiceCredentials } from "./generator-VE2JrFlY.mjs";
|
|
4
4
|
import { readStageSecrets, secretsExist, writeStageSecrets } from "./storage-Bi24WfoW.mjs";
|
|
5
5
|
import { generateFullstackCustomSecrets, writeDockerEnvFromSecrets } from "./fullstack-secrets-D1o9-G5l.mjs";
|
|
@@ -177,8 +177,7 @@ const logger = console;
|
|
|
177
177
|
* 4. Start Docker services
|
|
178
178
|
*/
|
|
179
179
|
async function setupCommand(options = {}) {
|
|
180
|
-
|
|
181
|
-
logger.log("\n🔧 Setting up development environment...\n");
|
|
180
|
+
logger.log("\n🔧 Setting up the local environment...\n");
|
|
182
181
|
let loadedConfig;
|
|
183
182
|
try {
|
|
184
183
|
loadedConfig = await loadWorkspaceConfig();
|
|
@@ -186,6 +185,7 @@ async function setupCommand(options = {}) {
|
|
|
186
185
|
logger.error("❌ No gkm.config.ts found. Run this command from a workspace root.");
|
|
187
186
|
process.exit(1);
|
|
188
187
|
}
|
|
188
|
+
const stage = options.stage ?? loadedConfig.workspace.stages.local;
|
|
189
189
|
const { workspace } = loadedConfig;
|
|
190
190
|
const isMultiApp = Object.keys(workspace.apps).length > 1;
|
|
191
191
|
logger.log(`📦 Workspace: ${workspace.name}`);
|
|
@@ -440,4 +440,4 @@ function printSummary(workspace, stage) {
|
|
|
440
440
|
|
|
441
441
|
//#endregion
|
|
442
442
|
export { createFreshWorkspaceSecrets, ensureStageSecrets, reconcileSecrets, setupCommand, trustCommand };
|
|
443
|
-
//# sourceMappingURL=setup-
|
|
443
|
+
//# sourceMappingURL=setup-C8KOx8_8.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup-C8KOx8_8.mjs","names":["logger","platform: NodeJS.Platform","certificate: string","options: TrustOptions","root: string","url: string","options: { configured?: boolean; 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 project wants that and this machine lacks it.\n *\n * The decision, in order: what the project configured, then what a person\n * previously answered, then a prompt. Never a silent `sudo` — that is the one\n * 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: { configured?: boolean; assumeYes?: boolean } = {},\n): Promise<void> {\n\tif (options.configured === false) return;\n\tif (await isTrusted(url)) return;\n\n\tif (options.configured !== true && !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 set services.trustLocalCa.',\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(\n\t\t\t\t' Skipped. Run \"gkm trust\" later, or set services.trustLocalCa.',\n\t\t\t);\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...(workspace.services.trustLocalCa === undefined\n\t\t\t\t? {}\n\t\t\t\t: { configured: workspace.services.trustLocalCa }),\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\tconst secrets = createStageSecrets(stage, serviceNames, {\n\t\tprojectName: workspace.name,\n\t\teventsBackend: workspace.services.events,\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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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
const require_chunk = require('./chunk-CUT6urMc.cjs');
|
|
2
|
-
const require_config = require('./config-
|
|
3
|
-
const require_credentials = require('./credentials-
|
|
2
|
+
const require_config = require('./config-BZ1F0WuA.cjs');
|
|
3
|
+
const require_credentials = require('./credentials-Xamqe_NJ.cjs');
|
|
4
4
|
const require_generator = require('./generator-CNzBw7g5.cjs');
|
|
5
5
|
const require_storage = require('./storage-BJmzYxt8.cjs');
|
|
6
6
|
const require_fullstack_secrets = require('./fullstack-secrets-C-GGohke.cjs');
|
|
@@ -178,8 +178,7 @@ const logger = console;
|
|
|
178
178
|
* 4. Start Docker services
|
|
179
179
|
*/
|
|
180
180
|
async function setupCommand(options = {}) {
|
|
181
|
-
|
|
182
|
-
logger.log("\n🔧 Setting up development environment...\n");
|
|
181
|
+
logger.log("\n🔧 Setting up the local environment...\n");
|
|
183
182
|
let loadedConfig;
|
|
184
183
|
try {
|
|
185
184
|
loadedConfig = await require_config.loadWorkspaceConfig();
|
|
@@ -187,6 +186,7 @@ async function setupCommand(options = {}) {
|
|
|
187
186
|
logger.error("❌ No gkm.config.ts found. Run this command from a workspace root.");
|
|
188
187
|
process.exit(1);
|
|
189
188
|
}
|
|
189
|
+
const stage = options.stage ?? loadedConfig.workspace.stages.local;
|
|
190
190
|
const { workspace } = loadedConfig;
|
|
191
191
|
const isMultiApp = Object.keys(workspace.apps).length > 1;
|
|
192
192
|
logger.log(`📦 Workspace: ${workspace.name}`);
|
|
@@ -470,4 +470,4 @@ Object.defineProperty(exports, 'trustCommand', {
|
|
|
470
470
|
return trustCommand;
|
|
471
471
|
}
|
|
472
472
|
});
|
|
473
|
-
//# sourceMappingURL=setup-
|
|
473
|
+
//# sourceMappingURL=setup-hC6hI86f.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup-hC6hI86f.cjs","names":["logger","execFile","platform: NodeJS.Platform","certificate: string","options: TrustOptions","LOCAL_CA_PATH","root: string","url: string","options: { configured?: boolean; 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 project wants that and this machine lacks it.\n *\n * The decision, in order: what the project configured, then what a person\n * previously answered, then a prompt. Never a silent `sudo` — that is the one\n * 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: { configured?: boolean; assumeYes?: boolean } = {},\n): Promise<void> {\n\tif (options.configured === false) return;\n\tif (await isTrusted(url)) return;\n\n\tif (options.configured !== true && !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 set services.trustLocalCa.',\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(\n\t\t\t\t' Skipped. Run \"gkm trust\" later, or set services.trustLocalCa.',\n\t\t\t);\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...(workspace.services.trustLocalCa === undefined\n\t\t\t\t? {}\n\t\t\t\t: { configured: workspace.services.trustLocalCa }),\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\tconst secrets = createStageSecrets(stage, serviceNames, {\n\t\tprojectName: workspace.name,\n\t\teventsBackend: workspace.services.events,\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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"}
|
|
@@ -764,6 +764,11 @@ declare const WorkspaceConfigSchema: z.ZodObject<{
|
|
|
764
764
|
}>>;
|
|
765
765
|
trustLocalCa: z.ZodOptional<z.ZodBoolean>;
|
|
766
766
|
}, z.core.$strip>>;
|
|
767
|
+
stages: z.ZodObject<{
|
|
768
|
+
local: z.ZodString;
|
|
769
|
+
deployed: z.ZodArray<z.ZodString>;
|
|
770
|
+
protected: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
771
|
+
}, z.core.$strip>;
|
|
767
772
|
secrets: z.ZodOptional<z.ZodObject<{
|
|
768
773
|
enabled: z.ZodOptional<z.ZodBoolean>;
|
|
769
774
|
algorithm: z.ZodOptional<z.ZodString>;
|
|
@@ -1182,6 +1187,36 @@ interface SharedConfig {
|
|
|
1182
1187
|
/** Models package configuration */
|
|
1183
1188
|
models?: ModelsConfig;
|
|
1184
1189
|
}
|
|
1190
|
+
/**
|
|
1191
|
+
* The project's stages, named by the project.
|
|
1192
|
+
*
|
|
1193
|
+
* Stage names were literals scattered through the CLI — `gkm dev` ran as
|
|
1194
|
+
* `development` and looked for `dev` secrets first, a deploy script said
|
|
1195
|
+
* `production` — so a team that called its stages anything else was
|
|
1196
|
+
* working against the tool. They are declared once, here, and read.
|
|
1197
|
+
*
|
|
1198
|
+
* @example
|
|
1199
|
+
* ```ts
|
|
1200
|
+
* stages: { local: 'dev', deployed: ['staging', 'prod'], protected: ['prod'] }
|
|
1201
|
+
* ```
|
|
1202
|
+
*/
|
|
1203
|
+
interface StagesConfig {
|
|
1204
|
+
/**
|
|
1205
|
+
* What `gkm dev`, `exec`, `setup` and `test` run as: the stage whose
|
|
1206
|
+
* secrets are read locally, and whose containers carry no suffix.
|
|
1207
|
+
*
|
|
1208
|
+
* Never also a deployed stage. Secrets are stored per stage name, so a
|
|
1209
|
+
* deployed stage sharing it would share its secrets with every laptop.
|
|
1210
|
+
*/
|
|
1211
|
+
local: string;
|
|
1212
|
+
/** The stages `gkm deploy --stage` accepts. */
|
|
1213
|
+
deployed: string[];
|
|
1214
|
+
/**
|
|
1215
|
+
* Deployed stages whose resources outlive the stack that made them —
|
|
1216
|
+
* retained on removal and protected, e.g. the stage users are on.
|
|
1217
|
+
*/
|
|
1218
|
+
protected?: string[];
|
|
1219
|
+
}
|
|
1185
1220
|
/**
|
|
1186
1221
|
* Secrets encryption configuration.
|
|
1187
1222
|
*
|
|
@@ -1536,6 +1571,8 @@ type WorkspaceInput<TApps extends AppsRecord> = {
|
|
|
1536
1571
|
deploy?: DeployConfig;
|
|
1537
1572
|
/** Development services (db, cache, mail, storage, events) */
|
|
1538
1573
|
services?: ServicesConfig;
|
|
1574
|
+
/** The project's stages: which one is local, which deploy */
|
|
1575
|
+
stages: StagesConfig;
|
|
1539
1576
|
/** Encrypted secrets configuration */
|
|
1540
1577
|
secrets?: SecretsConfig;
|
|
1541
1578
|
/** State provider configuration (local filesystem by default, or SSM for team collaboration) */
|
|
@@ -1563,6 +1600,7 @@ type InferredWorkspaceConfig<TApps extends AppsRecord> = {
|
|
|
1563
1600
|
shared?: SharedConfig;
|
|
1564
1601
|
deploy?: DeployConfig;
|
|
1565
1602
|
services?: ServicesConfig;
|
|
1603
|
+
stages: StagesConfig;
|
|
1566
1604
|
secrets?: SecretsConfig;
|
|
1567
1605
|
state?: StateConfig;
|
|
1568
1606
|
};
|
|
@@ -1661,6 +1699,8 @@ interface WorkspaceConfig {
|
|
|
1661
1699
|
deploy?: DeployConfig;
|
|
1662
1700
|
/** Development services (db, cache, mail, storage, events) */
|
|
1663
1701
|
services?: ServicesConfig;
|
|
1702
|
+
/** The project's stages: which one is local, which deploy */
|
|
1703
|
+
stages: StagesConfig;
|
|
1664
1704
|
/** Encrypted secrets configuration */
|
|
1665
1705
|
secrets?: SecretsConfig;
|
|
1666
1706
|
/** State provider configuration (local filesystem by default, or SSM for team collaboration) */
|
|
@@ -1726,6 +1766,8 @@ interface NormalizedWorkspace {
|
|
|
1726
1766
|
deploy: DeployConfig;
|
|
1727
1767
|
/** Shared packages configuration (empty object if not specified) */
|
|
1728
1768
|
shared: SharedConfig;
|
|
1769
|
+
/** The project's stages, as declared */
|
|
1770
|
+
stages: StagesConfig;
|
|
1729
1771
|
/** Secrets configuration (empty object if not specified) */
|
|
1730
1772
|
secrets: SecretsConfig;
|
|
1731
1773
|
/** State provider configuration (undefined = local filesystem) */
|
|
@@ -2057,6 +2099,8 @@ interface GkmConfig {
|
|
|
2057
2099
|
* directory name.
|
|
2058
2100
|
*/
|
|
2059
2101
|
name?: string;
|
|
2102
|
+
/** The project's stages: which one is local, which deploy */
|
|
2103
|
+
stages: StagesConfig;
|
|
2060
2104
|
/**
|
|
2061
2105
|
* Where the things no construct implies live.
|
|
2062
2106
|
*
|
|
@@ -2078,15 +2122,7 @@ interface GkmConfig {
|
|
|
2078
2122
|
*
|
|
2079
2123
|
* @example './src/**\/*.ts'
|
|
2080
2124
|
*/
|
|
2081
|
-
constructs
|
|
2082
|
-
routes: Routes;
|
|
2083
|
-
functions?: Routes;
|
|
2084
|
-
crons?: Routes;
|
|
2085
|
-
subscribers?: Routes;
|
|
2086
|
-
queues?: Routes;
|
|
2087
|
-
topics?: Routes;
|
|
2088
|
-
envParser: string;
|
|
2089
|
-
logger: string;
|
|
2125
|
+
constructs: Routes;
|
|
2090
2126
|
providers?: ProvidersConfig;
|
|
2091
2127
|
/**
|
|
2092
2128
|
* Server lifecycle hooks for customizing the Hono app.
|
|
@@ -2181,4 +2217,4 @@ interface GkmConfig {
|
|
|
2181
2217
|
}
|
|
2182
2218
|
//#endregion
|
|
2183
2219
|
export { AppConfig, AppConfigInput, AppInput, AppsRecord, BackendFramework, CacheBackend, ConstrainedApps, DeployConfig, DeployTarget, DokployWorkspaceConfig, EmailBackend, Framework, FrontendFramework, GkmConfig, InferAppNames, InferredWorkspaceConfig, LoadedConfig, MailServiceConfig, MobileFramework, ModelsConfig, NormalizedAppConfig, NormalizedWorkspace, OpenApiConfig, PHASE_2_DEPLOY_TARGETS, Routes, SUPPORTED_DEPLOY_TARGETS, SecretsConfig, ServiceImageConfig, ServicesConfig, SharedConfig, WorkspaceConfig, WorkspaceConfigSchema, WorkspaceInput, formatValidationErrors, getDeployTargetError, isDeployTargetSupported, isPhase2DeployTarget, isWorkspaceConfig, safeValidateWorkspaceConfig, validateWorkspaceConfig };
|
|
2184
|
-
//# sourceMappingURL=types-
|
|
2220
|
+
//# sourceMappingURL=types-6pkp2RRj.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types-6pkp2RRj.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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"}
|
|
@@ -764,6 +764,11 @@ declare const WorkspaceConfigSchema: z.ZodObject<{
|
|
|
764
764
|
}>>;
|
|
765
765
|
trustLocalCa: z.ZodOptional<z.ZodBoolean>;
|
|
766
766
|
}, z.core.$strip>>;
|
|
767
|
+
stages: z.ZodObject<{
|
|
768
|
+
local: z.ZodString;
|
|
769
|
+
deployed: z.ZodArray<z.ZodString>;
|
|
770
|
+
protected: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
771
|
+
}, z.core.$strip>;
|
|
767
772
|
secrets: z.ZodOptional<z.ZodObject<{
|
|
768
773
|
enabled: z.ZodOptional<z.ZodBoolean>;
|
|
769
774
|
algorithm: z.ZodOptional<z.ZodString>;
|
|
@@ -1182,6 +1187,36 @@ interface SharedConfig {
|
|
|
1182
1187
|
/** Models package configuration */
|
|
1183
1188
|
models?: ModelsConfig;
|
|
1184
1189
|
}
|
|
1190
|
+
/**
|
|
1191
|
+
* The project's stages, named by the project.
|
|
1192
|
+
*
|
|
1193
|
+
* Stage names were literals scattered through the CLI — `gkm dev` ran as
|
|
1194
|
+
* `development` and looked for `dev` secrets first, a deploy script said
|
|
1195
|
+
* `production` — so a team that called its stages anything else was
|
|
1196
|
+
* working against the tool. They are declared once, here, and read.
|
|
1197
|
+
*
|
|
1198
|
+
* @example
|
|
1199
|
+
* ```ts
|
|
1200
|
+
* stages: { local: 'dev', deployed: ['staging', 'prod'], protected: ['prod'] }
|
|
1201
|
+
* ```
|
|
1202
|
+
*/
|
|
1203
|
+
interface StagesConfig {
|
|
1204
|
+
/**
|
|
1205
|
+
* What `gkm dev`, `exec`, `setup` and `test` run as: the stage whose
|
|
1206
|
+
* secrets are read locally, and whose containers carry no suffix.
|
|
1207
|
+
*
|
|
1208
|
+
* Never also a deployed stage. Secrets are stored per stage name, so a
|
|
1209
|
+
* deployed stage sharing it would share its secrets with every laptop.
|
|
1210
|
+
*/
|
|
1211
|
+
local: string;
|
|
1212
|
+
/** The stages `gkm deploy --stage` accepts. */
|
|
1213
|
+
deployed: string[];
|
|
1214
|
+
/**
|
|
1215
|
+
* Deployed stages whose resources outlive the stack that made them —
|
|
1216
|
+
* retained on removal and protected, e.g. the stage users are on.
|
|
1217
|
+
*/
|
|
1218
|
+
protected?: string[];
|
|
1219
|
+
}
|
|
1185
1220
|
/**
|
|
1186
1221
|
* Secrets encryption configuration.
|
|
1187
1222
|
*
|
|
@@ -1536,6 +1571,8 @@ type WorkspaceInput<TApps extends AppsRecord> = {
|
|
|
1536
1571
|
deploy?: DeployConfig;
|
|
1537
1572
|
/** Development services (db, cache, mail, storage, events) */
|
|
1538
1573
|
services?: ServicesConfig;
|
|
1574
|
+
/** The project's stages: which one is local, which deploy */
|
|
1575
|
+
stages: StagesConfig;
|
|
1539
1576
|
/** Encrypted secrets configuration */
|
|
1540
1577
|
secrets?: SecretsConfig;
|
|
1541
1578
|
/** State provider configuration (local filesystem by default, or SSM for team collaboration) */
|
|
@@ -1563,6 +1600,7 @@ type InferredWorkspaceConfig<TApps extends AppsRecord> = {
|
|
|
1563
1600
|
shared?: SharedConfig;
|
|
1564
1601
|
deploy?: DeployConfig;
|
|
1565
1602
|
services?: ServicesConfig;
|
|
1603
|
+
stages: StagesConfig;
|
|
1566
1604
|
secrets?: SecretsConfig;
|
|
1567
1605
|
state?: StateConfig;
|
|
1568
1606
|
};
|
|
@@ -1661,6 +1699,8 @@ interface WorkspaceConfig {
|
|
|
1661
1699
|
deploy?: DeployConfig;
|
|
1662
1700
|
/** Development services (db, cache, mail, storage, events) */
|
|
1663
1701
|
services?: ServicesConfig;
|
|
1702
|
+
/** The project's stages: which one is local, which deploy */
|
|
1703
|
+
stages: StagesConfig;
|
|
1664
1704
|
/** Encrypted secrets configuration */
|
|
1665
1705
|
secrets?: SecretsConfig;
|
|
1666
1706
|
/** State provider configuration (local filesystem by default, or SSM for team collaboration) */
|
|
@@ -1726,6 +1766,8 @@ interface NormalizedWorkspace {
|
|
|
1726
1766
|
deploy: DeployConfig;
|
|
1727
1767
|
/** Shared packages configuration (empty object if not specified) */
|
|
1728
1768
|
shared: SharedConfig;
|
|
1769
|
+
/** The project's stages, as declared */
|
|
1770
|
+
stages: StagesConfig;
|
|
1729
1771
|
/** Secrets configuration (empty object if not specified) */
|
|
1730
1772
|
secrets: SecretsConfig;
|
|
1731
1773
|
/** State provider configuration (undefined = local filesystem) */
|
|
@@ -2057,6 +2099,8 @@ interface GkmConfig {
|
|
|
2057
2099
|
* directory name.
|
|
2058
2100
|
*/
|
|
2059
2101
|
name?: string;
|
|
2102
|
+
/** The project's stages: which one is local, which deploy */
|
|
2103
|
+
stages: StagesConfig;
|
|
2060
2104
|
/**
|
|
2061
2105
|
* Where the things no construct implies live.
|
|
2062
2106
|
*
|
|
@@ -2078,15 +2122,7 @@ interface GkmConfig {
|
|
|
2078
2122
|
*
|
|
2079
2123
|
* @example './src/**\/*.ts'
|
|
2080
2124
|
*/
|
|
2081
|
-
constructs
|
|
2082
|
-
routes: Routes;
|
|
2083
|
-
functions?: Routes;
|
|
2084
|
-
crons?: Routes;
|
|
2085
|
-
subscribers?: Routes;
|
|
2086
|
-
queues?: Routes;
|
|
2087
|
-
topics?: Routes;
|
|
2088
|
-
envParser: string;
|
|
2089
|
-
logger: string;
|
|
2125
|
+
constructs: Routes;
|
|
2090
2126
|
providers?: ProvidersConfig;
|
|
2091
2127
|
/**
|
|
2092
2128
|
* Server lifecycle hooks for customizing the Hono app.
|
|
@@ -2181,4 +2217,4 @@ interface GkmConfig {
|
|
|
2181
2217
|
}
|
|
2182
2218
|
//#endregion
|
|
2183
2219
|
export { AppConfig, AppConfigInput, AppInput, AppsRecord, BackendFramework, CacheBackend, ConstrainedApps, DeployConfig, DeployTarget, DokployWorkspaceConfig, EmailBackend, Framework, FrontendFramework, GkmConfig, InferAppNames, InferredWorkspaceConfig, LoadedConfig, MailServiceConfig, MobileFramework, ModelsConfig, NormalizedAppConfig, NormalizedWorkspace, OpenApiConfig, PHASE_2_DEPLOY_TARGETS, Routes, SUPPORTED_DEPLOY_TARGETS, SecretsConfig, ServiceImageConfig, ServicesConfig, SharedConfig, WorkspaceConfig, WorkspaceConfigSchema, WorkspaceInput, formatValidationErrors, getDeployTargetError, isDeployTargetSupported, isPhase2DeployTarget, isWorkspaceConfig, safeValidateWorkspaceConfig, validateWorkspaceConfig };
|
|
2184
|
-
//# sourceMappingURL=types-
|
|
2220
|
+
//# sourceMappingURL=types-Y3fKQSAK.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types-Y3fKQSAK.d.cts","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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"}
|
package/dist/workspace/index.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const require_workspace = require('../workspace-
|
|
1
|
+
const require_workspace = require('../workspace-C6VJQVtG.cjs');
|
|
2
2
|
|
|
3
3
|
exports.PHASE_2_DEPLOY_TARGETS = require_workspace.PHASE_2_DEPLOY_TARGETS;
|
|
4
4
|
exports.PUBLIC_ENV_PREFIXES = require_workspace.PUBLIC_ENV_PREFIXES;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { AppConfig, AppConfigInput, AppInput, AppsRecord, BackendFramework, ConstrainedApps, DeployConfig, DeployTarget, DokployWorkspaceConfig, FrontendFramework, InferAppNames, InferredWorkspaceConfig, LoadedConfig, MailServiceConfig, MobileFramework, ModelsConfig, NormalizedAppConfig, NormalizedWorkspace, PHASE_2_DEPLOY_TARGETS, SUPPORTED_DEPLOY_TARGETS, SecretsConfig, ServiceImageConfig, ServicesConfig, SharedConfig, WorkspaceConfig, WorkspaceConfigSchema, WorkspaceInput, formatValidationErrors, getDeployTargetError, isDeployTargetSupported, isPhase2DeployTarget, isWorkspaceConfig, safeValidateWorkspaceConfig, validateWorkspaceConfig } from "../types-
|
|
2
|
-
import { PUBLIC_ENV_PREFIXES, allConstructGlobs, appConstructGlobs, constructPatterns, defineWorkspace, getAppBuildOrder, getAppGkmConfig, getDependencyEnvVars, getEndpointForStage, getPublicEnvPrefix, normalizeWorkspace, processConfig, stripPublicPrefix, workspaceConstructGlobs, wrapSingleAppAsWorkspace } from "../index-
|
|
1
|
+
import { AppConfig, AppConfigInput, AppInput, AppsRecord, BackendFramework, ConstrainedApps, DeployConfig, DeployTarget, DokployWorkspaceConfig, FrontendFramework, InferAppNames, InferredWorkspaceConfig, LoadedConfig, MailServiceConfig, MobileFramework, ModelsConfig, NormalizedAppConfig, NormalizedWorkspace, PHASE_2_DEPLOY_TARGETS, SUPPORTED_DEPLOY_TARGETS, SecretsConfig, ServiceImageConfig, ServicesConfig, SharedConfig, WorkspaceConfig, WorkspaceConfigSchema, WorkspaceInput, formatValidationErrors, getDeployTargetError, isDeployTargetSupported, isPhase2DeployTarget, isWorkspaceConfig, safeValidateWorkspaceConfig, validateWorkspaceConfig } from "../types-Y3fKQSAK.cjs";
|
|
2
|
+
import { PUBLIC_ENV_PREFIXES, allConstructGlobs, appConstructGlobs, constructPatterns, defineWorkspace, getAppBuildOrder, getAppGkmConfig, getDependencyEnvVars, getEndpointForStage, getPublicEnvPrefix, normalizeWorkspace, processConfig, stripPublicPrefix, workspaceConstructGlobs, wrapSingleAppAsWorkspace } from "../index-CR5urhWX.cjs";
|
|
3
3
|
export { AppConfig, AppConfigInput, AppInput, AppsRecord, BackendFramework, ConstrainedApps, DeployConfig, DeployTarget, DokployWorkspaceConfig, FrontendFramework, InferAppNames, InferredWorkspaceConfig, LoadedConfig, MailServiceConfig, MobileFramework, ModelsConfig, NormalizedAppConfig, NormalizedWorkspace, PHASE_2_DEPLOY_TARGETS, PUBLIC_ENV_PREFIXES, SUPPORTED_DEPLOY_TARGETS, SecretsConfig, ServiceImageConfig, ServicesConfig, SharedConfig, WorkspaceConfig, WorkspaceConfigSchema, WorkspaceInput, allConstructGlobs, appConstructGlobs, constructPatterns, defineWorkspace, formatValidationErrors, getAppBuildOrder, getAppGkmConfig, getDependencyEnvVars, getDeployTargetError, getEndpointForStage, getPublicEnvPrefix, isDeployTargetSupported, isPhase2DeployTarget, isWorkspaceConfig, normalizeWorkspace, processConfig, safeValidateWorkspaceConfig, stripPublicPrefix, validateWorkspaceConfig, workspaceConstructGlobs, wrapSingleAppAsWorkspace };
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { AppConfig, AppConfigInput, AppInput, AppsRecord, BackendFramework, ConstrainedApps, DeployConfig, DeployTarget, DokployWorkspaceConfig, FrontendFramework, InferAppNames, InferredWorkspaceConfig, LoadedConfig, MailServiceConfig, MobileFramework, ModelsConfig, NormalizedAppConfig, NormalizedWorkspace, PHASE_2_DEPLOY_TARGETS, SUPPORTED_DEPLOY_TARGETS, SecretsConfig, ServiceImageConfig, ServicesConfig, SharedConfig, WorkspaceConfig, WorkspaceConfigSchema, WorkspaceInput, formatValidationErrors, getDeployTargetError, isDeployTargetSupported, isPhase2DeployTarget, isWorkspaceConfig, safeValidateWorkspaceConfig, validateWorkspaceConfig } from "../types-
|
|
2
|
-
import { PUBLIC_ENV_PREFIXES, allConstructGlobs, appConstructGlobs, constructPatterns, defineWorkspace, getAppBuildOrder, getAppGkmConfig, getDependencyEnvVars, getEndpointForStage, getPublicEnvPrefix, normalizeWorkspace, processConfig, stripPublicPrefix, workspaceConstructGlobs, wrapSingleAppAsWorkspace } from "../index-
|
|
1
|
+
import { AppConfig, AppConfigInput, AppInput, AppsRecord, BackendFramework, ConstrainedApps, DeployConfig, DeployTarget, DokployWorkspaceConfig, FrontendFramework, InferAppNames, InferredWorkspaceConfig, LoadedConfig, MailServiceConfig, MobileFramework, ModelsConfig, NormalizedAppConfig, NormalizedWorkspace, PHASE_2_DEPLOY_TARGETS, SUPPORTED_DEPLOY_TARGETS, SecretsConfig, ServiceImageConfig, ServicesConfig, SharedConfig, WorkspaceConfig, WorkspaceConfigSchema, WorkspaceInput, formatValidationErrors, getDeployTargetError, isDeployTargetSupported, isPhase2DeployTarget, isWorkspaceConfig, safeValidateWorkspaceConfig, validateWorkspaceConfig } from "../types-6pkp2RRj.mjs";
|
|
2
|
+
import { PUBLIC_ENV_PREFIXES, allConstructGlobs, appConstructGlobs, constructPatterns, defineWorkspace, getAppBuildOrder, getAppGkmConfig, getDependencyEnvVars, getEndpointForStage, getPublicEnvPrefix, normalizeWorkspace, processConfig, stripPublicPrefix, workspaceConstructGlobs, wrapSingleAppAsWorkspace } from "../index-C6e-ULLx.mjs";
|
|
3
3
|
export { AppConfig, AppConfigInput, AppInput, AppsRecord, BackendFramework, ConstrainedApps, DeployConfig, DeployTarget, DokployWorkspaceConfig, FrontendFramework, InferAppNames, InferredWorkspaceConfig, LoadedConfig, MailServiceConfig, MobileFramework, ModelsConfig, NormalizedAppConfig, NormalizedWorkspace, PHASE_2_DEPLOY_TARGETS, PUBLIC_ENV_PREFIXES, SUPPORTED_DEPLOY_TARGETS, SecretsConfig, ServiceImageConfig, ServicesConfig, SharedConfig, WorkspaceConfig, WorkspaceConfigSchema, WorkspaceInput, allConstructGlobs, appConstructGlobs, constructPatterns, defineWorkspace, formatValidationErrors, getAppBuildOrder, getAppGkmConfig, getDependencyEnvVars, getDeployTargetError, getEndpointForStage, getPublicEnvPrefix, isDeployTargetSupported, isPhase2DeployTarget, isWorkspaceConfig, normalizeWorkspace, processConfig, safeValidateWorkspaceConfig, stripPublicPrefix, validateWorkspaceConfig, workspaceConstructGlobs, wrapSingleAppAsWorkspace };
|
package/dist/workspace/index.mjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { PHASE_2_DEPLOY_TARGETS, PUBLIC_ENV_PREFIXES, SUPPORTED_DEPLOY_TARGETS, WorkspaceConfigSchema, allConstructGlobs, appConstructGlobs, constructPatterns, defineWorkspace, formatValidationErrors, getAppBuildOrder, getAppGkmConfig, getDependencyEnvVars, getDeployTargetError, getEndpointForStage, getPublicEnvPrefix, isDeployTargetSupported, isPhase2DeployTarget, isWorkspaceConfig, normalizeWorkspace, processConfig, safeValidateWorkspaceConfig, stripPublicPrefix, validateWorkspaceConfig, workspaceConstructGlobs, wrapSingleAppAsWorkspace } from "../workspace-
|
|
1
|
+
import { PHASE_2_DEPLOY_TARGETS, PUBLIC_ENV_PREFIXES, SUPPORTED_DEPLOY_TARGETS, WorkspaceConfigSchema, allConstructGlobs, appConstructGlobs, constructPatterns, defineWorkspace, formatValidationErrors, getAppBuildOrder, getAppGkmConfig, getDependencyEnvVars, getDeployTargetError, getEndpointForStage, getPublicEnvPrefix, isDeployTargetSupported, isPhase2DeployTarget, isWorkspaceConfig, normalizeWorkspace, processConfig, safeValidateWorkspaceConfig, stripPublicPrefix, validateWorkspaceConfig, workspaceConstructGlobs, wrapSingleAppAsWorkspace } from "../workspace-zoqRbihZ.mjs";
|
|
2
2
|
|
|
3
3
|
export { PHASE_2_DEPLOY_TARGETS, PUBLIC_ENV_PREFIXES, SUPPORTED_DEPLOY_TARGETS, WorkspaceConfigSchema, allConstructGlobs, appConstructGlobs, constructPatterns, defineWorkspace, formatValidationErrors, getAppBuildOrder, getAppGkmConfig, getDependencyEnvVars, getDeployTargetError, getEndpointForStage, getPublicEnvPrefix, isDeployTargetSupported, isPhase2DeployTarget, isWorkspaceConfig, normalizeWorkspace, processConfig, safeValidateWorkspaceConfig, stripPublicPrefix, validateWorkspaceConfig, workspaceConstructGlobs, wrapSingleAppAsWorkspace };
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import "./discover-CAlFgYec.mjs";
|
|
2
|
+
import "./config-DVVph9yz.mjs";
|
|
3
|
+
import "./workspace-zoqRbihZ.mjs";
|
|
4
|
+
import { constructGlobs, derivedContainers, imagePins, reconcileWorkspace, usesConstructs } from "./credentials-dP8vRVRv.mjs";
|
|
5
|
+
import "./generator-VE2JrFlY.mjs";
|
|
6
|
+
import "./storage-Bi24WfoW.mjs";
|
|
7
|
+
|
|
8
|
+
export { derivedContainers, reconcileWorkspace };
|