@flowselections/floriday-authenticatie-module 1.0.39 → 1.0.41

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 (54) hide show
  1. package/dist-lib/assets/floriday-logo.png.asset.json +11 -0
  2. package/dist-lib/components/TemplatePage.d.ts +1 -1
  3. package/dist-lib/components/TemplatePage.d.ts.map +1 -1
  4. package/dist-lib/components/floriday/FlorydayConnectionPage.d.ts +1 -1
  5. package/dist-lib/components/floriday/FlorydayConnectionPage.d.ts.map +1 -1
  6. package/dist-lib/components/floriday/FlorydaySyncHealthBanner.d.ts +1 -1
  7. package/dist-lib/components/floriday/FlorydaySyncHealthBanner.d.ts.map +1 -1
  8. package/dist-lib/components/floriday/FlorydaySyncJobsCard.d.ts +1 -1
  9. package/dist-lib/components/floriday/FlorydaySyncJobsCard.d.ts.map +1 -1
  10. package/dist-lib/components/floriday/TokenHealthCard.d.ts +1 -1
  11. package/dist-lib/components/floriday/TokenHealthCard.d.ts.map +1 -1
  12. package/dist-lib/components/settings/FloricodeSettingsCard.d.ts +1 -1
  13. package/dist-lib/components/settings/FloricodeSettingsCard.d.ts.map +1 -1
  14. package/dist-lib/components/settings/FlorydaySettingsCard.d.ts +1 -1
  15. package/dist-lib/components/settings/FlorydaySettingsCard.d.ts.map +1 -1
  16. package/dist-lib/integrations/supabase/auth-middleware.d.ts +374 -0
  17. package/dist-lib/integrations/supabase/auth-middleware.d.ts.map +1 -1
  18. package/dist-lib/integrations/supabase/client.d.ts +374 -0
  19. package/dist-lib/integrations/supabase/client.d.ts.map +1 -1
  20. package/dist-lib/integrations/supabase/client.server.d.ts +374 -0
  21. package/dist-lib/integrations/supabase/client.server.d.ts.map +1 -1
  22. package/dist-lib/integrations/supabase/types.d.ts +381 -0
  23. package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
  24. package/dist-lib/lib/cron/process-stock-queue.js +2 -2
  25. package/dist-lib/lib/error-page.js +30 -30
  26. package/dist-lib/lib/floricode.functions.d.ts +2618 -0
  27. package/dist-lib/lib/floricode.functions.d.ts.map +1 -1
  28. package/dist-lib/lib/floriday-auction-letters.functions.d.ts +374 -0
  29. package/dist-lib/lib/floriday-auction-letters.functions.d.ts.map +1 -1
  30. package/dist-lib/lib/floriday-auto-process.server.d.ts +2 -0
  31. package/dist-lib/lib/floriday-auto-process.server.d.ts.map +1 -1
  32. package/dist-lib/lib/floriday-auto-process.server.js +64 -33
  33. package/dist-lib/lib/floriday-labels.functions.d.ts +374 -0
  34. package/dist-lib/lib/floriday-labels.functions.d.ts.map +1 -1
  35. package/dist-lib/lib/floriday-public.functions.d.ts +2244 -0
  36. package/dist-lib/lib/floriday-public.functions.d.ts.map +1 -1
  37. package/dist-lib/lib/floriday-stickers.functions.d.ts +374 -0
  38. package/dist-lib/lib/floriday-stickers.functions.d.ts.map +1 -1
  39. package/dist-lib/lib/floriday-sync.functions.d.ts +11778 -184
  40. package/dist-lib/lib/floriday-sync.functions.d.ts.map +1 -1
  41. package/dist-lib/lib/floriday-writes.functions.d.ts +2250 -6
  42. package/dist-lib/lib/floriday-writes.functions.d.ts.map +1 -1
  43. package/dist-lib/lib/floriday.functions.d.ts +7201 -92
  44. package/dist-lib/lib/floriday.functions.d.ts.map +1 -1
  45. package/dist-lib/lib/floriday.functions.js +46 -3
  46. package/dist-lib/lib/gateway/fulfillment-order-body.d.ts +57 -0
  47. package/dist-lib/lib/gateway/fulfillment-order-body.d.ts.map +1 -0
  48. package/dist-lib/lib/gateway/fulfillment-order-body.js +350 -0
  49. package/dist-lib/lib/gateway/fulfillment-order-send.d.ts.map +1 -1
  50. package/dist-lib/lib/gateway/fulfillment-order-send.js +94 -67
  51. package/dist-lib/lib/gateway/index.d.ts +1 -0
  52. package/dist-lib/lib/gateway/index.d.ts.map +1 -1
  53. package/dist-lib/lib/gateway/index.js +1 -0
  54. package/package.json +1 -1
@@ -2,20 +2,7 @@
2
2
  // Spiegel van src/routes/api/public/gateway/fulfillment-order.send.ts.
3
3
  import { resolveGatewayEnvironment } from "./shared.js";
4
4
  import { florydayWrite, getActiveFlorydayCredentials } from "../floriday.functions.js";
5
- function extractPackageCount(req) {
6
- const candidates = [
7
- req?.numberOfPackages,
8
- req?.packageCount,
9
- req?.numberOfLoadCarriers,
10
- req?.quantity,
11
- ];
12
- for (const c of candidates) {
13
- const n = Number(c);
14
- if (Number.isFinite(n) && n > 0)
15
- return n;
16
- }
17
- return 1;
18
- }
5
+ import { buildFulfillmentOrderBody, detectFulfillmentState, } from "./fulfillment-order-body.js";
19
6
  export async function runFulfillmentOrderSend(supabase, body, caller) {
20
7
  const deliveryOrderId = String(body?.deliveryOrderId ?? "").trim();
21
8
  const explicitLoadCarrierItems = Array.isArray(body?.loadCarrierItems)
@@ -29,28 +16,53 @@ export async function runFulfillmentOrderSend(supabase, body, caller) {
29
16
  payload: { ok: false, error: `Geen actieve Floriday-koppeling voor ${env}` },
30
17
  };
31
18
  }
32
- // Idempotency: is er al een fulfillment-order voor deze delivery?
33
- if (deliveryOrderId) {
34
- const { data: existing } = await supabase
35
- .from("floriday_fulfillment_orders_cache")
36
- .select("floriday_id")
37
- .eq("connection_id", conn.id)
38
- .eq("delivery_order_id", deliveryOrderId)
39
- .maybeSingle();
40
- if (existing?.floriday_id) {
41
- return {
42
- status: 200,
43
- payload: {
44
- ok: true,
45
- skipped: true,
46
- fulfillmentOrderId: existing.floriday_id,
47
- },
48
- };
49
- }
19
+ const fulfillmentRequestIds = Array.isArray(body?.fulfillmentRequestIds)
20
+ ? body.fulfillmentRequestIds.map((s) => String(s))
21
+ : null;
22
+ // Detectie "al afgehandeld" — één functie, twee bronnen, één uitkomst.
23
+ // Deze check geldt voor BEIDE paden: ook een caller die zelf
24
+ // `loadCarrierItems` meestuurt (passthrough) komt hier langs, zodat er langs
25
+ // geen enkel pad een dubbele fulfillment-order bij Floriday kan ontstaan.
26
+ const detection = await detectFulfillmentState(supabase, {
27
+ connectionId: conn.id,
28
+ deliveryOrderId,
29
+ fulfillmentRequestIds,
30
+ });
31
+ if (detection.code === "already_fulfilled") {
32
+ return {
33
+ status: 200,
34
+ payload: {
35
+ ok: true,
36
+ code: "already_fulfilled",
37
+ // `skipped` blijft staan als alias van het codeveld.
38
+ skipped: true,
39
+ source: detection.source,
40
+ reason: detection.message,
41
+ fulfillmentOrderId: detection.fulfillmentOrderId,
42
+ skippedRequests: detection.skipped,
43
+ },
44
+ };
50
45
  }
51
- // Body opbouwen — hetzij passthrough, hetzij vanuit cache.
52
- let loadCarrierItems = explicitLoadCarrierItems;
53
- if (!loadCarrierItems) {
46
+ if (detection.code === "delivery_order_not_cached") {
47
+ // Niet stilzwijgend versturen: zonder cache kan de claim-check niet worden
48
+ // uitgevoerd, ook niet op het passthrough-pad.
49
+ return {
50
+ status: 409,
51
+ payload: {
52
+ ok: false,
53
+ code: "delivery_order_not_cached",
54
+ error: detection.message,
55
+ },
56
+ };
57
+ }
58
+ // Body opbouwen — hetzij passthrough (caller geeft zelf loadCarrierItems),
59
+ // hetzij via de gedeelde bodybouwer vanuit de cache.
60
+ let writeBody;
61
+ let skipped = [];
62
+ if (explicitLoadCarrierItems) {
63
+ writeBody = { loadCarrierItems: explicitLoadCarrierItems };
64
+ }
65
+ else {
54
66
  const { data: doRow } = await supabase
55
67
  .from("floriday_delivery_orders_cache")
56
68
  .select("floriday_id, data")
@@ -59,49 +71,49 @@ export async function runFulfillmentOrderSend(supabase, body, caller) {
59
71
  .maybeSingle();
60
72
  if (!doRow) {
61
73
  return {
62
- status: 404,
63
- payload: { ok: false, error: "Delivery-order niet in cache — sync eerst" },
74
+ status: 409,
75
+ payload: {
76
+ ok: false,
77
+ code: "delivery_order_not_cached",
78
+ error: "Delivery-order niet in cache — sync eerst",
79
+ },
64
80
  };
65
81
  }
66
- const allRequests = Array.isArray(doRow.data?.fulfillmentRequests)
67
- ? doRow.data.fulfillmentRequests
68
- : [];
69
- const filterIds = Array.isArray(body?.fulfillmentRequestIds)
70
- ? body.fulfillmentRequestIds.map((s) => String(s))
71
- : null;
72
- const requests = allRequests
73
- .filter((r) => {
74
- const id = r?.fulfillmentRequestId ?? r?.id;
75
- return !filterIds || filterIds.includes(String(id));
76
- })
77
- .map((r) => {
78
- const id = r?.fulfillmentRequestId ?? r?.id;
79
- if (!id)
80
- return null;
82
+ const built = await buildFulfillmentOrderBody(supabase, {
83
+ connectionId: conn.id,
84
+ deliveryOrderId,
85
+ deliveryOrderData: doRow.data,
86
+ fulfillmentRequestIds,
87
+ });
88
+ if (built.kind === "already_fulfilled") {
81
89
  return {
82
- deliveryOrderId,
83
- fulfillmentRequestId: id,
84
- numberOfPackages: extractPackageCount(r),
85
- };
86
- })
87
- .filter(Boolean);
88
- if (requests.length === 0) {
89
- return {
90
- status: 400,
90
+ status: 200,
91
91
  payload: {
92
- ok: false,
93
- error: "Geen fulfillmentRequests gevonden in delivery-order",
92
+ ok: true,
93
+ code: "already_fulfilled",
94
+ skipped: true,
95
+ source: built.source,
96
+ reason: built.message,
97
+ fulfillmentOrderId: built.fulfillmentOrderId,
98
+ skippedRequests: built.skipped,
94
99
  },
95
100
  };
96
101
  }
97
- loadCarrierItems = [{ fulfillmentRequests: requests }];
102
+ if (built.kind === "error") {
103
+ return {
104
+ status: built.permanent ? 400 : 409,
105
+ payload: { ok: false, error: built.error },
106
+ };
107
+ }
108
+ writeBody = built.body;
109
+ skipped = built.skipped;
98
110
  }
99
111
  const result = await florydayWrite(supabase, env, {
100
112
  module: "auto-process",
101
113
  action: "send-fulfillment-order",
102
114
  method: "POST",
103
115
  path: "/fulfillment-orders",
104
- body: { loadCarrierItems },
116
+ body: writeBody,
105
117
  referenceId: deliveryOrderId || "batch",
106
118
  idempotencyKey: deliveryOrderId
107
119
  ? `do:${deliveryOrderId}:fulfillment-order`
@@ -111,11 +123,26 @@ export async function runFulfillmentOrderSend(supabase, body, caller) {
111
123
  const fulfillmentOrderId = result.data?.fulfillmentOrderId ??
112
124
  result.data?.id ??
113
125
  result.data?.floridayId;
126
+ if (result.ok) {
127
+ // Geen `error` in een ok:true-payload.
128
+ return {
129
+ status: 200,
130
+ payload: {
131
+ ok: true,
132
+ code: "created",
133
+ skipped: false,
134
+ skippedRequests: skipped,
135
+ fulfillmentOrderId,
136
+ },
137
+ };
138
+ }
114
139
  return {
115
- status: result.ok ? 200 : 502,
140
+ status: 502,
116
141
  payload: {
117
- ok: result.ok,
142
+ ok: false,
143
+ code: "write_failed",
118
144
  skipped: false,
145
+ skippedRequests: skipped,
119
146
  fulfillmentOrderId,
120
147
  error: result.error,
121
148
  },
@@ -18,4 +18,5 @@ export * from "./supply-line.js";
18
18
  export * from "./auto-process.js";
19
19
  export * from "./cron-scan.js";
20
20
  export * from "./documents.js";
21
+ export * from "./fulfillment-order-body.js";
21
22
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/gateway/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC;AAC3B,cAAc,6BAA6B,CAAC;AAC5C,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/gateway/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC;AAC3B,cAAc,6BAA6B,CAAC;AAC5C,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,6BAA6B,CAAC"}
@@ -18,3 +18,4 @@ export * from "./supply-line.js";
18
18
  export * from "./auto-process.js";
19
19
  export * from "./cron-scan.js";
20
20
  export * from "./documents.js";
21
+ export * from "./fulfillment-order-body.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flowselections/floriday-authenticatie-module",
3
- "version": "1.0.39",
3
+ "version": "1.0.41",
4
4
  "sideEffects": false,
5
5
  "type": "module",
6
6
  "main": "./dist-lib/index.js",