@flowselections/floriday-verkoop-module 1.0.60 → 1.0.62

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (149) hide show
  1. package/dist-lib/components/floriday/FlorydaySyncHealthBanner.d.ts +9 -0
  2. package/dist-lib/components/floriday/FlorydaySyncHealthBanner.d.ts.map +1 -0
  3. package/dist-lib/components/floriday/FlorydaySyncHealthBanner.js +26 -0
  4. package/dist-lib/components/karindeling/AfmetingenTab.d.ts +6 -0
  5. package/dist-lib/components/karindeling/AfmetingenTab.d.ts.map +1 -0
  6. package/dist-lib/components/karindeling/AfmetingenTab.js +128 -0
  7. package/dist-lib/components/karindeling/KarindelingPage.d.ts +2 -0
  8. package/dist-lib/components/karindeling/KarindelingPage.d.ts.map +1 -0
  9. package/dist-lib/components/karindeling/KarindelingPage.js +102 -0
  10. package/dist-lib/components/ui/dropdown-menu.d.ts +9 -0
  11. package/dist-lib/components/ui/dropdown-menu.d.ts.map +1 -0
  12. package/dist-lib/components/ui/dropdown-menu.js +14 -0
  13. package/dist-lib/components/verkoop/AnalyticsCards.d.ts +1 -1
  14. package/dist-lib/components/verkoop/AnalyticsCards.d.ts.map +1 -1
  15. package/dist-lib/components/verkoop/AutoFulfillmentStatusCard.d.ts +1 -1
  16. package/dist-lib/components/verkoop/AutoFulfillmentStatusCard.d.ts.map +1 -1
  17. package/dist-lib/components/verkoop/CartAssignmentWizard.d.ts +1 -1
  18. package/dist-lib/components/verkoop/CartAssignmentWizard.d.ts.map +1 -1
  19. package/dist-lib/components/verkoop/CartLayersDialog.d.ts +1 -1
  20. package/dist-lib/components/verkoop/CartLayersDialog.d.ts.map +1 -1
  21. package/dist-lib/components/verkoop/CreateOrderDialog.d.ts +5 -0
  22. package/dist-lib/components/verkoop/CreateOrderDialog.d.ts.map +1 -0
  23. package/dist-lib/components/verkoop/CreateOrderDialog.js +33 -0
  24. package/dist-lib/components/verkoop/CreateOrderPage.d.ts +1 -1
  25. package/dist-lib/components/verkoop/CreateOrderPage.d.ts.map +1 -1
  26. package/dist-lib/components/verkoop/DiagnoseConnectionDialog.d.ts +1 -1
  27. package/dist-lib/components/verkoop/DiagnoseConnectionDialog.d.ts.map +1 -1
  28. package/dist-lib/components/verkoop/EditLocalOrderDialog.d.ts +1 -1
  29. package/dist-lib/components/verkoop/EditLocalOrderDialog.d.ts.map +1 -1
  30. package/dist-lib/components/verkoop/EngineBufferCard.d.ts +1 -1
  31. package/dist-lib/components/verkoop/EngineBufferCard.d.ts.map +1 -1
  32. package/dist-lib/components/verkoop/InvoiceTimingSettings.d.ts +1 -1
  33. package/dist-lib/components/verkoop/InvoiceTimingSettings.d.ts.map +1 -1
  34. package/dist-lib/components/verkoop/OrderAfleverbrievenCard.d.ts +1 -1
  35. package/dist-lib/components/verkoop/OrderAfleverbrievenCard.d.ts.map +1 -1
  36. package/dist-lib/components/verkoop/OrderCarrierPicker.d.ts +1 -1
  37. package/dist-lib/components/verkoop/OrderCarrierPicker.d.ts.map +1 -1
  38. package/dist-lib/components/verkoop/OrderControlStatusCard.d.ts +1 -1
  39. package/dist-lib/components/verkoop/OrderControlStatusCard.d.ts.map +1 -1
  40. package/dist-lib/components/verkoop/OrderKarindelingCard.d.ts +1 -1
  41. package/dist-lib/components/verkoop/OrderKarindelingCard.d.ts.map +1 -1
  42. package/dist-lib/components/verkoop/OrderPickupMomentPicker.d.ts +1 -1
  43. package/dist-lib/components/verkoop/OrderPickupMomentPicker.d.ts.map +1 -1
  44. package/dist-lib/components/verkoop/OrderShipmentsCard.d.ts +1 -1
  45. package/dist-lib/components/verkoop/OrderShipmentsCard.d.ts.map +1 -1
  46. package/dist-lib/components/verkoop/ProductDimensionsSettings.d.ts +1 -1
  47. package/dist-lib/components/verkoop/ProductDimensionsSettings.d.ts.map +1 -1
  48. package/dist-lib/components/verkoop/SalesOrderDetailPage.d.ts +1 -1
  49. package/dist-lib/components/verkoop/SalesOrderDetailPage.d.ts.map +1 -1
  50. package/dist-lib/components/verkoop/SalesOrderDetailView.d.ts +1 -1
  51. package/dist-lib/components/verkoop/SalesOrderDetailView.d.ts.map +1 -1
  52. package/dist-lib/components/verkoop/SalesOrdersFilterPanel.d.ts +1 -1
  53. package/dist-lib/components/verkoop/SalesOrdersFilterPanel.d.ts.map +1 -1
  54. package/dist-lib/components/verkoop/SalesOrdersFilters.d.ts +1 -1
  55. package/dist-lib/components/verkoop/SalesOrdersFilters.d.ts.map +1 -1
  56. package/dist-lib/components/verkoop/SalesOrdersTable.d.ts +1 -2
  57. package/dist-lib/components/verkoop/SalesOrdersTable.d.ts.map +1 -1
  58. package/dist-lib/components/verkoop/SearchableSelect.d.ts +1 -1
  59. package/dist-lib/components/verkoop/SearchableSelect.d.ts.map +1 -1
  60. package/dist-lib/components/verkoop/StockConsumptionAlertsBanner.d.ts +1 -1
  61. package/dist-lib/components/verkoop/StockConsumptionAlertsBanner.d.ts.map +1 -1
  62. package/dist-lib/components/verkoop/VerkoopOrdersPage.d.ts +1 -1
  63. package/dist-lib/components/verkoop/VerkoopOrdersPage.d.ts.map +1 -1
  64. package/dist-lib/components/verkoop/VerkoopOrdersPage.js +18 -5
  65. package/dist-lib/components/verkoop/WeekCalendar.d.ts +1 -1
  66. package/dist-lib/components/verkoop/WeekCalendar.d.ts.map +1 -1
  67. package/dist-lib/integrations/supabase/auth-middleware.d.ts +1061 -15
  68. package/dist-lib/integrations/supabase/auth-middleware.d.ts.map +1 -1
  69. package/dist-lib/integrations/supabase/client.server.d.ts +1061 -15
  70. package/dist-lib/integrations/supabase/client.server.d.ts.map +1 -1
  71. package/dist-lib/integrations/supabase/types.d.ts +1061 -10
  72. package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
  73. package/dist-lib/lib/buffer-events.functions.d.ts +1061 -15
  74. package/dist-lib/lib/buffer-events.functions.d.ts.map +1 -1
  75. package/dist-lib/lib/cart-layers.functions.d.ts +4188 -36
  76. package/dist-lib/lib/cart-layers.functions.d.ts.map +1 -1
  77. package/dist-lib/lib/cart-lock.functions.d.ts +1061 -15
  78. package/dist-lib/lib/cart-lock.functions.d.ts.map +1 -1
  79. package/dist-lib/lib/cart-planning-settings.functions.d.ts +11506 -0
  80. package/dist-lib/lib/cart-planning-settings.functions.d.ts.map +1 -1
  81. package/dist-lib/lib/cart-replan.functions.d.ts +3139 -1
  82. package/dist-lib/lib/cart-replan.functions.d.ts.map +1 -1
  83. package/dist-lib/lib/cart-replan.functions.js +8 -47
  84. package/dist-lib/lib/create-order.functions.d.ts +17799 -102
  85. package/dist-lib/lib/create-order.functions.d.ts.map +1 -1
  86. package/dist-lib/lib/create-order.functions.js +3 -16
  87. package/dist-lib/lib/cron/push-order-statuses.d.ts +4 -0
  88. package/dist-lib/lib/cron/push-order-statuses.d.ts.map +1 -0
  89. package/dist-lib/lib/cron/push-order-statuses.js +23 -0
  90. package/dist-lib/lib/cron/replan-carts.d.ts +1 -1
  91. package/dist-lib/lib/cron/replan-carts.d.ts.map +1 -1
  92. package/dist-lib/lib/cron/replan-carts.js +10 -15
  93. package/dist-lib/lib/floriday/floriday.server.d.ts +14 -0
  94. package/dist-lib/lib/floriday/floriday.server.d.ts.map +1 -0
  95. package/dist-lib/lib/floriday/floriday.server.js +92 -0
  96. package/dist-lib/lib/floriday/sales-orders.functions.d.ts +4736 -0
  97. package/dist-lib/lib/floriday/sales-orders.functions.d.ts.map +1 -0
  98. package/dist-lib/lib/floriday/sales-orders.functions.js +193 -0
  99. package/dist-lib/lib/floriday-auto-fulfillment.functions.d.ts +13288 -2362
  100. package/dist-lib/lib/floriday-auto-fulfillment.functions.d.ts.map +1 -1
  101. package/dist-lib/lib/floriday-logistic-labels.functions.d.ts +2092 -0
  102. package/dist-lib/lib/floriday-logistic-labels.functions.d.ts.map +1 -1
  103. package/dist-lib/lib/floriday-mirror.functions.d.ts +1061 -15
  104. package/dist-lib/lib/floriday-mirror.functions.d.ts.map +1 -1
  105. package/dist-lib/lib/floriday-mirror.functions.js +282 -117
  106. package/dist-lib/lib/floriday-public.functions.d.ts +7322 -0
  107. package/dist-lib/lib/floriday-public.functions.d.ts.map +1 -1
  108. package/dist-lib/lib/floriday-status-sync.server.d.ts +14 -0
  109. package/dist-lib/lib/floriday-status-sync.server.d.ts.map +1 -0
  110. package/dist-lib/lib/floriday-status-sync.server.js +130 -0
  111. package/dist-lib/lib/floriday-writes.functions.d.ts +2092 -0
  112. package/dist-lib/lib/floriday-writes.functions.d.ts.map +1 -1
  113. package/dist-lib/lib/invoice-timing.functions.d.ts +4184 -0
  114. package/dist-lib/lib/invoice-timing.functions.d.ts.map +1 -1
  115. package/dist-lib/lib/load-carriers.functions.d.ts +1061 -15
  116. package/dist-lib/lib/load-carriers.functions.d.ts.map +1 -1
  117. package/dist-lib/lib/logistics-engine.functions.d.ts +5235 -15
  118. package/dist-lib/lib/logistics-engine.functions.d.ts.map +1 -1
  119. package/dist-lib/lib/logistics-engine.server.d.ts.map +1 -1
  120. package/dist-lib/lib/logistics-engine.server.js +2 -9
  121. package/dist-lib/lib/logistics-stock.functions.d.ts +2092 -0
  122. package/dist-lib/lib/logistics-stock.functions.d.ts.map +1 -1
  123. package/dist-lib/lib/order-addresses.functions.d.ts +1061 -15
  124. package/dist-lib/lib/order-addresses.functions.d.ts.map +1 -1
  125. package/dist-lib/lib/order-buffers.functions.d.ts +3147 -3
  126. package/dist-lib/lib/order-buffers.functions.d.ts.map +1 -1
  127. package/dist-lib/lib/order-buffers.functions.js +3 -12
  128. package/dist-lib/lib/order-carrier.functions.d.ts +2092 -0
  129. package/dist-lib/lib/order-carrier.functions.d.ts.map +1 -1
  130. package/dist-lib/lib/order-fulfill.functions.d.ts +1061 -15
  131. package/dist-lib/lib/order-fulfill.functions.d.ts.map +1 -1
  132. package/dist-lib/lib/order-pickup.functions.d.ts +2092 -0
  133. package/dist-lib/lib/order-pickup.functions.d.ts.map +1 -1
  134. package/dist-lib/lib/order-shipments.functions.d.ts +4184 -0
  135. package/dist-lib/lib/order-shipments.functions.d.ts.map +1 -1
  136. package/dist-lib/lib/product-dimensions.functions.d.ts +2092 -0
  137. package/dist-lib/lib/product-dimensions.functions.d.ts.map +1 -1
  138. package/dist-lib/lib/salesorders-list.functions.d.ts +2092 -0
  139. package/dist-lib/lib/salesorders-list.functions.d.ts.map +1 -1
  140. package/dist-lib/lib/salesorders-list.server.d.ts.map +1 -1
  141. package/dist-lib/lib/salesorders-list.server.js +62 -3
  142. package/dist-lib/lib/salesorders.functions.d.ts +6303 -17
  143. package/dist-lib/lib/salesorders.functions.d.ts.map +1 -1
  144. package/dist-lib/lib/salesorders.functions.js +22 -22
  145. package/dist-lib/lib/stock-consumption-alerts.functions.d.ts +2092 -0
  146. package/dist-lib/lib/stock-consumption-alerts.functions.d.ts.map +1 -1
  147. package/dist-lib/lib/tradeitems.functions.d.ts +1061 -15
  148. package/dist-lib/lib/tradeitems.functions.d.ts.map +1 -1
  149. package/package.json +1 -1
@@ -869,14 +869,8 @@ export const createManualOrder = createServerFn({ method: "POST" })
869
869
  const { error: itemsErr } = await supabaseAdmin.from("order_items").insert(items);
870
870
  if (itemsErr)
871
871
  throw new Error(itemsErr.message);
872
- // Direct karindeling berekenen, zodat het scherm ze meteen kan tonen.
873
- try {
874
- const { replanOrderCartsFromCron } = await import("./cart-replan.functions");
875
- await replanOrderCartsFromCron(order.id);
876
- }
877
- catch (err) {
878
- console.error("[createManualOrder] karindeling faalde:", err);
879
- }
872
+ // Karindeling wordt door de Logistiek Engine gedaan (eigen minuut-cron);
873
+ // deze module stoot dat niet zelf meer aan.
880
874
  // Logistics Engine informeren (schaduwmodus): Engine plant de keten.
881
875
  try {
882
876
  const { notifyEngineOrder } = await import("./logistics-engine.server");
@@ -1633,14 +1627,7 @@ export const updateLocalOrder = createServerFn({ method: "POST" })
1633
1627
  .update({ total: String(total.toFixed(2)), updated_at: new Date().toISOString() })
1634
1628
  .eq("id", data.orderId);
1635
1629
  }
1636
- // Karindeling opnieuw draaien zodat het scherm de nieuwe belading toont.
1637
- try {
1638
- const { replanOrderCartsFromCron } = await import("./cart-replan.functions");
1639
- await replanOrderCartsFromCron(data.orderId);
1640
- }
1641
- catch (err) {
1642
- console.error("[updateLocalOrder] karindeling faalde:", err);
1643
- }
1630
+ // Karindeling: de Logistiek Engine plant opnieuw in haar eigen ronde.
1644
1631
  // Logistics Engine informeren (schaduwmodus): Engine plant de keten.
1645
1632
  try {
1646
1633
  const { notifyEngineOrder } = await import("./logistics-engine.server");
@@ -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");
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
+ }
@@ -1,4 +1,4 @@
1
1
  import type { SupabaseClient } from "@supabase/supabase-js";
2
- export declare function replanCartsCron(request: Request, _supabase: SupabaseClient): Promise<Response>;
2
+ export declare function replanCartsCron(_request: Request, _supabase: SupabaseClient): Promise<Response>;
3
3
  export declare function replanCartsCronHint(_request: Request, _supabase: SupabaseClient): Promise<Response>;
4
4
  //# sourceMappingURL=replan-carts.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"replan-carts.d.ts","sourceRoot":"","sources":["../../../src/lib/cron/replan-carts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAG5D,wBAAsB,eAAe,CACnC,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,cAAc,GACxB,OAAO,CAAC,QAAQ,CAAC,CAenB;AAED,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,OAAO,EACjB,SAAS,EAAE,cAAc,GACxB,OAAO,CAAC,QAAQ,CAAC,CAEnB"}
1
+ {"version":3,"file":"replan-carts.d.ts","sourceRoot":"","sources":["../../../src/lib/cron/replan-carts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAU5D,wBAAsB,eAAe,CACnC,QAAQ,EAAE,OAAO,EACjB,SAAS,EAAE,cAAc,GACxB,OAAO,CAAC,QAAQ,CAAC,CAEnB;AAED,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,OAAO,EACjB,SAAS,EAAE,cAAc,GACxB,OAAO,CAAC,QAAQ,CAAC,CAEnB"}
@@ -1,18 +1,13 @@
1
- import { drainCartReplanQueue } from "../cart-replan.functions";
2
- export async function replanCartsCron(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 result = await drainCartReplanQueue(100);
10
- return Response.json(result);
11
- }
12
- catch (err) {
13
- return Response.json({ ok: false, error: err.message }, { status: 500 });
14
- }
1
+ // Karplanning is eigendom van de Logistiek Engine; die draait haar eigen
2
+ // minuut-cron. Dit endpoint blijft bestaan (bestaande cron-planningen kunnen
3
+ // er nog naar wijzen) maar doet niets meer.
4
+ const NOOP = {
5
+ ok: true,
6
+ skipped: "cart-planning-owned-by-logistics-engine",
7
+ };
8
+ export async function replanCartsCron(_request, _supabase) {
9
+ return Response.json(NOOP);
15
10
  }
16
11
  export async function replanCartsCronHint(_request, _supabase) {
17
- return Response.json({ ok: true, hint: "POST to drain cart_replan_queue" });
12
+ return Response.json(NOOP);
18
13
  }
@@ -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";
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
+ }