@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.
Files changed (280) hide show
  1. package/LICENSE +64 -0
  2. package/README.md +223 -0
  3. package/bin/vess.js +2 -0
  4. package/dist/__mocks__/@napi-rs/keyring.d.ts +9 -0
  5. package/dist/__mocks__/@napi-rs/keyring.d.ts.map +1 -0
  6. package/dist/__mocks__/@napi-rs/keyring.js +33 -0
  7. package/dist/__mocks__/@napi-rs/keyring.js.map +1 -0
  8. package/dist/__mocks__/node-mac-auth.d.ts +8 -0
  9. package/dist/__mocks__/node-mac-auth.d.ts.map +1 -0
  10. package/dist/__mocks__/node-mac-auth.js +29 -0
  11. package/dist/__mocks__/node-mac-auth.js.map +1 -0
  12. package/dist/adapter/mcp/http-transport.d.ts +34 -0
  13. package/dist/adapter/mcp/http-transport.d.ts.map +1 -0
  14. package/dist/adapter/mcp/http-transport.js +158 -0
  15. package/dist/adapter/mcp/http-transport.js.map +1 -0
  16. package/dist/adapter/mcp/mcp-adapter.d.ts +37 -0
  17. package/dist/adapter/mcp/mcp-adapter.d.ts.map +1 -0
  18. package/dist/adapter/mcp/mcp-adapter.js +48 -0
  19. package/dist/adapter/mcp/mcp-adapter.js.map +1 -0
  20. package/dist/adapter/mcp/mcp-server.factory.d.ts +35 -0
  21. package/dist/adapter/mcp/mcp-server.factory.d.ts.map +1 -0
  22. package/dist/adapter/mcp/mcp-server.factory.js +114 -0
  23. package/dist/adapter/mcp/mcp-server.factory.js.map +1 -0
  24. package/dist/adapter/mcp/stdio-transport.d.ts +7 -0
  25. package/dist/adapter/mcp/stdio-transport.d.ts.map +1 -0
  26. package/dist/adapter/mcp/stdio-transport.js +13 -0
  27. package/dist/adapter/mcp/stdio-transport.js.map +1 -0
  28. package/dist/adapter/mcp/transport.d.ts +10 -0
  29. package/dist/adapter/mcp/transport.d.ts.map +1 -0
  30. package/dist/adapter/mcp/transport.js +14 -0
  31. package/dist/adapter/mcp/transport.js.map +1 -0
  32. package/dist/approval/approval-token.d.ts +23 -0
  33. package/dist/approval/approval-token.d.ts.map +1 -0
  34. package/dist/approval/approval-token.js +81 -0
  35. package/dist/approval/approval-token.js.map +1 -0
  36. package/dist/audit/audit-dto-mapper.d.ts +29 -0
  37. package/dist/audit/audit-dto-mapper.d.ts.map +1 -0
  38. package/dist/audit/audit-dto-mapper.js +61 -0
  39. package/dist/audit/audit-dto-mapper.js.map +1 -0
  40. package/dist/audit/audit-logger.d.ts +35 -0
  41. package/dist/audit/audit-logger.d.ts.map +1 -0
  42. package/dist/audit/audit-logger.js +67 -0
  43. package/dist/audit/audit-logger.js.map +1 -0
  44. package/dist/audit/audit-sync.d.ts +12 -0
  45. package/dist/audit/audit-sync.d.ts.map +1 -0
  46. package/dist/audit/audit-sync.js +65 -0
  47. package/dist/audit/audit-sync.js.map +1 -0
  48. package/dist/auth/user-authenticator.d.ts +51 -0
  49. package/dist/auth/user-authenticator.d.ts.map +1 -0
  50. package/dist/auth/user-authenticator.js +155 -0
  51. package/dist/auth/user-authenticator.js.map +1 -0
  52. package/dist/cli/cli-db.d.ts +12 -0
  53. package/dist/cli/cli-db.d.ts.map +1 -0
  54. package/dist/cli/cli-db.js +20 -0
  55. package/dist/cli/cli-db.js.map +1 -0
  56. package/dist/cli/cli-utils.d.ts +14 -0
  57. package/dist/cli/cli-utils.d.ts.map +1 -0
  58. package/dist/cli/cli-utils.js +57 -0
  59. package/dist/cli/cli-utils.js.map +1 -0
  60. package/dist/cli/daemon-utils.d.ts +30 -0
  61. package/dist/cli/daemon-utils.d.ts.map +1 -0
  62. package/dist/cli/daemon-utils.js +131 -0
  63. package/dist/cli/daemon-utils.js.map +1 -0
  64. package/dist/cli/daemon.d.ts +13 -0
  65. package/dist/cli/daemon.d.ts.map +1 -0
  66. package/dist/cli/daemon.js +207 -0
  67. package/dist/cli/daemon.js.map +1 -0
  68. package/dist/cli/doctor.d.ts +2 -0
  69. package/dist/cli/doctor.d.ts.map +1 -0
  70. package/dist/cli/doctor.js +135 -0
  71. package/dist/cli/doctor.js.map +1 -0
  72. package/dist/cli/env-delete.d.ts +6 -0
  73. package/dist/cli/env-delete.d.ts.map +1 -0
  74. package/dist/cli/env-delete.js +80 -0
  75. package/dist/cli/env-delete.js.map +1 -0
  76. package/dist/cli/env-list.d.ts +5 -0
  77. package/dist/cli/env-list.d.ts.map +1 -0
  78. package/dist/cli/env-list.js +42 -0
  79. package/dist/cli/env-list.js.map +1 -0
  80. package/dist/cli/env-post-integration.d.ts +21 -0
  81. package/dist/cli/env-post-integration.d.ts.map +1 -0
  82. package/dist/cli/env-post-integration.js +300 -0
  83. package/dist/cli/env-post-integration.js.map +1 -0
  84. package/dist/cli/env-restore.d.ts +15 -0
  85. package/dist/cli/env-restore.d.ts.map +1 -0
  86. package/dist/cli/env-restore.js +130 -0
  87. package/dist/cli/env-restore.js.map +1 -0
  88. package/dist/cli/env.d.ts +14 -0
  89. package/dist/cli/env.d.ts.map +1 -0
  90. package/dist/cli/env.js +182 -0
  91. package/dist/cli/env.js.map +1 -0
  92. package/dist/cli/error-handlers.d.ts +13 -0
  93. package/dist/cli/error-handlers.d.ts.map +1 -0
  94. package/dist/cli/error-handlers.js +32 -0
  95. package/dist/cli/error-handlers.js.map +1 -0
  96. package/dist/cli/hook-check-env.d.ts +12 -0
  97. package/dist/cli/hook-check-env.d.ts.map +1 -0
  98. package/dist/cli/hook-check-env.js +117 -0
  99. package/dist/cli/hook-check-env.js.map +1 -0
  100. package/dist/cli/index.d.ts +2 -0
  101. package/dist/cli/index.d.ts.map +1 -0
  102. package/dist/cli/index.js +294 -0
  103. package/dist/cli/index.js.map +1 -0
  104. package/dist/cli/init-guard.d.ts +13 -0
  105. package/dist/cli/init-guard.d.ts.map +1 -0
  106. package/dist/cli/init-guard.js +62 -0
  107. package/dist/cli/init-guard.js.map +1 -0
  108. package/dist/cli/init.d.ts +19 -0
  109. package/dist/cli/init.d.ts.map +1 -0
  110. package/dist/cli/init.js +440 -0
  111. package/dist/cli/init.js.map +1 -0
  112. package/dist/cli/install.d.ts +14 -0
  113. package/dist/cli/install.d.ts.map +1 -0
  114. package/dist/cli/install.js +186 -0
  115. package/dist/cli/install.js.map +1 -0
  116. package/dist/cli/login.d.ts +6 -0
  117. package/dist/cli/login.d.ts.map +1 -0
  118. package/dist/cli/login.js +76 -0
  119. package/dist/cli/login.js.map +1 -0
  120. package/dist/cli/logs.d.ts +32 -0
  121. package/dist/cli/logs.d.ts.map +1 -0
  122. package/dist/cli/logs.js +147 -0
  123. package/dist/cli/logs.js.map +1 -0
  124. package/dist/cli/project.d.ts +8 -0
  125. package/dist/cli/project.d.ts.map +1 -0
  126. package/dist/cli/project.js +102 -0
  127. package/dist/cli/project.js.map +1 -0
  128. package/dist/cli/reset.d.ts +8 -0
  129. package/dist/cli/reset.d.ts.map +1 -0
  130. package/dist/cli/reset.js +137 -0
  131. package/dist/cli/reset.js.map +1 -0
  132. package/dist/cli/run.d.ts +22 -0
  133. package/dist/cli/run.d.ts.map +1 -0
  134. package/dist/cli/run.js +103 -0
  135. package/dist/cli/run.js.map +1 -0
  136. package/dist/cli/start.d.ts +2 -0
  137. package/dist/cli/start.d.ts.map +1 -0
  138. package/dist/cli/start.js +29 -0
  139. package/dist/cli/start.js.map +1 -0
  140. package/dist/cli/status.d.ts +12 -0
  141. package/dist/cli/status.d.ts.map +1 -0
  142. package/dist/cli/status.js +131 -0
  143. package/dist/cli/status.js.map +1 -0
  144. package/dist/cli/uninstall.d.ts +8 -0
  145. package/dist/cli/uninstall.d.ts.map +1 -0
  146. package/dist/cli/uninstall.js +111 -0
  147. package/dist/cli/uninstall.js.map +1 -0
  148. package/dist/config/config.d.ts +10 -0
  149. package/dist/config/config.d.ts.map +1 -0
  150. package/dist/config/config.js +64 -0
  151. package/dist/config/config.js.map +1 -0
  152. package/dist/config/constants.d.ts +3 -0
  153. package/dist/config/constants.d.ts.map +1 -0
  154. package/dist/config/constants.js +6 -0
  155. package/dist/config/constants.js.map +1 -0
  156. package/dist/config/paths.d.ts +9 -0
  157. package/dist/config/paths.d.ts.map +1 -0
  158. package/dist/config/paths.js +58 -0
  159. package/dist/config/paths.js.map +1 -0
  160. package/dist/core/execution-engine.d.ts +119 -0
  161. package/dist/core/execution-engine.d.ts.map +1 -0
  162. package/dist/core/execution-engine.js +1291 -0
  163. package/dist/core/execution-engine.js.map +1 -0
  164. package/dist/core/runtime.d.ts +43 -0
  165. package/dist/core/runtime.d.ts.map +1 -0
  166. package/dist/core/runtime.js +143 -0
  167. package/dist/core/runtime.js.map +1 -0
  168. package/dist/core/sync-scheduler.d.ts +42 -0
  169. package/dist/core/sync-scheduler.d.ts.map +1 -0
  170. package/dist/core/sync-scheduler.js +131 -0
  171. package/dist/core/sync-scheduler.js.map +1 -0
  172. package/dist/core/types.d.ts +77 -0
  173. package/dist/core/types.d.ts.map +1 -0
  174. package/dist/core/types.js +7 -0
  175. package/dist/core/types.js.map +1 -0
  176. package/dist/daemon/service-manager.d.ts +68 -0
  177. package/dist/daemon/service-manager.d.ts.map +1 -0
  178. package/dist/daemon/service-manager.js +303 -0
  179. package/dist/daemon/service-manager.js.map +1 -0
  180. package/dist/env/env-classifier.d.ts +14 -0
  181. package/dist/env/env-classifier.d.ts.map +1 -0
  182. package/dist/env/env-classifier.js +94 -0
  183. package/dist/env/env-classifier.js.map +1 -0
  184. package/dist/env/env-parser.d.ts +13 -0
  185. package/dist/env/env-parser.d.ts.map +1 -0
  186. package/dist/env/env-parser.js +33 -0
  187. package/dist/env/env-parser.js.map +1 -0
  188. package/dist/env/env-profile-store.d.ts +15 -0
  189. package/dist/env/env-profile-store.d.ts.map +1 -0
  190. package/dist/env/env-profile-store.js +35 -0
  191. package/dist/env/env-profile-store.js.map +1 -0
  192. package/dist/env/env-reference.d.ts +10 -0
  193. package/dist/env/env-reference.d.ts.map +1 -0
  194. package/dist/env/env-reference.js +33 -0
  195. package/dist/env/env-reference.js.map +1 -0
  196. package/dist/env/env-resolver.d.ts +18 -0
  197. package/dist/env/env-resolver.d.ts.map +1 -0
  198. package/dist/env/env-resolver.js +48 -0
  199. package/dist/env/env-resolver.js.map +1 -0
  200. package/dist/env/fs-utils.d.ts +9 -0
  201. package/dist/env/fs-utils.d.ts.map +1 -0
  202. package/dist/env/fs-utils.js +59 -0
  203. package/dist/env/fs-utils.js.map +1 -0
  204. package/dist/env/secret-backend.d.ts +15 -0
  205. package/dist/env/secret-backend.d.ts.map +1 -0
  206. package/dist/env/secret-backend.js +24 -0
  207. package/dist/env/secret-backend.js.map +1 -0
  208. package/dist/executor/executor-registry.d.ts +22 -0
  209. package/dist/executor/executor-registry.d.ts.map +1 -0
  210. package/dist/executor/executor-registry.js +42 -0
  211. package/dist/executor/executor-registry.js.map +1 -0
  212. package/dist/executor/process-launcher.d.ts +26 -0
  213. package/dist/executor/process-launcher.d.ts.map +1 -0
  214. package/dist/executor/process-launcher.js +98 -0
  215. package/dist/executor/process-launcher.js.map +1 -0
  216. package/dist/executor/secret-file.d.ts +28 -0
  217. package/dist/executor/secret-file.d.ts.map +1 -0
  218. package/dist/executor/secret-file.js +127 -0
  219. package/dist/executor/secret-file.js.map +1 -0
  220. package/dist/gateway/auth.d.ts +26 -0
  221. package/dist/gateway/auth.d.ts.map +1 -0
  222. package/dist/gateway/auth.js +66 -0
  223. package/dist/gateway/auth.js.map +1 -0
  224. package/dist/gateway/gateway-client.d.ts +298 -0
  225. package/dist/gateway/gateway-client.d.ts.map +1 -0
  226. package/dist/gateway/gateway-client.js +501 -0
  227. package/dist/gateway/gateway-client.js.map +1 -0
  228. package/dist/identity/agent-identity.d.ts +29 -0
  229. package/dist/identity/agent-identity.d.ts.map +1 -0
  230. package/dist/identity/agent-identity.js +54 -0
  231. package/dist/identity/agent-identity.js.map +1 -0
  232. package/dist/identity/did-manager.d.ts +17 -0
  233. package/dist/identity/did-manager.d.ts.map +1 -0
  234. package/dist/identity/did-manager.js +29 -0
  235. package/dist/identity/did-manager.js.map +1 -0
  236. package/dist/identity/key-manager.d.ts +18 -0
  237. package/dist/identity/key-manager.d.ts.map +1 -0
  238. package/dist/identity/key-manager.js +101 -0
  239. package/dist/identity/key-manager.js.map +1 -0
  240. package/dist/identity/session-key.d.ts +13 -0
  241. package/dist/identity/session-key.d.ts.map +1 -0
  242. package/dist/identity/session-key.js +17 -0
  243. package/dist/identity/session-key.js.map +1 -0
  244. package/dist/policy/policy-evaluator.d.ts +63 -0
  245. package/dist/policy/policy-evaluator.d.ts.map +1 -0
  246. package/dist/policy/policy-evaluator.js +266 -0
  247. package/dist/policy/policy-evaluator.js.map +1 -0
  248. package/dist/policy/policy-loader.d.ts +10 -0
  249. package/dist/policy/policy-loader.d.ts.map +1 -0
  250. package/dist/policy/policy-loader.js +71 -0
  251. package/dist/policy/policy-loader.js.map +1 -0
  252. package/dist/policy/types.d.ts +21 -0
  253. package/dist/policy/types.d.ts.map +1 -0
  254. package/dist/policy/types.js +3 -0
  255. package/dist/policy/types.js.map +1 -0
  256. package/dist/utils/credential-errors.d.ts +3 -0
  257. package/dist/utils/credential-errors.d.ts.map +1 -0
  258. package/dist/utils/credential-errors.js +23 -0
  259. package/dist/utils/credential-errors.js.map +1 -0
  260. package/dist/utils/resource-canonicalizer.d.ts +19 -0
  261. package/dist/utils/resource-canonicalizer.d.ts.map +1 -0
  262. package/dist/utils/resource-canonicalizer.js +100 -0
  263. package/dist/utils/resource-canonicalizer.js.map +1 -0
  264. package/dist/utils/vc-utils.d.ts +23 -0
  265. package/dist/utils/vc-utils.d.ts.map +1 -0
  266. package/dist/utils/vc-utils.js +53 -0
  267. package/dist/utils/vc-utils.js.map +1 -0
  268. package/dist/wallet/sqlite.d.ts +4 -0
  269. package/dist/wallet/sqlite.d.ts.map +1 -0
  270. package/dist/wallet/sqlite.js +158 -0
  271. package/dist/wallet/sqlite.js.map +1 -0
  272. package/dist/wallet/vp-builder.d.ts +18 -0
  273. package/dist/wallet/vp-builder.d.ts.map +1 -0
  274. package/dist/wallet/vp-builder.js +46 -0
  275. package/dist/wallet/vp-builder.js.map +1 -0
  276. package/dist/wallet/wallet.d.ts +58 -0
  277. package/dist/wallet/wallet.d.ts.map +1 -0
  278. package/dist/wallet/wallet.js +170 -0
  279. package/dist/wallet/wallet.js.map +1 -0
  280. 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":"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"}
@@ -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"}