@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,611 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AgentdGatewayClient = exports.GatewayHttpError = exports.GatewayNetworkError = void 0;
4
+ const credential_errors_1 = require("../utils/credential-errors");
5
+ const ai_identity_1 = require("@vess-id/ai-identity");
6
+ /**
7
+ * Custom error for network-level failures (connection refused, DNS, timeout).
8
+ * Used by ExecutionEngine to distinguish network issues from code bugs.
9
+ */
10
+ class GatewayNetworkError extends Error {
11
+ cause;
12
+ constructor(message, cause) {
13
+ super(message);
14
+ this.cause = cause;
15
+ this.name = 'GatewayNetworkError';
16
+ }
17
+ }
18
+ exports.GatewayNetworkError = GatewayNetworkError;
19
+ /**
20
+ * Custom error for HTTP-level failures from the gateway (non-2xx, non-network).
21
+ *
22
+ * Exposes `status` (numeric HTTP status code) so callers can distinguish
23
+ * 409 (idempotent conflict) from 5xx (transient) without string-matching
24
+ * the error message. This makes the agentd-side retry logic robust against
25
+ * any future change in the message format produced by gateway-client.
26
+ */
27
+ class GatewayHttpError extends Error {
28
+ status;
29
+ body;
30
+ constructor(message, status, body) {
31
+ super(message);
32
+ this.status = status;
33
+ this.body = body;
34
+ this.name = 'GatewayHttpError';
35
+ }
36
+ }
37
+ exports.GatewayHttpError = GatewayHttpError;
38
+ class AgentdGatewayClient {
39
+ baseUrl;
40
+ getSessionToken;
41
+ onTokenRefreshed;
42
+ /** Shared promise for deduplicating concurrent token refresh attempts */
43
+ refreshPromise = null;
44
+ constructor(baseUrl, getSessionToken, onTokenRefreshed) {
45
+ this.baseUrl = baseUrl;
46
+ this.getSessionToken = getSessionToken;
47
+ this.onTokenRefreshed = onTokenRefreshed;
48
+ }
49
+ buildHeaders() {
50
+ return {
51
+ 'Content-Type': 'application/json',
52
+ 'X-Device-Session-Token': this.getSessionToken(),
53
+ };
54
+ }
55
+ /**
56
+ * Wrap fetch calls to convert network errors into GatewayNetworkError.
57
+ */
58
+ async fetchWithNetworkError(url, init) {
59
+ try {
60
+ return await fetch(url, init);
61
+ }
62
+ catch (err) {
63
+ throw new GatewayNetworkError(`Network error calling ${url}: ${err instanceof Error ? err.message : String(err)}`, err);
64
+ }
65
+ }
66
+ /**
67
+ * Wrap fetch calls with automatic retry on 401 (token expired).
68
+ * On 401, attempts to refresh the token and retry the original request.
69
+ * Does NOT apply to refreshToken itself (to avoid infinite loops).
70
+ */
71
+ async fetchWithAuthRetry(url, options) {
72
+ const response = await this.fetchWithNetworkError(url, options);
73
+ if (response.status === 401 && this.onTokenRefreshed) {
74
+ try {
75
+ // Deduplicate concurrent refreshes — only one refresh in flight at a time
76
+ if (!this.refreshPromise) {
77
+ this.refreshPromise = this.refreshToken().finally(() => {
78
+ this.refreshPromise = null;
79
+ });
80
+ }
81
+ const result = await this.refreshPromise;
82
+ try {
83
+ this.onTokenRefreshed(result.deviceSessionToken);
84
+ }
85
+ catch {
86
+ // onTokenRefreshed failed (e.g. Keychain write error) — continue with retry anyway
87
+ }
88
+ // Retry with new token
89
+ const retryOptions = {
90
+ ...options,
91
+ headers: {
92
+ ...options.headers,
93
+ 'X-Device-Session-Token': result.deviceSessionToken,
94
+ },
95
+ };
96
+ return this.fetchWithNetworkError(url, retryOptions);
97
+ }
98
+ catch {
99
+ // Refresh failed — token may be expired beyond recovery
100
+ process.stderr.write('[vess] Session token refresh failed. Run "vess login" to re-authenticate.\n');
101
+ return response;
102
+ }
103
+ }
104
+ return response;
105
+ }
106
+ /**
107
+ * Refresh the device session token.
108
+ * POST /api/v1/device/refresh
109
+ * NOTE: Uses fetchWithNetworkError (not fetchWithAuthRetry) to avoid infinite loops.
110
+ */
111
+ async refreshToken() {
112
+ const url = `${this.baseUrl}/api/v1/device/refresh`;
113
+ const response = await this.fetchWithNetworkError(url, {
114
+ method: 'POST',
115
+ headers: this.buildHeaders(),
116
+ signal: AbortSignal.timeout(10000),
117
+ });
118
+ if (!response.ok) {
119
+ throw new Error(`refreshToken failed: ${response.status}`);
120
+ }
121
+ const result = await response.json();
122
+ return result.data;
123
+ }
124
+ // ===========================================================================
125
+ // v1/agentd/ endpoints
126
+ // ===========================================================================
127
+ /**
128
+ * Issue nonce for VP replay prevention.
129
+ * POST /api/v1/agentd/nonce
130
+ */
131
+ async issueNonce(agentDid) {
132
+ const url = `${this.baseUrl}/api/v1/agentd/nonce`;
133
+ const response = await this.fetchWithAuthRetry(url, {
134
+ method: 'POST',
135
+ headers: this.buildHeaders(),
136
+ body: JSON.stringify({ agentDid }),
137
+ signal: AbortSignal.timeout(10000),
138
+ });
139
+ if (!response.ok) {
140
+ throw new Error(`issueNonce failed: ${response.status}`);
141
+ }
142
+ const result = await response.json();
143
+ return result.data;
144
+ }
145
+ /**
146
+ * Auto-issue VC when grant has autoApprove enabled.
147
+ * POST /api/v1/agentd/vc/auto-issue
148
+ */
149
+ async autoIssueVC(params) {
150
+ const url = `${this.baseUrl}/api/v1/agentd/vc/auto-issue`;
151
+ const response = await this.fetchWithAuthRetry(url, {
152
+ method: 'POST',
153
+ headers: this.buildHeaders(),
154
+ body: JSON.stringify(params),
155
+ signal: AbortSignal.timeout(10000),
156
+ });
157
+ if (!response.ok) {
158
+ const body = await response.text().catch(() => '');
159
+ // Surface the 403 body so the ExecutionEngine can detect a Cedar forbid
160
+ // (`policy_forbidden`) and render a terminal denial instead of minting an
161
+ // un-redeemable approval URL. GatewayHttpError carries status + body so
162
+ // callers branch without re-parsing the bare message.
163
+ throw new GatewayHttpError(`autoIssueVC failed: ${response.status}`, response.status, body);
164
+ }
165
+ const result = await response.json();
166
+ const data = result.data;
167
+ // API returns null when no auto-issue is available
168
+ if (!data || !data.autoIssued) {
169
+ return null;
170
+ }
171
+ // Guard: autoIssued=true but credential missing (edge case)
172
+ if (!data.credential) {
173
+ return null;
174
+ }
175
+ // API returns flat format: { credential: "jwt-string", expiresAt: "ISO-string", ... }
176
+ // Normalize to AutoIssueVCResult: { credential: { jwt, expiresAt (epoch ms) }, ... }
177
+ const expiresAt = typeof data.expiresAt === 'string'
178
+ ? Date.parse(data.expiresAt)
179
+ : (data.credential?.expiresAt ?? data.expiresAt);
180
+ // Guard: unparseable expiresAt
181
+ if (typeof expiresAt !== 'number' || Number.isNaN(expiresAt)) {
182
+ return null;
183
+ }
184
+ return {
185
+ autoIssued: data.autoIssued,
186
+ credential: {
187
+ jwt: typeof data.credential === 'string' ? data.credential : data.credential?.jwt,
188
+ expiresAt,
189
+ },
190
+ actions: data.actions ?? [],
191
+ ...(data.resources?.length ? { resources: data.resources } : {}),
192
+ ...(data.metadata != null ? { metadata: data.metadata } : {}),
193
+ };
194
+ }
195
+ /**
196
+ * Find approved requests by subjectDid.
197
+ * GET /api/v1/agentd/vc/approved?subjectDid=...
198
+ */
199
+ async findApprovedRequests(subjectDid) {
200
+ const url = `${this.baseUrl}/api/v1/agentd/vc/approved?subjectDid=${encodeURIComponent(subjectDid)}`;
201
+ const response = await this.fetchWithAuthRetry(url, {
202
+ method: 'GET',
203
+ headers: this.buildHeaders(),
204
+ signal: AbortSignal.timeout(10000),
205
+ });
206
+ if (!response.ok) {
207
+ throw new Error(`findApprovedRequests failed: ${response.status}`);
208
+ }
209
+ const result = await response.json();
210
+ // Phase 4: API no longer returns credential — just return id, actions, resources, approvalExpiresAt
211
+ return result.data.map((item) => ({
212
+ id: item.id,
213
+ actions: item.actions,
214
+ ...(item.resources ? { resources: item.resources } : {}),
215
+ ...(item.approvalExpiresAt ? { approvalExpiresAt: item.approvalExpiresAt } : {}),
216
+ }));
217
+ }
218
+ /**
219
+ * Claim a VC from an approved request (atomic, one-time).
220
+ * POST /api/v1/agentd/vc/claim
221
+ */
222
+ async claimVC(requestId, subjectDid) {
223
+ const url = `${this.baseUrl}/api/v1/agentd/vc/claim`;
224
+ const response = await this.fetchWithAuthRetry(url, {
225
+ method: 'POST',
226
+ headers: this.buildHeaders(),
227
+ body: JSON.stringify({ requestId, subjectDid }),
228
+ signal: AbortSignal.timeout(10000),
229
+ });
230
+ if (response.status === 409)
231
+ throw new Error('CLAIM_CONSUMED');
232
+ if (response.status === 410)
233
+ throw new Error('CLAIM_EXPIRED');
234
+ if (!response.ok)
235
+ throw new Error(`claimVC failed: ${response.status}`);
236
+ const result = await response.json();
237
+ const expiresAtMs = Date.parse(result.data.expiresAt);
238
+ if (Number.isNaN(expiresAtMs)) {
239
+ throw new Error('claimVC: invalid expiresAt in response');
240
+ }
241
+ return {
242
+ credential: {
243
+ jwt: result.data.credential,
244
+ expiresAt: expiresAtMs,
245
+ },
246
+ vcId: result.data.vcId,
247
+ actions: result.data.actions || [],
248
+ resources: result.data.resources,
249
+ actionParams: result.data.actionParams,
250
+ };
251
+ }
252
+ /**
253
+ * Check VC revocation status by jti.
254
+ * GET /api/v1/agentd/vc/status/:jti
255
+ */
256
+ async checkVCStatus(jti) {
257
+ const url = `${this.baseUrl}/api/v1/agentd/vc/status/${encodeURIComponent(jti)}`;
258
+ const response = await this.fetchWithAuthRetry(url, {
259
+ method: 'GET',
260
+ headers: this.buildHeaders(),
261
+ signal: AbortSignal.timeout(10000),
262
+ });
263
+ if (!response.ok) {
264
+ return { valid: false, reason: `VC status check failed: ${response.status}` };
265
+ }
266
+ const result = await response.json();
267
+ return result.data;
268
+ }
269
+ /**
270
+ * VP verify + grant authorization check (gateway_verified_local).
271
+ * POST /api/v1/agentd/vp/verify-authorize
272
+ */
273
+ async verifyAndAuthorize(vpJwt, challenge, domain, action, holderDid) {
274
+ const url = `${this.baseUrl}/api/v1/agentd/vp/verify-authorize`;
275
+ const response = await this.fetchWithAuthRetry(url, {
276
+ method: 'POST',
277
+ headers: this.buildHeaders(),
278
+ body: JSON.stringify({ vpJwt, challenge, domain, action, holderDid }),
279
+ signal: AbortSignal.timeout(10000),
280
+ });
281
+ if (!response.ok) {
282
+ return { authorized: false, reason: `VP verify-authorize failed: ${response.status}` };
283
+ }
284
+ const result = await response.json();
285
+ return result.data;
286
+ }
287
+ // ===========================================================================
288
+ // api/v1/ endpoints (spec Appendix B)
289
+ // ===========================================================================
290
+ /**
291
+ * Register an agent in the API Agent table so it appears in agents.html / timeline.html.
292
+ * POST /api/v1/agents/create
293
+ *
294
+ * Requires X-Project-Id header for ProjectRoleGuard.
295
+ * Treats 409 Conflict as success (idempotent — agent already exists).
296
+ */
297
+ async registerAgent(params) {
298
+ const url = `${this.baseUrl}/api/v1/agents/create`;
299
+ const response = await this.fetchWithAuthRetry(url, {
300
+ method: 'POST',
301
+ headers: {
302
+ ...this.buildHeaders(),
303
+ 'X-Project-Id': params.projectId,
304
+ },
305
+ body: JSON.stringify({
306
+ agentDid: params.agentDid,
307
+ name: params.name,
308
+ type: params.type,
309
+ publicKey: params.publicKey,
310
+ deviceInfo: params.deviceInfo,
311
+ }),
312
+ signal: AbortSignal.timeout(10000),
313
+ });
314
+ // 409 Conflict = agent already registered — treat as success
315
+ if (response.status === 409) {
316
+ return {
317
+ id: '',
318
+ did: params.agentDid,
319
+ name: params.name,
320
+ type: params.type,
321
+ status: 'active',
322
+ };
323
+ }
324
+ if (!response.ok) {
325
+ const body = await response.text().catch(() => '');
326
+ throw new GatewayHttpError(`registerAgent failed: ${response.status} ${response.statusText} - ${body}`, response.status, body);
327
+ }
328
+ const result = await response.json();
329
+ return result.agent;
330
+ }
331
+ /**
332
+ * Inline Grant + VC issuance (spec §6.2).
333
+ * POST /api/v1/grant/quick-approve
334
+ */
335
+ async quickApprove(params) {
336
+ const url = `${this.baseUrl}/api/v1/grant/quick-approve`;
337
+ const response = await this.fetchWithAuthRetry(url, {
338
+ method: 'POST',
339
+ headers: this.buildHeaders(),
340
+ body: JSON.stringify(params),
341
+ signal: AbortSignal.timeout(10000),
342
+ });
343
+ if (!response.ok) {
344
+ const body = await response.text().catch(() => '');
345
+ throw new Error(`quickApprove failed: ${response.status} ${response.statusText} - ${body}`);
346
+ }
347
+ const result = await response.json();
348
+ if (!result.success) {
349
+ throw new Error(`quickApprove failed: ${JSON.stringify(result)}`);
350
+ }
351
+ // Enrich resources with provider derived from the first action
352
+ const data = result.data;
353
+ const provider = params.actions[0]?.split('.')[0] || '';
354
+ data.resources = data.grant?.resources?.map((r) => ({ ...r, provider }));
355
+ return data;
356
+ }
357
+ /**
358
+ * Create an OOB approval request for high-risk actions.
359
+ * POST /api/v1/agentd/approval/request
360
+ */
361
+ async createApprovalRequest(params) {
362
+ const url = `${this.baseUrl}/api/v1/agentd/approval/request`;
363
+ const response = await this.fetchWithAuthRetry(url, {
364
+ method: 'POST',
365
+ headers: this.buildHeaders(),
366
+ body: JSON.stringify(params),
367
+ signal: AbortSignal.timeout(10000),
368
+ });
369
+ if (!response.ok) {
370
+ const text = await response.text().catch(() => '');
371
+ throw new Error(`createApprovalRequest failed: ${response.status} ${text}`);
372
+ }
373
+ const result = await response.json();
374
+ return result.data;
375
+ }
376
+ /**
377
+ * Poll the status of an OOB approval request.
378
+ * GET /api/v1/agentd/approval/:requestId/status
379
+ */
380
+ async getApprovalStatus(requestId) {
381
+ const url = `${this.baseUrl}/api/v1/agentd/approval/${encodeURIComponent(requestId)}/status`;
382
+ const response = await this.fetchWithAuthRetry(url, {
383
+ method: 'GET',
384
+ headers: this.buildHeaders(),
385
+ signal: AbortSignal.timeout(10000),
386
+ });
387
+ if (!response.ok) {
388
+ const text = await response.text().catch(() => '');
389
+ throw new Error(`getApprovalStatus failed: ${response.status} ${text}`);
390
+ }
391
+ const result = await response.json();
392
+ return result.data;
393
+ }
394
+ /**
395
+ * One-time grant atomic consumption (spec §6.2).
396
+ * POST /api/v1/grant/consume
397
+ */
398
+ async consumeGrant(grantId) {
399
+ const url = `${this.baseUrl}/api/v1/grant/consume`;
400
+ const response = await this.fetchWithAuthRetry(url, {
401
+ method: 'POST',
402
+ headers: this.buildHeaders(),
403
+ body: JSON.stringify({ grantId }),
404
+ signal: AbortSignal.timeout(10000),
405
+ });
406
+ if (!response.ok) {
407
+ return { consumed: false, reason: `consumeGrant failed: ${response.status}` };
408
+ }
409
+ const result = await response.json();
410
+ return result.data;
411
+ }
412
+ /**
413
+ * SaaS tool execution via Gateway (VP in Authorization header).
414
+ * POST /api/v1/tool/invoke
415
+ */
416
+ async invokeTool(params) {
417
+ const url = `${this.baseUrl}/api/v1/tool/invoke`;
418
+ const response = await this.fetchWithAuthRetry(url, {
419
+ method: 'POST',
420
+ headers: {
421
+ ...this.buildHeaders(),
422
+ 'Authorization': `Bearer ${params.vpJwt}`,
423
+ 'x-holder-did': params.holderDid,
424
+ 'x-auth-challenge': params.vpChallenge,
425
+ },
426
+ body: JSON.stringify({
427
+ tool: params.action.split('.')[0],
428
+ action: params.action,
429
+ params: params.parameters,
430
+ holderDid: params.holderDid,
431
+ vpChallenge: params.vpChallenge,
432
+ vpDomain: params.vpDomain,
433
+ }),
434
+ signal: AbortSignal.timeout(30000),
435
+ });
436
+ if (!response.ok) {
437
+ const body = await response.text().catch(() => '');
438
+ // Parse structured error codes (e.g., RESOURCE_MISMATCH, CREDENTIAL_INVALID, REAUTH_REQUIRED)
439
+ try {
440
+ const parsed = JSON.parse(body);
441
+ // Phase 2c-B — if a future api change envelopes reauth in a non-2xx,
442
+ // honor it before the generic CREDENTIAL_INVALID heuristic below.
443
+ const reauth = (0, credential_errors_1.extractReauthRequired)(parsed);
444
+ if (reauth) {
445
+ return {
446
+ success: false,
447
+ // Keep this priority aligned with the 200 path below
448
+ // (`raw.error || reauth.message`). The api envelope carries the
449
+ // human message on `error`, not `message`, so dropping the
450
+ // `parsed.message` tier removes a never-taken fallback.
451
+ error: parsed.error || reauth.message,
452
+ errorCode: ai_identity_1.GATEWAY_ERROR_CODE.REAUTH_REQUIRED,
453
+ reauthRequired: reauth,
454
+ };
455
+ }
456
+ if (parsed.code === 'policy_forbidden' || parsed.error === 'policy_forbidden') {
457
+ // Cedar forbid — terminal, approval cannot lift it. Classify so the
458
+ // ExecutionEngine denies without re-approval/retry (mirrors api 403).
459
+ return {
460
+ success: false,
461
+ error: parsed.message || 'Action forbidden by policy',
462
+ errorCode: ai_identity_1.GATEWAY_ERROR_CODE.POLICY_FORBIDDEN,
463
+ };
464
+ }
465
+ if (parsed.code === 'RESOURCE_MISMATCH') {
466
+ return {
467
+ success: false,
468
+ error: parsed.message || `invokeTool failed: ${response.status}`,
469
+ errorCode: ai_identity_1.GATEWAY_ERROR_CODE.RESOURCE_MISMATCH,
470
+ allowedResources: parsed.allowedResources,
471
+ requestedResource: parsed.requestedResource,
472
+ };
473
+ }
474
+ // #1286 — the gateway sent a code we do not recognise. Stop here rather
475
+ // than falling through to the message heuristic below: that classifies
476
+ // by matching the body against /credential.*expired/i and friends, so a
477
+ // policy denial whose wording happens to mention a credential would come
478
+ // back as CREDENTIAL_INVALID and ExecutionEngine would discard the VC,
479
+ // reissue and retry (execution-engine.ts:1114). A denial the gateway
480
+ // chose to send must not become a retry loop.
481
+ //
482
+ // Returning without an errorCode is what makes it terminal: undefined
483
+ // matches none of the engine's branches. Same property that already
484
+ // makes RESOURCE_UNRESOLVED behave correctly.
485
+ //
486
+ // 401 is deliberately excluded — invokeTool is always VP-authenticated,
487
+ // so a 401 genuinely is about the credential and keeps its old handling.
488
+ if (typeof parsed.code === 'string' && parsed.code !== '' && response.status !== 401) {
489
+ return {
490
+ success: false,
491
+ error: parsed.message || `invokeTool failed: ${response.status}`,
492
+ };
493
+ }
494
+ }
495
+ catch { /* not JSON or no code field, fall through */ }
496
+ // Detect credential-invalid errors (expired VC, invalid VP, etc.)
497
+ // NOTE: Any 401 from invokeTool is treated as credential-invalid since this endpoint
498
+ // is always VP-authenticated — non-VC auth failures cannot occur here.
499
+ const errorMessage = body;
500
+ const isCredentialInvalid = response.status === 401 ||
501
+ (0, credential_errors_1.isCredentialInvalidError)(errorMessage);
502
+ if (isCredentialInvalid) {
503
+ return {
504
+ success: false,
505
+ error: errorMessage || `invokeTool failed: ${response.status}`,
506
+ errorCode: ai_identity_1.GATEWAY_ERROR_CODE.CREDENTIAL_INVALID,
507
+ };
508
+ }
509
+ return { success: false, error: `invokeTool failed: ${response.status} - ${body}` };
510
+ }
511
+ // Phase 2c-B — 200 happy path: the api returns reauth failures with
512
+ // HTTP 200 and `{ success:false, metadata:{ action:'reauth_required', ... } }`.
513
+ // Detect that shape here so the caller sees a typed `REAUTH_REQUIRED`
514
+ // errorCode instead of a raw `success:false`.
515
+ const raw = await response.json();
516
+ const reauth = (0, credential_errors_1.extractReauthRequired)(raw);
517
+ if (reauth) {
518
+ return {
519
+ success: false,
520
+ error: raw.error || reauth.message,
521
+ errorCode: ai_identity_1.GATEWAY_ERROR_CODE.REAUTH_REQUIRED,
522
+ reauthRequired: reauth,
523
+ };
524
+ }
525
+ // Invoke-time Cedar RequireApproval arrives as HTTP 202 (response.ok), so it
526
+ // lands here on the happy path — NOT the !response.ok block above. The body
527
+ // carries top-level `decision: 'auth_required'` (no approvalUrl). Classify
528
+ // it so the ExecutionEngine mints an OOB approval URL. Checked after reauth
529
+ // (a revoked token is a distinct, higher-priority signal).
530
+ const approval = (0, credential_errors_1.extractApprovalRequired)(raw);
531
+ if (approval) {
532
+ return {
533
+ success: false,
534
+ error: raw.message || raw.error || `Approval required for ${approval.action ?? 'this action'}`,
535
+ errorCode: ai_identity_1.GATEWAY_ERROR_CODE.APPROVAL_REQUIRED,
536
+ };
537
+ }
538
+ return raw;
539
+ }
540
+ /**
541
+ * Resolve a human-readable resource identifier to its canonical ID.
542
+ * POST /api/v1/agentd/resource/resolve
543
+ */
544
+ async resolveResource(params) {
545
+ const url = `${this.baseUrl}/api/v1/agentd/resource/resolve`;
546
+ const response = await this.fetchWithAuthRetry(url, {
547
+ method: 'POST',
548
+ headers: this.buildHeaders(),
549
+ body: JSON.stringify(params),
550
+ signal: AbortSignal.timeout(10000),
551
+ });
552
+ if (!response.ok) {
553
+ throw new Error(`resolveResource failed: ${response.status}`);
554
+ }
555
+ const result = await response.json();
556
+ return result.data;
557
+ }
558
+ // ===========================================================================
559
+ // Existing endpoints
560
+ // ===========================================================================
561
+ /**
562
+ * Fetch org-level policy for a project (spec §7.6).
563
+ */
564
+ async fetchOrgPolicy(projectId) {
565
+ const url = `${this.baseUrl}/api/v1/grant/policy/${encodeURIComponent(projectId)}`;
566
+ const response = await this.fetchWithAuthRetry(url, {
567
+ method: 'GET',
568
+ headers: this.buildHeaders(),
569
+ signal: AbortSignal.timeout(10000),
570
+ });
571
+ if (!response.ok) {
572
+ throw new Error(`fetchOrgPolicy failed: ${response.status}`);
573
+ }
574
+ const result = await response.json();
575
+ return result.data;
576
+ }
577
+ /**
578
+ * Verify a VP with the Gateway (spec §7.4 gateway_verified_local).
579
+ * @deprecated Use verifyAndAuthorize instead for full VP+grant check.
580
+ */
581
+ async verifyVP(vpJwt, nonce, domain) {
582
+ const url = `${this.baseUrl}/api/v1/vp/verify`;
583
+ const response = await this.fetchWithAuthRetry(url, {
584
+ method: 'POST',
585
+ headers: this.buildHeaders(),
586
+ body: JSON.stringify({ vpJwt, nonce, domain }),
587
+ signal: AbortSignal.timeout(10000),
588
+ });
589
+ if (!response.ok) {
590
+ return { valid: false, reason: `VP verification failed: ${response.status}` };
591
+ }
592
+ return await response.json();
593
+ }
594
+ /**
595
+ * Check if Gateway is reachable.
596
+ */
597
+ async isReachable() {
598
+ try {
599
+ const response = await fetch(`${this.baseUrl}/health`, {
600
+ method: 'GET',
601
+ signal: AbortSignal.timeout(5000),
602
+ });
603
+ return response.ok;
604
+ }
605
+ catch {
606
+ return false;
607
+ }
608
+ }
609
+ }
610
+ exports.AgentdGatewayClient = AgentdGatewayClient;
611
+ //# sourceMappingURL=gateway-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gateway-client.js","sourceRoot":"","sources":["../../src/gateway/gateway-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Agent Identity resolver — manages Agent DIDs per project × client (spec §4.2).
3
+ *
4
+ * Each (projectId, clientName) pair gets its own Agent DID.
5
+ * Private keys stored in OS Keychain, metadata in SQLite `keys` table.
6
+ * Agent DID signs VPs (KB-JWT iss = Agent DID).
7
+ * Root DID is used ONLY for device enrollment.
8
+ */
9
+ import Database from 'better-sqlite3';
10
+ import { KeyManager } from './key-manager';
11
+ export interface AgentIdentity {
12
+ agentDid: string;
13
+ privateKeyJwk: string;
14
+ projectId: string;
15
+ clientName: string;
16
+ }
17
+ export declare class AgentIdentityResolver {
18
+ private readonly keyManager;
19
+ private readonly db;
20
+ private readonly rootDid;
21
+ constructor(keyManager: KeyManager, db: Database.Database, rootDid: string);
22
+ /**
23
+ * Get or create an Agent DID for the given project × client combination.
24
+ * If one already exists in SQLite (status=active), reuse it.
25
+ * Otherwise, generate a new Agent DID and store in Keychain + SQLite.
26
+ */
27
+ resolveAgentIdentity(projectId: string, clientName: string): Promise<AgentIdentity>;
28
+ }
29
+ //# sourceMappingURL=agent-identity.d.ts.map