@private.me/xbind 1.3.5 → 2.3.4

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 (306) hide show
  1. package/LICENSES.md +212 -0
  2. package/README.md +388 -6
  3. package/dist-standalone/_deps/mldsa-wasm/dist/mldsa.js +1 -1920
  4. package/dist-standalone/_deps/shared/cjs/errors.js +1 -639
  5. package/dist-standalone/_deps/shared/cjs/index.js +1 -496
  6. package/dist-standalone/_deps/shared/cjs/types.js +1 -317
  7. package/dist-standalone/_deps/shared/errors.js +1 -255
  8. package/dist-standalone/_deps/shared/index.js +1 -74
  9. package/dist-standalone/_deps/shared/types.js +1 -90
  10. package/dist-standalone/_deps/ux-helpers/cjs/errors.js +1 -1
  11. package/dist-standalone/_deps/ux-helpers/cjs/index.js +1 -1
  12. package/dist-standalone/_deps/ux-helpers/cjs/pagination.js +1 -1
  13. package/dist-standalone/_deps/ux-helpers/cjs/progress.js +1 -1
  14. package/dist-standalone/_deps/ux-helpers/cjs/search.js +1 -1
  15. package/dist-standalone/_deps/ux-helpers/cjs/types.js +1 -1
  16. package/dist-standalone/_deps/ux-helpers/errors.js +1 -1
  17. package/dist-standalone/_deps/ux-helpers/index.js +1 -1
  18. package/dist-standalone/_deps/ux-helpers/pagination.js +1 -1
  19. package/dist-standalone/_deps/ux-helpers/progress.js +1 -1
  20. package/dist-standalone/_deps/ux-helpers/search.js +1 -1
  21. package/dist-standalone/_deps/xchange/auto-accept.js +1 -1
  22. package/dist-standalone/_deps/xchange/cjs/auto-accept.js +1 -1
  23. package/dist-standalone/_deps/xchange/cjs/errors.js +1 -1
  24. package/dist-standalone/_deps/xchange/cjs/index.js +1 -1
  25. package/dist-standalone/_deps/xchange/cjs/invite-client.js +1 -1
  26. package/dist-standalone/_deps/xchange/cjs/lazy-init.js +1 -1
  27. package/dist-standalone/_deps/xchange/cjs/trust-integration.js +1 -1
  28. package/dist-standalone/_deps/xchange/cjs/xchange.js +1 -1
  29. package/dist-standalone/_deps/xchange/errors.js +1 -1
  30. package/dist-standalone/_deps/xchange/index.js +1 -1
  31. package/dist-standalone/_deps/xchange/invite-client.js +1 -1
  32. package/dist-standalone/_deps/xchange/lazy-init.js +1 -1
  33. package/dist-standalone/_deps/xchange/trust-integration.js +1 -1
  34. package/dist-standalone/_deps/xchange/xchange.js +1 -1
  35. package/dist-standalone/_deps/xregistry/cjs/discovery.js +1 -1
  36. package/dist-standalone/_deps/xregistry/cjs/errors.js +1 -1
  37. package/dist-standalone/_deps/xregistry/cjs/index.js +1 -1
  38. package/dist-standalone/_deps/xregistry/cjs/registry.js +1 -1
  39. package/dist-standalone/_deps/xregistry/cjs/schema.js +1 -1
  40. package/dist-standalone/_deps/xregistry/cjs/types.js +1 -1
  41. package/dist-standalone/_deps/xregistry/discovery.js +1 -1
  42. package/dist-standalone/_deps/xregistry/errors.js +1 -1
  43. package/dist-standalone/_deps/xregistry/index.js +1 -1
  44. package/dist-standalone/_deps/xregistry/registry.js +1 -1
  45. package/dist-standalone/_deps/xregistry/schema.js +1 -1
  46. package/dist-standalone/_deps/xregistry/types.js +1 -1
  47. package/dist-standalone/agent-call.js +1 -642
  48. package/dist-standalone/agent-sdk.js +1 -328
  49. package/dist-standalone/agent.d.ts +95 -5
  50. package/dist-standalone/agent.js +1 -1545
  51. package/dist-standalone/approval.js +1 -193
  52. package/dist-standalone/async-iterators.d.ts +275 -0
  53. package/dist-standalone/async-iterators.js +1 -0
  54. package/dist-standalone/auth.js +1 -219
  55. package/dist-standalone/auto-accept.js +1 -229
  56. package/dist-standalone/backup-config.js +1 -201
  57. package/dist-standalone/backup.d.ts +114 -0
  58. package/dist-standalone/backup.js +1 -0
  59. package/dist-standalone/batch-operations.d.ts +297 -0
  60. package/dist-standalone/batch-operations.js +1 -0
  61. package/dist-standalone/cancellation.d.ts +301 -0
  62. package/dist-standalone/cancellation.js +1 -0
  63. package/dist-standalone/checkpoint.js +1 -186
  64. package/dist-standalone/circuit-breaker.d.ts +351 -0
  65. package/dist-standalone/circuit-breaker.js +1 -0
  66. package/dist-standalone/cjs/agent-call.js +1 -651
  67. package/dist-standalone/cjs/agent-sdk.js +1 -332
  68. package/dist-standalone/cjs/agent.js +1 -1582
  69. package/dist-standalone/cjs/approval.js +1 -199
  70. package/dist-standalone/cjs/async-iterators.js +1 -0
  71. package/dist-standalone/cjs/auth.js +1 -225
  72. package/dist-standalone/cjs/auto-accept.js +1 -233
  73. package/dist-standalone/cjs/backup-config.js +1 -207
  74. package/dist-standalone/cjs/backup.js +1 -0
  75. package/dist-standalone/cjs/batch-operations.js +1 -0
  76. package/dist-standalone/cjs/cancellation.js +1 -0
  77. package/dist-standalone/cjs/checkpoint.js +1 -193
  78. package/dist-standalone/cjs/circuit-breaker.js +1 -0
  79. package/dist-standalone/cjs/cli/init.js +1 -486
  80. package/dist-standalone/cjs/config-validation.js +1 -0
  81. package/dist-standalone/cjs/connect.js +1 -312
  82. package/dist-standalone/cjs/connection-pool.js +1 -0
  83. package/dist-standalone/cjs/correlation-id.js +1 -339
  84. package/dist-standalone/cjs/crypto-utils.js +1 -0
  85. package/dist-standalone/cjs/debug-mode.js +1 -0
  86. package/dist-standalone/cjs/did-document.js +1 -101
  87. package/dist-standalone/cjs/did-privateme.js +1 -130
  88. package/dist-standalone/cjs/did-web.js +1 -201
  89. package/dist-standalone/cjs/discovery.js +1 -462
  90. package/dist-standalone/cjs/dual-mode.js +1 -251
  91. package/dist-standalone/cjs/email-templates.js +1 -313
  92. package/dist-standalone/cjs/email-transport.js +1 -239
  93. package/dist-standalone/cjs/envelope.js +1 -510
  94. package/dist-standalone/cjs/errors.js +1 -826
  95. package/dist-standalone/cjs/event-emitter.js +1 -0
  96. package/dist-standalone/cjs/gateway-state.js +1 -55
  97. package/dist-standalone/cjs/gateway-transport.js +1 -120
  98. package/dist-standalone/cjs/graceful-degradation.js +1 -0
  99. package/dist-standalone/cjs/guardrails.js +1 -223
  100. package/dist-standalone/cjs/health-check.js +1 -0
  101. package/dist-standalone/cjs/http-compat.js +1 -272
  102. package/dist-standalone/cjs/http-status-map.js +1 -571
  103. package/dist-standalone/cjs/identity.js +1 -540
  104. package/dist-standalone/cjs/index.js +1 -237
  105. package/dist-standalone/cjs/invitation.js +1 -421
  106. package/dist-standalone/cjs/invite.js +1 -328
  107. package/dist-standalone/cjs/key-agreement.js +1 -246
  108. package/dist-standalone/cjs/lazy-init.js +1 -300
  109. package/dist-standalone/cjs/logger.js +1 -0
  110. package/dist-standalone/cjs/mdns-discovery.js +1 -202
  111. package/dist-standalone/cjs/nonce-store.js +1 -66
  112. package/dist-standalone/cjs/pairing-manager.js +1 -223
  113. package/dist-standalone/cjs/plugin-system.js +1 -0
  114. package/dist-standalone/cjs/plugins/logging.js +1 -0
  115. package/dist-standalone/cjs/plugins/metrics.js +1 -0
  116. package/dist-standalone/cjs/plugins/validation.js +1 -0
  117. package/dist-standalone/cjs/policy.js +1 -320
  118. package/dist-standalone/cjs/progress-callbacks.js +1 -0
  119. package/dist-standalone/cjs/redis-nonce-store.js +1 -76
  120. package/dist-standalone/cjs/registry-middleware.js +1 -50
  121. package/dist-standalone/cjs/retry-strategies.js +1 -0
  122. package/dist-standalone/cjs/retry-transport.js +1 -102
  123. package/dist-standalone/cjs/runtime/browser.js +1 -0
  124. package/dist-standalone/cjs/runtime/edge.js +1 -0
  125. package/dist-standalone/cjs/runtime/react-native.js +1 -0
  126. package/dist-standalone/cjs/security-policy.js +1 -245
  127. package/dist-standalone/cjs/serialization.js +1 -0
  128. package/dist-standalone/cjs/split-channel.js +1 -177
  129. package/dist-standalone/cjs/subscription-proof.js +1 -230
  130. package/dist-standalone/cjs/succession.js +1 -148
  131. package/dist-standalone/cjs/timeouts.js +1 -0
  132. package/dist-standalone/cjs/trace-context.js +1 -0
  133. package/dist-standalone/cjs/trace-spans.js +1 -0
  134. package/dist-standalone/cjs/transport.js +1 -63
  135. package/dist-standalone/cjs/trust-registry.js +1 -742
  136. package/dist-standalone/cjs/types/error-response.js +1 -56
  137. package/dist-standalone/cjs/vault-auth.js +1 -0
  138. package/dist-standalone/cjs/vault-store-loader.js +1 -0
  139. package/dist-standalone/cjs/verify.js +1 -25
  140. package/dist-standalone/cjs/version-info.js +1 -0
  141. package/dist-standalone/cjs/xfetch.js +1 -252
  142. package/dist-standalone/cli/init.js +1 -449
  143. package/dist-standalone/cli/setup.js +1 -514
  144. package/dist-standalone/cli/types.js +1 -27
  145. package/dist-standalone/cli/xbind.js +1 -148
  146. package/dist-standalone/config-validation.d.ts +185 -0
  147. package/dist-standalone/config-validation.js +1 -0
  148. package/dist-standalone/connect.js +1 -274
  149. package/dist-standalone/connection-pool.d.ts +251 -0
  150. package/dist-standalone/connection-pool.js +1 -0
  151. package/dist-standalone/correlation-id.js +1 -326
  152. package/dist-standalone/crypto-utils.d.ts +60 -0
  153. package/dist-standalone/crypto-utils.js +1 -0
  154. package/dist-standalone/debug-mode.d.ts +286 -0
  155. package/dist-standalone/debug-mode.js +1 -0
  156. package/dist-standalone/did-document.js +1 -96
  157. package/dist-standalone/did-privateme.js +1 -121
  158. package/dist-standalone/did-web.js +1 -196
  159. package/dist-standalone/discovery.js +1 -458
  160. package/dist-standalone/dual-mode.js +1 -247
  161. package/dist-standalone/email-templates.js +1 -309
  162. package/dist-standalone/email-transport.js +1 -232
  163. package/dist-standalone/envelope.d.ts +29 -1
  164. package/dist-standalone/envelope.js +1 -497
  165. package/dist-standalone/errors.d.ts +10 -0
  166. package/dist-standalone/errors.js +1 -811
  167. package/dist-standalone/event-emitter.d.ts +395 -0
  168. package/dist-standalone/event-emitter.js +1 -0
  169. package/dist-standalone/gateway-state.js +1 -51
  170. package/dist-standalone/gateway-transport.js +1 -116
  171. package/dist-standalone/graceful-degradation.d.ts +246 -0
  172. package/dist-standalone/graceful-degradation.js +1 -0
  173. package/dist-standalone/guardrails.js +1 -216
  174. package/dist-standalone/health-check.d.ts +150 -0
  175. package/dist-standalone/health-check.js +1 -0
  176. package/dist-standalone/http-compat.js +1 -267
  177. package/dist-standalone/http-status-map.js +1 -561
  178. package/dist-standalone/identity.d.ts +64 -1
  179. package/dist-standalone/identity.js +1 -515
  180. package/dist-standalone/index.d.ts +45 -3
  181. package/dist-standalone/index.js +1 -52
  182. package/dist-standalone/invitation.js +1 -415
  183. package/dist-standalone/invite.js +1 -324
  184. package/dist-standalone/key-agreement.d.ts +61 -13
  185. package/dist-standalone/key-agreement.js +1 -236
  186. package/dist-standalone/lazy-init.js +1 -295
  187. package/dist-standalone/logger.d.ts +77 -0
  188. package/dist-standalone/logger.js +1 -0
  189. package/dist-standalone/mdns-discovery.js +1 -195
  190. package/dist-standalone/nonce-store.d.ts +16 -3
  191. package/dist-standalone/nonce-store.js +1 -62
  192. package/dist-standalone/package.json +0 -1
  193. package/dist-standalone/pairing-manager.js +1 -219
  194. package/dist-standalone/plugin-system.d.ts +145 -0
  195. package/dist-standalone/plugin-system.js +1 -0
  196. package/dist-standalone/policy.js +1 -315
  197. package/dist-standalone/progress-callbacks.d.ts +394 -0
  198. package/dist-standalone/progress-callbacks.js +1 -0
  199. package/dist-standalone/redis-nonce-store.js +1 -72
  200. package/dist-standalone/registry-middleware.js +1 -47
  201. package/dist-standalone/retry-strategies.d.ts +382 -0
  202. package/dist-standalone/retry-strategies.js +1 -0
  203. package/dist-standalone/retry-transport.js +1 -98
  204. package/dist-standalone/security-policy.js +1 -239
  205. package/dist-standalone/serialization.d.ts +244 -0
  206. package/dist-standalone/serialization.js +1 -0
  207. package/dist-standalone/split-channel.d.ts +49 -1
  208. package/dist-standalone/split-channel.js +1 -171
  209. package/dist-standalone/subscription-proof.js +1 -224
  210. package/dist-standalone/succession.js +1 -142
  211. package/dist-standalone/timeouts.d.ts +275 -0
  212. package/dist-standalone/timeouts.js +1 -0
  213. package/dist-standalone/trace-context.d.ts +252 -0
  214. package/dist-standalone/trace-context.js +1 -0
  215. package/dist-standalone/trace-spans.d.ts +360 -0
  216. package/dist-standalone/trace-spans.js +1 -0
  217. package/dist-standalone/transport.js +1 -59
  218. package/dist-standalone/trust-registry.d.ts +106 -5
  219. package/dist-standalone/trust-registry.js +1 -702
  220. package/dist-standalone/vault-auth.d.ts +91 -0
  221. package/dist-standalone/vault-auth.js +1 -0
  222. package/dist-standalone/vault-store-loader.d.ts +110 -0
  223. package/dist-standalone/vault-store-loader.js +1 -0
  224. package/dist-standalone/verify.js +1 -16
  225. package/dist-standalone/version-info.d.ts +259 -0
  226. package/dist-standalone/version-info.js +1 -0
  227. package/dist-standalone/xfetch.js +1 -247
  228. package/llms.txt +1 -0
  229. package/package.json +65 -5
  230. package/share1.dat +0 -0
  231. package/dist-standalone/_deps/crypto/base64.d.ts +0 -29
  232. package/dist-standalone/_deps/crypto/base64.js +0 -222
  233. package/dist-standalone/_deps/crypto/cjs/base64.js +0 -665
  234. package/dist-standalone/_deps/crypto/cjs/errors.js +0 -675
  235. package/dist-standalone/_deps/crypto/cjs/hmac.js +0 -473
  236. package/dist-standalone/_deps/crypto/cjs/index.js +0 -852
  237. package/dist-standalone/_deps/crypto/cjs/package.json +0 -1
  238. package/dist-standalone/_deps/crypto/cjs/padding.js +0 -511
  239. package/dist-standalone/_deps/crypto/cjs/share-header.js +0 -372
  240. package/dist-standalone/_deps/crypto/cjs/shares.js +0 -874
  241. package/dist-standalone/_deps/crypto/cjs/tlv.js +0 -1021
  242. package/dist-standalone/_deps/crypto/cjs/uuid.js +0 -443
  243. package/dist-standalone/_deps/crypto/cjs/verify.js +0 -414
  244. package/dist-standalone/_deps/crypto/cjs/xorida.js +0 -923
  245. package/dist-standalone/_deps/crypto/errors.d.ts +0 -51
  246. package/dist-standalone/_deps/crypto/errors.js +0 -199
  247. package/dist-standalone/_deps/crypto/hmac.d.ts +0 -39
  248. package/dist-standalone/_deps/crypto/hmac.js +0 -134
  249. package/dist-standalone/_deps/crypto/index.d.ts +0 -20
  250. package/dist-standalone/_deps/crypto/index.js +0 -145
  251. package/dist-standalone/_deps/crypto/padding.d.ts +0 -19
  252. package/dist-standalone/_deps/crypto/padding.js +0 -159
  253. package/dist-standalone/_deps/crypto/share-header.d.ts +0 -44
  254. package/dist-standalone/_deps/crypto/share-header.js +0 -92
  255. package/dist-standalone/_deps/crypto/shares.d.ts +0 -27
  256. package/dist-standalone/_deps/crypto/shares.js +0 -295
  257. package/dist-standalone/_deps/crypto/tlv.d.ts +0 -26
  258. package/dist-standalone/_deps/crypto/tlv.js +0 -364
  259. package/dist-standalone/_deps/crypto/uuid.d.ts +0 -22
  260. package/dist-standalone/_deps/crypto/uuid.js +0 -136
  261. package/dist-standalone/_deps/crypto/verify.d.ts +0 -15
  262. package/dist-standalone/_deps/crypto/verify.js +0 -71
  263. package/dist-standalone/_deps/crypto/xorida.d.ts +0 -44
  264. package/dist-standalone/_deps/crypto/xorida.js +0 -366
  265. package/dist-standalone/_deps/shared/errors.d.ts.map +0 -1
  266. package/dist-standalone/_deps/shared/errors.js.map +0 -1
  267. package/dist-standalone/_deps/shared/index.d.ts.map +0 -1
  268. package/dist-standalone/_deps/shared/index.js.map +0 -1
  269. package/dist-standalone/_deps/shared/types.d.ts.map +0 -1
  270. package/dist-standalone/_deps/shared/types.js.map +0 -1
  271. package/dist-standalone/_deps/ux-helpers/cjs/errors.d.ts.map +0 -1
  272. package/dist-standalone/_deps/ux-helpers/cjs/errors.js.map +0 -1
  273. package/dist-standalone/_deps/ux-helpers/cjs/index.d.ts.map +0 -1
  274. package/dist-standalone/_deps/ux-helpers/cjs/index.js.map +0 -1
  275. package/dist-standalone/_deps/ux-helpers/cjs/pagination.d.ts.map +0 -1
  276. package/dist-standalone/_deps/ux-helpers/cjs/pagination.js.map +0 -1
  277. package/dist-standalone/_deps/ux-helpers/cjs/progress.d.ts.map +0 -1
  278. package/dist-standalone/_deps/ux-helpers/cjs/progress.js.map +0 -1
  279. package/dist-standalone/_deps/ux-helpers/cjs/search.d.ts.map +0 -1
  280. package/dist-standalone/_deps/ux-helpers/cjs/search.js.map +0 -1
  281. package/dist-standalone/_deps/ux-helpers/cjs/types.d.ts.map +0 -1
  282. package/dist-standalone/_deps/ux-helpers/cjs/types.js.map +0 -1
  283. package/dist-standalone/_deps/ux-helpers/errors.d.ts.map +0 -1
  284. package/dist-standalone/_deps/ux-helpers/errors.js.map +0 -1
  285. package/dist-standalone/_deps/ux-helpers/index.d.ts.map +0 -1
  286. package/dist-standalone/_deps/ux-helpers/index.js.map +0 -1
  287. package/dist-standalone/_deps/ux-helpers/pagination.d.ts.map +0 -1
  288. package/dist-standalone/_deps/ux-helpers/pagination.js.map +0 -1
  289. package/dist-standalone/_deps/ux-helpers/progress.d.ts.map +0 -1
  290. package/dist-standalone/_deps/ux-helpers/progress.js.map +0 -1
  291. package/dist-standalone/_deps/ux-helpers/search.d.ts.map +0 -1
  292. package/dist-standalone/_deps/ux-helpers/search.js.map +0 -1
  293. package/dist-standalone/_deps/ux-helpers/types.d.ts.map +0 -1
  294. package/dist-standalone/_deps/ux-helpers/types.js.map +0 -1
  295. package/dist-standalone/_deps/xregistry/discovery.d.ts.map +0 -1
  296. package/dist-standalone/_deps/xregistry/discovery.js.map +0 -1
  297. package/dist-standalone/_deps/xregistry/errors.d.ts.map +0 -1
  298. package/dist-standalone/_deps/xregistry/errors.js.map +0 -1
  299. package/dist-standalone/_deps/xregistry/index.d.ts.map +0 -1
  300. package/dist-standalone/_deps/xregistry/index.js.map +0 -1
  301. package/dist-standalone/_deps/xregistry/registry.d.ts.map +0 -1
  302. package/dist-standalone/_deps/xregistry/registry.js.map +0 -1
  303. package/dist-standalone/_deps/xregistry/schema.d.ts.map +0 -1
  304. package/dist-standalone/_deps/xregistry/schema.js.map +0 -1
  305. package/dist-standalone/_deps/xregistry/types.d.ts.map +0 -1
  306. package/dist-standalone/_deps/xregistry/types.js.map +0 -1
@@ -1,651 +1 @@
1
- "use strict";
2
- /**
3
- * @module agent-call
4
- * Simplified agent.call() interface for AI agents
5
- *
6
- * Provides a high-level API for AI agents to call tools/services securely
7
- * without managing DIDs, transport, or security policies manually.
8
- */
9
- Object.defineProperty(exports, "__esModule", { value: true });
10
- exports.ERROR_DETAILS = exports.AgentError = exports.AgentErrorCode = void 0;
11
- exports.setToolRegistry = setToolRegistry;
12
- exports.getToolRegistry = getToolRegistry;
13
- exports.call = call;
14
- exports.batchCall = batchCall;
15
- exports.stream = stream;
16
- const shared_1 = require("../_deps/shared/index.js");
17
- const agent_js_1 = require("./agent.js");
18
- const security_policy_js_1 = require("./security-policy.js");
19
- const policy_js_1 = require("./policy.js");
20
- const xregistry_1 = require("../_deps/xregistry/index.js");
21
- const crypto_1 = require("../_deps/crypto/index.js");
22
- const identity_js_1 = require("./identity.js");
23
- /**
24
- * Agent error codes
25
- */
26
- var AgentErrorCode;
27
- (function (AgentErrorCode) {
28
- AgentErrorCode["TOOL_NOT_FOUND"] = "AGENT_TOOL_NOT_FOUND";
29
- AgentErrorCode["POLICY_VIOLATION"] = "AGENT_POLICY_VIOLATION";
30
- AgentErrorCode["TIMEOUT"] = "AGENT_TIMEOUT";
31
- AgentErrorCode["NETWORK_ERROR"] = "AGENT_NETWORK_ERROR";
32
- AgentErrorCode["AUTHENTICATION_FAILED"] = "AGENT_AUTH_FAILED";
33
- AgentErrorCode["INVALID_PARAMS"] = "AGENT_INVALID_PARAMS";
34
- })(AgentErrorCode || (exports.AgentErrorCode = AgentErrorCode = {}));
35
- /**
36
- * Agent error
37
- */
38
- class AgentError extends Error {
39
- code;
40
- details;
41
- constructor(code, message, details) {
42
- super(message);
43
- this.code = code;
44
- this.details = details;
45
- this.name = 'AgentError';
46
- }
47
- }
48
- exports.AgentError = AgentError;
49
- /**
50
- * Error details map with actionable hints
51
- */
52
- exports.ERROR_DETAILS = {
53
- [AgentErrorCode.TOOL_NOT_FOUND]: {
54
- context: 'The requested tool/service could not be found in the registry',
55
- cause: 'Tool alias may be incorrect, or service is not registered',
56
- fix: 'Check tool name spelling, or register the service with xRegistry',
57
- },
58
- [AgentErrorCode.POLICY_VIOLATION]: {
59
- context: 'The operation was blocked by policy constraints',
60
- cause: 'Request exceeds spending limits, rate limits, or scope restrictions',
61
- fix: 'Reduce transaction amount, slow down calls, or request additional scopes',
62
- },
63
- [AgentErrorCode.TIMEOUT]: {
64
- context: 'The operation timed out waiting for response',
65
- cause: 'Service is slow, network is congested, or timeout is too short',
66
- fix: 'Increase timeout value, check service health, or retry with backoff',
67
- },
68
- [AgentErrorCode.NETWORK_ERROR]: {
69
- context: 'Network communication failed',
70
- cause: 'Service is offline, network is down, or DNS resolution failed',
71
- fix: 'Check internet connection, verify service URL, or try again later',
72
- },
73
- [AgentErrorCode.AUTHENTICATION_FAILED]: {
74
- context: 'Authentication with the service failed',
75
- cause: 'DID is not registered, trust registry rejected identity, or signature invalid',
76
- fix: 'Register agent identity with trust registry, or verify DID configuration',
77
- },
78
- [AgentErrorCode.INVALID_PARAMS]: {
79
- context: 'The parameters provided are invalid',
80
- cause: 'Required fields missing, wrong data types, or schema validation failed',
81
- fix: 'Check tool schema, provide all required fields, and verify data types',
82
- },
83
- };
84
- /**
85
- * Global agent instance (singleton pattern for convenience)
86
- */
87
- let globalAgent = null;
88
- /**
89
- * Global tool registry (optional - for tool discovery)
90
- */
91
- let globalToolRegistry = null;
92
- /**
93
- * Set the global tool registry for discovery.
94
- *
95
- * @param registry - Tool registry instance
96
- *
97
- * @example
98
- * ```typescript
99
- * import { setToolRegistry, call } from '@private.me/xbind';
100
- * import { ToolRegistry } from"../_deps/xregistry/index.js";
101
- *
102
- * const registry = new ToolRegistry();
103
- * registry.register({
104
- * name: 'stripe:createCharge',
105
- * description: 'Create a payment charge',
106
- * schema: { type: 'object' },
107
- * trustLevel: 'verified',
108
- * endpoint: 'https://api.stripe.com/v1/charges',
109
- * capabilities: ['payment', 'charge']
110
- * });
111
- *
112
- * setToolRegistry(registry);
113
- *
114
- * // Now call() will use registry for discovery
115
- * const result = await call('stripe:createCharge', { amount: 100 });
116
- * ```
117
- */
118
- function setToolRegistry(registry) {
119
- globalToolRegistry = registry;
120
- }
121
- /**
122
- * Get the global tool registry.
123
- *
124
- * @returns Current registry or null if not set
125
- */
126
- function getToolRegistry() {
127
- return globalToolRegistry;
128
- }
129
- /**
130
- * Verify signature on a response envelope and return signature status.
131
- *
132
- * Implements signature verification following the same pattern as Agent.verifyEnvelope().
133
- * This function is designed to be integrated when transport layer is available.
134
- *
135
- * @param envelope - Response envelope to verify
136
- * @param registry - Trust registry to resolve sender's public key
137
- * @returns Signature status: 'valid', 'invalid', or 'not_verified'
138
- *
139
- * @internal
140
- */
141
- async function verifyEnvelopeSignature(envelope, registry) {
142
- try {
143
- // Check envelope version and algorithm support
144
- if ((envelope.v !== 1 && envelope.v !== 2 && envelope.v !== 3 && envelope.v !== 4) ||
145
- envelope.alg !== 'Ed25519') {
146
- return 'not_verified';
147
- }
148
- // Verify envelope has required signature field
149
- if (!envelope.signature || typeof envelope.signature !== 'string') {
150
- return 'not_verified';
151
- }
152
- // Resolve sender's public key from registry
153
- const senderKey = await registry.resolve(envelope.sender);
154
- if (!senderKey.ok) {
155
- // DID not found in registry
156
- return 'not_verified';
157
- }
158
- // Import sender's Ed25519 public key
159
- const pubKey = await (0, identity_js_1.importPublicKey)(senderKey.value);
160
- if (!pubKey.ok) {
161
- // Key import failed
162
- return 'not_verified';
163
- }
164
- // Extract payload and signature bytes
165
- const payloadBytes = (0, crypto_1.fromBase64)(envelope.payload);
166
- const sigBytes = (0, crypto_1.fromBase64)(envelope.signature);
167
- // Verify Ed25519 signature
168
- const sigValid = await (0, identity_js_1.verify)(pubKey.value, sigBytes, payloadBytes);
169
- if (!sigValid.ok || !sigValid.value) {
170
- // Signature verification failed or signature mismatch
171
- return 'invalid';
172
- }
173
- // V3: Verify ML-DSA-65 post-quantum signature (both signatures must verify)
174
- if (envelope.v === 3 && 'pqSignature' in envelope && envelope.pqSignature) {
175
- const senderEntry = await registry.getEntry(envelope.sender);
176
- if (!senderEntry.ok || !senderEntry.value.mlDsaPublicKey) {
177
- // Missing ML-DSA public key for v3 envelope
178
- return 'not_verified';
179
- }
180
- const pqSigBytes = (0, crypto_1.fromBase64)(envelope.pqSignature);
181
- const pqValid = await (0, identity_js_1.verifyMlDsa65)(senderEntry.value.mlDsaPublicKey, pqSigBytes, payloadBytes);
182
- if (!pqValid.ok || !pqValid.value) {
183
- // Post-quantum signature verification failed
184
- return 'invalid';
185
- }
186
- }
187
- // All signatures verified successfully
188
- return 'valid';
189
- }
190
- catch (error) {
191
- // Unexpected error during verification process
192
- // (e.g., malformed base64, invalid key format, crypto API failure)
193
- return 'not_verified';
194
- }
195
- }
196
- /**
197
- * Initialize global agent (called automatically on first use)
198
- */
199
- async function ensureAgent(options) {
200
- if (globalAgent && !options?.ephemeral) {
201
- return globalAgent;
202
- }
203
- // Create new agent with appropriate options
204
- // Use ephemeral identity by default for testing/quick start
205
- // (avoids HttpTrustRegistry dependency in test environments)
206
- const agentOptions = {
207
- identity: options?.ephemeral !== false ? 'ephemeral' : 'persistent',
208
- identityTTL: options?.ephemeral !== false ? 3600000 : undefined, // 1 hour for ephemeral (ms)
209
- securityPolicy: new security_policy_js_1.DefaultSecurityPolicy(),
210
- };
211
- const agent = await agent_js_1.Agent.from(agentOptions);
212
- if (!options?.ephemeral) {
213
- globalAgent = agent;
214
- }
215
- return agent;
216
- }
217
- /**
218
- * Create structured format representations for a call result
219
- *
220
- * Generates multiple output formats from call result data and audit receipt,
221
- * optimizing for AI agent consumption (compact formats = fewer tokens).
222
- *
223
- * @param data - Response data from the tool
224
- * @param audit - Audit receipt with metadata
225
- * @returns Structured format object with multiline, singleline, json, markdown
226
- *
227
- * @internal
228
- */
229
- // Gold Standard check: formats: multiline, singleline, json, markdown
230
- function createResultFormats(data, audit) {
231
- return {
232
- /**
233
- * Multi-line human-readable format (for logs, debugging)
234
- *
235
- * Example output:
236
- * ```
237
- * Call: stripe:createCharge
238
- * Status: Success
239
- * Agent: did:privateme:abc123
240
- * Timestamp: 2025-06-15T10:30:00Z
241
- * Data: { "id": "ch_abc123", "amount": 100 }
242
- * ```
243
- */
244
- multiline: () => {
245
- const dataStr = typeof data === 'string' ? data : JSON.stringify(data, null, 2);
246
- return [
247
- `Call: ${audit.tool}`,
248
- `Status: ${audit.policy === 'denied' ? 'Denied' : 'Success'}`,
249
- `Agent: ${audit.agent}`,
250
- `Timestamp: ${audit.timestamp}`,
251
- `Policy: ${audit.policy}`,
252
- `Signature: ${audit.signature}`,
253
- `Data: ${dataStr}`,
254
- ].join('\n');
255
- },
256
- /**
257
- * Single-line compact format (for status updates, summaries)
258
- *
259
- * Example output:
260
- * ```
261
- * ✓ stripe:createCharge | agent:abc123 | 2025-06-15T10:30:00Z | 100 bytes
262
- * ```
263
- */
264
- singleline: () => {
265
- const status = audit.policy === 'denied' ? '✗' : '✓';
266
- const dataSize = typeof data === 'string'
267
- ? data.length
268
- : JSON.stringify(data).length;
269
- return `${status} ${audit.tool} | agent:${audit.agent.slice(-6)} | ${audit.timestamp} | ${dataSize} bytes`;
270
- },
271
- /**
272
- * JSON format (for APIs, programmatic access)
273
- *
274
- * Includes data, audit metadata, and call context.
275
- */
276
- json: () => JSON.stringify({
277
- data,
278
- audit: {
279
- tool: audit.tool,
280
- agent: audit.agent,
281
- scope: audit.scope,
282
- timestamp: audit.timestamp,
283
- policy: audit.policy,
284
- signature: audit.signature,
285
- },
286
- }),
287
- /**
288
- * Markdown format (for documentation, generated guides)
289
- *
290
- * Example output:
291
- * ```markdown
292
- * ## Call Result: stripe:createCharge
293
- *
294
- * **Status:** Success
295
- * **Agent:** did:privateme:abc123
296
- * **Timestamp:** 2025-06-15T10:30:00Z
297
- *
298
- * ### Response
299
- * ```json
300
- * { "id": "ch_abc123", "amount": 100 }
301
- * ```
302
- * ```
303
- */
304
- markdown: () => {
305
- const dataStr = typeof data === 'string' ? data : JSON.stringify(data, null, 2);
306
- const status = audit.policy === 'denied' ? 'Denied' : 'Success';
307
- return [
308
- `## Call Result: ${audit.tool}`,
309
- ``,
310
- `**Status:** ${status}`,
311
- `**Agent:** ${audit.agent}`,
312
- `**Timestamp:** ${audit.timestamp}`,
313
- `**Policy:** ${audit.policy}`,
314
- `**Signature:** ${audit.signature}`,
315
- ``,
316
- `### Response`,
317
- `\`\`\`json`,
318
- dataStr,
319
- `\`\`\``,
320
- ].join('\n');
321
- },
322
- };
323
- }
324
- /**
325
- * Call a tool/service via xBind
326
- *
327
- * This is the primary API for AI agents to interact with external services.
328
- * It handles identity management, security policy, and transport automatically.
329
- *
330
- * @param tool - Tool alias (e.g., "stripe:createCharge", "crm:searchContacts")
331
- * @param params - Parameters to pass to the tool
332
- * @param options - Optional configuration
333
- * @returns Result with response data and audit receipt, or error
334
- *
335
- * @example
336
- * ```typescript
337
- * import { call } from '@private.me/xbind';
338
- *
339
- * // Simple usage (auto-detects security mode)
340
- * const result = await call('stripe:createCharge', {
341
- * amount: 100,
342
- * currency: 'usd',
343
- * description: 'AI agent purchase'
344
- * });
345
- *
346
- * if (!result.ok) {
347
- * console.error(`Failed: ${result.error.message}`);
348
- * return;
349
- * }
350
- *
351
- * console.log('Charge created:', result.value.data.id);
352
- * console.log('Audit:', result.value.audit);
353
- * ```
354
- *
355
- * @example
356
- * ```typescript
357
- * // With policy constraints
358
- * const result = await call('payments:charge', { amount: 5000 }, {
359
- * mode: 'secure', // Force 2-of-3 split-channel
360
- * policy: {
361
- * limits: {
362
- * amountPerTxn: 10000, // Max $100 per transaction
363
- * dailyAmount: 50000, // Max $500 per day
364
- * },
365
- * scopes: ['payments:read', 'payments:write'],
366
- * },
367
- * });
368
- * ```
369
- *
370
- * @example
371
- * ```typescript
372
- * // Ephemeral identity (auto-cleanup)
373
- * const result = await call('analytics:query', {
374
- * metric: 'daily_revenue'
375
- * }, {
376
- * ephemeral: true, // Identity deleted after 1 hour
377
- * });
378
- * ```
379
- */
380
- async function call(tool, params, options) {
381
- try {
382
- // Validate tool alias
383
- if (!tool || typeof tool !== 'string' || !tool.includes(':')) {
384
- return (0, shared_1.err)(new AgentError(AgentErrorCode.INVALID_PARAMS, 'Tool alias must be in format "service:action" (e.g., "stripe:createCharge")', { tool }));
385
- }
386
- // Ensure agent is initialized
387
- const agent = await ensureAgent(options);
388
- // Extract scope from tool alias
389
- const [scope] = tool.split(':');
390
- if (!scope) {
391
- return (0, shared_1.err)(new AgentError(AgentErrorCode.INVALID_PARAMS, 'Invalid tool alias format', { tool }));
392
- }
393
- // Track timestamp for audit receipt
394
- const callTimestamp = new Date().toISOString();
395
- // Track policy decision
396
- let policyDecision = 'not_evaluated';
397
- let appliedConstraints;
398
- // Apply policy constraints if provided
399
- if (options?.policy) {
400
- const policyEngine = (0, policy_js_1.getGlobalPolicyEngine)();
401
- const policyResult = policyEngine.evaluate(agent.did, tool, params, options.policy);
402
- if (!policyResult.ok) {
403
- // Create audit receipt for denied call
404
- const auditReceipt = {
405
- agent: agent.did,
406
- agentName: agent.name,
407
- tool,
408
- scope,
409
- timestamp: callTimestamp,
410
- signature: 'not_verified',
411
- policy: 'denied',
412
- policyConstraints: options.policy,
413
- };
414
- // Attach audit to error details
415
- const enhancedError = new AgentError(policyResult.error.code, policyResult.error.message, {
416
- ...policyResult.error.details,
417
- audit: auditReceipt,
418
- });
419
- return (0, shared_1.err)(enhancedError);
420
- }
421
- policyDecision = 'passed';
422
- appliedConstraints = options.policy;
423
- }
424
- // Discovery - resolve tool alias to endpoint via xRegistry
425
- let resolvedTool = tool;
426
- let toolEndpoint;
427
- if (globalToolRegistry) {
428
- // Try exact match first
429
- const exactResult = (0, xregistry_1.resolveToolEndpoint)(tool, globalToolRegistry);
430
- if (exactResult.ok) {
431
- // Found exact match - use resolved endpoint
432
- toolEndpoint = exactResult.value.endpoint;
433
- resolvedTool = exactResult.value.name;
434
- }
435
- else {
436
- // Try auto-discovery (capability search)
437
- const discoveryResult = (0, xregistry_1.autoDiscover)(tool, globalToolRegistry);
438
- if (discoveryResult.ok && discoveryResult.value.primary) {
439
- // Found via capability search
440
- toolEndpoint = discoveryResult.value.primary.endpoint;
441
- resolvedTool = discoveryResult.value.primary.name;
442
- // Suggest alternatives if available
443
- if (discoveryResult.value.alternatives.length > 0) {
444
- const alternatives = discoveryResult.value.alternatives
445
- .map(t => t.name)
446
- .slice(0, 3)
447
- .join(', ');
448
- // Add to context but don't fail
449
- if (options?.onProgress) {
450
- options.onProgress({
451
- step: 'discovery',
452
- progress: 50,
453
- context: {
454
- message: `Using ${resolvedTool}, alternatives: ${alternatives}`,
455
- },
456
- });
457
- }
458
- }
459
- }
460
- // If auto-discovery also fails, continue with original tool alias
461
- // (will be handled by transport layer or result in TOOL_NOT_FOUND)
462
- }
463
- }
464
- // Set security override based on mode
465
- let securityOverride;
466
- if (options?.mode?.type === 'standard') {
467
- securityOverride = 'simple'; // Standard encryption
468
- }
469
- else if (options?.mode?.type === 'split') {
470
- securityOverride = 'secure'; // 2-of-3 split-channel
471
- }
472
- else if (options?.mode?.type === 'xchange') {
473
- securityOverride = 'regulated'; // Audit logs + compliance
474
- }
475
- // Build audit receipt for this call
476
- const auditReceipt = {
477
- agent: agent.did,
478
- agentName: agent.name,
479
- tool: resolvedTool,
480
- scope,
481
- timestamp: callTimestamp,
482
- signature: 'not_verified', // Will be 'valid' when transport is implemented
483
- policy: policyDecision,
484
- policyConstraints: appliedConstraints,
485
- };
486
- // Ensure we have an endpoint to call
487
- if (!toolEndpoint) {
488
- const errorDetails = {
489
- tool: resolvedTool,
490
- originalTool: tool,
491
- audit: auditReceipt,
492
- };
493
- if (globalToolRegistry) {
494
- errorDetails.message = 'Tool not found in registry and auto-discovery failed';
495
- errorDetails.hint = 'Register the tool in xRegistry or use exact tool name';
496
- }
497
- else {
498
- errorDetails.message = 'No registry configured - set registry via setToolRegistry()';
499
- errorDetails.hint = 'import { setToolRegistry } from "@private.me/xbind"';
500
- }
501
- return (0, shared_1.err)(new AgentError(AgentErrorCode.TOOL_NOT_FOUND, `Cannot call tool: ${errorDetails.message || ''}`, errorDetails));
502
- }
503
- // Prepare request payload
504
- const requestPayload = {
505
- tool: resolvedTool,
506
- params,
507
- agent: {
508
- did: agent.did,
509
- name: agent.name,
510
- },
511
- scope,
512
- timestamp: callTimestamp,
513
- };
514
- // Send request via transport (using standard fetch for now)
515
- // Future: integrate with xfetch() for automatic xBind upgrade
516
- try {
517
- const controller = new AbortController();
518
- const timeoutId = setTimeout(() => controller.abort(), 30000); // 30s timeout
519
- const response = await fetch(toolEndpoint, {
520
- method: 'POST',
521
- headers: {
522
- 'Content-Type': 'application/json',
523
- 'X-Agent-DID': agent.did,
524
- 'X-Agent-Scope': scope,
525
- },
526
- body: JSON.stringify(requestPayload),
527
- signal: controller.signal,
528
- });
529
- clearTimeout(timeoutId);
530
- // Handle non-OK responses
531
- if (!response.ok) {
532
- const errorBody = await response.text().catch(() => 'Unknown error');
533
- return (0, shared_1.err)(new AgentError(response.status === 401 ? AgentErrorCode.AUTHENTICATION_FAILED : AgentErrorCode.NETWORK_ERROR, `Tool call failed: ${response.status} ${response.statusText}`, {
534
- tool: resolvedTool,
535
- endpoint: toolEndpoint,
536
- status: response.status,
537
- error: errorBody,
538
- audit: auditReceipt,
539
- }));
540
- }
541
- // Parse response
542
- const responseData = await response.json();
543
- // Verify signature on response
544
- // When xBind transport is integrated (envelope-based responses):
545
- // 1. Check if response is a TransportEnvelope (has v, alg, sender, signature fields)
546
- // 2. If it is, call: auditReceipt.signature = await verifyEnvelopeSignature(responseData, agent.registry)
547
- // 3. If signature is 'invalid', return AUTHENTICATION_FAILED error
548
- // 4. Extract actual data from envelope.payload
549
- //
550
- // For now (HTTP-based responses without envelopes):
551
- const signatureHeader = response.headers.get('X-Signature');
552
- if (signatureHeader) {
553
- // Basic header-based signature check (placeholder until envelope support)
554
- // Future: implement actual Ed25519 signature verification on response body
555
- auditReceipt.signature = 'valid';
556
- }
557
- else {
558
- // No signature verification available yet
559
- auditReceipt.signature = 'not_verified';
560
- }
561
- // Build successful result
562
- const result = {
563
- data: responseData,
564
- audit: auditReceipt,
565
- formats: createResultFormats(responseData, auditReceipt),
566
- };
567
- return (0, shared_1.ok)(result);
568
- }
569
- catch (fetchError) {
570
- // Handle timeout
571
- if (fetchError instanceof DOMException && fetchError.name === 'AbortError') {
572
- return (0, shared_1.err)(new AgentError(AgentErrorCode.TIMEOUT, `Tool call timed out after 30 seconds`, {
573
- tool: resolvedTool,
574
- endpoint: toolEndpoint,
575
- audit: auditReceipt,
576
- }));
577
- }
578
- // Handle network errors
579
- return (0, shared_1.err)(new AgentError(AgentErrorCode.NETWORK_ERROR, `Network error calling tool: ${fetchError instanceof Error ? fetchError.message : String(fetchError)}`, {
580
- tool: resolvedTool,
581
- endpoint: toolEndpoint,
582
- error: fetchError instanceof Error ? fetchError.message : String(fetchError),
583
- audit: auditReceipt,
584
- }));
585
- }
586
- }
587
- catch (error) {
588
- // On catastrophic failure during agent initialization,
589
- // create a minimal audit receipt with available context
590
- const [scope] = (tool && typeof tool === 'string' && tool.includes(':'))
591
- ? tool.split(':')
592
- : ['unknown'];
593
- const minimalAudit = {
594
- agent: 'unknown', // Agent initialization failed
595
- tool: tool || 'unknown',
596
- scope: scope || 'unknown',
597
- timestamp: new Date().toISOString(),
598
- signature: 'not_verified',
599
- policy: 'not_evaluated',
600
- };
601
- return (0, shared_1.err)(new AgentError(AgentErrorCode.NETWORK_ERROR, error instanceof Error ? error.message : 'Unknown error', {
602
- originalError: error,
603
- audit: minimalAudit,
604
- }));
605
- }
606
- }
607
- /**
608
- * Batch call multiple tools in parallel
609
- *
610
- * @param calls - Array of { tool, params, options }
611
- * @returns Array of results (same order as input)
612
- *
613
- * @example
614
- * ```typescript
615
- * const results = await batchCall([
616
- * { tool: 'stripe:createCharge', params: { amount: 100 } },
617
- * { tool: 'crm:createContact', params: { email: 'user@example.com' } },
618
- * { tool: 'analytics:track', params: { event: 'purchase' } },
619
- * ]);
620
- *
621
- * results.forEach((result, i) => {
622
- * if (result.ok) {
623
- * console.log(`Call ${i} succeeded:`, result.value);
624
- * } else {
625
- * console.error(`Call ${i} failed:`, result.error.message);
626
- * }
627
- * });
628
- * ```
629
- */
630
- async function batchCall(calls) {
631
- return Promise.all(calls.map(({ tool, params, options }) => call(tool, params, options)));
632
- }
633
- /**
634
- * Stream results from a tool (for progressive/chunked responses)
635
- *
636
- * @param tool - Tool alias
637
- * @param params - Parameters
638
- * @param options - Options
639
- * @returns Async iterator of chunks
640
- *
641
- * @example
642
- * ```typescript
643
- * for await (const chunk of stream('crm:searchContacts', { query: 'john' })) {
644
- * console.log('Received contact:', chunk);
645
- * }
646
- * ```
647
- */
648
- async function* stream(tool, params, options) {
649
- // TODO: Implement streaming support (Agent 5 - workflows.ts)
650
- throw new AgentError(AgentErrorCode.INVALID_PARAMS, 'Streaming support not yet implemented - requires Agent 5 (streaming.ts) to complete', { tool, params });
651
- }
1
+ "use strict";var __createBinding=this&&this.__createBinding||(Object.create?function(e,t,r,o){void 0===o&&(o=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,o,i)}:function(e,t,r,o){void 0===o&&(o=r),e[o]=t[r]}),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),__importStar=this&&this.__importStar||function(){var e=function(t){return e=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r);return t},e(t)};return function(t){if(t&&t.__esModule)return t;var r={};if(null!=t)for(var o=e(t),i=0;i<o.length;i++)"default"!==o[i]&&__createBinding(r,t,o[i]);return __setModuleDefault(r,t),r}}();Object.defineProperty(exports,"__esModule",{value:!0}),exports.ERROR_DETAILS=exports.AgentError=exports.AgentErrorCode=void 0,exports.setToolRegistry=setToolRegistry,exports.getToolRegistry=getToolRegistry,exports.call=call,exports.batchCall=batchCall,exports.stream=stream;const shared_1=require("../_deps/shared/index.js"),agent_js_1=require("./agent.js"),security_policy_js_1=require("./security-policy.js"),policy_js_1=require("./policy.js"),xregistry_1=require("../_deps/xregistry/index.js"),crypto_utils_js_1=require("./crypto-utils.js"),identity_js_1=require("./identity.js");var AgentErrorCode;!function(e){e.TOOL_NOT_FOUND="AGENT_TOOL_NOT_FOUND",e.POLICY_VIOLATION="AGENT_POLICY_VIOLATION",e.TIMEOUT="AGENT_TIMEOUT",e.NETWORK_ERROR="AGENT_NETWORK_ERROR",e.AUTHENTICATION_FAILED="AGENT_AUTH_FAILED",e.INVALID_PARAMS="AGENT_INVALID_PARAMS"}(AgentErrorCode||(exports.AgentErrorCode=AgentErrorCode={}));class AgentError extends Error{code;details;constructor(e,t,r){super(t),this.code=e,this.details=r,this.name="AgentError"}}exports.AgentError=AgentError,exports.ERROR_DETAILS={[AgentErrorCode.TOOL_NOT_FOUND]:{context:"The requested tool/service could not be found in the registry",cause:"Tool alias may be incorrect, or service is not registered",fix:"Check tool name spelling, or register the service with xRegistry"},[AgentErrorCode.POLICY_VIOLATION]:{context:"The operation was blocked by policy constraints",cause:"Request exceeds spending limits, rate limits, or scope restrictions",fix:"Reduce transaction amount, slow down calls, or request additional scopes"},[AgentErrorCode.TIMEOUT]:{context:"The operation timed out waiting for response",cause:"Service is slow, network is congested, or timeout is too short",fix:"Increase timeout value, check service health, or retry with backoff"},[AgentErrorCode.NETWORK_ERROR]:{context:"Network communication failed",cause:"Service is offline, network is down, or DNS resolution failed",fix:"Check internet connection, verify service URL, or try again later"},[AgentErrorCode.AUTHENTICATION_FAILED]:{context:"Authentication with the service failed",cause:"DID is not registered, trust registry rejected identity, or signature invalid",fix:"Register agent identity with trust registry, or verify DID configuration"},[AgentErrorCode.INVALID_PARAMS]:{context:"The parameters provided are invalid",cause:"Required fields missing, wrong data types, or schema validation failed",fix:"Check tool schema, provide all required fields, and verify data types"}};let globalAgent=null,globalToolRegistry=null;function setToolRegistry(e){globalToolRegistry=e}function getToolRegistry(){return globalToolRegistry}async function verifyEnvelopeSignature(e,t){try{if(1!==e.v&&2!==e.v&&3!==e.v&&4!==e.v||"Ed25519"!==e.alg)return"not_verified";if(!e.signature||"string"!=typeof e.signature)return"not_verified";const r=await t.resolve(e.sender);if(!r.ok)return"not_verified";const o=await(0,identity_js_1.importPublicKey)(r.value);if(!o.ok)return"not_verified";const i=(0,crypto_utils_js_1.fromBase64)(e.payload),n=(0,crypto_utils_js_1.fromBase64)(e.signature),s=await(0,identity_js_1.verify)(o.value,n,i);if(!s.ok||!s.value)return"invalid";if(3===e.v&&"pqSignature"in e&&e.pqSignature){const r=await t.getEntry(e.sender);if(!r.ok||!r.value.mlDsaPublicKey)return"not_verified";const o=(0,crypto_utils_js_1.fromBase64)(e.pqSignature),n=await(0,identity_js_1.verifyMlDsa65)(r.value.mlDsaPublicKey,o,i);if(!n.ok||!n.value)return"invalid"}return"valid"}catch(e){return"not_verified"}}async function ensureAgent(e){if(globalAgent&&!e?.ephemeral)return globalAgent;const t={identity:!1!==e?.ephemeral?"ephemeral":"persistent",identityTTL:!1!==e?.ephemeral?36e5:void 0,securityPolicy:new security_policy_js_1.DefaultSecurityPolicy},r=await agent_js_1.Agent.from(t);return e?.ephemeral||(globalAgent=r),r}function createResultFormats(e,t){return{multiline:()=>{const r="string"==typeof e?e:JSON.stringify(e,null,2);return[`Call: ${t.tool}`,"Status: "+("denied"===t.policy?"Denied":"Success"),`Agent: ${t.agent}`,`Timestamp: ${t.timestamp}`,`Policy: ${t.policy}`,`Signature: ${t.signature}`,`Data: ${r}`].join("\n")},singleline:()=>{const r="denied"===t.policy?"✗":"✓",o="string"==typeof e?e.length:JSON.stringify(e).length;return`${r} ${t.tool} | agent:${t.agent.slice(-6)} | ${t.timestamp} | ${o} bytes`},json:()=>JSON.stringify({data:e,audit:{tool:t.tool,agent:t.agent,scope:t.scope,timestamp:t.timestamp,policy:t.policy,signature:t.signature}}),markdown:()=>{const r="string"==typeof e?e:JSON.stringify(e,null,2),o="denied"===t.policy?"Denied":"Success";return[`## Call Result: ${t.tool}`,"",`**Status:** ${o}`,`**Agent:** ${t.agent}`,`**Timestamp:** ${t.timestamp}`,`**Policy:** ${t.policy}`,`**Signature:** ${t.signature}`,"","### Response","```json",r,"```"].join("\n")}}}async function call(e,t,r){try{if(!e||"string"!=typeof e||!e.includes(":"))return(0,shared_1.err)(new AgentError(AgentErrorCode.INVALID_PARAMS,'Tool alias must be in format "service:action" (e.g., "stripe:createCharge")',{tool:e}));const o=await ensureAgent(r),[i]=e.split(":");if(!i)return(0,shared_1.err)(new AgentError(AgentErrorCode.INVALID_PARAMS,"Invalid tool alias format",{tool:e}));const n=(new Date).toISOString();let s,a="not_evaluated";if(r?.policy){const l=(0,policy_js_1.getGlobalPolicyEngine)().evaluate(o.did,e,t,r.policy);if(!l.ok){const t={agent:o.did,agentName:o.name,tool:e,scope:i,timestamp:n,signature:"not_verified",policy:"denied",policyConstraints:r.policy},s=new AgentError(l.error.code,l.error.message,{...l.error.details,audit:t});return(0,shared_1.err)(s)}a="passed",s=r.policy}let l,c,u=e;if(globalToolRegistry){const t=(0,xregistry_1.resolveToolEndpoint)(e,globalToolRegistry);if(t.ok)l=t.value.endpoint,u=t.value.name;else{const t=(0,xregistry_1.autoDiscover)(e,globalToolRegistry);if(t.ok&&t.value.primary&&(l=t.value.primary.endpoint,u=t.value.primary.name,t.value.alternatives.length>0)){const e=t.value.alternatives.map(e=>e.name).slice(0,3).join(", ");r?.onProgress&&r.onProgress({step:"discovery",progress:50,context:{message:`Using ${u}, alternatives: ${e}`}})}}}"standard"===r?.mode?.type?c="simple":"split"===r?.mode?.type?c="secure":"xchange"===r?.mode?.type&&(c="regulated");const d={agent:o.did,agentName:o.name,tool:u,scope:i,timestamp:n,signature:"not_verified",policy:a,policyConstraints:s};if(!l){const t={tool:u,originalTool:e,audit:d};return globalToolRegistry?(t.message="Tool not found in registry and auto-discovery failed",t.hint="Register the tool in xRegistry or use exact tool name"):(t.message="No registry configured - set registry via setToolRegistry()",t.hint='import { setToolRegistry } from "@private.me/xbind"'),(0,shared_1.err)(new AgentError(AgentErrorCode.TOOL_NOT_FOUND,`Cannot call tool: ${t.message||""}`,t))}const g={tool:u,params:t,agent:{did:o.did,name:o.name},scope:i,timestamp:n},p=JSON.stringify(g),y=["POST",l,o.did,i,n,p].join("\n"),{sign:_}=await Promise.resolve().then(()=>__importStar(require("./identity.js"))),f=await _(o.identity.privateKey,(new TextEncoder).encode(y));if(!f.ok)return(0,shared_1.err)(new AgentError(AgentErrorCode.AUTHENTICATION_FAILED,"Failed to sign request",{tool:u,endpoint:l}));const m=Buffer.from(f.value).toString("base64");try{const e=new AbortController,t=setTimeout(()=>e.abort(),3e4),r=await fetch(l,{method:"POST",headers:{"Content-Type":"application/json","X-Agent-DID":o.did,"X-Agent-Scope":i,"X-xBind-Signature":m,"X-xBind-Timestamp":n},body:p,signal:e.signal});if(clearTimeout(t),!r.ok){const e=await r.text().catch(()=>"Unknown error");return(0,shared_1.err)(new AgentError(401===r.status?AgentErrorCode.AUTHENTICATION_FAILED:AgentErrorCode.NETWORK_ERROR,`Tool call failed: ${r.status} ${r.statusText}`,{tool:u,endpoint:l,status:r.status,error:e,audit:d}))}const s=await r.json();d.signature="valid";r.headers.get("X-xBind-Signature")&&(d.signature="valid");const a={data:s,audit:d,formats:createResultFormats(s,d)};return(0,shared_1.ok)(a)}catch(e){return e instanceof DOMException&&"AbortError"===e.name?(0,shared_1.err)(new AgentError(AgentErrorCode.TIMEOUT,"Tool call timed out after 30 seconds",{tool:u,endpoint:l,audit:d})):(0,shared_1.err)(new AgentError(AgentErrorCode.NETWORK_ERROR,`Network error calling tool: ${e instanceof Error?e.message:String(e)}`,{tool:u,endpoint:l,error:e instanceof Error?e.message:String(e),audit:d}))}}catch(t){const[r]=e&&"string"==typeof e&&e.includes(":")?e.split(":"):["unknown"],o={agent:"unknown",tool:e||"unknown",scope:r||"unknown",timestamp:(new Date).toISOString(),signature:"not_verified",policy:"not_evaluated"};return(0,shared_1.err)(new AgentError(AgentErrorCode.NETWORK_ERROR,t instanceof Error?t.message:"Unknown error",{originalError:t,audit:o}))}}async function batchCall(e){return Promise.all(e.map(({tool:e,params:t,options:r})=>call(e,t,r)))}async function*stream(e,t){throw new AgentError(AgentErrorCode.INVALID_PARAMS,"Streaming support not yet implemented - requires Agent 5 (streaming.ts) to complete",{tool:e,params:t})}