@geekmidas/cli 10.0.0-alpha.50 → 10.0.0-alpha.52
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/dist/{backends-B9V2XD2M.cjs → backends-BXcwhb7p.cjs} +2 -2
- package/dist/{backends-B9V2XD2M.cjs.map → backends-BXcwhb7p.cjs.map} +1 -1
- package/dist/{backends-CSuLl0YP.mjs → backends-CLq1wlQf.mjs} +2 -2
- package/dist/{backends-CSuLl0YP.mjs.map → backends-CLq1wlQf.mjs.map} +1 -1
- package/dist/{config-CsYSyUya.cjs → config-Cvr5fCbn.cjs} +3 -2
- package/dist/config-Cvr5fCbn.cjs.map +1 -0
- package/dist/{config-D8J5rrTb.mjs → config-SOkDH-n1.mjs} +3 -2
- package/dist/config-SOkDH-n1.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/{encryption-DyQnPsZN.mjs → encryption-Cv-Ej9vR.mjs} +4 -4
- package/dist/{encryption-DyQnPsZN.mjs.map → encryption-Cv-Ej9vR.mjs.map} +1 -1
- package/dist/{encryption-C7OGMve_.cjs → encryption-DCsdx4Po.cjs} +4 -4
- package/dist/{encryption-C7OGMve_.cjs.map → encryption-DCsdx4Po.cjs.map} +1 -1
- package/dist/{github-BrI1tv6u.cjs → github-BGx4U61b.cjs} +3 -3
- package/dist/{github-BrI1tv6u.cjs.map → github-BGx4U61b.cjs.map} +1 -1
- package/dist/{github-BfpadQWQ.mjs → github-U_frvZgD.mjs} +3 -3
- package/dist/{github-BfpadQWQ.mjs.map → github-U_frvZgD.mjs.map} +1 -1
- package/dist/{index-BQhJXpaQ.d.mts → index-DYh5TrsZ.d.mts} +2 -2
- package/dist/{index-BQhJXpaQ.d.mts.map → index-DYh5TrsZ.d.mts.map} +1 -1
- package/dist/{index-DHJePE0y.d.cts → index-fU3qHy7c.d.cts} +2 -2
- package/dist/{index-DHJePE0y.d.cts.map → index-fU3qHy7c.d.cts.map} +1 -1
- package/dist/index.cjs +95 -83
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +95 -83
- package/dist/index.mjs.map +1 -1
- package/dist/{migrate-CNlew9Ek.cjs → migrate-DCxK1NRd.cjs} +4 -4
- package/dist/{migrate-CNlew9Ek.cjs.map → migrate-DCxK1NRd.cjs.map} +1 -1
- package/dist/{migrate-B00XpVaO.mjs → migrate-DmabhO_N.mjs} +4 -4
- package/dist/{migrate-B00XpVaO.mjs.map → migrate-DmabhO_N.mjs.map} +1 -1
- package/dist/openapi.cjs +1 -1
- package/dist/openapi.d.cts +1 -1
- package/dist/openapi.d.mts +1 -1
- package/dist/openapi.mjs +1 -1
- package/dist/{ready-lr2Fm-ep.cjs → ready-ClUpTxoL.cjs} +14 -2
- package/dist/ready-ClUpTxoL.cjs.map +1 -0
- package/dist/{ready-WfT-eWlm.mjs → ready-tQLNHNya.mjs} +15 -3
- package/dist/ready-tQLNHNya.mjs.map +1 -0
- package/dist/reconcile/public.d.cts +1 -1
- package/dist/reconcile/public.d.mts +1 -1
- package/dist/{types-BbrNu83u.d.mts → types-CT0ymlBk.d.mts} +25 -24
- package/dist/{types-BbrNu83u.d.mts.map → types-CT0ymlBk.d.mts.map} +1 -1
- package/dist/{types-DNqEsctD.d.cts → types-DYDT4FfE.d.cts} +25 -24
- package/dist/{types-DNqEsctD.d.cts.map → types-DYDT4FfE.d.cts.map} +1 -1
- package/dist/vitest.cjs +1 -1
- package/dist/vitest.mjs +1 -1
- 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-j6ZxvJqq.cjs → workspace-BEGUDNwK.cjs} +17 -6
- package/dist/workspace-BEGUDNwK.cjs.map +1 -0
- package/dist/{workspace-DEibcoBe.cjs → workspace-BcCiLzTO.cjs} +4 -4
- package/dist/{workspace-DEibcoBe.cjs.map → workspace-BcCiLzTO.cjs.map} +1 -1
- package/dist/{workspace-DNzWgM1J.mjs → workspace-bOsks1uk.mjs} +4 -4
- package/dist/{workspace-DNzWgM1J.mjs.map → workspace-bOsks1uk.mjs.map} +1 -1
- package/dist/{workspace-BsbxbqV-.mjs → workspace-fa5H6l7D.mjs} +17 -6
- package/dist/workspace-fa5H6l7D.mjs.map +1 -0
- package/package.json +14 -14
- package/dist/config-CsYSyUya.cjs.map +0 -1
- package/dist/config-D8J5rrTb.mjs.map +0 -1
- package/dist/ready-WfT-eWlm.mjs.map +0 -1
- package/dist/ready-lr2Fm-ep.cjs.map +0 -1
- package/dist/workspace-BsbxbqV-.mjs.map +0 -1
- package/dist/workspace-j6ZxvJqq.cjs.map +0 -1
package/dist/index.mjs
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
#!/usr/bin/env -S npx tsx
|
|
2
2
|
import { n as __require, t as __exportAll } from "./rolldown-runtime-BhDjJH2R.mjs";
|
|
3
3
|
import { i as ConstructGenerator, t as discover } from "./discover-Cf2jAcgF.mjs";
|
|
4
|
-
import { d as parseModuleConfig, f as appKey, l as loadWorkspaceConfig, n as NotABackendApp, o as loadAppConfig, p as derivedApps, r as NotInAnApp, s as loadConfig, t as ConfigNotFound, u as loadWorkspaceSettings } from "./config-
|
|
5
|
-
import { D as assertDeployedStage, E as TEST_STAGE, O as deployedProblems, T as InvalidStages, a as getAppBuildOrder, b as getDeployTargetError, k as stageProblems, m as stripPublicPrefix, o as getAppGkmConfig, p as getPublicEnvPrefix, t as allConstructGlobs, x as isDeployTargetSupported } from "./workspace-
|
|
4
|
+
import { d as parseModuleConfig, f as appKey, l as loadWorkspaceConfig, n as NotABackendApp, o as loadAppConfig, p as derivedApps, r as NotInAnApp, s as loadConfig, t as ConfigNotFound, u as loadWorkspaceSettings } from "./config-SOkDH-n1.mjs";
|
|
5
|
+
import { D as assertDeployedStage, E as TEST_STAGE, O as deployedProblems, T as InvalidStages, a as getAppBuildOrder, b as getDeployTargetError, k as stageProblems, m as stripPublicPrefix, o as getAppGkmConfig, p as getPublicEnvPrefix, t as allConstructGlobs, x as isDeployTargetSupported } from "./workspace-bOsks1uk.mjs";
|
|
6
6
|
import { a as withCustomSecret, i as toEmbeddableSecrets, n as maskPassword, t as initStageSecrets } from "./storage-BzaUxmqe.mjs";
|
|
7
7
|
import { a as getKeyPath, i as FileSecretsStore, n as secretsStoreFor } from "./store-DeGATCS-.mjs";
|
|
8
|
-
import { C as loadEnvFiles, S as isPortAvailable, T as prepareEntryCredentials, _ as fakeKey, a as reconcileWorkspace, b as createEntryWrapper, c as LOCAL_CA_PATH, d as postgresDatabaseNames, f as quoteIdentifier, g as describeServices, h as rootSite, i as derivedContainers, l as forgetState, m as resourceName, n as backendsOf$1, p as pgClient, r as constructGlobs, s as COMPOSE_PATH, t as FAKE_ENV, u as applyPostgres, v as primaryPortKey, w as loadSecretsForApp, x as findAvailablePort, y as createCredentialsPreload } from "./workspace-
|
|
8
|
+
import { C as loadEnvFiles, S as isPortAvailable, T as prepareEntryCredentials, _ as fakeKey, a as reconcileWorkspace, b as createEntryWrapper, c as LOCAL_CA_PATH, d as postgresDatabaseNames, f as quoteIdentifier, g as describeServices, h as rootSite, i as derivedContainers, l as forgetState, m as resourceName, n as backendsOf$1, p as pgClient, r as constructGlobs, s as COMPOSE_PATH, t as FAKE_ENV, u as applyPostgres, v as primaryPortKey, w as loadSecretsForApp, x as findAvailablePort, y as createCredentialsPreload } from "./workspace-fa5H6l7D.mjs";
|
|
9
9
|
import { n as EndpointGenerator, r as runtimeFor } from "./OpenApiTsGenerator-BzIGy8KE.mjs";
|
|
10
10
|
import { generateOpenApi, openapiCommand, resolveOpenApiConfig } from "./openapi.mjs";
|
|
11
|
-
import { a as writeTestHarness, c as driversFor, i as TEST_MANIFEST_ENV, n as TEST_READY_FILE, o as SubscriberGenerator, s as cacheBackendsIn, t as TEST_READY_ENV } from "./ready-
|
|
12
|
-
import { i as storageBackendFor, n as eventsBackendFor, r as providerOf, t as cacheBackendFor } from "./backends-
|
|
11
|
+
import { a as writeTestHarness, c as driversFor, i as TEST_MANIFEST_ENV, n as TEST_READY_FILE, o as SubscriberGenerator, s as cacheBackendsIn, t as TEST_READY_ENV } from "./ready-tQLNHNya.mjs";
|
|
12
|
+
import { i as storageBackendFor, n as eventsBackendFor, r as providerOf, t as cacheBackendFor } from "./backends-CLq1wlQf.mjs";
|
|
13
13
|
import { n as withCompute, r as withRoutes, t as manifestModule } from "./emit-C1e8qD08.mjs";
|
|
14
14
|
import { createRequire } from "node:module";
|
|
15
15
|
import { Command } from "commander";
|
|
@@ -42,7 +42,7 @@ import { Queue } from "@geekmidas/constructs/queue";
|
|
|
42
42
|
import { Topic } from "@geekmidas/constructs/topic";
|
|
43
43
|
import { lookup } from "node:dns/promises";
|
|
44
44
|
//#region package.json
|
|
45
|
-
var version = "10.0.0-alpha.
|
|
45
|
+
var version = "10.0.0-alpha.52";
|
|
46
46
|
//#endregion
|
|
47
47
|
//#region src/auth/credentials.ts
|
|
48
48
|
/**
|
|
@@ -1725,9 +1725,9 @@ async function workspaceDevCommand(configured, options) {
|
|
|
1725
1725
|
for (const { id, port } of fakes) logger$9.log(`🎭 ${id} fake: http://localhost:${port}`);
|
|
1726
1726
|
logger$9.log(options.migrate || options.seed ? "🗄️ Migrating the databases" : "🗄️ Checking for pending migrations");
|
|
1727
1727
|
if (options.migrate || options.seed) {
|
|
1728
|
-
const { prepareDevDatabases } = await import("./migrate-
|
|
1728
|
+
const { prepareDevDatabases } = await import("./migrate-DmabhO_N.mjs");
|
|
1729
1729
|
await prepareDevDatabases(workspace, reconciled.env, { seed: !!options.seed });
|
|
1730
|
-
} else await import("./migrate-
|
|
1730
|
+
} else await import("./migrate-DmabhO_N.mjs").then(({ reportPendingMigrations }) => reportPendingMigrations(workspace, reconciled.env)).catch((error) => {
|
|
1731
1731
|
logger$9.log(`⚠️ Could not check for pending migrations: ${error instanceof Error ? error.message : String(error)}`);
|
|
1732
1732
|
});
|
|
1733
1733
|
const appUrls = {};
|
|
@@ -2310,7 +2310,7 @@ var CronGenerator = class extends ConstructGenerator {
|
|
|
2310
2310
|
*/
|
|
2311
2311
|
import type { EnvironmentParser } from '@geekmidas/envkit';
|
|
2312
2312
|
import type { Logger } from '@geekmidas/logger';
|
|
2313
|
-
import { toCronExpression } from '@geekmidas/constructs/crons';
|
|
2313
|
+
import { runCron, scheduleInProcess, toCronExpression } from '@geekmidas/constructs/crons';
|
|
2314
2314
|
import { ServiceDiscovery } from '@geekmidas/services';
|
|
2315
2315
|
${Array.from(importsByFile.entries()).map(([importPath, exports]) => `import { ${exports.join(", ")} } from '${importPath}';`).join("\n")}
|
|
2316
2316
|
|
|
@@ -2351,11 +2351,10 @@ export async function setupCrons(
|
|
|
2351
2351
|
|
|
2352
2352
|
const run = async (entry: (typeof prepared)[number]) => {
|
|
2353
2353
|
try {
|
|
2354
|
-
|
|
2355
|
-
|
|
2356
|
-
|
|
2357
|
-
|
|
2358
|
-
});
|
|
2354
|
+
// The cron's own function, the way its Lambda would run it — services,
|
|
2355
|
+
// the worker's database as \`db\`, its events. It used to call a
|
|
2356
|
+
// \`handler\` a Cron does not have, so every firing logged a failure.
|
|
2357
|
+
await runCron(entry.cron, serviceDiscovery);
|
|
2359
2358
|
} catch (error) {
|
|
2360
2359
|
logger.error({ error, cron: entry.name }, 'Cron failed');
|
|
2361
2360
|
}
|
|
@@ -2366,13 +2365,28 @@ export async function setupCrons(
|
|
|
2366
2365
|
// memory fires each job once per replica — so the schedule lives in
|
|
2367
2366
|
// Postgres. It used to be a second pg-boss on the worker's database, as the
|
|
2368
2367
|
// runtime role, which can neither create a schema nor use the broker's.
|
|
2369
|
-
const { url } = envParser
|
|
2368
|
+
const { url, devPid } = envParser
|
|
2370
2369
|
.create((get) => ({
|
|
2371
2370
|
url: get('EVENT_PUBLISHER_CONNECTION_STRING').string().optional(),
|
|
2371
|
+
// Set by \`gkm dev\` on the server it starts, and by nothing deployed.
|
|
2372
|
+
devPid: get('GKM_DEV_PID').string().optional(),
|
|
2372
2373
|
}))
|
|
2373
2374
|
.parse();
|
|
2374
2375
|
|
|
2375
2376
|
if (!url?.startsWith('pgboss://')) {
|
|
2377
|
+
// \`gkm dev\` on a target whose crons are infrastructure once deployed —
|
|
2378
|
+
// EventBridge rules on AWS — has no broker to keep a schedule in. It is one
|
|
2379
|
+
// process, so a timer fires each job once, which is all pg-boss is for
|
|
2380
|
+
// here. Only there: a deployed server firing by timer fires once per
|
|
2381
|
+
// replica, so outside dev this stays the error below.
|
|
2382
|
+
if (devPid) {
|
|
2383
|
+
for (const entry of prepared) {
|
|
2384
|
+
running.push(scheduleInProcess(entry.schedule, () => run(entry)));
|
|
2385
|
+
logger.info({ cron: entry.name, schedule: entry.schedule }, 'Cron scheduled in this process');
|
|
2386
|
+
}
|
|
2387
|
+
return;
|
|
2388
|
+
}
|
|
2389
|
+
|
|
2376
2390
|
logger.error(
|
|
2377
2391
|
{ crons: prepared.map(({ name }) => name) },
|
|
2378
2392
|
'These crons have nowhere to keep their schedule. On a server they are ' +
|
|
@@ -3991,7 +4005,7 @@ async function provisionDeclared(options) {
|
|
|
3991
4005
|
cache: cacheBackendFor(providerOf(workspace)),
|
|
3992
4006
|
events: eventsBackendFor(providerOf(workspace)),
|
|
3993
4007
|
storage: storageBackendFor(providerOf(workspace)),
|
|
3994
|
-
addresses: surfaceAddresses(
|
|
4008
|
+
addresses: surfaceAddresses(manifest, options.appUrls),
|
|
3995
4009
|
seed: options.seed,
|
|
3996
4010
|
...options.supplied ? { supplied: options.supplied } : {},
|
|
3997
4011
|
deferred: [],
|
|
@@ -4053,25 +4067,20 @@ function carriersLast(ordered, manifest) {
|
|
|
4053
4067
|
return [...ordered.filter((id) => !carries(id)), ...ordered.filter(carries)];
|
|
4054
4068
|
}
|
|
4055
4069
|
/**
|
|
4056
|
-
* Where each declared surface answers.
|
|
4057
|
-
*
|
|
4058
|
-
* Every `rest-api` in a process answers on that process's address, so an app
|
|
4059
|
-
* serving both its own API and an auth server publishes one address twice —
|
|
4060
|
-
* which is exactly what it does at runtime, and the same rule the local target
|
|
4061
|
-
* applies.
|
|
4070
|
+
* Where each declared surface answers: its own app's address.
|
|
4062
4071
|
*
|
|
4063
|
-
*
|
|
4064
|
-
*
|
|
4065
|
-
*
|
|
4066
|
-
*
|
|
4067
|
-
* before relying on it.
|
|
4072
|
+
* Every surface is an app of its own, keyed by its id the way the derivation
|
|
4073
|
+
* keyed it — `Api` is `api`, `Webhooks` is `webhooks` — and answers on that
|
|
4074
|
+
* app's host, `{subdomain}.{domain}`. It used to be handed the first backend's
|
|
4075
|
+
* address, so a workspace with two APIs pointed both at the same one.
|
|
4068
4076
|
*/
|
|
4069
|
-
function surfaceAddresses(
|
|
4077
|
+
function surfaceAddresses(manifest, appUrls) {
|
|
4070
4078
|
const addresses = {};
|
|
4071
|
-
const
|
|
4072
|
-
|
|
4073
|
-
|
|
4074
|
-
|
|
4079
|
+
for (const [id, declaration] of Object.entries(manifest)) {
|
|
4080
|
+
if (declaration.kind !== "rest-api") continue;
|
|
4081
|
+
const url = appUrls[appKey(id)];
|
|
4082
|
+
if (url) addresses[id] = url;
|
|
4083
|
+
}
|
|
4075
4084
|
return addresses;
|
|
4076
4085
|
}
|
|
4077
4086
|
//#endregion
|
|
@@ -4550,32 +4559,34 @@ async function verifyDnsRecords(appHostnames, serverIp, state) {
|
|
|
4550
4559
|
}
|
|
4551
4560
|
//#endregion
|
|
4552
4561
|
//#region src/deploy/domain.ts
|
|
4562
|
+
/** A stage was deployed that `deploy.domains` gives no domain. */
|
|
4563
|
+
var NoDomainForStage = class extends Error {
|
|
4564
|
+
stage;
|
|
4565
|
+
constructor(stage) {
|
|
4566
|
+
super(`No domain for stage "${stage}". Add it to gkm.config.ts: deploy: { domains: { ${stage}: 'example.com' } }.`);
|
|
4567
|
+
this.stage = stage;
|
|
4568
|
+
this.name = "NoDomainForStage";
|
|
4569
|
+
}
|
|
4570
|
+
};
|
|
4553
4571
|
/**
|
|
4554
|
-
*
|
|
4572
|
+
* The hostname an app answers on for a stage.
|
|
4555
4573
|
*
|
|
4556
|
-
*
|
|
4557
|
-
*
|
|
4558
|
-
*
|
|
4559
|
-
*
|
|
4560
|
-
* - Other apps get prefixed domain (e.g., 'api.myapp.com')
|
|
4574
|
+
* 1. An explicit `app.domain` — a string, or one per stage — wins.
|
|
4575
|
+
* 2. Otherwise from the stage's base domain in `deploy.domains`: the root site
|
|
4576
|
+
* answers on the domain itself, and every other app on
|
|
4577
|
+
* `{subdomain}.{domain}` — its declaration's `subdomain`, or its own name.
|
|
4561
4578
|
*
|
|
4562
|
-
* @
|
|
4563
|
-
* @param app - The normalized app configuration
|
|
4564
|
-
* @param stage - The deployment stage (e.g., 'production', 'development')
|
|
4565
|
-
* @param dokployConfig - Dokploy workspace configuration with domain mappings
|
|
4566
|
-
* @param isMainFrontend - Whether this is the main frontend app
|
|
4567
|
-
* @returns The resolved hostname for the app
|
|
4568
|
-
* @throws Error if no domain configuration is found for the stage
|
|
4579
|
+
* @throws {NoDomainForStage} when `deploy.domains` names no domain for it
|
|
4569
4580
|
*/
|
|
4570
|
-
function resolveHost(appName, app, stage,
|
|
4581
|
+
function resolveHost(appName, app, stage, domains, isMainFrontend) {
|
|
4571
4582
|
if (app.domain) {
|
|
4572
4583
|
if (typeof app.domain === "string") return app.domain;
|
|
4573
4584
|
if (app.domain[stage]) return app.domain[stage];
|
|
4574
4585
|
}
|
|
4575
|
-
const baseDomain =
|
|
4576
|
-
if (!baseDomain) throw new
|
|
4586
|
+
const baseDomain = domains?.[stage];
|
|
4587
|
+
if (!baseDomain) throw new NoDomainForStage(stage);
|
|
4577
4588
|
if (isMainFrontend) return baseDomain;
|
|
4578
|
-
return `${appName}.${baseDomain}`;
|
|
4589
|
+
return `${app.subdomain ?? appName}.${baseDomain}`;
|
|
4579
4590
|
}
|
|
4580
4591
|
/**
|
|
4581
4592
|
* Whether this app is the site the base domain points at — see `rootSite`,
|
|
@@ -7600,7 +7611,6 @@ async function workspaceDeployCommand(configured, options) {
|
|
|
7600
7611
|
if (skippedMobileApps.length > 0) logger$4.log(`\n📱 Skipping ${skippedMobileApps.length} mobile app(s) — deploy via framework toolchain: ${skippedMobileApps.join(", ")}`);
|
|
7601
7612
|
const backendApps = appsToDeployNames.filter((name) => workspace.apps[name].type === "backend");
|
|
7602
7613
|
const frontendApps = appsToDeployNames.filter((name) => workspace.apps[name].type === "web");
|
|
7603
|
-
const dokployConfig = workspace.deploy.dokploy;
|
|
7604
7614
|
let declaredEnv = {};
|
|
7605
7615
|
let declaredClusters = {};
|
|
7606
7616
|
{
|
|
@@ -7609,7 +7619,7 @@ async function workspaceDeployCommand(configured, options) {
|
|
|
7609
7619
|
for (const appName of backendApps) {
|
|
7610
7620
|
const app = workspace.apps[appName];
|
|
7611
7621
|
if (!app) continue;
|
|
7612
|
-
appUrls[appName] = `https://${resolveHost(appName, app, stage,
|
|
7622
|
+
appUrls[appName] = `https://${resolveHost(appName, app, stage, workspace.deploy?.domains, false)}`;
|
|
7613
7623
|
}
|
|
7614
7624
|
const declared = await provisionDeclared({
|
|
7615
7625
|
api,
|
|
@@ -7673,7 +7683,8 @@ async function workspaceDeployCommand(configured, options) {
|
|
|
7673
7683
|
const frontendUrls = [];
|
|
7674
7684
|
for (const appName of frontendApps) {
|
|
7675
7685
|
const app = workspace.apps[appName];
|
|
7676
|
-
const
|
|
7686
|
+
const isMainFrontend = isMainFrontendApp(appName, app, workspace.apps);
|
|
7687
|
+
const hostname = resolveHost(appName, app, stage, workspace.deploy?.domains, isMainFrontend);
|
|
7677
7688
|
frontendUrls.push(`https://${hostname}`);
|
|
7678
7689
|
}
|
|
7679
7690
|
if (backendApps.length > 0) {
|
|
@@ -7719,7 +7730,7 @@ async function workspaceDeployCommand(configured, options) {
|
|
|
7719
7730
|
},
|
|
7720
7731
|
buildArgs
|
|
7721
7732
|
});
|
|
7722
|
-
const backendHost = resolveHost(appName, app, stage,
|
|
7733
|
+
const backendHost = resolveHost(appName, app, stage, workspace.deploy?.domains, false);
|
|
7723
7734
|
const dependencyUrls = {};
|
|
7724
7735
|
if (app.dependencies) {
|
|
7725
7736
|
for (const dep of app.dependencies) if (publicUrls[dep]) dependencyUrls[dep] = publicUrls[dep];
|
|
@@ -7824,7 +7835,8 @@ async function workspaceDeployCommand(configured, options) {
|
|
|
7824
7835
|
if (app.dependencies) {
|
|
7825
7836
|
for (const dep of app.dependencies) if (publicUrls[dep]) dependencyUrls[dep] = publicUrls[dep];
|
|
7826
7837
|
}
|
|
7827
|
-
const
|
|
7838
|
+
const isMainFrontend = isMainFrontendApp(appName, app, workspace.apps);
|
|
7839
|
+
const frontendHost = resolveHost(appName, app, stage, workspace.deploy?.domains, isMainFrontend);
|
|
7828
7840
|
const envContext = {
|
|
7829
7841
|
app,
|
|
7830
7842
|
appName,
|
|
@@ -9316,26 +9328,26 @@ function loadPackageJson() {
|
|
|
9316
9328
|
* Run: pnpm --filter @geekmidas/cli sync-versions
|
|
9317
9329
|
*/
|
|
9318
9330
|
const GEEKMIDAS_VERSIONS = {
|
|
9319
|
-
"@geekmidas/audit": "~10.0.0-alpha.
|
|
9320
|
-
"@geekmidas/auth": "~10.0.0-alpha.
|
|
9321
|
-
"@geekmidas/cache": "~10.0.0-alpha.
|
|
9322
|
-
"@geekmidas/client": "~10.0.0-alpha.
|
|
9323
|
-
"@geekmidas/cloud": "~10.0.0-alpha.
|
|
9324
|
-
"@geekmidas/constructs": "~10.0.0-alpha.
|
|
9325
|
-
"@geekmidas/db": "~10.0.0-alpha.
|
|
9326
|
-
"@geekmidas/emailkit": "~10.0.0-alpha.
|
|
9327
|
-
"@geekmidas/envkit": "~10.0.0-alpha.
|
|
9328
|
-
"@geekmidas/errors": "~10.0.0-alpha.
|
|
9329
|
-
"@geekmidas/events": "~10.0.0-alpha.
|
|
9330
|
-
"@geekmidas/logger": "~10.0.0-alpha.
|
|
9331
|
-
"@geekmidas/manifest": "~10.0.0-alpha.
|
|
9332
|
-
"@geekmidas/rate-limit": "~10.0.0-alpha.
|
|
9333
|
-
"@geekmidas/schema": "~10.0.0-alpha.
|
|
9334
|
-
"@geekmidas/services": "~10.0.0-alpha.
|
|
9335
|
-
"@geekmidas/storage": "~10.0.0-alpha.
|
|
9336
|
-
"@geekmidas/studio": "~10.0.0-alpha.
|
|
9337
|
-
"@geekmidas/telescope": "~10.0.0-alpha.
|
|
9338
|
-
"@geekmidas/testkit": "~10.0.0-alpha.
|
|
9331
|
+
"@geekmidas/audit": "~10.0.0-alpha.52",
|
|
9332
|
+
"@geekmidas/auth": "~10.0.0-alpha.52",
|
|
9333
|
+
"@geekmidas/cache": "~10.0.0-alpha.52",
|
|
9334
|
+
"@geekmidas/client": "~10.0.0-alpha.52",
|
|
9335
|
+
"@geekmidas/cloud": "~10.0.0-alpha.52",
|
|
9336
|
+
"@geekmidas/constructs": "~10.0.0-alpha.52",
|
|
9337
|
+
"@geekmidas/db": "~10.0.0-alpha.52",
|
|
9338
|
+
"@geekmidas/emailkit": "~10.0.0-alpha.52",
|
|
9339
|
+
"@geekmidas/envkit": "~10.0.0-alpha.52",
|
|
9340
|
+
"@geekmidas/errors": "~10.0.0-alpha.52",
|
|
9341
|
+
"@geekmidas/events": "~10.0.0-alpha.52",
|
|
9342
|
+
"@geekmidas/logger": "~10.0.0-alpha.52",
|
|
9343
|
+
"@geekmidas/manifest": "~10.0.0-alpha.52",
|
|
9344
|
+
"@geekmidas/rate-limit": "~10.0.0-alpha.52",
|
|
9345
|
+
"@geekmidas/schema": "~10.0.0-alpha.52",
|
|
9346
|
+
"@geekmidas/services": "~10.0.0-alpha.52",
|
|
9347
|
+
"@geekmidas/storage": "~10.0.0-alpha.52",
|
|
9348
|
+
"@geekmidas/studio": "~10.0.0-alpha.52",
|
|
9349
|
+
"@geekmidas/telescope": "~10.0.0-alpha.52",
|
|
9350
|
+
"@geekmidas/testkit": "~10.0.0-alpha.52",
|
|
9339
9351
|
"@geekmidas/cli": `~${loadPackageJson().version}`
|
|
9340
9352
|
};
|
|
9341
9353
|
//#endregion
|
|
@@ -10890,7 +10902,7 @@ function generateDeployFiles(options) {
|
|
|
10890
10902
|
// VPC with NAT is a monthly cost in an account that may already
|
|
10891
10903
|
// have one — replace it with \`sst.aws.Vpc.get(…)\` if so.
|
|
10892
10904
|
${db.id}: { vpc },`] : [], ...options.constructs.mail ? [` // Every provider rejects an unverified sender, so there is no
|
|
10893
|
-
// default
|
|
10905
|
+
// default — \`fromManifest\` requires it, by the manifest's types.
|
|
10894
10906
|
${mail.id}: { from: process.env.MAIL_FROM as string },`] : []];
|
|
10895
10907
|
return [{
|
|
10896
10908
|
path: "sst.config.ts",
|
|
@@ -16078,7 +16090,7 @@ function testDatabases(reconciled) {
|
|
|
16078
16090
|
* starts without the reference data the app needs.
|
|
16079
16091
|
*/
|
|
16080
16092
|
async function migrateTestStage(workspace, env) {
|
|
16081
|
-
const { migrateAndSeed } = await import("./migrate-
|
|
16093
|
+
const { migrateAndSeed } = await import("./migrate-DmabhO_N.mjs");
|
|
16082
16094
|
const { discover } = await import("./discover-Cf2jAcgF.mjs").then((n) => n.n);
|
|
16083
16095
|
const sources = {};
|
|
16084
16096
|
const manifest = await discover({
|
|
@@ -16509,7 +16521,7 @@ program.command("migrate").description("Apply each database construct's migratio
|
|
|
16509
16521
|
try {
|
|
16510
16522
|
const globalOptions = program.opts();
|
|
16511
16523
|
if (globalOptions.cwd) process.chdir(globalOptions.cwd);
|
|
16512
|
-
const { migrateCommand } = await import("./migrate-
|
|
16524
|
+
const { migrateCommand } = await import("./migrate-DmabhO_N.mjs");
|
|
16513
16525
|
await migrateCommand({
|
|
16514
16526
|
...options,
|
|
16515
16527
|
...construct ? { construct } : {}
|
|
@@ -16523,7 +16535,7 @@ program.command("seed").description("Migrate, then run each database construct's
|
|
|
16523
16535
|
try {
|
|
16524
16536
|
const globalOptions = program.opts();
|
|
16525
16537
|
if (globalOptions.cwd) process.chdir(globalOptions.cwd);
|
|
16526
|
-
const { seedCommand } = await import("./migrate-
|
|
16538
|
+
const { seedCommand } = await import("./migrate-DmabhO_N.mjs");
|
|
16527
16539
|
await seedCommand({
|
|
16528
16540
|
...options,
|
|
16529
16541
|
...construct ? { construct } : {}
|
|
@@ -16537,7 +16549,7 @@ program.command("migration").description("Write a construct's next migration: an
|
|
|
16537
16549
|
try {
|
|
16538
16550
|
const globalOptions = program.opts();
|
|
16539
16551
|
if (globalOptions.cwd) process.chdir(globalOptions.cwd);
|
|
16540
|
-
const { migrationCommand } = await import("./migrate-
|
|
16552
|
+
const { migrationCommand } = await import("./migrate-DmabhO_N.mjs");
|
|
16541
16553
|
await migrationCommand({
|
|
16542
16554
|
construct,
|
|
16543
16555
|
...name ? { name } : {}
|
|
@@ -16635,7 +16647,7 @@ program.command("encryption:rotate").description("Add a new current key to an En
|
|
|
16635
16647
|
try {
|
|
16636
16648
|
const globalOptions = program.opts();
|
|
16637
16649
|
if (globalOptions.cwd) process.chdir(globalOptions.cwd);
|
|
16638
|
-
const { encryptionRotateCommand } = await import("./encryption-
|
|
16650
|
+
const { encryptionRotateCommand } = await import("./encryption-Cv-Ej9vR.mjs");
|
|
16639
16651
|
await encryptionRotateCommand(construct, options);
|
|
16640
16652
|
} catch (error) {
|
|
16641
16653
|
console.error(formatError(error));
|
|
@@ -16646,7 +16658,7 @@ program.command("encryption:retire").description("Remove an old key from an Encr
|
|
|
16646
16658
|
try {
|
|
16647
16659
|
const globalOptions = program.opts();
|
|
16648
16660
|
if (globalOptions.cwd) process.chdir(globalOptions.cwd);
|
|
16649
|
-
const { encryptionRetireCommand } = await import("./encryption-
|
|
16661
|
+
const { encryptionRetireCommand } = await import("./encryption-Cv-Ej9vR.mjs");
|
|
16650
16662
|
await encryptionRetireCommand(construct, key, options);
|
|
16651
16663
|
} catch (error) {
|
|
16652
16664
|
console.error(formatError(error));
|
|
@@ -16698,7 +16710,7 @@ program.command("secrets:reconcile").description("Backfill missing custom secret
|
|
|
16698
16710
|
console.error(`No secrets found for stage "${stage}". Run "gkm secrets:init --stage ${stage}" first.`);
|
|
16699
16711
|
process.exit(1);
|
|
16700
16712
|
}
|
|
16701
|
-
const { derivedContainers } = await import("./workspace-
|
|
16713
|
+
const { derivedContainers } = await import("./workspace-fa5H6l7D.mjs").then((n) => n.o);
|
|
16702
16714
|
const result = reconcileMissingSecrets(secrets, workspace, await derivedContainers(workspace, stage));
|
|
16703
16715
|
if (!result) {
|
|
16704
16716
|
console.log(`\n✓ Secrets for stage "${stage}" are up-to-date`);
|
|
@@ -16757,7 +16769,7 @@ program.command("deploy:github").description("Let GitHub Actions deploy a stage:
|
|
|
16757
16769
|
try {
|
|
16758
16770
|
const globalOptions = program.opts();
|
|
16759
16771
|
if (globalOptions.cwd) process.chdir(globalOptions.cwd);
|
|
16760
|
-
const { deployGithubCommand } = await import("./github-
|
|
16772
|
+
const { deployGithubCommand } = await import("./github-U_frvZgD.mjs");
|
|
16761
16773
|
await deployGithubCommand(options);
|
|
16762
16774
|
} catch (error) {
|
|
16763
16775
|
console.error(formatError(error));
|