@flowselections/floriday-authenticatie-module 1.0.56 → 1.0.62
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 +206 -0
- 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-sync.functions.d.ts +14 -0
- package/dist-lib/lib/floriday-sync.functions.d.ts.map +1 -1
- package/dist-lib/lib/floriday-sync.functions.js +92 -0
- 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/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 +514 -1
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
export type IsoWeek = {
|
|
2
|
+
year: number;
|
|
3
|
+
week: number;
|
|
4
|
+
};
|
|
5
|
+
/** ISO-weekjaar + week van een kalenderdatum (y, m 1-12, d). */
|
|
6
|
+
export declare function isoWeekOfDate(y: number, m: number, d: number): IsoWeek;
|
|
7
|
+
/** ISO-week van een moment, gerekend in Europe/Amsterdam (Floriday-tijd). */
|
|
8
|
+
export declare function isoWeekAmsterdam(at?: Date): IsoWeek;
|
|
9
|
+
/** Aantal ISO-weken in een ISO-weekjaar (52 of 53). */
|
|
10
|
+
export declare function isoWeeksInYear(year: number): number;
|
|
11
|
+
export declare function compareWeek(a: IsoWeek, b: IsoWeek): number;
|
|
12
|
+
export type WeekClass = "past" | "current" | "future" | "invalid";
|
|
13
|
+
export declare function classifyWeek(req: IsoWeek, now: IsoWeek): WeekClass;
|
|
14
|
+
export type FloridayProblem = {
|
|
15
|
+
status: number;
|
|
16
|
+
domainErrorCode: string | null;
|
|
17
|
+
title: string | null;
|
|
18
|
+
detail: string | null;
|
|
19
|
+
};
|
|
20
|
+
export declare function toProblem(status: number, data: any): FloridayProblem;
|
|
21
|
+
export declare const PRICE_LOCKED_MESSAGE = "Prijs kan niet meer wijzigen in de lopende week";
|
|
22
|
+
export declare const WEEK_IN_PAST_MESSAGE = "Week ligt in het verleden; weekaanbod is gesloten";
|
|
23
|
+
export type PlanStep = {
|
|
24
|
+
kind: "skip_past";
|
|
25
|
+
} | {
|
|
26
|
+
kind: "invalid_week";
|
|
27
|
+
} | {
|
|
28
|
+
kind: "put";
|
|
29
|
+
} | {
|
|
30
|
+
kind: "patch";
|
|
31
|
+
priceStatus: "unchanged" | "price_locked_current_week";
|
|
32
|
+
};
|
|
33
|
+
/** Wat te doen na de GET: bestaand aanbod (of null) en het verzoek. */
|
|
34
|
+
export declare function planBaseSupply(weekClass: WeekClass, existing: {
|
|
35
|
+
basePricePerPiece?: {
|
|
36
|
+
value?: number;
|
|
37
|
+
} | null;
|
|
38
|
+
} | null, price: number): PlanStep;
|
|
39
|
+
export type PutFailure = {
|
|
40
|
+
kind: "week_in_past";
|
|
41
|
+
} | {
|
|
42
|
+
kind: "price_locked_current_week";
|
|
43
|
+
} | {
|
|
44
|
+
kind: "recheck";
|
|
45
|
+
} | {
|
|
46
|
+
kind: "error";
|
|
47
|
+
retryable: boolean;
|
|
48
|
+
};
|
|
49
|
+
/** Duiding van een afgewezen PUT. Beslist op code + week, nooit op tekst. */
|
|
50
|
+
export declare function interpretPutFailure(weekClass: WeekClass, p: FloridayProblem): PutFailure;
|
|
51
|
+
export declare function isRetryableStatus(status: number): boolean;
|
|
52
|
+
//# sourceMappingURL=base-supply-decision.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-supply-decision.d.ts","sourceRoot":"","sources":["../../src/lib/base-supply-decision.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,OAAO,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAErD,gEAAgE;AAChE,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAOtE;AAED,6EAA6E;AAC7E,wBAAgB,gBAAgB,CAAC,EAAE,GAAE,IAAiB,GAAG,OAAO,CAM/D;AAED,uDAAuD;AACvD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,GAAG,MAAM,CAE1D;AAED,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;AAElE,wBAAgB,YAAY,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,GAAG,SAAS,CAMlE;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB,CAAC;AAEF,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,eAAe,CAQpE;AAED,eAAO,MAAM,oBAAoB,oDAAoD,CAAC;AACtF,eAAO,MAAM,oBAAoB,sDAAsD,CAAC;AAExF,MAAM,MAAM,QAAQ,GAChB;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,GACrB;IAAE,IAAI,EAAE,cAAc,CAAA;CAAE,GACxB;IAAE,IAAI,EAAE,KAAK,CAAA;CAAE,GACf;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,WAAW,EAAE,WAAW,GAAG,2BAA2B,CAAA;CAAE,CAAC;AAE9E,uEAAuE;AACvE,wBAAgB,cAAc,CAC5B,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE;IAAE,iBAAiB,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAA;CAAE,GAAG,IAAI,EAClE,KAAK,EAAE,MAAM,GACZ,QAAQ,CASV;AAED,MAAM,MAAM,UAAU,GAClB;IAAE,IAAI,EAAE,cAAc,CAAA;CAAE,GACxB;IAAE,IAAI,EAAE,2BAA2B,CAAA;CAAE,GACrC;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GACnB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAAC;AAE1C,6EAA6E;AAC7E,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,SAAS,EAAE,CAAC,EAAE,eAAe,GAAG,UAAU,CAMxF;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAEzD"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
// Pure beslisregels voor weekaanbod (base supply). Geen I/O, los te testen.
|
|
2
|
+
// Bron: Floriday Suppliers API 2026v1 Swagger + staging-proef 12-10-2026:
|
|
3
|
+
// - PATCH op ontbrekend én gesloten weekaanbod: 404 zonder domainErrorCode.
|
|
4
|
+
// - PUT in een week in het verleden: 400 domainErrorCode "weeklist-closed".
|
|
5
|
+
// - PUT met andere prijs in de lopende week: 400 "weeklist-closed"
|
|
6
|
+
// ("closed for price changes"); het aantal mag dan nog via PATCH.
|
|
7
|
+
/** ISO-weekjaar + week van een kalenderdatum (y, m 1-12, d). */
|
|
8
|
+
export function isoWeekOfDate(y, m, d) {
|
|
9
|
+
const date = new Date(Date.UTC(y, m - 1, d));
|
|
10
|
+
const day = date.getUTCDay() || 7;
|
|
11
|
+
date.setUTCDate(date.getUTCDate() + 4 - day);
|
|
12
|
+
const year = date.getUTCFullYear();
|
|
13
|
+
const week = Math.ceil(((date.getTime() - Date.UTC(year, 0, 1)) / 86400000 + 1) / 7);
|
|
14
|
+
return { year, week };
|
|
15
|
+
}
|
|
16
|
+
/** ISO-week van een moment, gerekend in Europe/Amsterdam (Floriday-tijd). */
|
|
17
|
+
export function isoWeekAmsterdam(at = new Date()) {
|
|
18
|
+
const parts = new Intl.DateTimeFormat("en-CA", {
|
|
19
|
+
timeZone: "Europe/Amsterdam", year: "numeric", month: "2-digit", day: "2-digit",
|
|
20
|
+
}).formatToParts(at);
|
|
21
|
+
const get = (t) => Number(parts.find((p) => p.type === t)?.value);
|
|
22
|
+
return isoWeekOfDate(get("year"), get("month"), get("day"));
|
|
23
|
+
}
|
|
24
|
+
/** Aantal ISO-weken in een ISO-weekjaar (52 of 53). */
|
|
25
|
+
export function isoWeeksInYear(year) {
|
|
26
|
+
return isoWeekOfDate(year, 12, 28).week;
|
|
27
|
+
}
|
|
28
|
+
export function compareWeek(a, b) {
|
|
29
|
+
return a.year !== b.year ? a.year - b.year : a.week - b.week;
|
|
30
|
+
}
|
|
31
|
+
export function classifyWeek(req, now) {
|
|
32
|
+
if (!Number.isInteger(req.year) || !Number.isInteger(req.week) || req.week < 1 || req.week > isoWeeksInYear(req.year)) {
|
|
33
|
+
return "invalid";
|
|
34
|
+
}
|
|
35
|
+
const c = compareWeek(req, now);
|
|
36
|
+
return c < 0 ? "past" : c === 0 ? "current" : "future";
|
|
37
|
+
}
|
|
38
|
+
export function toProblem(status, data) {
|
|
39
|
+
const body = data && typeof data === "object" ? (data.body && typeof data.body === "object" ? data.body : data) : {};
|
|
40
|
+
return {
|
|
41
|
+
status,
|
|
42
|
+
domainErrorCode: typeof body.domainErrorCode === "string" ? body.domainErrorCode : null,
|
|
43
|
+
title: typeof body.title === "string" ? body.title : null,
|
|
44
|
+
detail: typeof body.detail === "string" ? body.detail : null,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
export const PRICE_LOCKED_MESSAGE = "Prijs kan niet meer wijzigen in de lopende week";
|
|
48
|
+
export const WEEK_IN_PAST_MESSAGE = "Week ligt in het verleden; weekaanbod is gesloten";
|
|
49
|
+
/** Wat te doen na de GET: bestaand aanbod (of null) en het verzoek. */
|
|
50
|
+
export function planBaseSupply(weekClass, existing, price) {
|
|
51
|
+
if (weekClass === "invalid")
|
|
52
|
+
return { kind: "invalid_week" };
|
|
53
|
+
if (weekClass === "past")
|
|
54
|
+
return { kind: "skip_past" };
|
|
55
|
+
if (!existing)
|
|
56
|
+
return { kind: "put" };
|
|
57
|
+
const current = Number(existing.basePricePerPiece?.value);
|
|
58
|
+
const samePrice = Number.isFinite(current) && Math.abs(current - price) < 0.0005;
|
|
59
|
+
if (samePrice)
|
|
60
|
+
return { kind: "patch", priceStatus: "unchanged" };
|
|
61
|
+
if (weekClass === "current")
|
|
62
|
+
return { kind: "patch", priceStatus: "price_locked_current_week" };
|
|
63
|
+
return { kind: "put" };
|
|
64
|
+
}
|
|
65
|
+
/** Duiding van een afgewezen PUT. Beslist op code + week, nooit op tekst. */
|
|
66
|
+
export function interpretPutFailure(weekClass, p) {
|
|
67
|
+
if (p.domainErrorCode === "weeklist-closed") {
|
|
68
|
+
return weekClass === "past" ? { kind: "week_in_past" } : { kind: "price_locked_current_week" };
|
|
69
|
+
}
|
|
70
|
+
if (p.status === 409 || p.status === 400 || p.status === 422)
|
|
71
|
+
return { kind: "recheck" };
|
|
72
|
+
return { kind: "error", retryable: p.status === 0 || p.status === 423 || p.status === 429 || p.status >= 500 };
|
|
73
|
+
}
|
|
74
|
+
export function isRetryableStatus(status) {
|
|
75
|
+
return status === 0 || status === 423 || status === 429 || status >= 500;
|
|
76
|
+
}
|
|
@@ -8,7 +8,7 @@ type StockQueueRow = {
|
|
|
8
8
|
desired_available: boolean | null;
|
|
9
9
|
attempts: number | null;
|
|
10
10
|
};
|
|
11
|
-
/** ISO-
|
|
11
|
+
/** ISO-week (weekjaar + week) in Europe/Amsterdam; zonder invoer: vandaag. */
|
|
12
12
|
export declare function isoWeekParts(input?: string | Date): {
|
|
13
13
|
year: number;
|
|
14
14
|
week: number;
|
|
@@ -33,8 +33,10 @@ export declare function decideWarehouse(input: {
|
|
|
33
33
|
} | null;
|
|
34
34
|
export declare const SKIPPED_NO_PRICE_MESSAGE = "Prijs ontbreekt, nog niet verzonden";
|
|
35
35
|
export declare const SKIPPED_NO_WAREHOUSE_MESSAGE = "Geen voorkeursmagazijn voor deze koppeling; kies er een op de Connectie-pagina";
|
|
36
|
+
export declare const NEEDS_BASE_SUPPLY_MESSAGE = "Nog geen weekaanbod in Floriday; aanmaken via gateway/supply-line";
|
|
37
|
+
export declare const WEEK_CLOSED_MESSAGE = "Week is gesloten in Floriday; overgeslagen";
|
|
36
38
|
export type StockOutcome = {
|
|
37
|
-
outcome: "quantity_sent" | "skipped_no_price" | "skipped_no_warehouse" | "error";
|
|
39
|
+
outcome: "quantity_sent" | "skipped_no_price" | "skipped_no_warehouse" | "needs_base_supply" | "skipped_week_closed" | "error";
|
|
38
40
|
availabilitySent: boolean;
|
|
39
41
|
quantitySent: boolean;
|
|
40
42
|
error: string | null;
|
|
@@ -51,10 +53,19 @@ type WriteResult = {
|
|
|
51
53
|
* Bepaalt de afsluiting van een regel uit de twee Floriday-antwoorden.
|
|
52
54
|
* Puur (geen I/O) zodat het los te testen is.
|
|
53
55
|
* - quantity_sent alleen bij een 2xx op de base-supply-PATCH.
|
|
54
|
-
* - 404 op de PATCH
|
|
56
|
+
* - 404 op de PATCH = needs_base_supply. Floriday geeft hier voor een
|
|
57
|
+
* ontbrekend én een gesloten weekaanbod dezelfde 404 zonder domainErrorCode
|
|
58
|
+
* (staging 12-10-2026); een gesloten week blijkt pas uit de PUT
|
|
59
|
+
* (400, domainErrorCode "weeklist-closed") in gateway/supply-line.
|
|
55
60
|
* - beschikbaarheid alleen is nooit quantity_sent.
|
|
56
61
|
*/
|
|
57
62
|
export declare function decideOutcome(availability: WriteResult | null, quantity: WriteResult | null): StockOutcome;
|
|
63
|
+
/**
|
|
64
|
+
* Achterwaarts compatibel: kent de afsluitfunctie van Voorraad een nieuwe
|
|
65
|
+
* uitkomst nog niet, dan wordt de regel als skipped_no_price afgesloten met
|
|
66
|
+
* een herkenbare prefix in de fout. Puur, voor tests.
|
|
67
|
+
*/
|
|
68
|
+
export declare function legacyFallback(o: StockOutcome): StockOutcome | null;
|
|
58
69
|
/**
|
|
59
70
|
* Zet één wachtrijregel door naar Floriday. Gooit nooit.
|
|
60
71
|
* Er wordt bewust GEEN PUT met basePricePerPiece gedaan zolang het prijsplan
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"process-stock-queue.d.ts","sourceRoot":"","sources":["../../../src/lib/cron/process-stock-queue.ts"],"names":[],"mappings":"
|
|
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,32 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
// Vaste verwerker voor de Floriday-voorraadwachtrij.
|
|
3
|
-
// ----------------------------------------------------------------------------
|
|
4
|
-
// Deze module neemt de voorraadsync volledig over van de voorraadmodule.
|
|
5
|
-
// Werkwijze per ronde:
|
|
6
|
-
// 1. `claim_floriday_stock_queue` claimt atomair max. N regels (lock 5 min).
|
|
7
|
-
// 2. Per regel: werkelijk aantal stuks (weekaanbod) + beschikbaarheids-
|
|
8
|
-
// schakelaar via `florydayWrite` — dus met de tokens van deze module.
|
|
9
|
-
// 3. `complete_floriday_stock_queue` schrijft het resultaat terug met
|
|
10
|
-
// exponentiële backoff (1 → 30 min, max 8 pogingen) en onderscheid
|
|
11
|
-
// tussen tijdelijke en definitieve fouten.
|
|
12
|
-
// Bij een snelheidslimiet (429) breekt de ronde af; de volgende cron-tick
|
|
13
|
-
// pakt het weer op.
|
|
14
|
-
// ============================================================================
|
|
1
|
+
import { isoWeekAmsterdam } from "../base-supply-decision.js";
|
|
15
2
|
import { florydayWrite, getActiveFlorydayEnvironment, syncShellHostRuntimeConfig, } from "../floriday.functions.js";
|
|
16
3
|
import { verifyGatewayRequest, GATEWAY_HEADER_TIMESTAMP } from "../floriday-gateway-hmac.js";
|
|
17
4
|
import { isOwnWarehouse } from "../floriday-own-config.js";
|
|
18
5
|
const BATCH_SIZE = 25;
|
|
19
|
-
/** ISO-
|
|
6
|
+
/** ISO-week (weekjaar + week) in Europe/Amsterdam; zonder invoer: vandaag. */
|
|
20
7
|
export function isoWeekParts(input) {
|
|
21
8
|
const parsed = input ? new Date(input) : new Date();
|
|
22
|
-
|
|
23
|
-
const date = new Date(Date.UTC(source.getUTCFullYear(), source.getUTCMonth(), source.getUTCDate()));
|
|
24
|
-
const day = date.getUTCDay() || 7;
|
|
25
|
-
date.setUTCDate(date.getUTCDate() + 4 - day);
|
|
26
|
-
const year = date.getUTCFullYear();
|
|
27
|
-
const yearStart = new Date(Date.UTC(year, 0, 1));
|
|
28
|
-
const week = Math.ceil(((date.getTime() - yearStart.getTime()) / 86400000 + 1) / 7);
|
|
29
|
-
return { year, week };
|
|
9
|
+
return isoWeekAmsterdam(Number.isNaN(parsed.getTime()) ? new Date() : parsed);
|
|
30
10
|
}
|
|
31
11
|
/** Tijdelijk (netwerk/5xx/429) versus definitief (gegevensfout). */
|
|
32
12
|
export function isPermanentError(message) {
|
|
@@ -106,11 +86,16 @@ async function resolveWarehouseId(supabase, connectionId, tradeItemId, cachedIte
|
|
|
106
86
|
}
|
|
107
87
|
export const SKIPPED_NO_PRICE_MESSAGE = "Prijs ontbreekt, nog niet verzonden";
|
|
108
88
|
export const SKIPPED_NO_WAREHOUSE_MESSAGE = "Geen voorkeursmagazijn voor deze koppeling; kies er een op de Connectie-pagina";
|
|
89
|
+
export const NEEDS_BASE_SUPPLY_MESSAGE = "Nog geen weekaanbod in Floriday; aanmaken via gateway/supply-line";
|
|
90
|
+
export const WEEK_CLOSED_MESSAGE = "Week is gesloten in Floriday; overgeslagen";
|
|
109
91
|
/**
|
|
110
92
|
* Bepaalt de afsluiting van een regel uit de twee Floriday-antwoorden.
|
|
111
93
|
* Puur (geen I/O) zodat het los te testen is.
|
|
112
94
|
* - quantity_sent alleen bij een 2xx op de base-supply-PATCH.
|
|
113
|
-
* - 404 op de PATCH
|
|
95
|
+
* - 404 op de PATCH = needs_base_supply. Floriday geeft hier voor een
|
|
96
|
+
* ontbrekend én een gesloten weekaanbod dezelfde 404 zonder domainErrorCode
|
|
97
|
+
* (staging 12-10-2026); een gesloten week blijkt pas uit de PUT
|
|
98
|
+
* (400, domainErrorCode "weeklist-closed") in gateway/supply-line.
|
|
114
99
|
* - beschikbaarheid alleen is nooit quantity_sent.
|
|
115
100
|
*/
|
|
116
101
|
export function decideOutcome(availability, quantity) {
|
|
@@ -127,18 +112,23 @@ export function decideOutcome(availability, quantity) {
|
|
|
127
112
|
return { outcome: "quantity_sent", availabilitySent, quantitySent: true, error: null, permanent: false, attemptId };
|
|
128
113
|
}
|
|
129
114
|
if (quantity.status === 404) {
|
|
130
|
-
return {
|
|
131
|
-
outcome: "skipped_no_price",
|
|
132
|
-
availabilitySent,
|
|
133
|
-
quantitySent: false,
|
|
134
|
-
error: `${SKIPPED_NO_PRICE_MESSAGE} (geen weekaanbod in Floriday)`,
|
|
135
|
-
permanent: false,
|
|
136
|
-
attemptId,
|
|
137
|
-
};
|
|
115
|
+
return { outcome: "needs_base_supply", availabilitySent, quantitySent: false, error: NEEDS_BASE_SUPPLY_MESSAGE, permanent: false, attemptId };
|
|
138
116
|
}
|
|
139
117
|
const message = quantity.error ?? `HTTP ${quantity.status}`;
|
|
140
118
|
return { outcome: "error", availabilitySent, quantitySent: false, error: message, permanent: isPermanentError(message), attemptId };
|
|
141
119
|
}
|
|
120
|
+
/**
|
|
121
|
+
* Achterwaarts compatibel: kent de afsluitfunctie van Voorraad een nieuwe
|
|
122
|
+
* uitkomst nog niet, dan wordt de regel als skipped_no_price afgesloten met
|
|
123
|
+
* een herkenbare prefix in de fout. Puur, voor tests.
|
|
124
|
+
*/
|
|
125
|
+
export function legacyFallback(o) {
|
|
126
|
+
if (o.outcome === "needs_base_supply")
|
|
127
|
+
return { ...o, outcome: "skipped_no_price", error: `[needs_base_supply] ${o.error}` };
|
|
128
|
+
if (o.outcome === "skipped_week_closed")
|
|
129
|
+
return { ...o, outcome: "skipped_no_price", error: `[week_closed] ${o.error}` };
|
|
130
|
+
return null;
|
|
131
|
+
}
|
|
142
132
|
function errorOutcome(message, permanent) {
|
|
143
133
|
return { outcome: "error", availabilitySent: false, quantitySent: false, error: message, permanent, attemptId: null };
|
|
144
134
|
}
|
|
@@ -207,15 +197,19 @@ export async function pushStockRow(supabase, env, row) {
|
|
|
207
197
|
}
|
|
208
198
|
}
|
|
209
199
|
async function completeRow(supabase, id, o) {
|
|
210
|
-
const
|
|
200
|
+
const call = (x) => supabase.rpc("complete_floriday_stock_queue_outcome", {
|
|
211
201
|
p_id: id,
|
|
212
|
-
p_outcome:
|
|
213
|
-
p_availability_sent:
|
|
214
|
-
p_quantity_sent:
|
|
215
|
-
p_error:
|
|
216
|
-
p_attempt_id:
|
|
217
|
-
p_permanent:
|
|
202
|
+
p_outcome: x.outcome,
|
|
203
|
+
p_availability_sent: x.availabilitySent,
|
|
204
|
+
p_quantity_sent: x.quantitySent,
|
|
205
|
+
p_error: x.error,
|
|
206
|
+
p_attempt_id: x.attemptId,
|
|
207
|
+
p_permanent: x.permanent,
|
|
218
208
|
});
|
|
209
|
+
let { error } = await call(o);
|
|
210
|
+
const fb = error ? legacyFallback(o) : null;
|
|
211
|
+
if (fb)
|
|
212
|
+
({ error } = await call(fb));
|
|
219
213
|
if (error)
|
|
220
214
|
console.error("[stock-queue] afsluiten mislukt:", id, error.message);
|
|
221
215
|
}
|
|
@@ -243,6 +237,8 @@ export async function runStockQueueRound(supabase, limit = BATCH_SIZE) {
|
|
|
243
237
|
skippedNoPrice += 1;
|
|
244
238
|
else if (outcome.outcome === "skipped_no_warehouse")
|
|
245
239
|
skippedNoWarehouse += 1;
|
|
240
|
+
else if (outcome.outcome === "needs_base_supply" || outcome.outcome === "skipped_week_closed")
|
|
241
|
+
skippedNoPrice += 1;
|
|
246
242
|
else {
|
|
247
243
|
failed += 1;
|
|
248
244
|
if (outcome.error && isRateLimited(outcome.error))
|
|
@@ -1,6 +1,20 @@
|
|
|
1
1
|
import type { SupabaseClient } from "@supabase/supabase-js";
|
|
2
2
|
import { type FlorydayEnvironment } from "./floriday.functions.js";
|
|
3
3
|
export type FlorydayResource = "trade-items" | "sales-orders" | "customer-organizations" | "carriers" | "fulfillment-orders" | "customer-stickers" | "warehouses" | "packings" | "delivery-locations" | "clock-supplies" | "delivery-orders" | "clock-presales" | "contracts" | "blanket-orders" | "additional-services" | "commercial-service-types" | "collections" | "price-groups" | "catalog-prices" | "delivery-condition-sets" | "sales-strategies" | "base-items" | "contract-trade-item-groups" | "trade-settings-customers";
|
|
4
|
+
export declare function toNetworkRow(item: any, connectionId: string): {
|
|
5
|
+
connection_id: string;
|
|
6
|
+
organization_id: string;
|
|
7
|
+
organization_name: any;
|
|
8
|
+
gln: any;
|
|
9
|
+
country: any;
|
|
10
|
+
city: any;
|
|
11
|
+
data: any;
|
|
12
|
+
fetched_at: string;
|
|
13
|
+
} | null;
|
|
14
|
+
export declare function backfillNetworkFromCustomersCache(supabase: any, connectionId: string, deadlineMs: number): Promise<{
|
|
15
|
+
copied: number;
|
|
16
|
+
done: boolean;
|
|
17
|
+
}>;
|
|
4
18
|
export declare function runFloridayResourceSync(supabase: SupabaseClient, env: FlorydayEnvironment, resource: FlorydayResource): Promise<{
|
|
5
19
|
synced: number;
|
|
6
20
|
fromSequence: number;
|
|
@@ -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,84 @@ 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
|
+
// Eenmalige aanvulling: de sequence-cursor van customer-organizations staat al
|
|
92
|
+
// voorbij de bestaande organisaties, dus kopiëren we die per portie uit
|
|
93
|
+
// floriday_customers_cache (zelfde Floriday-objecten) tot het netwerk gevuld is.
|
|
94
|
+
export async function backfillNetworkFromCustomersCache(supabase, connectionId, deadlineMs) {
|
|
95
|
+
const { count } = await supabase
|
|
96
|
+
.from("floriday_network_cache").select("organization_id", { count: "exact", head: true })
|
|
97
|
+
.eq("connection_id", connectionId);
|
|
98
|
+
const { data: st } = await supabase.from("floriday_network_sync_state")
|
|
99
|
+
.select("last_sequence_number").eq("connection_id", connectionId).maybeSingle();
|
|
100
|
+
if ((count ?? 0) > 0 && st?.last_sequence_number === -1)
|
|
101
|
+
return { copied: 0, done: true };
|
|
102
|
+
let from = Number(st?.last_sequence_number ?? 0);
|
|
103
|
+
if (from < 0)
|
|
104
|
+
from = 0;
|
|
105
|
+
let copied = 0;
|
|
106
|
+
while (Date.now() < deadlineMs) {
|
|
107
|
+
const { data, error } = await supabase.from("floriday_customers_cache")
|
|
108
|
+
.select("data, sequence_number").gt("sequence_number", from)
|
|
109
|
+
.order("sequence_number", { ascending: true }).limit(500);
|
|
110
|
+
if (error)
|
|
111
|
+
throw new Error(error.message);
|
|
112
|
+
if (!data?.length) {
|
|
113
|
+
await supabase.from("floriday_network_sync_state").upsert({
|
|
114
|
+
connection_id: connectionId, last_sequence_number: -1, last_synced_at: now(), last_error: null, updated_at: now(),
|
|
115
|
+
}, { onConflict: "connection_id" });
|
|
116
|
+
return { copied, done: true };
|
|
117
|
+
}
|
|
118
|
+
await upsertNetworkRows(supabase, connectionId, data.map((r) => r.data));
|
|
119
|
+
copied += data.length;
|
|
120
|
+
from = Number(data[data.length - 1].sequence_number);
|
|
121
|
+
await supabase.from("floriday_network_sync_state").upsert({
|
|
122
|
+
connection_id: connectionId, last_sequence_number: from, last_synced_at: now(), updated_at: now(),
|
|
123
|
+
}, { onConflict: "connection_id" });
|
|
124
|
+
}
|
|
125
|
+
return { copied, done: false };
|
|
126
|
+
}
|
|
49
127
|
const RESOURCE_CONFIG = {
|
|
50
128
|
"trade-items": {
|
|
51
129
|
kind: "sequence",
|
|
@@ -110,6 +188,9 @@ const RESOURCE_CONFIG = {
|
|
|
110
188
|
maxSequenceEndpoint: `/${SUPPLIERS_API_VERSION}/organizations/current-max-sequence`,
|
|
111
189
|
bySequenceEndpointBase: `/${SUPPLIERS_API_VERSION}/organizations/sync`,
|
|
112
190
|
upsert: async (supabase, connectionId, items) => {
|
|
191
|
+
// Netwerk (Klanten → Netwerk) uit dezelfde feed: CUSTOMER + AGENT, op
|
|
192
|
+
// organisatie-id; endDate/isDeleted blijven in data voor de verloop-logica.
|
|
193
|
+
await upsertNetworkRows(supabase, connectionId, items);
|
|
113
194
|
const rows = items
|
|
114
195
|
.map((item) => {
|
|
115
196
|
const orgType = item?.organizationType ?? item?.type ?? null;
|
|
@@ -611,6 +692,17 @@ export async function runFloridayResourceSync(supabase, env, resource) {
|
|
|
611
692
|
},
|
|
612
693
|
});
|
|
613
694
|
if (resource === "customer-organizations") {
|
|
695
|
+
// Netwerk: eenmalige, hervatbare aanvulling uit de klantcache (max 15s per ronde).
|
|
696
|
+
try {
|
|
697
|
+
const nb = await backfillNetworkFromCustomersCache(supabase, row.id, Date.now() + 15000);
|
|
698
|
+
console.log(`[network] ${env}: ${nb.copied} gekopieerd, klaar=${nb.done}`);
|
|
699
|
+
}
|
|
700
|
+
catch (e) {
|
|
701
|
+
console.warn(`[network] aanvulling mislukt: ${String(e?.message ?? e)}`);
|
|
702
|
+
await supabase.from("floriday_network_sync_state").upsert({
|
|
703
|
+
connection_id: row.id, last_error: String(e?.message ?? e).slice(0, 500), updated_at: now(),
|
|
704
|
+
}, { onConflict: "connection_id" });
|
|
705
|
+
}
|
|
614
706
|
// Handelsinstellingen meeliften: gewijzigde + ontbrekende eigen kopers.
|
|
615
707
|
try {
|
|
616
708
|
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":"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
|
|
1
|
+
{"version":3,"file":"floriday.functions.d.ts","sourceRoot":"","sources":["../../src/lib/floriday.functions.ts"],"names":[],"mappings":"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"}
|