@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
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ActionBuy, ConstraintAssessment, ProposalChangeTerm } from './action-types.mjs';
|
|
2
|
+
import type { DecomposedUpdateMediaBuyMutation } from './mutations.mjs';
|
|
3
|
+
import type { UpdateMediaBuyRequestLike } from './types.mjs';
|
|
4
|
+
export interface ConstraintEvaluationOptions {
|
|
5
|
+
/** Captured request time in epoch milliseconds. Required for wall-clock bounds; never inferred from prose. */
|
|
6
|
+
now?: number;
|
|
7
|
+
}
|
|
8
|
+
/** Evaluate only portable data. Seller conditions and calendar/campaign durations stay unknown. */
|
|
9
|
+
export declare function evaluateChangeTermConstraints(term: ProposalChangeTerm, buy: ActionBuy, request: UpdateMediaBuyRequestLike, mutations: readonly DecomposedUpdateMediaBuyMutation[], options?: ConstraintEvaluationOptions): ConstraintAssessment;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ActionBuy, ConstraintAssessment, ProposalChangeTerm } from './action-types';
|
|
2
|
+
import type { DecomposedUpdateMediaBuyMutation } from './mutations';
|
|
3
|
+
import type { UpdateMediaBuyRequestLike } from './types';
|
|
4
|
+
export interface ConstraintEvaluationOptions {
|
|
5
|
+
/** Captured request time in epoch milliseconds. Required for wall-clock bounds; never inferred from prose. */
|
|
6
|
+
now?: number;
|
|
7
|
+
}
|
|
8
|
+
/** Evaluate only portable data. Seller conditions and calendar/campaign durations stay unknown. */
|
|
9
|
+
export declare function evaluateChangeTermConstraints(term: ProposalChangeTerm, buy: ActionBuy, request: UpdateMediaBuyRequestLike, mutations: readonly DecomposedUpdateMediaBuyMutation[], options?: ConstraintEvaluationOptions): ConstraintAssessment;
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var action_constraints_exports = {};
|
|
20
|
+
__export(action_constraints_exports, {
|
|
21
|
+
evaluateChangeTermConstraints: () => evaluateChangeTermConstraints
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(action_constraints_exports);
|
|
24
|
+
var import_action_contracts = require('./action-contracts.js');
|
|
25
|
+
const finite = (value) => typeof value === "number" && Number.isFinite(value);
|
|
26
|
+
const timestamp = (value) => {
|
|
27
|
+
const raw = typeof value === "object" && value !== null && "datetime" in value ? value.datetime : value;
|
|
28
|
+
if (typeof raw !== "string") return void 0;
|
|
29
|
+
const parsed = Date.parse(raw);
|
|
30
|
+
return Number.isFinite(parsed) ? parsed : void 0;
|
|
31
|
+
};
|
|
32
|
+
const unknown = (constraint, path) => ({
|
|
33
|
+
status: "unknown",
|
|
34
|
+
constraint,
|
|
35
|
+
path,
|
|
36
|
+
message: `Cannot evaluate ${constraint} at ${path}; supply the committed baseline, currency, and captured request time required by that bound.`
|
|
37
|
+
});
|
|
38
|
+
const exceeded = (constraint, path) => ({
|
|
39
|
+
status: "exceeded",
|
|
40
|
+
constraint,
|
|
41
|
+
path,
|
|
42
|
+
message: "The requested change exceeds the accepted bound; refine the accepted proposal."
|
|
43
|
+
});
|
|
44
|
+
function evaluateChangeTermConstraints(term, buy, request, mutations, options = {}) {
|
|
45
|
+
if (request.total_budget && mutations.some((m) => m.action === term.action && ["total_budget.amount", "budget_allocation"].includes(m.field))) {
|
|
46
|
+
const currency = typeof buy.total_budget === "object" ? buy.total_budget?.currency : buy.currency;
|
|
47
|
+
if (currency === void 0) return unknown("currency", "total_budget.currency");
|
|
48
|
+
if (request.total_budget.currency !== currency) return exceeded("currency_mismatch", "total_budget.currency");
|
|
49
|
+
}
|
|
50
|
+
if (term.constraints === void 0) return { status: "satisfied" };
|
|
51
|
+
if ((0, import_action_contracts.changeConstraintIssues)(term.action, term.constraints).length) return unknown("invalid_constraints", term.action);
|
|
52
|
+
const c = term.constraints;
|
|
53
|
+
const relevant = mutations.filter((m) => m.action === term.action);
|
|
54
|
+
let unresolved;
|
|
55
|
+
const recordUnknown = (key, path) => {
|
|
56
|
+
unresolved ??= unknown(key, path);
|
|
57
|
+
};
|
|
58
|
+
if (c.kind === "budget") {
|
|
59
|
+
if (request.new_packages?.length && (c.min_result_amount || c.max_result_amount))
|
|
60
|
+
return unknown("added_package_budget", "new_packages");
|
|
61
|
+
const values = relevant.filter((m) => /(?:budget(?:\.amount)?|daily_budget_cap|min_spend_target)$/.test(m.field));
|
|
62
|
+
if (!values.length && term.action === "update_budget_allocation" && relevant.some((m) => m.field === "budget_allocation")) {
|
|
63
|
+
const amount = typeof buy.total_budget === "object" ? buy.total_budget?.amount : buy.total_budget;
|
|
64
|
+
values.push({
|
|
65
|
+
action: term.action,
|
|
66
|
+
field: "budget_allocation",
|
|
67
|
+
path: "budget_allocation",
|
|
68
|
+
scope: "buy",
|
|
69
|
+
from: amount,
|
|
70
|
+
to: request.total_budget?.amount ?? amount
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
if (!values.length) return unknown("cannot_preflight", term.action);
|
|
74
|
+
const currency = typeof buy.total_budget === "object" ? buy.total_budget?.currency : buy.currency;
|
|
75
|
+
for (const m of values) {
|
|
76
|
+
if (m.to === null && (m.field === "packages[].budget" || m.field.endsWith("daily_budget_cap")) && term.action === "increase_budget") {
|
|
77
|
+
if (c.max_delta_amount || c.max_delta_percent !== void 0 || c.max_result_amount)
|
|
78
|
+
return exceeded("unbounded_result", m.path);
|
|
79
|
+
continue;
|
|
80
|
+
}
|
|
81
|
+
if (!finite(m.to) || m.to < 0) {
|
|
82
|
+
recordUnknown("result_amount", m.path);
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
const delta = finite(m.from) && m.from >= 0 ? Math.abs(m.to - m.from) : void 0;
|
|
86
|
+
if (m.field === "total_budget.amount" && request.total_budget?.currency !== currency) {
|
|
87
|
+
if (currency === void 0) recordUnknown("currency", m.path);
|
|
88
|
+
else return exceeded("currency_mismatch", "total_budget.currency");
|
|
89
|
+
}
|
|
90
|
+
for (const key of ["max_delta_amount", "min_result_amount", "max_result_amount"]) {
|
|
91
|
+
const bound = c[key];
|
|
92
|
+
if (!bound) continue;
|
|
93
|
+
if (currency === void 0) {
|
|
94
|
+
recordUnknown("currency", m.path);
|
|
95
|
+
continue;
|
|
96
|
+
}
|
|
97
|
+
if (currency !== bound.currency) {
|
|
98
|
+
recordUnknown("currency_mismatch", m.path);
|
|
99
|
+
continue;
|
|
100
|
+
}
|
|
101
|
+
if (key === "max_delta_amount") {
|
|
102
|
+
if (delta === void 0) recordUnknown(key, m.path);
|
|
103
|
+
else if (delta > bound.amount) return exceeded(key, m.path);
|
|
104
|
+
} else if (key === "min_result_amount" && m.to < bound.amount || key === "max_result_amount" && m.to > bound.amount)
|
|
105
|
+
return exceeded(key, m.path);
|
|
106
|
+
}
|
|
107
|
+
if (c.max_delta_percent !== void 0) {
|
|
108
|
+
if (delta === void 0 || !finite(m.from)) recordUnknown("max_delta_percent", m.path);
|
|
109
|
+
else if (m.from === 0 ? delta > 0 : delta * 100 > c.max_delta_percent * m.from)
|
|
110
|
+
return exceeded("max_delta_percent", m.path);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
} else if (c.kind === "flight") {
|
|
114
|
+
if (!relevant.length) return unknown("cannot_preflight", term.action);
|
|
115
|
+
for (const m of relevant) {
|
|
116
|
+
const before = timestamp(m.from), after = timestamp(m.to);
|
|
117
|
+
if (after === void 0) {
|
|
118
|
+
recordUnknown("result_time", m.path);
|
|
119
|
+
continue;
|
|
120
|
+
}
|
|
121
|
+
if (c.max_change !== void 0) {
|
|
122
|
+
const max = (0, import_action_contracts.elapsedDuration)(c.max_change);
|
|
123
|
+
if (before === void 0 || max === void 0) recordUnknown("max_change", m.path);
|
|
124
|
+
else if (Math.abs(after - before) > max) return exceeded("max_change", m.path);
|
|
125
|
+
}
|
|
126
|
+
if (c.earliest_result !== void 0 && after < Date.parse(c.earliest_result))
|
|
127
|
+
return exceeded("earliest_result", m.path);
|
|
128
|
+
if (c.latest_result !== void 0 && after > Date.parse(c.latest_result))
|
|
129
|
+
return exceeded("latest_result", m.path);
|
|
130
|
+
if (c.minimum_notice !== void 0) {
|
|
131
|
+
if ((0, import_action_contracts.elapsedDuration)(c.minimum_notice) === void 0) recordUnknown("minimum_notice", m.path);
|
|
132
|
+
else return exceeded("minimum_notice", m.path);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
} else if (c.kind === "package_count") {
|
|
136
|
+
const additions = request.new_packages?.length ?? 0;
|
|
137
|
+
const removed = request.packages?.filter((p) => p.canceled === true) ?? [];
|
|
138
|
+
const removals = removed.length;
|
|
139
|
+
if (c.max_additions !== void 0 && additions > c.max_additions) return exceeded("max_additions", "new_packages");
|
|
140
|
+
if (c.max_removals !== void 0 && removals > c.max_removals) return exceeded("max_removals", "packages");
|
|
141
|
+
if (c.max_result_count !== void 0) {
|
|
142
|
+
const current = buy.packages;
|
|
143
|
+
if (!current || new Set(current.map((p) => p.package_id)).size !== current.length || current.some((p) => !p.package_id) || new Set(removed.map((p) => p.package_id)).size !== removals || removed.some(
|
|
144
|
+
(p) => !current.some((old) => old.package_id === p.package_id && !old.canceled && old.status !== "canceled")
|
|
145
|
+
)) {
|
|
146
|
+
recordUnknown("max_result_count", "packages");
|
|
147
|
+
} else if (current.filter((p) => !p.canceled && p.status !== "canceled").length + additions - removals > c.max_result_count)
|
|
148
|
+
return exceeded("max_result_count", "packages");
|
|
149
|
+
}
|
|
150
|
+
} else if (c.kind === "effective_timing") {
|
|
151
|
+
const path = relevant[0]?.path ?? (term.action === "cancel" ? "canceled" : "paused");
|
|
152
|
+
if (c.minimum_notice !== void 0) {
|
|
153
|
+
if ((0, import_action_contracts.elapsedDuration)(c.minimum_notice) === void 0) recordUnknown("minimum_notice", path);
|
|
154
|
+
else return exceeded("minimum_notice", path);
|
|
155
|
+
}
|
|
156
|
+
if ((c.earliest_effective_at !== void 0 || c.latest_effective_at !== void 0) && !finite(options.now))
|
|
157
|
+
recordUnknown("request_time", path);
|
|
158
|
+
else if (finite(options.now)) {
|
|
159
|
+
if (c.earliest_effective_at !== void 0 && options.now < Date.parse(c.earliest_effective_at))
|
|
160
|
+
return exceeded("earliest_effective_at", path);
|
|
161
|
+
if (c.latest_effective_at !== void 0 && options.now > Date.parse(c.latest_effective_at))
|
|
162
|
+
return exceeded("latest_effective_at", path);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
return unresolved ?? { status: "satisfied" };
|
|
166
|
+
}
|
|
167
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
168
|
+
0 && (module.exports = {
|
|
169
|
+
evaluateChangeTermConstraints
|
|
170
|
+
});
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import { changeConstraintIssues, elapsedDuration } from "./action-contracts.mjs";
|
|
2
|
+
const finite = (value) => typeof value === "number" && Number.isFinite(value);
|
|
3
|
+
const timestamp = (value) => {
|
|
4
|
+
const raw = typeof value === "object" && value !== null && "datetime" in value ? value.datetime : value;
|
|
5
|
+
if (typeof raw !== "string") return void 0;
|
|
6
|
+
const parsed = Date.parse(raw);
|
|
7
|
+
return Number.isFinite(parsed) ? parsed : void 0;
|
|
8
|
+
};
|
|
9
|
+
const unknown = (constraint, path) => ({
|
|
10
|
+
status: "unknown",
|
|
11
|
+
constraint,
|
|
12
|
+
path,
|
|
13
|
+
message: `Cannot evaluate ${constraint} at ${path}; supply the committed baseline, currency, and captured request time required by that bound.`
|
|
14
|
+
});
|
|
15
|
+
const exceeded = (constraint, path) => ({
|
|
16
|
+
status: "exceeded",
|
|
17
|
+
constraint,
|
|
18
|
+
path,
|
|
19
|
+
message: "The requested change exceeds the accepted bound; refine the accepted proposal."
|
|
20
|
+
});
|
|
21
|
+
function evaluateChangeTermConstraints(term, buy, request, mutations, options = {}) {
|
|
22
|
+
if (request.total_budget && mutations.some((m) => m.action === term.action && ["total_budget.amount", "budget_allocation"].includes(m.field))) {
|
|
23
|
+
const currency = typeof buy.total_budget === "object" ? buy.total_budget?.currency : buy.currency;
|
|
24
|
+
if (currency === void 0) return unknown("currency", "total_budget.currency");
|
|
25
|
+
if (request.total_budget.currency !== currency) return exceeded("currency_mismatch", "total_budget.currency");
|
|
26
|
+
}
|
|
27
|
+
if (term.constraints === void 0) return { status: "satisfied" };
|
|
28
|
+
if (changeConstraintIssues(term.action, term.constraints).length) return unknown("invalid_constraints", term.action);
|
|
29
|
+
const c = term.constraints;
|
|
30
|
+
const relevant = mutations.filter((m) => m.action === term.action);
|
|
31
|
+
let unresolved;
|
|
32
|
+
const recordUnknown = (key, path) => {
|
|
33
|
+
unresolved ??= unknown(key, path);
|
|
34
|
+
};
|
|
35
|
+
if (c.kind === "budget") {
|
|
36
|
+
if (request.new_packages?.length && (c.min_result_amount || c.max_result_amount))
|
|
37
|
+
return unknown("added_package_budget", "new_packages");
|
|
38
|
+
const values = relevant.filter((m) => /(?:budget(?:\.amount)?|daily_budget_cap|min_spend_target)$/.test(m.field));
|
|
39
|
+
if (!values.length && term.action === "update_budget_allocation" && relevant.some((m) => m.field === "budget_allocation")) {
|
|
40
|
+
const amount = typeof buy.total_budget === "object" ? buy.total_budget?.amount : buy.total_budget;
|
|
41
|
+
values.push({
|
|
42
|
+
action: term.action,
|
|
43
|
+
field: "budget_allocation",
|
|
44
|
+
path: "budget_allocation",
|
|
45
|
+
scope: "buy",
|
|
46
|
+
from: amount,
|
|
47
|
+
to: request.total_budget?.amount ?? amount
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
if (!values.length) return unknown("cannot_preflight", term.action);
|
|
51
|
+
const currency = typeof buy.total_budget === "object" ? buy.total_budget?.currency : buy.currency;
|
|
52
|
+
for (const m of values) {
|
|
53
|
+
if (m.to === null && (m.field === "packages[].budget" || m.field.endsWith("daily_budget_cap")) && term.action === "increase_budget") {
|
|
54
|
+
if (c.max_delta_amount || c.max_delta_percent !== void 0 || c.max_result_amount)
|
|
55
|
+
return exceeded("unbounded_result", m.path);
|
|
56
|
+
continue;
|
|
57
|
+
}
|
|
58
|
+
if (!finite(m.to) || m.to < 0) {
|
|
59
|
+
recordUnknown("result_amount", m.path);
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
const delta = finite(m.from) && m.from >= 0 ? Math.abs(m.to - m.from) : void 0;
|
|
63
|
+
if (m.field === "total_budget.amount" && request.total_budget?.currency !== currency) {
|
|
64
|
+
if (currency === void 0) recordUnknown("currency", m.path);
|
|
65
|
+
else return exceeded("currency_mismatch", "total_budget.currency");
|
|
66
|
+
}
|
|
67
|
+
for (const key of ["max_delta_amount", "min_result_amount", "max_result_amount"]) {
|
|
68
|
+
const bound = c[key];
|
|
69
|
+
if (!bound) continue;
|
|
70
|
+
if (currency === void 0) {
|
|
71
|
+
recordUnknown("currency", m.path);
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
if (currency !== bound.currency) {
|
|
75
|
+
recordUnknown("currency_mismatch", m.path);
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
if (key === "max_delta_amount") {
|
|
79
|
+
if (delta === void 0) recordUnknown(key, m.path);
|
|
80
|
+
else if (delta > bound.amount) return exceeded(key, m.path);
|
|
81
|
+
} else if (key === "min_result_amount" && m.to < bound.amount || key === "max_result_amount" && m.to > bound.amount)
|
|
82
|
+
return exceeded(key, m.path);
|
|
83
|
+
}
|
|
84
|
+
if (c.max_delta_percent !== void 0) {
|
|
85
|
+
if (delta === void 0 || !finite(m.from)) recordUnknown("max_delta_percent", m.path);
|
|
86
|
+
else if (m.from === 0 ? delta > 0 : delta * 100 > c.max_delta_percent * m.from)
|
|
87
|
+
return exceeded("max_delta_percent", m.path);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
} else if (c.kind === "flight") {
|
|
91
|
+
if (!relevant.length) return unknown("cannot_preflight", term.action);
|
|
92
|
+
for (const m of relevant) {
|
|
93
|
+
const before = timestamp(m.from), after = timestamp(m.to);
|
|
94
|
+
if (after === void 0) {
|
|
95
|
+
recordUnknown("result_time", m.path);
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
98
|
+
if (c.max_change !== void 0) {
|
|
99
|
+
const max = elapsedDuration(c.max_change);
|
|
100
|
+
if (before === void 0 || max === void 0) recordUnknown("max_change", m.path);
|
|
101
|
+
else if (Math.abs(after - before) > max) return exceeded("max_change", m.path);
|
|
102
|
+
}
|
|
103
|
+
if (c.earliest_result !== void 0 && after < Date.parse(c.earliest_result))
|
|
104
|
+
return exceeded("earliest_result", m.path);
|
|
105
|
+
if (c.latest_result !== void 0 && after > Date.parse(c.latest_result))
|
|
106
|
+
return exceeded("latest_result", m.path);
|
|
107
|
+
if (c.minimum_notice !== void 0) {
|
|
108
|
+
if (elapsedDuration(c.minimum_notice) === void 0) recordUnknown("minimum_notice", m.path);
|
|
109
|
+
else return exceeded("minimum_notice", m.path);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
} else if (c.kind === "package_count") {
|
|
113
|
+
const additions = request.new_packages?.length ?? 0;
|
|
114
|
+
const removed = request.packages?.filter((p) => p.canceled === true) ?? [];
|
|
115
|
+
const removals = removed.length;
|
|
116
|
+
if (c.max_additions !== void 0 && additions > c.max_additions) return exceeded("max_additions", "new_packages");
|
|
117
|
+
if (c.max_removals !== void 0 && removals > c.max_removals) return exceeded("max_removals", "packages");
|
|
118
|
+
if (c.max_result_count !== void 0) {
|
|
119
|
+
const current = buy.packages;
|
|
120
|
+
if (!current || new Set(current.map((p) => p.package_id)).size !== current.length || current.some((p) => !p.package_id) || new Set(removed.map((p) => p.package_id)).size !== removals || removed.some(
|
|
121
|
+
(p) => !current.some((old) => old.package_id === p.package_id && !old.canceled && old.status !== "canceled")
|
|
122
|
+
)) {
|
|
123
|
+
recordUnknown("max_result_count", "packages");
|
|
124
|
+
} else if (current.filter((p) => !p.canceled && p.status !== "canceled").length + additions - removals > c.max_result_count)
|
|
125
|
+
return exceeded("max_result_count", "packages");
|
|
126
|
+
}
|
|
127
|
+
} else if (c.kind === "effective_timing") {
|
|
128
|
+
const path = relevant[0]?.path ?? (term.action === "cancel" ? "canceled" : "paused");
|
|
129
|
+
if (c.minimum_notice !== void 0) {
|
|
130
|
+
if (elapsedDuration(c.minimum_notice) === void 0) recordUnknown("minimum_notice", path);
|
|
131
|
+
else return exceeded("minimum_notice", path);
|
|
132
|
+
}
|
|
133
|
+
if ((c.earliest_effective_at !== void 0 || c.latest_effective_at !== void 0) && !finite(options.now))
|
|
134
|
+
recordUnknown("request_time", path);
|
|
135
|
+
else if (finite(options.now)) {
|
|
136
|
+
if (c.earliest_effective_at !== void 0 && options.now < Date.parse(c.earliest_effective_at))
|
|
137
|
+
return exceeded("earliest_effective_at", path);
|
|
138
|
+
if (c.latest_effective_at !== void 0 && options.now > Date.parse(c.latest_effective_at))
|
|
139
|
+
return exceeded("latest_effective_at", path);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
return unresolved ?? { status: "satisfied" };
|
|
143
|
+
}
|
|
144
|
+
export {
|
|
145
|
+
evaluateChangeTermConstraints
|
|
146
|
+
};
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { ActionBuy, LiveMediaBuyAction, ActionProposal, MediaBuyAction, MediaBuyTask, ProposalChangeTerm, ProductActionTemplate, MediaBuyStatus } from './action-types.mjs';
|
|
2
|
+
import type { SLAWindow } from './types.mjs';
|
|
3
|
+
export declare const NON_TERMINAL_ACTION_STATUSES: readonly ["pending_creatives", "pending_start", "active", "paused"];
|
|
4
|
+
/** Canonical task alternatives. The live entry chooses among these; mode never selects a task. */
|
|
5
|
+
export declare function mediaBuyActionTasks(action: string): readonly MediaBuyTask[];
|
|
6
|
+
/** The canonical default, only usable with a known current right and validated live entry. */
|
|
7
|
+
export declare function defaultMediaBuyActionTask(action: MediaBuyAction): MediaBuyTask | undefined;
|
|
8
|
+
export declare function actionAllowedStatuses(term: Pick<ProposalChangeTerm, 'action' | 'allowed_statuses'>): MediaBuyStatus[];
|
|
9
|
+
/** Elapsed durations only. Calendar/campaign lengths require seller state and remain unknown. */
|
|
10
|
+
export declare function elapsedDuration(value: unknown): number | undefined;
|
|
11
|
+
/** Runtime may retain or tighten elapsed maxima; absent committed maxima cannot be dropped. */
|
|
12
|
+
export declare function slaWithin(ceiling: SLAWindow | undefined, candidate: SLAWindow | undefined): boolean;
|
|
13
|
+
/** Structural/action checks for this pure helper, not a replacement for proposal schema/digest verification. */
|
|
14
|
+
export declare function changeConstraintIssues(action: MediaBuyAction, constraints: unknown, currency?: string): string[];
|
|
15
|
+
export declare function slaValid(sla: unknown): boolean;
|
|
16
|
+
export declare function changeTermIssues(terms: readonly ProposalChangeTerm[], currency?: string): string[];
|
|
17
|
+
export declare function productTemplateIssues(templates: readonly ProductActionTemplate[], currency?: string): string[];
|
|
18
|
+
/** Match advisory rollups only; accepted rights always retain exact canonical identity. */
|
|
19
|
+
export declare function findProductAction(templates: readonly ProductActionTemplate[] | undefined, action: MediaBuyAction): ProductActionTemplate | undefined;
|
|
20
|
+
export declare function legacyActionSupported(action: string): boolean;
|
|
21
|
+
/** Structural live-entry validation; unknown action/mode strings remain opaque. */
|
|
22
|
+
export declare function liveActionIssues(entries: unknown): string[];
|
|
23
|
+
/** beta.9 introduced change_term_id, seller_managed and condition_unresolved together (upstream a1672f9). */
|
|
24
|
+
export declare function supportsChangeTermIdentity(version: string): boolean;
|
|
25
|
+
/** rc.3 added shared-cap rights and exact live package scope. */
|
|
26
|
+
export declare function supportsRc3Actions(version: string): boolean;
|
|
27
|
+
/** Check wire feature introductions independently of whether an action has commercial terms. */
|
|
28
|
+
export declare function liveActionFitsVersion(entry: LiveMediaBuyAction, version: string): boolean;
|
|
29
|
+
/** Narrow error-details vocabulary is distinct from canonical actions; older served versions stay gated. */
|
|
30
|
+
export declare function actionFitsErrorDetails(action: string, version: string): boolean;
|
|
31
|
+
/** Apply a separately stored accepted snapshot before either decomposition or assessment. */
|
|
32
|
+
export declare function withActionProposal<T extends ActionBuy>(buy: T, options: {
|
|
33
|
+
proposal?: ActionProposal;
|
|
34
|
+
}): T;
|
|
35
|
+
/** Explicit terminal, pending, or unknown package state takes precedence over pause flags. */
|
|
36
|
+
export declare function packageActionStatus(pkg: {
|
|
37
|
+
status?: string;
|
|
38
|
+
canceled?: boolean;
|
|
39
|
+
paused?: boolean;
|
|
40
|
+
} | undefined): string | undefined;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { ActionBuy, LiveMediaBuyAction, ActionProposal, MediaBuyAction, MediaBuyTask, ProposalChangeTerm, ProductActionTemplate, MediaBuyStatus } from './action-types';
|
|
2
|
+
import type { SLAWindow } from './types';
|
|
3
|
+
export declare const NON_TERMINAL_ACTION_STATUSES: readonly ["pending_creatives", "pending_start", "active", "paused"];
|
|
4
|
+
/** Canonical task alternatives. The live entry chooses among these; mode never selects a task. */
|
|
5
|
+
export declare function mediaBuyActionTasks(action: string): readonly MediaBuyTask[];
|
|
6
|
+
/** The canonical default, only usable with a known current right and validated live entry. */
|
|
7
|
+
export declare function defaultMediaBuyActionTask(action: MediaBuyAction): MediaBuyTask | undefined;
|
|
8
|
+
export declare function actionAllowedStatuses(term: Pick<ProposalChangeTerm, 'action' | 'allowed_statuses'>): MediaBuyStatus[];
|
|
9
|
+
/** Elapsed durations only. Calendar/campaign lengths require seller state and remain unknown. */
|
|
10
|
+
export declare function elapsedDuration(value: unknown): number | undefined;
|
|
11
|
+
/** Runtime may retain or tighten elapsed maxima; absent committed maxima cannot be dropped. */
|
|
12
|
+
export declare function slaWithin(ceiling: SLAWindow | undefined, candidate: SLAWindow | undefined): boolean;
|
|
13
|
+
/** Structural/action checks for this pure helper, not a replacement for proposal schema/digest verification. */
|
|
14
|
+
export declare function changeConstraintIssues(action: MediaBuyAction, constraints: unknown, currency?: string): string[];
|
|
15
|
+
export declare function slaValid(sla: unknown): boolean;
|
|
16
|
+
export declare function changeTermIssues(terms: readonly ProposalChangeTerm[], currency?: string): string[];
|
|
17
|
+
export declare function productTemplateIssues(templates: readonly ProductActionTemplate[], currency?: string): string[];
|
|
18
|
+
/** Match advisory rollups only; accepted rights always retain exact canonical identity. */
|
|
19
|
+
export declare function findProductAction(templates: readonly ProductActionTemplate[] | undefined, action: MediaBuyAction): ProductActionTemplate | undefined;
|
|
20
|
+
export declare function legacyActionSupported(action: string): boolean;
|
|
21
|
+
/** Structural live-entry validation; unknown action/mode strings remain opaque. */
|
|
22
|
+
export declare function liveActionIssues(entries: unknown): string[];
|
|
23
|
+
/** beta.9 introduced change_term_id, seller_managed and condition_unresolved together (upstream a1672f9). */
|
|
24
|
+
export declare function supportsChangeTermIdentity(version: string): boolean;
|
|
25
|
+
/** rc.3 added shared-cap rights and exact live package scope. */
|
|
26
|
+
export declare function supportsRc3Actions(version: string): boolean;
|
|
27
|
+
/** Check wire feature introductions independently of whether an action has commercial terms. */
|
|
28
|
+
export declare function liveActionFitsVersion(entry: LiveMediaBuyAction, version: string): boolean;
|
|
29
|
+
/** Narrow error-details vocabulary is distinct from canonical actions; older served versions stay gated. */
|
|
30
|
+
export declare function actionFitsErrorDetails(action: string, version: string): boolean;
|
|
31
|
+
/** Apply a separately stored accepted snapshot before either decomposition or assessment. */
|
|
32
|
+
export declare function withActionProposal<T extends ActionBuy>(buy: T, options: {
|
|
33
|
+
proposal?: ActionProposal;
|
|
34
|
+
}): T;
|
|
35
|
+
/** Explicit terminal, pending, or unknown package state takes precedence over pause flags. */
|
|
36
|
+
export declare function packageActionStatus(pkg: {
|
|
37
|
+
status?: string;
|
|
38
|
+
canceled?: boolean;
|
|
39
|
+
paused?: boolean;
|
|
40
|
+
} | undefined): string | undefined;
|