@adcp/sdk 14.0.0-rc.38 → 14.0.0-rc.39
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-storyboard-summary.js +286 -0
- package/bin/adcp.js +221 -10
- package/dist/lib/conformance/schemaLoader.d.mts +1 -1
- package/dist/lib/conformance/schemaLoader.d.ts +1 -1
- package/dist/lib/core/AgentClient.d.mts +6 -1
- package/dist/lib/core/AgentClient.d.ts +6 -1
- package/dist/lib/core/AgentClient.js +9 -0
- package/dist/lib/core/AgentClient.mjs +9 -0
- package/dist/lib/core/ConversationTypes.d.mts +29 -0
- package/dist/lib/core/ConversationTypes.d.ts +29 -0
- package/dist/lib/core/SingleAgentClient.d.mts +3 -1
- package/dist/lib/core/SingleAgentClient.d.ts +3 -1
- package/dist/lib/core/SingleAgentClient.js +9 -1
- package/dist/lib/core/SingleAgentClient.mjs +9 -1
- package/dist/lib/core/TaskExecutor.d.mts +13 -1
- package/dist/lib/core/TaskExecutor.d.ts +13 -1
- package/dist/lib/core/TaskExecutor.js +216 -18
- package/dist/lib/core/TaskExecutor.mjs +216 -19
- package/dist/lib/index.d.mts +5 -2
- package/dist/lib/index.d.ts +5 -2
- package/dist/lib/index.js +10 -1
- package/dist/lib/index.mjs +10 -1
- package/dist/lib/media-buy/action-assessment.d.mts +77 -0
- package/dist/lib/media-buy/action-assessment.d.ts +77 -0
- package/dist/lib/media-buy/action-assessment.js +300 -0
- package/dist/lib/media-buy/action-assessment.mjs +284 -0
- package/dist/lib/media-buy/action-constraints.d.mts +9 -0
- package/dist/lib/media-buy/action-constraints.d.ts +9 -0
- package/dist/lib/media-buy/action-constraints.js +170 -0
- package/dist/lib/media-buy/action-constraints.mjs +146 -0
- package/dist/lib/media-buy/action-contracts.d.mts +40 -0
- package/dist/lib/media-buy/action-contracts.d.ts +40 -0
- package/dist/lib/media-buy/action-contracts.js +304 -0
- package/dist/lib/media-buy/action-contracts.mjs +267 -0
- package/dist/lib/media-buy/action-metadata.generated.d.mts +37 -0
- package/dist/lib/media-buy/action-metadata.generated.d.ts +37 -0
- package/dist/lib/media-buy/action-metadata.generated.js +128 -0
- package/dist/lib/media-buy/action-metadata.generated.mjs +101 -0
- package/dist/lib/media-buy/action-types.d.mts +106 -0
- package/dist/lib/media-buy/action-types.d.ts +106 -0
- package/dist/lib/{types/v3-1-beta/tools.generated.js → media-buy/action-types.js} +2 -2
- package/dist/lib/media-buy/actions.d.mts +6 -0
- package/dist/lib/media-buy/actions.d.ts +6 -0
- package/dist/lib/media-buy/actions.js +38 -0
- package/dist/lib/media-buy/actions.mjs +9 -0
- package/dist/lib/media-buy/available-actions.d.mts +2 -1
- package/dist/lib/media-buy/available-actions.d.ts +2 -1
- package/dist/lib/media-buy/available-actions.js +4 -3
- package/dist/lib/media-buy/available-actions.mjs +4 -3
- package/dist/lib/media-buy/compatibility.js +3 -0
- package/dist/lib/media-buy/compatibility.mjs +3 -0
- package/dist/lib/media-buy/index.d.mts +4 -0
- package/dist/lib/media-buy/index.d.ts +4 -0
- package/dist/lib/media-buy/index.js +3 -1
- package/dist/lib/media-buy/index.mjs +1 -0
- package/dist/lib/media-buy/legacy-action-ids.d.mts +1 -0
- package/dist/lib/media-buy/legacy-action-ids.d.ts +1 -0
- package/dist/lib/media-buy/legacy-action-ids.js +50 -0
- package/dist/lib/media-buy/legacy-action-ids.mjs +26 -0
- package/dist/lib/media-buy/mutations.d.mts +70 -0
- package/dist/lib/media-buy/mutations.d.ts +70 -0
- package/dist/lib/media-buy/mutations.js +525 -0
- package/dist/lib/media-buy/mutations.mjs +498 -0
- package/dist/lib/media-buy/preflight.d.mts +20 -69
- package/dist/lib/media-buy/preflight.d.ts +20 -69
- package/dist/lib/media-buy/preflight.js +100 -336
- package/dist/lib/media-buy/preflight.mjs +111 -333
- package/dist/lib/media-buy/targeting-input.d.mts +7 -4
- package/dist/lib/media-buy/targeting-input.d.ts +7 -4
- package/dist/lib/media-buy/types.d.mts +55 -7
- package/dist/lib/media-buy/types.d.ts +55 -7
- package/dist/lib/protocols/rawResponseCapture.d.mts +12 -0
- package/dist/lib/protocols/rawResponseCapture.d.ts +12 -0
- package/dist/lib/protocols/rawResponseCapture.js +33 -3
- package/dist/lib/protocols/rawResponseCapture.mjs +32 -3
- package/dist/lib/registry/types.generated.d.mts +377 -9
- package/dist/lib/registry/types.generated.d.ts +377 -9
- package/dist/lib/reporting/evidence.d.mts +1 -0
- package/dist/lib/reporting/evidence.d.ts +1 -0
- package/dist/lib/reporting/evidence.js +32 -3
- package/dist/lib/reporting/evidence.mjs +31 -3
- package/dist/lib/reporting/ledger/handler.d.mts +51 -1
- package/dist/lib/reporting/ledger/handler.d.ts +51 -1
- package/dist/lib/reporting/ledger/handler.js +306 -38
- package/dist/lib/reporting/ledger/handler.mjs +304 -37
- package/dist/lib/reporting/ledger/health.d.mts +12 -0
- package/dist/lib/reporting/ledger/health.d.ts +12 -0
- package/dist/lib/reporting/ledger/health.js +15 -2
- package/dist/lib/reporting/ledger/health.mjs +13 -1
- package/dist/lib/reporting/ledger/index.d.mts +3 -0
- package/dist/lib/reporting/ledger/index.d.ts +3 -0
- package/dist/lib/reporting/ledger/index.js +7 -1
- package/dist/lib/reporting/ledger/index.mjs +3 -0
- package/dist/lib/reporting/ledger/lifecycle.d.mts +31 -4
- package/dist/lib/reporting/ledger/lifecycle.d.ts +31 -4
- package/dist/lib/reporting/ledger/lifecycle.js +244 -37
- package/dist/lib/reporting/ledger/lifecycle.mjs +244 -37
- package/dist/lib/reporting/ledger/managed-postgres.d.mts +231 -0
- package/dist/lib/reporting/ledger/managed-postgres.d.ts +231 -0
- package/dist/lib/reporting/ledger/managed-postgres.js +1797 -0
- package/dist/lib/reporting/ledger/managed-postgres.mjs +1776 -0
- package/dist/lib/reporting/ledger/managed.d.mts +355 -0
- package/dist/lib/reporting/ledger/managed.d.ts +355 -0
- package/dist/lib/reporting/ledger/managed.js +661 -0
- package/dist/lib/reporting/ledger/managed.mjs +633 -0
- package/dist/lib/reporting/ledger/notification-activity.d.mts +222 -0
- package/dist/lib/reporting/ledger/notification-activity.d.ts +222 -0
- package/dist/lib/reporting/ledger/notification-activity.js +1139 -0
- package/dist/lib/reporting/ledger/notification-activity.mjs +1110 -0
- package/dist/lib/reporting/ledger/postgres.d.mts +161 -1
- package/dist/lib/reporting/ledger/postgres.d.ts +161 -1
- package/dist/lib/reporting/ledger/postgres.js +1153 -21
- package/dist/lib/reporting/ledger/postgres.mjs +1152 -21
- package/dist/lib/reporting/ledger/producer.d.mts +8 -0
- package/dist/lib/reporting/ledger/producer.d.ts +8 -0
- package/dist/lib/reporting/ledger/producer.js +146 -52
- package/dist/lib/reporting/ledger/producer.mjs +146 -51
- package/dist/lib/reporting/ledger/types.d.mts +358 -1
- package/dist/lib/reporting/ledger/types.d.ts +358 -1
- package/dist/lib/reporting/ledger/types.js +3 -0
- package/dist/lib/reporting/ledger/types.mjs +2 -0
- package/dist/lib/reporting/service/conformance.d.mts +35 -0
- package/dist/lib/reporting/service/conformance.d.ts +35 -0
- package/dist/lib/reporting/service/conformance.js +89 -0
- package/dist/lib/reporting/service/conformance.mjs +68 -0
- package/dist/lib/reporting/service/index.d.mts +182 -0
- package/dist/lib/reporting/service/index.d.ts +182 -0
- package/dist/lib/reporting/service/index.js +793 -0
- package/dist/lib/reporting/service/index.mjs +787 -0
- package/dist/lib/reporting/source/index.d.mts +2 -1
- package/dist/lib/reporting/source/index.d.ts +2 -1
- package/dist/lib/reporting/source/index.js +16 -3
- package/dist/lib/reporting/source/index.mjs +12 -1
- package/dist/lib/reporting/source/inline.d.mts +88 -1
- package/dist/lib/reporting/source/inline.d.ts +88 -1
- package/dist/lib/reporting/source/inline.js +1161 -163
- package/dist/lib/reporting/source/inline.mjs +1166 -163
- package/dist/lib/reporting/source/manifest.js +12 -7
- package/dist/lib/reporting/source/manifest.mjs +12 -7
- package/dist/lib/reporting/source/source.d.mts +26 -0
- package/dist/lib/reporting/source/source.d.ts +26 -0
- package/dist/lib/reporting/source/source.js +71 -2
- package/dist/lib/reporting/source/source.mjs +65 -1
- package/dist/lib/schemas-data/v2.5/_provenance.json +1 -1
- package/dist/lib/server/create-adcp-server.d.mts +18 -0
- package/dist/lib/server/create-adcp-server.d.ts +18 -0
- package/dist/lib/server/create-adcp-server.js +52 -2
- package/dist/lib/server/create-adcp-server.mjs +52 -2
- package/dist/lib/server/decisioning/account.d.mts +1 -1
- package/dist/lib/server/decisioning/account.d.ts +1 -1
- package/dist/lib/server/decisioning/index.d.mts +1 -0
- package/dist/lib/server/decisioning/index.d.ts +1 -0
- package/dist/lib/server/decisioning/platform.d.mts +3 -0
- package/dist/lib/server/decisioning/platform.d.ts +3 -0
- package/dist/lib/server/decisioning/runtime/from-platform.js +88 -10
- package/dist/lib/server/decisioning/runtime/from-platform.mjs +88 -10
- package/dist/lib/server/decisioning/specialisms/reporting.d.mts +38 -0
- package/dist/lib/server/decisioning/specialisms/reporting.d.ts +38 -0
- package/dist/lib/{types/v3-1-beta/index.js → server/decisioning/specialisms/reporting.js} +2 -8
- package/dist/lib/server/decisioning/specialisms/reporting.mjs +0 -0
- package/dist/lib/server/index.d.mts +4 -2
- package/dist/lib/server/index.d.ts +4 -2
- package/dist/lib/server/index.js +5 -0
- package/dist/lib/server/index.mjs +4 -0
- package/dist/lib/server/media-buy-action-resolver.d.mts +63 -0
- package/dist/lib/server/media-buy-action-resolver.d.ts +63 -0
- package/dist/lib/server/media-buy-action-resolver.js +297 -0
- package/dist/lib/server/media-buy-action-resolver.mjs +285 -0
- package/dist/lib/server/media-buy-actions.d.mts +7 -8
- package/dist/lib/server/media-buy-actions.d.ts +7 -8
- package/dist/lib/server/media-buy-actions.js +57 -14
- package/dist/lib/server/media-buy-actions.mjs +63 -14
- package/dist/lib/server/notification-subscriptions/index.d.mts +2 -2
- package/dist/lib/server/notification-subscriptions/index.d.ts +2 -2
- package/dist/lib/server/notification-subscriptions/index.js +2 -0
- package/dist/lib/server/notification-subscriptions/index.mjs +2 -0
- package/dist/lib/server/notification-subscriptions/postgres-runtime.d.mts +3 -1
- package/dist/lib/server/notification-subscriptions/postgres-runtime.d.ts +3 -1
- package/dist/lib/server/notification-subscriptions/postgres-runtime.js +1 -0
- package/dist/lib/server/notification-subscriptions/postgres-runtime.mjs +1 -0
- package/dist/lib/server/notification-subscriptions/runtime.d.mts +12 -1
- package/dist/lib/server/notification-subscriptions/runtime.d.ts +12 -1
- package/dist/lib/server/notification-subscriptions/runtime.js +102 -16
- package/dist/lib/server/notification-subscriptions/runtime.mjs +101 -16
- package/dist/lib/server/notification-subscriptions/types.d.mts +104 -1
- package/dist/lib/server/notification-subscriptions/types.d.ts +104 -1
- package/dist/lib/server/webhook-emitter.d.mts +40 -5
- package/dist/lib/server/webhook-emitter.d.ts +40 -5
- package/dist/lib/server/webhook-emitter.js +23 -12
- package/dist/lib/server/webhook-emitter.mjs +23 -12
- package/dist/lib/storage/interfaces.d.mts +14 -2
- package/dist/lib/storage/interfaces.d.ts +14 -2
- package/dist/lib/testing/compliance/comply.d.mts +9 -3
- package/dist/lib/testing/compliance/comply.d.ts +9 -3
- package/dist/lib/testing/compliance/comply.js +158 -3
- package/dist/lib/testing/compliance/comply.mjs +159 -4
- package/dist/lib/testing/compliance/storyboard-tracks.js +7 -5
- package/dist/lib/testing/compliance/storyboard-tracks.mjs +7 -5
- package/dist/lib/testing/compliance/summary.js +10 -1
- package/dist/lib/testing/compliance/summary.mjs +10 -1
- package/dist/lib/testing/index.d.mts +1 -1
- package/dist/lib/testing/index.d.ts +1 -1
- package/dist/lib/testing/index.js +2 -0
- package/dist/lib/testing/index.mjs +3 -1
- package/dist/lib/testing/storyboard/agent-routing.d.mts +12 -43
- package/dist/lib/testing/storyboard/agent-routing.d.ts +12 -43
- package/dist/lib/testing/storyboard/agent-routing.js +75 -13
- package/dist/lib/testing/storyboard/agent-routing.mjs +70 -12
- package/dist/lib/testing/storyboard/index.d.mts +1 -0
- package/dist/lib/testing/storyboard/index.d.ts +1 -0
- package/dist/lib/testing/storyboard/index.js +3 -0
- package/dist/lib/testing/storyboard/index.mjs +2 -0
- package/dist/lib/testing/storyboard/junit.d.mts +1 -1
- package/dist/lib/testing/storyboard/junit.d.ts +1 -1
- package/dist/lib/testing/storyboard/junit.js +21 -2
- package/dist/lib/testing/storyboard/junit.mjs +21 -2
- package/dist/lib/testing/storyboard/probes.d.mts +130 -0
- package/dist/lib/testing/storyboard/probes.d.ts +130 -0
- package/dist/lib/testing/storyboard/probes.js +682 -10
- package/dist/lib/testing/storyboard/probes.mjs +683 -3
- package/dist/lib/testing/storyboard/request-signing/builder.d.mts +16 -5
- package/dist/lib/testing/storyboard/request-signing/builder.d.ts +16 -5
- package/dist/lib/testing/storyboard/request-signing/grader.d.mts +44 -1
- package/dist/lib/testing/storyboard/request-signing/grader.d.ts +44 -1
- package/dist/lib/testing/storyboard/request-signing/grader.js +46 -22
- package/dist/lib/testing/storyboard/request-signing/grader.mjs +43 -21
- package/dist/lib/testing/storyboard/request-signing/probe-dispatch.d.mts +86 -11
- package/dist/lib/testing/storyboard/request-signing/probe-dispatch.d.ts +86 -11
- package/dist/lib/testing/storyboard/request-signing/probe-dispatch.js +119 -25
- package/dist/lib/testing/storyboard/request-signing/probe-dispatch.mjs +117 -26
- package/dist/lib/testing/storyboard/request-signing/synthesize.js +22 -2
- package/dist/lib/testing/storyboard/request-signing/synthesize.mjs +22 -2
- package/dist/lib/testing/storyboard/runner.d.mts +103 -0
- package/dist/lib/testing/storyboard/runner.d.ts +103 -0
- package/dist/lib/testing/storyboard/runner.js +1090 -268
- package/dist/lib/testing/storyboard/runner.mjs +1096 -261
- package/dist/lib/testing/storyboard/seeding.d.mts +4 -1
- package/dist/lib/testing/storyboard/seeding.d.ts +4 -1
- package/dist/lib/testing/storyboard/seeding.js +55 -24
- package/dist/lib/testing/storyboard/seeding.mjs +55 -24
- package/dist/lib/testing/storyboard/test-kit.d.mts +37 -3
- package/dist/lib/testing/storyboard/test-kit.d.ts +37 -3
- package/dist/lib/testing/storyboard/test-kit.js +8 -2
- package/dist/lib/testing/storyboard/test-kit.mjs +7 -2
- package/dist/lib/testing/storyboard/types.d.mts +132 -10
- package/dist/lib/testing/storyboard/types.d.ts +132 -10
- package/dist/lib/testing/storyboard/types.js +17 -0
- package/dist/lib/testing/storyboard/types.mjs +16 -0
- 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.js +16 -0
- package/dist/lib/testing/storyboard/validations.mjs +16 -0
- package/dist/lib/testing/test-controller.d.mts +1 -1
- package/dist/lib/testing/test-controller.d.ts +1 -1
- package/dist/lib/types/buy-products.d.ts +71 -6
- package/dist/lib/types/control-media-buy.d.ts +25 -11
- package/dist/lib/types/core.generated.d.mts +69 -10
- package/dist/lib/types/core.generated.d.ts +69 -10
- package/dist/lib/types/create-media-buy.d.ts +71 -6
- package/dist/lib/types/forward-compat-error-codes.d.mts +7 -6
- package/dist/lib/types/forward-compat-error-codes.d.ts +7 -6
- package/dist/lib/types/index.d.mts +2 -2
- package/dist/lib/types/index.d.ts +2 -2
- package/dist/lib/types/schemas.generated.d.ts +8040 -8116
- package/dist/lib/types/schemas.generated.js +1074 -309
- package/dist/lib/types/schemas.generated.mjs +1068 -309
- package/dist/lib/types/tools.generated.d.mts +65 -6
- package/dist/lib/types/tools.generated.d.ts +65 -6
- package/dist/lib/types/update-media-buy.d.ts +71 -6
- package/dist/lib/utils/redact-secrets.d.mts +1 -1
- package/dist/lib/utils/redact-secrets.d.ts +1 -1
- package/dist/lib/utils/redact-secrets.js +1 -1
- package/dist/lib/utils/redact-secrets.mjs +1 -1
- package/dist/lib/v2/projection/cache-versions.d.mts +0 -1
- package/dist/lib/v2/projection/cache-versions.d.ts +0 -1
- package/dist/lib/v2/projection/cache-versions.js +1 -15
- package/dist/lib/v2/projection/cache-versions.mjs +1 -14
- package/dist/lib/v2/projection/canonical-properties.js +2 -2
- package/dist/lib/v2/projection/canonical-properties.mjs +3 -3
- package/dist/lib/v2/projection/registry.d.mts +1 -1
- package/dist/lib/v2/projection/registry.d.ts +1 -1
- package/dist/lib/v2/projection/registry.js +2 -2
- package/dist/lib/v2/projection/registry.mjs +3 -3
- package/dist/lib/version.d.mts +5 -5
- package/dist/lib/version.d.ts +5 -5
- package/dist/lib/version.js +3 -8
- package/dist/lib/version.mjs +3 -8
- package/dist/lib/wholesale-feed-sync/index.d.mts +1 -0
- package/dist/lib/wholesale-feed-sync/index.d.ts +1 -0
- package/dist/lib/wholesale-feed-sync/protocol-types.d.mts +42 -0
- package/dist/lib/wholesale-feed-sync/protocol-types.d.ts +42 -0
- package/dist/lib/wholesale-feed-sync/protocol-types.js +16 -0
- package/dist/lib/wholesale-feed-sync/protocol-types.mjs +0 -0
- package/dist/lib/wholesale-feed-sync/sync.d.mts +6 -6
- package/dist/lib/wholesale-feed-sync/sync.d.ts +6 -6
- package/dist/lib/wholesale-feed-sync/sync.js +3 -1
- package/dist/lib/wholesale-feed-sync/sync.mjs +3 -1
- package/dist/lib/wholesale-feed-sync/types.d.mts +15 -14
- package/dist/lib/wholesale-feed-sync/types.d.ts +15 -14
- package/dist/lib/wholesale-feed-sync/webhook-notification.d.mts +7 -5
- package/dist/lib/wholesale-feed-sync/webhook-notification.d.ts +7 -5
- package/dist/lib/wholesale-feed-sync/webhook-notification.js +45 -0
- package/dist/lib/wholesale-feed-sync/webhook-notification.mjs +44 -0
- package/docs/CLI.md +1 -1
- package/docs/TYPE-SUMMARY.md +118 -4
- package/docs/guides/ASYNC-API-REFERENCE.md +62 -1
- package/docs/guides/ASYNC-DEVELOPER-GUIDE.md +25 -0
- package/docs/guides/ASYNC-DOCUMENTATION-INDEX.md +3 -0
- package/docs/guides/BUYER-QUICKSTART-3.2.md +5 -0
- package/docs/guides/DURABLE-BUYER-WRITES.md +337 -0
- package/docs/guides/EXISTING-PLATFORM.md +35 -0
- package/docs/guides/MEDIA-BUY-3.2-COMPATIBILITY.md +7 -3
- package/docs/guides/MEDIA-BUY-ACTION-ASSESSMENT.md +300 -0
- package/docs/guides/REPORTING-LEDGER.md +654 -3
- package/docs/guides/REPORTING-SOURCE-EXECUTOR.md +63 -1
- package/docs/guides/SELLER-QUICKSTART-3.2.md +2 -0
- package/docs/guides/VALIDATE-YOUR-AGENT.md +35 -0
- package/docs/guides/idempotency-crash-recovery.md +4 -0
- package/docs/llms.txt +4 -2
- package/docs/migration-14.x-rc-worksheet.md +5 -5
- package/docs/migration-7.9-to-7.10.md +7 -5
- package/examples/README.md +17 -0
- package/examples/durable-buyer-writes/caller.ts +745 -0
- package/examples/durable-buyer-writes/worker.ts +240 -0
- package/examples/reliable-reporting-service/README.md +100 -0
- package/examples/seller-3.2-starter.ts +7 -8
- package/examples/targeting-input-existing-platform.ts +153 -0
- package/package.json +41 -29
- package/skills/build-seller-agent/specialisms/signed-requests.md +11 -1
- package/skills/cross-cutting.md +28 -11
- package/compliance/cache/3.1.0-beta.7/domains/brand/index.yaml +0 -160
- package/compliance/cache/3.1.0-beta.7/domains/brand/scenarios/distributed_brand_resolution.yaml +0 -415
- package/compliance/cache/3.1.0-beta.7/domains/brand/scenarios/single_side_trust_extension.yaml +0 -454
- package/compliance/cache/3.1.0-beta.7/domains/creative/index.yaml +0 -339
- package/compliance/cache/3.1.0-beta.7/domains/creative/scenarios/billing_out_of_band.yaml +0 -153
- package/compliance/cache/3.1.0-beta.7/domains/creative/scenarios/creative_lifecycle_webhooks.yaml +0 -389
- package/compliance/cache/3.1.0-beta.7/domains/creative/scenarios/native_in_feed.yaml +0 -543
- package/compliance/cache/3.1.0-beta.7/domains/governance/index.yaml +0 -682
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/index.yaml +0 -781
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/audience_buy_flow.yaml +0 -380
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/available_actions.yaml +0 -565
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/billing_finality_delivery.yaml +0 -354
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/canonical_formats.yaml +0 -711
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/clicks_buy_flow.yaml +0 -264
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/completed_views_buy_flow.yaml +0 -344
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/create_media_buy_async.yaml +0 -234
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/creative_fate_after_cancellation.yaml +0 -419
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/creative_reception.yaml +0 -247
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/delivery_reporting.yaml +0 -357
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/dependency_impairment.yaml +0 -633
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/dependency_impairment_cardinality.yaml +0 -800
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/event_dedup_flow.yaml +0 -399
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/frequency_cap_enforcement.yaml +0 -309
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/governance_approved.yaml +0 -214
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/governance_conditions.yaml +0 -199
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/governance_denied.yaml +0 -204
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/governance_denied_recovery.yaml +0 -252
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/invalid_transitions.yaml +0 -289
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/inventory_list_no_match.yaml +0 -148
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/inventory_list_targeting.yaml +0 -276
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/measurement_accountability.yaml +0 -244
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/measurement_terms_rejected.yaml +0 -203
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/pending_creatives_to_start.yaml +0 -274
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/per_creative_conversion_attribution.yaml +0 -500
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/performance_buy_flow.yaml +0 -428
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/performance_buy_flow_roas.yaml +0 -470
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/product_signal_targeting.yaml +0 -373
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/proposal_finalize.yaml +0 -399
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/proposal_finalize_asap_timing.yaml +0 -264
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/proposal_not_found_errors.yaml +0 -257
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/provenance_audit_observation.yaml +0 -333
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/provenance_enforcement.yaml +0 -517
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/provenance_truth_of_claim.yaml +0 -294
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/reach_buy_flow.yaml +0 -823
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/refine_finalize_exclusivity.yaml +0 -360
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/refine_products.yaml +0 -148
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/vendor_metric_accountability.yaml +0 -293
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/vendor_metric_catalog_precondition.yaml +0 -307
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/vendor_metric_optimization_flow.yaml +0 -576
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/state-machine.yaml +0 -442
- package/compliance/cache/3.1.0-beta.7/domains/signals/index.yaml +0 -266
- package/compliance/cache/3.1.0-beta.7/domains/sponsored-intelligence/index.yaml +0 -256
- package/compliance/cache/3.1.0-beta.7/index.json +0 -356
- package/compliance/cache/3.1.0-beta.7/protocols/brand/index.yaml +0 -160
- package/compliance/cache/3.1.0-beta.7/protocols/brand/scenarios/distributed_brand_resolution.yaml +0 -415
- package/compliance/cache/3.1.0-beta.7/protocols/brand/scenarios/single_side_trust_extension.yaml +0 -454
- package/compliance/cache/3.1.0-beta.7/protocols/creative/index.yaml +0 -339
- package/compliance/cache/3.1.0-beta.7/protocols/creative/scenarios/billing_out_of_band.yaml +0 -153
- package/compliance/cache/3.1.0-beta.7/protocols/creative/scenarios/creative_lifecycle_webhooks.yaml +0 -389
- package/compliance/cache/3.1.0-beta.7/protocols/creative/scenarios/native_in_feed.yaml +0 -543
- package/compliance/cache/3.1.0-beta.7/protocols/governance/index.yaml +0 -682
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/index.yaml +0 -781
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/audience_buy_flow.yaml +0 -380
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/available_actions.yaml +0 -565
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/billing_finality_delivery.yaml +0 -354
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/canonical_formats.yaml +0 -711
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/clicks_buy_flow.yaml +0 -264
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/completed_views_buy_flow.yaml +0 -344
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/create_media_buy_async.yaml +0 -234
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/creative_fate_after_cancellation.yaml +0 -419
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/creative_reception.yaml +0 -247
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/delivery_reporting.yaml +0 -357
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/dependency_impairment.yaml +0 -633
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/dependency_impairment_cardinality.yaml +0 -800
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/event_dedup_flow.yaml +0 -399
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/frequency_cap_enforcement.yaml +0 -309
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/governance_approved.yaml +0 -214
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/governance_conditions.yaml +0 -199
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/governance_denied.yaml +0 -204
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/governance_denied_recovery.yaml +0 -252
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/invalid_transitions.yaml +0 -289
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/inventory_list_no_match.yaml +0 -148
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/inventory_list_targeting.yaml +0 -276
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/measurement_accountability.yaml +0 -244
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/measurement_terms_rejected.yaml +0 -203
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/pending_creatives_to_start.yaml +0 -274
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/per_creative_conversion_attribution.yaml +0 -500
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/performance_buy_flow.yaml +0 -428
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/performance_buy_flow_roas.yaml +0 -470
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/product_signal_targeting.yaml +0 -373
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/proposal_finalize.yaml +0 -399
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/proposal_finalize_asap_timing.yaml +0 -264
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/proposal_not_found_errors.yaml +0 -257
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/provenance_audit_observation.yaml +0 -333
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/provenance_enforcement.yaml +0 -517
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/provenance_truth_of_claim.yaml +0 -294
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/reach_buy_flow.yaml +0 -823
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/refine_finalize_exclusivity.yaml +0 -360
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/refine_products.yaml +0 -148
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/vendor_metric_accountability.yaml +0 -293
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/vendor_metric_catalog_precondition.yaml +0 -307
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/vendor_metric_optimization_flow.yaml +0 -576
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/state-machine.yaml +0 -442
- package/compliance/cache/3.1.0-beta.7/protocols/signals/index.yaml +0 -266
- package/compliance/cache/3.1.0-beta.7/protocols/sponsored-intelligence/index.yaml +0 -256
- package/compliance/cache/3.1.0-beta.7/specialisms/audience-sync/index.yaml +0 -313
- package/compliance/cache/3.1.0-beta.7/specialisms/brand-rights/index.yaml +0 -350
- package/compliance/cache/3.1.0-beta.7/specialisms/brand-rights/scenarios/governance_denied.yaml +0 -226
- package/compliance/cache/3.1.0-beta.7/specialisms/collection-lists/index.yaml +0 -359
- package/compliance/cache/3.1.0-beta.7/specialisms/content-standards/index.yaml +0 -572
- package/compliance/cache/3.1.0-beta.7/specialisms/creative-ad-server/index.yaml +0 -409
- package/compliance/cache/3.1.0-beta.7/specialisms/creative-generative/generative-seller.yaml +0 -807
- package/compliance/cache/3.1.0-beta.7/specialisms/creative-generative/index.yaml +0 -758
- package/compliance/cache/3.1.0-beta.7/specialisms/creative-template/index.yaml +0 -510
- package/compliance/cache/3.1.0-beta.7/specialisms/governance-aware-seller/index.yaml +0 -143
- package/compliance/cache/3.1.0-beta.7/specialisms/governance-aware-seller/scenarios/governance_multi_agent_rejected.yaml +0 -117
- package/compliance/cache/3.1.0-beta.7/specialisms/governance-delivery-monitor/index.yaml +0 -441
- package/compliance/cache/3.1.0-beta.7/specialisms/governance-spend-authority/denied.yaml +0 -221
- package/compliance/cache/3.1.0-beta.7/specialisms/governance-spend-authority/index.yaml +0 -330
- package/compliance/cache/3.1.0-beta.7/specialisms/property-lists/index.yaml +0 -482
- package/compliance/cache/3.1.0-beta.7/specialisms/sales-broadcast-tv/index.yaml +0 -738
- package/compliance/cache/3.1.0-beta.7/specialisms/sales-catalog-driven/index.yaml +0 -840
- package/compliance/cache/3.1.0-beta.7/specialisms/sales-guaranteed/index.yaml +0 -601
- package/compliance/cache/3.1.0-beta.7/specialisms/sales-non-guaranteed/index.yaml +0 -546
- package/compliance/cache/3.1.0-beta.7/specialisms/sales-proposal-mode/index.yaml +0 -586
- package/compliance/cache/3.1.0-beta.7/specialisms/sales-social/index.yaml +0 -919
- package/compliance/cache/3.1.0-beta.7/specialisms/signal-marketplace/index.yaml +0 -424
- package/compliance/cache/3.1.0-beta.7/specialisms/signal-marketplace/scenarios/governance_denied.yaml +0 -211
- package/compliance/cache/3.1.0-beta.7/specialisms/signal-owned/index.yaml +0 -317
- package/compliance/cache/3.1.0-beta.7/specialisms/sponsored-intelligence/index.yaml +0 -59
- package/compliance/cache/3.1.0-beta.7/test-kits/acme-outdoor-live.yaml +0 -78
- package/compliance/cache/3.1.0-beta.7/test-kits/acme-outdoor.yaml +0 -223
- package/compliance/cache/3.1.0-beta.7/test-kits/billing-gate-runner.yaml +0 -115
- package/compliance/cache/3.1.0-beta.7/test-kits/bistro-oranje.yaml +0 -126
- package/compliance/cache/3.1.0-beta.7/test-kits/distributed-brand-runner.yaml +0 -281
- package/compliance/cache/3.1.0-beta.7/test-kits/nova-motors.yaml +0 -262
- package/compliance/cache/3.1.0-beta.7/test-kits/osei-natural.yaml +0 -126
- package/compliance/cache/3.1.0-beta.7/test-kits/parallel-dispatch-runner.yaml +0 -196
- package/compliance/cache/3.1.0-beta.7/test-kits/rate-limit-trip-runner.yaml +0 -172
- package/compliance/cache/3.1.0-beta.7/test-kits/signed-requests-runner.yaml +0 -155
- package/compliance/cache/3.1.0-beta.7/test-kits/single-side-trust-runner.yaml +0 -294
- package/compliance/cache/3.1.0-beta.7/test-kits/substitution-observer-runner.yaml +0 -688
- package/compliance/cache/3.1.0-beta.7/test-kits/summit-foods.yaml +0 -125
- package/compliance/cache/3.1.0-beta.7/test-kits/webhook-receiver-runner.yaml +0 -265
- package/compliance/cache/3.1.0-beta.7/test-vectors/plan-hash/001-minimal-plan.json +0 -43
- package/compliance/cache/3.1.0-beta.7/test-vectors/plan-hash/002-full-plan.json +0 -217
- package/compliance/cache/3.1.0-beta.7/test-vectors/plan-hash/003-bookkeeping-stripped.json +0 -60
- package/compliance/cache/3.1.0-beta.7/test-vectors/plan-hash/004a-human-review-omitted.json +0 -43
- package/compliance/cache/3.1.0-beta.7/test-vectors/plan-hash/004b-human-review-explicit-null.json +0 -49
- package/compliance/cache/3.1.0-beta.7/test-vectors/plan-hash/005a-policy-categories-order-1.json +0 -53
- package/compliance/cache/3.1.0-beta.7/test-vectors/plan-hash/005b-policy-categories-order-2.json +0 -57
- package/compliance/cache/3.1.0-beta.7/test-vectors/plan-hash/006a-ext-trace-v1.json +0 -49
- package/compliance/cache/3.1.0-beta.7/test-vectors/plan-hash/006b-ext-trace-v2.json +0 -53
- package/compliance/cache/3.1.0-beta.7/test-vectors/plan-hash/007-unicode-objectives.json +0 -43
- package/compliance/cache/3.1.0-beta.7/test-vectors/plan-hash/008-numeric-canonicalization.json +0 -65
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/README.md +0 -220
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/canonicalization.json +0 -241
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/keys.json +0 -60
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/001-no-signature-header.json +0 -24
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/002-wrong-tag.json +0 -26
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/003-expired-signature.json +0 -26
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/004-window-too-long.json +0 -26
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/005-alg-not-allowed.json +0 -26
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/006-missing-covered-component.json +0 -26
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/007-missing-content-digest.json +0 -26
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/008-unknown-keyid.json +0 -26
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/009-key-ops-missing-verify.json +0 -27
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/010-content-digest-mismatch.json +0 -33
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/011-malformed-header.json +0 -27
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/012-missing-expires-param.json +0 -26
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/013-expires-le-created.json +0 -27
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/014-missing-nonce-param.json +0 -27
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/015-signature-invalid.json +0 -28
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/016-replayed-nonce.json +0 -35
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/017-key-revoked.json +0 -38
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/018-digest-covered-when-forbidden.json +0 -28
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/019-signature-without-signature-input.json +0 -26
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/020-rate-abuse.json +0 -34
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/021-duplicate-signature-input-label.json +0 -31
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/022-multi-valued-content-type.json +0 -31
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/023-multi-valued-content-digest.json +0 -32
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/024-unquoted-string-param.json +0 -31
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/025-jwk-alg-crv-mismatch.json +0 -43
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/026-non-ascii-host.json +0 -31
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/027-webhook-registration-authentication-unsigned.json +0 -25
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/028-unsigned-protocol-method-required.json +0 -26
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/positive/001-basic-post.json +0 -30
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/positive/002-post-with-content-digest.json +0 -31
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/positive/003-es256-post.json +0 -30
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/positive/004-multiple-signature-labels.json +0 -26
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/positive/005-default-port-stripped.json +0 -30
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/positive/006-dot-segment-path.json +0 -30
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/positive/007-query-byte-preserved.json +0 -30
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/positive/008-percent-encoded-path.json +0 -30
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/positive/009-percent-encoded-unreserved-decoded.json +0 -30
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/positive/010-percent-encoded-slash-preserved.json +0 -30
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/positive/011-ipv6-authority.json +0 -30
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/positive/012-ipv6-authority-default-port-stripped.json +0 -30
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/README.md +0 -211
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/keys.json +0 -61
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/001-wrong-tag.json +0 -26
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/002-expired-signature.json +0 -26
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/003-window-too-long.json +0 -26
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/004-alg-not-allowed.json +0 -26
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/005-missing-authority-component.json +0 -26
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/006-missing-content-digest.json +0 -25
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/007-unknown-keyid.json +0 -26
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/008-wrong-adcp-use.json +0 -26
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/009-content-digest-mismatch.json +0 -26
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/010-malformed-signature-input.json +0 -26
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/011-signature-without-input.json +0 -25
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/012-missing-expires-param.json +0 -26
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/013-expires-le-created.json +0 -26
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/014-missing-nonce-param.json +0 -26
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/015-signature-invalid.json +0 -26
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/016-replayed-nonce.json +0 -37
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/017-key-revoked.json +0 -32
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/018-rate-abuse.json +0 -33
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/019-revocation-stale.json +0 -32
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/020-key-ops-missing-verify.json +0 -41
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/021-base64-alphabet-mixing.json +0 -26
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/positive/001-basic-post.json +0 -24
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/positive/002-es256-post.json +0 -24
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/positive/003-multiple-signature-labels.json +0 -24
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/positive/004-default-port-stripped.json +0 -24
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/positive/005-percent-encoded-path.json +0 -24
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/positive/006-query-byte-preserved.json +0 -24
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/positive/007-body-without-idempotency-key.json +0 -25
- package/compliance/cache/3.1.0-beta.7/universal/billing-gate-dispatch.yaml +0 -450
- package/compliance/cache/3.1.0-beta.7/universal/canonical-format-validate-input.yaml +0 -640
- package/compliance/cache/3.1.0-beta.7/universal/capability-discovery.yaml +0 -125
- package/compliance/cache/3.1.0-beta.7/universal/collection-lists-pagination-integrity.yaml +0 -306
- package/compliance/cache/3.1.0-beta.7/universal/comply-controller-mode-gate.yaml +0 -141
- package/compliance/cache/3.1.0-beta.7/universal/content-standards-pagination-integrity.yaml +0 -326
- package/compliance/cache/3.1.0-beta.7/universal/deterministic-testing.yaml +0 -1430
- package/compliance/cache/3.1.0-beta.7/universal/error-compliance-signals.yaml +0 -377
- package/compliance/cache/3.1.0-beta.7/universal/error-compliance.yaml +0 -528
- package/compliance/cache/3.1.0-beta.7/universal/fictional-entities.yaml +0 -307
- package/compliance/cache/3.1.0-beta.7/universal/get-media-buys-pagination-integrity.yaml +0 -160
- package/compliance/cache/3.1.0-beta.7/universal/get-signals-pagination-integrity.yaml +0 -211
- package/compliance/cache/3.1.0-beta.7/universal/idempotency.yaml +0 -861
- package/compliance/cache/3.1.0-beta.7/universal/notification-config-event-scope.yaml +0 -119
- package/compliance/cache/3.1.0-beta.7/universal/notification-config-lifecycle.yaml +0 -337
- package/compliance/cache/3.1.0-beta.7/universal/notification-config-rejections.yaml +0 -107
- package/compliance/cache/3.1.0-beta.7/universal/pagination-integrity-creative-formats.yaml +0 -265
- package/compliance/cache/3.1.0-beta.7/universal/pagination-integrity-list-accounts.yaml +0 -245
- package/compliance/cache/3.1.0-beta.7/universal/pagination-integrity.yaml +0 -263
- package/compliance/cache/3.1.0-beta.7/universal/property-lists-pagination-integrity.yaml +0 -307
- package/compliance/cache/3.1.0-beta.7/universal/read-tool-idempotency.yaml +0 -405
- package/compliance/cache/3.1.0-beta.7/universal/runner-output-contract.yaml +0 -1266
- package/compliance/cache/3.1.0-beta.7/universal/schema-validation-signals.yaml +0 -181
- package/compliance/cache/3.1.0-beta.7/universal/schema-validation.yaml +0 -548
- package/compliance/cache/3.1.0-beta.7/universal/security.yaml +0 -539
- package/compliance/cache/3.1.0-beta.7/universal/signed-requests.yaml +0 -217
- package/compliance/cache/3.1.0-beta.7/universal/stale-response-advisory.yaml +0 -295
- package/compliance/cache/3.1.0-beta.7/universal/storyboard-schema.yaml +0 -2136
- package/compliance/cache/3.1.0-beta.7/universal/v3-envelope-integrity.yaml +0 -117
- package/compliance/cache/3.1.0-beta.7/universal/version-negotiation.yaml +0 -130
- package/compliance/cache/3.1.0-beta.7/universal/webhook-emission.yaml +0 -411
- package/compliance/cache/3.1.0-beta.7/universal/wholesale-feed-bulk-webhooks.yaml +0 -82
- package/compliance/cache/3.1.0-beta.7/universal/wholesale-feed-product-webhooks.yaml +0 -83
- package/compliance/cache/3.1.0-beta.7/universal/wholesale-feed-products.yaml +0 -151
- package/compliance/cache/3.1.0-beta.7/universal/wholesale-feed-signal-webhooks.yaml +0 -83
- package/compliance/cache/3.1.0-beta.7/universal/wholesale-feed-signals.yaml +0 -149
- package/dist/lib/types/v3-1-beta/index.d.mts +0 -1
- package/dist/lib/types/v3-1-beta/index.d.ts +0 -1
- package/dist/lib/types/v3-1-beta/index.mjs +0 -1
- package/dist/lib/types/v3-1-beta/tools.generated.d.mts +0 -26788
- package/dist/lib/types/v3-1-beta/tools.generated.d.ts +0 -26788
- /package/dist/lib/{types/v3-1-beta/tools.generated.mjs → media-buy/action-types.mjs} +0 -0
|
@@ -1,22 +1,97 @@
|
|
|
1
1
|
import type { HttpProbeResult, StoryboardRunOptions } from '../types';
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* `
|
|
3
|
+
* Detail surfaced on each vector step an A2A run cannot frame. Written for
|
|
4
|
+
* the operator reading a conformance report: it has to say what coverage is
|
|
5
|
+
* missing and what would restore it.
|
|
6
|
+
*
|
|
7
|
+
* Reported as detailed reason `signing_transport_unavailable`, canonical
|
|
8
|
+
* `not_applicable` with the sub-reason token as `skip.detail` — the output
|
|
9
|
+
* contract's registered shape. What keeps the gap from reading as a pass is
|
|
10
|
+
* `signingCoverage` in the runner, not the reason: no vector reached the
|
|
11
|
+
* agent, so the storyboard cannot pass and the track grades `partial`
|
|
12
|
+
* instead of letting a sibling storyboard's passes roll it up green.
|
|
13
|
+
*/
|
|
14
|
+
export declare const SIGNING_VECTORS_UNAVAILABLE_DETAIL: string;
|
|
15
|
+
/**
|
|
16
|
+
* Resolve the vector transport for a graded agent.
|
|
17
|
+
*
|
|
18
|
+
* Defaults to `'mcp'`: the storyboard runner reaches MCP agents through
|
|
19
|
+
* `tools/call` — never through per-task HTTP paths — so replaying the
|
|
20
|
+
* vectors' recorded REST targets (`/adcp/create_media_buy`, raw task body)
|
|
21
|
+
* verbatim guarantees a routing 404 on every MCP-transport agent before its
|
|
22
|
+
* verifier can run (adcontextprotocol/adcp#6548). Operators grading a
|
|
23
|
+
* REST-binding agent opt back in with `request_signing.transport: 'raw'`.
|
|
24
|
+
*
|
|
25
|
+
* Returns `undefined` on an A2A run that didn't pick a transport explicitly:
|
|
26
|
+
* neither dispatch shape this runner implements is an A2A request, so the
|
|
27
|
+
* caller skips those vectors as `signing_transport_unavailable` instead of
|
|
28
|
+
* POSTing an MCP envelope at an A2A
|
|
29
|
+
* endpoint and grading the resulting 405 as a signature failure
|
|
30
|
+
* (adcp-client#2954). An explicit `transport` still wins — that's the escape
|
|
31
|
+
* hatch for an agent whose MCP or REST binding answers on the same URL as its
|
|
32
|
+
* A2A card.
|
|
33
|
+
*
|
|
34
|
+
* There is no `'a2a'` member yet because the path isn't wired here, not
|
|
35
|
+
* because the official client is incapable: `@a2a-js/sdk` issues the JSON-RPC
|
|
36
|
+
* methods these vectors target, `tasks/cancel` included. Wiring it means
|
|
37
|
+
* signing a request the official client issues — applying each vector's RFC
|
|
38
|
+
* 9421 headers to that client's own request — plus an upstream answer for how
|
|
39
|
+
* a verifier scopes `required_for` over A2A methods. RFC 9421 conformance
|
|
40
|
+
* needs byte-level control of the request, which `builder.ts` has for the two
|
|
41
|
+
* bindings AdCP defines for these fixtures; there is no third binding to
|
|
42
|
+
* write bytes against, and picking one here would be the SDK inventing it.
|
|
43
|
+
* The only vectors that still grade are the ones needing no wire exchange at
|
|
44
|
+
* all — see `gradableWithoutVectorTransport`.
|
|
11
45
|
*/
|
|
12
46
|
export declare function resolveVectorTransport(rsOpts: {
|
|
13
47
|
transport?: 'raw' | 'mcp';
|
|
14
|
-
}): 'raw' | 'mcp';
|
|
48
|
+
}, protocol?: 'mcp' | 'a2a'): 'raw' | 'mcp' | undefined;
|
|
15
49
|
/**
|
|
16
50
|
* Dispatch a synthesized request-signing step. The step ID encodes the vector
|
|
17
51
|
* (`positive-<id>` / `negative-<id>`); this helper decodes it, runs the
|
|
18
52
|
* grader's per-vector logic, and maps the `VectorGradeResult` to an
|
|
19
|
-
* `HttpProbeResult`-shaped return so the
|
|
20
|
-
* (`http_status`, `http_status_in`) works unchanged.
|
|
53
|
+
* `HttpProbeResult`-shaped return so the HTTP validation pipeline
|
|
54
|
+
* (`http_status`, `http_status_in`) works unchanged for probed vectors.
|
|
55
|
+
*
|
|
56
|
+
* Vectors the grader decides in-library rather than over HTTP (the
|
|
57
|
+
* `jwks_override` negatives) carry `http_status: 0` by contract — there is no
|
|
58
|
+
* wire exchange to report. Their verdict travels on `error`: unset when the
|
|
59
|
+
* library verifier produced the expected rejection, set to the grader's
|
|
60
|
+
* diagnostic otherwise. `synthesizeNegativeStep` pairs those vectors with a
|
|
61
|
+
* `probe_passed` validation that reads exactly that field; asserting an HTTP
|
|
62
|
+
* status against them would compare a grade to a status code that no
|
|
63
|
+
* implementation can move (adcp-client#2955).
|
|
21
64
|
*/
|
|
22
65
|
export declare function probeRequestSigningVector(stepId: string, agentUrl: string, options: StoryboardRunOptions): Promise<HttpProbeResult>;
|
|
66
|
+
/**
|
|
67
|
+
* Wire-name grammar for `request_signing.protocol_methods_*`, mirroring the
|
|
68
|
+
* `items` constraint the capabilities schema ships for each AdCP line:
|
|
69
|
+
*
|
|
70
|
+
* - 3.2+ — slash paths of one or more segments (`tasks/cancel`,
|
|
71
|
+
* `tasks/pushNotificationConfig/set`) or A2A 1.0 PascalCase names
|
|
72
|
+
* (`CancelTask`), 256 characters max, and never `tools/call`.
|
|
73
|
+
* - pre-3.2 — a single lowercase slash pair (`tasks/cancel`), with no
|
|
74
|
+
* length cap, because that line's schema declares none.
|
|
75
|
+
*
|
|
76
|
+
* Keyed by line rather than taking the union of both, because the union is
|
|
77
|
+
* unsafe in one direction: honouring a 3.2-only name on a 3.1 run accepts a
|
|
78
|
+
* declaration that line's schema rejects, and any accepted declaration
|
|
79
|
+
* omitting the vector's method suppresses that vector.
|
|
80
|
+
*
|
|
81
|
+
* Pinned against both shipped schemas by test — a grammar that drifts wider
|
|
82
|
+
* than the schema re-opens exactly that hole.
|
|
83
|
+
*/
|
|
84
|
+
export declare const PROTOCOL_METHOD_GRAMMARS: {
|
|
85
|
+
readonly since_3_2: {
|
|
86
|
+
readonly pattern: RegExp;
|
|
87
|
+
readonly maxLength: number | undefined;
|
|
88
|
+
readonly forbidden: readonly string[];
|
|
89
|
+
};
|
|
90
|
+
readonly pre_3_2: {
|
|
91
|
+
readonly pattern: RegExp;
|
|
92
|
+
readonly maxLength: number | undefined;
|
|
93
|
+
readonly forbidden: readonly string[];
|
|
94
|
+
};
|
|
95
|
+
};
|
|
96
|
+
/** Token validator for an AdCP version string, per `PROTOCOL_METHOD_GRAMMARS`. */
|
|
97
|
+
export declare function protocolMethodGrammarFor(version: string): (token: string) => boolean;
|
|
@@ -18,15 +18,23 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
19
|
var probe_dispatch_exports = {};
|
|
20
20
|
__export(probe_dispatch_exports, {
|
|
21
|
+
PROTOCOL_METHOD_GRAMMARS: () => PROTOCOL_METHOD_GRAMMARS,
|
|
22
|
+
SIGNING_VECTORS_UNAVAILABLE_DETAIL: () => SIGNING_VECTORS_UNAVAILABLE_DETAIL,
|
|
21
23
|
probeRequestSigningVector: () => probeRequestSigningVector,
|
|
24
|
+
protocolMethodGrammarFor: () => protocolMethodGrammarFor,
|
|
22
25
|
resolveVectorTransport: () => resolveVectorTransport
|
|
23
26
|
});
|
|
24
27
|
module.exports = __toCommonJS(probe_dispatch_exports);
|
|
28
|
+
var import_path = require("path");
|
|
25
29
|
var import_grader = require('./grader.js');
|
|
26
30
|
var import_synthesize = require('./synthesize.js');
|
|
27
31
|
var import_vector_loader = require('./vector-loader.js');
|
|
28
|
-
|
|
29
|
-
|
|
32
|
+
var import_version = require('../../../version.js');
|
|
33
|
+
const SIGNING_VECTORS_UNAVAILABLE_DETAIL = "Coverage unavailable: this runner dispatches request-signing vectors two ways \u2014 a verbatim replay of the vector's recorded REST request (`raw`), or the same body re-framed as an MCP `tools/call` envelope (`mcp`) \u2014 and it does not yet dispatch them through the official A2A client, so nothing about this agent's verifier was graded on this run (adcontextprotocol/adcp-client#2954). Remedy: grade the verifier through the agent's MCP or REST binding, or set `request_signing.transport` (CLI `--signing-transport`) when that binding answers at this same URL.";
|
|
34
|
+
function resolveVectorTransport(rsOpts, protocol) {
|
|
35
|
+
if (rsOpts.transport) return rsOpts.transport;
|
|
36
|
+
if (protocol === "a2a") return void 0;
|
|
37
|
+
return "mcp";
|
|
30
38
|
}
|
|
31
39
|
async function probeRequestSigningVector(stepId, agentUrl, options) {
|
|
32
40
|
const parsed = (0, import_synthesize.parseRequestSigningStepId)(stepId);
|
|
@@ -40,22 +48,42 @@ async function probeRequestSigningVector(stepId, agentUrl, options) {
|
|
|
40
48
|
};
|
|
41
49
|
}
|
|
42
50
|
const rsOpts = options.request_signing ?? {};
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
version: options.adcpVersion,
|
|
47
|
-
complianceDir: options.complianceDir
|
|
48
|
-
});
|
|
49
|
-
const vector = loaded.negative.find((v) => v.id === parsed.vector_id);
|
|
50
|
-
if (vector?.requires_contract === "rate_abuse") {
|
|
51
|
-
return skipProbe(agentUrl, "rate_abuse_opt_out");
|
|
52
|
-
}
|
|
53
|
-
} catch {
|
|
54
|
-
}
|
|
51
|
+
const transport = resolveVectorTransport(rsOpts, options.protocol);
|
|
52
|
+
if (rsOpts.onlyVectors && !rsOpts.onlyVectors.includes(parsed.vector_id)) {
|
|
53
|
+
return skipProbe(agentUrl, "not_in_only_vectors");
|
|
55
54
|
}
|
|
56
55
|
if (rsOpts.skipVectors?.includes(parsed.vector_id)) {
|
|
57
56
|
return skipProbe(agentUrl, "operator_skip");
|
|
58
57
|
}
|
|
58
|
+
let loaded;
|
|
59
|
+
try {
|
|
60
|
+
loaded = (0, import_vector_loader.loadRequestSigningVectors)({
|
|
61
|
+
version: options.adcpVersion,
|
|
62
|
+
complianceDir: options.complianceDir
|
|
63
|
+
});
|
|
64
|
+
} catch (err) {
|
|
65
|
+
return probeError(
|
|
66
|
+
agentUrl,
|
|
67
|
+
`request_signing_probe: could not load request-signing vectors: ${err instanceof Error ? err.message : String(err)}`
|
|
68
|
+
);
|
|
69
|
+
}
|
|
70
|
+
const vector = parsed.kind === "negative" ? loaded.negative.find((v) => v.id === parsed.vector_id) : loaded.positive.find((v) => v.id === parsed.vector_id);
|
|
71
|
+
if (!vector) {
|
|
72
|
+
return probeError(
|
|
73
|
+
agentUrl,
|
|
74
|
+
`request_signing_probe: ${parsed.kind} vector "${parsed.vector_id}" is not in the vector set this run loaded`
|
|
75
|
+
);
|
|
76
|
+
}
|
|
77
|
+
const semantic = (0, import_grader.semanticVectorExclusion)(vector, declaredProtocolMethodCoverage(options, loaded.sourceDir));
|
|
78
|
+
if (semantic) {
|
|
79
|
+
return skipProbe(agentUrl, semantic.skip_reason, semantic.diagnostic);
|
|
80
|
+
}
|
|
81
|
+
if (parsed.kind === "negative" && rsOpts.skipRateAbuse && vector.requires_contract === "rate_abuse") {
|
|
82
|
+
return skipProbe(agentUrl, "rate_abuse_opt_out");
|
|
83
|
+
}
|
|
84
|
+
if (!transport && !gradableWithoutVectorTransport(parsed.kind, vector)) {
|
|
85
|
+
return skipProbe(agentUrl, "signing_transport_unavailable", SIGNING_VECTORS_UNAVAILABLE_DETAIL);
|
|
86
|
+
}
|
|
59
87
|
try {
|
|
60
88
|
const result = await (0, import_grader.gradeOneVector)(parsed.vector_id, parsed.kind, agentUrl, {
|
|
61
89
|
...options.adcpVersion && { version: options.adcpVersion },
|
|
@@ -66,7 +94,10 @@ async function probeRequestSigningVector(stepId, agentUrl, options) {
|
|
|
66
94
|
onlyVectors: rsOpts.onlyVectors,
|
|
67
95
|
skipVectors: rsOpts.skipVectors,
|
|
68
96
|
skipRateAbuse: rsOpts.skipRateAbuse,
|
|
69
|
-
transport
|
|
97
|
+
// A vector reaching here without a resolved transport is in-library
|
|
98
|
+
// only (`gradableWithoutVectorTransport`); the grader never probes it,
|
|
99
|
+
// so the value is inert.
|
|
100
|
+
transport: transport ?? "mcp",
|
|
70
101
|
// The auto-initialize handshake authenticates like any MCP client;
|
|
71
102
|
// agents commonly require auth on `initialize` (the signed vectors
|
|
72
103
|
// themselves stay bearer-less — the signature is their auth).
|
|
@@ -86,23 +117,86 @@ async function probeRequestSigningVector(stepId, agentUrl, options) {
|
|
|
86
117
|
status: result.http_status,
|
|
87
118
|
headers,
|
|
88
119
|
body: result.diagnostic ?? null,
|
|
89
|
-
error: result.passed ? void 0 : result.diagnostic ?? "vector grade failed"
|
|
120
|
+
error: result.passed ? void 0 : result.diagnostic ?? "vector grade failed",
|
|
121
|
+
// Carry the grader's transport-fault provenance through. Without it a
|
|
122
|
+
// DNS or connect failure reaches the coverage classifier looking like
|
|
123
|
+
// an in-library grade — `status: 0` with text — and the report tells
|
|
124
|
+
// the operator only the SDK self-check ran, which is false and points
|
|
125
|
+
// them away from the connection they need to fix.
|
|
126
|
+
...result.transport_error === true && { probe_error: true }
|
|
90
127
|
};
|
|
91
128
|
} catch (err) {
|
|
92
|
-
return {
|
|
93
|
-
url: agentUrl,
|
|
94
|
-
status: 0,
|
|
95
|
-
headers: {},
|
|
96
|
-
body: null,
|
|
97
|
-
error: `request_signing_probe threw: ${err instanceof Error ? err.message : String(err)}`
|
|
98
|
-
};
|
|
129
|
+
return probeError(agentUrl, `request_signing_probe threw: ${err instanceof Error ? err.message : String(err)}`);
|
|
99
130
|
}
|
|
100
131
|
}
|
|
101
|
-
function
|
|
102
|
-
return
|
|
132
|
+
function gradableWithoutVectorTransport(kind, vector) {
|
|
133
|
+
return kind === "negative" && vector.jwks_override !== void 0;
|
|
134
|
+
}
|
|
135
|
+
function declaredProtocolMethodCoverage(options, sourceDir) {
|
|
136
|
+
const raw = options._profile?.raw_capabilities;
|
|
137
|
+
if (!raw || typeof raw !== "object") return void 0;
|
|
138
|
+
const block = raw.request_signing;
|
|
139
|
+
if (!block || typeof block !== "object") return void 0;
|
|
140
|
+
const declared = block;
|
|
141
|
+
if (declared.supported !== true) return void 0;
|
|
142
|
+
const bucket = declaredProtocolMethods(
|
|
143
|
+
declared.protocol_methods_required_for,
|
|
144
|
+
protocolMethodGrammarFor(complianceLineOf(sourceDir) ?? options.adcpVersion ?? import_version.ADCP_VERSION)
|
|
145
|
+
);
|
|
146
|
+
if (!bucket.ok) return void 0;
|
|
147
|
+
return { ...bucket.value && { protocol_methods_required_for: bucket.value } };
|
|
148
|
+
}
|
|
149
|
+
function complianceLineOf(sourceDir) {
|
|
150
|
+
const version = (0, import_path.basename)((0, import_path.dirname)((0, import_path.dirname)(sourceDir)));
|
|
151
|
+
return /^\d+\.\d+/.test(version) ? version : void 0;
|
|
152
|
+
}
|
|
153
|
+
function declaredProtocolMethods(value, isValidToken) {
|
|
154
|
+
if (value === void 0) return { ok: true };
|
|
155
|
+
if (!Array.isArray(value)) return { ok: false };
|
|
156
|
+
return value.every((entry) => typeof entry === "string" && isValidToken(entry)) ? { ok: true, value } : { ok: false };
|
|
157
|
+
}
|
|
158
|
+
const PROTOCOL_METHOD_GRAMMARS = {
|
|
159
|
+
since_3_2: {
|
|
160
|
+
pattern: /^(?:[a-z][A-Za-z0-9_]*(?:\/[A-Za-z][A-Za-z0-9_]*)+|[A-Z][A-Za-z0-9_]*)$/,
|
|
161
|
+
maxLength: 256,
|
|
162
|
+
forbidden: ["tools/call"]
|
|
163
|
+
},
|
|
164
|
+
// 3.1 declares no `maxLength`, so imposing one would reject a name that
|
|
165
|
+
// line's schema accepts — and a rejected declaration is graded, which
|
|
166
|
+
// fails a vector the agent never claimed. Each line matches its own schema.
|
|
167
|
+
pre_3_2: {
|
|
168
|
+
pattern: /^[a-z][a-z0-9_]*\/[a-z][a-z0-9_]*$/,
|
|
169
|
+
maxLength: void 0,
|
|
170
|
+
forbidden: []
|
|
171
|
+
}
|
|
172
|
+
};
|
|
173
|
+
function protocolMethodGrammarFor(version) {
|
|
174
|
+
const trimmed = version.startsWith("v") ? version.slice(1) : version;
|
|
175
|
+
const match = /^(\d+)(?:\.(\d+))?/.exec(trimmed);
|
|
176
|
+
const major = Number.parseInt(match?.[1] ?? "0", 10);
|
|
177
|
+
const minor = Number.parseInt(match?.[2] ?? "0", 10);
|
|
178
|
+
const grammar = major > 3 || major === 3 && minor >= 2 ? PROTOCOL_METHOD_GRAMMARS.since_3_2 : PROTOCOL_METHOD_GRAMMARS.pre_3_2;
|
|
179
|
+
return (token) => (grammar.maxLength === void 0 || token.length <= grammar.maxLength) && grammar.pattern.test(token) && !grammar.forbidden.includes(token);
|
|
180
|
+
}
|
|
181
|
+
function probeError(url, message) {
|
|
182
|
+
return { url, status: 0, headers: {}, body: null, error: message, probe_error: true };
|
|
183
|
+
}
|
|
184
|
+
function skipProbe(url, reason, detail) {
|
|
185
|
+
return {
|
|
186
|
+
url,
|
|
187
|
+
status: 0,
|
|
188
|
+
headers: {},
|
|
189
|
+
body: null,
|
|
190
|
+
skipped: true,
|
|
191
|
+
skip_reason: reason,
|
|
192
|
+
...detail && { error: detail }
|
|
193
|
+
};
|
|
103
194
|
}
|
|
104
195
|
// Annotate the CommonJS export names for ESM import in node:
|
|
105
196
|
0 && (module.exports = {
|
|
197
|
+
PROTOCOL_METHOD_GRAMMARS,
|
|
198
|
+
SIGNING_VECTORS_UNAVAILABLE_DETAIL,
|
|
106
199
|
probeRequestSigningVector,
|
|
200
|
+
protocolMethodGrammarFor,
|
|
107
201
|
resolveVectorTransport
|
|
108
202
|
});
|
|
@@ -1,8 +1,13 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { basename, dirname } from "path";
|
|
2
|
+
import { gradeOneVector, semanticVectorExclusion } from "./grader.mjs";
|
|
2
3
|
import { parseRequestSigningStepId } from "./synthesize.mjs";
|
|
3
4
|
import { loadRequestSigningVectors } from "./vector-loader.mjs";
|
|
4
|
-
|
|
5
|
-
|
|
5
|
+
import { ADCP_VERSION } from "../../../version.mjs";
|
|
6
|
+
const SIGNING_VECTORS_UNAVAILABLE_DETAIL = "Coverage unavailable: this runner dispatches request-signing vectors two ways \u2014 a verbatim replay of the vector's recorded REST request (`raw`), or the same body re-framed as an MCP `tools/call` envelope (`mcp`) \u2014 and it does not yet dispatch them through the official A2A client, so nothing about this agent's verifier was graded on this run (adcontextprotocol/adcp-client#2954). Remedy: grade the verifier through the agent's MCP or REST binding, or set `request_signing.transport` (CLI `--signing-transport`) when that binding answers at this same URL.";
|
|
7
|
+
function resolveVectorTransport(rsOpts, protocol) {
|
|
8
|
+
if (rsOpts.transport) return rsOpts.transport;
|
|
9
|
+
if (protocol === "a2a") return void 0;
|
|
10
|
+
return "mcp";
|
|
6
11
|
}
|
|
7
12
|
async function probeRequestSigningVector(stepId, agentUrl, options) {
|
|
8
13
|
const parsed = parseRequestSigningStepId(stepId);
|
|
@@ -16,22 +21,42 @@ async function probeRequestSigningVector(stepId, agentUrl, options) {
|
|
|
16
21
|
};
|
|
17
22
|
}
|
|
18
23
|
const rsOpts = options.request_signing ?? {};
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
version: options.adcpVersion,
|
|
23
|
-
complianceDir: options.complianceDir
|
|
24
|
-
});
|
|
25
|
-
const vector = loaded.negative.find((v) => v.id === parsed.vector_id);
|
|
26
|
-
if (vector?.requires_contract === "rate_abuse") {
|
|
27
|
-
return skipProbe(agentUrl, "rate_abuse_opt_out");
|
|
28
|
-
}
|
|
29
|
-
} catch {
|
|
30
|
-
}
|
|
24
|
+
const transport = resolveVectorTransport(rsOpts, options.protocol);
|
|
25
|
+
if (rsOpts.onlyVectors && !rsOpts.onlyVectors.includes(parsed.vector_id)) {
|
|
26
|
+
return skipProbe(agentUrl, "not_in_only_vectors");
|
|
31
27
|
}
|
|
32
28
|
if (rsOpts.skipVectors?.includes(parsed.vector_id)) {
|
|
33
29
|
return skipProbe(agentUrl, "operator_skip");
|
|
34
30
|
}
|
|
31
|
+
let loaded;
|
|
32
|
+
try {
|
|
33
|
+
loaded = loadRequestSigningVectors({
|
|
34
|
+
version: options.adcpVersion,
|
|
35
|
+
complianceDir: options.complianceDir
|
|
36
|
+
});
|
|
37
|
+
} catch (err) {
|
|
38
|
+
return probeError(
|
|
39
|
+
agentUrl,
|
|
40
|
+
`request_signing_probe: could not load request-signing vectors: ${err instanceof Error ? err.message : String(err)}`
|
|
41
|
+
);
|
|
42
|
+
}
|
|
43
|
+
const vector = parsed.kind === "negative" ? loaded.negative.find((v) => v.id === parsed.vector_id) : loaded.positive.find((v) => v.id === parsed.vector_id);
|
|
44
|
+
if (!vector) {
|
|
45
|
+
return probeError(
|
|
46
|
+
agentUrl,
|
|
47
|
+
`request_signing_probe: ${parsed.kind} vector "${parsed.vector_id}" is not in the vector set this run loaded`
|
|
48
|
+
);
|
|
49
|
+
}
|
|
50
|
+
const semantic = semanticVectorExclusion(vector, declaredProtocolMethodCoverage(options, loaded.sourceDir));
|
|
51
|
+
if (semantic) {
|
|
52
|
+
return skipProbe(agentUrl, semantic.skip_reason, semantic.diagnostic);
|
|
53
|
+
}
|
|
54
|
+
if (parsed.kind === "negative" && rsOpts.skipRateAbuse && vector.requires_contract === "rate_abuse") {
|
|
55
|
+
return skipProbe(agentUrl, "rate_abuse_opt_out");
|
|
56
|
+
}
|
|
57
|
+
if (!transport && !gradableWithoutVectorTransport(parsed.kind, vector)) {
|
|
58
|
+
return skipProbe(agentUrl, "signing_transport_unavailable", SIGNING_VECTORS_UNAVAILABLE_DETAIL);
|
|
59
|
+
}
|
|
35
60
|
try {
|
|
36
61
|
const result = await gradeOneVector(parsed.vector_id, parsed.kind, agentUrl, {
|
|
37
62
|
...options.adcpVersion && { version: options.adcpVersion },
|
|
@@ -42,7 +67,10 @@ async function probeRequestSigningVector(stepId, agentUrl, options) {
|
|
|
42
67
|
onlyVectors: rsOpts.onlyVectors,
|
|
43
68
|
skipVectors: rsOpts.skipVectors,
|
|
44
69
|
skipRateAbuse: rsOpts.skipRateAbuse,
|
|
45
|
-
transport
|
|
70
|
+
// A vector reaching here without a resolved transport is in-library
|
|
71
|
+
// only (`gradableWithoutVectorTransport`); the grader never probes it,
|
|
72
|
+
// so the value is inert.
|
|
73
|
+
transport: transport ?? "mcp",
|
|
46
74
|
// The auto-initialize handshake authenticates like any MCP client;
|
|
47
75
|
// agents commonly require auth on `initialize` (the signed vectors
|
|
48
76
|
// themselves stay bearer-less — the signature is their auth).
|
|
@@ -62,22 +90,85 @@ async function probeRequestSigningVector(stepId, agentUrl, options) {
|
|
|
62
90
|
status: result.http_status,
|
|
63
91
|
headers,
|
|
64
92
|
body: result.diagnostic ?? null,
|
|
65
|
-
error: result.passed ? void 0 : result.diagnostic ?? "vector grade failed"
|
|
93
|
+
error: result.passed ? void 0 : result.diagnostic ?? "vector grade failed",
|
|
94
|
+
// Carry the grader's transport-fault provenance through. Without it a
|
|
95
|
+
// DNS or connect failure reaches the coverage classifier looking like
|
|
96
|
+
// an in-library grade — `status: 0` with text — and the report tells
|
|
97
|
+
// the operator only the SDK self-check ran, which is false and points
|
|
98
|
+
// them away from the connection they need to fix.
|
|
99
|
+
...result.transport_error === true && { probe_error: true }
|
|
66
100
|
};
|
|
67
101
|
} catch (err) {
|
|
68
|
-
return {
|
|
69
|
-
url: agentUrl,
|
|
70
|
-
status: 0,
|
|
71
|
-
headers: {},
|
|
72
|
-
body: null,
|
|
73
|
-
error: `request_signing_probe threw: ${err instanceof Error ? err.message : String(err)}`
|
|
74
|
-
};
|
|
102
|
+
return probeError(agentUrl, `request_signing_probe threw: ${err instanceof Error ? err.message : String(err)}`);
|
|
75
103
|
}
|
|
76
104
|
}
|
|
77
|
-
function
|
|
78
|
-
return
|
|
105
|
+
function gradableWithoutVectorTransport(kind, vector) {
|
|
106
|
+
return kind === "negative" && vector.jwks_override !== void 0;
|
|
107
|
+
}
|
|
108
|
+
function declaredProtocolMethodCoverage(options, sourceDir) {
|
|
109
|
+
const raw = options._profile?.raw_capabilities;
|
|
110
|
+
if (!raw || typeof raw !== "object") return void 0;
|
|
111
|
+
const block = raw.request_signing;
|
|
112
|
+
if (!block || typeof block !== "object") return void 0;
|
|
113
|
+
const declared = block;
|
|
114
|
+
if (declared.supported !== true) return void 0;
|
|
115
|
+
const bucket = declaredProtocolMethods(
|
|
116
|
+
declared.protocol_methods_required_for,
|
|
117
|
+
protocolMethodGrammarFor(complianceLineOf(sourceDir) ?? options.adcpVersion ?? ADCP_VERSION)
|
|
118
|
+
);
|
|
119
|
+
if (!bucket.ok) return void 0;
|
|
120
|
+
return { ...bucket.value && { protocol_methods_required_for: bucket.value } };
|
|
121
|
+
}
|
|
122
|
+
function complianceLineOf(sourceDir) {
|
|
123
|
+
const version = basename(dirname(dirname(sourceDir)));
|
|
124
|
+
return /^\d+\.\d+/.test(version) ? version : void 0;
|
|
125
|
+
}
|
|
126
|
+
function declaredProtocolMethods(value, isValidToken) {
|
|
127
|
+
if (value === void 0) return { ok: true };
|
|
128
|
+
if (!Array.isArray(value)) return { ok: false };
|
|
129
|
+
return value.every((entry) => typeof entry === "string" && isValidToken(entry)) ? { ok: true, value } : { ok: false };
|
|
130
|
+
}
|
|
131
|
+
const PROTOCOL_METHOD_GRAMMARS = {
|
|
132
|
+
since_3_2: {
|
|
133
|
+
pattern: /^(?:[a-z][A-Za-z0-9_]*(?:\/[A-Za-z][A-Za-z0-9_]*)+|[A-Z][A-Za-z0-9_]*)$/,
|
|
134
|
+
maxLength: 256,
|
|
135
|
+
forbidden: ["tools/call"]
|
|
136
|
+
},
|
|
137
|
+
// 3.1 declares no `maxLength`, so imposing one would reject a name that
|
|
138
|
+
// line's schema accepts — and a rejected declaration is graded, which
|
|
139
|
+
// fails a vector the agent never claimed. Each line matches its own schema.
|
|
140
|
+
pre_3_2: {
|
|
141
|
+
pattern: /^[a-z][a-z0-9_]*\/[a-z][a-z0-9_]*$/,
|
|
142
|
+
maxLength: void 0,
|
|
143
|
+
forbidden: []
|
|
144
|
+
}
|
|
145
|
+
};
|
|
146
|
+
function protocolMethodGrammarFor(version) {
|
|
147
|
+
const trimmed = version.startsWith("v") ? version.slice(1) : version;
|
|
148
|
+
const match = /^(\d+)(?:\.(\d+))?/.exec(trimmed);
|
|
149
|
+
const major = Number.parseInt(match?.[1] ?? "0", 10);
|
|
150
|
+
const minor = Number.parseInt(match?.[2] ?? "0", 10);
|
|
151
|
+
const grammar = major > 3 || major === 3 && minor >= 2 ? PROTOCOL_METHOD_GRAMMARS.since_3_2 : PROTOCOL_METHOD_GRAMMARS.pre_3_2;
|
|
152
|
+
return (token) => (grammar.maxLength === void 0 || token.length <= grammar.maxLength) && grammar.pattern.test(token) && !grammar.forbidden.includes(token);
|
|
153
|
+
}
|
|
154
|
+
function probeError(url, message) {
|
|
155
|
+
return { url, status: 0, headers: {}, body: null, error: message, probe_error: true };
|
|
156
|
+
}
|
|
157
|
+
function skipProbe(url, reason, detail) {
|
|
158
|
+
return {
|
|
159
|
+
url,
|
|
160
|
+
status: 0,
|
|
161
|
+
headers: {},
|
|
162
|
+
body: null,
|
|
163
|
+
skipped: true,
|
|
164
|
+
skip_reason: reason,
|
|
165
|
+
...detail && { error: detail }
|
|
166
|
+
};
|
|
79
167
|
}
|
|
80
168
|
export {
|
|
169
|
+
PROTOCOL_METHOD_GRAMMARS,
|
|
170
|
+
SIGNING_VECTORS_UNAVAILABLE_DETAIL,
|
|
81
171
|
probeRequestSigningVector,
|
|
172
|
+
protocolMethodGrammarFor,
|
|
82
173
|
resolveVectorTransport
|
|
83
174
|
};
|
|
@@ -60,10 +60,30 @@ function synthesizePositiveStep(vector) {
|
|
|
60
60
|
};
|
|
61
61
|
}
|
|
62
62
|
function synthesizeNegativeStep(vector) {
|
|
63
|
-
|
|
63
|
+
const base = {
|
|
64
64
|
id: `${NEGATIVE_STEP_PREFIX}${vector.id}`,
|
|
65
65
|
title: `Negative: ${vector.name}`,
|
|
66
|
-
task: REQUEST_SIGNING_PROBE_TASK
|
|
66
|
+
task: REQUEST_SIGNING_PROBE_TASK
|
|
67
|
+
};
|
|
68
|
+
const inLibraryTitle = `Negative (SDK verifier self-check, agent not contacted): ${vector.name}`;
|
|
69
|
+
if (vector.jwks_override) {
|
|
70
|
+
return {
|
|
71
|
+
...base,
|
|
72
|
+
title: inLibraryTitle,
|
|
73
|
+
narrative: `Vector ${vector.id} publishes an inline malformed JWK, so it is graded against the library verifier rather than sent to the agent; expect rejection with error="${vector.expected_error_code}".`,
|
|
74
|
+
validations: [
|
|
75
|
+
{
|
|
76
|
+
check: "probe_passed",
|
|
77
|
+
// Name the grading plane in the description: this step reports on
|
|
78
|
+
// the SDK verifier, not on the agent under test, and a report
|
|
79
|
+
// reader counting graded vectors has to be able to tell.
|
|
80
|
+
description: `SDK verifier rejects ${vector.id} with error="${vector.expected_error_code}" (graded in-library; the agent under test is not contacted)`
|
|
81
|
+
}
|
|
82
|
+
]
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
return {
|
|
86
|
+
...base,
|
|
67
87
|
narrative: `Build vector ${vector.id} with its documented mutation and send to the agent; expect 401 with WWW-Authenticate: Signature error="${vector.expected_error_code}".`,
|
|
68
88
|
validations: [
|
|
69
89
|
{
|
|
@@ -33,10 +33,30 @@ function synthesizePositiveStep(vector) {
|
|
|
33
33
|
};
|
|
34
34
|
}
|
|
35
35
|
function synthesizeNegativeStep(vector) {
|
|
36
|
-
|
|
36
|
+
const base = {
|
|
37
37
|
id: `${NEGATIVE_STEP_PREFIX}${vector.id}`,
|
|
38
38
|
title: `Negative: ${vector.name}`,
|
|
39
|
-
task: REQUEST_SIGNING_PROBE_TASK
|
|
39
|
+
task: REQUEST_SIGNING_PROBE_TASK
|
|
40
|
+
};
|
|
41
|
+
const inLibraryTitle = `Negative (SDK verifier self-check, agent not contacted): ${vector.name}`;
|
|
42
|
+
if (vector.jwks_override) {
|
|
43
|
+
return {
|
|
44
|
+
...base,
|
|
45
|
+
title: inLibraryTitle,
|
|
46
|
+
narrative: `Vector ${vector.id} publishes an inline malformed JWK, so it is graded against the library verifier rather than sent to the agent; expect rejection with error="${vector.expected_error_code}".`,
|
|
47
|
+
validations: [
|
|
48
|
+
{
|
|
49
|
+
check: "probe_passed",
|
|
50
|
+
// Name the grading plane in the description: this step reports on
|
|
51
|
+
// the SDK verifier, not on the agent under test, and a report
|
|
52
|
+
// reader counting graded vectors has to be able to tell.
|
|
53
|
+
description: `SDK verifier rejects ${vector.id} with error="${vector.expected_error_code}" (graded in-library; the agent under test is not contacted)`
|
|
54
|
+
}
|
|
55
|
+
]
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
return {
|
|
59
|
+
...base,
|
|
40
60
|
narrative: `Build vector ${vector.id} with its documented mutation and send to the agent; expect 401 with WWW-Authenticate: Signature error="${vector.expected_error_code}".`,
|
|
41
61
|
validations: [
|
|
42
62
|
{
|