@adcp/sdk 16.0.0-beta.8 → 16.0.0
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/AGENTS.md +3 -3
- package/README.md +5 -2
- package/bin/adcp.js +10 -13
- package/dist/lib/core/AgentClient.d.mts +8 -5
- package/dist/lib/core/AgentClient.d.ts +8 -5
- package/dist/lib/core/AgentClient.js +9 -4
- package/dist/lib/core/AgentClient.mjs +9 -4
- package/dist/lib/core/SingleAgentClient.d.mts +19 -112
- package/dist/lib/core/SingleAgentClient.d.ts +19 -112
- package/dist/lib/core/SingleAgentClient.js +270 -252
- package/dist/lib/core/SingleAgentClient.mjs +275 -253
- package/dist/lib/core/TaskExecutor.d.mts +1 -16
- package/dist/lib/core/TaskExecutor.d.ts +1 -16
- package/dist/lib/core/TaskExecutor.js +34 -51
- package/dist/lib/core/TaskExecutor.mjs +12 -29
- package/dist/lib/core/product-cache.d.mts +3 -1
- package/dist/lib/core/product-cache.d.ts +3 -1
- package/dist/lib/core/product-cache.js +2 -1
- package/dist/lib/core/product-cache.mjs +2 -1
- package/dist/lib/errors/index.d.mts +2 -8
- package/dist/lib/errors/index.d.ts +2 -8
- package/dist/lib/errors/index.js +4 -4
- package/dist/lib/errors/index.mjs +4 -4
- package/dist/lib/identity-3.3/revocation.js +6 -7
- package/dist/lib/identity-3.3/revocation.mjs +6 -7
- package/dist/lib/index.d.mts +4 -4
- package/dist/lib/index.d.ts +4 -4
- package/dist/lib/index.js +0 -14
- package/dist/lib/index.mjs +0 -14
- package/dist/lib/media-buy/compatibility.d.mts +1 -1
- package/dist/lib/media-buy/compatibility.d.ts +1 -1
- package/dist/lib/media-buy/compatibility.js +26 -45
- package/dist/lib/media-buy/compatibility.mjs +26 -45
- package/dist/lib/media-buy/legacy-purchase-continuation.d.mts +2 -2
- package/dist/lib/media-buy/legacy-purchase-continuation.d.ts +2 -2
- package/dist/lib/protocols/index.js +14 -22
- package/dist/lib/protocols/index.mjs +5 -13
- package/dist/lib/registry/types.d.mts +3 -2
- package/dist/lib/registry/types.d.ts +3 -2
- package/dist/lib/registry/types.generated.d.mts +51 -11
- package/dist/lib/registry/types.generated.d.ts +51 -11
- package/dist/lib/reporting/source/conformance.d.mts +8 -8
- package/dist/lib/reporting/source/conformance.d.ts +8 -8
- package/dist/lib/reporting/source/manifest.d.mts +27 -27
- package/dist/lib/reporting/source/manifest.d.ts +27 -27
- package/dist/lib/server/create-adcp-server.js +7 -1
- package/dist/lib/server/create-adcp-server.mjs +7 -1
- package/dist/lib/signing/crypto.d.mts +1 -1
- package/dist/lib/signing/crypto.d.ts +1 -1
- package/dist/lib/signing/crypto.js +2 -45
- package/dist/lib/signing/crypto.mjs +2 -46
- package/dist/lib/signing/web-bot-auth.d.mts +18 -10
- package/dist/lib/signing/web-bot-auth.d.ts +18 -10
- package/dist/lib/signing/web-bot-auth.js +29 -24
- package/dist/lib/signing/web-bot-auth.mjs +29 -24
- package/dist/lib/testing/compliance/comply.js +0 -8
- package/dist/lib/testing/compliance/comply.mjs +0 -8
- package/dist/lib/testing/compliance/storyboard-tracks.js +11 -0
- package/dist/lib/testing/compliance/storyboard-tracks.mjs +11 -0
- package/dist/lib/testing/index.d.mts +2 -0
- package/dist/lib/testing/index.d.ts +2 -0
- package/dist/lib/testing/index.js +5 -0
- package/dist/lib/testing/index.mjs +3 -0
- package/dist/lib/testing/scenarios/capabilities.d.mts +2 -2
- package/dist/lib/testing/scenarios/capabilities.d.ts +2 -2
- package/dist/lib/testing/scenarios/capabilities.js +8 -41
- package/dist/lib/testing/scenarios/capabilities.mjs +9 -42
- package/dist/lib/testing/storyboard/creative-build-probe.d.mts +34 -0
- package/dist/lib/testing/storyboard/creative-build-probe.d.ts +34 -0
- package/dist/lib/testing/storyboard/creative-build-probe.js +395 -0
- package/dist/lib/testing/storyboard/creative-build-probe.mjs +373 -0
- package/dist/lib/testing/storyboard/index.d.mts +2 -0
- package/dist/lib/testing/storyboard/index.d.ts +2 -0
- package/dist/lib/testing/storyboard/index.js +5 -0
- package/dist/lib/testing/storyboard/index.mjs +3 -0
- package/dist/lib/testing/storyboard/loader.js +12 -0
- package/dist/lib/testing/storyboard/loader.mjs +12 -0
- package/dist/lib/testing/storyboard/property-list-reference.d.mts +15 -0
- package/dist/lib/testing/storyboard/property-list-reference.d.ts +15 -0
- package/dist/lib/testing/storyboard/property-list-reference.js +514 -0
- package/dist/lib/testing/storyboard/property-list-reference.mjs +487 -0
- package/dist/lib/testing/storyboard/runner.js +318 -58
- package/dist/lib/testing/storyboard/runner.mjs +322 -58
- package/dist/lib/testing/storyboard/types.d.mts +38 -16
- package/dist/lib/testing/storyboard/types.d.ts +38 -16
- package/dist/lib/testing/storyboard/types.js +1 -0
- package/dist/lib/testing/storyboard/types.mjs +1 -0
- package/dist/lib/testing/storyboard/validations.d.mts +1 -1
- package/dist/lib/testing/storyboard/validations.d.ts +1 -1
- package/dist/lib/testing/storyboard/validations.js +64 -0
- package/dist/lib/testing/storyboard/validations.mjs +67 -1
- package/dist/lib/testing/types.d.mts +15 -1
- package/dist/lib/testing/types.d.ts +15 -1
- package/dist/lib/types/schemas.generated.d.ts +65 -65
- package/dist/lib/types/wellknown-schemas.generated.d.mts +21 -21
- package/dist/lib/types/wellknown-schemas.generated.d.ts +21 -21
- package/dist/lib/utils/adcp-version-config.js +6 -0
- package/dist/lib/utils/adcp-version-config.mjs +6 -0
- package/dist/lib/utils/capabilities.d.mts +7 -9
- package/dist/lib/utils/capabilities.d.ts +7 -9
- package/dist/lib/utils/capabilities.js +14 -28
- package/dist/lib/utils/capabilities.mjs +14 -27
- package/dist/lib/utils/creative-adapter.d.mts +15 -113
- package/dist/lib/utils/creative-adapter.d.ts +15 -113
- package/dist/lib/utils/creative-adapter.js +7 -106
- package/dist/lib/utils/creative-adapter.mjs +7 -102
- package/dist/lib/utils/format-renders.d.mts +20 -80
- package/dist/lib/utils/format-renders.d.ts +20 -80
- package/dist/lib/utils/format-renders.js +7 -67
- package/dist/lib/utils/format-renders.mjs +7 -66
- package/dist/lib/utils/index.d.mts +1 -2
- package/dist/lib/utils/index.d.ts +1 -2
- package/dist/lib/utils/index.js +0 -7
- package/dist/lib/utils/index.mjs +0 -6
- package/dist/lib/utils/preview-normalizer.d.mts +31 -80
- package/dist/lib/utils/preview-normalizer.d.ts +31 -80
- package/dist/lib/utils/preview-normalizer.js +5 -50
- package/dist/lib/utils/preview-normalizer.mjs +5 -49
- package/dist/lib/utils/pricing-adapter.d.mts +2 -36
- package/dist/lib/utils/pricing-adapter.d.ts +2 -36
- package/dist/lib/utils/pricing-adapter.js +0 -105
- package/dist/lib/utils/pricing-adapter.mjs +0 -100
- package/dist/lib/utils/request-normalizer.d.mts +1 -2
- package/dist/lib/utils/request-normalizer.d.ts +1 -2
- package/dist/lib/v2/projection/catalog.d.mts +4 -0
- package/dist/lib/v2/projection/catalog.d.ts +4 -0
- package/dist/lib/v2/projection/creative-delivery.d.mts +17 -9
- package/dist/lib/v2/projection/creative-delivery.d.ts +17 -9
- package/dist/lib/v2/projection/creative-delivery.js +78 -10
- package/dist/lib/v2/projection/creative-delivery.mjs +77 -10
- package/dist/lib/v2/projection/legacy-metadata.d.mts +12 -0
- package/dist/lib/v2/projection/legacy-metadata.d.ts +12 -0
- package/dist/lib/v2/projection/legacy-metadata.js +41 -1
- package/dist/lib/v2/projection/legacy-metadata.mjs +37 -1
- package/dist/lib/v2/projection/legacy-normalization.d.mts +1 -1
- package/dist/lib/v2/projection/legacy-normalization.d.ts +1 -1
- package/dist/lib/v2/projection/v1-to-v2.js +13 -0
- package/dist/lib/v2/projection/v1-to-v2.mjs +14 -0
- package/dist/lib/validation/client-hooks.d.mts +1 -4
- package/dist/lib/validation/client-hooks.d.ts +1 -4
- package/dist/lib/validation/get-products-request.d.mts +1 -1
- package/dist/lib/validation/get-products-request.d.ts +1 -1
- package/dist/lib/validation/schema-loader.js +6 -0
- package/dist/lib/validation/schema-loader.mjs +6 -0
- package/dist/lib/validation/schema-validator.js +1 -26
- package/dist/lib/validation/schema-validator.mjs +1 -26
- package/dist/lib/version.d.mts +5 -5
- package/dist/lib/version.d.ts +5 -5
- package/dist/lib/version.js +3 -5
- package/dist/lib/version.mjs +3 -5
- package/docs/TYPE-SUMMARY.md +2 -2
- package/docs/development/PROTOCOL_DIFFERENCES.md +1 -1
- package/docs/guides/CONFORMANCE.md +25 -0
- package/docs/guides/CREATIVE-BUILD-PROBE.md +156 -0
- package/docs/guides/CREATIVE-DELIVERY.md +63 -7
- package/docs/guides/MEDIA-BUY-3.2-COMPATIBILITY.md +15 -18
- package/docs/guides/REPORTING-STABILITY.md +7 -7
- package/docs/guides/VALIDATE-YOUR-AGENT.md +5 -0
- package/docs/llms.txt +3 -3
- package/docs/migration-13-to-14.md +20 -16
- package/docs/migration-14.x-rc-worksheet.md +5 -5
- package/docs/migration-4.x-to-5.x.md +12 -7
- package/docs/migration-agent-identity-3.3.md +44 -19
- package/docs/migration-drop-adcp-2.md +25 -0
- package/docs/migration-reporting-storage-package.md +3 -3
- package/docs/releases/16.0.0.md +20 -0
- package/package.json +3 -18
- package/skills/call-adcp-agent/SKILL.md +23 -25
- package/dist/lib/adapters/legacy/v2-5/create_media_buy.d.mts +0 -3
- package/dist/lib/adapters/legacy/v2-5/create_media_buy.d.ts +0 -3
- package/dist/lib/adapters/legacy/v2-5/create_media_buy.js +0 -33
- package/dist/lib/adapters/legacy/v2-5/create_media_buy.mjs +0 -9
- package/dist/lib/adapters/legacy/v2-5/get_products.d.mts +0 -8
- package/dist/lib/adapters/legacy/v2-5/get_products.d.ts +0 -8
- package/dist/lib/adapters/legacy/v2-5/get_products.js +0 -33
- package/dist/lib/adapters/legacy/v2-5/get_products.mjs +0 -9
- package/dist/lib/adapters/legacy/v2-5/index.d.mts +0 -34
- package/dist/lib/adapters/legacy/v2-5/index.d.ts +0 -34
- package/dist/lib/adapters/legacy/v2-5/index.js +0 -50
- package/dist/lib/adapters/legacy/v2-5/index.mjs +0 -25
- package/dist/lib/adapters/legacy/v2-5/list_creative_formats.d.mts +0 -8
- package/dist/lib/adapters/legacy/v2-5/list_creative_formats.d.ts +0 -8
- package/dist/lib/adapters/legacy/v2-5/list_creative_formats.js +0 -33
- package/dist/lib/adapters/legacy/v2-5/list_creative_formats.mjs +0 -9
- package/dist/lib/adapters/legacy/v2-5/preview_creative.d.mts +0 -3
- package/dist/lib/adapters/legacy/v2-5/preview_creative.d.ts +0 -3
- package/dist/lib/adapters/legacy/v2-5/preview_creative.js +0 -33
- package/dist/lib/adapters/legacy/v2-5/preview_creative.mjs +0 -9
- package/dist/lib/adapters/legacy/v2-5/sync_creatives.d.mts +0 -11
- package/dist/lib/adapters/legacy/v2-5/sync_creatives.d.ts +0 -11
- package/dist/lib/adapters/legacy/v2-5/sync_creatives.js +0 -32
- package/dist/lib/adapters/legacy/v2-5/sync_creatives.mjs +0 -8
- package/dist/lib/adapters/legacy/v2-5/types.d.mts +0 -39
- package/dist/lib/adapters/legacy/v2-5/types.d.ts +0 -39
- package/dist/lib/adapters/legacy/v2-5/types.js +0 -16
- package/dist/lib/adapters/legacy/v2-5/types.mjs +0 -0
- package/dist/lib/adapters/legacy/v2-5/update_media_buy.d.mts +0 -3
- package/dist/lib/adapters/legacy/v2-5/update_media_buy.d.ts +0 -3
- package/dist/lib/adapters/legacy/v2-5/update_media_buy.js +0 -35
- package/dist/lib/adapters/legacy/v2-5/update_media_buy.mjs +0 -11
- package/dist/lib/schemas-data/v2.5/_provenance.json +0 -8
- package/dist/lib/schemas-data/v2.5/adagents.json +0 -494
- package/dist/lib/schemas-data/v2.5/core/activation-key.json +0 -50
- package/dist/lib/schemas-data/v2.5/core/assets/audio-asset.json +0 -32
- package/dist/lib/schemas-data/v2.5/core/assets/css-asset.json +0 -21
- package/dist/lib/schemas-data/v2.5/core/assets/daast-asset.json +0 -87
- package/dist/lib/schemas-data/v2.5/core/assets/html-asset.json +0 -21
- package/dist/lib/schemas-data/v2.5/core/assets/image-asset.json +0 -38
- package/dist/lib/schemas-data/v2.5/core/assets/javascript-asset.json +0 -21
- package/dist/lib/schemas-data/v2.5/core/assets/markdown-asset.json +0 -31
- package/dist/lib/schemas-data/v2.5/core/assets/text-asset.json +0 -21
- package/dist/lib/schemas-data/v2.5/core/assets/url-asset.json +0 -26
- package/dist/lib/schemas-data/v2.5/core/assets/vast-asset.json +0 -87
- package/dist/lib/schemas-data/v2.5/core/assets/video-asset.json +0 -44
- package/dist/lib/schemas-data/v2.5/core/assets/webhook-asset.json +0 -71
- package/dist/lib/schemas-data/v2.5/core/async-response-data.json +0 -88
- package/dist/lib/schemas-data/v2.5/core/brand-manifest-ref.json +0 -33
- package/dist/lib/schemas-data/v2.5/core/brand-manifest.json +0 -409
- package/dist/lib/schemas-data/v2.5/core/context.json +0 -8
- package/dist/lib/schemas-data/v2.5/core/creative-asset.json +0 -125
- package/dist/lib/schemas-data/v2.5/core/creative-assignment.json +0 -31
- package/dist/lib/schemas-data/v2.5/core/creative-filters.json +0 -111
- package/dist/lib/schemas-data/v2.5/core/creative-manifest.json +0 -72
- package/dist/lib/schemas-data/v2.5/core/creative-policy.json +0 -27
- package/dist/lib/schemas-data/v2.5/core/delivery-metrics.json +0 -171
- package/dist/lib/schemas-data/v2.5/core/deployment.json +0 -93
- package/dist/lib/schemas-data/v2.5/core/destination.json +0 -53
- package/dist/lib/schemas-data/v2.5/core/error.json +0 -40
- package/dist/lib/schemas-data/v2.5/core/ext.json +0 -8
- package/dist/lib/schemas-data/v2.5/core/format-id.json +0 -47
- package/dist/lib/schemas-data/v2.5/core/format.json +0 -324
- package/dist/lib/schemas-data/v2.5/core/frequency-cap.json +0 -18
- package/dist/lib/schemas-data/v2.5/core/mcp-webhook-payload.json +0 -152
- package/dist/lib/schemas-data/v2.5/core/measurement.json +0 -48
- package/dist/lib/schemas-data/v2.5/core/media-buy.json +0 -62
- package/dist/lib/schemas-data/v2.5/core/package.json +0 -72
- package/dist/lib/schemas-data/v2.5/core/performance-feedback.json +0 -90
- package/dist/lib/schemas-data/v2.5/core/placement.json +0 -34
- package/dist/lib/schemas-data/v2.5/core/pricing-option.json +0 -35
- package/dist/lib/schemas-data/v2.5/core/product-filters.json +0 -102
- package/dist/lib/schemas-data/v2.5/core/product.json +0 -153
- package/dist/lib/schemas-data/v2.5/core/promoted-offerings.json +0 -115
- package/dist/lib/schemas-data/v2.5/core/promoted-products.json +0 -67
- package/dist/lib/schemas-data/v2.5/core/property-id.json +0 -14
- package/dist/lib/schemas-data/v2.5/core/property-tag.json +0 -16
- package/dist/lib/schemas-data/v2.5/core/property.json +0 -62
- package/dist/lib/schemas-data/v2.5/core/protocol-envelope.json +0 -146
- package/dist/lib/schemas-data/v2.5/core/publisher-property-selector.json +0 -92
- package/dist/lib/schemas-data/v2.5/core/push-notification-config.json +0 -48
- package/dist/lib/schemas-data/v2.5/core/reporting-capabilities.json +0 -71
- package/dist/lib/schemas-data/v2.5/core/response.json +0 -24
- package/dist/lib/schemas-data/v2.5/core/signal-filters.json +0 -35
- package/dist/lib/schemas-data/v2.5/core/start-timing.json +0 -18
- package/dist/lib/schemas-data/v2.5/core/sub-asset.json +0 -79
- package/dist/lib/schemas-data/v2.5/core/targeting.json +0 -50
- package/dist/lib/schemas-data/v2.5/core/tasks-get-request.json +0 -43
- package/dist/lib/schemas-data/v2.5/core/tasks-get-response.json +0 -166
- package/dist/lib/schemas-data/v2.5/core/tasks-list-request.json +0 -192
- package/dist/lib/schemas-data/v2.5/core/tasks-list-response.json +0 -183
- package/dist/lib/schemas-data/v2.5/creative/asset-types/index.json +0 -101
- package/dist/lib/schemas-data/v2.5/creative/list-creative-formats-request.json +0 -73
- package/dist/lib/schemas-data/v2.5/creative/list-creative-formats-response.json +0 -61
- package/dist/lib/schemas-data/v2.5/creative/preview-creative-request.json +0 -164
- package/dist/lib/schemas-data/v2.5/creative/preview-creative-response.json +0 -245
- package/dist/lib/schemas-data/v2.5/creative/preview-render.json +0 -225
- package/dist/lib/schemas-data/v2.5/enums/adcp-domain.json +0 -11
- package/dist/lib/schemas-data/v2.5/enums/asset-content-type.json +0 -22
- package/dist/lib/schemas-data/v2.5/enums/auth-scheme.json +0 -11
- package/dist/lib/schemas-data/v2.5/enums/available-metric.json +0 -18
- package/dist/lib/schemas-data/v2.5/enums/channels.json +0 -18
- package/dist/lib/schemas-data/v2.5/enums/co-branding-requirement.json +0 -12
- package/dist/lib/schemas-data/v2.5/enums/creative-action.json +0 -14
- package/dist/lib/schemas-data/v2.5/enums/creative-agent-capability.json +0 -13
- package/dist/lib/schemas-data/v2.5/enums/creative-sort-field.json +0 -15
- package/dist/lib/schemas-data/v2.5/enums/creative-status.json +0 -19
- package/dist/lib/schemas-data/v2.5/enums/daast-tracking-event.json +0 -20
- package/dist/lib/schemas-data/v2.5/enums/daast-version.json +0 -11
- package/dist/lib/schemas-data/v2.5/enums/delivery-type.json +0 -15
- package/dist/lib/schemas-data/v2.5/enums/dimension-unit.json +0 -13
- package/dist/lib/schemas-data/v2.5/enums/feed-format.json +0 -12
- package/dist/lib/schemas-data/v2.5/enums/feedback-source.json +0 -13
- package/dist/lib/schemas-data/v2.5/enums/format-category.json +0 -16
- package/dist/lib/schemas-data/v2.5/enums/format-id-parameter.json +0 -11
- package/dist/lib/schemas-data/v2.5/enums/frequency-cap-scope.json +0 -13
- package/dist/lib/schemas-data/v2.5/enums/history-entry-type.json +0 -11
- package/dist/lib/schemas-data/v2.5/enums/http-method.json +0 -11
- package/dist/lib/schemas-data/v2.5/enums/identifier-types.json +0 -34
- package/dist/lib/schemas-data/v2.5/enums/javascript-module-type.json +0 -12
- package/dist/lib/schemas-data/v2.5/enums/landing-page-requirement.json +0 -12
- package/dist/lib/schemas-data/v2.5/enums/markdown-flavor.json +0 -11
- package/dist/lib/schemas-data/v2.5/enums/media-buy-status.json +0 -19
- package/dist/lib/schemas-data/v2.5/enums/metric-type.json +0 -17
- package/dist/lib/schemas-data/v2.5/enums/notification-type.json +0 -13
- package/dist/lib/schemas-data/v2.5/enums/pacing.json +0 -17
- package/dist/lib/schemas-data/v2.5/enums/preview-output-format.json +0 -11
- package/dist/lib/schemas-data/v2.5/enums/pricing-model.json +0 -25
- package/dist/lib/schemas-data/v2.5/enums/property-type.json +0 -16
- package/dist/lib/schemas-data/v2.5/enums/publisher-identifier-types.json +0 -19
- package/dist/lib/schemas-data/v2.5/enums/reporting-frequency.json +0 -12
- package/dist/lib/schemas-data/v2.5/enums/signal-catalog-type.json +0 -12
- package/dist/lib/schemas-data/v2.5/enums/sort-direction.json +0 -11
- package/dist/lib/schemas-data/v2.5/enums/standard-format-ids.json +0 -103
- package/dist/lib/schemas-data/v2.5/enums/task-status.json +0 -29
- package/dist/lib/schemas-data/v2.5/enums/task-type.json +0 -27
- package/dist/lib/schemas-data/v2.5/enums/update-frequency.json +0 -13
- package/dist/lib/schemas-data/v2.5/enums/url-asset-type.json +0 -12
- package/dist/lib/schemas-data/v2.5/enums/validation-mode.json +0 -11
- package/dist/lib/schemas-data/v2.5/enums/vast-tracking-event.json +0 -25
- package/dist/lib/schemas-data/v2.5/enums/vast-version.json +0 -14
- package/dist/lib/schemas-data/v2.5/enums/webhook-response-type.json +0 -13
- package/dist/lib/schemas-data/v2.5/enums/webhook-security-method.json +0 -12
- package/dist/lib/schemas-data/v2.5/index.json +0 -604
- package/dist/lib/schemas-data/v2.5/media-buy/build-creative-request.json +0 -31
- package/dist/lib/schemas-data/v2.5/media-buy/build-creative-response.json +0 -65
- package/dist/lib/schemas-data/v2.5/media-buy/create-media-buy-async-response-input-required.json +0 -31
- package/dist/lib/schemas-data/v2.5/media-buy/create-media-buy-async-response-submitted.json +0 -16
- package/dist/lib/schemas-data/v2.5/media-buy/create-media-buy-async-response-working.json +0 -36
- package/dist/lib/schemas-data/v2.5/media-buy/create-media-buy-request.json +0 -126
- package/dist/lib/schemas-data/v2.5/media-buy/create-media-buy-response.json +0 -97
- package/dist/lib/schemas-data/v2.5/media-buy/get-media-buy-delivery-request.json +0 -54
- package/dist/lib/schemas-data/v2.5/media-buy/get-media-buy-delivery-response.json +0 -285
- package/dist/lib/schemas-data/v2.5/media-buy/get-products-async-response-input-required.json +0 -38
- package/dist/lib/schemas-data/v2.5/media-buy/get-products-async-response-submitted.json +0 -21
- package/dist/lib/schemas-data/v2.5/media-buy/get-products-async-response-working.json +0 -34
- package/dist/lib/schemas-data/v2.5/media-buy/get-products-request.json +0 -28
- package/dist/lib/schemas-data/v2.5/media-buy/get-products-response.json +0 -33
- package/dist/lib/schemas-data/v2.5/media-buy/list-authorized-properties-request.json +0 -26
- package/dist/lib/schemas-data/v2.5/media-buy/list-authorized-properties-response.json +0 -70
- package/dist/lib/schemas-data/v2.5/media-buy/list-creative-formats-request.json +0 -58
- package/dist/lib/schemas-data/v2.5/media-buy/list-creative-formats-response.json +0 -61
- package/dist/lib/schemas-data/v2.5/media-buy/list-creatives-request.json +0 -137
- package/dist/lib/schemas-data/v2.5/media-buy/list-creatives-response.json +0 -437
- package/dist/lib/schemas-data/v2.5/media-buy/package-request.json +0 -80
- package/dist/lib/schemas-data/v2.5/media-buy/provide-performance-feedback-request.json +0 -88
- package/dist/lib/schemas-data/v2.5/media-buy/provide-performance-feedback-response.json +0 -66
- package/dist/lib/schemas-data/v2.5/media-buy/sync-creatives-async-response-input-required.json +0 -25
- package/dist/lib/schemas-data/v2.5/media-buy/sync-creatives-async-response-submitted.json +0 -16
- package/dist/lib/schemas-data/v2.5/media-buy/sync-creatives-async-response-working.json +0 -46
- package/dist/lib/schemas-data/v2.5/media-buy/sync-creatives-request.json +0 -178
- package/dist/lib/schemas-data/v2.5/media-buy/sync-creatives-response.json +0 -149
- package/dist/lib/schemas-data/v2.5/media-buy/update-media-buy-async-response-input-required.json +0 -24
- package/dist/lib/schemas-data/v2.5/media-buy/update-media-buy-async-response-submitted.json +0 -16
- package/dist/lib/schemas-data/v2.5/media-buy/update-media-buy-async-response-working.json +0 -36
- package/dist/lib/schemas-data/v2.5/media-buy/update-media-buy-request.json +0 -129
- package/dist/lib/schemas-data/v2.5/media-buy/update-media-buy-response.json +0 -99
- package/dist/lib/schemas-data/v2.5/pricing-options/cpc-option.json +0 -52
- package/dist/lib/schemas-data/v2.5/pricing-options/cpcv-option.json +0 -52
- package/dist/lib/schemas-data/v2.5/pricing-options/cpm-auction-option.json +0 -81
- package/dist/lib/schemas-data/v2.5/pricing-options/cpm-fixed-option.json +0 -52
- package/dist/lib/schemas-data/v2.5/pricing-options/cpp-option.json +0 -73
- package/dist/lib/schemas-data/v2.5/pricing-options/cpv-option.json +0 -88
- package/dist/lib/schemas-data/v2.5/pricing-options/flat-rate-option.json +0 -93
- package/dist/lib/schemas-data/v2.5/pricing-options/vcpm-auction-option.json +0 -81
- package/dist/lib/schemas-data/v2.5/pricing-options/vcpm-fixed-option.json +0 -52
- package/dist/lib/schemas-data/v2.5/protocols/adcp-extension.json +0 -33
- package/dist/lib/schemas-data/v2.5/signals/activate-signal-request.json +0 -32
- package/dist/lib/schemas-data/v2.5/signals/activate-signal-response.json +0 -68
- package/dist/lib/schemas-data/v2.5/signals/get-signals-request.json +0 -59
- package/dist/lib/schemas-data/v2.5/signals/get-signals-response.json +0 -100
- package/dist/lib/types/v2-5/index.d.mts +0 -1
- package/dist/lib/types/v2-5/index.d.ts +0 -1
- package/dist/lib/types/v2-5/index.js +0 -22
- package/dist/lib/types/v2-5/index.mjs +0 -1
- package/dist/lib/types/v2-5/tools.generated.d.mts +0 -3568
- package/dist/lib/types/v2-5/tools.generated.d.ts +0 -3568
- package/dist/lib/types/v2-5/tools.generated.js +0 -16
- package/dist/lib/types/v2-5/tools.generated.mjs +0 -0
- package/dist/lib/utils/sync-creatives-adapter.d.mts +0 -33
- package/dist/lib/utils/sync-creatives-adapter.d.ts +0 -33
- package/dist/lib/utils/sync-creatives-adapter.js +0 -83
- package/dist/lib/utils/sync-creatives-adapter.mjs +0 -59
|
@@ -2,6 +2,7 @@ import { createHash, createHmac } from "node:crypto";
|
|
|
2
2
|
import { existsSync, readFileSync } from "node:fs";
|
|
3
3
|
import { basename, join } from "node:path";
|
|
4
4
|
import { ACCOUNT_FREE_DISCOVERY_TASKS } from "./account-policy.mjs";
|
|
5
|
+
import { prepareCreativeBuildProbe } from "./creative-build-probe.mjs";
|
|
5
6
|
import {
|
|
6
7
|
createTestClient,
|
|
7
8
|
getOrCreateClientResolution,
|
|
@@ -43,6 +44,11 @@ import {
|
|
|
43
44
|
validateRateLimitTripSpec
|
|
44
45
|
} from "./rate-limit-trip.mjs";
|
|
45
46
|
import { redactSecrets } from "../../utils/redact-secrets.mjs";
|
|
47
|
+
import {
|
|
48
|
+
rememberPropertyListCredentials,
|
|
49
|
+
verifyPropertyListReference,
|
|
50
|
+
withPropertyListCredentialRedaction
|
|
51
|
+
} from "./property-list-reference.mjs";
|
|
46
52
|
import { ResponseSchemaValidationError } from "../../utils/response-unwrapper.mjs";
|
|
47
53
|
import { injectLegacyEnvelopeStatus, normalizeLegacyMediaBuyStatusForReturn } from "../../utils/envelope-status-compat.mjs";
|
|
48
54
|
import { queryUpstreamTraffic } from "../test-controller.mjs";
|
|
@@ -785,38 +791,48 @@ function filterResponseHeaders(headers) {
|
|
|
785
791
|
async function runStoryboard(agentUrlOrUrls, storyboard, options = {}) {
|
|
786
792
|
options = applyReusableProfileOptions(options);
|
|
787
793
|
if (hasTestClientScope() && !options._discoveryPass) options = { ...options, _discoveryPass: {} };
|
|
788
|
-
return
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
794
|
+
return withPropertyListCredentialRedaction(
|
|
795
|
+
() => withMCPConnectionScope(
|
|
796
|
+
async () => {
|
|
797
|
+
options = applyStoryboardVersionOptions(storyboard, options);
|
|
798
|
+
options = applyFunctionalRequestSigning(options, {
|
|
799
|
+
...options.complianceDir && { complianceDir: options.complianceDir },
|
|
800
|
+
...options.adcpVersion && { version: options.adcpVersion }
|
|
801
|
+
});
|
|
802
|
+
options = resolveDeclaredTestKit(storyboard, options);
|
|
803
|
+
options = applyNativeA2AComplianceTransportOptions(options);
|
|
804
|
+
if (storyboard.requires?.[0] === "property_list_reference_runner" && storyboardCapabilityPredicates(storyboard).length === 0 && propertyListReferenceNeedsMcp(options)) {
|
|
805
|
+
return buildRequirementUnmetResult(
|
|
806
|
+
Array.isArray(agentUrlOrUrls) ? agentUrlOrUrls : [agentUrlOrUrls],
|
|
807
|
+
storyboard,
|
|
808
|
+
"property_list_reference_runner",
|
|
809
|
+
"Credential-isolated property-list references currently require MCP; A2A probe coverage is unavailable."
|
|
810
|
+
);
|
|
811
|
+
}
|
|
812
|
+
if (hasTestClientScope() && options._client && !options.agents) {
|
|
813
|
+
const resolution = getOrCreateClientResolution(
|
|
814
|
+
typeof agentUrlOrUrls === "string" ? agentUrlOrUrls : agentUrlOrUrls[0],
|
|
815
|
+
options
|
|
816
|
+
);
|
|
817
|
+
const discovered = await getOrDiscoverProfile(resolution.client, options);
|
|
818
|
+
options = {
|
|
819
|
+
...options,
|
|
820
|
+
_profile: discovered.step.passed ? discovered.profile : void 0,
|
|
821
|
+
agentTools: discovered.step.passed ? discovered.profile.tools : void 0
|
|
822
|
+
};
|
|
823
|
+
}
|
|
824
|
+
const schemaRoot = getRunSchemaRoot(options);
|
|
825
|
+
const runBody = () => withServedReleaseSchemaRoots(
|
|
826
|
+
options.servedReleaseSchemaRoots,
|
|
827
|
+
() => runStoryboardBody(agentUrlOrUrls, storyboard, options)
|
|
801
828
|
);
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
const schemaRoot = getRunSchemaRoot(options);
|
|
810
|
-
const runBody = () => withServedReleaseSchemaRoots(
|
|
811
|
-
options.servedReleaseSchemaRoots,
|
|
812
|
-
() => runStoryboardBody(agentUrlOrUrls, storyboard, options)
|
|
813
|
-
);
|
|
814
|
-
if (schemaRoot) {
|
|
815
|
-
return await withExternalSchemaRoot(schemaRoot.adcpVersion, schemaRoot.schemaRoot, runBody);
|
|
816
|
-
}
|
|
817
|
-
return await runBody();
|
|
818
|
-
},
|
|
819
|
-
{ isolate: !hasTestClientScope() }
|
|
829
|
+
if (schemaRoot) {
|
|
830
|
+
return await withExternalSchemaRoot(schemaRoot.adcpVersion, schemaRoot.schemaRoot, runBody);
|
|
831
|
+
}
|
|
832
|
+
return await runBody();
|
|
833
|
+
},
|
|
834
|
+
{ isolate: !hasTestClientScope() }
|
|
835
|
+
)
|
|
820
836
|
);
|
|
821
837
|
}
|
|
822
838
|
async function runStoryboardBody(agentUrlOrUrls, storyboard, options) {
|
|
@@ -896,6 +912,7 @@ async function runStoryboardBody(agentUrlOrUrls, storyboard, options) {
|
|
|
896
912
|
'runStoryboard: webhook_receiver is incompatible with multi_instance_strategy: "multi-pass". Each pass would bind a fresh receiver URL, so agents caching the pass-1 URL would deliver to a dead port in pass 2. Use round-robin when the storyboard needs a webhook receiver, or run multi-pass on a storyboard without webhook observation.'
|
|
897
913
|
);
|
|
898
914
|
}
|
|
915
|
+
if (storyboard.creative_build_probe) return executeStoryboardPass(agentUrls, storyboard, options, 0);
|
|
899
916
|
return runMultiPass(agentUrls, storyboard, options);
|
|
900
917
|
}
|
|
901
918
|
if (options.agents) {
|
|
@@ -1048,6 +1065,7 @@ const REQUIREMENT_TO_SKIP_REASON = {
|
|
|
1048
1065
|
webhook_replay_receiver: "not_applicable",
|
|
1049
1066
|
trusted_match_context_router_runner: "not_applicable",
|
|
1050
1067
|
trusted_match_publisher_auth_runner: "requirement_unmet",
|
|
1068
|
+
property_list_reference_runner: "requirement_unmet",
|
|
1051
1069
|
request_signer: "not_applicable",
|
|
1052
1070
|
multi_agent: "requirement_unmet"
|
|
1053
1071
|
};
|
|
@@ -1154,6 +1172,9 @@ function buildRequiredAnyOfToolsMissingResult(agentUrls, storyboard, detail) {
|
|
|
1154
1172
|
notices: []
|
|
1155
1173
|
};
|
|
1156
1174
|
}
|
|
1175
|
+
function propertyListReferenceNeedsMcp(options) {
|
|
1176
|
+
return options.agents ? Object.values(options.agents).some((agent) => (agent.transport ?? options.protocol) === "a2a") : options.protocol === "a2a";
|
|
1177
|
+
}
|
|
1157
1178
|
async function checkRequires(requires, storyboard, options, profile, precomputed) {
|
|
1158
1179
|
let preparedPublisherAuthProbes = getPreparedTrustedMatchPublisherAuth(options);
|
|
1159
1180
|
for (const requirement of requires) {
|
|
@@ -1192,6 +1213,15 @@ async function checkRequires(requires, storyboard, options, profile, precomputed
|
|
|
1192
1213
|
}
|
|
1193
1214
|
case "real_wire":
|
|
1194
1215
|
break;
|
|
1216
|
+
case "property_list_reference_runner": {
|
|
1217
|
+
if (propertyListReferenceNeedsMcp(options)) {
|
|
1218
|
+
return {
|
|
1219
|
+
requirement,
|
|
1220
|
+
detail: "Credential-isolated property-list references currently require MCP; A2A probe coverage is unavailable."
|
|
1221
|
+
};
|
|
1222
|
+
}
|
|
1223
|
+
break;
|
|
1224
|
+
}
|
|
1195
1225
|
case "webhook_receiver": {
|
|
1196
1226
|
if (options.webhook_receiver === void 0) {
|
|
1197
1227
|
return {
|
|
@@ -1481,7 +1511,7 @@ function collectCapabilityNotices(storyboard, profile) {
|
|
|
1481
1511
|
if (requestSigning?.["supported"] !== true) {
|
|
1482
1512
|
notices.push({
|
|
1483
1513
|
severity: "future_required",
|
|
1484
|
-
code: "
|
|
1514
|
+
code: "request_signing_required_in_4_0",
|
|
1485
1515
|
message: "RFC 9421 request signing (`request_signing.supported: true`) is not advertised. Required for spend-committing operations in AdCP 4.0 \u2014 declare the capability and pre-register the runner compliance test keypair before the 4.0 cut.",
|
|
1486
1516
|
effective_version: "4.0",
|
|
1487
1517
|
capability_path: "request_signing.supported",
|
|
@@ -1502,7 +1532,7 @@ function collectCapabilityNotices(storyboard, profile) {
|
|
|
1502
1532
|
if (webhookSigning?.["legacy_hmac_fallback"] === true) {
|
|
1503
1533
|
notices.push({
|
|
1504
1534
|
severity: "deprecation",
|
|
1505
|
-
code: "
|
|
1535
|
+
code: "legacy_hmac_fallback_removed_in_4_0",
|
|
1506
1536
|
message: "`webhook_signing.legacy_hmac_fallback: true` is deprecated and removed in AdCP 4.0. Migrate webhook signature verification to RFC 9421 before the 4.0 cut.",
|
|
1507
1537
|
effective_version: "4.0",
|
|
1508
1538
|
capability_path: "webhook_signing.legacy_hmac_fallback",
|
|
@@ -2022,16 +2052,118 @@ async function executeStoryboardPass(agentUrls, storyboard, options, dispatchOff
|
|
|
2022
2052
|
}
|
|
2023
2053
|
let seedingPhaseResult = null;
|
|
2024
2054
|
let seedingFailed = false;
|
|
2055
|
+
let creativeBuildCatalogFailed = false;
|
|
2025
2056
|
let seedingMissingController = false;
|
|
2026
2057
|
let seedingUnsupported = false;
|
|
2027
2058
|
let fixtureUnsatisfied = false;
|
|
2028
2059
|
let fixtureBindings;
|
|
2029
2060
|
let fixtureResolutionRecords;
|
|
2030
2061
|
let fixtureCoverageGap;
|
|
2062
|
+
if (storyboard.creative_build_probe && !skipControllerSeedingForPhaseGates) {
|
|
2063
|
+
let resolution;
|
|
2064
|
+
try {
|
|
2065
|
+
resolution = routingContext || isMultiInstance ? {
|
|
2066
|
+
status: "unsatisfied",
|
|
2067
|
+
detail: `fixture_unsatisfied: creative_format:${storyboard.creative_build_probe.context_prefix}: resolve an independent fixture for each routed or replicated agent in a single-agent run`
|
|
2068
|
+
} : prepareCreativeBuildProbe(
|
|
2069
|
+
profile?.raw_capabilities,
|
|
2070
|
+
storyboard.creative_build_probe,
|
|
2071
|
+
options.test_kit,
|
|
2072
|
+
options.adcpVersion
|
|
2073
|
+
);
|
|
2074
|
+
} catch (error) {
|
|
2075
|
+
await Promise.allSettled([
|
|
2076
|
+
...webhookReceiver ? [webhookReceiver.close()] : [],
|
|
2077
|
+
...!callerOwnsClients ? [closeScopedConnections(options.protocol)] : []
|
|
2078
|
+
]);
|
|
2079
|
+
throw error;
|
|
2080
|
+
}
|
|
2081
|
+
const handle = storyboard.creative_build_probe.context_prefix;
|
|
2082
|
+
fixtureResolutionRecords = [
|
|
2083
|
+
{
|
|
2084
|
+
fixture_type: "creative_format",
|
|
2085
|
+
handle,
|
|
2086
|
+
requirements: resolution.status === "resolved" ? resolution.requirements : [],
|
|
2087
|
+
status: resolution.status,
|
|
2088
|
+
...resolution.status === "resolved" ? {
|
|
2089
|
+
seller_ids: resolution.capabilityId !== void 0 ? { capability_id: resolution.capabilityId } : { format_id: resolution.formatId }
|
|
2090
|
+
} : {},
|
|
2091
|
+
strategy: "discover",
|
|
2092
|
+
strategies_attempted: [
|
|
2093
|
+
{
|
|
2094
|
+
strategy: "discover",
|
|
2095
|
+
disposition: resolution.status === "unsatisfied" ? "unavailable" : resolution.status,
|
|
2096
|
+
detail: resolution.status === "resolved" ? `Bound build route using ${resolution.source} input` : resolution.detail
|
|
2097
|
+
}
|
|
2098
|
+
]
|
|
2099
|
+
}
|
|
2100
|
+
];
|
|
2101
|
+
if (resolution.status !== "resolved") {
|
|
2102
|
+
const noPhasesIndex = phaseResults.findIndex((phase) => phase.phase_id === "no_phases");
|
|
2103
|
+
if (noPhasesIndex >= 0) {
|
|
2104
|
+
skippedCount -= phaseResults[noPhasesIndex].steps.filter((step) => step.skipped).length;
|
|
2105
|
+
phaseResults.splice(noPhasesIndex, 1);
|
|
2106
|
+
}
|
|
2107
|
+
}
|
|
2108
|
+
if (resolution.status === "failed") {
|
|
2109
|
+
seedingFailed = true;
|
|
2110
|
+
creativeBuildCatalogFailed = true;
|
|
2111
|
+
failedCount += 1;
|
|
2112
|
+
seedingPhaseResult = {
|
|
2113
|
+
phase_id: "fixture_resolution",
|
|
2114
|
+
phase_title: "Creative build fixture resolution",
|
|
2115
|
+
passed: false,
|
|
2116
|
+
duration_ms: 0,
|
|
2117
|
+
steps: [
|
|
2118
|
+
{
|
|
2119
|
+
storyboard_id: storyboard.id,
|
|
2120
|
+
phase_id: "fixture_resolution",
|
|
2121
|
+
step_id: "creative_build_catalog",
|
|
2122
|
+
title: "Validate advertised creative build catalog",
|
|
2123
|
+
task: "get_adcp_capabilities",
|
|
2124
|
+
passed: false,
|
|
2125
|
+
duration_ms: 0,
|
|
2126
|
+
context: {},
|
|
2127
|
+
extraction: { path: "none" },
|
|
2128
|
+
validations: [
|
|
2129
|
+
{
|
|
2130
|
+
check: "creative_build_probe_catalog",
|
|
2131
|
+
passed: false,
|
|
2132
|
+
description: "Advertised creative catalog satisfies its format and routing contract",
|
|
2133
|
+
error: resolution.detail
|
|
2134
|
+
}
|
|
2135
|
+
]
|
|
2136
|
+
}
|
|
2137
|
+
]
|
|
2138
|
+
};
|
|
2139
|
+
} else if (resolution.status === "resolved") {
|
|
2140
|
+
for (const key of [
|
|
2141
|
+
"capability_id",
|
|
2142
|
+
"target_format_id",
|
|
2143
|
+
"message",
|
|
2144
|
+
"creative_manifest",
|
|
2145
|
+
"creative_id",
|
|
2146
|
+
"transformer_id",
|
|
2147
|
+
"config"
|
|
2148
|
+
]) {
|
|
2149
|
+
delete context[`${handle}_${key}`];
|
|
2150
|
+
}
|
|
2151
|
+
Object.assign(context, resolution.context);
|
|
2152
|
+
options = { ...options, contracts: [.../* @__PURE__ */ new Set([...options.contracts ?? [], "creative_build_probe_runner"])] };
|
|
2153
|
+
} else {
|
|
2154
|
+
fixtureUnsatisfied = true;
|
|
2155
|
+
if (preSeeded === void 0 || preSeeded.attach) skippedCount += 1;
|
|
2156
|
+
fixtureCoverageGap = {
|
|
2157
|
+
reason: "fixture_unsatisfied",
|
|
2158
|
+
detail: resolution.detail,
|
|
2159
|
+
fixtures: [{ fixture_type: "creative_format", handle, requirements: [] }]
|
|
2160
|
+
};
|
|
2161
|
+
}
|
|
2162
|
+
}
|
|
2031
2163
|
{
|
|
2032
2164
|
let seeding;
|
|
2033
2165
|
try {
|
|
2034
|
-
seeding = creativeAssetFixtureGap || skipControllerSeedingForPhaseGates ? null : preSeeded !== void 0 ? preSeeded.result : await runControllerSeeding(
|
|
2166
|
+
seeding = creativeAssetFixtureGap || fixtureUnsatisfied || seedingFailed || skipControllerSeedingForPhaseGates ? null : preSeeded !== void 0 ? preSeeded.result : await runControllerSeeding(
|
|
2035
2167
|
clients[0],
|
|
2036
2168
|
storyboard,
|
|
2037
2169
|
options,
|
|
@@ -2092,7 +2224,7 @@ async function executeStoryboardPass(agentUrls, storyboard, options, dispatchOff
|
|
|
2092
2224
|
}
|
|
2093
2225
|
}
|
|
2094
2226
|
fixtureBindings = seeding.bindings;
|
|
2095
|
-
fixtureResolutionRecords = seeding.resolutionRecords;
|
|
2227
|
+
fixtureResolutionRecords = fixtureResolutionRecords ? [...fixtureResolutionRecords, ...seeding.resolutionRecords ?? []] : seeding.resolutionRecords;
|
|
2096
2228
|
fixtureUnsatisfied = seeding.fixtureUnsatisfied === true && seeding.failedCount === 0;
|
|
2097
2229
|
if (fixtureUnsatisfied) {
|
|
2098
2230
|
const noPhasesIndex = phaseResults.findIndex((phase) => phase.phase_id === "no_phases");
|
|
@@ -2334,6 +2466,12 @@ async function executeStoryboardPass(agentUrls, storyboard, options, dispatchOff
|
|
|
2334
2466
|
} : seedingUnsupported ? {
|
|
2335
2467
|
skip_reason: "fixture_seed_unsupported",
|
|
2336
2468
|
skip: { reason: "not_applicable", detail: FIXTURE_SEED_UNSUPPORTED_DETAIL }
|
|
2469
|
+
} : creativeBuildCatalogFailed ? {
|
|
2470
|
+
skip_reason: "prerequisite_failed",
|
|
2471
|
+
skip: {
|
|
2472
|
+
reason: "prerequisite_failed",
|
|
2473
|
+
detail: "Creative build catalog validation failed in fixture_resolution.creative_build_catalog."
|
|
2474
|
+
}
|
|
2337
2475
|
} : seedingFailed ? {
|
|
2338
2476
|
skip_reason: "controller_seeding_failed",
|
|
2339
2477
|
skip: { reason: "prerequisite_failed", detail: CONTROLLER_SEEDING_FAILED_DETAIL }
|
|
@@ -3129,32 +3267,57 @@ function summarizeStrictValidation(phases) {
|
|
|
3129
3267
|
}
|
|
3130
3268
|
async function runStoryboardStep(agentUrl, storyboard, stepId, options = {}) {
|
|
3131
3269
|
options = applyReusableProfileOptions(options);
|
|
3132
|
-
return
|
|
3133
|
-
|
|
3134
|
-
|
|
3135
|
-
|
|
3136
|
-
|
|
3137
|
-
|
|
3138
|
-
|
|
3139
|
-
|
|
3140
|
-
|
|
3141
|
-
|
|
3142
|
-
|
|
3143
|
-
|
|
3144
|
-
|
|
3145
|
-
|
|
3146
|
-
|
|
3147
|
-
|
|
3148
|
-
|
|
3149
|
-
|
|
3150
|
-
|
|
3151
|
-
|
|
3152
|
-
|
|
3153
|
-
|
|
3270
|
+
return withPropertyListCredentialRedaction(
|
|
3271
|
+
() => withMCPConnectionScope(
|
|
3272
|
+
async () => {
|
|
3273
|
+
storyboard = normalizeValidationOnlyTasks(storyboard);
|
|
3274
|
+
validateStoryboardShape(storyboard);
|
|
3275
|
+
options = applyStoryboardVersionOptions(storyboard, options);
|
|
3276
|
+
options = applyFunctionalRequestSigning(options, {
|
|
3277
|
+
...options.complianceDir && { complianceDir: options.complianceDir },
|
|
3278
|
+
...options.adcpVersion && { version: options.adcpVersion }
|
|
3279
|
+
});
|
|
3280
|
+
options = resolveDeclaredTestKit(storyboard, options);
|
|
3281
|
+
options = applyNativeA2AComplianceTransportOptions(options);
|
|
3282
|
+
const schemaRoot = getRunSchemaRoot(options);
|
|
3283
|
+
const runBody = () => withServedReleaseSchemaRoots(
|
|
3284
|
+
options.servedReleaseSchemaRoots,
|
|
3285
|
+
() => runStoryboardStepBody(agentUrl, storyboard, stepId, options)
|
|
3286
|
+
);
|
|
3287
|
+
if (schemaRoot) {
|
|
3288
|
+
return await withExternalSchemaRoot(schemaRoot.adcpVersion, schemaRoot.schemaRoot, runBody);
|
|
3289
|
+
}
|
|
3290
|
+
return await runBody();
|
|
3291
|
+
},
|
|
3292
|
+
{ isolate: !hasTestClientScope() }
|
|
3293
|
+
)
|
|
3154
3294
|
);
|
|
3155
3295
|
}
|
|
3156
3296
|
async function runStoryboardStepBody(agentUrl, storyboard, stepId, options) {
|
|
3157
3297
|
validateTestKit(options.test_kit);
|
|
3298
|
+
if (storyboard.requires?.[0] === "property_list_reference_runner" && storyboardCapabilityPredicates(storyboard).length === 0 && propertyListReferenceNeedsMcp(options)) {
|
|
3299
|
+
const found2 = flattenSteps(storyboard).find((entry) => entry.step.id === stepId);
|
|
3300
|
+
if (!found2) throw new Error(`Step "${stepId}" not found in storyboard "${storyboard.id}".`);
|
|
3301
|
+
return {
|
|
3302
|
+
storyboard_id: storyboard.id,
|
|
3303
|
+
step_id: stepId,
|
|
3304
|
+
phase_id: found2.phaseId,
|
|
3305
|
+
title: found2.step.title,
|
|
3306
|
+
task: found2.step.task,
|
|
3307
|
+
passed: true,
|
|
3308
|
+
skipped: true,
|
|
3309
|
+
skip_reason: "requirement_unmet",
|
|
3310
|
+
skip: {
|
|
3311
|
+
reason: "requirement_unmet",
|
|
3312
|
+
requirement: "property_list_reference_runner",
|
|
3313
|
+
detail: "Credential-isolated property-list references currently require MCP; A2A probe coverage is unavailable."
|
|
3314
|
+
},
|
|
3315
|
+
duration_ms: 0,
|
|
3316
|
+
validations: [],
|
|
3317
|
+
context: { ...storyboard.context, ...options.context },
|
|
3318
|
+
extraction: { path: "none" }
|
|
3319
|
+
};
|
|
3320
|
+
}
|
|
3158
3321
|
const clientResolution = getOrCreateClientResolution(agentUrl, options);
|
|
3159
3322
|
const client = clientResolution.client;
|
|
3160
3323
|
let profile;
|
|
@@ -3205,6 +3368,77 @@ async function runStoryboardStepBody(agentUrl, storyboard, stepId, options) {
|
|
|
3205
3368
|
return result;
|
|
3206
3369
|
}
|
|
3207
3370
|
}
|
|
3371
|
+
if (storyboard.creative_build_probe) {
|
|
3372
|
+
let resolution;
|
|
3373
|
+
try {
|
|
3374
|
+
resolution = prepareCreativeBuildProbe(
|
|
3375
|
+
profile?.raw_capabilities,
|
|
3376
|
+
storyboard.creative_build_probe,
|
|
3377
|
+
options.test_kit,
|
|
3378
|
+
options.adcpVersion
|
|
3379
|
+
);
|
|
3380
|
+
} catch (error) {
|
|
3381
|
+
if (!clientResolution.reusedShared) {
|
|
3382
|
+
await Promise.allSettled([closeScopedConnections(options.protocol)]);
|
|
3383
|
+
}
|
|
3384
|
+
throw error;
|
|
3385
|
+
}
|
|
3386
|
+
if (resolution.status === "failed") {
|
|
3387
|
+
if (!clientResolution.reusedShared) await closeScopedConnections(options.protocol);
|
|
3388
|
+
return {
|
|
3389
|
+
storyboard_id: storyboard.id,
|
|
3390
|
+
step_id: found.step.id,
|
|
3391
|
+
phase_id: found.phaseId,
|
|
3392
|
+
title: found.step.title,
|
|
3393
|
+
task: found.step.task,
|
|
3394
|
+
passed: false,
|
|
3395
|
+
duration_ms: 0,
|
|
3396
|
+
validations: [
|
|
3397
|
+
{
|
|
3398
|
+
check: "creative_build_probe_catalog",
|
|
3399
|
+
passed: false,
|
|
3400
|
+
description: "Advertised creative catalog satisfies its format and routing contract",
|
|
3401
|
+
error: resolution.detail
|
|
3402
|
+
}
|
|
3403
|
+
],
|
|
3404
|
+
context,
|
|
3405
|
+
extraction: { path: "none" },
|
|
3406
|
+
contributions: Array.from(options.contributions ?? [])
|
|
3407
|
+
};
|
|
3408
|
+
}
|
|
3409
|
+
if (resolution.status === "unsatisfied") {
|
|
3410
|
+
if (!clientResolution.reusedShared) await closeScopedConnections(options.protocol);
|
|
3411
|
+
return {
|
|
3412
|
+
storyboard_id: storyboard.id,
|
|
3413
|
+
step_id: found.step.id,
|
|
3414
|
+
phase_id: found.phaseId,
|
|
3415
|
+
title: found.step.title,
|
|
3416
|
+
task: found.step.task,
|
|
3417
|
+
passed: true,
|
|
3418
|
+
skipped: true,
|
|
3419
|
+
skip_reason: "fixture_unsatisfied",
|
|
3420
|
+
skip: { reason: "not_applicable", detail: resolution.detail },
|
|
3421
|
+
duration_ms: 0,
|
|
3422
|
+
validations: [],
|
|
3423
|
+
context,
|
|
3424
|
+
extraction: { path: "none" },
|
|
3425
|
+
contributions: Array.from(options.contributions ?? [])
|
|
3426
|
+
};
|
|
3427
|
+
}
|
|
3428
|
+
for (const key of [
|
|
3429
|
+
"capability_id",
|
|
3430
|
+
"target_format_id",
|
|
3431
|
+
"message",
|
|
3432
|
+
"creative_manifest",
|
|
3433
|
+
"creative_id",
|
|
3434
|
+
"transformer_id",
|
|
3435
|
+
"config"
|
|
3436
|
+
]) {
|
|
3437
|
+
delete context[`${storyboard.creative_build_probe.context_prefix}_${key}`];
|
|
3438
|
+
}
|
|
3439
|
+
Object.assign(context, resolution.context);
|
|
3440
|
+
options = { ...options, contracts: [.../* @__PURE__ */ new Set([...options.contracts ?? [], "creative_build_probe_runner"])] };
|
|
3441
|
+
}
|
|
3208
3442
|
const injectedReceiver = options._webhookReceiver;
|
|
3209
3443
|
const webhookReceiver = injectedReceiver ?? (options.webhook_receiver ? await createWebhookReceiver({
|
|
3210
3444
|
...options.webhook_receiver.mode && { mode: options.webhook_receiver.mode },
|
|
@@ -3986,6 +4220,10 @@ async function executeStep(client, step, storyboardId, phaseId, context, allStep
|
|
|
3986
4220
|
}
|
|
3987
4221
|
}
|
|
3988
4222
|
const effectiveRequestUrl = requestUrl ?? runState.agentUrl;
|
|
4223
|
+
rememberPropertyListCredentials(
|
|
4224
|
+
taskResult?.data ?? (caughtError instanceof ResponseSchemaValidationError ? caughtError.data : void 0),
|
|
4225
|
+
(step.validations ?? []).flatMap((validation) => validation.auth_token_path ? [validation.auth_token_path] : [])
|
|
4226
|
+
);
|
|
3989
4227
|
const requestRecord = {
|
|
3990
4228
|
transport: options.protocol === "a2a" ? "a2a" : "mcp",
|
|
3991
4229
|
operation: effectiveStep.task,
|
|
@@ -4172,6 +4410,9 @@ async function executeStep(client, step, storyboardId, phaseId, context, allStep
|
|
|
4172
4410
|
(av) => injectContext({ __v: av }, context, runState.runnerVars).__v
|
|
4173
4411
|
);
|
|
4174
4412
|
}
|
|
4413
|
+
if (resolved.denied_list_id !== void 0) {
|
|
4414
|
+
resolved.denied_list_id = injectContext({ value: resolved.denied_list_id }, context, runState.runnerVars).value;
|
|
4415
|
+
}
|
|
4175
4416
|
return resolved;
|
|
4176
4417
|
});
|
|
4177
4418
|
const upstreamTraffic = await prefetchUpstreamTraffic(
|
|
@@ -4216,7 +4457,30 @@ async function executeStep(client, step, storyboardId, phaseId, context, allStep
|
|
|
4216
4457
|
};
|
|
4217
4458
|
})()
|
|
4218
4459
|
};
|
|
4219
|
-
validations = runValidations(
|
|
4460
|
+
validations = runValidations(
|
|
4461
|
+
resolvedValidations.filter((validation) => validation.check !== "property_list_reference"),
|
|
4462
|
+
vctx
|
|
4463
|
+
);
|
|
4464
|
+
for (const validation of resolvedValidations.filter((validation2) => validation2.check === "property_list_reference")) {
|
|
4465
|
+
const result = effectiveStep.task !== "create_property_list" || !validationTaskResult?.success ? {
|
|
4466
|
+
check: validation.check,
|
|
4467
|
+
passed: false,
|
|
4468
|
+
description: validation.description,
|
|
4469
|
+
error: "property_list_reference requires a successful create_property_list response."
|
|
4470
|
+
} : options.protocol === "a2a" ? {
|
|
4471
|
+
check: validation.check,
|
|
4472
|
+
passed: false,
|
|
4473
|
+
description: validation.description,
|
|
4474
|
+
error: "Credential-isolated reference resolution requires MCP."
|
|
4475
|
+
} : await verifyPropertyListReference(validation, validationTaskResult.data, {
|
|
4476
|
+
agentUrl: client.getDiscoveredMcpEndpoint?.() ?? runState.agentUrl,
|
|
4477
|
+
version: options.adcpVersion ?? options._serverAdcpVersion,
|
|
4478
|
+
signal: options.signal,
|
|
4479
|
+
allowHttp: options.allow_http,
|
|
4480
|
+
redactValues: runCredentialValues(options)
|
|
4481
|
+
});
|
|
4482
|
+
validations.push(decorateValidationResult(result, vctx, validation));
|
|
4483
|
+
}
|
|
4220
4484
|
if (crossResponses && crossResponses.dispatches.length > 1) {
|
|
4221
4485
|
const perResponseValidations = resolvedValidations.filter(
|
|
4222
4486
|
(v) => v.check !== "cross_response_field_equal" && v.check !== "cross_response_count_distinct"
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { CreativeBuildProbeSpec } from './creative-build-probe.mjs';
|
|
1
2
|
/**
|
|
2
3
|
* Types for storyboard-driven testing.
|
|
3
4
|
*
|
|
@@ -269,6 +270,8 @@ export interface Storyboard {
|
|
|
269
270
|
* Omitted handles retain the compatibility strategy `["seed"]`.
|
|
270
271
|
*/
|
|
271
272
|
fixture_resolution?: StoryboardFixtureResolution;
|
|
273
|
+
/** Opt-in runner preparation; does not add an agent protocol capability. */
|
|
274
|
+
creative_build_probe?: CreativeBuildProbeSpec;
|
|
272
275
|
/**
|
|
273
276
|
* Initial context values declared by the storyboard YAML. Runner callers may
|
|
274
277
|
* override these defaults with `StoryboardRunOptions.context`.
|
|
@@ -475,7 +478,7 @@ export interface FixtureResolutionAttempt {
|
|
|
475
478
|
export type FixtureResolutionEvidence = FixtureResolutionAttempt;
|
|
476
479
|
/** Machine-readable record emitted exactly once for every fixture handle. */
|
|
477
480
|
export interface FixtureResolutionRecord {
|
|
478
|
-
fixture_type: 'product' | 'pricing_option';
|
|
481
|
+
fixture_type: 'product' | 'pricing_option' | 'creative_format';
|
|
479
482
|
handle: string;
|
|
480
483
|
product_handle?: string;
|
|
481
484
|
requirements: FixtureMatchClause[];
|
|
@@ -483,8 +486,10 @@ export interface FixtureResolutionRecord {
|
|
|
483
486
|
status: FixtureResolutionStatus;
|
|
484
487
|
strategy?: FixtureResolutionStrategy;
|
|
485
488
|
seller_ids?: {
|
|
486
|
-
product_id
|
|
489
|
+
product_id?: string;
|
|
487
490
|
pricing_option_id?: string;
|
|
491
|
+
capability_id?: string;
|
|
492
|
+
format_id?: Record<string, unknown>;
|
|
488
493
|
};
|
|
489
494
|
}
|
|
490
495
|
/** One storyboard-scoped coverage gap produced by fixture resolution. */
|
|
@@ -890,7 +895,10 @@ export interface RateLimitTripSpec {
|
|
|
890
895
|
/** Maximum retry_after wait the runner will honor. Defaults to 30 seconds. */
|
|
891
896
|
replay_max_wait_seconds?: number;
|
|
892
897
|
}
|
|
893
|
-
export type StoryboardValidationCheck = 'response_schema' | 'field_present'
|
|
898
|
+
export type StoryboardValidationCheck = 'response_schema' | 'field_present'
|
|
899
|
+
/** Every item carries a non-null field at `array[*].field`; absent, null,
|
|
900
|
+
* or empty arrays grade not_applicable rather than passing vacuously. */
|
|
901
|
+
| 'all_fields_present' | 'field_absent' | 'envelope_field_present' | 'envelope_field_absent' | 'envelope_field_value' | 'envelope_field_value_or_absent' | 'field_value' | 'field_value_or_absent'
|
|
894
902
|
/**
|
|
895
903
|
* Assert that a string field in the task payload matches a JavaScript
|
|
896
904
|
* regular expression source declared in `pattern`. Fails when the path is
|
|
@@ -1042,7 +1050,7 @@ export type StoryboardValidationCheck = 'response_schema' | 'field_present' | 'f
|
|
|
1042
1050
|
* class: normalization, directionality, or range containment. Added for
|
|
1043
1051
|
* adcp-client#2060.
|
|
1044
1052
|
*/
|
|
1045
|
-
| 'canonical_format_satisfaction'
|
|
1053
|
+
| 'canonical_format_satisfaction' | 'property_list_reference'
|
|
1046
1054
|
/**
|
|
1047
1055
|
* Assert the cardinality of the array at `path`. Two configurations are
|
|
1048
1056
|
* supported: exact-count via `value: N` (passes only when the resolved
|
|
@@ -1230,6 +1238,23 @@ export interface RefsResolveScope {
|
|
|
1230
1238
|
equals: string;
|
|
1231
1239
|
}
|
|
1232
1240
|
export interface StoryboardValidation {
|
|
1241
|
+
/** Managing endpoint; $agent_url uses the issuer's discovered MCP endpoint (adcp#8289). */
|
|
1242
|
+
agent_url?: string;
|
|
1243
|
+
/** Creation-response path to the issued list ID. Defaults to list.list_id. */
|
|
1244
|
+
list_id_path?: string;
|
|
1245
|
+
/** Creation-response path to the read-only credential. Defaults to auth_token. */
|
|
1246
|
+
auth_token_path?: string;
|
|
1247
|
+
/** Existing owner-created control list; accepts a resolved $context.<key>. */
|
|
1248
|
+
denied_list_id?: string;
|
|
1249
|
+
/** Maximum identifiers requested per page, 1 through 10000. Required by the probe. */
|
|
1250
|
+
page_size?: number;
|
|
1251
|
+
/** Maximum pages to traverse, 1 through 100. Required by the probe. */
|
|
1252
|
+
max_pages?: number;
|
|
1253
|
+
/** Exact unordered snapshot, compared by (type, value). Required by the probe. */
|
|
1254
|
+
expected_identifiers?: Array<{
|
|
1255
|
+
type: string;
|
|
1256
|
+
value: string;
|
|
1257
|
+
}>;
|
|
1233
1258
|
/** Stable authored validation identifier echoed into runner results when present. */
|
|
1234
1259
|
id?: string;
|
|
1235
1260
|
/** Known validation kind, or a future string graded not_applicable by older runners. */
|
|
@@ -2152,7 +2177,7 @@ export interface RunnerSelectionResult {
|
|
|
2152
2177
|
*
|
|
2153
2178
|
* Spec: adcp-client#1626, adcp-client#2281, adcp-client#2356.
|
|
2154
2179
|
*/
|
|
2155
|
-
export type RequirementName = 'controller' | 'seeded_state' | 'real_wire' | 'webhook_receiver' | 'webhook_replay_receiver' | 'trusted_match_context_router_runner' | 'trusted_match_publisher_auth_runner' | 'request_signer' | 'multi_agent';
|
|
2180
|
+
export type RequirementName = 'controller' | 'seeded_state' | 'real_wire' | 'webhook_receiver' | 'webhook_replay_receiver' | 'trusted_match_context_router_runner' | 'trusted_match_publisher_auth_runner' | 'property_list_reference_runner' | 'request_signer' | 'multi_agent';
|
|
2156
2181
|
/**
|
|
2157
2182
|
* Enumeration of every requirement this SDK knows how to satisfy. The loader
|
|
2158
2183
|
* accepts other non-empty strings for forward compatibility; the runner treats
|
|
@@ -2180,12 +2205,9 @@ export interface SchemaValidationError {
|
|
|
2180
2205
|
* a deprecation or future-required advisory is the kind of thing a CI
|
|
2181
2206
|
* gate or dashboard SHOULD have explicit handling for.
|
|
2182
2207
|
*
|
|
2183
|
-
*
|
|
2184
|
-
*
|
|
2185
|
-
*
|
|
2186
|
-
* registers a different spelling. The *when* lives in the `effective_version`
|
|
2187
|
-
* field, never in the code. This keeps the surface stable across spec versions
|
|
2188
|
-
* — codes don't proliferate `_in_4_0` / `_in_5_0` siblings as the spec evolves.
|
|
2208
|
+
* Use the upstream runner-output contract's canonical codes so consumers can
|
|
2209
|
+
* aggregate the same advisory across runners. Keep each code stable for the
|
|
2210
|
+
* same advisory, including its version suffix where the contract defines one.
|
|
2189
2211
|
*
|
|
2190
2212
|
* Adding a new code is a wire-surface change AND a TypeScript breaking
|
|
2191
2213
|
* change for adopters who narrowed on `code`. Coordinate with the upstream
|
|
@@ -2199,10 +2221,10 @@ export type NoticeCode =
|
|
|
2199
2221
|
'signed_requests_specialism_deprecated'
|
|
2200
2222
|
/** Agent lacks `request_signing.supported: true`. Required for spend-committing
|
|
2201
2223
|
* operations in AdCP 4.0 per `effective_version`. */
|
|
2202
|
-
| '
|
|
2224
|
+
| 'request_signing_required_in_4_0'
|
|
2203
2225
|
/** Agent advertises `webhook_signing.legacy_hmac_fallback: true`. Removed in
|
|
2204
2226
|
* AdCP 4.0 per `effective_version`. */
|
|
2205
|
-
| '
|
|
2227
|
+
| 'legacy_hmac_fallback_removed_in_4_0'
|
|
2206
2228
|
/** Runner stripped request fields missing from the agent's advertised tool input schema. */
|
|
2207
2229
|
| 'input_schema_field_stripped'
|
|
2208
2230
|
/** The preflight get_adcp_capabilities response failed schema validation. */
|
|
@@ -2310,9 +2332,9 @@ export interface ValidationResult {
|
|
|
2310
2332
|
/** Optional remediation hint. */
|
|
2311
2333
|
remediation?: string;
|
|
2312
2334
|
/**
|
|
2313
|
-
* Marker for
|
|
2314
|
-
* were not met
|
|
2315
|
-
*
|
|
2335
|
+
* Marker for a check that could not be graded because its applicability
|
|
2336
|
+
* conditions were not met or the runner does not recognize its authored kind.
|
|
2337
|
+
* Entries carrying this flag
|
|
2316
2338
|
* contribute to `validations_not_applicable` so consumers can distinguish
|
|
2317
2339
|
* inapplicable coverage from clean passes.
|
|
2318
2340
|
*/
|