@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.
- package/bin/adcp-grade.js +4 -3
- package/bin/adcp.js +18 -0
- package/dist/lib/conformance/invariants/uniformError.d.ts.map +1 -1
- package/dist/lib/conformance/invariants/uniformError.js +21 -0
- package/dist/lib/conformance/invariants/uniformError.js.map +1 -1
- package/dist/lib/conformance/invariants/uniformError.mjs +22 -1
- package/dist/lib/conformance/invariants/uniformError.mjs.map +1 -1
- package/dist/lib/core/AgentClient.d.mts +1 -1
- package/dist/lib/core/AgentClient.d.ts +1 -1
- package/dist/lib/core/AgentClient.d.ts.map +1 -1
- package/dist/lib/core/AgentClient.js +1 -1
- package/dist/lib/core/AgentClient.js.map +1 -1
- package/dist/lib/core/AgentClient.mjs +1 -1
- package/dist/lib/core/AgentClient.mjs.map +1 -1
- package/dist/lib/core/SingleAgentClient.d.mts +1 -1
- package/dist/lib/core/SingleAgentClient.d.ts +1 -1
- package/dist/lib/core/SingleAgentClient.d.ts.map +1 -1
- package/dist/lib/core/SingleAgentClient.js +88 -48
- package/dist/lib/core/SingleAgentClient.js.map +1 -1
- package/dist/lib/core/SingleAgentClient.mjs +88 -48
- package/dist/lib/core/SingleAgentClient.mjs.map +1 -1
- package/dist/lib/core/TaskExecutor.d.ts.map +1 -1
- package/dist/lib/core/TaskExecutor.js +8 -4
- package/dist/lib/core/TaskExecutor.js.map +1 -1
- package/dist/lib/core/TaskExecutor.mjs +8 -4
- package/dist/lib/core/TaskExecutor.mjs.map +1 -1
- package/dist/lib/index.d.mts +1 -1
- package/dist/lib/index.d.ts +1 -1
- package/dist/lib/index.d.ts.map +1 -1
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/index.mjs.map +1 -1
- package/dist/lib/net/agent-transport-fetch.d.mts +15 -0
- package/dist/lib/net/agent-transport-fetch.d.ts +15 -0
- package/dist/lib/net/agent-transport-fetch.d.ts.map +1 -1
- package/dist/lib/net/agent-transport-fetch.js +37 -2
- package/dist/lib/net/agent-transport-fetch.js.map +1 -1
- package/dist/lib/net/agent-transport-fetch.mjs +37 -2
- package/dist/lib/net/agent-transport-fetch.mjs.map +1 -1
- package/dist/lib/net/credential-headers.d.mts +1 -0
- package/dist/lib/net/credential-headers.d.ts +2 -0
- package/dist/lib/net/credential-headers.d.ts.map +1 -0
- package/dist/lib/net/credential-headers.js +34 -0
- package/dist/lib/net/credential-headers.js.map +1 -0
- package/dist/lib/net/credential-headers.mjs +10 -0
- package/dist/lib/net/credential-headers.mjs.map +1 -0
- package/dist/lib/protocols/a2a-native-v1.d.mts +18 -0
- package/dist/lib/protocols/a2a-native-v1.d.ts +19 -0
- package/dist/lib/protocols/a2a-native-v1.d.ts.map +1 -0
- package/dist/lib/protocols/a2a-native-v1.js +183 -0
- package/dist/lib/protocols/a2a-native-v1.js.map +1 -0
- package/dist/lib/protocols/a2a-native-v1.mjs +167 -0
- package/dist/lib/protocols/a2a-native-v1.mjs.map +1 -0
- package/dist/lib/protocols/a2a-push-notification.d.mts +13 -0
- package/dist/lib/protocols/a2a-push-notification.d.ts +14 -0
- package/dist/lib/protocols/a2a-push-notification.d.ts.map +1 -0
- package/dist/lib/protocols/a2a-push-notification.js +42 -0
- package/dist/lib/protocols/a2a-push-notification.js.map +1 -0
- package/dist/lib/protocols/a2a-push-notification.mjs +23 -0
- package/dist/lib/protocols/a2a-push-notification.mjs.map +1 -0
- package/dist/lib/protocols/a2a.d.mts +15 -5
- package/dist/lib/protocols/a2a.d.ts +15 -5
- package/dist/lib/protocols/a2a.d.ts.map +1 -1
- package/dist/lib/protocols/a2a.js +102 -13
- package/dist/lib/protocols/a2a.js.map +1 -1
- package/dist/lib/protocols/a2a.mjs +90 -12
- package/dist/lib/protocols/a2a.mjs.map +1 -1
- package/dist/lib/protocols/index.d.mts +3 -0
- package/dist/lib/protocols/index.d.ts +3 -0
- package/dist/lib/protocols/index.d.ts.map +1 -1
- package/dist/lib/protocols/index.js +18 -6
- package/dist/lib/protocols/index.js.map +1 -1
- package/dist/lib/protocols/index.mjs +18 -6
- package/dist/lib/protocols/index.mjs.map +1 -1
- package/dist/lib/protocols/mcp-modern.d.ts.map +1 -1
- package/dist/lib/protocols/mcp-modern.js +3 -1
- package/dist/lib/protocols/mcp-modern.js.map +1 -1
- package/dist/lib/protocols/mcp-modern.mjs +3 -1
- package/dist/lib/protocols/mcp-modern.mjs.map +1 -1
- package/dist/lib/protocols/mcp-tasks.d.ts.map +1 -1
- package/dist/lib/protocols/mcp-tasks.js +2 -1
- package/dist/lib/protocols/mcp-tasks.js.map +1 -1
- package/dist/lib/protocols/mcp-tasks.mjs +2 -1
- package/dist/lib/protocols/mcp-tasks.mjs.map +1 -1
- package/dist/lib/protocols/mcp.d.mts +8 -5
- package/dist/lib/protocols/mcp.d.ts +8 -5
- package/dist/lib/protocols/mcp.d.ts.map +1 -1
- package/dist/lib/protocols/mcp.js +12 -4
- package/dist/lib/protocols/mcp.js.map +1 -1
- package/dist/lib/protocols/mcp.mjs +12 -4
- package/dist/lib/protocols/mcp.mjs.map +1 -1
- package/dist/lib/protocols/rawResponseCapture.d.mts +9 -1
- package/dist/lib/protocols/rawResponseCapture.d.ts +9 -1
- package/dist/lib/protocols/rawResponseCapture.d.ts.map +1 -1
- package/dist/lib/protocols/rawResponseCapture.js +153 -10
- package/dist/lib/protocols/rawResponseCapture.js.map +1 -1
- package/dist/lib/protocols/rawResponseCapture.mjs +153 -10
- package/dist/lib/protocols/rawResponseCapture.mjs.map +1 -1
- package/dist/lib/schemas-data/v2.5/_provenance.json +1 -1
- package/dist/lib/signing/agent-fetch.d.mts +3 -1
- package/dist/lib/signing/agent-fetch.d.ts +3 -1
- package/dist/lib/signing/agent-fetch.d.ts.map +1 -1
- package/dist/lib/signing/agent-fetch.js +4 -2
- package/dist/lib/signing/agent-fetch.js.map +1 -1
- package/dist/lib/signing/agent-fetch.mjs +4 -2
- package/dist/lib/signing/agent-fetch.mjs.map +1 -1
- package/dist/lib/signing/protocol-methods.d.mts +24 -0
- package/dist/lib/signing/protocol-methods.d.ts +25 -0
- package/dist/lib/signing/protocol-methods.d.ts.map +1 -0
- package/dist/lib/signing/protocol-methods.js +51 -0
- package/dist/lib/signing/protocol-methods.js.map +1 -0
- package/dist/lib/signing/protocol-methods.mjs +25 -0
- package/dist/lib/signing/protocol-methods.mjs.map +1 -0
- package/dist/lib/signing/types.d.mts +2 -0
- package/dist/lib/signing/types.d.ts +2 -0
- package/dist/lib/signing/types.d.ts.map +1 -1
- package/dist/lib/signing/types.js.map +1 -1
- package/dist/lib/signing/types.mjs.map +1 -1
- package/dist/lib/signing/verifier.d.ts.map +1 -1
- package/dist/lib/signing/verifier.js +6 -2
- package/dist/lib/signing/verifier.js.map +1 -1
- package/dist/lib/signing/verifier.mjs +6 -2
- package/dist/lib/signing/verifier.mjs.map +1 -1
- package/dist/lib/testing/client.d.ts.map +1 -1
- package/dist/lib/testing/client.js +4 -1
- package/dist/lib/testing/client.js.map +1 -1
- package/dist/lib/testing/client.mjs +4 -1
- package/dist/lib/testing/client.mjs.map +1 -1
- package/dist/lib/testing/compliance/comply.d.ts.map +1 -1
- package/dist/lib/testing/compliance/comply.js +3 -0
- package/dist/lib/testing/compliance/comply.js.map +1 -1
- package/dist/lib/testing/compliance/comply.mjs +3 -0
- package/dist/lib/testing/compliance/comply.mjs.map +1 -1
- package/dist/lib/testing/storyboard/agent-routing.d.mts +3 -1
- package/dist/lib/testing/storyboard/agent-routing.d.ts +3 -1
- package/dist/lib/testing/storyboard/agent-routing.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/agent-routing.js +5 -2
- package/dist/lib/testing/storyboard/agent-routing.js.map +1 -1
- package/dist/lib/testing/storyboard/agent-routing.mjs +4 -2
- package/dist/lib/testing/storyboard/agent-routing.mjs.map +1 -1
- package/dist/lib/testing/storyboard/compliance.d.mts +1 -1
- package/dist/lib/testing/storyboard/compliance.d.ts +1 -1
- package/dist/lib/testing/storyboard/compliance.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/compliance.js +4 -1
- package/dist/lib/testing/storyboard/compliance.js.map +1 -1
- package/dist/lib/testing/storyboard/compliance.mjs +4 -1
- package/dist/lib/testing/storyboard/compliance.mjs.map +1 -1
- package/dist/lib/testing/storyboard/native-a2a-compliance.d.mts +7 -0
- package/dist/lib/testing/storyboard/native-a2a-compliance.d.ts +8 -0
- package/dist/lib/testing/storyboard/native-a2a-compliance.d.ts.map +1 -0
- package/dist/lib/testing/storyboard/native-a2a-compliance.js +45 -0
- package/dist/lib/testing/storyboard/native-a2a-compliance.js.map +1 -0
- package/dist/lib/testing/storyboard/native-a2a-compliance.mjs +21 -0
- package/dist/lib/testing/storyboard/native-a2a-compliance.mjs.map +1 -0
- package/dist/lib/testing/storyboard/probes.d.mts +2 -0
- package/dist/lib/testing/storyboard/probes.d.ts +2 -0
- package/dist/lib/testing/storyboard/probes.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/probes.js +3 -2
- package/dist/lib/testing/storyboard/probes.js.map +1 -1
- package/dist/lib/testing/storyboard/probes.mjs +3 -2
- package/dist/lib/testing/storyboard/probes.mjs.map +1 -1
- package/dist/lib/testing/storyboard/request-signing/a2a-dispatch.d.mts +31 -0
- package/dist/lib/testing/storyboard/request-signing/a2a-dispatch.d.ts +32 -0
- package/dist/lib/testing/storyboard/request-signing/a2a-dispatch.d.ts.map +1 -0
- package/dist/lib/testing/storyboard/request-signing/a2a-dispatch.js +279 -0
- package/dist/lib/testing/storyboard/request-signing/a2a-dispatch.js.map +1 -0
- package/dist/lib/testing/storyboard/request-signing/a2a-dispatch.mjs +244 -0
- package/dist/lib/testing/storyboard/request-signing/a2a-dispatch.mjs.map +1 -0
- package/dist/lib/testing/storyboard/request-signing/builder.d.mts +4 -1
- package/dist/lib/testing/storyboard/request-signing/builder.d.ts +4 -1
- package/dist/lib/testing/storyboard/request-signing/builder.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/request-signing/builder.js +19 -0
- package/dist/lib/testing/storyboard/request-signing/builder.js.map +1 -1
- package/dist/lib/testing/storyboard/request-signing/builder.mjs +19 -0
- package/dist/lib/testing/storyboard/request-signing/builder.mjs.map +1 -1
- package/dist/lib/testing/storyboard/request-signing/grader.d.mts +5 -6
- package/dist/lib/testing/storyboard/request-signing/grader.d.ts +5 -6
- package/dist/lib/testing/storyboard/request-signing/grader.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/request-signing/grader.js +82 -13
- package/dist/lib/testing/storyboard/request-signing/grader.js.map +1 -1
- package/dist/lib/testing/storyboard/request-signing/grader.mjs +86 -13
- package/dist/lib/testing/storyboard/request-signing/grader.mjs.map +1 -1
- package/dist/lib/testing/storyboard/request-signing/index.d.mts +1 -0
- package/dist/lib/testing/storyboard/request-signing/index.d.ts +1 -0
- package/dist/lib/testing/storyboard/request-signing/index.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/request-signing/index.js +7 -0
- package/dist/lib/testing/storyboard/request-signing/index.js.map +1 -1
- package/dist/lib/testing/storyboard/request-signing/index.mjs +8 -0
- package/dist/lib/testing/storyboard/request-signing/index.mjs.map +1 -1
- package/dist/lib/testing/storyboard/request-signing/probe-dispatch.d.mts +2 -2
- package/dist/lib/testing/storyboard/request-signing/probe-dispatch.d.ts +2 -2
- package/dist/lib/testing/storyboard/request-signing/probe-dispatch.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/request-signing/probe-dispatch.js +6 -5
- package/dist/lib/testing/storyboard/request-signing/probe-dispatch.js.map +1 -1
- package/dist/lib/testing/storyboard/request-signing/probe-dispatch.mjs +6 -5
- package/dist/lib/testing/storyboard/request-signing/probe-dispatch.mjs.map +1 -1
- package/dist/lib/testing/storyboard/request-signing/types.d.mts +1 -0
- package/dist/lib/testing/storyboard/request-signing/types.d.ts +1 -0
- package/dist/lib/testing/storyboard/request-signing/types.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/request-signing/types.js.map +1 -1
- package/dist/lib/testing/storyboard/request-signing/types.mjs.map +1 -1
- package/dist/lib/testing/storyboard/request-signing/vector-loader.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/request-signing/vector-loader.js +1 -0
- package/dist/lib/testing/storyboard/request-signing/vector-loader.js.map +1 -1
- package/dist/lib/testing/storyboard/request-signing/vector-loader.mjs +1 -0
- package/dist/lib/testing/storyboard/request-signing/vector-loader.mjs.map +1 -1
- package/dist/lib/testing/storyboard/runner.d.mts +28 -1
- package/dist/lib/testing/storyboard/runner.d.ts +28 -1
- package/dist/lib/testing/storyboard/runner.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/runner.js +251 -55
- package/dist/lib/testing/storyboard/runner.js.map +1 -1
- package/dist/lib/testing/storyboard/runner.mjs +255 -60
- package/dist/lib/testing/storyboard/runner.mjs.map +1 -1
- package/dist/lib/testing/storyboard/types.d.mts +4 -2
- package/dist/lib/testing/storyboard/types.d.ts +4 -2
- package/dist/lib/testing/storyboard/types.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/types.js +1 -0
- package/dist/lib/testing/storyboard/types.js.map +1 -1
- package/dist/lib/testing/storyboard/types.mjs +1 -0
- package/dist/lib/testing/storyboard/types.mjs.map +1 -1
- package/dist/lib/testing/storyboard/validations.d.mts +1 -1
- package/dist/lib/testing/storyboard/validations.d.ts +1 -1
- package/dist/lib/testing/storyboard/validations.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/validations.js +97 -22
- package/dist/lib/testing/storyboard/validations.js.map +1 -1
- package/dist/lib/testing/storyboard/validations.mjs +98 -22
- package/dist/lib/testing/storyboard/validations.mjs.map +1 -1
- package/dist/lib/version.d.mts +3 -3
- package/dist/lib/version.d.ts +3 -3
- package/dist/lib/version.js +3 -3
- package/dist/lib/version.js.map +1 -1
- package/dist/lib/version.mjs +3 -3
- package/dist/lib/version.mjs.map +1 -1
- package/docs/guides/BUILD-AN-AGENT.md +1 -1
- package/docs/llms.txt +5 -3
- package/package.json +2 -1
|
@@ -14,6 +14,7 @@ import { withTaskDeadline } from "./task-deadline.mjs";
|
|
|
14
14
|
import { createMCPRequestHeaders } from "../auth/index.mjs";
|
|
15
15
|
import { isAbortOrTimeoutError } from "../protocols/abort.mjs";
|
|
16
16
|
import { normalizeTransportOptions } from "../protocols/index.mjs";
|
|
17
|
+
import { createA2AClientFromCardUrl } from "../protocols/a2a.mjs";
|
|
17
18
|
import {
|
|
18
19
|
AuthenticationRequiredError,
|
|
19
20
|
ConfigurationError,
|
|
@@ -24,6 +25,7 @@ import {
|
|
|
24
25
|
is401Error
|
|
25
26
|
} from "../errors/index.mjs";
|
|
26
27
|
import { createAgentTransportFetch, isLikelyPrivateUrl } from "../net/index.mjs";
|
|
28
|
+
import { isCredentialHeaderName } from "../net/credential-headers.mjs";
|
|
27
29
|
import {
|
|
28
30
|
discoverAuthorizationRequirements,
|
|
29
31
|
NeedsAuthorizationError,
|
|
@@ -981,20 +983,22 @@ class SingleAgentClient {
|
|
|
981
983
|
const sizeLimitedFetch = wrapFetchWithSizeLimit(
|
|
982
984
|
createAgentTransportFetch(agentUri, {
|
|
983
985
|
trustedFetchFn: transport?.trustedFetchFn,
|
|
984
|
-
allowPrivateIp: transport?.allowPrivateIp
|
|
986
|
+
allowPrivateIp: transport?.allowPrivateIp,
|
|
987
|
+
originBoundHeaders: Object.keys(this.normalizedAgent.headers ?? {}),
|
|
988
|
+
crossOriginCredentialPolicy: transport?.legacyCompat?.enabled === false ? "refuse" : "strip"
|
|
985
989
|
})
|
|
986
990
|
);
|
|
987
991
|
const authToken = this.normalizedAgent.oauth_client_credentials ? this.normalizedAgent.oauth_tokens?.access_token : this.normalizedAgent.auth_token;
|
|
988
992
|
let got401 = false;
|
|
989
993
|
const fetchImpl = async (url, requestInit) => {
|
|
990
|
-
const headers =
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
|
|
996
|
-
|
|
997
|
-
|
|
994
|
+
const headers = buildA2ADiscoveryHeaders(requestInit?.headers, this.normalizedAgent.headers, authToken);
|
|
995
|
+
assertNativeA2ADiscoveryCredentialOrigin(
|
|
996
|
+
agentUri,
|
|
997
|
+
url,
|
|
998
|
+
transport?.legacyCompat?.enabled,
|
|
999
|
+
headers,
|
|
1000
|
+
this.normalizedAgent.headers
|
|
1001
|
+
);
|
|
998
1002
|
const response = await withAbortSignal(
|
|
999
1003
|
[readOptions?.signal, requestInit?.signal],
|
|
1000
1004
|
requestTimeoutMs,
|
|
@@ -1011,7 +1015,10 @@ class SingleAgentClient {
|
|
|
1011
1015
|
let lastError = new Error(`A2A agent card not found at ${cardUrls.join(", ")}`);
|
|
1012
1016
|
for (const cardUrl of cardUrls) {
|
|
1013
1017
|
try {
|
|
1014
|
-
client = await withResponseSizeLimit(
|
|
1018
|
+
client = await withResponseSizeLimit(
|
|
1019
|
+
maxResponseBytes,
|
|
1020
|
+
() => createA2AClientFromCardUrl(cardUrl, fetchImpl, transport?.legacyCompat)
|
|
1021
|
+
);
|
|
1015
1022
|
break;
|
|
1016
1023
|
} catch (err) {
|
|
1017
1024
|
lastError = err;
|
|
@@ -1021,11 +1028,18 @@ class SingleAgentClient {
|
|
|
1021
1028
|
if (!client) {
|
|
1022
1029
|
throw lastError;
|
|
1023
1030
|
}
|
|
1024
|
-
const agentCard = await withResponseSizeLimit(
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
|
|
1028
|
-
|
|
1031
|
+
const agentCard = await withResponseSizeLimit(maxResponseBytes, async () => {
|
|
1032
|
+
if (transport?.legacyCompat?.enabled === false) {
|
|
1033
|
+
return client.getAgentCard();
|
|
1034
|
+
}
|
|
1035
|
+
const compatibleClient = client;
|
|
1036
|
+
return typeof compatibleClient.getAgentCard === "function" ? compatibleClient.getAgentCard() : compatibleClient.agentCardPromise ?? compatibleClient.agentCard;
|
|
1037
|
+
});
|
|
1038
|
+
if (transport?.legacyCompat?.enabled === false) {
|
|
1039
|
+
const nativeJsonRpc = selectNativeJsonRpcInterface(agentCard);
|
|
1040
|
+
if (nativeJsonRpc) return nativeJsonRpc.url;
|
|
1041
|
+
}
|
|
1042
|
+
if (agentCard && "url" in agentCard && typeof agentCard.url === "string" && agentCard.url.length > 0) {
|
|
1029
1043
|
return agentCard.url;
|
|
1030
1044
|
}
|
|
1031
1045
|
return this.computeBaseUrl(agentUri);
|
|
@@ -3807,7 +3821,7 @@ Hint: this usually means agent_uri does not include the MCP endpoint path. The S
|
|
|
3807
3821
|
* Get the fully resolved agent configuration
|
|
3808
3822
|
*
|
|
3809
3823
|
* This async method ensures the agent config has the canonical URL resolved:
|
|
3810
|
-
* - For A2A: Fetches the agent card and uses its
|
|
3824
|
+
* - For A2A: Fetches the agent card and uses its selected native interface or legacy `url`
|
|
3811
3825
|
* - For MCP: Performs endpoint discovery
|
|
3812
3826
|
*
|
|
3813
3827
|
* @returns Promise resolving to agent config with canonical URL
|
|
@@ -3870,7 +3884,8 @@ Hint: this usually means agent_uri does not include the MCP endpoint path. The S
|
|
|
3870
3884
|
return this.canonicalBaseUrl;
|
|
3871
3885
|
}
|
|
3872
3886
|
if (this.normalizedAgent.protocol === "a2a") {
|
|
3873
|
-
await this.ensureCanonicalUrlResolved();
|
|
3887
|
+
const resolved = await this.ensureCanonicalUrlResolved();
|
|
3888
|
+
return resolved.agent_uri;
|
|
3874
3889
|
} else if (this.normalizedAgent.protocol === "mcp") {
|
|
3875
3890
|
await this.ensureEndpointDiscovered();
|
|
3876
3891
|
}
|
|
@@ -4220,34 +4235,22 @@ Hint: this usually means agent_uri does not include the MCP endpoint path. The S
|
|
|
4220
4235
|
const authToken = await ensureReadAuthToken();
|
|
4221
4236
|
const agentHeaders = this.normalizedAgent.headers ?? {};
|
|
4222
4237
|
const sizeLimitedFetch = wrapFetchWithSizeLimit(
|
|
4223
|
-
(
|
|
4238
|
+
createAgentTransportFetch(this.normalizedAgent.agent_uri, {
|
|
4239
|
+
trustedFetchFn: transport?.trustedFetchFn,
|
|
4240
|
+
allowPrivateIp: transport?.allowPrivateIp,
|
|
4241
|
+
originBoundHeaders: Object.keys(agentHeaders),
|
|
4242
|
+
crossOriginCredentialPolicy: transport?.legacyCompat?.enabled === false ? "refuse" : "strip"
|
|
4243
|
+
})
|
|
4224
4244
|
);
|
|
4225
|
-
const normalizeHeaders = (headers) => {
|
|
4226
|
-
const normalized = {};
|
|
4227
|
-
if (!headers) return normalized;
|
|
4228
|
-
if (headers instanceof Headers) {
|
|
4229
|
-
headers.forEach((value, key) => {
|
|
4230
|
-
normalized[key] = value;
|
|
4231
|
-
});
|
|
4232
|
-
} else if (Array.isArray(headers)) {
|
|
4233
|
-
for (const [key, value] of headers) {
|
|
4234
|
-
normalized[key] = value;
|
|
4235
|
-
}
|
|
4236
|
-
} else {
|
|
4237
|
-
Object.assign(normalized, headers);
|
|
4238
|
-
}
|
|
4239
|
-
return normalized;
|
|
4240
|
-
};
|
|
4241
|
-
const buildHeaders = (requestInit) => ({
|
|
4242
|
-
...normalizeHeaders(requestInit?.headers),
|
|
4243
|
-
...agentHeaders,
|
|
4244
|
-
...authToken && {
|
|
4245
|
-
Authorization: `Bearer ${authToken}`,
|
|
4246
|
-
"x-adcp-auth": authToken
|
|
4247
|
-
}
|
|
4248
|
-
});
|
|
4249
4245
|
const fetchImpl = async (url, requestInit) => {
|
|
4250
|
-
const headers =
|
|
4246
|
+
const headers = buildA2ADiscoveryHeaders(requestInit?.headers, agentHeaders, authToken);
|
|
4247
|
+
assertNativeA2ADiscoveryCredentialOrigin(
|
|
4248
|
+
this.normalizedAgent.agent_uri,
|
|
4249
|
+
url,
|
|
4250
|
+
transport?.legacyCompat?.enabled,
|
|
4251
|
+
headers,
|
|
4252
|
+
agentHeaders
|
|
4253
|
+
);
|
|
4251
4254
|
return withAbortSignal(
|
|
4252
4255
|
[options?.signal, requestInit?.signal],
|
|
4253
4256
|
requestTimeoutMs,
|
|
@@ -4259,7 +4262,10 @@ Hint: this usually means agent_uri does not include the MCP endpoint path. The S
|
|
|
4259
4262
|
let lastCardError = new Error(`A2A agent card not found at ${cardUrls.join(", ")}`);
|
|
4260
4263
|
for (const cardUrl of cardUrls) {
|
|
4261
4264
|
try {
|
|
4262
|
-
client = await withResponseSizeLimit(
|
|
4265
|
+
client = await withResponseSizeLimit(
|
|
4266
|
+
maxResponseBytes,
|
|
4267
|
+
() => createA2AClientFromCardUrl(cardUrl, fetchImpl, transport?.legacyCompat)
|
|
4268
|
+
);
|
|
4263
4269
|
break;
|
|
4264
4270
|
} catch (err) {
|
|
4265
4271
|
lastCardError = err;
|
|
@@ -4268,10 +4274,10 @@ Hint: this usually means agent_uri does not include the MCP endpoint path. The S
|
|
|
4268
4274
|
if (!client) {
|
|
4269
4275
|
throw lastCardError;
|
|
4270
4276
|
}
|
|
4271
|
-
const agentCard = await withResponseSizeLimit(
|
|
4272
|
-
|
|
4273
|
-
|
|
4274
|
-
);
|
|
4277
|
+
const agentCard = await withResponseSizeLimit(maxResponseBytes, async () => {
|
|
4278
|
+
const compatibleClient = client;
|
|
4279
|
+
return typeof compatibleClient.getAgentCard === "function" ? compatibleClient.getAgentCard() : compatibleClient.agentCardPromise ?? compatibleClient.agentCard;
|
|
4280
|
+
});
|
|
4275
4281
|
const tools = agentCard?.skills ? agentCard.skills.map(
|
|
4276
4282
|
(skill) => ({
|
|
4277
4283
|
name: skill.id || skill.name,
|
|
@@ -4800,6 +4806,40 @@ Hint: this usually means agent_uri does not include the MCP endpoint path. The S
|
|
|
4800
4806
|
return schemaMap[taskType] || null;
|
|
4801
4807
|
}
|
|
4802
4808
|
}
|
|
4809
|
+
function selectNativeJsonRpcInterface(card) {
|
|
4810
|
+
let selected;
|
|
4811
|
+
for (const agentInterface of card.supportedInterfaces ?? []) {
|
|
4812
|
+
if (agentInterface.protocolBinding.toUpperCase() !== "JSONRPC") continue;
|
|
4813
|
+
if (!selected || agentInterface.protocolVersion === "1.0") selected = agentInterface;
|
|
4814
|
+
}
|
|
4815
|
+
return selected;
|
|
4816
|
+
}
|
|
4817
|
+
function buildA2ADiscoveryHeaders(requestHeaders, agentHeaders, authToken) {
|
|
4818
|
+
const headers = new Headers(requestHeaders);
|
|
4819
|
+
for (const [name, value] of Object.entries(agentHeaders ?? {})) {
|
|
4820
|
+
headers.set(name, value);
|
|
4821
|
+
}
|
|
4822
|
+
if (authToken) {
|
|
4823
|
+
headers.set("authorization", `Bearer ${authToken}`);
|
|
4824
|
+
headers.set("x-adcp-auth", authToken);
|
|
4825
|
+
}
|
|
4826
|
+
return headers;
|
|
4827
|
+
}
|
|
4828
|
+
function assertNativeA2ADiscoveryCredentialOrigin(agentUrl, requestUrl, legacyCompatEnabled, headers, configuredHeaders) {
|
|
4829
|
+
if (legacyCompatEnabled !== false) return;
|
|
4830
|
+
const targetUrl = requestUrl instanceof Request ? requestUrl.url : requestUrl.toString();
|
|
4831
|
+
if (new URL(targetUrl).origin === new URL(agentUrl).origin) return;
|
|
4832
|
+
const configuredHeaderNames = new Set(Object.keys(configuredHeaders ?? {}).map((name) => name.toLowerCase()));
|
|
4833
|
+
const credentialHeaders = [];
|
|
4834
|
+
headers.forEach((_value, name) => {
|
|
4835
|
+
if (configuredHeaderNames.has(name.toLowerCase()) || isCredentialHeaderName(name)) credentialHeaders.push(name);
|
|
4836
|
+
});
|
|
4837
|
+
if (credentialHeaders.length === 0) return;
|
|
4838
|
+
const targetOrigin = new URL(targetUrl).origin;
|
|
4839
|
+
throw new Error(
|
|
4840
|
+
`A2A native discovery refused credentialed cross-origin dispatch to ${targetOrigin}; credential headers: ${credentialHeaders.map((name) => name.toLowerCase()).sort().join(", ")}`
|
|
4841
|
+
);
|
|
4842
|
+
}
|
|
4803
4843
|
let hasWarnedAboutUnverifiedWebhookReceive = false;
|
|
4804
4844
|
function warnUnverifiedWebhookReceive() {
|
|
4805
4845
|
if (hasWarnedAboutUnverifiedWebhookReceive) return;
|