@flowselections/layout-maker 1.59.2 → 1.61.1
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 +29 -29
- package/dist-lib/components/PrintInstallatiesBlok.d.ts +3 -0
- package/dist-lib/components/PrintInstallatiesBlok.d.ts.map +1 -0
- package/dist-lib/components/PrintInstallatiesBlok.js +29 -0
- package/dist-lib/components/PrintQueuePage.d.ts.map +1 -1
- package/dist-lib/components/PrintQueuePage.js +27 -8
- package/dist-lib/components/PrintStatusBanner.d.ts.map +1 -1
- package/dist-lib/components/PrintStatusBanner.js +3 -1
- package/dist-lib/components/PrintenInstellenWizard.d.ts.map +1 -1
- package/dist-lib/components/PrintenInstellenWizard.js +14 -1
- package/dist-lib/components/WerkplekOmzettingStap.d.ts.map +1 -1
- package/dist-lib/components/WerkplekOmzettingStap.js +2 -1
- package/dist-lib/components/WerkplekkenTab.d.ts.map +1 -1
- package/dist-lib/components/WerkplekkenTab.js +27 -3
- package/dist-lib/index.js +3 -3
- package/dist-lib/integrations/supabase/types.d.ts +353 -0
- package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
- package/dist-lib/lib/etiketControle.d.ts +8 -0
- package/dist-lib/lib/etiketControle.d.ts.map +1 -1
- package/dist-lib/lib/etiketControle.js +7 -2
- package/dist-lib/lib/foutTekst.d.ts +6 -0
- package/dist-lib/lib/foutTekst.d.ts.map +1 -1
- package/dist-lib/lib/foutTekst.js +46 -16
- package/dist-lib/lib/layoutVerwijzingen.js +1 -1
- package/dist-lib/lib/printApi.d.ts +1 -1
- package/dist-lib/lib/printApi.d.ts.map +1 -1
- package/dist-lib/lib/printApi.js +5 -4
- package/dist-lib/lib/printQueue.server.d.ts.map +1 -1
- package/dist-lib/lib/printQueue.server.js +16 -2
- package/dist-lib/lib/printService.functions.d.ts +94 -0
- package/dist-lib/lib/printService.functions.d.ts.map +1 -1
- package/dist-lib/lib/printService.functions.js +52 -2
- package/dist-lib/lib/printnodeStatus.d.ts +1 -0
- package/dist-lib/lib/printnodeStatus.d.ts.map +1 -1
- package/dist-lib/lib/printnodeStatus.js +4 -2
- package/dist-lib/lib/printnodeWebhook.d.ts +12 -0
- package/dist-lib/lib/printnodeWebhook.d.ts.map +1 -1
- package/dist-lib/lib/printnodeWebhook.js +27 -1
- package/dist-lib/lib/printplekken.js +1 -1
- package/dist-lib/lib/queueTick.d.ts.map +1 -1
- package/dist-lib/lib/queueTick.js +9 -0
- package/dist-lib/lib/runnerRegistry.server.d.ts +5 -0
- package/dist-lib/lib/runnerRegistry.server.d.ts.map +1 -1
- package/dist-lib/lib/runnerRegistry.server.js +22 -1
- package/dist-lib/lib/shellPoort.d.ts +21 -0
- package/dist-lib/lib/shellPoort.d.ts.map +1 -0
- package/dist-lib/lib/shellPoort.js +43 -0
- package/package.json +1 -1
|
@@ -15,6 +15,14 @@ export type EtiketUitkomst = {
|
|
|
15
15
|
bericht: string;
|
|
16
16
|
};
|
|
17
17
|
export declare const maatTekst: (b: number, h: number) => string;
|
|
18
|
+
/** Leesbare maat voor de gebruiker: "25,1 × 88,9 mm". */
|
|
19
|
+
export declare const maatNl: (b: number, h: number) => string;
|
|
20
|
+
/** "99010 Standard Address (25,1 × 88,9 mm)". */
|
|
21
|
+
export declare const etiketTekst: (e: {
|
|
22
|
+
naam: string;
|
|
23
|
+
breedte_mm: number;
|
|
24
|
+
hoogte_mm: number;
|
|
25
|
+
}) => string;
|
|
18
26
|
/** Leest een opgeslagen geladen etiket; ongeldig = null. */
|
|
19
27
|
export declare function leesGeladenEtiket(v: unknown): GeladenEtiket | null;
|
|
20
28
|
/** PrintNode-formaten (tienden mm) als keuzelijst in mm, zonder lege maten. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"etiketControle.d.ts","sourceRoot":"","sources":["../../src/lib/etiketControle.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,aAAa;IAC5B,0EAA0E;IAC1E,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,cAAc,GACtB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC3D;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,mBAAmB,GAAG,qBAAqB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAKtF,eAAO,MAAM,SAAS,GAAI,GAAG,MAAM,EAAE,GAAG,MAAM,WAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"etiketControle.d.ts","sourceRoot":"","sources":["../../src/lib/etiketControle.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,aAAa;IAC5B,0EAA0E;IAC1E,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,cAAc,GACtB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC3D;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,mBAAmB,GAAG,qBAAqB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAKtF,eAAO,MAAM,SAAS,GAAI,GAAG,MAAM,EAAE,GAAG,MAAM,WAA2B,CAAC;AAC1E,yDAAyD;AACzD,eAAO,MAAM,MAAM,GAAI,GAAG,MAAM,EAAE,GAAG,MAAM,WACmC,CAAC;AAC/E,iDAAiD;AACjD,eAAO,MAAM,WAAW,GAAI,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,WAC3B,CAAC;AAG5D,4DAA4D;AAC5D,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,OAAO,GAAG,aAAa,GAAG,IAAI,CAQlE;AAED,+EAA+E;AAC/E,wBAAgB,YAAY,CAAC,MAAM,EAAE,OAAO,GAAG,aAAa,EAAE,CAW7D;AAED;;;GAGG;AACH,wBAAgB,UAAU,CACxB,GAAG,EAAE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,EAClE,OAAO,EAAE,aAAa,GAAG,IAAI,EAC7B,WAAW,EAAE,MAAM,GAClB,cAAc,CA6BhB;AAED,+EAA+E;AAC/E,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAa/F"}
|
|
@@ -9,6 +9,11 @@
|
|
|
9
9
|
const MARGE_MM = 2;
|
|
10
10
|
const mm = (n) => Math.round(n * 10) / 10;
|
|
11
11
|
export const maatTekst = (b, h) => `${mm(b)}×${mm(h)} mm`;
|
|
12
|
+
/** Leesbare maat voor de gebruiker: "25,1 × 88,9 mm". */
|
|
13
|
+
export const maatNl = (b, h) => `${String(mm(b)).replace(".", ",")} × ${String(mm(h)).replace(".", ",")} mm`;
|
|
14
|
+
/** "99010 Standard Address (25,1 × 88,9 mm)". */
|
|
15
|
+
export const etiketTekst = (e) => `${e.naam.trim()} (${maatNl(e.breedte_mm, e.hoogte_mm)})`;
|
|
16
|
+
const heel = (b, h) => `${Math.round(b)} × ${Math.round(h)} mm`;
|
|
12
17
|
/** Leest een opgeslagen geladen etiket; ongeldig = null. */
|
|
13
18
|
export function leesGeladenEtiket(v) {
|
|
14
19
|
if (!v || typeof v !== "object")
|
|
@@ -46,7 +51,7 @@ export function etiketPast(doc, geladen, printerNaam) {
|
|
|
46
51
|
return {
|
|
47
52
|
ok: false,
|
|
48
53
|
code: "GEEN_GELADEN_ETIKET",
|
|
49
|
-
bericht: `
|
|
54
|
+
bericht: `Er is nog niet ingesteld welk etiket in labelprinter ${printerNaam} zit.`,
|
|
50
55
|
};
|
|
51
56
|
}
|
|
52
57
|
const { breedte_mm: b, hoogte_mm: h } = doc;
|
|
@@ -56,7 +61,7 @@ export function etiketPast(doc, geladen, printerNaam) {
|
|
|
56
61
|
return {
|
|
57
62
|
ok: false,
|
|
58
63
|
code: "FORMAAT_PAST_NIET",
|
|
59
|
-
bericht:
|
|
64
|
+
bericht: `Past niet op het etiket in de printer (${heel(b, h)} op ${heel(geladen.breedte_mm, geladen.hoogte_mm)}).`,
|
|
60
65
|
};
|
|
61
66
|
}
|
|
62
67
|
const docLiggend = b > h;
|
|
@@ -10,6 +10,12 @@ export interface DubbelOrigineel {
|
|
|
10
10
|
* documentsoort) en geeft het bestaande opdracht-id, de printer en de tijd.
|
|
11
11
|
*/
|
|
12
12
|
export declare function leesDubbelOrigineel(err: unknown): DubbelOrigineel | null;
|
|
13
|
+
/**
|
|
14
|
+
* Zet een bekende technische melding om naar een zin voor de gebruiker.
|
|
15
|
+
* Geeft null als de melding niet bekend is. De oorspronkelijke melding blijft
|
|
16
|
+
* bewaard en is alleen onder "Details voor beheer" te zien.
|
|
17
|
+
*/
|
|
18
|
+
export declare function gebruikersTekst(melding: unknown, soortLabel?: (t: string) => string): string | null;
|
|
13
19
|
/** Maakt van een (Supabase-)fout een zin die de gebruiker zelf kan herleiden. */
|
|
14
20
|
export declare function leesbareFout(err: unknown, prefix?: string): string;
|
|
15
21
|
//# sourceMappingURL=foutTekst.d.ts.map
|
|
@@ -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;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,GAAG,MAAM,GAAG,IAAI,CA6BnG;AAED,iFAAiF;AACjF,wBAAgB,YAAY,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,SAAoB,GAAG,MAAM,CA2B7E"}
|
|
@@ -25,15 +25,52 @@ export function leesDubbelOrigineel(err) {
|
|
|
25
25
|
return { jobId: null, printerId: null, aangemaaktOp: null };
|
|
26
26
|
}
|
|
27
27
|
}
|
|
28
|
+
/**
|
|
29
|
+
* Zet een bekende technische melding om naar een zin voor de gebruiker.
|
|
30
|
+
* Geeft null als de melding niet bekend is. De oorspronkelijke melding blijft
|
|
31
|
+
* bewaard en is alleen onder "Details voor beheer" te zien.
|
|
32
|
+
*/
|
|
33
|
+
export function gebruikersTekst(melding, soortLabel) {
|
|
34
|
+
const m = String(melding ?? "").trim();
|
|
35
|
+
if (!m)
|
|
36
|
+
return null;
|
|
37
|
+
if (m.includes("FORMAAT_PAST_NIET")) {
|
|
38
|
+
if (m.includes("Past niet op het etiket"))
|
|
39
|
+
return m.replace(/^[A-Z_]+:\s*/, "");
|
|
40
|
+
const maten = [...m.matchAll(/(\d+(?:[.,]\d+)?)\s*[×x]\s*(\d+(?:[.,]\d+)?)\s*mm/g)].map((x) => `${Math.round(Number(x[1].replace(",", ".")))} × ${Math.round(Number(x[2].replace(",", ".")))} mm`);
|
|
41
|
+
return maten.length >= 2
|
|
42
|
+
? `Past niet op het etiket in de printer (${maten[0]} op ${maten[1]}).`
|
|
43
|
+
: "Past niet op het etiket in de printer.";
|
|
44
|
+
}
|
|
45
|
+
if (m.includes("GEEN_GELADEN_ETIKET"))
|
|
46
|
+
return "Er is nog niet ingesteld welk etiket in de labelprinter zit.";
|
|
47
|
+
if (m.includes("GEEN_PRINTER")) {
|
|
48
|
+
const plek = m.match(/printplek '([^']*)'/)?.[1];
|
|
49
|
+
const type = m.match(/documenttype '([^']*)'/)?.[1];
|
|
50
|
+
const soort = type ? (soortLabel ? soortLabel(type) : type) : "dit document";
|
|
51
|
+
return `Er is geen printer ingesteld voor ‘${soort}’${plek ? ` op printplek ‘${plek}’` : ""}. Stel er een in bij Printen › Printplekken.`;
|
|
52
|
+
}
|
|
53
|
+
if (m.includes("DUBBEL_ORIGINEEL") || m.includes("print_jobs_een_origineel_per_kar")) {
|
|
54
|
+
return "Deze kar is al geprint. Gebruik ‘Opnieuw printen’.";
|
|
55
|
+
}
|
|
56
|
+
if (/layout_variant/i.test(m)) {
|
|
57
|
+
return "De pakbon wacht nog op de karindeling en wordt automatisch geprint zodra die klaar is.";
|
|
58
|
+
}
|
|
59
|
+
if (/Restpakbon zonder restregels/i.test(m)) {
|
|
60
|
+
return "De restpakbon is leeg (geen resterende fusten); er is niets geprint.";
|
|
61
|
+
}
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
28
64
|
/** Maakt van een (Supabase-)fout een zin die de gebruiker zelf kan herleiden. */
|
|
29
65
|
export function leesbareFout(err, prefix = "Opslaan mislukt") {
|
|
30
66
|
const e = (err ?? {});
|
|
31
67
|
const msg = String(e.message ?? (typeof err === "string" ? err : "")).trim();
|
|
32
68
|
const dubbel = leesDubbelOrigineel(err);
|
|
33
|
-
if (dubbel)
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
69
|
+
if (dubbel)
|
|
70
|
+
return "Deze kar is al geprint. Gebruik ‘Opnieuw printen’.";
|
|
71
|
+
const bekend = gebruikersTekst(msg);
|
|
72
|
+
if (bekend)
|
|
73
|
+
return bekend;
|
|
37
74
|
if (msg.includes("PRINTER_NIET_OP_PLEK")) {
|
|
38
75
|
const m = msg.match(/werkplek\s+(.+?)\.?$/);
|
|
39
76
|
return `${prefix}: deze printer is niet gekoppeld aan de printplek${m ? ` van werkplek ${m[1]}` : ""}. Koppel hem eerst aan de printplek.`;
|
|
@@ -50,16 +87,9 @@ export function leesbareFout(err, prefix = "Opslaan mislukt") {
|
|
|
50
87
|
return `${prefix}: de gekozen printer of plek bestaat niet (meer).`;
|
|
51
88
|
if (/failed to fetch|network/i.test(msg))
|
|
52
89
|
return `${prefix}: geen verbinding met de server.`;
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
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).`;
|
|
90
|
+
// Een gewone zin (geen code, geen JSON) mag de gebruiker zien.
|
|
91
|
+
const zin = msg.replace(/^[A-Z_]+:\s*/, "");
|
|
92
|
+
if (zin && !/^[A-Z0-9_]+$/.test(zin) && !/^[\[{]/.test(zin) && !/\b[A-Z]{2,}_[A-Z_]+\b/.test(zin))
|
|
93
|
+
return `${prefix}: ${zin}`;
|
|
94
|
+
return `${prefix}. Probeer het opnieuw; blijft het, meld het bij kantoor.`;
|
|
65
95
|
}
|
|
@@ -112,7 +112,7 @@ export async function zetVerwijzingOm(v, nieuwLayoutId) {
|
|
|
112
112
|
export const BRON_LABEL = {
|
|
113
113
|
eigen_layout: "eigen layout",
|
|
114
114
|
extern_pdf: "aangeleverd document",
|
|
115
|
-
floriday_1op1: "Floriday-document
|
|
115
|
+
floriday_1op1: "Origineel Floriday-document",
|
|
116
116
|
render_html: "aangeleverde opmaak",
|
|
117
117
|
klantlayout: "klantlayout",
|
|
118
118
|
onbekend: "onbekend",
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type DubbelOrigineel } from "./foutTekst.js";
|
|
2
|
-
import type
|
|
2
|
+
import { type DocumentType } from "./documentTypes.js";
|
|
3
3
|
export interface PrintDocumentInput {
|
|
4
4
|
/** Documentsoort, bijv. "pakbon" of "productiebon". */
|
|
5
5
|
documenttype: DocumentType | string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"printApi.d.ts","sourceRoot":"","sources":["../../src/lib/printApi.ts"],"names":[],"mappings":"AAMA,OAAO,EAAuB,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAKxE,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"printApi.d.ts","sourceRoot":"","sources":["../../src/lib/printApi.ts"],"names":[],"mappings":"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"}
|
package/dist-lib/lib/printApi.js
CHANGED
|
@@ -8,6 +8,7 @@ import { supabase } from "./supabaseClient.js";
|
|
|
8
8
|
import { printplekNaam, printplekVoorComputer } from "./printplekken.js";
|
|
9
9
|
import { routeringVoor } from "./printRoutering.js";
|
|
10
10
|
import { bronVoorDocument } from "./documentBron.js";
|
|
11
|
+
import { documentTypeLabel } from "./documentTypes.js";
|
|
11
12
|
const arr = (v) => (Array.isArray(v) ? v : []);
|
|
12
13
|
/** Zoekt de te gebruiken layout: expliciet, anders standaard, anders de nieuwste. */
|
|
13
14
|
async function bepaalLayout(documenttype, layoutId) {
|
|
@@ -116,7 +117,7 @@ export class DubbeleAanvraagFout extends Error {
|
|
|
116
117
|
*/
|
|
117
118
|
export class DubbelOrigineelFout extends Error {
|
|
118
119
|
constructor(d) {
|
|
119
|
-
super(
|
|
120
|
+
super("Deze kar is al geprint. Gebruik ‘Opnieuw printen’.");
|
|
120
121
|
this.name = "DubbelOrigineelFout";
|
|
121
122
|
this.code = "DUBBEL_ORIGINEEL";
|
|
122
123
|
this.bestaandJobId = d.jobId;
|
|
@@ -180,12 +181,12 @@ async function geenPrinterMelding(documenttype, printplekId, werkplek) {
|
|
|
180
181
|
const plek = printplekId ?? (werkplek ? await printplekVoorComputer(werkplek) : null);
|
|
181
182
|
const naam = plek ? await printplekNaam(plek) : null;
|
|
182
183
|
if (naam) {
|
|
183
|
-
return `
|
|
184
|
+
return `Er is geen printer ingesteld voor ‘${documentTypeLabel(documenttype)}’ op printplek ‘${naam}’. Stel er een in bij Printen › Printplekken.`;
|
|
184
185
|
}
|
|
185
186
|
if (werkplek) {
|
|
186
|
-
return `
|
|
187
|
+
return `Er is geen printer ingesteld voor ‘${documentTypeLabel(documenttype)}’ op werkplek ‘${werkplek}’. Koppel deze werkplek bij Printen › Printplekken.`;
|
|
187
188
|
}
|
|
188
|
-
return `
|
|
189
|
+
return `Er is geen printer ingesteld voor ‘${documentTypeLabel(documenttype)}’. Stel er een in bij Printen › Printplekken.`;
|
|
189
190
|
}
|
|
190
191
|
/**
|
|
191
192
|
* Zet een document in de printwachtrij. Bedoeld voor gebruik vanuit andere
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"printQueue.server.d.ts","sourceRoot":"","sources":["../../src/lib/printQueue.server.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"printQueue.server.d.ts","sourceRoot":"","sources":["../../src/lib/printQueue.server.ts"],"names":[],"mappings":"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"}
|
|
@@ -853,7 +853,7 @@ export async function bouwHtml(db, job, keuze, uitkomst) {
|
|
|
853
853
|
: "kar";
|
|
854
854
|
const engineVariant = job.layout_variant ?? p.layout_variant ?? p.layoutVariant ?? p.data?.layout_variant ?? null;
|
|
855
855
|
if (isEngineOpdracht(job) && pakbonMethode === "beide" && !["full_cart", "partial_order"].includes(String(engineVariant ?? ""))) {
|
|
856
|
-
throw new WachtOpLayoutFout("
|
|
856
|
+
throw new WachtOpLayoutFout("De pakbon wacht nog op de karindeling en wordt automatisch geprint zodra die klaar is.");
|
|
857
857
|
}
|
|
858
858
|
// Barcode en kargegevens van de Engine mogen niet verloren gaan wanneer
|
|
859
859
|
// de ordergegevens uit een subobject komen.
|
|
@@ -936,7 +936,7 @@ export async function bouwHtml(db, job, keuze, uitkomst) {
|
|
|
936
936
|
// verzameld moet worden. Dan liever geen pakbon dan een pakbon met de
|
|
937
937
|
// volledige karinhoud erop.
|
|
938
938
|
if (pakbonLayoutVariant(engineVariant) === "partial_order" && !deelkarRegels(order).length) {
|
|
939
|
-
throw new EngineContractFout("
|
|
939
|
+
throw new EngineContractFout("De restpakbon is leeg (geen resterende fusten); er is niets geprint.");
|
|
940
940
|
}
|
|
941
941
|
const cartId = engineCartId;
|
|
942
942
|
const karren = Array.isArray(order.karren) ? order.karren : [];
|
|
@@ -1755,6 +1755,20 @@ export async function verwerkWachtrij(db, max = 5) {
|
|
|
1755
1755
|
// Begrensd parallel: meerdere pakbonnen van één order lopen gelijktijdig,
|
|
1756
1756
|
// maar één mislukte opdracht annuleert de andere nooit.
|
|
1757
1757
|
const jobs = [...pdfJobs, ...gewoneJobs];
|
|
1758
|
+
// Vastleggen welke installatie (en versie) deze opdrachten verwerkt.
|
|
1759
|
+
if (jobs.length > 0) {
|
|
1760
|
+
try {
|
|
1761
|
+
const { eigenBasisUrl } = await import("./runnerRegistry.server.js");
|
|
1762
|
+
const { MODULE_VERSIE } = await import("./shellPoort.js");
|
|
1763
|
+
await db
|
|
1764
|
+
.from("print_jobs")
|
|
1765
|
+
.update({ verwerkt_door_runner: eigenBasisUrl(), verwerkt_met_versie: MODULE_VERSIE })
|
|
1766
|
+
.in("id", jobs.map((j) => j.id));
|
|
1767
|
+
}
|
|
1768
|
+
catch {
|
|
1769
|
+
/* vastleggen mag het printen nooit blokkeren */
|
|
1770
|
+
}
|
|
1771
|
+
}
|
|
1758
1772
|
const uitkomsten = await metPool(jobs, JOB_PARALLEL, async (job) => {
|
|
1759
1773
|
try {
|
|
1760
1774
|
return await verwerkJob(db, job);
|
|
@@ -134,6 +134,7 @@ export declare const webhookStatus: import("@tanstack/start-client-core").Option
|
|
|
134
134
|
claims: import("@supabase/auth-js").JwtPayload;
|
|
135
135
|
}, undefined, undefined, undefined>], undefined, Promise<{
|
|
136
136
|
meldingen: {
|
|
137
|
+
weergave: string;
|
|
137
138
|
ontvangen_op: string;
|
|
138
139
|
http_status: number;
|
|
139
140
|
soorten: string[];
|
|
@@ -173,4 +174,97 @@ export declare const webhookOpnieuwKoppelen: import("@tanstack/start-client-core
|
|
|
173
174
|
ok: false;
|
|
174
175
|
reden: string;
|
|
175
176
|
}>>;
|
|
177
|
+
/**
|
|
178
|
+
* Printinstallaties en of de Shell print. Alleen beheerders zien de lijst;
|
|
179
|
+
* iedereen ziet de stilstandmelding.
|
|
180
|
+
*/
|
|
181
|
+
export declare const printInstallaties: import("@tanstack/start-client-core").OptionalFetcher<readonly [import("@tanstack/start-client-core").FunctionMiddlewareAfterServer<{}, unknown, undefined, {
|
|
182
|
+
supabase: import("../integrations/supabase/auth-middleware.js").AuthedSupabaseClient;
|
|
183
|
+
userId: string;
|
|
184
|
+
claims: import("@supabase/auth-js").JwtPayload;
|
|
185
|
+
}, undefined, undefined, undefined>], undefined, Promise<{
|
|
186
|
+
installaties: [];
|
|
187
|
+
stil: true;
|
|
188
|
+
reden: "geen_shell_adres";
|
|
189
|
+
sinds: null;
|
|
190
|
+
ok: true;
|
|
191
|
+
beheer: false;
|
|
192
|
+
} | {
|
|
193
|
+
installaties: [];
|
|
194
|
+
stil: true;
|
|
195
|
+
reden: "shell_niet_aangemeld";
|
|
196
|
+
sinds: null;
|
|
197
|
+
ok: true;
|
|
198
|
+
beheer: false;
|
|
199
|
+
} | {
|
|
200
|
+
installaties: [];
|
|
201
|
+
stil: true;
|
|
202
|
+
reden: "shell_reageert_niet";
|
|
203
|
+
sinds: string;
|
|
204
|
+
ok: true;
|
|
205
|
+
beheer: false;
|
|
206
|
+
} | {
|
|
207
|
+
installaties: [];
|
|
208
|
+
stil: false;
|
|
209
|
+
reden: null;
|
|
210
|
+
sinds: null;
|
|
211
|
+
ok: true;
|
|
212
|
+
beheer: false;
|
|
213
|
+
} | {
|
|
214
|
+
installaties: {
|
|
215
|
+
adres: string;
|
|
216
|
+
versie: string | null;
|
|
217
|
+
laatstActief: string | null;
|
|
218
|
+
actief: boolean;
|
|
219
|
+
isShell: boolean;
|
|
220
|
+
opdrachten7d: any;
|
|
221
|
+
}[];
|
|
222
|
+
stil: true;
|
|
223
|
+
reden: "geen_shell_adres";
|
|
224
|
+
sinds: null;
|
|
225
|
+
ok: true;
|
|
226
|
+
beheer: true;
|
|
227
|
+
} | {
|
|
228
|
+
installaties: {
|
|
229
|
+
adres: string;
|
|
230
|
+
versie: string | null;
|
|
231
|
+
laatstActief: string | null;
|
|
232
|
+
actief: boolean;
|
|
233
|
+
isShell: boolean;
|
|
234
|
+
opdrachten7d: any;
|
|
235
|
+
}[];
|
|
236
|
+
stil: true;
|
|
237
|
+
reden: "shell_niet_aangemeld";
|
|
238
|
+
sinds: null;
|
|
239
|
+
ok: true;
|
|
240
|
+
beheer: true;
|
|
241
|
+
} | {
|
|
242
|
+
installaties: {
|
|
243
|
+
adres: string;
|
|
244
|
+
versie: string | null;
|
|
245
|
+
laatstActief: string | null;
|
|
246
|
+
actief: boolean;
|
|
247
|
+
isShell: boolean;
|
|
248
|
+
opdrachten7d: any;
|
|
249
|
+
}[];
|
|
250
|
+
stil: true;
|
|
251
|
+
reden: "shell_reageert_niet";
|
|
252
|
+
sinds: string;
|
|
253
|
+
ok: true;
|
|
254
|
+
beheer: true;
|
|
255
|
+
} | {
|
|
256
|
+
installaties: {
|
|
257
|
+
adres: string;
|
|
258
|
+
versie: string | null;
|
|
259
|
+
laatstActief: string | null;
|
|
260
|
+
actief: boolean;
|
|
261
|
+
isShell: boolean;
|
|
262
|
+
opdrachten7d: any;
|
|
263
|
+
}[];
|
|
264
|
+
stil: false;
|
|
265
|
+
reden: null;
|
|
266
|
+
sinds: null;
|
|
267
|
+
ok: true;
|
|
268
|
+
beheer: true;
|
|
269
|
+
}>>;
|
|
176
270
|
//# sourceMappingURL=printService.functions.d.ts.map
|
|
@@ -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;;;;iFAgBvB,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;;;;iFAgBvB,CAAC;AAEL;;;;;GAKG;AACH,eAAO,MAAM,cAAc;;;;8CAED;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE;;;;;;;;;;GAyDvC,CAAC;AAEL,qDAAqD;AACrD,eAAO,MAAM,aAAa;;;;;;;sBAaJ,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;AAEL;;;GAGG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqD1B,CAAC"}
|
|
@@ -243,10 +243,11 @@ export const webhookStatus = createServerFn({ method: "POST" })
|
|
|
243
243
|
const { leesKoppeling, veiligeStatus } = await import("./printnodeWebhookBeheer.server.js");
|
|
244
244
|
const { data: m } = await supabaseAdmin
|
|
245
245
|
.from("printnode_webhook_meldingen")
|
|
246
|
-
.select("ontvangen_op, http_status, soorten, printnode_ids, gematcht, niet_gematcht")
|
|
246
|
+
.select("ontvangen_op, http_status, soorten, printnode_ids, gematcht, niet_gematcht, antwoord")
|
|
247
247
|
.order("id", { ascending: false })
|
|
248
248
|
.limit(5);
|
|
249
|
-
const
|
|
249
|
+
const { meldingWeergave } = await import("./printnodeWebhook.js");
|
|
250
|
+
const meldingen = (Array.isArray(m) ? m : []).map(({ antwoord, ...r }) => ({ ...r, weergave: meldingWeergave({ ...r, antwoord }) }));
|
|
250
251
|
return { ok: true, ...veiligeStatus(await leesKoppeling(supabaseAdmin)), meldingen };
|
|
251
252
|
}
|
|
252
253
|
catch (e) {
|
|
@@ -273,3 +274,52 @@ export const webhookOpnieuwKoppelen = createServerFn({ method: "POST" })
|
|
|
273
274
|
const u = await koppelWebhook(supabaseAdmin, { oorsprong });
|
|
274
275
|
return u.ok ? { ok: true } : { ok: false, reden: u.reden ?? "Koppelen mislukt." };
|
|
275
276
|
});
|
|
277
|
+
/**
|
|
278
|
+
* Printinstallaties en of de Shell print. Alleen beheerders zien de lijst;
|
|
279
|
+
* iedereen ziet de stilstandmelding.
|
|
280
|
+
*/
|
|
281
|
+
export const printInstallaties = createServerFn({ method: "POST" })
|
|
282
|
+
.middleware([requireSupabaseAuth])
|
|
283
|
+
.handler(async ({ context }) => {
|
|
284
|
+
const ctx = context;
|
|
285
|
+
const { supabaseAdmin } = await import("../integrations/supabase/client.server.js");
|
|
286
|
+
const { maskeerAdres, normaliseerAdres } = await import("./shellPoort.js");
|
|
287
|
+
const db = supabaseAdmin;
|
|
288
|
+
const { data: cfg } = await db.from("module_runtime_config").select("value").eq("key", "shell_base_url").maybeSingle();
|
|
289
|
+
const shell = normaliseerAdres(cfg?.value);
|
|
290
|
+
const { data: r } = await db
|
|
291
|
+
.from("print_queue_runners")
|
|
292
|
+
.select("basis_url, module_versie, laatst_gezien, laatste_ok, actief, created_at")
|
|
293
|
+
.order("laatst_gezien", { ascending: false });
|
|
294
|
+
const runners = (Array.isArray(r) ? r : []);
|
|
295
|
+
const shellRij = shell ? runners.find((x) => normaliseerAdres(x.basis_url) === shell) ?? null : null;
|
|
296
|
+
const grens = Date.now() - 5 * 60 * 1000;
|
|
297
|
+
const shellLaatst = shellRij ? shellRij.laatste_ok ?? shellRij.created_at : null;
|
|
298
|
+
const stil = !shell
|
|
299
|
+
? { stil: true, reden: "geen_shell_adres", sinds: null }
|
|
300
|
+
: !shellRij
|
|
301
|
+
? { stil: true, reden: "shell_niet_aangemeld", sinds: null }
|
|
302
|
+
: shellLaatst && new Date(shellLaatst).getTime() < grens
|
|
303
|
+
? { stil: true, reden: "shell_reageert_niet", sinds: shellLaatst }
|
|
304
|
+
: { stil: false, reden: null, sinds: null };
|
|
305
|
+
const rollen = await Promise.all(["admin", "superadmin", "developer"].map((rol) => ctx.supabase.rpc("has_role", { _user_id: ctx.userId, _role: rol }).then((x) => x.data === true)));
|
|
306
|
+
if (!rollen.some(Boolean))
|
|
307
|
+
return { ok: true, beheer: false, ...stil, installaties: [] };
|
|
308
|
+
const sinds = new Date(Date.now() - 7 * 86400000).toISOString();
|
|
309
|
+
const installaties = await Promise.all(runners.map(async (x) => {
|
|
310
|
+
const { count } = await db
|
|
311
|
+
.from("print_jobs")
|
|
312
|
+
.select("id", { count: "exact", head: true })
|
|
313
|
+
.eq("verwerkt_door_runner", x.basis_url)
|
|
314
|
+
.gte("created_at", sinds);
|
|
315
|
+
return {
|
|
316
|
+
adres: maskeerAdres(x.basis_url),
|
|
317
|
+
versie: x.module_versie,
|
|
318
|
+
laatstActief: x.laatst_gezien,
|
|
319
|
+
actief: x.actief,
|
|
320
|
+
isShell: !!shell && normaliseerAdres(x.basis_url) === shell,
|
|
321
|
+
opdrachten7d: count ?? 0,
|
|
322
|
+
};
|
|
323
|
+
}));
|
|
324
|
+
return { ok: true, beheer: true, ...stil, installaties };
|
|
325
|
+
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"printnodeStatus.d.ts","sourceRoot":"","sources":["../../src/lib/printnodeStatus.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAMzD,CAAC;AAEF,UAAU,YAAY;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"printnodeStatus.d.ts","sourceRoot":"","sources":["../../src/lib/printnodeStatus.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAMzD,CAAC;AAEF,UAAU,YAAY;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,iDAAiD;AACjD,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,YAAY,GAAG,MAAM,CAe5D;AAED,wEAAwE;AACxE,eAAO,MAAM,gBAAgB,aAAsD,CAAC;AAEpF,2EAA2E;AAC3E,wBAAgB,YAAY,CAAC,CAAC,EAAE,YAAY,GAAG,kBAAkB,GAAG,iBAAiB,GAAG,IAAI,CAI3F;AAED,wEAAwE;AACxE,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAI/G"}
|
|
@@ -17,9 +17,11 @@ export function printnodeStatusLabel(j) {
|
|
|
17
17
|
return "Geannuleerd";
|
|
18
18
|
if (j.foutcode === "AANLEVERING_MISLUKT")
|
|
19
19
|
return "Mislukt — geen document";
|
|
20
|
-
|
|
20
|
+
// Oudere rijen hebben een andere foutcode, maar de melding begint met de code.
|
|
21
|
+
const fm = String(j.foutmelding ?? "");
|
|
22
|
+
if (j.foutcode === "FORMAAT_PAST_NIET" || fm.startsWith("FORMAAT_PAST_NIET"))
|
|
21
23
|
return "Geweigerd – past niet";
|
|
22
|
-
if (j.foutcode === "GEEN_GELADEN_ETIKET")
|
|
24
|
+
if (j.foutcode === "GEEN_GELADEN_ETIKET" || fm.startsWith("GEEN_GELADEN_ETIKET"))
|
|
23
25
|
return "Geweigerd – geen etiket geladen";
|
|
24
26
|
const pn = String(j.printnode_status ?? "").toLowerCase();
|
|
25
27
|
if (pn && PRINTNODE_STATUS_LABEL[pn])
|
|
@@ -11,6 +11,18 @@ export declare function controleerSecret(request: Request, secret: string, _veld
|
|
|
11
11
|
export declare function secretKlopt(request: Request, secret: string): boolean;
|
|
12
12
|
/** Details van een geweigerde aanroep. Bevat nooit (een deel van) het geheim. */
|
|
13
13
|
export declare function afwijzingDetails(request: Request): Promise<Record<string, unknown>>;
|
|
14
|
+
/**
|
|
15
|
+
* Herkent de oude verbindingstest (modules vóór 1.59.0): inhoud "[]", geen
|
|
16
|
+
* geheimkop en geen User-Agent. PrintNode stuurt altijd het geheim mee.
|
|
17
|
+
*/
|
|
18
|
+
export declare function isOudeZelftest(d: Record<string, unknown> | null | undefined): boolean;
|
|
19
|
+
/** Korte, leesbare omschrijving van één vastgelegde melding (voor Details voor beheer). */
|
|
20
|
+
export declare function meldingWeergave(m: {
|
|
21
|
+
http_status: number;
|
|
22
|
+
soorten?: string[] | null;
|
|
23
|
+
gematcht?: number | null;
|
|
24
|
+
antwoord?: unknown;
|
|
25
|
+
}): string;
|
|
14
26
|
/**
|
|
15
27
|
* Afhandeling van een webhookaanroep. Het geheim komt uit de eigen
|
|
16
28
|
* koppelingstabel (servicerol). `secretVoorTest` alleen voor tests.
|
|
@@ -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,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,iFAAiF;AACjF,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CASzF;AASD;;;;;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,
|
|
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,iFAAiF;AACjF,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CASzF;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAErF;AAED,2FAA2F;AAC3F,wBAAgB,eAAe,CAAC,CAAC,EAAE;IACjC,WAAW,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;CAC9F,GAAG,MAAM,CAaT;AASD;;;;;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,CAqFnB;AAED,2EAA2E;AAC3E,wBAAsB,OAAO,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAgBrD"}
|
|
@@ -66,6 +66,30 @@ export async function afwijzingDetails(request) {
|
|
|
66
66
|
content_type: (request.headers.get("content-type") ?? "").slice(0, 60) || null,
|
|
67
67
|
};
|
|
68
68
|
}
|
|
69
|
+
/**
|
|
70
|
+
* Herkent de oude verbindingstest (modules vóór 1.59.0): inhoud "[]", geen
|
|
71
|
+
* geheimkop en geen User-Agent. PrintNode stuurt altijd het geheim mee.
|
|
72
|
+
*/
|
|
73
|
+
export function isOudeZelftest(d) {
|
|
74
|
+
return !!d && d["secret_kop_aanwezig"] === false && !d["user_agent"] && Number(d["inhoud_lengte"] ?? 99) <= 2;
|
|
75
|
+
}
|
|
76
|
+
/** Korte, leesbare omschrijving van één vastgelegde melding (voor Details voor beheer). */
|
|
77
|
+
export function meldingWeergave(m) {
|
|
78
|
+
const soorten = Array.isArray(m.soorten) ? m.soorten : [];
|
|
79
|
+
const a = (m.antwoord && typeof m.antwoord === "object" ? m.antwoord : {});
|
|
80
|
+
if (m.http_status === 401) {
|
|
81
|
+
const d = (a["details"] && typeof a["details"] === "object" ? a["details"] : null);
|
|
82
|
+
if (soorten.includes("oude_zelftest") || isOudeZelftest(d)) {
|
|
83
|
+
return "Oude verbindingstest van een andere installatie (niet van PrintNode) — geweigerd";
|
|
84
|
+
}
|
|
85
|
+
return "Geweigerd: geheim ontbreekt of klopt niet";
|
|
86
|
+
}
|
|
87
|
+
if (m.http_status === 200 && (soorten.includes("zelftest") || soorten.length === 0))
|
|
88
|
+
return "Verbindingstest ✓";
|
|
89
|
+
if (m.http_status === 200)
|
|
90
|
+
return `Melding van PrintNode ✓ · ${m.gematcht ?? 0} bijgewerkt`;
|
|
91
|
+
return `Antwoord ${m.http_status}`;
|
|
92
|
+
}
|
|
69
93
|
async function soortenUit(request) {
|
|
70
94
|
try {
|
|
71
95
|
const b = JSON.parse(await request.clone().text());
|
|
@@ -99,7 +123,9 @@ export async function behandelPrintNodeWebhook(request, db, secretVoorTest, opti
|
|
|
99
123
|
if (!controleerSecret(request, secret).ok) {
|
|
100
124
|
// Vastleggen wát er binnenkwam, zonder het geheim zelf: alleen of de kop er
|
|
101
125
|
// was, hoe lang de inhoud is en welke soort melding het was.
|
|
102
|
-
|
|
126
|
+
const details = await afwijzingDetails(request);
|
|
127
|
+
const soorten401 = isOudeZelftest(details) ? ["oude_zelftest"] : await soortenUit(request);
|
|
128
|
+
await noteer(db, { http_status: 401, soorten: soorten401, antwoord: { fout: "Ongeldig secret", details } }, uitTabel);
|
|
103
129
|
return Response.json({ ok: false, fout: "Ongeldig secret" }, { status: 401 });
|
|
104
130
|
}
|
|
105
131
|
// Eigen zelftest (geheim klopt): 200 + OK-kop, maar geen bewijs van PrintNode.
|
|
@@ -32,7 +32,7 @@ export function usePrintplekken() {
|
|
|
32
32
|
]);
|
|
33
33
|
const eersteFout = p.error ?? c.error ?? r.error ?? k.error ?? t.error;
|
|
34
34
|
setFout(eersteFout
|
|
35
|
-
? "Printplekken konden niet worden geladen.
|
|
35
|
+
? "Printplekken konden niet worden geladen. Neem contact op met Flow Selections."
|
|
36
36
|
: null);
|
|
37
37
|
setPlekken(arr(p.data));
|
|
38
38
|
setComputers(arr(c.data));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queueTick.d.ts","sourceRoot":"","sources":["../../src/lib/queueTick.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,KAAK,EAAE,GAAG,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAiBxC;;;;;;;;GAQG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"queueTick.d.ts","sourceRoot":"","sources":["../../src/lib/queueTick.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,KAAK,EAAE,GAAG,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAiBxC;;;;;;;;GAQG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,CAmGzF"}
|
|
@@ -81,6 +81,15 @@ export async function behandelQueueTick(request, supabase) {
|
|
|
81
81
|
return Response.json({ ok: false, fout: configFout }, { status: 500 });
|
|
82
82
|
}
|
|
83
83
|
void meldRunnerAan(supabase);
|
|
84
|
+
// Alleen de Shell verwerkt de printwachtrij. Andere installaties (ook
|
|
85
|
+
// voorbeeldomgevingen met nieuwere code) slaan over; geen stille wissel.
|
|
86
|
+
const { controleerShellPoort } = await import("./runnerRegistry.server.js");
|
|
87
|
+
const poort = await controleerShellPoort(supabase);
|
|
88
|
+
if (!poort.mag) {
|
|
89
|
+
if (poort.reden !== "niet_de_shell")
|
|
90
|
+
console.warn(`[printwachtrij] ${poort.tekst}`);
|
|
91
|
+
return Response.json({ ok: true, overgeslagen: poort.tekst, reden: poort.reden });
|
|
92
|
+
}
|
|
84
93
|
// Lege shell: standaardlayouts aanmaken (servicerol), zodat een nieuwe klant
|
|
85
94
|
// meteen kan printen zonder dat iemand een pagina opent of op een knop drukt.
|
|
86
95
|
try {
|
|
@@ -6,6 +6,11 @@ export declare function eigenBasisUrl(): string | null;
|
|
|
6
6
|
* minuten iets en laat fouten nooit doorwerken in de aanroeper.
|
|
7
7
|
*/
|
|
8
8
|
export declare function meldRunnerAan(db: PrintDb): Promise<void>;
|
|
9
|
+
/**
|
|
10
|
+
* Mag deze installatie de printwachtrij verwerken? Alleen de Shell
|
|
11
|
+
* (shell_base_url uit module_runtime_config), met optioneel min_print_versie.
|
|
12
|
+
*/
|
|
13
|
+
export declare function controleerShellPoort(db: PrintDb): Promise<import("./shellPoort.js").PoortUitkomst>;
|
|
9
14
|
/** Controleert of de meegegeven sleutel bij een geregistreerde shell hoort. */
|
|
10
15
|
export declare function isRunnerSleutel(db: PrintDb, sleutel: string): Promise<boolean>;
|
|
11
16
|
//# sourceMappingURL=runnerRegistry.server.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runnerRegistry.server.d.ts","sourceRoot":"","sources":["../../src/lib/runnerRegistry.server.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAMnD,8DAA8D;AAC9D,wBAAgB,aAAa,IAAI,MAAM,GAAG,IAAI,CAS7C;AAED;;;GAGG;AACH,wBAAsB,aAAa,CAAC,EAAE,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"runnerRegistry.server.d.ts","sourceRoot":"","sources":["../../src/lib/runnerRegistry.server.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAMnD,8DAA8D;AAC9D,wBAAgB,aAAa,IAAI,MAAM,GAAG,IAAI,CAS7C;AAED;;;GAGG;AACH,wBAAsB,aAAa,CAAC,EAAE,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAmC9D;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,EAAE,EAAE,OAAO,iDAcrD;AAED,+EAA+E;AAC/E,wBAAsB,eAAe,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAapF"}
|