@vess-id/vess 0.0.0-dev-20260902121045
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 +215 -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 +40 -0
- package/dist/adapter/mcp/http-transport.d.ts.map +1 -0
- package/dist/adapter/mcp/http-transport.js +228 -0
- package/dist/adapter/mcp/http-transport.js.map +1 -0
- package/dist/adapter/mcp/mcp-adapter.d.ts +43 -0
- package/dist/adapter/mcp/mcp-adapter.d.ts.map +1 -0
- package/dist/adapter/mcp/mcp-adapter.js +65 -0
- package/dist/adapter/mcp/mcp-adapter.js.map +1 -0
- package/dist/adapter/mcp/mcp-server.factory.d.ts +44 -0
- package/dist/adapter/mcp/mcp-server.factory.d.ts.map +1 -0
- package/dist/adapter/mcp/mcp-server.factory.js +311 -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/bootstrap/sdk-precheck.d.ts +9 -0
- package/dist/bootstrap/sdk-precheck.d.ts.map +1 -0
- package/dist/bootstrap/sdk-precheck.js +103 -0
- package/dist/bootstrap/sdk-precheck.js.map +1 -0
- package/dist/cli/claude-config-path.d.ts +17 -0
- package/dist/cli/claude-config-path.d.ts.map +1 -0
- package/dist/cli/claude-config-path.js +59 -0
- package/dist/cli/claude-config-path.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 +6 -0
- package/dist/cli/doctor.d.ts.map +1 -0
- package/dist/cli/doctor.js +136 -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/hook-session-project.d.ts +10 -0
- package/dist/cli/hook-session-project.d.ts.map +1 -0
- package/dist/cli/hook-session-project.js +206 -0
- package/dist/cli/hook-session-project.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 +361 -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 +183 -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/otel-headers.d.ts +12 -0
- package/dist/cli/otel-headers.d.ts.map +1 -0
- package/dist/cli/otel-headers.js +38 -0
- package/dist/cli/otel-headers.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/telemetry-setup.d.ts +27 -0
- package/dist/cli/telemetry-setup.d.ts.map +1 -0
- package/dist/cli/telemetry-setup.js +157 -0
- package/dist/cli/telemetry-setup.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 +110 -0
- package/dist/cli/uninstall.js.map +1 -0
- package/dist/cli/version.d.ts +2 -0
- package/dist/cli/version.d.ts.map +1 -0
- package/dist/cli/version.js +10 -0
- package/dist/cli/version.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 +11 -0
- package/dist/config/constants.d.ts.map +1 -0
- package/dist/config/constants.js +14 -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/config/version.d.ts +3 -0
- package/dist/config/version.d.ts.map +1 -0
- package/dist/config/version.js +80 -0
- package/dist/config/version.js.map +1 -0
- package/dist/core/execution-engine.d.ts +289 -0
- package/dist/core/execution-engine.d.ts.map +1 -0
- package/dist/core/execution-engine.js +1931 -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 +147 -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 +106 -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 +363 -0
- package/dist/gateway/gateway-client.d.ts.map +1 -0
- package/dist/gateway/gateway-client.js +611 -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 +21 -0
- package/dist/identity/key-manager.d.ts.map +1 -0
- package/dist/identity/key-manager.js +126 -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/telemetry/claude-settings.d.ts +67 -0
- package/dist/telemetry/claude-settings.d.ts.map +1 -0
- package/dist/telemetry/claude-settings.js +191 -0
- package/dist/telemetry/claude-settings.js.map +1 -0
- package/dist/telemetry/otel-headers.d.ts +27 -0
- package/dist/telemetry/otel-headers.d.ts.map +1 -0
- package/dist/telemetry/otel-headers.js +33 -0
- package/dist/telemetry/otel-headers.js.map +1 -0
- package/dist/telemetry/project-key.d.ts +12 -0
- package/dist/telemetry/project-key.d.ts.map +1 -0
- package/dist/telemetry/project-key.js +113 -0
- package/dist/telemetry/project-key.js.map +1 -0
- package/dist/utils/credential-errors.d.ts +73 -0
- package/dist/utils/credential-errors.d.ts.map +1 -0
- package/dist/utils/credential-errors.js +90 -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 +26 -0
- package/dist/wallet/vp-builder.d.ts.map +1 -0
- package/dist/wallet/vp-builder.js +55 -0
- package/dist/wallet/vp-builder.js.map +1 -0
- package/dist/wallet/wallet.d.ts +64 -0
- package/dist/wallet/wallet.d.ts.map +1 -0
- package/dist/wallet/wallet.js +179 -0
- package/dist/wallet/wallet.js.map +1 -0
- package/package.json +71 -0
- package/required-sdk-symbols.json +15 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-identity.d.ts","sourceRoot":"","sources":["../../src/identity/agent-identity.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,QAAQ,MAAM,gBAAgB,CAAA;AAErC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAG1C,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAA;IAChB,aAAa,EAAE,MAAM,CAAA;IACrB,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,qBAAa,qBAAqB;IAE9B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAFP,UAAU,EAAE,UAAU,EACtB,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,OAAO,EAAE,MAAM;IAGlC;;;;OAIG;IACG,oBAAoB,CACxB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,aAAa,CAAC;CA2C1B"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AgentIdentityResolver = void 0;
|
|
4
|
+
const crypto_1 = require("crypto");
|
|
5
|
+
const key_manager_1 = require("./key-manager");
|
|
6
|
+
const did_manager_1 = require("./did-manager");
|
|
7
|
+
class AgentIdentityResolver {
|
|
8
|
+
keyManager;
|
|
9
|
+
db;
|
|
10
|
+
rootDid;
|
|
11
|
+
constructor(keyManager, db, rootDid) {
|
|
12
|
+
this.keyManager = keyManager;
|
|
13
|
+
this.db = db;
|
|
14
|
+
this.rootDid = rootDid;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Get or create an Agent DID for the given project × client combination.
|
|
18
|
+
* If one already exists in SQLite (status=active), reuse it.
|
|
19
|
+
* Otherwise, generate a new Agent DID and store in Keychain + SQLite.
|
|
20
|
+
*/
|
|
21
|
+
async resolveAgentIdentity(projectId, clientName) {
|
|
22
|
+
// Check SQLite for existing agent key
|
|
23
|
+
const existing = this.db.prepare("SELECT did FROM keys WHERE project_id = ? AND client_name = ? AND key_type = 'agent' AND status = 'active'").get(projectId, clientName);
|
|
24
|
+
if (existing) {
|
|
25
|
+
// Load private key from Keychain
|
|
26
|
+
const privateKeyJwk = this.keyManager.getAgentKey(projectId, clientName);
|
|
27
|
+
if (privateKeyJwk) {
|
|
28
|
+
return {
|
|
29
|
+
agentDid: existing.did,
|
|
30
|
+
privateKeyJwk,
|
|
31
|
+
projectId,
|
|
32
|
+
clientName,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
// Key missing from Keychain but exists in DB — regenerate
|
|
36
|
+
}
|
|
37
|
+
// Generate new Agent DID
|
|
38
|
+
const { did: agentDid, privateKeyJwk, publicKeyJwk } = await did_manager_1.DIDManager.generateAgentDID();
|
|
39
|
+
// Store private key in OS Keychain
|
|
40
|
+
this.keyManager.storeAgentKey(projectId, clientName, privateKeyJwk);
|
|
41
|
+
// Store metadata in SQLite (no private key material)
|
|
42
|
+
const id = (0, crypto_1.randomUUID)();
|
|
43
|
+
const keychainRef = key_manager_1.KeyManager.getKeychainRef('agent', projectId, clientName);
|
|
44
|
+
this.db.prepare(`
|
|
45
|
+
INSERT OR REPLACE INTO keys (
|
|
46
|
+
id, did, key_type, public_key, keychain_ref, storage_type,
|
|
47
|
+
parent_did, project_id, client_name, status, created_at
|
|
48
|
+
) VALUES (?, ?, 'agent', ?, ?, 'keychain', ?, ?, ?, 'active', ?)
|
|
49
|
+
`).run(id, agentDid, JSON.stringify(publicKeyJwk), keychainRef, this.rootDid, projectId, clientName, Date.now());
|
|
50
|
+
return { agentDid, privateKeyJwk, projectId, clientName };
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
exports.AgentIdentityResolver = AgentIdentityResolver;
|
|
54
|
+
//# sourceMappingURL=agent-identity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-identity.js","sourceRoot":"","sources":["../../src/identity/agent-identity.ts"],"names":[],"mappings":";;;AASA,mCAAmC;AACnC,+CAA0C;AAC1C,+CAA0C;AAS1C,MAAa,qBAAqB;IAEb;IACA;IACA;IAHnB,YACmB,UAAsB,EACtB,EAAqB,EACrB,OAAe;QAFf,eAAU,GAAV,UAAU,CAAY;QACtB,OAAE,GAAF,EAAE,CAAmB;QACrB,YAAO,GAAP,OAAO,CAAQ;IAC/B,CAAC;IAEJ;;;;OAIG;IACH,KAAK,CAAC,oBAAoB,CACxB,SAAiB,EACjB,UAAkB;QAElB,sCAAsC;QACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAC9B,4GAA4G,CAC7G,CAAC,GAAG,CAAC,SAAS,EAAE,UAAU,CAAgC,CAAA;QAE3D,IAAI,QAAQ,EAAE,CAAC;YACb,iCAAiC;YACjC,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,SAAS,EAAE,UAAU,CAAC,CAAA;YACxE,IAAI,aAAa,EAAE,CAAC;gBAClB,OAAO;oBACL,QAAQ,EAAE,QAAQ,CAAC,GAAG;oBACtB,aAAa;oBACb,SAAS;oBACT,UAAU;iBACX,CAAA;YACH,CAAC;YACD,0DAA0D;QAC5D,CAAC;QAED,yBAAyB;QACzB,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,aAAa,EAAE,YAAY,EAAE,GAClD,MAAM,wBAAU,CAAC,gBAAgB,EAAE,CAAA;QAErC,mCAAmC;QACnC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,SAAS,EAAE,UAAU,EAAE,aAAa,CAAC,CAAA;QAEnE,qDAAqD;QACrD,MAAM,EAAE,GAAG,IAAA,mBAAU,GAAE,CAAA;QACvB,MAAM,WAAW,GAAG,wBAAU,CAAC,cAAc,CAAC,OAAO,EAAE,SAAS,EAAE,UAAU,CAAC,CAAA;QAE7E,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;KAKf,CAAC,CAAC,GAAG,CACJ,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE,WAAW,EACvD,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,CAChD,CAAA;QAED,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,CAAA;IAC3D,CAAC;CACF;AA1DD,sDA0DC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export interface DIDGenerationResult {
|
|
2
|
+
did: string;
|
|
3
|
+
privateKeyJwk: string;
|
|
4
|
+
publicKeyJwk: {
|
|
5
|
+
kty: string;
|
|
6
|
+
crv?: string;
|
|
7
|
+
x?: string;
|
|
8
|
+
y?: string;
|
|
9
|
+
alg?: string;
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
export declare class DIDManager {
|
|
13
|
+
static generateRootDID(): Promise<DIDGenerationResult>;
|
|
14
|
+
static generateAgentDID(): Promise<DIDGenerationResult>;
|
|
15
|
+
private static generateDID;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=did-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"did-manager.d.ts","sourceRoot":"","sources":["../../src/identity/did-manager.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE,MAAM,CAAA;IACX,aAAa,EAAE,MAAM,CAAA;IACrB,YAAY,EAAE;QACZ,GAAG,EAAE,MAAM,CAAA;QACX,GAAG,CAAC,EAAE,MAAM,CAAA;QACZ,CAAC,CAAC,EAAE,MAAM,CAAA;QACV,CAAC,CAAC,EAAE,MAAM,CAAA;QACV,GAAG,CAAC,EAAE,MAAM,CAAA;KACb,CAAA;CACF;AAED,qBAAa,UAAU;WACR,eAAe,IAAI,OAAO,CAAC,mBAAmB,CAAC;WAI/C,gBAAgB,IAAI,OAAO,CAAC,mBAAmB,CAAC;mBAIxC,WAAW;CAgBjC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DIDManager = void 0;
|
|
4
|
+
const ai_identity_1 = require("@vess-id/ai-identity");
|
|
5
|
+
class DIDManager {
|
|
6
|
+
static async generateRootDID() {
|
|
7
|
+
return DIDManager.generateDID();
|
|
8
|
+
}
|
|
9
|
+
static async generateAgentDID() {
|
|
10
|
+
return DIDManager.generateDID();
|
|
11
|
+
}
|
|
12
|
+
static async generateDID() {
|
|
13
|
+
const keyPair = await (0, ai_identity_1.generateKeyPair)();
|
|
14
|
+
const did = (0, ai_identity_1.createDidJwk)(keyPair.publicKey);
|
|
15
|
+
return {
|
|
16
|
+
did,
|
|
17
|
+
privateKeyJwk: JSON.stringify(keyPair.privateKey),
|
|
18
|
+
publicKeyJwk: {
|
|
19
|
+
kty: keyPair.publicKey.kty,
|
|
20
|
+
crv: keyPair.publicKey.crv,
|
|
21
|
+
x: keyPair.publicKey.x,
|
|
22
|
+
y: keyPair.publicKey.y,
|
|
23
|
+
alg: keyPair.publicKey.alg,
|
|
24
|
+
},
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
exports.DIDManager = DIDManager;
|
|
29
|
+
//# sourceMappingURL=did-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"did-manager.js","sourceRoot":"","sources":["../../src/identity/did-manager.ts"],"names":[],"mappings":";;;AAAA,sDAAoE;AAcpE,MAAa,UAAU;IACrB,MAAM,CAAC,KAAK,CAAC,eAAe;QAC1B,OAAO,UAAU,CAAC,WAAW,EAAE,CAAA;IACjC,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,gBAAgB;QAC3B,OAAO,UAAU,CAAC,WAAW,EAAE,CAAA;IACjC,CAAC;IAEO,MAAM,CAAC,KAAK,CAAC,WAAW;QAC9B,MAAM,OAAO,GAAG,MAAM,IAAA,6BAAe,GAAE,CAAA;QACvC,MAAM,GAAG,GAAG,IAAA,0BAAY,EAAC,OAAO,CAAC,SAAS,CAAC,CAAA;QAE3C,OAAO;YACL,GAAG;YACH,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC;YACjD,YAAY,EAAE;gBACZ,GAAG,EAAE,OAAO,CAAC,SAAS,CAAC,GAAI;gBAC3B,GAAG,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG;gBAC1B,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;gBACtB,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;gBACtB,GAAG,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG;aAC3B;SACF,CAAA;IACH,CAAC;CACF;AAzBD,gCAyBC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export declare class KeyManager {
|
|
2
|
+
static getKeychainRef(keyType: 'root' | 'agent', projectId?: string, clientName?: string): string;
|
|
3
|
+
private createEntry;
|
|
4
|
+
storeRootKey(privateKeyJwk: string): void;
|
|
5
|
+
getRootKey(): string | null;
|
|
6
|
+
deleteRootKey(): void;
|
|
7
|
+
storeAgentKey(projectId: string, clientName: string, privateKeyJwk: string): void;
|
|
8
|
+
getAgentKey(projectId: string, clientName: string): string | null;
|
|
9
|
+
deleteAgentKey(projectId: string, clientName: string): void;
|
|
10
|
+
storeSessionToken(token: string): void;
|
|
11
|
+
getSessionToken(): string | null;
|
|
12
|
+
deleteSessionToken(): void;
|
|
13
|
+
storeTelemetryApiKey(apiKey: string): void;
|
|
14
|
+
getTelemetryApiKey(): string | null;
|
|
15
|
+
deleteTelemetryApiKey(): void;
|
|
16
|
+
private envAccount;
|
|
17
|
+
storeEnvSecret(profile: string, key: string, value: string): void;
|
|
18
|
+
getEnvSecret(profile: string, key: string): string | null;
|
|
19
|
+
deleteEnvSecret(profile: string, key: string): void;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=key-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"key-manager.d.ts","sourceRoot":"","sources":["../../src/identity/key-manager.ts"],"names":[],"mappings":"AAIA,qBAAa,UAAU;IACrB,MAAM,CAAC,cAAc,CACnB,OAAO,EAAE,MAAM,GAAG,OAAO,EACzB,SAAS,CAAC,EAAE,MAAM,EAClB,UAAU,CAAC,EAAE,MAAM,GAClB,MAAM;IAOT,OAAO,CAAC,WAAW;IAInB,YAAY,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI;IAIzC,UAAU,IAAI,MAAM,GAAG,IAAI;IAQ3B,aAAa,IAAI,IAAI;IAQrB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI;IAKjF,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IASjE,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAS3D,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAItC,eAAe,IAAI,MAAM,GAAG,IAAI;IAQhC,kBAAkB,IAAI,IAAI;IAe1B,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI1C,kBAAkB,IAAI,MAAM,GAAG,IAAI;IAQnC,qBAAqB,IAAI,IAAI;IAU7B,OAAO,CAAC,UAAU;IAIlB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAIjE,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAQzD,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;CAOpD"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.KeyManager = void 0;
|
|
4
|
+
const keyring_1 = require("@napi-rs/keyring");
|
|
5
|
+
const SERVICE_NAME = 'com.vess';
|
|
6
|
+
class KeyManager {
|
|
7
|
+
static getKeychainRef(keyType, projectId, clientName) {
|
|
8
|
+
if (keyType === 'root') {
|
|
9
|
+
return `${SERVICE_NAME}.root-key`;
|
|
10
|
+
}
|
|
11
|
+
return `${SERVICE_NAME}.agent.${projectId}.${clientName}`;
|
|
12
|
+
}
|
|
13
|
+
createEntry(account) {
|
|
14
|
+
return new keyring_1.Entry(SERVICE_NAME, account);
|
|
15
|
+
}
|
|
16
|
+
storeRootKey(privateKeyJwk) {
|
|
17
|
+
this.createEntry('root-key').setPassword(privateKeyJwk);
|
|
18
|
+
}
|
|
19
|
+
getRootKey() {
|
|
20
|
+
try {
|
|
21
|
+
return this.createEntry('root-key').getPassword();
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
deleteRootKey() {
|
|
28
|
+
try {
|
|
29
|
+
this.createEntry('root-key').deletePassword();
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
// Key doesn't exist, ignore
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
storeAgentKey(projectId, clientName, privateKeyJwk) {
|
|
36
|
+
const account = `agent.${projectId}.${clientName}`;
|
|
37
|
+
this.createEntry(account).setPassword(privateKeyJwk);
|
|
38
|
+
}
|
|
39
|
+
getAgentKey(projectId, clientName) {
|
|
40
|
+
try {
|
|
41
|
+
const account = `agent.${projectId}.${clientName}`;
|
|
42
|
+
return this.createEntry(account).getPassword();
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
deleteAgentKey(projectId, clientName) {
|
|
49
|
+
try {
|
|
50
|
+
const account = `agent.${projectId}.${clientName}`;
|
|
51
|
+
this.createEntry(account).deletePassword();
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
// Key doesn't exist, ignore
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
storeSessionToken(token) {
|
|
58
|
+
this.createEntry('session-token').setPassword(token);
|
|
59
|
+
}
|
|
60
|
+
getSessionToken() {
|
|
61
|
+
try {
|
|
62
|
+
return this.createEntry('session-token').getPassword();
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
deleteSessionToken() {
|
|
69
|
+
try {
|
|
70
|
+
this.createEntry('session-token').deletePassword();
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
// Token doesn't exist, ignore
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
// ── Telemetry API key ──
|
|
77
|
+
//
|
|
78
|
+
// Coding agents export their telemetry straight to the aidentity API, so the
|
|
79
|
+
// key has to be readable by `vess otel-headers` on every export. Keeping it
|
|
80
|
+
// here rather than in each agent's settings file is the point: those files are
|
|
81
|
+
// plaintext and show up in the agents' own config dumps.
|
|
82
|
+
storeTelemetryApiKey(apiKey) {
|
|
83
|
+
this.createEntry('telemetry-api-key').setPassword(apiKey);
|
|
84
|
+
}
|
|
85
|
+
getTelemetryApiKey() {
|
|
86
|
+
try {
|
|
87
|
+
return this.createEntry('telemetry-api-key').getPassword();
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
return null;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
deleteTelemetryApiKey() {
|
|
94
|
+
try {
|
|
95
|
+
this.createEntry('telemetry-api-key').deletePassword();
|
|
96
|
+
}
|
|
97
|
+
catch {
|
|
98
|
+
// Key doesn't exist, ignore
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
// ── Env secret storage (vess://env/<profile>/<key>) ──
|
|
102
|
+
envAccount(profile, key) {
|
|
103
|
+
return `env.${profile}.${key}`;
|
|
104
|
+
}
|
|
105
|
+
storeEnvSecret(profile, key, value) {
|
|
106
|
+
this.createEntry(this.envAccount(profile, key)).setPassword(value);
|
|
107
|
+
}
|
|
108
|
+
getEnvSecret(profile, key) {
|
|
109
|
+
try {
|
|
110
|
+
return this.createEntry(this.envAccount(profile, key)).getPassword();
|
|
111
|
+
}
|
|
112
|
+
catch {
|
|
113
|
+
return null;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
deleteEnvSecret(profile, key) {
|
|
117
|
+
try {
|
|
118
|
+
this.createEntry(this.envAccount(profile, key)).deletePassword();
|
|
119
|
+
}
|
|
120
|
+
catch {
|
|
121
|
+
// Secret doesn't exist, ignore
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
exports.KeyManager = KeyManager;
|
|
126
|
+
//# sourceMappingURL=key-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"key-manager.js","sourceRoot":"","sources":["../../src/identity/key-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ephemeral session key generation.
|
|
3
|
+
* Future extension: delegation chain Root -> Agent -> Session.
|
|
4
|
+
* Not implemented in beta — this file is a placeholder.
|
|
5
|
+
*
|
|
6
|
+
* Future design (spec section 4.2):
|
|
7
|
+
* Root Key signs delegation VC from Agent DID to Session DID
|
|
8
|
+
* Session Key signs VP (KB-JWT)
|
|
9
|
+
* Gateway verifies VC chain (original VC + delegation VC)
|
|
10
|
+
*/
|
|
11
|
+
export declare class SessionKeyManager {
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=session-key.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-key.d.ts","sourceRoot":"","sources":["../../src/identity/session-key.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,qBAAa,iBAAiB;CAE7B"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SessionKeyManager = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Ephemeral session key generation.
|
|
6
|
+
* Future extension: delegation chain Root -> Agent -> Session.
|
|
7
|
+
* Not implemented in beta — this file is a placeholder.
|
|
8
|
+
*
|
|
9
|
+
* Future design (spec section 4.2):
|
|
10
|
+
* Root Key signs delegation VC from Agent DID to Session DID
|
|
11
|
+
* Session Key signs VP (KB-JWT)
|
|
12
|
+
* Gateway verifies VC chain (original VC + delegation VC)
|
|
13
|
+
*/
|
|
14
|
+
class SessionKeyManager {
|
|
15
|
+
}
|
|
16
|
+
exports.SessionKeyManager = SessionKeyManager;
|
|
17
|
+
//# sourceMappingURL=session-key.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-key.js","sourceRoot":"","sources":["../../src/identity/session-key.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;GASG;AACH,MAAa,iBAAiB;CAE7B;AAFD,8CAEC"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { PermissionRule, PermissionResource } from '@vess-id/ai-identity';
|
|
2
|
+
import { LocalPolicy, PolicyEvaluationResult, PolicySource } from './types';
|
|
3
|
+
/**
|
|
4
|
+
* Two-layer policy evaluator (spec §7.1, §7.3).
|
|
5
|
+
*
|
|
6
|
+
* Evaluation flow:
|
|
7
|
+
* 1. Local Policy evaluation → deny? block immediately
|
|
8
|
+
* 2. Org Policy evaluation (from synced cache) → deny? block immediately
|
|
9
|
+
* 3. Pass-through → continue to VC acquisition
|
|
10
|
+
*
|
|
11
|
+
* Semantics (spec §7.5):
|
|
12
|
+
* - deny > allow (deny always wins over allow)
|
|
13
|
+
* - more specific resource wins
|
|
14
|
+
* - explicit action > wildcard
|
|
15
|
+
* - local allow does NOT grant permission — only means "not blocked"
|
|
16
|
+
*/
|
|
17
|
+
export declare class PolicyEvaluator {
|
|
18
|
+
private readonly localPolicy;
|
|
19
|
+
private readonly orgRules;
|
|
20
|
+
constructor(localPolicy: LocalPolicy, orgRules?: PermissionRule[]);
|
|
21
|
+
/**
|
|
22
|
+
* Evaluate both local and org policies.
|
|
23
|
+
* Returns allowed=false if any deny rule matches.
|
|
24
|
+
* Returns allowed=true if no deny matches (pass-through, not a grant).
|
|
25
|
+
*/
|
|
26
|
+
evaluate(provider: string, action: string, resource: PermissionResource): PolicyEvaluationResult;
|
|
27
|
+
evaluateLocal(provider: string, action: string, resource: PermissionResource): PolicyEvaluationResult;
|
|
28
|
+
evaluateOrg(provider: string, action: string, resource: PermissionResource): PolicyEvaluationResult;
|
|
29
|
+
private evaluateRules;
|
|
30
|
+
/**
|
|
31
|
+
* Compute specificity score for a rule (spec §7.5).
|
|
32
|
+
* Higher = more specific.
|
|
33
|
+
*
|
|
34
|
+
* Scoring:
|
|
35
|
+
* - Specific provider (+10) vs wildcard provider (+0)
|
|
36
|
+
* - Specific resource type (+10) vs wildcard (+0)
|
|
37
|
+
* - Resource id (+20) > resource pattern (+10) > no constraint (+0)
|
|
38
|
+
* - Specific action (+10) vs wildcard action (+0)
|
|
39
|
+
*/
|
|
40
|
+
private computeSpecificity;
|
|
41
|
+
private matchesProvider;
|
|
42
|
+
private matchesAction;
|
|
43
|
+
private expandTilde;
|
|
44
|
+
private matchesResource;
|
|
45
|
+
/**
|
|
46
|
+
* Add a deny rule at runtime (e.g., from user's deny_persistent choice).
|
|
47
|
+
* For beta, this only adds to in-memory policy. Persistence to policy.yaml is β2+.
|
|
48
|
+
*/
|
|
49
|
+
addDenyRule(rule: {
|
|
50
|
+
actions: string[];
|
|
51
|
+
effect: 'deny';
|
|
52
|
+
source: PolicySource;
|
|
53
|
+
}): void;
|
|
54
|
+
/**
|
|
55
|
+
* Simple glob matching for resource patterns.
|
|
56
|
+
* Supports:
|
|
57
|
+
* - '*' matches any sequence of characters (except /)
|
|
58
|
+
* - '**' matches any sequence including /
|
|
59
|
+
* - '?' matches a single character
|
|
60
|
+
*/
|
|
61
|
+
private globMatch;
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=policy-evaluator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"policy-evaluator.d.ts","sourceRoot":"","sources":["../../src/policy/policy-evaluator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AACzE,OAAO,EAAE,WAAW,EAAmB,sBAAsB,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAE5F;;;;;;;;;;;;;GAaG;AACH,qBAAa,eAAe;IAExB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBADR,WAAW,EAAE,WAAW,EACxB,QAAQ,GAAE,cAAc,EAAO;IAGlD;;;;OAIG;IACH,QAAQ,CACN,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,kBAAkB,GAC3B,sBAAsB;IAYzB,aAAa,CACX,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,kBAAkB,GAC3B,sBAAsB;IAIzB,WAAW,CACT,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,kBAAkB,GAC3B,sBAAsB;IAazB,OAAO,CAAC,aAAa;IAyCrB;;;;;;;;;OASG;IACH,OAAO,CAAC,kBAAkB;IAsB1B,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,aAAa;IAcrB,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,eAAe;IA8BvB;;;OAGG;IACH,WAAW,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,EAAE,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,YAAY,CAAA;KAAE,GAAG,IAAI;IAuBpF;;;;;;OAMG;IACH,OAAO,CAAC,SAAS;CA2BlB"}
|
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.PolicyEvaluator = void 0;
|
|
37
|
+
const os = __importStar(require("os"));
|
|
38
|
+
/**
|
|
39
|
+
* Two-layer policy evaluator (spec §7.1, §7.3).
|
|
40
|
+
*
|
|
41
|
+
* Evaluation flow:
|
|
42
|
+
* 1. Local Policy evaluation → deny? block immediately
|
|
43
|
+
* 2. Org Policy evaluation (from synced cache) → deny? block immediately
|
|
44
|
+
* 3. Pass-through → continue to VC acquisition
|
|
45
|
+
*
|
|
46
|
+
* Semantics (spec §7.5):
|
|
47
|
+
* - deny > allow (deny always wins over allow)
|
|
48
|
+
* - more specific resource wins
|
|
49
|
+
* - explicit action > wildcard
|
|
50
|
+
* - local allow does NOT grant permission — only means "not blocked"
|
|
51
|
+
*/
|
|
52
|
+
class PolicyEvaluator {
|
|
53
|
+
localPolicy;
|
|
54
|
+
orgRules;
|
|
55
|
+
constructor(localPolicy, orgRules = []) {
|
|
56
|
+
this.localPolicy = localPolicy;
|
|
57
|
+
this.orgRules = orgRules;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Evaluate both local and org policies.
|
|
61
|
+
* Returns allowed=false if any deny rule matches.
|
|
62
|
+
* Returns allowed=true if no deny matches (pass-through, not a grant).
|
|
63
|
+
*/
|
|
64
|
+
evaluate(provider, action, resource) {
|
|
65
|
+
// Step 1: Local policy evaluation
|
|
66
|
+
const localResult = this.evaluateLocal(provider, action, resource);
|
|
67
|
+
if (!localResult.allowed)
|
|
68
|
+
return localResult;
|
|
69
|
+
// Step 2: Org policy evaluation
|
|
70
|
+
const orgResult = this.evaluateOrg(provider, action, resource);
|
|
71
|
+
if (!orgResult.allowed)
|
|
72
|
+
return orgResult;
|
|
73
|
+
return { allowed: true };
|
|
74
|
+
}
|
|
75
|
+
evaluateLocal(provider, action, resource) {
|
|
76
|
+
return this.evaluateRules(this.localPolicy.rules, provider, action, resource, 'local_policy');
|
|
77
|
+
}
|
|
78
|
+
evaluateOrg(provider, action, resource) {
|
|
79
|
+
// Org policies are PermissionRule (allow-only from VCs).
|
|
80
|
+
// Convert to LocalPolicyRule format for evaluation.
|
|
81
|
+
// Org deny is expressed via absence of allow — but for explicit deny rules
|
|
82
|
+
// synced from Gateway, we treat effect='deny' if present.
|
|
83
|
+
const orgLocalRules = this.orgRules.map(r => ({
|
|
84
|
+
...r,
|
|
85
|
+
effect: r.effect || 'allow',
|
|
86
|
+
}));
|
|
87
|
+
return this.evaluateRules(orgLocalRules, provider, action, resource, 'org_policy');
|
|
88
|
+
}
|
|
89
|
+
evaluateRules(rules, provider, action, resource, source) {
|
|
90
|
+
// Find all matching rules
|
|
91
|
+
const matchingRules = rules.filter(rule => this.matchesProvider(rule, provider) &&
|
|
92
|
+
this.matchesAction(rule, action) &&
|
|
93
|
+
this.matchesResource(rule, resource));
|
|
94
|
+
if (matchingRules.length === 0) {
|
|
95
|
+
return { allowed: true };
|
|
96
|
+
}
|
|
97
|
+
// Sort by specificity (most specific first)
|
|
98
|
+
// Then apply: deny > allow at equal specificity, but more specific wins overall
|
|
99
|
+
const sorted = matchingRules
|
|
100
|
+
.map(rule => ({ rule, specificity: this.computeSpecificity(rule) }))
|
|
101
|
+
.sort((a, b) => b.specificity - a.specificity);
|
|
102
|
+
// At the highest specificity level, deny > allow
|
|
103
|
+
const topSpecificity = sorted[0].specificity;
|
|
104
|
+
const topRules = sorted.filter(s => s.specificity === topSpecificity);
|
|
105
|
+
const topDeny = topRules.find(s => s.rule.effect === 'deny');
|
|
106
|
+
if (topDeny) {
|
|
107
|
+
return {
|
|
108
|
+
allowed: false,
|
|
109
|
+
reason: `Denied by ${source}: ${topDeny.rule.provider}.${topDeny.rule.actions?.join(',')} on ${topDeny.rule.resource?.pattern || topDeny.rule.resource?.type || '*'}`,
|
|
110
|
+
matchedRule: topDeny.rule,
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
// Only allow rules matched — pass-through (not a grant)
|
|
114
|
+
return { allowed: true };
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Compute specificity score for a rule (spec §7.5).
|
|
118
|
+
* Higher = more specific.
|
|
119
|
+
*
|
|
120
|
+
* Scoring:
|
|
121
|
+
* - Specific provider (+10) vs wildcard provider (+0)
|
|
122
|
+
* - Specific resource type (+10) vs wildcard (+0)
|
|
123
|
+
* - Resource id (+20) > resource pattern (+10) > no constraint (+0)
|
|
124
|
+
* - Specific action (+10) vs wildcard action (+0)
|
|
125
|
+
*/
|
|
126
|
+
computeSpecificity(rule) {
|
|
127
|
+
let score = 0;
|
|
128
|
+
// Provider specificity
|
|
129
|
+
if (rule.provider && rule.provider !== '*')
|
|
130
|
+
score += 10;
|
|
131
|
+
// Resource specificity
|
|
132
|
+
if (rule.resource) {
|
|
133
|
+
if (rule.resource.type !== '*')
|
|
134
|
+
score += 10;
|
|
135
|
+
if (rule.resource.id && rule.resource.id !== '*')
|
|
136
|
+
score += 20;
|
|
137
|
+
else if (rule.resource.pattern)
|
|
138
|
+
score += 10;
|
|
139
|
+
}
|
|
140
|
+
// Action specificity
|
|
141
|
+
if (rule.actions && rule.actions.length > 0) {
|
|
142
|
+
const hasWildcard = rule.actions.some(a => a === '*');
|
|
143
|
+
if (!hasWildcard)
|
|
144
|
+
score += 10;
|
|
145
|
+
}
|
|
146
|
+
return score;
|
|
147
|
+
}
|
|
148
|
+
matchesProvider(rule, provider) {
|
|
149
|
+
if (!rule.provider || rule.provider === '*')
|
|
150
|
+
return true;
|
|
151
|
+
return rule.provider === provider;
|
|
152
|
+
}
|
|
153
|
+
matchesAction(rule, action) {
|
|
154
|
+
if (!rule.actions || rule.actions.length === 0)
|
|
155
|
+
return true;
|
|
156
|
+
return rule.actions.some(a => {
|
|
157
|
+
if (a === '*')
|
|
158
|
+
return true;
|
|
159
|
+
if (a === action)
|
|
160
|
+
return true;
|
|
161
|
+
// Wildcard suffix: "secret.*" matches "secret.read"
|
|
162
|
+
if (a.endsWith('.*')) {
|
|
163
|
+
const prefix = a.slice(0, -2);
|
|
164
|
+
return action.startsWith(prefix + '.');
|
|
165
|
+
}
|
|
166
|
+
return false;
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
expandTilde(pattern) {
|
|
170
|
+
if (pattern.startsWith('~/') || pattern === '~') {
|
|
171
|
+
return os.homedir() + pattern.slice(1);
|
|
172
|
+
}
|
|
173
|
+
return pattern;
|
|
174
|
+
}
|
|
175
|
+
matchesResource(rule, resource) {
|
|
176
|
+
if (!rule.resource)
|
|
177
|
+
return true;
|
|
178
|
+
if (rule.resource.type !== '*' && rule.resource.type !== resource.type)
|
|
179
|
+
return false;
|
|
180
|
+
const expandedRulePattern = rule.resource.pattern ? this.expandTilde(rule.resource.pattern) : undefined;
|
|
181
|
+
const expandedResourcePattern = resource.pattern ? this.expandTilde(resource.pattern) : undefined;
|
|
182
|
+
const expandedResourceId = resource.id ? this.expandTilde(resource.id) : undefined;
|
|
183
|
+
// Pattern matching
|
|
184
|
+
if (expandedRulePattern && expandedResourcePattern) {
|
|
185
|
+
return this.globMatch(expandedRulePattern, expandedResourcePattern);
|
|
186
|
+
}
|
|
187
|
+
// If rule has a pattern but resource has an id, try matching id against pattern
|
|
188
|
+
if (expandedRulePattern && expandedResourceId) {
|
|
189
|
+
return this.globMatch(expandedRulePattern, expandedResourceId);
|
|
190
|
+
}
|
|
191
|
+
// If rule has no pattern/id constraint, it matches all resources of this type
|
|
192
|
+
if (!rule.resource.pattern && !rule.resource.id)
|
|
193
|
+
return true;
|
|
194
|
+
// Exact id match
|
|
195
|
+
const expandedRuleId = rule.resource.id ? this.expandTilde(rule.resource.id) : undefined;
|
|
196
|
+
if (expandedRuleId && expandedResourceId) {
|
|
197
|
+
return expandedRuleId === expandedResourceId || expandedRuleId === '*';
|
|
198
|
+
}
|
|
199
|
+
return true;
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Add a deny rule at runtime (e.g., from user's deny_persistent choice).
|
|
203
|
+
* For beta, this only adds to in-memory policy. Persistence to policy.yaml is β2+.
|
|
204
|
+
*/
|
|
205
|
+
addDenyRule(rule) {
|
|
206
|
+
// Validate: only allow known action formats
|
|
207
|
+
for (const action of rule.actions) {
|
|
208
|
+
if (!action.includes('.'))
|
|
209
|
+
return; // Invalid action format, skip silently
|
|
210
|
+
}
|
|
211
|
+
// Deduplicate: don't add if an identical deny rule already exists
|
|
212
|
+
const isDuplicate = this.localPolicy.rules.some(existing => existing.effect === 'deny' &&
|
|
213
|
+
existing.actions?.length === rule.actions.length &&
|
|
214
|
+
existing.actions?.every(a => rule.actions.includes(a)));
|
|
215
|
+
if (isDuplicate)
|
|
216
|
+
return;
|
|
217
|
+
this.localPolicy.rules.push({
|
|
218
|
+
provider: rule.actions[0]?.split('.')[0] || '*',
|
|
219
|
+
resource: { type: '*' },
|
|
220
|
+
actions: rule.actions,
|
|
221
|
+
effect: 'deny',
|
|
222
|
+
source: rule.source,
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Simple glob matching for resource patterns.
|
|
227
|
+
* Supports:
|
|
228
|
+
* - '*' matches any sequence of characters (except /)
|
|
229
|
+
* - '**' matches any sequence including /
|
|
230
|
+
* - '?' matches a single character
|
|
231
|
+
*/
|
|
232
|
+
globMatch(pattern, value) {
|
|
233
|
+
// Convert glob to regex
|
|
234
|
+
let regex = '^';
|
|
235
|
+
for (let i = 0; i < pattern.length; i++) {
|
|
236
|
+
const c = pattern[i];
|
|
237
|
+
if (c === '*' && pattern[i + 1] === '*') {
|
|
238
|
+
regex += '.*';
|
|
239
|
+
i++; // skip second *
|
|
240
|
+
if (pattern[i + 1] === '/')
|
|
241
|
+
i++; // skip trailing /
|
|
242
|
+
}
|
|
243
|
+
else if (c === '*') {
|
|
244
|
+
regex += '[^/]*';
|
|
245
|
+
}
|
|
246
|
+
else if (c === '?') {
|
|
247
|
+
regex += '.';
|
|
248
|
+
}
|
|
249
|
+
else if (c === '.' || c === '(' || c === ')' || c === '[' || c === ']' || c === '{' || c === '}' || c === '+' || c === '^' || c === '$' || c === '|' || c === '\\') {
|
|
250
|
+
regex += '\\' + c;
|
|
251
|
+
}
|
|
252
|
+
else {
|
|
253
|
+
regex += c;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
regex += '$';
|
|
257
|
+
try {
|
|
258
|
+
return new RegExp(regex).test(value);
|
|
259
|
+
}
|
|
260
|
+
catch {
|
|
261
|
+
return false;
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
exports.PolicyEvaluator = PolicyEvaluator;
|
|
266
|
+
//# sourceMappingURL=policy-evaluator.js.map
|