@synoikia/core 0.6.0 → 0.8.0
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/dist/app.d.ts +8 -0
- package/dist/app.js +16 -4
- package/dist/app.js.map +1 -1
- package/dist/approvals/grants.d.ts +34 -0
- package/dist/approvals/grants.js +79 -0
- package/dist/approvals/grants.js.map +1 -0
- package/dist/approvals/service.d.ts +24 -1
- package/dist/approvals/service.js +24 -2
- package/dist/approvals/service.js.map +1 -1
- package/dist/auth/mcp-auth.d.ts +8 -0
- package/dist/auth/mcp-auth.js +82 -33
- package/dist/auth/mcp-auth.js.map +1 -1
- package/dist/auth/mcp-tokens.d.ts +9 -3
- package/dist/auth/mcp-tokens.js +24 -4
- package/dist/auth/mcp-tokens.js.map +1 -1
- package/dist/auth/oauth.d.ts +5 -1
- package/dist/auth/oauth.js +15 -1
- package/dist/auth/oauth.js.map +1 -1
- package/dist/auth/oidc.js +3 -2
- package/dist/auth/oidc.js.map +1 -1
- package/dist/auth/roles.d.ts +43 -0
- package/dist/auth/roles.js +164 -0
- package/dist/auth/roles.js.map +1 -0
- package/dist/auth/sessions.d.ts +7 -0
- package/dist/auth/sessions.js +18 -2
- package/dist/auth/sessions.js.map +1 -1
- package/dist/auth/users.d.ts +26 -1
- package/dist/auth/users.js +109 -12
- package/dist/auth/users.js.map +1 -1
- package/dist/catalog/groups.js +2 -1
- package/dist/catalog/groups.js.map +1 -1
- package/dist/catalog/role-levels.d.ts +67 -0
- package/dist/catalog/role-levels.js +297 -0
- package/dist/catalog/role-levels.js.map +1 -0
- package/dist/catalog/rules.d.ts +33 -9
- package/dist/catalog/rules.js +51 -25
- package/dist/catalog/rules.js.map +1 -1
- package/dist/db/schema.d.ts +566 -0
- package/dist/db/schema.js +64 -0
- package/dist/db/schema.js.map +1 -1
- package/dist/errors.d.ts +5 -2
- package/dist/errors.js +5 -0
- package/dist/errors.js.map +1 -1
- package/dist/gate/access.d.ts +23 -2
- package/dist/gate/access.js +31 -3
- package/dist/gate/access.js.map +1 -1
- package/dist/gate/pipeline.d.ts +25 -5
- package/dist/gate/pipeline.js +67 -6
- package/dist/gate/pipeline.js.map +1 -1
- package/dist/gate/preapproval.d.ts +2 -0
- package/dist/gate/preapproval.js +16 -3
- package/dist/gate/preapproval.js.map +1 -1
- package/dist/http/admin/auth.d.ts +4 -0
- package/dist/http/admin/auth.js +53 -4
- package/dist/http/admin/auth.js.map +1 -1
- package/dist/http/admin/instances.js +19 -1
- package/dist/http/admin/instances.js.map +1 -1
- package/dist/http/admin/me.d.ts +6 -0
- package/dist/http/admin/me.js +189 -0
- package/dist/http/admin/me.js.map +1 -0
- package/dist/http/admin/roles.d.ts +5 -0
- package/dist/http/admin/roles.js +45 -0
- package/dist/http/admin/roles.js.map +1 -0
- package/dist/http/admin/system.js +11 -6
- package/dist/http/admin/system.js.map +1 -1
- package/dist/http/admin-app.js +13 -2
- package/dist/http/admin-app.js.map +1 -1
- package/dist/http/common.d.ts +1 -1
- package/dist/http/mcp/approval-card.d.ts +6 -0
- package/dist/http/mcp/approval-card.js +160 -0
- package/dist/http/mcp/approval-card.js.map +1 -0
- package/dist/http/mcp/approval-routes.d.ts +2 -2
- package/dist/http/mcp/approval-routes.js +40 -4
- package/dist/http/mcp/approval-routes.js.map +1 -1
- package/dist/http/mcp/endpoint.js +104 -10
- package/dist/http/mcp/endpoint.js.map +1 -1
- package/dist/http/mcp/oauth-routes.js +22 -8
- package/dist/http/mcp/oauth-routes.js.map +1 -1
- package/dist/http/mcp/pages.d.ts +8 -1
- package/dist/http/mcp/pages.js +21 -2
- package/dist/http/mcp/pages.js.map +1 -1
- package/dist/instances/manager.d.ts +4 -0
- package/dist/instances/settings.d.ts +2 -0
- package/dist/instances/settings.js +2 -0
- package/dist/instances/settings.js.map +1 -1
- package/dist/runtime/executions.d.ts +68 -0
- package/dist/runtime/executions.js +158 -0
- package/dist/runtime/executions.js.map +1 -0
- package/dist/runtime/index.d.ts +4 -1
- package/dist/runtime/index.js +131 -25
- package/dist/runtime/index.js.map +1 -1
- package/dist/settings.d.ts +4 -0
- package/dist/settings.js +12 -0
- package/dist/settings.js.map +1 -1
- package/dist/testing/index.d.ts +11 -1
- package/dist/testing/index.js +23 -7
- package/dist/testing/index.js.map +1 -1
- package/drizzle/0013_user_roles.sql +63 -0
- package/drizzle/0014_user_registration_source.sql +1 -0
- package/drizzle/meta/0013_snapshot.json +2833 -0
- package/drizzle/meta/0014_snapshot.json +2840 -0
- package/drizzle/meta/_journal.json +14 -0
- package/package.json +3 -3
package/dist/testing/index.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ import type { Manifest } from '@synoikia/plugin-sdk';
|
|
|
2
2
|
import type { AppContext, AppOptions } from '../app.js';
|
|
3
3
|
import { auditLog, operations, pendingApprovals, registryEntries } from '../db/schema.js';
|
|
4
4
|
import type { AccessLevel } from '../gate/access.js';
|
|
5
|
+
import type { ExecuteResult } from '../runtime/executions.js';
|
|
5
6
|
import type { SandboxResult } from '../sandbox/index.js';
|
|
6
7
|
/** Harness for plugin packages (`@synoikia/core/testing`): boots the real core on a built bundle, run
|
|
7
8
|
* as in production, and drives it the way an MCP client does. */
|
|
@@ -31,6 +32,9 @@ export interface HarnessApproval {
|
|
|
31
32
|
export interface ExecuteOptions {
|
|
32
33
|
/** Decides each approval; without it, or if it throws or leaves one open, the approval is denied. */
|
|
33
34
|
onApproval?: (approval: HarnessApproval) => void | Promise<void>;
|
|
35
|
+
/** Without `onApproval`, act as a client with no prompts: the call parks (design §5.6). Decide it with
|
|
36
|
+
* `parkedApproval(result)`, then collect it with `resume`. */
|
|
37
|
+
park?: boolean;
|
|
34
38
|
}
|
|
35
39
|
export interface PluginHarness {
|
|
36
40
|
ctx: AppContext;
|
|
@@ -38,7 +42,12 @@ export interface PluginHarness {
|
|
|
38
42
|
manifest: Manifest;
|
|
39
43
|
/** Errors thrown by `onApproval` handlers, oldest first. */
|
|
40
44
|
approvalErrors: unknown[];
|
|
41
|
-
|
|
45
|
+
/** A parked call (`opts.park`) answers with a `PendingResult`; it is also an `ok: false` SandboxResult. */
|
|
46
|
+
execute(code: string, opts?: ExecuteOptions): Promise<ExecuteResult>;
|
|
47
|
+
/** Follows a parked execution, as the `resume` tool does. */
|
|
48
|
+
resume(executionId: string): Promise<ExecuteResult>;
|
|
49
|
+
/** The approval a parked result waits on, to decide it as the approval page would. */
|
|
50
|
+
parkedApproval(result: ExecuteResult): HarnessApproval;
|
|
42
51
|
search(code: string): Promise<SandboxResult>;
|
|
43
52
|
setGroupLevel(group: string, level: AccessLevel): void;
|
|
44
53
|
/** The operation's own level; `null` makes it follow its group again. */
|
|
@@ -63,6 +72,7 @@ export interface PluginHarness {
|
|
|
63
72
|
stop(): Promise<void>;
|
|
64
73
|
}
|
|
65
74
|
export declare function startPluginHarness(opts: PluginHarnessOptions): Promise<PluginHarness>;
|
|
75
|
+
export type { ExecuteResult, PendingResult } from '../runtime/executions.js';
|
|
66
76
|
export { verifyPluginRepository } from './repository.js';
|
|
67
77
|
export type { VerifiedPlugin, VerifyRepositoryOptions } from './repository.js';
|
|
68
78
|
export { startFakeHttp } from './fake-http.js';
|
package/dist/testing/index.js
CHANGED
|
@@ -9,7 +9,8 @@ import { createRule } from '../catalog/rules.js';
|
|
|
9
9
|
import { loadConfig } from '../config/env.js';
|
|
10
10
|
import { secretFieldNames } from '../instances/connection.js';
|
|
11
11
|
import { auditLog, operations, pendingApprovals, plugins, registryEntries } from '../db/schema.js';
|
|
12
|
-
import {
|
|
12
|
+
import { FULL_ACCESS } from '../gate/access.js';
|
|
13
|
+
import { executeCode, resumeExecution, searchCode } from '../runtime/index.js';
|
|
13
14
|
/** Copies what a release ships (manifest, package.json, the entry's top-level path) into `root/<id>`. */
|
|
14
15
|
function stagePlugin(pluginDir, manifest, root) {
|
|
15
16
|
const entry = path.join(pluginDir, manifest.entry);
|
|
@@ -70,8 +71,9 @@ function harness(ctx, manifest, instanceId, work) {
|
|
|
70
71
|
const onApproval = opts.onApproval;
|
|
71
72
|
return {
|
|
72
73
|
client: { kind: 'mcp_client', id: 'harness' },
|
|
73
|
-
principal:
|
|
74
|
+
principal: FULL_ACCESS,
|
|
74
75
|
mcpSessionId: 'harness-session',
|
|
76
|
+
parkable: !onApproval && !!opts.park,
|
|
75
77
|
prompts: onApproval
|
|
76
78
|
? {
|
|
77
79
|
url: async (req) => {
|
|
@@ -83,24 +85,28 @@ function harness(ctx, manifest, instanceId, work) {
|
|
|
83
85
|
: undefined,
|
|
84
86
|
};
|
|
85
87
|
};
|
|
86
|
-
const
|
|
88
|
+
const approvalOf = (id, message, onDecided = () => { }) => {
|
|
87
89
|
const pending = ctx.db.select().from(pendingApprovals).where(eq(pendingApprovals.id, id)).get();
|
|
88
90
|
const operationKey = ctx.db.select().from(operations).where(eq(operations.id, pending.operationId)).get().key;
|
|
89
|
-
|
|
90
|
-
const approval = {
|
|
91
|
+
return {
|
|
91
92
|
id,
|
|
92
93
|
operationKey,
|
|
93
94
|
message,
|
|
94
95
|
pending,
|
|
95
96
|
approve(confirm) {
|
|
96
97
|
ctx.approvals.decide(id, { approve: true, confirm, decidedBy: 'harness' });
|
|
97
|
-
|
|
98
|
+
onDecided();
|
|
98
99
|
},
|
|
99
100
|
deny() {
|
|
100
101
|
ctx.approvals.decide(id, { approve: false, decidedBy: 'harness' });
|
|
101
|
-
|
|
102
|
+
onDecided();
|
|
102
103
|
},
|
|
103
104
|
};
|
|
105
|
+
};
|
|
106
|
+
const decide = async (id, message, onApproval) => {
|
|
107
|
+
let decided = false;
|
|
108
|
+
const approval = approvalOf(id, message, () => (decided = true));
|
|
109
|
+
const operationKey = approval.operationKey;
|
|
104
110
|
try {
|
|
105
111
|
await onApproval(approval);
|
|
106
112
|
if (!decided)
|
|
@@ -118,6 +124,16 @@ function harness(ctx, manifest, instanceId, work) {
|
|
|
118
124
|
manifest,
|
|
119
125
|
approvalErrors,
|
|
120
126
|
execute: (code, opts) => executeCode(ctx.gateDeps(), ctx.instances.runtime(instanceId), caller(opts), code),
|
|
127
|
+
resume: (executionId) => resumeExecution(ctx.gateDeps(), ctx.instances.runtime(instanceId), caller({ park: true }), executionId),
|
|
128
|
+
parkedApproval(result) {
|
|
129
|
+
const parked = result.approval;
|
|
130
|
+
if (!parked)
|
|
131
|
+
throw new Error('This result is not waiting for an approval');
|
|
132
|
+
const link = ctx.links.resolve(parked.path.slice('/a/'.length));
|
|
133
|
+
if (!link)
|
|
134
|
+
throw new Error('The approval is no longer open');
|
|
135
|
+
return approvalOf(link.approvalId, parked.summary);
|
|
136
|
+
},
|
|
121
137
|
search: (code) => searchCode(ctx.gateDeps(), ctx.instances.runtime(instanceId), caller(), code),
|
|
122
138
|
setGroupLevel(group, level) {
|
|
123
139
|
setGroupLevel(ctx.db, instanceId, group, level);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAC3F,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAE7C,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACtE,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,gBAAgB,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
CREATE TABLE `role_instances` (
|
|
2
|
+
`role_id` text NOT NULL,
|
|
3
|
+
`instance_id` text NOT NULL,
|
|
4
|
+
FOREIGN KEY (`role_id`) REFERENCES `roles`(`id`) ON UPDATE no action ON DELETE cascade,
|
|
5
|
+
FOREIGN KEY (`instance_id`) REFERENCES `plugin_instances`(`id`) ON UPDATE no action ON DELETE cascade
|
|
6
|
+
);
|
|
7
|
+
--> statement-breakpoint
|
|
8
|
+
CREATE UNIQUE INDEX `role_instances_idx` ON `role_instances` (`role_id`,`instance_id`);--> statement-breakpoint
|
|
9
|
+
CREATE TABLE `role_levels` (
|
|
10
|
+
`id` text PRIMARY KEY NOT NULL,
|
|
11
|
+
`role_id` text NOT NULL,
|
|
12
|
+
`instance_id` text NOT NULL,
|
|
13
|
+
`group_id` text,
|
|
14
|
+
`operation_id` text,
|
|
15
|
+
`level` text NOT NULL,
|
|
16
|
+
`changed_at` integer,
|
|
17
|
+
`changed_by` text,
|
|
18
|
+
FOREIGN KEY (`role_id`) REFERENCES `roles`(`id`) ON UPDATE no action ON DELETE cascade,
|
|
19
|
+
FOREIGN KEY (`instance_id`) REFERENCES `plugin_instances`(`id`) ON UPDATE no action ON DELETE cascade,
|
|
20
|
+
FOREIGN KEY (`group_id`) REFERENCES `operation_groups`(`id`) ON UPDATE no action ON DELETE cascade,
|
|
21
|
+
FOREIGN KEY (`operation_id`) REFERENCES `operations`(`id`) ON UPDATE no action ON DELETE cascade,
|
|
22
|
+
FOREIGN KEY (`changed_by`) REFERENCES `users`(`id`) ON UPDATE no action ON DELETE set null
|
|
23
|
+
);
|
|
24
|
+
--> statement-breakpoint
|
|
25
|
+
CREATE UNIQUE INDEX `role_levels_group_idx` ON `role_levels` (`role_id`,`group_id`);--> statement-breakpoint
|
|
26
|
+
CREATE UNIQUE INDEX `role_levels_op_idx` ON `role_levels` (`role_id`,`operation_id`);--> statement-breakpoint
|
|
27
|
+
CREATE TABLE `roles` (
|
|
28
|
+
`id` text PRIMARY KEY NOT NULL,
|
|
29
|
+
`name` text NOT NULL,
|
|
30
|
+
`built_in` integer DEFAULT false NOT NULL,
|
|
31
|
+
`can_set_own_levels` integer DEFAULT false NOT NULL,
|
|
32
|
+
`can_manage_own_rules` integer DEFAULT false NOT NULL,
|
|
33
|
+
`can_see_status` integer DEFAULT false NOT NULL,
|
|
34
|
+
`created_at` integer DEFAULT (unixepoch() * 1000) NOT NULL,
|
|
35
|
+
`updated_at` integer
|
|
36
|
+
);
|
|
37
|
+
--> statement-breakpoint
|
|
38
|
+
CREATE UNIQUE INDEX `roles_name_unique` ON `roles` (`name`);--> statement-breakpoint
|
|
39
|
+
CREATE TABLE `user_levels` (
|
|
40
|
+
`id` text PRIMARY KEY NOT NULL,
|
|
41
|
+
`user_id` text NOT NULL,
|
|
42
|
+
`instance_id` text NOT NULL,
|
|
43
|
+
`group_id` text,
|
|
44
|
+
`operation_id` text,
|
|
45
|
+
`level` text NOT NULL,
|
|
46
|
+
`changed_at` integer,
|
|
47
|
+
FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON UPDATE no action ON DELETE cascade,
|
|
48
|
+
FOREIGN KEY (`instance_id`) REFERENCES `plugin_instances`(`id`) ON UPDATE no action ON DELETE cascade,
|
|
49
|
+
FOREIGN KEY (`group_id`) REFERENCES `operation_groups`(`id`) ON UPDATE no action ON DELETE cascade,
|
|
50
|
+
FOREIGN KEY (`operation_id`) REFERENCES `operations`(`id`) ON UPDATE no action ON DELETE cascade
|
|
51
|
+
);
|
|
52
|
+
--> statement-breakpoint
|
|
53
|
+
CREATE UNIQUE INDEX `user_levels_group_idx` ON `user_levels` (`user_id`,`group_id`);--> statement-breakpoint
|
|
54
|
+
CREATE UNIQUE INDEX `user_levels_op_idx` ON `user_levels` (`user_id`,`operation_id`);--> statement-breakpoint
|
|
55
|
+
ALTER TABLE `pending_approvals` ADD `owner_user_id` text REFERENCES users(id);--> statement-breakpoint
|
|
56
|
+
ALTER TABLE `pre_approval_rules` ADD `owner_user_id` text REFERENCES users(id);--> statement-breakpoint
|
|
57
|
+
ALTER TABLE `users` ADD `role_id` text DEFAULT 'admin' NOT NULL;--> statement-breakpoint
|
|
58
|
+
-- The built-in Admin role: every existing user keeps full administration.
|
|
59
|
+
INSERT INTO `roles` (`id`, `name`, `built_in`, `can_set_own_levels`, `can_manage_own_rules`, `can_see_status`)
|
|
60
|
+
VALUES ('admin', 'Admin', 1, 1, 1, 1);--> statement-breakpoint
|
|
61
|
+
-- Every credential has an owner whose role decides its reach: tokens without a creator go to the oldest enabled user.
|
|
62
|
+
UPDATE `mcp_tokens` SET `created_by` = (SELECT `id` FROM `users` ORDER BY `disabled`, `created_at`, `id` LIMIT 1)
|
|
63
|
+
WHERE `created_by` IS NULL;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
ALTER TABLE `users` ADD `registered_via` text;
|