@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
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { C as WorkspaceInput, E as Framework, S as WorkspaceConfig, a as Routes, g as LoadedConfig, h as InferredWorkspaceConfig, l as AppsRecord, r as GkmConfig, y as NormalizedWorkspace } from "./types-
|
|
1
|
+
import { C as WorkspaceInput, E as Framework, S as WorkspaceConfig, a as Routes, g as LoadedConfig, h as InferredWorkspaceConfig, l as AppsRecord, r as GkmConfig, y as NormalizedWorkspace } from "./types-CT0ymlBk.mjs";
|
|
2
2
|
//#region src/workspace/publicEnv.d.ts
|
|
3
3
|
/**
|
|
4
4
|
* All public env-var prefixes the toolbox understands.
|
|
@@ -153,4 +153,4 @@ declare function getEndpointForStage(dokployConfig: {
|
|
|
153
153
|
} | undefined, stage: string): string | undefined;
|
|
154
154
|
//#endregion
|
|
155
155
|
export { getAppBuildOrder as a, normalizeWorkspace as c, wrapSingleAppAsWorkspace as d, PUBLIC_ENV_PREFIXES as f, defineWorkspace as i, processConfig as l, stripPublicPrefix as m, appConstructGlobs as n, getAppGkmConfig as o, getPublicEnvPrefix as p, constructPatterns as r, getEndpointForStage as s, allConstructGlobs as t, workspaceConstructGlobs as u };
|
|
156
|
-
//# sourceMappingURL=index-
|
|
156
|
+
//# sourceMappingURL=index-DYh5TrsZ.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-
|
|
1
|
+
{"version":3,"file":"index-DYh5TrsZ.d.mts","names":[],"sources":["../src/workspace/publicEnv.ts","../src/workspace/index.ts"],"mappings":";;;;;;;;;cASa;;;;;;;;;;;;;;;iBAoBG,mBAAmB,YAAY;;;;;iBAoB/B,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBC2ElB,sBAAsB,cAAc,YACnD,QAAQ,eAAe,SACrB,wBAAwB;;;;iBA8BX,mBACf,QAAQ,iBACR,cACE;;;;;iBA+Ca,yBACf,QAAQ,WACR,cACE;;;;;iBAuDa,cACf,QAAQ,YAAY,iBACpB,cACE;;;;;;;iBA6Ba,wBACf,WAAW;;;;;;;;;;;;iBAkBI,kBACf,WAAW,qBACX;;;;;;;iBAsBe,kBAAkB,WAAW;;iBAa7B,kBAAkB,QAAQ;;;;;iBAS1B,gBACf,WAAW,qBACX,kBACE;;;;;iBAiCa,iBAAiB,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAoD5B,oBACf;EACK;EAAmB,YAAY;eAEpC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { C as WorkspaceInput, E as Framework, S as WorkspaceConfig, a as Routes, g as LoadedConfig, h as InferredWorkspaceConfig, l as AppsRecord, r as GkmConfig, y as NormalizedWorkspace } from "./types-
|
|
1
|
+
import { C as WorkspaceInput, E as Framework, S as WorkspaceConfig, a as Routes, g as LoadedConfig, h as InferredWorkspaceConfig, l as AppsRecord, r as GkmConfig, y as NormalizedWorkspace } from "./types-DYDT4FfE.cjs";
|
|
2
2
|
//#region src/workspace/publicEnv.d.ts
|
|
3
3
|
/**
|
|
4
4
|
* All public env-var prefixes the toolbox understands.
|
|
@@ -153,4 +153,4 @@ declare function getEndpointForStage(dokployConfig: {
|
|
|
153
153
|
} | undefined, stage: string): string | undefined;
|
|
154
154
|
//#endregion
|
|
155
155
|
export { getAppBuildOrder as a, normalizeWorkspace as c, wrapSingleAppAsWorkspace as d, PUBLIC_ENV_PREFIXES as f, defineWorkspace as i, processConfig as l, stripPublicPrefix as m, appConstructGlobs as n, getAppGkmConfig as o, getPublicEnvPrefix as p, constructPatterns as r, getEndpointForStage as s, allConstructGlobs as t, workspaceConstructGlobs as u };
|
|
156
|
-
//# sourceMappingURL=index-
|
|
156
|
+
//# sourceMappingURL=index-fU3qHy7c.d.cts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-
|
|
1
|
+
{"version":3,"file":"index-fU3qHy7c.d.cts","names":[],"sources":["../src/workspace/publicEnv.ts","../src/workspace/index.ts"],"mappings":";;;;;;;;;cASa;;;;;;;;;;;;;;;iBAoBG,mBAAmB,YAAY;;;;;iBAoB/B,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBC2ElB,sBAAsB,cAAc,YACnD,QAAQ,eAAe,SACrB,wBAAwB;;;;iBA8BX,mBACf,QAAQ,iBACR,cACE;;;;;iBA+Ca,yBACf,QAAQ,WACR,cACE;;;;;iBAuDa,cACf,QAAQ,YAAY,iBACpB,cACE;;;;;;;iBA6Ba,wBACf,WAAW;;;;;;;;;;;;iBAkBI,kBACf,WAAW,qBACX;;;;;;;iBAsBe,kBAAkB,WAAW;;iBAa7B,kBAAkB,QAAQ;;;;;iBAS1B,gBACf,WAAW,qBACX,kBACE;;;;;iBAiCa,iBAAiB,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAoD5B,oBACf;EACK;EAAmB,YAAY;eAEpC"}
|
package/dist/index.cjs
CHANGED
|
@@ -2,15 +2,15 @@
|
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
3
|
const require_rolldown_runtime = require("./rolldown-runtime-C0BPl7ul.cjs");
|
|
4
4
|
const require_discover = require("./discover-DXNviAh-.cjs");
|
|
5
|
-
const require_config = require("./config-
|
|
6
|
-
const require_workspace = require("./workspace-
|
|
5
|
+
const require_config = require("./config-Cvr5fCbn.cjs");
|
|
6
|
+
const require_workspace = require("./workspace-BcCiLzTO.cjs");
|
|
7
7
|
const require_storage = require("./storage-CSGoC3bK.cjs");
|
|
8
8
|
const require_store = require("./store-DQgxT_WR.cjs");
|
|
9
|
-
const require_workspace$1 = require("./workspace-
|
|
9
|
+
const require_workspace$1 = require("./workspace-BEGUDNwK.cjs");
|
|
10
10
|
const require_OpenApiTsGenerator = require("./OpenApiTsGenerator-BN0PIZxd.cjs");
|
|
11
11
|
const require_openapi = require("./openapi.cjs");
|
|
12
|
-
const require_ready = require("./ready-
|
|
13
|
-
const require_backends = require("./backends-
|
|
12
|
+
const require_ready = require("./ready-ClUpTxoL.cjs");
|
|
13
|
+
const require_backends = require("./backends-BXcwhb7p.cjs");
|
|
14
14
|
const require_emit = require("./emit-Dmc1nvdS.cjs");
|
|
15
15
|
let commander = require("commander");
|
|
16
16
|
let node_process = require("node:process");
|
|
@@ -48,7 +48,7 @@ let _geekmidas_constructs_queue = require("@geekmidas/constructs/queue");
|
|
|
48
48
|
let _geekmidas_constructs_topic = require("@geekmidas/constructs/topic");
|
|
49
49
|
let node_dns_promises = require("node:dns/promises");
|
|
50
50
|
//#region package.json
|
|
51
|
-
var version = "10.0.0-alpha.
|
|
51
|
+
var version = "10.0.0-alpha.52";
|
|
52
52
|
//#endregion
|
|
53
53
|
//#region src/auth/credentials.ts
|
|
54
54
|
/**
|
|
@@ -1731,9 +1731,9 @@ async function workspaceDevCommand(configured, options) {
|
|
|
1731
1731
|
for (const { id, port } of fakes) logger$9.log(`🎭 ${id} fake: http://localhost:${port}`);
|
|
1732
1732
|
logger$9.log(options.migrate || options.seed ? "🗄️ Migrating the databases" : "🗄️ Checking for pending migrations");
|
|
1733
1733
|
if (options.migrate || options.seed) {
|
|
1734
|
-
const { prepareDevDatabases } = await Promise.resolve().then(() => require("./migrate-
|
|
1734
|
+
const { prepareDevDatabases } = await Promise.resolve().then(() => require("./migrate-DCxK1NRd.cjs"));
|
|
1735
1735
|
await prepareDevDatabases(workspace, reconciled.env, { seed: !!options.seed });
|
|
1736
|
-
} else await Promise.resolve().then(() => require("./migrate-
|
|
1736
|
+
} else await Promise.resolve().then(() => require("./migrate-DCxK1NRd.cjs")).then(({ reportPendingMigrations }) => reportPendingMigrations(workspace, reconciled.env)).catch((error) => {
|
|
1737
1737
|
logger$9.log(`⚠️ Could not check for pending migrations: ${error instanceof Error ? error.message : String(error)}`);
|
|
1738
1738
|
});
|
|
1739
1739
|
const appUrls = {};
|
|
@@ -2316,7 +2316,7 @@ var CronGenerator = class extends require_discover.ConstructGenerator {
|
|
|
2316
2316
|
*/
|
|
2317
2317
|
import type { EnvironmentParser } from '@geekmidas/envkit';
|
|
2318
2318
|
import type { Logger } from '@geekmidas/logger';
|
|
2319
|
-
import { toCronExpression } from '@geekmidas/constructs/crons';
|
|
2319
|
+
import { runCron, scheduleInProcess, toCronExpression } from '@geekmidas/constructs/crons';
|
|
2320
2320
|
import { ServiceDiscovery } from '@geekmidas/services';
|
|
2321
2321
|
${Array.from(importsByFile.entries()).map(([importPath, exports]) => `import { ${exports.join(", ")} } from '${importPath}';`).join("\n")}
|
|
2322
2322
|
|
|
@@ -2357,11 +2357,10 @@ export async function setupCrons(
|
|
|
2357
2357
|
|
|
2358
2358
|
const run = async (entry: (typeof prepared)[number]) => {
|
|
2359
2359
|
try {
|
|
2360
|
-
|
|
2361
|
-
|
|
2362
|
-
|
|
2363
|
-
|
|
2364
|
-
});
|
|
2360
|
+
// The cron's own function, the way its Lambda would run it — services,
|
|
2361
|
+
// the worker's database as \`db\`, its events. It used to call a
|
|
2362
|
+
// \`handler\` a Cron does not have, so every firing logged a failure.
|
|
2363
|
+
await runCron(entry.cron, serviceDiscovery);
|
|
2365
2364
|
} catch (error) {
|
|
2366
2365
|
logger.error({ error, cron: entry.name }, 'Cron failed');
|
|
2367
2366
|
}
|
|
@@ -2372,13 +2371,28 @@ export async function setupCrons(
|
|
|
2372
2371
|
// memory fires each job once per replica — so the schedule lives in
|
|
2373
2372
|
// Postgres. It used to be a second pg-boss on the worker's database, as the
|
|
2374
2373
|
// runtime role, which can neither create a schema nor use the broker's.
|
|
2375
|
-
const { url } = envParser
|
|
2374
|
+
const { url, devPid } = envParser
|
|
2376
2375
|
.create((get) => ({
|
|
2377
2376
|
url: get('EVENT_PUBLISHER_CONNECTION_STRING').string().optional(),
|
|
2377
|
+
// Set by \`gkm dev\` on the server it starts, and by nothing deployed.
|
|
2378
|
+
devPid: get('GKM_DEV_PID').string().optional(),
|
|
2378
2379
|
}))
|
|
2379
2380
|
.parse();
|
|
2380
2381
|
|
|
2381
2382
|
if (!url?.startsWith('pgboss://')) {
|
|
2383
|
+
// \`gkm dev\` on a target whose crons are infrastructure once deployed —
|
|
2384
|
+
// EventBridge rules on AWS — has no broker to keep a schedule in. It is one
|
|
2385
|
+
// process, so a timer fires each job once, which is all pg-boss is for
|
|
2386
|
+
// here. Only there: a deployed server firing by timer fires once per
|
|
2387
|
+
// replica, so outside dev this stays the error below.
|
|
2388
|
+
if (devPid) {
|
|
2389
|
+
for (const entry of prepared) {
|
|
2390
|
+
running.push(scheduleInProcess(entry.schedule, () => run(entry)));
|
|
2391
|
+
logger.info({ cron: entry.name, schedule: entry.schedule }, 'Cron scheduled in this process');
|
|
2392
|
+
}
|
|
2393
|
+
return;
|
|
2394
|
+
}
|
|
2395
|
+
|
|
2382
2396
|
logger.error(
|
|
2383
2397
|
{ crons: prepared.map(({ name }) => name) },
|
|
2384
2398
|
'These crons have nowhere to keep their schedule. On a server they are ' +
|
|
@@ -3997,7 +4011,7 @@ async function provisionDeclared(options) {
|
|
|
3997
4011
|
cache: require_backends.cacheBackendFor(require_backends.providerOf(workspace)),
|
|
3998
4012
|
events: require_backends.eventsBackendFor(require_backends.providerOf(workspace)),
|
|
3999
4013
|
storage: require_backends.storageBackendFor(require_backends.providerOf(workspace)),
|
|
4000
|
-
addresses: surfaceAddresses(
|
|
4014
|
+
addresses: surfaceAddresses(manifest, options.appUrls),
|
|
4001
4015
|
seed: options.seed,
|
|
4002
4016
|
...options.supplied ? { supplied: options.supplied } : {},
|
|
4003
4017
|
deferred: [],
|
|
@@ -4059,25 +4073,20 @@ function carriersLast(ordered, manifest) {
|
|
|
4059
4073
|
return [...ordered.filter((id) => !carries(id)), ...ordered.filter(carries)];
|
|
4060
4074
|
}
|
|
4061
4075
|
/**
|
|
4062
|
-
* Where each declared surface answers.
|
|
4063
|
-
*
|
|
4064
|
-
* Every `rest-api` in a process answers on that process's address, so an app
|
|
4065
|
-
* serving both its own API and an auth server publishes one address twice —
|
|
4066
|
-
* which is exactly what it does at runtime, and the same rule the local target
|
|
4067
|
-
* applies.
|
|
4076
|
+
* Where each declared surface answers: its own app's address.
|
|
4068
4077
|
*
|
|
4069
|
-
*
|
|
4070
|
-
*
|
|
4071
|
-
*
|
|
4072
|
-
*
|
|
4073
|
-
* before relying on it.
|
|
4078
|
+
* Every surface is an app of its own, keyed by its id the way the derivation
|
|
4079
|
+
* keyed it — `Api` is `api`, `Webhooks` is `webhooks` — and answers on that
|
|
4080
|
+
* app's host, `{subdomain}.{domain}`. It used to be handed the first backend's
|
|
4081
|
+
* address, so a workspace with two APIs pointed both at the same one.
|
|
4074
4082
|
*/
|
|
4075
|
-
function surfaceAddresses(
|
|
4083
|
+
function surfaceAddresses(manifest, appUrls) {
|
|
4076
4084
|
const addresses = {};
|
|
4077
|
-
const
|
|
4078
|
-
|
|
4079
|
-
|
|
4080
|
-
|
|
4085
|
+
for (const [id, declaration] of Object.entries(manifest)) {
|
|
4086
|
+
if (declaration.kind !== "rest-api") continue;
|
|
4087
|
+
const url = appUrls[require_config.appKey(id)];
|
|
4088
|
+
if (url) addresses[id] = url;
|
|
4089
|
+
}
|
|
4081
4090
|
return addresses;
|
|
4082
4091
|
}
|
|
4083
4092
|
//#endregion
|
|
@@ -4562,32 +4571,34 @@ async function verifyDnsRecords(appHostnames, serverIp, state) {
|
|
|
4562
4571
|
}
|
|
4563
4572
|
//#endregion
|
|
4564
4573
|
//#region src/deploy/domain.ts
|
|
4574
|
+
/** A stage was deployed that `deploy.domains` gives no domain. */
|
|
4575
|
+
var NoDomainForStage = class extends Error {
|
|
4576
|
+
stage;
|
|
4577
|
+
constructor(stage) {
|
|
4578
|
+
super(`No domain for stage "${stage}". Add it to gkm.config.ts: deploy: { domains: { ${stage}: 'example.com' } }.`);
|
|
4579
|
+
this.stage = stage;
|
|
4580
|
+
this.name = "NoDomainForStage";
|
|
4581
|
+
}
|
|
4582
|
+
};
|
|
4565
4583
|
/**
|
|
4566
|
-
*
|
|
4584
|
+
* The hostname an app answers on for a stage.
|
|
4567
4585
|
*
|
|
4568
|
-
*
|
|
4569
|
-
*
|
|
4570
|
-
*
|
|
4571
|
-
*
|
|
4572
|
-
* - Other apps get prefixed domain (e.g., 'api.myapp.com')
|
|
4586
|
+
* 1. An explicit `app.domain` — a string, or one per stage — wins.
|
|
4587
|
+
* 2. Otherwise from the stage's base domain in `deploy.domains`: the root site
|
|
4588
|
+
* answers on the domain itself, and every other app on
|
|
4589
|
+
* `{subdomain}.{domain}` — its declaration's `subdomain`, or its own name.
|
|
4573
4590
|
*
|
|
4574
|
-
* @
|
|
4575
|
-
* @param app - The normalized app configuration
|
|
4576
|
-
* @param stage - The deployment stage (e.g., 'production', 'development')
|
|
4577
|
-
* @param dokployConfig - Dokploy workspace configuration with domain mappings
|
|
4578
|
-
* @param isMainFrontend - Whether this is the main frontend app
|
|
4579
|
-
* @returns The resolved hostname for the app
|
|
4580
|
-
* @throws Error if no domain configuration is found for the stage
|
|
4591
|
+
* @throws {NoDomainForStage} when `deploy.domains` names no domain for it
|
|
4581
4592
|
*/
|
|
4582
|
-
function resolveHost(appName, app, stage,
|
|
4593
|
+
function resolveHost(appName, app, stage, domains, isMainFrontend) {
|
|
4583
4594
|
if (app.domain) {
|
|
4584
4595
|
if (typeof app.domain === "string") return app.domain;
|
|
4585
4596
|
if (app.domain[stage]) return app.domain[stage];
|
|
4586
4597
|
}
|
|
4587
|
-
const baseDomain =
|
|
4588
|
-
if (!baseDomain) throw new
|
|
4598
|
+
const baseDomain = domains?.[stage];
|
|
4599
|
+
if (!baseDomain) throw new NoDomainForStage(stage);
|
|
4589
4600
|
if (isMainFrontend) return baseDomain;
|
|
4590
|
-
return `${appName}.${baseDomain}`;
|
|
4601
|
+
return `${app.subdomain ?? appName}.${baseDomain}`;
|
|
4591
4602
|
}
|
|
4592
4603
|
/**
|
|
4593
4604
|
* Whether this app is the site the base domain points at — see `rootSite`,
|
|
@@ -7612,7 +7623,6 @@ async function workspaceDeployCommand(configured, options) {
|
|
|
7612
7623
|
if (skippedMobileApps.length > 0) logger$4.log(`\n📱 Skipping ${skippedMobileApps.length} mobile app(s) — deploy via framework toolchain: ${skippedMobileApps.join(", ")}`);
|
|
7613
7624
|
const backendApps = appsToDeployNames.filter((name) => workspace.apps[name].type === "backend");
|
|
7614
7625
|
const frontendApps = appsToDeployNames.filter((name) => workspace.apps[name].type === "web");
|
|
7615
|
-
const dokployConfig = workspace.deploy.dokploy;
|
|
7616
7626
|
let declaredEnv = {};
|
|
7617
7627
|
let declaredClusters = {};
|
|
7618
7628
|
{
|
|
@@ -7621,7 +7631,7 @@ async function workspaceDeployCommand(configured, options) {
|
|
|
7621
7631
|
for (const appName of backendApps) {
|
|
7622
7632
|
const app = workspace.apps[appName];
|
|
7623
7633
|
if (!app) continue;
|
|
7624
|
-
appUrls[appName] = `https://${resolveHost(appName, app, stage,
|
|
7634
|
+
appUrls[appName] = `https://${resolveHost(appName, app, stage, workspace.deploy?.domains, false)}`;
|
|
7625
7635
|
}
|
|
7626
7636
|
const declared = await provisionDeclared({
|
|
7627
7637
|
api,
|
|
@@ -7685,7 +7695,8 @@ async function workspaceDeployCommand(configured, options) {
|
|
|
7685
7695
|
const frontendUrls = [];
|
|
7686
7696
|
for (const appName of frontendApps) {
|
|
7687
7697
|
const app = workspace.apps[appName];
|
|
7688
|
-
const
|
|
7698
|
+
const isMainFrontend = isMainFrontendApp(appName, app, workspace.apps);
|
|
7699
|
+
const hostname = resolveHost(appName, app, stage, workspace.deploy?.domains, isMainFrontend);
|
|
7689
7700
|
frontendUrls.push(`https://${hostname}`);
|
|
7690
7701
|
}
|
|
7691
7702
|
if (backendApps.length > 0) {
|
|
@@ -7731,7 +7742,7 @@ async function workspaceDeployCommand(configured, options) {
|
|
|
7731
7742
|
},
|
|
7732
7743
|
buildArgs
|
|
7733
7744
|
});
|
|
7734
|
-
const backendHost = resolveHost(appName, app, stage,
|
|
7745
|
+
const backendHost = resolveHost(appName, app, stage, workspace.deploy?.domains, false);
|
|
7735
7746
|
const dependencyUrls = {};
|
|
7736
7747
|
if (app.dependencies) {
|
|
7737
7748
|
for (const dep of app.dependencies) if (publicUrls[dep]) dependencyUrls[dep] = publicUrls[dep];
|
|
@@ -7836,7 +7847,8 @@ async function workspaceDeployCommand(configured, options) {
|
|
|
7836
7847
|
if (app.dependencies) {
|
|
7837
7848
|
for (const dep of app.dependencies) if (publicUrls[dep]) dependencyUrls[dep] = publicUrls[dep];
|
|
7838
7849
|
}
|
|
7839
|
-
const
|
|
7850
|
+
const isMainFrontend = isMainFrontendApp(appName, app, workspace.apps);
|
|
7851
|
+
const frontendHost = resolveHost(appName, app, stage, workspace.deploy?.domains, isMainFrontend);
|
|
7840
7852
|
const envContext = {
|
|
7841
7853
|
app,
|
|
7842
7854
|
appName,
|
|
@@ -9328,26 +9340,26 @@ function loadPackageJson() {
|
|
|
9328
9340
|
* Run: pnpm --filter @geekmidas/cli sync-versions
|
|
9329
9341
|
*/
|
|
9330
9342
|
const GEEKMIDAS_VERSIONS = {
|
|
9331
|
-
"@geekmidas/audit": "~10.0.0-alpha.
|
|
9332
|
-
"@geekmidas/auth": "~10.0.0-alpha.
|
|
9333
|
-
"@geekmidas/cache": "~10.0.0-alpha.
|
|
9334
|
-
"@geekmidas/client": "~10.0.0-alpha.
|
|
9335
|
-
"@geekmidas/cloud": "~10.0.0-alpha.
|
|
9336
|
-
"@geekmidas/constructs": "~10.0.0-alpha.
|
|
9337
|
-
"@geekmidas/db": "~10.0.0-alpha.
|
|
9338
|
-
"@geekmidas/emailkit": "~10.0.0-alpha.
|
|
9339
|
-
"@geekmidas/envkit": "~10.0.0-alpha.
|
|
9340
|
-
"@geekmidas/errors": "~10.0.0-alpha.
|
|
9341
|
-
"@geekmidas/events": "~10.0.0-alpha.
|
|
9342
|
-
"@geekmidas/logger": "~10.0.0-alpha.
|
|
9343
|
-
"@geekmidas/manifest": "~10.0.0-alpha.
|
|
9344
|
-
"@geekmidas/rate-limit": "~10.0.0-alpha.
|
|
9345
|
-
"@geekmidas/schema": "~10.0.0-alpha.
|
|
9346
|
-
"@geekmidas/services": "~10.0.0-alpha.
|
|
9347
|
-
"@geekmidas/storage": "~10.0.0-alpha.
|
|
9348
|
-
"@geekmidas/studio": "~10.0.0-alpha.
|
|
9349
|
-
"@geekmidas/telescope": "~10.0.0-alpha.
|
|
9350
|
-
"@geekmidas/testkit": "~10.0.0-alpha.
|
|
9343
|
+
"@geekmidas/audit": "~10.0.0-alpha.52",
|
|
9344
|
+
"@geekmidas/auth": "~10.0.0-alpha.52",
|
|
9345
|
+
"@geekmidas/cache": "~10.0.0-alpha.52",
|
|
9346
|
+
"@geekmidas/client": "~10.0.0-alpha.52",
|
|
9347
|
+
"@geekmidas/cloud": "~10.0.0-alpha.52",
|
|
9348
|
+
"@geekmidas/constructs": "~10.0.0-alpha.52",
|
|
9349
|
+
"@geekmidas/db": "~10.0.0-alpha.52",
|
|
9350
|
+
"@geekmidas/emailkit": "~10.0.0-alpha.52",
|
|
9351
|
+
"@geekmidas/envkit": "~10.0.0-alpha.52",
|
|
9352
|
+
"@geekmidas/errors": "~10.0.0-alpha.52",
|
|
9353
|
+
"@geekmidas/events": "~10.0.0-alpha.52",
|
|
9354
|
+
"@geekmidas/logger": "~10.0.0-alpha.52",
|
|
9355
|
+
"@geekmidas/manifest": "~10.0.0-alpha.52",
|
|
9356
|
+
"@geekmidas/rate-limit": "~10.0.0-alpha.52",
|
|
9357
|
+
"@geekmidas/schema": "~10.0.0-alpha.52",
|
|
9358
|
+
"@geekmidas/services": "~10.0.0-alpha.52",
|
|
9359
|
+
"@geekmidas/storage": "~10.0.0-alpha.52",
|
|
9360
|
+
"@geekmidas/studio": "~10.0.0-alpha.52",
|
|
9361
|
+
"@geekmidas/telescope": "~10.0.0-alpha.52",
|
|
9362
|
+
"@geekmidas/testkit": "~10.0.0-alpha.52",
|
|
9351
9363
|
"@geekmidas/cli": `~${loadPackageJson().version}`
|
|
9352
9364
|
};
|
|
9353
9365
|
//#endregion
|
|
@@ -10902,7 +10914,7 @@ function generateDeployFiles(options) {
|
|
|
10902
10914
|
// VPC with NAT is a monthly cost in an account that may already
|
|
10903
10915
|
// have one — replace it with \`sst.aws.Vpc.get(…)\` if so.
|
|
10904
10916
|
${db.id}: { vpc },`] : [], ...options.constructs.mail ? [` // Every provider rejects an unverified sender, so there is no
|
|
10905
|
-
// default
|
|
10917
|
+
// default — \`fromManifest\` requires it, by the manifest's types.
|
|
10906
10918
|
${mail.id}: { from: process.env.MAIL_FROM as string },`] : []];
|
|
10907
10919
|
return [{
|
|
10908
10920
|
path: "sst.config.ts",
|
|
@@ -16090,7 +16102,7 @@ function testDatabases(reconciled) {
|
|
|
16090
16102
|
* starts without the reference data the app needs.
|
|
16091
16103
|
*/
|
|
16092
16104
|
async function migrateTestStage(workspace, env) {
|
|
16093
|
-
const { migrateAndSeed } = await Promise.resolve().then(() => require("./migrate-
|
|
16105
|
+
const { migrateAndSeed } = await Promise.resolve().then(() => require("./migrate-DCxK1NRd.cjs"));
|
|
16094
16106
|
const { discover } = await Promise.resolve().then(() => require("./discover-DXNviAh-.cjs")).then((n) => n.discover_exports);
|
|
16095
16107
|
const sources = {};
|
|
16096
16108
|
const manifest = await discover({
|
|
@@ -16521,7 +16533,7 @@ program.command("migrate").description("Apply each database construct's migratio
|
|
|
16521
16533
|
try {
|
|
16522
16534
|
const globalOptions = program.opts();
|
|
16523
16535
|
if (globalOptions.cwd) process.chdir(globalOptions.cwd);
|
|
16524
|
-
const { migrateCommand } = await Promise.resolve().then(() => require("./migrate-
|
|
16536
|
+
const { migrateCommand } = await Promise.resolve().then(() => require("./migrate-DCxK1NRd.cjs"));
|
|
16525
16537
|
await migrateCommand({
|
|
16526
16538
|
...options,
|
|
16527
16539
|
...construct ? { construct } : {}
|
|
@@ -16535,7 +16547,7 @@ program.command("seed").description("Migrate, then run each database construct's
|
|
|
16535
16547
|
try {
|
|
16536
16548
|
const globalOptions = program.opts();
|
|
16537
16549
|
if (globalOptions.cwd) process.chdir(globalOptions.cwd);
|
|
16538
|
-
const { seedCommand } = await Promise.resolve().then(() => require("./migrate-
|
|
16550
|
+
const { seedCommand } = await Promise.resolve().then(() => require("./migrate-DCxK1NRd.cjs"));
|
|
16539
16551
|
await seedCommand({
|
|
16540
16552
|
...options,
|
|
16541
16553
|
...construct ? { construct } : {}
|
|
@@ -16549,7 +16561,7 @@ program.command("migration").description("Write a construct's next migration: an
|
|
|
16549
16561
|
try {
|
|
16550
16562
|
const globalOptions = program.opts();
|
|
16551
16563
|
if (globalOptions.cwd) process.chdir(globalOptions.cwd);
|
|
16552
|
-
const { migrationCommand } = await Promise.resolve().then(() => require("./migrate-
|
|
16564
|
+
const { migrationCommand } = await Promise.resolve().then(() => require("./migrate-DCxK1NRd.cjs"));
|
|
16553
16565
|
await migrationCommand({
|
|
16554
16566
|
construct,
|
|
16555
16567
|
...name ? { name } : {}
|
|
@@ -16647,7 +16659,7 @@ program.command("encryption:rotate").description("Add a new current key to an En
|
|
|
16647
16659
|
try {
|
|
16648
16660
|
const globalOptions = program.opts();
|
|
16649
16661
|
if (globalOptions.cwd) process.chdir(globalOptions.cwd);
|
|
16650
|
-
const { encryptionRotateCommand } = await Promise.resolve().then(() => require("./encryption-
|
|
16662
|
+
const { encryptionRotateCommand } = await Promise.resolve().then(() => require("./encryption-DCsdx4Po.cjs"));
|
|
16651
16663
|
await encryptionRotateCommand(construct, options);
|
|
16652
16664
|
} catch (error) {
|
|
16653
16665
|
console.error(formatError(error));
|
|
@@ -16658,7 +16670,7 @@ program.command("encryption:retire").description("Remove an old key from an Encr
|
|
|
16658
16670
|
try {
|
|
16659
16671
|
const globalOptions = program.opts();
|
|
16660
16672
|
if (globalOptions.cwd) process.chdir(globalOptions.cwd);
|
|
16661
|
-
const { encryptionRetireCommand } = await Promise.resolve().then(() => require("./encryption-
|
|
16673
|
+
const { encryptionRetireCommand } = await Promise.resolve().then(() => require("./encryption-DCsdx4Po.cjs"));
|
|
16662
16674
|
await encryptionRetireCommand(construct, key, options);
|
|
16663
16675
|
} catch (error) {
|
|
16664
16676
|
console.error(formatError(error));
|
|
@@ -16710,7 +16722,7 @@ program.command("secrets:reconcile").description("Backfill missing custom secret
|
|
|
16710
16722
|
console.error(`No secrets found for stage "${stage}". Run "gkm secrets:init --stage ${stage}" first.`);
|
|
16711
16723
|
process.exit(1);
|
|
16712
16724
|
}
|
|
16713
|
-
const { derivedContainers } = await Promise.resolve().then(() => require("./workspace-
|
|
16725
|
+
const { derivedContainers } = await Promise.resolve().then(() => require("./workspace-BEGUDNwK.cjs")).then((n) => n.workspace_exports);
|
|
16714
16726
|
const result = reconcileMissingSecrets(secrets, workspace, await derivedContainers(workspace, stage));
|
|
16715
16727
|
if (!result) {
|
|
16716
16728
|
console.log(`\n✓ Secrets for stage "${stage}" are up-to-date`);
|
|
@@ -16769,7 +16781,7 @@ program.command("deploy:github").description("Let GitHub Actions deploy a stage:
|
|
|
16769
16781
|
try {
|
|
16770
16782
|
const globalOptions = program.opts();
|
|
16771
16783
|
if (globalOptions.cwd) process.chdir(globalOptions.cwd);
|
|
16772
|
-
const { deployGithubCommand } = await Promise.resolve().then(() => require("./github-
|
|
16784
|
+
const { deployGithubCommand } = await Promise.resolve().then(() => require("./github-BGx4U61b.cjs"));
|
|
16773
16785
|
await deployGithubCommand(options);
|
|
16774
16786
|
} catch (error) {
|
|
16775
16787
|
console.error(formatError(error));
|