@flowselections/floriday-authenticatie-module 1.0.24 → 1.0.25

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 (49) hide show
  1. package/dist-lib/lib/gateway/active-environment.d.ts +7 -0
  2. package/dist-lib/lib/gateway/active-environment.d.ts.map +1 -0
  3. package/dist-lib/lib/gateway/active-environment.js +8 -0
  4. package/dist-lib/lib/gateway/code-list.d.ts +16 -0
  5. package/dist-lib/lib/gateway/code-list.d.ts.map +1 -0
  6. package/dist-lib/lib/gateway/code-list.js +28 -0
  7. package/dist-lib/lib/gateway/diagnostics.d.ts +13 -0
  8. package/dist-lib/lib/gateway/diagnostics.d.ts.map +1 -0
  9. package/dist-lib/lib/gateway/diagnostics.js +66 -0
  10. package/dist-lib/lib/gateway/floricode-records.d.ts +22 -0
  11. package/dist-lib/lib/gateway/floricode-records.d.ts.map +1 -0
  12. package/dist-lib/lib/gateway/floricode-records.js +32 -0
  13. package/dist-lib/lib/gateway/fulfillment-order-send.d.ts +7 -0
  14. package/dist-lib/lib/gateway/fulfillment-order-send.d.ts.map +1 -0
  15. package/dist-lib/lib/gateway/fulfillment-order-send.js +123 -0
  16. package/dist-lib/lib/gateway/index.d.ts +14 -0
  17. package/dist-lib/lib/gateway/index.d.ts.map +1 -1
  18. package/dist-lib/lib/gateway/index.js +14 -0
  19. package/dist-lib/lib/gateway/media-upload.d.ts +21 -0
  20. package/dist-lib/lib/gateway/media-upload.d.ts.map +1 -0
  21. package/dist-lib/lib/gateway/media-upload.js +96 -0
  22. package/dist-lib/lib/gateway/media.d.ts +19 -0
  23. package/dist-lib/lib/gateway/media.d.ts.map +1 -0
  24. package/dist-lib/lib/gateway/media.js +96 -0
  25. package/dist-lib/lib/gateway/pdf-bulk-merged.d.ts +34 -0
  26. package/dist-lib/lib/gateway/pdf-bulk-merged.d.ts.map +1 -0
  27. package/dist-lib/lib/gateway/pdf-bulk-merged.js +80 -0
  28. package/dist-lib/lib/gateway/pdf-bulk.d.ts +31 -0
  29. package/dist-lib/lib/gateway/pdf-bulk.d.ts.map +1 -0
  30. package/dist-lib/lib/gateway/pdf-bulk.js +65 -0
  31. package/dist-lib/lib/gateway/pdf.d.ts +24 -0
  32. package/dist-lib/lib/gateway/pdf.d.ts.map +1 -0
  33. package/dist-lib/lib/gateway/pdf.js +64 -0
  34. package/dist-lib/lib/gateway/product-characteristics.d.ts +18 -0
  35. package/dist-lib/lib/gateway/product-characteristics.d.ts.map +1 -0
  36. package/dist-lib/lib/gateway/product-characteristics.js +8 -0
  37. package/dist-lib/lib/gateway/schema.d.ts +28 -0
  38. package/dist-lib/lib/gateway/schema.d.ts.map +1 -0
  39. package/dist-lib/lib/gateway/schema.js +102 -0
  40. package/dist-lib/lib/gateway/shared.d.ts +5 -1
  41. package/dist-lib/lib/gateway/shared.d.ts.map +1 -1
  42. package/dist-lib/lib/gateway/shared.js +7 -3
  43. package/dist-lib/lib/gateway/supply-line.d.ts +11 -0
  44. package/dist-lib/lib/gateway/supply-line.d.ts.map +1 -0
  45. package/dist-lib/lib/gateway/supply-line.js +261 -0
  46. package/dist-lib/lib/gateway/write.d.ts +18 -0
  47. package/dist-lib/lib/gateway/write.d.ts.map +1 -0
  48. package/dist-lib/lib/gateway/write.js +32 -0
  49. package/package.json +1 -1
@@ -0,0 +1,34 @@
1
+ import type { SupabaseClient } from "@supabase/supabase-js";
2
+ export interface PdfBulkMergedItem {
3
+ id?: string;
4
+ fulfillmentOrderId?: string;
5
+ deliveryOrderId?: string;
6
+ salesOrderId?: string;
7
+ logisticLabelCode?: string;
8
+ }
9
+ export interface PdfBulkMergedInput {
10
+ environment?: "staging" | "live";
11
+ items: PdfBulkMergedItem[];
12
+ onError?: "skip" | "fail";
13
+ }
14
+ export interface PdfBulkMergedSkipped {
15
+ index: number;
16
+ id: string | null;
17
+ error: string;
18
+ }
19
+ export type PdfBulkMergedResult = {
20
+ ok: true;
21
+ contentType: "application/pdf";
22
+ included: number;
23
+ skipped: PdfBulkMergedSkipped[];
24
+ pdfBase64: string;
25
+ } | {
26
+ ok: false;
27
+ status: 502;
28
+ error: string;
29
+ failedIndex?: number;
30
+ id?: string | null;
31
+ skipped?: PdfBulkMergedSkipped[];
32
+ };
33
+ export declare function runPdfBulkMerged(supabase: SupabaseClient, parsed: PdfBulkMergedInput, environment: "staging" | "live"): Promise<PdfBulkMergedResult>;
34
+ //# sourceMappingURL=pdf-bulk-merged.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pdf-bulk-merged.d.ts","sourceRoot":"","sources":["../../../src/lib/gateway/pdf-bulk-merged.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAI5D,MAAM,WAAW,iBAAiB;IAChC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,kBAAkB;IACjC,WAAW,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IACjC,KAAK,EAAE,iBAAiB,EAAE,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,mBAAmB,GAC3B;IACE,EAAE,EAAE,IAAI,CAAC;IACT,WAAW,EAAE,iBAAiB,CAAC;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,oBAAoB,EAAE,CAAC;IAChC,SAAS,EAAE,MAAM,CAAC;CACnB,GACD;IACE,EAAE,EAAE,KAAK,CAAC;IACV,MAAM,EAAE,GAAG,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,OAAO,CAAC,EAAE,oBAAoB,EAAE,CAAC;CAClC,CAAC;AASN,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,cAAc,EACxB,MAAM,EAAE,kBAAkB,EAC1B,WAAW,EAAE,SAAS,GAAG,MAAM,GAC9B,OAAO,CAAC,mBAAmB,CAAC,CAwE9B"}
@@ -0,0 +1,80 @@
1
+ // Gateway business-logica voor /api/public/gateway/pdf/bulk-merged.
2
+ // Verplaatst uit de route; byte-identiek gedrag.
3
+ // Adapter resolvet environment vooraf (409-catch) en geeft die mee.
4
+ import { PDFDocument } from "pdf-lib";
5
+ import { resolveFulfillmentOrderIds, resolveLogisticLabel } from "./shared";
6
+ async function downloadPdfBytes(url) {
7
+ const res = await fetch(url);
8
+ if (!res.ok)
9
+ throw new Error(`download mislukt (${res.status})`);
10
+ const buf = await res.arrayBuffer();
11
+ return new Uint8Array(buf);
12
+ }
13
+ export async function runPdfBulkMerged(supabase, parsed, environment) {
14
+ const onError = parsed.onError ?? "skip";
15
+ const merged = await PDFDocument.create();
16
+ const skipped = [];
17
+ let included = 0;
18
+ // Sequentieel om de rate-limit en cache-hits netjes te benutten.
19
+ for (let i = 0; i < parsed.items.length; i++) {
20
+ const item = parsed.items[i];
21
+ const clientId = item.id ?? null;
22
+ try {
23
+ // 1) Resolve fulfillmentOrderId(s)
24
+ let fulfillmentIds = [];
25
+ if (item.fulfillmentOrderId?.trim()) {
26
+ fulfillmentIds = [item.fulfillmentOrderId.trim()];
27
+ }
28
+ else {
29
+ const lookup = await resolveFulfillmentOrderIds(supabase, {
30
+ environment,
31
+ deliveryOrderId: item.deliveryOrderId,
32
+ salesOrderId: item.salesOrderId,
33
+ });
34
+ fulfillmentIds = lookup.fulfillmentOrderIds;
35
+ }
36
+ if (fulfillmentIds.length === 0) {
37
+ throw new Error("geen fulfillmentOrderId gevonden");
38
+ }
39
+ // 2) Per fulfillment-order het label ophalen en pagina's mergen
40
+ for (const fid of fulfillmentIds) {
41
+ const label = await resolveLogisticLabel(supabase, {
42
+ environment,
43
+ fulfillmentOrderId: fid,
44
+ logisticLabelCode: item.logisticLabelCode ?? null,
45
+ });
46
+ const bytes = await downloadPdfBytes(label.url);
47
+ const src = await PDFDocument.load(bytes, { ignoreEncryption: true });
48
+ const pages = await merged.copyPages(src, src.getPageIndices());
49
+ for (const p of pages)
50
+ merged.addPage(p);
51
+ included++;
52
+ }
53
+ }
54
+ catch (e) {
55
+ const error = String(e?.message ?? e);
56
+ if (onError === "fail") {
57
+ return { ok: false, status: 502, error, failedIndex: i, id: clientId };
58
+ }
59
+ skipped.push({ index: i, id: clientId, error });
60
+ }
61
+ }
62
+ if (included === 0) {
63
+ return {
64
+ ok: false,
65
+ status: 502,
66
+ error: "geen afleverbrieven kunnen ophalen",
67
+ skipped,
68
+ };
69
+ }
70
+ const bytes = await merged.save();
71
+ // Base64 encode (Worker: Buffer is beschikbaar via nodejs_compat)
72
+ const pdfBase64 = Buffer.from(bytes).toString("base64");
73
+ return {
74
+ ok: true,
75
+ contentType: "application/pdf",
76
+ included,
77
+ skipped,
78
+ pdfBase64,
79
+ };
80
+ }
@@ -0,0 +1,31 @@
1
+ import type { SupabaseClient } from "@supabase/supabase-js";
2
+ export interface PdfBulkItem {
3
+ id?: string;
4
+ fulfillmentOrderId?: string;
5
+ deliveryOrderId?: string;
6
+ salesOrderId?: string;
7
+ logisticLabelCode?: string;
8
+ }
9
+ export interface PdfBulkInput {
10
+ environment?: "staging" | "live";
11
+ items: PdfBulkItem[];
12
+ }
13
+ export interface PdfBulkItemResult {
14
+ id: string | null;
15
+ ok: boolean;
16
+ url?: string;
17
+ expiresAt?: string;
18
+ contentType?: string;
19
+ fulfillmentOrderId?: string;
20
+ logisticLabelCode?: string;
21
+ error?: string;
22
+ }
23
+ export interface PdfBulkResult {
24
+ ok: true;
25
+ total: number;
26
+ success: number;
27
+ failed: number;
28
+ results: PdfBulkItemResult[];
29
+ }
30
+ export declare function runPdfBulk(supabase: SupabaseClient, parsed: PdfBulkInput, environment: "staging" | "live"): Promise<PdfBulkResult>;
31
+ //# sourceMappingURL=pdf-bulk.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pdf-bulk.d.ts","sourceRoot":"","sources":["../../../src/lib/gateway/pdf-bulk.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAG5D,MAAM,WAAW,WAAW;IAC1B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,YAAY;IAC3B,WAAW,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IACjC,KAAK,EAAE,WAAW,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,EAAE,EAAE,OAAO,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,IAAI,CAAC;IACT,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,iBAAiB,EAAE,CAAC;CAC9B;AAED,wBAAsB,UAAU,CAC9B,QAAQ,EAAE,cAAc,EACxB,MAAM,EAAE,YAAY,EACpB,WAAW,EAAE,SAAS,GAAG,MAAM,GAC9B,OAAO,CAAC,aAAa,CAAC,CA4DxB"}
@@ -0,0 +1,65 @@
1
+ // Gateway business-logica voor /api/public/gateway/pdf/bulk.
2
+ // Verplaatst uit de route; byte-identiek gedrag.
3
+ // Adapter resolvet environment vooraf (409-catch) en geeft die mee.
4
+ import { resolveFulfillmentOrderIds, resolveLogisticLabel } from "./shared";
5
+ export async function runPdfBulk(supabase, parsed, environment) {
6
+ const results = [];
7
+ for (const item of parsed.items) {
8
+ const clientId = item.id ?? null;
9
+ try {
10
+ let fulfillmentOrderId = item.fulfillmentOrderId?.trim() ?? "";
11
+ if (!fulfillmentOrderId) {
12
+ const lookup = await resolveFulfillmentOrderIds(supabase, {
13
+ environment,
14
+ deliveryOrderId: item.deliveryOrderId,
15
+ salesOrderId: item.salesOrderId,
16
+ });
17
+ // Bij meerdere fulfillment-orders per delivery-order: alle
18
+ // labels ophalen; we voegen elke variant apart toe.
19
+ if (lookup.fulfillmentOrderIds.length > 1) {
20
+ for (const fid of lookup.fulfillmentOrderIds) {
21
+ try {
22
+ const r = await resolveLogisticLabel(supabase, {
23
+ environment,
24
+ fulfillmentOrderId: fid,
25
+ logisticLabelCode: item.logisticLabelCode ?? null,
26
+ });
27
+ results.push({ id: clientId, ok: true, ...r });
28
+ }
29
+ catch (e) {
30
+ results.push({
31
+ id: clientId,
32
+ ok: false,
33
+ fulfillmentOrderId: fid,
34
+ error: String(e?.message ?? e),
35
+ });
36
+ }
37
+ }
38
+ continue;
39
+ }
40
+ fulfillmentOrderId = lookup.fulfillmentOrderIds[0];
41
+ }
42
+ const r = await resolveLogisticLabel(supabase, {
43
+ environment,
44
+ fulfillmentOrderId,
45
+ logisticLabelCode: item.logisticLabelCode ?? null,
46
+ });
47
+ results.push({ id: clientId, ok: true, ...r });
48
+ }
49
+ catch (e) {
50
+ results.push({
51
+ id: clientId,
52
+ ok: false,
53
+ error: String(e?.message ?? e),
54
+ });
55
+ }
56
+ }
57
+ const okCount = results.filter((r) => r.ok).length;
58
+ return {
59
+ ok: true,
60
+ total: results.length,
61
+ success: okCount,
62
+ failed: results.length - okCount,
63
+ results,
64
+ };
65
+ }
@@ -0,0 +1,24 @@
1
+ import type { SupabaseClient } from "@supabase/supabase-js";
2
+ type Kind = "logistic-label" | "delivery-note" | "auction-letter" | "customer-sticker";
3
+ export interface PdfInput {
4
+ environment?: "staging" | "live";
5
+ kind: Kind;
6
+ fulfillmentOrderId?: string;
7
+ deliveryOrderId?: string;
8
+ salesOrderId?: string;
9
+ logisticLabelCode?: string;
10
+ clockSupplyId?: string;
11
+ auctionLetterCode?: string;
12
+ stickerId?: string;
13
+ }
14
+ export type PdfResult = ({
15
+ ok: true;
16
+ } & Record<string, any>) | {
17
+ ok: false;
18
+ status?: number;
19
+ error: string;
20
+ fulfillmentOrderIds?: string[];
21
+ };
22
+ export declare function runPdf(supabase: SupabaseClient, parsed: PdfInput, environment: "staging" | "live"): Promise<PdfResult>;
23
+ export {};
24
+ //# sourceMappingURL=pdf.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pdf.d.ts","sourceRoot":"","sources":["../../../src/lib/gateway/pdf.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAG5D,KAAK,IAAI,GACL,gBAAgB,GAChB,eAAe,GACf,gBAAgB,GAChB,kBAAkB,CAAC;AAEvB,MAAM,WAAW,QAAQ;IACvB,WAAW,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IACjC,IAAI,EAAE,IAAI,CAAC;IACX,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,SAAS,GACjB,CAAC;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GACpC;IACE,EAAE,EAAE,KAAK,CAAC;IACV,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;CAChC,CAAC;AAEN,wBAAsB,MAAM,CAC1B,QAAQ,EAAE,cAAc,EACxB,MAAM,EAAE,QAAQ,EAChB,WAAW,EAAE,SAAS,GAAG,MAAM,GAC9B,OAAO,CAAC,SAAS,CAAC,CAoEpB"}
@@ -0,0 +1,64 @@
1
+ // Gateway business-logica voor /api/public/gateway/pdf.
2
+ // Verplaatst uit de route; byte-identiek gedrag.
3
+ // De adapter resolvet environment vooraf (409-catch) en geeft die mee.
4
+ import { resolveFulfillmentOrderIds, resolveLogisticLabel } from "./shared";
5
+ export async function runPdf(supabase, parsed, environment) {
6
+ if (parsed.kind === "logistic-label" || parsed.kind === "delivery-note") {
7
+ // Voor "delivery-note" mag de caller ook via deliveryOrderId of
8
+ // salesOrderId komen; we lossen die dan hier centraal op.
9
+ let fulfillmentOrderId = parsed.fulfillmentOrderId?.trim() ?? "";
10
+ if (!fulfillmentOrderId) {
11
+ if (!parsed.deliveryOrderId && !parsed.salesOrderId) {
12
+ return {
13
+ ok: false,
14
+ status: 400,
15
+ error: "Geef ten minste één van fulfillmentOrderId, deliveryOrderId of salesOrderId op",
16
+ };
17
+ }
18
+ const lookup = await resolveFulfillmentOrderIds(supabase, {
19
+ environment,
20
+ deliveryOrderId: parsed.deliveryOrderId,
21
+ salesOrderId: parsed.salesOrderId,
22
+ });
23
+ if (lookup.fulfillmentOrderIds.length > 1) {
24
+ return {
25
+ ok: false,
26
+ status: 409,
27
+ error: `Meerdere fulfillment-orders gevonden (${lookup.fulfillmentOrderIds.length}); gebruik /gateway/pdf/bulk of geef een specifieke fulfillmentOrderId op`,
28
+ fulfillmentOrderIds: lookup.fulfillmentOrderIds,
29
+ };
30
+ }
31
+ fulfillmentOrderId = lookup.fulfillmentOrderIds[0];
32
+ }
33
+ const result = await resolveLogisticLabel(supabase, {
34
+ environment,
35
+ fulfillmentOrderId,
36
+ logisticLabelCode: parsed.logisticLabelCode ?? null,
37
+ });
38
+ return { ok: true, ...result };
39
+ }
40
+ if (parsed.kind === "auction-letter") {
41
+ if (!parsed.clockSupplyId) {
42
+ return { ok: false, status: 400, error: "clockSupplyId is verplicht" };
43
+ }
44
+ const { resolveAuctionLetter } = await import("../floriday-auction-letters.functions");
45
+ const result = await resolveAuctionLetter(supabase, {
46
+ environment,
47
+ clockSupplyId: parsed.clockSupplyId,
48
+ auctionLetterCode: parsed.auctionLetterCode ?? null,
49
+ });
50
+ return { ok: true, ...result };
51
+ }
52
+ if (parsed.kind === "customer-sticker") {
53
+ if (!parsed.stickerId) {
54
+ return { ok: false, status: 400, error: "stickerId is verplicht" };
55
+ }
56
+ const { resolveCustomerSticker } = await import("../floriday-stickers.functions");
57
+ const result = await resolveCustomerSticker(supabase, {
58
+ environment,
59
+ stickerId: parsed.stickerId,
60
+ });
61
+ return { ok: true, ...result };
62
+ }
63
+ return { ok: false, status: 400, error: `Onbekend kind: ${parsed.kind}` };
64
+ }
@@ -0,0 +1,18 @@
1
+ import type { SupabaseClient } from "@supabase/supabase-js";
2
+ import type { FlorydayEnvironment } from "./shared";
3
+ export interface ProductCharacteristicsInput {
4
+ environment: FlorydayEnvironment;
5
+ productCode?: string | number;
6
+ vbnProductCode?: string | number;
7
+ forceRefresh?: boolean;
8
+ }
9
+ export declare function runProductCharacteristics(supabase: SupabaseClient, parsed: ProductCharacteristicsInput): Promise<{
10
+ ok: true;
11
+ productCode: string;
12
+ productGroupId: string | null;
13
+ productName: string | null;
14
+ source: "cache" | "floricode-live";
15
+ codeListName: "vbn-product-characteristic";
16
+ characteristics: import("../floricode-product-features").ProductCharacteristic[];
17
+ }>;
18
+ //# sourceMappingURL=product-characteristics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"product-characteristics.d.ts","sourceRoot":"","sources":["../../../src/lib/gateway/product-characteristics.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAEpD,MAAM,WAAW,2BAA2B;IAC1C,WAAW,EAAE,mBAAmB,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC9B,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACjC,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,wBAAsB,yBAAyB,CAC7C,QAAQ,EAAE,cAAc,EACxB,MAAM,EAAE,2BAA2B;;;;;;;;GAYpC"}
@@ -0,0 +1,8 @@
1
+ // Gateway business-logica voor /api/public/gateway/product-characteristics.
2
+ // Optie B: validatie-guards + statuscodes blijven in de adapter (byte-identiek
3
+ // aan HEAD). Deze module doet alleen de resolve-call.
4
+ export async function runProductCharacteristics(supabase, parsed) {
5
+ const { getProductCharacteristicsForVbnCode } = await import("../floricode-product-features");
6
+ const productCode = parsed.productCode ?? parsed.vbnProductCode;
7
+ return await getProductCharacteristicsForVbnCode(supabase, parsed.environment, productCode, { forceRefresh: parsed.forceRefresh === true });
8
+ }
@@ -0,0 +1,28 @@
1
+ import type { SupabaseClient } from "@supabase/supabase-js";
2
+ export interface SchemaInput {
3
+ resource: string;
4
+ version?: string;
5
+ includeCodeLists?: string[];
6
+ environment?: "staging" | "live";
7
+ }
8
+ export type SchemaResult = {
9
+ ok: true;
10
+ resource: string;
11
+ version: string;
12
+ schema: any;
13
+ enums: any;
14
+ requiredFields: string[];
15
+ fields: Array<Record<string, any>>;
16
+ fetched_at: string;
17
+ codeLists?: Record<string, Array<{
18
+ code: string;
19
+ label: string | null;
20
+ payload: any;
21
+ }>>;
22
+ } | {
23
+ ok: false;
24
+ error: string;
25
+ status?: number;
26
+ };
27
+ export declare function runSchema(supabase: SupabaseClient, parsed: SchemaInput): Promise<SchemaResult>;
28
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/lib/gateway/schema.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,WAAW,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;CAClC;AAkCD,MAAM,MAAM,YAAY,GACpB;IACE,EAAE,EAAE,IAAI,CAAC;IACT,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,GAAG,CAAC;IACZ,KAAK,EAAE,GAAG,CAAC;IACX,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,OAAO,EAAE,GAAG,CAAA;KAAE,CAAC,CAAC,CAAC;CACzF,GACD;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAElD,wBAAsB,SAAS,CAC7B,QAAQ,EAAE,cAAc,EACxB,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,YAAY,CAAC,CAwEvB"}
@@ -0,0 +1,102 @@
1
+ // Gateway business-logica voor /api/public/gateway/schema.
2
+ // Verplaatst uit de route; byte-identiek gedrag.
3
+ async function fetchAllIncludedCodeLists(supabaseAdmin, environment, names) {
4
+ const pageSize = 1000;
5
+ const codeLists = {};
6
+ for (const n of names)
7
+ codeLists[n] = [];
8
+ for (const listName of names) {
9
+ for (let from = 0;; from += pageSize) {
10
+ const { data, error } = await supabaseAdmin
11
+ .from("floriday_code_lists_cache")
12
+ .select("list_name, code, label, payload")
13
+ .eq("environment", environment)
14
+ .eq("list_name", listName)
15
+ .order("code", { ascending: true })
16
+ .range(from, from + pageSize - 1);
17
+ if (error)
18
+ throw error;
19
+ for (const r of (data ?? [])) {
20
+ codeLists[listName].push({
21
+ code: r.code,
22
+ label: r.label ?? null,
23
+ payload: r.payload ?? null,
24
+ });
25
+ }
26
+ if (!data || data.length < pageSize)
27
+ break;
28
+ }
29
+ }
30
+ return codeLists;
31
+ }
32
+ export async function runSchema(supabase, parsed) {
33
+ const supabaseAdmin = supabase;
34
+ let query = supabaseAdmin
35
+ .from("floriday_resource_schemas")
36
+ .select("resource, version, schema, enums, fetched_at")
37
+ .eq("resource", parsed.resource);
38
+ if (parsed.version)
39
+ query = query.eq("version", parsed.version);
40
+ const { data: rows, error } = await query
41
+ .order("fetched_at", { ascending: false })
42
+ .limit(1);
43
+ if (error)
44
+ return { ok: false, error: error.message };
45
+ const row = (rows ?? [])[0];
46
+ if (!row) {
47
+ return {
48
+ ok: false,
49
+ error: "Schema niet gevonden — draai eerst de referentiedata-refresh",
50
+ };
51
+ }
52
+ // Plat de meest gebruikte metadata uit zodat consumers (Voorraad,
53
+ // Verkoop) niet zelf het JSON-schema hoeven door te parsen.
54
+ const schema = (row.schema ?? {});
55
+ const properties = schema.properties ?? {};
56
+ const requiredFields = Array.isArray(schema.required)
57
+ ? schema.required
58
+ : [];
59
+ const fields = Object.entries(properties).map(([name, def]) => {
60
+ const d = (def ?? {});
61
+ return {
62
+ name,
63
+ type: d.type ?? null,
64
+ format: d.format ?? null,
65
+ description: d.description ?? null,
66
+ required: requiredFields.includes(name),
67
+ enum: Array.isArray(d.enum) ? d.enum : null,
68
+ minLength: d.minLength ?? null,
69
+ maxLength: d.maxLength ?? null,
70
+ minimum: d.minimum ?? null,
71
+ maximum: d.maximum ?? null,
72
+ pattern: d.pattern ?? null,
73
+ nullable: d.nullable ?? false,
74
+ ref: d.$ref ?? null,
75
+ };
76
+ });
77
+ let codeLists;
78
+ if (Array.isArray(parsed.includeCodeLists) && parsed.includeCodeLists.length > 0) {
79
+ if (parsed.environment !== "staging" && parsed.environment !== "live") {
80
+ return {
81
+ ok: false,
82
+ status: 400,
83
+ error: "environment is verplicht wanneer includeCodeLists wordt gebruikt",
84
+ };
85
+ }
86
+ const names = parsed.includeCodeLists
87
+ .filter((n) => typeof n === "string" && n.length > 0)
88
+ .slice(0, 25);
89
+ codeLists = await fetchAllIncludedCodeLists(supabaseAdmin, parsed.environment, names);
90
+ }
91
+ return {
92
+ ok: true,
93
+ resource: row.resource,
94
+ version: row.version,
95
+ schema: row.schema,
96
+ enums: row.enums ?? {},
97
+ requiredFields,
98
+ fields,
99
+ fetched_at: row.fetched_at,
100
+ ...(codeLists ? { codeLists } : {}),
101
+ };
102
+ }
@@ -1,2 +1,6 @@
1
- export { verifyGatewayCaller, corsPreflight, withCors, GATEWAY_CORS_HEADERS, } from "../../lib/floriday-gateway-auth";
1
+ export { verifyGatewayCaller, verifyGatewayBinaryCaller, corsPreflight, withCors, GATEWAY_CORS_HEADERS, resolveGatewayEnvironment, } from "../floriday-gateway-auth";
2
+ export { GATEWAY_HEADER_CALLER } from "../floriday-gateway-hmac";
3
+ export type { FlorydayEnvironment } from "../floriday.functions";
4
+ export { resolveFulfillmentOrderIds } from "../floriday-fulfillment-lookup.server";
5
+ export { resolveLogisticLabel } from "../floriday-labels.functions";
2
6
  //# sourceMappingURL=shared.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../src/lib/gateway/shared.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,mBAAmB,EACnB,aAAa,EACb,QAAQ,EACR,oBAAoB,GACrB,MAAM,6BAA6B,CAAC"}
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../src/lib/gateway/shared.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,aAAa,EACb,QAAQ,EACR,oBAAoB,EACpB,yBAAyB,GAC1B,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,YAAY,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAGjE,OAAO,EAAE,0BAA0B,EAAE,MAAM,uCAAuC,CAAC;AACnF,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC"}
@@ -1,3 +1,7 @@
1
- // Gateway shared re-exports — subset used by cached-list (stap 1).
2
- // Aanvullende exports (binary caller, types) volgen bij latere lifts.
3
- export { verifyGatewayCaller, corsPreflight, withCors, GATEWAY_CORS_HEADERS, } from "../../lib/floriday-gateway-auth";
1
+ // Gateway shared re-exports.
2
+ // Uitsluitend relatieve paden; consumers importeren via `./shared`.
3
+ export { verifyGatewayCaller, verifyGatewayBinaryCaller, corsPreflight, withCors, GATEWAY_CORS_HEADERS, resolveGatewayEnvironment, } from "../floriday-gateway-auth";
4
+ export { GATEWAY_HEADER_CALLER } from "../floriday-gateway-hmac";
5
+ // Multi-caller PDF-resolvers (pdf, pdf-bulk, pdf-bulk-merged).
6
+ export { resolveFulfillmentOrderIds } from "../floriday-fulfillment-lookup.server";
7
+ export { resolveLogisticLabel } from "../floriday-labels.functions";
@@ -0,0 +1,11 @@
1
+ import type { SupabaseClient } from "@supabase/supabase-js";
2
+ export interface SupplyLineResult {
3
+ status: number;
4
+ payload: unknown;
5
+ }
6
+ export declare function runSupplyLine(supabase: SupabaseClient, input: {
7
+ raw: any;
8
+ environment?: string;
9
+ caller: string;
10
+ }): Promise<SupplyLineResult>;
11
+ //# sourceMappingURL=supply-line.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"supply-line.d.ts","sourceRoot":"","sources":["../../../src/lib/gateway/supply-line.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAiH5D,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,wBAAsB,aAAa,CACjC,QAAQ,EAAE,cAAc,EACxB,KAAK,EAAE;IAAE,GAAG,EAAE,GAAG,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACxD,OAAO,CAAC,gBAAgB,CAAC,CAmK3B"}