@adcp/sdk 12.0.0 → 12.0.1
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/dist/lib/adapters/content-standards-adapter.mjs +0 -6
- package/dist/lib/adapters/content-standards-adapter.mjs.map +1 -1
- package/dist/lib/adapters/derived-account-store.mjs +0 -6
- package/dist/lib/adapters/derived-account-store.mjs.map +1 -1
- package/dist/lib/adapters/governance-adapter.mjs +0 -6
- package/dist/lib/adapters/governance-adapter.mjs.map +1 -1
- package/dist/lib/adapters/implicit-account-store.mjs +0 -6
- package/dist/lib/adapters/implicit-account-store.mjs.map +1 -1
- package/dist/lib/adapters/index.mjs +0 -6
- package/dist/lib/adapters/index.mjs.map +1 -1
- package/dist/lib/adapters/legacy/v2-5/create_media_buy.mjs +0 -6
- package/dist/lib/adapters/legacy/v2-5/create_media_buy.mjs.map +1 -1
- package/dist/lib/adapters/legacy/v2-5/get_products.mjs +0 -6
- package/dist/lib/adapters/legacy/v2-5/get_products.mjs.map +1 -1
- package/dist/lib/adapters/legacy/v2-5/index.mjs +0 -6
- package/dist/lib/adapters/legacy/v2-5/index.mjs.map +1 -1
- package/dist/lib/adapters/legacy/v2-5/list_creative_formats.mjs +0 -6
- package/dist/lib/adapters/legacy/v2-5/list_creative_formats.mjs.map +1 -1
- package/dist/lib/adapters/legacy/v2-5/preview_creative.mjs +0 -6
- package/dist/lib/adapters/legacy/v2-5/preview_creative.mjs.map +1 -1
- package/dist/lib/adapters/legacy/v2-5/sync_creatives.mjs +0 -6
- package/dist/lib/adapters/legacy/v2-5/sync_creatives.mjs.map +1 -1
- package/dist/lib/adapters/legacy/v2-5/types.mjs +0 -6
- package/dist/lib/adapters/legacy/v2-5/update_media_buy.mjs +0 -6
- package/dist/lib/adapters/legacy/v2-5/update_media_buy.mjs.map +1 -1
- package/dist/lib/adapters/oauth-passthrough-resolver.mjs +0 -6
- package/dist/lib/adapters/oauth-passthrough-resolver.mjs.map +1 -1
- package/dist/lib/adapters/property-list-adapter.mjs +0 -6
- package/dist/lib/adapters/property-list-adapter.mjs.map +1 -1
- package/dist/lib/adapters/roster-account-store.mjs +0 -6
- package/dist/lib/adapters/roster-account-store.mjs.map +1 -1
- package/dist/lib/adapters/si-session-manager.mjs +0 -6
- package/dist/lib/adapters/si-session-manager.mjs.map +1 -1
- package/dist/lib/adapters/version/3.0/brand-fields.mjs +0 -6
- package/dist/lib/adapters/version/3.0/brand-fields.mjs.map +1 -1
- package/dist/lib/adapters/version/3.0/get-products.mjs +0 -6
- package/dist/lib/adapters/version/3.0/get-products.mjs.map +1 -1
- package/dist/lib/adapters/version/3.0/index.mjs +0 -6
- package/dist/lib/adapters/version/3.0/index.mjs.map +1 -1
- package/dist/lib/adapters/version/3.0/sync-accounts.mjs +0 -6
- package/dist/lib/adapters/version/3.0/sync-accounts.mjs.map +1 -1
- package/dist/lib/adapters/version/index.mjs +0 -6
- package/dist/lib/adapters/version/index.mjs.map +1 -1
- package/dist/lib/adapters/version/types.mjs +0 -6
- package/dist/lib/advanced.mjs +0 -6
- package/dist/lib/advanced.mjs.map +1 -1
- package/dist/lib/agents/index.generated.mjs +0 -6
- package/dist/lib/agents/index.generated.mjs.map +1 -1
- package/dist/lib/auth/index.mjs +0 -6
- package/dist/lib/auth/index.mjs.map +1 -1
- package/dist/lib/auth/oauth/CLIFlowHandler.mjs +0 -6
- package/dist/lib/auth/oauth/CLIFlowHandler.mjs.map +1 -1
- package/dist/lib/auth/oauth/ClientCredentialsFlow.mjs +0 -6
- package/dist/lib/auth/oauth/ClientCredentialsFlow.mjs.map +1 -1
- package/dist/lib/auth/oauth/MCPOAuthProvider.mjs +0 -6
- package/dist/lib/auth/oauth/MCPOAuthProvider.mjs.map +1 -1
- package/dist/lib/auth/oauth/NonInteractiveFlowHandler.mjs +0 -6
- package/dist/lib/auth/oauth/NonInteractiveFlowHandler.mjs.map +1 -1
- package/dist/lib/auth/oauth/authorization-required.mjs +0 -6
- package/dist/lib/auth/oauth/authorization-required.mjs.map +1 -1
- package/dist/lib/auth/oauth/diagnose.mjs +0 -6
- package/dist/lib/auth/oauth/diagnose.mjs.map +1 -1
- package/dist/lib/auth/oauth/diagnostics.mjs +0 -6
- package/dist/lib/auth/oauth/diagnostics.mjs.map +1 -1
- package/dist/lib/auth/oauth/discovery.mjs +0 -6
- package/dist/lib/auth/oauth/discovery.mjs.map +1 -1
- package/dist/lib/auth/oauth/file-storage.mjs +0 -6
- package/dist/lib/auth/oauth/file-storage.mjs.map +1 -1
- package/dist/lib/auth/oauth/index.mjs +0 -6
- package/dist/lib/auth/oauth/index.mjs.map +1 -1
- package/dist/lib/auth/oauth/secret-resolver.mjs +0 -6
- package/dist/lib/auth/oauth/secret-resolver.mjs.map +1 -1
- package/dist/lib/auth/oauth/storage-registry.mjs +0 -6
- package/dist/lib/auth/oauth/storage-registry.mjs.map +1 -1
- package/dist/lib/auth/oauth/types.mjs +0 -6
- package/dist/lib/auth/oauth/types.mjs.map +1 -1
- package/dist/lib/auth/oauth/web-flow.mjs +0 -6
- package/dist/lib/auth/oauth/web-flow.mjs.map +1 -1
- package/dist/lib/brand/index.mjs +0 -6
- package/dist/lib/brand/index.mjs.map +1 -1
- package/dist/lib/canonical-references/index.mjs +6 -7
- package/dist/lib/canonical-references/index.mjs.map +1 -1
- package/dist/lib/client/index.mjs +0 -6
- package/dist/lib/client/index.mjs.map +1 -1
- package/dist/lib/compliance/index.mjs +0 -6
- package/dist/lib/compliance/index.mjs.map +1 -1
- package/dist/lib/compliance-fixtures/index.mjs +0 -6
- package/dist/lib/compliance-fixtures/index.mjs.map +1 -1
- package/dist/lib/compliance-fixtures/test-authorization-server.mjs +0 -6
- package/dist/lib/compliance-fixtures/test-authorization-server.mjs.map +1 -1
- package/dist/lib/conformance/index.mjs +0 -6
- package/dist/lib/conformance/index.mjs.map +1 -1
- package/dist/lib/conformance/invariants/uniformError.mjs +0 -6
- package/dist/lib/conformance/invariants/uniformError.mjs.map +1 -1
- package/dist/lib/conformance/invariants/uniformErrorComparator.mjs +0 -6
- package/dist/lib/conformance/invariants/uniformErrorComparator.mjs.map +1 -1
- package/dist/lib/conformance/oracle.mjs +0 -6
- package/dist/lib/conformance/oracle.mjs.map +1 -1
- package/dist/lib/conformance/runConformance.mjs +0 -6
- package/dist/lib/conformance/runConformance.mjs.map +1 -1
- package/dist/lib/conformance/runners.mjs +0 -6
- package/dist/lib/conformance/runners.mjs.map +1 -1
- package/dist/lib/conformance/schemaArbitrary.mjs +0 -6
- package/dist/lib/conformance/schemaArbitrary.mjs.map +1 -1
- package/dist/lib/conformance/schemaLoader.mjs +5 -6
- package/dist/lib/conformance/schemaLoader.mjs.map +1 -1
- package/dist/lib/conformance/seeder.mjs +0 -6
- package/dist/lib/conformance/seeder.mjs.map +1 -1
- package/dist/lib/conformance/types.mjs +0 -6
- package/dist/lib/conformance/types.mjs.map +1 -1
- package/dist/lib/conformance/webhook.mjs +0 -6
- package/dist/lib/conformance/webhook.mjs.map +1 -1
- package/dist/lib/core/ADCPMultiAgentClient.mjs +0 -6
- package/dist/lib/core/ADCPMultiAgentClient.mjs.map +1 -1
- package/dist/lib/core/AgentClient.mjs +0 -6
- package/dist/lib/core/AgentClient.mjs.map +1 -1
- package/dist/lib/core/AsyncHandler.mjs +0 -6
- package/dist/lib/core/AsyncHandler.mjs.map +1 -1
- package/dist/lib/core/ConfigurationManager.mjs +0 -6
- package/dist/lib/core/ConfigurationManager.mjs.map +1 -1
- package/dist/lib/core/ConversationTypes.mjs +0 -6
- package/dist/lib/core/CreativeAgentClient.mjs +0 -6
- package/dist/lib/core/CreativeAgentClient.mjs.map +1 -1
- package/dist/lib/core/GovernanceMiddleware.mjs +0 -6
- package/dist/lib/core/GovernanceMiddleware.mjs.map +1 -1
- package/dist/lib/core/GovernanceTypes.mjs +0 -6
- package/dist/lib/core/GovernanceTypes.mjs.map +1 -1
- package/dist/lib/core/ProtocolResponseParser.mjs +0 -6
- package/dist/lib/core/ProtocolResponseParser.mjs.map +1 -1
- package/dist/lib/core/ResponseValidator.mjs +0 -6
- package/dist/lib/core/ResponseValidator.mjs.map +1 -1
- package/dist/lib/core/SingleAgentClient.mjs +0 -6
- package/dist/lib/core/SingleAgentClient.mjs.map +1 -1
- package/dist/lib/core/TaskEventTypes.mjs +0 -6
- package/dist/lib/core/TaskEventTypes.mjs.map +1 -1
- package/dist/lib/core/TaskExecutor.mjs +0 -6
- package/dist/lib/core/TaskExecutor.mjs.map +1 -1
- package/dist/lib/core/match.mjs +0 -6
- package/dist/lib/core/match.mjs.map +1 -1
- package/dist/lib/core/task-status.mjs +0 -6
- package/dist/lib/core/task-status.mjs.map +1 -1
- package/dist/lib/core/webhook-url.mjs +0 -6
- package/dist/lib/core/webhook-url.mjs.map +1 -1
- package/dist/lib/discovery/adagents-redirects.mjs +0 -6
- package/dist/lib/discovery/adagents-redirects.mjs.map +1 -1
- package/dist/lib/discovery/agent-directory.mjs +0 -6
- package/dist/lib/discovery/agent-directory.mjs.map +1 -1
- package/dist/lib/discovery/inline-publisher-properties.mjs +0 -6
- package/dist/lib/discovery/inline-publisher-properties.mjs.map +1 -1
- package/dist/lib/discovery/network-consistency-checker.mjs +0 -6
- package/dist/lib/discovery/network-consistency-checker.mjs.map +1 -1
- package/dist/lib/discovery/property-crawler.mjs +0 -6
- package/dist/lib/discovery/property-crawler.mjs.map +1 -1
- package/dist/lib/discovery/property-index.mjs +0 -6
- package/dist/lib/discovery/property-index.mjs.map +1 -1
- package/dist/lib/discovery/publisher-property-selector.mjs +0 -6
- package/dist/lib/discovery/publisher-property-selector.mjs.map +1 -1
- package/dist/lib/discovery/resolve-agent-properties.mjs +0 -6
- package/dist/lib/discovery/resolve-agent-properties.mjs.map +1 -1
- package/dist/lib/discovery/types.mjs +0 -6
- package/dist/lib/discovery/validate-adagents.mjs +0 -6
- package/dist/lib/discovery/validate-adagents.mjs.map +1 -1
- package/dist/lib/enums.mjs +0 -6
- package/dist/lib/enums.mjs.map +1 -1
- package/dist/lib/errors/index.mjs +0 -6
- package/dist/lib/errors/index.mjs.map +1 -1
- package/dist/lib/express-mcp/index.mjs +0 -6
- package/dist/lib/express-mcp/index.mjs.map +1 -1
- package/dist/lib/governance/index.mjs +0 -6
- package/dist/lib/governance/index.mjs.map +1 -1
- package/dist/lib/handlers/types.mjs +0 -6
- package/dist/lib/handlers/types.mjs.map +1 -1
- package/dist/lib/index.mjs +0 -6
- package/dist/lib/index.mjs.map +1 -1
- package/dist/lib/media-buy/available-actions.mjs +0 -6
- package/dist/lib/media-buy/available-actions.mjs.map +1 -1
- package/dist/lib/media-buy/index.mjs +0 -6
- package/dist/lib/media-buy/index.mjs.map +1 -1
- package/dist/lib/media-buy/preflight.mjs +0 -6
- package/dist/lib/media-buy/preflight.mjs.map +1 -1
- package/dist/lib/media-buy/property-policy.mjs +0 -6
- package/dist/lib/media-buy/property-policy.mjs.map +1 -1
- package/dist/lib/media-buy/types.mjs +0 -6
- package/dist/lib/media-buy/types.mjs.map +1 -1
- package/dist/lib/media-buy/update-fields.generated.mjs +0 -6
- package/dist/lib/media-buy/update-fields.generated.mjs.map +1 -1
- package/dist/lib/mock-server/creative-ad-server/seed-data.mjs +0 -6
- package/dist/lib/mock-server/creative-ad-server/seed-data.mjs.map +1 -1
- package/dist/lib/mock-server/creative-ad-server/server.mjs +0 -6
- package/dist/lib/mock-server/creative-ad-server/server.mjs.map +1 -1
- package/dist/lib/mock-server/creative-template/seed-data.mjs +0 -6
- package/dist/lib/mock-server/creative-template/seed-data.mjs.map +1 -1
- package/dist/lib/mock-server/creative-template/server.mjs +0 -6
- package/dist/lib/mock-server/creative-template/server.mjs.map +1 -1
- package/dist/lib/mock-server/index.mjs +0 -6
- package/dist/lib/mock-server/index.mjs.map +1 -1
- package/dist/lib/mock-server/sales-guaranteed/recipe.mjs +0 -6
- package/dist/lib/mock-server/sales-guaranteed/recipe.mjs.map +1 -1
- package/dist/lib/mock-server/sales-guaranteed/seed-data.mjs +0 -6
- package/dist/lib/mock-server/sales-guaranteed/seed-data.mjs.map +1 -1
- package/dist/lib/mock-server/sales-guaranteed/server.mjs +0 -6
- package/dist/lib/mock-server/sales-guaranteed/server.mjs.map +1 -1
- package/dist/lib/mock-server/sales-non-guaranteed/recipe.mjs +0 -6
- package/dist/lib/mock-server/sales-non-guaranteed/recipe.mjs.map +1 -1
- package/dist/lib/mock-server/sales-non-guaranteed/seed-data.mjs +0 -6
- package/dist/lib/mock-server/sales-non-guaranteed/seed-data.mjs.map +1 -1
- package/dist/lib/mock-server/sales-non-guaranteed/server.mjs +0 -6
- package/dist/lib/mock-server/sales-non-guaranteed/server.mjs.map +1 -1
- package/dist/lib/mock-server/sales-social/seed-data.mjs +0 -6
- package/dist/lib/mock-server/sales-social/seed-data.mjs.map +1 -1
- package/dist/lib/mock-server/sales-social/server.mjs +0 -6
- package/dist/lib/mock-server/sales-social/server.mjs.map +1 -1
- package/dist/lib/mock-server/scenario.mjs +0 -6
- package/dist/lib/mock-server/scenario.mjs.map +1 -1
- package/dist/lib/mock-server/signal-marketplace/seed-data.mjs +0 -6
- package/dist/lib/mock-server/signal-marketplace/seed-data.mjs.map +1 -1
- package/dist/lib/mock-server/signal-marketplace/server.mjs +0 -6
- package/dist/lib/mock-server/signal-marketplace/server.mjs.map +1 -1
- package/dist/lib/mock-server/sponsored-intelligence/seed-data.mjs +0 -6
- package/dist/lib/mock-server/sponsored-intelligence/seed-data.mjs.map +1 -1
- package/dist/lib/mock-server/sponsored-intelligence/server.mjs +0 -6
- package/dist/lib/mock-server/sponsored-intelligence/server.mjs.map +1 -1
- package/dist/lib/net/address-guards.mjs +0 -6
- package/dist/lib/net/address-guards.mjs.map +1 -1
- package/dist/lib/net/index.mjs +0 -6
- package/dist/lib/net/index.mjs.map +1 -1
- package/dist/lib/net/ssrf-fetch.mjs +0 -6
- package/dist/lib/net/ssrf-fetch.mjs.map +1 -1
- package/dist/lib/observability/index.mjs +0 -6
- package/dist/lib/observability/index.mjs.map +1 -1
- package/dist/lib/observability/tracing.mjs +6 -7
- package/dist/lib/observability/tracing.mjs.map +1 -1
- package/dist/lib/protocols/a2a.mjs +0 -6
- package/dist/lib/protocols/a2a.mjs.map +1 -1
- package/dist/lib/protocols/abort.mjs +0 -6
- package/dist/lib/protocols/abort.mjs.map +1 -1
- package/dist/lib/protocols/index.mjs +0 -6
- package/dist/lib/protocols/index.mjs.map +1 -1
- package/dist/lib/protocols/mcp-modern.mjs +0 -6
- package/dist/lib/protocols/mcp-modern.mjs.map +1 -1
- package/dist/lib/protocols/mcp-tasks.mjs +0 -6
- package/dist/lib/protocols/mcp-tasks.mjs.map +1 -1
- package/dist/lib/protocols/mcp.mjs +0 -6
- package/dist/lib/protocols/mcp.mjs.map +1 -1
- package/dist/lib/protocols/rawResponseCapture.mjs +0 -6
- package/dist/lib/protocols/rawResponseCapture.mjs.map +1 -1
- package/dist/lib/protocols/responseSizeLimit.mjs +0 -6
- package/dist/lib/protocols/responseSizeLimit.mjs.map +1 -1
- package/dist/lib/protocols/transportDiagnostics.mjs +0 -6
- package/dist/lib/protocols/transportDiagnostics.mjs.map +1 -1
- package/dist/lib/registry/cursor-store.mjs +0 -6
- package/dist/lib/registry/cursor-store.mjs.map +1 -1
- package/dist/lib/registry/feed-stream.mjs +0 -6
- package/dist/lib/registry/feed-stream.mjs.map +1 -1
- package/dist/lib/registry/index.mjs +0 -6
- package/dist/lib/registry/index.mjs.map +1 -1
- package/dist/lib/registry/property-registry.mjs +0 -6
- package/dist/lib/registry/property-registry.mjs.map +1 -1
- package/dist/lib/registry/sync.mjs +0 -6
- package/dist/lib/registry/sync.mjs.map +1 -1
- package/dist/lib/registry/types.generated.mjs +0 -6
- package/dist/lib/registry/types.mjs +0 -6
- package/dist/lib/schemas/index.mjs +0 -6
- package/dist/lib/schemas/index.mjs.map +1 -1
- package/dist/lib/schemas-data/v2.5/_provenance.json +1 -1
- package/dist/lib/server/a2a-adapter.mjs +0 -6
- package/dist/lib/server/a2a-adapter.mjs.map +1 -1
- package/dist/lib/server/account-mode.mjs +0 -6
- package/dist/lib/server/account-mode.mjs.map +1 -1
- package/dist/lib/server/adcp-server.mjs +0 -6
- package/dist/lib/server/adcp-server.mjs.map +1 -1
- package/dist/lib/server/auth-introspection.mjs +0 -6
- package/dist/lib/server/auth-introspection.mjs.map +1 -1
- package/dist/lib/server/auth-signature.mjs +0 -6
- package/dist/lib/server/auth-signature.mjs.map +1 -1
- package/dist/lib/server/auth.mjs +0 -6
- package/dist/lib/server/auth.mjs.map +1 -1
- package/dist/lib/server/create-adcp-server.mjs +0 -6
- package/dist/lib/server/create-adcp-server.mjs.map +1 -1
- package/dist/lib/server/credential-policy.mjs +0 -6
- package/dist/lib/server/credential-policy.mjs.map +1 -1
- package/dist/lib/server/ctx-metadata/backends/memory.mjs +0 -6
- package/dist/lib/server/ctx-metadata/backends/memory.mjs.map +1 -1
- package/dist/lib/server/ctx-metadata/backends/pg.mjs +0 -6
- package/dist/lib/server/ctx-metadata/backends/pg.mjs.map +1 -1
- package/dist/lib/server/ctx-metadata/backends/redis.mjs +0 -6
- package/dist/lib/server/ctx-metadata/backends/redis.mjs.map +1 -1
- package/dist/lib/server/ctx-metadata/index.mjs +0 -6
- package/dist/lib/server/ctx-metadata/index.mjs.map +1 -1
- package/dist/lib/server/ctx-metadata/store.mjs +0 -6
- package/dist/lib/server/ctx-metadata/store.mjs.map +1 -1
- package/dist/lib/server/ctx-metadata/wire-shape.mjs +0 -6
- package/dist/lib/server/ctx-metadata/wire-shape.mjs.map +1 -1
- package/dist/lib/server/decisioning/account.mjs +0 -6
- package/dist/lib/server/decisioning/account.mjs.map +1 -1
- package/dist/lib/server/decisioning/admin-router.mjs +0 -6
- package/dist/lib/server/decisioning/admin-router.mjs.map +1 -1
- package/dist/lib/server/decisioning/assembly-helpers.mjs +0 -6
- package/dist/lib/server/decisioning/assembly-helpers.mjs.map +1 -1
- package/dist/lib/server/decisioning/async-outcome.mjs +0 -6
- package/dist/lib/server/decisioning/async-outcome.mjs.map +1 -1
- package/dist/lib/server/decisioning/buyer-agent.mjs +0 -6
- package/dist/lib/server/decisioning/buyer-agent.mjs.map +1 -1
- package/dist/lib/server/decisioning/capabilities.mjs +0 -6
- package/dist/lib/server/decisioning/capabilities.mjs.map +1 -1
- package/dist/lib/server/decisioning/compose.mjs +0 -6
- package/dist/lib/server/decisioning/compose.mjs.map +1 -1
- package/dist/lib/server/decisioning/context.mjs +0 -6
- package/dist/lib/server/decisioning/errors-typed.mjs +0 -6
- package/dist/lib/server/decisioning/errors-typed.mjs.map +1 -1
- package/dist/lib/server/decisioning/helpers.mjs +0 -6
- package/dist/lib/server/decisioning/helpers.mjs.map +1 -1
- package/dist/lib/server/decisioning/index.mjs +0 -6
- package/dist/lib/server/decisioning/index.mjs.map +1 -1
- package/dist/lib/server/decisioning/list-helpers.mjs +0 -6
- package/dist/lib/server/decisioning/list-helpers.mjs.map +1 -1
- package/dist/lib/server/decisioning/manifest-helpers.mjs +0 -6
- package/dist/lib/server/decisioning/manifest-helpers.mjs.map +1 -1
- package/dist/lib/server/decisioning/pagination.mjs +0 -6
- package/dist/lib/server/decisioning/platform-helpers.mjs +0 -6
- package/dist/lib/server/decisioning/platform-helpers.mjs.map +1 -1
- package/dist/lib/server/decisioning/platform.mjs +0 -6
- package/dist/lib/server/decisioning/proposal/dispatch.mjs +0 -6
- package/dist/lib/server/decisioning/proposal/dispatch.mjs.map +1 -1
- package/dist/lib/server/decisioning/proposal/index.mjs +0 -6
- package/dist/lib/server/decisioning/proposal/index.mjs.map +1 -1
- package/dist/lib/server/decisioning/proposal/lifecycle.mjs +0 -6
- package/dist/lib/server/decisioning/proposal/lifecycle.mjs.map +1 -1
- package/dist/lib/server/decisioning/proposal/mock-manager.mjs +0 -6
- package/dist/lib/server/decisioning/proposal/mock-manager.mjs.map +1 -1
- package/dist/lib/server/decisioning/proposal/store.mjs +0 -6
- package/dist/lib/server/decisioning/proposal/store.mjs.map +1 -1
- package/dist/lib/server/decisioning/proposal/types.mjs +0 -6
- package/dist/lib/server/decisioning/proposal/types.mjs.map +1 -1
- package/dist/lib/server/decisioning/resolve-presets.mjs +0 -6
- package/dist/lib/server/decisioning/resolve-presets.mjs.map +1 -1
- package/dist/lib/server/decisioning/runtime/entity-hydration.generated.mjs +0 -6
- package/dist/lib/server/decisioning/runtime/entity-hydration.generated.mjs.map +1 -1
- package/dist/lib/server/decisioning/runtime/from-platform.mjs +0 -6
- package/dist/lib/server/decisioning/runtime/from-platform.mjs.map +1 -1
- package/dist/lib/server/decisioning/runtime/observed-modes.mjs +0 -6
- package/dist/lib/server/decisioning/runtime/observed-modes.mjs.map +1 -1
- package/dist/lib/server/decisioning/runtime/postgres-task-registry.mjs +0 -6
- package/dist/lib/server/decisioning/runtime/postgres-task-registry.mjs.map +1 -1
- package/dist/lib/server/decisioning/runtime/protocol-for-tool.mjs +0 -6
- package/dist/lib/server/decisioning/runtime/protocol-for-tool.mjs.map +1 -1
- package/dist/lib/server/decisioning/runtime/task-registry.mjs +0 -6
- package/dist/lib/server/decisioning/runtime/task-registry.mjs.map +1 -1
- package/dist/lib/server/decisioning/runtime/to-context.mjs +0 -6
- package/dist/lib/server/decisioning/runtime/to-context.mjs.map +1 -1
- package/dist/lib/server/decisioning/runtime/validate-platform.mjs +0 -6
- package/dist/lib/server/decisioning/runtime/validate-platform.mjs.map +1 -1
- package/dist/lib/server/decisioning/specialisms/audiences.mjs +0 -6
- package/dist/lib/server/decisioning/specialisms/brand-rights.mjs +0 -6
- package/dist/lib/server/decisioning/specialisms/campaign-governance.mjs +0 -6
- package/dist/lib/server/decisioning/specialisms/content-standards.mjs +0 -6
- package/dist/lib/server/decisioning/specialisms/creative-ad-server.mjs +0 -6
- package/dist/lib/server/decisioning/specialisms/creative.mjs +0 -6
- package/dist/lib/server/decisioning/specialisms/lists.mjs +0 -6
- package/dist/lib/server/decisioning/specialisms/sales.mjs +0 -6
- package/dist/lib/server/decisioning/specialisms/signals.mjs +0 -6
- package/dist/lib/server/decisioning/specialisms/sponsored-intelligence.mjs +0 -6
- package/dist/lib/server/decisioning/start-time.mjs +0 -6
- package/dist/lib/server/decisioning/start-time.mjs.map +1 -1
- package/dist/lib/server/decisioning/status-changes.mjs +0 -6
- package/dist/lib/server/decisioning/status-changes.mjs.map +1 -1
- package/dist/lib/server/decisioning/status-mappers.mjs +0 -6
- package/dist/lib/server/decisioning/status-mappers.mjs.map +1 -1
- package/dist/lib/server/decisioning/tenant-registry.mjs +0 -6
- package/dist/lib/server/decisioning/tenant-registry.mjs.map +1 -1
- package/dist/lib/server/decisioning/tenant-store.mjs +0 -6
- package/dist/lib/server/decisioning/tenant-store.mjs.map +1 -1
- package/dist/lib/server/decisioning/validate-specialisms.mjs +0 -6
- package/dist/lib/server/decisioning/validate-specialisms.mjs.map +1 -1
- package/dist/lib/server/dynamic-registry.mjs +0 -6
- package/dist/lib/server/dynamic-registry.mjs.map +1 -1
- package/dist/lib/server/envelope-allowlist.mjs +0 -6
- package/dist/lib/server/envelope-allowlist.mjs.map +1 -1
- package/dist/lib/server/error-arm-tools.mjs +5 -6
- package/dist/lib/server/error-arm-tools.mjs.map +1 -1
- package/dist/lib/server/errors.mjs +0 -6
- package/dist/lib/server/errors.mjs.map +1 -1
- package/dist/lib/server/example-tld-guard.mjs +0 -6
- package/dist/lib/server/example-tld-guard.mjs.map +1 -1
- package/dist/lib/server/express-adapter.mjs +0 -6
- package/dist/lib/server/express-adapter.mjs.map +1 -1
- package/dist/lib/server/governance.mjs +0 -6
- package/dist/lib/server/governance.mjs.map +1 -1
- package/dist/lib/server/idempotency/backends/lazy.mjs +0 -6
- package/dist/lib/server/idempotency/backends/lazy.mjs.map +1 -1
- package/dist/lib/server/idempotency/backends/memory.mjs +0 -6
- package/dist/lib/server/idempotency/backends/memory.mjs.map +1 -1
- package/dist/lib/server/idempotency/backends/pg.mjs +0 -6
- package/dist/lib/server/idempotency/backends/pg.mjs.map +1 -1
- package/dist/lib/server/idempotency/backends/redis.mjs +0 -6
- package/dist/lib/server/idempotency/backends/redis.mjs.map +1 -1
- package/dist/lib/server/idempotency/index.mjs +0 -6
- package/dist/lib/server/idempotency/index.mjs.map +1 -1
- package/dist/lib/server/idempotency/store.mjs +0 -6
- package/dist/lib/server/idempotency/store.mjs.map +1 -1
- package/dist/lib/server/index.mjs +0 -6
- package/dist/lib/server/index.mjs.map +1 -1
- package/dist/lib/server/legacy/v5/index.mjs +0 -6
- package/dist/lib/server/legacy/v5/index.mjs.map +1 -1
- package/dist/lib/server/mcp-modern-server.mjs +0 -6
- package/dist/lib/server/mcp-modern-server.mjs.map +1 -1
- package/dist/lib/server/media-buy-actions.mjs +0 -6
- package/dist/lib/server/media-buy-actions.mjs.map +1 -1
- package/dist/lib/server/media-buy-helpers.mjs +0 -6
- package/dist/lib/server/media-buy-helpers.mjs.map +1 -1
- package/dist/lib/server/media-buy-store.mjs +0 -6
- package/dist/lib/server/media-buy-store.mjs.map +1 -1
- package/dist/lib/server/normalize-errors.mjs +0 -6
- package/dist/lib/server/normalize-errors.mjs.map +1 -1
- package/dist/lib/server/operational-platform.mjs +0 -6
- package/dist/lib/server/operational-platform.mjs.map +1 -1
- package/dist/lib/server/pick-safe-details.mjs +0 -6
- package/dist/lib/server/pick-safe-details.mjs.map +1 -1
- package/dist/lib/server/pin-and-bind-fetch.mjs +0 -6
- package/dist/lib/server/pin-and-bind-fetch.mjs.map +1 -1
- package/dist/lib/server/postgres-state-store.mjs +0 -6
- package/dist/lib/server/postgres-state-store.mjs.map +1 -1
- package/dist/lib/server/postgres-task-store.mjs +0 -6
- package/dist/lib/server/postgres-task-store.mjs.map +1 -1
- package/dist/lib/server/product-defaults.mjs +0 -6
- package/dist/lib/server/product-defaults.mjs.map +1 -1
- package/dist/lib/server/redact.mjs +0 -6
- package/dist/lib/server/redact.mjs.map +1 -1
- package/dist/lib/server/responses.mjs +0 -6
- package/dist/lib/server/responses.mjs.map +1 -1
- package/dist/lib/server/serve.mjs +0 -6
- package/dist/lib/server/serve.mjs.map +1 -1
- package/dist/lib/server/socket-mode/conformance-client.mjs +0 -6
- package/dist/lib/server/socket-mode/conformance-client.mjs.map +1 -1
- package/dist/lib/server/socket-mode/index.mjs +0 -6
- package/dist/lib/server/socket-mode/index.mjs.map +1 -1
- package/dist/lib/server/socket-mode/ws-transport.mjs +0 -6
- package/dist/lib/server/socket-mode/ws-transport.mjs.map +1 -1
- package/dist/lib/server/state-machine.mjs +0 -6
- package/dist/lib/server/state-machine.mjs.map +1 -1
- package/dist/lib/server/state-store.mjs +0 -6
- package/dist/lib/server/state-store.mjs.map +1 -1
- package/dist/lib/server/structured-serialize.mjs +0 -6
- package/dist/lib/server/structured-serialize.mjs.map +1 -1
- package/dist/lib/server/targeting-helpers.mjs +0 -6
- package/dist/lib/server/targeting-helpers.mjs.map +1 -1
- package/dist/lib/server/tasks.mjs +0 -6
- package/dist/lib/server/tasks.mjs.map +1 -1
- package/dist/lib/server/test-controller-bridge.mjs +0 -6
- package/dist/lib/server/test-controller-bridge.mjs.map +1 -1
- package/dist/lib/server/test-controller.mjs +0 -6
- package/dist/lib/server/test-controller.mjs.map +1 -1
- package/dist/lib/server/upstream-helpers.mjs +0 -6
- package/dist/lib/server/upstream-helpers.mjs.map +1 -1
- package/dist/lib/server/webhook-emitter.mjs +0 -6
- package/dist/lib/server/webhook-emitter.mjs.map +1 -1
- package/dist/lib/server/wire-safe.mjs +0 -6
- package/dist/lib/server/wire-safe.mjs.map +1 -1
- package/dist/lib/server/wire-spec-fields.generated.mjs +0 -6
- package/dist/lib/server/wire-spec-fields.generated.mjs.map +1 -1
- package/dist/lib/server/wrap-envelope.mjs +0 -6
- package/dist/lib/server/wrap-envelope.mjs.map +1 -1
- package/dist/lib/signing/agent-context.mjs +0 -6
- package/dist/lib/signing/agent-context.mjs.map +1 -1
- package/dist/lib/signing/agent-fetch.mjs +0 -6
- package/dist/lib/signing/agent-fetch.mjs.map +1 -1
- package/dist/lib/signing/agent-resolver/canonicalize.mjs +0 -6
- package/dist/lib/signing/agent-resolver/canonicalize.mjs.map +1 -1
- package/dist/lib/signing/agent-resolver/capabilities-types.mjs +0 -6
- package/dist/lib/signing/agent-resolver/capabilities-types.mjs.map +1 -1
- package/dist/lib/signing/agent-resolver/consistency.mjs +0 -6
- package/dist/lib/signing/agent-resolver/consistency.mjs.map +1 -1
- package/dist/lib/signing/agent-resolver/errors.mjs +0 -6
- package/dist/lib/signing/agent-resolver/errors.mjs.map +1 -1
- package/dist/lib/signing/agent-resolver/etld.mjs +0 -6
- package/dist/lib/signing/agent-resolver/etld.mjs.map +1 -1
- package/dist/lib/signing/agent-resolver/fetch-helpers.mjs +0 -6
- package/dist/lib/signing/agent-resolver/fetch-helpers.mjs.map +1 -1
- package/dist/lib/signing/agent-resolver/index.mjs +0 -6
- package/dist/lib/signing/agent-resolver/index.mjs.map +1 -1
- package/dist/lib/signing/agent-resolver/jwks-set.mjs +0 -6
- package/dist/lib/signing/agent-resolver/jwks-set.mjs.map +1 -1
- package/dist/lib/signing/agent-resolver/resolve-agent.mjs +0 -6
- package/dist/lib/signing/agent-resolver/resolve-agent.mjs.map +1 -1
- package/dist/lib/signing/agent-resolver/select-agent.mjs +0 -6
- package/dist/lib/signing/agent-resolver/select-agent.mjs.map +1 -1
- package/dist/lib/signing/agent-resolver/strict-json.mjs +0 -6
- package/dist/lib/signing/agent-resolver/strict-json.mjs.map +1 -1
- package/dist/lib/signing/brand-jwks.mjs +0 -6
- package/dist/lib/signing/brand-jwks.mjs.map +1 -1
- package/dist/lib/signing/canonicalize.mjs +0 -6
- package/dist/lib/signing/canonicalize.mjs.map +1 -1
- package/dist/lib/signing/capability-cache.mjs +0 -6
- package/dist/lib/signing/capability-cache.mjs.map +1 -1
- package/dist/lib/signing/capability-priming.mjs +0 -6
- package/dist/lib/signing/capability-priming.mjs.map +1 -1
- package/dist/lib/signing/client.mjs +0 -6
- package/dist/lib/signing/client.mjs.map +1 -1
- package/dist/lib/signing/content-digest.mjs +0 -6
- package/dist/lib/signing/content-digest.mjs.map +1 -1
- package/dist/lib/signing/crypto.mjs +0 -6
- package/dist/lib/signing/crypto.mjs.map +1 -1
- package/dist/lib/signing/ecdsa-encoding.mjs +0 -6
- package/dist/lib/signing/ecdsa-encoding.mjs.map +1 -1
- package/dist/lib/signing/errors.mjs +0 -6
- package/dist/lib/signing/errors.mjs.map +1 -1
- package/dist/lib/signing/fetch-async.mjs +0 -6
- package/dist/lib/signing/fetch-async.mjs.map +1 -1
- package/dist/lib/signing/fetch.mjs +0 -6
- package/dist/lib/signing/fetch.mjs.map +1 -1
- package/dist/lib/signing/index.mjs +0 -6
- package/dist/lib/signing/index.mjs.map +1 -1
- package/dist/lib/signing/jwks-helpers.mjs +0 -6
- package/dist/lib/signing/jwks-helpers.mjs.map +1 -1
- package/dist/lib/signing/jwks-https.mjs +0 -6
- package/dist/lib/signing/jwks-https.mjs.map +1 -1
- package/dist/lib/signing/jwks.mjs +0 -6
- package/dist/lib/signing/jwks.mjs.map +1 -1
- package/dist/lib/signing/middleware.mjs +0 -6
- package/dist/lib/signing/middleware.mjs.map +1 -1
- package/dist/lib/signing/parser.mjs +0 -6
- package/dist/lib/signing/parser.mjs.map +1 -1
- package/dist/lib/signing/postgres-replay-store.mjs +0 -6
- package/dist/lib/signing/postgres-replay-store.mjs.map +1 -1
- package/dist/lib/signing/protocol-response.mjs +0 -6
- package/dist/lib/signing/protocol-response.mjs.map +1 -1
- package/dist/lib/signing/provider.mjs +0 -6
- package/dist/lib/signing/redis-replay-store.mjs +0 -6
- package/dist/lib/signing/redis-replay-store.mjs.map +1 -1
- package/dist/lib/signing/replay.mjs +0 -6
- package/dist/lib/signing/replay.mjs.map +1 -1
- package/dist/lib/signing/request-context.mjs +0 -6
- package/dist/lib/signing/request-context.mjs.map +1 -1
- package/dist/lib/signing/revocation-https.mjs +0 -6
- package/dist/lib/signing/revocation-https.mjs.map +1 -1
- package/dist/lib/signing/revocation.mjs +0 -6
- package/dist/lib/signing/revocation.mjs.map +1 -1
- package/dist/lib/signing/server.mjs +0 -6
- package/dist/lib/signing/server.mjs.map +1 -1
- package/dist/lib/signing/signer-async.mjs +0 -6
- package/dist/lib/signing/signer-async.mjs.map +1 -1
- package/dist/lib/signing/signer.mjs +0 -6
- package/dist/lib/signing/signer.mjs.map +1 -1
- package/dist/lib/signing/testing.mjs +0 -6
- package/dist/lib/signing/testing.mjs.map +1 -1
- package/dist/lib/signing/types.mjs +0 -6
- package/dist/lib/signing/types.mjs.map +1 -1
- package/dist/lib/signing/verifier.mjs +0 -6
- package/dist/lib/signing/verifier.mjs.map +1 -1
- package/dist/lib/signing/webhook-auth-detection.mjs +0 -6
- package/dist/lib/signing/webhook-auth-detection.mjs.map +1 -1
- package/dist/lib/signing/webhook-verifier.mjs +0 -6
- package/dist/lib/signing/webhook-verifier.mjs.map +1 -1
- package/dist/lib/storage/MemoryStorage.mjs +0 -6
- package/dist/lib/storage/MemoryStorage.mjs.map +1 -1
- package/dist/lib/storage/interfaces.mjs +0 -6
- package/dist/lib/substitution/encoder/SubstitutionEncoder.mjs +0 -6
- package/dist/lib/substitution/encoder/SubstitutionEncoder.mjs.map +1 -1
- package/dist/lib/substitution/encoder/index.mjs +0 -6
- package/dist/lib/substitution/encoder/index.mjs.map +1 -1
- package/dist/lib/substitution/index.mjs +0 -6
- package/dist/lib/substitution/index.mjs.map +1 -1
- package/dist/lib/substitution/observer/SubstitutionObserver.mjs +0 -6
- package/dist/lib/substitution/observer/SubstitutionObserver.mjs.map +1 -1
- package/dist/lib/substitution/observer/alignment.mjs +0 -6
- package/dist/lib/substitution/observer/alignment.mjs.map +1 -1
- package/dist/lib/substitution/observer/assertions.mjs +0 -6
- package/dist/lib/substitution/observer/assertions.mjs.map +1 -1
- package/dist/lib/substitution/observer/html-parser.mjs +0 -6
- package/dist/lib/substitution/observer/html-parser.mjs.map +1 -1
- package/dist/lib/substitution/observer/index.mjs +0 -6
- package/dist/lib/substitution/observer/index.mjs.map +1 -1
- package/dist/lib/substitution/observer/ssrf.mjs +0 -6
- package/dist/lib/substitution/observer/ssrf.mjs.map +1 -1
- package/dist/lib/substitution/rfc3986.mjs +0 -6
- package/dist/lib/substitution/rfc3986.mjs.map +1 -1
- package/dist/lib/substitution/translate.mjs +0 -6
- package/dist/lib/substitution/translate.mjs.map +1 -1
- package/dist/lib/substitution/types.mjs +0 -6
- package/dist/lib/substitution/vectors.mjs +0 -6
- package/dist/lib/substitution/vectors.mjs.map +1 -1
- package/dist/lib/testing/agent-tester.mjs +0 -6
- package/dist/lib/testing/agent-tester.mjs.map +1 -1
- package/dist/lib/testing/client.mjs +0 -6
- package/dist/lib/testing/client.mjs.map +1 -1
- package/dist/lib/testing/compliance/briefs.mjs +0 -6
- package/dist/lib/testing/compliance/briefs.mjs.map +1 -1
- package/dist/lib/testing/compliance/comply.mjs +0 -6
- package/dist/lib/testing/compliance/comply.mjs.map +1 -1
- package/dist/lib/testing/compliance/index.mjs +0 -6
- package/dist/lib/testing/compliance/index.mjs.map +1 -1
- package/dist/lib/testing/compliance/spec-conformance.mjs +0 -6
- package/dist/lib/testing/compliance/spec-conformance.mjs.map +1 -1
- package/dist/lib/testing/compliance/storyboard-tracks.mjs +0 -6
- package/dist/lib/testing/compliance/storyboard-tracks.mjs.map +1 -1
- package/dist/lib/testing/compliance/summary.mjs +0 -6
- package/dist/lib/testing/compliance/summary.mjs.map +1 -1
- package/dist/lib/testing/compliance/types.mjs +0 -6
- package/dist/lib/testing/comply-controller.mjs +0 -6
- package/dist/lib/testing/comply-controller.mjs.map +1 -1
- package/dist/lib/testing/controller-assertions.mjs +0 -6
- package/dist/lib/testing/controller-assertions.mjs.map +1 -1
- package/dist/lib/testing/formatter.mjs +0 -6
- package/dist/lib/testing/formatter.mjs.map +1 -1
- package/dist/lib/testing/index.mjs +0 -6
- package/dist/lib/testing/index.mjs.map +1 -1
- package/dist/lib/testing/local-agent-runner.mjs +0 -6
- package/dist/lib/testing/local-agent-runner.mjs.map +1 -1
- package/dist/lib/testing/orchestrator.mjs +0 -6
- package/dist/lib/testing/orchestrator.mjs.map +1 -1
- package/dist/lib/testing/personas/index.mjs +0 -6
- package/dist/lib/testing/personas/index.mjs.map +1 -1
- package/dist/lib/testing/scenarios/brand-rights.mjs +0 -6
- package/dist/lib/testing/scenarios/brand-rights.mjs.map +1 -1
- package/dist/lib/testing/scenarios/capabilities.mjs +0 -6
- package/dist/lib/testing/scenarios/capabilities.mjs.map +1 -1
- package/dist/lib/testing/scenarios/creative.mjs +0 -6
- package/dist/lib/testing/scenarios/creative.mjs.map +1 -1
- package/dist/lib/testing/scenarios/deterministic.mjs +0 -6
- package/dist/lib/testing/scenarios/deterministic.mjs.map +1 -1
- package/dist/lib/testing/scenarios/discovery.mjs +0 -6
- package/dist/lib/testing/scenarios/discovery.mjs.map +1 -1
- package/dist/lib/testing/scenarios/edge-cases.mjs +0 -6
- package/dist/lib/testing/scenarios/edge-cases.mjs.map +1 -1
- package/dist/lib/testing/scenarios/error-compliance.mjs +0 -6
- package/dist/lib/testing/scenarios/error-compliance.mjs.map +1 -1
- package/dist/lib/testing/scenarios/governance.mjs +0 -6
- package/dist/lib/testing/scenarios/governance.mjs.map +1 -1
- package/dist/lib/testing/scenarios/health.mjs +0 -6
- package/dist/lib/testing/scenarios/health.mjs.map +1 -1
- package/dist/lib/testing/scenarios/index.mjs +0 -6
- package/dist/lib/testing/scenarios/index.mjs.map +1 -1
- package/dist/lib/testing/scenarios/media-buy.mjs +0 -6
- package/dist/lib/testing/scenarios/media-buy.mjs.map +1 -1
- package/dist/lib/testing/scenarios/schema-compliance.mjs +0 -6
- package/dist/lib/testing/scenarios/schema-compliance.mjs.map +1 -1
- package/dist/lib/testing/scenarios/signals.mjs +0 -6
- package/dist/lib/testing/scenarios/signals.mjs.map +1 -1
- package/dist/lib/testing/scenarios/sponsored-intelligence.mjs +0 -6
- package/dist/lib/testing/scenarios/sponsored-intelligence.mjs.map +1 -1
- package/dist/lib/testing/scenarios/trusted-match.mjs +0 -6
- package/dist/lib/testing/scenarios/trusted-match.mjs.map +1 -1
- package/dist/lib/testing/seed-merge.mjs +0 -6
- package/dist/lib/testing/seed-merge.mjs.map +1 -1
- package/dist/lib/testing/storyboard/agent-routing.mjs +0 -6
- package/dist/lib/testing/storyboard/agent-routing.mjs.map +1 -1
- package/dist/lib/testing/storyboard/assertions.mjs +0 -6
- package/dist/lib/testing/storyboard/assertions.mjs.map +1 -1
- package/dist/lib/testing/storyboard/canonical-format-satisfaction.mjs +0 -6
- package/dist/lib/testing/storyboard/canonical-format-satisfaction.mjs.map +1 -1
- package/dist/lib/testing/storyboard/compliance.mjs +5 -6
- package/dist/lib/testing/storyboard/compliance.mjs.map +1 -1
- package/dist/lib/testing/storyboard/context.mjs +0 -6
- package/dist/lib/testing/storyboard/context.mjs.map +1 -1
- package/dist/lib/testing/storyboard/default-invariants.mjs +0 -6
- package/dist/lib/testing/storyboard/default-invariants.mjs.map +1 -1
- package/dist/lib/testing/storyboard/index.mjs +0 -6
- package/dist/lib/testing/storyboard/index.mjs.map +1 -1
- package/dist/lib/testing/storyboard/junit.mjs +0 -6
- package/dist/lib/testing/storyboard/junit.mjs.map +1 -1
- package/dist/lib/testing/storyboard/loader.mjs +0 -6
- package/dist/lib/testing/storyboard/loader.mjs.map +1 -1
- package/dist/lib/testing/storyboard/parallel-dispatch.mjs +0 -6
- package/dist/lib/testing/storyboard/parallel-dispatch.mjs.map +1 -1
- package/dist/lib/testing/storyboard/path.mjs +0 -6
- package/dist/lib/testing/storyboard/path.mjs.map +1 -1
- package/dist/lib/testing/storyboard/probes.mjs +0 -6
- package/dist/lib/testing/storyboard/probes.mjs.map +1 -1
- package/dist/lib/testing/storyboard/rate-limit-trip.mjs +0 -6
- package/dist/lib/testing/storyboard/rate-limit-trip.mjs.map +1 -1
- package/dist/lib/testing/storyboard/rejection-hints.mjs +0 -6
- package/dist/lib/testing/storyboard/rejection-hints.mjs.map +1 -1
- package/dist/lib/testing/storyboard/request-builder.mjs +0 -6
- package/dist/lib/testing/storyboard/request-builder.mjs.map +1 -1
- package/dist/lib/testing/storyboard/request-signing/builder.mjs +0 -6
- package/dist/lib/testing/storyboard/request-signing/builder.mjs.map +1 -1
- package/dist/lib/testing/storyboard/request-signing/grader.mjs +0 -6
- package/dist/lib/testing/storyboard/request-signing/grader.mjs.map +1 -1
- package/dist/lib/testing/storyboard/request-signing/index.mjs +0 -6
- package/dist/lib/testing/storyboard/request-signing/index.mjs.map +1 -1
- package/dist/lib/testing/storyboard/request-signing/probe-dispatch.mjs +0 -6
- package/dist/lib/testing/storyboard/request-signing/probe-dispatch.mjs.map +1 -1
- package/dist/lib/testing/storyboard/request-signing/probe.mjs +0 -6
- package/dist/lib/testing/storyboard/request-signing/probe.mjs.map +1 -1
- package/dist/lib/testing/storyboard/request-signing/synthesize.mjs +0 -6
- package/dist/lib/testing/storyboard/request-signing/synthesize.mjs.map +1 -1
- package/dist/lib/testing/storyboard/request-signing/test-kit.mjs +0 -6
- package/dist/lib/testing/storyboard/request-signing/test-kit.mjs.map +1 -1
- package/dist/lib/testing/storyboard/request-signing/types.mjs +0 -6
- package/dist/lib/testing/storyboard/request-signing/types.mjs.map +1 -1
- package/dist/lib/testing/storyboard/request-signing/vector-loader.mjs +0 -6
- package/dist/lib/testing/storyboard/request-signing/vector-loader.mjs.map +1 -1
- package/dist/lib/testing/storyboard/runner.mjs +0 -6
- package/dist/lib/testing/storyboard/runner.mjs.map +1 -1
- package/dist/lib/testing/storyboard/sandbox-entities.mjs +0 -6
- package/dist/lib/testing/storyboard/sandbox-entities.mjs.map +1 -1
- package/dist/lib/testing/storyboard/seeding.mjs +0 -6
- package/dist/lib/testing/storyboard/seeding.mjs.map +1 -1
- package/dist/lib/testing/storyboard/shape-drift-hints.mjs +0 -6
- package/dist/lib/testing/storyboard/shape-drift-hints.mjs.map +1 -1
- package/dist/lib/testing/storyboard/signer-grader/grader.mjs +0 -6
- package/dist/lib/testing/storyboard/signer-grader/grader.mjs.map +1 -1
- package/dist/lib/testing/storyboard/signer-grader/index.mjs +0 -6
- package/dist/lib/testing/storyboard/signer-grader/index.mjs.map +1 -1
- package/dist/lib/testing/storyboard/signer-grader/types.mjs +0 -6
- package/dist/lib/testing/storyboard/strict-validation-hints.mjs +0 -6
- package/dist/lib/testing/storyboard/strict-validation-hints.mjs.map +1 -1
- package/dist/lib/testing/storyboard/task-map.mjs +0 -6
- package/dist/lib/testing/storyboard/task-map.mjs.map +1 -1
- package/dist/lib/testing/storyboard/test-kit.mjs +0 -6
- package/dist/lib/testing/storyboard/test-kit.mjs.map +1 -1
- package/dist/lib/testing/storyboard/types.mjs +0 -6
- package/dist/lib/testing/storyboard/types.mjs.map +1 -1
- package/dist/lib/testing/storyboard/validations.mjs +0 -6
- package/dist/lib/testing/storyboard/validations.mjs.map +1 -1
- package/dist/lib/testing/storyboard/webhook-assertions.mjs +0 -6
- package/dist/lib/testing/storyboard/webhook-assertions.mjs.map +1 -1
- package/dist/lib/testing/storyboard/webhook-receiver.mjs +0 -6
- package/dist/lib/testing/storyboard/webhook-receiver.mjs.map +1 -1
- package/dist/lib/testing/stubs/governance-agent-stub.mjs +0 -6
- package/dist/lib/testing/stubs/governance-agent-stub.mjs.map +1 -1
- package/dist/lib/testing/stubs/index.mjs +0 -6
- package/dist/lib/testing/stubs/index.mjs.map +1 -1
- package/dist/lib/testing/test-controller.mjs +0 -6
- package/dist/lib/testing/test-controller.mjs.map +1 -1
- package/dist/lib/testing/test-helpers.mjs +0 -6
- package/dist/lib/testing/test-helpers.mjs.map +1 -1
- package/dist/lib/testing/types.mjs +0 -6
- package/dist/lib/types/adcp.mjs +0 -6
- package/dist/lib/types/adcp.mjs.map +1 -1
- package/dist/lib/types/asset-instances.mjs +0 -6
- package/dist/lib/types/compat.mjs +0 -6
- package/dist/lib/types/compat.mjs.map +1 -1
- package/dist/lib/types/core.generated.mjs +0 -6
- package/dist/lib/types/enums.generated.mjs +0 -6
- package/dist/lib/types/enums.generated.mjs.map +1 -1
- package/dist/lib/types/error-codes.mjs +0 -6
- package/dist/lib/types/error-codes.mjs.map +1 -1
- package/dist/lib/types/error-details.aliases.mjs +0 -6
- package/dist/lib/types/error-details.aliases.mjs.map +1 -1
- package/dist/lib/types/format-asset-slots.mjs +0 -6
- package/dist/lib/types/forward-compat-error-codes.mjs +0 -6
- package/dist/lib/types/forward-compat-error-codes.mjs.map +1 -1
- package/dist/lib/types/index.mjs +0 -6
- package/dist/lib/types/index.mjs.map +1 -1
- package/dist/lib/types/inline-enums.aliases.mjs +0 -6
- package/dist/lib/types/inline-enums.aliases.mjs.map +1 -1
- package/dist/lib/types/inline-enums.generated.mjs +0 -6
- package/dist/lib/types/inline-enums.generated.mjs.map +1 -1
- package/dist/lib/types/manifest.generated.mjs +0 -6
- package/dist/lib/types/manifest.generated.mjs.map +1 -1
- package/dist/lib/types/schemas.generated.mjs +0 -6
- package/dist/lib/types/schemas.generated.mjs.map +1 -1
- package/dist/lib/types/server-payload-aliases.mjs +0 -6
- package/dist/lib/types/server-payload.mjs +0 -6
- package/dist/lib/types/sync-rows.mjs +0 -6
- package/dist/lib/types/tools.generated.mjs +0 -6
- package/dist/lib/types/v2-5/index.mjs +0 -6
- package/dist/lib/types/v2-5/index.mjs.map +1 -1
- package/dist/lib/types/v2-5/tools.generated.mjs +0 -6
- package/dist/lib/types/v3-1-beta/index.mjs +0 -6
- package/dist/lib/types/v3-1-beta/index.mjs.map +1 -1
- package/dist/lib/types/v3-1-beta/tools.generated.mjs +0 -6
- package/dist/lib/types/wellknown-schemas.generated.mjs +0 -6
- package/dist/lib/types/wellknown-schemas.generated.mjs.map +1 -1
- package/dist/lib/upstream-recorder/constants.mjs +0 -6
- package/dist/lib/upstream-recorder/constants.mjs.map +1 -1
- package/dist/lib/upstream-recorder/index.mjs +0 -6
- package/dist/lib/upstream-recorder/index.mjs.map +1 -1
- package/dist/lib/upstream-recorder/recorder.mjs +0 -6
- package/dist/lib/upstream-recorder/recorder.mjs.map +1 -1
- package/dist/lib/upstream-recorder/types.mjs +0 -6
- package/dist/lib/upstream-recorder/types.mjs.map +1 -1
- package/dist/lib/utils/a2a-artifacts.mjs +0 -6
- package/dist/lib/utils/a2a-artifacts.mjs.map +1 -1
- package/dist/lib/utils/a2a-discovery.mjs +0 -6
- package/dist/lib/utils/a2a-discovery.mjs.map +1 -1
- package/dist/lib/utils/activation-key-builders.mjs +0 -6
- package/dist/lib/utils/activation-key-builders.mjs.map +1 -1
- package/dist/lib/utils/adcp-version-config.mjs +0 -6
- package/dist/lib/utils/adcp-version-config.mjs.map +1 -1
- package/dist/lib/utils/asset-builders.mjs +0 -6
- package/dist/lib/utils/asset-builders.mjs.map +1 -1
- package/dist/lib/utils/build-creative-return-builders.mjs +0 -6
- package/dist/lib/utils/build-creative-return-builders.mjs.map +1 -1
- package/dist/lib/utils/buyer-retry-policy.mjs +0 -6
- package/dist/lib/utils/buyer-retry-policy.mjs.map +1 -1
- package/dist/lib/utils/capabilities.mjs +0 -6
- package/dist/lib/utils/capabilities.mjs.map +1 -1
- package/dist/lib/utils/capability-rollups.mjs +0 -6
- package/dist/lib/utils/capability-rollups.mjs.map +1 -1
- package/dist/lib/utils/creative-adapter.mjs +0 -6
- package/dist/lib/utils/creative-adapter.mjs.map +1 -1
- package/dist/lib/utils/creative-delivery.mjs +0 -6
- package/dist/lib/utils/creative-delivery.mjs.map +1 -1
- package/dist/lib/utils/deprecation.mjs +0 -6
- package/dist/lib/utils/deprecation.mjs.map +1 -1
- package/dist/lib/utils/envelope-status-compat.mjs +0 -6
- package/dist/lib/utils/envelope-status-compat.mjs.map +1 -1
- package/dist/lib/utils/error-extraction.mjs +0 -6
- package/dist/lib/utils/error-extraction.mjs.map +1 -1
- package/dist/lib/utils/extract-result.mjs +0 -6
- package/dist/lib/utils/extract-result.mjs.map +1 -1
- package/dist/lib/utils/format-asset-slot-builders.mjs +0 -6
- package/dist/lib/utils/format-asset-slot-builders.mjs.map +1 -1
- package/dist/lib/utils/format-assets.mjs +0 -6
- package/dist/lib/utils/format-assets.mjs.map +1 -1
- package/dist/lib/utils/format-render-builders.mjs +0 -6
- package/dist/lib/utils/format-render-builders.mjs.map +1 -1
- package/dist/lib/utils/format-renders.mjs +0 -6
- package/dist/lib/utils/format-renders.mjs.map +1 -1
- package/dist/lib/utils/get-products-cache-scope.mjs +0 -6
- package/dist/lib/utils/get-products-cache-scope.mjs.map +1 -1
- package/dist/lib/utils/glob.mjs +0 -6
- package/dist/lib/utils/glob.mjs.map +1 -1
- package/dist/lib/utils/global-async-local-storage.mjs +0 -6
- package/dist/lib/utils/global-async-local-storage.mjs.map +1 -1
- package/dist/lib/utils/idempotency.mjs +0 -6
- package/dist/lib/utils/idempotency.mjs.map +1 -1
- package/dist/lib/utils/index.mjs +0 -6
- package/dist/lib/utils/index.mjs.map +1 -1
- package/dist/lib/utils/jcs.mjs +0 -6
- package/dist/lib/utils/jcs.mjs.map +1 -1
- package/dist/lib/utils/json-depth.mjs +0 -6
- package/dist/lib/utils/json-depth.mjs.map +1 -1
- package/dist/lib/utils/logger.mjs +0 -6
- package/dist/lib/utils/logger.mjs.map +1 -1
- package/dist/lib/utils/media-buy-delivery-notification-builders.mjs +0 -6
- package/dist/lib/utils/media-buy-delivery-notification-builders.mjs.map +1 -1
- package/dist/lib/utils/media-buy-status.mjs +0 -6
- package/dist/lib/utils/media-buy-status.mjs.map +1 -1
- package/dist/lib/utils/pagination.mjs +0 -6
- package/dist/lib/utils/pagination.mjs.map +1 -1
- package/dist/lib/utils/preview-creative-builders.mjs +0 -6
- package/dist/lib/utils/preview-creative-builders.mjs.map +1 -1
- package/dist/lib/utils/preview-normalizer.mjs +0 -6
- package/dist/lib/utils/preview-normalizer.mjs.map +1 -1
- package/dist/lib/utils/preview-utils.mjs +0 -6
- package/dist/lib/utils/preview-utils.mjs.map +1 -1
- package/dist/lib/utils/pricing-adapter.mjs +0 -6
- package/dist/lib/utils/pricing-adapter.mjs.map +1 -1
- package/dist/lib/utils/probe-policy.mjs +0 -6
- package/dist/lib/utils/probe-policy.mjs.map +1 -1
- package/dist/lib/utils/protocol-detection.mjs +0 -6
- package/dist/lib/utils/protocol-detection.mjs.map +1 -1
- package/dist/lib/utils/redact-secrets.mjs +0 -6
- package/dist/lib/utils/redact-secrets.mjs.map +1 -1
- package/dist/lib/utils/redis-default-prefix-warn.mjs +0 -6
- package/dist/lib/utils/redis-default-prefix-warn.mjs.map +1 -1
- package/dist/lib/utils/render-builders.mjs +0 -6
- package/dist/lib/utils/render-builders.mjs.map +1 -1
- package/dist/lib/utils/request-normalizer.mjs +0 -6
- package/dist/lib/utils/request-normalizer.mjs.map +1 -1
- package/dist/lib/utils/response-schemas.mjs +0 -6
- package/dist/lib/utils/response-schemas.mjs.map +1 -1
- package/dist/lib/utils/response-unwrapper.mjs +0 -6
- package/dist/lib/utils/response-unwrapper.mjs.map +1 -1
- package/dist/lib/utils/retry.mjs +0 -6
- package/dist/lib/utils/retry.mjs.map +1 -1
- package/dist/lib/utils/signal-discovery-helpers.mjs +0 -6
- package/dist/lib/utils/signal-discovery-helpers.mjs.map +1 -1
- package/dist/lib/utils/signal-id-builders.mjs +0 -6
- package/dist/lib/utils/signal-id-builders.mjs.map +1 -1
- package/dist/lib/utils/sync-creatives-adapter.mjs +0 -6
- package/dist/lib/utils/sync-creatives-adapter.mjs.map +1 -1
- package/dist/lib/utils/task-state.mjs +0 -6
- package/dist/lib/utils/task-state.mjs.map +1 -1
- package/dist/lib/utils/tool-request-schemas.mjs +0 -6
- package/dist/lib/utils/tool-request-schemas.mjs.map +1 -1
- package/dist/lib/utils/typeGuards.mjs +0 -6
- package/dist/lib/utils/typeGuards.mjs.map +1 -1
- package/dist/lib/utils/union-errors.mjs +0 -6
- package/dist/lib/utils/union-errors.mjs.map +1 -1
- package/dist/lib/utils/validate-user-agent.mjs +0 -6
- package/dist/lib/utils/validate-user-agent.mjs.map +1 -1
- package/dist/lib/v2/format-schema/fetch.mjs +0 -6
- package/dist/lib/v2/format-schema/fetch.mjs.map +1 -1
- package/dist/lib/v2/format-schema/index.mjs +0 -6
- package/dist/lib/v2/format-schema/index.mjs.map +1 -1
- package/dist/lib/v2/format-schema/regex-safety.mjs +0 -6
- package/dist/lib/v2/format-schema/regex-safety.mjs.map +1 -1
- package/dist/lib/v2/format-schema/resolver.mjs +7 -8
- package/dist/lib/v2/format-schema/resolver.mjs.map +1 -1
- package/dist/lib/v2/format-schema/sandbox-refs.mjs +0 -6
- package/dist/lib/v2/format-schema/sandbox-refs.mjs.map +1 -1
- package/dist/lib/v2/projection/augment-response.mjs +0 -6
- package/dist/lib/v2/projection/augment-response.mjs.map +1 -1
- package/dist/lib/v2/projection/builders.mjs +0 -6
- package/dist/lib/v2/projection/builders.mjs.map +1 -1
- package/dist/lib/v2/projection/cache-versions.mjs +0 -6
- package/dist/lib/v2/projection/cache-versions.mjs.map +1 -1
- package/dist/lib/v2/projection/canonical-properties.mjs +5 -6
- package/dist/lib/v2/projection/canonical-properties.mjs.map +1 -1
- package/dist/lib/v2/projection/catalog.mjs +5 -6
- package/dist/lib/v2/projection/catalog.mjs.map +1 -1
- package/dist/lib/v2/projection/constants.mjs +0 -6
- package/dist/lib/v2/projection/constants.mjs.map +1 -1
- package/dist/lib/v2/projection/index.mjs +0 -6
- package/dist/lib/v2/projection/index.mjs.map +1 -1
- package/dist/lib/v2/projection/registry.mjs +5 -6
- package/dist/lib/v2/projection/registry.mjs.map +1 -1
- package/dist/lib/v2/projection/types.mjs +0 -6
- package/dist/lib/v2/projection/v1-to-v2.mjs +0 -6
- package/dist/lib/v2/projection/v1-to-v2.mjs.map +1 -1
- package/dist/lib/v2/projection/v2-to-v1.mjs +0 -6
- package/dist/lib/v2/projection/v2-to-v1.mjs.map +1 -1
- package/dist/lib/v2/projection/write-side.mjs +0 -6
- package/dist/lib/v2/projection/write-side.mjs.map +1 -1
- package/dist/lib/v2/publisher-catalog/formats.mjs +0 -6
- package/dist/lib/v2/publisher-catalog/formats.mjs.map +1 -1
- package/dist/lib/v2/publisher-catalog/index.mjs +0 -6
- package/dist/lib/v2/publisher-catalog/index.mjs.map +1 -1
- package/dist/lib/validation/client-hooks.mjs +0 -6
- package/dist/lib/validation/client-hooks.mjs.map +1 -1
- package/dist/lib/validation/hints.mjs +0 -6
- package/dist/lib/validation/hints.mjs.map +1 -1
- package/dist/lib/validation/index.mjs +0 -6
- package/dist/lib/validation/index.mjs.map +1 -1
- package/dist/lib/validation/schema-errors.mjs +0 -6
- package/dist/lib/validation/schema-errors.mjs.map +1 -1
- package/dist/lib/validation/schema-loader.mjs +5 -6
- package/dist/lib/validation/schema-loader.mjs.map +1 -1
- package/dist/lib/validation/schema-validator.mjs +0 -6
- package/dist/lib/validation/schema-validator.mjs.map +1 -1
- package/dist/lib/validation/sync-creatives.mjs +0 -6
- package/dist/lib/validation/sync-creatives.mjs.map +1 -1
- package/dist/lib/version.d.mts +3 -3
- package/dist/lib/version.d.ts +3 -3
- package/dist/lib/version.js +3 -3
- package/dist/lib/version.js.map +1 -1
- package/dist/lib/version.mjs +3 -9
- package/dist/lib/version.mjs.map +1 -1
- package/dist/lib/webhooks/index.mjs +0 -6
- package/dist/lib/webhooks/index.mjs.map +1 -1
- package/dist/lib/wholesale-feed-sync/index.mjs +0 -6
- package/dist/lib/wholesale-feed-sync/index.mjs.map +1 -1
- package/dist/lib/wholesale-feed-sync/sync.mjs +0 -6
- package/dist/lib/wholesale-feed-sync/sync.mjs.map +1 -1
- package/dist/lib/wholesale-feed-sync/types.mjs +0 -6
- package/dist/lib/wholesale-feed-sync/webhook-notification.mjs +0 -6
- package/dist/lib/wholesale-feed-sync/webhook-notification.mjs.map +1 -1
- package/package.json +2 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/server/postgres-task-store.ts"],"sourcesContent":["/**\n * PostgreSQL-backed TaskStore for distributed MCP servers.\n *\n * Replaces InMemoryTaskStore when running multiple server instances behind\n * a load balancer. Tasks are stored in a shared table so any instance can\n * create, retrieve, or update a task regardless of which instance handled\n * the original request.\n *\n * @example\n * ```typescript\n * import { Pool } from 'pg';\n * import { PostgresTaskStore, serve, createTaskCapableServer } from '@adcp/sdk';\n *\n * const pool = new Pool({ connectionString: process.env.DATABASE_URL });\n * const taskStore = new PostgresTaskStore(pool);\n *\n * serve(({ taskStore }) => createTaskCapableServer('My Agent', '1.0.0', { taskStore }), {\n * taskStore,\n * });\n * ```\n */\n\nimport { randomBytes } from 'node:crypto';\nimport { isTerminal } from '@modelcontextprotocol/sdk/experimental/tasks/interfaces.js';\nimport type { TaskStore, CreateTaskOptions } from '@modelcontextprotocol/sdk/experimental/tasks/interfaces.js';\nimport type { Task, RequestId, Result, Request } from '@modelcontextprotocol/sdk/types.js';\n\n/**\n * Minimal subset of the `pg.Pool` interface used by PostgresTaskStore.\n *\n * Accepting this instead of a concrete Pool lets callers pass any\n * pg-compatible query executor (connection pools, transaction wrappers, etc.)\n * without forcing a hard dependency on the `pg` package.\n */\nexport interface PgQueryable {\n query(text: string, values?: unknown[]): Promise<{ rows: Record<string, unknown>[]; rowCount: number | null }>;\n}\n\n/** Configuration for PostgresTaskStore. */\nexport interface PostgresTaskStoreOptions {\n /** Table name for task storage. Must contain only lowercase letters, digits, and underscores. Defaults to `\"adcp_mcp_tasks\"`. */\n tableName?: string;\n}\n\n/** Default table name — vendor-prefixed to avoid collisions in consumer databases. */\nconst DEFAULT_TABLE = 'adcp_mcp_tasks';\n\n/** Validates a SQL identifier to prevent injection via table/constraint names. */\nconst VALID_IDENTIFIER = /^[a-z_][a-z0-9_]*$/;\n\n/** Page size for listTasks pagination (matches InMemoryTaskStore). */\nconst PAGE_SIZE = 10;\n\n/**\n * Generate the SQL DDL for the task store table.\n *\n * Constraint and index names are derived from the table name to avoid\n * collisions when multiple stores share the same database.\n *\n * @example\n * ```typescript\n * import { getMcpTasksMigration } from '@adcp/sdk';\n * await pool.query(getMcpTasksMigration()); // creates adcp_mcp_tasks\n * await pool.query(getMcpTasksMigration({ tableName: 'my_tasks' })); // custom name\n * ```\n */\nexport function getMcpTasksMigration(options?: { tableName?: string }): string {\n const table = options?.tableName ?? DEFAULT_TABLE;\n if (!VALID_IDENTIFIER.test(table)) {\n throw new Error(`Invalid table name \"${table}\": must match ${VALID_IDENTIFIER}`);\n }\n return `\nCREATE TABLE IF NOT EXISTS ${table} (\n task_id TEXT PRIMARY KEY,\n status TEXT NOT NULL DEFAULT 'working',\n ttl INTEGER,\n poll_interval INTEGER NOT NULL DEFAULT 1000,\n status_message TEXT,\n request_id TEXT NOT NULL,\n request JSONB NOT NULL,\n result JSONB,\n created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n last_updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n expires_at TIMESTAMPTZ,\n\n CONSTRAINT ${table}_valid_status CHECK (\n status IN ('working', 'input_required', 'completed', 'failed', 'cancelled')\n )\n);\n\nCREATE INDEX IF NOT EXISTS idx_${table}_expires_at\n ON ${table}(expires_at) WHERE expires_at IS NOT NULL;\n\nCREATE INDEX IF NOT EXISTS idx_${table}_created_at\n ON ${table}(created_at);\n`.trim();\n}\n\n/** Backward-compatible constant using the default table name. */\nexport const MCP_TASKS_MIGRATION = getMcpTasksMigration();\n\n/** Row shape returned by SELECT queries. */\ninterface TaskRow {\n task_id: string;\n status: Task['status'];\n ttl: number | null;\n poll_interval: number;\n status_message: string | null;\n request_id: string;\n request: Record<string, unknown>;\n result: Record<string, unknown> | null;\n created_at: string;\n last_updated_at: string;\n expires_at: string | null;\n}\n\n/** Convert a database row to an MCP Task object. */\nfunction rowToTask(row: TaskRow): Task {\n const task: Task = {\n taskId: row.task_id,\n status: row.status,\n ttl: row.ttl,\n createdAt: new Date(row.created_at).toISOString(),\n lastUpdatedAt: new Date(row.last_updated_at).toISOString(),\n };\n if (row.poll_interval != null) {\n task.pollInterval = row.poll_interval;\n }\n if (row.status_message != null) {\n task.statusMessage = row.status_message;\n }\n return task;\n}\n\n/** WHERE clause that filters out expired tasks. */\nconst NOT_EXPIRED = `(expires_at IS NULL OR expires_at > NOW())`;\n\n/**\n * PostgreSQL-backed implementation of the MCP SDK TaskStore interface.\n *\n * All reads filter out expired tasks (via `expires_at`), so no background\n * timer is needed — expired tasks are simply invisible. Call\n * `cleanupExpired()` periodically to reclaim storage.\n */\nexport class PostgresTaskStore implements TaskStore {\n private readonly table: string;\n\n constructor(\n private readonly db: PgQueryable,\n options?: PostgresTaskStoreOptions\n ) {\n this.table = options?.tableName ?? DEFAULT_TABLE;\n if (!VALID_IDENTIFIER.test(this.table)) {\n throw new Error(`Invalid table name \"${this.table}\": must match ${VALID_IDENTIFIER}`);\n }\n }\n\n /**\n * Create a new task. Pass `taskParams.taskId` to use a caller-supplied ID verbatim\n * (useful for compliance-controller scenarios where the runner needs deterministic\n * task IDs). If omitted, a random hex ID is generated. Throws if the supplied ID\n * is empty / longer than 128 chars, or already exists. The 128-char ceiling is an\n * SDK policy (matches typical request-id / session-id field lengths and keeps\n * the task_id index efficient) — Postgres TEXT itself imposes no limit.\n *\n * The `task_id` namespace on this store is global (no tenant scoping in the schema\n * today). Callers using caller-supplied IDs are responsible for namespace isolation;\n * cross-tenant collisions surface as `already exists`. Track the schema fix\n * (composite key on tenant + task_id) in a future SDK migration if production paths\n * ever wire caller-supplied IDs.\n */\n async createTask(\n taskParams: CreateTaskOptions & { taskId?: string },\n requestId: RequestId,\n request: Request,\n _sessionId?: string\n ): Promise<Task> {\n if (taskParams.taskId !== undefined) {\n if (typeof taskParams.taskId !== 'string' || taskParams.taskId.length === 0) {\n throw new Error('taskId must be a non-empty string when supplied');\n }\n if (taskParams.taskId.length > 128) {\n throw new Error(`taskId must be 128 characters or fewer (got ${taskParams.taskId.length})`);\n }\n }\n const taskId = taskParams.taskId ?? randomBytes(16).toString('hex');\n const ttl = taskParams.ttl ?? null;\n const pollInterval = taskParams.pollInterval ?? 1000;\n\n try {\n const { rows } = await this.db.query(\n `INSERT INTO ${this.table} (task_id, status, ttl, poll_interval, request_id, request, expires_at)\n VALUES ($1, 'working', $2, $3, $4, $5,\n CASE WHEN $2::integer IS NOT NULL\n THEN NOW() + ($2::integer || ' milliseconds')::interval\n ELSE NULL END)\n RETURNING *`,\n [taskId, ttl, pollInterval, String(requestId), JSON.stringify(request)]\n );\n\n return rowToTask(rows[0] as unknown as TaskRow);\n } catch (err) {\n // Unique constraint violation — a task with this ID already exists.\n if (typeof err === 'object' && err !== null && (err as { code?: unknown }).code === '23505') {\n throw new Error(\n `Task with ID ${taskId} already exists. Use a different taskId or retrieve the existing task via getTask().`\n );\n }\n throw err;\n }\n }\n\n async getTask(taskId: string, _sessionId?: string): Promise<Task | null> {\n const { rows } = await this.db.query(`SELECT * FROM ${this.table} WHERE task_id = $1 AND ${NOT_EXPIRED}`, [taskId]);\n return rows.length > 0 ? rowToTask(rows[0] as unknown as TaskRow) : null;\n }\n\n async storeTaskResult(\n taskId: string,\n status: 'completed' | 'failed',\n result: Result,\n _sessionId?: string\n ): Promise<void> {\n // Atomic check-and-update: only modify if task exists and is non-terminal.\n const { rowCount, rows } = await this.db.query(\n `UPDATE ${this.table}\n SET status = $2,\n result = $3,\n last_updated_at = NOW(),\n expires_at = CASE WHEN ttl IS NOT NULL\n THEN NOW() + (ttl || ' milliseconds')::interval\n ELSE NULL END\n WHERE task_id = $1\n AND status NOT IN ('completed', 'failed', 'cancelled')\n AND ${NOT_EXPIRED}\n RETURNING status`,\n [taskId, status, JSON.stringify(result)]\n );\n\n if (!rowCount || rows.length === 0) {\n // Distinguish \"not found\" / \"expired\" from \"already terminal\".\n const { rows: existing } = await this.db.query(\n `SELECT status FROM ${this.table} WHERE task_id = $1 AND ${NOT_EXPIRED}`,\n [taskId]\n );\n if (existing.length === 0) {\n throw new Error(`Task with ID ${taskId} not found`);\n }\n throw new Error(\n `Cannot store result for task ${taskId} in terminal status '${existing[0]!.status}'. Task results can only be stored once.`\n );\n }\n }\n\n async getTaskResult(taskId: string, _sessionId?: string): Promise<Result> {\n const { rows } = await this.db.query(`SELECT result FROM ${this.table} WHERE task_id = $1 AND ${NOT_EXPIRED}`, [\n taskId,\n ]);\n\n if (rows.length === 0) {\n throw new Error(`Task with ID ${taskId} not found`);\n }\n const row = rows[0]!;\n if (row.result == null) {\n throw new Error(`Task ${taskId} has no result stored`);\n }\n return row.result as Result;\n }\n\n async updateTaskStatus(\n taskId: string,\n status: Task['status'],\n statusMessage?: string,\n _sessionId?: string\n ): Promise<void> {\n // Atomic: only update if not already in a terminal state.\n const { rowCount, rows } = await this.db.query(\n `UPDATE ${this.table}\n SET status = $2,\n status_message = COALESCE($3, status_message),\n last_updated_at = NOW(),\n expires_at = CASE\n WHEN $2 IN ('completed', 'failed', 'cancelled') AND ttl IS NOT NULL\n THEN NOW() + (ttl || ' milliseconds')::interval\n ELSE expires_at END\n WHERE task_id = $1\n AND status NOT IN ('completed', 'failed', 'cancelled')\n AND ${NOT_EXPIRED}\n RETURNING status`,\n [taskId, status, statusMessage ?? null]\n );\n\n if (!rowCount || rows.length === 0) {\n const { rows: existing } = await this.db.query(\n `SELECT status FROM ${this.table} WHERE task_id = $1 AND ${NOT_EXPIRED}`,\n [taskId]\n );\n if (existing.length === 0) {\n throw new Error(`Task with ID ${taskId} not found`);\n }\n throw new Error(\n `Cannot update task ${taskId} from terminal status '${existing[0]!.status}' to '${status}'. Terminal states (completed, failed, cancelled) cannot transition to other states.`\n );\n }\n }\n\n async listTasks(cursor?: string, _sessionId?: string): Promise<{ tasks: Task[]; nextCursor?: string }> {\n let rawRows: Record<string, unknown>[];\n\n if (cursor) {\n // Decode cursor: \"created_at|task_id\" — split on first | only,\n // so task IDs containing | are handled correctly.\n const sepIndex = cursor.indexOf('|');\n if (sepIndex < 1) {\n throw new Error(`Invalid cursor: ${cursor}`);\n }\n const cursorCreatedAt = cursor.slice(0, sepIndex);\n const cursorTaskId = cursor.slice(sepIndex + 1);\n if (!cursorTaskId || isNaN(Date.parse(cursorCreatedAt))) {\n throw new Error(`Invalid cursor: ${cursor}`);\n }\n\n ({ rows: rawRows } = await this.db.query(\n `SELECT *, created_at::text AS created_at_raw FROM ${this.table}\n WHERE ${NOT_EXPIRED}\n AND (created_at, task_id) > ($1::timestamptz, $2)\n ORDER BY created_at, task_id\n LIMIT $3`,\n [cursorCreatedAt, cursorTaskId, PAGE_SIZE + 1]\n ));\n } else {\n ({ rows: rawRows } = await this.db.query(\n `SELECT *, created_at::text AS created_at_raw FROM ${this.table}\n WHERE ${NOT_EXPIRED}\n ORDER BY created_at, task_id\n LIMIT $1`,\n [PAGE_SIZE + 1]\n ));\n }\n\n const rows = rawRows as unknown as (TaskRow & { created_at_raw: string })[];\n const hasMore = rows.length > PAGE_SIZE;\n const pageRows = hasMore ? rows.slice(0, PAGE_SIZE) : rows;\n const tasks = pageRows.map(rowToTask);\n\n let nextCursor: string | undefined;\n if (hasMore && pageRows.length > 0) {\n const last = pageRows[pageRows.length - 1]!;\n // Use the raw PostgreSQL text representation to preserve microsecond\n // precision. JavaScript Date only has millisecond precision, which\n // causes keyset pagination to re-include rows when multiple tasks\n // share the same millisecond.\n nextCursor = `${last.created_at_raw}|${last.task_id}`;\n }\n\n return { tasks, nextCursor };\n }\n\n /**\n * Delete expired tasks from the table.\n *\n * Call this on a schedule (e.g., every 5 minutes) to reclaim storage.\n * Reads automatically filter expired rows, so this is purely a storage\n * optimization — not required for correctness.\n *\n * @returns The number of deleted rows.\n */\n async cleanupExpired(): Promise<number> {\n const { rowCount } = await this.db.query(\n `DELETE FROM ${this.table} WHERE expires_at IS NOT NULL AND expires_at <= NOW()`\n );\n return rowCount ?? 0;\n }\n\n /**\n * No-op — PostgresTaskStore has no timers or background processes.\n * Matches the cleanup() method that InMemoryTaskStore exposes.\n */\n cleanup(): void {\n // Nothing to clean up — no timers.\n }\n}\n\n/**\n * Delete expired tasks from the task store table.\n *\n * Standalone version of `PostgresTaskStore.cleanupExpired()` for use\n * without a store instance.\n *\n * @returns The number of deleted rows.\n */\nexport async function cleanupExpiredTasks(db: PgQueryable, tableName: string = DEFAULT_TABLE): Promise<number> {\n if (!VALID_IDENTIFIER.test(tableName)) {\n throw new Error(`Invalid table name \"${tableName}\": must match ${VALID_IDENTIFIER}`);\n }\n const { rowCount } = await db.query(`DELETE FROM ${tableName} WHERE expires_at IS NOT NULL AND expires_at <= NOW()`);\n return rowCount ?? 0;\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/server/postgres-task-store.ts"],"sourcesContent":["/**\n * PostgreSQL-backed TaskStore for distributed MCP servers.\n *\n * Replaces InMemoryTaskStore when running multiple server instances behind\n * a load balancer. Tasks are stored in a shared table so any instance can\n * create, retrieve, or update a task regardless of which instance handled\n * the original request.\n *\n * @example\n * ```typescript\n * import { Pool } from 'pg';\n * import { PostgresTaskStore, serve, createTaskCapableServer } from '@adcp/sdk';\n *\n * const pool = new Pool({ connectionString: process.env.DATABASE_URL });\n * const taskStore = new PostgresTaskStore(pool);\n *\n * serve(({ taskStore }) => createTaskCapableServer('My Agent', '1.0.0', { taskStore }), {\n * taskStore,\n * });\n * ```\n */\n\nimport { randomBytes } from 'node:crypto';\nimport { isTerminal } from '@modelcontextprotocol/sdk/experimental/tasks/interfaces.js';\nimport type { TaskStore, CreateTaskOptions } from '@modelcontextprotocol/sdk/experimental/tasks/interfaces.js';\nimport type { Task, RequestId, Result, Request } from '@modelcontextprotocol/sdk/types.js';\n\n/**\n * Minimal subset of the `pg.Pool` interface used by PostgresTaskStore.\n *\n * Accepting this instead of a concrete Pool lets callers pass any\n * pg-compatible query executor (connection pools, transaction wrappers, etc.)\n * without forcing a hard dependency on the `pg` package.\n */\nexport interface PgQueryable {\n query(text: string, values?: unknown[]): Promise<{ rows: Record<string, unknown>[]; rowCount: number | null }>;\n}\n\n/** Configuration for PostgresTaskStore. */\nexport interface PostgresTaskStoreOptions {\n /** Table name for task storage. Must contain only lowercase letters, digits, and underscores. Defaults to `\"adcp_mcp_tasks\"`. */\n tableName?: string;\n}\n\n/** Default table name — vendor-prefixed to avoid collisions in consumer databases. */\nconst DEFAULT_TABLE = 'adcp_mcp_tasks';\n\n/** Validates a SQL identifier to prevent injection via table/constraint names. */\nconst VALID_IDENTIFIER = /^[a-z_][a-z0-9_]*$/;\n\n/** Page size for listTasks pagination (matches InMemoryTaskStore). */\nconst PAGE_SIZE = 10;\n\n/**\n * Generate the SQL DDL for the task store table.\n *\n * Constraint and index names are derived from the table name to avoid\n * collisions when multiple stores share the same database.\n *\n * @example\n * ```typescript\n * import { getMcpTasksMigration } from '@adcp/sdk';\n * await pool.query(getMcpTasksMigration()); // creates adcp_mcp_tasks\n * await pool.query(getMcpTasksMigration({ tableName: 'my_tasks' })); // custom name\n * ```\n */\nexport function getMcpTasksMigration(options?: { tableName?: string }): string {\n const table = options?.tableName ?? DEFAULT_TABLE;\n if (!VALID_IDENTIFIER.test(table)) {\n throw new Error(`Invalid table name \"${table}\": must match ${VALID_IDENTIFIER}`);\n }\n return `\nCREATE TABLE IF NOT EXISTS ${table} (\n task_id TEXT PRIMARY KEY,\n status TEXT NOT NULL DEFAULT 'working',\n ttl INTEGER,\n poll_interval INTEGER NOT NULL DEFAULT 1000,\n status_message TEXT,\n request_id TEXT NOT NULL,\n request JSONB NOT NULL,\n result JSONB,\n created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n last_updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n expires_at TIMESTAMPTZ,\n\n CONSTRAINT ${table}_valid_status CHECK (\n status IN ('working', 'input_required', 'completed', 'failed', 'cancelled')\n )\n);\n\nCREATE INDEX IF NOT EXISTS idx_${table}_expires_at\n ON ${table}(expires_at) WHERE expires_at IS NOT NULL;\n\nCREATE INDEX IF NOT EXISTS idx_${table}_created_at\n ON ${table}(created_at);\n`.trim();\n}\n\n/** Backward-compatible constant using the default table name. */\nexport const MCP_TASKS_MIGRATION = getMcpTasksMigration();\n\n/** Row shape returned by SELECT queries. */\ninterface TaskRow {\n task_id: string;\n status: Task['status'];\n ttl: number | null;\n poll_interval: number;\n status_message: string | null;\n request_id: string;\n request: Record<string, unknown>;\n result: Record<string, unknown> | null;\n created_at: string;\n last_updated_at: string;\n expires_at: string | null;\n}\n\n/** Convert a database row to an MCP Task object. */\nfunction rowToTask(row: TaskRow): Task {\n const task: Task = {\n taskId: row.task_id,\n status: row.status,\n ttl: row.ttl,\n createdAt: new Date(row.created_at).toISOString(),\n lastUpdatedAt: new Date(row.last_updated_at).toISOString(),\n };\n if (row.poll_interval != null) {\n task.pollInterval = row.poll_interval;\n }\n if (row.status_message != null) {\n task.statusMessage = row.status_message;\n }\n return task;\n}\n\n/** WHERE clause that filters out expired tasks. */\nconst NOT_EXPIRED = `(expires_at IS NULL OR expires_at > NOW())`;\n\n/**\n * PostgreSQL-backed implementation of the MCP SDK TaskStore interface.\n *\n * All reads filter out expired tasks (via `expires_at`), so no background\n * timer is needed — expired tasks are simply invisible. Call\n * `cleanupExpired()` periodically to reclaim storage.\n */\nexport class PostgresTaskStore implements TaskStore {\n private readonly table: string;\n\n constructor(\n private readonly db: PgQueryable,\n options?: PostgresTaskStoreOptions\n ) {\n this.table = options?.tableName ?? DEFAULT_TABLE;\n if (!VALID_IDENTIFIER.test(this.table)) {\n throw new Error(`Invalid table name \"${this.table}\": must match ${VALID_IDENTIFIER}`);\n }\n }\n\n /**\n * Create a new task. Pass `taskParams.taskId` to use a caller-supplied ID verbatim\n * (useful for compliance-controller scenarios where the runner needs deterministic\n * task IDs). If omitted, a random hex ID is generated. Throws if the supplied ID\n * is empty / longer than 128 chars, or already exists. The 128-char ceiling is an\n * SDK policy (matches typical request-id / session-id field lengths and keeps\n * the task_id index efficient) — Postgres TEXT itself imposes no limit.\n *\n * The `task_id` namespace on this store is global (no tenant scoping in the schema\n * today). Callers using caller-supplied IDs are responsible for namespace isolation;\n * cross-tenant collisions surface as `already exists`. Track the schema fix\n * (composite key on tenant + task_id) in a future SDK migration if production paths\n * ever wire caller-supplied IDs.\n */\n async createTask(\n taskParams: CreateTaskOptions & { taskId?: string },\n requestId: RequestId,\n request: Request,\n _sessionId?: string\n ): Promise<Task> {\n if (taskParams.taskId !== undefined) {\n if (typeof taskParams.taskId !== 'string' || taskParams.taskId.length === 0) {\n throw new Error('taskId must be a non-empty string when supplied');\n }\n if (taskParams.taskId.length > 128) {\n throw new Error(`taskId must be 128 characters or fewer (got ${taskParams.taskId.length})`);\n }\n }\n const taskId = taskParams.taskId ?? randomBytes(16).toString('hex');\n const ttl = taskParams.ttl ?? null;\n const pollInterval = taskParams.pollInterval ?? 1000;\n\n try {\n const { rows } = await this.db.query(\n `INSERT INTO ${this.table} (task_id, status, ttl, poll_interval, request_id, request, expires_at)\n VALUES ($1, 'working', $2, $3, $4, $5,\n CASE WHEN $2::integer IS NOT NULL\n THEN NOW() + ($2::integer || ' milliseconds')::interval\n ELSE NULL END)\n RETURNING *`,\n [taskId, ttl, pollInterval, String(requestId), JSON.stringify(request)]\n );\n\n return rowToTask(rows[0] as unknown as TaskRow);\n } catch (err) {\n // Unique constraint violation — a task with this ID already exists.\n if (typeof err === 'object' && err !== null && (err as { code?: unknown }).code === '23505') {\n throw new Error(\n `Task with ID ${taskId} already exists. Use a different taskId or retrieve the existing task via getTask().`\n );\n }\n throw err;\n }\n }\n\n async getTask(taskId: string, _sessionId?: string): Promise<Task | null> {\n const { rows } = await this.db.query(`SELECT * FROM ${this.table} WHERE task_id = $1 AND ${NOT_EXPIRED}`, [taskId]);\n return rows.length > 0 ? rowToTask(rows[0] as unknown as TaskRow) : null;\n }\n\n async storeTaskResult(\n taskId: string,\n status: 'completed' | 'failed',\n result: Result,\n _sessionId?: string\n ): Promise<void> {\n // Atomic check-and-update: only modify if task exists and is non-terminal.\n const { rowCount, rows } = await this.db.query(\n `UPDATE ${this.table}\n SET status = $2,\n result = $3,\n last_updated_at = NOW(),\n expires_at = CASE WHEN ttl IS NOT NULL\n THEN NOW() + (ttl || ' milliseconds')::interval\n ELSE NULL END\n WHERE task_id = $1\n AND status NOT IN ('completed', 'failed', 'cancelled')\n AND ${NOT_EXPIRED}\n RETURNING status`,\n [taskId, status, JSON.stringify(result)]\n );\n\n if (!rowCount || rows.length === 0) {\n // Distinguish \"not found\" / \"expired\" from \"already terminal\".\n const { rows: existing } = await this.db.query(\n `SELECT status FROM ${this.table} WHERE task_id = $1 AND ${NOT_EXPIRED}`,\n [taskId]\n );\n if (existing.length === 0) {\n throw new Error(`Task with ID ${taskId} not found`);\n }\n throw new Error(\n `Cannot store result for task ${taskId} in terminal status '${existing[0]!.status}'. Task results can only be stored once.`\n );\n }\n }\n\n async getTaskResult(taskId: string, _sessionId?: string): Promise<Result> {\n const { rows } = await this.db.query(`SELECT result FROM ${this.table} WHERE task_id = $1 AND ${NOT_EXPIRED}`, [\n taskId,\n ]);\n\n if (rows.length === 0) {\n throw new Error(`Task with ID ${taskId} not found`);\n }\n const row = rows[0]!;\n if (row.result == null) {\n throw new Error(`Task ${taskId} has no result stored`);\n }\n return row.result as Result;\n }\n\n async updateTaskStatus(\n taskId: string,\n status: Task['status'],\n statusMessage?: string,\n _sessionId?: string\n ): Promise<void> {\n // Atomic: only update if not already in a terminal state.\n const { rowCount, rows } = await this.db.query(\n `UPDATE ${this.table}\n SET status = $2,\n status_message = COALESCE($3, status_message),\n last_updated_at = NOW(),\n expires_at = CASE\n WHEN $2 IN ('completed', 'failed', 'cancelled') AND ttl IS NOT NULL\n THEN NOW() + (ttl || ' milliseconds')::interval\n ELSE expires_at END\n WHERE task_id = $1\n AND status NOT IN ('completed', 'failed', 'cancelled')\n AND ${NOT_EXPIRED}\n RETURNING status`,\n [taskId, status, statusMessage ?? null]\n );\n\n if (!rowCount || rows.length === 0) {\n const { rows: existing } = await this.db.query(\n `SELECT status FROM ${this.table} WHERE task_id = $1 AND ${NOT_EXPIRED}`,\n [taskId]\n );\n if (existing.length === 0) {\n throw new Error(`Task with ID ${taskId} not found`);\n }\n throw new Error(\n `Cannot update task ${taskId} from terminal status '${existing[0]!.status}' to '${status}'. Terminal states (completed, failed, cancelled) cannot transition to other states.`\n );\n }\n }\n\n async listTasks(cursor?: string, _sessionId?: string): Promise<{ tasks: Task[]; nextCursor?: string }> {\n let rawRows: Record<string, unknown>[];\n\n if (cursor) {\n // Decode cursor: \"created_at|task_id\" — split on first | only,\n // so task IDs containing | are handled correctly.\n const sepIndex = cursor.indexOf('|');\n if (sepIndex < 1) {\n throw new Error(`Invalid cursor: ${cursor}`);\n }\n const cursorCreatedAt = cursor.slice(0, sepIndex);\n const cursorTaskId = cursor.slice(sepIndex + 1);\n if (!cursorTaskId || isNaN(Date.parse(cursorCreatedAt))) {\n throw new Error(`Invalid cursor: ${cursor}`);\n }\n\n ({ rows: rawRows } = await this.db.query(\n `SELECT *, created_at::text AS created_at_raw FROM ${this.table}\n WHERE ${NOT_EXPIRED}\n AND (created_at, task_id) > ($1::timestamptz, $2)\n ORDER BY created_at, task_id\n LIMIT $3`,\n [cursorCreatedAt, cursorTaskId, PAGE_SIZE + 1]\n ));\n } else {\n ({ rows: rawRows } = await this.db.query(\n `SELECT *, created_at::text AS created_at_raw FROM ${this.table}\n WHERE ${NOT_EXPIRED}\n ORDER BY created_at, task_id\n LIMIT $1`,\n [PAGE_SIZE + 1]\n ));\n }\n\n const rows = rawRows as unknown as (TaskRow & { created_at_raw: string })[];\n const hasMore = rows.length > PAGE_SIZE;\n const pageRows = hasMore ? rows.slice(0, PAGE_SIZE) : rows;\n const tasks = pageRows.map(rowToTask);\n\n let nextCursor: string | undefined;\n if (hasMore && pageRows.length > 0) {\n const last = pageRows[pageRows.length - 1]!;\n // Use the raw PostgreSQL text representation to preserve microsecond\n // precision. JavaScript Date only has millisecond precision, which\n // causes keyset pagination to re-include rows when multiple tasks\n // share the same millisecond.\n nextCursor = `${last.created_at_raw}|${last.task_id}`;\n }\n\n return { tasks, nextCursor };\n }\n\n /**\n * Delete expired tasks from the table.\n *\n * Call this on a schedule (e.g., every 5 minutes) to reclaim storage.\n * Reads automatically filter expired rows, so this is purely a storage\n * optimization — not required for correctness.\n *\n * @returns The number of deleted rows.\n */\n async cleanupExpired(): Promise<number> {\n const { rowCount } = await this.db.query(\n `DELETE FROM ${this.table} WHERE expires_at IS NOT NULL AND expires_at <= NOW()`\n );\n return rowCount ?? 0;\n }\n\n /**\n * No-op — PostgresTaskStore has no timers or background processes.\n * Matches the cleanup() method that InMemoryTaskStore exposes.\n */\n cleanup(): void {\n // Nothing to clean up — no timers.\n }\n}\n\n/**\n * Delete expired tasks from the task store table.\n *\n * Standalone version of `PostgresTaskStore.cleanupExpired()` for use\n * without a store instance.\n *\n * @returns The number of deleted rows.\n */\nexport async function cleanupExpiredTasks(db: PgQueryable, tableName: string = DEFAULT_TABLE): Promise<number> {\n if (!VALID_IDENTIFIER.test(tableName)) {\n throw new Error(`Invalid table name \"${tableName}\": must match ${VALID_IDENTIFIER}`);\n }\n const { rowCount } = await db.query(`DELETE FROM ${tableName} WHERE expires_at IS NOT NULL AND expires_at <= NOW()`);\n return rowCount ?? 0;\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1,9 +1,3 @@
|
|
|
1
|
-
import { fileURLToPath as __adcpFileURLToPath } from 'node:url';
|
|
2
|
-
import { dirname as __adcpDirname } from 'node:path';
|
|
3
|
-
import { createRequire as __adcpCreateRequire } from 'node:module';
|
|
4
|
-
const __filename = __adcpFileURLToPath(import.meta.url);
|
|
5
|
-
const __dirname = __adcpDirname(__filename);
|
|
6
|
-
const require = __adcpCreateRequire(import.meta.url);
|
|
7
1
|
const DEFAULT_REPORTING_CAPABILITIES = {
|
|
8
2
|
available_reporting_frequencies: ["daily"],
|
|
9
3
|
expected_delay_minutes: 240,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/server/product-defaults.ts"],"sourcesContent":["/**\n * Sensible defaults for ReportingCapabilities — a required field on Product\n * with 6 required sub-fields. Spread into your product definitions:\n *\n * @example\n * ```typescript\n * const product = {\n * product_id: 'display-1',\n * name: 'Display Ads',\n * reporting_capabilities: DEFAULT_REPORTING_CAPABILITIES,\n * };\n * ```\n */\n\nimport type { ReportingCapabilities } from '../types/core.generated';\n\nexport const DEFAULT_REPORTING_CAPABILITIES: ReportingCapabilities = {\n available_reporting_frequencies: ['daily'],\n expected_delay_minutes: 240,\n timezone: 'UTC',\n supports_webhooks: false,\n available_metrics: ['impressions', 'spend', 'clicks'],\n date_range_support: 'date_range',\n};\n"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/server/product-defaults.ts"],"sourcesContent":["/**\n * Sensible defaults for ReportingCapabilities — a required field on Product\n * with 6 required sub-fields. Spread into your product definitions:\n *\n * @example\n * ```typescript\n * const product = {\n * product_id: 'display-1',\n * name: 'Display Ads',\n * reporting_capabilities: DEFAULT_REPORTING_CAPABILITIES,\n * };\n * ```\n */\n\nimport type { ReportingCapabilities } from '../types/core.generated';\n\nexport const DEFAULT_REPORTING_CAPABILITIES: ReportingCapabilities = {\n available_reporting_frequencies: ['daily'],\n expected_delay_minutes: 240,\n timezone: 'UTC',\n supports_webhooks: false,\n available_metrics: ['impressions', 'spend', 'clicks'],\n date_range_support: 'date_range',\n};\n"],"mappings":"AAgBO,MAAM,iCAAwD;AAAA,EACnE,iCAAiC,CAAC,OAAO;AAAA,EACzC,wBAAwB;AAAA,EACxB,UAAU;AAAA,EACV,mBAAmB;AAAA,EACnB,mBAAmB,CAAC,eAAe,SAAS,QAAQ;AAAA,EACpD,oBAAoB;AACtB;","names":[]}
|
|
@@ -1,9 +1,3 @@
|
|
|
1
|
-
import { fileURLToPath as __adcpFileURLToPath } from 'node:url';
|
|
2
|
-
import { dirname as __adcpDirname } from 'node:path';
|
|
3
|
-
import { createRequire as __adcpCreateRequire } from 'node:module';
|
|
4
|
-
const __filename = __adcpFileURLToPath(import.meta.url);
|
|
5
|
-
const __dirname = __adcpDirname(__filename);
|
|
6
|
-
const require = __adcpCreateRequire(import.meta.url);
|
|
7
1
|
const CREDENTIAL_LABEL = "(api[_-]?key|key[_-]?id|signing[_-]?key|client[_-]?secret|client[_-]?id|password|passwd|pwd|secret|token|key|jwt|bearer)";
|
|
8
2
|
function redactCredentialPatterns(message) {
|
|
9
3
|
if (typeof message !== "string" || message.length === 0) return message;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/server/redact.ts"],"sourcesContent":["/**\n * Credential-shape redactor for diagnostic strings projected to the wire\n * via `error.details.reason`. Stage 4 of #1269 — defense-in-depth against\n * adopter-thrown errors whose `message` includes credential payloads\n * (raw bearer tokens, OAuth client secrets, signing keyids).\n *\n * **Production-default exposure is already gated** on\n * `exposeErrorDetails: process.env.NODE_ENV !== 'production'`. This\n * redactor closes the pre-production gap: adopters running in dev /\n * staging with `exposeErrorDetails: true` no longer leak credential\n * bytes when their resolver throws an error like\n * `Error('lookup failed for token=sk_live_abc')`.\n *\n * The redactor is intentionally conservative — it produces false\n * positives (legitimate IDs that match a credential pattern get\n * redacted too) rather than false negatives. Adopters who need the\n * unredacted error log it server-side, where the framework's logger\n * forwards `err.message` unchanged.\n *\n * @internal — used by the dispatcher's `err.message → details.reason`\n * projections (`create-adcp-server.ts`). Not part of the adopter\n * surface; adopters who want to sanitize `error.details` for their own\n * pipelines reach for `pickSafeDetails` instead.\n */\n\n// Credential-label alternation reused across multiple patterns. Captures\n// common credential field names with both `_` and `-` separators.\n// `key` is the bare form (e.g. `key=foo`); the underscored variants\n// (`api_key`, `key_id`, `signing_key`) are explicit alternation\n// branches because regex alternation matches left-to-right and the\n// longer labels would never match if `key` came first.\nconst CREDENTIAL_LABEL =\n '(api[_-]?key|key[_-]?id|signing[_-]?key|client[_-]?secret|client[_-]?id|password|passwd|pwd|secret|token|key|jwt|bearer)';\n\n/**\n * Patterns the redactor scrubs. Applied in order; each pattern replaces\n * the matched substring with a placeholder. Patterns are case-insensitive\n * where the match makes sense.\n *\n * 1. `Authorization: Bearer <token>` and similar HTTP-Auth shapes.\n * 2. URL-embedded basic-auth: `https://user:pass@host/` → strips the\n * password component (preserves scheme + user for diagnostic value).\n * 3. JSON-quoted credential fields: `\"token\":\"value\"`,\n * `\"client_secret\":\"value\"`, etc.\n * 4. Unquoted / single-quoted credential fields: `token=value`,\n * `client_id: value`, `key=value` — varied separators and quoting.\n * 5. Long alphanumeric strings (length ≥ 32) that look like tokens\n * (no spaces, hex / base64 / base64url charsets). Catches tokens\n * appearing without a labeling prefix.\n *\n * The 32-character threshold for the unlabeled pattern balances\n * catching real tokens (most production tokens are ≥ 32 chars) against\n * false positives on shorter IDs (UUIDs at 36 chars match, which is\n * fine — a UUID embedded in an error message gets redacted, the\n * server-side log keeps it).\n *\n * Signature accepts `unknown` rather than `string` so the dispatcher\n * can pass `String(err)` results without coercing first; the runtime\n * guard returns the input unchanged for non-string values.\n */\nexport function redactCredentialPatterns(message: unknown): unknown {\n if (typeof message !== 'string' || message.length === 0) return message;\n return (\n message\n // 1. Authorization headers — `Bearer <token>`.\n .replace(/\\bBearer\\s+[A-Za-z0-9_\\-.~+/=]{8,}/gi, 'Bearer <redacted>')\n // 2. URL-embedded basic-auth: strip the password component.\n // Matches `scheme://user:password@host/...` and replaces just\n // the password, preserving scheme + user for diagnostic value.\n .replace(/(https?:\\/\\/[^:/\\s@]+:)[^@\\s]+@/gi, '$1<redacted>@')\n // 3. JSON-quoted credential properties: \"token\":\"value\",\n // \"client_secret\":\"value\", etc. Matches any non-empty quoted\n // value (including short ones — labeled credentials are always\n // secrets regardless of length).\n .replace(new RegExp(`\"${CREDENTIAL_LABEL}\"\\\\s*:\\\\s*\"[^\"]+\"`, 'gi'), '\"$1\":\"<redacted>\"')\n // 4. Unquoted / single-quoted credential properties:\n // `token=value`, `client_id: value`. Allows optional quote\n // around both the label and the value.\n .replace(\n new RegExp(`\\\\b${CREDENTIAL_LABEL}['\"]?\\\\s*[=:]\\\\s*['\"]?[A-Za-z0-9_\\\\-.~+/=]{4,}['\"]?`, 'gi'),\n '$1=<redacted>'\n )\n // 5. Long token-shaped strings (≥ 32 chars of base64/hex/url-safe)\n // without an obvious label. Word-boundary anchored so legitimate\n // prose / sentence fragments don't match. The lower bound is 32\n // to avoid eating short hex IDs (8-char UUID prefixes etc.).\n .replace(/\\b[A-Za-z0-9_\\-.~+/=]{32,}\\b/g, '<redacted-token>')\n );\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/server/redact.ts"],"sourcesContent":["/**\n * Credential-shape redactor for diagnostic strings projected to the wire\n * via `error.details.reason`. Stage 4 of #1269 — defense-in-depth against\n * adopter-thrown errors whose `message` includes credential payloads\n * (raw bearer tokens, OAuth client secrets, signing keyids).\n *\n * **Production-default exposure is already gated** on\n * `exposeErrorDetails: process.env.NODE_ENV !== 'production'`. This\n * redactor closes the pre-production gap: adopters running in dev /\n * staging with `exposeErrorDetails: true` no longer leak credential\n * bytes when their resolver throws an error like\n * `Error('lookup failed for token=sk_live_abc')`.\n *\n * The redactor is intentionally conservative — it produces false\n * positives (legitimate IDs that match a credential pattern get\n * redacted too) rather than false negatives. Adopters who need the\n * unredacted error log it server-side, where the framework's logger\n * forwards `err.message` unchanged.\n *\n * @internal — used by the dispatcher's `err.message → details.reason`\n * projections (`create-adcp-server.ts`). Not part of the adopter\n * surface; adopters who want to sanitize `error.details` for their own\n * pipelines reach for `pickSafeDetails` instead.\n */\n\n// Credential-label alternation reused across multiple patterns. Captures\n// common credential field names with both `_` and `-` separators.\n// `key` is the bare form (e.g. `key=foo`); the underscored variants\n// (`api_key`, `key_id`, `signing_key`) are explicit alternation\n// branches because regex alternation matches left-to-right and the\n// longer labels would never match if `key` came first.\nconst CREDENTIAL_LABEL =\n '(api[_-]?key|key[_-]?id|signing[_-]?key|client[_-]?secret|client[_-]?id|password|passwd|pwd|secret|token|key|jwt|bearer)';\n\n/**\n * Patterns the redactor scrubs. Applied in order; each pattern replaces\n * the matched substring with a placeholder. Patterns are case-insensitive\n * where the match makes sense.\n *\n * 1. `Authorization: Bearer <token>` and similar HTTP-Auth shapes.\n * 2. URL-embedded basic-auth: `https://user:pass@host/` → strips the\n * password component (preserves scheme + user for diagnostic value).\n * 3. JSON-quoted credential fields: `\"token\":\"value\"`,\n * `\"client_secret\":\"value\"`, etc.\n * 4. Unquoted / single-quoted credential fields: `token=value`,\n * `client_id: value`, `key=value` — varied separators and quoting.\n * 5. Long alphanumeric strings (length ≥ 32) that look like tokens\n * (no spaces, hex / base64 / base64url charsets). Catches tokens\n * appearing without a labeling prefix.\n *\n * The 32-character threshold for the unlabeled pattern balances\n * catching real tokens (most production tokens are ≥ 32 chars) against\n * false positives on shorter IDs (UUIDs at 36 chars match, which is\n * fine — a UUID embedded in an error message gets redacted, the\n * server-side log keeps it).\n *\n * Signature accepts `unknown` rather than `string` so the dispatcher\n * can pass `String(err)` results without coercing first; the runtime\n * guard returns the input unchanged for non-string values.\n */\nexport function redactCredentialPatterns(message: unknown): unknown {\n if (typeof message !== 'string' || message.length === 0) return message;\n return (\n message\n // 1. Authorization headers — `Bearer <token>`.\n .replace(/\\bBearer\\s+[A-Za-z0-9_\\-.~+/=]{8,}/gi, 'Bearer <redacted>')\n // 2. URL-embedded basic-auth: strip the password component.\n // Matches `scheme://user:password@host/...` and replaces just\n // the password, preserving scheme + user for diagnostic value.\n .replace(/(https?:\\/\\/[^:/\\s@]+:)[^@\\s]+@/gi, '$1<redacted>@')\n // 3. JSON-quoted credential properties: \"token\":\"value\",\n // \"client_secret\":\"value\", etc. Matches any non-empty quoted\n // value (including short ones — labeled credentials are always\n // secrets regardless of length).\n .replace(new RegExp(`\"${CREDENTIAL_LABEL}\"\\\\s*:\\\\s*\"[^\"]+\"`, 'gi'), '\"$1\":\"<redacted>\"')\n // 4. Unquoted / single-quoted credential properties:\n // `token=value`, `client_id: value`. Allows optional quote\n // around both the label and the value.\n .replace(\n new RegExp(`\\\\b${CREDENTIAL_LABEL}['\"]?\\\\s*[=:]\\\\s*['\"]?[A-Za-z0-9_\\\\-.~+/=]{4,}['\"]?`, 'gi'),\n '$1=<redacted>'\n )\n // 5. Long token-shaped strings (≥ 32 chars of base64/hex/url-safe)\n // without an obvious label. Word-boundary anchored so legitimate\n // prose / sentence fragments don't match. The lower bound is 32\n // to avoid eating short hex IDs (8-char UUID prefixes etc.).\n .replace(/\\b[A-Za-z0-9_\\-.~+/=]{32,}\\b/g, '<redacted-token>')\n );\n}\n"],"mappings":"AA+BA,MAAM,mBACJ;AA4BK,SAAS,yBAAyB,SAA2B;AAClE,MAAI,OAAO,YAAY,YAAY,QAAQ,WAAW,EAAG,QAAO;AAChE,SACE,QAEG,QAAQ,wCAAwC,mBAAmB,EAInE,QAAQ,qCAAqC,eAAe,EAK5D,QAAQ,IAAI,OAAO,IAAI,gBAAgB,qBAAqB,IAAI,GAAG,mBAAmB,EAItF;AAAA,IACC,IAAI,OAAO,MAAM,gBAAgB,uDAAuD,IAAI;AAAA,IAC5F;AAAA,EACF,EAKC,QAAQ,iCAAiC,kBAAkB;AAElE;","names":[]}
|
|
@@ -1,9 +1,3 @@
|
|
|
1
|
-
import { fileURLToPath as __adcpFileURLToPath } from 'node:url';
|
|
2
|
-
import { dirname as __adcpDirname } from 'node:path';
|
|
3
|
-
import { createRequire as __adcpCreateRequire } from 'node:module';
|
|
4
|
-
const __filename = __adcpFileURLToPath(import.meta.url);
|
|
5
|
-
const __dirname = __adcpDirname(__filename);
|
|
6
|
-
const require = __adcpCreateRequire(import.meta.url);
|
|
7
1
|
import { validActionsForStatus } from "./media-buy-helpers.mjs";
|
|
8
2
|
function toStructuredContent(data) {
|
|
9
3
|
return data;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/server/responses.ts"],"sourcesContent":["/**\n * Typed response builders for AdCP MCP servers.\n *\n * @deprecated For new code, use `createAdcpServerFromPlatform` from\n * `@adcp/sdk/server` instead — it constructs wire responses internally\n * from your typed `DecisioningPlatform` return values, so adopters don't\n * touch these builders. The functions below remain exported for v5\n * adopters wiring raw MCP tool handlers (mid-migration), and for adopters\n * shaping bespoke tools the platform interface doesn't yet model. For new\n * v6 adopters, ignore this whole module — the framework handles wire\n * shaping.\n *\n * Each function takes typed data (compile-time checked against AdCP schemas)\n * and returns an MCP-compatible tool response with `content` (text summary)\n * + `structuredContent` (typed payload).\n *\n * The input parameter enforces the AdCP schema shape at compile time.\n * The return type is compatible with MCP SDK's CallToolResult.\n *\n * @example\n * ```typescript\n * import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\n * import { capabilitiesResponse, productsResponse, adcpError } from '@adcp/sdk/server';\n * import { GetProductsRequestSchema } from '@adcp/sdk/schemas';\n *\n * const server = new McpServer({ name: 'My Agent', version: '1.0.0' });\n *\n * server.registerTool(\n * 'get_adcp_capabilities',\n * { inputSchema: {} },\n * async () => capabilitiesResponse({ supported_protocols: ['media_buy'] })\n * );\n *\n * server.registerTool(\n * 'get_products',\n * { inputSchema: GetProductsRequestSchema.shape },\n * async (params) => productsResponse({ products: myProducts, cache_scope: 'account' })\n * );\n * ```\n */\n\nimport type { GetAdCPCapabilitiesResponse } from '../types/tools.generated';\nimport type { GetProductsResponse } from '../types/core.generated';\nimport type { CreateMediaBuySuccess } from '../types/core.generated';\nimport type { GetMediaBuyDeliveryResponse } from '../types/tools.generated';\nimport type { RequireCacheScopeWhenProducts, ServerPayload } from '../types/server-payload';\nimport { validActionsForStatus } from './media-buy-helpers';\nimport type { CancelMediaBuyInput } from './media-buy-helpers';\nimport type {\n ListCreativeFormatsResponse,\n UpdateMediaBuySuccess,\n GetMediaBuysResponse,\n ProvidePerformanceFeedbackSuccess,\n BuildCreativeSuccess,\n BuildCreativeMultiSuccess,\n PreviewCreativeSingleResponse,\n PreviewCreativeBatchResponse,\n PreviewCreativeVariantResponse,\n GetCreativeDeliveryResponse,\n ListCreativesResponse,\n SyncCreativesError,\n SyncCreativesSuccess,\n GetSignalsResponse,\n ActivateSignalSuccess,\n ListAccountsResponse,\n ListPropertyListsResponse,\n ListCollectionListsResponse,\n ListContentStandardsResponse,\n GetPlanAuditLogsResponse,\n ReportUsageRequest,\n ReportUsageResponse,\n SyncAccountsResponse,\n SyncGovernanceResponse,\n} from '../types/tools.generated';\nimport type {\n AcquireRightsResponse,\n AcquireRightsAcquired,\n AcquireRightsPendingApproval,\n AcquireRightsRejected,\n UpdateRightsResponse,\n UpdateRightsSuccess,\n CreativeApprovalResponse,\n CreativeApproved,\n CreativeRejected,\n CreativePendingReview,\n CreativeApprovalError,\n} from '../types/core.generated';\n\n/**\n * MCP-compatible tool response shape.\n *\n * `structuredContent` is optional because error responses legitimately carry\n * only `content` (the human-readable error text) — forcing every wrapper to\n * fabricate an empty structuredContent obscures the success/error split.\n * All success builders in this file still populate it.\n *\n * Uses Record<string, unknown> for structuredContent to satisfy\n * MCP SDK's CallToolResult index signature requirement.\n */\nexport interface McpToolResponse {\n [key: string]: unknown;\n content: Array<{ type: 'text'; text: string }>;\n structuredContent?: Record<string, unknown>;\n}\n\n// MCP SDK requires structuredContent to have an index signature ({ [x: string]: unknown }).\n// Generated AdCP types are TypeScript interfaces without index signatures. At runtime,\n// JSON objects are always Records — this bridge is safe.\nexport function toStructuredContent(data: object): Record<string, unknown> {\n return data as unknown as Record<string, unknown>;\n}\n\nconst MEDIA_BUY_STATUS_VALUES = new Set([\n 'pending_creatives',\n 'pending_start',\n 'active',\n 'paused',\n 'completed',\n 'rejected',\n 'canceled',\n]);\n\nfunction completedStructuredContent(data: object, opts?: { splitMediaBuyStatus?: boolean }): Record<string, unknown> {\n const structured = { ...toStructuredContent(data) };\n if (\n opts?.splitMediaBuyStatus === true &&\n typeof structured.status === 'string' &&\n MEDIA_BUY_STATUS_VALUES.has(structured.status)\n ) {\n if (structured.media_buy_status === undefined) structured.media_buy_status = structured.status;\n delete structured.status;\n }\n if (structured.status === undefined) structured.status = 'completed';\n return structured;\n}\n\nfunction failedStructuredContent(data: object): Record<string, unknown> {\n const structured = { ...toStructuredContent(data) };\n if (structured.status === undefined) structured.status = 'failed';\n return structured;\n}\n\nfunction stripNotificationConfigSecrets<T extends object>(row: T): T {\n const notificationConfigs = (row as { notification_configs?: unknown }).notification_configs;\n if (!Array.isArray(notificationConfigs)) return row;\n return {\n ...row,\n notification_configs: notificationConfigs.map(config => {\n if (config == null || typeof config !== 'object') return config;\n const authentication = (config as { authentication?: unknown }).authentication;\n if (authentication == null || typeof authentication !== 'object') return config;\n const { credentials: _credentials, ...authenticationWithoutCredentials } = authentication as Record<\n string,\n unknown\n >;\n const stripped = { ...(config as Record<string, unknown>) };\n if (Object.keys(authenticationWithoutCredentials).length > 0) {\n stripped.authentication = authenticationWithoutCredentials;\n } else {\n delete stripped.authentication;\n }\n return stripped;\n }),\n };\n}\n\nfunction stripBusinessEntityBank<T extends object>(row: T, key: 'billing_entity' | 'invoice_recipient'): T {\n const entity = (row as Record<string, unknown>)[key];\n if (entity == null || typeof entity !== 'object') return row;\n if (!('bank' in entity)) return row;\n const { bank: _bank, ...entityWithoutBank } = entity as Record<string, unknown>;\n const stripped = { ...row } as Record<string, unknown>;\n if (Object.keys(entityWithoutBank).length > 0) {\n stripped[key] = entityWithoutBank;\n } else {\n delete stripped[key];\n }\n return stripped as T;\n}\n\nfunction stripAccountWriteOnlyFields<T extends object>(account: T): T {\n return stripBusinessEntityBank(stripNotificationConfigSecrets(account), 'billing_entity');\n}\n\nfunction stripAccountsWriteOnlyFields<T extends { accounts?: unknown }>(data: T): T {\n if (!Array.isArray(data.accounts)) return data;\n return {\n ...data,\n accounts: data.accounts.map(account =>\n account != null && typeof account === 'object' ? stripAccountWriteOnlyFields(account) : account\n ),\n };\n}\n\nfunction stripMediaBuyWriteOnlyFields<T extends object>(buy: T): T {\n let stripped = stripBusinessEntityBank(buy, 'invoice_recipient');\n const account = (stripped as { account?: unknown }).account;\n if (account == null || typeof account !== 'object') return stripped;\n return {\n ...stripped,\n account: stripAccountWriteOnlyFields(account),\n };\n}\n\nfunction stripMediaBuysWriteOnlyFields<T extends { media_buys?: unknown }>(data: T): T {\n if (!Array.isArray(data.media_buys)) return data;\n return {\n ...data,\n media_buys: data.media_buys.map(buy =>\n buy != null && typeof buy === 'object' ? stripMediaBuyWriteOnlyFields(buy) : buy\n ),\n };\n}\n\n// `setup` is only ever nested inside an `Account` (the IO-signing / pending_approval\n// path). A top-level `setup` on a media buy response means the builder read the\n// storyboard's \"setup.url\" shorthand as a top-level field. The strict handler types\n// would catch this, but `DomainHandler` accepts `Record<string, unknown>` for DX,\n// so the error has to move to runtime.\nfunction assertNoTopLevelSetup(data: unknown, builder: string): void {\n if (data != null && typeof data === 'object' && 'setup' in data) {\n throw new Error(\n `${builder}: \\`setup\\` is not a field on the media buy — it belongs inside \\`account.setup\\`. ` +\n `Move \\`{ setup: { url, message } }\\` to \\`{ account: { ..., setup: { url, message } } }\\`. ` +\n `The setup URL is a property of the Account (returned alongside \\`status: 'pending_approval'\\`), not the MediaBuy.`\n );\n }\n}\n\n/**\n * Build a get_adcp_capabilities response.\n *\n * `supported_protocols` lists AdCP domain protocols (media_buy, signals, governance, etc.),\n * NOT transport protocols (mcp, a2a).\n *\n * Stamps the v3 protocol envelope's required `status: \"completed\"` field at\n * the top level of `structuredContent`. Synchronous task responses MUST carry\n * `status` per `protocol-envelope.json` (AdCP #4876); without it the\n * `v3_envelope_integrity/no_legacy_status_fields` conformance step fails.\n * The status is injected here rather than added to `GetAdCPCapabilitiesResponse`\n * because it's an envelope concern, not a payload field — the wire shape and\n * the typed payload model live at different layers.\n */\n/** @deprecated v6: `createAdcpServerFromPlatform` constructs wire responses from typed platform returns. Direct use is for v5 raw-handler adopters mid-migration only. */\nexport function capabilitiesResponse(\n data: ServerPayload<GetAdCPCapabilitiesResponse>,\n summary?: string\n): McpToolResponse {\n return {\n content: [{ type: 'text', text: summary ?? 'Agent capabilities retrieved' }],\n structuredContent: completedStructuredContent(data),\n };\n}\n\n/**\n * Build a get_products response.\n */\n/** @deprecated v6: `createAdcpServerFromPlatform` constructs wire responses from typed platform returns. Direct use is for v5 raw-handler adopters mid-migration only. */\nexport function productsResponse(\n data: RequireCacheScopeWhenProducts<ServerPayload<GetProductsResponse>>,\n summary?: string\n): McpToolResponse {\n const structured = completedStructuredContent(data);\n const defaultSummary =\n data.unchanged === true ? 'Product feed unchanged' : `Found ${(data.products ?? []).length} products`;\n return {\n content: [{ type: 'text', text: summary ?? defaultSummary }],\n structuredContent: structured,\n };\n}\n\n/**\n * Build a successful create_media_buy response.\n *\n * Applies protocol defaults when not explicitly provided:\n * - `revision` defaults to `1` (initial revision for optimistic concurrency)\n * - `confirmed_at` defaults to the current ISO 8601 timestamp\n * - `valid_actions` populated from status via `validActionsForStatus()` when\n * `status` is provided but `valid_actions` is not\n */\n/** @deprecated v6: `createAdcpServerFromPlatform` constructs wire responses from typed platform returns. Direct use is for v5 raw-handler adopters mid-migration only. */\nexport function mediaBuyResponse(data: ServerPayload<CreateMediaBuySuccess>, summary?: string): McpToolResponse {\n assertNoTopLevelSetup(data, 'mediaBuyResponse');\n const withDefaults = { ...stripMediaBuyWriteOnlyFields(data) };\n if (withDefaults.revision === undefined) {\n withDefaults.revision = 1;\n }\n if (withDefaults.confirmed_at === undefined) {\n withDefaults.confirmed_at = new Date().toISOString();\n }\n if (withDefaults.valid_actions === undefined && withDefaults.status != null) {\n withDefaults.valid_actions = validActionsForStatus(withDefaults.status);\n }\n return {\n content: [{ type: 'text', text: summary ?? `Media buy ${withDefaults.media_buy_id} created` }],\n structuredContent: completedStructuredContent(withDefaults, { splitMediaBuyStatus: true }),\n };\n}\n\n/**\n * Build a get_media_buy_delivery response.\n */\n/** @deprecated v6: `createAdcpServerFromPlatform` constructs wire responses from typed platform returns. Direct use is for v5 raw-handler adopters mid-migration only. */\nexport function deliveryResponse(data: ServerPayload<GetMediaBuyDeliveryResponse>, summary?: string): McpToolResponse {\n return {\n content: [\n {\n type: 'text',\n text:\n summary ??\n `Delivery data for ${data.media_buy_deliveries.length} media buy${data.media_buy_deliveries.length === 1 ? '' : 's'}`,\n },\n ],\n structuredContent: completedStructuredContent(data),\n };\n}\n\n/**\n * Build a list_accounts response.\n */\n/** @deprecated v6: `createAdcpServerFromPlatform` constructs wire responses from typed platform returns. Direct use is for v5 raw-handler adopters mid-migration only. */\nexport function listAccountsResponse(data: ServerPayload<ListAccountsResponse>, summary?: string): McpToolResponse {\n const stripped = stripAccountsWriteOnlyFields(data);\n return {\n content: [{ type: 'text', text: summary ?? `Found ${stripped.accounts.length} accounts` }],\n structuredContent: completedStructuredContent(stripped),\n };\n}\n\n/**\n * Build a list_creative_formats response.\n */\n/** @deprecated v6: `createAdcpServerFromPlatform` constructs wire responses from typed platform returns. Direct use is for v5 raw-handler adopters mid-migration only. */\nexport function listCreativeFormatsResponse(\n data: ServerPayload<ListCreativeFormatsResponse>,\n summary?: string\n): McpToolResponse {\n return {\n content: [{ type: 'text', text: summary ?? `Found ${data.formats.length} creative formats` }],\n structuredContent: completedStructuredContent(data),\n };\n}\n\n/**\n * Build a successful update_media_buy response.\n *\n * When `status` is provided but `valid_actions` is not, auto-populates\n * `valid_actions` from `validActionsForStatus()`.\n */\n/** @deprecated v6: `createAdcpServerFromPlatform` constructs wire responses from typed platform returns. Direct use is for v5 raw-handler adopters mid-migration only. */\nexport function updateMediaBuyResponse(data: ServerPayload<UpdateMediaBuySuccess>, summary?: string): McpToolResponse {\n assertNoTopLevelSetup(data, 'updateMediaBuyResponse');\n const withDefaults = { ...stripBusinessEntityBank(data, 'invoice_recipient') };\n if (withDefaults.valid_actions === undefined && withDefaults.status != null) {\n withDefaults.valid_actions = validActionsForStatus(withDefaults.status);\n }\n return {\n content: [{ type: 'text', text: summary ?? `Media buy ${withDefaults.media_buy_id} updated` }],\n structuredContent: completedStructuredContent(withDefaults, { splitMediaBuyStatus: true }),\n };\n}\n\n/**\n * Build a get_media_buys response.\n */\n/** @deprecated v6: `createAdcpServerFromPlatform` constructs wire responses from typed platform returns. Direct use is for v5 raw-handler adopters mid-migration only. */\nexport function getMediaBuysResponse(data: ServerPayload<GetMediaBuysResponse>, summary?: string): McpToolResponse {\n if (Array.isArray(data.media_buys)) {\n for (const buy of data.media_buys) {\n assertNoTopLevelSetup(buy, 'getMediaBuysResponse');\n }\n }\n const stripped = stripMediaBuysWriteOnlyFields(data);\n return {\n content: [\n {\n type: 'text',\n text: summary ?? `Found ${stripped.media_buys.length} media buy${stripped.media_buys.length === 1 ? '' : 's'}`,\n },\n ],\n structuredContent: completedStructuredContent(stripped),\n };\n}\n\n/**\n * Build a successful provide_performance_feedback response.\n */\n/** @deprecated v6: `createAdcpServerFromPlatform` constructs wire responses from typed platform returns. Direct use is for v5 raw-handler adopters mid-migration only. */\nexport function performanceFeedbackResponse(\n data: ServerPayload<ProvidePerformanceFeedbackSuccess>,\n summary?: string\n): McpToolResponse {\n return {\n content: [{ type: 'text', text: summary ?? 'Performance feedback accepted' }],\n structuredContent: completedStructuredContent(data),\n };\n}\n\n/**\n * Build a successful build_creative response (single format).\n */\n/** @deprecated v6: `createAdcpServerFromPlatform` constructs wire responses from typed platform returns. Direct use is for v5 raw-handler adopters mid-migration only. */\nexport function buildCreativeResponse(data: ServerPayload<BuildCreativeSuccess>, summary?: string): McpToolResponse {\n // Optional-chain the default summary — handler responses that drop\n // `format_id` still reach the wire-level schema validator (which names\n // the missing field), instead of crashing the dispatcher here with an\n // opaque `Cannot read properties of undefined (reading 'id')`.\n const formatId = data.creative_manifest?.format_id?.id;\n return {\n content: [{ type: 'text', text: summary ?? (formatId ? `Creative built: ${formatId}` : 'Creative built') }],\n structuredContent: completedStructuredContent(data),\n };\n}\n\n/**\n * Build a successful build_creative response (multi-format).\n */\n/** @deprecated v6: `createAdcpServerFromPlatform` constructs wire responses from typed platform returns. Direct use is for v5 raw-handler adopters mid-migration only. */\nexport function buildCreativeMultiResponse(\n data: ServerPayload<BuildCreativeMultiSuccess>,\n summary?: string\n): McpToolResponse {\n const count = data.creative_manifests?.length ?? 0;\n return {\n content: [{ type: 'text', text: summary ?? `Built ${count} creative formats` }],\n structuredContent: completedStructuredContent(data),\n };\n}\n\n/**\n * Build a preview_creative response.\n */\n/** @deprecated v6: `createAdcpServerFromPlatform` constructs wire responses from typed platform returns. Direct use is for v5 raw-handler adopters mid-migration only. */\nexport function previewCreativeResponse(\n data: PreviewCreativeSingleResponse | PreviewCreativeBatchResponse | PreviewCreativeVariantResponse,\n summary?: string\n): McpToolResponse {\n const defaultSummary =\n data.response_type === 'single'\n ? (() => {\n const n = (data as PreviewCreativeSingleResponse).previews.length;\n return `Preview generated: ${n} variant${n === 1 ? '' : 's'}`;\n })()\n : data.response_type === 'batch'\n ? (() => {\n const n = (data as PreviewCreativeBatchResponse).results.length;\n return `Batch preview: ${n} result${n === 1 ? '' : 's'}`;\n })()\n : `Variant preview generated`;\n return {\n content: [{ type: 'text', text: summary ?? defaultSummary }],\n structuredContent: completedStructuredContent(data),\n };\n}\n\n/**\n * Build a get_creative_delivery response.\n */\n/** @deprecated v6: `createAdcpServerFromPlatform` constructs wire responses from typed platform returns. Direct use is for v5 raw-handler adopters mid-migration only. */\nexport function creativeDeliveryResponse(\n data: ServerPayload<GetCreativeDeliveryResponse>,\n summary?: string\n): McpToolResponse {\n return {\n content: [{ type: 'text', text: summary ?? `Creative delivery data for ${data.currency} report` }],\n structuredContent: completedStructuredContent(data),\n };\n}\n\n/**\n * Build a list_creatives response.\n */\n/** @deprecated v6: `createAdcpServerFromPlatform` constructs wire responses from typed platform returns. Direct use is for v5 raw-handler adopters mid-migration only. */\nexport function listCreativesResponse(data: ServerPayload<ListCreativesResponse>, summary?: string): McpToolResponse {\n return {\n content: [\n {\n type: 'text',\n text:\n summary ?? `Found ${data.query_summary.total_matching} creatives (${data.query_summary.returned} returned)`,\n },\n ],\n structuredContent: completedStructuredContent(data),\n };\n}\n\n/**\n * Build a list_property_lists response. The governance property-list catalog\n * is returned under the required `lists` wrapper — use this helper so\n * handlers can't accidentally emit a bare array at the top level (which the\n * storyboard runner flags as shape drift).\n */\n/** @deprecated v6: `createAdcpServerFromPlatform` constructs wire responses from typed platform returns. Direct use is for v5 raw-handler adopters mid-migration only. */\nexport function listPropertyListsResponse(\n data: ServerPayload<ListPropertyListsResponse>,\n summary?: string\n): McpToolResponse {\n return {\n content: [\n {\n type: 'text',\n text: summary ?? `Found ${data.lists.length} property list${data.lists.length === 1 ? '' : 's'}`,\n },\n ],\n structuredContent: completedStructuredContent(data),\n };\n}\n\n/**\n * Build a list_collection_lists response. Companion to\n * `listPropertyListsResponse` — same `lists` wrapper shape; parallel\n * governance surface for program-level collections.\n */\n/** @deprecated v6: `createAdcpServerFromPlatform` constructs wire responses from typed platform returns. Direct use is for v5 raw-handler adopters mid-migration only. */\nexport function listCollectionListsResponse(\n data: ServerPayload<ListCollectionListsResponse>,\n summary?: string\n): McpToolResponse {\n return {\n content: [\n {\n type: 'text',\n text: summary ?? `Found ${data.lists.length} collection list${data.lists.length === 1 ? '' : 's'}`,\n },\n ],\n structuredContent: completedStructuredContent(data),\n };\n}\n\n/**\n * Build a list_content_standards response. The response type is a union\n * (success branch with `standards` array, error branch with `errors`) —\n * the helper wraps either shape verbatim; schema-level invariants are\n * enforced at wire validation, not here.\n *\n * Discriminates on `'standards' in data` rather than `'errors' in data` so\n * a legitimate success response that happens to carry advisory `errors`\n * still gets a counted summary. The error-only text fires only when\n * `standards` is absent. Mirrors `acquireRightsResponse`'s success-first\n * discrimination pattern a few screens down.\n */\n/** @deprecated v6: `createAdcpServerFromPlatform` constructs wire responses from typed platform returns. Direct use is for v5 raw-handler adopters mid-migration only. */\nexport function listContentStandardsResponse(\n data: ServerPayload<ListContentStandardsResponse>,\n summary?: string\n): McpToolResponse {\n const defaultSummary =\n 'standards' in data\n ? `Found ${data.standards.length} content standard${data.standards.length === 1 ? '' : 's'}`\n : 'Content standards lookup error';\n return {\n content: [{ type: 'text', text: summary ?? defaultSummary }],\n structuredContent: completedStructuredContent(data),\n };\n}\n\n/**\n * Build a get_plan_audit_logs response. Wraps the audit data array under\n * the required `plans` key — handlers that return a bare array trip the\n * storyboard runner's shape-drift hint.\n */\n/** @deprecated v6: `createAdcpServerFromPlatform` constructs wire responses from typed platform returns. Direct use is for v5 raw-handler adopters mid-migration only. */\nexport function getPlanAuditLogsResponse(\n data: ServerPayload<GetPlanAuditLogsResponse>,\n summary?: string\n): McpToolResponse {\n return {\n content: [\n {\n type: 'text',\n text: summary ?? `Audit data for ${data.plans.length} plan${data.plans.length === 1 ? '' : 's'}`,\n },\n ],\n structuredContent: completedStructuredContent(data),\n };\n}\n\ntype SyncCreativesResponsePayload = ServerPayload<SyncCreativesSuccess> | ServerPayload<SyncCreativesError>;\n\nfunction isSyncCreativesErrorPayload(data: SyncCreativesResponsePayload): data is ServerPayload<SyncCreativesError> {\n return (\n Array.isArray((data as { errors?: unknown }).errors) && !Array.isArray((data as { creatives?: unknown }).creatives)\n );\n}\n\n/**\n * Build a sync_creatives response. Accepts both row-level success payloads\n * and operation-level error payloads. If a payload includes `creatives`, the\n * builder treats it as success-shaped even when advisory row errors are also\n * present; operation-level errors are the errors-only arm.\n */\n/** @deprecated v6: `createAdcpServerFromPlatform` constructs wire responses from typed platform returns. Direct use is for v5 raw-handler adopters mid-migration only. */\nexport function syncCreativesResponse(data: SyncCreativesResponsePayload, summary?: string): McpToolResponse {\n if (isSyncCreativesErrorPayload(data)) {\n const firstError = data.errors[0];\n const defaultSummary = firstError ? `${firstError.code}: ${firstError.message}` : 'Sync creatives failed';\n return {\n content: [{ type: 'text', text: summary ?? defaultSummary }],\n isError: true,\n structuredContent: failedStructuredContent(data),\n };\n }\n\n return {\n content: [\n {\n type: 'text',\n text: summary ?? `Synced ${data.creatives.length} creative${data.creatives.length === 1 ? '' : 's'}`,\n },\n ],\n structuredContent: completedStructuredContent(data),\n };\n}\n\n/**\n * Build a get_signals response.\n */\n/** @deprecated v6: `createAdcpServerFromPlatform` constructs wire responses from typed platform returns. Direct use is for v5 raw-handler adopters mid-migration only. */\nexport function getSignalsResponse(data: ServerPayload<GetSignalsResponse>, summary?: string): McpToolResponse {\n return {\n content: [\n {\n type: 'text',\n text: summary ?? `Found ${(data.signals ?? []).length} signal${(data.signals ?? []).length === 1 ? '' : 's'}`,\n },\n ],\n structuredContent: completedStructuredContent(data),\n };\n}\n\n/**\n * Build a successful activate_signal response.\n */\n/** @deprecated v6: `createAdcpServerFromPlatform` constructs wire responses from typed platform returns. Direct use is for v5 raw-handler adopters mid-migration only. */\nexport function activateSignalResponse(data: ServerPayload<ActivateSignalSuccess>, summary?: string): McpToolResponse {\n return {\n content: [\n {\n type: 'text',\n text:\n summary ??\n `Signal activated across ${data.deployments.length} deployment${data.deployments.length === 1 ? '' : 's'}`,\n },\n ],\n structuredContent: completedStructuredContent(data),\n };\n}\n\n/**\n * Build a cancel response for update_media_buy with action: 'cancel'.\n *\n * Eliminates the cancellation metadata trap by requiring `canceled_by`\n * and auto-setting `canceled_at`, `status: 'canceled'`, and `valid_actions: []`.\n *\n * Note: `cancellation` is not yet on the `UpdateMediaBuySuccess` generated type\n * (it exists on the full `MediaBuy` entity). This builder constructs the response\n * as a plain object to include it. When the upstream schema adds `cancellation`\n * to the update response, this can be tightened.\n *\n * @example\n * ```typescript\n * server.registerTool(\n * 'update_media_buy',\n * { inputSchema: UpdateMediaBuyRequestSchema.shape },\n * async (params) => {\n * if (params.action === 'cancel') {\n * return cancelMediaBuyResponse({\n * media_buy_id: params.media_buy_id,\n * canceled_by: 'buyer',\n * revision: currentRevision + 1,\n * });\n * }\n * // ... handle other actions\n * }\n * );\n * ```\n */\n/** @deprecated v6: `createAdcpServerFromPlatform` constructs wire responses from typed platform returns. Direct use is for v5 raw-handler adopters mid-migration only. */\nexport function cancelMediaBuyResponse(input: CancelMediaBuyInput, summary?: string): McpToolResponse {\n const cancellation: Record<string, unknown> = {\n canceled_at: input.canceled_at ?? new Date().toISOString(),\n canceled_by: input.canceled_by,\n };\n if (input.reason !== undefined) {\n cancellation.reason = input.reason;\n }\n\n const data: Record<string, unknown> = {\n media_buy_id: input.media_buy_id,\n status: 'canceled',\n valid_actions: [],\n revision: input.revision,\n cancellation,\n };\n if (input.affected_packages !== undefined) {\n data.affected_packages = input.affected_packages;\n }\n if (input.sandbox !== undefined) {\n data.sandbox = input.sandbox;\n }\n\n return {\n content: [{ type: 'text', text: summary ?? `Media buy ${input.media_buy_id} canceled` }],\n structuredContent: completedStructuredContent(data, { splitMediaBuyStatus: true }),\n };\n}\n\n/**\n * Build an `acquire_rights` response. Thin envelope wrapper — enforces the\n * discriminated union on `status` at the type level, wraps the domain object\n * in `content` + `structuredContent`, nothing else. Schema-level constraints\n * (credential length, schemes cardinality, required-field presence) belong\n * in wire-level Zod validation, not here.\n *\n * Enable dev-time enforcement via\n * `createAdcpServer({ validation: { responses: 'strict' } })` until it\n * becomes the default.\n */\n/** @deprecated v6: `createAdcpServerFromPlatform` constructs wire responses from typed platform returns. Direct use is for v5 raw-handler adopters mid-migration only. */\nexport function acquireRightsResponse(data: ServerPayload<AcquireRightsResponse>, summary?: string): McpToolResponse {\n const dataAsAny = data as AcquireRightsResponse & { rights_status?: string; rights_id?: string };\n const defaultSummary =\n 'errors' in data\n ? 'Rights acquisition error'\n : dataAsAny.rights_status === 'acquired'\n ? `Rights ${dataAsAny.rights_id} acquired`\n : dataAsAny.rights_status === 'rejected'\n ? `Rights ${dataAsAny.rights_id} rejected`\n : `Rights ${dataAsAny.rights_id} pending approval`;\n return {\n content: [{ type: 'text', text: summary ?? defaultSummary }],\n structuredContent: completedStructuredContent(data),\n };\n}\n\n/**\n * Per-variant constructor — builds an `AcquireRightsAcquired` success response\n * and wraps it. Cleaner autocomplete than `acquireRightsResponse({ rights_status: 'acquired', ... })`\n * because a coding agent typing `acquireRightsAcqu…` gets the required-fields\n * shape directly without reading a 4-variant union.\n */\n/** @deprecated v6: `createAdcpServerFromPlatform` constructs wire responses from typed platform returns. Direct use is for v5 raw-handler adopters mid-migration only. */\nexport function acquireRightsAcquired(\n data: Omit<AcquireRightsAcquired, 'rights_status'>,\n summary?: string\n): McpToolResponse {\n return acquireRightsResponse({ ...data, rights_status: 'acquired' } as unknown as AcquireRightsResponse, summary);\n}\n\n/** Per-variant constructor for the `pending_approval` branch. */\n/** @deprecated v6: `createAdcpServerFromPlatform` constructs wire responses from typed platform returns. Direct use is for v5 raw-handler adopters mid-migration only. */\nexport function acquireRightsPendingApproval(\n data: Omit<AcquireRightsPendingApproval, 'rights_status'>,\n summary?: string\n): McpToolResponse {\n return acquireRightsResponse(\n { ...data, rights_status: 'pending_approval' } as unknown as AcquireRightsResponse,\n summary\n );\n}\n\n/** Per-variant constructor for the `rejected` branch. */\n/** @deprecated v6: `createAdcpServerFromPlatform` constructs wire responses from typed platform returns. Direct use is for v5 raw-handler adopters mid-migration only. */\nexport function acquireRightsRejected(\n data: Omit<AcquireRightsRejected, 'rights_status'>,\n summary?: string\n): McpToolResponse {\n return acquireRightsResponse({ ...data, rights_status: 'rejected' } as unknown as AcquireRightsResponse, summary);\n}\n\n/**\n * Build an `update_rights` response. Wraps a `UpdateRightsResponse` (success\n * or error arm — discriminated structurally on `errors` presence) in the\n * standard `content` + `structuredContent` envelope. The framework auto-\n * applies this wrapper for v6 typed-platform handlers; direct callers are\n * v5 raw-handler adopters only.\n *\n * Mirrors `acquireRightsResponse`'s shape conventions (success-first\n * default summary, error pass-through).\n */\n/** @deprecated v6: `createAdcpServerFromPlatform` constructs wire responses from typed platform returns. Direct use is for v5 raw-handler adopters mid-migration only. */\nexport function updateRightsResponse(data: ServerPayload<UpdateRightsResponse>, summary?: string): McpToolResponse {\n const defaultSummary =\n 'errors' in data\n ? 'Rights update error'\n : data.implementation_date == null\n ? `Rights ${data.rights_id} update pending approval`\n : `Rights ${data.rights_id} updated`;\n return {\n content: [{ type: 'text', text: summary ?? defaultSummary }],\n structuredContent: completedStructuredContent(data),\n };\n}\n\n/**\n * Per-variant constructor for the success arm. The wire spec doesn't\n * carry a `status` discriminator on `update_rights` (unlike\n * `acquire_rights`); success is identified structurally by absence of\n * `errors`. The narrow constructor is still useful — it gives autocomplete\n * the success-shape fields (`terms`, `generation_credentials`,\n * `rights_constraint`) without crossing the union.\n */\n/** @deprecated v6: `createAdcpServerFromPlatform` constructs wire responses from typed platform returns. Direct use is for v5 raw-handler adopters mid-migration only. */\nexport function updateRightsSuccess(data: ServerPayload<UpdateRightsSuccess>, summary?: string): McpToolResponse {\n return updateRightsResponse(data as unknown as UpdateRightsResponse, summary);\n}\n\n/**\n * Build a `creative_approval` webhook response.\n *\n * Unlike the other builders in this module, `creative_approval` is NOT an\n * MCP/A2A tool — the spec models it as an HTTP webhook. The buyer POSTs\n * a `CreativeApprovalRequest` to the `approval_webhook` URL returned in\n * `acquire_rights`; the brand-rights agent reviews and returns one of four\n * arms (Approved / Rejected / PendingReview / Error). Adopters wire this\n * builder into their HTTP server's response path — see the\n * `BrandRightsPlatform.reviewCreativeApproval` Platform method and the\n * skill at `skills/build-brand-rights-agent/SKILL.md` for the receiver\n * pattern.\n *\n * Returns the raw JSON-serializable payload, NOT an `McpToolResponse` —\n * webhooks have no `content` envelope. Adopters serialize this to JSON and\n * write to the HTTP response body.\n */\nexport function creativeApprovalResponse(data: CreativeApprovalResponse): CreativeApprovalResponse {\n return data;\n}\n\n/** Per-variant constructor for the `approved` branch — webhook payload. */\nexport function creativeApprovalApproved(data: Omit<CreativeApproved, 'status'>): CreativeApproved {\n return { ...data, status: 'approved' } as CreativeApproved;\n}\n\n/** Per-variant constructor for the `rejected` branch — webhook payload. */\nexport function creativeApprovalRejected(data: Omit<CreativeRejected, 'status'>): CreativeRejected {\n return { ...data, status: 'rejected' } as CreativeRejected;\n}\n\n/** Per-variant constructor for the `pending_review` branch — webhook payload. */\nexport function creativeApprovalPendingReview(data: Omit<CreativePendingReview, 'status'>): CreativePendingReview {\n return { ...data, status: 'pending_review' } as CreativePendingReview;\n}\n\n/** Per-variant constructor for the multi-error arm — webhook payload. */\nexport function creativeApprovalError(data: CreativeApprovalError): CreativeApprovalError {\n return data;\n}\n\n/**\n * Build a `sync_accounts` response. Thin envelope wrapper accepting the full\n * `SyncAccountsResponse` union; error payloads pass through.\n */\n/** @deprecated v6: `createAdcpServerFromPlatform` constructs wire responses from typed platform returns. Direct use is for v5 raw-handler adopters mid-migration only. */\nexport function syncAccountsResponse(data: ServerPayload<SyncAccountsResponse>, summary?: string): McpToolResponse {\n const stripped = 'accounts' in data ? stripAccountsWriteOnlyFields(data) : data;\n const defaultSummary =\n 'errors' in stripped\n ? 'Account sync error'\n : `Synced ${stripped.accounts?.length ?? 0} account${stripped.accounts?.length === 1 ? '' : 's'}`;\n return {\n content: [{ type: 'text', text: summary ?? defaultSummary }],\n structuredContent: completedStructuredContent(stripped),\n };\n}\n\n/**\n * Build a sync_governance response. The spec permits two top-level shapes\n * (success / error); the type union enforces discrimination on `status`.\n *\n * Strips `governance_agents[i].authentication` from every row before emit:\n * the spec marks `authentication.credentials` write-only (the buyer sends\n * the bearer; the seller persists it for outbound `check_governance` calls\n * but MUST NOT echo it back). The natural `{ ...entry.governance_agents[i] }`\n * echo idiom would compile silently against the typed return shape and ship\n * credentials over the wire AND into the idempotency replay cache, arming\n * the buyer (and any subsequent caller hitting the same key) to impersonate\n * the seller against the governance agent. Strip is enforced at the wire-\n * emit boundary so both v5 (`opts.accounts.syncGovernance`) and v6\n * (`AccountStore.syncGovernance`) paths are protected.\n */\n/** @deprecated v6: `createAdcpServerFromPlatform` constructs wire responses from typed platform returns. Direct use is for v5 raw-handler adopters mid-migration only. */\nexport function syncGovernanceResponse(data: ServerPayload<SyncGovernanceResponse>, summary?: string): McpToolResponse {\n const stripped = stripGovernanceAgentSecrets(data);\n return {\n content: [{ type: 'text', text: summary ?? 'Governance registration synced' }],\n structuredContent: completedStructuredContent(stripped),\n };\n}\n\nfunction stripGovernanceAgentSecrets(\n data: ServerPayload<SyncGovernanceResponse>\n): ServerPayload<SyncGovernanceResponse> {\n if (!('accounts' in data) || !Array.isArray(data.accounts)) return data;\n return {\n ...data,\n accounts: data.accounts.map(row => {\n if (!row.governance_agents) return row;\n return {\n ...row,\n // AdCP 3.1.0-beta.2 narrowed the wire shape to `{ url }` only;\n // `categories` was removed (per-agent category signaling moved\n // out of band) and `authentication` remains write-only. Project\n // explicitly to defeat JS / `as any` smuggling of either field.\n governance_agents: row.governance_agents.map(a => ({ url: a.url })),\n };\n }),\n };\n}\n\n/**\n * Build a `report_usage` response. Thin envelope wrapper. Schema-level\n * `accepted` requiredness is enforced at the type level (via\n * `ReportUsageResponse.accepted: number`) and at wire-level validation;\n * this builder does not re-assert it.\n *\n * @example\n * ```typescript\n * // Explicit:\n * reportUsage: async (params) =>\n * reportUsageResponse({ accepted: 8, errors: [{ usage_index: 2, message: 'invalid' }] })\n *\n * // Ack every usage[] row with optional errors (shortcut):\n * reportUsage: async (params) => reportUsageResponse.acceptAll(params)\n * ```\n */\n/** @deprecated v6: `createAdcpServerFromPlatform` constructs wire responses from typed platform returns. Direct use is for v5 raw-handler adopters mid-migration only. */\nexport function reportUsageResponse(data: ServerPayload<ReportUsageResponse>, summary?: string): McpToolResponse {\n return {\n content: [\n { type: 'text', text: summary ?? `Accepted ${data.accepted} usage record${data.accepted === 1 ? '' : 's'}` },\n ],\n structuredContent: completedStructuredContent(data),\n };\n}\n\n/**\n * Shortcut for the common case: accept all rows in the request, optionally\n * minus any `errors[]` the caller computed. Sets\n * `accepted = (request.usage?.length ?? 0) - errors.length`.\n *\n * Use with honest errors — passing no `errors` when rows failed validation\n * is lying to buyers and the audit trail.\n */\nreportUsageResponse.acceptAll = function acceptAll(\n request: ReportUsageRequest,\n opts?: { errors?: ReportUsageResponse['errors']; summary?: string }\n): McpToolResponse {\n const total = request.usage?.length ?? 0;\n const errors = opts?.errors ?? [];\n const accepted = Math.max(0, total - errors.length);\n return reportUsageResponse(\n {\n status: errors.length > 0 ? 'failed' : 'completed',\n accepted,\n ...(errors.length > 0 ? { errors } : {}),\n } as ReportUsageResponse,\n opts?.summary\n );\n};\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/server/responses.ts"],"sourcesContent":["/**\n * Typed response builders for AdCP MCP servers.\n *\n * @deprecated For new code, use `createAdcpServerFromPlatform` from\n * `@adcp/sdk/server` instead — it constructs wire responses internally\n * from your typed `DecisioningPlatform` return values, so adopters don't\n * touch these builders. The functions below remain exported for v5\n * adopters wiring raw MCP tool handlers (mid-migration), and for adopters\n * shaping bespoke tools the platform interface doesn't yet model. For new\n * v6 adopters, ignore this whole module — the framework handles wire\n * shaping.\n *\n * Each function takes typed data (compile-time checked against AdCP schemas)\n * and returns an MCP-compatible tool response with `content` (text summary)\n * + `structuredContent` (typed payload).\n *\n * The input parameter enforces the AdCP schema shape at compile time.\n * The return type is compatible with MCP SDK's CallToolResult.\n *\n * @example\n * ```typescript\n * import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\n * import { capabilitiesResponse, productsResponse, adcpError } from '@adcp/sdk/server';\n * import { GetProductsRequestSchema } from '@adcp/sdk/schemas';\n *\n * const server = new McpServer({ name: 'My Agent', version: '1.0.0' });\n *\n * server.registerTool(\n * 'get_adcp_capabilities',\n * { inputSchema: {} },\n * async () => capabilitiesResponse({ supported_protocols: ['media_buy'] })\n * );\n *\n * server.registerTool(\n * 'get_products',\n * { inputSchema: GetProductsRequestSchema.shape },\n * async (params) => productsResponse({ products: myProducts, cache_scope: 'account' })\n * );\n * ```\n */\n\nimport type { GetAdCPCapabilitiesResponse } from '../types/tools.generated';\nimport type { GetProductsResponse } from '../types/core.generated';\nimport type { CreateMediaBuySuccess } from '../types/core.generated';\nimport type { GetMediaBuyDeliveryResponse } from '../types/tools.generated';\nimport type { RequireCacheScopeWhenProducts, ServerPayload } from '../types/server-payload';\nimport { validActionsForStatus } from './media-buy-helpers';\nimport type { CancelMediaBuyInput } from './media-buy-helpers';\nimport type {\n ListCreativeFormatsResponse,\n UpdateMediaBuySuccess,\n GetMediaBuysResponse,\n ProvidePerformanceFeedbackSuccess,\n BuildCreativeSuccess,\n BuildCreativeMultiSuccess,\n PreviewCreativeSingleResponse,\n PreviewCreativeBatchResponse,\n PreviewCreativeVariantResponse,\n GetCreativeDeliveryResponse,\n ListCreativesResponse,\n SyncCreativesError,\n SyncCreativesSuccess,\n GetSignalsResponse,\n ActivateSignalSuccess,\n ListAccountsResponse,\n ListPropertyListsResponse,\n ListCollectionListsResponse,\n ListContentStandardsResponse,\n GetPlanAuditLogsResponse,\n ReportUsageRequest,\n ReportUsageResponse,\n SyncAccountsResponse,\n SyncGovernanceResponse,\n} from '../types/tools.generated';\nimport type {\n AcquireRightsResponse,\n AcquireRightsAcquired,\n AcquireRightsPendingApproval,\n AcquireRightsRejected,\n UpdateRightsResponse,\n UpdateRightsSuccess,\n CreativeApprovalResponse,\n CreativeApproved,\n CreativeRejected,\n CreativePendingReview,\n CreativeApprovalError,\n} from '../types/core.generated';\n\n/**\n * MCP-compatible tool response shape.\n *\n * `structuredContent` is optional because error responses legitimately carry\n * only `content` (the human-readable error text) — forcing every wrapper to\n * fabricate an empty structuredContent obscures the success/error split.\n * All success builders in this file still populate it.\n *\n * Uses Record<string, unknown> for structuredContent to satisfy\n * MCP SDK's CallToolResult index signature requirement.\n */\nexport interface McpToolResponse {\n [key: string]: unknown;\n content: Array<{ type: 'text'; text: string }>;\n structuredContent?: Record<string, unknown>;\n}\n\n// MCP SDK requires structuredContent to have an index signature ({ [x: string]: unknown }).\n// Generated AdCP types are TypeScript interfaces without index signatures. At runtime,\n// JSON objects are always Records — this bridge is safe.\nexport function toStructuredContent(data: object): Record<string, unknown> {\n return data as unknown as Record<string, unknown>;\n}\n\nconst MEDIA_BUY_STATUS_VALUES = new Set([\n 'pending_creatives',\n 'pending_start',\n 'active',\n 'paused',\n 'completed',\n 'rejected',\n 'canceled',\n]);\n\nfunction completedStructuredContent(data: object, opts?: { splitMediaBuyStatus?: boolean }): Record<string, unknown> {\n const structured = { ...toStructuredContent(data) };\n if (\n opts?.splitMediaBuyStatus === true &&\n typeof structured.status === 'string' &&\n MEDIA_BUY_STATUS_VALUES.has(structured.status)\n ) {\n if (structured.media_buy_status === undefined) structured.media_buy_status = structured.status;\n delete structured.status;\n }\n if (structured.status === undefined) structured.status = 'completed';\n return structured;\n}\n\nfunction failedStructuredContent(data: object): Record<string, unknown> {\n const structured = { ...toStructuredContent(data) };\n if (structured.status === undefined) structured.status = 'failed';\n return structured;\n}\n\nfunction stripNotificationConfigSecrets<T extends object>(row: T): T {\n const notificationConfigs = (row as { notification_configs?: unknown }).notification_configs;\n if (!Array.isArray(notificationConfigs)) return row;\n return {\n ...row,\n notification_configs: notificationConfigs.map(config => {\n if (config == null || typeof config !== 'object') return config;\n const authentication = (config as { authentication?: unknown }).authentication;\n if (authentication == null || typeof authentication !== 'object') return config;\n const { credentials: _credentials, ...authenticationWithoutCredentials } = authentication as Record<\n string,\n unknown\n >;\n const stripped = { ...(config as Record<string, unknown>) };\n if (Object.keys(authenticationWithoutCredentials).length > 0) {\n stripped.authentication = authenticationWithoutCredentials;\n } else {\n delete stripped.authentication;\n }\n return stripped;\n }),\n };\n}\n\nfunction stripBusinessEntityBank<T extends object>(row: T, key: 'billing_entity' | 'invoice_recipient'): T {\n const entity = (row as Record<string, unknown>)[key];\n if (entity == null || typeof entity !== 'object') return row;\n if (!('bank' in entity)) return row;\n const { bank: _bank, ...entityWithoutBank } = entity as Record<string, unknown>;\n const stripped = { ...row } as Record<string, unknown>;\n if (Object.keys(entityWithoutBank).length > 0) {\n stripped[key] = entityWithoutBank;\n } else {\n delete stripped[key];\n }\n return stripped as T;\n}\n\nfunction stripAccountWriteOnlyFields<T extends object>(account: T): T {\n return stripBusinessEntityBank(stripNotificationConfigSecrets(account), 'billing_entity');\n}\n\nfunction stripAccountsWriteOnlyFields<T extends { accounts?: unknown }>(data: T): T {\n if (!Array.isArray(data.accounts)) return data;\n return {\n ...data,\n accounts: data.accounts.map(account =>\n account != null && typeof account === 'object' ? stripAccountWriteOnlyFields(account) : account\n ),\n };\n}\n\nfunction stripMediaBuyWriteOnlyFields<T extends object>(buy: T): T {\n let stripped = stripBusinessEntityBank(buy, 'invoice_recipient');\n const account = (stripped as { account?: unknown }).account;\n if (account == null || typeof account !== 'object') return stripped;\n return {\n ...stripped,\n account: stripAccountWriteOnlyFields(account),\n };\n}\n\nfunction stripMediaBuysWriteOnlyFields<T extends { media_buys?: unknown }>(data: T): T {\n if (!Array.isArray(data.media_buys)) return data;\n return {\n ...data,\n media_buys: data.media_buys.map(buy =>\n buy != null && typeof buy === 'object' ? stripMediaBuyWriteOnlyFields(buy) : buy\n ),\n };\n}\n\n// `setup` is only ever nested inside an `Account` (the IO-signing / pending_approval\n// path). A top-level `setup` on a media buy response means the builder read the\n// storyboard's \"setup.url\" shorthand as a top-level field. The strict handler types\n// would catch this, but `DomainHandler` accepts `Record<string, unknown>` for DX,\n// so the error has to move to runtime.\nfunction assertNoTopLevelSetup(data: unknown, builder: string): void {\n if (data != null && typeof data === 'object' && 'setup' in data) {\n throw new Error(\n `${builder}: \\`setup\\` is not a field on the media buy — it belongs inside \\`account.setup\\`. ` +\n `Move \\`{ setup: { url, message } }\\` to \\`{ account: { ..., setup: { url, message } } }\\`. ` +\n `The setup URL is a property of the Account (returned alongside \\`status: 'pending_approval'\\`), not the MediaBuy.`\n );\n }\n}\n\n/**\n * Build a get_adcp_capabilities response.\n *\n * `supported_protocols` lists AdCP domain protocols (media_buy, signals, governance, etc.),\n * NOT transport protocols (mcp, a2a).\n *\n * Stamps the v3 protocol envelope's required `status: \"completed\"` field at\n * the top level of `structuredContent`. Synchronous task responses MUST carry\n * `status` per `protocol-envelope.json` (AdCP #4876); without it the\n * `v3_envelope_integrity/no_legacy_status_fields` conformance step fails.\n * The status is injected here rather than added to `GetAdCPCapabilitiesResponse`\n * because it's an envelope concern, not a payload field — the wire shape and\n * the typed payload model live at different layers.\n */\n/** @deprecated v6: `createAdcpServerFromPlatform` constructs wire responses from typed platform returns. Direct use is for v5 raw-handler adopters mid-migration only. */\nexport function capabilitiesResponse(\n data: ServerPayload<GetAdCPCapabilitiesResponse>,\n summary?: string\n): McpToolResponse {\n return {\n content: [{ type: 'text', text: summary ?? 'Agent capabilities retrieved' }],\n structuredContent: completedStructuredContent(data),\n };\n}\n\n/**\n * Build a get_products response.\n */\n/** @deprecated v6: `createAdcpServerFromPlatform` constructs wire responses from typed platform returns. Direct use is for v5 raw-handler adopters mid-migration only. */\nexport function productsResponse(\n data: RequireCacheScopeWhenProducts<ServerPayload<GetProductsResponse>>,\n summary?: string\n): McpToolResponse {\n const structured = completedStructuredContent(data);\n const defaultSummary =\n data.unchanged === true ? 'Product feed unchanged' : `Found ${(data.products ?? []).length} products`;\n return {\n content: [{ type: 'text', text: summary ?? defaultSummary }],\n structuredContent: structured,\n };\n}\n\n/**\n * Build a successful create_media_buy response.\n *\n * Applies protocol defaults when not explicitly provided:\n * - `revision` defaults to `1` (initial revision for optimistic concurrency)\n * - `confirmed_at` defaults to the current ISO 8601 timestamp\n * - `valid_actions` populated from status via `validActionsForStatus()` when\n * `status` is provided but `valid_actions` is not\n */\n/** @deprecated v6: `createAdcpServerFromPlatform` constructs wire responses from typed platform returns. Direct use is for v5 raw-handler adopters mid-migration only. */\nexport function mediaBuyResponse(data: ServerPayload<CreateMediaBuySuccess>, summary?: string): McpToolResponse {\n assertNoTopLevelSetup(data, 'mediaBuyResponse');\n const withDefaults = { ...stripMediaBuyWriteOnlyFields(data) };\n if (withDefaults.revision === undefined) {\n withDefaults.revision = 1;\n }\n if (withDefaults.confirmed_at === undefined) {\n withDefaults.confirmed_at = new Date().toISOString();\n }\n if (withDefaults.valid_actions === undefined && withDefaults.status != null) {\n withDefaults.valid_actions = validActionsForStatus(withDefaults.status);\n }\n return {\n content: [{ type: 'text', text: summary ?? `Media buy ${withDefaults.media_buy_id} created` }],\n structuredContent: completedStructuredContent(withDefaults, { splitMediaBuyStatus: true }),\n };\n}\n\n/**\n * Build a get_media_buy_delivery response.\n */\n/** @deprecated v6: `createAdcpServerFromPlatform` constructs wire responses from typed platform returns. Direct use is for v5 raw-handler adopters mid-migration only. */\nexport function deliveryResponse(data: ServerPayload<GetMediaBuyDeliveryResponse>, summary?: string): McpToolResponse {\n return {\n content: [\n {\n type: 'text',\n text:\n summary ??\n `Delivery data for ${data.media_buy_deliveries.length} media buy${data.media_buy_deliveries.length === 1 ? '' : 's'}`,\n },\n ],\n structuredContent: completedStructuredContent(data),\n };\n}\n\n/**\n * Build a list_accounts response.\n */\n/** @deprecated v6: `createAdcpServerFromPlatform` constructs wire responses from typed platform returns. Direct use is for v5 raw-handler adopters mid-migration only. */\nexport function listAccountsResponse(data: ServerPayload<ListAccountsResponse>, summary?: string): McpToolResponse {\n const stripped = stripAccountsWriteOnlyFields(data);\n return {\n content: [{ type: 'text', text: summary ?? `Found ${stripped.accounts.length} accounts` }],\n structuredContent: completedStructuredContent(stripped),\n };\n}\n\n/**\n * Build a list_creative_formats response.\n */\n/** @deprecated v6: `createAdcpServerFromPlatform` constructs wire responses from typed platform returns. Direct use is for v5 raw-handler adopters mid-migration only. */\nexport function listCreativeFormatsResponse(\n data: ServerPayload<ListCreativeFormatsResponse>,\n summary?: string\n): McpToolResponse {\n return {\n content: [{ type: 'text', text: summary ?? `Found ${data.formats.length} creative formats` }],\n structuredContent: completedStructuredContent(data),\n };\n}\n\n/**\n * Build a successful update_media_buy response.\n *\n * When `status` is provided but `valid_actions` is not, auto-populates\n * `valid_actions` from `validActionsForStatus()`.\n */\n/** @deprecated v6: `createAdcpServerFromPlatform` constructs wire responses from typed platform returns. Direct use is for v5 raw-handler adopters mid-migration only. */\nexport function updateMediaBuyResponse(data: ServerPayload<UpdateMediaBuySuccess>, summary?: string): McpToolResponse {\n assertNoTopLevelSetup(data, 'updateMediaBuyResponse');\n const withDefaults = { ...stripBusinessEntityBank(data, 'invoice_recipient') };\n if (withDefaults.valid_actions === undefined && withDefaults.status != null) {\n withDefaults.valid_actions = validActionsForStatus(withDefaults.status);\n }\n return {\n content: [{ type: 'text', text: summary ?? `Media buy ${withDefaults.media_buy_id} updated` }],\n structuredContent: completedStructuredContent(withDefaults, { splitMediaBuyStatus: true }),\n };\n}\n\n/**\n * Build a get_media_buys response.\n */\n/** @deprecated v6: `createAdcpServerFromPlatform` constructs wire responses from typed platform returns. Direct use is for v5 raw-handler adopters mid-migration only. */\nexport function getMediaBuysResponse(data: ServerPayload<GetMediaBuysResponse>, summary?: string): McpToolResponse {\n if (Array.isArray(data.media_buys)) {\n for (const buy of data.media_buys) {\n assertNoTopLevelSetup(buy, 'getMediaBuysResponse');\n }\n }\n const stripped = stripMediaBuysWriteOnlyFields(data);\n return {\n content: [\n {\n type: 'text',\n text: summary ?? `Found ${stripped.media_buys.length} media buy${stripped.media_buys.length === 1 ? '' : 's'}`,\n },\n ],\n structuredContent: completedStructuredContent(stripped),\n };\n}\n\n/**\n * Build a successful provide_performance_feedback response.\n */\n/** @deprecated v6: `createAdcpServerFromPlatform` constructs wire responses from typed platform returns. Direct use is for v5 raw-handler adopters mid-migration only. */\nexport function performanceFeedbackResponse(\n data: ServerPayload<ProvidePerformanceFeedbackSuccess>,\n summary?: string\n): McpToolResponse {\n return {\n content: [{ type: 'text', text: summary ?? 'Performance feedback accepted' }],\n structuredContent: completedStructuredContent(data),\n };\n}\n\n/**\n * Build a successful build_creative response (single format).\n */\n/** @deprecated v6: `createAdcpServerFromPlatform` constructs wire responses from typed platform returns. Direct use is for v5 raw-handler adopters mid-migration only. */\nexport function buildCreativeResponse(data: ServerPayload<BuildCreativeSuccess>, summary?: string): McpToolResponse {\n // Optional-chain the default summary — handler responses that drop\n // `format_id` still reach the wire-level schema validator (which names\n // the missing field), instead of crashing the dispatcher here with an\n // opaque `Cannot read properties of undefined (reading 'id')`.\n const formatId = data.creative_manifest?.format_id?.id;\n return {\n content: [{ type: 'text', text: summary ?? (formatId ? `Creative built: ${formatId}` : 'Creative built') }],\n structuredContent: completedStructuredContent(data),\n };\n}\n\n/**\n * Build a successful build_creative response (multi-format).\n */\n/** @deprecated v6: `createAdcpServerFromPlatform` constructs wire responses from typed platform returns. Direct use is for v5 raw-handler adopters mid-migration only. */\nexport function buildCreativeMultiResponse(\n data: ServerPayload<BuildCreativeMultiSuccess>,\n summary?: string\n): McpToolResponse {\n const count = data.creative_manifests?.length ?? 0;\n return {\n content: [{ type: 'text', text: summary ?? `Built ${count} creative formats` }],\n structuredContent: completedStructuredContent(data),\n };\n}\n\n/**\n * Build a preview_creative response.\n */\n/** @deprecated v6: `createAdcpServerFromPlatform` constructs wire responses from typed platform returns. Direct use is for v5 raw-handler adopters mid-migration only. */\nexport function previewCreativeResponse(\n data: PreviewCreativeSingleResponse | PreviewCreativeBatchResponse | PreviewCreativeVariantResponse,\n summary?: string\n): McpToolResponse {\n const defaultSummary =\n data.response_type === 'single'\n ? (() => {\n const n = (data as PreviewCreativeSingleResponse).previews.length;\n return `Preview generated: ${n} variant${n === 1 ? '' : 's'}`;\n })()\n : data.response_type === 'batch'\n ? (() => {\n const n = (data as PreviewCreativeBatchResponse).results.length;\n return `Batch preview: ${n} result${n === 1 ? '' : 's'}`;\n })()\n : `Variant preview generated`;\n return {\n content: [{ type: 'text', text: summary ?? defaultSummary }],\n structuredContent: completedStructuredContent(data),\n };\n}\n\n/**\n * Build a get_creative_delivery response.\n */\n/** @deprecated v6: `createAdcpServerFromPlatform` constructs wire responses from typed platform returns. Direct use is for v5 raw-handler adopters mid-migration only. */\nexport function creativeDeliveryResponse(\n data: ServerPayload<GetCreativeDeliveryResponse>,\n summary?: string\n): McpToolResponse {\n return {\n content: [{ type: 'text', text: summary ?? `Creative delivery data for ${data.currency} report` }],\n structuredContent: completedStructuredContent(data),\n };\n}\n\n/**\n * Build a list_creatives response.\n */\n/** @deprecated v6: `createAdcpServerFromPlatform` constructs wire responses from typed platform returns. Direct use is for v5 raw-handler adopters mid-migration only. */\nexport function listCreativesResponse(data: ServerPayload<ListCreativesResponse>, summary?: string): McpToolResponse {\n return {\n content: [\n {\n type: 'text',\n text:\n summary ?? `Found ${data.query_summary.total_matching} creatives (${data.query_summary.returned} returned)`,\n },\n ],\n structuredContent: completedStructuredContent(data),\n };\n}\n\n/**\n * Build a list_property_lists response. The governance property-list catalog\n * is returned under the required `lists` wrapper — use this helper so\n * handlers can't accidentally emit a bare array at the top level (which the\n * storyboard runner flags as shape drift).\n */\n/** @deprecated v6: `createAdcpServerFromPlatform` constructs wire responses from typed platform returns. Direct use is for v5 raw-handler adopters mid-migration only. */\nexport function listPropertyListsResponse(\n data: ServerPayload<ListPropertyListsResponse>,\n summary?: string\n): McpToolResponse {\n return {\n content: [\n {\n type: 'text',\n text: summary ?? `Found ${data.lists.length} property list${data.lists.length === 1 ? '' : 's'}`,\n },\n ],\n structuredContent: completedStructuredContent(data),\n };\n}\n\n/**\n * Build a list_collection_lists response. Companion to\n * `listPropertyListsResponse` — same `lists` wrapper shape; parallel\n * governance surface for program-level collections.\n */\n/** @deprecated v6: `createAdcpServerFromPlatform` constructs wire responses from typed platform returns. Direct use is for v5 raw-handler adopters mid-migration only. */\nexport function listCollectionListsResponse(\n data: ServerPayload<ListCollectionListsResponse>,\n summary?: string\n): McpToolResponse {\n return {\n content: [\n {\n type: 'text',\n text: summary ?? `Found ${data.lists.length} collection list${data.lists.length === 1 ? '' : 's'}`,\n },\n ],\n structuredContent: completedStructuredContent(data),\n };\n}\n\n/**\n * Build a list_content_standards response. The response type is a union\n * (success branch with `standards` array, error branch with `errors`) —\n * the helper wraps either shape verbatim; schema-level invariants are\n * enforced at wire validation, not here.\n *\n * Discriminates on `'standards' in data` rather than `'errors' in data` so\n * a legitimate success response that happens to carry advisory `errors`\n * still gets a counted summary. The error-only text fires only when\n * `standards` is absent. Mirrors `acquireRightsResponse`'s success-first\n * discrimination pattern a few screens down.\n */\n/** @deprecated v6: `createAdcpServerFromPlatform` constructs wire responses from typed platform returns. Direct use is for v5 raw-handler adopters mid-migration only. */\nexport function listContentStandardsResponse(\n data: ServerPayload<ListContentStandardsResponse>,\n summary?: string\n): McpToolResponse {\n const defaultSummary =\n 'standards' in data\n ? `Found ${data.standards.length} content standard${data.standards.length === 1 ? '' : 's'}`\n : 'Content standards lookup error';\n return {\n content: [{ type: 'text', text: summary ?? defaultSummary }],\n structuredContent: completedStructuredContent(data),\n };\n}\n\n/**\n * Build a get_plan_audit_logs response. Wraps the audit data array under\n * the required `plans` key — handlers that return a bare array trip the\n * storyboard runner's shape-drift hint.\n */\n/** @deprecated v6: `createAdcpServerFromPlatform` constructs wire responses from typed platform returns. Direct use is for v5 raw-handler adopters mid-migration only. */\nexport function getPlanAuditLogsResponse(\n data: ServerPayload<GetPlanAuditLogsResponse>,\n summary?: string\n): McpToolResponse {\n return {\n content: [\n {\n type: 'text',\n text: summary ?? `Audit data for ${data.plans.length} plan${data.plans.length === 1 ? '' : 's'}`,\n },\n ],\n structuredContent: completedStructuredContent(data),\n };\n}\n\ntype SyncCreativesResponsePayload = ServerPayload<SyncCreativesSuccess> | ServerPayload<SyncCreativesError>;\n\nfunction isSyncCreativesErrorPayload(data: SyncCreativesResponsePayload): data is ServerPayload<SyncCreativesError> {\n return (\n Array.isArray((data as { errors?: unknown }).errors) && !Array.isArray((data as { creatives?: unknown }).creatives)\n );\n}\n\n/**\n * Build a sync_creatives response. Accepts both row-level success payloads\n * and operation-level error payloads. If a payload includes `creatives`, the\n * builder treats it as success-shaped even when advisory row errors are also\n * present; operation-level errors are the errors-only arm.\n */\n/** @deprecated v6: `createAdcpServerFromPlatform` constructs wire responses from typed platform returns. Direct use is for v5 raw-handler adopters mid-migration only. */\nexport function syncCreativesResponse(data: SyncCreativesResponsePayload, summary?: string): McpToolResponse {\n if (isSyncCreativesErrorPayload(data)) {\n const firstError = data.errors[0];\n const defaultSummary = firstError ? `${firstError.code}: ${firstError.message}` : 'Sync creatives failed';\n return {\n content: [{ type: 'text', text: summary ?? defaultSummary }],\n isError: true,\n structuredContent: failedStructuredContent(data),\n };\n }\n\n return {\n content: [\n {\n type: 'text',\n text: summary ?? `Synced ${data.creatives.length} creative${data.creatives.length === 1 ? '' : 's'}`,\n },\n ],\n structuredContent: completedStructuredContent(data),\n };\n}\n\n/**\n * Build a get_signals response.\n */\n/** @deprecated v6: `createAdcpServerFromPlatform` constructs wire responses from typed platform returns. Direct use is for v5 raw-handler adopters mid-migration only. */\nexport function getSignalsResponse(data: ServerPayload<GetSignalsResponse>, summary?: string): McpToolResponse {\n return {\n content: [\n {\n type: 'text',\n text: summary ?? `Found ${(data.signals ?? []).length} signal${(data.signals ?? []).length === 1 ? '' : 's'}`,\n },\n ],\n structuredContent: completedStructuredContent(data),\n };\n}\n\n/**\n * Build a successful activate_signal response.\n */\n/** @deprecated v6: `createAdcpServerFromPlatform` constructs wire responses from typed platform returns. Direct use is for v5 raw-handler adopters mid-migration only. */\nexport function activateSignalResponse(data: ServerPayload<ActivateSignalSuccess>, summary?: string): McpToolResponse {\n return {\n content: [\n {\n type: 'text',\n text:\n summary ??\n `Signal activated across ${data.deployments.length} deployment${data.deployments.length === 1 ? '' : 's'}`,\n },\n ],\n structuredContent: completedStructuredContent(data),\n };\n}\n\n/**\n * Build a cancel response for update_media_buy with action: 'cancel'.\n *\n * Eliminates the cancellation metadata trap by requiring `canceled_by`\n * and auto-setting `canceled_at`, `status: 'canceled'`, and `valid_actions: []`.\n *\n * Note: `cancellation` is not yet on the `UpdateMediaBuySuccess` generated type\n * (it exists on the full `MediaBuy` entity). This builder constructs the response\n * as a plain object to include it. When the upstream schema adds `cancellation`\n * to the update response, this can be tightened.\n *\n * @example\n * ```typescript\n * server.registerTool(\n * 'update_media_buy',\n * { inputSchema: UpdateMediaBuyRequestSchema.shape },\n * async (params) => {\n * if (params.action === 'cancel') {\n * return cancelMediaBuyResponse({\n * media_buy_id: params.media_buy_id,\n * canceled_by: 'buyer',\n * revision: currentRevision + 1,\n * });\n * }\n * // ... handle other actions\n * }\n * );\n * ```\n */\n/** @deprecated v6: `createAdcpServerFromPlatform` constructs wire responses from typed platform returns. Direct use is for v5 raw-handler adopters mid-migration only. */\nexport function cancelMediaBuyResponse(input: CancelMediaBuyInput, summary?: string): McpToolResponse {\n const cancellation: Record<string, unknown> = {\n canceled_at: input.canceled_at ?? new Date().toISOString(),\n canceled_by: input.canceled_by,\n };\n if (input.reason !== undefined) {\n cancellation.reason = input.reason;\n }\n\n const data: Record<string, unknown> = {\n media_buy_id: input.media_buy_id,\n status: 'canceled',\n valid_actions: [],\n revision: input.revision,\n cancellation,\n };\n if (input.affected_packages !== undefined) {\n data.affected_packages = input.affected_packages;\n }\n if (input.sandbox !== undefined) {\n data.sandbox = input.sandbox;\n }\n\n return {\n content: [{ type: 'text', text: summary ?? `Media buy ${input.media_buy_id} canceled` }],\n structuredContent: completedStructuredContent(data, { splitMediaBuyStatus: true }),\n };\n}\n\n/**\n * Build an `acquire_rights` response. Thin envelope wrapper — enforces the\n * discriminated union on `status` at the type level, wraps the domain object\n * in `content` + `structuredContent`, nothing else. Schema-level constraints\n * (credential length, schemes cardinality, required-field presence) belong\n * in wire-level Zod validation, not here.\n *\n * Enable dev-time enforcement via\n * `createAdcpServer({ validation: { responses: 'strict' } })` until it\n * becomes the default.\n */\n/** @deprecated v6: `createAdcpServerFromPlatform` constructs wire responses from typed platform returns. Direct use is for v5 raw-handler adopters mid-migration only. */\nexport function acquireRightsResponse(data: ServerPayload<AcquireRightsResponse>, summary?: string): McpToolResponse {\n const dataAsAny = data as AcquireRightsResponse & { rights_status?: string; rights_id?: string };\n const defaultSummary =\n 'errors' in data\n ? 'Rights acquisition error'\n : dataAsAny.rights_status === 'acquired'\n ? `Rights ${dataAsAny.rights_id} acquired`\n : dataAsAny.rights_status === 'rejected'\n ? `Rights ${dataAsAny.rights_id} rejected`\n : `Rights ${dataAsAny.rights_id} pending approval`;\n return {\n content: [{ type: 'text', text: summary ?? defaultSummary }],\n structuredContent: completedStructuredContent(data),\n };\n}\n\n/**\n * Per-variant constructor — builds an `AcquireRightsAcquired` success response\n * and wraps it. Cleaner autocomplete than `acquireRightsResponse({ rights_status: 'acquired', ... })`\n * because a coding agent typing `acquireRightsAcqu…` gets the required-fields\n * shape directly without reading a 4-variant union.\n */\n/** @deprecated v6: `createAdcpServerFromPlatform` constructs wire responses from typed platform returns. Direct use is for v5 raw-handler adopters mid-migration only. */\nexport function acquireRightsAcquired(\n data: Omit<AcquireRightsAcquired, 'rights_status'>,\n summary?: string\n): McpToolResponse {\n return acquireRightsResponse({ ...data, rights_status: 'acquired' } as unknown as AcquireRightsResponse, summary);\n}\n\n/** Per-variant constructor for the `pending_approval` branch. */\n/** @deprecated v6: `createAdcpServerFromPlatform` constructs wire responses from typed platform returns. Direct use is for v5 raw-handler adopters mid-migration only. */\nexport function acquireRightsPendingApproval(\n data: Omit<AcquireRightsPendingApproval, 'rights_status'>,\n summary?: string\n): McpToolResponse {\n return acquireRightsResponse(\n { ...data, rights_status: 'pending_approval' } as unknown as AcquireRightsResponse,\n summary\n );\n}\n\n/** Per-variant constructor for the `rejected` branch. */\n/** @deprecated v6: `createAdcpServerFromPlatform` constructs wire responses from typed platform returns. Direct use is for v5 raw-handler adopters mid-migration only. */\nexport function acquireRightsRejected(\n data: Omit<AcquireRightsRejected, 'rights_status'>,\n summary?: string\n): McpToolResponse {\n return acquireRightsResponse({ ...data, rights_status: 'rejected' } as unknown as AcquireRightsResponse, summary);\n}\n\n/**\n * Build an `update_rights` response. Wraps a `UpdateRightsResponse` (success\n * or error arm — discriminated structurally on `errors` presence) in the\n * standard `content` + `structuredContent` envelope. The framework auto-\n * applies this wrapper for v6 typed-platform handlers; direct callers are\n * v5 raw-handler adopters only.\n *\n * Mirrors `acquireRightsResponse`'s shape conventions (success-first\n * default summary, error pass-through).\n */\n/** @deprecated v6: `createAdcpServerFromPlatform` constructs wire responses from typed platform returns. Direct use is for v5 raw-handler adopters mid-migration only. */\nexport function updateRightsResponse(data: ServerPayload<UpdateRightsResponse>, summary?: string): McpToolResponse {\n const defaultSummary =\n 'errors' in data\n ? 'Rights update error'\n : data.implementation_date == null\n ? `Rights ${data.rights_id} update pending approval`\n : `Rights ${data.rights_id} updated`;\n return {\n content: [{ type: 'text', text: summary ?? defaultSummary }],\n structuredContent: completedStructuredContent(data),\n };\n}\n\n/**\n * Per-variant constructor for the success arm. The wire spec doesn't\n * carry a `status` discriminator on `update_rights` (unlike\n * `acquire_rights`); success is identified structurally by absence of\n * `errors`. The narrow constructor is still useful — it gives autocomplete\n * the success-shape fields (`terms`, `generation_credentials`,\n * `rights_constraint`) without crossing the union.\n */\n/** @deprecated v6: `createAdcpServerFromPlatform` constructs wire responses from typed platform returns. Direct use is for v5 raw-handler adopters mid-migration only. */\nexport function updateRightsSuccess(data: ServerPayload<UpdateRightsSuccess>, summary?: string): McpToolResponse {\n return updateRightsResponse(data as unknown as UpdateRightsResponse, summary);\n}\n\n/**\n * Build a `creative_approval` webhook response.\n *\n * Unlike the other builders in this module, `creative_approval` is NOT an\n * MCP/A2A tool — the spec models it as an HTTP webhook. The buyer POSTs\n * a `CreativeApprovalRequest` to the `approval_webhook` URL returned in\n * `acquire_rights`; the brand-rights agent reviews and returns one of four\n * arms (Approved / Rejected / PendingReview / Error). Adopters wire this\n * builder into their HTTP server's response path — see the\n * `BrandRightsPlatform.reviewCreativeApproval` Platform method and the\n * skill at `skills/build-brand-rights-agent/SKILL.md` for the receiver\n * pattern.\n *\n * Returns the raw JSON-serializable payload, NOT an `McpToolResponse` —\n * webhooks have no `content` envelope. Adopters serialize this to JSON and\n * write to the HTTP response body.\n */\nexport function creativeApprovalResponse(data: CreativeApprovalResponse): CreativeApprovalResponse {\n return data;\n}\n\n/** Per-variant constructor for the `approved` branch — webhook payload. */\nexport function creativeApprovalApproved(data: Omit<CreativeApproved, 'status'>): CreativeApproved {\n return { ...data, status: 'approved' } as CreativeApproved;\n}\n\n/** Per-variant constructor for the `rejected` branch — webhook payload. */\nexport function creativeApprovalRejected(data: Omit<CreativeRejected, 'status'>): CreativeRejected {\n return { ...data, status: 'rejected' } as CreativeRejected;\n}\n\n/** Per-variant constructor for the `pending_review` branch — webhook payload. */\nexport function creativeApprovalPendingReview(data: Omit<CreativePendingReview, 'status'>): CreativePendingReview {\n return { ...data, status: 'pending_review' } as CreativePendingReview;\n}\n\n/** Per-variant constructor for the multi-error arm — webhook payload. */\nexport function creativeApprovalError(data: CreativeApprovalError): CreativeApprovalError {\n return data;\n}\n\n/**\n * Build a `sync_accounts` response. Thin envelope wrapper accepting the full\n * `SyncAccountsResponse` union; error payloads pass through.\n */\n/** @deprecated v6: `createAdcpServerFromPlatform` constructs wire responses from typed platform returns. Direct use is for v5 raw-handler adopters mid-migration only. */\nexport function syncAccountsResponse(data: ServerPayload<SyncAccountsResponse>, summary?: string): McpToolResponse {\n const stripped = 'accounts' in data ? stripAccountsWriteOnlyFields(data) : data;\n const defaultSummary =\n 'errors' in stripped\n ? 'Account sync error'\n : `Synced ${stripped.accounts?.length ?? 0} account${stripped.accounts?.length === 1 ? '' : 's'}`;\n return {\n content: [{ type: 'text', text: summary ?? defaultSummary }],\n structuredContent: completedStructuredContent(stripped),\n };\n}\n\n/**\n * Build a sync_governance response. The spec permits two top-level shapes\n * (success / error); the type union enforces discrimination on `status`.\n *\n * Strips `governance_agents[i].authentication` from every row before emit:\n * the spec marks `authentication.credentials` write-only (the buyer sends\n * the bearer; the seller persists it for outbound `check_governance` calls\n * but MUST NOT echo it back). The natural `{ ...entry.governance_agents[i] }`\n * echo idiom would compile silently against the typed return shape and ship\n * credentials over the wire AND into the idempotency replay cache, arming\n * the buyer (and any subsequent caller hitting the same key) to impersonate\n * the seller against the governance agent. Strip is enforced at the wire-\n * emit boundary so both v5 (`opts.accounts.syncGovernance`) and v6\n * (`AccountStore.syncGovernance`) paths are protected.\n */\n/** @deprecated v6: `createAdcpServerFromPlatform` constructs wire responses from typed platform returns. Direct use is for v5 raw-handler adopters mid-migration only. */\nexport function syncGovernanceResponse(data: ServerPayload<SyncGovernanceResponse>, summary?: string): McpToolResponse {\n const stripped = stripGovernanceAgentSecrets(data);\n return {\n content: [{ type: 'text', text: summary ?? 'Governance registration synced' }],\n structuredContent: completedStructuredContent(stripped),\n };\n}\n\nfunction stripGovernanceAgentSecrets(\n data: ServerPayload<SyncGovernanceResponse>\n): ServerPayload<SyncGovernanceResponse> {\n if (!('accounts' in data) || !Array.isArray(data.accounts)) return data;\n return {\n ...data,\n accounts: data.accounts.map(row => {\n if (!row.governance_agents) return row;\n return {\n ...row,\n // AdCP 3.1.0-beta.2 narrowed the wire shape to `{ url }` only;\n // `categories` was removed (per-agent category signaling moved\n // out of band) and `authentication` remains write-only. Project\n // explicitly to defeat JS / `as any` smuggling of either field.\n governance_agents: row.governance_agents.map(a => ({ url: a.url })),\n };\n }),\n };\n}\n\n/**\n * Build a `report_usage` response. Thin envelope wrapper. Schema-level\n * `accepted` requiredness is enforced at the type level (via\n * `ReportUsageResponse.accepted: number`) and at wire-level validation;\n * this builder does not re-assert it.\n *\n * @example\n * ```typescript\n * // Explicit:\n * reportUsage: async (params) =>\n * reportUsageResponse({ accepted: 8, errors: [{ usage_index: 2, message: 'invalid' }] })\n *\n * // Ack every usage[] row with optional errors (shortcut):\n * reportUsage: async (params) => reportUsageResponse.acceptAll(params)\n * ```\n */\n/** @deprecated v6: `createAdcpServerFromPlatform` constructs wire responses from typed platform returns. Direct use is for v5 raw-handler adopters mid-migration only. */\nexport function reportUsageResponse(data: ServerPayload<ReportUsageResponse>, summary?: string): McpToolResponse {\n return {\n content: [\n { type: 'text', text: summary ?? `Accepted ${data.accepted} usage record${data.accepted === 1 ? '' : 's'}` },\n ],\n structuredContent: completedStructuredContent(data),\n };\n}\n\n/**\n * Shortcut for the common case: accept all rows in the request, optionally\n * minus any `errors[]` the caller computed. Sets\n * `accepted = (request.usage?.length ?? 0) - errors.length`.\n *\n * Use with honest errors — passing no `errors` when rows failed validation\n * is lying to buyers and the audit trail.\n */\nreportUsageResponse.acceptAll = function acceptAll(\n request: ReportUsageRequest,\n opts?: { errors?: ReportUsageResponse['errors']; summary?: string }\n): McpToolResponse {\n const total = request.usage?.length ?? 0;\n const errors = opts?.errors ?? [];\n const accepted = Math.max(0, total - errors.length);\n return reportUsageResponse(\n {\n status: errors.length > 0 ? 'failed' : 'completed',\n accepted,\n ...(errors.length > 0 ? { errors } : {}),\n } as ReportUsageResponse,\n opts?.summary\n );\n};\n"],"mappings":"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","names":[]}
|
|
@@ -1,9 +1,3 @@
|
|
|
1
|
-
import { fileURLToPath as __adcpFileURLToPath } from 'node:url';
|
|
2
|
-
import { dirname as __adcpDirname } from 'node:path';
|
|
3
|
-
import { createRequire as __adcpCreateRequire } from 'node:module';
|
|
4
|
-
const __filename = __adcpFileURLToPath(import.meta.url);
|
|
5
|
-
const __dirname = __adcpDirname(__filename);
|
|
6
|
-
const require = __adcpCreateRequire(import.meta.url);
|
|
7
1
|
import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
|
|
8
2
|
import { PARSE_ERROR, isJsonContentType } from "@modelcontextprotocol/server";
|
|
9
3
|
import { hostHeaderValidation, originValidation } from "@modelcontextprotocol/node";
|