@adcp/sdk 13.0.4 → 13.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (235) hide show
  1. package/bin/adcp-grade.js +4 -3
  2. package/bin/adcp.js +18 -0
  3. package/dist/lib/conformance/invariants/uniformError.d.ts.map +1 -1
  4. package/dist/lib/conformance/invariants/uniformError.js +21 -0
  5. package/dist/lib/conformance/invariants/uniformError.js.map +1 -1
  6. package/dist/lib/conformance/invariants/uniformError.mjs +22 -1
  7. package/dist/lib/conformance/invariants/uniformError.mjs.map +1 -1
  8. package/dist/lib/core/AgentClient.d.mts +1 -1
  9. package/dist/lib/core/AgentClient.d.ts +1 -1
  10. package/dist/lib/core/AgentClient.d.ts.map +1 -1
  11. package/dist/lib/core/AgentClient.js +1 -1
  12. package/dist/lib/core/AgentClient.js.map +1 -1
  13. package/dist/lib/core/AgentClient.mjs +1 -1
  14. package/dist/lib/core/AgentClient.mjs.map +1 -1
  15. package/dist/lib/core/SingleAgentClient.d.mts +1 -1
  16. package/dist/lib/core/SingleAgentClient.d.ts +1 -1
  17. package/dist/lib/core/SingleAgentClient.d.ts.map +1 -1
  18. package/dist/lib/core/SingleAgentClient.js +88 -48
  19. package/dist/lib/core/SingleAgentClient.js.map +1 -1
  20. package/dist/lib/core/SingleAgentClient.mjs +88 -48
  21. package/dist/lib/core/SingleAgentClient.mjs.map +1 -1
  22. package/dist/lib/core/TaskExecutor.d.ts.map +1 -1
  23. package/dist/lib/core/TaskExecutor.js +8 -4
  24. package/dist/lib/core/TaskExecutor.js.map +1 -1
  25. package/dist/lib/core/TaskExecutor.mjs +8 -4
  26. package/dist/lib/core/TaskExecutor.mjs.map +1 -1
  27. package/dist/lib/index.d.mts +1 -1
  28. package/dist/lib/index.d.ts +1 -1
  29. package/dist/lib/index.d.ts.map +1 -1
  30. package/dist/lib/index.js.map +1 -1
  31. package/dist/lib/index.mjs.map +1 -1
  32. package/dist/lib/net/agent-transport-fetch.d.mts +15 -0
  33. package/dist/lib/net/agent-transport-fetch.d.ts +15 -0
  34. package/dist/lib/net/agent-transport-fetch.d.ts.map +1 -1
  35. package/dist/lib/net/agent-transport-fetch.js +37 -2
  36. package/dist/lib/net/agent-transport-fetch.js.map +1 -1
  37. package/dist/lib/net/agent-transport-fetch.mjs +37 -2
  38. package/dist/lib/net/agent-transport-fetch.mjs.map +1 -1
  39. package/dist/lib/net/credential-headers.d.mts +1 -0
  40. package/dist/lib/net/credential-headers.d.ts +2 -0
  41. package/dist/lib/net/credential-headers.d.ts.map +1 -0
  42. package/dist/lib/net/credential-headers.js +34 -0
  43. package/dist/lib/net/credential-headers.js.map +1 -0
  44. package/dist/lib/net/credential-headers.mjs +10 -0
  45. package/dist/lib/net/credential-headers.mjs.map +1 -0
  46. package/dist/lib/protocols/a2a-native-v1.d.mts +18 -0
  47. package/dist/lib/protocols/a2a-native-v1.d.ts +19 -0
  48. package/dist/lib/protocols/a2a-native-v1.d.ts.map +1 -0
  49. package/dist/lib/protocols/a2a-native-v1.js +183 -0
  50. package/dist/lib/protocols/a2a-native-v1.js.map +1 -0
  51. package/dist/lib/protocols/a2a-native-v1.mjs +167 -0
  52. package/dist/lib/protocols/a2a-native-v1.mjs.map +1 -0
  53. package/dist/lib/protocols/a2a-push-notification.d.mts +13 -0
  54. package/dist/lib/protocols/a2a-push-notification.d.ts +14 -0
  55. package/dist/lib/protocols/a2a-push-notification.d.ts.map +1 -0
  56. package/dist/lib/protocols/a2a-push-notification.js +42 -0
  57. package/dist/lib/protocols/a2a-push-notification.js.map +1 -0
  58. package/dist/lib/protocols/a2a-push-notification.mjs +23 -0
  59. package/dist/lib/protocols/a2a-push-notification.mjs.map +1 -0
  60. package/dist/lib/protocols/a2a.d.mts +15 -5
  61. package/dist/lib/protocols/a2a.d.ts +15 -5
  62. package/dist/lib/protocols/a2a.d.ts.map +1 -1
  63. package/dist/lib/protocols/a2a.js +102 -13
  64. package/dist/lib/protocols/a2a.js.map +1 -1
  65. package/dist/lib/protocols/a2a.mjs +90 -12
  66. package/dist/lib/protocols/a2a.mjs.map +1 -1
  67. package/dist/lib/protocols/index.d.mts +3 -0
  68. package/dist/lib/protocols/index.d.ts +3 -0
  69. package/dist/lib/protocols/index.d.ts.map +1 -1
  70. package/dist/lib/protocols/index.js +18 -6
  71. package/dist/lib/protocols/index.js.map +1 -1
  72. package/dist/lib/protocols/index.mjs +18 -6
  73. package/dist/lib/protocols/index.mjs.map +1 -1
  74. package/dist/lib/protocols/mcp-modern.d.ts.map +1 -1
  75. package/dist/lib/protocols/mcp-modern.js +3 -1
  76. package/dist/lib/protocols/mcp-modern.js.map +1 -1
  77. package/dist/lib/protocols/mcp-modern.mjs +3 -1
  78. package/dist/lib/protocols/mcp-modern.mjs.map +1 -1
  79. package/dist/lib/protocols/mcp-tasks.d.ts.map +1 -1
  80. package/dist/lib/protocols/mcp-tasks.js +2 -1
  81. package/dist/lib/protocols/mcp-tasks.js.map +1 -1
  82. package/dist/lib/protocols/mcp-tasks.mjs +2 -1
  83. package/dist/lib/protocols/mcp-tasks.mjs.map +1 -1
  84. package/dist/lib/protocols/mcp.d.mts +8 -5
  85. package/dist/lib/protocols/mcp.d.ts +8 -5
  86. package/dist/lib/protocols/mcp.d.ts.map +1 -1
  87. package/dist/lib/protocols/mcp.js +12 -4
  88. package/dist/lib/protocols/mcp.js.map +1 -1
  89. package/dist/lib/protocols/mcp.mjs +12 -4
  90. package/dist/lib/protocols/mcp.mjs.map +1 -1
  91. package/dist/lib/protocols/rawResponseCapture.d.mts +9 -1
  92. package/dist/lib/protocols/rawResponseCapture.d.ts +9 -1
  93. package/dist/lib/protocols/rawResponseCapture.d.ts.map +1 -1
  94. package/dist/lib/protocols/rawResponseCapture.js +153 -10
  95. package/dist/lib/protocols/rawResponseCapture.js.map +1 -1
  96. package/dist/lib/protocols/rawResponseCapture.mjs +153 -10
  97. package/dist/lib/protocols/rawResponseCapture.mjs.map +1 -1
  98. package/dist/lib/schemas-data/v2.5/_provenance.json +1 -1
  99. package/dist/lib/signing/agent-fetch.d.mts +3 -1
  100. package/dist/lib/signing/agent-fetch.d.ts +3 -1
  101. package/dist/lib/signing/agent-fetch.d.ts.map +1 -1
  102. package/dist/lib/signing/agent-fetch.js +4 -2
  103. package/dist/lib/signing/agent-fetch.js.map +1 -1
  104. package/dist/lib/signing/agent-fetch.mjs +4 -2
  105. package/dist/lib/signing/agent-fetch.mjs.map +1 -1
  106. package/dist/lib/signing/protocol-methods.d.mts +24 -0
  107. package/dist/lib/signing/protocol-methods.d.ts +25 -0
  108. package/dist/lib/signing/protocol-methods.d.ts.map +1 -0
  109. package/dist/lib/signing/protocol-methods.js +51 -0
  110. package/dist/lib/signing/protocol-methods.js.map +1 -0
  111. package/dist/lib/signing/protocol-methods.mjs +25 -0
  112. package/dist/lib/signing/protocol-methods.mjs.map +1 -0
  113. package/dist/lib/signing/types.d.mts +2 -0
  114. package/dist/lib/signing/types.d.ts +2 -0
  115. package/dist/lib/signing/types.d.ts.map +1 -1
  116. package/dist/lib/signing/types.js.map +1 -1
  117. package/dist/lib/signing/types.mjs.map +1 -1
  118. package/dist/lib/signing/verifier.d.ts.map +1 -1
  119. package/dist/lib/signing/verifier.js +6 -2
  120. package/dist/lib/signing/verifier.js.map +1 -1
  121. package/dist/lib/signing/verifier.mjs +6 -2
  122. package/dist/lib/signing/verifier.mjs.map +1 -1
  123. package/dist/lib/testing/client.d.ts.map +1 -1
  124. package/dist/lib/testing/client.js +4 -1
  125. package/dist/lib/testing/client.js.map +1 -1
  126. package/dist/lib/testing/client.mjs +4 -1
  127. package/dist/lib/testing/client.mjs.map +1 -1
  128. package/dist/lib/testing/compliance/comply.d.ts.map +1 -1
  129. package/dist/lib/testing/compliance/comply.js +3 -0
  130. package/dist/lib/testing/compliance/comply.js.map +1 -1
  131. package/dist/lib/testing/compliance/comply.mjs +3 -0
  132. package/dist/lib/testing/compliance/comply.mjs.map +1 -1
  133. package/dist/lib/testing/storyboard/agent-routing.d.mts +3 -1
  134. package/dist/lib/testing/storyboard/agent-routing.d.ts +3 -1
  135. package/dist/lib/testing/storyboard/agent-routing.d.ts.map +1 -1
  136. package/dist/lib/testing/storyboard/agent-routing.js +5 -2
  137. package/dist/lib/testing/storyboard/agent-routing.js.map +1 -1
  138. package/dist/lib/testing/storyboard/agent-routing.mjs +4 -2
  139. package/dist/lib/testing/storyboard/agent-routing.mjs.map +1 -1
  140. package/dist/lib/testing/storyboard/compliance.d.mts +1 -1
  141. package/dist/lib/testing/storyboard/compliance.d.ts +1 -1
  142. package/dist/lib/testing/storyboard/compliance.d.ts.map +1 -1
  143. package/dist/lib/testing/storyboard/compliance.js +4 -1
  144. package/dist/lib/testing/storyboard/compliance.js.map +1 -1
  145. package/dist/lib/testing/storyboard/compliance.mjs +4 -1
  146. package/dist/lib/testing/storyboard/compliance.mjs.map +1 -1
  147. package/dist/lib/testing/storyboard/native-a2a-compliance.d.mts +7 -0
  148. package/dist/lib/testing/storyboard/native-a2a-compliance.d.ts +8 -0
  149. package/dist/lib/testing/storyboard/native-a2a-compliance.d.ts.map +1 -0
  150. package/dist/lib/testing/storyboard/native-a2a-compliance.js +45 -0
  151. package/dist/lib/testing/storyboard/native-a2a-compliance.js.map +1 -0
  152. package/dist/lib/testing/storyboard/native-a2a-compliance.mjs +21 -0
  153. package/dist/lib/testing/storyboard/native-a2a-compliance.mjs.map +1 -0
  154. package/dist/lib/testing/storyboard/probes.d.mts +2 -0
  155. package/dist/lib/testing/storyboard/probes.d.ts +2 -0
  156. package/dist/lib/testing/storyboard/probes.d.ts.map +1 -1
  157. package/dist/lib/testing/storyboard/probes.js +3 -2
  158. package/dist/lib/testing/storyboard/probes.js.map +1 -1
  159. package/dist/lib/testing/storyboard/probes.mjs +3 -2
  160. package/dist/lib/testing/storyboard/probes.mjs.map +1 -1
  161. package/dist/lib/testing/storyboard/request-signing/a2a-dispatch.d.mts +31 -0
  162. package/dist/lib/testing/storyboard/request-signing/a2a-dispatch.d.ts +32 -0
  163. package/dist/lib/testing/storyboard/request-signing/a2a-dispatch.d.ts.map +1 -0
  164. package/dist/lib/testing/storyboard/request-signing/a2a-dispatch.js +279 -0
  165. package/dist/lib/testing/storyboard/request-signing/a2a-dispatch.js.map +1 -0
  166. package/dist/lib/testing/storyboard/request-signing/a2a-dispatch.mjs +244 -0
  167. package/dist/lib/testing/storyboard/request-signing/a2a-dispatch.mjs.map +1 -0
  168. package/dist/lib/testing/storyboard/request-signing/builder.d.mts +4 -1
  169. package/dist/lib/testing/storyboard/request-signing/builder.d.ts +4 -1
  170. package/dist/lib/testing/storyboard/request-signing/builder.d.ts.map +1 -1
  171. package/dist/lib/testing/storyboard/request-signing/builder.js +19 -0
  172. package/dist/lib/testing/storyboard/request-signing/builder.js.map +1 -1
  173. package/dist/lib/testing/storyboard/request-signing/builder.mjs +19 -0
  174. package/dist/lib/testing/storyboard/request-signing/builder.mjs.map +1 -1
  175. package/dist/lib/testing/storyboard/request-signing/grader.d.mts +5 -6
  176. package/dist/lib/testing/storyboard/request-signing/grader.d.ts +5 -6
  177. package/dist/lib/testing/storyboard/request-signing/grader.d.ts.map +1 -1
  178. package/dist/lib/testing/storyboard/request-signing/grader.js +82 -13
  179. package/dist/lib/testing/storyboard/request-signing/grader.js.map +1 -1
  180. package/dist/lib/testing/storyboard/request-signing/grader.mjs +86 -13
  181. package/dist/lib/testing/storyboard/request-signing/grader.mjs.map +1 -1
  182. package/dist/lib/testing/storyboard/request-signing/index.d.mts +1 -0
  183. package/dist/lib/testing/storyboard/request-signing/index.d.ts +1 -0
  184. package/dist/lib/testing/storyboard/request-signing/index.d.ts.map +1 -1
  185. package/dist/lib/testing/storyboard/request-signing/index.js +7 -0
  186. package/dist/lib/testing/storyboard/request-signing/index.js.map +1 -1
  187. package/dist/lib/testing/storyboard/request-signing/index.mjs +8 -0
  188. package/dist/lib/testing/storyboard/request-signing/index.mjs.map +1 -1
  189. package/dist/lib/testing/storyboard/request-signing/probe-dispatch.d.mts +2 -2
  190. package/dist/lib/testing/storyboard/request-signing/probe-dispatch.d.ts +2 -2
  191. package/dist/lib/testing/storyboard/request-signing/probe-dispatch.d.ts.map +1 -1
  192. package/dist/lib/testing/storyboard/request-signing/probe-dispatch.js +6 -5
  193. package/dist/lib/testing/storyboard/request-signing/probe-dispatch.js.map +1 -1
  194. package/dist/lib/testing/storyboard/request-signing/probe-dispatch.mjs +6 -5
  195. package/dist/lib/testing/storyboard/request-signing/probe-dispatch.mjs.map +1 -1
  196. package/dist/lib/testing/storyboard/request-signing/types.d.mts +1 -0
  197. package/dist/lib/testing/storyboard/request-signing/types.d.ts +1 -0
  198. package/dist/lib/testing/storyboard/request-signing/types.d.ts.map +1 -1
  199. package/dist/lib/testing/storyboard/request-signing/types.js.map +1 -1
  200. package/dist/lib/testing/storyboard/request-signing/types.mjs.map +1 -1
  201. package/dist/lib/testing/storyboard/request-signing/vector-loader.d.ts.map +1 -1
  202. package/dist/lib/testing/storyboard/request-signing/vector-loader.js +1 -0
  203. package/dist/lib/testing/storyboard/request-signing/vector-loader.js.map +1 -1
  204. package/dist/lib/testing/storyboard/request-signing/vector-loader.mjs +1 -0
  205. package/dist/lib/testing/storyboard/request-signing/vector-loader.mjs.map +1 -1
  206. package/dist/lib/testing/storyboard/runner.d.mts +28 -1
  207. package/dist/lib/testing/storyboard/runner.d.ts +28 -1
  208. package/dist/lib/testing/storyboard/runner.d.ts.map +1 -1
  209. package/dist/lib/testing/storyboard/runner.js +251 -55
  210. package/dist/lib/testing/storyboard/runner.js.map +1 -1
  211. package/dist/lib/testing/storyboard/runner.mjs +255 -60
  212. package/dist/lib/testing/storyboard/runner.mjs.map +1 -1
  213. package/dist/lib/testing/storyboard/types.d.mts +4 -2
  214. package/dist/lib/testing/storyboard/types.d.ts +4 -2
  215. package/dist/lib/testing/storyboard/types.d.ts.map +1 -1
  216. package/dist/lib/testing/storyboard/types.js +1 -0
  217. package/dist/lib/testing/storyboard/types.js.map +1 -1
  218. package/dist/lib/testing/storyboard/types.mjs +1 -0
  219. package/dist/lib/testing/storyboard/types.mjs.map +1 -1
  220. package/dist/lib/testing/storyboard/validations.d.mts +1 -1
  221. package/dist/lib/testing/storyboard/validations.d.ts +1 -1
  222. package/dist/lib/testing/storyboard/validations.d.ts.map +1 -1
  223. package/dist/lib/testing/storyboard/validations.js +97 -22
  224. package/dist/lib/testing/storyboard/validations.js.map +1 -1
  225. package/dist/lib/testing/storyboard/validations.mjs +98 -22
  226. package/dist/lib/testing/storyboard/validations.mjs.map +1 -1
  227. package/dist/lib/version.d.mts +3 -3
  228. package/dist/lib/version.d.ts +3 -3
  229. package/dist/lib/version.js +3 -3
  230. package/dist/lib/version.js.map +1 -1
  231. package/dist/lib/version.mjs +3 -3
  232. package/dist/lib/version.mjs.map +1 -1
  233. package/docs/guides/BUILD-AN-AGENT.md +1 -1
  234. package/docs/llms.txt +5 -3
  235. package/package.json +2 -1
@@ -49,8 +49,10 @@ var import_task_deadline = require('./task-deadline.js');
49
49
  var import_auth = require('../auth/index.js');
50
50
  var import_abort = require('../protocols/abort.js');
51
51
  var import_protocols = require('../protocols/index.js');
52
+ var import_a2a = require('../protocols/a2a.js');
52
53
  var import_errors = require('../errors/index.js');
53
54
  var import_net = require('../net/index.js');
55
+ var import_credential_headers = require('../net/credential-headers.js');
54
56
  var import_authorization_required = require('../auth/oauth/authorization-required.js');
55
57
  var import_discovery = require('../auth/oauth/discovery.js');
56
58
  var import_AsyncHandler = require('./AsyncHandler.js');
@@ -971,20 +973,22 @@ class SingleAgentClient {
971
973
  const sizeLimitedFetch = wrapFetchWithSizeLimit(
972
974
  (0, import_net.createAgentTransportFetch)(agentUri, {
973
975
  trustedFetchFn: transport?.trustedFetchFn,
974
- allowPrivateIp: transport?.allowPrivateIp
976
+ allowPrivateIp: transport?.allowPrivateIp,
977
+ originBoundHeaders: Object.keys(this.normalizedAgent.headers ?? {}),
978
+ crossOriginCredentialPolicy: transport?.legacyCompat?.enabled === false ? "refuse" : "strip"
975
979
  })
976
980
  );
977
981
  const authToken = this.normalizedAgent.oauth_client_credentials ? this.normalizedAgent.oauth_tokens?.access_token : this.normalizedAgent.auth_token;
978
982
  let got401 = false;
979
983
  const fetchImpl = async (url, requestInit) => {
980
- const headers = {
981
- ...requestInit?.headers,
982
- ...this.normalizedAgent.headers,
983
- ...authToken && {
984
- Authorization: `Bearer ${authToken}`,
985
- "x-adcp-auth": authToken
986
- }
987
- };
984
+ const headers = buildA2ADiscoveryHeaders(requestInit?.headers, this.normalizedAgent.headers, authToken);
985
+ assertNativeA2ADiscoveryCredentialOrigin(
986
+ agentUri,
987
+ url,
988
+ transport?.legacyCompat?.enabled,
989
+ headers,
990
+ this.normalizedAgent.headers
991
+ );
988
992
  const response = await (0, import_abort2.withAbortSignal)(
989
993
  [readOptions?.signal, requestInit?.signal],
990
994
  requestTimeoutMs,
@@ -1001,7 +1005,10 @@ class SingleAgentClient {
1001
1005
  let lastError = new Error(`A2A agent card not found at ${cardUrls.join(", ")}`);
1002
1006
  for (const cardUrl of cardUrls) {
1003
1007
  try {
1004
- client = await withResponseSizeLimit(maxResponseBytes, () => A2AClient.fromCardUrl(cardUrl, { fetchImpl }));
1008
+ client = await withResponseSizeLimit(
1009
+ maxResponseBytes,
1010
+ () => (0, import_a2a.createA2AClientFromCardUrl)(cardUrl, fetchImpl, transport?.legacyCompat)
1011
+ );
1005
1012
  break;
1006
1013
  } catch (err) {
1007
1014
  lastError = err;
@@ -1011,11 +1018,18 @@ class SingleAgentClient {
1011
1018
  if (!client) {
1012
1019
  throw lastError;
1013
1020
  }
1014
- const agentCard = await withResponseSizeLimit(
1015
- maxResponseBytes,
1016
- async () => client.agentCardPromise ? client.agentCardPromise : client.agentCard
1017
- );
1018
- if (agentCard?.url) {
1021
+ const agentCard = await withResponseSizeLimit(maxResponseBytes, async () => {
1022
+ if (transport?.legacyCompat?.enabled === false) {
1023
+ return client.getAgentCard();
1024
+ }
1025
+ const compatibleClient = client;
1026
+ return typeof compatibleClient.getAgentCard === "function" ? compatibleClient.getAgentCard() : compatibleClient.agentCardPromise ?? compatibleClient.agentCard;
1027
+ });
1028
+ if (transport?.legacyCompat?.enabled === false) {
1029
+ const nativeJsonRpc = selectNativeJsonRpcInterface(agentCard);
1030
+ if (nativeJsonRpc) return nativeJsonRpc.url;
1031
+ }
1032
+ if (agentCard && "url" in agentCard && typeof agentCard.url === "string" && agentCard.url.length > 0) {
1019
1033
  return agentCard.url;
1020
1034
  }
1021
1035
  return this.computeBaseUrl(agentUri);
@@ -3797,7 +3811,7 @@ Hint: this usually means agent_uri does not include the MCP endpoint path. The S
3797
3811
  * Get the fully resolved agent configuration
3798
3812
  *
3799
3813
  * This async method ensures the agent config has the canonical URL resolved:
3800
- * - For A2A: Fetches the agent card and uses its 'url' field
3814
+ * - For A2A: Fetches the agent card and uses its selected native interface or legacy `url`
3801
3815
  * - For MCP: Performs endpoint discovery
3802
3816
  *
3803
3817
  * @returns Promise resolving to agent config with canonical URL
@@ -3860,7 +3874,8 @@ Hint: this usually means agent_uri does not include the MCP endpoint path. The S
3860
3874
  return this.canonicalBaseUrl;
3861
3875
  }
3862
3876
  if (this.normalizedAgent.protocol === "a2a") {
3863
- await this.ensureCanonicalUrlResolved();
3877
+ const resolved = await this.ensureCanonicalUrlResolved();
3878
+ return resolved.agent_uri;
3864
3879
  } else if (this.normalizedAgent.protocol === "mcp") {
3865
3880
  await this.ensureEndpointDiscovered();
3866
3881
  }
@@ -4210,34 +4225,22 @@ Hint: this usually means agent_uri does not include the MCP endpoint path. The S
4210
4225
  const authToken = await ensureReadAuthToken();
4211
4226
  const agentHeaders = this.normalizedAgent.headers ?? {};
4212
4227
  const sizeLimitedFetch = wrapFetchWithSizeLimit(
4213
- (input, init) => transport?.trustedFetchFn ? transport.trustedFetchFn(input, init) : fetch(input, init)
4228
+ (0, import_net.createAgentTransportFetch)(this.normalizedAgent.agent_uri, {
4229
+ trustedFetchFn: transport?.trustedFetchFn,
4230
+ allowPrivateIp: transport?.allowPrivateIp,
4231
+ originBoundHeaders: Object.keys(agentHeaders),
4232
+ crossOriginCredentialPolicy: transport?.legacyCompat?.enabled === false ? "refuse" : "strip"
4233
+ })
4214
4234
  );
4215
- const normalizeHeaders = (headers) => {
4216
- const normalized = {};
4217
- if (!headers) return normalized;
4218
- if (headers instanceof Headers) {
4219
- headers.forEach((value, key) => {
4220
- normalized[key] = value;
4221
- });
4222
- } else if (Array.isArray(headers)) {
4223
- for (const [key, value] of headers) {
4224
- normalized[key] = value;
4225
- }
4226
- } else {
4227
- Object.assign(normalized, headers);
4228
- }
4229
- return normalized;
4230
- };
4231
- const buildHeaders = (requestInit) => ({
4232
- ...normalizeHeaders(requestInit?.headers),
4233
- ...agentHeaders,
4234
- ...authToken && {
4235
- Authorization: `Bearer ${authToken}`,
4236
- "x-adcp-auth": authToken
4237
- }
4238
- });
4239
4235
  const fetchImpl = async (url, requestInit) => {
4240
- const headers = buildHeaders(requestInit);
4236
+ const headers = buildA2ADiscoveryHeaders(requestInit?.headers, agentHeaders, authToken);
4237
+ assertNativeA2ADiscoveryCredentialOrigin(
4238
+ this.normalizedAgent.agent_uri,
4239
+ url,
4240
+ transport?.legacyCompat?.enabled,
4241
+ headers,
4242
+ agentHeaders
4243
+ );
4241
4244
  return (0, import_abort2.withAbortSignal)(
4242
4245
  [options?.signal, requestInit?.signal],
4243
4246
  requestTimeoutMs,
@@ -4249,7 +4252,10 @@ Hint: this usually means agent_uri does not include the MCP endpoint path. The S
4249
4252
  let lastCardError = new Error(`A2A agent card not found at ${cardUrls.join(", ")}`);
4250
4253
  for (const cardUrl of cardUrls) {
4251
4254
  try {
4252
- client = await withResponseSizeLimit(maxResponseBytes, () => A2AClient.fromCardUrl(cardUrl, { fetchImpl }));
4255
+ client = await withResponseSizeLimit(
4256
+ maxResponseBytes,
4257
+ () => (0, import_a2a.createA2AClientFromCardUrl)(cardUrl, fetchImpl, transport?.legacyCompat)
4258
+ );
4253
4259
  break;
4254
4260
  } catch (err) {
4255
4261
  lastCardError = err;
@@ -4258,10 +4264,10 @@ Hint: this usually means agent_uri does not include the MCP endpoint path. The S
4258
4264
  if (!client) {
4259
4265
  throw lastCardError;
4260
4266
  }
4261
- const agentCard = await withResponseSizeLimit(
4262
- maxResponseBytes,
4263
- async () => client.agentCardPromise ? client.agentCardPromise : client.agentCard
4264
- );
4267
+ const agentCard = await withResponseSizeLimit(maxResponseBytes, async () => {
4268
+ const compatibleClient = client;
4269
+ return typeof compatibleClient.getAgentCard === "function" ? compatibleClient.getAgentCard() : compatibleClient.agentCardPromise ?? compatibleClient.agentCard;
4270
+ });
4265
4271
  const tools = agentCard?.skills ? agentCard.skills.map(
4266
4272
  (skill) => ({
4267
4273
  name: skill.id || skill.name,
@@ -4790,6 +4796,40 @@ Hint: this usually means agent_uri does not include the MCP endpoint path. The S
4790
4796
  return schemaMap[taskType] || null;
4791
4797
  }
4792
4798
  }
4799
+ function selectNativeJsonRpcInterface(card) {
4800
+ let selected;
4801
+ for (const agentInterface of card.supportedInterfaces ?? []) {
4802
+ if (agentInterface.protocolBinding.toUpperCase() !== "JSONRPC") continue;
4803
+ if (!selected || agentInterface.protocolVersion === "1.0") selected = agentInterface;
4804
+ }
4805
+ return selected;
4806
+ }
4807
+ function buildA2ADiscoveryHeaders(requestHeaders, agentHeaders, authToken) {
4808
+ const headers = new Headers(requestHeaders);
4809
+ for (const [name, value] of Object.entries(agentHeaders ?? {})) {
4810
+ headers.set(name, value);
4811
+ }
4812
+ if (authToken) {
4813
+ headers.set("authorization", `Bearer ${authToken}`);
4814
+ headers.set("x-adcp-auth", authToken);
4815
+ }
4816
+ return headers;
4817
+ }
4818
+ function assertNativeA2ADiscoveryCredentialOrigin(agentUrl, requestUrl, legacyCompatEnabled, headers, configuredHeaders) {
4819
+ if (legacyCompatEnabled !== false) return;
4820
+ const targetUrl = requestUrl instanceof Request ? requestUrl.url : requestUrl.toString();
4821
+ if (new URL(targetUrl).origin === new URL(agentUrl).origin) return;
4822
+ const configuredHeaderNames = new Set(Object.keys(configuredHeaders ?? {}).map((name) => name.toLowerCase()));
4823
+ const credentialHeaders = [];
4824
+ headers.forEach((_value, name) => {
4825
+ if (configuredHeaderNames.has(name.toLowerCase()) || (0, import_credential_headers.isCredentialHeaderName)(name)) credentialHeaders.push(name);
4826
+ });
4827
+ if (credentialHeaders.length === 0) return;
4828
+ const targetOrigin = new URL(targetUrl).origin;
4829
+ throw new Error(
4830
+ `A2A native discovery refused credentialed cross-origin dispatch to ${targetOrigin}; credential headers: ${credentialHeaders.map((name) => name.toLowerCase()).sort().join(", ")}`
4831
+ );
4832
+ }
4793
4833
  let hasWarnedAboutUnverifiedWebhookReceive = false;
4794
4834
  function warnUnverifiedWebhookReceive() {
4795
4835
  if (hasWarnedAboutUnverifiedWebhookReceive) return;