@flowselections/layout-maker 1.54.1 → 1.55.2
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-lib/components/LivePrintstatusRegel.d.ts.map +1 -1
- package/dist-lib/components/LivePrintstatusRegel.js +4 -3
- package/dist-lib/components/PrintQueuePage.d.ts.map +1 -1
- package/dist-lib/components/PrintQueuePage.js +1 -0
- package/dist-lib/components/TestprintDialog.d.ts.map +1 -1
- package/dist-lib/components/TestprintDialog.js +3 -2
- package/dist-lib/integrations/supabase/types.d.ts +39 -0
- package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
- package/dist-lib/lib/foutTekst.d.ts.map +1 -1
- package/dist-lib/lib/foutTekst.js +12 -1
- package/dist-lib/lib/orderData.server.d.ts.map +1 -1
- package/dist-lib/lib/orderData.server.js +31 -3
- package/dist-lib/lib/pakbonHtml.d.ts +2 -0
- package/dist-lib/lib/pakbonHtml.d.ts.map +1 -1
- package/dist-lib/lib/pakbonHtml.js +23 -4
- package/dist-lib/lib/printQueue.server.d.ts +11 -2
- package/dist-lib/lib/printQueue.server.d.ts.map +1 -1
- package/dist-lib/lib/printQueue.server.js +78 -19
- package/dist-lib/lib/printService.functions.d.ts +10 -0
- package/dist-lib/lib/printService.functions.d.ts.map +1 -1
- package/dist-lib/lib/printService.functions.js +7 -1
- package/dist-lib/lib/printnodeWebhook.d.ts +9 -8
- package/dist-lib/lib/printnodeWebhook.d.ts.map +1 -1
- package/dist-lib/lib/printnodeWebhook.js +84 -58
- package/dist-lib/lib/printnodeWebhookBeheer.server.d.ts +7 -1
- package/dist-lib/lib/printnodeWebhookBeheer.server.d.ts.map +1 -1
- package/dist-lib/lib/printnodeWebhookBeheer.server.js +10 -9
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"foutTekst.d.ts","sourceRoot":"","sources":["../../src/lib/foutTekst.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,wDAAwD;IACxD,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,GAAG,eAAe,GAAG,IAAI,CAkBxE;AAED,iFAAiF;AACjF,wBAAgB,YAAY,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,SAAoB,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"foutTekst.d.ts","sourceRoot":"","sources":["../../src/lib/foutTekst.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,wDAAwD;IACxD,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,GAAG,eAAe,GAAG,IAAI,CAkBxE;AAED,iFAAiF;AACjF,wBAAgB,YAAY,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,SAAoB,GAAG,MAAM,CAgC7E"}
|
|
@@ -50,5 +50,16 @@ export function leesbareFout(err, prefix = "Opslaan mislukt") {
|
|
|
50
50
|
return `${prefix}: de gekozen printer of plek bestaat niet (meer).`;
|
|
51
51
|
if (/failed to fetch|network/i.test(msg))
|
|
52
52
|
return `${prefix}: geen verbinding met de server.`;
|
|
53
|
-
|
|
53
|
+
if (msg)
|
|
54
|
+
return `${prefix}: ${msg.replace(/^[A-Z_]+:\s*/, "")}`;
|
|
55
|
+
const extra = [e.details, e.hint, e.code ? `code ${e.code}` : ""].filter(Boolean).join(" — ");
|
|
56
|
+
if (extra)
|
|
57
|
+
return `${prefix}: ${extra}`;
|
|
58
|
+
try {
|
|
59
|
+
const ruw = JSON.stringify(err);
|
|
60
|
+
if (ruw && ruw !== "{}" && ruw !== "null")
|
|
61
|
+
return `${prefix}: ${ruw.slice(0, 300)}`;
|
|
62
|
+
}
|
|
63
|
+
catch { /* niets */ }
|
|
64
|
+
return `${prefix} (geen reden ontvangen).`;
|
|
54
65
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orderData.server.d.ts","sourceRoot":"","sources":["../../src/lib/orderData.server.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAEnD,KAAK,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAE/B,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;AAwBtD,mEAAmE;AACnE,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAKvD;AAED,+EAA+E;AAC/E,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG;IACrD,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB,CAgCA;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG;IAC7C,KAAK,EAAE,WAAW,CAAC;IACnB,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B,CAMA;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAClC,EAAE,EAAE,OAAO,EACX,MAAM,EAAE;IAAE,KAAK,EAAE,WAAW,CAAC;IAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAC7E,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"orderData.server.d.ts","sourceRoot":"","sources":["../../src/lib/orderData.server.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAEnD,KAAK,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAE/B,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;AAwBtD,mEAAmE;AACnE,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAKvD;AAED,+EAA+E;AAC/E,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG;IACrD,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB,CAgCA;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG;IAC7C,KAAK,EAAE,WAAW,CAAC;IACnB,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B,CAMA;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAClC,EAAE,EAAE,OAAO,EACX,MAAM,EAAE;IAAE,KAAK,EAAE,WAAW,CAAC;IAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAC7E,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,CA+arB;AAyFD;;;GAGG;AACH,wBAAsB,uBAAuB,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,CAGhG"}
|
|
@@ -424,7 +424,36 @@ export async function laadPakbonData(db, opties) {
|
|
|
424
424
|
: 0;
|
|
425
425
|
return maakProduct(r, num(r["quantity"]), fusten, num(r["plants_per_crate"]));
|
|
426
426
|
});
|
|
427
|
-
|
|
427
|
+
const kop = maakKopsecties(orders, scope);
|
|
428
|
+
await vulKlantEnAdres(db, orders, kop);
|
|
429
|
+
return { ...kop, karren, producten: losseRegels };
|
|
430
|
+
}
|
|
431
|
+
/** Klant, klantnummer en afleveradres uit de klantkaart (match op customer_id). */
|
|
432
|
+
async function vulKlantEnAdres(db, orders, kop) {
|
|
433
|
+
const ids = uniek(orders.map((o) => o["customer_id"]));
|
|
434
|
+
const klant = (kop["klant"] ?? {});
|
|
435
|
+
klant["nummer"] = "";
|
|
436
|
+
if (ids.length !== 1)
|
|
437
|
+
return;
|
|
438
|
+
const c = await veilig(() => db
|
|
439
|
+
.from("customers")
|
|
440
|
+
.select("customer_number, company_name, contact_person, phone, email, street, house_number, address, address_line1, postal_code, city, country")
|
|
441
|
+
.eq("id", ids[0])
|
|
442
|
+
.maybeSingle());
|
|
443
|
+
if (!c)
|
|
444
|
+
return;
|
|
445
|
+
const t = (v) => (v == null ? "" : String(v).trim());
|
|
446
|
+
klant["nummer"] = t(c["customer_number"]);
|
|
447
|
+
if (!t(klant["naam"]))
|
|
448
|
+
klant["naam"] = t(c["company_name"]);
|
|
449
|
+
klant["contact"] = t(c["contact_person"]);
|
|
450
|
+
const straat = t(c["street"]) ? [t(c["street"]), t(c["house_number"])].filter(Boolean).join(" ") : t(c["address_line1"]) || t(c["address"]);
|
|
451
|
+
kop["afleveradres"] = {
|
|
452
|
+
naam: t(c["company_name"]) || t(klant["naam"]),
|
|
453
|
+
adres: straat,
|
|
454
|
+
plaats: [t(c["postal_code"]), t(c["city"])].filter(Boolean).join(" "),
|
|
455
|
+
land: t(c["country"]),
|
|
456
|
+
};
|
|
428
457
|
}
|
|
429
458
|
/**
|
|
430
459
|
* Kopsecties bij één of meerdere orders. Conservatief: bij meerdere orders
|
|
@@ -464,7 +493,6 @@ function datumTekst(waarde) {
|
|
|
464
493
|
function maakKopsecties(orders, scope) {
|
|
465
494
|
const nummers = uniek(orders.map((o) => o["order_number"]));
|
|
466
495
|
const klanten = uniek(orders.map((o) => o["customer_name"]));
|
|
467
|
-
const klantIds = uniek(orders.map((o) => o["customer_id"]));
|
|
468
496
|
const eerste = orders[0] ?? {};
|
|
469
497
|
const meer = orders.length > 1;
|
|
470
498
|
const lijst = (v) => (v.length > 4 ? `${v.slice(0, 4).join(", ")} +${v.length - 4}` : v.join(", "));
|
|
@@ -481,7 +509,7 @@ function maakKopsecties(orders, scope) {
|
|
|
481
509
|
},
|
|
482
510
|
klant: {
|
|
483
511
|
naam: klanten.length === 1 ? klanten[0] : klanten.length ? `Meerdere klanten (${klanten.length})` : "",
|
|
484
|
-
nummer:
|
|
512
|
+
nummer: "", // nooit het interne id; ingevuld uit de klantkaart
|
|
485
513
|
referentie: lijst(nummers),
|
|
486
514
|
},
|
|
487
515
|
};
|
|
@@ -47,6 +47,8 @@ export declare function esc(v: unknown): string;
|
|
|
47
47
|
* afdrukt.
|
|
48
48
|
*/
|
|
49
49
|
export declare function maakPakbonOrder(input: unknown): PakbonOrder;
|
|
50
|
+
/** Een technische code (uuid) wordt nooit aan de klant getoond. */
|
|
51
|
+
export declare function zonderUuid(waarde: unknown): string;
|
|
50
52
|
/** Bouwt alleen de inhoud (zonder <html>-wrapper) van de pakbon. */
|
|
51
53
|
export declare function renderPakbonBody(config: PakbonConfig | unknown, order: PakbonOrder, opties?: PakbonRenderOpties): string;
|
|
52
54
|
/** Bouwt een volledig printbaar HTML-document van de pakbon. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pakbonHtml.d.ts","sourceRoot":"","sources":["../../src/lib/pakbonHtml.ts"],"names":[],"mappings":"AAUA,OAAO,EAyBL,KAAK,SAAS,EAEd,KAAK,YAAY,EAGlB,MAAM,iBAAiB,CAAC;AAMzB,2FAA2F;AAC3F,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE;QACL,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,UAAU,CAAC,EAAE,OAAO,EAAE,CAAC;QACvB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACH,CAAC;AAEF,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kDAAkD;IAClD,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,kBAAkB;IACjC,iDAAiD;IACjD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0BAA0B;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,oEAAoE;IACpE,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;IACrB,wEAAwE;IACxE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,sEAAsE;IACtE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,uEAAuE;IACvE,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;;OAGG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC;AAWD,wBAAgB,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CAKtC;AAyBD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAqF3D;
|
|
1
|
+
{"version":3,"file":"pakbonHtml.d.ts","sourceRoot":"","sources":["../../src/lib/pakbonHtml.ts"],"names":[],"mappings":"AAUA,OAAO,EAyBL,KAAK,SAAS,EAEd,KAAK,YAAY,EAGlB,MAAM,iBAAiB,CAAC;AAMzB,2FAA2F;AAC3F,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE;QACL,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,UAAU,CAAC,EAAE,OAAO,EAAE,CAAC;QACvB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACH,CAAC;AAEF,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kDAAkD;IAClD,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,kBAAkB;IACjC,iDAAiD;IACjD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0BAA0B;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,oEAAoE;IACpE,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;IACrB,wEAAwE;IACxE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,sEAAsE;IACtE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,uEAAuE;IACvE,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;;OAGG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC;AAWD,wBAAgB,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CAKtC;AAyBD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAqF3D;AA4ED,mEAAmE;AACnE,wBAAgB,UAAU,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAGlD;AAsoBD,oEAAoE;AACpE,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,YAAY,GAAG,OAAO,EAC9B,KAAK,EAAE,WAAW,EAClB,MAAM,GAAE,kBAAuB,GAC9B,MAAM,CAyDR;AAgBD,gEAAgE;AAChE,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,YAAY,GAAG,OAAO,EAC9B,KAAK,EAAE,WAAW,EAClB,MAAM,GAAE,kBAAuB,GAC9B,MAAM,CAkFR;AAED,iEAAiE;AACjE,wBAAgB,oBAAoB,IAAI,WAAW,CAElD;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,YAAY,GAAG,OAAO,EAC9B,KAAK,EAAE,WAAW,EAClB,MAAM,GAAE,kBAAuB,GAC9B,IAAI,CAsCN;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,YAAY,GAAG,OAAO,EAC9B,KAAK,EAAE,WAAW,EAClB,MAAM,GAAE,kBAAuB,GAC9B,OAAO,CAAC,IAAI,CAAC,CAUf"}
|
|
@@ -202,8 +202,15 @@ function colgroupHtml(kols) {
|
|
|
202
202
|
const b = kolBreedtes(kols);
|
|
203
203
|
return `<colgroup>${b.map((w) => `<col style="width:${w.toFixed(4)}%">`).join("")}</colgroup>`;
|
|
204
204
|
}
|
|
205
|
+
const UUID_RE = /\b[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\b/i;
|
|
206
|
+
/** Een technische code (uuid) wordt nooit aan de klant getoond. */
|
|
207
|
+
export function zonderUuid(waarde) {
|
|
208
|
+
const t = waarde == null ? "" : String(waarde).trim();
|
|
209
|
+
return UUID_RE.test(t) ? "" : t;
|
|
210
|
+
}
|
|
205
211
|
function rij(label, waarde) {
|
|
206
|
-
|
|
212
|
+
waarde = zonderUuid(waarde);
|
|
213
|
+
if (waarde === "")
|
|
207
214
|
return "";
|
|
208
215
|
return `<div class="kv"><span class="k">${esc(label)}</span><span class="v">${esc(waarde)}</span></div>`;
|
|
209
216
|
}
|
|
@@ -519,7 +526,19 @@ function scheidingHtml(modus) {
|
|
|
519
526
|
return `<div class="balk"></div>`;
|
|
520
527
|
return "";
|
|
521
528
|
}
|
|
529
|
+
const KOP_BLOKKEN = new Set([
|
|
530
|
+
"bedrijfsgegevens", "klantgegevens", "afleveradres", "factuuradres", "orderinformatie", "transportinformatie",
|
|
531
|
+
]);
|
|
532
|
+
/** Laat een kopblok weg als er niets in staat (geen lege kop). */
|
|
522
533
|
function sectieHtml(s, order, zoek, opties) {
|
|
534
|
+
const html = sectieHtmlRuw(s, order, zoek, opties);
|
|
535
|
+
if (!KOP_BLOKKEN.has(String(s.type)))
|
|
536
|
+
return html;
|
|
537
|
+
const zonderTitel = html.replace(titelHtml(s), "");
|
|
538
|
+
const tekst = zonderTitel.replace(/<[^>]*>/g, "").replace(/ |\s|·/g, "");
|
|
539
|
+
return tekst ? html : "";
|
|
540
|
+
}
|
|
541
|
+
function sectieHtmlRuw(s, order, zoek, opties) {
|
|
523
542
|
switch (s.type) {
|
|
524
543
|
case "logo": {
|
|
525
544
|
const logoId = typeof s.opties?.["logoId"] === "string" ? String(s.opties["logoId"]) : null;
|
|
@@ -549,7 +568,7 @@ function sectieHtml(s, order, zoek, opties) {
|
|
|
549
568
|
].join(""));
|
|
550
569
|
case "klantgegevens":
|
|
551
570
|
return (titelHtml(s) +
|
|
552
|
-
`<div class="vet">${esc(order.klant.naam)}</div>` +
|
|
571
|
+
`<div class="vet">${esc(zonderUuid(order.klant.naam))}</div>` +
|
|
553
572
|
(opt(s, "toonKlantnummer", true) ? rij("Klantnummer", order.klant.nummer) : "") +
|
|
554
573
|
(opt(s, "toonContact", true) ? rij("Contact", order.klant.contact) : "") +
|
|
555
574
|
(opt(s, "toonReferentie", true) ? rij("Referentie", order.klant.referentie) : ""));
|
|
@@ -557,8 +576,8 @@ function sectieHtml(s, order, zoek, opties) {
|
|
|
557
576
|
case "factuuradres": {
|
|
558
577
|
const a = s.type === "afleveradres" ? order.afleveradres : order.factuuradres;
|
|
559
578
|
return (titelHtml(s) +
|
|
560
|
-
`<div class="vet"
|
|
561
|
-
(opt(s, "toonLand", true) ? `<div>${esc(a.land)}</div>` : ""));
|
|
579
|
+
[a.naam, a.adres, a.plaats].map((v, i) => (zonderUuid(v) ? `<div${i === 0 ? ' class="vet"' : ""}>${esc(zonderUuid(v))}</div>` : "")).join("") +
|
|
580
|
+
(opt(s, "toonLand", true) && zonderUuid(a.land) ? `<div>${esc(a.land)}</div>` : ""));
|
|
562
581
|
}
|
|
563
582
|
case "orderinformatie":
|
|
564
583
|
return (titelHtml(s) +
|
|
@@ -31,7 +31,7 @@ export type LayoutKeuze = {
|
|
|
31
31
|
ontwerpWint: boolean;
|
|
32
32
|
};
|
|
33
33
|
/** Waar de uiteindelijke opmaak vandaan kwam (uitkomst, geen invoer). */
|
|
34
|
-
export type GebruikteBron = "extern_pdf" | "eigen_layout" | "render_html" | "klantlayout";
|
|
34
|
+
export type GebruikteBron = "extern_pdf" | "eigen_layout" | "render_html" | "klantlayout" | "floriday_1op1";
|
|
35
35
|
/** Meelifter waarin `bouwHtml` vastlegt welke bron het uiteindelijk werd. */
|
|
36
36
|
export type BronUitkomst = {
|
|
37
37
|
bron: GebruikteBron;
|
|
@@ -40,11 +40,20 @@ export type BronUitkomst = {
|
|
|
40
40
|
export declare function normaliseerDocumenttype(type: unknown): string;
|
|
41
41
|
/** Het layout-id zoals de Engine het aanlevert (kolom of payload). */
|
|
42
42
|
export declare function leesEngineLayoutId(job: Job): string;
|
|
43
|
+
/**
|
|
44
|
+
* Herkent een ondertekende downloadlink naar de EIGEN bestandsopslag (adres
|
|
45
|
+
* uit de omgeving, niets vast in code) en geeft map + pad terug. Zo werkt een
|
|
46
|
+
* herprint ook als de link (1 uur geldig) al verlopen is.
|
|
47
|
+
*/
|
|
48
|
+
export declare function eigenOpslagPad(url: string, eigenBasis: string | undefined): {
|
|
49
|
+
bucket: string;
|
|
50
|
+
pad: string;
|
|
51
|
+
} | null;
|
|
43
52
|
/**
|
|
44
53
|
* Haalt een kant-en-klare PDF van de opdracht op (klantstickers, standaard
|
|
45
54
|
* Floriday-documenten). Die gaat ongewijzigd naar de printer.
|
|
46
55
|
*/
|
|
47
|
-
export declare function kantEnKlarePdf(
|
|
56
|
+
export declare function kantEnKlarePdf(db: PrintDb, job: Job): Promise<string | null>;
|
|
48
57
|
/**
|
|
49
58
|
* Bouwt de HTML van de opdracht.
|
|
50
59
|
* Volgorde: gekoppelde layout wint > meegestuurde HTML > actieve layout van
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"printQueue.server.d.ts","sourceRoot":"","sources":["../../src/lib/printQueue.server.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAkC5D,KAAK,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAE/B,mFAAmF;AACnF,MAAM,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAEpD;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,EAAE,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAW1E;AAoDD,2EAA2E;AAC3E,qBAAa,gBAAiB,SAAQ,KAAK;IAChC,IAAI,SAAsB;CACpC;AAED,+EAA+E;AAC/E,qBAAa,iBAAkB,SAAQ,KAAK;IACjC,IAAI,SAAuB;CACrC;AAED,oFAAoF;AACpF,qBAAa,kBAAmB,SAAQ,gBAAgB;IAC7C,IAAI,SAAwB;CACtC;AAED;;;;;GAKG;AACH,MAAM,MAAM,WAAW,GAAG;IAAE,MAAM,EAAE,GAAG,GAAG,IAAI,CAAC;IAAC,WAAW,EAAE,OAAO,CAAA;CAAE,CAAC;AAEvE,yEAAyE;AACzE,MAAM,MAAM,aAAa,GAAG,YAAY,GAAG,cAAc,GAAG,aAAa,GAAG,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"printQueue.server.d.ts","sourceRoot":"","sources":["../../src/lib/printQueue.server.ts"],"names":[],"mappings":"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"}
|
|
@@ -366,29 +366,70 @@ async function zoekBronregel(db, job) {
|
|
|
366
366
|
* geen ontwerp maar een verwijzing naar het document dat Floriday aanlevert.
|
|
367
367
|
*/
|
|
368
368
|
async function isFloridayLayoutKeuze(db, job) {
|
|
369
|
+
// Geldt ook voor Engine-opdrachten: een Floriday-layout is geen ontwerp maar
|
|
370
|
+
// de opdracht "druk het aangeleverde Floriday-document 1-op-1 af".
|
|
369
371
|
const payload = (job.payload ?? {});
|
|
370
|
-
if (isEngineOpdracht(job))
|
|
371
|
-
return false;
|
|
372
372
|
const id = job.layout_id ?? payload?.["layoutId"] ?? payload?.["layout_id"] ?? null;
|
|
373
373
|
if (!id)
|
|
374
374
|
return false;
|
|
375
375
|
const { data } = await db
|
|
376
376
|
.from("document_layouts")
|
|
377
|
-
.select("
|
|
377
|
+
.select("bron")
|
|
378
378
|
.eq("id", id)
|
|
379
379
|
.maybeSingle();
|
|
380
380
|
const l = data;
|
|
381
|
-
return
|
|
381
|
+
return String(l?.bron ?? "") === "floriday";
|
|
382
|
+
}
|
|
383
|
+
/**
|
|
384
|
+
* Herkent een ondertekende downloadlink naar de EIGEN bestandsopslag (adres
|
|
385
|
+
* uit de omgeving, niets vast in code) en geeft map + pad terug. Zo werkt een
|
|
386
|
+
* herprint ook als de link (1 uur geldig) al verlopen is.
|
|
387
|
+
*/
|
|
388
|
+
export function eigenOpslagPad(url, eigenBasis) {
|
|
389
|
+
if (!eigenBasis)
|
|
390
|
+
return null;
|
|
391
|
+
let u, b;
|
|
392
|
+
try {
|
|
393
|
+
u = new URL(url);
|
|
394
|
+
b = new URL(eigenBasis);
|
|
395
|
+
}
|
|
396
|
+
catch {
|
|
397
|
+
return null;
|
|
398
|
+
}
|
|
399
|
+
if (u.host !== b.host)
|
|
400
|
+
return null;
|
|
401
|
+
const m = u.pathname.match(/^\/storage\/v1\/object\/(?:sign|public|authenticated)\/([^/]+)\/(.+)$/);
|
|
402
|
+
if (!m)
|
|
403
|
+
return null;
|
|
404
|
+
return { bucket: decodeURIComponent(m[1]), pad: decodeURIComponent(m[2]) };
|
|
405
|
+
}
|
|
406
|
+
function blijvendeOpslag(job) {
|
|
407
|
+
const p = (job.payload ?? {});
|
|
408
|
+
const o = p["pdf_opslag"];
|
|
409
|
+
if (o && typeof o["bucket"] === "string" && typeof o["pad"] === "string") {
|
|
410
|
+
return { bucket: String(o["bucket"]), pad: String(o["pad"]) };
|
|
411
|
+
}
|
|
412
|
+
return null;
|
|
382
413
|
}
|
|
383
414
|
/**
|
|
384
415
|
* Haalt een kant-en-klare PDF van de opdracht op (klantstickers, standaard
|
|
385
416
|
* Floriday-documenten). Die gaat ongewijzigd naar de printer.
|
|
386
417
|
*/
|
|
387
|
-
export async function kantEnKlarePdf(
|
|
418
|
+
export async function kantEnKlarePdf(db, job) {
|
|
388
419
|
const direct = typeof job.pdf_base64 === "string" ? job.pdf_base64.trim() : "";
|
|
389
420
|
if (direct.length > 100)
|
|
390
421
|
return direct.replace(/^data:application\/pdf;base64,/i, "");
|
|
391
422
|
const url = typeof job.pdf_url === "string" ? job.pdf_url.trim() : "";
|
|
423
|
+
const opslag = blijvendeOpslag(job) ??
|
|
424
|
+
(url ? eigenOpslagPad(url, process.env.SUPABASE_URL ?? process.env.VITE_SUPABASE_URL) : null);
|
|
425
|
+
if (opslag) {
|
|
426
|
+
const { data, error } = await db
|
|
427
|
+
.storage.from(opslag.bucket).download(opslag.pad);
|
|
428
|
+
if (error || !data) {
|
|
429
|
+
throw new PdfRenderFout("mislukt", `Floriday-document niet gevonden in de opslag (${opslag.bucket}): ${error?.message ?? "leeg bestand"}`);
|
|
430
|
+
}
|
|
431
|
+
return naarPdfBase64(new Uint8Array(await data.arrayBuffer()));
|
|
432
|
+
}
|
|
392
433
|
if (!url)
|
|
393
434
|
return null;
|
|
394
435
|
if (!/^https?:\/\//i.test(url)) {
|
|
@@ -399,12 +440,15 @@ export async function kantEnKlarePdf(_db, job) {
|
|
|
399
440
|
try {
|
|
400
441
|
const res = await fetch(url, { signal: afbreken });
|
|
401
442
|
if (!res.ok)
|
|
402
|
-
throw new Error(`
|
|
443
|
+
throw new Error(`link verlopen of niet bereikbaar (HTTP ${res.status})`);
|
|
403
444
|
bytes = new Uint8Array(await res.arrayBuffer());
|
|
404
445
|
}
|
|
405
446
|
catch (e) {
|
|
406
447
|
throw new PdfRenderFout("mislukt", `De kant-en-klare PDF kon niet worden opgehaald: ${e instanceof Error ? e.message : "onbekend"}`);
|
|
407
448
|
}
|
|
449
|
+
return naarPdfBase64(bytes);
|
|
450
|
+
}
|
|
451
|
+
function naarPdfBase64(bytes) {
|
|
408
452
|
const kop = String.fromCharCode(...bytes.slice(0, 5));
|
|
409
453
|
if (!kop.startsWith("%PDF")) {
|
|
410
454
|
throw new GeenDocumentFout("Het opgehaalde bestand is geen PDF.");
|
|
@@ -1203,18 +1247,30 @@ async function verwerkJob(db, job) {
|
|
|
1203
1247
|
let bron = await zoekBronregel(db, job);
|
|
1204
1248
|
// 1b) Legacy Floriday-keuze; Engine-opdrachten volgen uitsluitend hun
|
|
1205
1249
|
// eigen layout_id en worden nooit teruggezet naar een externe PDF.
|
|
1206
|
-
|
|
1250
|
+
const floriday = await isFloridayLayoutKeuze(db, job);
|
|
1251
|
+
if (floriday) {
|
|
1207
1252
|
bron = "extern_pdf";
|
|
1208
1253
|
job.layout_id = null;
|
|
1209
1254
|
}
|
|
1210
|
-
if (bron === "eigen_layout" || isEngineOpdracht(job)) {
|
|
1255
|
+
if (!floriday && (bron === "eigen_layout" || isEngineOpdracht(job))) {
|
|
1211
1256
|
job.pdf_base64 = null;
|
|
1212
1257
|
job.pdf_url = null;
|
|
1213
1258
|
}
|
|
1214
|
-
// 2) Kant-en-klare PDF gaat
|
|
1215
|
-
//
|
|
1216
|
-
|
|
1217
|
-
if (
|
|
1259
|
+
// 2) Kant-en-klare PDF gaat ongewijzigd door. Bij een Floriday-layout ook
|
|
1260
|
+
// voor de Engine; anders bepaalt de Engine altijd de layout.
|
|
1261
|
+
let klaar = null;
|
|
1262
|
+
if (floriday || !isEngineOpdracht(job)) {
|
|
1263
|
+
try {
|
|
1264
|
+
klaar = await kantEnKlarePdf(db, job);
|
|
1265
|
+
}
|
|
1266
|
+
catch (e) {
|
|
1267
|
+
if (!floriday)
|
|
1268
|
+
throw e;
|
|
1269
|
+
await mislukt(db, job, `Floriday-document kon niet worden opgehaald: ${e instanceof Error ? e.message : "onbekend"}`, true);
|
|
1270
|
+
return "mislukt";
|
|
1271
|
+
}
|
|
1272
|
+
}
|
|
1273
|
+
if (!klaar && bron === "extern_pdf" && (floriday || !isEngineOpdracht(job))) {
|
|
1218
1274
|
await mislukt(db, job, "Floriday-document ontbreekt: voor dit document is ingesteld dat het " +
|
|
1219
1275
|
"aangeleverde document wordt gebruikt, maar er is geen PDF meegestuurd.", true);
|
|
1220
1276
|
return "mislukt";
|
|
@@ -1238,7 +1294,7 @@ async function verwerkJob(db, job) {
|
|
|
1238
1294
|
}
|
|
1239
1295
|
// Uitkomst van de opmaakkeuze; wordt na verzending vastgelegd naast de
|
|
1240
1296
|
// aangeleverde invoer, zodat achteraf zichtbaar is wat er gekozen is.
|
|
1241
|
-
const uitkomst = { bron: "extern_pdf" };
|
|
1297
|
+
const uitkomst = { bron: floriday ? "floriday_1op1" : "extern_pdf" };
|
|
1242
1298
|
let pdfBase64 = klaar;
|
|
1243
1299
|
if (!pdfBase64) {
|
|
1244
1300
|
const html = await bouwHtml(db, job, keuze, uitkomst);
|
|
@@ -1291,7 +1347,7 @@ async function verwerkJob(db, job) {
|
|
|
1291
1347
|
printer_id: printer.id,
|
|
1292
1348
|
// layout_id blijft de aangeleverde invoer en wordt bewust niet
|
|
1293
1349
|
// overschreven met de uitkomst.
|
|
1294
|
-
gebruikte_layout_id: uitkomst.bron === "extern_pdf" ? null : (layout?.id ?? null),
|
|
1350
|
+
gebruikte_layout_id: uitkomst.bron === "extern_pdf" || uitkomst.bron === "floriday_1op1" ? null : (layout?.id ?? null),
|
|
1295
1351
|
gebruikte_bron: uitkomst.bron,
|
|
1296
1352
|
extern_job_id: externJobId,
|
|
1297
1353
|
printnode_status: "new",
|
|
@@ -1387,7 +1443,9 @@ async function synchroniseerStatussen(db) {
|
|
|
1387
1443
|
const { data } = await db
|
|
1388
1444
|
.from("print_jobs")
|
|
1389
1445
|
.select("id, extern_job_id, pogingen, opgepakt_op")
|
|
1390
|
-
|
|
1446
|
+
// Ook "voltooid" bij verzending maar nog zonder eindstatus van PrintNode
|
|
1447
|
+
// (bijv. een gemiste webhookmelding), hooguit 2 dagen terug.
|
|
1448
|
+
.or(`status.eq.bezig,and(status.eq.voltooid,printnode_status.in.(new,sent_to_client,queued),created_at.gt.${new Date(Date.now() - 2 * 864e5).toISOString()})`)
|
|
1391
1449
|
.not("extern_job_id", "is", null)
|
|
1392
1450
|
.order("created_at", { ascending: true })
|
|
1393
1451
|
.limit(STATUS_MAX_PER_RONDE);
|
|
@@ -1622,16 +1680,17 @@ export async function bepaalDocumentKeuze(db, job) {
|
|
|
1622
1680
|
let bron = await zoekBronregel(db, job);
|
|
1623
1681
|
// Engine-opdrachten houden hun eigen layout_id; nooit vervangen door een
|
|
1624
1682
|
// Floriday-PDF-keuze.
|
|
1625
|
-
|
|
1683
|
+
const floriday = await isFloridayLayoutKeuze(db, job);
|
|
1684
|
+
if (floriday) {
|
|
1626
1685
|
bron = "extern_pdf";
|
|
1627
1686
|
job.layout_id = null;
|
|
1628
1687
|
}
|
|
1629
|
-
if (bron === "eigen_layout" || isEngineOpdracht(job)) {
|
|
1688
|
+
if (!floriday && (bron === "eigen_layout" || isEngineOpdracht(job))) {
|
|
1630
1689
|
job.pdf_base64 = null;
|
|
1631
1690
|
job.pdf_url = null;
|
|
1632
1691
|
}
|
|
1633
|
-
const klaar = isEngineOpdracht(job) ?
|
|
1634
|
-
if (!klaar && bron === "extern_pdf" && !isEngineOpdracht(job)) {
|
|
1692
|
+
const klaar = floriday || !isEngineOpdracht(job) ? await kantEnKlarePdf(db, job) : null;
|
|
1693
|
+
if (!klaar && bron === "extern_pdf" && (floriday || !isEngineOpdracht(job))) {
|
|
1635
1694
|
throw new GeenDocumentFout("Voor dit document is ingesteld dat het aangeleverde document wordt " +
|
|
1636
1695
|
"gebruikt, maar er is geen PDF meegestuurd.");
|
|
1637
1696
|
}
|
|
@@ -133,12 +133,22 @@ export declare const webhookStatus: import("@tanstack/start-client-core").Option
|
|
|
133
133
|
userId: string;
|
|
134
134
|
claims: import("@supabase/auth-js").JwtPayload;
|
|
135
135
|
}, undefined, undefined, undefined>], undefined, Promise<{
|
|
136
|
+
meldingen: {
|
|
137
|
+
ontvangen_op: string;
|
|
138
|
+
http_status: number;
|
|
139
|
+
soorten: string[];
|
|
140
|
+
printnode_ids: string[];
|
|
141
|
+
gematcht: number;
|
|
142
|
+
niet_gematcht: string[];
|
|
143
|
+
}[];
|
|
136
144
|
aan: boolean;
|
|
137
145
|
weergave: "aan" | "uit" | "onbekend";
|
|
138
146
|
nietBereikbaar: boolean;
|
|
139
147
|
pnUrl: string | null;
|
|
140
148
|
pnGeslaagd: number | null;
|
|
141
149
|
pnMislukt: number | null;
|
|
150
|
+
pnOntvangen: number | null;
|
|
151
|
+
pnWeggegooid: number | null;
|
|
142
152
|
pnOpgehaaldOp: string | null;
|
|
143
153
|
url: string | null;
|
|
144
154
|
fout: string | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"printService.functions.d.ts","sourceRoot":"","sources":["../../src/lib/printService.functions.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,eAAe;;;;;;;;;;;;GASxB,CAAC;AAEL,eAAO,MAAM,qBAAqB;;;;8CAER;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;;;;;;;;;;;;;GAmBC,CAAC;AAEL,eAAO,MAAM,WAAW;;;;8CAEE;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE;;;;;;;;;;GAU7C,CAAC;AAEL,eAAO,MAAM,uBAAuB;;;;+CAET;IAAE,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE;;;;;;;;;;GAqE5C,CAAC;AAEL,eAAO,MAAM,gBAAgB;;;;;;;;;;;;GAYzB,CAAC;AAEL;;;GAGG;AACH,eAAO,MAAM,0BAA0B;;;;;;;;;;;;GAUnC,CAAC;AAEL,oFAAoF;AACpF,eAAO,MAAM,cAAc;;;;iFAevB,CAAC;AAEL;;;;;GAKG;AACH,eAAO,MAAM,cAAc;;;;8CAED;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE;;;;;;;;;;GAyDvC,CAAC;AAEL,qDAAqD;AACrD,eAAO,MAAM,aAAa
|
|
1
|
+
{"version":3,"file":"printService.functions.d.ts","sourceRoot":"","sources":["../../src/lib/printService.functions.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,eAAe;;;;;;;;;;;;GASxB,CAAC;AAEL,eAAO,MAAM,qBAAqB;;;;8CAER;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;;;;;;;;;;;;;GAmBC,CAAC;AAEL,eAAO,MAAM,WAAW;;;;8CAEE;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE;;;;;;;;;;GAU7C,CAAC;AAEL,eAAO,MAAM,uBAAuB;;;;+CAET;IAAE,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE;;;;;;;;;;GAqE5C,CAAC;AAEL,eAAO,MAAM,gBAAgB;;;;;;;;;;;;GAYzB,CAAC;AAEL;;;GAGG;AACH,eAAO,MAAM,0BAA0B;;;;;;;;;;;;GAUnC,CAAC;AAEL,oFAAoF;AACpF,eAAO,MAAM,cAAc;;;;iFAevB,CAAC;AAEL;;;;;GAKG;AACH,eAAO,MAAM,cAAc;;;;8CAED;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE;;;;;;;;;;GAyDvC,CAAC;AAEL,qDAAqD;AACrD,eAAO,MAAM,aAAa;;;;;;sBAYJ,MAAM;qBAAe,MAAM;iBAAW,MAAM,EAAE;uBAAiB,MAAM,EAAE;kBAAY,MAAM;uBAAiB,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;GAMpI,CAAC;AAEL,qEAAqE;AACrE,eAAO,MAAM,sBAAsB;;;;;;;;;;GAoB/B,CAAC"}
|
|
@@ -239,7 +239,13 @@ export const webhookStatus = createServerFn({ method: "POST" })
|
|
|
239
239
|
try {
|
|
240
240
|
const { supabaseAdmin } = await import("../integrations/supabase/client.server.js");
|
|
241
241
|
const { leesKoppeling, veiligeStatus } = await import("./printnodeWebhookBeheer.server.js");
|
|
242
|
-
|
|
242
|
+
const { data: m } = await supabaseAdmin
|
|
243
|
+
.from("printnode_webhook_meldingen")
|
|
244
|
+
.select("ontvangen_op, http_status, soorten, printnode_ids, gematcht, niet_gematcht")
|
|
245
|
+
.order("id", { ascending: false })
|
|
246
|
+
.limit(5);
|
|
247
|
+
const meldingen = (Array.isArray(m) ? m : []);
|
|
248
|
+
return { ok: true, ...veiligeStatus(await leesKoppeling(supabaseAdmin)), meldingen };
|
|
243
249
|
}
|
|
244
250
|
catch (e) {
|
|
245
251
|
return { ok: false, fout: e instanceof Error ? e.message : "Status ophalen mislukt" };
|
|
@@ -1,12 +1,9 @@
|
|
|
1
1
|
import type { SupabaseClient } from "@supabase/supabase-js";
|
|
2
2
|
type Db = SupabaseClient<any, any, any>;
|
|
3
|
-
/**
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
* aan het secret en leggen alleen die naam vast. Daarna telt alleen dat veld.
|
|
8
|
-
*/
|
|
9
|
-
export declare function controleerSecret(request: Request, secret: string, veld: string | null): {
|
|
3
|
+
/** De kop waarin PrintNode het geheim meestuurt (hulptekst webhookpagina). */
|
|
4
|
+
export declare const SECRET_KOP = "x-printnode-webhook-secret";
|
|
5
|
+
/** Controleert alleen de kop X-PrintNode-Webhook-Secret, in constante tijd. */
|
|
6
|
+
export declare function controleerSecret(request: Request, secret: string, _veld?: string | null): {
|
|
10
7
|
ok: boolean;
|
|
11
8
|
veld: string | null;
|
|
12
9
|
};
|
|
@@ -15,8 +12,12 @@ export declare function secretKlopt(request: Request, secret: string): boolean;
|
|
|
15
12
|
/**
|
|
16
13
|
* Afhandeling van een webhookaanroep. Het geheim komt uit de eigen
|
|
17
14
|
* koppelingstabel (servicerol). `secretVoorTest` alleen voor tests.
|
|
15
|
+
* Elk geldig (geheim klopt) verzoek krijgt 2xx + OK-kop, ook bij onbekende
|
|
16
|
+
* opdrachten of een fout in één melding.
|
|
18
17
|
*/
|
|
19
|
-
export declare function behandelPrintNodeWebhook(request: Request, db: Db, secretVoorTest?: string
|
|
18
|
+
export declare function behandelPrintNodeWebhook(request: Request, db: Db, secretVoorTest?: string, opties?: {
|
|
19
|
+
wachtMs?: number;
|
|
20
|
+
}): Promise<Response>;
|
|
20
21
|
/** Haalt alle computers op bij PrintNode en slaat hun status op per id. */
|
|
21
22
|
export declare function ververs(db: Db): Promise<number>;
|
|
22
23
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"printnodeWebhook.d.ts","sourceRoot":"","sources":["../../src/lib/printnodeWebhook.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,KAAK,EAAE,GAAG,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAWxC
|
|
1
|
+
{"version":3,"file":"printnodeWebhook.d.ts","sourceRoot":"","sources":["../../src/lib/printnodeWebhook.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,KAAK,EAAE,GAAG,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAWxC,8EAA8E;AAC9E,eAAO,MAAM,UAAU,+BAA+B,CAAC;AAEvD,+EAA+E;AAC/E,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,MAAM,EACd,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,GACpB;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAGtC;AAED,2CAA2C;AAC3C,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAErE;AA8BD;;;;;GAKG;AACH,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,OAAO,EAChB,EAAE,EAAE,EAAE,EACN,cAAc,CAAC,EAAE,MAAM,EACvB,MAAM,GAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAO,GAChC,OAAO,CAAC,QAAQ,CAAC,CA4EnB;AAED,2EAA2E;AAC3E,wBAAsB,OAAO,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAgBrD"}
|