@flowselections/floriday-voorraad 1.0.129 → 1.0.133
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 +102 -19
- package/dist-lib/components/voorraad/PriceStatusBadge.d.ts.map +1 -1
- package/dist-lib/components/voorraad/PriceStatusBadge.js +21 -45
- package/dist-lib/components/voorraad/ProductStructureCard.d.ts.map +1 -1
- package/dist-lib/components/voorraad/ProductStructureCard.js +6 -2
- package/dist-lib/hooks/useLocalTradeItems.d.ts.map +1 -1
- package/dist-lib/hooks/useLocalTradeItems.js +4 -0
- package/dist-lib/hooks/useVoorraadData.d.ts.map +1 -1
- package/dist-lib/hooks/useVoorraadData.js +2 -1
- package/dist-lib/integrations/supabase/types.d.ts +845 -0
- package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
- package/dist-lib/lib/__tests__/mirror-products.test.d.ts +2 -0
- package/dist-lib/lib/__tests__/mirror-products.test.d.ts.map +1 -0
- package/dist-lib/lib/__tests__/mirror-products.test.js +13 -0
- package/dist-lib/lib/__tests__/release-130.test.d.ts +2 -0
- package/dist-lib/lib/__tests__/release-130.test.d.ts.map +1 -0
- package/dist-lib/lib/__tests__/release-130.test.js +103 -0
- package/dist-lib/lib/floriday-2026v1.server.d.ts +1 -8
- package/dist-lib/lib/floriday-2026v1.server.d.ts.map +1 -1
- package/dist-lib/lib/floriday-2026v1.server.js +0 -10
- package/dist-lib/lib/floriday-gateway.functions.d.ts +6 -0
- package/dist-lib/lib/floriday-gateway.functions.d.ts.map +1 -1
- package/dist-lib/lib/floriday-gateway.functions.js +7 -0
- package/dist-lib/lib/floriday-gateway.server.d.ts +17 -4
- package/dist-lib/lib/floriday-gateway.server.d.ts.map +1 -1
- package/dist-lib/lib/floriday-gateway.server.js +80 -2
- package/dist-lib/lib/floriday-payload.d.ts.map +1 -1
- package/dist-lib/lib/floriday-payload.js +9 -4
- package/dist-lib/lib/floriday-read-contract.d.ts +49 -0
- package/dist-lib/lib/floriday-read-contract.d.ts.map +1 -0
- package/dist-lib/lib/floriday-read-contract.js +92 -0
- package/dist-lib/lib/mirror-products.d.ts +12 -0
- package/dist-lib/lib/mirror-products.d.ts.map +1 -0
- package/dist-lib/lib/mirror-products.js +10 -0
- package/dist-lib/lib/price-status.d.ts +14 -0
- package/dist-lib/lib/price-status.d.ts.map +1 -0
- package/dist-lib/lib/price-status.js +16 -0
- package/dist-lib/lib/publish-pipeline.d.ts.map +1 -1
- package/dist-lib/lib/publish-pipeline.js +2 -7
- package/dist-lib/lib/publish-status.d.ts +26 -0
- package/dist-lib/lib/publish-status.d.ts.map +1 -0
- package/dist-lib/lib/publish-status.js +30 -0
- package/dist-lib/server-hooks/floriday-continuous-stock-pull.d.ts.map +1 -1
- package/dist-lib/server-hooks/floriday-continuous-stock-pull.js +37 -50
- package/package.json +1 -1
- package/sql/floriday-voorraad-schema.sql +232 -53
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Prijsstatus van een artikel: één bron, één label (1.0.130).
|
|
3
|
+
* Bron: de prijsregel (supply line) van het Floriday-artikel. De schakelaar
|
|
4
|
+
* "Te koop aanbieden" en de wachtrij veranderen het label niet; ze komen
|
|
5
|
+
* alleen in de toelichting, zodat hetzelfde artikel overal hetzelfde toont.
|
|
6
|
+
*/
|
|
7
|
+
export type PriceStatusVariant = "live" | "expired" | "drained" | "none";
|
|
8
|
+
export interface PriceSupplyLine {
|
|
9
|
+
available_quantity: number | null;
|
|
10
|
+
period_end: string | null;
|
|
11
|
+
}
|
|
12
|
+
export declare const PRICE_STATUS_LABELS: Record<PriceStatusVariant, string>;
|
|
13
|
+
export declare function priceStatus(supplyLine: PriceSupplyLine | null | undefined, now?: number): PriceStatusVariant;
|
|
14
|
+
//# sourceMappingURL=price-status.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"price-status.d.ts","sourceRoot":"","sources":["../../src/lib/price-status.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;AAEzE,MAAM,WAAW,eAAe;IAC9B,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,kBAAkB,EAAE,MAAM,CAKlE,CAAC;AAEF,wBAAgB,WAAW,CAAC,UAAU,EAAE,eAAe,GAAG,IAAI,GAAG,SAAS,EAAE,GAAG,SAAa,GAAG,kBAAkB,CAMhH"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export const PRICE_STATUS_LABELS = {
|
|
2
|
+
live: "Prijs live in catalogus",
|
|
3
|
+
expired: "Prijs verlopen",
|
|
4
|
+
drained: "Voorraad op",
|
|
5
|
+
none: "Geen prijs actief",
|
|
6
|
+
};
|
|
7
|
+
export function priceStatus(supplyLine, now = Date.now()) {
|
|
8
|
+
if (!supplyLine)
|
|
9
|
+
return "none";
|
|
10
|
+
const endMs = supplyLine.period_end ? new Date(supplyLine.period_end).getTime() : null;
|
|
11
|
+
if (endMs !== null && endMs < now)
|
|
12
|
+
return "expired";
|
|
13
|
+
if ((supplyLine.available_quantity ?? 0) <= 0)
|
|
14
|
+
return "drained";
|
|
15
|
+
return "live";
|
|
16
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"publish-pipeline.d.ts","sourceRoot":"","sources":["../../src/lib/publish-pipeline.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"publish-pipeline.d.ts","sourceRoot":"","sources":["../../src/lib/publish-pipeline.ts"],"names":[],"mappings":"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"}
|
|
@@ -145,13 +145,8 @@ function sanitizeResult(value) {
|
|
|
145
145
|
export async function finishPublishJob(jobId, patch) {
|
|
146
146
|
const { data } = await steps().select("status, step_key").eq("job_id", jobId);
|
|
147
147
|
const rows = (data ?? []);
|
|
148
|
-
const
|
|
149
|
-
const
|
|
150
|
-
const status = coreFailed
|
|
151
|
-
? "failed"
|
|
152
|
-
: failed.length > 0
|
|
153
|
-
? "succeeded_with_warnings"
|
|
154
|
-
: "succeeded";
|
|
148
|
+
const { publishOutcome } = await import("./publish-status.js");
|
|
149
|
+
const status = publishOutcome(rows);
|
|
155
150
|
await jobs()
|
|
156
151
|
.update({
|
|
157
152
|
status,
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Regels voor de publicatiestatus van een artikel (1.0.130).
|
|
3
|
+
* - Een artikel met een Floriday-id telt als gepubliceerd.
|
|
4
|
+
* - Een mislukte controle is een waarschuwing, geen mislukte publicatie.
|
|
5
|
+
* - Wijzigingen gaan naar Floriday als er een Floriday-id is, tenzij er een
|
|
6
|
+
* reden is waarom dat niet kan; die reden wordt dan getoond.
|
|
7
|
+
*/
|
|
8
|
+
export declare function isPublishedToFloriday(...ids: Array<string | null | undefined>): boolean;
|
|
9
|
+
export type StepOutcome = {
|
|
10
|
+
step_key: string;
|
|
11
|
+
status: string;
|
|
12
|
+
};
|
|
13
|
+
export type PublishOutcome = "failed" | "succeeded_with_warnings" | "succeeded";
|
|
14
|
+
/** Alleen de artikelstap bepaalt of de publicatie mislukt is. */
|
|
15
|
+
export declare function publishOutcome(steps: StepOutcome[]): PublishOutcome;
|
|
16
|
+
export interface EditTarget {
|
|
17
|
+
sendsToFloriday: boolean;
|
|
18
|
+
text: string;
|
|
19
|
+
}
|
|
20
|
+
/** Wat het bewerkscherm belooft over het versturen van wijzigingen. */
|
|
21
|
+
export declare function editTargetText(input: {
|
|
22
|
+
floridayId: string | null | undefined;
|
|
23
|
+
writeReadOnly: boolean | null | undefined;
|
|
24
|
+
writeReason?: string | null;
|
|
25
|
+
}): EditTarget;
|
|
26
|
+
//# sourceMappingURL=publish-status.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publish-status.d.ts","sourceRoot":"","sources":["../../src/lib/publish-status.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,wBAAgB,qBAAqB,CAAC,GAAG,GAAG,EAAE,KAAK,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,GAAG,OAAO,CAEvF;AAED,MAAM,MAAM,WAAW,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAC/D,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,yBAAyB,GAAG,WAAW,CAAC;AAEhF,iEAAiE;AACjE,wBAAgB,cAAc,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,cAAc,CAInE;AAED,MAAM,WAAW,UAAU;IACzB,eAAe,EAAE,OAAO,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,uEAAuE;AACvE,wBAAgB,cAAc,CAAC,KAAK,EAAE;IACpC,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACtC,aAAa,EAAE,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC;IAC1C,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B,GAAG,UAAU,CAWb"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Regels voor de publicatiestatus van een artikel (1.0.130).
|
|
3
|
+
* - Een artikel met een Floriday-id telt als gepubliceerd.
|
|
4
|
+
* - Een mislukte controle is een waarschuwing, geen mislukte publicatie.
|
|
5
|
+
* - Wijzigingen gaan naar Floriday als er een Floriday-id is, tenzij er een
|
|
6
|
+
* reden is waarom dat niet kan; die reden wordt dan getoond.
|
|
7
|
+
*/
|
|
8
|
+
export function isPublishedToFloriday(...ids) {
|
|
9
|
+
return ids.some((id) => typeof id === "string" && id.trim().length > 0);
|
|
10
|
+
}
|
|
11
|
+
/** Alleen de artikelstap bepaalt of de publicatie mislukt is. */
|
|
12
|
+
export function publishOutcome(steps) {
|
|
13
|
+
const failed = steps.filter((s) => s.status === "failed");
|
|
14
|
+
if (failed.some((s) => s.step_key === "trade-item"))
|
|
15
|
+
return "failed";
|
|
16
|
+
return failed.length ? "succeeded_with_warnings" : "succeeded";
|
|
17
|
+
}
|
|
18
|
+
/** Wat het bewerkscherm belooft over het versturen van wijzigingen. */
|
|
19
|
+
export function editTargetText(input) {
|
|
20
|
+
if (!isPublishedToFloriday(input.floridayId)) {
|
|
21
|
+
return { sendsToFloriday: false, text: "Dit artikel staat nog niet in Floriday; wijzigingen blijven in dit systeem." };
|
|
22
|
+
}
|
|
23
|
+
if (input.writeReadOnly) {
|
|
24
|
+
return {
|
|
25
|
+
sendsToFloriday: false,
|
|
26
|
+
text: `Wijzigingen worden nu níet naar Floriday verstuurd: ${input.writeReason ?? "Floriday staat op alleen lezen (oorzaak onbekend)"}.`,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
return { sendsToFloriday: true, text: "Wijzigingen worden direct naar Floriday verstuurd." };
|
|
30
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"floriday-continuous-stock-pull.d.ts","sourceRoot":"","sources":["../../src/server-hooks/floriday-continuous-stock-pull.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"floriday-continuous-stock-pull.d.ts","sourceRoot":"","sources":["../../src/server-hooks/floriday-continuous-stock-pull.ts"],"names":[],"mappings":"AA0LA,oIAAoI;AACpI,wBAAsB,iCAAiC,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,CAE3F"}
|
|
@@ -8,23 +8,10 @@
|
|
|
8
8
|
* bestaande push-hook).
|
|
9
9
|
*
|
|
10
10
|
* Rate limits en CPU-tijd op Cloudflare Workers: max 200 items per run,
|
|
11
|
-
* oudste `fetched_at` eerst;
|
|
11
|
+
* oudste `fetched_at` eerst; 10 artikelen per aanroep van floriday-get.
|
|
12
12
|
*/
|
|
13
13
|
import { runGuardedHook } from "./guard.js";
|
|
14
14
|
const MAX_ITEMS_PER_RUN = 200;
|
|
15
|
-
const PARALLEL = 5;
|
|
16
|
-
async function pMapLimited(items, limit, worker) {
|
|
17
|
-
const results = new Array(items.length);
|
|
18
|
-
let i = 0;
|
|
19
|
-
const runners = Array.from({ length: Math.min(limit, items.length) }, async () => {
|
|
20
|
-
while (i < items.length) {
|
|
21
|
-
const idx = i++;
|
|
22
|
-
results[idx] = await worker(items[idx]);
|
|
23
|
-
}
|
|
24
|
-
});
|
|
25
|
-
await Promise.all(runners);
|
|
26
|
-
return results;
|
|
27
|
-
}
|
|
28
15
|
async function handle(request) {
|
|
29
16
|
{
|
|
30
17
|
void 0;
|
|
@@ -39,7 +26,7 @@ async function handle(request) {
|
|
|
39
26
|
}
|
|
40
27
|
const { getAdminClient } = await import("../lib/supabase-admin.server.js");
|
|
41
28
|
const supabaseAdmin = getAdminClient();
|
|
42
|
-
const {
|
|
29
|
+
const { gatewayReadMany } = await import("../lib/floriday-gateway.server.js");
|
|
43
30
|
const { resolveActiveFloridayConnection } = await import("../lib/floriday-env.server.js");
|
|
44
31
|
const activeConnection = await resolveActiveFloridayConnection(supabaseAdmin);
|
|
45
32
|
const connections = [activeConnection];
|
|
@@ -92,50 +79,50 @@ async function handle(request) {
|
|
|
92
79
|
let ok = 0;
|
|
93
80
|
let fail = 0;
|
|
94
81
|
const upserts = [];
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
82
|
+
// Bundel 10 artikelen per aanroep van floriday-get; de limiet per pad
|
|
83
|
+
// bewaakt Floriday-authenticatie. 429 → wachten volgens retryAfterMs
|
|
84
|
+
// en die artikelen één keer opnieuw vragen.
|
|
85
|
+
const { chunk, interpretContinuousStock } = await import("../lib/floriday-read-contract.js");
|
|
86
|
+
let pending = batch.slice();
|
|
87
|
+
for (let round = 0; round < 2 && pending.length; round++) {
|
|
88
|
+
const retry = [];
|
|
89
|
+
let waitMs = 0;
|
|
90
|
+
for (const group of chunk(pending)) {
|
|
91
|
+
let results;
|
|
92
|
+
try {
|
|
93
|
+
results = await gatewayReadMany(environment, group.map((id) => `/trade-items/${id}/continuous-stock`));
|
|
94
|
+
}
|
|
95
|
+
catch (e) {
|
|
96
|
+
console.error(`[continuous-stock-pull] batch:`, e?.message ?? e);
|
|
97
|
+
fail += group.length;
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
100
|
+
results.forEach((r, i) => {
|
|
101
|
+
const tradeItemId = group[i];
|
|
102
|
+
const o = interpretContinuousStock(r);
|
|
103
|
+
if (o.kind === "pieces") {
|
|
104
104
|
upserts.push({
|
|
105
105
|
connection_id: conn.id,
|
|
106
106
|
trade_item_id: tradeItemId,
|
|
107
|
-
number_of_pieces:
|
|
107
|
+
number_of_pieces: o.pieces,
|
|
108
108
|
fetched_at: new Date().toISOString(),
|
|
109
109
|
});
|
|
110
110
|
ok++;
|
|
111
|
-
return;
|
|
112
111
|
}
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
const pieces = typeof data.numberOfPieces === "number"
|
|
122
|
-
? data.numberOfPieces
|
|
123
|
-
: data.available === true
|
|
124
|
-
? 1
|
|
125
|
-
: 0;
|
|
126
|
-
upserts.push({
|
|
127
|
-
connection_id: conn.id,
|
|
128
|
-
trade_item_id: tradeItemId,
|
|
129
|
-
number_of_pieces: pieces,
|
|
130
|
-
fetched_at: new Date().toISOString(),
|
|
112
|
+
else if (o.kind === "retry" && round === 0) {
|
|
113
|
+
retry.push(tradeItemId);
|
|
114
|
+
waitMs = Math.max(waitMs, o.waitMs);
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
console.error(`[continuous-stock-pull] ${tradeItemId}: ${o.kind === "fail" ? o.error : "429"}`);
|
|
118
|
+
fail++;
|
|
119
|
+
}
|
|
131
120
|
});
|
|
132
|
-
ok++;
|
|
133
|
-
}
|
|
134
|
-
catch (e) {
|
|
135
|
-
console.error(`[continuous-stock-pull] ${tradeItemId}:`, e?.message ?? e);
|
|
136
|
-
fail++;
|
|
137
121
|
}
|
|
138
|
-
|
|
122
|
+
pending = retry;
|
|
123
|
+
if (pending.length)
|
|
124
|
+
await new Promise((r) => setTimeout(r, Math.min(waitMs, 10000)));
|
|
125
|
+
}
|
|
139
126
|
if (upserts.length) {
|
|
140
127
|
const { error: upErr } = await supabaseAdmin
|
|
141
128
|
.from("floriday_continuous_stock_cache")
|