@dragonmastery/tamer 0.34.1 → 0.35.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.
- package/dist/{apply-BsVQ9cbK.mjs → apply-Cz1lxAOp.mjs} +11 -11
- package/dist/{apply-BsVQ9cbK.mjs.map → apply-Cz1lxAOp.mjs.map} +1 -1
- package/dist/{applyTarget-BJlVrED9.mjs → applyTarget-BI6QAVwA.mjs} +2 -2
- package/dist/{applyTarget-BJlVrED9.mjs.map → applyTarget-BI6QAVwA.mjs.map} +1 -1
- package/dist/bootstrap-CsL4IT9Z.mjs +34 -0
- package/dist/bootstrap-CsL4IT9Z.mjs.map +1 -0
- package/dist/{cloudflareSnapshot-CMbPQIsN.mjs → cloudflareSnapshot-CpNFH4zd.mjs} +4 -4
- package/dist/{cloudflareSnapshot-CMbPQIsN.mjs.map → cloudflareSnapshot-CpNFH4zd.mjs.map} +1 -1
- package/dist/{deploy-dNygCucr.mjs → deploy-D2tQrtN9.mjs} +7 -7
- package/dist/{deploy-dNygCucr.mjs.map → deploy-D2tQrtN9.mjs.map} +1 -1
- package/dist/{destroy-C0cKkpWe.mjs → destroy-CEv14T0X.mjs} +18 -12
- package/dist/destroy-CEv14T0X.mjs.map +1 -0
- package/dist/{destroy-tenant-hyEb1gEz.mjs → destroy-tenant-Ugu7Y1EH.mjs} +2 -2
- package/dist/{destroy-tenant-hyEb1gEz.mjs.map → destroy-tenant-Ugu7Y1EH.mjs.map} +1 -1
- package/dist/{dev-Bug5l5OZ.mjs → dev-vGQIP7tD.mjs} +6 -6
- package/dist/{dev-Bug5l5OZ.mjs.map → dev-vGQIP7tD.mjs.map} +1 -1
- package/dist/{dns-records.sync-FyzKl-Ph.mjs → dns-records.sync-PoahWQjY.mjs} +2 -2
- package/dist/{dns-records.sync-FyzKl-Ph.mjs.map → dns-records.sync-PoahWQjY.mjs.map} +1 -1
- package/dist/{doctor-BwuEPYM6.mjs → doctor-BnsOxqnA.mjs} +2 -2
- package/dist/{doctor-BwuEPYM6.mjs.map → doctor-BnsOxqnA.mjs.map} +1 -1
- package/dist/{drift-DENAf1Oe.mjs → drift-C3wIrNyg.mjs} +4 -4
- package/dist/{drift-B5y9LF5X.mjs → drift-C7pgj4Iw.mjs} +5 -5
- package/dist/{drift-B5y9LF5X.mjs.map → drift-C7pgj4Iw.mjs.map} +1 -1
- package/dist/{emit-DTpaIMkn.mjs → emit-vpibELHm.mjs} +3 -3
- package/dist/{emit-DTpaIMkn.mjs.map → emit-vpibELHm.mjs.map} +1 -1
- package/dist/{events-B7Lencm8.mjs → events-yk4J3l0M.mjs} +2 -2
- package/dist/{events-B7Lencm8.mjs.map → events-yk4J3l0M.mjs.map} +1 -1
- package/dist/{generator-ZTEeHlft.mjs → generator-7b97QsuM.mjs} +2 -2
- package/dist/{generator-ZTEeHlft.mjs.map → generator-7b97QsuM.mjs.map} +1 -1
- package/dist/{import-Ciq9MN3v.mjs → import-CZ6509_t.mjs} +3 -3
- package/dist/{import-Ciq9MN3v.mjs.map → import-CZ6509_t.mjs.map} +1 -1
- package/dist/{migrate-DWyUVN1I.mjs → migrate-DDBMzPtR.mjs} +4 -4
- package/dist/{migrate-DWyUVN1I.mjs.map → migrate-DDBMzPtR.mjs.map} +1 -1
- package/dist/{plan-Blxn-yKr.mjs → plan-Dot2VV7R.mjs} +8 -8
- package/dist/{plan-Blxn-yKr.mjs.map → plan-Dot2VV7R.mjs.map} +1 -1
- package/dist/{provision-tenant-BHDWTC2U.mjs → provision-tenant-C2EL79oz.mjs} +6 -5
- package/dist/provision-tenant-C2EL79oz.mjs.map +1 -0
- package/dist/{registry-BlHEOKlN.mjs → registry-D-vo1TTV.mjs} +2 -2
- package/dist/{registry-BlHEOKlN.mjs.map → registry-D-vo1TTV.mjs.map} +1 -1
- package/dist/{stackOutputs-CkpNSng8.mjs → stackOutputs-CuLa76D4.mjs} +2 -2
- package/dist/{stackOutputs-CkpNSng8.mjs.map → stackOutputs-CuLa76D4.mjs.map} +1 -1
- package/dist/{status-PlMHsDzT.mjs → status-_k3a77Fw.mjs} +4 -4
- package/dist/{status-PlMHsDzT.mjs.map → status-_k3a77Fw.mjs.map} +1 -1
- package/dist/{sync-YKZ5HD8v.mjs → sync-C5RjLfgk.mjs} +5 -5
- package/dist/{sync-YKZ5HD8v.mjs.map → sync-C5RjLfgk.mjs.map} +1 -1
- package/dist/tamer.mjs +141 -93
- package/dist/tamer.mjs.map +1 -1
- package/dist/tamerArtifactsR2-7qUbhOLD.mjs +51 -0
- package/dist/tamerArtifactsR2-7qUbhOLD.mjs.map +1 -0
- package/dist/{types-CADr4Kck.mjs → types-CqmFeIBf.mjs} +4 -4
- package/dist/{types-CADr4Kck.mjs.map → types-CqmFeIBf.mjs.map} +1 -1
- package/dist/{verifyPlanFile-BBAwWzUo.mjs → verifyPlanFile-DSO-yS64.mjs} +2 -2
- package/dist/{verifyPlanFile-BBAwWzUo.mjs.map → verifyPlanFile-DSO-yS64.mjs.map} +1 -1
- package/dist/{wfp-delete-CQc9tveU.mjs → wfp-delete-C-1pIY3Z.mjs} +2 -2
- package/dist/{wfp-delete-CQc9tveU.mjs.map → wfp-delete-C-1pIY3Z.mjs.map} +1 -1
- package/dist/{wfp-put-CVw8cloM.mjs → wfp-put-D0tDs0J5.mjs} +2 -2
- package/dist/{wfp-put-CVw8cloM.mjs.map → wfp-put-D0tDs0J5.mjs.map} +1 -1
- package/dist/{worker-route-CqBDvjgo.mjs → worker-route-RexL6xCk.mjs} +2 -2
- package/dist/{worker-route-CqBDvjgo.mjs.map → worker-route-RexL6xCk.mjs.map} +1 -1
- package/dist/{workers-y9RTOzbC.mjs → workers-CS0tlbdk.mjs} +2 -2
- package/dist/{workers-y9RTOzbC.mjs.map → workers-CS0tlbdk.mjs.map} +1 -1
- package/package.json +6 -2
- package/dist/bootstrap-CV6OT-c9.mjs +0 -33
- package/dist/bootstrap-CV6OT-c9.mjs.map +0 -1
- package/dist/destroy-C0cKkpWe.mjs.map +0 -1
- package/dist/provision-tenant-BHDWTC2U.mjs.map +0 -1
- package/dist/tamerArtifactsR2-Ba29OVp9.mjs +0 -52
- package/dist/tamerArtifactsR2-Ba29OVp9.mjs.map +0 -1
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
import { n as r2S3CredentialsFromEnv, t as emptyR2BucketViaS3 } from "./r2S3EmptyBucket-B9_pHfvB.mjs";
|
|
2
|
-
|
|
3
|
-
//#region src/core/state/tamerArtifactsR2.ts
|
|
4
|
-
/**
|
|
5
|
-
* Per-env R2 bucket that holds Tamer-managed artifacts (built bundles, keyed
|
|
6
|
-
* `{resource-type}/{name}/{version}/...`). Owned by Tamer itself, not by any
|
|
7
|
-
* worker in `tamer.config.ts`. Created on `tamer bootstrap` and removed on
|
|
8
|
-
* `tamer destroy --wipe-metadata`.
|
|
9
|
-
*
|
|
10
|
-
* Naming intentionally mirrors `tamer-state-{env}` (see `tamerStateDb.ts`).
|
|
11
|
-
*/
|
|
12
|
-
function tamerArtifactsBucketName(env) {
|
|
13
|
-
return `tamer-artifacts-${env}`;
|
|
14
|
-
}
|
|
15
|
-
async function findTamerArtifactsBucket(api, env) {
|
|
16
|
-
const name = tamerArtifactsBucketName(env);
|
|
17
|
-
return (await api.r2ListAll()).find((b) => b.name === name);
|
|
18
|
-
}
|
|
19
|
-
/** Create the bucket if missing. Idempotent — re-runs are safe. */
|
|
20
|
-
async function ensureTamerArtifactsBucket(api, env) {
|
|
21
|
-
const existing = await findTamerArtifactsBucket(api, env);
|
|
22
|
-
const name = tamerArtifactsBucketName(env);
|
|
23
|
-
if (existing) return name;
|
|
24
|
-
await api.r2Create(name);
|
|
25
|
-
return name;
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* Best-effort delete. Returns true if the bucket existed and was removed,
|
|
29
|
-
* false if it was already gone. Cloudflare refuses to delete non-empty
|
|
30
|
-
* buckets; in that case the error is propagated so the operator can decide.
|
|
31
|
-
*/
|
|
32
|
-
async function destroyTamerArtifactsBucket(api, env) {
|
|
33
|
-
const existing = await findTamerArtifactsBucket(api, env);
|
|
34
|
-
if (!existing) return false;
|
|
35
|
-
const name = existing.name;
|
|
36
|
-
const accountId = api.getAccountId();
|
|
37
|
-
const s3creds = r2S3CredentialsFromEnv();
|
|
38
|
-
if (s3creds) try {
|
|
39
|
-
console.log(`R2: emptying Tamer artifacts bucket "${name}" via S3 API (incomplete multipart uploads, then objects)…`);
|
|
40
|
-
const { uploadsAborted, objectsDeleted } = await emptyR2BucketViaS3(accountId, name, s3creds);
|
|
41
|
-
console.log(`R2: bucket "${name}" — aborted ${uploadsAborted} multipart upload(s), deleted ${objectsDeleted} object(s).`);
|
|
42
|
-
} catch (e) {
|
|
43
|
-
console.warn(`R2: S3 empty failed for "${name}":`, e instanceof Error ? e.message : e);
|
|
44
|
-
}
|
|
45
|
-
else console.warn(`R2: R2_ACCESS_KEY_ID and R2_SECRET_ACCESS_KEY not set — skipping S3 empty for "${name}"; bucket delete may fail if the bucket is not empty.`);
|
|
46
|
-
await api.r2Delete(name);
|
|
47
|
-
return true;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
//#endregion
|
|
51
|
-
export { ensureTamerArtifactsBucket as n, tamerArtifactsBucketName as r, destroyTamerArtifactsBucket as t };
|
|
52
|
-
//# sourceMappingURL=tamerArtifactsR2-Ba29OVp9.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tamerArtifactsR2-Ba29OVp9.mjs","names":[],"sources":["../src/core/state/tamerArtifactsR2.ts"],"sourcesContent":["import type { CFApiClient } from \"../api/CFApiClient.js\";\nimport {\n emptyR2BucketViaS3,\n r2S3CredentialsFromEnv,\n} from \"../../features/r2/r2S3EmptyBucket.js\";\n\n/**\n * Per-env R2 bucket that holds Tamer-managed artifacts (built bundles, keyed\n * `{resource-type}/{name}/{version}/...`). Owned by Tamer itself, not by any\n * worker in `tamer.config.ts`. Created on `tamer bootstrap` and removed on\n * `tamer destroy --wipe-metadata`.\n *\n * Naming intentionally mirrors `tamer-state-{env}` (see `tamerStateDb.ts`).\n */\nexport function tamerArtifactsBucketName(env: string): string {\n return `tamer-artifacts-${env}`;\n}\n\nexport async function findTamerArtifactsBucket(\n api: CFApiClient,\n env: string,\n): Promise<{ name: string; creation_date: string } | undefined> {\n const name = tamerArtifactsBucketName(env);\n const all = await api.r2ListAll();\n return all.find((b) => b.name === name);\n}\n\n/** Create the bucket if missing. Idempotent — re-runs are safe. */\nexport async function ensureTamerArtifactsBucket(\n api: CFApiClient,\n env: string,\n): Promise<string> {\n const existing = await findTamerArtifactsBucket(api, env);\n const name = tamerArtifactsBucketName(env);\n if (existing) return name;\n await api.r2Create(name);\n return name;\n}\n\n/**\n * Best-effort delete. Returns true if the bucket existed and was removed,\n * false if it was already gone. Cloudflare refuses to delete non-empty\n * buckets; in that case the error is propagated so the operator can decide.\n */\nexport async function destroyTamerArtifactsBucket(\n api: CFApiClient,\n env: string,\n): Promise<boolean> {\n const existing = await findTamerArtifactsBucket(api, env);\n if (!existing) return false;\n const name = existing.name;\n const accountId = api.getAccountId();\n const s3creds = r2S3CredentialsFromEnv();\n if (s3creds) {\n try {\n console.log(\n `R2: emptying Tamer artifacts bucket \"${name}\" via S3 API (incomplete multipart uploads, then objects)…`,\n );\n const { uploadsAborted, objectsDeleted } = await emptyR2BucketViaS3(\n accountId,\n name,\n s3creds,\n );\n console.log(\n `R2: bucket \"${name}\" — aborted ${uploadsAborted} multipart upload(s), deleted ${objectsDeleted} object(s).`,\n );\n } catch (e) {\n console.warn(\n `R2: S3 empty failed for \"${name}\":`,\n e instanceof Error ? e.message : e,\n );\n }\n } else {\n console.warn(\n `R2: R2_ACCESS_KEY_ID and R2_SECRET_ACCESS_KEY not set — skipping S3 empty for \"${name}\"; bucket delete may fail if the bucket is not empty.`,\n );\n }\n await api.r2Delete(name);\n return true;\n}\n"],"mappings":";;;;;;;;;;;AAcA,SAAgB,yBAAyB,KAAqB;AAC5D,QAAO,mBAAmB;;AAG5B,eAAsB,yBACpB,KACA,KAC8D;CAC9D,MAAM,OAAO,yBAAyB,IAAI;AAE1C,SADY,MAAM,IAAI,WAAW,EACtB,MAAM,MAAM,EAAE,SAAS,KAAK;;;AAIzC,eAAsB,2BACpB,KACA,KACiB;CACjB,MAAM,WAAW,MAAM,yBAAyB,KAAK,IAAI;CACzD,MAAM,OAAO,yBAAyB,IAAI;AAC1C,KAAI,SAAU,QAAO;AACrB,OAAM,IAAI,SAAS,KAAK;AACxB,QAAO;;;;;;;AAQT,eAAsB,4BACpB,KACA,KACkB;CAClB,MAAM,WAAW,MAAM,yBAAyB,KAAK,IAAI;AACzD,KAAI,CAAC,SAAU,QAAO;CACtB,MAAM,OAAO,SAAS;CACtB,MAAM,YAAY,IAAI,cAAc;CACpC,MAAM,UAAU,wBAAwB;AACxC,KAAI,QACF,KAAI;AACF,UAAQ,IACN,wCAAwC,KAAK,4DAC9C;EACD,MAAM,EAAE,gBAAgB,mBAAmB,MAAM,mBAC/C,WACA,MACA,QACD;AACD,UAAQ,IACN,eAAe,KAAK,cAAc,eAAe,gCAAgC,eAAe,aACjG;UACM,GAAG;AACV,UAAQ,KACN,4BAA4B,KAAK,KACjC,aAAa,QAAQ,EAAE,UAAU,EAClC;;KAGH,SAAQ,KACN,kFAAkF,KAAK,uDACxF;AAEH,OAAM,IAAI,SAAS,KAAK;AACxB,QAAO"}
|