@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,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,18 @@
|
|
|
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
|
+
private envAccount;
|
|
14
|
+
storeEnvSecret(profile: string, key: string, value: string): void;
|
|
15
|
+
getEnvSecret(profile: string, key: string): string | null;
|
|
16
|
+
deleteEnvSecret(profile: string, key: string): void;
|
|
17
|
+
}
|
|
18
|
+
//# 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,CACX,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,GACpB,IAAI;IAKP,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;IAU1B,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,101 @@
|
|
|
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
|
+
// ── Env secret storage (vess://env/<profile>/<key>) ──
|
|
77
|
+
envAccount(profile, key) {
|
|
78
|
+
return `env.${profile}.${key}`;
|
|
79
|
+
}
|
|
80
|
+
storeEnvSecret(profile, key, value) {
|
|
81
|
+
this.createEntry(this.envAccount(profile, key)).setPassword(value);
|
|
82
|
+
}
|
|
83
|
+
getEnvSecret(profile, key) {
|
|
84
|
+
try {
|
|
85
|
+
return this.createEntry(this.envAccount(profile, key)).getPassword();
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
return null;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
deleteEnvSecret(profile, key) {
|
|
92
|
+
try {
|
|
93
|
+
this.createEntry(this.envAccount(profile, key)).deletePassword();
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
// Secret doesn't exist, ignore
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
exports.KeyManager = KeyManager;
|
|
101
|
+
//# 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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"policy-evaluator.js","sourceRoot":"","sources":["../../src/policy/policy-evaluator.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAwB;AAIxB;;;;;;;;;;;;;GAaG;AACH,MAAa,eAAe;IAEP;IACA;IAFnB,YACmB,WAAwB,EACxB,WAA6B,EAAE;QAD/B,gBAAW,GAAX,WAAW,CAAa;QACxB,aAAQ,GAAR,QAAQ,CAAuB;IAC/C,CAAC;IAEJ;;;;OAIG;IACH,QAAQ,CACN,QAAgB,EAChB,MAAc,EACd,QAA4B;QAE5B,kCAAkC;QAClC,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAA;QAClE,IAAI,CAAC,WAAW,CAAC,OAAO;YAAE,OAAO,WAAW,CAAA;QAE5C,gCAAgC;QAChC,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAA;QAC9D,IAAI,CAAC,SAAS,CAAC,OAAO;YAAE,OAAO,SAAS,CAAA;QAExC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;IAC1B,CAAC;IAED,aAAa,CACX,QAAgB,EAChB,MAAc,EACd,QAA4B;QAE5B,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAA;IAC/F,CAAC;IAED,WAAW,CACT,QAAgB,EAChB,MAAc,EACd,QAA4B;QAE5B,yDAAyD;QACzD,oDAAoD;QACpD,2EAA2E;QAC3E,0DAA0D;QAC1D,MAAM,aAAa,GAAsB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC/D,GAAG,CAAC;YACJ,MAAM,EAAG,CAAC,CAAC,MAA2B,IAAI,OAAO;SAClD,CAAC,CAAC,CAAA;QAEH,OAAO,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAA;IACpF,CAAC;IAEO,aAAa,CACnB,KAAwB,EACxB,QAAgB,EAChB,MAAc,EACd,QAA4B,EAC5B,MAAc;QAEd,0BAA0B;QAC1B,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CACxC,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,QAAQ,CAAC;YACpC,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC;YAChC,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,QAAQ,CAAC,CACrC,CAAA;QAED,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;QAC1B,CAAC;QAED,4CAA4C;QAC5C,gFAAgF;QAChF,MAAM,MAAM,GAAG,aAAa;aACzB,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;aACnE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,WAAW,CAAC,CAAA;QAEhD,iDAAiD;QACjD,MAAM,cAAc,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,CAAA;QAC5C,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,cAAc,CAAC,CAAA;QAErE,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,CAAA;QAC5D,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,aAAa,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,GAAG,EAAE;gBACrK,WAAW,EAAE,OAAO,CAAC,IAAI;aAC1B,CAAA;QACH,CAAC;QAED,wDAAwD;QACxD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;IAC1B,CAAC;IAED;;;;;;;;;OASG;IACK,kBAAkB,CAAC,IAAqB;QAC9C,IAAI,KAAK,GAAG,CAAC,CAAA;QAEb,uBAAuB;QACvB,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,KAAK,GAAG;YAAE,KAAK,IAAI,EAAE,CAAA;QAEvD,uBAAuB;QACvB,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,GAAG;gBAAE,KAAK,IAAI,EAAE,CAAA;YAC3C,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,KAAK,GAAG;gBAAE,KAAK,IAAI,EAAE,CAAA;iBACxD,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO;gBAAE,KAAK,IAAI,EAAE,CAAA;QAC7C,CAAC;QAED,qBAAqB;QACrB,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5C,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAA;YACrD,IAAI,CAAC,WAAW;gBAAE,KAAK,IAAI,EAAE,CAAA;QAC/B,CAAC;QAED,OAAO,KAAK,CAAA;IACd,CAAC;IAEO,eAAe,CAAC,IAAqB,EAAE,QAAgB;QAC7D,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,KAAK,GAAG;YAAE,OAAO,IAAI,CAAA;QACxD,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAA;IACnC,CAAC;IAEO,aAAa,CAAC,IAAqB,EAAE,MAAc;QACzD,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAA;QAC3D,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;YAC3B,IAAI,CAAC,KAAK,GAAG;gBAAE,OAAO,IAAI,CAAA;YAC1B,IAAI,CAAC,KAAK,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC7B,oDAAoD;YACpD,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBACrB,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;gBAC7B,OAAO,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,GAAG,CAAC,CAAA;YACxC,CAAC;YACD,OAAO,KAAK,CAAA;QACd,CAAC,CAAC,CAAA;IACJ,CAAC;IAEO,WAAW,CAAC,OAAe;QACjC,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,OAAO,KAAK,GAAG,EAAE,CAAC;YAChD,OAAO,EAAE,CAAC,OAAO,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QACxC,CAAC;QACD,OAAO,OAAO,CAAA;IAChB,CAAC;IAEO,eAAe,CAAC,IAAqB,EAAE,QAA4B;QACzE,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAA;QAC/B,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI;YAAE,OAAO,KAAK,CAAA;QAEpF,MAAM,mBAAmB,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;QACvG,MAAM,uBAAuB,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;QACjG,MAAM,kBAAkB,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;QAElF,mBAAmB;QACnB,IAAI,mBAAmB,IAAI,uBAAuB,EAAE,CAAC;YACnD,OAAO,IAAI,CAAC,SAAS,CAAC,mBAAmB,EAAE,uBAAuB,CAAC,CAAA;QACrE,CAAC;QAED,gFAAgF;QAChF,IAAI,mBAAmB,IAAI,kBAAkB,EAAE,CAAC;YAC9C,OAAO,IAAI,CAAC,SAAS,CAAC,mBAAmB,EAAE,kBAAkB,CAAC,CAAA;QAChE,CAAC;QAED,8EAA8E;QAC9E,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,OAAO,IAAI,CAAA;QAE5D,iBAAiB;QACjB,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;QACxF,IAAI,cAAc,IAAI,kBAAkB,EAAE,CAAC;YACzC,OAAO,cAAc,KAAK,kBAAkB,IAAI,cAAc,KAAK,GAAG,CAAA;QACxE,CAAC;QAED,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;;OAGG;IACH,WAAW,CAAC,IAAiE;QAC3E,4CAA4C;QAC5C,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAClC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;gBAAE,OAAM,CAAC,uCAAuC;QAC3E,CAAC;QAED,kEAAkE;QAClE,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CACzD,QAAQ,CAAC,MAAM,KAAK,MAAM;YAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC,OAAO,CAAC,MAAM;YAChD,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CACvD,CAAA;QACD,IAAI,WAAW;YAAE,OAAM;QAEvB,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC;YAC1B,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG;YAC/C,QAAQ,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE;YACvB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,MAAM,EAAE,MAAM;YACd,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC,CAAA;IACJ,CAAC;IAED;;;;;;OAMG;IACK,SAAS,CAAC,OAAe,EAAE,KAAa;QAC9C,wBAAwB;QACxB,IAAI,KAAK,GAAG,GAAG,CAAA;QACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;YACpB,IAAI,CAAC,KAAK,GAAG,IAAI,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;gBACxC,KAAK,IAAI,IAAI,CAAA;gBACb,CAAC,EAAE,CAAA,CAAC,gBAAgB;gBACpB,IAAI,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG;oBAAE,CAAC,EAAE,CAAA,CAAC,kBAAkB;YACpD,CAAC;iBAAM,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;gBACrB,KAAK,IAAI,OAAO,CAAA;YAClB,CAAC;iBAAM,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;gBACrB,KAAK,IAAI,GAAG,CAAA;YACd,CAAC;iBAAM,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;gBACrK,KAAK,IAAI,IAAI,GAAG,CAAC,CAAA;YACnB,CAAC;iBAAM,CAAC;gBACN,KAAK,IAAI,CAAC,CAAA;YACZ,CAAC;QACH,CAAC;QACD,KAAK,IAAI,GAAG,CAAA;QAEZ,IAAI,CAAC;YACH,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACtC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAA;QACd,CAAC;IACH,CAAC;CACF;AAlPD,0CAkPC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import Database from 'better-sqlite3';
|
|
2
|
+
import { LocalPolicy } from './types';
|
|
3
|
+
import { PermissionRule } from '@vess-id/ai-identity';
|
|
4
|
+
export declare function loadLocalPolicy(policyPath: string): LocalPolicy;
|
|
5
|
+
/**
|
|
6
|
+
* Load synced org policies from SQLite synced_policies table.
|
|
7
|
+
* Returns PermissionRule[] (org policies are allow-only, like VCs).
|
|
8
|
+
*/
|
|
9
|
+
export declare function loadOrgPolicies(db: Database.Database, projectId: string): PermissionRule[];
|
|
10
|
+
//# sourceMappingURL=policy-loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"policy-loader.d.ts","sourceRoot":"","sources":["../../src/policy/policy-loader.ts"],"names":[],"mappings":"AACA,OAAO,QAAQ,MAAM,gBAAgB,CAAA;AACrC,OAAO,EAAE,WAAW,EAAmB,MAAM,SAAS,CAAA;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAErD,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,WAAW,CAU/D;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,SAAS,EAAE,MAAM,GAChB,cAAc,EAAE,CAclB"}
|
|
@@ -0,0 +1,71 @@
|
|
|
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.loadLocalPolicy = loadLocalPolicy;
|
|
37
|
+
exports.loadOrgPolicies = loadOrgPolicies;
|
|
38
|
+
const fs = __importStar(require("fs"));
|
|
39
|
+
function loadLocalPolicy(policyPath) {
|
|
40
|
+
try {
|
|
41
|
+
if (!fs.existsSync(policyPath)) {
|
|
42
|
+
return { v: '1', rules: [] };
|
|
43
|
+
}
|
|
44
|
+
const raw = fs.readFileSync(policyPath, 'utf-8');
|
|
45
|
+
return JSON.parse(raw);
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
return { v: '1', rules: [] };
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Load synced org policies from SQLite synced_policies table.
|
|
53
|
+
* Returns PermissionRule[] (org policies are allow-only, like VCs).
|
|
54
|
+
*/
|
|
55
|
+
function loadOrgPolicies(db, projectId) {
|
|
56
|
+
try {
|
|
57
|
+
const row = db.prepare('SELECT policy_json FROM synced_policies WHERE project_id = ? ORDER BY synced_at DESC LIMIT 1').get(projectId);
|
|
58
|
+
if (!row)
|
|
59
|
+
return [];
|
|
60
|
+
const parsed = JSON.parse(row.policy_json);
|
|
61
|
+
if (Array.isArray(parsed))
|
|
62
|
+
return parsed;
|
|
63
|
+
if (parsed.rules && Array.isArray(parsed.rules))
|
|
64
|
+
return parsed.rules;
|
|
65
|
+
return [];
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
return [];
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=policy-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"policy-loader.js","sourceRoot":"","sources":["../../src/policy/policy-loader.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKA,0CAUC;AAMD,0CAiBC;AAtCD,uCAAwB;AAKxB,SAAgB,eAAe,CAAC,UAAkB;IAChD,IAAI,CAAC;QACH,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC/B,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,CAAA;QAC9B,CAAC;QACD,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;QAChD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAgB,CAAA;IACvC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,CAAA;IAC9B,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAgB,eAAe,CAC7B,EAAqB,EACrB,SAAiB;IAEjB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CACpB,8FAA8F,CAC/F,CAAC,GAAG,CAAC,SAAS,CAAwC,CAAA;QAEvD,IAAI,CAAC,GAAG;YAAE,OAAO,EAAE,CAAA;QACnB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;QAC1C,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;YAAE,OAAO,MAA0B,CAAA;QAC5D,IAAI,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;YAAE,OAAO,MAAM,CAAC,KAAyB,CAAA;QACxF,OAAO,EAAE,CAAA;IACX,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAA;IACX,CAAC;AACH,CAAC"}
|