@openora/core 0.4.1-canary.128 → 0.4.1-canary.129

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 (95) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/audit/__tests__/audit.service.int.test.js +45 -0
  3. package/dist/audit/__tests__/audit.service.int.test.js.map +1 -1
  4. package/dist/audit/plugin.d.ts.map +1 -1
  5. package/dist/audit/plugin.js +26 -0
  6. package/dist/audit/plugin.js.map +1 -1
  7. package/dist/compliance/contract/index.d.ts +1 -1
  8. package/dist/compliance/contract/rg.d.ts +2 -2
  9. package/dist/compliance/router/index.d.ts +1 -1
  10. package/dist/contracts/__tests__/identity.test.js +3 -2
  11. package/dist/contracts/__tests__/identity.test.js.map +1 -1
  12. package/dist/contracts/adapters/identity-reader.d.ts +6 -0
  13. package/dist/contracts/adapters/identity-reader.d.ts.map +1 -1
  14. package/dist/contracts/adapters/identity-reader.js.map +1 -1
  15. package/dist/contracts/schemas/__tests__/events.test.js +30 -0
  16. package/dist/contracts/schemas/__tests__/events.test.js.map +1 -1
  17. package/dist/contracts/schemas/events.d.ts +37 -0
  18. package/dist/contracts/schemas/events.d.ts.map +1 -1
  19. package/dist/contracts/schemas/events.js +29 -0
  20. package/dist/contracts/schemas/events.js.map +1 -1
  21. package/dist/contracts/schemas/identity.d.ts +28 -0
  22. package/dist/contracts/schemas/identity.d.ts.map +1 -1
  23. package/dist/contracts/schemas/identity.js +22 -1
  24. package/dist/contracts/schemas/identity.js.map +1 -1
  25. package/dist/engagement/notifications/plugin.d.ts +2 -2
  26. package/dist/engagement/notifications/plugin.d.ts.map +1 -1
  27. package/dist/engagement/notifications/plugin.js +71 -2
  28. package/dist/engagement/notifications/plugin.js.map +1 -1
  29. package/dist/pam/identity/__tests__/identity.rate-limit.int.test.js +2 -2
  30. package/dist/pam/identity/__tests__/identity.rate-limit.int.test.js.map +1 -1
  31. package/dist/pam/identity/__tests__/identity.registration-gates.int.test.js +1 -1
  32. package/dist/pam/identity/__tests__/identity.registration-gates.int.test.js.map +1 -1
  33. package/dist/pam/identity/__tests__/identity.service.int.test.js +67 -1
  34. package/dist/pam/identity/__tests__/identity.service.int.test.js.map +1 -1
  35. package/dist/pam/identity/__tests__/phone-login.service.int.test.js +23 -0
  36. package/dist/pam/identity/__tests__/phone-login.service.int.test.js.map +1 -1
  37. package/dist/pam/identity/__tests__/phone-verification.service.int.test.d.ts +2 -0
  38. package/dist/pam/identity/__tests__/phone-verification.service.int.test.d.ts.map +1 -0
  39. package/dist/pam/identity/__tests__/phone-verification.service.int.test.js +273 -0
  40. package/dist/pam/identity/__tests__/phone-verification.service.int.test.js.map +1 -0
  41. package/dist/pam/identity/adapters/identity-reader.service.d.ts +1 -0
  42. package/dist/pam/identity/adapters/identity-reader.service.d.ts.map +1 -1
  43. package/dist/pam/identity/adapters/identity-reader.service.js +8 -0
  44. package/dist/pam/identity/adapters/identity-reader.service.js.map +1 -1
  45. package/dist/pam/identity/contract/index.d.ts +40 -0
  46. package/dist/pam/identity/contract/index.d.ts.map +1 -1
  47. package/dist/pam/identity/contract/index.js +18 -1
  48. package/dist/pam/identity/contract/index.js.map +1 -1
  49. package/dist/pam/identity/drizzle/migrations/0010_lying_young_avengers.sql +19 -0
  50. package/dist/pam/identity/drizzle/migrations/meta/0010_snapshot.json +1066 -0
  51. package/dist/pam/identity/drizzle/migrations/meta/_journal.json +7 -0
  52. package/dist/pam/identity/plugin.d.ts.map +1 -1
  53. package/dist/pam/identity/plugin.js +9 -0
  54. package/dist/pam/identity/plugin.js.map +1 -1
  55. package/dist/pam/identity/react/account.d.ts +9 -1
  56. package/dist/pam/identity/react/account.d.ts.map +1 -1
  57. package/dist/pam/identity/react/account.js +33 -5
  58. package/dist/pam/identity/react/account.js.map +1 -1
  59. package/dist/pam/identity/router/index.d.ts +42 -1
  60. package/dist/pam/identity/router/index.d.ts.map +1 -1
  61. package/dist/pam/identity/router/index.js +28 -2
  62. package/dist/pam/identity/router/index.js.map +1 -1
  63. package/dist/pam/identity/schema/index.d.ts +195 -0
  64. package/dist/pam/identity/schema/index.d.ts.map +1 -1
  65. package/dist/pam/identity/schema/index.js +26 -0
  66. package/dist/pam/identity/schema/index.js.map +1 -1
  67. package/dist/pam/identity/service/identity.service.d.ts +4 -1
  68. package/dist/pam/identity/service/identity.service.d.ts.map +1 -1
  69. package/dist/pam/identity/service/identity.service.js +140 -1
  70. package/dist/pam/identity/service/identity.service.js.map +1 -1
  71. package/dist/pam/identity/service/phone-login.service.d.ts.map +1 -1
  72. package/dist/pam/identity/service/phone-login.service.js +34 -19
  73. package/dist/pam/identity/service/phone-login.service.js.map +1 -1
  74. package/dist/pam/identity/service/phone-verification.service.d.ts +38 -0
  75. package/dist/pam/identity/service/phone-verification.service.d.ts.map +1 -0
  76. package/dist/pam/identity/service/phone-verification.service.js +257 -0
  77. package/dist/pam/identity/service/phone-verification.service.js.map +1 -0
  78. package/dist/pam/identity/service/security-controls.service.d.ts +4 -0
  79. package/dist/pam/identity/service/security-controls.service.d.ts.map +1 -0
  80. package/dist/pam/identity/service/security-controls.service.js +28 -0
  81. package/dist/pam/identity/service/security-controls.service.js.map +1 -0
  82. package/dist/pam/react.d.ts +1 -1
  83. package/dist/pam/react.d.ts.map +1 -1
  84. package/dist/pam/react.js +1 -1
  85. package/dist/pam/react.js.map +1 -1
  86. package/dist/pam/shared/otp.d.ts +3 -0
  87. package/dist/pam/shared/otp.d.ts.map +1 -0
  88. package/dist/pam/shared/otp.js +11 -0
  89. package/dist/pam/shared/otp.js.map +1 -0
  90. package/dist/testing/mock.d.ts.map +1 -1
  91. package/dist/testing/mock.js +1 -0
  92. package/dist/testing/mock.js.map +1 -1
  93. package/dist/testing/seed-player.d.ts +4 -0
  94. package/dist/testing/seed-player.d.ts.map +1 -1
  95. package/package.json +1 -1
@@ -0,0 +1,1066 @@
1
+ {
2
+ "id": "a0b9529c-1962-41a7-90fd-07fb3620665e",
3
+ "prevId": "3ed4d13d-bb10-4611-8b8e-97f8737a4b47",
4
+ "version": "7",
5
+ "dialect": "postgresql",
6
+ "tables": {
7
+ "public.account": {
8
+ "name": "account",
9
+ "schema": "",
10
+ "columns": {
11
+ "id": {
12
+ "name": "id",
13
+ "type": "uuid",
14
+ "primaryKey": true,
15
+ "notNull": true,
16
+ "default": "gen_random_uuid()"
17
+ },
18
+ "account_id": {
19
+ "name": "account_id",
20
+ "type": "text",
21
+ "primaryKey": false,
22
+ "notNull": true
23
+ },
24
+ "provider_id": {
25
+ "name": "provider_id",
26
+ "type": "text",
27
+ "primaryKey": false,
28
+ "notNull": true
29
+ },
30
+ "user_id": {
31
+ "name": "user_id",
32
+ "type": "uuid",
33
+ "primaryKey": false,
34
+ "notNull": true
35
+ },
36
+ "access_token": {
37
+ "name": "access_token",
38
+ "type": "text",
39
+ "primaryKey": false,
40
+ "notNull": false
41
+ },
42
+ "refresh_token": {
43
+ "name": "refresh_token",
44
+ "type": "text",
45
+ "primaryKey": false,
46
+ "notNull": false
47
+ },
48
+ "id_token": {
49
+ "name": "id_token",
50
+ "type": "text",
51
+ "primaryKey": false,
52
+ "notNull": false
53
+ },
54
+ "access_token_expires_at": {
55
+ "name": "access_token_expires_at",
56
+ "type": "timestamp with time zone",
57
+ "primaryKey": false,
58
+ "notNull": false
59
+ },
60
+ "refresh_token_expires_at": {
61
+ "name": "refresh_token_expires_at",
62
+ "type": "timestamp with time zone",
63
+ "primaryKey": false,
64
+ "notNull": false
65
+ },
66
+ "scope": {
67
+ "name": "scope",
68
+ "type": "text",
69
+ "primaryKey": false,
70
+ "notNull": false
71
+ },
72
+ "password": {
73
+ "name": "password",
74
+ "type": "text",
75
+ "primaryKey": false,
76
+ "notNull": false
77
+ },
78
+ "created_at": {
79
+ "name": "created_at",
80
+ "type": "timestamp with time zone",
81
+ "primaryKey": false,
82
+ "notNull": true,
83
+ "default": "now()"
84
+ },
85
+ "updated_at": {
86
+ "name": "updated_at",
87
+ "type": "timestamp with time zone",
88
+ "primaryKey": false,
89
+ "notNull": true
90
+ }
91
+ },
92
+ "indexes": {
93
+ "account_user_id_idx": {
94
+ "name": "account_user_id_idx",
95
+ "columns": [
96
+ {
97
+ "expression": "user_id",
98
+ "isExpression": false,
99
+ "asc": true,
100
+ "nulls": "last"
101
+ }
102
+ ],
103
+ "isUnique": false,
104
+ "concurrently": false,
105
+ "method": "btree",
106
+ "with": {}
107
+ }
108
+ },
109
+ "foreignKeys": {
110
+ "account_user_id_user_id_fk": {
111
+ "name": "account_user_id_user_id_fk",
112
+ "tableFrom": "account",
113
+ "tableTo": "user",
114
+ "columnsFrom": ["user_id"],
115
+ "columnsTo": ["id"],
116
+ "onDelete": "cascade",
117
+ "onUpdate": "no action"
118
+ }
119
+ },
120
+ "compositePrimaryKeys": {},
121
+ "uniqueConstraints": {},
122
+ "policies": {},
123
+ "checkConstraints": {},
124
+ "isRLSEnabled": false
125
+ },
126
+ "public.admin_trusted_device": {
127
+ "name": "admin_trusted_device",
128
+ "schema": "",
129
+ "columns": {
130
+ "id": {
131
+ "name": "id",
132
+ "type": "uuid",
133
+ "primaryKey": true,
134
+ "notNull": true,
135
+ "default": "gen_random_uuid()"
136
+ },
137
+ "user_id": {
138
+ "name": "user_id",
139
+ "type": "uuid",
140
+ "primaryKey": false,
141
+ "notNull": true
142
+ },
143
+ "device_hash": {
144
+ "name": "device_hash",
145
+ "type": "text",
146
+ "primaryKey": false,
147
+ "notNull": true
148
+ },
149
+ "label": {
150
+ "name": "label",
151
+ "type": "text",
152
+ "primaryKey": false,
153
+ "notNull": true
154
+ },
155
+ "ip_address": {
156
+ "name": "ip_address",
157
+ "type": "text",
158
+ "primaryKey": false,
159
+ "notNull": false
160
+ },
161
+ "user_agent": {
162
+ "name": "user_agent",
163
+ "type": "text",
164
+ "primaryKey": false,
165
+ "notNull": false
166
+ },
167
+ "last_used_at": {
168
+ "name": "last_used_at",
169
+ "type": "timestamp with time zone",
170
+ "primaryKey": false,
171
+ "notNull": true,
172
+ "default": "now()"
173
+ },
174
+ "expires_at": {
175
+ "name": "expires_at",
176
+ "type": "timestamp with time zone",
177
+ "primaryKey": false,
178
+ "notNull": true
179
+ },
180
+ "revoked_at": {
181
+ "name": "revoked_at",
182
+ "type": "timestamp with time zone",
183
+ "primaryKey": false,
184
+ "notNull": false
185
+ },
186
+ "revoked_by": {
187
+ "name": "revoked_by",
188
+ "type": "uuid",
189
+ "primaryKey": false,
190
+ "notNull": false
191
+ },
192
+ "created_at": {
193
+ "name": "created_at",
194
+ "type": "timestamp with time zone",
195
+ "primaryKey": false,
196
+ "notNull": true,
197
+ "default": "now()"
198
+ }
199
+ },
200
+ "indexes": {
201
+ "admin_trusted_device_user_hash_idx": {
202
+ "name": "admin_trusted_device_user_hash_idx",
203
+ "columns": [
204
+ {
205
+ "expression": "user_id",
206
+ "isExpression": false,
207
+ "asc": true,
208
+ "nulls": "last"
209
+ },
210
+ {
211
+ "expression": "device_hash",
212
+ "isExpression": false,
213
+ "asc": true,
214
+ "nulls": "last"
215
+ }
216
+ ],
217
+ "isUnique": true,
218
+ "concurrently": false,
219
+ "method": "btree",
220
+ "with": {}
221
+ },
222
+ "admin_trusted_device_user_id_idx": {
223
+ "name": "admin_trusted_device_user_id_idx",
224
+ "columns": [
225
+ {
226
+ "expression": "user_id",
227
+ "isExpression": false,
228
+ "asc": true,
229
+ "nulls": "last"
230
+ }
231
+ ],
232
+ "isUnique": false,
233
+ "concurrently": false,
234
+ "method": "btree",
235
+ "with": {}
236
+ },
237
+ "admin_trusted_device_expires_at_idx": {
238
+ "name": "admin_trusted_device_expires_at_idx",
239
+ "columns": [
240
+ {
241
+ "expression": "expires_at",
242
+ "isExpression": false,
243
+ "asc": true,
244
+ "nulls": "last"
245
+ }
246
+ ],
247
+ "isUnique": false,
248
+ "concurrently": false,
249
+ "method": "btree",
250
+ "with": {}
251
+ }
252
+ },
253
+ "foreignKeys": {
254
+ "admin_trusted_device_user_id_user_id_fk": {
255
+ "name": "admin_trusted_device_user_id_user_id_fk",
256
+ "tableFrom": "admin_trusted_device",
257
+ "tableTo": "user",
258
+ "columnsFrom": ["user_id"],
259
+ "columnsTo": ["id"],
260
+ "onDelete": "cascade",
261
+ "onUpdate": "no action"
262
+ }
263
+ },
264
+ "compositePrimaryKeys": {},
265
+ "uniqueConstraints": {},
266
+ "policies": {},
267
+ "checkConstraints": {},
268
+ "isRLSEnabled": false
269
+ },
270
+ "public.phone_verification_session": {
271
+ "name": "phone_verification_session",
272
+ "schema": "",
273
+ "columns": {
274
+ "id": {
275
+ "name": "id",
276
+ "type": "uuid",
277
+ "primaryKey": true,
278
+ "notNull": true,
279
+ "default": "gen_random_uuid()"
280
+ },
281
+ "user_id": {
282
+ "name": "user_id",
283
+ "type": "uuid",
284
+ "primaryKey": false,
285
+ "notNull": true
286
+ },
287
+ "session_id": {
288
+ "name": "session_id",
289
+ "type": "uuid",
290
+ "primaryKey": false,
291
+ "notNull": true
292
+ },
293
+ "phone": {
294
+ "name": "phone",
295
+ "type": "text",
296
+ "primaryKey": false,
297
+ "notNull": true
298
+ },
299
+ "code_hash": {
300
+ "name": "code_hash",
301
+ "type": "text",
302
+ "primaryKey": false,
303
+ "notNull": true
304
+ },
305
+ "reauthenticated_at": {
306
+ "name": "reauthenticated_at",
307
+ "type": "timestamp with time zone",
308
+ "primaryKey": false,
309
+ "notNull": true
310
+ },
311
+ "expires_at": {
312
+ "name": "expires_at",
313
+ "type": "timestamp with time zone",
314
+ "primaryKey": false,
315
+ "notNull": true
316
+ },
317
+ "failed_attempts": {
318
+ "name": "failed_attempts",
319
+ "type": "integer",
320
+ "primaryKey": false,
321
+ "notNull": true,
322
+ "default": 0
323
+ },
324
+ "created_at": {
325
+ "name": "created_at",
326
+ "type": "timestamp with time zone",
327
+ "primaryKey": false,
328
+ "notNull": true,
329
+ "default": "now()"
330
+ }
331
+ },
332
+ "indexes": {
333
+ "phone_verification_session_phone_idx": {
334
+ "name": "phone_verification_session_phone_idx",
335
+ "columns": [
336
+ {
337
+ "expression": "phone",
338
+ "isExpression": false,
339
+ "asc": true,
340
+ "nulls": "last"
341
+ }
342
+ ],
343
+ "isUnique": false,
344
+ "concurrently": false,
345
+ "method": "btree",
346
+ "with": {}
347
+ },
348
+ "phone_verification_session_session_id_idx": {
349
+ "name": "phone_verification_session_session_id_idx",
350
+ "columns": [
351
+ {
352
+ "expression": "session_id",
353
+ "isExpression": false,
354
+ "asc": true,
355
+ "nulls": "last"
356
+ }
357
+ ],
358
+ "isUnique": false,
359
+ "concurrently": false,
360
+ "method": "btree",
361
+ "with": {}
362
+ }
363
+ },
364
+ "foreignKeys": {
365
+ "phone_verification_session_user_id_user_id_fk": {
366
+ "name": "phone_verification_session_user_id_user_id_fk",
367
+ "tableFrom": "phone_verification_session",
368
+ "tableTo": "user",
369
+ "columnsFrom": ["user_id"],
370
+ "columnsTo": ["id"],
371
+ "onDelete": "cascade",
372
+ "onUpdate": "no action"
373
+ },
374
+ "phone_verification_session_session_id_session_id_fk": {
375
+ "name": "phone_verification_session_session_id_session_id_fk",
376
+ "tableFrom": "phone_verification_session",
377
+ "tableTo": "session",
378
+ "columnsFrom": ["session_id"],
379
+ "columnsTo": ["id"],
380
+ "onDelete": "cascade",
381
+ "onUpdate": "no action"
382
+ }
383
+ },
384
+ "compositePrimaryKeys": {},
385
+ "uniqueConstraints": {
386
+ "phone_verification_session_userId_unique": {
387
+ "name": "phone_verification_session_userId_unique",
388
+ "nullsNotDistinct": false,
389
+ "columns": ["user_id"]
390
+ }
391
+ },
392
+ "policies": {},
393
+ "checkConstraints": {},
394
+ "isRLSEnabled": false
395
+ },
396
+ "public.session": {
397
+ "name": "session",
398
+ "schema": "",
399
+ "columns": {
400
+ "id": {
401
+ "name": "id",
402
+ "type": "uuid",
403
+ "primaryKey": true,
404
+ "notNull": true,
405
+ "default": "gen_random_uuid()"
406
+ },
407
+ "expires_at": {
408
+ "name": "expires_at",
409
+ "type": "timestamp with time zone",
410
+ "primaryKey": false,
411
+ "notNull": true
412
+ },
413
+ "token": {
414
+ "name": "token",
415
+ "type": "text",
416
+ "primaryKey": false,
417
+ "notNull": true
418
+ },
419
+ "created_at": {
420
+ "name": "created_at",
421
+ "type": "timestamp with time zone",
422
+ "primaryKey": false,
423
+ "notNull": true,
424
+ "default": "now()"
425
+ },
426
+ "updated_at": {
427
+ "name": "updated_at",
428
+ "type": "timestamp with time zone",
429
+ "primaryKey": false,
430
+ "notNull": true
431
+ },
432
+ "ip_address": {
433
+ "name": "ip_address",
434
+ "type": "text",
435
+ "primaryKey": false,
436
+ "notNull": false
437
+ },
438
+ "user_agent": {
439
+ "name": "user_agent",
440
+ "type": "text",
441
+ "primaryKey": false,
442
+ "notNull": false
443
+ },
444
+ "last_seen_at": {
445
+ "name": "last_seen_at",
446
+ "type": "timestamp with time zone",
447
+ "primaryKey": false,
448
+ "notNull": false
449
+ },
450
+ "user_id": {
451
+ "name": "user_id",
452
+ "type": "uuid",
453
+ "primaryKey": false,
454
+ "notNull": true
455
+ }
456
+ },
457
+ "indexes": {
458
+ "session_user_id_idx": {
459
+ "name": "session_user_id_idx",
460
+ "columns": [
461
+ {
462
+ "expression": "user_id",
463
+ "isExpression": false,
464
+ "asc": true,
465
+ "nulls": "last"
466
+ }
467
+ ],
468
+ "isUnique": false,
469
+ "concurrently": false,
470
+ "method": "btree",
471
+ "with": {}
472
+ }
473
+ },
474
+ "foreignKeys": {
475
+ "session_user_id_user_id_fk": {
476
+ "name": "session_user_id_user_id_fk",
477
+ "tableFrom": "session",
478
+ "tableTo": "user",
479
+ "columnsFrom": ["user_id"],
480
+ "columnsTo": ["id"],
481
+ "onDelete": "cascade",
482
+ "onUpdate": "no action"
483
+ }
484
+ },
485
+ "compositePrimaryKeys": {},
486
+ "uniqueConstraints": {
487
+ "session_token_unique": {
488
+ "name": "session_token_unique",
489
+ "nullsNotDistinct": false,
490
+ "columns": ["token"]
491
+ }
492
+ },
493
+ "policies": {},
494
+ "checkConstraints": {},
495
+ "isRLSEnabled": false
496
+ },
497
+ "public.sms_otp_session": {
498
+ "name": "sms_otp_session",
499
+ "schema": "",
500
+ "columns": {
501
+ "id": {
502
+ "name": "id",
503
+ "type": "uuid",
504
+ "primaryKey": true,
505
+ "notNull": true,
506
+ "default": "gen_random_uuid()"
507
+ },
508
+ "user_id": {
509
+ "name": "user_id",
510
+ "type": "uuid",
511
+ "primaryKey": false,
512
+ "notNull": true
513
+ },
514
+ "phone": {
515
+ "name": "phone",
516
+ "type": "text",
517
+ "primaryKey": false,
518
+ "notNull": true
519
+ },
520
+ "code_hash": {
521
+ "name": "code_hash",
522
+ "type": "text",
523
+ "primaryKey": false,
524
+ "notNull": true
525
+ },
526
+ "expires_at": {
527
+ "name": "expires_at",
528
+ "type": "timestamp with time zone",
529
+ "primaryKey": false,
530
+ "notNull": true
531
+ },
532
+ "failed_attempts": {
533
+ "name": "failed_attempts",
534
+ "type": "integer",
535
+ "primaryKey": false,
536
+ "notNull": true,
537
+ "default": 0
538
+ },
539
+ "created_at": {
540
+ "name": "created_at",
541
+ "type": "timestamp with time zone",
542
+ "primaryKey": false,
543
+ "notNull": true,
544
+ "default": "now()"
545
+ }
546
+ },
547
+ "indexes": {
548
+ "sms_otp_session_phone_idx": {
549
+ "name": "sms_otp_session_phone_idx",
550
+ "columns": [
551
+ {
552
+ "expression": "phone",
553
+ "isExpression": false,
554
+ "asc": true,
555
+ "nulls": "last"
556
+ }
557
+ ],
558
+ "isUnique": false,
559
+ "concurrently": false,
560
+ "method": "btree",
561
+ "with": {}
562
+ }
563
+ },
564
+ "foreignKeys": {
565
+ "sms_otp_session_user_id_user_id_fk": {
566
+ "name": "sms_otp_session_user_id_user_id_fk",
567
+ "tableFrom": "sms_otp_session",
568
+ "tableTo": "user",
569
+ "columnsFrom": ["user_id"],
570
+ "columnsTo": ["id"],
571
+ "onDelete": "cascade",
572
+ "onUpdate": "no action"
573
+ }
574
+ },
575
+ "compositePrimaryKeys": {},
576
+ "uniqueConstraints": {
577
+ "sms_otp_session_userId_unique": {
578
+ "name": "sms_otp_session_userId_unique",
579
+ "nullsNotDistinct": false,
580
+ "columns": ["user_id"]
581
+ }
582
+ },
583
+ "policies": {},
584
+ "checkConstraints": {},
585
+ "isRLSEnabled": false
586
+ },
587
+ "public.two_factor": {
588
+ "name": "two_factor",
589
+ "schema": "",
590
+ "columns": {
591
+ "id": {
592
+ "name": "id",
593
+ "type": "uuid",
594
+ "primaryKey": true,
595
+ "notNull": true,
596
+ "default": "gen_random_uuid()"
597
+ },
598
+ "secret": {
599
+ "name": "secret",
600
+ "type": "text",
601
+ "primaryKey": false,
602
+ "notNull": true
603
+ },
604
+ "backup_codes": {
605
+ "name": "backup_codes",
606
+ "type": "text",
607
+ "primaryKey": false,
608
+ "notNull": true
609
+ },
610
+ "user_id": {
611
+ "name": "user_id",
612
+ "type": "uuid",
613
+ "primaryKey": false,
614
+ "notNull": true
615
+ },
616
+ "verified": {
617
+ "name": "verified",
618
+ "type": "boolean",
619
+ "primaryKey": false,
620
+ "notNull": false,
621
+ "default": true
622
+ },
623
+ "failed_verification_count": {
624
+ "name": "failed_verification_count",
625
+ "type": "integer",
626
+ "primaryKey": false,
627
+ "notNull": true,
628
+ "default": 0
629
+ },
630
+ "locked_until": {
631
+ "name": "locked_until",
632
+ "type": "timestamp with time zone",
633
+ "primaryKey": false,
634
+ "notNull": false
635
+ }
636
+ },
637
+ "indexes": {
638
+ "two_factor_user_id_idx": {
639
+ "name": "two_factor_user_id_idx",
640
+ "columns": [
641
+ {
642
+ "expression": "user_id",
643
+ "isExpression": false,
644
+ "asc": true,
645
+ "nulls": "last"
646
+ }
647
+ ],
648
+ "isUnique": false,
649
+ "concurrently": false,
650
+ "method": "btree",
651
+ "with": {}
652
+ },
653
+ "two_factor_secret_idx": {
654
+ "name": "two_factor_secret_idx",
655
+ "columns": [
656
+ {
657
+ "expression": "secret",
658
+ "isExpression": false,
659
+ "asc": true,
660
+ "nulls": "last"
661
+ }
662
+ ],
663
+ "isUnique": false,
664
+ "concurrently": false,
665
+ "method": "btree",
666
+ "with": {}
667
+ }
668
+ },
669
+ "foreignKeys": {
670
+ "two_factor_user_id_user_id_fk": {
671
+ "name": "two_factor_user_id_user_id_fk",
672
+ "tableFrom": "two_factor",
673
+ "tableTo": "user",
674
+ "columnsFrom": ["user_id"],
675
+ "columnsTo": ["id"],
676
+ "onDelete": "cascade",
677
+ "onUpdate": "no action"
678
+ }
679
+ },
680
+ "compositePrimaryKeys": {},
681
+ "uniqueConstraints": {},
682
+ "policies": {},
683
+ "checkConstraints": {},
684
+ "isRLSEnabled": false
685
+ },
686
+ "public.user": {
687
+ "name": "user",
688
+ "schema": "",
689
+ "columns": {
690
+ "id": {
691
+ "name": "id",
692
+ "type": "uuid",
693
+ "primaryKey": true,
694
+ "notNull": true,
695
+ "default": "gen_random_uuid()"
696
+ },
697
+ "name": {
698
+ "name": "name",
699
+ "type": "text",
700
+ "primaryKey": false,
701
+ "notNull": true
702
+ },
703
+ "username": {
704
+ "name": "username",
705
+ "type": "text",
706
+ "primaryKey": false,
707
+ "notNull": true
708
+ },
709
+ "email": {
710
+ "name": "email",
711
+ "type": "text",
712
+ "primaryKey": false,
713
+ "notNull": true
714
+ },
715
+ "email_verified": {
716
+ "name": "email_verified",
717
+ "type": "boolean",
718
+ "primaryKey": false,
719
+ "notNull": true,
720
+ "default": false
721
+ },
722
+ "image": {
723
+ "name": "image",
724
+ "type": "text",
725
+ "primaryKey": false,
726
+ "notNull": false
727
+ },
728
+ "theme": {
729
+ "name": "theme",
730
+ "type": "user_theme",
731
+ "typeSchema": "public",
732
+ "primaryKey": false,
733
+ "notNull": true,
734
+ "default": "'system'"
735
+ },
736
+ "language": {
737
+ "name": "language",
738
+ "type": "text",
739
+ "primaryKey": false,
740
+ "notNull": true,
741
+ "default": "'en'"
742
+ },
743
+ "role": {
744
+ "name": "role",
745
+ "type": "text",
746
+ "primaryKey": false,
747
+ "notNull": true,
748
+ "default": "'player'"
749
+ },
750
+ "is_active": {
751
+ "name": "is_active",
752
+ "type": "boolean",
753
+ "primaryKey": false,
754
+ "notNull": true,
755
+ "default": true
756
+ },
757
+ "banned": {
758
+ "name": "banned",
759
+ "type": "boolean",
760
+ "primaryKey": false,
761
+ "notNull": false,
762
+ "default": false
763
+ },
764
+ "ban_reason": {
765
+ "name": "ban_reason",
766
+ "type": "text",
767
+ "primaryKey": false,
768
+ "notNull": false
769
+ },
770
+ "ban_expires": {
771
+ "name": "ban_expires",
772
+ "type": "timestamp with time zone",
773
+ "primaryKey": false,
774
+ "notNull": false
775
+ },
776
+ "two_factor_enabled": {
777
+ "name": "two_factor_enabled",
778
+ "type": "boolean",
779
+ "primaryKey": false,
780
+ "notNull": false,
781
+ "default": false
782
+ },
783
+ "phone_number": {
784
+ "name": "phone_number",
785
+ "type": "text",
786
+ "primaryKey": false,
787
+ "notNull": false
788
+ },
789
+ "phone_verified": {
790
+ "name": "phone_verified",
791
+ "type": "boolean",
792
+ "primaryKey": false,
793
+ "notNull": true,
794
+ "default": false
795
+ },
796
+ "phone_verified_at": {
797
+ "name": "phone_verified_at",
798
+ "type": "timestamp with time zone",
799
+ "primaryKey": false,
800
+ "notNull": false
801
+ },
802
+ "password_meets_policy": {
803
+ "name": "password_meets_policy",
804
+ "type": "boolean",
805
+ "primaryKey": false,
806
+ "notNull": true,
807
+ "default": false
808
+ },
809
+ "login_withdrawal_alerts_enabled": {
810
+ "name": "login_withdrawal_alerts_enabled",
811
+ "type": "boolean",
812
+ "primaryKey": false,
813
+ "notNull": true,
814
+ "default": false
815
+ },
816
+ "failed_login_attempts": {
817
+ "name": "failed_login_attempts",
818
+ "type": "integer",
819
+ "primaryKey": false,
820
+ "notNull": true,
821
+ "default": 0
822
+ },
823
+ "lockout_until": {
824
+ "name": "lockout_until",
825
+ "type": "timestamp with time zone",
826
+ "primaryKey": false,
827
+ "notNull": false
828
+ },
829
+ "failed_two_factor_attempts": {
830
+ "name": "failed_two_factor_attempts",
831
+ "type": "integer",
832
+ "primaryKey": false,
833
+ "notNull": true,
834
+ "default": 0
835
+ },
836
+ "two_factor_lockout_until": {
837
+ "name": "two_factor_lockout_until",
838
+ "type": "timestamp with time zone",
839
+ "primaryKey": false,
840
+ "notNull": false
841
+ },
842
+ "two_factor_lockout_count": {
843
+ "name": "two_factor_lockout_count",
844
+ "type": "integer",
845
+ "primaryKey": false,
846
+ "notNull": true,
847
+ "default": 0
848
+ },
849
+ "last_failed_two_factor_at": {
850
+ "name": "last_failed_two_factor_at",
851
+ "type": "timestamp with time zone",
852
+ "primaryKey": false,
853
+ "notNull": false
854
+ },
855
+ "lockout_count": {
856
+ "name": "lockout_count",
857
+ "type": "integer",
858
+ "primaryKey": false,
859
+ "notNull": true,
860
+ "default": 0
861
+ },
862
+ "last_lockout_at": {
863
+ "name": "last_lockout_at",
864
+ "type": "timestamp with time zone",
865
+ "primaryKey": false,
866
+ "notNull": false
867
+ },
868
+ "last_failed_login_at": {
869
+ "name": "last_failed_login_at",
870
+ "type": "timestamp with time zone",
871
+ "primaryKey": false,
872
+ "notNull": false
873
+ },
874
+ "rg_blocked": {
875
+ "name": "rg_blocked",
876
+ "type": "boolean",
877
+ "primaryKey": false,
878
+ "notNull": true,
879
+ "default": false
880
+ },
881
+ "rg_blocked_until": {
882
+ "name": "rg_blocked_until",
883
+ "type": "timestamp with time zone",
884
+ "primaryKey": false,
885
+ "notNull": false
886
+ },
887
+ "created_at": {
888
+ "name": "created_at",
889
+ "type": "timestamp with time zone",
890
+ "primaryKey": false,
891
+ "notNull": true,
892
+ "default": "now()"
893
+ },
894
+ "updated_at": {
895
+ "name": "updated_at",
896
+ "type": "timestamp with time zone",
897
+ "primaryKey": false,
898
+ "notNull": true
899
+ }
900
+ },
901
+ "indexes": {
902
+ "user_username_unique": {
903
+ "name": "user_username_unique",
904
+ "columns": [
905
+ {
906
+ "expression": "lower(\"username\")",
907
+ "asc": true,
908
+ "isExpression": true,
909
+ "nulls": "last"
910
+ }
911
+ ],
912
+ "isUnique": true,
913
+ "concurrently": false,
914
+ "method": "btree",
915
+ "with": {}
916
+ },
917
+ "user_email_trgm_idx": {
918
+ "name": "user_email_trgm_idx",
919
+ "columns": [
920
+ {
921
+ "expression": "\"email\" gin_trgm_ops",
922
+ "asc": true,
923
+ "isExpression": true,
924
+ "nulls": "last"
925
+ }
926
+ ],
927
+ "isUnique": false,
928
+ "concurrently": false,
929
+ "method": "gin",
930
+ "with": {}
931
+ },
932
+ "user_username_trgm_idx": {
933
+ "name": "user_username_trgm_idx",
934
+ "columns": [
935
+ {
936
+ "expression": "\"username\" gin_trgm_ops",
937
+ "asc": true,
938
+ "isExpression": true,
939
+ "nulls": "last"
940
+ }
941
+ ],
942
+ "isUnique": false,
943
+ "concurrently": false,
944
+ "method": "gin",
945
+ "with": {}
946
+ },
947
+ "user_created_at_idx": {
948
+ "name": "user_created_at_idx",
949
+ "columns": [
950
+ {
951
+ "expression": "created_at",
952
+ "isExpression": false,
953
+ "asc": true,
954
+ "nulls": "last"
955
+ }
956
+ ],
957
+ "isUnique": false,
958
+ "concurrently": false,
959
+ "method": "btree",
960
+ "with": {}
961
+ }
962
+ },
963
+ "foreignKeys": {},
964
+ "compositePrimaryKeys": {},
965
+ "uniqueConstraints": {
966
+ "user_email_unique": {
967
+ "name": "user_email_unique",
968
+ "nullsNotDistinct": false,
969
+ "columns": ["email"]
970
+ },
971
+ "user_phoneNumber_unique": {
972
+ "name": "user_phoneNumber_unique",
973
+ "nullsNotDistinct": false,
974
+ "columns": ["phone_number"]
975
+ }
976
+ },
977
+ "policies": {},
978
+ "checkConstraints": {},
979
+ "isRLSEnabled": false
980
+ },
981
+ "public.verification": {
982
+ "name": "verification",
983
+ "schema": "",
984
+ "columns": {
985
+ "id": {
986
+ "name": "id",
987
+ "type": "uuid",
988
+ "primaryKey": true,
989
+ "notNull": true,
990
+ "default": "gen_random_uuid()"
991
+ },
992
+ "identifier": {
993
+ "name": "identifier",
994
+ "type": "text",
995
+ "primaryKey": false,
996
+ "notNull": true
997
+ },
998
+ "value": {
999
+ "name": "value",
1000
+ "type": "text",
1001
+ "primaryKey": false,
1002
+ "notNull": true
1003
+ },
1004
+ "expires_at": {
1005
+ "name": "expires_at",
1006
+ "type": "timestamp with time zone",
1007
+ "primaryKey": false,
1008
+ "notNull": true
1009
+ },
1010
+ "created_at": {
1011
+ "name": "created_at",
1012
+ "type": "timestamp with time zone",
1013
+ "primaryKey": false,
1014
+ "notNull": true,
1015
+ "default": "now()"
1016
+ },
1017
+ "updated_at": {
1018
+ "name": "updated_at",
1019
+ "type": "timestamp with time zone",
1020
+ "primaryKey": false,
1021
+ "notNull": true
1022
+ }
1023
+ },
1024
+ "indexes": {
1025
+ "verification_identifier_idx": {
1026
+ "name": "verification_identifier_idx",
1027
+ "columns": [
1028
+ {
1029
+ "expression": "identifier",
1030
+ "isExpression": false,
1031
+ "asc": true,
1032
+ "nulls": "last"
1033
+ }
1034
+ ],
1035
+ "isUnique": false,
1036
+ "concurrently": false,
1037
+ "method": "btree",
1038
+ "with": {}
1039
+ }
1040
+ },
1041
+ "foreignKeys": {},
1042
+ "compositePrimaryKeys": {},
1043
+ "uniqueConstraints": {},
1044
+ "policies": {},
1045
+ "checkConstraints": {},
1046
+ "isRLSEnabled": false
1047
+ }
1048
+ },
1049
+ "enums": {
1050
+ "public.user_theme": {
1051
+ "name": "user_theme",
1052
+ "schema": "public",
1053
+ "values": ["light", "dark", "system"]
1054
+ }
1055
+ },
1056
+ "schemas": {},
1057
+ "sequences": {},
1058
+ "roles": {},
1059
+ "policies": {},
1060
+ "views": {},
1061
+ "_meta": {
1062
+ "columns": {},
1063
+ "schemas": {},
1064
+ "tables": {}
1065
+ }
1066
+ }