@shipfox/api-auth 9.1.0 → 9.3.0

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 (136) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/CHANGELOG.md +41 -0
  3. package/README.md +44 -2
  4. package/dist/config.d.ts +5 -0
  5. package/dist/config.d.ts.map +1 -1
  6. package/dist/config.js +26 -0
  7. package/dist/config.js.map +1 -1
  8. package/dist/core/admin-role-model.d.ts +5 -0
  9. package/dist/core/admin-role-model.d.ts.map +1 -0
  10. package/dist/core/admin-role-model.js +18 -0
  11. package/dist/core/admin-role-model.js.map +1 -0
  12. package/dist/core/admin-role.d.ts +13 -0
  13. package/dist/core/admin-role.d.ts.map +1 -0
  14. package/dist/core/admin-role.js +21 -0
  15. package/dist/core/admin-role.js.map +1 -0
  16. package/dist/core/administration.d.ts +27 -0
  17. package/dist/core/administration.d.ts.map +1 -0
  18. package/dist/core/administration.js +122 -0
  19. package/dist/core/administration.js.map +1 -0
  20. package/dist/core/auth.d.ts +9 -0
  21. package/dist/core/auth.d.ts.map +1 -1
  22. package/dist/core/auth.js +68 -20
  23. package/dist/core/auth.js.map +1 -1
  24. package/dist/core/entities/admin-grant.d.ts +10 -0
  25. package/dist/core/entities/admin-grant.d.ts.map +1 -0
  26. package/dist/core/entities/admin-grant.js +3 -0
  27. package/dist/core/entities/admin-grant.js.map +1 -0
  28. package/dist/core/errors.d.ts +25 -0
  29. package/dist/core/errors.d.ts.map +1 -1
  30. package/dist/core/errors.js +49 -0
  31. package/dist/core/errors.js.map +1 -1
  32. package/dist/core/ports.d.ts +13 -0
  33. package/dist/core/ports.d.ts.map +1 -0
  34. package/dist/core/ports.js +3 -0
  35. package/dist/core/ports.js.map +1 -0
  36. package/dist/core/signup-policy.d.ts +10 -0
  37. package/dist/core/signup-policy.d.ts.map +1 -0
  38. package/dist/core/signup-policy.js +39 -0
  39. package/dist/core/signup-policy.js.map +1 -0
  40. package/dist/db/admin-grants.d.ts +33 -0
  41. package/dist/db/admin-grants.d.ts.map +1 -0
  42. package/dist/db/admin-grants.js +193 -0
  43. package/dist/db/admin-grants.js.map +1 -0
  44. package/dist/db/db.d.ts +474 -0
  45. package/dist/db/db.d.ts.map +1 -1
  46. package/dist/db/db.js +4 -0
  47. package/dist/db/db.js.map +1 -1
  48. package/dist/db/schema/admin-command-results.d.ts +142 -0
  49. package/dist/db/schema/admin-command-results.d.ts.map +1 -0
  50. package/dist/db/schema/admin-command-results.js +21 -0
  51. package/dist/db/schema/admin-command-results.js.map +1 -0
  52. package/dist/db/schema/admin-grants.d.ts +115 -0
  53. package/dist/db/schema/admin-grants.d.ts.map +1 -0
  54. package/dist/db/schema/admin-grants.js +42 -0
  55. package/dist/db/schema/admin-grants.js.map +1 -0
  56. package/dist/index.d.ts +12 -4
  57. package/dist/index.d.ts.map +1 -1
  58. package/dist/index.js +15 -4
  59. package/dist/index.js.map +1 -1
  60. package/dist/metrics/instance.d.ts +1 -1
  61. package/dist/metrics/instance.d.ts.map +1 -1
  62. package/dist/metrics/instance.js.map +1 -1
  63. package/dist/presentation/dto/user.d.ts +2 -1
  64. package/dist/presentation/dto/user.d.ts.map +1 -1
  65. package/dist/presentation/dto/user.js +2 -1
  66. package/dist/presentation/dto/user.js.map +1 -1
  67. package/dist/presentation/inter-module.d.ts.map +1 -1
  68. package/dist/presentation/inter-module.js +26 -2
  69. package/dist/presentation/inter-module.js.map +1 -1
  70. package/dist/presentation/routes/administration.d.ts +3 -0
  71. package/dist/presentation/routes/administration.d.ts.map +1 -0
  72. package/dist/presentation/routes/administration.js +186 -0
  73. package/dist/presentation/routes/administration.js.map +1 -0
  74. package/dist/presentation/routes/index.d.ts +2 -1
  75. package/dist/presentation/routes/index.d.ts.map +1 -1
  76. package/dist/presentation/routes/index.js +2 -2
  77. package/dist/presentation/routes/index.js.map +1 -1
  78. package/dist/presentation/routes/rate-limit.d.ts +1 -0
  79. package/dist/presentation/routes/rate-limit.d.ts.map +1 -1
  80. package/dist/presentation/routes/rate-limit.js +20 -1
  81. package/dist/presentation/routes/rate-limit.js.map +1 -1
  82. package/dist/presentation/routes/registration/signup.d.ts +2 -1
  83. package/dist/presentation/routes/registration/signup.d.ts.map +1 -1
  84. package/dist/presentation/routes/registration/signup.js +14 -3
  85. package/dist/presentation/routes/registration/signup.js.map +1 -1
  86. package/dist/presentation/routes/session/me.d.ts.map +1 -1
  87. package/dist/presentation/routes/session/me.js +5 -1
  88. package/dist/presentation/routes/session/me.js.map +1 -1
  89. package/dist/tsconfig.test.tsbuildinfo +1 -1
  90. package/drizzle/0001_brainy_shriek.sql +14 -0
  91. package/drizzle/0002_burly_whizzer.sql +12 -0
  92. package/drizzle/meta/0001_snapshot.json +702 -0
  93. package/drizzle/meta/0002_snapshot.json +791 -0
  94. package/drizzle/meta/_journal.json +14 -0
  95. package/package.json +10 -9
  96. package/src/config.test.ts +39 -0
  97. package/src/config.ts +34 -0
  98. package/src/core/admin-role-model.ts +25 -0
  99. package/src/core/admin-role.test.ts +39 -0
  100. package/src/core/admin-role.ts +25 -0
  101. package/src/core/administration.ts +172 -0
  102. package/src/core/auth-default-signup-policy.test.ts +65 -0
  103. package/src/core/auth.test.ts +115 -0
  104. package/src/core/auth.ts +77 -21
  105. package/src/core/entities/admin-grant.ts +10 -0
  106. package/src/core/errors.ts +59 -0
  107. package/src/core/jwt.test.ts +1 -0
  108. package/src/core/ports.ts +7 -0
  109. package/src/core/signup-policy.test.ts +78 -0
  110. package/src/core/signup-policy.ts +42 -0
  111. package/src/db/admin-grants.test.ts +57 -0
  112. package/src/db/admin-grants.ts +340 -0
  113. package/src/db/db.ts +4 -0
  114. package/src/db/schema/admin-command-results.ts +41 -0
  115. package/src/db/schema/admin-grants.ts +49 -0
  116. package/src/index.test.ts +58 -1
  117. package/src/index.ts +47 -6
  118. package/src/metrics/instance.ts +1 -1
  119. package/src/presentation/auth/refresh-cookie.test.ts +4 -0
  120. package/src/presentation/dto/user.ts +7 -2
  121. package/src/presentation/e2eRoutes/index.test.ts +1 -0
  122. package/src/presentation/inter-module.test.ts +47 -0
  123. package/src/presentation/inter-module.ts +22 -1
  124. package/src/presentation/routes/administration.test.ts +253 -0
  125. package/src/presentation/routes/administration.ts +195 -0
  126. package/src/presentation/routes/index.test.ts +1 -0
  127. package/src/presentation/routes/index.ts +3 -1
  128. package/src/presentation/routes/rate-limit.ts +23 -2
  129. package/src/presentation/routes/registration/signup.test.ts +26 -0
  130. package/src/presentation/routes/registration/signup.ts +22 -2
  131. package/src/presentation/routes/session/login.test.ts +1 -0
  132. package/src/presentation/routes/session/me.test.ts +18 -2
  133. package/src/presentation/routes/session/me.ts +5 -1
  134. package/test/globalSetup.ts +6 -2
  135. package/test/routes.ts +7 -1
  136. package/tsconfig.build.tsbuildinfo +1 -1
@@ -0,0 +1,702 @@
1
+ {
2
+ "id": "39a76407-aeea-4575-96ce-61da4c8d77a8",
3
+ "prevId": "1ad0c574-e371-4c99-8d43-72c2c11e9bc3",
4
+ "version": "7",
5
+ "dialect": "postgresql",
6
+ "tables": {
7
+ "public.auth_admin_grants": {
8
+ "name": "auth_admin_grants",
9
+ "schema": "",
10
+ "columns": {
11
+ "id": {
12
+ "name": "id",
13
+ "type": "uuid",
14
+ "primaryKey": true,
15
+ "notNull": true,
16
+ "default": "uuidv7()"
17
+ },
18
+ "user_id": {
19
+ "name": "user_id",
20
+ "type": "uuid",
21
+ "primaryKey": false,
22
+ "notNull": true
23
+ },
24
+ "role": {
25
+ "name": "role",
26
+ "type": "auth_admin_role",
27
+ "typeSchema": "public",
28
+ "primaryKey": false,
29
+ "notNull": true
30
+ },
31
+ "revoked_at": {
32
+ "name": "revoked_at",
33
+ "type": "timestamp with time zone",
34
+ "primaryKey": false,
35
+ "notNull": false
36
+ },
37
+ "created_at": {
38
+ "name": "created_at",
39
+ "type": "timestamp with time zone",
40
+ "primaryKey": false,
41
+ "notNull": true,
42
+ "default": "now()"
43
+ },
44
+ "updated_at": {
45
+ "name": "updated_at",
46
+ "type": "timestamp with time zone",
47
+ "primaryKey": false,
48
+ "notNull": true,
49
+ "default": "now()"
50
+ }
51
+ },
52
+ "indexes": {
53
+ "auth_admin_grants_user_id_idx": {
54
+ "name": "auth_admin_grants_user_id_idx",
55
+ "columns": [
56
+ {
57
+ "expression": "user_id",
58
+ "isExpression": false,
59
+ "asc": true,
60
+ "nulls": "last"
61
+ }
62
+ ],
63
+ "isUnique": false,
64
+ "concurrently": false,
65
+ "method": "btree",
66
+ "with": {}
67
+ },
68
+ "auth_admin_grants_active_owners_idx": {
69
+ "name": "auth_admin_grants_active_owners_idx",
70
+ "columns": [
71
+ {
72
+ "expression": "user_id",
73
+ "isExpression": false,
74
+ "asc": true,
75
+ "nulls": "last"
76
+ }
77
+ ],
78
+ "isUnique": false,
79
+ "where": "\"auth_admin_grants\".\"role\" = 'admin-owner' AND \"auth_admin_grants\".\"revoked_at\" IS NULL",
80
+ "concurrently": false,
81
+ "method": "btree",
82
+ "with": {}
83
+ },
84
+ "auth_admin_grants_active_user_role_unique": {
85
+ "name": "auth_admin_grants_active_user_role_unique",
86
+ "columns": [
87
+ {
88
+ "expression": "user_id",
89
+ "isExpression": false,
90
+ "asc": true,
91
+ "nulls": "last"
92
+ },
93
+ {
94
+ "expression": "role",
95
+ "isExpression": false,
96
+ "asc": true,
97
+ "nulls": "last"
98
+ }
99
+ ],
100
+ "isUnique": true,
101
+ "where": "\"auth_admin_grants\".\"revoked_at\" IS NULL",
102
+ "concurrently": false,
103
+ "method": "btree",
104
+ "with": {}
105
+ }
106
+ },
107
+ "foreignKeys": {
108
+ "auth_admin_grants_user_id_auth_users_id_fk": {
109
+ "name": "auth_admin_grants_user_id_auth_users_id_fk",
110
+ "tableFrom": "auth_admin_grants",
111
+ "tableTo": "auth_users",
112
+ "columnsFrom": ["user_id"],
113
+ "columnsTo": ["id"],
114
+ "onDelete": "cascade",
115
+ "onUpdate": "no action"
116
+ }
117
+ },
118
+ "compositePrimaryKeys": {},
119
+ "uniqueConstraints": {},
120
+ "policies": {},
121
+ "checkConstraints": {},
122
+ "isRLSEnabled": false
123
+ },
124
+ "public.auth_outbox": {
125
+ "name": "auth_outbox",
126
+ "schema": "",
127
+ "columns": {
128
+ "id": {
129
+ "name": "id",
130
+ "type": "uuid",
131
+ "primaryKey": true,
132
+ "notNull": true,
133
+ "default": "uuidv7()"
134
+ },
135
+ "event_type": {
136
+ "name": "event_type",
137
+ "type": "text",
138
+ "primaryKey": false,
139
+ "notNull": true
140
+ },
141
+ "ordering_key": {
142
+ "name": "ordering_key",
143
+ "type": "text",
144
+ "primaryKey": false,
145
+ "notNull": false
146
+ },
147
+ "payload": {
148
+ "name": "payload",
149
+ "type": "jsonb",
150
+ "primaryKey": false,
151
+ "notNull": true
152
+ },
153
+ "created_at": {
154
+ "name": "created_at",
155
+ "type": "timestamp with time zone",
156
+ "primaryKey": false,
157
+ "notNull": true,
158
+ "default": "now()"
159
+ },
160
+ "dispatched_at": {
161
+ "name": "dispatched_at",
162
+ "type": "timestamp with time zone",
163
+ "primaryKey": false,
164
+ "notNull": false
165
+ },
166
+ "dispatch_attempts": {
167
+ "name": "dispatch_attempts",
168
+ "type": "integer",
169
+ "primaryKey": false,
170
+ "notNull": true,
171
+ "default": 0
172
+ },
173
+ "next_dispatch_at": {
174
+ "name": "next_dispatch_at",
175
+ "type": "timestamp with time zone",
176
+ "primaryKey": false,
177
+ "notNull": true,
178
+ "default": "now()"
179
+ },
180
+ "last_dispatch_error": {
181
+ "name": "last_dispatch_error",
182
+ "type": "jsonb",
183
+ "primaryKey": false,
184
+ "notNull": false
185
+ },
186
+ "last_dispatch_failed_at": {
187
+ "name": "last_dispatch_failed_at",
188
+ "type": "timestamp with time zone",
189
+ "primaryKey": false,
190
+ "notNull": false
191
+ },
192
+ "dead_lettered_at": {
193
+ "name": "dead_lettered_at",
194
+ "type": "timestamp with time zone",
195
+ "primaryKey": false,
196
+ "notNull": false
197
+ }
198
+ },
199
+ "indexes": {
200
+ "auth_outbox_pending_idx": {
201
+ "name": "auth_outbox_pending_idx",
202
+ "columns": [
203
+ {
204
+ "expression": "next_dispatch_at",
205
+ "isExpression": false,
206
+ "asc": true,
207
+ "nulls": "last"
208
+ },
209
+ {
210
+ "expression": "created_at",
211
+ "isExpression": false,
212
+ "asc": true,
213
+ "nulls": "last"
214
+ }
215
+ ],
216
+ "isUnique": false,
217
+ "where": "\"dispatched_at\" IS NULL AND \"dead_lettered_at\" IS NULL",
218
+ "concurrently": false,
219
+ "method": "btree",
220
+ "with": {}
221
+ },
222
+ "auth_outbox_dispatched_retention_idx": {
223
+ "name": "auth_outbox_dispatched_retention_idx",
224
+ "columns": [
225
+ {
226
+ "expression": "dispatched_at",
227
+ "isExpression": false,
228
+ "asc": true,
229
+ "nulls": "last"
230
+ },
231
+ {
232
+ "expression": "id",
233
+ "isExpression": false,
234
+ "asc": true,
235
+ "nulls": "last"
236
+ }
237
+ ],
238
+ "isUnique": false,
239
+ "where": "\"dispatched_at\" IS NOT NULL",
240
+ "concurrently": false,
241
+ "method": "btree",
242
+ "with": {}
243
+ }
244
+ },
245
+ "foreignKeys": {},
246
+ "compositePrimaryKeys": {},
247
+ "uniqueConstraints": {},
248
+ "policies": {},
249
+ "checkConstraints": {},
250
+ "isRLSEnabled": false
251
+ },
252
+ "public.auth_password_resets": {
253
+ "name": "auth_password_resets",
254
+ "schema": "",
255
+ "columns": {
256
+ "id": {
257
+ "name": "id",
258
+ "type": "uuid",
259
+ "primaryKey": true,
260
+ "notNull": true,
261
+ "default": "uuidv7()"
262
+ },
263
+ "user_id": {
264
+ "name": "user_id",
265
+ "type": "uuid",
266
+ "primaryKey": false,
267
+ "notNull": true
268
+ },
269
+ "hashed_token": {
270
+ "name": "hashed_token",
271
+ "type": "text",
272
+ "primaryKey": false,
273
+ "notNull": true
274
+ },
275
+ "expires_at": {
276
+ "name": "expires_at",
277
+ "type": "timestamp with time zone",
278
+ "primaryKey": false,
279
+ "notNull": true
280
+ },
281
+ "used_at": {
282
+ "name": "used_at",
283
+ "type": "timestamp with time zone",
284
+ "primaryKey": false,
285
+ "notNull": false
286
+ },
287
+ "created_at": {
288
+ "name": "created_at",
289
+ "type": "timestamp with time zone",
290
+ "primaryKey": false,
291
+ "notNull": true,
292
+ "default": "now()"
293
+ }
294
+ },
295
+ "indexes": {
296
+ "auth_password_resets_hashed_token_unique": {
297
+ "name": "auth_password_resets_hashed_token_unique",
298
+ "columns": [
299
+ {
300
+ "expression": "hashed_token",
301
+ "isExpression": false,
302
+ "asc": true,
303
+ "nulls": "last"
304
+ }
305
+ ],
306
+ "isUnique": true,
307
+ "concurrently": false,
308
+ "method": "btree",
309
+ "with": {}
310
+ },
311
+ "auth_password_resets_user_id_idx": {
312
+ "name": "auth_password_resets_user_id_idx",
313
+ "columns": [
314
+ {
315
+ "expression": "user_id",
316
+ "isExpression": false,
317
+ "asc": true,
318
+ "nulls": "last"
319
+ }
320
+ ],
321
+ "isUnique": false,
322
+ "concurrently": false,
323
+ "method": "btree",
324
+ "with": {}
325
+ }
326
+ },
327
+ "foreignKeys": {
328
+ "auth_password_resets_user_id_auth_users_id_fk": {
329
+ "name": "auth_password_resets_user_id_auth_users_id_fk",
330
+ "tableFrom": "auth_password_resets",
331
+ "tableTo": "auth_users",
332
+ "columnsFrom": ["user_id"],
333
+ "columnsTo": ["id"],
334
+ "onDelete": "cascade",
335
+ "onUpdate": "no action"
336
+ }
337
+ },
338
+ "compositePrimaryKeys": {},
339
+ "uniqueConstraints": {},
340
+ "policies": {},
341
+ "checkConstraints": {},
342
+ "isRLSEnabled": false
343
+ },
344
+ "public.auth_rate_limits": {
345
+ "name": "auth_rate_limits",
346
+ "schema": "",
347
+ "columns": {
348
+ "action": {
349
+ "name": "action",
350
+ "type": "text",
351
+ "primaryKey": false,
352
+ "notNull": true
353
+ },
354
+ "scope": {
355
+ "name": "scope",
356
+ "type": "text",
357
+ "primaryKey": false,
358
+ "notNull": true
359
+ },
360
+ "identifier_hmac": {
361
+ "name": "identifier_hmac",
362
+ "type": "text",
363
+ "primaryKey": false,
364
+ "notNull": true
365
+ },
366
+ "window_start": {
367
+ "name": "window_start",
368
+ "type": "timestamp with time zone",
369
+ "primaryKey": false,
370
+ "notNull": true
371
+ },
372
+ "count": {
373
+ "name": "count",
374
+ "type": "integer",
375
+ "primaryKey": false,
376
+ "notNull": true,
377
+ "default": 1
378
+ },
379
+ "expires_at": {
380
+ "name": "expires_at",
381
+ "type": "timestamp with time zone",
382
+ "primaryKey": false,
383
+ "notNull": true
384
+ },
385
+ "created_at": {
386
+ "name": "created_at",
387
+ "type": "timestamp with time zone",
388
+ "primaryKey": false,
389
+ "notNull": true,
390
+ "default": "now()"
391
+ },
392
+ "updated_at": {
393
+ "name": "updated_at",
394
+ "type": "timestamp with time zone",
395
+ "primaryKey": false,
396
+ "notNull": true,
397
+ "default": "now()"
398
+ }
399
+ },
400
+ "indexes": {
401
+ "auth_rate_limits_window_unique": {
402
+ "name": "auth_rate_limits_window_unique",
403
+ "columns": [
404
+ {
405
+ "expression": "action",
406
+ "isExpression": false,
407
+ "asc": true,
408
+ "nulls": "last"
409
+ },
410
+ {
411
+ "expression": "scope",
412
+ "isExpression": false,
413
+ "asc": true,
414
+ "nulls": "last"
415
+ },
416
+ {
417
+ "expression": "identifier_hmac",
418
+ "isExpression": false,
419
+ "asc": true,
420
+ "nulls": "last"
421
+ },
422
+ {
423
+ "expression": "window_start",
424
+ "isExpression": false,
425
+ "asc": true,
426
+ "nulls": "last"
427
+ }
428
+ ],
429
+ "isUnique": true,
430
+ "concurrently": false,
431
+ "method": "btree",
432
+ "with": {}
433
+ },
434
+ "auth_rate_limits_expires_at_idx": {
435
+ "name": "auth_rate_limits_expires_at_idx",
436
+ "columns": [
437
+ {
438
+ "expression": "expires_at",
439
+ "isExpression": false,
440
+ "asc": true,
441
+ "nulls": "last"
442
+ }
443
+ ],
444
+ "isUnique": false,
445
+ "concurrently": false,
446
+ "method": "btree",
447
+ "with": {}
448
+ }
449
+ },
450
+ "foreignKeys": {},
451
+ "compositePrimaryKeys": {},
452
+ "uniqueConstraints": {},
453
+ "policies": {},
454
+ "checkConstraints": {},
455
+ "isRLSEnabled": false
456
+ },
457
+ "public.auth_refresh_tokens": {
458
+ "name": "auth_refresh_tokens",
459
+ "schema": "",
460
+ "columns": {
461
+ "id": {
462
+ "name": "id",
463
+ "type": "uuid",
464
+ "primaryKey": true,
465
+ "notNull": true,
466
+ "default": "uuidv7()"
467
+ },
468
+ "session_id": {
469
+ "name": "session_id",
470
+ "type": "uuid",
471
+ "primaryKey": false,
472
+ "notNull": true,
473
+ "default": "uuidv7()"
474
+ },
475
+ "user_id": {
476
+ "name": "user_id",
477
+ "type": "uuid",
478
+ "primaryKey": false,
479
+ "notNull": true
480
+ },
481
+ "hashed_token": {
482
+ "name": "hashed_token",
483
+ "type": "text",
484
+ "primaryKey": false,
485
+ "notNull": true
486
+ },
487
+ "expires_at": {
488
+ "name": "expires_at",
489
+ "type": "timestamp with time zone",
490
+ "primaryKey": false,
491
+ "notNull": true
492
+ },
493
+ "revoked_at": {
494
+ "name": "revoked_at",
495
+ "type": "timestamp with time zone",
496
+ "primaryKey": false,
497
+ "notNull": false
498
+ },
499
+ "rotated_at": {
500
+ "name": "rotated_at",
501
+ "type": "timestamp with time zone",
502
+ "primaryKey": false,
503
+ "notNull": false
504
+ },
505
+ "last_used_at": {
506
+ "name": "last_used_at",
507
+ "type": "timestamp with time zone",
508
+ "primaryKey": false,
509
+ "notNull": false
510
+ },
511
+ "created_at": {
512
+ "name": "created_at",
513
+ "type": "timestamp with time zone",
514
+ "primaryKey": false,
515
+ "notNull": true,
516
+ "default": "now()"
517
+ },
518
+ "updated_at": {
519
+ "name": "updated_at",
520
+ "type": "timestamp with time zone",
521
+ "primaryKey": false,
522
+ "notNull": true,
523
+ "default": "now()"
524
+ }
525
+ },
526
+ "indexes": {
527
+ "auth_refresh_tokens_hashed_token_unique": {
528
+ "name": "auth_refresh_tokens_hashed_token_unique",
529
+ "columns": [
530
+ {
531
+ "expression": "hashed_token",
532
+ "isExpression": false,
533
+ "asc": true,
534
+ "nulls": "last"
535
+ }
536
+ ],
537
+ "isUnique": true,
538
+ "concurrently": false,
539
+ "method": "btree",
540
+ "with": {}
541
+ },
542
+ "auth_refresh_tokens_active_session_unique": {
543
+ "name": "auth_refresh_tokens_active_session_unique",
544
+ "columns": [
545
+ {
546
+ "expression": "user_id",
547
+ "isExpression": false,
548
+ "asc": true,
549
+ "nulls": "last"
550
+ },
551
+ {
552
+ "expression": "session_id",
553
+ "isExpression": false,
554
+ "asc": true,
555
+ "nulls": "last"
556
+ }
557
+ ],
558
+ "isUnique": true,
559
+ "where": "\"auth_refresh_tokens\".\"revoked_at\" IS NULL AND \"auth_refresh_tokens\".\"rotated_at\" IS NULL",
560
+ "concurrently": false,
561
+ "method": "btree",
562
+ "with": {}
563
+ },
564
+ "auth_refresh_tokens_user_id_idx": {
565
+ "name": "auth_refresh_tokens_user_id_idx",
566
+ "columns": [
567
+ {
568
+ "expression": "user_id",
569
+ "isExpression": false,
570
+ "asc": true,
571
+ "nulls": "last"
572
+ }
573
+ ],
574
+ "isUnique": false,
575
+ "concurrently": false,
576
+ "method": "btree",
577
+ "with": {}
578
+ }
579
+ },
580
+ "foreignKeys": {
581
+ "auth_refresh_tokens_user_id_auth_users_id_fk": {
582
+ "name": "auth_refresh_tokens_user_id_auth_users_id_fk",
583
+ "tableFrom": "auth_refresh_tokens",
584
+ "tableTo": "auth_users",
585
+ "columnsFrom": ["user_id"],
586
+ "columnsTo": ["id"],
587
+ "onDelete": "cascade",
588
+ "onUpdate": "no action"
589
+ }
590
+ },
591
+ "compositePrimaryKeys": {},
592
+ "uniqueConstraints": {},
593
+ "policies": {},
594
+ "checkConstraints": {},
595
+ "isRLSEnabled": false
596
+ },
597
+ "public.auth_users": {
598
+ "name": "auth_users",
599
+ "schema": "",
600
+ "columns": {
601
+ "id": {
602
+ "name": "id",
603
+ "type": "uuid",
604
+ "primaryKey": true,
605
+ "notNull": true,
606
+ "default": "uuidv7()"
607
+ },
608
+ "email": {
609
+ "name": "email",
610
+ "type": "text",
611
+ "primaryKey": false,
612
+ "notNull": true
613
+ },
614
+ "hashed_password": {
615
+ "name": "hashed_password",
616
+ "type": "text",
617
+ "primaryKey": false,
618
+ "notNull": false
619
+ },
620
+ "name": {
621
+ "name": "name",
622
+ "type": "text",
623
+ "primaryKey": false,
624
+ "notNull": false
625
+ },
626
+ "email_verified_at": {
627
+ "name": "email_verified_at",
628
+ "type": "timestamp with time zone",
629
+ "primaryKey": false,
630
+ "notNull": false
631
+ },
632
+ "status": {
633
+ "name": "status",
634
+ "type": "auth_user_status",
635
+ "typeSchema": "public",
636
+ "primaryKey": false,
637
+ "notNull": true,
638
+ "default": "'active'"
639
+ },
640
+ "created_at": {
641
+ "name": "created_at",
642
+ "type": "timestamp with time zone",
643
+ "primaryKey": false,
644
+ "notNull": true,
645
+ "default": "now()"
646
+ },
647
+ "updated_at": {
648
+ "name": "updated_at",
649
+ "type": "timestamp with time zone",
650
+ "primaryKey": false,
651
+ "notNull": true,
652
+ "default": "now()"
653
+ }
654
+ },
655
+ "indexes": {
656
+ "auth_users_email_unique": {
657
+ "name": "auth_users_email_unique",
658
+ "columns": [
659
+ {
660
+ "expression": "email",
661
+ "isExpression": false,
662
+ "asc": true,
663
+ "nulls": "last"
664
+ }
665
+ ],
666
+ "isUnique": true,
667
+ "concurrently": false,
668
+ "method": "btree",
669
+ "with": {}
670
+ }
671
+ },
672
+ "foreignKeys": {},
673
+ "compositePrimaryKeys": {},
674
+ "uniqueConstraints": {},
675
+ "policies": {},
676
+ "checkConstraints": {},
677
+ "isRLSEnabled": false
678
+ }
679
+ },
680
+ "enums": {
681
+ "public.auth_admin_role": {
682
+ "name": "auth_admin_role",
683
+ "schema": "public",
684
+ "values": ["admin-observer", "admin-operator", "admin-owner"]
685
+ },
686
+ "public.auth_user_status": {
687
+ "name": "auth_user_status",
688
+ "schema": "public",
689
+ "values": ["active", "suspended", "deleted"]
690
+ }
691
+ },
692
+ "schemas": {},
693
+ "sequences": {},
694
+ "roles": {},
695
+ "policies": {},
696
+ "views": {},
697
+ "_meta": {
698
+ "columns": {},
699
+ "schemas": {},
700
+ "tables": {}
701
+ }
702
+ }