@facilis.dev/auth 0.0.0-stage → 0.1.1

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 (73) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +18 -2
  3. package/dist/api-clients.d.ts +71 -0
  4. package/dist/api-clients.js +186 -0
  5. package/dist/crypto.d.ts +31 -0
  6. package/dist/crypto.js +76 -0
  7. package/dist/email-verification.d.ts +45 -0
  8. package/dist/email-verification.js +72 -0
  9. package/dist/email.d.ts +7 -0
  10. package/dist/email.js +9 -0
  11. package/dist/index.d.ts +12 -0
  12. package/dist/index.js +12 -0
  13. package/dist/password.d.ts +7 -0
  14. package/dist/password.js +54 -0
  15. package/dist/roles.d.ts +40 -0
  16. package/dist/roles.js +46 -0
  17. package/dist/seed.d.ts +28 -0
  18. package/dist/seed.js +115 -0
  19. package/dist/session.d.ts +66 -0
  20. package/dist/session.js +161 -0
  21. package/dist/sso/contracts.d.ts +52 -0
  22. package/dist/sso/contracts.js +8 -0
  23. package/dist/sso/errors.d.ts +22 -0
  24. package/dist/sso/errors.js +45 -0
  25. package/dist/sso/identity.d.ts +41 -0
  26. package/dist/sso/identity.js +162 -0
  27. package/dist/sso/index.d.ts +27 -0
  28. package/dist/sso/index.js +16 -0
  29. package/dist/sso/login.d.ts +60 -0
  30. package/dist/sso/login.js +209 -0
  31. package/dist/sso/oauth2.d.ts +52 -0
  32. package/dist/sso/oauth2.js +180 -0
  33. package/dist/sso/oidc.d.ts +60 -0
  34. package/dist/sso/oidc.js +201 -0
  35. package/dist/sso/paths.d.ts +14 -0
  36. package/dist/sso/paths.js +17 -0
  37. package/dist/sso/pkce.d.ts +6 -0
  38. package/dist/sso/pkce.js +21 -0
  39. package/dist/sso/providers.d.ts +100 -0
  40. package/dist/sso/providers.js +70 -0
  41. package/dist/sso/saml.d.ts +44 -0
  42. package/dist/sso/saml.js +159 -0
  43. package/dist/sso/state.d.ts +34 -0
  44. package/dist/sso/state.js +91 -0
  45. package/dist/sso/tables.d.ts +306 -0
  46. package/dist/sso/tables.js +59 -0
  47. package/dist/tables.d.ts +769 -0
  48. package/dist/tables.js +148 -0
  49. package/package.json +45 -4
  50. package/src/api-clients.ts +261 -0
  51. package/src/crypto.ts +101 -0
  52. package/src/email-verification.ts +107 -0
  53. package/src/email.ts +9 -0
  54. package/src/index.ts +63 -0
  55. package/src/password.ts +74 -0
  56. package/src/roles.ts +77 -0
  57. package/src/seed.ts +146 -0
  58. package/src/session.ts +209 -0
  59. package/src/sso/contracts.ts +71 -0
  60. package/src/sso/errors.ts +53 -0
  61. package/src/sso/identity.ts +220 -0
  62. package/src/sso/index.ts +105 -0
  63. package/src/sso/login.ts +296 -0
  64. package/src/sso/oauth2.ts +235 -0
  65. package/src/sso/oidc.ts +285 -0
  66. package/src/sso/paths.ts +21 -0
  67. package/src/sso/pkce.ts +30 -0
  68. package/src/sso/providers.ts +176 -0
  69. package/src/sso/saml.ts +222 -0
  70. package/src/sso/state.ts +114 -0
  71. package/src/sso/tables.ts +77 -0
  72. package/src/tables.ts +214 -0
  73. package/src/test-support.ts +149 -0
@@ -0,0 +1,769 @@
1
+ import { type PgColumn } from "drizzle-orm/pg-core";
2
+ /**
3
+ * Auth tables (SPEC §5.3). Access is two-class (D-136): a table with RLS is reachable by the
4
+ * app role under its policies; a table without RLS is system-only (`facilis_app` has no
5
+ * privilege on it, only the audited system identity can read or write it).
6
+ *
7
+ * `role_permissions` and `roles` are the system-only pair: `role_permissions` is a
8
+ * projection of facilis.config.ts, written only by migrations/seed and never read at runtime
9
+ * (permissions come from the config through `expandRoles`). `sessions` and `user_roles` are
10
+ * app-reachable, so they carry an RLS policy that inherits the parent `users` row's
11
+ * visibility instead of restating tenant isolation.
12
+ *
13
+ * Users carry both policies: restrictive tenant isolation (D-008) AND-ed with a permissive
14
+ * "tenant scope present" policy, since Postgres denies by default when no permissive policy
15
+ * applies. Net effect: non-superusers only reach users of the tenant in `app.tenant_id`.
16
+ */
17
+ export declare const users: Omit<import("drizzle-orm/pg-core").PgTableWithColumns<{
18
+ name: "users";
19
+ schema: undefined;
20
+ columns: {
21
+ id: PgColumn<{
22
+ name: "id";
23
+ tableName: "users";
24
+ dataType: "string";
25
+ columnType: "PgUUID";
26
+ data: string;
27
+ driverParam: string;
28
+ notNull: true;
29
+ hasDefault: true;
30
+ isPrimaryKey: true;
31
+ isAutoincrement: false;
32
+ hasRuntimeDefault: false;
33
+ enumValues: undefined;
34
+ baseColumn: never;
35
+ identity: undefined;
36
+ generated: undefined;
37
+ }, {}, {}>;
38
+ email: PgColumn<{
39
+ name: "email";
40
+ tableName: "users";
41
+ dataType: "string";
42
+ columnType: "PgText";
43
+ data: string;
44
+ driverParam: string;
45
+ notNull: true;
46
+ hasDefault: false;
47
+ isPrimaryKey: false;
48
+ isAutoincrement: false;
49
+ hasRuntimeDefault: false;
50
+ enumValues: [string, ...string[]];
51
+ baseColumn: never;
52
+ identity: undefined;
53
+ generated: undefined;
54
+ }, {}, {}>;
55
+ tenantId: PgColumn<{
56
+ name: string;
57
+ tableName: "users";
58
+ dataType: "string";
59
+ columnType: "PgUUID";
60
+ data: string;
61
+ driverParam: string;
62
+ notNull: true;
63
+ hasDefault: true;
64
+ isPrimaryKey: false;
65
+ isAutoincrement: false;
66
+ hasRuntimeDefault: false;
67
+ enumValues: undefined;
68
+ baseColumn: never;
69
+ identity: undefined;
70
+ generated: undefined;
71
+ }, {}, {}>;
72
+ passwordHash: PgColumn<{
73
+ name: "password_hash";
74
+ tableName: "users";
75
+ dataType: "string";
76
+ columnType: "PgText";
77
+ data: string;
78
+ driverParam: string;
79
+ notNull: false;
80
+ hasDefault: false;
81
+ isPrimaryKey: false;
82
+ isAutoincrement: false;
83
+ hasRuntimeDefault: false;
84
+ enumValues: [string, ...string[]];
85
+ baseColumn: never;
86
+ identity: undefined;
87
+ generated: undefined;
88
+ }, {}, {}>;
89
+ isService: PgColumn<{
90
+ name: "is_service";
91
+ tableName: "users";
92
+ dataType: "boolean";
93
+ columnType: "PgBoolean";
94
+ data: boolean;
95
+ driverParam: boolean;
96
+ notNull: true;
97
+ hasDefault: true;
98
+ isPrimaryKey: false;
99
+ isAutoincrement: false;
100
+ hasRuntimeDefault: false;
101
+ enumValues: undefined;
102
+ baseColumn: never;
103
+ identity: undefined;
104
+ generated: undefined;
105
+ }, {}, {}>;
106
+ emailVerifiedAt: PgColumn<{
107
+ name: "email_verified_at";
108
+ tableName: "users";
109
+ dataType: "date";
110
+ columnType: "PgTimestamp";
111
+ data: Date;
112
+ driverParam: string;
113
+ notNull: false;
114
+ hasDefault: false;
115
+ isPrimaryKey: false;
116
+ isAutoincrement: false;
117
+ hasRuntimeDefault: false;
118
+ enumValues: undefined;
119
+ baseColumn: never;
120
+ identity: undefined;
121
+ generated: undefined;
122
+ }, {}, {}>;
123
+ createdAt: PgColumn<{
124
+ name: "created_at";
125
+ tableName: "users";
126
+ dataType: "date";
127
+ columnType: "PgTimestamp";
128
+ data: Date;
129
+ driverParam: string;
130
+ notNull: false;
131
+ hasDefault: true;
132
+ isPrimaryKey: false;
133
+ isAutoincrement: false;
134
+ hasRuntimeDefault: false;
135
+ enumValues: undefined;
136
+ baseColumn: never;
137
+ identity: undefined;
138
+ generated: undefined;
139
+ }, {}, {}>;
140
+ };
141
+ dialect: 'pg';
142
+ }>, "enableRLS">;
143
+ export declare const authEmailVerifications: Omit<import("drizzle-orm/pg-core").PgTableWithColumns<{
144
+ name: "auth_email_verifications";
145
+ schema: undefined;
146
+ columns: {
147
+ id: PgColumn<{
148
+ name: "id";
149
+ tableName: "auth_email_verifications";
150
+ dataType: "string";
151
+ columnType: "PgText";
152
+ data: string;
153
+ driverParam: string;
154
+ notNull: true;
155
+ hasDefault: false;
156
+ isPrimaryKey: true;
157
+ isAutoincrement: false;
158
+ hasRuntimeDefault: false;
159
+ enumValues: [string, ...string[]];
160
+ baseColumn: never;
161
+ identity: undefined;
162
+ generated: undefined;
163
+ }, {}, {}>;
164
+ userId: PgColumn<{
165
+ name: "user_id";
166
+ tableName: "auth_email_verifications";
167
+ dataType: "string";
168
+ columnType: "PgUUID";
169
+ data: string;
170
+ driverParam: string;
171
+ notNull: true;
172
+ hasDefault: false;
173
+ isPrimaryKey: false;
174
+ isAutoincrement: false;
175
+ hasRuntimeDefault: false;
176
+ enumValues: undefined;
177
+ baseColumn: never;
178
+ identity: undefined;
179
+ generated: undefined;
180
+ }, {}, {}>;
181
+ createdAt: PgColumn<{
182
+ name: "created_at";
183
+ tableName: "auth_email_verifications";
184
+ dataType: "date";
185
+ columnType: "PgTimestamp";
186
+ data: Date;
187
+ driverParam: string;
188
+ notNull: true;
189
+ hasDefault: true;
190
+ isPrimaryKey: false;
191
+ isAutoincrement: false;
192
+ hasRuntimeDefault: false;
193
+ enumValues: undefined;
194
+ baseColumn: never;
195
+ identity: undefined;
196
+ generated: undefined;
197
+ }, {}, {}>;
198
+ expiresAt: PgColumn<{
199
+ name: "expires_at";
200
+ tableName: "auth_email_verifications";
201
+ dataType: "date";
202
+ columnType: "PgTimestamp";
203
+ data: Date;
204
+ driverParam: string;
205
+ notNull: true;
206
+ hasDefault: false;
207
+ isPrimaryKey: false;
208
+ isAutoincrement: false;
209
+ hasRuntimeDefault: false;
210
+ enumValues: undefined;
211
+ baseColumn: never;
212
+ identity: undefined;
213
+ generated: undefined;
214
+ }, {}, {}>;
215
+ tenantId: PgColumn<{
216
+ name: string;
217
+ tableName: "auth_email_verifications";
218
+ dataType: "string";
219
+ columnType: "PgUUID";
220
+ data: string;
221
+ driverParam: string;
222
+ notNull: true;
223
+ hasDefault: true;
224
+ isPrimaryKey: false;
225
+ isAutoincrement: false;
226
+ hasRuntimeDefault: false;
227
+ enumValues: undefined;
228
+ baseColumn: never;
229
+ identity: undefined;
230
+ generated: undefined;
231
+ }, {}, {}>;
232
+ };
233
+ dialect: 'pg';
234
+ }>, "enableRLS">;
235
+ export declare const sessions: Omit<import("drizzle-orm/pg-core").PgTableWithColumns<{
236
+ name: "sessions";
237
+ schema: undefined;
238
+ columns: {
239
+ id: PgColumn<{
240
+ name: "id";
241
+ tableName: "sessions";
242
+ dataType: "string";
243
+ columnType: "PgText";
244
+ data: string;
245
+ driverParam: string;
246
+ notNull: true;
247
+ hasDefault: false;
248
+ isPrimaryKey: true;
249
+ isAutoincrement: false;
250
+ hasRuntimeDefault: false;
251
+ enumValues: [string, ...string[]];
252
+ baseColumn: never;
253
+ identity: undefined;
254
+ generated: undefined;
255
+ }, {}, {}>;
256
+ userId: PgColumn<{
257
+ name: "user_id";
258
+ tableName: "sessions";
259
+ dataType: "string";
260
+ columnType: "PgUUID";
261
+ data: string;
262
+ driverParam: string;
263
+ notNull: true;
264
+ hasDefault: false;
265
+ isPrimaryKey: false;
266
+ isAutoincrement: false;
267
+ hasRuntimeDefault: false;
268
+ enumValues: undefined;
269
+ baseColumn: never;
270
+ identity: undefined;
271
+ generated: undefined;
272
+ }, {}, {}>;
273
+ expiresAt: PgColumn<{
274
+ name: "expires_at";
275
+ tableName: "sessions";
276
+ dataType: "date";
277
+ columnType: "PgTimestamp";
278
+ data: Date;
279
+ driverParam: string;
280
+ notNull: true;
281
+ hasDefault: false;
282
+ isPrimaryKey: false;
283
+ isAutoincrement: false;
284
+ hasRuntimeDefault: false;
285
+ enumValues: undefined;
286
+ baseColumn: never;
287
+ identity: undefined;
288
+ generated: undefined;
289
+ }, {}, {}>;
290
+ };
291
+ dialect: 'pg';
292
+ }>, "enableRLS">;
293
+ export declare const roles: import("drizzle-orm/pg-core").PgTableWithColumns<{
294
+ name: "roles";
295
+ schema: undefined;
296
+ columns: {
297
+ name: PgColumn<{
298
+ name: "name";
299
+ tableName: "roles";
300
+ dataType: "string";
301
+ columnType: "PgText";
302
+ data: string;
303
+ driverParam: string;
304
+ notNull: true;
305
+ hasDefault: false;
306
+ isPrimaryKey: true;
307
+ isAutoincrement: false;
308
+ hasRuntimeDefault: false;
309
+ enumValues: [string, ...string[]];
310
+ baseColumn: never;
311
+ identity: undefined;
312
+ generated: undefined;
313
+ }, {}, {}>;
314
+ };
315
+ dialect: 'pg';
316
+ }>;
317
+ export declare const rolePermissions: import("drizzle-orm/pg-core").PgTableWithColumns<{
318
+ name: "role_permissions";
319
+ schema: undefined;
320
+ columns: {
321
+ role: PgColumn<{
322
+ name: "role";
323
+ tableName: "role_permissions";
324
+ dataType: "string";
325
+ columnType: "PgText";
326
+ data: string;
327
+ driverParam: string;
328
+ notNull: true;
329
+ hasDefault: false;
330
+ isPrimaryKey: false;
331
+ isAutoincrement: false;
332
+ hasRuntimeDefault: false;
333
+ enumValues: [string, ...string[]];
334
+ baseColumn: never;
335
+ identity: undefined;
336
+ generated: undefined;
337
+ }, {}, {}>;
338
+ permission: PgColumn<{
339
+ name: "permission";
340
+ tableName: "role_permissions";
341
+ dataType: "string";
342
+ columnType: "PgText";
343
+ data: string;
344
+ driverParam: string;
345
+ notNull: true;
346
+ hasDefault: false;
347
+ isPrimaryKey: false;
348
+ isAutoincrement: false;
349
+ hasRuntimeDefault: false;
350
+ enumValues: [string, ...string[]];
351
+ baseColumn: never;
352
+ identity: undefined;
353
+ generated: undefined;
354
+ }, {}, {}>;
355
+ };
356
+ dialect: 'pg';
357
+ }>;
358
+ export declare const userRoles: Omit<import("drizzle-orm/pg-core").PgTableWithColumns<{
359
+ name: "user_roles";
360
+ schema: undefined;
361
+ columns: {
362
+ userId: PgColumn<{
363
+ name: "user_id";
364
+ tableName: "user_roles";
365
+ dataType: "string";
366
+ columnType: "PgUUID";
367
+ data: string;
368
+ driverParam: string;
369
+ notNull: true;
370
+ hasDefault: false;
371
+ isPrimaryKey: false;
372
+ isAutoincrement: false;
373
+ hasRuntimeDefault: false;
374
+ enumValues: undefined;
375
+ baseColumn: never;
376
+ identity: undefined;
377
+ generated: undefined;
378
+ }, {}, {}>;
379
+ role: PgColumn<{
380
+ name: "role";
381
+ tableName: "user_roles";
382
+ dataType: "string";
383
+ columnType: "PgText";
384
+ data: string;
385
+ driverParam: string;
386
+ notNull: true;
387
+ hasDefault: false;
388
+ isPrimaryKey: false;
389
+ isAutoincrement: false;
390
+ hasRuntimeDefault: false;
391
+ enumValues: [string, ...string[]];
392
+ baseColumn: never;
393
+ identity: undefined;
394
+ generated: undefined;
395
+ }, {}, {}>;
396
+ assignedBy: PgColumn<{
397
+ name: "assigned_by";
398
+ tableName: "user_roles";
399
+ dataType: "string";
400
+ columnType: "PgUUID";
401
+ data: string;
402
+ driverParam: string;
403
+ notNull: false;
404
+ hasDefault: false;
405
+ isPrimaryKey: false;
406
+ isAutoincrement: false;
407
+ hasRuntimeDefault: false;
408
+ enumValues: undefined;
409
+ baseColumn: never;
410
+ identity: undefined;
411
+ generated: undefined;
412
+ }, {}, {}>;
413
+ assignedAt: PgColumn<{
414
+ name: "assigned_at";
415
+ tableName: "user_roles";
416
+ dataType: "date";
417
+ columnType: "PgTimestamp";
418
+ data: Date;
419
+ driverParam: string;
420
+ notNull: false;
421
+ hasDefault: true;
422
+ isPrimaryKey: false;
423
+ isAutoincrement: false;
424
+ hasRuntimeDefault: false;
425
+ enumValues: undefined;
426
+ baseColumn: never;
427
+ identity: undefined;
428
+ generated: undefined;
429
+ }, {}, {}>;
430
+ };
431
+ dialect: 'pg';
432
+ }>, "enableRLS">;
433
+ /**
434
+ * Programmatic API clients (V3a). A client is a service user plus a hashed secret and a fixed
435
+ * role; both new tables are app-scoped through the parent user (D-136), so the RLS boundary
436
+ * stays the `users` table and a client row is reachable exactly when its service user is.
437
+ */
438
+ export declare const apiClients: Omit<import("drizzle-orm/pg-core").PgTableWithColumns<{
439
+ name: "api_clients";
440
+ schema: undefined;
441
+ columns: {
442
+ id: PgColumn<{
443
+ name: "id";
444
+ tableName: "api_clients";
445
+ dataType: "string";
446
+ columnType: "PgUUID";
447
+ data: string;
448
+ driverParam: string;
449
+ notNull: true;
450
+ hasDefault: true;
451
+ isPrimaryKey: true;
452
+ isAutoincrement: false;
453
+ hasRuntimeDefault: false;
454
+ enumValues: undefined;
455
+ baseColumn: never;
456
+ identity: undefined;
457
+ generated: undefined;
458
+ }, {}, {}>;
459
+ clientId: PgColumn<{
460
+ name: "client_id";
461
+ tableName: "api_clients";
462
+ dataType: "string";
463
+ columnType: "PgText";
464
+ data: string;
465
+ driverParam: string;
466
+ notNull: true;
467
+ hasDefault: false;
468
+ isPrimaryKey: false;
469
+ isAutoincrement: false;
470
+ hasRuntimeDefault: false;
471
+ enumValues: [string, ...string[]];
472
+ baseColumn: never;
473
+ identity: undefined;
474
+ generated: undefined;
475
+ }, {}, {}>;
476
+ secretHash: PgColumn<{
477
+ name: "secret_hash";
478
+ tableName: "api_clients";
479
+ dataType: "string";
480
+ columnType: "PgText";
481
+ data: string;
482
+ driverParam: string;
483
+ notNull: true;
484
+ hasDefault: false;
485
+ isPrimaryKey: false;
486
+ isAutoincrement: false;
487
+ hasRuntimeDefault: false;
488
+ enumValues: [string, ...string[]];
489
+ baseColumn: never;
490
+ identity: undefined;
491
+ generated: undefined;
492
+ }, {}, {}>;
493
+ name: PgColumn<{
494
+ name: "name";
495
+ tableName: "api_clients";
496
+ dataType: "string";
497
+ columnType: "PgText";
498
+ data: string;
499
+ driverParam: string;
500
+ notNull: true;
501
+ hasDefault: false;
502
+ isPrimaryKey: false;
503
+ isAutoincrement: false;
504
+ hasRuntimeDefault: false;
505
+ enumValues: [string, ...string[]];
506
+ baseColumn: never;
507
+ identity: undefined;
508
+ generated: undefined;
509
+ }, {}, {}>;
510
+ role: PgColumn<{
511
+ name: "role";
512
+ tableName: "api_clients";
513
+ dataType: "string";
514
+ columnType: "PgText";
515
+ data: string;
516
+ driverParam: string;
517
+ notNull: true;
518
+ hasDefault: false;
519
+ isPrimaryKey: false;
520
+ isAutoincrement: false;
521
+ hasRuntimeDefault: false;
522
+ enumValues: [string, ...string[]];
523
+ baseColumn: never;
524
+ identity: undefined;
525
+ generated: undefined;
526
+ }, {}, {}>;
527
+ userId: PgColumn<{
528
+ name: "user_id";
529
+ tableName: "api_clients";
530
+ dataType: "string";
531
+ columnType: "PgUUID";
532
+ data: string;
533
+ driverParam: string;
534
+ notNull: true;
535
+ hasDefault: false;
536
+ isPrimaryKey: false;
537
+ isAutoincrement: false;
538
+ hasRuntimeDefault: false;
539
+ enumValues: undefined;
540
+ baseColumn: never;
541
+ identity: undefined;
542
+ generated: undefined;
543
+ }, {}, {}>;
544
+ createdBy: PgColumn<{
545
+ name: "created_by";
546
+ tableName: "api_clients";
547
+ dataType: "string";
548
+ columnType: "PgUUID";
549
+ data: string;
550
+ driverParam: string;
551
+ notNull: false;
552
+ hasDefault: false;
553
+ isPrimaryKey: false;
554
+ isAutoincrement: false;
555
+ hasRuntimeDefault: false;
556
+ enumValues: undefined;
557
+ baseColumn: never;
558
+ identity: undefined;
559
+ generated: undefined;
560
+ }, {}, {}>;
561
+ createdAt: PgColumn<{
562
+ name: "created_at";
563
+ tableName: "api_clients";
564
+ dataType: "date";
565
+ columnType: "PgTimestamp";
566
+ data: Date;
567
+ driverParam: string;
568
+ notNull: false;
569
+ hasDefault: true;
570
+ isPrimaryKey: false;
571
+ isAutoincrement: false;
572
+ hasRuntimeDefault: false;
573
+ enumValues: undefined;
574
+ baseColumn: never;
575
+ identity: undefined;
576
+ generated: undefined;
577
+ }, {}, {}>;
578
+ revokedAt: PgColumn<{
579
+ name: "revoked_at";
580
+ tableName: "api_clients";
581
+ dataType: "date";
582
+ columnType: "PgTimestamp";
583
+ data: Date;
584
+ driverParam: string;
585
+ notNull: false;
586
+ hasDefault: false;
587
+ isPrimaryKey: false;
588
+ isAutoincrement: false;
589
+ hasRuntimeDefault: false;
590
+ enumValues: undefined;
591
+ baseColumn: never;
592
+ identity: undefined;
593
+ generated: undefined;
594
+ }, {}, {}>;
595
+ lastUsedAt: PgColumn<{
596
+ name: "last_used_at";
597
+ tableName: "api_clients";
598
+ dataType: "date";
599
+ columnType: "PgTimestamp";
600
+ data: Date;
601
+ driverParam: string;
602
+ notNull: false;
603
+ hasDefault: false;
604
+ isPrimaryKey: false;
605
+ isAutoincrement: false;
606
+ hasRuntimeDefault: false;
607
+ enumValues: undefined;
608
+ baseColumn: never;
609
+ identity: undefined;
610
+ generated: undefined;
611
+ }, {}, {}>;
612
+ };
613
+ dialect: 'pg';
614
+ }>, "enableRLS">;
615
+ export declare const apiTokens: Omit<import("drizzle-orm/pg-core").PgTableWithColumns<{
616
+ name: "api_tokens";
617
+ schema: undefined;
618
+ columns: {
619
+ id: PgColumn<{
620
+ name: "id";
621
+ tableName: "api_tokens";
622
+ dataType: "string";
623
+ columnType: "PgUUID";
624
+ data: string;
625
+ driverParam: string;
626
+ notNull: true;
627
+ hasDefault: true;
628
+ isPrimaryKey: true;
629
+ isAutoincrement: false;
630
+ hasRuntimeDefault: false;
631
+ enumValues: undefined;
632
+ baseColumn: never;
633
+ identity: undefined;
634
+ generated: undefined;
635
+ }, {}, {}>;
636
+ tokenHash: PgColumn<{
637
+ name: "token_hash";
638
+ tableName: "api_tokens";
639
+ dataType: "string";
640
+ columnType: "PgText";
641
+ data: string;
642
+ driverParam: string;
643
+ notNull: true;
644
+ hasDefault: false;
645
+ isPrimaryKey: false;
646
+ isAutoincrement: false;
647
+ hasRuntimeDefault: false;
648
+ enumValues: [string, ...string[]];
649
+ baseColumn: never;
650
+ identity: undefined;
651
+ generated: undefined;
652
+ }, {}, {}>;
653
+ clientId: PgColumn<{
654
+ name: "client_id";
655
+ tableName: "api_tokens";
656
+ dataType: "string";
657
+ columnType: "PgUUID";
658
+ data: string;
659
+ driverParam: string;
660
+ notNull: true;
661
+ hasDefault: false;
662
+ isPrimaryKey: false;
663
+ isAutoincrement: false;
664
+ hasRuntimeDefault: false;
665
+ enumValues: undefined;
666
+ baseColumn: never;
667
+ identity: undefined;
668
+ generated: undefined;
669
+ }, {}, {}>;
670
+ userId: PgColumn<{
671
+ name: "user_id";
672
+ tableName: "api_tokens";
673
+ dataType: "string";
674
+ columnType: "PgUUID";
675
+ data: string;
676
+ driverParam: string;
677
+ notNull: true;
678
+ hasDefault: false;
679
+ isPrimaryKey: false;
680
+ isAutoincrement: false;
681
+ hasRuntimeDefault: false;
682
+ enumValues: undefined;
683
+ baseColumn: never;
684
+ identity: undefined;
685
+ generated: undefined;
686
+ }, {}, {}>;
687
+ expiresAt: PgColumn<{
688
+ name: "expires_at";
689
+ tableName: "api_tokens";
690
+ dataType: "date";
691
+ columnType: "PgTimestamp";
692
+ data: Date;
693
+ driverParam: string;
694
+ notNull: true;
695
+ hasDefault: false;
696
+ isPrimaryKey: false;
697
+ isAutoincrement: false;
698
+ hasRuntimeDefault: false;
699
+ enumValues: undefined;
700
+ baseColumn: never;
701
+ identity: undefined;
702
+ generated: undefined;
703
+ }, {}, {}>;
704
+ createdAt: PgColumn<{
705
+ name: "created_at";
706
+ tableName: "api_tokens";
707
+ dataType: "date";
708
+ columnType: "PgTimestamp";
709
+ data: Date;
710
+ driverParam: string;
711
+ notNull: false;
712
+ hasDefault: true;
713
+ isPrimaryKey: false;
714
+ isAutoincrement: false;
715
+ hasRuntimeDefault: false;
716
+ enumValues: undefined;
717
+ baseColumn: never;
718
+ identity: undefined;
719
+ generated: undefined;
720
+ }, {}, {}>;
721
+ revokedAt: PgColumn<{
722
+ name: "revoked_at";
723
+ tableName: "api_tokens";
724
+ dataType: "date";
725
+ columnType: "PgTimestamp";
726
+ data: Date;
727
+ driverParam: string;
728
+ notNull: false;
729
+ hasDefault: false;
730
+ isPrimaryKey: false;
731
+ isAutoincrement: false;
732
+ hasRuntimeDefault: false;
733
+ enumValues: undefined;
734
+ baseColumn: never;
735
+ identity: undefined;
736
+ generated: undefined;
737
+ }, {}, {}>;
738
+ lastUsedAt: PgColumn<{
739
+ name: "last_used_at";
740
+ tableName: "api_tokens";
741
+ dataType: "date";
742
+ columnType: "PgTimestamp";
743
+ data: Date;
744
+ driverParam: string;
745
+ notNull: false;
746
+ hasDefault: false;
747
+ isPrimaryKey: false;
748
+ isAutoincrement: false;
749
+ hasRuntimeDefault: false;
750
+ enumValues: undefined;
751
+ baseColumn: never;
752
+ identity: undefined;
753
+ generated: undefined;
754
+ }, {}, {}>;
755
+ };
756
+ dialect: 'pg';
757
+ }>, "enableRLS">;
758
+ export type UserRow = typeof users.$inferSelect;
759
+ export type NewUserRow = typeof users.$inferInsert;
760
+ export type SessionRow = typeof sessions.$inferSelect;
761
+ export type RoleRow = typeof roles.$inferSelect;
762
+ export type RolePermissionRow = typeof rolePermissions.$inferSelect;
763
+ export type UserRoleRow = typeof userRoles.$inferSelect;
764
+ export type ApiClientRow = typeof apiClients.$inferSelect;
765
+ export type ApiTokenRow = typeof apiTokens.$inferSelect;
766
+ export type EmailVerificationRow = typeof authEmailVerifications.$inferSelect;
767
+ export type NewEmailVerificationRow = typeof authEmailVerifications.$inferInsert;
768
+ /** Public projection of a user row: the password hash never leaves @facilis.dev/auth. */
769
+ export type AuthUser = Pick<UserRow, "id" | "email" | "tenantId" | "createdAt">;