@happyvertical/smrt-users 0.40.5 → 0.40.7

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.
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "generatedAt": "2026-07-15T17:20:34.525Z",
3
+ "generatedAt": "2026-07-17T06:28:30.007Z",
4
4
  "packageName": "@happyvertical/smrt-users",
5
- "packageVersion": "0.40.5",
5
+ "packageVersion": "0.40.7",
6
6
  "sourceManifestPath": "dist/manifest.json",
7
7
  "agentDocPath": "AGENTS.md",
8
8
  "sourceHashes": {
9
- "manifest": "7a1b081438c30dfc04f80b3d388044e0e96d64be4722b293bc7b935322f5bae8",
10
- "packageJson": "9e1ade6a8a5dae914de53fa000119002b802afb348415d53601f6055f391ea75",
9
+ "manifest": "cd4163fc8f79ac5074ec759a2349ca382698a5cf7c5b235594e5f8dad151271f",
10
+ "packageJson": "653bdf644188e79742b92ab6c9c2f6d2ce931462e858fc482dd2745d708701fe",
11
11
  "agents": "60d1174c3558a153e66eeea1763ce4550231610cc1d7d537781d7ca7ef274047"
12
12
  },
13
13
  "exports": [
@@ -58,19 +58,89 @@
58
58
  "risks": [],
59
59
  "objects": [
60
60
  {
61
- "name": "AccessRequestCollection",
62
- "qualifiedName": "@happyvertical/smrt-users:AccessRequestCollection",
61
+ "name": "AccessRequest",
62
+ "qualifiedName": "@happyvertical/smrt-users:AccessRequest",
63
63
  "collection": "accessrequests",
64
64
  "tableName": "access_requests",
65
65
  "packageName": "@happyvertical/smrt-users",
66
- "extends": "SmrtCollection",
67
- "fields": [],
66
+ "extends": "SmrtObject",
67
+ "fields": [
68
+ {
69
+ "name": "email",
70
+ "type": "text",
71
+ "required": true,
72
+ "columnType": "TEXT"
73
+ },
74
+ {
75
+ "name": "name",
76
+ "type": "text",
77
+ "required": false,
78
+ "columnType": "TEXT"
79
+ },
80
+ {
81
+ "name": "status",
82
+ "type": "text",
83
+ "required": false,
84
+ "columnType": "TEXT"
85
+ },
86
+ {
87
+ "name": "source",
88
+ "type": "text",
89
+ "required": false,
90
+ "columnType": "TEXT"
91
+ },
92
+ {
93
+ "name": "requestContext",
94
+ "type": "text",
95
+ "required": false,
96
+ "columnType": "TEXT"
97
+ },
98
+ {
99
+ "name": "note",
100
+ "type": "text",
101
+ "required": false,
102
+ "columnType": "TEXT"
103
+ },
104
+ {
105
+ "name": "requestedAt",
106
+ "type": "datetime",
107
+ "required": false,
108
+ "columnType": "TIMESTAMP"
109
+ },
110
+ {
111
+ "name": "decidedAt",
112
+ "type": "datetime",
113
+ "required": false,
114
+ "columnType": "TIMESTAMP"
115
+ },
116
+ {
117
+ "name": "decidedBy",
118
+ "type": "text",
119
+ "required": false,
120
+ "columnType": "TEXT"
121
+ },
122
+ {
123
+ "name": "resultingUserId",
124
+ "type": "text",
125
+ "required": false,
126
+ "columnType": "TEXT"
127
+ },
128
+ {
129
+ "name": "tenantHint",
130
+ "type": "text",
131
+ "required": false,
132
+ "columnType": "TEXT"
133
+ }
134
+ ],
68
135
  "relationships": [],
69
136
  "methods": [
70
- "findByEmail",
71
- "findByStatus",
72
- "findOpen",
73
- "findOpenByEmail"
137
+ "getRequestContext",
138
+ "getTenantHint",
139
+ "isApproved",
140
+ "isOpen",
141
+ "isTerminal",
142
+ "setRequestContext",
143
+ "setTenantHint"
74
144
  ],
75
145
  "surfaces": [],
76
146
  "relationshipFeatures": [
@@ -80,19 +150,64 @@
80
150
  "risks": []
81
151
  },
82
152
  {
83
- "name": "UsersCliAuthRequestCollection",
84
- "qualifiedName": "@happyvertical/smrt-users:UsersCliAuthRequestCollection",
153
+ "name": "UsersCliAuthRequest",
154
+ "qualifiedName": "@happyvertical/smrt-users:UsersCliAuthRequest",
85
155
  "collection": "userscliauthrequests",
86
156
  "tableName": "users_cli_auth_requests",
87
157
  "packageName": "@happyvertical/smrt-users",
88
- "extends": "SmrtCollection",
89
- "fields": [],
90
- "relationships": [],
91
- "methods": [
92
- "deleteExpired",
93
- "findByDeviceCodeHash",
94
- "findByUserCode"
158
+ "extends": "SmrtObject",
159
+ "fields": [
160
+ {
161
+ "name": "userCode",
162
+ "type": "text",
163
+ "required": false,
164
+ "columnType": "TEXT"
165
+ },
166
+ {
167
+ "name": "deviceCodeHash",
168
+ "type": "text",
169
+ "required": false,
170
+ "columnType": "TEXT"
171
+ },
172
+ {
173
+ "name": "status",
174
+ "type": "text",
175
+ "required": false,
176
+ "columnType": "TEXT"
177
+ },
178
+ {
179
+ "name": "userId",
180
+ "type": "text",
181
+ "required": false,
182
+ "columnType": "TEXT"
183
+ },
184
+ {
185
+ "name": "tenantId",
186
+ "type": "text",
187
+ "required": false,
188
+ "columnType": "TEXT"
189
+ },
190
+ {
191
+ "name": "sessionId",
192
+ "type": "text",
193
+ "required": false,
194
+ "columnType": "TEXT"
195
+ },
196
+ {
197
+ "name": "expiresAt",
198
+ "type": "datetime",
199
+ "required": false,
200
+ "columnType": "TIMESTAMP"
201
+ },
202
+ {
203
+ "name": "approvedAt",
204
+ "type": "datetime",
205
+ "required": false,
206
+ "columnType": "TIMESTAMP"
207
+ }
95
208
  ],
209
+ "relationships": [],
210
+ "methods": [],
96
211
  "surfaces": [],
97
212
  "relationshipFeatures": [
98
213
  "uuidColumns"
@@ -101,90 +216,394 @@
101
216
  "risks": []
102
217
  },
103
218
  {
104
- "name": "GroupCollection",
105
- "qualifiedName": "@happyvertical/smrt-users:GroupCollection",
219
+ "name": "Group",
220
+ "qualifiedName": "@happyvertical/smrt-users:Group",
106
221
  "collection": "groups",
107
- "tableName": "group_collections",
222
+ "tableName": "groups",
108
223
  "packageName": "@happyvertical/smrt-users",
109
- "extends": "SmrtCollection",
110
- "fields": [],
111
- "relationships": [],
112
- "methods": [
113
- "findBySlug",
114
- "findByTenant"
224
+ "extends": "SmrtObject",
225
+ "fields": [
226
+ {
227
+ "name": "tenantId",
228
+ "type": "foreignKey",
229
+ "required": true,
230
+ "related": "Tenant",
231
+ "columnType": "UUID"
232
+ },
233
+ {
234
+ "name": "name",
235
+ "type": "text",
236
+ "required": false,
237
+ "columnType": "TEXT"
238
+ },
239
+ {
240
+ "name": "description",
241
+ "type": "text",
242
+ "required": false,
243
+ "columnType": "TEXT"
244
+ }
245
+ ],
246
+ "relationships": [
247
+ {
248
+ "name": "tenantId",
249
+ "type": "foreignKey",
250
+ "required": true,
251
+ "related": "Tenant",
252
+ "columnType": "UUID"
253
+ }
254
+ ],
255
+ "methods": [],
256
+ "surfaces": [
257
+ {
258
+ "kind": "api",
259
+ "name": "groups.list",
260
+ "operation": "list",
261
+ "objectName": "@happyvertical/smrt-users:Group",
262
+ "path": "/groups",
263
+ "method": "GET"
264
+ },
265
+ {
266
+ "kind": "api",
267
+ "name": "groups.get",
268
+ "operation": "get",
269
+ "objectName": "@happyvertical/smrt-users:Group",
270
+ "path": "/groups/[id]",
271
+ "method": "GET"
272
+ },
273
+ {
274
+ "kind": "cli",
275
+ "name": "group_list",
276
+ "operation": "list",
277
+ "objectName": "@happyvertical/smrt-users:Group"
278
+ },
279
+ {
280
+ "kind": "cli",
281
+ "name": "group_get",
282
+ "operation": "get",
283
+ "objectName": "@happyvertical/smrt-users:Group"
284
+ },
285
+ {
286
+ "kind": "cli",
287
+ "name": "group_create",
288
+ "operation": "create",
289
+ "objectName": "@happyvertical/smrt-users:Group"
290
+ },
291
+ {
292
+ "kind": "cli",
293
+ "name": "group_update",
294
+ "operation": "update",
295
+ "objectName": "@happyvertical/smrt-users:Group"
296
+ },
297
+ {
298
+ "kind": "cli",
299
+ "name": "group_delete",
300
+ "operation": "delete",
301
+ "objectName": "@happyvertical/smrt-users:Group"
302
+ },
303
+ {
304
+ "kind": "mcp",
305
+ "name": "group_list",
306
+ "operation": "list",
307
+ "objectName": "@happyvertical/smrt-users:Group"
308
+ },
309
+ {
310
+ "kind": "mcp",
311
+ "name": "group_get",
312
+ "operation": "get",
313
+ "objectName": "@happyvertical/smrt-users:Group"
314
+ }
115
315
  ],
116
- "surfaces": [],
117
316
  "relationshipFeatures": [
317
+ "foreignKey",
118
318
  "uuidColumns"
119
319
  ],
120
320
  "tags": [],
121
321
  "risks": []
122
322
  },
123
323
  {
124
- "name": "GroupMemberCollection",
125
- "qualifiedName": "@happyvertical/smrt-users:GroupMemberCollection",
324
+ "name": "GroupMember",
325
+ "qualifiedName": "@happyvertical/smrt-users:GroupMember",
126
326
  "collection": "groupmembers",
127
- "tableName": "group_member_collections",
327
+ "tableName": "group_members",
128
328
  "packageName": "@happyvertical/smrt-users",
129
- "extends": "SmrtCollection",
130
- "fields": [],
131
- "relationships": [],
132
- "methods": [
133
- "addMember",
134
- "findByGroup",
135
- "findByUser",
136
- "getGroupIds",
137
- "getGroupIdsForTenant",
138
- "getUserIds",
139
- "isMember",
140
- "removeMember"
329
+ "extends": "SmrtObject",
330
+ "fields": [
331
+ {
332
+ "name": "groupId",
333
+ "type": "foreignKey",
334
+ "required": true,
335
+ "related": "Group",
336
+ "columnType": "UUID"
337
+ },
338
+ {
339
+ "name": "userId",
340
+ "type": "foreignKey",
341
+ "required": true,
342
+ "related": "User",
343
+ "columnType": "UUID"
344
+ }
345
+ ],
346
+ "relationships": [
347
+ {
348
+ "name": "groupId",
349
+ "type": "foreignKey",
350
+ "required": true,
351
+ "related": "Group",
352
+ "columnType": "UUID"
353
+ },
354
+ {
355
+ "name": "userId",
356
+ "type": "foreignKey",
357
+ "required": true,
358
+ "related": "User",
359
+ "columnType": "UUID"
360
+ }
361
+ ],
362
+ "methods": [],
363
+ "surfaces": [
364
+ {
365
+ "kind": "api",
366
+ "name": "groupmembers.list",
367
+ "operation": "list",
368
+ "objectName": "@happyvertical/smrt-users:GroupMember",
369
+ "path": "/groupmembers",
370
+ "method": "GET"
371
+ },
372
+ {
373
+ "kind": "api",
374
+ "name": "groupmembers.get",
375
+ "operation": "get",
376
+ "objectName": "@happyvertical/smrt-users:GroupMember",
377
+ "path": "/groupmembers/[id]",
378
+ "method": "GET"
379
+ },
380
+ {
381
+ "kind": "cli",
382
+ "name": "groupmember_list",
383
+ "operation": "list",
384
+ "objectName": "@happyvertical/smrt-users:GroupMember"
385
+ },
386
+ {
387
+ "kind": "cli",
388
+ "name": "groupmember_get",
389
+ "operation": "get",
390
+ "objectName": "@happyvertical/smrt-users:GroupMember"
391
+ },
392
+ {
393
+ "kind": "cli",
394
+ "name": "groupmember_create",
395
+ "operation": "create",
396
+ "objectName": "@happyvertical/smrt-users:GroupMember"
397
+ },
398
+ {
399
+ "kind": "cli",
400
+ "name": "groupmember_update",
401
+ "operation": "update",
402
+ "objectName": "@happyvertical/smrt-users:GroupMember"
403
+ },
404
+ {
405
+ "kind": "cli",
406
+ "name": "groupmember_delete",
407
+ "operation": "delete",
408
+ "objectName": "@happyvertical/smrt-users:GroupMember"
409
+ },
410
+ {
411
+ "kind": "mcp",
412
+ "name": "groupmember_list",
413
+ "operation": "list",
414
+ "objectName": "@happyvertical/smrt-users:GroupMember"
415
+ },
416
+ {
417
+ "kind": "mcp",
418
+ "name": "groupmember_get",
419
+ "operation": "get",
420
+ "objectName": "@happyvertical/smrt-users:GroupMember"
421
+ }
141
422
  ],
142
- "surfaces": [],
143
423
  "relationshipFeatures": [
424
+ "foreignKey",
144
425
  "uuidColumns"
145
426
  ],
146
427
  "tags": [],
147
428
  "risks": []
148
429
  },
149
430
  {
150
- "name": "GroupRoleCollection",
151
- "qualifiedName": "@happyvertical/smrt-users:GroupRoleCollection",
431
+ "name": "GroupRole",
432
+ "qualifiedName": "@happyvertical/smrt-users:GroupRole",
152
433
  "collection": "grouproles",
153
- "tableName": "group_role_collections",
434
+ "tableName": "group_roles",
154
435
  "packageName": "@happyvertical/smrt-users",
155
- "extends": "SmrtCollection",
156
- "fields": [],
157
- "relationships": [],
158
- "methods": [
159
- "addRole",
160
- "findByGroup",
161
- "findByRole",
162
- "getRoleIds",
163
- "hasRole",
164
- "removeRole"
436
+ "extends": "SmrtObject",
437
+ "fields": [
438
+ {
439
+ "name": "groupId",
440
+ "type": "foreignKey",
441
+ "required": true,
442
+ "related": "Group",
443
+ "columnType": "UUID"
444
+ },
445
+ {
446
+ "name": "roleId",
447
+ "type": "foreignKey",
448
+ "required": true,
449
+ "related": "Role",
450
+ "columnType": "UUID"
451
+ }
452
+ ],
453
+ "relationships": [
454
+ {
455
+ "name": "groupId",
456
+ "type": "foreignKey",
457
+ "required": true,
458
+ "related": "Group",
459
+ "columnType": "UUID"
460
+ },
461
+ {
462
+ "name": "roleId",
463
+ "type": "foreignKey",
464
+ "required": true,
465
+ "related": "Role",
466
+ "columnType": "UUID"
467
+ }
468
+ ],
469
+ "methods": [],
470
+ "surfaces": [
471
+ {
472
+ "kind": "api",
473
+ "name": "grouproles.list",
474
+ "operation": "list",
475
+ "objectName": "@happyvertical/smrt-users:GroupRole",
476
+ "path": "/grouproles",
477
+ "method": "GET"
478
+ },
479
+ {
480
+ "kind": "api",
481
+ "name": "grouproles.get",
482
+ "operation": "get",
483
+ "objectName": "@happyvertical/smrt-users:GroupRole",
484
+ "path": "/grouproles/[id]",
485
+ "method": "GET"
486
+ },
487
+ {
488
+ "kind": "cli",
489
+ "name": "grouprole_list",
490
+ "operation": "list",
491
+ "objectName": "@happyvertical/smrt-users:GroupRole"
492
+ },
493
+ {
494
+ "kind": "cli",
495
+ "name": "grouprole_get",
496
+ "operation": "get",
497
+ "objectName": "@happyvertical/smrt-users:GroupRole"
498
+ },
499
+ {
500
+ "kind": "cli",
501
+ "name": "grouprole_create",
502
+ "operation": "create",
503
+ "objectName": "@happyvertical/smrt-users:GroupRole"
504
+ },
505
+ {
506
+ "kind": "cli",
507
+ "name": "grouprole_update",
508
+ "operation": "update",
509
+ "objectName": "@happyvertical/smrt-users:GroupRole"
510
+ },
511
+ {
512
+ "kind": "cli",
513
+ "name": "grouprole_delete",
514
+ "operation": "delete",
515
+ "objectName": "@happyvertical/smrt-users:GroupRole"
516
+ },
517
+ {
518
+ "kind": "mcp",
519
+ "name": "grouprole_list",
520
+ "operation": "list",
521
+ "objectName": "@happyvertical/smrt-users:GroupRole"
522
+ },
523
+ {
524
+ "kind": "mcp",
525
+ "name": "grouprole_get",
526
+ "operation": "get",
527
+ "objectName": "@happyvertical/smrt-users:GroupRole"
528
+ }
165
529
  ],
166
- "surfaces": [],
167
530
  "relationshipFeatures": [
531
+ "foreignKey",
168
532
  "uuidColumns"
169
533
  ],
170
534
  "tags": [],
171
535
  "risks": []
172
536
  },
173
537
  {
174
- "name": "UsersMagicLinkTokenCollection",
175
- "qualifiedName": "@happyvertical/smrt-users:UsersMagicLinkTokenCollection",
538
+ "name": "UsersMagicLinkToken",
539
+ "qualifiedName": "@happyvertical/smrt-users:UsersMagicLinkToken",
176
540
  "collection": "usersmagiclinktokens",
177
541
  "tableName": "users_magic_link_tokens",
178
542
  "packageName": "@happyvertical/smrt-users",
179
- "extends": "SmrtCollection",
180
- "fields": [],
543
+ "extends": "SmrtObject",
544
+ "fields": [
545
+ {
546
+ "name": "nonce",
547
+ "type": "text",
548
+ "required": true,
549
+ "columnType": "TEXT"
550
+ },
551
+ {
552
+ "name": "email",
553
+ "type": "text",
554
+ "required": false,
555
+ "columnType": "TEXT"
556
+ },
557
+ {
558
+ "name": "used",
559
+ "type": "boolean",
560
+ "required": false,
561
+ "columnType": "BOOLEAN"
562
+ },
563
+ {
564
+ "name": "expiresAt",
565
+ "type": "datetime",
566
+ "required": false,
567
+ "columnType": "TIMESTAMP"
568
+ }
569
+ ],
181
570
  "relationships": [],
182
571
  "methods": [
183
- "deleteExpired",
184
- "findByNonce",
185
- "markUsed"
572
+ "isExpired",
573
+ "isValid"
574
+ ],
575
+ "surfaces": [
576
+ {
577
+ "kind": "cli",
578
+ "name": "usersmagiclinktoken_list",
579
+ "operation": "list",
580
+ "objectName": "@happyvertical/smrt-users:UsersMagicLinkToken"
581
+ },
582
+ {
583
+ "kind": "cli",
584
+ "name": "usersmagiclinktoken_get",
585
+ "operation": "get",
586
+ "objectName": "@happyvertical/smrt-users:UsersMagicLinkToken"
587
+ },
588
+ {
589
+ "kind": "cli",
590
+ "name": "usersmagiclinktoken_create",
591
+ "operation": "create",
592
+ "objectName": "@happyvertical/smrt-users:UsersMagicLinkToken"
593
+ },
594
+ {
595
+ "kind": "cli",
596
+ "name": "usersmagiclinktoken_update",
597
+ "operation": "update",
598
+ "objectName": "@happyvertical/smrt-users:UsersMagicLinkToken"
599
+ },
600
+ {
601
+ "kind": "cli",
602
+ "name": "usersmagiclinktoken_delete",
603
+ "operation": "delete",
604
+ "objectName": "@happyvertical/smrt-users:UsersMagicLinkToken"
605
+ }
186
606
  ],
187
- "surfaces": [],
188
607
  "relationshipFeatures": [
189
608
  "uuidColumns"
190
609
  ],
@@ -192,188 +611,345 @@
192
611
  "risks": []
193
612
  },
194
613
  {
195
- "name": "MembershipCollection",
196
- "qualifiedName": "@happyvertical/smrt-users:MembershipCollection",
614
+ "name": "Membership",
615
+ "qualifiedName": "@happyvertical/smrt-users:Membership",
197
616
  "collection": "memberships",
198
- "tableName": "membership_collections",
617
+ "tableName": "memberships",
199
618
  "packageName": "@happyvertical/smrt-users",
200
- "extends": "SmrtCollection",
201
- "fields": [],
202
- "relationships": [],
619
+ "extends": "SmrtObject",
620
+ "fields": [
621
+ {
622
+ "name": "userId",
623
+ "type": "foreignKey",
624
+ "required": true,
625
+ "related": "User",
626
+ "columnType": "UUID"
627
+ },
628
+ {
629
+ "name": "tenantId",
630
+ "type": "foreignKey",
631
+ "required": true,
632
+ "related": "Tenant",
633
+ "columnType": "UUID"
634
+ },
635
+ {
636
+ "name": "roleId",
637
+ "type": "foreignKey",
638
+ "required": true,
639
+ "related": "Role",
640
+ "columnType": "UUID"
641
+ },
642
+ {
643
+ "name": "status",
644
+ "type": "text",
645
+ "required": false,
646
+ "columnType": "TEXT"
647
+ }
648
+ ],
649
+ "relationships": [
650
+ {
651
+ "name": "userId",
652
+ "type": "foreignKey",
653
+ "required": true,
654
+ "related": "User",
655
+ "columnType": "UUID"
656
+ },
657
+ {
658
+ "name": "tenantId",
659
+ "type": "foreignKey",
660
+ "required": true,
661
+ "related": "Tenant",
662
+ "columnType": "UUID"
663
+ },
664
+ {
665
+ "name": "roleId",
666
+ "type": "foreignKey",
667
+ "required": true,
668
+ "related": "Role",
669
+ "columnType": "UUID"
670
+ }
671
+ ],
203
672
  "methods": [
204
- "findActiveByTenant",
205
- "findActiveByUser",
206
- "findByRole",
207
- "findByStatus",
208
- "findByTenant",
209
- "findByUser",
210
- "findByUserAndTenant"
673
+ "isActive",
674
+ "isPending"
675
+ ],
676
+ "surfaces": [
677
+ {
678
+ "kind": "api",
679
+ "name": "memberships.list",
680
+ "operation": "list",
681
+ "objectName": "@happyvertical/smrt-users:Membership",
682
+ "path": "/memberships",
683
+ "method": "GET"
684
+ },
685
+ {
686
+ "kind": "api",
687
+ "name": "memberships.get",
688
+ "operation": "get",
689
+ "objectName": "@happyvertical/smrt-users:Membership",
690
+ "path": "/memberships/[id]",
691
+ "method": "GET"
692
+ },
693
+ {
694
+ "kind": "cli",
695
+ "name": "membership_list",
696
+ "operation": "list",
697
+ "objectName": "@happyvertical/smrt-users:Membership"
698
+ },
699
+ {
700
+ "kind": "cli",
701
+ "name": "membership_get",
702
+ "operation": "get",
703
+ "objectName": "@happyvertical/smrt-users:Membership"
704
+ },
705
+ {
706
+ "kind": "cli",
707
+ "name": "membership_create",
708
+ "operation": "create",
709
+ "objectName": "@happyvertical/smrt-users:Membership"
710
+ },
711
+ {
712
+ "kind": "cli",
713
+ "name": "membership_update",
714
+ "operation": "update",
715
+ "objectName": "@happyvertical/smrt-users:Membership"
716
+ },
717
+ {
718
+ "kind": "cli",
719
+ "name": "membership_delete",
720
+ "operation": "delete",
721
+ "objectName": "@happyvertical/smrt-users:Membership"
722
+ },
723
+ {
724
+ "kind": "mcp",
725
+ "name": "membership_list",
726
+ "operation": "list",
727
+ "objectName": "@happyvertical/smrt-users:Membership"
728
+ },
729
+ {
730
+ "kind": "mcp",
731
+ "name": "membership_get",
732
+ "operation": "get",
733
+ "objectName": "@happyvertical/smrt-users:Membership"
734
+ }
211
735
  ],
212
- "surfaces": [],
213
736
  "relationshipFeatures": [
737
+ "foreignKey",
214
738
  "uuidColumns"
215
739
  ],
216
740
  "tags": [],
217
741
  "risks": []
218
742
  },
219
743
  {
220
- "name": "MembershipOverrideCollection",
221
- "qualifiedName": "@happyvertical/smrt-users:MembershipOverrideCollection",
744
+ "name": "MembershipOverride",
745
+ "qualifiedName": "@happyvertical/smrt-users:MembershipOverride",
222
746
  "collection": "membershipoverrides",
223
- "tableName": "membership_override_collections",
747
+ "tableName": "membership_overrides",
224
748
  "packageName": "@happyvertical/smrt-users",
225
- "extends": "SmrtCollection",
226
- "fields": [],
227
- "relationships": [],
228
- "methods": [
229
- "denyPermission",
230
- "findByMembership",
231
- "findDenies",
232
- "findGrants",
233
- "getDeniedPermissionIds",
234
- "getGrantedPermissionIds",
235
- "grantPermission",
236
- "removeOverride",
237
- "setOverride"
749
+ "extends": "SmrtObject",
750
+ "fields": [
751
+ {
752
+ "name": "membershipId",
753
+ "type": "foreignKey",
754
+ "required": true,
755
+ "related": "Membership",
756
+ "columnType": "UUID"
757
+ },
758
+ {
759
+ "name": "permissionId",
760
+ "type": "foreignKey",
761
+ "required": true,
762
+ "related": "Permission",
763
+ "columnType": "UUID"
764
+ },
765
+ {
766
+ "name": "effect",
767
+ "type": "text",
768
+ "required": false,
769
+ "columnType": "TEXT"
770
+ }
238
771
  ],
239
- "surfaces": [],
240
- "relationshipFeatures": [
241
- "uuidColumns"
772
+ "relationships": [
773
+ {
774
+ "name": "membershipId",
775
+ "type": "foreignKey",
776
+ "required": true,
777
+ "related": "Membership",
778
+ "columnType": "UUID"
779
+ },
780
+ {
781
+ "name": "permissionId",
782
+ "type": "foreignKey",
783
+ "required": true,
784
+ "related": "Permission",
785
+ "columnType": "UUID"
786
+ }
242
787
  ],
243
- "tags": [],
244
- "risks": []
245
- },
246
- {
247
- "name": "PermissionCollection",
248
- "qualifiedName": "@happyvertical/smrt-users:PermissionCollection",
249
- "collection": "permissions",
250
- "tableName": "permission_collections",
251
- "packageName": "@happyvertical/smrt-users",
252
- "extends": "SmrtCollection",
253
- "fields": [],
254
- "relationships": [],
255
788
  "methods": [
256
- "findByCategory",
257
- "findByIds",
258
- "findBySlug",
259
- "findOrCreate",
260
- "getCategories"
261
- ],
262
- "surfaces": [],
263
- "relationshipFeatures": [
264
- "uuidColumns"
789
+ "isDeny",
790
+ "isGrant"
265
791
  ],
266
- "tags": [],
267
- "risks": []
268
- },
269
- {
270
- "name": "RoleCollection",
271
- "qualifiedName": "@happyvertical/smrt-users:RoleCollection",
272
- "collection": "roles",
273
- "tableName": "role_collections",
274
- "packageName": "@happyvertical/smrt-users",
275
- "extends": "SmrtCollection",
276
- "fields": [],
277
- "relationships": [],
278
- "methods": [
279
- "findBySlug",
280
- "findByTenant",
281
- "findSystemRoles",
282
- "findTenantRoles",
283
- "seedSystemRoles"
792
+ "surfaces": [
793
+ {
794
+ "kind": "api",
795
+ "name": "membershipoverrides.list",
796
+ "operation": "list",
797
+ "objectName": "@happyvertical/smrt-users:MembershipOverride",
798
+ "path": "/membershipoverrides",
799
+ "method": "GET"
800
+ },
801
+ {
802
+ "kind": "api",
803
+ "name": "membershipoverrides.get",
804
+ "operation": "get",
805
+ "objectName": "@happyvertical/smrt-users:MembershipOverride",
806
+ "path": "/membershipoverrides/[id]",
807
+ "method": "GET"
808
+ },
809
+ {
810
+ "kind": "cli",
811
+ "name": "membershipoverride_list",
812
+ "operation": "list",
813
+ "objectName": "@happyvertical/smrt-users:MembershipOverride"
814
+ },
815
+ {
816
+ "kind": "cli",
817
+ "name": "membershipoverride_get",
818
+ "operation": "get",
819
+ "objectName": "@happyvertical/smrt-users:MembershipOverride"
820
+ },
821
+ {
822
+ "kind": "cli",
823
+ "name": "membershipoverride_create",
824
+ "operation": "create",
825
+ "objectName": "@happyvertical/smrt-users:MembershipOverride"
826
+ },
827
+ {
828
+ "kind": "cli",
829
+ "name": "membershipoverride_update",
830
+ "operation": "update",
831
+ "objectName": "@happyvertical/smrt-users:MembershipOverride"
832
+ },
833
+ {
834
+ "kind": "cli",
835
+ "name": "membershipoverride_delete",
836
+ "operation": "delete",
837
+ "objectName": "@happyvertical/smrt-users:MembershipOverride"
838
+ },
839
+ {
840
+ "kind": "mcp",
841
+ "name": "membershipoverride_list",
842
+ "operation": "list",
843
+ "objectName": "@happyvertical/smrt-users:MembershipOverride"
844
+ },
845
+ {
846
+ "kind": "mcp",
847
+ "name": "membershipoverride_get",
848
+ "operation": "get",
849
+ "objectName": "@happyvertical/smrt-users:MembershipOverride"
850
+ }
284
851
  ],
285
- "surfaces": [],
286
852
  "relationshipFeatures": [
853
+ "foreignKey",
287
854
  "uuidColumns"
288
855
  ],
289
856
  "tags": [],
290
857
  "risks": []
291
858
  },
292
859
  {
293
- "name": "RolePermissionCollection",
294
- "qualifiedName": "@happyvertical/smrt-users:RolePermissionCollection",
295
- "collection": "rolepermissions",
296
- "tableName": "role_permission_collections",
860
+ "name": "Permission",
861
+ "qualifiedName": "@happyvertical/smrt-users:Permission",
862
+ "collection": "permissions",
863
+ "tableName": "permissions",
297
864
  "packageName": "@happyvertical/smrt-users",
298
- "extends": "SmrtCollection",
299
- "fields": [],
300
- "relationships": [],
301
- "methods": [
302
- "addPermission",
303
- "findByPermission",
304
- "findByRole",
305
- "getPermissionIds",
306
- "hasPermission",
307
- "removePermission",
308
- "seedRolePermissions"
309
- ],
310
- "surfaces": [],
311
- "relationshipFeatures": [
312
- "uuidColumns"
865
+ "extends": "SmrtObject",
866
+ "fields": [
867
+ {
868
+ "name": "name",
869
+ "type": "text",
870
+ "required": false,
871
+ "columnType": "TEXT"
872
+ },
873
+ {
874
+ "name": "description",
875
+ "type": "text",
876
+ "required": false,
877
+ "columnType": "TEXT"
878
+ },
879
+ {
880
+ "name": "category",
881
+ "type": "text",
882
+ "required": false,
883
+ "columnType": "TEXT"
884
+ }
313
885
  ],
314
- "tags": [],
315
- "risks": []
316
- },
317
- {
318
- "name": "SessionCollection",
319
- "qualifiedName": "@happyvertical/smrt-users:SessionCollection",
320
- "collection": "sessions",
321
- "tableName": "session_collections",
322
- "packageName": "@happyvertical/smrt-users",
323
- "extends": "SmrtCollection",
324
- "fields": [],
325
886
  "relationships": [],
326
887
  "methods": [
327
- "countUserSessions",
328
- "createSession",
329
- "deleteExpired",
330
- "deleteUserSessions",
331
- "findByUser",
332
- "findValidSession",
333
- "getSessionData",
334
- "revokeSession",
335
- "revokeUserSessions",
336
- "setSessionData",
337
- "setSessionTenant",
338
- "touch"
339
- ],
340
- "surfaces": [],
341
- "relationshipFeatures": [
342
- "uuidColumns"
888
+ "getAction",
889
+ "getResource",
890
+ "isValidSlug",
891
+ "parseSlug"
343
892
  ],
344
- "tags": [],
345
- "risks": []
346
- },
347
- {
348
- "name": "TenantCollection",
349
- "qualifiedName": "@happyvertical/smrt-users:TenantCollection",
350
- "collection": "tenants",
351
- "tableName": "tenant_collections",
352
- "packageName": "@happyvertical/smrt-users",
353
- "extends": "SmrtCollection",
354
- "fields": [],
355
- "relationships": [],
356
- "methods": [
357
- "create",
358
- "createChild",
359
- "findActive",
360
- "findBySlug",
361
- "findByStatus",
362
- "findChildren",
363
- "findParent",
364
- "findRoots",
365
- "getAncestors",
366
- "getAncestorsFromRoot",
367
- "getDescendants",
368
- "getSiblings",
369
- "getTree",
370
- "isAncestorOf",
371
- "isDescendantOf",
372
- "makeRoot",
373
- "moveToParent",
374
- "validateHierarchy"
893
+ "surfaces": [
894
+ {
895
+ "kind": "api",
896
+ "name": "permissions.list",
897
+ "operation": "list",
898
+ "objectName": "@happyvertical/smrt-users:Permission",
899
+ "path": "/permissions",
900
+ "method": "GET"
901
+ },
902
+ {
903
+ "kind": "api",
904
+ "name": "permissions.get",
905
+ "operation": "get",
906
+ "objectName": "@happyvertical/smrt-users:Permission",
907
+ "path": "/permissions/[id]",
908
+ "method": "GET"
909
+ },
910
+ {
911
+ "kind": "cli",
912
+ "name": "permission_list",
913
+ "operation": "list",
914
+ "objectName": "@happyvertical/smrt-users:Permission"
915
+ },
916
+ {
917
+ "kind": "cli",
918
+ "name": "permission_get",
919
+ "operation": "get",
920
+ "objectName": "@happyvertical/smrt-users:Permission"
921
+ },
922
+ {
923
+ "kind": "cli",
924
+ "name": "permission_create",
925
+ "operation": "create",
926
+ "objectName": "@happyvertical/smrt-users:Permission"
927
+ },
928
+ {
929
+ "kind": "cli",
930
+ "name": "permission_update",
931
+ "operation": "update",
932
+ "objectName": "@happyvertical/smrt-users:Permission"
933
+ },
934
+ {
935
+ "kind": "cli",
936
+ "name": "permission_delete",
937
+ "operation": "delete",
938
+ "objectName": "@happyvertical/smrt-users:Permission"
939
+ },
940
+ {
941
+ "kind": "mcp",
942
+ "name": "permission_list",
943
+ "operation": "list",
944
+ "objectName": "@happyvertical/smrt-users:Permission"
945
+ },
946
+ {
947
+ "kind": "mcp",
948
+ "name": "permission_get",
949
+ "operation": "get",
950
+ "objectName": "@happyvertical/smrt-users:Permission"
951
+ }
375
952
  ],
376
- "surfaces": [],
377
953
  "relationshipFeatures": [
378
954
  "uuidColumns"
379
955
  ],
@@ -381,277 +957,163 @@
381
957
  "risks": []
382
958
  },
383
959
  {
384
- "name": "TenantIntegrationCollection",
385
- "qualifiedName": "@happyvertical/smrt-users:TenantIntegrationCollection",
386
- "collection": "tenantintegrations",
387
- "tableName": "tenant_integrations",
388
- "packageName": "@happyvertical/smrt-users",
389
- "extends": "SmrtCollection",
390
- "fields": [],
391
- "relationships": [],
392
- "methods": [
393
- "findFor",
394
- "findOrInit",
395
- "listForTenant"
396
- ],
397
- "surfaces": [],
398
- "relationshipFeatures": [
399
- "uuidColumns"
400
- ],
401
- "tags": [],
402
- "risks": []
403
- },
404
- {
405
- "name": "TenantPermissionOverrideCollection",
406
- "qualifiedName": "@happyvertical/smrt-users:TenantPermissionOverrideCollection",
407
- "collection": "tenantpermissionoverrides",
408
- "tableName": "tenant_permission_override_collections",
409
- "packageName": "@happyvertical/smrt-users",
410
- "extends": "SmrtCollection",
411
- "fields": [],
412
- "relationships": [],
413
- "methods": [
414
- "bulkSetOverrides",
415
- "copyOverrides",
416
- "denyPermission",
417
- "findByTenant",
418
- "findDenies",
419
- "findGrants",
420
- "findInherits",
421
- "getDeniedPermissionIds",
422
- "getGrantedPermissionIds",
423
- "getOverridesByEffect",
424
- "getOverridesByEffectBatch",
425
- "grantPermission",
426
- "inheritPermission",
427
- "removeAllOverrides",
428
- "removeOverride",
429
- "setOverride"
430
- ],
431
- "surfaces": [],
432
- "relationshipFeatures": [
433
- "uuidColumns"
434
- ],
435
- "tags": [],
436
- "risks": []
437
- },
438
- {
439
- "name": "UserCollection",
440
- "qualifiedName": "@happyvertical/smrt-users:UserCollection",
441
- "collection": "users",
442
- "tableName": "user_collections",
443
- "packageName": "@happyvertical/smrt-users",
444
- "extends": "SmrtCollection",
445
- "fields": [],
446
- "relationships": [],
447
- "methods": [
448
- "findActive",
449
- "findByEmail",
450
- "findByProfile",
451
- "findByStatus",
452
- "findPending",
453
- "getOrCreateForProfile",
454
- "getOrCreateFromOidc"
455
- ],
456
- "surfaces": [],
457
- "relationshipFeatures": [
458
- "uuidColumns"
459
- ],
460
- "tags": [],
461
- "risks": []
462
- },
463
- {
464
- "name": "AccessRequest",
465
- "qualifiedName": "@happyvertical/smrt-users:AccessRequest",
466
- "collection": "accessrequests",
467
- "tableName": "access_requests",
960
+ "name": "Role",
961
+ "qualifiedName": "@happyvertical/smrt-users:Role",
962
+ "collection": "roles",
963
+ "tableName": "roles",
468
964
  "packageName": "@happyvertical/smrt-users",
469
965
  "extends": "SmrtObject",
470
966
  "fields": [
471
967
  {
472
- "name": "email",
473
- "type": "text",
474
- "required": true,
475
- "columnType": "TEXT"
476
- },
477
- {
478
- "name": "name",
479
- "type": "text",
480
- "required": false,
481
- "columnType": "TEXT"
482
- },
483
- {
484
- "name": "status",
485
- "type": "text",
486
- "required": false,
487
- "columnType": "TEXT"
488
- },
489
- {
490
- "name": "source",
491
- "type": "text",
968
+ "name": "tenantId",
969
+ "type": "foreignKey",
492
970
  "required": false,
493
- "columnType": "TEXT"
971
+ "related": "Tenant",
972
+ "columnType": "UUID"
494
973
  },
495
974
  {
496
- "name": "requestContext",
975
+ "name": "name",
497
976
  "type": "text",
498
977
  "required": false,
499
978
  "columnType": "TEXT"
500
979
  },
501
980
  {
502
- "name": "note",
981
+ "name": "description",
503
982
  "type": "text",
504
983
  "required": false,
505
984
  "columnType": "TEXT"
506
985
  },
507
986
  {
508
- "name": "requestedAt",
509
- "type": "datetime",
510
- "required": false,
511
- "columnType": "TIMESTAMP"
512
- },
513
- {
514
- "name": "decidedAt",
515
- "type": "datetime",
516
- "required": false,
517
- "columnType": "TIMESTAMP"
518
- },
519
- {
520
- "name": "decidedBy",
521
- "type": "text",
987
+ "name": "isSystem",
988
+ "type": "boolean",
522
989
  "required": false,
523
- "columnType": "TEXT"
990
+ "columnType": "BOOLEAN"
524
991
  },
525
992
  {
526
- "name": "resultingUserId",
527
- "type": "text",
993
+ "name": "inheritsToDescendants",
994
+ "type": "boolean",
528
995
  "required": false,
529
- "columnType": "TEXT"
530
- },
996
+ "columnType": "BOOLEAN"
997
+ }
998
+ ],
999
+ "relationships": [
531
1000
  {
532
- "name": "tenantHint",
533
- "type": "text",
1001
+ "name": "tenantId",
1002
+ "type": "foreignKey",
534
1003
  "required": false,
535
- "columnType": "TEXT"
1004
+ "related": "Tenant",
1005
+ "columnType": "UUID"
536
1006
  }
537
1007
  ],
538
- "relationships": [],
539
1008
  "methods": [
540
- "getRequestContext",
541
- "getTenantHint",
542
- "isApproved",
543
- "isOpen",
544
- "isTerminal",
545
- "setRequestContext",
546
- "setTenantHint"
547
- ],
548
- "surfaces": [],
549
- "relationshipFeatures": [
550
- "uuidColumns"
1009
+ "canDelete",
1010
+ "delete",
1011
+ "isSystemRole",
1012
+ "isTenantRole"
551
1013
  ],
552
- "tags": [],
553
- "risks": []
554
- },
555
- {
556
- "name": "UsersCliAuthRequest",
557
- "qualifiedName": "@happyvertical/smrt-users:UsersCliAuthRequest",
558
- "collection": "userscliauthrequests",
559
- "tableName": "users_cli_auth_requests",
560
- "packageName": "@happyvertical/smrt-users",
561
- "extends": "SmrtObject",
562
- "fields": [
1014
+ "surfaces": [
563
1015
  {
564
- "name": "userCode",
565
- "type": "text",
566
- "required": false,
567
- "columnType": "TEXT"
1016
+ "kind": "api",
1017
+ "name": "roles.list",
1018
+ "operation": "list",
1019
+ "objectName": "@happyvertical/smrt-users:Role",
1020
+ "path": "/roles",
1021
+ "method": "GET"
568
1022
  },
569
1023
  {
570
- "name": "deviceCodeHash",
571
- "type": "text",
572
- "required": false,
573
- "columnType": "TEXT"
1024
+ "kind": "api",
1025
+ "name": "roles.get",
1026
+ "operation": "get",
1027
+ "objectName": "@happyvertical/smrt-users:Role",
1028
+ "path": "/roles/[id]",
1029
+ "method": "GET"
574
1030
  },
575
1031
  {
576
- "name": "status",
577
- "type": "text",
578
- "required": false,
579
- "columnType": "TEXT"
1032
+ "kind": "cli",
1033
+ "name": "role_list",
1034
+ "operation": "list",
1035
+ "objectName": "@happyvertical/smrt-users:Role"
580
1036
  },
581
1037
  {
582
- "name": "userId",
583
- "type": "text",
584
- "required": false,
585
- "columnType": "TEXT"
1038
+ "kind": "cli",
1039
+ "name": "role_get",
1040
+ "operation": "get",
1041
+ "objectName": "@happyvertical/smrt-users:Role"
586
1042
  },
587
1043
  {
588
- "name": "tenantId",
589
- "type": "text",
590
- "required": false,
591
- "columnType": "TEXT"
1044
+ "kind": "cli",
1045
+ "name": "role_create",
1046
+ "operation": "create",
1047
+ "objectName": "@happyvertical/smrt-users:Role"
592
1048
  },
593
1049
  {
594
- "name": "sessionId",
595
- "type": "text",
596
- "required": false,
597
- "columnType": "TEXT"
1050
+ "kind": "cli",
1051
+ "name": "role_update",
1052
+ "operation": "update",
1053
+ "objectName": "@happyvertical/smrt-users:Role"
598
1054
  },
599
1055
  {
600
- "name": "expiresAt",
601
- "type": "datetime",
602
- "required": false,
603
- "columnType": "TIMESTAMP"
1056
+ "kind": "cli",
1057
+ "name": "role_delete",
1058
+ "operation": "delete",
1059
+ "objectName": "@happyvertical/smrt-users:Role"
604
1060
  },
605
1061
  {
606
- "name": "approvedAt",
607
- "type": "datetime",
608
- "required": false,
609
- "columnType": "TIMESTAMP"
1062
+ "kind": "mcp",
1063
+ "name": "role_list",
1064
+ "operation": "list",
1065
+ "objectName": "@happyvertical/smrt-users:Role"
1066
+ },
1067
+ {
1068
+ "kind": "mcp",
1069
+ "name": "role_get",
1070
+ "operation": "get",
1071
+ "objectName": "@happyvertical/smrt-users:Role"
610
1072
  }
611
1073
  ],
612
- "relationships": [],
613
- "methods": [],
614
- "surfaces": [],
615
1074
  "relationshipFeatures": [
1075
+ "foreignKey",
616
1076
  "uuidColumns"
617
1077
  ],
618
1078
  "tags": [],
619
1079
  "risks": []
620
1080
  },
621
1081
  {
622
- "name": "Group",
623
- "qualifiedName": "@happyvertical/smrt-users:Group",
624
- "collection": "groups",
625
- "tableName": "groups",
1082
+ "name": "RolePermission",
1083
+ "qualifiedName": "@happyvertical/smrt-users:RolePermission",
1084
+ "collection": "rolepermissions",
1085
+ "tableName": "role_permissions",
626
1086
  "packageName": "@happyvertical/smrt-users",
627
1087
  "extends": "SmrtObject",
628
1088
  "fields": [
629
1089
  {
630
- "name": "tenantId",
1090
+ "name": "roleId",
631
1091
  "type": "foreignKey",
632
1092
  "required": true,
633
- "related": "Tenant",
1093
+ "related": "Role",
634
1094
  "columnType": "UUID"
635
1095
  },
636
1096
  {
637
- "name": "name",
638
- "type": "text",
639
- "required": false,
640
- "columnType": "TEXT"
641
- },
642
- {
643
- "name": "description",
644
- "type": "text",
645
- "required": false,
646
- "columnType": "TEXT"
1097
+ "name": "permissionId",
1098
+ "type": "foreignKey",
1099
+ "required": true,
1100
+ "related": "Permission",
1101
+ "columnType": "UUID"
647
1102
  }
648
1103
  ],
649
1104
  "relationships": [
650
1105
  {
651
- "name": "tenantId",
1106
+ "name": "roleId",
652
1107
  "type": "foreignKey",
653
1108
  "required": true,
654
- "related": "Tenant",
1109
+ "related": "Role",
1110
+ "columnType": "UUID"
1111
+ },
1112
+ {
1113
+ "name": "permissionId",
1114
+ "type": "foreignKey",
1115
+ "required": true,
1116
+ "related": "Permission",
655
1117
  "columnType": "UUID"
656
1118
  }
657
1119
  ],
@@ -659,61 +1121,61 @@
659
1121
  "surfaces": [
660
1122
  {
661
1123
  "kind": "api",
662
- "name": "groups.list",
1124
+ "name": "rolepermissions.list",
663
1125
  "operation": "list",
664
- "objectName": "@happyvertical/smrt-users:Group",
665
- "path": "/groups",
1126
+ "objectName": "@happyvertical/smrt-users:RolePermission",
1127
+ "path": "/rolepermissions",
666
1128
  "method": "GET"
667
1129
  },
668
1130
  {
669
1131
  "kind": "api",
670
- "name": "groups.get",
1132
+ "name": "rolepermissions.get",
671
1133
  "operation": "get",
672
- "objectName": "@happyvertical/smrt-users:Group",
673
- "path": "/groups/[id]",
1134
+ "objectName": "@happyvertical/smrt-users:RolePermission",
1135
+ "path": "/rolepermissions/[id]",
674
1136
  "method": "GET"
675
1137
  },
676
1138
  {
677
1139
  "kind": "cli",
678
- "name": "group_list",
1140
+ "name": "rolepermission_list",
679
1141
  "operation": "list",
680
- "objectName": "@happyvertical/smrt-users:Group"
1142
+ "objectName": "@happyvertical/smrt-users:RolePermission"
681
1143
  },
682
1144
  {
683
1145
  "kind": "cli",
684
- "name": "group_get",
1146
+ "name": "rolepermission_get",
685
1147
  "operation": "get",
686
- "objectName": "@happyvertical/smrt-users:Group"
1148
+ "objectName": "@happyvertical/smrt-users:RolePermission"
687
1149
  },
688
1150
  {
689
1151
  "kind": "cli",
690
- "name": "group_create",
1152
+ "name": "rolepermission_create",
691
1153
  "operation": "create",
692
- "objectName": "@happyvertical/smrt-users:Group"
1154
+ "objectName": "@happyvertical/smrt-users:RolePermission"
693
1155
  },
694
1156
  {
695
1157
  "kind": "cli",
696
- "name": "group_update",
1158
+ "name": "rolepermission_update",
697
1159
  "operation": "update",
698
- "objectName": "@happyvertical/smrt-users:Group"
1160
+ "objectName": "@happyvertical/smrt-users:RolePermission"
699
1161
  },
700
1162
  {
701
1163
  "kind": "cli",
702
- "name": "group_delete",
1164
+ "name": "rolepermission_delete",
703
1165
  "operation": "delete",
704
- "objectName": "@happyvertical/smrt-users:Group"
1166
+ "objectName": "@happyvertical/smrt-users:RolePermission"
705
1167
  },
706
1168
  {
707
1169
  "kind": "mcp",
708
- "name": "group_list",
1170
+ "name": "rolepermission_list",
709
1171
  "operation": "list",
710
- "objectName": "@happyvertical/smrt-users:Group"
1172
+ "objectName": "@happyvertical/smrt-users:RolePermission"
711
1173
  },
712
1174
  {
713
1175
  "kind": "mcp",
714
- "name": "group_get",
1176
+ "name": "rolepermission_get",
715
1177
  "operation": "get",
716
- "objectName": "@happyvertical/smrt-users:Group"
1178
+ "objectName": "@happyvertical/smrt-users:RolePermission"
717
1179
  }
718
1180
  ],
719
1181
  "relationshipFeatures": [
@@ -724,103 +1186,138 @@
724
1186
  "risks": []
725
1187
  },
726
1188
  {
727
- "name": "GroupMember",
728
- "qualifiedName": "@happyvertical/smrt-users:GroupMember",
729
- "collection": "groupmembers",
730
- "tableName": "group_members",
1189
+ "name": "Session",
1190
+ "qualifiedName": "@happyvertical/smrt-users:Session",
1191
+ "collection": "sessions",
1192
+ "tableName": "sessions",
731
1193
  "packageName": "@happyvertical/smrt-users",
732
1194
  "extends": "SmrtObject",
733
1195
  "fields": [
734
1196
  {
735
- "name": "groupId",
1197
+ "name": "userId",
736
1198
  "type": "foreignKey",
737
- "required": true,
738
- "related": "Group",
1199
+ "required": false,
1200
+ "related": "User",
739
1201
  "columnType": "UUID"
740
1202
  },
741
1203
  {
742
- "name": "userId",
1204
+ "name": "tenantId",
743
1205
  "type": "foreignKey",
744
- "required": true,
745
- "related": "User",
1206
+ "required": false,
1207
+ "related": "Tenant",
746
1208
  "columnType": "UUID"
1209
+ },
1210
+ {
1211
+ "name": "status",
1212
+ "type": "text",
1213
+ "required": false,
1214
+ "columnType": "TEXT"
1215
+ },
1216
+ {
1217
+ "name": "expiresAt",
1218
+ "type": "datetime",
1219
+ "required": false,
1220
+ "columnType": "TIMESTAMP"
1221
+ },
1222
+ {
1223
+ "name": "userAgent",
1224
+ "type": "text",
1225
+ "required": false,
1226
+ "columnType": "TEXT"
1227
+ },
1228
+ {
1229
+ "name": "ipAddress",
1230
+ "type": "text",
1231
+ "required": false,
1232
+ "columnType": "TEXT"
1233
+ },
1234
+ {
1235
+ "name": "lastAccessedAt",
1236
+ "type": "datetime",
1237
+ "required": false,
1238
+ "columnType": "TIMESTAMP"
1239
+ },
1240
+ {
1241
+ "name": "data",
1242
+ "type": "json",
1243
+ "required": false,
1244
+ "columnType": "JSON"
747
1245
  }
748
1246
  ],
749
1247
  "relationships": [
750
1248
  {
751
- "name": "groupId",
1249
+ "name": "userId",
752
1250
  "type": "foreignKey",
753
- "required": true,
754
- "related": "Group",
1251
+ "required": false,
1252
+ "related": "User",
755
1253
  "columnType": "UUID"
756
1254
  },
757
1255
  {
758
- "name": "userId",
1256
+ "name": "tenantId",
759
1257
  "type": "foreignKey",
760
- "required": true,
761
- "related": "User",
1258
+ "required": false,
1259
+ "related": "Tenant",
762
1260
  "columnType": "UUID"
763
1261
  }
764
1262
  ],
765
- "methods": [],
1263
+ "methods": [
1264
+ "extend",
1265
+ "getData",
1266
+ "isExpired",
1267
+ "isRevoked",
1268
+ "isValid",
1269
+ "removeData",
1270
+ "revoke",
1271
+ "setData",
1272
+ "setTenant",
1273
+ "touch"
1274
+ ],
766
1275
  "surfaces": [
767
1276
  {
768
1277
  "kind": "api",
769
- "name": "groupmembers.list",
770
- "operation": "list",
771
- "objectName": "@happyvertical/smrt-users:GroupMember",
772
- "path": "/groupmembers",
1278
+ "name": "sessions.get",
1279
+ "operation": "get",
1280
+ "objectName": "@happyvertical/smrt-users:Session",
1281
+ "path": "/sessions/[id]",
773
1282
  "method": "GET"
774
1283
  },
775
1284
  {
776
1285
  "kind": "api",
777
- "name": "groupmembers.get",
778
- "operation": "get",
779
- "objectName": "@happyvertical/smrt-users:GroupMember",
780
- "path": "/groupmembers/[id]",
781
- "method": "GET"
1286
+ "name": "sessions.delete",
1287
+ "operation": "delete",
1288
+ "objectName": "@happyvertical/smrt-users:Session",
1289
+ "path": "/sessions/[id]",
1290
+ "method": "DELETE"
782
1291
  },
783
1292
  {
784
1293
  "kind": "cli",
785
- "name": "groupmember_list",
1294
+ "name": "session_list",
786
1295
  "operation": "list",
787
- "objectName": "@happyvertical/smrt-users:GroupMember"
1296
+ "objectName": "@happyvertical/smrt-users:Session"
788
1297
  },
789
1298
  {
790
1299
  "kind": "cli",
791
- "name": "groupmember_get",
1300
+ "name": "session_get",
792
1301
  "operation": "get",
793
- "objectName": "@happyvertical/smrt-users:GroupMember"
1302
+ "objectName": "@happyvertical/smrt-users:Session"
794
1303
  },
795
1304
  {
796
1305
  "kind": "cli",
797
- "name": "groupmember_create",
1306
+ "name": "session_create",
798
1307
  "operation": "create",
799
- "objectName": "@happyvertical/smrt-users:GroupMember"
1308
+ "objectName": "@happyvertical/smrt-users:Session"
800
1309
  },
801
1310
  {
802
1311
  "kind": "cli",
803
- "name": "groupmember_update",
1312
+ "name": "session_update",
804
1313
  "operation": "update",
805
- "objectName": "@happyvertical/smrt-users:GroupMember"
1314
+ "objectName": "@happyvertical/smrt-users:Session"
806
1315
  },
807
1316
  {
808
1317
  "kind": "cli",
809
- "name": "groupmember_delete",
1318
+ "name": "session_delete",
810
1319
  "operation": "delete",
811
- "objectName": "@happyvertical/smrt-users:GroupMember"
812
- },
813
- {
814
- "kind": "mcp",
815
- "name": "groupmember_list",
816
- "operation": "list",
817
- "objectName": "@happyvertical/smrt-users:GroupMember"
818
- },
819
- {
820
- "kind": "mcp",
821
- "name": "groupmember_get",
822
- "operation": "get",
823
- "objectName": "@happyvertical/smrt-users:GroupMember"
1320
+ "objectName": "@happyvertical/smrt-users:Session"
824
1321
  }
825
1322
  ],
826
1323
  "relationshipFeatures": [
@@ -831,103 +1328,191 @@
831
1328
  "risks": []
832
1329
  },
833
1330
  {
834
- "name": "GroupRole",
835
- "qualifiedName": "@happyvertical/smrt-users:GroupRole",
836
- "collection": "grouproles",
837
- "tableName": "group_roles",
1331
+ "name": "Tenant",
1332
+ "qualifiedName": "@happyvertical/smrt-users:Tenant",
1333
+ "collection": "tenants",
1334
+ "tableName": "tenants",
838
1335
  "packageName": "@happyvertical/smrt-users",
839
1336
  "extends": "SmrtObject",
840
1337
  "fields": [
841
1338
  {
842
- "name": "groupId",
843
- "type": "foreignKey",
844
- "required": true,
845
- "related": "Group",
846
- "columnType": "UUID"
1339
+ "name": "created_at",
1340
+ "type": "datetime",
1341
+ "required": false,
1342
+ "columnType": "TIMESTAMP"
847
1343
  },
848
1344
  {
849
- "name": "roleId",
850
- "type": "foreignKey",
851
- "required": true,
852
- "related": "Role",
853
- "columnType": "UUID"
854
- }
855
- ],
856
- "relationships": [
857
- {
858
- "name": "groupId",
859
- "type": "foreignKey",
860
- "required": true,
861
- "related": "Group",
862
- "columnType": "UUID"
1345
+ "name": "updated_at",
1346
+ "type": "datetime",
1347
+ "required": false,
1348
+ "columnType": "TIMESTAMP"
863
1349
  },
864
1350
  {
865
- "name": "roleId",
866
- "type": "foreignKey",
867
- "required": true,
868
- "related": "Role",
869
- "columnType": "UUID"
870
- }
871
- ],
872
- "methods": [],
873
- "surfaces": [
1351
+ "name": "name",
1352
+ "type": "text",
1353
+ "required": false,
1354
+ "columnType": "TEXT"
1355
+ },
874
1356
  {
875
- "kind": "api",
876
- "name": "grouproles.list",
877
- "operation": "list",
878
- "objectName": "@happyvertical/smrt-users:GroupRole",
879
- "path": "/grouproles",
880
- "method": "GET"
1357
+ "name": "status",
1358
+ "type": "text",
1359
+ "required": false,
1360
+ "columnType": "TEXT"
881
1361
  },
882
1362
  {
883
- "kind": "api",
884
- "name": "grouproles.get",
1363
+ "name": "description",
1364
+ "type": "text",
1365
+ "required": false,
1366
+ "columnType": "TEXT"
1367
+ },
1368
+ {
1369
+ "name": "parentTenantId",
1370
+ "type": "foreignKey",
1371
+ "required": false,
1372
+ "related": "Tenant",
1373
+ "columnType": "UUID"
1374
+ },
1375
+ {
1376
+ "name": "hierarchyLevel",
1377
+ "type": "integer",
1378
+ "required": false,
1379
+ "columnType": "INTEGER"
1380
+ },
1381
+ {
1382
+ "name": "hierarchyPath",
1383
+ "type": "text",
1384
+ "required": false,
1385
+ "columnType": "TEXT"
1386
+ },
1387
+ {
1388
+ "name": "cascadePermissions",
1389
+ "type": "boolean",
1390
+ "required": false,
1391
+ "columnType": "BOOLEAN"
1392
+ },
1393
+ {
1394
+ "name": "inheritPermissions",
1395
+ "type": "boolean",
1396
+ "required": false,
1397
+ "columnType": "BOOLEAN"
1398
+ }
1399
+ ],
1400
+ "relationships": [
1401
+ {
1402
+ "name": "parentTenantId",
1403
+ "type": "foreignKey",
1404
+ "required": false,
1405
+ "related": "Tenant",
1406
+ "columnType": "UUID"
1407
+ }
1408
+ ],
1409
+ "methods": [
1410
+ "_setLoadedRelationship",
1411
+ "acceptsInheritance",
1412
+ "canCascadeToChildren",
1413
+ "classifyConstraintError",
1414
+ "clearEmbeddings",
1415
+ "delete",
1416
+ "describe",
1417
+ "destroy",
1418
+ "do",
1419
+ "executeToolCall",
1420
+ "forget",
1421
+ "forgetScope",
1422
+ "generateEmbeddings",
1423
+ "getAiUsageSnapshot",
1424
+ "getAncestorIds",
1425
+ "getAvailableTools",
1426
+ "getEmbedding",
1427
+ "getFields",
1428
+ "getId",
1429
+ "getRelated",
1430
+ "getSavedId",
1431
+ "getSlug",
1432
+ "hasStaleEmbeddings",
1433
+ "initialize",
1434
+ "is",
1435
+ "isActive",
1436
+ "isRelatedLoaded",
1437
+ "isRoot",
1438
+ "isSaved",
1439
+ "isSuspended",
1440
+ "listAiUsage",
1441
+ "loadDataFromDb",
1442
+ "loadFromId",
1443
+ "loadFromSlug",
1444
+ "loadRelated",
1445
+ "loadRelatedMany",
1446
+ "markAsPersisted",
1447
+ "recall",
1448
+ "recallAll",
1449
+ "remember",
1450
+ "requireInsertOnSave",
1451
+ "resetAiUsage",
1452
+ "save",
1453
+ "summarizeAiUsage",
1454
+ "toJSON",
1455
+ "toPlainObject",
1456
+ "toPublicJSON"
1457
+ ],
1458
+ "surfaces": [
1459
+ {
1460
+ "kind": "api",
1461
+ "name": "tenants.list",
1462
+ "operation": "list",
1463
+ "objectName": "@happyvertical/smrt-users:Tenant",
1464
+ "path": "/tenants",
1465
+ "method": "GET"
1466
+ },
1467
+ {
1468
+ "kind": "api",
1469
+ "name": "tenants.get",
885
1470
  "operation": "get",
886
- "objectName": "@happyvertical/smrt-users:GroupRole",
887
- "path": "/grouproles/[id]",
1471
+ "objectName": "@happyvertical/smrt-users:Tenant",
1472
+ "path": "/tenants/[id]",
888
1473
  "method": "GET"
889
1474
  },
890
1475
  {
891
1476
  "kind": "cli",
892
- "name": "grouprole_list",
1477
+ "name": "tenant_list",
893
1478
  "operation": "list",
894
- "objectName": "@happyvertical/smrt-users:GroupRole"
1479
+ "objectName": "@happyvertical/smrt-users:Tenant"
895
1480
  },
896
1481
  {
897
1482
  "kind": "cli",
898
- "name": "grouprole_get",
1483
+ "name": "tenant_get",
899
1484
  "operation": "get",
900
- "objectName": "@happyvertical/smrt-users:GroupRole"
1485
+ "objectName": "@happyvertical/smrt-users:Tenant"
901
1486
  },
902
1487
  {
903
1488
  "kind": "cli",
904
- "name": "grouprole_create",
1489
+ "name": "tenant_create",
905
1490
  "operation": "create",
906
- "objectName": "@happyvertical/smrt-users:GroupRole"
1491
+ "objectName": "@happyvertical/smrt-users:Tenant"
907
1492
  },
908
1493
  {
909
1494
  "kind": "cli",
910
- "name": "grouprole_update",
1495
+ "name": "tenant_update",
911
1496
  "operation": "update",
912
- "objectName": "@happyvertical/smrt-users:GroupRole"
1497
+ "objectName": "@happyvertical/smrt-users:Tenant"
913
1498
  },
914
1499
  {
915
1500
  "kind": "cli",
916
- "name": "grouprole_delete",
1501
+ "name": "tenant_delete",
917
1502
  "operation": "delete",
918
- "objectName": "@happyvertical/smrt-users:GroupRole"
1503
+ "objectName": "@happyvertical/smrt-users:Tenant"
919
1504
  },
920
1505
  {
921
1506
  "kind": "mcp",
922
- "name": "grouprole_list",
1507
+ "name": "tenant_list",
923
1508
  "operation": "list",
924
- "objectName": "@happyvertical/smrt-users:GroupRole"
1509
+ "objectName": "@happyvertical/smrt-users:Tenant"
925
1510
  },
926
1511
  {
927
1512
  "kind": "mcp",
928
- "name": "grouprole_get",
1513
+ "name": "tenant_get",
929
1514
  "operation": "get",
930
- "objectName": "@happyvertical/smrt-users:GroupRole"
1515
+ "objectName": "@happyvertical/smrt-users:Tenant"
931
1516
  }
932
1517
  ],
933
1518
  "relationshipFeatures": [
@@ -938,73 +1523,125 @@
938
1523
  "risks": []
939
1524
  },
940
1525
  {
941
- "name": "UsersMagicLinkToken",
942
- "qualifiedName": "@happyvertical/smrt-users:UsersMagicLinkToken",
943
- "collection": "usersmagiclinktokens",
944
- "tableName": "users_magic_link_tokens",
1526
+ "name": "TenantIntegration",
1527
+ "qualifiedName": "@happyvertical/smrt-users:TenantIntegration",
1528
+ "collection": "tenantintegrations",
1529
+ "tableName": "tenant_integrations",
945
1530
  "packageName": "@happyvertical/smrt-users",
946
1531
  "extends": "SmrtObject",
947
1532
  "fields": [
948
1533
  {
949
- "name": "nonce",
1534
+ "name": "tenantId",
950
1535
  "type": "text",
951
1536
  "required": true,
1537
+ "columnType": "UUID"
1538
+ },
1539
+ {
1540
+ "name": "provider",
1541
+ "type": "text",
1542
+ "required": false,
952
1543
  "columnType": "TEXT"
953
1544
  },
954
1545
  {
955
- "name": "email",
1546
+ "name": "externalIds",
956
1547
  "type": "text",
957
1548
  "required": false,
958
1549
  "columnType": "TEXT"
959
1550
  },
960
1551
  {
961
- "name": "used",
962
- "type": "boolean",
1552
+ "name": "status",
1553
+ "type": "text",
963
1554
  "required": false,
964
- "columnType": "BOOLEAN"
1555
+ "columnType": "TEXT"
965
1556
  },
966
1557
  {
967
- "name": "expiresAt",
1558
+ "name": "lastCheckedAt",
968
1559
  "type": "datetime",
969
1560
  "required": false,
970
1561
  "columnType": "TIMESTAMP"
1562
+ },
1563
+ {
1564
+ "name": "lastCheckSummary",
1565
+ "type": "text",
1566
+ "required": false,
1567
+ "columnType": "TEXT"
1568
+ },
1569
+ {
1570
+ "name": "lastError",
1571
+ "type": "text",
1572
+ "required": false,
1573
+ "columnType": "TEXT"
971
1574
  }
972
1575
  ],
973
1576
  "relationships": [],
974
1577
  "methods": [
975
- "isExpired",
976
- "isValid"
1578
+ "getExternalId",
1579
+ "getExternalIds",
1580
+ "getLastCheckSummary",
1581
+ "initialize",
1582
+ "recordDoctorRun",
1583
+ "setExternalId",
1584
+ "setExternalIds",
1585
+ "setLastCheckSummary"
977
1586
  ],
978
1587
  "surfaces": [
1588
+ {
1589
+ "kind": "api",
1590
+ "name": "tenantintegrations.list",
1591
+ "operation": "list",
1592
+ "objectName": "@happyvertical/smrt-users:TenantIntegration",
1593
+ "path": "/tenantintegrations",
1594
+ "method": "GET"
1595
+ },
1596
+ {
1597
+ "kind": "api",
1598
+ "name": "tenantintegrations.get",
1599
+ "operation": "get",
1600
+ "objectName": "@happyvertical/smrt-users:TenantIntegration",
1601
+ "path": "/tenantintegrations/[id]",
1602
+ "method": "GET"
1603
+ },
979
1604
  {
980
1605
  "kind": "cli",
981
- "name": "usersmagiclinktoken_list",
1606
+ "name": "tenantintegration_list",
982
1607
  "operation": "list",
983
- "objectName": "@happyvertical/smrt-users:UsersMagicLinkToken"
1608
+ "objectName": "@happyvertical/smrt-users:TenantIntegration"
984
1609
  },
985
1610
  {
986
1611
  "kind": "cli",
987
- "name": "usersmagiclinktoken_get",
1612
+ "name": "tenantintegration_get",
988
1613
  "operation": "get",
989
- "objectName": "@happyvertical/smrt-users:UsersMagicLinkToken"
1614
+ "objectName": "@happyvertical/smrt-users:TenantIntegration"
990
1615
  },
991
1616
  {
992
1617
  "kind": "cli",
993
- "name": "usersmagiclinktoken_create",
1618
+ "name": "tenantintegration_create",
994
1619
  "operation": "create",
995
- "objectName": "@happyvertical/smrt-users:UsersMagicLinkToken"
1620
+ "objectName": "@happyvertical/smrt-users:TenantIntegration"
996
1621
  },
997
1622
  {
998
1623
  "kind": "cli",
999
- "name": "usersmagiclinktoken_update",
1624
+ "name": "tenantintegration_update",
1000
1625
  "operation": "update",
1001
- "objectName": "@happyvertical/smrt-users:UsersMagicLinkToken"
1626
+ "objectName": "@happyvertical/smrt-users:TenantIntegration"
1002
1627
  },
1003
1628
  {
1004
1629
  "kind": "cli",
1005
- "name": "usersmagiclinktoken_delete",
1630
+ "name": "tenantintegration_delete",
1006
1631
  "operation": "delete",
1007
- "objectName": "@happyvertical/smrt-users:UsersMagicLinkToken"
1632
+ "objectName": "@happyvertical/smrt-users:TenantIntegration"
1633
+ },
1634
+ {
1635
+ "kind": "mcp",
1636
+ "name": "tenantintegration_list",
1637
+ "operation": "list",
1638
+ "objectName": "@happyvertical/smrt-users:TenantIntegration"
1639
+ },
1640
+ {
1641
+ "kind": "mcp",
1642
+ "name": "tenantintegration_get",
1643
+ "operation": "get",
1644
+ "objectName": "@happyvertical/smrt-users:TenantIntegration"
1008
1645
  }
1009
1646
  ],
1010
1647
  "relationshipFeatures": [
@@ -1014,20 +1651,13 @@
1014
1651
  "risks": []
1015
1652
  },
1016
1653
  {
1017
- "name": "Membership",
1018
- "qualifiedName": "@happyvertical/smrt-users:Membership",
1019
- "collection": "memberships",
1020
- "tableName": "memberships",
1654
+ "name": "TenantPermissionOverride",
1655
+ "qualifiedName": "@happyvertical/smrt-users:TenantPermissionOverride",
1656
+ "collection": "tenantpermissionoverrides",
1657
+ "tableName": "tenant_permission_overrides",
1021
1658
  "packageName": "@happyvertical/smrt-users",
1022
1659
  "extends": "SmrtObject",
1023
1660
  "fields": [
1024
- {
1025
- "name": "userId",
1026
- "type": "foreignKey",
1027
- "required": true,
1028
- "related": "User",
1029
- "columnType": "UUID"
1030
- },
1031
1661
  {
1032
1662
  "name": "tenantId",
1033
1663
  "type": "foreignKey",
@@ -1036,27 +1666,20 @@
1036
1666
  "columnType": "UUID"
1037
1667
  },
1038
1668
  {
1039
- "name": "roleId",
1669
+ "name": "permissionId",
1040
1670
  "type": "foreignKey",
1041
1671
  "required": true,
1042
- "related": "Role",
1672
+ "related": "Permission",
1043
1673
  "columnType": "UUID"
1044
1674
  },
1045
1675
  {
1046
- "name": "status",
1676
+ "name": "effect",
1047
1677
  "type": "text",
1048
1678
  "required": false,
1049
1679
  "columnType": "TEXT"
1050
1680
  }
1051
1681
  ],
1052
1682
  "relationships": [
1053
- {
1054
- "name": "userId",
1055
- "type": "foreignKey",
1056
- "required": true,
1057
- "related": "User",
1058
- "columnType": "UUID"
1059
- },
1060
1683
  {
1061
1684
  "name": "tenantId",
1062
1685
  "type": "foreignKey",
@@ -1065,75 +1688,77 @@
1065
1688
  "columnType": "UUID"
1066
1689
  },
1067
1690
  {
1068
- "name": "roleId",
1691
+ "name": "permissionId",
1069
1692
  "type": "foreignKey",
1070
1693
  "required": true,
1071
- "related": "Role",
1694
+ "related": "Permission",
1072
1695
  "columnType": "UUID"
1073
1696
  }
1074
1697
  ],
1075
1698
  "methods": [
1076
- "isActive",
1077
- "isPending"
1699
+ "hasExplicitEffect",
1700
+ "isDeny",
1701
+ "isGrant",
1702
+ "isInherit"
1078
1703
  ],
1079
1704
  "surfaces": [
1080
1705
  {
1081
1706
  "kind": "api",
1082
- "name": "memberships.list",
1707
+ "name": "tenantpermissionoverrides.list",
1083
1708
  "operation": "list",
1084
- "objectName": "@happyvertical/smrt-users:Membership",
1085
- "path": "/memberships",
1709
+ "objectName": "@happyvertical/smrt-users:TenantPermissionOverride",
1710
+ "path": "/tenantpermissionoverrides",
1086
1711
  "method": "GET"
1087
1712
  },
1088
1713
  {
1089
1714
  "kind": "api",
1090
- "name": "memberships.get",
1715
+ "name": "tenantpermissionoverrides.get",
1091
1716
  "operation": "get",
1092
- "objectName": "@happyvertical/smrt-users:Membership",
1093
- "path": "/memberships/[id]",
1717
+ "objectName": "@happyvertical/smrt-users:TenantPermissionOverride",
1718
+ "path": "/tenantpermissionoverrides/[id]",
1094
1719
  "method": "GET"
1095
1720
  },
1096
1721
  {
1097
1722
  "kind": "cli",
1098
- "name": "membership_list",
1723
+ "name": "tenantpermissionoverride_list",
1099
1724
  "operation": "list",
1100
- "objectName": "@happyvertical/smrt-users:Membership"
1725
+ "objectName": "@happyvertical/smrt-users:TenantPermissionOverride"
1101
1726
  },
1102
1727
  {
1103
1728
  "kind": "cli",
1104
- "name": "membership_get",
1729
+ "name": "tenantpermissionoverride_get",
1105
1730
  "operation": "get",
1106
- "objectName": "@happyvertical/smrt-users:Membership"
1731
+ "objectName": "@happyvertical/smrt-users:TenantPermissionOverride"
1107
1732
  },
1108
1733
  {
1109
1734
  "kind": "cli",
1110
- "name": "membership_create",
1735
+ "name": "tenantpermissionoverride_create",
1111
1736
  "operation": "create",
1112
- "objectName": "@happyvertical/smrt-users:Membership"
1737
+ "objectName": "@happyvertical/smrt-users:TenantPermissionOverride"
1113
1738
  },
1114
1739
  {
1115
1740
  "kind": "cli",
1116
- "name": "membership_update",
1741
+ "name": "tenantpermissionoverride_update",
1117
1742
  "operation": "update",
1118
- "objectName": "@happyvertical/smrt-users:Membership"
1743
+ "objectName": "@happyvertical/smrt-users:TenantPermissionOverride"
1119
1744
  },
1120
1745
  {
1121
1746
  "kind": "cli",
1122
- "name": "membership_delete",
1747
+ "name": "tenantpermissionoverride_delete",
1123
1748
  "operation": "delete",
1124
- "objectName": "@happyvertical/smrt-users:Membership"
1749
+ "objectName": "@happyvertical/smrt-users:TenantPermissionOverride"
1125
1750
  },
1126
1751
  {
1127
1752
  "kind": "mcp",
1128
- "name": "membership_list",
1753
+ "name": "tenantpermissionoverride_list",
1129
1754
  "operation": "list",
1130
- "objectName": "@happyvertical/smrt-users:Membership"
1755
+ "objectName": "@happyvertical/smrt-users:TenantPermissionOverride"
1131
1756
  },
1132
1757
  {
1133
1758
  "kind": "mcp",
1134
- "name": "membership_get",
1759
+ "name": "tenantpermissionoverride_get",
1135
1760
  "operation": "get",
1136
- "objectName": "@happyvertical/smrt-users:Membership"
1761
+ "objectName": "@happyvertical/smrt-users:TenantPermissionOverride"
1137
1762
  }
1138
1763
  ],
1139
1764
  "relationshipFeatures": [
@@ -1144,909 +1769,380 @@
1144
1769
  "risks": []
1145
1770
  },
1146
1771
  {
1147
- "name": "MembershipOverride",
1148
- "qualifiedName": "@happyvertical/smrt-users:MembershipOverride",
1149
- "collection": "membershipoverrides",
1150
- "tableName": "membership_overrides",
1772
+ "name": "User",
1773
+ "qualifiedName": "@happyvertical/smrt-users:User",
1774
+ "collection": "users",
1775
+ "tableName": "users",
1151
1776
  "packageName": "@happyvertical/smrt-users",
1152
1777
  "extends": "SmrtObject",
1153
1778
  "fields": [
1154
1779
  {
1155
- "name": "membershipId",
1156
- "type": "foreignKey",
1157
- "required": true,
1158
- "related": "Membership",
1159
- "columnType": "UUID"
1160
- },
1161
- {
1162
- "name": "permissionId",
1163
- "type": "foreignKey",
1164
- "required": true,
1165
- "related": "Permission",
1780
+ "name": "profileId",
1781
+ "type": "crossPackageRef",
1782
+ "required": false,
1783
+ "related": "@happyvertical/smrt-profiles:Profile",
1166
1784
  "columnType": "UUID"
1167
1785
  },
1168
1786
  {
1169
- "name": "effect",
1787
+ "name": "email",
1170
1788
  "type": "text",
1171
1789
  "required": false,
1172
1790
  "columnType": "TEXT"
1173
- }
1174
- ],
1175
- "relationships": [
1176
- {
1177
- "name": "membershipId",
1178
- "type": "foreignKey",
1179
- "required": true,
1180
- "related": "Membership",
1181
- "columnType": "UUID"
1182
- },
1183
- {
1184
- "name": "permissionId",
1185
- "type": "foreignKey",
1186
- "required": true,
1187
- "related": "Permission",
1188
- "columnType": "UUID"
1189
- }
1190
- ],
1191
- "methods": [
1192
- "isDeny",
1193
- "isGrant"
1194
- ],
1195
- "surfaces": [
1196
- {
1197
- "kind": "api",
1198
- "name": "membershipoverrides.list",
1199
- "operation": "list",
1200
- "objectName": "@happyvertical/smrt-users:MembershipOverride",
1201
- "path": "/membershipoverrides",
1202
- "method": "GET"
1203
- },
1204
- {
1205
- "kind": "api",
1206
- "name": "membershipoverrides.get",
1207
- "operation": "get",
1208
- "objectName": "@happyvertical/smrt-users:MembershipOverride",
1209
- "path": "/membershipoverrides/[id]",
1210
- "method": "GET"
1211
- },
1212
- {
1213
- "kind": "cli",
1214
- "name": "membershipoverride_list",
1215
- "operation": "list",
1216
- "objectName": "@happyvertical/smrt-users:MembershipOverride"
1217
- },
1218
- {
1219
- "kind": "cli",
1220
- "name": "membershipoverride_get",
1221
- "operation": "get",
1222
- "objectName": "@happyvertical/smrt-users:MembershipOverride"
1223
- },
1224
- {
1225
- "kind": "cli",
1226
- "name": "membershipoverride_create",
1227
- "operation": "create",
1228
- "objectName": "@happyvertical/smrt-users:MembershipOverride"
1229
- },
1230
- {
1231
- "kind": "cli",
1232
- "name": "membershipoverride_update",
1233
- "operation": "update",
1234
- "objectName": "@happyvertical/smrt-users:MembershipOverride"
1235
1791
  },
1236
1792
  {
1237
- "kind": "cli",
1238
- "name": "membershipoverride_delete",
1239
- "operation": "delete",
1240
- "objectName": "@happyvertical/smrt-users:MembershipOverride"
1241
- },
1242
- {
1243
- "kind": "mcp",
1244
- "name": "membershipoverride_list",
1245
- "operation": "list",
1246
- "objectName": "@happyvertical/smrt-users:MembershipOverride"
1247
- },
1248
- {
1249
- "kind": "mcp",
1250
- "name": "membershipoverride_get",
1251
- "operation": "get",
1252
- "objectName": "@happyvertical/smrt-users:MembershipOverride"
1253
- }
1254
- ],
1255
- "relationshipFeatures": [
1256
- "foreignKey",
1257
- "uuidColumns"
1258
- ],
1259
- "tags": [],
1260
- "risks": []
1261
- },
1262
- {
1263
- "name": "Permission",
1264
- "qualifiedName": "@happyvertical/smrt-users:Permission",
1265
- "collection": "permissions",
1266
- "tableName": "permissions",
1267
- "packageName": "@happyvertical/smrt-users",
1268
- "extends": "SmrtObject",
1269
- "fields": [
1270
- {
1271
- "name": "name",
1793
+ "name": "emailKey",
1272
1794
  "type": "text",
1273
1795
  "required": false,
1274
1796
  "columnType": "TEXT"
1275
1797
  },
1276
1798
  {
1277
- "name": "description",
1799
+ "name": "status",
1278
1800
  "type": "text",
1279
1801
  "required": false,
1280
1802
  "columnType": "TEXT"
1281
1803
  },
1282
1804
  {
1283
- "name": "category",
1284
- "type": "text",
1805
+ "name": "lastLoginAt",
1806
+ "type": "datetime",
1285
1807
  "required": false,
1286
- "columnType": "TEXT"
1808
+ "columnType": "TIMESTAMP"
1809
+ }
1810
+ ],
1811
+ "relationships": [
1812
+ {
1813
+ "name": "profileId",
1814
+ "type": "crossPackageRef",
1815
+ "required": false,
1816
+ "related": "@happyvertical/smrt-profiles:Profile",
1817
+ "columnType": "UUID"
1287
1818
  }
1288
1819
  ],
1289
- "relationships": [],
1290
1820
  "methods": [
1291
- "getAction",
1292
- "getResource",
1293
- "isValidSlug",
1294
- "parseSlug"
1821
+ "hasValidEmail",
1822
+ "isActive",
1823
+ "isPending",
1824
+ "isSuspended",
1825
+ "recordLogin",
1826
+ "save"
1295
1827
  ],
1296
1828
  "surfaces": [
1297
1829
  {
1298
1830
  "kind": "api",
1299
- "name": "permissions.list",
1831
+ "name": "users.list",
1300
1832
  "operation": "list",
1301
- "objectName": "@happyvertical/smrt-users:Permission",
1302
- "path": "/permissions",
1833
+ "objectName": "@happyvertical/smrt-users:User",
1834
+ "path": "/users",
1303
1835
  "method": "GET"
1304
1836
  },
1305
1837
  {
1306
1838
  "kind": "api",
1307
- "name": "permissions.get",
1839
+ "name": "users.get",
1308
1840
  "operation": "get",
1309
- "objectName": "@happyvertical/smrt-users:Permission",
1310
- "path": "/permissions/[id]",
1841
+ "objectName": "@happyvertical/smrt-users:User",
1842
+ "path": "/users/[id]",
1311
1843
  "method": "GET"
1312
1844
  },
1313
1845
  {
1314
1846
  "kind": "cli",
1315
- "name": "permission_list",
1847
+ "name": "user_list",
1316
1848
  "operation": "list",
1317
- "objectName": "@happyvertical/smrt-users:Permission"
1849
+ "objectName": "@happyvertical/smrt-users:User"
1318
1850
  },
1319
1851
  {
1320
1852
  "kind": "cli",
1321
- "name": "permission_get",
1853
+ "name": "user_get",
1322
1854
  "operation": "get",
1323
- "objectName": "@happyvertical/smrt-users:Permission"
1855
+ "objectName": "@happyvertical/smrt-users:User"
1324
1856
  },
1325
1857
  {
1326
1858
  "kind": "cli",
1327
- "name": "permission_create",
1859
+ "name": "user_create",
1328
1860
  "operation": "create",
1329
- "objectName": "@happyvertical/smrt-users:Permission"
1861
+ "objectName": "@happyvertical/smrt-users:User"
1330
1862
  },
1331
1863
  {
1332
1864
  "kind": "cli",
1333
- "name": "permission_update",
1865
+ "name": "user_update",
1334
1866
  "operation": "update",
1335
- "objectName": "@happyvertical/smrt-users:Permission"
1867
+ "objectName": "@happyvertical/smrt-users:User"
1336
1868
  },
1337
1869
  {
1338
1870
  "kind": "cli",
1339
- "name": "permission_delete",
1871
+ "name": "user_delete",
1340
1872
  "operation": "delete",
1341
- "objectName": "@happyvertical/smrt-users:Permission"
1873
+ "objectName": "@happyvertical/smrt-users:User"
1342
1874
  },
1343
1875
  {
1344
1876
  "kind": "mcp",
1345
- "name": "permission_list",
1877
+ "name": "user_list",
1346
1878
  "operation": "list",
1347
- "objectName": "@happyvertical/smrt-users:Permission"
1879
+ "objectName": "@happyvertical/smrt-users:User"
1348
1880
  },
1349
1881
  {
1350
1882
  "kind": "mcp",
1351
- "name": "permission_get",
1883
+ "name": "user_get",
1352
1884
  "operation": "get",
1353
- "objectName": "@happyvertical/smrt-users:Permission"
1885
+ "objectName": "@happyvertical/smrt-users:User"
1354
1886
  }
1355
1887
  ],
1356
1888
  "relationshipFeatures": [
1889
+ "crossPackageRef",
1357
1890
  "uuidColumns"
1358
1891
  ],
1359
1892
  "tags": [],
1360
1893
  "risks": []
1361
1894
  },
1362
1895
  {
1363
- "name": "Role",
1364
- "qualifiedName": "@happyvertical/smrt-users:Role",
1365
- "collection": "roles",
1366
- "tableName": "roles",
1367
- "packageName": "@happyvertical/smrt-users",
1368
- "extends": "SmrtObject",
1369
- "fields": [
1370
- {
1371
- "name": "tenantId",
1372
- "type": "foreignKey",
1373
- "required": false,
1374
- "related": "Tenant",
1375
- "columnType": "UUID"
1376
- },
1377
- {
1378
- "name": "name",
1379
- "type": "text",
1380
- "required": false,
1381
- "columnType": "TEXT"
1382
- },
1383
- {
1384
- "name": "description",
1385
- "type": "text",
1386
- "required": false,
1387
- "columnType": "TEXT"
1388
- },
1389
- {
1390
- "name": "isSystem",
1391
- "type": "boolean",
1392
- "required": false,
1393
- "columnType": "BOOLEAN"
1394
- },
1395
- {
1396
- "name": "inheritsToDescendants",
1397
- "type": "boolean",
1398
- "required": false,
1399
- "columnType": "BOOLEAN"
1400
- }
1401
- ],
1402
- "relationships": [
1403
- {
1404
- "name": "tenantId",
1405
- "type": "foreignKey",
1406
- "required": false,
1407
- "related": "Tenant",
1408
- "columnType": "UUID"
1409
- }
1410
- ],
1896
+ "name": "AccessRequestCollection",
1897
+ "qualifiedName": "@happyvertical/smrt-users:AccessRequestCollection",
1898
+ "collection": "accessrequests",
1899
+ "tableName": "access_requests",
1900
+ "packageName": "@happyvertical/smrt-users",
1901
+ "extends": "SmrtCollection",
1902
+ "fields": [],
1903
+ "relationships": [],
1411
1904
  "methods": [
1412
- "canDelete",
1413
- "delete",
1414
- "isSystemRole",
1415
- "isTenantRole"
1416
- ],
1417
- "surfaces": [
1418
- {
1419
- "kind": "api",
1420
- "name": "roles.list",
1421
- "operation": "list",
1422
- "objectName": "@happyvertical/smrt-users:Role",
1423
- "path": "/roles",
1424
- "method": "GET"
1425
- },
1426
- {
1427
- "kind": "api",
1428
- "name": "roles.get",
1429
- "operation": "get",
1430
- "objectName": "@happyvertical/smrt-users:Role",
1431
- "path": "/roles/[id]",
1432
- "method": "GET"
1433
- },
1434
- {
1435
- "kind": "cli",
1436
- "name": "role_list",
1437
- "operation": "list",
1438
- "objectName": "@happyvertical/smrt-users:Role"
1439
- },
1440
- {
1441
- "kind": "cli",
1442
- "name": "role_get",
1443
- "operation": "get",
1444
- "objectName": "@happyvertical/smrt-users:Role"
1445
- },
1446
- {
1447
- "kind": "cli",
1448
- "name": "role_create",
1449
- "operation": "create",
1450
- "objectName": "@happyvertical/smrt-users:Role"
1451
- },
1452
- {
1453
- "kind": "cli",
1454
- "name": "role_update",
1455
- "operation": "update",
1456
- "objectName": "@happyvertical/smrt-users:Role"
1457
- },
1458
- {
1459
- "kind": "cli",
1460
- "name": "role_delete",
1461
- "operation": "delete",
1462
- "objectName": "@happyvertical/smrt-users:Role"
1463
- },
1464
- {
1465
- "kind": "mcp",
1466
- "name": "role_list",
1467
- "operation": "list",
1468
- "objectName": "@happyvertical/smrt-users:Role"
1469
- },
1470
- {
1471
- "kind": "mcp",
1472
- "name": "role_get",
1473
- "operation": "get",
1474
- "objectName": "@happyvertical/smrt-users:Role"
1475
- }
1905
+ "findByEmail",
1906
+ "findByStatus",
1907
+ "findOpen",
1908
+ "findOpenByEmail"
1476
1909
  ],
1910
+ "surfaces": [],
1477
1911
  "relationshipFeatures": [
1478
- "foreignKey",
1479
1912
  "uuidColumns"
1480
1913
  ],
1481
1914
  "tags": [],
1482
1915
  "risks": []
1483
1916
  },
1484
1917
  {
1485
- "name": "RolePermission",
1486
- "qualifiedName": "@happyvertical/smrt-users:RolePermission",
1487
- "collection": "rolepermissions",
1488
- "tableName": "role_permissions",
1918
+ "name": "UsersCliAuthRequestCollection",
1919
+ "qualifiedName": "@happyvertical/smrt-users:UsersCliAuthRequestCollection",
1920
+ "collection": "userscliauthrequests",
1921
+ "tableName": "users_cli_auth_requests",
1489
1922
  "packageName": "@happyvertical/smrt-users",
1490
- "extends": "SmrtObject",
1491
- "fields": [
1492
- {
1493
- "name": "roleId",
1494
- "type": "foreignKey",
1495
- "required": true,
1496
- "related": "Role",
1497
- "columnType": "UUID"
1498
- },
1499
- {
1500
- "name": "permissionId",
1501
- "type": "foreignKey",
1502
- "required": true,
1503
- "related": "Permission",
1504
- "columnType": "UUID"
1505
- }
1923
+ "extends": "SmrtCollection",
1924
+ "fields": [],
1925
+ "relationships": [],
1926
+ "methods": [
1927
+ "deleteExpired",
1928
+ "findByDeviceCodeHash",
1929
+ "findByUserCode"
1506
1930
  ],
1507
- "relationships": [
1508
- {
1509
- "name": "roleId",
1510
- "type": "foreignKey",
1511
- "required": true,
1512
- "related": "Role",
1513
- "columnType": "UUID"
1514
- },
1515
- {
1516
- "name": "permissionId",
1517
- "type": "foreignKey",
1518
- "required": true,
1519
- "related": "Permission",
1520
- "columnType": "UUID"
1521
- }
1931
+ "surfaces": [],
1932
+ "relationshipFeatures": [
1933
+ "uuidColumns"
1522
1934
  ],
1523
- "methods": [],
1524
- "surfaces": [
1525
- {
1526
- "kind": "api",
1527
- "name": "rolepermissions.list",
1528
- "operation": "list",
1529
- "objectName": "@happyvertical/smrt-users:RolePermission",
1530
- "path": "/rolepermissions",
1531
- "method": "GET"
1532
- },
1533
- {
1534
- "kind": "api",
1535
- "name": "rolepermissions.get",
1536
- "operation": "get",
1537
- "objectName": "@happyvertical/smrt-users:RolePermission",
1538
- "path": "/rolepermissions/[id]",
1539
- "method": "GET"
1540
- },
1541
- {
1542
- "kind": "cli",
1543
- "name": "rolepermission_list",
1544
- "operation": "list",
1545
- "objectName": "@happyvertical/smrt-users:RolePermission"
1546
- },
1547
- {
1548
- "kind": "cli",
1549
- "name": "rolepermission_get",
1550
- "operation": "get",
1551
- "objectName": "@happyvertical/smrt-users:RolePermission"
1552
- },
1553
- {
1554
- "kind": "cli",
1555
- "name": "rolepermission_create",
1556
- "operation": "create",
1557
- "objectName": "@happyvertical/smrt-users:RolePermission"
1558
- },
1559
- {
1560
- "kind": "cli",
1561
- "name": "rolepermission_update",
1562
- "operation": "update",
1563
- "objectName": "@happyvertical/smrt-users:RolePermission"
1564
- },
1565
- {
1566
- "kind": "cli",
1567
- "name": "rolepermission_delete",
1568
- "operation": "delete",
1569
- "objectName": "@happyvertical/smrt-users:RolePermission"
1570
- },
1571
- {
1572
- "kind": "mcp",
1573
- "name": "rolepermission_list",
1574
- "operation": "list",
1575
- "objectName": "@happyvertical/smrt-users:RolePermission"
1576
- },
1577
- {
1578
- "kind": "mcp",
1579
- "name": "rolepermission_get",
1580
- "operation": "get",
1581
- "objectName": "@happyvertical/smrt-users:RolePermission"
1582
- }
1935
+ "tags": [],
1936
+ "risks": []
1937
+ },
1938
+ {
1939
+ "name": "GroupCollection",
1940
+ "qualifiedName": "@happyvertical/smrt-users:GroupCollection",
1941
+ "collection": "groups",
1942
+ "tableName": "group_collections",
1943
+ "packageName": "@happyvertical/smrt-users",
1944
+ "extends": "SmrtCollection",
1945
+ "fields": [],
1946
+ "relationships": [],
1947
+ "methods": [
1948
+ "findBySlug",
1949
+ "findByTenant"
1583
1950
  ],
1951
+ "surfaces": [],
1584
1952
  "relationshipFeatures": [
1585
- "foreignKey",
1586
1953
  "uuidColumns"
1587
1954
  ],
1588
1955
  "tags": [],
1589
1956
  "risks": []
1590
1957
  },
1591
1958
  {
1592
- "name": "Session",
1593
- "qualifiedName": "@happyvertical/smrt-users:Session",
1594
- "collection": "sessions",
1595
- "tableName": "sessions",
1959
+ "name": "GroupMemberCollection",
1960
+ "qualifiedName": "@happyvertical/smrt-users:GroupMemberCollection",
1961
+ "collection": "groupmembers",
1962
+ "tableName": "group_member_collections",
1596
1963
  "packageName": "@happyvertical/smrt-users",
1597
- "extends": "SmrtObject",
1598
- "fields": [
1599
- {
1600
- "name": "userId",
1601
- "type": "foreignKey",
1602
- "required": false,
1603
- "related": "User",
1604
- "columnType": "UUID"
1605
- },
1606
- {
1607
- "name": "tenantId",
1608
- "type": "foreignKey",
1609
- "required": false,
1610
- "related": "Tenant",
1611
- "columnType": "UUID"
1612
- },
1613
- {
1614
- "name": "status",
1615
- "type": "text",
1616
- "required": false,
1617
- "columnType": "TEXT"
1618
- },
1619
- {
1620
- "name": "expiresAt",
1621
- "type": "datetime",
1622
- "required": false,
1623
- "columnType": "TIMESTAMP"
1624
- },
1625
- {
1626
- "name": "userAgent",
1627
- "type": "text",
1628
- "required": false,
1629
- "columnType": "TEXT"
1630
- },
1631
- {
1632
- "name": "ipAddress",
1633
- "type": "text",
1634
- "required": false,
1635
- "columnType": "TEXT"
1636
- },
1637
- {
1638
- "name": "lastAccessedAt",
1639
- "type": "datetime",
1640
- "required": false,
1641
- "columnType": "TIMESTAMP"
1642
- },
1643
- {
1644
- "name": "data",
1645
- "type": "json",
1646
- "required": false,
1647
- "columnType": "JSON"
1648
- }
1964
+ "extends": "SmrtCollection",
1965
+ "fields": [],
1966
+ "relationships": [],
1967
+ "methods": [
1968
+ "addMember",
1969
+ "findByGroup",
1970
+ "findByUser",
1971
+ "getGroupIds",
1972
+ "getGroupIdsForTenant",
1973
+ "getUserIds",
1974
+ "isMember",
1975
+ "removeMember"
1649
1976
  ],
1650
- "relationships": [
1651
- {
1652
- "name": "userId",
1653
- "type": "foreignKey",
1654
- "required": false,
1655
- "related": "User",
1656
- "columnType": "UUID"
1657
- },
1658
- {
1659
- "name": "tenantId",
1660
- "type": "foreignKey",
1661
- "required": false,
1662
- "related": "Tenant",
1663
- "columnType": "UUID"
1664
- }
1977
+ "surfaces": [],
1978
+ "relationshipFeatures": [
1979
+ "uuidColumns"
1665
1980
  ],
1981
+ "tags": [],
1982
+ "risks": []
1983
+ },
1984
+ {
1985
+ "name": "GroupRoleCollection",
1986
+ "qualifiedName": "@happyvertical/smrt-users:GroupRoleCollection",
1987
+ "collection": "grouproles",
1988
+ "tableName": "group_role_collections",
1989
+ "packageName": "@happyvertical/smrt-users",
1990
+ "extends": "SmrtCollection",
1991
+ "fields": [],
1992
+ "relationships": [],
1666
1993
  "methods": [
1667
- "extend",
1668
- "getData",
1669
- "isExpired",
1670
- "isRevoked",
1671
- "isValid",
1672
- "removeData",
1673
- "revoke",
1674
- "setData",
1675
- "setTenant",
1676
- "touch"
1994
+ "addRole",
1995
+ "findByGroup",
1996
+ "findByRole",
1997
+ "getRoleIds",
1998
+ "hasRole",
1999
+ "removeRole"
1677
2000
  ],
1678
- "surfaces": [
1679
- {
1680
- "kind": "api",
1681
- "name": "sessions.get",
1682
- "operation": "get",
1683
- "objectName": "@happyvertical/smrt-users:Session",
1684
- "path": "/sessions/[id]",
1685
- "method": "GET"
1686
- },
1687
- {
1688
- "kind": "api",
1689
- "name": "sessions.delete",
1690
- "operation": "delete",
1691
- "objectName": "@happyvertical/smrt-users:Session",
1692
- "path": "/sessions/[id]",
1693
- "method": "DELETE"
1694
- },
1695
- {
1696
- "kind": "cli",
1697
- "name": "session_list",
1698
- "operation": "list",
1699
- "objectName": "@happyvertical/smrt-users:Session"
1700
- },
1701
- {
1702
- "kind": "cli",
1703
- "name": "session_get",
1704
- "operation": "get",
1705
- "objectName": "@happyvertical/smrt-users:Session"
1706
- },
1707
- {
1708
- "kind": "cli",
1709
- "name": "session_create",
1710
- "operation": "create",
1711
- "objectName": "@happyvertical/smrt-users:Session"
1712
- },
1713
- {
1714
- "kind": "cli",
1715
- "name": "session_update",
1716
- "operation": "update",
1717
- "objectName": "@happyvertical/smrt-users:Session"
1718
- },
1719
- {
1720
- "kind": "cli",
1721
- "name": "session_delete",
1722
- "operation": "delete",
1723
- "objectName": "@happyvertical/smrt-users:Session"
1724
- }
2001
+ "surfaces": [],
2002
+ "relationshipFeatures": [
2003
+ "uuidColumns"
1725
2004
  ],
2005
+ "tags": [],
2006
+ "risks": []
2007
+ },
2008
+ {
2009
+ "name": "UsersMagicLinkTokenCollection",
2010
+ "qualifiedName": "@happyvertical/smrt-users:UsersMagicLinkTokenCollection",
2011
+ "collection": "usersmagiclinktokens",
2012
+ "tableName": "users_magic_link_tokens",
2013
+ "packageName": "@happyvertical/smrt-users",
2014
+ "extends": "SmrtCollection",
2015
+ "fields": [],
2016
+ "relationships": [],
2017
+ "methods": [
2018
+ "deleteExpired",
2019
+ "findByNonce",
2020
+ "markUsed"
2021
+ ],
2022
+ "surfaces": [],
1726
2023
  "relationshipFeatures": [
1727
- "foreignKey",
1728
2024
  "uuidColumns"
1729
2025
  ],
1730
2026
  "tags": [],
1731
2027
  "risks": []
1732
2028
  },
1733
2029
  {
1734
- "name": "Tenant",
1735
- "qualifiedName": "@happyvertical/smrt-users:Tenant",
1736
- "collection": "tenants",
1737
- "tableName": "tenants",
2030
+ "name": "MembershipCollection",
2031
+ "qualifiedName": "@happyvertical/smrt-users:MembershipCollection",
2032
+ "collection": "memberships",
2033
+ "tableName": "membership_collections",
1738
2034
  "packageName": "@happyvertical/smrt-users",
1739
- "extends": "SmrtObject",
1740
- "fields": [
1741
- {
1742
- "name": "created_at",
1743
- "type": "datetime",
1744
- "required": false,
1745
- "columnType": "TIMESTAMP"
1746
- },
1747
- {
1748
- "name": "updated_at",
1749
- "type": "datetime",
1750
- "required": false,
1751
- "columnType": "TIMESTAMP"
1752
- },
1753
- {
1754
- "name": "name",
1755
- "type": "text",
1756
- "required": false,
1757
- "columnType": "TEXT"
1758
- },
1759
- {
1760
- "name": "status",
1761
- "type": "text",
1762
- "required": false,
1763
- "columnType": "TEXT"
1764
- },
1765
- {
1766
- "name": "description",
1767
- "type": "text",
1768
- "required": false,
1769
- "columnType": "TEXT"
1770
- },
1771
- {
1772
- "name": "parentTenantId",
1773
- "type": "foreignKey",
1774
- "required": false,
1775
- "related": "Tenant",
1776
- "columnType": "UUID"
1777
- },
1778
- {
1779
- "name": "hierarchyLevel",
1780
- "type": "integer",
1781
- "required": false,
1782
- "columnType": "INTEGER"
1783
- },
1784
- {
1785
- "name": "hierarchyPath",
1786
- "type": "text",
1787
- "required": false,
1788
- "columnType": "TEXT"
1789
- },
1790
- {
1791
- "name": "cascadePermissions",
1792
- "type": "boolean",
1793
- "required": false,
1794
- "columnType": "BOOLEAN"
1795
- },
1796
- {
1797
- "name": "inheritPermissions",
1798
- "type": "boolean",
1799
- "required": false,
1800
- "columnType": "BOOLEAN"
1801
- }
2035
+ "extends": "SmrtCollection",
2036
+ "fields": [],
2037
+ "relationships": [],
2038
+ "methods": [
2039
+ "findActiveByTenant",
2040
+ "findActiveByUser",
2041
+ "findByRole",
2042
+ "findByStatus",
2043
+ "findByTenant",
2044
+ "findByUser",
2045
+ "findByUserAndTenant"
1802
2046
  ],
1803
- "relationships": [
1804
- {
1805
- "name": "parentTenantId",
1806
- "type": "foreignKey",
1807
- "required": false,
1808
- "related": "Tenant",
1809
- "columnType": "UUID"
1810
- }
2047
+ "surfaces": [],
2048
+ "relationshipFeatures": [
2049
+ "uuidColumns"
1811
2050
  ],
2051
+ "tags": [],
2052
+ "risks": []
2053
+ },
2054
+ {
2055
+ "name": "MembershipOverrideCollection",
2056
+ "qualifiedName": "@happyvertical/smrt-users:MembershipOverrideCollection",
2057
+ "collection": "membershipoverrides",
2058
+ "tableName": "membership_override_collections",
2059
+ "packageName": "@happyvertical/smrt-users",
2060
+ "extends": "SmrtCollection",
2061
+ "fields": [],
2062
+ "relationships": [],
1812
2063
  "methods": [
1813
- "_setLoadedRelationship",
1814
- "acceptsInheritance",
1815
- "canCascadeToChildren",
1816
- "classifyConstraintError",
1817
- "clearEmbeddings",
1818
- "delete",
1819
- "describe",
1820
- "destroy",
1821
- "do",
1822
- "executeToolCall",
1823
- "forget",
1824
- "forgetScope",
1825
- "generateEmbeddings",
1826
- "getAiUsageSnapshot",
1827
- "getAncestorIds",
1828
- "getAvailableTools",
1829
- "getEmbedding",
1830
- "getFields",
1831
- "getId",
1832
- "getRelated",
1833
- "getSavedId",
1834
- "getSlug",
1835
- "hasStaleEmbeddings",
1836
- "initialize",
1837
- "is",
1838
- "isActive",
1839
- "isRelatedLoaded",
1840
- "isRoot",
1841
- "isSaved",
1842
- "isSuspended",
1843
- "listAiUsage",
1844
- "loadDataFromDb",
1845
- "loadFromId",
1846
- "loadFromSlug",
1847
- "loadRelated",
1848
- "loadRelatedMany",
1849
- "markAsPersisted",
1850
- "recall",
1851
- "recallAll",
1852
- "remember",
1853
- "requireInsertOnSave",
1854
- "resetAiUsage",
1855
- "save",
1856
- "summarizeAiUsage",
1857
- "toJSON",
1858
- "toPlainObject",
1859
- "toPublicJSON"
2064
+ "denyPermission",
2065
+ "findByMembership",
2066
+ "findDenies",
2067
+ "findGrants",
2068
+ "getDeniedPermissionIds",
2069
+ "getGrantedPermissionIds",
2070
+ "grantPermission",
2071
+ "removeOverride",
2072
+ "setOverride"
1860
2073
  ],
1861
- "surfaces": [
1862
- {
1863
- "kind": "api",
1864
- "name": "tenants.list",
1865
- "operation": "list",
1866
- "objectName": "@happyvertical/smrt-users:Tenant",
1867
- "path": "/tenants",
1868
- "method": "GET"
1869
- },
1870
- {
1871
- "kind": "api",
1872
- "name": "tenants.get",
1873
- "operation": "get",
1874
- "objectName": "@happyvertical/smrt-users:Tenant",
1875
- "path": "/tenants/[id]",
1876
- "method": "GET"
1877
- },
1878
- {
1879
- "kind": "cli",
1880
- "name": "tenant_list",
1881
- "operation": "list",
1882
- "objectName": "@happyvertical/smrt-users:Tenant"
1883
- },
1884
- {
1885
- "kind": "cli",
1886
- "name": "tenant_get",
1887
- "operation": "get",
1888
- "objectName": "@happyvertical/smrt-users:Tenant"
1889
- },
1890
- {
1891
- "kind": "cli",
1892
- "name": "tenant_create",
1893
- "operation": "create",
1894
- "objectName": "@happyvertical/smrt-users:Tenant"
1895
- },
1896
- {
1897
- "kind": "cli",
1898
- "name": "tenant_update",
1899
- "operation": "update",
1900
- "objectName": "@happyvertical/smrt-users:Tenant"
1901
- },
1902
- {
1903
- "kind": "cli",
1904
- "name": "tenant_delete",
1905
- "operation": "delete",
1906
- "objectName": "@happyvertical/smrt-users:Tenant"
1907
- },
1908
- {
1909
- "kind": "mcp",
1910
- "name": "tenant_list",
1911
- "operation": "list",
1912
- "objectName": "@happyvertical/smrt-users:Tenant"
1913
- },
1914
- {
1915
- "kind": "mcp",
1916
- "name": "tenant_get",
1917
- "operation": "get",
1918
- "objectName": "@happyvertical/smrt-users:Tenant"
1919
- }
2074
+ "surfaces": [],
2075
+ "relationshipFeatures": [
2076
+ "uuidColumns"
2077
+ ],
2078
+ "tags": [],
2079
+ "risks": []
2080
+ },
2081
+ {
2082
+ "name": "PermissionCollection",
2083
+ "qualifiedName": "@happyvertical/smrt-users:PermissionCollection",
2084
+ "collection": "permissions",
2085
+ "tableName": "permission_collections",
2086
+ "packageName": "@happyvertical/smrt-users",
2087
+ "extends": "SmrtCollection",
2088
+ "fields": [],
2089
+ "relationships": [],
2090
+ "methods": [
2091
+ "findByCategory",
2092
+ "findByIds",
2093
+ "findBySlug",
2094
+ "findOrCreate",
2095
+ "getCategories"
1920
2096
  ],
2097
+ "surfaces": [],
1921
2098
  "relationshipFeatures": [
1922
- "foreignKey",
1923
2099
  "uuidColumns"
1924
2100
  ],
1925
2101
  "tags": [],
1926
2102
  "risks": []
1927
2103
  },
1928
2104
  {
1929
- "name": "TenantIntegration",
1930
- "qualifiedName": "@happyvertical/smrt-users:TenantIntegration",
1931
- "collection": "tenantintegrations",
1932
- "tableName": "tenant_integrations",
2105
+ "name": "RoleCollection",
2106
+ "qualifiedName": "@happyvertical/smrt-users:RoleCollection",
2107
+ "collection": "roles",
2108
+ "tableName": "role_collections",
1933
2109
  "packageName": "@happyvertical/smrt-users",
1934
- "extends": "SmrtObject",
1935
- "fields": [
1936
- {
1937
- "name": "tenantId",
1938
- "type": "text",
1939
- "required": true,
1940
- "columnType": "UUID"
1941
- },
1942
- {
1943
- "name": "provider",
1944
- "type": "text",
1945
- "required": false,
1946
- "columnType": "TEXT"
1947
- },
1948
- {
1949
- "name": "externalIds",
1950
- "type": "text",
1951
- "required": false,
1952
- "columnType": "TEXT"
1953
- },
1954
- {
1955
- "name": "status",
1956
- "type": "text",
1957
- "required": false,
1958
- "columnType": "TEXT"
1959
- },
1960
- {
1961
- "name": "lastCheckedAt",
1962
- "type": "datetime",
1963
- "required": false,
1964
- "columnType": "TIMESTAMP"
1965
- },
1966
- {
1967
- "name": "lastCheckSummary",
1968
- "type": "text",
1969
- "required": false,
1970
- "columnType": "TEXT"
1971
- },
1972
- {
1973
- "name": "lastError",
1974
- "type": "text",
1975
- "required": false,
1976
- "columnType": "TEXT"
1977
- }
1978
- ],
2110
+ "extends": "SmrtCollection",
2111
+ "fields": [],
1979
2112
  "relationships": [],
1980
2113
  "methods": [
1981
- "getExternalId",
1982
- "getExternalIds",
1983
- "getLastCheckSummary",
1984
- "initialize",
1985
- "recordDoctorRun",
1986
- "setExternalId",
1987
- "setExternalIds",
1988
- "setLastCheckSummary"
2114
+ "findBySlug",
2115
+ "findByTenant",
2116
+ "findSystemRoles",
2117
+ "findTenantRoles",
2118
+ "seedSystemRoles"
1989
2119
  ],
1990
- "surfaces": [
1991
- {
1992
- "kind": "api",
1993
- "name": "tenantintegrations.list",
1994
- "operation": "list",
1995
- "objectName": "@happyvertical/smrt-users:TenantIntegration",
1996
- "path": "/tenantintegrations",
1997
- "method": "GET"
1998
- },
1999
- {
2000
- "kind": "api",
2001
- "name": "tenantintegrations.get",
2002
- "operation": "get",
2003
- "objectName": "@happyvertical/smrt-users:TenantIntegration",
2004
- "path": "/tenantintegrations/[id]",
2005
- "method": "GET"
2006
- },
2007
- {
2008
- "kind": "cli",
2009
- "name": "tenantintegration_list",
2010
- "operation": "list",
2011
- "objectName": "@happyvertical/smrt-users:TenantIntegration"
2012
- },
2013
- {
2014
- "kind": "cli",
2015
- "name": "tenantintegration_get",
2016
- "operation": "get",
2017
- "objectName": "@happyvertical/smrt-users:TenantIntegration"
2018
- },
2019
- {
2020
- "kind": "cli",
2021
- "name": "tenantintegration_create",
2022
- "operation": "create",
2023
- "objectName": "@happyvertical/smrt-users:TenantIntegration"
2024
- },
2025
- {
2026
- "kind": "cli",
2027
- "name": "tenantintegration_update",
2028
- "operation": "update",
2029
- "objectName": "@happyvertical/smrt-users:TenantIntegration"
2030
- },
2031
- {
2032
- "kind": "cli",
2033
- "name": "tenantintegration_delete",
2034
- "operation": "delete",
2035
- "objectName": "@happyvertical/smrt-users:TenantIntegration"
2036
- },
2037
- {
2038
- "kind": "mcp",
2039
- "name": "tenantintegration_list",
2040
- "operation": "list",
2041
- "objectName": "@happyvertical/smrt-users:TenantIntegration"
2042
- },
2043
- {
2044
- "kind": "mcp",
2045
- "name": "tenantintegration_get",
2046
- "operation": "get",
2047
- "objectName": "@happyvertical/smrt-users:TenantIntegration"
2048
- }
2120
+ "surfaces": [],
2121
+ "relationshipFeatures": [
2122
+ "uuidColumns"
2123
+ ],
2124
+ "tags": [],
2125
+ "risks": []
2126
+ },
2127
+ {
2128
+ "name": "RolePermissionCollection",
2129
+ "qualifiedName": "@happyvertical/smrt-users:RolePermissionCollection",
2130
+ "collection": "rolepermissions",
2131
+ "tableName": "role_permission_collections",
2132
+ "packageName": "@happyvertical/smrt-users",
2133
+ "extends": "SmrtCollection",
2134
+ "fields": [],
2135
+ "relationships": [],
2136
+ "methods": [
2137
+ "addPermission",
2138
+ "findByPermission",
2139
+ "findByRole",
2140
+ "getPermissionIds",
2141
+ "hasPermission",
2142
+ "removePermission",
2143
+ "seedRolePermissions"
2049
2144
  ],
2145
+ "surfaces": [],
2050
2146
  "relationshipFeatures": [
2051
2147
  "uuidColumns"
2052
2148
  ],
@@ -2054,242 +2150,146 @@
2054
2150
  "risks": []
2055
2151
  },
2056
2152
  {
2057
- "name": "TenantPermissionOverride",
2058
- "qualifiedName": "@happyvertical/smrt-users:TenantPermissionOverride",
2059
- "collection": "tenantpermissionoverrides",
2060
- "tableName": "tenant_permission_overrides",
2153
+ "name": "SessionCollection",
2154
+ "qualifiedName": "@happyvertical/smrt-users:SessionCollection",
2155
+ "collection": "sessions",
2156
+ "tableName": "session_collections",
2061
2157
  "packageName": "@happyvertical/smrt-users",
2062
- "extends": "SmrtObject",
2063
- "fields": [
2064
- {
2065
- "name": "tenantId",
2066
- "type": "foreignKey",
2067
- "required": true,
2068
- "related": "Tenant",
2069
- "columnType": "UUID"
2070
- },
2071
- {
2072
- "name": "permissionId",
2073
- "type": "foreignKey",
2074
- "required": true,
2075
- "related": "Permission",
2076
- "columnType": "UUID"
2077
- },
2078
- {
2079
- "name": "effect",
2080
- "type": "text",
2081
- "required": false,
2082
- "columnType": "TEXT"
2083
- }
2158
+ "extends": "SmrtCollection",
2159
+ "fields": [],
2160
+ "relationships": [],
2161
+ "methods": [
2162
+ "countUserSessions",
2163
+ "createSession",
2164
+ "deleteExpired",
2165
+ "deleteUserSessions",
2166
+ "findByUser",
2167
+ "findValidSession",
2168
+ "getSessionData",
2169
+ "revokeSession",
2170
+ "revokeUserSessions",
2171
+ "setSessionData",
2172
+ "setSessionTenant",
2173
+ "touch"
2084
2174
  ],
2085
- "relationships": [
2086
- {
2087
- "name": "tenantId",
2088
- "type": "foreignKey",
2089
- "required": true,
2090
- "related": "Tenant",
2091
- "columnType": "UUID"
2092
- },
2093
- {
2094
- "name": "permissionId",
2095
- "type": "foreignKey",
2096
- "required": true,
2097
- "related": "Permission",
2098
- "columnType": "UUID"
2099
- }
2175
+ "surfaces": [],
2176
+ "relationshipFeatures": [
2177
+ "uuidColumns"
2178
+ ],
2179
+ "tags": [],
2180
+ "risks": []
2181
+ },
2182
+ {
2183
+ "name": "TenantCollection",
2184
+ "qualifiedName": "@happyvertical/smrt-users:TenantCollection",
2185
+ "collection": "tenants",
2186
+ "tableName": "tenant_collections",
2187
+ "packageName": "@happyvertical/smrt-users",
2188
+ "extends": "SmrtCollection",
2189
+ "fields": [],
2190
+ "relationships": [],
2191
+ "methods": [
2192
+ "create",
2193
+ "createChild",
2194
+ "findActive",
2195
+ "findBySlug",
2196
+ "findByStatus",
2197
+ "findChildren",
2198
+ "findParent",
2199
+ "findRoots",
2200
+ "getAncestors",
2201
+ "getAncestorsFromRoot",
2202
+ "getDescendants",
2203
+ "getSiblings",
2204
+ "getTree",
2205
+ "isAncestorOf",
2206
+ "isDescendantOf",
2207
+ "makeRoot",
2208
+ "moveToParent",
2209
+ "validateHierarchy"
2100
2210
  ],
2101
- "methods": [
2102
- "hasExplicitEffect",
2103
- "isDeny",
2104
- "isGrant",
2105
- "isInherit"
2211
+ "surfaces": [],
2212
+ "relationshipFeatures": [
2213
+ "uuidColumns"
2106
2214
  ],
2107
- "surfaces": [
2108
- {
2109
- "kind": "api",
2110
- "name": "tenantpermissionoverrides.list",
2111
- "operation": "list",
2112
- "objectName": "@happyvertical/smrt-users:TenantPermissionOverride",
2113
- "path": "/tenantpermissionoverrides",
2114
- "method": "GET"
2115
- },
2116
- {
2117
- "kind": "api",
2118
- "name": "tenantpermissionoverrides.get",
2119
- "operation": "get",
2120
- "objectName": "@happyvertical/smrt-users:TenantPermissionOverride",
2121
- "path": "/tenantpermissionoverrides/[id]",
2122
- "method": "GET"
2123
- },
2124
- {
2125
- "kind": "cli",
2126
- "name": "tenantpermissionoverride_list",
2127
- "operation": "list",
2128
- "objectName": "@happyvertical/smrt-users:TenantPermissionOverride"
2129
- },
2130
- {
2131
- "kind": "cli",
2132
- "name": "tenantpermissionoverride_get",
2133
- "operation": "get",
2134
- "objectName": "@happyvertical/smrt-users:TenantPermissionOverride"
2135
- },
2136
- {
2137
- "kind": "cli",
2138
- "name": "tenantpermissionoverride_create",
2139
- "operation": "create",
2140
- "objectName": "@happyvertical/smrt-users:TenantPermissionOverride"
2141
- },
2142
- {
2143
- "kind": "cli",
2144
- "name": "tenantpermissionoverride_update",
2145
- "operation": "update",
2146
- "objectName": "@happyvertical/smrt-users:TenantPermissionOverride"
2147
- },
2148
- {
2149
- "kind": "cli",
2150
- "name": "tenantpermissionoverride_delete",
2151
- "operation": "delete",
2152
- "objectName": "@happyvertical/smrt-users:TenantPermissionOverride"
2153
- },
2154
- {
2155
- "kind": "mcp",
2156
- "name": "tenantpermissionoverride_list",
2157
- "operation": "list",
2158
- "objectName": "@happyvertical/smrt-users:TenantPermissionOverride"
2159
- },
2160
- {
2161
- "kind": "mcp",
2162
- "name": "tenantpermissionoverride_get",
2163
- "operation": "get",
2164
- "objectName": "@happyvertical/smrt-users:TenantPermissionOverride"
2165
- }
2215
+ "tags": [],
2216
+ "risks": []
2217
+ },
2218
+ {
2219
+ "name": "TenantIntegrationCollection",
2220
+ "qualifiedName": "@happyvertical/smrt-users:TenantIntegrationCollection",
2221
+ "collection": "tenantintegrations",
2222
+ "tableName": "tenant_integrations",
2223
+ "packageName": "@happyvertical/smrt-users",
2224
+ "extends": "SmrtCollection",
2225
+ "fields": [],
2226
+ "relationships": [],
2227
+ "methods": [
2228
+ "findFor",
2229
+ "findOrInit",
2230
+ "listForTenant"
2166
2231
  ],
2232
+ "surfaces": [],
2167
2233
  "relationshipFeatures": [
2168
- "foreignKey",
2169
2234
  "uuidColumns"
2170
2235
  ],
2171
2236
  "tags": [],
2172
2237
  "risks": []
2173
2238
  },
2174
2239
  {
2175
- "name": "User",
2176
- "qualifiedName": "@happyvertical/smrt-users:User",
2177
- "collection": "users",
2178
- "tableName": "users",
2240
+ "name": "TenantPermissionOverrideCollection",
2241
+ "qualifiedName": "@happyvertical/smrt-users:TenantPermissionOverrideCollection",
2242
+ "collection": "tenantpermissionoverrides",
2243
+ "tableName": "tenant_permission_override_collections",
2179
2244
  "packageName": "@happyvertical/smrt-users",
2180
- "extends": "SmrtObject",
2181
- "fields": [
2182
- {
2183
- "name": "profileId",
2184
- "type": "crossPackageRef",
2185
- "required": false,
2186
- "related": "@happyvertical/smrt-profiles:Profile",
2187
- "columnType": "UUID"
2188
- },
2189
- {
2190
- "name": "email",
2191
- "type": "text",
2192
- "required": false,
2193
- "columnType": "TEXT"
2194
- },
2195
- {
2196
- "name": "emailKey",
2197
- "type": "text",
2198
- "required": false,
2199
- "columnType": "TEXT"
2200
- },
2201
- {
2202
- "name": "status",
2203
- "type": "text",
2204
- "required": false,
2205
- "columnType": "TEXT"
2206
- },
2207
- {
2208
- "name": "lastLoginAt",
2209
- "type": "datetime",
2210
- "required": false,
2211
- "columnType": "TIMESTAMP"
2212
- }
2245
+ "extends": "SmrtCollection",
2246
+ "fields": [],
2247
+ "relationships": [],
2248
+ "methods": [
2249
+ "bulkSetOverrides",
2250
+ "copyOverrides",
2251
+ "denyPermission",
2252
+ "findByTenant",
2253
+ "findDenies",
2254
+ "findGrants",
2255
+ "findInherits",
2256
+ "getDeniedPermissionIds",
2257
+ "getGrantedPermissionIds",
2258
+ "getOverridesByEffect",
2259
+ "getOverridesByEffectBatch",
2260
+ "grantPermission",
2261
+ "inheritPermission",
2262
+ "removeAllOverrides",
2263
+ "removeOverride",
2264
+ "setOverride"
2213
2265
  ],
2214
- "relationships": [
2215
- {
2216
- "name": "profileId",
2217
- "type": "crossPackageRef",
2218
- "required": false,
2219
- "related": "@happyvertical/smrt-profiles:Profile",
2220
- "columnType": "UUID"
2221
- }
2266
+ "surfaces": [],
2267
+ "relationshipFeatures": [
2268
+ "uuidColumns"
2222
2269
  ],
2270
+ "tags": [],
2271
+ "risks": []
2272
+ },
2273
+ {
2274
+ "name": "UserCollection",
2275
+ "qualifiedName": "@happyvertical/smrt-users:UserCollection",
2276
+ "collection": "users",
2277
+ "tableName": "user_collections",
2278
+ "packageName": "@happyvertical/smrt-users",
2279
+ "extends": "SmrtCollection",
2280
+ "fields": [],
2281
+ "relationships": [],
2223
2282
  "methods": [
2224
- "hasValidEmail",
2225
- "isActive",
2226
- "isPending",
2227
- "isSuspended",
2228
- "recordLogin",
2229
- "save"
2230
- ],
2231
- "surfaces": [
2232
- {
2233
- "kind": "api",
2234
- "name": "users.list",
2235
- "operation": "list",
2236
- "objectName": "@happyvertical/smrt-users:User",
2237
- "path": "/users",
2238
- "method": "GET"
2239
- },
2240
- {
2241
- "kind": "api",
2242
- "name": "users.get",
2243
- "operation": "get",
2244
- "objectName": "@happyvertical/smrt-users:User",
2245
- "path": "/users/[id]",
2246
- "method": "GET"
2247
- },
2248
- {
2249
- "kind": "cli",
2250
- "name": "user_list",
2251
- "operation": "list",
2252
- "objectName": "@happyvertical/smrt-users:User"
2253
- },
2254
- {
2255
- "kind": "cli",
2256
- "name": "user_get",
2257
- "operation": "get",
2258
- "objectName": "@happyvertical/smrt-users:User"
2259
- },
2260
- {
2261
- "kind": "cli",
2262
- "name": "user_create",
2263
- "operation": "create",
2264
- "objectName": "@happyvertical/smrt-users:User"
2265
- },
2266
- {
2267
- "kind": "cli",
2268
- "name": "user_update",
2269
- "operation": "update",
2270
- "objectName": "@happyvertical/smrt-users:User"
2271
- },
2272
- {
2273
- "kind": "cli",
2274
- "name": "user_delete",
2275
- "operation": "delete",
2276
- "objectName": "@happyvertical/smrt-users:User"
2277
- },
2278
- {
2279
- "kind": "mcp",
2280
- "name": "user_list",
2281
- "operation": "list",
2282
- "objectName": "@happyvertical/smrt-users:User"
2283
- },
2284
- {
2285
- "kind": "mcp",
2286
- "name": "user_get",
2287
- "operation": "get",
2288
- "objectName": "@happyvertical/smrt-users:User"
2289
- }
2283
+ "findActive",
2284
+ "findByEmail",
2285
+ "findByProfile",
2286
+ "findByStatus",
2287
+ "findPending",
2288
+ "getOrCreateForProfile",
2289
+ "getOrCreateFromOidc"
2290
2290
  ],
2291
+ "surfaces": [],
2291
2292
  "relationshipFeatures": [
2292
- "crossPackageRef",
2293
2293
  "uuidColumns"
2294
2294
  ],
2295
2295
  "tags": [],