@astrale-domains/shell 0.1.7 → 0.1.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. package/dist/domain.d.ts +54 -25
  2. package/dist/domain.js +21 -1
  3. package/dist/functions/authority/roles.js +58 -35
  4. package/dist/functions/group/assign-member.js +6 -3
  5. package/dist/functions/group/change-group-membership.js +92 -39
  6. package/dist/functions/group/group-membership-errors.js +1 -1
  7. package/dist/functions/group/index.js +2 -2
  8. package/dist/functions/group/legacy/index.js +1 -1
  9. package/dist/functions/group/legacy/membership.js +21 -17
  10. package/dist/functions/group/membership-laws.js +23 -28
  11. package/dist/functions/group/unassign-member.js +6 -3
  12. package/dist/functions/invitation/send-invitation.js +57 -7
  13. package/dist/functions/view-access/index.js +2 -2
  14. package/dist/functions/view-access/legacy/index.js +1 -0
  15. package/dist/functions/view-access/legacy/migrate-view-access.js +29 -0
  16. package/dist/mutations/group/index.js +1 -1
  17. package/dist/mutations/group/set-group-membership.js +45 -13
  18. package/dist/mutations/invitation/write-invitation.js +19 -2
  19. package/dist/mutations/view-access/legacy/index.js +1 -0
  20. package/dist/mutations/view-access/legacy/move-view-access.js +26 -0
  21. package/dist/mutations/view-access/set-view-access.js +1 -1
  22. package/dist/queries/composition/index.js +1 -1
  23. package/dist/queries/composition/read-role-nodes.js +48 -13
  24. package/dist/queries/group/index.js +1 -0
  25. package/dist/queries/group/legacy/index.js +1 -0
  26. package/dist/queries/group/legacy/read-members-of-group.js +27 -0
  27. package/dist/queries/group/read-group-members.js +73 -0
  28. package/dist/queries/invitation/index.js +1 -1
  29. package/dist/queries/invitation/read-invitation.js +33 -8
  30. package/dist/queries/role/index.js +1 -1
  31. package/dist/queries/role/read-role-node.js +8 -0
  32. package/dist/queries/view-access/legacy/index.js +1 -0
  33. package/dist/queries/view-access/legacy/read-view-access-to-move.js +40 -0
  34. package/dist/queries/view-access/read-view-access.js +1 -1
  35. package/dist/runtime.d.ts +3930 -924
  36. package/dist/runtime.js +6 -3
  37. package/dist/schema/index.d.ts +1 -1
  38. package/dist/schema/index.js +2 -1
  39. package/dist/schema/legacy/schema.js +5 -3
  40. package/dist/schema/modules/application/legacy/functions/list-entrypoints.js +5 -4
  41. package/dist/schema/modules/group/classes/group-profile-link.d.ts +1 -1
  42. package/dist/schema/modules/group/classes/group.d.ts +14 -0
  43. package/dist/schema/modules/group/classes/group.js +12 -2
  44. package/dist/schema/modules/group/functions/assign-members.js +17 -0
  45. package/dist/schema/modules/group/functions/index.js +2 -0
  46. package/dist/schema/modules/group/functions/unassign-members.js +17 -0
  47. package/dist/schema/modules/group/types/group-membership-input.js +8 -0
  48. package/dist/schema/modules/group/types/index.js +1 -1
  49. package/dist/schema/modules/invitation/classes/invitation.js +4 -2
  50. package/dist/schema/modules/role/core/roles.d.ts +2 -0
  51. package/dist/schema/modules/role/core/roles.js +1 -0
  52. package/dist/schema/modules/view-access/index.d.ts +1 -2
  53. package/dist/schema/modules/view-access/index.js +2 -2
  54. package/dist/schema/modules/view-access/legacy/classes/index.d.ts +1 -0
  55. package/dist/schema/modules/view-access/legacy/classes/index.js +1 -0
  56. package/dist/schema/modules/view-access/{classes → legacy/classes}/view-access.d.ts +7 -5
  57. package/dist/schema/modules/view-access/legacy/classes/view-access.js +25 -0
  58. package/dist/schema/modules/view-access/legacy/functions/assign-views.d.ts +18 -0
  59. package/dist/schema/modules/view-access/legacy/functions/index.d.ts +2 -0
  60. package/dist/schema/modules/view-access/legacy/functions/index.js +1 -0
  61. package/dist/schema/modules/view-access/legacy/functions/migrate-view-access.d.ts +13 -0
  62. package/dist/schema/modules/view-access/legacy/functions/migrate-view-access.js +22 -0
  63. package/dist/schema/modules/view-access/legacy/index.d.ts +4 -0
  64. package/dist/schema/modules/view-access/legacy/index.js +3 -1
  65. package/dist/schema/modules/view-access/legacy/policies/holds-view-access.d.ts +5 -0
  66. package/dist/schema/modules/view-access/legacy/policies/holds-view-access.js +8 -0
  67. package/dist/schema/modules/view-access/legacy/policies/index.d.ts +1 -0
  68. package/dist/schema/modules/view-access/legacy/policies/index.js +1 -0
  69. package/dist/schema/modules/view-access/legacy/view-assignment.d.ts +21 -0
  70. package/dist/schema/schema.d.ts +207 -99
  71. package/dist/schema/schema.js +1 -4
  72. package/package.json +2 -2
  73. package/dist/schema/modules/view-access/classes/index.d.ts +0 -1
  74. package/dist/schema/modules/view-access/classes/index.js +0 -1
  75. package/dist/schema/modules/view-access/classes/view-access.js +0 -23
  76. package/dist/schema/modules/view-access/policies/holds-view-access.d.ts +0 -2
  77. package/dist/schema/modules/view-access/policies/holds-view-access.js +0 -5
  78. package/dist/schema/modules/view-access/policies/index.d.ts +0 -1
  79. package/dist/schema/modules/view-access/policies/index.js +0 -1
@@ -31,6 +31,28 @@ declare const classes: {
31
31
  readonly constraints: Record<never, never>;
32
32
  readonly effectiveProperties: never;
33
33
  }>;
34
+ readonly view_access: import("@astrale-os/sdk/schema").DirectedEdgeClass<{
35
+ readonly depth: 0;
36
+ readonly abstract: false;
37
+ readonly extends: readonly [];
38
+ readonly properties: never;
39
+ readonly source: {
40
+ readonly as: "audience";
41
+ readonly accepts: readonly (import("@astrale-os/sdk/schema").ClassRef<"Identity"> & {
42
+ readonly origin: "kernel.astrale.ai";
43
+ })[];
44
+ readonly outgoing: "0..*";
45
+ };
46
+ readonly target: {
47
+ readonly as: "view";
48
+ readonly accepts: readonly (import("@astrale-os/sdk/schema").ClassRef<"View"> & {
49
+ readonly origin: "kernel.astrale.ai";
50
+ })[];
51
+ readonly incoming: "0..*";
52
+ };
53
+ readonly constraints: Record<never, never>;
54
+ readonly effectiveProperties: never;
55
+ }>;
34
56
  readonly User: import("@astrale-os/sdk/schema").AuthoredNodeClass<{
35
57
  readonly icon: import("@astrale-os/sdk/schema").ClassIcon;
36
58
  readonly inheritance: "open";
@@ -322,6 +344,20 @@ declare const classes: {
322
344
  readonly mode: 'value';
323
345
  readonly value: Record<string, never>;
324
346
  }, "authorized", true, false, undefined, undefined>>;
347
+ readonly assignMembers: import("@astrale-os/sdk/schema").Method<import("@astrale-os/sdk/schema").CallableProjection<{
348
+ members: string[];
349
+ group: string;
350
+ }, {
351
+ readonly mode: 'value';
352
+ readonly value: Record<string, never>;
353
+ }, "authorized", true, false, undefined, undefined>>;
354
+ readonly unassignMembers: import("@astrale-os/sdk/schema").Method<import("@astrale-os/sdk/schema").CallableProjection<{
355
+ members: string[];
356
+ group: string;
357
+ }, {
358
+ readonly mode: 'value';
359
+ readonly value: Record<string, never>;
360
+ }, "authorized", true, false, undefined, undefined>>;
325
361
  readonly provision: import("@astrale-os/sdk/schema").Method<import("@astrale-os/sdk/schema").CallableProjection<{
326
362
  directory: string;
327
363
  externalId: string;
@@ -365,7 +401,7 @@ declare const classes: {
365
401
  readonly abstract: false;
366
402
  readonly depth: 1;
367
403
  readonly properties: "attributes" | "description" | "directory" | "externalId" | "frozen" | "icon" | "iss" | "name" | "sub";
368
- readonly methods: "assignMember" | "create" | "delete" | "deprovision" | "provision" | "unassignMember" | "update";
404
+ readonly methods: "assignMember" | "assignMembers" | "create" | "delete" | "deprovision" | "provision" | "unassignMember" | "unassignMembers" | "update";
369
405
  }[];
370
406
  readonly outgoing: "0..1";
371
407
  };
@@ -423,6 +459,13 @@ declare const classes: {
423
459
  readonly description?: string;
424
460
  readonly immutable?: import("@astrale-os/sdk/schema").PropertyImmutability;
425
461
  }>;
462
+ email: import("@astrale-os/sdk/schema").AuthoredProperty<{
463
+ readonly type: "string";
464
+ readonly minLength: 3;
465
+ readonly maxLength: 320;
466
+ }, {
467
+ readonly required: false;
468
+ }>;
426
469
  };
427
470
  readonly policies: {
428
471
  readonly read: ({ check, ref }: import("@astrale-os/sdk/schema").ClassRuleContext) => import("@astrale-os/sdk/schema").PolicyCheckExpression<import("@astrale-os/sdk/schema").PolicyRef, import("@astrale-os/sdk/schema").ClassRuleObject>;
@@ -467,7 +510,7 @@ declare const classes: {
467
510
  readonly kind: 'node';
468
511
  readonly abstract: false;
469
512
  readonly depth: 0;
470
- readonly properties: "execution" | "expiresAt" | "round" | "status";
513
+ readonly properties: "email" | "execution" | "expiresAt" | "round" | "status";
471
514
  readonly methods: "accept" | "cancel" | "resend" | "send";
472
515
  }[];
473
516
  readonly outgoing: "0..1";
@@ -553,28 +596,6 @@ declare const classes: {
553
596
  readonly constraints: Record<never, never>;
554
597
  readonly effectiveProperties: never;
555
598
  }>;
556
- readonly view_access: import("@astrale-os/sdk/schema").DirectedEdgeClass<{
557
- readonly depth: 0;
558
- readonly abstract: false;
559
- readonly extends: readonly [];
560
- readonly properties: never;
561
- readonly source: {
562
- readonly as: "audience";
563
- readonly accepts: readonly (import("@astrale-os/sdk/schema").ClassRef<"Identity"> & {
564
- readonly origin: "kernel.astrale.ai";
565
- })[];
566
- readonly outgoing: "0..*";
567
- };
568
- readonly target: {
569
- readonly as: "view";
570
- readonly accepts: readonly (import("@astrale-os/sdk/schema").ClassRef<"View"> & {
571
- readonly origin: "kernel.astrale.ai";
572
- })[];
573
- readonly incoming: "0..*";
574
- };
575
- readonly constraints: Record<never, never>;
576
- readonly effectiveProperties: never;
577
- }>;
578
599
  };
579
600
  export type ShellClasses = typeof classes;
580
601
  declare const input: {
@@ -614,6 +635,28 @@ declare const input: {
614
635
  readonly constraints: Record<never, never>;
615
636
  readonly effectiveProperties: never;
616
637
  }>;
638
+ readonly view_access: import("@astrale-os/sdk/schema").DirectedEdgeClass<{
639
+ readonly depth: 0;
640
+ readonly abstract: false;
641
+ readonly extends: readonly [];
642
+ readonly properties: never;
643
+ readonly source: {
644
+ readonly as: "audience";
645
+ readonly accepts: readonly (import("@astrale-os/sdk/schema").ClassRef<"Identity"> & {
646
+ readonly origin: "kernel.astrale.ai";
647
+ })[];
648
+ readonly outgoing: "0..*";
649
+ };
650
+ readonly target: {
651
+ readonly as: "view";
652
+ readonly accepts: readonly (import("@astrale-os/sdk/schema").ClassRef<"View"> & {
653
+ readonly origin: "kernel.astrale.ai";
654
+ })[];
655
+ readonly incoming: "0..*";
656
+ };
657
+ readonly constraints: Record<never, never>;
658
+ readonly effectiveProperties: never;
659
+ }>;
617
660
  readonly User: import("@astrale-os/sdk/schema").AuthoredNodeClass<{
618
661
  readonly icon: import("@astrale-os/sdk/schema").ClassIcon;
619
662
  readonly inheritance: "open";
@@ -905,6 +948,20 @@ declare const input: {
905
948
  readonly mode: 'value';
906
949
  readonly value: Record<string, never>;
907
950
  }, "authorized", true, false, undefined, undefined>>;
951
+ readonly assignMembers: import("@astrale-os/sdk/schema").Method<import("@astrale-os/sdk/schema").CallableProjection<{
952
+ members: string[];
953
+ group: string;
954
+ }, {
955
+ readonly mode: 'value';
956
+ readonly value: Record<string, never>;
957
+ }, "authorized", true, false, undefined, undefined>>;
958
+ readonly unassignMembers: import("@astrale-os/sdk/schema").Method<import("@astrale-os/sdk/schema").CallableProjection<{
959
+ members: string[];
960
+ group: string;
961
+ }, {
962
+ readonly mode: 'value';
963
+ readonly value: Record<string, never>;
964
+ }, "authorized", true, false, undefined, undefined>>;
908
965
  readonly provision: import("@astrale-os/sdk/schema").Method<import("@astrale-os/sdk/schema").CallableProjection<{
909
966
  directory: string;
910
967
  externalId: string;
@@ -948,7 +1005,7 @@ declare const input: {
948
1005
  readonly abstract: false;
949
1006
  readonly depth: 1;
950
1007
  readonly properties: "attributes" | "description" | "directory" | "externalId" | "frozen" | "icon" | "iss" | "name" | "sub";
951
- readonly methods: "assignMember" | "create" | "delete" | "deprovision" | "provision" | "unassignMember" | "update";
1008
+ readonly methods: "assignMember" | "assignMembers" | "create" | "delete" | "deprovision" | "provision" | "unassignMember" | "unassignMembers" | "update";
952
1009
  }[];
953
1010
  readonly outgoing: "0..1";
954
1011
  };
@@ -1006,6 +1063,13 @@ declare const input: {
1006
1063
  readonly description?: string;
1007
1064
  readonly immutable?: import("@astrale-os/sdk/schema").PropertyImmutability;
1008
1065
  }>;
1066
+ email: import("@astrale-os/sdk/schema").AuthoredProperty<{
1067
+ readonly type: "string";
1068
+ readonly minLength: 3;
1069
+ readonly maxLength: 320;
1070
+ }, {
1071
+ readonly required: false;
1072
+ }>;
1009
1073
  };
1010
1074
  readonly policies: {
1011
1075
  readonly read: ({ check, ref }: import("@astrale-os/sdk/schema").ClassRuleContext) => import("@astrale-os/sdk/schema").PolicyCheckExpression<import("@astrale-os/sdk/schema").PolicyRef, import("@astrale-os/sdk/schema").ClassRuleObject>;
@@ -1050,7 +1114,7 @@ declare const input: {
1050
1114
  readonly kind: 'node';
1051
1115
  readonly abstract: false;
1052
1116
  readonly depth: 0;
1053
- readonly properties: "execution" | "expiresAt" | "round" | "status";
1117
+ readonly properties: "email" | "execution" | "expiresAt" | "round" | "status";
1054
1118
  readonly methods: "accept" | "cancel" | "resend" | "send";
1055
1119
  }[];
1056
1120
  readonly outgoing: "0..1";
@@ -1136,28 +1200,6 @@ declare const input: {
1136
1200
  readonly constraints: Record<never, never>;
1137
1201
  readonly effectiveProperties: never;
1138
1202
  }>;
1139
- readonly view_access: import("@astrale-os/sdk/schema").DirectedEdgeClass<{
1140
- readonly depth: 0;
1141
- readonly abstract: false;
1142
- readonly extends: readonly [];
1143
- readonly properties: never;
1144
- readonly source: {
1145
- readonly as: "audience";
1146
- readonly accepts: readonly (import("@astrale-os/sdk/schema").ClassRef<"Identity"> & {
1147
- readonly origin: "kernel.astrale.ai";
1148
- })[];
1149
- readonly outgoing: "0..*";
1150
- };
1151
- readonly target: {
1152
- readonly as: "view";
1153
- readonly accepts: readonly (import("@astrale-os/sdk/schema").ClassRef<"View"> & {
1154
- readonly origin: "kernel.astrale.ai";
1155
- })[];
1156
- readonly incoming: "0..*";
1157
- };
1158
- readonly constraints: Record<never, never>;
1159
- readonly effectiveProperties: never;
1160
- }>;
1161
1203
  };
1162
1204
  readonly functions: {
1163
1205
  readonly listEntrypoints: import("@astrale-os/sdk/schema").Function<import("@astrale-os/sdk/schema").CallableProjection<Record<string, never>, {
@@ -1191,6 +1233,13 @@ declare const input: {
1191
1233
  profiles: number;
1192
1234
  };
1193
1235
  }, "authorized", false, false, undefined, undefined>>;
1236
+ readonly legacyMigrateViewAccess: import("@astrale-os/sdk/schema").Function<import("@astrale-os/sdk/schema").CallableProjection<Record<string, never>, {
1237
+ readonly mode: 'value';
1238
+ readonly value: {
1239
+ copied: number;
1240
+ removed: number;
1241
+ };
1242
+ }, "authorized", false, false, undefined, undefined>>;
1194
1243
  readonly disconnectDirectory: import("@astrale-os/sdk/schema").Function<import("@astrale-os/sdk/schema").CallableProjection<{
1195
1244
  directory: string;
1196
1245
  }, {
@@ -1208,8 +1257,8 @@ declare const input: {
1208
1257
  readonly usesFunction: import("@astrale-os/sdk/schema").Policy;
1209
1258
  readonly isSelf: import("@astrale-os/sdk/schema").Policy;
1210
1259
  readonly legacyOwnsMembershipGroup: import("@astrale-os/sdk/schema").Policy;
1211
- readonly hasRole: import("@astrale-os/sdk/schema").Policy;
1212
1260
  readonly holdsViewAccess: import("@astrale-os/sdk/schema").Policy;
1261
+ readonly hasRole: import("@astrale-os/sdk/schema").Policy;
1213
1262
  readonly describesSubject: import("@astrale-os/sdk/schema").Policy;
1214
1263
  readonly isProfileSource: import("@astrale-os/sdk/schema").Policy;
1215
1264
  readonly describesGroupOfSubject: import("@astrale-os/sdk/schema").Policy;
@@ -1230,6 +1279,7 @@ declare const input: {
1230
1279
  readonly 'user-profile.reader': import("@astrale-os/sdk/schema").CoreNode;
1231
1280
  readonly 'user-profile.self-writer': import("@astrale-os/sdk/schema").CoreNode;
1232
1281
  readonly 'group-profile.reader': import("@astrale-os/sdk/schema").CoreNode;
1282
+ readonly 'os.viewer': import("@astrale-os/sdk/schema").CoreNode;
1233
1283
  readonly admin: import("@astrale-os/sdk/schema").CoreNode;
1234
1284
  readonly member: import("@astrale-os/sdk/schema").CoreNode;
1235
1285
  readonly applications: import("@astrale-os/sdk/schema").CoreNode;
@@ -1273,6 +1323,28 @@ export declare const ShellSchema: import("@astrale-os/sdk/schema").AuthoredSchem
1273
1323
  readonly constraints: Record<never, never>;
1274
1324
  readonly effectiveProperties: never;
1275
1325
  }>;
1326
+ readonly view_access: import("@astrale-os/sdk/schema").DirectedEdgeClass<{
1327
+ readonly depth: 0;
1328
+ readonly abstract: false;
1329
+ readonly extends: readonly [];
1330
+ readonly properties: never;
1331
+ readonly source: {
1332
+ readonly as: "audience";
1333
+ readonly accepts: readonly (import("@astrale-os/sdk/schema").ClassRef<"Identity"> & {
1334
+ readonly origin: "kernel.astrale.ai";
1335
+ })[];
1336
+ readonly outgoing: "0..*";
1337
+ };
1338
+ readonly target: {
1339
+ readonly as: "view";
1340
+ readonly accepts: readonly (import("@astrale-os/sdk/schema").ClassRef<"View"> & {
1341
+ readonly origin: "kernel.astrale.ai";
1342
+ })[];
1343
+ readonly incoming: "0..*";
1344
+ };
1345
+ readonly constraints: Record<never, never>;
1346
+ readonly effectiveProperties: never;
1347
+ }>;
1276
1348
  readonly User: import("@astrale-os/sdk/schema").AuthoredNodeClass<{
1277
1349
  readonly icon: import("@astrale-os/sdk/schema").ClassIcon;
1278
1350
  readonly inheritance: "open";
@@ -1564,6 +1636,20 @@ export declare const ShellSchema: import("@astrale-os/sdk/schema").AuthoredSchem
1564
1636
  readonly mode: 'value';
1565
1637
  readonly value: Record<string, never>;
1566
1638
  }, "authorized", true, false, undefined, undefined>>;
1639
+ readonly assignMembers: import("@astrale-os/sdk/schema").Method<import("@astrale-os/sdk/schema").CallableProjection<{
1640
+ members: string[];
1641
+ group: string;
1642
+ }, {
1643
+ readonly mode: 'value';
1644
+ readonly value: Record<string, never>;
1645
+ }, "authorized", true, false, undefined, undefined>>;
1646
+ readonly unassignMembers: import("@astrale-os/sdk/schema").Method<import("@astrale-os/sdk/schema").CallableProjection<{
1647
+ members: string[];
1648
+ group: string;
1649
+ }, {
1650
+ readonly mode: 'value';
1651
+ readonly value: Record<string, never>;
1652
+ }, "authorized", true, false, undefined, undefined>>;
1567
1653
  readonly provision: import("@astrale-os/sdk/schema").Method<import("@astrale-os/sdk/schema").CallableProjection<{
1568
1654
  directory: string;
1569
1655
  externalId: string;
@@ -1607,7 +1693,7 @@ export declare const ShellSchema: import("@astrale-os/sdk/schema").AuthoredSchem
1607
1693
  readonly abstract: false;
1608
1694
  readonly depth: 1;
1609
1695
  readonly properties: "attributes" | "description" | "directory" | "externalId" | "frozen" | "icon" | "iss" | "name" | "sub";
1610
- readonly methods: "assignMember" | "create" | "delete" | "deprovision" | "provision" | "unassignMember" | "update";
1696
+ readonly methods: "assignMember" | "assignMembers" | "create" | "delete" | "deprovision" | "provision" | "unassignMember" | "unassignMembers" | "update";
1611
1697
  }[];
1612
1698
  readonly outgoing: "0..1";
1613
1699
  };
@@ -1665,6 +1751,13 @@ export declare const ShellSchema: import("@astrale-os/sdk/schema").AuthoredSchem
1665
1751
  readonly description?: string;
1666
1752
  readonly immutable?: import("@astrale-os/sdk/schema").PropertyImmutability;
1667
1753
  }>;
1754
+ email: import("@astrale-os/sdk/schema").AuthoredProperty<{
1755
+ readonly type: "string";
1756
+ readonly minLength: 3;
1757
+ readonly maxLength: 320;
1758
+ }, {
1759
+ readonly required: false;
1760
+ }>;
1668
1761
  };
1669
1762
  readonly policies: {
1670
1763
  readonly read: ({ check, ref }: import("@astrale-os/sdk/schema").ClassRuleContext) => import("@astrale-os/sdk/schema").PolicyCheckExpression<import("@astrale-os/sdk/schema").PolicyRef, import("@astrale-os/sdk/schema").ClassRuleObject>;
@@ -1709,7 +1802,7 @@ export declare const ShellSchema: import("@astrale-os/sdk/schema").AuthoredSchem
1709
1802
  readonly kind: 'node';
1710
1803
  readonly abstract: false;
1711
1804
  readonly depth: 0;
1712
- readonly properties: "execution" | "expiresAt" | "round" | "status";
1805
+ readonly properties: "email" | "execution" | "expiresAt" | "round" | "status";
1713
1806
  readonly methods: "accept" | "cancel" | "resend" | "send";
1714
1807
  }[];
1715
1808
  readonly outgoing: "0..1";
@@ -1795,28 +1888,6 @@ export declare const ShellSchema: import("@astrale-os/sdk/schema").AuthoredSchem
1795
1888
  readonly constraints: Record<never, never>;
1796
1889
  readonly effectiveProperties: never;
1797
1890
  }>;
1798
- readonly view_access: import("@astrale-os/sdk/schema").DirectedEdgeClass<{
1799
- readonly depth: 0;
1800
- readonly abstract: false;
1801
- readonly extends: readonly [];
1802
- readonly properties: never;
1803
- readonly source: {
1804
- readonly as: "audience";
1805
- readonly accepts: readonly (import("@astrale-os/sdk/schema").ClassRef<"Identity"> & {
1806
- readonly origin: "kernel.astrale.ai";
1807
- })[];
1808
- readonly outgoing: "0..*";
1809
- };
1810
- readonly target: {
1811
- readonly as: "view";
1812
- readonly accepts: readonly (import("@astrale-os/sdk/schema").ClassRef<"View"> & {
1813
- readonly origin: "kernel.astrale.ai";
1814
- })[];
1815
- readonly incoming: "0..*";
1816
- };
1817
- readonly constraints: Record<never, never>;
1818
- readonly effectiveProperties: never;
1819
- }>;
1820
1891
  };
1821
1892
  readonly functions: {
1822
1893
  readonly listEntrypoints: import("@astrale-os/sdk/schema").Function<import("@astrale-os/sdk/schema").CallableProjection<Record<string, never>, {
@@ -1850,6 +1921,13 @@ export declare const ShellSchema: import("@astrale-os/sdk/schema").AuthoredSchem
1850
1921
  profiles: number;
1851
1922
  };
1852
1923
  }, "authorized", false, false, undefined, undefined>>;
1924
+ readonly legacyMigrateViewAccess: import("@astrale-os/sdk/schema").Function<import("@astrale-os/sdk/schema").CallableProjection<Record<string, never>, {
1925
+ readonly mode: 'value';
1926
+ readonly value: {
1927
+ copied: number;
1928
+ removed: number;
1929
+ };
1930
+ }, "authorized", false, false, undefined, undefined>>;
1853
1931
  readonly disconnectDirectory: import("@astrale-os/sdk/schema").Function<import("@astrale-os/sdk/schema").CallableProjection<{
1854
1932
  directory: string;
1855
1933
  }, {
@@ -1867,8 +1945,8 @@ export declare const ShellSchema: import("@astrale-os/sdk/schema").AuthoredSchem
1867
1945
  readonly usesFunction: import("@astrale-os/sdk/schema").Policy;
1868
1946
  readonly isSelf: import("@astrale-os/sdk/schema").Policy;
1869
1947
  readonly legacyOwnsMembershipGroup: import("@astrale-os/sdk/schema").Policy;
1870
- readonly hasRole: import("@astrale-os/sdk/schema").Policy;
1871
1948
  readonly holdsViewAccess: import("@astrale-os/sdk/schema").Policy;
1949
+ readonly hasRole: import("@astrale-os/sdk/schema").Policy;
1872
1950
  readonly describesSubject: import("@astrale-os/sdk/schema").Policy;
1873
1951
  readonly isProfileSource: import("@astrale-os/sdk/schema").Policy;
1874
1952
  readonly describesGroupOfSubject: import("@astrale-os/sdk/schema").Policy;
@@ -1889,6 +1967,7 @@ export declare const ShellSchema: import("@astrale-os/sdk/schema").AuthoredSchem
1889
1967
  readonly 'user-profile.reader': import("@astrale-os/sdk/schema").CoreNode;
1890
1968
  readonly 'user-profile.self-writer': import("@astrale-os/sdk/schema").CoreNode;
1891
1969
  readonly 'group-profile.reader': import("@astrale-os/sdk/schema").CoreNode;
1970
+ readonly 'os.viewer': import("@astrale-os/sdk/schema").CoreNode;
1892
1971
  readonly admin: import("@astrale-os/sdk/schema").CoreNode;
1893
1972
  readonly member: import("@astrale-os/sdk/schema").CoreNode;
1894
1973
  readonly applications: import("@astrale-os/sdk/schema").CoreNode;
@@ -1934,6 +2013,28 @@ export declare const S: schema.ResolvedDomainOf<import("@astrale-os/sdk/schema")
1934
2013
  readonly constraints: Record<never, never>;
1935
2014
  readonly effectiveProperties: never;
1936
2015
  }>;
2016
+ readonly view_access: import("@astrale-os/sdk/schema").DirectedEdgeClass<{
2017
+ readonly depth: 0;
2018
+ readonly abstract: false;
2019
+ readonly extends: readonly [];
2020
+ readonly properties: never;
2021
+ readonly source: {
2022
+ readonly as: "audience";
2023
+ readonly accepts: readonly (import("@astrale-os/sdk/schema").ClassRef<"Identity"> & {
2024
+ readonly origin: "kernel.astrale.ai";
2025
+ })[];
2026
+ readonly outgoing: "0..*";
2027
+ };
2028
+ readonly target: {
2029
+ readonly as: "view";
2030
+ readonly accepts: readonly (import("@astrale-os/sdk/schema").ClassRef<"View"> & {
2031
+ readonly origin: "kernel.astrale.ai";
2032
+ })[];
2033
+ readonly incoming: "0..*";
2034
+ };
2035
+ readonly constraints: Record<never, never>;
2036
+ readonly effectiveProperties: never;
2037
+ }>;
1937
2038
  readonly User: import("@astrale-os/sdk/schema").AuthoredNodeClass<{
1938
2039
  readonly icon: import("@astrale-os/sdk/schema").ClassIcon;
1939
2040
  readonly inheritance: "open";
@@ -2225,6 +2326,20 @@ export declare const S: schema.ResolvedDomainOf<import("@astrale-os/sdk/schema")
2225
2326
  readonly mode: 'value';
2226
2327
  readonly value: Record<string, never>;
2227
2328
  }, "authorized", true, false, undefined, undefined>>;
2329
+ readonly assignMembers: import("@astrale-os/sdk/schema").Method<import("@astrale-os/sdk/schema").CallableProjection<{
2330
+ members: string[];
2331
+ group: string;
2332
+ }, {
2333
+ readonly mode: 'value';
2334
+ readonly value: Record<string, never>;
2335
+ }, "authorized", true, false, undefined, undefined>>;
2336
+ readonly unassignMembers: import("@astrale-os/sdk/schema").Method<import("@astrale-os/sdk/schema").CallableProjection<{
2337
+ members: string[];
2338
+ group: string;
2339
+ }, {
2340
+ readonly mode: 'value';
2341
+ readonly value: Record<string, never>;
2342
+ }, "authorized", true, false, undefined, undefined>>;
2228
2343
  readonly provision: import("@astrale-os/sdk/schema").Method<import("@astrale-os/sdk/schema").CallableProjection<{
2229
2344
  directory: string;
2230
2345
  externalId: string;
@@ -2268,7 +2383,7 @@ export declare const S: schema.ResolvedDomainOf<import("@astrale-os/sdk/schema")
2268
2383
  readonly abstract: false;
2269
2384
  readonly depth: 1;
2270
2385
  readonly properties: "attributes" | "description" | "directory" | "externalId" | "frozen" | "icon" | "iss" | "name" | "sub";
2271
- readonly methods: "assignMember" | "create" | "delete" | "deprovision" | "provision" | "unassignMember" | "update";
2386
+ readonly methods: "assignMember" | "assignMembers" | "create" | "delete" | "deprovision" | "provision" | "unassignMember" | "unassignMembers" | "update";
2272
2387
  }[];
2273
2388
  readonly outgoing: "0..1";
2274
2389
  };
@@ -2326,6 +2441,13 @@ export declare const S: schema.ResolvedDomainOf<import("@astrale-os/sdk/schema")
2326
2441
  readonly description?: string;
2327
2442
  readonly immutable?: import("@astrale-os/sdk/schema").PropertyImmutability;
2328
2443
  }>;
2444
+ email: import("@astrale-os/sdk/schema").AuthoredProperty<{
2445
+ readonly type: "string";
2446
+ readonly minLength: 3;
2447
+ readonly maxLength: 320;
2448
+ }, {
2449
+ readonly required: false;
2450
+ }>;
2329
2451
  };
2330
2452
  readonly policies: {
2331
2453
  readonly read: ({ check, ref }: import("@astrale-os/sdk/schema").ClassRuleContext) => import("@astrale-os/sdk/schema").PolicyCheckExpression<import("@astrale-os/sdk/schema").PolicyRef, import("@astrale-os/sdk/schema").ClassRuleObject>;
@@ -2370,7 +2492,7 @@ export declare const S: schema.ResolvedDomainOf<import("@astrale-os/sdk/schema")
2370
2492
  readonly kind: 'node';
2371
2493
  readonly abstract: false;
2372
2494
  readonly depth: 0;
2373
- readonly properties: "execution" | "expiresAt" | "round" | "status";
2495
+ readonly properties: "email" | "execution" | "expiresAt" | "round" | "status";
2374
2496
  readonly methods: "accept" | "cancel" | "resend" | "send";
2375
2497
  }[];
2376
2498
  readonly outgoing: "0..1";
@@ -2456,28 +2578,6 @@ export declare const S: schema.ResolvedDomainOf<import("@astrale-os/sdk/schema")
2456
2578
  readonly constraints: Record<never, never>;
2457
2579
  readonly effectiveProperties: never;
2458
2580
  }>;
2459
- readonly view_access: import("@astrale-os/sdk/schema").DirectedEdgeClass<{
2460
- readonly depth: 0;
2461
- readonly abstract: false;
2462
- readonly extends: readonly [];
2463
- readonly properties: never;
2464
- readonly source: {
2465
- readonly as: "audience";
2466
- readonly accepts: readonly (import("@astrale-os/sdk/schema").ClassRef<"Identity"> & {
2467
- readonly origin: "kernel.astrale.ai";
2468
- })[];
2469
- readonly outgoing: "0..*";
2470
- };
2471
- readonly target: {
2472
- readonly as: "view";
2473
- readonly accepts: readonly (import("@astrale-os/sdk/schema").ClassRef<"View"> & {
2474
- readonly origin: "kernel.astrale.ai";
2475
- })[];
2476
- readonly incoming: "0..*";
2477
- };
2478
- readonly constraints: Record<never, never>;
2479
- readonly effectiveProperties: never;
2480
- }>;
2481
2581
  };
2482
2582
  readonly functions: {
2483
2583
  readonly listEntrypoints: import("@astrale-os/sdk/schema").Function<import("@astrale-os/sdk/schema").CallableProjection<Record<string, never>, {
@@ -2511,6 +2611,13 @@ export declare const S: schema.ResolvedDomainOf<import("@astrale-os/sdk/schema")
2511
2611
  profiles: number;
2512
2612
  };
2513
2613
  }, "authorized", false, false, undefined, undefined>>;
2614
+ readonly legacyMigrateViewAccess: import("@astrale-os/sdk/schema").Function<import("@astrale-os/sdk/schema").CallableProjection<Record<string, never>, {
2615
+ readonly mode: 'value';
2616
+ readonly value: {
2617
+ copied: number;
2618
+ removed: number;
2619
+ };
2620
+ }, "authorized", false, false, undefined, undefined>>;
2514
2621
  readonly disconnectDirectory: import("@astrale-os/sdk/schema").Function<import("@astrale-os/sdk/schema").CallableProjection<{
2515
2622
  directory: string;
2516
2623
  }, {
@@ -2528,8 +2635,8 @@ export declare const S: schema.ResolvedDomainOf<import("@astrale-os/sdk/schema")
2528
2635
  readonly usesFunction: import("@astrale-os/sdk/schema").Policy;
2529
2636
  readonly isSelf: import("@astrale-os/sdk/schema").Policy;
2530
2637
  readonly legacyOwnsMembershipGroup: import("@astrale-os/sdk/schema").Policy;
2531
- readonly hasRole: import("@astrale-os/sdk/schema").Policy;
2532
2638
  readonly holdsViewAccess: import("@astrale-os/sdk/schema").Policy;
2639
+ readonly hasRole: import("@astrale-os/sdk/schema").Policy;
2533
2640
  readonly describesSubject: import("@astrale-os/sdk/schema").Policy;
2534
2641
  readonly isProfileSource: import("@astrale-os/sdk/schema").Policy;
2535
2642
  readonly describesGroupOfSubject: import("@astrale-os/sdk/schema").Policy;
@@ -2550,6 +2657,7 @@ export declare const S: schema.ResolvedDomainOf<import("@astrale-os/sdk/schema")
2550
2657
  readonly 'user-profile.reader': import("@astrale-os/sdk/schema").CoreNode;
2551
2658
  readonly 'user-profile.self-writer': import("@astrale-os/sdk/schema").CoreNode;
2552
2659
  readonly 'group-profile.reader': import("@astrale-os/sdk/schema").CoreNode;
2660
+ readonly 'os.viewer': import("@astrale-os/sdk/schema").CoreNode;
2553
2661
  readonly admin: import("@astrale-os/sdk/schema").CoreNode;
2554
2662
  readonly member: import("@astrale-os/sdk/schema").CoreNode;
2555
2663
  readonly applications: import("@astrale-os/sdk/schema").CoreNode;
@@ -1,5 +1,5 @@
1
1
  import { defineSchema, KernelSchema, schema } from '@astrale-os/sdk/schema';
2
- // Seam L-SHELL-7…14: the legacy declarations, under their stored names.
2
+ // Seam L-SHELL-7…20: the legacy declarations, under their stored names.
3
3
  import { legacyShellSchema } from './legacy/index.js';
4
4
  import { disconnectDirectory } from './modules/directory/index.js';
5
5
  import { Group, GroupProfile, describesGroupOfSubject, group_profile, isGroupProfileSource, } from './modules/group/index.js';
@@ -7,7 +7,6 @@ import { Invitation, invitation_user } from './modules/invitation/index.js';
7
7
  import { Namespace, alias, viewsNamespace } from './modules/namespace/index.js';
8
8
  import { Role, shellRoles } from './modules/role/index.js';
9
9
  import { User, UserProfile, describesSubject, isProfileSource, user_profile, } from './modules/user/index.js';
10
- import { holdsViewAccess, view_access } from './modules/view-access/index.js';
11
10
  import { hasRole } from './policies/index.js';
12
11
  import { applicationView } from './views/index.js';
13
12
  export const ORIGIN = 'shell.astrale.ai';
@@ -24,13 +23,11 @@ const classes = {
24
23
  Role,
25
24
  Namespace,
26
25
  alias,
27
- view_access,
28
26
  ...legacyShellSchema.classes,
29
27
  };
30
28
  const functions = { disconnectDirectory, ...legacyShellSchema.functions };
31
29
  const policies = {
32
30
  hasRole,
33
- holdsViewAccess,
34
31
  describesSubject,
35
32
  isProfileSource,
36
33
  describesGroupOfSubject,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@astrale-domains/shell",
3
- "version": "0.1.7",
3
+ "version": "0.1.9",
4
4
  "description": "Astrale Shell Domain schema and remote product implementation",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -58,7 +58,7 @@
58
58
  },
59
59
  "devDependencies": {
60
60
  "@astrale-os/ox": "0.1.4",
61
- "@astrale-os/sdk": "0.6.0-beta.60",
61
+ "@astrale-os/sdk": "0.6.0-beta.61",
62
62
  "@astrale-os/shell-react": "0.6.0-beta.11",
63
63
  "@astrale-os/ui": "1.0.0-beta.37",
64
64
  "@astrale/typescript-config": "npm:@jsr/astrale__typescript-config@~2.0.0",
@@ -1 +0,0 @@
1
- export { view_access } from './view-access.js';
@@ -1 +0,0 @@
1
- export { view_access } from './view-access.js';
@@ -1,23 +0,0 @@
1
- import { K, edgeClass } from '@astrale-os/sdk/schema';
2
- import { profileRoles } from '../../role/index.js';
3
- import { hasRole } from '../../../policies/index.js';
4
- import { holdsViewAccess } from '../policies/index.js';
5
- /**
6
- * A View an Identity lands on without `member`: an account, a group or a Role, and each of their
7
- * members. It decides navigation, never data: the View's own Domain still guards everything it
8
- * shows (V1). Only an admin writes it; an admin or its holders read it. Each end detaches with its
9
- * Node.
10
- */
11
- export const view_access = edgeClass.directed({
12
- inheritance: 'final',
13
- abstract: false,
14
- description: 'A View this Identity lands on without member.',
15
- source: { as: 'audience', accepts: [K.classes.Identity], outgoing: '0..*', onDelete: 'detach' },
16
- target: { as: 'view', accepts: [K.classes.View], incoming: '0..*', onDelete: 'detach' },
17
- policies: {
18
- read: ({ anyOf, check, ref, self }) => anyOf(check(hasRole, ref(profileRoles['workspace.admin'])), check(holdsViewAccess, self)),
19
- traverse: true,
20
- create: ({ check, ref }) => check(hasRole, ref(profileRoles['workspace.admin'])),
21
- delete: ({ check, ref }) => check(hasRole, ref(profileRoles['workspace.admin'])),
22
- },
23
- });
@@ -1,2 +0,0 @@
1
- /** The subject is the Edge's audience, or extends it: a group's members hold its Views. */
2
- export declare const holdsViewAccess: import("@astrale-os/sdk/schema").Policy;
@@ -1,5 +0,0 @@
1
- import { policy } from '@astrale-os/sdk/schema';
2
- /** The subject is the Edge's audience, or extends it: a group's members hold its Views. */
3
- export const holdsViewAccess = policy({
4
- match: ({ sameNode, subject, source }) => sameNode(subject, source),
5
- });
@@ -1 +0,0 @@
1
- export { holdsViewAccess } from './holds-view-access.js';
@@ -1 +0,0 @@
1
- export { holdsViewAccess } from './holds-view-access.js';