@astrale-domains/shell 0.1.0-beta.20 → 0.1.0-beta.22
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 +28 -0
- package/README.md +19 -15
- package/dist/application.d.ts +3 -2
- package/dist/application.js +53 -18
- package/dist/{workflows → functions}/group/assign.d.ts +1 -1
- package/dist/{workflows → functions}/group/change.d.ts +1 -1
- package/dist/{workflows → functions}/group/unassign.d.ts +1 -1
- package/dist/functions/registry/index.d.ts +12 -0
- package/dist/functions/registry/index.js +12 -0
- package/dist/{workflows → functions}/setup/admin.d.ts +1 -1
- package/dist/{workflows → functions}/setup/index.d.ts +0 -1
- package/dist/{workflows → functions}/setup/index.js +0 -1
- package/dist/{workflows → functions}/setup/member.d.ts +1 -1
- package/dist/{workflows → functions}/setup/provision.d.ts +2 -2
- package/dist/{workflows → functions}/setup/run.d.ts +2 -2
- package/dist/{workflows → functions}/setup/run.js +9 -2
- package/dist/{workflows → functions}/space/access.d.ts +1 -1
- package/dist/{workflows → functions}/space/add.d.ts +1 -1
- package/dist/{workflows → functions}/space/default.d.ts +1 -1
- package/dist/{workflows → functions}/space/remove.d.ts +1 -1
- package/dist/functions/user/index.d.ts +3 -0
- package/dist/functions/user/index.js +3 -0
- package/dist/{actions → functions}/user/resolve-home.d.ts +1 -1
- package/dist/mutations/group/membership.d.ts +1 -1
- package/dist/mutations/space/access.d.ts +1 -1
- package/dist/mutations/space/default.d.ts +1 -1
- package/dist/mutations/user/repair.d.ts +3 -21
- package/dist/queries/space/access.d.ts +1 -1
- package/dist/queries/space/admin.d.ts +1 -1
- package/dist/queries/space/member.d.ts +1 -1
- package/dist/queries/user/groups.d.ts +1 -1
- package/dist/queries/user/home.d.ts +1 -1
- package/dist/queries/user/owned-spaces.d.ts +1 -1
- package/dist/queries/user/profile.d.ts +1 -1
- package/dist/queries/user/setup.d.ts +1 -1
- package/dist/rules/user/index.d.ts +1 -0
- package/dist/rules/user/index.js +1 -0
- package/dist/rules/user/setup.d.ts +38 -0
- package/dist/{workflows/setup/plan.js → rules/user/setup.js} +0 -5
- package/dist/runtime.d.ts +6 -3
- package/dist/runtime.js +7 -13
- package/dist/schema/index.d.ts +4 -6
- package/dist/schema/index.js +4 -6
- package/dist/schema/{group/class.d.ts → modules/group/classes/group.d.ts} +4 -2
- package/dist/schema/modules/group/classes/group.js +10 -0
- package/dist/schema/{group/relationships.js → modules/group/classes/member-of-group.js} +2 -2
- package/dist/schema/modules/group/core/admin-group.d.ts +1 -0
- package/dist/schema/modules/group/core/admin-group.js +2 -0
- package/dist/schema/modules/group/core/core.d.ts +8 -0
- package/dist/schema/modules/group/core/core.js +6 -0
- package/dist/schema/modules/group/core/identity.d.ts +1 -0
- package/dist/schema/modules/group/core/identity.js +10 -0
- package/dist/schema/modules/group/core/member-group.d.ts +1 -0
- package/dist/schema/modules/group/core/member-group.js +2 -0
- package/dist/schema/modules/group/functions/assign-user.d.ts +6 -0
- package/dist/schema/modules/group/functions/assign-user.js +2 -0
- package/dist/schema/modules/group/functions/membership.d.ts +7 -0
- package/dist/schema/{group/methods.js → modules/group/functions/membership.js} +4 -6
- package/dist/schema/modules/group/functions/unassign-user.d.ts +6 -0
- package/dist/schema/modules/group/functions/unassign-user.js +2 -0
- package/dist/schema/modules/group/index.d.ts +9 -0
- package/dist/schema/modules/group/index.js +9 -0
- package/dist/schema/{group/policies.js → modules/group/policies/may-setup-users.js} +1 -1
- package/dist/schema/{group/view.js → modules/group/views/group.js} +1 -1
- package/dist/schema/modules/space/classes/administers-space.d.ts +16 -0
- package/dist/schema/modules/space/classes/administers-space.js +9 -0
- package/dist/schema/modules/space/classes/default-space.d.ts +16 -0
- package/dist/schema/modules/space/classes/default-space.js +8 -0
- package/dist/schema/modules/space/classes/member-of-space.d.ts +16 -0
- package/dist/schema/modules/space/classes/member-of-space.js +9 -0
- package/dist/schema/modules/space/classes/owns-space.d.ts +16 -0
- package/dist/schema/modules/space/classes/owns-space.js +9 -0
- package/dist/schema/{space/class.d.ts → modules/space/classes/space.d.ts} +5 -2
- package/dist/schema/modules/space/classes/space.js +15 -0
- package/dist/schema/{space → modules/space/core}/core.d.ts +0 -1
- package/dist/schema/modules/space/core/core.js +12 -0
- package/dist/schema/modules/space/core/default-space.d.ts +1 -0
- package/dist/schema/modules/space/core/default-space.js +6 -0
- package/dist/schema/modules/space/functions/access.d.ts +10 -0
- package/dist/schema/modules/space/functions/access.js +9 -0
- package/dist/schema/modules/space/functions/add-user.d.ts +7 -0
- package/dist/schema/modules/space/functions/add-user.js +11 -0
- package/dist/schema/modules/space/functions/remove-user.d.ts +6 -0
- package/dist/schema/modules/space/functions/remove-user.js +9 -0
- package/dist/schema/modules/space/functions/set-default.d.ts +4 -0
- package/dist/schema/modules/space/functions/set-default.js +9 -0
- package/dist/schema/modules/space/index.d.ts +14 -0
- package/dist/schema/modules/space/index.js +14 -0
- package/dist/schema/modules/space/policies/belongs-to-space.d.ts +1 -0
- package/dist/schema/modules/space/policies/belongs-to-space.js +9 -0
- package/dist/schema/modules/space/policies/group-space-branch.d.ts +4 -0
- package/dist/schema/modules/space/policies/group-space-branch.js +7 -0
- package/dist/schema/modules/space/policies/may-administer-space.d.ts +1 -0
- package/dist/schema/modules/space/policies/may-administer-space.js +8 -0
- package/dist/schema/modules/space/policies/owns-space.d.ts +1 -0
- package/dist/schema/modules/space/policies/owns-space.js +7 -0
- package/dist/schema/{space/view.js → modules/space/views/space.js} +1 -1
- package/dist/schema/{user/class.d.ts → modules/user/classes/user.d.ts} +3 -2
- package/dist/schema/modules/user/classes/user.js +12 -0
- package/dist/schema/modules/user/functions/setup-admin.d.ts +14 -0
- package/dist/schema/modules/user/functions/setup-admin.js +2 -0
- package/dist/schema/{setup/functions.d.ts → modules/user/functions/setup-member.d.ts} +0 -14
- package/dist/schema/modules/user/functions/setup-member.js +2 -0
- package/dist/schema/modules/user/functions/setup-user.d.ts +15 -0
- package/dist/schema/{setup/functions.js → modules/user/functions/setup-user.js} +4 -11
- package/dist/schema/modules/user/index.d.ts +6 -0
- package/dist/schema/modules/user/index.js +6 -0
- package/dist/schema/{user/view.js → modules/user/views/user.js} +1 -1
- package/dist/schema/{domain/index.d.ts → schema.d.ts} +4 -5
- package/dist/schema/{domain/index.js → schema.js} +3 -6
- package/package.json +16 -10
- package/dist/actions/index.d.ts +0 -1
- package/dist/actions/index.js +0 -1
- package/dist/actions/user/index.d.ts +0 -1
- package/dist/actions/user/index.js +0 -1
- package/dist/entrypoints/application.d.ts +0 -1
- package/dist/entrypoints/application.js +0 -1
- package/dist/entrypoints/runtime.d.ts +0 -1
- package/dist/entrypoints/runtime.js +0 -1
- package/dist/schema/group/class.js +0 -8
- package/dist/schema/group/core.d.ts +0 -10
- package/dist/schema/group/core.js +0 -14
- package/dist/schema/group/index.d.ts +0 -6
- package/dist/schema/group/index.js +0 -6
- package/dist/schema/group/methods.d.ts +0 -13
- package/dist/schema/home/index.d.ts +0 -1
- package/dist/schema/home/index.js +0 -1
- package/dist/schema/setup/index.d.ts +0 -1
- package/dist/schema/setup/index.js +0 -1
- package/dist/schema/space/class.js +0 -12
- package/dist/schema/space/core.js +0 -15
- package/dist/schema/space/index.d.ts +0 -6
- package/dist/schema/space/index.js +0 -6
- package/dist/schema/space/methods.d.ts +0 -18
- package/dist/schema/space/methods.js +0 -28
- package/dist/schema/space/policies.d.ts +0 -4
- package/dist/schema/space/policies.js +0 -21
- package/dist/schema/space/relationships.d.ts +0 -64
- package/dist/schema/space/relationships.js +0 -24
- package/dist/schema/user/class.js +0 -11
- package/dist/schema/user/index.d.ts +0 -3
- package/dist/schema/user/index.js +0 -3
- package/dist/workflows/index.d.ts +0 -3
- package/dist/workflows/index.js +0 -3
- package/dist/workflows/setup/plan.d.ts +0 -18
- /package/dist/{workflows → functions}/group/assign.js +0 -0
- /package/dist/{workflows → functions}/group/change.js +0 -0
- /package/dist/{workflows → functions}/group/index.d.ts +0 -0
- /package/dist/{workflows → functions}/group/index.js +0 -0
- /package/dist/{workflows → functions}/group/unassign.js +0 -0
- /package/dist/{workflows → functions}/setup/admin.js +0 -0
- /package/dist/{workflows → functions}/setup/member.js +0 -0
- /package/dist/{workflows → functions}/setup/provision.js +0 -0
- /package/dist/{workflows → functions}/space/access.js +0 -0
- /package/dist/{workflows → functions}/space/add.js +0 -0
- /package/dist/{workflows → functions}/space/default.js +0 -0
- /package/dist/{workflows → functions}/space/index.d.ts +0 -0
- /package/dist/{workflows → functions}/space/index.js +0 -0
- /package/dist/{workflows → functions}/space/remove.js +0 -0
- /package/dist/{actions → functions}/user/resolve-home.js +0 -0
- /package/dist/schema/{group/relationships.d.ts → modules/group/classes/member-of-group.d.ts} +0 -0
- /package/dist/schema/{group/policies.d.ts → modules/group/policies/may-setup-users.d.ts} +0 -0
- /package/dist/schema/{group/view.d.ts → modules/group/views/group.d.ts} +0 -0
- /package/dist/schema/{space/view.d.ts → modules/space/views/space.d.ts} +0 -0
- /package/dist/schema/{user/methods.d.ts → modules/user/functions/resolve-home.d.ts} +0 -0
- /package/dist/schema/{user/methods.js → modules/user/functions/resolve-home.js} +0 -0
- /package/dist/schema/{home/view.d.ts → modules/user/views/home.d.ts} +0 -0
- /package/dist/schema/{home/view.js → modules/user/views/home.js} +0 -0
- /package/dist/schema/{user/view.d.ts → modules/user/views/user.d.ts} +0 -0
package/dist/runtime.js
CHANGED
|
@@ -1,17 +1,11 @@
|
|
|
1
1
|
import { defineRuntime } from '@astrale-os/sdk/runtime';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { workflows } from '#functions/registry';
|
|
3
|
+
import { actions } from '#functions/user';
|
|
4
4
|
const integrations = {};
|
|
5
5
|
const initialize = () => ({ providers: {} });
|
|
6
|
-
const
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
unassignGroupUserWorkflow,
|
|
12
|
-
addSpaceUserWorkflow,
|
|
13
|
-
removeSpaceUserWorkflow,
|
|
14
|
-
setDefaultSpaceWorkflow,
|
|
15
|
-
];
|
|
16
|
-
const runtime = defineRuntime()({ integrations, initialize, actions, workflows });
|
|
6
|
+
const runtime = defineRuntime()({
|
|
7
|
+
integrations,
|
|
8
|
+
initialize,
|
|
9
|
+
functions: [...actions, ...workflows],
|
|
10
|
+
});
|
|
17
11
|
export default runtime;
|
package/dist/schema/index.d.ts
CHANGED
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
export { ORIGIN, S, ShellCore, ShellSchema, type GroupMembershipInput, type GroupMembershipResult, type ResolveHomeResult, type SetDefaultSpaceInput, type SetDefaultSpaceResult, type SetupUserInput, type SetupUserResult, type Shell, type SpaceUserAccess, type SpaceUserAccessInput, type SpaceUserAccessResult, type SpaceUserInput, type SpaceUserResult, } from '
|
|
2
|
-
export { Group, adminGroup, groupAssignUser, groupCore, groupUnassignUser, groupView, maySetupUsers, memberGroup, member_of_group, } from '
|
|
3
|
-
export {
|
|
4
|
-
export { setupAdmin, setupMember } from '
|
|
5
|
-
export { Space, administers_space, belongsToSpace, default_space, defaultSpace, mayAdministerSpace, member_of_space, owns_space, ownsSpace, spaceAddUser, spaceCore, spaceRemoveUser, spaceSetDefault, spaceView, } from '#schema/space';
|
|
6
|
-
export { User, resolveHome, userView } from '#schema/user';
|
|
1
|
+
export { ORIGIN, S, ShellCore, ShellSchema, type GroupMembershipInput, type GroupMembershipResult, type ResolveHomeResult, type SetDefaultSpaceInput, type SetDefaultSpaceResult, type SetupUserInput, type SetupUserResult, type Shell, type SpaceUserAccess, type SpaceUserAccessInput, type SpaceUserAccessResult, type SpaceUserInput, type SpaceUserResult, } from './schema.js';
|
|
2
|
+
export { Group, adminGroup, groupAssignUser, groupCore, groupUnassignUser, groupView, maySetupUsers, memberGroup, member_of_group, } from './modules/group/index.js';
|
|
3
|
+
export { Space, administers_space, belongsToSpace, default_space, defaultSpace, mayAdministerSpace, member_of_space, owns_space, ownsSpace, spaceAddUser, spaceCore, spaceRemoveUser, spaceSetDefault, spaceView, } from './modules/space/index.js';
|
|
4
|
+
export { User, homeView, resolveHome, setupAdmin, setupMember, userView, } from './modules/user/index.js';
|
package/dist/schema/index.js
CHANGED
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
export { ORIGIN, S, ShellCore, ShellSchema, } from '
|
|
2
|
-
export { Group, adminGroup, groupAssignUser, groupCore, groupUnassignUser, groupView, maySetupUsers, memberGroup, member_of_group, } from '#schema/group';
|
|
3
|
-
export {
|
|
4
|
-
export { setupAdmin, setupMember } from '#schema/
|
|
5
|
-
export { Space, administers_space, belongsToSpace, default_space, defaultSpace, mayAdministerSpace, member_of_space, owns_space, ownsSpace, spaceAddUser, spaceCore, spaceRemoveUser, spaceSetDefault, spaceView, } from '#schema/space';
|
|
6
|
-
export { User, resolveHome, userView } from '#schema/user';
|
|
1
|
+
export { ORIGIN, S, ShellCore, ShellSchema, } from './schema.js';
|
|
2
|
+
export { Group, adminGroup, groupAssignUser, groupCore, groupUnassignUser, groupView, maySetupUsers, memberGroup, member_of_group, } from '#schema/modules/group';
|
|
3
|
+
export { Space, administers_space, belongsToSpace, default_space, defaultSpace, mayAdministerSpace, member_of_space, owns_space, ownsSpace, spaceAddUser, spaceCore, spaceRemoveUser, spaceSetDefault, spaceView, } from '#schema/modules/space';
|
|
4
|
+
export { User, homeView, resolveHome, setupAdmin, setupMember, userView, } from '#schema/modules/user';
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { nodeClass, type Kernel } from '@astrale-os/sdk/schema';
|
|
2
|
-
import { groupAssignUser
|
|
1
|
+
import { nodeClass, type ClassIcon, type Kernel } from '@astrale-os/sdk/schema';
|
|
2
|
+
import { groupAssignUser } from '../functions/assign-user.js';
|
|
3
|
+
import { groupUnassignUser } from '../functions/unassign-user.js';
|
|
3
4
|
export interface GroupConfig {
|
|
4
5
|
readonly description: string;
|
|
5
6
|
readonly extends: readonly [
|
|
@@ -7,6 +8,7 @@ export interface GroupConfig {
|
|
|
7
8
|
Kernel['classes']['Named'],
|
|
8
9
|
Kernel['classes']['Descriptable']
|
|
9
10
|
];
|
|
11
|
+
readonly icon: ClassIcon;
|
|
10
12
|
readonly methods: {
|
|
11
13
|
readonly assignUser: typeof groupAssignUser;
|
|
12
14
|
readonly unassignUser: typeof groupUnassignUser;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { classIcon, K, nodeClass } from '@astrale-os/sdk/schema';
|
|
2
|
+
import { UsersRound } from '@astrale-os/sdk/schema/icons';
|
|
3
|
+
import { groupAssignUser } from '../functions/assign-user.js';
|
|
4
|
+
import { groupUnassignUser } from '../functions/unassign-user.js';
|
|
5
|
+
export const Group = nodeClass({
|
|
6
|
+
description: 'A named compositional Shell Identity.',
|
|
7
|
+
extends: [K.classes.Identity, K.classes.Named, K.classes.Descriptable],
|
|
8
|
+
icon: classIcon.lucide(UsersRound),
|
|
9
|
+
methods: { assignUser: groupAssignUser, unassignUser: groupUnassignUser },
|
|
10
|
+
});
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { edgeClass } from '@astrale-os/sdk/schema';
|
|
2
|
-
import { User } from '#schema/user';
|
|
3
|
-
import { Group } from './
|
|
2
|
+
import { User } from '#schema/modules/user';
|
|
3
|
+
import { Group } from './group.js';
|
|
4
4
|
export const member_of_group = edgeClass.directed({
|
|
5
5
|
source: { as: 'user', accepts: [User], outgoing: '0..*' },
|
|
6
6
|
target: { as: 'group', accepts: [() => Group], incoming: '0..*' },
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const adminGroup: import("@astrale-os/sdk/schema").CoreNode;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function groupIdentity(subject: string, name: string, description: string): import("@astrale-os/sdk/schema").CoreNode;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { K, core } from '@astrale-os/sdk/schema';
|
|
2
|
+
import { Group } from '../classes/group.js';
|
|
3
|
+
export function groupIdentity(subject, name, description) {
|
|
4
|
+
return core.node(() => Group, {
|
|
5
|
+
[K.classes.Identity.self.properties.iss.key]: 'shell.astrale.ai',
|
|
6
|
+
[K.classes.Identity.self.properties.sub.key]: subject,
|
|
7
|
+
[K.classes.Named.self.properties.name.key]: name,
|
|
8
|
+
[K.classes.Descriptable.self.properties.description.key]: description,
|
|
9
|
+
});
|
|
10
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const memberGroup: import("@astrale-os/sdk/schema").CoreNode;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type builder } from '@astrale-os/sdk/schema';
|
|
2
|
+
export declare function defineGroupMembership(description: string): builder.Method<builder.CallableProjection<{
|
|
3
|
+
user: string;
|
|
4
|
+
}, {
|
|
5
|
+
readonly mode: 'value';
|
|
6
|
+
readonly value: Record<string, never>;
|
|
7
|
+
}, "authorized", false, "default">>;
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { method, path } from '@astrale-os/sdk/schema';
|
|
2
2
|
import { z } from 'zod';
|
|
3
|
-
import { User } from '#schema/user';
|
|
4
|
-
import { adminGroup } from '
|
|
5
|
-
import { maySetupUsers } from '
|
|
3
|
+
import { User } from '#schema/modules/user';
|
|
4
|
+
import { adminGroup } from '../core/admin-group.js';
|
|
5
|
+
import { maySetupUsers } from '../policies/may-setup-users.js';
|
|
6
6
|
const emptyObject = z.strictObject({});
|
|
7
7
|
const setupPolicy = ({ check, ref }) => check(maySetupUsers, ref(adminGroup));
|
|
8
|
-
function
|
|
8
|
+
export function defineGroupMembership(description) {
|
|
9
9
|
return method({
|
|
10
10
|
description,
|
|
11
11
|
input: z.strictObject({ user: path(User) }),
|
|
@@ -14,5 +14,3 @@ function membershipMethod(description) {
|
|
|
14
14
|
policy: setupPolicy,
|
|
15
15
|
});
|
|
16
16
|
}
|
|
17
|
-
export const groupAssignUser = membershipMethod('Assign one User to this Group.');
|
|
18
|
-
export const groupUnassignUser = membershipMethod('Remove one User from this Group.');
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { Group } from './classes/group.js';
|
|
2
|
+
export { member_of_group } from './classes/member-of-group.js';
|
|
3
|
+
export { adminGroup } from './core/admin-group.js';
|
|
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';
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { Group } from './classes/group.js';
|
|
2
|
+
export { member_of_group } from './classes/member-of-group.js';
|
|
3
|
+
export { adminGroup } from './core/admin-group.js';
|
|
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,5 +1,5 @@
|
|
|
1
1
|
import { policy } from '@astrale-os/sdk/schema';
|
|
2
|
-
import { member_of_group } from '
|
|
2
|
+
import { member_of_group } from '../classes/member-of-group.js';
|
|
3
3
|
export const maySetupUsers = policy({
|
|
4
4
|
description: 'The effective User Grant belongs to the selected Administrators Group.',
|
|
5
5
|
match: ({ edge, object, subject }) => edge({ source: subject, class: member_of_group, target: object }),
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export declare const administers_space: import("@astrale-os/sdk/schema").DirectedEdgeClass<{
|
|
2
|
+
readonly depth: 0;
|
|
3
|
+
readonly abstract: false;
|
|
4
|
+
readonly extends: readonly [];
|
|
5
|
+
readonly properties: never;
|
|
6
|
+
readonly source: {
|
|
7
|
+
readonly as: "admin";
|
|
8
|
+
readonly outgoing: "0..*";
|
|
9
|
+
};
|
|
10
|
+
readonly target: {
|
|
11
|
+
readonly as: "space";
|
|
12
|
+
readonly incoming: "0..*";
|
|
13
|
+
};
|
|
14
|
+
readonly constraints: Record<never, never>;
|
|
15
|
+
readonly effectiveProperties: never;
|
|
16
|
+
}>;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { edgeClass } from '@astrale-os/sdk/schema';
|
|
2
|
+
import { Group } from '#schema/modules/group';
|
|
3
|
+
import { User } from '#schema/modules/user';
|
|
4
|
+
import { Space } from './space.js';
|
|
5
|
+
export const administers_space = edgeClass.directed({
|
|
6
|
+
source: { as: 'admin', accepts: [User, Group], outgoing: '0..*' },
|
|
7
|
+
target: { as: 'space', accepts: [() => Space], incoming: '0..*' },
|
|
8
|
+
description: 'Direct Space administration.',
|
|
9
|
+
});
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export declare const default_space: import("@astrale-os/sdk/schema").DirectedEdgeClass<{
|
|
2
|
+
readonly depth: 0;
|
|
3
|
+
readonly abstract: false;
|
|
4
|
+
readonly extends: readonly [];
|
|
5
|
+
readonly properties: never;
|
|
6
|
+
readonly source: {
|
|
7
|
+
readonly as: "user";
|
|
8
|
+
readonly outgoing: "0..1";
|
|
9
|
+
};
|
|
10
|
+
readonly target: {
|
|
11
|
+
readonly as: "space";
|
|
12
|
+
readonly incoming: "0..*";
|
|
13
|
+
};
|
|
14
|
+
readonly constraints: Record<never, never>;
|
|
15
|
+
readonly effectiveProperties: never;
|
|
16
|
+
}>;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { edgeClass } from '@astrale-os/sdk/schema';
|
|
2
|
+
import { User } from '#schema/modules/user';
|
|
3
|
+
import { Space } from './space.js';
|
|
4
|
+
export const default_space = edgeClass.directed({
|
|
5
|
+
source: { as: 'user', accepts: [User], outgoing: '0..1' },
|
|
6
|
+
target: { as: 'space', accepts: [() => Space], incoming: '0..*' },
|
|
7
|
+
description: 'One User persisted fallback Space.',
|
|
8
|
+
});
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export declare const member_of_space: import("@astrale-os/sdk/schema").DirectedEdgeClass<{
|
|
2
|
+
readonly depth: 0;
|
|
3
|
+
readonly abstract: false;
|
|
4
|
+
readonly extends: readonly [];
|
|
5
|
+
readonly properties: never;
|
|
6
|
+
readonly source: {
|
|
7
|
+
readonly as: "member";
|
|
8
|
+
readonly outgoing: "0..*";
|
|
9
|
+
};
|
|
10
|
+
readonly target: {
|
|
11
|
+
readonly as: "space";
|
|
12
|
+
readonly incoming: "0..*";
|
|
13
|
+
};
|
|
14
|
+
readonly constraints: Record<never, never>;
|
|
15
|
+
readonly effectiveProperties: never;
|
|
16
|
+
}>;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { edgeClass } from '@astrale-os/sdk/schema';
|
|
2
|
+
import { Group } from '#schema/modules/group';
|
|
3
|
+
import { User } from '#schema/modules/user';
|
|
4
|
+
import { Space } from './space.js';
|
|
5
|
+
export const member_of_space = edgeClass.directed({
|
|
6
|
+
source: { as: 'member', accepts: [User, Group], outgoing: '0..*' },
|
|
7
|
+
target: { as: 'space', accepts: [() => Space], incoming: '0..*' },
|
|
8
|
+
description: 'Direct Space membership.',
|
|
9
|
+
});
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export declare const owns_space: import("@astrale-os/sdk/schema").DirectedEdgeClass<{
|
|
2
|
+
readonly depth: 0;
|
|
3
|
+
readonly abstract: false;
|
|
4
|
+
readonly extends: readonly [];
|
|
5
|
+
readonly properties: never;
|
|
6
|
+
readonly source: {
|
|
7
|
+
readonly as: "owner";
|
|
8
|
+
readonly outgoing: "0..*";
|
|
9
|
+
};
|
|
10
|
+
readonly target: {
|
|
11
|
+
readonly as: "space";
|
|
12
|
+
readonly incoming: "1";
|
|
13
|
+
};
|
|
14
|
+
readonly constraints: Record<never, never>;
|
|
15
|
+
readonly effectiveProperties: never;
|
|
16
|
+
}>;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { edgeClass } from '@astrale-os/sdk/schema';
|
|
2
|
+
import { Group } from '#schema/modules/group';
|
|
3
|
+
import { User } from '#schema/modules/user';
|
|
4
|
+
import { Space } from './space.js';
|
|
5
|
+
export const owns_space = edgeClass.directed({
|
|
6
|
+
source: { as: 'owner', accepts: [User, Group], outgoing: '0..*' },
|
|
7
|
+
target: { as: 'space', accepts: [() => Space], incoming: '1' },
|
|
8
|
+
description: 'The unique owner of a Space.',
|
|
9
|
+
});
|
|
@@ -1,8 +1,11 @@
|
|
|
1
|
-
import { nodeClass, type Kernel } from '@astrale-os/sdk/schema';
|
|
2
|
-
import { spaceAddUser
|
|
1
|
+
import { nodeClass, type ClassIcon, type Kernel } from '@astrale-os/sdk/schema';
|
|
2
|
+
import { spaceAddUser } from '../functions/add-user.js';
|
|
3
|
+
import { spaceRemoveUser } from '../functions/remove-user.js';
|
|
4
|
+
import { spaceSetDefault } from '../functions/set-default.js';
|
|
3
5
|
export interface SpaceConfig {
|
|
4
6
|
readonly description: string;
|
|
5
7
|
readonly extends: readonly [Kernel['classes']['Named'], Kernel['classes']['Descriptable']];
|
|
8
|
+
readonly icon: ClassIcon;
|
|
6
9
|
readonly methods: {
|
|
7
10
|
readonly addUser: typeof spaceAddUser;
|
|
8
11
|
readonly removeUser: typeof spaceRemoveUser;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { classIcon, K, nodeClass } from '@astrale-os/sdk/schema';
|
|
2
|
+
import { PanelsTopLeft } from '@astrale-os/sdk/schema/icons';
|
|
3
|
+
import { spaceAddUser } from '../functions/add-user.js';
|
|
4
|
+
import { spaceRemoveUser } from '../functions/remove-user.js';
|
|
5
|
+
import { spaceSetDefault } from '../functions/set-default.js';
|
|
6
|
+
export const Space = nodeClass({
|
|
7
|
+
description: 'A named Shell collaboration boundary.',
|
|
8
|
+
extends: [K.classes.Named, K.classes.Descriptable],
|
|
9
|
+
icon: classIcon.lucide(PanelsTopLeft),
|
|
10
|
+
methods: {
|
|
11
|
+
addUser: spaceAddUser,
|
|
12
|
+
removeUser: spaceRemoveUser,
|
|
13
|
+
setDefault: spaceSetDefault,
|
|
14
|
+
},
|
|
15
|
+
});
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { core } from '@astrale-os/sdk/schema';
|
|
2
|
+
import { adminGroup, memberGroup } from '#schema/modules/group';
|
|
3
|
+
import { member_of_space } from '../classes/member-of-space.js';
|
|
4
|
+
import { owns_space } from '../classes/owns-space.js';
|
|
5
|
+
import { defaultSpace } from './default-space.js';
|
|
6
|
+
export const spaceCore = {
|
|
7
|
+
nodes: { 'default-space': defaultSpace },
|
|
8
|
+
edges: [
|
|
9
|
+
core.edge(adminGroup, owns_space, defaultSpace, {}),
|
|
10
|
+
core.edge(memberGroup, member_of_space, defaultSpace, {}),
|
|
11
|
+
],
|
|
12
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const defaultSpace: import("@astrale-os/sdk/schema").CoreNode;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { K, core } from '@astrale-os/sdk/schema';
|
|
2
|
+
import { Space } from '../classes/space.js';
|
|
3
|
+
export const defaultSpace = core.node(Space, {
|
|
4
|
+
[K.classes.Named.self.properties.name.key]: 'Default Space',
|
|
5
|
+
[K.classes.Descriptable.self.properties.description.key]: 'The common Space installed with Shell.',
|
|
6
|
+
});
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type builder } from '@astrale-os/sdk/schema';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { User } from '../../user/index.js';
|
|
4
|
+
export declare const emptyObject: z.ZodObject<{}, z.core.$strict>;
|
|
5
|
+
export type SpaceUserSchema = z.ZodObject<{
|
|
6
|
+
user: builder.PathAuthoring<readonly [typeof User]>;
|
|
7
|
+
}, z.core.$strict>;
|
|
8
|
+
export declare const spaceUser: SpaceUserSchema;
|
|
9
|
+
export declare const administerPolicy: builder.CallablePolicyBuilder;
|
|
10
|
+
export declare const membershipPolicy: builder.CallablePolicyBuilder;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { path } from '@astrale-os/sdk/schema';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { User } from '#schema/modules/user';
|
|
4
|
+
import { belongsToSpace } from '../policies/belongs-to-space.js';
|
|
5
|
+
import { mayAdministerSpace } from '../policies/may-administer-space.js';
|
|
6
|
+
export const emptyObject = z.strictObject({});
|
|
7
|
+
export const spaceUser = z.strictObject({ user: path(User) });
|
|
8
|
+
export const administerPolicy = ({ check, self }) => check(mayAdministerSpace, self);
|
|
9
|
+
export const membershipPolicy = ({ check, self }) => check(belongsToSpace, self);
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare const spaceAddUser: import("@astrale-os/sdk/schema").Method<import("@astrale-os/sdk/schema").CallableProjection<{
|
|
2
|
+
user: string;
|
|
3
|
+
access: "admin" | "member";
|
|
4
|
+
}, {
|
|
5
|
+
readonly mode: 'value';
|
|
6
|
+
readonly value: Record<string, never>;
|
|
7
|
+
}, "authorized", false, "default">>;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { method } from '@astrale-os/sdk/schema';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { administerPolicy } from './access.js';
|
|
4
|
+
import { spaceUser } from './access.js';
|
|
5
|
+
export const spaceAddUser = method({
|
|
6
|
+
description: 'Set one User direct member or admin access.',
|
|
7
|
+
input: spaceUser.extend({ access: z.enum(['member', 'admin']) }),
|
|
8
|
+
output: z.strictObject({}),
|
|
9
|
+
auth: 'authorized',
|
|
10
|
+
policy: administerPolicy,
|
|
11
|
+
});
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { method } from '@astrale-os/sdk/schema';
|
|
2
|
+
import { administerPolicy, emptyObject, spaceUser } from './access.js';
|
|
3
|
+
export const spaceRemoveUser = method({
|
|
4
|
+
description: 'Remove one User direct access.',
|
|
5
|
+
input: spaceUser,
|
|
6
|
+
output: emptyObject,
|
|
7
|
+
auth: 'authorized',
|
|
8
|
+
policy: administerPolicy,
|
|
9
|
+
});
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { method } from '@astrale-os/sdk/schema';
|
|
2
|
+
import { emptyObject, membershipPolicy } from './access.js';
|
|
3
|
+
export const spaceSetDefault = method({
|
|
4
|
+
description: 'Set this accessible Space as the granted User fallback.',
|
|
5
|
+
input: emptyObject,
|
|
6
|
+
output: emptyObject,
|
|
7
|
+
auth: 'authorized',
|
|
8
|
+
policy: membershipPolicy,
|
|
9
|
+
});
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export { Space } from './classes/space.js';
|
|
2
|
+
export { administers_space } from './classes/administers-space.js';
|
|
3
|
+
export { default_space } from './classes/default-space.js';
|
|
4
|
+
export { member_of_space } from './classes/member-of-space.js';
|
|
5
|
+
export { owns_space } from './classes/owns-space.js';
|
|
6
|
+
export { spaceCore } from './core/core.js';
|
|
7
|
+
export { defaultSpace } from './core/default-space.js';
|
|
8
|
+
export { spaceAddUser } from './functions/add-user.js';
|
|
9
|
+
export { spaceRemoveUser } from './functions/remove-user.js';
|
|
10
|
+
export { spaceSetDefault } from './functions/set-default.js';
|
|
11
|
+
export { belongsToSpace } from './policies/belongs-to-space.js';
|
|
12
|
+
export { mayAdministerSpace } from './policies/may-administer-space.js';
|
|
13
|
+
export { ownsSpace } from './policies/owns-space.js';
|
|
14
|
+
export { spaceView } from './views/space.js';
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export { Space } from './classes/space.js';
|
|
2
|
+
export { administers_space } from './classes/administers-space.js';
|
|
3
|
+
export { default_space } from './classes/default-space.js';
|
|
4
|
+
export { member_of_space } from './classes/member-of-space.js';
|
|
5
|
+
export { owns_space } from './classes/owns-space.js';
|
|
6
|
+
export { spaceCore } from './core/core.js';
|
|
7
|
+
export { defaultSpace } from './core/default-space.js';
|
|
8
|
+
export { spaceAddUser } from './functions/add-user.js';
|
|
9
|
+
export { spaceRemoveUser } from './functions/remove-user.js';
|
|
10
|
+
export { spaceSetDefault } from './functions/set-default.js';
|
|
11
|
+
export { belongsToSpace } from './policies/belongs-to-space.js';
|
|
12
|
+
export { mayAdministerSpace } from './policies/may-administer-space.js';
|
|
13
|
+
export { ownsSpace } from './policies/owns-space.js';
|
|
14
|
+
export { spaceView } from './views/space.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const belongsToSpace: import("@astrale-os/sdk/schema").Policy;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { policy } from '@astrale-os/sdk/schema';
|
|
2
|
+
import { administers_space } from '../classes/administers-space.js';
|
|
3
|
+
import { member_of_space } from '../classes/member-of-space.js';
|
|
4
|
+
import { owns_space } from '../classes/owns-space.js';
|
|
5
|
+
import { groupSpaceBranch } from './group-space-branch.js';
|
|
6
|
+
export const belongsToSpace = policy({
|
|
7
|
+
description: 'The effective User Grant has direct or Group-derived access to this Space.',
|
|
8
|
+
match: ({ allOf, anyOf, edge, exists, object, subject }) => anyOf(edge({ source: subject, class: owns_space, target: object }), edge({ source: subject, class: administers_space, target: object }), edge({ source: subject, class: member_of_space, target: object }), groupSpaceBranch({ allOf, edge, exists, object, subject }, owns_space), groupSpaceBranch({ allOf, edge, exists, object, subject }, administers_space), groupSpaceBranch({ allOf, edge, exists, object, subject }, member_of_space)),
|
|
9
|
+
});
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { builder } from '@astrale-os/sdk/schema';
|
|
2
|
+
type PolicyContext = Pick<builder.PolicyPatternContext, 'allOf' | 'edge' | 'exists' | 'object' | 'subject'>;
|
|
3
|
+
export declare function groupSpaceBranch(context: PolicyContext, access: builder.Lazy<builder.EdgeClass>): ReturnType<PolicyContext['edge']>;
|
|
4
|
+
export {};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Group, member_of_group } from '#schema/modules/group';
|
|
2
|
+
export function groupSpaceBranch(context, access) {
|
|
3
|
+
return context.exists(({ node }) => {
|
|
4
|
+
const group = node(Group);
|
|
5
|
+
return context.allOf(context.edge({ source: context.subject, class: member_of_group, target: group }), context.edge({ source: group, class: access, target: context.object }));
|
|
6
|
+
});
|
|
7
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const mayAdministerSpace: import("@astrale-os/sdk/schema").Policy;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { policy } from '@astrale-os/sdk/schema';
|
|
2
|
+
import { administers_space } from '../classes/administers-space.js';
|
|
3
|
+
import { owns_space } from '../classes/owns-space.js';
|
|
4
|
+
import { groupSpaceBranch } from './group-space-branch.js';
|
|
5
|
+
export const mayAdministerSpace = policy({
|
|
6
|
+
description: 'The effective User Grant directly or transitively administers this Space.',
|
|
7
|
+
match: ({ allOf, anyOf, edge, exists, object, subject }) => anyOf(edge({ source: subject, class: owns_space, target: object }), edge({ source: subject, class: administers_space, target: object }), groupSpaceBranch({ allOf, edge, exists, object, subject }, owns_space), groupSpaceBranch({ allOf, edge, exists, object, subject }, administers_space)),
|
|
8
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const ownsSpace: import("@astrale-os/sdk/schema").Policy;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { policy } from '@astrale-os/sdk/schema';
|
|
2
|
+
import { owns_space } from '../classes/owns-space.js';
|
|
3
|
+
import { groupSpaceBranch } from './group-space-branch.js';
|
|
4
|
+
export const ownsSpace = policy({
|
|
5
|
+
description: 'The effective User Grant directly or transitively owns this Space.',
|
|
6
|
+
match: ({ allOf, anyOf, edge, exists, object, subject }) => anyOf(edge({ source: subject, class: owns_space, target: object }), groupSpaceBranch({ allOf, edge, exists, object, subject }, owns_space)),
|
|
7
|
+
});
|
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
import { nodeClass, type Kernel } from '@astrale-os/sdk/schema';
|
|
1
|
+
import { nodeClass, type ClassIcon, type Kernel } from '@astrale-os/sdk/schema';
|
|
2
2
|
import { z } from 'zod';
|
|
3
|
-
import { resolveHome } from '
|
|
3
|
+
import { resolveHome } from '../functions/resolve-home.js';
|
|
4
4
|
declare const displayName: import("@astrale-os/sdk/schema").Property<z.ZodString, {
|
|
5
5
|
readonly required: false;
|
|
6
6
|
}, never>;
|
|
7
7
|
export interface UserConfig {
|
|
8
8
|
readonly description: string;
|
|
9
9
|
readonly extends: readonly [Kernel['classes']['Identity']];
|
|
10
|
+
readonly icon: ClassIcon;
|
|
10
11
|
readonly properties: {
|
|
11
12
|
readonly displayName: typeof displayName;
|
|
12
13
|
};
|