@flowselections/floriday-authenticatie-module 1.0.74 → 1.0.77

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 (66) hide show
  1. package/dist-lib/components/floriday/FlorydayApiLogPage.d.ts.map +1 -1
  2. package/dist-lib/components/floriday/FlorydayApiLogPage.js +12 -1
  3. package/dist-lib/components/floriday/FlorydayConnectionPage.d.ts.map +1 -1
  4. package/dist-lib/components/floriday/FlorydayConnectionPage.js +2 -1
  5. package/dist-lib/components/floriday/FlorydayCronStallBanner.d.ts +3 -0
  6. package/dist-lib/components/floriday/FlorydayCronStallBanner.d.ts.map +1 -0
  7. package/dist-lib/components/floriday/FlorydayCronStallBanner.js +13 -0
  8. package/dist-lib/integrations/supabase/types.d.ts +904 -0
  9. package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
  10. package/dist-lib/lib/cron/process-stock-queue.d.ts +5 -0
  11. package/dist-lib/lib/cron/process-stock-queue.d.ts.map +1 -1
  12. package/dist-lib/lib/cron/process-stock-queue.js +31 -1
  13. package/dist-lib/lib/cron/retry-floriday-documents.d.ts.map +1 -1
  14. package/dist-lib/lib/cron/retry-floriday-documents.js +14 -1
  15. package/dist-lib/lib/document-version.d.ts +33 -0
  16. package/dist-lib/lib/document-version.d.ts.map +1 -0
  17. package/dist-lib/lib/document-version.js +55 -0
  18. package/dist-lib/lib/floriday-api-log.functions.d.ts +1 -0
  19. package/dist-lib/lib/floriday-api-log.functions.d.ts.map +1 -1
  20. package/dist-lib/lib/floriday-api-log.functions.js +1 -1
  21. package/dist-lib/lib/floriday-api-log.server.js +1 -1
  22. package/dist-lib/lib/floriday-auction-letters.functions.d.ts.map +1 -1
  23. package/dist-lib/lib/floriday-auction-letters.functions.js +5 -8
  24. package/dist-lib/lib/floriday-cron-status.functions.d.ts +11 -0
  25. package/dist-lib/lib/floriday-cron-status.functions.d.ts.map +1 -0
  26. package/dist-lib/lib/floriday-cron-status.functions.js +9 -0
  27. package/dist-lib/lib/floriday-labels.functions.d.ts +2 -0
  28. package/dist-lib/lib/floriday-labels.functions.d.ts.map +1 -1
  29. package/dist-lib/lib/floriday-labels.functions.js +7 -8
  30. package/dist-lib/lib/floriday-stickers.functions.d.ts +2 -0
  31. package/dist-lib/lib/floriday-stickers.functions.d.ts.map +1 -1
  32. package/dist-lib/lib/floriday-stickers.functions.js +7 -8
  33. package/dist-lib/lib/floriday-sync.functions.d.ts +690 -0
  34. package/dist-lib/lib/floriday-sync.functions.d.ts.map +1 -1
  35. package/dist-lib/lib/floriday-sync.functions.js +16 -2
  36. package/dist-lib/lib/floriday-tray-stickers.functions.d.ts +29 -4
  37. package/dist-lib/lib/floriday-tray-stickers.functions.d.ts.map +1 -1
  38. package/dist-lib/lib/floriday-tray-stickers.functions.js +61 -60
  39. package/dist-lib/lib/floriday.functions.d.ts +13 -4
  40. package/dist-lib/lib/floriday.functions.d.ts.map +1 -1
  41. package/dist-lib/lib/floriday.functions.js +70 -18
  42. package/dist-lib/lib/gateway/customer-stickers.d.ts +93 -0
  43. package/dist-lib/lib/gateway/customer-stickers.d.ts.map +1 -0
  44. package/dist-lib/lib/gateway/customer-stickers.js +279 -0
  45. package/dist-lib/lib/gateway/floriday-error-map.d.ts +11 -0
  46. package/dist-lib/lib/gateway/floriday-error-map.d.ts.map +1 -0
  47. package/dist-lib/lib/gateway/floriday-error-map.js +30 -0
  48. package/dist-lib/lib/gateway/fulfillment-order-send.d.ts.map +1 -1
  49. package/dist-lib/lib/gateway/fulfillment-order-send.js +19 -2
  50. package/dist-lib/lib/gateway/fulfillment-order-status.d.ts.map +1 -1
  51. package/dist-lib/lib/gateway/fulfillment-order-status.js +5 -3
  52. package/dist-lib/lib/gateway/fulfillment-order-validate.d.ts +8 -0
  53. package/dist-lib/lib/gateway/fulfillment-order-validate.d.ts.map +1 -0
  54. package/dist-lib/lib/gateway/fulfillment-order-validate.js +56 -0
  55. package/dist-lib/lib/gateway/index.d.ts +1 -0
  56. package/dist-lib/lib/gateway/index.d.ts.map +1 -1
  57. package/dist-lib/lib/gateway/index.js +1 -0
  58. package/dist-lib/lib/gateway/pdf.d.ts +4 -1
  59. package/dist-lib/lib/gateway/pdf.d.ts.map +1 -1
  60. package/dist-lib/lib/gateway/pdf.js +26 -4
  61. package/dist-lib/lib/module-version.d.ts +1 -1
  62. package/dist-lib/lib/module-version.js +1 -1
  63. package/dist-lib/lib/shell-routes.d.ts +1 -1
  64. package/dist-lib/lib/shell-routes.d.ts.map +1 -1
  65. package/dist-lib/lib/shell-routes.js +1 -0
  66. package/package.json +11 -2
@@ -89,5 +89,10 @@ export declare function runStockQueueRound(supabase: SupabaseClient, limit?: num
89
89
  */
90
90
  export declare function handleProcessStockQueue(request: Request, supabase: SupabaseClient): Promise<Response>;
91
91
  export declare function maybeTickStockQueue(supabase: SupabaseClient): void;
92
+ /** Pure beslissing: laatste relevante poging (nieuwste eerst) was een 404. */
93
+ export declare function decideMissingBaseSupply(rows: Array<{
94
+ ok: boolean;
95
+ http_status: number | null;
96
+ }>): boolean;
92
97
  export {};
93
98
  //# sourceMappingURL=process-stock-queue.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"process-stock-queue.d.ts","sourceRoot":"","sources":["../../../src/lib/cron/process-stock-queue.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"process-stock-queue.d.ts","sourceRoot":"","sources":["../../../src/lib/cron/process-stock-queue.ts"],"names":[],"mappings":"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"}
@@ -180,7 +180,13 @@ export async function pushStockRow(supabase, env, row) {
180
180
  }));
181
181
  if (!availability.ok)
182
182
  return decideOutcome(availability, null);
183
- // 2. Aantal: alleen PATCH op bestaand weekaanbod.
183
+ // 2. Aantal: alleen PATCH op bestaand weekaanbod. Gaf Floriday voor dit
184
+ // artikel en deze week recent 404 (en sindsdien geen geslaagde
185
+ // PUT/PATCH), dan niet opnieuw proberen: Voorraad moet eerst
186
+ // gateway/supply-line aanroepen.
187
+ if (await recentMissingBaseSupply(supabase, row.trade_item_id, year, week)) {
188
+ return { outcome: "needs_base_supply", availabilitySent: true, quantitySent: false, error: NEEDS_BASE_SUPPLY_MESSAGE, permanent: false, attemptId: availability.attemptId ?? null };
189
+ }
184
190
  const quantity = (await florydayWrite(supabase, env, {
185
191
  module: "inventory",
186
192
  action: "patch-weekly-base-supply",
@@ -301,3 +307,27 @@ export function maybeTickStockQueue(supabase) {
301
307
  void syncShellHostRuntimeConfig().catch(() => undefined);
302
308
  void runStockQueueRound(supabase, 10).catch((e) => console.warn("[stock-queue] vangnet-ronde mislukt:", e?.message ?? e));
303
309
  }
310
+ const MISSING_BASE_SUPPLY_WINDOW_MS = 6 * 60 * 60 * 1000;
311
+ /** Pure beslissing: laatste relevante poging (nieuwste eerst) was een 404. */
312
+ export function decideMissingBaseSupply(rows) {
313
+ const last = rows[0];
314
+ return !!last && !last.ok && last.http_status === 404;
315
+ }
316
+ async function recentMissingBaseSupply(supabase, tradeItemId, year, week) {
317
+ try {
318
+ const since = new Date(Date.now() - MISSING_BASE_SUPPLY_WINDOW_MS).toISOString();
319
+ const { data } = await supabase
320
+ .from("floriday_write_log")
321
+ .select("ok, http_status, created_at")
322
+ .eq("floriday_id", tradeItemId)
323
+ .in("action", ["patch-weekly-base-supply", "upsert-weekly-base-supply"])
324
+ .like("idempotency_key", `%:${tradeItemId}:${year}:${week}:%`)
325
+ .gte("created_at", since)
326
+ .order("created_at", { ascending: false })
327
+ .limit(1);
328
+ return decideMissingBaseSupply((data ?? []));
329
+ }
330
+ catch {
331
+ return false; // bij twijfel gewoon proberen
332
+ }
333
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"retry-floriday-documents.d.ts","sourceRoot":"","sources":["../../../src/lib/cron/retry-floriday-documents.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAU5D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAMpE,UAAU,QAAQ;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,mBAAmB,CAAC;IACjC,IAAI,EAAE,kBAAkB,GAAG,gBAAgB,GAAG,eAAe,CAAC;IAC9D,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;CACtB;AAKD,uEAAuE;AACvE,wBAAsB,oBAAoB,CACxC,EAAE,EAAE,cAAc,EAClB,GAAG,EAAE,QAAQ,GACZ,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA8DxB;AA2BD,wBAAsB,qBAAqB,CAAC,EAAE,EAAE,cAAc;;;;;;;iBAaiD,MAAM,GAAG,IAAI;GAiF3H;AAED,mDAAmD;AACnD,wBAAsB,4BAA4B,CAChD,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,cAAc,GACvB,OAAO,CAAC,QAAQ,CAAC,CAgBnB"}
1
+ {"version":3,"file":"retry-floriday-documents.d.ts","sourceRoot":"","sources":["../../../src/lib/cron/retry-floriday-documents.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAU5D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAMpE,UAAU,QAAQ;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,mBAAmB,CAAC;IACjC,IAAI,EAAE,kBAAkB,GAAG,gBAAgB,GAAG,eAAe,CAAC;IAC9D,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;CACtB;AAKD,uEAAuE;AACvE,wBAAsB,oBAAoB,CACxC,EAAE,EAAE,cAAc,EAClB,GAAG,EAAE,QAAQ,GACZ,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAoExB;AAgCD,wBAAsB,qBAAqB,CAAC,EAAE,EAAE,cAAc;;;;;;;iBAaiD,MAAM,GAAG,IAAI;GAiF3H;AAED,mDAAmD;AACnD,wBAAsB,4BAA4B,CAChD,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,cAAc,GACvB,OAAO,CAAC,QAAQ,CAAC,CAgBnB"}
@@ -58,6 +58,13 @@ export async function documentCancelReason(sb, row) {
58
58
  return null;
59
59
  }
60
60
  // tray-stickers: delivery-order + bijbehorende fulfillment-orders
61
+ if (row.params.fulfillmentOrderId && !row.params.deliveryOrderId) {
62
+ const { data: fo } = await sb.from("floriday_fulfillment_orders_cache")
63
+ .select("status, is_deleted").eq("connection_id", cid).eq("floriday_id", row.params.fulfillmentOrderId).maybeSingle();
64
+ if (fo && isCancelled(fo.status, fo.is_deleted))
65
+ return `Fulfillment-order ${row.params.fulfillmentOrderId} in Floriday geannuleerd`;
66
+ return null;
67
+ }
61
68
  const doId = row.params.deliveryOrderId;
62
69
  const { data: d } = await sb
63
70
  .from("floriday_delivery_orders_cache")
@@ -94,7 +101,13 @@ async function attempt(sb, row) {
94
101
  });
95
102
  }
96
103
  else {
97
- await resolveTrayStickers(sb, { environment: env, deliveryOrderId: row.params.deliveryOrderId });
104
+ const r = await resolveTrayStickers(sb, {
105
+ environment: env,
106
+ fulfillmentOrderId: row.params.fulfillmentOrderId,
107
+ deliveryOrderId: row.params.fulfillmentOrderId ? undefined : row.params.deliveryOrderId,
108
+ });
109
+ if (!r.ok)
110
+ throw Object.assign(new Error(r.error), { status: r.status });
98
111
  }
99
112
  }
100
113
  function isPermanent(status, msg) {
@@ -0,0 +1,33 @@
1
+ import type { SupabaseClient } from "@supabase/supabase-js";
2
+ export type DocumentKind = "logistic-label" | "customer-sticker" | "tray-stickers" | "auction-letter";
3
+ /** Pad voor versie n; v1 = het oude, onversioneerde pad. */
4
+ export declare function versionedPath(basePath: string, version: number): string;
5
+ /** Pure beslissing: zelfde inhoud hergebruiken, anders volgende versie. */
6
+ export declare function decideVersion(latest: {
7
+ version: number;
8
+ content_sha256: string;
9
+ } | null, sha: string): {
10
+ reuse: true;
11
+ version: number;
12
+ } | {
13
+ reuse: false;
14
+ version: number;
15
+ };
16
+ export declare function sha256Hex(bytes: Uint8Array): Promise<string>;
17
+ export interface StoredVersion {
18
+ bucket: string;
19
+ storagePath: string;
20
+ version: number;
21
+ reused: boolean;
22
+ }
23
+ export declare function storeVersionedDocument(supabase: SupabaseClient, input: {
24
+ connectionId: string;
25
+ kind: DocumentKind;
26
+ documentId: string;
27
+ bucket: string;
28
+ basePath: string;
29
+ bytes: Uint8Array;
30
+ contentType: string;
31
+ deliveryDate?: string | null;
32
+ }): Promise<StoredVersion>;
33
+ //# sourceMappingURL=document-version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document-version.d.ts","sourceRoot":"","sources":["../../src/lib/document-version.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,MAAM,MAAM,YAAY,GAAG,gBAAgB,GAAG,kBAAkB,GAAG,eAAe,GAAG,gBAAgB,CAAC;AAEtG,4DAA4D;AAC5D,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAGvE;AAED,2EAA2E;AAC3E,wBAAgB,aAAa,CAAC,MAAM,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,EAAE,GAAG,EAAE,MAAM,GACnG;IAAE,KAAK,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAGrE;AAED,wBAAsB,SAAS,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAGlE;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,wBAAsB,sBAAsB,CAC1C,QAAQ,EAAE,cAAc,EACxB,KAAK,EAAE;IACL,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,YAAY,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,UAAU,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B,GACA,OAAO,CAAC,aAAa,CAAC,CA+BxB"}
@@ -0,0 +1,55 @@
1
+ // Versiebeheer voor Floriday-documenten in Storage.
2
+ // Een bestand waar een printopdracht naar kan verwijzen wordt nooit
3
+ // overschreven: gelijke inhoud = bestaande versie, andere inhoud = nieuw pad
4
+ // `<basis>-v<n>.pdf`. Versie 1 houdt het oude pad (`<basis>.pdf`), zodat
5
+ // bestaande cacheregels en printopdrachten blijven kloppen. Er wordt niets
6
+ // opgeruimd (geen opruimbeleid; minimaal 90 dagen na leverdatum bewaren).
7
+ /** Pad voor versie n; v1 = het oude, onversioneerde pad. */
8
+ export function versionedPath(basePath, version) {
9
+ const base = basePath.replace(/\.pdf$/i, "");
10
+ return version <= 1 ? `${base}.pdf` : `${base}-v${version}.pdf`;
11
+ }
12
+ /** Pure beslissing: zelfde inhoud hergebruiken, anders volgende versie. */
13
+ export function decideVersion(latest, sha) {
14
+ if (latest && latest.content_sha256 === sha)
15
+ return { reuse: true, version: latest.version };
16
+ return { reuse: false, version: (latest?.version ?? 0) + 1 };
17
+ }
18
+ export async function sha256Hex(bytes) {
19
+ const digest = await crypto.subtle.digest("SHA-256", bytes);
20
+ return Array.from(new Uint8Array(digest)).map((b) => b.toString(16).padStart(2, "0")).join("");
21
+ }
22
+ export async function storeVersionedDocument(supabase, input) {
23
+ const db = supabase;
24
+ const sha = await sha256Hex(input.bytes);
25
+ const { data: latest } = await db.from("floriday_document_versions")
26
+ .select("version, content_sha256, storage_path, bucket")
27
+ .eq("connection_id", input.connectionId).eq("document_kind", input.kind).eq("document_id", input.documentId)
28
+ .order("version", { ascending: false }).limit(1).maybeSingle();
29
+ const d = decideVersion(latest ?? null, sha);
30
+ if (d.reuse)
31
+ return { bucket: latest.bucket, storagePath: latest.storage_path, version: d.version, reused: true };
32
+ // Nooit overschrijven: bestaat het pad al (bv. een bestand van vóór het
33
+ // versiebeheer), dan het volgende versienummer nemen.
34
+ let version = d.version;
35
+ for (let attempt = 0; attempt < 50; attempt++, version++) {
36
+ const storagePath = versionedPath(input.basePath, version);
37
+ const { error } = await supabase.storage.from(input.bucket)
38
+ .upload(storagePath, input.bytes, { contentType: input.contentType, upsert: false });
39
+ if (error) {
40
+ if (/exist|duplicate|409/i.test(error.message))
41
+ continue;
42
+ throw new Error(`Storage upload: ${error.message}`);
43
+ }
44
+ const { error: insErr } = await db.from("floriday_document_versions").insert({
45
+ connection_id: input.connectionId, document_kind: input.kind, document_id: input.documentId,
46
+ version, bucket: input.bucket, storage_path: storagePath, content_sha256: sha,
47
+ content_type: input.contentType, byte_size: input.bytes.byteLength,
48
+ delivery_date: input.deliveryDate ?? null,
49
+ });
50
+ if (insErr)
51
+ throw new Error(`Documentversie vastleggen: ${insErr.message}`);
52
+ return { bucket: input.bucket, storagePath, version, reused: false };
53
+ }
54
+ throw new Error("Geen vrij versiepad gevonden (50 pogingen)");
55
+ }
@@ -20,6 +20,7 @@ export interface FlorydayApiLogRow {
20
20
  item_count: number | null;
21
21
  cursor_from: number | null;
22
22
  error: string | null;
23
+ response?: any;
23
24
  write_log_id: string | null;
24
25
  }
25
26
  export declare const listFlorydayApiLog: import("@tanstack/start-client-core").OptionalFetcher<readonly [import("@tanstack/start-client-core").FunctionMiddlewareAfterServer<{}, unknown, undefined, {
@@ -1 +1 @@
1
- {"version":3,"file":"floriday-api-log.functions.d.ts","sourceRoot":"","sources":["../../src/lib/floriday-api-log.functions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"floriday-api-log.functions.d.ts","sourceRoot":"","sources":["../../src/lib/floriday-api-log.functions.ts"],"names":[],"mappings":"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"}
@@ -11,7 +11,7 @@ export const listFlorydayApiLog = createServerFn({ method: "GET" })
11
11
  const offset = Math.max(data.offset ?? 0, 0);
12
12
  let q = supabaseAdmin
13
13
  .from("floriday_api_log")
14
- .select("id, created_at, direction, environment, method, path, http_status, ok, duration_ms, module, caller, action, resource_type, floriday_id, local_id, floriday_reference, local_reference, kind, item_count, cursor_from, error, write_log_id", { count: "exact" })
14
+ .select("id, created_at, direction, environment, method, path, http_status, ok, duration_ms, module, caller, action, resource_type, floriday_id, local_id, floriday_reference, local_reference, kind, item_count, cursor_from, error, response, write_log_id", { count: "exact" })
15
15
  .order("created_at", { ascending: false })
16
16
  .range(offset, offset + limit - 1);
17
17
  if (data.direction && data.direction !== "all")
@@ -304,7 +304,7 @@ export async function logFlorydayCall(entry) {
304
304
  cursor_from: cursorFrom,
305
305
  request: trim(entry.request),
306
306
  response: trim(response),
307
- error: entry.error ? String(entry.error).slice(0, 2000) : null,
307
+ error: entry.error ? String(entry.error).slice(0, 20000) : null,
308
308
  write_log_id: entry.writeLogId ?? null,
309
309
  });
310
310
  }
@@ -1 +1 @@
1
- {"version":3,"file":"floriday-auction-letters.functions.d.ts","sourceRoot":"","sources":["../../src/lib/floriday-auction-letters.functions.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,EAKL,KAAK,mBAAmB,EACzB,MAAM,yBAAyB,CAAC;AAMjC,MAAM,WAAW,qBAAqB;IACpC,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,UAAU,YAAY;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,WAAW,CAAC,EAAE,mBAAmB,CAAC;CACnC;AAiHD,eAAO,MAAM,wBAAwB;;;;8CAEX,YAAY,kDAqClC,CAAC;AAEL,iFAAiF;AACjF,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,cAAc,EACxB,KAAK,EAAE;IAAE,WAAW,EAAE,mBAAmB,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GACpG,OAAO,CAAC,qBAAqB,CAAC,CA0BhC"}
1
+ {"version":3,"file":"floriday-auction-letters.functions.d.ts","sourceRoot":"","sources":["../../src/lib/floriday-auction-letters.functions.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,EAKL,KAAK,mBAAmB,EACzB,MAAM,yBAAyB,CAAC;AAMjC,MAAM,WAAW,qBAAqB;IACpC,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,UAAU,YAAY;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,WAAW,CAAC,EAAE,mBAAmB,CAAC;CACnC;AA8GD,eAAO,MAAM,wBAAwB;;;;8CAEX,YAAY,kDAqClC,CAAC;AAEL,iFAAiF;AACjF,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,cAAc,EACxB,KAAK,EAAE;IAAE,WAAW,EAAE,mBAAmB,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GACpG,OAAO,CAAC,qBAAqB,CAAC,CA0BhC"}
@@ -1,3 +1,4 @@
1
+ import { storeVersionedDocument } from "./document-version.js";
1
2
  // ============================================================================
2
3
  // Floriday veilingbrieven (auction letters) — lazy on-demand PDF fetch
3
4
  // ----------------------------------------------------------------------------
@@ -79,15 +80,11 @@ async function fetchAuctionLetterToStorage(supabase, env, connectionId, clockSup
79
80
  bytes = new Uint8Array(buf);
80
81
  storedContentType = contentType || "application/pdf";
81
82
  }
82
- const storagePath = `${connectionId}/${clockSupplyId}/${resolvedCode}.pdf`;
83
- const { error: upErr } = await supabase.storage
84
- .from(BUCKET)
85
- .upload(storagePath, bytes, {
86
- contentType: storedContentType,
87
- upsert: true,
83
+ const { storagePath } = await storeVersionedDocument(supabase, {
84
+ connectionId, kind: "auction-letter", documentId: `${clockSupplyId}:${resolvedCode}`,
85
+ bucket: BUCKET, basePath: `${connectionId}/${clockSupplyId}/${resolvedCode}`,
86
+ bytes, contentType: storedContentType,
88
87
  });
89
- if (upErr)
90
- throw new Error(`Storage upload: ${upErr.message}`);
91
88
  await supabase.from("floriday_auction_letters_cache").upsert({
92
89
  connection_id: connectionId,
93
90
  clock_supply_id: clockSupplyId,
@@ -0,0 +1,11 @@
1
+ /** Blijvende stilstand-melding voor de pagina Floriday koppeling. */
2
+ export declare const getFlorydayCronBaseStall: import("@tanstack/start-client-core").OptionalFetcher<readonly [import("@tanstack/start-client-core").FunctionMiddlewareAfterServer<{}, unknown, undefined, {
3
+ supabase: import("../integrations/supabase/auth-middleware.js").AuthedSupabaseClient;
4
+ userId: string;
5
+ claims: import("@supabase/auth-js").JwtPayload;
6
+ }, undefined, undefined, undefined>], undefined, Promise<{
7
+ stalled: boolean;
8
+ since: string | null;
9
+ message: string | null;
10
+ }>>;
11
+ //# sourceMappingURL=floriday-cron-status.functions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"floriday-cron-status.functions.d.ts","sourceRoot":"","sources":["../../src/lib/floriday-cron-status.functions.ts"],"names":[],"mappings":"AAGA,qEAAqE;AACrE,eAAO,MAAM,wBAAwB;;;;;;;;GAKjC,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { createServerFn } from "@tanstack/react-start";
2
+ import { requireSupabaseAuth } from "../integrations/supabase/auth-middleware.js";
3
+ /** Blijvende stilstand-melding voor de pagina Floriday koppeling. */
4
+ export const getFlorydayCronBaseStall = createServerFn({ method: "POST" })
5
+ .middleware([requireSupabaseAuth])
6
+ .handler(async () => {
7
+ const { readCronBaseStall } = await import("./floriday.functions.js");
8
+ return readCronBaseStall();
9
+ });
@@ -6,6 +6,8 @@ export interface FlorydayLogisticLabel {
6
6
  url: string;
7
7
  expiresAt: string;
8
8
  contentType: string;
9
+ bucket?: string;
10
+ storagePath?: string;
9
11
  }
10
12
  interface FetchOptions {
11
13
  fulfillmentOrderId: string;
@@ -1 +1 @@
1
- {"version":3,"file":"floriday-labels.functions.d.ts","sourceRoot":"","sources":["../../src/lib/floriday-labels.functions.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,EAKL,KAAK,mBAAmB,EACzB,MAAM,yBAAyB,CAAC;AASjC,MAAM,WAAW,qBAAqB;IACpC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,UAAU,YAAY;IACpB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,WAAW,CAAC,EAAE,mBAAmB,CAAC;CACnC;AAkGD,eAAO,MAAM,wBAAwB;;;;8CAEX,YAAY,kDAsClC,CAAC;AAEL;;;;;GAKG;AACH,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,cAAc,EACxB,KAAK,EAAE;IAAE,WAAW,EAAE,mBAAmB,CAAC;IAAC,kBAAkB,EAAE,MAAM,CAAC;IAAC,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GACzG,OAAO,CAAC,qBAAqB,CAAC,CA0BhC"}
1
+ {"version":3,"file":"floriday-labels.functions.d.ts","sourceRoot":"","sources":["../../src/lib/floriday-labels.functions.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,EAKL,KAAK,mBAAmB,EACzB,MAAM,yBAAyB,CAAC;AASjC,MAAM,WAAW,qBAAqB;IACpC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,UAAU,YAAY;IACpB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,WAAW,CAAC,EAAE,mBAAmB,CAAC;CACnC;AA+FD,eAAO,MAAM,wBAAwB;;;;8CAEX,YAAY,kDAsClC,CAAC;AAEL;;;;;GAKG;AACH,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,cAAc,EACxB,KAAK,EAAE;IAAE,WAAW,EAAE,mBAAmB,CAAC;IAAC,kBAAkB,EAAE,MAAM,CAAC;IAAC,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GACzG,OAAO,CAAC,qBAAqB,CAAC,CA4BhC"}
@@ -1,3 +1,4 @@
1
+ import { storeVersionedDocument } from "./document-version.js";
1
2
  // ============================================================================
2
3
  // Floriday logistic labels (veilingbrief PDF's) — lazy on-demand fetch
3
4
  // ----------------------------------------------------------------------------
@@ -63,15 +64,11 @@ async function ensureLabelInStorage(supabase, env, connectionId, fulfillmentOrde
63
64
  bytes = new Uint8Array(buf);
64
65
  storedContentType = contentType || "application/pdf";
65
66
  }
66
- const storagePath = `${connectionId}/${fulfillmentOrderId}/${resolvedCode}.pdf`;
67
- const { error: upErr } = await supabase.storage
68
- .from(BUCKET)
69
- .upload(storagePath, bytes, {
70
- contentType: storedContentType,
71
- upsert: true,
67
+ const { storagePath } = await storeVersionedDocument(supabase, {
68
+ connectionId, kind: "logistic-label", documentId: `${fulfillmentOrderId}:${resolvedCode}`,
69
+ bucket: BUCKET, basePath: `${connectionId}/${fulfillmentOrderId}/${resolvedCode}`,
70
+ bytes, contentType: storedContentType,
72
71
  });
73
- if (upErr)
74
- throw new Error(`Storage upload: ${upErr.message}`);
75
72
  await supabase.from("floriday_logistic_labels_cache").upsert({
76
73
  connection_id: connectionId,
77
74
  fulfillment_order_id: fulfillmentOrderId,
@@ -135,6 +132,8 @@ export async function resolveLogisticLabel(supabase, input) {
135
132
  return {
136
133
  fulfillmentOrderId: input.fulfillmentOrderId,
137
134
  logisticLabelCode: code,
135
+ bucket: BUCKET,
136
+ storagePath,
138
137
  url: signed.signedUrl,
139
138
  expiresAt: new Date(Date.now() + SIGNED_URL_TTL_S * 1000).toISOString(),
140
139
  contentType,
@@ -5,6 +5,8 @@ export interface FlorydayCustomerSticker {
5
5
  url: string;
6
6
  expiresAt: string;
7
7
  contentType: string;
8
+ bucket?: string;
9
+ storagePath?: string;
8
10
  }
9
11
  interface FetchOptions {
10
12
  stickerId: string;
@@ -1 +1 @@
1
- {"version":3,"file":"floriday-stickers.functions.d.ts","sourceRoot":"","sources":["../../src/lib/floriday-stickers.functions.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,EAKL,KAAK,mBAAmB,EACzB,MAAM,yBAAyB,CAAC;AAMjC,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,UAAU,YAAY;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,mBAAmB,CAAC;CACnC;AA8GD,eAAO,MAAM,0BAA0B;;;;8CAEb,YAAY,oDAoClC,CAAC;AAEL,mFAAmF;AACnF,wBAAsB,sBAAsB,CAC1C,QAAQ,EAAE,cAAc,EACxB,KAAK,EAAE;IAAE,WAAW,EAAE,mBAAmB,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAC7D,OAAO,CAAC,uBAAuB,CAAC,CAwBlC"}
1
+ {"version":3,"file":"floriday-stickers.functions.d.ts","sourceRoot":"","sources":["../../src/lib/floriday-stickers.functions.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,EAKL,KAAK,mBAAmB,EACzB,MAAM,yBAAyB,CAAC;AAMjC,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,UAAU,YAAY;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,mBAAmB,CAAC;CACnC;AA2GD,eAAO,MAAM,0BAA0B;;;;8CAEb,YAAY,oDAoClC,CAAC;AAEL,mFAAmF;AACnF,wBAAsB,sBAAsB,CAC1C,QAAQ,EAAE,cAAc,EACxB,KAAK,EAAE;IAAE,WAAW,EAAE,mBAAmB,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAC7D,OAAO,CAAC,uBAAuB,CAAC,CA0BlC"}
@@ -1,3 +1,4 @@
1
+ import { storeVersionedDocument } from "./document-version.js";
1
2
  // ============================================================================
2
3
  // Floriday customer stickers — lazy PDF fetch + storage cache
3
4
  // ----------------------------------------------------------------------------
@@ -80,15 +81,11 @@ async function fetchStickerToStorage(supabase, env, connectionId, stickerId) {
80
81
  bytes = new Uint8Array(buf);
81
82
  storedContentType = contentType || "application/pdf";
82
83
  }
83
- const storagePath = `${connectionId}/${stickerId}.pdf`;
84
- const { error: upErr } = await supabase.storage
85
- .from(BUCKET)
86
- .upload(storagePath, bytes, {
87
- contentType: storedContentType,
88
- upsert: true,
84
+ const { storagePath } = await storeVersionedDocument(supabase, {
85
+ connectionId, kind: "customer-sticker", documentId: stickerId,
86
+ bucket: BUCKET, basePath: `${connectionId}/${stickerId}`,
87
+ bytes, contentType: storedContentType,
89
88
  });
90
- if (upErr)
91
- throw new Error(`Storage upload: ${upErr.message}`);
92
89
  await supabase.from("floriday_customer_sticker_pdfs_cache").upsert({
93
90
  connection_id: connectionId,
94
91
  sticker_id: stickerId,
@@ -144,6 +141,8 @@ export async function resolveCustomerSticker(supabase, input) {
144
141
  }
145
142
  return {
146
143
  stickerId: input.stickerId,
144
+ bucket: BUCKET,
145
+ storagePath,
147
146
  url: signed.signedUrl,
148
147
  expiresAt: new Date(Date.now() + SIGNED_URL_TTL_S * 1000).toISOString(),
149
148
  contentType,