@adcp/sdk 12.1.1 → 13.0.0-rc.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/README.md +19 -3
- package/bin/adcp-fuzz.js +3 -1
- package/dist/lib/adapters/content-standards-adapter.d.mts +9 -9
- package/dist/lib/adapters/content-standards-adapter.d.ts +9 -9
- package/dist/lib/adapters/content-standards-adapter.d.ts.map +1 -1
- package/dist/lib/adapters/content-standards-adapter.js +22 -22
- package/dist/lib/adapters/content-standards-adapter.js.map +1 -1
- package/dist/lib/adapters/content-standards-adapter.mjs +18 -18
- package/dist/lib/adapters/content-standards-adapter.mjs.map +1 -1
- package/dist/lib/adapters/index.d.mts +2 -2
- package/dist/lib/adapters/index.d.ts +2 -2
- package/dist/lib/adapters/index.d.ts.map +1 -1
- package/dist/lib/adapters/index.js +10 -10
- package/dist/lib/adapters/index.js.map +1 -1
- package/dist/lib/adapters/index.mjs +9 -9
- package/dist/lib/adapters/index.mjs.map +1 -1
- package/dist/lib/auth/oauth/provider-cache.d.mts +7 -0
- package/dist/lib/auth/oauth/provider-cache.d.ts +8 -0
- package/dist/lib/auth/oauth/provider-cache.d.ts.map +1 -0
- package/dist/lib/auth/oauth/provider-cache.js +44 -0
- package/dist/lib/auth/oauth/provider-cache.js.map +1 -0
- package/dist/lib/auth/oauth/provider-cache.mjs +19 -0
- package/dist/lib/auth/oauth/provider-cache.mjs.map +1 -0
- package/dist/lib/conformance/invariants/uniformError.js +1 -1
- package/dist/lib/conformance/invariants/uniformError.js.map +1 -1
- package/dist/lib/conformance/invariants/uniformError.mjs +1 -1
- package/dist/lib/conformance/invariants/uniformError.mjs.map +1 -1
- package/dist/lib/conformance/runners.js +1 -1
- package/dist/lib/conformance/runners.js.map +1 -1
- package/dist/lib/conformance/runners.mjs +1 -1
- package/dist/lib/conformance/runners.mjs.map +1 -1
- package/dist/lib/conformance/seeder.js +5 -5
- package/dist/lib/conformance/seeder.js.map +1 -1
- package/dist/lib/conformance/seeder.mjs +5 -5
- package/dist/lib/conformance/seeder.mjs.map +1 -1
- package/dist/lib/core/ADCPMultiAgentClient.d.mts +26 -29
- package/dist/lib/core/ADCPMultiAgentClient.d.ts +26 -29
- package/dist/lib/core/ADCPMultiAgentClient.d.ts.map +1 -1
- package/dist/lib/core/ADCPMultiAgentClient.js +27 -19
- package/dist/lib/core/ADCPMultiAgentClient.js.map +1 -1
- package/dist/lib/core/ADCPMultiAgentClient.mjs +27 -19
- package/dist/lib/core/ADCPMultiAgentClient.mjs.map +1 -1
- package/dist/lib/core/AgentClient.d.mts +148 -138
- package/dist/lib/core/AgentClient.d.ts +148 -138
- package/dist/lib/core/AgentClient.d.ts.map +1 -1
- package/dist/lib/core/AgentClient.js +174 -85
- package/dist/lib/core/AgentClient.js.map +1 -1
- package/dist/lib/core/AgentClient.mjs +174 -85
- package/dist/lib/core/AgentClient.mjs.map +1 -1
- package/dist/lib/core/AsyncHandler.d.mts +18 -16
- package/dist/lib/core/AsyncHandler.d.ts +18 -16
- package/dist/lib/core/AsyncHandler.d.ts.map +1 -1
- package/dist/lib/core/AsyncHandler.js +22 -1
- package/dist/lib/core/AsyncHandler.js.map +1 -1
- package/dist/lib/core/AsyncHandler.mjs +22 -1
- package/dist/lib/core/AsyncHandler.mjs.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/CreativeAgentClient.d.mts +41 -17
- package/dist/lib/core/CreativeAgentClient.d.ts +41 -17
- package/dist/lib/core/CreativeAgentClient.d.ts.map +1 -1
- package/dist/lib/core/CreativeAgentClient.js +39 -12
- package/dist/lib/core/CreativeAgentClient.js.map +1 -1
- package/dist/lib/core/CreativeAgentClient.mjs +39 -12
- package/dist/lib/core/CreativeAgentClient.mjs.map +1 -1
- package/dist/lib/core/SingleAgentClient.d.mts +127 -50
- package/dist/lib/core/SingleAgentClient.d.ts +127 -50
- package/dist/lib/core/SingleAgentClient.d.ts.map +1 -1
- package/dist/lib/core/SingleAgentClient.js +1617 -177
- package/dist/lib/core/SingleAgentClient.js.map +1 -1
- package/dist/lib/core/SingleAgentClient.mjs +1627 -177
- package/dist/lib/core/SingleAgentClient.mjs.map +1 -1
- package/dist/lib/core/TaskExecutor.d.mts +9 -0
- package/dist/lib/core/TaskExecutor.d.ts +9 -0
- package/dist/lib/core/TaskExecutor.d.ts.map +1 -1
- package/dist/lib/core/TaskExecutor.js +136 -43
- package/dist/lib/core/TaskExecutor.js.map +1 -1
- package/dist/lib/core/TaskExecutor.mjs +136 -43
- package/dist/lib/core/TaskExecutor.mjs.map +1 -1
- package/dist/lib/index.d.mts +111 -17
- package/dist/lib/index.d.ts +111 -17
- package/dist/lib/index.d.ts.map +1 -1
- package/dist/lib/index.js +94 -94
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/index.mjs +93 -94
- package/dist/lib/index.mjs.map +1 -1
- package/dist/lib/protocols/index.d.ts.map +1 -1
- package/dist/lib/protocols/index.js +6 -15
- package/dist/lib/protocols/index.js.map +1 -1
- package/dist/lib/protocols/index.mjs +6 -16
- package/dist/lib/protocols/index.mjs.map +1 -1
- package/dist/lib/protocols/mcp-modern.d.ts.map +1 -1
- package/dist/lib/protocols/mcp-modern.js +87 -12
- package/dist/lib/protocols/mcp-modern.js.map +1 -1
- package/dist/lib/protocols/mcp-modern.mjs +89 -12
- package/dist/lib/protocols/mcp-modern.mjs.map +1 -1
- package/dist/lib/schemas-data/v2.5/_provenance.json +1 -1
- package/dist/lib/server/create-adcp-server.d.mts +6 -0
- package/dist/lib/server/create-adcp-server.d.ts +6 -0
- package/dist/lib/server/create-adcp-server.d.ts.map +1 -1
- package/dist/lib/server/create-adcp-server.js +295 -48
- package/dist/lib/server/create-adcp-server.js.map +1 -1
- package/dist/lib/server/create-adcp-server.mjs +301 -50
- package/dist/lib/server/create-adcp-server.mjs.map +1 -1
- package/dist/lib/server/decisioning/assembly-helpers.d.mts +27 -13
- package/dist/lib/server/decisioning/assembly-helpers.d.ts +27 -13
- package/dist/lib/server/decisioning/assembly-helpers.d.ts.map +1 -1
- package/dist/lib/server/decisioning/assembly-helpers.js +136 -14
- package/dist/lib/server/decisioning/assembly-helpers.js.map +1 -1
- package/dist/lib/server/decisioning/assembly-helpers.mjs +134 -13
- package/dist/lib/server/decisioning/assembly-helpers.mjs.map +1 -1
- package/dist/lib/server/decisioning/index.d.mts +13 -12
- package/dist/lib/server/decisioning/index.d.ts +13 -12
- package/dist/lib/server/decisioning/index.d.ts.map +1 -1
- package/dist/lib/server/decisioning/index.js +6 -0
- package/dist/lib/server/decisioning/index.js.map +1 -1
- package/dist/lib/server/decisioning/index.mjs +9 -3
- package/dist/lib/server/decisioning/index.mjs.map +1 -1
- package/dist/lib/server/decisioning/list-helpers.d.mts +13 -3
- package/dist/lib/server/decisioning/list-helpers.d.ts +13 -3
- package/dist/lib/server/decisioning/list-helpers.d.ts.map +1 -1
- package/dist/lib/server/decisioning/list-helpers.js +13 -3
- package/dist/lib/server/decisioning/list-helpers.js.map +1 -1
- package/dist/lib/server/decisioning/list-helpers.mjs +11 -2
- package/dist/lib/server/decisioning/list-helpers.mjs.map +1 -1
- package/dist/lib/server/decisioning/manifest-helpers.d.mts +5 -3
- package/dist/lib/server/decisioning/manifest-helpers.d.ts +5 -3
- package/dist/lib/server/decisioning/manifest-helpers.d.ts.map +1 -1
- package/dist/lib/server/decisioning/manifest-helpers.js.map +1 -1
- package/dist/lib/server/decisioning/manifest-helpers.mjs.map +1 -1
- package/dist/lib/server/decisioning/proposal/dispatch.d.mts +2 -2
- package/dist/lib/server/decisioning/proposal/dispatch.d.ts +2 -2
- package/dist/lib/server/decisioning/proposal/dispatch.d.ts.map +1 -1
- package/dist/lib/server/decisioning/proposal/dispatch.js.map +1 -1
- package/dist/lib/server/decisioning/proposal/dispatch.mjs.map +1 -1
- package/dist/lib/server/decisioning/proposal/index.d.mts +1 -1
- package/dist/lib/server/decisioning/proposal/index.d.ts +1 -1
- package/dist/lib/server/decisioning/proposal/index.d.ts.map +1 -1
- package/dist/lib/server/decisioning/proposal/index.js.map +1 -1
- package/dist/lib/server/decisioning/proposal/index.mjs.map +1 -1
- package/dist/lib/server/decisioning/proposal/lifecycle.d.mts +3 -2
- package/dist/lib/server/decisioning/proposal/lifecycle.d.ts +3 -2
- package/dist/lib/server/decisioning/proposal/lifecycle.d.ts.map +1 -1
- package/dist/lib/server/decisioning/proposal/lifecycle.js.map +1 -1
- package/dist/lib/server/decisioning/proposal/lifecycle.mjs.map +1 -1
- package/dist/lib/server/decisioning/proposal/mock-manager.d.mts +3 -3
- package/dist/lib/server/decisioning/proposal/mock-manager.d.ts +3 -3
- package/dist/lib/server/decisioning/proposal/mock-manager.d.ts.map +1 -1
- package/dist/lib/server/decisioning/proposal/mock-manager.js.map +1 -1
- package/dist/lib/server/decisioning/proposal/mock-manager.mjs.map +1 -1
- package/dist/lib/server/decisioning/proposal/types.d.mts +10 -6
- package/dist/lib/server/decisioning/proposal/types.d.ts +10 -6
- package/dist/lib/server/decisioning/proposal/types.d.ts.map +1 -1
- package/dist/lib/server/decisioning/proposal/types.js.map +1 -1
- package/dist/lib/server/decisioning/proposal/types.mjs.map +1 -1
- package/dist/lib/server/decisioning/runtime/from-platform.d.mts +21 -2
- package/dist/lib/server/decisioning/runtime/from-platform.d.ts +21 -2
- package/dist/lib/server/decisioning/runtime/from-platform.d.ts.map +1 -1
- package/dist/lib/server/decisioning/runtime/from-platform.js +754 -81
- package/dist/lib/server/decisioning/runtime/from-platform.js.map +1 -1
- package/dist/lib/server/decisioning/runtime/from-platform.mjs +763 -81
- package/dist/lib/server/decisioning/runtime/from-platform.mjs.map +1 -1
- package/dist/lib/server/decisioning/specialisms/brand-rights.d.mts +9 -9
- package/dist/lib/server/decisioning/specialisms/brand-rights.d.ts +9 -9
- package/dist/lib/server/decisioning/specialisms/brand-rights.d.ts.map +1 -1
- package/dist/lib/server/decisioning/specialisms/brand-rights.js.map +1 -1
- package/dist/lib/server/decisioning/specialisms/content-standards.d.mts +16 -16
- package/dist/lib/server/decisioning/specialisms/content-standards.d.ts +16 -16
- package/dist/lib/server/decisioning/specialisms/content-standards.d.ts.map +1 -1
- package/dist/lib/server/decisioning/specialisms/content-standards.js.map +1 -1
- package/dist/lib/server/decisioning/specialisms/creative-ad-server.d.mts +15 -13
- package/dist/lib/server/decisioning/specialisms/creative-ad-server.d.ts +15 -13
- package/dist/lib/server/decisioning/specialisms/creative-ad-server.d.ts.map +1 -1
- package/dist/lib/server/decisioning/specialisms/creative-ad-server.js.map +1 -1
- package/dist/lib/server/decisioning/specialisms/creative.d.mts +12 -11
- package/dist/lib/server/decisioning/specialisms/creative.d.ts +12 -11
- package/dist/lib/server/decisioning/specialisms/creative.d.ts.map +1 -1
- package/dist/lib/server/decisioning/specialisms/creative.js.map +1 -1
- package/dist/lib/server/decisioning/specialisms/sales.d.mts +25 -15
- package/dist/lib/server/decisioning/specialisms/sales.d.ts +25 -15
- 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.mts +3 -3
- package/dist/lib/server/index.d.ts +3 -3
- package/dist/lib/server/index.d.ts.map +1 -1
- package/dist/lib/server/index.js +72 -72
- package/dist/lib/server/index.js.map +1 -1
- package/dist/lib/server/index.mjs +36 -36
- package/dist/lib/server/index.mjs.map +1 -1
- package/dist/lib/server/legacy/v5/index.d.mts +1 -0
- package/dist/lib/server/legacy/v5/index.d.ts +1 -0
- package/dist/lib/server/legacy/v5/index.d.ts.map +1 -1
- package/dist/lib/server/legacy/v5/index.js +74 -1
- package/dist/lib/server/legacy/v5/index.js.map +1 -1
- package/dist/lib/server/legacy/v5/index.mjs +75 -1
- package/dist/lib/server/legacy/v5/index.mjs.map +1 -1
- package/dist/lib/server/responses.d.mts +2 -2
- package/dist/lib/server/responses.d.ts +2 -2
- package/dist/lib/server/responses.js.map +1 -1
- package/dist/lib/server/responses.mjs.map +1 -1
- package/dist/lib/testing/client.js +1 -1
- package/dist/lib/testing/client.js.map +1 -1
- package/dist/lib/testing/client.mjs +1 -1
- package/dist/lib/testing/client.mjs.map +1 -1
- package/dist/lib/testing/scenarios/brand-rights.js +6 -6
- package/dist/lib/testing/scenarios/brand-rights.js.map +1 -1
- package/dist/lib/testing/scenarios/brand-rights.mjs +6 -6
- package/dist/lib/testing/scenarios/brand-rights.mjs.map +1 -1
- package/dist/lib/testing/scenarios/creative.js +7 -7
- package/dist/lib/testing/scenarios/creative.js.map +1 -1
- package/dist/lib/testing/scenarios/creative.mjs +7 -7
- package/dist/lib/testing/scenarios/creative.mjs.map +1 -1
- package/dist/lib/testing/scenarios/discovery.js +2 -2
- package/dist/lib/testing/scenarios/discovery.js.map +1 -1
- package/dist/lib/testing/scenarios/discovery.mjs +2 -2
- package/dist/lib/testing/scenarios/discovery.mjs.map +1 -1
- package/dist/lib/testing/scenarios/edge-cases.js +11 -11
- package/dist/lib/testing/scenarios/edge-cases.js.map +1 -1
- package/dist/lib/testing/scenarios/edge-cases.mjs +11 -11
- package/dist/lib/testing/scenarios/edge-cases.mjs.map +1 -1
- package/dist/lib/testing/scenarios/governance.d.ts.map +1 -1
- package/dist/lib/testing/scenarios/governance.js +16 -22
- package/dist/lib/testing/scenarios/governance.js.map +1 -1
- package/dist/lib/testing/scenarios/governance.mjs +16 -22
- package/dist/lib/testing/scenarios/governance.mjs.map +1 -1
- package/dist/lib/testing/scenarios/media-buy.js +5 -5
- package/dist/lib/testing/scenarios/media-buy.js.map +1 -1
- package/dist/lib/testing/scenarios/media-buy.mjs +5 -5
- package/dist/lib/testing/scenarios/media-buy.mjs.map +1 -1
- package/dist/lib/testing/scenarios/schema-compliance.js +1 -1
- package/dist/lib/testing/scenarios/schema-compliance.js.map +1 -1
- package/dist/lib/testing/scenarios/schema-compliance.mjs +1 -1
- package/dist/lib/testing/scenarios/schema-compliance.mjs.map +1 -1
- package/dist/lib/testing/scenarios/trusted-match.d.ts.map +1 -1
- package/dist/lib/testing/scenarios/trusted-match.js +4 -3
- package/dist/lib/testing/scenarios/trusted-match.js.map +1 -1
- package/dist/lib/testing/scenarios/trusted-match.mjs +4 -3
- package/dist/lib/testing/scenarios/trusted-match.mjs.map +1 -1
- package/dist/lib/testing/storyboard/shape-drift-hints.d.mts +3 -4
- package/dist/lib/testing/storyboard/shape-drift-hints.d.ts +3 -4
- package/dist/lib/testing/storyboard/shape-drift-hints.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/shape-drift-hints.js +27 -27
- package/dist/lib/testing/storyboard/shape-drift-hints.js.map +1 -1
- package/dist/lib/testing/storyboard/shape-drift-hints.mjs +27 -27
- package/dist/lib/testing/storyboard/shape-drift-hints.mjs.map +1 -1
- package/dist/lib/testing/storyboard/task-map.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/task-map.js +43 -5
- package/dist/lib/testing/storyboard/task-map.js.map +1 -1
- package/dist/lib/testing/storyboard/task-map.mjs +43 -5
- package/dist/lib/testing/storyboard/task-map.mjs.map +1 -1
- package/dist/lib/testing/test-helpers.d.mts +2 -2
- package/dist/lib/testing/test-helpers.d.ts +2 -2
- package/dist/lib/testing/test-helpers.js.map +1 -1
- package/dist/lib/testing/test-helpers.mjs.map +1 -1
- package/dist/lib/types/adcp.d.mts +14 -14
- package/dist/lib/types/adcp.d.ts +14 -14
- package/dist/lib/types/adcp.d.ts.map +1 -1
- package/dist/lib/types/adcp.js.map +1 -1
- package/dist/lib/types/adcp.mjs.map +1 -1
- package/dist/lib/types/index.d.mts +2 -2
- package/dist/lib/types/index.d.ts +2 -2
- package/dist/lib/types/index.d.ts.map +1 -1
- package/dist/lib/types/index.js.map +1 -1
- package/dist/lib/types/index.mjs.map +1 -1
- package/dist/lib/utils/capabilities.d.mts +6 -0
- package/dist/lib/utils/capabilities.d.ts +6 -0
- package/dist/lib/utils/capabilities.d.ts.map +1 -1
- package/dist/lib/utils/capabilities.js +4 -0
- package/dist/lib/utils/capabilities.js.map +1 -1
- package/dist/lib/utils/capabilities.mjs +4 -0
- package/dist/lib/utils/capabilities.mjs.map +1 -1
- package/dist/lib/utils/creative-delivery.d.mts +52 -10
- package/dist/lib/utils/creative-delivery.d.ts +52 -10
- package/dist/lib/utils/creative-delivery.d.ts.map +1 -1
- package/dist/lib/utils/creative-delivery.js +104 -9
- package/dist/lib/utils/creative-delivery.js.map +1 -1
- package/dist/lib/utils/creative-delivery.mjs +104 -8
- package/dist/lib/utils/creative-delivery.mjs.map +1 -1
- package/dist/lib/utils/format-assets.d.mts +41 -38
- package/dist/lib/utils/format-assets.d.ts +41 -38
- package/dist/lib/utils/format-assets.d.ts.map +1 -1
- package/dist/lib/utils/format-assets.js +3 -1
- package/dist/lib/utils/format-assets.js.map +1 -1
- package/dist/lib/utils/format-assets.mjs +3 -1
- package/dist/lib/utils/format-assets.mjs.map +1 -1
- package/dist/lib/utils/index.d.mts +8 -8
- package/dist/lib/utils/index.d.ts +8 -8
- package/dist/lib/utils/index.d.ts.map +1 -1
- package/dist/lib/utils/index.js +11 -9
- package/dist/lib/utils/index.js.map +1 -1
- package/dist/lib/utils/index.mjs +9 -8
- package/dist/lib/utils/index.mjs.map +1 -1
- package/dist/lib/utils/preview-utils.d.mts +11 -8
- package/dist/lib/utils/preview-utils.d.ts +11 -8
- package/dist/lib/utils/preview-utils.d.ts.map +1 -1
- package/dist/lib/utils/preview-utils.js +4 -4
- package/dist/lib/utils/preview-utils.js.map +1 -1
- package/dist/lib/utils/preview-utils.mjs +3 -3
- package/dist/lib/utils/preview-utils.mjs.map +1 -1
- package/dist/lib/utils/tool-request-schemas.d.mts +2 -2
- package/dist/lib/utils/tool-request-schemas.d.ts +2 -2
- package/dist/lib/v2/projection/aao-reference-formats.json +492 -0
- package/dist/lib/v2/projection/augment-response.d.mts +31 -11
- package/dist/lib/v2/projection/augment-response.d.ts +31 -11
- package/dist/lib/v2/projection/augment-response.d.ts.map +1 -1
- package/dist/lib/v2/projection/augment-response.js +233 -27
- package/dist/lib/v2/projection/augment-response.js.map +1 -1
- package/dist/lib/v2/projection/augment-response.mjs +232 -27
- package/dist/lib/v2/projection/augment-response.mjs.map +1 -1
- package/dist/lib/v2/projection/builders.d.mts +7 -6
- package/dist/lib/v2/projection/builders.d.ts +7 -6
- package/dist/lib/v2/projection/builders.d.ts.map +1 -1
- package/dist/lib/v2/projection/builders.js +11 -8
- package/dist/lib/v2/projection/builders.js.map +1 -1
- package/dist/lib/v2/projection/builders.mjs +9 -6
- package/dist/lib/v2/projection/builders.mjs.map +1 -1
- package/dist/lib/v2/projection/catalog-snapshot.d.mts +47 -0
- package/dist/lib/v2/projection/catalog-snapshot.d.ts +48 -0
- package/dist/lib/v2/projection/catalog-snapshot.d.ts.map +1 -0
- package/dist/lib/v2/projection/catalog-snapshot.js +291 -0
- package/dist/lib/v2/projection/catalog-snapshot.js.map +1 -0
- package/dist/lib/v2/projection/catalog-snapshot.mjs +265 -0
- package/dist/lib/v2/projection/catalog-snapshot.mjs.map +1 -0
- package/dist/lib/v2/projection/catalog.d.mts +23 -2
- package/dist/lib/v2/projection/catalog.d.ts +23 -2
- package/dist/lib/v2/projection/catalog.d.ts.map +1 -1
- package/dist/lib/v2/projection/catalog.js +34 -10
- package/dist/lib/v2/projection/catalog.js.map +1 -1
- package/dist/lib/v2/projection/catalog.mjs +33 -10
- package/dist/lib/v2/projection/catalog.mjs.map +1 -1
- package/dist/lib/v2/projection/creative-delivery.d.mts +157 -0
- package/dist/lib/v2/projection/creative-delivery.d.ts +158 -0
- package/dist/lib/v2/projection/creative-delivery.d.ts.map +1 -0
- package/dist/lib/v2/projection/creative-delivery.js +967 -0
- package/dist/lib/v2/projection/creative-delivery.js.map +1 -0
- package/dist/lib/v2/projection/creative-delivery.mjs +941 -0
- package/dist/lib/v2/projection/creative-delivery.mjs.map +1 -0
- package/dist/lib/v2/projection/index.d.mts +8 -6
- package/dist/lib/v2/projection/index.d.ts +8 -6
- package/dist/lib/v2/projection/index.d.ts.map +1 -1
- package/dist/lib/v2/projection/index.js +26 -4
- package/dist/lib/v2/projection/index.js.map +1 -1
- package/dist/lib/v2/projection/index.mjs +28 -4
- package/dist/lib/v2/projection/index.mjs.map +1 -1
- package/dist/lib/v2/projection/legacy-metadata.d.mts +21 -0
- package/dist/lib/v2/projection/legacy-metadata.d.ts +22 -0
- package/dist/lib/v2/projection/legacy-metadata.d.ts.map +1 -0
- package/dist/lib/v2/projection/legacy-metadata.js +73 -0
- package/dist/lib/v2/projection/legacy-metadata.js.map +1 -0
- package/dist/lib/v2/projection/legacy-metadata.mjs +45 -0
- package/dist/lib/v2/projection/legacy-metadata.mjs.map +1 -0
- package/dist/lib/v2/projection/types.d.mts +29 -23
- package/dist/lib/v2/projection/types.d.ts +29 -23
- package/dist/lib/v2/projection/types.d.ts.map +1 -1
- package/dist/lib/v2/projection/types.js.map +1 -1
- package/dist/lib/v2/projection/v1-to-v2.d.mts +29 -6
- package/dist/lib/v2/projection/v1-to-v2.d.ts +29 -6
- package/dist/lib/v2/projection/v1-to-v2.d.ts.map +1 -1
- package/dist/lib/v2/projection/v1-to-v2.js +218 -9
- package/dist/lib/v2/projection/v1-to-v2.js.map +1 -1
- package/dist/lib/v2/projection/v1-to-v2.mjs +219 -10
- package/dist/lib/v2/projection/v1-to-v2.mjs.map +1 -1
- package/dist/lib/v2/projection/v2-to-v1.d.mts +31 -2
- package/dist/lib/v2/projection/v2-to-v1.d.ts +31 -2
- package/dist/lib/v2/projection/v2-to-v1.d.ts.map +1 -1
- package/dist/lib/v2/projection/v2-to-v1.js +138 -7
- package/dist/lib/v2/projection/v2-to-v1.js.map +1 -1
- package/dist/lib/v2/projection/v2-to-v1.mjs +135 -6
- package/dist/lib/v2/projection/v2-to-v1.mjs.map +1 -1
- package/dist/lib/v2/projection/write-side.d.mts +12 -13
- package/dist/lib/v2/projection/write-side.d.ts +12 -13
- package/dist/lib/v2/projection/write-side.d.ts.map +1 -1
- package/dist/lib/v2/projection/write-side.js +16 -12
- package/dist/lib/v2/projection/write-side.js.map +1 -1
- package/dist/lib/v2/projection/write-side.mjs +16 -12
- package/dist/lib/v2/projection/write-side.mjs.map +1 -1
- package/dist/lib/version.d.mts +3 -3
- package/dist/lib/version.d.ts +3 -3
- package/dist/lib/version.d.ts.map +1 -1
- package/dist/lib/version.js +3 -3
- package/dist/lib/version.js.map +1 -1
- package/dist/lib/version.mjs +3 -3
- package/dist/lib/version.mjs.map +1 -1
- package/docs/guides/BUILD-AN-AGENT.md +7 -2
- package/docs/guides/PREVIEW-ASSET-DURABILITY.md +6 -2
- package/docs/llms.txt +1 -0
- package/examples/README.md +1 -1
- package/examples/batch-preview-test.ts +3 -3
- package/examples/conversation-client.ts +2 -2
- package/examples/debug-preview-response.ts +1 -1
- package/examples/decisioning-platform-broadcast-tv.ts +10 -4
- package/examples/decisioning-platform-mock-seller.ts +16 -9
- package/examples/decisioning-platform-programmatic.ts +18 -7
- package/examples/error-compliant-server.ts +26 -16
- package/examples/generative-creative-demo.ts +7 -19
- package/examples/hello_creative_adapter_ad_server.ts +37 -16
- package/examples/hello_creative_adapter_template.ts +12 -10
- package/examples/hello_seller_adapter_guaranteed.ts +52 -23
- package/examples/hello_seller_adapter_multi_tenant.ts +6 -3
- package/examples/hello_seller_adapter_non_guaranteed.ts +54 -26
- package/examples/hello_seller_adapter_proposal_mode.ts +40 -14
- package/examples/hello_seller_adapter_social.ts +2 -7
- package/examples/inspect-card-formats.ts +1 -1
- package/examples/simple-getting-started.ts +1 -1
- package/examples/test-helpers-demo.ts +1 -1
- package/package.json +2 -2
- package/skills/build-decisioning-creative-template/SKILL.md +11 -11
- package/skills/build-decisioning-platform/advanced/REFERENCE.md +8 -2
|
@@ -12,7 +12,7 @@ async function testErrorHandling(agentUrl, options) {
|
|
|
12
12
|
const { result, step } = await runStep(
|
|
13
13
|
"Invalid product_id error response",
|
|
14
14
|
"create_media_buy",
|
|
15
|
-
async () => client.
|
|
15
|
+
async () => client.createMediaBuyLegacy({
|
|
16
16
|
idempotency_key: `error-test-${Date.now()}`,
|
|
17
17
|
brand_manifest: {
|
|
18
18
|
name: "Error Test Brand",
|
|
@@ -59,7 +59,7 @@ async function testErrorHandling(agentUrl, options) {
|
|
|
59
59
|
const { result, step } = await runStep(
|
|
60
60
|
"Invalid format_id error response",
|
|
61
61
|
"sync_creatives",
|
|
62
|
-
async () => client.
|
|
62
|
+
async () => client.syncCreativesLegacy({
|
|
63
63
|
account: resolveAccount(options),
|
|
64
64
|
creatives: [
|
|
65
65
|
{
|
|
@@ -127,7 +127,7 @@ async function testValidation(agentUrl, options) {
|
|
|
127
127
|
const { result, step } = await runStep(
|
|
128
128
|
"Invalid pacing enum value",
|
|
129
129
|
"create_media_buy",
|
|
130
|
-
async () => client.
|
|
130
|
+
async () => client.createMediaBuyLegacy({
|
|
131
131
|
idempotency_key: `validation-test-${Date.now()}`,
|
|
132
132
|
brand_manifest: { name: "Validation Test", url: "https://test.example" },
|
|
133
133
|
start_time: new Date(Date.now() + 864e5).toISOString(),
|
|
@@ -155,7 +155,7 @@ async function testValidation(agentUrl, options) {
|
|
|
155
155
|
const { result, step } = await runStep(
|
|
156
156
|
"Negative budget rejection",
|
|
157
157
|
"create_media_buy",
|
|
158
|
-
async () => client.
|
|
158
|
+
async () => client.createMediaBuyLegacy({
|
|
159
159
|
idempotency_key: `negative-budget-test-${Date.now()}`,
|
|
160
160
|
brand_manifest: { name: "Negative Budget Test", url: "https://test.example" },
|
|
161
161
|
start_time: new Date(Date.now() + 864e5).toISOString(),
|
|
@@ -182,7 +182,7 @@ async function testValidation(agentUrl, options) {
|
|
|
182
182
|
const { result, step } = await runStep(
|
|
183
183
|
"Invalid creative weight (> 100)",
|
|
184
184
|
"sync_creatives",
|
|
185
|
-
async () => client.
|
|
185
|
+
async () => client.syncCreativesLegacy({
|
|
186
186
|
account: resolveAccount(options),
|
|
187
187
|
creatives: [
|
|
188
188
|
{
|
|
@@ -215,7 +215,7 @@ async function testValidation(agentUrl, options) {
|
|
|
215
215
|
const { result, step } = await runStep(
|
|
216
216
|
"Empty creatives array handling",
|
|
217
217
|
"sync_creatives",
|
|
218
|
-
async () => client.
|
|
218
|
+
async () => client.syncCreativesLegacy({
|
|
219
219
|
account: resolveAccount(options),
|
|
220
220
|
creatives: []
|
|
221
221
|
})
|
|
@@ -295,7 +295,7 @@ async function testPricingEdgeCases(agentUrl, options) {
|
|
|
295
295
|
const { result, step } = await runStep(
|
|
296
296
|
"Auction pricing without bid_price",
|
|
297
297
|
"create_media_buy",
|
|
298
|
-
async () => client.
|
|
298
|
+
async () => client.createMediaBuyLegacy({
|
|
299
299
|
idempotency_key: `auction-no-bid-${Date.now()}`,
|
|
300
300
|
brand_manifest: { name: "Auction Test", url: "https://test.example" },
|
|
301
301
|
start_time: new Date(Date.now() + 864e5).toISOString(),
|
|
@@ -324,7 +324,7 @@ async function testPricingEdgeCases(agentUrl, options) {
|
|
|
324
324
|
const { result, step } = await runStep(
|
|
325
325
|
"Budget below min_spend_per_package",
|
|
326
326
|
"create_media_buy",
|
|
327
|
-
async () => client.
|
|
327
|
+
async () => client.createMediaBuyLegacy({
|
|
328
328
|
idempotency_key: `under-min-spend-${Date.now()}`,
|
|
329
329
|
brand_manifest: { name: "Min Spend Test", url: "https://test.example" },
|
|
330
330
|
start_time: new Date(Date.now() + 864e5).toISOString(),
|
|
@@ -360,7 +360,7 @@ async function testTemporalValidation(agentUrl, options) {
|
|
|
360
360
|
const { result: endBeforeStart, step: step1 } = await runStep(
|
|
361
361
|
"End time before start time",
|
|
362
362
|
"create_media_buy",
|
|
363
|
-
async () => client.
|
|
363
|
+
async () => client.createMediaBuyLegacy({
|
|
364
364
|
idempotency_key: `temporal-test-${Date.now()}`,
|
|
365
365
|
brand_manifest: { name: "Temporal Test", url: "https://test.example" },
|
|
366
366
|
start_time: new Date(Date.now() + 6048e5).toISOString(),
|
|
@@ -390,7 +390,7 @@ async function testTemporalValidation(agentUrl, options) {
|
|
|
390
390
|
const { result: pastStart, step: step2 } = await runStep(
|
|
391
391
|
"Start time in the past",
|
|
392
392
|
"create_media_buy",
|
|
393
|
-
async () => client.
|
|
393
|
+
async () => client.createMediaBuyLegacy({
|
|
394
394
|
idempotency_key: `past-start-${Date.now()}`,
|
|
395
395
|
brand_manifest: { name: "Past Start Test", url: "https://test.example" },
|
|
396
396
|
start_time: new Date(Date.now() - 864e5).toISOString(),
|
|
@@ -490,7 +490,7 @@ async function testResponseConsistency(agentUrl, options) {
|
|
|
490
490
|
const { result, step } = await runStep(
|
|
491
491
|
"Check list_authorized_properties consistency",
|
|
492
492
|
"list_authorized_properties",
|
|
493
|
-
async () => client.
|
|
493
|
+
async () => client.executeCustomTask("list_authorized_properties", {})
|
|
494
494
|
);
|
|
495
495
|
if (result?.success && result?.data) {
|
|
496
496
|
const data = result.data;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/lib/testing/scenarios/edge-cases.ts"],"sourcesContent":["/**\n * Edge Case Testing Scenarios\n *\n * Tests various edge cases, error handling, and validation:\n * - Error handling (invalid inputs, non-existent IDs)\n * - Schema validation (negative values, invalid enums)\n * - Pricing edge cases (auction vs fixed, min spend, floor prices)\n * - Behavior analysis\n * - Temporal validation\n * - Response consistency\n *\n * These scenarios are designed to find bugs and ensure agents\n * properly handle edge cases according to the AdCP spec.\n */\n\nimport type { Product, PricingOption } from '../../types/core.generated';\nimport type {\n CreateMediaBuyRequest,\n GetProductsRequest,\n SyncCreativesRequest,\n GetMediaBuyDeliveryRequest,\n GetProductsResponse,\n ListCreativesResponse,\n} from '../../types/tools.generated';\nimport type { TestOptions, TestStepResult, AgentProfile, TaskResult } from '../types';\nimport { getOrCreateClient, runStep, resolveBrand, resolveAccount, getOrDiscoverProfile } from '../client';\nimport { testDiscovery } from './discovery';\n\n/**\n * Test: Error Handling\n * Verifies the agent returns proper discriminated union error responses\n */\nexport async function testErrorHandling(\n agentUrl: string,\n options: TestOptions\n): Promise<{ steps: TestStepResult[]; profile?: AgentProfile }> {\n const steps: TestStepResult[] = [];\n const client = getOrCreateClient(agentUrl, options);\n\n const { profile, step: profileStep } = await getOrDiscoverProfile(client, options);\n steps.push(profileStep);\n\n if (!profileStep.passed) {\n return { steps, profile };\n }\n\n // Test 1: Invalid product_id in create_media_buy\n if (profile.tools.includes('create_media_buy')) {\n const { result, step } = await runStep<TaskResult>(\n 'Invalid product_id error response',\n 'create_media_buy',\n async () =>\n client.createMediaBuy({\n idempotency_key: `error-test-${Date.now()}`,\n brand_manifest: {\n name: 'Error Test Brand',\n url: 'https://test.example',\n },\n start_time: new Date(Date.now() + 86400000).toISOString(),\n end_time: new Date(Date.now() + 604800000).toISOString(),\n packages: [\n {\n product_id: 'NONEXISTENT_PRODUCT_ID_12345',\n budget: 1000,\n pricing_option_id: 'nonexistent-pricing',\n },\n ],\n } as unknown as CreateMediaBuyRequest) as Promise<TaskResult>\n );\n\n if (result?.success) {\n step.passed = false;\n step.error = 'Agent accepted invalid product_id - should have returned error';\n } else {\n // !result (threw) or result.success === false — both count as rejection\n step.passed = true;\n step.details = `Agent correctly rejected invalid product_id${result?.error ? `: ${result.error}` : ''}`;\n if (result?.error) step.response_preview = JSON.stringify({ error: result.error }, null, 2);\n }\n steps.push(step);\n }\n\n // Test 2: Missing required field in get_products\n if (profile.tools.includes('get_products')) {\n const { result, step } = await runStep<TaskResult>(\n 'Empty request handling',\n 'get_products',\n async () => client.getProducts({} as unknown as GetProductsRequest) as Promise<TaskResult>\n );\n\n if (result?.success) {\n step.passed = true;\n step.details = 'Agent accepts empty get_products request (permissive)';\n } else {\n // !result (threw) or result.success === false — both mean stricter validation\n step.passed = true;\n step.details = `Agent requires brief or brand (stricter validation)${result?.error ? `: ${result.error}` : ''}`;\n if (result?.error) step.response_preview = JSON.stringify({ error: result.error }, null, 2);\n }\n steps.push(step);\n }\n\n // Test 3: Invalid format_id in sync_creatives\n if (profile.tools.includes('sync_creatives')) {\n const { result, step } = await runStep<TaskResult>(\n 'Invalid format_id error response',\n 'sync_creatives',\n async () =>\n client.syncCreatives({\n account: resolveAccount(options),\n creatives: [\n {\n creative_id: `invalid-format-test-${Date.now()}`,\n name: 'Invalid Format Test',\n format_id: { id: 'TOTALLY_INVALID_FORMAT_ID_999' },\n assets: {\n primary: {\n url: 'https://via.placeholder.com/300x250',\n width: 300,\n height: 250,\n format: 'png',\n },\n },\n },\n ],\n } as unknown as SyncCreativesRequest) as Promise<TaskResult>\n );\n\n if (result?.success) {\n step.passed = true;\n step.details = 'Agent accepts unknown format_ids (permissive mode)';\n } else {\n // !result (threw) or result.success === false — both count as rejection\n step.passed = true;\n step.details = `Agent correctly rejected invalid format_id${result?.error ? `: ${result.error}` : ''}`;\n if (result?.error) step.response_preview = JSON.stringify({ error: result.error }, null, 2);\n }\n steps.push(step);\n }\n\n // Test 4: get_media_buy_delivery with non-existent media_buy_id\n if (profile.tools.includes('get_media_buy_delivery')) {\n const { result, step } = await runStep<TaskResult>(\n 'Non-existent media_buy_id error',\n 'get_media_buy_delivery',\n async () =>\n client.getMediaBuyDelivery({\n media_buy_ids: ['NONEXISTENT_MEDIA_BUY_ID_99999'],\n } as unknown as GetMediaBuyDeliveryRequest) as Promise<TaskResult>\n );\n\n if (result?.success) {\n const data = result.data as unknown as Record<string, unknown> | undefined;\n const deliveries = (data?.deliveries || data?.media_buys || []) as unknown[];\n if (deliveries.length === 0) {\n step.passed = true;\n step.details = 'Agent returned empty deliveries for non-existent media buy';\n } else {\n step.passed = false;\n step.error = 'Agent returned deliveries for non-existent media_buy_id';\n }\n } else {\n // !result (threw) or result.success === false — both count as rejection\n step.passed = true;\n step.details = `Agent correctly returned error for non-existent media buy${result?.error ? `: ${result.error}` : ''}`;\n if (result?.error) step.response_preview = JSON.stringify({ error: result.error }, null, 2);\n }\n steps.push(step);\n }\n\n return { steps, profile };\n}\n\n/**\n * Test: Validation\n * Tests that agents properly validate inputs and reject malformed requests\n */\nexport async function testValidation(\n agentUrl: string,\n options: TestOptions\n): Promise<{ steps: TestStepResult[]; profile?: AgentProfile }> {\n const steps: TestStepResult[] = [];\n const client = getOrCreateClient(agentUrl, options);\n\n const { profile, step: profileStep } = await getOrDiscoverProfile(client, options);\n steps.push(profileStep);\n\n if (!profileStep.passed) {\n return { steps, profile };\n }\n\n // Test 1: Invalid enum value for pacing\n if (profile.tools.includes('create_media_buy')) {\n const { result, step } = await runStep<TaskResult>(\n 'Invalid pacing enum value',\n 'create_media_buy',\n async () =>\n client.createMediaBuy({\n idempotency_key: `validation-test-${Date.now()}`,\n brand_manifest: { name: 'Validation Test', url: 'https://test.example' },\n start_time: new Date(Date.now() + 86400000).toISOString(),\n end_time: new Date(Date.now() + 604800000).toISOString(),\n packages: [\n {\n product_id: 'test-product',\n budget: 1000,\n pricing_option_id: 'test-pricing',\n pacing: 'INVALID_PACING_VALUE' as unknown as string,\n },\n ],\n } as unknown as CreateMediaBuyRequest) as Promise<TaskResult>\n );\n\n if (result?.success) {\n step.passed = false;\n step.error = 'Agent accepted invalid pacing value - should validate enums';\n } else {\n step.passed = true;\n step.details = `Agent rejected invalid pacing enum value${result?.error ? `: ${result.error}` : ''}`;\n }\n steps.push(step);\n }\n\n // Test 2: Negative budget (definitely invalid)\n if (profile.tools.includes('create_media_buy')) {\n const { result, step } = await runStep<TaskResult>(\n 'Negative budget rejection',\n 'create_media_buy',\n async () =>\n client.createMediaBuy({\n idempotency_key: `negative-budget-test-${Date.now()}`,\n brand_manifest: { name: 'Negative Budget Test', url: 'https://test.example' },\n start_time: new Date(Date.now() + 86400000).toISOString(),\n end_time: new Date(Date.now() + 604800000).toISOString(),\n packages: [\n {\n product_id: 'test-product',\n budget: -500,\n pricing_option_id: 'test-pricing',\n },\n ],\n } as unknown as CreateMediaBuyRequest) as Promise<TaskResult>\n );\n\n if (result?.success) {\n step.passed = false;\n step.error = 'CRITICAL: Agent accepted negative budget - must validate minimum: 0';\n } else {\n step.passed = true;\n step.details = `Agent correctly rejected negative budget${result?.error ? `: ${result.error}` : ''}`;\n }\n steps.push(step);\n }\n\n // Test 3: Invalid creative weight (> 100)\n if (profile.tools.includes('sync_creatives')) {\n const { result, step } = await runStep<TaskResult>(\n 'Invalid creative weight (> 100)',\n 'sync_creatives',\n async () =>\n client.syncCreatives({\n account: resolveAccount(options),\n creatives: [\n {\n creative_id: `weight-test-${Date.now()}`,\n name: 'Weight Test Creative',\n format_id: { agent_url: 'https://creative.adcontextprotocol.org', id: 'display_300x250' },\n weight: 150,\n assets: {\n primary: {\n url: 'https://via.placeholder.com/300x250',\n width: 300,\n height: 250,\n format: 'png',\n },\n },\n },\n ],\n } as unknown as SyncCreativesRequest) as Promise<TaskResult>\n );\n\n if (result?.success) {\n step.passed = false;\n step.error = 'Agent accepted weight > 100 - should validate maximum: 100';\n } else {\n step.passed = true;\n step.details = `Agent rejected weight > 100${result?.error ? `: ${result.error}` : ''}`;\n }\n steps.push(step);\n }\n\n // Test 4: Empty creatives array\n if (profile.tools.includes('sync_creatives')) {\n const { result, step } = await runStep<TaskResult>(\n 'Empty creatives array handling',\n 'sync_creatives',\n async () =>\n client.syncCreatives({\n account: resolveAccount(options),\n creatives: [],\n } as unknown as SyncCreativesRequest) as Promise<TaskResult>\n );\n\n if (result?.success) {\n step.passed = true;\n step.details = 'Agent accepts empty creatives array (returns empty result)';\n } else {\n // !result (threw) or result.success === false — both mean agent rejected\n step.passed = true;\n step.details = `Agent rejected empty creatives array${result?.error ? `: ${result.error}` : ''}`;\n }\n steps.push(step);\n }\n\n return { steps, profile };\n}\n\n/**\n * Test: Pricing Edge Cases\n * Tests auction vs fixed pricing, min spend requirements, bid_price handling\n */\nexport async function testPricingEdgeCases(\n agentUrl: string,\n options: TestOptions\n): Promise<{ steps: TestStepResult[]; profile?: AgentProfile }> {\n const steps: TestStepResult[] = [];\n const client = getOrCreateClient(agentUrl, options);\n\n const { steps: discoverySteps, profile } = await testDiscovery(agentUrl, options);\n steps.push(...discoverySteps);\n\n if (!profile?.tools.includes('create_media_buy') || !profile?.tools.includes('get_products')) {\n steps.push({\n step: 'Pricing edge cases',\n passed: false,\n duration_ms: 0,\n error: 'Agent does not support create_media_buy or get_products',\n });\n return { steps, profile };\n }\n\n // Get products to find actual pricing options\n const { result: productsResult } = await runStep<TaskResult>(\n 'Fetch products for pricing analysis',\n 'get_products',\n async () =>\n client.getProducts({\n buying_mode: 'brief',\n brief: 'Show all products with pricing details',\n brand: resolveBrand(options),\n } as unknown as GetProductsRequest) as Promise<TaskResult>\n );\n\n const productsData = productsResult?.data as GetProductsResponse | undefined;\n const products = productsData?.products;\n if (!products?.length) {\n steps.push({\n step: 'Pricing edge cases',\n passed: false,\n duration_ms: 0,\n error: 'No products available for pricing tests',\n });\n return { steps, profile };\n }\n\n // Analyze products for auction vs fixed pricing\n const auctionProducts: { product: Product; pricingOption: PricingOption }[] = [];\n const fixedProducts: { product: Product; pricingOption: PricingOption }[] = [];\n const productsWithMinSpend: { product: Product; pricingOption: PricingOption; minSpend: number }[] = [];\n\n for (const product of products) {\n for (const po of product.pricing_options || []) {\n if (!('fixed_price' in po) && (po.floor_price !== undefined || po.price_guidance !== undefined)) {\n auctionProducts.push({ product, pricingOption: po });\n } else if ('fixed_price' in po) {\n fixedProducts.push({ product, pricingOption: po });\n }\n if (po.min_spend_per_package != null && po.min_spend_per_package > 0) {\n productsWithMinSpend.push({\n product,\n pricingOption: po,\n minSpend: po.min_spend_per_package,\n });\n }\n }\n }\n\n steps.push({\n step: 'Analyze pricing options',\n passed: true,\n duration_ms: 0,\n details: `Found ${fixedProducts.length} fixed, ${auctionProducts.length} auction, ${productsWithMinSpend.length} with min spend`,\n });\n\n // Test 1: Auction pricing without bid_price (should fail)\n if (auctionProducts.length > 0) {\n const { product, pricingOption } = auctionProducts[0]!;\n const { result, step } = await runStep<TaskResult>(\n 'Auction pricing without bid_price',\n 'create_media_buy',\n async () =>\n client.createMediaBuy({\n idempotency_key: `auction-no-bid-${Date.now()}`,\n brand_manifest: { name: 'Auction Test', url: 'https://test.example' },\n start_time: new Date(Date.now() + 86400000).toISOString(),\n end_time: new Date(Date.now() + 604800000).toISOString(),\n packages: [\n {\n product_id: product.product_id,\n budget: 5000,\n pricing_option_id: pricingOption.pricing_option_id,\n },\n ],\n } as unknown as CreateMediaBuyRequest) as Promise<TaskResult>\n );\n\n if (result?.success) {\n step.passed = false;\n step.error = 'Agent accepted auction pricing without bid_price - should require it';\n } else {\n step.passed = true;\n step.details = `Agent correctly requires bid_price for auction pricing${result?.error ? `: ${result.error}` : ''}`;\n }\n steps.push(step);\n }\n\n // Test 2: Budget below min_spend_per_package\n if (productsWithMinSpend.length > 0) {\n const { product, pricingOption, minSpend } = productsWithMinSpend[0]!;\n const underBudget = minSpend * 0.5;\n\n const { result, step } = await runStep<TaskResult>(\n 'Budget below min_spend_per_package',\n 'create_media_buy',\n async () =>\n client.createMediaBuy({\n idempotency_key: `under-min-spend-${Date.now()}`,\n brand_manifest: { name: 'Min Spend Test', url: 'https://test.example' },\n start_time: new Date(Date.now() + 86400000).toISOString(),\n end_time: new Date(Date.now() + 604800000).toISOString(),\n packages: [\n {\n product_id: product.product_id,\n budget: underBudget,\n pricing_option_id: pricingOption.pricing_option_id,\n },\n ],\n } as unknown as CreateMediaBuyRequest) as Promise<TaskResult>\n );\n\n if (result?.success) {\n step.passed = false;\n step.error = `Agent accepted budget ${underBudget} below min_spend ${minSpend}`;\n } else {\n step.passed = true;\n step.details = `Agent rejected budget ${underBudget} below min_spend ${minSpend}${result?.error ? `: ${result.error}` : ''}`;\n }\n steps.push(step);\n }\n\n return { steps, profile };\n}\n\n/**\n * Test: Temporal Validation\n * Tests date/time ordering and format validation\n */\nexport async function testTemporalValidation(\n agentUrl: string,\n options: TestOptions\n): Promise<{ steps: TestStepResult[]; profile?: AgentProfile }> {\n const steps: TestStepResult[] = [];\n const client = getOrCreateClient(agentUrl, options);\n\n const { profile, step: profileStep } = await getOrDiscoverProfile(client, options);\n steps.push(profileStep);\n\n if (!profileStep.passed || !profile.tools.includes('create_media_buy')) {\n return { steps, profile };\n }\n\n // Test 1: End time before start time\n const { result: endBeforeStart, step: step1 } = await runStep<TaskResult>(\n 'End time before start time',\n 'create_media_buy',\n async () =>\n client.createMediaBuy({\n idempotency_key: `temporal-test-${Date.now()}`,\n brand_manifest: { name: 'Temporal Test', url: 'https://test.example' },\n start_time: new Date(Date.now() + 604800000).toISOString(), // 7 days from now\n end_time: new Date(Date.now() + 86400000).toISOString(), // 1 day from now (before start!)\n packages: [\n {\n product_id: 'test-product',\n budget: 1000,\n pricing_option_id: 'test-pricing',\n },\n ],\n } as unknown as CreateMediaBuyRequest) as Promise<TaskResult>\n );\n\n if (!endBeforeStart) {\n // runStep caught an exception — agent rejected at transport level, which counts as rejection\n step1.passed = true;\n step1.details = `Agent rejected end_time before start_time (threw error)`;\n } else if (endBeforeStart.success) {\n step1.passed = false;\n step1.error = 'Agent accepted end_time before start_time - must validate';\n } else {\n step1.passed = true;\n step1.details = `Agent correctly rejected end_time before start_time${endBeforeStart.error ? `: ${endBeforeStart.error}` : ''}`;\n }\n steps.push(step1);\n\n // Test 2: Start time in the past\n const { result: pastStart, step: step2 } = await runStep<TaskResult>(\n 'Start time in the past',\n 'create_media_buy',\n async () =>\n client.createMediaBuy({\n idempotency_key: `past-start-${Date.now()}`,\n brand_manifest: { name: 'Past Start Test', url: 'https://test.example' },\n start_time: new Date(Date.now() - 86400000).toISOString(), // Yesterday\n end_time: new Date(Date.now() + 604800000).toISOString(), // 7 days from now\n packages: [\n {\n product_id: 'test-product',\n budget: 1000,\n pricing_option_id: 'test-pricing',\n },\n ],\n } as unknown as CreateMediaBuyRequest) as Promise<TaskResult>\n );\n\n if (!pastStart) {\n // runStep caught an exception — agent rejected at transport level\n step2.passed = true;\n step2.details = 'Agent rejected start_time in the past (threw error)';\n } else if (pastStart.success) {\n step2.passed = true;\n step2.details = 'Agent accepts start_time in past (may auto-adjust)';\n } else {\n step2.passed = true;\n step2.details = `Agent rejected start_time in the past${pastStart.error ? `: ${pastStart.error}` : ''}`;\n }\n steps.push(step2);\n\n return { steps, profile };\n}\n\n/**\n * Test: Behavior Analysis\n * Analyzes agent behavioral characteristics\n */\nexport async function testBehaviorAnalysis(\n agentUrl: string,\n options: TestOptions\n): Promise<{ steps: TestStepResult[]; profile?: AgentProfile }> {\n const steps: TestStepResult[] = [];\n const client = getOrCreateClient(agentUrl, options);\n\n const { profile, step: profileStep } = await getOrDiscoverProfile(client, options);\n steps.push(profileStep);\n\n if (!profileStep.passed) {\n return { steps, profile };\n }\n\n // Test 1: Does get_products require brand?\n if (profile.tools.includes('get_products')) {\n const { result: withoutBrand, step: step1 } = await runStep<TaskResult>(\n 'get_products without brand',\n 'get_products',\n async () =>\n client.getProducts({\n buying_mode: 'brief',\n brief: 'Show me all available products',\n } as unknown as GetProductsRequest) as Promise<TaskResult>\n );\n\n const withoutBrandProducts = (withoutBrand?.data as GetProductsResponse | undefined)?.products;\n if (withoutBrand?.success && withoutBrandProducts?.length) {\n step1.details = `Returns ${withoutBrandProducts.length} products without brand`;\n } else if (withoutBrand && !withoutBrand.success) {\n step1.details = 'Requires brand for product discovery';\n }\n steps.push(step1);\n\n // Test 2: Are results filtered by brief?\n const { result: specificBrief, step: step2 } = await runStep<TaskResult>(\n 'get_products with specific brief',\n 'get_products',\n async () =>\n client.getProducts({\n buying_mode: 'brief',\n brief: 'Looking specifically for podcast audio advertising only',\n brand: resolveBrand(options),\n } as unknown as GetProductsRequest) as Promise<TaskResult>\n );\n\n const { result: broadBrief } = await runStep<TaskResult>(\n 'get_products with broad brief',\n 'get_products',\n async () =>\n client.getProducts({\n buying_mode: 'brief',\n brief: 'Show all products across all channels and formats',\n brand: resolveBrand(options),\n } as unknown as GetProductsRequest) as Promise<TaskResult>\n );\n\n const specificProducts = (specificBrief?.data as GetProductsResponse | undefined)?.products;\n const broadProducts = (broadBrief?.data as GetProductsResponse | undefined)?.products;\n const specificCount = specificProducts?.length || 0;\n const broadCount = broadProducts?.length || 0;\n\n if (specificCount < broadCount) {\n step2.passed = true;\n step2.details = `Brief filtering: specific=${specificCount}, broad=${broadCount} (filtered)`;\n } else if (specificCount === broadCount && broadCount > 0) {\n step2.passed = true;\n step2.details = `No brief filtering: specific=${specificCount}, broad=${broadCount} (same)`;\n } else {\n step2.details = `Brief filtering unclear: specific=${specificCount}, broad=${broadCount}`;\n }\n steps.push(step2);\n }\n\n return { steps, profile };\n}\n\n/**\n * Test: Response Consistency\n * Checks for schema errors, pagination bugs, data mismatches\n */\nexport async function testResponseConsistency(\n agentUrl: string,\n options: TestOptions\n): Promise<{ steps: TestStepResult[]; profile?: AgentProfile }> {\n const steps: TestStepResult[] = [];\n const client = getOrCreateClient(agentUrl, options);\n\n const { profile, step: profileStep } = await getOrDiscoverProfile(client, options);\n steps.push(profileStep);\n\n if (!profileStep.passed) {\n return { steps, profile };\n }\n\n // Test list_authorized_properties consistency\n if (profile.tools.includes('list_authorized_properties')) {\n const { result, step } = await runStep<TaskResult>(\n 'Check list_authorized_properties consistency',\n 'list_authorized_properties',\n async () => client.executeTask('list_authorized_properties', {}) as Promise<TaskResult>\n );\n\n if (result?.success && result?.data) {\n const data = result.data as unknown as Record<string, unknown>;\n const publisherDomains = (data.publisher_domains || []) as unknown[];\n const issues: string[] = [];\n\n // Check for undefined elements\n for (let i = 0; i < publisherDomains.length; i++) {\n if (publisherDomains[i] === undefined || publisherDomains[i] === null) {\n issues.push(`publisher_domains[${i}] is ${String(publisherDomains[i])}`);\n }\n }\n\n if (issues.length > 0) {\n step.passed = false;\n step.error = `Schema validation errors: ${issues.slice(0, 3).join(', ')}`;\n step.response_preview = JSON.stringify(\n {\n issues: issues.slice(0, 10),\n publisher_domains_count: publisherDomains.length,\n },\n null,\n 2\n );\n } else {\n step.details = `Publisher domains consistent: ${publisherDomains.length} domain(s)`;\n }\n } else if (result && !result.success) {\n step.passed = false;\n step.error = result.error || 'list_authorized_properties failed';\n }\n steps.push(step);\n }\n\n // Test list_creatives pagination consistency\n if (profile.tools.includes('list_creatives')) {\n const { result, step } = await runStep<TaskResult>(\n 'Check list_creatives pagination consistency',\n 'list_creatives',\n async () => client.listCreatives({}) as Promise<TaskResult>\n );\n\n if (result?.success && result?.data) {\n const data = result.data as ListCreativesResponse;\n const creatives = data.creatives || [];\n const querySummary = data.query_summary;\n const totalMatching = querySummary?.total_matching;\n const returned = querySummary?.returned ?? creatives.length;\n\n if (totalMatching !== undefined && totalMatching > 0 && returned === 0) {\n step.passed = false;\n step.error = `Pagination bug: total_matching=${totalMatching} but returned=${returned}`;\n } else if (returned !== creatives.length) {\n step.passed = false;\n step.error = `Mismatch: returned=${returned} but creatives.length=${creatives.length}`;\n } else {\n step.details = `Pagination consistent: ${creatives.length} creatives`;\n }\n }\n steps.push(step);\n }\n\n return { steps, profile };\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../../src/lib/testing/scenarios/edge-cases.ts"],"sourcesContent":["/**\n * Edge Case Testing Scenarios\n *\n * Tests various edge cases, error handling, and validation:\n * - Error handling (invalid inputs, non-existent IDs)\n * - Schema validation (negative values, invalid enums)\n * - Pricing edge cases (auction vs fixed, min spend, floor prices)\n * - Behavior analysis\n * - Temporal validation\n * - Response consistency\n *\n * These scenarios are designed to find bugs and ensure agents\n * properly handle edge cases according to the AdCP spec.\n */\n\nimport type { Product, PricingOption } from '../../types/core.generated';\nimport type {\n CreateMediaBuyRequest,\n SyncCreativesRequest,\n GetMediaBuyDeliveryRequest,\n GetProductsResponse,\n ListCreativesResponse,\n} from '../../types/tools.generated';\nimport type { CanonicalGetProductsRequest } from '../../v2/projection/creative-delivery';\nimport type { TestOptions, TestStepResult, AgentProfile, TaskResult } from '../types';\nimport { getOrCreateClient, runStep, resolveBrand, resolveAccount, getOrDiscoverProfile } from '../client';\nimport { testDiscovery } from './discovery';\n\n/**\n * Test: Error Handling\n * Verifies the agent returns proper discriminated union error responses\n */\nexport async function testErrorHandling(\n agentUrl: string,\n options: TestOptions\n): Promise<{ steps: TestStepResult[]; profile?: AgentProfile }> {\n const steps: TestStepResult[] = [];\n const client = getOrCreateClient(agentUrl, options);\n\n const { profile, step: profileStep } = await getOrDiscoverProfile(client, options);\n steps.push(profileStep);\n\n if (!profileStep.passed) {\n return { steps, profile };\n }\n\n // Test 1: Invalid product_id in create_media_buy\n if (profile.tools.includes('create_media_buy')) {\n const { result, step } = await runStep<TaskResult>(\n 'Invalid product_id error response',\n 'create_media_buy',\n async () =>\n client.createMediaBuyLegacy({\n idempotency_key: `error-test-${Date.now()}`,\n brand_manifest: {\n name: 'Error Test Brand',\n url: 'https://test.example',\n },\n start_time: new Date(Date.now() + 86400000).toISOString(),\n end_time: new Date(Date.now() + 604800000).toISOString(),\n packages: [\n {\n product_id: 'NONEXISTENT_PRODUCT_ID_12345',\n budget: 1000,\n pricing_option_id: 'nonexistent-pricing',\n },\n ],\n } as unknown as CreateMediaBuyRequest) as Promise<TaskResult>\n );\n\n if (result?.success) {\n step.passed = false;\n step.error = 'Agent accepted invalid product_id - should have returned error';\n } else {\n // !result (threw) or result.success === false — both count as rejection\n step.passed = true;\n step.details = `Agent correctly rejected invalid product_id${result?.error ? `: ${result.error}` : ''}`;\n if (result?.error) step.response_preview = JSON.stringify({ error: result.error }, null, 2);\n }\n steps.push(step);\n }\n\n // Test 2: Missing required field in get_products\n if (profile.tools.includes('get_products')) {\n const { result, step } = await runStep<TaskResult>(\n 'Empty request handling',\n 'get_products',\n async () => client.getProducts({} as unknown as CanonicalGetProductsRequest) as Promise<TaskResult>\n );\n\n if (result?.success) {\n step.passed = true;\n step.details = 'Agent accepts empty get_products request (permissive)';\n } else {\n // !result (threw) or result.success === false — both mean stricter validation\n step.passed = true;\n step.details = `Agent requires brief or brand (stricter validation)${result?.error ? `: ${result.error}` : ''}`;\n if (result?.error) step.response_preview = JSON.stringify({ error: result.error }, null, 2);\n }\n steps.push(step);\n }\n\n // Test 3: Invalid format_id in sync_creatives\n if (profile.tools.includes('sync_creatives')) {\n const { result, step } = await runStep<TaskResult>(\n 'Invalid format_id error response',\n 'sync_creatives',\n async () =>\n client.syncCreativesLegacy({\n account: resolveAccount(options),\n creatives: [\n {\n creative_id: `invalid-format-test-${Date.now()}`,\n name: 'Invalid Format Test',\n format_id: { id: 'TOTALLY_INVALID_FORMAT_ID_999' },\n assets: {\n primary: {\n url: 'https://via.placeholder.com/300x250',\n width: 300,\n height: 250,\n format: 'png',\n },\n },\n },\n ],\n } as unknown as SyncCreativesRequest) as Promise<TaskResult>\n );\n\n if (result?.success) {\n step.passed = true;\n step.details = 'Agent accepts unknown format_ids (permissive mode)';\n } else {\n // !result (threw) or result.success === false — both count as rejection\n step.passed = true;\n step.details = `Agent correctly rejected invalid format_id${result?.error ? `: ${result.error}` : ''}`;\n if (result?.error) step.response_preview = JSON.stringify({ error: result.error }, null, 2);\n }\n steps.push(step);\n }\n\n // Test 4: get_media_buy_delivery with non-existent media_buy_id\n if (profile.tools.includes('get_media_buy_delivery')) {\n const { result, step } = await runStep<TaskResult>(\n 'Non-existent media_buy_id error',\n 'get_media_buy_delivery',\n async () =>\n client.getMediaBuyDelivery({\n media_buy_ids: ['NONEXISTENT_MEDIA_BUY_ID_99999'],\n } as unknown as GetMediaBuyDeliveryRequest) as Promise<TaskResult>\n );\n\n if (result?.success) {\n const data = result.data as unknown as Record<string, unknown> | undefined;\n const deliveries = (data?.deliveries || data?.media_buys || []) as unknown[];\n if (deliveries.length === 0) {\n step.passed = true;\n step.details = 'Agent returned empty deliveries for non-existent media buy';\n } else {\n step.passed = false;\n step.error = 'Agent returned deliveries for non-existent media_buy_id';\n }\n } else {\n // !result (threw) or result.success === false — both count as rejection\n step.passed = true;\n step.details = `Agent correctly returned error for non-existent media buy${result?.error ? `: ${result.error}` : ''}`;\n if (result?.error) step.response_preview = JSON.stringify({ error: result.error }, null, 2);\n }\n steps.push(step);\n }\n\n return { steps, profile };\n}\n\n/**\n * Test: Validation\n * Tests that agents properly validate inputs and reject malformed requests\n */\nexport async function testValidation(\n agentUrl: string,\n options: TestOptions\n): Promise<{ steps: TestStepResult[]; profile?: AgentProfile }> {\n const steps: TestStepResult[] = [];\n const client = getOrCreateClient(agentUrl, options);\n\n const { profile, step: profileStep } = await getOrDiscoverProfile(client, options);\n steps.push(profileStep);\n\n if (!profileStep.passed) {\n return { steps, profile };\n }\n\n // Test 1: Invalid enum value for pacing\n if (profile.tools.includes('create_media_buy')) {\n const { result, step } = await runStep<TaskResult>(\n 'Invalid pacing enum value',\n 'create_media_buy',\n async () =>\n client.createMediaBuyLegacy({\n idempotency_key: `validation-test-${Date.now()}`,\n brand_manifest: { name: 'Validation Test', url: 'https://test.example' },\n start_time: new Date(Date.now() + 86400000).toISOString(),\n end_time: new Date(Date.now() + 604800000).toISOString(),\n packages: [\n {\n product_id: 'test-product',\n budget: 1000,\n pricing_option_id: 'test-pricing',\n pacing: 'INVALID_PACING_VALUE' as unknown as string,\n },\n ],\n } as unknown as CreateMediaBuyRequest) as Promise<TaskResult>\n );\n\n if (result?.success) {\n step.passed = false;\n step.error = 'Agent accepted invalid pacing value - should validate enums';\n } else {\n step.passed = true;\n step.details = `Agent rejected invalid pacing enum value${result?.error ? `: ${result.error}` : ''}`;\n }\n steps.push(step);\n }\n\n // Test 2: Negative budget (definitely invalid)\n if (profile.tools.includes('create_media_buy')) {\n const { result, step } = await runStep<TaskResult>(\n 'Negative budget rejection',\n 'create_media_buy',\n async () =>\n client.createMediaBuyLegacy({\n idempotency_key: `negative-budget-test-${Date.now()}`,\n brand_manifest: { name: 'Negative Budget Test', url: 'https://test.example' },\n start_time: new Date(Date.now() + 86400000).toISOString(),\n end_time: new Date(Date.now() + 604800000).toISOString(),\n packages: [\n {\n product_id: 'test-product',\n budget: -500,\n pricing_option_id: 'test-pricing',\n },\n ],\n } as unknown as CreateMediaBuyRequest) as Promise<TaskResult>\n );\n\n if (result?.success) {\n step.passed = false;\n step.error = 'CRITICAL: Agent accepted negative budget - must validate minimum: 0';\n } else {\n step.passed = true;\n step.details = `Agent correctly rejected negative budget${result?.error ? `: ${result.error}` : ''}`;\n }\n steps.push(step);\n }\n\n // Test 3: Invalid creative weight (> 100)\n if (profile.tools.includes('sync_creatives')) {\n const { result, step } = await runStep<TaskResult>(\n 'Invalid creative weight (> 100)',\n 'sync_creatives',\n async () =>\n client.syncCreativesLegacy({\n account: resolveAccount(options),\n creatives: [\n {\n creative_id: `weight-test-${Date.now()}`,\n name: 'Weight Test Creative',\n format_id: { agent_url: 'https://creative.adcontextprotocol.org', id: 'display_300x250' },\n weight: 150,\n assets: {\n primary: {\n url: 'https://via.placeholder.com/300x250',\n width: 300,\n height: 250,\n format: 'png',\n },\n },\n },\n ],\n } as unknown as SyncCreativesRequest) as Promise<TaskResult>\n );\n\n if (result?.success) {\n step.passed = false;\n step.error = 'Agent accepted weight > 100 - should validate maximum: 100';\n } else {\n step.passed = true;\n step.details = `Agent rejected weight > 100${result?.error ? `: ${result.error}` : ''}`;\n }\n steps.push(step);\n }\n\n // Test 4: Empty creatives array\n if (profile.tools.includes('sync_creatives')) {\n const { result, step } = await runStep<TaskResult>(\n 'Empty creatives array handling',\n 'sync_creatives',\n async () =>\n client.syncCreativesLegacy({\n account: resolveAccount(options),\n creatives: [],\n } as unknown as SyncCreativesRequest) as Promise<TaskResult>\n );\n\n if (result?.success) {\n step.passed = true;\n step.details = 'Agent accepts empty creatives array (returns empty result)';\n } else {\n // !result (threw) or result.success === false — both mean agent rejected\n step.passed = true;\n step.details = `Agent rejected empty creatives array${result?.error ? `: ${result.error}` : ''}`;\n }\n steps.push(step);\n }\n\n return { steps, profile };\n}\n\n/**\n * Test: Pricing Edge Cases\n * Tests auction vs fixed pricing, min spend requirements, bid_price handling\n */\nexport async function testPricingEdgeCases(\n agentUrl: string,\n options: TestOptions\n): Promise<{ steps: TestStepResult[]; profile?: AgentProfile }> {\n const steps: TestStepResult[] = [];\n const client = getOrCreateClient(agentUrl, options);\n\n const { steps: discoverySteps, profile } = await testDiscovery(agentUrl, options);\n steps.push(...discoverySteps);\n\n if (!profile?.tools.includes('create_media_buy') || !profile?.tools.includes('get_products')) {\n steps.push({\n step: 'Pricing edge cases',\n passed: false,\n duration_ms: 0,\n error: 'Agent does not support create_media_buy or get_products',\n });\n return { steps, profile };\n }\n\n // Get products to find actual pricing options\n const { result: productsResult } = await runStep<TaskResult>(\n 'Fetch products for pricing analysis',\n 'get_products',\n async () =>\n client.getProducts({\n buying_mode: 'brief',\n brief: 'Show all products with pricing details',\n brand: resolveBrand(options),\n } as unknown as CanonicalGetProductsRequest) as Promise<TaskResult>\n );\n\n const productsData = productsResult?.data as GetProductsResponse | undefined;\n const products = productsData?.products;\n if (!products?.length) {\n steps.push({\n step: 'Pricing edge cases',\n passed: false,\n duration_ms: 0,\n error: 'No products available for pricing tests',\n });\n return { steps, profile };\n }\n\n // Analyze products for auction vs fixed pricing\n const auctionProducts: { product: Product; pricingOption: PricingOption }[] = [];\n const fixedProducts: { product: Product; pricingOption: PricingOption }[] = [];\n const productsWithMinSpend: { product: Product; pricingOption: PricingOption; minSpend: number }[] = [];\n\n for (const product of products) {\n for (const po of product.pricing_options || []) {\n if (!('fixed_price' in po) && (po.floor_price !== undefined || po.price_guidance !== undefined)) {\n auctionProducts.push({ product, pricingOption: po });\n } else if ('fixed_price' in po) {\n fixedProducts.push({ product, pricingOption: po });\n }\n if (po.min_spend_per_package != null && po.min_spend_per_package > 0) {\n productsWithMinSpend.push({\n product,\n pricingOption: po,\n minSpend: po.min_spend_per_package,\n });\n }\n }\n }\n\n steps.push({\n step: 'Analyze pricing options',\n passed: true,\n duration_ms: 0,\n details: `Found ${fixedProducts.length} fixed, ${auctionProducts.length} auction, ${productsWithMinSpend.length} with min spend`,\n });\n\n // Test 1: Auction pricing without bid_price (should fail)\n if (auctionProducts.length > 0) {\n const { product, pricingOption } = auctionProducts[0]!;\n const { result, step } = await runStep<TaskResult>(\n 'Auction pricing without bid_price',\n 'create_media_buy',\n async () =>\n client.createMediaBuyLegacy({\n idempotency_key: `auction-no-bid-${Date.now()}`,\n brand_manifest: { name: 'Auction Test', url: 'https://test.example' },\n start_time: new Date(Date.now() + 86400000).toISOString(),\n end_time: new Date(Date.now() + 604800000).toISOString(),\n packages: [\n {\n product_id: product.product_id,\n budget: 5000,\n pricing_option_id: pricingOption.pricing_option_id,\n },\n ],\n } as unknown as CreateMediaBuyRequest) as Promise<TaskResult>\n );\n\n if (result?.success) {\n step.passed = false;\n step.error = 'Agent accepted auction pricing without bid_price - should require it';\n } else {\n step.passed = true;\n step.details = `Agent correctly requires bid_price for auction pricing${result?.error ? `: ${result.error}` : ''}`;\n }\n steps.push(step);\n }\n\n // Test 2: Budget below min_spend_per_package\n if (productsWithMinSpend.length > 0) {\n const { product, pricingOption, minSpend } = productsWithMinSpend[0]!;\n const underBudget = minSpend * 0.5;\n\n const { result, step } = await runStep<TaskResult>(\n 'Budget below min_spend_per_package',\n 'create_media_buy',\n async () =>\n client.createMediaBuyLegacy({\n idempotency_key: `under-min-spend-${Date.now()}`,\n brand_manifest: { name: 'Min Spend Test', url: 'https://test.example' },\n start_time: new Date(Date.now() + 86400000).toISOString(),\n end_time: new Date(Date.now() + 604800000).toISOString(),\n packages: [\n {\n product_id: product.product_id,\n budget: underBudget,\n pricing_option_id: pricingOption.pricing_option_id,\n },\n ],\n } as unknown as CreateMediaBuyRequest) as Promise<TaskResult>\n );\n\n if (result?.success) {\n step.passed = false;\n step.error = `Agent accepted budget ${underBudget} below min_spend ${minSpend}`;\n } else {\n step.passed = true;\n step.details = `Agent rejected budget ${underBudget} below min_spend ${minSpend}${result?.error ? `: ${result.error}` : ''}`;\n }\n steps.push(step);\n }\n\n return { steps, profile };\n}\n\n/**\n * Test: Temporal Validation\n * Tests date/time ordering and format validation\n */\nexport async function testTemporalValidation(\n agentUrl: string,\n options: TestOptions\n): Promise<{ steps: TestStepResult[]; profile?: AgentProfile }> {\n const steps: TestStepResult[] = [];\n const client = getOrCreateClient(agentUrl, options);\n\n const { profile, step: profileStep } = await getOrDiscoverProfile(client, options);\n steps.push(profileStep);\n\n if (!profileStep.passed || !profile.tools.includes('create_media_buy')) {\n return { steps, profile };\n }\n\n // Test 1: End time before start time\n const { result: endBeforeStart, step: step1 } = await runStep<TaskResult>(\n 'End time before start time',\n 'create_media_buy',\n async () =>\n client.createMediaBuyLegacy({\n idempotency_key: `temporal-test-${Date.now()}`,\n brand_manifest: { name: 'Temporal Test', url: 'https://test.example' },\n start_time: new Date(Date.now() + 604800000).toISOString(), // 7 days from now\n end_time: new Date(Date.now() + 86400000).toISOString(), // 1 day from now (before start!)\n packages: [\n {\n product_id: 'test-product',\n budget: 1000,\n pricing_option_id: 'test-pricing',\n },\n ],\n } as unknown as CreateMediaBuyRequest) as Promise<TaskResult>\n );\n\n if (!endBeforeStart) {\n // runStep caught an exception — agent rejected at transport level, which counts as rejection\n step1.passed = true;\n step1.details = `Agent rejected end_time before start_time (threw error)`;\n } else if (endBeforeStart.success) {\n step1.passed = false;\n step1.error = 'Agent accepted end_time before start_time - must validate';\n } else {\n step1.passed = true;\n step1.details = `Agent correctly rejected end_time before start_time${endBeforeStart.error ? `: ${endBeforeStart.error}` : ''}`;\n }\n steps.push(step1);\n\n // Test 2: Start time in the past\n const { result: pastStart, step: step2 } = await runStep<TaskResult>(\n 'Start time in the past',\n 'create_media_buy',\n async () =>\n client.createMediaBuyLegacy({\n idempotency_key: `past-start-${Date.now()}`,\n brand_manifest: { name: 'Past Start Test', url: 'https://test.example' },\n start_time: new Date(Date.now() - 86400000).toISOString(), // Yesterday\n end_time: new Date(Date.now() + 604800000).toISOString(), // 7 days from now\n packages: [\n {\n product_id: 'test-product',\n budget: 1000,\n pricing_option_id: 'test-pricing',\n },\n ],\n } as unknown as CreateMediaBuyRequest) as Promise<TaskResult>\n );\n\n if (!pastStart) {\n // runStep caught an exception — agent rejected at transport level\n step2.passed = true;\n step2.details = 'Agent rejected start_time in the past (threw error)';\n } else if (pastStart.success) {\n step2.passed = true;\n step2.details = 'Agent accepts start_time in past (may auto-adjust)';\n } else {\n step2.passed = true;\n step2.details = `Agent rejected start_time in the past${pastStart.error ? `: ${pastStart.error}` : ''}`;\n }\n steps.push(step2);\n\n return { steps, profile };\n}\n\n/**\n * Test: Behavior Analysis\n * Analyzes agent behavioral characteristics\n */\nexport async function testBehaviorAnalysis(\n agentUrl: string,\n options: TestOptions\n): Promise<{ steps: TestStepResult[]; profile?: AgentProfile }> {\n const steps: TestStepResult[] = [];\n const client = getOrCreateClient(agentUrl, options);\n\n const { profile, step: profileStep } = await getOrDiscoverProfile(client, options);\n steps.push(profileStep);\n\n if (!profileStep.passed) {\n return { steps, profile };\n }\n\n // Test 1: Does get_products require brand?\n if (profile.tools.includes('get_products')) {\n const { result: withoutBrand, step: step1 } = await runStep<TaskResult>(\n 'get_products without brand',\n 'get_products',\n async () =>\n client.getProducts({\n buying_mode: 'brief',\n brief: 'Show me all available products',\n } as unknown as CanonicalGetProductsRequest) as Promise<TaskResult>\n );\n\n const withoutBrandProducts = (withoutBrand?.data as GetProductsResponse | undefined)?.products;\n if (withoutBrand?.success && withoutBrandProducts?.length) {\n step1.details = `Returns ${withoutBrandProducts.length} products without brand`;\n } else if (withoutBrand && !withoutBrand.success) {\n step1.details = 'Requires brand for product discovery';\n }\n steps.push(step1);\n\n // Test 2: Are results filtered by brief?\n const { result: specificBrief, step: step2 } = await runStep<TaskResult>(\n 'get_products with specific brief',\n 'get_products',\n async () =>\n client.getProducts({\n buying_mode: 'brief',\n brief: 'Looking specifically for podcast audio advertising only',\n brand: resolveBrand(options),\n } as unknown as CanonicalGetProductsRequest) as Promise<TaskResult>\n );\n\n const { result: broadBrief } = await runStep<TaskResult>(\n 'get_products with broad brief',\n 'get_products',\n async () =>\n client.getProducts({\n buying_mode: 'brief',\n brief: 'Show all products across all channels and formats',\n brand: resolveBrand(options),\n } as unknown as CanonicalGetProductsRequest) as Promise<TaskResult>\n );\n\n const specificProducts = (specificBrief?.data as GetProductsResponse | undefined)?.products;\n const broadProducts = (broadBrief?.data as GetProductsResponse | undefined)?.products;\n const specificCount = specificProducts?.length || 0;\n const broadCount = broadProducts?.length || 0;\n\n if (specificCount < broadCount) {\n step2.passed = true;\n step2.details = `Brief filtering: specific=${specificCount}, broad=${broadCount} (filtered)`;\n } else if (specificCount === broadCount && broadCount > 0) {\n step2.passed = true;\n step2.details = `No brief filtering: specific=${specificCount}, broad=${broadCount} (same)`;\n } else {\n step2.details = `Brief filtering unclear: specific=${specificCount}, broad=${broadCount}`;\n }\n steps.push(step2);\n }\n\n return { steps, profile };\n}\n\n/**\n * Test: Response Consistency\n * Checks for schema errors, pagination bugs, data mismatches\n */\nexport async function testResponseConsistency(\n agentUrl: string,\n options: TestOptions\n): Promise<{ steps: TestStepResult[]; profile?: AgentProfile }> {\n const steps: TestStepResult[] = [];\n const client = getOrCreateClient(agentUrl, options);\n\n const { profile, step: profileStep } = await getOrDiscoverProfile(client, options);\n steps.push(profileStep);\n\n if (!profileStep.passed) {\n return { steps, profile };\n }\n\n // Test list_authorized_properties consistency\n if (profile.tools.includes('list_authorized_properties')) {\n const { result, step } = await runStep<TaskResult>(\n 'Check list_authorized_properties consistency',\n 'list_authorized_properties',\n async () => client.executeCustomTask('list_authorized_properties', {}) as Promise<TaskResult>\n );\n\n if (result?.success && result?.data) {\n const data = result.data as unknown as Record<string, unknown>;\n const publisherDomains = (data.publisher_domains || []) as unknown[];\n const issues: string[] = [];\n\n // Check for undefined elements\n for (let i = 0; i < publisherDomains.length; i++) {\n if (publisherDomains[i] === undefined || publisherDomains[i] === null) {\n issues.push(`publisher_domains[${i}] is ${String(publisherDomains[i])}`);\n }\n }\n\n if (issues.length > 0) {\n step.passed = false;\n step.error = `Schema validation errors: ${issues.slice(0, 3).join(', ')}`;\n step.response_preview = JSON.stringify(\n {\n issues: issues.slice(0, 10),\n publisher_domains_count: publisherDomains.length,\n },\n null,\n 2\n );\n } else {\n step.details = `Publisher domains consistent: ${publisherDomains.length} domain(s)`;\n }\n } else if (result && !result.success) {\n step.passed = false;\n step.error = result.error || 'list_authorized_properties failed';\n }\n steps.push(step);\n }\n\n // Test list_creatives pagination consistency\n if (profile.tools.includes('list_creatives')) {\n const { result, step } = await runStep<TaskResult>(\n 'Check list_creatives pagination consistency',\n 'list_creatives',\n async () => client.listCreatives({}) as Promise<TaskResult>\n );\n\n if (result?.success && result?.data) {\n const data = result.data as ListCreativesResponse;\n const creatives = data.creatives || [];\n const querySummary = data.query_summary;\n const totalMatching = querySummary?.total_matching;\n const returned = querySummary?.returned ?? creatives.length;\n\n if (totalMatching !== undefined && totalMatching > 0 && returned === 0) {\n step.passed = false;\n step.error = `Pagination bug: total_matching=${totalMatching} but returned=${returned}`;\n } else if (returned !== creatives.length) {\n step.passed = false;\n step.error = `Mismatch: returned=${returned} but creatives.length=${creatives.length}`;\n } else {\n step.details = `Pagination consistent: ${creatives.length} creatives`;\n }\n }\n steps.push(step);\n }\n\n return { steps, profile };\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"governance.d.ts","sourceRoot":"","sources":["../../../../src/lib/testing/scenarios/governance.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,EAAc,MAAM,UAAU,CAAC;AA6CtF;;;;;GAKG;AACH,wBAAsB,2BAA2B,CAC/C,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC;IAAE,KAAK,EAAE,cAAc,EAAE,CAAC;IAAC,OAAO,CAAC,EAAE,YAAY,CAAA;CAAE,CAAC,CAyP9D;AAED;;;;;GAKG;AACH,wBAAsB,8BAA8B,CAClD,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC;IAAE,KAAK,EAAE,cAAc,EAAE,CAAC;IAAC,OAAO,CAAC,EAAE,YAAY,CAAA;CAAE,CAAC,CAsO9D;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,uBAAuB,CAC3C,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC;IAAE,KAAK,EAAE,cAAc,EAAE,CAAC;IAAC,OAAO,CAAC,EAAE,YAAY,CAAA;CAAE,CAAC,CAwM9D;AAUD;;;;;;;;GAQG;AACH,wBAAsB,sBAAsB,CAC1C,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC;IAAE,KAAK,EAAE,cAAc,EAAE,CAAC;IAAC,OAAO,CAAC,EAAE,YAAY,CAAA;CAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"governance.d.ts","sourceRoot":"","sources":["../../../../src/lib/testing/scenarios/governance.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,EAAc,MAAM,UAAU,CAAC;AA6CtF;;;;;GAKG;AACH,wBAAsB,2BAA2B,CAC/C,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC;IAAE,KAAK,EAAE,cAAc,EAAE,CAAC;IAAC,OAAO,CAAC,EAAE,YAAY,CAAA;CAAE,CAAC,CAyP9D;AAED;;;;;GAKG;AACH,wBAAsB,8BAA8B,CAClD,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC;IAAE,KAAK,EAAE,cAAc,EAAE,CAAC;IAAC,OAAO,CAAC,EAAE,YAAY,CAAA;CAAE,CAAC,CAsO9D;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,uBAAuB,CAC3C,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC;IAAE,KAAK,EAAE,cAAc,EAAE,CAAC;IAAC,OAAO,CAAC,EAAE,YAAY,CAAA;CAAE,CAAC,CAwM9D;AAUD;;;;;;;;GAQG;AACH,wBAAsB,sBAAsB,CAC1C,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC;IAAE,KAAK,EAAE,cAAc,EAAE,CAAC;IAAC,OAAO,CAAC,EAAE,YAAY,CAAA;CAAE,CAAC,CA4O9D;AAED;;;;;;GAMG;AACH,wBAAsB,4BAA4B,CAChD,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC;IAAE,KAAK,EAAE,cAAc,EAAE,CAAC;IAAC,OAAO,CAAC,EAAE,YAAY,CAAA;CAAE,CAAC,CA+L9D;AAED;;;;;GAKG;AACH,wBAAsB,gCAAgC,CACpD,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC;IAAE,KAAK,EAAE,cAAc,EAAE,CAAC;IAAC,OAAO,CAAC,EAAE,YAAY,CAAA;CAAE,CAAC,CAkL9D;AAED;;;;;GAKG;AACH,wBAAsB,8BAA8B,CAClD,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC;IAAE,KAAK,EAAE,cAAc,EAAE,CAAC;IAAC,OAAO,CAAC,EAAE,YAAY,CAAA;CAAE,CAAC,CAqL9D;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,2BAA2B,CAC/C,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC;IAAE,KAAK,EAAE,cAAc,EAAE,CAAC;IAAC,OAAO,CAAC,EAAE,YAAY,CAAA;CAAE,CAAC,CA0T9D;AAuDD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAE3D;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAEnE"}
|
|
@@ -294,7 +294,7 @@ async function testGovernanceContentStandards(agentUrl, options) {
|
|
|
294
294
|
const { result, step } = await (0, import_client.runStep)(
|
|
295
295
|
"List content standards",
|
|
296
296
|
"list_content_standards",
|
|
297
|
-
async () => client.
|
|
297
|
+
async () => client.listContentStandardsLegacy({
|
|
298
298
|
context: "E2E testing - list available brand safety configurations",
|
|
299
299
|
max_results: 10
|
|
300
300
|
})
|
|
@@ -335,7 +335,7 @@ async function testGovernanceContentStandards(agentUrl, options) {
|
|
|
335
335
|
const { result, step } = await (0, import_client.runStep)(
|
|
336
336
|
"Get content standards",
|
|
337
337
|
"get_content_standards",
|
|
338
|
-
async () => client.
|
|
338
|
+
async () => client.getContentStandardsLegacy({
|
|
339
339
|
standards_id: standardsIdToTest
|
|
340
340
|
})
|
|
341
341
|
);
|
|
@@ -362,7 +362,7 @@ async function testGovernanceContentStandards(agentUrl, options) {
|
|
|
362
362
|
const { result, step } = await (0, import_client.runStep)(
|
|
363
363
|
"Calibrate content",
|
|
364
364
|
"calibrate_content",
|
|
365
|
-
async () => client.
|
|
365
|
+
async () => client.calibrateContentLegacy({
|
|
366
366
|
context: "E2E testing - evaluate sample content for brand safety",
|
|
367
367
|
standards_id: standardsIdToTest,
|
|
368
368
|
artifacts: [
|
|
@@ -411,7 +411,7 @@ async function testGovernanceContentStandards(agentUrl, options) {
|
|
|
411
411
|
const { result, step } = await (0, import_client.runStep)(
|
|
412
412
|
"Validate content delivery",
|
|
413
413
|
"validate_content_delivery",
|
|
414
|
-
async () => client.
|
|
414
|
+
async () => client.validateContentDeliveryLegacy({
|
|
415
415
|
context: "E2E testing - validate delivery records against content standards",
|
|
416
416
|
standards_id: standardsIdToTest,
|
|
417
417
|
records: [
|
|
@@ -456,7 +456,7 @@ async function testGovernanceContentStandards(agentUrl, options) {
|
|
|
456
456
|
const { result: errorResult, step: errorStep } = await (0, import_client.runStep)(
|
|
457
457
|
"Get invalid content standards (error expected)",
|
|
458
458
|
"get_content_standards",
|
|
459
|
-
async () => client.
|
|
459
|
+
async () => client.getContentStandardsLegacy({
|
|
460
460
|
standards_id: "INVALID_STANDARDS_ID_DOES_NOT_EXIST_12345"
|
|
461
461
|
})
|
|
462
462
|
);
|
|
@@ -695,7 +695,7 @@ async function testCampaignGovernance(agentUrl, options) {
|
|
|
695
695
|
},
|
|
696
696
|
countries: ["US"],
|
|
697
697
|
channels: {
|
|
698
|
-
allowed: ["display", "
|
|
698
|
+
allowed: ["display", "olv"]
|
|
699
699
|
},
|
|
700
700
|
delegations: [
|
|
701
701
|
{
|
|
@@ -742,7 +742,7 @@ async function testCampaignGovernance(agentUrl, options) {
|
|
|
742
742
|
"check_governance",
|
|
743
743
|
async () => client.executeTask("check_governance", {
|
|
744
744
|
plan_id: testPlanId,
|
|
745
|
-
|
|
745
|
+
phase: "purchase",
|
|
746
746
|
caller: callerUrl,
|
|
747
747
|
tool: "create_media_buy",
|
|
748
748
|
payload: {
|
|
@@ -804,7 +804,7 @@ async function testCampaignGovernance(agentUrl, options) {
|
|
|
804
804
|
outcome: "completed",
|
|
805
805
|
governance_context: governanceContext || "",
|
|
806
806
|
seller_response: {
|
|
807
|
-
|
|
807
|
+
seller_reference: testMediaBuyId,
|
|
808
808
|
packages: [
|
|
809
809
|
{
|
|
810
810
|
budget: 1e3
|
|
@@ -832,7 +832,6 @@ async function testCampaignGovernance(agentUrl, options) {
|
|
|
832
832
|
"get_plan_audit_logs",
|
|
833
833
|
async () => client.executeTask("get_plan_audit_logs", {
|
|
834
834
|
plan_ids: [testPlanId],
|
|
835
|
-
media_buy_id: testMediaBuyId,
|
|
836
835
|
include_entries: true
|
|
837
836
|
})
|
|
838
837
|
);
|
|
@@ -913,7 +912,7 @@ async function testCampaignGovernanceDenied(agentUrl, options) {
|
|
|
913
912
|
"check_governance",
|
|
914
913
|
async () => client.executeTask("check_governance", {
|
|
915
914
|
plan_id: testPlanId,
|
|
916
|
-
|
|
915
|
+
phase: "purchase",
|
|
917
916
|
caller: callerUrl,
|
|
918
917
|
tool: "create_media_buy",
|
|
919
918
|
payload: {
|
|
@@ -966,7 +965,7 @@ async function testCampaignGovernanceDenied(agentUrl, options) {
|
|
|
966
965
|
"check_governance",
|
|
967
966
|
async () => client.executeTask("check_governance", {
|
|
968
967
|
plan_id: testPlanId,
|
|
969
|
-
|
|
968
|
+
phase: "purchase",
|
|
970
969
|
caller: callerUrl,
|
|
971
970
|
tool: "create_media_buy",
|
|
972
971
|
payload: {
|
|
@@ -1067,10 +1066,10 @@ async function testCampaignGovernanceConditions(agentUrl, options) {
|
|
|
1067
1066
|
},
|
|
1068
1067
|
countries: ["US"],
|
|
1069
1068
|
channels: {
|
|
1070
|
-
allowed: ["display", "
|
|
1069
|
+
allowed: ["display", "olv"],
|
|
1071
1070
|
mix_targets: {
|
|
1072
1071
|
display: { min_pct: 30, max_pct: 70 },
|
|
1073
|
-
|
|
1072
|
+
olv: { min_pct: 30, max_pct: 70 }
|
|
1074
1073
|
}
|
|
1075
1074
|
}
|
|
1076
1075
|
}
|
|
@@ -1086,7 +1085,7 @@ async function testCampaignGovernanceConditions(agentUrl, options) {
|
|
|
1086
1085
|
"check_governance",
|
|
1087
1086
|
async () => client.executeTask("check_governance", {
|
|
1088
1087
|
plan_id: testPlanId,
|
|
1089
|
-
|
|
1088
|
+
phase: "purchase",
|
|
1090
1089
|
caller: callerUrl,
|
|
1091
1090
|
tool: "create_media_buy",
|
|
1092
1091
|
payload: {
|
|
@@ -1143,7 +1142,7 @@ async function testCampaignGovernanceConditions(agentUrl, options) {
|
|
|
1143
1142
|
"check_governance",
|
|
1144
1143
|
async () => client.executeTask("check_governance", {
|
|
1145
1144
|
plan_id: testPlanId,
|
|
1146
|
-
|
|
1145
|
+
phase: "purchase",
|
|
1147
1146
|
caller: callerUrl,
|
|
1148
1147
|
tool: "create_media_buy",
|
|
1149
1148
|
payload: adjustedPayload,
|
|
@@ -1196,7 +1195,6 @@ async function testCampaignGovernanceDelivery(agentUrl, options) {
|
|
|
1196
1195
|
}
|
|
1197
1196
|
profile.supports_governance = true;
|
|
1198
1197
|
const testPlanId = `test-delivery-plan-${Date.now()}`;
|
|
1199
|
-
const testMediaBuyId = `test-mb-${Date.now()}`;
|
|
1200
1198
|
const callerUrl = "https://test-seller.example";
|
|
1201
1199
|
const flightStart = new Date(Date.now() - 7 * 24 * 60 * 60 * 1e3);
|
|
1202
1200
|
const flightEnd = new Date(Date.now() + 23 * 24 * 60 * 60 * 1e3);
|
|
@@ -1236,9 +1234,7 @@ async function testCampaignGovernanceDelivery(agentUrl, options) {
|
|
|
1236
1234
|
"check_governance",
|
|
1237
1235
|
async () => client.executeTask("check_governance", {
|
|
1238
1236
|
plan_id: testPlanId,
|
|
1239
|
-
binding: "committed",
|
|
1240
1237
|
caller: callerUrl,
|
|
1241
|
-
media_buy_id: testMediaBuyId,
|
|
1242
1238
|
phase: "delivery",
|
|
1243
1239
|
planned_delivery: {
|
|
1244
1240
|
total_budget: 3e3,
|
|
@@ -1294,9 +1290,7 @@ async function testCampaignGovernanceDelivery(agentUrl, options) {
|
|
|
1294
1290
|
"check_governance",
|
|
1295
1291
|
async () => client.executeTask("check_governance", {
|
|
1296
1292
|
plan_id: testPlanId,
|
|
1297
|
-
binding: "committed",
|
|
1298
1293
|
caller: callerUrl,
|
|
1299
|
-
media_buy_id: testMediaBuyId,
|
|
1300
1294
|
phase: "delivery",
|
|
1301
1295
|
governance_context: deliveryGovernanceContext,
|
|
1302
1296
|
planned_delivery: {
|
|
@@ -1430,7 +1424,7 @@ async function testSellerGovernanceContext(agentUrl, options) {
|
|
|
1430
1424
|
const { result: registerResult, step: registerStep } = await (0, import_client.runStep)(
|
|
1431
1425
|
"Register governance agent with seller",
|
|
1432
1426
|
"register_governance",
|
|
1433
|
-
async () => client.
|
|
1427
|
+
async () => client.executeCustomTask("register_governance", {
|
|
1434
1428
|
accounts: [
|
|
1435
1429
|
{
|
|
1436
1430
|
account,
|
|
@@ -1497,7 +1491,7 @@ async function testSellerGovernanceContext(agentUrl, options) {
|
|
|
1497
1491
|
const { result: createResult, step: createStep } = await (0, import_client.runStep)(
|
|
1498
1492
|
"Create media buy with governance_context",
|
|
1499
1493
|
"create_media_buy",
|
|
1500
|
-
async () => client.
|
|
1494
|
+
async () => client.executeTaskLegacy("create_media_buy", {
|
|
1501
1495
|
account,
|
|
1502
1496
|
brand: options.brand || { domain: "test.example" },
|
|
1503
1497
|
start_time: flightStart.toISOString(),
|