@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,6 +1,14 @@
|
|
|
1
1
|
import { AdcpError } from '../../server/decisioning/async-outcome.mjs';
|
|
2
2
|
import type { CreateReportingProducerOptionsV1, ReportingProducerV1 } from './types.mjs';
|
|
3
3
|
export declare function createReportingProducer(options: CreateReportingProducerOptionsV1): ReportingProducerV1;
|
|
4
|
+
/**
|
|
5
|
+
* SHA-256 of the RFC 8785 JCS serialization of an adjustment with
|
|
6
|
+
* `canonical_adjustment_sha256` omitted, per RC3 `core/reporting-adjustment`.
|
|
7
|
+
*
|
|
8
|
+
* Exported so the durable store can recognise a pre-upgrade adjustment row that
|
|
9
|
+
* predates the digest and replay it without a false immutability conflict.
|
|
10
|
+
*/
|
|
11
|
+
export declare function reportingCanonicalAdjustmentSha256V1(wireAdjustmentWithoutDigest: unknown): string;
|
|
4
12
|
/**
|
|
5
13
|
* A configuration named a reserved capability this seller does not implement.
|
|
6
14
|
*
|
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
import { AdcpError } from '../../server/decisioning/async-outcome';
|
|
2
2
|
import type { CreateReportingProducerOptionsV1, ReportingProducerV1 } from './types';
|
|
3
3
|
export declare function createReportingProducer(options: CreateReportingProducerOptionsV1): ReportingProducerV1;
|
|
4
|
+
/**
|
|
5
|
+
* SHA-256 of the RFC 8785 JCS serialization of an adjustment with
|
|
6
|
+
* `canonical_adjustment_sha256` omitted, per RC3 `core/reporting-adjustment`.
|
|
7
|
+
*
|
|
8
|
+
* Exported so the durable store can recognise a pre-upgrade adjustment row that
|
|
9
|
+
* predates the digest and replay it without a false immutability conflict.
|
|
10
|
+
*/
|
|
11
|
+
export declare function reportingCanonicalAdjustmentSha256V1(wireAdjustmentWithoutDigest: unknown): string;
|
|
4
12
|
/**
|
|
5
13
|
* A configuration named a reserved capability this seller does not implement.
|
|
6
14
|
*
|
|
@@ -20,7 +20,8 @@ var producer_exports = {};
|
|
|
20
20
|
__export(producer_exports, {
|
|
21
21
|
UnsupportedReportingFeatureError: () => UnsupportedReportingFeatureError,
|
|
22
22
|
assertSupportedReportingAuthoritativeParty: () => assertSupportedReportingAuthoritativeParty,
|
|
23
|
-
createReportingProducer: () => createReportingProducer
|
|
23
|
+
createReportingProducer: () => createReportingProducer,
|
|
24
|
+
reportingCanonicalAdjustmentSha256V1: () => reportingCanonicalAdjustmentSha256V1
|
|
24
25
|
});
|
|
25
26
|
module.exports = __toCommonJS(producer_exports);
|
|
26
27
|
var import_node_crypto = require("node:crypto");
|
|
@@ -57,14 +58,9 @@ function createReportingProducer(options) {
|
|
|
57
58
|
},
|
|
58
59
|
...input.supersededAt ? { supersededAt: new Date(instant(input.supersededAt, "supersededAt")).toISOString() } : {}
|
|
59
60
|
};
|
|
60
|
-
const offering = requiredOffering(offeringById, normalizedInput.offeringId);
|
|
61
|
-
validateConfigurationAgainstOffering(normalizedInput, offering);
|
|
62
61
|
const existing = (await options.store.listConfigurations(normalizedInput.account.account_id)).filter(
|
|
63
62
|
(value) => value.delivery_config_id === normalizedInput.delivery_config_id
|
|
64
63
|
);
|
|
65
|
-
if (existing.some((value) => value.delivery_config_version > normalizedInput.delivery_config_version)) {
|
|
66
|
-
throw new Error("Reporting configuration version cannot regress");
|
|
67
|
-
}
|
|
68
64
|
const semantic = { ...normalizedInput };
|
|
69
65
|
const semanticFingerprint = prefixedDigest(semantic);
|
|
70
66
|
const predecessorFingerprint = prefixedDigest({ ...input });
|
|
@@ -75,6 +71,10 @@ function createReportingProducer(options) {
|
|
|
75
71
|
}
|
|
76
72
|
return replay;
|
|
77
73
|
}
|
|
74
|
+
validateConfigurationAgainstOffering(normalizedInput, requiredOffering(offeringById, normalizedInput.offeringId));
|
|
75
|
+
if (existing.some((value) => value.delivery_config_version > normalizedInput.delivery_config_version)) {
|
|
76
|
+
throw new Error("Reporting configuration version cannot regress");
|
|
77
|
+
}
|
|
78
78
|
const installedAt = (/* @__PURE__ */ new Date()).toISOString();
|
|
79
79
|
const configuration = {
|
|
80
80
|
...normalizedInput,
|
|
@@ -127,7 +127,14 @@ function createReportingProducer(options) {
|
|
|
127
127
|
await (0, import_lifecycle.reconcileReportingStatusLifecycleV1)({
|
|
128
128
|
store: options.store,
|
|
129
129
|
reporting_obligation_id: written.value.reporting_obligation_id,
|
|
130
|
-
|
|
130
|
+
// A fallback clock, never a pinned cutoff. `now` is this host's
|
|
131
|
+
// instant: a host running fast pinned a cutoff ahead of the
|
|
132
|
+
// database, the watermark was stamped with it, and every
|
|
133
|
+
// database-timestamped change inside that skew — a revocation,
|
|
134
|
+
// a receipt — landed behind the watermark and never made the
|
|
135
|
+
// obligation due again, so a `complete` transition and its
|
|
136
|
+
// webhook stood over state that had already contradicted it.
|
|
137
|
+
now: () => new Date(now),
|
|
131
138
|
subscribers: options.subscribers
|
|
132
139
|
});
|
|
133
140
|
}
|
|
@@ -153,16 +160,35 @@ function createReportingProducer(options) {
|
|
|
153
160
|
throw new RangeError(`settlementGraceMilliseconds must not exceed ${MAX_SETTLEMENT_GRACE_MS}`);
|
|
154
161
|
}
|
|
155
162
|
const owner = `reporting-worker-${(0, import_node_crypto.randomUUID)()}`;
|
|
156
|
-
const counts = { claimed: 0, revisionsCommitted: 0, notReady: 0, failed: 0 };
|
|
163
|
+
const counts = { claimed: 0, revisionsCommitted: 0, notReady: 0, failed: 0, reconcilesDeferred: 0 };
|
|
164
|
+
const reconcileQuietly = async (reporting_obligation_id, nowAt) => {
|
|
165
|
+
try {
|
|
166
|
+
await (0, import_lifecycle.reconcileReportingStatusLifecycleV1)({
|
|
167
|
+
store: options.store,
|
|
168
|
+
reporting_obligation_id,
|
|
169
|
+
// Fallback clock, not a pin; see planObligations.
|
|
170
|
+
now: () => nowAt,
|
|
171
|
+
subscribers: options.subscribers
|
|
172
|
+
});
|
|
173
|
+
} catch (error) {
|
|
174
|
+
if (workerOptions.signal?.aborted) workerOptions.signal.throwIfAborted();
|
|
175
|
+
if (isLeaseLost(error)) throw error;
|
|
176
|
+
counts.reconcilesDeferred += 1;
|
|
177
|
+
}
|
|
178
|
+
};
|
|
157
179
|
await (0, import_lifecycle.retryReportingStatusNotificationsV1)({
|
|
158
180
|
store: options.store,
|
|
159
|
-
|
|
181
|
+
// A fallback, not a pin: a database-backed store uses its own clock,
|
|
182
|
+
// while a simulated-time driver still gets the instant it is advancing.
|
|
183
|
+
fallbackLedgerAsOf: now().toISOString(),
|
|
160
184
|
...workerOptions.account_id ? { account_id: workerOptions.account_id } : {},
|
|
161
185
|
subscribers: options.subscribers
|
|
162
186
|
});
|
|
163
187
|
await (0, import_lifecycle.reconcileReportingStatusDeadlinesV1)({
|
|
164
188
|
store: options.store,
|
|
165
|
-
|
|
189
|
+
// A fallback, not a pin: a database-backed store uses its own clock,
|
|
190
|
+
// while a simulated-time driver still gets the instant it is advancing.
|
|
191
|
+
fallbackLedgerAsOf: now().toISOString(),
|
|
166
192
|
...workerOptions.account_id ? { account_id: workerOptions.account_id } : {},
|
|
167
193
|
subscribers: options.subscribers
|
|
168
194
|
});
|
|
@@ -200,12 +226,7 @@ function createReportingProducer(options) {
|
|
|
200
226
|
obligation.state = nextExisting ? "pending" : "terminal";
|
|
201
227
|
obligation.nextAttemptAt = nextExisting ?? nowValue.toISOString();
|
|
202
228
|
await options.store.updateObligation(obligation, lease);
|
|
203
|
-
await (
|
|
204
|
-
store: options.store,
|
|
205
|
-
reporting_obligation_id: obligation.reporting_obligation_id,
|
|
206
|
-
ledgerAsOf: nowValue.toISOString(),
|
|
207
|
-
subscribers: options.subscribers
|
|
208
|
-
});
|
|
229
|
+
await reconcileQuietly(obligation.reporting_obligation_id, nowValue);
|
|
209
230
|
continue;
|
|
210
231
|
}
|
|
211
232
|
}
|
|
@@ -232,12 +253,7 @@ function createReportingProducer(options) {
|
|
|
232
253
|
await options.store.updateObligation(obligation, lease);
|
|
233
254
|
if (result.error.code === "NOT_READY" || result.error.code === "PARTIAL_RESULT") counts.notReady += 1;
|
|
234
255
|
else counts.failed += 1;
|
|
235
|
-
await (
|
|
236
|
-
store: options.store,
|
|
237
|
-
reporting_obligation_id: obligation.reporting_obligation_id,
|
|
238
|
-
ledgerAsOf: nowValue.toISOString(),
|
|
239
|
-
subscribers: options.subscribers
|
|
240
|
-
});
|
|
256
|
+
await reconcileQuietly(obligation.reporting_obligation_id, nowValue);
|
|
241
257
|
continue;
|
|
242
258
|
}
|
|
243
259
|
const manifest = await (0, import_source.validateReportingSourceExecutionV1)({
|
|
@@ -284,12 +300,7 @@ function createReportingProducer(options) {
|
|
|
284
300
|
obligation.attemptCount += 1;
|
|
285
301
|
await options.store.updateObligation(obligation, lease);
|
|
286
302
|
await options.store.resolveIssue(sourceExecutionIssueId(obligation), nowValue.toISOString());
|
|
287
|
-
await (
|
|
288
|
-
store: options.store,
|
|
289
|
-
reporting_obligation_id: obligation.reporting_obligation_id,
|
|
290
|
-
ledgerAsOf: nowValue.toISOString(),
|
|
291
|
-
subscribers: options.subscribers
|
|
292
|
-
});
|
|
303
|
+
await reconcileQuietly(obligation.reporting_obligation_id, nowValue);
|
|
293
304
|
} catch (error) {
|
|
294
305
|
if (workerOptions.signal?.aborted) workerOptions.signal.throwIfAborted();
|
|
295
306
|
if (isLeaseLost(error)) continue;
|
|
@@ -307,12 +318,7 @@ function createReportingProducer(options) {
|
|
|
307
318
|
lease,
|
|
308
319
|
sourceExecutionIssue(obligation, nowValue.toISOString())
|
|
309
320
|
);
|
|
310
|
-
await (
|
|
311
|
-
store: options.store,
|
|
312
|
-
reporting_obligation_id: obligation.reporting_obligation_id,
|
|
313
|
-
ledgerAsOf: nowValue.toISOString(),
|
|
314
|
-
subscribers: options.subscribers
|
|
315
|
-
});
|
|
321
|
+
await reconcileQuietly(obligation.reporting_obligation_id, nowValue);
|
|
316
322
|
} catch (recoveryError) {
|
|
317
323
|
if (!isLeaseLost(recoveryError)) throw recoveryError;
|
|
318
324
|
}
|
|
@@ -323,13 +329,17 @@ function createReportingProducer(options) {
|
|
|
323
329
|
}
|
|
324
330
|
await (0, import_lifecycle.retryReportingStatusNotificationsV1)({
|
|
325
331
|
store: options.store,
|
|
326
|
-
|
|
332
|
+
// A fallback, not a pin: a database-backed store uses its own clock,
|
|
333
|
+
// while a simulated-time driver still gets the instant it is advancing.
|
|
334
|
+
fallbackLedgerAsOf: now().toISOString(),
|
|
327
335
|
...workerOptions.account_id ? { account_id: workerOptions.account_id } : {},
|
|
328
336
|
subscribers: options.subscribers
|
|
329
337
|
});
|
|
330
338
|
await (0, import_lifecycle.reconcileReportingStatusDeadlinesV1)({
|
|
331
339
|
store: options.store,
|
|
332
|
-
|
|
340
|
+
// A fallback, not a pin: a database-backed store uses its own clock,
|
|
341
|
+
// while a simulated-time driver still gets the instant it is advancing.
|
|
342
|
+
fallbackLedgerAsOf: now().toISOString(),
|
|
333
343
|
...workerOptions.account_id ? { account_id: workerOptions.account_id } : {},
|
|
334
344
|
subscribers: options.subscribers
|
|
335
345
|
});
|
|
@@ -595,7 +605,7 @@ function buildRevision(obligation, manifestReference, manifest, rows, previous)
|
|
|
595
605
|
...previous.at(-1) ? { supersedes_reporting_revision_id: previous.at(-1).reporting_revision_id } : {},
|
|
596
606
|
row_count: rows.length,
|
|
597
607
|
control_totals: controlTotals,
|
|
598
|
-
...obligation.
|
|
608
|
+
...obligation.canonicalization ? {
|
|
599
609
|
canonical_content_digest: {
|
|
600
610
|
algorithm: "sha256",
|
|
601
611
|
value: canonicalRowsSha256(rows, obligation.canonicalization.primaryKeys),
|
|
@@ -650,6 +660,9 @@ function validateManifestFinalityForObligation(obligation, manifest) {
|
|
|
650
660
|
throw new Error("Authoritative source evidence predates the pinned contractual cutoff");
|
|
651
661
|
}
|
|
652
662
|
}
|
|
663
|
+
function reportingCanonicalAdjustmentSha256V1(wireAdjustmentWithoutDigest) {
|
|
664
|
+
return (0, import_node_crypto.createHash)("sha256").update((0, import_jcs.canonicalize)(wireAdjustmentWithoutDigest), "utf8").digest("hex");
|
|
665
|
+
}
|
|
653
666
|
function canonicalRowsSha256(rows, primaryKeys) {
|
|
654
667
|
const encoded = rows.map((row) => {
|
|
655
668
|
const keyValues = primaryKeys.map((key) => {
|
|
@@ -706,6 +719,22 @@ function buildAdjustment(obligation, official, manifestReference, manifest, rows
|
|
|
706
719
|
}
|
|
707
720
|
] : [];
|
|
708
721
|
});
|
|
722
|
+
const wireAdjustmentWithoutDigest = {
|
|
723
|
+
reporting_adjustment_id: adjustmentId,
|
|
724
|
+
adjusts_reporting_revision_id: official.reporting_revision_id,
|
|
725
|
+
reason_code: "source_correction",
|
|
726
|
+
accounting_period: { start: obligation.period.start, end: obligation.period.end },
|
|
727
|
+
control_total_deltas: [
|
|
728
|
+
{
|
|
729
|
+
name: "row_count",
|
|
730
|
+
value: String(rows.length - effectiveRowCount(official.binding.rowCount, previous)),
|
|
731
|
+
value_type: "integer"
|
|
732
|
+
},
|
|
733
|
+
...controlTotalDeltas
|
|
734
|
+
],
|
|
735
|
+
correction_observed_at: manifest.period.observedAt,
|
|
736
|
+
created_at: createdAt
|
|
737
|
+
};
|
|
709
738
|
return {
|
|
710
739
|
reporting_adjustment_id: adjustmentId,
|
|
711
740
|
reporting_obligation_id: obligation.reporting_obligation_id,
|
|
@@ -719,21 +748,17 @@ function buildAdjustment(obligation, official, manifestReference, manifest, rows
|
|
|
719
748
|
dataThrough: manifest.period.dataThrough,
|
|
720
749
|
sourceReadCutoffAt: manifest.period.sourceReadCutoffAt,
|
|
721
750
|
createdAt,
|
|
751
|
+
// `canonical_adjustment_sha256` is optional in RC3 and exists so Reconciled
|
|
752
|
+
// Billing consumers can recompute the digest before accepting or rejecting
|
|
753
|
+
// an adjustment. Emitting it unconditionally changed the wire content — and
|
|
754
|
+
// therefore `adjustmentIdentityFingerprint` — for every Core adopter,
|
|
755
|
+
// including delivery-only feeds that never read it. Gate it on the same
|
|
756
|
+
// pinned canonicalization contract that gates the revision's
|
|
757
|
+
// `canonical_content_digest`, so obligations without one keep byte-identical
|
|
758
|
+
// output across the upgrade.
|
|
722
759
|
wireAdjustment: import_schemas.ReportingAdjustmentSchema.parse({
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
reason_code: "source_correction",
|
|
726
|
-
accounting_period: { start: obligation.period.start, end: obligation.period.end },
|
|
727
|
-
control_total_deltas: [
|
|
728
|
-
{
|
|
729
|
-
name: "row_count",
|
|
730
|
-
value: String(rows.length - effectiveRowCount(official.binding.rowCount, previous)),
|
|
731
|
-
value_type: "integer"
|
|
732
|
-
},
|
|
733
|
-
...controlTotalDeltas
|
|
734
|
-
],
|
|
735
|
-
correction_observed_at: manifest.period.observedAt,
|
|
736
|
-
created_at: createdAt
|
|
760
|
+
...wireAdjustmentWithoutDigest,
|
|
761
|
+
...obligation.canonicalization ? { canonical_adjustment_sha256: reportingCanonicalAdjustmentSha256V1(wireAdjustmentWithoutDigest) } : {}
|
|
737
762
|
})
|
|
738
763
|
};
|
|
739
764
|
}
|
|
@@ -902,6 +927,66 @@ function assertSupportedReportingAuthoritativeParty(configuration) {
|
|
|
902
927
|
function boundedDiagnostic(value) {
|
|
903
928
|
return String(value).replace(/[\r\n\t]+/g, " ").slice(0, 64);
|
|
904
929
|
}
|
|
930
|
+
const OFFSET_HORIZON_MILLISECONDS = 400 * 864e5;
|
|
931
|
+
const MAX_OFFSET_SCAN_MILLISECONDS = 100 * 365 * 864e5;
|
|
932
|
+
function identityDurationMilliseconds(value) {
|
|
933
|
+
try {
|
|
934
|
+
return (0, import_source.reportingIsoDurationMillisecondsV1)(value);
|
|
935
|
+
} catch {
|
|
936
|
+
return void 0;
|
|
937
|
+
}
|
|
938
|
+
}
|
|
939
|
+
function assertScheduleIdentityMatchesBoundaries(schedule, sourceTimezone, requiredFinality) {
|
|
940
|
+
if (schedule.periodDuration !== void 0) {
|
|
941
|
+
if (identityDurationMilliseconds(schedule.periodDuration) !== schedule.periodMilliseconds) {
|
|
942
|
+
throw new Error("Reporting periodDuration does not describe the configured period boundaries");
|
|
943
|
+
}
|
|
944
|
+
}
|
|
945
|
+
if (schedule.deliverySlaDuration !== void 0) {
|
|
946
|
+
const expectedOffset = requiredFinality === "official" ? schedule.officialAfterMilliseconds ?? schedule.deliverySlaMilliseconds : schedule.deliverySlaMilliseconds;
|
|
947
|
+
if (identityDurationMilliseconds(schedule.deliverySlaDuration) !== expectedOffset) {
|
|
948
|
+
throw new Error("Reporting deliverySlaDuration does not describe the offset its obligations expect");
|
|
949
|
+
}
|
|
950
|
+
}
|
|
951
|
+
if (schedule.alignment === void 0) {
|
|
952
|
+
if (schedule.periodTimezone !== void 0) {
|
|
953
|
+
throw new Error("Reporting periodTimezone requires an explicit schedule alignment");
|
|
954
|
+
}
|
|
955
|
+
return;
|
|
956
|
+
}
|
|
957
|
+
if (!["utc", "account_timezone", "source_timezone", "billing_cycle"].includes(schedule.alignment)) {
|
|
958
|
+
throw new Error("Reporting schedule alignment is not a recognized value");
|
|
959
|
+
}
|
|
960
|
+
const carriesTimezone = schedule.alignment === "billing_cycle" || schedule.alignment === "source_timezone";
|
|
961
|
+
if (!carriesTimezone && schedule.periodTimezone !== void 0) {
|
|
962
|
+
throw new Error(`Reporting ${schedule.alignment} alignment must not declare a period timezone`);
|
|
963
|
+
}
|
|
964
|
+
if (carriesTimezone && schedule.periodTimezone !== void 0 && schedule.periodTimezone !== sourceTimezone) {
|
|
965
|
+
throw new Error("Reporting periodTimezone does not match the configured source timezone");
|
|
966
|
+
}
|
|
967
|
+
if (schedule.alignment === "billing_cycle") return;
|
|
968
|
+
if (schedule.alignment === "account_timezone") {
|
|
969
|
+
throw new Error("Reporting account_timezone alignment is not schedulable by this ledger");
|
|
970
|
+
}
|
|
971
|
+
const anchorMs = instant(schedule.anchor, "schedule.anchor");
|
|
972
|
+
const originMs = (0, import_source.reportingScheduleOriginV1)(schedule.alignment, sourceTimezone);
|
|
973
|
+
const offset = anchorMs - originMs;
|
|
974
|
+
const phase = (offset % schedule.periodMilliseconds + schedule.periodMilliseconds) % schedule.periodMilliseconds;
|
|
975
|
+
if (phase !== 0) {
|
|
976
|
+
throw new Error(
|
|
977
|
+
`Reporting ${schedule.alignment} anchor is not on a period boundary derived from its protocol origin`
|
|
978
|
+
);
|
|
979
|
+
}
|
|
980
|
+
const now = Date.now();
|
|
981
|
+
const scanStartMs = Math.max(Math.min(anchorMs, now), now - OFFSET_HORIZON_MILLISECONDS);
|
|
982
|
+
const scanEndMs = Math.max(anchorMs, now) + OFFSET_HORIZON_MILLISECONDS;
|
|
983
|
+
if (scanEndMs - scanStartMs > MAX_OFFSET_SCAN_MILLISECONDS) {
|
|
984
|
+
throw new Error("Reporting configuration anchor is too far from the operational horizon to verify its timezone");
|
|
985
|
+
}
|
|
986
|
+
if ((0, import_source.reportingUtcOffsetChangesV1)(sourceTimezone, scanStartMs, scanEndMs)) {
|
|
987
|
+
throw new Error("Reporting source timezone changes its UTC offset; fixed-length periods cannot express its days");
|
|
988
|
+
}
|
|
989
|
+
}
|
|
905
990
|
function validateConfigurationAgainstOffering(configuration, offering) {
|
|
906
991
|
assertSupportedReportingAuthoritativeParty(configuration);
|
|
907
992
|
positiveInteger(configuration.schedule.periodMilliseconds, "periodMilliseconds");
|
|
@@ -927,6 +1012,11 @@ function validateConfigurationAgainstOffering(configuration, offering) {
|
|
|
927
1012
|
for (const offset of configuration.schedule.restatementMilliseconds ?? []) {
|
|
928
1013
|
nonnegativeInteger(offset, "restatementMilliseconds");
|
|
929
1014
|
}
|
|
1015
|
+
assertScheduleIdentityMatchesBoundaries(
|
|
1016
|
+
configuration.schedule,
|
|
1017
|
+
configuration.sourceTimezone,
|
|
1018
|
+
configuration.requiredFinality
|
|
1019
|
+
);
|
|
930
1020
|
const anchor = instant(configuration.schedule.anchor, "schedule.anchor");
|
|
931
1021
|
if (configuration.supersededAt && instant(configuration.supersededAt, "supersededAt") <= anchor) {
|
|
932
1022
|
throw new Error("Reporting configuration supersession must follow its schedule anchor");
|
|
@@ -970,6 +1060,9 @@ function validateConfigurationAgainstOffering(configuration, offering) {
|
|
|
970
1060
|
throw new Error("Authoritative source offerings require official ledger finality");
|
|
971
1061
|
}
|
|
972
1062
|
if (configuration.feedPurpose === "billing") {
|
|
1063
|
+
if (configuration.requiredFinality !== "official") {
|
|
1064
|
+
throw new Error("Billing reporting requires official ledger finality");
|
|
1065
|
+
}
|
|
973
1066
|
if (!configuration.canonicalization || !/^[A-Za-z0-9_.:-]{1,128}$/.test(configuration.canonicalization.id) || !/^https:\/\//.test(configuration.canonicalization.uri) || !/^[a-f0-9]{64}$/i.test(configuration.canonicalization.sha256) || !configuration.canonicalization.primaryKeys.length) {
|
|
974
1067
|
throw new Error("Billing reporting requires a pinned canonicalization contract");
|
|
975
1068
|
}
|
|
@@ -1058,5 +1151,6 @@ function isLeaseLost(value) {
|
|
|
1058
1151
|
0 && (module.exports = {
|
|
1059
1152
|
UnsupportedReportingFeatureError,
|
|
1060
1153
|
assertSupportedReportingAuthoritativeParty,
|
|
1061
|
-
createReportingProducer
|
|
1154
|
+
createReportingProducer,
|
|
1155
|
+
reportingCanonicalAdjustmentSha256V1
|
|
1062
1156
|
});
|