@flowselections/floriday-authenticatie-module 1.0.17 → 1.0.18
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/floriday/FlorydayConnectionPage.d.ts.map +1 -1
- package/dist-lib/components/floriday/FlorydayConnectionPage.js +2 -1
- package/dist-lib/components/settings/FloricodeSettingsCard.d.ts +2 -0
- package/dist-lib/components/settings/FloricodeSettingsCard.d.ts.map +1 -0
- package/dist-lib/components/settings/FloricodeSettingsCard.js +235 -0
- package/dist-lib/index.d.ts.map +1 -1
- package/dist-lib/index.js +2 -0
- package/dist-lib/integrations/supabase/auth-middleware.d.ts +484 -3
- package/dist-lib/integrations/supabase/auth-middleware.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/client.d.ts +484 -3
- package/dist-lib/integrations/supabase/client.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/client.server.d.ts +484 -3
- package/dist-lib/integrations/supabase/client.server.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/types.d.ts +492 -3
- package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
- package/dist-lib/lib/floricode-credentials.server.d.ts +21 -0
- package/dist-lib/lib/floricode-credentials.server.d.ts.map +1 -0
- package/dist-lib/lib/floricode-credentials.server.js +158 -0
- package/dist-lib/lib/floricode-product-features.d.ts.map +1 -1
- package/dist-lib/lib/floricode-product-features.js +19 -33
- package/dist-lib/lib/floricode-regulatory-features.d.ts.map +1 -1
- package/dist-lib/lib/floricode-regulatory-features.js +51 -41
- package/dist-lib/lib/floricode-sync.server.d.ts +35 -0
- package/dist-lib/lib/floricode-sync.server.d.ts.map +1 -0
- package/dist-lib/lib/floricode-sync.server.js +211 -0
- package/dist-lib/lib/floricode.functions.d.ts +78555 -0
- package/dist-lib/lib/floricode.functions.d.ts.map +1 -0
- package/dist-lib/lib/floricode.functions.js +178 -0
- package/dist-lib/lib/floriday-auction-letters.functions.d.ts +484 -3
- package/dist-lib/lib/floriday-auction-letters.functions.d.ts.map +1 -1
- package/dist-lib/lib/floriday-auto-process.server.d.ts +34 -0
- package/dist-lib/lib/floriday-auto-process.server.d.ts.map +1 -0
- package/dist-lib/lib/floriday-auto-process.server.js +365 -0
- package/dist-lib/lib/floriday-fulfillment-lookup.server.d.ts +19 -0
- package/dist-lib/lib/floriday-fulfillment-lookup.server.d.ts.map +1 -0
- package/dist-lib/lib/floriday-fulfillment-lookup.server.js +130 -0
- package/dist-lib/lib/floriday-gateway-auth.d.ts +24 -0
- package/dist-lib/lib/floriday-gateway-auth.d.ts.map +1 -0
- package/dist-lib/lib/floriday-gateway-auth.js +127 -0
- package/dist-lib/lib/floriday-labels.functions.d.ts +484 -3
- package/dist-lib/lib/floriday-labels.functions.d.ts.map +1 -1
- package/dist-lib/lib/floriday-labels.functions.js +3 -2
- package/dist-lib/lib/floriday-public.functions.d.ts +2904 -18
- package/dist-lib/lib/floriday-public.functions.d.ts.map +1 -1
- package/dist-lib/lib/floriday-rate-limit.server.d.ts +21 -0
- package/dist-lib/lib/floriday-rate-limit.server.d.ts.map +1 -0
- package/dist-lib/lib/floriday-rate-limit.server.js +75 -0
- package/dist-lib/lib/floriday-stickers.functions.d.ts +484 -3
- package/dist-lib/lib/floriday-stickers.functions.d.ts.map +1 -1
- package/dist-lib/lib/floriday-sync.functions.d.ts +15972 -99
- package/dist-lib/lib/floriday-sync.functions.d.ts.map +1 -1
- package/dist-lib/lib/floriday-writes.functions.d.ts +2952 -42
- package/dist-lib/lib/floriday-writes.functions.d.ts.map +1 -1
- package/dist-lib/lib/floriday-writes.functions.js +29 -4
- package/dist-lib/lib/floriday.functions.d.ts +9054 -198
- package/dist-lib/lib/floriday.functions.d.ts.map +1 -1
- package/dist-lib/lib/floriday.functions.js +39 -4
- package/dist-lib/lib/planning-helpers.d.ts +30 -0
- package/dist-lib/lib/planning-helpers.d.ts.map +1 -0
- package/dist-lib/lib/planning-helpers.js +62 -0
- package/package.json +3 -2
- package/public/flowselections-assets/floriday-authenticatie/floricode-logo.png +0 -0
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
// ============================================================================
|
|
2
|
+
// Server functions for Floricode settings & sync — safe to import from client.
|
|
3
|
+
// ============================================================================
|
|
4
|
+
import { createServerFn } from "@tanstack/react-start";
|
|
5
|
+
import { z } from "zod";
|
|
6
|
+
import { requireSupabaseAuth } from "../integrations/supabase/auth-middleware";
|
|
7
|
+
export const getFloricodeSettings = createServerFn({ method: "GET" })
|
|
8
|
+
.middleware([requireSupabaseAuth])
|
|
9
|
+
.handler(async () => {
|
|
10
|
+
const { supabaseAdmin } = await import("../integrations/supabase/client.server");
|
|
11
|
+
const { data, error } = await supabaseAdmin
|
|
12
|
+
.from("floricode_connection_settings")
|
|
13
|
+
.select("client_id, client_secret_last4, client_secret_ciphertext, last_token_test_at, last_token_test_ok, last_token_test_error")
|
|
14
|
+
.eq("id", 1)
|
|
15
|
+
.maybeSingle();
|
|
16
|
+
if (error)
|
|
17
|
+
throw new Error(error.message);
|
|
18
|
+
return {
|
|
19
|
+
clientId: data?.client_id ?? null,
|
|
20
|
+
secretLast4: data?.client_secret_last4 ?? null,
|
|
21
|
+
isConfigured: Boolean(data?.client_id && data?.client_secret_ciphertext),
|
|
22
|
+
lastTokenTestAt: data?.last_token_test_at ?? null,
|
|
23
|
+
lastTokenTestOk: data?.last_token_test_ok ?? null,
|
|
24
|
+
lastTokenTestError: data?.last_token_test_error ?? null,
|
|
25
|
+
};
|
|
26
|
+
});
|
|
27
|
+
export const saveFloricodeCredentials = createServerFn({ method: "POST" })
|
|
28
|
+
.middleware([requireSupabaseAuth])
|
|
29
|
+
.inputValidator((input) => z
|
|
30
|
+
.object({
|
|
31
|
+
clientId: z.string().trim().min(1),
|
|
32
|
+
clientSecret: z.string().min(1),
|
|
33
|
+
})
|
|
34
|
+
.parse(input))
|
|
35
|
+
.handler(async ({ data }) => {
|
|
36
|
+
const { supabaseAdmin } = await import("../integrations/supabase/client.server");
|
|
37
|
+
const { encryptClientSecret, invalidateFloricodeTokenCache } = await import("./floricode-credentials.server");
|
|
38
|
+
const ciphertext = await encryptClientSecret(data.clientSecret);
|
|
39
|
+
const last4 = data.clientSecret.slice(-4);
|
|
40
|
+
const { error } = await supabaseAdmin
|
|
41
|
+
.from("floricode_connection_settings")
|
|
42
|
+
.upsert({
|
|
43
|
+
id: 1,
|
|
44
|
+
client_id: data.clientId,
|
|
45
|
+
client_secret_ciphertext: ciphertext,
|
|
46
|
+
client_secret_last4: last4,
|
|
47
|
+
updated_at: new Date().toISOString(),
|
|
48
|
+
}, { onConflict: "id" });
|
|
49
|
+
if (error)
|
|
50
|
+
throw new Error(error.message);
|
|
51
|
+
invalidateFloricodeTokenCache();
|
|
52
|
+
return { ok: true };
|
|
53
|
+
});
|
|
54
|
+
export const clearFloricodeCredentials = createServerFn({ method: "POST" })
|
|
55
|
+
.middleware([requireSupabaseAuth])
|
|
56
|
+
.handler(async () => {
|
|
57
|
+
const { supabaseAdmin } = await import("../integrations/supabase/client.server");
|
|
58
|
+
const { invalidateFloricodeTokenCache } = await import("./floricode-credentials.server");
|
|
59
|
+
const { error } = await supabaseAdmin
|
|
60
|
+
.from("floricode_connection_settings")
|
|
61
|
+
.update({
|
|
62
|
+
client_id: null,
|
|
63
|
+
client_secret_ciphertext: null,
|
|
64
|
+
client_secret_last4: null,
|
|
65
|
+
last_token_test_at: null,
|
|
66
|
+
last_token_test_ok: null,
|
|
67
|
+
last_token_test_error: null,
|
|
68
|
+
})
|
|
69
|
+
.eq("id", 1);
|
|
70
|
+
if (error)
|
|
71
|
+
throw new Error(error.message);
|
|
72
|
+
invalidateFloricodeTokenCache();
|
|
73
|
+
return { ok: true };
|
|
74
|
+
});
|
|
75
|
+
export const testFloricodeConnection = createServerFn({ method: "POST" })
|
|
76
|
+
.middleware([requireSupabaseAuth])
|
|
77
|
+
.handler(async () => {
|
|
78
|
+
const { testFloricodeCredentials } = await import("./floricode-credentials.server");
|
|
79
|
+
return testFloricodeCredentials();
|
|
80
|
+
});
|
|
81
|
+
export const getFloricodeSyncStatus = createServerFn({ method: "GET" })
|
|
82
|
+
.middleware([requireSupabaseAuth])
|
|
83
|
+
.handler(async () => {
|
|
84
|
+
const { supabaseAdmin } = await import("../integrations/supabase/client.server");
|
|
85
|
+
const { FLORICODE_RESOURCES } = await import("./floricode-sync.server");
|
|
86
|
+
const stateRows = (await supabaseAdmin
|
|
87
|
+
.from("floricode_sync_state")
|
|
88
|
+
.select("resource, status, last_sync_at, last_change_date_time, cursor_skip, error_message")).data;
|
|
89
|
+
let countRows = [];
|
|
90
|
+
try {
|
|
91
|
+
const res = await supabaseAdmin.rpc("get_floricode_record_counts");
|
|
92
|
+
if (Array.isArray(res?.data))
|
|
93
|
+
countRows = res.data;
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
countRows = [];
|
|
97
|
+
}
|
|
98
|
+
const stateByRes = new Map();
|
|
99
|
+
for (const s of stateRows ?? [])
|
|
100
|
+
stateByRes.set(s.resource, s);
|
|
101
|
+
const countByRes = new Map();
|
|
102
|
+
for (const c of countRows ?? [])
|
|
103
|
+
countByRes.set(c.resource, Number(c.count ?? 0));
|
|
104
|
+
// Include registry order + append any state rows we don't know about
|
|
105
|
+
const seen = new Set();
|
|
106
|
+
const list = [];
|
|
107
|
+
const push = (resource) => {
|
|
108
|
+
if (seen.has(resource))
|
|
109
|
+
return;
|
|
110
|
+
seen.add(resource);
|
|
111
|
+
const s = stateByRes.get(resource);
|
|
112
|
+
list.push({
|
|
113
|
+
resource,
|
|
114
|
+
status: s?.status ?? null,
|
|
115
|
+
lastSyncAt: s?.last_sync_at ?? null,
|
|
116
|
+
lastChangeDateTime: s?.last_change_date_time ?? null,
|
|
117
|
+
cursorSkip: s?.cursor_skip ?? null,
|
|
118
|
+
errorMessage: s?.error_message ?? null,
|
|
119
|
+
rowCount: countByRes.get(resource) ?? 0,
|
|
120
|
+
});
|
|
121
|
+
};
|
|
122
|
+
// Include the known registry plus the two pre-existing resources
|
|
123
|
+
for (const r of FLORICODE_RESOURCES)
|
|
124
|
+
push(r.resource);
|
|
125
|
+
push("RegulatoryFeatureType");
|
|
126
|
+
push("RegulationType");
|
|
127
|
+
push("ProductFeature");
|
|
128
|
+
for (const s of stateRows ?? [])
|
|
129
|
+
push(s.resource);
|
|
130
|
+
return list;
|
|
131
|
+
});
|
|
132
|
+
export const triggerFloricodeResourceSync = createServerFn({ method: "POST" })
|
|
133
|
+
.middleware([requireSupabaseAuth])
|
|
134
|
+
.inputValidator((input) => z.object({ resource: z.string().min(1) }).parse(input))
|
|
135
|
+
.handler(async ({ data }) => {
|
|
136
|
+
const resource = data.resource;
|
|
137
|
+
if (resource === "RegulatoryFeatureType") {
|
|
138
|
+
const { supabaseAdmin } = await import("../integrations/supabase/client.server");
|
|
139
|
+
const { syncFloricodeRegulatoryFeatures } = await import("./floricode-regulatory-features");
|
|
140
|
+
const r = await syncFloricodeRegulatoryFeatures(supabaseAdmin, { maxBatches: 3 });
|
|
141
|
+
return { ok: true, resource, ...r };
|
|
142
|
+
}
|
|
143
|
+
if (resource === "ProductFeature") {
|
|
144
|
+
const { supabaseAdmin } = await import("../integrations/supabase/client.server");
|
|
145
|
+
const { syncFloricodeProductFeatures } = await import("./floricode-product-features");
|
|
146
|
+
const r = await syncFloricodeProductFeatures(supabaseAdmin, { maxBatches: 3 });
|
|
147
|
+
return { ok: true, resource, ...r };
|
|
148
|
+
}
|
|
149
|
+
if (resource === "RegulationType") {
|
|
150
|
+
return {
|
|
151
|
+
ok: true,
|
|
152
|
+
resource,
|
|
153
|
+
skipped: true,
|
|
154
|
+
message: "RegulationType wordt automatisch bijgewerkt tijdens de RegulatoryFeatureType-synchronisatie.",
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
const { syncFloricodeResource } = await import("./floricode-sync.server");
|
|
158
|
+
return syncFloricodeResource(resource, { maxBatches: 2 });
|
|
159
|
+
});
|
|
160
|
+
export const resetFloricodeResourceCursor = createServerFn({ method: "POST" })
|
|
161
|
+
.middleware([requireSupabaseAuth])
|
|
162
|
+
.inputValidator((input) => z.object({ resource: z.string().min(1) }).parse(input))
|
|
163
|
+
.handler(async ({ data }) => {
|
|
164
|
+
const { supabaseAdmin } = await import("../integrations/supabase/client.server");
|
|
165
|
+
const { error } = await supabaseAdmin
|
|
166
|
+
.from("floricode_sync_state")
|
|
167
|
+
.upsert({
|
|
168
|
+
resource: data.resource,
|
|
169
|
+
status: "pending",
|
|
170
|
+
error_message: null,
|
|
171
|
+
cursor_skip: 0,
|
|
172
|
+
last_change_date_time: null,
|
|
173
|
+
updated_at: new Date().toISOString(),
|
|
174
|
+
}, { onConflict: "resource" });
|
|
175
|
+
if (error)
|
|
176
|
+
throw new Error(error.message);
|
|
177
|
+
return { ok: true, resource: data.resource };
|
|
178
|
+
});
|