@rubytech/create-maxy-code 0.1.451 → 0.1.452
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/__tests__/preserve-house-cloudflare.test.js +81 -2
- package/dist/index.js +10 -1
- package/dist/preserve-house-cloudflare.js +49 -2
- package/package.json +1 -1
- package/payload/platform/lib/storage-broker/dist/__tests__/cf-exec.test.js +24 -0
- package/payload/platform/lib/storage-broker/dist/__tests__/cf-exec.test.js.map +1 -1
- package/payload/platform/lib/storage-broker/dist/__tests__/house-scoped-token.test.d.ts +2 -0
- package/payload/platform/lib/storage-broker/dist/__tests__/house-scoped-token.test.d.ts.map +1 -0
- package/payload/platform/lib/storage-broker/dist/__tests__/house-scoped-token.test.js +48 -0
- package/payload/platform/lib/storage-broker/dist/__tests__/house-scoped-token.test.js.map +1 -0
- package/payload/platform/lib/storage-broker/dist/__tests__/remediate.test.js +6 -0
- package/payload/platform/lib/storage-broker/dist/__tests__/remediate.test.js.map +1 -1
- package/payload/platform/lib/storage-broker/dist/bin/remediate-run.d.ts.map +1 -1
- package/payload/platform/lib/storage-broker/dist/bin/remediate-run.js +14 -4
- package/payload/platform/lib/storage-broker/dist/bin/remediate-run.js.map +1 -1
- package/payload/platform/lib/storage-broker/dist/cf-exec.d.ts +1 -0
- package/payload/platform/lib/storage-broker/dist/cf-exec.d.ts.map +1 -1
- package/payload/platform/lib/storage-broker/dist/cf-exec.js +18 -0
- package/payload/platform/lib/storage-broker/dist/cf-exec.js.map +1 -1
- package/payload/platform/lib/storage-broker/dist/house-scoped-token.d.ts +9 -0
- package/payload/platform/lib/storage-broker/dist/house-scoped-token.d.ts.map +1 -0
- package/payload/platform/lib/storage-broker/dist/house-scoped-token.js +60 -0
- package/payload/platform/lib/storage-broker/dist/house-scoped-token.js.map +1 -0
- package/payload/platform/lib/storage-broker/dist/index.d.ts +1 -0
- package/payload/platform/lib/storage-broker/dist/index.d.ts.map +1 -1
- package/payload/platform/lib/storage-broker/dist/index.js +1 -0
- package/payload/platform/lib/storage-broker/dist/index.js.map +1 -1
- package/payload/platform/lib/storage-broker/dist/remediate.d.ts.map +1 -1
- package/payload/platform/lib/storage-broker/dist/remediate.js +14 -1
- package/payload/platform/lib/storage-broker/dist/remediate.js.map +1 -1
- package/payload/platform/lib/storage-broker/src/__tests__/cf-exec.test.ts +28 -1
- package/payload/platform/lib/storage-broker/src/__tests__/house-scoped-token.test.ts +48 -0
- package/payload/platform/lib/storage-broker/src/__tests__/remediate.test.ts +8 -0
- package/payload/platform/lib/storage-broker/src/bin/remediate-run.ts +17 -5
- package/payload/platform/lib/storage-broker/src/cf-exec.ts +22 -0
- package/payload/platform/lib/storage-broker/src/house-scoped-token.ts +72 -0
- package/payload/platform/lib/storage-broker/src/index.ts +1 -0
- package/payload/platform/lib/storage-broker/src/remediate.ts +14 -1
- package/payload/platform/plugins/admin/PLUGIN.md +1 -0
- package/payload/platform/plugins/admin/hooks/__tests__/quote-render-gate.test.sh +107 -0
- package/payload/platform/plugins/admin/hooks/quote-render-gate.sh +74 -0
- package/payload/platform/plugins/cloudflare/bin/__tests__/cf-token.test.sh +25 -1
- package/payload/platform/plugins/cloudflare/bin/cf-token.sh +9 -1
- package/payload/platform/plugins/cloudflare/references/api.md +3 -1
- package/payload/platform/plugins/scheduling/PLUGIN.md +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/house-scoped-token.test.d.ts +2 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/house-scoped-token.test.d.ts.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/house-scoped-token.test.js +36 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/house-scoped-token.test.js.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/house-scoped-token.d.ts +9 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/house-scoped-token.d.ts.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/house-scoped-token.js +51 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/house-scoped-token.js.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/publish-availability.js +16 -2
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/publish-availability.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/reconcile-bookings.js +16 -2
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/reconcile-bookings.js.map +1 -1
- package/payload/platform/scripts/lib/provision-account-dir.sh +6 -0
- package/payload/platform/services/claude-session-manager/dist/fs-watcher.d.ts +15 -0
- package/payload/platform/services/claude-session-manager/dist/fs-watcher.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/fs-watcher.js +38 -3
- package/payload/platform/services/claude-session-manager/dist/fs-watcher.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/http-server.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/http-server.js +21 -10
- package/payload/platform/services/claude-session-manager/dist/http-server.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/index.js +2 -0
- package/payload/platform/services/claude-session-manager/dist/index.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.js +8 -1
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/rc-daemon.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/rc-daemon.js +7 -0
- package/payload/platform/services/claude-session-manager/dist/rc-daemon.js.map +1 -1
- package/payload/server/{chunk-TTKYHVA7.js → chunk-SDYRKIYY.js} +70 -3
- package/payload/server/server.js +8 -9
- package/payload/server/{src-FBUXV2FV.js → src-554BYJMN.js} +5 -1
|
@@ -6,10 +6,10 @@
|
|
|
6
6
|
// Runs under `node --test dist/__tests__/*`.
|
|
7
7
|
import test from "node:test";
|
|
8
8
|
import assert from "node:assert/strict";
|
|
9
|
-
import { mkdtempSync, mkdirSync, writeFileSync, readFileSync, existsSync, rmSync } from "node:fs";
|
|
9
|
+
import { mkdtempSync, mkdirSync, writeFileSync, readFileSync, existsSync, rmSync, statSync } from "node:fs";
|
|
10
10
|
import { tmpdir } from "node:os";
|
|
11
11
|
import { join } from "node:path";
|
|
12
|
-
import { backupHouseCloudflare, restoreHouseCloudflare } from "../preserve-house-cloudflare.js";
|
|
12
|
+
import { backupHouseCloudflare, restoreHouseCloudflare, migrateHouseCredentialFromAccount, } from "../preserve-house-cloudflare.js";
|
|
13
13
|
function makeDirs() {
|
|
14
14
|
const root = mkdtempSync(join(tmpdir(), "house-1664-"));
|
|
15
15
|
const installDir = join(root, "install");
|
|
@@ -57,3 +57,82 @@ test("a fresh install with no house credential creates nothing", () => {
|
|
|
57
57
|
rmSync(root, { recursive: true, force: true });
|
|
58
58
|
}
|
|
59
59
|
});
|
|
60
|
+
// Task 1671 — upgrade-time relocation of a per-account master into the house
|
|
61
|
+
// file when none exists yet (a pre-1631 install crossing the 0.1.449 boundary).
|
|
62
|
+
function acctSecrets(installDir, id, contents) {
|
|
63
|
+
const dir = join(installDir, "data/accounts", id, "secrets");
|
|
64
|
+
mkdirSync(dir, { recursive: true });
|
|
65
|
+
const p = join(dir, "cloudflare.env");
|
|
66
|
+
writeFileSync(p, contents);
|
|
67
|
+
return p;
|
|
68
|
+
}
|
|
69
|
+
test("relocates a per-account master into the house file, mode 600, account untouched", () => {
|
|
70
|
+
const { root, installDir } = makeDirs();
|
|
71
|
+
try {
|
|
72
|
+
const acct = acctSecrets(installDir, "acc-1", "CLOUDFLARE_API_TOKEN=cfat_minter\nCLOUDFLARE_ACCOUNT_ID=deadbeef\nCF_PAGES_D1_TOKEN=stale\n");
|
|
73
|
+
const before = readFileSync(acct, "utf-8");
|
|
74
|
+
const r = migrateHouseCredentialFromAccount(installDir);
|
|
75
|
+
assert.equal(r.result, "relocated");
|
|
76
|
+
assert.equal(r.source, "acc-1");
|
|
77
|
+
const house = join(installDir, "platform/config", "cloudflare-house.env");
|
|
78
|
+
assert.equal(readFileSync(house, "utf-8"), "CLOUDFLARE_API_TOKEN=cfat_minter\nCLOUDFLARE_ACCOUNT_ID=deadbeef\n", "only the two master keys are relocated, no stale scoped token");
|
|
79
|
+
assert.equal(statSync(house).mode & 0o777, 0o600, "house file is mode 600");
|
|
80
|
+
assert.equal(readFileSync(acct, "utf-8"), before, "account file untouched");
|
|
81
|
+
}
|
|
82
|
+
finally {
|
|
83
|
+
rmSync(root, { recursive: true, force: true });
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
test("no-op when the house file already exists (never overwrites)", () => {
|
|
87
|
+
const { root, installDir, configDir } = makeDirs();
|
|
88
|
+
try {
|
|
89
|
+
const house = join(configDir, "cloudflare-house.env");
|
|
90
|
+
writeFileSync(house, "CLOUDFLARE_API_TOKEN=existing\nCLOUDFLARE_ACCOUNT_ID=xyz\n");
|
|
91
|
+
acctSecrets(installDir, "acc-1", "CLOUDFLARE_API_TOKEN=other\nCLOUDFLARE_ACCOUNT_ID=zzz\n");
|
|
92
|
+
const r = migrateHouseCredentialFromAccount(installDir);
|
|
93
|
+
assert.equal(r.result, "noop");
|
|
94
|
+
assert.equal(readFileSync(house, "utf-8"), "CLOUDFLARE_API_TOKEN=existing\nCLOUDFLARE_ACCOUNT_ID=xyz\n", "existing house file is untouched");
|
|
95
|
+
}
|
|
96
|
+
finally {
|
|
97
|
+
rmSync(root, { recursive: true, force: true });
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
test("absent when no account carries a master (no house file, no error)", () => {
|
|
101
|
+
const { root, installDir } = makeDirs();
|
|
102
|
+
try {
|
|
103
|
+
acctSecrets(installDir, "acc-1", "CF_PAGES_D1_TOKEN=scoped_only\n");
|
|
104
|
+
const r = migrateHouseCredentialFromAccount(installDir);
|
|
105
|
+
assert.equal(r.result, "absent");
|
|
106
|
+
assert.ok(!existsSync(join(installDir, "platform/config", "cloudflare-house.env")));
|
|
107
|
+
}
|
|
108
|
+
finally {
|
|
109
|
+
rmSync(root, { recursive: true, force: true });
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
test("deterministic pick — lexicographically-first account id wins", () => {
|
|
113
|
+
const { root, installDir } = makeDirs();
|
|
114
|
+
try {
|
|
115
|
+
acctSecrets(installDir, "bbb", "CLOUDFLARE_API_TOKEN=tok_b\nCLOUDFLARE_ACCOUNT_ID=idb\n");
|
|
116
|
+
acctSecrets(installDir, "aaa", "CLOUDFLARE_API_TOKEN=tok_a\nCLOUDFLARE_ACCOUNT_ID=ida\n");
|
|
117
|
+
const r = migrateHouseCredentialFromAccount(installDir);
|
|
118
|
+
assert.equal(r.source, "aaa");
|
|
119
|
+
assert.match(readFileSync(join(installDir, "platform/config", "cloudflare-house.env"), "utf-8"), /tok_a/);
|
|
120
|
+
}
|
|
121
|
+
finally {
|
|
122
|
+
rmSync(root, { recursive: true, force: true });
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
test("full upgrade path: pre-1631 relocates, second run is a no-op", () => {
|
|
126
|
+
const { root, installDir, persistentDir } = makeDirs();
|
|
127
|
+
try {
|
|
128
|
+
// Pre-1631 upgrade: no house file survives the wipe/restore (nothing saved).
|
|
129
|
+
simulateUpgrade(installDir, persistentDir);
|
|
130
|
+
assert.ok(!existsSync(join(installDir, "platform/config", "cloudflare-house.env")));
|
|
131
|
+
acctSecrets(installDir, "acc-1", "CLOUDFLARE_API_TOKEN=cfat_minter\nCLOUDFLARE_ACCOUNT_ID=deadbeef\n");
|
|
132
|
+
assert.equal(migrateHouseCredentialFromAccount(installDir).result, "relocated");
|
|
133
|
+
assert.equal(migrateHouseCredentialFromAccount(installDir).result, "noop", "second run is idempotent");
|
|
134
|
+
}
|
|
135
|
+
finally {
|
|
136
|
+
rmSync(root, { recursive: true, force: true });
|
|
137
|
+
}
|
|
138
|
+
});
|
package/dist/index.js
CHANGED
|
@@ -11,7 +11,7 @@ import { validateTierFlag, validateEntitlementBase64, applyTierToAccountConfig,
|
|
|
11
11
|
import { parseOsRelease, isUbuntuLike as isUbuntuLikePure, parseAptCacheCandidate, decideAptResolution, } from "./apt-resolve.js";
|
|
12
12
|
import { findPeerBrandOnDefaultNeo4jPort } from "./peer-brand-detect.js";
|
|
13
13
|
import { removeClientAdminsKey } from "./converge-client-admins.js";
|
|
14
|
-
import { backupHouseCloudflare, restoreHouseCloudflare } from "./preserve-house-cloudflare.js";
|
|
14
|
+
import { backupHouseCloudflare, restoreHouseCloudflare, migrateHouseCredentialFromAccount, } from "./preserve-house-cloudflare.js";
|
|
15
15
|
import { resolveNeo4jPidfileScrub } from "./neo4j-pidfile-scrub.js";
|
|
16
16
|
import { runInitLogging } from "./init-logging.js";
|
|
17
17
|
import { requireSupportedPlatform, detectPlatform } from "./platform-detect.js";
|
|
@@ -2558,6 +2558,15 @@ function deployPayload() {
|
|
|
2558
2558
|
if (restoreHouseCloudflare(INSTALL_DIR, persistentDir)) {
|
|
2559
2559
|
console.log(" Restored Cloudflare house credential (cloudflare-house.env preserved).");
|
|
2560
2560
|
}
|
|
2561
|
+
// Task 1671 — a pre-1631 install crossing the 0.1.449 boundary has no house
|
|
2562
|
+
// credential yet, but its per-account secrets still carry the account-wide
|
|
2563
|
+
// master (a minter, Task 1670). Relocate it into the house file so the broker
|
|
2564
|
+
// and calendar find it where the 1631 readers expect it, with zero manual
|
|
2565
|
+
// step. Idempotent: no-op once the house file exists (fresh install → absent).
|
|
2566
|
+
{
|
|
2567
|
+
const mig = migrateHouseCredentialFromAccount(INSTALL_DIR);
|
|
2568
|
+
console.log(` [install] op=house-cred-migrate result=${mig.result}${mig.source ? ` source=${mig.source}` : ""}`);
|
|
2569
|
+
}
|
|
2561
2570
|
// users.json is read directly from persistentDir by both
|
|
2562
2571
|
// platform/ui/app/lib/paths.ts (USERS_FILE = MAXY_DIR/users.json) and the
|
|
2563
2572
|
// admin MCP plugin (USERS_FILE = CONFIG_DIR/users.json). No copy into the
|
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
// calendar reconcile/publish scripts) fails with "house credential not found"
|
|
7
7
|
// until an operator re-mints the token by hand. The persistent copy lives in
|
|
8
8
|
// the brand's persistent config dir so even a full reinstall restores it.
|
|
9
|
-
import { existsSync, cpSync, chmodSync } from "node:fs";
|
|
10
|
-
import { join } from "node:path";
|
|
9
|
+
import { existsSync, cpSync, chmodSync, readdirSync, readFileSync, writeFileSync, mkdirSync } from "node:fs";
|
|
10
|
+
import { join, dirname } from "node:path";
|
|
11
11
|
const HOUSE_CRED_FILE = "cloudflare-house.env";
|
|
12
12
|
/**
|
|
13
13
|
* Copy the live house credential (if any) into the persistent store before the
|
|
@@ -35,3 +35,50 @@ export function restoreHouseCloudflare(installDir, persistentDir) {
|
|
|
35
35
|
chmodSync(dest, 0o600);
|
|
36
36
|
return true;
|
|
37
37
|
}
|
|
38
|
+
/**
|
|
39
|
+
* Task 1671 — on upgrade, if no house credential exists yet, relocate an
|
|
40
|
+
* existing per-account master (CLOUDFLARE_API_TOKEN + CLOUDFLARE_ACCOUNT_ID)
|
|
41
|
+
* into the house file (mode 600). This lets a pre-1631 install cross the 0.1.449
|
|
42
|
+
* boundary with zero manual step: the broker/calendar (Task 1670) then mint
|
|
43
|
+
* their scoped tokens from the relocated minter where the 1631 readers expect it.
|
|
44
|
+
*
|
|
45
|
+
* Fail-safe and idempotent:
|
|
46
|
+
* - never overwrites an existing house file (returns "noop");
|
|
47
|
+
* - never guesses a token (both master keys required);
|
|
48
|
+
* - deterministic: scans accounts sorted by id, takes the first with a master;
|
|
49
|
+
* - relocates only the two master keys, so no per-account scoped token leaks
|
|
50
|
+
* house-side.
|
|
51
|
+
*
|
|
52
|
+
* The relocated file is preserved on subsequent upgrades by backupHouseCloudflare
|
|
53
|
+
* (Task 1664), which runs before the wipe on the next install.
|
|
54
|
+
*/
|
|
55
|
+
export function migrateHouseCredentialFromAccount(installDir) {
|
|
56
|
+
const house = join(installDir, "platform/config", HOUSE_CRED_FILE);
|
|
57
|
+
if (existsSync(house))
|
|
58
|
+
return { result: "noop" };
|
|
59
|
+
const accountsDir = join(installDir, "data/accounts");
|
|
60
|
+
if (!existsSync(accountsDir))
|
|
61
|
+
return { result: "absent" };
|
|
62
|
+
for (const id of readdirSync(accountsDir).sort()) {
|
|
63
|
+
const secrets = join(accountsDir, id, "secrets", "cloudflare.env");
|
|
64
|
+
if (!existsSync(secrets))
|
|
65
|
+
continue;
|
|
66
|
+
const env = {};
|
|
67
|
+
for (const line of readFileSync(secrets, "utf8").split("\n")) {
|
|
68
|
+
const m = line.match(/^\s*([A-Za-z_][A-Za-z0-9_]*)=(.*)$/);
|
|
69
|
+
if (m)
|
|
70
|
+
env[m[1]] = m[2].trim();
|
|
71
|
+
}
|
|
72
|
+
const apiToken = env.CLOUDFLARE_API_TOKEN;
|
|
73
|
+
const accountId = env.CLOUDFLARE_ACCOUNT_ID;
|
|
74
|
+
if (!apiToken || !accountId)
|
|
75
|
+
continue;
|
|
76
|
+
mkdirSync(dirname(house), { recursive: true });
|
|
77
|
+
writeFileSync(house, `CLOUDFLARE_API_TOKEN=${apiToken}\nCLOUDFLARE_ACCOUNT_ID=${accountId}\n`, {
|
|
78
|
+
mode: 0o600,
|
|
79
|
+
});
|
|
80
|
+
chmodSync(house, 0o600);
|
|
81
|
+
return { result: "relocated", source: id };
|
|
82
|
+
}
|
|
83
|
+
return { result: "absent" };
|
|
84
|
+
}
|
package/package.json
CHANGED
|
@@ -5,6 +5,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const node_test_1 = __importDefault(require("node:test"));
|
|
7
7
|
const strict_1 = __importDefault(require("node:assert/strict"));
|
|
8
|
+
const node_fs_1 = require("node:fs");
|
|
9
|
+
const node_os_1 = require("node:os");
|
|
10
|
+
const node_path_1 = require("node:path");
|
|
8
11
|
const cf_exec_js_1 = require("../cf-exec.js");
|
|
9
12
|
const cred = { apiToken: "cfat_x", accountId: "acc-h" };
|
|
10
13
|
function recordingRun(stdout) {
|
|
@@ -145,4 +148,25 @@ function recordingFetch(response) {
|
|
|
145
148
|
const cf = (0, cf_exec_js_1.makeCfExec)(cred, run);
|
|
146
149
|
await strict_1.default.rejects(() => cf.d1List(), /not json/);
|
|
147
150
|
});
|
|
151
|
+
// Task 1670 — makeHouseCfExec resolves a scoped storage token from the house
|
|
152
|
+
// minter via cf-token.sh and uses THAT token (never the minter) for wrangler.
|
|
153
|
+
(0, node_test_1.default)("makeHouseCfExec runs wrangler with the scoped token, not the minter", async () => {
|
|
154
|
+
const platformRoot = (0, node_fs_1.mkdtempSync)((0, node_path_1.join)((0, node_os_1.tmpdir)(), "house-cfexec-"));
|
|
155
|
+
const cfg = (0, node_path_1.join)(platformRoot, "config");
|
|
156
|
+
(0, node_fs_1.mkdirSync)(cfg, { recursive: true });
|
|
157
|
+
const houseEnv = (0, node_path_1.join)(cfg, "cloudflare-house.env");
|
|
158
|
+
(0, node_fs_1.writeFileSync)(houseEnv, "CLOUDFLARE_API_TOKEN=cfat_minter\nCLOUDFLARE_ACCOUNT_ID=acc-h\n");
|
|
159
|
+
let sawToken = "";
|
|
160
|
+
const run = async (_cmd, args, env) => {
|
|
161
|
+
if (args.some((a) => a.endsWith("cf-token.sh"))) {
|
|
162
|
+
(0, node_fs_1.appendFileSync)(houseEnv, "CF_STORAGE_TOKEN=scoped_tok\n");
|
|
163
|
+
return { stdout: "CF_STORAGE_TOKEN\n" };
|
|
164
|
+
}
|
|
165
|
+
sawToken = env.CLOUDFLARE_API_TOKEN;
|
|
166
|
+
return { stdout: "[]" };
|
|
167
|
+
};
|
|
168
|
+
const cf = await (0, cf_exec_js_1.makeHouseCfExec)(platformRoot, run);
|
|
169
|
+
await cf.d1List();
|
|
170
|
+
strict_1.default.equal(sawToken, "scoped_tok", "wrangler saw the scoped token, not the minter");
|
|
171
|
+
});
|
|
148
172
|
//# sourceMappingURL=cf-exec.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cf-exec.test.js","sourceRoot":"","sources":["../../src/__tests__/cf-exec.test.ts"],"names":[],"mappings":";;;;;AAAA,0DAA6B;AAC7B,gEAAwC;AACxC,
|
|
1
|
+
{"version":3,"file":"cf-exec.test.js","sourceRoot":"","sources":["../../src/__tests__/cf-exec.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"house-scoped-token.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/house-scoped-token.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
// Task 1670 — resolveHouseScopedToken shells cf-token.sh against the house env
|
|
7
|
+
// file and reads back the persisted key value. The cf-token.sh invocation is
|
|
8
|
+
// mocked via the injected RunFn (it appends the key and echoes the key name).
|
|
9
|
+
const node_test_1 = __importDefault(require("node:test"));
|
|
10
|
+
const strict_1 = __importDefault(require("node:assert/strict"));
|
|
11
|
+
const node_fs_1 = require("node:fs");
|
|
12
|
+
const node_os_1 = require("node:os");
|
|
13
|
+
const node_path_1 = require("node:path");
|
|
14
|
+
const house_scoped_token_js_1 = require("../house-scoped-token.js");
|
|
15
|
+
function houseFile(contents) {
|
|
16
|
+
const dir = (0, node_fs_1.mkdtempSync)((0, node_path_1.join)((0, node_os_1.tmpdir)(), "hst-"));
|
|
17
|
+
const p = (0, node_path_1.join)(dir, "cloudflare-house.env");
|
|
18
|
+
(0, node_fs_1.writeFileSync)(p, contents);
|
|
19
|
+
return p;
|
|
20
|
+
}
|
|
21
|
+
(0, node_test_1.default)("mints and reads back the scoped token value", async () => {
|
|
22
|
+
const p = houseFile("CLOUDFLARE_API_TOKEN=cfat_minter\nCLOUDFLARE_ACCOUNT_ID=acc\n");
|
|
23
|
+
const run = async (_cmd, args) => {
|
|
24
|
+
strict_1.default.equal(args[1], "storage", "scope passed to cf-token.sh");
|
|
25
|
+
(0, node_fs_1.appendFileSync)(p, "CF_STORAGE_TOKEN=minted_value\n");
|
|
26
|
+
return { stdout: "CF_STORAGE_TOKEN\n" };
|
|
27
|
+
};
|
|
28
|
+
const tok = await (0, house_scoped_token_js_1.resolveHouseScopedToken)("storage", p, "/x/cf-token.sh", run);
|
|
29
|
+
strict_1.default.equal(tok, "minted_value");
|
|
30
|
+
});
|
|
31
|
+
(0, node_test_1.default)("reuse: a pre-existing key resolves to its value", async () => {
|
|
32
|
+
const p = houseFile("CLOUDFLARE_API_TOKEN=cfat_minter\nCLOUDFLARE_ACCOUNT_ID=acc\nCF_STORAGE_TOKEN=already_here\n");
|
|
33
|
+
// cf-token.sh reuse path writes nothing new, still echoes the key.
|
|
34
|
+
const run = async () => ({ stdout: "CF_STORAGE_TOKEN\n" });
|
|
35
|
+
const tok = await (0, house_scoped_token_js_1.resolveHouseScopedToken)("storage", p, "/x/cf-token.sh", run);
|
|
36
|
+
strict_1.default.equal(tok, "already_here");
|
|
37
|
+
});
|
|
38
|
+
(0, node_test_1.default)("throws when the persisted key is absent after the run", async () => {
|
|
39
|
+
const p = houseFile("CLOUDFLARE_API_TOKEN=cfat_minter\nCLOUDFLARE_ACCOUNT_ID=acc\n");
|
|
40
|
+
const run = async () => ({ stdout: "CF_STORAGE_TOKEN\n" }); // writes nothing
|
|
41
|
+
await strict_1.default.rejects(() => (0, house_scoped_token_js_1.resolveHouseScopedToken)("storage", p, "/x/cf-token.sh", run));
|
|
42
|
+
});
|
|
43
|
+
(0, node_test_1.default)("throws when cf-token.sh returns no key name", async () => {
|
|
44
|
+
const p = houseFile("CLOUDFLARE_API_TOKEN=cfat_minter\nCLOUDFLARE_ACCOUNT_ID=acc\n");
|
|
45
|
+
const run = async () => ({ stdout: "\n" });
|
|
46
|
+
await strict_1.default.rejects(() => (0, house_scoped_token_js_1.resolveHouseScopedToken)("storage", p, "/x/cf-token.sh", run));
|
|
47
|
+
});
|
|
48
|
+
//# sourceMappingURL=house-scoped-token.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"house-scoped-token.test.js","sourceRoot":"","sources":["../../src/__tests__/house-scoped-token.test.ts"],"names":[],"mappings":";;;;;AAAA,+EAA+E;AAC/E,6EAA6E;AAC7E,8EAA8E;AAC9E,0DAA6B;AAC7B,gEAAwC;AACxC,qCAA6E;AAC7E,qCAAiC;AACjC,yCAAiC;AACjC,oEAAmE;AAGnE,SAAS,SAAS,CAAC,QAAgB;IACjC,MAAM,GAAG,GAAG,IAAA,qBAAW,EAAC,IAAA,gBAAI,EAAC,IAAA,gBAAM,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC;IAChD,MAAM,CAAC,GAAG,IAAA,gBAAI,EAAC,GAAG,EAAE,sBAAsB,CAAC,CAAC;IAC5C,IAAA,uBAAa,EAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IAC3B,OAAO,CAAC,CAAC;AACX,CAAC;AAED,IAAA,mBAAI,EAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;IAC7D,MAAM,CAAC,GAAG,SAAS,CAAC,+DAA+D,CAAC,CAAC;IACrF,MAAM,GAAG,GAAU,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;QACtC,gBAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,6BAA6B,CAAC,CAAC;QAChE,IAAA,wBAAc,EAAC,CAAC,EAAE,iCAAiC,CAAC,CAAC;QACrD,OAAO,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC;IAC1C,CAAC,CAAC;IACF,MAAM,GAAG,GAAG,MAAM,IAAA,+CAAuB,EAAC,SAAS,EAAE,CAAC,EAAE,gBAAgB,EAAE,GAAG,CAAC,CAAC;IAC/E,gBAAM,CAAC,KAAK,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;AACpC,CAAC,CAAC,CAAC;AAEH,IAAA,mBAAI,EAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;IACjE,MAAM,CAAC,GAAG,SAAS,CAAC,8FAA8F,CAAC,CAAC;IACpH,mEAAmE;IACnE,MAAM,GAAG,GAAU,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC,CAAC;IAClE,MAAM,GAAG,GAAG,MAAM,IAAA,+CAAuB,EAAC,SAAS,EAAE,CAAC,EAAE,gBAAgB,EAAE,GAAG,CAAC,CAAC;IAC/E,gBAAM,CAAC,KAAK,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;AACpC,CAAC,CAAC,CAAC;AAEH,IAAA,mBAAI,EAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;IACvE,MAAM,CAAC,GAAG,SAAS,CAAC,+DAA+D,CAAC,CAAC;IACrF,MAAM,GAAG,GAAU,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC,CAAC,CAAC,iBAAiB;IACpF,MAAM,gBAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,IAAA,+CAAuB,EAAC,SAAS,EAAE,CAAC,EAAE,gBAAgB,EAAE,GAAG,CAAC,CAAC,CAAC;AAC3F,CAAC,CAAC,CAAC;AAEH,IAAA,mBAAI,EAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;IAC7D,MAAM,CAAC,GAAG,SAAS,CAAC,+DAA+D,CAAC,CAAC;IACrF,MAAM,GAAG,GAAU,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,MAAM,gBAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,IAAA,+CAAuB,EAAC,SAAS,EAAE,CAAC,EAAE,gBAAgB,EAAE,GAAG,CAAC,CAAC,CAAC;AAC3F,CAAC,CAAC,CAAC"}
|
|
@@ -20,4 +20,10 @@ const remediate_js_1 = require("../remediate.js");
|
|
|
20
20
|
const before = "CLOUDFLARE_ACCOUNT_ID=acc\nCLOUDFLARE_API_TOKEN=cfat_x\nCF_PAGES_D1_TOKEN=y\nCF_DNS_TOKEN=keep\n";
|
|
21
21
|
strict_1.default.equal((0, remediate_js_1.stripAccountWideTokens)(before), "CLOUDFLARE_ACCOUNT_ID=acc\nCF_DNS_TOKEN=keep\n");
|
|
22
22
|
});
|
|
23
|
+
// Task 1670 — the house-code data scopes reach the whole shared account, so a
|
|
24
|
+
// stray copy in a sub-account file is a cross-tenant leak and must be stripped.
|
|
25
|
+
(0, node_test_1.default)("strips the account-wide data scopes (storage, calendar-d1), keeps zone hosting tokens", () => {
|
|
26
|
+
const before = "CLOUDFLARE_ACCOUNT_ID=acc\nCF_STORAGE_TOKEN=cfat_d1r2\nCF_CALENDAR_D1_TOKEN=cfat_d1\nCF_DNS_TOKEN=keep\n";
|
|
27
|
+
strict_1.default.equal((0, remediate_js_1.stripAccountWideTokens)(before), "CLOUDFLARE_ACCOUNT_ID=acc\nCF_DNS_TOKEN=keep\n");
|
|
28
|
+
});
|
|
23
29
|
//# sourceMappingURL=remediate.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remediate.test.js","sourceRoot":"","sources":["../../src/__tests__/remediate.test.ts"],"names":[],"mappings":";;;;;AAAA,0DAA6B;AAC7B,gEAAwC;AACxC,kDAA0E;AAE1E,IAAA,mBAAI,EAAC,sCAAsC,EAAE,GAAG,EAAE;IAChD,MAAM,CAAC,GAAG,IAAA,8BAAe,EAAC,CAAC,WAAW,EAAE,kBAAkB,CAAC,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC;IACvF,gBAAM,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;AACpE,CAAC,CAAC,CAAC;AAEH,IAAA,mBAAI,EAAC,sCAAsC,EAAE,GAAG,EAAE;IAChD,gBAAM,CAAC,SAAS,CAAC,IAAA,8BAAe,EAAC,CAAC,WAAW,CAAC,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,EAAE;QACzE,EAAE,EAAE,IAAI;QACR,OAAO,EAAE,EAAE;KACZ,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,IAAA,mBAAI,EAAC,8EAA8E,EAAE,GAAG,EAAE;IACxF,MAAM,MAAM,GACV,kGAAkG,CAAC;IACrG,gBAAM,CAAC,KAAK,CAAC,IAAA,qCAAsB,EAAC,MAAM,CAAC,EAAE,gDAAgD,CAAC,CAAC;AACjG,CAAC,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"remediate.test.js","sourceRoot":"","sources":["../../src/__tests__/remediate.test.ts"],"names":[],"mappings":";;;;;AAAA,0DAA6B;AAC7B,gEAAwC;AACxC,kDAA0E;AAE1E,IAAA,mBAAI,EAAC,sCAAsC,EAAE,GAAG,EAAE;IAChD,MAAM,CAAC,GAAG,IAAA,8BAAe,EAAC,CAAC,WAAW,EAAE,kBAAkB,CAAC,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC;IACvF,gBAAM,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;AACpE,CAAC,CAAC,CAAC;AAEH,IAAA,mBAAI,EAAC,sCAAsC,EAAE,GAAG,EAAE;IAChD,gBAAM,CAAC,SAAS,CAAC,IAAA,8BAAe,EAAC,CAAC,WAAW,CAAC,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,EAAE;QACzE,EAAE,EAAE,IAAI;QACR,OAAO,EAAE,EAAE;KACZ,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,IAAA,mBAAI,EAAC,8EAA8E,EAAE,GAAG,EAAE;IACxF,MAAM,MAAM,GACV,kGAAkG,CAAC;IACrG,gBAAM,CAAC,KAAK,CAAC,IAAA,qCAAsB,EAAC,MAAM,CAAC,EAAE,gDAAgD,CAAC,CAAC;AACjG,CAAC,CAAC,CAAC;AAEH,8EAA8E;AAC9E,gFAAgF;AAChF,IAAA,mBAAI,EAAC,uFAAuF,EAAE,GAAG,EAAE;IACjG,MAAM,MAAM,GACV,0GAA0G,CAAC;IAC7G,gBAAM,CAAC,KAAK,CAAC,IAAA,qCAAsB,EAAC,MAAM,CAAC,EAAE,gDAAgD,CAAC,CAAC;AACjG,CAAC,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remediate-run.d.ts","sourceRoot":"","sources":["../../src/bin/remediate-run.ts"],"names":[],"mappings":"AAaA,OAAO,EAAoB,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"remediate-run.d.ts","sourceRoot":"","sources":["../../src/bin/remediate-run.ts"],"names":[],"mappings":"AAaA,OAAO,EAAoB,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAKxE,MAAM,WAAW,eAAe;IAC9B,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAC;IAC/D,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAC;IAC/D,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,QAAQ,CAAC,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAChD,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA2CtF"}
|
|
@@ -16,6 +16,7 @@ const remediate_js_1 = require("../remediate.js");
|
|
|
16
16
|
const registry_js_1 = require("../registry.js");
|
|
17
17
|
const house_credential_js_1 = require("../house-credential.js");
|
|
18
18
|
const cf_exec_js_1 = require("../cf-exec.js");
|
|
19
|
+
const house_scoped_token_js_1 = require("../house-scoped-token.js");
|
|
19
20
|
async function runRemediation(deps) {
|
|
20
21
|
const d1 = await deps.cfD1();
|
|
21
22
|
const r2 = await deps.cfR2();
|
|
@@ -67,7 +68,7 @@ function findMasterFromAccounts(accountsDir) {
|
|
|
67
68
|
env[m[1]] = m[2].trim();
|
|
68
69
|
}
|
|
69
70
|
if (env.CLOUDFLARE_API_TOKEN && env.CLOUDFLARE_ACCOUNT_ID) {
|
|
70
|
-
return { apiToken: env.CLOUDFLARE_API_TOKEN, accountId: env.CLOUDFLARE_ACCOUNT_ID };
|
|
71
|
+
return { apiToken: env.CLOUDFLARE_API_TOKEN, accountId: env.CLOUDFLARE_ACCOUNT_ID, path: p };
|
|
71
72
|
}
|
|
72
73
|
}
|
|
73
74
|
return null;
|
|
@@ -87,10 +88,13 @@ async function main() {
|
|
|
87
88
|
const configPath = (0, node_path_1.join)(platformRoot, "config", "cloudflare-house.env");
|
|
88
89
|
const mapping = JSON.parse((0, node_fs_1.readFileSync)(mappingFile, "utf8"));
|
|
89
90
|
// The master is wherever it lives today: the house file if already relocated,
|
|
90
|
-
// else the first sub-account secrets file that still carries it.
|
|
91
|
+
// else the first sub-account secrets file that still carries it. masterFile is
|
|
92
|
+
// the file cf-token.sh mints the scoped enumeration token against.
|
|
91
93
|
let master;
|
|
94
|
+
let masterFile;
|
|
92
95
|
try {
|
|
93
96
|
master = (0, house_credential_js_1.readHouseCredential)(platformRoot);
|
|
97
|
+
masterFile = configPath;
|
|
94
98
|
}
|
|
95
99
|
catch {
|
|
96
100
|
const found = findMasterFromAccounts(accountsDir);
|
|
@@ -99,9 +103,15 @@ async function main() {
|
|
|
99
103
|
process.exit(2);
|
|
100
104
|
return;
|
|
101
105
|
}
|
|
102
|
-
master = found;
|
|
106
|
+
master = { apiToken: found.apiToken, accountId: found.accountId };
|
|
107
|
+
masterFile = found.path;
|
|
103
108
|
}
|
|
104
|
-
|
|
109
|
+
// Task 1670 — the master is a minter; enumerate D1/R2 through a scoped storage
|
|
110
|
+
// token minted from it, never the minter directly. `master` (the raw minter)
|
|
111
|
+
// is still what runRemediation relocates into the house file below.
|
|
112
|
+
const cfTokenSh = (0, node_path_1.join)(platformRoot, "plugins/cloudflare/bin/cf-token.sh");
|
|
113
|
+
const scoped = await (0, house_scoped_token_js_1.resolveHouseScopedToken)("storage", masterFile, cfTokenSh);
|
|
114
|
+
const cf = (0, cf_exec_js_1.makeCfExec)({ apiToken: scoped, accountId: master.accountId });
|
|
105
115
|
const neo4j = (await import("neo4j-driver"));
|
|
106
116
|
const driver = neo4j.default.driver(process.env.NEO4J_URI, neo4j.default.auth.basic(process.env.NEO4J_USER ?? "neo4j", process.env.NEO4J_PASSWORD ?? ""));
|
|
107
117
|
const session = driver.session();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remediate-run.js","sourceRoot":"","sources":["../../src/bin/remediate-run.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,iFAAiF;AACjF,6EAA6E;AAC7E,+EAA+E;AAC/E,wDAAwD;AACxD,EAAE;AACF,+EAA+E;AAC/E,8EAA8E;AAC9E,iBAAiB;;
|
|
1
|
+
{"version":3,"file":"remediate-run.js","sourceRoot":"","sources":["../../src/bin/remediate-run.ts"],"names":[],"mappings":"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"}
|
|
@@ -26,4 +26,5 @@ export interface CfExec {
|
|
|
26
26
|
r2Create(name: string): Promise<void>;
|
|
27
27
|
}
|
|
28
28
|
export declare function makeCfExec(cred: HouseCredential, run?: RunFn, fetchFn?: FetchFn): CfExec;
|
|
29
|
+
export declare function makeHouseCfExec(platformRoot: string, run?: RunFn, fetchFn?: FetchFn): Promise<CfExec>;
|
|
29
30
|
//# sourceMappingURL=cf-exec.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cf-exec.d.ts","sourceRoot":"","sources":["../src/cf-exec.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cf-exec.d.ts","sourceRoot":"","sources":["../src/cf-exec.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAI7D,MAAM,MAAM,KAAK,GAAG,CAClB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EAAE,EACd,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KACxB,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAMjC,MAAM,MAAM,OAAO,GAAG,CACpB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,KACrE,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,CAAA;CAAE,CAAC,CAAC;AAEvE,MAAM,WAAW,MAAM;IACrB,MAAM,IAAI,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC,CAAC;IACpD,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAClD,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACrD,MAAM,IAAI,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC,CAAC;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACvC;AAuBD,wBAAgB,UAAU,CACxB,IAAI,EAAE,eAAe,EACrB,GAAG,GAAE,KAAkB,EACvB,OAAO,GAAE,OAAsB,GAC9B,MAAM,CAmFR;AASD,wBAAsB,eAAe,CACnC,YAAY,EAAE,MAAM,EACpB,GAAG,GAAE,KAAkB,EACvB,OAAO,GAAE,OAAsB,GAC9B,OAAO,CAAC,MAAM,CAAC,CAMjB"}
|
|
@@ -4,7 +4,11 @@
|
|
|
4
4
|
// wrangler. `run` is injectable so the wiring is unit-testable without wrangler.
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.makeCfExec = makeCfExec;
|
|
7
|
+
exports.makeHouseCfExec = makeHouseCfExec;
|
|
7
8
|
const node_child_process_1 = require("node:child_process");
|
|
9
|
+
const node_path_1 = require("node:path");
|
|
10
|
+
const house_credential_js_1 = require("./house-credential.js");
|
|
11
|
+
const house_scoped_token_js_1 = require("./house-scoped-token.js");
|
|
8
12
|
const defaultFetch = (url, init) => fetch(url, init);
|
|
9
13
|
const defaultRun = (cmd, args, env) => new Promise((resolve, reject) => {
|
|
10
14
|
(0, node_child_process_1.execFile)(cmd, args, { env }, (err, stdout, stderr) => {
|
|
@@ -94,4 +98,18 @@ function makeCfExec(cred, run = defaultRun, fetchFn = defaultFetch) {
|
|
|
94
98
|
},
|
|
95
99
|
};
|
|
96
100
|
}
|
|
101
|
+
// Task 1670 — build a CfExec whose token is a D1+R2 "storage" scope minted from
|
|
102
|
+
// the house minter, never the minter used directly (a minter cannot run
|
|
103
|
+
// wrangler d1/r2 or hit the D1/R2 API — it returns 10000). cf-token.sh
|
|
104
|
+
// mints-or-reuses and persists the scope house-side; the resolved value is used
|
|
105
|
+
// for both the wrangler run env and the API Bearer. The two UI-route broker
|
|
106
|
+
// sites and remediate-run construct their CfExec through the house minter this
|
|
107
|
+
// way instead of `makeCfExec(readHouseCredential(...))`.
|
|
108
|
+
async function makeHouseCfExec(platformRoot, run = defaultRun, fetchFn = defaultFetch) {
|
|
109
|
+
const cred = (0, house_credential_js_1.readHouseCredential)(platformRoot);
|
|
110
|
+
const houseEnvPath = (0, node_path_1.join)(platformRoot, "config", "cloudflare-house.env");
|
|
111
|
+
const cfTokenSh = (0, node_path_1.join)(platformRoot, "plugins/cloudflare/bin/cf-token.sh");
|
|
112
|
+
const scoped = await (0, house_scoped_token_js_1.resolveHouseScopedToken)("storage", houseEnvPath, cfTokenSh, run);
|
|
113
|
+
return makeCfExec({ apiToken: scoped, accountId: cred.accountId }, run, fetchFn);
|
|
114
|
+
}
|
|
97
115
|
//# sourceMappingURL=cf-exec.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cf-exec.js","sourceRoot":"","sources":["../src/cf-exec.ts"],"names":[],"mappings":";AAAA,yEAAyE;AACzE,iFAAiF;AACjF,iFAAiF;;
|
|
1
|
+
{"version":3,"file":"cf-exec.js","sourceRoot":"","sources":["../src/cf-exec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { RunFn } from "./cf-exec.js";
|
|
2
|
+
/**
|
|
3
|
+
* Resolve a scoped data token (e.g. "storage" = D1+R2) from the house minter.
|
|
4
|
+
* Shells cf-token.sh, which mints or reuses the scope and persists the key into
|
|
5
|
+
* the house env file, echoing the key name. Reads that key back and returns its
|
|
6
|
+
* value. Throws if the key is absent after the run (never returns the minter).
|
|
7
|
+
*/
|
|
8
|
+
export declare function resolveHouseScopedToken(scope: string, houseEnvPath: string, cfTokenShPath: string, run?: RunFn): Promise<string>;
|
|
9
|
+
//# sourceMappingURL=house-scoped-token.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"house-scoped-token.d.ts","sourceRoot":"","sources":["../src/house-scoped-token.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAqB1C;;;;;GAKG;AACH,wBAAsB,uBAAuB,CAC3C,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,MAAM,EACrB,GAAG,GAAE,KAAkB,GACtB,OAAO,CAAC,MAAM,CAAC,CAiBjB"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Task 1670 — the house credential is a minter. Each broker/calendar consumer
|
|
3
|
+
// mints (and thereafter reuses) a scoped data token from it via cf-token.sh, the
|
|
4
|
+
// single Cloudflare mint/reuse state machine. This wrapper shells that script
|
|
5
|
+
// against the house env file and reads back the persisted key value. The mint
|
|
6
|
+
// logic itself is not duplicated here — it lives only in cf-token.sh.
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.resolveHouseScopedToken = resolveHouseScopedToken;
|
|
9
|
+
const node_fs_1 = require("node:fs");
|
|
10
|
+
const node_child_process_1 = require("node:child_process");
|
|
11
|
+
const defaultRun = (cmd, args, env) => new Promise((resolve, reject) => {
|
|
12
|
+
(0, node_child_process_1.execFile)(cmd, args, { env }, (err, stdout, stderr) => {
|
|
13
|
+
if (err) {
|
|
14
|
+
reject(new Error(`${cmd} ${args.join(" ")} failed: ${err.message}\n${stderr}`));
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
resolve({ stdout: stdout.toString() });
|
|
18
|
+
});
|
|
19
|
+
});
|
|
20
|
+
function readKey(path, key) {
|
|
21
|
+
for (const line of (0, node_fs_1.readFileSync)(path, "utf8").split("\n")) {
|
|
22
|
+
const m = line.match(/^([A-Z0-9_]+)=(.*)$/);
|
|
23
|
+
if (m && m[1] === key)
|
|
24
|
+
return m[2].trim();
|
|
25
|
+
}
|
|
26
|
+
return undefined;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Resolve a scoped data token (e.g. "storage" = D1+R2) from the house minter.
|
|
30
|
+
* Shells cf-token.sh, which mints or reuses the scope and persists the key into
|
|
31
|
+
* the house env file, echoing the key name. Reads that key back and returns its
|
|
32
|
+
* value. Throws if the key is absent after the run (never returns the minter).
|
|
33
|
+
*/
|
|
34
|
+
async function resolveHouseScopedToken(scope, houseEnvPath, cfTokenShPath, run = defaultRun) {
|
|
35
|
+
const preexisting = readKey(houseEnvPath, keyForScope(scope)) !== undefined;
|
|
36
|
+
const { stdout } = await run("bash", [cfTokenShPath, scope, houseEnvPath], { ...process.env });
|
|
37
|
+
const keyName = stdout.trim().split("\n").pop()?.trim() ?? "";
|
|
38
|
+
if (!keyName)
|
|
39
|
+
throw new Error(`storage-broker: cf-token.sh ${scope} returned no key name`);
|
|
40
|
+
const value = readKey(houseEnvPath, keyName);
|
|
41
|
+
if (!value) {
|
|
42
|
+
throw new Error(`storage-broker: scoped token ${keyName} absent in ${houseEnvPath} after mint`);
|
|
43
|
+
}
|
|
44
|
+
console.error(`[storage-broker] op=house-scoped-token src=house scope=${scope} action=${preexisting ? "reuse" : "mint"} result=active`);
|
|
45
|
+
return value;
|
|
46
|
+
}
|
|
47
|
+
// The persisted key name for each scope, mirroring cf-token.sh's scope table.
|
|
48
|
+
// Used only to derive the mint/reuse action for the observability line; the
|
|
49
|
+
// authoritative key is whatever cf-token.sh echoes.
|
|
50
|
+
function keyForScope(scope) {
|
|
51
|
+
switch (scope) {
|
|
52
|
+
case "storage":
|
|
53
|
+
return "CF_STORAGE_TOKEN";
|
|
54
|
+
case "calendar-d1":
|
|
55
|
+
return "CF_CALENDAR_D1_TOKEN";
|
|
56
|
+
default:
|
|
57
|
+
return "";
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=house-scoped-token.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"house-scoped-token.js","sourceRoot":"","sources":["../src/house-scoped-token.ts"],"names":[],"mappings":";AAAA,8EAA8E;AAC9E,iFAAiF;AACjF,8EAA8E;AAC9E,8EAA8E;AAC9E,sEAAsE;;AA+BtE,0DAsBC;AAnDD,qCAAuC;AACvC,2DAA8C;AAG9C,MAAM,UAAU,GAAU,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,CAC3C,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;IAC9B,IAAA,6BAAQ,EAAC,GAAG,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;QACnD,IAAI,GAAG,EAAE,CAAC;YACR,MAAM,CAAC,IAAI,KAAK,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,GAAG,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC,CAAC,CAAC;YAChF,OAAO;QACT,CAAC;QACD,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEL,SAAS,OAAO,CAAC,IAAY,EAAE,GAAW;IACxC,KAAK,MAAM,IAAI,IAAI,IAAA,sBAAY,EAAC,IAAI,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1D,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;QAC5C,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG;YAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC5C,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;GAKG;AACI,KAAK,UAAU,uBAAuB,CAC3C,KAAa,EACb,YAAoB,EACpB,aAAqB,EACrB,MAAa,UAAU;IAEvB,MAAM,WAAW,GAAG,OAAO,CAAC,YAAY,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,KAAK,SAAS,CAAC;IAC5E,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,CAC1B,MAAM,EACN,CAAC,aAAa,EAAE,KAAK,EAAE,YAAY,CAAC,EACpC,EAAE,GAAG,OAAO,CAAC,GAAG,EAA4B,CAC7C,CAAC;IACF,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC9D,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,KAAK,uBAAuB,CAAC,CAAC;IAC3F,MAAM,KAAK,GAAG,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IAC7C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,gCAAgC,OAAO,cAAc,YAAY,aAAa,CAAC,CAAC;IAClG,CAAC;IACD,OAAO,CAAC,KAAK,CACX,0DAA0D,KAAK,WAAW,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,gBAAgB,CACzH,CAAC;IACF,OAAO,KAAK,CAAC;AACf,CAAC;AAED,8EAA8E;AAC9E,4EAA4E;AAC5E,oDAAoD;AACpD,SAAS,WAAW,CAAC,KAAa;IAChC,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,SAAS;YACZ,OAAO,kBAAkB,CAAC;QAC5B,KAAK,aAAa;YAChB,OAAO,sBAAsB,CAAC;QAChC;YACE,OAAO,EAAE,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
@@ -2,6 +2,7 @@ export * from "./authorize.js";
|
|
|
2
2
|
export * from "./registry.js";
|
|
3
3
|
export * from "./house-credential.js";
|
|
4
4
|
export * from "./cf-exec.js";
|
|
5
|
+
export * from "./house-scoped-token.js";
|
|
5
6
|
export * from "./audit.js";
|
|
6
7
|
export * from "./remediate.js";
|
|
7
8
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAQA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,uBAAuB,CAAC;AACtC,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAQA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,uBAAuB,CAAC;AACtC,cAAc,cAAc,CAAC;AAC7B,cAAc,yBAAyB,CAAC;AACxC,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC"}
|
|
@@ -25,6 +25,7 @@ __exportStar(require("./authorize.js"), exports);
|
|
|
25
25
|
__exportStar(require("./registry.js"), exports);
|
|
26
26
|
__exportStar(require("./house-credential.js"), exports);
|
|
27
27
|
__exportStar(require("./cf-exec.js"), exports);
|
|
28
|
+
__exportStar(require("./house-scoped-token.js"), exports);
|
|
28
29
|
__exportStar(require("./audit.js"), exports);
|
|
29
30
|
__exportStar(require("./remediate.js"), exports);
|
|
30
31
|
//# sourceMappingURL=index.js.map
|