@flowselections/mailbox-orders 1.0.45 → 1.0.47

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.
@@ -1,4 +1,7 @@
1
1
  type ActiveMailbox = {
2
+ connected: null;
3
+ error?: string;
4
+ } | {
2
5
  connected: false;
3
6
  error?: string;
4
7
  } | {
@@ -1 +1 @@
1
- {"version":3,"file":"MailboxAuthBanner.d.ts","sourceRoot":"","sources":["../../src/components/MailboxAuthBanner.tsx"],"names":[],"mappings":"AAEA,KAAK,aAAa,GACd;IAAE,SAAS,EAAE,KAAK,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GACpC;IACE,SAAS,EAAE,IAAI,CAAC;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,YAAY,EAAE,OAAO,CAAC;CACvB,GACD,SAAS,GACT,IAAI,CAAC;AAET,wBAAgB,iBAAiB,CAAC,EAAE,MAAM,EAAE,EAAE;IAAE,MAAM,EAAE,aAAa,CAAA;CAAE,sCA+CtE"}
1
+ {"version":3,"file":"MailboxAuthBanner.d.ts","sourceRoot":"","sources":["../../src/components/MailboxAuthBanner.tsx"],"names":[],"mappings":"AAGA,KAAK,aAAa,GACd;IAAE,SAAS,EAAE,IAAI,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GACnC;IAAE,SAAS,EAAE,KAAK,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GACpC;IACE,SAAS,EAAE,IAAI,CAAC;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,YAAY,EAAE,OAAO,CAAC;CACvB,GACD,SAAS,GACT,IAAI,CAAC;AAET,wBAAgB,iBAAiB,CAAC,EAAE,MAAM,EAAE,EAAE;IAAE,MAAM,EAAE,aAAa,CAAA;CAAE,sCAuDtE"}
@@ -1,13 +1,16 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { AlertTriangle } from "lucide-react";
3
+ import { bannerKind } from "../lib/mailbox-active.js";
3
4
  export function MailboxAuthBanner({ active }) {
4
- if (!active)
5
- return null;
6
- if (active.connected === false) {
5
+ const kind = bannerKind(active);
6
+ if (kind === "unknown") {
7
+ return (_jsx("div", { className: "shrink-0 text-xs text-muted-foreground", children: "De status van de mailboxkoppeling kon niet worden opgehaald." }));
8
+ }
9
+ if (kind === "no_mailbox") {
7
10
  return (_jsxs("div", { className: "flex items-start gap-3 rounded-md border border-yellow-300 bg-yellow-50 p-3 text-sm text-yellow-900", children: [_jsx(AlertTriangle, { className: "h-4 w-4 mt-0.5 shrink-0" }), _jsxs("div", { className: "flex-1", children: [_jsx("div", { className: "font-medium", children: "Geen actieve mailbox voor bestellingen" }), _jsxs("div", { className: "text-yellow-800", children: ["Er is nog geen e-mailkoppeling met doeleinde ", _jsx("span", { className: "font-mono", children: "orders / ontvangen" }), " ingesteld."] })] }), _jsx("a", { href: "/e-mail-authenticatie", className: "shrink-0 rounded-md bg-yellow-900 px-3 py-1.5 text-xs font-medium text-yellow-50 hover:bg-yellow-800", children: "Koppeling instellen" })] }));
8
11
  }
9
- const a = active;
10
- if (a.needs_reauth) {
12
+ if (kind === "reauth") {
13
+ const a = active;
11
14
  return (_jsxs("div", { className: "flex items-start gap-3 rounded-md border border-red-300 bg-red-50 p-3 text-sm text-red-900", children: [_jsx(AlertTriangle, { className: "h-4 w-4 mt-0.5 shrink-0" }), _jsxs("div", { className: "flex-1", children: [_jsxs("div", { className: "font-medium", children: ["Koppeling met ", a.provider, " (", a.account_email, ") is verlopen"] }), _jsx("div", { className: "text-red-800", children: "Er komen geen nieuwe bestellingen binnen tot je de koppeling opnieuw autoriseert." })] }), _jsx("a", { href: "/e-mail-authenticatie", className: "shrink-0 rounded-md bg-red-900 px-3 py-1.5 text-xs font-medium text-red-50 hover:bg-red-800", children: "Opnieuw verbinden" })] }));
12
15
  }
13
16
  return null;
@@ -0,0 +1,26 @@
1
+ export type ActiveMailboxStatus = {
2
+ connected: null;
3
+ error: string;
4
+ } | {
5
+ connected: false;
6
+ } | {
7
+ connected: true;
8
+ id: string;
9
+ provider: string;
10
+ account_email: string;
11
+ display_name: string | null;
12
+ status: string | null;
13
+ last_error: string | null;
14
+ last_verified_at: string | null;
15
+ needs_reauth: boolean;
16
+ };
17
+ export declare function toActiveMailboxStatus(data: unknown, error: {
18
+ code?: string;
19
+ message?: string;
20
+ } | null | undefined): ActiveMailboxStatus;
21
+ /** Welke balk tonen: alleen bij connected === false de gele "geen mailbox". */
22
+ export declare function bannerKind(active: {
23
+ connected: boolean | null;
24
+ needs_reauth?: boolean;
25
+ } | null | undefined): "none" | "no_mailbox" | "reauth" | "unknown";
26
+ //# sourceMappingURL=mailbox-active.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mailbox-active.d.ts","sourceRoot":"","sources":["../../src/lib/mailbox-active.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,mBAAmB,GAC3B;IAAE,SAAS,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAClC;IAAE,SAAS,EAAE,KAAK,CAAA;CAAE,GACpB;IACE,SAAS,EAAE,IAAI,CAAC;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,YAAY,EAAE,OAAO,CAAC;CACvB,CAAC;AAEN,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,OAAO,EACb,KAAK,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,GAAG,SAAS,GAC5D,mBAAmB,CAkBrB;AAED,+EAA+E;AAC/E,wBAAgB,UAAU,CAAC,MAAM,EAAE;IAAE,SAAS,EAAE,OAAO,GAAG,IAAI,CAAC;IAAC,YAAY,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,GAAG,SAAS,GACzG,MAAM,GAAG,YAAY,GAAG,QAAQ,GAAG,SAAS,CAK7C"}
@@ -0,0 +1,31 @@
1
+ export function toActiveMailboxStatus(data, error) {
2
+ if (error) {
3
+ if (error.code === "42501")
4
+ return { connected: null, error: "unauthorized" };
5
+ return { connected: null, error: error.message || "unknown_error" };
6
+ }
7
+ const row = Array.isArray(data) ? data[0] : null;
8
+ if (!row)
9
+ return { connected: false };
10
+ return {
11
+ connected: true,
12
+ id: row.id,
13
+ provider: row.provider,
14
+ account_email: row.account_email,
15
+ display_name: (row.display_name ?? null),
16
+ status: (row.status ?? null),
17
+ last_error: (row.last_error ?? null),
18
+ last_verified_at: (row.last_verified_at ?? null),
19
+ needs_reauth: !!row.needs_reauth,
20
+ };
21
+ }
22
+ /** Welke balk tonen: alleen bij connected === false de gele "geen mailbox". */
23
+ export function bannerKind(active) {
24
+ if (!active)
25
+ return "none";
26
+ if (active.connected === false)
27
+ return "no_mailbox";
28
+ if (active.connected === null)
29
+ return "unknown";
30
+ return active.needs_reauth ? "reauth" : "none";
31
+ }
@@ -1,37 +1,5 @@
1
- export declare const getActiveOrdersMailbox: import("@tanstack/start-client-core").OptionalFetcher<undefined, undefined, Promise<{
2
- connected: false;
3
- error: string;
4
- id?: undefined;
5
- provider?: undefined;
6
- account_email?: undefined;
7
- display_name?: undefined;
8
- status?: undefined;
9
- last_error?: undefined;
10
- last_verified_at?: undefined;
11
- needs_reauth?: undefined;
12
- } | {
13
- connected: false;
14
- error?: undefined;
15
- id?: undefined;
16
- provider?: undefined;
17
- account_email?: undefined;
18
- display_name?: undefined;
19
- status?: undefined;
20
- last_error?: undefined;
21
- last_verified_at?: undefined;
22
- needs_reauth?: undefined;
23
- } | {
24
- connected: true;
25
- id: string;
26
- provider: string;
27
- account_email: string;
28
- display_name: string | null;
29
- status: string | null;
30
- last_error: string | null;
31
- last_verified_at: string | null;
32
- needs_reauth: boolean;
33
- error?: undefined;
34
- }>>;
1
+ import { type ActiveMailboxStatus } from "./mailbox-active.js";
2
+ export declare const getActiveOrdersMailbox: import("@tanstack/start-client-core").OptionalFetcher<undefined, undefined, Promise<ActiveMailboxStatus>>;
35
3
  export declare const syncMailboxNow: import("@tanstack/start-client-core").OptionalFetcher<undefined, (input: unknown) => {
36
4
  trigger: "realtime" | "manual";
37
5
  }, Promise<import("./mailbox-ingest.server.js").IngestRunResult | {
@@ -1 +1 @@
1
- {"version":3,"file":"mailbox.functions.d.ts","sourceRoot":"","sources":["../../src/lib/mailbox.functions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mailbox.functions.d.ts","sourceRoot":"","sources":["../../src/lib/mailbox.functions.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { classifyVerkoopRefusal, existingOrderOrFilter, defaultNeedsSticker, checkLinePrices, zeroPriceFlag } from "./verkoop-order.js";
2
+ import { toActiveMailboxStatus } from "./mailbox-active.js";
2
3
  // Server functions voor de Mailbox-bestellingen module
3
4
  import { createServerFn } from "@tanstack/react-start";
4
5
  import { requireSupabaseAuth } from "../integrations/supabase/auth-middleware.js";
@@ -7,38 +8,34 @@ import { z } from "zod";
7
8
  import { emailBodyText, inlineCidImages, normalizeAddressList, normalizeAttachments, sanitizeEmailHtml, stripInvisible, } from "./mailbox-body.js";
8
9
  import { EMPTY_LOAD_CARRIERS, isLoadCarrierAllowed, loadCarrierLabel, normalizeAllowedLoadCarriers, } from "./load-carriers.js";
9
10
  // ─── Actieve mailbox (uit gedeelde e-mail-auth module) ──────────────────────
10
- // Geen auth-middleware: de RPC is SECURITY DEFINER en EXECUTE staat ook aan
11
- // `anon`. Zo blijft de status-banner werken als de bearer-token tijdelijk
12
- // ontbreekt of verlopen is — anders crasht de UI met een 401.
11
+ // De RPC email_auth_for_purpose vereist een ingelogde gebruiker (anders 42501).
12
+ // We sturen daarom de bearer-token van de gebruiker mee zodat auth.uid() in de
13
+ // RPC gevuld is. Bewust geen requireSupabaseAuth-middleware: we geven altijd
14
+ // nette JSON terug. Geen token of 42501 → { connected: null, error: "unauthorized" }.
13
15
  export const getActiveOrdersMailbox = createServerFn({ method: "GET" })
14
16
  .handler(async () => {
15
- const url = process.env.SUPABASE_URL;
16
- const key = process.env.SUPABASE_PUBLISHABLE_KEY;
17
- if (!url || !key)
18
- return { connected: false, error: "missing_env" };
19
- const sb = createClient(url, key, {
20
- auth: { storage: undefined, persistSession: false, autoRefreshToken: false },
21
- });
22
- const { data, error } = await sb.rpc("email_auth_for_purpose", {
23
- _purpose: "orders",
24
- _direction: "receive",
25
- });
26
- if (error)
27
- return { connected: false, error: error.message };
28
- const row = Array.isArray(data) ? data[0] : null;
29
- if (!row)
30
- return { connected: false };
31
- return {
32
- connected: true,
33
- id: row.id,
34
- provider: row.provider,
35
- account_email: row.account_email,
36
- display_name: (row.display_name ?? null),
37
- status: (row.status ?? null),
38
- last_error: (row.last_error ?? null),
39
- last_verified_at: (row.last_verified_at ?? null),
40
- needs_reauth: !!row.needs_reauth,
41
- };
17
+ try {
18
+ const url = process.env.SUPABASE_URL;
19
+ const key = process.env.SUPABASE_PUBLISHABLE_KEY;
20
+ if (!url || !key)
21
+ return { connected: null, error: "missing_env" };
22
+ const { getRequest } = await import("@tanstack/react-start/server");
23
+ const token = getRequest()?.headers?.get("authorization")?.replace(/^Bearer\s+/i, "") ?? "";
24
+ if (!token)
25
+ return { connected: null, error: "unauthorized" };
26
+ const sb = createClient(url, key, {
27
+ auth: { storage: undefined, persistSession: false, autoRefreshToken: false },
28
+ global: { headers: { Authorization: `Bearer ${token}` } },
29
+ });
30
+ const { data, error } = await sb.rpc("email_auth_for_purpose", {
31
+ _purpose: "orders",
32
+ _direction: "receive",
33
+ });
34
+ return toActiveMailboxStatus(data, error);
35
+ }
36
+ catch (e) {
37
+ return { connected: null, error: String(e?.message ?? e) };
38
+ }
42
39
  });
43
40
  // ─── Ingest-triggers ────────────────────────────────────────────────────────
44
41
  // De volledige ingest-pipeline (events → messages → stub-proposals) leeft in
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flowselections/mailbox-orders",
3
- "version": "1.0.45",
3
+ "version": "1.0.47",
4
4
  "private": false,
5
5
  "sideEffects": false,
6
6
  "type": "module",