@dragonmastery/tamer 0.43.0 → 0.43.1

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.
Files changed (104) hide show
  1. package/dist/SecretsVault-DfizRmnN.mjs +3 -0
  2. package/dist/{apply-J081Hfqc.mjs → apply--ZUmkGmn.mjs} +15 -15
  3. package/dist/{apply-J081Hfqc.mjs.map → apply--ZUmkGmn.mjs.map} +1 -1
  4. package/dist/{applyTarget-CTsOrwco.mjs → applyTarget-wzX8VpIA.mjs} +3 -3
  5. package/dist/{applyTarget-CTsOrwco.mjs.map → applyTarget-wzX8VpIA.mjs.map} +1 -1
  6. package/dist/{bootstrap-D663FPHF.mjs → bootstrap-5Y32Z1bF.mjs} +4 -4
  7. package/dist/{bootstrap-D663FPHF.mjs.map → bootstrap-5Y32Z1bF.mjs.map} +1 -1
  8. package/dist/{cloudflareSnapshot-dKYupX1L.mjs → cloudflareSnapshot-4-UXu92B.mjs} +5 -5
  9. package/dist/{cloudflareSnapshot-dKYupX1L.mjs.map → cloudflareSnapshot-4-UXu92B.mjs.map} +1 -1
  10. package/dist/crypto-Dsq43xcZ.mjs +3 -0
  11. package/dist/{deploy-N8cVT5M9.mjs → deploy-Don2YRuA.mjs} +10 -10
  12. package/dist/{deploy-N8cVT5M9.mjs.map → deploy-Don2YRuA.mjs.map} +1 -1
  13. package/dist/{destroy-kkOR_ZBj.mjs → destroy-DgSIeg8b.mjs} +11 -11
  14. package/dist/{destroy-kkOR_ZBj.mjs.map → destroy-DgSIeg8b.mjs.map} +1 -1
  15. package/dist/{destroy-tenant-DdObj9pd.mjs → destroy-tenant-BKnB1Edp.mjs} +2 -2
  16. package/dist/{destroy-tenant-DdObj9pd.mjs.map → destroy-tenant-BKnB1Edp.mjs.map} +1 -1
  17. package/dist/{dev-zQRvUhdd.mjs → dev-BicIlxwR.mjs} +8 -8
  18. package/dist/{dev-zQRvUhdd.mjs.map → dev-BicIlxwR.mjs.map} +1 -1
  19. package/dist/{dns-records.resolve-CUQz6Ivz.mjs → dns-records.resolve-CKl_m1wD.mjs} +1 -1
  20. package/dist/{dns-records.resolve-CUQz6Ivz.mjs.map → dns-records.resolve-CKl_m1wD.mjs.map} +1 -1
  21. package/dist/{dns-records.resolve-Dge2kukJ.mjs → dns-records.resolve-N4VzbSlZ.mjs} +1 -1
  22. package/dist/{dns-records.sync-BnOga2LS.mjs → dns-records.sync-CgZrG_ok.mjs} +3 -3
  23. package/dist/{dns-records.sync-BnOga2LS.mjs.map → dns-records.sync-CgZrG_ok.mjs.map} +1 -1
  24. package/dist/{doctor-yTe9cUO5.mjs → doctor-ClV1tg9D.mjs} +2 -2
  25. package/dist/{doctor-yTe9cUO5.mjs.map → doctor-ClV1tg9D.mjs.map} +1 -1
  26. package/dist/{drift-B-oPsgPW.mjs → drift-BnJdi6-8.mjs} +7 -7
  27. package/dist/{drift-B-oPsgPW.mjs.map → drift-BnJdi6-8.mjs.map} +1 -1
  28. package/dist/drift-CjNvtmAK.mjs +8 -0
  29. package/dist/{emit-DDH99lzS.mjs → emit-C_sNJiL_.mjs} +3 -3
  30. package/dist/{emit-DDH99lzS.mjs.map → emit-C_sNJiL_.mjs.map} +1 -1
  31. package/dist/{env-gc-DrXu7DlG.mjs → env-gc-DcOtNJkG.mjs} +11 -11
  32. package/dist/{env-gc-DrXu7DlG.mjs.map → env-gc-DcOtNJkG.mjs.map} +1 -1
  33. package/dist/{env-list-D-wnLl8W.mjs → env-list-B1c0zuhI.mjs} +2 -2
  34. package/dist/{env-list-D-wnLl8W.mjs.map → env-list-B1c0zuhI.mjs.map} +1 -1
  35. package/dist/{events-C86vo1gV.mjs → events-tGFCV-57.mjs} +2 -2
  36. package/dist/{events-C86vo1gV.mjs.map → events-tGFCV-57.mjs.map} +1 -1
  37. package/dist/{generator-Cu5XUkjr.mjs → generator--De7tWLA.mjs} +2 -2
  38. package/dist/{generator-Cu5XUkjr.mjs.map → generator--De7tWLA.mjs.map} +1 -1
  39. package/dist/{import-QJc0fI1h.mjs → import-DbHvqNRp.mjs} +6 -6
  40. package/dist/{import-QJc0fI1h.mjs.map → import-DbHvqNRp.mjs.map} +1 -1
  41. package/dist/loader-O14iKXe5.mjs +3 -0
  42. package/dist/{logpush-job-DZG-3nkJ.mjs → logpush-job-CfBhpy6e.mjs} +2 -2
  43. package/dist/{logpush-job-DZG-3nkJ.mjs.map → logpush-job-CfBhpy6e.mjs.map} +1 -1
  44. package/dist/masterKey-DjpTmsn9.mjs +3 -0
  45. package/dist/{migrate-v1UQCzNi.mjs → migrate-y4tazUUK.mjs} +6 -6
  46. package/dist/{migrate-v1UQCzNi.mjs.map → migrate-y4tazUUK.mjs.map} +1 -1
  47. package/dist/{plan-Dp2aTzEU.mjs → plan-WLsyswyB.mjs} +12 -12
  48. package/dist/{plan-Dp2aTzEU.mjs.map → plan-WLsyswyB.mjs.map} +1 -1
  49. package/dist/{planFormat-C8mq3sbD.mjs → planFormat-DHjPdYzr.mjs} +1 -1
  50. package/dist/{planFormat-C8mq3sbD.mjs.map → planFormat-DHjPdYzr.mjs.map} +1 -1
  51. package/dist/{provision-tenant-DEscl-jo.mjs → provision-tenant-wGPK8MRJ.mjs} +18 -21
  52. package/dist/{provision-tenant-DEscl-jo.mjs.map → provision-tenant-wGPK8MRJ.mjs.map} +1 -1
  53. package/dist/{r2S3EmptyBucket-CDE2lTM8.mjs → r2S3EmptyBucket-OKIQdlms.mjs} +1 -1
  54. package/dist/{r2S3EmptyBucket-CDE2lTM8.mjs.map → r2S3EmptyBucket-OKIQdlms.mjs.map} +1 -1
  55. package/dist/{registry-CRgobiU4.mjs → registry-D3heJge_.mjs} +4 -4
  56. package/dist/{registry-CRgobiU4.mjs.map → registry-D3heJge_.mjs.map} +1 -1
  57. package/dist/{resolveTenantBindings-CXLwAG0F.mjs → resolveTenantBindings-C-3w6e22.mjs} +2 -2
  58. package/dist/{resolveTenantBindings-CXLwAG0F.mjs.map → resolveTenantBindings-C-3w6e22.mjs.map} +1 -1
  59. package/dist/secretsDb-B_xO1fwY.mjs +3 -0
  60. package/dist/{stackOutputs-BMPahRAl.mjs → stackOutputs-DAarU7Q-.mjs} +2 -2
  61. package/dist/{stackOutputs-BMPahRAl.mjs.map → stackOutputs-DAarU7Q-.mjs.map} +1 -1
  62. package/dist/{status-CQpgTTeG.mjs → status-h6i0BF9r.mjs} +7 -7
  63. package/dist/{status-CQpgTTeG.mjs.map → status-h6i0BF9r.mjs.map} +1 -1
  64. package/dist/{sync-DqMMQ7mQ.mjs → sync-DEflZagk.mjs} +6 -6
  65. package/dist/{sync-DqMMQ7mQ.mjs.map → sync-DEflZagk.mjs.map} +1 -1
  66. package/dist/sync-DWsBVffD.mjs +7 -0
  67. package/dist/tamer.mjs +26 -25
  68. package/dist/tamer.mjs.map +1 -1
  69. package/dist/{tamerArtifactsR2-BePICoT8.mjs → tamerArtifactsR2--lL7OBaD.mjs} +2 -2
  70. package/dist/{tamerArtifactsR2-BePICoT8.mjs.map → tamerArtifactsR2--lL7OBaD.mjs.map} +1 -1
  71. package/dist/{tenant-2XTWe9j0.mjs → tenant-BH_JoT9H.mjs} +2 -2
  72. package/dist/{tenant-2XTWe9j0.mjs.map → tenant-BH_JoT9H.mjs.map} +1 -1
  73. package/dist/{tenant-migrate-B-n4ppSk.mjs → tenant-migrate-C8OXJtYf.mjs} +5 -5
  74. package/dist/{tenant-migrate-B-n4ppSk.mjs.map → tenant-migrate-C8OXJtYf.mjs.map} +1 -1
  75. package/dist/{types-BCTgIotG.mjs → types-ChGaMTT3.mjs} +6 -6
  76. package/dist/{types-BCTgIotG.mjs.map → types-ChGaMTT3.mjs.map} +1 -1
  77. package/dist/{verifyPlanFile-DrFZjkVY.mjs → verifyPlanFile-BX1NO3yj.mjs} +2 -2
  78. package/dist/{verifyPlanFile-DrFZjkVY.mjs.map → verifyPlanFile-BX1NO3yj.mjs.map} +1 -1
  79. package/dist/{wfp-delete-BblKos51.mjs → wfp-delete-Bt00-azB.mjs} +2 -2
  80. package/dist/{wfp-delete-BblKos51.mjs.map → wfp-delete-Bt00-azB.mjs.map} +1 -1
  81. package/dist/{wfp-put-oYvLiM_c.mjs → wfp-put-ZLt3oVZo.mjs} +2 -2
  82. package/dist/{wfp-put-oYvLiM_c.mjs.map → wfp-put-ZLt3oVZo.mjs.map} +1 -1
  83. package/dist/{worker-route-BPDAwUL0.mjs → worker-route-u4qd5ddC.mjs} +3 -3
  84. package/dist/{worker-route-BPDAwUL0.mjs.map → worker-route-u4qd5ddC.mjs.map} +1 -1
  85. package/dist/{workers-D08-ri2Q.mjs → workers-CEPTZmdi.mjs} +2 -2
  86. package/dist/{workers-D08-ri2Q.mjs.map → workers-CEPTZmdi.mjs.map} +1 -1
  87. package/dist/wranglerOutFile-BwTiiBhi.mjs +3 -0
  88. package/dist/{wranglerSpawn-Dg-lr-rf.mjs → wranglerSpawn-DX7fppPf.mjs} +1 -1
  89. package/dist/{wranglerSpawn-Dg-lr-rf.mjs.map → wranglerSpawn-DX7fppPf.mjs.map} +1 -1
  90. package/dist/wranglerSpawn-PEDw4vkF.mjs +3 -0
  91. package/dist/{zoneResolver-Dfp2glm8.mjs → zoneResolver-BPrCHiEV.mjs} +1 -1
  92. package/dist/{zoneResolver-Dfp2glm8.mjs.map → zoneResolver-BPrCHiEV.mjs.map} +1 -1
  93. package/package.json +1 -1
  94. package/dist/SecretsVault-D_JTJm5s.mjs +0 -3
  95. package/dist/crypto-5HwDmS4B.mjs +0 -3
  96. package/dist/drift-RsT8UGQw.mjs +0 -8
  97. package/dist/fingerprint-D6E5FTkq.mjs +0 -3
  98. package/dist/loader-DY6STQU3.mjs +0 -3
  99. package/dist/masterKey-D9gq3eNP.mjs +0 -3
  100. package/dist/secretsDb-CMEcKvSi.mjs +0 -3
  101. package/dist/sync-Blz5emYO.mjs +0 -7
  102. package/dist/wranglerOutFile-eViugwTw.mjs +0 -3
  103. package/dist/wranglerSpawn-BUOsdo5R.mjs +0 -3
  104. /package/dist/{secrets-DVNZwGUS.mjs → secrets-CUBA2cK4.mjs} +0 -0
@@ -1,5 +1,5 @@
1
1
  import { n as materializeTamerResolvable } from "./normalize-DVSTRZhO.mjs";
2
- import { I as resolveReferencesInString } from "./tamer.mjs";
2
+ import { F as resolveReferencesInString } from "./tamer.mjs";
3
3
 
4
4
  //#region src/core/tenant/resolveTenantBindings.ts
5
5
  /**
@@ -62,4 +62,4 @@ function resolveTenantBindings(config, shards, naming, state, env, accountId) {
62
62
 
63
63
  //#endregion
64
64
  export { resolveTenantBindings, resolveTenantD1Bindings };
65
- //# sourceMappingURL=resolveTenantBindings-CXLwAG0F.mjs.map
65
+ //# sourceMappingURL=resolveTenantBindings-C-3w6e22.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"resolveTenantBindings-CXLwAG0F.mjs","names":["bindings: Array<\n | { type: \"d1\"; name: string; id: string }\n | { type: \"plain_text\"; name: string; text: string }\n | { type: \"service\"; name: string; service: string; environment?: string }\n >","refCtx: ReferenceContext"],"sources":["../src/core/tenant/resolveTenantBindings.ts"],"sourcesContent":["/**\n * Resolve dispatch script bindings for a provisioned tenant.\n *\n * D1 bindings derive from `tenant.shardBindings` matched to the tenant's\n * shard roles. Vars and services come from `tenant.dispatchVars` /\n * `tenant.dispatchServices` (resolved against state for `${tamer:...}`\n * references).\n */\nimport type { CfiConfig, TenantD1ShardRef } from \"../../types.js\";\nimport type { StateManager } from \"../../core/state/StateManager.js\";\nimport type { NamingEngine } from \"../../core/naming/NamingEngine.js\";\nimport type { DispatchScriptBindings } from \"../../core/wfp/buildDispatchUploadForm.js\";\nimport { materializeTamerResolvable } from \"../../dx/normalize.js\";\nimport {\n resolveReferencesInString,\n type ReferenceContext,\n} from \"../../core/references/references.js\";\n\n/**\n * Resolve D1 bindings for the tenant dispatch script.\n * Matches shard roles to `tenant.shardBindings` and produces\n * unified `bindings[]` entries: `{ type: \"d1\", name: binding, id: cfId }`.\n */\nexport function resolveTenantD1Bindings(\n config: CfiConfig,\n shards: TenantD1ShardRef[],\n naming: NamingEngine,\n): Array<{ type: \"d1\"; name: string; id: string }> {\n const shardBindings = config.tenant.shardBindings ?? {};\n return shards.map((shard) => {\n const info = shardBindings[shard.role];\n const binding = info?.binding ?? `DB_${shard.role.toUpperCase().replace(/-/g, \"_\")}`;\n return { type: \"d1\", name: binding, id: shard.cfId };\n });\n}\n\n/**\n * Resolve all dispatch script bindings (D1 + vars + services).\n * References in vars/services are resolved against state.\n * Uses the unified Cloudflare bindings format.\n */\nexport function resolveTenantBindings(\n config: CfiConfig,\n shards: TenantD1ShardRef[],\n naming: NamingEngine,\n state: StateManager,\n env: string,\n accountId: string,\n): DispatchScriptBindings {\n const bindings: Array<\n | { type: \"d1\"; name: string; id: string }\n | { type: \"plain_text\"; name: string; text: string }\n | { type: \"service\"; name: string; service: string; environment?: string }\n > = [];\n\n // D1 bindings from shard roles\n bindings.push(...resolveTenantD1Bindings(config, shards, naming));\n\n // Vars from config.tenant.dispatchVars\n if (config.tenant.dispatchVars) {\n const refCtx: ReferenceContext = {\n config,\n env,\n state,\n naming,\n accountId,\n };\n for (const [key, value] of Object.entries(config.tenant.dispatchVars)) {\n const text = resolveReferencesInString(\n materializeTamerResolvable(value),\n refCtx,\n `tenant.dispatchVars.${key}`,\n );\n bindings.push({ type: \"plain_text\", name: key, text });\n }\n }\n\n // Service bindings from config.tenant.dispatchServices\n if (config.tenant.dispatchServices?.length) {\n const refCtx: ReferenceContext = {\n config,\n env,\n state,\n naming,\n accountId,\n };\n for (const s of config.tenant.dispatchServices) {\n bindings.push({\n type: \"service\",\n name: s.name,\n service: resolveReferencesInString(\n materializeTamerResolvable(s.service),\n refCtx,\n `tenant.dispatchServices.${s.name}.service`,\n ),\n ...(s.environment ? { environment: s.environment } : {}),\n });\n }\n }\n\n return bindings.length > 0 ? { bindings } : {};\n}\n"],"mappings":";;;;;;;;;AAuBA,SAAgB,wBACd,QACA,QACA,QACiD;CACjD,MAAM,gBAAgB,OAAO,OAAO,iBAAiB,EAAE;AACvD,QAAO,OAAO,KAAK,UAAU;AAG3B,SAAO;GAAE,MAAM;GAAM,MAFR,cAAc,MAAM,OACX,WAAW,MAAM,MAAM,KAAK,aAAa,CAAC,QAAQ,MAAM,IAAI;GAC9C,IAAI,MAAM;GAAM;GACpD;;;;;;;AAQJ,SAAgB,sBACd,QACA,QACA,QACA,OACA,KACA,WACwB;CACxB,MAAMA,WAIF,EAAE;AAGN,UAAS,KAAK,GAAG,wBAAwB,QAAQ,QAAQ,OAAO,CAAC;AAGjE,KAAI,OAAO,OAAO,cAAc;EAC9B,MAAMC,SAA2B;GAC/B;GACA;GACA;GACA;GACA;GACD;AACD,OAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,OAAO,OAAO,aAAa,EAAE;GACrE,MAAM,OAAO,0BACX,2BAA2B,MAAM,EACjC,QACA,uBAAuB,MACxB;AACD,YAAS,KAAK;IAAE,MAAM;IAAc,MAAM;IAAK;IAAM,CAAC;;;AAK1D,KAAI,OAAO,OAAO,kBAAkB,QAAQ;EAC1C,MAAMA,SAA2B;GAC/B;GACA;GACA;GACA;GACA;GACD;AACD,OAAK,MAAM,KAAK,OAAO,OAAO,iBAC5B,UAAS,KAAK;GACZ,MAAM;GACN,MAAM,EAAE;GACR,SAAS,0BACP,2BAA2B,EAAE,QAAQ,EACrC,QACA,2BAA2B,EAAE,KAAK,UACnC;GACD,GAAI,EAAE,cAAc,EAAE,aAAa,EAAE,aAAa,GAAG,EAAE;GACxD,CAAC;;AAIN,QAAO,SAAS,SAAS,IAAI,EAAE,UAAU,GAAG,EAAE"}
1
+ {"version":3,"file":"resolveTenantBindings-C-3w6e22.mjs","names":["bindings: Array<\n | { type: \"d1\"; name: string; id: string }\n | { type: \"plain_text\"; name: string; text: string }\n | { type: \"service\"; name: string; service: string; environment?: string }\n >","refCtx: ReferenceContext"],"sources":["../src/core/tenant/resolveTenantBindings.ts"],"sourcesContent":["/**\n * Resolve dispatch script bindings for a provisioned tenant.\n *\n * D1 bindings derive from `tenant.shardBindings` matched to the tenant's\n * shard roles. Vars and services come from `tenant.dispatchVars` /\n * `tenant.dispatchServices` (resolved against state for `${tamer:...}`\n * references).\n */\nimport type { CfiConfig, TenantD1ShardRef } from \"../../types.js\";\nimport type { StateManager } from \"../../core/state/StateManager.js\";\nimport type { NamingEngine } from \"../../core/naming/NamingEngine.js\";\nimport type { DispatchScriptBindings } from \"../../core/wfp/buildDispatchUploadForm.js\";\nimport { materializeTamerResolvable } from \"../../dx/normalize.js\";\nimport {\n resolveReferencesInString,\n type ReferenceContext,\n} from \"../../core/references/references.js\";\n\n/**\n * Resolve D1 bindings for the tenant dispatch script.\n * Matches shard roles to `tenant.shardBindings` and produces\n * unified `bindings[]` entries: `{ type: \"d1\", name: binding, id: cfId }`.\n */\nexport function resolveTenantD1Bindings(\n config: CfiConfig,\n shards: TenantD1ShardRef[],\n naming: NamingEngine,\n): Array<{ type: \"d1\"; name: string; id: string }> {\n const shardBindings = config.tenant.shardBindings ?? {};\n return shards.map((shard) => {\n const info = shardBindings[shard.role];\n const binding = info?.binding ?? `DB_${shard.role.toUpperCase().replace(/-/g, \"_\")}`;\n return { type: \"d1\", name: binding, id: shard.cfId };\n });\n}\n\n/**\n * Resolve all dispatch script bindings (D1 + vars + services).\n * References in vars/services are resolved against state.\n * Uses the unified Cloudflare bindings format.\n */\nexport function resolveTenantBindings(\n config: CfiConfig,\n shards: TenantD1ShardRef[],\n naming: NamingEngine,\n state: StateManager,\n env: string,\n accountId: string,\n): DispatchScriptBindings {\n const bindings: Array<\n | { type: \"d1\"; name: string; id: string }\n | { type: \"plain_text\"; name: string; text: string }\n | { type: \"service\"; name: string; service: string; environment?: string }\n > = [];\n\n // D1 bindings from shard roles\n bindings.push(...resolveTenantD1Bindings(config, shards, naming));\n\n // Vars from config.tenant.dispatchVars\n if (config.tenant.dispatchVars) {\n const refCtx: ReferenceContext = {\n config,\n env,\n state,\n naming,\n accountId,\n };\n for (const [key, value] of Object.entries(config.tenant.dispatchVars)) {\n const text = resolveReferencesInString(\n materializeTamerResolvable(value),\n refCtx,\n `tenant.dispatchVars.${key}`,\n );\n bindings.push({ type: \"plain_text\", name: key, text });\n }\n }\n\n // Service bindings from config.tenant.dispatchServices\n if (config.tenant.dispatchServices?.length) {\n const refCtx: ReferenceContext = {\n config,\n env,\n state,\n naming,\n accountId,\n };\n for (const s of config.tenant.dispatchServices) {\n bindings.push({\n type: \"service\",\n name: s.name,\n service: resolveReferencesInString(\n materializeTamerResolvable(s.service),\n refCtx,\n `tenant.dispatchServices.${s.name}.service`,\n ),\n ...(s.environment ? { environment: s.environment } : {}),\n });\n }\n }\n\n return bindings.length > 0 ? { bindings } : {};\n}\n"],"mappings":";;;;;;;;;AAuBA,SAAgB,wBACd,QACA,QACA,QACiD;CACjD,MAAM,gBAAgB,OAAO,OAAO,iBAAiB,EAAE;AACvD,QAAO,OAAO,KAAK,UAAU;AAG3B,SAAO;GAAE,MAAM;GAAM,MAFR,cAAc,MAAM,OACX,WAAW,MAAM,MAAM,KAAK,aAAa,CAAC,QAAQ,MAAM,IAAI;GAC9C,IAAI,MAAM;GAAM;GACpD;;;;;;;AAQJ,SAAgB,sBACd,QACA,QACA,QACA,OACA,KACA,WACwB;CACxB,MAAMA,WAIF,EAAE;AAGN,UAAS,KAAK,GAAG,wBAAwB,QAAQ,QAAQ,OAAO,CAAC;AAGjE,KAAI,OAAO,OAAO,cAAc;EAC9B,MAAMC,SAA2B;GAC/B;GACA;GACA;GACA;GACA;GACD;AACD,OAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,OAAO,OAAO,aAAa,EAAE;GACrE,MAAM,OAAO,0BACX,2BAA2B,MAAM,EACjC,QACA,uBAAuB,MACxB;AACD,YAAS,KAAK;IAAE,MAAM;IAAc,MAAM;IAAK;IAAM,CAAC;;;AAK1D,KAAI,OAAO,OAAO,kBAAkB,QAAQ;EAC1C,MAAMA,SAA2B;GAC/B;GACA;GACA;GACA;GACA;GACD;AACD,OAAK,MAAM,KAAK,OAAO,OAAO,iBAC5B,UAAS,KAAK;GACZ,MAAM;GACN,MAAM,EAAE;GACR,SAAS,0BACP,2BAA2B,EAAE,QAAQ,EACrC,QACA,2BAA2B,EAAE,KAAK,UACnC;GACD,GAAI,EAAE,cAAc,EAAE,aAAa,EAAE,aAAa,GAAG,EAAE;GACxD,CAAC;;AAIN,QAAO,SAAS,SAAS,IAAI,EAAE,UAAU,GAAG,EAAE"}
@@ -0,0 +1,3 @@
1
+ import { G as SECRET_HISTORY_CAP, J as ensureTamerSecretsDatabase, K as copyEnvSecretRows, X as secretRowKey, Y as findTamerSecretsDatabaseUuid, Z as tamerSecretsDatabaseName, q as deleteEnvSecretRows } from "./tamer.mjs";
2
+
3
+ export { ensureTamerSecretsDatabase };
@@ -1,5 +1,5 @@
1
1
  import { n as materializeTamerResolvable } from "./normalize-DVSTRZhO.mjs";
2
- import { I as resolveReferencesInString } from "./tamer.mjs";
2
+ import { F as resolveReferencesInString } from "./tamer.mjs";
3
3
 
4
4
  //#region src/core/outputs/stackOutputs.ts
5
5
  /**
@@ -66,4 +66,4 @@ function buildOutputsView(config, state) {
66
66
 
67
67
  //#endregion
68
68
  export { resolveStackOutputs as n, buildOutputsView as t };
69
- //# sourceMappingURL=stackOutputs-BMPahRAl.mjs.map
69
+ //# sourceMappingURL=stackOutputs-DAarU7Q-.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"stackOutputs-BMPahRAl.mjs","names":["out: Record<string, CfiStackOutputValue>","rows: StackOutputRow[]","status: StackOutputRow[\"status\"]"],"sources":["../src/core/outputs/stackOutputs.ts"],"sourcesContent":["/**\n * Tamer's CloudFormation `Outputs` analogue.\n *\n * `tamer.config.ts > outputs` declares named exports as Tamer reference\n * strings (e.g. `\"${tamer:d1:users.id}\"`). After a successful `apply` the\n * engine resolves every entry against the just-completed state and persists\n * the literal under {@link CfiState.stackOutputs}. Sibling stacks consume\n * them via `${tamer:import:<stackName>.<outputName>}` (added separately).\n *\n * Resolution is **strict**: any unresolved/unknown reference fails the\n * apply (and rolls back when `--rollback-on-failure` is set). Read-only\n * commands like `status` use {@link buildOutputsView} which is tolerant\n * and shows the placeholder verbatim alongside the persisted value.\n */\nimport type {\n CfiConfig,\n CfiStackOutputValue,\n} from \"../../types.js\";\nimport { materializeTamerResolvable } from \"../../dx/normalize.js\";\nimport type { NamingEngine } from \"../naming/NamingEngine.js\";\nimport type { StateManager } from \"../state/StateManager.js\";\nimport {\n resolveReferencesInString,\n TamerReferenceError,\n} from \"../references/references.js\";\n\n/**\n * Resolve every `outputs:` entry against the current state. Throws\n * {@link TamerReferenceError} on the first unresolved reference so a failed\n * apply can roll back instead of silently persisting half-resolved values.\n *\n * Pass an explicit `now` only from tests — production code should let it\n * default to wall-clock so `resolvedAt` reflects the real persist time.\n */\nexport function resolveStackOutputs(\n config: CfiConfig,\n ctx: {\n env: string;\n state: StateManager;\n naming: NamingEngine;\n /**\n * Outputs from sibling stacks pre-fetched by `fetchStackImports`.\n * An output may chain through an import (e.g.\n * `outputs: { region: \"${tamer:import:net.region}\" }`) — strict\n * resolution requires the sibling row to be hydrated already.\n */\n imports?: Record<string, Record<string, string>>;\n /** Same as wrangler / apply `accountId` (for `${tamer:config:stack.account_id}` in outputs). */\n accountId?: string;\n },\n now: () => string = () => new Date().toISOString(),\n): Record<string, CfiStackOutputValue> {\n const outputs = config.outputs;\n if (!outputs || Object.keys(outputs).length === 0) return {};\n const refCtx = {\n config,\n env: ctx.env,\n state: ctx.state,\n naming: ctx.naming,\n tolerant: false,\n imports: ctx.imports,\n accountId: ctx.accountId,\n };\n const resolvedAt = now();\n const out: Record<string, CfiStackOutputValue> = {};\n for (const [name, source] of Object.entries(outputs)) {\n const sourceStr = materializeTamerResolvable(source);\n const value = resolveReferencesInString(\n sourceStr,\n refCtx,\n `outputs.${name}`,\n );\n out[name] = { value, source: sourceStr, resolvedAt };\n }\n return out;\n}\n\n/**\n * One row in the `tamer status` outputs panel. Combines the *declared*\n * source (from `tamer.config.ts`) with the *persisted* value (from state)\n * so operators can see drift between \"what the config says\" and \"what we\n * last resolved\". `value` is `null` when the output is declared but has\n * never been resolved (no `apply` yet), or when a stale persisted entry\n * exists for an output that has since been removed from config.\n */\nexport interface StackOutputRow {\n name: string;\n /** Live source from `tamer.config.ts > outputs[name]`, if still declared. */\n declaredSource: string | undefined;\n /** Persisted resolved literal, if `apply` has run for this output. */\n value: string | null;\n /** Source string at last persist (drifts vs. `declaredSource` after edits). */\n persistedSource: string | undefined;\n /** ISO timestamp of last persist (undefined when never resolved). */\n resolvedAt: string | undefined;\n /**\n * `\"resolved\"` when persisted matches declared source, `\"stale\"` when\n * source has drifted since persist (re-run apply), `\"orphan\"` when\n * persisted but no longer declared, `\"pending\"` when declared but never\n * resolved.\n */\n status: \"resolved\" | \"stale\" | \"orphan\" | \"pending\";\n}\n\n/**\n * Tolerant union of declared + persisted outputs for `tamer status` and the\n * machine-readable `--json` envelope. Never throws.\n */\nexport function buildOutputsView(\n config: CfiConfig,\n state: StateManager,\n): StackOutputRow[] {\n const declared = config.outputs ?? {};\n const persisted = state.getStackOutputs();\n const names = new Set<string>([\n ...Object.keys(declared),\n ...Object.keys(persisted),\n ]);\n const rows: StackOutputRow[] = [];\n for (const name of [...names].sort()) {\n const rawDeclared = declared[name];\n const declaredSource =\n rawDeclared !== undefined ? materializeTamerResolvable(rawDeclared) : undefined;\n const p = persisted[name];\n let status: StackOutputRow[\"status\"];\n if (declaredSource && !p) status = \"pending\";\n else if (!declaredSource && p) status = \"orphan\";\n else if (declaredSource && p && declaredSource !== p.source) status = \"stale\";\n else status = \"resolved\";\n rows.push({\n name,\n declaredSource,\n value: p?.value ?? null,\n persistedSource: p?.source,\n resolvedAt: p?.resolvedAt,\n status,\n });\n }\n return rows;\n}\n\nexport { TamerReferenceError };\n"],"mappings":";;;;;;;;;;;;AAkCA,SAAgB,oBACd,QACA,KAcA,6BAA0B,IAAI,MAAM,EAAC,aAAa,EACb;CACrC,MAAM,UAAU,OAAO;AACvB,KAAI,CAAC,WAAW,OAAO,KAAK,QAAQ,CAAC,WAAW,EAAG,QAAO,EAAE;CAC5D,MAAM,SAAS;EACb;EACA,KAAK,IAAI;EACT,OAAO,IAAI;EACX,QAAQ,IAAI;EACZ,UAAU;EACV,SAAS,IAAI;EACb,WAAW,IAAI;EAChB;CACD,MAAM,aAAa,KAAK;CACxB,MAAMA,MAA2C,EAAE;AACnD,MAAK,MAAM,CAAC,MAAM,WAAW,OAAO,QAAQ,QAAQ,EAAE;EACpD,MAAM,YAAY,2BAA2B,OAAO;AAMpD,MAAI,QAAQ;GAAE,OALA,0BACZ,WACA,QACA,WAAW,OACZ;GACoB,QAAQ;GAAW;GAAY;;AAEtD,QAAO;;;;;;AAkCT,SAAgB,iBACd,QACA,OACkB;CAClB,MAAM,WAAW,OAAO,WAAW,EAAE;CACrC,MAAM,YAAY,MAAM,iBAAiB;CACzC,MAAM,QAAQ,IAAI,IAAY,CAC5B,GAAG,OAAO,KAAK,SAAS,EACxB,GAAG,OAAO,KAAK,UAAU,CAC1B,CAAC;CACF,MAAMC,OAAyB,EAAE;AACjC,MAAK,MAAM,QAAQ,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE;EACpC,MAAM,cAAc,SAAS;EAC7B,MAAM,iBACJ,gBAAgB,SAAY,2BAA2B,YAAY,GAAG;EACxE,MAAM,IAAI,UAAU;EACpB,IAAIC;AACJ,MAAI,kBAAkB,CAAC,EAAG,UAAS;WAC1B,CAAC,kBAAkB,EAAG,UAAS;WAC/B,kBAAkB,KAAK,mBAAmB,EAAE,OAAQ,UAAS;MACjE,UAAS;AACd,OAAK,KAAK;GACR;GACA;GACA,OAAO,GAAG,SAAS;GACnB,iBAAiB,GAAG;GACpB,YAAY,GAAG;GACf;GACD,CAAC;;AAEJ,QAAO"}
1
+ {"version":3,"file":"stackOutputs-DAarU7Q-.mjs","names":["out: Record<string, CfiStackOutputValue>","rows: StackOutputRow[]","status: StackOutputRow[\"status\"]"],"sources":["../src/core/outputs/stackOutputs.ts"],"sourcesContent":["/**\n * Tamer's CloudFormation `Outputs` analogue.\n *\n * `tamer.config.ts > outputs` declares named exports as Tamer reference\n * strings (e.g. `\"${tamer:d1:users.id}\"`). After a successful `apply` the\n * engine resolves every entry against the just-completed state and persists\n * the literal under {@link CfiState.stackOutputs}. Sibling stacks consume\n * them via `${tamer:import:<stackName>.<outputName>}` (added separately).\n *\n * Resolution is **strict**: any unresolved/unknown reference fails the\n * apply (and rolls back when `--rollback-on-failure` is set). Read-only\n * commands like `status` use {@link buildOutputsView} which is tolerant\n * and shows the placeholder verbatim alongside the persisted value.\n */\nimport type {\n CfiConfig,\n CfiStackOutputValue,\n} from \"../../types.js\";\nimport { materializeTamerResolvable } from \"../../dx/normalize.js\";\nimport type { NamingEngine } from \"../naming/NamingEngine.js\";\nimport type { StateManager } from \"../state/StateManager.js\";\nimport {\n resolveReferencesInString,\n TamerReferenceError,\n} from \"../references/references.js\";\n\n/**\n * Resolve every `outputs:` entry against the current state. Throws\n * {@link TamerReferenceError} on the first unresolved reference so a failed\n * apply can roll back instead of silently persisting half-resolved values.\n *\n * Pass an explicit `now` only from tests — production code should let it\n * default to wall-clock so `resolvedAt` reflects the real persist time.\n */\nexport function resolveStackOutputs(\n config: CfiConfig,\n ctx: {\n env: string;\n state: StateManager;\n naming: NamingEngine;\n /**\n * Outputs from sibling stacks pre-fetched by `fetchStackImports`.\n * An output may chain through an import (e.g.\n * `outputs: { region: \"${tamer:import:net.region}\" }`) — strict\n * resolution requires the sibling row to be hydrated already.\n */\n imports?: Record<string, Record<string, string>>;\n /** Same as wrangler / apply `accountId` (for `${tamer:config:stack.account_id}` in outputs). */\n accountId?: string;\n },\n now: () => string = () => new Date().toISOString(),\n): Record<string, CfiStackOutputValue> {\n const outputs = config.outputs;\n if (!outputs || Object.keys(outputs).length === 0) return {};\n const refCtx = {\n config,\n env: ctx.env,\n state: ctx.state,\n naming: ctx.naming,\n tolerant: false,\n imports: ctx.imports,\n accountId: ctx.accountId,\n };\n const resolvedAt = now();\n const out: Record<string, CfiStackOutputValue> = {};\n for (const [name, source] of Object.entries(outputs)) {\n const sourceStr = materializeTamerResolvable(source);\n const value = resolveReferencesInString(\n sourceStr,\n refCtx,\n `outputs.${name}`,\n );\n out[name] = { value, source: sourceStr, resolvedAt };\n }\n return out;\n}\n\n/**\n * One row in the `tamer status` outputs panel. Combines the *declared*\n * source (from `tamer.config.ts`) with the *persisted* value (from state)\n * so operators can see drift between \"what the config says\" and \"what we\n * last resolved\". `value` is `null` when the output is declared but has\n * never been resolved (no `apply` yet), or when a stale persisted entry\n * exists for an output that has since been removed from config.\n */\nexport interface StackOutputRow {\n name: string;\n /** Live source from `tamer.config.ts > outputs[name]`, if still declared. */\n declaredSource: string | undefined;\n /** Persisted resolved literal, if `apply` has run for this output. */\n value: string | null;\n /** Source string at last persist (drifts vs. `declaredSource` after edits). */\n persistedSource: string | undefined;\n /** ISO timestamp of last persist (undefined when never resolved). */\n resolvedAt: string | undefined;\n /**\n * `\"resolved\"` when persisted matches declared source, `\"stale\"` when\n * source has drifted since persist (re-run apply), `\"orphan\"` when\n * persisted but no longer declared, `\"pending\"` when declared but never\n * resolved.\n */\n status: \"resolved\" | \"stale\" | \"orphan\" | \"pending\";\n}\n\n/**\n * Tolerant union of declared + persisted outputs for `tamer status` and the\n * machine-readable `--json` envelope. Never throws.\n */\nexport function buildOutputsView(\n config: CfiConfig,\n state: StateManager,\n): StackOutputRow[] {\n const declared = config.outputs ?? {};\n const persisted = state.getStackOutputs();\n const names = new Set<string>([\n ...Object.keys(declared),\n ...Object.keys(persisted),\n ]);\n const rows: StackOutputRow[] = [];\n for (const name of [...names].sort()) {\n const rawDeclared = declared[name];\n const declaredSource =\n rawDeclared !== undefined ? materializeTamerResolvable(rawDeclared) : undefined;\n const p = persisted[name];\n let status: StackOutputRow[\"status\"];\n if (declaredSource && !p) status = \"pending\";\n else if (!declaredSource && p) status = \"orphan\";\n else if (declaredSource && p && declaredSource !== p.source) status = \"stale\";\n else status = \"resolved\";\n rows.push({\n name,\n declaredSource,\n value: p?.value ?? null,\n persistedSource: p?.source,\n resolvedAt: p?.resolvedAt,\n status,\n });\n }\n return rows;\n}\n\nexport { TamerReferenceError };\n"],"mappings":";;;;;;;;;;;;AAkCA,SAAgB,oBACd,QACA,KAcA,6BAA0B,IAAI,MAAM,EAAC,aAAa,EACb;CACrC,MAAM,UAAU,OAAO;AACvB,KAAI,CAAC,WAAW,OAAO,KAAK,QAAQ,CAAC,WAAW,EAAG,QAAO,EAAE;CAC5D,MAAM,SAAS;EACb;EACA,KAAK,IAAI;EACT,OAAO,IAAI;EACX,QAAQ,IAAI;EACZ,UAAU;EACV,SAAS,IAAI;EACb,WAAW,IAAI;EAChB;CACD,MAAM,aAAa,KAAK;CACxB,MAAMA,MAA2C,EAAE;AACnD,MAAK,MAAM,CAAC,MAAM,WAAW,OAAO,QAAQ,QAAQ,EAAE;EACpD,MAAM,YAAY,2BAA2B,OAAO;AAMpD,MAAI,QAAQ;GAAE,OALA,0BACZ,WACA,QACA,WAAW,OACZ;GACoB,QAAQ;GAAW;GAAY;;AAEtD,QAAO;;;;;;AAkCT,SAAgB,iBACd,QACA,OACkB;CAClB,MAAM,WAAW,OAAO,WAAW,EAAE;CACrC,MAAM,YAAY,MAAM,iBAAiB;CACzC,MAAM,QAAQ,IAAI,IAAY,CAC5B,GAAG,OAAO,KAAK,SAAS,EACxB,GAAG,OAAO,KAAK,UAAU,CAC1B,CAAC;CACF,MAAMC,OAAyB,EAAE;AACjC,MAAK,MAAM,QAAQ,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE;EACpC,MAAM,cAAc,SAAS;EAC7B,MAAM,iBACJ,gBAAgB,SAAY,2BAA2B,YAAY,GAAG;EACxE,MAAM,IAAI,UAAU;EACpB,IAAIC;AACJ,MAAI,kBAAkB,CAAC,EAAG,UAAS;WAC1B,CAAC,kBAAkB,EAAG,UAAS;WAC/B,kBAAkB,KAAK,mBAAmB,EAAE,OAAQ,UAAS;MACjE,UAAS;AACd,OAAK,KAAK;GACR;GACA;GACA,OAAO,GAAG,SAAS;GACnB,iBAAiB,GAAG;GACpB,YAAY,GAAG;GACf;GACD,CAAC;;AAEJ,QAAO"}
@@ -1,10 +1,10 @@
1
1
  import { f as getDispatchNamespaces, m as getLogpushJobs, p as getDnsRecords } from "./normalize-DVSTRZhO.mjs";
2
- import { $ as CFApiClient, N as resolveDeployedWorkerName, _ as fetchStackImports, b as StateManager, et as cloudflareAccountIdFromEnv, h as namingFromConfig, it as loadConfig, j as mergeWorkerConfigForResourcePick, k as stackNameForConfig, nt as getConfigBaseDir, rt as getWorkers, w as tenantStateKey, y as scanConfigForImports, z as effectiveDispatchNamespaceName } from "./tamer.mjs";
3
- import { n as resourceModules } from "./registry-CRgobiU4.mjs";
4
- import "./r2S3EmptyBucket-CDE2lTM8.mjs";
5
- import { r as dnsRecordStateKey, t as dnsRecordAppliesToEnv } from "./dns-records.resolve-CUQz6Ivz.mjs";
6
- import { t as logpushJobStatus } from "./logpush-job-DZG-3nkJ.mjs";
7
- import { t as buildOutputsView } from "./stackOutputs-BMPahRAl.mjs";
2
+ import { $ as cloudflareAccountIdFromEnv, A as mergeWorkerConfigForResourcePick, C as tenantStateKey, M as resolveDeployedWorkerName, O as stackNameForConfig, Q as CFApiClient, R as effectiveDispatchNamespaceName, g as fetchStackImports, m as namingFromConfig, nt as getWorkers, rt as loadConfig, tt as getConfigBaseDir, v as scanConfigForImports, y as StateManager } from "./tamer.mjs";
3
+ import { n as resourceModules } from "./registry-D3heJge_.mjs";
4
+ import "./r2S3EmptyBucket-OKIQdlms.mjs";
5
+ import { r as dnsRecordStateKey, t as dnsRecordAppliesToEnv } from "./dns-records.resolve-CKl_m1wD.mjs";
6
+ import { t as logpushJobStatus } from "./logpush-job-CfBhpy6e.mjs";
7
+ import { t as buildOutputsView } from "./stackOutputs-DAarU7Q-.mjs";
8
8
 
9
9
  //#region src/features/dispatch-namespace/dispatch-namespace.status.ts
10
10
  function dispatchNamespaceStatus(resources, env, state, _naming, config) {
@@ -203,4 +203,4 @@ async function runStatus(options) {
203
203
 
204
204
  //#endregion
205
205
  export { runStatus };
206
- //# sourceMappingURL=status-CQpgTTeG.mjs.map
206
+ //# sourceMappingURL=status-h6i0BF9r.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"status-CQpgTTeG.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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"}
1
+ {"version":3,"file":"status-h6i0BF9r.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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"}
@@ -1,9 +1,9 @@
1
1
  import { f as getDispatchNamespaces, m as getLogpushJobs, p as getDnsRecords } from "./normalize-DVSTRZhO.mjs";
2
- import { $ as CFApiClient, _ as fetchStackImports, b as StateManager, et as cloudflareAccountIdFromEnv, h as namingFromConfig, it as loadConfig, j as mergeWorkerConfigForResourcePick, k as stackNameForConfig, nt as getConfigBaseDir, rt as getWorkers } from "./tamer.mjs";
3
- import { n as resourceModules } from "./registry-CRgobiU4.mjs";
4
- import { n as dispatchNamespaceSync, t as dnsRecordSync } from "./dns-records.sync-BnOga2LS.mjs";
5
- import { i as logpushJobSync } from "./logpush-job-DZG-3nkJ.mjs";
6
- import { i as workerRouteSync } from "./worker-route-BPDAwUL0.mjs";
2
+ import { $ as cloudflareAccountIdFromEnv, A as mergeWorkerConfigForResourcePick, O as stackNameForConfig, Q as CFApiClient, g as fetchStackImports, m as namingFromConfig, nt as getWorkers, rt as loadConfig, tt as getConfigBaseDir, y as StateManager } from "./tamer.mjs";
3
+ import { n as resourceModules } from "./registry-D3heJge_.mjs";
4
+ import { n as dispatchNamespaceSync, t as dnsRecordSync } from "./dns-records.sync-CgZrG_ok.mjs";
5
+ import { i as logpushJobSync } from "./logpush-job-CfBhpy6e.mjs";
6
+ import { i as workerRouteSync } from "./worker-route-u4qd5ddC.mjs";
7
7
 
8
8
  //#region src/cli/commands/sync.ts
9
9
  async function runSync(options) {
@@ -84,4 +84,4 @@ async function runSync(options) {
84
84
 
85
85
  //#endregion
86
86
  export { runSync as t };
87
- //# sourceMappingURL=sync-DqMMQ7mQ.mjs.map
87
+ //# sourceMappingURL=sync-DEflZagk.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"sync-DqMMQ7mQ.mjs","names":[],"sources":["../src/cli/commands/sync.ts"],"sourcesContent":["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 { dispatchNamespaceSync } from \"../../features/dispatch-namespace/index.js\";\nimport { dnsRecordSync } from \"../../features/dns-records/index.js\";\nimport { getDispatchNamespaces, getDnsRecords, getLogpushJobs } from \"../../types.js\";\nimport { logpushJobSync } from \"../../features/logpush-job/index.js\";\nimport { workerRouteSync } from \"../../features/worker-route/index.js\";\nimport { resourceModules } from \"../../core/registry/registry.js\";\nimport { fetchStackImports } from \"../../core/imports/fetchStackImports.js\";\nimport { mergeWorkerConfigForResourcePick } from \"../../core/config/resolver.js\";\n\nexport async function runSync(options: {\n env?: string;\n configPath?: 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\n const api = new CFApiClient(accountId);\n const naming = namingFromConfig(config);\n const state = new StateManager(\n config.tenant.id,\n env,\n stackNameForConfig(config),\n );\n await state.hydrate(api);\n // Tolerant pre-fetch: sync runs against existing cloud state, so we\n // pass real import values into worker-route resolution to avoid\n // matching against `${tamer:import:…}` placeholders.\n const imports = await fetchStackImports(api, config, env).catch((err) => {\n const msg = err instanceof Error ? err.message : String(err);\n console.warn(`[sync] skipping cross-stack imports: ${msg}`);\n return {} as Record<string, Record<string, string>>;\n });\n\n async function safeList<T>(\n label: string,\n fn: () => Promise<T[]>,\n ): Promise<T[]> {\n try {\n return await fn();\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n console.warn(`[sync] skipping ${label}: ${msg}`);\n return [];\n }\n }\n\n const lists = await Promise.all(\n resourceModules.map((m) =>\n safeList(`${m.label} list`, () => m.fetchAll(api)),\n ),\n );\n\n if (getDispatchNamespaces(config).length > 0) {\n try {\n await dispatchNamespaceSync(\n getDispatchNamespaces(config),\n config.tenant,\n env,\n api,\n state,\n );\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n console.warn(`[sync] skipping dispatch namespaces: ${msg}`);\n }\n }\n\n if (getDnsRecords(config).length > 0) {\n try {\n await dnsRecordSync(\n getDnsRecords(config),\n config.tenant,\n env,\n api,\n state,\n );\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n console.warn(`[sync] skipping dns records: ${msg}`);\n }\n }\n\n if (getLogpushJobs(config).length > 0 && env !== \"local\") {\n try {\n await logpushJobSync(\n getLogpushJobs(config),\n config.tenant,\n env,\n api,\n state,\n );\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n console.warn(`[sync] skipping logpush jobs: ${msg}`);\n }\n }\n\n const workers = await getWorkers(config, baseDir);\n for (const [workerKey, workerConfig] of workers) {\n const mergedWorker = mergeWorkerConfigForResourcePick(\n config,\n workerKey,\n workerConfig,\n env,\n accountId,\n naming,\n state,\n { referencesMode: \"tolerant\", imports },\n );\n resourceModules.forEach((mod, i) => {\n const resources = mod.pickResources(mergedWorker);\n if (resources.length === 0) return;\n mod.sync({\n resources,\n all: lists[i],\n tenant: config.tenant,\n env,\n api,\n state,\n naming,\n config,\n baseDir,\n });\n });\n }\n\n try {\n await workerRouteSync(env, config, baseDir, accountId, naming, state, api, {\n imports,\n });\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n console.warn(`[sync] skipping worker routes: ${msg}`);\n }\n\n await state.persist(api);\n console.log(`Synced state for env: ${env}`);\n}\n"],"mappings":";;;;;;;;AAeA,eAAsB,QAAQ,SAGZ;CAChB,MAAM,MAAM,QAAQ,OAAO;CAC3B,MAAM,aAAa,QAAQ;CAE3B,MAAM,SAAS,MAAM,WAAW,YAAY,EAAE,KAAK,CAAC;CACpD,MAAM,UAAU,kBAAkB;CAClC,MAAM,YACJ,OAAO,cAAc,4BAA4B;AACnD,KAAI,CAAC,UACH,OAAM,IAAI,MACR,iEACD;CAGH,MAAM,MAAM,IAAI,YAAY,UAAU;CACtC,MAAM,SAAS,iBAAiB,OAAO;CACvC,MAAM,QAAQ,IAAI,aAChB,OAAO,OAAO,IACd,KACA,mBAAmB,OAAO,CAC3B;AACD,OAAM,MAAM,QAAQ,IAAI;CAIxB,MAAM,UAAU,MAAM,kBAAkB,KAAK,QAAQ,IAAI,CAAC,OAAO,QAAQ;EACvE,MAAM,MAAM,eAAe,QAAQ,IAAI,UAAU,OAAO,IAAI;AAC5D,UAAQ,KAAK,wCAAwC,MAAM;AAC3D,SAAO,EAAE;GACT;CAEF,eAAe,SACb,OACA,IACc;AACd,MAAI;AACF,UAAO,MAAM,IAAI;WACV,KAAK;GACZ,MAAM,MAAM,eAAe,QAAQ,IAAI,UAAU,OAAO,IAAI;AAC5D,WAAQ,KAAK,mBAAmB,MAAM,IAAI,MAAM;AAChD,UAAO,EAAE;;;CAIb,MAAM,QAAQ,MAAM,QAAQ,IAC1B,gBAAgB,KAAK,MACnB,SAAS,GAAG,EAAE,MAAM,cAAc,EAAE,SAAS,IAAI,CAAC,CACnD,CACF;AAED,KAAI,sBAAsB,OAAO,CAAC,SAAS,EACzC,KAAI;AACF,QAAM,sBACJ,sBAAsB,OAAO,EAC7B,OAAO,QACP,KACA,KACA,MACD;UACM,KAAK;EACZ,MAAM,MAAM,eAAe,QAAQ,IAAI,UAAU,OAAO,IAAI;AAC5D,UAAQ,KAAK,wCAAwC,MAAM;;AAI/D,KAAI,cAAc,OAAO,CAAC,SAAS,EACjC,KAAI;AACF,QAAM,cACJ,cAAc,OAAO,EACrB,OAAO,QACP,KACA,KACA,MACD;UACM,KAAK;EACZ,MAAM,MAAM,eAAe,QAAQ,IAAI,UAAU,OAAO,IAAI;AAC5D,UAAQ,KAAK,gCAAgC,MAAM;;AAIvD,KAAI,eAAe,OAAO,CAAC,SAAS,KAAK,QAAQ,QAC/C,KAAI;AACF,QAAM,eACJ,eAAe,OAAO,EACtB,OAAO,QACP,KACA,KACA,MACD;UACM,KAAK;EACZ,MAAM,MAAM,eAAe,QAAQ,IAAI,UAAU,OAAO,IAAI;AAC5D,UAAQ,KAAK,iCAAiC,MAAM;;CAIxD,MAAM,UAAU,MAAM,WAAW,QAAQ,QAAQ;AACjD,MAAK,MAAM,CAAC,WAAW,iBAAiB,SAAS;EAC/C,MAAM,eAAe,iCACnB,QACA,WACA,cACA,KACA,WACA,QACA,OACA;GAAE,gBAAgB;GAAY;GAAS,CACxC;AACD,kBAAgB,SAAS,KAAK,MAAM;GAClC,MAAM,YAAY,IAAI,cAAc,aAAa;AACjD,OAAI,UAAU,WAAW,EAAG;AAC5B,OAAI,KAAK;IACP;IACA,KAAK,MAAM;IACX,QAAQ,OAAO;IACf;IACA;IACA;IACA;IACA;IACA;IACD,CAAC;IACF;;AAGJ,KAAI;AACF,QAAM,gBAAgB,KAAK,QAAQ,SAAS,WAAW,QAAQ,OAAO,KAAK,EACzE,SACD,CAAC;UACK,KAAK;EACZ,MAAM,MAAM,eAAe,QAAQ,IAAI,UAAU,OAAO,IAAI;AAC5D,UAAQ,KAAK,kCAAkC,MAAM;;AAGvD,OAAM,MAAM,QAAQ,IAAI;AACxB,SAAQ,IAAI,yBAAyB,MAAM"}
1
+ {"version":3,"file":"sync-DEflZagk.mjs","names":[],"sources":["../src/cli/commands/sync.ts"],"sourcesContent":["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 { dispatchNamespaceSync } from \"../../features/dispatch-namespace/index.js\";\nimport { dnsRecordSync } from \"../../features/dns-records/index.js\";\nimport { getDispatchNamespaces, getDnsRecords, getLogpushJobs } from \"../../types.js\";\nimport { logpushJobSync } from \"../../features/logpush-job/index.js\";\nimport { workerRouteSync } from \"../../features/worker-route/index.js\";\nimport { resourceModules } from \"../../core/registry/registry.js\";\nimport { fetchStackImports } from \"../../core/imports/fetchStackImports.js\";\nimport { mergeWorkerConfigForResourcePick } from \"../../core/config/resolver.js\";\n\nexport async function runSync(options: {\n env?: string;\n configPath?: 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\n const api = new CFApiClient(accountId);\n const naming = namingFromConfig(config);\n const state = new StateManager(\n config.tenant.id,\n env,\n stackNameForConfig(config),\n );\n await state.hydrate(api);\n // Tolerant pre-fetch: sync runs against existing cloud state, so we\n // pass real import values into worker-route resolution to avoid\n // matching against `${tamer:import:…}` placeholders.\n const imports = await fetchStackImports(api, config, env).catch((err) => {\n const msg = err instanceof Error ? err.message : String(err);\n console.warn(`[sync] skipping cross-stack imports: ${msg}`);\n return {} as Record<string, Record<string, string>>;\n });\n\n async function safeList<T>(\n label: string,\n fn: () => Promise<T[]>,\n ): Promise<T[]> {\n try {\n return await fn();\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n console.warn(`[sync] skipping ${label}: ${msg}`);\n return [];\n }\n }\n\n const lists = await Promise.all(\n resourceModules.map((m) =>\n safeList(`${m.label} list`, () => m.fetchAll(api)),\n ),\n );\n\n if (getDispatchNamespaces(config).length > 0) {\n try {\n await dispatchNamespaceSync(\n getDispatchNamespaces(config),\n config.tenant,\n env,\n api,\n state,\n );\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n console.warn(`[sync] skipping dispatch namespaces: ${msg}`);\n }\n }\n\n if (getDnsRecords(config).length > 0) {\n try {\n await dnsRecordSync(\n getDnsRecords(config),\n config.tenant,\n env,\n api,\n state,\n );\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n console.warn(`[sync] skipping dns records: ${msg}`);\n }\n }\n\n if (getLogpushJobs(config).length > 0 && env !== \"local\") {\n try {\n await logpushJobSync(\n getLogpushJobs(config),\n config.tenant,\n env,\n api,\n state,\n );\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n console.warn(`[sync] skipping logpush jobs: ${msg}`);\n }\n }\n\n const workers = await getWorkers(config, baseDir);\n for (const [workerKey, workerConfig] of workers) {\n const mergedWorker = mergeWorkerConfigForResourcePick(\n config,\n workerKey,\n workerConfig,\n env,\n accountId,\n naming,\n state,\n { referencesMode: \"tolerant\", imports },\n );\n resourceModules.forEach((mod, i) => {\n const resources = mod.pickResources(mergedWorker);\n if (resources.length === 0) return;\n mod.sync({\n resources,\n all: lists[i],\n tenant: config.tenant,\n env,\n api,\n state,\n naming,\n config,\n baseDir,\n });\n });\n }\n\n try {\n await workerRouteSync(env, config, baseDir, accountId, naming, state, api, {\n imports,\n });\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n console.warn(`[sync] skipping worker routes: ${msg}`);\n }\n\n await state.persist(api);\n console.log(`Synced state for env: ${env}`);\n}\n"],"mappings":";;;;;;;;AAeA,eAAsB,QAAQ,SAGZ;CAChB,MAAM,MAAM,QAAQ,OAAO;CAC3B,MAAM,aAAa,QAAQ;CAE3B,MAAM,SAAS,MAAM,WAAW,YAAY,EAAE,KAAK,CAAC;CACpD,MAAM,UAAU,kBAAkB;CAClC,MAAM,YACJ,OAAO,cAAc,4BAA4B;AACnD,KAAI,CAAC,UACH,OAAM,IAAI,MACR,iEACD;CAGH,MAAM,MAAM,IAAI,YAAY,UAAU;CACtC,MAAM,SAAS,iBAAiB,OAAO;CACvC,MAAM,QAAQ,IAAI,aAChB,OAAO,OAAO,IACd,KACA,mBAAmB,OAAO,CAC3B;AACD,OAAM,MAAM,QAAQ,IAAI;CAIxB,MAAM,UAAU,MAAM,kBAAkB,KAAK,QAAQ,IAAI,CAAC,OAAO,QAAQ;EACvE,MAAM,MAAM,eAAe,QAAQ,IAAI,UAAU,OAAO,IAAI;AAC5D,UAAQ,KAAK,wCAAwC,MAAM;AAC3D,SAAO,EAAE;GACT;CAEF,eAAe,SACb,OACA,IACc;AACd,MAAI;AACF,UAAO,MAAM,IAAI;WACV,KAAK;GACZ,MAAM,MAAM,eAAe,QAAQ,IAAI,UAAU,OAAO,IAAI;AAC5D,WAAQ,KAAK,mBAAmB,MAAM,IAAI,MAAM;AAChD,UAAO,EAAE;;;CAIb,MAAM,QAAQ,MAAM,QAAQ,IAC1B,gBAAgB,KAAK,MACnB,SAAS,GAAG,EAAE,MAAM,cAAc,EAAE,SAAS,IAAI,CAAC,CACnD,CACF;AAED,KAAI,sBAAsB,OAAO,CAAC,SAAS,EACzC,KAAI;AACF,QAAM,sBACJ,sBAAsB,OAAO,EAC7B,OAAO,QACP,KACA,KACA,MACD;UACM,KAAK;EACZ,MAAM,MAAM,eAAe,QAAQ,IAAI,UAAU,OAAO,IAAI;AAC5D,UAAQ,KAAK,wCAAwC,MAAM;;AAI/D,KAAI,cAAc,OAAO,CAAC,SAAS,EACjC,KAAI;AACF,QAAM,cACJ,cAAc,OAAO,EACrB,OAAO,QACP,KACA,KACA,MACD;UACM,KAAK;EACZ,MAAM,MAAM,eAAe,QAAQ,IAAI,UAAU,OAAO,IAAI;AAC5D,UAAQ,KAAK,gCAAgC,MAAM;;AAIvD,KAAI,eAAe,OAAO,CAAC,SAAS,KAAK,QAAQ,QAC/C,KAAI;AACF,QAAM,eACJ,eAAe,OAAO,EACtB,OAAO,QACP,KACA,KACA,MACD;UACM,KAAK;EACZ,MAAM,MAAM,eAAe,QAAQ,IAAI,UAAU,OAAO,IAAI;AAC5D,UAAQ,KAAK,iCAAiC,MAAM;;CAIxD,MAAM,UAAU,MAAM,WAAW,QAAQ,QAAQ;AACjD,MAAK,MAAM,CAAC,WAAW,iBAAiB,SAAS;EAC/C,MAAM,eAAe,iCACnB,QACA,WACA,cACA,KACA,WACA,QACA,OACA;GAAE,gBAAgB;GAAY;GAAS,CACxC;AACD,kBAAgB,SAAS,KAAK,MAAM;GAClC,MAAM,YAAY,IAAI,cAAc,aAAa;AACjD,OAAI,UAAU,WAAW,EAAG;AAC5B,OAAI,KAAK;IACP;IACA,KAAK,MAAM;IACX,QAAQ,OAAO;IACf;IACA;IACA;IACA;IACA;IACA;IACD,CAAC;IACF;;AAGJ,KAAI;AACF,QAAM,gBAAgB,KAAK,QAAQ,SAAS,WAAW,QAAQ,OAAO,KAAK,EACzE,SACD,CAAC;UACK,KAAK;EACZ,MAAM,MAAM,eAAe,QAAQ,IAAI,UAAU,OAAO,IAAI;AAC5D,UAAQ,KAAK,kCAAkC,MAAM;;AAGvD,OAAM,MAAM,QAAQ,IAAI;AACxB,SAAQ,IAAI,yBAAyB,MAAM"}
@@ -0,0 +1,7 @@
1
+ import "./registry-D3heJge_.mjs";
2
+ import "./r2S3EmptyBucket-OKIQdlms.mjs";
3
+ import "./logpush-job-CfBhpy6e.mjs";
4
+ import "./worker-route-u4qd5ddC.mjs";
5
+ import { t as runSync } from "./sync-DEflZagk.mjs";
6
+
7
+ export { runSync };
package/dist/tamer.mjs CHANGED
@@ -7967,6 +7967,7 @@ function bytesToHex(bytes) {
7967
7967
  */
7968
7968
  async function readSecretValueFromStdin() {
7969
7969
  if (process.stdin.isTTY) throw new Error("secrets set: pipe the value on stdin (e.g. echo -n 'value' | tamer secrets set NAME --env dev); interactive entry is not supported yet");
7970
+ console.log("secrets set: reading value from stdin…");
7970
7971
  const chunks = [];
7971
7972
  for await (const chunk of process.stdin) chunks.push(Buffer.from(chunk));
7972
7973
  let value = Buffer.concat(chunks).toString("utf8");
@@ -8965,14 +8966,14 @@ async function main() {
8965
8966
  try {
8966
8967
  switch (command) {
8967
8968
  case "bootstrap":
8968
- await import("./bootstrap-D663FPHF.mjs").then((m) => m.runBootstrap(parseBootstrapArgs(rest)));
8969
+ await import("./bootstrap-5Y32Z1bF.mjs").then((m) => m.runBootstrap(parseBootstrapArgs(rest)));
8969
8970
  break;
8970
8971
  case "sync":
8971
- await import("./sync-Blz5emYO.mjs").then((m) => m.runSync(parseSyncArgs(rest)));
8972
+ await import("./sync-DWsBVffD.mjs").then((m) => m.runSync(parseSyncArgs(rest)));
8972
8973
  break;
8973
8974
  case "apply": {
8974
8975
  const a = parseApplyArgs(rest);
8975
- await import("./apply-J081Hfqc.mjs").then((m) => m.runApply({
8976
+ await import("./apply--ZUmkGmn.mjs").then((m) => m.runApply({
8976
8977
  env: a.env,
8977
8978
  addShard: a.addShard,
8978
8979
  configPath: a.configPath,
@@ -8984,11 +8985,11 @@ async function main() {
8984
8985
  break;
8985
8986
  }
8986
8987
  case "dev":
8987
- await import("./dev-zQRvUhdd.mjs").then((m) => m.runDev(parseDevArgs(rest)));
8988
+ await import("./dev-BicIlxwR.mjs").then((m) => m.runDev(parseDevArgs(rest)));
8988
8989
  break;
8989
8990
  case "deploy": {
8990
8991
  const d = parseDeployArgs(rest);
8991
- await import("./deploy-N8cVT5M9.mjs").then((m) => m.runDeploy({
8992
+ await import("./deploy-Don2YRuA.mjs").then((m) => m.runDeploy({
8992
8993
  worker: d.worker,
8993
8994
  env: d.env,
8994
8995
  configPath: d.configPath,
@@ -8997,23 +8998,23 @@ async function main() {
8997
8998
  break;
8998
8999
  }
8999
9000
  case "migrate":
9000
- await import("./migrate-v1UQCzNi.mjs").then((m) => m.runMigrate(parseMigrateArgs(rest)));
9001
+ await import("./migrate-y4tazUUK.mjs").then((m) => m.runMigrate(parseMigrateArgs(rest)));
9001
9002
  break;
9002
9003
  case "types":
9003
- await import("./types-BCTgIotG.mjs").then((m) => m.runTypes(parseTypesArgs(rest)));
9004
+ await import("./types-ChGaMTT3.mjs").then((m) => m.runTypes(parseTypesArgs(rest)));
9004
9005
  break;
9005
9006
  case "status":
9006
- await import("./status-CQpgTTeG.mjs").then((m) => m.runStatus(parseStatusArgs(rest)));
9007
+ await import("./status-h6i0BF9r.mjs").then((m) => m.runStatus(parseStatusArgs(rest)));
9007
9008
  break;
9008
9009
  case "events":
9009
- await import("./events-C86vo1gV.mjs").then((m) => m.runEvents(parseEventsArgs(rest)));
9010
+ await import("./events-tGFCV-57.mjs").then((m) => m.runEvents(parseEventsArgs(rest)));
9010
9011
  break;
9011
9012
  case "drift":
9012
- exitStatus = await import("./drift-RsT8UGQw.mjs").then((m) => m.runDrift(parseDriftArgs(rest)));
9013
+ exitStatus = await import("./drift-CjNvtmAK.mjs").then((m) => m.runDrift(parseDriftArgs(rest)));
9013
9014
  break;
9014
9015
  case "plan": {
9015
9016
  const p = parsePlanArgs(rest);
9016
- exitStatus = await import("./plan-Dp2aTzEU.mjs").then((m) => m.runPlan({
9017
+ exitStatus = await import("./plan-WLsyswyB.mjs").then((m) => m.runPlan({
9017
9018
  env: p.env,
9018
9019
  configPath: p.configPath,
9019
9020
  json: p.json,
@@ -9025,14 +9026,14 @@ async function main() {
9025
9026
  break;
9026
9027
  }
9027
9028
  case "import":
9028
- await import("./import-QJc0fI1h.mjs").then((m) => m.runImport(parseImportArgs(rest)));
9029
+ await import("./import-DbHvqNRp.mjs").then((m) => m.runImport(parseImportArgs(rest)));
9029
9030
  break;
9030
9031
  case "doctor":
9031
- exitStatus = await import("./doctor-yTe9cUO5.mjs").then((m) => m.runDoctor(parseDoctorArgs(rest)));
9032
+ exitStatus = await import("./doctor-ClV1tg9D.mjs").then((m) => m.runDoctor(parseDoctorArgs(rest)));
9032
9033
  break;
9033
9034
  case "destroy": {
9034
9035
  const d = parseDestroyArgs(rest);
9035
- await import("./destroy-kkOR_ZBj.mjs").then((m) => m.runDestroy({
9036
+ await import("./destroy-DgSIeg8b.mjs").then((m) => m.runDestroy({
9036
9037
  env: d.env,
9037
9038
  force: d.force,
9038
9039
  skipWorkers: d.skipWorkers,
@@ -9047,12 +9048,12 @@ async function main() {
9047
9048
  case "wfp": {
9048
9049
  const [sub, ...wfpRest] = rest;
9049
9050
  if (sub === "put") {
9050
- const { parseWfpPutArgs, runWfpPut } = await import("./wfp-put-oYvLiM_c.mjs");
9051
+ const { parseWfpPutArgs, runWfpPut } = await import("./wfp-put-ZLt3oVZo.mjs");
9051
9052
  await runWfpPut(parseWfpPutArgs(wfpRest));
9052
9053
  break;
9053
9054
  }
9054
9055
  if (sub === "delete") {
9055
- const { parseWfpDeleteArgs, runWfpDelete } = await import("./wfp-delete-BblKos51.mjs");
9056
+ const { parseWfpDeleteArgs, runWfpDelete } = await import("./wfp-delete-Bt00-azB.mjs");
9056
9057
  await runWfpDelete(parseWfpDeleteArgs(wfpRest));
9057
9058
  break;
9058
9059
  }
@@ -9060,7 +9061,7 @@ async function main() {
9060
9061
  const tenantSub = wfpRest[0];
9061
9062
  const tenantRest = wfpRest.slice(1);
9062
9063
  if (tenantSub === "list") {
9063
- await import("./tenant-2XTWe9j0.mjs").then((m) => m.runTenantList({
9064
+ await import("./tenant-BH_JoT9H.mjs").then((m) => m.runTenantList({
9064
9065
  env: parseStringFlag(wfpRest, "--env"),
9065
9066
  configPath: parseStringFlag(wfpRest, "--config"),
9066
9067
  json: wfpRest.includes("--json")
@@ -9068,7 +9069,7 @@ async function main() {
9068
9069
  break;
9069
9070
  }
9070
9071
  if (tenantSub === "status") {
9071
- await import("./tenant-2XTWe9j0.mjs").then((m) => m.runTenantStatus({
9072
+ await import("./tenant-BH_JoT9H.mjs").then((m) => m.runTenantStatus({
9072
9073
  env: parseStringFlag(wfpRest, "--env"),
9073
9074
  product: parseStringFlag(wfpRest, "--product") ?? "",
9074
9075
  workspace: parseStringFlag(wfpRest, "--workspace") ?? "",
@@ -9077,15 +9078,15 @@ async function main() {
9077
9078
  break;
9078
9079
  }
9079
9080
  if (tenantSub === "provision") {
9080
- await import("./provision-tenant-DEscl-jo.mjs").then((m) => m.runProvisionTenant(parseProvisionTenantArgs(tenantRest)));
9081
+ await import("./provision-tenant-wGPK8MRJ.mjs").then((m) => m.runProvisionTenant(parseProvisionTenantArgs(tenantRest)));
9081
9082
  break;
9082
9083
  }
9083
9084
  if (tenantSub === "destroy") {
9084
- await import("./destroy-tenant-DdObj9pd.mjs").then((m) => m.runDestroyTenant(parseDestroyTenantArgs(tenantRest)));
9085
+ await import("./destroy-tenant-BKnB1Edp.mjs").then((m) => m.runDestroyTenant(parseDestroyTenantArgs(tenantRest)));
9085
9086
  break;
9086
9087
  }
9087
9088
  if (tenantSub === "migrate") {
9088
- await import("./tenant-migrate-B-n4ppSk.mjs").then((m) => m.runTenantMigrate({
9089
+ await import("./tenant-migrate-C8OXJtYf.mjs").then((m) => m.runTenantMigrate({
9089
9090
  env: parseStringFlag(wfpRest, "--env"),
9090
9091
  product: parseStringFlag(wfpRest, "--product") ?? "",
9091
9092
  workspace: parseStringFlag(wfpRest, "--workspace") ?? "",
@@ -9100,14 +9101,14 @@ async function main() {
9100
9101
  process.exit(1);
9101
9102
  }
9102
9103
  case "secrets":
9103
- exitStatus = await import("./secrets-DVNZwGUS.mjs").then((m) => m.runSecrets(rest));
9104
+ exitStatus = await import("./secrets-CUBA2cK4.mjs").then((m) => m.runSecrets(rest));
9104
9105
  break;
9105
9106
  case "env":
9106
- if (rest[0] === "list") await import("./env-list-D-wnLl8W.mjs").then((m) => m.runEnvList({
9107
+ if (rest[0] === "list") await import("./env-list-B1c0zuhI.mjs").then((m) => m.runEnvList({
9107
9108
  configPath: parseStringFlag(rest, "--config"),
9108
9109
  json: rest.includes("--json")
9109
9110
  }));
9110
- else if (rest[0] === "gc") await import("./env-gc-DrXu7DlG.mjs").then((m) => m.runEnvGc({
9111
+ else if (rest[0] === "gc") await import("./env-gc-DcOtNJkG.mjs").then((m) => m.runEnvGc({
9111
9112
  maxAge: parseStringFlag(rest, "--max-age") ?? "72h",
9112
9113
  force: rest.includes("--force"),
9113
9114
  dryRun: rest.includes("--dry-run"),
@@ -9210,5 +9211,5 @@ Environment variables (same as Wrangler):
9210
9211
  main();
9211
9212
 
9212
9213
  //#endregion
9213
- export { CFApiClient as $, buildIntraStackScriptNameMap as A, isEphemeralEnv as B, tenantShardDatabaseName as C, ensureTamerStateDatabase as D, deleteEnvStateRows as E, rewriteIntraStackServiceTargets as F, readMasterKeyFromEnv as G, generateMasterKey as H, resolveReferencesInString as I, deleteEnvSecretRows as J, SECRET_HISTORY_CAP as K, assertSafeWranglerOutFile as L, mergedWorkerConfigForEnv as M, resolveDeployedWorkerName as N, listEnvRows as O, resolveWorkerConfig as P, tamerSecretsDatabaseName as Q, wranglerConfigCliArgs as R, tenantDispatchScriptName as S, createEmptyCfiState as T, masterKeyEnvVarName as U, MASTER_KEY_BYTE_LENGTH as V, parseMasterKey as W, findTamerSecretsDatabaseUuid as X, ensureTamerSecretsDatabase as Y, secretRowKey as Z, fetchStackImports as _, reconcileSecrets as a, StateManager as b, vaultReaderFromMap as c, decryptSecretValue as d, cloudflareAccountIdFromEnv as et, encryptSecretValue as f, requiredSecretsForWorker as g, namingFromConfig as h, pushSecretsForDeploy as i, loadConfig as it, mergeWorkerConfigForResourcePick as j, stackNameForConfig as k, secretValueFingerprint as l, SecretsVault as m, parseSecretsArgs as n, getConfigBaseDir as nt, secretsDrift as o, createDeploySecretsResources as p, copyEnvSecretRows as q, runSecrets as r, getWorkers as rt, secretsPlanItems as s, SECRETS_USAGE as t, cloudflareApiTokenFromEnv as tt, SecretsCryptoError as u, importedStackNames as v, tenantStateKey as w, parseTenantShardRoles as x, scanConfigForImports as y, effectiveDispatchNamespaceName as z };
9214
+ export { cloudflareAccountIdFromEnv as $, mergeWorkerConfigForResourcePick as A, MASTER_KEY_BYTE_LENGTH as B, tenantStateKey as C, listEnvRows as D, ensureTamerStateDatabase as E, resolveReferencesInString as F, SECRET_HISTORY_CAP as G, masterKeyEnvVarName as H, assertSafeWranglerOutFile as I, ensureTamerSecretsDatabase as J, copyEnvSecretRows as K, wranglerConfigCliArgs as L, resolveDeployedWorkerName as M, resolveWorkerConfig as N, stackNameForConfig as O, rewriteIntraStackServiceTargets as P, CFApiClient as Q, effectiveDispatchNamespaceName as R, tenantShardDatabaseName as S, deleteEnvStateRows as T, parseMasterKey as U, generateMasterKey as V, readMasterKeyFromEnv as W, secretRowKey as X, findTamerSecretsDatabaseUuid as Y, tamerSecretsDatabaseName as Z, importedStackNames as _, reconcileSecrets as a, parseTenantShardRoles as b, vaultReaderFromMap as c, encryptSecretValue as d, cloudflareApiTokenFromEnv as et, createDeploySecretsResources as f, fetchStackImports as g, requiredSecretsForWorker as h, pushSecretsForDeploy as i, mergedWorkerConfigForEnv as j, buildIntraStackScriptNameMap as k, SecretsCryptoError as l, namingFromConfig as m, parseSecretsArgs as n, getWorkers as nt, secretsDrift as o, SecretsVault as p, deleteEnvSecretRows as q, runSecrets as r, loadConfig as rt, secretsPlanItems as s, SECRETS_USAGE as t, getConfigBaseDir as tt, decryptSecretValue as u, scanConfigForImports as v, createEmptyCfiState as w, tenantDispatchScriptName as x, StateManager as y, isEphemeralEnv as z };
9214
9215
  //# sourceMappingURL=tamer.mjs.map