@flowselections/core 1.0.30 → 1.0.32

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 (36) hide show
  1. package/README.md +40 -1
  2. package/dist/auth/header-identity.d.ts +23 -0
  3. package/dist/auth/header-identity.d.ts.map +1 -0
  4. package/dist/auth/header-identity.js +53 -0
  5. package/dist/auth/password-callback.d.ts +17 -0
  6. package/dist/auth/password-callback.d.ts.map +1 -0
  7. package/dist/auth/password-callback.js +39 -0
  8. package/dist/components/layout/AuthenticatedLayout.js +1 -1
  9. package/dist/components/layout/Header.d.ts +3 -1
  10. package/dist/components/layout/Header.d.ts.map +1 -1
  11. package/dist/components/layout/Header.js +5 -2
  12. package/dist/components/layout/HeaderIdentity.d.ts +5 -0
  13. package/dist/components/layout/HeaderIdentity.d.ts.map +1 -0
  14. package/dist/components/layout/HeaderIdentity.js +32 -0
  15. package/dist/components/layout/ResetWachtwoordPage.d.ts.map +1 -1
  16. package/dist/components/layout/ResetWachtwoordPage.js +63 -13
  17. package/dist/components/layout/useHeaderGreeting.d.ts +3 -0
  18. package/dist/components/layout/useHeaderGreeting.d.ts.map +1 -0
  19. package/dist/components/layout/useHeaderGreeting.js +40 -0
  20. package/dist/components/ui/command.d.ts +7 -7
  21. package/dist/server/index.d.ts +1 -1
  22. package/dist/server/index.d.ts.map +1 -1
  23. package/dist/server/index.js +1 -1
  24. package/dist/server/shell-runtime.d.ts +10 -4
  25. package/dist/server/shell-runtime.d.ts.map +1 -1
  26. package/dist/server/shell-runtime.js +266 -29
  27. package/dist/supabase/auth-middleware.d.ts +30 -0
  28. package/dist/supabase/auth-middleware.d.ts.map +1 -1
  29. package/dist/supabase/client.d.ts +30 -0
  30. package/dist/supabase/client.d.ts.map +1 -1
  31. package/dist/supabase/client.js +2 -0
  32. package/dist/supabase/client.server.d.ts +30 -0
  33. package/dist/supabase/client.server.d.ts.map +1 -1
  34. package/dist/supabase/types.d.ts +30 -0
  35. package/dist/supabase/types.d.ts.map +1 -1
  36. package/package.json +1 -1
@@ -14,14 +14,26 @@ const BASE_URL_TTL_MS = 60000;
14
14
  const LINK_INTERVAL_MS = 60 * 60000;
15
15
  const TIMEOUT_MS = 5000;
16
16
  const WARN_INTERVAL_MS = 5 * 60000;
17
+ const CRON_TTL_MS = 5 * 60000;
17
18
  let baseUrlCache = null;
18
19
  let baseUrlInflight = null;
19
- let lastLinkCheck = 0;
20
+ let nextLinkCheck = 0;
20
21
  let linkInflight = null;
22
+ let nextCronKeyCheck = 0;
23
+ let cronKeyInflight = null;
24
+ let cronCache = null;
25
+ let cronInflight = null;
26
+ let comparisonKey = null;
27
+ const DEFAULT_EXEMPT = [
28
+ "/api/public/print/queue-tick",
29
+ "/api/public/hooks/logistics-shipping-note-now",
30
+ "/api/public/cron/ping",
31
+ ];
21
32
  const lastWarn = new Map();
22
33
  function warn(key, message, detail) {
23
34
  const now = Date.now();
24
- if (now - (lastWarn.get(key) ?? 0) < WARN_INTERVAL_MS)
35
+ const last = lastWarn.get(key);
36
+ if (last !== undefined && now - last < WARN_INTERVAL_MS)
25
37
  return;
26
38
  lastWarn.set(key, now);
27
39
  console.warn(`[shell-runtime] ${message}`, detail ?? {});
@@ -44,12 +56,62 @@ async function timedFetch(url, init) {
44
56
  const ctrl = new AbortController();
45
57
  const t = setTimeout(() => ctrl.abort(), TIMEOUT_MS);
46
58
  try {
47
- return await fetch(url, { ...init, signal: ctrl.signal, redirect: "error" });
59
+ const response = await fetch(url, { ...init, signal: ctrl.signal, redirect: "manual" });
60
+ if ((response.status >= 300 && response.status <= 399) || response.type === "opaqueredirect") {
61
+ throw new Error(`onverwachte doorverwijzing (status ${response.status})`);
62
+ }
63
+ return response;
64
+ }
65
+ catch (error) {
66
+ // Transport errors can echo a URL or credential. Scrub outgoing values
67
+ // before propagating the error; never attach the request or response body.
68
+ const sensitive = [];
69
+ new Headers(init.headers).forEach((value) => sensitive.push(value));
70
+ if (typeof init.body === "string") {
71
+ sensitive.push(init.body);
72
+ try {
73
+ const collect = (value) => {
74
+ if (typeof value === "string")
75
+ sensitive.push(value);
76
+ else if (Array.isArray(value))
77
+ value.forEach(collect);
78
+ else if (value && typeof value === "object")
79
+ Object.values(value).forEach(collect);
80
+ };
81
+ collect(JSON.parse(init.body));
82
+ }
83
+ catch { /* No body content is logged. */ }
84
+ }
85
+ const detail = errorDetail(error, sensitive);
86
+ const sanitized = new Error(detail.message);
87
+ sanitized.name = detail.error;
88
+ throw sanitized;
48
89
  }
49
90
  finally {
50
91
  clearTimeout(t);
51
92
  }
52
93
  }
94
+ /** Only bounded error name/message; never serialize an error's extra fields. */
95
+ function errorDetail(error, sensitive = []) {
96
+ const redact = (text) => {
97
+ const values = [...sensitive,
98
+ process.env.SB_SERVICE_ROLE_KEY, process.env.CENTRAL_AUTH_SECRET,
99
+ process.env.SUPABASE_PUBLISHABLE_KEY, process.env.SUPABASE_ANON_KEY,
100
+ cronCache?.value?.secret,
101
+ ].filter((value) => typeof value === "string" && value.length > 0);
102
+ let result = text;
103
+ for (const value of values.sort((a, b) => b.length - a.length)) {
104
+ result = result.split(value).join("[redacted]");
105
+ }
106
+ return result.replace(/https?:\/\/[^\s"'<>]+/gi, "[url]")
107
+ .replace(/\b(?:sb_secret_|sb_publishable_)[\w-]+|\beyJ[\w-]*\.[\w-]+\.[\w-]+/g, "[redacted]")
108
+ .replace(/[\r\n\t]/g, " ").slice(0, 200);
109
+ };
110
+ return {
111
+ error: redact(error instanceof Error ? error.name : "UnknownError"),
112
+ message: redact(error instanceof Error ? error.message : "onbekende fout"),
113
+ };
114
+ }
53
115
  /** Absolute https-origin zonder pad, of null. */
54
116
  export function normalizeShellBaseUrl(raw) {
55
117
  if (typeof raw !== "string" || !raw.trim())
@@ -70,11 +132,11 @@ async function readShellBaseUrl() {
70
132
  warn("config", "SUPABASE_URL of SB_SERVICE_ROLE_KEY ontbreekt; shell-adres onbekend");
71
133
  return null;
72
134
  }
73
- const res = await timedFetch(`${cfg.url}/rest/v1/module_runtime_config?select=shell_base_url&limit=1`, { method: "GET", headers: dbHeaders(cfg.key) });
135
+ const res = await timedFetch(`${cfg.url}/rest/v1/module_runtime_config?select=value&key=eq.shell_base_url&limit=1`, { method: "GET", headers: dbHeaders(cfg.key) });
74
136
  if (!res.ok)
75
137
  throw new Error(`database ${res.status}`);
76
138
  const rows = (await res.json());
77
- const value = normalizeShellBaseUrl(Array.isArray(rows) ? rows[0]?.shell_base_url : null);
139
+ const value = normalizeShellBaseUrl(Array.isArray(rows) ? rows[0]?.value : null);
78
140
  if (!value)
79
141
  warn("empty", "module_runtime_config.shell_base_url ontbreekt of is geen https-adres");
80
142
  return value;
@@ -97,9 +159,7 @@ export async function getShellBaseUrl() {
97
159
  return value;
98
160
  }
99
161
  catch (e) {
100
- warn("read", "shell-adres lezen mislukt; laatst bekende waarde gebruikt", {
101
- error: e instanceof Error ? e.message : "onbekend",
102
- });
162
+ warn("read", "shell-adres lezen mislukt; laatst bekende waarde gebruikt", errorDetail(e));
103
163
  const last = baseUrlCache?.value ?? null;
104
164
  baseUrlCache = { value: last, at: Date.now() };
105
165
  return last;
@@ -122,8 +182,8 @@ export async function applyShellBaseUrl() {
122
182
  const current = process.env.PUBLIC_BASE_URL;
123
183
  if (current && normalizeShellBaseUrl(current) !== value) {
124
184
  warn("mismatch", "PUBLIC_BASE_URL wijkt af van de database; databasewaarde gebruikt", {
125
- env: current,
126
- database: value,
185
+ env: hostOnly(current),
186
+ database: hostOnly(value),
127
187
  });
128
188
  }
129
189
  process.env.PUBLIC_BASE_URL = value;
@@ -136,39 +196,47 @@ async function rpc(cfg, name, body) {
136
196
  body: JSON.stringify(body),
137
197
  });
138
198
  }
199
+ function hostOnly(value) {
200
+ try {
201
+ return new URL(value).host;
202
+ }
203
+ catch {
204
+ return null;
205
+ }
206
+ }
139
207
  async function linkOnce() {
140
208
  const cfg = dbConfig();
141
209
  const centralUrl = process.env.CENTRAL_AUTH_URL?.replace(/\/+$/, "");
142
210
  const secret = process.env.CENTRAL_AUTH_SECRET;
143
211
  if (!cfg || !centralUrl || !secret) {
144
212
  warn("link-config", "configuratie voor de Central-koppeling ontbreekt");
145
- return;
213
+ return false;
146
214
  }
147
215
  const statusRes = await rpc(cfg, "flowselections_central_status", {});
148
216
  if (!statusRes.ok) {
149
217
  warn("link-status", "flowselections_central_status niet beschikbaar", { status: statusRes.status });
150
- return;
218
+ return false;
151
219
  }
152
220
  const raw = await statusRes.json();
153
221
  const status = (Array.isArray(raw) ? raw[0] : raw);
154
- if (!status) {
222
+ if (!status || typeof status.token_aanwezig !== "boolean") {
155
223
  warn("link-status", "flowselections_central_status gaf geen resultaat");
156
- return;
224
+ return false;
157
225
  }
158
226
  if (status.token_aanwezig !== false && status.laatste_status !== "http_401")
159
- return;
227
+ return true;
160
228
  const tokenRes = await timedFetch(`${centralUrl}/api/shell-host/read-token`, {
161
229
  method: "POST",
162
230
  headers: { Authorization: `Bearer ${secret}`, Accept: "application/json" },
163
231
  });
164
232
  if (!tokenRes.ok) {
165
233
  warn("link-token", "leessleutel ophalen bij Central mislukt", { status: tokenRes.status });
166
- return;
234
+ return false;
167
235
  }
168
236
  const { token } = (await tokenRes.json());
169
237
  if (typeof token !== "string" || !token) {
170
238
  warn("link-token", "Central gaf geen bruikbare leessleutel");
171
- return;
239
+ return false;
172
240
  }
173
241
  const setRes = await rpc(cfg, "flowselections_set_central_link", {
174
242
  p_central_url: centralUrl,
@@ -176,44 +244,213 @@ async function linkOnce() {
176
244
  });
177
245
  if (!setRes.ok) {
178
246
  warn("link-set", "flowselections_set_central_link mislukt", { status: setRes.status });
247
+ return false;
179
248
  }
249
+ return true;
180
250
  }
181
251
  /**
182
- * Hooguit eens per uur per isolate. Netwerkfout of ontbrekende RPC: niets
183
- * doen, waarschuwen, niet opnieuw tot het volgende uur.
252
+ * Na succes één uur wachten per isolate; na een fout vijf minuten.
184
253
  */
185
254
  export async function ensureCentralLink() {
186
255
  const now = Date.now();
187
256
  if (linkInflight)
188
257
  return linkInflight;
189
- if (lastLinkCheck && now - lastLinkCheck < LINK_INTERVAL_MS)
258
+ if (now < nextLinkCheck)
190
259
  return;
191
- lastLinkCheck = now;
192
260
  linkInflight = linkOnce()
261
+ .then((ok) => { nextLinkCheck = Date.now() + (ok ? LINK_INTERVAL_MS : CRON_TTL_MS); })
193
262
  .catch((e) => {
194
- warn("link-error", "Central-koppeling controleren mislukt", {
195
- error: e instanceof Error ? e.name : "onbekend",
196
- });
263
+ nextLinkCheck = Date.now() + CRON_TTL_MS;
264
+ warn("link-error", "Central-koppeling controleren mislukt", errorDetail(e));
197
265
  })
198
266
  .finally(() => {
199
267
  linkInflight = null;
200
268
  });
201
269
  return linkInflight;
202
270
  }
203
- /** Voor de globale request-middleware van de shell. Gooit nooit. */
204
- export async function runShellRuntime() {
271
+ async function cronKeysOnce() {
272
+ const cfg = dbConfig();
273
+ const raw = process.env.SUPABASE_PUBLISHABLE_KEY ?? process.env.SUPABASE_ANON_KEY;
274
+ if (!cfg || !raw) {
275
+ warn("cron-key-config", "configuratie voor cronsleutels ontbreekt");
276
+ return false;
277
+ }
278
+ const key = raw.trim().replace(/^(["'])(.*)\1$/, "$2").trim();
279
+ if (!key) {
280
+ warn("cron-key-config", "publishable key ontbreekt");
281
+ return false;
282
+ }
283
+ const res = await rpc(cfg, "flowselections_set_anon_key", { p_key: key });
284
+ if (!res.ok) {
285
+ warn("cron-key-rpc", "flowselections_set_anon_key niet beschikbaar of mislukt", { status: res.status });
286
+ return false;
287
+ }
288
+ const result = await res.json();
289
+ if (result !== "ongewijzigd" && result !== "bijgewerkt") {
290
+ warn("cron-key-result", "flowselections_set_anon_key gaf geen geldig resultaat");
291
+ return false;
292
+ }
293
+ if (result === "bijgewerkt")
294
+ console.info("[shell-runtime] cronsleutel bijgewerkt");
295
+ return true;
296
+ }
297
+ /** Synchroniseert de shell-publishable key; uur na succes, vijf minuten na fout. */
298
+ export async function ensureCronKeys() {
299
+ if (cronKeyInflight)
300
+ return cronKeyInflight;
301
+ if (Date.now() < nextCronKeyCheck)
302
+ return;
303
+ cronKeyInflight = cronKeysOnce()
304
+ .then((ok) => { nextCronKeyCheck = Date.now() + (ok ? LINK_INTERVAL_MS : CRON_TTL_MS); })
305
+ .catch((e) => {
306
+ nextCronKeyCheck = Date.now() + CRON_TTL_MS;
307
+ warn("cron-key-error", "cronsleutel synchroniseren mislukt", errorDetail(e));
308
+ })
309
+ .finally(() => { cronKeyInflight = null; });
310
+ return cronKeyInflight;
311
+ }
312
+ async function readCronConfig() {
313
+ const cfg = dbConfig();
314
+ if (!cfg) {
315
+ warn("cron-config", "databaseconfiguratie voor croncontrole ontbreekt");
316
+ return null;
317
+ }
318
+ const pathsRes = await rpc(cfg, "flowselections_cron_paths", {});
319
+ if (!pathsRes.ok) {
320
+ warn("cron-paths", "flowselections_cron_paths niet beschikbaar", { status: pathsRes.status });
321
+ return null;
322
+ }
323
+ const paths = await pathsRes.json();
324
+ if (!Array.isArray(paths) || !paths.every((p) => typeof p === "string" && p.startsWith("/"))) {
325
+ warn("cron-paths-result", "cronpaden hebben een ongeldig formaat");
326
+ return null;
327
+ }
328
+ if (!paths.length)
329
+ return { paths: [], secret: "", mode: "compat", exempt: DEFAULT_EXEMPT };
330
+ const [secretRes, configRes] = await Promise.all([
331
+ rpc(cfg, "flowselections_cron_secret", {}),
332
+ timedFetch(`${cfg.url}/rest/v1/module_runtime_config?select=key,value&key=in.(cron_auth_mode,cron_auth_exempt_paths)`, { method: "GET", headers: dbHeaders(cfg.key) }),
333
+ ]);
334
+ if (!secretRes.ok || !configRes.ok) {
335
+ warn("cron-read", "cronsleutel of cronconfiguratie niet beschikbaar", {
336
+ secretStatus: secretRes.status, configStatus: configRes.status,
337
+ });
338
+ return null;
339
+ }
340
+ const secret = await secretRes.json();
341
+ const rows = await configRes.json();
342
+ if (typeof secret !== "string" || !secret || !Array.isArray(rows)) {
343
+ warn("cron-result", "cronconfiguratie heeft een ongeldig formaat");
344
+ return null;
345
+ }
346
+ const config = new Map();
347
+ for (const row of rows) {
348
+ if (!row || typeof row !== "object" || typeof row.key !== "string" || typeof row.value !== "string") {
349
+ warn("cron-result", "cronconfiguratie heeft een ongeldig formaat");
350
+ return null;
351
+ }
352
+ config.set(row.key, row.value);
353
+ }
354
+ const mode = config.get("cron_auth_mode") ?? "compat";
355
+ if (mode !== "compat" && mode !== "afdwingen") {
356
+ warn("cron-mode", "onbekende cronmodus; controle overgeslagen");
357
+ return null;
358
+ }
359
+ const extra = (config.get("cron_auth_exempt_paths") ?? "").split(",").map((p) => p.trim()).filter(Boolean);
360
+ if (extra.some((p) => !p.startsWith("/"))) {
361
+ warn("cron-exempt", "ongeldig uitzonderingsprefix; controle overgeslagen");
362
+ return null;
363
+ }
364
+ return { paths, secret, mode, exempt: [...DEFAULT_EXEMPT, ...extra] };
365
+ }
366
+ async function getCronConfig(force = false, previous) {
367
+ if (cronInflight)
368
+ return cronInflight;
369
+ if (force && cronCache && Date.now() - cronCache.at < CRON_TTL_MS &&
370
+ (cronCache.value !== previous || cronCache.mismatchRefreshed))
371
+ return cronCache.value;
372
+ if (!force && cronCache && Date.now() - cronCache.at < CRON_TTL_MS)
373
+ return cronCache.value;
374
+ cronCache = null;
375
+ cronInflight = readCronConfig()
376
+ .catch((e) => {
377
+ warn("cron-error", "croncontrole lezen mislukt", errorDetail(e));
378
+ return null;
379
+ })
380
+ .then((value) => {
381
+ cronCache = { value, at: Date.now(), mismatchRefreshed: force };
382
+ return value;
383
+ })
384
+ .finally(() => { cronInflight = null; });
385
+ return cronInflight;
386
+ }
387
+ // Native Web Crypto verifies a fixed-size HMAC tag in constant time. No Node imports.
388
+ async function sameSecret(expected, supplied) {
389
+ comparisonKey ?? (comparisonKey = crypto.subtle.generateKey({ name: "HMAC", hash: "SHA-256" }, false, ["sign", "verify"]));
390
+ const key = await comparisonKey;
391
+ const encoder = new TextEncoder();
392
+ const tag = await crypto.subtle.sign("HMAC", key, encoder.encode(expected));
393
+ return crypto.subtle.verify("HMAC", key, tag, encoder.encode(supplied));
394
+ }
395
+ function needsCronCheck(config, pathname) {
396
+ return config.paths.includes(pathname) && !config.exempt.some((prefix) => pathname.startsWith(prefix));
397
+ }
398
+ /** Alleen geregistreerde cronpaden; alle lees-/runtimefouten laten door. */
399
+ export async function checkCronRequest(request) {
400
+ try {
401
+ const pathname = new URL(request.url).pathname;
402
+ // Permanently mixed-use routes never require a cron secret, even on DB errors.
403
+ if (DEFAULT_EXEMPT.some((prefix) => pathname.startsWith(prefix)))
404
+ return null;
405
+ let config = await getCronConfig();
406
+ if (!config || !needsCronCheck(config, pathname))
407
+ return null;
408
+ const supplied = request.headers.get("x-flowselections-cron-key");
409
+ if (supplied !== null && await sameSecret(config.secret, supplied))
410
+ return null;
411
+ if (supplied !== null) {
412
+ config = await getCronConfig(true, config);
413
+ if (!config || !needsCronCheck(config, pathname))
414
+ return null;
415
+ if (await sameSecret(config.secret, supplied))
416
+ return null;
417
+ }
418
+ if (config.mode === "afdwingen")
419
+ return new Response("Unauthorized", { status: 401 });
420
+ warn("cron-auth", "cronaanroep zonder geldige platformsleutel", {
421
+ path: pathname, reason: supplied === null ? "ontbreekt" : "wijkt af",
422
+ });
423
+ return null;
424
+ }
425
+ catch (e) {
426
+ warn("cron-check", "croncontrole mislukt; verzoek doorgelaten", errorDetail(e));
427
+ return null;
428
+ }
429
+ }
430
+ /** Zonder context hetzelfde gedrag als voorheen. Alleen bewuste cronweigering geeft 401. */
431
+ export async function runShellRuntime(ctx) {
205
432
  try {
206
- await Promise.all([applyShellBaseUrl(), ensureCentralLink()]);
433
+ await Promise.allSettled([
434
+ applyShellBaseUrl(), ensureCentralLink(), ...(ctx ? [ensureCronKeys()] : []),
435
+ ]);
436
+ if (ctx)
437
+ return await checkCronRequest(ctx.request);
207
438
  }
208
439
  catch {
209
- // helpers vangen zelf; nooit een verzoek laten falen
440
+ // Geen onbedoelde weigering bij configuratie- of runtimefouten.
210
441
  }
442
+ return null;
211
443
  }
212
444
  /** Alleen voor tests. */
213
445
  export function __resetShellRuntimeForTests() {
214
446
  baseUrlCache = null;
215
447
  baseUrlInflight = null;
216
- lastLinkCheck = 0;
448
+ nextLinkCheck = 0;
217
449
  linkInflight = null;
450
+ nextCronKeyCheck = 0;
451
+ cronKeyInflight = null;
452
+ cronCache = null;
453
+ cronInflight = null;
454
+ comparisonKey = null;
218
455
  lastWarn.clear();
219
456
  }
@@ -2,6 +2,36 @@ import type { Database } from './types.js';
2
2
  export declare const requireSupabaseAuth: import("@tanstack/start-client-core").FunctionMiddlewareAfterServer<{}, unknown, undefined, {
3
3
  supabase: import("@supabase/supabase-js").SupabaseClient<Database, "public", "public", {
4
4
  Tables: {
5
+ roles: {
6
+ Row: {
7
+ id: string;
8
+ key: string;
9
+ name: string;
10
+ is_protected: boolean;
11
+ created_at: string;
12
+ updated_at: string;
13
+ permissions_initialized: boolean;
14
+ };
15
+ Insert: {
16
+ id?: string;
17
+ key: string;
18
+ name: string;
19
+ is_protected?: boolean;
20
+ created_at?: string;
21
+ updated_at?: string;
22
+ permissions_initialized?: boolean;
23
+ };
24
+ Update: {
25
+ id?: string;
26
+ key?: string;
27
+ name?: string;
28
+ is_protected?: boolean;
29
+ created_at?: string;
30
+ updated_at?: string;
31
+ permissions_initialized?: boolean;
32
+ };
33
+ Relationships: [];
34
+ };
5
35
  bugs: {
6
36
  Row: {
7
37
  attachment_url: string | null;
@@ -1 +1 @@
1
- {"version":3,"file":"auth-middleware.d.ts","sourceRoot":"","sources":["../../src/core/supabase/auth-middleware.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth-middleware.d.ts","sourceRoot":"","sources":["../../src/core/supabase/auth-middleware.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,36 @@
1
1
  import type { Database } from './types.js';
2
2
  export declare const supabase: import("@supabase/supabase-js").SupabaseClient<Database, "public", "public", {
3
3
  Tables: {
4
+ roles: {
5
+ Row: {
6
+ id: string;
7
+ key: string;
8
+ name: string;
9
+ is_protected: boolean;
10
+ created_at: string;
11
+ updated_at: string;
12
+ permissions_initialized: boolean;
13
+ };
14
+ Insert: {
15
+ id?: string;
16
+ key: string;
17
+ name: string;
18
+ is_protected?: boolean;
19
+ created_at?: string;
20
+ updated_at?: string;
21
+ permissions_initialized?: boolean;
22
+ };
23
+ Update: {
24
+ id?: string;
25
+ key?: string;
26
+ name?: string;
27
+ is_protected?: boolean;
28
+ created_at?: string;
29
+ updated_at?: string;
30
+ permissions_initialized?: boolean;
31
+ };
32
+ Relationships: [];
33
+ };
4
34
  bugs: {
5
35
  Row: {
6
36
  attachment_url: string | null;
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/core/supabase/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/core/supabase/client.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,13 @@
1
1
  // This file is automatically generated. Do not edit it directly.
2
2
  import { createClient } from '@supabase/supabase-js';
3
+ import { capturePasswordCallback } from '../auth/password-callback.js';
3
4
  function createSupabaseClient() {
4
5
  const SUPABASE_URL = import.meta.env.VITE_SUPABASE_URL || process.env.SUPABASE_URL;
5
6
  const SUPABASE_PUBLISHABLE_KEY = import.meta.env.VITE_SUPABASE_PUBLISHABLE_KEY || process.env.SUPABASE_PUBLISHABLE_KEY;
6
7
  if (!SUPABASE_URL || !SUPABASE_PUBLISHABLE_KEY) {
7
8
  throw new Error('Missing Supabase environment variables. Ensure VITE_SUPABASE_URL and VITE_SUPABASE_PUBLISHABLE_KEY (or SUPABASE_URL/SUPABASE_PUBLISHABLE_KEY) are set.');
8
9
  }
10
+ capturePasswordCallback();
9
11
  return createClient(SUPABASE_URL, SUPABASE_PUBLISHABLE_KEY, {
10
12
  auth: {
11
13
  storage: typeof window !== 'undefined' ? window.localStorage : undefined,
@@ -1,6 +1,36 @@
1
1
  import type { Database } from './types.js';
2
2
  export declare const supabaseAdmin: import("@supabase/supabase-js").SupabaseClient<Database, "public", "public", {
3
3
  Tables: {
4
+ roles: {
5
+ Row: {
6
+ id: string;
7
+ key: string;
8
+ name: string;
9
+ is_protected: boolean;
10
+ created_at: string;
11
+ updated_at: string;
12
+ permissions_initialized: boolean;
13
+ };
14
+ Insert: {
15
+ id?: string;
16
+ key: string;
17
+ name: string;
18
+ is_protected?: boolean;
19
+ created_at?: string;
20
+ updated_at?: string;
21
+ permissions_initialized?: boolean;
22
+ };
23
+ Update: {
24
+ id?: string;
25
+ key?: string;
26
+ name?: string;
27
+ is_protected?: boolean;
28
+ created_at?: string;
29
+ updated_at?: string;
30
+ permissions_initialized?: boolean;
31
+ };
32
+ Relationships: [];
33
+ };
4
34
  bugs: {
5
35
  Row: {
6
36
  attachment_url: string | null;
@@ -1 +1 @@
1
- {"version":3,"file":"client.server.d.ts","sourceRoot":"","sources":["../../src/core/supabase/client.server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.server.d.ts","sourceRoot":"","sources":["../../src/core/supabase/client.server.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,36 @@ export type Database = {
7
7
  };
8
8
  public: {
9
9
  Tables: {
10
+ roles: {
11
+ Row: {
12
+ id: string;
13
+ key: string;
14
+ name: string;
15
+ is_protected: boolean;
16
+ created_at: string;
17
+ updated_at: string;
18
+ permissions_initialized: boolean;
19
+ };
20
+ Insert: {
21
+ id?: string;
22
+ key: string;
23
+ name: string;
24
+ is_protected?: boolean;
25
+ created_at?: string;
26
+ updated_at?: string;
27
+ permissions_initialized?: boolean;
28
+ };
29
+ Update: {
30
+ id?: string;
31
+ key?: string;
32
+ name?: string;
33
+ is_protected?: boolean;
34
+ created_at?: string;
35
+ updated_at?: string;
36
+ permissions_initialized?: boolean;
37
+ };
38
+ Relationships: [];
39
+ };
10
40
  bugs: {
11
41
  Row: {
12
42
  attachment_url: string | null;