@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
|
@@ -9,12 +9,14 @@ import { gte as semverGte, valid as validSemver } from "semver";
|
|
|
9
9
|
import { isJsonContentType } from "../test-controller.mjs";
|
|
10
10
|
import { globToRegExp } from "../../utils/glob.mjs";
|
|
11
11
|
import {
|
|
12
|
+
parsePath,
|
|
12
13
|
resolvePath,
|
|
13
14
|
resolvePathAll,
|
|
14
15
|
resolvePortableIdentifierPathAll,
|
|
15
16
|
toJsonPointer,
|
|
16
17
|
validatePortableIdentifierPath
|
|
17
18
|
} from "./path.mjs";
|
|
19
|
+
import { canonicalTargetUri } from "../../signing/canonicalize.mjs";
|
|
18
20
|
import { detectShapeDriftHints } from "./shape-drift-hints.mjs";
|
|
19
21
|
import { PROBE_TASK_ALLOWLIST } from "./test-kit.mjs";
|
|
20
22
|
import { validateCanonicalFormatSatisfaction } from "./canonical-format-satisfaction.mjs";
|
|
@@ -493,13 +495,67 @@ function validateFieldAbsent(validation, taskResult) {
|
|
|
493
495
|
actual: value
|
|
494
496
|
};
|
|
495
497
|
}
|
|
496
|
-
function
|
|
498
|
+
function comparisonKeyFromPath(path) {
|
|
499
|
+
const segments = parsePath(path);
|
|
500
|
+
for (let i = segments.length - 1; i >= 0; i -= 1) {
|
|
501
|
+
const segment = segments[i];
|
|
502
|
+
if (typeof segment === "string") return segment;
|
|
503
|
+
}
|
|
504
|
+
return void 0;
|
|
505
|
+
}
|
|
506
|
+
function isAgentUrlComparisonKey(key) {
|
|
507
|
+
const normalized = key?.toLowerCase();
|
|
508
|
+
return normalized === "agent_url" || normalized?.endsWith("_agent_url") === true;
|
|
509
|
+
}
|
|
510
|
+
function agentUrlValuesMatch(actual, expected) {
|
|
511
|
+
try {
|
|
512
|
+
return canonicalTargetUri(actual) === canonicalTargetUri(expected);
|
|
513
|
+
} catch {
|
|
514
|
+
return false;
|
|
515
|
+
}
|
|
516
|
+
}
|
|
517
|
+
function normalizeAgentUrlsForDistinctCount(value, comparisonKey) {
|
|
518
|
+
if (isAgentUrlComparisonKey(comparisonKey)) {
|
|
519
|
+
if (typeof value !== "string") return { value, valid: false };
|
|
520
|
+
try {
|
|
521
|
+
return { value: canonicalTargetUri(value), valid: true };
|
|
522
|
+
} catch {
|
|
523
|
+
return { value, valid: false };
|
|
524
|
+
}
|
|
525
|
+
}
|
|
526
|
+
if (Array.isArray(value)) {
|
|
527
|
+
const normalized = [];
|
|
528
|
+
for (const item of value) {
|
|
529
|
+
const result = normalizeAgentUrlsForDistinctCount(item, comparisonKey);
|
|
530
|
+
if (!result.valid) return { value, valid: false };
|
|
531
|
+
normalized.push(result.value);
|
|
532
|
+
}
|
|
533
|
+
return { value: normalized, valid: true };
|
|
534
|
+
}
|
|
535
|
+
if (typeof value === "object" && value !== null) {
|
|
536
|
+
const normalized = {};
|
|
537
|
+
for (const [key, item] of Object.entries(value)) {
|
|
538
|
+
const result = normalizeAgentUrlsForDistinctCount(item, key);
|
|
539
|
+
if (!result.valid) return { value, valid: false };
|
|
540
|
+
normalized[key] = result.value;
|
|
541
|
+
}
|
|
542
|
+
return { value: normalized, valid: true };
|
|
543
|
+
}
|
|
544
|
+
return { value, valid: true };
|
|
545
|
+
}
|
|
546
|
+
function valuesMatch(actual, expected, comparisonKey) {
|
|
547
|
+
if (isAgentUrlComparisonKey(comparisonKey)) {
|
|
548
|
+
return typeof actual === "string" && typeof expected === "string" && agentUrlValuesMatch(actual, expected);
|
|
549
|
+
}
|
|
497
550
|
if (typeof actual === "object" && actual !== null) {
|
|
498
|
-
return deepEqualJsonValue(actual, expected);
|
|
551
|
+
return deepEqualJsonValue(actual, expected, comparisonKey);
|
|
499
552
|
}
|
|
500
553
|
return actual === expected;
|
|
501
554
|
}
|
|
502
|
-
function deepEqualJsonValue(a, b) {
|
|
555
|
+
function deepEqualJsonValue(a, b, comparisonKey) {
|
|
556
|
+
if (isAgentUrlComparisonKey(comparisonKey)) {
|
|
557
|
+
return typeof a === "string" && typeof b === "string" && agentUrlValuesMatch(a, b);
|
|
558
|
+
}
|
|
503
559
|
if (a === b) return true;
|
|
504
560
|
if (typeof a !== typeof b) return false;
|
|
505
561
|
if (a === null || b === null) return a === b;
|
|
@@ -508,7 +564,7 @@ function deepEqualJsonValue(a, b) {
|
|
|
508
564
|
if (!Array.isArray(a) || !Array.isArray(b)) return false;
|
|
509
565
|
if (a.length !== b.length) return false;
|
|
510
566
|
for (let i = 0; i < a.length; i++) {
|
|
511
|
-
if (!deepEqualJsonValue(a[i], b[i])) return false;
|
|
567
|
+
if (!deepEqualJsonValue(a[i], b[i], comparisonKey)) return false;
|
|
512
568
|
}
|
|
513
569
|
return true;
|
|
514
570
|
}
|
|
@@ -517,21 +573,21 @@ function deepEqualJsonValue(a, b) {
|
|
|
517
573
|
if (keysA.length !== keysB.length) return false;
|
|
518
574
|
for (const k of keysA) {
|
|
519
575
|
if (!Object.prototype.hasOwnProperty.call(b, k)) return false;
|
|
520
|
-
if (!deepEqualJsonValue(a[k], b[k])) return false;
|
|
576
|
+
if (!deepEqualJsonValue(a[k], b[k], k)) return false;
|
|
521
577
|
}
|
|
522
578
|
return true;
|
|
523
579
|
}
|
|
524
580
|
function isRecord(value) {
|
|
525
581
|
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
526
582
|
}
|
|
527
|
-
function containsValueMatches(actual, expected) {
|
|
583
|
+
function containsValueMatches(actual, expected, comparisonKey) {
|
|
528
584
|
if (Array.isArray(expected)) {
|
|
529
585
|
if (!Array.isArray(actual)) return false;
|
|
530
586
|
if (expected.length === 0) return actual.length === 0;
|
|
531
587
|
const used = /* @__PURE__ */ new Set();
|
|
532
588
|
return expected.every((expectedItem) => {
|
|
533
589
|
const matchIndex = actual.findIndex(
|
|
534
|
-
(actualItem, index) => !used.has(index) && containsValueMatches(actualItem, expectedItem)
|
|
590
|
+
(actualItem, index) => !used.has(index) && containsValueMatches(actualItem, expectedItem, comparisonKey)
|
|
535
591
|
);
|
|
536
592
|
if (matchIndex === -1) return false;
|
|
537
593
|
used.add(matchIndex);
|
|
@@ -541,10 +597,10 @@ function containsValueMatches(actual, expected) {
|
|
|
541
597
|
if (isRecord(expected)) {
|
|
542
598
|
if (!isRecord(actual)) return false;
|
|
543
599
|
return Object.entries(expected).every(
|
|
544
|
-
([key, expectedValue]) => Object.prototype.hasOwnProperty.call(actual, key) && containsValueMatches(actual[key], expectedValue)
|
|
600
|
+
([key, expectedValue]) => Object.prototype.hasOwnProperty.call(actual, key) && containsValueMatches(actual[key], expectedValue, key)
|
|
545
601
|
);
|
|
546
602
|
}
|
|
547
|
-
return valuesMatch(actual, expected);
|
|
603
|
+
return valuesMatch(actual, expected, comparisonKey);
|
|
548
604
|
}
|
|
549
605
|
function pathUsesWildcardSyntax(path) {
|
|
550
606
|
return /\[(?:\*|)\]/.test(path);
|
|
@@ -581,7 +637,8 @@ function validateFieldValue(validation, taskResult) {
|
|
|
581
637
|
const actual = resolvePath(taskResult.data, validation.path);
|
|
582
638
|
const pointer = toJsonPointer(validation.path);
|
|
583
639
|
if (validation.allowed_values?.length) {
|
|
584
|
-
const
|
|
640
|
+
const comparisonKey = comparisonKeyFromPath(validation.path);
|
|
641
|
+
const passed2 = validation.allowed_values.some((v) => valuesMatch(actual, v, comparisonKey));
|
|
585
642
|
if (passed2) {
|
|
586
643
|
return {
|
|
587
644
|
check: checkName,
|
|
@@ -602,7 +659,7 @@ function validateFieldValue(validation, taskResult) {
|
|
|
602
659
|
actual: actual ?? null
|
|
603
660
|
};
|
|
604
661
|
}
|
|
605
|
-
const passed = valuesMatch(actual, validation.value);
|
|
662
|
+
const passed = valuesMatch(actual, validation.value, comparisonKeyFromPath(validation.path));
|
|
606
663
|
if (passed) {
|
|
607
664
|
return {
|
|
608
665
|
check: checkName,
|
|
@@ -652,7 +709,8 @@ function validateFieldValueOrAbsent(validation, taskResult) {
|
|
|
652
709
|
};
|
|
653
710
|
}
|
|
654
711
|
if (validation.allowed_values?.length) {
|
|
655
|
-
const
|
|
712
|
+
const comparisonKey = comparisonKeyFromPath(validation.path);
|
|
713
|
+
const passed2 = validation.allowed_values.some((v) => valuesMatch(actual, v, comparisonKey));
|
|
656
714
|
if (passed2) {
|
|
657
715
|
return {
|
|
658
716
|
check: checkName,
|
|
@@ -673,7 +731,7 @@ function validateFieldValueOrAbsent(validation, taskResult) {
|
|
|
673
731
|
actual
|
|
674
732
|
};
|
|
675
733
|
}
|
|
676
|
-
const passed = valuesMatch(actual, validation.value);
|
|
734
|
+
const passed = valuesMatch(actual, validation.value, comparisonKeyFromPath(validation.path));
|
|
677
735
|
if (passed) {
|
|
678
736
|
return {
|
|
679
737
|
check: checkName,
|
|
@@ -815,7 +873,8 @@ function validateFieldContains(validation, taskResult) {
|
|
|
815
873
|
const resolved = resolvePathAll(taskResult.data, validation.path);
|
|
816
874
|
const pointer = toJsonPointer(validation.path);
|
|
817
875
|
const candidates = validation.allowed_values?.length ? validation.allowed_values : [validation.value];
|
|
818
|
-
const
|
|
876
|
+
const comparisonKey = comparisonKeyFromPath(validation.path);
|
|
877
|
+
const matched = resolved.some((actual) => candidates.some((c) => containsValueMatches(actual, c, comparisonKey)));
|
|
819
878
|
if (matched) {
|
|
820
879
|
return {
|
|
821
880
|
check: checkName,
|
|
@@ -1884,7 +1943,7 @@ function validateFieldEqualsContext(validation, ctx) {
|
|
|
1884
1943
|
const actual = resolvePath(resolveTarget(ctx).data, validation.path);
|
|
1885
1944
|
const expected = comparandResult.value;
|
|
1886
1945
|
const pointer = toJsonPointer(validation.path);
|
|
1887
|
-
const passed = valuesMatch(actual, expected);
|
|
1946
|
+
const passed = valuesMatch(actual, expected, comparisonKeyFromPath(validation.path));
|
|
1888
1947
|
if (passed) {
|
|
1889
1948
|
return {
|
|
1890
1949
|
check: "field_equals_context",
|
|
@@ -1952,7 +2011,8 @@ function validateFieldInContextArray(validation, ctx) {
|
|
|
1952
2011
|
actual: allowed
|
|
1953
2012
|
};
|
|
1954
2013
|
}
|
|
1955
|
-
|
|
2014
|
+
const comparisonKey = comparisonKeyFromPath(validation.path);
|
|
2015
|
+
if (allowed.some((candidate) => valuesMatch(actual, candidate, comparisonKey))) {
|
|
1956
2016
|
return {
|
|
1957
2017
|
check: "field_in_context_array",
|
|
1958
2018
|
passed: true,
|
|
@@ -2020,7 +2080,8 @@ function validateAllFieldsInContextArray(validation, ctx) {
|
|
|
2020
2080
|
actual: allowed
|
|
2021
2081
|
};
|
|
2022
2082
|
}
|
|
2023
|
-
const
|
|
2083
|
+
const comparisonKey = comparisonKeyFromPath(validation.path);
|
|
2084
|
+
const passed = actual.every((value) => allowed.some((candidate) => deepEqualJsonValue(value, candidate, comparisonKey)));
|
|
2024
2085
|
if (passed) {
|
|
2025
2086
|
return {
|
|
2026
2087
|
check,
|
|
@@ -2432,7 +2493,8 @@ function validateCrossResponseFieldEqual(validation, ctx) {
|
|
|
2432
2493
|
}
|
|
2433
2494
|
const values = cr.resolved.map((tr) => resolvePath(tr.data, path));
|
|
2434
2495
|
const first = values[0];
|
|
2435
|
-
const
|
|
2496
|
+
const comparisonKey = comparisonKeyFromPath(path);
|
|
2497
|
+
const allEqual = values.every((v) => valuesMatch(v, first, comparisonKey));
|
|
2436
2498
|
if (allEqual) {
|
|
2437
2499
|
return {
|
|
2438
2500
|
check: validation.check,
|
|
@@ -2562,13 +2624,27 @@ function validateCrossResponseCountDistinct(validation, ctx) {
|
|
|
2562
2624
|
schema_url: null
|
|
2563
2625
|
};
|
|
2564
2626
|
}
|
|
2565
|
-
const
|
|
2627
|
+
const comparisonKey = comparisonKeyFromPath(path);
|
|
2628
|
+
const exactValues = /* @__PURE__ */ new Set();
|
|
2566
2629
|
for (const tr of cr.resolved) {
|
|
2567
2630
|
const v = resolvePath(tr.data, path);
|
|
2568
|
-
if (v === void 0 || v === null) continue;
|
|
2569
|
-
|
|
2631
|
+
if (v === void 0 || v === null && !isAgentUrlComparisonKey(comparisonKey)) continue;
|
|
2632
|
+
const normalized = normalizeAgentUrlsForDistinctCount(v, comparisonKey);
|
|
2633
|
+
if (!normalized.valid) {
|
|
2634
|
+
return {
|
|
2635
|
+
check: validation.check,
|
|
2636
|
+
passed: false,
|
|
2637
|
+
description: validation.description,
|
|
2638
|
+
json_pointer: toJsonPointer(path),
|
|
2639
|
+
expected: "valid URI strings in all agent URL identity fields",
|
|
2640
|
+
actual: v,
|
|
2641
|
+
schema_id: null,
|
|
2642
|
+
schema_url: null
|
|
2643
|
+
};
|
|
2644
|
+
}
|
|
2645
|
+
exactValues.add(JSON.stringify(normalized.value));
|
|
2570
2646
|
}
|
|
2571
|
-
const distinctCount =
|
|
2647
|
+
const distinctCount = exactValues.size;
|
|
2572
2648
|
const allowed = validation.allowed_values;
|
|
2573
2649
|
if (allowed.includes(distinctCount)) {
|
|
2574
2650
|
return {
|