@flowselections/floriday-authenticatie-module 1.0.58 → 1.0.65
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/integrations/supabase/types.d.ts +537 -3
- package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
- package/dist-lib/lib/base-supply-decision.d.ts +52 -0
- package/dist-lib/lib/base-supply-decision.d.ts.map +1 -0
- package/dist-lib/lib/base-supply-decision.js +76 -0
- package/dist-lib/lib/cron/process-stock-queue.d.ts +14 -3
- package/dist-lib/lib/cron/process-stock-queue.d.ts.map +1 -1
- package/dist-lib/lib/cron/process-stock-queue.js +35 -39
- package/dist-lib/lib/floriday-auto-process.server.d.ts.map +1 -1
- package/dist-lib/lib/floriday-auto-process.server.js +12 -64
- package/dist-lib/lib/floriday-cart-approval.server.d.ts.map +1 -1
- package/dist-lib/lib/floriday-cart-approval.server.js +30 -16
- package/dist-lib/lib/floriday-order-stage.d.ts +31 -0
- package/dist-lib/lib/floriday-order-stage.d.ts.map +1 -0
- package/dist-lib/lib/floriday-order-stage.js +77 -0
- package/dist-lib/lib/floriday-sync.functions.d.ts +15 -0
- package/dist-lib/lib/floriday-sync.functions.d.ts.map +1 -1
- package/dist-lib/lib/floriday-sync.functions.js +124 -1
- package/dist-lib/lib/floriday.functions.d.ts +0 -8
- package/dist-lib/lib/floriday.functions.d.ts.map +1 -1
- package/dist-lib/lib/floriday.functions.js +61 -45
- package/dist-lib/lib/gateway/fulfillment-order-body.d.ts +2 -0
- package/dist-lib/lib/gateway/fulfillment-order-body.d.ts.map +1 -1
- package/dist-lib/lib/gateway/fulfillment-order-body.js +6 -1
- package/dist-lib/lib/gateway/fulfillment-order-send.d.ts.map +1 -1
- package/dist-lib/lib/gateway/fulfillment-order-send.js +57 -4
- package/dist-lib/lib/gateway/fulfillment-order-status.d.ts +10 -0
- package/dist-lib/lib/gateway/fulfillment-order-status.d.ts.map +1 -1
- package/dist-lib/lib/gateway/fulfillment-order-status.js +107 -1
- package/dist-lib/lib/gateway/supply-line.d.ts.map +1 -1
- package/dist-lib/lib/gateway/supply-line.js +140 -63
- package/dist-lib/lib/gateway/webhook-subscribe.d.ts.map +1 -1
- package/dist-lib/lib/gateway/webhook-subscribe.js +24 -4
- package/dist-lib/lib/gateway/webhook.d.ts +6 -0
- package/dist-lib/lib/gateway/webhook.d.ts.map +1 -1
- package/dist-lib/lib/gateway/webhook.js +9 -0
- package/dist-lib/lib/shell-base.d.ts +14 -0
- package/dist-lib/lib/shell-base.d.ts.map +1 -1
- package/dist-lib/lib/shell-base.js +17 -0
- package/dist-lib/lib/shell-routes.d.ts +1 -1
- package/dist-lib/lib/shell-routes.d.ts.map +1 -1
- package/dist-lib/lib/shell-routes.js +1 -0
- package/package.json +9 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"floriday-sync.functions.d.ts","sourceRoot":"","sources":["../../src/lib/floriday-sync.functions.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAS5D,OAAO,EAOL,KAAK,mBAAmB,EACzB,MAAM,yBAAyB,CAAC;AAkDjC,MAAM,MAAM,gBAAgB,GACxB,aAAa,GACb,cAAc,GACd,wBAAwB,GACxB,UAAU,GACV,oBAAoB,GACpB,mBAAmB,GACnB,YAAY,GACZ,UAAU,GACV,oBAAoB,GACpB,gBAAgB,GAChB,iBAAiB,GACjB,gBAAgB,GAChB,WAAW,GACX,gBAAgB,GAEhB,qBAAqB,GACrB,0BAA0B,GAC1B,aAAa,GACb,cAAc,GACd,gBAAgB,GAEhB,yBAAyB,GACzB,kBAAkB,GAClB,YAAY,GACZ,4BAA4B,GAE5B,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"floriday-sync.functions.d.ts","sourceRoot":"","sources":["../../src/lib/floriday-sync.functions.ts"],"names":[],"mappings":"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"}
|
|
@@ -46,6 +46,108 @@ async function upsertInChunks(supabase, table, rows, onConflict, label, chunkSiz
|
|
|
46
46
|
}
|
|
47
47
|
}
|
|
48
48
|
const now = () => new Date().toISOString();
|
|
49
|
+
// floriday_network_cache wordt gelezen door Klanten → Netwerk. Rijen op
|
|
50
|
+
// (connection_id, organization_id); alleen CUSTOMER en AGENT; data bevat het
|
|
51
|
+
// volledige Floriday-object (organizationType, endDate, isDeleted).
|
|
52
|
+
export function toNetworkRow(item, connectionId) {
|
|
53
|
+
const t = item?.organizationType ?? item?.type ?? null;
|
|
54
|
+
if (t !== "CUSTOMER" && t !== "AGENT")
|
|
55
|
+
return null;
|
|
56
|
+
const oid = item?.organizationId ?? item?.id ?? null;
|
|
57
|
+
if (!oid)
|
|
58
|
+
return null;
|
|
59
|
+
const phys = item?.physicalAddress ?? {};
|
|
60
|
+
const mail = item?.mailingAddress ?? {};
|
|
61
|
+
return {
|
|
62
|
+
connection_id: connectionId,
|
|
63
|
+
organization_id: String(oid),
|
|
64
|
+
organization_name: item?.name ?? item?.commercialName ?? null,
|
|
65
|
+
gln: item?.companyGln ?? item?.gln ?? null,
|
|
66
|
+
country: phys?.countryCode ?? mail?.countryCode ?? null,
|
|
67
|
+
city: phys?.city ?? mail?.city ?? null,
|
|
68
|
+
// Klanten-module leest o.a. organizationType, endDate, name, commercialName,
|
|
69
|
+
// companyGln, physicalAddress, mailingAddress, logoUrl en website uit data.
|
|
70
|
+
data: {
|
|
71
|
+
...item,
|
|
72
|
+
organizationType: t,
|
|
73
|
+
endDate: item?.endDate ?? null,
|
|
74
|
+
name: item?.name ?? null,
|
|
75
|
+
commercialName: item?.commercialName ?? null,
|
|
76
|
+
companyGln: item?.companyGln ?? null,
|
|
77
|
+
physicalAddress: item?.physicalAddress ?? null,
|
|
78
|
+
mailingAddress: item?.mailingAddress ?? null,
|
|
79
|
+
logoUrl: item?.logoUrl ?? null,
|
|
80
|
+
website: item?.website ?? null,
|
|
81
|
+
},
|
|
82
|
+
fetched_at: new Date().toISOString(),
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
async function upsertNetworkRows(supabase, connectionId, items) {
|
|
86
|
+
const rows = items.map((i) => toNetworkRow(i, connectionId)).filter(Boolean);
|
|
87
|
+
if (rows.length === 0)
|
|
88
|
+
return;
|
|
89
|
+
await upsertInChunks(supabase, "floriday_network_cache", rows, "connection_id,organization_id", "network");
|
|
90
|
+
}
|
|
91
|
+
// Kopers die op een order staan maar nog niet in het netwerk staan, aanvullen
|
|
92
|
+
// vanuit de klantcache — uitsluitend op organisatie-id, nooit op naam.
|
|
93
|
+
// Bestaande netwerkrijen blijven ongemoeid.
|
|
94
|
+
export async function ensureBuyersInNetwork(supabase, connectionId, buyerIds) {
|
|
95
|
+
const ids = Array.from(new Set(buyerIds.filter(Boolean).map(String)));
|
|
96
|
+
if (ids.length === 0)
|
|
97
|
+
return 0;
|
|
98
|
+
const { data: present } = await supabase.from("floriday_network_cache")
|
|
99
|
+
.select("organization_id").eq("connection_id", connectionId).in("organization_id", ids);
|
|
100
|
+
const have = new Set((present ?? []).map((r) => String(r.organization_id)));
|
|
101
|
+
const missing = ids.filter((id) => !have.has(id));
|
|
102
|
+
if (missing.length === 0)
|
|
103
|
+
return 0;
|
|
104
|
+
const { data: customers } = await supabase.from("floriday_customers_cache")
|
|
105
|
+
.select("organization_id, data").in("organization_id", missing);
|
|
106
|
+
const rows = (customers ?? []).map((c) => toNetworkRow({ ...(c.data ?? {}), organizationId: c.organization_id, organizationType: c.data?.organizationType ?? "CUSTOMER" }, connectionId)).filter(Boolean);
|
|
107
|
+
if (rows.length === 0)
|
|
108
|
+
return 0;
|
|
109
|
+
const { error } = await supabase.from("floriday_network_cache")
|
|
110
|
+
.upsert(rows, { onConflict: "connection_id,organization_id", ignoreDuplicates: true });
|
|
111
|
+
if (error)
|
|
112
|
+
throw error;
|
|
113
|
+
return rows.length;
|
|
114
|
+
}
|
|
115
|
+
// Eenmalige aanvulling: de sequence-cursor van customer-organizations staat al
|
|
116
|
+
// voorbij de bestaande organisaties, dus kopiëren we die per portie uit
|
|
117
|
+
// floriday_customers_cache (zelfde Floriday-objecten) tot het netwerk gevuld is.
|
|
118
|
+
export async function backfillNetworkFromCustomersCache(supabase, connectionId, deadlineMs) {
|
|
119
|
+
const { count } = await supabase
|
|
120
|
+
.from("floriday_network_cache").select("organization_id", { count: "exact", head: true })
|
|
121
|
+
.eq("connection_id", connectionId);
|
|
122
|
+
const { data: st } = await supabase.from("floriday_network_sync_state")
|
|
123
|
+
.select("last_sequence_number").eq("connection_id", connectionId).maybeSingle();
|
|
124
|
+
if ((count ?? 0) > 0 && st?.last_sequence_number === -1)
|
|
125
|
+
return { copied: 0, done: true };
|
|
126
|
+
let from = Number(st?.last_sequence_number ?? 0);
|
|
127
|
+
if (from < 0)
|
|
128
|
+
from = 0;
|
|
129
|
+
let copied = 0;
|
|
130
|
+
while (Date.now() < deadlineMs) {
|
|
131
|
+
const { data, error } = await supabase.from("floriday_customers_cache")
|
|
132
|
+
.select("data, sequence_number").gt("sequence_number", from)
|
|
133
|
+
.order("sequence_number", { ascending: true }).limit(500);
|
|
134
|
+
if (error)
|
|
135
|
+
throw new Error(error.message);
|
|
136
|
+
if (!data?.length) {
|
|
137
|
+
await supabase.from("floriday_network_sync_state").upsert({
|
|
138
|
+
connection_id: connectionId, last_sequence_number: -1, last_synced_at: now(), last_error: null, updated_at: now(),
|
|
139
|
+
}, { onConflict: "connection_id" });
|
|
140
|
+
return { copied, done: true };
|
|
141
|
+
}
|
|
142
|
+
await upsertNetworkRows(supabase, connectionId, data.map((r) => r.data));
|
|
143
|
+
copied += data.length;
|
|
144
|
+
from = Number(data[data.length - 1].sequence_number);
|
|
145
|
+
await supabase.from("floriday_network_sync_state").upsert({
|
|
146
|
+
connection_id: connectionId, last_sequence_number: from, last_synced_at: now(), updated_at: now(),
|
|
147
|
+
}, { onConflict: "connection_id" });
|
|
148
|
+
}
|
|
149
|
+
return { copied, done: false };
|
|
150
|
+
}
|
|
49
151
|
const RESOURCE_CONFIG = {
|
|
50
152
|
"trade-items": {
|
|
51
153
|
kind: "sequence",
|
|
@@ -87,7 +189,8 @@ const RESOURCE_CONFIG = {
|
|
|
87
189
|
return {
|
|
88
190
|
connection_id: connectionId,
|
|
89
191
|
floriday_id: String(fid),
|
|
90
|
-
|
|
192
|
+
// Swagger 2026v1: de koper heet customerOrganizationId.
|
|
193
|
+
buyer_organization_id: item?.customerOrganizationId ?? item?.buyerOrganizationId ?? null,
|
|
91
194
|
status: item?.status ?? null,
|
|
92
195
|
is_deleted: Boolean(item?.isDeleted),
|
|
93
196
|
sequence_number: Number(item?.sequenceNumber ?? 0),
|
|
@@ -99,6 +202,12 @@ const RESOURCE_CONFIG = {
|
|
|
99
202
|
if (rows.length === 0)
|
|
100
203
|
return;
|
|
101
204
|
await upsertInChunks(supabase, "floriday_salesorders_cache", rows, "connection_id,floriday_id", "sales-orders");
|
|
205
|
+
try {
|
|
206
|
+
await ensureBuyersInNetwork(supabase, connectionId, rows.map((r) => r.buyer_organization_id));
|
|
207
|
+
}
|
|
208
|
+
catch (e) {
|
|
209
|
+
console.warn("[sales-orders] kopers aanvullen in netwerk mislukt:", e?.message ?? e);
|
|
210
|
+
}
|
|
102
211
|
},
|
|
103
212
|
},
|
|
104
213
|
"customer-organizations": {
|
|
@@ -110,6 +219,9 @@ const RESOURCE_CONFIG = {
|
|
|
110
219
|
maxSequenceEndpoint: `/${SUPPLIERS_API_VERSION}/organizations/current-max-sequence`,
|
|
111
220
|
bySequenceEndpointBase: `/${SUPPLIERS_API_VERSION}/organizations/sync`,
|
|
112
221
|
upsert: async (supabase, connectionId, items) => {
|
|
222
|
+
// Netwerk (Klanten → Netwerk) uit dezelfde feed: CUSTOMER + AGENT, op
|
|
223
|
+
// organisatie-id; endDate/isDeleted blijven in data voor de verloop-logica.
|
|
224
|
+
await upsertNetworkRows(supabase, connectionId, items);
|
|
113
225
|
const rows = items
|
|
114
226
|
.map((item) => {
|
|
115
227
|
const orgType = item?.organizationType ?? item?.type ?? null;
|
|
@@ -611,6 +723,17 @@ export async function runFloridayResourceSync(supabase, env, resource) {
|
|
|
611
723
|
},
|
|
612
724
|
});
|
|
613
725
|
if (resource === "customer-organizations") {
|
|
726
|
+
// Netwerk: eenmalige, hervatbare aanvulling uit de klantcache (max 15s per ronde).
|
|
727
|
+
try {
|
|
728
|
+
const nb = await backfillNetworkFromCustomersCache(supabase, row.id, Date.now() + 15000);
|
|
729
|
+
console.log(`[network] ${env}: ${nb.copied} gekopieerd, klaar=${nb.done}`);
|
|
730
|
+
}
|
|
731
|
+
catch (e) {
|
|
732
|
+
console.warn(`[network] aanvulling mislukt: ${String(e?.message ?? e)}`);
|
|
733
|
+
await supabase.from("floriday_network_sync_state").upsert({
|
|
734
|
+
connection_id: row.id, last_error: String(e?.message ?? e).slice(0, 500), updated_at: now(),
|
|
735
|
+
}, { onConflict: "connection_id" });
|
|
736
|
+
}
|
|
614
737
|
// Handelsinstellingen meeliften: gewijzigde + ontbrekende eigen kopers.
|
|
615
738
|
try {
|
|
616
739
|
const { syncCustomerTradeSettings, TRADE_SETTINGS_ROUND_BUDGET_MS } = await import("./floriday-trade-settings.server.js");
|
|
@@ -198,14 +198,6 @@ export declare function resolveFlorydayCronBaseUrlAsync(): Promise<string>;
|
|
|
198
198
|
export declare function checkShellServesCronRoute(base: string, path: string): Promise<string | null>;
|
|
199
199
|
/** Bepaalt de cron-URL en weigert (met duidelijke fout) als de Shell de route niet bedient. */
|
|
200
200
|
export declare function resolveVerifiedFlorydayCronUrl(path: string): Promise<string>;
|
|
201
|
-
/**
|
|
202
|
-
* Zelfherstel: brengt de database-kant in lijn met de shell-host uit Central
|
|
203
|
-
* Auth. Nodig omdat `run_floriday_stock_queue_process()` een SQL-functie is
|
|
204
|
-
* die door pg_cron wordt aangeroepen; die kan het tenant-secret van Central
|
|
205
|
-
* Auth niet gebruiken en leest daarom een waarde uit `module_runtime_config`.
|
|
206
|
-
* Deze functie schrijft die waarde bij elke cron-ronde opnieuw, zodat hij
|
|
207
|
-
* meebeweegt met de omgeving en nooit handmatig gezet hoeft te worden.
|
|
208
|
-
*/
|
|
209
201
|
export declare function syncShellHostRuntimeConfig(): Promise<{
|
|
210
202
|
base: string | null;
|
|
211
203
|
changed: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"floriday.functions.d.ts","sourceRoot":"","sources":["../../src/lib/floriday.functions.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAc5D,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,MAAM,CAAC;AAErD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAuE,KAAK,WAAW,EAAE,KAAK,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AAElK,MAAM,WAAW,wBAAwB;IACvC,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,mBAAmB,CAAC;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;IACnB,0EAA0E;IAC1E,eAAe,EAAE,OAAO,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,sBAAsB,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,wBAAwB,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAkBD,eAAO,MAAM,qBAAqB,yBAAyB,CAAC;AAmD5D,wBAAsB,4BAA4B,CAChD,QAAQ,EAAE,cAAc,EACxB,GAAG,EAAE,mBAAmB;;;;;;;;;;;;;;UAWzB;AASD,wBAAsB,sBAAsB,CAC1C,QAAQ,EAAE,cAAc,EACxB,GAAG,EAAE,mBAAmB,EACxB,OAAO,GAAE;IAAE,YAAY,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAO,GACvD,OAAO,CAAC,MAAM,CAAC,CAyDjB;AAkND,+DAA+D;AAC/D,wBAAsB,0BAA0B,CAC9C,KAAK,EAAE,cAAc,EACrB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,SAAS,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAAC,CAAC,CAiBnJ;AAED;;;;GAIG;AACH,wBAAsB,0BAA0B,CAC9C,KAAK,EAAE,cAAc,EACrB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,0BAA0B,CAAC,CAqBrC;AAED,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,OAAO,CAAC;IACnB,GAAG,EAAE,WAAW,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,0BAA0B,GAAG,IAAI,CAAC;IAC7C,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,sBAAsB,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,aAAa,EAAE,iBAAiB,EAAE,CAAC;CACpC;AAED,eAAO,MAAM,0BAA0B;;;;8CAEb;IAAE,WAAW,EAAE,mBAAmB,CAAA;CAAE;iBAArB,mBAAmB;oCAuCxD,CAAC;AAEL,wBAAsB,4BAA4B,CAChD,QAAQ,EAAE,cAAc,GACvB,OAAO,CAAC,mBAAmB,CAAC,CAQ9B;AAED,wBAAsB,aAAa,CACjC,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAE,MAAM,GAAG,mBAAmB,EACvC,UAAU,CAAC,EAAE,MAAM,GAAG,WAAW,EACjC,SAAS,GAAE,WAAgB,GAC1B,OAAO,CAAC,QAAQ,CAAC,CA8InB;AAKD,eAAO,MAAM,uBAAuB;;;;qFAUhC,CAAC;AAEL,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;YAoBvB,OAAO;mBAAa,GAAG,EAAE;iBAAW,MAAM;gBAAU,MAAM;;;;GAqBlE,CAAC;AAEL,eAAO,MAAM,yBAAyB;;;;8CAEZ;IAAE,WAAW,EAAE,mBAAmB,CAAA;CAAE;iBAArB,mBAAmB;;;;GAkBxD,CAAC;AAGL;;;;GAIG;AACH,eAAO,MAAM,wBAAwB;;;;8CAEX;IACtB,WAAW,EAAE,mBAAmB,CAAC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;iBAHc,mBAAmB;YACxB,MAAM;aACL,MAAM;qCA0Jf,CAAC;AAEL,eAAO,MAAM,wBAAwB;;;;8CAEX;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE;QAAR,MAAM;;;GAYlC,CAAC;AAEL,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,OAAO,GAAG,SAAS,GAAG,UAAU,CAAC;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,sBAAsB;;;;8CAET;IAAE,WAAW,EAAE,mBAAmB,CAAA;CAAE;iBAArB,mBAAmB;;;;;;;;GAsFxD,CAAC;AAoDL,wBAAgB,0BAA0B,IAAI,MAAM,CAWnD;AAED;;;;;GAKG;AACH,wBAAsB,+BAA+B,IAAI,OAAO,CAAC,MAAM,CAAC,CASvE;AAKD;;;;;GAKG;AACH,wBAAsB,yBAAyB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAuBlG;AAED,+FAA+F;AAC/F,wBAAsB,8BAA8B,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAKlF;
|
|
1
|
+
{"version":3,"file":"floriday.functions.d.ts","sourceRoot":"","sources":["../../src/lib/floriday.functions.ts"],"names":[],"mappings":"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"}
|
|
@@ -999,25 +999,48 @@ export async function resolveVerifiedFlorydayCronUrl(path) {
|
|
|
999
999
|
* Deze functie schrijft die waarde bij elke cron-ronde opnieuw, zodat hij
|
|
1000
1000
|
* meebeweegt met de omgeving en nooit handmatig gezet hoeft te worden.
|
|
1001
1001
|
*/
|
|
1002
|
+
const shellSkipLogged = new Map();
|
|
1003
|
+
async function reportShellHostSkip(reason) {
|
|
1004
|
+
console.warn(`[floriday] shell-host niet geschreven: ${reason}`);
|
|
1005
|
+
const now = Date.now();
|
|
1006
|
+
if ((shellSkipLogged.get(reason) ?? 0) > now - 60 * 60 * 1000)
|
|
1007
|
+
return;
|
|
1008
|
+
shellSkipLogged.set(reason, now);
|
|
1009
|
+
try {
|
|
1010
|
+
const { supabaseAdmin } = await import("../integrations/supabase/client.server.js");
|
|
1011
|
+
const db = supabaseAdmin;
|
|
1012
|
+
const since = new Date(now - 60 * 60 * 1000).toISOString();
|
|
1013
|
+
const { data: recent } = await db.from("floriday_write_log").select("id")
|
|
1014
|
+
.eq("action", "shell-host-skipped").eq("error", reason).gte("created_at", since).limit(1);
|
|
1015
|
+
if (recent && recent.length)
|
|
1016
|
+
return;
|
|
1017
|
+
await db.from("floriday_write_log").insert({
|
|
1018
|
+
connection_id: null, module: "floriday-authenticatie", action: "shell-host-skipped",
|
|
1019
|
+
resource: "module_runtime_config", floriday_id: null, request: null, response: null,
|
|
1020
|
+
http_status: 0, ok: false, error: reason, idempotency_key: null, caller: "shell-host-sync",
|
|
1021
|
+
});
|
|
1022
|
+
}
|
|
1023
|
+
catch { /* melden is best-effort */ }
|
|
1024
|
+
}
|
|
1002
1025
|
export async function syncShellHostRuntimeConfig() {
|
|
1003
|
-
|
|
1026
|
+
// Geen project/env-fallback: alleen de actieve tenant-host uit Central Auth.
|
|
1027
|
+
let raw = null;
|
|
1004
1028
|
try {
|
|
1005
|
-
// Geen project/env-fallback: alleen de actieve tenant-host uit Central
|
|
1006
|
-
// Auth mag deze waarden bepalen.
|
|
1007
1029
|
const { getShellHostFromCentral } = await import("./central-auth.server.js");
|
|
1008
|
-
|
|
1009
|
-
const raw = await getShellHostFromCentral();
|
|
1010
|
-
if (!raw)
|
|
1011
|
-
return { base: null, changed: false, skipped: "Central Auth gaf geen shell-host" };
|
|
1012
|
-
base = normalizeShellBase(raw);
|
|
1013
|
-
if (!base) {
|
|
1014
|
-
console.warn(`[floriday] shell-host uit Central Auth afgewezen (ongeldig): ${String(raw).slice(0, 120)}`);
|
|
1015
|
-
return { base: null, changed: false, skipped: "ongeldige shell-host" };
|
|
1016
|
-
}
|
|
1030
|
+
raw = await getShellHostFromCentral();
|
|
1017
1031
|
}
|
|
1018
1032
|
catch {
|
|
1033
|
+
await reportShellHostSkip("Central Auth niet bereikbaar");
|
|
1019
1034
|
return { base: null, changed: false, skipped: "Central Auth niet bereikbaar" };
|
|
1020
1035
|
}
|
|
1036
|
+
const { decideShellBaseWrites, normalizeShellBase } = await import("./shell-base.js");
|
|
1037
|
+
const pre = decideShellBaseWrites(raw, {}, false);
|
|
1038
|
+
if (!pre.ok) {
|
|
1039
|
+
await reportShellHostSkip(pre.reason === "ongeldige shell-host"
|
|
1040
|
+
? `ongeldige shell-host uit Central Auth: ${String(raw).slice(0, 120)}` : pre.reason);
|
|
1041
|
+
return { base: null, changed: false, skipped: pre.reason };
|
|
1042
|
+
}
|
|
1043
|
+
const base = normalizeShellBase(raw);
|
|
1021
1044
|
try {
|
|
1022
1045
|
const { supabaseAdmin } = await import("../integrations/supabase/client.server.js");
|
|
1023
1046
|
const db = supabaseAdmin;
|
|
@@ -1026,48 +1049,41 @@ export async function syncShellHostRuntimeConfig() {
|
|
|
1026
1049
|
.select("key, value")
|
|
1027
1050
|
.in("key", ["stock_queue_processor_base_url", "shell_base_url"]);
|
|
1028
1051
|
const cur = new Map((rows ?? []).map((r) => [r.key, r.value]));
|
|
1029
|
-
const
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
const
|
|
1035
|
-
if (
|
|
1036
|
-
|
|
1037
|
-
return { base, changed: false, skipped: pingErr };
|
|
1038
|
-
}
|
|
1052
|
+
const current = { shell: cur.get("shell_base_url") ?? null, stock: cur.get("stock_queue_processor_base_url") ?? null };
|
|
1053
|
+
// Ping alleen nodig voor de verwerker-sleutel.
|
|
1054
|
+
let pingErr = null;
|
|
1055
|
+
if (current.stock !== base)
|
|
1056
|
+
pingErr = await checkShellServesCronRoute(base, "/api/public/cron/ping");
|
|
1057
|
+
const d = decideShellBaseWrites(raw, current, !pingErr);
|
|
1058
|
+
if (!d.ok)
|
|
1059
|
+
return { base: null, changed: false, skipped: d.reason };
|
|
1039
1060
|
const now = new Date().toISOString();
|
|
1040
|
-
|
|
1041
|
-
|
|
1042
|
-
|
|
1043
|
-
if (previous) {
|
|
1044
|
-
await db.from("module_runtime_config").upsert({ key: "shell_base_url_previous", value: previous, updated_at: now }, { onConflict: "key" });
|
|
1061
|
+
if (d.writeShell) {
|
|
1062
|
+
if (d.previous) {
|
|
1063
|
+
await db.from("module_runtime_config").upsert({ key: "shell_base_url_previous", value: d.previous, updated_at: now }, { onConflict: "key" });
|
|
1045
1064
|
}
|
|
1046
|
-
await db.from("module_runtime_config").upsert({ key: "shell_base_url", value: base, updated_at: now }, { onConflict: "key" });
|
|
1047
|
-
|
|
1065
|
+
const { error } = await db.from("module_runtime_config").upsert({ key: "shell_base_url", value: base, updated_at: now }, { onConflict: "key" });
|
|
1066
|
+
if (error)
|
|
1067
|
+
throw new Error(error.message);
|
|
1048
1068
|
await db.from("floriday_write_log").insert({
|
|
1049
|
-
connection_id: null,
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
|
|
1055
|
-
response: null,
|
|
1056
|
-
http_status: 0,
|
|
1057
|
-
ok: true,
|
|
1058
|
-
error: `shell-host gewijzigd van ${previous ?? "(leeg)"} naar ${base}`,
|
|
1059
|
-
idempotency_key: null,
|
|
1060
|
-
caller: "shell-host-sync",
|
|
1069
|
+
connection_id: null, module: "floriday-authenticatie", action: "shell-host-changed",
|
|
1070
|
+
resource: "module_runtime_config", floriday_id: null,
|
|
1071
|
+
request: { key: "shell_base_url", from: d.previous, to: base }, response: null,
|
|
1072
|
+
http_status: 0, ok: true,
|
|
1073
|
+
error: `shell-host gewijzigd van ${d.previous ?? "(leeg)"} naar ${base}`,
|
|
1074
|
+
idempotency_key: null, caller: "shell-host-sync",
|
|
1061
1075
|
}).then(() => undefined, () => undefined);
|
|
1062
1076
|
}
|
|
1063
|
-
if (
|
|
1077
|
+
if (d.writeStock) {
|
|
1064
1078
|
await db.from("module_runtime_config").upsert({ key: "stock_queue_processor_base_url", value: base, updated_at: now }, { onConflict: "key" });
|
|
1065
1079
|
}
|
|
1066
|
-
|
|
1067
|
-
|
|
1080
|
+
else if (pingErr) {
|
|
1081
|
+
await reportShellHostSkip(`stock_queue_processor_base_url niet bijgewerkt: ${pingErr}`);
|
|
1082
|
+
}
|
|
1083
|
+
return { base, changed: d.writeStock, shellBaseChanged: d.writeShell, skipped: pingErr ?? undefined };
|
|
1068
1084
|
}
|
|
1069
1085
|
catch (e) {
|
|
1070
|
-
|
|
1086
|
+
await reportShellHostSkip(`shell-host synchroniseren mislukt: ${e?.message ?? e}`);
|
|
1071
1087
|
return { base, changed: false };
|
|
1072
1088
|
}
|
|
1073
1089
|
}
|
|
@@ -67,6 +67,8 @@ export interface BuildFulfillmentOrderBodyInput {
|
|
|
67
67
|
logisticHub?: string | null;
|
|
68
68
|
deliveryLocationGln?: string | null;
|
|
69
69
|
oneLabelOnly?: boolean;
|
|
70
|
+
/** Vast kenmerk van Afhandeling; wordt nooit vervangen. */
|
|
71
|
+
fulfillmentOrderId?: string | null;
|
|
70
72
|
}
|
|
71
73
|
export type FulfillmentDetectionSource = "delivery_order_claims" | "fulfillment_orders_cache";
|
|
72
74
|
export type FulfillmentDetection = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fulfillment-order-body.d.ts","sourceRoot":"","sources":["../../../src/lib/gateway/fulfillment-order-body.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAqD5D,wBAAgB,wBAAwB,CAAC,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAEjF;AAWD,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,GAAG,IAAI,CAO3D;AAMD,MAAM,WAAW,yBAAyB;IACxC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,MAAM,EAAE,mBAAmB,GAAG,iBAAiB,CAAC;CACjD;AAED,MAAM,MAAM,+BAA+B,GACvC;IACE,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,OAAO,EAAE,yBAAyB,EAAE,CAAC;CACtC,GACD;IACE,IAAI,EAAE,mBAAmB,CAAC;IAC1B,IAAI,EAAE,mBAAmB,CAAC;IAC1B,MAAM,EAAE,0BAA0B,CAAC;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,OAAO,EAAE,yBAAyB,EAAE,CAAC;CACtC,GACD;IACE,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,+DAA+D;IAC/D,SAAS,EAAE,OAAO,CAAC;CACpB,CAAC;AAEN;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,yEAAyE;IACzE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,wCAAwC;IACxC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,kDAAkD;IAClD,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,KAAK,CAAC;QACX,oBAAoB,EAAE,MAAM,CAAC;QAC7B,sDAAsD;QACtD,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,0BAA0B,CAAC,EAAE,MAAM,CAAC;QACpC,0BAA0B,CAAC,EAAE,MAAM,CAAC;QACpC,sBAAsB,CAAC,EAAE,MAAM,CAAC;KACjC,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,8BAA8B;IAC7C,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,0DAA0D;IAC1D,iBAAiB,EAAE,GAAG,CAAC;IACvB,8DAA8D;IAC9D,qBAAqB,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACxC;;;OAGG;IACH,YAAY,CAAC,EAAE,oBAAoB,EAAE,GAAG,IAAI,CAAC;IAC7C,4DAA4D;IAC5D,qBAAqB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,mBAAmB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,YAAY,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"fulfillment-order-body.d.ts","sourceRoot":"","sources":["../../../src/lib/gateway/fulfillment-order-body.ts"],"names":[],"mappings":"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"}
|
|
@@ -392,7 +392,12 @@ export async function buildFulfillmentOrderBody(supabase, input) {
|
|
|
392
392
|
});
|
|
393
393
|
}
|
|
394
394
|
}
|
|
395
|
-
|
|
395
|
+
// Afhandeling levert een vast kenmerk mee; dat geven we ongewijzigd door.
|
|
396
|
+
// Alleen het eigen auto-process-pad (zonder belading van Afhandeling) leidt
|
|
397
|
+
// het deterministisch af.
|
|
398
|
+
const fulfillmentOrderId = typeof input.fulfillmentOrderId === "string" && input.fulfillmentOrderId.trim()
|
|
399
|
+
? input.fulfillmentOrderId.trim()
|
|
400
|
+
: await deriveFulfillmentOrderId(deliveryOrderId);
|
|
396
401
|
const body = {
|
|
397
402
|
fulfillmentOrderId,
|
|
398
403
|
oneLabelOnly: input.oneLabelOnly ?? false,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fulfillment-order-send.d.ts","sourceRoot":"","sources":["../../../src/lib/gateway/fulfillment-order-send.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"fulfillment-order-send.d.ts","sourceRoot":"","sources":["../../../src/lib/gateway/fulfillment-order-send.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAyB5D,MAAM,WAAW,0BAA0B;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,wBAAsB,uBAAuB,CAC3C,QAAQ,EAAE,cAAc,EACxB,IAAI,EAAE,GAAG,EACT,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,0BAA0B,CAAC,CAmOrC;AAeD,wBAAsB,0BAA0B,CAC9C,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,cAAc,GACvB,OAAO,CAAC,QAAQ,CAAC,CAmCnB"}
|
|
@@ -4,6 +4,17 @@ import { resolveGatewayEnvironment } from "./shared.js";
|
|
|
4
4
|
import { florydayWrite, getActiveFlorydayCredentials } from "../floriday.functions.js";
|
|
5
5
|
import { buildFulfillmentOrderBody, detectFulfillmentState, } from "./fulfillment-order-body.js";
|
|
6
6
|
import { checkCartApproval } from "../floriday-cart-approval.server.js";
|
|
7
|
+
import { cartApprovalGatewayCode, checkAfhandelingLoad, decideLoadCarriersPolicy, } from "../floriday-order-stage.js";
|
|
8
|
+
async function readRequireLoadCarriers(supabase) {
|
|
9
|
+
try {
|
|
10
|
+
const { data } = await supabase
|
|
11
|
+
.from("module_runtime_config").select("value").eq("key", "require_load_carriers").maybeSingle();
|
|
12
|
+
return String(data?.value ?? "").trim().toLowerCase() === "true";
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
7
18
|
export async function runFulfillmentOrderSend(supabase, body, caller) {
|
|
8
19
|
const deliveryOrderId = String(body?.deliveryOrderId ?? "").trim();
|
|
9
20
|
const explicitLoadCarrierItems = Array.isArray(body?.loadCarrierItems)
|
|
@@ -56,6 +67,35 @@ export async function runFulfillmentOrderSend(supabase, body, caller) {
|
|
|
56
67
|
},
|
|
57
68
|
};
|
|
58
69
|
}
|
|
70
|
+
// Belading van Afhandeling (loadCarriers): vaste kenmerken controleren.
|
|
71
|
+
// De module maakt nooit zelf een kenmerk aan.
|
|
72
|
+
const hasCartLoad = Array.isArray(body?.loadCarriers) && body.loadCarriers.length > 0;
|
|
73
|
+
let warnings = [];
|
|
74
|
+
if (hasCartLoad) {
|
|
75
|
+
const check = checkAfhandelingLoad(body);
|
|
76
|
+
warnings = check.warnings;
|
|
77
|
+
if (check.errors.length > 0) {
|
|
78
|
+
return {
|
|
79
|
+
status: 400,
|
|
80
|
+
payload: { ok: false, code: check.errors[0].code, errors: check.errors, warnings,
|
|
81
|
+
error: check.errors.map((e) => e.message).join(" ") },
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
// Zonder karren van Afhandeling: standaard waarschuwing, met de schakelaar
|
|
86
|
+
// `require_load_carriers` (module_runtime_config, standaard uit) een 400.
|
|
87
|
+
const policy = decideLoadCarriersPolicy(hasCartLoad, await readRequireLoadCarriers(supabase));
|
|
88
|
+
if (policy === "reject") {
|
|
89
|
+
return {
|
|
90
|
+
status: 400,
|
|
91
|
+
payload: { ok: false, code: "load_carriers_required",
|
|
92
|
+
error: "Belading zonder karren van Afhandeling wordt niet meer geaccepteerd; stuur loadCarriers mee." },
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
if (policy === "warn") {
|
|
96
|
+
warnings.push({ code: "load_carriers_missing", severity: "warning",
|
|
97
|
+
message: `Belading zonder karren van Afhandeling (aanroeper: ${caller}); de module stelt de indeling en het fulfillmentOrderId zelf samen. Dit wordt later geweigerd.` });
|
|
98
|
+
}
|
|
59
99
|
// Body opbouwen — hetzij passthrough (caller geeft zelf loadCarrierItems),
|
|
60
100
|
// hetzij via de gedeelde bodybouwer vanuit de cache.
|
|
61
101
|
let writeBody;
|
|
@@ -86,11 +126,12 @@ export async function runFulfillmentOrderSend(supabase, body, caller) {
|
|
|
86
126
|
deliveryOrderData: doRow.data,
|
|
87
127
|
fulfillmentRequestIds,
|
|
88
128
|
// Definitieve karrenindeling uit ons systeem (optioneel).
|
|
89
|
-
loadCarriers:
|
|
129
|
+
loadCarriers: hasCartLoad ? body.loadCarriers : null,
|
|
90
130
|
carrierOrganizationId: body?.carrierOrganizationId ?? null,
|
|
91
131
|
logisticHub: body?.logisticHub ?? null,
|
|
92
132
|
deliveryLocationGln: body?.deliveryLocationGln ?? null,
|
|
93
133
|
oneLabelOnly: Boolean(body?.oneLabelOnly),
|
|
134
|
+
fulfillmentOrderId: hasCartLoad ? String(body.fulfillmentOrderId) : null,
|
|
94
135
|
});
|
|
95
136
|
if (built.kind === "already_fulfilled") {
|
|
96
137
|
return {
|
|
@@ -103,6 +144,7 @@ export async function runFulfillmentOrderSend(supabase, body, caller) {
|
|
|
103
144
|
reason: built.message,
|
|
104
145
|
fulfillmentOrderId: built.fulfillmentOrderId,
|
|
105
146
|
skippedRequests: built.skipped,
|
|
147
|
+
warnings,
|
|
106
148
|
},
|
|
107
149
|
};
|
|
108
150
|
}
|
|
@@ -115,7 +157,7 @@ export async function runFulfillmentOrderSend(supabase, body, caller) {
|
|
|
115
157
|
writeBody = built.body;
|
|
116
158
|
skipped = built.skipped;
|
|
117
159
|
}
|
|
118
|
-
// Laatste poort: zijn alle karren van de order
|
|
160
|
+
// Laatste poort: zijn alle karren van de order afgemeld aan de controlebalie?
|
|
119
161
|
const approval = await checkCartApproval(supabase, {
|
|
120
162
|
connectionId: conn.id,
|
|
121
163
|
deliveryOrderId,
|
|
@@ -126,7 +168,7 @@ export async function runFulfillmentOrderSend(supabase, body, caller) {
|
|
|
126
168
|
status: 409,
|
|
127
169
|
payload: {
|
|
128
170
|
ok: false,
|
|
129
|
-
code: "carts_not_controlled",
|
|
171
|
+
code: cartApprovalGatewayCode(approval.code) ?? "carts_not_controlled",
|
|
130
172
|
skipped: true,
|
|
131
173
|
blockedBy: approval.code,
|
|
132
174
|
orderRefs: approval.orderRefs,
|
|
@@ -147,7 +189,16 @@ export async function runFulfillmentOrderSend(supabase, body, caller) {
|
|
|
147
189
|
: undefined,
|
|
148
190
|
caller,
|
|
149
191
|
});
|
|
150
|
-
|
|
192
|
+
if (warnings.length > 0) {
|
|
193
|
+
await supabase.from("floriday_write_log").insert({
|
|
194
|
+
connection_id: conn.id, module: "gateway", action: "fulfillment-order-load-warnings",
|
|
195
|
+
resource: "gateway", floriday_id: deliveryOrderId || null, request: { warnings },
|
|
196
|
+
response: null, http_status: 0, ok: true, error: warnings.map((w) => w.message).join(" ").slice(0, 500),
|
|
197
|
+
idempotency_key: null, caller,
|
|
198
|
+
}).then(() => undefined, () => undefined);
|
|
199
|
+
}
|
|
200
|
+
const fulfillmentOrderId = writeBody?.fulfillmentOrderId ??
|
|
201
|
+
result.data?.fulfillmentOrderId ??
|
|
151
202
|
result.data?.id ??
|
|
152
203
|
result.data?.floridayId;
|
|
153
204
|
if (result.ok) {
|
|
@@ -160,6 +211,7 @@ export async function runFulfillmentOrderSend(supabase, body, caller) {
|
|
|
160
211
|
skipped: false,
|
|
161
212
|
skippedRequests: skipped,
|
|
162
213
|
fulfillmentOrderId,
|
|
214
|
+
warnings,
|
|
163
215
|
},
|
|
164
216
|
};
|
|
165
217
|
}
|
|
@@ -171,6 +223,7 @@ export async function runFulfillmentOrderSend(supabase, body, caller) {
|
|
|
171
223
|
skipped: false,
|
|
172
224
|
skippedRequests: skipped,
|
|
173
225
|
fulfillmentOrderId,
|
|
226
|
+
warnings,
|
|
174
227
|
error: result.error,
|
|
175
228
|
},
|
|
176
229
|
};
|
|
@@ -3,6 +3,16 @@ export interface FulfillmentOrderStatusResult {
|
|
|
3
3
|
status: number;
|
|
4
4
|
payload: unknown;
|
|
5
5
|
}
|
|
6
|
+
/**
|
|
7
|
+
* Statusoverzicht per verkooporder, alleen uit de caches (geen Floriday-
|
|
8
|
+
* aanroep): orderstatus, uitleveringen, fulfillmentRequestIds, floridayStage
|
|
9
|
+
* en de ordervelden. Een order die niet in de cache staat krijgt stage
|
|
10
|
+
* "unknown" — geen fout. Wijzigt nooit een orderstatus.
|
|
11
|
+
*/
|
|
12
|
+
export declare function runSalesOrderStatusOverview(supabase: SupabaseClient, input: {
|
|
13
|
+
salesOrderIds: string[];
|
|
14
|
+
environment?: "staging" | "live";
|
|
15
|
+
}): Promise<FulfillmentOrderStatusResult>;
|
|
6
16
|
export declare function runFulfillmentOrderStatus(supabase: SupabaseClient, input: {
|
|
7
17
|
fulfillmentOrderId: string;
|
|
8
18
|
environment?: "staging" | "live";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fulfillment-order-status.d.ts","sourceRoot":"","sources":["../../../src/lib/gateway/fulfillment-order-status.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"fulfillment-order-status.d.ts","sourceRoot":"","sources":["../../../src/lib/gateway/fulfillment-order-status.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAK5D,MAAM,WAAW,4BAA4B;IAC3C,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;CAClB;AAID;;;;;GAKG;AACH,wBAAsB,2BAA2B,CAC/C,QAAQ,EAAE,cAAc,EACxB,KAAK,EAAE;IAAE,aAAa,EAAE,MAAM,EAAE,CAAC;IAAC,WAAW,CAAC,EAAE,SAAS,GAAG,MAAM,CAAA;CAAE,GACnE,OAAO,CAAC,4BAA4B,CAAC,CAuFvC;AAED,wBAAsB,yBAAyB,CAC7C,QAAQ,EAAE,cAAc,EACxB,KAAK,EAAE;IAAE,kBAAkB,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,SAAS,GAAG,MAAM,CAAA;CAAE,GACtE,OAAO,CAAC,4BAA4B,CAAC,CA6CvC;AAcD,wBAAsB,4BAA4B,CAChD,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,cAAc,GACvB,OAAO,CAAC,QAAQ,CAAC,CA4CnB"}
|