@markusylisiurunen/tau 0.3.91 → 0.3.92
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/core/cli.js +0 -3
- package/dist/core/cli.js.map +1 -1
- package/dist/core/code_mode/sdk.js +0 -1
- package/dist/core/code_mode/sdk.js.map +1 -1
- package/dist/core/config/content_loader.js +1 -3
- package/dist/core/config/content_loader.js.map +1 -1
- package/dist/core/config/index.js +1 -1
- package/dist/core/config/index.js.map +1 -1
- package/dist/core/config/schema.js +0 -67
- package/dist/core/config/schema.js.map +1 -1
- package/dist/core/index.js +0 -1
- package/dist/core/index.js.map +1 -1
- package/dist/core/personas.js +1 -2
- package/dist/core/personas.js.map +1 -1
- package/dist/core/static/tau_docs/config-reference.md +0 -24
- package/dist/core/static/tau_docs/configuration.md +1 -1
- package/dist/core/static/tau_docs/credentials.md +3 -18
- package/dist/core/static/tau_docs/index.md +0 -1
- package/dist/core/static/tau_docs/manifest.json +0 -1
- package/dist/core/static/tau_docs/personas.md +3 -3
- package/dist/core/static/tau_docs/security.md +6 -18
- package/dist/core/static/tau_docs/subagents.md +0 -1
- package/dist/core/static/tau_docs/tools.md +6 -8
- package/dist/core/static/tau_docs/troubleshooting.md +10 -12
- package/dist/core/static/tau_docs/tui.md +1 -0
- package/dist/core/subagents/claude_code_runner.mjs +43 -43
- package/dist/core/subagents/registry.js +1 -2
- package/dist/core/subagents/registry.js.map +1 -1
- package/dist/core/subagents/types.js +1 -2
- package/dist/core/subagents/types.js.map +1 -1
- package/dist/core/tools/code.js +0 -3
- package/dist/core/tools/code.js.map +1 -1
- package/dist/core/tools/presentation.js +1 -2
- package/dist/core/tools/presentation.js.map +1 -1
- package/dist/core/tools/tool_names.js +1 -3
- package/dist/core/tools/tool_names.js.map +1 -1
- package/dist/core/utils/speech.js +6 -2
- package/dist/core/utils/speech.js.map +1 -1
- package/dist/core/version.js +1 -1
- package/dist/main.js +0 -23
- package/dist/main.js.map +1 -1
- package/package.json +3 -4
- package/dist/core/code_mode/nook.js +0 -226
- package/dist/core/code_mode/nook.js.map +0 -1
- package/dist/core/nook/cli.js +0 -258
- package/dist/core/nook/cli.js.map +0 -1
- package/dist/core/nook/client.js +0 -372
- package/dist/core/nook/client.js.map +0 -1
- package/dist/core/nook/deploy.js +0 -152
- package/dist/core/nook/deploy.js.map +0 -1
- package/dist/core/nook/index.js +0 -5
- package/dist/core/nook/index.js.map +0 -1
- package/dist/core/nook/setup.js +0 -429
- package/dist/core/nook/setup.js.map +0 -1
- package/dist/core/nook/validation.js +0 -164
- package/dist/core/nook/validation.js.map +0 -1
- package/dist/core/static/code_mode/nook/documentation.md +0 -144
- package/dist/core/static/code_mode/nook/sandbox_runner.mjs +0 -1
- package/dist/core/static/tau_docs/nook.md +0 -270
- package/dist/nook/worker/index.js +0 -1175
- package/dist/nook/worker/index.js.map +0 -1
package/dist/core/nook/setup.js
DELETED
|
@@ -1,429 +0,0 @@
|
|
|
1
|
-
import { spawn } from "node:child_process";
|
|
2
|
-
import { copyFileSync, existsSync, mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync, } from "node:fs";
|
|
3
|
-
import { tmpdir } from "node:os";
|
|
4
|
-
import { dirname, join } from "node:path";
|
|
5
|
-
import { StringDecoder } from "node:string_decoder";
|
|
6
|
-
import { fileURLToPath } from "node:url";
|
|
7
|
-
import { spawnWithCapture } from "../utils/spawn_capture.js";
|
|
8
|
-
import { truncateToBytesFromEnd } from "../utils/truncate.js";
|
|
9
|
-
import { normalizeNookDomain } from "./validation.js";
|
|
10
|
-
const WORKER_NAME = "tau-nook";
|
|
11
|
-
const R2_BUCKET = "tau-nook-assets";
|
|
12
|
-
const COMMAND_OUTPUT_CAPTURE_BYTES = 1024 * 1024;
|
|
13
|
-
function appendWranglerOutput(state, text) {
|
|
14
|
-
if (!text)
|
|
15
|
-
return;
|
|
16
|
-
state.output += text;
|
|
17
|
-
if (Buffer.byteLength(state.output, "utf-8") > COMMAND_OUTPUT_CAPTURE_BYTES) {
|
|
18
|
-
state.output = truncateToBytesFromEnd(state.output, COMMAND_OUTPUT_CAPTURE_BYTES);
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
function streamWranglerText(text, state, stdout) {
|
|
22
|
-
if (!text)
|
|
23
|
-
return;
|
|
24
|
-
appendWranglerOutput(state, text);
|
|
25
|
-
state.pendingLine += text;
|
|
26
|
-
const parts = state.pendingLine.split(/\r\n|\n|\r/);
|
|
27
|
-
state.pendingLine = parts.pop() ?? "";
|
|
28
|
-
for (const part of parts) {
|
|
29
|
-
stdout(part);
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
async function runWranglerCaptured(args, options = {}) {
|
|
33
|
-
const result = await spawnWithCapture("wrangler", args, {
|
|
34
|
-
cwd: options.cwd,
|
|
35
|
-
env: options.env,
|
|
36
|
-
stdio: ["ignore", "pipe", "pipe"],
|
|
37
|
-
captureOutput: "combined",
|
|
38
|
-
maxCaptureBytes: COMMAND_OUTPUT_CAPTURE_BYTES,
|
|
39
|
-
maxCaptureMode: "ignore",
|
|
40
|
-
maxCaptureStrategy: "tail",
|
|
41
|
-
});
|
|
42
|
-
return { output: (result.output ?? "").trim(), exitCode: result.exitCode };
|
|
43
|
-
}
|
|
44
|
-
function streamWrangler(args, options) {
|
|
45
|
-
return new Promise((resolve, reject) => {
|
|
46
|
-
const child = spawn("wrangler", args, {
|
|
47
|
-
cwd: options.cwd,
|
|
48
|
-
env: options.env,
|
|
49
|
-
stdio: ["ignore", "pipe", "pipe"],
|
|
50
|
-
});
|
|
51
|
-
const stdoutDecoder = new StringDecoder("utf8");
|
|
52
|
-
const stderrDecoder = new StringDecoder("utf8");
|
|
53
|
-
const streamState = { pendingLine: "", output: "" };
|
|
54
|
-
let settled = false;
|
|
55
|
-
child.stdout?.on("data", (chunk) => streamWranglerText(stdoutDecoder.write(chunk), streamState, options.stdout));
|
|
56
|
-
child.stderr?.on("data", (chunk) => streamWranglerText(stderrDecoder.write(chunk), streamState, options.stdout));
|
|
57
|
-
child.on("error", (error) => {
|
|
58
|
-
if (settled)
|
|
59
|
-
return;
|
|
60
|
-
settled = true;
|
|
61
|
-
reject(error instanceof Error ? error : new Error(String(error)));
|
|
62
|
-
});
|
|
63
|
-
child.on("close", (exitCode) => {
|
|
64
|
-
if (settled)
|
|
65
|
-
return;
|
|
66
|
-
settled = true;
|
|
67
|
-
streamWranglerText(stdoutDecoder.end(), streamState, options.stdout);
|
|
68
|
-
streamWranglerText(stderrDecoder.end(), streamState, options.stdout);
|
|
69
|
-
if (streamState.pendingLine) {
|
|
70
|
-
options.stdout(streamState.pendingLine);
|
|
71
|
-
}
|
|
72
|
-
resolve({ output: streamState.output.trim(), exitCode });
|
|
73
|
-
});
|
|
74
|
-
});
|
|
75
|
-
}
|
|
76
|
-
async function runWrangler(args, options = {}) {
|
|
77
|
-
const result = await runWranglerCaptured(args, options);
|
|
78
|
-
if (result.exitCode !== 0) {
|
|
79
|
-
throw new Error(`wrangler ${args.join(" ")} failed:\n${result.output}`);
|
|
80
|
-
}
|
|
81
|
-
return result.output;
|
|
82
|
-
}
|
|
83
|
-
async function runWranglerStreaming(args, options) {
|
|
84
|
-
const result = await streamWrangler(args, options);
|
|
85
|
-
if (result.exitCode !== 0) {
|
|
86
|
-
throw new Error(`wrangler ${args.join(" ")} failed:\n${result.output}`);
|
|
87
|
-
}
|
|
88
|
-
return result.output;
|
|
89
|
-
}
|
|
90
|
-
async function runNpmInstall(options) {
|
|
91
|
-
const result = await spawnWithCapture("npm", ["install", "--omit=dev", "--ignore-scripts", "--no-audit", "--no-fund"], {
|
|
92
|
-
cwd: options.cwd,
|
|
93
|
-
env: options.env,
|
|
94
|
-
stdio: ["ignore", "pipe", "pipe"],
|
|
95
|
-
captureOutput: "combined",
|
|
96
|
-
maxCaptureBytes: COMMAND_OUTPUT_CAPTURE_BYTES,
|
|
97
|
-
maxCaptureMode: "ignore",
|
|
98
|
-
maxCaptureStrategy: "tail",
|
|
99
|
-
});
|
|
100
|
-
if (result.exitCode !== 0) {
|
|
101
|
-
throw new Error(`npm install failed while preparing bundled Nook Worker:\n${result.output}`);
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
function parseWranglerR2BucketInfo(output) {
|
|
105
|
-
let parsed;
|
|
106
|
-
try {
|
|
107
|
-
parsed = JSON.parse(output);
|
|
108
|
-
}
|
|
109
|
-
catch {
|
|
110
|
-
throw new Error(`wrangler r2 bucket info returned invalid JSON:\n${output}`);
|
|
111
|
-
}
|
|
112
|
-
if (!parsed ||
|
|
113
|
-
typeof parsed !== "object" ||
|
|
114
|
-
typeof parsed.name !== "string") {
|
|
115
|
-
throw new Error(`wrangler r2 bucket info returned unexpected JSON:\n${output}`);
|
|
116
|
-
}
|
|
117
|
-
return parsed;
|
|
118
|
-
}
|
|
119
|
-
function isMissingR2BucketOutput(output) {
|
|
120
|
-
return (output.includes("10007") ||
|
|
121
|
-
/bucket.*(?:does not exist|not found)|(?:does not exist|not found).*bucket/i.test(output));
|
|
122
|
-
}
|
|
123
|
-
async function readExistingR2BucketInfo(env) {
|
|
124
|
-
const result = await runWranglerCaptured(["r2", "bucket", "info", R2_BUCKET, "--json"], { env });
|
|
125
|
-
if (result.exitCode !== 0) {
|
|
126
|
-
if (isMissingR2BucketOutput(result.output))
|
|
127
|
-
return undefined;
|
|
128
|
-
throw new Error(`wrangler r2 bucket info ${R2_BUCKET} failed:\n${result.output}`);
|
|
129
|
-
}
|
|
130
|
-
const info = parseWranglerR2BucketInfo(result.output);
|
|
131
|
-
if (info.name !== R2_BUCKET) {
|
|
132
|
-
throw new Error(`wrangler r2 bucket info returned bucket '${info.name}' while checking '${R2_BUCKET}'.`);
|
|
133
|
-
}
|
|
134
|
-
return info;
|
|
135
|
-
}
|
|
136
|
-
async function ensureR2Bucket(args) {
|
|
137
|
-
const existing = await readExistingR2BucketInfo(args.env);
|
|
138
|
-
if (existing) {
|
|
139
|
-
args.stdout(`R2 bucket ${existing.name} already exists`);
|
|
140
|
-
return;
|
|
141
|
-
}
|
|
142
|
-
await runWrangler(["r2", "bucket", "create", R2_BUCKET], { env: args.env });
|
|
143
|
-
args.stdout(`created R2 bucket ${R2_BUCKET}`);
|
|
144
|
-
}
|
|
145
|
-
function requireWranglerAuth(env) {
|
|
146
|
-
if (!env.CLOUDFLARE_API_TOKEN?.trim()) {
|
|
147
|
-
throw new Error("CLOUDFLARE_API_TOKEN is required for non-interactive wrangler auth.");
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
function normalizeAccessTeamDomain(value) {
|
|
151
|
-
const normalized = value.trim().replace(/\/+$/, "");
|
|
152
|
-
let url;
|
|
153
|
-
try {
|
|
154
|
-
url = new URL(normalized);
|
|
155
|
-
}
|
|
156
|
-
catch {
|
|
157
|
-
throw new Error("Cloudflare Access team domain must be an HTTPS URL.");
|
|
158
|
-
}
|
|
159
|
-
if (url.protocol !== "https:" || url.pathname !== "/" || url.search || url.hash) {
|
|
160
|
-
throw new Error("Cloudflare Access team domain must be an HTTPS origin URL.");
|
|
161
|
-
}
|
|
162
|
-
return url.origin;
|
|
163
|
-
}
|
|
164
|
-
function bundledWorkerPath() {
|
|
165
|
-
return join(dirname(fileURLToPath(import.meta.url)), "../../nook/worker/index.js");
|
|
166
|
-
}
|
|
167
|
-
function packageRootPath() {
|
|
168
|
-
return join(dirname(fileURLToPath(import.meta.url)), "../../..");
|
|
169
|
-
}
|
|
170
|
-
function nookWorkerDependencies() {
|
|
171
|
-
const packageJson = JSON.parse(readFileSync(join(packageRootPath(), "package.json"), "utf-8"));
|
|
172
|
-
const jose = packageJson.dependencies?.jose;
|
|
173
|
-
if (!jose) {
|
|
174
|
-
throw new Error("Tau package is missing required Nook Worker dependency 'jose'.");
|
|
175
|
-
}
|
|
176
|
-
return { jose };
|
|
177
|
-
}
|
|
178
|
-
function writeBundledWorkerProject(tempDir) {
|
|
179
|
-
const workerPath = bundledWorkerPath();
|
|
180
|
-
if (!existsSync(workerPath)) {
|
|
181
|
-
throw new Error(`bundled Nook Worker is missing at ${workerPath}. Rebuild or reinstall Tau before running tau nook setup.`);
|
|
182
|
-
}
|
|
183
|
-
const workerDir = join(tempDir, "worker");
|
|
184
|
-
mkdirSync(workerDir, { recursive: true });
|
|
185
|
-
copyFileSync(workerPath, join(workerDir, "index.js"));
|
|
186
|
-
writeFileSync(join(tempDir, "package.json"), JSON.stringify({
|
|
187
|
-
private: true,
|
|
188
|
-
type: "module",
|
|
189
|
-
dependencies: nookWorkerDependencies(),
|
|
190
|
-
}, null, 2), "utf-8");
|
|
191
|
-
}
|
|
192
|
-
function writeWranglerProject(args) {
|
|
193
|
-
writeBundledWorkerProject(args.tempDir);
|
|
194
|
-
const wranglerConfig = {
|
|
195
|
-
name: WORKER_NAME,
|
|
196
|
-
main: "worker/index.js",
|
|
197
|
-
compatibility_date: "2026-07-06",
|
|
198
|
-
workers_dev: false,
|
|
199
|
-
routes: [{ pattern: `${args.domain}/*`, zone_name: args.zoneName }],
|
|
200
|
-
vars: {
|
|
201
|
-
NOOK_DOMAIN: args.domain,
|
|
202
|
-
NOOK_ACCESS_TEAM_DOMAIN: args.accessTeamDomain,
|
|
203
|
-
NOOK_ACCESS_AUD: args.accessAud,
|
|
204
|
-
},
|
|
205
|
-
r2_buckets: [
|
|
206
|
-
{
|
|
207
|
-
binding: "ASSETS",
|
|
208
|
-
bucket_name: R2_BUCKET,
|
|
209
|
-
},
|
|
210
|
-
],
|
|
211
|
-
durable_objects: {
|
|
212
|
-
bindings: [
|
|
213
|
-
{ name: "REGISTRY_DO", class_name: "RegistryDO" },
|
|
214
|
-
{ name: "SITE_DO", class_name: "SiteDO" },
|
|
215
|
-
],
|
|
216
|
-
},
|
|
217
|
-
migrations: [
|
|
218
|
-
{
|
|
219
|
-
tag: "v1",
|
|
220
|
-
new_sqlite_classes: ["RegistryDO", "SiteDO"],
|
|
221
|
-
},
|
|
222
|
-
],
|
|
223
|
-
};
|
|
224
|
-
writeFileSync(join(args.tempDir, "wrangler.json"), JSON.stringify(wranglerConfig, null, 2), "utf-8");
|
|
225
|
-
}
|
|
226
|
-
export async function runNookSetup(args) {
|
|
227
|
-
const env = args.env ?? process.env;
|
|
228
|
-
const stdout = args.stdout ?? console.log;
|
|
229
|
-
requireWranglerAuth(env);
|
|
230
|
-
const tempDir = mkdtempSync(join(tmpdir(), "tau-nook-"));
|
|
231
|
-
try {
|
|
232
|
-
writeWranglerProject({
|
|
233
|
-
tempDir,
|
|
234
|
-
domain: args.domain,
|
|
235
|
-
zoneName: args.zoneName,
|
|
236
|
-
accessTeamDomain: args.accessTeamDomain,
|
|
237
|
-
accessAud: args.accessAud,
|
|
238
|
-
});
|
|
239
|
-
await runNpmInstall({ cwd: tempDir, env });
|
|
240
|
-
await ensureR2Bucket({ env, stdout });
|
|
241
|
-
stdout(`deploying Worker ${WORKER_NAME} with Wrangler...`);
|
|
242
|
-
await runWranglerStreaming(["deploy"], { cwd: tempDir, env, stdout });
|
|
243
|
-
stdout(`deployed Worker ${WORKER_NAME}`);
|
|
244
|
-
stdout("");
|
|
245
|
-
stdout("Configure DNS for:");
|
|
246
|
-
stdout(` ${args.domain}`);
|
|
247
|
-
stdout("");
|
|
248
|
-
stdout("Configure Cloudflare Access for this control-plane path:");
|
|
249
|
-
stdout(` https://${args.domain}/__nook/*`);
|
|
250
|
-
stdout(` application audience: ${args.accessAud}`);
|
|
251
|
-
stdout(" disable the Cookie Path Attribute");
|
|
252
|
-
stdout(" add user Allow and service-token Service Auth policies");
|
|
253
|
-
stdout("");
|
|
254
|
-
stdout("Add this to Tau config after creating a Cloudflare Access service token:");
|
|
255
|
-
stdout(JSON.stringify({
|
|
256
|
-
nook: {
|
|
257
|
-
domain: args.domain,
|
|
258
|
-
accessClientId: "<cloudflare-access-client-id>",
|
|
259
|
-
accessClientSecretEnv: "NOOK_ACCESS_CLIENT_SECRET",
|
|
260
|
-
},
|
|
261
|
-
}, null, 2));
|
|
262
|
-
}
|
|
263
|
-
finally {
|
|
264
|
-
rmSync(tempDir, { recursive: true, force: true });
|
|
265
|
-
}
|
|
266
|
-
}
|
|
267
|
-
export async function runNookDestroy(args) {
|
|
268
|
-
if (!args.yes) {
|
|
269
|
-
throw new Error("tau nook destroy requires --yes.");
|
|
270
|
-
}
|
|
271
|
-
const env = args.env ?? process.env;
|
|
272
|
-
const stdout = args.stdout ?? console.log;
|
|
273
|
-
const fetchImpl = args.fetchImpl ?? fetch;
|
|
274
|
-
requireWranglerAuth(env);
|
|
275
|
-
try {
|
|
276
|
-
const cleanupResponse = await fetchImpl(`https://${args.domain}/__nook/api/destroy`, {
|
|
277
|
-
method: "POST",
|
|
278
|
-
headers: {
|
|
279
|
-
"CF-Access-Client-Id": args.accessClientId,
|
|
280
|
-
"CF-Access-Client-Secret": args.accessClientSecret,
|
|
281
|
-
},
|
|
282
|
-
});
|
|
283
|
-
if (!cleanupResponse.ok) {
|
|
284
|
-
throw new Error(await cleanupResponse.text());
|
|
285
|
-
}
|
|
286
|
-
stdout(`deleted Nook R2 objects and Durable Object data for ${args.domain}`);
|
|
287
|
-
}
|
|
288
|
-
catch (error) {
|
|
289
|
-
throw new Error(`failed to clean up Nook data through https://${args.domain}/__nook/api/destroy: ${error instanceof Error ? error.message : String(error)}`);
|
|
290
|
-
}
|
|
291
|
-
try {
|
|
292
|
-
await runWrangler(["delete", WORKER_NAME, "--force"], { env });
|
|
293
|
-
stdout(`deleted Worker ${WORKER_NAME}`);
|
|
294
|
-
}
|
|
295
|
-
catch (error) {
|
|
296
|
-
stdout(`Worker ${WORKER_NAME} was not deleted: ${error.message}`);
|
|
297
|
-
}
|
|
298
|
-
try {
|
|
299
|
-
await runWrangler(["r2", "bucket", "delete", R2_BUCKET], { env });
|
|
300
|
-
stdout(`deleted R2 bucket ${R2_BUCKET}`);
|
|
301
|
-
}
|
|
302
|
-
catch (error) {
|
|
303
|
-
stdout(`R2 bucket ${R2_BUCKET} was not deleted: ${error.message}`);
|
|
304
|
-
}
|
|
305
|
-
}
|
|
306
|
-
export function parseNookInfrastructureDomain(args) {
|
|
307
|
-
const remaining = [];
|
|
308
|
-
let domain = args.env?.NOOK_DOMAIN;
|
|
309
|
-
for (let i = 0; i < args.argv.length; i += 1) {
|
|
310
|
-
const arg = args.argv[i];
|
|
311
|
-
if (arg === "--domain" || arg.startsWith("--domain=")) {
|
|
312
|
-
const value = arg.includes("=") ? arg.slice("--domain=".length) : args.argv[++i];
|
|
313
|
-
if (!value) {
|
|
314
|
-
throw new Error("missing value for --domain");
|
|
315
|
-
}
|
|
316
|
-
domain = value;
|
|
317
|
-
continue;
|
|
318
|
-
}
|
|
319
|
-
remaining.push(arg);
|
|
320
|
-
}
|
|
321
|
-
if (!domain?.trim()) {
|
|
322
|
-
throw new Error("missing nook domain. pass --domain <domain> or set NOOK_DOMAIN.");
|
|
323
|
-
}
|
|
324
|
-
return {
|
|
325
|
-
domain: normalizeNookDomain(domain),
|
|
326
|
-
remaining,
|
|
327
|
-
};
|
|
328
|
-
}
|
|
329
|
-
export function parseNookSetupInputs(args) {
|
|
330
|
-
const parsedDomain = parseNookInfrastructureDomain({ argv: args.argv, env: args.env });
|
|
331
|
-
const remaining = [];
|
|
332
|
-
let zoneName = args.env?.NOOK_ZONE_NAME;
|
|
333
|
-
let accessTeamDomain = args.env?.NOOK_ACCESS_TEAM_DOMAIN;
|
|
334
|
-
let accessAud = args.env?.NOOK_ACCESS_AUD;
|
|
335
|
-
for (let i = 0; i < parsedDomain.remaining.length; i += 1) {
|
|
336
|
-
const arg = parsedDomain.remaining[i];
|
|
337
|
-
if (arg === "--zone-name" || arg.startsWith("--zone-name=")) {
|
|
338
|
-
const value = arg.includes("=")
|
|
339
|
-
? arg.slice("--zone-name=".length)
|
|
340
|
-
: parsedDomain.remaining[++i];
|
|
341
|
-
if (!value)
|
|
342
|
-
throw new Error("missing value for --zone-name");
|
|
343
|
-
zoneName = value;
|
|
344
|
-
continue;
|
|
345
|
-
}
|
|
346
|
-
if (arg === "--access-team-domain" || arg.startsWith("--access-team-domain=")) {
|
|
347
|
-
const value = arg.includes("=")
|
|
348
|
-
? arg.slice("--access-team-domain=".length)
|
|
349
|
-
: parsedDomain.remaining[++i];
|
|
350
|
-
if (!value)
|
|
351
|
-
throw new Error("missing value for --access-team-domain");
|
|
352
|
-
accessTeamDomain = value;
|
|
353
|
-
continue;
|
|
354
|
-
}
|
|
355
|
-
if (arg === "--access-aud" || arg.startsWith("--access-aud=")) {
|
|
356
|
-
const value = arg.includes("=")
|
|
357
|
-
? arg.slice("--access-aud=".length)
|
|
358
|
-
: parsedDomain.remaining[++i];
|
|
359
|
-
if (!value)
|
|
360
|
-
throw new Error("missing value for --access-aud");
|
|
361
|
-
accessAud = value;
|
|
362
|
-
continue;
|
|
363
|
-
}
|
|
364
|
-
remaining.push(arg);
|
|
365
|
-
}
|
|
366
|
-
if (!zoneName?.trim()) {
|
|
367
|
-
throw new Error("missing Cloudflare zone name. pass --zone-name <zone> or set NOOK_ZONE_NAME.");
|
|
368
|
-
}
|
|
369
|
-
if (!accessTeamDomain?.trim()) {
|
|
370
|
-
throw new Error("missing Cloudflare Access team domain. pass --access-team-domain <url> or set NOOK_ACCESS_TEAM_DOMAIN.");
|
|
371
|
-
}
|
|
372
|
-
if (!accessAud?.trim()) {
|
|
373
|
-
throw new Error("missing Cloudflare Access application audience. pass --access-aud <aud> or set NOOK_ACCESS_AUD.");
|
|
374
|
-
}
|
|
375
|
-
return {
|
|
376
|
-
domain: parsedDomain.domain,
|
|
377
|
-
zoneName: normalizeNookDomain(zoneName),
|
|
378
|
-
accessTeamDomain: normalizeAccessTeamDomain(accessTeamDomain),
|
|
379
|
-
accessAud: accessAud.trim(),
|
|
380
|
-
remaining,
|
|
381
|
-
};
|
|
382
|
-
}
|
|
383
|
-
export function parseNookDestroyInputs(args) {
|
|
384
|
-
const parsedDomain = parseNookInfrastructureDomain({ argv: args.argv, env: args.env });
|
|
385
|
-
const remaining = [];
|
|
386
|
-
let accessClientId = args.env?.NOOK_ACCESS_CLIENT_ID;
|
|
387
|
-
let accessClientSecret = args.env?.NOOK_ACCESS_CLIENT_SECRET;
|
|
388
|
-
let yes = false;
|
|
389
|
-
for (let i = 0; i < parsedDomain.remaining.length; i += 1) {
|
|
390
|
-
const arg = parsedDomain.remaining[i];
|
|
391
|
-
if (arg === "--yes") {
|
|
392
|
-
yes = true;
|
|
393
|
-
continue;
|
|
394
|
-
}
|
|
395
|
-
if (arg === "--access-client-id" || arg.startsWith("--access-client-id=")) {
|
|
396
|
-
const value = arg.includes("=")
|
|
397
|
-
? arg.slice("--access-client-id=".length)
|
|
398
|
-
: parsedDomain.remaining[++i];
|
|
399
|
-
if (!value)
|
|
400
|
-
throw new Error("missing value for --access-client-id");
|
|
401
|
-
accessClientId = value;
|
|
402
|
-
continue;
|
|
403
|
-
}
|
|
404
|
-
if (arg === "--access-client-secret" || arg.startsWith("--access-client-secret=")) {
|
|
405
|
-
const value = arg.includes("=")
|
|
406
|
-
? arg.slice("--access-client-secret=".length)
|
|
407
|
-
: parsedDomain.remaining[++i];
|
|
408
|
-
if (!value)
|
|
409
|
-
throw new Error("missing value for --access-client-secret");
|
|
410
|
-
accessClientSecret = value;
|
|
411
|
-
continue;
|
|
412
|
-
}
|
|
413
|
-
remaining.push(arg);
|
|
414
|
-
}
|
|
415
|
-
if (!accessClientId?.trim()) {
|
|
416
|
-
throw new Error("missing Cloudflare Access client id. pass --access-client-id <id> or set NOOK_ACCESS_CLIENT_ID.");
|
|
417
|
-
}
|
|
418
|
-
if (!accessClientSecret?.trim()) {
|
|
419
|
-
throw new Error("missing Cloudflare Access client secret. pass --access-client-secret <secret> or set NOOK_ACCESS_CLIENT_SECRET.");
|
|
420
|
-
}
|
|
421
|
-
return {
|
|
422
|
-
domain: parsedDomain.domain,
|
|
423
|
-
accessClientId: accessClientId.trim(),
|
|
424
|
-
accessClientSecret: accessClientSecret.trim(),
|
|
425
|
-
yes,
|
|
426
|
-
remaining,
|
|
427
|
-
};
|
|
428
|
-
}
|
|
429
|
-
//# sourceMappingURL=setup.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../src/core/nook/setup.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,164 +0,0 @@
|
|
|
1
|
-
import { posix } from "node:path";
|
|
2
|
-
export const NOOK_RESERVED_PATH_PREFIX = "/__nook";
|
|
3
|
-
const NOOK_DOMAIN_PATTERN = /^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)+$/;
|
|
4
|
-
const RESERVED_SITE_SLUGS = new Set([
|
|
5
|
-
"admin",
|
|
6
|
-
"api",
|
|
7
|
-
"assets",
|
|
8
|
-
"login",
|
|
9
|
-
"logout",
|
|
10
|
-
"nook",
|
|
11
|
-
"quick",
|
|
12
|
-
"static",
|
|
13
|
-
"www",
|
|
14
|
-
]);
|
|
15
|
-
export const NOOK_DEPLOY_LIMITS = {
|
|
16
|
-
maxFiles: 1_000,
|
|
17
|
-
maxTotalBytes: 100 * 1024 * 1024,
|
|
18
|
-
maxFileBytes: 10 * 1024 * 1024,
|
|
19
|
-
maxPathLength: 512,
|
|
20
|
-
};
|
|
21
|
-
export function normalizeNookDomain(rawDomain) {
|
|
22
|
-
const value = rawDomain.trim();
|
|
23
|
-
if (!value) {
|
|
24
|
-
throw new Error("Nook domain must be a DNS hostname without a path.");
|
|
25
|
-
}
|
|
26
|
-
let hostname = value;
|
|
27
|
-
if (/^https?:\/\//i.test(value)) {
|
|
28
|
-
let url;
|
|
29
|
-
try {
|
|
30
|
-
url = new URL(value);
|
|
31
|
-
}
|
|
32
|
-
catch {
|
|
33
|
-
throw new Error("Nook domain must be a DNS hostname without a path.");
|
|
34
|
-
}
|
|
35
|
-
if (url.username ||
|
|
36
|
-
url.password ||
|
|
37
|
-
url.port ||
|
|
38
|
-
url.pathname !== "/" ||
|
|
39
|
-
url.search ||
|
|
40
|
-
url.hash) {
|
|
41
|
-
throw new Error("Nook domain must be a DNS hostname without a path.");
|
|
42
|
-
}
|
|
43
|
-
hostname = url.hostname;
|
|
44
|
-
}
|
|
45
|
-
else if (value.includes("/") ||
|
|
46
|
-
value.includes("?") ||
|
|
47
|
-
value.includes("#") ||
|
|
48
|
-
value.includes("@")) {
|
|
49
|
-
throw new Error("Nook domain must be a DNS hostname without a path.");
|
|
50
|
-
}
|
|
51
|
-
const domain = hostname.toLowerCase();
|
|
52
|
-
if (!NOOK_DOMAIN_PATTERN.test(domain)) {
|
|
53
|
-
throw new Error("Nook domain must be a DNS hostname without a path.");
|
|
54
|
-
}
|
|
55
|
-
return domain;
|
|
56
|
-
}
|
|
57
|
-
function validateNookPathLabel(value, label, code) {
|
|
58
|
-
if (!/^[a-z0-9][a-z0-9-]{0,61}[a-z0-9]$/.test(value)) {
|
|
59
|
-
return {
|
|
60
|
-
ok: false,
|
|
61
|
-
code,
|
|
62
|
-
message: `${label} must be 2-63 lowercase letters, numbers, or hyphens, and must start and end with a letter or number.`,
|
|
63
|
-
};
|
|
64
|
-
}
|
|
65
|
-
return { ok: true };
|
|
66
|
-
}
|
|
67
|
-
export function validateNookSiteSlug(slug) {
|
|
68
|
-
const result = validateNookPathLabel(slug, "Site slug", "invalid_slug");
|
|
69
|
-
if (!result.ok)
|
|
70
|
-
return result;
|
|
71
|
-
if (RESERVED_SITE_SLUGS.has(slug)) {
|
|
72
|
-
return {
|
|
73
|
-
ok: false,
|
|
74
|
-
code: "reserved_slug",
|
|
75
|
-
message: `Site slug '${slug}' is reserved.`,
|
|
76
|
-
};
|
|
77
|
-
}
|
|
78
|
-
return { ok: true };
|
|
79
|
-
}
|
|
80
|
-
export function validateNookTemplateName(name) {
|
|
81
|
-
return validateNookPathLabel(name, "Template name", "invalid_template_name");
|
|
82
|
-
}
|
|
83
|
-
export function normalizeNookAssetPath(rawPath) {
|
|
84
|
-
if (!rawPath || rawPath.includes("\0")) {
|
|
85
|
-
throw new Error("asset path must be non-empty and cannot contain null bytes");
|
|
86
|
-
}
|
|
87
|
-
if (!rawPath.startsWith("/")) {
|
|
88
|
-
throw new Error(`asset path '${rawPath}' must start with /`);
|
|
89
|
-
}
|
|
90
|
-
if (/^[A-Za-z]:[\\/]/.test(rawPath) || rawPath.startsWith("//")) {
|
|
91
|
-
throw new Error(`asset path '${rawPath}' must not be an absolute filesystem path`);
|
|
92
|
-
}
|
|
93
|
-
const rawSegments = rawPath.split(/[\\/]/).filter(Boolean);
|
|
94
|
-
if (rawSegments.includes("..")) {
|
|
95
|
-
throw new Error(`asset path '${rawPath}' must not contain ..`);
|
|
96
|
-
}
|
|
97
|
-
const normalized = posix.normalize(rawPath);
|
|
98
|
-
if (normalized === NOOK_RESERVED_PATH_PREFIX ||
|
|
99
|
-
normalized.startsWith(`${NOOK_RESERVED_PATH_PREFIX}/`)) {
|
|
100
|
-
throw new Error(`asset path '${rawPath}' is under reserved ${NOOK_RESERVED_PATH_PREFIX}/`);
|
|
101
|
-
}
|
|
102
|
-
if (normalized.length > NOOK_DEPLOY_LIMITS.maxPathLength) {
|
|
103
|
-
throw new Error(`asset path '${rawPath}' exceeds maximum length ${NOOK_DEPLOY_LIMITS.maxPathLength}`);
|
|
104
|
-
}
|
|
105
|
-
return normalized;
|
|
106
|
-
}
|
|
107
|
-
export function assertVisibleNookRelativePath(relativePath) {
|
|
108
|
-
const segments = relativePath.split(/[\\/]/).filter(Boolean);
|
|
109
|
-
for (const segment of segments) {
|
|
110
|
-
if (segment.startsWith(".")) {
|
|
111
|
-
throw new Error(`hidden deploy path '${relativePath}' is not allowed`);
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
function validateNookFileManifest(files, options) {
|
|
116
|
-
if (files.length === 0) {
|
|
117
|
-
throw new Error(`${options.artifactLabel} directory has no files`);
|
|
118
|
-
}
|
|
119
|
-
if (files.length > NOOK_DEPLOY_LIMITS.maxFiles) {
|
|
120
|
-
throw new Error(`${options.artifactLabel} exceeds maximum file count ${NOOK_DEPLOY_LIMITS.maxFiles}`);
|
|
121
|
-
}
|
|
122
|
-
let totalBytes = 0;
|
|
123
|
-
const paths = new Set();
|
|
124
|
-
let hasIndex = false;
|
|
125
|
-
for (const file of files) {
|
|
126
|
-
const path = normalizeNookAssetPath(file.path);
|
|
127
|
-
if (path !== file.path) {
|
|
128
|
-
throw new Error(`asset path '${file.path}' must be normalized as '${path}'`);
|
|
129
|
-
}
|
|
130
|
-
if (paths.has(path)) {
|
|
131
|
-
throw new Error(`duplicate deploy path '${path}'`);
|
|
132
|
-
}
|
|
133
|
-
if (path.split("/").some((segment) => segment.startsWith("."))) {
|
|
134
|
-
throw new Error(`hidden deploy path '${path}' is not allowed`);
|
|
135
|
-
}
|
|
136
|
-
if (typeof file.sha256 !== "string" || !/^[a-f0-9]{64}$/.test(file.sha256)) {
|
|
137
|
-
throw new Error(`asset path '${path}' has invalid sha256`);
|
|
138
|
-
}
|
|
139
|
-
paths.add(path);
|
|
140
|
-
if (path === "/index.html") {
|
|
141
|
-
hasIndex = true;
|
|
142
|
-
}
|
|
143
|
-
if (!Number.isInteger(file.sizeBytes) || file.sizeBytes < 0) {
|
|
144
|
-
throw new Error(`asset path '${path}' has invalid size`);
|
|
145
|
-
}
|
|
146
|
-
if (file.sizeBytes > NOOK_DEPLOY_LIMITS.maxFileBytes) {
|
|
147
|
-
throw new Error(`asset path '${path}' exceeds maximum file size ${NOOK_DEPLOY_LIMITS.maxFileBytes}`);
|
|
148
|
-
}
|
|
149
|
-
totalBytes += file.sizeBytes;
|
|
150
|
-
}
|
|
151
|
-
if (options.requireIndex && !hasIndex) {
|
|
152
|
-
throw new Error("deploy directory must contain root index.html");
|
|
153
|
-
}
|
|
154
|
-
if (totalBytes > NOOK_DEPLOY_LIMITS.maxTotalBytes) {
|
|
155
|
-
throw new Error(`${options.artifactLabel} exceeds maximum total size ${NOOK_DEPLOY_LIMITS.maxTotalBytes}`);
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
export function validateNookManifest(files) {
|
|
159
|
-
validateNookFileManifest(files, { artifactLabel: "deployment", requireIndex: true });
|
|
160
|
-
}
|
|
161
|
-
export function validateNookTemplateManifest(files) {
|
|
162
|
-
validateNookFileManifest(files, { artifactLabel: "template", requireIndex: false });
|
|
163
|
-
}
|
|
164
|
-
//# sourceMappingURL=validation.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../../src/core/nook/validation.ts"],"names":[],"mappings":"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"}
|