@flowselections/floriday-authenticatie-module 1.0.88 → 1.0.91

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 (35) hide show
  1. package/dist-lib/components/floriday/FlorydayConnectionPage.d.ts.map +1 -1
  2. package/dist-lib/components/floriday/FlorydayConnectionPage.js +2 -1
  3. package/dist-lib/components/settings/FloricodeHealthBanner.d.ts +5 -0
  4. package/dist-lib/components/settings/FloricodeHealthBanner.d.ts.map +1 -0
  5. package/dist-lib/components/settings/FloricodeHealthBanner.js +27 -0
  6. package/dist-lib/components/settings/FloricodeSettingsCard.d.ts.map +1 -1
  7. package/dist-lib/components/settings/FloricodeSettingsCard.js +17 -2
  8. package/dist-lib/index.d.ts +1 -0
  9. package/dist-lib/index.d.ts.map +1 -1
  10. package/dist-lib/index.js +1 -0
  11. package/dist-lib/integrations/supabase/types.d.ts +419 -0
  12. package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
  13. package/dist-lib/lib/cron/sync-floricode-all.d.ts.map +1 -1
  14. package/dist-lib/lib/cron/sync-floricode-all.js +0 -2
  15. package/dist-lib/lib/customer-sticker-fields.d.ts +5 -0
  16. package/dist-lib/lib/customer-sticker-fields.d.ts.map +1 -1
  17. package/dist-lib/lib/customer-sticker-fields.js +7 -0
  18. package/dist-lib/lib/floricode-regulatory-features.d.ts +1 -0
  19. package/dist-lib/lib/floricode-regulatory-features.d.ts.map +1 -1
  20. package/dist-lib/lib/floricode-regulatory-features.js +27 -12
  21. package/dist-lib/lib/floricode-sync-plan.d.ts +64 -0
  22. package/dist-lib/lib/floricode-sync-plan.d.ts.map +1 -0
  23. package/dist-lib/lib/floricode-sync-plan.js +54 -0
  24. package/dist-lib/lib/floricode-sync.server.d.ts +39 -7
  25. package/dist-lib/lib/floricode-sync.server.d.ts.map +1 -1
  26. package/dist-lib/lib/floricode-sync.server.js +131 -86
  27. package/dist-lib/lib/floricode.functions.d.ts +14 -0
  28. package/dist-lib/lib/floricode.functions.d.ts.map +1 -1
  29. package/dist-lib/lib/floricode.functions.js +26 -9
  30. package/dist-lib/lib/floriday-stickers.functions.js +2 -2
  31. package/dist-lib/lib/gateway/webhook-subscribe.d.ts.map +1 -1
  32. package/dist-lib/lib/gateway/webhook-subscribe.js +11 -1
  33. package/dist-lib/lib/module-version.d.ts +1 -1
  34. package/dist-lib/lib/module-version.js +1 -1
  35. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"FlorydayConnectionPage.d.ts","sourceRoot":"","sources":["../../../src/components/floriday/FlorydayConnectionPage.tsx"],"names":[],"mappings":"AAMA,wBAAgB,sBAAsB,gCAgBrC"}
1
+ {"version":3,"file":"FlorydayConnectionPage.d.ts","sourceRoot":"","sources":["../../../src/components/floriday/FlorydayConnectionPage.tsx"],"names":[],"mappings":"AAOA,wBAAgB,sBAAsB,gCAiBrC"}
@@ -4,6 +4,7 @@ import { FloricodeSettingsCard } from "../settings/FloricodeSettingsCard.js";
4
4
  import { FlorydayWebhooksCard } from "./FlorydayWebhooksCard.js";
5
5
  import { FlorydayShellRoutesCard } from "./FlorydayShellRoutesCard.js";
6
6
  import { FlorydayCronStallBanner } from "./FlorydayCronStallBanner.js";
7
+ import { FloricodeHealthBanner } from "../settings/FloricodeHealthBanner.js";
7
8
  export function FlorydayConnectionPage() {
8
- return (_jsxs("main", { className: "p-6 max-w-4xl mx-auto space-y-6", children: [_jsxs("div", { children: [_jsx("h1", { className: "text-2xl font-bold", children: "Floriday koppeling" }), _jsx("p", { className: "text-sm text-muted-foreground mt-1", children: "Verbind je Floriday-account om automatisch gegevens uit te wisselen met het platform." })] }), _jsx(FlorydayCronStallBanner, {}), _jsx(FlorydaySettingsCard, {}), _jsx(FlorydayWebhooksCard, {}), _jsx(FlorydayShellRoutesCard, {}), _jsx(FloricodeSettingsCard, {})] }));
9
+ return (_jsxs("main", { className: "p-6 max-w-4xl mx-auto space-y-6", children: [_jsxs("div", { children: [_jsx("h1", { className: "text-2xl font-bold", children: "Floriday koppeling" }), _jsx("p", { className: "text-sm text-muted-foreground mt-1", children: "Verbind je Floriday-account om automatisch gegevens uit te wisselen met het platform." })] }), _jsx(FlorydayCronStallBanner, {}), _jsx(FloricodeHealthBanner, {}), _jsx(FlorydaySettingsCard, {}), _jsx(FlorydayWebhooksCard, {}), _jsx(FlorydayShellRoutesCard, {}), _jsx(FloricodeSettingsCard, {})] }));
9
10
  }
@@ -0,0 +1,5 @@
1
+ /** Waarschuwing voor de kaart en de pagina Floriday koppeling. Toont niets als alles goed is. */
2
+ export declare function FloricodeHealthBanner({ className }: {
3
+ className?: string;
4
+ }): import("react").JSX.Element | null;
5
+ //# sourceMappingURL=FloricodeHealthBanner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FloricodeHealthBanner.d.ts","sourceRoot":"","sources":["../../../src/components/settings/FloricodeHealthBanner.tsx"],"names":[],"mappings":"AAMA,iGAAiG;AACjG,wBAAgB,qBAAqB,CAAC,EAAE,SAAS,EAAE,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,sCA6B1E"}
@@ -0,0 +1,27 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useQuery } from "@tanstack/react-query";
3
+ import { useServerFn } from "@tanstack/react-start";
4
+ import { AlertTriangle } from "lucide-react";
5
+ import { getFloricodeCronStatus, getFloricodeSyncStatus } from "../../lib/floricode.functions.js";
6
+ import { classifyFloricodeSource } from "../../lib/floricode-sync-plan.js";
7
+ /** Waarschuwing voor de kaart en de pagina Floriday koppeling. Toont niets als alles goed is. */
8
+ export function FloricodeHealthBanner({ className }) {
9
+ const getStatus = useServerFn(getFloricodeSyncStatus);
10
+ const getCron = useServerFn(getFloricodeCronStatus);
11
+ const rows = useQuery({ queryKey: ["floricode-sync-status"], queryFn: () => getStatus(), refetchInterval: 60000 });
12
+ const cron = useQuery({ queryKey: ["floricode-cron-status"], queryFn: () => getCron(), refetchInterval: 60000 });
13
+ const now = Date.now();
14
+ const old = (rows.data ?? []).filter((r) => classifyFloricodeSource(r, now).stale && r.status !== "error");
15
+ const messages = [];
16
+ if (cron.data && !cron.data.scheduled) {
17
+ messages.push(cron.data.shellAddressMissing
18
+ ? "Floricode-gegevens worden niet automatisch bijgewerkt: het adres van je werkomgeving ontbreekt."
19
+ : "Floricode-gegevens worden nog niet automatisch bijgewerkt. Dit wordt binnen een uur vanzelf ingepland.");
20
+ }
21
+ if (old.length > 0) {
22
+ messages.push(`Deze Floricode-gegevens zijn ouder dan 7 dagen: ${old.map((r) => r.resource).join(", ")}.`);
23
+ }
24
+ if (messages.length === 0)
25
+ return null;
26
+ return (_jsx("div", { role: "alert", className: "rounded-md border border-amber-300 bg-amber-50 px-3 py-2 text-sm text-amber-900 " + (className ?? ""), children: _jsxs("div", { className: "flex items-start gap-2", children: [_jsx(AlertTriangle, { className: "mt-0.5 h-4 w-4 shrink-0" }), _jsx("div", { className: "space-y-0.5", children: messages.map((m) => _jsx("p", { children: m }, m)) })] }) }));
27
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"FloricodeSettingsCard.d.ts","sourceRoot":"","sources":["../../../src/components/settings/FloricodeSettingsCard.tsx"],"names":[],"mappings":"AAuDA,wBAAgB,qBAAqB,gCA4EpC"}
1
+ {"version":3,"file":"FloricodeSettingsCard.d.ts","sourceRoot":"","sources":["../../../src/components/settings/FloricodeSettingsCard.tsx"],"names":[],"mappings":"AAoEA,wBAAgB,qBAAqB,gCA4EpC"}
@@ -5,6 +5,21 @@ import { useServerFn } from "@tanstack/react-start";
5
5
  import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query";
6
6
  import { Card, Button, Input, Label, Badge, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, AlertDialogTrigger, toast, } from "@flowselections/core";
7
7
  import { getFloricodeSettings, saveFloricodeCredentials, clearFloricodeCredentials, testFloricodeConnection, getFloricodeSyncStatus, triggerFloricodeResourceSync, resetFloricodeResourceCursor, } from "../../lib/floricode.functions.js";
8
+ import { FloricodeHealthBanner } from "./FloricodeHealthBanner.js";
9
+ import { classifyFloricodeSource } from "../../lib/floricode-sync-plan.js";
10
+ function sourceLabel(row) {
11
+ const v = classifyFloricodeSource(row, Date.now());
12
+ const nl = (n) => n.toLocaleString("nl-NL");
13
+ if (v.kind === "complete")
14
+ return v.stale ? "Compleet, maar ouder dan 7 dagen" : "Compleet";
15
+ if (v.kind === "busy")
16
+ return v.total ? `Bezig (${nl(v.done)} van ${nl(v.total)})` : `Bezig (${nl(v.done)})`;
17
+ if (v.kind === "stalled")
18
+ return `Staat stil sinds ${formatDate(v.since)}`;
19
+ if (v.kind === "error")
20
+ return "Er ging iets mis bij het bijwerken";
21
+ return "Nog nooit bijgewerkt";
22
+ }
8
23
  const floricodeLogo = "/flowselections-assets/floriday-authenticatie/floricode-logo.png";
9
24
  function formatDate(iso) {
10
25
  if (!iso)
@@ -219,11 +234,11 @@ function SyncBlock({ configured }) {
219
234
  const d = (STATUS_ORDER[a.meta.key] ?? 9) - (STATUS_ORDER[b.meta.key] ?? 9);
220
235
  return d !== 0 ? d : a.row.resource.localeCompare(b.row.resource);
221
236
  });
222
- return (_jsx(StepBlock, { number: 3, title: "Gegevens up-to-date houden", description: "We halen je Floricode-gegevens automatisch op en bewaren ze in je werkomgeving. Zo werkt alles effici\u00EBnt & snel.", children: _jsxs("div", { className: "space-y-3", children: [classified.length === 0 && (_jsx("p", { className: "text-xs text-muted-foreground", children: "Nog geen synchronisatiegegevens beschikbaar." })), classified.map(({ row, meta }) => {
237
+ return (_jsx(StepBlock, { number: 3, title: "Gegevens up-to-date houden", description: "We halen je Floricode-gegevens automatisch op en bewaren ze in je werkomgeving. Zo werkt alles effici\u00EBnt & snel.", children: _jsxs("div", { className: "space-y-3", children: [_jsx(FloricodeHealthBanner, {}), classified.length === 0 && (_jsx("p", { className: "text-xs text-muted-foreground", children: "Nog geen synchronisatiegegevens beschikbaar." })), classified.map(({ row, meta }) => {
223
238
  const hasProblem = meta.key === "error" ||
224
239
  meta.key === "unavailable" ||
225
240
  meta.key === "hanging";
226
- return (_jsxs("div", { className: "rounded-lg border border-border/60 bg-card p-4", children: [_jsxs("div", { className: "grid grid-cols-[minmax(0,1fr)_auto] items-start gap-3 sm:flex sm:items-center sm:justify-between", children: [_jsxs("div", { className: "min-w-0", children: [_jsxs("div", { className: "flex items-center gap-2 flex-wrap", children: [_jsx("h5", { className: "font-medium text-sm truncate", children: row.resource }), hasProblem && (_jsxs("span", { className: `inline-flex items-center gap-1.5 rounded-full border px-2 py-0.5 text-[10px] font-medium ${meta.tone}`, children: [_jsx("span", { className: `h-1.5 w-1.5 rounded-full ${meta.dot}` }), meta.label] }))] }), _jsx("p", { className: "text-[11px] text-muted-foreground mt-0.5", children: "Wordt automatisch bijgewerkt op de achtergrond." })] }), _jsx(Button, { variant: "outline", size: "sm", className: "shrink-0", disabled: !configured || syncMut.isPending, onClick: () => syncMut.mutate(row.resource), children: syncMut.isPending && syncMut.variables === row.resource
241
+ return (_jsxs("div", { className: "rounded-lg border border-border/60 bg-card p-4", children: [_jsxs("div", { className: "grid grid-cols-[minmax(0,1fr)_auto] items-start gap-3 sm:flex sm:items-center sm:justify-between", children: [_jsxs("div", { className: "min-w-0", children: [_jsxs("div", { className: "flex items-center gap-2 flex-wrap", children: [_jsx("h5", { className: "font-medium text-sm truncate", children: row.resource }), hasProblem && (_jsxs("span", { className: `inline-flex items-center gap-1.5 rounded-full border px-2 py-0.5 text-[10px] font-medium ${meta.tone}`, children: [_jsx("span", { className: `h-1.5 w-1.5 rounded-full ${meta.dot}` }), meta.label] }))] }), _jsx("p", { className: "text-[11px] text-muted-foreground mt-0.5", children: sourceLabel(row) })] }), _jsx(Button, { variant: "outline", size: "sm", className: "shrink-0", disabled: !configured || syncMut.isPending, onClick: () => syncMut.mutate(row.resource), children: syncMut.isPending && syncMut.variables === row.resource
227
242
  ? "Bezig…"
228
243
  : "Nu bijwerken" })] }), _jsxs("div", { className: "mt-3 grid grid-cols-1 sm:grid-cols-2 gap-2", children: [_jsx(MetricTile, { label: "Laatst bijgewerkt", value: timeAgo(row.lastSyncAt) }), _jsx(MetricTile, { label: "Aantal records", value: (row.rowCount ?? 0).toLocaleString("nl-NL") })] }), hasProblem && (_jsxs("div", { className: "mt-3 flex items-center justify-between gap-3 flex-wrap", children: [row.errorMessage ? (_jsx("p", { className: `text-[11px] break-words ${meta.key === "unavailable"
229
244
  ? "text-amber-700"
@@ -4,6 +4,7 @@ export { FlorydayConnectionPage } from './components/floriday/FlorydayConnection
4
4
  export { FlorydayApiLogPage } from './components/floriday/FlorydayApiLogPage.js';
5
5
  export { FlorydaySyncHealthBanner } from './components/floriday/FlorydaySyncHealthBanner.js';
6
6
  export { FlorydayCredentialStatusBanner } from './components/floriday/FlorydayCredentialStatusBanner.js';
7
+ export { FloricodeHealthBanner } from './components/settings/FloricodeHealthBanner.js';
7
8
  export * from './lib/floriday.functions.js';
8
9
  export * from './lib/floriday-sync.functions.js';
9
10
  export * from './lib/floriday-api-log.functions.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAIvD,cAAc,qBAAqB,CAAC;AACpC,OAAO,EAAE,sBAAsB,EAAE,MAAM,iDAAiD,CAAC;AACzF,OAAO,EAAE,kBAAkB,EAAE,MAAM,6CAA6C,CAAC;AACjF,OAAO,EAAE,wBAAwB,EAAE,MAAM,mDAAmD,CAAC;AAC7F,OAAO,EAAE,8BAA8B,EAAE,MAAM,yDAAyD,CAAC;AAGzG,cAAc,6BAA6B,CAAC;AAC5C,cAAc,kCAAkC,CAAC;AACjD,cAAc,qCAAqC,CAAC;AACpD,cAAc,sCAAsC,CAAC;AAErD,eAAO,MAAM,2BAA2B,EAAE,UA2BzC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAIvD,cAAc,qBAAqB,CAAC;AACpC,OAAO,EAAE,sBAAsB,EAAE,MAAM,iDAAiD,CAAC;AACzF,OAAO,EAAE,kBAAkB,EAAE,MAAM,6CAA6C,CAAC;AACjF,OAAO,EAAE,wBAAwB,EAAE,MAAM,mDAAmD,CAAC;AAC7F,OAAO,EAAE,8BAA8B,EAAE,MAAM,yDAAyD,CAAC;AACzG,OAAO,EAAE,qBAAqB,EAAE,MAAM,gDAAgD,CAAC;AAGvF,cAAc,6BAA6B,CAAC;AAC5C,cAAc,kCAAkC,CAAC;AACjD,cAAc,qCAAqC,CAAC;AACpD,cAAc,sCAAsC,CAAC;AAErD,eAAO,MAAM,2BAA2B,EAAE,UA2BzC,CAAC"}
package/dist-lib/index.js CHANGED
@@ -6,6 +6,7 @@ export { FlorydayConnectionPage } from './components/floriday/FlorydayConnection
6
6
  export { FlorydayApiLogPage } from './components/floriday/FlorydayApiLogPage.js';
7
7
  export { FlorydaySyncHealthBanner } from './components/floriday/FlorydaySyncHealthBanner.js';
8
8
  export { FlorydayCredentialStatusBanner } from './components/floriday/FlorydayCredentialStatusBanner.js';
9
+ export { FloricodeHealthBanner } from './components/settings/FloricodeHealthBanner.js';
9
10
  export * from './lib/floriday.functions.js';
10
11
  export * from './lib/floriday-sync.functions.js';
11
12
  export * from './lib/floriday-api-log.functions.js';