@dragonmastery/tamer 0.37.0 → 0.39.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 +38 -38
- 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)));
|
|
@@ -8961,36 +8961,6 @@ async function main() {
|
|
|
8961
8961
|
case "doctor":
|
|
8962
8962
|
exitStatus = await import("./doctor-fm_vGe2C.mjs").then((m) => m.runDoctor(parseDoctorArgs(rest)));
|
|
8963
8963
|
break;
|
|
8964
|
-
case "provision-tenant": {
|
|
8965
|
-
const p = parseProvisionTenantArgs(rest);
|
|
8966
|
-
await import("./provision-tenant-B4VgWlbl.mjs").then((m) => m.runProvisionTenant({
|
|
8967
|
-
env: p.env,
|
|
8968
|
-
product: p.product,
|
|
8969
|
-
workspace: p.workspace,
|
|
8970
|
-
main: p.main,
|
|
8971
|
-
artifactKey: p.artifactKey,
|
|
8972
|
-
moduleName: p.moduleName,
|
|
8973
|
-
configPath: p.configPath,
|
|
8974
|
-
compatibilityDate: p.compatibilityDate,
|
|
8975
|
-
compatibilityFlags: p.compatibilityFlags,
|
|
8976
|
-
shardsRaw: p.shardsRaw,
|
|
8977
|
-
json: p.json
|
|
8978
|
-
}));
|
|
8979
|
-
break;
|
|
8980
|
-
}
|
|
8981
|
-
case "destroy-tenant": {
|
|
8982
|
-
const t = parseDestroyTenantArgs(rest);
|
|
8983
|
-
await import("./destroy-tenant-B9ZTeUDk.mjs").then((m) => m.runDestroyTenant({
|
|
8984
|
-
env: t.env,
|
|
8985
|
-
product: t.product,
|
|
8986
|
-
workspace: t.workspace,
|
|
8987
|
-
force: t.force,
|
|
8988
|
-
confirmTenant: t.confirmTenant,
|
|
8989
|
-
configPath: t.configPath,
|
|
8990
|
-
json: t.json
|
|
8991
|
-
}));
|
|
8992
|
-
break;
|
|
8993
|
-
}
|
|
8994
8964
|
case "destroy": {
|
|
8995
8965
|
const d = parseDestroyArgs(rest);
|
|
8996
8966
|
await import("./destroy-BeOYY2U6.mjs").then((m) => m.runDestroy({
|
|
@@ -9008,16 +8978,47 @@ async function main() {
|
|
|
9008
8978
|
case "wfp": {
|
|
9009
8979
|
const [sub, ...wfpRest] = rest;
|
|
9010
8980
|
if (sub === "put") {
|
|
9011
|
-
const { parseWfpPutArgs, runWfpPut } = await import("./wfp-put-
|
|
8981
|
+
const { parseWfpPutArgs, runWfpPut } = await import("./wfp-put-Dzs2zAj2.mjs");
|
|
9012
8982
|
await runWfpPut(parseWfpPutArgs(wfpRest));
|
|
9013
8983
|
break;
|
|
9014
8984
|
}
|
|
9015
8985
|
if (sub === "delete") {
|
|
9016
|
-
const { parseWfpDeleteArgs, runWfpDelete } = await import("./wfp-delete-
|
|
8986
|
+
const { parseWfpDeleteArgs, runWfpDelete } = await import("./wfp-delete-COWm9F8p.mjs");
|
|
9017
8987
|
await runWfpDelete(parseWfpDeleteArgs(wfpRest));
|
|
9018
8988
|
break;
|
|
9019
8989
|
}
|
|
9020
|
-
|
|
8990
|
+
if (sub === "tenant") {
|
|
8991
|
+
const tenantSub = wfpRest[0];
|
|
8992
|
+
const tenantRest = wfpRest.slice(1);
|
|
8993
|
+
if (tenantSub === "list") {
|
|
8994
|
+
await import("./tenant-0dRh3gLI.mjs").then((m) => m.runTenantList({
|
|
8995
|
+
env: parseStringFlag(wfpRest, "--env"),
|
|
8996
|
+
configPath: parseStringFlag(wfpRest, "--config"),
|
|
8997
|
+
json: wfpRest.includes("--json")
|
|
8998
|
+
}));
|
|
8999
|
+
break;
|
|
9000
|
+
}
|
|
9001
|
+
if (tenantSub === "status") {
|
|
9002
|
+
await import("./tenant-0dRh3gLI.mjs").then((m) => m.runTenantStatus({
|
|
9003
|
+
env: parseStringFlag(wfpRest, "--env"),
|
|
9004
|
+
product: parseStringFlag(wfpRest, "--product") ?? "",
|
|
9005
|
+
workspace: parseStringFlag(wfpRest, "--workspace") ?? "",
|
|
9006
|
+
configPath: parseStringFlag(wfpRest, "--config")
|
|
9007
|
+
}));
|
|
9008
|
+
break;
|
|
9009
|
+
}
|
|
9010
|
+
if (tenantSub === "provision") {
|
|
9011
|
+
await import("./provision-tenant-B4VgWlbl.mjs").then((m) => m.runProvisionTenant(parseProvisionTenantArgs(tenantRest)));
|
|
9012
|
+
break;
|
|
9013
|
+
}
|
|
9014
|
+
if (tenantSub === "destroy") {
|
|
9015
|
+
await import("./destroy-tenant-B9ZTeUDk.mjs").then((m) => m.runDestroyTenant(parseDestroyTenantArgs(tenantRest)));
|
|
9016
|
+
break;
|
|
9017
|
+
}
|
|
9018
|
+
console.error("Usage: tamer wfp tenant <list|status|provision|destroy> [options]");
|
|
9019
|
+
process.exit(1);
|
|
9020
|
+
}
|
|
9021
|
+
console.error("usage:\n tamer wfp put --namespace <n> --script-name <s> --main <file> [--config <path>]\n tamer wfp delete --namespace <n> --script-name <s> [--force] [--config <path>]\n tamer wfp tenant <list|status|provision|destroy> [options]");
|
|
9021
9022
|
process.exit(1);
|
|
9022
9023
|
}
|
|
9023
9024
|
case "secrets":
|
|
@@ -9063,14 +9064,13 @@ Commands:
|
|
|
9063
9064
|
plan CloudFormation-style preview of apply+deploy (read-only)
|
|
9064
9065
|
import Register an existing Cloudflare resource into Tamer state by logical name
|
|
9065
9066
|
doctor Verify CLOUDFLARE_* credentials can read the account API
|
|
9066
|
-
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
|
-
destroy-tenant Runtime: remove tenant script + D1 + state (shared envs need --confirm-tenant); --json emits machine-readable result
|
|
9068
9067
|
destroy Delete all resources for an env (use with caution)
|
|
9069
9068
|
env list List all environments from state (with ages and resource counts)
|
|
9070
9069
|
env gc Destroy ephemeral envs older than --max-age (default 72h; --dry-run, --force, --json)
|
|
9071
|
-
secrets Encrypted secrets vault (init, set, load, get, list, rm, verify, push)
|
|
9072
9070
|
wfp put Upload a single-module user Worker to a dispatch namespace (multipart API)
|
|
9073
9071
|
wfp delete Delete a user Worker from a dispatch namespace
|
|
9072
|
+
wfp tenant <list|status|provision|destroy> Manage WFP tenants (per-workspace scripts + D1 shards)
|
|
9073
|
+
secrets Encrypted secrets vault (init, set, load, copy, get, list, rm, verify, push)
|
|
9074
9074
|
|
|
9075
9075
|
Options:
|
|
9076
9076
|
--env <name> Environment (default: local for most commands; deploy requires explicit --env)
|