@adcp/sdk 12.0.0 → 12.0.2
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.d.mts +1 -1
- package/dist/lib/index.d.ts +1 -1
- package/dist/lib/index.d.ts.map +1 -1
- package/dist/lib/index.js.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.d.mts +13 -0
- package/dist/lib/server/create-adcp-server.d.ts +13 -0
- package/dist/lib/server/create-adcp-server.d.ts.map +1 -1
- package/dist/lib/server/create-adcp-server.js +3 -2
- package/dist/lib/server/create-adcp-server.js.map +1 -1
- package/dist/lib/server/create-adcp-server.mjs +3 -8
- 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.d.mts +1 -1
- package/dist/lib/server/index.d.ts +1 -1
- package/dist/lib/server/index.d.ts.map +1 -1
- package/dist/lib/server/index.js.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.d.mts +1 -1
- package/dist/lib/server/legacy/v5/index.d.ts +1 -1
- package/dist/lib/server/legacy/v5/index.d.ts.map +1 -1
- package/dist/lib/server/legacy/v5/index.js.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/index.ts"],"sourcesContent":["export { adcpError } from './errors';\nexport type { AdcpErrorOptions, AdcpErrorPayload, AdcpErrorResponse } from './errors';\n\nexport { normalizeError, normalizeErrors } from './normalize-errors';\nexport type { NormalizedError } from './normalize-errors';\n\nexport { pickSafeDetails } from './pick-safe-details';\nexport type { PickSafeDetailsOptions } from './pick-safe-details';\n\nexport { wrapEnvelope } from './wrap-envelope';\nexport type { WrapEnvelopeOptions } from './wrap-envelope';\n\nexport {\n ERROR_ENVELOPE_FIELD_ALLOWLIST,\n DEFAULT_ERROR_ENVELOPE_FIELDS,\n ADCP_ERROR_FIELD_ALLOWLIST,\n CONFLICT_ADCP_ERROR_ALLOWLIST,\n} from './envelope-allowlist';\n\nexport { scanArgsForCredentials, DEFAULT_CREDENTIAL_PATTERNS } from './credential-policy';\nexport type {\n CredentialPolicy,\n CredentialPolicyMode,\n CredentialPolicyConfig,\n CredentialPatternsConfig,\n} from './credential-policy';\n\nexport { createDynamicRegistry } from './dynamic-registry';\nexport type {\n DynamicRegistry,\n DynamicRegistryConfig,\n DynamicRegistryRegisterOptions,\n PendingRegistries,\n RegistryShape,\n} from './dynamic-registry';\n\nexport { defineOperationalPlatform } from './operational-platform';\nexport type { OperationalPlatform, OperationalContext } from './operational-platform';\n\nexport { pickWireSpecFields, scrubExtensions, WIRE_SPEC_FIELDS } from './wire-safe';\nexport type { WireSafe, WireSpecRequestName, ScrubExtensionsOptions } from './wire-safe';\nexport type { RequireCacheScopeWhenProducts, ServerPayload } from '../types/server-payload';\nexport type {\n ActivateSignalPayload,\n AcquireRightsAcquiredPayload,\n AcquireRightsPayload,\n AcquireRightsPendingApprovalPayload,\n AcquireRightsRejectedPayload,\n BuildCreativeMultiPayload,\n BuildCreativePayload,\n CalibrateContentPayload,\n CheckGovernancePayload,\n CreateCollectionListPayload,\n CreateContentStandardsPayload,\n CreateMediaBuyPayload,\n CreatePropertyListPayload,\n CreativeApprovalPayload,\n CreativeApprovedPayload,\n CreativePendingReviewPayload,\n CreativeRejectedPayload,\n DeleteCollectionListPayload,\n DeletePropertyListPayload,\n GetAccountFinancialsPayload,\n GetAccountFinancialsSuccessPayload,\n GetAdCPCapabilitiesPayload,\n GetBrandIdentityPayload,\n GetCollectionListPayload,\n GetContentStandardsPayload,\n GetCreativeDeliveryPayload,\n GetCreativeFeaturesPayload,\n GetMediaBuyArtifactsPayload,\n GetMediaBuyDeliveryPayload,\n GetMediaBuysPayload,\n GetPlanAuditLogsPayload,\n GetProductsPayload,\n GetPropertyListPayload,\n GetRightsPayload,\n GetRightsResponsePayload,\n GetSignalsPayload,\n ListAccountsPayload,\n ListCollectionListsPayload,\n ListContentStandardsPayload,\n ListCreativeFormatsPayload,\n ListCreativeFormatsResponsePayload,\n ListCreativeFormatsServerPayload,\n ListCreativesPayload,\n ListPropertyListsPayload,\n LogEventPayload,\n PreviewCreativePayload,\n ProvidePerformanceFeedbackPayload,\n ReportPlanOutcomePayload,\n ReportUsagePayload,\n SIGetOfferingPayload,\n SIInitiateSessionPayload,\n SISendMessagePayload,\n SITerminateSessionPayload,\n SyncAccountsPayload,\n SyncAccountsSuccessPayload,\n SyncAudiencesPayload,\n SyncCatalogsPayload,\n SyncCreativesErrorPayload,\n SyncCreativesPayload,\n SyncCreativesSuccessPayload,\n SyncEventSourcesPayload,\n SyncGovernancePayload,\n SyncGovernanceSuccessPayload,\n SyncPlansPayload,\n UpdateCollectionListPayload,\n UpdateContentStandardsPayload,\n UpdateMediaBuyPayload,\n UpdatePropertyListPayload,\n UpdateRightsPayload,\n ValidateContentDeliveryPayload,\n} from '../types/server-payload-aliases';\n\nexport { assertNoExampleTlds } from './example-tld-guard';\nexport type { AssertNoExampleTldsOptions } from './example-tld-guard';\n\nexport {\n capabilitiesResponse,\n productsResponse,\n mediaBuyResponse,\n deliveryResponse,\n listAccountsResponse,\n listCreativeFormatsResponse,\n updateMediaBuyResponse,\n getMediaBuysResponse,\n performanceFeedbackResponse,\n buildCreativeResponse,\n buildCreativeMultiResponse,\n previewCreativeResponse,\n creativeDeliveryResponse,\n listCreativesResponse,\n listPropertyListsResponse,\n listCollectionListsResponse,\n listContentStandardsResponse,\n getPlanAuditLogsResponse,\n syncCreativesResponse,\n getSignalsResponse,\n activateSignalResponse,\n cancelMediaBuyResponse,\n acquireRightsResponse,\n acquireRightsAcquired,\n acquireRightsPendingApproval,\n acquireRightsRejected,\n updateRightsResponse,\n updateRightsSuccess,\n creativeApprovalResponse,\n creativeApprovalApproved,\n creativeApprovalRejected,\n creativeApprovalPendingReview,\n creativeApprovalError,\n syncAccountsResponse,\n syncGovernanceResponse,\n reportUsageResponse,\n toStructuredContent,\n} from './responses';\nexport type { McpToolResponse } from './responses';\n\nexport { validActionsForStatus } from './media-buy-helpers';\nexport type { ValidAction, CancelMediaBuyInput } from './media-buy-helpers';\nexport { assertUpdateMediaBuyAllowed } from './media-buy-actions';\nexport type { AssertUpdateMediaBuyAllowedOptions } from './media-buy-actions';\n\nexport { createMediaBuyStore, DEFAULT_MEDIA_BUY_STORE_COLLECTION } from './media-buy-store';\nexport type {\n MediaBuyStore,\n CreateMediaBuyStoreOptions,\n CreateMediaBuyInputForStore,\n CreateMediaBuyResultForStore,\n UpdateMediaBuyInputForStore,\n GetMediaBuysResultForStore,\n} from './media-buy-store';\n\nexport {\n MEDIA_BUY_TRANSITIONS,\n CREATIVE_ASSET_TRANSITIONS,\n isLegalMediaBuyTransition,\n isLegalCreativeTransition,\n assertMediaBuyTransition,\n assertCreativeTransition,\n} from './state-machine';\n\nexport { getAccountMode, isSandboxOrMockAccount, assertSandboxAccount } from './account-mode';\nexport type { AccountMode } from './account-mode';\n\nexport {\n taskToolResponse,\n registerAdcpTaskTool,\n createTaskCapableServer,\n InMemoryTaskStore,\n isTerminal,\n} from './tasks';\nexport type {\n AdcpTaskToolConfig,\n TaskStore,\n TaskMessageQueue,\n CreateTaskOptions,\n ToolTaskHandler,\n CreateTaskRequestHandlerExtra,\n TaskRequestHandlerExtra,\n CreateTaskResult,\n GetTaskResult,\n Task,\n} from './tasks';\n\nexport {\n PostgresTaskStore,\n cleanupExpiredTasks,\n getMcpTasksMigration,\n MCP_TASKS_MIGRATION,\n} from './postgres-task-store';\nexport type { PgQueryable, PostgresTaskStoreOptions } from './postgres-task-store';\n\nexport {\n registerTestController,\n handleTestControllerRequest,\n TestControllerError,\n toMcpResponse,\n TOOL_INPUT_SHAPE,\n CONTROLLER_SCENARIOS,\n DISCOVERY_ARM_SCENARIOS,\n SEED_SCENARIOS,\n SEED_MESSAGES,\n SESSION_ENTRY_CAP,\n enforceMapCap,\n createSeedFixtureCache,\n} from './test-controller';\nexport type {\n TestControllerStore,\n TestControllerStoreFactory,\n TestControllerStoreOrFactory,\n ControllerScenario,\n SeedScenario,\n SeedFixtureCache,\n} from './test-controller';\n\nexport { serve, UnknownHostError, hostname, resolveHost } from './serve';\nexport type { ServeContext, ServeOptions, ProtectedResourceMetadata } from './serve';\n\nexport { createExpressAdapter } from './express-adapter';\nexport type { ExpressAdapter, ExpressAdapterOptions } from './express-adapter';\n\nexport {\n verifyApiKey,\n verifyBearer,\n anyOf,\n extractBearerToken,\n respondUnauthorized,\n signatureErrorCodeFromCause,\n AuthError,\n AUTH_NEEDS_RAW_BODY,\n tagAuthenticatorNeedsRawBody,\n authenticatorNeedsRawBody,\n AUTH_PRESENCE_GATED,\n tagAuthenticatorPresenceGated,\n isAuthenticatorPresenceGated,\n ADCP_SERVE_REQUEST_CONTEXT,\n getServeRequestContext,\n DEFAULT_JWT_ALGORITHMS,\n DEFAULT_JWT_CLOCK_TOLERANCE_SECONDS,\n} from './auth';\nexport type {\n Authenticator,\n AuthPrincipal,\n AuthResult,\n VerifyApiKeyOptions,\n VerifyBearerOptions,\n RespondUnauthorizedOptions,\n ServeRequestContext,\n} from './auth';\n\nexport { verifyIntrospection } from './auth-introspection';\nexport type {\n VerifyIntrospectionOptions,\n IntrospectionCacheOptions,\n IntrospectionResponse,\n} from './auth-introspection';\n\nexport {\n verifySignatureAsAuthenticator,\n requireSignatureWhenPresent,\n requireAuthenticatedOrSigned,\n mcpToolNameResolver,\n} from './auth-signature';\nexport type {\n VerifySignatureAsAuthenticatorOptions,\n RequireSignatureWhenPresentOptions,\n RequireAuthenticatedOrSignedOptions,\n} from './auth-signature';\n\nexport {\n InMemoryStateStore,\n StateError,\n PatchConflictError,\n DEFAULT_MAX_DOCUMENT_BYTES,\n SESSION_KEY_FIELD,\n createSessionedStore,\n scopedStore,\n patchWithRetry,\n isPutIfMatchConflict,\n validateCollection,\n validateId,\n validatePayloadSize,\n validateWrite,\n} from './state-store';\nexport type {\n AdcpStateStore,\n InMemoryStateStoreOptions,\n ListOptions,\n ListResult,\n PatchWithRetryOptions,\n PutIfMatchResult,\n StateErrorCode,\n VersionedDocument,\n} from './state-store';\n\nexport { PostgresStateStore, getAdcpStateMigration, ADCP_STATE_MIGRATION } from './postgres-state-store';\nexport type { PostgresStateStoreOptions } from './postgres-state-store';\n\nexport { structuredSerialize, structuredDeserialize } from './structured-serialize';\n\n// `createAdcpServer` is NOT re-exported from `@adcp/sdk/server` anymore —\n// LLMs scaffolding from skills consistently latched onto it as the canonical\n// entry point despite the @deprecated JSDoc. Removing the top-level export\n// forces new code to either reach for `createAdcpServerFromPlatform` (the v6\n// canonical) or import from `@adcp/sdk/server/legacy/v5` (mid-migration /\n// escape-hatch only). Breaking change: v5 adopters see a hard import error\n// and update their import path. The migration is one line; the LLM-output\n// quality win is significant. See `docs/migration-5.x-to-6.x.md`.\nexport {\n requireSessionKey,\n ADCP_PRE_TRANSPORT,\n ADCP_SIGNED_REQUESTS_STATE,\n ADCP_INSTRUCTIONS_FN,\n} from './create-adcp-server';\nexport type { SessionContext, OnInstructionsError, MaybePromise, BridgeMarker } from './create-adcp-server';\nexport type {\n AdcpServer,\n AdcpServerComplianceApi,\n AdcpServerTransport,\n AdcpTestRequest,\n AdcpTestToolsCallRequest,\n AdcpTestResponse,\n} from './adcp-server';\nexport type {\n AdcpServerConfig,\n WebhooksConfig,\n AdcpToolMap,\n AdcpServerToolName,\n AdcpCapabilitiesConfig,\n AdcpCapabilitiesOverrides,\n AdcpCustomToolConfig,\n AdcpLogger,\n SignedRequestsConfig,\n AdcpPreTransport,\n AdcpSignedRequestsState,\n HandlerContext,\n SessionKeyContext,\n MediaBuyHandlers,\n SignalsHandlers,\n CreativeHandlers,\n GovernanceHandlers,\n AccountHandlers,\n EventTrackingHandlers,\n SponsoredIntelligenceHandlers,\n ResolveAccountContext,\n} from './create-adcp-server';\n\nexport { DEFAULT_REPORTING_CAPABILITIES } from './product-defaults';\n\nexport {\n isSandboxRequest,\n mergeSeededProductsIntoResponse,\n filterValidSeededProducts,\n filterValidSeededCreatives,\n filterValidSeededMediaBuys,\n filterValidSeededAccounts,\n filterValidSeededAccountFinancials,\n filterValidSeededCreativeFormats,\n mergeSeededCreativesIntoResponse,\n mergeSeededMediaBuysIntoResponse,\n mergeSeededAccountsIntoResponse,\n mergeSeededCreativeFormatsIntoResponse,\n pickSeededAccountFinancialsForRequest,\n replaceAccountFinancialsIfSeeded,\n bridgeFromTestControllerStore,\n bridgeFromSessionStore,\n} from './test-controller-bridge';\nexport type {\n TestControllerBridge,\n TestControllerBridgeContext,\n BridgeFromSessionStoreOptions,\n SeededCreative,\n SeededMediaBuy,\n SeededAccountFinancials,\n} from './test-controller-bridge';\n\nexport {\n createIdempotencyStore,\n probeIdempotencyStore,\n memoryBackend,\n pgBackend,\n getIdempotencyMigration,\n IDEMPOTENCY_MIGRATION,\n cleanupExpiredIdempotency,\n redisBackend,\n createLazyBackend,\n hashPayload,\n} from './idempotency';\nexport type {\n IdempotencyStore,\n IdempotencyStoreConfig,\n IdempotencyBackend,\n IdempotencyCacheEntry,\n IdempotencyCheckResult,\n MemoryBackendOptions,\n PgBackendOptions,\n RedisBackendOptions,\n RedisBackendClient,\n RedisLikeClient,\n LazyBackendFactory,\n LazyBackendOptions,\n} from './idempotency';\n\nexport { createA2AAdapter, A2AInvocationError } from './a2a-adapter';\nexport type {\n A2AAdapter,\n A2AAdapterOptions,\n A2AAgentCardOverrides,\n A2AMountOptions,\n ExpressAppLike,\n} from './a2a-adapter';\n\nexport { createWebhookEmitter, memoryWebhookKeyStore } from './webhook-emitter';\nexport type {\n WebhookEmitter,\n WebhookEmitterOptions,\n WebhookEmitParams,\n WebhookEmitResult,\n WebhookEmitAttempt,\n WebhookEmitAttemptResult,\n WebhookIdempotencyKeyStore,\n WebhookRetryOptions,\n WebhookAuthentication,\n} from './webhook-emitter';\nexport type { SigningProvider } from '../signing/provider';\n\nexport { createPinAndBindFetch, WEBHOOK_SSRF_POLICY, LOOPBACK_OK_WEBHOOK_SSRF_POLICY } from './pin-and-bind-fetch';\nexport type { PinAndBindFetchOptions, DnsLookupAll } from './pin-and-bind-fetch';\n\nexport { checkGovernance, governanceDeniedError } from './governance';\nexport type {\n CheckGovernanceOptions,\n GovernanceCallResult,\n GovernanceApproved,\n GovernanceDenied,\n GovernanceConditions,\n} from './governance';\n\nexport {\n clearDefaultResolvedListCache,\n createResolvedListCache,\n DEFAULT_RESOLVE_LIST_PAGE_SIZE,\n defaultResolvedListCache,\n resolvePropertyList,\n resolveCollectionList,\n resolvedListCacheKey,\n matchesPropertyList,\n matchesCollectionList,\n} from './targeting-helpers';\nexport type {\n ResolvedListCache,\n ResolvedListCacheEntry,\n ResolvedListCacheValue,\n ResolvedListKind,\n ResolvedPropertyList,\n ResolvedCollectionList,\n ResolvedCollection,\n ResolveListCallTool,\n ResolveListOptions,\n} from './targeting-helpers';\n\n// ---------------------------------------------------------------------------\n// Platform-shaped server entry point (recommended for new agents)\n// ---------------------------------------------------------------------------\n//\n// `createAdcpServerFromPlatform` wraps `createAdcpServer` (the lower-level\n// handler-bag entry above) with compile-time specialism enforcement\n// (`RequiredPlatformsFor<S>`), capability projection, idempotency wiring,\n// async tasks, status normalization, multi-tenant routing, and webhook\n// auto-emit. Adopters declare a typed `DecisioningPlatform` per-specialism\n// and the framework wires the rest. See `docs/migration-5.x-to-6.x.md`\n// and `skills/build-decisioning-platform/` for the full walkthrough.\n//\n// Both `createAdcpServer` and `createAdcpServerFromPlatform` live on the\n// same import path so adopters discover them as siblings; pick the\n// function shape that matches your agent. The platform path internally\n// builds an `AdcpServerConfig` and calls `createAdcpServer` — they're\n// not adjacent surfaces, they're parent-child layers of the same SDK.\n//\n// **Pin to v5 long-term?** Import from `@adcp/sdk/server/legacy/v5`\n// instead. The subpath is the stable home for the v5 handler-bag\n// constructor; the top-level re-export here may be removed in a\n// future major. New code should not pin against `legacy/v5` either —\n// reach for `createAdcpServerFromPlatform` first.\nexport * from './decisioning';\n\n// ---------------------------------------------------------------------------\n// Ctx-metadata store — opaque-blob round-trip for adapter-internal state\n// ---------------------------------------------------------------------------\n//\n// Publishers attach platform-specific opaque blobs to any returned resource\n// (product, media_buy, package, creative, audience, signal, rights_grant);\n// the framework persists by `(account_id, kind, id)`, strips from buyer-\n// facing wire payloads, threads back into the publisher's request context\n// on subsequent calls referencing the same resource ID. See\n// `docs/proposals/decisioning-platform-v6-1-ctx-metadata.md`.\nexport {\n createCtxMetadataStore,\n memoryCtxMetadataStore,\n pgCtxMetadataStore,\n redisCtxMetadataStore,\n getCtxMetadataMigration,\n cleanupExpiredCtxMetadata,\n CTX_METADATA_MIGRATION,\n CtxMetadataValidationError,\n ADCP_INTERNAL_TAG,\n DEFAULT_MAX_VALUE_BYTES,\n MAX_TTL_SECONDS,\n stripCtxMetadata,\n hasCtxMetadata,\n stripImplementationConfig,\n hasImplementationConfig,\n ctxMetadataResultKey,\n scopeCtxMetadataKey,\n} from './ctx-metadata';\nexport type {\n CtxMetadataStore,\n CtxMetadataStoreConfig,\n CtxMetadataBackend,\n CtxMetadataEntry,\n CtxMetadataRef,\n ResourceKind as CtxMetadataResourceKind,\n MemoryCtxMetadataStoreOptions,\n PgCtxMetadataBackendOptions,\n RedisCtxMetadataBackendOptions,\n CtxMetadataRedisBackendClient,\n CtxMetadataRedisLikeClient,\n WireShape,\n} from './ctx-metadata';\n\nexport { createTranslationMap, createUpstreamHttpClient } from './upstream-helpers';\nexport type {\n TranslationMap,\n UpstreamAuth,\n AuthContext,\n UpstreamCallOptions,\n UpstreamHttpClientOptions,\n UpstreamHttpClient,\n UpstreamHttpResult,\n} from './upstream-helpers';\n\n// ---------------------------------------------------------------------------\n// Server-side adapters\n// ---------------------------------------------------------------------------\nexport {\n InMemoryImplicitAccountStore,\n defaultImplicitKeyFn,\n type ImplicitAccountStoreOptions,\n} from '../adapters/implicit-account-store';\n\nexport {\n createOAuthPassthroughResolver,\n type OAuthPassthroughResolverOptions,\n} from '../adapters/oauth-passthrough-resolver';\n\nexport { createRosterAccountStore, type RosterAccountStoreOptions } from '../adapters/roster-account-store';\n\nexport { createDerivedAccountStore, type DerivedAccountStoreOptions } from '../adapters/derived-account-store';\n\n// ---------------------------------------------------------------------------\n// Socket Mode — outbound WebSocket bridge for adopter dev environments\n// ---------------------------------------------------------------------------\nexport {\n ConformanceClient,\n WebSocketTransport,\n type ConformanceClientOptions,\n type ConformanceStatus,\n} from './socket-mode';\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/server/index.ts"],"sourcesContent":["export { adcpError } from './errors';\nexport type { AdcpErrorOptions, AdcpErrorPayload, AdcpErrorResponse } from './errors';\n\nexport { normalizeError, normalizeErrors } from './normalize-errors';\nexport type { NormalizedError } from './normalize-errors';\n\nexport { pickSafeDetails } from './pick-safe-details';\nexport type { PickSafeDetailsOptions } from './pick-safe-details';\n\nexport { wrapEnvelope } from './wrap-envelope';\nexport type { WrapEnvelopeOptions } from './wrap-envelope';\n\nexport {\n ERROR_ENVELOPE_FIELD_ALLOWLIST,\n DEFAULT_ERROR_ENVELOPE_FIELDS,\n ADCP_ERROR_FIELD_ALLOWLIST,\n CONFLICT_ADCP_ERROR_ALLOWLIST,\n} from './envelope-allowlist';\n\nexport { scanArgsForCredentials, DEFAULT_CREDENTIAL_PATTERNS } from './credential-policy';\nexport type {\n CredentialPolicy,\n CredentialPolicyMode,\n CredentialPolicyConfig,\n CredentialPatternsConfig,\n} from './credential-policy';\n\nexport { createDynamicRegistry } from './dynamic-registry';\nexport type {\n DynamicRegistry,\n DynamicRegistryConfig,\n DynamicRegistryRegisterOptions,\n PendingRegistries,\n RegistryShape,\n} from './dynamic-registry';\n\nexport { defineOperationalPlatform } from './operational-platform';\nexport type { OperationalPlatform, OperationalContext } from './operational-platform';\n\nexport { pickWireSpecFields, scrubExtensions, WIRE_SPEC_FIELDS } from './wire-safe';\nexport type { WireSafe, WireSpecRequestName, ScrubExtensionsOptions } from './wire-safe';\nexport type { RequireCacheScopeWhenProducts, ServerPayload } from '../types/server-payload';\nexport type {\n ActivateSignalPayload,\n AcquireRightsAcquiredPayload,\n AcquireRightsPayload,\n AcquireRightsPendingApprovalPayload,\n AcquireRightsRejectedPayload,\n BuildCreativeMultiPayload,\n BuildCreativePayload,\n CalibrateContentPayload,\n CheckGovernancePayload,\n CreateCollectionListPayload,\n CreateContentStandardsPayload,\n CreateMediaBuyPayload,\n CreatePropertyListPayload,\n CreativeApprovalPayload,\n CreativeApprovedPayload,\n CreativePendingReviewPayload,\n CreativeRejectedPayload,\n DeleteCollectionListPayload,\n DeletePropertyListPayload,\n GetAccountFinancialsPayload,\n GetAccountFinancialsSuccessPayload,\n GetAdCPCapabilitiesPayload,\n GetBrandIdentityPayload,\n GetCollectionListPayload,\n GetContentStandardsPayload,\n GetCreativeDeliveryPayload,\n GetCreativeFeaturesPayload,\n GetMediaBuyArtifactsPayload,\n GetMediaBuyDeliveryPayload,\n GetMediaBuysPayload,\n GetPlanAuditLogsPayload,\n GetProductsPayload,\n GetPropertyListPayload,\n GetRightsPayload,\n GetRightsResponsePayload,\n GetSignalsPayload,\n ListAccountsPayload,\n ListCollectionListsPayload,\n ListContentStandardsPayload,\n ListCreativeFormatsPayload,\n ListCreativeFormatsResponsePayload,\n ListCreativeFormatsServerPayload,\n ListCreativesPayload,\n ListPropertyListsPayload,\n LogEventPayload,\n PreviewCreativePayload,\n ProvidePerformanceFeedbackPayload,\n ReportPlanOutcomePayload,\n ReportUsagePayload,\n SIGetOfferingPayload,\n SIInitiateSessionPayload,\n SISendMessagePayload,\n SITerminateSessionPayload,\n SyncAccountsPayload,\n SyncAccountsSuccessPayload,\n SyncAudiencesPayload,\n SyncCatalogsPayload,\n SyncCreativesErrorPayload,\n SyncCreativesPayload,\n SyncCreativesSuccessPayload,\n SyncEventSourcesPayload,\n SyncGovernancePayload,\n SyncGovernanceSuccessPayload,\n SyncPlansPayload,\n UpdateCollectionListPayload,\n UpdateContentStandardsPayload,\n UpdateMediaBuyPayload,\n UpdatePropertyListPayload,\n UpdateRightsPayload,\n ValidateContentDeliveryPayload,\n} from '../types/server-payload-aliases';\n\nexport { assertNoExampleTlds } from './example-tld-guard';\nexport type { AssertNoExampleTldsOptions } from './example-tld-guard';\n\nexport {\n capabilitiesResponse,\n productsResponse,\n mediaBuyResponse,\n deliveryResponse,\n listAccountsResponse,\n listCreativeFormatsResponse,\n updateMediaBuyResponse,\n getMediaBuysResponse,\n performanceFeedbackResponse,\n buildCreativeResponse,\n buildCreativeMultiResponse,\n previewCreativeResponse,\n creativeDeliveryResponse,\n listCreativesResponse,\n listPropertyListsResponse,\n listCollectionListsResponse,\n listContentStandardsResponse,\n getPlanAuditLogsResponse,\n syncCreativesResponse,\n getSignalsResponse,\n activateSignalResponse,\n cancelMediaBuyResponse,\n acquireRightsResponse,\n acquireRightsAcquired,\n acquireRightsPendingApproval,\n acquireRightsRejected,\n updateRightsResponse,\n updateRightsSuccess,\n creativeApprovalResponse,\n creativeApprovalApproved,\n creativeApprovalRejected,\n creativeApprovalPendingReview,\n creativeApprovalError,\n syncAccountsResponse,\n syncGovernanceResponse,\n reportUsageResponse,\n toStructuredContent,\n} from './responses';\nexport type { McpToolResponse } from './responses';\n\nexport { validActionsForStatus } from './media-buy-helpers';\nexport type { ValidAction, CancelMediaBuyInput } from './media-buy-helpers';\nexport { assertUpdateMediaBuyAllowed } from './media-buy-actions';\nexport type { AssertUpdateMediaBuyAllowedOptions } from './media-buy-actions';\n\nexport { createMediaBuyStore, DEFAULT_MEDIA_BUY_STORE_COLLECTION } from './media-buy-store';\nexport type {\n MediaBuyStore,\n CreateMediaBuyStoreOptions,\n CreateMediaBuyInputForStore,\n CreateMediaBuyResultForStore,\n UpdateMediaBuyInputForStore,\n GetMediaBuysResultForStore,\n} from './media-buy-store';\n\nexport {\n MEDIA_BUY_TRANSITIONS,\n CREATIVE_ASSET_TRANSITIONS,\n isLegalMediaBuyTransition,\n isLegalCreativeTransition,\n assertMediaBuyTransition,\n assertCreativeTransition,\n} from './state-machine';\n\nexport { getAccountMode, isSandboxOrMockAccount, assertSandboxAccount } from './account-mode';\nexport type { AccountMode } from './account-mode';\n\nexport {\n taskToolResponse,\n registerAdcpTaskTool,\n createTaskCapableServer,\n InMemoryTaskStore,\n isTerminal,\n} from './tasks';\nexport type {\n AdcpTaskToolConfig,\n TaskStore,\n TaskMessageQueue,\n CreateTaskOptions,\n ToolTaskHandler,\n CreateTaskRequestHandlerExtra,\n TaskRequestHandlerExtra,\n CreateTaskResult,\n GetTaskResult,\n Task,\n} from './tasks';\n\nexport {\n PostgresTaskStore,\n cleanupExpiredTasks,\n getMcpTasksMigration,\n MCP_TASKS_MIGRATION,\n} from './postgres-task-store';\nexport type { PgQueryable, PostgresTaskStoreOptions } from './postgres-task-store';\n\nexport {\n registerTestController,\n handleTestControllerRequest,\n TestControllerError,\n toMcpResponse,\n TOOL_INPUT_SHAPE,\n CONTROLLER_SCENARIOS,\n DISCOVERY_ARM_SCENARIOS,\n SEED_SCENARIOS,\n SEED_MESSAGES,\n SESSION_ENTRY_CAP,\n enforceMapCap,\n createSeedFixtureCache,\n} from './test-controller';\nexport type {\n TestControllerStore,\n TestControllerStoreFactory,\n TestControllerStoreOrFactory,\n ControllerScenario,\n SeedScenario,\n SeedFixtureCache,\n} from './test-controller';\n\nexport { serve, UnknownHostError, hostname, resolveHost } from './serve';\nexport type { ServeContext, ServeOptions, ProtectedResourceMetadata } from './serve';\n\nexport { createExpressAdapter } from './express-adapter';\nexport type { ExpressAdapter, ExpressAdapterOptions } from './express-adapter';\n\nexport {\n verifyApiKey,\n verifyBearer,\n anyOf,\n extractBearerToken,\n respondUnauthorized,\n signatureErrorCodeFromCause,\n AuthError,\n AUTH_NEEDS_RAW_BODY,\n tagAuthenticatorNeedsRawBody,\n authenticatorNeedsRawBody,\n AUTH_PRESENCE_GATED,\n tagAuthenticatorPresenceGated,\n isAuthenticatorPresenceGated,\n ADCP_SERVE_REQUEST_CONTEXT,\n getServeRequestContext,\n DEFAULT_JWT_ALGORITHMS,\n DEFAULT_JWT_CLOCK_TOLERANCE_SECONDS,\n} from './auth';\nexport type {\n Authenticator,\n AuthPrincipal,\n AuthResult,\n VerifyApiKeyOptions,\n VerifyBearerOptions,\n RespondUnauthorizedOptions,\n ServeRequestContext,\n} from './auth';\n\nexport { verifyIntrospection } from './auth-introspection';\nexport type {\n VerifyIntrospectionOptions,\n IntrospectionCacheOptions,\n IntrospectionResponse,\n} from './auth-introspection';\n\nexport {\n verifySignatureAsAuthenticator,\n requireSignatureWhenPresent,\n requireAuthenticatedOrSigned,\n mcpToolNameResolver,\n} from './auth-signature';\nexport type {\n VerifySignatureAsAuthenticatorOptions,\n RequireSignatureWhenPresentOptions,\n RequireAuthenticatedOrSignedOptions,\n} from './auth-signature';\n\nexport {\n InMemoryStateStore,\n StateError,\n PatchConflictError,\n DEFAULT_MAX_DOCUMENT_BYTES,\n SESSION_KEY_FIELD,\n createSessionedStore,\n scopedStore,\n patchWithRetry,\n isPutIfMatchConflict,\n validateCollection,\n validateId,\n validatePayloadSize,\n validateWrite,\n} from './state-store';\nexport type {\n AdcpStateStore,\n InMemoryStateStoreOptions,\n ListOptions,\n ListResult,\n PatchWithRetryOptions,\n PutIfMatchResult,\n StateErrorCode,\n VersionedDocument,\n} from './state-store';\n\nexport { PostgresStateStore, getAdcpStateMigration, ADCP_STATE_MIGRATION } from './postgres-state-store';\nexport type { PostgresStateStoreOptions } from './postgres-state-store';\n\nexport { structuredSerialize, structuredDeserialize } from './structured-serialize';\n\n// `createAdcpServer` is NOT re-exported from `@adcp/sdk/server` anymore —\n// LLMs scaffolding from skills consistently latched onto it as the canonical\n// entry point despite the @deprecated JSDoc. Removing the top-level export\n// forces new code to either reach for `createAdcpServerFromPlatform` (the v6\n// canonical) or import from `@adcp/sdk/server/legacy/v5` (mid-migration /\n// escape-hatch only). Breaking change: v5 adopters see a hard import error\n// and update their import path. The migration is one line; the LLM-output\n// quality win is significant. See `docs/migration-5.x-to-6.x.md`.\nexport {\n requireSessionKey,\n ADCP_PRE_TRANSPORT,\n ADCP_SIGNED_REQUESTS_STATE,\n ADCP_INSTRUCTIONS_FN,\n} from './create-adcp-server';\nexport type { SessionContext, OnInstructionsError, MaybePromise, BridgeMarker } from './create-adcp-server';\nexport type {\n AdcpServer,\n AdcpServerComplianceApi,\n AdcpServerTransport,\n AdcpTestRequest,\n AdcpTestToolsCallRequest,\n AdcpTestResponse,\n} from './adcp-server';\nexport type {\n AdcpServerConfig,\n WebhooksConfig,\n AdcpToolMap,\n AdcpServerToolName,\n AdcpCapabilitiesConfig,\n AdcpCapabilitiesOverrides,\n AdcpCustomToolConfig,\n McpAppUiMeta,\n McpAppMeta,\n AdcpLogger,\n SignedRequestsConfig,\n AdcpPreTransport,\n AdcpSignedRequestsState,\n HandlerContext,\n SessionKeyContext,\n MediaBuyHandlers,\n SignalsHandlers,\n CreativeHandlers,\n GovernanceHandlers,\n AccountHandlers,\n EventTrackingHandlers,\n SponsoredIntelligenceHandlers,\n ResolveAccountContext,\n} from './create-adcp-server';\n\nexport { DEFAULT_REPORTING_CAPABILITIES } from './product-defaults';\n\nexport {\n isSandboxRequest,\n mergeSeededProductsIntoResponse,\n filterValidSeededProducts,\n filterValidSeededCreatives,\n filterValidSeededMediaBuys,\n filterValidSeededAccounts,\n filterValidSeededAccountFinancials,\n filterValidSeededCreativeFormats,\n mergeSeededCreativesIntoResponse,\n mergeSeededMediaBuysIntoResponse,\n mergeSeededAccountsIntoResponse,\n mergeSeededCreativeFormatsIntoResponse,\n pickSeededAccountFinancialsForRequest,\n replaceAccountFinancialsIfSeeded,\n bridgeFromTestControllerStore,\n bridgeFromSessionStore,\n} from './test-controller-bridge';\nexport type {\n TestControllerBridge,\n TestControllerBridgeContext,\n BridgeFromSessionStoreOptions,\n SeededCreative,\n SeededMediaBuy,\n SeededAccountFinancials,\n} from './test-controller-bridge';\n\nexport {\n createIdempotencyStore,\n probeIdempotencyStore,\n memoryBackend,\n pgBackend,\n getIdempotencyMigration,\n IDEMPOTENCY_MIGRATION,\n cleanupExpiredIdempotency,\n redisBackend,\n createLazyBackend,\n hashPayload,\n} from './idempotency';\nexport type {\n IdempotencyStore,\n IdempotencyStoreConfig,\n IdempotencyBackend,\n IdempotencyCacheEntry,\n IdempotencyCheckResult,\n MemoryBackendOptions,\n PgBackendOptions,\n RedisBackendOptions,\n RedisBackendClient,\n RedisLikeClient,\n LazyBackendFactory,\n LazyBackendOptions,\n} from './idempotency';\n\nexport { createA2AAdapter, A2AInvocationError } from './a2a-adapter';\nexport type {\n A2AAdapter,\n A2AAdapterOptions,\n A2AAgentCardOverrides,\n A2AMountOptions,\n ExpressAppLike,\n} from './a2a-adapter';\n\nexport { createWebhookEmitter, memoryWebhookKeyStore } from './webhook-emitter';\nexport type {\n WebhookEmitter,\n WebhookEmitterOptions,\n WebhookEmitParams,\n WebhookEmitResult,\n WebhookEmitAttempt,\n WebhookEmitAttemptResult,\n WebhookIdempotencyKeyStore,\n WebhookRetryOptions,\n WebhookAuthentication,\n} from './webhook-emitter';\nexport type { SigningProvider } from '../signing/provider';\n\nexport { createPinAndBindFetch, WEBHOOK_SSRF_POLICY, LOOPBACK_OK_WEBHOOK_SSRF_POLICY } from './pin-and-bind-fetch';\nexport type { PinAndBindFetchOptions, DnsLookupAll } from './pin-and-bind-fetch';\n\nexport { checkGovernance, governanceDeniedError } from './governance';\nexport type {\n CheckGovernanceOptions,\n GovernanceCallResult,\n GovernanceApproved,\n GovernanceDenied,\n GovernanceConditions,\n} from './governance';\n\nexport {\n clearDefaultResolvedListCache,\n createResolvedListCache,\n DEFAULT_RESOLVE_LIST_PAGE_SIZE,\n defaultResolvedListCache,\n resolvePropertyList,\n resolveCollectionList,\n resolvedListCacheKey,\n matchesPropertyList,\n matchesCollectionList,\n} from './targeting-helpers';\nexport type {\n ResolvedListCache,\n ResolvedListCacheEntry,\n ResolvedListCacheValue,\n ResolvedListKind,\n ResolvedPropertyList,\n ResolvedCollectionList,\n ResolvedCollection,\n ResolveListCallTool,\n ResolveListOptions,\n} from './targeting-helpers';\n\n// ---------------------------------------------------------------------------\n// Platform-shaped server entry point (recommended for new agents)\n// ---------------------------------------------------------------------------\n//\n// `createAdcpServerFromPlatform` wraps `createAdcpServer` (the lower-level\n// handler-bag entry above) with compile-time specialism enforcement\n// (`RequiredPlatformsFor<S>`), capability projection, idempotency wiring,\n// async tasks, status normalization, multi-tenant routing, and webhook\n// auto-emit. Adopters declare a typed `DecisioningPlatform` per-specialism\n// and the framework wires the rest. See `docs/migration-5.x-to-6.x.md`\n// and `skills/build-decisioning-platform/` for the full walkthrough.\n//\n// Both `createAdcpServer` and `createAdcpServerFromPlatform` live on the\n// same import path so adopters discover them as siblings; pick the\n// function shape that matches your agent. The platform path internally\n// builds an `AdcpServerConfig` and calls `createAdcpServer` — they're\n// not adjacent surfaces, they're parent-child layers of the same SDK.\n//\n// **Pin to v5 long-term?** Import from `@adcp/sdk/server/legacy/v5`\n// instead. The subpath is the stable home for the v5 handler-bag\n// constructor; the top-level re-export here may be removed in a\n// future major. New code should not pin against `legacy/v5` either —\n// reach for `createAdcpServerFromPlatform` first.\nexport * from './decisioning';\n\n// ---------------------------------------------------------------------------\n// Ctx-metadata store — opaque-blob round-trip for adapter-internal state\n// ---------------------------------------------------------------------------\n//\n// Publishers attach platform-specific opaque blobs to any returned resource\n// (product, media_buy, package, creative, audience, signal, rights_grant);\n// the framework persists by `(account_id, kind, id)`, strips from buyer-\n// facing wire payloads, threads back into the publisher's request context\n// on subsequent calls referencing the same resource ID. See\n// `docs/proposals/decisioning-platform-v6-1-ctx-metadata.md`.\nexport {\n createCtxMetadataStore,\n memoryCtxMetadataStore,\n pgCtxMetadataStore,\n redisCtxMetadataStore,\n getCtxMetadataMigration,\n cleanupExpiredCtxMetadata,\n CTX_METADATA_MIGRATION,\n CtxMetadataValidationError,\n ADCP_INTERNAL_TAG,\n DEFAULT_MAX_VALUE_BYTES,\n MAX_TTL_SECONDS,\n stripCtxMetadata,\n hasCtxMetadata,\n stripImplementationConfig,\n hasImplementationConfig,\n ctxMetadataResultKey,\n scopeCtxMetadataKey,\n} from './ctx-metadata';\nexport type {\n CtxMetadataStore,\n CtxMetadataStoreConfig,\n CtxMetadataBackend,\n CtxMetadataEntry,\n CtxMetadataRef,\n ResourceKind as CtxMetadataResourceKind,\n MemoryCtxMetadataStoreOptions,\n PgCtxMetadataBackendOptions,\n RedisCtxMetadataBackendOptions,\n CtxMetadataRedisBackendClient,\n CtxMetadataRedisLikeClient,\n WireShape,\n} from './ctx-metadata';\n\nexport { createTranslationMap, createUpstreamHttpClient } from './upstream-helpers';\nexport type {\n TranslationMap,\n UpstreamAuth,\n AuthContext,\n UpstreamCallOptions,\n UpstreamHttpClientOptions,\n UpstreamHttpClient,\n UpstreamHttpResult,\n} from './upstream-helpers';\n\n// ---------------------------------------------------------------------------\n// Server-side adapters\n// ---------------------------------------------------------------------------\nexport {\n InMemoryImplicitAccountStore,\n defaultImplicitKeyFn,\n type ImplicitAccountStoreOptions,\n} from '../adapters/implicit-account-store';\n\nexport {\n createOAuthPassthroughResolver,\n type OAuthPassthroughResolverOptions,\n} from '../adapters/oauth-passthrough-resolver';\n\nexport { createRosterAccountStore, type RosterAccountStoreOptions } from '../adapters/roster-account-store';\n\nexport { createDerivedAccountStore, type DerivedAccountStoreOptions } from '../adapters/derived-account-store';\n\n// ---------------------------------------------------------------------------\n// Socket Mode — outbound WebSocket bridge for adopter dev environments\n// ---------------------------------------------------------------------------\nexport {\n ConformanceClient,\n WebSocketTransport,\n type ConformanceClientOptions,\n type ConformanceStatus,\n} from './socket-mode';\n"],"mappings":"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","names":[]}
|
|
@@ -33,5 +33,5 @@
|
|
|
33
33
|
*/
|
|
34
34
|
export { createAdcpServer } from '../../create-adcp-server.mjs';
|
|
35
35
|
export * from '../../index.mjs';
|
|
36
|
-
export type { AdcpServerConfig, WebhooksConfig, AdcpToolMap, AdcpServerToolName, AdcpCapabilitiesConfig, AdcpCapabilitiesOverrides, AdcpCustomToolConfig, AdcpLogger, SignedRequestsConfig, AdcpPreTransport, AdcpSignedRequestsState, HandlerContext, SessionKeyContext, MediaBuyHandlers, SignalsHandlers, CreativeHandlers, GovernanceHandlers, AccountHandlers, EventTrackingHandlers, SponsoredIntelligenceHandlers, ResolveAccountContext, } from '../../create-adcp-server.mjs';
|
|
36
|
+
export type { AdcpServerConfig, WebhooksConfig, AdcpToolMap, AdcpServerToolName, AdcpCapabilitiesConfig, AdcpCapabilitiesOverrides, AdcpCustomToolConfig, McpAppUiMeta, McpAppMeta, AdcpLogger, SignedRequestsConfig, AdcpPreTransport, AdcpSignedRequestsState, HandlerContext, SessionKeyContext, MediaBuyHandlers, SignalsHandlers, CreativeHandlers, GovernanceHandlers, AccountHandlers, EventTrackingHandlers, SponsoredIntelligenceHandlers, ResolveAccountContext, } from '../../create-adcp-server.mjs';
|
|
37
37
|
export type { AdcpServer, AdcpServerComplianceApi, AdcpServerTransport, AdcpTestRequest, AdcpTestToolsCallRequest, AdcpTestResponse, } from '../../adcp-server.mjs';
|
|
@@ -33,6 +33,6 @@
|
|
|
33
33
|
*/
|
|
34
34
|
export { createAdcpServer } from '../../create-adcp-server';
|
|
35
35
|
export * from '../..';
|
|
36
|
-
export type { AdcpServerConfig, WebhooksConfig, AdcpToolMap, AdcpServerToolName, AdcpCapabilitiesConfig, AdcpCapabilitiesOverrides, AdcpCustomToolConfig, AdcpLogger, SignedRequestsConfig, AdcpPreTransport, AdcpSignedRequestsState, HandlerContext, SessionKeyContext, MediaBuyHandlers, SignalsHandlers, CreativeHandlers, GovernanceHandlers, AccountHandlers, EventTrackingHandlers, SponsoredIntelligenceHandlers, ResolveAccountContext, } from '../../create-adcp-server';
|
|
36
|
+
export type { AdcpServerConfig, WebhooksConfig, AdcpToolMap, AdcpServerToolName, AdcpCapabilitiesConfig, AdcpCapabilitiesOverrides, AdcpCustomToolConfig, McpAppUiMeta, McpAppMeta, AdcpLogger, SignedRequestsConfig, AdcpPreTransport, AdcpSignedRequestsState, HandlerContext, SessionKeyContext, MediaBuyHandlers, SignalsHandlers, CreativeHandlers, GovernanceHandlers, AccountHandlers, EventTrackingHandlers, SponsoredIntelligenceHandlers, ResolveAccountContext, } from '../../create-adcp-server';
|
|
37
37
|
export type { AdcpServer, AdcpServerComplianceApi, AdcpServerTransport, AdcpTestRequest, AdcpTestToolsCallRequest, AdcpTestResponse, } from '../../adcp-server';
|
|
38
38
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/lib/server/legacy/v5/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAIH,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAM5D,cAAc,OAAO,CAAC;AAEtB,YAAY,EACV,gBAAgB,EAChB,cAAc,EACd,WAAW,EACX,kBAAkB,EAClB,sBAAsB,EACtB,yBAAyB,EACzB,oBAAoB,EACpB,UAAU,EACV,oBAAoB,EACpB,gBAAgB,EAChB,uBAAuB,EACvB,cAAc,EACd,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EACf,qBAAqB,EACrB,6BAA6B,EAC7B,qBAAqB,GACtB,MAAM,0BAA0B,CAAC;AAElC,YAAY,EACV,UAAU,EACV,uBAAuB,EACvB,mBAAmB,EACnB,eAAe,EACf,wBAAwB,EACxB,gBAAgB,GACjB,MAAM,mBAAmB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/lib/server/legacy/v5/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAIH,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAM5D,cAAc,OAAO,CAAC;AAEtB,YAAY,EACV,gBAAgB,EAChB,cAAc,EACd,WAAW,EACX,kBAAkB,EAClB,sBAAsB,EACtB,yBAAyB,EACzB,oBAAoB,EACpB,YAAY,EACZ,UAAU,EACV,UAAU,EACV,oBAAoB,EACpB,gBAAgB,EAChB,uBAAuB,EACvB,cAAc,EACd,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EACf,qBAAqB,EACrB,6BAA6B,EAC7B,qBAAqB,GACtB,MAAM,0BAA0B,CAAC;AAElC,YAAY,EACV,UAAU,EACV,uBAAuB,EACvB,mBAAmB,EACnB,eAAe,EACf,wBAAwB,EACxB,gBAAgB,GACjB,MAAM,mBAAmB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/lib/server/legacy/v5/index.ts"],"sourcesContent":["/**\n * `@adcp/sdk/server/legacy/v5` — stable home for the v5 handler-bag\n * server constructor.\n *\n * **New code should not import from this subpath.** The canonical v6\n * entry point is `createAdcpServerFromPlatform` from `@adcp/sdk/server`,\n * which wraps this constructor with the typed specialism interfaces,\n * compile-time capability enforcement, ctx_metadata auto-hydration,\n * idempotency-principal synthesis, status mappers, multi-tenant routing,\n * and webhook auto-emit. See `docs/migration-5.x-to-6.x.md`.\n *\n * Reasons to import from `legacy/v5` rather than `@adcp/sdk/server`:\n *\n * 1. **Mid-migration codebases.** v5 adopters who haven't finished\n * migrating to v6 keep working by switching the import path —\n * same constructor, same config shape, no behavior change.\n *\n * 2. **Escape-hatch handlers** that v6 doesn't model directly: custom\n * `tools[]` outside the AdCP wire surface, the `mergeSeam` hook,\n * `preTransport` / `signedRequests` middleware. These stay on v5\n * until the v6 platform interface picks them up explicitly.\n *\n * 3. **Pinning against future v6 evolution.** The top-level export\n * is `@deprecated` and may be removed in a major; `legacy/v5`\n * is the stable subpath for adopters who genuinely need the v5\n * shape long-term.\n *\n * The top-level `@adcp/sdk/server` keeps a tag-deprecated re-export of\n * `createAdcpServer` for one cycle so existing imports don't break on\n * upgrade. New imports SHOULD reach for the subpath.\n *\n * @public\n */\n\n// `createAdcpServer` is the v5 entry point that was previously at the\n// top-level `@adcp/sdk/server` export. It now lives only here.\nexport { createAdcpServer } from '../../create-adcp-server';\n\n// Re-export everything else from `@adcp/sdk/server` so a v5 adopter's\n// migration path is a single-line import swap:\n// from '@adcp/sdk/server' → from '@adcp/sdk/server/legacy/v5'\n// without splitting destructured imports across two paths.\nexport * from '../..';\n\nexport type {\n AdcpServerConfig,\n WebhooksConfig,\n AdcpToolMap,\n AdcpServerToolName,\n AdcpCapabilitiesConfig,\n AdcpCapabilitiesOverrides,\n AdcpCustomToolConfig,\n AdcpLogger,\n SignedRequestsConfig,\n AdcpPreTransport,\n AdcpSignedRequestsState,\n HandlerContext,\n SessionKeyContext,\n MediaBuyHandlers,\n SignalsHandlers,\n CreativeHandlers,\n GovernanceHandlers,\n AccountHandlers,\n EventTrackingHandlers,\n SponsoredIntelligenceHandlers,\n ResolveAccountContext,\n} from '../../create-adcp-server';\n\nexport type {\n AdcpServer,\n AdcpServerComplianceApi,\n AdcpServerTransport,\n AdcpTestRequest,\n AdcpTestToolsCallRequest,\n AdcpTestResponse,\n} from '../../adcp-server';\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAoCA,gCAAiC;AAMjC,uBAAc,kBA1Cd;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../../../src/lib/server/legacy/v5/index.ts"],"sourcesContent":["/**\n * `@adcp/sdk/server/legacy/v5` — stable home for the v5 handler-bag\n * server constructor.\n *\n * **New code should not import from this subpath.** The canonical v6\n * entry point is `createAdcpServerFromPlatform` from `@adcp/sdk/server`,\n * which wraps this constructor with the typed specialism interfaces,\n * compile-time capability enforcement, ctx_metadata auto-hydration,\n * idempotency-principal synthesis, status mappers, multi-tenant routing,\n * and webhook auto-emit. See `docs/migration-5.x-to-6.x.md`.\n *\n * Reasons to import from `legacy/v5` rather than `@adcp/sdk/server`:\n *\n * 1. **Mid-migration codebases.** v5 adopters who haven't finished\n * migrating to v6 keep working by switching the import path —\n * same constructor, same config shape, no behavior change.\n *\n * 2. **Escape-hatch handlers** that v6 doesn't model directly: custom\n * `tools[]` outside the AdCP wire surface, the `mergeSeam` hook,\n * `preTransport` / `signedRequests` middleware. These stay on v5\n * until the v6 platform interface picks them up explicitly.\n *\n * 3. **Pinning against future v6 evolution.** The top-level export\n * is `@deprecated` and may be removed in a major; `legacy/v5`\n * is the stable subpath for adopters who genuinely need the v5\n * shape long-term.\n *\n * The top-level `@adcp/sdk/server` keeps a tag-deprecated re-export of\n * `createAdcpServer` for one cycle so existing imports don't break on\n * upgrade. New imports SHOULD reach for the subpath.\n *\n * @public\n */\n\n// `createAdcpServer` is the v5 entry point that was previously at the\n// top-level `@adcp/sdk/server` export. It now lives only here.\nexport { createAdcpServer } from '../../create-adcp-server';\n\n// Re-export everything else from `@adcp/sdk/server` so a v5 adopter's\n// migration path is a single-line import swap:\n// from '@adcp/sdk/server' → from '@adcp/sdk/server/legacy/v5'\n// without splitting destructured imports across two paths.\nexport * from '../..';\n\nexport type {\n AdcpServerConfig,\n WebhooksConfig,\n AdcpToolMap,\n AdcpServerToolName,\n AdcpCapabilitiesConfig,\n AdcpCapabilitiesOverrides,\n AdcpCustomToolConfig,\n McpAppUiMeta,\n McpAppMeta,\n AdcpLogger,\n SignedRequestsConfig,\n AdcpPreTransport,\n AdcpSignedRequestsState,\n HandlerContext,\n SessionKeyContext,\n MediaBuyHandlers,\n SignalsHandlers,\n CreativeHandlers,\n GovernanceHandlers,\n AccountHandlers,\n EventTrackingHandlers,\n SponsoredIntelligenceHandlers,\n ResolveAccountContext,\n} from '../../create-adcp-server';\n\nexport type {\n AdcpServer,\n AdcpServerComplianceApi,\n AdcpServerTransport,\n AdcpTestRequest,\n AdcpTestToolsCallRequest,\n AdcpTestResponse,\n} from '../../adcp-server';\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAoCA,gCAAiC;AAMjC,uBAAc,kBA1Cd;","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 { createAdcpServer } from "../../create-adcp-server.mjs";
|
|
8
2
|
export * from "../../index.mjs";
|
|
9
3
|
export {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/lib/server/legacy/v5/index.ts"],"sourcesContent":["/**\n * `@adcp/sdk/server/legacy/v5` — stable home for the v5 handler-bag\n * server constructor.\n *\n * **New code should not import from this subpath.** The canonical v6\n * entry point is `createAdcpServerFromPlatform` from `@adcp/sdk/server`,\n * which wraps this constructor with the typed specialism interfaces,\n * compile-time capability enforcement, ctx_metadata auto-hydration,\n * idempotency-principal synthesis, status mappers, multi-tenant routing,\n * and webhook auto-emit. See `docs/migration-5.x-to-6.x.md`.\n *\n * Reasons to import from `legacy/v5` rather than `@adcp/sdk/server`:\n *\n * 1. **Mid-migration codebases.** v5 adopters who haven't finished\n * migrating to v6 keep working by switching the import path —\n * same constructor, same config shape, no behavior change.\n *\n * 2. **Escape-hatch handlers** that v6 doesn't model directly: custom\n * `tools[]` outside the AdCP wire surface, the `mergeSeam` hook,\n * `preTransport` / `signedRequests` middleware. These stay on v5\n * until the v6 platform interface picks them up explicitly.\n *\n * 3. **Pinning against future v6 evolution.** The top-level export\n * is `@deprecated` and may be removed in a major; `legacy/v5`\n * is the stable subpath for adopters who genuinely need the v5\n * shape long-term.\n *\n * The top-level `@adcp/sdk/server` keeps a tag-deprecated re-export of\n * `createAdcpServer` for one cycle so existing imports don't break on\n * upgrade. New imports SHOULD reach for the subpath.\n *\n * @public\n */\n\n// `createAdcpServer` is the v5 entry point that was previously at the\n// top-level `@adcp/sdk/server` export. It now lives only here.\nexport { createAdcpServer } from '../../create-adcp-server';\n\n// Re-export everything else from `@adcp/sdk/server` so a v5 adopter's\n// migration path is a single-line import swap:\n// from '@adcp/sdk/server' → from '@adcp/sdk/server/legacy/v5'\n// without splitting destructured imports across two paths.\nexport * from '../..';\n\nexport type {\n AdcpServerConfig,\n WebhooksConfig,\n AdcpToolMap,\n AdcpServerToolName,\n AdcpCapabilitiesConfig,\n AdcpCapabilitiesOverrides,\n AdcpCustomToolConfig,\n AdcpLogger,\n SignedRequestsConfig,\n AdcpPreTransport,\n AdcpSignedRequestsState,\n HandlerContext,\n SessionKeyContext,\n MediaBuyHandlers,\n SignalsHandlers,\n CreativeHandlers,\n GovernanceHandlers,\n AccountHandlers,\n EventTrackingHandlers,\n SponsoredIntelligenceHandlers,\n ResolveAccountContext,\n} from '../../create-adcp-server';\n\nexport type {\n AdcpServer,\n AdcpServerComplianceApi,\n AdcpServerTransport,\n AdcpTestRequest,\n AdcpTestToolsCallRequest,\n AdcpTestResponse,\n} from '../../adcp-server';\n"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../../../../src/lib/server/legacy/v5/index.ts"],"sourcesContent":["/**\n * `@adcp/sdk/server/legacy/v5` — stable home for the v5 handler-bag\n * server constructor.\n *\n * **New code should not import from this subpath.** The canonical v6\n * entry point is `createAdcpServerFromPlatform` from `@adcp/sdk/server`,\n * which wraps this constructor with the typed specialism interfaces,\n * compile-time capability enforcement, ctx_metadata auto-hydration,\n * idempotency-principal synthesis, status mappers, multi-tenant routing,\n * and webhook auto-emit. See `docs/migration-5.x-to-6.x.md`.\n *\n * Reasons to import from `legacy/v5` rather than `@adcp/sdk/server`:\n *\n * 1. **Mid-migration codebases.** v5 adopters who haven't finished\n * migrating to v6 keep working by switching the import path —\n * same constructor, same config shape, no behavior change.\n *\n * 2. **Escape-hatch handlers** that v6 doesn't model directly: custom\n * `tools[]` outside the AdCP wire surface, the `mergeSeam` hook,\n * `preTransport` / `signedRequests` middleware. These stay on v5\n * until the v6 platform interface picks them up explicitly.\n *\n * 3. **Pinning against future v6 evolution.** The top-level export\n * is `@deprecated` and may be removed in a major; `legacy/v5`\n * is the stable subpath for adopters who genuinely need the v5\n * shape long-term.\n *\n * The top-level `@adcp/sdk/server` keeps a tag-deprecated re-export of\n * `createAdcpServer` for one cycle so existing imports don't break on\n * upgrade. New imports SHOULD reach for the subpath.\n *\n * @public\n */\n\n// `createAdcpServer` is the v5 entry point that was previously at the\n// top-level `@adcp/sdk/server` export. It now lives only here.\nexport { createAdcpServer } from '../../create-adcp-server';\n\n// Re-export everything else from `@adcp/sdk/server` so a v5 adopter's\n// migration path is a single-line import swap:\n// from '@adcp/sdk/server' → from '@adcp/sdk/server/legacy/v5'\n// without splitting destructured imports across two paths.\nexport * from '../..';\n\nexport type {\n AdcpServerConfig,\n WebhooksConfig,\n AdcpToolMap,\n AdcpServerToolName,\n AdcpCapabilitiesConfig,\n AdcpCapabilitiesOverrides,\n AdcpCustomToolConfig,\n McpAppUiMeta,\n McpAppMeta,\n AdcpLogger,\n SignedRequestsConfig,\n AdcpPreTransport,\n AdcpSignedRequestsState,\n HandlerContext,\n SessionKeyContext,\n MediaBuyHandlers,\n SignalsHandlers,\n CreativeHandlers,\n GovernanceHandlers,\n AccountHandlers,\n EventTrackingHandlers,\n SponsoredIntelligenceHandlers,\n ResolveAccountContext,\n} from '../../create-adcp-server';\n\nexport type {\n AdcpServer,\n AdcpServerComplianceApi,\n AdcpServerTransport,\n AdcpTestRequest,\n AdcpTestToolsCallRequest,\n AdcpTestResponse,\n} from '../../adcp-server';\n"],"mappings":"AAoCA,SAAS,wBAAwB;AAMjC,cAAc;","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 {
|
|
8
2
|
McpServer as ModernMcpServer,
|
|
9
3
|
createMcpHandler,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/server/mcp-modern-server.ts"],"sourcesContent":["/**\n * MCP 2026-07-28 server adapter.\n *\n * AdCP's handler pipeline remains registered on the v1 SDK server so legacy\n * MCP Tasks continue to work. This adapter mirrors only the public tool\n * definitions into the official v2 SDK and dispatches calls through the\n * opaque AdcpServer.invoke() surface.\n */\n\nimport {\n McpServer as ModernMcpServer,\n createMcpHandler,\n isLegacyRequest,\n type AuthInfo as ModernAuthInfo,\n type StandardSchemaWithJSON,\n type ServerContext,\n type ToolAnnotations,\n} from '@modelcontextprotocol/server';\nimport { toNodeHandler, toWebRequest, type NodeMcpRequestHandler } from '@modelcontextprotocol/node';\nimport type { IncomingMessage } from 'http';\nimport {\n getSdkServer,\n getSdkServerInfo,\n getSdkServerInstructions,\n isRegisteredToolVisible,\n listRegisteredToolDefinitions,\n type AdcpAuthInfo,\n type AdcpServer,\n} from './adcp-server';\nimport { ADCP_INSTRUCTIONS_RESOLVER } from './create-adcp-server';\n\nexport interface ModernMcpServerAdapter {\n handle: NodeMcpRequestHandler;\n isLegacyRequest(req: IncomingMessage, parsedBody: unknown): Promise<boolean>;\n close(): Promise<void>;\n}\n\nfunction toAdcpAuthInfo(authInfo: ModernAuthInfo | undefined): AdcpAuthInfo | undefined {\n if (!authInfo) return undefined;\n return {\n token: authInfo.token,\n clientId: authInfo.clientId,\n scopes: authInfo.scopes,\n ...(authInfo.expiresAt !== undefined && { expiresAt: authInfo.expiresAt }),\n ...(authInfo.extra !== undefined && { extra: authInfo.extra }),\n };\n}\n\n/** Build a strict 2026-07-28 handler around one configured AdCP server. @internal */\nexport function createModernMcpServerAdapter(agentServer: AdcpServer): ModernMcpServerAdapter {\n const sdkServer = getSdkServer(agentServer);\n if (!sdkServer) {\n throw new Error('Modern MCP serving requires an AdcpServer backed by the official MCP SDK');\n }\n\n const serverInfo = getSdkServerInfo(sdkServer);\n const toolDefinitions = listRegisteredToolDefinitions(sdkServer);\n const handler = createMcpHandler(\n async requestContext => {\n if (requestContext.requestInfo?.headers.get('mcp-method') === 'server/discover') {\n const instructionsResolver = (agentServer as unknown as Record<symbol, unknown>)[ADCP_INSTRUCTIONS_RESOLVER];\n if (typeof instructionsResolver === 'function') {\n await (instructionsResolver as () => Promise<string | undefined>)();\n }\n }\n const modern = new ModernMcpServer(\n { name: serverInfo.name, version: serverInfo.version },\n { instructions: getSdkServerInstructions(sdkServer) }\n );\n\n const authInfo = toAdcpAuthInfo(requestContext.authInfo);\n for (const tool of toolDefinitions) {\n if (!(await isRegisteredToolVisible(agentServer, { toolName: tool.name, authInfo }))) continue;\n const config = {\n ...(tool.title !== undefined && { title: tool.title }),\n ...(tool.description !== undefined && { description: tool.description }),\n ...(tool.outputSchema !== undefined && {\n outputSchema: tool.outputSchema as StandardSchemaWithJSON,\n }),\n ...(tool.annotations !== undefined && { annotations: tool.annotations as ToolAnnotations }),\n ...(tool._meta !== undefined && { _meta: tool._meta }),\n };\n const invoke = (args: Record<string, unknown>, ctx: ServerContext) =>\n agentServer.invoke({\n toolName: tool.name,\n args,\n authInfo: toAdcpAuthInfo(ctx.http?.authInfo),\n signal: ctx.mcpReq.signal,\n });\n\n if (tool.inputSchema !== undefined) {\n modern.registerTool(\n tool.name,\n { ...config, inputSchema: tool.inputSchema as StandardSchemaWithJSON },\n async (args, ctx) => invoke((args ?? {}) as Record<string, unknown>, ctx)\n );\n } else {\n modern.registerTool(tool.name, config, async ctx => invoke({}, ctx));\n }\n }\n\n return modern;\n },\n {\n legacy: 'reject',\n onerror(error) {\n console.error('[adcp/serve] modern MCP error:', error);\n },\n }\n );\n\n return {\n handle: toNodeHandler(handler, {\n onerror(error) {\n console.error('[adcp/serve] modern MCP Node adapter error:', error);\n },\n }),\n async isLegacyRequest(req, parsedBody) {\n const request = await toWebRequest(req, parsedBody);\n return isLegacyRequest(request, parsedBody);\n },\n close: () => handler.close(),\n };\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/server/mcp-modern-server.ts"],"sourcesContent":["/**\n * MCP 2026-07-28 server adapter.\n *\n * AdCP's handler pipeline remains registered on the v1 SDK server so legacy\n * MCP Tasks continue to work. This adapter mirrors only the public tool\n * definitions into the official v2 SDK and dispatches calls through the\n * opaque AdcpServer.invoke() surface.\n */\n\nimport {\n McpServer as ModernMcpServer,\n createMcpHandler,\n isLegacyRequest,\n type AuthInfo as ModernAuthInfo,\n type StandardSchemaWithJSON,\n type ServerContext,\n type ToolAnnotations,\n} from '@modelcontextprotocol/server';\nimport { toNodeHandler, toWebRequest, type NodeMcpRequestHandler } from '@modelcontextprotocol/node';\nimport type { IncomingMessage } from 'http';\nimport {\n getSdkServer,\n getSdkServerInfo,\n getSdkServerInstructions,\n isRegisteredToolVisible,\n listRegisteredToolDefinitions,\n type AdcpAuthInfo,\n type AdcpServer,\n} from './adcp-server';\nimport { ADCP_INSTRUCTIONS_RESOLVER } from './create-adcp-server';\n\nexport interface ModernMcpServerAdapter {\n handle: NodeMcpRequestHandler;\n isLegacyRequest(req: IncomingMessage, parsedBody: unknown): Promise<boolean>;\n close(): Promise<void>;\n}\n\nfunction toAdcpAuthInfo(authInfo: ModernAuthInfo | undefined): AdcpAuthInfo | undefined {\n if (!authInfo) return undefined;\n return {\n token: authInfo.token,\n clientId: authInfo.clientId,\n scopes: authInfo.scopes,\n ...(authInfo.expiresAt !== undefined && { expiresAt: authInfo.expiresAt }),\n ...(authInfo.extra !== undefined && { extra: authInfo.extra }),\n };\n}\n\n/** Build a strict 2026-07-28 handler around one configured AdCP server. @internal */\nexport function createModernMcpServerAdapter(agentServer: AdcpServer): ModernMcpServerAdapter {\n const sdkServer = getSdkServer(agentServer);\n if (!sdkServer) {\n throw new Error('Modern MCP serving requires an AdcpServer backed by the official MCP SDK');\n }\n\n const serverInfo = getSdkServerInfo(sdkServer);\n const toolDefinitions = listRegisteredToolDefinitions(sdkServer);\n const handler = createMcpHandler(\n async requestContext => {\n if (requestContext.requestInfo?.headers.get('mcp-method') === 'server/discover') {\n const instructionsResolver = (agentServer as unknown as Record<symbol, unknown>)[ADCP_INSTRUCTIONS_RESOLVER];\n if (typeof instructionsResolver === 'function') {\n await (instructionsResolver as () => Promise<string | undefined>)();\n }\n }\n const modern = new ModernMcpServer(\n { name: serverInfo.name, version: serverInfo.version },\n { instructions: getSdkServerInstructions(sdkServer) }\n );\n\n const authInfo = toAdcpAuthInfo(requestContext.authInfo);\n for (const tool of toolDefinitions) {\n if (!(await isRegisteredToolVisible(agentServer, { toolName: tool.name, authInfo }))) continue;\n const config = {\n ...(tool.title !== undefined && { title: tool.title }),\n ...(tool.description !== undefined && { description: tool.description }),\n ...(tool.outputSchema !== undefined && {\n outputSchema: tool.outputSchema as StandardSchemaWithJSON,\n }),\n ...(tool.annotations !== undefined && { annotations: tool.annotations as ToolAnnotations }),\n ...(tool._meta !== undefined && { _meta: tool._meta }),\n };\n const invoke = (args: Record<string, unknown>, ctx: ServerContext) =>\n agentServer.invoke({\n toolName: tool.name,\n args,\n authInfo: toAdcpAuthInfo(ctx.http?.authInfo),\n signal: ctx.mcpReq.signal,\n });\n\n if (tool.inputSchema !== undefined) {\n modern.registerTool(\n tool.name,\n { ...config, inputSchema: tool.inputSchema as StandardSchemaWithJSON },\n async (args, ctx) => invoke((args ?? {}) as Record<string, unknown>, ctx)\n );\n } else {\n modern.registerTool(tool.name, config, async ctx => invoke({}, ctx));\n }\n }\n\n return modern;\n },\n {\n legacy: 'reject',\n onerror(error) {\n console.error('[adcp/serve] modern MCP error:', error);\n },\n }\n );\n\n return {\n handle: toNodeHandler(handler, {\n onerror(error) {\n console.error('[adcp/serve] modern MCP Node adapter error:', error);\n },\n }),\n async isLegacyRequest(req, parsedBody) {\n const request = await toWebRequest(req, parsedBody);\n return isLegacyRequest(request, parsedBody);\n },\n close: () => handler.close(),\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 { ValidationError } from "../errors/index.mjs";
|
|
8
2
|
import {
|
|
9
3
|
getAvailableActions,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/server/media-buy-actions.ts"],"sourcesContent":["/**\n * Server/adopter helpers for enforcing the update_media_buy action surface.\n *\n * The media-buy module owns pure decomposition and preflight. This wrapper\n * converts denied preflights into the canonical server-side `AdcpError` shape\n * so DecisioningPlatform implementations can reject unavailable mutations\n * without hand-building ACTION_NOT_ALLOWED envelopes.\n */\n\nimport { ValidationError } from '../errors';\nimport {\n getAvailableActions,\n preflightUpdateMediaBuy,\n type ActionNotAllowedReason,\n type MediaBuyActionContext,\n type MediaBuyActionMode,\n type MediaBuyAvailableAction,\n type MediaBuyValidAction,\n type PreflightAllowed,\n type PreflightDenied,\n type PreflightDenial,\n type UpdateMediaBuyRequestLike,\n} from '../media-buy';\nimport { AdcpError } from './decisioning/async-outcome';\n\nexport interface AssertUpdateMediaBuyAllowedOptions {\n /**\n * Restrict the modes this call path may execute directly. Omit to enforce\n * availability only. Pass `['self_serve']` when the handler cannot queue\n * proposal / approval flows and should reject those as `mode_mismatch`.\n */\n allowedModes?: readonly MediaBuyActionMode[];\n /**\n * Override the reason used for missing actions. Defaults to the preflight\n * denial reason (`not_supported_on_buy` for buyer-side preflight misses).\n */\n reason?: ActionNotAllowedReason | ((denial: PreflightDenial, result: PreflightDenied) => ActionNotAllowedReason);\n}\n\n/**\n * Assert that an `update_media_buy` patch only requests actions currently\n * available on the supplied media buy. On success, returns the same enriched\n * preflight result callers can use to dispatch `result.mutations`.\n *\n * Throws:\n * - `AdcpError('INVALID_REQUEST')` when the patch contains no recognized\n * update mutation.\n * - `AdcpError('ACTION_NOT_ALLOWED')` with spec details when at least one\n * requested action is unavailable or disallowed by `allowedModes`.\n */\nexport function assertUpdateMediaBuyAllowed(\n currentBuy: MediaBuyActionContext,\n request: UpdateMediaBuyRequestLike,\n options: AssertUpdateMediaBuyAllowedOptions = {}\n): PreflightAllowed {\n let result: ReturnType<typeof preflightUpdateMediaBuy>;\n try {\n result = preflightUpdateMediaBuy(currentBuy, request);\n } catch (err) {\n if (err instanceof ValidationError) {\n throw new AdcpError('INVALID_REQUEST', {\n message: err.message,\n recovery: 'correctable',\n field: 'request',\n });\n }\n throw err;\n }\n\n const currentlyAvailable = getAvailableActions(currentBuy, { silent: true }).actions;\n\n if (!result.ok) {\n throw actionNotAllowedFromDenied(result, currentlyAvailable, options);\n }\n\n if (options.allowedModes && options.allowedModes.length > 0) {\n const modeMismatch = result.matched.findIndex(match => !options.allowedModes!.includes(match.mode));\n if (modeMismatch >= 0) {\n const action = result.actions[modeMismatch]?.action ?? result.matched[modeMismatch]!.action;\n throw actionNotAllowed(action, 'mode_mismatch', currentlyAvailable);\n }\n }\n\n return result;\n}\n\nfunction actionNotAllowedFromDenied(\n result: PreflightDenied,\n currentlyAvailable: MediaBuyAvailableAction[],\n options: AssertUpdateMediaBuyAllowedOptions\n): AdcpError {\n const denial = result.denials[0];\n if (!denial) {\n return new AdcpError('INVALID_REQUEST', {\n message: 'update_media_buy request could not be mapped to an allowed action',\n recovery: 'correctable',\n field: 'request',\n });\n }\n\n const reason =\n typeof options.reason === 'function' ? options.reason(denial, result) : (options.reason ?? denial.reason);\n\n return actionNotAllowed(denial.action, reason, currentlyAvailable);\n}\n\nfunction actionNotAllowed(\n attemptedAction: MediaBuyValidAction,\n reason: ActionNotAllowedReason,\n currentlyAvailable: MediaBuyAvailableAction[]\n): AdcpError {\n const details = {\n attempted_action: attemptedAction,\n reason,\n currently_available_actions: currentlyAvailable,\n };\n\n return new AdcpError('ACTION_NOT_ALLOWED', {\n message: buildActionNotAllowedMessage(attemptedAction, reason),\n recovery: 'correctable',\n field: 'update_media_buy',\n details,\n });\n}\n\nfunction buildActionNotAllowedMessage(action: MediaBuyValidAction, reason: ActionNotAllowedReason): string {\n return `update_media_buy rejected: \\`${action}\\` not allowed (${reason}).`;\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/server/media-buy-actions.ts"],"sourcesContent":["/**\n * Server/adopter helpers for enforcing the update_media_buy action surface.\n *\n * The media-buy module owns pure decomposition and preflight. This wrapper\n * converts denied preflights into the canonical server-side `AdcpError` shape\n * so DecisioningPlatform implementations can reject unavailable mutations\n * without hand-building ACTION_NOT_ALLOWED envelopes.\n */\n\nimport { ValidationError } from '../errors';\nimport {\n getAvailableActions,\n preflightUpdateMediaBuy,\n type ActionNotAllowedReason,\n type MediaBuyActionContext,\n type MediaBuyActionMode,\n type MediaBuyAvailableAction,\n type MediaBuyValidAction,\n type PreflightAllowed,\n type PreflightDenied,\n type PreflightDenial,\n type UpdateMediaBuyRequestLike,\n} from '../media-buy';\nimport { AdcpError } from './decisioning/async-outcome';\n\nexport interface AssertUpdateMediaBuyAllowedOptions {\n /**\n * Restrict the modes this call path may execute directly. Omit to enforce\n * availability only. Pass `['self_serve']` when the handler cannot queue\n * proposal / approval flows and should reject those as `mode_mismatch`.\n */\n allowedModes?: readonly MediaBuyActionMode[];\n /**\n * Override the reason used for missing actions. Defaults to the preflight\n * denial reason (`not_supported_on_buy` for buyer-side preflight misses).\n */\n reason?: ActionNotAllowedReason | ((denial: PreflightDenial, result: PreflightDenied) => ActionNotAllowedReason);\n}\n\n/**\n * Assert that an `update_media_buy` patch only requests actions currently\n * available on the supplied media buy. On success, returns the same enriched\n * preflight result callers can use to dispatch `result.mutations`.\n *\n * Throws:\n * - `AdcpError('INVALID_REQUEST')` when the patch contains no recognized\n * update mutation.\n * - `AdcpError('ACTION_NOT_ALLOWED')` with spec details when at least one\n * requested action is unavailable or disallowed by `allowedModes`.\n */\nexport function assertUpdateMediaBuyAllowed(\n currentBuy: MediaBuyActionContext,\n request: UpdateMediaBuyRequestLike,\n options: AssertUpdateMediaBuyAllowedOptions = {}\n): PreflightAllowed {\n let result: ReturnType<typeof preflightUpdateMediaBuy>;\n try {\n result = preflightUpdateMediaBuy(currentBuy, request);\n } catch (err) {\n if (err instanceof ValidationError) {\n throw new AdcpError('INVALID_REQUEST', {\n message: err.message,\n recovery: 'correctable',\n field: 'request',\n });\n }\n throw err;\n }\n\n const currentlyAvailable = getAvailableActions(currentBuy, { silent: true }).actions;\n\n if (!result.ok) {\n throw actionNotAllowedFromDenied(result, currentlyAvailable, options);\n }\n\n if (options.allowedModes && options.allowedModes.length > 0) {\n const modeMismatch = result.matched.findIndex(match => !options.allowedModes!.includes(match.mode));\n if (modeMismatch >= 0) {\n const action = result.actions[modeMismatch]?.action ?? result.matched[modeMismatch]!.action;\n throw actionNotAllowed(action, 'mode_mismatch', currentlyAvailable);\n }\n }\n\n return result;\n}\n\nfunction actionNotAllowedFromDenied(\n result: PreflightDenied,\n currentlyAvailable: MediaBuyAvailableAction[],\n options: AssertUpdateMediaBuyAllowedOptions\n): AdcpError {\n const denial = result.denials[0];\n if (!denial) {\n return new AdcpError('INVALID_REQUEST', {\n message: 'update_media_buy request could not be mapped to an allowed action',\n recovery: 'correctable',\n field: 'request',\n });\n }\n\n const reason =\n typeof options.reason === 'function' ? options.reason(denial, result) : (options.reason ?? denial.reason);\n\n return actionNotAllowed(denial.action, reason, currentlyAvailable);\n}\n\nfunction actionNotAllowed(\n attemptedAction: MediaBuyValidAction,\n reason: ActionNotAllowedReason,\n currentlyAvailable: MediaBuyAvailableAction[]\n): AdcpError {\n const details = {\n attempted_action: attemptedAction,\n reason,\n currently_available_actions: currentlyAvailable,\n };\n\n return new AdcpError('ACTION_NOT_ALLOWED', {\n message: buildActionNotAllowedMessage(attemptedAction, reason),\n recovery: 'correctable',\n field: 'update_media_buy',\n details,\n });\n}\n\nfunction buildActionNotAllowedMessage(action: MediaBuyValidAction, reason: ActionNotAllowedReason): string {\n return `update_media_buy rejected: \\`${action}\\` not allowed (${reason}).`;\n}\n"],"mappings":"AASA,SAAS,uBAAuB;AAChC;AAAA,EACE;AAAA,EACA;AAAA,OAUK;AACP,SAAS,iBAAiB;AA2BnB,SAAS,4BACd,YACA,SACA,UAA8C,CAAC,GAC7B;AAClB,MAAI;AACJ,MAAI;AACF,aAAS,wBAAwB,YAAY,OAAO;AAAA,EACtD,SAAS,KAAK;AACZ,QAAI,eAAe,iBAAiB;AAClC,YAAM,IAAI,UAAU,mBAAmB;AAAA,QACrC,SAAS,IAAI;AAAA,QACb,UAAU;AAAA,QACV,OAAO;AAAA,MACT,CAAC;AAAA,IACH;AACA,UAAM;AAAA,EACR;AAEA,QAAM,qBAAqB,oBAAoB,YAAY,EAAE,QAAQ,KAAK,CAAC,EAAE;AAE7E,MAAI,CAAC,OAAO,IAAI;AACd,UAAM,2BAA2B,QAAQ,oBAAoB,OAAO;AAAA,EACtE;AAEA,MAAI,QAAQ,gBAAgB,QAAQ,aAAa,SAAS,GAAG;AAC3D,UAAM,eAAe,OAAO,QAAQ,UAAU,WAAS,CAAC,QAAQ,aAAc,SAAS,MAAM,IAAI,CAAC;AAClG,QAAI,gBAAgB,GAAG;AACrB,YAAM,SAAS,OAAO,QAAQ,YAAY,GAAG,UAAU,OAAO,QAAQ,YAAY,EAAG;AACrF,YAAM,iBAAiB,QAAQ,iBAAiB,kBAAkB;AAAA,IACpE;AAAA,EACF;AAEA,SAAO;AACT;AAEA,SAAS,2BACP,QACA,oBACA,SACW;AACX,QAAM,SAAS,OAAO,QAAQ,CAAC;AAC/B,MAAI,CAAC,QAAQ;AACX,WAAO,IAAI,UAAU,mBAAmB;AAAA,MACtC,SAAS;AAAA,MACT,UAAU;AAAA,MACV,OAAO;AAAA,IACT,CAAC;AAAA,EACH;AAEA,QAAM,SACJ,OAAO,QAAQ,WAAW,aAAa,QAAQ,OAAO,QAAQ,MAAM,IAAK,QAAQ,UAAU,OAAO;AAEpG,SAAO,iBAAiB,OAAO,QAAQ,QAAQ,kBAAkB;AACnE;AAEA,SAAS,iBACP,iBACA,QACA,oBACW;AACX,QAAM,UAAU;AAAA,IACd,kBAAkB;AAAA,IAClB;AAAA,IACA,6BAA6B;AAAA,EAC/B;AAEA,SAAO,IAAI,UAAU,sBAAsB;AAAA,IACzC,SAAS,6BAA6B,iBAAiB,MAAM;AAAA,IAC7D,UAAU;AAAA,IACV,OAAO;AAAA,IACP;AAAA,EACF,CAAC;AACH;AAEA,SAAS,6BAA6B,QAA6B,QAAwC;AACzG,SAAO,gCAAgC,MAAM,mBAAmB,MAAM;AACxE;","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
|
function validActionsForStatus(status) {
|
|
8
2
|
switch (status) {
|
|
9
3
|
case "pending_creatives":
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/server/media-buy-helpers.ts"],"sourcesContent":["/**\n * Media buy response helpers that eliminate common implementation traps.\n *\n * These helpers encode protocol rules (status→valid_actions mapping,\n * required cancellation metadata, initial revision numbers) so agent\n * builders get the right shape by default.\n */\n\nimport type { MediaBuyStatus, CanceledBy, CreateMediaBuySuccess, Package } from '../types/core.generated';\n\n/**\n * Actions a buyer can perform on a media buy.\n * Derived from the generated schema to stay in sync automatically.\n */\nexport type ValidAction = NonNullable<CreateMediaBuySuccess['valid_actions']>[number];\n\n/**\n * Returns the default set of valid buyer actions for a given media buy status.\n *\n * Terminal statuses (completed, rejected, canceled) return an empty array.\n * Active statuses return the full set of actions; paused restricts to\n * resume, cancel, and budget/date updates.\n *\n * Both pending statuses allow full modification — the protocol permits\n * restructuring a buy (packages, budget, dates) while awaiting creatives\n * or start date.\n *\n * Sellers with restricted capabilities can filter the result:\n * ```typescript\n * const actions = validActionsForStatus('active')\n * .filter(a => a !== 'sync_creatives'); // no creative management\n * ```\n */\nexport function validActionsForStatus(status: MediaBuyStatus): ValidAction[] {\n switch (status) {\n case 'pending_creatives':\n case 'pending_start':\n return ['cancel', 'update_budget', 'update_dates', 'update_packages', 'add_packages', 'sync_creatives'];\n case 'active':\n return ['pause', 'cancel', 'update_budget', 'update_dates', 'update_packages', 'add_packages', 'sync_creatives'];\n case 'paused':\n return ['resume', 'cancel', 'update_budget', 'update_dates'];\n case 'completed':\n case 'rejected':\n case 'canceled':\n return [];\n }\n}\n\n/**\n * Input for cancelMediaBuyResponse(). Requires the fields that agent builders\n * commonly forget — canceled_by and revision are mandatory,\n * canceled_at defaults to now.\n */\nexport interface CancelMediaBuyInput {\n media_buy_id: string;\n canceled_by: CanceledBy;\n /** Current revision after the cancellation update. */\n revision: number;\n reason?: string;\n canceled_at?: string;\n affected_packages?: Package[];\n sandbox?: boolean;\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/server/media-buy-helpers.ts"],"sourcesContent":["/**\n * Media buy response helpers that eliminate common implementation traps.\n *\n * These helpers encode protocol rules (status→valid_actions mapping,\n * required cancellation metadata, initial revision numbers) so agent\n * builders get the right shape by default.\n */\n\nimport type { MediaBuyStatus, CanceledBy, CreateMediaBuySuccess, Package } from '../types/core.generated';\n\n/**\n * Actions a buyer can perform on a media buy.\n * Derived from the generated schema to stay in sync automatically.\n */\nexport type ValidAction = NonNullable<CreateMediaBuySuccess['valid_actions']>[number];\n\n/**\n * Returns the default set of valid buyer actions for a given media buy status.\n *\n * Terminal statuses (completed, rejected, canceled) return an empty array.\n * Active statuses return the full set of actions; paused restricts to\n * resume, cancel, and budget/date updates.\n *\n * Both pending statuses allow full modification — the protocol permits\n * restructuring a buy (packages, budget, dates) while awaiting creatives\n * or start date.\n *\n * Sellers with restricted capabilities can filter the result:\n * ```typescript\n * const actions = validActionsForStatus('active')\n * .filter(a => a !== 'sync_creatives'); // no creative management\n * ```\n */\nexport function validActionsForStatus(status: MediaBuyStatus): ValidAction[] {\n switch (status) {\n case 'pending_creatives':\n case 'pending_start':\n return ['cancel', 'update_budget', 'update_dates', 'update_packages', 'add_packages', 'sync_creatives'];\n case 'active':\n return ['pause', 'cancel', 'update_budget', 'update_dates', 'update_packages', 'add_packages', 'sync_creatives'];\n case 'paused':\n return ['resume', 'cancel', 'update_budget', 'update_dates'];\n case 'completed':\n case 'rejected':\n case 'canceled':\n return [];\n }\n}\n\n/**\n * Input for cancelMediaBuyResponse(). Requires the fields that agent builders\n * commonly forget — canceled_by and revision are mandatory,\n * canceled_at defaults to now.\n */\nexport interface CancelMediaBuyInput {\n media_buy_id: string;\n canceled_by: CanceledBy;\n /** Current revision after the cancellation update. */\n revision: number;\n reason?: string;\n canceled_at?: string;\n affected_packages?: Package[];\n sandbox?: boolean;\n}\n"],"mappings":"AAiCO,SAAS,sBAAsB,QAAuC;AAC3E,UAAQ,QAAQ;AAAA,IACd,KAAK;AAAA,IACL,KAAK;AACH,aAAO,CAAC,UAAU,iBAAiB,gBAAgB,mBAAmB,gBAAgB,gBAAgB;AAAA,IACxG,KAAK;AACH,aAAO,CAAC,SAAS,UAAU,iBAAiB,gBAAgB,mBAAmB,gBAAgB,gBAAgB;AAAA,IACjH,KAAK;AACH,aAAO,CAAC,UAAU,UAAU,iBAAiB,cAAc;AAAA,IAC7D,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACH,aAAO,CAAC;AAAA,EACZ;AACF;","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 { scopedStore } from "./state-store.mjs";
|
|
8
2
|
const DEFAULT_MEDIA_BUY_STORE_COLLECTION = "media_buys_targeting";
|
|
9
3
|
function createMediaBuyStore(options) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/server/media-buy-store.ts"],"sourcesContent":["/**\n * Opinionated media-buy store that satisfies the seller's spec contract:\n * persist `packages[].targeting_overlay` from `create_media_buy`, echo it on\n * `get_media_buys`, and deep-merge updates without dropping prior\n * `property_list` / `collection_list` references.\n *\n * Per `schemas/cache/<v>/media-buy/get-media-buys-response.json` the seller\n * SHOULD echo persisted targeting; sellers claiming `property-lists` or\n * `collection-lists` MUST include the persisted references inside the\n * echoed `targeting_overlay`. Wiring this store is the framework-side\n * way to honor that contract without each adapter persisting + merging\n * by hand.\n *\n * Adopters opt in by passing `mediaBuyStore` to\n * `createAdcpServerFromPlatform`. Backed by any `AdcpStateStore` —\n * `InMemoryStateStore` for development, `PostgresStateStore` for\n * production.\n *\n * @example\n * ```ts\n * import {\n * createAdcpServerFromPlatform,\n * createMediaBuyStore,\n * InMemoryStateStore,\n * } from '@adcp/sdk/server';\n *\n * const stateStore = new InMemoryStateStore();\n *\n * createAdcpServerFromPlatform(platform, {\n * mediaBuyStore: createMediaBuyStore({ store: stateStore }),\n * });\n * ```\n */\n\nimport type { TargetingOverlay } from '../types/core.generated';\nimport type { AdcpStateStore } from './state-store';\nimport { scopedStore } from './state-store';\n\n/** Default state-store collection name. Adopters can override per-store. */\nexport const DEFAULT_MEDIA_BUY_STORE_COLLECTION = 'media_buys_targeting';\n\ninterface PersistedPackage {\n package_id: string;\n targeting_overlay: TargetingOverlay;\n}\n\ninterface PersistedRecord extends Record<string, unknown> {\n media_buy_id: string;\n packages: PersistedPackage[];\n}\n\n/**\n * Subset of `CreateMediaBuyRequest` the store cares about. Typed loosely\n * so the wrapper code in `from-platform.ts` doesn't have to upcast the\n * request to the full generated type just to thread it through.\n */\nexport interface CreateMediaBuyInputForStore {\n packages?: Array<{\n package_id?: string;\n buyer_ref?: string;\n targeting_overlay?: TargetingOverlay;\n }>;\n}\n\n/**\n * Subset of `CreateMediaBuyResponse` (the success arm) the store needs to\n * pin persisted-from-request packages to seller-assigned `package_id`s.\n */\nexport interface CreateMediaBuyResultForStore {\n media_buy_id: string;\n packages?: Array<{\n package_id?: string;\n buyer_ref?: string;\n targeting_overlay?: TargetingOverlay;\n }>;\n}\n\nexport interface UpdateMediaBuyInputForStore {\n packages?: Array<{\n package_id?: string;\n targeting_overlay?: TargetingOverlay | null;\n }>;\n new_packages?: Array<{\n package_id?: string;\n buyer_ref?: string;\n targeting_overlay?: TargetingOverlay;\n }>;\n}\n\n/**\n * Subset of `GetMediaBuysResponse` mirroring the fields the store reads\n * + writes. Echoing is non-mutating from the buyer's perspective: every\n * package the seller already returned with `targeting_overlay` is left\n * alone.\n */\nexport interface GetMediaBuysResultForStore {\n media_buys?: Array<{\n media_buy_id?: string;\n packages?: Array<{\n package_id?: string;\n targeting_overlay?: TargetingOverlay;\n }>;\n }>;\n}\n\nexport interface MediaBuyStore {\n /**\n * Persist `packages[].targeting_overlay` from a successful\n * `create_media_buy`. Joins the request's per-package targeting\n * overlay with the response's seller-assigned `package_id` (or\n * `buyer_ref` when the request used buyer-supplied refs).\n */\n persistFromCreate(\n accountId: string,\n request: CreateMediaBuyInputForStore,\n result: CreateMediaBuyResultForStore\n ): Promise<void>;\n\n /**\n * Apply an `update_media_buy` patch to the persisted record.\n *\n * Per-field merge semantics inside `targeting_overlay`:\n * - field omitted from the patch → keep prior value\n * - field present with a non-null value → replace\n * - field present and `null` → clear (drop the field)\n *\n * `new_packages` from the patch are persisted as fresh entries when\n * they declare `targeting_overlay`. Entries that omit it are\n * intentionally NOT tracked — this store is overlay-only, and a\n * later patch can still seed an overlay onto the package_id when\n * one becomes relevant.\n */\n mergeFromUpdate(accountId: string, mediaBuyId: string, patch: UpdateMediaBuyInputForStore): Promise<void>;\n\n /**\n * Fill in missing `packages[].targeting_overlay` on the seller's\n * `get_media_buys` response from the persisted store. **Mutates the\n * response in place** (and returns it for fluent chaining). Packages\n * the seller already echoed are left untouched.\n */\n backfill<T extends GetMediaBuysResultForStore>(accountId: string, result: T): Promise<T>;\n}\n\nexport interface CreateMediaBuyStoreOptions {\n /** Backing state store. Reuses your existing `InMemoryStateStore` / `PostgresStateStore`. */\n store: AdcpStateStore;\n /** Override the logical collection name. Defaults to {@link DEFAULT_MEDIA_BUY_STORE_COLLECTION}. */\n collection?: string;\n}\n\nexport function createMediaBuyStore(options: CreateMediaBuyStoreOptions): MediaBuyStore {\n const collection = options.collection ?? DEFAULT_MEDIA_BUY_STORE_COLLECTION;\n\n function viewFor(accountId: string): AdcpStateStore {\n return scopedStore(options.store, accountId);\n }\n\n async function loadRecord(accountId: string, mediaBuyId: string): Promise<PersistedRecord | null> {\n const view = viewFor(accountId);\n return view.get<PersistedRecord>(collection, mediaBuyId);\n }\n\n async function writeRecord(accountId: string, record: PersistedRecord): Promise<void> {\n const view = viewFor(accountId);\n await view.put(collection, record.media_buy_id, record);\n }\n\n return {\n async persistFromCreate(accountId, request, result) {\n const requestPackages = request.packages ?? [];\n const responsePackages = result.packages ?? [];\n if (requestPackages.length === 0 || !result.media_buy_id) return;\n\n const persistedPackages: PersistedPackage[] = [];\n for (let i = 0; i < requestPackages.length; i++) {\n const reqPkg = requestPackages[i];\n if (!reqPkg?.targeting_overlay) continue;\n\n // Resolve the seller's assigned package_id. Prefer matching by\n // buyer_ref (deterministic across reorderings); fall back to\n // positional alignment which is the wire convention when the\n // request did not supply buyer refs.\n const buyerRef = reqPkg.buyer_ref;\n const matchedByRef =\n buyerRef && buyerRef.length > 0 ? responsePackages.find(p => p?.buyer_ref === buyerRef) : undefined;\n const respPkg = matchedByRef ?? responsePackages[i];\n const packageId = respPkg?.package_id;\n if (!packageId) continue;\n\n persistedPackages.push({\n package_id: packageId,\n targeting_overlay: respPkg?.targeting_overlay ?? reqPkg.targeting_overlay,\n });\n }\n\n if (persistedPackages.length === 0) return;\n await writeRecord(accountId, {\n media_buy_id: result.media_buy_id,\n packages: persistedPackages,\n });\n },\n\n async mergeFromUpdate(accountId, mediaBuyId, patch) {\n const prior = (await loadRecord(accountId, mediaBuyId)) ?? {\n media_buy_id: mediaBuyId,\n packages: [],\n };\n\n const byId = new Map(prior.packages.map(p => [p.package_id, p.targeting_overlay]));\n\n for (const pkg of patch.packages ?? []) {\n const packageId = pkg?.package_id;\n if (!packageId) continue;\n // `'targeting_overlay' in pkg` distinguishes \"patch did not mention\n // overlay\" (keep prior) from \"patch sent null/empty overlay\"\n // (process the clear). With the wire-shape coming through JSON\n // parse, omitted fields are absent from the object entirely.\n if (!('targeting_overlay' in pkg)) continue;\n const incoming = pkg.targeting_overlay;\n if (incoming === null) {\n byId.delete(packageId);\n continue;\n }\n if (incoming === undefined) continue;\n const priorOverlay = byId.get(packageId);\n byId.set(packageId, mergeOverlay(priorOverlay, incoming));\n }\n\n for (const pkg of patch.new_packages ?? []) {\n if (!pkg?.targeting_overlay || !pkg.package_id) continue;\n byId.set(pkg.package_id, pkg.targeting_overlay);\n }\n\n await writeRecord(accountId, {\n media_buy_id: mediaBuyId,\n packages: Array.from(byId.entries()).map(([package_id, targeting_overlay]) => ({\n package_id,\n targeting_overlay,\n })),\n });\n },\n\n async backfill(accountId, result) {\n const buys = result.media_buys;\n if (!buys || buys.length === 0) return result;\n for (const buy of buys) {\n if (!buy?.media_buy_id || !buy.packages) continue;\n const record = await loadRecord(accountId, buy.media_buy_id);\n if (!record) continue;\n const overlayById = new Map(record.packages.map(p => [p.package_id, p.targeting_overlay]));\n for (const pkg of buy.packages) {\n if (!pkg?.package_id || pkg.targeting_overlay !== undefined) continue;\n const persisted = overlayById.get(pkg.package_id);\n if (persisted) pkg.targeting_overlay = persisted;\n }\n }\n return result;\n },\n };\n}\n\n/**\n * Per-key merge of an incoming `TargetingOverlay` patch against the prior\n * persisted overlay. Each key the patch sets to `null` is dropped; each\n * key the patch sets to a value replaces the prior; keys absent from the\n * patch are preserved.\n *\n * The merge is one level deep — `property_list` / `collection_list` are\n * reference objects keyed by `list_id`, so a \"partial\" property-list\n * update is meaningless and a top-level replace is the right semantics.\n */\nfunction mergeOverlay(prior: TargetingOverlay | undefined, patch: TargetingOverlay): TargetingOverlay {\n const merged: Record<string, unknown> = { ...(prior ?? {}) };\n for (const [key, value] of Object.entries(patch)) {\n if (value === null) {\n delete merged[key];\n } else if (value !== undefined) {\n merged[key] = value;\n }\n }\n return merged as TargetingOverlay;\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/server/media-buy-store.ts"],"sourcesContent":["/**\n * Opinionated media-buy store that satisfies the seller's spec contract:\n * persist `packages[].targeting_overlay` from `create_media_buy`, echo it on\n * `get_media_buys`, and deep-merge updates without dropping prior\n * `property_list` / `collection_list` references.\n *\n * Per `schemas/cache/<v>/media-buy/get-media-buys-response.json` the seller\n * SHOULD echo persisted targeting; sellers claiming `property-lists` or\n * `collection-lists` MUST include the persisted references inside the\n * echoed `targeting_overlay`. Wiring this store is the framework-side\n * way to honor that contract without each adapter persisting + merging\n * by hand.\n *\n * Adopters opt in by passing `mediaBuyStore` to\n * `createAdcpServerFromPlatform`. Backed by any `AdcpStateStore` —\n * `InMemoryStateStore` for development, `PostgresStateStore` for\n * production.\n *\n * @example\n * ```ts\n * import {\n * createAdcpServerFromPlatform,\n * createMediaBuyStore,\n * InMemoryStateStore,\n * } from '@adcp/sdk/server';\n *\n * const stateStore = new InMemoryStateStore();\n *\n * createAdcpServerFromPlatform(platform, {\n * mediaBuyStore: createMediaBuyStore({ store: stateStore }),\n * });\n * ```\n */\n\nimport type { TargetingOverlay } from '../types/core.generated';\nimport type { AdcpStateStore } from './state-store';\nimport { scopedStore } from './state-store';\n\n/** Default state-store collection name. Adopters can override per-store. */\nexport const DEFAULT_MEDIA_BUY_STORE_COLLECTION = 'media_buys_targeting';\n\ninterface PersistedPackage {\n package_id: string;\n targeting_overlay: TargetingOverlay;\n}\n\ninterface PersistedRecord extends Record<string, unknown> {\n media_buy_id: string;\n packages: PersistedPackage[];\n}\n\n/**\n * Subset of `CreateMediaBuyRequest` the store cares about. Typed loosely\n * so the wrapper code in `from-platform.ts` doesn't have to upcast the\n * request to the full generated type just to thread it through.\n */\nexport interface CreateMediaBuyInputForStore {\n packages?: Array<{\n package_id?: string;\n buyer_ref?: string;\n targeting_overlay?: TargetingOverlay;\n }>;\n}\n\n/**\n * Subset of `CreateMediaBuyResponse` (the success arm) the store needs to\n * pin persisted-from-request packages to seller-assigned `package_id`s.\n */\nexport interface CreateMediaBuyResultForStore {\n media_buy_id: string;\n packages?: Array<{\n package_id?: string;\n buyer_ref?: string;\n targeting_overlay?: TargetingOverlay;\n }>;\n}\n\nexport interface UpdateMediaBuyInputForStore {\n packages?: Array<{\n package_id?: string;\n targeting_overlay?: TargetingOverlay | null;\n }>;\n new_packages?: Array<{\n package_id?: string;\n buyer_ref?: string;\n targeting_overlay?: TargetingOverlay;\n }>;\n}\n\n/**\n * Subset of `GetMediaBuysResponse` mirroring the fields the store reads\n * + writes. Echoing is non-mutating from the buyer's perspective: every\n * package the seller already returned with `targeting_overlay` is left\n * alone.\n */\nexport interface GetMediaBuysResultForStore {\n media_buys?: Array<{\n media_buy_id?: string;\n packages?: Array<{\n package_id?: string;\n targeting_overlay?: TargetingOverlay;\n }>;\n }>;\n}\n\nexport interface MediaBuyStore {\n /**\n * Persist `packages[].targeting_overlay` from a successful\n * `create_media_buy`. Joins the request's per-package targeting\n * overlay with the response's seller-assigned `package_id` (or\n * `buyer_ref` when the request used buyer-supplied refs).\n */\n persistFromCreate(\n accountId: string,\n request: CreateMediaBuyInputForStore,\n result: CreateMediaBuyResultForStore\n ): Promise<void>;\n\n /**\n * Apply an `update_media_buy` patch to the persisted record.\n *\n * Per-field merge semantics inside `targeting_overlay`:\n * - field omitted from the patch → keep prior value\n * - field present with a non-null value → replace\n * - field present and `null` → clear (drop the field)\n *\n * `new_packages` from the patch are persisted as fresh entries when\n * they declare `targeting_overlay`. Entries that omit it are\n * intentionally NOT tracked — this store is overlay-only, and a\n * later patch can still seed an overlay onto the package_id when\n * one becomes relevant.\n */\n mergeFromUpdate(accountId: string, mediaBuyId: string, patch: UpdateMediaBuyInputForStore): Promise<void>;\n\n /**\n * Fill in missing `packages[].targeting_overlay` on the seller's\n * `get_media_buys` response from the persisted store. **Mutates the\n * response in place** (and returns it for fluent chaining). Packages\n * the seller already echoed are left untouched.\n */\n backfill<T extends GetMediaBuysResultForStore>(accountId: string, result: T): Promise<T>;\n}\n\nexport interface CreateMediaBuyStoreOptions {\n /** Backing state store. Reuses your existing `InMemoryStateStore` / `PostgresStateStore`. */\n store: AdcpStateStore;\n /** Override the logical collection name. Defaults to {@link DEFAULT_MEDIA_BUY_STORE_COLLECTION}. */\n collection?: string;\n}\n\nexport function createMediaBuyStore(options: CreateMediaBuyStoreOptions): MediaBuyStore {\n const collection = options.collection ?? DEFAULT_MEDIA_BUY_STORE_COLLECTION;\n\n function viewFor(accountId: string): AdcpStateStore {\n return scopedStore(options.store, accountId);\n }\n\n async function loadRecord(accountId: string, mediaBuyId: string): Promise<PersistedRecord | null> {\n const view = viewFor(accountId);\n return view.get<PersistedRecord>(collection, mediaBuyId);\n }\n\n async function writeRecord(accountId: string, record: PersistedRecord): Promise<void> {\n const view = viewFor(accountId);\n await view.put(collection, record.media_buy_id, record);\n }\n\n return {\n async persistFromCreate(accountId, request, result) {\n const requestPackages = request.packages ?? [];\n const responsePackages = result.packages ?? [];\n if (requestPackages.length === 0 || !result.media_buy_id) return;\n\n const persistedPackages: PersistedPackage[] = [];\n for (let i = 0; i < requestPackages.length; i++) {\n const reqPkg = requestPackages[i];\n if (!reqPkg?.targeting_overlay) continue;\n\n // Resolve the seller's assigned package_id. Prefer matching by\n // buyer_ref (deterministic across reorderings); fall back to\n // positional alignment which is the wire convention when the\n // request did not supply buyer refs.\n const buyerRef = reqPkg.buyer_ref;\n const matchedByRef =\n buyerRef && buyerRef.length > 0 ? responsePackages.find(p => p?.buyer_ref === buyerRef) : undefined;\n const respPkg = matchedByRef ?? responsePackages[i];\n const packageId = respPkg?.package_id;\n if (!packageId) continue;\n\n persistedPackages.push({\n package_id: packageId,\n targeting_overlay: respPkg?.targeting_overlay ?? reqPkg.targeting_overlay,\n });\n }\n\n if (persistedPackages.length === 0) return;\n await writeRecord(accountId, {\n media_buy_id: result.media_buy_id,\n packages: persistedPackages,\n });\n },\n\n async mergeFromUpdate(accountId, mediaBuyId, patch) {\n const prior = (await loadRecord(accountId, mediaBuyId)) ?? {\n media_buy_id: mediaBuyId,\n packages: [],\n };\n\n const byId = new Map(prior.packages.map(p => [p.package_id, p.targeting_overlay]));\n\n for (const pkg of patch.packages ?? []) {\n const packageId = pkg?.package_id;\n if (!packageId) continue;\n // `'targeting_overlay' in pkg` distinguishes \"patch did not mention\n // overlay\" (keep prior) from \"patch sent null/empty overlay\"\n // (process the clear). With the wire-shape coming through JSON\n // parse, omitted fields are absent from the object entirely.\n if (!('targeting_overlay' in pkg)) continue;\n const incoming = pkg.targeting_overlay;\n if (incoming === null) {\n byId.delete(packageId);\n continue;\n }\n if (incoming === undefined) continue;\n const priorOverlay = byId.get(packageId);\n byId.set(packageId, mergeOverlay(priorOverlay, incoming));\n }\n\n for (const pkg of patch.new_packages ?? []) {\n if (!pkg?.targeting_overlay || !pkg.package_id) continue;\n byId.set(pkg.package_id, pkg.targeting_overlay);\n }\n\n await writeRecord(accountId, {\n media_buy_id: mediaBuyId,\n packages: Array.from(byId.entries()).map(([package_id, targeting_overlay]) => ({\n package_id,\n targeting_overlay,\n })),\n });\n },\n\n async backfill(accountId, result) {\n const buys = result.media_buys;\n if (!buys || buys.length === 0) return result;\n for (const buy of buys) {\n if (!buy?.media_buy_id || !buy.packages) continue;\n const record = await loadRecord(accountId, buy.media_buy_id);\n if (!record) continue;\n const overlayById = new Map(record.packages.map(p => [p.package_id, p.targeting_overlay]));\n for (const pkg of buy.packages) {\n if (!pkg?.package_id || pkg.targeting_overlay !== undefined) continue;\n const persisted = overlayById.get(pkg.package_id);\n if (persisted) pkg.targeting_overlay = persisted;\n }\n }\n return result;\n },\n };\n}\n\n/**\n * Per-key merge of an incoming `TargetingOverlay` patch against the prior\n * persisted overlay. Each key the patch sets to `null` is dropped; each\n * key the patch sets to a value replaces the prior; keys absent from the\n * patch are preserved.\n *\n * The merge is one level deep — `property_list` / `collection_list` are\n * reference objects keyed by `list_id`, so a \"partial\" property-list\n * update is meaningless and a top-level replace is the right semantics.\n */\nfunction mergeOverlay(prior: TargetingOverlay | undefined, patch: TargetingOverlay): TargetingOverlay {\n const merged: Record<string, unknown> = { ...(prior ?? {}) };\n for (const [key, value] of Object.entries(patch)) {\n if (value === null) {\n delete merged[key];\n } else if (value !== undefined) {\n merged[key] = value;\n }\n }\n return merged as TargetingOverlay;\n}\n"],"mappings":"AAoCA,SAAS,mBAAmB;AAGrB,MAAM,qCAAqC;AA+G3C,SAAS,oBAAoB,SAAoD;AACtF,QAAM,aAAa,QAAQ,cAAc;AAEzC,WAAS,QAAQ,WAAmC;AAClD,WAAO,YAAY,QAAQ,OAAO,SAAS;AAAA,EAC7C;AAEA,iBAAe,WAAW,WAAmB,YAAqD;AAChG,UAAM,OAAO,QAAQ,SAAS;AAC9B,WAAO,KAAK,IAAqB,YAAY,UAAU;AAAA,EACzD;AAEA,iBAAe,YAAY,WAAmB,QAAwC;AACpF,UAAM,OAAO,QAAQ,SAAS;AAC9B,UAAM,KAAK,IAAI,YAAY,OAAO,cAAc,MAAM;AAAA,EACxD;AAEA,SAAO;AAAA,IACL,MAAM,kBAAkB,WAAW,SAAS,QAAQ;AAClD,YAAM,kBAAkB,QAAQ,YAAY,CAAC;AAC7C,YAAM,mBAAmB,OAAO,YAAY,CAAC;AAC7C,UAAI,gBAAgB,WAAW,KAAK,CAAC,OAAO,aAAc;AAE1D,YAAM,oBAAwC,CAAC;AAC/C,eAAS,IAAI,GAAG,IAAI,gBAAgB,QAAQ,KAAK;AAC/C,cAAM,SAAS,gBAAgB,CAAC;AAChC,YAAI,CAAC,QAAQ,kBAAmB;AAMhC,cAAM,WAAW,OAAO;AACxB,cAAM,eACJ,YAAY,SAAS,SAAS,IAAI,iBAAiB,KAAK,OAAK,GAAG,cAAc,QAAQ,IAAI;AAC5F,cAAM,UAAU,gBAAgB,iBAAiB,CAAC;AAClD,cAAM,YAAY,SAAS;AAC3B,YAAI,CAAC,UAAW;AAEhB,0BAAkB,KAAK;AAAA,UACrB,YAAY;AAAA,UACZ,mBAAmB,SAAS,qBAAqB,OAAO;AAAA,QAC1D,CAAC;AAAA,MACH;AAEA,UAAI,kBAAkB,WAAW,EAAG;AACpC,YAAM,YAAY,WAAW;AAAA,QAC3B,cAAc,OAAO;AAAA,QACrB,UAAU;AAAA,MACZ,CAAC;AAAA,IACH;AAAA,IAEA,MAAM,gBAAgB,WAAW,YAAY,OAAO;AAClD,YAAM,QAAS,MAAM,WAAW,WAAW,UAAU,KAAM;AAAA,QACzD,cAAc;AAAA,QACd,UAAU,CAAC;AAAA,MACb;AAEA,YAAM,OAAO,IAAI,IAAI,MAAM,SAAS,IAAI,OAAK,CAAC,EAAE,YAAY,EAAE,iBAAiB,CAAC,CAAC;AAEjF,iBAAW,OAAO,MAAM,YAAY,CAAC,GAAG;AACtC,cAAM,YAAY,KAAK;AACvB,YAAI,CAAC,UAAW;AAKhB,YAAI,EAAE,uBAAuB,KAAM;AACnC,cAAM,WAAW,IAAI;AACrB,YAAI,aAAa,MAAM;AACrB,eAAK,OAAO,SAAS;AACrB;AAAA,QACF;AACA,YAAI,aAAa,OAAW;AAC5B,cAAM,eAAe,KAAK,IAAI,SAAS;AACvC,aAAK,IAAI,WAAW,aAAa,cAAc,QAAQ,CAAC;AAAA,MAC1D;AAEA,iBAAW,OAAO,MAAM,gBAAgB,CAAC,GAAG;AAC1C,YAAI,CAAC,KAAK,qBAAqB,CAAC,IAAI,WAAY;AAChD,aAAK,IAAI,IAAI,YAAY,IAAI,iBAAiB;AAAA,MAChD;AAEA,YAAM,YAAY,WAAW;AAAA,QAC3B,cAAc;AAAA,QACd,UAAU,MAAM,KAAK,KAAK,QAAQ,CAAC,EAAE,IAAI,CAAC,CAAC,YAAY,iBAAiB,OAAO;AAAA,UAC7E;AAAA,UACA;AAAA,QACF,EAAE;AAAA,MACJ,CAAC;AAAA,IACH;AAAA,IAEA,MAAM,SAAS,WAAW,QAAQ;AAChC,YAAM,OAAO,OAAO;AACpB,UAAI,CAAC,QAAQ,KAAK,WAAW,EAAG,QAAO;AACvC,iBAAW,OAAO,MAAM;AACtB,YAAI,CAAC,KAAK,gBAAgB,CAAC,IAAI,SAAU;AACzC,cAAM,SAAS,MAAM,WAAW,WAAW,IAAI,YAAY;AAC3D,YAAI,CAAC,OAAQ;AACb,cAAM,cAAc,IAAI,IAAI,OAAO,SAAS,IAAI,OAAK,CAAC,EAAE,YAAY,EAAE,iBAAiB,CAAC,CAAC;AACzF,mBAAW,OAAO,IAAI,UAAU;AAC9B,cAAI,CAAC,KAAK,cAAc,IAAI,sBAAsB,OAAW;AAC7D,gBAAM,YAAY,YAAY,IAAI,IAAI,UAAU;AAChD,cAAI,UAAW,KAAI,oBAAoB;AAAA,QACzC;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAAA,EACF;AACF;AAYA,SAAS,aAAa,OAAqC,OAA2C;AACpG,QAAM,SAAkC,EAAE,GAAI,SAAS,CAAC,EAAG;AAC3D,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,KAAK,GAAG;AAChD,QAAI,UAAU,MAAM;AAClB,aAAO,OAAO,GAAG;AAAA,IACnB,WAAW,UAAU,QAAW;AAC9B,aAAO,GAAG,IAAI;AAAA,IAChB;AAAA,EACF;AACA,SAAO;AACT;","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
|
function normalizeError(input) {
|
|
8
2
|
if (input == null) {
|
|
9
3
|
return { code: "GENERIC_ERROR", message: "Unknown error", recovery: "terminal" };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/server/normalize-errors.ts"],"sourcesContent":["/**\n * Wire-shape normalizer for the AdCP `Error` row used in tool responses\n * carrying per-row failures (`sync_creatives`, `sync_audiences`,\n * `sync_accounts`, `report_usage`, `acquire_rights` error arm).\n *\n * Adopters return errors in whichever shape their codebase already\n * speaks: bare strings, native `Error` instances, plain\n * `{ code, message }` objects, `AdcpError` instances thrown internally,\n * upstream-platform error objects with vendor-specific fields. This\n * helper coerces all of those into the canonical wire `Error` shape\n * (`code`, `message`, optional `field` / `suggestion` / `retry_after`\n * / `details` / `recovery`) so the framework's response validator\n * accepts the projected response without forcing every adopter to\n * hand-shape the wire envelope.\n *\n * @see AdCP wire spec: `core/error.json`\n *\n * @public\n */\n\nimport type { ErrorCode } from './decisioning/async-outcome';\n\n/**\n * Canonical wire `Error` row. Mirrors `core/error.json` —\n * `code` + `message` are required; everything else optional.\n *\n * Differs from the SDK's `AdcpStructuredError` in only one detail —\n * `recovery` is optional here (per the wire spec) but required on\n * `AdcpStructuredError` (the SDK's stricter shape for thrown errors).\n *\n * @public\n */\nexport interface NormalizedError {\n code: string;\n message: string;\n field?: string;\n suggestion?: string;\n retry_after?: number;\n details?: Record<string, unknown>;\n recovery?: 'transient' | 'correctable' | 'terminal';\n}\n\n/**\n * Coerce a single adopter-returned error value into the canonical\n * wire `Error` shape. Handles:\n *\n * - `string` → `{ code: 'GENERIC_ERROR', message: <input>, recovery: 'terminal' }`\n * - `Error` instance → `{ code: 'GENERIC_ERROR', message: err.message, recovery: 'terminal' }`\n * - `AdcpError` instance → projected to wire shape using its `code` /\n * `recovery` / `field` / `suggestion` / `retry_after` / `details`\n * - Plain object with `code` + `message` → fields whitelisted to the\n * wire shape; vendor-specific fields dropped (use `details` for\n * vendor extensions)\n * - Any other object → `{ code: 'GENERIC_ERROR', message: <safeStringify>, recovery: 'terminal' }`\n * - `null` / `undefined` → `{ code: 'GENERIC_ERROR', message: 'Unknown error', recovery: 'terminal' }`\n *\n * The `details` field, when present on the input, is shallow-copied\n * and SHOULD be passed through {@link pickSafeDetails} on the\n * adopter side before reaching this helper. `normalizeError` does NOT\n * sanitize `details` — it's the adopter's job to ensure no\n * credentials / PII / stack traces land there.\n *\n * @public\n */\nexport function normalizeError(input: unknown): NormalizedError {\n if (input == null) {\n return { code: 'GENERIC_ERROR', message: 'Unknown error', recovery: 'terminal' };\n }\n if (typeof input === 'string') {\n return { code: 'GENERIC_ERROR', message: input, recovery: 'terminal' };\n }\n // AdcpError-shaped (has `code`, optional structured fields). Detected\n // structurally rather than via instanceof so framework code in different\n // module realms (test fixtures, server-side renderers) still gets the\n // typed projection.\n if (typeof input === 'object' && 'code' in input) {\n const obj = input as Record<string, unknown>;\n const code = typeof obj.code === 'string' && obj.code.length > 0 ? obj.code : 'GENERIC_ERROR';\n const message = typeof obj.message === 'string' && obj.message.length > 0 ? obj.message : code; // fall back to code when message missing — never empty-string\n const out: NormalizedError = { code, message };\n if (typeof obj.field === 'string') out.field = obj.field;\n if (typeof obj.suggestion === 'string') out.suggestion = obj.suggestion;\n if (typeof obj.retry_after === 'number' && Number.isFinite(obj.retry_after)) {\n // Wire spec clamps retry_after to [1, 3600]\n out.retry_after = Math.max(1, Math.min(3600, Math.floor(obj.retry_after)));\n }\n if (obj.recovery === 'transient' || obj.recovery === 'correctable' || obj.recovery === 'terminal') {\n out.recovery = obj.recovery;\n }\n if (typeof obj.details === 'object' && obj.details !== null) {\n // Shallow copy to break aliasing; adopter is responsible for sanitizing\n // via pickSafeDetails before reaching here.\n out.details = { ...(obj.details as Record<string, unknown>) };\n }\n return out;\n }\n // Native Error (no `code` field, has `message`).\n if (input instanceof Error) {\n return { code: 'GENERIC_ERROR', message: input.message || 'Unknown error', recovery: 'terminal' };\n }\n // Last-resort: stringify whatever was passed.\n return {\n code: 'GENERIC_ERROR',\n message: safeStringify(input),\n recovery: 'terminal',\n };\n}\n\n/**\n * Coerce an adopter-returned errors collection into a wire-shaped\n * `Error[]`. Accepts `undefined` / `null` (returns `undefined`),\n * a single error value (wraps in array), or an array of error values\n * (each normalized via {@link normalizeError}).\n *\n * Empty arrays and arrays where every entry normalizes to the same\n * sentinel \"Unknown error\" are still emitted — the framework lets the\n * wire validator decide whether `errors: []` is acceptable for the\n * specific tool response (sync_creatives accepts empty;\n * sync_creatives_error requires non-empty).\n *\n * Use at the v6 wire-projection seam:\n *\n * ```ts\n * import { normalizeErrors } from '@adcp/client/server';\n *\n * const projected = adopterRows.map(row => ({\n * ...row,\n * errors: normalizeErrors(row.errors),\n * }));\n * ```\n *\n * @public\n */\nexport function normalizeErrors(input: unknown): NormalizedError[] | undefined {\n if (input == null) return undefined;\n if (Array.isArray(input)) {\n return input.map(normalizeError);\n }\n return [normalizeError(input)];\n}\n\n/**\n * Coerce an `ErrorCode`-typed input back to the underlying string —\n * useful when adopters pass an enum-narrowed code into a place that\n * expects the wire string. Pure-function alias for clarity at call\n * sites; the runtime is identity.\n *\n * @internal\n */\nexport function _coerceErrorCode(code: ErrorCode | string): string {\n return code;\n}\n\n/** Best-effort `JSON.stringify` that swallows circular-reference errors. */\nfunction safeStringify(input: unknown): string {\n try {\n const s = JSON.stringify(input);\n return typeof s === 'string' ? s : String(input);\n } catch {\n return '[unserializable error]';\n }\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/server/normalize-errors.ts"],"sourcesContent":["/**\n * Wire-shape normalizer for the AdCP `Error` row used in tool responses\n * carrying per-row failures (`sync_creatives`, `sync_audiences`,\n * `sync_accounts`, `report_usage`, `acquire_rights` error arm).\n *\n * Adopters return errors in whichever shape their codebase already\n * speaks: bare strings, native `Error` instances, plain\n * `{ code, message }` objects, `AdcpError` instances thrown internally,\n * upstream-platform error objects with vendor-specific fields. This\n * helper coerces all of those into the canonical wire `Error` shape\n * (`code`, `message`, optional `field` / `suggestion` / `retry_after`\n * / `details` / `recovery`) so the framework's response validator\n * accepts the projected response without forcing every adopter to\n * hand-shape the wire envelope.\n *\n * @see AdCP wire spec: `core/error.json`\n *\n * @public\n */\n\nimport type { ErrorCode } from './decisioning/async-outcome';\n\n/**\n * Canonical wire `Error` row. Mirrors `core/error.json` —\n * `code` + `message` are required; everything else optional.\n *\n * Differs from the SDK's `AdcpStructuredError` in only one detail —\n * `recovery` is optional here (per the wire spec) but required on\n * `AdcpStructuredError` (the SDK's stricter shape for thrown errors).\n *\n * @public\n */\nexport interface NormalizedError {\n code: string;\n message: string;\n field?: string;\n suggestion?: string;\n retry_after?: number;\n details?: Record<string, unknown>;\n recovery?: 'transient' | 'correctable' | 'terminal';\n}\n\n/**\n * Coerce a single adopter-returned error value into the canonical\n * wire `Error` shape. Handles:\n *\n * - `string` → `{ code: 'GENERIC_ERROR', message: <input>, recovery: 'terminal' }`\n * - `Error` instance → `{ code: 'GENERIC_ERROR', message: err.message, recovery: 'terminal' }`\n * - `AdcpError` instance → projected to wire shape using its `code` /\n * `recovery` / `field` / `suggestion` / `retry_after` / `details`\n * - Plain object with `code` + `message` → fields whitelisted to the\n * wire shape; vendor-specific fields dropped (use `details` for\n * vendor extensions)\n * - Any other object → `{ code: 'GENERIC_ERROR', message: <safeStringify>, recovery: 'terminal' }`\n * - `null` / `undefined` → `{ code: 'GENERIC_ERROR', message: 'Unknown error', recovery: 'terminal' }`\n *\n * The `details` field, when present on the input, is shallow-copied\n * and SHOULD be passed through {@link pickSafeDetails} on the\n * adopter side before reaching this helper. `normalizeError` does NOT\n * sanitize `details` — it's the adopter's job to ensure no\n * credentials / PII / stack traces land there.\n *\n * @public\n */\nexport function normalizeError(input: unknown): NormalizedError {\n if (input == null) {\n return { code: 'GENERIC_ERROR', message: 'Unknown error', recovery: 'terminal' };\n }\n if (typeof input === 'string') {\n return { code: 'GENERIC_ERROR', message: input, recovery: 'terminal' };\n }\n // AdcpError-shaped (has `code`, optional structured fields). Detected\n // structurally rather than via instanceof so framework code in different\n // module realms (test fixtures, server-side renderers) still gets the\n // typed projection.\n if (typeof input === 'object' && 'code' in input) {\n const obj = input as Record<string, unknown>;\n const code = typeof obj.code === 'string' && obj.code.length > 0 ? obj.code : 'GENERIC_ERROR';\n const message = typeof obj.message === 'string' && obj.message.length > 0 ? obj.message : code; // fall back to code when message missing — never empty-string\n const out: NormalizedError = { code, message };\n if (typeof obj.field === 'string') out.field = obj.field;\n if (typeof obj.suggestion === 'string') out.suggestion = obj.suggestion;\n if (typeof obj.retry_after === 'number' && Number.isFinite(obj.retry_after)) {\n // Wire spec clamps retry_after to [1, 3600]\n out.retry_after = Math.max(1, Math.min(3600, Math.floor(obj.retry_after)));\n }\n if (obj.recovery === 'transient' || obj.recovery === 'correctable' || obj.recovery === 'terminal') {\n out.recovery = obj.recovery;\n }\n if (typeof obj.details === 'object' && obj.details !== null) {\n // Shallow copy to break aliasing; adopter is responsible for sanitizing\n // via pickSafeDetails before reaching here.\n out.details = { ...(obj.details as Record<string, unknown>) };\n }\n return out;\n }\n // Native Error (no `code` field, has `message`).\n if (input instanceof Error) {\n return { code: 'GENERIC_ERROR', message: input.message || 'Unknown error', recovery: 'terminal' };\n }\n // Last-resort: stringify whatever was passed.\n return {\n code: 'GENERIC_ERROR',\n message: safeStringify(input),\n recovery: 'terminal',\n };\n}\n\n/**\n * Coerce an adopter-returned errors collection into a wire-shaped\n * `Error[]`. Accepts `undefined` / `null` (returns `undefined`),\n * a single error value (wraps in array), or an array of error values\n * (each normalized via {@link normalizeError}).\n *\n * Empty arrays and arrays where every entry normalizes to the same\n * sentinel \"Unknown error\" are still emitted — the framework lets the\n * wire validator decide whether `errors: []` is acceptable for the\n * specific tool response (sync_creatives accepts empty;\n * sync_creatives_error requires non-empty).\n *\n * Use at the v6 wire-projection seam:\n *\n * ```ts\n * import { normalizeErrors } from '@adcp/client/server';\n *\n * const projected = adopterRows.map(row => ({\n * ...row,\n * errors: normalizeErrors(row.errors),\n * }));\n * ```\n *\n * @public\n */\nexport function normalizeErrors(input: unknown): NormalizedError[] | undefined {\n if (input == null) return undefined;\n if (Array.isArray(input)) {\n return input.map(normalizeError);\n }\n return [normalizeError(input)];\n}\n\n/**\n * Coerce an `ErrorCode`-typed input back to the underlying string —\n * useful when adopters pass an enum-narrowed code into a place that\n * expects the wire string. Pure-function alias for clarity at call\n * sites; the runtime is identity.\n *\n * @internal\n */\nexport function _coerceErrorCode(code: ErrorCode | string): string {\n return code;\n}\n\n/** Best-effort `JSON.stringify` that swallows circular-reference errors. */\nfunction safeStringify(input: unknown): string {\n try {\n const s = JSON.stringify(input);\n return typeof s === 'string' ? s : String(input);\n } catch {\n return '[unserializable error]';\n }\n}\n"],"mappings":"AAgEO,SAAS,eAAe,OAAiC;AAC9D,MAAI,SAAS,MAAM;AACjB,WAAO,EAAE,MAAM,iBAAiB,SAAS,iBAAiB,UAAU,WAAW;AAAA,EACjF;AACA,MAAI,OAAO,UAAU,UAAU;AAC7B,WAAO,EAAE,MAAM,iBAAiB,SAAS,OAAO,UAAU,WAAW;AAAA,EACvE;AAKA,MAAI,OAAO,UAAU,YAAY,UAAU,OAAO;AAChD,UAAM,MAAM;AACZ,UAAM,OAAO,OAAO,IAAI,SAAS,YAAY,IAAI,KAAK,SAAS,IAAI,IAAI,OAAO;AAC9E,UAAM,UAAU,OAAO,IAAI,YAAY,YAAY,IAAI,QAAQ,SAAS,IAAI,IAAI,UAAU;AAC1F,UAAM,MAAuB,EAAE,MAAM,QAAQ;AAC7C,QAAI,OAAO,IAAI,UAAU,SAAU,KAAI,QAAQ,IAAI;AACnD,QAAI,OAAO,IAAI,eAAe,SAAU,KAAI,aAAa,IAAI;AAC7D,QAAI,OAAO,IAAI,gBAAgB,YAAY,OAAO,SAAS,IAAI,WAAW,GAAG;AAE3E,UAAI,cAAc,KAAK,IAAI,GAAG,KAAK,IAAI,MAAM,KAAK,MAAM,IAAI,WAAW,CAAC,CAAC;AAAA,IAC3E;AACA,QAAI,IAAI,aAAa,eAAe,IAAI,aAAa,iBAAiB,IAAI,aAAa,YAAY;AACjG,UAAI,WAAW,IAAI;AAAA,IACrB;AACA,QAAI,OAAO,IAAI,YAAY,YAAY,IAAI,YAAY,MAAM;AAG3D,UAAI,UAAU,EAAE,GAAI,IAAI,QAAoC;AAAA,IAC9D;AACA,WAAO;AAAA,EACT;AAEA,MAAI,iBAAiB,OAAO;AAC1B,WAAO,EAAE,MAAM,iBAAiB,SAAS,MAAM,WAAW,iBAAiB,UAAU,WAAW;AAAA,EAClG;AAEA,SAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS,cAAc,KAAK;AAAA,IAC5B,UAAU;AAAA,EACZ;AACF;AA2BO,SAAS,gBAAgB,OAA+C;AAC7E,MAAI,SAAS,KAAM,QAAO;AAC1B,MAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,WAAO,MAAM,IAAI,cAAc;AAAA,EACjC;AACA,SAAO,CAAC,eAAe,KAAK,CAAC;AAC/B;AAUO,SAAS,iBAAiB,MAAkC;AACjE,SAAO;AACT;AAGA,SAAS,cAAc,OAAwB;AAC7C,MAAI;AACF,UAAM,IAAI,KAAK,UAAU,KAAK;AAC9B,WAAO,OAAO,MAAM,WAAW,IAAI,OAAO,KAAK;AAAA,EACjD,QAAQ;AACN,WAAO;AAAA,EACT;AACF;","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
|
function defineOperationalPlatform(ops) {
|
|
8
2
|
return ops;
|
|
9
3
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/server/operational-platform.ts"],"sourcesContent":["/**\n * `OperationalPlatform` — in-process operational contract.\n *\n * `DecisioningPlatform` covers buyer-facing MCP request dispatch:\n * `platform.sales.updateMediaBuy(req, ctx)` etc., where `ctx` is a\n * `RequestContext` built by the framework from `authInfo` via\n * `AccountStore.resolve`, threading `state`, `resolve`, `ctxMetadata`,\n * and `handoffToTask`.\n *\n * In-process consumers are different. The price-optimization poller,\n * audience-sync task poller, scheduled jobs, and the storefront\n * fan-out path do NOT have an MCP request to derive auth from. They\n * have a stored task with an access token (or, for fan-out, no token\n * — the storefront synthesizes one per upstream target). They cannot\n * honestly satisfy `RequestContext`. Every adopter doing operational\n * work would otherwise reinvent this seam.\n *\n * `OperationalPlatform` is the named contract for that seam. Five\n * methods covering the real operational surface:\n *\n * 1. `extractContext` — synthesize a per-call platform context from\n * a stored token (and optional request args, for fan-out callers).\n * The single CTX-METADATA-SAFETY boundary outside\n * `AccountStore.resolve`: anything touching credentials in an\n * in-process consumer flows through here.\n * 2. `updateMediaBuy` — required. Fan-out callers dispatch one of\n * these per upstream target.\n * 3. `getMediaBuyDelivery` — required. Pollers read delivery metrics\n * here.\n * 4. `pollAudienceStatuses` — optional. Audience-sync pollers only.\n * 5. `getProducts` — optional. Storefront bundle composition only;\n * server-side internal call, not buyer-facing dispatch.\n *\n * Naming the contract honestly — \"operational\" rather than \"adapter\"\n * — separates it from any v5 `PlatformAdapter` baggage and from\n * `DecisioningPlatform`'s MCP-request flow. Tests mock\n * `OperationalPlatform`, not the broader v6 interface.\n *\n * Errors: methods throw `AdcpError` for structured rejection, matching\n * `DecisioningPlatform`'s convention. Generic thrown `Error` /\n * `TypeError` propagate; callers catch and log per their needs.\n *\n * Status: 6.10. See adcontextprotocol/adcp-client#1530.\n *\n * @see DecisioningPlatform — buyer-facing MCP dispatch\n * @see docs/guides/CTX-METADATA-SAFETY.md — credential discipline\n * @public\n */\n\nimport type {\n GetMediaBuyDeliveryResponse,\n GetProductsResponse,\n UpdateMediaBuyRequest,\n UpdateMediaBuyResponse,\n} from '../types/tools.generated';\nimport type { RequireCacheScopeWhenProducts, ServerPayload } from '../types/server-payload';\nimport type { AudienceStatus } from './decisioning/specialisms/audiences';\n\n/**\n * Minimal context for in-process operational calls. Adopters extend\n * with platform-specific fields (advertiser id, sandbox mode, region,\n * etc.); the type parameter on `OperationalPlatform<TCtx>` carries\n * the extension through.\n *\n * `accessToken` is the only field shared across adopters: the rest of\n * the context shape is platform-internal. Pollers and scheduled jobs\n * that legitimately have no token (server-side internal scans) leave\n * it `undefined`.\n *\n * @example\n * ```ts\n * interface SnapOpCtx extends OperationalContext {\n * advertiserId: string;\n * sandbox: boolean;\n * }\n *\n * const snapOps = defineOperationalPlatform<SnapOpCtx>({\n * platformId: 'snap',\n * extractContext: async (args, sessionToken) => ({\n * accessToken: sessionToken,\n * advertiserId: String(args.advertiser_id ?? ''),\n * sandbox: Boolean(args.sandbox),\n * }),\n * // ...\n * });\n * ```\n */\nexport interface OperationalContext {\n /**\n * The access token used by upstream HTTP calls. `undefined` for\n * server-side internal scans that don't authenticate against a\n * specific tenant.\n */\n accessToken: string | undefined;\n}\n\n/**\n * In-process operational contract. Implementations dispatch to\n * upstream platform APIs from pollers, scheduled jobs, fan-out paths,\n * and other contexts that don't carry an MCP request.\n *\n * Type parameter `TCtx` extends {@link OperationalContext} to carry\n * platform-specific context fields through every method.\n */\nexport interface OperationalPlatform<TCtx extends OperationalContext = OperationalContext> {\n /**\n * Stable platform identifier matching `DecisioningPlatform`'s\n * registered name. Used by registries and routing layers to look up\n * the operational delegate by platform.\n */\n readonly platformId: string;\n\n /**\n * Synthesize an operational context from a stored token (and\n * optional request args for fan-out callers). The single\n * documented credential-synthesis path outside\n * `AccountStore.resolve` — so the only place adopters need\n * CTX-METADATA-SAFETY review on the operational side.\n *\n * Three call patterns this method serves:\n * - **Poller / scheduled job**: `args` is `{}`, `sessionToken` is\n * the stored token. Returns a context bound to that token.\n * - **Storefront fan-out**: `args` is the (scrubbed) buyer\n * request body, `sessionToken` is the storefront's master\n * credential. Returns a context for one upstream target.\n * - **Server-side internal scan**: `args` is `{}`, `sessionToken`\n * is `undefined`, `requireAuth` is `false`. Returns a\n * no-token context.\n *\n * @param args - Optional request args (storefront fan-out path)\n * @param sessionToken - Stored access token (poller path)\n * @param requireAuth - Throw `AuthMissingError` when no token is\n * available. Defaults to `true`.\n *\n * @remarks Post-migration the SDK will likely split this into\n * `synthesizeFromToken` / `synthesizeFromArgs` (see #1530 for the\n * follow-up). The combined signature today matches the v5\n * `PlatformAdapter.extractContext` shape so v5 adapters duck-type\n * satisfy this interface during migration without a wrapper.\n */\n extractContext(args: Record<string, unknown>, sessionToken?: string, requireAuth?: boolean): Promise<TCtx>;\n\n /**\n * Update a media buy upstream. Required because every operational\n * consumer assumes it — adapters that can't update media buys have\n * no business registering as operational.\n *\n * Throw `AdcpError` for structured rejection (`NOT_CANCELLABLE`,\n * `CONFLICT`, etc.). Generic thrown errors propagate to the caller.\n */\n updateMediaBuy(ctx: TCtx, request: UpdateMediaBuyRequest): Promise<ServerPayload<UpdateMediaBuyResponse>>;\n\n /**\n * Fetch delivery metrics for one or more media buys. Required for\n * the same reason as `updateMediaBuy`: every operational consumer\n * assumes it.\n *\n * `mediaBuyIds` is plural — matches the wire-spec\n * `GetMediaBuyDeliveryRequest.media_buy_ids` field (per AdCP 3.0\n * and PR #1342). Pollers that batch-query N buys in one upstream\n * call pass an array; single-buy callers pass `[id]`. Decomposed\n * here (vs. taking the full request shape) because pollers\n * synthesize requests internally and don't have a typed wire\n * payload to thread.\n *\n * `args` carries optional adopter-specific pass-through (e.g.\n * tenant-scoped query parameters); pollers leave it `undefined`.\n */\n getMediaBuyDelivery(\n ctx: TCtx,\n mediaBuyIds: readonly string[],\n startTime: string,\n endTime: string,\n args?: Record<string, unknown>\n ): Promise<ServerPayload<GetMediaBuyDeliveryResponse>>;\n\n /**\n * Poll upstream for the current status of one or more audiences.\n * Optional — only audience-sync pollers need this.\n *\n * Takes opaque `platformData` (whatever the adapter stored when\n * initiating the sync) plus a fresh access token. No operational\n * context is threaded because the original sync may have been\n * initiated under a now-expired auth principal; the poller carries\n * a freshly-resolved token from its own credential store.\n *\n * **`platformData` is for opaque upstream IDs only — never for\n * bearer tokens.** The fresh `accessToken` argument is the blessed\n * credential channel; reading a stale token from `platformData`\n * defeats the design and lands requests with revoked auth.\n *\n * Returns a `Map<audience_id, AudienceStatus>`. Audiences not\n * resolvable upstream are omitted from the map. Throw\n * `AdcpError('REFERENCE_NOT_FOUND')` only when the entire batch\n * is unresolvable for the tenant.\n *\n * Plural method name aligns with `AudiencePlatform.pollAudienceStatuses`\n * (the buyer-facing analog), which also returns\n * `Map<string, AudienceStatus>`. Signature differs because operational\n * callers don't have a `RequestContext` to thread.\n */\n pollAudienceStatuses?(\n platformData: Record<string, unknown>,\n accessToken: string\n ): Promise<Map<string, AudienceStatus>>;\n\n /**\n * Discover advertising products. Used by storefront bundle services\n * to query upstream platforms for products available for bundling\n * — server-side internal call, not buyer-facing dispatch.\n *\n * Optional: bundle-search is opt-in per storefront, and not every\n * upstream platform exposes a product-discovery surface.\n *\n * Signature differs from `SalesPlatform.getProducts` because the\n * caller is a storefront bundle service, not an MCP request\n * handler — they have a brief and brand context, not a typed\n * `GetProductsRequest` wire payload.\n */\n getProducts?(\n ctx: TCtx,\n brief: string,\n contextId?: string,\n brand?: Record<string, unknown>,\n sourceChain?: readonly string[]\n ): Promise<RequireCacheScopeWhenProducts<ServerPayload<GetProductsResponse>>>;\n}\n\n/**\n * Type-level identity for an `OperationalPlatform` object literal.\n * Forces the contextual type so handler bodies get typed `ctx` and\n * `request` parameters in TypeScript without an explicit annotation.\n *\n * Mirrors the `definePlatform` family for `DecisioningPlatform`\n * sub-interfaces — see `decisioning/platform-helpers.ts`.\n *\n * @example\n * ```ts\n * import { AuthMissingError, defineOperationalPlatform, type OperationalContext } from '@adcp/sdk/server';\n *\n * interface SnapOpCtx extends OperationalContext {\n * advertiserId: string;\n * }\n *\n * export const snapOperational = defineOperationalPlatform<SnapOpCtx>({\n * platformId: 'snap',\n * extractContext: async (args, sessionToken, requireAuth = true) => {\n * if (!sessionToken && requireAuth) {\n * throw new AuthMissingError({ message: 'No Snap token available' });\n * }\n * return {\n * accessToken: sessionToken,\n * advertiserId: String(args.advertiser_id ?? ''),\n * };\n * },\n * updateMediaBuy: async (ctx, request) => {\n * // ctx.advertiserId typed ✓; request: UpdateMediaBuyRequest ✓\n * return upstream.update(ctx, request);\n * },\n * getMediaBuyDelivery: async (ctx, id, start, end) => {\n * return upstream.delivery(ctx, id, start, end);\n * },\n * });\n * ```\n */\nexport function defineOperationalPlatform<TCtx extends OperationalContext = OperationalContext>(\n ops: OperationalPlatform<TCtx>\n): OperationalPlatform<TCtx> {\n return ops;\n}\n"],"mappings":";;;;;;AAyQO,SAAS,0BACd,KAC2B;AAC3B,SAAO;AACT;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/server/operational-platform.ts"],"sourcesContent":["/**\n * `OperationalPlatform` — in-process operational contract.\n *\n * `DecisioningPlatform` covers buyer-facing MCP request dispatch:\n * `platform.sales.updateMediaBuy(req, ctx)` etc., where `ctx` is a\n * `RequestContext` built by the framework from `authInfo` via\n * `AccountStore.resolve`, threading `state`, `resolve`, `ctxMetadata`,\n * and `handoffToTask`.\n *\n * In-process consumers are different. The price-optimization poller,\n * audience-sync task poller, scheduled jobs, and the storefront\n * fan-out path do NOT have an MCP request to derive auth from. They\n * have a stored task with an access token (or, for fan-out, no token\n * — the storefront synthesizes one per upstream target). They cannot\n * honestly satisfy `RequestContext`. Every adopter doing operational\n * work would otherwise reinvent this seam.\n *\n * `OperationalPlatform` is the named contract for that seam. Five\n * methods covering the real operational surface:\n *\n * 1. `extractContext` — synthesize a per-call platform context from\n * a stored token (and optional request args, for fan-out callers).\n * The single CTX-METADATA-SAFETY boundary outside\n * `AccountStore.resolve`: anything touching credentials in an\n * in-process consumer flows through here.\n * 2. `updateMediaBuy` — required. Fan-out callers dispatch one of\n * these per upstream target.\n * 3. `getMediaBuyDelivery` — required. Pollers read delivery metrics\n * here.\n * 4. `pollAudienceStatuses` — optional. Audience-sync pollers only.\n * 5. `getProducts` — optional. Storefront bundle composition only;\n * server-side internal call, not buyer-facing dispatch.\n *\n * Naming the contract honestly — \"operational\" rather than \"adapter\"\n * — separates it from any v5 `PlatformAdapter` baggage and from\n * `DecisioningPlatform`'s MCP-request flow. Tests mock\n * `OperationalPlatform`, not the broader v6 interface.\n *\n * Errors: methods throw `AdcpError` for structured rejection, matching\n * `DecisioningPlatform`'s convention. Generic thrown `Error` /\n * `TypeError` propagate; callers catch and log per their needs.\n *\n * Status: 6.10. See adcontextprotocol/adcp-client#1530.\n *\n * @see DecisioningPlatform — buyer-facing MCP dispatch\n * @see docs/guides/CTX-METADATA-SAFETY.md — credential discipline\n * @public\n */\n\nimport type {\n GetMediaBuyDeliveryResponse,\n GetProductsResponse,\n UpdateMediaBuyRequest,\n UpdateMediaBuyResponse,\n} from '../types/tools.generated';\nimport type { RequireCacheScopeWhenProducts, ServerPayload } from '../types/server-payload';\nimport type { AudienceStatus } from './decisioning/specialisms/audiences';\n\n/**\n * Minimal context for in-process operational calls. Adopters extend\n * with platform-specific fields (advertiser id, sandbox mode, region,\n * etc.); the type parameter on `OperationalPlatform<TCtx>` carries\n * the extension through.\n *\n * `accessToken` is the only field shared across adopters: the rest of\n * the context shape is platform-internal. Pollers and scheduled jobs\n * that legitimately have no token (server-side internal scans) leave\n * it `undefined`.\n *\n * @example\n * ```ts\n * interface SnapOpCtx extends OperationalContext {\n * advertiserId: string;\n * sandbox: boolean;\n * }\n *\n * const snapOps = defineOperationalPlatform<SnapOpCtx>({\n * platformId: 'snap',\n * extractContext: async (args, sessionToken) => ({\n * accessToken: sessionToken,\n * advertiserId: String(args.advertiser_id ?? ''),\n * sandbox: Boolean(args.sandbox),\n * }),\n * // ...\n * });\n * ```\n */\nexport interface OperationalContext {\n /**\n * The access token used by upstream HTTP calls. `undefined` for\n * server-side internal scans that don't authenticate against a\n * specific tenant.\n */\n accessToken: string | undefined;\n}\n\n/**\n * In-process operational contract. Implementations dispatch to\n * upstream platform APIs from pollers, scheduled jobs, fan-out paths,\n * and other contexts that don't carry an MCP request.\n *\n * Type parameter `TCtx` extends {@link OperationalContext} to carry\n * platform-specific context fields through every method.\n */\nexport interface OperationalPlatform<TCtx extends OperationalContext = OperationalContext> {\n /**\n * Stable platform identifier matching `DecisioningPlatform`'s\n * registered name. Used by registries and routing layers to look up\n * the operational delegate by platform.\n */\n readonly platformId: string;\n\n /**\n * Synthesize an operational context from a stored token (and\n * optional request args for fan-out callers). The single\n * documented credential-synthesis path outside\n * `AccountStore.resolve` — so the only place adopters need\n * CTX-METADATA-SAFETY review on the operational side.\n *\n * Three call patterns this method serves:\n * - **Poller / scheduled job**: `args` is `{}`, `sessionToken` is\n * the stored token. Returns a context bound to that token.\n * - **Storefront fan-out**: `args` is the (scrubbed) buyer\n * request body, `sessionToken` is the storefront's master\n * credential. Returns a context for one upstream target.\n * - **Server-side internal scan**: `args` is `{}`, `sessionToken`\n * is `undefined`, `requireAuth` is `false`. Returns a\n * no-token context.\n *\n * @param args - Optional request args (storefront fan-out path)\n * @param sessionToken - Stored access token (poller path)\n * @param requireAuth - Throw `AuthMissingError` when no token is\n * available. Defaults to `true`.\n *\n * @remarks Post-migration the SDK will likely split this into\n * `synthesizeFromToken` / `synthesizeFromArgs` (see #1530 for the\n * follow-up). The combined signature today matches the v5\n * `PlatformAdapter.extractContext` shape so v5 adapters duck-type\n * satisfy this interface during migration without a wrapper.\n */\n extractContext(args: Record<string, unknown>, sessionToken?: string, requireAuth?: boolean): Promise<TCtx>;\n\n /**\n * Update a media buy upstream. Required because every operational\n * consumer assumes it — adapters that can't update media buys have\n * no business registering as operational.\n *\n * Throw `AdcpError` for structured rejection (`NOT_CANCELLABLE`,\n * `CONFLICT`, etc.). Generic thrown errors propagate to the caller.\n */\n updateMediaBuy(ctx: TCtx, request: UpdateMediaBuyRequest): Promise<ServerPayload<UpdateMediaBuyResponse>>;\n\n /**\n * Fetch delivery metrics for one or more media buys. Required for\n * the same reason as `updateMediaBuy`: every operational consumer\n * assumes it.\n *\n * `mediaBuyIds` is plural — matches the wire-spec\n * `GetMediaBuyDeliveryRequest.media_buy_ids` field (per AdCP 3.0\n * and PR #1342). Pollers that batch-query N buys in one upstream\n * call pass an array; single-buy callers pass `[id]`. Decomposed\n * here (vs. taking the full request shape) because pollers\n * synthesize requests internally and don't have a typed wire\n * payload to thread.\n *\n * `args` carries optional adopter-specific pass-through (e.g.\n * tenant-scoped query parameters); pollers leave it `undefined`.\n */\n getMediaBuyDelivery(\n ctx: TCtx,\n mediaBuyIds: readonly string[],\n startTime: string,\n endTime: string,\n args?: Record<string, unknown>\n ): Promise<ServerPayload<GetMediaBuyDeliveryResponse>>;\n\n /**\n * Poll upstream for the current status of one or more audiences.\n * Optional — only audience-sync pollers need this.\n *\n * Takes opaque `platformData` (whatever the adapter stored when\n * initiating the sync) plus a fresh access token. No operational\n * context is threaded because the original sync may have been\n * initiated under a now-expired auth principal; the poller carries\n * a freshly-resolved token from its own credential store.\n *\n * **`platformData` is for opaque upstream IDs only — never for\n * bearer tokens.** The fresh `accessToken` argument is the blessed\n * credential channel; reading a stale token from `platformData`\n * defeats the design and lands requests with revoked auth.\n *\n * Returns a `Map<audience_id, AudienceStatus>`. Audiences not\n * resolvable upstream are omitted from the map. Throw\n * `AdcpError('REFERENCE_NOT_FOUND')` only when the entire batch\n * is unresolvable for the tenant.\n *\n * Plural method name aligns with `AudiencePlatform.pollAudienceStatuses`\n * (the buyer-facing analog), which also returns\n * `Map<string, AudienceStatus>`. Signature differs because operational\n * callers don't have a `RequestContext` to thread.\n */\n pollAudienceStatuses?(\n platformData: Record<string, unknown>,\n accessToken: string\n ): Promise<Map<string, AudienceStatus>>;\n\n /**\n * Discover advertising products. Used by storefront bundle services\n * to query upstream platforms for products available for bundling\n * — server-side internal call, not buyer-facing dispatch.\n *\n * Optional: bundle-search is opt-in per storefront, and not every\n * upstream platform exposes a product-discovery surface.\n *\n * Signature differs from `SalesPlatform.getProducts` because the\n * caller is a storefront bundle service, not an MCP request\n * handler — they have a brief and brand context, not a typed\n * `GetProductsRequest` wire payload.\n */\n getProducts?(\n ctx: TCtx,\n brief: string,\n contextId?: string,\n brand?: Record<string, unknown>,\n sourceChain?: readonly string[]\n ): Promise<RequireCacheScopeWhenProducts<ServerPayload<GetProductsResponse>>>;\n}\n\n/**\n * Type-level identity for an `OperationalPlatform` object literal.\n * Forces the contextual type so handler bodies get typed `ctx` and\n * `request` parameters in TypeScript without an explicit annotation.\n *\n * Mirrors the `definePlatform` family for `DecisioningPlatform`\n * sub-interfaces — see `decisioning/platform-helpers.ts`.\n *\n * @example\n * ```ts\n * import { AuthMissingError, defineOperationalPlatform, type OperationalContext } from '@adcp/sdk/server';\n *\n * interface SnapOpCtx extends OperationalContext {\n * advertiserId: string;\n * }\n *\n * export const snapOperational = defineOperationalPlatform<SnapOpCtx>({\n * platformId: 'snap',\n * extractContext: async (args, sessionToken, requireAuth = true) => {\n * if (!sessionToken && requireAuth) {\n * throw new AuthMissingError({ message: 'No Snap token available' });\n * }\n * return {\n * accessToken: sessionToken,\n * advertiserId: String(args.advertiser_id ?? ''),\n * };\n * },\n * updateMediaBuy: async (ctx, request) => {\n * // ctx.advertiserId typed ✓; request: UpdateMediaBuyRequest ✓\n * return upstream.update(ctx, request);\n * },\n * getMediaBuyDelivery: async (ctx, id, start, end) => {\n * return upstream.delivery(ctx, id, start, end);\n * },\n * });\n * ```\n */\nexport function defineOperationalPlatform<TCtx extends OperationalContext = OperationalContext>(\n ops: OperationalPlatform<TCtx>\n): OperationalPlatform<TCtx> {\n return ops;\n}\n"],"mappings":"AAyQO,SAAS,0BACd,KAC2B;AAC3B,SAAO;AACT;","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_OPTIONS = {
|
|
8
2
|
maxDepth: 2,
|
|
9
3
|
maxSizeBytes: 2048
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/server/pick-safe-details.ts"],"sourcesContent":["/**\n * Security primitive for the `details` field on `AdcpError` and the\n * `Error` wire row. Adopters fronting upstream platforms (GAM, Snap,\n * retail-media APIs, internal billing systems) often want to surface\n * upstream error context to buyers — but raw upstream errors carry\n * credentials, PII, internal stack traces, request IDs that leak\n * tenant identity, and other liability surfaces that MUST NOT cross\n * the wire boundary.\n *\n * `pickSafeDetails(input, allowlist, opts?)` is an explicit-allowlist\n * sanitizer: only keys in the allowlist survive, with optional caps\n * on depth and serialized size. Returns `undefined` when the input is\n * not a plain object or the allowlist filter produces an empty\n * result, so callers can spread the return into an optional `details`\n * field without polluting it with `{}`.\n *\n * Adopters should call this BEFORE constructing the `AdcpError` /\n * wire `Error` row. The framework's `normalizeError` does NOT\n * sanitize details — it shallow-copies whatever was passed.\n *\n * @example\n * ```ts\n * import { pickSafeDetails } from '@adcp/client/server';\n *\n * try {\n * await gamClient.createOrder(req);\n * } catch (upstreamErr) {\n * throw new AdcpError('UPSTREAM_REJECTED', {\n * recovery: 'transient',\n * message: 'Ad server rejected the order',\n * // Allowlist: only safe upstream fields cross the wire\n * details: pickSafeDetails(upstreamErr, [\n * 'http_status',\n * 'request_id',\n * 'gam_error_code',\n * ]),\n * });\n * }\n * ```\n *\n * @public\n */\n\nexport interface PickSafeDetailsOptions {\n /**\n * Maximum nesting depth retained in the result. `undefined` keeps\n * the input unchanged at any depth; values like `2` keep top-level\n * + one nested level. Strings, numbers, booleans, and null are\n * leaves; arrays and plain objects count as a level.\n *\n * Default: `2` — top-level + one nested level. Caps cardinality\n * blast radius from accidentally-recursive upstream error objects.\n */\n maxDepth?: number;\n\n /**\n * Maximum serialized JSON byte size of the result (best-effort\n * UTF-8 estimate via `JSON.stringify().length`). When the projected\n * result exceeds this, returns `undefined` rather than truncating —\n * adopters should choose a tighter allowlist if they hit the cap.\n *\n * Default: `2048` bytes. Wire envelopes shouldn't carry kilobytes\n * of details; if you need that, ship via `publishStatusChange` or\n * `task_registry.progress`.\n */\n maxSizeBytes?: number;\n}\n\nconst DEFAULT_OPTIONS: Required<PickSafeDetailsOptions> = {\n maxDepth: 2,\n maxSizeBytes: 2048,\n};\n\n/**\n * Filter `input` to keys named in `allowlist`, depth-capped and\n * size-capped. Returns `undefined` when the result is empty or\n * exceeds the size cap so callers can spread the value into an\n * optional `details` field without polluting it.\n *\n * Properties NOT in the allowlist are dropped silently (no warning;\n * the design assumes the allowlist is the contract). Nested objects\n * are recursively filtered with the SAME allowlist — there is no\n * per-key allowlist for nested fields. Adopters who need per-level\n * filtering should call `pickSafeDetails` recursively on each\n * nested value.\n *\n * Common-sense behaviors:\n * - `null` / `undefined` / non-object input → `undefined`\n * - Empty result after filtering → `undefined`\n * - Arrays at the top level → `undefined` (use a wrapping object)\n * - Functions and Symbols are dropped\n * - Date / RegExp / Error / Map / Set are dropped (use a string\n * allowlist of primitive fields, or pre-shape the input)\n *\n * @public\n */\nexport function pickSafeDetails(\n input: unknown,\n allowlist: readonly string[],\n opts?: PickSafeDetailsOptions\n): Record<string, unknown> | undefined {\n if (!isPlainObject(input)) return undefined;\n if (allowlist.length === 0) return undefined;\n\n const maxDepth = opts?.maxDepth ?? DEFAULT_OPTIONS.maxDepth;\n const maxSize = opts?.maxSizeBytes ?? DEFAULT_OPTIONS.maxSizeBytes;\n const allowSet = new Set(allowlist);\n\n const result = filterByAllowlist(input, allowSet, maxDepth);\n if (result == null || Object.keys(result).length === 0) return undefined;\n\n // Size cap. Use JSON.stringify length as a UTF-8-ish proxy.\n // Adopters who need exact byte counting should sanitize ahead of\n // pickSafeDetails.\n let serialized: string;\n try {\n serialized = JSON.stringify(result);\n } catch {\n // Circular reference snuck through (shouldn't happen for plain\n // objects but defensive). Return undefined rather than half-data.\n return undefined;\n }\n if (serialized.length > maxSize) return undefined;\n\n return result;\n}\n\nfunction filterByAllowlist(\n obj: Record<string, unknown>,\n allow: ReadonlySet<string>,\n remainingDepth: number\n): Record<string, unknown> | null {\n const out: Record<string, unknown> = {};\n for (const key of Object.keys(obj)) {\n if (!allow.has(key)) continue;\n const value = obj[key];\n const safe = sanitizeValue(value, allow, remainingDepth - 1);\n // Drop undefined results so the caller sees only present keys.\n if (safe !== undefined) out[key] = safe;\n }\n return Object.keys(out).length === 0 ? null : out;\n}\n\nfunction sanitizeValue(value: unknown, allow: ReadonlySet<string>, remainingDepth: number): unknown {\n // Primitives pass through.\n if (value === null) return null;\n const t = typeof value;\n if (t === 'string' || t === 'number' || t === 'boolean') return value;\n if (t === 'function' || t === 'symbol' || t === 'undefined' || t === 'bigint') return undefined;\n\n if (Array.isArray(value)) {\n // Arrays don't count as a depth level — only plain objects do.\n // Pass items through with the SAME remainingDepth so an array-of-\n // objects gets the same nesting budget as a bare object would.\n const mapped = value.map(v => sanitizeValue(v, allow, remainingDepth));\n return mapped.filter(v => v !== undefined);\n }\n\n if (isPlainObject(value)) {\n if (remainingDepth <= 0) return undefined;\n const filtered = filterByAllowlist(value, allow, remainingDepth);\n return filtered ?? undefined;\n }\n\n // Date / RegExp / Map / Set / Error / class instances — drop.\n // Adopters who need these should pre-shape into primitives.\n return undefined;\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n if (value === null || typeof value !== 'object') return false;\n if (Array.isArray(value)) return false;\n // Only plain objects (not Date, RegExp, Map, Set, class instances).\n const proto = Object.getPrototypeOf(value);\n return proto === Object.prototype || proto === null;\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/server/pick-safe-details.ts"],"sourcesContent":["/**\n * Security primitive for the `details` field on `AdcpError` and the\n * `Error` wire row. Adopters fronting upstream platforms (GAM, Snap,\n * retail-media APIs, internal billing systems) often want to surface\n * upstream error context to buyers — but raw upstream errors carry\n * credentials, PII, internal stack traces, request IDs that leak\n * tenant identity, and other liability surfaces that MUST NOT cross\n * the wire boundary.\n *\n * `pickSafeDetails(input, allowlist, opts?)` is an explicit-allowlist\n * sanitizer: only keys in the allowlist survive, with optional caps\n * on depth and serialized size. Returns `undefined` when the input is\n * not a plain object or the allowlist filter produces an empty\n * result, so callers can spread the return into an optional `details`\n * field without polluting it with `{}`.\n *\n * Adopters should call this BEFORE constructing the `AdcpError` /\n * wire `Error` row. The framework's `normalizeError` does NOT\n * sanitize details — it shallow-copies whatever was passed.\n *\n * @example\n * ```ts\n * import { pickSafeDetails } from '@adcp/client/server';\n *\n * try {\n * await gamClient.createOrder(req);\n * } catch (upstreamErr) {\n * throw new AdcpError('UPSTREAM_REJECTED', {\n * recovery: 'transient',\n * message: 'Ad server rejected the order',\n * // Allowlist: only safe upstream fields cross the wire\n * details: pickSafeDetails(upstreamErr, [\n * 'http_status',\n * 'request_id',\n * 'gam_error_code',\n * ]),\n * });\n * }\n * ```\n *\n * @public\n */\n\nexport interface PickSafeDetailsOptions {\n /**\n * Maximum nesting depth retained in the result. `undefined` keeps\n * the input unchanged at any depth; values like `2` keep top-level\n * + one nested level. Strings, numbers, booleans, and null are\n * leaves; arrays and plain objects count as a level.\n *\n * Default: `2` — top-level + one nested level. Caps cardinality\n * blast radius from accidentally-recursive upstream error objects.\n */\n maxDepth?: number;\n\n /**\n * Maximum serialized JSON byte size of the result (best-effort\n * UTF-8 estimate via `JSON.stringify().length`). When the projected\n * result exceeds this, returns `undefined` rather than truncating —\n * adopters should choose a tighter allowlist if they hit the cap.\n *\n * Default: `2048` bytes. Wire envelopes shouldn't carry kilobytes\n * of details; if you need that, ship via `publishStatusChange` or\n * `task_registry.progress`.\n */\n maxSizeBytes?: number;\n}\n\nconst DEFAULT_OPTIONS: Required<PickSafeDetailsOptions> = {\n maxDepth: 2,\n maxSizeBytes: 2048,\n};\n\n/**\n * Filter `input` to keys named in `allowlist`, depth-capped and\n * size-capped. Returns `undefined` when the result is empty or\n * exceeds the size cap so callers can spread the value into an\n * optional `details` field without polluting it.\n *\n * Properties NOT in the allowlist are dropped silently (no warning;\n * the design assumes the allowlist is the contract). Nested objects\n * are recursively filtered with the SAME allowlist — there is no\n * per-key allowlist for nested fields. Adopters who need per-level\n * filtering should call `pickSafeDetails` recursively on each\n * nested value.\n *\n * Common-sense behaviors:\n * - `null` / `undefined` / non-object input → `undefined`\n * - Empty result after filtering → `undefined`\n * - Arrays at the top level → `undefined` (use a wrapping object)\n * - Functions and Symbols are dropped\n * - Date / RegExp / Error / Map / Set are dropped (use a string\n * allowlist of primitive fields, or pre-shape the input)\n *\n * @public\n */\nexport function pickSafeDetails(\n input: unknown,\n allowlist: readonly string[],\n opts?: PickSafeDetailsOptions\n): Record<string, unknown> | undefined {\n if (!isPlainObject(input)) return undefined;\n if (allowlist.length === 0) return undefined;\n\n const maxDepth = opts?.maxDepth ?? DEFAULT_OPTIONS.maxDepth;\n const maxSize = opts?.maxSizeBytes ?? DEFAULT_OPTIONS.maxSizeBytes;\n const allowSet = new Set(allowlist);\n\n const result = filterByAllowlist(input, allowSet, maxDepth);\n if (result == null || Object.keys(result).length === 0) return undefined;\n\n // Size cap. Use JSON.stringify length as a UTF-8-ish proxy.\n // Adopters who need exact byte counting should sanitize ahead of\n // pickSafeDetails.\n let serialized: string;\n try {\n serialized = JSON.stringify(result);\n } catch {\n // Circular reference snuck through (shouldn't happen for plain\n // objects but defensive). Return undefined rather than half-data.\n return undefined;\n }\n if (serialized.length > maxSize) return undefined;\n\n return result;\n}\n\nfunction filterByAllowlist(\n obj: Record<string, unknown>,\n allow: ReadonlySet<string>,\n remainingDepth: number\n): Record<string, unknown> | null {\n const out: Record<string, unknown> = {};\n for (const key of Object.keys(obj)) {\n if (!allow.has(key)) continue;\n const value = obj[key];\n const safe = sanitizeValue(value, allow, remainingDepth - 1);\n // Drop undefined results so the caller sees only present keys.\n if (safe !== undefined) out[key] = safe;\n }\n return Object.keys(out).length === 0 ? null : out;\n}\n\nfunction sanitizeValue(value: unknown, allow: ReadonlySet<string>, remainingDepth: number): unknown {\n // Primitives pass through.\n if (value === null) return null;\n const t = typeof value;\n if (t === 'string' || t === 'number' || t === 'boolean') return value;\n if (t === 'function' || t === 'symbol' || t === 'undefined' || t === 'bigint') return undefined;\n\n if (Array.isArray(value)) {\n // Arrays don't count as a depth level — only plain objects do.\n // Pass items through with the SAME remainingDepth so an array-of-\n // objects gets the same nesting budget as a bare object would.\n const mapped = value.map(v => sanitizeValue(v, allow, remainingDepth));\n return mapped.filter(v => v !== undefined);\n }\n\n if (isPlainObject(value)) {\n if (remainingDepth <= 0) return undefined;\n const filtered = filterByAllowlist(value, allow, remainingDepth);\n return filtered ?? undefined;\n }\n\n // Date / RegExp / Map / Set / Error / class instances — drop.\n // Adopters who need these should pre-shape into primitives.\n return undefined;\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n if (value === null || typeof value !== 'object') return false;\n if (Array.isArray(value)) return false;\n // Only plain objects (not Date, RegExp, Map, Set, class instances).\n const proto = Object.getPrototypeOf(value);\n return proto === Object.prototype || proto === null;\n}\n"],"mappings":"AAoEA,MAAM,kBAAoD;AAAA,EACxD,UAAU;AAAA,EACV,cAAc;AAChB;AAyBO,SAAS,gBACd,OACA,WACA,MACqC;AACrC,MAAI,CAAC,cAAc,KAAK,EAAG,QAAO;AAClC,MAAI,UAAU,WAAW,EAAG,QAAO;AAEnC,QAAM,WAAW,MAAM,YAAY,gBAAgB;AACnD,QAAM,UAAU,MAAM,gBAAgB,gBAAgB;AACtD,QAAM,WAAW,IAAI,IAAI,SAAS;AAElC,QAAM,SAAS,kBAAkB,OAAO,UAAU,QAAQ;AAC1D,MAAI,UAAU,QAAQ,OAAO,KAAK,MAAM,EAAE,WAAW,EAAG,QAAO;AAK/D,MAAI;AACJ,MAAI;AACF,iBAAa,KAAK,UAAU,MAAM;AAAA,EACpC,QAAQ;AAGN,WAAO;AAAA,EACT;AACA,MAAI,WAAW,SAAS,QAAS,QAAO;AAExC,SAAO;AACT;AAEA,SAAS,kBACP,KACA,OACA,gBACgC;AAChC,QAAM,MAA+B,CAAC;AACtC,aAAW,OAAO,OAAO,KAAK,GAAG,GAAG;AAClC,QAAI,CAAC,MAAM,IAAI,GAAG,EAAG;AACrB,UAAM,QAAQ,IAAI,GAAG;AACrB,UAAM,OAAO,cAAc,OAAO,OAAO,iBAAiB,CAAC;AAE3D,QAAI,SAAS,OAAW,KAAI,GAAG,IAAI;AAAA,EACrC;AACA,SAAO,OAAO,KAAK,GAAG,EAAE,WAAW,IAAI,OAAO;AAChD;AAEA,SAAS,cAAc,OAAgB,OAA4B,gBAAiC;AAElG,MAAI,UAAU,KAAM,QAAO;AAC3B,QAAM,IAAI,OAAO;AACjB,MAAI,MAAM,YAAY,MAAM,YAAY,MAAM,UAAW,QAAO;AAChE,MAAI,MAAM,cAAc,MAAM,YAAY,MAAM,eAAe,MAAM,SAAU,QAAO;AAEtF,MAAI,MAAM,QAAQ,KAAK,GAAG;AAIxB,UAAM,SAAS,MAAM,IAAI,OAAK,cAAc,GAAG,OAAO,cAAc,CAAC;AACrE,WAAO,OAAO,OAAO,OAAK,MAAM,MAAS;AAAA,EAC3C;AAEA,MAAI,cAAc,KAAK,GAAG;AACxB,QAAI,kBAAkB,EAAG,QAAO;AAChC,UAAM,WAAW,kBAAkB,OAAO,OAAO,cAAc;AAC/D,WAAO,YAAY;AAAA,EACrB;AAIA,SAAO;AACT;AAEA,SAAS,cAAc,OAAkD;AACvE,MAAI,UAAU,QAAQ,OAAO,UAAU,SAAU,QAAO;AACxD,MAAI,MAAM,QAAQ,KAAK,EAAG,QAAO;AAEjC,QAAM,QAAQ,OAAO,eAAe,KAAK;AACzC,SAAO,UAAU,OAAO,aAAa,UAAU;AACjD;","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 { Agent, fetch as undiciFetch } from "undici";
|
|
8
2
|
import { lookup as nativeDnsLookup } from "node:dns";
|
|
9
3
|
import { isIPv6 } from "node:net";
|