@vess-id/vess 0.2.0-alpha.1
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/LICENSE +64 -0
- package/README.md +223 -0
- package/bin/vess.js +2 -0
- package/dist/__mocks__/@napi-rs/keyring.d.ts +9 -0
- package/dist/__mocks__/@napi-rs/keyring.d.ts.map +1 -0
- package/dist/__mocks__/@napi-rs/keyring.js +33 -0
- package/dist/__mocks__/@napi-rs/keyring.js.map +1 -0
- package/dist/__mocks__/node-mac-auth.d.ts +8 -0
- package/dist/__mocks__/node-mac-auth.d.ts.map +1 -0
- package/dist/__mocks__/node-mac-auth.js +29 -0
- package/dist/__mocks__/node-mac-auth.js.map +1 -0
- package/dist/adapter/mcp/http-transport.d.ts +34 -0
- package/dist/adapter/mcp/http-transport.d.ts.map +1 -0
- package/dist/adapter/mcp/http-transport.js +158 -0
- package/dist/adapter/mcp/http-transport.js.map +1 -0
- package/dist/adapter/mcp/mcp-adapter.d.ts +37 -0
- package/dist/adapter/mcp/mcp-adapter.d.ts.map +1 -0
- package/dist/adapter/mcp/mcp-adapter.js +48 -0
- package/dist/adapter/mcp/mcp-adapter.js.map +1 -0
- package/dist/adapter/mcp/mcp-server.factory.d.ts +35 -0
- package/dist/adapter/mcp/mcp-server.factory.d.ts.map +1 -0
- package/dist/adapter/mcp/mcp-server.factory.js +114 -0
- package/dist/adapter/mcp/mcp-server.factory.js.map +1 -0
- package/dist/adapter/mcp/stdio-transport.d.ts +7 -0
- package/dist/adapter/mcp/stdio-transport.d.ts.map +1 -0
- package/dist/adapter/mcp/stdio-transport.js +13 -0
- package/dist/adapter/mcp/stdio-transport.js.map +1 -0
- package/dist/adapter/mcp/transport.d.ts +10 -0
- package/dist/adapter/mcp/transport.d.ts.map +1 -0
- package/dist/adapter/mcp/transport.js +14 -0
- package/dist/adapter/mcp/transport.js.map +1 -0
- package/dist/approval/approval-token.d.ts +23 -0
- package/dist/approval/approval-token.d.ts.map +1 -0
- package/dist/approval/approval-token.js +81 -0
- package/dist/approval/approval-token.js.map +1 -0
- package/dist/audit/audit-dto-mapper.d.ts +29 -0
- package/dist/audit/audit-dto-mapper.d.ts.map +1 -0
- package/dist/audit/audit-dto-mapper.js +61 -0
- package/dist/audit/audit-dto-mapper.js.map +1 -0
- package/dist/audit/audit-logger.d.ts +35 -0
- package/dist/audit/audit-logger.d.ts.map +1 -0
- package/dist/audit/audit-logger.js +67 -0
- package/dist/audit/audit-logger.js.map +1 -0
- package/dist/audit/audit-sync.d.ts +12 -0
- package/dist/audit/audit-sync.d.ts.map +1 -0
- package/dist/audit/audit-sync.js +65 -0
- package/dist/audit/audit-sync.js.map +1 -0
- package/dist/auth/user-authenticator.d.ts +51 -0
- package/dist/auth/user-authenticator.d.ts.map +1 -0
- package/dist/auth/user-authenticator.js +155 -0
- package/dist/auth/user-authenticator.js.map +1 -0
- package/dist/cli/cli-db.d.ts +12 -0
- package/dist/cli/cli-db.d.ts.map +1 -0
- package/dist/cli/cli-db.js +20 -0
- package/dist/cli/cli-db.js.map +1 -0
- package/dist/cli/cli-utils.d.ts +14 -0
- package/dist/cli/cli-utils.d.ts.map +1 -0
- package/dist/cli/cli-utils.js +57 -0
- package/dist/cli/cli-utils.js.map +1 -0
- package/dist/cli/daemon-utils.d.ts +30 -0
- package/dist/cli/daemon-utils.d.ts.map +1 -0
- package/dist/cli/daemon-utils.js +131 -0
- package/dist/cli/daemon-utils.js.map +1 -0
- package/dist/cli/daemon.d.ts +13 -0
- package/dist/cli/daemon.d.ts.map +1 -0
- package/dist/cli/daemon.js +207 -0
- package/dist/cli/daemon.js.map +1 -0
- package/dist/cli/doctor.d.ts +2 -0
- package/dist/cli/doctor.d.ts.map +1 -0
- package/dist/cli/doctor.js +135 -0
- package/dist/cli/doctor.js.map +1 -0
- package/dist/cli/env-delete.d.ts +6 -0
- package/dist/cli/env-delete.d.ts.map +1 -0
- package/dist/cli/env-delete.js +80 -0
- package/dist/cli/env-delete.js.map +1 -0
- package/dist/cli/env-list.d.ts +5 -0
- package/dist/cli/env-list.d.ts.map +1 -0
- package/dist/cli/env-list.js +42 -0
- package/dist/cli/env-list.js.map +1 -0
- package/dist/cli/env-post-integration.d.ts +21 -0
- package/dist/cli/env-post-integration.d.ts.map +1 -0
- package/dist/cli/env-post-integration.js +300 -0
- package/dist/cli/env-post-integration.js.map +1 -0
- package/dist/cli/env-restore.d.ts +15 -0
- package/dist/cli/env-restore.d.ts.map +1 -0
- package/dist/cli/env-restore.js +130 -0
- package/dist/cli/env-restore.js.map +1 -0
- package/dist/cli/env.d.ts +14 -0
- package/dist/cli/env.d.ts.map +1 -0
- package/dist/cli/env.js +182 -0
- package/dist/cli/env.js.map +1 -0
- package/dist/cli/error-handlers.d.ts +13 -0
- package/dist/cli/error-handlers.d.ts.map +1 -0
- package/dist/cli/error-handlers.js +32 -0
- package/dist/cli/error-handlers.js.map +1 -0
- package/dist/cli/hook-check-env.d.ts +12 -0
- package/dist/cli/hook-check-env.d.ts.map +1 -0
- package/dist/cli/hook-check-env.js +117 -0
- package/dist/cli/hook-check-env.js.map +1 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +294 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/init-guard.d.ts +13 -0
- package/dist/cli/init-guard.d.ts.map +1 -0
- package/dist/cli/init-guard.js +62 -0
- package/dist/cli/init-guard.js.map +1 -0
- package/dist/cli/init.d.ts +19 -0
- package/dist/cli/init.d.ts.map +1 -0
- package/dist/cli/init.js +440 -0
- package/dist/cli/init.js.map +1 -0
- package/dist/cli/install.d.ts +14 -0
- package/dist/cli/install.d.ts.map +1 -0
- package/dist/cli/install.js +186 -0
- package/dist/cli/install.js.map +1 -0
- package/dist/cli/login.d.ts +6 -0
- package/dist/cli/login.d.ts.map +1 -0
- package/dist/cli/login.js +76 -0
- package/dist/cli/login.js.map +1 -0
- package/dist/cli/logs.d.ts +32 -0
- package/dist/cli/logs.d.ts.map +1 -0
- package/dist/cli/logs.js +147 -0
- package/dist/cli/logs.js.map +1 -0
- package/dist/cli/project.d.ts +8 -0
- package/dist/cli/project.d.ts.map +1 -0
- package/dist/cli/project.js +102 -0
- package/dist/cli/project.js.map +1 -0
- package/dist/cli/reset.d.ts +8 -0
- package/dist/cli/reset.d.ts.map +1 -0
- package/dist/cli/reset.js +137 -0
- package/dist/cli/reset.js.map +1 -0
- package/dist/cli/run.d.ts +22 -0
- package/dist/cli/run.d.ts.map +1 -0
- package/dist/cli/run.js +103 -0
- package/dist/cli/run.js.map +1 -0
- package/dist/cli/start.d.ts +2 -0
- package/dist/cli/start.d.ts.map +1 -0
- package/dist/cli/start.js +29 -0
- package/dist/cli/start.js.map +1 -0
- package/dist/cli/status.d.ts +12 -0
- package/dist/cli/status.d.ts.map +1 -0
- package/dist/cli/status.js +131 -0
- package/dist/cli/status.js.map +1 -0
- package/dist/cli/uninstall.d.ts +8 -0
- package/dist/cli/uninstall.d.ts.map +1 -0
- package/dist/cli/uninstall.js +111 -0
- package/dist/cli/uninstall.js.map +1 -0
- package/dist/config/config.d.ts +10 -0
- package/dist/config/config.d.ts.map +1 -0
- package/dist/config/config.js +64 -0
- package/dist/config/config.js.map +1 -0
- package/dist/config/constants.d.ts +3 -0
- package/dist/config/constants.d.ts.map +1 -0
- package/dist/config/constants.js +6 -0
- package/dist/config/constants.js.map +1 -0
- package/dist/config/paths.d.ts +9 -0
- package/dist/config/paths.d.ts.map +1 -0
- package/dist/config/paths.js +58 -0
- package/dist/config/paths.js.map +1 -0
- package/dist/core/execution-engine.d.ts +119 -0
- package/dist/core/execution-engine.d.ts.map +1 -0
- package/dist/core/execution-engine.js +1291 -0
- package/dist/core/execution-engine.js.map +1 -0
- package/dist/core/runtime.d.ts +43 -0
- package/dist/core/runtime.d.ts.map +1 -0
- package/dist/core/runtime.js +143 -0
- package/dist/core/runtime.js.map +1 -0
- package/dist/core/sync-scheduler.d.ts +42 -0
- package/dist/core/sync-scheduler.d.ts.map +1 -0
- package/dist/core/sync-scheduler.js +131 -0
- package/dist/core/sync-scheduler.js.map +1 -0
- package/dist/core/types.d.ts +77 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +7 -0
- package/dist/core/types.js.map +1 -0
- package/dist/daemon/service-manager.d.ts +68 -0
- package/dist/daemon/service-manager.d.ts.map +1 -0
- package/dist/daemon/service-manager.js +303 -0
- package/dist/daemon/service-manager.js.map +1 -0
- package/dist/env/env-classifier.d.ts +14 -0
- package/dist/env/env-classifier.d.ts.map +1 -0
- package/dist/env/env-classifier.js +94 -0
- package/dist/env/env-classifier.js.map +1 -0
- package/dist/env/env-parser.d.ts +13 -0
- package/dist/env/env-parser.d.ts.map +1 -0
- package/dist/env/env-parser.js +33 -0
- package/dist/env/env-parser.js.map +1 -0
- package/dist/env/env-profile-store.d.ts +15 -0
- package/dist/env/env-profile-store.d.ts.map +1 -0
- package/dist/env/env-profile-store.js +35 -0
- package/dist/env/env-profile-store.js.map +1 -0
- package/dist/env/env-reference.d.ts +10 -0
- package/dist/env/env-reference.d.ts.map +1 -0
- package/dist/env/env-reference.js +33 -0
- package/dist/env/env-reference.js.map +1 -0
- package/dist/env/env-resolver.d.ts +18 -0
- package/dist/env/env-resolver.d.ts.map +1 -0
- package/dist/env/env-resolver.js +48 -0
- package/dist/env/env-resolver.js.map +1 -0
- package/dist/env/fs-utils.d.ts +9 -0
- package/dist/env/fs-utils.d.ts.map +1 -0
- package/dist/env/fs-utils.js +59 -0
- package/dist/env/fs-utils.js.map +1 -0
- package/dist/env/secret-backend.d.ts +15 -0
- package/dist/env/secret-backend.d.ts.map +1 -0
- package/dist/env/secret-backend.js +24 -0
- package/dist/env/secret-backend.js.map +1 -0
- package/dist/executor/executor-registry.d.ts +22 -0
- package/dist/executor/executor-registry.d.ts.map +1 -0
- package/dist/executor/executor-registry.js +42 -0
- package/dist/executor/executor-registry.js.map +1 -0
- package/dist/executor/process-launcher.d.ts +26 -0
- package/dist/executor/process-launcher.d.ts.map +1 -0
- package/dist/executor/process-launcher.js +98 -0
- package/dist/executor/process-launcher.js.map +1 -0
- package/dist/executor/secret-file.d.ts +28 -0
- package/dist/executor/secret-file.d.ts.map +1 -0
- package/dist/executor/secret-file.js +127 -0
- package/dist/executor/secret-file.js.map +1 -0
- package/dist/gateway/auth.d.ts +26 -0
- package/dist/gateway/auth.d.ts.map +1 -0
- package/dist/gateway/auth.js +66 -0
- package/dist/gateway/auth.js.map +1 -0
- package/dist/gateway/gateway-client.d.ts +298 -0
- package/dist/gateway/gateway-client.d.ts.map +1 -0
- package/dist/gateway/gateway-client.js +501 -0
- package/dist/gateway/gateway-client.js.map +1 -0
- package/dist/identity/agent-identity.d.ts +29 -0
- package/dist/identity/agent-identity.d.ts.map +1 -0
- package/dist/identity/agent-identity.js +54 -0
- package/dist/identity/agent-identity.js.map +1 -0
- package/dist/identity/did-manager.d.ts +17 -0
- package/dist/identity/did-manager.d.ts.map +1 -0
- package/dist/identity/did-manager.js +29 -0
- package/dist/identity/did-manager.js.map +1 -0
- package/dist/identity/key-manager.d.ts +18 -0
- package/dist/identity/key-manager.d.ts.map +1 -0
- package/dist/identity/key-manager.js +101 -0
- package/dist/identity/key-manager.js.map +1 -0
- package/dist/identity/session-key.d.ts +13 -0
- package/dist/identity/session-key.d.ts.map +1 -0
- package/dist/identity/session-key.js +17 -0
- package/dist/identity/session-key.js.map +1 -0
- package/dist/policy/policy-evaluator.d.ts +63 -0
- package/dist/policy/policy-evaluator.d.ts.map +1 -0
- package/dist/policy/policy-evaluator.js +266 -0
- package/dist/policy/policy-evaluator.js.map +1 -0
- package/dist/policy/policy-loader.d.ts +10 -0
- package/dist/policy/policy-loader.d.ts.map +1 -0
- package/dist/policy/policy-loader.js +71 -0
- package/dist/policy/policy-loader.js.map +1 -0
- package/dist/policy/types.d.ts +21 -0
- package/dist/policy/types.d.ts.map +1 -0
- package/dist/policy/types.js +3 -0
- package/dist/policy/types.js.map +1 -0
- package/dist/utils/credential-errors.d.ts +3 -0
- package/dist/utils/credential-errors.d.ts.map +1 -0
- package/dist/utils/credential-errors.js +23 -0
- package/dist/utils/credential-errors.js.map +1 -0
- package/dist/utils/resource-canonicalizer.d.ts +19 -0
- package/dist/utils/resource-canonicalizer.d.ts.map +1 -0
- package/dist/utils/resource-canonicalizer.js +100 -0
- package/dist/utils/resource-canonicalizer.js.map +1 -0
- package/dist/utils/vc-utils.d.ts +23 -0
- package/dist/utils/vc-utils.d.ts.map +1 -0
- package/dist/utils/vc-utils.js +53 -0
- package/dist/utils/vc-utils.js.map +1 -0
- package/dist/wallet/sqlite.d.ts +4 -0
- package/dist/wallet/sqlite.d.ts.map +1 -0
- package/dist/wallet/sqlite.js +158 -0
- package/dist/wallet/sqlite.js.map +1 -0
- package/dist/wallet/vp-builder.d.ts +18 -0
- package/dist/wallet/vp-builder.d.ts.map +1 -0
- package/dist/wallet/vp-builder.js +46 -0
- package/dist/wallet/vp-builder.js.map +1 -0
- package/dist/wallet/wallet.d.ts +58 -0
- package/dist/wallet/wallet.d.ts.map +1 -0
- package/dist/wallet/wallet.js +170 -0
- package/dist/wallet/wallet.js.map +1 -0
- package/package.json +80 -0
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.McpAdapter = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* MCP Adapter — thin bridge between MCP protocol and agentd core.
|
|
6
|
+
*
|
|
7
|
+
* This adapter does NOT:
|
|
8
|
+
* - Evaluate policies
|
|
9
|
+
* - Acquire or verify VCs/VPs
|
|
10
|
+
* - Access credentials or tokens
|
|
11
|
+
* - Make Gateway API calls
|
|
12
|
+
* - Decide execution routing
|
|
13
|
+
*
|
|
14
|
+
* It ONLY:
|
|
15
|
+
* - Receives MCP tool calls
|
|
16
|
+
* - Normalizes action names (MCP-specific format quirks)
|
|
17
|
+
* - Passes action + input to ExecutionEngine
|
|
18
|
+
* - Returns the result
|
|
19
|
+
*/
|
|
20
|
+
const ai_identity_1 = require("@vess-id/ai-identity");
|
|
21
|
+
class McpAdapter {
|
|
22
|
+
engine;
|
|
23
|
+
constructor(engine) {
|
|
24
|
+
this.engine = engine;
|
|
25
|
+
}
|
|
26
|
+
async callTool(args) {
|
|
27
|
+
const action = (0, ai_identity_1.normalizeMcpActionName)(args.tool, args.action);
|
|
28
|
+
return this.engine.execute({
|
|
29
|
+
action,
|
|
30
|
+
input: args.parameters || {},
|
|
31
|
+
approval: args.approval ? {
|
|
32
|
+
token: args.approval.token,
|
|
33
|
+
choice: args.approval.choice,
|
|
34
|
+
vcTTLMinutes: args.approval.vcTTLMinutes,
|
|
35
|
+
} : undefined,
|
|
36
|
+
pendingRequestId: args.pendingRequestId,
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
async issueToolPermission(args) {
|
|
40
|
+
const actions = args.actions.map(a => (0, ai_identity_1.normalizeMcpActionName)(args.tool, a));
|
|
41
|
+
return this.engine.requestPermissions(actions);
|
|
42
|
+
}
|
|
43
|
+
async listAvailableTools() {
|
|
44
|
+
return this.engine.listAvailableTools();
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
exports.McpAdapter = McpAdapter;
|
|
48
|
+
//# sourceMappingURL=mcp-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-adapter.js","sourceRoot":"","sources":["../../../src/adapter/mcp/mcp-adapter.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;;;;;;;GAeG;AACH,sDAA6D;AAK7D,MAAa,UAAU;IACQ;IAA7B,YAA6B,MAAuB;QAAvB,WAAM,GAAN,MAAM,CAAiB;IAAG,CAAC;IAExD,KAAK,CAAC,QAAQ,CAAC,IAMd;QACC,MAAM,MAAM,GAAG,IAAA,oCAAsB,EAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;QAC7D,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;YACzB,MAAM;YACN,KAAK,EAAE,IAAI,CAAC,UAAU,IAAI,EAAE;YAC5B,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;gBACxB,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK;gBAC1B,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAwB;gBAC9C,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,YAAY;aACzC,CAAC,CAAC,CAAC,SAAS;YACb,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;SACxC,CAAC,CAAA;IACJ,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,IAGzB;QACC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAA,oCAAsB,EAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;QAC3E,OAAO,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAA;IAChD,CAAC;IAED,KAAK,CAAC,kBAAkB;QACtB,OAAO,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE,CAAA;IACzC,CAAC;CACF;AAlCD,gCAkCC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
+
export interface MCPToolHandler {
|
|
3
|
+
callTool(args: {
|
|
4
|
+
tool: string;
|
|
5
|
+
action: string;
|
|
6
|
+
parameters?: Record<string, any>;
|
|
7
|
+
approval?: {
|
|
8
|
+
token: string;
|
|
9
|
+
choice: string;
|
|
10
|
+
vcTTLMinutes?: number;
|
|
11
|
+
};
|
|
12
|
+
pendingRequestId?: string;
|
|
13
|
+
}): Promise<{
|
|
14
|
+
success: boolean;
|
|
15
|
+
data?: any;
|
|
16
|
+
error?: string;
|
|
17
|
+
approvalRequired?: any;
|
|
18
|
+
waitingForApproval?: any;
|
|
19
|
+
}>;
|
|
20
|
+
issueToolPermission(args: {
|
|
21
|
+
tool: string;
|
|
22
|
+
actions: string[];
|
|
23
|
+
}): Promise<{
|
|
24
|
+
success: boolean;
|
|
25
|
+
data?: any;
|
|
26
|
+
error?: string;
|
|
27
|
+
}>;
|
|
28
|
+
listAvailableTools(): Promise<{
|
|
29
|
+
success: boolean;
|
|
30
|
+
data?: any;
|
|
31
|
+
error?: string;
|
|
32
|
+
}>;
|
|
33
|
+
}
|
|
34
|
+
export declare function createMcpServer(handler: MCPToolHandler): McpServer;
|
|
35
|
+
//# sourceMappingURL=mcp-server.factory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-server.factory.d.ts","sourceRoot":"","sources":["../../../src/adapter/mcp/mcp-server.factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AA6CnE,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE;QACb,IAAI,EAAE,MAAM,CAAA;QACZ,MAAM,EAAE,MAAM,CAAA;QACd,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;QAChC,QAAQ,CAAC,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAC;YAAC,YAAY,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;QACnE,gBAAgB,CAAC,EAAE,MAAM,CAAA;KAC1B,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,GAAG,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,gBAAgB,CAAC,EAAE,GAAG,CAAC;QAAC,kBAAkB,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC,CAAA;IAC/G,mBAAmB,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,GAAG,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACzH,kBAAkB,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,GAAG,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAChF;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,cAAc,GAAG,SAAS,CAyFlE"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createMcpServer = createMcpServer;
|
|
4
|
+
const mcp_js_1 = require("@modelcontextprotocol/sdk/server/mcp.js");
|
|
5
|
+
const ai_identity_1 = require("@vess-id/ai-identity");
|
|
6
|
+
const zod_1 = require("zod");
|
|
7
|
+
/** Zod enum for tool names, derived from SDK (now includes 'os') */
|
|
8
|
+
const toolEnum = zod_1.z.enum(ai_identity_1.VALID_MCP_TOOLS);
|
|
9
|
+
/** Action format description with full valid action list */
|
|
10
|
+
const ACTION_FORMAT_DESC = 'Action in provider.resource.operation format. Valid actions: ' +
|
|
11
|
+
(0, ai_identity_1.getAllValidMcpActionNames)().join(', ');
|
|
12
|
+
const CALL_TOOL_DESCRIPTION = `Execute an action on an external service or local resource on behalf of the user.
|
|
13
|
+
This is the PRIMARY tool — always use this to perform actions. Permission is handled automatically:
|
|
14
|
+
- Read-type actions (low risk) are auto-approved and execute immediately.
|
|
15
|
+
- Write-type actions that need approval will return an approval_required response. Re-call with the approval parameter to confirm or deny.
|
|
16
|
+
Do NOT call aidentity_request_permission first; just call this tool directly.
|
|
17
|
+
|
|
18
|
+
Supported tools and common actions:
|
|
19
|
+
|
|
20
|
+
**os** — Read/write local secret files (.env, credentials, etc.)
|
|
21
|
+
Actions: os.secret.read, os.secret.write
|
|
22
|
+
Example: tool="os", action="os.secret.read", parameters={"file_path": "~/projects/app/.env"}
|
|
23
|
+
|
|
24
|
+
**slack** — Post/read/update/delete messages, list channels, get user info.
|
|
25
|
+
Common actions: slack.message.post, slack.message.read, slack.channel.read, slack.batch.read
|
|
26
|
+
The "channel" parameter accepts channel ID (e.g. "C0A159PP6QM"), channel name (e.g. "general"), or #-prefixed name (e.g. "#general"). Responses are compact by default (essential fields only). Set compact=false for full Slack API response.
|
|
27
|
+
Example: tool="slack", action="slack.message.post", parameters={"channel": "C01ABCD2EFG", "text": "Hello!"}
|
|
28
|
+
Example: tool="slack", action="slack.message.read", parameters={"channel": "C01ABCD2EFG", "limit": 10}
|
|
29
|
+
|
|
30
|
+
**github** — Create/read/update/list issues.
|
|
31
|
+
Common actions: github.issue.create, github.issue.list, github.issue.read
|
|
32
|
+
Example: tool="github", action="github.issue.create", parameters={"title": "Bug report", "body": "Details..."}
|
|
33
|
+
|
|
34
|
+
**jira** — Manage issues, projects, boards, sprints.
|
|
35
|
+
Common actions: jira.issue.create, jira.issue.search, jira.project.read
|
|
36
|
+
|
|
37
|
+
**gmail** — Search/read/send/delete emails.
|
|
38
|
+
Common actions: gmail.message.search, gmail.message.read, gmail.message.send
|
|
39
|
+
|
|
40
|
+
**calendar** — List/create/update/delete Google Calendar events.
|
|
41
|
+
Common actions: calendar.event.list, calendar.event.create
|
|
42
|
+
|
|
43
|
+
Call aidentity_list_available_tools for detailed parameter schemas of each action.`;
|
|
44
|
+
function createMcpServer(handler) {
|
|
45
|
+
const server = new mcp_js_1.McpServer({
|
|
46
|
+
name: 'VESS',
|
|
47
|
+
version: '0.1.0',
|
|
48
|
+
});
|
|
49
|
+
const formatResult = (result) => {
|
|
50
|
+
if (result.waitingForApproval) {
|
|
51
|
+
return {
|
|
52
|
+
content: [{
|
|
53
|
+
type: 'text',
|
|
54
|
+
text: JSON.stringify(result.waitingForApproval, null, 2),
|
|
55
|
+
}],
|
|
56
|
+
isError: false,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
if (result.approvalRequired) {
|
|
60
|
+
return {
|
|
61
|
+
content: [{ type: 'text', text: JSON.stringify(result.approvalRequired, null, 2) }],
|
|
62
|
+
isError: false,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
if (result.success) {
|
|
66
|
+
return {
|
|
67
|
+
content: [{ type: 'text', text: JSON.stringify(result.data, null, 2) }],
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
return {
|
|
71
|
+
content: [{ type: 'text', text: result.error || 'Unknown error' }],
|
|
72
|
+
isError: true,
|
|
73
|
+
};
|
|
74
|
+
};
|
|
75
|
+
server.tool('aidentity_call_tool', CALL_TOOL_DESCRIPTION, {
|
|
76
|
+
tool: toolEnum,
|
|
77
|
+
action: zod_1.z.string().describe(ACTION_FORMAT_DESC),
|
|
78
|
+
parameters: zod_1.z.record(zod_1.z.string(), zod_1.z.any()).optional().describe('Tool-specific parameters'),
|
|
79
|
+
approval: zod_1.z.object({
|
|
80
|
+
token: zod_1.z.string().describe('HMAC-signed approval token from a previous approval_required response'),
|
|
81
|
+
choice: zod_1.z.enum(['one_time', 'persistent', 'deny_once', 'deny_persistent']).describe('User approval choice'),
|
|
82
|
+
vcTTLMinutes: zod_1.z.number().min(5).max(1440).optional().describe('Custom VC TTL in minutes (5-1440)'),
|
|
83
|
+
}).optional().describe('Approval response — only provide when re-calling after an approval_required response'),
|
|
84
|
+
pendingRequestId: zod_1.z.string().optional()
|
|
85
|
+
.describe('Request ID from a previous waiting_for_approval response. Use to check if approval was completed.'),
|
|
86
|
+
}, async (args) => {
|
|
87
|
+
const result = await handler.callTool({
|
|
88
|
+
tool: args.tool,
|
|
89
|
+
action: args.action,
|
|
90
|
+
parameters: args.parameters,
|
|
91
|
+
approval: args.approval,
|
|
92
|
+
pendingRequestId: args.pendingRequestId,
|
|
93
|
+
});
|
|
94
|
+
return formatResult(result);
|
|
95
|
+
});
|
|
96
|
+
server.tool('aidentity_request_permission', 'OPTIONAL: Pre-request permission for multiple actions at once. ' +
|
|
97
|
+
'In most cases, use aidentity_call_tool directly instead — it handles permissions automatically.', {
|
|
98
|
+
tool: toolEnum,
|
|
99
|
+
actions: zod_1.z.array(zod_1.z.string().describe(ACTION_FORMAT_DESC))
|
|
100
|
+
.describe('One or more actions to request permission for'),
|
|
101
|
+
}, async (args) => {
|
|
102
|
+
const result = await handler.issueToolPermission({
|
|
103
|
+
tool: args.tool,
|
|
104
|
+
actions: args.actions,
|
|
105
|
+
});
|
|
106
|
+
return formatResult(result);
|
|
107
|
+
});
|
|
108
|
+
server.tool('aidentity_list_available_tools', 'List all available tools and their supported actions.', {}, async () => {
|
|
109
|
+
const result = await handler.listAvailableTools();
|
|
110
|
+
return formatResult(result);
|
|
111
|
+
});
|
|
112
|
+
return server;
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=mcp-server.factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-server.factory.js","sourceRoot":"","sources":["../../../src/adapter/mcp/mcp-server.factory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
+
/**
|
|
3
|
+
* Connect MCP server via stdio transport.
|
|
4
|
+
* This is how AI clients (Claude Code, etc.) communicate with vess.
|
|
5
|
+
*/
|
|
6
|
+
export declare function connectStdioTransport(server: McpServer): Promise<void>;
|
|
7
|
+
//# sourceMappingURL=stdio-transport.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stdio-transport.d.ts","sourceRoot":"","sources":["../../../src/adapter/mcp/stdio-transport.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AAEnE;;;GAGG;AACH,wBAAsB,qBAAqB,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAG5E"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.connectStdioTransport = connectStdioTransport;
|
|
4
|
+
const stdio_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js");
|
|
5
|
+
/**
|
|
6
|
+
* Connect MCP server via stdio transport.
|
|
7
|
+
* This is how AI clients (Claude Code, etc.) communicate with vess.
|
|
8
|
+
*/
|
|
9
|
+
async function connectStdioTransport(server) {
|
|
10
|
+
const transport = new stdio_js_1.StdioServerTransport();
|
|
11
|
+
await server.connect(transport);
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=stdio-transport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stdio-transport.js","sourceRoot":"","sources":["../../../src/adapter/mcp/stdio-transport.ts"],"names":[],"mappings":";;AAOA,sDAGC;AAVD,wEAAgF;AAGhF;;;GAGG;AACI,KAAK,UAAU,qBAAqB,CAAC,MAAiB;IAC3D,MAAM,SAAS,GAAG,IAAI,+BAAoB,EAAE,CAAA;IAC5C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;AACjC,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transport layer re-exports.
|
|
3
|
+
*
|
|
4
|
+
* - stdio: for single-client mode (used internally by MCP)
|
|
5
|
+
* - http: for multi-client daemon mode (vess daemon start)
|
|
6
|
+
*/
|
|
7
|
+
export { connectStdioTransport } from './stdio-transport';
|
|
8
|
+
export { startHttpTransport } from './http-transport';
|
|
9
|
+
export type { HttpTransportHandle } from './http-transport';
|
|
10
|
+
//# sourceMappingURL=transport.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../../src/adapter/mcp/transport.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAA;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AACrD,YAAY,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.startHttpTransport = exports.connectStdioTransport = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Transport layer re-exports.
|
|
6
|
+
*
|
|
7
|
+
* - stdio: for single-client mode (used internally by MCP)
|
|
8
|
+
* - http: for multi-client daemon mode (vess daemon start)
|
|
9
|
+
*/
|
|
10
|
+
var stdio_transport_1 = require("./stdio-transport");
|
|
11
|
+
Object.defineProperty(exports, "connectStdioTransport", { enumerable: true, get: function () { return stdio_transport_1.connectStdioTransport; } });
|
|
12
|
+
var http_transport_1 = require("./http-transport");
|
|
13
|
+
Object.defineProperty(exports, "startHttpTransport", { enumerable: true, get: function () { return http_transport_1.startHttpTransport; } });
|
|
14
|
+
//# sourceMappingURL=transport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../../../src/adapter/mcp/transport.ts"],"names":[],"mappings":";;;AAAA;;;;;GAKG;AACH,qDAAyD;AAAhD,wHAAA,qBAAqB,OAAA;AAC9B,mDAAqD;AAA5C,oHAAA,kBAAkB,OAAA"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
interface GenerateParams {
|
|
2
|
+
action: string;
|
|
3
|
+
scope: string;
|
|
4
|
+
resource?: string;
|
|
5
|
+
context: 'new_approval' | 'reconfirmation';
|
|
6
|
+
}
|
|
7
|
+
interface VerifyResult {
|
|
8
|
+
valid: boolean;
|
|
9
|
+
nonce?: string;
|
|
10
|
+
context?: 'new_approval' | 'reconfirmation';
|
|
11
|
+
error?: string;
|
|
12
|
+
}
|
|
13
|
+
export declare class ApprovalTokenService {
|
|
14
|
+
private static readonly MAX_NONCES;
|
|
15
|
+
private readonly secret;
|
|
16
|
+
private readonly ttlSeconds;
|
|
17
|
+
private readonly usedNonces;
|
|
18
|
+
constructor(ttlSeconds?: number);
|
|
19
|
+
generate(params: GenerateParams): string;
|
|
20
|
+
verify(token: string, expectedAction: string, expectedResource?: string): VerifyResult;
|
|
21
|
+
}
|
|
22
|
+
export {};
|
|
23
|
+
//# sourceMappingURL=approval-token.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approval-token.d.ts","sourceRoot":"","sources":["../../src/approval/approval-token.ts"],"names":[],"mappings":"AAEA,UAAU,cAAc;IACtB,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,cAAc,GAAG,gBAAgB,CAAA;CAC3C;AAED,UAAU,YAAY;IACpB,KAAK,EAAE,OAAO,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,cAAc,GAAG,gBAAgB,CAAA;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAID,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAS;IAE3C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;IAC/B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAQ;IACnC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA4B;gBAE3C,UAAU,GAAE,MAA4B;IAKpD,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM;IAkBxC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,MAAM,GAAG,YAAY;CAyDvF"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ApprovalTokenService = void 0;
|
|
4
|
+
const crypto_1 = require("crypto");
|
|
5
|
+
const DEFAULT_TTL_SECONDS = 300;
|
|
6
|
+
class ApprovalTokenService {
|
|
7
|
+
static MAX_NONCES = 10_000;
|
|
8
|
+
secret;
|
|
9
|
+
ttlSeconds;
|
|
10
|
+
usedNonces = new Map();
|
|
11
|
+
constructor(ttlSeconds = DEFAULT_TTL_SECONDS) {
|
|
12
|
+
this.secret = (0, crypto_1.randomBytes)(32);
|
|
13
|
+
this.ttlSeconds = ttlSeconds;
|
|
14
|
+
}
|
|
15
|
+
generate(params) {
|
|
16
|
+
const now = Math.floor(Date.now() / 1000);
|
|
17
|
+
const payload = {
|
|
18
|
+
v: 1,
|
|
19
|
+
action: params.action,
|
|
20
|
+
scope: params.scope,
|
|
21
|
+
resource: params.resource,
|
|
22
|
+
nonce: (0, crypto_1.randomUUID)(),
|
|
23
|
+
iat: now,
|
|
24
|
+
exp: now + this.ttlSeconds,
|
|
25
|
+
ctx: params.context,
|
|
26
|
+
};
|
|
27
|
+
const payloadB64 = Buffer.from(JSON.stringify(payload)).toString('base64url');
|
|
28
|
+
const signature = (0, crypto_1.createHmac)('sha256', this.secret).update(payloadB64).digest('base64url');
|
|
29
|
+
return `${payloadB64}.${signature}`;
|
|
30
|
+
}
|
|
31
|
+
verify(token, expectedAction, expectedResource) {
|
|
32
|
+
const now = Date.now();
|
|
33
|
+
for (const [nonce, expiry] of this.usedNonces) {
|
|
34
|
+
if (expiry < now)
|
|
35
|
+
this.usedNonces.delete(nonce);
|
|
36
|
+
}
|
|
37
|
+
const parts = token.split('.');
|
|
38
|
+
if (parts.length !== 2) {
|
|
39
|
+
return { valid: false, error: 'Malformed token: expected payload.signature' };
|
|
40
|
+
}
|
|
41
|
+
const [payloadB64, signatureB64] = parts;
|
|
42
|
+
const expectedSig = (0, crypto_1.createHmac)('sha256', this.secret).update(payloadB64).digest('base64url');
|
|
43
|
+
const expectedBuf = Buffer.from(expectedSig);
|
|
44
|
+
const actualBuf = Buffer.from(signatureB64);
|
|
45
|
+
if (expectedBuf.length !== actualBuf.length || !(0, crypto_1.timingSafeEqual)(expectedBuf, actualBuf)) {
|
|
46
|
+
return { valid: false, error: 'Invalid token signature' };
|
|
47
|
+
}
|
|
48
|
+
let payload;
|
|
49
|
+
try {
|
|
50
|
+
payload = JSON.parse(Buffer.from(payloadB64, 'base64url').toString());
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
return { valid: false, error: 'Invalid token payload' };
|
|
54
|
+
}
|
|
55
|
+
const nowSec = Math.floor(Date.now() / 1000);
|
|
56
|
+
if (payload.exp <= nowSec) {
|
|
57
|
+
return { valid: false, error: 'Token expired' };
|
|
58
|
+
}
|
|
59
|
+
if (payload.action !== expectedAction) {
|
|
60
|
+
return { valid: false, error: `Token action mismatch: expected ${expectedAction}, got ${payload.action}` };
|
|
61
|
+
}
|
|
62
|
+
// Check resource binding
|
|
63
|
+
if (expectedResource !== undefined && payload.resource !== expectedResource) {
|
|
64
|
+
return { valid: false, error: `Token resource mismatch: expected ${expectedResource}, got ${payload.resource}` };
|
|
65
|
+
}
|
|
66
|
+
if (this.usedNonces.has(payload.nonce)) {
|
|
67
|
+
return { valid: false, error: 'Token nonce already used (replay detected)' };
|
|
68
|
+
}
|
|
69
|
+
if (this.usedNonces.size >= ApprovalTokenService.MAX_NONCES) {
|
|
70
|
+
return { valid: false, error: 'Nonce store capacity exceeded — try again shortly' };
|
|
71
|
+
}
|
|
72
|
+
this.usedNonces.set(payload.nonce, payload.exp * 1000);
|
|
73
|
+
return {
|
|
74
|
+
valid: true,
|
|
75
|
+
nonce: payload.nonce,
|
|
76
|
+
context: payload.ctx,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
exports.ApprovalTokenService = ApprovalTokenService;
|
|
81
|
+
//# sourceMappingURL=approval-token.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approval-token.js","sourceRoot":"","sources":["../../src/approval/approval-token.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { AuditEntry } from './audit-logger';
|
|
2
|
+
/**
|
|
3
|
+
* Event type constants matching API's AuditEventType enum.
|
|
4
|
+
* Defined locally to avoid cross-package dependency.
|
|
5
|
+
* @see packages/api/src/audit/entities/audit-event.entity.ts
|
|
6
|
+
*/
|
|
7
|
+
export declare const AUDIT_EVENT_TYPE: {
|
|
8
|
+
readonly TOOL_INVOCATION: "tool_invocation";
|
|
9
|
+
readonly GATEWAY_EXECUTE: "gateway_execute";
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Severity constants matching API's AuditEventSeverity enum.
|
|
13
|
+
*/
|
|
14
|
+
export declare const AUDIT_SEVERITY: {
|
|
15
|
+
readonly LOW: "low";
|
|
16
|
+
readonly MEDIUM: "medium";
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Transform agentd's AuditEntry into the API's CreateAuditEventDto format.
|
|
20
|
+
*
|
|
21
|
+
* Key mappings:
|
|
22
|
+
* - enforcementType/decisionSource → metadata (agentd-specific context)
|
|
23
|
+
* - agentDid → namespace (required by API DTO)
|
|
24
|
+
* - (derived) → eventType (TOOL_INVOCATION for agentd events)
|
|
25
|
+
*/
|
|
26
|
+
export declare function auditEntryToApiDto(e: AuditEntry & {
|
|
27
|
+
id: string;
|
|
28
|
+
}): Record<string, unknown>;
|
|
29
|
+
//# sourceMappingURL=audit-dto-mapper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-dto-mapper.d.ts","sourceRoot":"","sources":["../../src/audit/audit-dto-mapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAE3C;;;;GAIG;AACH,eAAO,MAAM,gBAAgB;;;CAGnB,CAAA;AAEV;;GAEG;AACH,eAAO,MAAM,cAAc;;;CAGjB,CAAA;AAEV;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,UAAU,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAkC1F"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AUDIT_SEVERITY = exports.AUDIT_EVENT_TYPE = void 0;
|
|
4
|
+
exports.auditEntryToApiDto = auditEntryToApiDto;
|
|
5
|
+
/**
|
|
6
|
+
* Event type constants matching API's AuditEventType enum.
|
|
7
|
+
* Defined locally to avoid cross-package dependency.
|
|
8
|
+
* @see packages/api/src/audit/entities/audit-event.entity.ts
|
|
9
|
+
*/
|
|
10
|
+
exports.AUDIT_EVENT_TYPE = {
|
|
11
|
+
TOOL_INVOCATION: 'tool_invocation',
|
|
12
|
+
GATEWAY_EXECUTE: 'gateway_execute',
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Severity constants matching API's AuditEventSeverity enum.
|
|
16
|
+
*/
|
|
17
|
+
exports.AUDIT_SEVERITY = {
|
|
18
|
+
LOW: 'low',
|
|
19
|
+
MEDIUM: 'medium',
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Transform agentd's AuditEntry into the API's CreateAuditEventDto format.
|
|
23
|
+
*
|
|
24
|
+
* Key mappings:
|
|
25
|
+
* - enforcementType/decisionSource → metadata (agentd-specific context)
|
|
26
|
+
* - agentDid → namespace (required by API DTO)
|
|
27
|
+
* - (derived) → eventType (TOOL_INVOCATION for agentd events)
|
|
28
|
+
*/
|
|
29
|
+
function auditEntryToApiDto(e) {
|
|
30
|
+
if (!e.agentDid) {
|
|
31
|
+
console.warn(`[AuditSync] Audit event missing agentDid, using fallback namespace: action=${e.action}`);
|
|
32
|
+
}
|
|
33
|
+
return {
|
|
34
|
+
eventType: exports.AUDIT_EVENT_TYPE.TOOL_INVOCATION,
|
|
35
|
+
namespace: e.agentDid || e.rootDid || 'unknown',
|
|
36
|
+
action: e.action,
|
|
37
|
+
decision: e.decision,
|
|
38
|
+
severity: e.decision === 'deny' ? exports.AUDIT_SEVERITY.MEDIUM : exports.AUDIT_SEVERITY.LOW,
|
|
39
|
+
agentDid: e.agentDid,
|
|
40
|
+
ownerDid: e.rootDid,
|
|
41
|
+
projectId: e.projectId,
|
|
42
|
+
provider: e.provider,
|
|
43
|
+
executionType: e.executionType,
|
|
44
|
+
reason: e.decisionReason,
|
|
45
|
+
correlationId: e.id,
|
|
46
|
+
credentialIds: e.credentialId ? [e.credentialId] : undefined,
|
|
47
|
+
resource: e.normalizedResource || e.requestedResource,
|
|
48
|
+
resourceType: e.provider ? `${e.provider}:*` : undefined,
|
|
49
|
+
metadata: Object.fromEntries(Object.entries({
|
|
50
|
+
enforcementType: e.enforcementType,
|
|
51
|
+
decisionSource: e.decisionSource,
|
|
52
|
+
grantId: e.grantId,
|
|
53
|
+
approvalMode: e.approvalMode,
|
|
54
|
+
approvalNonce: e.approvalNonce,
|
|
55
|
+
resourceFingerprint: e.resourceFingerprint,
|
|
56
|
+
presenterDid: e.presenterDid,
|
|
57
|
+
...(e.metadata || {}),
|
|
58
|
+
}).filter(([, v]) => v !== undefined)),
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=audit-dto-mapper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-dto-mapper.js","sourceRoot":"","sources":["../../src/audit/audit-dto-mapper.ts"],"names":[],"mappings":";;;AA4BA,gDAkCC;AA5DD;;;;GAIG;AACU,QAAA,gBAAgB,GAAG;IAC9B,eAAe,EAAE,iBAAiB;IAClC,eAAe,EAAE,iBAAiB;CAC1B,CAAA;AAEV;;GAEG;AACU,QAAA,cAAc,GAAG;IAC5B,GAAG,EAAE,KAAK;IACV,MAAM,EAAE,QAAQ;CACR,CAAA;AAEV;;;;;;;GAOG;AACH,SAAgB,kBAAkB,CAAC,CAA8B;IAC/D,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;QAChB,OAAO,CAAC,IAAI,CAAC,8EAA8E,CAAC,CAAC,MAAM,EAAE,CAAC,CAAA;IACxG,CAAC;IAED,OAAO;QACL,SAAS,EAAE,wBAAgB,CAAC,eAAe;QAC3C,SAAS,EAAE,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,OAAO,IAAI,SAAS;QAC/C,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,QAAQ,EAAE,CAAC,CAAC,QAAQ;QACpB,QAAQ,EAAE,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,sBAAc,CAAC,MAAM,CAAC,CAAC,CAAC,sBAAc,CAAC,GAAG;QAC5E,QAAQ,EAAE,CAAC,CAAC,QAAQ;QACpB,QAAQ,EAAE,CAAC,CAAC,OAAO;QACnB,SAAS,EAAE,CAAC,CAAC,SAAS;QACtB,QAAQ,EAAE,CAAC,CAAC,QAAQ;QACpB,aAAa,EAAE,CAAC,CAAC,aAAa;QAC9B,MAAM,EAAE,CAAC,CAAC,cAAc;QACxB,aAAa,EAAE,CAAC,CAAC,EAAE;QACnB,aAAa,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS;QAC5D,QAAQ,EAAE,CAAC,CAAC,kBAAkB,IAAI,CAAC,CAAC,iBAAiB;QACrD,YAAY,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,SAAS;QACxD,QAAQ,EAAE,MAAM,CAAC,WAAW,CAC1B,MAAM,CAAC,OAAO,CAAC;YACb,eAAe,EAAE,CAAC,CAAC,eAAe;YAClC,cAAc,EAAE,CAAC,CAAC,cAAc;YAChC,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,YAAY,EAAE,CAAC,CAAC,YAAY;YAC5B,aAAa,EAAE,CAAC,CAAC,aAAa;YAC9B,mBAAmB,EAAE,CAAC,CAAC,mBAAmB;YAC1C,YAAY,EAAE,CAAC,CAAC,YAAY;YAC5B,GAAG,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC;SACtB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,CACtC;KACF,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import Database from 'better-sqlite3';
|
|
2
|
+
export interface AuditEntry {
|
|
3
|
+
id?: string;
|
|
4
|
+
timestamp?: number;
|
|
5
|
+
projectId?: string;
|
|
6
|
+
rootDid?: string;
|
|
7
|
+
agentDid?: string;
|
|
8
|
+
presenterDid?: string;
|
|
9
|
+
action: string;
|
|
10
|
+
provider?: string;
|
|
11
|
+
enforcementType?: 'local' | 'gateway_verified_local' | 'cached_verified_local' | 'gateway';
|
|
12
|
+
decisionSource?: 'local_policy' | 'org_policy' | 'cached_vc' | 'new_vc_from_quick_approve' | 'gateway_execution';
|
|
13
|
+
executionType: 'gateway' | 'local';
|
|
14
|
+
decision: 'allow' | 'deny';
|
|
15
|
+
decisionReason?: string;
|
|
16
|
+
requestedResource?: string;
|
|
17
|
+
normalizedResource?: string;
|
|
18
|
+
resourceFingerprint?: string;
|
|
19
|
+
grantId?: string;
|
|
20
|
+
credentialId?: string;
|
|
21
|
+
approvalMode?: 'one_time' | 'persistent';
|
|
22
|
+
approvalNonce?: string;
|
|
23
|
+
metadata?: Record<string, unknown>;
|
|
24
|
+
}
|
|
25
|
+
export declare class AuditLogger {
|
|
26
|
+
private readonly db;
|
|
27
|
+
constructor(db: Database.Database);
|
|
28
|
+
logEvent(entry: AuditEntry): string;
|
|
29
|
+
getPendingEvents(limit?: number): (AuditEntry & {
|
|
30
|
+
id: string;
|
|
31
|
+
})[];
|
|
32
|
+
markSynced(ids: string[]): void;
|
|
33
|
+
private rowToEntry;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=audit-logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-logger.d.ts","sourceRoot":"","sources":["../../src/audit/audit-logger.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAA;AAGrC,MAAM,WAAW,UAAU;IACzB,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,eAAe,CAAC,EAAE,OAAO,GAAG,wBAAwB,GAAG,uBAAuB,GAAG,SAAS,CAAA;IAC1F,cAAc,CAAC,EAAE,cAAc,GAAG,YAAY,GAAG,WAAW,GAAG,2BAA2B,GAAG,mBAAmB,CAAA;IAChH,aAAa,EAAE,SAAS,GAAG,OAAO,CAAA;IAClC,QAAQ,EAAE,OAAO,GAAG,MAAM,CAAA;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,YAAY,CAAC,EAAE,UAAU,GAAG,YAAY,CAAA;IACxC,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACnC;AAED,qBAAa,WAAW;IACV,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAAF,EAAE,EAAE,QAAQ,CAAC,QAAQ;IAElD,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM;IAwCnC,gBAAgB,CAAC,KAAK,GAAE,MAAY,GAAG,CAAC,UAAU,GAAG;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,EAAE;IAQtE,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI;IAW/B,OAAO,CAAC,UAAU;CAyBnB"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AuditLogger = void 0;
|
|
4
|
+
const crypto_1 = require("crypto");
|
|
5
|
+
class AuditLogger {
|
|
6
|
+
db;
|
|
7
|
+
constructor(db) {
|
|
8
|
+
this.db = db;
|
|
9
|
+
}
|
|
10
|
+
logEvent(entry) {
|
|
11
|
+
const id = entry.id || (0, crypto_1.randomUUID)();
|
|
12
|
+
const timestamp = entry.timestamp || Date.now();
|
|
13
|
+
this.db.prepare(`
|
|
14
|
+
INSERT INTO audit_log (
|
|
15
|
+
id, timestamp, project_id, root_did, agent_did, presenter_did,
|
|
16
|
+
action, provider, enforcement_type, decision_source,
|
|
17
|
+
execution_type, decision, decision_reason,
|
|
18
|
+
requested_resource, normalized_resource, resource_fingerprint,
|
|
19
|
+
grant_id, credential_id, approval_mode, approval_nonce,
|
|
20
|
+
metadata, synced_at
|
|
21
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
22
|
+
`).run(id, timestamp, entry.projectId ?? null, entry.rootDid ?? null, entry.agentDid ?? null, entry.presenterDid ?? null, entry.action, entry.provider ?? null, entry.enforcementType ?? null, entry.decisionSource ?? null, entry.executionType, entry.decision, entry.decisionReason ?? null, entry.requestedResource ?? null, entry.normalizedResource ?? null, entry.resourceFingerprint ?? null, entry.grantId ?? null, entry.credentialId ?? null, entry.approvalMode ?? null, entry.approvalNonce ?? null, entry.metadata ? JSON.stringify(entry.metadata) : null, null // synced_at = NULL (not yet synced)
|
|
23
|
+
);
|
|
24
|
+
return id;
|
|
25
|
+
}
|
|
26
|
+
getPendingEvents(limit = 100) {
|
|
27
|
+
const rows = this.db.prepare('SELECT * FROM audit_log WHERE synced_at IS NULL ORDER BY timestamp ASC LIMIT ?').all(limit);
|
|
28
|
+
return rows.map(r => this.rowToEntry(r));
|
|
29
|
+
}
|
|
30
|
+
markSynced(ids) {
|
|
31
|
+
const now = Date.now();
|
|
32
|
+
const stmt = this.db.prepare('UPDATE audit_log SET synced_at = ? WHERE id = ?');
|
|
33
|
+
const transaction = this.db.transaction((eventIds) => {
|
|
34
|
+
for (const id of eventIds) {
|
|
35
|
+
stmt.run(now, id);
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
transaction(ids);
|
|
39
|
+
}
|
|
40
|
+
rowToEntry(row) {
|
|
41
|
+
return {
|
|
42
|
+
id: row.id,
|
|
43
|
+
timestamp: row.timestamp,
|
|
44
|
+
projectId: row.project_id ?? undefined,
|
|
45
|
+
rootDid: row.root_did ?? undefined,
|
|
46
|
+
agentDid: row.agent_did ?? undefined,
|
|
47
|
+
presenterDid: row.presenter_did ?? undefined,
|
|
48
|
+
action: row.action,
|
|
49
|
+
provider: row.provider ?? undefined,
|
|
50
|
+
enforcementType: row.enforcement_type ?? undefined,
|
|
51
|
+
decisionSource: row.decision_source ?? undefined,
|
|
52
|
+
executionType: row.execution_type,
|
|
53
|
+
decision: row.decision,
|
|
54
|
+
decisionReason: row.decision_reason ?? undefined,
|
|
55
|
+
requestedResource: row.requested_resource ?? undefined,
|
|
56
|
+
normalizedResource: row.normalized_resource ?? undefined,
|
|
57
|
+
resourceFingerprint: row.resource_fingerprint ?? undefined,
|
|
58
|
+
grantId: row.grant_id ?? undefined,
|
|
59
|
+
credentialId: row.credential_id ?? undefined,
|
|
60
|
+
approvalMode: row.approval_mode ?? undefined,
|
|
61
|
+
approvalNonce: row.approval_nonce ?? undefined,
|
|
62
|
+
metadata: row.metadata ? JSON.parse(row.metadata) : undefined,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
exports.AuditLogger = AuditLogger;
|
|
67
|
+
//# sourceMappingURL=audit-logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-logger.js","sourceRoot":"","sources":["../../src/audit/audit-logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { AuditLogger } from './audit-logger';
|
|
2
|
+
export declare class AuditSync {
|
|
3
|
+
private readonly auditLogger;
|
|
4
|
+
private readonly gatewayUrl;
|
|
5
|
+
private readonly sessionToken;
|
|
6
|
+
constructor(auditLogger: AuditLogger, gatewayUrl: string, sessionToken: string);
|
|
7
|
+
syncPendingEvents(batchSize?: number): Promise<{
|
|
8
|
+
synced: number;
|
|
9
|
+
failed: number;
|
|
10
|
+
}>;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=audit-sync.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-sync.d.ts","sourceRoot":"","sources":["../../src/audit/audit-sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAY5C,qBAAa,SAAS;IAElB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,YAAY;gBAFZ,WAAW,EAAE,WAAW,EACxB,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM;IAGjC,iBAAiB,CAAC,SAAS,GAAE,MAAsC,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CA+CxH"}
|