@flowselections/mailbox-orders 1.0.26 → 1.0.28
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.
- package/dist-lib/components/MailboxProcessedPage.js +3 -3
- package/dist-lib/components/MailboxProposalsPage.js +5 -5
- package/dist-lib/index.d.ts +7 -7
- package/dist-lib/index.js +9 -9
- package/dist-lib/integrations/supabase/auth-middleware.d.ts +1 -1
- package/dist-lib/integrations/supabase/auth-middleware.js +1 -1
- package/dist-lib/integrations/supabase/client.server.d.ts +1 -1
- package/dist-lib/integrations/supabase/types.d.ts +3092 -7
- package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/types.js +1 -0
- package/dist-lib/lib/mailbox-ai-settings.functions.js +1 -1
- package/dist-lib/lib/mailbox-ai.server.d.ts +1 -1
- package/dist-lib/lib/mailbox-ai.server.js +3 -3
- package/dist-lib/lib/mailbox-ingest.server.d.ts +1 -1
- package/dist-lib/lib/mailbox-ingest.server.js +7 -7
- package/dist-lib/lib/mailbox-template.functions.d.ts +2 -2
- package/dist-lib/lib/mailbox.functions.d.ts +2 -1
- package/dist-lib/lib/mailbox.functions.d.ts.map +1 -1
- package/dist-lib/lib/mailbox.functions.js +2 -2
- package/dist-lib/server-routes.d.ts +9 -0
- package/dist-lib/server-routes.d.ts.map +1 -0
- package/dist-lib/server-routes.js +34 -0
- package/package.json +39 -7
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { createServerFn } from "@tanstack/react-start";
|
|
3
3
|
import { requireSupabaseAuth } from "../integrations/supabase/auth-middleware.js";
|
|
4
4
|
import { z } from "zod";
|
|
5
|
-
import { DEFAULT_MAILBOX_SYSTEM_PROMPT, DEFAULT_REQUIRED_FIELDS } from "./mailbox-ai-prompt";
|
|
5
|
+
import { DEFAULT_MAILBOX_SYSTEM_PROMPT, DEFAULT_REQUIRED_FIELDS } from "./mailbox-ai-prompt.js";
|
|
6
6
|
export const getMailboxAiSettings = createServerFn({ method: "GET" })
|
|
7
7
|
.middleware([requireSupabaseAuth])
|
|
8
8
|
.handler(async ({ context }) => {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { SupabaseClient } from "@supabase/supabase-js";
|
|
2
2
|
import type { Database } from "../integrations/supabase/types.js";
|
|
3
|
-
import { DEFAULT_MAILBOX_SYSTEM_PROMPT } from "./mailbox-ai-prompt";
|
|
3
|
+
import { DEFAULT_MAILBOX_SYSTEM_PROMPT } from "./mailbox-ai-prompt.js";
|
|
4
4
|
export { DEFAULT_MAILBOX_SYSTEM_PROMPT };
|
|
5
5
|
type AdminClient = SupabaseClient<Database>;
|
|
6
6
|
export declare const MAILBOX_AI_MODULE_KEY = "mailbox-bestellingen";
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
// AI-parsing van bestelmails. De provider, het model en de API-sleutel komen
|
|
2
2
|
// uit de centrale AI-Authenticatie module (zie ai-config.server.ts).
|
|
3
3
|
// Er wordt GEEN gebruik gemaakt van Lovable AI / de Lovable AI Gateway.
|
|
4
|
-
import { resolveModuleAi, logAiCall } from "./ai-config.server";
|
|
5
|
-
import { DEFAULT_MAILBOX_SYSTEM_PROMPT } from "./mailbox-ai-prompt";
|
|
4
|
+
import { resolveModuleAi, logAiCall } from "./ai-config.server.js";
|
|
5
|
+
import { DEFAULT_MAILBOX_SYSTEM_PROMPT } from "./mailbox-ai-prompt.js";
|
|
6
6
|
export { DEFAULT_MAILBOX_SYSTEM_PROMPT };
|
|
7
7
|
export const MAILBOX_AI_MODULE_KEY = "mailbox-bestellingen";
|
|
8
8
|
/** Huidige vingerafdruk van de gekoppelde AI-agent, of null als AI niet beschikbaar is. */
|
|
@@ -261,7 +261,7 @@ export class AiUnavailableError extends Error {
|
|
|
261
261
|
}
|
|
262
262
|
}
|
|
263
263
|
export async function parseOrderEmail(admin, args) {
|
|
264
|
-
const { resolveModuleAiAll } = await import("./ai-config.server");
|
|
264
|
+
const { resolveModuleAiAll } = await import("./ai-config.server.js");
|
|
265
265
|
const resolution = await resolveModuleAiAll(admin, MAILBOX_AI_MODULE_KEY);
|
|
266
266
|
if (!resolution.ok)
|
|
267
267
|
throw new AiUnavailableError(resolution.reason, false, 0);
|
|
@@ -11,7 +11,7 @@ export declare function loadMailboxAiSettings(admin: AdminClient): Promise<{
|
|
|
11
11
|
* verplichte velden. Ontbrekende of onzekere gegevens worden expliciet
|
|
12
12
|
* benoemd in plaats van stilzwijgend leeg gelaten.
|
|
13
13
|
*/
|
|
14
|
-
export declare function computeValidation(parsed: import("./mailbox-ai.server").ParsedOrder, requiredFields: string[], extra: {
|
|
14
|
+
export declare function computeValidation(parsed: import("./mailbox-ai.server.js").ParsedOrder, requiredFields: string[], extra: {
|
|
15
15
|
customerId: string | null;
|
|
16
16
|
}): {
|
|
17
17
|
missing: string[];
|
|
@@ -8,8 +8,8 @@
|
|
|
8
8
|
// GEEN imports van "@/integrations/supabase/client.server" op module-scope —
|
|
9
9
|
// die worden per aanroep dynamisch geladen (client-reachable modules mogen
|
|
10
10
|
// server-only helpers niet direct binnenhalen).
|
|
11
|
-
import { emailBodyText } from "./mailbox-body";
|
|
12
|
-
import { detectLoadCarrierInText, isLoadCarrierAllowed, loadCarrierLabel, normalizeAllowedLoadCarriers, } from "./load-carriers";
|
|
11
|
+
import { emailBodyText } from "./mailbox-body.js";
|
|
12
|
+
import { detectLoadCarrierInText, isLoadCarrierAllowed, loadCarrierLabel, normalizeAllowedLoadCarriers, } from "./load-carriers.js";
|
|
13
13
|
/**
|
|
14
14
|
* Ladingdragers komen live uit de Logistics Engine — nooit cachen, nooit een
|
|
15
15
|
* eigen lijst bijhouden.
|
|
@@ -216,7 +216,7 @@ async function aiParseMessage(admin, messageId, customerId) {
|
|
|
216
216
|
if (!bodyText.trim())
|
|
217
217
|
throw new Error("Bericht bevat geen tekst om te lezen.");
|
|
218
218
|
const ctx = await buildAiContext(admin, customerId);
|
|
219
|
-
const { parseOrderEmail } = await import("./mailbox-ai.server");
|
|
219
|
+
const { parseOrderEmail } = await import("./mailbox-ai.server.js");
|
|
220
220
|
const res = await parseOrderEmail(admin, {
|
|
221
221
|
bodyText,
|
|
222
222
|
subject: msg?.subject ?? "",
|
|
@@ -231,7 +231,7 @@ async function aiParseMessage(admin, messageId, customerId) {
|
|
|
231
231
|
}
|
|
232
232
|
catch (e) {
|
|
233
233
|
const msg = String(e?.message ?? e);
|
|
234
|
-
const { isTransientAiError } = await import("./mailbox-ai.server");
|
|
234
|
+
const { isTransientAiError } = await import("./mailbox-ai.server.js");
|
|
235
235
|
const transient = e?.name === "AiUnavailableError" ? Boolean(e.transient) : isTransientAiError(msg);
|
|
236
236
|
return { parsed: null, meta: null, error: msg.slice(0, 500), transient, requiredFields: [] };
|
|
237
237
|
}
|
|
@@ -426,7 +426,7 @@ export async function createStubProposal(admin, messageId, fromEmail) {
|
|
|
426
426
|
auto_match_candidates: matchResult.candidates,
|
|
427
427
|
};
|
|
428
428
|
// --- AI-parse (best effort) ---------------------------------------------
|
|
429
|
-
const { currentAiFingerprint } = await import("./mailbox-ai.server");
|
|
429
|
+
const { currentAiFingerprint } = await import("./mailbox-ai.server.js");
|
|
430
430
|
const fingerprint = await currentAiFingerprint(admin).catch(() => null);
|
|
431
431
|
const attempt = await aiParseMessage(admin, messageId, matchResult.customerId);
|
|
432
432
|
const parsed = attempt.parsed;
|
|
@@ -557,7 +557,7 @@ export async function reparseProposal(admin, proposalId) {
|
|
|
557
557
|
const rematch = matchedCustomerId ? null : await matchCustomerByEmail(admin, senderEmail);
|
|
558
558
|
if (rematch?.customerId)
|
|
559
559
|
matchedCustomerId = rematch.customerId;
|
|
560
|
-
const { currentAiFingerprint } = await import("./mailbox-ai.server");
|
|
560
|
+
const { currentAiFingerprint } = await import("./mailbox-ai.server.js");
|
|
561
561
|
const fingerprint = await currentAiFingerprint(admin).catch(() => null);
|
|
562
562
|
const attempt = await aiParseMessage(admin, prop.message_id, matchedCustomerId);
|
|
563
563
|
const prevBase = (prop.parsed_payload && typeof prop.parsed_payload === "object" ? prop.parsed_payload : {});
|
|
@@ -663,7 +663,7 @@ export async function reparseProposal(admin, proposalId) {
|
|
|
663
663
|
* opgeslagen vingerafdruk afwijkt van de huidige worden opnieuw geanalyseerd.
|
|
664
664
|
*/
|
|
665
665
|
export async function reparseChangedAgentProposals(admin, limit = 25) {
|
|
666
|
-
const { currentAiFingerprint } = await import("./mailbox-ai.server");
|
|
666
|
+
const { currentAiFingerprint } = await import("./mailbox-ai.server.js");
|
|
667
667
|
const fingerprint = await currentAiFingerprint(admin).catch(() => null);
|
|
668
668
|
if (!fingerprint)
|
|
669
669
|
return { checked: 0, reparsed: 0, failed: 0, fingerprint: null };
|
|
@@ -7,12 +7,12 @@ export declare const listTemplateFields: import("@tanstack/start-client-core").O
|
|
|
7
7
|
ai_enabled: boolean;
|
|
8
8
|
ai_hint: string | null;
|
|
9
9
|
created_at: string;
|
|
10
|
-
default_value: import("../integrations/supabase/types").Json | null;
|
|
10
|
+
default_value: import("../integrations/supabase/types.js").Json | null;
|
|
11
11
|
field_type: string;
|
|
12
12
|
id: string;
|
|
13
13
|
key: string;
|
|
14
14
|
label: string;
|
|
15
|
-
options: import("../integrations/supabase/types").Json | null;
|
|
15
|
+
options: import("../integrations/supabase/types.js").Json | null;
|
|
16
16
|
required: boolean;
|
|
17
17
|
sort_order: number;
|
|
18
18
|
source: string;
|
|
@@ -132,7 +132,7 @@ export declare const listAllowedLoadCarriers: import("@tanstack/start-client-cor
|
|
|
132
132
|
error: string | null;
|
|
133
133
|
allowed: string[];
|
|
134
134
|
default: string | null;
|
|
135
|
-
carriers: import("./load-carriers").EngineLoadCarrier[];
|
|
135
|
+
carriers: import("./load-carriers.js").EngineLoadCarrier[];
|
|
136
136
|
}>>;
|
|
137
137
|
export declare const approveProposal: import("@tanstack/start-client-core").OptionalFetcher<readonly [import("@tanstack/start-client-core").FunctionMiddlewareAfterServer<{}, unknown, undefined, {
|
|
138
138
|
supabase: import("../integrations/supabase/auth-middleware.js").AuthedSupabaseClient;
|
|
@@ -288,6 +288,7 @@ export declare const listOrderCarts: import("@tanstack/start-client-core").Requi
|
|
|
288
288
|
order_cart_items: {
|
|
289
289
|
boxes: number | null;
|
|
290
290
|
cart_id: string;
|
|
291
|
+
components: import("../integrations/supabase/types.js").Json | null;
|
|
291
292
|
crates: number;
|
|
292
293
|
crates_in_layer: number | null;
|
|
293
294
|
crates_per_layer: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mailbox.functions.d.ts","sourceRoot":"","sources":["../../src/lib/mailbox.functions.ts"],"names":[],"mappings":"AA6BA,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;QAiBf,MAAM;cACM,MAAM;mBACI,MAAM;kBACE,MAAM,GAAG,IAAI;YACzB,MAAM,GAAG,IAAI;gBACL,MAAM,GAAG,IAAI;sBACD,MAAM,GAAG,IAAI;;;GAGnE,CAAC;AAWL,eAAO,MAAM,cAAc,2EACD,OAAO;;;;;;;;GA+B7B,CAAC;AAGL,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;GAWzB,CAAC;AAEL,+EAA+E;AAC/E,eAAO,MAAM,kBAAkB;;;;8CAEL,OAAO;;;;;GAK7B,CAAC;AAEL,iFAAiF;AACjF,eAAO,MAAM,8BAA8B;;;;;;;;;GAMvC,CAAC;AAML,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;GAWrB,CAAC;AAEL,eAAO,MAAM,YAAY;;;;8CAEC,OAAO;;;;GAa7B,CAAC;AAKL,eAAO,MAAM,aAAa;;;;8CAEA,OAAO;;;;GAmC7B,CAAC;AAIL,qEAAqE;AACrE,eAAO,MAAM,iBAAiB;;;;8CAEJ,OAAO;;;;GAyC7B,CAAC;AASL,eAAO,MAAM,uBAAuB;;;;;WAO+B,MAAM,GAAG,IAAI;;;;GAC5E,CAAC;AAgBL,eAAO,MAAM,eAAe;;;;8CAEF,OAAO;;;;;;;;;;;;;;;;;;;;;;;GA4K7B,CAAC;AAEL,eAAO,MAAM,cAAc;;;;8CAED,OAAO;;;;;GAY7B,CAAC;AAGL,eAAO,MAAM,cAAc;;;;8CAED,OAAO;;;;GAW7B,CAAC;AAQL,eAAO,MAAM,sBAAsB;;;;;;GAiD/B,CAAC;AAIL,eAAO,MAAM,uBAAuB;;;;8CAEV,OAAO;;;;;;;;;;;;QAyBiB,MAAM;;;QAoBxB,MAAM;;GAClC,CAAC;AAKL,eAAO,MAAM,qBAAqB;;;;;;;GAiH9B,CAAC;AAiBL,eAAO,MAAM,oBAAoB;;;;8CAEP,OAAO;;;;;qBAqBS,MAAM;sBAAgB,MAAM;gBAAU,MAAM;gBAAU,MAAM;kBAAY,MAAM;;;;uBAhCvG,MAAM;oBACT,MAAM,GAAG,IAAI;sBACX,MAAM;0BAEF,MAAM;0BACN,MAAM;yBACP,MAAM;;;qBA0FW,MAAM;eAClB,MAAM,GAAG,IAAI;;;;GAoBjC,CAAC;AAiBL,eAAO,MAAM,eAAe;;;;8CAEF,OAAO;;;;;;;;;;;;;;;;GAuC7B,CAAC;AAEL,eAAO,MAAM,cAAc;;;;0CAEL;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE;aAAR,MAAM
|
|
1
|
+
{"version":3,"file":"mailbox.functions.d.ts","sourceRoot":"","sources":["../../src/lib/mailbox.functions.ts"],"names":[],"mappings":"AA6BA,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;QAiBf,MAAM;cACM,MAAM;mBACI,MAAM;kBACE,MAAM,GAAG,IAAI;YACzB,MAAM,GAAG,IAAI;gBACL,MAAM,GAAG,IAAI;sBACD,MAAM,GAAG,IAAI;;;GAGnE,CAAC;AAWL,eAAO,MAAM,cAAc,2EACD,OAAO;;;;;;;;GA+B7B,CAAC;AAGL,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;GAWzB,CAAC;AAEL,+EAA+E;AAC/E,eAAO,MAAM,kBAAkB;;;;8CAEL,OAAO;;;;;GAK7B,CAAC;AAEL,iFAAiF;AACjF,eAAO,MAAM,8BAA8B;;;;;;;;;GAMvC,CAAC;AAML,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;GAWrB,CAAC;AAEL,eAAO,MAAM,YAAY;;;;8CAEC,OAAO;;;;GAa7B,CAAC;AAKL,eAAO,MAAM,aAAa;;;;8CAEA,OAAO;;;;GAmC7B,CAAC;AAIL,qEAAqE;AACrE,eAAO,MAAM,iBAAiB;;;;8CAEJ,OAAO;;;;GAyC7B,CAAC;AASL,eAAO,MAAM,uBAAuB;;;;;WAO+B,MAAM,GAAG,IAAI;;;;GAC5E,CAAC;AAgBL,eAAO,MAAM,eAAe;;;;8CAEF,OAAO;;;;;;;;;;;;;;;;;;;;;;;GA4K7B,CAAC;AAEL,eAAO,MAAM,cAAc;;;;8CAED,OAAO;;;;;GAY7B,CAAC;AAGL,eAAO,MAAM,cAAc;;;;8CAED,OAAO;;;;GAW7B,CAAC;AAQL,eAAO,MAAM,sBAAsB;;;;;;GAiD/B,CAAC;AAIL,eAAO,MAAM,uBAAuB;;;;8CAEV,OAAO;;;;;;;;;;;;QAyBiB,MAAM;;;QAoBxB,MAAM;;GAClC,CAAC;AAKL,eAAO,MAAM,qBAAqB;;;;;;;GAiH9B,CAAC;AAiBL,eAAO,MAAM,oBAAoB;;;;8CAEP,OAAO;;;;;qBAqBS,MAAM;sBAAgB,MAAM;gBAAU,MAAM;gBAAU,MAAM;kBAAY,MAAM;;;;uBAhCvG,MAAM;oBACT,MAAM,GAAG,IAAI;sBACX,MAAM;0BAEF,MAAM;0BACN,MAAM;yBACP,MAAM;;;qBA0FW,MAAM;eAClB,MAAM,GAAG,IAAI;;;;GAoBjC,CAAC;AAiBL,eAAO,MAAM,eAAe;;;;8CAEF,OAAO;;;;;;;;;;;;;;;;GAuC7B,CAAC;AAEL,eAAO,MAAM,cAAc;;;;0CAEL;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE;aAAR,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAQnC,CAAC;AAEL,eAAO,MAAM,gCAAgC;;;;0CAEvB;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE;gBAAR,MAAM;;;;;;;;;;;;;;;;;;;GAUtC,CAAC;AAKL,eAAO,MAAM,mBAAmB;;;;;;YAqBD,MAAM;;;;;GAQjC,CAAC;AAEL,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;GAS9B,CAAC;AAGL,eAAO,MAAM,gBAAgB;;;;;;GAUzB,CAAC;AAiBL,eAAO,MAAM,8BAA8B;;;;8CAEjB,OAAO;;;;0BAOT,MAAM;0BAAoB,MAAM;yBAAmB,MAAM;oBAC/D,OAAO;oBACP,MAAM,GAAG,IAAI;oBAAc,MAAM,GAAG,IAAI;sBACtC,MAAM,GAAG,IAAI;sBAAgB,MAAM,GAAG,IAAI;;yBAEO,MAAM;yBAAmB,MAAM;;;0BAL5E,MAAM;0BAAoB,MAAM;yBAAmB,MAAM;oBAC/D,OAAO;oBACP,MAAM,GAAG,IAAI;oBAAc,MAAM,GAAG,IAAI;sBACtC,MAAM,GAAG,IAAI;sBAAgB,MAAM,GAAG,IAAI;;;;;GAsM1D,CAAC"}
|
|
@@ -4,8 +4,8 @@ import { requireSupabaseAuth } from "../integrations/supabase/auth-middleware.js
|
|
|
4
4
|
import { createClient } from "@supabase/supabase-js";
|
|
5
5
|
import { z } from "zod";
|
|
6
6
|
import { computeEarliestDelivery } from "./delivery-date.js";
|
|
7
|
-
import { emailBodyText, inlineCidImages, normalizeAddressList, normalizeAttachments, sanitizeEmailHtml, stripInvisible, } from "./mailbox-body";
|
|
8
|
-
import { EMPTY_LOAD_CARRIERS, isLoadCarrierAllowed, loadCarrierLabel, normalizeAllowedLoadCarriers, } from "./load-carriers";
|
|
7
|
+
import { emailBodyText, inlineCidImages, normalizeAddressList, normalizeAttachments, sanitizeEmailHtml, stripInvisible, } from "./mailbox-body.js";
|
|
8
|
+
import { EMPTY_LOAD_CARRIERS, isLoadCarrierAllowed, loadCarrierLabel, normalizeAllowedLoadCarriers, } from "./load-carriers.js";
|
|
9
9
|
// ─── Actieve mailbox (uit gedeelde e-mail-auth module) ──────────────────────
|
|
10
10
|
// Geen auth-middleware: de RPC is SECURITY DEFINER en EXECUTE staat ook aan
|
|
11
11
|
// `anon`. Zo blijft de status-banner werken als de bearer-token tijdelijk
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/** POST /api/public/mailbox-orders/process-events (pg_cron, elke minuut). */
|
|
2
|
+
export declare function processEvents({ request }: {
|
|
3
|
+
request: Request;
|
|
4
|
+
}): Promise<Response>;
|
|
5
|
+
/** POST /api/public/mailbox-orders/webhook-ingest (directe webhook-trigger). */
|
|
6
|
+
export declare function webhookIngest({ request }: {
|
|
7
|
+
request: Request;
|
|
8
|
+
}): Promise<Response>;
|
|
9
|
+
//# sourceMappingURL=server-routes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server-routes.d.ts","sourceRoot":"","sources":["../src/server-routes.ts"],"names":[],"mappings":"AAgCA,6EAA6E;AAC7E,wBAAsB,aAAa,CAAC,EAAE,OAAO,EAAE,EAAE;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,CAExF;AAED,gFAAgF;AAChF,wBAAsB,aAAa,CAAC,EAAE,OAAO,EAAE,EAAE;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,CAExF"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
// Server-route handlers voor de shell (flowselections.serverRoutes).
|
|
2
|
+
// Geen client-code en geen React. Authenticatie via `apikey` header tegen de
|
|
3
|
+
// Supabase publishable/anon key (fail closed als die ontbreekt).
|
|
4
|
+
function json(body, status) {
|
|
5
|
+
return new Response(JSON.stringify(body), {
|
|
6
|
+
status,
|
|
7
|
+
headers: { "Content-Type": "application/json" },
|
|
8
|
+
});
|
|
9
|
+
}
|
|
10
|
+
async function handle(request, trigger) {
|
|
11
|
+
const providedKey = request.headers.get("apikey");
|
|
12
|
+
const expectedKey = process.env.SUPABASE_PUBLISHABLE_KEY ?? process.env.SUPABASE_ANON_KEY;
|
|
13
|
+
if (!expectedKey)
|
|
14
|
+
return json({ ok: false, error: "server_misconfigured" }, 500);
|
|
15
|
+
if (!providedKey || providedKey !== expectedKey) {
|
|
16
|
+
return json({ ok: false, error: "unauthorized" }, 401);
|
|
17
|
+
}
|
|
18
|
+
try {
|
|
19
|
+
const { runIngest } = await import("./lib/mailbox-ingest.server.js");
|
|
20
|
+
const result = await runIngest(trigger);
|
|
21
|
+
return json(result, 200);
|
|
22
|
+
}
|
|
23
|
+
catch (e) {
|
|
24
|
+
return json({ ok: false, error: String(e?.message ?? e) }, 500);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
/** POST /api/public/mailbox-orders/process-events (pg_cron, elke minuut). */
|
|
28
|
+
export async function processEvents({ request }) {
|
|
29
|
+
return handle(request, "cron");
|
|
30
|
+
}
|
|
31
|
+
/** POST /api/public/mailbox-orders/webhook-ingest (directe webhook-trigger). */
|
|
32
|
+
export async function webhookIngest({ request }) {
|
|
33
|
+
return handle(request, "realtime");
|
|
34
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@flowselections/mailbox-orders",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.28",
|
|
4
4
|
"private": false,
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"type": "module",
|
|
@@ -11,7 +11,11 @@
|
|
|
11
11
|
"types": "./dist-lib/index.d.ts",
|
|
12
12
|
"default": "./dist-lib/index.js"
|
|
13
13
|
},
|
|
14
|
-
"./styles": "./dist-lib/styles.css"
|
|
14
|
+
"./styles": "./dist-lib/styles.css",
|
|
15
|
+
"./server-routes": {
|
|
16
|
+
"types": "./dist-lib/server-routes.d.ts",
|
|
17
|
+
"default": "./dist-lib/server-routes.js"
|
|
18
|
+
}
|
|
15
19
|
},
|
|
16
20
|
"files": [
|
|
17
21
|
"dist-lib",
|
|
@@ -23,7 +27,7 @@
|
|
|
23
27
|
"scripts": {
|
|
24
28
|
"dev": "vite dev",
|
|
25
29
|
"build": "vite build",
|
|
26
|
-
"build:lib": "tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json && node -e \"require('fs').writeFileSync('dist-lib/styles.css', '@source \\\"./\\\";\\n')\"",
|
|
30
|
+
"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')\"",
|
|
27
31
|
"build:lib:watch": "tsc -p tsconfig.build.json --watch",
|
|
28
32
|
"build:dev": "vite build --mode development",
|
|
29
33
|
"preview": "vite preview",
|
|
@@ -47,13 +51,13 @@
|
|
|
47
51
|
"@cloudflare/vite-plugin": "^1.25.5",
|
|
48
52
|
"@eslint/js": "^9.32.0",
|
|
49
53
|
"@flowselections/core": "1.0.29",
|
|
50
|
-
"@lovable.dev/vite-tanstack-config": "2.
|
|
54
|
+
"@lovable.dev/vite-tanstack-config": "2.26.5",
|
|
51
55
|
"@rsbuild/core": "^1.0.0",
|
|
52
56
|
"@tailwindcss/vite": "^4.2.1",
|
|
53
57
|
"@tanstack/react-query": "^5.83.0",
|
|
54
|
-
"@tanstack/react-router": "
|
|
55
|
-
"@tanstack/react-start": "
|
|
56
|
-
"@tanstack/router-plugin": "
|
|
58
|
+
"@tanstack/react-router": "1.169.1",
|
|
59
|
+
"@tanstack/react-start": "1.167.63",
|
|
60
|
+
"@tanstack/router-plugin": "1.167.33",
|
|
57
61
|
"@types/node": "^22.16.5",
|
|
58
62
|
"@types/react": "^19.2.0",
|
|
59
63
|
"@types/react-dom": "^19.2.0",
|
|
@@ -88,6 +92,34 @@
|
|
|
88
92
|
"route": "mailbox-orders/verwerkt",
|
|
89
93
|
"title": "Verwerkt"
|
|
90
94
|
}
|
|
95
|
+
],
|
|
96
|
+
"serverRoutes": [
|
|
97
|
+
{
|
|
98
|
+
"routePath": "/api/public/mailbox-orders/process-events",
|
|
99
|
+
"import": "@flowselections/mailbox-orders/server-routes",
|
|
100
|
+
"handler": "processEvents",
|
|
101
|
+
"methods": [
|
|
102
|
+
"POST"
|
|
103
|
+
]
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
"routePath": "/api/public/mailbox-orders/webhook-ingest",
|
|
107
|
+
"import": "@flowselections/mailbox-orders/server-routes",
|
|
108
|
+
"handler": "webhookIngest",
|
|
109
|
+
"methods": [
|
|
110
|
+
"POST"
|
|
111
|
+
]
|
|
112
|
+
}
|
|
113
|
+
],
|
|
114
|
+
"crons": [
|
|
115
|
+
{
|
|
116
|
+
"name": "mailbox-orders-process-events",
|
|
117
|
+
"schedule": "* * * * *",
|
|
118
|
+
"kind": "http",
|
|
119
|
+
"path": "/api/public/mailbox-orders/process-events",
|
|
120
|
+
"auth": "anon",
|
|
121
|
+
"timeoutMs": 30000
|
|
122
|
+
}
|
|
91
123
|
]
|
|
92
124
|
}
|
|
93
125
|
}
|