hatchkit 0.1.30 → 0.1.31
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/adopt.d.ts.map +1 -1
- package/dist/adopt.js +38 -3
- package/dist/adopt.js.map +1 -1
- package/dist/deploy/gh-actions-secrets.d.ts +16 -0
- package/dist/deploy/gh-actions-secrets.d.ts.map +1 -1
- package/dist/deploy/gh-actions-secrets.js +38 -0
- package/dist/deploy/gh-actions-secrets.js.map +1 -1
- package/dist/deploy/rollback.d.ts.map +1 -1
- package/dist/deploy/rollback.js +71 -2
- package/dist/deploy/rollback.js.map +1 -1
- package/dist/index.js +70 -9
- package/dist/index.js.map +1 -1
- package/dist/provision/index.d.ts +16 -1
- package/dist/provision/index.d.ts.map +1 -1
- package/dist/provision/index.js +62 -2
- package/dist/provision/index.js.map +1 -1
- package/dist/provision/s3-buckets.d.ts +16 -0
- package/dist/provision/s3-buckets.d.ts.map +1 -1
- package/dist/provision/s3-buckets.js +126 -44
- package/dist/provision/s3-buckets.js.map +1 -1
- package/dist/provision/s3.d.ts +77 -0
- package/dist/provision/s3.d.ts.map +1 -0
- package/dist/provision/s3.js +347 -0
- package/dist/provision/s3.js.map +1 -0
- package/dist/scaffold/manifest.d.ts +45 -5
- package/dist/scaffold/manifest.d.ts.map +1 -1
- package/dist/scaffold/manifest.js.map +1 -1
- package/dist/utils/cloudflare-api.d.ts +67 -5
- package/dist/utils/cloudflare-api.d.ts.map +1 -1
- package/dist/utils/cloudflare-api.js +133 -10
- package/dist/utils/cloudflare-api.js.map +1 -1
- package/dist/utils/run-ledger.d.ts +33 -0
- package/dist/utils/run-ledger.d.ts.map +1 -1
- package/dist/utils/run-ledger.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,347 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* S3 / R2 token provisioning for the `hatchkit add` flow.
|
|
3
|
+
*
|
|
4
|
+
* Sister flow to `hatchkit provision s3` (s3-buckets.ts), which creates
|
|
5
|
+
* the bucket pair and mints a single shared token. THIS flow is the
|
|
6
|
+
* "buckets already exist; just give me scoped credentials" path. It's
|
|
7
|
+
* what runs when the project's `.hatchkit.json` declares `s3Buckets`
|
|
8
|
+
* (e.g. `s3Provider: "existing"`) and the user runs:
|
|
9
|
+
*
|
|
10
|
+
* hatchkit add <project> s3
|
|
11
|
+
*
|
|
12
|
+
* For each bucket entry in the manifest, we mint a Cloudflare R2
|
|
13
|
+
* **Account** API token (`POST /accounts/{id}/tokens`) scoped to that
|
|
14
|
+
* bucket only — Object Read + Write permissions. One token per bucket
|
|
15
|
+
* is the deliberate choice: narrower blast radius than a single
|
|
16
|
+
* multi-bucket token, and it matches the `R2_<NAME>_*` env-var naming
|
|
17
|
+
* the runtime expects (each bucket has its own credential pair).
|
|
18
|
+
*
|
|
19
|
+
* Source of truth for which tokens exist: the manifest. Each minted
|
|
20
|
+
* token's id is pinned under `s3Buckets[bucketKey].tokenId` in
|
|
21
|
+
* `.hatchkit.json` (committed) so re-runs reuse it instead of
|
|
22
|
+
* minting a duplicate, and `hatchkit remove <project> s3` knows
|
|
23
|
+
* which tokens to revoke. Credentials never go in the manifest —
|
|
24
|
+
* they live encrypted in `.env.production` only.
|
|
25
|
+
*
|
|
26
|
+
* Coexists with `hatchkit provision s3`'s shared-token model: that
|
|
27
|
+
* flow records ONE token id at `s3Buckets.tokenId` covering both
|
|
28
|
+
* built-in buckets (`assets` + `state`). Per-bucket tokens minted
|
|
29
|
+
* here use `s3Buckets[bucketKey].tokenId` instead — distinct field,
|
|
30
|
+
* distinct semantics.
|
|
31
|
+
*
|
|
32
|
+
* Inverse: `unprovisionR2BucketTokens` — revokes each token via
|
|
33
|
+
* DELETE /accounts/{id}/tokens/{id}. Called by `hatchkit remove`.
|
|
34
|
+
*/
|
|
35
|
+
import { join } from "node:path";
|
|
36
|
+
import chalk from "chalk";
|
|
37
|
+
import ora from "ora";
|
|
38
|
+
import { readManifest, writeManifest } from "../scaffold/manifest.js";
|
|
39
|
+
import { CloudflareApi } from "../utils/cloudflare-api.js";
|
|
40
|
+
import { SECRET_KEYS, getSecret } from "../utils/secrets.js";
|
|
41
|
+
import { accountIdFromR2Endpoint } from "./s3-buckets.js";
|
|
42
|
+
/** Mint (or reuse) a per-bucket scoped R2 Account API token for every
|
|
43
|
+
* bucket declared in `.hatchkit.json` → `s3Buckets`. Returns the
|
|
44
|
+
* endpoint + per-bucket S3-style credential pairs ready for the env
|
|
45
|
+
* writer. The token id of every minted token is persisted into the
|
|
46
|
+
* manifest so re-runs are idempotent and destroy can clean up. */
|
|
47
|
+
export async function provisionR2BucketTokens(opts) {
|
|
48
|
+
const provider = "r2";
|
|
49
|
+
const manifest = readManifest(opts.projectDir);
|
|
50
|
+
if (!manifest) {
|
|
51
|
+
throw new Error(`No .hatchkit.json in ${opts.projectDir}. Run \`hatchkit adopt\` (or move into the project directory) first.`);
|
|
52
|
+
}
|
|
53
|
+
// Manifest's S3 provider must be R2-compatible. `existing` is the
|
|
54
|
+
// primary user-facing case (buckets pre-created elsewhere); `r2`
|
|
55
|
+
// means hatchkit created them itself. Both go through the same
|
|
56
|
+
// token-minting code path.
|
|
57
|
+
if (manifest.s3Provider !== "existing" && manifest.s3Provider !== "r2") {
|
|
58
|
+
if (manifest.s3Provider === "hetzner" || manifest.s3Provider === "aws") {
|
|
59
|
+
throw new Error(`s3Provider "${manifest.s3Provider}" is not yet supported by \`hatchkit add s3\`. Only Cloudflare R2 (provider "r2" or "existing") can mint scoped tokens today.`);
|
|
60
|
+
}
|
|
61
|
+
throw new Error(`s3Provider "${manifest.s3Provider}" — nothing to provision. Add s3Buckets to .hatchkit.json or run \`hatchkit provision s3\`.`);
|
|
62
|
+
}
|
|
63
|
+
const buckets = enumerateBuckets(manifest);
|
|
64
|
+
if (buckets.length === 0) {
|
|
65
|
+
throw new Error(`No s3Buckets declared in ${join(opts.projectDir, ".hatchkit.json")}. Add at least one bucket entry (e.g. "assets": { "name": "<bucket>", "publicUrl": "..." }) and re-run.`);
|
|
66
|
+
}
|
|
67
|
+
// Pull provider metadata (endpoint) from the global config store.
|
|
68
|
+
const { getStore } = await import("../config.js");
|
|
69
|
+
const meta = getStore().get(`providers.s3.${provider}`);
|
|
70
|
+
if (!meta || meta.status !== "configured" || !meta.endpoint) {
|
|
71
|
+
throw new Error(`R2 provider is not configured globally. Run \`hatchkit config add s3 r2\` to paste the admin token + endpoint, then re-run.`);
|
|
72
|
+
}
|
|
73
|
+
const accountId = accountIdFromR2Endpoint(meta.endpoint);
|
|
74
|
+
const adminToken = await getSecret(SECRET_KEYS.r2AdminToken);
|
|
75
|
+
if (!adminToken) {
|
|
76
|
+
throw new Error("R2 admin token missing from the keychain. Run `hatchkit config add s3 r2` to paste + verify it, then re-run.");
|
|
77
|
+
}
|
|
78
|
+
const cf = new CloudflareApi({ token: adminToken });
|
|
79
|
+
// Read the .env.production keys to know whether existing manifest
|
|
80
|
+
// tokens still have usable credentials in the file. CF doesn't
|
|
81
|
+
// expose the secret-access-key after creation, so a manifest token
|
|
82
|
+
// without matching env entries is effectively dead — re-mint.
|
|
83
|
+
const envPath = join(opts.projectDir, ".env.production");
|
|
84
|
+
const existingEnv = await readEnvKeysSet(envPath);
|
|
85
|
+
const bucketTokens = [];
|
|
86
|
+
const updatedBucketEntries = {};
|
|
87
|
+
for (const bucket of buckets) {
|
|
88
|
+
const existingTokenId = bucket.tokenId;
|
|
89
|
+
const reusable = existingTokenId && hasBucketEnvCreds(existingEnv, bucket.key);
|
|
90
|
+
let probe = null;
|
|
91
|
+
if (reusable) {
|
|
92
|
+
try {
|
|
93
|
+
probe = await cf.getAccountToken(accountId, existingTokenId);
|
|
94
|
+
}
|
|
95
|
+
catch (err) {
|
|
96
|
+
// Probe failure (network/permissions) — fall through to mint
|
|
97
|
+
// fresh. Better to lose one token to orphans than to keep
|
|
98
|
+
// running with credentials we can't verify.
|
|
99
|
+
console.log(chalk.dim(` · Couldn't verify R2 token ${existingTokenId.slice(0, 8)}… for ${bucket.key} (${err.message.split("\n")[0]}). Minting a fresh one.`));
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
if (reusable && probe?.status === "active") {
|
|
103
|
+
// Reuse: env already has the credentials, just record the entry.
|
|
104
|
+
bucketTokens.push({
|
|
105
|
+
bucketKey: bucket.key,
|
|
106
|
+
bucketName: bucket.name,
|
|
107
|
+
accessKeyId: existingTokenId,
|
|
108
|
+
secretAccessKey: "", // unknown to us; .env.production has the live one
|
|
109
|
+
tokenId: existingTokenId,
|
|
110
|
+
accountId,
|
|
111
|
+
minted: false,
|
|
112
|
+
});
|
|
113
|
+
updatedBucketEntries[bucket.key] = {
|
|
114
|
+
name: bucket.name,
|
|
115
|
+
publicUrl: bucket.publicUrl,
|
|
116
|
+
tokenId: existingTokenId,
|
|
117
|
+
};
|
|
118
|
+
console.log(chalk.dim(` · Reusing R2 account token ${existingTokenId.slice(0, 8)}… for bucket ${bucket.key} (alive in CF; creds in .env.production)`));
|
|
119
|
+
continue;
|
|
120
|
+
}
|
|
121
|
+
// Revoke a stale manifest token (status disabled/expired/404)
|
|
122
|
+
// before minting the replacement so we don't pile up orphans.
|
|
123
|
+
if (existingTokenId) {
|
|
124
|
+
try {
|
|
125
|
+
await cf.deleteAccountToken(accountId, existingTokenId);
|
|
126
|
+
}
|
|
127
|
+
catch {
|
|
128
|
+
/* best-effort */
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
const spinner = ora(`R2: minting scoped account token for bucket ${chalk.cyan(bucket.name)} (${bucket.key})`).start();
|
|
132
|
+
try {
|
|
133
|
+
const minted = await cf.createR2AccountToken({
|
|
134
|
+
accountId,
|
|
135
|
+
name: `hatchkit-${opts.projectName}-${bucket.key}`,
|
|
136
|
+
bucketNames: [bucket.name],
|
|
137
|
+
permissions: "read-write",
|
|
138
|
+
});
|
|
139
|
+
bucketTokens.push({
|
|
140
|
+
bucketKey: bucket.key,
|
|
141
|
+
bucketName: bucket.name,
|
|
142
|
+
accessKeyId: minted.accessKeyId,
|
|
143
|
+
secretAccessKey: minted.secretAccessKey,
|
|
144
|
+
tokenId: minted.tokenId,
|
|
145
|
+
accountId,
|
|
146
|
+
minted: true,
|
|
147
|
+
});
|
|
148
|
+
updatedBucketEntries[bucket.key] = {
|
|
149
|
+
name: bucket.name,
|
|
150
|
+
publicUrl: bucket.publicUrl,
|
|
151
|
+
tokenId: minted.tokenId,
|
|
152
|
+
};
|
|
153
|
+
spinner.succeed(`R2: minted account token for ${bucket.name} (id ${minted.tokenId.slice(0, 8)}…, visible in R2 → Manage R2 API Tokens)`);
|
|
154
|
+
}
|
|
155
|
+
catch (err) {
|
|
156
|
+
spinner.fail(`R2: minting account token for ${bucket.name} failed`);
|
|
157
|
+
const msg = err.message;
|
|
158
|
+
if (/9109|10000|10001|403|invalid api token/i.test(msg)) {
|
|
159
|
+
throw new Error(`${msg}\n\n → The admin token (s3:r2:admin-token) needs:\n · Account > Workers R2 Storage > Edit (list/access buckets)\n · Account Settings > Edit (mint per-project account tokens — commonly the missing one)\n → Edit at https://dash.cloudflare.com/profile/api-tokens, save, re-run.`);
|
|
160
|
+
}
|
|
161
|
+
throw err;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
// Persist the per-bucket tokenIds back into the manifest. Preserve
|
|
165
|
+
// any other s3Buckets fields (like `tokenId` + `accountId` from a
|
|
166
|
+
// prior `provision s3` shared-token run, or built-in `state` entry
|
|
167
|
+
// we didn't touch on this run).
|
|
168
|
+
if (bucketTokens.some((bt) => bt.minted)) {
|
|
169
|
+
const merged = {
|
|
170
|
+
...(manifest.s3Buckets ?? {}),
|
|
171
|
+
...updatedBucketEntries,
|
|
172
|
+
};
|
|
173
|
+
const updated = { ...manifest, s3Buckets: merged };
|
|
174
|
+
writeManifest(opts.projectDir, updated);
|
|
175
|
+
}
|
|
176
|
+
return { endpoint: meta.endpoint, bucketTokens };
|
|
177
|
+
}
|
|
178
|
+
/** Convert a `provisionR2BucketTokens` result into the KEY=VALUE lines
|
|
179
|
+
* the orchestrator writes to `.env.production`. Names follow the
|
|
180
|
+
* R2_ prefix convention; for projects with a single bucket we ALSO
|
|
181
|
+
* emit unprefixed `R2_ACCESS_KEY_ID` / `R2_SECRET_ACCESS_KEY` aliases
|
|
182
|
+
* so existing single-bucket runtimes (which expect the unprefixed
|
|
183
|
+
* form) keep working without code changes.
|
|
184
|
+
*
|
|
185
|
+
* Reused tokens (where we don't know the secret-access-key; CF
|
|
186
|
+
* doesn't expose it after creation) emit only the bucket-name +
|
|
187
|
+
* endpoint lines — the existing encrypted .env.production is the
|
|
188
|
+
* source of truth for the credentials, and we don't want to overwrite
|
|
189
|
+
* it with a placeholder. */
|
|
190
|
+
export function renderR2BucketTokensEnv(result) {
|
|
191
|
+
const lines = [];
|
|
192
|
+
lines.push(`R2_ENDPOINT=${result.endpoint}`);
|
|
193
|
+
for (const bt of result.bucketTokens) {
|
|
194
|
+
const name = bt.bucketKey.toUpperCase();
|
|
195
|
+
lines.push(`R2_${name}_BUCKET=${bt.bucketName}`);
|
|
196
|
+
if (bt.minted) {
|
|
197
|
+
lines.push(`R2_${name}_ACCESS_KEY_ID=${bt.accessKeyId}`);
|
|
198
|
+
lines.push(`R2_${name}_SECRET_ACCESS_KEY=${bt.secretAccessKey}`);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
// Single-bucket alias. Most single-bucket consumers (Next.js apps,
|
|
202
|
+
// standalone sync scripts) read R2_ACCESS_KEY_ID / R2_SECRET_ACCESS_KEY
|
|
203
|
+
// directly without the bucket-name segment. Skip when there's
|
|
204
|
+
// ambiguity (multi-bucket).
|
|
205
|
+
if (result.bucketTokens.length === 1 && result.bucketTokens[0].minted) {
|
|
206
|
+
const sole = result.bucketTokens[0];
|
|
207
|
+
lines.push(`R2_ACCESS_KEY_ID=${sole.accessKeyId}`);
|
|
208
|
+
lines.push(`R2_SECRET_ACCESS_KEY=${sole.secretAccessKey}`);
|
|
209
|
+
}
|
|
210
|
+
return lines;
|
|
211
|
+
}
|
|
212
|
+
/** Delete every per-bucket scoped R2 account token minted for this
|
|
213
|
+
* project, both upstream (CF API) and locally (manifest). Idempotent
|
|
214
|
+
* — missing upstream tokens count as `not-found`.
|
|
215
|
+
*
|
|
216
|
+
* Source of truth: the manifest's `s3Buckets[bucketKey].tokenId`
|
|
217
|
+
* fields. When the manifest is missing or unreadable, returns an
|
|
218
|
+
* empty result — the user must manually revoke tokens via the CF
|
|
219
|
+
* dashboard. (No keychain fallback exists for the per-bucket model;
|
|
220
|
+
* unlike the legacy single-token-per-project flow, tokens are never
|
|
221
|
+
* written to the OS keychain in the new design.) */
|
|
222
|
+
export async function unprovisionR2BucketTokens(opts) {
|
|
223
|
+
const out = { buckets: [] };
|
|
224
|
+
if (!opts.projectDir)
|
|
225
|
+
return out;
|
|
226
|
+
let manifest = null;
|
|
227
|
+
try {
|
|
228
|
+
manifest = readManifest(opts.projectDir);
|
|
229
|
+
}
|
|
230
|
+
catch {
|
|
231
|
+
return out;
|
|
232
|
+
}
|
|
233
|
+
if (!manifest)
|
|
234
|
+
return out;
|
|
235
|
+
const buckets = enumerateBuckets(manifest);
|
|
236
|
+
if (buckets.length === 0)
|
|
237
|
+
return out;
|
|
238
|
+
const accountId = manifest.s3Buckets?.accountId ?? deriveAccountId();
|
|
239
|
+
const adminToken = await getSecret(SECRET_KEYS.r2AdminToken);
|
|
240
|
+
if (!adminToken) {
|
|
241
|
+
throw new Error("R2 admin token not in keychain — re-add via `hatchkit config add s3 r2`, then retry remove.");
|
|
242
|
+
}
|
|
243
|
+
const cf = new CloudflareApi({ token: adminToken });
|
|
244
|
+
const resolvedAccountId = accountId ?? (await fallbackAccountId());
|
|
245
|
+
for (const bucket of buckets) {
|
|
246
|
+
const tokenId = bucket.tokenId;
|
|
247
|
+
if (!tokenId) {
|
|
248
|
+
out.buckets.push({ bucketKey: bucket.key, outcome: "not-found" });
|
|
249
|
+
continue;
|
|
250
|
+
}
|
|
251
|
+
if (!resolvedAccountId) {
|
|
252
|
+
throw new Error("Couldn't resolve the Cloudflare account id for this project — manifest has no `s3Buckets.accountId` and the global R2 endpoint is not set. Run `hatchkit config add s3 r2` to fix.");
|
|
253
|
+
}
|
|
254
|
+
let outcome = "not-found";
|
|
255
|
+
try {
|
|
256
|
+
outcome = await cf.deleteAccountToken(resolvedAccountId, tokenId);
|
|
257
|
+
}
|
|
258
|
+
catch (err) {
|
|
259
|
+
throw new Error(`Could not delete R2 account token for bucket ${bucket.key}: ${err.message}`);
|
|
260
|
+
}
|
|
261
|
+
out.buckets.push({ bucketKey: bucket.key, outcome });
|
|
262
|
+
}
|
|
263
|
+
// Wipe per-bucket tokenIds from the manifest (keep names + URLs —
|
|
264
|
+
// the buckets still exist; only the tokens are gone).
|
|
265
|
+
if (manifest.s3Buckets) {
|
|
266
|
+
const updated = { ...manifest.s3Buckets };
|
|
267
|
+
for (const bucket of buckets) {
|
|
268
|
+
const entry = updated[bucket.key];
|
|
269
|
+
if (entry && typeof entry === "object") {
|
|
270
|
+
updated[bucket.key] = {
|
|
271
|
+
name: entry.name,
|
|
272
|
+
publicUrl: entry.publicUrl,
|
|
273
|
+
};
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
writeManifest(opts.projectDir, { ...manifest, s3Buckets: updated });
|
|
277
|
+
}
|
|
278
|
+
return out;
|
|
279
|
+
}
|
|
280
|
+
/** Read the manifest's `s3Buckets` map into a stable, sorted list.
|
|
281
|
+
* Sort by key so multi-bucket runs always produce the same env-var
|
|
282
|
+
* order on disk. Skips the scalar `tokenId` / `accountId` fields
|
|
283
|
+
* that share the s3Buckets namespace — those belong to the legacy
|
|
284
|
+
* single-token flow, not to this per-bucket flow. */
|
|
285
|
+
function enumerateBuckets(manifest) {
|
|
286
|
+
const map = manifest.s3Buckets;
|
|
287
|
+
if (!map)
|
|
288
|
+
return [];
|
|
289
|
+
const entries = [];
|
|
290
|
+
for (const key of Object.keys(map).sort()) {
|
|
291
|
+
if (key === "tokenId" || key === "accountId")
|
|
292
|
+
continue;
|
|
293
|
+
const value = map[key];
|
|
294
|
+
if (!value || typeof value !== "object" || typeof value.name !== "string" || value.name === "")
|
|
295
|
+
continue;
|
|
296
|
+
entries.push({
|
|
297
|
+
key,
|
|
298
|
+
name: value.name,
|
|
299
|
+
publicUrl: value.publicUrl ?? null,
|
|
300
|
+
tokenId: value.tokenId,
|
|
301
|
+
});
|
|
302
|
+
}
|
|
303
|
+
return entries;
|
|
304
|
+
}
|
|
305
|
+
/** Read every `KEY=` line out of a `.env.production` file (encrypted or
|
|
306
|
+
* not — we only care about the keys present). Returns an empty set
|
|
307
|
+
* when the file doesn't exist. */
|
|
308
|
+
async function readEnvKeysSet(envPath) {
|
|
309
|
+
const { existsSync, readFileSync } = await import("node:fs");
|
|
310
|
+
if (!existsSync(envPath))
|
|
311
|
+
return new Set();
|
|
312
|
+
const text = readFileSync(envPath, "utf-8");
|
|
313
|
+
const out = new Set();
|
|
314
|
+
for (const line of text.split("\n")) {
|
|
315
|
+
const m = line.match(/^([A-Z][A-Z0-9_]*)=/);
|
|
316
|
+
if (m)
|
|
317
|
+
out.add(m[1]);
|
|
318
|
+
}
|
|
319
|
+
return out;
|
|
320
|
+
}
|
|
321
|
+
/** Returns true if the `.env.production` already has access-key + secret
|
|
322
|
+
* entries for the bucket, so reusing an existing manifest tokenId is
|
|
323
|
+
* safe (we won't be left with credentials we can't recover). Checks
|
|
324
|
+
* the prefixed `R2_<NAME>_*` form first; falls back to the unprefixed
|
|
325
|
+
* alias used for single-bucket projects. */
|
|
326
|
+
function hasBucketEnvCreds(envKeys, bucketKey) {
|
|
327
|
+
const upper = bucketKey.toUpperCase();
|
|
328
|
+
const prefixed = envKeys.has(`R2_${upper}_ACCESS_KEY_ID`) && envKeys.has(`R2_${upper}_SECRET_ACCESS_KEY`);
|
|
329
|
+
const aliased = envKeys.has("R2_ACCESS_KEY_ID") && envKeys.has("R2_SECRET_ACCESS_KEY");
|
|
330
|
+
return prefixed || aliased;
|
|
331
|
+
}
|
|
332
|
+
function deriveAccountId() {
|
|
333
|
+
return undefined;
|
|
334
|
+
}
|
|
335
|
+
async function fallbackAccountId() {
|
|
336
|
+
const { getStore } = await import("../config.js");
|
|
337
|
+
const meta = getStore().get("providers.s3.r2");
|
|
338
|
+
if (!meta?.endpoint)
|
|
339
|
+
return undefined;
|
|
340
|
+
try {
|
|
341
|
+
return accountIdFromR2Endpoint(meta.endpoint);
|
|
342
|
+
}
|
|
343
|
+
catch {
|
|
344
|
+
return undefined;
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
//# sourceMappingURL=s3.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"s3.js","sourceRoot":"","sources":["../../src/provision/s3.ts"],"names":[],"mappings":"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"}
|
|
@@ -45,10 +45,10 @@ export interface ProjectManifest {
|
|
|
45
45
|
* Optional for back-compat with manifests written before this
|
|
46
46
|
* field existed; readers should fall back to detection. */
|
|
47
47
|
surfaces?: "server-only" | "client-only" | "both";
|
|
48
|
-
/** S3 buckets provisioned by `hatchkit provision s3`. Names
|
|
49
|
-
* the manifest (so re-runs are idempotent and
|
|
50
|
-
* knows what to undo); credentials never do —
|
|
51
|
-
*
|
|
48
|
+
/** S3 buckets provisioned by `hatchkit provision s3`. Names + the
|
|
49
|
+
* shared token id go in the manifest (so re-runs are idempotent and
|
|
50
|
+
* `hatchkit destroy` knows what to undo); credentials never do —
|
|
51
|
+
* those live encrypted in `.env.production`.
|
|
52
52
|
*
|
|
53
53
|
* `assets` is the public bucket fronting NEXT_PUBLIC_ASSETS_BASE_URL
|
|
54
54
|
* or equivalent. Reachable over HTTPS via either an r2.dev
|
|
@@ -58,16 +58,56 @@ export interface ProjectManifest {
|
|
|
58
58
|
*
|
|
59
59
|
* `publicUrl` is the canonical no-trailing-slash URL the runtime
|
|
60
60
|
* should serve assets from. Always present on `assets`; null on
|
|
61
|
-
* `state` (private buckets aren't publicly reachable).
|
|
61
|
+
* `state` (private buckets aren't publicly reachable).
|
|
62
|
+
*
|
|
63
|
+
* `tokenId` + `accountId` (top-level) identify the Cloudflare R2
|
|
64
|
+
* Account API Token whose resource policy is scoped to whichever
|
|
65
|
+
* buckets exist for this project. ONE token covers both buckets —
|
|
66
|
+
* the runtime is a single app reading both. Destroy revokes the
|
|
67
|
+
* token via `DELETE /accounts/{accountId}/tokens/{tokenId}` after
|
|
68
|
+
* the buckets themselves are gone.
|
|
69
|
+
*
|
|
70
|
+
* Neither field is a credential — the token id is an identifier
|
|
71
|
+
* (= S3 access key id), and accountId is already public-safe. The
|
|
72
|
+
* actual access/secret pair lives encrypted in .env.production.
|
|
73
|
+
*
|
|
74
|
+
* Both are optional for back-compat with manifests written before
|
|
75
|
+
* account-token provisioning landed (legacy projects still have
|
|
76
|
+
* user-tokens stashed in the OS keychain; provision migrates them
|
|
77
|
+
* on next run). */
|
|
62
78
|
s3Buckets?: {
|
|
63
79
|
assets?: {
|
|
64
80
|
name: string;
|
|
65
81
|
publicUrl: string;
|
|
82
|
+
tokenId?: string;
|
|
66
83
|
};
|
|
67
84
|
state?: {
|
|
68
85
|
name: string;
|
|
69
86
|
publicUrl: null;
|
|
87
|
+
tokenId?: string;
|
|
70
88
|
};
|
|
89
|
+
/** Shared Cloudflare R2 Account API Token id covering the
|
|
90
|
+
* built-in `assets`/`state` pair (one token, one resource policy
|
|
91
|
+
* listing both buckets). Recorded by `hatchkit provision s3`.
|
|
92
|
+
* Per-bucket tokens minted by `hatchkit add s3` for arbitrary
|
|
93
|
+
* user-declared buckets live under each bucket entry's own
|
|
94
|
+
* `tokenId` field instead. */
|
|
95
|
+
tokenId?: string;
|
|
96
|
+
/** Account that owns the buckets and the shared token. */
|
|
97
|
+
accountId?: string;
|
|
98
|
+
/** Arbitrary user-declared bucket entries (beyond the built-in
|
|
99
|
+
* `assets`/`state` pair) — `hatchkit add <project> s3` mints a
|
|
100
|
+
* per-bucket scoped R2 token for each one. The union value type
|
|
101
|
+
* also covers the scalar `tokenId`/`accountId` fields above:
|
|
102
|
+
* TS requires the index signature to be no narrower than any
|
|
103
|
+
* named property, so `string` (for those scalars) is part of
|
|
104
|
+
* the union. Callers narrow on `typeof === "object"` before
|
|
105
|
+
* reading `name` / `publicUrl` / `tokenId`. */
|
|
106
|
+
[key: string]: {
|
|
107
|
+
name: string;
|
|
108
|
+
publicUrl: string | null;
|
|
109
|
+
tokenId?: string;
|
|
110
|
+
} | string | undefined;
|
|
71
111
|
};
|
|
72
112
|
}
|
|
73
113
|
/** Build a manifest from the internal ProjectConfig, explicitly
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/scaffold/manifest.ts"],"names":[],"mappings":"AAgCA,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,eAAO,MAAM,iBAAiB,mBAAmB,CAAC;AAClD,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAElC,MAAM,WAAW,eAAe;IAC9B,qEAAqE;IACrE,OAAO,EAAE,OAAO,gBAAgB,CAAC;IACjC,iEAAiE;IACjE,UAAU,EAAE,MAAM,CAAC;IACnB,qCAAqC;IACrC,YAAY,EAAE,MAAM,CAAC;IACrB,mEAAmE;IACnE,IAAI,EAAE,MAAM,CAAC;IACb,gEAAgE;IAChE,MAAM,EAAE,MAAM,CAAC;IACf,0CAA0C;IAC1C,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,0CAA0C;IAC1C,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB;6DACyD;IACzD,UAAU,EAAE,UAAU,CAAC;IACvB;qDACiD;IACjD,YAAY,EAAE,UAAU,GAAG,KAAK,CAAC;IACjC;;mDAE+C;IAC/C,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC;IAC7B,oEAAoE;IACpE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,2DAA2D;IAC3D,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;oEACgE;IAChE,KAAK,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9D;;;;;gEAK4D;IAC5D,QAAQ,CAAC,EAAE,aAAa,GAAG,aAAa,GAAG,MAAM,CAAC;IAClD
|
|
1
|
+
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/scaffold/manifest.ts"],"names":[],"mappings":"AAgCA,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,eAAO,MAAM,iBAAiB,mBAAmB,CAAC;AAClD,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAElC,MAAM,WAAW,eAAe;IAC9B,qEAAqE;IACrE,OAAO,EAAE,OAAO,gBAAgB,CAAC;IACjC,iEAAiE;IACjE,UAAU,EAAE,MAAM,CAAC;IACnB,qCAAqC;IACrC,YAAY,EAAE,MAAM,CAAC;IACrB,mEAAmE;IACnE,IAAI,EAAE,MAAM,CAAC;IACb,gEAAgE;IAChE,MAAM,EAAE,MAAM,CAAC;IACf,0CAA0C;IAC1C,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,0CAA0C;IAC1C,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB;6DACyD;IACzD,UAAU,EAAE,UAAU,CAAC;IACvB;qDACiD;IACjD,YAAY,EAAE,UAAU,GAAG,KAAK,CAAC;IACjC;;mDAE+C;IAC/C,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC;IAC7B,oEAAoE;IACpE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,2DAA2D;IAC3D,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;oEACgE;IAChE,KAAK,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9D;;;;;gEAK4D;IAC5D,QAAQ,CAAC,EAAE,aAAa,GAAG,aAAa,GAAG,MAAM,CAAC;IAClD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBA6BoB;IACpB,SAAS,CAAC,EAAE;QACV,MAAM,CAAC,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,MAAM,CAAC;YAAC,OAAO,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QAC/D,KAAK,CAAC,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,IAAI,CAAC;YAAC,OAAO,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QAC5D;;;;;uCAK+B;QAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,0DAA0D;QAC1D,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB;;;;;;;wDAOgD;QAChD,CAAC,GAAG,EAAE,MAAM,GACR;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;YAAC,OAAO,CAAC,EAAE,MAAM,CAAA;SAAE,GAC5D,MAAM,GACN,SAAS,CAAC;KACf,CAAC;CACH;AAED;;oEAEoE;AACpE,wBAAgB,UAAU,CACxB,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,YAAY,EACnB,UAAU,EAAE,MAAM,GACjB,eAAe,CAoBjB;AAED,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,GAAG,IAAI,CAGhF;AAED;;;gCAGgC;AAChC,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAiBvE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/scaffold/manifest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAIjC,MAAM,CAAC,MAAM,iBAAiB,GAAG,gBAAgB,CAAC;AAClD,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/scaffold/manifest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAIjC,MAAM,CAAC,MAAM,iBAAiB,GAAG,gBAAgB,CAAC;AAClD,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAkGlC;;oEAEoE;AACpE,MAAM,UAAU,UAAU,CACxB,MAAqB,EACrB,KAAmB,EACnB,UAAkB;IAElB,OAAO;QACL,OAAO,EAAE,gBAAgB;QACzB,UAAU;QACV,YAAY,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACtC,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,QAAQ,EAAE,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC;QAC9B,UAAU,EAAE,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC;QAClC,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,eAAe,EAAE,MAAM,CAAC,eAAe;QACvC,eAAe,EAAE,MAAM,CAAC,eAAe;QACvC,KAAK,EAAE;YACL,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,SAAS,EAAE,KAAK,CAAC,SAAS;SAC3B;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,SAAiB,EAAE,QAAyB;IACxE,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;IAChD,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;AACzE,CAAC;AAED;;;gCAGgC;AAChC,MAAM,UAAU,YAAY,CAAC,UAAkB;IAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;IACjD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IACnD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,eAAe,IAAI,uBAAwB,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;IACtF,CAAC;IACD,IACE,CAAC,MAAM;QACP,OAAO,MAAM,KAAK,QAAQ;QACzB,MAAgC,CAAC,OAAO,KAAK,gBAAgB,EAC9D,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,eAAe,IAAI,kCAAkC,gBAAgB,GAAG,CAAC,CAAC;IAC5F,CAAC;IACD,OAAO,MAAyB,CAAC;AACnC,CAAC"}
|
|
@@ -99,6 +99,16 @@ export declare class CloudflareApi {
|
|
|
99
99
|
creation_date?: string;
|
|
100
100
|
storage_class?: string;
|
|
101
101
|
} | null>;
|
|
102
|
+
/** Delete a bucket. Idempotent: 404 → "not-found".
|
|
103
|
+
*
|
|
104
|
+
* Cloudflare refuses to delete a bucket that still has objects in
|
|
105
|
+
* it (returns 10039 / "bucket is not empty"); the caller should
|
|
106
|
+
* surface that as a `RollbackSkip` with a recipe for the user to
|
|
107
|
+
* empty manually rather than silently destroying their data.
|
|
108
|
+
* We don't auto-empty here — that's a destructive choice that
|
|
109
|
+
* belongs at the rollback layer, not the API client.
|
|
110
|
+
*/
|
|
111
|
+
deleteR2Bucket(accountId: string, name: string): Promise<"deleted" | "not-found" | "not-empty">;
|
|
102
112
|
/** Enable (or disable) the managed `pub-<hash>.r2.dev` public URL on
|
|
103
113
|
* a bucket. Returns the assigned `pub-<hash>.r2.dev` hostname. */
|
|
104
114
|
enableR2ManagedDomain(accountId: string, bucket: string, enabled?: boolean): Promise<{
|
|
@@ -157,12 +167,64 @@ export declare class CloudflareApi {
|
|
|
157
167
|
/** S3 Secret Access Key — sha256(tokenValue), hex. */
|
|
158
168
|
secretAccessKey: string;
|
|
159
169
|
}>;
|
|
160
|
-
/**
|
|
161
|
-
*
|
|
162
|
-
*
|
|
163
|
-
|
|
170
|
+
/** Mint a per-bucket-scoped R2 **Account** API token via
|
|
171
|
+
* `POST /accounts/{accountId}/tokens`. Same resource policy shape as
|
|
172
|
+
* `createR2ApiToken`, but the token is account-scoped (visible in
|
|
173
|
+
* `R2 → Manage R2 API Tokens` in the dashboard, and tied to the
|
|
174
|
+
* account rather than the user — survives any one user being
|
|
175
|
+
* removed from the account).
|
|
176
|
+
*
|
|
177
|
+
* Why this exists alongside `createR2ApiToken`: the user-token
|
|
178
|
+
* variant predates this, requires `User > API Tokens > Edit` on
|
|
179
|
+
* the calling token, and tucks the result into a list users
|
|
180
|
+
* rarely visit (`Profile > API Tokens`). New code paths use this
|
|
181
|
+
* one; the user-token flavour stays for legacy migration only
|
|
182
|
+
* (revoking old user-tokens during provision).
|
|
183
|
+
*
|
|
184
|
+
* The calling token needs `Account Settings > Edit` (which lets it
|
|
185
|
+
* create account tokens). An R2-only admin token won't have that
|
|
186
|
+
* by default — the caller surfaces a hint when the 403 comes back.
|
|
187
|
+
*/
|
|
188
|
+
createR2AccountToken(params: {
|
|
189
|
+
accountId: string;
|
|
190
|
+
name: string;
|
|
191
|
+
bucketNames: string[];
|
|
192
|
+
jurisdiction?: "default" | "eu" | "fedramp";
|
|
193
|
+
permissions?: "read" | "read-write";
|
|
194
|
+
}): Promise<{
|
|
195
|
+
tokenId: string;
|
|
196
|
+
tokenValue: string;
|
|
197
|
+
accessKeyId: string;
|
|
198
|
+
secretAccessKey: string;
|
|
199
|
+
}>;
|
|
200
|
+
/** GET /accounts/{accountId}/tokens/{tokenId} — used to verify a
|
|
201
|
+
* recorded token still exists (and isn't disabled/expired) before
|
|
202
|
+
* we trust the encrypted credentials in the project's
|
|
203
|
+
* .env.production. Returns null on 404. */
|
|
204
|
+
getAccountToken(accountId: string, tokenId: string): Promise<{
|
|
205
|
+
id: string;
|
|
206
|
+
status: string;
|
|
207
|
+
name: string;
|
|
208
|
+
} | null>;
|
|
209
|
+
/** DELETE /accounts/{accountId}/tokens/{tokenId} — used by the
|
|
210
|
+
* destroy / rollback flow to take the per-bucket token down with
|
|
211
|
+
* its bucket(s). Idempotent: 404 → "not-found". */
|
|
212
|
+
deleteAccountToken(accountId: string, tokenId: string): Promise<"deleted" | "not-found">;
|
|
213
|
+
/** Cached lookup of permission groups. Pass `accountId` to use the
|
|
214
|
+
* per-account endpoint (preferred — works with R2 admin tokens that
|
|
215
|
+
* don't have `User > API Tokens > Read`). When `accountId` is
|
|
216
|
+
* omitted, falls back to `/user/tokens/permission_groups` for the
|
|
217
|
+
* legacy `createR2ApiToken` (user-token) path. Both return the same
|
|
218
|
+
* permission group catalog.
|
|
219
|
+
*
|
|
220
|
+
* Cache is keyed on `accountId ?? ""` so user-token + account-token
|
|
221
|
+
* flows can coexist in one process without crosstalk. */
|
|
222
|
+
private permissionGroupsCache;
|
|
164
223
|
private getR2PermissionGroups;
|
|
165
|
-
/** Delete a
|
|
224
|
+
/** Delete a USER-scoped API token by id (`DELETE /user/tokens/{id}`).
|
|
225
|
+
* Distinct from `deleteAccountToken` — this is used during
|
|
226
|
+
* migration to clean up the legacy user-tokens hatchkit minted
|
|
227
|
+
* before we switched provisioning to account tokens. Idempotent. */
|
|
166
228
|
deleteApiToken(tokenId: string): Promise<"deleted" | "not-found">;
|
|
167
229
|
/** Attach a custom domain (a hostname on a Cloudflare zone you own)
|
|
168
230
|
* to an R2 bucket. Idempotent — duplicates short-circuit via list. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloudflare-api.d.ts","sourceRoot":"","sources":["../../src/utils/cloudflare-api.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"cloudflare-api.d.ts","sourceRoot":"","sources":["../../src/utils/cloudflare-api.ts"],"names":[],"mappings":"AAcA,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,2EAA2E;IAC3E,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAiBD,kCAAkC;AAClC,qBAAa,aAAa;IACxB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,SAAS,CAAC,CAAS;gBAEf,OAAO,EAAE,oBAAoB;YAK3B,OAAO;IAoBrB,iDAAiD;IAC3C,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC;IAKpC;;;;;OAKG;IACG,SAAS,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IA2B5C,gEAAgE;IAC1D,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAOjE,6DAA6D;IACvD,UAAU,CACd,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,GAAG,GAAG,MAAM,GAAG,OAAO,GAC3B,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC;IAQhG;;;qEAGiE;IAC3D,YAAY,CAChB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE;QACN,IAAI,EAAE,GAAG,GAAG,MAAM,GAAG,OAAO,CAAC;QAC7B,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,GACA,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;IA8B9D;4EACwE;IAClE,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,WAAW,CAAC;IA0BtF;;;gEAG4D;IACtD,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAQzE,0DAA0D;IACpD,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IASzF;;;;;;;;;;;;;;;;;;;;+DAoB2D;IAoB3D;sEACkE;IAC5D,cAAc,CAClB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE;QAAE,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,UAAU,GAAG,kBAAkB,CAAA;KAAO,GACnF,OAAO,CAAC;QACT,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,OAAO,EAAE,OAAO,CAAC;KAClB,CAAC;IAwBF,gDAAgD;IAC1C,WAAW,CACf,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC;QACT,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,GAAG,IAAI,CAAC;IAST;;;;;;;;OAQG;IACG,cAAc,CAClB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,SAAS,GAAG,WAAW,GAAG,WAAW,CAAC;IAYjD;uEACmE;IAC7D,qBAAqB,CACzB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,OAAO,UAAO,GACb,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;IAMlE;iDAC6C;IACvC,mBAAmB,CACvB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GACb,OAAO,CACR,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE;YAAE,SAAS,CAAC,EAAE,MAAM,CAAC;YAAC,GAAG,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAC,CAC3F;IAeD;;;;;;;;;;;;;;;;;;oEAkBgE;IAC1D,gBAAgB,CAAC,MAAM,EAAE;QAC7B,SAAS,EAAE,MAAM,CAAC;QAClB;kCAC0B;QAC1B,IAAI,EAAE,MAAM,CAAC;QACb,uEAAuE;QACvE,WAAW,EAAE,MAAM,EAAE,CAAC;QACtB;8EACsE;QACtE,YAAY,CAAC,EAAE,SAAS,GAAG,IAAI,GAAG,SAAS,CAAC;QAC5C,wEAAwE;QACxE,WAAW,CAAC,EAAE,MAAM,GAAG,YAAY,CAAC;KACrC,GAAG,OAAO,CAAC;QACV,6DAA6D;QAC7D,OAAO,EAAE,MAAM,CAAC;QAChB,+CAA+C;QAC/C,UAAU,EAAE,MAAM,CAAC;QACnB,yEAAyE;QACzE,WAAW,EAAE,MAAM,CAAC;QACpB,sDAAsD;QACtD,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC;IAkDF;;;;;;;;;;;;;;;;;OAiBG;IACG,oBAAoB,CAAC,MAAM,EAAE;QACjC,SAAS,EAAE,MAAM,CAAC;QAClB,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,EAAE,CAAC;QACtB,YAAY,CAAC,EAAE,SAAS,GAAG,IAAI,GAAG,SAAS,CAAC;QAC5C,WAAW,CAAC,EAAE,MAAM,GAAG,YAAY,CAAC;KACrC,GAAG,OAAO,CAAC;QACV,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,EAAE,MAAM,CAAC;QACpB,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC;IAmDF;;;gDAG4C;IACtC,eAAe,CACnB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAY/D;;wDAEoD;IAC9C,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,WAAW,CAAC;IAU9F;;;;;;;;8DAQ0D;IAC1D,OAAO,CAAC,qBAAqB,CAA+D;YAC9E,qBAAqB;IAwBnC;;;yEAGqE;IAC/D,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,WAAW,CAAC;IAUvE;2EACuE;IACjE,iBAAiB,CACrB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAA;KAAE,GACjF,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;IAoB5E,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;QACjD,OAAO,EAAE,KAAK,CAAC;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,OAAO,CAAC;YAAC,EAAE,EAAE,OAAO,CAAA;SAAE,CAAC,CAAC;QAC3D,IAAI,EAAE,MAAM,EAAE,CAAC;QACf,MAAM,EAAE,KAAK,CAAC;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KAC9C,CAAC;CAkDH"}
|