@markusylisiurunen/tau 0.3.90 → 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.
Files changed (88) hide show
  1. package/dist/core/cli.js +0 -3
  2. package/dist/core/cli.js.map +1 -1
  3. package/dist/core/code_mode/sdk.js +0 -1
  4. package/dist/core/code_mode/sdk.js.map +1 -1
  5. package/dist/core/config/content_loader.js +1 -3
  6. package/dist/core/config/content_loader.js.map +1 -1
  7. package/dist/core/config/index.js +1 -1
  8. package/dist/core/config/index.js.map +1 -1
  9. package/dist/core/config/schema.js +0 -67
  10. package/dist/core/config/schema.js.map +1 -1
  11. package/dist/core/history/history_manager.js +188 -94
  12. package/dist/core/history/history_manager.js.map +1 -1
  13. package/dist/core/history/history_store_worker.js +21 -0
  14. package/dist/core/history/history_store_worker.js.map +1 -0
  15. package/dist/core/history/local_history_store.js +11 -5
  16. package/dist/core/history/local_history_store.js.map +1 -1
  17. package/dist/core/history/threaded_history_store.js +107 -0
  18. package/dist/core/history/threaded_history_store.js.map +1 -0
  19. package/dist/core/index.js +0 -1
  20. package/dist/core/index.js.map +1 -1
  21. package/dist/core/personas.js +1 -2
  22. package/dist/core/personas.js.map +1 -1
  23. package/dist/core/static/tau_docs/client-tools.md +1 -1
  24. package/dist/core/static/tau_docs/config-reference.md +0 -24
  25. package/dist/core/static/tau_docs/configuration.md +1 -1
  26. package/dist/core/static/tau_docs/credentials.md +3 -18
  27. package/dist/core/static/tau_docs/history.md +9 -3
  28. package/dist/core/static/tau_docs/index.md +0 -1
  29. package/dist/core/static/tau_docs/manifest.json +0 -1
  30. package/dist/core/static/tau_docs/node-sdk.md +1 -1
  31. package/dist/core/static/tau_docs/personas.md +3 -3
  32. package/dist/core/static/tau_docs/security.md +6 -18
  33. package/dist/core/static/tau_docs/session-protocol-methods.md +1 -1
  34. package/dist/core/static/tau_docs/session-protocol.md +2 -0
  35. package/dist/core/static/tau_docs/subagents.md +0 -1
  36. package/dist/core/static/tau_docs/tools.md +6 -8
  37. package/dist/core/static/tau_docs/troubleshooting.md +10 -12
  38. package/dist/core/static/tau_docs/tui.md +3 -0
  39. package/dist/core/subagents/claude_code_runner.mjs +43 -43
  40. package/dist/core/subagents/registry.js +1 -2
  41. package/dist/core/subagents/registry.js.map +1 -1
  42. package/dist/core/subagents/types.js +1 -2
  43. package/dist/core/subagents/types.js.map +1 -1
  44. package/dist/core/tools/code.js +0 -3
  45. package/dist/core/tools/code.js.map +1 -1
  46. package/dist/core/tools/presentation.js +1 -2
  47. package/dist/core/tools/presentation.js.map +1 -1
  48. package/dist/core/tools/tool_names.js +1 -3
  49. package/dist/core/tools/tool_names.js.map +1 -1
  50. package/dist/core/utils/speech.js +6 -2
  51. package/dist/core/utils/speech.js.map +1 -1
  52. package/dist/core/version.js +1 -1
  53. package/dist/host/client_tool_broker.js +8 -4
  54. package/dist/host/client_tool_broker.js.map +1 -1
  55. package/dist/host/local_session_host.js +3 -2
  56. package/dist/host/local_session_host.js.map +1 -1
  57. package/dist/main.js +4 -26
  58. package/dist/main.js.map +1 -1
  59. package/dist/protocol/session_protocol.d.ts +2 -2
  60. package/dist/protocol/session_protocol.js +2 -2
  61. package/dist/protocol/session_protocol.js.map +1 -1
  62. package/dist/sdk/local_client.js +1 -0
  63. package/dist/sdk/local_client.js.map +1 -1
  64. package/dist/sdk/types.d.ts +7 -0
  65. package/dist/tui/session_chat_app.js +1 -1
  66. package/dist/tui/session_chat_app.js.map +1 -1
  67. package/dist/tui/session_chat_controller.js +12 -1
  68. package/dist/tui/session_chat_controller.js.map +1 -1
  69. package/package.json +3 -4
  70. package/dist/core/code_mode/nook.js +0 -226
  71. package/dist/core/code_mode/nook.js.map +0 -1
  72. package/dist/core/nook/cli.js +0 -258
  73. package/dist/core/nook/cli.js.map +0 -1
  74. package/dist/core/nook/client.js +0 -372
  75. package/dist/core/nook/client.js.map +0 -1
  76. package/dist/core/nook/deploy.js +0 -152
  77. package/dist/core/nook/deploy.js.map +0 -1
  78. package/dist/core/nook/index.js +0 -5
  79. package/dist/core/nook/index.js.map +0 -1
  80. package/dist/core/nook/setup.js +0 -429
  81. package/dist/core/nook/setup.js.map +0 -1
  82. package/dist/core/nook/validation.js +0 -164
  83. package/dist/core/nook/validation.js.map +0 -1
  84. package/dist/core/static/code_mode/nook/documentation.md +0 -144
  85. package/dist/core/static/code_mode/nook/sandbox_runner.mjs +0 -1
  86. package/dist/core/static/tau_docs/nook.md +0 -270
  87. package/dist/nook/worker/index.js +0 -1175
  88. package/dist/nook/worker/index.js.map +0 -1
@@ -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
@@ -1 +0,0 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/core/nook/client.ts"],"names":[],"mappings":"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"}
@@ -1,152 +0,0 @@
1
- import { createHash } from "node:crypto";
2
- import { readdirSync, readFileSync, statSync } from "node:fs";
3
- import { extname, join, relative, resolve, sep } from "node:path";
4
- import { assertVisibleNookRelativePath, normalizeNookAssetPath, validateNookManifest, validateNookTemplateManifest, } from "./validation.js";
5
- const CONTENT_TYPES = {
6
- ".css": "text/css; charset=utf-8",
7
- ".gif": "image/gif",
8
- ".html": "text/html; charset=utf-8",
9
- ".ico": "image/x-icon",
10
- ".jpeg": "image/jpeg",
11
- ".jpg": "image/jpeg",
12
- ".js": "application/javascript; charset=utf-8",
13
- ".json": "application/json; charset=utf-8",
14
- ".map": "application/json; charset=utf-8",
15
- ".mjs": "application/javascript; charset=utf-8",
16
- ".png": "image/png",
17
- ".svg": "image/svg+xml",
18
- ".txt": "text/plain; charset=utf-8",
19
- ".wasm": "application/wasm",
20
- ".webp": "image/webp",
21
- };
22
- function contentTypeForPath(path) {
23
- return CONTENT_TYPES[extname(path).toLowerCase()] ?? "application/octet-stream";
24
- }
25
- function walkDirectory(dir, output) {
26
- const entries = readdirSync(dir, { withFileTypes: true });
27
- for (const entry of entries) {
28
- if (entry.name.startsWith(".")) {
29
- throw new Error(`hidden deploy path '${entry.name}' is not allowed`);
30
- }
31
- const entryPath = join(dir, entry.name);
32
- if (entry.isSymbolicLink()) {
33
- throw new Error(`symlink deploy path '${entryPath}' is not allowed`);
34
- }
35
- if (entry.isDirectory()) {
36
- walkDirectory(entryPath, output);
37
- continue;
38
- }
39
- if (entry.isFile()) {
40
- output.push(entryPath);
41
- }
42
- }
43
- }
44
- function buildLocalNookManifest(directory, artifactLabel) {
45
- const root = resolve(directory);
46
- const stats = statSync(root);
47
- if (!stats.isDirectory()) {
48
- throw new Error(`${artifactLabel} path is not a directory: ${directory}`);
49
- }
50
- const absoluteFiles = [];
51
- walkDirectory(root, absoluteFiles);
52
- return absoluteFiles
53
- .map((absolutePath) => {
54
- const relativePath = relative(root, absolutePath);
55
- assertVisibleNookRelativePath(relativePath);
56
- const assetPath = normalizeNookAssetPath(`/${relativePath.split(sep).join("/")}`);
57
- const content = readFileSync(absolutePath);
58
- return {
59
- path: assetPath,
60
- absolutePath,
61
- sizeBytes: content.length,
62
- sha256: createHash("sha256").update(content).digest("hex"),
63
- contentType: contentTypeForPath(assetPath),
64
- };
65
- })
66
- .sort((a, b) => a.path.localeCompare(b.path));
67
- }
68
- export function buildNookDeployManifest(directory) {
69
- const files = buildLocalNookManifest(directory, "deploy");
70
- validateNookManifest(files);
71
- return files;
72
- }
73
- export function buildNookTemplateManifest(directory) {
74
- const files = buildLocalNookManifest(directory, "template");
75
- validateNookTemplateManifest(files);
76
- return files;
77
- }
78
- function joinBackendPath(dir, name) {
79
- const trimmed = dir.replace(/\/+$/, "");
80
- return trimmed ? `${trimmed}/${name}` : name;
81
- }
82
- async function walkBackendDirectory(args) {
83
- args.signal.throwIfAborted();
84
- const listed = await args.backend.listDir(args.dir);
85
- args.signal.throwIfAborted();
86
- for (const entry of listed.entries) {
87
- args.signal.throwIfAborted();
88
- if (entry.name.startsWith(".")) {
89
- throw new Error(`hidden deploy path '${entry.name}' is not allowed`);
90
- }
91
- const backendPath = joinBackendPath(args.dir, entry.name);
92
- const relativePath = args.relativeDir ? `${args.relativeDir}/${entry.name}` : entry.name;
93
- if (entry.isSymlink) {
94
- throw new Error(`symlink deploy path '${relativePath}' is not allowed`);
95
- }
96
- if (entry.isDirectory) {
97
- await walkBackendDirectory({
98
- backend: args.backend,
99
- dir: backendPath,
100
- relativeDir: relativePath,
101
- output: args.output,
102
- signal: args.signal,
103
- });
104
- continue;
105
- }
106
- args.output.push({ backendPath, relativePath });
107
- }
108
- }
109
- async function buildBackendNookManifest(backend, directory, signal) {
110
- const files = [];
111
- await walkBackendDirectory({
112
- backend,
113
- dir: directory,
114
- relativeDir: "",
115
- output: files,
116
- signal,
117
- });
118
- const manifest = [];
119
- for (const file of files) {
120
- signal.throwIfAborted();
121
- assertVisibleNookRelativePath(file.relativePath);
122
- const assetPath = normalizeNookAssetPath(`/${file.relativePath}`);
123
- const binary = await backend.readFileBinary(file.backendPath);
124
- signal.throwIfAborted();
125
- const content = Buffer.from(binary.content);
126
- manifest.push({
127
- path: assetPath,
128
- backendPath: file.backendPath,
129
- sizeBytes: content.length,
130
- sha256: createHash("sha256").update(content).digest("hex"),
131
- contentType: contentTypeForPath(assetPath),
132
- readContent: async () => {
133
- signal.throwIfAborted();
134
- return content;
135
- },
136
- });
137
- }
138
- return manifest.sort((a, b) => a.path.localeCompare(b.path));
139
- }
140
- export async function buildNookDeployManifestFromBackend(backend, directory, signal) {
141
- const files = await buildBackendNookManifest(backend, directory, signal);
142
- signal.throwIfAborted();
143
- validateNookManifest(files);
144
- return files;
145
- }
146
- export async function buildNookTemplateManifestFromBackend(backend, directory, signal) {
147
- const files = await buildBackendNookManifest(backend, directory, signal);
148
- signal.throwIfAborted();
149
- validateNookTemplateManifest(files);
150
- return files;
151
- }
152
- //# sourceMappingURL=deploy.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../../src/core/nook/deploy.ts"],"names":[],"mappings":"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"}
@@ -1,5 +0,0 @@
1
- export { NookCliError, printNookHelp, runNookCommand } from "./cli.js";
2
- export { createNookClientFromConfig, NookClient } from "./client.js";
3
- export { buildNookDeployManifest, buildNookTemplateManifest } from "./deploy.js";
4
- export { NOOK_DEPLOY_LIMITS, NOOK_RESERVED_PATH_PREFIX, normalizeNookAssetPath, normalizeNookDomain, validateNookManifest, validateNookSiteSlug, validateNookTemplateManifest, validateNookTemplateName, } from "./validation.js";
5
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/nook/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAYvE,OAAO,EAAE,0BAA0B,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAErE,OAAO,EAAE,uBAAuB,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAEjF,OAAO,EACL,kBAAkB,EAClB,yBAAyB,EACzB,sBAAsB,EACtB,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,4BAA4B,EAC5B,wBAAwB,GACzB,MAAM,iBAAiB,CAAC"}