@flowselections/floriday-verkoop-module 1.0.93 → 1.0.94
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/floriday/FlorydaySyncHealthBanner.d.ts +9 -0
- package/dist-lib/components/floriday/FlorydaySyncHealthBanner.d.ts.map +1 -0
- package/dist-lib/components/floriday/FlorydaySyncHealthBanner.js +26 -0
- package/dist-lib/components/karindeling/AfmetingenTab.d.ts +6 -0
- package/dist-lib/components/karindeling/AfmetingenTab.d.ts.map +1 -0
- package/dist-lib/components/karindeling/AfmetingenTab.js +128 -0
- package/dist-lib/components/karindeling/KarindelingPage.d.ts +2 -0
- package/dist-lib/components/karindeling/KarindelingPage.d.ts.map +1 -0
- package/dist-lib/components/karindeling/KarindelingPage.js +102 -0
- package/dist-lib/components/ui/dropdown-menu.d.ts +9 -0
- package/dist-lib/components/ui/dropdown-menu.d.ts.map +1 -0
- package/dist-lib/components/ui/dropdown-menu.js +14 -0
- package/dist-lib/components/verkoop/AnalyticsCards.d.ts +1 -1
- package/dist-lib/components/verkoop/AnalyticsCards.d.ts.map +1 -1
- package/dist-lib/components/verkoop/AutoFulfillmentStatusCard.d.ts +4 -0
- package/dist-lib/components/verkoop/AutoFulfillmentStatusCard.d.ts.map +1 -0
- package/dist-lib/components/verkoop/AutoFulfillmentStatusCard.js +95 -0
- package/dist-lib/components/verkoop/CartAssignmentWizard.d.ts +1 -1
- package/dist-lib/components/verkoop/CartAssignmentWizard.d.ts.map +1 -1
- package/dist-lib/components/verkoop/CartLayersDialog.d.ts +1 -1
- package/dist-lib/components/verkoop/CartLayersDialog.d.ts.map +1 -1
- package/dist-lib/components/verkoop/CreateOrderDialog.d.ts +5 -0
- package/dist-lib/components/verkoop/CreateOrderDialog.d.ts.map +1 -0
- package/dist-lib/components/verkoop/CreateOrderDialog.js +33 -0
- package/dist-lib/components/verkoop/CreateOrderPage.d.ts +1 -1
- package/dist-lib/components/verkoop/CreateOrderPage.d.ts.map +1 -1
- package/dist-lib/components/verkoop/DiagnoseConnectionDialog.d.ts +1 -1
- package/dist-lib/components/verkoop/DiagnoseConnectionDialog.d.ts.map +1 -1
- package/dist-lib/components/verkoop/EditLocalOrderDialog.d.ts +1 -1
- package/dist-lib/components/verkoop/EditLocalOrderDialog.d.ts.map +1 -1
- package/dist-lib/components/verkoop/EngineBufferCard.d.ts +1 -1
- package/dist-lib/components/verkoop/EngineBufferCard.d.ts.map +1 -1
- package/dist-lib/components/verkoop/FloridayStageLine.d.ts +2 -2
- package/dist-lib/components/verkoop/FloridayStageLine.d.ts.map +1 -1
- package/dist-lib/components/verkoop/InvoiceTimingSettings.d.ts +1 -1
- package/dist-lib/components/verkoop/InvoiceTimingSettings.d.ts.map +1 -1
- package/dist-lib/components/verkoop/OrderAfleverbrievenCard.d.ts +1 -1
- package/dist-lib/components/verkoop/OrderAfleverbrievenCard.d.ts.map +1 -1
- package/dist-lib/components/verkoop/OrderCarrierPicker.d.ts +1 -1
- package/dist-lib/components/verkoop/OrderCarrierPicker.d.ts.map +1 -1
- package/dist-lib/components/verkoop/OrderControlStatusCard.d.ts +1 -1
- package/dist-lib/components/verkoop/OrderControlStatusCard.d.ts.map +1 -1
- package/dist-lib/components/verkoop/OrderKarindelingCard.d.ts +1 -1
- package/dist-lib/components/verkoop/OrderKarindelingCard.d.ts.map +1 -1
- package/dist-lib/components/verkoop/OrderLinePackingCard.d.ts +1 -1
- package/dist-lib/components/verkoop/OrderLinePackingCard.d.ts.map +1 -1
- package/dist-lib/components/verkoop/OrderPickupMomentPicker.d.ts +1 -1
- package/dist-lib/components/verkoop/OrderPickupMomentPicker.d.ts.map +1 -1
- package/dist-lib/components/verkoop/OrderShipmentsCard.d.ts +1 -1
- package/dist-lib/components/verkoop/OrderShipmentsCard.d.ts.map +1 -1
- package/dist-lib/components/verkoop/PlanCoverageBadge.d.ts +1 -1
- package/dist-lib/components/verkoop/PlanCoverageBadge.d.ts.map +1 -1
- package/dist-lib/components/verkoop/ProductDimensionsSettings.d.ts +1 -1
- package/dist-lib/components/verkoop/ProductDimensionsSettings.d.ts.map +1 -1
- package/dist-lib/components/verkoop/SalesOrderDetailPage.d.ts +1 -1
- package/dist-lib/components/verkoop/SalesOrderDetailPage.d.ts.map +1 -1
- package/dist-lib/components/verkoop/SalesOrderDetailPage.js +6 -6
- package/dist-lib/components/verkoop/SalesOrderDetailView.d.ts +1 -1
- package/dist-lib/components/verkoop/SalesOrderDetailView.d.ts.map +1 -1
- package/dist-lib/components/verkoop/SalesOrdersFilterPanel.d.ts +1 -1
- package/dist-lib/components/verkoop/SalesOrdersFilterPanel.d.ts.map +1 -1
- package/dist-lib/components/verkoop/SalesOrdersFilters.d.ts +1 -1
- package/dist-lib/components/verkoop/SalesOrdersFilters.d.ts.map +1 -1
- package/dist-lib/components/verkoop/SalesOrdersTable.d.ts +1 -2
- package/dist-lib/components/verkoop/SalesOrdersTable.d.ts.map +1 -1
- package/dist-lib/components/verkoop/SearchableSelect.d.ts +1 -1
- package/dist-lib/components/verkoop/SearchableSelect.d.ts.map +1 -1
- package/dist-lib/components/verkoop/StockConsumptionAlertsBanner.d.ts +1 -1
- package/dist-lib/components/verkoop/StockConsumptionAlertsBanner.d.ts.map +1 -1
- package/dist-lib/components/verkoop/VerkoopOrdersPage.d.ts +1 -1
- package/dist-lib/components/verkoop/VerkoopOrdersPage.d.ts.map +1 -1
- package/dist-lib/components/verkoop/WeekCalendar.d.ts +1 -1
- package/dist-lib/components/verkoop/WeekCalendar.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/client.js +1 -1
- package/dist-lib/integrations/supabase/client.server.js +1 -1
- package/dist-lib/integrations/supabase/types.d.ts +74 -0
- package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
- package/dist-lib/lib/cron/mirror-floriday-orders.d.ts +4 -0
- package/dist-lib/lib/cron/mirror-floriday-orders.d.ts.map +1 -0
- package/dist-lib/lib/cron/mirror-floriday-orders.js +23 -0
- package/dist-lib/lib/cron/push-order-statuses.d.ts +4 -0
- package/dist-lib/lib/cron/push-order-statuses.d.ts.map +1 -0
- package/dist-lib/lib/cron/push-order-statuses.js +23 -0
- package/dist-lib/lib/floriday/floriday.server.d.ts +14 -0
- package/dist-lib/lib/floriday/floriday.server.d.ts.map +1 -0
- package/dist-lib/lib/floriday/floriday.server.js +92 -0
- package/dist-lib/lib/floriday/sales-orders.functions.d.ts +4736 -0
- package/dist-lib/lib/floriday/sales-orders.functions.d.ts.map +1 -0
- package/dist-lib/lib/floriday/sales-orders.functions.js +193 -0
- package/dist-lib/lib/floriday-auto-fulfillment.functions.d.ts +77581 -0
- package/dist-lib/lib/floriday-auto-fulfillment.functions.d.ts.map +1 -0
- package/dist-lib/lib/floriday-auto-fulfillment.functions.js +65 -0
- package/dist-lib/lib/floriday-auto-fulfillment.server.d.ts +21 -0
- package/dist-lib/lib/floriday-auto-fulfillment.server.d.ts.map +1 -0
- package/dist-lib/lib/floriday-auto-fulfillment.server.js +352 -0
- package/dist-lib/lib/floriday-status-sync.server.d.ts +14 -0
- package/dist-lib/lib/floriday-status-sync.server.d.ts.map +1 -0
- package/dist-lib/lib/floriday-status-sync.server.js +130 -0
- package/dist-lib/lib/tradeitems.functions.d.ts +12 -1117
- package/dist-lib/lib/tradeitems.functions.d.ts.map +1 -1
- package/dist-lib/lib/useBufferEvents.d.ts +2 -2
- package/dist-lib/lib/useBufferEvents.d.ts.map +1 -1
- package/dist-lib/lib/useLocalSalesOrderDetailQuery.d.ts +2 -2
- package/dist-lib/lib/useLocalSalesOrderDetailQuery.d.ts.map +1 -1
- package/dist-lib/lib/useSalesOrderDetailQuery.d.ts +1 -1
- package/dist-lib/lib/useSalesOrderDetailQuery.d.ts.map +1 -1
- package/dist-lib/lib/useSalesOrdersQuery.d.ts +1 -1
- package/dist-lib/lib/useSalesOrdersQuery.d.ts.map +1 -1
- package/package.json +2 -2
- package/dist-lib/lib/order-cart-count.server.d.ts +0 -8
- package/dist-lib/lib/order-cart-count.server.d.ts.map +0 -1
- package/dist-lib/lib/order-cart-count.server.js +0 -69
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { SupabaseClient } from "@supabase/supabase-js";
|
|
2
|
+
export declare function mirrorFloridayOrdersCron(request: Request, _supabase: SupabaseClient): Promise<Response>;
|
|
3
|
+
export declare function mirrorFloridayOrdersCronHint(_request: Request, _supabase: SupabaseClient): Promise<Response>;
|
|
4
|
+
//# sourceMappingURL=mirror-floriday-orders.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mirror-floriday-orders.d.ts","sourceRoot":"","sources":["../../../src/lib/cron/mirror-floriday-orders.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAG5D,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,cAAc,GACxB,OAAO,CAAC,QAAQ,CAAC,CAmBnB;AAED,wBAAsB,4BAA4B,CAChD,QAAQ,EAAE,OAAO,EACjB,SAAS,EAAE,cAAc,GACxB,OAAO,CAAC,QAAQ,CAAC,CAKnB"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { mirrorFloridayOrdersFromCron } from "../floriday-mirror.functions.js";
|
|
2
|
+
export async function mirrorFloridayOrdersCron(request, _supabase) {
|
|
3
|
+
const apikey = request.headers.get("apikey") ?? request.headers.get("x-api-key");
|
|
4
|
+
const expected = process.env.SUPABASE_PUBLISHABLE_KEY;
|
|
5
|
+
if (!expected || !apikey || apikey !== expected) {
|
|
6
|
+
return new Response("Unauthorized", { status: 401 });
|
|
7
|
+
}
|
|
8
|
+
try {
|
|
9
|
+
const url = new URL(request.url);
|
|
10
|
+
const limit = Number(url.searchParams.get("limit") ?? "200");
|
|
11
|
+
const result = await mirrorFloridayOrdersFromCron(Number.isFinite(limit) && limit > 0 ? Math.min(1000, limit) : 200);
|
|
12
|
+
return Response.json(result);
|
|
13
|
+
}
|
|
14
|
+
catch (err) {
|
|
15
|
+
return Response.json({ ok: false, error: err.message }, { status: 500 });
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
export async function mirrorFloridayOrdersCronHint(_request, _supabase) {
|
|
19
|
+
return Response.json({
|
|
20
|
+
ok: true,
|
|
21
|
+
hint: "POST to mirror recent Floriday sales orders into local orders",
|
|
22
|
+
});
|
|
23
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { SupabaseClient } from "@supabase/supabase-js";
|
|
2
|
+
export declare function pushOrderStatusesCron(request: Request, _supabase: SupabaseClient): Promise<Response>;
|
|
3
|
+
export declare function pushOrderStatusesCronHint(_request: Request, _supabase: SupabaseClient): Promise<Response>;
|
|
4
|
+
//# sourceMappingURL=push-order-statuses.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"push-order-statuses.d.ts","sourceRoot":"","sources":["../../../src/lib/cron/push-order-statuses.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,cAAc,GACxB,OAAO,CAAC,QAAQ,CAAC,CAiBnB;AAED,wBAAsB,yBAAyB,CAC7C,QAAQ,EAAE,OAAO,EACjB,SAAS,EAAE,cAAc,GACxB,OAAO,CAAC,QAAQ,CAAC,CAKnB"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export async function pushOrderStatusesCron(request, _supabase) {
|
|
2
|
+
const apikey = request.headers.get("apikey") ?? request.headers.get("x-api-key");
|
|
3
|
+
const expected = process.env.SUPABASE_PUBLISHABLE_KEY;
|
|
4
|
+
if (!expected || !apikey || apikey !== expected) {
|
|
5
|
+
return new Response("Unauthorized", { status: 401 });
|
|
6
|
+
}
|
|
7
|
+
try {
|
|
8
|
+
const url = new URL(request.url);
|
|
9
|
+
const limit = Number(url.searchParams.get("limit") ?? "100");
|
|
10
|
+
const { pushOrderStatusesToFloriday } = await import("../floriday-status-sync.server.js");
|
|
11
|
+
const result = await pushOrderStatusesToFloriday(Number.isFinite(limit) && limit > 0 ? Math.min(500, limit) : 100);
|
|
12
|
+
return Response.json(result);
|
|
13
|
+
}
|
|
14
|
+
catch (err) {
|
|
15
|
+
return Response.json({ ok: false, error: err.message }, { status: 500 });
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
export async function pushOrderStatusesCronHint(_request, _supabase) {
|
|
19
|
+
return Response.json({
|
|
20
|
+
ok: true,
|
|
21
|
+
hint: "POST to push ERP order status changes to Floriday",
|
|
22
|
+
});
|
|
23
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface FlorIdayConn {
|
|
2
|
+
id: string;
|
|
3
|
+
environment: "staging" | "production" | string;
|
|
4
|
+
client_id: string;
|
|
5
|
+
client_secret: string;
|
|
6
|
+
api_key: string;
|
|
7
|
+
access_token: string | null;
|
|
8
|
+
token_expires_at: string | null;
|
|
9
|
+
organization_name: string | null;
|
|
10
|
+
gln_code: string | null;
|
|
11
|
+
}
|
|
12
|
+
export declare function getActiveConnection(): Promise<FlorIdayConn>;
|
|
13
|
+
export declare function florIdayFetch<T = unknown>(path: string, init?: RequestInit): Promise<T>;
|
|
14
|
+
//# sourceMappingURL=floriday.server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"floriday.server.d.ts","sourceRoot":"","sources":["../../../src/lib/floriday/floriday.server.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,SAAS,GAAG,YAAY,GAAG,MAAM,CAAC;IAC/C,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAiBD,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,YAAY,CAAC,CAsBjE;AAqCD,wBAAsB,aAAa,CAAC,CAAC,GAAG,OAAO,EAC7C,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE,WAAgB,GACrB,OAAO,CAAC,CAAC,CAAC,CAoBZ"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
// Floriday Suppliers API client (server-only)
|
|
2
|
+
import { supabaseAdmin } from "../../integrations/supabase/client.server.js";
|
|
3
|
+
function endpoints(env) {
|
|
4
|
+
const isProd = env === "production" || env === "prod";
|
|
5
|
+
return {
|
|
6
|
+
auth: isProd
|
|
7
|
+
? "https://accounts.floriday.io/oauth/token"
|
|
8
|
+
: "https://accounts.staging.floriday.io/oauth/token",
|
|
9
|
+
audience: isProd
|
|
10
|
+
? "https://api.floriday.io"
|
|
11
|
+
: "https://api.staging.floriday.io",
|
|
12
|
+
api: isProd
|
|
13
|
+
? "https://api.floriday.io/suppliers-api-2026v1"
|
|
14
|
+
: "https://api.staging.floriday.io/suppliers-api-2026v1",
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
export async function getActiveConnection() {
|
|
18
|
+
const { data: settings } = await supabaseAdmin
|
|
19
|
+
.from("floriday_settings")
|
|
20
|
+
.select("active_environment")
|
|
21
|
+
.eq("id", 1)
|
|
22
|
+
.maybeSingle();
|
|
23
|
+
const env = settings?.active_environment ?? "staging";
|
|
24
|
+
const { data, error } = await supabaseAdmin
|
|
25
|
+
.from("floriday_connections")
|
|
26
|
+
.select("id,environment,client_id,client_secret,api_key,access_token,token_expires_at,organization_name,gln_code,is_active")
|
|
27
|
+
.eq("environment", env)
|
|
28
|
+
.eq("is_active", true)
|
|
29
|
+
.order("updated_at", { ascending: false })
|
|
30
|
+
.limit(1)
|
|
31
|
+
.maybeSingle();
|
|
32
|
+
if (error)
|
|
33
|
+
throw new Error(`Floriday connectie ophalen mislukt: ${error.message}`);
|
|
34
|
+
if (!data)
|
|
35
|
+
throw new Error(`Geen actieve Floriday connectie voor omgeving "${env}"`);
|
|
36
|
+
return data;
|
|
37
|
+
}
|
|
38
|
+
async function fetchToken(conn) {
|
|
39
|
+
const ep = endpoints(conn.environment);
|
|
40
|
+
const body = new URLSearchParams({
|
|
41
|
+
grant_type: "client_credentials",
|
|
42
|
+
client_id: conn.client_id,
|
|
43
|
+
client_secret: conn.client_secret,
|
|
44
|
+
audience: ep.audience,
|
|
45
|
+
});
|
|
46
|
+
const res = await fetch(ep.auth, {
|
|
47
|
+
method: "POST",
|
|
48
|
+
headers: { "Content-Type": "application/x-www-form-urlencoded" },
|
|
49
|
+
body,
|
|
50
|
+
});
|
|
51
|
+
const text = await res.text();
|
|
52
|
+
if (!res.ok) {
|
|
53
|
+
throw new Error(`Floriday OAuth fout [${res.status}]: ${text.slice(0, 300)}`);
|
|
54
|
+
}
|
|
55
|
+
const json = JSON.parse(text);
|
|
56
|
+
const token = json.access_token;
|
|
57
|
+
const expiresIn = json.expires_in ?? 3600;
|
|
58
|
+
const expiresAt = new Date(Date.now() + (expiresIn - 60) * 1000).toISOString();
|
|
59
|
+
await supabaseAdmin
|
|
60
|
+
.from("floriday_connections")
|
|
61
|
+
.update({ access_token: token, token_expires_at: expiresAt })
|
|
62
|
+
.eq("id", conn.id);
|
|
63
|
+
return { token, expiresAt };
|
|
64
|
+
}
|
|
65
|
+
async function ensureToken(conn) {
|
|
66
|
+
const exp = conn.token_expires_at ? new Date(conn.token_expires_at).getTime() : 0;
|
|
67
|
+
if (conn.access_token && exp > Date.now() + 60000)
|
|
68
|
+
return conn.access_token;
|
|
69
|
+
const { token } = await fetchToken(conn);
|
|
70
|
+
return token;
|
|
71
|
+
}
|
|
72
|
+
export async function florIdayFetch(path, init = {}) {
|
|
73
|
+
const conn = await getActiveConnection();
|
|
74
|
+
const token = await ensureToken(conn);
|
|
75
|
+
const ep = endpoints(conn.environment);
|
|
76
|
+
const url = path.startsWith("http") ? path : `${ep.api}${path}`;
|
|
77
|
+
const res = await fetch(url, {
|
|
78
|
+
...init,
|
|
79
|
+
headers: {
|
|
80
|
+
Accept: "application/json",
|
|
81
|
+
"Content-Type": "application/json",
|
|
82
|
+
Authorization: `Bearer ${token}`,
|
|
83
|
+
"x-api-key": conn.api_key,
|
|
84
|
+
...init.headers,
|
|
85
|
+
},
|
|
86
|
+
});
|
|
87
|
+
const text = await res.text();
|
|
88
|
+
if (!res.ok) {
|
|
89
|
+
throw new Error(`Floriday API ${res.status} ${path}: ${text.slice(0, 400)}`);
|
|
90
|
+
}
|
|
91
|
+
return (text ? JSON.parse(text) : null);
|
|
92
|
+
}
|