@dragonmastery/tamer 0.37.0 → 0.38.0
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/{status-Ck6Xo8aV.mjs → status-B-ei_QXO.mjs} +18 -8
- package/dist/status-B-ei_QXO.mjs.map +1 -0
- package/dist/tamer.mjs +30 -4
- package/dist/tamer.mjs.map +1 -1
- package/dist/tenant-0dRh3gLI.mjs +62 -0
- package/dist/tenant-0dRh3gLI.mjs.map +1 -0
- package/dist/{types-BZkoBzpD.mjs → types-BpTmpzBy.mjs} +1 -1
- package/dist/{types-BZkoBzpD.mjs.map → types-BpTmpzBy.mjs.map} +1 -1
- package/dist/{wfp-delete-BmibnUuz.mjs → wfp-delete-COWm9F8p.mjs} +1 -1
- package/dist/{wfp-delete-BmibnUuz.mjs.map → wfp-delete-COWm9F8p.mjs.map} +1 -1
- package/dist/{wfp-put-B7MW5m64.mjs → wfp-put-Dzs2zAj2.mjs} +1 -1
- package/dist/{wfp-put-B7MW5m64.mjs.map → wfp-put-Dzs2zAj2.mjs.map} +1 -1
- package/package.json +1 -1
- package/dist/status-Ck6Xo8aV.mjs.map +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { f as getDispatchNamespaces, m as getLogpushJobs, p as getDnsRecords } from "./normalize-DVSTRZhO.mjs";
|
|
2
|
-
import { B as getConfigBaseDir, E as mergeWorkerConfigForResourcePick, H as loadConfig, L as CFApiClient, O as resolveDeployedWorkerName, R as cloudflareAccountIdFromEnv, V as getWorkers, f as fetchStackImports, h as StateManager, m as scanConfigForImports, u as namingFromConfig, w as stackNameForConfig, y as tenantStateKey } from "./tamer.mjs";
|
|
2
|
+
import { B as getConfigBaseDir, E as mergeWorkerConfigForResourcePick, H as loadConfig, L as CFApiClient, N as effectiveDispatchNamespaceName, O as resolveDeployedWorkerName, R as cloudflareAccountIdFromEnv, V as getWorkers, f as fetchStackImports, h as StateManager, m as scanConfigForImports, u as namingFromConfig, w as stackNameForConfig, y as tenantStateKey } from "./tamer.mjs";
|
|
3
3
|
import { n as resourceModules } from "./registry-BrOxbA2i.mjs";
|
|
4
4
|
import "./r2S3EmptyBucket-B9_pHfvB.mjs";
|
|
5
5
|
import { r as dnsRecordStateKey, t as dnsRecordAppliesToEnv } from "./dns-records.resolve-DV6XBZf3.mjs";
|
|
@@ -7,14 +7,15 @@ import { t as logpushJobStatus } from "./logpush-job-GqVKG_HI.mjs";
|
|
|
7
7
|
import { t as buildOutputsView } from "./stackOutputs-CkpNSng8.mjs";
|
|
8
8
|
|
|
9
9
|
//#region src/features/dispatch-namespace/dispatch-namespace.status.ts
|
|
10
|
-
function dispatchNamespaceStatus(resources,
|
|
10
|
+
function dispatchNamespaceStatus(resources, env, state, _naming, config) {
|
|
11
11
|
const results = [];
|
|
12
|
-
for (const
|
|
13
|
-
const
|
|
12
|
+
for (const nsConfig of resources) {
|
|
13
|
+
const resolvedName = effectiveDispatchNamespaceName(nsConfig, env, config.tenant);
|
|
14
|
+
const key = `dispatch_ns:${resolvedName}`;
|
|
14
15
|
const entry = state.get(key);
|
|
15
16
|
results.push({
|
|
16
|
-
logicalName:
|
|
17
|
-
namespace:
|
|
17
|
+
logicalName: nsConfig.logicalName,
|
|
18
|
+
namespace: resolvedName,
|
|
18
19
|
status: entry?.type === "dispatch_namespace" ? "ok" : "missing"
|
|
19
20
|
});
|
|
20
21
|
}
|
|
@@ -128,12 +129,21 @@ async function runStatus(options) {
|
|
|
128
129
|
}
|
|
129
130
|
console.log();
|
|
130
131
|
}
|
|
131
|
-
const dns = dispatchNamespaceStatus(getDispatchNamespaces(config), env, state, naming);
|
|
132
|
+
const dns = dispatchNamespaceStatus(getDispatchNamespaces(config), env, state, naming, config);
|
|
132
133
|
if (dns.length > 0) {
|
|
133
134
|
console.log("Dispatch namespaces:");
|
|
134
135
|
for (const r of dns) console.log(` ${r.logicalName} (${r.namespace}) [${r.status}]`);
|
|
135
136
|
console.log();
|
|
136
137
|
}
|
|
138
|
+
const tenants = state.listTenants();
|
|
139
|
+
if (tenants.length > 0) {
|
|
140
|
+
console.log(`Tenants (${tenants.length}):`);
|
|
141
|
+
for (const t of tenants.sort((a, b) => `${a.product}:${a.workspace}`.localeCompare(`${b.product}:${b.workspace}`))) {
|
|
142
|
+
const shards = t.d1Shards?.length ?? 0;
|
|
143
|
+
console.log(` ${t.product}:${t.workspace} [${t.provisioningStatus}] ${t.scriptName} (${shards} shard(s))`);
|
|
144
|
+
}
|
|
145
|
+
console.log();
|
|
146
|
+
}
|
|
137
147
|
const dnsRows = dnsRecordStatus(getDnsRecords(config), env, state);
|
|
138
148
|
if (dnsRows.length > 0) {
|
|
139
149
|
console.log("DNS records:");
|
|
@@ -193,4 +203,4 @@ async function runStatus(options) {
|
|
|
193
203
|
|
|
194
204
|
//#endregion
|
|
195
205
|
export { runStatus };
|
|
196
|
-
//# sourceMappingURL=status-
|
|
206
|
+
//# sourceMappingURL=status-B-ei_QXO.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status-B-ei_QXO.mjs","names":["results: Array<{\n logicalName: string;\n namespace: string;\n status: ResourceStatus;\n }>","rows: DnsRecordStatusRow[]","meta: string[]","siblingImports: Record<string, Record<string, string>>","logpushLive:\n | Awaited<ReturnType<CFApiClient[\"logpushAccountJobsList\"]>>\n | undefined","hints: string[]"],"sources":["../src/features/dispatch-namespace/dispatch-namespace.status.ts","../src/features/dns-records/dns-records.status.ts","../src/cli/commands/status.ts"],"sourcesContent":["import type { DispatchNamespaceResourceConfig, CfiConfig } from \"../../types.js\";\nimport type { StateManager } from \"../../core/state/StateManager.js\";\nimport type { NamingEngine } from \"../../core/naming/NamingEngine.js\";\nimport type { ResourceStatus } from \"../../types.js\";\nimport { effectiveDispatchNamespaceName } from \"./dispatch-namespace.resolve.js\";\n\nexport function dispatchNamespaceStatus(\n resources: DispatchNamespaceResourceConfig[],\n env: string,\n state: StateManager,\n _naming: NamingEngine,\n config: CfiConfig,\n): Array<{ logicalName: string; namespace: string; status: ResourceStatus }> {\n const results: Array<{\n logicalName: string;\n namespace: string;\n status: ResourceStatus;\n }> = [];\n\n for (const nsConfig of resources) {\n const resolvedName = effectiveDispatchNamespaceName(nsConfig, env, config.tenant);\n const key = `dispatch_ns:${resolvedName}`;\n const entry = state.get(key);\n results.push({\n logicalName: nsConfig.logicalName,\n namespace: resolvedName,\n status:\n entry?.type === \"dispatch_namespace\" ? \"ok\" : \"missing\",\n });\n }\n\n return results;\n}\n","import type { DnsRecordResourceConfig, ResourceStatus } from \"../../types.js\";\nimport type { StateManager } from \"../../core/state/StateManager.js\";\nimport {\n dnsRecordAppliesToEnv,\n dnsRecordStateKey,\n} from \"./dns-records.resolve.js\";\n\nexport interface DnsRecordStatusRow {\n logicalName: string;\n type: string;\n name: string;\n recordId?: string;\n status: ResourceStatus;\n}\n\nexport function dnsRecordStatus(\n resources: DnsRecordResourceConfig[],\n env: string,\n state: StateManager,\n): DnsRecordStatusRow[] {\n const rows: DnsRecordStatusRow[] = [];\n for (const config of resources) {\n if (!dnsRecordAppliesToEnv(config, env)) {\n rows.push({\n logicalName: config.logicalName,\n type: config.type,\n name: config.name,\n status: \"ok\",\n });\n continue;\n }\n const entry = state.get(\n dnsRecordStateKey(config.zoneId, config.type, config.name),\n );\n if (entry?.type === \"dns_record\") {\n rows.push({\n logicalName: config.logicalName,\n type: entry.recordType,\n name: entry.name,\n recordId: entry.recordId,\n status: \"ok\",\n });\n } else {\n rows.push({\n logicalName: config.logicalName,\n type: config.type,\n name: config.name,\n status: \"missing\",\n });\n }\n }\n return rows;\n}\n","import { loadConfig, getWorkers, getConfigBaseDir } from \"../../core/config/loader.js\";\nimport { cloudflareAccountIdFromEnv } from \"../../core/cloudflareEnv.js\";\nimport { namingFromConfig } from \"../../core/config/namingFromConfig.js\";\nimport { StateManager } from \"../../core/state/StateManager.js\";\nimport { stackNameForConfig } from \"../../core/state/stackName.js\";\nimport { CFApiClient } from \"../../core/api/CFApiClient.js\";\nimport { dispatchNamespaceStatus } from \"../../features/dispatch-namespace/index.js\";\nimport { dnsRecordStatus } from \"../../features/dns-records/index.js\";\nimport { getDispatchNamespaces, getDnsRecords, getLogpushJobs } from \"../../types.js\";\nimport { logpushJobStatus } from \"../../features/logpush-job/index.js\";\nimport { tenantStateKey } from \"../../core/tenant/tenantKeys.js\";\nimport { resourceModules } from \"../../core/registry/registry.js\";\nimport {\n resolveDeployedWorkerName,\n mergeWorkerConfigForResourcePick,\n} from \"../../core/config/resolver.js\";\nimport { buildOutputsView } from \"../../core/outputs/stackOutputs.js\";\nimport {\n fetchStackImports,\n scanConfigForImports,\n} from \"../../core/imports/fetchStackImports.js\";\n\nexport async function runStatus(options: {\n env?: string;\n configPath?: string;\n /** `product:workspace` — show only this workspace tenant from state. */\n tenant?: string;\n}): Promise<void> {\n const env = options.env ?? \"local\";\n const configPath = options.configPath;\n\n const config = await loadConfig(configPath, { env });\n const baseDir = getConfigBaseDir();\n const accountId =\n config.account_id ?? cloudflareAccountIdFromEnv();\n if (!accountId) {\n throw new Error(\n \"account_id required in config or CLOUDFLARE_ACCOUNT_ID env var\",\n );\n }\n const naming = namingFromConfig(config);\n const api = new CFApiClient(accountId);\n const state = new StateManager(\n config.tenant.id,\n env,\n stackNameForConfig(config),\n );\n await state.hydrate(api);\n\n const workers = await getWorkers(config, baseDir);\n console.log(\n `\\nStatus for ${config.tenant.name} (${config.tenant.slug}) — env: ${env}\\n`,\n );\n\n if (options.tenant?.trim()) {\n const raw = options.tenant.trim();\n const colon = raw.indexOf(\":\");\n if (colon < 1) {\n throw new Error(\n 'status --tenant expects \"product:workspace\" (e.g. todo:acme)',\n );\n }\n const product = raw.slice(0, colon);\n const workspace = raw.slice(colon + 1);\n const t = state.getTenant(product, workspace);\n console.log(`Workspace tenant ${tenantStateKey(product, workspace)}:`);\n if (!t) {\n console.log(\" (no record in tamer state)\\n\");\n return;\n }\n console.log(` status: ${t.provisioningStatus}`);\n console.log(` dispatch namespace: ${t.dispatchNamespaceName}`);\n console.log(` script: ${t.scriptName}`);\n if (t.d1Shards?.length) {\n console.log(\" D1 shards:\");\n for (const s of t.d1Shards) {\n console.log(` ${s.role}: ${s.derivedName} [${s.cfId}]`);\n }\n }\n console.log();\n return;\n }\n\n const outputRows = buildOutputsView(config, state);\n if (outputRows.length > 0) {\n console.log(\"Stack outputs:\");\n for (const r of outputRows) {\n const valueText =\n r.value === null\n ? \"(unresolved — run apply)\"\n : r.value;\n const meta: string[] = [r.status];\n if (r.status === \"stale\" && r.declaredSource) {\n meta.push(`source drifted → ${r.declaredSource}`);\n }\n console.log(` ${r.name}: ${valueText} [${meta.join(\", \")}]`);\n }\n console.log();\n }\n\n // Inbound imports — show every `${tamer:import:<stack>.<output>}`\n // referenced by config, grouped by source stack. We tolerate fetch\n // failures so `tamer status` still works in offline / partial-cred\n // environments; a missing sibling row just displays \"(unresolved)\".\n const importRefs = scanConfigForImports(config);\n let siblingImports: Record<string, Record<string, string>> = {};\n try {\n siblingImports = await fetchStackImports(api, config, env);\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n console.warn(`(could not pre-fetch imported stacks: ${msg})`);\n }\n if (importRefs.length > 0) {\n console.log(\"Stack imports:\");\n const byStack = new Map<string, Set<string>>();\n for (const r of importRefs) {\n if (!byStack.has(r.stack)) byStack.set(r.stack, new Set());\n byStack.get(r.stack)!.add(r.output);\n }\n for (const [stack, outputs] of [...byStack].sort(([a], [b]) =>\n a.localeCompare(b),\n )) {\n console.log(` from stack \"${stack}\":`);\n const stackOutputs = siblingImports[stack] ?? {};\n for (const out of [...outputs].sort()) {\n const v = stackOutputs[out];\n const status = v === undefined ? \"unresolved\" : \"resolved\";\n const value = v ?? \"(missing — run `tamer apply` on that stack)\";\n console.log(` ${out}: ${value} [${status}]`);\n }\n }\n console.log();\n }\n\n const dns = dispatchNamespaceStatus(\n getDispatchNamespaces(config),\n env,\n state,\n naming,\n config,\n );\n if (dns.length > 0) {\n console.log(\"Dispatch namespaces:\");\n for (const r of dns) {\n console.log(` ${r.logicalName} (${r.namespace}) [${r.status}]`);\n }\n console.log();\n }\n\n const tenants = state.listTenants();\n if (tenants.length > 0) {\n console.log(`Tenants (${tenants.length}):`);\n for (const t of tenants.sort((a, b) =>\n `${a.product}:${a.workspace}`.localeCompare(`${b.product}:${b.workspace}`),\n )) {\n const shards = t.d1Shards?.length ?? 0;\n console.log(\n ` ${t.product}:${t.workspace} [${t.provisioningStatus}] ${t.scriptName} (${shards} shard(s))`,\n );\n }\n console.log();\n }\n\n const dnsRows = dnsRecordStatus(getDnsRecords(config), env, state);\n if (dnsRows.length > 0) {\n console.log(\"DNS records:\");\n for (const r of dnsRows) {\n const id = r.recordId ? ` [${r.recordId}]` : \"\";\n console.log(` ${r.logicalName}: ${r.type} ${r.name}${id} [${r.status}]`);\n }\n console.log();\n }\n\n let logpushLive:\n | Awaited<ReturnType<CFApiClient[\"logpushAccountJobsList\"]>>\n | undefined;\n if (env !== \"local\") {\n try {\n logpushLive = await api.logpushAccountJobsList();\n } catch {\n // Token may lack Logpush list; state-only rows still print.\n }\n }\n const logpushRows = logpushJobStatus(\n getLogpushJobs(config),\n config.tenant,\n env,\n state,\n logpushLive,\n );\n if (logpushRows.length > 0) {\n console.log(\"Logpush jobs:\");\n for (const r of logpushRows) {\n const id = r.cfJobId != null ? ` [id ${r.cfJobId}]` : \"\";\n const hints: string[] = [];\n if (r.cfEnabled === false) hints.push(\"disabled on Cloudflare\");\n if (r.cfError) hints.push(`CF error: ${r.cfError}`);\n const hint = hints.length > 0 ? ` — ${hints.join(\"; \")}` : \"\";\n console.log(` ${r.logicalName}: ${r.jobName}${id} [${r.status}]${hint}`);\n }\n console.log();\n }\n\n for (const [workerKey, workerConfig] of workers) {\n console.log(`Worker: ${workerKey}`);\n const deployedName = resolveDeployedWorkerName(\n config,\n workerKey,\n workerConfig,\n env,\n naming,\n );\n const mergedWorker = mergeWorkerConfigForResourcePick(\n config,\n workerKey,\n workerConfig,\n env,\n accountId,\n naming,\n state,\n { referencesMode: \"tolerant\", imports: siblingImports },\n );\n let printedAny = false;\n for (const mod of resourceModules) {\n const resources = mod.pickResources(mergedWorker);\n if (resources.length === 0) continue;\n const rows = mod.status({\n resources,\n env,\n state,\n naming,\n worker: { workerKey, deployedName },\n });\n if (rows.length === 0) continue;\n printedAny = true;\n console.log(` ${mod.label}:`);\n for (const r of rows) {\n console.log(` ${r.binding}: ${r.name} [${r.status}]`);\n }\n }\n if (!printedAny) console.log(\" (no resources)\");\n console.log();\n }\n}\n"],"mappings":"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"}
|
package/dist/tamer.mjs
CHANGED
|
@@ -8931,10 +8931,10 @@ async function main() {
|
|
|
8931
8931
|
await import("./migrate-YfRtATkG.mjs").then((m) => m.runMigrate(parseMigrateArgs(rest)));
|
|
8932
8932
|
break;
|
|
8933
8933
|
case "types":
|
|
8934
|
-
await import("./types-
|
|
8934
|
+
await import("./types-BpTmpzBy.mjs").then((m) => m.runTypes(parseTypesArgs(rest)));
|
|
8935
8935
|
break;
|
|
8936
8936
|
case "status":
|
|
8937
|
-
await import("./status-
|
|
8937
|
+
await import("./status-B-ei_QXO.mjs").then((m) => m.runStatus(parseStatusArgs(rest)));
|
|
8938
8938
|
break;
|
|
8939
8939
|
case "events":
|
|
8940
8940
|
await import("./events-C7wAGJae.mjs").then((m) => m.runEvents(parseEventsArgs(rest)));
|
|
@@ -9008,12 +9008,12 @@ async function main() {
|
|
|
9008
9008
|
case "wfp": {
|
|
9009
9009
|
const [sub, ...wfpRest] = rest;
|
|
9010
9010
|
if (sub === "put") {
|
|
9011
|
-
const { parseWfpPutArgs, runWfpPut } = await import("./wfp-put-
|
|
9011
|
+
const { parseWfpPutArgs, runWfpPut } = await import("./wfp-put-Dzs2zAj2.mjs");
|
|
9012
9012
|
await runWfpPut(parseWfpPutArgs(wfpRest));
|
|
9013
9013
|
break;
|
|
9014
9014
|
}
|
|
9015
9015
|
if (sub === "delete") {
|
|
9016
|
-
const { parseWfpDeleteArgs, runWfpDelete } = await import("./wfp-delete-
|
|
9016
|
+
const { parseWfpDeleteArgs, runWfpDelete } = await import("./wfp-delete-COWm9F8p.mjs");
|
|
9017
9017
|
await runWfpDelete(parseWfpDeleteArgs(wfpRest));
|
|
9018
9018
|
break;
|
|
9019
9019
|
}
|
|
@@ -9023,6 +9023,31 @@ async function main() {
|
|
|
9023
9023
|
case "secrets":
|
|
9024
9024
|
exitStatus = await import("./secrets-CnzjvndT.mjs").then((m) => m.runSecrets(rest));
|
|
9025
9025
|
break;
|
|
9026
|
+
case "tenant":
|
|
9027
|
+
if (rest[0] === "list") await import("./tenant-0dRh3gLI.mjs").then((m) => m.runTenantList({
|
|
9028
|
+
env: parseStringFlag(rest, "--env"),
|
|
9029
|
+
configPath: parseStringFlag(rest, "--config"),
|
|
9030
|
+
json: rest.includes("--json")
|
|
9031
|
+
}));
|
|
9032
|
+
else if (rest[0] === "status") await import("./tenant-0dRh3gLI.mjs").then((m) => m.runTenantStatus({
|
|
9033
|
+
env: parseStringFlag(rest, "--env"),
|
|
9034
|
+
product: parseStringFlag(rest, "--product") ?? "",
|
|
9035
|
+
workspace: parseStringFlag(rest, "--workspace") ?? "",
|
|
9036
|
+
configPath: parseStringFlag(rest, "--config")
|
|
9037
|
+
}));
|
|
9038
|
+
else if (rest[0] === "provision") await import("./provision-tenant-B4VgWlbl.mjs").then((m) => m.runProvisionTenant(parseProvisionTenantArgs(rest.slice(1))));
|
|
9039
|
+
else if (rest[0] === "destroy") await import("./destroy-tenant-B9ZTeUDk.mjs").then((m) => m.runDestroyTenant(parseDestroyTenantArgs(rest.slice(1))));
|
|
9040
|
+
else {
|
|
9041
|
+
console.error("Usage: tamer tenant <list|status|provision|destroy> [options]");
|
|
9042
|
+
exitStatus = 1;
|
|
9043
|
+
}
|
|
9044
|
+
break;
|
|
9045
|
+
case "provision-tenant":
|
|
9046
|
+
await import("./provision-tenant-B4VgWlbl.mjs").then((m) => m.runProvisionTenant(parseProvisionTenantArgs(rest)));
|
|
9047
|
+
break;
|
|
9048
|
+
case "destroy-tenant":
|
|
9049
|
+
await import("./destroy-tenant-B9ZTeUDk.mjs").then((m) => m.runDestroyTenant(parseDestroyTenantArgs(rest)));
|
|
9050
|
+
break;
|
|
9026
9051
|
case "env":
|
|
9027
9052
|
if (rest[0] === "list") await import("./env-list-DhbYisDn.mjs").then((m) => m.runEnvList({
|
|
9028
9053
|
configPath: parseStringFlag(rest, "--config"),
|
|
@@ -9066,6 +9091,7 @@ Commands:
|
|
|
9066
9091
|
provision-tenant Runtime: create per-tenant D1 shards declared in tenant.d1Shards + upload dispatch script (--main or --artifact-key); --shards a,b trims to a subset of the configured layout (omit for all); --json emits machine-readable result for Cloudflare Container callers
|
|
9067
9092
|
destroy-tenant Runtime: remove tenant script + D1 + state (shared envs need --confirm-tenant); --json emits machine-readable result
|
|
9068
9093
|
destroy Delete all resources for an env (use with caution)
|
|
9094
|
+
tenant Manage WFP tenants: list, status, provision, destroy
|
|
9069
9095
|
env list List all environments from state (with ages and resource counts)
|
|
9070
9096
|
env gc Destroy ephemeral envs older than --max-age (default 72h; --dry-run, --force, --json)
|
|
9071
9097
|
secrets Encrypted secrets vault (init, set, load, get, list, rm, verify, push)
|