@flowselections/floriday-voorraad 1.0.76 → 1.0.78

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 (235) hide show
  1. package/dist-lib/components/TemplatePage.d.ts +2 -0
  2. package/dist-lib/components/TemplatePage.d.ts.map +1 -0
  3. package/dist-lib/components/TemplatePage.js +4 -0
  4. package/dist-lib/components/settings/VoorraadSettingsCard.d.ts +2 -0
  5. package/dist-lib/components/settings/VoorraadSettingsCard.d.ts.map +1 -0
  6. package/dist-lib/components/settings/VoorraadSettingsCard.js +39 -0
  7. package/dist-lib/components/voorraad/AdditionalPackagingDialog.d.ts +2 -2
  8. package/dist-lib/components/voorraad/AdditionalPackagingDialog.d.ts.map +1 -1
  9. package/dist-lib/components/voorraad/AdditionalPackagingDialog.js +2 -2
  10. package/dist-lib/components/voorraad/ArtikelCompositionCard.d.ts +1 -1
  11. package/dist-lib/components/voorraad/ArtikelCompositionCard.d.ts.map +1 -1
  12. package/dist-lib/components/voorraad/ArtikelCompositionCard.js +1 -1
  13. package/dist-lib/components/voorraad/ArtikelWizard.d.ts +1 -1
  14. package/dist-lib/components/voorraad/ArtikelWizard.d.ts.map +1 -1
  15. package/dist-lib/components/voorraad/ArtikelWizard.js +49 -49
  16. package/dist-lib/components/voorraad/CollapsibleText.d.ts +1 -1
  17. package/dist-lib/components/voorraad/CollapsibleText.d.ts.map +1 -1
  18. package/dist-lib/components/voorraad/ConnectionBadge.d.ts +6 -0
  19. package/dist-lib/components/voorraad/ConnectionBadge.d.ts.map +1 -0
  20. package/dist-lib/components/voorraad/ConnectionBadge.js +12 -0
  21. package/dist-lib/components/voorraad/ConnectionPicker.d.ts +8 -0
  22. package/dist-lib/components/voorraad/ConnectionPicker.d.ts.map +1 -0
  23. package/dist-lib/components/voorraad/ConnectionPicker.js +8 -0
  24. package/dist-lib/components/voorraad/EditArtikelPage.d.ts +1 -1
  25. package/dist-lib/components/voorraad/EditArtikelPage.d.ts.map +1 -1
  26. package/dist-lib/components/voorraad/EditArtikelPage.js +4 -4
  27. package/dist-lib/components/voorraad/ExcelExportButton.d.ts +2 -2
  28. package/dist-lib/components/voorraad/ExcelExportButton.d.ts.map +1 -1
  29. package/dist-lib/components/voorraad/ExcelExportButton.js +1 -1
  30. package/dist-lib/components/voorraad/FloridayInfoCard.d.ts +1 -1
  31. package/dist-lib/components/voorraad/FloridayInfoCard.d.ts.map +1 -1
  32. package/dist-lib/components/voorraad/FloridayInfoCard.js +3 -3
  33. package/dist-lib/components/voorraad/FloridaySentCard.d.ts +1 -1
  34. package/dist-lib/components/voorraad/FloridaySentCard.d.ts.map +1 -1
  35. package/dist-lib/components/voorraad/FloridaySentCard.js +4 -4
  36. package/dist-lib/components/voorraad/FloridayStatusBadge.d.ts +4 -0
  37. package/dist-lib/components/voorraad/FloridayStatusBadge.d.ts.map +1 -0
  38. package/dist-lib/components/voorraad/FloridayStatusBadge.js +8 -0
  39. package/dist-lib/components/voorraad/FustenPage.d.ts +1 -1
  40. package/dist-lib/components/voorraad/FustenPage.d.ts.map +1 -1
  41. package/dist-lib/components/voorraad/FustenPage.js +4 -4
  42. package/dist-lib/components/voorraad/InventorySettingsDrawer.d.ts +2 -2
  43. package/dist-lib/components/voorraad/InventorySettingsDrawer.d.ts.map +1 -1
  44. package/dist-lib/components/voorraad/InventorySettingsDrawer.js +3 -3
  45. package/dist-lib/components/voorraad/InventoryStatusBadge.d.ts +3 -3
  46. package/dist-lib/components/voorraad/InventoryStatusBadge.d.ts.map +1 -1
  47. package/dist-lib/components/voorraad/InventoryStatusBadge.js +2 -2
  48. package/dist-lib/components/voorraad/ModuleHealthCard.d.ts +2 -0
  49. package/dist-lib/components/voorraad/ModuleHealthCard.d.ts.map +1 -0
  50. package/dist-lib/components/voorraad/ModuleHealthCard.js +40 -0
  51. package/dist-lib/components/voorraad/NieuwArtikelPage.d.ts +1 -1
  52. package/dist-lib/components/voorraad/NieuwArtikelPage.d.ts.map +1 -1
  53. package/dist-lib/components/voorraad/NieuwArtikelPage.js +3 -3
  54. package/dist-lib/components/voorraad/OrderHistoryCard.d.ts +1 -1
  55. package/dist-lib/components/voorraad/OrderHistoryCard.d.ts.map +1 -1
  56. package/dist-lib/components/voorraad/OrderHistoryCard.js +1 -1
  57. package/dist-lib/components/voorraad/PriceStatusBadge.d.ts +1 -1
  58. package/dist-lib/components/voorraad/PriceStatusBadge.d.ts.map +1 -1
  59. package/dist-lib/components/voorraad/ProductCustomFieldsCard.d.ts +1 -1
  60. package/dist-lib/components/voorraad/ProductCustomFieldsCard.d.ts.map +1 -1
  61. package/dist-lib/components/voorraad/ProductCustomFieldsCard.js +2 -2
  62. package/dist-lib/components/voorraad/ProductLinkCard.d.ts +1 -1
  63. package/dist-lib/components/voorraad/ProductLinkCard.d.ts.map +1 -1
  64. package/dist-lib/components/voorraad/ProductLinkCard.js +6 -6
  65. package/dist-lib/components/voorraad/ProductSalePriceField.d.ts +2 -2
  66. package/dist-lib/components/voorraad/ProductSalePriceField.d.ts.map +1 -1
  67. package/dist-lib/components/voorraad/ProductSalePriceField.js +2 -2
  68. package/dist-lib/components/voorraad/ProductStructureCard.d.ts +2 -2
  69. package/dist-lib/components/voorraad/ProductStructureCard.d.ts.map +1 -1
  70. package/dist-lib/components/voorraad/ProductStructureCard.js +3 -3
  71. package/dist-lib/components/voorraad/PublicatiesPage.d.ts +1 -1
  72. package/dist-lib/components/voorraad/PublicatiesPage.d.ts.map +1 -1
  73. package/dist-lib/components/voorraad/PublicatiesPage.js +2 -2
  74. package/dist-lib/components/voorraad/PublishProgressCard.d.ts +2 -2
  75. package/dist-lib/components/voorraad/PublishProgressCard.d.ts.map +1 -1
  76. package/dist-lib/components/voorraad/PublishReadinessCard.d.ts +2 -2
  77. package/dist-lib/components/voorraad/PublishReadinessCard.d.ts.map +1 -1
  78. package/dist-lib/components/voorraad/StepSamenstelling.d.ts +2 -2
  79. package/dist-lib/components/voorraad/StepSamenstelling.d.ts.map +1 -1
  80. package/dist-lib/components/voorraad/StepSamenstelling.js +98 -1
  81. package/dist-lib/components/voorraad/StockBulkButtons.d.ts +2 -2
  82. package/dist-lib/components/voorraad/StockBulkButtons.d.ts.map +1 -1
  83. package/dist-lib/components/voorraad/StockBulkButtons.js +6 -6
  84. package/dist-lib/components/voorraad/StockHistoryChart.d.ts +1 -1
  85. package/dist-lib/components/voorraad/StockHistoryChart.d.ts.map +1 -1
  86. package/dist-lib/components/voorraad/StockHistoryChart.js +1 -1
  87. package/dist-lib/components/voorraad/StockIntegrityAlert.d.ts +1 -1
  88. package/dist-lib/components/voorraad/StockIntegrityAlert.d.ts.map +1 -1
  89. package/dist-lib/components/voorraad/StockIntegrityAlert.js +1 -1
  90. package/dist-lib/components/voorraad/StockMutationHistoryCard.d.ts +1 -1
  91. package/dist-lib/components/voorraad/StockMutationHistoryCard.d.ts.map +1 -1
  92. package/dist-lib/components/voorraad/StockMutationHistoryCard.js +2 -2
  93. package/dist-lib/components/voorraad/StockPushMonitor.d.ts +1 -1
  94. package/dist-lib/components/voorraad/StockPushMonitor.d.ts.map +1 -1
  95. package/dist-lib/components/voorraad/StockPushMonitor.js +8 -8
  96. package/dist-lib/components/voorraad/StockSyncStatus.d.ts +1 -1
  97. package/dist-lib/components/voorraad/StockSyncStatus.d.ts.map +1 -1
  98. package/dist-lib/components/voorraad/StockSyncStatus.js +2 -2
  99. package/dist-lib/components/voorraad/SupplyReadScopeAlert.d.ts +1 -1
  100. package/dist-lib/components/voorraad/SupplyReadScopeAlert.d.ts.map +1 -1
  101. package/dist-lib/components/voorraad/SupplyReadScopeAlert.js +1 -1
  102. package/dist-lib/components/voorraad/TrayStickerCard.d.ts +1 -1
  103. package/dist-lib/components/voorraad/TrayStickerCard.d.ts.map +1 -1
  104. package/dist-lib/components/voorraad/ValidationOverviewTable.d.ts +2 -2
  105. package/dist-lib/components/voorraad/ValidationOverviewTable.d.ts.map +1 -1
  106. package/dist-lib/components/voorraad/ValidationOverviewTable.js +5 -5
  107. package/dist-lib/components/voorraad/ValidationPage.d.ts +1 -1
  108. package/dist-lib/components/voorraad/ValidationPage.d.ts.map +1 -1
  109. package/dist-lib/components/voorraad/ValidationPage.js +3 -3
  110. package/dist-lib/components/voorraad/VoorraadDashboard.d.ts +10 -0
  111. package/dist-lib/components/voorraad/VoorraadDashboard.d.ts.map +1 -0
  112. package/dist-lib/components/voorraad/VoorraadDashboard.js +53 -0
  113. package/dist-lib/components/voorraad/VoorraadPage.d.ts +1 -1
  114. package/dist-lib/components/voorraad/VoorraadPage.d.ts.map +1 -1
  115. package/dist-lib/components/voorraad/VoorraadPage.js +35 -16
  116. package/dist-lib/components/voorraad/VoorraadPagination.d.ts +1 -1
  117. package/dist-lib/components/voorraad/VoorraadPagination.d.ts.map +1 -1
  118. package/dist-lib/components/voorraad/VoorraadStockCard.d.ts +1 -1
  119. package/dist-lib/components/voorraad/VoorraadStockCard.d.ts.map +1 -1
  120. package/dist-lib/components/voorraad/VoorraadStockCard.js +3 -3
  121. package/dist-lib/components/voorraad/VoorraadTable.d.ts +3 -3
  122. package/dist-lib/components/voorraad/VoorraadTable.d.ts.map +1 -1
  123. package/dist-lib/components/voorraad/VoorraadTable.js +122 -39
  124. package/dist-lib/components/voorraad/VoorraadVeldenCard.d.ts +1 -1
  125. package/dist-lib/components/voorraad/VoorraadVeldenCard.d.ts.map +1 -1
  126. package/dist-lib/components/voorraad/VoorraadVeldenCard.js +2 -2
  127. package/dist-lib/hooks/useFloriday.d.ts +1 -1
  128. package/dist-lib/hooks/useFloriday.js +4 -4
  129. package/dist-lib/hooks/useFloridayConnection.d.ts +1 -1
  130. package/dist-lib/hooks/useFloridayConnection.js +1 -1
  131. package/dist-lib/hooks/useFloridayContinuousStock.js +1 -1
  132. package/dist-lib/hooks/useFloridayPriceGroups.js +1 -1
  133. package/dist-lib/hooks/useFloridayVbnRequired.js +1 -1
  134. package/dist-lib/hooks/useFlorydayCustomers.js +1 -1
  135. package/dist-lib/hooks/useFusten.d.ts +1 -1
  136. package/dist-lib/hooks/useFusten.js +2 -2
  137. package/dist-lib/hooks/useInventorySettings.d.ts +1 -1
  138. package/dist-lib/hooks/useInventorySettings.js +1 -1
  139. package/dist-lib/hooks/useLocalTradeItems.d.ts +2 -2
  140. package/dist-lib/hooks/useLocalTradeItems.js +3 -3
  141. package/dist-lib/hooks/usePublishJob.d.ts +1 -1
  142. package/dist-lib/hooks/usePublishJob.js +2 -2
  143. package/dist-lib/hooks/useStockPushJobs.js +1 -1
  144. package/dist-lib/hooks/useStockSyncHealth.js +1 -1
  145. package/dist-lib/hooks/useTradeItemSpec.d.ts +2 -2
  146. package/dist-lib/hooks/useTradeItemStock.js +3 -3
  147. package/dist-lib/hooks/useVbnRegulatoryFeatures.d.ts +1 -1
  148. package/dist-lib/hooks/useVbnRegulatoryFeatures.js +1 -1
  149. package/dist-lib/hooks/useVoorraadCustomFields.d.ts +1 -1
  150. package/dist-lib/hooks/useVoorraadCustomFields.js +1 -1
  151. package/dist-lib/hooks/useVoorraadData.d.ts +1 -1
  152. package/dist-lib/hooks/useVoorraadData.js +6 -6
  153. package/dist-lib/hooks-entry.d.ts +5 -5
  154. package/dist-lib/hooks-entry.js +5 -5
  155. package/dist-lib/index.d.ts +11 -11
  156. package/dist-lib/index.js +12 -12
  157. package/dist-lib/integrations/supabase/auth-attacher.js +1 -1
  158. package/dist-lib/integrations/supabase/auth-middleware.d.ts +1 -1
  159. package/dist-lib/integrations/supabase/client.d.ts +1 -1
  160. package/dist-lib/integrations/supabase/client.js +1 -1
  161. package/dist-lib/integrations/supabase/client.server.d.ts +1 -1
  162. package/dist-lib/integrations/supabase/client.server.js +1 -1
  163. package/dist-lib/integrations/supabase/types.d.ts +450 -0
  164. package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
  165. package/dist-lib/lib/__tests__/floricode-required-features.test.js +1 -1
  166. package/dist-lib/lib/__tests__/floriday-base-supply.test.js +1 -1
  167. package/dist-lib/lib/base-supply-reader.server.js +2 -2
  168. package/dist-lib/lib/ensure-article-codes.d.ts +1 -1
  169. package/dist-lib/lib/ensure-article-codes.js +1 -1
  170. package/dist-lib/lib/floricode-client.js +1 -1
  171. package/dist-lib/lib/floriday-2026v1.server.js +2 -2
  172. package/dist-lib/lib/floriday-client.d.ts +2 -2
  173. package/dist-lib/lib/floriday-client.js +2 -2
  174. package/dist-lib/lib/floriday-customer-offer.functions.d.ts +1 -1
  175. package/dist-lib/lib/floriday-customer-offer.functions.js +4 -4
  176. package/dist-lib/lib/floriday-env.functions.d.ts +4 -4
  177. package/dist-lib/lib/floriday-env.functions.js +4 -4
  178. package/dist-lib/lib/floriday-env.server.d.ts +2 -2
  179. package/dist-lib/lib/floriday-env.server.js +2 -2
  180. package/dist-lib/lib/floriday-field-sources.d.ts +18 -0
  181. package/dist-lib/lib/floriday-field-sources.d.ts.map +1 -0
  182. package/dist-lib/lib/floriday-field-sources.js +45 -0
  183. package/dist-lib/lib/floriday-gateway.functions.d.ts +10 -10
  184. package/dist-lib/lib/floriday-gateway.functions.js +14 -14
  185. package/dist-lib/lib/floriday-gateway.server.d.ts +1 -1
  186. package/dist-lib/lib/floriday-gateway.server.js +9 -9
  187. package/dist-lib/lib/floriday-import-validator.d.ts +1 -1
  188. package/dist-lib/lib/floriday-readiness.server.d.ts +1 -1
  189. package/dist-lib/lib/floriday-readiness.server.js +2 -2
  190. package/dist-lib/lib/floriday-relink.js +1 -1
  191. package/dist-lib/lib/floriday-schema-to-zod.d.ts +9 -0
  192. package/dist-lib/lib/floriday-schema-to-zod.d.ts.map +1 -0
  193. package/dist-lib/lib/floriday-schema-to-zod.js +53 -0
  194. package/dist-lib/lib/floriday-stock-supply.server.d.ts +1 -1
  195. package/dist-lib/lib/floriday-stock-supply.server.js +2 -2
  196. package/dist-lib/lib/floriday-supply-line.js +2 -2
  197. package/dist-lib/lib/floriday-vbn-required.functions.d.ts +2 -2
  198. package/dist-lib/lib/floriday-vbn-required.functions.js +2 -2
  199. package/dist-lib/lib/floriday-warehouse.functions.d.ts +6 -6
  200. package/dist-lib/lib/floriday-warehouse.functions.js +7 -7
  201. package/dist-lib/lib/floriday-write-gate.server.js +1 -1
  202. package/dist-lib/lib/floriday-writes.functions.d.ts +2 -2
  203. package/dist-lib/lib/floriday-writes.functions.js +6 -6
  204. package/dist-lib/lib/fusten.d.ts +1 -1
  205. package/dist-lib/lib/fusten.js +2 -2
  206. package/dist-lib/lib/inventory-settings.functions.js +1 -1
  207. package/dist-lib/lib/logistics-buffer-events.server.js +2 -2
  208. package/dist-lib/lib/logistics-events.js +2 -2
  209. package/dist-lib/lib/logistics-tasks.server.js +5 -5
  210. package/dist-lib/lib/merge-products.d.ts +8 -0
  211. package/dist-lib/lib/merge-products.d.ts.map +1 -0
  212. package/dist-lib/lib/merge-products.js +17 -0
  213. package/dist-lib/lib/module-health.functions.d.ts +53497 -0
  214. package/dist-lib/lib/module-health.functions.d.ts.map +1 -0
  215. package/dist-lib/lib/module-health.functions.js +261 -0
  216. package/dist-lib/lib/module-runtime-config.functions.d.ts +1 -1
  217. package/dist-lib/lib/module-runtime-config.functions.js +2 -2
  218. package/dist-lib/lib/module-runtime.server.js +1 -1
  219. package/dist-lib/lib/product-packing.js +1 -1
  220. package/dist-lib/lib/product-types.js +1 -1
  221. package/dist-lib/lib/publish-pipeline.d.ts +1 -1
  222. package/dist-lib/lib/publish-pipeline.js +2 -2
  223. package/dist-lib/lib/publish-readiness.d.ts +2 -2
  224. package/dist-lib/lib/trade-item-prices.d.ts +1 -1
  225. package/dist-lib/lib/trade-item-prices.js +2 -2
  226. package/dist-lib/lib/validationSchemas.d.ts +15 -0
  227. package/dist-lib/lib/validationSchemas.d.ts.map +1 -0
  228. package/dist-lib/lib/validationSchemas.js +25 -0
  229. package/dist-lib/lib/voorraad-custom-fields.js +1 -1
  230. package/dist-lib/server-hooks/floriday-base-supply.js +1 -1
  231. package/dist-lib/server-hooks/floriday-continuous-stock-pull.js +1 -1
  232. package/dist-lib/server-hooks/floriday-continuous-stock.js +1 -1
  233. package/dist-lib/server-hooks/floriday-stock-reconcile.js +1 -1
  234. package/dist-lib/server-hooks/logistics-tasks-run.js +1 -1
  235. package/package.json +2 -2
@@ -0,0 +1,261 @@
1
+ /**
2
+ * Statusoverzicht van de module: klopt de configuratie, draaien de
3
+ * achtergrondtaken en loopt de voorraadsync?
4
+ *
5
+ * Bewust één server-functie die alles samenvat, zodat de instellingenpagina
6
+ * met één blik laat zien wat er in déze shell nog ontbreekt.
7
+ */
8
+ import { createServerFn } from "@tanstack/react-start";
9
+ import { requireSupabaseAuth } from "../integrations/supabase/auth-middleware.js";
10
+ export const getModuleHealth = createServerFn({ method: "GET" })
11
+ .middleware([requireSupabaseAuth])
12
+ .handler(async () => {
13
+ const { supabaseAdmin } = await import("../integrations/supabase/client.server.js");
14
+ const admin = supabaseAdmin;
15
+ const checks = [];
16
+ // --- Configuratie in de database -------------------------------------
17
+ const { data: cfgRows } = await admin
18
+ .from("module_runtime_config")
19
+ .select("key,value,updated_at");
20
+ const cfg = new Map((cfgRows ?? []).map((r) => [r.key, r]));
21
+ const baseUrl = cfg.get("voorraad_base_url")?.value ?? "";
22
+ checks.push({
23
+ id: "base_url",
24
+ label: "Adres van deze module",
25
+ status: baseUrl ? "ok" : "error",
26
+ detail: baseUrl || "Nog niet vastgelegd.",
27
+ hint: baseUrl
28
+ ? undefined
29
+ : "Open een pagina van de gepubliceerde module; het adres wordt dan automatisch vastgelegd.",
30
+ });
31
+ const hookKey = cfg.get("voorraad_hook_apikey")?.value ?? "";
32
+ checks.push({
33
+ id: "hook_apikey",
34
+ label: "Sleutel voor achtergrondtaken",
35
+ status: hookKey ? "ok" : "error",
36
+ detail: hookKey ? "Aanwezig" : "Ontbreekt",
37
+ hint: hookKey ? undefined : "Controleer of SUPABASE_PUBLISHABLE_KEY in deze omgeving is ingesteld.",
38
+ });
39
+ const processor = cfg.get("stock_queue_processor_base_url")?.value ?? "";
40
+ checks.push({
41
+ id: "processor",
42
+ label: "Verwerker van de voorraadwachtrij",
43
+ status: processor ? "ok" : "warn",
44
+ detail: processor || "Niet ingesteld; de module verwerkt de wachtrij dan zelf.",
45
+ });
46
+ // --- Koppeling met de Authenticatiemodule ------------------------------
47
+ let activeEnvironment = null;
48
+ try {
49
+ const { describeGatewayResolution } = await import("./floriday-gateway.server.js");
50
+ const info = await describeGatewayResolution();
51
+ const bron = info.addressSource === "override"
52
+ ? "handmatig ingesteld adres"
53
+ : info.addressSource === "central"
54
+ ? "automatisch via de centrale authenticatiemodule"
55
+ : "onbekend";
56
+ checks.push({
57
+ id: "gateway",
58
+ label: "Koppeling Authenticatiemodule",
59
+ status: info.addressSource === "onbekend" || info.secretSource === "onbekend"
60
+ ? "error"
61
+ : info.mismatch
62
+ ? "warn"
63
+ : "ok",
64
+ detail: info.addressSource === "onbekend"
65
+ ? "Geen adres gevonden; Floriday-acties zullen mislukken."
66
+ : `${info.address} (${bron})`,
67
+ hint: info.mismatch
68
+ ? "Let op: het handmatig ingestelde adres wijkt af van het adres dat de centrale " +
69
+ `module doorgeeft (${info.centralAddress}). Het handmatige adres krijgt voorrang. ` +
70
+ "Verwijder het handmatige adres zodra deze omgeving verhuist."
71
+ : (info.error ?? undefined),
72
+ });
73
+ }
74
+ catch (e) {
75
+ checks.push({
76
+ id: "gateway",
77
+ label: "Koppeling Authenticatiemodule",
78
+ status: "error",
79
+ detail: e?.message ?? "Kan de koppeling niet vaststellen.",
80
+ });
81
+ }
82
+ // --- Floriday-koppeling ----------------------------------------------
83
+ try {
84
+ const { data: conn } = await admin.rpc("get_active_floriday_connection_public");
85
+ const row = Array.isArray(conn) ? conn[0] : conn;
86
+ activeEnvironment = row?.environment ?? null;
87
+ checks.push({
88
+ id: "floriday",
89
+ label: "Floriday-koppeling",
90
+ status: row?.id ? "ok" : "error",
91
+ detail: row?.id
92
+ ? `Actief (${row.environment ?? "onbekende omgeving"})`
93
+ : "Geen actieve koppeling gevonden.",
94
+ hint: row?.id ? undefined : "Koppel Floriday in de authenticatiemodule.",
95
+ });
96
+ }
97
+ catch (e) {
98
+ checks.push({
99
+ id: "floriday",
100
+ label: "Floriday-koppeling",
101
+ status: "error",
102
+ detail: e?.message ?? "Kan de koppeling niet uitlezen.",
103
+ });
104
+ }
105
+ checks.push({
106
+ id: "environment",
107
+ label: "Actieve omgeving",
108
+ status: activeEnvironment ? "ok" : "warn",
109
+ detail: activeEnvironment
110
+ ? activeEnvironment === "live"
111
+ ? "Live — wijzigingen komen echt in Floriday."
112
+ : "Proefomgeving (staging)."
113
+ : "Nog geen omgeving gekozen.",
114
+ hint: activeEnvironment
115
+ ? "De authenticatiemodule moet voor deze omgeving inloggegevens hebben; anders " +
116
+ "melden voorraadwijzigingen dat er geen koppeling voor deze omgeving is."
117
+ : undefined,
118
+ });
119
+ // --- Voorraadwachtrij --------------------------------------------------
120
+ const { data: queueRows } = await admin
121
+ .from("floriday_continuous_stock_queue")
122
+ .select("status,created_at,last_error")
123
+ .in("status", ["pending", "processing", "failed"])
124
+ .order("created_at", { ascending: true })
125
+ .limit(1000);
126
+ const rows = (queueRows ?? []);
127
+ const failed = rows.filter((r) => r.status === "failed").length;
128
+ const pending = rows.filter((r) => r.status !== "failed").length;
129
+ const oldest = rows[0]?.created_at;
130
+ const stale = oldest && Date.now() - new Date(oldest).getTime() > 30 * 60000;
131
+ checks.push({
132
+ id: "queue",
133
+ label: "Voorraadwachtrij",
134
+ status: failed > 0 || stale ? "warn" : "ok",
135
+ detail: rows.length === 0
136
+ ? "Leeg — alles is verstuurd."
137
+ : `${pending} wachtend, ${failed} mislukt${oldest ? `; oudste van ${new Date(oldest).toLocaleString("nl-NL")}` : ""}.`,
138
+ hint: rows.find((r) => r.last_error)?.last_error ?? undefined,
139
+ });
140
+ // --- Geplande taken ----------------------------------------------------
141
+ try {
142
+ const { data: jobs } = await admin.rpc("get_floriday_cron_jobs");
143
+ const list = (jobs ?? []);
144
+ const active = list.filter((j) => j.active !== false).length;
145
+ checks.push({
146
+ id: "cron",
147
+ label: "Geplande achtergrondtaken",
148
+ status: active > 0 ? "ok" : "error",
149
+ detail: active > 0
150
+ ? `${active} taken actief.`
151
+ : "Geen actieve taken gevonden in de database.",
152
+ });
153
+ }
154
+ catch {
155
+ checks.push({
156
+ id: "cron",
157
+ label: "Geplande achtergrondtaken",
158
+ status: "warn",
159
+ detail: "Status van de geplande taken kon niet worden opgehaald.",
160
+ });
161
+ }
162
+ // --- Dubbele voorraadregels -------------------------------------------
163
+ try {
164
+ const { data: legacyRows } = await admin
165
+ .from("trade_item_stock")
166
+ .select("trade_item_key")
167
+ .like("trade_item_key", "product:%")
168
+ .limit(500);
169
+ const legacy = (legacyRows ?? []);
170
+ const ids = legacy
171
+ .map((r) => String(r.trade_item_key).slice(8))
172
+ .filter((v) => /^[0-9a-f-]{36}$/i.test(v));
173
+ let doubles = 0;
174
+ if (ids.length) {
175
+ const { data: prods } = await admin
176
+ .from("products")
177
+ .select("id")
178
+ .in("id", ids);
179
+ doubles = (prods ?? []).length;
180
+ }
181
+ checks.push({
182
+ id: "stock_keys",
183
+ label: "Voorraadregels per artikel",
184
+ status: doubles > 0 ? "warn" : "ok",
185
+ detail: doubles > 0
186
+ ? `${doubles} artikel(en) hebben nog een oude, tweede voorraadregel.`
187
+ : "Elk artikel heeft precies één voorraadregel.",
188
+ hint: doubles > 0
189
+ ? "Sla de voorraad van die artikelen één keer opnieuw op; de regels worden dan automatisch samengevoegd."
190
+ : undefined,
191
+ });
192
+ }
193
+ catch {
194
+ // Controle mag de statuskaart nooit blokkeren.
195
+ }
196
+ // --- Aantallen bij producten gelijk aan de voorraad? -------------------
197
+ try {
198
+ const { data: stockRows } = await admin
199
+ .from("trade_item_stock")
200
+ .select("trade_item_key,physical_stock,reserved_stock")
201
+ .limit(2000);
202
+ const rows = (stockRows ?? []);
203
+ const byKey = new Map(rows.map((r) => [String(r.trade_item_key), Number(r.physical_stock ?? 0)]));
204
+ const { data: prodRows } = await admin
205
+ .from("products")
206
+ .select("id,product,quantity,trade_item_key,floriday_trade_item_id")
207
+ .limit(2000);
208
+ let mismatch = 0;
209
+ for (const p of (prodRows ?? [])) {
210
+ const key = (p.floriday_trade_item_id && byKey.has(String(p.floriday_trade_item_id))
211
+ ? String(p.floriday_trade_item_id)
212
+ : null) ??
213
+ (p.trade_item_key && byKey.has(String(p.trade_item_key))
214
+ ? String(p.trade_item_key)
215
+ : null) ??
216
+ (byKey.has(`product:${p.id}`) ? `product:${p.id}` : null);
217
+ if (!key)
218
+ continue;
219
+ if (Number(p.quantity ?? 0) !== byKey.get(key))
220
+ mismatch += 1;
221
+ }
222
+ checks.push({
223
+ id: "quantity_sync",
224
+ label: "Aantallen bij producten",
225
+ status: mismatch > 0 ? "warn" : "ok",
226
+ detail: mismatch > 0
227
+ ? `${mismatch} product(en) tonen een ander aantal dan de voorraad.`
228
+ : "Elk product toont hetzelfde aantal als de voorraad.",
229
+ hint: mismatch > 0
230
+ ? "Sla de voorraad van die producten één keer opnieuw op; het aantal loopt daarna weer mee."
231
+ : undefined,
232
+ });
233
+ // --- Reserveringen hoger dan de liggende voorraad --------------------
234
+ const over = rows.filter((r) => Number(r.reserved_stock ?? 0) > Number(r.physical_stock ?? 0)).length;
235
+ checks.push({
236
+ id: "reservations",
237
+ label: "Reserveringen",
238
+ status: over > 0 ? "warn" : "ok",
239
+ detail: over > 0
240
+ ? `${over} artikel(en) hebben meer gereserveerd dan er liggend is.`
241
+ : "Geen artikelen met meer reserveringen dan voorraad.",
242
+ hint: over > 0
243
+ ? "Dit komt door openstaande orders. Controleer of die orders nog terecht openstaan; afgeronde of geannuleerde orders geven de reservering vrij."
244
+ : undefined,
245
+ });
246
+ }
247
+ catch {
248
+ // Controle mag de statuskaart nooit blokkeren.
249
+ }
250
+ return { checkedAt: new Date().toISOString(), checks };
251
+ });
252
+ /** Geeft vastgelopen wachtrijregels handmatig vrij. */
253
+ export const recoverStockQueue = createServerFn({ method: "POST" })
254
+ .middleware([requireSupabaseAuth])
255
+ .handler(async () => {
256
+ const { supabaseAdmin } = await import("../integrations/supabase/client.server.js");
257
+ const { data, error } = await supabaseAdmin.rpc("reset_stalled_floriday_stock_queue", { p_include_failed: true });
258
+ if (error)
259
+ throw new Error(error.message);
260
+ return { restored: Number(data ?? 0) };
261
+ });
@@ -1,2 +1,2 @@
1
- export declare const registerModuleBaseUrl: import("@tanstack/start-client-core").OptionalFetcher<undefined, undefined, Promise<import("./module-runtime.server").ModuleRegistrationResult>>;
1
+ export declare const registerModuleBaseUrl: import("@tanstack/start-client-core").OptionalFetcher<undefined, undefined, Promise<import("./module-runtime.server.js").ModuleRegistrationResult>>;
2
2
  //# sourceMappingURL=module-runtime-config.functions.d.ts.map
@@ -9,7 +9,7 @@
9
9
  import { createServerFn } from "@tanstack/react-start";
10
10
  import { getRequest } from "@tanstack/react-start/server";
11
11
  export const registerModuleBaseUrl = createServerFn({ method: "POST" }).handler(async () => {
12
- const { registerModuleRuntime } = await import("./module-runtime.server");
12
+ const { registerModuleRuntime } = await import("./module-runtime.server.js");
13
13
  let request = null;
14
14
  try {
15
15
  request = getRequest();
@@ -21,7 +21,7 @@ export const registerModuleBaseUrl = createServerFn({ method: "POST" }).handler(
21
21
  // Vangnet: mocht de cron (nog) niet aankomen, dan verwerkt de module zelf
22
22
  // openstaande taken. Throttled tot maximaal één run per minuut.
23
23
  try {
24
- const { maybeTickLogisticsTasks } = await import("./logistics-tasks.server");
24
+ const { maybeTickLogisticsTasks } = await import("./logistics-tasks.server.js");
25
25
  maybeTickLogisticsTasks();
26
26
  }
27
27
  catch {
@@ -140,7 +140,7 @@ async function baseUrlCandidates(request) {
140
140
  push(v);
141
141
  push(fromRequest);
142
142
  try {
143
- const { getShellHost } = await import("./centralSecrets.server");
143
+ const { getShellHost } = await import("./centralSecrets.server.js");
144
144
  push(normalizeOrigin(await getShellHost()));
145
145
  }
146
146
  catch {
@@ -19,7 +19,7 @@
19
19
  * ingesteld in Floriday" en mag de technische standaardwaarde nooit als een
20
20
  * geloofwaardig getal getoond worden.
21
21
  */
22
- import { supabase } from "../integrations/supabase/client";
22
+ import { supabase } from "../integrations/supabase/client.js";
23
23
  function toPositiveInt(value) {
24
24
  const n = Number(value);
25
25
  if (!Number.isFinite(n) || n <= 0)
@@ -44,7 +44,7 @@ export function floridayPendingReason(input) {
44
44
  case "skipped_no_price":
45
45
  return lastSkipReason || "Prijs ontbreekt, nog niet verzonden";
46
46
  case "skipped_no_warehouse":
47
- return lastSkipReason || "Geen voorkeursmagazijn; kies er een op de Connectie-pagina";
47
+ return lastSkipReason || "Geen voorkeursmagazijn; kies er een in Instellingen › Floriday";
48
48
  case "pending":
49
49
  case "processing":
50
50
  return "Wordt doorgegeven aan Floriday";
@@ -1,4 +1,4 @@
1
- import { type FriendlyPublishError } from "./publish-errors";
1
+ import { type FriendlyPublishError } from "./publish-errors.js";
2
2
  export type PublishStepKey = "trade-item" | "stock" | "offer" | "supply-line" | "prices" | "verify";
3
3
  export declare const PUBLISH_STEPS: {
4
4
  key: PublishStepKey;
@@ -5,8 +5,8 @@
5
5
  * Geslaagde stappen worden bij een nieuwe poging overgeslagen, tijdelijke
6
6
  * storingen worden automatisch opnieuw geprobeerd.
7
7
  */
8
- import { supabase } from "../integrations/supabase/client";
9
- import { translatePublishError } from "./publish-errors";
8
+ import { supabase } from "../integrations/supabase/client.js";
9
+ import { translatePublishError } from "./publish-errors.js";
10
10
  export const PUBLISH_STEPS = [
11
11
  { key: "trade-item", label: "Productgegevens" },
12
12
  { key: "stock", label: "Voorraad" },
@@ -4,8 +4,8 @@
4
4
  * Levert een korte checklist op in gewone taal. Elke regel verwijst naar de
5
5
  * stap in de wizard waar het opgelost kan worden.
6
6
  */
7
- import type { WizardData } from "./floriday-payload";
8
- import type { TradeItemSpec } from "../hooks/useTradeItemSpec";
7
+ import type { WizardData } from "./floriday-payload.js";
8
+ import type { TradeItemSpec } from "../hooks/useTradeItemSpec.js";
9
9
  export interface ReadinessItem {
10
10
  key: string;
11
11
  label: string;
@@ -1,4 +1,4 @@
1
- import type { FloridayPriceGroup } from "../hooks/useFloridayPriceGroups";
1
+ import type { FloridayPriceGroup } from "../hooks/useFloridayPriceGroups.js";
2
2
  export interface TradeItemPriceRow {
3
3
  price_group_id: string | null;
4
4
  price_per_piece: number;
@@ -11,8 +11,8 @@
11
11
  * Elk succesvolle push updatet `last_pushed_at`; falen zet `last_push_error`
12
12
  * maar rollt de lokale rij niet terug.
13
13
  */
14
- import { supabase } from "../integrations/supabase/client";
15
- import { postSupplyLine } from "./floriday-supply-line";
14
+ import { supabase } from "../integrations/supabase/client.js";
15
+ import { postSupplyLine } from "./floriday-supply-line.js";
16
16
  export async function readTradeItemPrices(tradeItemKey) {
17
17
  const userRes = await supabase.auth.getUser();
18
18
  const userId = userRes.data.user?.id;
@@ -0,0 +1,15 @@
1
+ import { z } from "zod";
2
+ export declare const loginSchema: z.ZodObject<{
3
+ email: z.ZodString;
4
+ password: z.ZodString;
5
+ }, z.core.$strip>;
6
+ export declare const bugReportSchema: z.ZodObject<{
7
+ title: z.ZodString;
8
+ description: z.ZodString;
9
+ }, z.core.$strip>;
10
+ export declare const ALLOWED_FILE_TYPES: string[];
11
+ export declare function validateFileUpload(file: File): {
12
+ valid: boolean;
13
+ error?: string;
14
+ };
15
+ //# sourceMappingURL=validationSchemas.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validationSchemas.d.ts","sourceRoot":"","sources":["../../src/lib/validationSchemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,WAAW;;;iBAGtB,CAAC;AAEH,eAAO,MAAM,eAAe;;;iBAG1B,CAAC;AAEH,eAAO,MAAM,kBAAkB,UAK9B,CAAC;AAIF,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,IAAI,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAQjF"}
@@ -0,0 +1,25 @@
1
+ import { z } from "zod";
2
+ export const loginSchema = z.object({
3
+ email: z.string().email("Ongeldig e-mailadres"),
4
+ password: z.string().min(6, "Wachtwoord moet minimaal 6 tekens bevatten"),
5
+ });
6
+ export const bugReportSchema = z.object({
7
+ title: z.string().min(1, "Titel is verplicht").max(200),
8
+ description: z.string().min(1, "Beschrijving is verplicht").max(5000),
9
+ });
10
+ export const ALLOWED_FILE_TYPES = [
11
+ "image/png",
12
+ "image/jpeg",
13
+ "image/gif",
14
+ "application/pdf",
15
+ ];
16
+ const MAX_FILE_SIZE = 10 * 1024 * 1024; // 10MB
17
+ export function validateFileUpload(file) {
18
+ if (!ALLOWED_FILE_TYPES.includes(file.type)) {
19
+ return { valid: false, error: "Bestandstype niet toegestaan" };
20
+ }
21
+ if (file.size > MAX_FILE_SIZE) {
22
+ return { valid: false, error: "Bestand is te groot (max 10MB)" };
23
+ }
24
+ return { valid: true };
25
+ }
@@ -1,4 +1,4 @@
1
- import { supabase } from "../integrations/supabase/client";
1
+ import { supabase } from "../integrations/supabase/client.js";
2
2
  const TABLE = "voorraad_custom_fields";
3
3
  const SELECT = "id,field_key,field_label,field_type,options,show_in_template,show_in_columns,show_in_detail,sort_order";
4
4
  export function slugifyFieldKey(label) {
@@ -7,7 +7,7 @@
7
7
  * (zelfde als de andere Voorraad-hooks). Open punt: naar een gedeeld geheim.
8
8
  * De route verwerkt alleen bestaande regels en geeft geen gegevens terug.
9
9
  */
10
- import { runGuardedHook } from "./guard";
10
+ import { runGuardedHook } from "./guard.js";
11
11
  const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
12
12
  async function handle(request) {
13
13
  const json = (b, status = 200) => new Response(JSON.stringify(b), { status, headers: { "Content-Type": "application/json" } });
@@ -10,7 +10,7 @@
10
10
  * Rate limits en CPU-tijd op Cloudflare Workers: max 200 items per run,
11
11
  * oudste `fetched_at` eerst; parallel 5 tegelijk per connectie.
12
12
  */
13
- import { runGuardedHook } from "./guard";
13
+ import { runGuardedHook } from "./guard.js";
14
14
  const MAX_ITEMS_PER_RUN = 200;
15
15
  const PARALLEL = 5;
16
16
  async function pMapLimited(items, limit, worker) {
@@ -11,7 +11,7 @@
11
11
  * `/api/public/*`, dus platform-auth wordt overgeslagen; wij verifiëren
12
12
  * de apikey zelf om misbruik te voorkomen).
13
13
  */
14
- import { runGuardedHook } from "./guard";
14
+ import { runGuardedHook } from "./guard.js";
15
15
  /** Vaste maximale batch per ronde: beschermt de Floriday-snelheidslimiet. */
16
16
  const BATCH_SIZE = 25;
17
17
  /** Wachttijd voordat de terugvalweg een blijven liggen regel zelf oppakt. */
@@ -9,7 +9,7 @@
9
9
  * Bij een verschil zonder openstaande wachtrijregel wordt het artikel als
10
10
  * DRIFT gemarkeerd en één correctie ingepland.
11
11
  */
12
- import { runGuardedHook } from "./guard";
12
+ import { runGuardedHook } from "./guard.js";
13
13
  const MAX_WEEKS_PER_RUN = 5;
14
14
  async function handle(request) {
15
15
  const apikey = request.headers.get("apikey") ??
@@ -7,7 +7,7 @@
7
7
  * `/api/public/*`, dus platform-auth wordt overgeslagen; wij verifiëren de
8
8
  * apikey zelf).
9
9
  */
10
- import { runGuardedHook } from "./guard";
10
+ import { runGuardedHook } from "./guard.js";
11
11
  async function handle(request) {
12
12
  const apikey = request.headers.get("apikey") ??
13
13
  request.headers.get("x-api-key") ??
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flowselections/floriday-voorraad",
3
- "version": "1.0.76",
3
+ "version": "1.0.78",
4
4
  "sideEffects": false,
5
5
  "type": "module",
6
6
  "main": "./dist-lib/index.js",
@@ -25,7 +25,7 @@
25
25
  "scripts": {
26
26
  "dev": "vite dev",
27
27
  "build": "vite build",
28
- "build:lib": "tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json && node -e \"require('fs').writeFileSync('dist-lib/styles.css', '@source \\\"./\\\";\\n')\"",
28
+ "build:lib": "tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json --resolve-full-paths && node -e \"require('fs').writeFileSync('dist-lib/styles.css', '@source \\\"./\\\";\\n')\"",
29
29
  "build:lib:watch": "tsc -p tsconfig.build.json --watch",
30
30
  "build:dev": "vite build --mode development",
31
31
  "preview": "vite preview",