@mxpicture/print-backlog 0.0.5 → 0.0.7

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 (46) hide show
  1. package/dist/public/assets/index-C4BbRvDB.js +1 -0
  2. package/dist/public/assets/index-D7yzmKDn.css +1 -0
  3. package/dist/public/index.html +2 -2
  4. package/dist/server/api/events.d.ts +21 -0
  5. package/dist/server/api/events.d.ts.map +1 -0
  6. package/dist/server/api/events.js +201 -0
  7. package/dist/server/api/events.js.map +1 -0
  8. package/dist/server/api/items.d.ts +24 -1
  9. package/dist/server/api/items.d.ts.map +1 -1
  10. package/dist/server/api/items.js +181 -9
  11. package/dist/server/api/items.js.map +1 -1
  12. package/dist/server/app.d.ts +7 -1
  13. package/dist/server/app.d.ts.map +1 -1
  14. package/dist/server/app.js +11 -5
  15. package/dist/server/app.js.map +1 -1
  16. package/dist/server/bambuddy.d.ts +23 -6
  17. package/dist/server/bambuddy.d.ts.map +1 -1
  18. package/dist/server/bambuddy.js +95 -23
  19. package/dist/server/bambuddy.js.map +1 -1
  20. package/dist/server/cli.js +8 -1
  21. package/dist/server/cli.js.map +1 -1
  22. package/dist/server/matching.d.ts +22 -0
  23. package/dist/server/matching.d.ts.map +1 -0
  24. package/dist/server/matching.js +72 -0
  25. package/dist/server/matching.js.map +1 -0
  26. package/dist/server/multipart.d.ts +3 -1
  27. package/dist/server/multipart.d.ts.map +1 -1
  28. package/dist/server/multipart.js +2 -2
  29. package/dist/server/multipart.js.map +1 -1
  30. package/dist/server/storage.d.ts +18 -4
  31. package/dist/server/storage.d.ts.map +1 -1
  32. package/dist/server/storage.js +32 -3
  33. package/dist/server/storage.js.map +1 -1
  34. package/dist/server/zip.d.ts +35 -0
  35. package/dist/server/zip.d.ts.map +1 -0
  36. package/dist/server/zip.js +190 -0
  37. package/dist/server/zip.js.map +1 -0
  38. package/dist/shared/types.d.ts +46 -0
  39. package/dist/shared/types.d.ts.map +1 -1
  40. package/package.json +7 -1
  41. package/dist/public/assets/index-CLP1jBWd.js +0 -1
  42. package/dist/public/assets/index-DxpzozYw.css +0 -1
  43. package/dist/server/api/hooks.d.ts +0 -9
  44. package/dist/server/api/hooks.d.ts.map +0 -1
  45. package/dist/server/api/hooks.js +0 -29
  46. package/dist/server/api/hooks.js.map +0 -1
@@ -1,9 +1,11 @@
1
1
  import { z } from "zod";
2
2
  import { ITEM_STATUSES, } from "../../shared/types.js";
3
+ import { BambuddyError } from "../bambuddy.js";
3
4
  import { HANDLED, HttpError } from "../http.js";
4
- import { readMultipart } from "../multipart.js";
5
+ import { MAX_FILES, readMultipart } from "../multipart.js";
5
6
  import { itemPosition } from "../positions.js";
6
- import { BAMBUDDY_EXTENSIONS, FileStore, titleFromFilename, } from "../storage.js";
7
+ import { BAMBUDDY_EXTENSIONS, FileStore, isModel, titleFromFilename, } from "../storage.js";
8
+ import { exportZip, extract3mfThumbnail, unpackZip, } from "../zip.js";
7
9
  const idParam = (v, what = "id") => {
8
10
  const n = Number(v);
9
11
  if (!Number.isSafeInteger(n) || n <= 0)
@@ -19,6 +21,7 @@ const toVersion = (r, currentId) => ({
19
21
  comment: r.comment,
20
22
  uploadedAt: r.uploaded_at.toISOString(),
21
23
  uploadedBy: r.uploaded_by,
24
+ hasThumbnail: r.has_thumbnail,
22
25
  current: r.id === currentId,
23
26
  });
24
27
  const toItem = (r) => {
@@ -33,6 +36,7 @@ const toItem = (r) => {
33
36
  comment: r.v_comment,
34
37
  uploadedAt: r.v_uploaded_at.toISOString(),
35
38
  uploadedBy: r.v_uploaded_by,
39
+ hasThumbnail: r.v_has_thumbnail ?? false,
36
40
  current: true,
37
41
  };
38
42
  return {
@@ -60,7 +64,7 @@ const selectItems = (db, where) => db `
60
64
  SELECT i.*,
61
65
  (SELECT count(*)::int FROM backlog.version vc WHERE vc.item_id = i.id) AS version_count,
62
66
  v.n AS v_n, v.filename AS v_filename, v.ext AS v_ext, v.size AS v_size, v.sha256 AS v_sha256,
63
- v.comment AS v_comment, v.uploaded_at AS v_uploaded_at, v.uploaded_by AS v_uploaded_by
67
+ v.comment AS v_comment, v.uploaded_at AS v_uploaded_at, v.uploaded_by AS v_uploaded_by, v.has_thumbnail AS v_has_thumbnail
64
68
  FROM backlog.item i
65
69
  LEFT JOIN backlog.version v ON v.id = i.current_version_id
66
70
  WHERE ${where}
@@ -121,7 +125,7 @@ export const getItem = ({ sql }) => ({ params }) => loadDetail(sql, idParam(para
121
125
  /** GET /api/v1/items/:id/history: status changes, versions and matched prints, oldest first. */
122
126
  export const itemHistory = ({ sql }) => async ({ params }) => {
123
127
  const id = idParam(params.id);
124
- await loadItem(sql, id);
128
+ const item = await loadItem(sql, id);
125
129
  const [statuses, versions, prints] = await Promise.all([
126
130
  sql `
127
131
  SELECT at, by, source, from_status::text AS from_status, to_status::text AS to_status, detail
@@ -159,6 +163,16 @@ export const itemHistory = ({ sql }) => async ({ params }) => {
159
163
  filename: p.filename,
160
164
  resolution: p.resolution,
161
165
  })),
166
+ // Only the last send is kept (bambuddy_sent_at).
167
+ ...(item.bambuddySentAt && item.bambuddyFileId !== null
168
+ ? [
169
+ {
170
+ kind: "sent",
171
+ at: item.bambuddySentAt,
172
+ fileId: item.bambuddyFileId,
173
+ },
174
+ ]
175
+ : []),
162
176
  ];
163
177
  return entries.sort((a, b) => a.at.localeCompare(b.at));
164
178
  };
@@ -185,17 +199,53 @@ const lockItem = async (tx, id, allowDeleted = false) => {
185
199
  currentVersionId: row.current_version_id,
186
200
  };
187
201
  };
202
+ /** Where a version's preview image is stored, next to the file. */
203
+ export const thumbnailPath = (rel) => `${rel}.thumb.png`;
188
204
  const insertVersion = async (tx, store, itemId, n, f, user, comment) => {
189
205
  const rel = FileStore.relativePath(itemId, n, f.sha256, f.filename);
206
+ // A 3MF carries its own preview; anything else has none (no renderer here).
207
+ const thumbnail = f.ext === "3mf" ? await extract3mfThumbnail(f.tmpPath) : null;
190
208
  const [v] = await tx `
191
- INSERT INTO backlog.version (item_id, n, filename, ext, size, sha256, stored_path, comment, uploaded_by)
192
- VALUES (${itemId}, ${n}, ${f.filename}, ${f.ext}, ${f.size}, ${f.sha256}, ${rel}, ${comment}, ${user})
209
+ INSERT INTO backlog.version (item_id, n, filename, ext, size, sha256, stored_path, comment, uploaded_by, has_thumbnail)
210
+ VALUES (${itemId}, ${n}, ${f.filename}, ${f.ext}, ${f.size}, ${f.sha256}, ${rel}, ${comment}, ${user}, ${thumbnail !== null})
193
211
  RETURNING id
194
212
  `;
195
213
  // Placed inside the transaction: if it fails, the rows roll back with it.
196
214
  await store.place(f, rel);
215
+ if (thumbnail)
216
+ await store.placeBuffer(thumbnail, thumbnailPath(rel));
197
217
  return v.id;
198
218
  };
219
+ /**
220
+ * Unpack the dropped ZIPs among `files`: every model file in them becomes
221
+ * one more file of the upload. All-or-nothing like the rest: on an error,
222
+ * every staged file is discarded.
223
+ */
224
+ const expandZips = async (store, files) => {
225
+ const models = [];
226
+ const skipped = [];
227
+ const pending = [...files];
228
+ try {
229
+ while (pending.length) {
230
+ const f = pending.shift();
231
+ if (isModel(f)) {
232
+ models.push(f);
233
+ continue;
234
+ }
235
+ const room = MAX_FILES - models.length - pending.filter(isModel).length;
236
+ const u = await unpackZip(store, f, Math.max(room, 0));
237
+ models.push(...u.models);
238
+ skipped.push(...u.skipped.map((name) => `${f.filename}: ${name}`));
239
+ }
240
+ if (models.length > MAX_FILES)
241
+ throw new HttpError(413, `at most ${MAX_FILES} model files per upload`);
242
+ return { models, skipped };
243
+ }
244
+ catch (e) {
245
+ await Promise.all([...models, ...pending].map((m) => store.discard(m)));
246
+ throw e;
247
+ }
248
+ };
199
249
  /**
200
250
  * POST /api/v1/queues/:id/items (multipart, field `file`, 1..50 files): one
201
251
  * new `queued` item per file, appended in drop order, each with version 1.
@@ -203,9 +253,10 @@ const insertVersion = async (tx, store, itemId, n, f, user, comment) => {
203
253
  */
204
254
  export const uploadItems = ({ sql, store }) => async ({ req, params, user }) => {
205
255
  const queueId = idParam(params.id, "queue id");
206
- const { files } = await readMultipart(req, store);
207
- if (files.length === 0)
256
+ const received = await readMultipart(req, store, { allowZip: true });
257
+ if (received.files.length === 0)
208
258
  throw new HttpError(400, "no file in the upload");
259
+ const { models: files, skipped } = await expandZips(store, received.files);
209
260
  try {
210
261
  const ids = await sql.begin(async (tx) => {
211
262
  await lockQueue(tx, queueId);
@@ -233,7 +284,7 @@ export const uploadItems = ({ sql, store }) => async ({ req, params, user }) =>
233
284
  return out;
234
285
  });
235
286
  const items = await Promise.all(ids.map((id) => loadItem(sql, id)));
236
- return { items };
287
+ return { items, skipped };
237
288
  }
238
289
  catch (e) {
239
290
  await Promise.all(files.map((f) => store.discard(f)));
@@ -253,6 +304,8 @@ export const uploadVersion = ({ sql, store }) => async ({ req, params, user }) =
253
304
  throw new HttpError(400, "a new version is exactly one file");
254
305
  }
255
306
  const f = files[0];
307
+ if (!isModel(f))
308
+ throw new HttpError(415, "a version is one model file, not a ZIP");
256
309
  const comment = fields.comment?.trim()
257
310
  ? fields.comment.trim().slice(0, 2000)
258
311
  : null;
@@ -425,4 +478,123 @@ export const restoreItem = ({ sql }) => async ({ params }) => {
425
478
  });
426
479
  return loadItem(sql, id);
427
480
  };
481
+ /** GET /api/v1/items/:id/versions/:n/thumbnail: the 3MF's preview PNG, or 404. */
482
+ export const versionThumbnail = ({ sql, store }) => async ({ params, res, req }) => {
483
+ const id = idParam(params.id);
484
+ const n = idParam(params.n, "version");
485
+ const [v] = await sql `
486
+ SELECT stored_path, has_thumbnail FROM backlog.version WHERE item_id = ${id} AND n = ${n}
487
+ `;
488
+ if (!v?.has_thumbnail)
489
+ throw new HttpError(404, "no thumbnail");
490
+ const rel = thumbnailPath(v.stored_path);
491
+ if (!(await store.exists(rel)))
492
+ throw new HttpError(404, "no thumbnail");
493
+ const data = await new Promise((resolve, reject) => {
494
+ const chunks = [];
495
+ store
496
+ .read(rel)
497
+ .on("data", (c) => chunks.push(c))
498
+ .on("end", () => resolve(Buffer.concat(chunks)))
499
+ .on("error", reject);
500
+ });
501
+ res.writeHead(200, {
502
+ "Content-Type": "image/png",
503
+ "Content-Length": data.length,
504
+ // Write-once: the image of a version never changes.
505
+ "Cache-Control": "private, max-age=31536000, immutable",
506
+ "X-Content-Type-Options": "nosniff",
507
+ });
508
+ res.end(req.method === "HEAD" ? undefined : data);
509
+ return HANDLED;
510
+ };
511
+ const exportQuery = z.object({
512
+ status: z.enum(ITEM_STATUSES).optional(),
513
+ });
514
+ /**
515
+ * GET /api/v1/queues/:id/export.zip?status=queued: the current version of
516
+ * every item in the queue (trash excluded), in list order, as one ZIP built
517
+ * while it is sent. Items whose file is missing on disk are left out.
518
+ */
519
+ export const exportQueue = ({ sql, store }) => async ({ params, url, res, req }) => {
520
+ const queueId = idParam(params.id, "queue id");
521
+ const p = exportQuery.parse(Object.fromEntries(url.searchParams));
522
+ const [queue] = await sql `SELECT name FROM backlog.queue WHERE id = ${queueId}`;
523
+ if (!queue)
524
+ throw new HttpError(404, `queue ${queueId} not found`);
525
+ const rows = await sql `
526
+ SELECT v.filename, v.stored_path, v.ext, v.uploaded_at
527
+ FROM backlog.item i JOIN backlog.version v ON v.id = i.current_version_id
528
+ WHERE i.queue_id = ${queueId} AND i.deleted_at IS NULL
529
+ ${p.status ? sql `AND i.status = ${p.status}::text::backlog.item_status` : sql ``}
530
+ ORDER BY i.position, i.id
531
+ `;
532
+ const files = [];
533
+ for (const r of rows)
534
+ if (await store.exists(r.stored_path))
535
+ files.push({
536
+ name: r.filename,
537
+ relPath: r.stored_path,
538
+ ext: r.ext,
539
+ mtime: r.uploaded_at,
540
+ });
541
+ const name = `${queue.name}${p.status ? `-${p.status}` : ""}.zip`;
542
+ res.writeHead(200, {
543
+ "Content-Type": "application/zip",
544
+ "Content-Disposition": contentDisposition(name),
545
+ "Cache-Control": "no-store",
546
+ "X-Content-Type-Options": "nosniff",
547
+ });
548
+ if (req.method === "HEAD") {
549
+ res.end();
550
+ return HANDLED;
551
+ }
552
+ await new Promise((resolve) => {
553
+ const zip = exportZip(store, files);
554
+ zip.on("error", () => {
555
+ res.destroy();
556
+ resolve();
557
+ });
558
+ res.on("close", resolve);
559
+ zip.pipe(res);
560
+ });
561
+ return HANDLED;
562
+ };
563
+ /**
564
+ * POST /api/v1/items/:id/send-to-bambuddy: upload the current version into
565
+ * Bambuddy's library folder (BAMBUDDY_FOLDER, created if missing). Bambuddy
566
+ * keeps one copy of identical content and says so (`duplicate`). Sending
567
+ * again uploads again. STEP is refused: Bambuddy cannot take it.
568
+ */
569
+ export const sendToBambuddy = ({ sql, store, sender }) => async ({ params }) => {
570
+ if (!sender)
571
+ throw new HttpError(409, "Send to Bambuddy is not configured (BAMBUDDY_URL)");
572
+ const id = idParam(params.id);
573
+ const item = await loadItem(sql, id);
574
+ if (item.deletedAt)
575
+ throw new HttpError(409, `item ${id} is in the trash`);
576
+ if (!item.current)
577
+ throw new HttpError(409, `item ${id} has no file`);
578
+ if (!item.sendable)
579
+ throw new HttpError(400, `.${item.current.ext} cannot be sent to Bambuddy (it slices STL, 3MF and OBJ)`);
580
+ const [v] = await sql `
581
+ SELECT stored_path FROM backlog.version WHERE item_id = ${id} AND n = ${item.current.n}
582
+ `;
583
+ if (!v || !(await store.exists(v.stored_path)))
584
+ throw new HttpError(410, "the file is missing on disk");
585
+ const folderId = await sender.client
586
+ .folderId(sender.folder)
587
+ .catch(upstream);
588
+ const r = await sender.client
589
+ .upload(store.absolute(v.stored_path), item.current.filename, folderId)
590
+ .catch(upstream);
591
+ await sql `UPDATE backlog.item SET bambuddy_file_id = ${r.fileId}, bambuddy_sent_at = now() WHERE id = ${id}`;
592
+ return { item: await loadDetail(sql, id), duplicate: r.duplicate };
593
+ };
594
+ /** A Bambuddy failure as our answer: 502 with Bambuddy's message. */
595
+ const upstream = (e) => {
596
+ if (e instanceof BambuddyError)
597
+ throw new HttpError(e.status, e.message);
598
+ throw e;
599
+ };
428
600
  //# sourceMappingURL=items.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"items.js","sourceRoot":"","sources":["../../../src/server/api/items.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"items.js","sourceRoot":"","sources":["../../../src/server/api/items.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { type BambuddyState } from "./api/health.js";
2
+ import type { BambuddyClient } from "./bambuddy.js";
2
3
  import type { Sql } from "./db.js";
3
4
  import { Router } from "./http.js";
4
5
  import type { FileStore } from "./storage.js";
@@ -6,7 +7,12 @@ export interface AppDeps {
6
7
  sql: Sql;
7
8
  store: FileStore;
8
9
  bambuddy: BambuddyState;
10
+ /** Send to Bambuddy; null/absent when BAMBUDDY_URL is not set */
11
+ sender?: {
12
+ client: BambuddyClient;
13
+ folder: string;
14
+ } | null;
9
15
  }
10
16
  /** Every route. Paths are the contract with Caddy's vhost: only /health and /hooks/bambuddy bypass SSO. */
11
- export declare const buildRouter: ({ sql, store, bambuddy }: AppDeps) => Router;
17
+ export declare const buildRouter: ({ sql, store, bambuddy, sender, }: AppDeps) => Router;
12
18
  //# sourceMappingURL=app.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../src/server/app.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,aAAa,EAAc,MAAM,iBAAiB,CAAC;AAmBjE,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,MAAM,WAAW,OAAO;IACtB,GAAG,EAAE,GAAG,CAAC;IACT,KAAK,EAAE,SAAS,CAAC;IACjB,QAAQ,EAAE,aAAa,CAAC;CACzB;AAED,2GAA2G;AAC3G,eAAO,MAAM,WAAW,GAAI,0BAA0B,OAAO,KAAG,MA2B/D,CAAC"}
1
+ {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../src/server/app.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,aAAa,EAAc,MAAM,iBAAiB,CAAC;AAsBjE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,MAAM,WAAW,OAAO;IACtB,GAAG,EAAE,GAAG,CAAC;IACT,KAAK,EAAE,SAAS,CAAC;IACjB,QAAQ,EAAE,aAAa,CAAC;IACxB,iEAAiE;IACjE,MAAM,CAAC,EAAE;QAAE,MAAM,EAAE,cAAc,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CAC5D;AAED,2GAA2G;AAC3G,eAAO,MAAM,WAAW,GAAI,mCAKzB,OAAO,KAAG,MAiCZ,CAAC"}
@@ -1,11 +1,11 @@
1
- import { bambuddyHook } from "./api/hooks.js";
1
+ import { assignEvent, bambuddyHook, listEvents } from "./api/events.js";
2
2
  import { health, me } from "./api/health.js";
3
- import { deleteItem, downloadVersion, getItem, itemHistory, listItems, patchItem, patchVersion, restoreItem, uploadItems, uploadVersion, } from "./api/items.js";
3
+ import { deleteItem, downloadVersion, exportQueue, getItem, itemHistory, listItems, patchItem, patchVersion, restoreItem, sendToBambuddy, uploadItems, uploadVersion, versionThumbnail, } from "./api/items.js";
4
4
  import { createQueue, deleteQueue, listQueues, patchQueue, } from "./api/queues.js";
5
5
  import { Router } from "./http.js";
6
6
  /** Every route. Paths are the contract with Caddy's vhost: only /health and /hooks/bambuddy bypass SSO. */
7
- export const buildRouter = ({ sql, store, bambuddy }) => {
8
- const deps = { sql, store };
7
+ export const buildRouter = ({ sql, store, bambuddy, sender = null, }) => {
8
+ const deps = { sql, store, sender };
9
9
  return (new Router()
10
10
  .get("/health", health(sql, bambuddy), { access: "public" })
11
11
  .post("/hooks/bambuddy", bambuddyHook(sql), { access: "webhook" })
@@ -16,18 +16,24 @@ export const buildRouter = ({ sql, store, bambuddy }) => {
16
16
  .patch("/api/v1/queues/:id", patchQueue(sql))
17
17
  .delete("/api/v1/queues/:id", deleteQueue(sql))
18
18
  .post("/api/v1/queues/:id/items", uploadItems(deps), { body: "stream" })
19
+ .get("/api/v1/queues/:id/export.zip", exportQueue(deps))
19
20
  // items
20
21
  .get("/api/v1/items", listItems(deps))
21
22
  .get("/api/v1/items/:id", getItem(deps))
22
23
  .patch("/api/v1/items/:id", patchItem(deps))
23
24
  .delete("/api/v1/items/:id", deleteItem(deps))
24
25
  .post("/api/v1/items/:id/restore", restoreItem(deps))
26
+ .post("/api/v1/items/:id/send-to-bambuddy", sendToBambuddy(deps))
27
+ // print events (Bambuddy's webhook) a person resolves
28
+ .get("/api/v1/print-events", listEvents(sql))
29
+ .post("/api/v1/print-events/:id/assign", assignEvent(sql))
25
30
  .get("/api/v1/items/:id/history", itemHistory(deps))
26
31
  // versions
27
32
  .post("/api/v1/items/:id/versions", uploadVersion(deps), {
28
33
  body: "stream",
29
34
  })
30
35
  .patch("/api/v1/items/:id/versions/:n", patchVersion(deps))
31
- .get("/api/v1/items/:id/versions/:n/download", downloadVersion(deps)));
36
+ .get("/api/v1/items/:id/versions/:n/download", downloadVersion(deps))
37
+ .get("/api/v1/items/:id/versions/:n/thumbnail", versionThumbnail(deps)));
32
38
  };
33
39
  //# sourceMappingURL=app.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/server/app.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAsB,MAAM,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AACjE,OAAO,EACL,UAAU,EACV,eAAe,EACf,OAAO,EACP,WAAW,EACX,SAAS,EACT,SAAS,EACT,YAAY,EACZ,WAAW,EACX,WAAW,EACX,aAAa,GACd,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,WAAW,EACX,WAAW,EACX,UAAU,EACV,UAAU,GACX,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AASnC,2GAA2G;AAC3G,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAW,EAAU,EAAE;IACvE,MAAM,IAAI,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;IAC5B,OAAO,CACL,IAAI,MAAM,EAAE;SACT,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;SAC3D,IAAI,CAAC,iBAAiB,EAAE,YAAY,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;SACjE,GAAG,CAAC,YAAY,EAAE,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC3C,SAAS;SACR,GAAG,CAAC,gBAAgB,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC;SACtC,IAAI,CAAC,gBAAgB,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC;SACxC,KAAK,CAAC,oBAAoB,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC;SAC5C,MAAM,CAAC,oBAAoB,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC;SAC9C,IAAI,CAAC,0BAA0B,EAAE,WAAW,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;QACxE,QAAQ;SACP,GAAG,CAAC,eAAe,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;SACrC,GAAG,CAAC,mBAAmB,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;SACvC,KAAK,CAAC,mBAAmB,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;SAC3C,MAAM,CAAC,mBAAmB,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;SAC7C,IAAI,CAAC,2BAA2B,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;SACpD,GAAG,CAAC,2BAA2B,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;QACpD,WAAW;SACV,IAAI,CAAC,4BAA4B,EAAE,aAAa,CAAC,IAAI,CAAC,EAAE;QACvD,IAAI,EAAE,QAAQ;KACf,CAAC;SACD,KAAK,CAAC,+BAA+B,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC;SAC1D,GAAG,CAAC,wCAAwC,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC,CACxE,CAAC;AACJ,CAAC,CAAC"}
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/server/app.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACxE,OAAO,EAAsB,MAAM,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AACjE,OAAO,EACL,UAAU,EACV,eAAe,EACf,WAAW,EACX,OAAO,EACP,WAAW,EACX,SAAS,EACT,SAAS,EACT,YAAY,EACZ,WAAW,EACX,cAAc,EACd,WAAW,EACX,aAAa,EACb,gBAAgB,GACjB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,WAAW,EACX,WAAW,EACX,UAAU,EACV,UAAU,GACX,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAWnC,2GAA2G;AAC3G,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,EAC1B,GAAG,EACH,KAAK,EACL,QAAQ,EACR,MAAM,GAAG,IAAI,GACL,EAAU,EAAE;IACpB,MAAM,IAAI,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IACpC,OAAO,CACL,IAAI,MAAM,EAAE;SACT,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;SAC3D,IAAI,CAAC,iBAAiB,EAAE,YAAY,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;SACjE,GAAG,CAAC,YAAY,EAAE,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC3C,SAAS;SACR,GAAG,CAAC,gBAAgB,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC;SACtC,IAAI,CAAC,gBAAgB,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC;SACxC,KAAK,CAAC,oBAAoB,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC;SAC5C,MAAM,CAAC,oBAAoB,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC;SAC9C,IAAI,CAAC,0BAA0B,EAAE,WAAW,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;SACvE,GAAG,CAAC,+BAA+B,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;QACxD,QAAQ;SACP,GAAG,CAAC,eAAe,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;SACrC,GAAG,CAAC,mBAAmB,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;SACvC,KAAK,CAAC,mBAAmB,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;SAC3C,MAAM,CAAC,mBAAmB,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;SAC7C,IAAI,CAAC,2BAA2B,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;SACpD,IAAI,CAAC,oCAAoC,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC;QACjE,sDAAsD;SACrD,GAAG,CAAC,sBAAsB,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC;SAC5C,IAAI,CAAC,iCAAiC,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC;SACzD,GAAG,CAAC,2BAA2B,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;QACpD,WAAW;SACV,IAAI,CAAC,4BAA4B,EAAE,aAAa,CAAC,IAAI,CAAC,EAAE;QACvD,IAAI,EAAE,QAAQ;KACf,CAAC;SACD,KAAK,CAAC,+BAA+B,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC;SAC1D,GAAG,CAAC,wCAAwC,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC;SACpE,GAAG,CAAC,yCAAyC,EAAE,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAC1E,CAAC;AACJ,CAAC,CAAC"}
@@ -1,15 +1,32 @@
1
+ /**
2
+ * Bambuddy's API at BAMBUDDY_URL (https://bambuddy.mxpicture.de). vps1's
3
+ * Caddy lets this host's calls with an X-API-Key through without SSO, for
4
+ * /api/v1/library/files, /api/v1/library/folders and /api/v1/auth/status
5
+ * only (ansible-playbook-contabo-vps, plan 2026-11-09_01 §3).
6
+ *
7
+ * The API key needs two scopes in Bambuddy:
8
+ * - "Manage library" (can_manage_library): upload, create the folder;
9
+ * - "Read status" (can_read_status): list the folders.
10
+ */
11
+ export interface BambuddyUpload {
12
+ /** the new library file's id, or the existing one's when Bambuddy already had the same content */
13
+ fileId: number;
14
+ duplicate: boolean;
15
+ }
1
16
  export interface BambuddyClient {
2
17
  /** Reachable with the API key? Never throws. */
3
18
  ping(): Promise<{
4
19
  ok: boolean;
5
20
  detail: string;
6
21
  }>;
22
+ /** The id of the top-level library folder with this name, created if missing. */
23
+ folderId(name: string): Promise<number>;
24
+ /** Upload a file from disk into a library folder. */
25
+ upload(path: string, filename: string, folderId: number): Promise<BambuddyUpload>;
26
+ }
27
+ export declare class BambuddyError extends Error {
28
+ readonly status: number;
29
+ constructor(status: number, message: string);
7
30
  }
8
- /**
9
- * Bambuddy's API, at BAMBUDDY_URL (https://bambuddy.mxpicture.de: vps1's
10
- * Caddy lets this host's calls with an X-API-Key through without SSO, for the
11
- * library endpoints and /api/v1/auth/status only). Upload and folder lookup
12
- * come with Send to Bambuddy (PB6).
13
- */
14
31
  export declare const createBambuddyClient: (url: string, apiKey: string, fetchImpl?: typeof fetch) => BambuddyClient;
15
32
  //# sourceMappingURL=bambuddy.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"bambuddy.d.ts","sourceRoot":"","sources":["../../src/server/bambuddy.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,cAAc;IAC7B,gDAAgD;IAChD,IAAI,IAAI,OAAO,CAAC;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAClD;AAED;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,GAC/B,KAAK,MAAM,EACX,QAAQ,MAAM,EACd,YAAW,OAAO,KAAa,KAC9B,cAoBD,CAAC"}
1
+ {"version":3,"file":"bambuddy.d.ts","sourceRoot":"","sources":["../../src/server/bambuddy.ts"],"names":[],"mappings":"AAGA;;;;;;;;;GASG;AAEH,MAAM,WAAW,cAAc;IAC7B,kGAAkG;IAClG,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,gDAAgD;IAChD,IAAI,IAAI,OAAO,CAAC;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACjD,iFAAiF;IACjF,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACxC,qDAAqD;IACrD,MAAM,CACJ,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,cAAc,CAAC,CAAC;CAC5B;AAED,qBAAa,aAAc,SAAQ,KAAK;IAEpC,QAAQ,CAAC,MAAM,EAAE,MAAM;gBAAd,MAAM,EAAE,MAAM,EACvB,OAAO,EAAE,MAAM;CAIlB;AAaD,eAAO,MAAM,oBAAoB,GAC/B,KAAK,MAAM,EACX,QAAQ,MAAM,EACd,YAAW,OAAO,KAAa,KAC9B,cAmGF,CAAC"}
@@ -1,31 +1,103 @@
1
+ import { openAsBlob } from "node:fs";
1
2
  import { errorMessage } from "./log.js";
2
- /**
3
- * Bambuddy's API, at BAMBUDDY_URL (https://bambuddy.mxpicture.de: vps1's
4
- * Caddy lets this host's calls with an X-API-Key through without SSO, for the
5
- * library endpoints and /api/v1/auth/status only). Upload and folder lookup
6
- * come with Send to Bambuddy (PB6).
7
- */
8
- export const createBambuddyClient = (url, apiKey, fetchImpl = fetch) => ({
9
- async ping() {
3
+ export class BambuddyError extends Error {
4
+ status;
5
+ constructor(status, message) {
6
+ super(message);
7
+ this.status = status;
8
+ }
9
+ }
10
+ const TIMEOUT_MS = 10_000;
11
+ /** Uploads of a few hundred MB through the home uplink and the tunnel. */
12
+ const UPLOAD_TIMEOUT_MS = 30 * 60_000;
13
+ export const createBambuddyClient = (url, apiKey, fetchImpl = fetch) => {
14
+ const call = async (path, init = {}, timeout = TIMEOUT_MS) => {
15
+ let res;
10
16
  try {
11
- const res = await fetchImpl(`${url}/api/v1/auth/status`, {
12
- headers: { "X-API-Key": apiKey, Accept: "application/json" },
17
+ res = await fetchImpl(`${url}${path}`, {
18
+ ...init,
19
+ headers: {
20
+ "X-API-Key": apiKey,
21
+ Accept: "application/json",
22
+ ...init.headers,
23
+ },
24
+ // A redirect is the SSO portal: vps1's route did not let us through.
13
25
  redirect: "manual",
14
- signal: AbortSignal.timeout(10_000),
26
+ signal: AbortSignal.timeout(timeout),
15
27
  });
16
- // A redirect is the SSO portal: the vps1 route did not let us through.
17
- if (res.status >= 300 && res.status < 400)
18
- return {
19
- ok: false,
20
- detail: `redirected (${res.status}): SSO gate, not the API route`,
21
- };
22
- if (!res.ok)
23
- return { ok: false, detail: `HTTP ${res.status}` };
24
- return { ok: true, detail: "ok" };
25
28
  }
26
29
  catch (e) {
27
- return { ok: false, detail: errorMessage(e) };
30
+ throw new BambuddyError(502, `Bambuddy unreachable: ${errorMessage(e)}`);
28
31
  }
29
- },
30
- });
32
+ if (res.status >= 300 && res.status < 400)
33
+ throw new BambuddyError(502, `Bambuddy redirected (${res.status}): the SSO gate, not the API route on vps1`);
34
+ const text = await res.text();
35
+ if (!res.ok) {
36
+ let detail = text.slice(0, 300);
37
+ try {
38
+ const body = JSON.parse(text);
39
+ if (body.detail)
40
+ detail =
41
+ typeof body.detail === "string"
42
+ ? body.detail
43
+ : JSON.stringify(body.detail);
44
+ }
45
+ catch {
46
+ // not JSON: keep the text
47
+ }
48
+ // 502 for our caller whatever Bambuddy said: the failure is upstream, not in the request to us.
49
+ throw new BambuddyError(502, `Bambuddy ${res.status}: ${detail}`);
50
+ }
51
+ return JSON.parse(text);
52
+ };
53
+ let cachedFolder = null;
54
+ return {
55
+ async ping() {
56
+ try {
57
+ await call("/api/v1/auth/status");
58
+ return { ok: true, detail: "ok" };
59
+ }
60
+ catch (e) {
61
+ return { ok: false, detail: errorMessage(e) };
62
+ }
63
+ },
64
+ async folderId(name) {
65
+ if (cachedFolder?.name === name)
66
+ return cachedFolder.id;
67
+ const tree = await call("/api/v1/library/folders");
68
+ // Top level only: a folder of that name inside another one is not ours.
69
+ let folder = tree.find((f) => f.parent_id === null && f.name === name);
70
+ if (!folder)
71
+ folder = await call("/api/v1/library/folders", {
72
+ method: "POST",
73
+ headers: { "Content-Type": "application/json" },
74
+ body: JSON.stringify({ name }),
75
+ });
76
+ cachedFolder = { name, id: folder.id };
77
+ return folder.id;
78
+ },
79
+ async upload(path, filename, folderId) {
80
+ const form = new FormData();
81
+ // A file-backed Blob: streamed from disk, never read into memory.
82
+ form.append("file", await openAsBlob(path), filename);
83
+ const params = new URLSearchParams({
84
+ folder_id: String(folderId),
85
+ generate_stl_thumbnails: "true",
86
+ });
87
+ let r;
88
+ try {
89
+ r = await call(`/api/v1/library/files?${params}`, { method: "POST", body: form }, UPLOAD_TIMEOUT_MS);
90
+ }
91
+ catch (e) {
92
+ // The folder may be gone (deleted in Bambuddy): look it up again next time.
93
+ cachedFolder = null;
94
+ throw e;
95
+ }
96
+ return {
97
+ fileId: r.duplicate_of ?? r.id,
98
+ duplicate: r.duplicate_of != null,
99
+ };
100
+ },
101
+ };
102
+ };
31
103
  //# sourceMappingURL=bambuddy.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"bambuddy.js","sourceRoot":"","sources":["../../src/server/bambuddy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAOxC;;;;;GAKG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,GAAW,EACX,MAAc,EACd,YAA0B,KAAK,EACf,EAAE,CAAC,CAAC;IACpB,KAAK,CAAC,IAAI;QACR,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,GAAG,GAAG,qBAAqB,EAAE;gBACvD,OAAO,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,EAAE;gBAC5D,QAAQ,EAAE,QAAQ;gBAClB,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC;aACpC,CAAC,CAAC;YACH,uEAAuE;YACvE,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,GAAG;gBACvC,OAAO;oBACL,EAAE,EAAE,KAAK;oBACT,MAAM,EAAE,eAAe,GAAG,CAAC,MAAM,gCAAgC;iBAClE,CAAC;YACJ,IAAI,CAAC,GAAG,CAAC,EAAE;gBAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC;YAChE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;QACpC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;QAChD,CAAC;IACH,CAAC;CACF,CAAC,CAAC"}
1
+ {"version":3,"file":"bambuddy.js","sourceRoot":"","sources":["../../src/server/bambuddy.ts"],"names":[],"mappings":"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"}