@adcp/sdk 14.0.0-rc.37 → 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/content-mismatch.d.mts +126 -0
- package/dist/lib/reporting/content-mismatch.d.ts +126 -0
- package/dist/lib/reporting/content-mismatch.js +90 -0
- package/dist/lib/reporting/content-mismatch.mjs +66 -0
- 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/index.d.mts +3 -1
- package/dist/lib/reporting/index.d.ts +3 -1
- package/dist/lib/reporting/index.js +3 -0
- package/dist/lib/reporting/index.mjs +2 -0
- 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/reconciliation.d.mts +362 -2
- package/dist/lib/reporting/reconciliation.d.ts +362 -2
- package/dist/lib/reporting/reconciliation.js +1051 -7
- package/dist/lib/reporting/reconciliation.mjs +1053 -7
- 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/index.d.mts +22 -1
- package/dist/lib/schemas/index.d.ts +22 -1
- package/dist/lib/schemas/index.js +7 -0
- package/dist/lib/schemas/index.mjs +7 -0
- 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/validation/schema-loader.d.mts +9 -1
- package/dist/lib/validation/schema-loader.d.ts +9 -1
- package/dist/lib/validation/schema-loader.js +65 -8
- package/dist/lib/validation/schema-loader.mjs +64 -8
- 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 +80 -1
- package/docs/guides/MEDIA-BUY-3.2-COMPATIBILITY.md +57 -0
- package/docs/guides/MEDIA-BUY-ACTION-ASSESSMENT.md +300 -0
- package/docs/guides/REPORTING-LEDGER.md +654 -3
- package/docs/guides/REPORTING-RECONCILIATION.md +50 -0
- 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 +60 -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/SKILL.md +2 -0
- 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,5 +1,6 @@
|
|
|
1
1
|
import type { SingleAgentClient } from '../core/SingleAgentClient.mjs';
|
|
2
|
-
import type
|
|
2
|
+
import type { AccountReference } from '../types/index.mjs';
|
|
3
|
+
import type { LegacyWholesaleFeedEvent } from './protocol-types.mjs';
|
|
3
4
|
/**
|
|
4
5
|
* Operating mode for a {@link WholesaleFeedSync} instance, resolved from the
|
|
5
6
|
* agent's capability stanza at `start()` time.
|
|
@@ -34,7 +35,7 @@ export interface WholesaleFeedSyncClient {
|
|
|
34
35
|
/**
|
|
35
36
|
* Configuration for a {@link WholesaleFeedSync} instance.
|
|
36
37
|
*
|
|
37
|
-
* The SDK's primary version pin (`ADCP_VERSION`)
|
|
38
|
+
* The SDK's primary version pin (`ADCP_VERSION`) provides the wholesale
|
|
38
39
|
* feed surfaces activate when the agent declares `wholesale_feed_versioning`
|
|
39
40
|
* and/or `wholesale_feed_webhooks` in its `get_adcp_capabilities` response.
|
|
40
41
|
* Against pre-3.1 agents the sync still works in `'manual'` mode — bootstrap
|
|
@@ -44,12 +45,12 @@ export interface WholesaleFeedSyncConfig {
|
|
|
44
45
|
/** Pre-configured client (or stub) for tool calls against the target agent. */
|
|
45
46
|
client: WholesaleFeedSyncClient;
|
|
46
47
|
/**
|
|
47
|
-
* Account scope for wholesale product/signal reads.
|
|
48
|
+
* Account scope for wholesale product/signal reads. Wholesale-feed
|
|
48
49
|
* webhooks are account-anchored; pass the same account used when registering
|
|
49
50
|
* `notification_configs[]` so repair reads reconcile the correct public or
|
|
50
51
|
* account overlay.
|
|
51
52
|
*/
|
|
52
|
-
account?:
|
|
53
|
+
account?: AccountReference;
|
|
53
54
|
/**
|
|
54
55
|
* Expected inbound webhook subscription scope. Set this when routing a
|
|
55
56
|
* validated webhook receiver into a WholesaleFeedSync instance so misrouted
|
|
@@ -155,43 +156,43 @@ export interface WholesaleFeedSyncEvents {
|
|
|
155
156
|
to: WholesaleFeedSyncState;
|
|
156
157
|
}];
|
|
157
158
|
event: [{
|
|
158
|
-
event:
|
|
159
|
+
event: LegacyWholesaleFeedEvent;
|
|
159
160
|
synthetic?: boolean;
|
|
160
161
|
}];
|
|
161
162
|
'product.created': [{
|
|
162
|
-
event:
|
|
163
|
+
event: LegacyWholesaleFeedEvent;
|
|
163
164
|
synthetic?: boolean;
|
|
164
165
|
}];
|
|
165
166
|
'product.updated': [{
|
|
166
|
-
event:
|
|
167
|
+
event: LegacyWholesaleFeedEvent;
|
|
167
168
|
synthetic?: boolean;
|
|
168
169
|
}];
|
|
169
170
|
'product.priced': [{
|
|
170
|
-
event:
|
|
171
|
+
event: LegacyWholesaleFeedEvent;
|
|
171
172
|
synthetic?: boolean;
|
|
172
173
|
}];
|
|
173
174
|
'product.removed': [{
|
|
174
|
-
event:
|
|
175
|
+
event: LegacyWholesaleFeedEvent;
|
|
175
176
|
synthetic?: boolean;
|
|
176
177
|
}];
|
|
177
178
|
'signal.created': [{
|
|
178
|
-
event:
|
|
179
|
+
event: LegacyWholesaleFeedEvent;
|
|
179
180
|
synthetic?: boolean;
|
|
180
181
|
}];
|
|
181
182
|
'signal.updated': [{
|
|
182
|
-
event:
|
|
183
|
+
event: LegacyWholesaleFeedEvent;
|
|
183
184
|
synthetic?: boolean;
|
|
184
185
|
}];
|
|
185
186
|
'signal.priced': [{
|
|
186
|
-
event:
|
|
187
|
+
event: LegacyWholesaleFeedEvent;
|
|
187
188
|
synthetic?: boolean;
|
|
188
189
|
}];
|
|
189
190
|
'signal.removed': [{
|
|
190
|
-
event:
|
|
191
|
+
event: LegacyWholesaleFeedEvent;
|
|
191
192
|
synthetic?: boolean;
|
|
192
193
|
}];
|
|
193
194
|
'wholesale_feed.bulk_change': [{
|
|
194
|
-
event:
|
|
195
|
+
event: LegacyWholesaleFeedEvent;
|
|
195
196
|
synthetic?: boolean;
|
|
196
197
|
}];
|
|
197
198
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { SingleAgentClient } from '../core/SingleAgentClient';
|
|
2
|
-
import type
|
|
2
|
+
import type { AccountReference } from '../types';
|
|
3
|
+
import type { LegacyWholesaleFeedEvent } from './protocol-types';
|
|
3
4
|
/**
|
|
4
5
|
* Operating mode for a {@link WholesaleFeedSync} instance, resolved from the
|
|
5
6
|
* agent's capability stanza at `start()` time.
|
|
@@ -34,7 +35,7 @@ export interface WholesaleFeedSyncClient {
|
|
|
34
35
|
/**
|
|
35
36
|
* Configuration for a {@link WholesaleFeedSync} instance.
|
|
36
37
|
*
|
|
37
|
-
* The SDK's primary version pin (`ADCP_VERSION`)
|
|
38
|
+
* The SDK's primary version pin (`ADCP_VERSION`) provides the wholesale
|
|
38
39
|
* feed surfaces activate when the agent declares `wholesale_feed_versioning`
|
|
39
40
|
* and/or `wholesale_feed_webhooks` in its `get_adcp_capabilities` response.
|
|
40
41
|
* Against pre-3.1 agents the sync still works in `'manual'` mode — bootstrap
|
|
@@ -44,12 +45,12 @@ export interface WholesaleFeedSyncConfig {
|
|
|
44
45
|
/** Pre-configured client (or stub) for tool calls against the target agent. */
|
|
45
46
|
client: WholesaleFeedSyncClient;
|
|
46
47
|
/**
|
|
47
|
-
* Account scope for wholesale product/signal reads.
|
|
48
|
+
* Account scope for wholesale product/signal reads. Wholesale-feed
|
|
48
49
|
* webhooks are account-anchored; pass the same account used when registering
|
|
49
50
|
* `notification_configs[]` so repair reads reconcile the correct public or
|
|
50
51
|
* account overlay.
|
|
51
52
|
*/
|
|
52
|
-
account?:
|
|
53
|
+
account?: AccountReference;
|
|
53
54
|
/**
|
|
54
55
|
* Expected inbound webhook subscription scope. Set this when routing a
|
|
55
56
|
* validated webhook receiver into a WholesaleFeedSync instance so misrouted
|
|
@@ -155,43 +156,43 @@ export interface WholesaleFeedSyncEvents {
|
|
|
155
156
|
to: WholesaleFeedSyncState;
|
|
156
157
|
}];
|
|
157
158
|
event: [{
|
|
158
|
-
event:
|
|
159
|
+
event: LegacyWholesaleFeedEvent;
|
|
159
160
|
synthetic?: boolean;
|
|
160
161
|
}];
|
|
161
162
|
'product.created': [{
|
|
162
|
-
event:
|
|
163
|
+
event: LegacyWholesaleFeedEvent;
|
|
163
164
|
synthetic?: boolean;
|
|
164
165
|
}];
|
|
165
166
|
'product.updated': [{
|
|
166
|
-
event:
|
|
167
|
+
event: LegacyWholesaleFeedEvent;
|
|
167
168
|
synthetic?: boolean;
|
|
168
169
|
}];
|
|
169
170
|
'product.priced': [{
|
|
170
|
-
event:
|
|
171
|
+
event: LegacyWholesaleFeedEvent;
|
|
171
172
|
synthetic?: boolean;
|
|
172
173
|
}];
|
|
173
174
|
'product.removed': [{
|
|
174
|
-
event:
|
|
175
|
+
event: LegacyWholesaleFeedEvent;
|
|
175
176
|
synthetic?: boolean;
|
|
176
177
|
}];
|
|
177
178
|
'signal.created': [{
|
|
178
|
-
event:
|
|
179
|
+
event: LegacyWholesaleFeedEvent;
|
|
179
180
|
synthetic?: boolean;
|
|
180
181
|
}];
|
|
181
182
|
'signal.updated': [{
|
|
182
|
-
event:
|
|
183
|
+
event: LegacyWholesaleFeedEvent;
|
|
183
184
|
synthetic?: boolean;
|
|
184
185
|
}];
|
|
185
186
|
'signal.priced': [{
|
|
186
|
-
event:
|
|
187
|
+
event: LegacyWholesaleFeedEvent;
|
|
187
188
|
synthetic?: boolean;
|
|
188
189
|
}];
|
|
189
190
|
'signal.removed': [{
|
|
190
|
-
event:
|
|
191
|
+
event: LegacyWholesaleFeedEvent;
|
|
191
192
|
synthetic?: boolean;
|
|
192
193
|
}];
|
|
193
194
|
'wholesale_feed.bulk_change': [{
|
|
194
|
-
event:
|
|
195
|
+
event: LegacyWholesaleFeedEvent;
|
|
195
196
|
synthetic?: boolean;
|
|
196
197
|
}];
|
|
197
198
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { ADCPError } from '../errors/index.mjs';
|
|
2
|
-
import type
|
|
3
|
-
export type WholesaleFeedWebhookNotificationType =
|
|
2
|
+
import type { LegacyWholesaleFeedEvent, LegacyWholesaleFeedWebhook } from './protocol-types.mjs';
|
|
3
|
+
export type WholesaleFeedWebhookNotificationType = LegacyWholesaleFeedWebhook['notification_type'];
|
|
4
4
|
export type WholesaleFeedWebhookAffectedEntityType = 'product' | 'signal';
|
|
5
|
-
export type WholesaleFeedWebhookCacheScope =
|
|
5
|
+
export type WholesaleFeedWebhookCacheScope = LegacyWholesaleFeedWebhook['cache_scope'];
|
|
6
6
|
export type WholesaleFeedWebhookNotificationErrorCode = 'wholesale_feed_webhook_body_malformed' | 'wholesale_feed_webhook_field_missing' | 'wholesale_feed_webhook_field_invalid' | 'wholesale_feed_webhook_notification_type_mismatch' | 'wholesale_feed_webhook_entity_type_mismatch' | 'wholesale_feed_webhook_cache_scope_mismatch' | 'wholesale_feed_webhook_bulk_change_invalid';
|
|
7
7
|
export interface WholesaleFeedWebhookNotificationErrorDetails {
|
|
8
8
|
field?: string;
|
|
@@ -38,8 +38,8 @@ export interface NormalizedWholesaleFeedWebhookNotification {
|
|
|
38
38
|
eventCreatedAt: string;
|
|
39
39
|
/** Present for `wholesale_feed.bulk_change` notifications. */
|
|
40
40
|
affectedEntityType?: WholesaleFeedWebhookAffectedEntityType;
|
|
41
|
-
event:
|
|
42
|
-
webhook:
|
|
41
|
+
event: LegacyWholesaleFeedEvent;
|
|
42
|
+
webhook: LegacyWholesaleFeedWebhook;
|
|
43
43
|
}
|
|
44
44
|
/**
|
|
45
45
|
* Parse and normalize a canonical wholesale-feed webhook notification.
|
|
@@ -51,3 +51,5 @@ export interface NormalizedWholesaleFeedWebhookNotification {
|
|
|
51
51
|
*/
|
|
52
52
|
export declare function parseWholesaleFeedWebhookNotification(input: unknown): NormalizedWholesaleFeedWebhookNotification;
|
|
53
53
|
export declare const normalizeWholesaleFeedWebhookNotification: typeof parseWholesaleFeedWebhookNotification;
|
|
54
|
+
/** Validate only the product representation contract, without consuming dedupe state. */
|
|
55
|
+
export declare function assertLegacyWholesaleFeedRepresentation(webhook: Record<string, unknown>): void;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { ADCPError } from '../errors';
|
|
2
|
-
import type
|
|
3
|
-
export type WholesaleFeedWebhookNotificationType =
|
|
2
|
+
import type { LegacyWholesaleFeedEvent, LegacyWholesaleFeedWebhook } from './protocol-types';
|
|
3
|
+
export type WholesaleFeedWebhookNotificationType = LegacyWholesaleFeedWebhook['notification_type'];
|
|
4
4
|
export type WholesaleFeedWebhookAffectedEntityType = 'product' | 'signal';
|
|
5
|
-
export type WholesaleFeedWebhookCacheScope =
|
|
5
|
+
export type WholesaleFeedWebhookCacheScope = LegacyWholesaleFeedWebhook['cache_scope'];
|
|
6
6
|
export type WholesaleFeedWebhookNotificationErrorCode = 'wholesale_feed_webhook_body_malformed' | 'wholesale_feed_webhook_field_missing' | 'wholesale_feed_webhook_field_invalid' | 'wholesale_feed_webhook_notification_type_mismatch' | 'wholesale_feed_webhook_entity_type_mismatch' | 'wholesale_feed_webhook_cache_scope_mismatch' | 'wholesale_feed_webhook_bulk_change_invalid';
|
|
7
7
|
export interface WholesaleFeedWebhookNotificationErrorDetails {
|
|
8
8
|
field?: string;
|
|
@@ -38,8 +38,8 @@ export interface NormalizedWholesaleFeedWebhookNotification {
|
|
|
38
38
|
eventCreatedAt: string;
|
|
39
39
|
/** Present for `wholesale_feed.bulk_change` notifications. */
|
|
40
40
|
affectedEntityType?: WholesaleFeedWebhookAffectedEntityType;
|
|
41
|
-
event:
|
|
42
|
-
webhook:
|
|
41
|
+
event: LegacyWholesaleFeedEvent;
|
|
42
|
+
webhook: LegacyWholesaleFeedWebhook;
|
|
43
43
|
}
|
|
44
44
|
/**
|
|
45
45
|
* Parse and normalize a canonical wholesale-feed webhook notification.
|
|
@@ -51,3 +51,5 @@ export interface NormalizedWholesaleFeedWebhookNotification {
|
|
|
51
51
|
*/
|
|
52
52
|
export declare function parseWholesaleFeedWebhookNotification(input: unknown): NormalizedWholesaleFeedWebhookNotification;
|
|
53
53
|
export declare const normalizeWholesaleFeedWebhookNotification: typeof parseWholesaleFeedWebhookNotification;
|
|
54
|
+
/** Validate only the product representation contract, without consuming dedupe state. */
|
|
55
|
+
export declare function assertLegacyWholesaleFeedRepresentation(webhook: Record<string, unknown>): void;
|
|
@@ -19,6 +19,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
19
19
|
var webhook_notification_exports = {};
|
|
20
20
|
__export(webhook_notification_exports, {
|
|
21
21
|
WholesaleFeedWebhookNotificationError: () => WholesaleFeedWebhookNotificationError,
|
|
22
|
+
assertLegacyWholesaleFeedRepresentation: () => assertLegacyWholesaleFeedRepresentation,
|
|
22
23
|
normalizeWholesaleFeedWebhookNotification: () => normalizeWholesaleFeedWebhookNotification,
|
|
23
24
|
parseWholesaleFeedWebhookNotification: () => parseWholesaleFeedWebhookNotification
|
|
24
25
|
});
|
|
@@ -57,6 +58,7 @@ function parseWholesaleFeedWebhookNotification(input) {
|
|
|
57
58
|
const wholesaleFeedVersion = readRequiredString(webhook, "wholesale_feed_version");
|
|
58
59
|
const previousWholesaleFeedVersion = readOptionalString(webhook, "previous_wholesale_feed_version");
|
|
59
60
|
const cacheScope = readCacheScope(readRequiredString(webhook, "cache_scope"), "cache_scope");
|
|
61
|
+
assertLegacyWholesaleFeedRepresentation(webhook);
|
|
60
62
|
const eventId = readRequiredString(event, "event.event_id");
|
|
61
63
|
if (notificationId !== eventId) {
|
|
62
64
|
throw new WholesaleFeedWebhookNotificationError(
|
|
@@ -225,11 +227,13 @@ function validatePayloadForEvent(notificationType, entityId, payload) {
|
|
|
225
227
|
case "product.created":
|
|
226
228
|
case "product.updated": {
|
|
227
229
|
assertEntityIdMatchesPayload(entityId, readRequiredString(payload, "event.payload.product_id"), "product_id");
|
|
230
|
+
rejectCanonicalPayloadField(payload, "canonical_product");
|
|
228
231
|
readRequiredRecord(payload, "event.payload.product");
|
|
229
232
|
return void 0;
|
|
230
233
|
}
|
|
231
234
|
case "product.priced": {
|
|
232
235
|
assertEntityIdMatchesPayload(entityId, readRequiredString(payload, "event.payload.product_id"), "product_id");
|
|
236
|
+
rejectCanonicalPayloadField(payload, "canonical_pricing_options");
|
|
233
237
|
readRequiredNonEmptyArray(payload, "event.payload.pricing_options");
|
|
234
238
|
return void 0;
|
|
235
239
|
}
|
|
@@ -270,6 +274,46 @@ function validatePayloadForEvent(notificationType, entityId, payload) {
|
|
|
270
274
|
return readBulkChangeAffectedEntityType(payload);
|
|
271
275
|
}
|
|
272
276
|
}
|
|
277
|
+
function assertLegacyProductPayloadView(notificationType, productPayloadView) {
|
|
278
|
+
const isProductEvent = notificationType.startsWith("product.");
|
|
279
|
+
if (isProductEvent && (productPayloadView === void 0 || productPayloadView === "legacy")) return;
|
|
280
|
+
if (!isProductEvent && productPayloadView === void 0) return;
|
|
281
|
+
throw new WholesaleFeedWebhookNotificationError(
|
|
282
|
+
"wholesale_feed_webhook_field_invalid",
|
|
283
|
+
isProductEvent ? 'WholesaleFeedSync supports only product_payload_view "legacy".' : "Non-product wholesale-feed webhooks must omit product_payload_view.",
|
|
284
|
+
{
|
|
285
|
+
field: "product_payload_view",
|
|
286
|
+
expected: isProductEvent ? ["legacy"] : ["absent"],
|
|
287
|
+
actual: productPayloadView
|
|
288
|
+
}
|
|
289
|
+
);
|
|
290
|
+
}
|
|
291
|
+
function assertLegacyWholesaleFeedRepresentation(webhook) {
|
|
292
|
+
const notificationType = webhook.notification_type;
|
|
293
|
+
if (typeof notificationType !== "string" || !WHOLESALE_FEED_NOTIFICATION_TYPES.has(notificationType))
|
|
294
|
+
return;
|
|
295
|
+
const productPayloadView = readOptionalString(webhook, "product_payload_view");
|
|
296
|
+
assertLegacyProductPayloadView(notificationType, productPayloadView);
|
|
297
|
+
if (!notificationType.startsWith("product.")) return;
|
|
298
|
+
const event = webhook.event;
|
|
299
|
+
if (!event || typeof event !== "object" || Array.isArray(event)) return;
|
|
300
|
+
const payload = event.payload;
|
|
301
|
+
if (!payload || typeof payload !== "object" || Array.isArray(payload)) return;
|
|
302
|
+
const payloadRecord = payload;
|
|
303
|
+
if (notificationType === "product.created" || notificationType === "product.updated") {
|
|
304
|
+
rejectCanonicalPayloadField(payloadRecord, "canonical_product");
|
|
305
|
+
} else if (notificationType === "product.priced") {
|
|
306
|
+
rejectCanonicalPayloadField(payloadRecord, "canonical_pricing_options");
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
function rejectCanonicalPayloadField(payload, field) {
|
|
310
|
+
if (!Object.prototype.hasOwnProperty.call(payload, field)) return;
|
|
311
|
+
throw new WholesaleFeedWebhookNotificationError(
|
|
312
|
+
"wholesale_feed_webhook_field_invalid",
|
|
313
|
+
`WholesaleFeedSync legacy product view does not accept event.payload.${field}.`,
|
|
314
|
+
{ field: `event.payload.${field}`, expected: "absent", actual: payload[field] }
|
|
315
|
+
);
|
|
316
|
+
}
|
|
273
317
|
function assertEntityIdMatchesPayload(entityId, payloadEntityId, payloadField) {
|
|
274
318
|
if (entityId === payloadEntityId) return;
|
|
275
319
|
throw new WholesaleFeedWebhookNotificationError(
|
|
@@ -302,6 +346,7 @@ function describeValue(value) {
|
|
|
302
346
|
// Annotate the CommonJS export names for ESM import in node:
|
|
303
347
|
0 && (module.exports = {
|
|
304
348
|
WholesaleFeedWebhookNotificationError,
|
|
349
|
+
assertLegacyWholesaleFeedRepresentation,
|
|
305
350
|
normalizeWholesaleFeedWebhookNotification,
|
|
306
351
|
parseWholesaleFeedWebhookNotification
|
|
307
352
|
});
|
|
@@ -32,6 +32,7 @@ function parseWholesaleFeedWebhookNotification(input) {
|
|
|
32
32
|
const wholesaleFeedVersion = readRequiredString(webhook, "wholesale_feed_version");
|
|
33
33
|
const previousWholesaleFeedVersion = readOptionalString(webhook, "previous_wholesale_feed_version");
|
|
34
34
|
const cacheScope = readCacheScope(readRequiredString(webhook, "cache_scope"), "cache_scope");
|
|
35
|
+
assertLegacyWholesaleFeedRepresentation(webhook);
|
|
35
36
|
const eventId = readRequiredString(event, "event.event_id");
|
|
36
37
|
if (notificationId !== eventId) {
|
|
37
38
|
throw new WholesaleFeedWebhookNotificationError(
|
|
@@ -200,11 +201,13 @@ function validatePayloadForEvent(notificationType, entityId, payload) {
|
|
|
200
201
|
case "product.created":
|
|
201
202
|
case "product.updated": {
|
|
202
203
|
assertEntityIdMatchesPayload(entityId, readRequiredString(payload, "event.payload.product_id"), "product_id");
|
|
204
|
+
rejectCanonicalPayloadField(payload, "canonical_product");
|
|
203
205
|
readRequiredRecord(payload, "event.payload.product");
|
|
204
206
|
return void 0;
|
|
205
207
|
}
|
|
206
208
|
case "product.priced": {
|
|
207
209
|
assertEntityIdMatchesPayload(entityId, readRequiredString(payload, "event.payload.product_id"), "product_id");
|
|
210
|
+
rejectCanonicalPayloadField(payload, "canonical_pricing_options");
|
|
208
211
|
readRequiredNonEmptyArray(payload, "event.payload.pricing_options");
|
|
209
212
|
return void 0;
|
|
210
213
|
}
|
|
@@ -245,6 +248,46 @@ function validatePayloadForEvent(notificationType, entityId, payload) {
|
|
|
245
248
|
return readBulkChangeAffectedEntityType(payload);
|
|
246
249
|
}
|
|
247
250
|
}
|
|
251
|
+
function assertLegacyProductPayloadView(notificationType, productPayloadView) {
|
|
252
|
+
const isProductEvent = notificationType.startsWith("product.");
|
|
253
|
+
if (isProductEvent && (productPayloadView === void 0 || productPayloadView === "legacy")) return;
|
|
254
|
+
if (!isProductEvent && productPayloadView === void 0) return;
|
|
255
|
+
throw new WholesaleFeedWebhookNotificationError(
|
|
256
|
+
"wholesale_feed_webhook_field_invalid",
|
|
257
|
+
isProductEvent ? 'WholesaleFeedSync supports only product_payload_view "legacy".' : "Non-product wholesale-feed webhooks must omit product_payload_view.",
|
|
258
|
+
{
|
|
259
|
+
field: "product_payload_view",
|
|
260
|
+
expected: isProductEvent ? ["legacy"] : ["absent"],
|
|
261
|
+
actual: productPayloadView
|
|
262
|
+
}
|
|
263
|
+
);
|
|
264
|
+
}
|
|
265
|
+
function assertLegacyWholesaleFeedRepresentation(webhook) {
|
|
266
|
+
const notificationType = webhook.notification_type;
|
|
267
|
+
if (typeof notificationType !== "string" || !WHOLESALE_FEED_NOTIFICATION_TYPES.has(notificationType))
|
|
268
|
+
return;
|
|
269
|
+
const productPayloadView = readOptionalString(webhook, "product_payload_view");
|
|
270
|
+
assertLegacyProductPayloadView(notificationType, productPayloadView);
|
|
271
|
+
if (!notificationType.startsWith("product.")) return;
|
|
272
|
+
const event = webhook.event;
|
|
273
|
+
if (!event || typeof event !== "object" || Array.isArray(event)) return;
|
|
274
|
+
const payload = event.payload;
|
|
275
|
+
if (!payload || typeof payload !== "object" || Array.isArray(payload)) return;
|
|
276
|
+
const payloadRecord = payload;
|
|
277
|
+
if (notificationType === "product.created" || notificationType === "product.updated") {
|
|
278
|
+
rejectCanonicalPayloadField(payloadRecord, "canonical_product");
|
|
279
|
+
} else if (notificationType === "product.priced") {
|
|
280
|
+
rejectCanonicalPayloadField(payloadRecord, "canonical_pricing_options");
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
function rejectCanonicalPayloadField(payload, field) {
|
|
284
|
+
if (!Object.prototype.hasOwnProperty.call(payload, field)) return;
|
|
285
|
+
throw new WholesaleFeedWebhookNotificationError(
|
|
286
|
+
"wholesale_feed_webhook_field_invalid",
|
|
287
|
+
`WholesaleFeedSync legacy product view does not accept event.payload.${field}.`,
|
|
288
|
+
{ field: `event.payload.${field}`, expected: "absent", actual: payload[field] }
|
|
289
|
+
);
|
|
290
|
+
}
|
|
248
291
|
function assertEntityIdMatchesPayload(entityId, payloadEntityId, payloadField) {
|
|
249
292
|
if (entityId === payloadEntityId) return;
|
|
250
293
|
throw new WholesaleFeedWebhookNotificationError(
|
|
@@ -276,6 +319,7 @@ function describeValue(value) {
|
|
|
276
319
|
}
|
|
277
320
|
export {
|
|
278
321
|
WholesaleFeedWebhookNotificationError,
|
|
322
|
+
assertLegacyWholesaleFeedRepresentation,
|
|
279
323
|
normalizeWholesaleFeedWebhookNotification,
|
|
280
324
|
parseWholesaleFeedWebhookNotification
|
|
281
325
|
};
|
package/docs/CLI.md
CHANGED
|
@@ -320,7 +320,7 @@ Useful flags:
|
|
|
320
320
|
|
|
321
321
|
- `--storyboards ID,...`: Run specific storyboard or bundle IDs instead of capability-driven selection
|
|
322
322
|
- `--tracks core,products,...`: Restrict the run to specific tracks
|
|
323
|
-
- `--compliance-version VERSION`: Select
|
|
323
|
+
- `--compliance-version VERSION`: Select a packaged compliance cache/spec line, for example `3.1.18` or `3.2.0-rc.3`; use the same flag with `storyboard list`, `show`, and `step` when reproducing a pinned run
|
|
324
324
|
- `--compliance-dir PATH`: Use a specific compliance cache directory, mainly for local protocol/cache development
|
|
325
325
|
- `--brief TEXT`: Override the default sample discovery brief
|
|
326
326
|
- `--dry-run`: Preview steps without executing
|
package/docs/TYPE-SUMMARY.md
CHANGED
|
@@ -1,10 +1,24 @@
|
|
|
1
1
|
# AdCP Type Summary
|
|
2
2
|
|
|
3
|
-
> Generated at: 2026-09-
|
|
4
|
-
> @adcp/sdk v14.0.0-rc.
|
|
3
|
+
> Generated at: 2026-09-18
|
|
4
|
+
> @adcp/sdk v14.0.0-rc.39
|
|
5
5
|
|
|
6
6
|
Curated reference of the types that matter for using the AdCP client. For full generated types see `src/lib/types/tools.generated.ts` and `src/lib/types/core.generated.ts`.
|
|
7
7
|
|
|
8
|
+
## MediaBuy Action Assessment Types
|
|
9
|
+
|
|
10
|
+
Use `@adcp/sdk/media-buy/actions` for pure buyer assessment and `@adcp/sdk/server` for `mediaBuyActionResolver`. See [action assessment guide](guides/MEDIA-BUY-ACTION-ASSESSMENT.md).
|
|
11
|
+
|
|
12
|
+
| Type | Use |
|
|
13
|
+
| --- | --- |
|
|
14
|
+
| `MediaBuyTask` | Narrow routing union: `update_media_buy`, `control_media_buy`, `refine_proposals`, `sync_creatives`. |
|
|
15
|
+
| `ActionAvailability` | `available_now` with optional `nonDefaultRoute`, mode and authority; or `currently_unavailable` with reason, certainty and optional compatibility/constraint detail. |
|
|
16
|
+
| `ActionBuy`, `ActionProduct`, `ActionProposal` | Structural inputs for joining current accepted terms with live actions and advisory products. |
|
|
17
|
+
| `LiveMediaBuyAction` | Readable canonical or legacy entry for assessment, projection and existing preflight helpers, including rc.3 package scope. |
|
|
18
|
+
| `MediaBuyAvailableAction`, `MediaBuyValidAction` | Generated legacy wire entry / deprecated flat vocabulary; distinct from canonical helper entries. |
|
|
19
|
+
| `MediaBuyAction`, `MediaBuyActionId` | Action identifiers accepted by assessment / mutation helpers; runtime validation preserves unknown future data. |
|
|
20
|
+
| `ProposalChangeTerm`, `ChangeTermConstraints` | Negotiated term view and portable discriminated budget / flight / package-count / effective-timing constraints. |
|
|
21
|
+
|
|
8
22
|
## Client Types
|
|
9
23
|
|
|
10
24
|
```typescript
|
|
@@ -41,12 +55,24 @@ interface TransportOptions {
|
|
|
41
55
|
interface TaskOptions {
|
|
42
56
|
timeout?: number; // Absolute whole-task deadline
|
|
43
57
|
signal?: AbortSignal; // Caller cancellation
|
|
58
|
+
// Direct A2A mutation route, bound to authenticated principal + account scope.
|
|
59
|
+
durableContinuationRecovery?: { ownerScope: string };
|
|
44
60
|
// Trusted local receiver policy; snapshotted and persisted with generated
|
|
45
61
|
// webhook registrations, never inferred from or sent in task arguments.
|
|
46
62
|
delegatedOperatorAuthorization?: DelegatedOperatorAuthorizationContext;
|
|
47
63
|
// ...deadline, cancellation, transport, and conversation options...
|
|
48
64
|
}
|
|
49
65
|
|
|
66
|
+
interface DeferredContinuation<T> {
|
|
67
|
+
token: string;
|
|
68
|
+
question?: string;
|
|
69
|
+
resume(input: unknown): Promise<TaskResult<T>>;
|
|
70
|
+
recovery?: { operationId: string; recoveryKey: string }; // Host-only, persist once
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// AgentClient public direct-mutation route recovery
|
|
74
|
+
agent.recoverDirectPauseContinuation<T>({ operationId, recoveryKey, ownerScope });
|
|
75
|
+
|
|
50
76
|
interface ValidateAdAgentsOptions {
|
|
51
77
|
timeoutMs?: number; // Per-request ceiling
|
|
52
78
|
signal?: AbortSignal; // One signal/deadline across the complete discovery flow
|
|
@@ -2799,6 +2825,14 @@ interface ReportingSourceStagedObjectReaderV1 {
|
|
|
2799
2825
|
type ReportingSourceExecutorResultV1 =
|
|
2800
2826
|
| { ok: true; response: ReportingSourceExecutionResponseV1; manifestBytes: Uint8Array }
|
|
2801
2827
|
| { ok: false; error: ReportingSourceErrorV1 };
|
|
2828
|
+
type InlineReportingMetricEvidenceV1 =
|
|
2829
|
+
| { constituent_id: string; metric: string; status: 'present' | 'explicit_zero'; data_through: string }
|
|
2830
|
+
| { constituent_id: string; metric: string; status: 'unsupported' | 'delayed' | 'partial' | 'stale' | 'missing'; reason: string; data_through?: string };
|
|
2831
|
+
interface InlineReportingAvailabilityEvidenceV1 {
|
|
2832
|
+
version: '1.0';
|
|
2833
|
+
cells: readonly InlineReportingMetricEvidenceV1[];
|
|
2834
|
+
}
|
|
2835
|
+
// Inline callback requests include constituents: { constituent_id, media_buy_id }[]; evidence-bearing responses add availability_evidence.
|
|
2802
2836
|
// validateReportingSourceExecutionV1({ level, capabilities, request, result, objectReader })
|
|
2803
2837
|
// runReportingSourceReplayConformanceV1({ level, executor, request, objectReader })
|
|
2804
2838
|
// validateReportingRevisionSequenceV1(manifests, { crossFinalityBridge })
|
|
@@ -2809,11 +2843,41 @@ type ReportingSourceExecutorResultV1 =
|
|
|
2809
2843
|
|
|
2810
2844
|
## Seller Reporting Ledger
|
|
2811
2845
|
|
|
2812
|
-
|
|
2846
|
+
Ledger symbols import from `@adcp/sdk/reporting/ledger`; `createPostgresPersistentNotificationRuntime` is a server symbol and imports from `@adcp/sdk/server`.
|
|
2813
2847
|
|
|
2814
2848
|
```typescript
|
|
2815
|
-
|
|
2849
|
+
// Build the notification path first: the store must be constructed with the
|
|
2850
|
+
// activity port, or lifecycle transitions record no activity and notify nobody.
|
|
2851
|
+
const attemptCheckpoint = createPostgresReportingNotificationAttemptCheckpoint({
|
|
2852
|
+
db: pool,
|
|
2853
|
+
namespace: 'seller-production',
|
|
2854
|
+
});
|
|
2855
|
+
const notifications = createPostgresPersistentNotificationRuntime({
|
|
2856
|
+
db: pool,
|
|
2857
|
+
publisherScope: 'seller-production',
|
|
2858
|
+
checkpointDeliveryAttempt: attemptCheckpoint,
|
|
2859
|
+
subscriptions: { acknowledgeIsolatedDatabase: true },
|
|
2860
|
+
...notificationOptions,
|
|
2861
|
+
});
|
|
2862
|
+
const reportingActivity = createPostgresReportingNotificationActivityRuntime({
|
|
2863
|
+
db: pool,
|
|
2864
|
+
notifications,
|
|
2865
|
+
namespace: 'seller-production',
|
|
2866
|
+
attemptCheckpoint,
|
|
2867
|
+
tenantScopeForAccount: accountId => trustedTenantDirectory.tenantFor(accountId),
|
|
2868
|
+
});
|
|
2869
|
+
|
|
2870
|
+
// One store, wired to the activity port, used by every participant below.
|
|
2871
|
+
const store = new PostgresReportingLedgerStore(pool, {
|
|
2872
|
+
acknowledgeIsolatedDatabase: true,
|
|
2873
|
+
notificationActivityPort: reportingActivity.port,
|
|
2874
|
+
});
|
|
2875
|
+
|
|
2876
|
+
// Every migration this wiring needs, before probing.
|
|
2816
2877
|
await pool.query(REPORTING_LEDGER_MIGRATION);
|
|
2878
|
+
for (const sql of notifications.migrations.all) await pool.query(sql);
|
|
2879
|
+
for (const sql of reportingActivity.migrations.all) await pool.query(sql);
|
|
2880
|
+
|
|
2817
2881
|
const producer = createReportingProducer({ store, source, offerings, contact });
|
|
2818
2882
|
await producer.planObligations();
|
|
2819
2883
|
await producer.runWorker();
|
|
@@ -2824,10 +2888,60 @@ const getMediaBuyDelivery = createReportingDeliveryHandler(store); // exact repo
|
|
|
2824
2888
|
const syncReportingStatus = createSyncReportingStatusHandler(store, {
|
|
2825
2889
|
resolveConsumerId: context => context.agent.agent_url,
|
|
2826
2890
|
});
|
|
2891
|
+
|
|
2892
|
+
await reportingActivity.probe();
|
|
2893
|
+
// Run repeatedly from a durable scheduler; this call is bounded.
|
|
2894
|
+
await reportingActivity.recoverOnce({ ownerToken: stableWorkerId });
|
|
2895
|
+
const activityPage = await reportingActivity.listActivity({
|
|
2896
|
+
tenantId: trustedTenant,
|
|
2897
|
+
accountId: resolvedAccountId,
|
|
2898
|
+
limit: 100,
|
|
2899
|
+
});
|
|
2827
2900
|
```
|
|
2828
2901
|
|
|
2829
2902
|
The store freezes configuration lineage and period-end denominators, retains immutable RFC 8785 JCS/SHA-256-bound revisions, atomically fences lifecycle projections against their revision evidence, and provides leased production plus snapshot-stable status pagination. `projectReportingObligationHealthV1` implements waiting, healthy, delayed, action_required, and complete without I/O.
|
|
2830
2903
|
|
|
2904
|
+
`ReportingLedgerNotificationActivityPortV1<TTransaction>` is the custom-store seam. Invoke it inside the authoritative transition transaction and fence both predecessor health and finality. The bundled PostgreSQL runtime persists exactly-once intent plus paginatable account activity, then projects health changes through `PersistentNotificationRuntime`; finality-only changes remain internal activity. It never owns subscriber credentials or sends webhooks itself. `listActivity()` is adopter-facing only because no public AdCP account-activity read task exists.
|
|
2905
|
+
|
|
2906
|
+
## Reliable Reporting Service
|
|
2907
|
+
|
|
2908
|
+
Import from `@adcp/sdk/reporting/service`. This is the adapter-first lifecycle owner over the source and ledger primitives; it does not introduce another store or transport.
|
|
2909
|
+
|
|
2910
|
+
```typescript
|
|
2911
|
+
interface ReliableReportingAdapterV1 {
|
|
2912
|
+
readonly sourceOffering: ReportingSourceOfferingV1;
|
|
2913
|
+
readonly deliveryOffering: ReportingDeliveryOffering;
|
|
2914
|
+
// Exactly one of fetchSlice or executor.
|
|
2915
|
+
readonly fetchSlice?: InlineReportingDeliveryFetchV1;
|
|
2916
|
+
readonly executor?: ReportingSourceWithReaderV1;
|
|
2917
|
+
// Opt-in bounded replay window for the inline executor; never applied
|
|
2918
|
+
// silently. A feed that outlives its replay ceiling needs this or a
|
|
2919
|
+
// durable executor.
|
|
2920
|
+
readonly inlineReplayRetention?: InlineReportingReplayRetentionV1;
|
|
2921
|
+
}
|
|
2922
|
+
|
|
2923
|
+
const reporting = createReliableReportingService({
|
|
2924
|
+
store,
|
|
2925
|
+
adapters,
|
|
2926
|
+
contact,
|
|
2927
|
+
automatedRecoveryWindowSeconds,
|
|
2928
|
+
statusRetentionDays, // enforce this commitment in the ledger database
|
|
2929
|
+
resolveSource: account => ({ adapterId, sourceScope, sourceTimezone }),
|
|
2930
|
+
resolveCurrency: account => currency,
|
|
2931
|
+
resolveCoverage: account => ({ constituents }), // authorized media-buy/package denominator
|
|
2932
|
+
resolveConsumerId, // optional; controls consumer-status handler/capability
|
|
2933
|
+
});
|
|
2934
|
+
|
|
2935
|
+
await pool.query(reporting.setup.migrations[0]);
|
|
2936
|
+
const installedPlatform = reporting.install(platform);
|
|
2937
|
+
await reporting.installConfiguration(configuration, { account: ctx.account });
|
|
2938
|
+
await reporting.runCycle({ accountId }); // tenant-partitioned
|
|
2939
|
+
reporting.start({ intervalMilliseconds, deploymentWide: true }); // explicit full-ledger scan
|
|
2940
|
+
await reporting.stop();
|
|
2941
|
+
```
|
|
2942
|
+
|
|
2943
|
+
Account identity comes only from the framework-resolved context. Trusted host callbacks derive adapter routing, credential-free `sourceScope`, source timezone, currency, and the authorized constituent denominator. A declaration cannot supply `account`, `sourceScope`, `sourceTimezone`, `contract`, `currency`, `constituents`, or `mediaBuyIds`; `mediaBuyIds` is derived from `resolveCoverage`, so a buyer cannot name another buyer's media buys on a shared upstream network. Currency is frozen into configuration and obligation lineage. Capabilities are Core-only and derived from installed adapters and handlers; managed delivery, reconciled billing, receipts, webhook activity, and notifications are not advertised. Installation requires `platform.accounts.upsert`, which owns the advertised `sync_accounts` configuration path.
|
|
2944
|
+
|
|
2831
2945
|
## Key Enums
|
|
2832
2946
|
|
|
2833
2947
|
| Enum | Values |
|