@adcp/sdk 12.1.0 → 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/authorization-required.d.mts +3 -0
- package/dist/lib/auth/oauth/authorization-required.d.ts +3 -0
- package/dist/lib/auth/oauth/authorization-required.d.ts.map +1 -1
- package/dist/lib/auth/oauth/authorization-required.js +12 -9
- package/dist/lib/auth/oauth/authorization-required.js.map +1 -1
- package/dist/lib/auth/oauth/authorization-required.mjs +12 -9
- package/dist/lib/auth/oauth/authorization-required.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 +129 -52
- package/dist/lib/core/SingleAgentClient.d.ts +129 -52
- package/dist/lib/core/SingleAgentClient.d.ts.map +1 -1
- package/dist/lib/core/SingleAgentClient.js +1748 -218
- package/dist/lib/core/SingleAgentClient.js.map +1 -1
- package/dist/lib/core/SingleAgentClient.mjs +1758 -218
- 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 +137 -44
- package/dist/lib/core/TaskExecutor.js.map +1 -1
- package/dist/lib/core/TaskExecutor.mjs +137 -44
- 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/net/ssrf-fetch.d.mts +13 -1
- package/dist/lib/net/ssrf-fetch.d.ts +13 -1
- package/dist/lib/net/ssrf-fetch.d.ts.map +1 -1
- package/dist/lib/net/ssrf-fetch.js +14 -7
- package/dist/lib/net/ssrf-fetch.js.map +1 -1
- package/dist/lib/net/ssrf-fetch.mjs +14 -7
- package/dist/lib/net/ssrf-fetch.mjs.map +1 -1
- package/dist/lib/protocols/a2a.d.mts +2 -2
- package/dist/lib/protocols/a2a.d.ts +2 -2
- package/dist/lib/protocols/a2a.d.ts.map +1 -1
- package/dist/lib/protocols/a2a.js +14 -9
- package/dist/lib/protocols/a2a.js.map +1 -1
- package/dist/lib/protocols/a2a.mjs +14 -9
- package/dist/lib/protocols/a2a.mjs.map +1 -1
- package/dist/lib/protocols/index.d.mts +20 -3
- package/dist/lib/protocols/index.d.ts +20 -3
- package/dist/lib/protocols/index.d.ts.map +1 -1
- package/dist/lib/protocols/index.js +44 -31
- package/dist/lib/protocols/index.js.map +1 -1
- package/dist/lib/protocols/index.mjs +44 -32
- 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/protocols/mcp-tasks.d.mts +3 -0
- package/dist/lib/protocols/mcp-tasks.d.ts +3 -0
- package/dist/lib/protocols/mcp-tasks.d.ts.map +1 -1
- package/dist/lib/protocols/mcp-tasks.js +21 -11
- package/dist/lib/protocols/mcp-tasks.js.map +1 -1
- package/dist/lib/protocols/mcp-tasks.mjs +21 -11
- package/dist/lib/protocols/mcp-tasks.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.d.ts.map +1 -1
- package/dist/lib/testing/client.js +13 -5
- package/dist/lib/testing/client.js.map +1 -1
- package/dist/lib/testing/client.mjs +13 -5
- package/dist/lib/testing/client.mjs.map +1 -1
- package/dist/lib/testing/compliance/comply.d.mts +1 -1
- package/dist/lib/testing/compliance/comply.d.ts +1 -1
- package/dist/lib/testing/compliance/comply.d.ts.map +1 -1
- package/dist/lib/testing/compliance/comply.js +16 -6
- package/dist/lib/testing/compliance/comply.js.map +1 -1
- package/dist/lib/testing/compliance/comply.mjs +16 -6
- package/dist/lib/testing/compliance/comply.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/probes.d.mts +6 -0
- package/dist/lib/testing/storyboard/probes.d.ts +6 -0
- package/dist/lib/testing/storyboard/probes.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/probes.js +16 -5
- package/dist/lib/testing/storyboard/probes.js.map +1 -1
- package/dist/lib/testing/storyboard/probes.mjs +16 -5
- package/dist/lib/testing/storyboard/probes.mjs.map +1 -1
- package/dist/lib/testing/storyboard/runner.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/runner.js +6 -2
- package/dist/lib/testing/storyboard/runner.js.map +1 -1
- package/dist/lib/testing/storyboard/runner.mjs +6 -2
- package/dist/lib/testing/storyboard/runner.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/testing/types.d.mts +7 -1
- package/dist/lib/testing/types.d.ts +7 -1
- package/dist/lib/testing/types.d.ts.map +1 -1
- package/dist/lib/testing/types.js.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,4 +1,25 @@
|
|
|
1
|
+
import {
|
|
2
|
+
projectCreativeForDelivery
|
|
3
|
+
} from "../v2/projection/creative-delivery.mjs";
|
|
4
|
+
import { resolveCanonicalFormatKind } from "../v2/projection/v1-to-v2.mjs";
|
|
1
5
|
function inlineCreativesForPackages(packages, creatives, options = {}) {
|
|
6
|
+
assertCanonicalInlineInputs(packages, creatives, options);
|
|
7
|
+
return inlineCreativesForPackagesInternal(packages, creatives, options, "canonical");
|
|
8
|
+
}
|
|
9
|
+
function inlineCreativesForPackagesLegacy(packages, creatives, options = {}) {
|
|
10
|
+
const { creativeFormatWireMode = "legacy", ...sharedOptions } = options;
|
|
11
|
+
return inlineCreativesForPackagesInternal(
|
|
12
|
+
packages,
|
|
13
|
+
creatives,
|
|
14
|
+
{
|
|
15
|
+
...sharedOptions,
|
|
16
|
+
legacyFormatConverter: options.legacyFormatConverter,
|
|
17
|
+
canonicalFormatLegacyResolver: options.canonicalFormatLegacyResolver
|
|
18
|
+
},
|
|
19
|
+
creativeFormatWireMode
|
|
20
|
+
);
|
|
21
|
+
}
|
|
22
|
+
function inlineCreativesForPackagesInternal(packages, creatives, options, creativeFormatWireMode) {
|
|
2
23
|
const {
|
|
3
24
|
assignments,
|
|
4
25
|
includeUnassignedCreatives = assignments == null || assignments.length === 0,
|
|
@@ -6,7 +27,9 @@ function inlineCreativesForPackages(packages, creatives, options = {}) {
|
|
|
6
27
|
packageId = defaultPackageId,
|
|
7
28
|
onUnmatchedAssignment = "throw",
|
|
8
29
|
onMissingCreative = "throw",
|
|
9
|
-
onIncompatibleAssignment = "throw"
|
|
30
|
+
onIncompatibleAssignment = "throw",
|
|
31
|
+
legacyFormatConverter,
|
|
32
|
+
canonicalFormatLegacyResolver
|
|
10
33
|
} = options;
|
|
11
34
|
const creativesById = /* @__PURE__ */ new Map();
|
|
12
35
|
for (const creative of creatives) {
|
|
@@ -42,9 +65,26 @@ function inlineCreativesForPackages(packages, creatives, options = {}) {
|
|
|
42
65
|
for (const assignment of assigned) {
|
|
43
66
|
const creative = creativesById.get(assignment.creative_id);
|
|
44
67
|
if (!creative) continue;
|
|
45
|
-
const
|
|
68
|
+
const sourceCompatible = !filterByFormat || creativeMatchesPackage(pkg, creative);
|
|
69
|
+
if (!sourceCompatible) {
|
|
70
|
+
if (onIncompatibleAssignment === "throw") {
|
|
71
|
+
throw new Error(
|
|
72
|
+
`inlineCreativesForPackages assignment creative_id "${assignment.creative_id}" does not match package_id "${assignment.package_id}" format selectors`
|
|
73
|
+
);
|
|
74
|
+
}
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
const projected = projectCreativeForDelivery(
|
|
78
|
+
creative,
|
|
79
|
+
pkg,
|
|
80
|
+
creativeFormatWireMode,
|
|
81
|
+
"inline_creatives",
|
|
82
|
+
legacyFormatConverter,
|
|
83
|
+
canonicalFormatLegacyResolver
|
|
84
|
+
);
|
|
85
|
+
const compatible = !filterByFormat || creativeMatchesPackage(pkg, projected);
|
|
46
86
|
if (compatible) {
|
|
47
|
-
inlined.push(applyAssignmentToCreative(
|
|
87
|
+
inlined.push(applyAssignmentToCreative(projected, assignment));
|
|
48
88
|
} else if (onIncompatibleAssignment === "throw") {
|
|
49
89
|
throw new Error(
|
|
50
90
|
`inlineCreativesForPackages assignment creative_id "${assignment.creative_id}" does not match package_id "${assignment.package_id}" format selectors`
|
|
@@ -54,8 +94,17 @@ function inlineCreativesForPackages(packages, creatives, options = {}) {
|
|
|
54
94
|
if (includeUnassignedCreatives) {
|
|
55
95
|
for (const creative of creatives) {
|
|
56
96
|
if (typeof creative.creative_id === "string" && assignedCreativeIds.has(creative.creative_id)) continue;
|
|
57
|
-
if (
|
|
58
|
-
|
|
97
|
+
if (filterByFormat && !creativeMatchesPackage(pkg, creative)) continue;
|
|
98
|
+
const projected = projectCreativeForDelivery(
|
|
99
|
+
creative,
|
|
100
|
+
pkg,
|
|
101
|
+
creativeFormatWireMode,
|
|
102
|
+
"inline_creatives",
|
|
103
|
+
legacyFormatConverter,
|
|
104
|
+
canonicalFormatLegacyResolver
|
|
105
|
+
);
|
|
106
|
+
if (!filterByFormat || creativeMatchesPackage(pkg, projected)) {
|
|
107
|
+
inlined.push({ ...projected });
|
|
59
108
|
}
|
|
60
109
|
}
|
|
61
110
|
}
|
|
@@ -74,6 +123,28 @@ function inlineCreativesForPackages(packages, creatives, options = {}) {
|
|
|
74
123
|
}
|
|
75
124
|
return result;
|
|
76
125
|
}
|
|
126
|
+
function assertCanonicalInlineInputs(packages, creatives, options) {
|
|
127
|
+
const unsafeOptions = options;
|
|
128
|
+
if ("creativeFormatWireMode" in unsafeOptions || "legacyFormatConverter" in unsafeOptions || "canonicalFormatLegacyResolver" in unsafeOptions) {
|
|
129
|
+
throw new Error(
|
|
130
|
+
"inlineCreativesForPackages is canonical-only; use inlineCreativesForPackagesLegacy for legacy wire projection"
|
|
131
|
+
);
|
|
132
|
+
}
|
|
133
|
+
for (const pkg of packages) {
|
|
134
|
+
if ("format_ids" in pkg) {
|
|
135
|
+
throw new Error(
|
|
136
|
+
"inlineCreativesForPackages does not accept legacy package format_ids; use canonical format selectors or inlineCreativesForPackagesLegacy"
|
|
137
|
+
);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
for (const creative of creatives) {
|
|
141
|
+
if ("format_id" in creative) {
|
|
142
|
+
throw new Error(
|
|
143
|
+
"inlineCreativesForPackages does not accept legacy creative format_id; use canonical format_kind or inlineCreativesForPackagesLegacy"
|
|
144
|
+
);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
77
148
|
function defaultPackageId(pkg) {
|
|
78
149
|
if (typeof pkg.package_id === "string") return pkg.package_id;
|
|
79
150
|
if (typeof pkg.context?.buyer_ref === "string") return pkg.context.buyer_ref;
|
|
@@ -108,13 +179,37 @@ function creativeMatchesPackage(pkg, creative) {
|
|
|
108
179
|
if (packageFormatIds.length === 0 && packageFormatKind === void 0) return false;
|
|
109
180
|
}
|
|
110
181
|
if (packageFormatKind !== void 0) {
|
|
111
|
-
return creativeRecord.format_kind === packageFormatKind && paramsMatchCreative(packageParams, creativeFormatId);
|
|
182
|
+
return creativeRecord.format_kind === packageFormatKind && paramsMatchCreative(packageParams, creativeFormatId ?? creativeParamsFromAssets(creativeRecord.assets));
|
|
112
183
|
}
|
|
113
184
|
if (packageFormatIds.length > 0) {
|
|
114
|
-
|
|
185
|
+
if (creativeFormatId !== void 0) {
|
|
186
|
+
return packageFormatIds.some((formatId) => formatIdMatches(formatId, creativeFormatId));
|
|
187
|
+
}
|
|
188
|
+
return packageFormatIds.some(
|
|
189
|
+
(formatId) => typeof formatId.id === "string" && resolveCanonicalFormatKind(formatId.id, {
|
|
190
|
+
agentUrl: typeof formatId.agent_url === "string" ? formatId.agent_url : void 0
|
|
191
|
+
}) === creativeRecord.format_kind
|
|
192
|
+
);
|
|
115
193
|
}
|
|
116
194
|
return true;
|
|
117
195
|
}
|
|
196
|
+
function creativeParamsFromAssets(value) {
|
|
197
|
+
const assets = plainObject(value);
|
|
198
|
+
if (!assets) return void 0;
|
|
199
|
+
for (const assetValue of Object.values(assets)) {
|
|
200
|
+
const candidates = Array.isArray(assetValue) ? assetValue : [assetValue];
|
|
201
|
+
for (const candidate of candidates) {
|
|
202
|
+
const asset = plainObject(candidate);
|
|
203
|
+
if (!asset) continue;
|
|
204
|
+
const params = {};
|
|
205
|
+
if (typeof asset.width === "number") params.width = asset.width;
|
|
206
|
+
if (typeof asset.height === "number") params.height = asset.height;
|
|
207
|
+
if (typeof asset.duration_ms === "number") params.duration_ms = asset.duration_ms;
|
|
208
|
+
if (Object.keys(params).length > 0) return params;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
return void 0;
|
|
212
|
+
}
|
|
118
213
|
function arrayOfObjects(value) {
|
|
119
214
|
return Array.isArray(value) ? value.flatMap((item) => plainObject(item) ? [item] : []) : [];
|
|
120
215
|
}
|
|
@@ -226,6 +321,7 @@ function sortKeys(value) {
|
|
|
226
321
|
);
|
|
227
322
|
}
|
|
228
323
|
export {
|
|
229
|
-
inlineCreativesForPackages
|
|
324
|
+
inlineCreativesForPackages,
|
|
325
|
+
inlineCreativesForPackagesLegacy
|
|
230
326
|
};
|
|
231
327
|
//# sourceMappingURL=creative-delivery.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/utils/creative-delivery.ts"],"sourcesContent":["import type { CreativeAsset, PackageRequest } from '../types/tools.generated';\n\n/**\n * Package-like input accepted by `inlineCreativesForPackages`.\n *\n * `PackageRequest` is the create-media-buy shape. Update-media-buy package\n * patches are narrower but carry the same `package_id` + `creatives` fields,\n * so the helper accepts both without depending on AgentClient.\n */\nexport type InlineCreativePackage = Partial<PackageRequest> & {\n package_id?: string;\n buyer_ref?: string;\n context?: { buyer_ref?: string; [key: string]: unknown };\n creatives?: CreativeAsset[];\n [key: string]: unknown;\n};\n\n/**\n * Assignment shape shared with `sync_creatives.assignments[]`, plus\n * `placement_refs` for callers already authoring the structured placement\n * form accepted by inline `CreativeAsset`.\n */\nexport interface InlineCreativeAssignment {\n creative_id: string;\n package_id: string;\n weight?: number;\n placement_ids?: string[];\n placement_refs?: unknown[];\n}\n\nexport interface InlineCreativesForPackagesOptions<TPackage extends InlineCreativePackage = InlineCreativePackage> {\n /**\n * Package-scoped assignment instructions. When supplied, only creatives\n * assigned to each package are inlined unless `includeUnassignedCreatives`\n * is true.\n */\n assignments?: ReadonlyArray<InlineCreativeAssignment>;\n\n /**\n * Include compatible creatives that have no assignment entry. Defaults to\n * false when assignments are supplied and true when no assignments exist.\n */\n includeUnassignedCreatives?: boolean;\n\n /**\n * Filter creatives by package format selectors (`format_ids`,\n * `format_option_refs`, or `format_kind`). Defaults to true.\n */\n filterByFormat?: boolean;\n\n /**\n * Resolve the package identifier used to match assignment.package_id.\n * Defaults to `package_id`, then `context.buyer_ref`, then `buyer_ref`.\n */\n packageId?: (pkg: TPackage, index: number) => string | undefined;\n\n /**\n * Behavior when an assignment names a package not present in the package\n * list. Defaults to throw so package scoping mistakes do not broaden\n * delivery silently.\n */\n onUnmatchedAssignment?: 'throw' | 'ignore';\n\n /**\n * Behavior when an assignment names a creative not present in `creatives`.\n * Defaults to throw because inline payloads cannot reference library-only\n * creatives.\n */\n onMissingCreative?: 'throw' | 'ignore';\n\n /**\n * Behavior when an explicit assignment names a creative whose format cannot\n * satisfy the target package selectors. Defaults to throw so authoring\n * mistakes do not silently remove assigned delivery.\n */\n onIncompatibleAssignment?: 'throw' | 'ignore';\n}\n\nexport type InlineCreativePackagePatch<TPackage extends InlineCreativePackage = InlineCreativePackage> = TPackage & {\n creatives?: CreativeAsset[];\n};\n\n/**\n * Project library-scoped creative assets into package-scoped inline creative\n * payloads for `create_media_buy` or `update_media_buy`.\n *\n * The helper is pure: it performs no network calls, does not call\n * `sync_creatives`, and does not generate idempotency keys. Use\n * `supportsSyncCreatives(caps)` to decide whether the seller has a creative\n * library. When it does not, spread this helper's result into\n * `packages[].creatives` and use a fresh idempotency key for the enclosing\n * create/update media-buy call.\n *\n * @example\n * ```ts\n * const caps = await agent.getCapabilities();\n * if (supportsSyncCreatives(caps)) {\n * await agent.syncCreatives({ account, creatives, assignments });\n * } else if (caps.features.inlineCreativeManagement) {\n * await agent.createMediaBuy({\n * account,\n * idempotency_key: crypto.randomUUID(),\n * packages: inlineCreativesForPackages(packages, creatives, { assignments }),\n * });\n * } else {\n * throw new Error('Seller supports neither creative library sync nor inline creative uploads.');\n * }\n * ```\n */\nexport function inlineCreativesForPackages<TPackage extends InlineCreativePackage>(\n packages: ReadonlyArray<TPackage>,\n creatives: ReadonlyArray<CreativeAsset>,\n options: InlineCreativesForPackagesOptions<TPackage> = {}\n): InlineCreativePackagePatch<TPackage>[] {\n const {\n assignments,\n includeUnassignedCreatives = assignments == null || assignments.length === 0,\n filterByFormat = true,\n packageId = defaultPackageId,\n onUnmatchedAssignment = 'throw',\n onMissingCreative = 'throw',\n onIncompatibleAssignment = 'throw',\n } = options;\n\n const creativesById = new Map<string, CreativeAsset>();\n for (const creative of creatives) {\n if (typeof creative.creative_id === 'string') {\n creativesById.set(creative.creative_id, creative);\n }\n }\n\n const assignmentsByPackage = new Map<string, InlineCreativeAssignment[]>();\n const matchedPackageIds = new Set<string>();\n for (const assignment of assignments ?? []) {\n const creative = creativesById.get(assignment.creative_id);\n if (!creative) {\n if (onMissingCreative === 'throw') {\n throw new Error(\n `inlineCreativesForPackages assignment references unknown creative_id \"${assignment.creative_id}\"`\n );\n }\n continue;\n }\n const existing = assignmentsByPackage.get(assignment.package_id);\n if (existing) {\n existing.push(assignment);\n } else {\n assignmentsByPackage.set(assignment.package_id, [assignment]);\n }\n }\n\n const result = packages.map((pkg, index) => {\n const id = packageId(pkg, index);\n if (id) matchedPackageIds.add(id);\n const assigned = id ? (assignmentsByPackage.get(id) ?? []) : [];\n const assignedCreativeIds = new Set(assigned.map(a => a.creative_id));\n const inlined: CreativeAsset[] = [];\n\n for (const assignment of assigned) {\n const creative = creativesById.get(assignment.creative_id);\n if (!creative) continue;\n const compatible = !filterByFormat || creativeMatchesPackage(pkg, creative);\n if (compatible) {\n inlined.push(applyAssignmentToCreative(creative, assignment));\n } else if (onIncompatibleAssignment === 'throw') {\n throw new Error(\n `inlineCreativesForPackages assignment creative_id \"${assignment.creative_id}\" ` +\n `does not match package_id \"${assignment.package_id}\" format selectors`\n );\n }\n }\n\n if (includeUnassignedCreatives) {\n for (const creative of creatives) {\n if (typeof creative.creative_id === 'string' && assignedCreativeIds.has(creative.creative_id)) continue;\n if (!filterByFormat || creativeMatchesPackage(pkg, creative)) {\n inlined.push({ ...creative });\n }\n }\n }\n\n const next: Record<string, unknown> = { ...(pkg as Record<string, unknown>) };\n delete next.creatives;\n if (inlined.length > 0) {\n next.creatives = inlined;\n }\n return next as InlineCreativePackagePatch<TPackage>;\n });\n\n if (onUnmatchedAssignment === 'throw') {\n const unmatched = [...assignmentsByPackage.keys()].filter(package_id => !matchedPackageIds.has(package_id));\n if (unmatched.length > 0) {\n throw new Error(`inlineCreativesForPackages assignment references unknown package_id \"${unmatched[0]}\"`);\n }\n }\n\n return result;\n}\n\nfunction defaultPackageId(pkg: InlineCreativePackage): string | undefined {\n if (typeof pkg.package_id === 'string') return pkg.package_id;\n if (typeof pkg.context?.buyer_ref === 'string') return pkg.context.buyer_ref;\n if (typeof pkg.buyer_ref === 'string') return pkg.buyer_ref;\n return undefined;\n}\n\nfunction applyAssignmentToCreative(creative: CreativeAsset, assignment: InlineCreativeAssignment): CreativeAsset {\n const next: Record<string, unknown> = { ...(creative as unknown as Record<string, unknown>) };\n delete next.weight;\n delete next.placement_ids;\n delete next.placement_refs;\n\n if (assignment.weight !== undefined) next.weight = assignment.weight;\n if (assignment.placement_refs !== undefined) {\n next.placement_refs = [...assignment.placement_refs];\n } else if (assignment.placement_ids !== undefined) {\n next.placement_ids = [...assignment.placement_ids];\n }\n return next as unknown as CreativeAsset;\n}\n\nfunction creativeMatchesPackage(pkg: InlineCreativePackage, creative: CreativeAsset): boolean {\n const packageFormatIds = arrayOfObjects(pkg.format_ids);\n const packageFormatOptionRefs = arrayOfObjects(pkg.format_option_refs);\n const packageFormatKind = typeof pkg.format_kind === 'string' ? pkg.format_kind : undefined;\n const packageParams = plainObject(pkg.params);\n\n const creativeRecord = creative as unknown as Record<string, unknown>;\n const creativeFormatId = plainObject(creativeRecord.format_id);\n const creativeFormatOptionRef = plainObject(creativeRecord.format_option_ref);\n\n if (packageFormatOptionRefs.length > 0) {\n if (creativeFormatOptionRef) {\n return packageFormatOptionRefs.some(formatOptionRef => deepEqual(formatOptionRef, creativeFormatOptionRef));\n }\n if (packageFormatIds.length === 0 && packageFormatKind === undefined) return false;\n }\n\n if (packageFormatKind !== undefined) {\n return creativeRecord.format_kind === packageFormatKind && paramsMatchCreative(packageParams, creativeFormatId);\n }\n\n if (packageFormatIds.length > 0) {\n return (\n creativeFormatId !== undefined && packageFormatIds.some(formatId => formatIdMatches(formatId, creativeFormatId))\n );\n }\n\n return true;\n}\n\nfunction arrayOfObjects(value: unknown): Record<string, unknown>[] {\n return Array.isArray(value) ? value.flatMap(item => (plainObject(item) ? [item] : [])) : [];\n}\n\nfunction plainObject(value: unknown): Record<string, unknown> | undefined {\n return value !== null && typeof value === 'object' && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : undefined;\n}\n\nfunction formatIdMatches(expected: Record<string, unknown>, actual: Record<string, unknown>): boolean {\n const expectedId = expected.id;\n const actualId = actual.id;\n if (expectedId !== actualId) return false;\n\n const expectedAgentUrl = normalizeAgentUrl(expected.agent_url);\n const actualAgentUrl = normalizeAgentUrl(actual.agent_url);\n if (expectedAgentUrl !== undefined && actualAgentUrl !== undefined && expectedAgentUrl !== actualAgentUrl) {\n return false;\n }\n\n for (const key of ['width', 'height', 'duration_ms']) {\n if (expected[key] !== undefined && actual[key] !== undefined && expected[key] !== actual[key]) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction paramsMatchCreative(\n packageParams: Record<string, unknown> | undefined,\n creativeFormatId: Record<string, unknown> | undefined\n): boolean {\n if (!packageParams) return true;\n\n let constrained = false;\n const actualWidth = numberValue(creativeFormatId, 'width');\n const actualHeight = numberValue(creativeFormatId, 'height');\n const actualDuration =\n numberValue(creativeFormatId, 'duration_ms') ?? numberValue(creativeFormatId, 'duration_ms_exact');\n\n const sizes = Array.isArray(packageParams.sizes)\n ? packageParams.sizes.flatMap(size => (plainObject(size) ? [size] : []))\n : [];\n if (sizes.length > 0) {\n constrained = true;\n if (\n actualWidth === undefined ||\n actualHeight === undefined ||\n !sizes.some(size => numberValue(size, 'width') === actualWidth && numberValue(size, 'height') === actualHeight)\n ) {\n return false;\n }\n }\n\n const expectedWidth = numberValue(packageParams, 'width');\n if (expectedWidth !== undefined) {\n constrained = true;\n if (actualWidth !== expectedWidth) return false;\n }\n\n const expectedHeight = numberValue(packageParams, 'height');\n if (expectedHeight !== undefined) {\n constrained = true;\n if (actualHeight !== expectedHeight) return false;\n }\n\n const minWidth = numberValue(packageParams, 'min_width');\n if (minWidth !== undefined) {\n constrained = true;\n if (actualWidth === undefined || actualWidth < minWidth) return false;\n }\n\n const maxWidth = numberValue(packageParams, 'max_width');\n if (maxWidth !== undefined) {\n constrained = true;\n if (actualWidth === undefined || actualWidth > maxWidth) return false;\n }\n\n const minHeight = numberValue(packageParams, 'min_height');\n if (minHeight !== undefined) {\n constrained = true;\n if (actualHeight === undefined || actualHeight < minHeight) return false;\n }\n\n const maxHeight = numberValue(packageParams, 'max_height');\n if (maxHeight !== undefined) {\n constrained = true;\n if (actualHeight === undefined || actualHeight > maxHeight) return false;\n }\n\n const exactDuration = numberValue(packageParams, 'duration_ms_exact') ?? numberValue(packageParams, 'duration_ms');\n if (exactDuration !== undefined) {\n constrained = true;\n if (actualDuration !== exactDuration) return false;\n }\n\n const durationRange = numberRange(packageParams.duration_ms_range);\n if (durationRange) {\n constrained = true;\n const [minDuration, maxDuration] = durationRange;\n if (actualDuration === undefined) return false;\n if (minDuration !== undefined && actualDuration < minDuration) return false;\n if (maxDuration !== undefined && actualDuration > maxDuration) return false;\n }\n\n return constrained ? creativeFormatId !== undefined : true;\n}\n\nfunction numberValue(object: Record<string, unknown> | undefined, key: string): number | undefined {\n const value = object?.[key];\n return typeof value === 'number' && Number.isFinite(value) ? value : undefined;\n}\n\nfunction numberRange(value: unknown): [number | undefined, number | undefined] | undefined {\n if (!Array.isArray(value) || value.length !== 2) return undefined;\n const [min, max] = value;\n const minValue = min === null ? undefined : typeof min === 'number' && Number.isFinite(min) ? min : undefined;\n const maxValue = max === null ? undefined : typeof max === 'number' && Number.isFinite(max) ? max : undefined;\n return minValue === undefined && maxValue === undefined ? undefined : [minValue, maxValue];\n}\n\nfunction normalizeAgentUrl(value: unknown): string | undefined {\n if (typeof value !== 'string') return undefined;\n let end = value.length;\n while (end > 0 && value.charCodeAt(end - 1) === 47) {\n end -= 1;\n }\n return end === value.length ? value : value.slice(0, end);\n}\n\nfunction deepEqual(a: unknown, b: unknown): boolean {\n return JSON.stringify(sortKeys(a)) === JSON.stringify(sortKeys(b));\n}\n\nfunction sortKeys(value: unknown): unknown {\n if (Array.isArray(value)) return value.map(sortKeys);\n const object = plainObject(value);\n if (!object) return value;\n return Object.fromEntries(\n Object.entries(object)\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([k, v]) => [k, sortKeys(v)])\n );\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/utils/creative-delivery.ts"],"sourcesContent":["import type { CreativeAsset, PackageRequest } from '../types/tools.generated';\nimport {\n projectCreativeForDelivery,\n type CanonicalCreativeAsset,\n type CreativeFormatWireMode,\n type LegacyCreativeAsset,\n} from '../v2/projection/creative-delivery';\nimport type { LegacyFormatConverter } from '../v2/projection/v1-to-v2';\nimport type { CanonicalFormatLegacyResolver } from '../v2/projection/v2-to-v1';\nimport { resolveCanonicalFormatKind } from '../v2/projection/v1-to-v2';\n\n/**\n * Package-like input accepted by `inlineCreativesForPackages`.\n *\n * `PackageRequest` is the create-media-buy shape. Update-media-buy package\n * patches are narrower but carry the same `package_id` + `creatives` fields,\n * so the helper accepts both without depending on AgentClient.\n */\nexport type InlineCreativePackage = {\n package_id?: string;\n buyer_ref?: string;\n context?: NonNullable<PackageRequest['context']> & { buyer_ref?: string };\n creatives?: CanonicalCreativeAsset[];\n format_ids?: never;\n format_option_refs?: PackageRequest['format_option_refs'];\n format_kind?: PackageRequest['format_kind'];\n params?: PackageRequest['params'];\n};\n\n/**\n * Compatibility-only package shape accepted by\n * `inlineCreativesForPackagesLegacy`.\n *\n * @deprecated Legacy `format_ids` belong at an explicit compatibility\n * boundary. Prefer `InlineCreativePackage` and canonical format selectors.\n */\nexport type LegacyInlineCreativePackage = Omit<InlineCreativePackage, 'creatives' | 'format_ids'> & {\n creatives?: CreativeAsset[];\n format_ids?: PackageRequest['format_ids'];\n};\n\n/**\n * Assignment shape shared with `sync_creatives.assignments[]`, plus\n * `placement_refs` for callers already authoring the structured placement\n * form accepted by inline `CreativeAsset`.\n */\nexport interface InlineCreativeAssignment {\n creative_id: string;\n package_id: string;\n weight?: number;\n placement_ids?: string[];\n placement_refs?: unknown[];\n}\n\ninterface InlineCreativesForPackagesBaseOptions<TPackage> {\n /**\n * Package-scoped assignment instructions. When supplied, only creatives\n * assigned to each package are inlined unless `includeUnassignedCreatives`\n * is true.\n */\n assignments?: ReadonlyArray<InlineCreativeAssignment>;\n\n /**\n * Include compatible creatives that have no assignment entry. Defaults to\n * false when assignments are supplied and true when no assignments exist.\n */\n includeUnassignedCreatives?: boolean;\n\n /**\n * Filter creatives by package format selectors (`format_option_refs` or\n * `format_kind`). The legacy helper also recognizes `format_ids`. Defaults\n * to true.\n */\n filterByFormat?: boolean;\n\n /**\n * Resolve the package identifier used to match assignment.package_id.\n * Defaults to `package_id`, then `context.buyer_ref`, then `buyer_ref`.\n */\n packageId?: (pkg: TPackage, index: number) => string | undefined;\n\n /**\n * Behavior when an assignment names a package not present in the package\n * list. Defaults to throw so package scoping mistakes do not broaden\n * delivery silently.\n */\n onUnmatchedAssignment?: 'throw' | 'ignore';\n\n /**\n * Behavior when an assignment names a creative not present in `creatives`.\n * Defaults to throw because inline payloads cannot reference library-only\n * creatives.\n */\n onMissingCreative?: 'throw' | 'ignore';\n\n /**\n * Behavior when an explicit assignment names a creative whose format cannot\n * satisfy the target package selectors. Defaults to throw so authoring\n * mistakes do not silently remove assigned delivery.\n */\n onIncompatibleAssignment?: 'throw' | 'ignore';\n}\n\nexport interface InlineCreativesForPackagesOptions<\n TPackage extends InlineCreativePackage = InlineCreativePackage,\n> extends InlineCreativesForPackagesBaseOptions<TPackage> {}\n\n/**\n * Options for the explicit legacy inline-creative compatibility helper.\n *\n * @deprecated Prefer canonical selectors and `inlineCreativesForPackages`.\n */\nexport interface InlineCreativesForPackagesLegacyOptions<\n TPackage extends LegacyInlineCreativePackage = LegacyInlineCreativePackage,\n> extends InlineCreativesForPackagesBaseOptions<TPackage> {\n /** Fail closed when the seller's legacy wire shape is not known. */\n creativeFormatWireMode?: 'legacy' | 'unknown';\n\n /** Convert custom legacy creative refs before matching/projecting. */\n legacyFormatConverter?: LegacyFormatConverter;\n\n /** Resolve canonical custom formats when no built-in or private legacy mapping exists. */\n canonicalFormatLegacyResolver?: CanonicalFormatLegacyResolver;\n}\n\nexport type InlineCreativePackagePatch<\n TPackage extends InlineCreativePackage | LegacyInlineCreativePackage = InlineCreativePackage,\n TCreative = CanonicalCreativeAsset,\n> = Omit<TPackage, 'creatives'> & {\n creatives?: TCreative[];\n};\n\n/**\n * Project library-scoped creative assets into package-scoped inline creative\n * payloads for `create_media_buy` or `update_media_buy`.\n *\n * The helper is pure: it performs no network calls, does not call\n * `sync_creatives`, and does not generate idempotency keys. Use\n * `supportsSyncCreatives(caps)` to decide whether the seller has a creative\n * library. When it does not, spread this helper's result into\n * `packages[].creatives` and use a fresh idempotency key for the enclosing\n * create/update media-buy call.\n *\n * @example\n * ```ts\n * const caps = await agent.getCapabilities();\n * if (supportsSyncCreatives(caps)) {\n * await agent.syncCreatives({ account, creatives, assignments });\n * } else if (caps.features.inlineCreativeManagement) {\n * await agent.createMediaBuy({\n * account,\n * idempotency_key: crypto.randomUUID(),\n * packages: inlineCreativesForPackages(packages, creatives, { assignments }),\n * });\n * } else {\n * throw new Error('Seller supports neither creative library sync nor inline creative uploads.');\n * }\n * ```\n */\nexport function inlineCreativesForPackages<TPackage extends InlineCreativePackage>(\n packages: ReadonlyArray<TPackage>,\n creatives: ReadonlyArray<CanonicalCreativeAsset>,\n options: InlineCreativesForPackagesOptions<TPackage> = {}\n): InlineCreativePackagePatch<TPackage, CanonicalCreativeAsset>[] {\n assertCanonicalInlineInputs(packages, creatives, options);\n return inlineCreativesForPackagesInternal(packages, creatives, options, 'canonical') as InlineCreativePackagePatch<\n TPackage,\n CanonicalCreativeAsset\n >[];\n}\n\n/**\n * Project creatives into the legacy inline package wire shape.\n *\n * @deprecated This is an explicit compatibility escape hatch for legacy\n * sellers. New integrations should use canonical package selectors with\n * `inlineCreativesForPackages`; the SDK client performs negotiated wire\n * projection at the transport boundary.\n */\nexport function inlineCreativesForPackagesLegacy<TPackage extends LegacyInlineCreativePackage>(\n packages: ReadonlyArray<TPackage>,\n creatives: ReadonlyArray<CreativeAsset>,\n options: InlineCreativesForPackagesLegacyOptions<TPackage> = {}\n): InlineCreativePackagePatch<TPackage, LegacyCreativeAsset>[] {\n const { creativeFormatWireMode = 'legacy', ...sharedOptions } = options;\n return inlineCreativesForPackagesInternal(\n packages,\n creatives,\n {\n ...sharedOptions,\n legacyFormatConverter: options.legacyFormatConverter,\n canonicalFormatLegacyResolver: options.canonicalFormatLegacyResolver,\n },\n creativeFormatWireMode\n ) as InlineCreativePackagePatch<TPackage, LegacyCreativeAsset>[];\n}\n\ntype InternalInlineCreativesOptions<TPackage extends LegacyInlineCreativePackage> =\n InlineCreativesForPackagesBaseOptions<TPackage> & {\n legacyFormatConverter?: LegacyFormatConverter;\n canonicalFormatLegacyResolver?: CanonicalFormatLegacyResolver;\n };\n\nfunction inlineCreativesForPackagesInternal<TPackage extends LegacyInlineCreativePackage>(\n packages: ReadonlyArray<TPackage>,\n creatives: ReadonlyArray<CreativeAsset>,\n options: InternalInlineCreativesOptions<TPackage>,\n creativeFormatWireMode: CreativeFormatWireMode\n): InlineCreativePackagePatch<TPackage, CreativeAsset>[] {\n const {\n assignments,\n includeUnassignedCreatives = assignments == null || assignments.length === 0,\n filterByFormat = true,\n packageId = defaultPackageId,\n onUnmatchedAssignment = 'throw',\n onMissingCreative = 'throw',\n onIncompatibleAssignment = 'throw',\n legacyFormatConverter,\n canonicalFormatLegacyResolver,\n } = options;\n\n const creativesById = new Map<string, CreativeAsset>();\n for (const creative of creatives) {\n if (typeof creative.creative_id === 'string') {\n creativesById.set(creative.creative_id, creative);\n }\n }\n\n const assignmentsByPackage = new Map<string, InlineCreativeAssignment[]>();\n const matchedPackageIds = new Set<string>();\n for (const assignment of assignments ?? []) {\n const creative = creativesById.get(assignment.creative_id);\n if (!creative) {\n if (onMissingCreative === 'throw') {\n throw new Error(\n `inlineCreativesForPackages assignment references unknown creative_id \"${assignment.creative_id}\"`\n );\n }\n continue;\n }\n const existing = assignmentsByPackage.get(assignment.package_id);\n if (existing) {\n existing.push(assignment);\n } else {\n assignmentsByPackage.set(assignment.package_id, [assignment]);\n }\n }\n\n const result = packages.map((pkg, index) => {\n const id = packageId(pkg, index);\n if (id) matchedPackageIds.add(id);\n const assigned = id ? (assignmentsByPackage.get(id) ?? []) : [];\n const assignedCreativeIds = new Set(assigned.map(a => a.creative_id));\n const inlined: CreativeAsset[] = [];\n\n for (const assignment of assigned) {\n const creative = creativesById.get(assignment.creative_id);\n if (!creative) continue;\n const sourceCompatible = !filterByFormat || creativeMatchesPackage(pkg, creative);\n if (!sourceCompatible) {\n if (onIncompatibleAssignment === 'throw') {\n throw new Error(\n `inlineCreativesForPackages assignment creative_id \"${assignment.creative_id}\" ` +\n `does not match package_id \"${assignment.package_id}\" format selectors`\n );\n }\n continue;\n }\n const projected = projectCreativeForDelivery(\n creative,\n pkg,\n creativeFormatWireMode,\n 'inline_creatives',\n legacyFormatConverter,\n canonicalFormatLegacyResolver\n );\n const compatible = !filterByFormat || creativeMatchesPackage(pkg, projected);\n if (compatible) {\n inlined.push(applyAssignmentToCreative(projected, assignment));\n } else if (onIncompatibleAssignment === 'throw') {\n throw new Error(\n `inlineCreativesForPackages assignment creative_id \"${assignment.creative_id}\" ` +\n `does not match package_id \"${assignment.package_id}\" format selectors`\n );\n }\n }\n\n if (includeUnassignedCreatives) {\n for (const creative of creatives) {\n if (typeof creative.creative_id === 'string' && assignedCreativeIds.has(creative.creative_id)) continue;\n if (filterByFormat && !creativeMatchesPackage(pkg, creative)) continue;\n const projected = projectCreativeForDelivery(\n creative,\n pkg,\n creativeFormatWireMode,\n 'inline_creatives',\n legacyFormatConverter,\n canonicalFormatLegacyResolver\n );\n if (!filterByFormat || creativeMatchesPackage(pkg, projected)) {\n inlined.push({ ...projected });\n }\n }\n }\n\n const next: Record<string, unknown> = { ...(pkg as Record<string, unknown>) };\n delete next.creatives;\n if (inlined.length > 0) {\n next.creatives = inlined;\n }\n return next as InlineCreativePackagePatch<TPackage, CreativeAsset>;\n });\n\n if (onUnmatchedAssignment === 'throw') {\n const unmatched = [...assignmentsByPackage.keys()].filter(package_id => !matchedPackageIds.has(package_id));\n if (unmatched.length > 0) {\n throw new Error(`inlineCreativesForPackages assignment references unknown package_id \"${unmatched[0]}\"`);\n }\n }\n\n return result;\n}\n\nfunction assertCanonicalInlineInputs(\n packages: ReadonlyArray<InlineCreativePackage>,\n creatives: ReadonlyArray<CanonicalCreativeAsset>,\n options: object\n): void {\n const unsafeOptions = options as Record<string, unknown>;\n if (\n 'creativeFormatWireMode' in unsafeOptions ||\n 'legacyFormatConverter' in unsafeOptions ||\n 'canonicalFormatLegacyResolver' in unsafeOptions\n ) {\n throw new Error(\n 'inlineCreativesForPackages is canonical-only; use inlineCreativesForPackagesLegacy for legacy wire projection'\n );\n }\n\n for (const pkg of packages) {\n if ('format_ids' in (pkg as object)) {\n throw new Error(\n 'inlineCreativesForPackages does not accept legacy package format_ids; use canonical format selectors or inlineCreativesForPackagesLegacy'\n );\n }\n }\n\n for (const creative of creatives) {\n if ('format_id' in (creative as object)) {\n throw new Error(\n 'inlineCreativesForPackages does not accept legacy creative format_id; use canonical format_kind or inlineCreativesForPackagesLegacy'\n );\n }\n }\n}\n\nfunction defaultPackageId(pkg: LegacyInlineCreativePackage): string | undefined {\n if (typeof pkg.package_id === 'string') return pkg.package_id;\n if (typeof pkg.context?.buyer_ref === 'string') return pkg.context.buyer_ref;\n if (typeof pkg.buyer_ref === 'string') return pkg.buyer_ref;\n return undefined;\n}\n\nfunction applyAssignmentToCreative(creative: CreativeAsset, assignment: InlineCreativeAssignment): CreativeAsset {\n const next: Record<string, unknown> = { ...(creative as unknown as Record<string, unknown>) };\n delete next.weight;\n delete next.placement_ids;\n delete next.placement_refs;\n\n if (assignment.weight !== undefined) next.weight = assignment.weight;\n if (assignment.placement_refs !== undefined) {\n next.placement_refs = [...assignment.placement_refs];\n } else if (assignment.placement_ids !== undefined) {\n next.placement_ids = [...assignment.placement_ids];\n }\n return next as unknown as CreativeAsset;\n}\n\nfunction creativeMatchesPackage(pkg: LegacyInlineCreativePackage, creative: CreativeAsset): boolean {\n const packageFormatIds = arrayOfObjects(pkg.format_ids);\n const packageFormatOptionRefs = arrayOfObjects(pkg.format_option_refs);\n const packageFormatKind = typeof pkg.format_kind === 'string' ? pkg.format_kind : undefined;\n const packageParams = plainObject(pkg.params);\n\n const creativeRecord = creative as unknown as Record<string, unknown>;\n const creativeFormatId = plainObject(creativeRecord.format_id);\n const creativeFormatOptionRef = plainObject(creativeRecord.format_option_ref);\n\n if (packageFormatOptionRefs.length > 0) {\n if (creativeFormatOptionRef) {\n return packageFormatOptionRefs.some(formatOptionRef => deepEqual(formatOptionRef, creativeFormatOptionRef));\n }\n if (packageFormatIds.length === 0 && packageFormatKind === undefined) return false;\n }\n\n if (packageFormatKind !== undefined) {\n return (\n creativeRecord.format_kind === packageFormatKind &&\n paramsMatchCreative(packageParams, creativeFormatId ?? creativeParamsFromAssets(creativeRecord.assets))\n );\n }\n\n if (packageFormatIds.length > 0) {\n if (creativeFormatId !== undefined) {\n return packageFormatIds.some(formatId => formatIdMatches(formatId, creativeFormatId));\n }\n return packageFormatIds.some(\n formatId =>\n typeof formatId.id === 'string' &&\n resolveCanonicalFormatKind(formatId.id, {\n agentUrl: typeof formatId.agent_url === 'string' ? formatId.agent_url : undefined,\n }) === creativeRecord.format_kind\n );\n }\n\n return true;\n}\n\nfunction creativeParamsFromAssets(value: unknown): Record<string, unknown> | undefined {\n const assets = plainObject(value);\n if (!assets) return undefined;\n for (const assetValue of Object.values(assets)) {\n const candidates = Array.isArray(assetValue) ? assetValue : [assetValue];\n for (const candidate of candidates) {\n const asset = plainObject(candidate);\n if (!asset) continue;\n const params: Record<string, unknown> = {};\n if (typeof asset.width === 'number') params.width = asset.width;\n if (typeof asset.height === 'number') params.height = asset.height;\n if (typeof asset.duration_ms === 'number') params.duration_ms = asset.duration_ms;\n if (Object.keys(params).length > 0) return params;\n }\n }\n return undefined;\n}\n\nfunction arrayOfObjects(value: unknown): Record<string, unknown>[] {\n return Array.isArray(value) ? value.flatMap(item => (plainObject(item) ? [item] : [])) : [];\n}\n\nfunction plainObject(value: unknown): Record<string, unknown> | undefined {\n return value !== null && typeof value === 'object' && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : undefined;\n}\n\nfunction formatIdMatches(expected: Record<string, unknown>, actual: Record<string, unknown>): boolean {\n const expectedId = expected.id;\n const actualId = actual.id;\n if (expectedId !== actualId) return false;\n\n const expectedAgentUrl = normalizeAgentUrl(expected.agent_url);\n const actualAgentUrl = normalizeAgentUrl(actual.agent_url);\n if (expectedAgentUrl !== undefined && actualAgentUrl !== undefined && expectedAgentUrl !== actualAgentUrl) {\n return false;\n }\n\n for (const key of ['width', 'height', 'duration_ms']) {\n if (expected[key] !== undefined && actual[key] !== undefined && expected[key] !== actual[key]) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction paramsMatchCreative(\n packageParams: Record<string, unknown> | undefined,\n creativeFormatId: Record<string, unknown> | undefined\n): boolean {\n if (!packageParams) return true;\n\n let constrained = false;\n const actualWidth = numberValue(creativeFormatId, 'width');\n const actualHeight = numberValue(creativeFormatId, 'height');\n const actualDuration =\n numberValue(creativeFormatId, 'duration_ms') ?? numberValue(creativeFormatId, 'duration_ms_exact');\n\n const sizes = Array.isArray(packageParams.sizes)\n ? packageParams.sizes.flatMap(size => (plainObject(size) ? [size] : []))\n : [];\n if (sizes.length > 0) {\n constrained = true;\n if (\n actualWidth === undefined ||\n actualHeight === undefined ||\n !sizes.some(size => numberValue(size, 'width') === actualWidth && numberValue(size, 'height') === actualHeight)\n ) {\n return false;\n }\n }\n\n const expectedWidth = numberValue(packageParams, 'width');\n if (expectedWidth !== undefined) {\n constrained = true;\n if (actualWidth !== expectedWidth) return false;\n }\n\n const expectedHeight = numberValue(packageParams, 'height');\n if (expectedHeight !== undefined) {\n constrained = true;\n if (actualHeight !== expectedHeight) return false;\n }\n\n const minWidth = numberValue(packageParams, 'min_width');\n if (minWidth !== undefined) {\n constrained = true;\n if (actualWidth === undefined || actualWidth < minWidth) return false;\n }\n\n const maxWidth = numberValue(packageParams, 'max_width');\n if (maxWidth !== undefined) {\n constrained = true;\n if (actualWidth === undefined || actualWidth > maxWidth) return false;\n }\n\n const minHeight = numberValue(packageParams, 'min_height');\n if (minHeight !== undefined) {\n constrained = true;\n if (actualHeight === undefined || actualHeight < minHeight) return false;\n }\n\n const maxHeight = numberValue(packageParams, 'max_height');\n if (maxHeight !== undefined) {\n constrained = true;\n if (actualHeight === undefined || actualHeight > maxHeight) return false;\n }\n\n const exactDuration = numberValue(packageParams, 'duration_ms_exact') ?? numberValue(packageParams, 'duration_ms');\n if (exactDuration !== undefined) {\n constrained = true;\n if (actualDuration !== exactDuration) return false;\n }\n\n const durationRange = numberRange(packageParams.duration_ms_range);\n if (durationRange) {\n constrained = true;\n const [minDuration, maxDuration] = durationRange;\n if (actualDuration === undefined) return false;\n if (minDuration !== undefined && actualDuration < minDuration) return false;\n if (maxDuration !== undefined && actualDuration > maxDuration) return false;\n }\n\n return constrained ? creativeFormatId !== undefined : true;\n}\n\nfunction numberValue(object: Record<string, unknown> | undefined, key: string): number | undefined {\n const value = object?.[key];\n return typeof value === 'number' && Number.isFinite(value) ? value : undefined;\n}\n\nfunction numberRange(value: unknown): [number | undefined, number | undefined] | undefined {\n if (!Array.isArray(value) || value.length !== 2) return undefined;\n const [min, max] = value;\n const minValue = min === null ? undefined : typeof min === 'number' && Number.isFinite(min) ? min : undefined;\n const maxValue = max === null ? undefined : typeof max === 'number' && Number.isFinite(max) ? max : undefined;\n return minValue === undefined && maxValue === undefined ? undefined : [minValue, maxValue];\n}\n\nfunction normalizeAgentUrl(value: unknown): string | undefined {\n if (typeof value !== 'string') return undefined;\n let end = value.length;\n while (end > 0 && value.charCodeAt(end - 1) === 47) {\n end -= 1;\n }\n return end === value.length ? value : value.slice(0, end);\n}\n\nfunction deepEqual(a: unknown, b: unknown): boolean {\n return JSON.stringify(sortKeys(a)) === JSON.stringify(sortKeys(b));\n}\n\nfunction sortKeys(value: unknown): unknown {\n if (Array.isArray(value)) return value.map(sortKeys);\n const object = plainObject(value);\n if (!object) return value;\n return Object.fromEntries(\n Object.entries(object)\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([k, v]) => [k, sortKeys(v)])\n );\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1,34 +1,38 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
|
|
3
|
-
type
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
type RepeatableAssetGroup = Extract<FormatAsset, {
|
|
7
|
-
item_type: 'repeatable_group';
|
|
8
|
-
}>;
|
|
1
|
+
import type { IndividualAudioAsset, IndividualBriefAsset, IndividualCatalogAsset, IndividualCssAsset, IndividualDaastAsset, IndividualHtmlAsset, IndividualImageAsset, IndividualJavaScriptAsset, IndividualMarkdownAsset, IndividualTextAsset, IndividualUrlAsset, IndividualVastAsset, IndividualVideoAsset, IndividualWebhookAsset, RepeatableGroupAsset } from '../types/tools.generated.mjs';
|
|
2
|
+
/** Canonical structural union for the slots declared in an `assets` array. */
|
|
3
|
+
export type CanonicalFormatAssetSlot = IndividualAudioAsset | IndividualBriefAsset | IndividualCatalogAsset | IndividualCssAsset | IndividualDaastAsset | IndividualHtmlAsset | IndividualImageAsset | IndividualJavaScriptAsset | IndividualMarkdownAsset | IndividualTextAsset | IndividualUrlAsset | IndividualVastAsset | IndividualVideoAsset | IndividualWebhookAsset | RepeatableGroupAsset;
|
|
4
|
+
export type IndividualFormatAssetSlot = Exclude<CanonicalFormatAssetSlot, RepeatableGroupAsset>;
|
|
5
|
+
export type RepeatableFormatAssetGroup = RepeatableGroupAsset;
|
|
9
6
|
/**
|
|
10
|
-
*
|
|
7
|
+
* Minimal structural input for asset inspection. It deliberately has no
|
|
8
|
+
* `format_id`, `agent_url`, name, or other legacy catalog identity.
|
|
9
|
+
*/
|
|
10
|
+
export interface FormatAssetsInput {
|
|
11
|
+
assets?: CanonicalFormatAssetSlot[];
|
|
12
|
+
/** Deprecated v2 compatibility field; values are normalized as required slots. */
|
|
13
|
+
assets_required?: unknown[];
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Get asset slots from any structural asset container.
|
|
11
17
|
*
|
|
12
18
|
* Returns the assets from the v3 `assets` field. For backward compatibility with v2 servers,
|
|
13
19
|
* this function also handles the deprecated `assets_required` field if present.
|
|
14
20
|
*
|
|
15
|
-
* @param format -
|
|
21
|
+
* @param format - An object containing canonical `assets` slots
|
|
16
22
|
* @returns Array of assets
|
|
17
23
|
*
|
|
18
24
|
* @example
|
|
19
25
|
* ```typescript
|
|
20
|
-
* const
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
* console.log(`${format.name} has ${assets.length} assets`);
|
|
24
|
-
* }
|
|
26
|
+
* const assets = getFormatAssets({
|
|
27
|
+
* assets: [FormatAsset.image({ asset_id: 'hero', required: true })]
|
|
28
|
+
* });
|
|
25
29
|
* ```
|
|
26
30
|
*/
|
|
27
|
-
export declare function getFormatAssets(format:
|
|
31
|
+
export declare function getFormatAssets(format: FormatAssetsInput): CanonicalFormatAssetSlot[];
|
|
28
32
|
/**
|
|
29
|
-
* Get only required
|
|
33
|
+
* Get only required slots from an asset container.
|
|
30
34
|
*
|
|
31
|
-
* @param format -
|
|
35
|
+
* @param format - A structural asset container
|
|
32
36
|
* @returns Array of required assets only
|
|
33
37
|
*
|
|
34
38
|
* @example
|
|
@@ -37,14 +41,14 @@ export declare function getFormatAssets(format: Format): FormatAsset[];
|
|
|
37
41
|
* console.log(`Must provide ${requiredAssets.length} assets`);
|
|
38
42
|
* ```
|
|
39
43
|
*/
|
|
40
|
-
export declare function getRequiredAssets(format:
|
|
44
|
+
export declare function getRequiredAssets(format: FormatAssetsInput): CanonicalFormatAssetSlot[];
|
|
41
45
|
/**
|
|
42
|
-
* Get only optional
|
|
46
|
+
* Get only optional slots from an asset container.
|
|
43
47
|
*
|
|
44
48
|
* Note: When using deprecated `assets_required`, this will always return empty
|
|
45
49
|
* since assets_required only contained required assets.
|
|
46
50
|
*
|
|
47
|
-
* @param format -
|
|
51
|
+
* @param format - A structural asset container
|
|
48
52
|
* @returns Array of optional assets only
|
|
49
53
|
*
|
|
50
54
|
* @example
|
|
@@ -53,47 +57,46 @@ export declare function getRequiredAssets(format: Format): FormatAsset[];
|
|
|
53
57
|
* console.log(`Can optionally provide ${optionalAssets.length} additional assets`);
|
|
54
58
|
* ```
|
|
55
59
|
*/
|
|
56
|
-
export declare function getOptionalAssets(format:
|
|
60
|
+
export declare function getOptionalAssets(format: FormatAssetsInput): CanonicalFormatAssetSlot[];
|
|
57
61
|
/**
|
|
58
|
-
* Get individual
|
|
62
|
+
* Get individual slots (not repeatable groups) from an asset container.
|
|
59
63
|
*
|
|
60
|
-
* @param format -
|
|
64
|
+
* @param format - A structural asset container
|
|
61
65
|
* @returns Array of individual assets
|
|
62
66
|
*/
|
|
63
|
-
export declare function getIndividualAssets(format:
|
|
67
|
+
export declare function getIndividualAssets(format: FormatAssetsInput): IndividualFormatAssetSlot[];
|
|
64
68
|
/**
|
|
65
|
-
* Get repeatable asset groups from
|
|
69
|
+
* Get repeatable asset groups from an asset container.
|
|
66
70
|
*
|
|
67
|
-
* @param format -
|
|
71
|
+
* @param format - A structural asset container
|
|
68
72
|
* @returns Array of repeatable asset groups
|
|
69
73
|
*/
|
|
70
|
-
export declare function getRepeatableGroups(format:
|
|
74
|
+
export declare function getRepeatableGroups(format: FormatAssetsInput): RepeatableFormatAssetGroup[];
|
|
71
75
|
/**
|
|
72
76
|
* Check if format uses deprecated assets_required field (for migration warnings)
|
|
73
77
|
*
|
|
74
|
-
* @param format -
|
|
78
|
+
* @param format - A structural asset container
|
|
75
79
|
* @returns true if using deprecated field, false if using new field or neither
|
|
76
80
|
*
|
|
77
81
|
* @example
|
|
78
82
|
* ```typescript
|
|
79
83
|
* if (usesDeprecatedAssetsField(format)) {
|
|
80
|
-
* console.warn(
|
|
84
|
+
* console.warn('Asset container uses deprecated assets_required field');
|
|
81
85
|
* }
|
|
82
86
|
* ```
|
|
83
87
|
*/
|
|
84
|
-
export declare function usesDeprecatedAssetsField(format:
|
|
88
|
+
export declare function usesDeprecatedAssetsField(format: FormatAssetsInput): boolean;
|
|
85
89
|
/**
|
|
86
|
-
* Get the count of
|
|
90
|
+
* Get the count of slots in an asset container.
|
|
87
91
|
*
|
|
88
|
-
* @param format -
|
|
92
|
+
* @param format - A structural asset container
|
|
89
93
|
* @returns Number of assets, or 0 if none defined
|
|
90
94
|
*/
|
|
91
|
-
export declare function getAssetCount(format:
|
|
95
|
+
export declare function getAssetCount(format: FormatAssetsInput): number;
|
|
92
96
|
/**
|
|
93
|
-
* Check if
|
|
97
|
+
* Check if an asset container has any slots defined.
|
|
94
98
|
*
|
|
95
|
-
* @param format -
|
|
99
|
+
* @param format - A structural asset container
|
|
96
100
|
* @returns true if format has assets, false otherwise
|
|
97
101
|
*/
|
|
98
|
-
export declare function hasAssets(format:
|
|
99
|
-
export {};
|
|
102
|
+
export declare function hasAssets(format: FormatAssetsInput): boolean;
|
|
@@ -1,34 +1,38 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
|
|
3
|
-
type
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
type RepeatableAssetGroup = Extract<FormatAsset, {
|
|
7
|
-
item_type: 'repeatable_group';
|
|
8
|
-
}>;
|
|
1
|
+
import type { IndividualAudioAsset, IndividualBriefAsset, IndividualCatalogAsset, IndividualCssAsset, IndividualDaastAsset, IndividualHtmlAsset, IndividualImageAsset, IndividualJavaScriptAsset, IndividualMarkdownAsset, IndividualTextAsset, IndividualUrlAsset, IndividualVastAsset, IndividualVideoAsset, IndividualWebhookAsset, RepeatableGroupAsset } from '../types/tools.generated';
|
|
2
|
+
/** Canonical structural union for the slots declared in an `assets` array. */
|
|
3
|
+
export type CanonicalFormatAssetSlot = IndividualAudioAsset | IndividualBriefAsset | IndividualCatalogAsset | IndividualCssAsset | IndividualDaastAsset | IndividualHtmlAsset | IndividualImageAsset | IndividualJavaScriptAsset | IndividualMarkdownAsset | IndividualTextAsset | IndividualUrlAsset | IndividualVastAsset | IndividualVideoAsset | IndividualWebhookAsset | RepeatableGroupAsset;
|
|
4
|
+
export type IndividualFormatAssetSlot = Exclude<CanonicalFormatAssetSlot, RepeatableGroupAsset>;
|
|
5
|
+
export type RepeatableFormatAssetGroup = RepeatableGroupAsset;
|
|
9
6
|
/**
|
|
10
|
-
*
|
|
7
|
+
* Minimal structural input for asset inspection. It deliberately has no
|
|
8
|
+
* `format_id`, `agent_url`, name, or other legacy catalog identity.
|
|
9
|
+
*/
|
|
10
|
+
export interface FormatAssetsInput {
|
|
11
|
+
assets?: CanonicalFormatAssetSlot[];
|
|
12
|
+
/** Deprecated v2 compatibility field; values are normalized as required slots. */
|
|
13
|
+
assets_required?: unknown[];
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Get asset slots from any structural asset container.
|
|
11
17
|
*
|
|
12
18
|
* Returns the assets from the v3 `assets` field. For backward compatibility with v2 servers,
|
|
13
19
|
* this function also handles the deprecated `assets_required` field if present.
|
|
14
20
|
*
|
|
15
|
-
* @param format -
|
|
21
|
+
* @param format - An object containing canonical `assets` slots
|
|
16
22
|
* @returns Array of assets
|
|
17
23
|
*
|
|
18
24
|
* @example
|
|
19
25
|
* ```typescript
|
|
20
|
-
* const
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
* console.log(`${format.name} has ${assets.length} assets`);
|
|
24
|
-
* }
|
|
26
|
+
* const assets = getFormatAssets({
|
|
27
|
+
* assets: [FormatAsset.image({ asset_id: 'hero', required: true })]
|
|
28
|
+
* });
|
|
25
29
|
* ```
|
|
26
30
|
*/
|
|
27
|
-
export declare function getFormatAssets(format:
|
|
31
|
+
export declare function getFormatAssets(format: FormatAssetsInput): CanonicalFormatAssetSlot[];
|
|
28
32
|
/**
|
|
29
|
-
* Get only required
|
|
33
|
+
* Get only required slots from an asset container.
|
|
30
34
|
*
|
|
31
|
-
* @param format -
|
|
35
|
+
* @param format - A structural asset container
|
|
32
36
|
* @returns Array of required assets only
|
|
33
37
|
*
|
|
34
38
|
* @example
|
|
@@ -37,14 +41,14 @@ export declare function getFormatAssets(format: Format): FormatAsset[];
|
|
|
37
41
|
* console.log(`Must provide ${requiredAssets.length} assets`);
|
|
38
42
|
* ```
|
|
39
43
|
*/
|
|
40
|
-
export declare function getRequiredAssets(format:
|
|
44
|
+
export declare function getRequiredAssets(format: FormatAssetsInput): CanonicalFormatAssetSlot[];
|
|
41
45
|
/**
|
|
42
|
-
* Get only optional
|
|
46
|
+
* Get only optional slots from an asset container.
|
|
43
47
|
*
|
|
44
48
|
* Note: When using deprecated `assets_required`, this will always return empty
|
|
45
49
|
* since assets_required only contained required assets.
|
|
46
50
|
*
|
|
47
|
-
* @param format -
|
|
51
|
+
* @param format - A structural asset container
|
|
48
52
|
* @returns Array of optional assets only
|
|
49
53
|
*
|
|
50
54
|
* @example
|
|
@@ -53,48 +57,47 @@ export declare function getRequiredAssets(format: Format): FormatAsset[];
|
|
|
53
57
|
* console.log(`Can optionally provide ${optionalAssets.length} additional assets`);
|
|
54
58
|
* ```
|
|
55
59
|
*/
|
|
56
|
-
export declare function getOptionalAssets(format:
|
|
60
|
+
export declare function getOptionalAssets(format: FormatAssetsInput): CanonicalFormatAssetSlot[];
|
|
57
61
|
/**
|
|
58
|
-
* Get individual
|
|
62
|
+
* Get individual slots (not repeatable groups) from an asset container.
|
|
59
63
|
*
|
|
60
|
-
* @param format -
|
|
64
|
+
* @param format - A structural asset container
|
|
61
65
|
* @returns Array of individual assets
|
|
62
66
|
*/
|
|
63
|
-
export declare function getIndividualAssets(format:
|
|
67
|
+
export declare function getIndividualAssets(format: FormatAssetsInput): IndividualFormatAssetSlot[];
|
|
64
68
|
/**
|
|
65
|
-
* Get repeatable asset groups from
|
|
69
|
+
* Get repeatable asset groups from an asset container.
|
|
66
70
|
*
|
|
67
|
-
* @param format -
|
|
71
|
+
* @param format - A structural asset container
|
|
68
72
|
* @returns Array of repeatable asset groups
|
|
69
73
|
*/
|
|
70
|
-
export declare function getRepeatableGroups(format:
|
|
74
|
+
export declare function getRepeatableGroups(format: FormatAssetsInput): RepeatableFormatAssetGroup[];
|
|
71
75
|
/**
|
|
72
76
|
* Check if format uses deprecated assets_required field (for migration warnings)
|
|
73
77
|
*
|
|
74
|
-
* @param format -
|
|
78
|
+
* @param format - A structural asset container
|
|
75
79
|
* @returns true if using deprecated field, false if using new field or neither
|
|
76
80
|
*
|
|
77
81
|
* @example
|
|
78
82
|
* ```typescript
|
|
79
83
|
* if (usesDeprecatedAssetsField(format)) {
|
|
80
|
-
* console.warn(
|
|
84
|
+
* console.warn('Asset container uses deprecated assets_required field');
|
|
81
85
|
* }
|
|
82
86
|
* ```
|
|
83
87
|
*/
|
|
84
|
-
export declare function usesDeprecatedAssetsField(format:
|
|
88
|
+
export declare function usesDeprecatedAssetsField(format: FormatAssetsInput): boolean;
|
|
85
89
|
/**
|
|
86
|
-
* Get the count of
|
|
90
|
+
* Get the count of slots in an asset container.
|
|
87
91
|
*
|
|
88
|
-
* @param format -
|
|
92
|
+
* @param format - A structural asset container
|
|
89
93
|
* @returns Number of assets, or 0 if none defined
|
|
90
94
|
*/
|
|
91
|
-
export declare function getAssetCount(format:
|
|
95
|
+
export declare function getAssetCount(format: FormatAssetsInput): number;
|
|
92
96
|
/**
|
|
93
|
-
* Check if
|
|
97
|
+
* Check if an asset container has any slots defined.
|
|
94
98
|
*
|
|
95
|
-
* @param format -
|
|
99
|
+
* @param format - A structural asset container
|
|
96
100
|
* @returns true if format has assets, false otherwise
|
|
97
101
|
*/
|
|
98
|
-
export declare function hasAssets(format:
|
|
99
|
-
export {};
|
|
102
|
+
export declare function hasAssets(format: FormatAssetsInput): boolean;
|
|
100
103
|
//# sourceMappingURL=format-assets.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"format-assets.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/format-assets.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"format-assets.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/format-assets.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,oBAAoB,EACpB,oBAAoB,EACpB,sBAAsB,EACtB,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,yBAAyB,EACzB,uBAAuB,EACvB,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,sBAAsB,EACtB,oBAAoB,EACrB,MAAM,0BAA0B,CAAC;AAElC,8EAA8E;AAC9E,MAAM,MAAM,wBAAwB,GAChC,oBAAoB,GACpB,oBAAoB,GACpB,sBAAsB,GACtB,kBAAkB,GAClB,oBAAoB,GACpB,mBAAmB,GACnB,oBAAoB,GACpB,yBAAyB,GACzB,uBAAuB,GACvB,mBAAmB,GACnB,kBAAkB,GAClB,mBAAmB,GACnB,oBAAoB,GACpB,sBAAsB,GACtB,oBAAoB,CAAC;AAEzB,MAAM,MAAM,yBAAyB,GAAG,OAAO,CAAC,wBAAwB,EAAE,oBAAoB,CAAC,CAAC;AAChG,MAAM,MAAM,0BAA0B,GAAG,oBAAoB,CAAC;AAE9D;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,wBAAwB,EAAE,CAAC;IACpC,kFAAkF;IAClF,eAAe,CAAC,EAAE,OAAO,EAAE,CAAC;CAC7B;AAMD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,iBAAiB,GAAG,wBAAwB,EAAE,CAiBrF;AAmBD;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,GAAG,wBAAwB,EAAE,CAEvF;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,GAAG,wBAAwB,EAAE,CAEvF;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,iBAAiB,GAAG,yBAAyB,EAAE,CAI1F;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,iBAAiB,GAAG,0BAA0B,EAAE,CAI3F;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAG5E;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,CAE/D;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAE5D"}
|
|
@@ -52,7 +52,9 @@ function getOptionalAssets(format) {
|
|
|
52
52
|
return getFormatAssets(format).filter((asset) => !asset.required);
|
|
53
53
|
}
|
|
54
54
|
function getIndividualAssets(format) {
|
|
55
|
-
return getFormatAssets(format).filter(
|
|
55
|
+
return getFormatAssets(format).filter(
|
|
56
|
+
(asset) => asset.item_type === "individual"
|
|
57
|
+
);
|
|
56
58
|
}
|
|
57
59
|
function getRepeatableGroups(format) {
|
|
58
60
|
return getFormatAssets(format).filter(
|