@markusylisiurunen/tau 0.3.91 → 0.3.93
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/models/openrouter.js +6 -0
- package/dist/core/models/openrouter.js.map +1 -1
- package/dist/core/personas.js +30 -4
- 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/openrouter.md +1 -0
- package/dist/core/static/tau_docs/personas.md +4 -4
- 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/telegram/workspace.js +1 -1
- package/dist/core/telegram/workspace.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/diff_tool/app/dist/assets/{core-DVIaxTZj.js → core-DaUcjNBm.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{highlights-BKf96Xcr.js → highlights-ey_YWY7Q.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{index-DKDNDuYd.js → index-B7CqEx6P.js} +19 -19
- package/dist/diff_tool/app/dist/assets/langs-BAlu0Oiy.js +1 -0
- package/dist/diff_tool/app/dist/assets/{shiki-DmA--L4w.js → shiki-BDtWTy6K.js} +2 -2
- package/dist/diff_tool/app/dist/assets/{stream-tokenizer-5ezp0vCr.js → stream-tokenizer-Dpnp6Te1.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{themes-BNoMSXBX.js → themes-snQUZ0v5.js} +2 -2
- package/dist/diff_tool/app/dist/index.html +1 -1
- package/dist/main.js +0 -23
- package/dist/main.js.map +1 -1
- package/package.json +4 -5
- 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/diff_tool/app/dist/assets/langs-D3RgqfNW.js +0 -1
- package/dist/nook/worker/index.js +0 -1175
- package/dist/nook/worker/index.js.map +0 -1
package/dist/core/nook/cli.js
DELETED
|
@@ -1,258 +0,0 @@
|
|
|
1
|
-
import { resolve } from "node:path";
|
|
2
|
-
import { createNookClientFromConfig } from "./client.js";
|
|
3
|
-
import { buildNookDeployManifest, buildNookTemplateManifest } from "./deploy.js";
|
|
4
|
-
import { parseNookDestroyInputs, parseNookSetupInputs, runNookDestroy, runNookSetup, } from "./setup.js";
|
|
5
|
-
export class NookCliError extends Error {
|
|
6
|
-
constructor(message) {
|
|
7
|
-
super(message);
|
|
8
|
-
this.name = "NookCliError";
|
|
9
|
-
}
|
|
10
|
-
}
|
|
11
|
-
function parseValue(arg, argv, index) {
|
|
12
|
-
const eqIndex = arg.indexOf("=");
|
|
13
|
-
if (eqIndex !== -1) {
|
|
14
|
-
const value = arg.slice(eqIndex + 1);
|
|
15
|
-
if (!value)
|
|
16
|
-
throw new NookCliError(`missing value for ${arg.slice(0, eqIndex)}`);
|
|
17
|
-
return { value, nextIndex: index };
|
|
18
|
-
}
|
|
19
|
-
const value = argv[index + 1];
|
|
20
|
-
if (!value || value.startsWith("-")) {
|
|
21
|
-
throw new NookCliError(`missing value for ${arg}`);
|
|
22
|
-
}
|
|
23
|
-
return { value, nextIndex: index + 1 };
|
|
24
|
-
}
|
|
25
|
-
export function printNookHelp(log = console.log) {
|
|
26
|
-
log([
|
|
27
|
-
"usage:",
|
|
28
|
-
" tau nook setup --domain <domain> --zone-name <zone> --access-team-domain <url> --access-aud <aud>",
|
|
29
|
-
" tau nook destroy --domain <domain> --access-client-id <id> --access-client-secret <secret> --yes",
|
|
30
|
-
" tau nook skill",
|
|
31
|
-
" tau nook deploy <dir> --site <slug> [--public]",
|
|
32
|
-
" tau nook copy <site> <dir>",
|
|
33
|
-
" tau nook list",
|
|
34
|
-
" tau nook delete <site>",
|
|
35
|
-
" tau nook template list",
|
|
36
|
-
" tau nook template copy <name> <dir>",
|
|
37
|
-
" tau nook template save <name> <dir>",
|
|
38
|
-
" tau nook template delete <name>",
|
|
39
|
-
" tau nook kv get <site> <key>",
|
|
40
|
-
" tau nook kv put <site> <key> <json>",
|
|
41
|
-
" tau nook kv delete <site> <key>",
|
|
42
|
-
" tau nook kv list <site> [--prefix <prefix>]",
|
|
43
|
-
].join("\n"));
|
|
44
|
-
}
|
|
45
|
-
export async function runNookCommand(argv, options) {
|
|
46
|
-
const stdout = options.stdout ?? console.log;
|
|
47
|
-
const [subcommand, ...args] = argv;
|
|
48
|
-
if (!subcommand || subcommand === "--help" || subcommand === "-h") {
|
|
49
|
-
printNookHelp(stdout);
|
|
50
|
-
return;
|
|
51
|
-
}
|
|
52
|
-
try {
|
|
53
|
-
if (subcommand === "setup") {
|
|
54
|
-
const parsed = parseNookSetupInputs({ argv: args, env: options.env });
|
|
55
|
-
if (parsed.remaining.length > 0)
|
|
56
|
-
throw new Error(`unknown option: ${parsed.remaining[0]}`);
|
|
57
|
-
await runNookSetup({
|
|
58
|
-
domain: parsed.domain,
|
|
59
|
-
zoneName: parsed.zoneName,
|
|
60
|
-
accessTeamDomain: parsed.accessTeamDomain,
|
|
61
|
-
accessAud: parsed.accessAud,
|
|
62
|
-
env: options.env,
|
|
63
|
-
stdout,
|
|
64
|
-
});
|
|
65
|
-
return;
|
|
66
|
-
}
|
|
67
|
-
if (subcommand === "destroy") {
|
|
68
|
-
const parsed = parseNookDestroyInputs({ argv: args, env: options.env });
|
|
69
|
-
if (parsed.remaining.length > 0)
|
|
70
|
-
throw new Error(`unknown option: ${parsed.remaining[0]}`);
|
|
71
|
-
await runNookDestroy({
|
|
72
|
-
domain: parsed.domain,
|
|
73
|
-
accessClientId: parsed.accessClientId,
|
|
74
|
-
accessClientSecret: parsed.accessClientSecret,
|
|
75
|
-
yes: parsed.yes,
|
|
76
|
-
env: options.env,
|
|
77
|
-
stdout,
|
|
78
|
-
fetchImpl: options.fetchImpl,
|
|
79
|
-
});
|
|
80
|
-
return;
|
|
81
|
-
}
|
|
82
|
-
const client = createNookClientFromConfig({
|
|
83
|
-
config: options.config,
|
|
84
|
-
env: options.env,
|
|
85
|
-
fetchImpl: options.fetchImpl,
|
|
86
|
-
});
|
|
87
|
-
if (subcommand === "skill") {
|
|
88
|
-
stdout(await client.readSkill());
|
|
89
|
-
return;
|
|
90
|
-
}
|
|
91
|
-
if (subcommand === "list") {
|
|
92
|
-
const sites = await client.listSites();
|
|
93
|
-
if (sites.length === 0) {
|
|
94
|
-
stdout("no nook sites");
|
|
95
|
-
return;
|
|
96
|
-
}
|
|
97
|
-
for (const site of sites) {
|
|
98
|
-
const visibility = site.visibility ? ` ${site.visibility}` : "";
|
|
99
|
-
const latest = site.latestDeploymentId ? ` ${site.latestDeploymentId}` : "";
|
|
100
|
-
stdout(`${site.slug} ${site.url}${visibility}${latest}`.trim());
|
|
101
|
-
}
|
|
102
|
-
return;
|
|
103
|
-
}
|
|
104
|
-
if (subcommand === "delete") {
|
|
105
|
-
const site = args[0];
|
|
106
|
-
if (!site || args.length !== 1)
|
|
107
|
-
throw new Error("usage: tau nook delete <site>");
|
|
108
|
-
await client.deleteSite(site);
|
|
109
|
-
stdout(`deleted ${site}`);
|
|
110
|
-
return;
|
|
111
|
-
}
|
|
112
|
-
if (subcommand === "copy") {
|
|
113
|
-
const [site, directory] = args;
|
|
114
|
-
if (!site || !directory || args.length !== 2) {
|
|
115
|
-
throw new Error("usage: tau nook copy <site> <dir>");
|
|
116
|
-
}
|
|
117
|
-
const result = await client.copySiteToDirectory(site, resolve(options.cwd ?? process.cwd(), directory));
|
|
118
|
-
stdout(`copied site ${result.site} to ${directory}`);
|
|
119
|
-
return;
|
|
120
|
-
}
|
|
121
|
-
if (subcommand === "deploy") {
|
|
122
|
-
let site;
|
|
123
|
-
let isPublic = false;
|
|
124
|
-
const positional = [];
|
|
125
|
-
for (let i = 0; i < args.length; i += 1) {
|
|
126
|
-
const arg = args[i];
|
|
127
|
-
if (arg === "--public") {
|
|
128
|
-
isPublic = true;
|
|
129
|
-
continue;
|
|
130
|
-
}
|
|
131
|
-
if (arg === "--site" || arg.startsWith("--site=")) {
|
|
132
|
-
const parsed = parseValue(arg, args, i);
|
|
133
|
-
site = parsed.value;
|
|
134
|
-
i = parsed.nextIndex;
|
|
135
|
-
continue;
|
|
136
|
-
}
|
|
137
|
-
if (arg.startsWith("-"))
|
|
138
|
-
throw new Error(`unknown option: ${arg}`);
|
|
139
|
-
positional.push(arg);
|
|
140
|
-
}
|
|
141
|
-
if (positional.length !== 1 || !site) {
|
|
142
|
-
throw new Error("usage: tau nook deploy <dir> --site <slug> [--public]");
|
|
143
|
-
}
|
|
144
|
-
const files = buildNookDeployManifest(resolve(options.cwd ?? process.cwd(), positional[0]));
|
|
145
|
-
const result = await client.deploySite({
|
|
146
|
-
site,
|
|
147
|
-
files,
|
|
148
|
-
visibility: isPublic ? "public" : "private",
|
|
149
|
-
});
|
|
150
|
-
stdout(`Deployed ${result.site} to ${result.url}`);
|
|
151
|
-
return;
|
|
152
|
-
}
|
|
153
|
-
if (subcommand === "template") {
|
|
154
|
-
await runTemplateCommand(args, client, stdout, options.cwd ?? process.cwd());
|
|
155
|
-
return;
|
|
156
|
-
}
|
|
157
|
-
if (subcommand === "kv") {
|
|
158
|
-
await runKvCommand(args, client, stdout);
|
|
159
|
-
return;
|
|
160
|
-
}
|
|
161
|
-
throw new Error(`unknown nook subcommand '${subcommand}'`);
|
|
162
|
-
}
|
|
163
|
-
catch (error) {
|
|
164
|
-
throw new NookCliError(error instanceof Error ? error.message : String(error));
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
async function runTemplateCommand(args, client, stdout, cwd) {
|
|
168
|
-
const [operation, name, directory] = args;
|
|
169
|
-
if (!operation)
|
|
170
|
-
throw new Error("missing template operation");
|
|
171
|
-
if (operation === "list") {
|
|
172
|
-
if (args.length !== 1)
|
|
173
|
-
throw new Error("usage: tau nook template list");
|
|
174
|
-
const templates = await client.listTemplates();
|
|
175
|
-
if (templates.length === 0) {
|
|
176
|
-
stdout("no nook templates");
|
|
177
|
-
return;
|
|
178
|
-
}
|
|
179
|
-
for (const template of templates) {
|
|
180
|
-
stdout(`${template.name} ${template.fileCount} files ${template.byteCount}B ${template.updatedAt}`);
|
|
181
|
-
}
|
|
182
|
-
return;
|
|
183
|
-
}
|
|
184
|
-
if (operation === "copy") {
|
|
185
|
-
if (!name || !directory || args.length !== 3) {
|
|
186
|
-
throw new Error("usage: tau nook template copy <name> <dir>");
|
|
187
|
-
}
|
|
188
|
-
const result = await client.copyTemplateToDirectory(name, resolve(cwd, directory));
|
|
189
|
-
stdout(`copied template ${result.name} to ${directory}`);
|
|
190
|
-
return;
|
|
191
|
-
}
|
|
192
|
-
if (operation === "save") {
|
|
193
|
-
if (!name || !directory || args.length !== 3) {
|
|
194
|
-
throw new Error("usage: tau nook template save <name> <dir>");
|
|
195
|
-
}
|
|
196
|
-
const files = buildNookTemplateManifest(resolve(cwd, directory));
|
|
197
|
-
const result = await client.saveTemplate({ name, files });
|
|
198
|
-
stdout(`saved template ${result.name} (${result.fileCount} files)`);
|
|
199
|
-
return;
|
|
200
|
-
}
|
|
201
|
-
if (operation === "delete") {
|
|
202
|
-
if (!name || args.length !== 2)
|
|
203
|
-
throw new Error("usage: tau nook template delete <name>");
|
|
204
|
-
await client.deleteTemplate(name);
|
|
205
|
-
stdout(`deleted template ${name}`);
|
|
206
|
-
return;
|
|
207
|
-
}
|
|
208
|
-
throw new Error(`unknown template operation '${operation}'`);
|
|
209
|
-
}
|
|
210
|
-
async function runKvCommand(args, client, stdout) {
|
|
211
|
-
const [operation, site, keyOrFlag, value] = args;
|
|
212
|
-
if (!operation)
|
|
213
|
-
throw new Error("missing kv operation");
|
|
214
|
-
if (operation === "get") {
|
|
215
|
-
if (!site || !keyOrFlag || args.length !== 3)
|
|
216
|
-
throw new Error("usage: tau nook kv get <site> <key>");
|
|
217
|
-
stdout(JSON.stringify(await client.getKv(site, keyOrFlag), null, 2));
|
|
218
|
-
return;
|
|
219
|
-
}
|
|
220
|
-
if (operation === "put") {
|
|
221
|
-
if (!site || !keyOrFlag || value === undefined || args.length !== 4) {
|
|
222
|
-
throw new Error("usage: tau nook kv put <site> <key> <json>");
|
|
223
|
-
}
|
|
224
|
-
await client.putKv(site, keyOrFlag, JSON.parse(value));
|
|
225
|
-
stdout(`stored ${site}/${keyOrFlag}`);
|
|
226
|
-
return;
|
|
227
|
-
}
|
|
228
|
-
if (operation === "delete") {
|
|
229
|
-
if (!site || !keyOrFlag || args.length !== 3) {
|
|
230
|
-
throw new Error("usage: tau nook kv delete <site> <key>");
|
|
231
|
-
}
|
|
232
|
-
await client.deleteKv(site, keyOrFlag);
|
|
233
|
-
stdout(`deleted ${site}/${keyOrFlag}`);
|
|
234
|
-
return;
|
|
235
|
-
}
|
|
236
|
-
if (operation === "list") {
|
|
237
|
-
if (!site)
|
|
238
|
-
throw new Error("usage: tau nook kv list <site> [--prefix <prefix>]");
|
|
239
|
-
let prefix;
|
|
240
|
-
for (let i = 2; i < args.length; i += 1) {
|
|
241
|
-
const arg = args[i];
|
|
242
|
-
if (arg === "--prefix" || arg.startsWith("--prefix=")) {
|
|
243
|
-
const parsed = parseValue(arg, args, i);
|
|
244
|
-
prefix = parsed.value;
|
|
245
|
-
i = parsed.nextIndex;
|
|
246
|
-
continue;
|
|
247
|
-
}
|
|
248
|
-
throw new Error(`unknown option: ${arg}`);
|
|
249
|
-
}
|
|
250
|
-
const result = await client.listKv(site, prefix);
|
|
251
|
-
for (const entry of result.keys) {
|
|
252
|
-
stdout(`${entry.key} ${entry.sizeBytes}B ${entry.updatedAt}`);
|
|
253
|
-
}
|
|
254
|
-
return;
|
|
255
|
-
}
|
|
256
|
-
throw new Error(`unknown kv operation '${operation}'`);
|
|
257
|
-
}
|
|
258
|
-
//# sourceMappingURL=cli.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../../src/core/nook/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/core/nook/client.js
DELETED
|
@@ -1,372 +0,0 @@
|
|
|
1
|
-
import { createHash } from "node:crypto";
|
|
2
|
-
import { existsSync, lstatSync, mkdirSync, readdirSync, readFileSync, writeFileSync, } from "node:fs";
|
|
3
|
-
import { dirname, join } from "node:path";
|
|
4
|
-
import { getNookAccessClientSecret } from "../config/index.js";
|
|
5
|
-
import { validateNookSiteSlug, validateNookTemplateManifest, validateNookTemplateName, } from "./validation.js";
|
|
6
|
-
function bufferToArrayBuffer(buffer) {
|
|
7
|
-
const copy = new ArrayBuffer(buffer.byteLength);
|
|
8
|
-
new Uint8Array(copy).set(buffer);
|
|
9
|
-
return copy;
|
|
10
|
-
}
|
|
11
|
-
function validateCopyDestination(directory, artifact) {
|
|
12
|
-
if (!existsSync(directory))
|
|
13
|
-
throw new Error(`${artifact} copy destination does not exist: ${directory}`);
|
|
14
|
-
if (!lstatSync(directory).isDirectory()) {
|
|
15
|
-
throw new Error(`${artifact} copy destination is not a directory: ${directory}`);
|
|
16
|
-
}
|
|
17
|
-
if (readdirSync(directory).length > 0) {
|
|
18
|
-
throw new Error(`${artifact} copy destination is not empty: ${directory}`);
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
function writeDownloadedFiles(directory, files) {
|
|
22
|
-
for (const file of files) {
|
|
23
|
-
const destination = join(directory, file.path.replace(/^\/+/, ""));
|
|
24
|
-
mkdirSync(dirname(destination), { recursive: true });
|
|
25
|
-
writeFileSync(destination, file.content);
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
async function readDeployFileContent(file, signal) {
|
|
29
|
-
signal?.throwIfAborted();
|
|
30
|
-
if ("readContent" in file) {
|
|
31
|
-
const content = await file.readContent();
|
|
32
|
-
signal?.throwIfAborted();
|
|
33
|
-
return new Blob([bufferToArrayBuffer(content)]);
|
|
34
|
-
}
|
|
35
|
-
return new Blob([bufferToArrayBuffer(readFileSync(file.absolutePath))]);
|
|
36
|
-
}
|
|
37
|
-
export class NookClient {
|
|
38
|
-
config;
|
|
39
|
-
env;
|
|
40
|
-
fetchImpl;
|
|
41
|
-
signal;
|
|
42
|
-
constructor(options) {
|
|
43
|
-
this.config = options.config;
|
|
44
|
-
this.env = options.env ?? process.env;
|
|
45
|
-
this.fetchImpl = options.fetchImpl ?? fetch;
|
|
46
|
-
this.signal = options.signal;
|
|
47
|
-
}
|
|
48
|
-
throwIfAborted() {
|
|
49
|
-
this.signal?.throwIfAborted();
|
|
50
|
-
}
|
|
51
|
-
baseUrl() {
|
|
52
|
-
return `https://${this.config.domain}`;
|
|
53
|
-
}
|
|
54
|
-
siteUrl(site) {
|
|
55
|
-
const validation = validateNookSiteSlug(site);
|
|
56
|
-
if (!validation.ok) {
|
|
57
|
-
throw new Error(validation.message);
|
|
58
|
-
}
|
|
59
|
-
return `https://${this.config.domain}/${site}`;
|
|
60
|
-
}
|
|
61
|
-
templateApiUrl(name) {
|
|
62
|
-
const validation = validateNookTemplateName(name);
|
|
63
|
-
if (!validation.ok) {
|
|
64
|
-
throw new Error(validation.message);
|
|
65
|
-
}
|
|
66
|
-
return `${this.baseUrl()}/__nook/api/templates/${encodeURIComponent(name)}`;
|
|
67
|
-
}
|
|
68
|
-
siteKvApiUrl(site) {
|
|
69
|
-
const validation = validateNookSiteSlug(site);
|
|
70
|
-
if (!validation.ok) {
|
|
71
|
-
throw new Error(validation.message);
|
|
72
|
-
}
|
|
73
|
-
return `${this.baseUrl()}/__nook/api/sites/${encodeURIComponent(site)}/kv`;
|
|
74
|
-
}
|
|
75
|
-
authHeaders() {
|
|
76
|
-
const secret = getNookAccessClientSecret(this.config, this.env);
|
|
77
|
-
if (!this.config.accessClientId || !secret) {
|
|
78
|
-
return {};
|
|
79
|
-
}
|
|
80
|
-
return {
|
|
81
|
-
"CF-Access-Client-Id": this.config.accessClientId,
|
|
82
|
-
"CF-Access-Client-Secret": secret,
|
|
83
|
-
};
|
|
84
|
-
}
|
|
85
|
-
async requestJson(url, init = {}) {
|
|
86
|
-
this.throwIfAborted();
|
|
87
|
-
const response = await this.fetchImpl(url, {
|
|
88
|
-
...init,
|
|
89
|
-
headers: {
|
|
90
|
-
...this.authHeaders(),
|
|
91
|
-
...(init.body !== undefined ? { "content-type": "application/json" } : {}),
|
|
92
|
-
...init.headers,
|
|
93
|
-
},
|
|
94
|
-
signal: this.signal,
|
|
95
|
-
});
|
|
96
|
-
this.throwIfAborted();
|
|
97
|
-
if (!response.ok) {
|
|
98
|
-
throw new Error(await formatNookHttpError(response));
|
|
99
|
-
}
|
|
100
|
-
if (response.status === 204) {
|
|
101
|
-
return undefined;
|
|
102
|
-
}
|
|
103
|
-
const result = (await response.json());
|
|
104
|
-
this.throwIfAborted();
|
|
105
|
-
return result;
|
|
106
|
-
}
|
|
107
|
-
async readSkill() {
|
|
108
|
-
this.throwIfAborted();
|
|
109
|
-
const response = await this.fetchImpl(`${this.baseUrl()}/__nook/skill`, {
|
|
110
|
-
headers: this.authHeaders(),
|
|
111
|
-
signal: this.signal,
|
|
112
|
-
});
|
|
113
|
-
this.throwIfAborted();
|
|
114
|
-
if (!response.ok) {
|
|
115
|
-
throw new Error(await formatNookHttpError(response));
|
|
116
|
-
}
|
|
117
|
-
const skill = await response.text();
|
|
118
|
-
this.throwIfAborted();
|
|
119
|
-
return skill;
|
|
120
|
-
}
|
|
121
|
-
async listSites() {
|
|
122
|
-
const result = await this.requestJson(`${this.baseUrl()}/__nook/api/sites`);
|
|
123
|
-
return result.sites;
|
|
124
|
-
}
|
|
125
|
-
async deleteSite(site) {
|
|
126
|
-
const result = await this.requestJson(`${this.baseUrl()}/__nook/api/sites/${encodeURIComponent(site)}`, { method: "DELETE" });
|
|
127
|
-
return result;
|
|
128
|
-
}
|
|
129
|
-
async getSiteManifest(site) {
|
|
130
|
-
return await this.requestJson(`${this.baseUrl()}/__nook/api/sites/${encodeURIComponent(site)}`);
|
|
131
|
-
}
|
|
132
|
-
async downloadSiteFile(site, deploymentId, path) {
|
|
133
|
-
const url = new URL(`${this.baseUrl()}/__nook/api/sites/${encodeURIComponent(site)}/file`);
|
|
134
|
-
url.searchParams.set("deployment", deploymentId);
|
|
135
|
-
url.searchParams.set("path", path);
|
|
136
|
-
this.throwIfAborted();
|
|
137
|
-
const response = await this.fetchImpl(url, {
|
|
138
|
-
headers: this.authHeaders(),
|
|
139
|
-
signal: this.signal,
|
|
140
|
-
});
|
|
141
|
-
this.throwIfAborted();
|
|
142
|
-
if (!response.ok)
|
|
143
|
-
throw new Error(await formatNookHttpError(response));
|
|
144
|
-
const content = Buffer.from(await response.arrayBuffer());
|
|
145
|
-
this.throwIfAborted();
|
|
146
|
-
return content;
|
|
147
|
-
}
|
|
148
|
-
async downloadSiteFiles(site, manifest) {
|
|
149
|
-
validateNookTemplateManifest(manifest.files);
|
|
150
|
-
const byteCount = manifest.files.reduce((total, file) => total + file.sizeBytes, 0);
|
|
151
|
-
if (manifest.fileCount !== manifest.files.length || manifest.byteCount !== byteCount) {
|
|
152
|
-
throw new Error("site manifest summary does not match its files");
|
|
153
|
-
}
|
|
154
|
-
const downloaded = [];
|
|
155
|
-
for (const file of manifest.files) {
|
|
156
|
-
this.throwIfAborted();
|
|
157
|
-
const content = await this.downloadSiteFile(site, manifest.deploymentId, file.path);
|
|
158
|
-
this.throwIfAborted();
|
|
159
|
-
if (content.byteLength !== file.sizeBytes) {
|
|
160
|
-
throw new Error(`site file '${file.path}' size does not match manifest`);
|
|
161
|
-
}
|
|
162
|
-
const sha256 = createHash("sha256").update(content).digest("hex");
|
|
163
|
-
if (sha256 !== file.sha256) {
|
|
164
|
-
throw new Error(`site file '${file.path}' hash does not match manifest`);
|
|
165
|
-
}
|
|
166
|
-
downloaded.push({ ...file, content });
|
|
167
|
-
}
|
|
168
|
-
return downloaded;
|
|
169
|
-
}
|
|
170
|
-
async copySiteToDirectory(site, directory) {
|
|
171
|
-
validateCopyDestination(directory, "site");
|
|
172
|
-
const manifest = await this.getSiteManifest(site);
|
|
173
|
-
const files = await this.downloadSiteFiles(site, manifest);
|
|
174
|
-
writeDownloadedFiles(directory, files);
|
|
175
|
-
const { files: _files, ...result } = manifest;
|
|
176
|
-
return { ...result, directory };
|
|
177
|
-
}
|
|
178
|
-
async deploySite(args) {
|
|
179
|
-
const start = await this.requestJson(`${this.baseUrl()}/__nook/api/sites/${encodeURIComponent(args.site)}/deploy/start`, {
|
|
180
|
-
method: "POST",
|
|
181
|
-
body: JSON.stringify({
|
|
182
|
-
public: args.visibility === "public",
|
|
183
|
-
files: args.files.map(({ path, sizeBytes, contentType, sha256 }) => ({
|
|
184
|
-
path,
|
|
185
|
-
sizeBytes,
|
|
186
|
-
contentType,
|
|
187
|
-
sha256,
|
|
188
|
-
})),
|
|
189
|
-
}),
|
|
190
|
-
});
|
|
191
|
-
const filesByPath = new Map(args.files.map((file) => [file.path, file]));
|
|
192
|
-
for (const path of start.upload) {
|
|
193
|
-
this.throwIfAborted();
|
|
194
|
-
const file = filesByPath.get(path);
|
|
195
|
-
if (!file) {
|
|
196
|
-
throw new Error(`worker requested unknown upload path '${path}'`);
|
|
197
|
-
}
|
|
198
|
-
const uploadUrl = `${this.baseUrl()}/__nook/api/sites/${encodeURIComponent(args.site)}/deploy/${encodeURIComponent(start.deploymentId)}/file?path=${encodeURIComponent(path)}`;
|
|
199
|
-
const body = await readDeployFileContent(file, this.signal);
|
|
200
|
-
this.throwIfAborted();
|
|
201
|
-
const response = await this.fetchImpl(uploadUrl, {
|
|
202
|
-
method: "PUT",
|
|
203
|
-
headers: {
|
|
204
|
-
...this.authHeaders(),
|
|
205
|
-
"content-type": file.contentType,
|
|
206
|
-
"x-nook-deploy-token": start.token,
|
|
207
|
-
},
|
|
208
|
-
body,
|
|
209
|
-
signal: this.signal,
|
|
210
|
-
});
|
|
211
|
-
this.throwIfAborted();
|
|
212
|
-
if (!response.ok) {
|
|
213
|
-
throw new Error(await formatNookHttpError(response));
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
const finish = await this.requestJson(`${this.baseUrl()}/__nook/api/sites/${encodeURIComponent(args.site)}/deploy/${encodeURIComponent(start.deploymentId)}/finish`, {
|
|
217
|
-
method: "POST",
|
|
218
|
-
headers: { "x-nook-deploy-token": start.token },
|
|
219
|
-
});
|
|
220
|
-
return finish;
|
|
221
|
-
}
|
|
222
|
-
async listTemplates() {
|
|
223
|
-
const result = await this.requestJson(`${this.baseUrl()}/__nook/api/templates`);
|
|
224
|
-
return result.templates;
|
|
225
|
-
}
|
|
226
|
-
async getTemplateManifest(name) {
|
|
227
|
-
return await this.requestJson(this.templateApiUrl(name));
|
|
228
|
-
}
|
|
229
|
-
async saveTemplate(args) {
|
|
230
|
-
const start = await this.requestJson(`${this.templateApiUrl(args.name)}/save/start`, {
|
|
231
|
-
method: "POST",
|
|
232
|
-
body: JSON.stringify({
|
|
233
|
-
files: args.files.map(({ path, sizeBytes, contentType, sha256 }) => ({
|
|
234
|
-
path,
|
|
235
|
-
sizeBytes,
|
|
236
|
-
contentType,
|
|
237
|
-
sha256,
|
|
238
|
-
})),
|
|
239
|
-
}),
|
|
240
|
-
});
|
|
241
|
-
const filesByPath = new Map(args.files.map((file) => [file.path, file]));
|
|
242
|
-
for (const path of start.upload) {
|
|
243
|
-
this.throwIfAborted();
|
|
244
|
-
const file = filesByPath.get(path);
|
|
245
|
-
if (!file) {
|
|
246
|
-
throw new Error(`worker requested unknown upload path '${path}'`);
|
|
247
|
-
}
|
|
248
|
-
const uploadUrl = `${this.templateApiUrl(args.name)}/save/${encodeURIComponent(start.saveId)}/file?path=${encodeURIComponent(path)}`;
|
|
249
|
-
const body = await readDeployFileContent(file, this.signal);
|
|
250
|
-
this.throwIfAborted();
|
|
251
|
-
const response = await this.fetchImpl(uploadUrl, {
|
|
252
|
-
method: "PUT",
|
|
253
|
-
headers: {
|
|
254
|
-
...this.authHeaders(),
|
|
255
|
-
"content-type": file.contentType,
|
|
256
|
-
"x-nook-template-token": start.token,
|
|
257
|
-
},
|
|
258
|
-
body,
|
|
259
|
-
signal: this.signal,
|
|
260
|
-
});
|
|
261
|
-
this.throwIfAborted();
|
|
262
|
-
if (!response.ok) {
|
|
263
|
-
throw new Error(await formatNookHttpError(response));
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
return await this.requestJson(`${this.templateApiUrl(args.name)}/save/${encodeURIComponent(start.saveId)}/finish`, {
|
|
267
|
-
method: "POST",
|
|
268
|
-
headers: { "x-nook-template-token": start.token },
|
|
269
|
-
});
|
|
270
|
-
}
|
|
271
|
-
async deleteTemplate(name) {
|
|
272
|
-
return await this.requestJson(this.templateApiUrl(name), { method: "DELETE" });
|
|
273
|
-
}
|
|
274
|
-
async downloadTemplateFile(name, revisionId, path) {
|
|
275
|
-
const url = new URL(`${this.templateApiUrl(name)}/file`);
|
|
276
|
-
url.searchParams.set("revision", revisionId);
|
|
277
|
-
url.searchParams.set("path", path);
|
|
278
|
-
this.throwIfAborted();
|
|
279
|
-
const response = await this.fetchImpl(url, {
|
|
280
|
-
headers: this.authHeaders(),
|
|
281
|
-
signal: this.signal,
|
|
282
|
-
});
|
|
283
|
-
this.throwIfAborted();
|
|
284
|
-
if (!response.ok) {
|
|
285
|
-
throw new Error(await formatNookHttpError(response));
|
|
286
|
-
}
|
|
287
|
-
const content = Buffer.from(await response.arrayBuffer());
|
|
288
|
-
this.throwIfAborted();
|
|
289
|
-
return content;
|
|
290
|
-
}
|
|
291
|
-
async downloadTemplateFiles(name, manifest) {
|
|
292
|
-
validateNookTemplateManifest(manifest.files);
|
|
293
|
-
const byteCount = manifest.files.reduce((total, file) => total + file.sizeBytes, 0);
|
|
294
|
-
if (manifest.template.fileCount !== manifest.files.length ||
|
|
295
|
-
manifest.template.byteCount !== byteCount) {
|
|
296
|
-
throw new Error("template manifest summary does not match its files");
|
|
297
|
-
}
|
|
298
|
-
const downloaded = [];
|
|
299
|
-
for (const file of manifest.files) {
|
|
300
|
-
this.throwIfAborted();
|
|
301
|
-
const content = await this.downloadTemplateFile(name, manifest.template.revisionId, file.path);
|
|
302
|
-
this.throwIfAborted();
|
|
303
|
-
if (content.byteLength !== file.sizeBytes) {
|
|
304
|
-
throw new Error(`template file '${file.path}' size does not match manifest`);
|
|
305
|
-
}
|
|
306
|
-
const sha256 = createHash("sha256").update(content).digest("hex");
|
|
307
|
-
if (sha256 !== file.sha256) {
|
|
308
|
-
throw new Error(`template file '${file.path}' hash does not match manifest`);
|
|
309
|
-
}
|
|
310
|
-
downloaded.push({ ...file, content });
|
|
311
|
-
}
|
|
312
|
-
return downloaded;
|
|
313
|
-
}
|
|
314
|
-
async copyTemplateToDirectory(name, directory) {
|
|
315
|
-
validateCopyDestination(directory, "template");
|
|
316
|
-
const manifest = await this.getTemplateManifest(name);
|
|
317
|
-
const files = await this.downloadTemplateFiles(name, manifest);
|
|
318
|
-
writeDownloadedFiles(directory, files);
|
|
319
|
-
return {
|
|
320
|
-
...manifest.template,
|
|
321
|
-
directory,
|
|
322
|
-
};
|
|
323
|
-
}
|
|
324
|
-
async getKv(site, key) {
|
|
325
|
-
const result = await this.requestJson(`${this.siteKvApiUrl(site)}/${encodeURIComponent(key)}`);
|
|
326
|
-
return result.value;
|
|
327
|
-
}
|
|
328
|
-
async putKv(site, key, value) {
|
|
329
|
-
return await this.requestJson(`${this.siteKvApiUrl(site)}/${encodeURIComponent(key)}`, {
|
|
330
|
-
method: "PUT",
|
|
331
|
-
body: JSON.stringify(value),
|
|
332
|
-
});
|
|
333
|
-
}
|
|
334
|
-
async deleteKv(site, key) {
|
|
335
|
-
return await this.requestJson(`${this.siteKvApiUrl(site)}/${encodeURIComponent(key)}`, {
|
|
336
|
-
method: "DELETE",
|
|
337
|
-
});
|
|
338
|
-
}
|
|
339
|
-
async listKv(site, prefix) {
|
|
340
|
-
const url = new URL(this.siteKvApiUrl(site));
|
|
341
|
-
if (prefix) {
|
|
342
|
-
url.searchParams.set("prefix", prefix);
|
|
343
|
-
}
|
|
344
|
-
return await this.requestJson(url.toString());
|
|
345
|
-
}
|
|
346
|
-
}
|
|
347
|
-
export function createNookClientFromConfig(args) {
|
|
348
|
-
if (!args.config.nook) {
|
|
349
|
-
throw new Error("nook is not configured. add a nook block to Tau config.");
|
|
350
|
-
}
|
|
351
|
-
return new NookClient({
|
|
352
|
-
config: args.config.nook,
|
|
353
|
-
env: args.env,
|
|
354
|
-
fetchImpl: args.fetchImpl,
|
|
355
|
-
signal: args.signal,
|
|
356
|
-
});
|
|
357
|
-
}
|
|
358
|
-
async function formatNookHttpError(response) {
|
|
359
|
-
const text = await response.text();
|
|
360
|
-
try {
|
|
361
|
-
const parsed = JSON.parse(text);
|
|
362
|
-
if (parsed.error?.message) {
|
|
363
|
-
return `nook request failed (${response.status} ${response.statusText}): ${parsed.error.message}`;
|
|
364
|
-
}
|
|
365
|
-
}
|
|
366
|
-
catch {
|
|
367
|
-
// fall through
|
|
368
|
-
}
|
|
369
|
-
const detail = text.trim();
|
|
370
|
-
return `nook request failed (${response.status} ${response.statusText})${detail ? `: ${detail}` : ""}`;
|
|
371
|
-
}
|
|
372
|
-
//# sourceMappingURL=client.js.map
|