@flowselections/floriday-voorraad 1.0.38 → 1.0.40
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/components/voorraad/ArtikelWizard.d.ts.map +1 -1
- package/dist-lib/components/voorraad/ArtikelWizard.js +34 -3
- package/dist-lib/components/voorraad/FustenPage.d.ts.map +1 -1
- package/dist-lib/components/voorraad/FustenPage.js +7 -1
- package/dist-lib/components/voorraad/InventorySettingsDrawer.d.ts +10 -0
- package/dist-lib/components/voorraad/InventorySettingsDrawer.d.ts.map +1 -0
- package/dist-lib/components/voorraad/InventorySettingsDrawer.js +99 -0
- package/dist-lib/components/voorraad/InventoryStatusBadge.d.ts +6 -0
- package/dist-lib/components/voorraad/InventoryStatusBadge.d.ts.map +1 -0
- package/dist-lib/components/voorraad/InventoryStatusBadge.js +43 -0
- package/dist-lib/components/voorraad/StockHistoryChart.d.ts +4 -0
- package/dist-lib/components/voorraad/StockHistoryChart.d.ts.map +1 -0
- package/dist-lib/components/voorraad/StockHistoryChart.js +53 -0
- package/dist-lib/components/voorraad/VoorraadPage.d.ts.map +1 -1
- package/dist-lib/components/voorraad/VoorraadPage.js +29 -1
- package/dist-lib/components/voorraad/VoorraadTable.d.ts +9 -1
- package/dist-lib/components/voorraad/VoorraadTable.d.ts.map +1 -1
- package/dist-lib/components/voorraad/VoorraadTable.js +17 -6
- package/dist-lib/hooks/useInventorySettings.d.ts +29 -0
- package/dist-lib/hooks/useInventorySettings.d.ts.map +1 -0
- package/dist-lib/hooks/useInventorySettings.js +62 -0
- package/dist-lib/hooks/useTradeItemStock.d.ts.map +1 -1
- package/dist-lib/hooks/useTradeItemStock.js +1 -0
- package/dist-lib/integrations/supabase/auth-middleware.d.ts +3833 -1196
- package/dist-lib/integrations/supabase/auth-middleware.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/client.d.ts +3833 -1196
- package/dist-lib/integrations/supabase/client.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/client.server.d.ts +3833 -1196
- package/dist-lib/integrations/supabase/client.server.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/types.d.ts +3987 -1324
- package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/types.js +1 -0
- package/dist-lib/lib/floricode-required-features.functions.d.ts +3833 -1196
- package/dist-lib/lib/floricode-required-features.functions.d.ts.map +1 -1
- package/dist-lib/lib/floriday-2026v1.server.d.ts +77 -0
- package/dist-lib/lib/floriday-2026v1.server.d.ts.map +1 -0
- package/dist-lib/lib/floriday-2026v1.server.js +178 -0
- package/dist-lib/lib/floriday-customer-offer.functions.d.ts +3833 -1196
- package/dist-lib/lib/floriday-customer-offer.functions.d.ts.map +1 -1
- package/dist-lib/lib/floriday-env.functions.d.ts +6593 -1319
- package/dist-lib/lib/floriday-env.functions.d.ts.map +1 -1
- package/dist-lib/lib/floriday-gateway.functions.d.ts +19621 -3799
- package/dist-lib/lib/floriday-gateway.functions.d.ts.map +1 -1
- package/dist-lib/lib/floriday-stock-supply.server.d.ts +18 -7
- package/dist-lib/lib/floriday-stock-supply.server.d.ts.map +1 -1
- package/dist-lib/lib/floriday-stock-supply.server.js +70 -68
- package/dist-lib/lib/floriday-vbn-required.functions.d.ts +6593 -1319
- package/dist-lib/lib/floriday-vbn-required.functions.d.ts.map +1 -1
- package/dist-lib/lib/floriday-warehouse.functions.d.ts +9850 -1939
- package/dist-lib/lib/floriday-warehouse.functions.d.ts.map +1 -1
- package/dist-lib/lib/floriday-writes.functions.d.ts +6593 -1319
- package/dist-lib/lib/floriday-writes.functions.d.ts.map +1 -1
- package/dist-lib/lib/fusten.d.ts +1 -0
- package/dist-lib/lib/fusten.d.ts.map +1 -1
- package/dist-lib/lib/fusten.js +1 -1
- package/dist-lib/lib/inventory-settings.functions.d.ts +51709 -0
- package/dist-lib/lib/inventory-settings.functions.d.ts.map +1 -0
- package/dist-lib/lib/inventory-settings.functions.js +97 -0
- package/dist-lib/lib/module-health.functions.d.ts +6593 -1319
- package/dist-lib/lib/module-health.functions.d.ts.map +1 -1
- package/dist-lib/lib/stock-sync.functions.d.ts +6593 -1319
- package/dist-lib/lib/stock-sync.functions.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Centrale server-side adapter voor de Floriday Suppliers API 2026v1.
|
|
3
|
+
*
|
|
4
|
+
* Alle voorraadsturing loopt via deze module, zodat pad, methode, body-vorm,
|
|
5
|
+
* snelheidslimiet en idempotentie op één plek staan. Alle calls gaan via de
|
|
6
|
+
* gateway van de Floriday-Authenticatiemodule (HMAC), nooit rechtstreeks.
|
|
7
|
+
*
|
|
8
|
+
* Niet importeren vanuit clientcode (.server.ts wordt geblokkeerd).
|
|
9
|
+
*/
|
|
10
|
+
export type FloridayEnvironment = "staging" | "live";
|
|
11
|
+
export type CallResult<T = unknown> = {
|
|
12
|
+
ok: boolean;
|
|
13
|
+
status?: number;
|
|
14
|
+
data?: T | null;
|
|
15
|
+
attemptId?: string;
|
|
16
|
+
error?: string;
|
|
17
|
+
};
|
|
18
|
+
/** ISO-jaar/week van een datum (maandag als eerste dag). */
|
|
19
|
+
export declare function isoWeekOf(input?: string | Date): {
|
|
20
|
+
year: number;
|
|
21
|
+
week: number;
|
|
22
|
+
};
|
|
23
|
+
/** Ligt (jaar, week) in het verleden ten opzichte van nu? */
|
|
24
|
+
export declare function isPastWeek(year: number, week: number): boolean;
|
|
25
|
+
export type RateBucket = "base-supply-write" | "base-supply-read" | "availability-write" | "sales-orders-read";
|
|
26
|
+
export declare function consumeRateLimit(supabaseAdmin: any, connectionId: string, bucket: RateBucket, cost?: number): Promise<{
|
|
27
|
+
granted: boolean;
|
|
28
|
+
waitMs: number;
|
|
29
|
+
}>;
|
|
30
|
+
export type ErrorClass = "retry" | "permanent" | "config" | "rate-limit" | "locked";
|
|
31
|
+
export declare function classifyError(message: string): ErrorClass;
|
|
32
|
+
export declare class Floriday2026v1Client {
|
|
33
|
+
private readonly supabaseAdmin;
|
|
34
|
+
private readonly environment;
|
|
35
|
+
private readonly connectionId;
|
|
36
|
+
constructor(supabaseAdmin: any, environment: FloridayEnvironment, connectionId: string);
|
|
37
|
+
private write;
|
|
38
|
+
private read;
|
|
39
|
+
/** Volledig weekaanbod (prijs + aantal). Vereist een bekende prijs. */
|
|
40
|
+
updateWeeklyBaseSupply(params: {
|
|
41
|
+
tradeItemId: string;
|
|
42
|
+
year: number;
|
|
43
|
+
week: number;
|
|
44
|
+
numberOfPieces: number;
|
|
45
|
+
pricePerPiece: number;
|
|
46
|
+
currency?: string;
|
|
47
|
+
}): Promise<CallResult>;
|
|
48
|
+
/** Alleen het aantal aanpassen — werkt ook zonder bekende prijs. */
|
|
49
|
+
patchWeeklyBaseSupplyQuantity(params: {
|
|
50
|
+
tradeItemId: string;
|
|
51
|
+
year: number;
|
|
52
|
+
week: number;
|
|
53
|
+
numberOfPieces: number;
|
|
54
|
+
}): Promise<CallResult>;
|
|
55
|
+
/** Beschikbaarheid per week aan- of uitzetten voor één of meer artikelen. */
|
|
56
|
+
updateTradeItemAvailabilityPerWeek(params: {
|
|
57
|
+
tradeItemIds: string[];
|
|
58
|
+
year: number;
|
|
59
|
+
week: number;
|
|
60
|
+
isAvailable: boolean;
|
|
61
|
+
tillYear?: number;
|
|
62
|
+
tillWeek?: number;
|
|
63
|
+
}): Promise<CallResult>;
|
|
64
|
+
/** Werkelijke standen bij Floriday voor een handelsweek (1 call/sec). */
|
|
65
|
+
getWeeklyBaseSupplies(params: {
|
|
66
|
+
year: number;
|
|
67
|
+
week: number;
|
|
68
|
+
}): Promise<CallResult<any>>;
|
|
69
|
+
/** Verkooporders vanaf een sequencenummer. */
|
|
70
|
+
syncSalesOrders(params: {
|
|
71
|
+
sequenceNumber: number;
|
|
72
|
+
limit?: number;
|
|
73
|
+
}): Promise<CallResult<any>>;
|
|
74
|
+
/** Hoogste beschikbare sequencenummer voor verkooporders. */
|
|
75
|
+
getSalesOrderMaxSequence(): Promise<CallResult<any>>;
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=floriday-2026v1.server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"floriday-2026v1.server.d.ts","sourceRoot":"","sources":["../../src/lib/floriday-2026v1.server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Centrale server-side adapter voor de Floriday Suppliers API 2026v1.
|
|
3
|
+
*
|
|
4
|
+
* Alle voorraadsturing loopt via deze module, zodat pad, methode, body-vorm,
|
|
5
|
+
* snelheidslimiet en idempotentie op één plek staan. Alle calls gaan via de
|
|
6
|
+
* gateway van de Floriday-Authenticatiemodule (HMAC), nooit rechtstreeks.
|
|
7
|
+
*
|
|
8
|
+
* Niet importeren vanuit clientcode (.server.ts wordt geblokkeerd).
|
|
9
|
+
*/
|
|
10
|
+
const API = "/suppliers-api-2026v1";
|
|
11
|
+
/** ISO-jaar/week van een datum (maandag als eerste dag). */
|
|
12
|
+
export function isoWeekOf(input) {
|
|
13
|
+
const parsed = input ? new Date(input) : new Date();
|
|
14
|
+
const source = Number.isNaN(parsed.getTime()) ? new Date() : parsed;
|
|
15
|
+
const date = new Date(Date.UTC(source.getUTCFullYear(), source.getUTCMonth(), source.getUTCDate()));
|
|
16
|
+
const day = date.getUTCDay() || 7;
|
|
17
|
+
date.setUTCDate(date.getUTCDate() + 4 - day);
|
|
18
|
+
const year = date.getUTCFullYear();
|
|
19
|
+
const yearStart = new Date(Date.UTC(year, 0, 1));
|
|
20
|
+
const week = Math.ceil(((date.getTime() - yearStart.getTime()) / 86400000 + 1) / 7);
|
|
21
|
+
return { year, week };
|
|
22
|
+
}
|
|
23
|
+
/** Ligt (jaar, week) in het verleden ten opzichte van nu? */
|
|
24
|
+
export function isPastWeek(year, week) {
|
|
25
|
+
const now = isoWeekOf();
|
|
26
|
+
return year < now.year || (year === now.year && week < now.week);
|
|
27
|
+
}
|
|
28
|
+
const BUCKET_LIMITS = {
|
|
29
|
+
// Floriday: schrijven op base-supply 10/s met burst 1000.
|
|
30
|
+
"base-supply-write": { capacity: 1000, refillPerSec: 10 },
|
|
31
|
+
// Lezen van base-supply is hard begrensd op 1/s (burst 20).
|
|
32
|
+
"base-supply-read": { capacity: 20, refillPerSec: 1 },
|
|
33
|
+
"availability-write": { capacity: 100, refillPerSec: 5 },
|
|
34
|
+
"sales-orders-read": { capacity: 60, refillPerSec: 2 },
|
|
35
|
+
};
|
|
36
|
+
export async function consumeRateLimit(supabaseAdmin, connectionId, bucket, cost = 1) {
|
|
37
|
+
const limits = BUCKET_LIMITS[bucket];
|
|
38
|
+
try {
|
|
39
|
+
const { data, error } = await supabaseAdmin.rpc("consume_floriday_rate_limit", {
|
|
40
|
+
p_bucket: `${connectionId}:${bucket}`,
|
|
41
|
+
p_capacity: limits.capacity,
|
|
42
|
+
p_refill_per_sec: limits.refillPerSec,
|
|
43
|
+
p_cost: cost,
|
|
44
|
+
});
|
|
45
|
+
if (error)
|
|
46
|
+
return { granted: true, waitMs: 0 };
|
|
47
|
+
const row = Array.isArray(data) ? data[0] : data;
|
|
48
|
+
return { granted: row?.granted !== false, waitMs: Number(row?.wait_ms ?? 0) || 0 };
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
// Nooit de verwerking blokkeren op een limietfout; de API-kant begrenst ook.
|
|
52
|
+
return { granted: true, waitMs: 0 };
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
export function classifyError(message) {
|
|
56
|
+
const m = (message || "").toLowerCase();
|
|
57
|
+
if (/\b429\b|rate limit|too many requests/.test(m))
|
|
58
|
+
return "rate-limit";
|
|
59
|
+
if (/\b423\b|locked/.test(m))
|
|
60
|
+
return "locked";
|
|
61
|
+
if (/\b(401|403)\b|unauthorized|forbidden|credential|central auth|not configured|gateway/.test(m)) {
|
|
62
|
+
return "config";
|
|
63
|
+
}
|
|
64
|
+
if (/\b(500|502|503|504)\b|timeout|timed out|network|fetch failed|econn|socket/.test(m)) {
|
|
65
|
+
return "retry";
|
|
66
|
+
}
|
|
67
|
+
if (/\b(400|404|409|422)\b|validation|invalid|not found/.test(m))
|
|
68
|
+
return "permanent";
|
|
69
|
+
return "retry";
|
|
70
|
+
}
|
|
71
|
+
// ---------------------------------------------------------------------------
|
|
72
|
+
// Client
|
|
73
|
+
// ---------------------------------------------------------------------------
|
|
74
|
+
export class Floriday2026v1Client {
|
|
75
|
+
constructor(supabaseAdmin, environment, connectionId) {
|
|
76
|
+
this.supabaseAdmin = supabaseAdmin;
|
|
77
|
+
this.environment = environment;
|
|
78
|
+
this.connectionId = connectionId;
|
|
79
|
+
}
|
|
80
|
+
async write(input) {
|
|
81
|
+
const gate = await consumeRateLimit(this.supabaseAdmin, this.connectionId, input.bucket);
|
|
82
|
+
if (!gate.granted) {
|
|
83
|
+
return { ok: false, error: `429 snelheidslimiet, wacht ${gate.waitMs} ms` };
|
|
84
|
+
}
|
|
85
|
+
try {
|
|
86
|
+
const { gatewayWrite } = await import("./floriday-gateway.server");
|
|
87
|
+
const res = await gatewayWrite({
|
|
88
|
+
environment: this.environment,
|
|
89
|
+
module: "inventory",
|
|
90
|
+
action: input.action,
|
|
91
|
+
method: input.method,
|
|
92
|
+
path: input.path,
|
|
93
|
+
referenceId: input.referenceId,
|
|
94
|
+
idempotencyKey: input.idempotencyKey,
|
|
95
|
+
body: input.body,
|
|
96
|
+
});
|
|
97
|
+
return { ok: true, status: res?.status, data: res?.data, attemptId: res?.attemptId };
|
|
98
|
+
}
|
|
99
|
+
catch (e) {
|
|
100
|
+
return { ok: false, error: e instanceof Error ? e.message : String(e) };
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
async read(path, bucket) {
|
|
104
|
+
const gate = await consumeRateLimit(this.supabaseAdmin, this.connectionId, bucket);
|
|
105
|
+
if (!gate.granted) {
|
|
106
|
+
return { ok: false, error: `429 snelheidslimiet, wacht ${gate.waitMs} ms` };
|
|
107
|
+
}
|
|
108
|
+
try {
|
|
109
|
+
const { gatewayRead } = await import("./floriday-gateway.server");
|
|
110
|
+
const res = await gatewayRead({ environment: this.environment, path });
|
|
111
|
+
return { ok: res.ok !== false, status: res.status, data: res.data };
|
|
112
|
+
}
|
|
113
|
+
catch (e) {
|
|
114
|
+
return { ok: false, error: e instanceof Error ? e.message : String(e) };
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
/** Volledig weekaanbod (prijs + aantal). Vereist een bekende prijs. */
|
|
118
|
+
updateWeeklyBaseSupply(params) {
|
|
119
|
+
return this.write({
|
|
120
|
+
action: "edit-weekly-base-supply",
|
|
121
|
+
method: "PUT",
|
|
122
|
+
path: `${API}/trade-items/${params.tradeItemId}/base-supply/${params.year}/${params.week}`,
|
|
123
|
+
referenceId: params.tradeItemId,
|
|
124
|
+
idempotencyKey: `inventory:base-supply:${params.tradeItemId}:${params.year}:${params.week}:${params.numberOfPieces}:${params.pricePerPiece}`,
|
|
125
|
+
body: {
|
|
126
|
+
basePricePerPiece: { currency: params.currency ?? "EUR", value: params.pricePerPiece },
|
|
127
|
+
numberOfPieces: params.numberOfPieces,
|
|
128
|
+
},
|
|
129
|
+
bucket: "base-supply-write",
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
/** Alleen het aantal aanpassen — werkt ook zonder bekende prijs. */
|
|
133
|
+
patchWeeklyBaseSupplyQuantity(params) {
|
|
134
|
+
return this.write({
|
|
135
|
+
action: "patch-weekly-base-supply-quantity",
|
|
136
|
+
method: "PATCH",
|
|
137
|
+
path: `${API}/trade-items/${params.tradeItemId}/base-supply/${params.year}/${params.week}?numberOfPieces=${params.numberOfPieces}`,
|
|
138
|
+
referenceId: params.tradeItemId,
|
|
139
|
+
idempotencyKey: `inventory:base-supply-qty:${params.tradeItemId}:${params.year}:${params.week}:${params.numberOfPieces}`,
|
|
140
|
+
body: {},
|
|
141
|
+
bucket: "base-supply-write",
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
/** Beschikbaarheid per week aan- of uitzetten voor één of meer artikelen. */
|
|
145
|
+
updateTradeItemAvailabilityPerWeek(params) {
|
|
146
|
+
const till = { year: params.tillYear ?? params.year, week: params.tillWeek ?? params.week };
|
|
147
|
+
return this.write({
|
|
148
|
+
action: "edit-availabilities-per-week",
|
|
149
|
+
method: "PUT",
|
|
150
|
+
path: `${API}/trade-items/availabilities-per-week`,
|
|
151
|
+
referenceId: params.tradeItemIds[0] ?? "bulk",
|
|
152
|
+
idempotencyKey: `inventory:availability:${params.tradeItemIds.join(",")}:${params.year}:${params.week}:${params.isAvailable}`,
|
|
153
|
+
body: {
|
|
154
|
+
tradeItemIds: params.tradeItemIds,
|
|
155
|
+
fromWeek: { year: params.year, week: params.week },
|
|
156
|
+
tillWeek: till,
|
|
157
|
+
isAvailable: params.isAvailable,
|
|
158
|
+
// Beide lijsten zijn verplicht in het 2026v1-schema.
|
|
159
|
+
alwaysAvailableForCustomerOrganizationIds: [],
|
|
160
|
+
neverAvailableForCustomerOrganizationIds: [],
|
|
161
|
+
},
|
|
162
|
+
bucket: "availability-write",
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
/** Werkelijke standen bij Floriday voor een handelsweek (1 call/sec). */
|
|
166
|
+
getWeeklyBaseSupplies(params) {
|
|
167
|
+
return this.read(`${API}/trade-items/base-supply?year=${params.year}&week=${params.week}`, "base-supply-read");
|
|
168
|
+
}
|
|
169
|
+
/** Verkooporders vanaf een sequencenummer. */
|
|
170
|
+
syncSalesOrders(params) {
|
|
171
|
+
const limit = Math.min(Math.max(params.limit ?? 50, 1), 200);
|
|
172
|
+
return this.read(`${API}/sales-orders/sync/${params.sequenceNumber}?limit=${limit}`, "sales-orders-read");
|
|
173
|
+
}
|
|
174
|
+
/** Hoogste beschikbare sequencenummer voor verkooporders. */
|
|
175
|
+
getSalesOrderMaxSequence() {
|
|
176
|
+
return this.read(`${API}/sales-orders/current-max-sequence`, "sales-orders-read");
|
|
177
|
+
}
|
|
178
|
+
}
|