@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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/core/ADCPMultiAgentClient.ts"],"sourcesContent":["// Multi-agent orchestrator providing simple, intuitive API\n\nimport type { AgentConfig } from '../types';\nimport { AgentClient, type V2AugmentedGetProductsResponse } from './AgentClient';\nimport type { SingleAgentClientConfig } from './SingleAgentClient';\nimport { ADCP_VERSION } from '../version';\nimport { resolveAdcpVersion } from '../utils/adcp-version-config';\nimport { ConfigurationManager } from './ConfigurationManager';\nimport { CreativeAgentClient, STANDARD_CREATIVE_AGENTS } from './CreativeAgentClient';\nimport type { CreativeFormat } from './CreativeAgentClient';\nimport type { InputHandler, TaskOptions, TaskResult, TaskInfo } from './ConversationTypes';\nimport type { WebhookHeaderValue } from '../webhooks';\nimport type {\n GetProductsRequest,\n GetProductsResponse,\n ListCreativeFormatsRequest,\n ListCreativeFormatsResponse,\n CreateMediaBuyRequest,\n CreateMediaBuyResponse,\n UpdateMediaBuyRequest,\n UpdateMediaBuyResponse,\n SyncCreativesRequest,\n SyncCreativesResponse,\n ListCreativesRequest,\n ListCreativesResponse,\n GetMediaBuyDeliveryRequest,\n GetMediaBuyDeliveryResponse,\n ProvidePerformanceFeedbackRequest,\n ProvidePerformanceFeedbackResponse,\n GetSignalsRequest,\n GetSignalsResponse,\n ActivateSignalRequest,\n ActivateSignalResponse,\n} from '../types/tools.generated';\nimport type { MutatingRequestInput } from '../utils/idempotency';\n\n/**\n * Collection of agent clients for parallel operations across multiple AdCP agents.\n *\n * Provides methods to execute AdCP operations (get_products, create_media_buy, etc.)\n * across multiple agents simultaneously using Promise.all().\n *\n * @example\n * ```typescript\n * const collection = new AgentCollection([\n * { id: 'agent1', agent_uri: 'https://agent1.com', protocol: 'a2a' },\n * { id: 'agent2', agent_uri: 'https://agent2.com/mcp/', protocol: 'mcp' }\n * ]);\n *\n * // Execute getProducts across all agents\n * const results = await collection.getProducts({ brief: 'Coffee brands' });\n * results.forEach((result, i) => {\n * console.log(`Agent ${i}: ${result.status}`);\n * });\n * ```\n *\n * @public\n */\nexport class AgentCollection {\n private clients: Map<string, AgentClient> = new Map();\n\n constructor(\n private agents: AgentConfig[],\n private config: SingleAgentClientConfig = {}\n ) {\n for (const agent of agents) {\n this.clients.set(agent.id, new AgentClient(agent, config));\n }\n }\n\n private async executeAllSettled<T>(\n operation: (client: AgentClient) => Promise<TaskResult<T>>\n ): Promise<TaskResult<T>[]> {\n const clients = Array.from(this.clients.values());\n const results = await Promise.allSettled(clients.map(client => operation(client)));\n\n return results.map((result, index) => {\n if (result.status === 'fulfilled') {\n return result.value;\n }\n const client = clients[index]!;\n return {\n success: false as const,\n status: 'failed' as const,\n error: result.reason instanceof Error ? result.reason.message : String(result.reason),\n metadata: {\n taskId: '',\n taskName: '',\n agent: client.getAgent(),\n responseTimeMs: 0,\n timestamp: new Date().toISOString(),\n clarificationRounds: 0,\n status: 'failed' as const,\n },\n };\n });\n }\n\n // ====== PARALLEL TASK EXECUTION ======\n\n /**\n * Execute getProducts on all agents in parallel.\n *\n * Each agent's response is auto-augmented with v2 `format_options[]`\n * by default — see `AgentClient.getProducts()`. Pass\n * `{ project: false }` to opt out across all agents in this fan-out.\n */\n async getProducts(\n params: GetProductsRequest,\n inputHandler?: InputHandler,\n options?: TaskOptions & { project?: true }\n ): Promise<TaskResult<V2AugmentedGetProductsResponse>[]>;\n async getProducts(\n params: GetProductsRequest,\n inputHandler?: InputHandler,\n options?: TaskOptions & { project: false }\n ): Promise<TaskResult<GetProductsResponse>[]>;\n async getProducts(\n params: GetProductsRequest,\n inputHandler?: InputHandler,\n options?: TaskOptions & { project?: boolean }\n ): Promise<TaskResult<GetProductsResponse | V2AugmentedGetProductsResponse>[]> {\n // Discriminate on the literal `project` flag so the per-client call\n // hits the matching overload — TS can't narrow `boolean` to the\n // overload's literal `true | undefined` / `false` shapes on its own.\n if (options?.project === false) {\n const optsOff = options as TaskOptions & { project: false };\n return this.executeAllSettled(client => client.getProducts(params, inputHandler, optsOff));\n }\n const optsOn = options as (TaskOptions & { project?: true }) | undefined;\n return this.executeAllSettled(client => client.getProducts(params, inputHandler, optsOn));\n }\n\n /**\n * Execute listCreativeFormats on all agents in parallel\n */\n async listCreativeFormats(\n params: ListCreativeFormatsRequest,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<ListCreativeFormatsResponse>[]> {\n return this.executeAllSettled(client => client.listCreativeFormats(params, inputHandler, options));\n }\n\n /**\n * Execute createMediaBuy on all agents in parallel\n * Note: This might not make sense for all use cases, but provided for completeness\n */\n async createMediaBuy(\n params: MutatingRequestInput<CreateMediaBuyRequest>,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<CreateMediaBuyResponse>[]> {\n return this.executeAllSettled(client => client.createMediaBuy(params, inputHandler, options));\n }\n\n /**\n * Execute updateMediaBuy on all agents in parallel\n */\n async updateMediaBuy(\n params: MutatingRequestInput<UpdateMediaBuyRequest>,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<UpdateMediaBuyResponse>[]> {\n return this.executeAllSettled(client => client.updateMediaBuy(params, inputHandler, options));\n }\n\n /**\n * Execute syncCreatives on all agents in parallel\n */\n async syncCreatives(\n params: MutatingRequestInput<SyncCreativesRequest>,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<SyncCreativesResponse>[]> {\n return this.executeAllSettled(client => client.syncCreatives(params, inputHandler, options));\n }\n\n /**\n * Execute listCreatives on all agents in parallel\n */\n async listCreatives(\n params: ListCreativesRequest,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<ListCreativesResponse>[]> {\n return this.executeAllSettled(client => client.listCreatives(params, inputHandler, options));\n }\n\n /**\n * Execute getMediaBuyDelivery on all agents in parallel\n */\n async getMediaBuyDelivery(\n params: GetMediaBuyDeliveryRequest,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<GetMediaBuyDeliveryResponse>[]> {\n return this.executeAllSettled(client => client.getMediaBuyDelivery(params, inputHandler, options));\n }\n\n /**\n * Execute providePerformanceFeedback on all agents in parallel\n */\n async providePerformanceFeedback(\n params: MutatingRequestInput<ProvidePerformanceFeedbackRequest>,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<ProvidePerformanceFeedbackResponse>[]> {\n return this.executeAllSettled(client => client.providePerformanceFeedback(params, inputHandler, options));\n }\n\n /**\n * Execute getSignals on all agents in parallel\n */\n async getSignals(\n params: GetSignalsRequest,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<GetSignalsResponse>[]> {\n return this.executeAllSettled(client => client.getSignals(params, inputHandler, options));\n }\n\n /**\n * Execute activateSignal on all agents in parallel\n */\n async activateSignal(\n params: MutatingRequestInput<ActivateSignalRequest>,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<ActivateSignalResponse>[]> {\n return this.executeAllSettled(client => client.activateSignal(params, inputHandler, options));\n }\n\n // ====== COLLECTION UTILITIES ======\n\n /**\n * Get individual agent client\n */\n getAgent(agentId: string): AgentClient {\n const client = this.clients.get(agentId);\n if (!client) {\n throw new Error(\n `Agent '${agentId}' not found in collection. Available: ${Array.from(this.clients.keys()).join(', ')}`\n );\n }\n return client;\n }\n\n /**\n * Get all agent clients\n */\n getAllAgents(): AgentClient[] {\n return Array.from(this.clients.values());\n }\n\n /**\n * Get agent IDs\n */\n getAgentIds(): string[] {\n return Array.from(this.clients.keys());\n }\n\n /**\n * Get agent count\n */\n get count(): number {\n return this.clients.size;\n }\n\n /**\n * Filter agents by a condition\n */\n filter(predicate: (agent: AgentClient) => boolean): AgentClient[] {\n return Array.from(this.clients.values()).filter(predicate);\n }\n\n /**\n * Map over all agents\n */\n map<T>(mapper: (agent: AgentClient) => T): T[] {\n return Array.from(this.clients.values()).map(mapper);\n }\n\n /**\n * Execute a custom function on all agents in parallel.\n * Returns PromiseSettledResult array so callers can handle partial failures.\n */\n async execute<T>(executor: (agent: AgentClient) => Promise<T>): Promise<PromiseSettledResult<T>[]> {\n const promises = Array.from(this.clients.values()).map(executor);\n return Promise.allSettled(promises);\n }\n}\n\n/**\n * Main multi-agent AdCP client providing unified access to multiple advertising protocol agents.\n *\n * This is the **primary entry point** for the @adcp/sdk library. It provides flexible\n * access patterns for working with one or multiple AdCP agents (MCP or A2A protocols).\n *\n * ## Key Features\n *\n * - **Single agent access** via `agent(id)` - for individual operations\n * - **Multi-agent access** via `agents([ids])` - for parallel execution across specific agents\n * - **Broadcast access** via `allAgents()` - for parallel execution across all configured agents\n * - **Auto-configuration** via static factory methods (`fromConfig()`, `fromEnv()`, `fromFile()`)\n * - **Full type safety** - all AdCP request/response types are strongly typed\n * - **Protocol agnostic** - works seamlessly with both MCP and A2A agents\n *\n * ## Basic Usage\n *\n * @example Single agent operation\n * ```typescript\n * const client = new ADCPMultiAgentClient([\n * { id: 'agent1', agent_uri: 'https://agent1.com', protocol: 'mcp' },\n * { id: 'agent2', agent_uri: 'https://agent2.com', protocol: 'a2a' }\n * ]);\n *\n * // Execute operation on single agent\n * const result = await client.agent('agent1').getProducts({\n * brief: 'Coffee brands for premium audience'\n * });\n *\n * if (result.status === 'completed') {\n * console.log('Products:', result.data.products);\n * }\n * ```\n *\n * @example Multi-agent parallel execution\n * ```typescript\n * // Execute across specific agents\n * const results = await client.agents(['agent1', 'agent2']).getProducts({\n * brief: 'Coffee brands'\n * });\n *\n * // Execute across all agents\n * const allResults = await client.allAgents().getProducts({\n * brief: 'Coffee brands'\n * });\n *\n * // Process results from all agents\n * allResults.forEach((result, i) => {\n * console.log(`Agent ${client.agentIds[i]}: ${result.status}`);\n * if (result.status === 'completed') {\n * console.log(` Products: ${result.data.products.length}`);\n * }\n * });\n * ```\n *\n * @example Auto-configuration from environment\n * ```typescript\n * // Load agents from environment variables or config files\n * const client = ADCPMultiAgentClient.fromConfig();\n *\n * // Or from environment only\n * const client = ADCPMultiAgentClient.fromEnv();\n *\n * // Or from specific file\n * const client = ADCPMultiAgentClient.fromFile('./my-agents.json');\n * ```\n *\n * ## Available Operations\n *\n * All standard AdCP operations are available:\n * - `getProducts()` - Discover advertising products\n * - `listCreativeFormats()` - Get supported creative formats\n * - `createMediaBuy()` - Create new media buy\n * - `updateMediaBuy()` - Update existing media buy\n * - `syncCreatives()` - Upload/sync creative assets\n * - `listCreatives()` - List creative assets\n * - `getMediaBuyDelivery()` - Get delivery performance\n * - `getSignals()` - Get audience signals\n * - `activateSignal()` - Activate audience signals\n * - `providePerformanceFeedback()` - Send performance feedback\n *\n * @see {@link AgentClient} for single-agent operations\n * @see {@link AgentCollection} for multi-agent parallel operations\n * @see {@link SingleAgentClientConfig} for configuration options\n *\n * @public\n */\nexport class ADCPMultiAgentClient {\n private agentClients: Map<string, AgentClient> = new Map();\n private readonly resolvedAdcpVersion: string;\n\n constructor(\n agentConfigs: AgentConfig[] = [],\n private config: SingleAgentClientConfig = {}\n ) {\n // Validates `config.adcpVersion` once for the orchestrator; per-agent\n // AgentClients will re-validate via SingleAgentClient (cheap pure check)\n // and surface the same ConfigurationError if the pin is invalid.\n this.resolvedAdcpVersion = resolveAdcpVersion(config.adcpVersion);\n\n for (const agentConfig of agentConfigs) {\n this.agentClients.set(agentConfig.id, new AgentClient(agentConfig, config));\n }\n }\n\n /**\n * Returns the AdCP protocol version this multi-agent client speaks. The\n * value is shared across every per-agent client created by this orchestrator\n * and originates from the constructor `config.adcpVersion`. See\n * {@link SingleAgentClientConfig.adcpVersion}.\n */\n getAdcpVersion(): string {\n return this.resolvedAdcpVersion;\n }\n\n // ====== FACTORY METHODS FOR EASY SETUP ======\n\n /**\n * Create client by auto-discovering agent configuration\n *\n * Automatically loads agents from:\n * 1. Environment variables (SALES_AGENTS_CONFIG, ADCP_AGENTS_CONFIG, etc.)\n * 2. Config files (adcp.config.json, adcp.json, .adcp.json, agents.json)\n *\n * @param config - Optional client configuration\n * @returns ADCPMultiAgentClient instance with discovered agents\n *\n * @example\n * ```typescript\n * // Simplest possible setup - auto-discovers configuration\n * const client = ADCPMultiAgentClient.fromConfig();\n *\n * // Use with options\n * const client = ADCPMultiAgentClient.fromConfig({\n * debug: true,\n * defaultTimeout: 60000\n * });\n * ```\n */\n static fromConfig(config?: SingleAgentClientConfig): ADCPMultiAgentClient {\n const agents = ConfigurationManager.loadAgents();\n\n if (agents.length === 0) {\n console.log('\\n' + ConfigurationManager.getConfigurationHelp());\n throw new Error('No ADCP agents configured. See configuration help above.');\n }\n\n // Validate configuration\n ConfigurationManager.validateAgentsConfig(agents);\n\n return new ADCPMultiAgentClient(agents, config);\n }\n\n /**\n * Create client from environment variables only\n *\n * @param config - Optional client configuration\n * @returns ADCPMultiAgentClient instance with environment-loaded agents\n *\n * @example\n * ```typescript\n * // Load agents from SALES_AGENTS_CONFIG environment variable\n * const client = ADCPMultiAgentClient.fromEnv();\n * ```\n */\n static fromEnv(config?: SingleAgentClientConfig): ADCPMultiAgentClient {\n const agents = ConfigurationManager.loadAgentsFromEnv();\n\n if (agents.length === 0) {\n const envVars = ConfigurationManager.getEnvVars();\n throw new Error(`No agents found in environment variables. ` + `Please set one of: ${envVars.join(', ')}`);\n }\n\n ConfigurationManager.validateAgentsConfig(agents);\n return new ADCPMultiAgentClient(agents, config);\n }\n\n /**\n * Create client from a specific config file\n *\n * @param configPath - Path to configuration file\n * @param config - Optional client configuration\n * @returns ADCPMultiAgentClient instance with file-loaded agents\n *\n * @example\n * ```typescript\n * // Load from specific file\n * const client = ADCPMultiAgentClient.fromFile('./my-agents.json');\n *\n * // Load from default locations\n * const client = ADCPMultiAgentClient.fromFile();\n * ```\n */\n static fromFile(configPath?: string, config?: SingleAgentClientConfig): ADCPMultiAgentClient {\n const agents = ConfigurationManager.loadAgentsFromConfig(configPath);\n\n if (agents.length === 0) {\n const searchPaths = configPath ? [configPath] : ConfigurationManager.getConfigPaths();\n throw new Error(`No agents found in config file(s). Searched: ${searchPaths.join(', ')}`);\n }\n\n ConfigurationManager.validateAgentsConfig(agents);\n return new ADCPMultiAgentClient(agents, config);\n }\n\n /**\n * Create a simple client with minimal configuration\n *\n * @param agentUrl - Single agent URL\n * @param options - Optional agent and client configuration\n * @returns ADCPMultiAgentClient instance with single agent\n *\n * @example\n * ```typescript\n * // Simplest possible setup for single agent\n * const client = ADCPMultiAgentClient.simple('https://my-agent.example.com');\n *\n * // With options\n * const client = ADCPMultiAgentClient.simple('https://my-agent.example.com', {\n * agentName: 'My Agent',\n * protocol: 'mcp',\n * authToken: 'my-token',\n * debug: true\n * });\n * ```\n */\n static simple(\n agentUrl: string,\n options: {\n agentId?: string;\n agentName?: string;\n protocol?: 'mcp' | 'a2a';\n authToken?: string;\n debug?: boolean;\n timeout?: number;\n } = {}\n ): ADCPMultiAgentClient {\n const {\n agentId = 'default-agent',\n agentName = 'Default Agent',\n protocol = 'mcp',\n authToken,\n debug = false,\n timeout,\n } = options;\n\n const agent: AgentConfig = {\n id: agentId,\n name: agentName,\n agent_uri: agentUrl,\n protocol,\n auth_token: authToken,\n };\n\n ConfigurationManager.validateAgentConfig(agent);\n\n return new ADCPMultiAgentClient([agent], {\n debug,\n workingTimeout: timeout,\n });\n }\n\n // ====== SINGLE AGENT ACCESS ======\n\n /**\n * Get a single agent client for individual operations.\n *\n * This is the primary method for executing operations on a specific agent.\n * Returns an {@link AgentClient} instance that provides all AdCP operations.\n *\n * @param agentId - The unique identifier of the agent to retrieve\n * @returns Agent client instance for the specified agent\n * @throws {Error} If agent ID is not found in configuration\n *\n * @example\n * ```typescript\n * const client = new ADCPMultiAgentClient([\n * { id: 'sales_agent', agent_uri: 'https://sales.example.com', protocol: 'a2a' }\n * ]);\n *\n * // Get specific agent and execute operation\n * const agent = client.agent('sales_agent');\n * const result = await agent.getProducts({ brief: 'Premium coffee brands' });\n * ```\n *\n * @see {@link AgentClient} for available operations\n */\n agent(agentId: string): AgentClient {\n const agent = this.agentClients.get(agentId);\n if (!agent) {\n throw new Error(`Agent '${agentId}' not found. Available agents: ${this.getAgentIds().join(', ')}`);\n }\n return agent;\n }\n\n // ====== MULTI-AGENT ACCESS ======\n\n /**\n * Get multiple specific agents for parallel operations.\n *\n * Returns an {@link AgentCollection} that executes operations across the specified\n * agents in parallel using Promise.all(). Useful when you want to query specific\n * agents simultaneously and compare results.\n *\n * @param agentIds - Array of agent IDs to include in the collection\n * @returns Agent collection for parallel operations across specified agents\n * @throws {Error} If any agent ID is not found in configuration\n *\n * @example\n * ```typescript\n * // Execute across specific agents\n * const results = await client.agents(['sales_agent_1', 'sales_agent_2']).getProducts({\n * brief: 'Premium coffee brands'\n * });\n *\n * // Process parallel results\n * results.forEach((result, i) => {\n * if (result.status === 'completed') {\n * console.log(`Agent ${i + 1}: ${result.data.products.length} products`);\n * }\n * });\n * ```\n *\n * @see {@link AgentCollection} for available parallel operations\n */\n agents(agentIds: string[]): AgentCollection {\n const agentConfigs: AgentConfig[] = [];\n\n for (const agentId of agentIds) {\n const agent = this.agentClients.get(agentId);\n if (!agent) {\n throw new Error(`Agent '${agentId}' not found. Available agents: ${this.getAgentIds().join(', ')}`);\n }\n agentConfigs.push(agent.getAgent());\n }\n\n return new AgentCollection(agentConfigs, this.config);\n }\n\n /**\n * Get all configured agents for broadcast operations.\n *\n * Returns an {@link AgentCollection} containing all agents in the client configuration.\n * Executes operations across all agents in parallel, useful for market research,\n * price comparison, or discovering capabilities across your entire agent network.\n *\n * @returns Agent collection for parallel operations across all configured agents\n *\n * @example\n * ```typescript\n * const client = new ADCPMultiAgentClient([\n * { id: 'agent1', agent_uri: 'https://agent1.com', protocol: 'a2a' },\n * { id: 'agent2', agent_uri: 'https://agent2.com', protocol: 'mcp' },\n * { id: 'agent3', agent_uri: 'https://agent3.com', protocol: 'a2a' }\n * ]);\n *\n * // Query all agents simultaneously\n * const allResults = await client.allAgents().getProducts({\n * brief: 'Premium coffee brands'\n * });\n *\n * // Find best options across all agents\n * const successfulResults = allResults.filter(r => r.status === 'completed');\n * console.log(`Got products from ${successfulResults.length} agents`);\n * ```\n *\n * @see {@link AgentCollection} for available parallel operations\n */\n allAgents(): AgentCollection {\n if (this.agentClients.size === 0) {\n throw new Error('No agents configured. Add agents to the client first.');\n }\n\n const agentConfigs = Array.from(this.agentClients.values()).map(agent => agent.getAgent());\n return new AgentCollection(agentConfigs, this.config);\n }\n\n // ====== AGENT MANAGEMENT ======\n\n /**\n * Add an agent to the client\n *\n * @param agentConfig - Agent configuration to add\n * @throws Error if agent ID already exists\n */\n addAgent(agentConfig: AgentConfig): void {\n if (this.agentClients.has(agentConfig.id)) {\n throw new Error(`Agent with ID '${agentConfig.id}' already exists`);\n }\n\n this.agentClients.set(agentConfig.id, new AgentClient(agentConfig, this.config));\n }\n\n /**\n * Remove an agent from the client\n *\n * @param agentId - ID of agent to remove\n * @returns True if agent was removed, false if not found\n */\n removeAgent(agentId: string): boolean {\n return this.agentClients.delete(agentId);\n }\n\n /**\n * Get individual agent client by ID\n *\n * @param agentId - ID of agent to retrieve\n * @returns AgentClient instance\n * @throws Error if agent not found\n */\n getAgent(agentId: string): AgentClient {\n const agent = this.agentClients.get(agentId);\n if (!agent) {\n throw new Error(`Agent '${agentId}' not found. Available agents: ${this.getAgentIds().join(', ')}`);\n }\n return agent;\n }\n\n /**\n * Check if an agent exists\n */\n hasAgent(agentId: string): boolean {\n return this.agentClients.has(agentId);\n }\n\n /**\n * Get all configured agent IDs\n */\n getAgentIds(): string[] {\n return Array.from(this.agentClients.keys());\n }\n\n /**\n * Get all agent configurations\n */\n getAgentConfigs(): AgentConfig[] {\n return Array.from(this.agentClients.values()).map(agent => agent.getAgent());\n }\n\n /**\n * Get count of configured agents\n */\n get agentCount(): number {\n return this.agentClients.size;\n }\n\n // ====== UTILITY METHODS ======\n\n /**\n * Filter agents by protocol\n */\n getAgentsByProtocol(protocol: 'mcp' | 'a2a'): AgentCollection {\n const filteredConfigs = Array.from(this.agentClients.values())\n .filter(agent => agent.getProtocol() === protocol)\n .map(agent => agent.getAgent());\n\n return new AgentCollection(filteredConfigs, this.config);\n }\n\n /**\n * Find agents that support a specific task\n * This is a placeholder - in a full implementation, you'd query agent capabilities\n */\n findAgentsForTask(taskName: string): AgentCollection {\n // For now, assume all agents support all tasks\n return this.allAgents();\n }\n\n /**\n * Get all active tasks across all agents\n */\n getAllActiveTasks() {\n const allTasks = [];\n for (const agent of this.agentClients.values()) {\n allTasks.push(...agent.getActiveTasks());\n }\n return allTasks;\n }\n\n // ====== TASK MANAGEMENT & NOTIFICATIONS ======\n\n /**\n * Get all tasks from all agents with detailed information\n *\n * @returns Promise resolving to array of all tasks across agents\n *\n * @example\n * ```typescript\n * const allTasks = await client.listAllTasks();\n * console.log(`Total active tasks: ${allTasks.length}`);\n * ```\n */\n async listAllTasks(): Promise<TaskInfo[]> {\n const taskPromises = Array.from(this.agentClients.values()).map(agent => agent.listTasks());\n const results = await Promise.allSettled(taskPromises);\n return results\n .filter((r): r is PromiseFulfilledResult<TaskInfo[]> => r.status === 'fulfilled')\n .flatMap(r => r.value);\n }\n\n /**\n * Get tasks for specific agents\n *\n * @param agentIds - Array of agent IDs to get tasks for\n * @returns Promise resolving to array of tasks from specified agents\n */\n async listTasksForAgents(agentIds: string[]): Promise<TaskInfo[]> {\n const taskPromises = agentIds.map(agentId => {\n const agent = this.agentClients.get(agentId);\n return agent ? agent.listTasks() : Promise.resolve([]);\n });\n const results = await Promise.allSettled(taskPromises);\n return results\n .filter((r): r is PromiseFulfilledResult<TaskInfo[]> => r.status === 'fulfilled')\n .flatMap(r => r.value);\n }\n\n /**\n * Get task information by ID from any agent\n *\n * @param taskId - ID of the task to find\n * @returns Promise resolving to task information or null if not found\n */\n async getTaskInfo(taskId: string): Promise<TaskInfo | null> {\n for (const agent of this.agentClients.values()) {\n const taskInfo = await agent.getTaskInfo(taskId);\n if (taskInfo) {\n return taskInfo;\n }\n }\n return null;\n }\n\n /**\n * Subscribe to task events from all agents\n *\n * @param callbacks - Event callbacks for different task events\n * @returns Unsubscribe function that removes all subscriptions\n *\n * @example\n * ```typescript\n * const unsubscribe = client.onTaskEvents({\n * onTaskCompleted: (task) => {\n * console.log(`Task ${task.taskName} completed!`);\n * },\n * onTaskFailed: (task, error) => {\n * console.error(`Task ${task.taskName} failed:`, error);\n * }\n * });\n * ```\n */\n onTaskEvents(callbacks: {\n onTaskCreated?: (task: TaskInfo) => void;\n onTaskUpdated?: (task: TaskInfo) => void;\n onTaskCompleted?: (task: TaskInfo) => void;\n onTaskFailed?: (task: TaskInfo, error: string) => void;\n }): () => void {\n const unsubscribers: (() => void)[] = [];\n\n for (const agent of this.agentClients.values()) {\n const unsubscribe = agent.onTaskEvents(callbacks);\n unsubscribers.push(unsubscribe);\n }\n\n return () => {\n unsubscribers.forEach(unsub => unsub());\n };\n }\n\n /**\n * Subscribe to task updates from all agents\n *\n * @param callback - Function to call when any task status changes\n * @returns Unsubscribe function\n */\n onAnyTaskUpdate(callback: (task: TaskInfo) => void): () => void {\n const unsubscribers: (() => void)[] = [];\n\n for (const agent of this.agentClients.values()) {\n const unsubscribe = agent.onTaskUpdate(callback);\n unsubscribers.push(unsubscribe);\n }\n\n return () => {\n unsubscribers.forEach(unsub => unsub());\n };\n }\n\n /**\n * Register webhooks for all agents\n *\n * @param webhookUrl - Base webhook URL (will append agent ID)\n * @param taskTypes - Optional array of task types to watch\n */\n async registerWebhooksForAll(webhookUrl: string, taskTypes?: string[]): Promise<void> {\n const promises = Array.from(this.agentClients.values()).map(agent =>\n agent.registerWebhook(`${webhookUrl}?agentId=${agent.getAgentId()}`, taskTypes)\n );\n await Promise.allSettled(promises);\n }\n\n /**\n * Unregister webhooks for all agents\n */\n async unregisterAllWebhooks(): Promise<void> {\n const promises = Array.from(this.agentClients.values()).map(agent => agent.unregisterWebhook());\n await Promise.allSettled(promises);\n }\n\n /**\n * Get count of active tasks by status\n *\n * @returns Promise resolving to object with counts by status\n *\n * @example\n * ```typescript\n * const counts = await client.getTaskCountsByStatus();\n * console.log(`Working: ${counts.working}, Completed: ${counts.completed}`);\n * ```\n */\n async getTaskCountsByStatus(): Promise<Record<string, number>> {\n const tasks = await this.listAllTasks();\n const counts: Record<string, number> = {};\n\n for (const task of tasks) {\n counts[task.status] = (counts[task.status] || 0) + 1;\n }\n\n return counts;\n }\n\n // ====== WEBHOOK METHODS ======\n\n /**\n * Generate webhook URL for a specific agent, task type, and operation\n *\n * @param agentId - ID of the agent\n * @param taskType - Type of task (e.g., 'get_products', 'media_buy_delivery')\n * @param operationId - Operation ID for this request\n * @returns Full webhook URL with macros replaced\n *\n * @example\n * ```typescript\n * const webhookUrl = client.getWebhookUrl('agent1', 'sync_creatives', 'op_123');\n * // Returns: https://myapp.com/webhook/sync_creatives/agent1/op_123\n * ```\n */\n getWebhookUrl(agentId: string, taskType: string, operationId: string): string {\n const agent = this.getAgent(agentId);\n return agent.getWebhookUrl(taskType, operationId);\n }\n\n /**\n * Handle webhook from any agent (async task completion or notifications)\n *\n * Automatically routes webhook to the correct agent based on agent_id in payload.\n *\n * @param payload - Webhook payload from agent (must contain agent_id or operation_id)\n * @param taskType - Task type (e.g create_media_buy) from url param or url part of the webhook delivery\n * @param operationId - Operation id (e.g used for client app to track the operation) from the param or url part of the webhook delivery\n * @param signature - Optional signature for verification (X-ADCP-Signature)\n * @param timestamp - Optional timestamp for verification (X-ADCP-Timestamp)\n * @returns Whether webhook was handled successfully\n *\n * @example\n * ```typescript\n * import { verifyWebhookRequest } from '@adcp/sdk/webhooks';\n *\n * app.post('/webhook', async (req, res) => {\n * try {\n * const check = verifyWebhookRequest({\n * rawBody: req.rawBody,\n * headers: req.headers,\n * globalSecret: process.env.WEBHOOK_SECRET,\n * });\n * if (!check.ok) return res.status(401).json({ error: check.reason });\n *\n * const handled = await client.handleWebhook(\n * req.body,\n * req.params.taskType,\n * req.params.operationId,\n * check.signature,\n * check.timestamp,\n * req.rawBody\n * );\n * res.status(200).json({ received: handled });\n * } catch (error) {\n * res.status(401).json({ error: error.message });\n * }\n * });\n * ```\n */\n async handleWebhook(\n payload: any,\n taskType: string,\n operationId: string,\n signature?: WebhookHeaderValue,\n timestamp?: WebhookHeaderValue,\n rawBody?: string | Buffer | Uint8Array\n ): Promise<boolean> {\n // Extract agent ID from payload\n // Webhook payloads include agent_id or we can infer from operation_id pattern\n const agentId = payload.agent_id || this.inferAgentIdFromPayload(payload);\n\n if (!agentId) {\n throw new Error('Cannot determine agent ID from webhook payload. Payload must contain agent_id or operation_id.');\n }\n\n const agent = this.getAgent(agentId);\n return agent.handleWebhook(payload, taskType, operationId, signature, timestamp, rawBody);\n }\n\n /**\n * Infer agent ID from webhook payload when not explicitly provided\n *\n * Looks for patterns in operation_id or context_id that may contain agent information\n */\n private inferAgentIdFromPayload(payload: any): string | null {\n // Try to extract from operation_id pattern (e.g., \"delivery_report_agent1_2024-01\")\n if (payload.operation_id && typeof payload.operation_id === 'string') {\n const dateMatch = payload.operation_id.match(/_(\\d{4}-\\d{2})$/);\n if (dateMatch) {\n const prefix = payload.operation_id.slice(0, -dateMatch[0].length);\n const lastUnderscore = prefix.lastIndexOf('_');\n if (lastUnderscore >= 0) {\n const candidateId = prefix.slice(lastUnderscore + 1);\n if (candidateId && this.hasAgent(candidateId)) {\n return candidateId;\n }\n }\n }\n }\n\n // Try to extract from context_id if it contains agent reference\n if (payload.context_id && typeof payload.context_id === 'string') {\n for (const agentId of this.getAgentIds()) {\n if (payload.context_id.includes(agentId)) {\n return agentId;\n }\n }\n }\n\n return null;\n }\n\n // ====== CREATIVE AGENT OPERATIONS ======\n\n /**\n * Create a creative agent client\n *\n * @param agentUrl - URL of the creative agent\n * @param protocol - Protocol to use (defaults to 'mcp')\n * @param authToken - Optional authentication token\n * @returns CreativeAgentClient instance\n *\n * @example\n * ```typescript\n * // Use standard creative agent\n * const creativeAgent = client.createCreativeAgent(\n * 'https://creative.adcontextprotocol.org/mcp'\n * );\n *\n * // List formats\n * const formats = await creativeAgent.listFormats();\n * ```\n */\n createCreativeAgent(agentUrl: string, protocol: 'mcp' | 'a2a' = 'mcp', authToken?: string): CreativeAgentClient {\n return new CreativeAgentClient({\n agentUrl,\n protocol,\n authToken,\n ...this.config,\n });\n }\n\n /**\n * Get the standard AdCP creative agent\n *\n * @param protocol - Protocol to use (defaults to 'mcp')\n * @returns CreativeAgentClient instance for standard agent\n *\n * @example\n * ```typescript\n * const creativeAgent = client.getStandardCreativeAgent();\n * const formats = await creativeAgent.listFormats();\n * ```\n */\n getStandardCreativeAgent(protocol: 'mcp' | 'a2a' = 'mcp'): CreativeAgentClient {\n const agentUrl =\n protocol === 'mcp' ? STANDARD_CREATIVE_AGENTS.ADCP_REFERENCE : STANDARD_CREATIVE_AGENTS.ADCP_REFERENCE_A2A;\n\n return this.createCreativeAgent(agentUrl, protocol);\n }\n\n /**\n * Discover creative formats from standard creative agent\n *\n * Convenience method to quickly get formats from the standard AdCP creative agent\n *\n * @returns Promise resolving to array of creative formats\n *\n * @example\n * ```typescript\n * const formats = await client.discoverFormats();\n *\n * // Find specific format\n * const banner = formats.find(f => f.format_id.id === 'display_300x250_image');\n * ```\n */\n async discoverFormats(): Promise<CreativeFormat[]> {\n const creativeAgent = this.getStandardCreativeAgent();\n return creativeAgent.listFormats();\n }\n\n /**\n * Find creative formats by dimensions\n *\n * @param width - Width in pixels\n * @param height - Height in pixels\n * @returns Promise resolving to matching formats\n *\n * @example\n * ```typescript\n * // Find all 300x250 formats\n * const mediumRectangles = await client.findFormatsByDimensions(300, 250);\n * ```\n */\n async findFormatsByDimensions(width: number, height: number): Promise<CreativeFormat[]> {\n const creativeAgent = this.getStandardCreativeAgent();\n return creativeAgent.findByDimensions(width, height);\n }\n}\n\n/**\n * Factory function to create a multi-agent ADCP client\n *\n * @param agents - Array of agent configurations\n * @param config - Client configuration\n * @returns Configured ADCPMultiAgentClient instance\n */\nexport function createADCPMultiAgentClient(\n agents: AgentConfig[],\n config?: SingleAgentClientConfig\n): ADCPMultiAgentClient {\n return new ADCPMultiAgentClient(agents, config);\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/core/ADCPMultiAgentClient.ts"],"sourcesContent":["// Multi-agent orchestrator providing simple, intuitive API\n\nimport type { AgentConfig } from '../types';\nimport { AgentClient, type CanonicalGetProductsResponse, type CanonicalProjectionTaskOptions } from './AgentClient';\nimport type {\n CreativeDeliveryTaskOptions,\n SingleAgentClientConfig,\n SyncCreativesTaskOptions,\n} from './SingleAgentClient';\nimport { ADCP_VERSION } from '../version';\nimport { resolveAdcpVersion } from '../utils/adcp-version-config';\nimport { ConfigurationManager } from './ConfigurationManager';\nimport { CreativeAgentClient, STANDARD_CREATIVE_AGENTS } from './CreativeAgentClient';\nimport type { LegacyCreativeFormat } from './CreativeAgentClient';\nimport type { InputHandler, TaskOptions, TaskResult, TaskInfo } from './ConversationTypes';\nimport type { WebhookHeaderValue } from '../webhooks';\nimport type {\n GetProductsRequest,\n GetProductsResponse,\n ListCreativeFormatsRequest,\n ListCreativeFormatsResponse,\n CreateMediaBuyRequest,\n CreateMediaBuyResponse,\n UpdateMediaBuyRequest,\n UpdateMediaBuyResponse,\n SyncCreativesRequest,\n SyncCreativesResponse,\n ListCreativesResponse,\n GetMediaBuyDeliveryRequest,\n GetMediaBuyDeliveryResponse,\n GetCreativeDeliveryRequest,\n GetCreativeDeliveryResponse,\n ProvidePerformanceFeedbackRequest,\n ProvidePerformanceFeedbackResponse,\n GetSignalsRequest,\n GetSignalsResponse,\n ActivateSignalRequest,\n ActivateSignalResponse,\n} from '../types/tools.generated';\nimport type { MutatingRequestInput } from '../utils/idempotency';\nimport type {\n CanonicalCreateMediaBuyRequest,\n CanonicalCreativeResponse,\n CanonicalGetProductsRequest,\n CanonicalListCreativesRequest,\n CanonicalListCreativesResponse,\n CanonicalSyncCreativesRequest,\n CanonicalUpdateMediaBuyRequest,\n} from '../v2/projection/creative-delivery';\n\n/**\n * Collection of agent clients for parallel operations across multiple AdCP agents.\n *\n * Provides methods to execute AdCP operations (get_products, create_media_buy, etc.)\n * across multiple agents simultaneously using Promise.all().\n *\n * @example\n * ```typescript\n * const collection = new AgentCollection([\n * { id: 'agent1', agent_uri: 'https://agent1.com', protocol: 'a2a' },\n * { id: 'agent2', agent_uri: 'https://agent2.com/mcp/', protocol: 'mcp' }\n * ]);\n *\n * // Execute getProducts across all agents\n * const results = await collection.getProducts({ brief: 'Coffee brands' });\n * results.forEach((result, i) => {\n * console.log(`Agent ${i}: ${result.status}`);\n * });\n * ```\n *\n * @public\n */\nexport class AgentCollection {\n private clients: Map<string, AgentClient> = new Map();\n\n constructor(\n private agents: AgentConfig[],\n private config: SingleAgentClientConfig = {}\n ) {\n for (const agent of agents) {\n this.clients.set(agent.id, new AgentClient(agent, config));\n }\n }\n\n private async executeAllSettled<T>(\n operation: (client: AgentClient) => Promise<TaskResult<T>>\n ): Promise<TaskResult<T>[]> {\n const clients = Array.from(this.clients.values());\n const results = await Promise.allSettled(clients.map(client => operation(client)));\n\n return results.map((result, index) => {\n if (result.status === 'fulfilled') {\n return result.value;\n }\n const client = clients[index]!;\n return {\n success: false as const,\n status: 'failed' as const,\n error: result.reason instanceof Error ? result.reason.message : String(result.reason),\n metadata: {\n taskId: '',\n taskName: '',\n agent: client.getAgent(),\n responseTimeMs: 0,\n timestamp: new Date().toISOString(),\n clarificationRounds: 0,\n status: 'failed' as const,\n },\n };\n });\n }\n\n // ====== PARALLEL TASK EXECUTION ======\n\n /**\n * Execute getProducts on all agents in parallel.\n *\n * Each agent's response is reduced to canonical `format_options[]`\n * by default — see `AgentClient.getProducts()`.\n */\n async getProducts(\n params: CanonicalGetProductsRequest,\n inputHandler?: InputHandler,\n options?: CanonicalProjectionTaskOptions\n ): Promise<TaskResult<CanonicalGetProductsResponse>[]> {\n return this.executeAllSettled(client => client.getProducts(params, inputHandler, options));\n }\n\n /** @deprecated Explicit raw-wire fan-out for migration tooling. */\n async getProductsLegacy(\n params: GetProductsRequest,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<GetProductsResponse>[]> {\n return this.executeAllSettled(client => client.getProductsLegacy(params, inputHandler, options));\n }\n\n /** @deprecated Migration-only fan-out for legacy named-format catalogs. */\n async listCreativeFormatsLegacy(\n params: ListCreativeFormatsRequest,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<ListCreativeFormatsResponse>[]> {\n return this.executeAllSettled(client => client.listCreativeFormatsLegacy(params, inputHandler, options));\n }\n\n /**\n * Execute createMediaBuy on all agents in parallel\n * Note: This might not make sense for all use cases, but provided for completeness\n */\n async createMediaBuy(\n params: MutatingRequestInput<CanonicalCreateMediaBuyRequest>,\n inputHandler?: InputHandler,\n options?: CreativeDeliveryTaskOptions\n ): Promise<TaskResult<CanonicalCreativeResponse<CreateMediaBuyResponse>>[]> {\n return this.executeAllSettled(client => client.createMediaBuy(params, inputHandler, options));\n }\n\n /**\n * Execute updateMediaBuy on all agents in parallel\n */\n async updateMediaBuy(\n params: MutatingRequestInput<CanonicalUpdateMediaBuyRequest>,\n inputHandler?: InputHandler,\n options?: CreativeDeliveryTaskOptions\n ): Promise<TaskResult<CanonicalCreativeResponse<UpdateMediaBuyResponse>>[]> {\n return this.executeAllSettled(client => client.updateMediaBuy(params, inputHandler, options));\n }\n\n /**\n * Execute syncCreatives on all agents in parallel\n */\n async syncCreatives(\n params: MutatingRequestInput<CanonicalSyncCreativesRequest>,\n inputHandler?: InputHandler,\n options?: SyncCreativesTaskOptions\n ): Promise<TaskResult<CanonicalCreativeResponse<SyncCreativesResponse>>[]> {\n return this.executeAllSettled(client => client.syncCreatives(params, inputHandler, options));\n }\n\n /**\n * Execute listCreatives on all agents in parallel\n */\n async listCreatives(\n params: CanonicalListCreativesRequest,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<CanonicalListCreativesResponse>[]> {\n return this.executeAllSettled(client => client.listCreatives(params, inputHandler, options));\n }\n\n /**\n * Execute getMediaBuyDelivery on all agents in parallel\n */\n async getMediaBuyDelivery(\n params: GetMediaBuyDeliveryRequest,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<CanonicalCreativeResponse<GetMediaBuyDeliveryResponse>>[]> {\n return this.executeAllSettled(client => client.getMediaBuyDelivery(params, inputHandler, options));\n }\n\n /** Execute canonical creative delivery reporting across all agents. */\n async getCreativeDelivery(\n params: GetCreativeDeliveryRequest,\n inputHandler?: InputHandler,\n options?: CanonicalProjectionTaskOptions\n ): Promise<TaskResult<CanonicalCreativeResponse<GetCreativeDeliveryResponse>>[]> {\n return this.executeAllSettled(client => client.getCreativeDelivery(params, inputHandler, options));\n }\n\n /**\n * Execute providePerformanceFeedback on all agents in parallel\n */\n async providePerformanceFeedback(\n params: MutatingRequestInput<ProvidePerformanceFeedbackRequest>,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<ProvidePerformanceFeedbackResponse>[]> {\n return this.executeAllSettled(client => client.providePerformanceFeedback(params, inputHandler, options));\n }\n\n /**\n * Execute getSignals on all agents in parallel\n */\n async getSignals(\n params: GetSignalsRequest,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<GetSignalsResponse>[]> {\n return this.executeAllSettled(client => client.getSignals(params, inputHandler, options));\n }\n\n /**\n * Execute activateSignal on all agents in parallel\n */\n async activateSignal(\n params: MutatingRequestInput<ActivateSignalRequest>,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<ActivateSignalResponse>[]> {\n return this.executeAllSettled(client => client.activateSignal(params, inputHandler, options));\n }\n\n // ====== COLLECTION UTILITIES ======\n\n /**\n * Get individual agent client\n */\n getAgent(agentId: string): AgentClient {\n const client = this.clients.get(agentId);\n if (!client) {\n throw new Error(\n `Agent '${agentId}' not found in collection. Available: ${Array.from(this.clients.keys()).join(', ')}`\n );\n }\n return client;\n }\n\n /**\n * Get all agent clients\n */\n getAllAgents(): AgentClient[] {\n return Array.from(this.clients.values());\n }\n\n /**\n * Get agent IDs\n */\n getAgentIds(): string[] {\n return Array.from(this.clients.keys());\n }\n\n /**\n * Get agent count\n */\n get count(): number {\n return this.clients.size;\n }\n\n /**\n * Filter agents by a condition\n */\n filter(predicate: (agent: AgentClient) => boolean): AgentClient[] {\n return Array.from(this.clients.values()).filter(predicate);\n }\n\n /**\n * Map over all agents\n */\n map<T>(mapper: (agent: AgentClient) => T): T[] {\n return Array.from(this.clients.values()).map(mapper);\n }\n\n /**\n * Execute a custom function on all agents in parallel.\n * Returns PromiseSettledResult array so callers can handle partial failures.\n */\n async execute<T>(executor: (agent: AgentClient) => Promise<T>): Promise<PromiseSettledResult<T>[]> {\n const promises = Array.from(this.clients.values()).map(executor);\n return Promise.allSettled(promises);\n }\n}\n\n/**\n * Main multi-agent AdCP client providing unified access to multiple advertising protocol agents.\n *\n * This is the **primary entry point** for the @adcp/sdk library. It provides flexible\n * access patterns for working with one or multiple AdCP agents (MCP or A2A protocols).\n *\n * ## Key Features\n *\n * - **Single agent access** via `agent(id)` - for individual operations\n * - **Multi-agent access** via `agents([ids])` - for parallel execution across specific agents\n * - **Broadcast access** via `allAgents()` - for parallel execution across all configured agents\n * - **Auto-configuration** via static factory methods (`fromConfig()`, `fromEnv()`, `fromFile()`)\n * - **Full type safety** - all AdCP request/response types are strongly typed\n * - **Protocol agnostic** - works seamlessly with both MCP and A2A agents\n *\n * ## Basic Usage\n *\n * @example Single agent operation\n * ```typescript\n * const client = new ADCPMultiAgentClient([\n * { id: 'agent1', agent_uri: 'https://agent1.com', protocol: 'mcp' },\n * { id: 'agent2', agent_uri: 'https://agent2.com', protocol: 'a2a' }\n * ]);\n *\n * // Execute operation on single agent\n * const result = await client.agent('agent1').getProducts({\n * brief: 'Coffee brands for premium audience'\n * });\n *\n * if (result.status === 'completed') {\n * console.log('Products:', result.data.products);\n * }\n * ```\n *\n * @example Multi-agent parallel execution\n * ```typescript\n * // Execute across specific agents\n * const results = await client.agents(['agent1', 'agent2']).getProducts({\n * brief: 'Coffee brands'\n * });\n *\n * // Execute across all agents\n * const allResults = await client.allAgents().getProducts({\n * brief: 'Coffee brands'\n * });\n *\n * // Process results from all agents\n * allResults.forEach((result, i) => {\n * console.log(`Agent ${client.agentIds[i]}: ${result.status}`);\n * if (result.status === 'completed') {\n * console.log(` Products: ${result.data.products.length}`);\n * }\n * });\n * ```\n *\n * @example Auto-configuration from environment\n * ```typescript\n * // Load agents from environment variables or config files\n * const client = ADCPMultiAgentClient.fromConfig();\n *\n * // Or from environment only\n * const client = ADCPMultiAgentClient.fromEnv();\n *\n * // Or from specific file\n * const client = ADCPMultiAgentClient.fromFile('./my-agents.json');\n * ```\n *\n * ## Available Operations\n *\n * All standard AdCP operations are available:\n * - `getProducts()` - Discover advertising products\n * - `listCreativeFormatsLegacy()` - Inspect legacy named-format catalogs for migration tooling\n * - `createMediaBuy()` - Create new media buy\n * - `updateMediaBuy()` - Update existing media buy\n * - `syncCreatives()` - Upload/sync creative assets\n * - `listCreatives()` - List creative assets\n * - `getMediaBuyDelivery()` - Get delivery performance\n * - `getSignals()` - Get audience signals\n * - `activateSignal()` - Activate audience signals\n * - `providePerformanceFeedback()` - Send performance feedback\n *\n * @see {@link AgentClient} for single-agent operations\n * @see {@link AgentCollection} for multi-agent parallel operations\n * @see {@link SingleAgentClientConfig} for configuration options\n *\n * @public\n */\nexport class ADCPMultiAgentClient {\n private agentClients: Map<string, AgentClient> = new Map();\n private readonly resolvedAdcpVersion: string;\n\n constructor(\n agentConfigs: AgentConfig[] = [],\n private config: SingleAgentClientConfig = {}\n ) {\n // Validates `config.adcpVersion` once for the orchestrator; per-agent\n // AgentClients will re-validate via SingleAgentClient (cheap pure check)\n // and surface the same ConfigurationError if the pin is invalid.\n this.resolvedAdcpVersion = resolveAdcpVersion(config.adcpVersion);\n\n for (const agentConfig of agentConfigs) {\n this.agentClients.set(agentConfig.id, new AgentClient(agentConfig, config));\n }\n }\n\n /**\n * Returns the AdCP protocol version this multi-agent client speaks. The\n * value is shared across every per-agent client created by this orchestrator\n * and originates from the constructor `config.adcpVersion`. See\n * {@link SingleAgentClientConfig.adcpVersion}.\n */\n getAdcpVersion(): string {\n return this.resolvedAdcpVersion;\n }\n\n // ====== FACTORY METHODS FOR EASY SETUP ======\n\n /**\n * Create client by auto-discovering agent configuration\n *\n * Automatically loads agents from:\n * 1. Environment variables (SALES_AGENTS_CONFIG, ADCP_AGENTS_CONFIG, etc.)\n * 2. Config files (adcp.config.json, adcp.json, .adcp.json, agents.json)\n *\n * @param config - Optional client configuration\n * @returns ADCPMultiAgentClient instance with discovered agents\n *\n * @example\n * ```typescript\n * // Simplest possible setup - auto-discovers configuration\n * const client = ADCPMultiAgentClient.fromConfig();\n *\n * // Use with options\n * const client = ADCPMultiAgentClient.fromConfig({\n * debug: true,\n * defaultTimeout: 60000\n * });\n * ```\n */\n static fromConfig(config?: SingleAgentClientConfig): ADCPMultiAgentClient {\n const agents = ConfigurationManager.loadAgents();\n\n if (agents.length === 0) {\n console.log('\\n' + ConfigurationManager.getConfigurationHelp());\n throw new Error('No ADCP agents configured. See configuration help above.');\n }\n\n // Validate configuration\n ConfigurationManager.validateAgentsConfig(agents);\n\n return new ADCPMultiAgentClient(agents, config);\n }\n\n /**\n * Create client from environment variables only\n *\n * @param config - Optional client configuration\n * @returns ADCPMultiAgentClient instance with environment-loaded agents\n *\n * @example\n * ```typescript\n * // Load agents from SALES_AGENTS_CONFIG environment variable\n * const client = ADCPMultiAgentClient.fromEnv();\n * ```\n */\n static fromEnv(config?: SingleAgentClientConfig): ADCPMultiAgentClient {\n const agents = ConfigurationManager.loadAgentsFromEnv();\n\n if (agents.length === 0) {\n const envVars = ConfigurationManager.getEnvVars();\n throw new Error(`No agents found in environment variables. ` + `Please set one of: ${envVars.join(', ')}`);\n }\n\n ConfigurationManager.validateAgentsConfig(agents);\n return new ADCPMultiAgentClient(agents, config);\n }\n\n /**\n * Create client from a specific config file\n *\n * @param configPath - Path to configuration file\n * @param config - Optional client configuration\n * @returns ADCPMultiAgentClient instance with file-loaded agents\n *\n * @example\n * ```typescript\n * // Load from specific file\n * const client = ADCPMultiAgentClient.fromFile('./my-agents.json');\n *\n * // Load from default locations\n * const client = ADCPMultiAgentClient.fromFile();\n * ```\n */\n static fromFile(configPath?: string, config?: SingleAgentClientConfig): ADCPMultiAgentClient {\n const agents = ConfigurationManager.loadAgentsFromConfig(configPath);\n\n if (agents.length === 0) {\n const searchPaths = configPath ? [configPath] : ConfigurationManager.getConfigPaths();\n throw new Error(`No agents found in config file(s). Searched: ${searchPaths.join(', ')}`);\n }\n\n ConfigurationManager.validateAgentsConfig(agents);\n return new ADCPMultiAgentClient(agents, config);\n }\n\n /**\n * Create a simple client with minimal configuration\n *\n * @param agentUrl - Single agent URL\n * @param options - Optional agent and client configuration\n * @returns ADCPMultiAgentClient instance with single agent\n *\n * @example\n * ```typescript\n * // Simplest possible setup for single agent\n * const client = ADCPMultiAgentClient.simple('https://my-agent.example.com');\n *\n * // With options\n * const client = ADCPMultiAgentClient.simple('https://my-agent.example.com', {\n * agentName: 'My Agent',\n * protocol: 'mcp',\n * authToken: 'my-token',\n * debug: true\n * });\n * ```\n */\n static simple(\n agentUrl: string,\n options: {\n agentId?: string;\n agentName?: string;\n protocol?: 'mcp' | 'a2a';\n authToken?: string;\n debug?: boolean;\n timeout?: number;\n } = {}\n ): ADCPMultiAgentClient {\n const {\n agentId = 'default-agent',\n agentName = 'Default Agent',\n protocol = 'mcp',\n authToken,\n debug = false,\n timeout,\n } = options;\n\n const agent: AgentConfig = {\n id: agentId,\n name: agentName,\n agent_uri: agentUrl,\n protocol,\n auth_token: authToken,\n };\n\n ConfigurationManager.validateAgentConfig(agent);\n\n return new ADCPMultiAgentClient([agent], {\n debug,\n workingTimeout: timeout,\n });\n }\n\n // ====== SINGLE AGENT ACCESS ======\n\n /**\n * Get a single agent client for individual operations.\n *\n * This is the primary method for executing operations on a specific agent.\n * Returns an {@link AgentClient} instance that provides all AdCP operations.\n *\n * @param agentId - The unique identifier of the agent to retrieve\n * @returns Agent client instance for the specified agent\n * @throws {Error} If agent ID is not found in configuration\n *\n * @example\n * ```typescript\n * const client = new ADCPMultiAgentClient([\n * { id: 'sales_agent', agent_uri: 'https://sales.example.com', protocol: 'a2a' }\n * ]);\n *\n * // Get specific agent and execute operation\n * const agent = client.agent('sales_agent');\n * const result = await agent.getProducts({ brief: 'Premium coffee brands' });\n * ```\n *\n * @see {@link AgentClient} for available operations\n */\n agent(agentId: string): AgentClient {\n const agent = this.agentClients.get(agentId);\n if (!agent) {\n throw new Error(`Agent '${agentId}' not found. Available agents: ${this.getAgentIds().join(', ')}`);\n }\n return agent;\n }\n\n // ====== MULTI-AGENT ACCESS ======\n\n /**\n * Get multiple specific agents for parallel operations.\n *\n * Returns an {@link AgentCollection} that executes operations across the specified\n * agents in parallel using Promise.all(). Useful when you want to query specific\n * agents simultaneously and compare results.\n *\n * @param agentIds - Array of agent IDs to include in the collection\n * @returns Agent collection for parallel operations across specified agents\n * @throws {Error} If any agent ID is not found in configuration\n *\n * @example\n * ```typescript\n * // Execute across specific agents\n * const results = await client.agents(['sales_agent_1', 'sales_agent_2']).getProducts({\n * brief: 'Premium coffee brands'\n * });\n *\n * // Process parallel results\n * results.forEach((result, i) => {\n * if (result.status === 'completed') {\n * console.log(`Agent ${i + 1}: ${result.data.products.length} products`);\n * }\n * });\n * ```\n *\n * @see {@link AgentCollection} for available parallel operations\n */\n agents(agentIds: string[]): AgentCollection {\n const agentConfigs: AgentConfig[] = [];\n\n for (const agentId of agentIds) {\n const agent = this.agentClients.get(agentId);\n if (!agent) {\n throw new Error(`Agent '${agentId}' not found. Available agents: ${this.getAgentIds().join(', ')}`);\n }\n agentConfigs.push(agent.getAgent());\n }\n\n return new AgentCollection(agentConfigs, this.config);\n }\n\n /**\n * Get all configured agents for broadcast operations.\n *\n * Returns an {@link AgentCollection} containing all agents in the client configuration.\n * Executes operations across all agents in parallel, useful for market research,\n * price comparison, or discovering capabilities across your entire agent network.\n *\n * @returns Agent collection for parallel operations across all configured agents\n *\n * @example\n * ```typescript\n * const client = new ADCPMultiAgentClient([\n * { id: 'agent1', agent_uri: 'https://agent1.com', protocol: 'a2a' },\n * { id: 'agent2', agent_uri: 'https://agent2.com', protocol: 'mcp' },\n * { id: 'agent3', agent_uri: 'https://agent3.com', protocol: 'a2a' }\n * ]);\n *\n * // Query all agents simultaneously\n * const allResults = await client.allAgents().getProducts({\n * brief: 'Premium coffee brands'\n * });\n *\n * // Find best options across all agents\n * const successfulResults = allResults.filter(r => r.status === 'completed');\n * console.log(`Got products from ${successfulResults.length} agents`);\n * ```\n *\n * @see {@link AgentCollection} for available parallel operations\n */\n allAgents(): AgentCollection {\n if (this.agentClients.size === 0) {\n throw new Error('No agents configured. Add agents to the client first.');\n }\n\n const agentConfigs = Array.from(this.agentClients.values()).map(agent => agent.getAgent());\n return new AgentCollection(agentConfigs, this.config);\n }\n\n // ====== AGENT MANAGEMENT ======\n\n /**\n * Add an agent to the client\n *\n * @param agentConfig - Agent configuration to add\n * @throws Error if agent ID already exists\n */\n addAgent(agentConfig: AgentConfig): void {\n if (this.agentClients.has(agentConfig.id)) {\n throw new Error(`Agent with ID '${agentConfig.id}' already exists`);\n }\n\n this.agentClients.set(agentConfig.id, new AgentClient(agentConfig, this.config));\n }\n\n /**\n * Remove an agent from the client\n *\n * @param agentId - ID of agent to remove\n * @returns True if agent was removed, false if not found\n */\n removeAgent(agentId: string): boolean {\n return this.agentClients.delete(agentId);\n }\n\n /**\n * Get individual agent client by ID\n *\n * @param agentId - ID of agent to retrieve\n * @returns AgentClient instance\n * @throws Error if agent not found\n */\n getAgent(agentId: string): AgentClient {\n const agent = this.agentClients.get(agentId);\n if (!agent) {\n throw new Error(`Agent '${agentId}' not found. Available agents: ${this.getAgentIds().join(', ')}`);\n }\n return agent;\n }\n\n /**\n * Check if an agent exists\n */\n hasAgent(agentId: string): boolean {\n return this.agentClients.has(agentId);\n }\n\n /**\n * Get all configured agent IDs\n */\n getAgentIds(): string[] {\n return Array.from(this.agentClients.keys());\n }\n\n /**\n * Get all agent configurations\n */\n getAgentConfigs(): AgentConfig[] {\n return Array.from(this.agentClients.values()).map(agent => agent.getAgent());\n }\n\n /**\n * Get count of configured agents\n */\n get agentCount(): number {\n return this.agentClients.size;\n }\n\n // ====== UTILITY METHODS ======\n\n /**\n * Filter agents by protocol\n */\n getAgentsByProtocol(protocol: 'mcp' | 'a2a'): AgentCollection {\n const filteredConfigs = Array.from(this.agentClients.values())\n .filter(agent => agent.getProtocol() === protocol)\n .map(agent => agent.getAgent());\n\n return new AgentCollection(filteredConfigs, this.config);\n }\n\n /**\n * Find agents that support a specific task\n * This is a placeholder - in a full implementation, you'd query agent capabilities\n */\n findAgentsForTask(taskName: string): AgentCollection {\n // For now, assume all agents support all tasks\n return this.allAgents();\n }\n\n /**\n * Get all active tasks across all agents\n */\n getAllActiveTasks() {\n const allTasks = [];\n for (const agent of this.agentClients.values()) {\n allTasks.push(...agent.getActiveTasks());\n }\n return allTasks;\n }\n\n // ====== TASK MANAGEMENT & NOTIFICATIONS ======\n\n /**\n * Get all tasks from all agents with detailed information\n *\n * @returns Promise resolving to array of all tasks across agents\n *\n * @example\n * ```typescript\n * const allTasks = await client.listAllTasks();\n * console.log(`Total active tasks: ${allTasks.length}`);\n * ```\n */\n async listAllTasks(): Promise<TaskInfo[]> {\n const taskPromises = Array.from(this.agentClients.values()).map(agent => agent.listTasks());\n const results = await Promise.allSettled(taskPromises);\n return results\n .filter((r): r is PromiseFulfilledResult<TaskInfo[]> => r.status === 'fulfilled')\n .flatMap(r => r.value);\n }\n\n /**\n * Get tasks for specific agents\n *\n * @param agentIds - Array of agent IDs to get tasks for\n * @returns Promise resolving to array of tasks from specified agents\n */\n async listTasksForAgents(agentIds: string[]): Promise<TaskInfo[]> {\n const taskPromises = agentIds.map(agentId => {\n const agent = this.agentClients.get(agentId);\n return agent ? agent.listTasks() : Promise.resolve([]);\n });\n const results = await Promise.allSettled(taskPromises);\n return results\n .filter((r): r is PromiseFulfilledResult<TaskInfo[]> => r.status === 'fulfilled')\n .flatMap(r => r.value);\n }\n\n /**\n * Get task information by ID from any agent\n *\n * @param taskId - ID of the task to find\n * @returns Promise resolving to task information or null if not found\n */\n async getTaskInfo(taskId: string): Promise<TaskInfo | null> {\n for (const agent of this.agentClients.values()) {\n const taskInfo = await agent.getTaskInfo(taskId);\n if (taskInfo) {\n return taskInfo;\n }\n }\n return null;\n }\n\n /**\n * Subscribe to task events from all agents\n *\n * @param callbacks - Event callbacks for different task events\n * @returns Unsubscribe function that removes all subscriptions\n *\n * @example\n * ```typescript\n * const unsubscribe = client.onTaskEvents({\n * onTaskCompleted: (task) => {\n * console.log(`Task ${task.taskName} completed!`);\n * },\n * onTaskFailed: (task, error) => {\n * console.error(`Task ${task.taskName} failed:`, error);\n * }\n * });\n * ```\n */\n onTaskEvents(callbacks: {\n onTaskCreated?: (task: TaskInfo) => void;\n onTaskUpdated?: (task: TaskInfo) => void;\n onTaskCompleted?: (task: TaskInfo) => void;\n onTaskFailed?: (task: TaskInfo, error: string) => void;\n }): () => void {\n const unsubscribers: (() => void)[] = [];\n\n for (const agent of this.agentClients.values()) {\n const unsubscribe = agent.onTaskEvents(callbacks);\n unsubscribers.push(unsubscribe);\n }\n\n return () => {\n unsubscribers.forEach(unsub => unsub());\n };\n }\n\n /**\n * Subscribe to task updates from all agents\n *\n * @param callback - Function to call when any task status changes\n * @returns Unsubscribe function\n */\n onAnyTaskUpdate(callback: (task: TaskInfo) => void): () => void {\n const unsubscribers: (() => void)[] = [];\n\n for (const agent of this.agentClients.values()) {\n const unsubscribe = agent.onTaskUpdate(callback);\n unsubscribers.push(unsubscribe);\n }\n\n return () => {\n unsubscribers.forEach(unsub => unsub());\n };\n }\n\n /**\n * Register webhooks for all agents\n *\n * @param webhookUrl - Base webhook URL (will append agent ID)\n * @param taskTypes - Optional array of task types to watch\n */\n async registerWebhooksForAll(webhookUrl: string, taskTypes?: string[]): Promise<void> {\n const promises = Array.from(this.agentClients.values()).map(agent =>\n agent.registerWebhook(`${webhookUrl}?agentId=${agent.getAgentId()}`, taskTypes)\n );\n await Promise.allSettled(promises);\n }\n\n /**\n * Unregister webhooks for all agents\n */\n async unregisterAllWebhooks(): Promise<void> {\n const promises = Array.from(this.agentClients.values()).map(agent => agent.unregisterWebhook());\n await Promise.allSettled(promises);\n }\n\n /**\n * Get count of active tasks by status\n *\n * @returns Promise resolving to object with counts by status\n *\n * @example\n * ```typescript\n * const counts = await client.getTaskCountsByStatus();\n * console.log(`Working: ${counts.working}, Completed: ${counts.completed}`);\n * ```\n */\n async getTaskCountsByStatus(): Promise<Record<string, number>> {\n const tasks = await this.listAllTasks();\n const counts: Record<string, number> = {};\n\n for (const task of tasks) {\n counts[task.status] = (counts[task.status] || 0) + 1;\n }\n\n return counts;\n }\n\n // ====== WEBHOOK METHODS ======\n\n /**\n * Generate webhook URL for a specific agent, task type, and operation\n *\n * @param agentId - ID of the agent\n * @param taskType - Type of task (e.g., 'get_products', 'media_buy_delivery')\n * @param operationId - Operation ID for this request\n * @returns Full webhook URL with macros replaced\n *\n * @example\n * ```typescript\n * const webhookUrl = client.getWebhookUrl('agent1', 'sync_creatives', 'op_123');\n * // Returns: https://myapp.com/webhook/sync_creatives/agent1/op_123\n * ```\n */\n getWebhookUrl(agentId: string, taskType: string, operationId: string): string {\n const agent = this.getAgent(agentId);\n return agent.getWebhookUrl(taskType, operationId);\n }\n\n /**\n * Handle webhook from any agent (async task completion or notifications)\n *\n * Automatically routes webhook to the correct agent based on agent_id in payload.\n *\n * @param payload - Webhook payload from agent (must contain agent_id or operation_id)\n * @param taskType - Task type (e.g create_media_buy) from url param or url part of the webhook delivery\n * @param operationId - Operation id (e.g used for client app to track the operation) from the param or url part of the webhook delivery\n * @param signature - Optional signature for verification (X-ADCP-Signature)\n * @param timestamp - Optional timestamp for verification (X-ADCP-Timestamp)\n * @returns Whether webhook was handled successfully\n *\n * @example\n * ```typescript\n * import { verifyWebhookRequest } from '@adcp/sdk/webhooks';\n *\n * app.post('/webhook', async (req, res) => {\n * try {\n * const check = verifyWebhookRequest({\n * rawBody: req.rawBody,\n * headers: req.headers,\n * globalSecret: process.env.WEBHOOK_SECRET,\n * });\n * if (!check.ok) return res.status(401).json({ error: check.reason });\n *\n * const handled = await client.handleWebhook(\n * req.body,\n * req.params.taskType,\n * req.params.operationId,\n * check.signature,\n * check.timestamp,\n * req.rawBody\n * );\n * res.status(200).json({ received: handled });\n * } catch (error) {\n * res.status(401).json({ error: error.message });\n * }\n * });\n * ```\n */\n async handleWebhook(\n payload: any,\n taskType: string,\n operationId: string,\n signature?: WebhookHeaderValue,\n timestamp?: WebhookHeaderValue,\n rawBody?: string | Buffer | Uint8Array\n ): Promise<boolean> {\n // Extract agent ID from payload\n // Webhook payloads include agent_id or we can infer from operation_id pattern\n const agentId = payload.agent_id || this.inferAgentIdFromPayload(payload);\n\n if (!agentId) {\n throw new Error('Cannot determine agent ID from webhook payload. Payload must contain agent_id or operation_id.');\n }\n\n const agent = this.getAgent(agentId);\n return agent.handleWebhook(payload, taskType, operationId, signature, timestamp, rawBody);\n }\n\n /**\n * Infer agent ID from webhook payload when not explicitly provided\n *\n * Looks for patterns in operation_id or context_id that may contain agent information\n */\n private inferAgentIdFromPayload(payload: any): string | null {\n // Try to extract from operation_id pattern (e.g., \"delivery_report_agent1_2024-01\")\n if (payload.operation_id && typeof payload.operation_id === 'string') {\n const dateMatch = payload.operation_id.match(/_(\\d{4}-\\d{2})$/);\n if (dateMatch) {\n const prefix = payload.operation_id.slice(0, -dateMatch[0].length);\n const lastUnderscore = prefix.lastIndexOf('_');\n if (lastUnderscore >= 0) {\n const candidateId = prefix.slice(lastUnderscore + 1);\n if (candidateId && this.hasAgent(candidateId)) {\n return candidateId;\n }\n }\n }\n }\n\n // Try to extract from context_id if it contains agent reference\n if (payload.context_id && typeof payload.context_id === 'string') {\n for (const agentId of this.getAgentIds()) {\n if (payload.context_id.includes(agentId)) {\n return agentId;\n }\n }\n }\n\n return null;\n }\n\n // ====== CREATIVE AGENT OPERATIONS ======\n\n /**\n * Create a creative agent client\n *\n * @param agentUrl - URL of the creative agent\n * @param protocol - Protocol to use (defaults to 'mcp')\n * @param authToken - Optional authentication token\n * @returns CreativeAgentClient instance\n *\n * @example\n * ```typescript\n * // Use standard creative agent\n * const creativeAgent = client.createCreativeAgent(\n * 'https://creative.adcontextprotocol.org/mcp'\n * );\n *\n * // List formats\n * const formats = await creativeAgent.listFormatsLegacy();\n * ```\n */\n createCreativeAgent(agentUrl: string, protocol: 'mcp' | 'a2a' = 'mcp', authToken?: string): CreativeAgentClient {\n return new CreativeAgentClient({\n agentUrl,\n protocol,\n authToken,\n ...this.config,\n });\n }\n\n /**\n * Get the standard AdCP creative agent\n *\n * @param protocol - Protocol to use (defaults to 'mcp')\n * @returns CreativeAgentClient instance for standard agent\n *\n * @example\n * ```typescript\n * const creativeAgent = client.getStandardCreativeAgent();\n * const formats = await creativeAgent.listFormatsLegacy();\n * ```\n */\n getStandardCreativeAgent(protocol: 'mcp' | 'a2a' = 'mcp'): CreativeAgentClient {\n const agentUrl =\n protocol === 'mcp' ? STANDARD_CREATIVE_AGENTS.ADCP_REFERENCE : STANDARD_CREATIVE_AGENTS.ADCP_REFERENCE_A2A;\n\n return this.createCreativeAgent(agentUrl, protocol);\n }\n\n /**\n * Discover creative formats from standard creative agent\n *\n * Convenience method to quickly get formats from the standard AdCP creative agent\n *\n * @returns Promise resolving to array of creative formats\n *\n * @example\n * ```typescript\n * const formats = await client.discoverFormatsLegacy();\n *\n * // Find specific format\n * const banner = formats.find(f => f.format_id.id === 'display_300x250_image');\n * ```\n */\n async discoverFormatsLegacy(): Promise<LegacyCreativeFormat[]> {\n const creativeAgent = this.getStandardCreativeAgent();\n return creativeAgent.listFormatsLegacy();\n }\n\n /**\n * Find creative formats by dimensions\n *\n * @param width - Width in pixels\n * @param height - Height in pixels\n * @returns Promise resolving to matching formats\n *\n * @example\n * ```typescript\n * // Find all 300x250 formats\n * const mediumRectangles = await client.findLegacyFormatsByDimensions(300, 250);\n * ```\n */\n async findLegacyFormatsByDimensions(width: number, height: number): Promise<LegacyCreativeFormat[]> {\n const creativeAgent = this.getStandardCreativeAgent();\n return creativeAgent.findLegacyByDimensions(width, height);\n }\n}\n\n/**\n * Factory function to create a multi-agent ADCP client\n *\n * @param agents - Array of agent configurations\n * @param config - Client configuration\n * @returns Configured ADCPMultiAgentClient instance\n */\nexport function createADCPMultiAgentClient(\n agents: AgentConfig[],\n config?: SingleAgentClientConfig\n): ADCPMultiAgentClient {\n return new ADCPMultiAgentClient(agents, config);\n}\n"],"mappings":"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","names":[]}
|