@flowselections/floriday-authenticatie-module 1.0.53 → 1.0.54

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 (59) hide show
  1. package/dist-lib/components/TemplatePage.d.ts +1 -1
  2. package/dist-lib/components/TemplatePage.d.ts.map +1 -1
  3. package/dist-lib/components/floriday/FlorydayApiLogPage.d.ts +1 -1
  4. package/dist-lib/components/floriday/FlorydayApiLogPage.d.ts.map +1 -1
  5. package/dist-lib/components/floriday/FlorydayConnectionPage.d.ts +1 -1
  6. package/dist-lib/components/floriday/FlorydayConnectionPage.d.ts.map +1 -1
  7. package/dist-lib/components/floriday/FlorydayConnectionPage.js +2 -1
  8. package/dist-lib/components/floriday/FlorydayCredentialStatusBanner.d.ts +1 -1
  9. package/dist-lib/components/floriday/FlorydayCredentialStatusBanner.d.ts.map +1 -1
  10. package/dist-lib/components/floriday/FlorydayShellRoutesCard.d.ts +2 -0
  11. package/dist-lib/components/floriday/FlorydayShellRoutesCard.d.ts.map +1 -0
  12. package/dist-lib/components/floriday/FlorydayShellRoutesCard.js +22 -0
  13. package/dist-lib/components/floriday/FlorydaySyncHealthBanner.d.ts +1 -1
  14. package/dist-lib/components/floriday/FlorydaySyncHealthBanner.d.ts.map +1 -1
  15. package/dist-lib/components/floriday/FlorydaySyncJobsCard.d.ts +1 -1
  16. package/dist-lib/components/floriday/FlorydaySyncJobsCard.d.ts.map +1 -1
  17. package/dist-lib/components/floriday/FlorydayWebhooksCard.d.ts +1 -1
  18. package/dist-lib/components/floriday/FlorydayWebhooksCard.d.ts.map +1 -1
  19. package/dist-lib/components/floriday/TokenHealthCard.d.ts +1 -1
  20. package/dist-lib/components/floriday/TokenHealthCard.d.ts.map +1 -1
  21. package/dist-lib/components/settings/FloricodeSettingsCard.d.ts +1 -1
  22. package/dist-lib/components/settings/FloricodeSettingsCard.d.ts.map +1 -1
  23. package/dist-lib/components/settings/FlorydaySettingsCard.d.ts +1 -1
  24. package/dist-lib/components/settings/FlorydaySettingsCard.d.ts.map +1 -1
  25. package/dist-lib/integrations/supabase/client.js +1 -1
  26. package/dist-lib/integrations/supabase/client.server.d.ts +2 -32082
  27. package/dist-lib/integrations/supabase/client.server.d.ts.map +1 -1
  28. package/dist-lib/integrations/supabase/client.server.js +1 -1
  29. package/dist-lib/integrations/supabase/types.d.ts +1043 -3
  30. package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
  31. package/dist-lib/lib/cron/process-stock-queue.d.ts +27 -5
  32. package/dist-lib/lib/cron/process-stock-queue.d.ts.map +1 -1
  33. package/dist-lib/lib/cron/process-stock-queue.js +98 -75
  34. package/dist-lib/lib/floriday-scopes.d.ts +7 -0
  35. package/dist-lib/lib/floriday-scopes.d.ts.map +1 -1
  36. package/dist-lib/lib/floriday-scopes.js +34 -0
  37. package/dist-lib/lib/floriday-sync.functions.d.ts.map +1 -1
  38. package/dist-lib/lib/floriday-sync.functions.js +4 -2
  39. package/dist-lib/lib/floriday.functions.d.ts +11 -0
  40. package/dist-lib/lib/floriday.functions.d.ts.map +1 -1
  41. package/dist-lib/lib/floriday.functions.js +76 -22
  42. package/dist-lib/lib/gateway/diagnostics.d.ts.map +1 -1
  43. package/dist-lib/lib/gateway/diagnostics.js +12 -0
  44. package/dist-lib/lib/gateway/floriday-get.d.ts +55 -0
  45. package/dist-lib/lib/gateway/floriday-get.d.ts.map +1 -0
  46. package/dist-lib/lib/gateway/floriday-get.js +185 -0
  47. package/dist-lib/lib/gateway/index.d.ts +1 -0
  48. package/dist-lib/lib/gateway/index.d.ts.map +1 -1
  49. package/dist-lib/lib/gateway/index.js +1 -0
  50. package/dist-lib/lib/gateway/webhook-subscribe.d.ts.map +1 -1
  51. package/dist-lib/lib/gateway/webhook-subscribe.js +13 -1
  52. package/dist-lib/lib/shell-base.d.ts +2 -0
  53. package/dist-lib/lib/shell-base.d.ts.map +1 -0
  54. package/dist-lib/lib/shell-base.js +31 -0
  55. package/dist-lib/lib/shell-routes.d.ts +25 -0
  56. package/dist-lib/lib/shell-routes.d.ts.map +1 -0
  57. package/dist-lib/lib/shell-routes.js +127 -0
  58. package/package.json +20 -3
  59. package/dist-lib/assets/floriday-logo.png.asset.json +0 -11
@@ -16,20 +16,42 @@ export declare function isoWeekParts(input?: string | Date): {
16
16
  /** Tijdelijk (netwerk/5xx/429) versus definitief (gegevensfout). */
17
17
  export declare function isPermanentError(message: string): boolean;
18
18
  export declare function isRateLimited(message: string): boolean;
19
- type PushOutcome = {
19
+ export declare const SKIPPED_NO_PRICE_MESSAGE = "Prijs ontbreekt, nog niet verzonden";
20
+ export type StockOutcome = {
21
+ outcome: "quantity_sent" | "skipped_no_price" | "error";
22
+ availabilitySent: boolean;
23
+ quantitySent: boolean;
24
+ error: string | null;
25
+ permanent: boolean;
26
+ attemptId: string | null;
27
+ };
28
+ type WriteResult = {
20
29
  ok: boolean;
21
- permanent?: boolean;
30
+ status?: number;
22
31
  error?: string;
23
32
  attemptId?: string | null;
24
- quantitySkipped?: string;
25
33
  };
26
- /** Zet één wachtrijregel door naar Floriday. Gooit nooit. */
27
- export declare function pushStockRow(supabase: SupabaseClient, env: FlorydayEnvironment, row: StockQueueRow): Promise<PushOutcome>;
34
+ /**
35
+ * Bepaalt de afsluiting van een regel uit de twee Floriday-antwoorden.
36
+ * Puur (geen I/O) zodat het los te testen is.
37
+ * - quantity_sent alleen bij een 2xx op de base-supply-PATCH.
38
+ * - 404 op de PATCH (geen weekaanbod) = skipped_no_price, nooit verzonden.
39
+ * - beschikbaarheid alleen is nooit quantity_sent.
40
+ */
41
+ export declare function decideOutcome(availability: WriteResult | null, quantity: WriteResult | null): StockOutcome;
42
+ /**
43
+ * Zet één wachtrijregel door naar Floriday. Gooit nooit.
44
+ * Er wordt bewust GEEN PUT met basePricePerPiece gedaan zolang het prijsplan
45
+ * van de Voorraad-module niet is goedgekeurd: alleen een PATCH op een
46
+ * bestaand weekaanbod (numberOfPieces als queryparameter, geen body).
47
+ */
48
+ export declare function pushStockRow(supabase: SupabaseClient, env: FlorydayEnvironment, row: StockQueueRow): Promise<StockOutcome>;
28
49
  /** Eén verwerkingsronde. Retourneert een compacte samenvatting. */
29
50
  export declare function runStockQueueRound(supabase: SupabaseClient, limit?: number): Promise<{
30
51
  ok: true;
31
52
  claimed: number;
32
53
  succeeded: number;
54
+ skippedNoPrice: number;
33
55
  failed: number;
34
56
  rateLimited: boolean;
35
57
  }>;
@@ -1 +1 @@
1
- {"version":3,"file":"process-stock-queue.d.ts","sourceRoot":"","sources":["../../../src/lib/cron/process-stock-queue.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAIL,KAAK,mBAAmB,EACzB,MAAM,0BAA0B,CAAC;AAIlC,KAAK,aAAa,GAAG;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,iBAAiB,EAAE,OAAO,GAAG,IAAI,CAAC;IAClC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB,CAAC;AAEF,kCAAkC;AAClC,wBAAgB,YAAY,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAYlF;AAED,oEAAoE;AACpE,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAazD;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAEtD;AAmCD,KAAK,WAAW,GAAG;IACjB,EAAE,EAAE,OAAO,CAAC;IACZ,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,6DAA6D;AAC7D,wBAAsB,YAAY,CAChC,QAAQ,EAAE,cAAc,EACxB,GAAG,EAAE,mBAAmB,EACxB,GAAG,EAAE,aAAa,GACjB,OAAO,CAAC,WAAW,CAAC,CA6FtB;AAED,mEAAmE;AACnE,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,cAAc,EACxB,KAAK,SAAa,GACjB,OAAO,CAAC;IACT,EAAE,EAAE,IAAI,CAAC;IACT,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,OAAO,CAAC;CACtB,CAAC,CA4CD;AAED;;;GAGG;AACH,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,cAAc,GACvB,OAAO,CAAC,QAAQ,CAAC,CA4BnB;AAOD,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI,CAUlE"}
1
+ {"version":3,"file":"process-stock-queue.d.ts","sourceRoot":"","sources":["../../../src/lib/cron/process-stock-queue.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAIL,KAAK,mBAAmB,EACzB,MAAM,0BAA0B,CAAC;AAKlC,KAAK,aAAa,GAAG;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,iBAAiB,EAAE,OAAO,GAAG,IAAI,CAAC;IAClC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB,CAAC;AAEF,kCAAkC;AAClC,wBAAgB,YAAY,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAYlF;AAED,oEAAoE;AACpE,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAazD;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAEtD;AAmCD,eAAO,MAAM,wBAAwB,wCAAwC,CAAC;AAE9E,MAAM,MAAM,YAAY,GAAG;IACzB,OAAO,EAAE,eAAe,GAAG,kBAAkB,GAAG,OAAO,CAAC;IACxD,gBAAgB,EAAE,OAAO,CAAC;IAC1B,YAAY,EAAE,OAAO,CAAC;IACtB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B,CAAC;AAEF,KAAK,WAAW,GAAG;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC;AAE/F;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC3B,YAAY,EAAE,WAAW,GAAG,IAAI,EAChC,QAAQ,EAAE,WAAW,GAAG,IAAI,GAC3B,YAAY,CA0Bd;AAMD;;;;;GAKG;AACH,wBAAsB,YAAY,CAChC,QAAQ,EAAE,cAAc,EACxB,GAAG,EAAE,mBAAmB,EACxB,GAAG,EAAE,aAAa,GACjB,OAAO,CAAC,YAAY,CAAC,CAsDvB;AAeD,mEAAmE;AACnE,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,cAAc,EACxB,KAAK,SAAa,GACjB,OAAO,CAAC;IACT,EAAE,EAAE,IAAI,CAAC;IACT,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,OAAO,CAAC;CACtB,CAAC,CAoCD;AAED;;;GAGG;AACH,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,cAAc,GACvB,OAAO,CAAC,QAAQ,CAAC,CAoCnB;AAOD,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI,CAUlE"}
@@ -13,6 +13,7 @@
13
13
  // pakt het weer op.
14
14
  // ============================================================================
15
15
  import { florydayWrite, getActiveFlorydayEnvironment, syncShellHostRuntimeConfig, } from "../floriday.functions.js";
16
+ import { verifyGatewayRequest, GATEWAY_HEADER_TIMESTAMP } from "../floriday-gateway-hmac.js";
16
17
  const BATCH_SIZE = 25;
17
18
  /** ISO-weeknummer van vandaag. */
18
19
  export function isoWeekParts(input) {
@@ -69,10 +70,53 @@ async function resolveWarehouseId(supabase, connectionId, tradeItemId, cachedIte
69
70
  const chosen = own.find((w) => w?.data?.isDefault === true) ?? own[0];
70
71
  return chosen?.floriday_id ?? chosen?.data?.warehouseId;
71
72
  }
72
- /** Zet één wachtrijregel door naar Floriday. Gooit nooit. */
73
+ export const SKIPPED_NO_PRICE_MESSAGE = "Prijs ontbreekt, nog niet verzonden";
74
+ /**
75
+ * Bepaalt de afsluiting van een regel uit de twee Floriday-antwoorden.
76
+ * Puur (geen I/O) zodat het los te testen is.
77
+ * - quantity_sent alleen bij een 2xx op de base-supply-PATCH.
78
+ * - 404 op de PATCH (geen weekaanbod) = skipped_no_price, nooit verzonden.
79
+ * - beschikbaarheid alleen is nooit quantity_sent.
80
+ */
81
+ export function decideOutcome(availability, quantity) {
82
+ const availabilitySent = availability?.ok === true;
83
+ const attemptId = quantity?.attemptId ?? availability?.attemptId ?? null;
84
+ if (availability && !availability.ok) {
85
+ const message = availability.error ?? `HTTP ${availability.status}`;
86
+ return { outcome: "error", availabilitySent: false, quantitySent: false, error: message, permanent: isPermanentError(message), attemptId };
87
+ }
88
+ if (!quantity) {
89
+ return { outcome: "skipped_no_price", availabilitySent, quantitySent: false, error: SKIPPED_NO_PRICE_MESSAGE, permanent: false, attemptId };
90
+ }
91
+ if (quantity.ok) {
92
+ return { outcome: "quantity_sent", availabilitySent, quantitySent: true, error: null, permanent: false, attemptId };
93
+ }
94
+ if (quantity.status === 404) {
95
+ return {
96
+ outcome: "skipped_no_price",
97
+ availabilitySent,
98
+ quantitySent: false,
99
+ error: `${SKIPPED_NO_PRICE_MESSAGE} (geen weekaanbod in Floriday)`,
100
+ permanent: false,
101
+ attemptId,
102
+ };
103
+ }
104
+ const message = quantity.error ?? `HTTP ${quantity.status}`;
105
+ return { outcome: "error", availabilitySent, quantitySent: false, error: message, permanent: isPermanentError(message), attemptId };
106
+ }
107
+ function errorOutcome(message, permanent) {
108
+ return { outcome: "error", availabilitySent: false, quantitySent: false, error: message, permanent, attemptId: null };
109
+ }
110
+ /**
111
+ * Zet één wachtrijregel door naar Floriday. Gooit nooit.
112
+ * Er wordt bewust GEEN PUT met basePricePerPiece gedaan zolang het prijsplan
113
+ * van de Voorraad-module niet is goedgekeurd: alleen een PATCH op een
114
+ * bestaand weekaanbod (numberOfPieces als queryparameter, geen body).
115
+ */
73
116
  export async function pushStockRow(supabase, env, row) {
74
- const pieces = Math.max(0, Number(row.number_of_pieces ?? 0) || 0);
117
+ const pieces = Math.max(0, Math.floor(Number(row.number_of_pieces ?? 0) || 0));
75
118
  const available = row.desired_available ?? pieces > 0;
119
+ const { year, week } = isoWeekParts();
76
120
  try {
77
121
  const { data: cached } = await supabase
78
122
  .from("floriday_trade_items_cache")
@@ -81,75 +125,55 @@ export async function pushStockRow(supabase, env, row) {
81
125
  .eq("floriday_id", row.trade_item_id)
82
126
  .maybeSingle();
83
127
  if (!cached) {
84
- return {
85
- ok: false,
86
- permanent: true,
87
- error: "Dit artikel staat nog niet in de lokale Floriday-cache. Synchroniseer de artikelen en probeer opnieuw.",
88
- };
128
+ return errorOutcome("Dit artikel staat nog niet in de lokale Floriday-cache. Synchroniseer de artikelen en probeer opnieuw.", true);
89
129
  }
90
130
  const item = cached.data ?? {};
91
131
  const warehouseId = await resolveWarehouseId(supabase, row.connection_id, row.trade_item_id, item);
92
- // 1. Werkelijk aantal stuks via het weekaanbod van de lopende week.
93
- const { year, week } = isoWeekParts();
94
- const { data: supply } = await supabase
95
- .from("trade_item_supply_lines")
96
- .select("price_per_piece, currency")
97
- .eq("connection_id", row.connection_id)
98
- .eq("trade_item_id", row.trade_item_id)
99
- .order("updated_at", { ascending: false })
100
- .limit(1)
101
- .maybeSingle();
102
- const pricePerPiece = Number(supply?.price_per_piece ?? NaN);
103
- let quantitySkipped;
104
- if (Number.isFinite(pricePerPiece) && pricePerPiece > 0) {
105
- const qty = await florydayWrite(supabase, env, {
106
- module: "inventory",
107
- action: "edit-weekly-base-supply",
108
- method: "PUT",
109
- path: `/trade-items/${row.trade_item_id}/base-supply/${year}/${week}`,
110
- referenceId: row.trade_item_id,
111
- idempotencyKey: `inventory:weekly-base-supply:${row.trade_item_id}:${year}:${week}:${pieces}`,
112
- body: {
113
- basePricePerPiece: {
114
- currency: supply?.currency ?? "EUR",
115
- value: pricePerPiece,
116
- },
117
- numberOfPieces: pieces,
118
- },
119
- });
120
- if (!qty.ok) {
121
- const message = qty.error ?? `HTTP ${qty.status}`;
122
- return { ok: false, permanent: isPermanentError(message), error: message };
123
- }
124
- }
125
- else {
126
- quantitySkipped =
127
- "Aantal niet doorgezet: er is nog geen prijs bekend voor dit artikel.";
128
- }
129
- // 2. Beschikbaarheidsschakelaar.
132
+ // 1. Beschikbaarheid. Sleutel zonder aantal, zodat een latere echte
133
+ // aantal-verzending (eigen sleutel) nooit wordt overgeslagen.
130
134
  const body = { available };
131
135
  if (warehouseId)
132
136
  body.warehouseId = warehouseId;
133
- const res = await florydayWrite(supabase, env, {
137
+ const availability = (await florydayWrite(supabase, env, {
134
138
  module: "inventory",
135
139
  action: "publish-continuous-stock",
136
140
  method: "PUT",
137
141
  path: `/trade-items/${row.trade_item_id}/continuous-stock`,
138
142
  referenceId: row.trade_item_id,
139
- idempotencyKey: `inventory:continuous-stock:${row.trade_item_id}:${available}:${pieces}`,
143
+ idempotencyKey: `inventory:continuous-stock:${row.trade_item_id}:${year}:${week}:${available}:${row.id}`,
140
144
  body,
141
- });
142
- if (!res.ok) {
143
- const message = res.error ?? `HTTP ${res.status}`;
144
- return { ok: false, permanent: isPermanentError(message), error: message };
145
- }
146
- return { ok: true, attemptId: res.attemptId ?? null, quantitySkipped };
145
+ }));
146
+ if (!availability.ok)
147
+ return decideOutcome(availability, null);
148
+ // 2. Aantal: alleen PATCH op bestaand weekaanbod.
149
+ const quantity = (await florydayWrite(supabase, env, {
150
+ module: "inventory",
151
+ action: "patch-weekly-base-supply",
152
+ method: "PATCH",
153
+ path: `/trade-items/${row.trade_item_id}/base-supply/${year}/${week}?numberOfPieces=${pieces}`,
154
+ referenceId: row.trade_item_id,
155
+ idempotencyKey: `inventory:patch-weekly-base-supply:${row.trade_item_id}:${year}:${week}:${pieces}:${row.id}`,
156
+ }));
157
+ return decideOutcome(availability, quantity);
147
158
  }
148
159
  catch (e) {
149
160
  const message = e instanceof Error ? e.message : String(e);
150
- return { ok: false, permanent: isPermanentError(message), error: message };
161
+ return errorOutcome(message, isPermanentError(message));
151
162
  }
152
163
  }
164
+ async function completeRow(supabase, id, o) {
165
+ const { error } = await supabase.rpc("complete_floriday_stock_queue_outcome", {
166
+ p_id: id,
167
+ p_outcome: o.outcome,
168
+ p_availability_sent: o.availabilitySent,
169
+ p_quantity_sent: o.quantitySent,
170
+ p_error: o.error,
171
+ p_attempt_id: o.attemptId,
172
+ p_permanent: o.permanent,
173
+ });
174
+ if (error)
175
+ console.error("[stock-queue] afsluiten mislukt:", id, error.message);
176
+ }
153
177
  /** Eén verwerkingsronde. Retourneert een compacte samenvatting. */
154
178
  export async function runStockQueueRound(supabase, limit = BATCH_SIZE) {
155
179
  const env = await getActiveFlorydayEnvironment(supabase);
@@ -158,48 +182,47 @@ export async function runStockQueueRound(supabase, limit = BATCH_SIZE) {
158
182
  throw new Error(error.message);
159
183
  const rows = (claimed ?? []);
160
184
  let succeeded = 0;
185
+ let skippedNoPrice = 0;
161
186
  let failed = 0;
162
187
  let rateLimited = false;
163
188
  for (const row of rows) {
164
189
  if (rateLimited) {
165
- // Ronde afgebroken: regel meteen vrijgeven voor de volgende tick.
166
- await supabase.rpc("complete_floriday_stock_queue", {
167
- p_id: row.id,
168
- p_ok: false,
169
- p_error: "Snelheidslimiet van Floriday bereikt; volgende ronde opnieuw.",
170
- p_permanent: false,
171
- p_attempt_id: null,
172
- });
190
+ await completeRow(supabase, row.id, errorOutcome("Snelheidslimiet van Floriday bereikt; volgende ronde opnieuw.", false));
173
191
  continue;
174
192
  }
175
193
  const outcome = await pushStockRow(supabase, env, row);
176
- if (outcome.ok)
194
+ if (outcome.outcome === "quantity_sent")
177
195
  succeeded += 1;
196
+ else if (outcome.outcome === "skipped_no_price")
197
+ skippedNoPrice += 1;
178
198
  else {
179
199
  failed += 1;
180
200
  if (outcome.error && isRateLimited(outcome.error))
181
201
  rateLimited = true;
182
202
  }
183
- await supabase.rpc("complete_floriday_stock_queue", {
184
- p_id: row.id,
185
- p_ok: outcome.ok,
186
- p_error: outcome.ok ? outcome.quantitySkipped ?? null : outcome.error ?? "Onbekende fout",
187
- p_permanent: outcome.permanent ?? false,
188
- p_attempt_id: outcome.attemptId ?? null,
189
- });
203
+ await completeRow(supabase, row.id, outcome);
190
204
  }
191
- return { ok: true, claimed: rows.length, succeeded, failed, rateLimited };
205
+ return { ok: true, claimed: rows.length, succeeded, skippedNoPrice, failed, rateLimited };
192
206
  }
193
207
  /**
194
208
  * Cron-handler, zelfde vorm en beveiliging als de overige cron-routes:
195
209
  * `apikey`-header moet gelijk zijn aan `SUPABASE_PUBLISHABLE_KEY`.
196
210
  */
197
211
  export async function handleProcessStockQueue(request, supabase) {
198
- const apikey = request.headers.get("apikey") ?? request.headers.get("x-api-key");
199
- const expected = process.env.SUPABASE_PUBLISHABLE_KEY;
200
- if (!expected || !apikey || apikey !== expected) {
201
- return new Response("Unauthorized", { status: 401 });
212
+ // Voorkeur: gedeelde HMAC-handtekening. Terugval (tijdelijk, tot de
213
+ // herinplanning in een nieuwe Shell): de bestaande apikey-header.
214
+ let authorized = false;
215
+ if (request.headers.get(GATEWAY_HEADER_TIMESTAMP)) {
216
+ const auth = await verifyGatewayRequest(request.clone());
217
+ authorized = auth.ok;
218
+ }
219
+ if (!authorized) {
220
+ const apikey = request.headers.get("apikey") ?? request.headers.get("x-api-key");
221
+ const expected = process.env.SUPABASE_PUBLISHABLE_KEY;
222
+ authorized = !!expected && !!apikey && apikey === expected;
202
223
  }
224
+ if (!authorized)
225
+ return new Response("Unauthorized", { status: 401 });
203
226
  // Zelfherstel van de shell-host (fire-and-forget): draait elke minuut mee,
204
227
  // zodat een nieuwe of verhuisde shell binnen één cron-tick de juiste
205
228
  // callback-URL in `module_runtime_config` heeft staan. De functie cachet
@@ -26,4 +26,11 @@ export declare const FLORYDAY_CLOCK_SUPPLY_PERMISSION_MESSAGE = "Floriday heeft
26
26
  export declare const FLORYDAY_CONTRACT_PERMISSION_MESSAGE = "Floriday heeft de Contracten-module nog niet vrijgegeven voor deze koppeling. Laat dit recht in Floriday activeren en vernieuw daarna de verbinding.";
27
27
  export declare const FLORYDAY_SALES_STRATEGY_PERMISSION_MESSAGE = "Floriday heeft Verkoopstrategie\u00EBn nog niet vrijgegeven voor deze koppeling. Laat het recht `sales-strategy:read` in Floriday activeren en vernieuw daarna de verbinding.";
28
28
  export declare const FLORYDAY_SUPPLY_PERMISSION_MESSAGE = "Floriday heeft het recht `supply:read` (aanvoerregels met prijzen) nog niet vrijgegeven voor deze koppeling. Laat dit recht in Floriday activeren en vernieuw daarna de verbinding.";
29
+ /**
30
+ * Toont een Floriday-foutbody/-bericht aantoonbaar een ontbrekend recht/scope?
31
+ * Een kale `403 Forbidden` (bv. onbekend pad bij Floriday's voordeur) telt NIET.
32
+ */
33
+ export declare function floridayErrorShowsMissingPermission(text: string | null | undefined): boolean;
34
+ /** Scopes uit een JWT-toegangstoken lezen (alleen payload; token nooit loggen). */
35
+ export declare function scopesFromAccessToken(token: string): string[] | null;
29
36
  //# sourceMappingURL=floriday-scopes.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"floriday-scopes.d.ts","sourceRoot":"","sources":["../../src/lib/floriday-scopes.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,wBAAwB,2QAe3B,CAAC;AAOX,eAAO,MAAM,4BAA4B,sDAG/B,CAAC;AACX,eAAO,MAAM,iCAAiC,gCAAiC,CAAC;AAChF,eAAO,MAAM,kCAAkC,iCAAkC,CAAC;AAElF,eAAO,MAAM,wBAAwB,8CAG3B,CAAC;AACX,eAAO,MAAM,6BAA6B,4BAA6B,CAAC;AACxE,eAAO,MAAM,8BAA8B,6BAA8B,CAAC;AAM1E,eAAO,MAAM,8BAA8B,0DAGjC,CAAC;AACX,eAAO,MAAM,mCAAmC,kCAAmC,CAAC;AACpF,eAAO,MAAM,oCAAoC,mCAAoC,CAAC;AAKtF,eAAO,MAAM,uBAAuB,QAAqC,CAAC;AAE1E,eAAO,MAAM,2BAA2B,QAG7B,CAAC;AACZ,eAAO,MAAM,gCAAgC,QAGlC,CAAC;AACZ,eAAO,MAAM,iCAAiC,QAGnC,CAAC;AAEZ,eAAO,MAAM,uBAAuB,QAGzB,CAAC;AACZ,eAAO,MAAM,4BAA4B,QAG9B,CAAC;AACZ,eAAO,MAAM,6BAA6B,QAG/B,CAAC;AAEZ,eAAO,MAAM,6BAA6B,QAG/B,CAAC;AACZ,eAAO,MAAM,kCAAkC,QAGpC,CAAC;AACZ,eAAO,MAAM,mCAAmC,QAGrC,CAAC;AAGZ,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,SAAQ,GAAG,MAAM,CA4C5E;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEtD;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE3D;AAED,eAAO,MAAM,wCAAwC,mJAC6F,CAAC;AAEnJ,eAAO,MAAM,oCAAoC,yJACuG,CAAC;AAEzJ,eAAO,MAAM,0CAA0C,kLACqH,CAAC;AAE7K,eAAO,MAAM,kCAAkC,wLACwI,CAAC"}
1
+ {"version":3,"file":"floriday-scopes.d.ts","sourceRoot":"","sources":["../../src/lib/floriday-scopes.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,wBAAwB,2QAe3B,CAAC;AAOX,eAAO,MAAM,4BAA4B,sDAG/B,CAAC;AACX,eAAO,MAAM,iCAAiC,gCAAiC,CAAC;AAChF,eAAO,MAAM,kCAAkC,iCAAkC,CAAC;AAElF,eAAO,MAAM,wBAAwB,8CAG3B,CAAC;AACX,eAAO,MAAM,6BAA6B,4BAA6B,CAAC;AACxE,eAAO,MAAM,8BAA8B,6BAA8B,CAAC;AAM1E,eAAO,MAAM,8BAA8B,0DAGjC,CAAC;AACX,eAAO,MAAM,mCAAmC,kCAAmC,CAAC;AACpF,eAAO,MAAM,oCAAoC,mCAAoC,CAAC;AAKtF,eAAO,MAAM,uBAAuB,QAAqC,CAAC;AAE1E,eAAO,MAAM,2BAA2B,QAG7B,CAAC;AACZ,eAAO,MAAM,gCAAgC,QAGlC,CAAC;AACZ,eAAO,MAAM,iCAAiC,QAGnC,CAAC;AAEZ,eAAO,MAAM,uBAAuB,QAGzB,CAAC;AACZ,eAAO,MAAM,4BAA4B,QAG9B,CAAC;AACZ,eAAO,MAAM,6BAA6B,QAG/B,CAAC;AAEZ,eAAO,MAAM,6BAA6B,QAG/B,CAAC;AACZ,eAAO,MAAM,kCAAkC,QAGpC,CAAC;AACZ,eAAO,MAAM,mCAAmC,QAGrC,CAAC;AAGZ,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,SAAQ,GAAG,MAAM,CA4C5E;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEtD;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE3D;AAED,eAAO,MAAM,wCAAwC,mJAC6F,CAAC;AAEnJ,eAAO,MAAM,oCAAoC,yJACuG,CAAC;AAEzJ,eAAO,MAAM,0CAA0C,kLACqH,CAAC;AAE7K,eAAO,MAAM,kCAAkC,wLACwI,CAAC;AAExL;;;GAGG;AACH,wBAAgB,mCAAmC,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAY5F;AAED,mFAAmF;AACnF,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,CAapE"}
@@ -129,3 +129,37 @@ export const FLORYDAY_CLOCK_SUPPLY_PERMISSION_MESSAGE = "Floriday heeft Klokaanv
129
129
  export const FLORYDAY_CONTRACT_PERMISSION_MESSAGE = "Floriday heeft de Contracten-module nog niet vrijgegeven voor deze koppeling. Laat dit recht in Floriday activeren en vernieuw daarna de verbinding.";
130
130
  export const FLORYDAY_SALES_STRATEGY_PERMISSION_MESSAGE = "Floriday heeft Verkoopstrategieën nog niet vrijgegeven voor deze koppeling. Laat het recht `sales-strategy:read` in Floriday activeren en vernieuw daarna de verbinding.";
131
131
  export const FLORYDAY_SUPPLY_PERMISSION_MESSAGE = "Floriday heeft het recht `supply:read` (aanvoerregels met prijzen) nog niet vrijgegeven voor deze koppeling. Laat dit recht in Floriday activeren en vernieuw daarna de verbinding.";
132
+ /**
133
+ * Toont een Floriday-foutbody/-bericht aantoonbaar een ontbrekend recht/scope?
134
+ * Een kale `403 Forbidden` (bv. onbekend pad bij Floriday's voordeur) telt NIET.
135
+ */
136
+ export function floridayErrorShowsMissingPermission(text) {
137
+ const t = String(text ?? "").toLowerCase();
138
+ return (t.includes("insufficient_scope") ||
139
+ t.includes("insufficient scope") ||
140
+ t.includes("missing scope") ||
141
+ t.includes("scope") ||
142
+ t.includes("permission") ||
143
+ t.includes("policy evaluation failed") ||
144
+ t.includes("access_denied") ||
145
+ t.includes("not authorized for"));
146
+ }
147
+ /** Scopes uit een JWT-toegangstoken lezen (alleen payload; token nooit loggen). */
148
+ export function scopesFromAccessToken(token) {
149
+ try {
150
+ const part = token.split(".")[1];
151
+ if (!part)
152
+ return null;
153
+ const b64 = part.replace(/-/g, "+").replace(/_/g, "/");
154
+ const json = JSON.parse(atob(b64 + "=".repeat((4 - (b64.length % 4)) % 4)));
155
+ const s = json.scope ?? json.scp;
156
+ if (Array.isArray(s))
157
+ return s.map(String);
158
+ if (typeof s === "string")
159
+ return s.split(/\s+/).filter(Boolean);
160
+ return null;
161
+ }
162
+ catch {
163
+ return null;
164
+ }
165
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"floriday-sync.functions.d.ts","sourceRoot":"","sources":["../../src/lib/floriday-sync.functions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"floriday-sync.functions.d.ts","sourceRoot":"","sources":["../../src/lib/floriday-sync.functions.ts"],"names":[],"mappings":"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"}
@@ -7,7 +7,7 @@
7
7
  // ============================================================================
8
8
  import { createServerFn } from "@tanstack/react-start";
9
9
  import { requireSupabaseAuth } from "../integrations/supabase/auth-middleware.js";
10
- import { FLORYDAY_CONTRACT_PERMISSION_MESSAGE, FLORYDAY_SALES_STRATEGY_PERMISSION_MESSAGE, FLORYDAY_SUPPLY_PERMISSION_MESSAGE, } from "./floriday-scopes.js";
10
+ import { FLORYDAY_CONTRACT_PERMISSION_MESSAGE, FLORYDAY_SALES_STRATEGY_PERMISSION_MESSAGE, FLORYDAY_SUPPLY_PERMISSION_MESSAGE, floridayErrorShowsMissingPermission, } from "./floriday-scopes.js";
11
11
  import { SUPPLIERS_API_VERSION, getActiveFlorydayCredentials, resolveVerifiedFlorydayCronUrl, syncFloridayEntityBySequence, } from "./floriday.functions.js";
12
12
  // Stale-write bescherming (gedeeld met de connections-sync): een vertraagde
13
13
  // batch mag een nieuwere cache-rij nooit terugzetten.
@@ -660,7 +660,9 @@ async function runSyncHandler(context, environment, resource) {
660
660
  else if (isContractResource && policyDenied) {
661
661
  message = FLORYDAY_CONTRACT_PERMISSION_MESSAGE;
662
662
  }
663
- else if (resource === "catalog-prices" && policyDenied) {
663
+ else if (resource === "catalog-prices" &&
664
+ floridayErrorShowsMissingPermission(rawMessage)) {
665
+ // Alleen bij aantoonbaar ontbrekend recht; een kale 403 tonen we ongewijzigd.
664
666
  message = FLORYDAY_SUPPLY_PERMISSION_MESSAGE;
665
667
  }
666
668
  return {
@@ -178,6 +178,8 @@ export declare function resolveVerifiedFlorydayCronUrl(path: string): Promise<st
178
178
  export declare function syncShellHostRuntimeConfig(): Promise<{
179
179
  base: string | null;
180
180
  changed: boolean;
181
+ shellBaseChanged?: boolean;
182
+ skipped?: string;
181
183
  }>;
182
184
  export declare const getFlorydayShellHostStatus: import("@tanstack/start-client-core").OptionalFetcher<readonly [import("@tanstack/start-client-core").FunctionMiddlewareAfterServer<{}, unknown, undefined, {
183
185
  supabase: import("../integrations/supabase/auth-middleware.js").AuthedSupabaseClient;
@@ -198,6 +200,15 @@ export declare const getFlorydayShellHostStatus: import("@tanstack/start-client-
198
200
  matches: boolean;
199
201
  error?: undefined;
200
202
  }>>;
203
+ export declare const getFlorydayShellRoutesStatus: import("@tanstack/start-client-core").OptionalFetcher<readonly [import("@tanstack/start-client-core").FunctionMiddlewareAfterServer<{}, unknown, undefined, {
204
+ supabase: import("../integrations/supabase/auth-middleware.js").AuthedSupabaseClient;
205
+ userId: string;
206
+ claims: import("@supabase/auth-js").JwtPayload;
207
+ }, undefined, undefined, undefined>], (d: {
208
+ force?: boolean;
209
+ } | undefined) => {
210
+ force: boolean;
211
+ }, Promise<import("./shell-routes.js").ShellRoutesReport>>;
201
212
  export declare const repairFlorydayShellHost: import("@tanstack/start-client-core").OptionalFetcher<readonly [import("@tanstack/start-client-core").FunctionMiddlewareAfterServer<{}, unknown, undefined, {
202
213
  supabase: import("../integrations/supabase/auth-middleware.js").AuthedSupabaseClient;
203
214
  userId: string;
@@ -1 +1 @@
1
- {"version":3,"file":"floriday.functions.d.ts","sourceRoot":"","sources":["../../src/lib/floriday.functions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"floriday.functions.d.ts","sourceRoot":"","sources":["../../src/lib/floriday.functions.ts"],"names":[],"mappings":"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"}
@@ -578,6 +578,15 @@ export const upsertFlorydayConnection = createServerFn({ method: "POST" })
578
578
  catch (e) {
579
579
  console.error("[floriday] auto webhook-subscribe failed:", e);
580
580
  }
581
+ // Controle of de Shell alle gateway-routes van deze module bedient.
582
+ try {
583
+ const { checkShellRoutes, logShellRoutesReport } = await import("./shell-routes.js");
584
+ const r = await checkShellRoutes({ force: true });
585
+ await logShellRoutesReport(supabaseAdmin, r, "nieuwe/gewijzigde koppeling");
586
+ }
587
+ catch (e) {
588
+ console.error("[floriday] shell-routes check failed:", e);
589
+ }
581
590
  // Automatisch (her)plan de uurlijkse token-refresh cron. Niet-fataal
582
591
  // bij falen — credentials zijn al opgeslagen.
583
592
  try {
@@ -889,36 +898,69 @@ export async function resolveVerifiedFlorydayCronUrl(path) {
889
898
  export async function syncShellHostRuntimeConfig() {
890
899
  let base = null;
891
900
  try {
892
- // Voor deze databasewaarde is géén project/env-fallback toegestaan: een
893
- // gekopieerde module zou dan ongemerkt terug naar de bouwshell wijzen.
894
- // Alleen de actieve tenant-host uit Central Auth mag deze waarde bepalen.
901
+ // Geen project/env-fallback: alleen de actieve tenant-host uit Central
902
+ // Auth mag deze waarden bepalen.
895
903
  const { getShellHostFromCentral } = await import("./central-auth.server.js");
896
- base = await getShellHostFromCentral();
897
- if (!base)
898
- return { base: null, changed: false };
904
+ const { normalizeShellBase } = await import("./shell-base.js");
905
+ const raw = await getShellHostFromCentral();
906
+ if (!raw)
907
+ return { base: null, changed: false, skipped: "Central Auth gaf geen shell-host" };
908
+ base = normalizeShellBase(raw);
909
+ if (!base) {
910
+ console.warn(`[floriday] shell-host uit Central Auth afgewezen (ongeldig): ${String(raw).slice(0, 120)}`);
911
+ return { base: null, changed: false, skipped: "ongeldige shell-host" };
912
+ }
899
913
  }
900
914
  catch {
901
- return { base: null, changed: false };
915
+ return { base: null, changed: false, skipped: "Central Auth niet bereikbaar" };
902
916
  }
903
917
  try {
904
918
  const { supabaseAdmin } = await import("../integrations/supabase/client.server.js");
905
- const { data: current } = await supabaseAdmin
919
+ const db = supabaseAdmin;
920
+ const { data: rows } = await db
906
921
  .from("module_runtime_config")
907
- .select("value")
908
- .eq("key", "stock_queue_processor_base_url")
909
- .maybeSingle();
910
- if (current?.value === base)
911
- return { base, changed: false };
912
- await supabaseAdmin.from("module_runtime_config").upsert({
913
- key: "stock_queue_processor_base_url",
914
- value: base,
915
- updated_at: new Date().toISOString(),
916
- }, { onConflict: "key" });
917
- // De actieve minuuttaak roept `run_floriday_stock_queue_process()` aan;
918
- // die leest deze waarde bij iedere ronde opnieuw. Herplannen is dus niet
919
- // nodig en zou hier bovendien falen zonder een ingelogde admin-context.
922
+ .select("key, value")
923
+ .in("key", ["stock_queue_processor_base_url", "shell_base_url"]);
924
+ const cur = new Map((rows ?? []).map((r) => [r.key, r.value]));
925
+ const stockSame = cur.get("stock_queue_processor_base_url") === base;
926
+ const shellSame = cur.get("shell_base_url") === base;
927
+ if (stockSame && shellSame)
928
+ return { base, changed: false, shellBaseChanged: false };
929
+ // Alleen schrijven als dit adres deze module aantoonbaar bedient.
930
+ const pingErr = await checkShellServesCronRoute(base, "/api/public/cron/ping");
931
+ if (pingErr) {
932
+ console.warn(`[floriday] shell-host ${base} niet geschreven: ${pingErr}`);
933
+ return { base, changed: false, skipped: pingErr };
934
+ }
935
+ const now = new Date().toISOString();
936
+ let shellBaseChanged = false;
937
+ if (!shellSame) {
938
+ const previous = cur.get("shell_base_url") ?? null;
939
+ if (previous) {
940
+ await db.from("module_runtime_config").upsert({ key: "shell_base_url_previous", value: previous, updated_at: now }, { onConflict: "key" });
941
+ }
942
+ await db.from("module_runtime_config").upsert({ key: "shell_base_url", value: base, updated_at: now }, { onConflict: "key" });
943
+ shellBaseChanged = true;
944
+ await db.from("floriday_write_log").insert({
945
+ connection_id: null,
946
+ module: "floriday-authenticatie",
947
+ action: "shell-host-changed",
948
+ resource: "module_runtime_config",
949
+ floriday_id: null,
950
+ request: { key: "shell_base_url", from: previous, to: base },
951
+ response: null,
952
+ http_status: 0,
953
+ ok: true,
954
+ error: `shell-host gewijzigd van ${previous ?? "(leeg)"} naar ${base}`,
955
+ idempotency_key: null,
956
+ caller: "shell-host-sync",
957
+ }).then(() => undefined, () => undefined);
958
+ }
959
+ if (!stockSame) {
960
+ await db.from("module_runtime_config").upsert({ key: "stock_queue_processor_base_url", value: base, updated_at: now }, { onConflict: "key" });
961
+ }
920
962
  console.log(`[floriday] shell-host bijgewerkt naar ${base}`);
921
- return { base, changed: true };
963
+ return { base, changed: !stockSame, shellBaseChanged };
922
964
  }
923
965
  catch (e) {
924
966
  console.warn(`[floriday] shell-host synchroniseren mislukt: ${e?.message ?? e}`);
@@ -956,6 +998,18 @@ export const getFlorydayShellHostStatus = createServerFn({ method: "GET" })
956
998
  matches: Boolean(centralHost && processorHost === centralHost),
957
999
  };
958
1000
  });
1001
+ export const getFlorydayShellRoutesStatus = createServerFn({ method: "POST" })
1002
+ .middleware([requireSupabaseAuth])
1003
+ .inputValidator((d) => ({ force: d?.force === true }))
1004
+ .handler(async ({ data }) => {
1005
+ const { checkShellRoutes, logShellRoutesReport } = await import("./shell-routes.js");
1006
+ const report = await checkShellRoutes({ force: data.force });
1007
+ if (data.force) {
1008
+ const { supabaseAdmin } = await import("../integrations/supabase/client.server.js");
1009
+ await logShellRoutesReport(supabaseAdmin, report, "handmatige controle");
1010
+ }
1011
+ return report;
1012
+ });
959
1013
  export const repairFlorydayShellHost = createServerFn({ method: "POST" })
960
1014
  .middleware([requireSupabaseAuth])
961
1015
  .handler(async ({ context }) => {
@@ -1 +1 @@
1
- {"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../../../src/lib/gateway/diagnostics.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AA4B5D,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,cAAc,CAClC,QAAQ,EAAE,cAAc,EACxB,KAAK,EAAE,gBAAgB,GACtB,OAAO,CAAC,iBAAiB,CAAC,CA4D5B;AAQD,eAAO,MAAM,0BAA0B,QAAa,CAAC;AAqBrD,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,cAAc,GACvB,OAAO,CAAC,QAAQ,CAAC,CAkDnB"}
1
+ {"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../../../src/lib/gateway/diagnostics.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AA4B5D,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,cAAc,CAClC,QAAQ,EAAE,cAAc,EACxB,KAAK,EAAE,gBAAgB,GACtB,OAAO,CAAC,iBAAiB,CAAC,CA4D5B;AAQD,eAAO,MAAM,0BAA0B,QAAa,CAAC;AAqBrD,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,cAAc,GACvB,OAAO,CAAC,QAAQ,CAAC,CA8DnB"}
@@ -102,6 +102,18 @@ export async function handleDiagnostics(request, supabase) {
102
102
  if (auth.rawBody.length > DIAGNOSTICS_MAX_BODY_BYTES) {
103
103
  return _diagJson({ ok: false, error: "Diagnostics-payload te groot (max 256 KB)" }, { status: 413 });
104
104
  }
105
+ // Controle op Shell-routes: { "action": "shell-routes" } (alleen lezen).
106
+ try {
107
+ const peek = auth.rawBody ? JSON.parse(auth.rawBody) : null;
108
+ if (peek && peek.action === "shell-routes") {
109
+ const { checkShellRoutes } = await import("../shell-routes.js");
110
+ const report = await checkShellRoutes({ force: peek.force === true });
111
+ return _diagJson({ ok: true, shellRoutes: report });
112
+ }
113
+ }
114
+ catch {
115
+ /* geen JSON of controle mislukt → gewone diagnose-afhandeling */
116
+ }
105
117
  try {
106
118
  const result = await runDiagnostics(supabase, {
107
119
  rawBody: auth.rawBody,