@astrale-domains/shell 0.1.0-beta.23 → 0.1.0-beta.24
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.
- package/CHANGELOG.md +12 -0
- package/README.md +83 -79
- package/dist/application.d.ts +6 -5
- package/dist/application.js +20 -51
- package/dist/functions/group/assign-user-to-group.d.ts +27 -0
- package/dist/functions/group/assign-user-to-group.js +4 -0
- package/dist/functions/group/change-user-group-membership.d.ts +7 -0
- package/dist/functions/group/change-user-group-membership.js +34 -0
- package/dist/functions/group/group-membership-errors.d.ts +28 -0
- package/dist/functions/group/group-membership-errors.js +23 -0
- package/dist/functions/group/index.d.ts +2 -3
- package/dist/functions/group/index.js +2 -3
- package/dist/functions/group/unassign-user-from-group.d.ts +27 -0
- package/dist/functions/group/unassign-user-from-group.js +4 -0
- package/dist/functions/user/index.d.ts +1 -3
- package/dist/functions/user/index.js +1 -3
- package/dist/functions/user/invite-user.d.ts +30 -0
- package/dist/functions/user/invite-user.js +39 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/integrations/index.d.ts +1 -0
- package/dist/integrations/index.js +1 -0
- package/dist/integrations/integrations.d.ts +9 -0
- package/dist/integrations/integrations.js +2 -0
- package/dist/integrations/user-invitation/index.d.ts +4 -0
- package/dist/integrations/user-invitation/index.js +3 -0
- package/dist/integrations/user-invitation/invitation-request-failure.d.ts +5 -0
- package/dist/integrations/user-invitation/invitation-request-failure.js +9 -0
- package/dist/integrations/user-invitation/invite-user-request.d.ts +6 -0
- package/dist/integrations/user-invitation/invite-user-request.js +1 -0
- package/dist/integrations/user-invitation/request-user-invitation.d.ts +8 -0
- package/dist/integrations/user-invitation/request-user-invitation.js +9 -0
- package/dist/mutations/group/index.d.ts +1 -1
- package/dist/mutations/group/index.js +1 -1
- package/dist/mutations/group/set-user-group-membership.d.ts +26 -0
- package/dist/mutations/group/set-user-group-membership.js +29 -0
- package/dist/providers/admin-enrollment/create-admin-enrollment-provider.d.ts +7 -0
- package/dist/providers/admin-enrollment/create-admin-enrollment-provider.js +78 -0
- package/dist/providers/admin-enrollment/decode-admin-invitation-response.d.ts +7 -0
- package/dist/providers/admin-enrollment/decode-admin-invitation-response.js +20 -0
- package/dist/providers/admin-enrollment/index.d.ts +1 -0
- package/dist/providers/admin-enrollment/index.js +1 -0
- package/dist/providers/admin-enrollment/read-enrollment-response.d.ts +1 -0
- package/dist/providers/admin-enrollment/read-enrollment-response.js +34 -0
- package/dist/queries/group/index.d.ts +2 -0
- package/dist/queries/group/index.js +2 -0
- package/dist/queries/group/read-group-membership-endpoints.d.ts +13 -0
- package/dist/queries/group/read-group-membership-endpoints.js +18 -0
- package/dist/queries/group/read-user-group-membership.d.ts +15 -0
- package/dist/queries/group/read-user-group-membership.js +35 -0
- package/dist/runtime.d.ts +94 -9
- package/dist/runtime.js +9 -5
- package/dist/schema/index.d.ts +4 -4
- package/dist/schema/index.js +3 -4
- package/dist/schema/modules/group/classes/group.d.ts +4 -6
- package/dist/schema/modules/group/classes/group.js +4 -6
- package/dist/schema/modules/group/classes/index.d.ts +2 -0
- package/dist/schema/modules/group/classes/index.js +2 -0
- package/dist/schema/modules/group/classes/member-of-group.js +2 -3
- package/dist/schema/modules/group/core/administrators-group.js +6 -0
- package/dist/schema/modules/group/core/index.d.ts +2 -0
- package/dist/schema/modules/group/core/index.js +2 -0
- package/dist/schema/modules/group/core/members-group.js +6 -0
- package/dist/schema/modules/group/functions/assign-user-to-group.d.ts +7 -0
- package/dist/schema/modules/group/functions/assign-user-to-group.js +11 -0
- package/dist/schema/modules/group/functions/index.d.ts +2 -0
- package/dist/schema/modules/group/functions/index.js +2 -0
- package/dist/schema/modules/group/functions/unassign-user-from-group.d.ts +7 -0
- package/dist/schema/modules/group/functions/unassign-user-from-group.js +11 -0
- package/dist/schema/modules/group/index.d.ts +3 -9
- package/dist/schema/modules/group/index.js +3 -9
- package/dist/schema/modules/group/policies/belongs-to-group.d.ts +1 -0
- package/dist/schema/modules/group/policies/belongs-to-group.js +5 -0
- package/dist/schema/modules/group/policies/index.d.ts +1 -0
- package/dist/schema/modules/group/policies/index.js +1 -0
- package/dist/schema/modules/group/types/group-user-reference.d.ts +6 -0
- package/dist/schema/modules/group/types/group-user-reference.js +8 -0
- package/dist/schema/modules/group/types/index.d.ts +1 -0
- package/dist/schema/modules/group/types/index.js +1 -0
- package/dist/schema/modules/user/classes/index.d.ts +1 -0
- package/dist/schema/modules/user/classes/index.js +1 -0
- package/dist/schema/modules/user/classes/user.d.ts +5 -8
- package/dist/schema/modules/user/classes/user.js +7 -7
- package/dist/schema/modules/user/functions/index.d.ts +1 -0
- package/dist/schema/modules/user/functions/index.js +1 -0
- package/dist/schema/modules/user/functions/invite-user.d.ts +11 -0
- package/dist/schema/modules/user/functions/invite-user.js +12 -0
- package/dist/schema/modules/user/index.d.ts +2 -6
- package/dist/schema/modules/user/index.js +2 -6
- package/dist/schema/modules/user/types/index.d.ts +1 -0
- package/dist/schema/modules/user/types/index.js +1 -0
- package/dist/schema/modules/user/types/invitation-summary.d.ts +16 -0
- package/dist/schema/modules/user/types/invitation-summary.js +15 -0
- package/dist/schema/policies/administers-shell-class.d.ts +2 -0
- package/dist/schema/policies/administers-shell-class.js +11 -0
- package/dist/schema/policies/index.d.ts +2 -0
- package/dist/schema/policies/index.js +2 -0
- package/dist/schema/policies/owns-class.d.ts +1 -0
- package/dist/schema/policies/owns-class.js +7 -0
- package/dist/schema/schema.d.ts +14 -69
- package/dist/schema/schema.js +10 -27
- package/dist/schema/views/application-view.d.ts +1 -0
- package/dist/schema/views/application-view.js +4 -0
- package/dist/schema/views/index.d.ts +1 -0
- package/dist/schema/views/index.js +1 -0
- package/dist/utils/canonical-node-path/index.d.ts +1 -0
- package/dist/utils/canonical-node-path/index.js +1 -0
- package/dist/utils/canonical-node-path/parse-canonical-node-path.d.ts +2 -0
- package/dist/utils/canonical-node-path/parse-canonical-node-path.js +8 -0
- package/package.json +16 -7
- package/dist/functions/group/assign.d.ts +0 -3
- package/dist/functions/group/assign.js +0 -3
- package/dist/functions/group/change.d.ts +0 -6
- package/dist/functions/group/change.js +0 -41
- package/dist/functions/group/unassign.d.ts +0 -3
- package/dist/functions/group/unassign.js +0 -3
- package/dist/functions/registry/index.d.ts +0 -12
- package/dist/functions/registry/index.js +0 -12
- package/dist/functions/setup/admin.d.ts +0 -3
- package/dist/functions/setup/admin.js +0 -3
- package/dist/functions/setup/index.d.ts +0 -4
- package/dist/functions/setup/index.js +0 -4
- package/dist/functions/setup/member.d.ts +0 -3
- package/dist/functions/setup/member.js +0 -3
- package/dist/functions/setup/provision.d.ts +0 -5
- package/dist/functions/setup/provision.js +0 -70
- package/dist/functions/setup/run.d.ts +0 -7
- package/dist/functions/setup/run.js +0 -82
- package/dist/functions/space/access.d.ts +0 -7
- package/dist/functions/space/access.js +0 -41
- package/dist/functions/space/add.d.ts +0 -3
- package/dist/functions/space/add.js +0 -3
- package/dist/functions/space/default.d.ts +0 -3
- package/dist/functions/space/default.js +0 -37
- package/dist/functions/space/index.d.ts +0 -4
- package/dist/functions/space/index.js +0 -4
- package/dist/functions/space/remove.d.ts +0 -3
- package/dist/functions/space/remove.js +0 -3
- package/dist/functions/user/resolve-home.d.ts +0 -3
- package/dist/functions/user/resolve-home.js +0 -19
- package/dist/mutations/group/membership.d.ts +0 -23
- package/dist/mutations/group/membership.js +0 -32
- package/dist/mutations/space/access.d.ts +0 -25
- package/dist/mutations/space/access.js +0 -23
- package/dist/mutations/space/default.d.ts +0 -19
- package/dist/mutations/space/default.js +0 -23
- package/dist/mutations/space/index.d.ts +0 -2
- package/dist/mutations/space/index.js +0 -2
- package/dist/mutations/user/index.d.ts +0 -1
- package/dist/mutations/user/index.js +0 -1
- package/dist/mutations/user/repair.d.ts +0 -22
- package/dist/mutations/user/repair.js +0 -104
- package/dist/queries/space/access.d.ts +0 -9
- package/dist/queries/space/access.js +0 -12
- package/dist/queries/space/admin.d.ts +0 -9
- package/dist/queries/space/admin.js +0 -20
- package/dist/queries/space/index.d.ts +0 -3
- package/dist/queries/space/index.js +0 -3
- package/dist/queries/space/member.d.ts +0 -9
- package/dist/queries/space/member.js +0 -17
- package/dist/queries/user/groups.d.ts +0 -10
- package/dist/queries/user/groups.js +0 -41
- package/dist/queries/user/home.d.ts +0 -9
- package/dist/queries/user/home.js +0 -21
- package/dist/queries/user/index.d.ts +0 -5
- package/dist/queries/user/index.js +0 -5
- package/dist/queries/user/owned-spaces.d.ts +0 -9
- package/dist/queries/user/owned-spaces.js +0 -17
- package/dist/queries/user/profile.d.ts +0 -4
- package/dist/queries/user/profile.js +0 -16
- package/dist/queries/user/setup.d.ts +0 -13
- package/dist/queries/user/setup.js +0 -16
- package/dist/rules/user/index.d.ts +0 -1
- package/dist/rules/user/index.js +0 -1
- package/dist/rules/user/setup.d.ts +0 -38
- package/dist/rules/user/setup.js +0 -95
- package/dist/schema/modules/group/core/admin-group.js +0 -2
- package/dist/schema/modules/group/core/core.d.ts +0 -8
- package/dist/schema/modules/group/core/core.js +0 -6
- package/dist/schema/modules/group/core/identity.d.ts +0 -1
- package/dist/schema/modules/group/core/identity.js +0 -10
- package/dist/schema/modules/group/core/member-group.js +0 -2
- package/dist/schema/modules/group/functions/assign-user.d.ts +0 -7
- package/dist/schema/modules/group/functions/assign-user.js +0 -12
- package/dist/schema/modules/group/functions/unassign-user.d.ts +0 -7
- package/dist/schema/modules/group/functions/unassign-user.js +0 -12
- package/dist/schema/modules/group/policies/may-setup-users.d.ts +0 -1
- package/dist/schema/modules/group/policies/may-setup-users.js +0 -6
- package/dist/schema/modules/group/types/membership.d.ts +0 -276
- package/dist/schema/modules/group/types/membership.js +0 -5
- package/dist/schema/modules/group/views/group.d.ts +0 -1
- package/dist/schema/modules/group/views/group.js +0 -6
- package/dist/schema/modules/space/classes/administers-space.d.ts +0 -16
- package/dist/schema/modules/space/classes/administers-space.js +0 -9
- package/dist/schema/modules/space/classes/default-space.d.ts +0 -16
- package/dist/schema/modules/space/classes/default-space.js +0 -8
- package/dist/schema/modules/space/classes/member-of-space.d.ts +0 -16
- package/dist/schema/modules/space/classes/member-of-space.js +0 -9
- package/dist/schema/modules/space/classes/owns-space.d.ts +0 -16
- package/dist/schema/modules/space/classes/owns-space.js +0 -9
- package/dist/schema/modules/space/classes/space.d.ts +0 -15
- package/dist/schema/modules/space/classes/space.js +0 -15
- package/dist/schema/modules/space/core/core.d.ts +0 -7
- package/dist/schema/modules/space/core/core.js +0 -12
- package/dist/schema/modules/space/core/default-space.d.ts +0 -1
- package/dist/schema/modules/space/core/default-space.js +0 -6
- package/dist/schema/modules/space/functions/add-user.d.ts +0 -8
- package/dist/schema/modules/space/functions/add-user.js +0 -12
- package/dist/schema/modules/space/functions/remove-user.d.ts +0 -7
- package/dist/schema/modules/space/functions/remove-user.js +0 -11
- package/dist/schema/modules/space/functions/set-default.d.ts +0 -5
- package/dist/schema/modules/space/functions/set-default.js +0 -11
- package/dist/schema/modules/space/index.d.ts +0 -14
- package/dist/schema/modules/space/index.js +0 -14
- package/dist/schema/modules/space/policies/belongs-to-space.d.ts +0 -1
- package/dist/schema/modules/space/policies/belongs-to-space.js +0 -9
- package/dist/schema/modules/space/policies/may-administer-space.d.ts +0 -1
- package/dist/schema/modules/space/policies/may-administer-space.js +0 -8
- package/dist/schema/modules/space/policies/owns-space.d.ts +0 -1
- package/dist/schema/modules/space/policies/owns-space.js +0 -7
- package/dist/schema/modules/space/types/access.d.ts +0 -280
- package/dist/schema/modules/space/types/access.js +0 -12
- package/dist/schema/modules/space/views/space.d.ts +0 -1
- package/dist/schema/modules/space/views/space.js +0 -6
- package/dist/schema/modules/user/functions/resolve-home.d.ts +0 -7
- package/dist/schema/modules/user/functions/resolve-home.js +0 -11
- package/dist/schema/modules/user/functions/setup-admin.d.ts +0 -15
- package/dist/schema/modules/user/functions/setup-admin.js +0 -11
- package/dist/schema/modules/user/functions/setup-member.d.ts +0 -15
- package/dist/schema/modules/user/functions/setup-member.js +0 -11
- package/dist/schema/modules/user/types/setup-user.d.ts +0 -13
- package/dist/schema/modules/user/types/setup-user.js +0 -14
- package/dist/schema/modules/user/views/home.d.ts +0 -1
- package/dist/schema/modules/user/views/home.js +0 -4
- package/dist/schema/modules/user/views/user.d.ts +0 -1
- package/dist/schema/modules/user/views/user.js +0 -6
- /package/dist/schema/modules/group/core/{admin-group.d.ts → administrators-group.d.ts} +0 -0
- /package/dist/schema/modules/group/core/{member-group.d.ts → members-group.d.ts} +0 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare const assignUser: import("@astrale-os/sdk/schema").Method<import("@astrale-os/sdk/schema").CallableProjection<{
|
|
2
|
+
user: string;
|
|
3
|
+
group: string;
|
|
4
|
+
}, {
|
|
5
|
+
readonly mode: 'value';
|
|
6
|
+
readonly value: Record<string, never>;
|
|
7
|
+
}, "authorized", true, "default">>;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { method } from '@astrale-os/sdk/schema';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { ownsClass, administersShellClass } from '../../../policies/index.js';
|
|
4
|
+
import { groupMembershipInput } from '../types/index.js';
|
|
5
|
+
export const assignUser = method({
|
|
6
|
+
static: true,
|
|
7
|
+
auth: 'authorized',
|
|
8
|
+
input: groupMembershipInput,
|
|
9
|
+
output: z.object({}),
|
|
10
|
+
policy: ({ anyOf, check, input }) => anyOf(check(administersShellClass, input.group), check(ownsClass, input.group)),
|
|
11
|
+
});
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare const unassignUser: import("@astrale-os/sdk/schema").Method<import("@astrale-os/sdk/schema").CallableProjection<{
|
|
2
|
+
user: string;
|
|
3
|
+
group: string;
|
|
4
|
+
}, {
|
|
5
|
+
readonly mode: 'value';
|
|
6
|
+
readonly value: Record<string, never>;
|
|
7
|
+
}, "authorized", true, "default">>;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { method } from '@astrale-os/sdk/schema';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { ownsClass, administersShellClass } from '../../../policies/index.js';
|
|
4
|
+
import { groupMembershipInput } from '../types/index.js';
|
|
5
|
+
export const unassignUser = method({
|
|
6
|
+
static: true,
|
|
7
|
+
auth: 'authorized',
|
|
8
|
+
input: groupMembershipInput,
|
|
9
|
+
output: z.object({}),
|
|
10
|
+
policy: ({ anyOf, check, input }) => anyOf(check(administersShellClass, input.group), check(ownsClass, input.group)),
|
|
11
|
+
});
|
|
@@ -1,9 +1,3 @@
|
|
|
1
|
-
export { Group } from './classes/
|
|
2
|
-
export {
|
|
3
|
-
export {
|
|
4
|
-
export { groupCore } from './core/core.js';
|
|
5
|
-
export { memberGroup } from './core/member-group.js';
|
|
6
|
-
export { groupAssignUser } from './functions/assign-user.js';
|
|
7
|
-
export { groupUnassignUser } from './functions/unassign-user.js';
|
|
8
|
-
export { maySetupUsers } from './policies/may-setup-users.js';
|
|
9
|
-
export { groupView } from './views/group.js';
|
|
1
|
+
export { Group, member_of_group } from './classes/index.js';
|
|
2
|
+
export { adminGroup, memberGroup } from './core/index.js';
|
|
3
|
+
export { belongsToGroup } from './policies/index.js';
|
|
@@ -1,9 +1,3 @@
|
|
|
1
|
-
export { Group } from './classes/
|
|
2
|
-
export {
|
|
3
|
-
export {
|
|
4
|
-
export { groupCore } from './core/core.js';
|
|
5
|
-
export { memberGroup } from './core/member-group.js';
|
|
6
|
-
export { groupAssignUser } from './functions/assign-user.js';
|
|
7
|
-
export { groupUnassignUser } from './functions/unassign-user.js';
|
|
8
|
-
export { maySetupUsers } from './policies/may-setup-users.js';
|
|
9
|
-
export { groupView } from './views/group.js';
|
|
1
|
+
export { Group, member_of_group } from './classes/index.js';
|
|
2
|
+
export { adminGroup, memberGroup } from './core/index.js';
|
|
3
|
+
export { belongsToGroup } from './policies/index.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const belongsToGroup: import("@astrale-os/sdk/schema").Policy;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { policy } from '@astrale-os/sdk/schema';
|
|
2
|
+
import { member_of_group } from '../classes/member-of-group.js';
|
|
3
|
+
export const belongsToGroup = policy({
|
|
4
|
+
match: ({ edge, subject, object }) => edge({ source: subject, class: () => member_of_group, target: object }),
|
|
5
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { belongsToGroup } from './belongs-to-group.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { belongsToGroup } from './belongs-to-group.js';
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { NodeClass } from '@astrale-os/sdk/schema';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
export declare const groupMembershipInput: z.ZodObject<{
|
|
4
|
+
user: import("@astrale-os/sdk/schema").PathAuthoring<readonly [() => NodeClass]>;
|
|
5
|
+
group: import("@astrale-os/sdk/schema").PathAuthoring<readonly [() => NodeClass]>;
|
|
6
|
+
}, z.core.$strip>;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { path } from '@astrale-os/sdk/schema';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { User } from '../../user/index.js';
|
|
4
|
+
import { Group } from '../classes/group.js';
|
|
5
|
+
export const groupMembershipInput = z.object({
|
|
6
|
+
user: path(() => User),
|
|
7
|
+
group: path(() => Group),
|
|
8
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { groupMembershipInput } from './group-user-reference.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { groupMembershipInput } from './group-user-reference.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { User } from './user.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { User } from './user.js';
|
|
@@ -1,18 +1,15 @@
|
|
|
1
1
|
import { nodeClass, type ClassIcon, type Kernel } from '@astrale-os/sdk/schema';
|
|
2
2
|
import { z } from 'zod';
|
|
3
|
-
import {
|
|
4
|
-
declare const
|
|
5
|
-
readonly required: false;
|
|
6
|
-
}, never>;
|
|
3
|
+
import { invite } from '../functions/index.js';
|
|
4
|
+
declare const creationKey: z.ZodOptional<z.ZodString>;
|
|
7
5
|
export interface UserConfig {
|
|
8
|
-
readonly description: string;
|
|
9
|
-
readonly extends: readonly [Kernel['classes']['Identity']];
|
|
10
6
|
readonly icon: ClassIcon;
|
|
7
|
+
readonly extends: readonly [Kernel['classes']['Identity']];
|
|
11
8
|
readonly properties: {
|
|
12
|
-
readonly
|
|
9
|
+
readonly creationKey: typeof creationKey;
|
|
13
10
|
};
|
|
14
11
|
readonly methods: {
|
|
15
|
-
readonly
|
|
12
|
+
readonly invite: typeof invite;
|
|
16
13
|
};
|
|
17
14
|
}
|
|
18
15
|
export declare const User: ReturnType<typeof nodeClass<UserConfig>>;
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { K, classIcon, nodeClass } from '@astrale-os/sdk/schema';
|
|
2
2
|
import { UserRound } from '@astrale-os/sdk/schema/icons';
|
|
3
3
|
import { z } from 'zod';
|
|
4
|
-
import {
|
|
5
|
-
|
|
4
|
+
import { invite } from '../functions/index.js';
|
|
5
|
+
// Correlation for Admin-owned creation; never an authentication credential.
|
|
6
|
+
const creationKey = z.string().min(1).max(512).optional();
|
|
6
7
|
export const User = nodeClass({
|
|
7
|
-
description: 'One externally identified person using Shell.',
|
|
8
|
-
extends: [K.classes.Identity],
|
|
9
8
|
icon: classIcon.lucide(UserRound),
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
extends: [K.classes.Identity],
|
|
10
|
+
properties: { creationKey },
|
|
11
|
+
methods: { invite },
|
|
12
12
|
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { invite } from './invite-user.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { invite } from './invite-user.js';
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export declare const invite: import("@astrale-os/sdk/schema").Method<import("@astrale-os/sdk/schema").CallableProjection<{
|
|
2
|
+
user: string;
|
|
3
|
+
email: string;
|
|
4
|
+
}, {
|
|
5
|
+
readonly mode: 'value';
|
|
6
|
+
readonly value: {
|
|
7
|
+
invitationId: string;
|
|
8
|
+
user: string;
|
|
9
|
+
state: "accepted" | "cancelled" | "completed" | "expired" | "failed" | "pending" | "registered" | "registering";
|
|
10
|
+
};
|
|
11
|
+
}, "authorized", true, "default">>;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { method, path } from '@astrale-os/sdk/schema';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { ownsClass, administersShellClass } from '../../../policies/index.js';
|
|
4
|
+
import { User } from '../classes/index.js';
|
|
5
|
+
import { invitationSummary } from '../types/index.js';
|
|
6
|
+
export const invite = method({
|
|
7
|
+
static: true,
|
|
8
|
+
auth: 'authorized',
|
|
9
|
+
input: z.object({ user: path(() => User), email: z.string().min(3).max(320) }),
|
|
10
|
+
output: invitationSummary,
|
|
11
|
+
policy: ({ anyOf, check, input }) => anyOf(check(administersShellClass, input.user), check(ownsClass, input.user)),
|
|
12
|
+
});
|
|
@@ -1,6 +1,2 @@
|
|
|
1
|
-
export { User } from './classes/
|
|
2
|
-
export {
|
|
3
|
-
export { setupAdmin } from './functions/setup-admin.js';
|
|
4
|
-
export { setupMember } from './functions/setup-member.js';
|
|
5
|
-
export { homeView } from './views/home.js';
|
|
6
|
-
export { userView } from './views/user.js';
|
|
1
|
+
export { User } from './classes/index.js';
|
|
2
|
+
export { invitationSummary, type InvitationSummary } from './types/index.js';
|
|
@@ -1,6 +1,2 @@
|
|
|
1
|
-
export { User } from './classes/
|
|
2
|
-
export {
|
|
3
|
-
export { setupAdmin } from './functions/setup-admin.js';
|
|
4
|
-
export { setupMember } from './functions/setup-member.js';
|
|
5
|
-
export { homeView } from './views/home.js';
|
|
6
|
-
export { userView } from './views/user.js';
|
|
1
|
+
export { User } from './classes/index.js';
|
|
2
|
+
export { invitationSummary } from './types/index.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { invitationSummary, type InvitationSummary } from './invitation-summary.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { invitationSummary } from './invitation-summary.js';
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const invitationSummary: z.ZodObject<{
|
|
3
|
+
invitationId: z.ZodString;
|
|
4
|
+
user: z.ZodString;
|
|
5
|
+
state: z.ZodEnum<{
|
|
6
|
+
accepted: "accepted";
|
|
7
|
+
cancelled: "cancelled";
|
|
8
|
+
completed: "completed";
|
|
9
|
+
expired: "expired";
|
|
10
|
+
failed: "failed";
|
|
11
|
+
pending: "pending";
|
|
12
|
+
registered: "registered";
|
|
13
|
+
registering: "registering";
|
|
14
|
+
}>;
|
|
15
|
+
}, z.core.$strip>;
|
|
16
|
+
export type InvitationSummary = z.infer<typeof invitationSummary>;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export const invitationSummary = z.object({
|
|
3
|
+
invitationId: z.string().min(1),
|
|
4
|
+
user: z.string().min(1),
|
|
5
|
+
state: z.enum([
|
|
6
|
+
'pending',
|
|
7
|
+
'accepted',
|
|
8
|
+
'registering',
|
|
9
|
+
'registered',
|
|
10
|
+
'completed',
|
|
11
|
+
'cancelled',
|
|
12
|
+
'expired',
|
|
13
|
+
'failed',
|
|
14
|
+
]),
|
|
15
|
+
});
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { K, policy } from '@astrale-os/sdk/schema';
|
|
2
|
+
import { Group, member_of_group, adminGroup } from '../modules/group/index.js';
|
|
3
|
+
/** Instance administration applies to Shell's concrete classes, not foreign descendants. */
|
|
4
|
+
export const administersShellClass = policy({
|
|
5
|
+
match: ({ exists, subject, object, ref, edge, allOf }) => exists(({ node }) => {
|
|
6
|
+
const concrete = node();
|
|
7
|
+
const owner = node(); // of_domain restricts this witness to a protected Domain endpoint.
|
|
8
|
+
const group = ref(() => Group);
|
|
9
|
+
return allOf(edge({ source: subject, class: () => member_of_group, target: ref(adminGroup) }), { source: ref(adminGroup), class: K.classes.instance_of.ref, target: group }, { source: group, class: K.classes.of_domain.ref, target: owner }, { source: concrete, class: K.classes.of_domain.ref, target: owner }, { source: object, class: K.classes.instance_of.ref, target: concrete });
|
|
10
|
+
}),
|
|
11
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const ownsClass: import("@astrale-os/sdk/schema").Policy;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { K, policy } from '@astrale-os/sdk/schema';
|
|
2
|
+
export const ownsClass = policy({
|
|
3
|
+
match: ({ exists, subject, object, allOf }) => exists(({ node }) => {
|
|
4
|
+
const concrete = node(); // Périmètre défini par les deux edges kernel protégés.
|
|
5
|
+
return allOf({ source: object, class: K.classes.instance_of.ref, target: concrete }, { source: concrete, class: K.classes.of_domain.ref, target: subject });
|
|
6
|
+
}),
|
|
7
|
+
});
|
package/dist/schema/schema.d.ts
CHANGED
|
@@ -1,93 +1,38 @@
|
|
|
1
|
-
import { defineSchema, KernelSchema, schema
|
|
1
|
+
import { defineSchema, KernelSchema, schema } from '@astrale-os/sdk/schema';
|
|
2
2
|
import { Group, member_of_group } from './modules/group/index.js';
|
|
3
|
-
import { Space, administers_space, default_space, member_of_space, owns_space } from './modules/space/index.js';
|
|
4
3
|
import { User } from './modules/user/index.js';
|
|
5
4
|
export declare const ORIGIN: 'shell.astrale.ai';
|
|
6
|
-
export declare const ShellCore: {
|
|
7
|
-
nodes: {
|
|
8
|
-
admin: builder.CoreNode;
|
|
9
|
-
member: builder.CoreNode;
|
|
10
|
-
'default-space': builder.CoreNode;
|
|
11
|
-
};
|
|
12
|
-
edges: builder.CoreEdge[];
|
|
13
|
-
};
|
|
14
5
|
declare const dependencies: Readonly<{
|
|
15
|
-
kernel: KernelSchema;
|
|
6
|
+
kernel: typeof KernelSchema;
|
|
16
7
|
}>;
|
|
17
|
-
declare const functions: {
|
|
18
|
-
readonly setupAdmin: builder.Function<builder.CallableProjection<{
|
|
19
|
-
operationId: string;
|
|
20
|
-
issuer: string;
|
|
21
|
-
subject: string;
|
|
22
|
-
displayName: string;
|
|
23
|
-
personalSpaceName: string;
|
|
24
|
-
}, {
|
|
25
|
-
readonly mode: 'value';
|
|
26
|
-
readonly value: {
|
|
27
|
-
userId: string;
|
|
28
|
-
personalSpaceId: string;
|
|
29
|
-
changed: boolean;
|
|
30
|
-
};
|
|
31
|
-
}, "authorized", false, "default">>;
|
|
32
|
-
readonly setupMember: builder.Function<builder.CallableProjection<{
|
|
33
|
-
operationId: string;
|
|
34
|
-
issuer: string;
|
|
35
|
-
subject: string;
|
|
36
|
-
displayName: string;
|
|
37
|
-
personalSpaceName: string;
|
|
38
|
-
}, {
|
|
39
|
-
readonly mode: 'value';
|
|
40
|
-
readonly value: {
|
|
41
|
-
userId: string;
|
|
42
|
-
personalSpaceId: string;
|
|
43
|
-
changed: boolean;
|
|
44
|
-
};
|
|
45
|
-
}, "authorized", false, "default">>;
|
|
46
|
-
};
|
|
47
8
|
export type ShellClasses = {
|
|
48
|
-
readonly Group: typeof Group;
|
|
49
|
-
readonly Space: typeof Space;
|
|
50
9
|
readonly User: typeof User;
|
|
51
|
-
readonly
|
|
52
|
-
readonly default_space: typeof default_space;
|
|
10
|
+
readonly Group: typeof Group;
|
|
53
11
|
readonly member_of_group: typeof member_of_group;
|
|
54
|
-
readonly member_of_space: typeof member_of_space;
|
|
55
|
-
readonly owns_space: typeof owns_space;
|
|
56
12
|
};
|
|
57
13
|
declare const policies: {
|
|
58
|
-
readonly
|
|
59
|
-
readonly
|
|
60
|
-
readonly
|
|
61
|
-
readonly ownsSpace: builder.Policy;
|
|
14
|
+
readonly belongsToGroup: import("@astrale-os/sdk/schema").Policy;
|
|
15
|
+
readonly ownsClass: import("@astrale-os/sdk/schema").Policy;
|
|
16
|
+
readonly administersShellClass: import("@astrale-os/sdk/schema").Policy;
|
|
62
17
|
};
|
|
63
18
|
declare const views: {
|
|
64
|
-
readonly
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
readonly
|
|
19
|
+
readonly application: import("@astrale-os/sdk/schema").View;
|
|
20
|
+
};
|
|
21
|
+
declare const core: {
|
|
22
|
+
readonly nodes: {
|
|
23
|
+
readonly admin: import("@astrale-os/sdk/schema").CoreNode;
|
|
24
|
+
readonly member: import("@astrale-os/sdk/schema").CoreNode;
|
|
25
|
+
};
|
|
68
26
|
};
|
|
69
27
|
export interface ShellSchemaInput {
|
|
70
28
|
readonly dependencies: typeof dependencies;
|
|
71
|
-
readonly functions: typeof functions;
|
|
72
29
|
readonly classes: ShellClasses;
|
|
73
30
|
readonly policies: typeof policies;
|
|
74
31
|
readonly views: typeof views;
|
|
75
|
-
readonly core: typeof
|
|
32
|
+
readonly core: typeof core;
|
|
76
33
|
}
|
|
77
34
|
export declare const ShellSchema: ReturnType<typeof defineSchema<typeof ORIGIN, ShellSchemaInput>>;
|
|
78
35
|
export type ShellSchema = typeof ShellSchema;
|
|
79
36
|
export declare const S: schema.ResolvedDomainOf<typeof ShellSchema>;
|
|
80
37
|
export type Shell = schema.DomainOf<ShellSchema>;
|
|
81
|
-
export type GroupMembershipInput = CallableInputOf<typeof S.classes.Group.self.methods.assignUser>;
|
|
82
|
-
export type GroupMembershipResult = CallableResultOf<typeof S.classes.Group.self.methods.assignUser>;
|
|
83
|
-
export type ResolveHomeResult = CallableResultOf<typeof S.classes.User.self.methods.resolveHome>;
|
|
84
|
-
export type SetDefaultSpaceInput = CallableInputOf<typeof S.classes.Space.self.methods.setDefault>;
|
|
85
|
-
export type SetDefaultSpaceResult = CallableResultOf<typeof S.classes.Space.self.methods.setDefault>;
|
|
86
|
-
export type SetupUserInput = CallableInputOf<typeof S.functions.setupMember>;
|
|
87
|
-
export type SetupUserResult = CallableResultOf<typeof S.functions.setupMember>;
|
|
88
|
-
export type SpaceUserAccessInput = CallableInputOf<typeof S.classes.Space.self.methods.addUser>;
|
|
89
|
-
export type SpaceUserAccess = SpaceUserAccessInput['access'];
|
|
90
|
-
export type SpaceUserAccessResult = CallableResultOf<typeof S.classes.Space.self.methods.addUser>;
|
|
91
|
-
export type SpaceUserInput = CallableInputOf<typeof S.classes.Space.self.methods.removeUser>;
|
|
92
|
-
export type SpaceUserResult = CallableResultOf<typeof S.classes.Space.self.methods.removeUser>;
|
|
93
38
|
export {};
|
package/dist/schema/schema.js
CHANGED
|
@@ -1,37 +1,20 @@
|
|
|
1
|
-
import { defineSchema, KernelSchema, schema
|
|
2
|
-
import { Group,
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
1
|
+
import { defineSchema, KernelSchema, schema } from '@astrale-os/sdk/schema';
|
|
2
|
+
import { Group, member_of_group, adminGroup, memberGroup, belongsToGroup, } from './modules/group/index.js';
|
|
3
|
+
import { User } from './modules/user/index.js';
|
|
4
|
+
import { ownsClass, administersShellClass } from './policies/index.js';
|
|
5
|
+
import { applicationView } from './views/index.js';
|
|
5
6
|
export const ORIGIN = 'shell.astrale.ai';
|
|
6
|
-
export const ShellCore = {
|
|
7
|
-
nodes: {
|
|
8
|
-
admin: adminGroup,
|
|
9
|
-
member: memberGroup,
|
|
10
|
-
'default-space': defaultSpace,
|
|
11
|
-
},
|
|
12
|
-
edges: [...(groupCore.edges ?? []), ...(spaceCore.edges ?? [])],
|
|
13
|
-
};
|
|
14
7
|
const dependencies = { kernel: KernelSchema };
|
|
15
|
-
const
|
|
16
|
-
const
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
User,
|
|
20
|
-
administers_space,
|
|
21
|
-
default_space,
|
|
22
|
-
member_of_group,
|
|
23
|
-
member_of_space,
|
|
24
|
-
owns_space,
|
|
25
|
-
};
|
|
26
|
-
const policies = { belongsToSpace, mayAdministerSpace, maySetupUsers, ownsSpace };
|
|
27
|
-
const views = { group: groupView, home: homeView, space: spaceView, user: userView };
|
|
8
|
+
const classes = { User, Group, member_of_group };
|
|
9
|
+
const policies = { belongsToGroup, ownsClass, administersShellClass };
|
|
10
|
+
const views = { application: applicationView };
|
|
11
|
+
const core = { nodes: { admin: adminGroup, member: memberGroup } };
|
|
28
12
|
const input = {
|
|
29
13
|
dependencies,
|
|
30
|
-
functions,
|
|
31
14
|
classes,
|
|
32
15
|
policies,
|
|
33
16
|
views,
|
|
34
|
-
core
|
|
17
|
+
core,
|
|
35
18
|
};
|
|
36
19
|
export const ShellSchema = defineSchema(ORIGIN, input);
|
|
37
20
|
export const S = schema.resolve(ShellSchema);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const applicationView: import("@astrale-os/sdk/schema").View;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { applicationView } from './application-view.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { applicationView } from './application-view.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { canonicalNodeId } from './parse-canonical-node-path.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { canonicalNodeId } from './parse-canonical-node-path.js';
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Path } from '@astrale-os/sdk/graph/path';
|
|
2
|
+
export function canonicalNodeId(value, invalid = () => new TypeError('An exact canonical @NodeId path is required.')) {
|
|
3
|
+
const parsed = Path.parse(value);
|
|
4
|
+
if (parsed.ast.anchor.kind !== 'id' || parsed.ast.steps.length !== 0) {
|
|
5
|
+
throw invalid();
|
|
6
|
+
}
|
|
7
|
+
return parsed.ast.anchor.id;
|
|
8
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@astrale-domains/shell",
|
|
3
|
-
"version": "0.1.0-beta.
|
|
3
|
+
"version": "0.1.0-beta.24",
|
|
4
4
|
"description": "Astrale Shell Domain schema and remote product implementation",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"repository": {
|
|
@@ -21,10 +21,18 @@
|
|
|
21
21
|
"#mutations/*": "./dist/mutations/*/index.js",
|
|
22
22
|
"#queries": "./dist/queries/index.js",
|
|
23
23
|
"#queries/*": "./dist/queries/*/index.js",
|
|
24
|
-
"#rules": "./dist/rules/index.js",
|
|
25
|
-
"#rules/*": "./dist/rules/*/index.js",
|
|
26
24
|
"#schema": "./dist/schema/index.js",
|
|
27
|
-
"#schema/*": "./dist/schema/*/index.js"
|
|
25
|
+
"#schema/*": "./dist/schema/*/index.js",
|
|
26
|
+
"#integrations": "./dist/integrations/index.js",
|
|
27
|
+
"#integrations/*": "./dist/integrations/*/index.js",
|
|
28
|
+
"#providers": "./dist/providers/index.js",
|
|
29
|
+
"#providers/*": "./dist/providers/*/index.js",
|
|
30
|
+
"#utils": "./dist/utils/index.js",
|
|
31
|
+
"#utils/*": "./dist/utils/*/index.js",
|
|
32
|
+
"#ui": "./dist/ui/index.js",
|
|
33
|
+
"#ui/*": "./dist/ui/*/index.js",
|
|
34
|
+
"#views": "./dist/views/index.js",
|
|
35
|
+
"#views/*": "./dist/views/*/index.js"
|
|
28
36
|
},
|
|
29
37
|
"exports": {
|
|
30
38
|
".": {
|
|
@@ -50,15 +58,16 @@
|
|
|
50
58
|
},
|
|
51
59
|
"devDependencies": {
|
|
52
60
|
"@astrale-os/ox": "0.1.4",
|
|
53
|
-
"@astrale-os/sdk": "0.5.0-beta.
|
|
61
|
+
"@astrale-os/sdk": "0.5.0-beta.122",
|
|
54
62
|
"@astrale/typescript-config": "npm:@jsr/astrale__typescript-config@~1.1.3",
|
|
55
|
-
"@types/node": "
|
|
63
|
+
"@types/node": "26.2.0",
|
|
64
|
+
"happy-dom": "20.11.2",
|
|
56
65
|
"oxlint": "1.78.0",
|
|
57
66
|
"typescript": "7.0.2",
|
|
58
67
|
"vitest": "4.1.10"
|
|
59
68
|
},
|
|
60
69
|
"peerDependencies": {
|
|
61
|
-
"@astrale-os/sdk": ">=0.5.0-beta.
|
|
70
|
+
"@astrale-os/sdk": ">=0.5.0-beta.122 <1.0.0"
|
|
62
71
|
},
|
|
63
72
|
"devEngines": {
|
|
64
73
|
"runtime": {
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import type { WorkflowContext } from '@astrale-os/sdk/workflow';
|
|
2
|
-
import type { S, Shell } from '../../schema/index.js';
|
|
3
|
-
type GroupCallable = typeof S.classes.Group.self.methods.assignUser | typeof S.classes.Group.self.methods.unassignUser;
|
|
4
|
-
type GroupContext = WorkflowContext<GroupCallable, Shell>;
|
|
5
|
-
export declare function changeMembership(context: GroupContext, present: boolean): Promise<Readonly<Record<never, never>>>;
|
|
6
|
-
export {};
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
import { InvocationError } from '@astrale-os/sdk/execution';
|
|
2
|
-
import { changeGroupMembership } from '#mutations/group';
|
|
3
|
-
import { observeUserGroups } from '#queries/user';
|
|
4
|
-
export async function changeMembership(context, present) {
|
|
5
|
-
const observed = await context.step.run('observe-membership', () => context.graph.self.query(observeUserGroups, context.input.user));
|
|
6
|
-
const current = membershipState(observed, context.self);
|
|
7
|
-
if (matches(current, present))
|
|
8
|
-
return Object.freeze({});
|
|
9
|
-
const result = await context.step.run('change-membership', () => context.graph.self.mutate(changeGroupMembership, {
|
|
10
|
-
user: context.input.user,
|
|
11
|
-
group: context.self,
|
|
12
|
-
present,
|
|
13
|
-
current,
|
|
14
|
-
guard: observed.guard,
|
|
15
|
-
}));
|
|
16
|
-
if (result.ok)
|
|
17
|
-
return Object.freeze({});
|
|
18
|
-
if (result.outcomeKnown)
|
|
19
|
-
return membershipConflict(result.code);
|
|
20
|
-
const recovered = await context.step.run('recover-membership', () => context.graph.self.query(observeUserGroups, context.input.user));
|
|
21
|
-
if (matches(membershipState(recovered, context.self), present))
|
|
22
|
-
return Object.freeze({});
|
|
23
|
-
throw new InvocationError('BACKEND_UNAVAILABLE', 'Group membership outcome remains unknown after exact observation.', { reason: { code: result.code, details: {} } });
|
|
24
|
-
}
|
|
25
|
-
function membershipState(observation, group) {
|
|
26
|
-
return Object.freeze({
|
|
27
|
-
membership: includes(observation.groups, group),
|
|
28
|
-
authority: includes(observation.authorities, group),
|
|
29
|
-
});
|
|
30
|
-
}
|
|
31
|
-
function matches(state, present) {
|
|
32
|
-
return state.membership === present && state.authority === present;
|
|
33
|
-
}
|
|
34
|
-
function includes(groups, group) {
|
|
35
|
-
return groups.some(({ id }) => id === group);
|
|
36
|
-
}
|
|
37
|
-
function membershipConflict(code) {
|
|
38
|
-
throw new InvocationError('CONFLICT', 'Group membership conflicted with concurrent graph state.', {
|
|
39
|
-
reason: { code, details: {} },
|
|
40
|
-
});
|
|
41
|
-
}
|