@adcp/sdk 13.0.0-rc.7 → 13.0.0-rc.9
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/ADCP_VERSION +1 -1
- package/bin/adcp.js +29 -0
- package/compliance/cache/{3.1.10.previous/protocols → 3.1.11/domains}/media-buy/scenarios/creative_fate_after_cancellation.yaml +46 -24
- package/compliance/cache/{3.1.10 → 3.1.11}/index.json +3 -3
- package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/creative_fate_after_cancellation.yaml +46 -24
- package/compliance/cache/{3.1.10 → 3.1.11}/universal/storyboard-schema.yaml +19 -6
- package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/creative_fate_after_cancellation.yaml +46 -24
- package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/index.json +3 -3
- package/compliance/cache/{3.1.10/domains → 3.1.11.previous/protocols}/media-buy/scenarios/creative_fate_after_cancellation.yaml +46 -24
- package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/universal/storyboard-schema.yaml +19 -6
- package/dist/lib/adapters/roster-account-store.d.mts +9 -8
- package/dist/lib/adapters/roster-account-store.d.ts +9 -8
- package/dist/lib/adapters/roster-account-store.d.ts.map +1 -1
- package/dist/lib/adapters/roster-account-store.js +2 -1
- package/dist/lib/adapters/roster-account-store.js.map +1 -1
- package/dist/lib/adapters/roster-account-store.mjs +2 -1
- package/dist/lib/adapters/roster-account-store.mjs.map +1 -1
- package/dist/lib/auth/oauth/ClientCredentialsFlow.d.mts +2 -0
- package/dist/lib/auth/oauth/ClientCredentialsFlow.d.ts +2 -0
- package/dist/lib/auth/oauth/ClientCredentialsFlow.d.ts.map +1 -1
- package/dist/lib/auth/oauth/ClientCredentialsFlow.js +69 -24
- package/dist/lib/auth/oauth/ClientCredentialsFlow.js.map +1 -1
- package/dist/lib/auth/oauth/ClientCredentialsFlow.mjs +69 -24
- package/dist/lib/auth/oauth/ClientCredentialsFlow.mjs.map +1 -1
- package/dist/lib/auth/oauth/authorization-required.d.mts +3 -0
- package/dist/lib/auth/oauth/authorization-required.d.ts +3 -0
- package/dist/lib/auth/oauth/authorization-required.d.ts.map +1 -1
- package/dist/lib/auth/oauth/authorization-required.js +37 -7
- package/dist/lib/auth/oauth/authorization-required.js.map +1 -1
- package/dist/lib/auth/oauth/authorization-required.mjs +37 -7
- package/dist/lib/auth/oauth/authorization-required.mjs.map +1 -1
- package/dist/lib/auth/oauth/discovery.d.mts +2 -0
- package/dist/lib/auth/oauth/discovery.d.ts +2 -0
- package/dist/lib/auth/oauth/discovery.d.ts.map +1 -1
- package/dist/lib/auth/oauth/discovery.js +7 -5
- package/dist/lib/auth/oauth/discovery.js.map +1 -1
- package/dist/lib/auth/oauth/discovery.mjs +7 -5
- package/dist/lib/auth/oauth/discovery.mjs.map +1 -1
- package/dist/lib/core/AgentClient.d.ts.map +1 -1
- package/dist/lib/core/ConversationTypes.d.mts +6 -2
- package/dist/lib/core/ConversationTypes.d.ts +6 -2
- package/dist/lib/core/ConversationTypes.d.ts.map +1 -1
- package/dist/lib/core/ConversationTypes.js.map +1 -1
- package/dist/lib/core/GovernanceMiddleware.d.mts +3 -3
- package/dist/lib/core/GovernanceMiddleware.d.ts +3 -3
- package/dist/lib/core/GovernanceMiddleware.d.ts.map +1 -1
- package/dist/lib/core/GovernanceMiddleware.js +8 -4
- package/dist/lib/core/GovernanceMiddleware.js.map +1 -1
- package/dist/lib/core/GovernanceMiddleware.mjs +8 -4
- package/dist/lib/core/GovernanceMiddleware.mjs.map +1 -1
- package/dist/lib/core/SingleAgentClient.d.mts +12 -1
- package/dist/lib/core/SingleAgentClient.d.ts +12 -1
- package/dist/lib/core/SingleAgentClient.d.ts.map +1 -1
- package/dist/lib/core/SingleAgentClient.js +89 -12
- package/dist/lib/core/SingleAgentClient.js.map +1 -1
- package/dist/lib/core/SingleAgentClient.mjs +89 -12
- package/dist/lib/core/SingleAgentClient.mjs.map +1 -1
- package/dist/lib/core/TaskExecutor.d.mts +2 -4
- package/dist/lib/core/TaskExecutor.d.ts +2 -4
- package/dist/lib/core/TaskExecutor.d.ts.map +1 -1
- package/dist/lib/core/TaskExecutor.js +90 -14
- package/dist/lib/core/TaskExecutor.js.map +1 -1
- package/dist/lib/core/TaskExecutor.mjs +95 -14
- package/dist/lib/core/TaskExecutor.mjs.map +1 -1
- package/dist/lib/core/task-deadline.d.mts +20 -0
- package/dist/lib/core/task-deadline.d.ts +21 -0
- package/dist/lib/core/task-deadline.d.ts.map +1 -0
- package/dist/lib/core/task-deadline.js +74 -0
- package/dist/lib/core/task-deadline.js.map +1 -0
- package/dist/lib/core/task-deadline.mjs +47 -0
- package/dist/lib/core/task-deadline.mjs.map +1 -0
- package/dist/lib/errors/index.d.mts +11 -0
- package/dist/lib/errors/index.d.ts +11 -0
- package/dist/lib/errors/index.d.ts.map +1 -1
- package/dist/lib/errors/index.js +6 -0
- package/dist/lib/errors/index.js.map +1 -1
- package/dist/lib/errors/index.mjs +6 -0
- package/dist/lib/errors/index.mjs.map +1 -1
- package/dist/lib/net/address-guards.d.ts.map +1 -1
- package/dist/lib/net/address-guards.js +6 -0
- package/dist/lib/net/address-guards.js.map +1 -1
- package/dist/lib/net/address-guards.mjs +6 -0
- package/dist/lib/net/address-guards.mjs.map +1 -1
- package/dist/lib/net/ssrf-fetch.d.ts.map +1 -1
- package/dist/lib/net/ssrf-fetch.js +70 -46
- package/dist/lib/net/ssrf-fetch.js.map +1 -1
- package/dist/lib/net/ssrf-fetch.mjs +70 -46
- package/dist/lib/net/ssrf-fetch.mjs.map +1 -1
- package/dist/lib/protocols/abort.d.mts +3 -1
- package/dist/lib/protocols/abort.d.ts +3 -1
- package/dist/lib/protocols/abort.d.ts.map +1 -1
- package/dist/lib/protocols/abort.js +19 -17
- package/dist/lib/protocols/abort.js.map +1 -1
- package/dist/lib/protocols/abort.mjs +19 -17
- package/dist/lib/protocols/abort.mjs.map +1 -1
- package/dist/lib/protocols/index.d.ts.map +1 -1
- package/dist/lib/protocols/index.js +13 -10
- package/dist/lib/protocols/index.js.map +1 -1
- package/dist/lib/protocols/index.mjs +13 -10
- package/dist/lib/protocols/index.mjs.map +1 -1
- package/dist/lib/protocols/mcp.d.ts.map +1 -1
- package/dist/lib/protocols/mcp.js +8 -7
- package/dist/lib/protocols/mcp.js.map +1 -1
- package/dist/lib/protocols/mcp.mjs +8 -7
- package/dist/lib/protocols/mcp.mjs.map +1 -1
- package/dist/lib/schemas-data/3.1/a2ui/bound-value.json +1 -1
- package/dist/lib/schemas-data/3.1/a2ui/component.json +1 -1
- package/dist/lib/schemas-data/3.1/a2ui/si-catalog.json +25 -25
- package/dist/lib/schemas-data/3.1/a2ui/surface.json +2 -2
- package/dist/lib/schemas-data/3.1/a2ui/user-action.json +1 -1
- package/dist/lib/schemas-data/3.1/aao/agent-publishers.json +1 -1
- package/dist/lib/schemas-data/3.1/account/get-account-financials-request.json +6 -6
- package/dist/lib/schemas-data/3.1/account/get-account-financials-response.json +12 -12
- package/dist/lib/schemas-data/3.1/account/list-accounts-request.json +6 -6
- package/dist/lib/schemas-data/3.1/account/list-accounts-response.json +8 -8
- package/dist/lib/schemas-data/3.1/account/report-usage-request.json +6 -6
- package/dist/lib/schemas-data/3.1/account/report-usage-response.json +6 -6
- package/dist/lib/schemas-data/3.1/account/sync-accounts-request.json +12 -12
- package/dist/lib/schemas-data/3.1/account/sync-accounts-response.json +16 -16
- package/dist/lib/schemas-data/3.1/account/sync-governance-request.json +6 -6
- package/dist/lib/schemas-data/3.1/account/sync-governance-response.json +10 -10
- package/dist/lib/schemas-data/3.1/adagents.json +29 -29
- package/dist/lib/schemas-data/3.1/brand/acquire-rights-request.json +10 -10
- package/dist/lib/schemas-data/3.1/brand/acquire-rights-response.json +16 -16
- package/dist/lib/schemas-data/3.1/brand/creative-approval-request.json +5 -5
- package/dist/lib/schemas-data/3.1/brand/creative-approval-response.json +12 -12
- package/dist/lib/schemas-data/3.1/brand/get-brand-identity-request.json +4 -4
- package/dist/lib/schemas-data/3.1/brand/get-brand-identity-response.json +10 -10
- package/dist/lib/schemas-data/3.1/brand/get-rights-request.json +8 -8
- package/dist/lib/schemas-data/3.1/brand/get-rights-response.json +11 -11
- package/dist/lib/schemas-data/3.1/brand/revocation-notification.json +4 -4
- package/dist/lib/schemas-data/3.1/brand/rights-pricing-option.json +5 -5
- package/dist/lib/schemas-data/3.1/brand/rights-terms.json +3 -3
- package/dist/lib/schemas-data/3.1/brand/search-brands-request.json +6 -6
- package/dist/lib/schemas-data/3.1/brand/search-brands-response.json +11 -11
- package/dist/lib/schemas-data/3.1/brand/update-rights-request.json +6 -6
- package/dist/lib/schemas-data/3.1/brand/update-rights-response.json +11 -11
- package/dist/lib/schemas-data/3.1/brand/verification-status.json +1 -1
- package/dist/lib/schemas-data/3.1/brand/verify-brand-claim-request.json +2 -2
- package/dist/lib/schemas-data/3.1/brand/verify-brand-claim-response.json +13 -13
- package/dist/lib/schemas-data/3.1/brand/verify-brand-claims-request.json +2 -2
- package/dist/lib/schemas-data/3.1/brand/verify-brand-claims-response.json +13 -13
- package/dist/lib/schemas-data/3.1/brand.json +21 -21
- package/dist/lib/schemas-data/3.1/bundled/content-standards/calibrate-content-request.json +12 -12
- package/dist/lib/schemas-data/3.1/bundled/content-standards/calibrate-content-response.json +12 -12
- package/dist/lib/schemas-data/3.1/bundled/content-standards/create-content-standards-request.json +16 -16
- package/dist/lib/schemas-data/3.1/bundled/content-standards/create-content-standards-response.json +10 -10
- package/dist/lib/schemas-data/3.1/bundled/content-standards/get-content-standards-request.json +5 -5
- package/dist/lib/schemas-data/3.1/bundled/content-standards/get-content-standards-response.json +23 -23
- package/dist/lib/schemas-data/3.1/bundled/content-standards/get-media-buy-artifacts-request.json +16 -16
- package/dist/lib/schemas-data/3.1/bundled/content-standards/get-media-buy-artifacts-response.json +18 -18
- package/dist/lib/schemas-data/3.1/bundled/content-standards/list-content-standards-request.json +7 -7
- package/dist/lib/schemas-data/3.1/bundled/content-standards/list-content-standards-response.json +24 -24
- package/dist/lib/schemas-data/3.1/bundled/content-standards/update-content-standards-request.json +16 -16
- package/dist/lib/schemas-data/3.1/bundled/content-standards/update-content-standards-response.json +10 -10
- package/dist/lib/schemas-data/3.1/bundled/content-standards/validate-content-delivery-request.json +12 -12
- package/dist/lib/schemas-data/3.1/bundled/content-standards/validate-content-delivery-response.json +12 -12
- package/dist/lib/schemas-data/3.1/bundled/core/tasks-get-request.json +16 -16
- package/dist/lib/schemas-data/3.1/bundled/core/tasks-get-response.json +181 -181
- package/dist/lib/schemas-data/3.1/bundled/core/tasks-list-request.json +21 -21
- package/dist/lib/schemas-data/3.1/bundled/core/tasks-list-response.json +11 -11
- package/dist/lib/schemas-data/3.1/bundled/creative/get-creative-delivery-request.json +17 -17
- package/dist/lib/schemas-data/3.1/bundled/creative/get-creative-delivery-response.json +56 -56
- package/dist/lib/schemas-data/3.1/bundled/creative/get-creative-features-request.json +44 -44
- package/dist/lib/schemas-data/3.1/bundled/creative/get-creative-features-response.json +13 -13
- package/dist/lib/schemas-data/3.1/bundled/creative/list-creative-formats-request.json +16 -16
- package/dist/lib/schemas-data/3.1/bundled/creative/list-creative-formats-response.json +48 -48
- package/dist/lib/schemas-data/3.1/bundled/creative/list-creatives-request.json +17 -17
- package/dist/lib/schemas-data/3.1/bundled/creative/list-creatives-response.json +58 -58
- package/dist/lib/schemas-data/3.1/bundled/creative/list-transformers-request.json +18 -18
- package/dist/lib/schemas-data/3.1/bundled/creative/list-transformers-response.json +16 -16
- package/dist/lib/schemas-data/3.1/bundled/creative/preview-creative-request.json +44 -44
- package/dist/lib/schemas-data/3.1/bundled/creative/preview-creative-response.json +50 -50
- package/dist/lib/schemas-data/3.1/bundled/creative/sync-creatives-request.json +46 -46
- package/dist/lib/schemas-data/3.1/bundled/creative/sync-creatives-response.json +27 -27
- package/dist/lib/schemas-data/3.1/bundled/creative/validate-input-request.json +42 -42
- package/dist/lib/schemas-data/3.1/bundled/creative/validate-input-response.json +10 -10
- package/dist/lib/schemas-data/3.1/bundled/media-buy/build-creative-request.json +53 -53
- package/dist/lib/schemas-data/3.1/bundled/media-buy/build-creative-response.json +54 -54
- package/dist/lib/schemas-data/3.1/bundled/media-buy/create-media-buy-request.json +83 -83
- package/dist/lib/schemas-data/3.1/bundled/media-buy/create-media-buy-response.json +77 -77
- package/dist/lib/schemas-data/3.1/bundled/media-buy/get-media-buy-delivery-request.json +25 -25
- package/dist/lib/schemas-data/3.1/bundled/media-buy/get-media-buy-delivery-response.json +40 -40
- package/dist/lib/schemas-data/3.1/bundled/media-buy/get-media-buys-request.json +18 -18
- package/dist/lib/schemas-data/3.1/bundled/media-buy/get-media-buys-response.json +65 -65
- package/dist/lib/schemas-data/3.1/bundled/media-buy/get-products-request.json +49 -49
- package/dist/lib/schemas-data/3.1/bundled/media-buy/get-products-response.json +99 -99
- package/dist/lib/schemas-data/3.1/bundled/media-buy/list-creative-formats-request.json +12 -12
- package/dist/lib/schemas-data/3.1/bundled/media-buy/list-creative-formats-response.json +48 -48
- package/dist/lib/schemas-data/3.1/bundled/media-buy/log-event-request.json +12 -12
- package/dist/lib/schemas-data/3.1/bundled/media-buy/log-event-response.json +10 -10
- package/dist/lib/schemas-data/3.1/bundled/media-buy/package-request.json +79 -79
- package/dist/lib/schemas-data/3.1/bundled/media-buy/provide-performance-feedback-request.json +8 -8
- package/dist/lib/schemas-data/3.1/bundled/media-buy/provide-performance-feedback-response.json +10 -10
- package/dist/lib/schemas-data/3.1/bundled/media-buy/sync-audiences-request.json +18 -18
- package/dist/lib/schemas-data/3.1/bundled/media-buy/sync-audiences-response.json +12 -12
- package/dist/lib/schemas-data/3.1/bundled/media-buy/sync-catalogs-request.json +26 -26
- package/dist/lib/schemas-data/3.1/bundled/media-buy/sync-catalogs-response.json +12 -12
- package/dist/lib/schemas-data/3.1/bundled/media-buy/sync-event-sources-request.json +19 -19
- package/dist/lib/schemas-data/3.1/bundled/media-buy/sync-event-sources-response.json +16 -16
- package/dist/lib/schemas-data/3.1/bundled/media-buy/update-media-buy-request.json +79 -79
- package/dist/lib/schemas-data/3.1/bundled/media-buy/update-media-buy-response.json +71 -71
- package/dist/lib/schemas-data/3.1/bundled/property/create-property-list-request.json +18 -18
- package/dist/lib/schemas-data/3.1/bundled/property/create-property-list-response.json +26 -26
- package/dist/lib/schemas-data/3.1/bundled/property/delete-property-list-request.json +16 -16
- package/dist/lib/schemas-data/3.1/bundled/property/delete-property-list-response.json +10 -10
- package/dist/lib/schemas-data/3.1/bundled/property/get-property-list-request.json +16 -16
- package/dist/lib/schemas-data/3.1/bundled/property/get-property-list-response.json +27 -27
- package/dist/lib/schemas-data/3.1/bundled/property/list-property-lists-request.json +17 -17
- package/dist/lib/schemas-data/3.1/bundled/property/list-property-lists-response.json +27 -27
- package/dist/lib/schemas-data/3.1/bundled/property/update-property-list-request.json +18 -18
- package/dist/lib/schemas-data/3.1/bundled/property/update-property-list-response.json +26 -26
- package/dist/lib/schemas-data/3.1/bundled/property/validate-property-delivery-request.json +19 -19
- package/dist/lib/schemas-data/3.1/bundled/property/validate-property-delivery-response.json +15 -15
- package/dist/lib/schemas-data/3.1/bundled/protocol/get-adcp-capabilities-request.json +5 -5
- package/dist/lib/schemas-data/3.1/bundled/protocol/get-adcp-capabilities-response.json +35 -35
- package/dist/lib/schemas-data/3.1/bundled/protocol/get-task-status-request.json +16 -16
- package/dist/lib/schemas-data/3.1/bundled/protocol/get-task-status-response.json +181 -181
- package/dist/lib/schemas-data/3.1/bundled/protocol/list-tasks-request.json +21 -21
- package/dist/lib/schemas-data/3.1/bundled/protocol/list-tasks-response.json +11 -11
- package/dist/lib/schemas-data/3.1/bundled/signals/activate-signal-request.json +17 -17
- package/dist/lib/schemas-data/3.1/bundled/signals/activate-signal-response.json +12 -12
- package/dist/lib/schemas-data/3.1/bundled/signals/get-signals-request.json +24 -24
- package/dist/lib/schemas-data/3.1/bundled/signals/get-signals-response.json +53 -53
- package/dist/lib/schemas-data/3.1/bundled/sponsored-intelligence/si-get-offering-request.json +5 -5
- package/dist/lib/schemas-data/3.1/bundled/sponsored-intelligence/si-get-offering-response.json +23 -23
- package/dist/lib/schemas-data/3.1/bundled/sponsored-intelligence/si-initiate-session-request.json +18 -18
- package/dist/lib/schemas-data/3.1/bundled/sponsored-intelligence/si-initiate-session-response.json +25 -25
- package/dist/lib/schemas-data/3.1/bundled/sponsored-intelligence/si-send-message-request.json +16 -16
- package/dist/lib/schemas-data/3.1/bundled/sponsored-intelligence/si-send-message-response.json +26 -26
- package/dist/lib/schemas-data/3.1/bundled/sponsored-intelligence/si-terminate-session-request.json +5 -5
- package/dist/lib/schemas-data/3.1/bundled/sponsored-intelligence/si-terminate-session-response.json +11 -11
- package/dist/lib/schemas-data/3.1/collection/base-collection-source.json +3 -3
- package/dist/lib/schemas-data/3.1/collection/collection-list-changed-webhook.json +2 -2
- package/dist/lib/schemas-data/3.1/collection/collection-list-filters.json +7 -7
- package/dist/lib/schemas-data/3.1/collection/collection-list.json +5 -5
- package/dist/lib/schemas-data/3.1/collection/create-collection-list-request.json +8 -8
- package/dist/lib/schemas-data/3.1/collection/create-collection-list-response.json +6 -6
- package/dist/lib/schemas-data/3.1/collection/delete-collection-list-request.json +5 -5
- package/dist/lib/schemas-data/3.1/collection/delete-collection-list-response.json +5 -5
- package/dist/lib/schemas-data/3.1/collection/get-collection-list-request.json +5 -5
- package/dist/lib/schemas-data/3.1/collection/get-collection-list-response.json +12 -12
- package/dist/lib/schemas-data/3.1/collection/list-collection-lists-request.json +6 -6
- package/dist/lib/schemas-data/3.1/collection/list-collection-lists-response.json +7 -7
- package/dist/lib/schemas-data/3.1/collection/update-collection-list-request.json +8 -8
- package/dist/lib/schemas-data/3.1/collection/update-collection-list-response.json +6 -6
- package/dist/lib/schemas-data/3.1/content-standards/artifact-webhook-payload.json +3 -3
- package/dist/lib/schemas-data/3.1/content-standards/artifact.json +7 -7
- package/dist/lib/schemas-data/3.1/content-standards/calibrate-content-request.json +5 -5
- package/dist/lib/schemas-data/3.1/content-standards/calibrate-content-response.json +10 -10
- package/dist/lib/schemas-data/3.1/content-standards/content-standards.json +7 -7
- package/dist/lib/schemas-data/3.1/content-standards/create-content-standards-request.json +8 -8
- package/dist/lib/schemas-data/3.1/content-standards/create-content-standards-response.json +8 -8
- package/dist/lib/schemas-data/3.1/content-standards/get-content-standards-request.json +4 -4
- package/dist/lib/schemas-data/3.1/content-standards/get-content-standards-response.json +9 -9
- package/dist/lib/schemas-data/3.1/content-standards/get-media-buy-artifacts-request.json +5 -5
- package/dist/lib/schemas-data/3.1/content-standards/get-media-buy-artifacts-response.json +10 -10
- package/dist/lib/schemas-data/3.1/content-standards/list-content-standards-request.json +6 -6
- package/dist/lib/schemas-data/3.1/content-standards/list-content-standards-response.json +10 -10
- package/dist/lib/schemas-data/3.1/content-standards/update-content-standards-request.json +8 -8
- package/dist/lib/schemas-data/3.1/content-standards/update-content-standards-response.json +8 -8
- package/dist/lib/schemas-data/3.1/content-standards/validate-content-delivery-request.json +5 -5
- package/dist/lib/schemas-data/3.1/content-standards/validate-content-delivery-response.json +10 -10
- package/dist/lib/schemas-data/3.1/core/account-authorization.json +1 -1
- package/dist/lib/schemas-data/3.1/core/account-ref.json +2 -2
- package/dist/lib/schemas-data/3.1/core/account-with-authorization.json +3 -3
- package/dist/lib/schemas-data/3.1/core/account.json +10 -10
- package/dist/lib/schemas-data/3.1/core/activation-key.json +1 -1
- package/dist/lib/schemas-data/3.1/core/ad-inventory-config.json +1 -1
- package/dist/lib/schemas-data/3.1/core/agent-encryption-key.json +1 -1
- package/dist/lib/schemas-data/3.1/core/agent-signing-key.json +1 -1
- package/dist/lib/schemas-data/3.1/core/app-item.json +4 -4
- package/dist/lib/schemas-data/3.1/core/asset-group-vocabulary.json +1 -1
- package/dist/lib/schemas-data/3.1/core/assets/asset-union.json +21 -21
- package/dist/lib/schemas-data/3.1/core/assets/audio-asset.json +3 -3
- package/dist/lib/schemas-data/3.1/core/assets/brief-asset.json +2 -2
- package/dist/lib/schemas-data/3.1/core/assets/card-asset.json +6 -6
- package/dist/lib/schemas-data/3.1/core/assets/catalog-asset.json +2 -2
- package/dist/lib/schemas-data/3.1/core/assets/css-asset.json +2 -2
- package/dist/lib/schemas-data/3.1/core/assets/daast-asset.json +4 -4
- package/dist/lib/schemas-data/3.1/core/assets/daast-tracker-asset.json +3 -3
- package/dist/lib/schemas-data/3.1/core/assets/html-asset.json +2 -2
- package/dist/lib/schemas-data/3.1/core/assets/image-asset.json +2 -2
- package/dist/lib/schemas-data/3.1/core/assets/javascript-asset.json +3 -3
- package/dist/lib/schemas-data/3.1/core/assets/markdown-asset.json +2 -2
- package/dist/lib/schemas-data/3.1/core/assets/pixel-tracker-asset.json +2 -2
- package/dist/lib/schemas-data/3.1/core/assets/published-post-asset.json +2 -2
- package/dist/lib/schemas-data/3.1/core/assets/text-asset.json +2 -2
- package/dist/lib/schemas-data/3.1/core/assets/url-asset.json +3 -3
- package/dist/lib/schemas-data/3.1/core/assets/vast-asset.json +4 -4
- package/dist/lib/schemas-data/3.1/core/assets/vast-tracker-asset.json +3 -3
- package/dist/lib/schemas-data/3.1/core/assets/video-asset.json +7 -7
- package/dist/lib/schemas-data/3.1/core/assets/webhook-asset.json +7 -7
- package/dist/lib/schemas-data/3.1/core/assets/zip-asset.json +2 -2
- package/dist/lib/schemas-data/3.1/core/async-response-data.json +29 -29
- package/dist/lib/schemas-data/3.1/core/async-response-refs/creative/sync-creatives-async-response-input-required.json +3 -3
- package/dist/lib/schemas-data/3.1/core/async-response-refs/creative/sync-creatives-async-response-submitted.json +4 -4
- package/dist/lib/schemas-data/3.1/core/async-response-refs/creative/sync-creatives-async-response-working.json +3 -3
- package/dist/lib/schemas-data/3.1/core/async-response-refs/media-buy/build-creative-async-response-input-required.json +4 -4
- package/dist/lib/schemas-data/3.1/core/async-response-refs/media-buy/build-creative-async-response-submitted.json +4 -4
- package/dist/lib/schemas-data/3.1/core/async-response-refs/media-buy/build-creative-async-response-working.json +3 -3
- package/dist/lib/schemas-data/3.1/core/async-response-refs/media-buy/create-media-buy-async-response-input-required.json +4 -4
- package/dist/lib/schemas-data/3.1/core/async-response-refs/media-buy/create-media-buy-async-response-submitted.json +4 -4
- package/dist/lib/schemas-data/3.1/core/async-response-refs/media-buy/create-media-buy-async-response-working.json +3 -3
- package/dist/lib/schemas-data/3.1/core/async-response-refs/media-buy/get-products-async-response-input-required.json +4 -4
- package/dist/lib/schemas-data/3.1/core/async-response-refs/media-buy/get-products-async-response-submitted.json +4 -4
- package/dist/lib/schemas-data/3.1/core/async-response-refs/media-buy/get-products-async-response-working.json +3 -3
- package/dist/lib/schemas-data/3.1/core/async-response-refs/media-buy/sync-catalogs-async-response-input-required.json +3 -3
- package/dist/lib/schemas-data/3.1/core/async-response-refs/media-buy/sync-catalogs-async-response-submitted.json +4 -4
- package/dist/lib/schemas-data/3.1/core/async-response-refs/media-buy/sync-catalogs-async-response-working.json +3 -3
- package/dist/lib/schemas-data/3.1/core/async-response-refs/media-buy/update-media-buy-async-response-input-required.json +3 -3
- package/dist/lib/schemas-data/3.1/core/async-response-refs/media-buy/update-media-buy-async-response-submitted.json +4 -4
- package/dist/lib/schemas-data/3.1/core/async-response-refs/media-buy/update-media-buy-async-response-working.json +3 -3
- package/dist/lib/schemas-data/3.1/core/async-response-refs/signals/get-signals-async-response-submitted.json +4 -4
- package/dist/lib/schemas-data/3.1/core/async-response-refs/signals/get-signals-async-response-working.json +3 -3
- package/dist/lib/schemas-data/3.1/core/attribution-window.json +4 -4
- package/dist/lib/schemas-data/3.1/core/audience-member.json +3 -3
- package/dist/lib/schemas-data/3.1/core/audience-selector.json +7 -7
- package/dist/lib/schemas-data/3.1/core/authorized-agent-base.json +3 -3
- package/dist/lib/schemas-data/3.1/core/brand-id.json +1 -1
- package/dist/lib/schemas-data/3.1/core/brand-ref.json +3 -3
- package/dist/lib/schemas-data/3.1/core/business-entity.json +2 -2
- package/dist/lib/schemas-data/3.1/core/cancellation-policy.json +2 -2
- package/dist/lib/schemas-data/3.1/core/canonical-format-kind.json +1 -1
- package/dist/lib/schemas-data/3.1/core/canonical-projection-ref.json +3 -3
- package/dist/lib/schemas-data/3.1/core/canonical-projection-slot-override.json +1 -1
- package/dist/lib/schemas-data/3.1/core/catalog-field-mapping.json +2 -2
- package/dist/lib/schemas-data/3.1/core/catalog-item-delivery-metrics.json +3 -3
- package/dist/lib/schemas-data/3.1/core/catalog.json +7 -7
- package/dist/lib/schemas-data/3.1/core/catchment.json +5 -5
- package/dist/lib/schemas-data/3.1/core/collection-distribution.json +2 -2
- package/dist/lib/schemas-data/3.1/core/collection-list-ref.json +1 -1
- package/dist/lib/schemas-data/3.1/core/collection-selector.json +1 -1
- package/dist/lib/schemas-data/3.1/core/collection.json +13 -13
- package/dist/lib/schemas-data/3.1/core/committed-metric.json +9 -9
- package/dist/lib/schemas-data/3.1/core/content-rating.json +2 -2
- package/dist/lib/schemas-data/3.1/core/context.json +1 -1
- package/dist/lib/schemas-data/3.1/core/creative-asset.json +10 -10
- package/dist/lib/schemas-data/3.1/core/creative-assignment.json +2 -2
- package/dist/lib/schemas-data/3.1/core/creative-brief.json +4 -4
- package/dist/lib/schemas-data/3.1/core/creative-consumption.json +1 -1
- package/dist/lib/schemas-data/3.1/core/creative-delivery-metrics.json +2 -2
- package/dist/lib/schemas-data/3.1/core/creative-filters.json +5 -5
- package/dist/lib/schemas-data/3.1/core/creative-item.json +1 -1
- package/dist/lib/schemas-data/3.1/core/creative-manifest.json +11 -11
- package/dist/lib/schemas-data/3.1/core/creative-policy.json +3 -3
- package/dist/lib/schemas-data/3.1/core/creative-variable.json +1 -1
- package/dist/lib/schemas-data/3.1/core/creative-variant.json +5 -5
- package/dist/lib/schemas-data/3.1/core/data-provider-signal-selector.json +1 -1
- package/dist/lib/schemas-data/3.1/core/date-range.json +1 -1
- package/dist/lib/schemas-data/3.1/core/datetime-range.json +1 -1
- package/dist/lib/schemas-data/3.1/core/daypart-target.json +2 -2
- package/dist/lib/schemas-data/3.1/core/deadline-policy.json +1 -1
- package/dist/lib/schemas-data/3.1/core/delivery-forecast.json +7 -7
- package/dist/lib/schemas-data/3.1/core/delivery-metric-aggregate.json +9 -9
- package/dist/lib/schemas-data/3.1/core/delivery-metrics.json +8 -8
- package/dist/lib/schemas-data/3.1/core/deployment.json +3 -3
- package/dist/lib/schemas-data/3.1/core/destination-item.json +4 -4
- package/dist/lib/schemas-data/3.1/core/destination.json +1 -1
- package/dist/lib/schemas-data/3.1/core/diagnostic-issue.json +1 -1
- package/dist/lib/schemas-data/3.1/core/downstream-connection-requirement.json +1 -1
- package/dist/lib/schemas-data/3.1/core/duration.json +1 -1
- package/dist/lib/schemas-data/3.1/core/education-item.json +4 -4
- package/dist/lib/schemas-data/3.1/core/error.json +1 -1
- package/dist/lib/schemas-data/3.1/core/evaluator-spec.json +5 -5
- package/dist/lib/schemas-data/3.1/core/event-custom-data.json +2 -2
- package/dist/lib/schemas-data/3.1/core/event-source-health.json +3 -3
- package/dist/lib/schemas-data/3.1/core/event-surface.json +2 -2
- package/dist/lib/schemas-data/3.1/core/event.json +8 -8
- package/dist/lib/schemas-data/3.1/core/ext.json +1 -1
- package/dist/lib/schemas-data/3.1/core/feature-requirement.json +1 -1
- package/dist/lib/schemas-data/3.1/core/flight-item.json +4 -4
- package/dist/lib/schemas-data/3.1/core/forecast-dimension-audience.json +2 -2
- package/dist/lib/schemas-data/3.1/core/forecast-dimension-device-platform.json +2 -2
- package/dist/lib/schemas-data/3.1/core/forecast-dimension-device-type.json +2 -2
- package/dist/lib/schemas-data/3.1/core/forecast-dimension-geo.json +5 -5
- package/dist/lib/schemas-data/3.1/core/forecast-dimension-placement.json +2 -2
- package/dist/lib/schemas-data/3.1/core/forecast-dimension-signal.json +2 -2
- package/dist/lib/schemas-data/3.1/core/forecast-point-dimensions.json +7 -7
- package/dist/lib/schemas-data/3.1/core/forecast-point.json +27 -27
- package/dist/lib/schemas-data/3.1/core/forecast-range.json +1 -1
- package/dist/lib/schemas-data/3.1/core/forecast-vendor-metric-value.json +5 -5
- package/dist/lib/schemas-data/3.1/core/format-id.json +1 -1
- package/dist/lib/schemas-data/3.1/core/format-option-ref.json +1 -1
- package/dist/lib/schemas-data/3.1/core/format-shape-vocabulary.json +1 -1
- package/dist/lib/schemas-data/3.1/core/format.json +44 -44
- package/dist/lib/schemas-data/3.1/core/frequency-cap.json +4 -4
- package/dist/lib/schemas-data/3.1/core/generation-credential.json +3 -3
- package/dist/lib/schemas-data/3.1/core/geo-breakdown-support.json +3 -3
- package/dist/lib/schemas-data/3.1/core/geo-delivery-metrics.json +6 -6
- package/dist/lib/schemas-data/3.1/core/hotel-item.json +4 -4
- package/dist/lib/schemas-data/3.1/core/identifier.json +2 -2
- package/dist/lib/schemas-data/3.1/core/impairment.json +3 -3
- package/dist/lib/schemas-data/3.1/core/industry-identifier.json +2 -2
- package/dist/lib/schemas-data/3.1/core/insertion-order.json +1 -1
- package/dist/lib/schemas-data/3.1/core/installment-deadlines.json +2 -2
- package/dist/lib/schemas-data/3.1/core/installment.json +9 -9
- package/dist/lib/schemas-data/3.1/core/job-item.json +3 -3
- package/dist/lib/schemas-data/3.1/core/keyword-delivery-metrics.json +3 -3
- package/dist/lib/schemas-data/3.1/core/limited-series.json +1 -1
- package/dist/lib/schemas-data/3.1/core/material-deadline.json +1 -1
- package/dist/lib/schemas-data/3.1/core/mcp-webhook-payload.json +5 -5
- package/dist/lib/schemas-data/3.1/core/measurement-readiness.json +5 -5
- package/dist/lib/schemas-data/3.1/core/measurement-terms.json +3 -3
- package/dist/lib/schemas-data/3.1/core/measurement-window.json +1 -1
- package/dist/lib/schemas-data/3.1/core/media-buy-available-action.json +4 -4
- package/dist/lib/schemas-data/3.1/core/media-buy-features.json +1 -1
- package/dist/lib/schemas-data/3.1/core/media-buy.json +10 -10
- package/dist/lib/schemas-data/3.1/core/missing-metric.json +9 -9
- package/dist/lib/schemas-data/3.1/core/notification-config.json +4 -4
- package/dist/lib/schemas-data/3.1/core/offering-asset-group.json +16 -16
- package/dist/lib/schemas-data/3.1/core/offering.json +5 -5
- package/dist/lib/schemas-data/3.1/core/optimization-goal.json +7 -7
- package/dist/lib/schemas-data/3.1/core/outcome-measurement.json +2 -2
- package/dist/lib/schemas-data/3.1/core/overlay.json +1 -1
- package/dist/lib/schemas-data/3.1/core/package-signal-targeting-group.json +2 -2
- package/dist/lib/schemas-data/3.1/core/package-signal-targeting-groups.json +2 -2
- package/dist/lib/schemas-data/3.1/core/package-signal-targeting.json +3 -3
- package/dist/lib/schemas-data/3.1/core/package.json +17 -17
- package/dist/lib/schemas-data/3.1/core/pagination-request.json +1 -1
- package/dist/lib/schemas-data/3.1/core/pagination-response.json +1 -1
- package/dist/lib/schemas-data/3.1/core/performance-feedback.json +12 -12
- package/dist/lib/schemas-data/3.1/core/performance-standard.json +4 -4
- package/dist/lib/schemas-data/3.1/core/placement-definition.json +10 -10
- package/dist/lib/schemas-data/3.1/core/placement-ref.json +1 -1
- package/dist/lib/schemas-data/3.1/core/placement.json +7 -7
- package/dist/lib/schemas-data/3.1/core/planned-delivery.json +5 -5
- package/dist/lib/schemas-data/3.1/core/platform-extension-ref.json +1 -1
- package/dist/lib/schemas-data/3.1/core/postal-area-support.json +2 -2
- package/dist/lib/schemas-data/3.1/core/postal-area.json +4 -4
- package/dist/lib/schemas-data/3.1/core/postal-country-system.json +2 -2
- package/dist/lib/schemas-data/3.1/core/price.json +1 -1
- package/dist/lib/schemas-data/3.1/core/pricing-option.json +10 -10
- package/dist/lib/schemas-data/3.1/core/product-allocation.json +4 -4
- package/dist/lib/schemas-data/3.1/core/product-allowed-action.json +5 -5
- package/dist/lib/schemas-data/3.1/core/product-filters.json +27 -27
- package/dist/lib/schemas-data/3.1/core/product-format-declaration.json +16 -16
- package/dist/lib/schemas-data/3.1/core/product-signal-targeting-option.json +3 -3
- package/dist/lib/schemas-data/3.1/core/product.json +40 -40
- package/dist/lib/schemas-data/3.1/core/property-id.json +1 -1
- package/dist/lib/schemas-data/3.1/core/property-list-ref.json +1 -1
- package/dist/lib/schemas-data/3.1/core/property-tag.json +1 -1
- package/dist/lib/schemas-data/3.1/core/property.json +6 -6
- package/dist/lib/schemas-data/3.1/core/proposal.json +6 -6
- package/dist/lib/schemas-data/3.1/core/protocol-envelope.json +5 -5
- package/dist/lib/schemas-data/3.1/core/provenance.json +9 -9
- package/dist/lib/schemas-data/3.1/core/publisher-property-selector.json +3 -3
- package/dist/lib/schemas-data/3.1/core/push-notification-config.json +2 -2
- package/dist/lib/schemas-data/3.1/core/real-estate-item.json +4 -4
- package/dist/lib/schemas-data/3.1/core/reference-asset.json +1 -1
- package/dist/lib/schemas-data/3.1/core/registry-event.json +13 -13
- package/dist/lib/schemas-data/3.1/core/registry-feed-response.json +2 -2
- package/dist/lib/schemas-data/3.1/core/reporting-capabilities.json +8 -8
- package/dist/lib/schemas-data/3.1/core/reporting-webhook.json +3 -3
- package/dist/lib/schemas-data/3.1/core/requirements/asset-requirements.json +13 -13
- package/dist/lib/schemas-data/3.1/core/requirements/audio-asset-requirements.json +1 -1
- package/dist/lib/schemas-data/3.1/core/requirements/catalog-field-binding.json +4 -4
- package/dist/lib/schemas-data/3.1/core/requirements/catalog-requirements.json +5 -5
- package/dist/lib/schemas-data/3.1/core/requirements/css-asset-requirements.json +1 -1
- package/dist/lib/schemas-data/3.1/core/requirements/daast-asset-requirements.json +1 -1
- package/dist/lib/schemas-data/3.1/core/requirements/html-asset-requirements.json +1 -1
- package/dist/lib/schemas-data/3.1/core/requirements/image-asset-requirements.json +2 -2
- package/dist/lib/schemas-data/3.1/core/requirements/javascript-asset-requirements.json +1 -1
- package/dist/lib/schemas-data/3.1/core/requirements/markdown-asset-requirements.json +1 -1
- package/dist/lib/schemas-data/3.1/core/requirements/offering-asset-constraint.json +4 -4
- package/dist/lib/schemas-data/3.1/core/requirements/text-asset-requirements.json +1 -1
- package/dist/lib/schemas-data/3.1/core/requirements/url-asset-requirements.json +1 -1
- package/dist/lib/schemas-data/3.1/core/requirements/vast-asset-requirements.json +1 -1
- package/dist/lib/schemas-data/3.1/core/requirements/video-asset-requirements.json +6 -6
- package/dist/lib/schemas-data/3.1/core/requirements/webhook-asset-requirements.json +1 -1
- package/dist/lib/schemas-data/3.1/core/response-payload-jws-envelope.json +1 -1
- package/dist/lib/schemas-data/3.1/core/response.json +1 -1
- package/dist/lib/schemas-data/3.1/core/rights-constraint.json +4 -4
- package/dist/lib/schemas-data/3.1/core/seller-agent-ref.json +1 -1
- package/dist/lib/schemas-data/3.1/core/signal-coverage-forecast.json +5 -5
- package/dist/lib/schemas-data/3.1/core/signal-definition-enrichment.json +4 -4
- package/dist/lib/schemas-data/3.1/core/signal-definition.json +5 -5
- package/dist/lib/schemas-data/3.1/core/signal-filters.json +3 -3
- package/dist/lib/schemas-data/3.1/core/signal-id.json +1 -1
- package/dist/lib/schemas-data/3.1/core/signal-listing.json +4 -4
- package/dist/lib/schemas-data/3.1/core/signal-modeling-disclosure.json +1 -1
- package/dist/lib/schemas-data/3.1/core/signal-pricing-option.json +2 -2
- package/dist/lib/schemas-data/3.1/core/signal-pricing.json +6 -6
- package/dist/lib/schemas-data/3.1/core/signal-ref.json +1 -1
- package/dist/lib/schemas-data/3.1/core/signal-selection-group-rule.json +1 -1
- package/dist/lib/schemas-data/3.1/core/signal-targeting-expression.json +4 -4
- package/dist/lib/schemas-data/3.1/core/signal-targeting-rules.json +2 -2
- package/dist/lib/schemas-data/3.1/core/signal-targeting.json +7 -7
- package/dist/lib/schemas-data/3.1/core/sla-window.json +1 -1
- package/dist/lib/schemas-data/3.1/core/special.json +2 -2
- package/dist/lib/schemas-data/3.1/core/start-timing.json +1 -1
- package/dist/lib/schemas-data/3.1/core/store-item.json +3 -3
- package/dist/lib/schemas-data/3.1/core/talent.json +2 -2
- package/dist/lib/schemas-data/3.1/core/targeting.json +22 -22
- package/dist/lib/schemas-data/3.1/core/tasks-get-request.json +5 -5
- package/dist/lib/schemas-data/3.1/core/tasks-get-response.json +10 -10
- package/dist/lib/schemas-data/3.1/core/tasks-list-request.json +13 -13
- package/dist/lib/schemas-data/3.1/core/tasks-list-response.json +8 -8
- package/dist/lib/schemas-data/3.1/core/transformer-param.json +1 -1
- package/dist/lib/schemas-data/3.1/core/transformer.json +5 -5
- package/dist/lib/schemas-data/3.1/core/truncation-sentinel.json +1 -1
- package/dist/lib/schemas-data/3.1/core/user-match.json +3 -3
- package/dist/lib/schemas-data/3.1/core/vehicle-item.json +4 -4
- package/dist/lib/schemas-data/3.1/core/vendor-metric-id.json +1 -1
- package/dist/lib/schemas-data/3.1/core/vendor-metric-optimization-supported-metric.json +3 -3
- package/dist/lib/schemas-data/3.1/core/vendor-metric-optimization.json +2 -2
- package/dist/lib/schemas-data/3.1/core/vendor-metric-value.json +3 -3
- package/dist/lib/schemas-data/3.1/core/vendor-pricing-option.json +3 -3
- package/dist/lib/schemas-data/3.1/core/version-envelope.json +1 -1
- package/dist/lib/schemas-data/3.1/core/webhook-activity-record.json +3 -3
- package/dist/lib/schemas-data/3.1/core/webhook-challenge-response.json +1 -1
- package/dist/lib/schemas-data/3.1/core/webhook-challenge.json +2 -2
- package/dist/lib/schemas-data/3.1/core/wholesale-feed-event.json +17 -17
- package/dist/lib/schemas-data/3.1/core/wholesale-feed-webhook.json +3 -3
- package/dist/lib/schemas-data/3.1/core/x-entity-types.json +1 -1
- package/dist/lib/schemas-data/3.1/creative/asset-types/index.json +6 -6
- package/dist/lib/schemas-data/3.1/creative/audit-observation.json +2 -2
- package/dist/lib/schemas-data/3.1/creative/creative-feature-result.json +2 -2
- package/dist/lib/schemas-data/3.1/creative/creative-purged-webhook.json +3 -3
- package/dist/lib/schemas-data/3.1/creative/creative-status-changed-webhook.json +4 -4
- package/dist/lib/schemas-data/3.1/creative/get-creative-delivery-request.json +6 -6
- package/dist/lib/schemas-data/3.1/creative/get-creative-delivery-response.json +9 -9
- package/dist/lib/schemas-data/3.1/creative/get-creative-features-request.json +6 -6
- package/dist/lib/schemas-data/3.1/creative/get-creative-features-response.json +11 -11
- package/dist/lib/schemas-data/3.1/creative/list-creative-formats-request.json +13 -13
- package/dist/lib/schemas-data/3.1/creative/list-creative-formats-response.json +9 -9
- package/dist/lib/schemas-data/3.1/creative/list-creatives-request.json +9 -9
- package/dist/lib/schemas-data/3.1/creative/list-creatives-response.json +21 -21
- package/dist/lib/schemas-data/3.1/creative/list-transformers-request.json +8 -8
- package/dist/lib/schemas-data/3.1/creative/list-transformers-response.json +8 -8
- package/dist/lib/schemas-data/3.1/creative/preview-creative-request.json +12 -12
- package/dist/lib/schemas-data/3.1/creative/preview-creative-response.json +14 -14
- package/dist/lib/schemas-data/3.1/creative/preview-render.json +1 -1
- package/dist/lib/schemas-data/3.1/creative/sync-creatives-async-response-input-required.json +3 -3
- package/dist/lib/schemas-data/3.1/creative/sync-creatives-async-response-submitted.json +4 -4
- package/dist/lib/schemas-data/3.1/creative/sync-creatives-async-response-working.json +3 -3
- package/dist/lib/schemas-data/3.1/creative/sync-creatives-request.json +8 -8
- package/dist/lib/schemas-data/3.1/creative/sync-creatives-response.json +15 -15
- package/dist/lib/schemas-data/3.1/creative/validate-input-request.json +4 -4
- package/dist/lib/schemas-data/3.1/creative/validate-input-response.json +4 -4
- package/dist/lib/schemas-data/3.1/creative/validate-input-result.json +1 -1
- package/dist/lib/schemas-data/3.1/creative/video-brief.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/account-scope.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/account-status.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/action-not-allowed-reason.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/action-source.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/adcp-protocol.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/adjustment-kind.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/advertiser-industry.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/age-verification-method.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/assessment-status.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/asset-content-type.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/attestation-claim.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/attribution-methodology.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/attribution-model.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/audience-source.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/audience-status.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/audio-channel-layout.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/audio-distribution-type.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/auth-scheme.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/available-metric.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/billing-party.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/binary-verdict.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/brand-agent-type.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/c2pa-watermark-action.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/canceled-by.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/catalog-action.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/catalog-item-status.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/catalog-type.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/channels.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/cloud-storage-protocol.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/co-branding-requirement.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/collection-cadence.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/collection-kind.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/collection-relationship.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/collection-status.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/completion-source.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/consent-basis.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/content-id-type.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/content-rating-system.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/creative-action.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/creative-agent-capability.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/creative-approval-status.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/creative-event-reason-code.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/creative-identifier-type.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/creative-quality.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/creative-selection-strategy.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/creative-sort-field.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/creative-status.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/daast-tracking-event.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/daast-version.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/day-of-week.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/delegation-authority.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/delivery-type.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/demographic-system.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/derivative-type.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/device-platform.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/device-type.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/digital-source-type.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/dimension-unit.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/disclosure-persistence.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/disclosure-position.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/distance-unit.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/distribution-identifier-type.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/embedded-provenance-method.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/error-code.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/error-scope.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/escalation-severity.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/event-type.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/exclusivity.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/feature-check-status.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/feed-format.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/feedback-source.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/forecast-method.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/forecast-range-unit.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/forecastable-metric.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/format-id-parameter.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/frame-rate-type.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/frequency-cap-scope.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/genre-taxonomy.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/geo-level.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/gop-type.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/governance-decision.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/governance-domain.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/governance-mode.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/governance-phase.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/history-entry-type.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/http-method.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/identifier-types.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/impairment-offline-state.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/impairment-reason-code.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/installment-status.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/javascript-module-type.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/landing-page-requirement.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/legacy-postal-system.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/lift-dimension.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/logo-slot.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/makegood-remedy.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/markdown-flavor.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/match-id-type.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/match-type.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/media-buy-action-mode.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/media-buy-health.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/media-buy-status.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/media-buy-valid-action.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/metric-scope.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/metric-type.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/metro-system.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/moov-atom-position.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/notification-type.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/offering-availability-status.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/outcome-type.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/pacing.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/payment-terms.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/performance-standard-metric.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/policy-category.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/policy-enforcement.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/postal-system.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/preview-output-format.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/pricing-model.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/production-quality.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/property-type.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/proposal-status.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/publisher-identifier-types.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/purchase-type.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/reach-unit.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/reporting-frequency.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/response-type.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/restricted-attribute.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/right-type.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/right-use.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/rights-billing-period.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/scan-type.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/si-session-status.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/signal-catalog-type.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/signal-source.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/signal-value-type.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/snapshot-unavailable-reason.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/social-placement-surface.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/sort-direction.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/sort-metric.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/special-category.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/specialism.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/sponsored-placement-type.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/talent-role.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/task-status.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/task-type.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/transport-mode.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/travel-time-unit.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/uid-type.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/universal-macro.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/update-frequency.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/url-asset-type.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/validation-mode.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/vast-tracking-event.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/vast-version.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/video-placement-type.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/viewability-standard.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/watermark-media-type.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/wcag-level.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/webhook-response-type.json +1 -1
- package/dist/lib/schemas-data/3.1/enums/webhook-security-method.json +1 -1
- package/dist/lib/schemas-data/3.1/error-details/account-setup-required.json +1 -1
- package/dist/lib/schemas-data/3.1/error-details/action-not-allowed.json +4 -4
- package/dist/lib/schemas-data/3.1/error-details/agent-permission-denied.json +1 -1
- package/dist/lib/schemas-data/3.1/error-details/audience-too-small.json +1 -1
- package/dist/lib/schemas-data/3.1/error-details/authorization-required.json +3 -3
- package/dist/lib/schemas-data/3.1/error-details/billing-not-permitted-for-agent.json +3 -3
- package/dist/lib/schemas-data/3.1/error-details/billing-not-supported.json +2 -2
- package/dist/lib/schemas-data/3.1/error-details/budget-too-low.json +1 -1
- package/dist/lib/schemas-data/3.1/error-details/conflict.json +1 -1
- package/dist/lib/schemas-data/3.1/error-details/creative-rejected.json +1 -1
- package/dist/lib/schemas-data/3.1/error-details/policy-violation.json +1 -1
- package/dist/lib/schemas-data/3.1/error-details/rate-limited.json +1 -1
- package/dist/lib/schemas-data/3.1/error-details/stale-response.json +1 -1
- package/dist/lib/schemas-data/3.1/error-details/vendor-error-codes.json +1 -1
- package/dist/lib/schemas-data/3.1/error-details/version-unsupported.json +2 -2
- package/dist/lib/schemas-data/3.1/extensions/extension-meta.json +1 -1
- package/dist/lib/schemas-data/3.1/extensions/index.json +2 -2
- package/dist/lib/schemas-data/3.1/formats/canonical/_base.json +5 -5
- package/dist/lib/schemas-data/3.1/formats/canonical/agent_placement.json +2 -2
- package/dist/lib/schemas-data/3.1/formats/canonical/audio_daast.json +2 -2
- package/dist/lib/schemas-data/3.1/formats/canonical/audio_hosted.json +2 -2
- package/dist/lib/schemas-data/3.1/formats/canonical/display_tag.json +2 -2
- package/dist/lib/schemas-data/3.1/formats/canonical/html5.json +2 -2
- package/dist/lib/schemas-data/3.1/formats/canonical/image.json +2 -2
- package/dist/lib/schemas-data/3.1/formats/canonical/image_carousel.json +2 -2
- package/dist/lib/schemas-data/3.1/formats/canonical/native_in_feed.json +2 -2
- package/dist/lib/schemas-data/3.1/formats/canonical/responsive_creative.json +2 -2
- package/dist/lib/schemas-data/3.1/formats/canonical/sponsored_placement.json +2 -2
- package/dist/lib/schemas-data/3.1/formats/canonical/video_hosted.json +2 -2
- package/dist/lib/schemas-data/3.1/formats/canonical/video_vast.json +2 -2
- package/dist/lib/schemas-data/3.1/governance/attribute-definition.json +1 -1
- package/dist/lib/schemas-data/3.1/governance/audience-constraints.json +3 -3
- package/dist/lib/schemas-data/3.1/governance/check-governance-request.json +8 -8
- package/dist/lib/schemas-data/3.1/governance/check-governance-response.json +7 -7
- package/dist/lib/schemas-data/3.1/governance/get-plan-audit-logs-request.json +5 -5
- package/dist/lib/schemas-data/3.1/governance/get-plan-audit-logs-response.json +11 -11
- package/dist/lib/schemas-data/3.1/governance/policy-category-definition.json +2 -2
- package/dist/lib/schemas-data/3.1/governance/policy-entry.json +6 -6
- package/dist/lib/schemas-data/3.1/governance/policy-ref.json +1 -1
- package/dist/lib/schemas-data/3.1/governance/report-plan-outcome-request.json +7 -7
- package/dist/lib/schemas-data/3.1/governance/report-plan-outcome-response.json +5 -5
- package/dist/lib/schemas-data/3.1/governance/sync-plans-request.json +14 -14
- package/dist/lib/schemas-data/3.1/governance/sync-plans-response.json +6 -6
- package/dist/lib/schemas-data/3.1/index.json +443 -443
- package/dist/lib/schemas-data/3.1/manifest.json +3 -3
- package/dist/lib/schemas-data/3.1/manifest.schema.json +1 -1
- package/dist/lib/schemas-data/3.1/media-buy/build-creative-async-response-input-required.json +4 -4
- package/dist/lib/schemas-data/3.1/media-buy/build-creative-async-response-submitted.json +4 -4
- package/dist/lib/schemas-data/3.1/media-buy/build-creative-async-response-working.json +3 -3
- package/dist/lib/schemas-data/3.1/media-buy/build-creative-request.json +16 -16
- package/dist/lib/schemas-data/3.1/media-buy/build-creative-response.json +35 -35
- package/dist/lib/schemas-data/3.1/media-buy/create-media-buy-async-response-input-required.json +4 -4
- package/dist/lib/schemas-data/3.1/media-buy/create-media-buy-async-response-submitted.json +4 -4
- package/dist/lib/schemas-data/3.1/media-buy/create-media-buy-async-response-working.json +3 -3
- package/dist/lib/schemas-data/3.1/media-buy/create-media-buy-request.json +13 -13
- package/dist/lib/schemas-data/3.1/media-buy/create-media-buy-response.json +19 -19
- package/dist/lib/schemas-data/3.1/media-buy/get-media-buy-delivery-request.json +23 -23
- package/dist/lib/schemas-data/3.1/media-buy/get-media-buy-delivery-response.json +27 -27
- package/dist/lib/schemas-data/3.1/media-buy/get-media-buys-request.json +8 -8
- package/dist/lib/schemas-data/3.1/media-buy/get-media-buys-response.json +30 -30
- package/dist/lib/schemas-data/3.1/media-buy/get-products-async-response-input-required.json +4 -4
- package/dist/lib/schemas-data/3.1/media-buy/get-products-async-response-submitted.json +4 -4
- package/dist/lib/schemas-data/3.1/media-buy/get-products-async-response-working.json +3 -3
- package/dist/lib/schemas-data/3.1/media-buy/get-products-request.json +13 -13
- package/dist/lib/schemas-data/3.1/media-buy/get-products-response.json +10 -10
- package/dist/lib/schemas-data/3.1/media-buy/list-creative-formats-request.json +13 -13
- package/dist/lib/schemas-data/3.1/media-buy/list-creative-formats-response.json +9 -9
- package/dist/lib/schemas-data/3.1/media-buy/log-event-request.json +5 -5
- package/dist/lib/schemas-data/3.1/media-buy/log-event-response.json +8 -8
- package/dist/lib/schemas-data/3.1/media-buy/media-buy-delivery-webhook-result.json +9 -9
- package/dist/lib/schemas-data/3.1/media-buy/package-request.json +23 -23
- package/dist/lib/schemas-data/3.1/media-buy/package-update.json +13 -13
- package/dist/lib/schemas-data/3.1/media-buy/provide-performance-feedback-request.json +7 -7
- package/dist/lib/schemas-data/3.1/media-buy/provide-performance-feedback-response.json +8 -8
- package/dist/lib/schemas-data/3.1/media-buy/sync-audiences-request.json +8 -8
- package/dist/lib/schemas-data/3.1/media-buy/sync-audiences-response.json +14 -14
- package/dist/lib/schemas-data/3.1/media-buy/sync-catalogs-async-response-input-required.json +3 -3
- package/dist/lib/schemas-data/3.1/media-buy/sync-catalogs-async-response-submitted.json +4 -4
- package/dist/lib/schemas-data/3.1/media-buy/sync-catalogs-async-response-working.json +3 -3
- package/dist/lib/schemas-data/3.1/media-buy/sync-catalogs-request.json +8 -8
- package/dist/lib/schemas-data/3.1/media-buy/sync-catalogs-response.json +14 -14
- package/dist/lib/schemas-data/3.1/media-buy/sync-event-sources-request.json +8 -8
- package/dist/lib/schemas-data/3.1/media-buy/sync-event-sources-response.json +14 -14
- package/dist/lib/schemas-data/3.1/media-buy/update-media-buy-async-response-input-required.json +3 -3
- package/dist/lib/schemas-data/3.1/media-buy/update-media-buy-async-response-submitted.json +4 -4
- package/dist/lib/schemas-data/3.1/media-buy/update-media-buy-async-response-working.json +3 -3
- package/dist/lib/schemas-data/3.1/media-buy/update-media-buy-request.json +11 -11
- package/dist/lib/schemas-data/3.1/media-buy/update-media-buy-response.json +17 -17
- package/dist/lib/schemas-data/3.1/pricing-options/cpa-option.json +4 -4
- package/dist/lib/schemas-data/3.1/pricing-options/cpc-option.json +4 -4
- package/dist/lib/schemas-data/3.1/pricing-options/cpcv-option.json +4 -4
- package/dist/lib/schemas-data/3.1/pricing-options/cpm-option.json +4 -4
- package/dist/lib/schemas-data/3.1/pricing-options/cpp-option.json +5 -5
- package/dist/lib/schemas-data/3.1/pricing-options/cpv-option.json +4 -4
- package/dist/lib/schemas-data/3.1/pricing-options/flat-rate-option.json +4 -4
- package/dist/lib/schemas-data/3.1/pricing-options/price-breakdown.json +2 -2
- package/dist/lib/schemas-data/3.1/pricing-options/price-guidance.json +1 -1
- package/dist/lib/schemas-data/3.1/pricing-options/time-option.json +4 -4
- package/dist/lib/schemas-data/3.1/pricing-options/vcpm-option.json +4 -4
- package/dist/lib/schemas-data/3.1/property/authorization-result.json +1 -1
- package/dist/lib/schemas-data/3.1/property/base-property-source.json +4 -4
- package/dist/lib/schemas-data/3.1/property/create-property-list-request.json +8 -8
- package/dist/lib/schemas-data/3.1/property/create-property-list-response.json +6 -6
- package/dist/lib/schemas-data/3.1/property/delete-property-list-request.json +5 -5
- package/dist/lib/schemas-data/3.1/property/delete-property-list-response.json +5 -5
- package/dist/lib/schemas-data/3.1/property/delivery-record.json +3 -3
- package/dist/lib/schemas-data/3.1/property/get-property-list-request.json +5 -5
- package/dist/lib/schemas-data/3.1/property/get-property-list-response.json +9 -9
- package/dist/lib/schemas-data/3.1/property/list-property-lists-request.json +6 -6
- package/dist/lib/schemas-data/3.1/property/list-property-lists-response.json +7 -7
- package/dist/lib/schemas-data/3.1/property/property-error.json +2 -2
- package/dist/lib/schemas-data/3.1/property/property-feature-definition.json +2 -2
- package/dist/lib/schemas-data/3.1/property/property-feature-result.json +4 -4
- package/dist/lib/schemas-data/3.1/property/property-feature-value.json +2 -2
- package/dist/lib/schemas-data/3.1/property/property-feature.json +1 -1
- package/dist/lib/schemas-data/3.1/property/property-list-changed-webhook.json +2 -2
- package/dist/lib/schemas-data/3.1/property/property-list-filters.json +5 -5
- package/dist/lib/schemas-data/3.1/property/property-list.json +6 -6
- package/dist/lib/schemas-data/3.1/property/update-property-list-request.json +8 -8
- package/dist/lib/schemas-data/3.1/property/update-property-list-response.json +6 -6
- package/dist/lib/schemas-data/3.1/property/validate-property-delivery-request.json +6 -6
- package/dist/lib/schemas-data/3.1/property/validate-property-delivery-response.json +6 -6
- package/dist/lib/schemas-data/3.1/property/validation-result.json +5 -5
- package/dist/lib/schemas-data/3.1/protocol/get-adcp-capabilities-request.json +4 -4
- package/dist/lib/schemas-data/3.1/protocol/get-adcp-capabilities-response.json +33 -33
- package/dist/lib/schemas-data/3.1/protocol/get-task-status-request.json +5 -5
- package/dist/lib/schemas-data/3.1/protocol/get-task-status-response.json +10 -10
- package/dist/lib/schemas-data/3.1/protocol/list-tasks-request.json +13 -13
- package/dist/lib/schemas-data/3.1/protocol/list-tasks-response.json +8 -8
- package/dist/lib/schemas-data/3.1/registries/v1-canonical-mapping.json +5 -5
- package/dist/lib/schemas-data/3.1/signals/activate-signal-request.json +6 -6
- package/dist/lib/schemas-data/3.1/signals/activate-signal-response.json +9 -9
- package/dist/lib/schemas-data/3.1/signals/get-signals-async-response-submitted.json +4 -4
- package/dist/lib/schemas-data/3.1/signals/get-signals-async-response-working.json +3 -3
- package/dist/lib/schemas-data/3.1/signals/get-signals-request.json +11 -11
- package/dist/lib/schemas-data/3.1/signals/get-signals-response.json +17 -17
- package/dist/lib/schemas-data/3.1/sponsored-intelligence/si-capabilities.json +1 -1
- package/dist/lib/schemas-data/3.1/sponsored-intelligence/si-context-use.json +1 -1
- package/dist/lib/schemas-data/3.1/sponsored-intelligence/si-get-offering-request.json +4 -4
- package/dist/lib/schemas-data/3.1/sponsored-intelligence/si-get-offering-response.json +9 -9
- package/dist/lib/schemas-data/3.1/sponsored-intelligence/si-identity.json +1 -1
- package/dist/lib/schemas-data/3.1/sponsored-intelligence/si-initiate-session-request.json +7 -7
- package/dist/lib/schemas-data/3.1/sponsored-intelligence/si-initiate-session-response.json +10 -10
- package/dist/lib/schemas-data/3.1/sponsored-intelligence/si-send-message-request.json +5 -5
- package/dist/lib/schemas-data/3.1/sponsored-intelligence/si-send-message-response.json +10 -10
- package/dist/lib/schemas-data/3.1/sponsored-intelligence/si-sponsored-context-receipt.json +4 -4
- package/dist/lib/schemas-data/3.1/sponsored-intelligence/si-sponsored-context.json +4 -4
- package/dist/lib/schemas-data/3.1/sponsored-intelligence/si-terminate-session-request.json +4 -4
- package/dist/lib/schemas-data/3.1/sponsored-intelligence/si-terminate-session-response.json +7 -7
- package/dist/lib/schemas-data/3.1/sponsored-intelligence/si-ui-element.json +1 -1
- package/dist/lib/schemas-data/3.1/trusted-match/available-package.json +4 -4
- package/dist/lib/schemas-data/3.1/trusted-match/context-match-request.json +5 -5
- package/dist/lib/schemas-data/3.1/trusted-match/context-match-response.json +4 -4
- package/dist/lib/schemas-data/3.1/trusted-match/error.json +1 -1
- package/dist/lib/schemas-data/3.1/trusted-match/identity-match-request.json +4 -4
- package/dist/lib/schemas-data/3.1/trusted-match/identity-match-response.json +4 -4
- package/dist/lib/schemas-data/3.1/trusted-match/offer-price.json +1 -1
- package/dist/lib/schemas-data/3.1/trusted-match/offer.json +5 -5
- package/dist/lib/schemas-data/3.1/trusted-match/provider-identity-match-response.json +4 -4
- package/dist/lib/schemas-data/3.1/trusted-match/provider-registration.json +2 -2
- package/dist/lib/schemas-data/3.1/trusted-match/publisher-tmpx-config.json +1 -1
- package/dist/lib/schemas-data/3.1/trusted-match/tmpx-chunk.json +1 -1
- package/dist/lib/schemas-data/v2.5/_provenance.json +1 -1
- package/dist/lib/server/account-mode.d.mts +2 -1
- package/dist/lib/server/account-mode.d.ts +2 -1
- package/dist/lib/server/account-mode.d.ts.map +1 -1
- package/dist/lib/server/account-mode.js +1 -0
- package/dist/lib/server/account-mode.js.map +1 -1
- package/dist/lib/server/account-mode.mjs +1 -0
- package/dist/lib/server/account-mode.mjs.map +1 -1
- package/dist/lib/server/create-adcp-server.d.mts +10 -6
- package/dist/lib/server/create-adcp-server.d.ts +10 -6
- package/dist/lib/server/create-adcp-server.d.ts.map +1 -1
- package/dist/lib/server/create-adcp-server.js +2 -1
- package/dist/lib/server/create-adcp-server.js.map +1 -1
- package/dist/lib/server/create-adcp-server.mjs +2 -1
- package/dist/lib/server/create-adcp-server.mjs.map +1 -1
- package/dist/lib/server/decisioning/account.d.mts +16 -11
- package/dist/lib/server/decisioning/account.d.ts +16 -11
- package/dist/lib/server/decisioning/account.d.ts.map +1 -1
- package/dist/lib/server/decisioning/account.js.map +1 -1
- package/dist/lib/server/decisioning/account.mjs.map +1 -1
- package/dist/lib/server/decisioning/pagination.d.mts +2 -0
- package/dist/lib/server/decisioning/pagination.d.ts +2 -0
- package/dist/lib/server/decisioning/pagination.d.ts.map +1 -1
- package/dist/lib/server/decisioning/pagination.js.map +1 -1
- package/dist/lib/server/decisioning/runtime/entity-hydration.generated.js.map +1 -1
- package/dist/lib/server/decisioning/runtime/entity-hydration.generated.mjs.map +1 -1
- package/dist/lib/server/decisioning/runtime/from-platform.d.mts +20 -14
- package/dist/lib/server/decisioning/runtime/from-platform.d.ts +20 -14
- package/dist/lib/server/decisioning/runtime/from-platform.d.ts.map +1 -1
- package/dist/lib/server/decisioning/runtime/from-platform.js +32 -6
- package/dist/lib/server/decisioning/runtime/from-platform.js.map +1 -1
- package/dist/lib/server/decisioning/runtime/from-platform.mjs +32 -6
- package/dist/lib/server/decisioning/runtime/from-platform.mjs.map +1 -1
- package/dist/lib/server/decisioning/specialisms/sales.d.mts +16 -4
- package/dist/lib/server/decisioning/specialisms/sales.d.ts +16 -4
- package/dist/lib/server/decisioning/specialisms/sales.d.ts.map +1 -1
- package/dist/lib/server/decisioning/specialisms/sales.js.map +1 -1
- package/dist/lib/server/index.d.ts.map +1 -1
- package/dist/lib/server/index.js.map +1 -1
- package/dist/lib/server/index.mjs.map +1 -1
- package/dist/lib/server/legacy/v5/index.d.mts +2 -1
- package/dist/lib/server/legacy/v5/index.d.ts +2 -1
- package/dist/lib/server/legacy/v5/index.d.ts.map +1 -1
- package/dist/lib/server/legacy/v5/index.js.map +1 -1
- package/dist/lib/server/legacy/v5/index.mjs.map +1 -1
- package/dist/lib/server/wire-spec-fields.generated.d.mts +29 -29
- package/dist/lib/server/wire-spec-fields.generated.d.ts +29 -29
- package/dist/lib/server/wire-spec-fields.generated.js +29 -29
- package/dist/lib/server/wire-spec-fields.generated.js.map +1 -1
- package/dist/lib/server/wire-spec-fields.generated.mjs +29 -29
- package/dist/lib/server/wire-spec-fields.generated.mjs.map +1 -1
- package/dist/lib/testing/compliance/comply.d.mts +2 -0
- package/dist/lib/testing/compliance/comply.d.ts +2 -0
- package/dist/lib/testing/compliance/comply.d.ts.map +1 -1
- package/dist/lib/testing/compliance/comply.js +45 -14
- package/dist/lib/testing/compliance/comply.js.map +1 -1
- package/dist/lib/testing/compliance/comply.mjs +45 -14
- package/dist/lib/testing/compliance/comply.mjs.map +1 -1
- package/dist/lib/testing/compliance/index.d.mts +1 -1
- package/dist/lib/testing/compliance/index.d.ts +1 -1
- package/dist/lib/testing/compliance/index.d.ts.map +1 -1
- package/dist/lib/testing/compliance/index.js.map +1 -1
- package/dist/lib/testing/compliance/index.mjs.map +1 -1
- package/dist/lib/testing/compliance/storyboard-tracks.d.ts.map +1 -1
- package/dist/lib/testing/compliance/storyboard-tracks.js +9 -1
- package/dist/lib/testing/compliance/storyboard-tracks.js.map +1 -1
- package/dist/lib/testing/compliance/storyboard-tracks.mjs +9 -1
- package/dist/lib/testing/compliance/storyboard-tracks.mjs.map +1 -1
- package/dist/lib/testing/compliance/types.d.mts +26 -25
- package/dist/lib/testing/compliance/types.d.ts +26 -25
- package/dist/lib/testing/compliance/types.d.ts.map +1 -1
- package/dist/lib/testing/compliance/types.js.map +1 -1
- package/dist/lib/testing/index.d.mts +2 -2
- package/dist/lib/testing/index.d.ts +2 -2
- package/dist/lib/testing/index.d.ts.map +1 -1
- package/dist/lib/testing/index.js +28 -0
- package/dist/lib/testing/index.js.map +1 -1
- package/dist/lib/testing/index.mjs +28 -0
- package/dist/lib/testing/index.mjs.map +1 -1
- package/dist/lib/testing/scenarios/media-buy.d.ts.map +1 -1
- package/dist/lib/testing/scenarios/media-buy.js +20 -12
- package/dist/lib/testing/scenarios/media-buy.js.map +1 -1
- package/dist/lib/testing/scenarios/media-buy.mjs +20 -12
- package/dist/lib/testing/scenarios/media-buy.mjs.map +1 -1
- package/dist/lib/testing/storyboard/canonical-format-satisfaction.d.mts +6 -0
- package/dist/lib/testing/storyboard/canonical-format-satisfaction.d.ts +6 -0
- package/dist/lib/testing/storyboard/canonical-format-satisfaction.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/canonical-format-satisfaction.js +11 -0
- package/dist/lib/testing/storyboard/canonical-format-satisfaction.js.map +1 -1
- package/dist/lib/testing/storyboard/canonical-format-satisfaction.mjs +10 -0
- package/dist/lib/testing/storyboard/canonical-format-satisfaction.mjs.map +1 -1
- package/dist/lib/testing/storyboard/creative-assets.d.mts +28 -0
- package/dist/lib/testing/storyboard/creative-assets.d.ts +29 -0
- package/dist/lib/testing/storyboard/creative-assets.d.ts.map +1 -0
- package/dist/lib/testing/storyboard/creative-assets.js +457 -0
- package/dist/lib/testing/storyboard/creative-assets.js.map +1 -0
- package/dist/lib/testing/storyboard/creative-assets.mjs +430 -0
- package/dist/lib/testing/storyboard/creative-assets.mjs.map +1 -0
- package/dist/lib/testing/storyboard/fixture-resolution.d.mts +37 -0
- package/dist/lib/testing/storyboard/fixture-resolution.d.ts +38 -0
- package/dist/lib/testing/storyboard/fixture-resolution.d.ts.map +1 -0
- package/dist/lib/testing/storyboard/fixture-resolution.js +424 -0
- package/dist/lib/testing/storyboard/fixture-resolution.js.map +1 -0
- package/dist/lib/testing/storyboard/fixture-resolution.mjs +395 -0
- package/dist/lib/testing/storyboard/fixture-resolution.mjs.map +1 -0
- package/dist/lib/testing/storyboard/index.d.mts +5 -1
- package/dist/lib/testing/storyboard/index.d.ts +5 -1
- package/dist/lib/testing/storyboard/index.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/index.js +33 -0
- package/dist/lib/testing/storyboard/index.js.map +1 -1
- package/dist/lib/testing/storyboard/index.mjs +33 -0
- package/dist/lib/testing/storyboard/index.mjs.map +1 -1
- package/dist/lib/testing/storyboard/junit.js +14 -1
- package/dist/lib/testing/storyboard/junit.js.map +1 -1
- package/dist/lib/testing/storyboard/junit.mjs +14 -1
- package/dist/lib/testing/storyboard/junit.mjs.map +1 -1
- package/dist/lib/testing/storyboard/loader.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/loader.js +2 -0
- package/dist/lib/testing/storyboard/loader.js.map +1 -1
- package/dist/lib/testing/storyboard/loader.mjs +2 -0
- package/dist/lib/testing/storyboard/loader.mjs.map +1 -1
- package/dist/lib/testing/storyboard/oauth-metadata-graph/grader.d.mts +21 -0
- package/dist/lib/testing/storyboard/oauth-metadata-graph/grader.d.ts +22 -0
- package/dist/lib/testing/storyboard/oauth-metadata-graph/grader.d.ts.map +1 -0
- package/dist/lib/testing/storyboard/oauth-metadata-graph/grader.js +668 -0
- package/dist/lib/testing/storyboard/oauth-metadata-graph/grader.js.map +1 -0
- package/dist/lib/testing/storyboard/oauth-metadata-graph/grader.mjs +638 -0
- package/dist/lib/testing/storyboard/oauth-metadata-graph/grader.mjs.map +1 -0
- package/dist/lib/testing/storyboard/oauth-metadata-graph/index.d.mts +5 -0
- package/dist/lib/testing/storyboard/oauth-metadata-graph/index.d.ts +6 -0
- package/dist/lib/testing/storyboard/oauth-metadata-graph/index.d.ts.map +1 -0
- package/dist/lib/testing/storyboard/oauth-metadata-graph/index.js +44 -0
- package/dist/lib/testing/storyboard/oauth-metadata-graph/index.js.map +1 -0
- package/dist/lib/testing/storyboard/oauth-metadata-graph/index.mjs +20 -0
- package/dist/lib/testing/storyboard/oauth-metadata-graph/index.mjs.map +1 -0
- package/dist/lib/testing/storyboard/oauth-metadata-graph/types.d.mts +38 -0
- package/dist/lib/testing/storyboard/oauth-metadata-graph/types.d.ts +39 -0
- package/dist/lib/testing/storyboard/oauth-metadata-graph/types.d.ts.map +1 -0
- package/dist/lib/testing/storyboard/oauth-metadata-graph/types.js +17 -0
- package/dist/lib/testing/storyboard/oauth-metadata-graph/types.js.map +1 -0
- package/dist/lib/testing/storyboard/oauth-metadata-graph/types.mjs +1 -0
- package/dist/lib/testing/storyboard/oauth-metadata-graph/types.mjs.map +1 -0
- package/dist/lib/testing/storyboard/oauth-metadata-graph/vector-loader.d.mts +32 -0
- package/dist/lib/testing/storyboard/oauth-metadata-graph/vector-loader.d.ts +33 -0
- package/dist/lib/testing/storyboard/oauth-metadata-graph/vector-loader.d.ts.map +1 -0
- package/dist/lib/testing/storyboard/oauth-metadata-graph/vector-loader.js +105 -0
- package/dist/lib/testing/storyboard/oauth-metadata-graph/vector-loader.js.map +1 -0
- package/dist/lib/testing/storyboard/oauth-metadata-graph/vector-loader.mjs +80 -0
- package/dist/lib/testing/storyboard/oauth-metadata-graph/vector-loader.mjs.map +1 -0
- package/dist/lib/testing/storyboard/probes.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/probes.js +2 -1
- package/dist/lib/testing/storyboard/probes.js.map +1 -1
- package/dist/lib/testing/storyboard/probes.mjs +2 -1
- package/dist/lib/testing/storyboard/probes.mjs.map +1 -1
- package/dist/lib/testing/storyboard/runner.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/runner.js +546 -75
- package/dist/lib/testing/storyboard/runner.js.map +1 -1
- package/dist/lib/testing/storyboard/runner.mjs +555 -76
- package/dist/lib/testing/storyboard/runner.mjs.map +1 -1
- package/dist/lib/testing/storyboard/seeding.d.mts +10 -3
- package/dist/lib/testing/storyboard/seeding.d.ts +10 -3
- package/dist/lib/testing/storyboard/seeding.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/seeding.js +552 -2
- package/dist/lib/testing/storyboard/seeding.js.map +1 -1
- package/dist/lib/testing/storyboard/seeding.mjs +557 -2
- package/dist/lib/testing/storyboard/seeding.mjs.map +1 -1
- package/dist/lib/testing/storyboard/task-map.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/task-map.js +16 -2
- package/dist/lib/testing/storyboard/task-map.js.map +1 -1
- package/dist/lib/testing/storyboard/task-map.mjs +16 -2
- package/dist/lib/testing/storyboard/task-map.mjs.map +1 -1
- package/dist/lib/testing/storyboard/trusted-match-context-replay.d.mts +11 -0
- package/dist/lib/testing/storyboard/trusted-match-context-replay.d.ts +12 -0
- package/dist/lib/testing/storyboard/trusted-match-context-replay.d.ts.map +1 -0
- package/dist/lib/testing/storyboard/trusted-match-context-replay.js +340 -0
- package/dist/lib/testing/storyboard/trusted-match-context-replay.js.map +1 -0
- package/dist/lib/testing/storyboard/trusted-match-context-replay.mjs +316 -0
- package/dist/lib/testing/storyboard/trusted-match-context-replay.mjs.map +1 -0
- package/dist/lib/testing/storyboard/types.d.mts +190 -15
- package/dist/lib/testing/storyboard/types.d.ts +190 -15
- package/dist/lib/testing/storyboard/types.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/types.js +3 -0
- package/dist/lib/testing/storyboard/types.js.map +1 -1
- package/dist/lib/testing/storyboard/types.mjs +3 -0
- package/dist/lib/testing/storyboard/types.mjs.map +1 -1
- package/dist/lib/testing/storyboard/validations.d.mts +3 -0
- package/dist/lib/testing/storyboard/validations.d.ts +3 -0
- package/dist/lib/testing/storyboard/validations.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/validations.js +64 -24
- package/dist/lib/testing/storyboard/validations.js.map +1 -1
- package/dist/lib/testing/storyboard/validations.mjs +64 -24
- package/dist/lib/testing/storyboard/validations.mjs.map +1 -1
- package/dist/lib/testing/stubs/governance-agent-stub.d.ts.map +1 -1
- package/dist/lib/testing/stubs/governance-agent-stub.js +4 -1
- package/dist/lib/testing/stubs/governance-agent-stub.js.map +1 -1
- package/dist/lib/testing/stubs/governance-agent-stub.mjs +4 -1
- package/dist/lib/testing/stubs/governance-agent-stub.mjs.map +1 -1
- package/dist/lib/types/core.generated.d.mts +3 -1
- package/dist/lib/types/core.generated.d.ts +3 -1
- package/dist/lib/types/core.generated.d.ts.map +1 -1
- package/dist/lib/types/core.generated.js.map +1 -1
- package/dist/lib/types/inline-enums.generated.d.mts +2 -0
- package/dist/lib/types/inline-enums.generated.d.ts +2 -0
- package/dist/lib/types/inline-enums.generated.d.ts.map +1 -1
- package/dist/lib/types/inline-enums.generated.js +3 -0
- package/dist/lib/types/inline-enums.generated.js.map +1 -1
- package/dist/lib/types/inline-enums.generated.mjs +2 -0
- package/dist/lib/types/inline-enums.generated.mjs.map +1 -1
- package/dist/lib/types/manifest.generated.d.mts +3 -3
- package/dist/lib/types/manifest.generated.d.ts +3 -3
- package/dist/lib/types/manifest.generated.js.map +1 -1
- package/dist/lib/types/manifest.generated.mjs.map +1 -1
- package/dist/lib/types/per-tool-index.json +1 -1
- package/dist/lib/types/server-payload-aliases.d.mts +8 -2
- package/dist/lib/types/server-payload-aliases.d.ts +8 -2
- package/dist/lib/types/server-payload-aliases.d.ts.map +1 -1
- package/dist/lib/types/server-payload-aliases.js.map +1 -1
- package/dist/lib/upstream-recorder/recorder.d.mts +7 -18
- package/dist/lib/upstream-recorder/recorder.d.ts +7 -18
- package/dist/lib/upstream-recorder/recorder.d.ts.map +1 -1
- package/dist/lib/upstream-recorder/recorder.js +17 -10
- package/dist/lib/upstream-recorder/recorder.js.map +1 -1
- package/dist/lib/upstream-recorder/recorder.mjs +12 -5
- package/dist/lib/upstream-recorder/recorder.mjs.map +1 -1
- package/dist/lib/utils/redact-secrets.d.ts.map +1 -1
- package/dist/lib/utils/redact-secrets.js +7 -1
- package/dist/lib/utils/redact-secrets.js.map +1 -1
- package/dist/lib/utils/redact-secrets.mjs +7 -1
- package/dist/lib/utils/redact-secrets.mjs.map +1 -1
- package/dist/lib/validation/schema-loader.d.mts +16 -0
- package/dist/lib/validation/schema-loader.d.ts +16 -0
- package/dist/lib/validation/schema-loader.d.ts.map +1 -1
- package/dist/lib/validation/schema-loader.js +116 -0
- package/dist/lib/validation/schema-loader.js.map +1 -1
- package/dist/lib/validation/schema-loader.mjs +115 -0
- package/dist/lib/validation/schema-loader.mjs.map +1 -1
- package/dist/lib/version.d.mts +7 -7
- package/dist/lib/version.d.ts +7 -7
- package/dist/lib/version.d.ts.map +1 -1
- package/dist/lib/version.js +7 -6
- package/dist/lib/version.js.map +1 -1
- package/dist/lib/version.mjs +7 -6
- package/dist/lib/version.mjs.map +1 -1
- package/docs/guides/BUILD-AN-AGENT.md +4 -2
- package/docs/llms.txt +4 -4
- package/package.json +3 -3
- /package/compliance/cache/{3.1.10 → 3.1.11}/domains/brand/index.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/domains/brand/scenarios/distributed_brand_resolution.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/domains/brand/scenarios/single_side_trust_extension.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/domains/creative/index.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/domains/creative/scenarios/billing_out_of_band.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/domains/creative/scenarios/canonical_supported_formats.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/domains/creative/scenarios/creative_lifecycle_webhooks.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/domains/creative/scenarios/evaluator_auth.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/domains/creative/scenarios/native_in_feed.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/domains/governance/index.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/index.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/audience_buy_flow.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/available_actions.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/billing_finality_delivery.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/canonical_formats.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/clicks_buy_flow.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/completed_views_buy_flow.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/create_media_buy_async.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/creative_reception.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/delivery_reporting.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/dependency_impairment.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/dependency_impairment_audience.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/dependency_impairment_cardinality.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/event_dedup_flow.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/frequency_cap_enforcement.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/get_products_async.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/governance_approved.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/governance_conditions.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/governance_denied.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/governance_denied_recovery.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/inline_creatives_without_sync.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/invalid_transitions.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/inventory_list_no_match.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/inventory_list_targeting.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/measurement_accountability.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/measurement_terms_rejected.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/package_correlation_legacy_fallback.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/pending_creatives_to_start.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/per_creative_conversion_attribution.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/performance_buy_flow.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/performance_buy_flow_roas.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/pricing_currency_filter.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/product_signal_targeting.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/proposal_finalize.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/proposal_finalize_asap_timing.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/proposal_not_found_errors.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/provenance_audit_observation.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/provenance_enforcement.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/provenance_truth_of_claim.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/reach_buy_flow.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/refine_finalize_exclusivity.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/refine_products.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/vendor_metric_accountability.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/vendor_metric_catalog_precondition.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/vendor_metric_optimization_flow.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/state-machine.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/domains/signals/index.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/domains/signals/scenarios/get_signals_async.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/domains/sponsored-intelligence/index.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/domains/sponsored-intelligence/sponsored-context-accountability.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/brand/index.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/brand/scenarios/distributed_brand_resolution.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/brand/scenarios/single_side_trust_extension.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/creative/index.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/creative/scenarios/billing_out_of_band.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/creative/scenarios/canonical_supported_formats.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/creative/scenarios/creative_lifecycle_webhooks.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/creative/scenarios/evaluator_auth.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/creative/scenarios/native_in_feed.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/governance/index.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/index.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/audience_buy_flow.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/available_actions.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/billing_finality_delivery.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/canonical_formats.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/clicks_buy_flow.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/completed_views_buy_flow.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/create_media_buy_async.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/creative_reception.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/delivery_reporting.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/dependency_impairment.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/dependency_impairment_audience.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/dependency_impairment_cardinality.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/event_dedup_flow.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/frequency_cap_enforcement.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/get_products_async.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/governance_approved.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/governance_conditions.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/governance_denied.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/governance_denied_recovery.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/inline_creatives_without_sync.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/invalid_transitions.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/inventory_list_no_match.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/inventory_list_targeting.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/measurement_accountability.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/measurement_terms_rejected.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/package_correlation_legacy_fallback.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/pending_creatives_to_start.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/per_creative_conversion_attribution.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/performance_buy_flow.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/performance_buy_flow_roas.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/pricing_currency_filter.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/product_signal_targeting.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/proposal_finalize.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/proposal_finalize_asap_timing.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/proposal_not_found_errors.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/provenance_audit_observation.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/provenance_enforcement.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/provenance_truth_of_claim.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/reach_buy_flow.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/refine_finalize_exclusivity.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/refine_products.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/vendor_metric_accountability.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/vendor_metric_catalog_precondition.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/vendor_metric_optimization_flow.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/state-machine.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/signals/index.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/signals/scenarios/get_signals_async.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/sponsored-intelligence/index.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/sponsored-intelligence/sponsored-context-accountability.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/specialisms/audience-sync/index.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/specialisms/brand-rights/index.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/specialisms/brand-rights/scenarios/governance_denied.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/specialisms/collection-lists/index.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/specialisms/content-standards/index.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/specialisms/creative-ad-server/index.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/specialisms/creative-generative/generative-seller.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/specialisms/creative-generative/index.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/specialisms/creative-template/index.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/specialisms/creative-transformers/index.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/specialisms/governance-aware-seller/index.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/specialisms/governance-aware-seller/scenarios/governance_multi_agent_rejected.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/specialisms/governance-delivery-monitor/index.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/specialisms/governance-spend-authority/denied.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/specialisms/governance-spend-authority/index.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/specialisms/property-lists/index.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/specialisms/sales-broadcast-tv/index.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/specialisms/sales-catalog-driven/index.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/specialisms/sales-guaranteed/index.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/specialisms/sales-non-guaranteed/index.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/specialisms/sales-proposal-mode/index.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/specialisms/sales-social/index.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/specialisms/signal-marketplace/index.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/specialisms/signal-marketplace/scenarios/governance_denied.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/specialisms/signal-owned/index.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/specialisms/sponsored-intelligence/index.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-kits/acme-outdoor-live.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-kits/acme-outdoor.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-kits/billing-gate-runner.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-kits/bistro-oranje.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-kits/distributed-brand-runner.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-kits/nova-motors.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-kits/osei-natural.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-kits/parallel-dispatch-runner.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-kits/rate-limit-trip-runner.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-kits/signed-requests-runner.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-kits/single-side-trust-runner.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-kits/substitution-observer-runner.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-kits/summit-foods.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-kits/webhook-receiver-runner.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/catalog-macro-substitution.json +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/plan-hash/001-minimal-plan.json +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/plan-hash/002-full-plan.json +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/plan-hash/003-bookkeeping-stripped.json +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/plan-hash/004a-human-review-omitted.json +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/plan-hash/004b-human-review-explicit-null.json +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/plan-hash/005a-policy-categories-order-1.json +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/plan-hash/005b-policy-categories-order-2.json +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/plan-hash/006a-ext-trace-v1.json +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/plan-hash/006b-ext-trace-v2.json +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/plan-hash/007-unicode-objectives.json +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/plan-hash/008-numeric-canonicalization.json +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/request-signing/README.md +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/request-signing/canonicalization.json +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/request-signing/keys.json +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/request-signing/negative/001-no-signature-header.json +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/request-signing/negative/002-wrong-tag.json +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/request-signing/negative/003-expired-signature.json +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/request-signing/negative/004-window-too-long.json +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/request-signing/negative/005-alg-not-allowed.json +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/request-signing/negative/006-missing-covered-component.json +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/request-signing/negative/007-missing-content-digest.json +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/request-signing/negative/008-unknown-keyid.json +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/request-signing/negative/009-key-ops-missing-verify.json +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/request-signing/negative/010-content-digest-mismatch.json +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/request-signing/negative/011-malformed-header.json +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/request-signing/negative/012-missing-expires-param.json +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/request-signing/negative/013-expires-le-created.json +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/request-signing/negative/014-missing-nonce-param.json +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/request-signing/negative/015-signature-invalid.json +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/request-signing/negative/016-replayed-nonce.json +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/request-signing/negative/017-key-revoked.json +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/request-signing/negative/018-digest-covered-when-forbidden.json +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/request-signing/negative/019-signature-without-signature-input.json +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/request-signing/negative/020-rate-abuse.json +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/request-signing/negative/021-duplicate-signature-input-label.json +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/request-signing/negative/022-multi-valued-content-type.json +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/request-signing/negative/023-multi-valued-content-digest.json +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/request-signing/negative/024-unquoted-string-param.json +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/request-signing/negative/025-jwk-alg-crv-mismatch.json +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/request-signing/negative/026-non-ascii-host.json +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/request-signing/negative/027-webhook-registration-authentication-unsigned.json +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/request-signing/negative/028-unsigned-protocol-method-required.json +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/request-signing/positive/001-basic-post.json +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/request-signing/positive/002-post-with-content-digest.json +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/request-signing/positive/003-es256-post.json +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/request-signing/positive/004-multiple-signature-labels.json +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/request-signing/positive/005-default-port-stripped.json +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/request-signing/positive/006-dot-segment-path.json +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/request-signing/positive/007-query-byte-preserved.json +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/request-signing/positive/008-percent-encoded-path.json +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/request-signing/positive/009-percent-encoded-unreserved-decoded.json +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/request-signing/positive/010-percent-encoded-slash-preserved.json +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/request-signing/positive/011-ipv6-authority.json +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/request-signing/positive/012-ipv6-authority-default-port-stripped.json +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/webhook-receiver-envelope.json +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/webhook-signing/README.md +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/webhook-signing/keys.json +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/webhook-signing/negative/001-wrong-tag.json +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/webhook-signing/negative/002-expired-signature.json +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/webhook-signing/negative/003-window-too-long.json +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/webhook-signing/negative/004-alg-not-allowed.json +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/webhook-signing/negative/005-missing-authority-component.json +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/webhook-signing/negative/006-missing-content-digest.json +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/webhook-signing/negative/007-unknown-keyid.json +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/webhook-signing/negative/008-wrong-adcp-use.json +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/webhook-signing/negative/009-content-digest-mismatch.json +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/webhook-signing/negative/010-malformed-signature-input.json +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/webhook-signing/negative/011-signature-without-input.json +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/webhook-signing/negative/012-missing-expires-param.json +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/webhook-signing/negative/013-expires-le-created.json +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/webhook-signing/negative/014-missing-nonce-param.json +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/webhook-signing/negative/015-signature-invalid.json +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/webhook-signing/negative/016-replayed-nonce.json +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/webhook-signing/negative/017-key-revoked.json +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/webhook-signing/negative/018-rate-abuse.json +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/webhook-signing/negative/019-revocation-stale.json +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/webhook-signing/negative/020-key-ops-missing-verify.json +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/webhook-signing/negative/021-base64-alphabet-mixing.json +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/webhook-signing/positive/001-basic-post.json +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/webhook-signing/positive/002-es256-post.json +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/webhook-signing/positive/003-multiple-signature-labels.json +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/webhook-signing/positive/004-default-port-stripped.json +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/webhook-signing/positive/005-percent-encoded-path.json +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/webhook-signing/positive/006-query-byte-preserved.json +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/webhook-signing/positive/007-body-without-idempotency-key.json +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/webhook-signing/positive/008-request-signing-key-reuse.json +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/universal/billing-gate-dispatch.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/universal/canonical-format-validate-input.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/universal/capability-discovery.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/universal/collection-lists-pagination-integrity.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/universal/comply-controller-mode-gate.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/universal/content-standards-pagination-integrity.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/universal/deterministic-testing.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/universal/error-compliance-signals.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/universal/error-compliance.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/universal/fictional-entities.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/universal/get-media-buys-pagination-integrity.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/universal/get-products-pagination-integrity.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/universal/get-signals-pagination-integrity.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/universal/idempotency.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/universal/notification-config-event-scope.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/universal/notification-config-lifecycle.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/universal/notification-config-rejections.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/universal/pagination-integrity-creative-formats.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/universal/pagination-integrity-list-accounts.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/universal/pagination-integrity.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/universal/property-lists-pagination-integrity.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/universal/read-tool-idempotency.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/universal/runner-output-contract.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/universal/schema-validation-signals.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/universal/schema-validation.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/universal/security.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/universal/signed-requests.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/universal/stale-response-advisory.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/universal/v3-envelope-integrity.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/universal/version-negotiation.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/universal/webhook-emission.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/universal/webhook-receiver-envelope.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/universal/wholesale-feed-bulk-webhooks.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/universal/wholesale-feed-product-webhooks.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/universal/wholesale-feed-products.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/universal/wholesale-feed-signal-webhooks.yaml +0 -0
- /package/compliance/cache/{3.1.10 → 3.1.11}/universal/wholesale-feed-signals.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/brand/index.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/brand/scenarios/distributed_brand_resolution.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/brand/scenarios/single_side_trust_extension.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/creative/index.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/creative/scenarios/billing_out_of_band.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/creative/scenarios/canonical_supported_formats.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/creative/scenarios/creative_lifecycle_webhooks.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/creative/scenarios/evaluator_auth.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/creative/scenarios/native_in_feed.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/governance/index.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/index.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/audience_buy_flow.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/available_actions.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/billing_finality_delivery.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/canonical_formats.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/clicks_buy_flow.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/completed_views_buy_flow.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/create_media_buy_async.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/creative_reception.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/delivery_reporting.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/dependency_impairment.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/dependency_impairment_audience.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/dependency_impairment_cardinality.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/event_dedup_flow.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/frequency_cap_enforcement.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/get_products_async.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/governance_approved.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/governance_conditions.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/governance_denied.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/governance_denied_recovery.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/inline_creatives_without_sync.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/invalid_transitions.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/inventory_list_no_match.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/inventory_list_targeting.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/measurement_accountability.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/measurement_terms_rejected.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/package_correlation_legacy_fallback.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/pending_creatives_to_start.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/per_creative_conversion_attribution.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/performance_buy_flow.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/performance_buy_flow_roas.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/pricing_currency_filter.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/product_signal_targeting.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/proposal_finalize.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/proposal_finalize_asap_timing.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/proposal_not_found_errors.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/provenance_audit_observation.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/provenance_enforcement.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/provenance_truth_of_claim.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/reach_buy_flow.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/refine_finalize_exclusivity.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/refine_products.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/vendor_metric_accountability.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/vendor_metric_catalog_precondition.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/vendor_metric_optimization_flow.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/state-machine.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/signals/index.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/signals/scenarios/get_signals_async.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/sponsored-intelligence/index.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/sponsored-intelligence/sponsored-context-accountability.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/brand/index.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/brand/scenarios/distributed_brand_resolution.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/brand/scenarios/single_side_trust_extension.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/creative/index.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/creative/scenarios/billing_out_of_band.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/creative/scenarios/canonical_supported_formats.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/creative/scenarios/creative_lifecycle_webhooks.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/creative/scenarios/evaluator_auth.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/creative/scenarios/native_in_feed.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/governance/index.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/index.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/audience_buy_flow.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/available_actions.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/billing_finality_delivery.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/canonical_formats.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/clicks_buy_flow.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/completed_views_buy_flow.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/create_media_buy_async.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/creative_reception.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/delivery_reporting.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/dependency_impairment.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/dependency_impairment_audience.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/dependency_impairment_cardinality.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/event_dedup_flow.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/frequency_cap_enforcement.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/get_products_async.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/governance_approved.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/governance_conditions.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/governance_denied.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/governance_denied_recovery.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/inline_creatives_without_sync.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/invalid_transitions.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/inventory_list_no_match.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/inventory_list_targeting.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/measurement_accountability.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/measurement_terms_rejected.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/package_correlation_legacy_fallback.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/pending_creatives_to_start.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/per_creative_conversion_attribution.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/performance_buy_flow.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/performance_buy_flow_roas.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/pricing_currency_filter.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/product_signal_targeting.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/proposal_finalize.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/proposal_finalize_asap_timing.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/proposal_not_found_errors.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/provenance_audit_observation.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/provenance_enforcement.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/provenance_truth_of_claim.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/reach_buy_flow.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/refine_finalize_exclusivity.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/refine_products.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/vendor_metric_accountability.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/vendor_metric_catalog_precondition.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/vendor_metric_optimization_flow.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/state-machine.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/signals/index.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/signals/scenarios/get_signals_async.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/sponsored-intelligence/index.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/sponsored-intelligence/sponsored-context-accountability.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/specialisms/audience-sync/index.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/specialisms/brand-rights/index.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/specialisms/brand-rights/scenarios/governance_denied.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/specialisms/collection-lists/index.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/specialisms/content-standards/index.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/specialisms/creative-ad-server/index.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/specialisms/creative-generative/generative-seller.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/specialisms/creative-generative/index.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/specialisms/creative-template/index.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/specialisms/creative-transformers/index.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/specialisms/governance-aware-seller/index.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/specialisms/governance-aware-seller/scenarios/governance_multi_agent_rejected.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/specialisms/governance-delivery-monitor/index.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/specialisms/governance-spend-authority/denied.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/specialisms/governance-spend-authority/index.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/specialisms/property-lists/index.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/specialisms/sales-broadcast-tv/index.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/specialisms/sales-catalog-driven/index.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/specialisms/sales-guaranteed/index.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/specialisms/sales-non-guaranteed/index.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/specialisms/sales-proposal-mode/index.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/specialisms/sales-social/index.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/specialisms/signal-marketplace/index.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/specialisms/signal-marketplace/scenarios/governance_denied.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/specialisms/signal-owned/index.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/specialisms/sponsored-intelligence/index.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-kits/acme-outdoor-live.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-kits/acme-outdoor.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-kits/billing-gate-runner.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-kits/bistro-oranje.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-kits/distributed-brand-runner.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-kits/nova-motors.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-kits/osei-natural.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-kits/parallel-dispatch-runner.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-kits/rate-limit-trip-runner.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-kits/signed-requests-runner.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-kits/single-side-trust-runner.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-kits/substitution-observer-runner.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-kits/summit-foods.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-kits/webhook-receiver-runner.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/catalog-macro-substitution.json +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/plan-hash/001-minimal-plan.json +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/plan-hash/002-full-plan.json +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/plan-hash/003-bookkeeping-stripped.json +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/plan-hash/004a-human-review-omitted.json +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/plan-hash/004b-human-review-explicit-null.json +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/plan-hash/005a-policy-categories-order-1.json +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/plan-hash/005b-policy-categories-order-2.json +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/plan-hash/006a-ext-trace-v1.json +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/plan-hash/006b-ext-trace-v2.json +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/plan-hash/007-unicode-objectives.json +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/plan-hash/008-numeric-canonicalization.json +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/request-signing/README.md +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/request-signing/canonicalization.json +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/request-signing/keys.json +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/request-signing/negative/001-no-signature-header.json +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/request-signing/negative/002-wrong-tag.json +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/request-signing/negative/003-expired-signature.json +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/request-signing/negative/004-window-too-long.json +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/request-signing/negative/005-alg-not-allowed.json +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/request-signing/negative/006-missing-covered-component.json +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/request-signing/negative/007-missing-content-digest.json +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/request-signing/negative/008-unknown-keyid.json +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/request-signing/negative/009-key-ops-missing-verify.json +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/request-signing/negative/010-content-digest-mismatch.json +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/request-signing/negative/011-malformed-header.json +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/request-signing/negative/012-missing-expires-param.json +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/request-signing/negative/013-expires-le-created.json +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/request-signing/negative/014-missing-nonce-param.json +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/request-signing/negative/015-signature-invalid.json +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/request-signing/negative/016-replayed-nonce.json +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/request-signing/negative/017-key-revoked.json +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/request-signing/negative/018-digest-covered-when-forbidden.json +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/request-signing/negative/019-signature-without-signature-input.json +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/request-signing/negative/020-rate-abuse.json +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/request-signing/negative/021-duplicate-signature-input-label.json +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/request-signing/negative/022-multi-valued-content-type.json +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/request-signing/negative/023-multi-valued-content-digest.json +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/request-signing/negative/024-unquoted-string-param.json +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/request-signing/negative/025-jwk-alg-crv-mismatch.json +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/request-signing/negative/026-non-ascii-host.json +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/request-signing/negative/027-webhook-registration-authentication-unsigned.json +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/request-signing/negative/028-unsigned-protocol-method-required.json +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/request-signing/positive/001-basic-post.json +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/request-signing/positive/002-post-with-content-digest.json +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/request-signing/positive/003-es256-post.json +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/request-signing/positive/004-multiple-signature-labels.json +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/request-signing/positive/005-default-port-stripped.json +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/request-signing/positive/006-dot-segment-path.json +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/request-signing/positive/007-query-byte-preserved.json +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/request-signing/positive/008-percent-encoded-path.json +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/request-signing/positive/009-percent-encoded-unreserved-decoded.json +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/request-signing/positive/010-percent-encoded-slash-preserved.json +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/request-signing/positive/011-ipv6-authority.json +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/request-signing/positive/012-ipv6-authority-default-port-stripped.json +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/webhook-receiver-envelope.json +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/webhook-signing/README.md +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/webhook-signing/keys.json +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/webhook-signing/negative/001-wrong-tag.json +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/webhook-signing/negative/002-expired-signature.json +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/webhook-signing/negative/003-window-too-long.json +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/webhook-signing/negative/004-alg-not-allowed.json +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/webhook-signing/negative/005-missing-authority-component.json +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/webhook-signing/negative/006-missing-content-digest.json +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/webhook-signing/negative/007-unknown-keyid.json +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/webhook-signing/negative/008-wrong-adcp-use.json +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/webhook-signing/negative/009-content-digest-mismatch.json +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/webhook-signing/negative/010-malformed-signature-input.json +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/webhook-signing/negative/011-signature-without-input.json +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/webhook-signing/negative/012-missing-expires-param.json +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/webhook-signing/negative/013-expires-le-created.json +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/webhook-signing/negative/014-missing-nonce-param.json +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/webhook-signing/negative/015-signature-invalid.json +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/webhook-signing/negative/016-replayed-nonce.json +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/webhook-signing/negative/017-key-revoked.json +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/webhook-signing/negative/018-rate-abuse.json +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/webhook-signing/negative/019-revocation-stale.json +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/webhook-signing/negative/020-key-ops-missing-verify.json +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/webhook-signing/negative/021-base64-alphabet-mixing.json +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/webhook-signing/positive/001-basic-post.json +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/webhook-signing/positive/002-es256-post.json +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/webhook-signing/positive/003-multiple-signature-labels.json +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/webhook-signing/positive/004-default-port-stripped.json +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/webhook-signing/positive/005-percent-encoded-path.json +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/webhook-signing/positive/006-query-byte-preserved.json +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/webhook-signing/positive/007-body-without-idempotency-key.json +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/webhook-signing/positive/008-request-signing-key-reuse.json +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/universal/billing-gate-dispatch.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/universal/canonical-format-validate-input.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/universal/capability-discovery.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/universal/collection-lists-pagination-integrity.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/universal/comply-controller-mode-gate.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/universal/content-standards-pagination-integrity.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/universal/deterministic-testing.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/universal/error-compliance-signals.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/universal/error-compliance.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/universal/fictional-entities.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/universal/get-media-buys-pagination-integrity.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/universal/get-products-pagination-integrity.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/universal/get-signals-pagination-integrity.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/universal/idempotency.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/universal/notification-config-event-scope.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/universal/notification-config-lifecycle.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/universal/notification-config-rejections.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/universal/pagination-integrity-creative-formats.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/universal/pagination-integrity-list-accounts.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/universal/pagination-integrity.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/universal/property-lists-pagination-integrity.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/universal/read-tool-idempotency.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/universal/runner-output-contract.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/universal/schema-validation-signals.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/universal/schema-validation.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/universal/security.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/universal/signed-requests.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/universal/stale-response-advisory.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/universal/v3-envelope-integrity.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/universal/version-negotiation.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/universal/webhook-emission.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/universal/webhook-receiver-envelope.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/universal/wholesale-feed-bulk-webhooks.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/universal/wholesale-feed-product-webhooks.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/universal/wholesale-feed-products.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/universal/wholesale-feed-signal-webhooks.yaml +0 -0
- /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/universal/wholesale-feed-signals.yaml +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/upstream-recorder/recorder.ts"],"sourcesContent":["/**\n * `createUpstreamRecorder` implementation. See `./types.ts` for the public\n * surface and `./README` (file header on `index.ts`) for the why.\n */\n\nimport { AsyncLocalStorage } from 'node:async_hooks';\nimport { createHash } from 'node:crypto';\nimport {\n normalizeSecretKeyPattern,\n redactSecrets,\n secretKeyPatternMatches,\n SECRET_KEY_PATTERN,\n} from '../utils/redact-secrets';\nimport { globToRegExp } from '../utils/glob';\nimport { canonicalize } from '../utils/jcs';\nimport { MAX_JSON_DEPTH } from '../utils/json-depth';\nimport { IDENTIFIER_DIGEST_LIMIT } from './constants';\nimport {\n UpstreamRecorderScopeError,\n type QueryUpstreamTrafficResponse,\n type RecordInput,\n type RawRecordedCall,\n type RecordedCall,\n type UpstreamRecorder,\n type UpstreamRecorderDebugInfo,\n type UpstreamRecorderErrorEvent,\n type UpstreamRecorderOptions,\n type UpstreamRecorderQueryParams,\n type UpstreamRecorderQueryResult,\n} from './types';\n\nconst DEFAULT_BUFFER_SIZE = 1000;\nconst DEFAULT_TTL_MS = 60 * 60 * 1000; // 1h\nconst DEFAULT_QUERY_LIMIT = 100;\nconst DEFAULT_MAX_PAYLOAD_BYTES = 65_536; // mirrors spec's `recorded_calls[].payload.maxLength`\nconst MAX_BUFFER_SIZE = 100_000;\nconst MAX_TTL_MS = 24 * 60 * 60 * 1000; // 24h\nconst VALID_PURPOSES = new Set([\n 'platform_primary',\n 'measurement',\n 'attribution',\n 'creative_serving',\n 'identity',\n 'other',\n]);\n\nexport class PayloadDigestError extends Error {\n cause: unknown;\n\n constructor(message: string, cause?: unknown) {\n super(message);\n this.name = 'PayloadDigestError';\n this.cause = cause;\n }\n}\n\n/**\n * Wrapped per-call entry stored in the buffer. Carries the public\n * `RecordedCall` plus the principal it was recorded under (kept off the\n * public type so cross-principal isolation is enforced at query time and\n * the principal never appears in the controller-response payload).\n */\ninterface InternalEntry {\n call: RawRecordedCall;\n principal: string;\n /** ms-since-epoch cached for TTL eviction; computed at insert time. */\n recordedAtMs: number;\n}\n\nfunction clamp(n: number | undefined, lo: number, hi: number, fallback: number): number {\n if (typeof n !== 'number' || !Number.isFinite(n)) return fallback;\n // Out-of-range values (zero / negative / above ceiling) revert to the\n // default rather than silently saturating at the limit — a typo'd\n // `bufferSize: -10` silently saturating to `1` would drop nearly\n // everything; the default is a much safer failure mode.\n if (n < lo || n > hi) return fallback;\n return n;\n}\n\nfunction isPrincipalString(p: unknown): p is string {\n return typeof p === 'string' && p.length > 0;\n}\n\n/**\n * Build the recorder. Producer-side companion to the\n * `runner-output-contract.yaml` v2.0.0 `upstream_traffic` storyboard\n * check (spec PR adcontextprotocol/adcp#3816).\n */\nexport function createUpstreamRecorder(options: UpstreamRecorderOptions = {}): UpstreamRecorder {\n const enabled = options.enabled ?? true;\n // Disabled-recorder fast-path: skip every wrapping cost. Production\n // builds get a no-op object whose methods compile to inlinable returns.\n if (!enabled) return makeNoopRecorder();\n\n // Production-enable footgun guard: when adopters ship with `enabled:\n // true` in `NODE_ENV=production` (forgot the gate, or the gate is\n // mis-evaluated), emit a one-time warning. ADCP_RECORDER_PRODUCTION_ACK=1\n // is the explicit acknowledgment escape hatch for the rare adopters\n // who legitimately want recording in prod.\n warnIfEnabledInProduction();\n\n const redactPattern = normalizeSecretKeyPattern(options.redactPattern ?? SECRET_KEY_PATTERN);\n const bufferSize = clamp(options.bufferSize, 1, MAX_BUFFER_SIZE, DEFAULT_BUFFER_SIZE);\n const ttlMs = clamp(options.ttlMs, 1, MAX_TTL_MS, DEFAULT_TTL_MS);\n const maxPayloadBytes = clamp(options.maxPayloadBytes, 0, 16 * 1024 * 1024, DEFAULT_MAX_PAYLOAD_BYTES);\n const purpose = options.purpose;\n const strict = options.strict === true;\n const onError = options.onError;\n\n // Buffer: ordered by insertion (== timestamp ascending). Eviction is\n // FIFO when full or TTL-prune at record time.\n const buffer: InternalEntry[] = [];\n\n // Active-principal context. Set by `runWithPrincipal`; read by the\n // wrapped fetch and by `record` when no explicit principal is passed.\n const principalStorage = new AsyncLocalStorage<string>();\n\n // ────────────────────────────────────────────────────────────\n // Internal helpers\n // ────────────────────────────────────────────────────────────\n\n function emitError(event: UpstreamRecorderErrorEvent): void {\n if (!onError) return;\n try {\n onError(event);\n } catch {\n // onError MUST NOT crash the recorder — silent.\n }\n }\n\n function evictExpired(nowMs: number): void {\n if (buffer.length === 0) return;\n const cutoff = nowMs - ttlMs;\n let idx = 0;\n while (idx < buffer.length && buffer[idx]!.recordedAtMs < cutoff) idx++;\n if (idx > 0) buffer.splice(0, idx);\n }\n\n function pushEntry(entry: InternalEntry): void {\n buffer.push(entry);\n while (buffer.length > bufferSize) buffer.shift();\n }\n\n function applyRedactionToHeaders(headers: Record<string, string> | undefined): Record<string, string> {\n if (!headers) return {};\n const out: Record<string, string> = {};\n for (const [k, v] of Object.entries(headers)) {\n const lower = k.toLowerCase();\n out[lower] = secretKeyPatternMatches(redactPattern, lower) ? '[redacted]' : v;\n }\n return out;\n }\n\n /**\n * Apply per-key redaction to the body. JSON bodies (objects + arrays)\n * walk through `redactSecrets`. Form-urlencoded strings parse +\n * key-redact + re-stringify so `access_token=xxx` is caught without\n * the adopter pre-redacting. Other string types pass through. Binary\n * types (Buffer / Blob / ArrayBuffer / TypedArray) are replaced with\n * a marker — the buffer should not hold raw bytes whose JSON-shape\n * is misleading downstream.\n */\n function applyRedactionToPayload(payload: unknown, contentType: string): { value: unknown; bytes: number } {\n const value = normalizeRecordedPayload(payload, contentType, redactPattern, maxPayloadBytes);\n return { value, bytes: payloadWireLength(value) };\n }\n\n function classifyPurpose(\n method: string,\n url: string,\n host: string,\n path: string,\n headers: Record<string, string>\n ): string | undefined {\n if (!purpose) return undefined;\n try {\n const value = purpose({ method, url, host, path, headers }) as unknown;\n if (value === undefined) return undefined;\n if (typeof value === 'string' && VALID_PURPOSES.has(value)) return value;\n emitError({ kind: 'classifier_invalid_purpose', purpose: typeof value === 'string' ? value : String(value) });\n return undefined;\n } catch (err) {\n emitError({ kind: 'classifier_threw', err });\n return undefined;\n }\n }\n\n function buildRecordedCall(input: RecordInput, nowMs: number): RawRecordedCall | null {\n try {\n const url = input.url;\n let host = '';\n let pathPart = '';\n try {\n const parsed = new URL(url);\n host = parsed.host;\n pathPart = parsed.pathname;\n } catch {\n emitError({ kind: 'url_parse_failed', url });\n }\n const redactedHeaders = applyRedactionToHeaders(input.headers);\n const purposeTag = classifyPurpose(input.method, url, host, pathPart, redactedHeaders);\n const { value: payload, bytes: payloadLength } = applyRedactionToPayload(input.payload, input.content_type);\n return {\n method: input.method,\n endpoint: `${input.method} ${url}`,\n url,\n host,\n path: pathPart,\n content_type: input.content_type,\n attestation_mode: 'raw',\n payload,\n payload_length: payloadLength,\n timestamp: new Date(nowMs).toISOString(),\n ...(input.status_code !== undefined && { status_code: input.status_code }),\n ...(purposeTag !== undefined && { purpose: purposeTag }),\n };\n } catch (err) {\n // Hostile / buggy payload (throwing getter, etc.). Recording MUST\n // never break the adapter call site.\n emitError({ kind: 'payload_build_failed', err });\n return null;\n }\n }\n\n // ────────────────────────────────────────────────────────────\n // Public methods\n // ────────────────────────────────────────────────────────────\n\n function runWithPrincipal<T>(principal: string, fn: () => T | Promise<T>): Promise<T> {\n if (!isPrincipalString(principal)) {\n return Promise.reject(\n new UpstreamRecorderScopeError(\n 'runWithPrincipal: principal MUST be a non-empty string. Pass the same identifier you receive in your comply_test_controller handler.'\n )\n );\n }\n return Promise.resolve(principalStorage.run(principal, fn));\n }\n\n function record(input: RecordInput, explicitPrincipal?: string): void {\n const principal = explicitPrincipal ?? principalStorage.getStore();\n if (!isPrincipalString(principal)) {\n if (strict) {\n throw new UpstreamRecorderScopeError(\n `record() called outside runWithPrincipal scope (method=${input.method}, url=${input.url}). Wrap the call site or pass an explicit principal.`\n );\n }\n emitError({ kind: 'unscoped_record', method: input.method, url: input.url });\n return;\n }\n const nowMs = Date.now();\n evictExpired(nowMs);\n const call = buildRecordedCall(input, nowMs);\n if (!call) return;\n pushEntry({ call, principal, recordedAtMs: nowMs });\n }\n\n function wrapFetch(originalFetch: typeof globalThis.fetch): typeof globalThis.fetch {\n return async function wrappedFetch(input: RequestInfo | URL, init?: RequestInit): Promise<Response> {\n const principal = principalStorage.getStore();\n // No active principal: pass through unchanged in non-strict mode.\n // In strict mode, a fetch outside scope is the same authoring bug\n // as `record()` outside scope and surfaces the same way.\n if (!principal) {\n if (strict) {\n throw new UpstreamRecorderScopeError(\n `wrapFetch invoked outside runWithPrincipal scope (input=${typeof input === 'string' ? input : input instanceof URL ? input.toString() : input.url}). Wrap the call site.`\n );\n }\n return originalFetch(input as Parameters<typeof globalThis.fetch>[0], init);\n }\n\n const method = (init?.method ?? (input instanceof Request ? input.method : 'GET')).toUpperCase();\n const url = typeof input === 'string' ? input : input instanceof URL ? input.toString() : input.url;\n\n // Header normalization — fetch's Headers form vs init.headers Record vs Request body.\n const headerObj: Record<string, string> = {};\n if (init?.headers) {\n const h = init.headers;\n if (h instanceof Headers) {\n h.forEach((v, k) => {\n headerObj[k.toLowerCase()] = v;\n });\n } else if (Array.isArray(h)) {\n for (const [k, v] of h) headerObj[k.toLowerCase()] = v;\n } else {\n for (const [k, v] of Object.entries(h as Record<string, string>)) headerObj[k.toLowerCase()] = v;\n }\n } else if (input instanceof Request) {\n input.headers.forEach((v, k) => {\n headerObj[k.toLowerCase()] = v;\n });\n }\n\n const contentType = headerObj['content-type'] ?? '';\n const payload = await readBody(input, init, contentType);\n\n // Fire the actual call; record after we have a status_code. On\n // throw, we still record the attempt with no status_code so the\n // adopter can see the call was made.\n let response: Response | undefined;\n let thrown: unknown;\n try {\n response = await originalFetch(input as Parameters<typeof globalThis.fetch>[0], init);\n } catch (err) {\n thrown = err;\n }\n\n record(\n {\n method,\n url,\n content_type: contentType,\n headers: headerObj,\n payload,\n ...(response && { status_code: response.status }),\n },\n principal\n );\n\n if (thrown) throw thrown;\n return response!;\n };\n }\n\n function query(params: UpstreamRecorderQueryParams): UpstreamRecorderQueryResult {\n if (!isPrincipalString(params.principal)) {\n throw new UpstreamRecorderScopeError(\n 'query({ principal }): principal MUST be a non-empty string. Cross-principal isolation depends on this — passing an empty / non-string value would silently match no entries and conceal misconfiguration.'\n );\n }\n const nowMs = Date.now();\n evictExpired(nowMs);\n const limit = clamp(params.limit, 1, bufferSize, DEFAULT_QUERY_LIMIT);\n const sinceMs = params.sinceTimestamp ? Date.parse(params.sinceTimestamp) : 0;\n const endpointMatcher = params.endpointPattern ? globToRegExp(params.endpointPattern) : undefined;\n\n const matched = buffer.filter(entry => {\n if (entry.principal !== params.principal) return false; // hard isolation\n if (entry.recordedAtMs < sinceMs) return false;\n if (endpointMatcher && !endpointMatcher.test(entry.call.endpoint)) return false;\n return true;\n });\n\n const items: RecordedCall[] = [];\n let total = 0;\n let dropped_count = 0;\n for (const entry of matched) {\n const projected = safeProjectRecordedCall(entry.call, params, emitError);\n if (!projected) {\n if (params.attestationMode === 'digest') dropped_count++;\n continue;\n }\n total++;\n if (items.length < limit) items.push(projected);\n }\n const since_timestamp =\n params.sinceTimestamp ?? matched[0]?.call.timestamp ?? new Date(nowMs - ttlMs).toISOString();\n return {\n items,\n total,\n truncated: total > items.length,\n since_timestamp,\n dropped_count,\n };\n }\n\n function clear(): void {\n buffer.length = 0;\n }\n\n function debug(): UpstreamRecorderDebugInfo {\n const principals = Array.from(new Set(buffer.map(e => e.principal))).sort();\n const last = buffer[buffer.length - 1];\n return {\n enabled: true,\n bufferSize,\n bufferedEntries: buffer.length,\n principals,\n lastRecordedAt: last ? last.call.timestamp : null,\n activePrincipal: principalStorage.getStore() ?? null,\n strict,\n };\n }\n\n return {\n runWithPrincipal,\n wrapFetch,\n record,\n query,\n clear,\n debug,\n enabled: true,\n };\n}\n\nfunction safeProjectRecordedCall(\n call: RawRecordedCall,\n params: UpstreamRecorderQueryParams,\n emitError?: (event: UpstreamRecorderErrorEvent) => void\n): RecordedCall | null {\n try {\n return projectRecordedCall(call, params, emitError);\n } catch (err) {\n emitError?.({ kind: 'digest_canonicalization_failed', method: call.method, endpoint: call.endpoint, err });\n return null;\n }\n}\n\nfunction projectRecordedCall(\n call: RawRecordedCall,\n params: UpstreamRecorderQueryParams,\n emitError?: (event: UpstreamRecorderErrorEvent) => void\n): RecordedCall {\n if (params.attestationMode !== 'digest') return call;\n const payloadBytes = canonicalPayloadBytes(call.payload, call.content_type);\n const payloadDigest = sha256Hex(payloadBytes);\n const identifierDigests = normalizeIdentifierDigests(params.identifierValueDigests);\n const identifierScanPayload =\n identifierDigests.length > 0\n ? parseJsonStringPayloadForScan(call.payload, call.content_type, emitError)\n : undefined;\n const matchedIdentifierDigests =\n identifierDigests.length > 0 && identifierScanPayload !== undefined\n ? collectMatchedStringLeafDigests(identifierScanPayload, new Set(identifierDigests))\n : undefined;\n const identifier_match_proofs =\n identifierDigests.length > 0 && matchedIdentifierDigests\n ? identifierDigests.map(digest => ({\n identifier_value_sha256: digest,\n found: matchedIdentifierDigests.has(digest),\n }))\n : undefined;\n\n return {\n method: call.method,\n endpoint: call.endpoint,\n url: call.url,\n host: call.host,\n path: call.path,\n content_type: call.content_type,\n attestation_mode: 'digest',\n payload_digest_sha256: payloadDigest,\n payload_length: byteLengthOf(payloadBytes),\n timestamp: call.timestamp,\n ...(call.status_code !== undefined && { status_code: call.status_code }),\n ...(call.purpose !== undefined && { purpose: call.purpose }),\n ...(identifier_match_proofs !== undefined && { identifier_match_proofs }),\n };\n}\n\nfunction normalizeIdentifierDigests(input: string[] | undefined): string[] {\n if (!Array.isArray(input)) return [];\n const out: string[] = [];\n for (const value of input) {\n if (typeof value !== 'string' || !/^[a-f0-9]{64}$/.test(value)) continue;\n if (!out.includes(value)) out.push(value);\n if (out.length >= IDENTIFIER_DIGEST_LIMIT) break;\n }\n return out;\n}\n\nfunction collectMatchedStringLeafDigests(root: unknown, wantedDigests: Set<string>): Set<string> {\n const matched = new Set<string>();\n const stack: Array<{ value: unknown; depth: number }> = [{ value: root, depth: 0 }];\n while (stack.length > 0) {\n const { value, depth } = stack.pop()!;\n if (depth > MAX_JSON_DEPTH) continue;\n if (typeof value === 'string') {\n const digest = sha256Hex(value);\n if (wantedDigests.has(digest)) {\n matched.add(digest);\n if (matched.size === wantedDigests.size) break;\n }\n } else if (Array.isArray(value)) {\n for (const item of value) stack.push({ value: item, depth: depth + 1 });\n } else if (value !== null && typeof value === 'object') {\n for (const item of Object.values(value as Record<string, unknown>)) {\n stack.push({ value: item, depth: depth + 1 });\n }\n }\n }\n return matched;\n}\n\nfunction parseJsonStringPayloadForScan(\n payload: unknown,\n contentType: string,\n emitError?: (event: UpstreamRecorderErrorEvent) => void\n): unknown | undefined {\n if (!isJsonContentType(contentType)) return undefined;\n if (typeof payload !== 'string') return payload;\n try {\n return JSON.parse(payload);\n } catch (err) {\n emitError?.({ kind: 'json_payload_parse_failed', content_type: contentType, err });\n return payload;\n }\n}\n\nfunction canonicalPayloadBytes(payload: unknown, contentType: string): string {\n if (isJsonContentType(contentType)) {\n if (typeof payload === 'string') {\n let parsed: unknown;\n try {\n parsed = JSON.parse(payload);\n } catch {\n return payload;\n }\n return canonicalJsonStringify(parsed);\n }\n return canonicalJsonStringify(payload);\n }\n if (typeof payload === 'string') return payload;\n return safeStringify(payload) ?? '';\n}\n\nfunction canonicalJsonStringify(value: unknown): string {\n assertJsonDepth(value);\n return canonicalize(value);\n}\n\nfunction assertJsonDepth(root: unknown): void {\n const stack: Array<{ value: unknown; depth: number }> = [{ value: root, depth: 0 }];\n while (stack.length > 0) {\n const { value, depth } = stack.pop()!;\n if (depth > MAX_JSON_DEPTH) {\n throw new RangeError(`JSON payload exceeds max canonicalization depth ${MAX_JSON_DEPTH}`);\n }\n if (Array.isArray(value)) {\n for (const item of value) stack.push({ value: item, depth: depth + 1 });\n } else if (value !== null && typeof value === 'object') {\n for (const item of Object.values(value as Record<string, unknown>)) {\n stack.push({ value: item, depth: depth + 1 });\n }\n }\n }\n}\n\nfunction sha256Hex(value: string): string {\n return createHash('sha256').update(value, 'utf8').digest('hex');\n}\n\n/**\n * Compute the `RecordedCall.payload_digest_sha256` value. By default this\n * applies the same body snapshot normalization, payload normalization, and\n * canonical secret-key redaction used by the recorder before hashing; pass a\n * custom redaction pattern and `maxPayloadBytes` when your recorder uses matching\n * options:\n *\n * - `createUpstreamRecorder({ redactPattern })` → `computePayloadDigestSha256(..., { redactPattern })`\n * - `createUpstreamRecorder({ maxPayloadBytes })` → `computePayloadDigestSha256(..., { maxPayloadBytes })`\n *\n * Prefer `{ prenormalized: true }` only when the payload has already been\n * normalized/redacted exactly as the recorder would store it; legacy `false`\n * remains accepted as the same prenormalized sentinel. The prenormalized path\n * skips redaction, so the helper rejects secret-shaped keys whose values are\n * not already the literal `\"[redacted]\"` marker or an explicit null\n * placeholder. For form-encoded bodies, duplicate secret-shaped keys are also\n * rejected because last-wins maps cannot prove that every original value was\n * inspected before hashing.\n *\n * JSON content is serialized with RFC 8785 JCS before hashing. When\n * `contentType` is JSON-shaped and `payload` is a string, the helper parses\n * it first so semantically equivalent JSON strings and objects hash to the\n * same value. On the normalizing path, an unparseable JSON-shaped string is\n * treated as the emitted body bytes and hashed verbatim after best-effort\n * redaction. On the prenormalized path, malformed JSON strings throw because\n * their secret-key structure cannot be proven safe. Unsupported JSON values\n * and payloads deeper than the recorder's depth cap throw rather than\n * producing a non-canonical digest.\n *\n * The returned digest is lowercase hex, matching the 3.1\n * `query_upstream_traffic` wire contract.\n */\nexport function computePayloadDigestSha256(\n payload: unknown,\n contentType?: string,\n options?: PayloadDigestOptions\n): string;\n/**\n * @deprecated Pass `{ redactPattern: /.../ }` instead of the bare `RegExp`\n * form. The legacy form remains accepted for this major.\n */\nexport function computePayloadDigestSha256(payload: unknown, contentType: string | undefined, options: RegExp): string;\n/**\n * @deprecated Pass `{ prenormalized: true }` instead of `false`. The legacy\n * form remains accepted for this major.\n */\nexport function computePayloadDigestSha256(payload: unknown, contentType: string | undefined, options: false): string;\nexport function computePayloadDigestSha256(\n payload: unknown,\n contentType = 'application/json',\n options: RegExp | false | PayloadDigestOptions = SECRET_KEY_PATTERN\n): string {\n const redactPattern =\n options instanceof RegExp || options === false\n ? options === false\n ? false\n : normalizeSecretKeyPattern(options)\n : options?.prenormalized\n ? false\n : options?.redactPattern === false\n ? false\n : normalizeSecretKeyPattern(options?.redactPattern ?? SECRET_KEY_PATTERN);\n const prenormalizedSafetyPattern =\n typeof options === 'object' &&\n options !== null &&\n !(options instanceof RegExp) &&\n options.redactPattern instanceof RegExp\n ? normalizeSecretKeyPattern(options.redactPattern)\n : SECRET_KEY_PATTERN;\n const maxPayloadBytes =\n typeof options === 'object' && options !== null && !(options instanceof RegExp)\n ? clamp(options.maxPayloadBytes, 0, 16 * 1024 * 1024, DEFAULT_MAX_PAYLOAD_BYTES)\n : DEFAULT_MAX_PAYLOAD_BYTES;\n try {\n if (\n typeof options === 'object' &&\n options !== null &&\n !(options instanceof RegExp) &&\n options.redactPattern === false &&\n options.prenormalized !== true\n ) {\n throw new PayloadDigestError('PayloadDigestOptions.redactPattern=false requires prenormalized=true');\n }\n const payloadForDigest =\n redactPattern === false\n ? assertPrenormalizedPayloadSafe(payload, contentType, prenormalizedSafetyPattern)\n : normalizeRecordedPayload(\n normalizeFetchPayloadInput(payload, contentType),\n contentType,\n redactPattern,\n maxPayloadBytes\n );\n return sha256Hex(canonicalPayloadBytes(payloadForDigest, contentType));\n } catch (err) {\n if (err instanceof PayloadDigestError) throw err;\n throw new PayloadDigestError(err instanceof Error ? err.message : 'Payload digest canonicalization failed', err);\n }\n}\n\nexport type PayloadDigestOptions = {\n /**\n * Custom redaction pattern. Passing `false` is accepted only with\n * `prenormalized: true`; otherwise it would silently bypass redaction.\n */\n redactPattern?: RegExp | false;\n /**\n * Match `createUpstreamRecorder({ maxPayloadBytes })` when computing\n * digests outside the recorder.\n */\n maxPayloadBytes?: number;\n /**\n * Set only for payloads that have already been normalized and redacted.\n * The helper skips redaction but still scans secret-shaped keys, rejects\n * malformed JSON strings, and rejects duplicate secret-shaped form keys.\n */\n prenormalized?: boolean;\n};\n\nfunction assertPrenormalizedPayloadSafe(payload: unknown, contentType: string, pattern: RegExp): unknown {\n let scanTarget = payload;\n if (typeof payload === 'string' && isJsonContentType(contentType)) {\n try {\n scanTarget = JSON.parse(payload);\n } catch {\n throw new PayloadDigestError(\n 'Prenormalized JSON payload is malformed; hash the recorder-normalized payload or omit prenormalized.'\n );\n }\n } else if (typeof payload === 'string' && isFormUrlEncoded(contentType)) {\n assertPrenormalizedFormUrlEncodedSafe(payload, pattern);\n return payload;\n }\n const unsafePath = findUnredactedSecretPath(scanTarget, pattern);\n if (unsafePath) {\n throw new PayloadDigestError(\n `Prenormalized payload contains unredacted secret-shaped key \"${unsafePath}\"; hash the recorder-normalized payload or omit prenormalized.`\n );\n }\n return payload;\n}\n\nfunction assertPrenormalizedFormUrlEncodedSafe(body: string, pattern: RegExp): void {\n const seenSecretKeys = new Set<string>();\n const params = Array.from(new URLSearchParams(body));\n for (const [key] of params) {\n if (!secretKeyPatternMatches(pattern, key)) continue;\n const normalizedKey = key.toLowerCase();\n if (seenSecretKeys.has(normalizedKey)) {\n throw new PayloadDigestError(\n `Prenormalized form payload contains duplicate secret-shaped key \"${key}\"; hash the recorder-normalized payload or omit prenormalized.`\n );\n }\n seenSecretKeys.add(normalizedKey);\n }\n for (const [key, value] of params) {\n if (!secretKeyPatternMatches(pattern, key)) continue;\n if (!isSafelyRedactedSecretValue(value)) {\n throw new PayloadDigestError(\n `Prenormalized payload contains unredacted secret-shaped key \"${key}\"; hash the recorder-normalized payload or omit prenormalized.`\n );\n }\n }\n}\n\nfunction findUnredactedSecretPath(value: unknown, pattern: RegExp): string | null {\n const stack: Array<{ value: unknown; path: string }> = [{ value, path: '' }];\n const seen = new WeakSet<object>();\n while (stack.length > 0) {\n const { value: current, path } = stack.pop()!;\n if (!current || typeof current !== 'object') continue;\n if (seen.has(current)) continue;\n seen.add(current);\n\n if (Array.isArray(current)) {\n for (let i = current.length - 1; i >= 0; i--) {\n stack.push({ value: current[i], path: `${path}[${i}]` });\n }\n continue;\n }\n\n const entries = Object.entries(current as Record<string, unknown>);\n for (let i = entries.length - 1; i >= 0; i--) {\n const [key, childValue] = entries[i]!;\n const childPath = path ? `${path}.${key}` : key;\n if (secretKeyPatternMatches(pattern, key) && !isSafelyRedactedSecretValue(childValue)) return childPath;\n stack.push({ value: childValue, path: childPath });\n }\n }\n return null;\n}\n\nfunction isSafelyRedactedSecretValue(value: unknown): boolean {\n return value === '[redacted]' || value === null;\n}\n\nfunction normalizeFetchPayloadInput(payload: unknown, contentType: string): unknown {\n if (payload === undefined) return undefined;\n if (typeof payload === 'string') {\n if (!isJsonContentType(contentType)) return payload;\n try {\n return JSON.parse(payload);\n } catch {\n return payload;\n }\n }\n if (payload instanceof URLSearchParams) return payload.toString();\n if (typeof FormData !== 'undefined' && payload instanceof FormData) {\n const out: Record<string, unknown> = {};\n payload.forEach((v, k) => {\n out[k] = typeof v === 'string' ? v : '[file]';\n });\n return out;\n }\n return payload;\n}\n\nfunction normalizeRecordedPayload(\n payload: unknown,\n contentType: string,\n redactPattern: RegExp,\n maxPayloadBytes: number\n): unknown {\n if (payload === undefined) {\n // Raw-mode `RecordedCall.payload` is required by the 3.1 controller\n // response schema. GET/HEAD-style calls with no body therefore emit an\n // empty object instead of omitting the field.\n return {};\n }\n if (payload === null) return payload;\n\n // Binary-shaped bodies — replace with a marker. Adopters that need\n // the raw bytes recorded for diagnostics can stringify before\n // calling `record()`.\n if (typeof Buffer !== 'undefined' && Buffer.isBuffer(payload)) {\n return `[binary ${payload.length} bytes]`;\n }\n if (typeof Blob !== 'undefined' && payload instanceof Blob) {\n return `[binary ${payload.size} bytes]`;\n }\n if (payload instanceof ArrayBuffer) {\n return `[binary ${payload.byteLength} bytes]`;\n }\n if (ArrayBuffer.isView(payload)) {\n return `[binary ${payload.byteLength} bytes]`;\n }\n\n if (typeof payload === 'string') {\n if (isJsonContentType(contentType)) {\n let parsed: unknown;\n try {\n parsed = JSON.parse(payload);\n } catch {\n // Malformed JSON strings remain raw strings so diagnostics keep the\n // original body shape instead of pretending the payload was absent.\n return cap(redactJsonLikeSecretValues(payload, redactPattern), maxPayloadBytes);\n }\n const redacted = redactSecrets(parsed, redactPattern);\n assertJsonDepth(redacted);\n const json = safeStringify(redacted);\n if (json && maxPayloadBytes > 0 && byteLengthOf(json) > maxPayloadBytes) {\n return `[truncated ${byteLengthOf(json)} bytes]`;\n }\n return redacted;\n }\n // Form-urlencoded redaction: parse, redact, re-stringify so\n // `access_token=...` bodies don't slip through unredacted.\n if (isFormUrlEncoded(contentType)) {\n return cap(redactFormUrlEncoded(payload, redactPattern), maxPayloadBytes);\n }\n return cap(payload, maxPayloadBytes);\n }\n\n const redacted = redactSecrets(payload, redactPattern);\n assertJsonDepth(redacted);\n const json = safeStringify(redacted);\n if (json && maxPayloadBytes > 0 && byteLengthOf(json) > maxPayloadBytes) {\n return `[truncated ${byteLengthOf(json)} bytes]`;\n }\n return redacted;\n}\n\n/**\n * Project a `recorder.query()` result onto the spec wire shape returned\n * by `comply_test_controller`'s `query_upstream_traffic` scenario\n * (`UpstreamTrafficSuccess` in `comply-test-controller-response.json`,\n * spec PR adcontextprotocol/adcp#3816). Eliminates the\n * `items → recorded_calls` / `total → total_count` field-rename footgun\n * — adopters return this directly:\n *\n * ```ts\n * scenarios: {\n * query_upstream_traffic: ({ params }, ctx) =>\n * toQueryUpstreamTrafficResponse(\n * recorder.query({\n * principal: resolvePrincipal(ctx),\n * sinceTimestamp: params?.since_timestamp,\n * endpointPattern: params?.endpoint_pattern,\n * limit: params?.limit,\n * })\n * ),\n * }\n * ```\n */\nexport function toQueryUpstreamTrafficResponse(result: UpstreamRecorderQueryResult): QueryUpstreamTrafficResponse {\n return {\n success: true,\n recorded_calls: result.items,\n total_count: result.total,\n truncated: result.truncated,\n since_timestamp: result.since_timestamp,\n };\n}\n\n/**\n * No-op recorder returned when `enabled: false`. Every method is a\n * pass-through / empty-result. Production builds drop in this object\n * with zero per-call overhead beyond the initial factory call.\n */\nfunction makeNoopRecorder(): UpstreamRecorder {\n return {\n runWithPrincipal: <T>(_p: string, fn: () => T | Promise<T>): Promise<T> => Promise.resolve(fn()),\n wrapFetch: (originalFetch: typeof globalThis.fetch): typeof globalThis.fetch => originalFetch,\n record: () => undefined,\n query: (params: UpstreamRecorderQueryParams): UpstreamRecorderQueryResult => ({\n items: [],\n total: 0,\n truncated: false,\n since_timestamp: params.sinceTimestamp ?? new Date(0).toISOString(),\n dropped_count: 0,\n }),\n clear: () => undefined,\n debug: (): UpstreamRecorderDebugInfo => ({\n enabled: false,\n bufferSize: 0,\n bufferedEntries: 0,\n principals: [],\n lastRecordedAt: null,\n activePrincipal: null,\n strict: false,\n }),\n enabled: false,\n };\n}\n\nlet warnedAboutProduction = false;\nfunction warnIfEnabledInProduction(): void {\n if (warnedAboutProduction) return;\n if (typeof process === 'undefined' || !process.env) return;\n if (process.env.NODE_ENV !== 'production') return;\n if (process.env.ADCP_RECORDER_PRODUCTION_ACK === '1') return;\n warnedAboutProduction = true;\n // eslint-disable-next-line no-console\n console.warn(\n '[adcp/upstream-recorder] enabled: true in NODE_ENV=production. ' +\n 'The recorder buffers outbound HTTP calls in-memory — sandbox-only by design. ' +\n 'Set enabled: false (recommended) or ADCP_RECORDER_PRODUCTION_ACK=1 to silence.'\n );\n}\n\n/**\n * Read the request body off a fetch call site without consuming the\n * input (when the input is a `Request`, we'd lock its stream by reading\n * directly). Returns `undefined` for bodies the recorder can't snapshot\n * cheaply.\n */\nasync function readBody(\n input: RequestInfo | URL,\n init: RequestInit | undefined,\n contentType: string\n): Promise<unknown> {\n let raw: unknown;\n\n if (init?.body !== undefined && init.body !== null) {\n raw = init.body;\n } else if (input instanceof Request) {\n try {\n const clone = input.clone();\n if (contentTypeBase(contentType) === 'multipart/form-data') {\n raw = await clone.formData();\n } else {\n raw = await clone.text();\n }\n } catch {\n raw = undefined;\n }\n } else {\n raw = undefined;\n }\n\n if (raw === undefined) return undefined;\n if (typeof raw === 'string') {\n if (!isJsonContentType(contentType)) return raw;\n try {\n return JSON.parse(raw);\n } catch {\n return raw;\n }\n }\n // FormData / URLSearchParams stringify cleanly enough for diagnostic value.\n if (raw instanceof URLSearchParams) return raw.toString();\n if (typeof FormData !== 'undefined' && raw instanceof FormData) {\n const out: Record<string, unknown> = {};\n raw.forEach((v, k) => {\n out[k] = typeof v === 'string' ? v : '[file]';\n });\n return out;\n }\n // Object / array literal already, or a Buffer / Blob / TypedArray /\n // ArrayBuffer the adopter passed in directly. Pass through — the\n // redaction step below detects binary types and substitutes markers\n // before they sit in the buffer.\n if (typeof raw === 'object') return raw;\n return String(raw);\n}\n\nfunction isJsonContentType(contentType: string | undefined): boolean {\n const base = contentTypeBase(contentType);\n return base === 'application/json' || /\\+json$/.test(base);\n}\n\nfunction isFormUrlEncoded(contentType: string | undefined): boolean {\n return contentTypeBase(contentType) === 'application/x-www-form-urlencoded';\n}\n\nfunction contentTypeBase(contentType: string | undefined): string {\n if (!contentType) return '';\n return contentType.split(';')[0]?.trim().toLowerCase() ?? '';\n}\n\nfunction redactFormUrlEncoded(body: string, pattern: RegExp): string {\n try {\n const params = new URLSearchParams(body);\n const out = new URLSearchParams();\n params.forEach((v, k) => {\n out.append(k, secretKeyPatternMatches(pattern, k.toLowerCase()) ? '[redacted]' : v);\n });\n return out.toString();\n } catch {\n return body;\n }\n}\n\nfunction redactJsonLikeSecretValues(body: string, pattern: RegExp): string {\n // Best-effort diagnostic scrub for malformed JSON strings. The output is\n // not guaranteed to be valid JSON; the invariant is that secret-shaped keys\n // with scalar/string values are not stored verbatim. Because malformed JSON\n // has no trustworthy parse tree, object/array-valued secret entries are\n // replaced wholesale rather than traversed.\n let out = '';\n let i = 0;\n while (i < body.length) {\n if (body[i] !== '\"') {\n out += body[i++];\n continue;\n }\n\n const keyToken = readJsonStringToken(body, i);\n if (!keyToken) {\n out += body.slice(i);\n break;\n }\n\n let colon = keyToken.end;\n while (colon < body.length && isJsonWhitespace(body[colon])) colon++;\n if (body[colon] !== ':') {\n out += body.slice(i, keyToken.end);\n i = keyToken.end;\n continue;\n }\n\n let key: unknown;\n try {\n key = JSON.parse(keyToken.literal);\n } catch {\n out += body.slice(i, keyToken.end);\n i = keyToken.end;\n continue;\n }\n\n const valueStart = colon + 1;\n let value = valueStart;\n while (value < body.length && isJsonWhitespace(body[value])) value++;\n out += body.slice(i, value);\n if (typeof key !== 'string' || !secretKeyPatternMatches(pattern, key)) {\n i = value;\n continue;\n }\n\n out += '\"[redacted]\"';\n i = skipJsonLikeValue(body, value);\n }\n return out;\n}\n\nfunction readJsonStringToken(input: string, start: number): { literal: string; end: number } | null {\n for (let i = start + 1; i < input.length; i++) {\n const ch = input[i];\n if (ch === '\"') return { literal: input.slice(start, i + 1), end: i + 1 };\n if (ch === '\\\\') i++;\n }\n return null;\n}\n\nfunction skipJsonLikeValue(input: string, start: number): number {\n if (input[start] === '\"') {\n const token = readJsonStringToken(input, start);\n return token?.end ?? input.length;\n }\n if (input[start] === '[' || input[start] === '{') {\n const opener = input[start];\n const closer = opener === '[' ? ']' : '}';\n let depth = 0;\n for (let i = start; i < input.length; i++) {\n const ch = input[i];\n if (ch === '\"') {\n const token = readJsonStringToken(input, i);\n if (!token) return input.length;\n i = token.end - 1;\n continue;\n }\n if (ch === opener) depth++;\n if (ch === closer) {\n depth--;\n if (depth === 0) return i + 1;\n }\n }\n return input.length;\n }\n let i = start;\n while (i < input.length && input[i] !== ',' && input[i] !== '}' && input[i] !== ']' && !isJsonWhitespace(input[i])) {\n i++;\n }\n return i;\n}\n\nfunction isJsonWhitespace(ch: string | undefined): boolean {\n return ch === ' ' || ch === '\\n' || ch === '\\r' || ch === '\\t';\n}\n\nfunction safeStringify(value: unknown): string | undefined {\n try {\n return JSON.stringify(value);\n } catch {\n return undefined;\n }\n}\n\nfunction byteLengthOf(s: string): number {\n if (typeof Buffer !== 'undefined') return Buffer.byteLength(s, 'utf8');\n // Fallback — rough UTF-16 count.\n return s.length;\n}\n\nfunction payloadWireLength(value: unknown): number {\n if (typeof value === 'string') return byteLengthOf(value);\n const json = safeStringify(value);\n return json ? byteLengthOf(json) : 0;\n}\n\nfunction cap(s: string, maxBytes: number): string {\n if (maxBytes <= 0) return s;\n if (byteLengthOf(s) <= maxBytes) return s;\n return `[truncated ${byteLengthOf(s)} bytes]`;\n}\n"],"mappings":"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","names":["redacted","json","i"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/upstream-recorder/recorder.ts"],"sourcesContent":["/**\n * `createUpstreamRecorder` implementation. See `./types.ts` for the public\n * surface and `./README` (file header on `index.ts`) for the why.\n */\n\nimport { AsyncLocalStorage } from 'node:async_hooks';\nimport { createHash } from 'node:crypto';\nimport { isRegExp } from 'node:util/types';\nimport {\n normalizeSecretKeyPattern,\n redactSecrets,\n secretKeyPatternMatches,\n SECRET_KEY_PATTERN,\n} from '../utils/redact-secrets';\nimport { globToRegExp } from '../utils/glob';\nimport { canonicalize } from '../utils/jcs';\nimport { MAX_JSON_DEPTH } from '../utils/json-depth';\nimport { IDENTIFIER_DIGEST_LIMIT } from './constants';\nimport {\n UpstreamRecorderScopeError,\n type QueryUpstreamTrafficResponse,\n type RecordInput,\n type RawRecordedCall,\n type RecordedCall,\n type UpstreamRecorder,\n type UpstreamRecorderDebugInfo,\n type UpstreamRecorderErrorEvent,\n type UpstreamRecorderOptions,\n type UpstreamRecorderQueryParams,\n type UpstreamRecorderQueryResult,\n} from './types';\n\nconst DEFAULT_BUFFER_SIZE = 1000;\nconst DEFAULT_TTL_MS = 60 * 60 * 1000; // 1h\nconst DEFAULT_QUERY_LIMIT = 100;\nconst DEFAULT_MAX_PAYLOAD_BYTES = 65_536; // mirrors spec's `recorded_calls[].payload.maxLength`\nconst MAX_BUFFER_SIZE = 100_000;\nconst MAX_TTL_MS = 24 * 60 * 60 * 1000; // 24h\nconst VALID_PURPOSES = new Set([\n 'platform_primary',\n 'measurement',\n 'attribution',\n 'creative_serving',\n 'identity',\n 'other',\n]);\n\nexport class PayloadDigestError extends Error {\n cause: unknown;\n\n constructor(message: string, cause?: unknown) {\n super(message);\n this.name = 'PayloadDigestError';\n this.cause = cause;\n }\n}\n\n/**\n * Wrapped per-call entry stored in the buffer. Carries the public\n * `RecordedCall` plus the principal it was recorded under (kept off the\n * public type so cross-principal isolation is enforced at query time and\n * the principal never appears in the controller-response payload).\n */\ninterface InternalEntry {\n call: RawRecordedCall;\n principal: string;\n /** ms-since-epoch cached for TTL eviction; computed at insert time. */\n recordedAtMs: number;\n}\n\nfunction clamp(n: number | undefined, lo: number, hi: number, fallback: number): number {\n if (typeof n !== 'number' || !Number.isFinite(n)) return fallback;\n // Out-of-range values (zero / negative / above ceiling) revert to the\n // default rather than silently saturating at the limit — a typo'd\n // `bufferSize: -10` silently saturating to `1` would drop nearly\n // everything; the default is a much safer failure mode.\n if (n < lo || n > hi) return fallback;\n return n;\n}\n\nfunction isPrincipalString(p: unknown): p is string {\n return typeof p === 'string' && p.length > 0;\n}\n\n/**\n * Build the recorder. Producer-side companion to the\n * `runner-output-contract.yaml` v2.0.0 `upstream_traffic` storyboard\n * check (spec PR adcontextprotocol/adcp#3816).\n */\nexport function createUpstreamRecorder(options: UpstreamRecorderOptions = {}): UpstreamRecorder {\n const enabled = options.enabled ?? true;\n // Disabled-recorder fast-path: skip every wrapping cost. Production\n // builds get a no-op object whose methods compile to inlinable returns.\n if (!enabled) return makeNoopRecorder();\n\n // Production-enable footgun guard: when adopters ship with `enabled:\n // true` in `NODE_ENV=production` (forgot the gate, or the gate is\n // mis-evaluated), emit a one-time warning. ADCP_RECORDER_PRODUCTION_ACK=1\n // is the explicit acknowledgment escape hatch for the rare adopters\n // who legitimately want recording in prod.\n warnIfEnabledInProduction();\n\n const redactPattern = normalizeSecretKeyPattern(options.redactPattern ?? SECRET_KEY_PATTERN);\n const bufferSize = clamp(options.bufferSize, 1, MAX_BUFFER_SIZE, DEFAULT_BUFFER_SIZE);\n const ttlMs = clamp(options.ttlMs, 1, MAX_TTL_MS, DEFAULT_TTL_MS);\n const maxPayloadBytes = clamp(options.maxPayloadBytes, 0, 16 * 1024 * 1024, DEFAULT_MAX_PAYLOAD_BYTES);\n const purpose = options.purpose;\n const strict = options.strict === true;\n const onError = options.onError;\n\n // Buffer: ordered by insertion (== timestamp ascending). Eviction is\n // FIFO when full or TTL-prune at record time.\n const buffer: InternalEntry[] = [];\n\n // Active-principal context. Set by `runWithPrincipal`; read by the\n // wrapped fetch and by `record` when no explicit principal is passed.\n const principalStorage = new AsyncLocalStorage<string>();\n\n // ────────────────────────────────────────────────────────────\n // Internal helpers\n // ────────────────────────────────────────────────────────────\n\n function emitError(event: UpstreamRecorderErrorEvent): void {\n if (!onError) return;\n try {\n onError(event);\n } catch {\n // onError MUST NOT crash the recorder — silent.\n }\n }\n\n function evictExpired(nowMs: number): void {\n if (buffer.length === 0) return;\n const cutoff = nowMs - ttlMs;\n let idx = 0;\n while (idx < buffer.length && buffer[idx]!.recordedAtMs < cutoff) idx++;\n if (idx > 0) buffer.splice(0, idx);\n }\n\n function pushEntry(entry: InternalEntry): void {\n buffer.push(entry);\n while (buffer.length > bufferSize) buffer.shift();\n }\n\n function applyRedactionToHeaders(headers: Record<string, string> | undefined): Record<string, string> {\n if (!headers) return {};\n const out: Record<string, string> = {};\n for (const [k, v] of Object.entries(headers)) {\n const lower = k.toLowerCase();\n out[lower] = secretKeyPatternMatches(redactPattern, lower) ? '[redacted]' : v;\n }\n return out;\n }\n\n /**\n * Apply per-key redaction to the body. JSON bodies (objects + arrays)\n * walk through `redactSecrets`. Form-urlencoded strings parse +\n * key-redact + re-stringify so `access_token=xxx` is caught without\n * the adopter pre-redacting. Other string types pass through. Binary\n * types (Buffer / Blob / ArrayBuffer / TypedArray) are replaced with\n * a marker — the buffer should not hold raw bytes whose JSON-shape\n * is misleading downstream.\n */\n function applyRedactionToPayload(payload: unknown, contentType: string): { value: unknown; bytes: number } {\n const value = normalizeRecordedPayload(payload, contentType, redactPattern, maxPayloadBytes);\n return { value, bytes: payloadWireLength(value) };\n }\n\n function classifyPurpose(\n method: string,\n url: string,\n host: string,\n path: string,\n headers: Record<string, string>\n ): string | undefined {\n if (!purpose) return undefined;\n try {\n const value = purpose({ method, url, host, path, headers }) as unknown;\n if (value === undefined) return undefined;\n if (typeof value === 'string' && VALID_PURPOSES.has(value)) return value;\n emitError({ kind: 'classifier_invalid_purpose', purpose: typeof value === 'string' ? value : String(value) });\n return undefined;\n } catch (err) {\n emitError({ kind: 'classifier_threw', err });\n return undefined;\n }\n }\n\n function buildRecordedCall(input: RecordInput, nowMs: number): RawRecordedCall | null {\n try {\n const url = input.url;\n let host = '';\n let pathPart = '';\n try {\n const parsed = new URL(url);\n host = parsed.host;\n pathPart = parsed.pathname;\n } catch {\n emitError({ kind: 'url_parse_failed', url });\n }\n const redactedHeaders = applyRedactionToHeaders(input.headers);\n const purposeTag = classifyPurpose(input.method, url, host, pathPart, redactedHeaders);\n const { value: payload, bytes: payloadLength } = applyRedactionToPayload(input.payload, input.content_type);\n return {\n method: input.method,\n endpoint: `${input.method} ${url}`,\n url,\n host,\n path: pathPart,\n content_type: input.content_type,\n attestation_mode: 'raw',\n payload,\n payload_length: payloadLength,\n timestamp: new Date(nowMs).toISOString(),\n ...(input.status_code !== undefined && { status_code: input.status_code }),\n ...(purposeTag !== undefined && { purpose: purposeTag }),\n };\n } catch (err) {\n // Hostile / buggy payload (throwing getter, etc.). Recording MUST\n // never break the adapter call site.\n emitError({ kind: 'payload_build_failed', err });\n return null;\n }\n }\n\n // ────────────────────────────────────────────────────────────\n // Public methods\n // ────────────────────────────────────────────────────────────\n\n function runWithPrincipal<T>(principal: string, fn: () => T | Promise<T>): Promise<T> {\n if (!isPrincipalString(principal)) {\n return Promise.reject(\n new UpstreamRecorderScopeError(\n 'runWithPrincipal: principal MUST be a non-empty string. Pass the same identifier you receive in your comply_test_controller handler.'\n )\n );\n }\n return Promise.resolve(principalStorage.run(principal, fn));\n }\n\n function record(input: RecordInput, explicitPrincipal?: string): void {\n const principal = explicitPrincipal ?? principalStorage.getStore();\n if (!isPrincipalString(principal)) {\n if (strict) {\n throw new UpstreamRecorderScopeError(\n `record() called outside runWithPrincipal scope (method=${input.method}, url=${input.url}). Wrap the call site or pass an explicit principal.`\n );\n }\n emitError({ kind: 'unscoped_record', method: input.method, url: input.url });\n return;\n }\n const nowMs = Date.now();\n evictExpired(nowMs);\n const call = buildRecordedCall(input, nowMs);\n if (!call) return;\n pushEntry({ call, principal, recordedAtMs: nowMs });\n }\n\n function wrapFetch(originalFetch: typeof globalThis.fetch): typeof globalThis.fetch {\n return async function wrappedFetch(input: RequestInfo | URL, init?: RequestInit): Promise<Response> {\n const principal = principalStorage.getStore();\n // No active principal: pass through unchanged in non-strict mode.\n // In strict mode, a fetch outside scope is the same authoring bug\n // as `record()` outside scope and surfaces the same way.\n if (!principal) {\n if (strict) {\n throw new UpstreamRecorderScopeError(\n `wrapFetch invoked outside runWithPrincipal scope (input=${typeof input === 'string' ? input : input instanceof URL ? input.toString() : input.url}). Wrap the call site.`\n );\n }\n return originalFetch(input as Parameters<typeof globalThis.fetch>[0], init);\n }\n\n const method = (init?.method ?? (input instanceof Request ? input.method : 'GET')).toUpperCase();\n const url = typeof input === 'string' ? input : input instanceof URL ? input.toString() : input.url;\n\n // Header normalization — fetch's Headers form vs init.headers Record vs Request body.\n const headerObj: Record<string, string> = {};\n if (init?.headers) {\n const h = init.headers;\n if (h instanceof Headers) {\n h.forEach((v, k) => {\n headerObj[k.toLowerCase()] = v;\n });\n } else if (Array.isArray(h)) {\n for (const [k, v] of h) headerObj[k.toLowerCase()] = v;\n } else {\n for (const [k, v] of Object.entries(h as Record<string, string>)) headerObj[k.toLowerCase()] = v;\n }\n } else if (input instanceof Request) {\n input.headers.forEach((v, k) => {\n headerObj[k.toLowerCase()] = v;\n });\n }\n\n const contentType = headerObj['content-type'] ?? '';\n const payload = await readBody(input, init, contentType);\n\n // Fire the actual call; record after we have a status_code. On\n // throw, we still record the attempt with no status_code so the\n // adopter can see the call was made.\n let response: Response | undefined;\n let thrown: unknown;\n try {\n response = await originalFetch(input as Parameters<typeof globalThis.fetch>[0], init);\n } catch (err) {\n thrown = err;\n }\n\n record(\n {\n method,\n url,\n content_type: contentType,\n headers: headerObj,\n payload,\n ...(response && { status_code: response.status }),\n },\n principal\n );\n\n if (thrown) throw thrown;\n return response!;\n };\n }\n\n function query(params: UpstreamRecorderQueryParams): UpstreamRecorderQueryResult {\n if (!isPrincipalString(params.principal)) {\n throw new UpstreamRecorderScopeError(\n 'query({ principal }): principal MUST be a non-empty string. Cross-principal isolation depends on this — passing an empty / non-string value would silently match no entries and conceal misconfiguration.'\n );\n }\n const nowMs = Date.now();\n evictExpired(nowMs);\n const limit = clamp(params.limit, 1, bufferSize, DEFAULT_QUERY_LIMIT);\n const sinceMs = params.sinceTimestamp ? Date.parse(params.sinceTimestamp) : 0;\n const endpointMatcher = params.endpointPattern ? globToRegExp(params.endpointPattern) : undefined;\n\n const matched = buffer.filter(entry => {\n if (entry.principal !== params.principal) return false; // hard isolation\n if (entry.recordedAtMs < sinceMs) return false;\n if (endpointMatcher && !endpointMatcher.test(entry.call.endpoint)) return false;\n return true;\n });\n\n const items: RecordedCall[] = [];\n let total = 0;\n let dropped_count = 0;\n for (const entry of matched) {\n const projected = safeProjectRecordedCall(entry.call, params, emitError);\n if (!projected) {\n if (params.attestationMode === 'digest') dropped_count++;\n continue;\n }\n total++;\n if (items.length < limit) items.push(projected);\n }\n const since_timestamp =\n params.sinceTimestamp ?? matched[0]?.call.timestamp ?? new Date(nowMs - ttlMs).toISOString();\n return {\n items,\n total,\n truncated: total > items.length,\n since_timestamp,\n dropped_count,\n };\n }\n\n function clear(): void {\n buffer.length = 0;\n }\n\n function debug(): UpstreamRecorderDebugInfo {\n const principals = Array.from(new Set(buffer.map(e => e.principal))).sort();\n const last = buffer[buffer.length - 1];\n return {\n enabled: true,\n bufferSize,\n bufferedEntries: buffer.length,\n principals,\n lastRecordedAt: last ? last.call.timestamp : null,\n activePrincipal: principalStorage.getStore() ?? null,\n strict,\n };\n }\n\n return {\n runWithPrincipal,\n wrapFetch,\n record,\n query,\n clear,\n debug,\n enabled: true,\n };\n}\n\nfunction safeProjectRecordedCall(\n call: RawRecordedCall,\n params: UpstreamRecorderQueryParams,\n emitError?: (event: UpstreamRecorderErrorEvent) => void\n): RecordedCall | null {\n try {\n return projectRecordedCall(call, params, emitError);\n } catch (err) {\n emitError?.({ kind: 'digest_canonicalization_failed', method: call.method, endpoint: call.endpoint, err });\n return null;\n }\n}\n\nfunction projectRecordedCall(\n call: RawRecordedCall,\n params: UpstreamRecorderQueryParams,\n emitError?: (event: UpstreamRecorderErrorEvent) => void\n): RecordedCall {\n if (params.attestationMode !== 'digest') return call;\n const payloadBytes = canonicalPayloadBytes(call.payload, call.content_type);\n const payloadDigest = sha256Hex(payloadBytes);\n const identifierDigests = normalizeIdentifierDigests(params.identifierValueDigests);\n const identifierScanPayload =\n identifierDigests.length > 0\n ? parseJsonStringPayloadForScan(call.payload, call.content_type, emitError)\n : undefined;\n const matchedIdentifierDigests =\n identifierDigests.length > 0 && identifierScanPayload !== undefined\n ? collectMatchedStringLeafDigests(identifierScanPayload, new Set(identifierDigests))\n : undefined;\n const identifier_match_proofs =\n identifierDigests.length > 0 && matchedIdentifierDigests\n ? identifierDigests.map(digest => ({\n identifier_value_sha256: digest,\n found: matchedIdentifierDigests.has(digest),\n }))\n : undefined;\n\n return {\n method: call.method,\n endpoint: call.endpoint,\n url: call.url,\n host: call.host,\n path: call.path,\n content_type: call.content_type,\n attestation_mode: 'digest',\n payload_digest_sha256: payloadDigest,\n payload_length: byteLengthOf(payloadBytes),\n timestamp: call.timestamp,\n ...(call.status_code !== undefined && { status_code: call.status_code }),\n ...(call.purpose !== undefined && { purpose: call.purpose }),\n ...(identifier_match_proofs !== undefined && { identifier_match_proofs }),\n };\n}\n\nfunction normalizeIdentifierDigests(input: string[] | undefined): string[] {\n if (!Array.isArray(input)) return [];\n const out: string[] = [];\n for (const value of input) {\n if (typeof value !== 'string' || !/^[a-f0-9]{64}$/.test(value)) continue;\n if (!out.includes(value)) out.push(value);\n if (out.length >= IDENTIFIER_DIGEST_LIMIT) break;\n }\n return out;\n}\n\nfunction collectMatchedStringLeafDigests(root: unknown, wantedDigests: Set<string>): Set<string> {\n const matched = new Set<string>();\n const stack: Array<{ value: unknown; depth: number }> = [{ value: root, depth: 0 }];\n while (stack.length > 0) {\n const { value, depth } = stack.pop()!;\n if (depth > MAX_JSON_DEPTH) continue;\n if (typeof value === 'string') {\n const digest = sha256Hex(value);\n if (wantedDigests.has(digest)) {\n matched.add(digest);\n if (matched.size === wantedDigests.size) break;\n }\n } else if (Array.isArray(value)) {\n for (const item of value) stack.push({ value: item, depth: depth + 1 });\n } else if (value !== null && typeof value === 'object') {\n for (const item of Object.values(value as Record<string, unknown>)) {\n stack.push({ value: item, depth: depth + 1 });\n }\n }\n }\n return matched;\n}\n\nfunction parseJsonStringPayloadForScan(\n payload: unknown,\n contentType: string,\n emitError?: (event: UpstreamRecorderErrorEvent) => void\n): unknown | undefined {\n if (!isJsonContentType(contentType)) return undefined;\n if (typeof payload !== 'string') return payload;\n try {\n return JSON.parse(payload);\n } catch (err) {\n emitError?.({ kind: 'json_payload_parse_failed', content_type: contentType, err });\n return payload;\n }\n}\n\nfunction canonicalPayloadBytes(payload: unknown, contentType: string): string {\n if (isJsonContentType(contentType)) {\n if (typeof payload === 'string') {\n let parsed: unknown;\n try {\n parsed = JSON.parse(payload);\n } catch {\n return payload;\n }\n return canonicalJsonStringify(parsed);\n }\n return canonicalJsonStringify(payload);\n }\n if (typeof payload === 'string') return payload;\n return safeStringify(payload) ?? '';\n}\n\nfunction canonicalJsonStringify(value: unknown): string {\n assertJsonDepth(value);\n return canonicalize(value);\n}\n\nfunction assertJsonDepth(root: unknown): void {\n const stack: Array<{ value: unknown; depth: number }> = [{ value: root, depth: 0 }];\n while (stack.length > 0) {\n const { value, depth } = stack.pop()!;\n if (depth > MAX_JSON_DEPTH) {\n throw new RangeError(`JSON payload exceeds max canonicalization depth ${MAX_JSON_DEPTH}`);\n }\n if (Array.isArray(value)) {\n for (const item of value) stack.push({ value: item, depth: depth + 1 });\n } else if (value !== null && typeof value === 'object') {\n for (const item of Object.values(value as Record<string, unknown>)) {\n stack.push({ value: item, depth: depth + 1 });\n }\n }\n }\n}\n\nfunction sha256Hex(value: string): string {\n return createHash('sha256').update(value, 'utf8').digest('hex');\n}\n\n/**\n * Compute the `RecordedCall.payload_digest_sha256` value. By default this\n * applies the same body snapshot normalization, payload normalization, and\n * canonical secret-key redaction used by the recorder before hashing; pass a\n * custom redaction pattern and `maxPayloadBytes` when your recorder uses matching\n * options:\n *\n * - `createUpstreamRecorder({ redactPattern })` → `computePayloadDigestSha256(..., { redactPattern })`\n * - `createUpstreamRecorder({ maxPayloadBytes })` → `computePayloadDigestSha256(..., { maxPayloadBytes })`\n *\n * Use `{ prenormalized: true }` only when the payload has already been\n * normalized/redacted exactly as the recorder would store it. The\n * prenormalized path skips redaction, so the helper rejects secret-shaped keys\n * whose values are not already the literal `\"[redacted]\"` marker or an\n * explicit null placeholder. For form-encoded bodies, duplicate secret-shaped\n * keys are also rejected because last-wins maps cannot prove that every\n * original value was inspected before hashing.\n *\n * JSON content is serialized with RFC 8785 JCS before hashing. When\n * `contentType` is JSON-shaped and `payload` is a string, the helper parses\n * it first so semantically equivalent JSON strings and objects hash to the\n * same value. On the normalizing path, an unparseable JSON-shaped string is\n * treated as the emitted body bytes and hashed verbatim after best-effort\n * redaction. On the prenormalized path, malformed JSON strings throw because\n * their secret-key structure cannot be proven safe. Unsupported JSON values\n * and payloads deeper than the recorder's depth cap throw rather than\n * producing a non-canonical digest.\n *\n * The returned digest is lowercase hex, matching the 3.1\n * `query_upstream_traffic` wire contract.\n */\nexport function computePayloadDigestSha256(\n payload: unknown,\n contentType = 'application/json',\n options: PayloadDigestOptions = {}\n): string {\n try {\n assertPayloadDigestOptions(options);\n const redactPattern = options.prenormalized\n ? false\n : options.redactPattern === false\n ? false\n : normalizeSecretKeyPattern(options.redactPattern ?? SECRET_KEY_PATTERN);\n const prenormalizedSafetyPattern = isRegExp(options.redactPattern)\n ? normalizeSecretKeyPattern(options.redactPattern)\n : SECRET_KEY_PATTERN;\n const maxPayloadBytes = clamp(options.maxPayloadBytes, 0, 16 * 1024 * 1024, DEFAULT_MAX_PAYLOAD_BYTES);\n if (options.redactPattern === false && options.prenormalized !== true) {\n throw new PayloadDigestError('PayloadDigestOptions.redactPattern=false requires prenormalized=true');\n }\n const payloadForDigest =\n redactPattern === false\n ? assertPrenormalizedPayloadSafe(payload, contentType, prenormalizedSafetyPattern)\n : normalizeRecordedPayload(\n normalizeFetchPayloadInput(payload, contentType),\n contentType,\n redactPattern,\n maxPayloadBytes\n );\n return sha256Hex(canonicalPayloadBytes(payloadForDigest, contentType));\n } catch (err) {\n if (err instanceof PayloadDigestError) throw err;\n throw new PayloadDigestError(err instanceof Error ? err.message : 'Payload digest canonicalization failed', err);\n }\n}\n\nfunction assertPayloadDigestOptions(options: unknown): asserts options is PayloadDigestOptions {\n if (typeof options !== 'object' || options === null || isRegExp(options) || Array.isArray(options)) {\n throw new PayloadDigestError('computePayloadDigestSha256 options must be a PayloadDigestOptions object');\n }\n}\n\nexport type PayloadDigestOptions = {\n /**\n * Custom redaction pattern. Passing `false` is accepted only with\n * `prenormalized: true`; otherwise it would silently bypass redaction.\n */\n redactPattern?: RegExp | false;\n /**\n * Match `createUpstreamRecorder({ maxPayloadBytes })` when computing\n * digests outside the recorder.\n */\n maxPayloadBytes?: number;\n /**\n * Set only for payloads that have already been normalized and redacted.\n * The helper skips redaction but still scans secret-shaped keys, rejects\n * malformed JSON strings, and rejects duplicate secret-shaped form keys.\n */\n prenormalized?: boolean;\n};\n\nfunction assertPrenormalizedPayloadSafe(payload: unknown, contentType: string, pattern: RegExp): unknown {\n let scanTarget = payload;\n if (typeof payload === 'string' && isJsonContentType(contentType)) {\n try {\n scanTarget = JSON.parse(payload);\n } catch {\n throw new PayloadDigestError(\n 'Prenormalized JSON payload is malformed; hash the recorder-normalized payload or omit prenormalized.'\n );\n }\n } else if (typeof payload === 'string' && isFormUrlEncoded(contentType)) {\n assertPrenormalizedFormUrlEncodedSafe(payload, pattern);\n return payload;\n }\n const unsafePath = findUnredactedSecretPath(scanTarget, pattern);\n if (unsafePath) {\n throw new PayloadDigestError(\n `Prenormalized payload contains unredacted secret-shaped key \"${unsafePath}\"; hash the recorder-normalized payload or omit prenormalized.`\n );\n }\n return payload;\n}\n\nfunction assertPrenormalizedFormUrlEncodedSafe(body: string, pattern: RegExp): void {\n const seenSecretKeys = new Set<string>();\n const params = Array.from(new URLSearchParams(body));\n for (const [key] of params) {\n if (!secretKeyPatternMatches(pattern, key)) continue;\n const normalizedKey = key.toLowerCase();\n if (seenSecretKeys.has(normalizedKey)) {\n throw new PayloadDigestError(\n `Prenormalized form payload contains duplicate secret-shaped key \"${key}\"; hash the recorder-normalized payload or omit prenormalized.`\n );\n }\n seenSecretKeys.add(normalizedKey);\n }\n for (const [key, value] of params) {\n if (!secretKeyPatternMatches(pattern, key)) continue;\n if (!isSafelyRedactedSecretValue(value)) {\n throw new PayloadDigestError(\n `Prenormalized payload contains unredacted secret-shaped key \"${key}\"; hash the recorder-normalized payload or omit prenormalized.`\n );\n }\n }\n}\n\nfunction findUnredactedSecretPath(value: unknown, pattern: RegExp): string | null {\n const stack: Array<{ value: unknown; path: string }> = [{ value, path: '' }];\n const seen = new WeakSet<object>();\n while (stack.length > 0) {\n const { value: current, path } = stack.pop()!;\n if (!current || typeof current !== 'object') continue;\n if (seen.has(current)) continue;\n seen.add(current);\n\n if (Array.isArray(current)) {\n for (let i = current.length - 1; i >= 0; i--) {\n stack.push({ value: current[i], path: `${path}[${i}]` });\n }\n continue;\n }\n\n const entries = Object.entries(current as Record<string, unknown>);\n for (let i = entries.length - 1; i >= 0; i--) {\n const [key, childValue] = entries[i]!;\n const childPath = path ? `${path}.${key}` : key;\n if (secretKeyPatternMatches(pattern, key) && !isSafelyRedactedSecretValue(childValue)) return childPath;\n stack.push({ value: childValue, path: childPath });\n }\n }\n return null;\n}\n\nfunction isSafelyRedactedSecretValue(value: unknown): boolean {\n return value === '[redacted]' || value === null;\n}\n\nfunction normalizeFetchPayloadInput(payload: unknown, contentType: string): unknown {\n if (payload === undefined) return undefined;\n if (typeof payload === 'string') {\n if (!isJsonContentType(contentType)) return payload;\n try {\n return JSON.parse(payload);\n } catch {\n return payload;\n }\n }\n if (payload instanceof URLSearchParams) return payload.toString();\n if (typeof FormData !== 'undefined' && payload instanceof FormData) {\n const out: Record<string, unknown> = {};\n payload.forEach((v, k) => {\n out[k] = typeof v === 'string' ? v : '[file]';\n });\n return out;\n }\n return payload;\n}\n\nfunction normalizeRecordedPayload(\n payload: unknown,\n contentType: string,\n redactPattern: RegExp,\n maxPayloadBytes: number\n): unknown {\n if (payload === undefined) {\n // Raw-mode `RecordedCall.payload` is required by the 3.1 controller\n // response schema. GET/HEAD-style calls with no body therefore emit an\n // empty object instead of omitting the field.\n return {};\n }\n if (payload === null) return payload;\n\n // Binary-shaped bodies — replace with a marker. Adopters that need\n // the raw bytes recorded for diagnostics can stringify before\n // calling `record()`.\n if (typeof Buffer !== 'undefined' && Buffer.isBuffer(payload)) {\n return `[binary ${payload.length} bytes]`;\n }\n if (typeof Blob !== 'undefined' && payload instanceof Blob) {\n return `[binary ${payload.size} bytes]`;\n }\n if (payload instanceof ArrayBuffer) {\n return `[binary ${payload.byteLength} bytes]`;\n }\n if (ArrayBuffer.isView(payload)) {\n return `[binary ${payload.byteLength} bytes]`;\n }\n\n if (typeof payload === 'string') {\n if (isJsonContentType(contentType)) {\n let parsed: unknown;\n try {\n parsed = JSON.parse(payload);\n } catch {\n // Malformed JSON strings remain raw strings so diagnostics keep the\n // original body shape instead of pretending the payload was absent.\n return cap(redactJsonLikeSecretValues(payload, redactPattern), maxPayloadBytes);\n }\n const redacted = redactSecrets(parsed, redactPattern);\n assertJsonDepth(redacted);\n const json = safeStringify(redacted);\n if (json && maxPayloadBytes > 0 && byteLengthOf(json) > maxPayloadBytes) {\n return `[truncated ${byteLengthOf(json)} bytes]`;\n }\n return redacted;\n }\n // Form-urlencoded redaction: parse, redact, re-stringify so\n // `access_token=...` bodies don't slip through unredacted.\n if (isFormUrlEncoded(contentType)) {\n return cap(redactFormUrlEncoded(payload, redactPattern), maxPayloadBytes);\n }\n return cap(payload, maxPayloadBytes);\n }\n\n const redacted = redactSecrets(payload, redactPattern);\n assertJsonDepth(redacted);\n const json = safeStringify(redacted);\n if (json && maxPayloadBytes > 0 && byteLengthOf(json) > maxPayloadBytes) {\n return `[truncated ${byteLengthOf(json)} bytes]`;\n }\n return redacted;\n}\n\n/**\n * Project a `recorder.query()` result onto the spec wire shape returned\n * by `comply_test_controller`'s `query_upstream_traffic` scenario\n * (`UpstreamTrafficSuccess` in `comply-test-controller-response.json`,\n * spec PR adcontextprotocol/adcp#3816). Eliminates the\n * `items → recorded_calls` / `total → total_count` field-rename footgun\n * — adopters return this directly:\n *\n * ```ts\n * scenarios: {\n * query_upstream_traffic: ({ params }, ctx) =>\n * toQueryUpstreamTrafficResponse(\n * recorder.query({\n * principal: resolvePrincipal(ctx),\n * sinceTimestamp: params?.since_timestamp,\n * endpointPattern: params?.endpoint_pattern,\n * limit: params?.limit,\n * })\n * ),\n * }\n * ```\n */\nexport function toQueryUpstreamTrafficResponse(result: UpstreamRecorderQueryResult): QueryUpstreamTrafficResponse {\n return {\n success: true,\n recorded_calls: result.items,\n total_count: result.total,\n truncated: result.truncated,\n since_timestamp: result.since_timestamp,\n };\n}\n\n/**\n * No-op recorder returned when `enabled: false`. Every method is a\n * pass-through / empty-result. Production builds drop in this object\n * with zero per-call overhead beyond the initial factory call.\n */\nfunction makeNoopRecorder(): UpstreamRecorder {\n return {\n runWithPrincipal: <T>(_p: string, fn: () => T | Promise<T>): Promise<T> => Promise.resolve(fn()),\n wrapFetch: (originalFetch: typeof globalThis.fetch): typeof globalThis.fetch => originalFetch,\n record: () => undefined,\n query: (params: UpstreamRecorderQueryParams): UpstreamRecorderQueryResult => ({\n items: [],\n total: 0,\n truncated: false,\n since_timestamp: params.sinceTimestamp ?? new Date(0).toISOString(),\n dropped_count: 0,\n }),\n clear: () => undefined,\n debug: (): UpstreamRecorderDebugInfo => ({\n enabled: false,\n bufferSize: 0,\n bufferedEntries: 0,\n principals: [],\n lastRecordedAt: null,\n activePrincipal: null,\n strict: false,\n }),\n enabled: false,\n };\n}\n\nlet warnedAboutProduction = false;\nfunction warnIfEnabledInProduction(): void {\n if (warnedAboutProduction) return;\n if (typeof process === 'undefined' || !process.env) return;\n if (process.env.NODE_ENV !== 'production') return;\n if (process.env.ADCP_RECORDER_PRODUCTION_ACK === '1') return;\n warnedAboutProduction = true;\n // eslint-disable-next-line no-console\n console.warn(\n '[adcp/upstream-recorder] enabled: true in NODE_ENV=production. ' +\n 'The recorder buffers outbound HTTP calls in-memory — sandbox-only by design. ' +\n 'Set enabled: false (recommended) or ADCP_RECORDER_PRODUCTION_ACK=1 to silence.'\n );\n}\n\n/**\n * Read the request body off a fetch call site without consuming the\n * input (when the input is a `Request`, we'd lock its stream by reading\n * directly). Returns `undefined` for bodies the recorder can't snapshot\n * cheaply.\n */\nasync function readBody(\n input: RequestInfo | URL,\n init: RequestInit | undefined,\n contentType: string\n): Promise<unknown> {\n let raw: unknown;\n\n if (init?.body !== undefined && init.body !== null) {\n raw = init.body;\n } else if (input instanceof Request) {\n try {\n const clone = input.clone();\n if (contentTypeBase(contentType) === 'multipart/form-data') {\n raw = await clone.formData();\n } else {\n raw = await clone.text();\n }\n } catch {\n raw = undefined;\n }\n } else {\n raw = undefined;\n }\n\n if (raw === undefined) return undefined;\n if (typeof raw === 'string') {\n if (!isJsonContentType(contentType)) return raw;\n try {\n return JSON.parse(raw);\n } catch {\n return raw;\n }\n }\n // FormData / URLSearchParams stringify cleanly enough for diagnostic value.\n if (raw instanceof URLSearchParams) return raw.toString();\n if (typeof FormData !== 'undefined' && raw instanceof FormData) {\n const out: Record<string, unknown> = {};\n raw.forEach((v, k) => {\n out[k] = typeof v === 'string' ? v : '[file]';\n });\n return out;\n }\n // Object / array literal already, or a Buffer / Blob / TypedArray /\n // ArrayBuffer the adopter passed in directly. Pass through — the\n // redaction step below detects binary types and substitutes markers\n // before they sit in the buffer.\n if (typeof raw === 'object') return raw;\n return String(raw);\n}\n\nfunction isJsonContentType(contentType: string | undefined): boolean {\n const base = contentTypeBase(contentType);\n return base === 'application/json' || /\\+json$/.test(base);\n}\n\nfunction isFormUrlEncoded(contentType: string | undefined): boolean {\n return contentTypeBase(contentType) === 'application/x-www-form-urlencoded';\n}\n\nfunction contentTypeBase(contentType: string | undefined): string {\n if (!contentType) return '';\n return contentType.split(';')[0]?.trim().toLowerCase() ?? '';\n}\n\nfunction redactFormUrlEncoded(body: string, pattern: RegExp): string {\n try {\n const params = new URLSearchParams(body);\n const out = new URLSearchParams();\n params.forEach((v, k) => {\n out.append(k, secretKeyPatternMatches(pattern, k.toLowerCase()) ? '[redacted]' : v);\n });\n return out.toString();\n } catch {\n return body;\n }\n}\n\nfunction redactJsonLikeSecretValues(body: string, pattern: RegExp): string {\n // Best-effort diagnostic scrub for malformed JSON strings. The output is\n // not guaranteed to be valid JSON; the invariant is that secret-shaped keys\n // with scalar/string values are not stored verbatim. Because malformed JSON\n // has no trustworthy parse tree, object/array-valued secret entries are\n // replaced wholesale rather than traversed.\n let out = '';\n let i = 0;\n while (i < body.length) {\n if (body[i] !== '\"') {\n out += body[i++];\n continue;\n }\n\n const keyToken = readJsonStringToken(body, i);\n if (!keyToken) {\n out += body.slice(i);\n break;\n }\n\n let colon = keyToken.end;\n while (colon < body.length && isJsonWhitespace(body[colon])) colon++;\n if (body[colon] !== ':') {\n out += body.slice(i, keyToken.end);\n i = keyToken.end;\n continue;\n }\n\n let key: unknown;\n try {\n key = JSON.parse(keyToken.literal);\n } catch {\n out += body.slice(i, keyToken.end);\n i = keyToken.end;\n continue;\n }\n\n const valueStart = colon + 1;\n let value = valueStart;\n while (value < body.length && isJsonWhitespace(body[value])) value++;\n out += body.slice(i, value);\n if (typeof key !== 'string' || !secretKeyPatternMatches(pattern, key)) {\n i = value;\n continue;\n }\n\n out += '\"[redacted]\"';\n i = skipJsonLikeValue(body, value);\n }\n return out;\n}\n\nfunction readJsonStringToken(input: string, start: number): { literal: string; end: number } | null {\n for (let i = start + 1; i < input.length; i++) {\n const ch = input[i];\n if (ch === '\"') return { literal: input.slice(start, i + 1), end: i + 1 };\n if (ch === '\\\\') i++;\n }\n return null;\n}\n\nfunction skipJsonLikeValue(input: string, start: number): number {\n if (input[start] === '\"') {\n const token = readJsonStringToken(input, start);\n return token?.end ?? input.length;\n }\n if (input[start] === '[' || input[start] === '{') {\n const opener = input[start];\n const closer = opener === '[' ? ']' : '}';\n let depth = 0;\n for (let i = start; i < input.length; i++) {\n const ch = input[i];\n if (ch === '\"') {\n const token = readJsonStringToken(input, i);\n if (!token) return input.length;\n i = token.end - 1;\n continue;\n }\n if (ch === opener) depth++;\n if (ch === closer) {\n depth--;\n if (depth === 0) return i + 1;\n }\n }\n return input.length;\n }\n let i = start;\n while (i < input.length && input[i] !== ',' && input[i] !== '}' && input[i] !== ']' && !isJsonWhitespace(input[i])) {\n i++;\n }\n return i;\n}\n\nfunction isJsonWhitespace(ch: string | undefined): boolean {\n return ch === ' ' || ch === '\\n' || ch === '\\r' || ch === '\\t';\n}\n\nfunction safeStringify(value: unknown): string | undefined {\n try {\n return JSON.stringify(value);\n } catch {\n return undefined;\n }\n}\n\nfunction byteLengthOf(s: string): number {\n if (typeof Buffer !== 'undefined') return Buffer.byteLength(s, 'utf8');\n // Fallback — rough UTF-16 count.\n return s.length;\n}\n\nfunction payloadWireLength(value: unknown): number {\n if (typeof value === 'string') return byteLengthOf(value);\n const json = safeStringify(value);\n return json ? byteLengthOf(json) : 0;\n}\n\nfunction cap(s: string, maxBytes: number): string {\n if (maxBytes <= 0) return s;\n if (byteLengthOf(s) <= maxBytes) return s;\n return `[truncated ${byteLengthOf(s)} bytes]`;\n}\n"],"mappings":"AAKA,SAAS,yBAAyB;AAClC,SAAS,kBAAkB;AAC3B,SAAS,gBAAgB;AACzB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,oBAAoB;AAC7B,SAAS,oBAAoB;AAC7B,SAAS,sBAAsB;AAC/B,SAAS,+BAA+B;AACxC;AAAA,EACE;AAAA,OAWK;AAEP,MAAM,sBAAsB;AAC5B,MAAM,iBAAiB,KAAK,KAAK;AACjC,MAAM,sBAAsB;AAC5B,MAAM,4BAA4B;AAClC,MAAM,kBAAkB;AACxB,MAAM,aAAa,KAAK,KAAK,KAAK;AAClC,MAAM,iBAAiB,oBAAI,IAAI;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAEM,MAAM,2BAA2B,MAAM;AAAA,EAC5C;AAAA,EAEA,YAAY,SAAiB,OAAiB;AAC5C,UAAM,OAAO;AACb,SAAK,OAAO;AACZ,SAAK,QAAQ;AAAA,EACf;AACF;AAeA,SAAS,MAAM,GAAuB,IAAY,IAAY,UAA0B;AACtF,MAAI,OAAO,MAAM,YAAY,CAAC,OAAO,SAAS,CAAC,EAAG,QAAO;AAKzD,MAAI,IAAI,MAAM,IAAI,GAAI,QAAO;AAC7B,SAAO;AACT;AAEA,SAAS,kBAAkB,GAAyB;AAClD,SAAO,OAAO,MAAM,YAAY,EAAE,SAAS;AAC7C;AAOO,SAAS,uBAAuB,UAAmC,CAAC,GAAqB;AAC9F,QAAM,UAAU,QAAQ,WAAW;AAGnC,MAAI,CAAC,QAAS,QAAO,iBAAiB;AAOtC,4BAA0B;AAE1B,QAAM,gBAAgB,0BAA0B,QAAQ,iBAAiB,kBAAkB;AAC3F,QAAM,aAAa,MAAM,QAAQ,YAAY,GAAG,iBAAiB,mBAAmB;AACpF,QAAM,QAAQ,MAAM,QAAQ,OAAO,GAAG,YAAY,cAAc;AAChE,QAAM,kBAAkB,MAAM,QAAQ,iBAAiB,GAAG,KAAK,OAAO,MAAM,yBAAyB;AACrG,QAAM,UAAU,QAAQ;AACxB,QAAM,SAAS,QAAQ,WAAW;AAClC,QAAM,UAAU,QAAQ;AAIxB,QAAM,SAA0B,CAAC;AAIjC,QAAM,mBAAmB,IAAI,kBAA0B;AAMvD,WAAS,UAAU,OAAyC;AAC1D,QAAI,CAAC,QAAS;AACd,QAAI;AACF,cAAQ,KAAK;AAAA,IACf,QAAQ;AAAA,IAER;AAAA,EACF;AAEA,WAAS,aAAa,OAAqB;AACzC,QAAI,OAAO,WAAW,EAAG;AACzB,UAAM,SAAS,QAAQ;AACvB,QAAI,MAAM;AACV,WAAO,MAAM,OAAO,UAAU,OAAO,GAAG,EAAG,eAAe,OAAQ;AAClE,QAAI,MAAM,EAAG,QAAO,OAAO,GAAG,GAAG;AAAA,EACnC;AAEA,WAAS,UAAU,OAA4B;AAC7C,WAAO,KAAK,KAAK;AACjB,WAAO,OAAO,SAAS,WAAY,QAAO,MAAM;AAAA,EAClD;AAEA,WAAS,wBAAwB,SAAqE;AACpG,QAAI,CAAC,QAAS,QAAO,CAAC;AACtB,UAAM,MAA8B,CAAC;AACrC,eAAW,CAAC,GAAG,CAAC,KAAK,OAAO,QAAQ,OAAO,GAAG;AAC5C,YAAM,QAAQ,EAAE,YAAY;AAC5B,UAAI,KAAK,IAAI,wBAAwB,eAAe,KAAK,IAAI,eAAe;AAAA,IAC9E;AACA,WAAO;AAAA,EACT;AAWA,WAAS,wBAAwB,SAAkB,aAAwD;AACzG,UAAM,QAAQ,yBAAyB,SAAS,aAAa,eAAe,eAAe;AAC3F,WAAO,EAAE,OAAO,OAAO,kBAAkB,KAAK,EAAE;AAAA,EAClD;AAEA,WAAS,gBACP,QACA,KACA,MACA,MACA,SACoB;AACpB,QAAI,CAAC,QAAS,QAAO;AACrB,QAAI;AACF,YAAM,QAAQ,QAAQ,EAAE,QAAQ,KAAK,MAAM,MAAM,QAAQ,CAAC;AAC1D,UAAI,UAAU,OAAW,QAAO;AAChC,UAAI,OAAO,UAAU,YAAY,eAAe,IAAI,KAAK,EAAG,QAAO;AACnE,gBAAU,EAAE,MAAM,8BAA8B,SAAS,OAAO,UAAU,WAAW,QAAQ,OAAO,KAAK,EAAE,CAAC;AAC5G,aAAO;AAAA,IACT,SAAS,KAAK;AACZ,gBAAU,EAAE,MAAM,oBAAoB,IAAI,CAAC;AAC3C,aAAO;AAAA,IACT;AAAA,EACF;AAEA,WAAS,kBAAkB,OAAoB,OAAuC;AACpF,QAAI;AACF,YAAM,MAAM,MAAM;AAClB,UAAI,OAAO;AACX,UAAI,WAAW;AACf,UAAI;AACF,cAAM,SAAS,IAAI,IAAI,GAAG;AAC1B,eAAO,OAAO;AACd,mBAAW,OAAO;AAAA,MACpB,QAAQ;AACN,kBAAU,EAAE,MAAM,oBAAoB,IAAI,CAAC;AAAA,MAC7C;AACA,YAAM,kBAAkB,wBAAwB,MAAM,OAAO;AAC7D,YAAM,aAAa,gBAAgB,MAAM,QAAQ,KAAK,MAAM,UAAU,eAAe;AACrF,YAAM,EAAE,OAAO,SAAS,OAAO,cAAc,IAAI,wBAAwB,MAAM,SAAS,MAAM,YAAY;AAC1G,aAAO;AAAA,QACL,QAAQ,MAAM;AAAA,QACd,UAAU,GAAG,MAAM,MAAM,IAAI,GAAG;AAAA,QAChC;AAAA,QACA;AAAA,QACA,MAAM;AAAA,QACN,cAAc,MAAM;AAAA,QACpB,kBAAkB;AAAA,QAClB;AAAA,QACA,gBAAgB;AAAA,QAChB,WAAW,IAAI,KAAK,KAAK,EAAE,YAAY;AAAA,QACvC,GAAI,MAAM,gBAAgB,UAAa,EAAE,aAAa,MAAM,YAAY;AAAA,QACxE,GAAI,eAAe,UAAa,EAAE,SAAS,WAAW;AAAA,MACxD;AAAA,IACF,SAAS,KAAK;AAGZ,gBAAU,EAAE,MAAM,wBAAwB,IAAI,CAAC;AAC/C,aAAO;AAAA,IACT;AAAA,EACF;AAMA,WAAS,iBAAoB,WAAmB,IAAsC;AACpF,QAAI,CAAC,kBAAkB,SAAS,GAAG;AACjC,aAAO,QAAQ;AAAA,QACb,IAAI;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AACA,WAAO,QAAQ,QAAQ,iBAAiB,IAAI,WAAW,EAAE,CAAC;AAAA,EAC5D;AAEA,WAAS,OAAO,OAAoB,mBAAkC;AACpE,UAAM,YAAY,qBAAqB,iBAAiB,SAAS;AACjE,QAAI,CAAC,kBAAkB,SAAS,GAAG;AACjC,UAAI,QAAQ;AACV,cAAM,IAAI;AAAA,UACR,0DAA0D,MAAM,MAAM,SAAS,MAAM,GAAG;AAAA,QAC1F;AAAA,MACF;AACA,gBAAU,EAAE,MAAM,mBAAmB,QAAQ,MAAM,QAAQ,KAAK,MAAM,IAAI,CAAC;AAC3E;AAAA,IACF;AACA,UAAM,QAAQ,KAAK,IAAI;AACvB,iBAAa,KAAK;AAClB,UAAM,OAAO,kBAAkB,OAAO,KAAK;AAC3C,QAAI,CAAC,KAAM;AACX,cAAU,EAAE,MAAM,WAAW,cAAc,MAAM,CAAC;AAAA,EACpD;AAEA,WAAS,UAAU,eAAiE;AAClF,WAAO,eAAe,aAAa,OAA0B,MAAuC;AAClG,YAAM,YAAY,iBAAiB,SAAS;AAI5C,UAAI,CAAC,WAAW;AACd,YAAI,QAAQ;AACV,gBAAM,IAAI;AAAA,YACR,2DAA2D,OAAO,UAAU,WAAW,QAAQ,iBAAiB,MAAM,MAAM,SAAS,IAAI,MAAM,GAAG;AAAA,UACpJ;AAAA,QACF;AACA,eAAO,cAAc,OAAiD,IAAI;AAAA,MAC5E;AAEA,YAAM,UAAU,MAAM,WAAW,iBAAiB,UAAU,MAAM,SAAS,QAAQ,YAAY;AAC/F,YAAM,MAAM,OAAO,UAAU,WAAW,QAAQ,iBAAiB,MAAM,MAAM,SAAS,IAAI,MAAM;AAGhG,YAAM,YAAoC,CAAC;AAC3C,UAAI,MAAM,SAAS;AACjB,cAAM,IAAI,KAAK;AACf,YAAI,aAAa,SAAS;AACxB,YAAE,QAAQ,CAAC,GAAG,MAAM;AAClB,sBAAU,EAAE,YAAY,CAAC,IAAI;AAAA,UAC/B,CAAC;AAAA,QACH,WAAW,MAAM,QAAQ,CAAC,GAAG;AAC3B,qBAAW,CAAC,GAAG,CAAC,KAAK,EAAG,WAAU,EAAE,YAAY,CAAC,IAAI;AAAA,QACvD,OAAO;AACL,qBAAW,CAAC,GAAG,CAAC,KAAK,OAAO,QAAQ,CAA2B,EAAG,WAAU,EAAE,YAAY,CAAC,IAAI;AAAA,QACjG;AAAA,MACF,WAAW,iBAAiB,SAAS;AACnC,cAAM,QAAQ,QAAQ,CAAC,GAAG,MAAM;AAC9B,oBAAU,EAAE,YAAY,CAAC,IAAI;AAAA,QAC/B,CAAC;AAAA,MACH;AAEA,YAAM,cAAc,UAAU,cAAc,KAAK;AACjD,YAAM,UAAU,MAAM,SAAS,OAAO,MAAM,WAAW;AAKvD,UAAI;AACJ,UAAI;AACJ,UAAI;AACF,mBAAW,MAAM,cAAc,OAAiD,IAAI;AAAA,MACtF,SAAS,KAAK;AACZ,iBAAS;AAAA,MACX;AAEA;AAAA,QACE;AAAA,UACE;AAAA,UACA;AAAA,UACA,cAAc;AAAA,UACd,SAAS;AAAA,UACT;AAAA,UACA,GAAI,YAAY,EAAE,aAAa,SAAS,OAAO;AAAA,QACjD;AAAA,QACA;AAAA,MACF;AAEA,UAAI,OAAQ,OAAM;AAClB,aAAO;AAAA,IACT;AAAA,EACF;AAEA,WAAS,MAAM,QAAkE;AAC/E,QAAI,CAAC,kBAAkB,OAAO,SAAS,GAAG;AACxC,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AACA,UAAM,QAAQ,KAAK,IAAI;AACvB,iBAAa,KAAK;AAClB,UAAM,QAAQ,MAAM,OAAO,OAAO,GAAG,YAAY,mBAAmB;AACpE,UAAM,UAAU,OAAO,iBAAiB,KAAK,MAAM,OAAO,cAAc,IAAI;AAC5E,UAAM,kBAAkB,OAAO,kBAAkB,aAAa,OAAO,eAAe,IAAI;AAExF,UAAM,UAAU,OAAO,OAAO,WAAS;AACrC,UAAI,MAAM,cAAc,OAAO,UAAW,QAAO;AACjD,UAAI,MAAM,eAAe,QAAS,QAAO;AACzC,UAAI,mBAAmB,CAAC,gBAAgB,KAAK,MAAM,KAAK,QAAQ,EAAG,QAAO;AAC1E,aAAO;AAAA,IACT,CAAC;AAED,UAAM,QAAwB,CAAC;AAC/B,QAAI,QAAQ;AACZ,QAAI,gBAAgB;AACpB,eAAW,SAAS,SAAS;AAC3B,YAAM,YAAY,wBAAwB,MAAM,MAAM,QAAQ,SAAS;AACvE,UAAI,CAAC,WAAW;AACd,YAAI,OAAO,oBAAoB,SAAU;AACzC;AAAA,MACF;AACA;AACA,UAAI,MAAM,SAAS,MAAO,OAAM,KAAK,SAAS;AAAA,IAChD;AACA,UAAM,kBACJ,OAAO,kBAAkB,QAAQ,CAAC,GAAG,KAAK,aAAa,IAAI,KAAK,QAAQ,KAAK,EAAE,YAAY;AAC7F,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,WAAW,QAAQ,MAAM;AAAA,MACzB;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,WAAS,QAAc;AACrB,WAAO,SAAS;AAAA,EAClB;AAEA,WAAS,QAAmC;AAC1C,UAAM,aAAa,MAAM,KAAK,IAAI,IAAI,OAAO,IAAI,OAAK,EAAE,SAAS,CAAC,CAAC,EAAE,KAAK;AAC1E,UAAM,OAAO,OAAO,OAAO,SAAS,CAAC;AACrC,WAAO;AAAA,MACL,SAAS;AAAA,MACT;AAAA,MACA,iBAAiB,OAAO;AAAA,MACxB;AAAA,MACA,gBAAgB,OAAO,KAAK,KAAK,YAAY;AAAA,MAC7C,iBAAiB,iBAAiB,SAAS,KAAK;AAAA,MAChD;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,SAAS;AAAA,EACX;AACF;AAEA,SAAS,wBACP,MACA,QACA,WACqB;AACrB,MAAI;AACF,WAAO,oBAAoB,MAAM,QAAQ,SAAS;AAAA,EACpD,SAAS,KAAK;AACZ,gBAAY,EAAE,MAAM,kCAAkC,QAAQ,KAAK,QAAQ,UAAU,KAAK,UAAU,IAAI,CAAC;AACzG,WAAO;AAAA,EACT;AACF;AAEA,SAAS,oBACP,MACA,QACA,WACc;AACd,MAAI,OAAO,oBAAoB,SAAU,QAAO;AAChD,QAAM,eAAe,sBAAsB,KAAK,SAAS,KAAK,YAAY;AAC1E,QAAM,gBAAgB,UAAU,YAAY;AAC5C,QAAM,oBAAoB,2BAA2B,OAAO,sBAAsB;AAClF,QAAM,wBACJ,kBAAkB,SAAS,IACvB,8BAA8B,KAAK,SAAS,KAAK,cAAc,SAAS,IACxE;AACN,QAAM,2BACJ,kBAAkB,SAAS,KAAK,0BAA0B,SACtD,gCAAgC,uBAAuB,IAAI,IAAI,iBAAiB,CAAC,IACjF;AACN,QAAM,0BACJ,kBAAkB,SAAS,KAAK,2BAC5B,kBAAkB,IAAI,aAAW;AAAA,IAC/B,yBAAyB;AAAA,IACzB,OAAO,yBAAyB,IAAI,MAAM;AAAA,EAC5C,EAAE,IACF;AAEN,SAAO;AAAA,IACL,QAAQ,KAAK;AAAA,IACb,UAAU,KAAK;AAAA,IACf,KAAK,KAAK;AAAA,IACV,MAAM,KAAK;AAAA,IACX,MAAM,KAAK;AAAA,IACX,cAAc,KAAK;AAAA,IACnB,kBAAkB;AAAA,IAClB,uBAAuB;AAAA,IACvB,gBAAgB,aAAa,YAAY;AAAA,IACzC,WAAW,KAAK;AAAA,IAChB,GAAI,KAAK,gBAAgB,UAAa,EAAE,aAAa,KAAK,YAAY;AAAA,IACtE,GAAI,KAAK,YAAY,UAAa,EAAE,SAAS,KAAK,QAAQ;AAAA,IAC1D,GAAI,4BAA4B,UAAa,EAAE,wBAAwB;AAAA,EACzE;AACF;AAEA,SAAS,2BAA2B,OAAuC;AACzE,MAAI,CAAC,MAAM,QAAQ,KAAK,EAAG,QAAO,CAAC;AACnC,QAAM,MAAgB,CAAC;AACvB,aAAW,SAAS,OAAO;AACzB,QAAI,OAAO,UAAU,YAAY,CAAC,iBAAiB,KAAK,KAAK,EAAG;AAChE,QAAI,CAAC,IAAI,SAAS,KAAK,EAAG,KAAI,KAAK,KAAK;AACxC,QAAI,IAAI,UAAU,wBAAyB;AAAA,EAC7C;AACA,SAAO;AACT;AAEA,SAAS,gCAAgC,MAAe,eAAyC;AAC/F,QAAM,UAAU,oBAAI,IAAY;AAChC,QAAM,QAAkD,CAAC,EAAE,OAAO,MAAM,OAAO,EAAE,CAAC;AAClF,SAAO,MAAM,SAAS,GAAG;AACvB,UAAM,EAAE,OAAO,MAAM,IAAI,MAAM,IAAI;AACnC,QAAI,QAAQ,eAAgB;AAC5B,QAAI,OAAO,UAAU,UAAU;AAC7B,YAAM,SAAS,UAAU,KAAK;AAC9B,UAAI,cAAc,IAAI,MAAM,GAAG;AAC7B,gBAAQ,IAAI,MAAM;AAClB,YAAI,QAAQ,SAAS,cAAc,KAAM;AAAA,MAC3C;AAAA,IACF,WAAW,MAAM,QAAQ,KAAK,GAAG;AAC/B,iBAAW,QAAQ,MAAO,OAAM,KAAK,EAAE,OAAO,MAAM,OAAO,QAAQ,EAAE,CAAC;AAAA,IACxE,WAAW,UAAU,QAAQ,OAAO,UAAU,UAAU;AACtD,iBAAW,QAAQ,OAAO,OAAO,KAAgC,GAAG;AAClE,cAAM,KAAK,EAAE,OAAO,MAAM,OAAO,QAAQ,EAAE,CAAC;AAAA,MAC9C;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,8BACP,SACA,aACA,WACqB;AACrB,MAAI,CAAC,kBAAkB,WAAW,EAAG,QAAO;AAC5C,MAAI,OAAO,YAAY,SAAU,QAAO;AACxC,MAAI;AACF,WAAO,KAAK,MAAM,OAAO;AAAA,EAC3B,SAAS,KAAK;AACZ,gBAAY,EAAE,MAAM,6BAA6B,cAAc,aAAa,IAAI,CAAC;AACjF,WAAO;AAAA,EACT;AACF;AAEA,SAAS,sBAAsB,SAAkB,aAA6B;AAC5E,MAAI,kBAAkB,WAAW,GAAG;AAClC,QAAI,OAAO,YAAY,UAAU;AAC/B,UAAI;AACJ,UAAI;AACF,iBAAS,KAAK,MAAM,OAAO;AAAA,MAC7B,QAAQ;AACN,eAAO;AAAA,MACT;AACA,aAAO,uBAAuB,MAAM;AAAA,IACtC;AACA,WAAO,uBAAuB,OAAO;AAAA,EACvC;AACA,MAAI,OAAO,YAAY,SAAU,QAAO;AACxC,SAAO,cAAc,OAAO,KAAK;AACnC;AAEA,SAAS,uBAAuB,OAAwB;AACtD,kBAAgB,KAAK;AACrB,SAAO,aAAa,KAAK;AAC3B;AAEA,SAAS,gBAAgB,MAAqB;AAC5C,QAAM,QAAkD,CAAC,EAAE,OAAO,MAAM,OAAO,EAAE,CAAC;AAClF,SAAO,MAAM,SAAS,GAAG;AACvB,UAAM,EAAE,OAAO,MAAM,IAAI,MAAM,IAAI;AACnC,QAAI,QAAQ,gBAAgB;AAC1B,YAAM,IAAI,WAAW,mDAAmD,cAAc,EAAE;AAAA,IAC1F;AACA,QAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,iBAAW,QAAQ,MAAO,OAAM,KAAK,EAAE,OAAO,MAAM,OAAO,QAAQ,EAAE,CAAC;AAAA,IACxE,WAAW,UAAU,QAAQ,OAAO,UAAU,UAAU;AACtD,iBAAW,QAAQ,OAAO,OAAO,KAAgC,GAAG;AAClE,cAAM,KAAK,EAAE,OAAO,MAAM,OAAO,QAAQ,EAAE,CAAC;AAAA,MAC9C;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,UAAU,OAAuB;AACxC,SAAO,WAAW,QAAQ,EAAE,OAAO,OAAO,MAAM,EAAE,OAAO,KAAK;AAChE;AAiCO,SAAS,2BACd,SACA,cAAc,oBACd,UAAgC,CAAC,GACzB;AACR,MAAI;AACF,+BAA2B,OAAO;AAClC,UAAM,gBAAgB,QAAQ,gBAC1B,QACA,QAAQ,kBAAkB,QACxB,QACA,0BAA0B,QAAQ,iBAAiB,kBAAkB;AAC3E,UAAM,6BAA6B,SAAS,QAAQ,aAAa,IAC7D,0BAA0B,QAAQ,aAAa,IAC/C;AACJ,UAAM,kBAAkB,MAAM,QAAQ,iBAAiB,GAAG,KAAK,OAAO,MAAM,yBAAyB;AACrG,QAAI,QAAQ,kBAAkB,SAAS,QAAQ,kBAAkB,MAAM;AACrE,YAAM,IAAI,mBAAmB,sEAAsE;AAAA,IACrG;AACA,UAAM,mBACJ,kBAAkB,QACd,+BAA+B,SAAS,aAAa,0BAA0B,IAC/E;AAAA,MACE,2BAA2B,SAAS,WAAW;AAAA,MAC/C;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACN,WAAO,UAAU,sBAAsB,kBAAkB,WAAW,CAAC;AAAA,EACvE,SAAS,KAAK;AACZ,QAAI,eAAe,mBAAoB,OAAM;AAC7C,UAAM,IAAI,mBAAmB,eAAe,QAAQ,IAAI,UAAU,0CAA0C,GAAG;AAAA,EACjH;AACF;AAEA,SAAS,2BAA2B,SAA2D;AAC7F,MAAI,OAAO,YAAY,YAAY,YAAY,QAAQ,SAAS,OAAO,KAAK,MAAM,QAAQ,OAAO,GAAG;AAClG,UAAM,IAAI,mBAAmB,0EAA0E;AAAA,EACzG;AACF;AAqBA,SAAS,+BAA+B,SAAkB,aAAqB,SAA0B;AACvG,MAAI,aAAa;AACjB,MAAI,OAAO,YAAY,YAAY,kBAAkB,WAAW,GAAG;AACjE,QAAI;AACF,mBAAa,KAAK,MAAM,OAAO;AAAA,IACjC,QAAQ;AACN,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,EACF,WAAW,OAAO,YAAY,YAAY,iBAAiB,WAAW,GAAG;AACvE,0CAAsC,SAAS,OAAO;AACtD,WAAO;AAAA,EACT;AACA,QAAM,aAAa,yBAAyB,YAAY,OAAO;AAC/D,MAAI,YAAY;AACd,UAAM,IAAI;AAAA,MACR,gEAAgE,UAAU;AAAA,IAC5E;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,sCAAsC,MAAc,SAAuB;AAClF,QAAM,iBAAiB,oBAAI,IAAY;AACvC,QAAM,SAAS,MAAM,KAAK,IAAI,gBAAgB,IAAI,CAAC;AACnD,aAAW,CAAC,GAAG,KAAK,QAAQ;AAC1B,QAAI,CAAC,wBAAwB,SAAS,GAAG,EAAG;AAC5C,UAAM,gBAAgB,IAAI,YAAY;AACtC,QAAI,eAAe,IAAI,aAAa,GAAG;AACrC,YAAM,IAAI;AAAA,QACR,oEAAoE,GAAG;AAAA,MACzE;AAAA,IACF;AACA,mBAAe,IAAI,aAAa;AAAA,EAClC;AACA,aAAW,CAAC,KAAK,KAAK,KAAK,QAAQ;AACjC,QAAI,CAAC,wBAAwB,SAAS,GAAG,EAAG;AAC5C,QAAI,CAAC,4BAA4B,KAAK,GAAG;AACvC,YAAM,IAAI;AAAA,QACR,gEAAgE,GAAG;AAAA,MACrE;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,yBAAyB,OAAgB,SAAgC;AAChF,QAAM,QAAiD,CAAC,EAAE,OAAO,MAAM,GAAG,CAAC;AAC3E,QAAM,OAAO,oBAAI,QAAgB;AACjC,SAAO,MAAM,SAAS,GAAG;AACvB,UAAM,EAAE,OAAO,SAAS,KAAK,IAAI,MAAM,IAAI;AAC3C,QAAI,CAAC,WAAW,OAAO,YAAY,SAAU;AAC7C,QAAI,KAAK,IAAI,OAAO,EAAG;AACvB,SAAK,IAAI,OAAO;AAEhB,QAAI,MAAM,QAAQ,OAAO,GAAG;AAC1B,eAAS,IAAI,QAAQ,SAAS,GAAG,KAAK,GAAG,KAAK;AAC5C,cAAM,KAAK,EAAE,OAAO,QAAQ,CAAC,GAAG,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC;AAAA,MACzD;AACA;AAAA,IACF;AAEA,UAAM,UAAU,OAAO,QAAQ,OAAkC;AACjE,aAAS,IAAI,QAAQ,SAAS,GAAG,KAAK,GAAG,KAAK;AAC5C,YAAM,CAAC,KAAK,UAAU,IAAI,QAAQ,CAAC;AACnC,YAAM,YAAY,OAAO,GAAG,IAAI,IAAI,GAAG,KAAK;AAC5C,UAAI,wBAAwB,SAAS,GAAG,KAAK,CAAC,4BAA4B,UAAU,EAAG,QAAO;AAC9F,YAAM,KAAK,EAAE,OAAO,YAAY,MAAM,UAAU,CAAC;AAAA,IACnD;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,4BAA4B,OAAyB;AAC5D,SAAO,UAAU,gBAAgB,UAAU;AAC7C;AAEA,SAAS,2BAA2B,SAAkB,aAA8B;AAClF,MAAI,YAAY,OAAW,QAAO;AAClC,MAAI,OAAO,YAAY,UAAU;AAC/B,QAAI,CAAC,kBAAkB,WAAW,EAAG,QAAO;AAC5C,QAAI;AACF,aAAO,KAAK,MAAM,OAAO;AAAA,IAC3B,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AACA,MAAI,mBAAmB,gBAAiB,QAAO,QAAQ,SAAS;AAChE,MAAI,OAAO,aAAa,eAAe,mBAAmB,UAAU;AAClE,UAAM,MAA+B,CAAC;AACtC,YAAQ,QAAQ,CAAC,GAAG,MAAM;AACxB,UAAI,CAAC,IAAI,OAAO,MAAM,WAAW,IAAI;AAAA,IACvC,CAAC;AACD,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEA,SAAS,yBACP,SACA,aACA,eACA,iBACS;AACT,MAAI,YAAY,QAAW;AAIzB,WAAO,CAAC;AAAA,EACV;AACA,MAAI,YAAY,KAAM,QAAO;AAK7B,MAAI,OAAO,WAAW,eAAe,OAAO,SAAS,OAAO,GAAG;AAC7D,WAAO,WAAW,QAAQ,MAAM;AAAA,EAClC;AACA,MAAI,OAAO,SAAS,eAAe,mBAAmB,MAAM;AAC1D,WAAO,WAAW,QAAQ,IAAI;AAAA,EAChC;AACA,MAAI,mBAAmB,aAAa;AAClC,WAAO,WAAW,QAAQ,UAAU;AAAA,EACtC;AACA,MAAI,YAAY,OAAO,OAAO,GAAG;AAC/B,WAAO,WAAW,QAAQ,UAAU;AAAA,EACtC;AAEA,MAAI,OAAO,YAAY,UAAU;AAC/B,QAAI,kBAAkB,WAAW,GAAG;AAClC,UAAI;AACJ,UAAI;AACF,iBAAS,KAAK,MAAM,OAAO;AAAA,MAC7B,QAAQ;AAGN,eAAO,IAAI,2BAA2B,SAAS,aAAa,GAAG,eAAe;AAAA,MAChF;AACA,YAAMA,YAAW,cAAc,QAAQ,aAAa;AACpD,sBAAgBA,SAAQ;AACxB,YAAMC,QAAO,cAAcD,SAAQ;AACnC,UAAIC,SAAQ,kBAAkB,KAAK,aAAaA,KAAI,IAAI,iBAAiB;AACvE,eAAO,cAAc,aAAaA,KAAI,CAAC;AAAA,MACzC;AACA,aAAOD;AAAA,IACT;AAGA,QAAI,iBAAiB,WAAW,GAAG;AACjC,aAAO,IAAI,qBAAqB,SAAS,aAAa,GAAG,eAAe;AAAA,IAC1E;AACA,WAAO,IAAI,SAAS,eAAe;AAAA,EACrC;AAEA,QAAM,WAAW,cAAc,SAAS,aAAa;AACrD,kBAAgB,QAAQ;AACxB,QAAM,OAAO,cAAc,QAAQ;AACnC,MAAI,QAAQ,kBAAkB,KAAK,aAAa,IAAI,IAAI,iBAAiB;AACvE,WAAO,cAAc,aAAa,IAAI,CAAC;AAAA,EACzC;AACA,SAAO;AACT;AAwBO,SAAS,+BAA+B,QAAmE;AAChH,SAAO;AAAA,IACL,SAAS;AAAA,IACT,gBAAgB,OAAO;AAAA,IACvB,aAAa,OAAO;AAAA,IACpB,WAAW,OAAO;AAAA,IAClB,iBAAiB,OAAO;AAAA,EAC1B;AACF;AAOA,SAAS,mBAAqC;AAC5C,SAAO;AAAA,IACL,kBAAkB,CAAI,IAAY,OAAyC,QAAQ,QAAQ,GAAG,CAAC;AAAA,IAC/F,WAAW,CAAC,kBAAoE;AAAA,IAChF,QAAQ,MAAM;AAAA,IACd,OAAO,CAAC,YAAsE;AAAA,MAC5E,OAAO,CAAC;AAAA,MACR,OAAO;AAAA,MACP,WAAW;AAAA,MACX,iBAAiB,OAAO,mBAAkB,oBAAI,KAAK,CAAC,GAAE,YAAY;AAAA,MAClE,eAAe;AAAA,IACjB;AAAA,IACA,OAAO,MAAM;AAAA,IACb,OAAO,OAAkC;AAAA,MACvC,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,iBAAiB;AAAA,MACjB,YAAY,CAAC;AAAA,MACb,gBAAgB;AAAA,MAChB,iBAAiB;AAAA,MACjB,QAAQ;AAAA,IACV;AAAA,IACA,SAAS;AAAA,EACX;AACF;AAEA,IAAI,wBAAwB;AAC5B,SAAS,4BAAkC;AACzC,MAAI,sBAAuB;AAC3B,MAAI,OAAO,YAAY,eAAe,CAAC,QAAQ,IAAK;AACpD,MAAI,QAAQ,IAAI,aAAa,aAAc;AAC3C,MAAI,QAAQ,IAAI,iCAAiC,IAAK;AACtD,0BAAwB;AAExB,UAAQ;AAAA,IACN;AAAA,EAGF;AACF;AAQA,eAAe,SACb,OACA,MACA,aACkB;AAClB,MAAI;AAEJ,MAAI,MAAM,SAAS,UAAa,KAAK,SAAS,MAAM;AAClD,UAAM,KAAK;AAAA,EACb,WAAW,iBAAiB,SAAS;AACnC,QAAI;AACF,YAAM,QAAQ,MAAM,MAAM;AAC1B,UAAI,gBAAgB,WAAW,MAAM,uBAAuB;AAC1D,cAAM,MAAM,MAAM,SAAS;AAAA,MAC7B,OAAO;AACL,cAAM,MAAM,MAAM,KAAK;AAAA,MACzB;AAAA,IACF,QAAQ;AACN,YAAM;AAAA,IACR;AAAA,EACF,OAAO;AACL,UAAM;AAAA,EACR;AAEA,MAAI,QAAQ,OAAW,QAAO;AAC9B,MAAI,OAAO,QAAQ,UAAU;AAC3B,QAAI,CAAC,kBAAkB,WAAW,EAAG,QAAO;AAC5C,QAAI;AACF,aAAO,KAAK,MAAM,GAAG;AAAA,IACvB,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AAEA,MAAI,eAAe,gBAAiB,QAAO,IAAI,SAAS;AACxD,MAAI,OAAO,aAAa,eAAe,eAAe,UAAU;AAC9D,UAAM,MAA+B,CAAC;AACtC,QAAI,QAAQ,CAAC,GAAG,MAAM;AACpB,UAAI,CAAC,IAAI,OAAO,MAAM,WAAW,IAAI;AAAA,IACvC,CAAC;AACD,WAAO;AAAA,EACT;AAKA,MAAI,OAAO,QAAQ,SAAU,QAAO;AACpC,SAAO,OAAO,GAAG;AACnB;AAEA,SAAS,kBAAkB,aAA0C;AACnE,QAAM,OAAO,gBAAgB,WAAW;AACxC,SAAO,SAAS,sBAAsB,UAAU,KAAK,IAAI;AAC3D;AAEA,SAAS,iBAAiB,aAA0C;AAClE,SAAO,gBAAgB,WAAW,MAAM;AAC1C;AAEA,SAAS,gBAAgB,aAAyC;AAChE,MAAI,CAAC,YAAa,QAAO;AACzB,SAAO,YAAY,MAAM,GAAG,EAAE,CAAC,GAAG,KAAK,EAAE,YAAY,KAAK;AAC5D;AAEA,SAAS,qBAAqB,MAAc,SAAyB;AACnE,MAAI;AACF,UAAM,SAAS,IAAI,gBAAgB,IAAI;AACvC,UAAM,MAAM,IAAI,gBAAgB;AAChC,WAAO,QAAQ,CAAC,GAAG,MAAM;AACvB,UAAI,OAAO,GAAG,wBAAwB,SAAS,EAAE,YAAY,CAAC,IAAI,eAAe,CAAC;AAAA,IACpF,CAAC;AACD,WAAO,IAAI,SAAS;AAAA,EACtB,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,SAAS,2BAA2B,MAAc,SAAyB;AAMzE,MAAI,MAAM;AACV,MAAI,IAAI;AACR,SAAO,IAAI,KAAK,QAAQ;AACtB,QAAI,KAAK,CAAC,MAAM,KAAK;AACnB,aAAO,KAAK,GAAG;AACf;AAAA,IACF;AAEA,UAAM,WAAW,oBAAoB,MAAM,CAAC;AAC5C,QAAI,CAAC,UAAU;AACb,aAAO,KAAK,MAAM,CAAC;AACnB;AAAA,IACF;AAEA,QAAI,QAAQ,SAAS;AACrB,WAAO,QAAQ,KAAK,UAAU,iBAAiB,KAAK,KAAK,CAAC,EAAG;AAC7D,QAAI,KAAK,KAAK,MAAM,KAAK;AACvB,aAAO,KAAK,MAAM,GAAG,SAAS,GAAG;AACjC,UAAI,SAAS;AACb;AAAA,IACF;AAEA,QAAI;AACJ,QAAI;AACF,YAAM,KAAK,MAAM,SAAS,OAAO;AAAA,IACnC,QAAQ;AACN,aAAO,KAAK,MAAM,GAAG,SAAS,GAAG;AACjC,UAAI,SAAS;AACb;AAAA,IACF;AAEA,UAAM,aAAa,QAAQ;AAC3B,QAAI,QAAQ;AACZ,WAAO,QAAQ,KAAK,UAAU,iBAAiB,KAAK,KAAK,CAAC,EAAG;AAC7D,WAAO,KAAK,MAAM,GAAG,KAAK;AAC1B,QAAI,OAAO,QAAQ,YAAY,CAAC,wBAAwB,SAAS,GAAG,GAAG;AACrE,UAAI;AACJ;AAAA,IACF;AAEA,WAAO;AACP,QAAI,kBAAkB,MAAM,KAAK;AAAA,EACnC;AACA,SAAO;AACT;AAEA,SAAS,oBAAoB,OAAe,OAAwD;AAClG,WAAS,IAAI,QAAQ,GAAG,IAAI,MAAM,QAAQ,KAAK;AAC7C,UAAM,KAAK,MAAM,CAAC;AAClB,QAAI,OAAO,IAAK,QAAO,EAAE,SAAS,MAAM,MAAM,OAAO,IAAI,CAAC,GAAG,KAAK,IAAI,EAAE;AACxE,QAAI,OAAO,KAAM;AAAA,EACnB;AACA,SAAO;AACT;AAEA,SAAS,kBAAkB,OAAe,OAAuB;AAC/D,MAAI,MAAM,KAAK,MAAM,KAAK;AACxB,UAAM,QAAQ,oBAAoB,OAAO,KAAK;AAC9C,WAAO,OAAO,OAAO,MAAM;AAAA,EAC7B;AACA,MAAI,MAAM,KAAK,MAAM,OAAO,MAAM,KAAK,MAAM,KAAK;AAChD,UAAM,SAAS,MAAM,KAAK;AAC1B,UAAM,SAAS,WAAW,MAAM,MAAM;AACtC,QAAI,QAAQ;AACZ,aAASE,KAAI,OAAOA,KAAI,MAAM,QAAQA,MAAK;AACzC,YAAM,KAAK,MAAMA,EAAC;AAClB,UAAI,OAAO,KAAK;AACd,cAAM,QAAQ,oBAAoB,OAAOA,EAAC;AAC1C,YAAI,CAAC,MAAO,QAAO,MAAM;AACzB,QAAAA,KAAI,MAAM,MAAM;AAChB;AAAA,MACF;AACA,UAAI,OAAO,OAAQ;AACnB,UAAI,OAAO,QAAQ;AACjB;AACA,YAAI,UAAU,EAAG,QAAOA,KAAI;AAAA,MAC9B;AAAA,IACF;AACA,WAAO,MAAM;AAAA,EACf;AACA,MAAI,IAAI;AACR,SAAO,IAAI,MAAM,UAAU,MAAM,CAAC,MAAM,OAAO,MAAM,CAAC,MAAM,OAAO,MAAM,CAAC,MAAM,OAAO,CAAC,iBAAiB,MAAM,CAAC,CAAC,GAAG;AAClH;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,iBAAiB,IAAiC;AACzD,SAAO,OAAO,OAAO,OAAO,QAAQ,OAAO,QAAQ,OAAO;AAC5D;AAEA,SAAS,cAAc,OAAoC;AACzD,MAAI;AACF,WAAO,KAAK,UAAU,KAAK;AAAA,EAC7B,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,SAAS,aAAa,GAAmB;AACvC,MAAI,OAAO,WAAW,YAAa,QAAO,OAAO,WAAW,GAAG,MAAM;AAErE,SAAO,EAAE;AACX;AAEA,SAAS,kBAAkB,OAAwB;AACjD,MAAI,OAAO,UAAU,SAAU,QAAO,aAAa,KAAK;AACxD,QAAM,OAAO,cAAc,KAAK;AAChC,SAAO,OAAO,aAAa,IAAI,IAAI;AACrC;AAEA,SAAS,IAAI,GAAW,UAA0B;AAChD,MAAI,YAAY,EAAG,QAAO;AAC1B,MAAI,aAAa,CAAC,KAAK,SAAU,QAAO;AACxC,SAAO,cAAc,aAAa,CAAC,CAAC;AACtC;","names":["redacted","json","i"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redact-secrets.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/redact-secrets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAIH;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,QACqK,CAAC;AAErM,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAGjE;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAM7E;AAED;;;;;GAKG;AACH;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,OAAO,EACd,OAAO,GAAE,MAA2B,EACpC,KAAK,SAAI,EACT,IAAI,GAAE,OAAO,CAAC,MAAM,CAAiB,GACpC,OAAO,
|
|
1
|
+
{"version":3,"file":"redact-secrets.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/redact-secrets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAIH;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,QACqK,CAAC;AAErM,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAGjE;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAM7E;AAED;;;;;GAKG;AACH;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,OAAO,EACd,OAAO,GAAE,MAA2B,EACpC,KAAK,SAAI,EACT,IAAI,GAAE,OAAO,CAAC,MAAM,CAAiB,GACpC,OAAO,CAiCT"}
|
|
@@ -52,7 +52,13 @@ function redactSecrets(value, pattern = SECRET_KEY_PATTERN, depth = 0, seen = /*
|
|
|
52
52
|
seen.add(value);
|
|
53
53
|
const out = {};
|
|
54
54
|
for (const [k, v] of Object.entries(value)) {
|
|
55
|
-
|
|
55
|
+
const redacted = secretKeyPatternMatches(effectivePattern, k) && (typeof v === "string" || typeof v === "number") ? "[redacted]" : redactSecrets(v, effectivePattern, depth + 1, seen);
|
|
56
|
+
Object.defineProperty(out, k, {
|
|
57
|
+
value: redacted,
|
|
58
|
+
enumerable: true,
|
|
59
|
+
configurable: true,
|
|
60
|
+
writable: true
|
|
61
|
+
});
|
|
56
62
|
}
|
|
57
63
|
seen.delete(value);
|
|
58
64
|
return out;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/utils/redact-secrets.ts"],"sourcesContent":["/**\n * Recursive secret-key redaction.\n *\n * The runner-output-contract.yaml security block (`payload_redaction`) and\n * the `comply-test-controller-response.json` `recorded_calls[].payload`\n * description both mandate the same recursive walk: any property whose\n * final-path-segment key matches the canonical pattern below has its scalar\n * value replaced with the literal string `\"[redacted]\"`. The walk is capped\n * at the same depth the upstream-recorder accepts for JSON canonicalization;\n * the recorder rejects deeper structured payloads after redaction so it does\n * not store subtrees beyond this cap.\n *\n * Spec: `static/compliance/source/universal/runner-output-contract.yaml`\n * (`payload_redaction.pattern`). The runner uses this to redact request /\n * response payloads on `validation_result.request` / `.response`. The\n * `@adcp/sdk/upstream-recorder` uses this at *recording* time so plaintext\n * secrets never sit in the recorded-calls buffer in memory, even briefly.\n *\n * Matching is case-insensitive and structural — the pattern matches against\n * the property KEY, not the value. Adopters MAY extend the pattern via the\n * recorder's `redactPattern` option, but MUST NOT narrow it.\n */\n\nimport { MAX_JSON_DEPTH } from './json-depth';\n\n/**\n * Canonical secret-key pattern from the AdCP runner-output contract. Mirrors\n * the spec block: `Authorization`, `Credentials`, tokens, API keys,\n * passwords, secrets, OAuth refresh / access bearers, session tokens,\n * cookies. Case-insensitive.\n */\nexport const SECRET_KEY_PATTERN =\n /^(authorization|credentials?|token|api[_-]?key|password|secret|client[_-]secret|refresh[_-]token|access[_-]token|bearer|session[_-]token|session[_-]id|offering[_-]token|cookie|set[_-]cookie)$/i;\n\nexport function normalizeSecretKeyPattern(pattern: RegExp): RegExp {\n if (!/[gy]/.test(pattern.flags)) return pattern;\n return new RegExp(pattern.source, pattern.flags.replace(/[gy]/g, ''));\n}\n\nexport function secretKeyPatternMatches(pattern: RegExp, key: string): boolean {\n const lastIndex = pattern.lastIndex;\n pattern.lastIndex = 0;\n const matched = pattern.test(key);\n pattern.lastIndex = lastIndex;\n return matched;\n}\n\n/**\n * Maximum recursion depth for the redaction walk. Keep this aligned with the\n * upstream-recorder JSON canonicalization depth; recorder paths also run the\n * depth gate after redaction so structured payloads beyond the cap are\n * rejected instead of stored with unvisited subtrees.\n */\n/**\n * Recursively walk `value`, returning a structurally-identical clone with\n * scalar values at secret-shaped keys replaced by `\"[redacted]\"`. Pass an\n * optional `pattern` to override the canonical pattern (typically by\n * extending it — adopters MAY add internal vendor headers but MUST NOT\n * narrow the contract floor).\n *\n * Non-mutating — the input is never touched.\n */\nexport function redactSecrets(\n value: unknown,\n pattern: RegExp = SECRET_KEY_PATTERN,\n depth = 0,\n seen: WeakSet<object> = new WeakSet()\n): unknown {\n const effectivePattern = normalizeSecretKeyPattern(pattern);\n if (depth > MAX_JSON_DEPTH) return value;\n if (Array.isArray(value)) {\n if (seen.has(value)) return '[Circular]';\n seen.add(value);\n const out = value.map(v => redactSecrets(v, effectivePattern, depth + 1, seen));\n seen.delete(value);\n return out;\n }\n if (value && typeof value === 'object') {\n if (seen.has(value)) return '[Circular]';\n seen.add(value);\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(value as Record<string, unknown>)) {\n
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/utils/redact-secrets.ts"],"sourcesContent":["/**\n * Recursive secret-key redaction.\n *\n * The runner-output-contract.yaml security block (`payload_redaction`) and\n * the `comply-test-controller-response.json` `recorded_calls[].payload`\n * description both mandate the same recursive walk: any property whose\n * final-path-segment key matches the canonical pattern below has its scalar\n * value replaced with the literal string `\"[redacted]\"`. The walk is capped\n * at the same depth the upstream-recorder accepts for JSON canonicalization;\n * the recorder rejects deeper structured payloads after redaction so it does\n * not store subtrees beyond this cap.\n *\n * Spec: `static/compliance/source/universal/runner-output-contract.yaml`\n * (`payload_redaction.pattern`). The runner uses this to redact request /\n * response payloads on `validation_result.request` / `.response`. The\n * `@adcp/sdk/upstream-recorder` uses this at *recording* time so plaintext\n * secrets never sit in the recorded-calls buffer in memory, even briefly.\n *\n * Matching is case-insensitive and structural — the pattern matches against\n * the property KEY, not the value. Adopters MAY extend the pattern via the\n * recorder's `redactPattern` option, but MUST NOT narrow it.\n */\n\nimport { MAX_JSON_DEPTH } from './json-depth';\n\n/**\n * Canonical secret-key pattern from the AdCP runner-output contract. Mirrors\n * the spec block: `Authorization`, `Credentials`, tokens, API keys,\n * passwords, secrets, OAuth refresh / access bearers, session tokens,\n * cookies. Case-insensitive.\n */\nexport const SECRET_KEY_PATTERN =\n /^(authorization|credentials?|token|api[_-]?key|password|secret|client[_-]secret|refresh[_-]token|access[_-]token|bearer|session[_-]token|session[_-]id|offering[_-]token|cookie|set[_-]cookie)$/i;\n\nexport function normalizeSecretKeyPattern(pattern: RegExp): RegExp {\n if (!/[gy]/.test(pattern.flags)) return pattern;\n return new RegExp(pattern.source, pattern.flags.replace(/[gy]/g, ''));\n}\n\nexport function secretKeyPatternMatches(pattern: RegExp, key: string): boolean {\n const lastIndex = pattern.lastIndex;\n pattern.lastIndex = 0;\n const matched = pattern.test(key);\n pattern.lastIndex = lastIndex;\n return matched;\n}\n\n/**\n * Maximum recursion depth for the redaction walk. Keep this aligned with the\n * upstream-recorder JSON canonicalization depth; recorder paths also run the\n * depth gate after redaction so structured payloads beyond the cap are\n * rejected instead of stored with unvisited subtrees.\n */\n/**\n * Recursively walk `value`, returning a structurally-identical clone with\n * scalar values at secret-shaped keys replaced by `\"[redacted]\"`. Pass an\n * optional `pattern` to override the canonical pattern (typically by\n * extending it — adopters MAY add internal vendor headers but MUST NOT\n * narrow the contract floor).\n *\n * Non-mutating — the input is never touched.\n */\nexport function redactSecrets(\n value: unknown,\n pattern: RegExp = SECRET_KEY_PATTERN,\n depth = 0,\n seen: WeakSet<object> = new WeakSet()\n): unknown {\n const effectivePattern = normalizeSecretKeyPattern(pattern);\n if (depth > MAX_JSON_DEPTH) return value;\n if (Array.isArray(value)) {\n if (seen.has(value)) return '[Circular]';\n seen.add(value);\n const out = value.map(v => redactSecrets(v, effectivePattern, depth + 1, seen));\n seen.delete(value);\n return out;\n }\n if (value && typeof value === 'object') {\n if (seen.has(value)) return '[Circular]';\n seen.add(value);\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(value as Record<string, unknown>)) {\n const redacted =\n secretKeyPatternMatches(effectivePattern, k) && (typeof v === 'string' || typeof v === 'number')\n ? '[redacted]'\n : redactSecrets(v, effectivePattern, depth + 1, seen);\n // Define rather than assign so an own JSON key named `__proto__`\n // remains data instead of invoking Object.prototype's legacy setter.\n // Trusted Match provider ids explicitly exercise this boundary.\n Object.defineProperty(out, k, {\n value: redacted,\n enumerable: true,\n configurable: true,\n writable: true,\n });\n }\n seen.delete(value);\n return out;\n }\n return value;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAuBA,wBAA+B;AAQxB,MAAM,qBACX;AAEK,SAAS,0BAA0B,SAAyB;AACjE,MAAI,CAAC,OAAO,KAAK,QAAQ,KAAK,EAAG,QAAO;AACxC,SAAO,IAAI,OAAO,QAAQ,QAAQ,QAAQ,MAAM,QAAQ,SAAS,EAAE,CAAC;AACtE;AAEO,SAAS,wBAAwB,SAAiB,KAAsB;AAC7E,QAAM,YAAY,QAAQ;AAC1B,UAAQ,YAAY;AACpB,QAAM,UAAU,QAAQ,KAAK,GAAG;AAChC,UAAQ,YAAY;AACpB,SAAO;AACT;AAiBO,SAAS,cACd,OACA,UAAkB,oBAClB,QAAQ,GACR,OAAwB,oBAAI,QAAQ,GAC3B;AACT,QAAM,mBAAmB,0BAA0B,OAAO;AAC1D,MAAI,QAAQ,iCAAgB,QAAO;AACnC,MAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,QAAI,KAAK,IAAI,KAAK,EAAG,QAAO;AAC5B,SAAK,IAAI,KAAK;AACd,UAAM,MAAM,MAAM,IAAI,OAAK,cAAc,GAAG,kBAAkB,QAAQ,GAAG,IAAI,CAAC;AAC9E,SAAK,OAAO,KAAK;AACjB,WAAO;AAAA,EACT;AACA,MAAI,SAAS,OAAO,UAAU,UAAU;AACtC,QAAI,KAAK,IAAI,KAAK,EAAG,QAAO;AAC5B,SAAK,IAAI,KAAK;AACd,UAAM,MAA+B,CAAC;AACtC,eAAW,CAAC,GAAG,CAAC,KAAK,OAAO,QAAQ,KAAgC,GAAG;AACrE,YAAM,WACJ,wBAAwB,kBAAkB,CAAC,MAAM,OAAO,MAAM,YAAY,OAAO,MAAM,YACnF,eACA,cAAc,GAAG,kBAAkB,QAAQ,GAAG,IAAI;AAIxD,aAAO,eAAe,KAAK,GAAG;AAAA,QAC5B,OAAO;AAAA,QACP,YAAY;AAAA,QACZ,cAAc;AAAA,QACd,UAAU;AAAA,MACZ,CAAC;AAAA,IACH;AACA,SAAK,OAAO,KAAK;AACjB,WAAO;AAAA,EACT;AACA,SAAO;AACT;","names":[]}
|
|
@@ -26,7 +26,13 @@ function redactSecrets(value, pattern = SECRET_KEY_PATTERN, depth = 0, seen = /*
|
|
|
26
26
|
seen.add(value);
|
|
27
27
|
const out = {};
|
|
28
28
|
for (const [k, v] of Object.entries(value)) {
|
|
29
|
-
|
|
29
|
+
const redacted = secretKeyPatternMatches(effectivePattern, k) && (typeof v === "string" || typeof v === "number") ? "[redacted]" : redactSecrets(v, effectivePattern, depth + 1, seen);
|
|
30
|
+
Object.defineProperty(out, k, {
|
|
31
|
+
value: redacted,
|
|
32
|
+
enumerable: true,
|
|
33
|
+
configurable: true,
|
|
34
|
+
writable: true
|
|
35
|
+
});
|
|
30
36
|
}
|
|
31
37
|
seen.delete(value);
|
|
32
38
|
return out;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/utils/redact-secrets.ts"],"sourcesContent":["/**\n * Recursive secret-key redaction.\n *\n * The runner-output-contract.yaml security block (`payload_redaction`) and\n * the `comply-test-controller-response.json` `recorded_calls[].payload`\n * description both mandate the same recursive walk: any property whose\n * final-path-segment key matches the canonical pattern below has its scalar\n * value replaced with the literal string `\"[redacted]\"`. The walk is capped\n * at the same depth the upstream-recorder accepts for JSON canonicalization;\n * the recorder rejects deeper structured payloads after redaction so it does\n * not store subtrees beyond this cap.\n *\n * Spec: `static/compliance/source/universal/runner-output-contract.yaml`\n * (`payload_redaction.pattern`). The runner uses this to redact request /\n * response payloads on `validation_result.request` / `.response`. The\n * `@adcp/sdk/upstream-recorder` uses this at *recording* time so plaintext\n * secrets never sit in the recorded-calls buffer in memory, even briefly.\n *\n * Matching is case-insensitive and structural — the pattern matches against\n * the property KEY, not the value. Adopters MAY extend the pattern via the\n * recorder's `redactPattern` option, but MUST NOT narrow it.\n */\n\nimport { MAX_JSON_DEPTH } from './json-depth';\n\n/**\n * Canonical secret-key pattern from the AdCP runner-output contract. Mirrors\n * the spec block: `Authorization`, `Credentials`, tokens, API keys,\n * passwords, secrets, OAuth refresh / access bearers, session tokens,\n * cookies. Case-insensitive.\n */\nexport const SECRET_KEY_PATTERN =\n /^(authorization|credentials?|token|api[_-]?key|password|secret|client[_-]secret|refresh[_-]token|access[_-]token|bearer|session[_-]token|session[_-]id|offering[_-]token|cookie|set[_-]cookie)$/i;\n\nexport function normalizeSecretKeyPattern(pattern: RegExp): RegExp {\n if (!/[gy]/.test(pattern.flags)) return pattern;\n return new RegExp(pattern.source, pattern.flags.replace(/[gy]/g, ''));\n}\n\nexport function secretKeyPatternMatches(pattern: RegExp, key: string): boolean {\n const lastIndex = pattern.lastIndex;\n pattern.lastIndex = 0;\n const matched = pattern.test(key);\n pattern.lastIndex = lastIndex;\n return matched;\n}\n\n/**\n * Maximum recursion depth for the redaction walk. Keep this aligned with the\n * upstream-recorder JSON canonicalization depth; recorder paths also run the\n * depth gate after redaction so structured payloads beyond the cap are\n * rejected instead of stored with unvisited subtrees.\n */\n/**\n * Recursively walk `value`, returning a structurally-identical clone with\n * scalar values at secret-shaped keys replaced by `\"[redacted]\"`. Pass an\n * optional `pattern` to override the canonical pattern (typically by\n * extending it — adopters MAY add internal vendor headers but MUST NOT\n * narrow the contract floor).\n *\n * Non-mutating — the input is never touched.\n */\nexport function redactSecrets(\n value: unknown,\n pattern: RegExp = SECRET_KEY_PATTERN,\n depth = 0,\n seen: WeakSet<object> = new WeakSet()\n): unknown {\n const effectivePattern = normalizeSecretKeyPattern(pattern);\n if (depth > MAX_JSON_DEPTH) return value;\n if (Array.isArray(value)) {\n if (seen.has(value)) return '[Circular]';\n seen.add(value);\n const out = value.map(v => redactSecrets(v, effectivePattern, depth + 1, seen));\n seen.delete(value);\n return out;\n }\n if (value && typeof value === 'object') {\n if (seen.has(value)) return '[Circular]';\n seen.add(value);\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(value as Record<string, unknown>)) {\n
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/utils/redact-secrets.ts"],"sourcesContent":["/**\n * Recursive secret-key redaction.\n *\n * The runner-output-contract.yaml security block (`payload_redaction`) and\n * the `comply-test-controller-response.json` `recorded_calls[].payload`\n * description both mandate the same recursive walk: any property whose\n * final-path-segment key matches the canonical pattern below has its scalar\n * value replaced with the literal string `\"[redacted]\"`. The walk is capped\n * at the same depth the upstream-recorder accepts for JSON canonicalization;\n * the recorder rejects deeper structured payloads after redaction so it does\n * not store subtrees beyond this cap.\n *\n * Spec: `static/compliance/source/universal/runner-output-contract.yaml`\n * (`payload_redaction.pattern`). The runner uses this to redact request /\n * response payloads on `validation_result.request` / `.response`. The\n * `@adcp/sdk/upstream-recorder` uses this at *recording* time so plaintext\n * secrets never sit in the recorded-calls buffer in memory, even briefly.\n *\n * Matching is case-insensitive and structural — the pattern matches against\n * the property KEY, not the value. Adopters MAY extend the pattern via the\n * recorder's `redactPattern` option, but MUST NOT narrow it.\n */\n\nimport { MAX_JSON_DEPTH } from './json-depth';\n\n/**\n * Canonical secret-key pattern from the AdCP runner-output contract. Mirrors\n * the spec block: `Authorization`, `Credentials`, tokens, API keys,\n * passwords, secrets, OAuth refresh / access bearers, session tokens,\n * cookies. Case-insensitive.\n */\nexport const SECRET_KEY_PATTERN =\n /^(authorization|credentials?|token|api[_-]?key|password|secret|client[_-]secret|refresh[_-]token|access[_-]token|bearer|session[_-]token|session[_-]id|offering[_-]token|cookie|set[_-]cookie)$/i;\n\nexport function normalizeSecretKeyPattern(pattern: RegExp): RegExp {\n if (!/[gy]/.test(pattern.flags)) return pattern;\n return new RegExp(pattern.source, pattern.flags.replace(/[gy]/g, ''));\n}\n\nexport function secretKeyPatternMatches(pattern: RegExp, key: string): boolean {\n const lastIndex = pattern.lastIndex;\n pattern.lastIndex = 0;\n const matched = pattern.test(key);\n pattern.lastIndex = lastIndex;\n return matched;\n}\n\n/**\n * Maximum recursion depth for the redaction walk. Keep this aligned with the\n * upstream-recorder JSON canonicalization depth; recorder paths also run the\n * depth gate after redaction so structured payloads beyond the cap are\n * rejected instead of stored with unvisited subtrees.\n */\n/**\n * Recursively walk `value`, returning a structurally-identical clone with\n * scalar values at secret-shaped keys replaced by `\"[redacted]\"`. Pass an\n * optional `pattern` to override the canonical pattern (typically by\n * extending it — adopters MAY add internal vendor headers but MUST NOT\n * narrow the contract floor).\n *\n * Non-mutating — the input is never touched.\n */\nexport function redactSecrets(\n value: unknown,\n pattern: RegExp = SECRET_KEY_PATTERN,\n depth = 0,\n seen: WeakSet<object> = new WeakSet()\n): unknown {\n const effectivePattern = normalizeSecretKeyPattern(pattern);\n if (depth > MAX_JSON_DEPTH) return value;\n if (Array.isArray(value)) {\n if (seen.has(value)) return '[Circular]';\n seen.add(value);\n const out = value.map(v => redactSecrets(v, effectivePattern, depth + 1, seen));\n seen.delete(value);\n return out;\n }\n if (value && typeof value === 'object') {\n if (seen.has(value)) return '[Circular]';\n seen.add(value);\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(value as Record<string, unknown>)) {\n const redacted =\n secretKeyPatternMatches(effectivePattern, k) && (typeof v === 'string' || typeof v === 'number')\n ? '[redacted]'\n : redactSecrets(v, effectivePattern, depth + 1, seen);\n // Define rather than assign so an own JSON key named `__proto__`\n // remains data instead of invoking Object.prototype's legacy setter.\n // Trusted Match provider ids explicitly exercise this boundary.\n Object.defineProperty(out, k, {\n value: redacted,\n enumerable: true,\n configurable: true,\n writable: true,\n });\n }\n seen.delete(value);\n return out;\n }\n return value;\n}\n"],"mappings":"AAuBA,SAAS,sBAAsB;AAQxB,MAAM,qBACX;AAEK,SAAS,0BAA0B,SAAyB;AACjE,MAAI,CAAC,OAAO,KAAK,QAAQ,KAAK,EAAG,QAAO;AACxC,SAAO,IAAI,OAAO,QAAQ,QAAQ,QAAQ,MAAM,QAAQ,SAAS,EAAE,CAAC;AACtE;AAEO,SAAS,wBAAwB,SAAiB,KAAsB;AAC7E,QAAM,YAAY,QAAQ;AAC1B,UAAQ,YAAY;AACpB,QAAM,UAAU,QAAQ,KAAK,GAAG;AAChC,UAAQ,YAAY;AACpB,SAAO;AACT;AAiBO,SAAS,cACd,OACA,UAAkB,oBAClB,QAAQ,GACR,OAAwB,oBAAI,QAAQ,GAC3B;AACT,QAAM,mBAAmB,0BAA0B,OAAO;AAC1D,MAAI,QAAQ,eAAgB,QAAO;AACnC,MAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,QAAI,KAAK,IAAI,KAAK,EAAG,QAAO;AAC5B,SAAK,IAAI,KAAK;AACd,UAAM,MAAM,MAAM,IAAI,OAAK,cAAc,GAAG,kBAAkB,QAAQ,GAAG,IAAI,CAAC;AAC9E,SAAK,OAAO,KAAK;AACjB,WAAO;AAAA,EACT;AACA,MAAI,SAAS,OAAO,UAAU,UAAU;AACtC,QAAI,KAAK,IAAI,KAAK,EAAG,QAAO;AAC5B,SAAK,IAAI,KAAK;AACd,UAAM,MAA+B,CAAC;AACtC,eAAW,CAAC,GAAG,CAAC,KAAK,OAAO,QAAQ,KAAgC,GAAG;AACrE,YAAM,WACJ,wBAAwB,kBAAkB,CAAC,MAAM,OAAO,MAAM,YAAY,OAAO,MAAM,YACnF,eACA,cAAc,GAAG,kBAAkB,QAAQ,GAAG,IAAI;AAIxD,aAAO,eAAe,KAAK,GAAG;AAAA,QAC5B,OAAO;AAAA,QACP,YAAY;AAAA,QACZ,cAAc;AAAA,QACd,UAAU;AAAA,MACZ,CAAC;AAAA,IACH;AACA,SAAK,OAAO,KAAK;AACjB,WAAO;AAAA,EACT;AACA,SAAO;AACT;","names":[]}
|
|
@@ -133,3 +133,19 @@ export declare function hasSchemaBundle(version: string): boolean;
|
|
|
133
133
|
* bundle).
|
|
134
134
|
*/
|
|
135
135
|
export declare function _resetValidationLoader(version?: string): void;
|
|
136
|
+
export interface SchemaEntityPath {
|
|
137
|
+
/** Property path from the tool request root. `*` addresses every array item. */
|
|
138
|
+
path: string[];
|
|
139
|
+
/** AdCP `x-entity` annotation found on the identity-bearing leaf. */
|
|
140
|
+
xEntity: string;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Return every request field carrying an `x-entity` annotation. Unlike the
|
|
144
|
+
* server hydration map this walks nested arrays/objects, because storyboard
|
|
145
|
+
* fixture handles commonly live at `packages[*].product_id` and
|
|
146
|
+
* `packages[*].pricing_option_id`.
|
|
147
|
+
*
|
|
148
|
+
* Missing schemas fail closed with an empty list: handle substitution must
|
|
149
|
+
* never guess from a field name alone.
|
|
150
|
+
*/
|
|
151
|
+
export declare function getRequestSchemaEntityPaths(toolName: string, version?: string): readonly SchemaEntityPath[];
|
|
@@ -133,4 +133,20 @@ export declare function hasSchemaBundle(version: string): boolean;
|
|
|
133
133
|
* bundle).
|
|
134
134
|
*/
|
|
135
135
|
export declare function _resetValidationLoader(version?: string): void;
|
|
136
|
+
export interface SchemaEntityPath {
|
|
137
|
+
/** Property path from the tool request root. `*` addresses every array item. */
|
|
138
|
+
path: string[];
|
|
139
|
+
/** AdCP `x-entity` annotation found on the identity-bearing leaf. */
|
|
140
|
+
xEntity: string;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Return every request field carrying an `x-entity` annotation. Unlike the
|
|
144
|
+
* server hydration map this walks nested arrays/objects, because storyboard
|
|
145
|
+
* fixture handles commonly live at `packages[*].product_id` and
|
|
146
|
+
* `packages[*].pricing_option_id`.
|
|
147
|
+
*
|
|
148
|
+
* Missing schemas fail closed with an empty list: handle substitution must
|
|
149
|
+
* never guess from a field name alone.
|
|
150
|
+
*/
|
|
151
|
+
export declare function getRequestSchemaEntityPaths(toolName: string, version?: string): readonly SchemaEntityPath[];
|
|
136
152
|
//# sourceMappingURL=schema-loader.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema-loader.d.ts","sourceRoot":"","sources":["../../../src/lib/validation/schema-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAY,EAAE,KAAK,gBAAgB,EAAE,MAAM,KAAK,CAAC;AAQjD,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,WAAW,GAAG,SAAS,GAAG,gBAAgB,CAAC;AAClF,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,eAAe,CAAC;AAOpD,QAAA,MAAM,sBAAsB,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAMrD,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAgCxD;AAmDD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,KAAK,IAAI,MAAM,CAgB/E;AAED,wBAAgB,sBAAsB,CAAC,kBAAkB,EAAE,MAAM,GAAG,MAAM,CAsBzE;
|
|
1
|
+
{"version":3,"file":"schema-loader.d.ts","sourceRoot":"","sources":["../../../src/lib/validation/schema-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAY,EAAE,KAAK,gBAAgB,EAAE,MAAM,KAAK,CAAC;AAQjD,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,WAAW,GAAG,SAAS,GAAG,gBAAgB,CAAC;AAClF,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,eAAe,CAAC;AAOpD,QAAA,MAAM,sBAAsB,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAMrD,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAgCxD;AAmDD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,KAAK,IAAI,MAAM,CAgB/E;AAED,wBAAgB,sBAAsB,CAAC,kBAAkB,EAAE,MAAM,GAAG,MAAM,CAsBzE;AAkPD;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAY9E;AAED,oEAAoE;AACpE,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAiBlE;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAanG;AA6ND;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,SAAS,EACpB,OAAO,GAAE,MAAqB,GAC7B,gBAAgB,GAAG,SAAS,CAoC9B;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,MAAqB,GAC7B,gBAAgB,GAAG,SAAS,CAwC9B;AAuCD,4EAA4E;AAC5E,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,MAAqB,GAAG,MAAM,EAAE,CAG1E;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,GAAE,MAAqB,GAAG,SAAS,MAAM,EAAE,CAMxF;AAED,8DAA8D;AAC9D,OAAO,EAAE,sBAAsB,EAAE,CAAC;AAElC;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAOxD;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAM7D;AAkDD,MAAM,WAAW,gBAAgB;IAC/B,gFAAgF;IAChF,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,qEAAqE;IACrE,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;GAQG;AACH,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,MAAqB,GAC7B,SAAS,gBAAgB,EAAE,CAuI7B"}
|
|
@@ -31,6 +31,7 @@ __export(schema_loader_exports, {
|
|
|
31
31
|
SCHEMA_FILENAME_SUFFIX: () => SCHEMA_FILENAME_SUFFIX,
|
|
32
32
|
_resetValidationLoader: () => _resetValidationLoader,
|
|
33
33
|
getRegisteredSchemaIds: () => getRegisteredSchemaIds,
|
|
34
|
+
getRequestSchemaEntityPaths: () => getRequestSchemaEntityPaths,
|
|
34
35
|
getSchemaDefaultByPath: () => getSchemaDefaultByPath,
|
|
35
36
|
getSchemaValidatorByRef: () => getSchemaValidatorByRef,
|
|
36
37
|
getValidator: () => getValidator,
|
|
@@ -387,6 +388,7 @@ function ensureInit(version) {
|
|
|
387
388
|
fileIndex: buildFileIndex(root),
|
|
388
389
|
validators: /* @__PURE__ */ new Map(),
|
|
389
390
|
rawSchemas: /* @__PURE__ */ new Map(),
|
|
391
|
+
entityPaths: /* @__PURE__ */ new Map(),
|
|
390
392
|
root,
|
|
391
393
|
coreLoaded: false,
|
|
392
394
|
version: key
|
|
@@ -536,6 +538,119 @@ function schemaAllowsTopLevelField(toolName, field, version = import_version.ADC
|
|
|
536
538
|
return true;
|
|
537
539
|
}
|
|
538
540
|
}
|
|
541
|
+
function getRequestSchemaEntityPaths(toolName, version = import_version.ADCP_VERSION) {
|
|
542
|
+
try {
|
|
543
|
+
const s = ensureInit(version);
|
|
544
|
+
const cacheKey = `${toolName}::request`;
|
|
545
|
+
const cached = s.entityPaths.get(cacheKey);
|
|
546
|
+
if (cached) return cached;
|
|
547
|
+
const file = s.fileIndex.get(cacheKey);
|
|
548
|
+
if (!file) return [];
|
|
549
|
+
const root = loadJson(file);
|
|
550
|
+
const found = /* @__PURE__ */ new Map();
|
|
551
|
+
const stack = /* @__PURE__ */ new Set();
|
|
552
|
+
const resolvePointer = (document, fragment) => {
|
|
553
|
+
if (!fragment || fragment === "#") return document;
|
|
554
|
+
if (!fragment.startsWith("#/")) return void 0;
|
|
555
|
+
let current = document;
|
|
556
|
+
for (const encoded of fragment.slice(2).split("/")) {
|
|
557
|
+
if (!current || typeof current !== "object") return void 0;
|
|
558
|
+
const key = encoded.replace(/~1/g, "/").replace(/~0/g, "~");
|
|
559
|
+
current = current[key];
|
|
560
|
+
}
|
|
561
|
+
return current;
|
|
562
|
+
};
|
|
563
|
+
const resolveRef = (ref, currentFile, currentDocument) => {
|
|
564
|
+
const hash = ref.indexOf("#");
|
|
565
|
+
const refPath = hash >= 0 ? ref.slice(0, hash) : ref;
|
|
566
|
+
const fragment = hash >= 0 ? ref.slice(hash) : "";
|
|
567
|
+
if (!refPath) {
|
|
568
|
+
return {
|
|
569
|
+
node: resolvePointer(currentDocument, fragment),
|
|
570
|
+
file: currentFile,
|
|
571
|
+
document: currentDocument,
|
|
572
|
+
key: `${currentFile}${fragment}`
|
|
573
|
+
};
|
|
574
|
+
}
|
|
575
|
+
const schemaRelative = refPath.match(/\/schemas\/[^/]+\/(.+)$/)?.[1];
|
|
576
|
+
const candidates = [
|
|
577
|
+
schemaRelative ? import_path.default.join(s.root, schemaRelative) : void 0,
|
|
578
|
+
import_path.default.resolve(import_path.default.dirname(currentFile), refPath)
|
|
579
|
+
].filter((candidate) => candidate !== void 0);
|
|
580
|
+
let targetFile = candidates.find((candidate) => (0, import_fs.existsSync)(candidate));
|
|
581
|
+
if (!targetFile) {
|
|
582
|
+
if (!s.schemaIdFiles) {
|
|
583
|
+
const idToFile = /* @__PURE__ */ new Map();
|
|
584
|
+
for (const schemaFile of walkJsonFiles(s.root)) {
|
|
585
|
+
try {
|
|
586
|
+
const schema = loadJson(schemaFile);
|
|
587
|
+
if (typeof schema.$id === "string") idToFile.set(schema.$id, schemaFile);
|
|
588
|
+
} catch {
|
|
589
|
+
}
|
|
590
|
+
}
|
|
591
|
+
s.schemaIdFiles = idToFile;
|
|
592
|
+
}
|
|
593
|
+
targetFile = s.schemaIdFiles.get(refPath);
|
|
594
|
+
}
|
|
595
|
+
if (!targetFile) return void 0;
|
|
596
|
+
const document = loadJson(targetFile);
|
|
597
|
+
return {
|
|
598
|
+
node: resolvePointer(document, fragment),
|
|
599
|
+
file: targetFile,
|
|
600
|
+
document,
|
|
601
|
+
key: `${targetFile}${fragment}`
|
|
602
|
+
};
|
|
603
|
+
};
|
|
604
|
+
const walk = (node, propertyPath, currentFile, currentDocument, depth) => {
|
|
605
|
+
if (!node || typeof node !== "object" || depth > 48) return;
|
|
606
|
+
const obj = node;
|
|
607
|
+
if (typeof obj["x-entity"] === "string" && propertyPath.length > 0) {
|
|
608
|
+
const entityPath = { path: [...propertyPath], xEntity: obj["x-entity"] };
|
|
609
|
+
found.set(`${entityPath.path.join(".")}\0${entityPath.xEntity}`, entityPath);
|
|
610
|
+
}
|
|
611
|
+
if (typeof obj.$ref === "string") {
|
|
612
|
+
const target = resolveRef(obj.$ref, currentFile, currentDocument);
|
|
613
|
+
if (target && target.node !== void 0) {
|
|
614
|
+
const guard = `${target.key}\0${propertyPath.join(".")}`;
|
|
615
|
+
if (!stack.has(guard)) {
|
|
616
|
+
stack.add(guard);
|
|
617
|
+
walk(target.node, propertyPath, target.file, target.document, depth + 1);
|
|
618
|
+
stack.delete(guard);
|
|
619
|
+
}
|
|
620
|
+
}
|
|
621
|
+
}
|
|
622
|
+
const properties = obj.properties;
|
|
623
|
+
if (properties && typeof properties === "object" && !Array.isArray(properties)) {
|
|
624
|
+
for (const [key, child] of Object.entries(properties)) {
|
|
625
|
+
walk(child, [...propertyPath, key], currentFile, currentDocument, depth + 1);
|
|
626
|
+
}
|
|
627
|
+
}
|
|
628
|
+
if (obj.items !== void 0) {
|
|
629
|
+
walk(obj.items, [...propertyPath, "*"], currentFile, currentDocument, depth + 1);
|
|
630
|
+
}
|
|
631
|
+
for (const keyword of ["allOf", "anyOf", "oneOf"]) {
|
|
632
|
+
const branches = obj[keyword];
|
|
633
|
+
if (Array.isArray(branches)) {
|
|
634
|
+
for (const branch of branches) walk(branch, propertyPath, currentFile, currentDocument, depth + 1);
|
|
635
|
+
}
|
|
636
|
+
}
|
|
637
|
+
for (const keyword of ["if", "then", "else", "not"]) {
|
|
638
|
+
if (obj[keyword] !== void 0) {
|
|
639
|
+
walk(obj[keyword], propertyPath, currentFile, currentDocument, depth + 1);
|
|
640
|
+
}
|
|
641
|
+
}
|
|
642
|
+
};
|
|
643
|
+
walk(root, [], file, root, 0);
|
|
644
|
+
const result = [...found.values()].sort((a, b) => {
|
|
645
|
+
const byPath = a.path.join(".").localeCompare(b.path.join("."));
|
|
646
|
+
return byPath || a.xEntity.localeCompare(b.xEntity);
|
|
647
|
+
});
|
|
648
|
+
s.entityPaths.set(cacheKey, result);
|
|
649
|
+
return result;
|
|
650
|
+
} catch {
|
|
651
|
+
return [];
|
|
652
|
+
}
|
|
653
|
+
}
|
|
539
654
|
function getSchemaDefaultByPath(schemaRef, dottedPath, version = import_version.ADCP_VERSION) {
|
|
540
655
|
try {
|
|
541
656
|
const s = ensureInit(version);
|
|
@@ -576,6 +691,7 @@ function cloneJsonValue(value) {
|
|
|
576
691
|
SCHEMA_FILENAME_SUFFIX,
|
|
577
692
|
_resetValidationLoader,
|
|
578
693
|
getRegisteredSchemaIds,
|
|
694
|
+
getRequestSchemaEntityPaths,
|
|
579
695
|
getSchemaDefaultByPath,
|
|
580
696
|
getSchemaValidatorByRef,
|
|
581
697
|
getValidator,
|