@flowselections/floriday-authenticatie-module 1.0.17 → 1.0.19

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 (62) 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/FloricodeSettingsCard.d.ts +2 -0
  4. package/dist-lib/components/settings/FloricodeSettingsCard.d.ts.map +1 -0
  5. package/dist-lib/components/settings/FloricodeSettingsCard.js +235 -0
  6. package/dist-lib/index.d.ts.map +1 -1
  7. package/dist-lib/index.js +2 -0
  8. package/dist-lib/integrations/supabase/auth-middleware.d.ts +524 -4
  9. package/dist-lib/integrations/supabase/auth-middleware.d.ts.map +1 -1
  10. package/dist-lib/integrations/supabase/client.d.ts +524 -4
  11. package/dist-lib/integrations/supabase/client.d.ts.map +1 -1
  12. package/dist-lib/integrations/supabase/client.server.d.ts +524 -4
  13. package/dist-lib/integrations/supabase/client.server.d.ts.map +1 -1
  14. package/dist-lib/integrations/supabase/types.d.ts +532 -4
  15. package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
  16. package/dist-lib/lib/floricode-credentials.server.d.ts +21 -0
  17. package/dist-lib/lib/floricode-credentials.server.d.ts.map +1 -0
  18. package/dist-lib/lib/floricode-credentials.server.js +158 -0
  19. package/dist-lib/lib/floricode-product-features.d.ts.map +1 -1
  20. package/dist-lib/lib/floricode-product-features.js +19 -33
  21. package/dist-lib/lib/floricode-regulatory-features.d.ts.map +1 -1
  22. package/dist-lib/lib/floricode-regulatory-features.js +51 -41
  23. package/dist-lib/lib/floricode-sync.server.d.ts +35 -0
  24. package/dist-lib/lib/floricode-sync.server.d.ts.map +1 -0
  25. package/dist-lib/lib/floricode-sync.server.js +211 -0
  26. package/dist-lib/lib/floricode.functions.d.ts +78828 -0
  27. package/dist-lib/lib/floricode.functions.d.ts.map +1 -0
  28. package/dist-lib/lib/floricode.functions.js +178 -0
  29. package/dist-lib/lib/floriday-auction-letters.functions.d.ts +524 -4
  30. package/dist-lib/lib/floriday-auction-letters.functions.d.ts.map +1 -1
  31. package/dist-lib/lib/floriday-auto-process.server.d.ts +34 -0
  32. package/dist-lib/lib/floriday-auto-process.server.d.ts.map +1 -0
  33. package/dist-lib/lib/floriday-auto-process.server.js +365 -0
  34. package/dist-lib/lib/floriday-fulfillment-lookup.server.d.ts +19 -0
  35. package/dist-lib/lib/floriday-fulfillment-lookup.server.d.ts.map +1 -0
  36. package/dist-lib/lib/floriday-fulfillment-lookup.server.js +130 -0
  37. package/dist-lib/lib/floriday-gateway-auth.d.ts +24 -0
  38. package/dist-lib/lib/floriday-gateway-auth.d.ts.map +1 -0
  39. package/dist-lib/lib/floriday-gateway-auth.js +127 -0
  40. package/dist-lib/lib/floriday-labels.functions.d.ts +524 -4
  41. package/dist-lib/lib/floriday-labels.functions.d.ts.map +1 -1
  42. package/dist-lib/lib/floriday-labels.functions.js +3 -2
  43. package/dist-lib/lib/floriday-public.functions.d.ts +3144 -24
  44. package/dist-lib/lib/floriday-public.functions.d.ts.map +1 -1
  45. package/dist-lib/lib/floriday-rate-limit.server.d.ts +21 -0
  46. package/dist-lib/lib/floriday-rate-limit.server.d.ts.map +1 -0
  47. package/dist-lib/lib/floriday-rate-limit.server.js +75 -0
  48. package/dist-lib/lib/floriday-stickers.functions.d.ts +524 -4
  49. package/dist-lib/lib/floriday-stickers.functions.d.ts.map +1 -1
  50. package/dist-lib/lib/floriday-sync.functions.d.ts +17292 -132
  51. package/dist-lib/lib/floriday-sync.functions.d.ts.map +1 -1
  52. package/dist-lib/lib/floriday-writes.functions.d.ts +3192 -48
  53. package/dist-lib/lib/floriday-writes.functions.d.ts.map +1 -1
  54. package/dist-lib/lib/floriday-writes.functions.js +29 -4
  55. package/dist-lib/lib/floriday.functions.d.ts +9576 -198
  56. package/dist-lib/lib/floriday.functions.d.ts.map +1 -1
  57. package/dist-lib/lib/floriday.functions.js +39 -4
  58. package/dist-lib/lib/planning-helpers.d.ts +30 -0
  59. package/dist-lib/lib/planning-helpers.d.ts.map +1 -0
  60. package/dist-lib/lib/planning-helpers.js +62 -0
  61. package/package.json +3 -2
  62. 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
+ });