@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/utils/format-renders.ts"],"sourcesContent":["/**\n * Format Renders Normalizer\n *\n * Handles conversion between v2 top-level dimensions and v3 renders array.\n * The library exposes only v3 API (renders array) to clients,\n * and internally normalizes responses from v2 servers.\n */\n\n/**\n * Dimensions for a render\n */\nexport interface RenderDimensions {\n width: number;\n height: number;\n}\n\n/**\n * v3 render specification — one entry in `Format.renders[]`.\n *\n * Renamed from `FormatRender` (see deprecated alias below) to free the\n * `FormatRender` name for the factory namespace in `format-render-builders`,\n * which is the more common autocomplete target. TypeScript keeps type and\n * value namespaces separate, but the re-export barrel in `src/lib/index.ts`\n * can't disambiguate between a type re-export and a const re-export at the\n * same name — hence the rename.\n */\nexport interface FormatRenderEntry {\n /** Unique identifier for this render */\n render_id: string;\n /** Semantic role (e.g., 'primary', 'companion', 'mobile_variant') */\n role: string;\n /** Dimensions of this render */\n dimensions?: RenderDimensions;\n /** Whether dimensions come from format_id parameters */\n parameters_from_format_id?: boolean;\n}\n\n/**\n * @deprecated Renamed to `FormatRenderEntry`. This alias keeps existing\n * imports compiling but is not re-exported from the package barrel\n * (`@adcp/sdk`) — the barrel's `FormatRender` identifier now refers to\n * the factory namespace. Migrate to `FormatRenderEntry` next release.\n */\nexport type FormatRender = FormatRenderEntry;\n\n/**\n * v2 format with top-level dimensions\n */\nexport interface FormatV2 {\n width?: number;\n height?: number;\n dimensions?: RenderDimensions;\n [key: string]: unknown;\n}\n\n/**\n * v3 format with renders array\n */\nexport interface FormatV3 {\n renders?: FormatRenderEntry[];\n [key: string]: unknown;\n}\n\n/**\n * Normalize a format from v2 (top-level dimensions) to v3 (renders array).\n * If the format already has renders, returns as-is.\n */\nexport function normalizeFormatRenders(format: FormatV2 | FormatV3): FormatV3 {\n // Already has renders array - return as-is\n if ((format as FormatV3).renders && Array.isArray((format as FormatV3).renders)) {\n return format as FormatV3;\n }\n\n const v2Format = format as FormatV2;\n\n // Check for v2 dimensions\n const hasWidth = v2Format.width !== undefined;\n const hasHeight = v2Format.height !== undefined;\n const hasDimensions = v2Format.dimensions !== undefined;\n\n if (!hasWidth && !hasHeight && !hasDimensions) {\n // No dimension info - could be a template format\n // Return without renders (caller can check accepts_parameters)\n return format as FormatV3;\n }\n\n // Build dimensions object\n let dimensions: RenderDimensions | undefined;\n\n if (hasDimensions) {\n dimensions = v2Format.dimensions;\n } else if (hasWidth || hasHeight) {\n dimensions = {\n width: v2Format.width ?? 0,\n height: v2Format.height ?? 0,\n };\n }\n\n // Remove v2 fields and add v3 renders\n const { width, height, dimensions: _, ...rest } = v2Format;\n\n return {\n ...rest,\n renders: [\n {\n render_id: 'primary',\n role: 'primary',\n dimensions,\n },\n ],\n };\n}\n\n/**\n * Normalize all formats in a list_creative_formats response\n */\nexport function normalizeFormatsResponse(response: any): any {\n // Handle raw array responses (agent omitted { formats: [...] } wrapper)\n if (Array.isArray(response)) {\n return { formats: response.map(normalizeFormatRenders) };\n }\n\n if (!response.formats || !Array.isArray(response.formats)) {\n return response;\n }\n\n return {\n ...response,\n formats: response.formats.map(normalizeFormatRenders),\n };\n}\n\n/**\n * Get renders from a format (normalizes v2 to v3 format)\n */\nexport function getFormatRenders(format: FormatV2 | FormatV3): FormatRenderEntry[] {\n const normalized = normalizeFormatRenders(format);\n return normalized.renders ?? [];\n}\n\n/**\n * Get primary render from a format\n */\nexport function getPrimaryRender(format: FormatV2 | FormatV3): FormatRenderEntry | undefined {\n const renders = getFormatRenders(format);\n return renders.find(r => r.role === 'primary') ?? renders[0];\n}\n\n/**\n * Get companion renders from a format\n */\nexport function getCompanionRenders(format: FormatV2 | FormatV3): FormatRenderEntry[] {\n const renders = getFormatRenders(format);\n return renders.filter(r => r.role === 'companion');\n}\n\n/**\n * Check if format has multiple renders (companion ads, adaptive)\n */\nexport function isMultiRenderFormat(format: FormatV2 | FormatV3): boolean {\n const renders = getFormatRenders(format);\n return renders.length > 1;\n}\n\n/**\n * Check if format uses v2 top-level dimensions\n */\nexport function usesV2Dimensions(format: any): boolean {\n return (\n (format.width !== undefined || format.height !== undefined || format.dimensions !== undefined) && !format.renders\n );\n}\n\n/**\n * Check if format uses v3 renders array\n */\nexport function usesV3Renders(format: any): boolean {\n return Array.isArray(format.renders);\n}\n\n/**\n * Get format dimensions (works with both v2 and v3)\n * For multi-render formats, returns primary render dimensions\n */\nexport function getFormatDimensions(format: FormatV2 | FormatV3): RenderDimensions | undefined {\n // v3 format - get from primary render\n if ((format as FormatV3).renders) {\n const primary = getPrimaryRender(format);\n return primary?.dimensions;\n }\n\n // v2 format - get from top-level\n const v2Format = format as FormatV2;\n if (v2Format.dimensions) {\n return v2Format.dimensions;\n }\n if (v2Format.width !== undefined || v2Format.height !== undefined) {\n return {\n width: v2Format.width ?? 0,\n height: v2Format.height ?? 0,\n };\n }\n\n return undefined;\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/utils/format-renders.ts"],"sourcesContent":["/**\n * Format Renders Normalizer\n *\n * Handles conversion between v2 top-level dimensions and v3 renders array.\n * The library exposes only v3 API (renders array) to clients,\n * and internally normalizes responses from v2 servers.\n */\n\n/**\n * Dimensions for a render\n */\nexport interface RenderDimensions {\n width: number;\n height: number;\n}\n\n/**\n * v3 render specification — one entry in `Format.renders[]`.\n *\n * Renamed from `FormatRender` (see deprecated alias below) to free the\n * `FormatRender` name for the factory namespace in `format-render-builders`,\n * which is the more common autocomplete target. TypeScript keeps type and\n * value namespaces separate, but the re-export barrel in `src/lib/index.ts`\n * can't disambiguate between a type re-export and a const re-export at the\n * same name — hence the rename.\n */\nexport interface FormatRenderEntry {\n /** Unique identifier for this render */\n render_id: string;\n /** Semantic role (e.g., 'primary', 'companion', 'mobile_variant') */\n role: string;\n /** Dimensions of this render */\n dimensions?: RenderDimensions;\n /** Whether dimensions come from format_id parameters */\n parameters_from_format_id?: boolean;\n}\n\n/**\n * @deprecated Renamed to `FormatRenderEntry`. This alias keeps existing\n * imports compiling but is not re-exported from the package barrel\n * (`@adcp/sdk`) — the barrel's `FormatRender` identifier now refers to\n * the factory namespace. Migrate to `FormatRenderEntry` next release.\n */\nexport type FormatRender = FormatRenderEntry;\n\n/**\n * v2 format with top-level dimensions\n */\nexport interface FormatV2 {\n width?: number;\n height?: number;\n dimensions?: RenderDimensions;\n [key: string]: unknown;\n}\n\n/**\n * v3 format with renders array\n */\nexport interface FormatV3 {\n renders?: FormatRenderEntry[];\n [key: string]: unknown;\n}\n\n/**\n * Normalize a format from v2 (top-level dimensions) to v3 (renders array).\n * If the format already has renders, returns as-is.\n */\nexport function normalizeFormatRenders(format: FormatV2 | FormatV3): FormatV3 {\n // Already has renders array - return as-is\n if ((format as FormatV3).renders && Array.isArray((format as FormatV3).renders)) {\n return format as FormatV3;\n }\n\n const v2Format = format as FormatV2;\n\n // Check for v2 dimensions\n const hasWidth = v2Format.width !== undefined;\n const hasHeight = v2Format.height !== undefined;\n const hasDimensions = v2Format.dimensions !== undefined;\n\n if (!hasWidth && !hasHeight && !hasDimensions) {\n // No dimension info - could be a template format\n // Return without renders (caller can check accepts_parameters)\n return format as FormatV3;\n }\n\n // Build dimensions object\n let dimensions: RenderDimensions | undefined;\n\n if (hasDimensions) {\n dimensions = v2Format.dimensions;\n } else if (hasWidth || hasHeight) {\n dimensions = {\n width: v2Format.width ?? 0,\n height: v2Format.height ?? 0,\n };\n }\n\n // Remove v2 fields and add v3 renders\n const { width, height, dimensions: _, ...rest } = v2Format;\n\n return {\n ...rest,\n renders: [\n {\n render_id: 'primary',\n role: 'primary',\n dimensions,\n },\n ],\n };\n}\n\n/**\n * Normalize all formats in a list_creative_formats response\n */\nexport function normalizeFormatsResponse(response: any): any {\n // Handle raw array responses (agent omitted { formats: [...] } wrapper)\n if (Array.isArray(response)) {\n return { formats: response.map(normalizeFormatRenders) };\n }\n\n if (!response.formats || !Array.isArray(response.formats)) {\n return response;\n }\n\n return {\n ...response,\n formats: response.formats.map(normalizeFormatRenders),\n };\n}\n\n/**\n * Get renders from a format (normalizes v2 to v3 format)\n */\nexport function getFormatRenders(format: FormatV2 | FormatV3): FormatRenderEntry[] {\n const normalized = normalizeFormatRenders(format);\n return normalized.renders ?? [];\n}\n\n/**\n * Get primary render from a format\n */\nexport function getPrimaryRender(format: FormatV2 | FormatV3): FormatRenderEntry | undefined {\n const renders = getFormatRenders(format);\n return renders.find(r => r.role === 'primary') ?? renders[0];\n}\n\n/**\n * Get companion renders from a format\n */\nexport function getCompanionRenders(format: FormatV2 | FormatV3): FormatRenderEntry[] {\n const renders = getFormatRenders(format);\n return renders.filter(r => r.role === 'companion');\n}\n\n/**\n * Check if format has multiple renders (companion ads, adaptive)\n */\nexport function isMultiRenderFormat(format: FormatV2 | FormatV3): boolean {\n const renders = getFormatRenders(format);\n return renders.length > 1;\n}\n\n/**\n * Check if format uses v2 top-level dimensions\n */\nexport function usesV2Dimensions(format: any): boolean {\n return (\n (format.width !== undefined || format.height !== undefined || format.dimensions !== undefined) && !format.renders\n );\n}\n\n/**\n * Check if format uses v3 renders array\n */\nexport function usesV3Renders(format: any): boolean {\n return Array.isArray(format.renders);\n}\n\n/**\n * Get format dimensions (works with both v2 and v3)\n * For multi-render formats, returns primary render dimensions\n */\nexport function getFormatDimensions(format: FormatV2 | FormatV3): RenderDimensions | undefined {\n // v3 format - get from primary render\n if ((format as FormatV3).renders) {\n const primary = getPrimaryRender(format);\n return primary?.dimensions;\n }\n\n // v2 format - get from top-level\n const v2Format = format as FormatV2;\n if (v2Format.dimensions) {\n return v2Format.dimensions;\n }\n if (v2Format.width !== undefined || v2Format.height !== undefined) {\n return {\n width: v2Format.width ?? 0,\n height: v2Format.height ?? 0,\n };\n }\n\n return undefined;\n}\n"],"mappings":"AAmEO,SAAS,uBAAuB,QAAuC;AAE5E,MAAK,OAAoB,WAAW,MAAM,QAAS,OAAoB,OAAO,GAAG;AAC/E,WAAO;AAAA,EACT;AAEA,QAAM,WAAW;AAGjB,QAAM,WAAW,SAAS,UAAU;AACpC,QAAM,YAAY,SAAS,WAAW;AACtC,QAAM,gBAAgB,SAAS,eAAe;AAE9C,MAAI,CAAC,YAAY,CAAC,aAAa,CAAC,eAAe;AAG7C,WAAO;AAAA,EACT;AAGA,MAAI;AAEJ,MAAI,eAAe;AACjB,iBAAa,SAAS;AAAA,EACxB,WAAW,YAAY,WAAW;AAChC,iBAAa;AAAA,MACX,OAAO,SAAS,SAAS;AAAA,MACzB,QAAQ,SAAS,UAAU;AAAA,IAC7B;AAAA,EACF;AAGA,QAAM,EAAE,OAAO,QAAQ,YAAY,GAAG,GAAG,KAAK,IAAI;AAElD,SAAO;AAAA,IACL,GAAG;AAAA,IACH,SAAS;AAAA,MACP;AAAA,QACE,WAAW;AAAA,QACX,MAAM;AAAA,QACN;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAKO,SAAS,yBAAyB,UAAoB;AAE3D,MAAI,MAAM,QAAQ,QAAQ,GAAG;AAC3B,WAAO,EAAE,SAAS,SAAS,IAAI,sBAAsB,EAAE;AAAA,EACzD;AAEA,MAAI,CAAC,SAAS,WAAW,CAAC,MAAM,QAAQ,SAAS,OAAO,GAAG;AACzD,WAAO;AAAA,EACT;AAEA,SAAO;AAAA,IACL,GAAG;AAAA,IACH,SAAS,SAAS,QAAQ,IAAI,sBAAsB;AAAA,EACtD;AACF;AAKO,SAAS,iBAAiB,QAAkD;AACjF,QAAM,aAAa,uBAAuB,MAAM;AAChD,SAAO,WAAW,WAAW,CAAC;AAChC;AAKO,SAAS,iBAAiB,QAA4D;AAC3F,QAAM,UAAU,iBAAiB,MAAM;AACvC,SAAO,QAAQ,KAAK,OAAK,EAAE,SAAS,SAAS,KAAK,QAAQ,CAAC;AAC7D;AAKO,SAAS,oBAAoB,QAAkD;AACpF,QAAM,UAAU,iBAAiB,MAAM;AACvC,SAAO,QAAQ,OAAO,OAAK,EAAE,SAAS,WAAW;AACnD;AAKO,SAAS,oBAAoB,QAAsC;AACxE,QAAM,UAAU,iBAAiB,MAAM;AACvC,SAAO,QAAQ,SAAS;AAC1B;AAKO,SAAS,iBAAiB,QAAsB;AACrD,UACG,OAAO,UAAU,UAAa,OAAO,WAAW,UAAa,OAAO,eAAe,WAAc,CAAC,OAAO;AAE9G;AAKO,SAAS,cAAc,QAAsB;AAClD,SAAO,MAAM,QAAQ,OAAO,OAAO;AACrC;AAMO,SAAS,oBAAoB,QAA2D;AAE7F,MAAK,OAAoB,SAAS;AAChC,UAAM,UAAU,iBAAiB,MAAM;AACvC,WAAO,SAAS;AAAA,EAClB;AAGA,QAAM,WAAW;AACjB,MAAI,SAAS,YAAY;AACvB,WAAO,SAAS;AAAA,EAClB;AACA,MAAI,SAAS,UAAU,UAAa,SAAS,WAAW,QAAW;AACjE,WAAO;AAAA,MACL,OAAO,SAAS,SAAS;AAAA,MACzB,QAAQ,SAAS,UAAU;AAAA,IAC7B;AAAA,EACF;AAEA,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 getScopeRequirement(response) {
|
|
8
2
|
if (response == null || typeof response !== "object" || Array.isArray(response)) return void 0;
|
|
9
3
|
const value = response;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/utils/get-products-cache-scope.ts"],"sourcesContent":["import type { RequireCacheScopeWhenProducts } from '../types/server-payload';\n\nexport type GetProductsCacheScope = 'public' | 'account';\n\nexport interface EnsureGetProductsCacheScopeOptions {\n /**\n * Scope to stamp when a populated or unchanged get_products response omits\n * cache_scope. Defaults to 'account', the fail-closed choice for composed\n * storefronts and upstream inventory adapters.\n */\n defaultCacheScope?: GetProductsCacheScope;\n /** Optional observability hook for callers that want to track SDK injection. */\n onInject?: (event: {\n cache_scope: GetProductsCacheScope;\n reason: 'products_present' | 'unchanged';\n product_count?: number;\n }) => void;\n}\n\nexport interface GetProductsCacheScopeValidation {\n ok: boolean;\n reason?: 'missing_cache_scope' | 'invalid_cache_scope';\n}\n\ntype NormalizedCacheScopeInput<T extends object> = Omit<T, 'cache_scope'> & {\n cache_scope?: GetProductsCacheScope;\n};\n\nexport type GetProductsResponseWithCacheScope<T extends object> = T extends {\n products: infer TProducts;\n}\n ? Omit<T, 'cache_scope'> & { products: TProducts; cache_scope: GetProductsCacheScope }\n : T extends { unchanged: true }\n ? Omit<T, 'cache_scope'> & { unchanged: true; cache_scope: GetProductsCacheScope }\n : RequireCacheScopeWhenProducts<NormalizedCacheScopeInput<T>>;\n\nfunction getScopeRequirement(response: unknown): 'products_present' | 'unchanged' | undefined {\n if (response == null || typeof response !== 'object' || Array.isArray(response)) return undefined;\n const value = response as { products?: unknown; unchanged?: unknown };\n if (Array.isArray(value.products)) return 'products_present';\n if (value.unchanged === true) return 'unchanged';\n return undefined;\n}\n\nfunction isCacheScope(value: unknown): value is GetProductsCacheScope {\n return value === 'public' || value === 'account';\n}\n\n/**\n * Validate the get_products cache-scope invariant without mutating the\n * response: if `products` is present, or `unchanged: true` is present, then\n * `cache_scope` must be either 'public' or 'account'.\n */\nexport function validateGetProductsCacheScope(response: unknown): GetProductsCacheScopeValidation {\n const requirement = getScopeRequirement(response);\n if (!requirement) return { ok: true };\n const scope = (response as { cache_scope?: unknown }).cache_scope;\n if (scope === undefined) return { ok: false, reason: 'missing_cache_scope' };\n if (!isCacheScope(scope)) return { ok: false, reason: 'invalid_cache_scope' };\n return { ok: true };\n}\n\n/**\n * Return a get_products response whose populated/unchanged branches always\n * carry cache_scope. Existing valid values are preserved. Missing values are\n * stamped with `defaultCacheScope` (default 'account'); invalid values throw.\n *\n * Use this at storefront/composition boundaries when upstream inventory\n * sources have not yet adopted the 3.1 cache-scope field. Defaulting to\n * 'account' avoids accidentally keying account overlays under a public cache.\n */\nexport function ensureGetProductsCacheScope<T extends object>(\n response: T,\n options: EnsureGetProductsCacheScopeOptions = {}\n): GetProductsResponseWithCacheScope<T> {\n const requirement = getScopeRequirement(response);\n if (!requirement) return response as unknown as GetProductsResponseWithCacheScope<T>;\n\n const current = (response as { cache_scope?: unknown }).cache_scope;\n if (isCacheScope(current)) return response as unknown as GetProductsResponseWithCacheScope<T>;\n if (current !== undefined) {\n throw new Error(\n `get_products cache_scope must be 'public' or 'account' when products are present or unchanged: true; got ${JSON.stringify(current)}.`\n );\n }\n\n const cacheScope = options.defaultCacheScope ?? 'account';\n const normalized = { ...response, cache_scope: cacheScope };\n const productCount = (response as { products?: unknown }).products;\n options.onInject?.({\n cache_scope: cacheScope,\n reason: requirement,\n product_count: Array.isArray(productCount) ? productCount.length : undefined,\n });\n // Runtime guards above prove the returned branch has a valid cache_scope.\n // TypeScript cannot express that conditional augmentation for arbitrary\n // generated interfaces, especially ones without index signatures.\n return normalized as unknown as GetProductsResponseWithCacheScope<T>;\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/utils/get-products-cache-scope.ts"],"sourcesContent":["import type { RequireCacheScopeWhenProducts } from '../types/server-payload';\n\nexport type GetProductsCacheScope = 'public' | 'account';\n\nexport interface EnsureGetProductsCacheScopeOptions {\n /**\n * Scope to stamp when a populated or unchanged get_products response omits\n * cache_scope. Defaults to 'account', the fail-closed choice for composed\n * storefronts and upstream inventory adapters.\n */\n defaultCacheScope?: GetProductsCacheScope;\n /** Optional observability hook for callers that want to track SDK injection. */\n onInject?: (event: {\n cache_scope: GetProductsCacheScope;\n reason: 'products_present' | 'unchanged';\n product_count?: number;\n }) => void;\n}\n\nexport interface GetProductsCacheScopeValidation {\n ok: boolean;\n reason?: 'missing_cache_scope' | 'invalid_cache_scope';\n}\n\ntype NormalizedCacheScopeInput<T extends object> = Omit<T, 'cache_scope'> & {\n cache_scope?: GetProductsCacheScope;\n};\n\nexport type GetProductsResponseWithCacheScope<T extends object> = T extends {\n products: infer TProducts;\n}\n ? Omit<T, 'cache_scope'> & { products: TProducts; cache_scope: GetProductsCacheScope }\n : T extends { unchanged: true }\n ? Omit<T, 'cache_scope'> & { unchanged: true; cache_scope: GetProductsCacheScope }\n : RequireCacheScopeWhenProducts<NormalizedCacheScopeInput<T>>;\n\nfunction getScopeRequirement(response: unknown): 'products_present' | 'unchanged' | undefined {\n if (response == null || typeof response !== 'object' || Array.isArray(response)) return undefined;\n const value = response as { products?: unknown; unchanged?: unknown };\n if (Array.isArray(value.products)) return 'products_present';\n if (value.unchanged === true) return 'unchanged';\n return undefined;\n}\n\nfunction isCacheScope(value: unknown): value is GetProductsCacheScope {\n return value === 'public' || value === 'account';\n}\n\n/**\n * Validate the get_products cache-scope invariant without mutating the\n * response: if `products` is present, or `unchanged: true` is present, then\n * `cache_scope` must be either 'public' or 'account'.\n */\nexport function validateGetProductsCacheScope(response: unknown): GetProductsCacheScopeValidation {\n const requirement = getScopeRequirement(response);\n if (!requirement) return { ok: true };\n const scope = (response as { cache_scope?: unknown }).cache_scope;\n if (scope === undefined) return { ok: false, reason: 'missing_cache_scope' };\n if (!isCacheScope(scope)) return { ok: false, reason: 'invalid_cache_scope' };\n return { ok: true };\n}\n\n/**\n * Return a get_products response whose populated/unchanged branches always\n * carry cache_scope. Existing valid values are preserved. Missing values are\n * stamped with `defaultCacheScope` (default 'account'); invalid values throw.\n *\n * Use this at storefront/composition boundaries when upstream inventory\n * sources have not yet adopted the 3.1 cache-scope field. Defaulting to\n * 'account' avoids accidentally keying account overlays under a public cache.\n */\nexport function ensureGetProductsCacheScope<T extends object>(\n response: T,\n options: EnsureGetProductsCacheScopeOptions = {}\n): GetProductsResponseWithCacheScope<T> {\n const requirement = getScopeRequirement(response);\n if (!requirement) return response as unknown as GetProductsResponseWithCacheScope<T>;\n\n const current = (response as { cache_scope?: unknown }).cache_scope;\n if (isCacheScope(current)) return response as unknown as GetProductsResponseWithCacheScope<T>;\n if (current !== undefined) {\n throw new Error(\n `get_products cache_scope must be 'public' or 'account' when products are present or unchanged: true; got ${JSON.stringify(current)}.`\n );\n }\n\n const cacheScope = options.defaultCacheScope ?? 'account';\n const normalized = { ...response, cache_scope: cacheScope };\n const productCount = (response as { products?: unknown }).products;\n options.onInject?.({\n cache_scope: cacheScope,\n reason: requirement,\n product_count: Array.isArray(productCount) ? productCount.length : undefined,\n });\n // Runtime guards above prove the returned branch has a valid cache_scope.\n // TypeScript cannot express that conditional augmentation for arbitrary\n // generated interfaces, especially ones without index signatures.\n return normalized as unknown as GetProductsResponseWithCacheScope<T>;\n}\n"],"mappings":"AAoCA,SAAS,oBAAoB,UAAiE;AAC5F,MAAI,YAAY,QAAQ,OAAO,aAAa,YAAY,MAAM,QAAQ,QAAQ,EAAG,QAAO;AACxF,QAAM,QAAQ;AACd,MAAI,MAAM,QAAQ,MAAM,QAAQ,EAAG,QAAO;AAC1C,MAAI,MAAM,cAAc,KAAM,QAAO;AACrC,SAAO;AACT;AAEA,SAAS,aAAa,OAAgD;AACpE,SAAO,UAAU,YAAY,UAAU;AACzC;AAOO,SAAS,8BAA8B,UAAoD;AAChG,QAAM,cAAc,oBAAoB,QAAQ;AAChD,MAAI,CAAC,YAAa,QAAO,EAAE,IAAI,KAAK;AACpC,QAAM,QAAS,SAAuC;AACtD,MAAI,UAAU,OAAW,QAAO,EAAE,IAAI,OAAO,QAAQ,sBAAsB;AAC3E,MAAI,CAAC,aAAa,KAAK,EAAG,QAAO,EAAE,IAAI,OAAO,QAAQ,sBAAsB;AAC5E,SAAO,EAAE,IAAI,KAAK;AACpB;AAWO,SAAS,4BACd,UACA,UAA8C,CAAC,GACT;AACtC,QAAM,cAAc,oBAAoB,QAAQ;AAChD,MAAI,CAAC,YAAa,QAAO;AAEzB,QAAM,UAAW,SAAuC;AACxD,MAAI,aAAa,OAAO,EAAG,QAAO;AAClC,MAAI,YAAY,QAAW;AACzB,UAAM,IAAI;AAAA,MACR,4GAA4G,KAAK,UAAU,OAAO,CAAC;AAAA,IACrI;AAAA,EACF;AAEA,QAAM,aAAa,QAAQ,qBAAqB;AAChD,QAAM,aAAa,EAAE,GAAG,UAAU,aAAa,WAAW;AAC1D,QAAM,eAAgB,SAAoC;AAC1D,UAAQ,WAAW;AAAA,IACjB,aAAa;AAAA,IACb,QAAQ;AAAA,IACR,eAAe,MAAM,QAAQ,YAAY,IAAI,aAAa,SAAS;AAAA,EACrE,CAAC;AAID,SAAO;AACT;","names":[]}
|
package/dist/lib/utils/glob.mjs
CHANGED
|
@@ -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 globToRegExp(pattern) {
|
|
8
2
|
const escaped = pattern.replace(/[.+?^${}()|[\]\\]/g, "\\$&").replace(/\*+/g, "*").replace(/\*/g, ".*");
|
|
9
3
|
return new RegExp(`^${escaped}$`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/utils/glob.ts"],"sourcesContent":["/**\n * Shared glob-to-regex translator for `endpoint_pattern` matching.\n *\n * Used on both sides of the `upstream_traffic` round-trip:\n * - `@adcp/sdk/upstream-recorder` filters its own buffer when the adopter's\n * controller calls `recorder.query({ endpointPattern })`.\n * - The storyboard runner filters `recorded_calls[]` returned by the\n * controller when grading `upstream_traffic` validations.\n *\n * If the two implementations drift, the runner-side filter could surface\n * different calls than the producer-side filter would — different verdict\n * on the same storyboard. One implementation, one test, no drift.\n *\n * Grammar (ratified by spec PR adcontextprotocol/adcp#3987):\n * - `*` matches zero or more characters of any kind, including `/`.\n * - All other characters are literal — `?`, `[`, `]`, `(`, `)` etc. are\n * escaped to themselves so a path-component like `?cohort=1` doesn't\n * accidentally act as a regex quantifier.\n * - No escape mechanism — `*` is always a wildcard. Callers needing\n * literal-asterisk matching omit `endpoint_pattern` and filter\n * response-side.\n * - Match is anchored (full-string), not substring search.\n *\n * Defense against catastrophic-backtracking on `'**********'`-style\n * patterns: consecutive `*`s coalesce to a single `*` before the\n * `* → .*` substitution, so the resulting regex has at most one `.*`\n * per literal-segment boundary.\n */\nexport function globToRegExp(pattern: string): RegExp {\n const escaped = pattern\n .replace(/[.+?^${}()|[\\]\\\\]/g, '\\\\$&')\n .replace(/\\*+/g, '*')\n .replace(/\\*/g, '.*');\n return new RegExp(`^${escaped}$`);\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/utils/glob.ts"],"sourcesContent":["/**\n * Shared glob-to-regex translator for `endpoint_pattern` matching.\n *\n * Used on both sides of the `upstream_traffic` round-trip:\n * - `@adcp/sdk/upstream-recorder` filters its own buffer when the adopter's\n * controller calls `recorder.query({ endpointPattern })`.\n * - The storyboard runner filters `recorded_calls[]` returned by the\n * controller when grading `upstream_traffic` validations.\n *\n * If the two implementations drift, the runner-side filter could surface\n * different calls than the producer-side filter would — different verdict\n * on the same storyboard. One implementation, one test, no drift.\n *\n * Grammar (ratified by spec PR adcontextprotocol/adcp#3987):\n * - `*` matches zero or more characters of any kind, including `/`.\n * - All other characters are literal — `?`, `[`, `]`, `(`, `)` etc. are\n * escaped to themselves so a path-component like `?cohort=1` doesn't\n * accidentally act as a regex quantifier.\n * - No escape mechanism — `*` is always a wildcard. Callers needing\n * literal-asterisk matching omit `endpoint_pattern` and filter\n * response-side.\n * - Match is anchored (full-string), not substring search.\n *\n * Defense against catastrophic-backtracking on `'**********'`-style\n * patterns: consecutive `*`s coalesce to a single `*` before the\n * `* → .*` substitution, so the resulting regex has at most one `.*`\n * per literal-segment boundary.\n */\nexport function globToRegExp(pattern: string): RegExp {\n const escaped = pattern\n .replace(/[.+?^${}()|[\\]\\\\]/g, '\\\\$&')\n .replace(/\\*+/g, '*')\n .replace(/\\*/g, '.*');\n return new RegExp(`^${escaped}$`);\n}\n"],"mappings":"AA4BO,SAAS,aAAa,SAAyB;AACpD,QAAM,UAAU,QACb,QAAQ,sBAAsB,MAAM,EACpC,QAAQ,QAAQ,GAAG,EACnB,QAAQ,OAAO,IAAI;AACtB,SAAO,IAAI,OAAO,IAAI,OAAO,GAAG;AAClC;","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 { AsyncLocalStorage } from "node:async_hooks";
|
|
8
2
|
function globalAsyncLocalStorage(key) {
|
|
9
3
|
const registryKey = /* @__PURE__ */ Symbol.for(`@adcp/sdk.als.${key}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/utils/global-async-local-storage.ts"],"sourcesContent":["import { AsyncLocalStorage } from 'node:async_hooks';\n\n/**\n * Returns a process-global {@link AsyncLocalStorage} identified by `key`.\n *\n * The package ships both an ESM and a CommonJS build. If a single process\n * loads both (some dependencies `import` @adcp/sdk while others `require` it),\n * each build would otherwise construct its own `AsyncLocalStorage`. A\n * `.run(...)` established on one copy is then invisible to a `.getStore()` on\n * the other, so request-signing and response-capture context would silently\n * disappear — requests could go out unsigned with no error. Anchoring the\n * instance on the global symbol registry guarantees a single shared store no\n * matter how many copies of this module exist.\n */\nexport function globalAsyncLocalStorage<T>(key: string): AsyncLocalStorage<T> {\n const registryKey = Symbol.for(`@adcp/sdk.als.${key}`);\n const registry = globalThis as unknown as Record<symbol, AsyncLocalStorage<T> | undefined>;\n const existing = registry[registryKey];\n if (existing) return existing;\n const created = new AsyncLocalStorage<T>();\n registry[registryKey] = created;\n return created;\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/utils/global-async-local-storage.ts"],"sourcesContent":["import { AsyncLocalStorage } from 'node:async_hooks';\n\n/**\n * Returns a process-global {@link AsyncLocalStorage} identified by `key`.\n *\n * The package ships both an ESM and a CommonJS build. If a single process\n * loads both (some dependencies `import` @adcp/sdk while others `require` it),\n * each build would otherwise construct its own `AsyncLocalStorage`. A\n * `.run(...)` established on one copy is then invisible to a `.getStore()` on\n * the other, so request-signing and response-capture context would silently\n * disappear — requests could go out unsigned with no error. Anchoring the\n * instance on the global symbol registry guarantees a single shared store no\n * matter how many copies of this module exist.\n */\nexport function globalAsyncLocalStorage<T>(key: string): AsyncLocalStorage<T> {\n const registryKey = Symbol.for(`@adcp/sdk.als.${key}`);\n const registry = globalThis as unknown as Record<symbol, AsyncLocalStorage<T> | undefined>;\n const existing = registry[registryKey];\n if (existing) return existing;\n const created = new AsyncLocalStorage<T>();\n registry[registryKey] = created;\n return created;\n}\n"],"mappings":"AAAA,SAAS,yBAAyB;AAc3B,SAAS,wBAA2B,KAAmC;AAC5E,QAAM,cAAc,uBAAO,IAAI,iBAAiB,GAAG,EAAE;AACrD,QAAM,WAAW;AACjB,QAAM,WAAW,SAAS,WAAW;AACrC,MAAI,SAAU,QAAO;AACrB,QAAM,UAAU,IAAI,kBAAqB;AACzC,WAAS,WAAW,IAAI;AACxB,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
|
import { randomUUID } from "crypto";
|
|
8
2
|
import { TOOL_REQUEST_SCHEMAS } from "./tool-request-schemas.mjs";
|
|
9
3
|
const MUTATING_TASKS = deriveMutatingTasks();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/utils/idempotency.ts"],"sourcesContent":["/**\n * Idempotency key ergonomics for AdCP mutating requests.\n *\n * AdCP v3 requires an `idempotency_key` on every mutating request. This\n * module handles two things the SDK owns:\n *\n * 1. Knowing which tools are mutating (so we auto-generate for them and not\n * for read-only tools).\n * 2. Generating UUID v4 keys that satisfy the spec's\n * `^[A-Za-z0-9_.:-]{16,255}$` pattern.\n */\n\nimport { randomUUID } from 'crypto';\nimport { TOOL_REQUEST_SCHEMAS } from './tool-request-schemas';\n\n/**\n * Tools whose request schema requires `idempotency_key`.\n *\n * Derived from the Zod schemas at module load so this stays in sync with\n * the upstream AdCP schema — no hand-maintained list to drift.\n *\n * `si_terminate_session` is intentionally excluded even though it's a\n * mutating operation: the spec documents it as naturally idempotent via\n * `session_id` (terminate twice = no-op).\n */\nexport const MUTATING_TASKS: ReadonlySet<string> = deriveMutatingTasks();\n\nfunction deriveMutatingTasks(): Set<string> {\n const result = new Set<string>();\n for (const [toolName, schema] of Object.entries(TOOL_REQUEST_SCHEMAS)) {\n if (!schema) continue;\n const shape = (schema as { shape?: Record<string, unknown> }).shape;\n if (!shape) continue;\n const field = shape.idempotency_key;\n if (!field) continue;\n if (isRequiredZodField(field)) {\n result.add(toolName);\n }\n }\n return result;\n}\n\nfunction isRequiredZodField(field: unknown): boolean {\n const def = (field as { _def?: { typeName?: string } })?._def;\n if (!def) return false;\n // Zod wraps optional fields in ZodOptional or ZodDefault. Required = neither.\n return def.typeName !== 'ZodOptional' && def.typeName !== 'ZodDefault';\n}\n\n/**\n * Whether a tool's request schema requires `idempotency_key`.\n *\n * Callers use this to decide whether to auto-generate a key when one isn't\n * provided. Unknown tool names return `false` — we don't guess.\n */\nexport function isMutatingTask(toolName: string): boolean {\n return MUTATING_TASKS.has(toolName);\n}\n\n/**\n * Generate a fresh idempotency key for a mutating request.\n *\n * Returns a UUID v4, which satisfies the spec's\n * `^[A-Za-z0-9_.:-]{16,255}$` pattern and provides ≥122 bits of entropy\n * (the spec minimum to prevent cache enumeration).\n */\nexport function generateIdempotencyKey(): string {\n return randomUUID();\n}\n\n/**\n * Pattern the spec requires `idempotency_key` to match. Exported so callers\n * doing BYOK can validate their keys before sending.\n */\nexport const IDEMPOTENCY_KEY_PATTERN = /^[A-Za-z0-9_.:-]{16,255}$/;\n\n/**\n * Validate that a key matches the spec pattern. Useful for callers that\n * persist keys (e.g., bring-your-own-key from a database) and want to\n * catch drift early.\n */\nexport function isValidIdempotencyKey(key: string): boolean {\n return IDEMPOTENCY_KEY_PATTERN.test(key);\n}\n\n/**\n * Utility type: take a generated request interface that requires\n * `idempotency_key` and make that field optional for callers.\n *\n * The SDK auto-generates a UUID v4 when callers don't provide one, so\n * public client signatures use this loosened input type. Callers who\n * want byte-identical retries across process restarts still pass their\n * own key — it's just no longer required at compile time.\n */\nexport type MutatingRequestInput<T extends { idempotency_key: string }> = Omit<T, 'idempotency_key'> & {\n idempotency_key?: string;\n};\n\n/**\n * Validate a bring-your-own-key `idempotency_key` up front and return a\n * `{ idempotency_key }` fragment to spread into a mutating request.\n *\n * Useful when the caller persists keys across process restarts (e.g., key\n * stored in a DB alongside a campaign row) and wants to catch drift before\n * the round-trip — the server would reject a malformed key with\n * `INVALID_REQUEST`, but failing locally produces a faster, cleaner error.\n *\n * Throws when the key doesn't match `IDEMPOTENCY_KEY_PATTERN`\n * (`^[A-Za-z0-9_.:-]{16,255}$`).\n *\n * @example\n * ```ts\n * const key = await db.getOrCreateIdempotencyKey(campaign.id);\n * const result = await client.createMediaBuy({ ...params, ...useIdempotencyKey(key) });\n * ```\n */\nexport function useIdempotencyKey(key: string): { idempotency_key: string } {\n if (typeof key !== 'string' || !isValidIdempotencyKey(key)) {\n // Preview only 8 chars so near-valid keys (16+ chars, minor drift) don't\n // flow verbatim into exception messages and stack traces. Matches the\n // redactIdempotencyKey() policy for debug logs.\n const preview =\n typeof key === 'string' ? `${JSON.stringify(key.slice(0, 8))}${key.length > 8 ? '…' : ''}` : typeof key;\n throw new Error(`Invalid idempotency_key: must match ${IDEMPOTENCY_KEY_PATTERN}. Received: ${preview}`);\n }\n return { idempotency_key: key };\n}\n\n/**\n * True when the caller has opted into logging full idempotency keys via the\n * `ADCP_LOG_IDEMPOTENCY_KEYS` environment variable. Keys are a retry-pattern\n * oracle within their TTL, so the default is to truncate.\n */\nfunction fullIdempotencyKeyLoggingEnabled(): boolean {\n const value = process.env.ADCP_LOG_IDEMPOTENCY_KEYS;\n if (!value) return false;\n const v = value.toLowerCase();\n return v === '1' || v === 'true' || v === 'yes';\n}\n\n/**\n * Truncate an idempotency key for logging — first 8 chars followed by `…`.\n * Callers who need the full key for debugging can opt in via\n * `ADCP_LOG_IDEMPOTENCY_KEYS=1`.\n */\nexport function redactIdempotencyKey(key: string): string {\n if (fullIdempotencyKeyLoggingEnabled()) return key;\n if (typeof key !== 'string' || key.length === 0) return key;\n return `${key.slice(0, 8)}…`;\n}\n\n/**\n * Return a shallow copy of `args` with any `idempotency_key` field replaced by\n * its truncated form for safe debug logging. Leaves non-key fields untouched.\n * No-op when `ADCP_LOG_IDEMPOTENCY_KEYS` is set.\n */\nexport function redactIdempotencyKeyInArgs<T extends Record<string, unknown>>(args: T): T {\n if (!args || typeof args !== 'object') return args;\n if (!('idempotency_key' in args) || typeof args.idempotency_key !== 'string') return args;\n if (fullIdempotencyKeyLoggingEnabled()) return args;\n return { ...args, idempotency_key: redactIdempotencyKey(args.idempotency_key) } as T;\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/utils/idempotency.ts"],"sourcesContent":["/**\n * Idempotency key ergonomics for AdCP mutating requests.\n *\n * AdCP v3 requires an `idempotency_key` on every mutating request. This\n * module handles two things the SDK owns:\n *\n * 1. Knowing which tools are mutating (so we auto-generate for them and not\n * for read-only tools).\n * 2. Generating UUID v4 keys that satisfy the spec's\n * `^[A-Za-z0-9_.:-]{16,255}$` pattern.\n */\n\nimport { randomUUID } from 'crypto';\nimport { TOOL_REQUEST_SCHEMAS } from './tool-request-schemas';\n\n/**\n * Tools whose request schema requires `idempotency_key`.\n *\n * Derived from the Zod schemas at module load so this stays in sync with\n * the upstream AdCP schema — no hand-maintained list to drift.\n *\n * `si_terminate_session` is intentionally excluded even though it's a\n * mutating operation: the spec documents it as naturally idempotent via\n * `session_id` (terminate twice = no-op).\n */\nexport const MUTATING_TASKS: ReadonlySet<string> = deriveMutatingTasks();\n\nfunction deriveMutatingTasks(): Set<string> {\n const result = new Set<string>();\n for (const [toolName, schema] of Object.entries(TOOL_REQUEST_SCHEMAS)) {\n if (!schema) continue;\n const shape = (schema as { shape?: Record<string, unknown> }).shape;\n if (!shape) continue;\n const field = shape.idempotency_key;\n if (!field) continue;\n if (isRequiredZodField(field)) {\n result.add(toolName);\n }\n }\n return result;\n}\n\nfunction isRequiredZodField(field: unknown): boolean {\n const def = (field as { _def?: { typeName?: string } })?._def;\n if (!def) return false;\n // Zod wraps optional fields in ZodOptional or ZodDefault. Required = neither.\n return def.typeName !== 'ZodOptional' && def.typeName !== 'ZodDefault';\n}\n\n/**\n * Whether a tool's request schema requires `idempotency_key`.\n *\n * Callers use this to decide whether to auto-generate a key when one isn't\n * provided. Unknown tool names return `false` — we don't guess.\n */\nexport function isMutatingTask(toolName: string): boolean {\n return MUTATING_TASKS.has(toolName);\n}\n\n/**\n * Generate a fresh idempotency key for a mutating request.\n *\n * Returns a UUID v4, which satisfies the spec's\n * `^[A-Za-z0-9_.:-]{16,255}$` pattern and provides ≥122 bits of entropy\n * (the spec minimum to prevent cache enumeration).\n */\nexport function generateIdempotencyKey(): string {\n return randomUUID();\n}\n\n/**\n * Pattern the spec requires `idempotency_key` to match. Exported so callers\n * doing BYOK can validate their keys before sending.\n */\nexport const IDEMPOTENCY_KEY_PATTERN = /^[A-Za-z0-9_.:-]{16,255}$/;\n\n/**\n * Validate that a key matches the spec pattern. Useful for callers that\n * persist keys (e.g., bring-your-own-key from a database) and want to\n * catch drift early.\n */\nexport function isValidIdempotencyKey(key: string): boolean {\n return IDEMPOTENCY_KEY_PATTERN.test(key);\n}\n\n/**\n * Utility type: take a generated request interface that requires\n * `idempotency_key` and make that field optional for callers.\n *\n * The SDK auto-generates a UUID v4 when callers don't provide one, so\n * public client signatures use this loosened input type. Callers who\n * want byte-identical retries across process restarts still pass their\n * own key — it's just no longer required at compile time.\n */\nexport type MutatingRequestInput<T extends { idempotency_key: string }> = Omit<T, 'idempotency_key'> & {\n idempotency_key?: string;\n};\n\n/**\n * Validate a bring-your-own-key `idempotency_key` up front and return a\n * `{ idempotency_key }` fragment to spread into a mutating request.\n *\n * Useful when the caller persists keys across process restarts (e.g., key\n * stored in a DB alongside a campaign row) and wants to catch drift before\n * the round-trip — the server would reject a malformed key with\n * `INVALID_REQUEST`, but failing locally produces a faster, cleaner error.\n *\n * Throws when the key doesn't match `IDEMPOTENCY_KEY_PATTERN`\n * (`^[A-Za-z0-9_.:-]{16,255}$`).\n *\n * @example\n * ```ts\n * const key = await db.getOrCreateIdempotencyKey(campaign.id);\n * const result = await client.createMediaBuy({ ...params, ...useIdempotencyKey(key) });\n * ```\n */\nexport function useIdempotencyKey(key: string): { idempotency_key: string } {\n if (typeof key !== 'string' || !isValidIdempotencyKey(key)) {\n // Preview only 8 chars so near-valid keys (16+ chars, minor drift) don't\n // flow verbatim into exception messages and stack traces. Matches the\n // redactIdempotencyKey() policy for debug logs.\n const preview =\n typeof key === 'string' ? `${JSON.stringify(key.slice(0, 8))}${key.length > 8 ? '…' : ''}` : typeof key;\n throw new Error(`Invalid idempotency_key: must match ${IDEMPOTENCY_KEY_PATTERN}. Received: ${preview}`);\n }\n return { idempotency_key: key };\n}\n\n/**\n * True when the caller has opted into logging full idempotency keys via the\n * `ADCP_LOG_IDEMPOTENCY_KEYS` environment variable. Keys are a retry-pattern\n * oracle within their TTL, so the default is to truncate.\n */\nfunction fullIdempotencyKeyLoggingEnabled(): boolean {\n const value = process.env.ADCP_LOG_IDEMPOTENCY_KEYS;\n if (!value) return false;\n const v = value.toLowerCase();\n return v === '1' || v === 'true' || v === 'yes';\n}\n\n/**\n * Truncate an idempotency key for logging — first 8 chars followed by `…`.\n * Callers who need the full key for debugging can opt in via\n * `ADCP_LOG_IDEMPOTENCY_KEYS=1`.\n */\nexport function redactIdempotencyKey(key: string): string {\n if (fullIdempotencyKeyLoggingEnabled()) return key;\n if (typeof key !== 'string' || key.length === 0) return key;\n return `${key.slice(0, 8)}…`;\n}\n\n/**\n * Return a shallow copy of `args` with any `idempotency_key` field replaced by\n * its truncated form for safe debug logging. Leaves non-key fields untouched.\n * No-op when `ADCP_LOG_IDEMPOTENCY_KEYS` is set.\n */\nexport function redactIdempotencyKeyInArgs<T extends Record<string, unknown>>(args: T): T {\n if (!args || typeof args !== 'object') return args;\n if (!('idempotency_key' in args) || typeof args.idempotency_key !== 'string') return args;\n if (fullIdempotencyKeyLoggingEnabled()) return args;\n return { ...args, idempotency_key: redactIdempotencyKey(args.idempotency_key) } as T;\n}\n"],"mappings":"AAYA,SAAS,kBAAkB;AAC3B,SAAS,4BAA4B;AAY9B,MAAM,iBAAsC,oBAAoB;AAEvE,SAAS,sBAAmC;AAC1C,QAAM,SAAS,oBAAI,IAAY;AAC/B,aAAW,CAAC,UAAU,MAAM,KAAK,OAAO,QAAQ,oBAAoB,GAAG;AACrE,QAAI,CAAC,OAAQ;AACb,UAAM,QAAS,OAA+C;AAC9D,QAAI,CAAC,MAAO;AACZ,UAAM,QAAQ,MAAM;AACpB,QAAI,CAAC,MAAO;AACZ,QAAI,mBAAmB,KAAK,GAAG;AAC7B,aAAO,IAAI,QAAQ;AAAA,IACrB;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,mBAAmB,OAAyB;AACnD,QAAM,MAAO,OAA4C;AACzD,MAAI,CAAC,IAAK,QAAO;AAEjB,SAAO,IAAI,aAAa,iBAAiB,IAAI,aAAa;AAC5D;AAQO,SAAS,eAAe,UAA2B;AACxD,SAAO,eAAe,IAAI,QAAQ;AACpC;AASO,SAAS,yBAAiC;AAC/C,SAAO,WAAW;AACpB;AAMO,MAAM,0BAA0B;AAOhC,SAAS,sBAAsB,KAAsB;AAC1D,SAAO,wBAAwB,KAAK,GAAG;AACzC;AAiCO,SAAS,kBAAkB,KAA0C;AAC1E,MAAI,OAAO,QAAQ,YAAY,CAAC,sBAAsB,GAAG,GAAG;AAI1D,UAAM,UACJ,OAAO,QAAQ,WAAW,GAAG,KAAK,UAAU,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,SAAS,IAAI,WAAM,EAAE,KAAK,OAAO;AACtG,UAAM,IAAI,MAAM,uCAAuC,uBAAuB,eAAe,OAAO,EAAE;AAAA,EACxG;AACA,SAAO,EAAE,iBAAiB,IAAI;AAChC;AAOA,SAAS,mCAA4C;AACnD,QAAM,QAAQ,QAAQ,IAAI;AAC1B,MAAI,CAAC,MAAO,QAAO;AACnB,QAAM,IAAI,MAAM,YAAY;AAC5B,SAAO,MAAM,OAAO,MAAM,UAAU,MAAM;AAC5C;AAOO,SAAS,qBAAqB,KAAqB;AACxD,MAAI,iCAAiC,EAAG,QAAO;AAC/C,MAAI,OAAO,QAAQ,YAAY,IAAI,WAAW,EAAG,QAAO;AACxD,SAAO,GAAG,IAAI,MAAM,GAAG,CAAC,CAAC;AAC3B;AAOO,SAAS,2BAA8D,MAAY;AACxF,MAAI,CAAC,QAAQ,OAAO,SAAS,SAAU,QAAO;AAC9C,MAAI,EAAE,qBAAqB,SAAS,OAAO,KAAK,oBAAoB,SAAU,QAAO;AACrF,MAAI,iCAAiC,EAAG,QAAO;AAC/C,SAAO,EAAE,GAAG,MAAM,iBAAiB,qBAAqB,KAAK,eAAe,EAAE;AAChF;","names":[]}
|
package/dist/lib/utils/index.mjs
CHANGED
|
@@ -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 { logger, createLogger } from "./logger.mjs";
|
|
8
2
|
import { logger as logger2 } from "./logger.mjs";
|
|
9
3
|
import {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/utils/index.ts"],"sourcesContent":["import type { CreativeFormat } from '../types';\n\n// Re-export logger utilities\nexport { logger, createLogger, type LogLevel, type LoggerConfig } from './logger';\nimport { logger } from './logger';\n\n// Re-export preview utilities\nexport {\n batchPreviewProducts,\n batchPreviewFormats,\n clearPreviewCache,\n type PreviewResult,\n type BatchPreviewOptions,\n type PreviewCacheBackend,\n type PreviewCacheEntry,\n} from './preview-utils';\n\n// Configuration constants\nexport const REQUEST_TIMEOUT = parseInt(process.env.REQUEST_TIMEOUT || '30000'); // 30 seconds\nexport const MAX_CONCURRENT = parseInt(process.env.MAX_CONCURRENT || '5');\n\n// Standard creative formats (hardcoded for now)\nexport const STANDARD_FORMATS: CreativeFormat[] = [\n {\n format_id: {\n agent_url: 'https://creatives.adcontextprotocol.org',\n id: 'banner_728x90',\n },\n name: 'Leaderboard',\n dimensions: { width: 728, height: 90 },\n aspect_ratio: '8:1',\n file_types: ['jpg', 'jpeg', 'png', 'gif'],\n max_file_size: 150000,\n },\n {\n format_id: {\n agent_url: 'https://creatives.adcontextprotocol.org',\n id: 'banner_300x250',\n },\n name: 'Medium Rectangle',\n dimensions: { width: 300, height: 250 },\n aspect_ratio: '6:5',\n file_types: ['jpg', 'jpeg', 'png', 'gif'],\n max_file_size: 150000,\n },\n {\n format_id: {\n agent_url: 'https://creatives.adcontextprotocol.org',\n id: 'banner_320x50',\n },\n name: 'Mobile Banner',\n dimensions: { width: 320, height: 50 },\n aspect_ratio: '32:5',\n file_types: ['jpg', 'jpeg', 'png', 'gif'],\n max_file_size: 40000,\n },\n {\n format_id: {\n agent_url: 'https://creatives.adcontextprotocol.org',\n id: 'video_1920x1080',\n },\n name: 'Full HD Video',\n dimensions: { width: 1920, height: 1080 },\n aspect_ratio: '16:9',\n file_types: ['mp4', 'webm'],\n max_file_size: 10000000,\n duration_range: { min: 6, max: 30 },\n },\n];\n\n/**\n * Circuit Breaker for handling agent failures\n */\nexport class CircuitBreaker {\n private failures = 0;\n private lastFailTime = 0;\n private state: 'closed' | 'open' | 'half-open' = 'closed';\n private readonly failureThreshold = 5;\n private readonly resetTimeout = 60000; // 1 minute\n\n constructor(private agentId: string) {}\n\n async call<T>(fn: () => Promise<T>): Promise<T> {\n if (this.state === 'open') {\n if (Date.now() - this.lastFailTime > this.resetTimeout) {\n this.state = 'half-open';\n logger.info(`🔄 Circuit breaker for ${this.agentId} attempting to close...`);\n } else {\n throw new Error(`Circuit breaker is open for agent ${this.agentId}`);\n }\n }\n\n try {\n const result = await fn();\n this.onSuccess();\n return result;\n } catch (error) {\n this.onFailure();\n throw error;\n }\n }\n\n private onSuccess(): void {\n this.failures = 0;\n if (this.state === 'half-open') {\n this.state = 'closed';\n logger.info(`✅ Circuit breaker for ${this.agentId} closed successfully`);\n }\n }\n\n private onFailure(): void {\n this.failures++;\n this.lastFailTime = Date.now();\n\n if (this.failures >= this.failureThreshold) {\n this.state = 'open';\n logger.warn(`🚨 Circuit breaker opened for agent ${this.agentId} after ${this.failures} failures`);\n }\n }\n}\n\n// Circuit breaker instances for each agent\nconst circuitBreakers = new Map<string, CircuitBreaker>();\n\nexport function getCircuitBreaker(agentId: string): CircuitBreaker {\n if (!circuitBreakers.has(agentId)) {\n circuitBreakers.set(agentId, new CircuitBreaker(agentId));\n }\n return circuitBreakers.get(agentId)!;\n}\n\n/**\n * Get standard creative formats\n */\nexport function getStandardFormats(): CreativeFormat[] {\n return STANDARD_FORMATS;\n}\n\n// Re-export response unwrapping utilities\nexport {\n unwrapProtocolResponse,\n isAdcpError,\n isAdcpSuccess,\n isTerminalAdcpError,\n hasAdvisorySuccessPayload,\n} from './response-unwrapper';\nexport type { AdCPResponse } from './response-unwrapper';\nexport {\n ensureGetProductsCacheScope,\n validateGetProductsCacheScope,\n type EnsureGetProductsCacheScopeOptions,\n type GetProductsCacheScope,\n type GetProductsResponseWithCacheScope,\n type GetProductsCacheScopeValidation,\n} from './get-products-cache-scope';\nexport { getAuthoritativeMediaBuyStatus, isMediaBuyStatus } from './media-buy-status';\nexport {\n resolveTaskState,\n type EffectiveTaskState,\n type ResolvedTaskState,\n type ResolveTaskStateOptions,\n} from './task-state';\n\n// Lightweight MCP CallToolResult extractor (prefers structuredContent, falls back to JSON text).\nexport { extractResult, type ToolCallResultLike } from './extract-result';\n\n// Re-export retry utilities\nexport { isRetryable, getRetryDelay } from './retry';\n\n// Re-export error extraction utilities\nexport {\n extractAdcpErrorFromMcp,\n extractAdcpErrorFromTransport,\n extractAdcpErrorInfo,\n extractCorrelationId,\n resolveRecovery,\n getExpectedAction,\n} from './error-extraction';\nexport type { ExtractedAdcpError } from './error-extraction';\n\n// Re-export protocol detection utilities\nexport { detectProtocol, detectProtocolWithTimeout } from './protocol-detection';\n\n// Re-export A2A discovery utilities\nexport {\n A2A_CARD_PATHS,\n TRANSPORT_SUFFIX_REGEX,\n isAgentCardPath,\n isWellKnownAgentCardUrl,\n buildCardUrls,\n stripAgentCardPath,\n stripTransportSuffix,\n} from './a2a-discovery';\n\n// Re-export format asset utilities\nexport {\n getFormatAssets,\n getRequiredAssets,\n getOptionalAssets,\n getIndividualAssets,\n getRepeatableGroups,\n usesDeprecatedAssetsField,\n getAssetCount,\n hasAssets,\n} from './format-assets';\n\n// Re-export pricing adapter utilities (v3 pricing field compatibility)\nexport {\n adaptGetProductsRequestForV2,\n normalizeProductChannels,\n adaptPricingOptionForV2,\n normalizePricingOption,\n normalizeProductPricing,\n normalizeGetProductsResponse,\n usesV2PricingFields,\n usesV3PricingFields,\n isFixedPricing,\n isCPAPricing,\n getPrice,\n getFloorPrice,\n type PricingOptionV2,\n type PricingOptionV3,\n type PriceGuidanceV2,\n type PriceGuidanceV3,\n} from './pricing-adapter';\n\n// Re-export sync creatives adapter (v2/v3 compatibility)\nexport { adaptSyncCreativesRequestForV2 } from './sync-creatives-adapter';\n\n// Re-export creative delivery helpers for package-scoped inline creatives\nexport { inlineCreativesForPackages } from './creative-delivery';\nexport type {\n InlineCreativeAssignment,\n InlineCreativePackage,\n InlineCreativePackagePatch,\n InlineCreativesForPackagesOptions,\n} from './creative-delivery';\n\n// Re-export pagination utilities\nexport { paginate, paginatePages, type PaginateOptions } from './pagination';\n"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/utils/index.ts"],"sourcesContent":["import type { CreativeFormat } from '../types';\n\n// Re-export logger utilities\nexport { logger, createLogger, type LogLevel, type LoggerConfig } from './logger';\nimport { logger } from './logger';\n\n// Re-export preview utilities\nexport {\n batchPreviewProducts,\n batchPreviewFormats,\n clearPreviewCache,\n type PreviewResult,\n type BatchPreviewOptions,\n type PreviewCacheBackend,\n type PreviewCacheEntry,\n} from './preview-utils';\n\n// Configuration constants\nexport const REQUEST_TIMEOUT = parseInt(process.env.REQUEST_TIMEOUT || '30000'); // 30 seconds\nexport const MAX_CONCURRENT = parseInt(process.env.MAX_CONCURRENT || '5');\n\n// Standard creative formats (hardcoded for now)\nexport const STANDARD_FORMATS: CreativeFormat[] = [\n {\n format_id: {\n agent_url: 'https://creatives.adcontextprotocol.org',\n id: 'banner_728x90',\n },\n name: 'Leaderboard',\n dimensions: { width: 728, height: 90 },\n aspect_ratio: '8:1',\n file_types: ['jpg', 'jpeg', 'png', 'gif'],\n max_file_size: 150000,\n },\n {\n format_id: {\n agent_url: 'https://creatives.adcontextprotocol.org',\n id: 'banner_300x250',\n },\n name: 'Medium Rectangle',\n dimensions: { width: 300, height: 250 },\n aspect_ratio: '6:5',\n file_types: ['jpg', 'jpeg', 'png', 'gif'],\n max_file_size: 150000,\n },\n {\n format_id: {\n agent_url: 'https://creatives.adcontextprotocol.org',\n id: 'banner_320x50',\n },\n name: 'Mobile Banner',\n dimensions: { width: 320, height: 50 },\n aspect_ratio: '32:5',\n file_types: ['jpg', 'jpeg', 'png', 'gif'],\n max_file_size: 40000,\n },\n {\n format_id: {\n agent_url: 'https://creatives.adcontextprotocol.org',\n id: 'video_1920x1080',\n },\n name: 'Full HD Video',\n dimensions: { width: 1920, height: 1080 },\n aspect_ratio: '16:9',\n file_types: ['mp4', 'webm'],\n max_file_size: 10000000,\n duration_range: { min: 6, max: 30 },\n },\n];\n\n/**\n * Circuit Breaker for handling agent failures\n */\nexport class CircuitBreaker {\n private failures = 0;\n private lastFailTime = 0;\n private state: 'closed' | 'open' | 'half-open' = 'closed';\n private readonly failureThreshold = 5;\n private readonly resetTimeout = 60000; // 1 minute\n\n constructor(private agentId: string) {}\n\n async call<T>(fn: () => Promise<T>): Promise<T> {\n if (this.state === 'open') {\n if (Date.now() - this.lastFailTime > this.resetTimeout) {\n this.state = 'half-open';\n logger.info(`🔄 Circuit breaker for ${this.agentId} attempting to close...`);\n } else {\n throw new Error(`Circuit breaker is open for agent ${this.agentId}`);\n }\n }\n\n try {\n const result = await fn();\n this.onSuccess();\n return result;\n } catch (error) {\n this.onFailure();\n throw error;\n }\n }\n\n private onSuccess(): void {\n this.failures = 0;\n if (this.state === 'half-open') {\n this.state = 'closed';\n logger.info(`✅ Circuit breaker for ${this.agentId} closed successfully`);\n }\n }\n\n private onFailure(): void {\n this.failures++;\n this.lastFailTime = Date.now();\n\n if (this.failures >= this.failureThreshold) {\n this.state = 'open';\n logger.warn(`🚨 Circuit breaker opened for agent ${this.agentId} after ${this.failures} failures`);\n }\n }\n}\n\n// Circuit breaker instances for each agent\nconst circuitBreakers = new Map<string, CircuitBreaker>();\n\nexport function getCircuitBreaker(agentId: string): CircuitBreaker {\n if (!circuitBreakers.has(agentId)) {\n circuitBreakers.set(agentId, new CircuitBreaker(agentId));\n }\n return circuitBreakers.get(agentId)!;\n}\n\n/**\n * Get standard creative formats\n */\nexport function getStandardFormats(): CreativeFormat[] {\n return STANDARD_FORMATS;\n}\n\n// Re-export response unwrapping utilities\nexport {\n unwrapProtocolResponse,\n isAdcpError,\n isAdcpSuccess,\n isTerminalAdcpError,\n hasAdvisorySuccessPayload,\n} from './response-unwrapper';\nexport type { AdCPResponse } from './response-unwrapper';\nexport {\n ensureGetProductsCacheScope,\n validateGetProductsCacheScope,\n type EnsureGetProductsCacheScopeOptions,\n type GetProductsCacheScope,\n type GetProductsResponseWithCacheScope,\n type GetProductsCacheScopeValidation,\n} from './get-products-cache-scope';\nexport { getAuthoritativeMediaBuyStatus, isMediaBuyStatus } from './media-buy-status';\nexport {\n resolveTaskState,\n type EffectiveTaskState,\n type ResolvedTaskState,\n type ResolveTaskStateOptions,\n} from './task-state';\n\n// Lightweight MCP CallToolResult extractor (prefers structuredContent, falls back to JSON text).\nexport { extractResult, type ToolCallResultLike } from './extract-result';\n\n// Re-export retry utilities\nexport { isRetryable, getRetryDelay } from './retry';\n\n// Re-export error extraction utilities\nexport {\n extractAdcpErrorFromMcp,\n extractAdcpErrorFromTransport,\n extractAdcpErrorInfo,\n extractCorrelationId,\n resolveRecovery,\n getExpectedAction,\n} from './error-extraction';\nexport type { ExtractedAdcpError } from './error-extraction';\n\n// Re-export protocol detection utilities\nexport { detectProtocol, detectProtocolWithTimeout } from './protocol-detection';\n\n// Re-export A2A discovery utilities\nexport {\n A2A_CARD_PATHS,\n TRANSPORT_SUFFIX_REGEX,\n isAgentCardPath,\n isWellKnownAgentCardUrl,\n buildCardUrls,\n stripAgentCardPath,\n stripTransportSuffix,\n} from './a2a-discovery';\n\n// Re-export format asset utilities\nexport {\n getFormatAssets,\n getRequiredAssets,\n getOptionalAssets,\n getIndividualAssets,\n getRepeatableGroups,\n usesDeprecatedAssetsField,\n getAssetCount,\n hasAssets,\n} from './format-assets';\n\n// Re-export pricing adapter utilities (v3 pricing field compatibility)\nexport {\n adaptGetProductsRequestForV2,\n normalizeProductChannels,\n adaptPricingOptionForV2,\n normalizePricingOption,\n normalizeProductPricing,\n normalizeGetProductsResponse,\n usesV2PricingFields,\n usesV3PricingFields,\n isFixedPricing,\n isCPAPricing,\n getPrice,\n getFloorPrice,\n type PricingOptionV2,\n type PricingOptionV3,\n type PriceGuidanceV2,\n type PriceGuidanceV3,\n} from './pricing-adapter';\n\n// Re-export sync creatives adapter (v2/v3 compatibility)\nexport { adaptSyncCreativesRequestForV2 } from './sync-creatives-adapter';\n\n// Re-export creative delivery helpers for package-scoped inline creatives\nexport { inlineCreativesForPackages } from './creative-delivery';\nexport type {\n InlineCreativeAssignment,\n InlineCreativePackage,\n InlineCreativePackagePatch,\n InlineCreativesForPackagesOptions,\n} from './creative-delivery';\n\n// Re-export pagination utilities\nexport { paginate, paginatePages, type PaginateOptions } from './pagination';\n"],"mappings":"AAGA,SAAS,QAAQ,oBAAsD;AACvE,SAAS,UAAAA,eAAc;AAGvB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OAKK;AAGA,MAAM,kBAAkB,SAAS,QAAQ,IAAI,mBAAmB,OAAO;AACvE,MAAM,iBAAiB,SAAS,QAAQ,IAAI,kBAAkB,GAAG;AAGjE,MAAM,mBAAqC;AAAA,EAChD;AAAA,IACE,WAAW;AAAA,MACT,WAAW;AAAA,MACX,IAAI;AAAA,IACN;AAAA,IACA,MAAM;AAAA,IACN,YAAY,EAAE,OAAO,KAAK,QAAQ,GAAG;AAAA,IACrC,cAAc;AAAA,IACd,YAAY,CAAC,OAAO,QAAQ,OAAO,KAAK;AAAA,IACxC,eAAe;AAAA,EACjB;AAAA,EACA;AAAA,IACE,WAAW;AAAA,MACT,WAAW;AAAA,MACX,IAAI;AAAA,IACN;AAAA,IACA,MAAM;AAAA,IACN,YAAY,EAAE,OAAO,KAAK,QAAQ,IAAI;AAAA,IACtC,cAAc;AAAA,IACd,YAAY,CAAC,OAAO,QAAQ,OAAO,KAAK;AAAA,IACxC,eAAe;AAAA,EACjB;AAAA,EACA;AAAA,IACE,WAAW;AAAA,MACT,WAAW;AAAA,MACX,IAAI;AAAA,IACN;AAAA,IACA,MAAM;AAAA,IACN,YAAY,EAAE,OAAO,KAAK,QAAQ,GAAG;AAAA,IACrC,cAAc;AAAA,IACd,YAAY,CAAC,OAAO,QAAQ,OAAO,KAAK;AAAA,IACxC,eAAe;AAAA,EACjB;AAAA,EACA;AAAA,IACE,WAAW;AAAA,MACT,WAAW;AAAA,MACX,IAAI;AAAA,IACN;AAAA,IACA,MAAM;AAAA,IACN,YAAY,EAAE,OAAO,MAAM,QAAQ,KAAK;AAAA,IACxC,cAAc;AAAA,IACd,YAAY,CAAC,OAAO,MAAM;AAAA,IAC1B,eAAe;AAAA,IACf,gBAAgB,EAAE,KAAK,GAAG,KAAK,GAAG;AAAA,EACpC;AACF;AAKO,MAAM,eAAe;AAAA;AAAA,EAO1B,YAAoB,SAAiB;AAAjB;AAAA,EAAkB;AAAA,EAAlB;AAAA,EANZ,WAAW;AAAA,EACX,eAAe;AAAA,EACf,QAAyC;AAAA,EAChC,mBAAmB;AAAA,EACnB,eAAe;AAAA,EAIhC,MAAM,KAAQ,IAAkC;AAC9C,QAAI,KAAK,UAAU,QAAQ;AACzB,UAAI,KAAK,IAAI,IAAI,KAAK,eAAe,KAAK,cAAc;AACtD,aAAK,QAAQ;AACb,QAAAA,QAAO,KAAK,iCAA0B,KAAK,OAAO,yBAAyB;AAAA,MAC7E,OAAO;AACL,cAAM,IAAI,MAAM,qCAAqC,KAAK,OAAO,EAAE;AAAA,MACrE;AAAA,IACF;AAEA,QAAI;AACF,YAAM,SAAS,MAAM,GAAG;AACxB,WAAK,UAAU;AACf,aAAO;AAAA,IACT,SAAS,OAAO;AACd,WAAK,UAAU;AACf,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEQ,YAAkB;AACxB,SAAK,WAAW;AAChB,QAAI,KAAK,UAAU,aAAa;AAC9B,WAAK,QAAQ;AACb,MAAAA,QAAO,KAAK,8BAAyB,KAAK,OAAO,sBAAsB;AAAA,IACzE;AAAA,EACF;AAAA,EAEQ,YAAkB;AACxB,SAAK;AACL,SAAK,eAAe,KAAK,IAAI;AAE7B,QAAI,KAAK,YAAY,KAAK,kBAAkB;AAC1C,WAAK,QAAQ;AACb,MAAAA,QAAO,KAAK,8CAAuC,KAAK,OAAO,UAAU,KAAK,QAAQ,WAAW;AAAA,IACnG;AAAA,EACF;AACF;AAGA,MAAM,kBAAkB,oBAAI,IAA4B;AAEjD,SAAS,kBAAkB,SAAiC;AACjE,MAAI,CAAC,gBAAgB,IAAI,OAAO,GAAG;AACjC,oBAAgB,IAAI,SAAS,IAAI,eAAe,OAAO,CAAC;AAAA,EAC1D;AACA,SAAO,gBAAgB,IAAI,OAAO;AACpC;AAKO,SAAS,qBAAuC;AACrD,SAAO;AACT;AAGA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP;AAAA,EACE;AAAA,EACA;AAAA,OAKK;AACP,SAAS,gCAAgC,wBAAwB;AACjE;AAAA,EACE;AAAA,OAIK;AAGP,SAAS,qBAA8C;AAGvD,SAAS,aAAa,qBAAqB;AAG3C;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAIP,SAAS,gBAAgB,iCAAiC;AAG1D;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAGP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAGP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAKK;AAGP,SAAS,sCAAsC;AAG/C,SAAS,kCAAkC;AAS3C,SAAS,UAAU,qBAA2C;","names":["logger"]}
|
package/dist/lib/utils/jcs.mjs
CHANGED
|
@@ -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 { createHash } from "crypto";
|
|
8
2
|
function canonicalize(value) {
|
|
9
3
|
return serialize(value);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/utils/jcs.ts"],"sourcesContent":["/**\n * RFC 8785 JSON Canonicalization Scheme (JCS).\n *\n * Produces a byte-for-byte stable serialization of JSON values so two\n * semantically equivalent payloads hash to the same value across serializers,\n * languages, and whitespace choices. Used by the idempotency layer to compare\n * request payloads for equivalence without being fooled by key ordering,\n * whitespace, or number formatting.\n *\n * Spec: https://www.rfc-editor.org/rfc/rfc8785\n */\n\nimport { createHash } from 'crypto';\n\n/**\n * Canonicalize a JSON-serializable value per RFC 8785.\n *\n * - Object keys sorted by UTF-16 code units\n * - Numbers serialized per ECMAScript 7.1.12.1 (Number::toString)\n * - Strings escaped per RFC 8785 §3.2.2.2\n * - No insignificant whitespace\n *\n * Throws if the value contains unsupported types (functions, undefined, symbols).\n */\nexport function canonicalize(value: unknown): string {\n return serialize(value);\n}\n\n/**\n * SHA-256 hash of the JCS-canonicalized form, as lowercase hex.\n *\n * This is the canonical \"did these two requests mean the same thing\" comparison\n * for idempotency.\n */\nexport function canonicalJsonSha256(value: unknown): string {\n return createHash('sha256').update(canonicalize(value)).digest('hex');\n}\n\nfunction serialize(value: unknown): string {\n if (value === null) return 'null';\n if (value === true) return 'true';\n if (value === false) return 'false';\n\n const t = typeof value;\n\n if (t === 'number') return serializeNumber(value as number);\n if (t === 'string') return serializeString(value as string);\n if (t === 'bigint') {\n throw new TypeError('JCS does not support BigInt values');\n }\n if (t === 'undefined') {\n throw new TypeError('JCS does not support undefined values');\n }\n if (t === 'function' || t === 'symbol') {\n throw new TypeError(`JCS does not support ${t} values`);\n }\n\n if (Array.isArray(value)) return serializeArray(value);\n if (t === 'object') {\n // JSON canonicalization is defined over plain objects. Exotic\n // objects (Map, Set, Date, Buffer, class instances) silently\n // serialize as `{}` via Object.keys, which is a nasty data-loss\n // footgun — throw loudly instead.\n const proto = Object.getPrototypeOf(value);\n if (proto !== null && proto !== Object.prototype) {\n const ctorName = (value as { constructor?: { name?: string } })?.constructor?.name ?? 'object';\n throw new TypeError(\n `JCS: only plain objects are supported; got ${ctorName}. Convert to a plain object (e.g., Object.fromEntries for Map, toISOString for Date) before hashing.`\n );\n }\n return serializeObject(value as Record<string, unknown>);\n }\n\n throw new TypeError(`JCS: unsupported value type ${t}`);\n}\n\nfunction serializeArray(arr: unknown[]): string {\n const parts: string[] = [];\n for (const item of arr) {\n parts.push(serialize(item === undefined ? null : item));\n }\n return '[' + parts.join(',') + ']';\n}\n\nfunction serializeObject(obj: Record<string, unknown>): string {\n const keys = Object.keys(obj).filter(k => obj[k] !== undefined);\n keys.sort(compareUtf16);\n\n const parts: string[] = [];\n for (const key of keys) {\n parts.push(serializeString(key) + ':' + serialize(obj[key]));\n }\n return '{' + parts.join(',') + '}';\n}\n\n/**\n * Compare two strings by UTF-16 code unit (per RFC 8785 §3.2.3).\n * V8's default Array.sort() already compares by code unit, but making this\n * explicit guards against future locale-sensitive comparators.\n */\nfunction compareUtf16(a: string, b: string): number {\n const len = Math.min(a.length, b.length);\n for (let i = 0; i < len; i++) {\n const ca = a.charCodeAt(i);\n const cb = b.charCodeAt(i);\n if (ca !== cb) return ca - cb;\n }\n return a.length - b.length;\n}\n\n/**\n * Serialize a number per ECMAScript Number::toString (RFC 8785 §3.2.2.3).\n *\n * JavaScript's native String(num) matches Number::toString exactly for all\n * finite numbers, which is what RFC 8785 requires. Non-finite numbers are\n * not valid JSON and throw.\n */\nfunction serializeNumber(n: number): string {\n if (!Number.isFinite(n)) {\n throw new TypeError(`JCS: non-finite number ${n} is not valid JSON`);\n }\n // JSON.stringify matches Number::toString for finite numbers but also handles\n // the -0 case (renders as \"0\", which JCS requires).\n return JSON.stringify(n);\n}\n\n/**\n * Serialize a string per RFC 8785 §3.2.2.2.\n *\n * Rules:\n * - Wrapped in double quotes\n * - Escape \" \\ and control chars U+0000..U+001F\n * - Use shortest escape form: \\b \\t \\n \\f \\r for the common ones, \\u00XX for others\n * - Do NOT escape forward slash, non-ASCII chars pass through verbatim\n * - Lone surrogates are preserved (JSON allows them)\n */\nfunction serializeString(s: string): string {\n let out = '\"';\n for (let i = 0; i < s.length; i++) {\n const code = s.charCodeAt(i);\n if (code === 0x22) {\n out += '\\\\\"';\n } else if (code === 0x5c) {\n out += '\\\\\\\\';\n } else if (code === 0x08) {\n out += '\\\\b';\n } else if (code === 0x09) {\n out += '\\\\t';\n } else if (code === 0x0a) {\n out += '\\\\n';\n } else if (code === 0x0c) {\n out += '\\\\f';\n } else if (code === 0x0d) {\n out += '\\\\r';\n } else if (code < 0x20) {\n out += '\\\\u' + code.toString(16).padStart(4, '0');\n } else {\n out += s[i];\n }\n }\n out += '\"';\n return out;\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/utils/jcs.ts"],"sourcesContent":["/**\n * RFC 8785 JSON Canonicalization Scheme (JCS).\n *\n * Produces a byte-for-byte stable serialization of JSON values so two\n * semantically equivalent payloads hash to the same value across serializers,\n * languages, and whitespace choices. Used by the idempotency layer to compare\n * request payloads for equivalence without being fooled by key ordering,\n * whitespace, or number formatting.\n *\n * Spec: https://www.rfc-editor.org/rfc/rfc8785\n */\n\nimport { createHash } from 'crypto';\n\n/**\n * Canonicalize a JSON-serializable value per RFC 8785.\n *\n * - Object keys sorted by UTF-16 code units\n * - Numbers serialized per ECMAScript 7.1.12.1 (Number::toString)\n * - Strings escaped per RFC 8785 §3.2.2.2\n * - No insignificant whitespace\n *\n * Throws if the value contains unsupported types (functions, undefined, symbols).\n */\nexport function canonicalize(value: unknown): string {\n return serialize(value);\n}\n\n/**\n * SHA-256 hash of the JCS-canonicalized form, as lowercase hex.\n *\n * This is the canonical \"did these two requests mean the same thing\" comparison\n * for idempotency.\n */\nexport function canonicalJsonSha256(value: unknown): string {\n return createHash('sha256').update(canonicalize(value)).digest('hex');\n}\n\nfunction serialize(value: unknown): string {\n if (value === null) return 'null';\n if (value === true) return 'true';\n if (value === false) return 'false';\n\n const t = typeof value;\n\n if (t === 'number') return serializeNumber(value as number);\n if (t === 'string') return serializeString(value as string);\n if (t === 'bigint') {\n throw new TypeError('JCS does not support BigInt values');\n }\n if (t === 'undefined') {\n throw new TypeError('JCS does not support undefined values');\n }\n if (t === 'function' || t === 'symbol') {\n throw new TypeError(`JCS does not support ${t} values`);\n }\n\n if (Array.isArray(value)) return serializeArray(value);\n if (t === 'object') {\n // JSON canonicalization is defined over plain objects. Exotic\n // objects (Map, Set, Date, Buffer, class instances) silently\n // serialize as `{}` via Object.keys, which is a nasty data-loss\n // footgun — throw loudly instead.\n const proto = Object.getPrototypeOf(value);\n if (proto !== null && proto !== Object.prototype) {\n const ctorName = (value as { constructor?: { name?: string } })?.constructor?.name ?? 'object';\n throw new TypeError(\n `JCS: only plain objects are supported; got ${ctorName}. Convert to a plain object (e.g., Object.fromEntries for Map, toISOString for Date) before hashing.`\n );\n }\n return serializeObject(value as Record<string, unknown>);\n }\n\n throw new TypeError(`JCS: unsupported value type ${t}`);\n}\n\nfunction serializeArray(arr: unknown[]): string {\n const parts: string[] = [];\n for (const item of arr) {\n parts.push(serialize(item === undefined ? null : item));\n }\n return '[' + parts.join(',') + ']';\n}\n\nfunction serializeObject(obj: Record<string, unknown>): string {\n const keys = Object.keys(obj).filter(k => obj[k] !== undefined);\n keys.sort(compareUtf16);\n\n const parts: string[] = [];\n for (const key of keys) {\n parts.push(serializeString(key) + ':' + serialize(obj[key]));\n }\n return '{' + parts.join(',') + '}';\n}\n\n/**\n * Compare two strings by UTF-16 code unit (per RFC 8785 §3.2.3).\n * V8's default Array.sort() already compares by code unit, but making this\n * explicit guards against future locale-sensitive comparators.\n */\nfunction compareUtf16(a: string, b: string): number {\n const len = Math.min(a.length, b.length);\n for (let i = 0; i < len; i++) {\n const ca = a.charCodeAt(i);\n const cb = b.charCodeAt(i);\n if (ca !== cb) return ca - cb;\n }\n return a.length - b.length;\n}\n\n/**\n * Serialize a number per ECMAScript Number::toString (RFC 8785 §3.2.2.3).\n *\n * JavaScript's native String(num) matches Number::toString exactly for all\n * finite numbers, which is what RFC 8785 requires. Non-finite numbers are\n * not valid JSON and throw.\n */\nfunction serializeNumber(n: number): string {\n if (!Number.isFinite(n)) {\n throw new TypeError(`JCS: non-finite number ${n} is not valid JSON`);\n }\n // JSON.stringify matches Number::toString for finite numbers but also handles\n // the -0 case (renders as \"0\", which JCS requires).\n return JSON.stringify(n);\n}\n\n/**\n * Serialize a string per RFC 8785 §3.2.2.2.\n *\n * Rules:\n * - Wrapped in double quotes\n * - Escape \" \\ and control chars U+0000..U+001F\n * - Use shortest escape form: \\b \\t \\n \\f \\r for the common ones, \\u00XX for others\n * - Do NOT escape forward slash, non-ASCII chars pass through verbatim\n * - Lone surrogates are preserved (JSON allows them)\n */\nfunction serializeString(s: string): string {\n let out = '\"';\n for (let i = 0; i < s.length; i++) {\n const code = s.charCodeAt(i);\n if (code === 0x22) {\n out += '\\\\\"';\n } else if (code === 0x5c) {\n out += '\\\\\\\\';\n } else if (code === 0x08) {\n out += '\\\\b';\n } else if (code === 0x09) {\n out += '\\\\t';\n } else if (code === 0x0a) {\n out += '\\\\n';\n } else if (code === 0x0c) {\n out += '\\\\f';\n } else if (code === 0x0d) {\n out += '\\\\r';\n } else if (code < 0x20) {\n out += '\\\\u' + code.toString(16).padStart(4, '0');\n } else {\n out += s[i];\n }\n }\n out += '\"';\n return out;\n}\n"],"mappings":"AAYA,SAAS,kBAAkB;AAYpB,SAAS,aAAa,OAAwB;AACnD,SAAO,UAAU,KAAK;AACxB;AAQO,SAAS,oBAAoB,OAAwB;AAC1D,SAAO,WAAW,QAAQ,EAAE,OAAO,aAAa,KAAK,CAAC,EAAE,OAAO,KAAK;AACtE;AAEA,SAAS,UAAU,OAAwB;AACzC,MAAI,UAAU,KAAM,QAAO;AAC3B,MAAI,UAAU,KAAM,QAAO;AAC3B,MAAI,UAAU,MAAO,QAAO;AAE5B,QAAM,IAAI,OAAO;AAEjB,MAAI,MAAM,SAAU,QAAO,gBAAgB,KAAe;AAC1D,MAAI,MAAM,SAAU,QAAO,gBAAgB,KAAe;AAC1D,MAAI,MAAM,UAAU;AAClB,UAAM,IAAI,UAAU,oCAAoC;AAAA,EAC1D;AACA,MAAI,MAAM,aAAa;AACrB,UAAM,IAAI,UAAU,uCAAuC;AAAA,EAC7D;AACA,MAAI,MAAM,cAAc,MAAM,UAAU;AACtC,UAAM,IAAI,UAAU,wBAAwB,CAAC,SAAS;AAAA,EACxD;AAEA,MAAI,MAAM,QAAQ,KAAK,EAAG,QAAO,eAAe,KAAK;AACrD,MAAI,MAAM,UAAU;AAKlB,UAAM,QAAQ,OAAO,eAAe,KAAK;AACzC,QAAI,UAAU,QAAQ,UAAU,OAAO,WAAW;AAChD,YAAM,WAAY,OAA+C,aAAa,QAAQ;AACtF,YAAM,IAAI;AAAA,QACR,8CAA8C,QAAQ;AAAA,MACxD;AAAA,IACF;AACA,WAAO,gBAAgB,KAAgC;AAAA,EACzD;AAEA,QAAM,IAAI,UAAU,+BAA+B,CAAC,EAAE;AACxD;AAEA,SAAS,eAAe,KAAwB;AAC9C,QAAM,QAAkB,CAAC;AACzB,aAAW,QAAQ,KAAK;AACtB,UAAM,KAAK,UAAU,SAAS,SAAY,OAAO,IAAI,CAAC;AAAA,EACxD;AACA,SAAO,MAAM,MAAM,KAAK,GAAG,IAAI;AACjC;AAEA,SAAS,gBAAgB,KAAsC;AAC7D,QAAM,OAAO,OAAO,KAAK,GAAG,EAAE,OAAO,OAAK,IAAI,CAAC,MAAM,MAAS;AAC9D,OAAK,KAAK,YAAY;AAEtB,QAAM,QAAkB,CAAC;AACzB,aAAW,OAAO,MAAM;AACtB,UAAM,KAAK,gBAAgB,GAAG,IAAI,MAAM,UAAU,IAAI,GAAG,CAAC,CAAC;AAAA,EAC7D;AACA,SAAO,MAAM,MAAM,KAAK,GAAG,IAAI;AACjC;AAOA,SAAS,aAAa,GAAW,GAAmB;AAClD,QAAM,MAAM,KAAK,IAAI,EAAE,QAAQ,EAAE,MAAM;AACvC,WAAS,IAAI,GAAG,IAAI,KAAK,KAAK;AAC5B,UAAM,KAAK,EAAE,WAAW,CAAC;AACzB,UAAM,KAAK,EAAE,WAAW,CAAC;AACzB,QAAI,OAAO,GAAI,QAAO,KAAK;AAAA,EAC7B;AACA,SAAO,EAAE,SAAS,EAAE;AACtB;AASA,SAAS,gBAAgB,GAAmB;AAC1C,MAAI,CAAC,OAAO,SAAS,CAAC,GAAG;AACvB,UAAM,IAAI,UAAU,0BAA0B,CAAC,oBAAoB;AAAA,EACrE;AAGA,SAAO,KAAK,UAAU,CAAC;AACzB;AAYA,SAAS,gBAAgB,GAAmB;AAC1C,MAAI,MAAM;AACV,WAAS,IAAI,GAAG,IAAI,EAAE,QAAQ,KAAK;AACjC,UAAM,OAAO,EAAE,WAAW,CAAC;AAC3B,QAAI,SAAS,IAAM;AACjB,aAAO;AAAA,IACT,WAAW,SAAS,IAAM;AACxB,aAAO;AAAA,IACT,WAAW,SAAS,GAAM;AACxB,aAAO;AAAA,IACT,WAAW,SAAS,GAAM;AACxB,aAAO;AAAA,IACT,WAAW,SAAS,IAAM;AACxB,aAAO;AAAA,IACT,WAAW,SAAS,IAAM;AACxB,aAAO;AAAA,IACT,WAAW,SAAS,IAAM;AACxB,aAAO;AAAA,IACT,WAAW,OAAO,IAAM;AACtB,aAAO,QAAQ,KAAK,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG;AAAA,IAClD,OAAO;AACL,aAAO,EAAE,CAAC;AAAA,IACZ;AAAA,EACF;AACA,SAAO;AACP,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 MAX_JSON_DEPTH = 256;
|
|
8
2
|
export {
|
|
9
3
|
MAX_JSON_DEPTH
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/utils/json-depth.ts"],"sourcesContent":["export const MAX_JSON_DEPTH = 256;\n"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/utils/json-depth.ts"],"sourcesContent":["export const MAX_JSON_DEPTH = 256;\n"],"mappings":"AAAO,MAAM,iBAAiB;","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 LOG_LEVELS = {
|
|
8
2
|
debug: 0,
|
|
9
3
|
info: 1,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/utils/logger.ts"],"sourcesContent":["/**\n * Logger utility for AdCP Client\n *\n * Provides structured logging with levels and contextual metadata.\n */\n\nexport type LogLevel = 'debug' | 'info' | 'warn' | 'error';\n\nexport interface LoggerConfig {\n /** Minimum log level to output (default: 'info') */\n level?: LogLevel;\n /** Enable/disable logging globally (default: true) */\n enabled?: boolean;\n /** Custom log handler (default: console) */\n handler?: {\n debug: (message: string, meta?: unknown) => void;\n info: (message: string, meta?: unknown) => void;\n warn: (message: string, meta?: unknown) => void;\n error: (message: string, meta?: unknown) => void;\n };\n}\n\nconst LOG_LEVELS: Record<LogLevel, number> = {\n debug: 0,\n info: 1,\n warn: 2,\n error: 3,\n};\n\nclass Logger {\n private config: Required<LoggerConfig>;\n\n constructor(config: LoggerConfig = {}) {\n this.config = {\n level: config.level || 'info',\n enabled: config.enabled !== false,\n handler: config.handler || {\n debug: (msg, meta) => console.log(msg, meta ? meta : ''),\n info: (msg, meta) => console.log(msg, meta ? meta : ''),\n warn: (msg, meta) => console.warn(msg, meta ? meta : ''),\n error: (msg, meta) => console.error(msg, meta ? meta : ''),\n },\n };\n }\n\n private shouldLog(level: LogLevel): boolean {\n if (!this.config.enabled) return false;\n return LOG_LEVELS[level] >= LOG_LEVELS[this.config.level];\n }\n\n /**\n * Log debug message (development/troubleshooting)\n */\n debug(message: string, meta?: unknown): void {\n if (this.shouldLog('debug')) {\n this.config.handler.debug(message, meta);\n }\n }\n\n /**\n * Log info message (general information)\n */\n info(message: string, meta?: unknown): void {\n if (this.shouldLog('info')) {\n this.config.handler.info(message, meta);\n }\n }\n\n /**\n * Log warning message (non-critical issues)\n */\n warn(message: string, meta?: unknown): void {\n if (this.shouldLog('warn')) {\n this.config.handler.warn(message, meta);\n }\n }\n\n /**\n * Log error message (critical issues)\n */\n error(message: string, meta?: unknown): void {\n if (this.shouldLog('error')) {\n this.config.handler.error(message, meta);\n }\n }\n\n /**\n * Create a child logger with contextual prefix\n */\n child(context: string): Logger {\n const parentHandler = this.config.handler;\n return new Logger({\n ...this.config,\n handler: {\n debug: (msg, meta) => parentHandler.debug(`[${context}] ${msg}`, meta),\n info: (msg, meta) => parentHandler.info(`[${context}] ${msg}`, meta),\n warn: (msg, meta) => parentHandler.warn(`[${context}] ${msg}`, meta),\n error: (msg, meta) => parentHandler.error(`[${context}] ${msg}`, meta),\n },\n });\n }\n\n /**\n * Update logger configuration\n */\n configure(config: Partial<LoggerConfig>): void {\n Object.assign(this.config, config);\n }\n}\n\n// Default global logger instance\nexport const logger = new Logger({\n level: (process.env.LOG_LEVEL as LogLevel) || 'info',\n enabled: process.env.LOG_ENABLED !== 'false',\n});\n\n/**\n * Create a new logger instance with custom configuration\n */\nexport function createLogger(config?: LoggerConfig): Logger {\n return new Logger(config);\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/utils/logger.ts"],"sourcesContent":["/**\n * Logger utility for AdCP Client\n *\n * Provides structured logging with levels and contextual metadata.\n */\n\nexport type LogLevel = 'debug' | 'info' | 'warn' | 'error';\n\nexport interface LoggerConfig {\n /** Minimum log level to output (default: 'info') */\n level?: LogLevel;\n /** Enable/disable logging globally (default: true) */\n enabled?: boolean;\n /** Custom log handler (default: console) */\n handler?: {\n debug: (message: string, meta?: unknown) => void;\n info: (message: string, meta?: unknown) => void;\n warn: (message: string, meta?: unknown) => void;\n error: (message: string, meta?: unknown) => void;\n };\n}\n\nconst LOG_LEVELS: Record<LogLevel, number> = {\n debug: 0,\n info: 1,\n warn: 2,\n error: 3,\n};\n\nclass Logger {\n private config: Required<LoggerConfig>;\n\n constructor(config: LoggerConfig = {}) {\n this.config = {\n level: config.level || 'info',\n enabled: config.enabled !== false,\n handler: config.handler || {\n debug: (msg, meta) => console.log(msg, meta ? meta : ''),\n info: (msg, meta) => console.log(msg, meta ? meta : ''),\n warn: (msg, meta) => console.warn(msg, meta ? meta : ''),\n error: (msg, meta) => console.error(msg, meta ? meta : ''),\n },\n };\n }\n\n private shouldLog(level: LogLevel): boolean {\n if (!this.config.enabled) return false;\n return LOG_LEVELS[level] >= LOG_LEVELS[this.config.level];\n }\n\n /**\n * Log debug message (development/troubleshooting)\n */\n debug(message: string, meta?: unknown): void {\n if (this.shouldLog('debug')) {\n this.config.handler.debug(message, meta);\n }\n }\n\n /**\n * Log info message (general information)\n */\n info(message: string, meta?: unknown): void {\n if (this.shouldLog('info')) {\n this.config.handler.info(message, meta);\n }\n }\n\n /**\n * Log warning message (non-critical issues)\n */\n warn(message: string, meta?: unknown): void {\n if (this.shouldLog('warn')) {\n this.config.handler.warn(message, meta);\n }\n }\n\n /**\n * Log error message (critical issues)\n */\n error(message: string, meta?: unknown): void {\n if (this.shouldLog('error')) {\n this.config.handler.error(message, meta);\n }\n }\n\n /**\n * Create a child logger with contextual prefix\n */\n child(context: string): Logger {\n const parentHandler = this.config.handler;\n return new Logger({\n ...this.config,\n handler: {\n debug: (msg, meta) => parentHandler.debug(`[${context}] ${msg}`, meta),\n info: (msg, meta) => parentHandler.info(`[${context}] ${msg}`, meta),\n warn: (msg, meta) => parentHandler.warn(`[${context}] ${msg}`, meta),\n error: (msg, meta) => parentHandler.error(`[${context}] ${msg}`, meta),\n },\n });\n }\n\n /**\n * Update logger configuration\n */\n configure(config: Partial<LoggerConfig>): void {\n Object.assign(this.config, config);\n }\n}\n\n// Default global logger instance\nexport const logger = new Logger({\n level: (process.env.LOG_LEVEL as LogLevel) || 'info',\n enabled: process.env.LOG_ENABLED !== 'false',\n});\n\n/**\n * Create a new logger instance with custom configuration\n */\nexport function createLogger(config?: LoggerConfig): Logger {\n return new Logger(config);\n}\n"],"mappings":"AAsBA,MAAM,aAAuC;AAAA,EAC3C,OAAO;AAAA,EACP,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO;AACT;AAEA,MAAM,OAAO;AAAA,EACH;AAAA,EAER,YAAY,SAAuB,CAAC,GAAG;AACrC,SAAK,SAAS;AAAA,MACZ,OAAO,OAAO,SAAS;AAAA,MACvB,SAAS,OAAO,YAAY;AAAA,MAC5B,SAAS,OAAO,WAAW;AAAA,QACzB,OAAO,CAAC,KAAK,SAAS,QAAQ,IAAI,KAAK,OAAO,OAAO,EAAE;AAAA,QACvD,MAAM,CAAC,KAAK,SAAS,QAAQ,IAAI,KAAK,OAAO,OAAO,EAAE;AAAA,QACtD,MAAM,CAAC,KAAK,SAAS,QAAQ,KAAK,KAAK,OAAO,OAAO,EAAE;AAAA,QACvD,OAAO,CAAC,KAAK,SAAS,QAAQ,MAAM,KAAK,OAAO,OAAO,EAAE;AAAA,MAC3D;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,UAAU,OAA0B;AAC1C,QAAI,CAAC,KAAK,OAAO,QAAS,QAAO;AACjC,WAAO,WAAW,KAAK,KAAK,WAAW,KAAK,OAAO,KAAK;AAAA,EAC1D;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,SAAiB,MAAsB;AAC3C,QAAI,KAAK,UAAU,OAAO,GAAG;AAC3B,WAAK,OAAO,QAAQ,MAAM,SAAS,IAAI;AAAA,IACzC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,KAAK,SAAiB,MAAsB;AAC1C,QAAI,KAAK,UAAU,MAAM,GAAG;AAC1B,WAAK,OAAO,QAAQ,KAAK,SAAS,IAAI;AAAA,IACxC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,KAAK,SAAiB,MAAsB;AAC1C,QAAI,KAAK,UAAU,MAAM,GAAG;AAC1B,WAAK,OAAO,QAAQ,KAAK,SAAS,IAAI;AAAA,IACxC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,SAAiB,MAAsB;AAC3C,QAAI,KAAK,UAAU,OAAO,GAAG;AAC3B,WAAK,OAAO,QAAQ,MAAM,SAAS,IAAI;AAAA,IACzC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,SAAyB;AAC7B,UAAM,gBAAgB,KAAK,OAAO;AAClC,WAAO,IAAI,OAAO;AAAA,MAChB,GAAG,KAAK;AAAA,MACR,SAAS;AAAA,QACP,OAAO,CAAC,KAAK,SAAS,cAAc,MAAM,IAAI,OAAO,KAAK,GAAG,IAAI,IAAI;AAAA,QACrE,MAAM,CAAC,KAAK,SAAS,cAAc,KAAK,IAAI,OAAO,KAAK,GAAG,IAAI,IAAI;AAAA,QACnE,MAAM,CAAC,KAAK,SAAS,cAAc,KAAK,IAAI,OAAO,KAAK,GAAG,IAAI,IAAI;AAAA,QACnE,OAAO,CAAC,KAAK,SAAS,cAAc,MAAM,IAAI,OAAO,KAAK,GAAG,IAAI,IAAI;AAAA,MACvE;AAAA,IACF,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,UAAU,QAAqC;AAC7C,WAAO,OAAO,KAAK,QAAQ,MAAM;AAAA,EACnC;AACF;AAGO,MAAM,SAAS,IAAI,OAAO;AAAA,EAC/B,OAAQ,QAAQ,IAAI,aAA0B;AAAA,EAC9C,SAAS,QAAQ,IAAI,gBAAgB;AACvC,CAAC;AAKM,SAAS,aAAa,QAA+B;AAC1D,SAAO,IAAI,OAAO,MAAM;AAC1B;","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 scheduledMediaBuyDeliveryNotification(fields) {
|
|
8
2
|
return { ...fields, notification_type: "scheduled" };
|
|
9
3
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/utils/media-buy-delivery-notification-builders.ts"],"sourcesContent":["// Typed factory helpers for `get_media_buy_delivery` webhook notifications.\n// `notification_type` discriminator carries five values, each with distinct\n// re-send / supersession semantics:\n// `scheduled` / `final` / `delayed` / `adjusted` / `window_update`.\n\nimport type { GetMediaBuyDeliveryResponse } from '../types/tools.generated';\n\ntype NotificationFields = Omit<GetMediaBuyDeliveryResponse, 'notification_type'>;\ntype Tagged<Tag extends string> = NotificationFields & { notification_type: Tag };\n\n/** Regular periodic delivery update. Set `sequence_number` and `next_expected_at`. */\nexport function scheduledMediaBuyDeliveryNotification(fields: NotificationFields): Tagged<'scheduled'> {\n return { ...fields, notification_type: 'scheduled' };\n}\n\n/** Campaign completed; no further notifications. Omit `next_expected_at`. */\nexport function finalMediaBuyDeliveryNotification(fields: NotificationFields): Tagged<'final'> {\n return { ...fields, notification_type: 'final' };\n}\n\n/** Data not yet available. Set `partial_data: true` and `unavailable_count`. */\nexport function delayedMediaBuyDeliveryNotification(fields: NotificationFields): Tagged<'delayed'> {\n return { ...fields, notification_type: 'delayed' };\n}\n\n/** Re-send with corrected data, SAME measurement window. Distinct from `window_update`. */\nexport function adjustedMediaBuyDeliveryNotification(fields: NotificationFields): Tagged<'adjusted'> {\n return { ...fields, notification_type: 'adjusted' };\n}\n\n/** Re-send with WIDER measurement window (e.g. C7 superseding C3). */\nexport function windowUpdateMediaBuyDeliveryNotification(fields: NotificationFields): Tagged<'window_update'> {\n return { ...fields, notification_type: 'window_update' };\n}\n\n/** Grouped accessor for all five `MediaBuyDeliveryNotification` variants. */\nexport const mediaBuyDeliveryNotification = {\n scheduled: scheduledMediaBuyDeliveryNotification,\n final: finalMediaBuyDeliveryNotification,\n delayed: delayedMediaBuyDeliveryNotification,\n adjusted: adjustedMediaBuyDeliveryNotification,\n windowUpdate: windowUpdateMediaBuyDeliveryNotification,\n} as const;\n"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/utils/media-buy-delivery-notification-builders.ts"],"sourcesContent":["// Typed factory helpers for `get_media_buy_delivery` webhook notifications.\n// `notification_type` discriminator carries five values, each with distinct\n// re-send / supersession semantics:\n// `scheduled` / `final` / `delayed` / `adjusted` / `window_update`.\n\nimport type { GetMediaBuyDeliveryResponse } from '../types/tools.generated';\n\ntype NotificationFields = Omit<GetMediaBuyDeliveryResponse, 'notification_type'>;\ntype Tagged<Tag extends string> = NotificationFields & { notification_type: Tag };\n\n/** Regular periodic delivery update. Set `sequence_number` and `next_expected_at`. */\nexport function scheduledMediaBuyDeliveryNotification(fields: NotificationFields): Tagged<'scheduled'> {\n return { ...fields, notification_type: 'scheduled' };\n}\n\n/** Campaign completed; no further notifications. Omit `next_expected_at`. */\nexport function finalMediaBuyDeliveryNotification(fields: NotificationFields): Tagged<'final'> {\n return { ...fields, notification_type: 'final' };\n}\n\n/** Data not yet available. Set `partial_data: true` and `unavailable_count`. */\nexport function delayedMediaBuyDeliveryNotification(fields: NotificationFields): Tagged<'delayed'> {\n return { ...fields, notification_type: 'delayed' };\n}\n\n/** Re-send with corrected data, SAME measurement window. Distinct from `window_update`. */\nexport function adjustedMediaBuyDeliveryNotification(fields: NotificationFields): Tagged<'adjusted'> {\n return { ...fields, notification_type: 'adjusted' };\n}\n\n/** Re-send with WIDER measurement window (e.g. C7 superseding C3). */\nexport function windowUpdateMediaBuyDeliveryNotification(fields: NotificationFields): Tagged<'window_update'> {\n return { ...fields, notification_type: 'window_update' };\n}\n\n/** Grouped accessor for all five `MediaBuyDeliveryNotification` variants. */\nexport const mediaBuyDeliveryNotification = {\n scheduled: scheduledMediaBuyDeliveryNotification,\n final: finalMediaBuyDeliveryNotification,\n delayed: delayedMediaBuyDeliveryNotification,\n adjusted: adjustedMediaBuyDeliveryNotification,\n windowUpdate: windowUpdateMediaBuyDeliveryNotification,\n} as const;\n"],"mappings":"AAWO,SAAS,sCAAsC,QAAiD;AACrG,SAAO,EAAE,GAAG,QAAQ,mBAAmB,YAAY;AACrD;AAGO,SAAS,kCAAkC,QAA6C;AAC7F,SAAO,EAAE,GAAG,QAAQ,mBAAmB,QAAQ;AACjD;AAGO,SAAS,oCAAoC,QAA+C;AACjG,SAAO,EAAE,GAAG,QAAQ,mBAAmB,UAAU;AACnD;AAGO,SAAS,qCAAqC,QAAgD;AACnG,SAAO,EAAE,GAAG,QAAQ,mBAAmB,WAAW;AACpD;AAGO,SAAS,yCAAyC,QAAqD;AAC5G,SAAO,EAAE,GAAG,QAAQ,mBAAmB,gBAAgB;AACzD;AAGO,MAAM,+BAA+B;AAAA,EAC1C,WAAW;AAAA,EACX,OAAO;AAAA,EACP,SAAS;AAAA,EACT,UAAU;AAAA,EACV,cAAc;AAChB;","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 { MediaBuyStatusSchema } from "../types/schemas.generated.mjs";
|
|
8
2
|
function isMediaBuyStatus(value) {
|
|
9
3
|
return MediaBuyStatusSchema.safeParse(value).success;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/utils/media-buy-status.ts"],"sourcesContent":["import type { MediaBuyStatus } from '../types';\nimport { MediaBuyStatusSchema } from '../types/schemas.generated';\n\n/**\n * Return true when a value is one of the SDK's current media-buy lifecycle\n * statuses.\n */\nexport function isMediaBuyStatus(value: unknown): value is MediaBuyStatus {\n return MediaBuyStatusSchema.safeParse(value).success;\n}\n\n/**\n * Extract the seller-authoritative media-buy lifecycle status from mixed-version\n * response payloads.\n *\n * AdCP 3.1 renamed the media-buy lifecycle field from top-level `status` to\n * `media_buy_status` to avoid colliding with task/envelope `status`. Prefer the\n * canonical field when it is present; otherwise fall back to legacy `status`\n * only when it is a valid MediaBuyStatus. Transport/task-only statuses such as\n * `submitted`, `working`, `failed`, and `input-required` return undefined.\n * For explicit 3.1+ payloads, bare `status` values that also appear in\n * TaskStatus (`completed`, `rejected`, `canceled`) are ambiguous because they\n * may be only the task envelope status; use `media_buy_status` to report those\n * media-buy lifecycle states.\n */\nexport function getAuthoritativeMediaBuyStatus(response: unknown): MediaBuyStatus | undefined {\n if (response == null || typeof response !== 'object' || Array.isArray(response)) return undefined;\n\n const record = response as Record<string, unknown>;\n if (record.media_buy_status !== undefined && record.media_buy_status !== null) {\n return isMediaBuyStatus(record.media_buy_status) ? record.media_buy_status : undefined;\n }\n\n if (isAmbiguousExplicit31Status(record)) return undefined;\n return isMediaBuyStatus(record.status) ? record.status : undefined;\n}\n\nconst AMBIGUOUS_EXPLICIT31_STATUS = new Set(['completed', 'rejected', 'canceled']);\n\nfunction isAmbiguousExplicit31Status(record: Record<string, unknown>): boolean {\n return (\n typeof record.status === 'string' &&\n AMBIGUOUS_EXPLICIT31_STATUS.has(record.status) &&\n isExplicit31OrLaterPayload(record)\n );\n}\n\nfunction isExplicit31OrLaterPayload(record: Record<string, unknown>): boolean {\n const version = record.adcp_version;\n if (typeof version !== 'string') return false;\n const match = /^(\\d+)\\.(\\d+)(?:\\.|-|$)/.exec(version);\n if (!match) return false;\n const major = Number.parseInt(match[1]!, 10);\n const minor = Number.parseInt(match[2]!, 10);\n return major > 3 || (major === 3 && minor >= 1);\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/utils/media-buy-status.ts"],"sourcesContent":["import type { MediaBuyStatus } from '../types';\nimport { MediaBuyStatusSchema } from '../types/schemas.generated';\n\n/**\n * Return true when a value is one of the SDK's current media-buy lifecycle\n * statuses.\n */\nexport function isMediaBuyStatus(value: unknown): value is MediaBuyStatus {\n return MediaBuyStatusSchema.safeParse(value).success;\n}\n\n/**\n * Extract the seller-authoritative media-buy lifecycle status from mixed-version\n * response payloads.\n *\n * AdCP 3.1 renamed the media-buy lifecycle field from top-level `status` to\n * `media_buy_status` to avoid colliding with task/envelope `status`. Prefer the\n * canonical field when it is present; otherwise fall back to legacy `status`\n * only when it is a valid MediaBuyStatus. Transport/task-only statuses such as\n * `submitted`, `working`, `failed`, and `input-required` return undefined.\n * For explicit 3.1+ payloads, bare `status` values that also appear in\n * TaskStatus (`completed`, `rejected`, `canceled`) are ambiguous because they\n * may be only the task envelope status; use `media_buy_status` to report those\n * media-buy lifecycle states.\n */\nexport function getAuthoritativeMediaBuyStatus(response: unknown): MediaBuyStatus | undefined {\n if (response == null || typeof response !== 'object' || Array.isArray(response)) return undefined;\n\n const record = response as Record<string, unknown>;\n if (record.media_buy_status !== undefined && record.media_buy_status !== null) {\n return isMediaBuyStatus(record.media_buy_status) ? record.media_buy_status : undefined;\n }\n\n if (isAmbiguousExplicit31Status(record)) return undefined;\n return isMediaBuyStatus(record.status) ? record.status : undefined;\n}\n\nconst AMBIGUOUS_EXPLICIT31_STATUS = new Set(['completed', 'rejected', 'canceled']);\n\nfunction isAmbiguousExplicit31Status(record: Record<string, unknown>): boolean {\n return (\n typeof record.status === 'string' &&\n AMBIGUOUS_EXPLICIT31_STATUS.has(record.status) &&\n isExplicit31OrLaterPayload(record)\n );\n}\n\nfunction isExplicit31OrLaterPayload(record: Record<string, unknown>): boolean {\n const version = record.adcp_version;\n if (typeof version !== 'string') return false;\n const match = /^(\\d+)\\.(\\d+)(?:\\.|-|$)/.exec(version);\n if (!match) return false;\n const major = Number.parseInt(match[1]!, 10);\n const minor = Number.parseInt(match[2]!, 10);\n return major > 3 || (major === 3 && minor >= 1);\n}\n"],"mappings":"AACA,SAAS,4BAA4B;AAM9B,SAAS,iBAAiB,OAAyC;AACxE,SAAO,qBAAqB,UAAU,KAAK,EAAE;AAC/C;AAgBO,SAAS,+BAA+B,UAA+C;AAC5F,MAAI,YAAY,QAAQ,OAAO,aAAa,YAAY,MAAM,QAAQ,QAAQ,EAAG,QAAO;AAExF,QAAM,SAAS;AACf,MAAI,OAAO,qBAAqB,UAAa,OAAO,qBAAqB,MAAM;AAC7E,WAAO,iBAAiB,OAAO,gBAAgB,IAAI,OAAO,mBAAmB;AAAA,EAC/E;AAEA,MAAI,4BAA4B,MAAM,EAAG,QAAO;AAChD,SAAO,iBAAiB,OAAO,MAAM,IAAI,OAAO,SAAS;AAC3D;AAEA,MAAM,8BAA8B,oBAAI,IAAI,CAAC,aAAa,YAAY,UAAU,CAAC;AAEjF,SAAS,4BAA4B,QAA0C;AAC7E,SACE,OAAO,OAAO,WAAW,YACzB,4BAA4B,IAAI,OAAO,MAAM,KAC7C,2BAA2B,MAAM;AAErC;AAEA,SAAS,2BAA2B,QAA0C;AAC5E,QAAM,UAAU,OAAO;AACvB,MAAI,OAAO,YAAY,SAAU,QAAO;AACxC,QAAM,QAAQ,0BAA0B,KAAK,OAAO;AACpD,MAAI,CAAC,MAAO,QAAO;AACnB,QAAM,QAAQ,OAAO,SAAS,MAAM,CAAC,GAAI,EAAE;AAC3C,QAAM,QAAQ,OAAO,SAAS,MAAM,CAAC,GAAI,EAAE;AAC3C,SAAO,QAAQ,KAAM,UAAU,KAAK,SAAS;AAC/C;","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
|
async function paginate(fetchPage, getItems, options) {
|
|
8
2
|
const maxPages = options?.maxPages ?? 100;
|
|
9
3
|
const allItems = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/utils/pagination.ts"],"sourcesContent":["import type { PaginationRequest, PaginationResponse } from '../types/tools.generated';\n\nexport interface PaginateOptions {\n /** Maximum total items to fetch across all pages */\n maxItems?: number;\n /** Maximum number of pages to fetch (default: 100) */\n maxPages?: number;\n /** Page size hint passed as max_results per request */\n pageSize?: number;\n}\n\ntype PaginatedResponse = {\n pagination?: PaginationResponse;\n [key: string]: unknown;\n};\n\n/**\n * Collect all items across paginated AdCP responses.\n *\n * @param fetchPage - Calls the paginated endpoint with optional pagination params\n * @param getItems - Extracts the item array from a single page response\n * @param options - Controls for page size, max items, and max pages\n */\nexport async function paginate<TResponse extends PaginatedResponse, TItem>(\n fetchPage: (pagination?: PaginationRequest) => Promise<TResponse>,\n getItems: (response: TResponse) => TItem[],\n options?: PaginateOptions\n): Promise<TItem[]> {\n const maxPages = options?.maxPages ?? 100;\n const allItems: TItem[] = [];\n let cursor: string | undefined;\n\n for (let page = 0; page < maxPages; page++) {\n const pagination: PaginationRequest | undefined =\n cursor || options?.pageSize ? { cursor, max_results: options?.pageSize } : undefined;\n\n const response = await fetchPage(pagination);\n const items = getItems(response);\n allItems.push(...items);\n\n if (options?.maxItems && allItems.length >= options.maxItems) {\n return allItems.slice(0, options.maxItems);\n }\n\n if (!response.pagination?.has_more || !response.pagination?.cursor) {\n break;\n }\n\n cursor = response.pagination.cursor;\n }\n\n return allItems;\n}\n\n/**\n * Async generator that yields one page at a time from a paginated AdCP endpoint.\n * Useful for progressive/streaming UI rendering.\n *\n * @param fetchPage - Calls the paginated endpoint with optional pagination params\n * @param options - Controls for page size and max pages\n */\nexport async function* paginatePages<TResponse extends PaginatedResponse>(\n fetchPage: (pagination?: PaginationRequest) => Promise<TResponse>,\n options?: PaginateOptions\n): AsyncGenerator<TResponse> {\n const maxPages = options?.maxPages ?? 100;\n let cursor: string | undefined;\n\n for (let page = 0; page < maxPages; page++) {\n const pagination: PaginationRequest | undefined =\n cursor || options?.pageSize ? { cursor, max_results: options?.pageSize } : undefined;\n\n const response = await fetchPage(pagination);\n yield response;\n\n if (!response.pagination?.has_more || !response.pagination?.cursor) {\n break;\n }\n\n cursor = response.pagination.cursor;\n }\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/utils/pagination.ts"],"sourcesContent":["import type { PaginationRequest, PaginationResponse } from '../types/tools.generated';\n\nexport interface PaginateOptions {\n /** Maximum total items to fetch across all pages */\n maxItems?: number;\n /** Maximum number of pages to fetch (default: 100) */\n maxPages?: number;\n /** Page size hint passed as max_results per request */\n pageSize?: number;\n}\n\ntype PaginatedResponse = {\n pagination?: PaginationResponse;\n [key: string]: unknown;\n};\n\n/**\n * Collect all items across paginated AdCP responses.\n *\n * @param fetchPage - Calls the paginated endpoint with optional pagination params\n * @param getItems - Extracts the item array from a single page response\n * @param options - Controls for page size, max items, and max pages\n */\nexport async function paginate<TResponse extends PaginatedResponse, TItem>(\n fetchPage: (pagination?: PaginationRequest) => Promise<TResponse>,\n getItems: (response: TResponse) => TItem[],\n options?: PaginateOptions\n): Promise<TItem[]> {\n const maxPages = options?.maxPages ?? 100;\n const allItems: TItem[] = [];\n let cursor: string | undefined;\n\n for (let page = 0; page < maxPages; page++) {\n const pagination: PaginationRequest | undefined =\n cursor || options?.pageSize ? { cursor, max_results: options?.pageSize } : undefined;\n\n const response = await fetchPage(pagination);\n const items = getItems(response);\n allItems.push(...items);\n\n if (options?.maxItems && allItems.length >= options.maxItems) {\n return allItems.slice(0, options.maxItems);\n }\n\n if (!response.pagination?.has_more || !response.pagination?.cursor) {\n break;\n }\n\n cursor = response.pagination.cursor;\n }\n\n return allItems;\n}\n\n/**\n * Async generator that yields one page at a time from a paginated AdCP endpoint.\n * Useful for progressive/streaming UI rendering.\n *\n * @param fetchPage - Calls the paginated endpoint with optional pagination params\n * @param options - Controls for page size and max pages\n */\nexport async function* paginatePages<TResponse extends PaginatedResponse>(\n fetchPage: (pagination?: PaginationRequest) => Promise<TResponse>,\n options?: PaginateOptions\n): AsyncGenerator<TResponse> {\n const maxPages = options?.maxPages ?? 100;\n let cursor: string | undefined;\n\n for (let page = 0; page < maxPages; page++) {\n const pagination: PaginationRequest | undefined =\n cursor || options?.pageSize ? { cursor, max_results: options?.pageSize } : undefined;\n\n const response = await fetchPage(pagination);\n yield response;\n\n if (!response.pagination?.has_more || !response.pagination?.cursor) {\n break;\n }\n\n cursor = response.pagination.cursor;\n }\n}\n"],"mappings":"AAuBA,eAAsB,SACpB,WACA,UACA,SACkB;AAClB,QAAM,WAAW,SAAS,YAAY;AACtC,QAAM,WAAoB,CAAC;AAC3B,MAAI;AAEJ,WAAS,OAAO,GAAG,OAAO,UAAU,QAAQ;AAC1C,UAAM,aACJ,UAAU,SAAS,WAAW,EAAE,QAAQ,aAAa,SAAS,SAAS,IAAI;AAE7E,UAAM,WAAW,MAAM,UAAU,UAAU;AAC3C,UAAM,QAAQ,SAAS,QAAQ;AAC/B,aAAS,KAAK,GAAG,KAAK;AAEtB,QAAI,SAAS,YAAY,SAAS,UAAU,QAAQ,UAAU;AAC5D,aAAO,SAAS,MAAM,GAAG,QAAQ,QAAQ;AAAA,IAC3C;AAEA,QAAI,CAAC,SAAS,YAAY,YAAY,CAAC,SAAS,YAAY,QAAQ;AAClE;AAAA,IACF;AAEA,aAAS,SAAS,WAAW;AAAA,EAC/B;AAEA,SAAO;AACT;AASA,gBAAuB,cACrB,WACA,SAC2B;AAC3B,QAAM,WAAW,SAAS,YAAY;AACtC,MAAI;AAEJ,WAAS,OAAO,GAAG,OAAO,UAAU,QAAQ;AAC1C,UAAM,aACJ,UAAU,SAAS,WAAW,EAAE,QAAQ,aAAa,SAAS,SAAS,IAAI;AAE7E,UAAM,WAAW,MAAM,UAAU,UAAU;AAC3C,UAAM;AAEN,QAAI,CAAC,SAAS,YAAY,YAAY,CAAC,SAAS,YAAY,QAAQ;AAClE;AAAA,IACF;AAEA,aAAS,SAAS,WAAW;AAAA,EAC/B;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 singlePreviewCreativeResponse(fields) {
|
|
8
2
|
return { ...fields, response_type: "single" };
|
|
9
3
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/utils/preview-creative-builders.ts"],"sourcesContent":["// Typed factory helpers for `preview_creative` responses. Schema oneOf is a\n// three-way switch on `response_type: \"single\" | \"batch\" | \"variant\"`.\n// SHAPE-GOTCHAS §4.\n\nimport type {\n PreviewCreativeSingleResponse,\n PreviewCreativeBatchResponse,\n PreviewCreativeVariantResponse,\n} from '../types/tools.generated';\n\ntype Tagged<T, Tag extends string> = Omit<T, 'response_type'> & { response_type: Tag };\n\n/** Build a `single`-variant `PreviewCreativeResponse`. */\nexport function singlePreviewCreativeResponse(\n fields: Omit<PreviewCreativeSingleResponse, 'response_type'>\n): Tagged<PreviewCreativeSingleResponse, 'single'> {\n return { ...fields, response_type: 'single' };\n}\n\n/** Build a `batch`-variant `PreviewCreativeResponse`. */\nexport function batchPreviewCreativeResponse(\n fields: Omit<PreviewCreativeBatchResponse, 'response_type'>\n): Tagged<PreviewCreativeBatchResponse, 'batch'> {\n return { ...fields, response_type: 'batch' };\n}\n\n/** Build a `variant`-variant `PreviewCreativeResponse`. */\nexport function variantPreviewCreativeResponse(\n fields: Omit<PreviewCreativeVariantResponse, 'response_type'>\n): Tagged<PreviewCreativeVariantResponse, 'variant'> {\n return { ...fields, response_type: 'variant' };\n}\n\n/** Grouped accessor for the three `PreviewCreativeResponse` variants. */\nexport const previewCreative = {\n single: singlePreviewCreativeResponse,\n batch: batchPreviewCreativeResponse,\n variant: variantPreviewCreativeResponse,\n} as const;\n"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/utils/preview-creative-builders.ts"],"sourcesContent":["// Typed factory helpers for `preview_creative` responses. Schema oneOf is a\n// three-way switch on `response_type: \"single\" | \"batch\" | \"variant\"`.\n// SHAPE-GOTCHAS §4.\n\nimport type {\n PreviewCreativeSingleResponse,\n PreviewCreativeBatchResponse,\n PreviewCreativeVariantResponse,\n} from '../types/tools.generated';\n\ntype Tagged<T, Tag extends string> = Omit<T, 'response_type'> & { response_type: Tag };\n\n/** Build a `single`-variant `PreviewCreativeResponse`. */\nexport function singlePreviewCreativeResponse(\n fields: Omit<PreviewCreativeSingleResponse, 'response_type'>\n): Tagged<PreviewCreativeSingleResponse, 'single'> {\n return { ...fields, response_type: 'single' };\n}\n\n/** Build a `batch`-variant `PreviewCreativeResponse`. */\nexport function batchPreviewCreativeResponse(\n fields: Omit<PreviewCreativeBatchResponse, 'response_type'>\n): Tagged<PreviewCreativeBatchResponse, 'batch'> {\n return { ...fields, response_type: 'batch' };\n}\n\n/** Build a `variant`-variant `PreviewCreativeResponse`. */\nexport function variantPreviewCreativeResponse(\n fields: Omit<PreviewCreativeVariantResponse, 'response_type'>\n): Tagged<PreviewCreativeVariantResponse, 'variant'> {\n return { ...fields, response_type: 'variant' };\n}\n\n/** Grouped accessor for the three `PreviewCreativeResponse` variants. */\nexport const previewCreative = {\n single: singlePreviewCreativeResponse,\n batch: batchPreviewCreativeResponse,\n variant: variantPreviewCreativeResponse,\n} as const;\n"],"mappings":"AAaO,SAAS,8BACd,QACiD;AACjD,SAAO,EAAE,GAAG,QAAQ,eAAe,SAAS;AAC9C;AAGO,SAAS,6BACd,QAC+C;AAC/C,SAAO,EAAE,GAAG,QAAQ,eAAe,QAAQ;AAC7C;AAGO,SAAS,+BACd,QACmD;AACnD,SAAO,EAAE,GAAG,QAAQ,eAAe,UAAU;AAC/C;AAGO,MAAM,kBAAkB;AAAA,EAC7B,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,SAAS;AACX;","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 normalizePreviewRender(render) {
|
|
8
2
|
return {
|
|
9
3
|
// Prefer v3 field names, fall back to v2
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/utils/preview-normalizer.ts"],"sourcesContent":["/**\n * Preview Response Normalizer\n *\n * Handles conversion between v2 output_id/output_role and v3 render_id/role.\n * The library exposes only v3 API to clients.\n */\n\n/**\n * v3 preview render\n */\nexport interface PreviewRenderV3 {\n render_id: string;\n role: string;\n output_format: 'url' | 'html' | 'both';\n preview_url?: string;\n preview_html?: string;\n dimensions?: {\n width: number;\n height: number;\n };\n embedding?: {\n recommended_sandbox?: string;\n requires_https?: boolean;\n supports_fullscreen?: boolean;\n csp_policy?: string;\n };\n}\n\n/**\n * v2 preview render (with old field names)\n */\nexport interface PreviewRenderV2 {\n output_id?: string;\n output_role?: string;\n render_id?: string;\n role?: string;\n output_format: 'url' | 'html' | 'both';\n preview_url?: string;\n preview_html?: string;\n dimensions?: {\n width: number;\n height: number;\n };\n embedding?: {\n recommended_sandbox?: string;\n requires_https?: boolean;\n supports_fullscreen?: boolean;\n csp_policy?: string;\n };\n}\n\n/**\n * v3 preview object\n */\nexport interface PreviewV3 {\n preview_id: string;\n renders: PreviewRenderV3[];\n input?: {\n name: string;\n macros?: Record<string, unknown>;\n context_description?: string;\n };\n interactive_url?: string;\n expires_at: string;\n}\n\n/**\n * Normalize a preview render from v2 to v3 format\n */\nexport function normalizePreviewRender(render: PreviewRenderV2): PreviewRenderV3 {\n return {\n // Prefer v3 field names, fall back to v2\n render_id: render.render_id ?? render.output_id ?? 'primary',\n role: render.role ?? render.output_role ?? 'primary',\n output_format: render.output_format,\n preview_url: render.preview_url,\n preview_html: render.preview_html,\n dimensions: render.dimensions,\n embedding: render.embedding,\n };\n}\n\n/**\n * Normalize a preview object (normalizes all renders)\n */\nexport function normalizePreview(preview: any): PreviewV3 {\n if (!preview.renders || !Array.isArray(preview.renders)) {\n return preview;\n }\n\n return {\n ...preview,\n renders: preview.renders.map(normalizePreviewRender),\n };\n}\n\n/**\n * Normalize a preview_creative response (single or batch)\n */\nexport function normalizePreviewCreativeResponse(response: any): any {\n // Single response with previews array\n if (response.previews && Array.isArray(response.previews)) {\n return {\n ...response,\n previews: response.previews.map(normalizePreview),\n };\n }\n\n // Batch response with results array\n if (response.results && Array.isArray(response.results)) {\n return {\n ...response,\n results: response.results.map((result: any) => {\n if (result.success && result.response?.previews) {\n return {\n ...result,\n response: {\n ...result.response,\n previews: result.response.previews.map(normalizePreview),\n },\n };\n }\n return result;\n }),\n };\n }\n\n return response;\n}\n\n/**\n * Check if a render uses v2 field names\n */\nexport function usesV2RenderFields(render: any): boolean {\n return (\n (render.output_id !== undefined || render.output_role !== undefined) &&\n render.render_id === undefined &&\n render.role === undefined\n );\n}\n\n/**\n * Check if a render uses v3 field names\n */\nexport function usesV3RenderFields(render: any): boolean {\n return render.render_id !== undefined || render.role !== undefined;\n}\n\n/**\n * Get render ID from a render (works with both v2 and v3)\n */\nexport function getRenderId(render: PreviewRenderV2 | PreviewRenderV3): string {\n return (render as PreviewRenderV3).render_id ?? (render as PreviewRenderV2).output_id ?? 'primary';\n}\n\n/**\n * Get render role from a render (works with both v2 and v3)\n */\nexport function getRenderRole(render: PreviewRenderV2 | PreviewRenderV3): string {\n return (render as PreviewRenderV3).role ?? (render as PreviewRenderV2).output_role ?? 'primary';\n}\n\n/**\n * Get primary render from a preview\n */\nexport function getPrimaryPreviewRender(preview: {\n renders: (PreviewRenderV2 | PreviewRenderV3)[];\n}): PreviewRenderV3 | undefined {\n const renders = preview.renders.map(normalizePreviewRender);\n return renders.find(r => r.role === 'primary') ?? renders[0];\n}\n\n/**\n * Get preview URL from primary render\n */\nexport function getPreviewUrl(preview: { renders: (PreviewRenderV2 | PreviewRenderV3)[] }): string | undefined {\n return getPrimaryPreviewRender(preview)?.preview_url;\n}\n\n/**\n * Get preview HTML from primary render\n */\nexport function getPreviewHtml(preview: { renders: (PreviewRenderV2 | PreviewRenderV3)[] }): string | undefined {\n return getPrimaryPreviewRender(preview)?.preview_html;\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/utils/preview-normalizer.ts"],"sourcesContent":["/**\n * Preview Response Normalizer\n *\n * Handles conversion between v2 output_id/output_role and v3 render_id/role.\n * The library exposes only v3 API to clients.\n */\n\n/**\n * v3 preview render\n */\nexport interface PreviewRenderV3 {\n render_id: string;\n role: string;\n output_format: 'url' | 'html' | 'both';\n preview_url?: string;\n preview_html?: string;\n dimensions?: {\n width: number;\n height: number;\n };\n embedding?: {\n recommended_sandbox?: string;\n requires_https?: boolean;\n supports_fullscreen?: boolean;\n csp_policy?: string;\n };\n}\n\n/**\n * v2 preview render (with old field names)\n */\nexport interface PreviewRenderV2 {\n output_id?: string;\n output_role?: string;\n render_id?: string;\n role?: string;\n output_format: 'url' | 'html' | 'both';\n preview_url?: string;\n preview_html?: string;\n dimensions?: {\n width: number;\n height: number;\n };\n embedding?: {\n recommended_sandbox?: string;\n requires_https?: boolean;\n supports_fullscreen?: boolean;\n csp_policy?: string;\n };\n}\n\n/**\n * v3 preview object\n */\nexport interface PreviewV3 {\n preview_id: string;\n renders: PreviewRenderV3[];\n input?: {\n name: string;\n macros?: Record<string, unknown>;\n context_description?: string;\n };\n interactive_url?: string;\n expires_at: string;\n}\n\n/**\n * Normalize a preview render from v2 to v3 format\n */\nexport function normalizePreviewRender(render: PreviewRenderV2): PreviewRenderV3 {\n return {\n // Prefer v3 field names, fall back to v2\n render_id: render.render_id ?? render.output_id ?? 'primary',\n role: render.role ?? render.output_role ?? 'primary',\n output_format: render.output_format,\n preview_url: render.preview_url,\n preview_html: render.preview_html,\n dimensions: render.dimensions,\n embedding: render.embedding,\n };\n}\n\n/**\n * Normalize a preview object (normalizes all renders)\n */\nexport function normalizePreview(preview: any): PreviewV3 {\n if (!preview.renders || !Array.isArray(preview.renders)) {\n return preview;\n }\n\n return {\n ...preview,\n renders: preview.renders.map(normalizePreviewRender),\n };\n}\n\n/**\n * Normalize a preview_creative response (single or batch)\n */\nexport function normalizePreviewCreativeResponse(response: any): any {\n // Single response with previews array\n if (response.previews && Array.isArray(response.previews)) {\n return {\n ...response,\n previews: response.previews.map(normalizePreview),\n };\n }\n\n // Batch response with results array\n if (response.results && Array.isArray(response.results)) {\n return {\n ...response,\n results: response.results.map((result: any) => {\n if (result.success && result.response?.previews) {\n return {\n ...result,\n response: {\n ...result.response,\n previews: result.response.previews.map(normalizePreview),\n },\n };\n }\n return result;\n }),\n };\n }\n\n return response;\n}\n\n/**\n * Check if a render uses v2 field names\n */\nexport function usesV2RenderFields(render: any): boolean {\n return (\n (render.output_id !== undefined || render.output_role !== undefined) &&\n render.render_id === undefined &&\n render.role === undefined\n );\n}\n\n/**\n * Check if a render uses v3 field names\n */\nexport function usesV3RenderFields(render: any): boolean {\n return render.render_id !== undefined || render.role !== undefined;\n}\n\n/**\n * Get render ID from a render (works with both v2 and v3)\n */\nexport function getRenderId(render: PreviewRenderV2 | PreviewRenderV3): string {\n return (render as PreviewRenderV3).render_id ?? (render as PreviewRenderV2).output_id ?? 'primary';\n}\n\n/**\n * Get render role from a render (works with both v2 and v3)\n */\nexport function getRenderRole(render: PreviewRenderV2 | PreviewRenderV3): string {\n return (render as PreviewRenderV3).role ?? (render as PreviewRenderV2).output_role ?? 'primary';\n}\n\n/**\n * Get primary render from a preview\n */\nexport function getPrimaryPreviewRender(preview: {\n renders: (PreviewRenderV2 | PreviewRenderV3)[];\n}): PreviewRenderV3 | undefined {\n const renders = preview.renders.map(normalizePreviewRender);\n return renders.find(r => r.role === 'primary') ?? renders[0];\n}\n\n/**\n * Get preview URL from primary render\n */\nexport function getPreviewUrl(preview: { renders: (PreviewRenderV2 | PreviewRenderV3)[] }): string | undefined {\n return getPrimaryPreviewRender(preview)?.preview_url;\n}\n\n/**\n * Get preview HTML from primary render\n */\nexport function getPreviewHtml(preview: { renders: (PreviewRenderV2 | PreviewRenderV3)[] }): string | undefined {\n return getPrimaryPreviewRender(preview)?.preview_html;\n}\n"],"mappings":"AAqEO,SAAS,uBAAuB,QAA0C;AAC/E,SAAO;AAAA;AAAA,IAEL,WAAW,OAAO,aAAa,OAAO,aAAa;AAAA,IACnD,MAAM,OAAO,QAAQ,OAAO,eAAe;AAAA,IAC3C,eAAe,OAAO;AAAA,IACtB,aAAa,OAAO;AAAA,IACpB,cAAc,OAAO;AAAA,IACrB,YAAY,OAAO;AAAA,IACnB,WAAW,OAAO;AAAA,EACpB;AACF;AAKO,SAAS,iBAAiB,SAAyB;AACxD,MAAI,CAAC,QAAQ,WAAW,CAAC,MAAM,QAAQ,QAAQ,OAAO,GAAG;AACvD,WAAO;AAAA,EACT;AAEA,SAAO;AAAA,IACL,GAAG;AAAA,IACH,SAAS,QAAQ,QAAQ,IAAI,sBAAsB;AAAA,EACrD;AACF;AAKO,SAAS,iCAAiC,UAAoB;AAEnE,MAAI,SAAS,YAAY,MAAM,QAAQ,SAAS,QAAQ,GAAG;AACzD,WAAO;AAAA,MACL,GAAG;AAAA,MACH,UAAU,SAAS,SAAS,IAAI,gBAAgB;AAAA,IAClD;AAAA,EACF;AAGA,MAAI,SAAS,WAAW,MAAM,QAAQ,SAAS,OAAO,GAAG;AACvD,WAAO;AAAA,MACL,GAAG;AAAA,MACH,SAAS,SAAS,QAAQ,IAAI,CAAC,WAAgB;AAC7C,YAAI,OAAO,WAAW,OAAO,UAAU,UAAU;AAC/C,iBAAO;AAAA,YACL,GAAG;AAAA,YACH,UAAU;AAAA,cACR,GAAG,OAAO;AAAA,cACV,UAAU,OAAO,SAAS,SAAS,IAAI,gBAAgB;AAAA,YACzD;AAAA,UACF;AAAA,QACF;AACA,eAAO;AAAA,MACT,CAAC;AAAA,IACH;AAAA,EACF;AAEA,SAAO;AACT;AAKO,SAAS,mBAAmB,QAAsB;AACvD,UACG,OAAO,cAAc,UAAa,OAAO,gBAAgB,WAC1D,OAAO,cAAc,UACrB,OAAO,SAAS;AAEpB;AAKO,SAAS,mBAAmB,QAAsB;AACvD,SAAO,OAAO,cAAc,UAAa,OAAO,SAAS;AAC3D;AAKO,SAAS,YAAY,QAAmD;AAC7E,SAAQ,OAA2B,aAAc,OAA2B,aAAa;AAC3F;AAKO,SAAS,cAAc,QAAmD;AAC/E,SAAQ,OAA2B,QAAS,OAA2B,eAAe;AACxF;AAKO,SAAS,wBAAwB,SAER;AAC9B,QAAM,UAAU,QAAQ,QAAQ,IAAI,sBAAsB;AAC1D,SAAO,QAAQ,KAAK,OAAK,EAAE,SAAS,SAAS,KAAK,QAAQ,CAAC;AAC7D;AAKO,SAAS,cAAc,SAAiF;AAC7G,SAAO,wBAAwB,OAAO,GAAG;AAC3C;AAKO,SAAS,eAAe,SAAiF;AAC9G,SAAO,wBAAwB,OAAO,GAAG;AAC3C;","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 previewCache = /* @__PURE__ */ new Map();
|
|
8
2
|
const defaultPreviewCacheBackend = {
|
|
9
3
|
get(cacheKey) {
|