@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.
Files changed (321) hide show
  1. package/LICENSE +64 -0
  2. package/README.md +215 -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 +40 -0
  13. package/dist/adapter/mcp/http-transport.d.ts.map +1 -0
  14. package/dist/adapter/mcp/http-transport.js +228 -0
  15. package/dist/adapter/mcp/http-transport.js.map +1 -0
  16. package/dist/adapter/mcp/mcp-adapter.d.ts +43 -0
  17. package/dist/adapter/mcp/mcp-adapter.d.ts.map +1 -0
  18. package/dist/adapter/mcp/mcp-adapter.js +65 -0
  19. package/dist/adapter/mcp/mcp-adapter.js.map +1 -0
  20. package/dist/adapter/mcp/mcp-server.factory.d.ts +44 -0
  21. package/dist/adapter/mcp/mcp-server.factory.d.ts.map +1 -0
  22. package/dist/adapter/mcp/mcp-server.factory.js +311 -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/bootstrap/sdk-precheck.d.ts +9 -0
  53. package/dist/bootstrap/sdk-precheck.d.ts.map +1 -0
  54. package/dist/bootstrap/sdk-precheck.js +103 -0
  55. package/dist/bootstrap/sdk-precheck.js.map +1 -0
  56. package/dist/cli/claude-config-path.d.ts +17 -0
  57. package/dist/cli/claude-config-path.d.ts.map +1 -0
  58. package/dist/cli/claude-config-path.js +59 -0
  59. package/dist/cli/claude-config-path.js.map +1 -0
  60. package/dist/cli/cli-db.d.ts +12 -0
  61. package/dist/cli/cli-db.d.ts.map +1 -0
  62. package/dist/cli/cli-db.js +20 -0
  63. package/dist/cli/cli-db.js.map +1 -0
  64. package/dist/cli/cli-utils.d.ts +14 -0
  65. package/dist/cli/cli-utils.d.ts.map +1 -0
  66. package/dist/cli/cli-utils.js +57 -0
  67. package/dist/cli/cli-utils.js.map +1 -0
  68. package/dist/cli/daemon-utils.d.ts +30 -0
  69. package/dist/cli/daemon-utils.d.ts.map +1 -0
  70. package/dist/cli/daemon-utils.js +131 -0
  71. package/dist/cli/daemon-utils.js.map +1 -0
  72. package/dist/cli/daemon.d.ts +13 -0
  73. package/dist/cli/daemon.d.ts.map +1 -0
  74. package/dist/cli/daemon.js +207 -0
  75. package/dist/cli/daemon.js.map +1 -0
  76. package/dist/cli/doctor.d.ts +6 -0
  77. package/dist/cli/doctor.d.ts.map +1 -0
  78. package/dist/cli/doctor.js +136 -0
  79. package/dist/cli/doctor.js.map +1 -0
  80. package/dist/cli/env-delete.d.ts +6 -0
  81. package/dist/cli/env-delete.d.ts.map +1 -0
  82. package/dist/cli/env-delete.js +80 -0
  83. package/dist/cli/env-delete.js.map +1 -0
  84. package/dist/cli/env-list.d.ts +5 -0
  85. package/dist/cli/env-list.d.ts.map +1 -0
  86. package/dist/cli/env-list.js +42 -0
  87. package/dist/cli/env-list.js.map +1 -0
  88. package/dist/cli/env-post-integration.d.ts +21 -0
  89. package/dist/cli/env-post-integration.d.ts.map +1 -0
  90. package/dist/cli/env-post-integration.js +300 -0
  91. package/dist/cli/env-post-integration.js.map +1 -0
  92. package/dist/cli/env-restore.d.ts +15 -0
  93. package/dist/cli/env-restore.d.ts.map +1 -0
  94. package/dist/cli/env-restore.js +130 -0
  95. package/dist/cli/env-restore.js.map +1 -0
  96. package/dist/cli/env.d.ts +14 -0
  97. package/dist/cli/env.d.ts.map +1 -0
  98. package/dist/cli/env.js +182 -0
  99. package/dist/cli/env.js.map +1 -0
  100. package/dist/cli/error-handlers.d.ts +13 -0
  101. package/dist/cli/error-handlers.d.ts.map +1 -0
  102. package/dist/cli/error-handlers.js +32 -0
  103. package/dist/cli/error-handlers.js.map +1 -0
  104. package/dist/cli/hook-check-env.d.ts +12 -0
  105. package/dist/cli/hook-check-env.d.ts.map +1 -0
  106. package/dist/cli/hook-check-env.js +117 -0
  107. package/dist/cli/hook-check-env.js.map +1 -0
  108. package/dist/cli/hook-session-project.d.ts +10 -0
  109. package/dist/cli/hook-session-project.d.ts.map +1 -0
  110. package/dist/cli/hook-session-project.js +206 -0
  111. package/dist/cli/hook-session-project.js.map +1 -0
  112. package/dist/cli/index.d.ts +2 -0
  113. package/dist/cli/index.d.ts.map +1 -0
  114. package/dist/cli/index.js +361 -0
  115. package/dist/cli/index.js.map +1 -0
  116. package/dist/cli/init-guard.d.ts +13 -0
  117. package/dist/cli/init-guard.d.ts.map +1 -0
  118. package/dist/cli/init-guard.js +62 -0
  119. package/dist/cli/init-guard.js.map +1 -0
  120. package/dist/cli/init.d.ts +19 -0
  121. package/dist/cli/init.d.ts.map +1 -0
  122. package/dist/cli/init.js +440 -0
  123. package/dist/cli/init.js.map +1 -0
  124. package/dist/cli/install.d.ts +14 -0
  125. package/dist/cli/install.d.ts.map +1 -0
  126. package/dist/cli/install.js +183 -0
  127. package/dist/cli/install.js.map +1 -0
  128. package/dist/cli/login.d.ts +6 -0
  129. package/dist/cli/login.d.ts.map +1 -0
  130. package/dist/cli/login.js +76 -0
  131. package/dist/cli/login.js.map +1 -0
  132. package/dist/cli/logs.d.ts +32 -0
  133. package/dist/cli/logs.d.ts.map +1 -0
  134. package/dist/cli/logs.js +147 -0
  135. package/dist/cli/logs.js.map +1 -0
  136. package/dist/cli/otel-headers.d.ts +12 -0
  137. package/dist/cli/otel-headers.d.ts.map +1 -0
  138. package/dist/cli/otel-headers.js +38 -0
  139. package/dist/cli/otel-headers.js.map +1 -0
  140. package/dist/cli/project.d.ts +8 -0
  141. package/dist/cli/project.d.ts.map +1 -0
  142. package/dist/cli/project.js +102 -0
  143. package/dist/cli/project.js.map +1 -0
  144. package/dist/cli/reset.d.ts +8 -0
  145. package/dist/cli/reset.d.ts.map +1 -0
  146. package/dist/cli/reset.js +137 -0
  147. package/dist/cli/reset.js.map +1 -0
  148. package/dist/cli/run.d.ts +22 -0
  149. package/dist/cli/run.d.ts.map +1 -0
  150. package/dist/cli/run.js +103 -0
  151. package/dist/cli/run.js.map +1 -0
  152. package/dist/cli/start.d.ts +2 -0
  153. package/dist/cli/start.d.ts.map +1 -0
  154. package/dist/cli/start.js +29 -0
  155. package/dist/cli/start.js.map +1 -0
  156. package/dist/cli/status.d.ts +12 -0
  157. package/dist/cli/status.d.ts.map +1 -0
  158. package/dist/cli/status.js +131 -0
  159. package/dist/cli/status.js.map +1 -0
  160. package/dist/cli/telemetry-setup.d.ts +27 -0
  161. package/dist/cli/telemetry-setup.d.ts.map +1 -0
  162. package/dist/cli/telemetry-setup.js +157 -0
  163. package/dist/cli/telemetry-setup.js.map +1 -0
  164. package/dist/cli/uninstall.d.ts +8 -0
  165. package/dist/cli/uninstall.d.ts.map +1 -0
  166. package/dist/cli/uninstall.js +110 -0
  167. package/dist/cli/uninstall.js.map +1 -0
  168. package/dist/cli/version.d.ts +2 -0
  169. package/dist/cli/version.d.ts.map +1 -0
  170. package/dist/cli/version.js +10 -0
  171. package/dist/cli/version.js.map +1 -0
  172. package/dist/config/config.d.ts +10 -0
  173. package/dist/config/config.d.ts.map +1 -0
  174. package/dist/config/config.js +64 -0
  175. package/dist/config/config.js.map +1 -0
  176. package/dist/config/constants.d.ts +11 -0
  177. package/dist/config/constants.d.ts.map +1 -0
  178. package/dist/config/constants.js +14 -0
  179. package/dist/config/constants.js.map +1 -0
  180. package/dist/config/paths.d.ts +9 -0
  181. package/dist/config/paths.d.ts.map +1 -0
  182. package/dist/config/paths.js +58 -0
  183. package/dist/config/paths.js.map +1 -0
  184. package/dist/config/version.d.ts +3 -0
  185. package/dist/config/version.d.ts.map +1 -0
  186. package/dist/config/version.js +80 -0
  187. package/dist/config/version.js.map +1 -0
  188. package/dist/core/execution-engine.d.ts +289 -0
  189. package/dist/core/execution-engine.d.ts.map +1 -0
  190. package/dist/core/execution-engine.js +1931 -0
  191. package/dist/core/execution-engine.js.map +1 -0
  192. package/dist/core/runtime.d.ts +43 -0
  193. package/dist/core/runtime.d.ts.map +1 -0
  194. package/dist/core/runtime.js +147 -0
  195. package/dist/core/runtime.js.map +1 -0
  196. package/dist/core/sync-scheduler.d.ts +42 -0
  197. package/dist/core/sync-scheduler.d.ts.map +1 -0
  198. package/dist/core/sync-scheduler.js +131 -0
  199. package/dist/core/sync-scheduler.js.map +1 -0
  200. package/dist/core/types.d.ts +106 -0
  201. package/dist/core/types.d.ts.map +1 -0
  202. package/dist/core/types.js +7 -0
  203. package/dist/core/types.js.map +1 -0
  204. package/dist/daemon/service-manager.d.ts +68 -0
  205. package/dist/daemon/service-manager.d.ts.map +1 -0
  206. package/dist/daemon/service-manager.js +303 -0
  207. package/dist/daemon/service-manager.js.map +1 -0
  208. package/dist/env/env-classifier.d.ts +14 -0
  209. package/dist/env/env-classifier.d.ts.map +1 -0
  210. package/dist/env/env-classifier.js +94 -0
  211. package/dist/env/env-classifier.js.map +1 -0
  212. package/dist/env/env-parser.d.ts +13 -0
  213. package/dist/env/env-parser.d.ts.map +1 -0
  214. package/dist/env/env-parser.js +33 -0
  215. package/dist/env/env-parser.js.map +1 -0
  216. package/dist/env/env-profile-store.d.ts +15 -0
  217. package/dist/env/env-profile-store.d.ts.map +1 -0
  218. package/dist/env/env-profile-store.js +35 -0
  219. package/dist/env/env-profile-store.js.map +1 -0
  220. package/dist/env/env-reference.d.ts +10 -0
  221. package/dist/env/env-reference.d.ts.map +1 -0
  222. package/dist/env/env-reference.js +33 -0
  223. package/dist/env/env-reference.js.map +1 -0
  224. package/dist/env/env-resolver.d.ts +18 -0
  225. package/dist/env/env-resolver.d.ts.map +1 -0
  226. package/dist/env/env-resolver.js +48 -0
  227. package/dist/env/env-resolver.js.map +1 -0
  228. package/dist/env/fs-utils.d.ts +9 -0
  229. package/dist/env/fs-utils.d.ts.map +1 -0
  230. package/dist/env/fs-utils.js +59 -0
  231. package/dist/env/fs-utils.js.map +1 -0
  232. package/dist/env/secret-backend.d.ts +15 -0
  233. package/dist/env/secret-backend.d.ts.map +1 -0
  234. package/dist/env/secret-backend.js +24 -0
  235. package/dist/env/secret-backend.js.map +1 -0
  236. package/dist/executor/executor-registry.d.ts +22 -0
  237. package/dist/executor/executor-registry.d.ts.map +1 -0
  238. package/dist/executor/executor-registry.js +42 -0
  239. package/dist/executor/executor-registry.js.map +1 -0
  240. package/dist/executor/process-launcher.d.ts +26 -0
  241. package/dist/executor/process-launcher.d.ts.map +1 -0
  242. package/dist/executor/process-launcher.js +98 -0
  243. package/dist/executor/process-launcher.js.map +1 -0
  244. package/dist/executor/secret-file.d.ts +28 -0
  245. package/dist/executor/secret-file.d.ts.map +1 -0
  246. package/dist/executor/secret-file.js +127 -0
  247. package/dist/executor/secret-file.js.map +1 -0
  248. package/dist/gateway/auth.d.ts +26 -0
  249. package/dist/gateway/auth.d.ts.map +1 -0
  250. package/dist/gateway/auth.js +66 -0
  251. package/dist/gateway/auth.js.map +1 -0
  252. package/dist/gateway/gateway-client.d.ts +363 -0
  253. package/dist/gateway/gateway-client.d.ts.map +1 -0
  254. package/dist/gateway/gateway-client.js +611 -0
  255. package/dist/gateway/gateway-client.js.map +1 -0
  256. package/dist/identity/agent-identity.d.ts +29 -0
  257. package/dist/identity/agent-identity.d.ts.map +1 -0
  258. package/dist/identity/agent-identity.js +54 -0
  259. package/dist/identity/agent-identity.js.map +1 -0
  260. package/dist/identity/did-manager.d.ts +17 -0
  261. package/dist/identity/did-manager.d.ts.map +1 -0
  262. package/dist/identity/did-manager.js +29 -0
  263. package/dist/identity/did-manager.js.map +1 -0
  264. package/dist/identity/key-manager.d.ts +21 -0
  265. package/dist/identity/key-manager.d.ts.map +1 -0
  266. package/dist/identity/key-manager.js +126 -0
  267. package/dist/identity/key-manager.js.map +1 -0
  268. package/dist/identity/session-key.d.ts +13 -0
  269. package/dist/identity/session-key.d.ts.map +1 -0
  270. package/dist/identity/session-key.js +17 -0
  271. package/dist/identity/session-key.js.map +1 -0
  272. package/dist/policy/policy-evaluator.d.ts +63 -0
  273. package/dist/policy/policy-evaluator.d.ts.map +1 -0
  274. package/dist/policy/policy-evaluator.js +266 -0
  275. package/dist/policy/policy-evaluator.js.map +1 -0
  276. package/dist/policy/policy-loader.d.ts +10 -0
  277. package/dist/policy/policy-loader.d.ts.map +1 -0
  278. package/dist/policy/policy-loader.js +71 -0
  279. package/dist/policy/policy-loader.js.map +1 -0
  280. package/dist/policy/types.d.ts +21 -0
  281. package/dist/policy/types.d.ts.map +1 -0
  282. package/dist/policy/types.js +3 -0
  283. package/dist/policy/types.js.map +1 -0
  284. package/dist/telemetry/claude-settings.d.ts +67 -0
  285. package/dist/telemetry/claude-settings.d.ts.map +1 -0
  286. package/dist/telemetry/claude-settings.js +191 -0
  287. package/dist/telemetry/claude-settings.js.map +1 -0
  288. package/dist/telemetry/otel-headers.d.ts +27 -0
  289. package/dist/telemetry/otel-headers.d.ts.map +1 -0
  290. package/dist/telemetry/otel-headers.js +33 -0
  291. package/dist/telemetry/otel-headers.js.map +1 -0
  292. package/dist/telemetry/project-key.d.ts +12 -0
  293. package/dist/telemetry/project-key.d.ts.map +1 -0
  294. package/dist/telemetry/project-key.js +113 -0
  295. package/dist/telemetry/project-key.js.map +1 -0
  296. package/dist/utils/credential-errors.d.ts +73 -0
  297. package/dist/utils/credential-errors.d.ts.map +1 -0
  298. package/dist/utils/credential-errors.js +90 -0
  299. package/dist/utils/credential-errors.js.map +1 -0
  300. package/dist/utils/resource-canonicalizer.d.ts +19 -0
  301. package/dist/utils/resource-canonicalizer.d.ts.map +1 -0
  302. package/dist/utils/resource-canonicalizer.js +100 -0
  303. package/dist/utils/resource-canonicalizer.js.map +1 -0
  304. package/dist/utils/vc-utils.d.ts +23 -0
  305. package/dist/utils/vc-utils.d.ts.map +1 -0
  306. package/dist/utils/vc-utils.js +53 -0
  307. package/dist/utils/vc-utils.js.map +1 -0
  308. package/dist/wallet/sqlite.d.ts +4 -0
  309. package/dist/wallet/sqlite.d.ts.map +1 -0
  310. package/dist/wallet/sqlite.js +158 -0
  311. package/dist/wallet/sqlite.js.map +1 -0
  312. package/dist/wallet/vp-builder.d.ts +26 -0
  313. package/dist/wallet/vp-builder.d.ts.map +1 -0
  314. package/dist/wallet/vp-builder.js +55 -0
  315. package/dist/wallet/vp-builder.js.map +1 -0
  316. package/dist/wallet/wallet.d.ts +64 -0
  317. package/dist/wallet/wallet.d.ts.map +1 -0
  318. package/dist/wallet/wallet.js +179 -0
  319. package/dist/wallet/wallet.js.map +1 -0
  320. package/package.json +71 -0
  321. package/required-sdk-symbols.json +15 -0
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Minimal shape extracted from an api invoke-time `auth_required` (HTTP 202)
3
+ * response. The approval URL is NOT carried here — the 202 body has none; the
4
+ * ExecutionEngine mints one via `createApprovalRequest` after detecting this
5
+ * signal. `action` is surfaced for the error message; the wire's
6
+ * `determining_policy_ids` is intentionally NOT carried — the agentd audit
7
+ * sink has no attribution field for it today (same gap as the forbid branch),
8
+ * so parsing it would imply coverage that doesn't exist.
9
+ */
10
+ export interface ApiApprovalRequired {
11
+ action?: string;
12
+ }
13
+ /**
14
+ * Probe an api response body for an invoke-time `auth_required` signal.
15
+ *
16
+ * The api shape (HTTP 202, produced by GlobalHttpExceptionFilter's passthrough
17
+ * for AuthRequiredException) is TOP-LEVEL — NOT the `metadata.action` envelope
18
+ * that reauth uses:
19
+ * `{ statusCode: 202, code: 'auth_required', decision: 'auth_required',
20
+ * action, determining_policy_ids }`
21
+ *
22
+ * So we key off `code`/`decision` at the top level (either may be present).
23
+ * Returns the extracted payload if present, otherwise `undefined`.
24
+ *
25
+ * Note: a Cedar `policy_forbidden` (403) is a DIFFERENT, terminal signal and is
26
+ * intentionally not matched here — it arrives on the non-2xx path and is
27
+ * classified separately by the gateway-client.
28
+ */
29
+ export declare function extractApprovalRequired(body: unknown): ApiApprovalRequired | undefined;
30
+ /** Check if an error message indicates an invalid credential (expired, revoked, etc.) */
31
+ export declare function isCredentialInvalidError(message?: string): boolean;
32
+ /**
33
+ * Minimal shape of the reauth payload api returns on revoked/expired OAuth tokens.
34
+ * Kept loose on purpose — the api may add fields without breaking agentd.
35
+ *
36
+ * Layer note — three similar types intentionally exist in this repo:
37
+ * - `ApiReauthRequired` (this file): wire shape parsed from api bodies
38
+ * - `ReauthRequiredInfo` (gateway-client.ts): wire-level result carried
39
+ * alongside `InvokeToolResult.errorCode`
40
+ * - `ReauthRequiredExecutionInfo` (core/types.ts): user-facing ExecuteResult
41
+ * field, trimmed of wire-level knobs (e.g. `metadata`)
42
+ * The duplication is deliberate: each layer drops context the next one
43
+ * doesn't need, which keeps the CLI surface minimal.
44
+ */
45
+ export interface ApiReauthRequired {
46
+ provider: string;
47
+ reason: string;
48
+ message: string;
49
+ authUrl: string;
50
+ projectId?: string;
51
+ metadata?: Record<string, any>;
52
+ }
53
+ /**
54
+ * Probe an api response body for a reauth_required signal.
55
+ *
56
+ * The api shape is:
57
+ * `{ success:false, error, metadata: { action: 'reauth_required',
58
+ * reauthRequired: { provider, reason, message, authUrl, projectId, ... } } }`
59
+ *
60
+ * Returns the extracted payload if present, otherwise `undefined`.
61
+ *
62
+ * Guards:
63
+ * - Requires `authUrl` to be a non-empty string (without it the signal is
64
+ * useless — the CLI caller has nothing to surface to the user).
65
+ * - Does not trust the outer `success` flag. If a future api bug sets
66
+ * `success:true` on a reauth response, we still treat it as a reauth
67
+ * failure: the underlying SaaS token is gone, and any "data" in that
68
+ * envelope would be stale or misleading. `action:'reauth_required'`
69
+ * is the canonical signal, not `success`. (Spec'd in gateway-client
70
+ * reauth tests as the "contradictory body" regression guard.)
71
+ */
72
+ export declare function extractReauthRequired(body: unknown): ApiReauthRequired | undefined;
73
+ //# sourceMappingURL=credential-errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credential-errors.d.ts","sourceRoot":"","sources":["../../src/utils/credential-errors.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AACH,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,OAAO,GAAG,mBAAmB,GAAG,SAAS,CAQtF;AAgBD,yFAAyF;AACzF,wBAAgB,wBAAwB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAGlE;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;CAC/B;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,OAAO,GAAG,iBAAiB,GAAG,SAAS,CAclF"}
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.extractApprovalRequired = extractApprovalRequired;
4
+ exports.isCredentialInvalidError = isCredentialInvalidError;
5
+ exports.extractReauthRequired = extractReauthRequired;
6
+ const ai_identity_1 = require("@vess-id/ai-identity");
7
+ /**
8
+ * Probe an api response body for an invoke-time `auth_required` signal.
9
+ *
10
+ * The api shape (HTTP 202, produced by GlobalHttpExceptionFilter's passthrough
11
+ * for AuthRequiredException) is TOP-LEVEL — NOT the `metadata.action` envelope
12
+ * that reauth uses:
13
+ * `{ statusCode: 202, code: 'auth_required', decision: 'auth_required',
14
+ * action, determining_policy_ids }`
15
+ *
16
+ * So we key off `code`/`decision` at the top level (either may be present).
17
+ * Returns the extracted payload if present, otherwise `undefined`.
18
+ *
19
+ * Note: a Cedar `policy_forbidden` (403) is a DIFFERENT, terminal signal and is
20
+ * intentionally not matched here — it arrives on the non-2xx path and is
21
+ * classified separately by the gateway-client.
22
+ */
23
+ function extractApprovalRequired(body) {
24
+ if (!body || typeof body !== 'object')
25
+ return undefined;
26
+ const b = body;
27
+ const isAuthRequired = b.code === 'auth_required' || b.decision === 'auth_required';
28
+ if (!isAuthRequired)
29
+ return undefined;
30
+ return {
31
+ action: typeof b.action === 'string' ? b.action : undefined,
32
+ };
33
+ }
34
+ /**
35
+ * Patterns that indicate a credential/VP is invalid (expired, revoked, malformed).
36
+ * Shared between gateway-client (HTTP response detection) and execution-engine (error classification).
37
+ */
38
+ const CREDENTIAL_ERROR_PATTERNS = [
39
+ /VP verification failed/i,
40
+ /SD-JWT.*verification failed/i,
41
+ /JWT is expired/i,
42
+ /VC has expired/i,
43
+ /credential is not valid/i,
44
+ /credential.*expired/i,
45
+ /Authentication failed/i,
46
+ ];
47
+ /** Check if an error message indicates an invalid credential (expired, revoked, etc.) */
48
+ function isCredentialInvalidError(message) {
49
+ if (!message)
50
+ return false;
51
+ return CREDENTIAL_ERROR_PATTERNS.some(pattern => pattern.test(message));
52
+ }
53
+ /**
54
+ * Probe an api response body for a reauth_required signal.
55
+ *
56
+ * The api shape is:
57
+ * `{ success:false, error, metadata: { action: 'reauth_required',
58
+ * reauthRequired: { provider, reason, message, authUrl, projectId, ... } } }`
59
+ *
60
+ * Returns the extracted payload if present, otherwise `undefined`.
61
+ *
62
+ * Guards:
63
+ * - Requires `authUrl` to be a non-empty string (without it the signal is
64
+ * useless — the CLI caller has nothing to surface to the user).
65
+ * - Does not trust the outer `success` flag. If a future api bug sets
66
+ * `success:true` on a reauth response, we still treat it as a reauth
67
+ * failure: the underlying SaaS token is gone, and any "data" in that
68
+ * envelope would be stale or misleading. `action:'reauth_required'`
69
+ * is the canonical signal, not `success`. (Spec'd in gateway-client
70
+ * reauth tests as the "contradictory body" regression guard.)
71
+ */
72
+ function extractReauthRequired(body) {
73
+ if (!body || typeof body !== 'object')
74
+ return undefined;
75
+ const metadata = body.metadata;
76
+ if (!metadata || metadata.action !== ai_identity_1.REAUTH_REQUIRED_ACTION)
77
+ return undefined;
78
+ const r = metadata.reauthRequired;
79
+ if (!r || typeof r.authUrl !== 'string' || r.authUrl.length === 0)
80
+ return undefined;
81
+ return {
82
+ provider: String(r.provider ?? ''),
83
+ reason: String(r.reason ?? ''),
84
+ message: String(r.message ?? body.error ?? ''),
85
+ authUrl: r.authUrl,
86
+ projectId: r.projectId,
87
+ metadata: r.metadata,
88
+ };
89
+ }
90
+ //# sourceMappingURL=credential-errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credential-errors.js","sourceRoot":"","sources":["../../src/utils/credential-errors.ts"],"names":[],"mappings":";;AA+BA,0DAQC;AAiBD,4DAGC;AA2CD,sDAcC;AApHD,sDAA6D;AAe7D;;;;;;;;;;;;;;;GAeG;AACH,SAAgB,uBAAuB,CAAC,IAAa;IACnD,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAA;IACvD,MAAM,CAAC,GAAG,IAAW,CAAA;IACrB,MAAM,cAAc,GAAG,CAAC,CAAC,IAAI,KAAK,eAAe,IAAI,CAAC,CAAC,QAAQ,KAAK,eAAe,CAAA;IACnF,IAAI,CAAC,cAAc;QAAE,OAAO,SAAS,CAAA;IACrC,OAAO;QACL,MAAM,EAAE,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;KAC5D,CAAA;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,yBAAyB,GAAa;IAC1C,yBAAyB;IACzB,8BAA8B;IAC9B,iBAAiB;IACjB,iBAAiB;IACjB,0BAA0B;IAC1B,sBAAsB;IACtB,wBAAwB;CACzB,CAAA;AAED,yFAAyF;AACzF,SAAgB,wBAAwB,CAAC,OAAgB;IACvD,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,CAAA;IAC1B,OAAO,yBAAyB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAA;AACzE,CAAC;AAwBD;;;;;;;;;;;;;;;;;;GAkBG;AACH,SAAgB,qBAAqB,CAAC,IAAa;IACjD,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAA;IACvD,MAAM,QAAQ,GAAI,IAAY,CAAC,QAAQ,CAAA;IACvC,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,oCAAsB;QAAE,OAAO,SAAS,CAAA;IAC7E,MAAM,CAAC,GAAG,QAAQ,CAAC,cAAc,CAAA;IACjC,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAA;IACnF,OAAO;QACL,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC;QAClC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC;QAC9B,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,IAAK,IAAY,CAAC,KAAK,IAAI,EAAE,CAAC;QACvD,OAAO,EAAE,CAAC,CAAC,OAAO;QAClB,SAAS,EAAE,CAAC,CAAC,SAAS;QACtB,QAAQ,EAAE,CAAC,CAAC,QAAQ;KACrB,CAAA;AACH,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Canonicalize a file path for resource identity (spec §8.3).
3
+ *
4
+ * Steps:
5
+ * 1. Expand ~ to home directory
6
+ * 2. Convert to absolute path
7
+ * 3. Normalize . and ..
8
+ * 4. Resolve symlinks (realpath) if file exists
9
+ * 5. Normalize case (macOS is case-insensitive)
10
+ */
11
+ export declare function canonicalizePath(filePath: string): string;
12
+ /**
13
+ * Compute a fingerprint for a resource (spec §8.3).
14
+ *
15
+ * Fingerprint = sha256(canonical_path + device_id + inode)
16
+ * device_id = Root DID (cryptographically bound to device)
17
+ */
18
+ export declare function computeFingerprint(canonicalPath: string, deviceId: string): string;
19
+ //# sourceMappingURL=resource-canonicalizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resource-canonicalizer.d.ts","sourceRoot":"","sources":["../../src/utils/resource-canonicalizer.ts"],"names":[],"mappings":"AAKA;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAiCzD;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,GACf,MAAM,CAYR"}
@@ -0,0 +1,100 @@
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.canonicalizePath = canonicalizePath;
37
+ exports.computeFingerprint = computeFingerprint;
38
+ const path = __importStar(require("path"));
39
+ const os = __importStar(require("os"));
40
+ const fs = __importStar(require("fs"));
41
+ const crypto_1 = require("crypto");
42
+ /**
43
+ * Canonicalize a file path for resource identity (spec §8.3).
44
+ *
45
+ * Steps:
46
+ * 1. Expand ~ to home directory
47
+ * 2. Convert to absolute path
48
+ * 3. Normalize . and ..
49
+ * 4. Resolve symlinks (realpath) if file exists
50
+ * 5. Normalize case (macOS is case-insensitive)
51
+ */
52
+ function canonicalizePath(filePath) {
53
+ let resolved = filePath;
54
+ // 1. Expand ~
55
+ if (resolved.startsWith('~/') || resolved === '~') {
56
+ resolved = path.join(os.homedir(), resolved.slice(1));
57
+ }
58
+ // 2. Convert to absolute
59
+ if (!path.isAbsolute(resolved)) {
60
+ resolved = path.resolve(resolved);
61
+ }
62
+ // 3. Normalize . and ..
63
+ resolved = path.normalize(resolved);
64
+ // 4. Resolve symlinks if file exists
65
+ try {
66
+ resolved = fs.realpathSync(resolved);
67
+ }
68
+ catch {
69
+ // File doesn't exist yet, use normalized path
70
+ }
71
+ // 5. Case normalization (macOS is case-insensitive)
72
+ // NOTE: Fingerprints generated on macOS (lowercased) will differ from Linux
73
+ // (case-preserved) for the same file. This is by design since fingerprints
74
+ // are device-bound (via Root DID), but cross-platform migration would
75
+ // require re-canonicalization.
76
+ if (process.platform === 'darwin') {
77
+ resolved = resolved.toLowerCase();
78
+ }
79
+ return resolved;
80
+ }
81
+ /**
82
+ * Compute a fingerprint for a resource (spec §8.3).
83
+ *
84
+ * Fingerprint = sha256(canonical_path + device_id + inode)
85
+ * device_id = Root DID (cryptographically bound to device)
86
+ */
87
+ function computeFingerprint(canonicalPath, deviceId) {
88
+ let inode = '';
89
+ try {
90
+ const stat = fs.statSync(canonicalPath);
91
+ inode = String(stat.ino);
92
+ }
93
+ catch {
94
+ // File doesn't exist, omit inode
95
+ }
96
+ const data = `${canonicalPath}:${deviceId}:${inode}`;
97
+ const hash = (0, crypto_1.createHash)('sha256').update(data).digest('hex');
98
+ return `sha256:${hash}`;
99
+ }
100
+ //# sourceMappingURL=resource-canonicalizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resource-canonicalizer.js","sourceRoot":"","sources":["../../src/utils/resource-canonicalizer.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAeA,4CAiCC;AAQD,gDAeC;AAvED,2CAA4B;AAC5B,uCAAwB;AACxB,uCAAwB;AACxB,mCAAmC;AAEnC;;;;;;;;;GASG;AACH,SAAgB,gBAAgB,CAAC,QAAgB;IAC/C,IAAI,QAAQ,GAAG,QAAQ,CAAA;IAEvB,cAAc;IACd,IAAI,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,QAAQ,KAAK,GAAG,EAAE,CAAC;QAClD,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;IACvD,CAAC;IAED,yBAAyB;IACzB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC/B,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;IACnC,CAAC;IAED,wBAAwB;IACxB,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;IAEnC,qCAAqC;IACrC,IAAI,CAAC;QACH,QAAQ,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAA;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,8CAA8C;IAChD,CAAC;IAED,oDAAoD;IACpD,4EAA4E;IAC5E,2EAA2E;IAC3E,sEAAsE;IACtE,+BAA+B;IAC/B,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAClC,QAAQ,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAA;IACnC,CAAC;IAED,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED;;;;;GAKG;AACH,SAAgB,kBAAkB,CAChC,aAAqB,EACrB,QAAgB;IAEhB,IAAI,KAAK,GAAG,EAAE,CAAA;IACd,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAA;QACvC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,iCAAiC;IACnC,CAAC;IAED,MAAM,IAAI,GAAG,GAAG,aAAa,IAAI,QAAQ,IAAI,KAAK,EAAE,CAAA;IACpD,MAAM,IAAI,GAAG,IAAA,mBAAU,EAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IAC5D,OAAO,UAAU,IAAI,EAAE,CAAA;AACzB,CAAC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Shared VC utility functions for agentd.
3
+ *
4
+ * NOTE: These functions decode the JWT payload WITHOUT verifying the signature.
5
+ * This is intentional — the Gateway is the authoritative verifier. These local
6
+ * checks are optimizations to avoid sending obviously-expired VCs over the network.
7
+ */
8
+ /**
9
+ * Extract jti (JWT ID) from an SD-JWT VC credential string.
10
+ *
11
+ * @param credentialJwt - The full SD-JWT credential string
12
+ * @returns The jti string, or null if extraction fails
13
+ */
14
+ export declare function extractJtiFromVC(credentialJwt: string): string | null;
15
+ /**
16
+ * Extract exp (expiration time) from an SD-JWT VC credential string.
17
+ *
18
+ * @param credentialJwt - The full SD-JWT credential string
19
+ * @returns The exp as seconds since epoch, or null if extraction fails.
20
+ * Returns null for non-finite or non-positive values.
21
+ */
22
+ export declare function extractExpFromVC(credentialJwt: string): number | null;
23
+ //# sourceMappingURL=vc-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vc-utils.d.ts","sourceRoot":"","sources":["../../src/utils/vc-utils.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAqBH;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGrE;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAMrE"}
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ /**
3
+ * Shared VC utility functions for agentd.
4
+ *
5
+ * NOTE: These functions decode the JWT payload WITHOUT verifying the signature.
6
+ * This is intentional — the Gateway is the authoritative verifier. These local
7
+ * checks are optimizations to avoid sending obviously-expired VCs over the network.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.extractJtiFromVC = extractJtiFromVC;
11
+ exports.extractExpFromVC = extractExpFromVC;
12
+ /**
13
+ * Parse the payload of an SD-JWT VC credential string without signature verification.
14
+ * Shared helper to avoid duplicating base64url decode logic.
15
+ */
16
+ function parseVCPayload(credentialJwt) {
17
+ try {
18
+ // SD-JWT format: <issuer-jwt>~<disclosure1>~<disclosure2>~...
19
+ const issuerJwt = credentialJwt.split('~')[0];
20
+ const parts = issuerJwt.split('.');
21
+ if (parts.length < 2)
22
+ return null;
23
+ return JSON.parse(Buffer.from(parts[1], 'base64url').toString('utf-8'));
24
+ }
25
+ catch {
26
+ return null;
27
+ }
28
+ }
29
+ /**
30
+ * Extract jti (JWT ID) from an SD-JWT VC credential string.
31
+ *
32
+ * @param credentialJwt - The full SD-JWT credential string
33
+ * @returns The jti string, or null if extraction fails
34
+ */
35
+ function extractJtiFromVC(credentialJwt) {
36
+ const payload = parseVCPayload(credentialJwt);
37
+ return typeof payload?.jti === 'string' ? payload.jti : null;
38
+ }
39
+ /**
40
+ * Extract exp (expiration time) from an SD-JWT VC credential string.
41
+ *
42
+ * @param credentialJwt - The full SD-JWT credential string
43
+ * @returns The exp as seconds since epoch, or null if extraction fails.
44
+ * Returns null for non-finite or non-positive values.
45
+ */
46
+ function extractExpFromVC(credentialJwt) {
47
+ const payload = parseVCPayload(credentialJwt);
48
+ if (typeof payload?.exp === 'number' && Number.isFinite(payload.exp) && payload.exp > 0) {
49
+ return payload.exp;
50
+ }
51
+ return null;
52
+ }
53
+ //# sourceMappingURL=vc-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vc-utils.js","sourceRoot":"","sources":["../../src/utils/vc-utils.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;AA2BH,4CAGC;AASD,4CAMC;AA3CD;;;GAGG;AACH,SAAS,cAAc,CAAC,aAAqB;IAC3C,IAAI,CAAC;QACH,8DAA8D;QAC9D,MAAM,SAAS,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;QAC7C,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAClC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,IAAI,CAAA;QAEjC,OAAO,IAAI,CAAC,KAAK,CACf,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CACrD,CAAA;IACH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,SAAgB,gBAAgB,CAAC,aAAqB;IACpD,MAAM,OAAO,GAAG,cAAc,CAAC,aAAa,CAAC,CAAA;IAC7C,OAAO,OAAO,OAAO,EAAE,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAA;AAC9D,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,gBAAgB,CAAC,aAAqB;IACpD,MAAM,OAAO,GAAG,cAAc,CAAC,aAAa,CAAC,CAAA;IAC7C,IAAI,OAAO,OAAO,EAAE,GAAG,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC;QACxF,OAAO,OAAO,CAAC,GAAG,CAAA;IACpB,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC"}
@@ -0,0 +1,4 @@
1
+ import Database from 'better-sqlite3';
2
+ export declare function openDatabase(dbPath: string): Database.Database;
3
+ export declare function initSchema(db: Database.Database): void;
4
+ //# sourceMappingURL=sqlite.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../src/wallet/sqlite.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAA;AAGrC,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAO9D;AAED,wBAAgB,UAAU,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI,CA2GtD"}
@@ -0,0 +1,158 @@
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
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.openDatabase = openDatabase;
40
+ exports.initSchema = initSchema;
41
+ const better_sqlite3_1 = __importDefault(require("better-sqlite3"));
42
+ const fs = __importStar(require("fs"));
43
+ function openDatabase(dbPath) {
44
+ const existed = fs.existsSync(dbPath);
45
+ const db = new better_sqlite3_1.default(dbPath);
46
+ if (!existed && fs.existsSync(dbPath)) {
47
+ fs.chmodSync(dbPath, 0o600);
48
+ }
49
+ return db;
50
+ }
51
+ function initSchema(db) {
52
+ db.exec(`
53
+ CREATE TABLE IF NOT EXISTS projects (
54
+ id TEXT PRIMARY KEY,
55
+ name TEXT NOT NULL,
56
+ is_default INTEGER DEFAULT 0,
57
+ user_role TEXT,
58
+ synced_at INTEGER
59
+ );
60
+
61
+ CREATE TABLE IF NOT EXISTS keys (
62
+ id TEXT PRIMARY KEY,
63
+ did TEXT NOT NULL UNIQUE,
64
+ key_type TEXT NOT NULL,
65
+ public_key TEXT NOT NULL,
66
+ keychain_ref TEXT NOT NULL,
67
+ storage_type TEXT NOT NULL DEFAULT 'keychain',
68
+ parent_did TEXT,
69
+ project_id TEXT,
70
+ client_name TEXT,
71
+ status TEXT DEFAULT 'active',
72
+ created_at INTEGER NOT NULL,
73
+ rotated_at INTEGER,
74
+ FOREIGN KEY (project_id) REFERENCES projects(id)
75
+ );
76
+
77
+ CREATE TABLE IF NOT EXISTS credentials (
78
+ id TEXT PRIMARY KEY,
79
+ holder_did TEXT NOT NULL,
80
+ project_id TEXT NOT NULL,
81
+ credential_jwt TEXT NOT NULL,
82
+ actions TEXT NOT NULL,
83
+ provider TEXT NOT NULL,
84
+ resources TEXT,
85
+ normalized_resource_key TEXT,
86
+ resource_fingerprint TEXT,
87
+ delegated_from TEXT,
88
+ status TEXT DEFAULT 'active',
89
+ expires_at INTEGER,
90
+ created_at INTEGER,
91
+ metadata TEXT,
92
+ FOREIGN KEY (project_id) REFERENCES projects(id)
93
+ );
94
+
95
+ CREATE INDEX IF NOT EXISTS idx_credentials_status ON credentials(status, provider);
96
+ CREATE INDEX IF NOT EXISTS idx_credentials_normalized_resource ON credentials(normalized_resource_key, status);
97
+
98
+ CREATE TABLE IF NOT EXISTS synced_policies (
99
+ id TEXT PRIMARY KEY,
100
+ project_id TEXT NOT NULL,
101
+ policy_json TEXT NOT NULL,
102
+ synced_at INTEGER NOT NULL,
103
+ FOREIGN KEY (project_id) REFERENCES projects(id)
104
+ );
105
+
106
+ `);
107
+ // Migration: add metadata column to existing databases
108
+ try {
109
+ db.exec('ALTER TABLE credentials ADD COLUMN metadata TEXT');
110
+ }
111
+ catch {
112
+ // Column already exists — safe to ignore
113
+ }
114
+ // Migration: add resources column to existing databases
115
+ try {
116
+ db.exec('ALTER TABLE credentials ADD COLUMN resources TEXT');
117
+ }
118
+ catch {
119
+ // Column already exists — safe to ignore
120
+ }
121
+ db.exec(`
122
+ CREATE TABLE IF NOT EXISTS env_profiles (
123
+ id TEXT PRIMARY KEY,
124
+ profile_name TEXT NOT NULL,
125
+ key_name TEXT NOT NULL,
126
+ backend_type TEXT NOT NULL DEFAULT 'keychain',
127
+ imported_at INTEGER NOT NULL,
128
+ UNIQUE(profile_name, key_name)
129
+ );
130
+
131
+ CREATE TABLE IF NOT EXISTS audit_log (
132
+ id TEXT PRIMARY KEY,
133
+ timestamp INTEGER NOT NULL,
134
+ project_id TEXT,
135
+ root_did TEXT,
136
+ agent_did TEXT,
137
+ presenter_did TEXT,
138
+ action TEXT NOT NULL,
139
+ provider TEXT,
140
+ enforcement_type TEXT,
141
+ decision_source TEXT,
142
+ execution_type TEXT NOT NULL,
143
+ decision TEXT NOT NULL,
144
+ decision_reason TEXT,
145
+ requested_resource TEXT,
146
+ normalized_resource TEXT,
147
+ resource_fingerprint TEXT,
148
+ grant_id TEXT,
149
+ credential_id TEXT,
150
+ approval_mode TEXT,
151
+ approval_nonce TEXT,
152
+ metadata TEXT,
153
+ synced_at INTEGER,
154
+ FOREIGN KEY (project_id) REFERENCES projects(id)
155
+ );
156
+ `);
157
+ }
158
+ //# sourceMappingURL=sqlite.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../../src/wallet/sqlite.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA,oCAOC;AAED,gCA2GC;AAvHD,oEAAqC;AACrC,uCAAwB;AAExB,SAAgB,YAAY,CAAC,MAAc;IACzC,MAAM,OAAO,GAAG,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA;IACrC,MAAM,EAAE,GAAG,IAAI,wBAAQ,CAAC,MAAM,CAAC,CAAA;IAC/B,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACtC,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;IAC7B,CAAC;IACD,OAAO,EAAE,CAAA;AACX,CAAC;AAED,SAAgB,UAAU,CAAC,EAAqB;IAC9C,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsDP,CAAC,CAAA;IAEF,uDAAuD;IACvD,IAAI,CAAC;QACH,EAAE,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAA;IAC7D,CAAC;IAAC,MAAM,CAAC;QACP,yCAAyC;IAC3C,CAAC;IAED,wDAAwD;IACxD,IAAI,CAAC;QACH,EAAE,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAA;IAC9D,CAAC;IAAC,MAAM,CAAC;QACP,yCAAyC;IAC3C,CAAC;IAED,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCP,CAAC,CAAA;AACJ,CAAC"}
@@ -0,0 +1,26 @@
1
+ export interface VPBuildOptions {
2
+ credentialJwt: string;
3
+ signerDid: string;
4
+ signerPrivateKeyJwk: string;
5
+ nonce: string;
6
+ domain: string;
7
+ }
8
+ /**
9
+ * Build a Verifiable Presentation (SD-JWT KB-JWT) for local signing.
10
+ *
11
+ * The VP signer is the Agent DID (not Root DID — spec §4.2).
12
+ *
13
+ * KB-JWT payload construction is delegated to
14
+ * `buildKbJwtPayload()` in `@vess-id/ai-identity`
15
+ * (`packages/sdk/src/vp/kb-jwt-builder.ts`), which is the SINGLE SOURCE OF
16
+ * TRUTH shared with the api / remote-mcp / SDK issuers. Do NOT inline an
17
+ * `{ iss, aud, nonce, iat }` literal here: agentd alpha builds prior to
18
+ * this change drifted from the API verifier's `exp` requirement and every
19
+ * VP was rejected with `KB-JWT missing exp`. The four-way lock-step
20
+ * (api / remote-mcp / SDK / agentd) is documented in the kb-jwt-builder
21
+ * header.
22
+ */
23
+ export declare class VPBuilder {
24
+ buildVP(options: VPBuildOptions): Promise<string>;
25
+ }
26
+ //# sourceMappingURL=vp-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vp-builder.d.ts","sourceRoot":"","sources":["../../src/wallet/vp-builder.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,cAAc;IAC7B,aAAa,EAAE,MAAM,CAAA;IACrB,SAAS,EAAE,MAAM,CAAA;IACjB,mBAAmB,EAAE,MAAM,CAAA;IAC3B,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;CACf;AAED;;;;;;;;;;;;;;GAcG;AACH,qBAAa,SAAS;IACd,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;CAwCxD"}
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.VPBuilder = void 0;
4
+ const sd_jwt_vc_1 = require("@sd-jwt/sd-jwt-vc");
5
+ const crypto_nodejs_1 = require("@sd-jwt/crypto-nodejs");
6
+ const ai_identity_1 = require("@vess-id/ai-identity");
7
+ /**
8
+ * Build a Verifiable Presentation (SD-JWT KB-JWT) for local signing.
9
+ *
10
+ * The VP signer is the Agent DID (not Root DID — spec §4.2).
11
+ *
12
+ * KB-JWT payload construction is delegated to
13
+ * `buildKbJwtPayload()` in `@vess-id/ai-identity`
14
+ * (`packages/sdk/src/vp/kb-jwt-builder.ts`), which is the SINGLE SOURCE OF
15
+ * TRUTH shared with the api / remote-mcp / SDK issuers. Do NOT inline an
16
+ * `{ iss, aud, nonce, iat }` literal here: agentd alpha builds prior to
17
+ * this change drifted from the API verifier's `exp` requirement and every
18
+ * VP was rejected with `KB-JWT missing exp`. The four-way lock-step
19
+ * (api / remote-mcp / SDK / agentd) is documented in the kb-jwt-builder
20
+ * header.
21
+ */
22
+ class VPBuilder {
23
+ async buildVP(options) {
24
+ const privateKey = JSON.parse(options.signerPrivateKeyJwk);
25
+ const signer = await crypto_nodejs_1.ES256.getSigner(privateKey);
26
+ const { d, key_ops, ...publicKeyJwk } = privateKey;
27
+ const verifier = await crypto_nodejs_1.ES256.getVerifier(publicKeyJwk);
28
+ const sdJwtInstance = new sd_jwt_vc_1.SDJwtVcInstance({
29
+ signer,
30
+ verifier,
31
+ signAlg: crypto_nodejs_1.ES256.alg,
32
+ hasher: crypto_nodejs_1.digest,
33
+ hashAlg: 'sha-256',
34
+ saltGenerator: crypto_nodejs_1.generateSalt,
35
+ kbSigner: signer,
36
+ kbSignAlg: crypto_nodejs_1.ES256.alg,
37
+ });
38
+ const decodedVC = await sdJwtInstance.decode(options.credentialJwt);
39
+ const presentableKeys = await decodedVC.presentableKeys(crypto_nodejs_1.digest);
40
+ const presentationFrame = {};
41
+ for (const key of presentableKeys) {
42
+ presentationFrame[key] = true;
43
+ }
44
+ const kbJwtPayload = (0, ai_identity_1.buildKbJwtPayload)({
45
+ holderDid: options.signerDid,
46
+ audience: options.domain,
47
+ nonce: options.nonce,
48
+ vcCredential: options.credentialJwt,
49
+ });
50
+ const presentation = await sdJwtInstance.present(options.credentialJwt, presentationFrame, { kb: { payload: kbJwtPayload } });
51
+ return presentation;
52
+ }
53
+ }
54
+ exports.VPBuilder = VPBuilder;
55
+ //# sourceMappingURL=vp-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vp-builder.js","sourceRoot":"","sources":["../../src/wallet/vp-builder.ts"],"names":[],"mappings":";;;AAAA,iDAAmD;AACnD,yDAAmE;AACnE,sDAAwD;AAUxD;;;;;;;;;;;;;;GAcG;AACH,MAAa,SAAS;IACpB,KAAK,CAAC,OAAO,CAAC,OAAuB;QACnC,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAA;QAC1D,MAAM,MAAM,GAAG,MAAM,qBAAK,CAAC,SAAS,CAAC,UAAU,CAAC,CAAA;QAChD,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,YAAY,EAAE,GAAG,UAAqC,CAAA;QAC7E,MAAM,QAAQ,GAAG,MAAM,qBAAK,CAAC,WAAW,CAAC,YAAY,CAAC,CAAA;QAEtD,MAAM,aAAa,GAAG,IAAI,2BAAe,CAAC;YACxC,MAAM;YACN,QAAQ;YACR,OAAO,EAAE,qBAAK,CAAC,GAAG;YAClB,MAAM,EAAE,sBAAM;YACd,OAAO,EAAE,SAAS;YAClB,aAAa,EAAE,4BAAY;YAC3B,QAAQ,EAAE,MAAM;YAChB,SAAS,EAAE,qBAAK,CAAC,GAAG;SACrB,CAAC,CAAA;QAEF,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAA;QACnE,MAAM,eAAe,GAAG,MAAM,SAAS,CAAC,eAAe,CAAC,sBAAM,CAAC,CAAA;QAE/D,MAAM,iBAAiB,GAA4B,EAAE,CAAA;QACrD,KAAK,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;YAClC,iBAAiB,CAAC,GAAG,CAAC,GAAG,IAAI,CAAA;QAC/B,CAAC;QAED,MAAM,YAAY,GAAG,IAAA,+BAAiB,EAAC;YACrC,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,QAAQ,EAAE,OAAO,CAAC,MAAM;YACxB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,YAAY,EAAE,OAAO,CAAC,aAAa;SACpC,CAAC,CAAA;QAEF,MAAM,YAAY,GAAG,MAAM,aAAa,CAAC,OAAO,CAC9C,OAAO,CAAC,aAAa,EACrB,iBAAiB,EACjB,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE,EAAE,CAClC,CAAA;QAED,OAAO,YAAY,CAAA;IACrB,CAAC;CACF;AAzCD,8BAyCC"}