@flowselections/floriday-voorraad 1.0.129 → 1.0.131
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/integrations/supabase/types.d.ts +779 -0
- package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
- 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/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 +31 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"release-130.test.d.ts","sourceRoot":"","sources":["../../../src/lib/__tests__/release-130.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
|
|
2
|
+
import { READ_ROUTE_MISSING, chunk, interpretContinuousStock, parseReadResponse, toReadRequest, } from "../floriday-read-contract.js";
|
|
3
|
+
import { editTargetText, isPublishedToFloriday, publishOutcome } from "../publish-status.js";
|
|
4
|
+
import { priceStatus } from "../price-status.js";
|
|
5
|
+
import { validateStep } from "../floriday-payload.js";
|
|
6
|
+
vi.mock("../supabase-admin.server", () => ({
|
|
7
|
+
getAdminClient: () => ({
|
|
8
|
+
from: () => ({
|
|
9
|
+
select: () => ({ eq: () => ({ maybeSingle: async () => ({ data: null }) }) }),
|
|
10
|
+
upsert: async () => ({ error: null }),
|
|
11
|
+
}),
|
|
12
|
+
}),
|
|
13
|
+
}));
|
|
14
|
+
describe("leesroute floriday-get", () => {
|
|
15
|
+
it("haalt het voorvoegsel /suppliers-api-2026v1 weg en zet de query apart", () => {
|
|
16
|
+
expect(toReadRequest("/suppliers-api-2026v1/trade-items/abc/continuous-stock")).toEqual({
|
|
17
|
+
method: "GET",
|
|
18
|
+
path: "/trade-items/abc/continuous-stock",
|
|
19
|
+
});
|
|
20
|
+
expect(toReadRequest("/suppliers-api-2026v1/trade-items/base-supply?year=2026&week=44")).toEqual({
|
|
21
|
+
method: "GET",
|
|
22
|
+
path: "/trade-items/base-supply",
|
|
23
|
+
query: { year: "2026", week: "44" },
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
it("bundelt per 10", () => {
|
|
27
|
+
expect(chunk(Array.from({ length: 23 }, (_, i) => i)).map((c) => c.length)).toEqual([10, 10, 3]);
|
|
28
|
+
});
|
|
29
|
+
it("HTML of 404 van de route = leesroute ontbreekt, nooit ruwe HTML", () => {
|
|
30
|
+
expect(() => parseReadResponse(404, "text/html", "<html>Not found</html>", 1)).toThrow(READ_ROUTE_MISSING);
|
|
31
|
+
});
|
|
32
|
+
it("404 per artikel = geen beschikbaarheid; 429 = wachten volgens retryAfterMs", () => {
|
|
33
|
+
const [a, b, c] = parseReadResponse(200, "application/json", JSON.stringify({
|
|
34
|
+
ok: true,
|
|
35
|
+
results: [
|
|
36
|
+
{ ok: false, status: 404, path: "/trade-items/a/continuous-stock", error: "not found" },
|
|
37
|
+
{ ok: false, status: 429, path: "/trade-items/b/continuous-stock", error: "rate", retryAfterMs: 2500 },
|
|
38
|
+
{ ok: true, status: 200, path: "/trade-items/c/continuous-stock", data: { numberOfPieces: 7 } },
|
|
39
|
+
],
|
|
40
|
+
}), 3);
|
|
41
|
+
expect(interpretContinuousStock(a)).toEqual({ kind: "pieces", pieces: 0 });
|
|
42
|
+
expect(interpretContinuousStock(b)).toEqual({ kind: "retry", waitMs: 2500 });
|
|
43
|
+
expect(interpretContinuousStock(c)).toEqual({ kind: "pieces", pieces: 7 });
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
describe("gatewayRead via floriday-get (gemockt, niets naar Floriday)", () => {
|
|
47
|
+
const realFetch = globalThis.fetch;
|
|
48
|
+
beforeEach(() => {
|
|
49
|
+
process.env.FLORIDAY_GATEWAY_URL = "https://shell.test";
|
|
50
|
+
process.env.FLORIDAY_GATEWAY_SECRET = "test-secret";
|
|
51
|
+
});
|
|
52
|
+
afterEach(() => {
|
|
53
|
+
globalThis.fetch = realFetch;
|
|
54
|
+
});
|
|
55
|
+
it("stuurt één GET-verzoek zonder voorvoegsel naar /api/public/gateway/floriday-get", async () => {
|
|
56
|
+
const calls = [];
|
|
57
|
+
globalThis.fetch = vi.fn(async (url, init) => {
|
|
58
|
+
calls.push({ url: String(url), body: JSON.parse(init.body) });
|
|
59
|
+
return new Response(JSON.stringify({ ok: true, environment: "staging", results: [{ ok: true, status: 200, path: "/trade-items/x", data: { id: "x" } }] }), { status: 200, headers: { "content-type": "application/json" } });
|
|
60
|
+
});
|
|
61
|
+
const { gatewayRead } = await import("../floriday-gateway.server.js");
|
|
62
|
+
const res = await gatewayRead({ environment: "staging", path: "/suppliers-api-2026v1/trade-items/x" });
|
|
63
|
+
expect(calls[0].url).toBe("https://shell.test/api/public/gateway/floriday-get");
|
|
64
|
+
expect(calls[0].body.requests).toEqual([{ method: "GET", path: "/trade-items/x" }]);
|
|
65
|
+
expect(res).toMatchObject({ ok: true, status: 200, data: { id: "x" } });
|
|
66
|
+
});
|
|
67
|
+
it("ontbrekende route geeft 'leesroute ontbreekt in de shell'", async () => {
|
|
68
|
+
globalThis.fetch = vi.fn(async () => new Response("<html>404</html>", { status: 404, headers: { "content-type": "text/html" } }));
|
|
69
|
+
const { gatewayRead } = await import("../floriday-gateway.server.js");
|
|
70
|
+
await expect(gatewayRead({ environment: "staging", path: "/trade-items/x" })).rejects.toThrow(/Leesroute ontbreekt in de shell/);
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
describe("publicatiestatus", () => {
|
|
74
|
+
it("een artikel met een Floriday-id telt als gepubliceerd", () => {
|
|
75
|
+
expect(isPublishedToFloriday(null, "ea7776dd-cdee-46e3-ab2a-ffd970bd8d7b")).toBe(true);
|
|
76
|
+
expect(isPublishedToFloriday(null, "")).toBe(false);
|
|
77
|
+
});
|
|
78
|
+
it("artikel gelukt + controle mislukt = waarschuwing, niet mislukt", () => {
|
|
79
|
+
expect(publishOutcome([{ step_key: "trade-item", status: "succeeded" }, { step_key: "verify", status: "failed" }])).toBe("succeeded_with_warnings");
|
|
80
|
+
expect(publishOutcome([{ step_key: "trade-item", status: "failed" }])).toBe("failed");
|
|
81
|
+
});
|
|
82
|
+
it("met Floriday-id gaan wijzigingen naar Floriday, tenzij alleen-lezen (met reden)", () => {
|
|
83
|
+
expect(editTargetText({ floridayId: "x", writeReadOnly: false }).sendsToFloriday).toBe(true);
|
|
84
|
+
const blocked = editTargetText({ floridayId: "x", writeReadOnly: true, writeReason: "verpakkingsverschil" });
|
|
85
|
+
expect(blocked.sendsToFloriday).toBe(false);
|
|
86
|
+
expect(blocked.text).toContain("verpakkingsverschil");
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
describe("prijsstatus", () => {
|
|
90
|
+
const now = Date.parse("2026-10-28T12:00:00Z");
|
|
91
|
+
it("één label per prijsregel", () => {
|
|
92
|
+
expect(priceStatus(null, now)).toBe("none");
|
|
93
|
+
expect(priceStatus({ available_quantity: 500, period_end: "2026-11-30T00:00:00Z" }, now)).toBe("live");
|
|
94
|
+
expect(priceStatus({ available_quantity: 500, period_end: "2026-10-01T00:00:00Z" }, now)).toBe("expired");
|
|
95
|
+
expect(priceStatus({ available_quantity: 0, period_end: null }, now)).toBe("drained");
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
describe("artikelcode bij Volgende", () => {
|
|
99
|
+
it("weigert een invultekst al in de artikelstap", () => {
|
|
100
|
+
const r = validateStep("artikel", { articleCode: "artikelcode", name: "Gaultheria" });
|
|
101
|
+
expect(r.ok).toBe(false);
|
|
102
|
+
});
|
|
103
|
+
});
|
|
@@ -22,7 +22,7 @@ export declare function isoWeekOf(input?: string | Date): {
|
|
|
22
22
|
};
|
|
23
23
|
/** Ligt (jaar, week) in het verleden ten opzichte van nu? */
|
|
24
24
|
export declare function isPastWeek(year: number, week: number): boolean;
|
|
25
|
-
export type RateBucket = "base-supply-write" | "base-supply-read" | "availability-write"
|
|
25
|
+
export type RateBucket = "base-supply-write" | "base-supply-read" | "availability-write";
|
|
26
26
|
export declare function consumeRateLimit(supabaseAdmin: any, connectionId: string, bucket: RateBucket, cost?: number): Promise<{
|
|
27
27
|
granted: boolean;
|
|
28
28
|
waitMs: number;
|
|
@@ -66,12 +66,5 @@ export declare class Floriday2026v1Client {
|
|
|
66
66
|
year: number;
|
|
67
67
|
week: number;
|
|
68
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
69
|
}
|
|
77
70
|
//# sourceMappingURL=floriday-2026v1.server.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"floriday-2026v1.server.d.ts","sourceRoot":"","sources":["../../src/lib/floriday-2026v1.server.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,MAAM,CAAC;AAErD,MAAM,MAAM,UAAU,CAAC,CAAC,GAAG,OAAO,IAAI;IACpC,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,4DAA4D;AAC5D,wBAAgB,SAAS,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAY/E;AAED,6DAA6D;AAC7D,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAG9D;AAOD,MAAM,MAAM,UAAU,GAAG,mBAAmB,GAAG,kBAAkB,GAAG,oBAAoB,
|
|
1
|
+
{"version":3,"file":"floriday-2026v1.server.d.ts","sourceRoot":"","sources":["../../src/lib/floriday-2026v1.server.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,MAAM,CAAC;AAErD,MAAM,MAAM,UAAU,CAAC,CAAC,GAAG,OAAO,IAAI;IACpC,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,4DAA4D;AAC5D,wBAAgB,SAAS,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAY/E;AAED,6DAA6D;AAC7D,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAG9D;AAOD,MAAM,MAAM,UAAU,GAAG,mBAAmB,GAAG,kBAAkB,GAAG,oBAAoB,CAAC;AAUzF,wBAAsB,gBAAgB,CACpC,aAAa,EAAE,GAAG,EAClB,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,UAAU,EAClB,IAAI,SAAI,GACP,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAgB/C;AAMD,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,WAAW,GAAG,QAAQ,GAAG,YAAY,GAAG,QAAQ,GAAG,SAAS,CAAC;AAEhG,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,CAuBzD;AAMD,qBAAa,oBAAoB;IAE7B,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,YAAY;gBAFZ,aAAa,EAAE,GAAG,EAClB,WAAW,EAAE,mBAAmB,EAChC,YAAY,EAAE,MAAM;YAGzB,KAAK;YA+BL,IAAI;IAclB,uEAAuE;IACvE,sBAAsB,CAAC,MAAM,EAAE;QAC7B,WAAW,EAAE,MAAM,CAAC;QACpB,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,cAAc,EAAE,MAAM,CAAC;QACvB,aAAa,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,GAAG,OAAO,CAAC,UAAU,CAAC;IAevB,oEAAoE;IACpE,6BAA6B,CAAC,MAAM,EAAE;QACpC,WAAW,EAAE,MAAM,CAAC;QACpB,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,cAAc,EAAE,MAAM,CAAC;KACxB,GAAG,OAAO,CAAC,UAAU,CAAC;IAYvB,6EAA6E;IAC7E,kCAAkC,CAAC,MAAM,EAAE;QACzC,YAAY,EAAE,MAAM,EAAE,CAAC;QACvB,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,OAAO,CAAC;QACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,GAAG,OAAO,CAAC,UAAU,CAAC;IAqBvB,yEAAyE;IACzE,qBAAqB,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;CAQxF"}
|
|
@@ -31,7 +31,6 @@ const BUCKET_LIMITS = {
|
|
|
31
31
|
// Lezen van base-supply is hard begrensd op 1/s (burst 20).
|
|
32
32
|
"base-supply-read": { capacity: 20, refillPerSec: 1 },
|
|
33
33
|
"availability-write": { capacity: 100, refillPerSec: 5 },
|
|
34
|
-
"sales-orders-read": { capacity: 60, refillPerSec: 2 },
|
|
35
34
|
};
|
|
36
35
|
export async function consumeRateLimit(supabaseAdmin, connectionId, bucket, cost = 1) {
|
|
37
36
|
const limits = BUCKET_LIMITS[bucket];
|
|
@@ -176,13 +175,4 @@ export class Floriday2026v1Client {
|
|
|
176
175
|
getWeeklyBaseSupplies(params) {
|
|
177
176
|
return this.read(`${API}/trade-items/base-supply?year=${params.year}&week=${params.week}`, "base-supply-read");
|
|
178
177
|
}
|
|
179
|
-
/** Verkooporders vanaf een sequencenummer. */
|
|
180
|
-
syncSalesOrders(params) {
|
|
181
|
-
const limit = Math.min(Math.max(params.limit ?? 50, 1), 200);
|
|
182
|
-
return this.read(`${API}/sales-orders/sync/${params.sequenceNumber}?limit=${limit}`, "sales-orders-read");
|
|
183
|
-
}
|
|
184
|
-
/** Hoogste beschikbare sequencenummer voor verkooporders. */
|
|
185
|
-
getSalesOrderMaxSequence() {
|
|
186
|
-
return this.read(`${API}/sales-orders/current-max-sequence`, "sales-orders-read");
|
|
187
|
-
}
|
|
188
178
|
}
|
|
@@ -51,6 +51,12 @@ export declare const gatewayReadFn: import("@tanstack/start-client-core").Requir
|
|
|
51
51
|
userId: string;
|
|
52
52
|
claims: import("@supabase/auth-js").JwtPayload;
|
|
53
53
|
}, undefined, undefined, undefined>], (d: ReadArgs) => ReadArgs, Promise<Record<string, any>>>;
|
|
54
|
+
/** Controleert of elke gateway-route die Voorraad gebruikt in de shell bestaat. */
|
|
55
|
+
export declare const probeGatewayRoutesFn: import("@tanstack/start-client-core").OptionalFetcher<readonly [import("@tanstack/start-client-core").FunctionMiddlewareAfterServer<{}, unknown, undefined, undefined, undefined, undefined, undefined>, import("@tanstack/start-client-core").FunctionMiddlewareAfterServer<{}, unknown, undefined, {
|
|
56
|
+
supabase: import("../integrations/supabase/auth-middleware.js").AuthedSupabaseClient;
|
|
57
|
+
userId: string;
|
|
58
|
+
claims: import("@supabase/auth-js").JwtPayload;
|
|
59
|
+
}, undefined, undefined, undefined>], undefined, Promise<Record<string, any>>>;
|
|
54
60
|
type SupplyLineArgs = {
|
|
55
61
|
tradeItemId: string;
|
|
56
62
|
pricePerPiece: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"floriday-gateway.functions.d.ts","sourceRoot":"","sources":["../../src/lib/floriday-gateway.functions.ts"],"names":[],"mappings":"AAQA,KAAK,UAAU,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,CAAC;AAC/D,KAAK,YAAY,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AACzC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACjE,KAAK,cAAc,GAAG;IAAE,MAAM,EAAE,aAAa,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAChE,KAAK,SAAS,GAAG;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,OAAO,CAAC;IACd,aAAa,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CACvD,CAAC;AAsBF,eAAO,MAAM,eAAe;;;;0CAEN,UAAU,8CAU7B,CAAC;AAEJ,eAAO,MAAM,iBAAiB;;;;0CAER,YAAY,gDAQ/B,CAAC;AAEJ,eAAO,MAAM,mBAAmB;;;;0CAEV,cAAc,kDAQjC,CAAC;AAEJ,eAAO,MAAM,cAAc;;;;0CAEL,SAAS,6CAQ5B,CAAC;AAIJ,KAAK,QAAQ,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjC,eAAO,MAAM,aAAa;;;;0CAEJ,QAAQ,4CAW3B,CAAC;AAMJ,KAAK,cAAc,GAAG;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,UAAU,CAAC,EAAE,eAAe,GAAG,aAAa,GAAG,oBAAoB,CAAC;IACpE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,uBAAuB,CAAC,EAAE,MAAM,EAAE,CAAC;CACpC,CAAC;AAoBF,eAAO,MAAM,mBAAmB;;;;0CAEV,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuJjC,CAAC"}
|
|
1
|
+
{"version":3,"file":"floriday-gateway.functions.d.ts","sourceRoot":"","sources":["../../src/lib/floriday-gateway.functions.ts"],"names":[],"mappings":"AAQA,KAAK,UAAU,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,CAAC;AAC/D,KAAK,YAAY,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AACzC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACjE,KAAK,cAAc,GAAG;IAAE,MAAM,EAAE,aAAa,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAChE,KAAK,SAAS,GAAG;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,OAAO,CAAC;IACd,aAAa,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CACvD,CAAC;AAsBF,eAAO,MAAM,eAAe;;;;0CAEN,UAAU,8CAU7B,CAAC;AAEJ,eAAO,MAAM,iBAAiB;;;;0CAER,YAAY,gDAQ/B,CAAC;AAEJ,eAAO,MAAM,mBAAmB;;;;0CAEV,cAAc,kDAQjC,CAAC;AAEJ,eAAO,MAAM,cAAc;;;;0CAEL,SAAS,6CAQ5B,CAAC;AAIJ,KAAK,QAAQ,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjC,eAAO,MAAM,aAAa;;;;0CAEJ,QAAQ,4CAW3B,CAAC;AAEJ,mFAAmF;AACnF,eAAO,MAAM,oBAAoB;;;;8EAO9B,CAAC;AAMJ,KAAK,cAAc,GAAG;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,UAAU,CAAC,EAAE,eAAe,GAAG,aAAa,GAAG,oBAAoB,CAAC;IACpE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,uBAAuB,CAAC,EAAE,MAAM,EAAE,CAAC;CACpC,CAAC;AAoBF,eAAO,MAAM,mBAAmB;;;;0CAEV,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuJjC,CAAC"}
|
|
@@ -73,6 +73,13 @@ export const gatewayReadFn = createServerFn({ method: "POST" })
|
|
|
73
73
|
const environment = await resolveFloridayEnvironment(context.supabase);
|
|
74
74
|
return (await gatewayRead({ path: data.path, environment }));
|
|
75
75
|
}));
|
|
76
|
+
/** Controleert of elke gateway-route die Voorraad gebruikt in de shell bestaat. */
|
|
77
|
+
export const probeGatewayRoutesFn = createServerFn({ method: "POST" })
|
|
78
|
+
.middleware([normalizeErrors, requireSupabaseAuth])
|
|
79
|
+
.handler(async () => safe("gateway.routes", async () => {
|
|
80
|
+
const { probeGatewayRoutes } = await import("./floriday-gateway.server.js");
|
|
81
|
+
return { routes: await probeGatewayRoutes() };
|
|
82
|
+
}));
|
|
76
83
|
function isoWeekParts(input) {
|
|
77
84
|
const parsed = input ? new Date(input) : new Date();
|
|
78
85
|
const source = Number.isNaN(parsed.getTime()) ? new Date() : parsed;
|
|
@@ -33,17 +33,18 @@ export interface GatewayResolutionInfo {
|
|
|
33
33
|
export declare function describeGatewayResolution(): Promise<GatewayResolutionInfo>;
|
|
34
34
|
export interface GatewayReadInput {
|
|
35
35
|
environment: "staging" | "live";
|
|
36
|
-
/**
|
|
37
|
-
* Volledig Floriday-pad, inclusief API-versie, bv.
|
|
38
|
-
* `/suppliers-api-2026v1/trade-items/{id}/continuous-stock`.
|
|
39
|
-
*/
|
|
36
|
+
/** Floriday-pad; een voorvoegsel /suppliers-api-2026v1 wordt weggehaald. */
|
|
40
37
|
path: string;
|
|
41
38
|
}
|
|
42
39
|
export interface GatewayReadResult<T = unknown> {
|
|
43
40
|
ok: boolean;
|
|
44
41
|
status: number;
|
|
45
42
|
data: T | null;
|
|
43
|
+
error?: string;
|
|
44
|
+
retryAfterMs?: number;
|
|
46
45
|
}
|
|
46
|
+
/** 1–10 leesverzoeken in één aanroep; resultaat per verzoek in dezelfde volgorde. */
|
|
47
|
+
export declare function gatewayReadMany(environment: "staging" | "live", paths: string[]): Promise<import("./floriday-read-contract.js").FloridayReadResult[]>;
|
|
47
48
|
export declare function gatewayRead<T = unknown>(input: GatewayReadInput): Promise<GatewayReadResult<T>>;
|
|
48
49
|
export interface GatewaySchemaInput {
|
|
49
50
|
environment: "staging" | "live";
|
|
@@ -196,4 +197,16 @@ export declare function gatewaySupplyLineWeek(input: SupplyLineWeekInput): Promi
|
|
|
196
197
|
httpStatus: number;
|
|
197
198
|
body: any;
|
|
198
199
|
}>;
|
|
200
|
+
export declare function recordGatewayRouteStatus(route: string, status: "aanwezig" | "ontbreekt", detail?: string): Promise<void>;
|
|
201
|
+
/**
|
|
202
|
+
* Controleert actief of elke gateway-route bestaat, zonder iets naar
|
|
203
|
+
* Floriday te sturen: een leeg verzoek moet een JSON-antwoord (meestal 400)
|
|
204
|
+
* geven; 404 of HTML = route ontbreekt.
|
|
205
|
+
*/
|
|
206
|
+
export declare function probeGatewayRoutes(): Promise<Array<{
|
|
207
|
+
route: string;
|
|
208
|
+
status: "aanwezig" | "ontbreekt";
|
|
209
|
+
http: number | null;
|
|
210
|
+
detail?: string;
|
|
211
|
+
}>>;
|
|
199
212
|
//# sourceMappingURL=floriday-gateway.server.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"floriday-gateway.server.d.ts","sourceRoot":"","sources":["../../src/lib/floriday-gateway.server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAqDH;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,aAAa,EAAE,UAAU,GAAG,SAAS,GAAG,UAAU,CAAC;IACnD,YAAY,EAAE,UAAU,GAAG,SAAS,GAAG,UAAU,CAAC;IAClD,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,wBAAsB,yBAAyB,IAAI,OAAO,CAAC,qBAAqB,CAAC,CA6ChF;AA2HD,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,SAAS,GAAG,MAAM,CAAC;IAChC
|
|
1
|
+
{"version":3,"file":"floriday-gateway.server.d.ts","sourceRoot":"","sources":["../../src/lib/floriday-gateway.server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAqDH;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,aAAa,EAAE,UAAU,GAAG,SAAS,GAAG,UAAU,CAAC;IACnD,YAAY,EAAE,UAAU,GAAG,SAAS,GAAG,UAAU,CAAC;IAClD,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,wBAAsB,yBAAyB,IAAI,OAAO,CAAC,qBAAqB,CAAC,CA6ChF;AA2HD,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,SAAS,GAAG,MAAM,CAAC;IAChC,4EAA4E;IAC5E,IAAI,EAAE,MAAM,CAAC;CACd;AACD,MAAM,WAAW,iBAAiB,CAAC,CAAC,GAAG,OAAO;IAC5C,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,qFAAqF;AACrF,wBAAsB,eAAe,CACnC,WAAW,EAAE,SAAS,GAAG,MAAM,EAC/B,KAAK,EAAE,MAAM,EAAE,GACd,OAAO,CAAC,OAAO,0BAA0B,EAAE,kBAAkB,EAAE,CAAC,CAkBlE;AAED,wBAAsB,WAAW,CAAC,CAAC,GAAG,OAAO,EAC3C,KAAK,EAAE,gBAAgB,GACtB,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAG/B;AAID,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,SAAS,GAAG,MAAM,CAAC;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AACD,wBAAgB,aAAa,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,CAAC,CAAC,CAEhF;AAID,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,SAAS,GAAG,MAAM,CAAC;IAChC,QAAQ,EAAE,MAAM,CAAC;CAClB;AACD,wBAAgB,eAAe,CAAC,CAAC,GAAG,OAAO,EACzC,KAAK,EAAE,oBAAoB,GAC1B,OAAO,CAAC,CAAC,CAAC,CAEZ;AAID,OAAO,EAAmB,KAAK,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAElF,MAAM,WAAW,sBAAsB;IACrC,WAAW,EAAE,SAAS,GAAG,MAAM,CAAC;IAChC;;;;OAIG;IACH,MAAM,EAAE,aAAa,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AACD,wBAAgB,iBAAiB,CAAC,CAAC,GAAG,OAAO,EAC3C,KAAK,EAAE,sBAAsB,GAC5B,OAAO,CAAC,CAAC,CAAC,CAUZ;AAID,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,SAAS,GAAG,MAAM,CAAC;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,OAAO,CAAC;IACd,aAAa,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CACvD;AACD,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,GAAG,CAAC;IACV,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB;AACD;;;GAGG;AACH,wBAAsB,YAAY,CAChC,KAAK,EAAE,iBAAiB,GAAG;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAC/C,OAAO,CAAC,kBAAkB,CAAC,CAmC7B;AAKD,MAAM,WAAW,sBAAsB;IACrC,WAAW,EAAE,SAAS,GAAG,MAAM,CAAC;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,UAAU,CAAC,EAAE,eAAe,GAAG,aAAa,CAAC;IAC7C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,uBAAuB,CAAC,EAAE,MAAM,EAAE,CAAC;CACpC;AACD,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,OAAO,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AACD,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,sBAAsB,GAC5B,OAAO,CAAC,uBAAuB,CAAC,CAWlC;AAKD,MAAM,WAAW,uBAAuB;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,SAAS,GAAG,MAAM,CAAC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,UAAU,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACtC;AAED,MAAM,WAAW,wBAAwB;IACvC,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,GAAG,CAAC;IACV,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AASD;;;;GAIG;AACH,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,uBAAuB,GAC7B,OAAO,CAAC,wBAAwB,CAAC,CAqEnC;AAID,MAAM,WAAW,wBAAwB;IACvC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,SAAS,GAAG,MAAM,CAAC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,QAAQ,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3E,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,mBAAmB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED;;;;GAIG;AACH,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,wBAAwB,GAC/B,OAAO,CAAC,IAAI,CAAC,CAmBf;AAID,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,eAAe,CAAC;IAC5B,uBAAuB,EAAE,OAAO,CAAC;IACjC,WAAW,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;CAClC;AAED;;;;;GAKG;AACH,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,mBAAmB,GACzB,OAAO,CAAC;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,GAAG,CAAA;CAAE,CAAC,CAqB5C;AAYD,wBAAsB,wBAAwB,CAC5C,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,UAAU,GAAG,WAAW,EAChC,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CAmBf;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,UAAU,GAAG,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAiBpJ"}
|
|
@@ -190,8 +190,30 @@ async function gatewayPost(path, body) {
|
|
|
190
190
|
}
|
|
191
191
|
return parsed;
|
|
192
192
|
}
|
|
193
|
-
|
|
194
|
-
|
|
193
|
+
/** 1–10 leesverzoeken in één aanroep; resultaat per verzoek in dezelfde volgorde. */
|
|
194
|
+
export async function gatewayReadMany(environment, paths) {
|
|
195
|
+
const c = await import("./floriday-read-contract.js");
|
|
196
|
+
if (paths.length < 1 || paths.length > c.FLORIDAY_READ_MAX_BATCH) {
|
|
197
|
+
throw new Error(`floriday-get neemt 1–${c.FLORIDAY_READ_MAX_BATCH} verzoeken (kreeg ${paths.length}).`);
|
|
198
|
+
}
|
|
199
|
+
const raw = JSON.stringify({ environment, requests: paths.map(c.toReadRequest) });
|
|
200
|
+
const res = await doSignedFetch(c.FLORIDAY_READ_ROUTE, raw);
|
|
201
|
+
const text = await res.text();
|
|
202
|
+
try {
|
|
203
|
+
const results = c.parseReadResponse(res.status, res.headers.get("content-type") ?? "", text, paths.length);
|
|
204
|
+
void recordGatewayRouteStatus(c.FLORIDAY_READ_ROUTE, "aanwezig");
|
|
205
|
+
return results;
|
|
206
|
+
}
|
|
207
|
+
catch (e) {
|
|
208
|
+
if (e.message === c.READ_ROUTE_MISSING) {
|
|
209
|
+
void recordGatewayRouteStatus(c.FLORIDAY_READ_ROUTE, "ontbreekt", `HTTP ${res.status}`);
|
|
210
|
+
}
|
|
211
|
+
throw e;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
export async function gatewayRead(input) {
|
|
215
|
+
const [r] = await gatewayReadMany(input.environment, [input.path]);
|
|
216
|
+
return { ok: r.ok, status: r.status, data: r.data, error: r.error, retryAfterMs: r.retryAfterMs };
|
|
195
217
|
}
|
|
196
218
|
export function gatewaySchema(input) {
|
|
197
219
|
return gatewayPost("/api/public/gateway/schema", input);
|
|
@@ -388,3 +410,59 @@ export async function gatewaySupplyLineWeek(input) {
|
|
|
388
410
|
throw new Error(`supply-line: leeg antwoord (status=${res.status})`);
|
|
389
411
|
return { httpStatus: res.status, body };
|
|
390
412
|
}
|
|
413
|
+
// ---------- Route-status (voor voorraad_install_check) ----------------------
|
|
414
|
+
//
|
|
415
|
+
// Elke gateway-route die Voorraad aanroept moet in de shell bestaan. De
|
|
416
|
+
// database kan het serverRoutes-manifest van de shell niet lezen; daarom legt
|
|
417
|
+
// de server per route de laatst geziene stand vast in
|
|
418
|
+
// module_runtime_config.voorraad_gateway_routes, en leest
|
|
419
|
+
// voorraad_install_check() die rij. Hooguit één schrijfactie per route per 10 min.
|
|
420
|
+
const lastRecorded = new Map();
|
|
421
|
+
export async function recordGatewayRouteStatus(route, status, detail) {
|
|
422
|
+
const prev = lastRecorded.get(route);
|
|
423
|
+
if (prev && prev.status === status && Date.now() - prev.at < 600000)
|
|
424
|
+
return;
|
|
425
|
+
lastRecorded.set(route, { status, at: Date.now() });
|
|
426
|
+
try {
|
|
427
|
+
const { getAdminClient } = await import("./supabase-admin.server.js");
|
|
428
|
+
const admin = getAdminClient();
|
|
429
|
+
const { data } = await admin
|
|
430
|
+
.from("module_runtime_config").select("value").eq("key", "voorraad_gateway_routes").maybeSingle();
|
|
431
|
+
let current = {};
|
|
432
|
+
try {
|
|
433
|
+
current = data?.value ? JSON.parse(data.value) : {};
|
|
434
|
+
}
|
|
435
|
+
catch {
|
|
436
|
+
current = {};
|
|
437
|
+
}
|
|
438
|
+
current[route] = { status, detail: detail ?? null, checked_at: new Date().toISOString() };
|
|
439
|
+
await admin.from("module_runtime_config").upsert({ key: "voorraad_gateway_routes", value: JSON.stringify(current) }, { onConflict: "key" });
|
|
440
|
+
}
|
|
441
|
+
catch {
|
|
442
|
+
// Vastleggen mag nooit een Floriday-actie laten mislukken.
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
/**
|
|
446
|
+
* Controleert actief of elke gateway-route bestaat, zonder iets naar
|
|
447
|
+
* Floriday te sturen: een leeg verzoek moet een JSON-antwoord (meestal 400)
|
|
448
|
+
* geven; 404 of HTML = route ontbreekt.
|
|
449
|
+
*/
|
|
450
|
+
export async function probeGatewayRoutes() {
|
|
451
|
+
const { VOORRAAD_GATEWAY_ROUTES } = await import("./floriday-read-contract.js");
|
|
452
|
+
const out = [];
|
|
453
|
+
for (const route of VOORRAAD_GATEWAY_ROUTES) {
|
|
454
|
+
try {
|
|
455
|
+
const res = await doSignedFetch(route, JSON.stringify({ probe: true }));
|
|
456
|
+
const ct = res.headers.get("content-type") ?? "";
|
|
457
|
+
await res.text();
|
|
458
|
+
const present = ct.toLowerCase().includes("application/json") && res.status !== 404;
|
|
459
|
+
const status = present ? "aanwezig" : "ontbreekt";
|
|
460
|
+
out.push({ route, status, http: res.status });
|
|
461
|
+
await recordGatewayRouteStatus(route, status, `HTTP ${res.status}`);
|
|
462
|
+
}
|
|
463
|
+
catch (e) {
|
|
464
|
+
out.push({ route, status: "ontbreekt", http: null, detail: e.message });
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
return out;
|
|
468
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"floriday-payload.d.ts","sourceRoot":"","sources":["../../src/lib/floriday-payload.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"floriday-payload.d.ts","sourceRoot":"","sources":["../../src/lib/floriday-payload.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
// Belangrijk: dit is een PURE module - geen Supabase / fetch calls.
|
|
5
5
|
// De wizard bouwt het WizardData object en roept hier `buildAddTradeItemPayload`.
|
|
6
6
|
import { z } from "zod";
|
|
7
|
-
import { assertArticleCode } from "./article-code.js";
|
|
7
|
+
import { articleCodeProblem, assertArticleCode } from "./article-code.js";
|
|
8
8
|
/** Hardcoded lijst met aangesloten verpakkingsleveranciers zoals in Floriday. */
|
|
9
9
|
export const PACKAGING_SUPPLIERS = [
|
|
10
10
|
{ id: "anylabel", name: "Anylabel" },
|
|
@@ -145,9 +145,14 @@ export function validateStep(key, data) {
|
|
|
145
145
|
}
|
|
146
146
|
case "artikel": {
|
|
147
147
|
const r = stepSchemas.artikel.safeParse(data);
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
148
|
+
const errors = r.success ? [] : r.error.issues.map((i) => i.message);
|
|
149
|
+
// 1.0.130: invulteksten al bij "Volgende" weigeren, niet pas bij opslaan.
|
|
150
|
+
if ((data.articleCode ?? "").trim()) {
|
|
151
|
+
const problem = articleCodeProblem(data.articleCode, data.name, "manual");
|
|
152
|
+
if (problem)
|
|
153
|
+
errors.unshift(`${problem} Vul de echte artikelcode in.`);
|
|
154
|
+
}
|
|
155
|
+
return errors.length ? { ok: false, errors } : { ok: true };
|
|
151
156
|
}
|
|
152
157
|
case "paspoort": {
|
|
153
158
|
if (data.productGroup === "CUT_FLOWER")
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Contract van de leesroute van Floriday-authenticatie (1.0.130):
|
|
3
|
+
* POST /api/public/gateway/floriday-get
|
|
4
|
+
* { requests: [{ method: "GET", path, query }] } (1–10 items)
|
|
5
|
+
* → { ok, environment, results: [{ ok, status, path, data } |
|
|
6
|
+
* { ok:false, status, path, error, retryAfterMs? }] }
|
|
7
|
+
* Paden ZONDER het voorvoegsel /suppliers-api-2026v1.
|
|
8
|
+
*
|
|
9
|
+
* Puur (geen netwerk), zodat het in tests zonder Floriday te controleren is.
|
|
10
|
+
*/
|
|
11
|
+
export declare const FLORIDAY_READ_ROUTE = "/api/public/gateway/floriday-get";
|
|
12
|
+
export declare const FLORIDAY_READ_MAX_BATCH = 10;
|
|
13
|
+
/** Alle gateway-routes die Voorraad aanroept (voor de install-check). */
|
|
14
|
+
export declare const VOORRAAD_GATEWAY_ROUTES: readonly ["/api/public/gateway/write", "/api/public/gateway/floriday-get"];
|
|
15
|
+
export declare const READ_ROUTE_MISSING: string;
|
|
16
|
+
export interface FloridayReadRequest {
|
|
17
|
+
method: "GET";
|
|
18
|
+
path: string;
|
|
19
|
+
query?: Record<string, string | number>;
|
|
20
|
+
}
|
|
21
|
+
export interface FloridayReadResult<T = unknown> {
|
|
22
|
+
ok: boolean;
|
|
23
|
+
status: number;
|
|
24
|
+
path: string;
|
|
25
|
+
data: T | null;
|
|
26
|
+
error?: string;
|
|
27
|
+
retryAfterMs?: number;
|
|
28
|
+
}
|
|
29
|
+
/** Haalt het API-voorvoegsel weg en verplaatst een querystring naar `query`. */
|
|
30
|
+
export declare function toReadRequest(fullPath: string): FloridayReadRequest;
|
|
31
|
+
export declare function chunk<T>(items: T[], size?: number): T[][];
|
|
32
|
+
/**
|
|
33
|
+
* Beoordeelt het HTTP-antwoord van de route zelf. Een HTML- of 404-antwoord
|
|
34
|
+
* betekent dat de route in de shell ontbreekt — nooit de ruwe HTML tonen.
|
|
35
|
+
*/
|
|
36
|
+
export declare function parseReadResponse(httpStatus: number, contentType: string, text: string, expected: number): FloridayReadResult[];
|
|
37
|
+
/** Uitkomst voor één continuous-stock-resultaat. */
|
|
38
|
+
export type ContinuousStockOutcome = {
|
|
39
|
+
kind: "pieces";
|
|
40
|
+
pieces: number;
|
|
41
|
+
} | {
|
|
42
|
+
kind: "retry";
|
|
43
|
+
waitMs: number;
|
|
44
|
+
} | {
|
|
45
|
+
kind: "fail";
|
|
46
|
+
error: string;
|
|
47
|
+
};
|
|
48
|
+
export declare function interpretContinuousStock(r: FloridayReadResult<any>): ContinuousStockOutcome;
|
|
49
|
+
//# sourceMappingURL=floriday-read-contract.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"floriday-read-contract.d.ts","sourceRoot":"","sources":["../../src/lib/floriday-read-contract.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,eAAO,MAAM,mBAAmB,qCAAqC,CAAC;AACtE,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAE1C,yEAAyE;AACzE,eAAO,MAAM,uBAAuB,4EAG1B,CAAC;AAEX,eAAO,MAAM,kBAAkB,QAEwB,CAAC;AAExD,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,KAAK,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;CACzC;AAED,MAAM,WAAW,kBAAkB,CAAC,CAAC,GAAG,OAAO;IAC7C,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAID,gFAAgF;AAChF,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,mBAAmB,CAWnE;AAED,wBAAgB,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,IAAI,SAA0B,GAAG,CAAC,EAAE,EAAE,CAI1E;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GACf,kBAAkB,EAAE,CAiCtB;AAED,oDAAoD;AACpD,MAAM,MAAM,sBAAsB,GAC9B;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAClC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEpC,wBAAgB,wBAAwB,CAAC,CAAC,EAAE,kBAAkB,CAAC,GAAG,CAAC,GAAG,sBAAsB,CAW3F"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Contract van de leesroute van Floriday-authenticatie (1.0.130):
|
|
3
|
+
* POST /api/public/gateway/floriday-get
|
|
4
|
+
* { requests: [{ method: "GET", path, query }] } (1–10 items)
|
|
5
|
+
* → { ok, environment, results: [{ ok, status, path, data } |
|
|
6
|
+
* { ok:false, status, path, error, retryAfterMs? }] }
|
|
7
|
+
* Paden ZONDER het voorvoegsel /suppliers-api-2026v1.
|
|
8
|
+
*
|
|
9
|
+
* Puur (geen netwerk), zodat het in tests zonder Floriday te controleren is.
|
|
10
|
+
*/
|
|
11
|
+
export const FLORIDAY_READ_ROUTE = "/api/public/gateway/floriday-get";
|
|
12
|
+
export const FLORIDAY_READ_MAX_BATCH = 10;
|
|
13
|
+
/** Alle gateway-routes die Voorraad aanroept (voor de install-check). */
|
|
14
|
+
export const VOORRAAD_GATEWAY_ROUTES = [
|
|
15
|
+
"/api/public/gateway/write",
|
|
16
|
+
FLORIDAY_READ_ROUTE,
|
|
17
|
+
];
|
|
18
|
+
export const READ_ROUTE_MISSING = "Leesroute ontbreekt in de shell: /gateway/floriday-get is niet bereikbaar. " +
|
|
19
|
+
"Installeer Floriday-authenticatie 1.0.130 of hoger.";
|
|
20
|
+
const PREFIX = /^\/suppliers-api-[^/]+/;
|
|
21
|
+
/** Haalt het API-voorvoegsel weg en verplaatst een querystring naar `query`. */
|
|
22
|
+
export function toReadRequest(fullPath) {
|
|
23
|
+
let p = fullPath.trim().replace(PREFIX, "");
|
|
24
|
+
if (!p.startsWith("/"))
|
|
25
|
+
p = `/${p}`;
|
|
26
|
+
const [path, qs] = p.split("?");
|
|
27
|
+
const req = { method: "GET", path };
|
|
28
|
+
if (qs) {
|
|
29
|
+
const query = {};
|
|
30
|
+
for (const [k, v] of new URLSearchParams(qs))
|
|
31
|
+
query[k] = v;
|
|
32
|
+
req.query = query;
|
|
33
|
+
}
|
|
34
|
+
return req;
|
|
35
|
+
}
|
|
36
|
+
export function chunk(items, size = FLORIDAY_READ_MAX_BATCH) {
|
|
37
|
+
const out = [];
|
|
38
|
+
for (let i = 0; i < items.length; i += size)
|
|
39
|
+
out.push(items.slice(i, i + size));
|
|
40
|
+
return out;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Beoordeelt het HTTP-antwoord van de route zelf. Een HTML- of 404-antwoord
|
|
44
|
+
* betekent dat de route in de shell ontbreekt — nooit de ruwe HTML tonen.
|
|
45
|
+
*/
|
|
46
|
+
export function parseReadResponse(httpStatus, contentType, text, expected) {
|
|
47
|
+
const isJson = contentType.toLowerCase().includes("application/json");
|
|
48
|
+
if (!isJson) {
|
|
49
|
+
if (httpStatus === 404 || /<html/i.test(text))
|
|
50
|
+
throw new Error(READ_ROUTE_MISSING);
|
|
51
|
+
throw new Error(`Leesroute gaf geen geldig antwoord (status ${httpStatus}).`);
|
|
52
|
+
}
|
|
53
|
+
let body;
|
|
54
|
+
try {
|
|
55
|
+
body = text ? JSON.parse(text) : null;
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
throw new Error(`Leesroute gaf onleesbaar antwoord (status ${httpStatus}).`);
|
|
59
|
+
}
|
|
60
|
+
if (!body)
|
|
61
|
+
throw new Error(`Leesroute gaf een leeg antwoord (status ${httpStatus}).`);
|
|
62
|
+
if (!Array.isArray(body.results)) {
|
|
63
|
+
if (httpStatus === 404)
|
|
64
|
+
throw new Error(READ_ROUTE_MISSING);
|
|
65
|
+
throw new Error(body.error || body.message || `Leesroute weigerde het verzoek (status ${httpStatus}).`);
|
|
66
|
+
}
|
|
67
|
+
const results = body.results.map((r) => ({
|
|
68
|
+
ok: r?.ok === true,
|
|
69
|
+
status: typeof r?.status === "number" ? r.status : 0,
|
|
70
|
+
path: String(r?.path ?? ""),
|
|
71
|
+
data: r?.ok === true ? (r.data ?? null) : null,
|
|
72
|
+
error: r?.ok === true ? undefined : String(r?.error ?? `HTTP ${r?.status ?? "?"}`),
|
|
73
|
+
retryAfterMs: typeof r?.retryAfterMs === "number" ? r.retryAfterMs : undefined,
|
|
74
|
+
}));
|
|
75
|
+
if (results.length !== expected) {
|
|
76
|
+
throw new Error(`Leesroute gaf ${results.length} resultaten terug voor ${expected} verzoeken.`);
|
|
77
|
+
}
|
|
78
|
+
return results;
|
|
79
|
+
}
|
|
80
|
+
export function interpretContinuousStock(r) {
|
|
81
|
+
if (r.ok) {
|
|
82
|
+
const d = r.data ?? {};
|
|
83
|
+
const pieces = typeof d.numberOfPieces === "number" ? d.numberOfPieces : d.available === true ? 1 : 0;
|
|
84
|
+
return { kind: "pieces", pieces };
|
|
85
|
+
}
|
|
86
|
+
// 404 per artikel = geen beschikbaarheid ingesteld.
|
|
87
|
+
if (r.status === 404)
|
|
88
|
+
return { kind: "pieces", pieces: 0 };
|
|
89
|
+
if (r.status === 429)
|
|
90
|
+
return { kind: "retry", waitMs: Math.max(0, r.retryAfterMs ?? 1000) };
|
|
91
|
+
return { kind: "fail", error: r.error ?? `HTTP ${r.status}` };
|
|
92
|
+
}
|
|
@@ -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":"AAQA,OAAO,EAAyB,KAAK,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAEpF,MAAM,MAAM,cAAc,GACtB,YAAY,GACZ,OAAO,GACP,OAAO,GACP,aAAa,GACb,QAAQ,GACR,QAAQ,CAAC;AAEb,eAAO,MAAM,aAAa,EAAE;IAAE,GAAG,EAAE,cAAc,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAOjE,CAAC;AAEF,MAAM,MAAM,iBAAiB,GACzB,SAAS,GACT,SAAS,GACT,MAAM,GACN,QAAQ,GACR,SAAS,CAAC;AAEd,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,cAAc,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,MAAM,EAAE,GAAG,CAAC;IACZ,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,MAAM,gBAAgB,GACxB,SAAS,GACT,WAAW,GACX,yBAAyB,GACzB,QAAQ,CAAC;AAEb,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,MAAM,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC5B,MAAM,EAAE,gBAAgB,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,EAAE,GAAG,CAAC;IACb,QAAQ,EAAE,GAAG,CAAC;IACd,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAKD,wBAAsB,gBAAgB,CAAC,KAAK,EAAE;IAC5C,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,cAAc,EAAE,CAAC;CAChC,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAiChC;AAED,wBAAsB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;IAC3D,GAAG,EAAE,aAAa,GAAG,IAAI,CAAC;IAC1B,KAAK,EAAE,cAAc,EAAE,CAAC;CACzB,CAAC,CASD;AAUD,wBAAsB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,cAAc,iBAEvE;AAID,MAAM,WAAW,aAAa,CAAC,CAAC;IAC9B,EAAE,EAAE,OAAO,CAAC;IACZ,KAAK,CAAC,EAAE,CAAC,CAAC;IACV,KAAK,CAAC,EAAE,oBAAoB,CAAC;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,CAAC,EACpC,KAAK,EAAE,MAAM,GAAG,IAAI,EACpB,GAAG,EAAE,cAAc,EACnB,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,IAAI,CAAC,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,oBAAoB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GAC7E,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAsD3B;AAeD,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,MAAM,EACb,KAAK,CAAC,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,GACzD,OAAO,CAAC,gBAAgB,CAAC,
|
|
1
|
+
{"version":3,"file":"publish-pipeline.d.ts","sourceRoot":"","sources":["../../src/lib/publish-pipeline.ts"],"names":[],"mappings":"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"}
|