@adcp/sdk 16.1.0 → 16.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (126) hide show
  1. package/AGENTS.md +2 -0
  2. package/dist/lib/core/AgentClient.js +17 -1
  3. package/dist/lib/core/AgentClient.mjs +17 -1
  4. package/dist/lib/core/SingleAgentClient.js +13 -0
  5. package/dist/lib/core/SingleAgentClient.mjs +13 -0
  6. package/dist/lib/core/TaskExecutor.js +88 -13
  7. package/dist/lib/core/TaskExecutor.mjs +89 -14
  8. package/dist/lib/errors/index.d.mts +34 -0
  9. package/dist/lib/errors/index.d.ts +34 -0
  10. package/dist/lib/errors/index.js +11 -0
  11. package/dist/lib/errors/index.mjs +10 -0
  12. package/dist/lib/governance/authorization.d.mts +66 -0
  13. package/dist/lib/governance/authorization.d.ts +66 -0
  14. package/dist/lib/governance/authorization.js +181 -37
  15. package/dist/lib/governance/authorization.mjs +183 -36
  16. package/dist/lib/governance/index.d.mts +2 -2
  17. package/dist/lib/governance/index.d.ts +2 -2
  18. package/dist/lib/governance/index.js +4 -2
  19. package/dist/lib/governance/index.mjs +3 -1
  20. package/dist/lib/identity-3.3/index.d.mts +1 -0
  21. package/dist/lib/identity-3.3/index.d.ts +1 -0
  22. package/dist/lib/identity-3.3/index.js +3 -1
  23. package/dist/lib/identity-3.3/index.mjs +1 -0
  24. package/dist/lib/identity-3.3/jws-artifacts.d.mts +147 -0
  25. package/dist/lib/identity-3.3/jws-artifacts.d.ts +147 -0
  26. package/dist/lib/identity-3.3/jws-artifacts.js +258 -0
  27. package/dist/lib/identity-3.3/jws-artifacts.mjs +234 -0
  28. package/dist/lib/identity-3.3/revocation.d.mts +7 -0
  29. package/dist/lib/identity-3.3/revocation.d.ts +7 -0
  30. package/dist/lib/identity-3.3/revocation.js +13 -0
  31. package/dist/lib/identity-3.3/revocation.mjs +13 -0
  32. package/dist/lib/index.d.mts +3 -3
  33. package/dist/lib/index.d.ts +3 -3
  34. package/dist/lib/index.js +4 -0
  35. package/dist/lib/index.mjs +4 -0
  36. package/dist/lib/media-buy/compatibility.d.mts +1 -0
  37. package/dist/lib/media-buy/compatibility.d.ts +1 -0
  38. package/dist/lib/media-buy/compatibility.js +33 -10
  39. package/dist/lib/media-buy/compatibility.mjs +32 -14
  40. package/dist/lib/negotiation/buyer.js +11 -5
  41. package/dist/lib/negotiation/buyer.mjs +11 -5
  42. package/dist/lib/negotiation/types.d.mts +4 -2
  43. package/dist/lib/negotiation/types.d.ts +4 -2
  44. package/dist/lib/negotiation/verification.d.mts +15 -6
  45. package/dist/lib/negotiation/verification.d.ts +15 -6
  46. package/dist/lib/negotiation/verification.js +146 -27
  47. package/dist/lib/negotiation/verification.mjs +146 -28
  48. package/dist/lib/negotiation/version.d.mts +6 -0
  49. package/dist/lib/negotiation/version.d.ts +6 -0
  50. package/dist/lib/negotiation/version.js +60 -0
  51. package/dist/lib/negotiation/version.mjs +33 -0
  52. package/dist/lib/registry/types.generated.d.mts +24 -1
  53. package/dist/lib/registry/types.generated.d.ts +24 -1
  54. package/dist/lib/server/create-adcp-server.js +1 -1
  55. package/dist/lib/server/create-adcp-server.mjs +1 -1
  56. package/dist/lib/server/error-arm-tools.d.mts +10 -10
  57. package/dist/lib/server/error-arm-tools.d.ts +10 -10
  58. package/dist/lib/server/error-arm-tools.js +22 -58
  59. package/dist/lib/server/error-arm-tools.mjs +30 -65
  60. package/dist/lib/server/index.d.mts +2 -2
  61. package/dist/lib/server/index.d.ts +2 -2
  62. package/dist/lib/server/index.js +2 -0
  63. package/dist/lib/server/index.mjs +2 -0
  64. package/dist/lib/signing/web-bot-auth.js +5 -0
  65. package/dist/lib/signing/web-bot-auth.mjs +4 -0
  66. package/dist/lib/testing/compliance/comply.js +17 -0
  67. package/dist/lib/testing/compliance/comply.mjs +17 -0
  68. package/dist/lib/testing/index.d.mts +3 -0
  69. package/dist/lib/testing/index.d.ts +3 -0
  70. package/dist/lib/testing/index.js +44 -2
  71. package/dist/lib/testing/index.mjs +42 -0
  72. package/dist/lib/testing/storyboard/collection-selection.d.mts +259 -0
  73. package/dist/lib/testing/storyboard/collection-selection.d.ts +259 -0
  74. package/dist/lib/testing/storyboard/collection-selection.js +384 -0
  75. package/dist/lib/testing/storyboard/collection-selection.mjs +348 -0
  76. package/dist/lib/testing/storyboard/context.js +12 -6
  77. package/dist/lib/testing/storyboard/context.mjs +12 -6
  78. package/dist/lib/testing/storyboard/fixture-resolution.d.mts +39 -1
  79. package/dist/lib/testing/storyboard/fixture-resolution.d.ts +39 -1
  80. package/dist/lib/testing/storyboard/fixture-resolution.js +216 -12
  81. package/dist/lib/testing/storyboard/fixture-resolution.mjs +218 -12
  82. package/dist/lib/testing/storyboard/index.d.mts +9 -2
  83. package/dist/lib/testing/storyboard/index.d.ts +9 -2
  84. package/dist/lib/testing/storyboard/index.js +51 -2
  85. package/dist/lib/testing/storyboard/index.mjs +49 -1
  86. package/dist/lib/testing/storyboard/prepared-fixtures.d.mts +471 -0
  87. package/dist/lib/testing/storyboard/prepared-fixtures.d.ts +471 -0
  88. package/dist/lib/testing/storyboard/prepared-fixtures.js +434 -0
  89. package/dist/lib/testing/storyboard/prepared-fixtures.mjs +389 -0
  90. package/dist/lib/testing/storyboard/protected-context.d.mts +127 -0
  91. package/dist/lib/testing/storyboard/protected-context.d.ts +127 -0
  92. package/dist/lib/testing/storyboard/protected-context.js +301 -0
  93. package/dist/lib/testing/storyboard/protected-context.mjs +267 -0
  94. package/dist/lib/testing/storyboard/rejection-hints.js +13 -4
  95. package/dist/lib/testing/storyboard/rejection-hints.mjs +13 -4
  96. package/dist/lib/testing/storyboard/runner.d.mts +24 -0
  97. package/dist/lib/testing/storyboard/runner.d.ts +24 -0
  98. package/dist/lib/testing/storyboard/runner.js +1061 -105
  99. package/dist/lib/testing/storyboard/runner.mjs +1075 -106
  100. package/dist/lib/testing/storyboard/seeding.d.mts +15 -1
  101. package/dist/lib/testing/storyboard/seeding.d.ts +15 -1
  102. package/dist/lib/testing/storyboard/seeding.js +272 -12
  103. package/dist/lib/testing/storyboard/seeding.mjs +274 -13
  104. package/dist/lib/testing/storyboard/types.d.mts +207 -10
  105. package/dist/lib/testing/storyboard/types.d.ts +207 -10
  106. package/dist/lib/testing/storyboard/types.js +1 -1
  107. package/dist/lib/testing/storyboard/types.mjs +1 -1
  108. package/dist/lib/testing/storyboard/validations.d.mts +1 -1
  109. package/dist/lib/testing/storyboard/validations.d.ts +1 -1
  110. package/dist/lib/testing/storyboard/validations.js +95 -0
  111. package/dist/lib/testing/storyboard/validations.mjs +95 -0
  112. package/dist/lib/validation/bundled-schema-store.js +5 -0
  113. package/dist/lib/validation/bundled-schema-store.mjs +4 -0
  114. package/dist/lib/validation/schema-loader.js +19 -2
  115. package/dist/lib/validation/schema-loader.mjs +22 -3
  116. package/dist/lib/version.d.mts +3 -3
  117. package/dist/lib/version.d.ts +3 -3
  118. package/dist/lib/version.js +3 -3
  119. package/dist/lib/version.mjs +3 -3
  120. package/docs/TYPE-SUMMARY.md +2 -2
  121. package/docs/guides/COLLECTION-FIXTURE-FOUNDATION.md +850 -0
  122. package/docs/guides/PROPOSAL-TERMS-VERIFICATION.md +66 -0
  123. package/docs/llms.txt +4 -3
  124. package/docs/migration-14.x-rc-worksheet.md +4 -4
  125. package/docs/migration-agent-identity-3.3.md +51 -6
  126. package/package.json +6 -4
@@ -186,6 +186,19 @@ class OriginRevocationResolver {
186
186
  }
187
187
  return settled();
188
188
  }
189
+ /**
190
+ * The most severe detail stored for a revoked key (R9: `keyCompromise` and
191
+ * the earliest `invalidity_date` win), or undefined when the key is not
192
+ * revoked. Reads the history store only; call {@link status} first to refresh.
193
+ * Throws {@link WebBotAuthUnavailableError} when the store fails.
194
+ */
195
+ async detail(originUrl, keyid) {
196
+ try {
197
+ return await this.readStored((0, import_canonicalize.canonicalAgentOrigin)(originUrl), keyid);
198
+ } catch (error) {
199
+ throw new import_web_bot_auth.WebBotAuthUnavailableError("revocation_persistence_failed", error);
200
+ }
201
+ }
189
202
  async readStored(origin, keyid) {
190
203
  try {
191
204
  return await this.options.store.get(origin, keyid);
@@ -165,6 +165,19 @@ class OriginRevocationResolver {
165
165
  }
166
166
  return settled();
167
167
  }
168
+ /**
169
+ * The most severe detail stored for a revoked key (R9: `keyCompromise` and
170
+ * the earliest `invalidity_date` win), or undefined when the key is not
171
+ * revoked. Reads the history store only; call {@link status} first to refresh.
172
+ * Throws {@link WebBotAuthUnavailableError} when the store fails.
173
+ */
174
+ async detail(originUrl, keyid) {
175
+ try {
176
+ return await this.readStored(canonicalAgentOrigin(originUrl), keyid);
177
+ } catch (error) {
178
+ throw new WebBotAuthUnavailableError("revocation_persistence_failed", error);
179
+ }
180
+ }
168
181
  async readStored(origin, keyid) {
169
182
  try {
170
183
  return await this.options.store.get(origin, keyid);
@@ -41,12 +41,12 @@ export type { GovernanceConfig, CampaignGovernanceConfig, GovernanceCheckResult,
41
41
  export { GovernanceMiddleware } from './core/GovernanceMiddleware.mjs';
42
42
  export { isGovernanceApproved, isGovernanceConditions, isGovernanceDenied, normalizeGovernanceVerdict, } from './core/GovernanceTypes.mjs';
43
43
  export type { GovernanceDebugEntry } from './core/GovernanceMiddleware.mjs';
44
- export { GOVERNANCE_AUTHORIZATION_CRITICAL_CLAIMS, GovernanceAuthorizationError, GovernanceReplayStoreAdapter, InMemoryGovernanceReplayStore, buildGovernanceCommitment, buildGovernanceExecutionCommitment, buildGovernanceExecutionRequest, buildGovernanceIntentRequest, buildGovernanceProposedCommitment, buildHumanReviewPlan, buildHumanOverride, computeGovernedPayloadHash, createGovernanceEnforcementMiddleware, getGovernanceEnforcementTasks, governancePurchaseTypeForTask, governanceTaskRequiresProposedCommitment, targetDeclaresGovernanceEnforcement, targetDeclaresLegacyGovernanceAwareness, validateGovernancePlan, verifyGovernanceAuthorization, createGovernanceAgentJwksResolver, REGULATED_HUMAN_REVIEW_CATEGORIES, ANNEX_III_POLICY_IDS, } from './governance/index.mjs';
44
+ export { GOVERNANCE_AUTHORIZATION_CRITICAL_CLAIMS, GovernanceAuthorizationError, GovernanceReplayStoreAdapter, InMemoryGovernanceReplayStore, buildGovernanceCommitment, buildGovernanceExecutionCommitment, buildGovernanceExecutionRequest, buildGovernanceIntentRequest, buildGovernanceProposedCommitment, buildHumanReviewPlan, buildHumanOverride, computeGovernedPayloadHash, createGovernanceEnforcementMiddleware, getGovernanceEnforcementTasks, governancePurchaseTypeForTask, governanceTaskRequiresProposedCommitment, targetDeclaresGovernanceEnforcement, targetDeclaresLegacyGovernanceAwareness, validateGovernancePlan, verifyGovernanceAuthorization, verifyHistoricalGovernanceContext, createGovernanceAgentJwksResolver, REGULATED_HUMAN_REVIEW_CATEGORIES, ANNEX_III_POLICY_IDS, } from './governance/index.mjs';
45
45
  export { ssrfSafeFetch, decodeBodyAsJsonOrText, SSRF_TRANSIENT_CODES, SsrfRefusedError, isPrivateIp, isAlwaysBlocked, isLikelyPrivateUrl, type SsrfRefusedCode, type SsrfDnsLookup, type SsrfFetchOptions, type SsrfFetchResult, } from './net/index.mjs';
46
46
  export { createCanonicalReferenceCache, createCanonicalReferenceResolver, canonicalReferenceCacheKey, resolveCanonicalReference, resolveFormatSchemaReference, resolvePlatformExtensionsReference, type CanonicalReference, type CanonicalReferenceCache, type CanonicalReferenceCacheOptions, type CanonicalReferenceError, type CanonicalReferenceErrorCode, type CanonicalReferenceFailureResult, type CanonicalReferenceKind, type CanonicalReferenceResolveOptions, type CanonicalReferenceResolvedResult, type CanonicalReferenceResolver, type CanonicalReferenceResolverOptions, type CanonicalReferenceResult, type CanonicalReferenceStatus, type ExternalRefDigestMap, type FormatSchemaReferenceResolvedResult, type FormatSchemaReferenceResult, type PlatformExtensionsReferenceResult, } from './canonical-references/index.mjs';
47
47
  export { assessAcceptancePolicy, createAcceptancePolicyCatalogResolver, resolveAcceptancePolicyCatalog, resolveAcceptancePolicyProfiles, resolveVerifiedAcceptancePolicyProfiles, type AcceptancePolicyCatalog, type AcceptancePolicyCatalogErrorCode, type AcceptancePolicyCatalogFailure, type AcceptancePolicyCatalogIssue, type AcceptancePolicyCatalogResolver, type AcceptancePolicyCatalogResult, type AcceptancePolicyCatalogSuccess, type AcceptancePolicyDiscoveryCapability, type AcceptancePolicyProfile, type AcceptancePolicyProfileResolution, type AcceptancePolicyRegistryPolicy, type AcceptancePolicyRegistryResolver, type AcceptancePolicyReference, type AcceptancePolicyRequirement, type AcceptancePolicyRule, type AcceptancePolicySurface, type RegistryAcceptancePolicyProfileReference, type ResolveAcceptancePolicyCatalogOptions, type ResolveVerifiedAcceptancePolicyProfilesOptions, type ResolvedAcceptancePolicyDefault, type VerifiedAcceptancePolicyProfilesResult, type VerifiedAcceptancePolicyProfilesSuccess, } from './acceptance-policy/index.mjs';
48
48
  export { type AcceptancePolicyAssessment, type AcceptancePolicyAssessmentDiagnostic, type AcceptancePolicyAssessmentDiagnosticCode, type AcceptancePolicyMatchedRule, type AcceptancePolicyOutcome, type AssessAcceptancePolicyInput, } from './acceptance-policy/evaluator.mjs';
49
- export type { BuildGovernanceExecutionRequestInput, BuildGovernanceIntentRequestInput, BuildHumanReviewPlanInput, BuildHumanOverrideInput, DataSubjectContestation, GovernanceAuthorizationClaims, GovernanceAuthorizationCriticalClaim, GovernanceAuthorizationErrorCode, GovernanceAuthorizationFailure, GovernanceAuthorizationResult, GovernanceAuthorizationSuccess, GovernanceCommitment, GovernanceEnforcementMiddleware, GovernanceEnforcementMiddlewareConfig, GovernanceEnforcementMiddlewareInput, GovernanceEnforcementMode, GovernanceEnforcementTask, GovernancePlan, GovernanceReplayStore, GovernanceReplayBinding, GovernanceRevocationResolver, GovernanceRevocationStatus, GovernanceValidationIssue, HumanOverride, InMemoryGovernanceReplayStoreOptions, PlanBudget, ReallocationAutonomy, VerifyGovernanceAuthorizationOptions, GovernanceBuyerIdentity, } from './governance/index.mjs';
49
+ export type { BuildGovernanceExecutionRequestInput, BuildGovernanceIntentRequestInput, BuildHumanReviewPlanInput, BuildHumanOverrideInput, DataSubjectContestation, GovernanceAuthorizationClaims, GovernanceAuthorizationCriticalClaim, GovernanceAuthorizationErrorCode, GovernanceAuthorizationFailure, GovernanceAuthorizationResult, GovernanceAuthorizationSuccess, GovernanceCommitment, GovernanceEnforcementMiddleware, GovernanceEnforcementMiddlewareConfig, GovernanceEnforcementMiddlewareInput, GovernanceEnforcementMode, GovernanceEnforcementTask, GovernancePlan, GovernanceReplayStore, GovernanceReplayBinding, GovernanceRevocationResolver, GovernanceRevocationStatus, GovernanceValidationIssue, HumanOverride, InMemoryGovernanceReplayStoreOptions, PlanBudget, ReallocationAutonomy, VerifyGovernanceAuthorizationOptions, VerifyHistoricalGovernanceContextOptions, HistoricalGovernanceContextResult, GovernanceBuyerIdentity, } from './governance/index.mjs';
50
50
  export type { BaseTaskEvent, ProtocolRequestEvent, ProtocolResponseEvent, TaskStatusEvent, ObjectEvent, TaskEvent, TaskEventCallbacks, } from './core/TaskEventTypes.mjs';
51
51
  export { createOperationId } from './core/TaskEventTypes.mjs';
52
52
  export type { AsyncHandlerConfig, WebhookMetadata, Activity, NotificationMetadata, MediaBuyDeliveryNotification, CreateMediaBuyStatusChangeHandler, UpdateMediaBuyStatusChangeHandler, SyncCreativesStatusChangeHandler, GetProductsStatusChangeHandler, ListProductsStatusChangeHandler, } from './core/AsyncHandler.mjs';
@@ -57,7 +57,7 @@ export * from './handlers/types.mjs';
57
57
  export type { Storage, AtomicTakeStorage, DeferredTaskStorage, BatchStorage, PatternStorage, AgentCapabilities, ConversationState, DeferredTaskState, StorageConfig, StorageFactory, StorageMiddleware, } from './storage/interfaces.mjs';
58
58
  export { MemoryStorage, createMemoryStorage, createMemoryStorageConfig } from './storage/MemoryStorage.mjs';
59
59
  export { ADCPError, TaskTimeoutError, MaxClarificationError, DeferredTaskError, TaskAbortedError, AgentNotFoundError, UnsupportedTaskError, ProtocolError, ValidationError as ADCPValidationError, // Rename to avoid conflict
60
- MissingInputHandlerError, InvalidContextError, ConfigurationError, AuthenticationCredentialsRejectedError, AuthenticationRequiredError, FeatureUnsupportedError, ProtocolFeatureUnsupportedError, UnsupportedBuyingModeError, AccountRequiredError, AccountPendingApprovalError, AccountAmbiguousError, BuyerSetupError, AccountNotFoundError, AccountSetupRequiredError, AccountPaymentRequiredError, AccountNotProvisionedError, SDK_ERROR_TO_PROTOCOL_ERROR_CODE, VersionUnsupportedError, IdempotencyConflictError, IdempotencyExpiredError, ResponseTooLargeError, ActionNotAllowedError, adcpErrorToTypedError, getClientPreflightAdcpError, isADCPError, isErrorOfType, extractErrorInfo, is401Error, mapSdkErrorCodeToProtocolErrorCode, } from './errors/index.mjs';
60
+ MissingInputHandlerError, InvalidContextError, ConfigurationError, AuthenticationCredentialsRejectedError, AuthenticationRequiredError, FeatureUnsupportedError, ProtocolFeatureUnsupportedError, UnsupportedBuyingModeError, AccountRequiredError, AccountPendingApprovalError, AccountAmbiguousError, BuyerSetupError, AccountNotFoundError, AccountSetupRequiredError, AccountPaymentRequiredError, AccountNotProvisionedError, SDK_ERROR_TO_PROTOCOL_ERROR_CODE, VersionUnsupportedError, IdempotencyConflictError, IdempotencyExpiredError, ResponseTooLargeError, ActionNotAllowedError, PreparedFixturesDeniedError, adcpErrorToTypedError, getClientPreflightAdcpError, isADCPError, isErrorOfType, extractErrorInfo, is401Error, mapSdkErrorCodeToProtocolErrorCode, } from './errors/index.mjs';
61
61
  export type { OAuthMetadataInfo, ClientPreflightAdcpErrorInfo, ClientPreflightAdcpErrorRecovery, FeatureUnsupportedErrorOptions, ProtocolFeatureUnsupportedErrorOptions, ActionNotAllowedErrorDetails, ActionNotAllowedReasonValue, ActionNotAllowedAttemptedAction, ActionNotAllowedAvailableAction, ActionNotAllowedRecovery, } from './errors/index.mjs';
62
62
  export type { ActionNotAllowedDetails, ActionNotAllowedReason, AvailableActionsResult, AvailableActionsSource, DecomposedUpdateMediaBuy, DecomposedUpdateMediaBuyMutation, LegacyCoarseAction, MediaBuyActionContext, MediaBuyActionId, MediaBuyActionMode, MediaBuyAvailableAction, MediaBuyMutationDirection, MediaBuyMutationScope, MediaBuyUpdateFieldAction, MediaBuyValidAction, ModeMismatchRecovery, PreflightAllowed, PreflightDenial, PreflightDenied, BuyerPropertyPolicy, NormalizedPolicyDomain, ProductPolicyProductLike, ProductPolicyResolvedProperty, ProductPropertyPolicyIdentifier, ProductPropertyPolicyDiagnostic, ProductPropertyPolicyDiagnosticCode, ProductPropertyPolicyDiagnosticSeverity, ProductPropertyPolicyMode, ProductPropertyPolicySelectorBehavior, ProductPropertyPolicyValidationResult, PreflightResult, ResolvedAction, SLAWindow, SlaWindow, StructuredOnlyMediaBuyAction, ResolvedTargetingInput, TargetingInputFor, ValidateProductsAgainstPropertyPolicyOptions, UpdateFieldEntry, UpdateMediaBuyRequestLike, } from './media-buy/index.mjs';
63
63
  export { ACTIONS_BY_FIELD, LEGACY_COARSE_ACTIONS, STRUCTURED_ONLY_MEDIA_BUY_ACTIONS, UPDATE_FIELDS_BY_ACTION, applyTargetingInput, hasTargetingClears, resolveTargetingInput, canAddPackages, canCancel, canDecreaseBudget, canExtendFlight, canIncreaseBudget, canPause, canReallocateBudget, canRemoveCreative, canRemovePackages, canReplaceCreative, canResume, canShortenFlight, canUpdateCreativeAssignments, canUpdateFlightDates, canUpdateFrequencyCaps, canUpdatePacing, canUpdateTargeting, decomposeUpdateMediaBuy, findAvailableAction, getActionForMutation, getAvailableActions, getRollupParent, ProductPropertyPolicyError, normalizeDomainForPropertyPolicy, preflightUpdateMediaBuy, recoveryForModeMismatch, validateProductsAgainstPropertyPolicy, } from './media-buy/index.mjs';
@@ -41,12 +41,12 @@ export type { GovernanceConfig, CampaignGovernanceConfig, GovernanceCheckResult,
41
41
  export { GovernanceMiddleware } from './core/GovernanceMiddleware';
42
42
  export { isGovernanceApproved, isGovernanceConditions, isGovernanceDenied, normalizeGovernanceVerdict, } from './core/GovernanceTypes';
43
43
  export type { GovernanceDebugEntry } from './core/GovernanceMiddleware';
44
- export { GOVERNANCE_AUTHORIZATION_CRITICAL_CLAIMS, GovernanceAuthorizationError, GovernanceReplayStoreAdapter, InMemoryGovernanceReplayStore, buildGovernanceCommitment, buildGovernanceExecutionCommitment, buildGovernanceExecutionRequest, buildGovernanceIntentRequest, buildGovernanceProposedCommitment, buildHumanReviewPlan, buildHumanOverride, computeGovernedPayloadHash, createGovernanceEnforcementMiddleware, getGovernanceEnforcementTasks, governancePurchaseTypeForTask, governanceTaskRequiresProposedCommitment, targetDeclaresGovernanceEnforcement, targetDeclaresLegacyGovernanceAwareness, validateGovernancePlan, verifyGovernanceAuthorization, createGovernanceAgentJwksResolver, REGULATED_HUMAN_REVIEW_CATEGORIES, ANNEX_III_POLICY_IDS, } from './governance';
44
+ export { GOVERNANCE_AUTHORIZATION_CRITICAL_CLAIMS, GovernanceAuthorizationError, GovernanceReplayStoreAdapter, InMemoryGovernanceReplayStore, buildGovernanceCommitment, buildGovernanceExecutionCommitment, buildGovernanceExecutionRequest, buildGovernanceIntentRequest, buildGovernanceProposedCommitment, buildHumanReviewPlan, buildHumanOverride, computeGovernedPayloadHash, createGovernanceEnforcementMiddleware, getGovernanceEnforcementTasks, governancePurchaseTypeForTask, governanceTaskRequiresProposedCommitment, targetDeclaresGovernanceEnforcement, targetDeclaresLegacyGovernanceAwareness, validateGovernancePlan, verifyGovernanceAuthorization, verifyHistoricalGovernanceContext, createGovernanceAgentJwksResolver, REGULATED_HUMAN_REVIEW_CATEGORIES, ANNEX_III_POLICY_IDS, } from './governance';
45
45
  export { ssrfSafeFetch, decodeBodyAsJsonOrText, SSRF_TRANSIENT_CODES, SsrfRefusedError, isPrivateIp, isAlwaysBlocked, isLikelyPrivateUrl, type SsrfRefusedCode, type SsrfDnsLookup, type SsrfFetchOptions, type SsrfFetchResult, } from './net';
46
46
  export { createCanonicalReferenceCache, createCanonicalReferenceResolver, canonicalReferenceCacheKey, resolveCanonicalReference, resolveFormatSchemaReference, resolvePlatformExtensionsReference, type CanonicalReference, type CanonicalReferenceCache, type CanonicalReferenceCacheOptions, type CanonicalReferenceError, type CanonicalReferenceErrorCode, type CanonicalReferenceFailureResult, type CanonicalReferenceKind, type CanonicalReferenceResolveOptions, type CanonicalReferenceResolvedResult, type CanonicalReferenceResolver, type CanonicalReferenceResolverOptions, type CanonicalReferenceResult, type CanonicalReferenceStatus, type ExternalRefDigestMap, type FormatSchemaReferenceResolvedResult, type FormatSchemaReferenceResult, type PlatformExtensionsReferenceResult, } from './canonical-references';
47
47
  export { assessAcceptancePolicy, createAcceptancePolicyCatalogResolver, resolveAcceptancePolicyCatalog, resolveAcceptancePolicyProfiles, resolveVerifiedAcceptancePolicyProfiles, type AcceptancePolicyCatalog, type AcceptancePolicyCatalogErrorCode, type AcceptancePolicyCatalogFailure, type AcceptancePolicyCatalogIssue, type AcceptancePolicyCatalogResolver, type AcceptancePolicyCatalogResult, type AcceptancePolicyCatalogSuccess, type AcceptancePolicyDiscoveryCapability, type AcceptancePolicyProfile, type AcceptancePolicyProfileResolution, type AcceptancePolicyRegistryPolicy, type AcceptancePolicyRegistryResolver, type AcceptancePolicyReference, type AcceptancePolicyRequirement, type AcceptancePolicyRule, type AcceptancePolicySurface, type RegistryAcceptancePolicyProfileReference, type ResolveAcceptancePolicyCatalogOptions, type ResolveVerifiedAcceptancePolicyProfilesOptions, type ResolvedAcceptancePolicyDefault, type VerifiedAcceptancePolicyProfilesResult, type VerifiedAcceptancePolicyProfilesSuccess, } from './acceptance-policy';
48
48
  export { type AcceptancePolicyAssessment, type AcceptancePolicyAssessmentDiagnostic, type AcceptancePolicyAssessmentDiagnosticCode, type AcceptancePolicyMatchedRule, type AcceptancePolicyOutcome, type AssessAcceptancePolicyInput, } from './acceptance-policy/evaluator';
49
- export type { BuildGovernanceExecutionRequestInput, BuildGovernanceIntentRequestInput, BuildHumanReviewPlanInput, BuildHumanOverrideInput, DataSubjectContestation, GovernanceAuthorizationClaims, GovernanceAuthorizationCriticalClaim, GovernanceAuthorizationErrorCode, GovernanceAuthorizationFailure, GovernanceAuthorizationResult, GovernanceAuthorizationSuccess, GovernanceCommitment, GovernanceEnforcementMiddleware, GovernanceEnforcementMiddlewareConfig, GovernanceEnforcementMiddlewareInput, GovernanceEnforcementMode, GovernanceEnforcementTask, GovernancePlan, GovernanceReplayStore, GovernanceReplayBinding, GovernanceRevocationResolver, GovernanceRevocationStatus, GovernanceValidationIssue, HumanOverride, InMemoryGovernanceReplayStoreOptions, PlanBudget, ReallocationAutonomy, VerifyGovernanceAuthorizationOptions, GovernanceBuyerIdentity, } from './governance';
49
+ export type { BuildGovernanceExecutionRequestInput, BuildGovernanceIntentRequestInput, BuildHumanReviewPlanInput, BuildHumanOverrideInput, DataSubjectContestation, GovernanceAuthorizationClaims, GovernanceAuthorizationCriticalClaim, GovernanceAuthorizationErrorCode, GovernanceAuthorizationFailure, GovernanceAuthorizationResult, GovernanceAuthorizationSuccess, GovernanceCommitment, GovernanceEnforcementMiddleware, GovernanceEnforcementMiddlewareConfig, GovernanceEnforcementMiddlewareInput, GovernanceEnforcementMode, GovernanceEnforcementTask, GovernancePlan, GovernanceReplayStore, GovernanceReplayBinding, GovernanceRevocationResolver, GovernanceRevocationStatus, GovernanceValidationIssue, HumanOverride, InMemoryGovernanceReplayStoreOptions, PlanBudget, ReallocationAutonomy, VerifyGovernanceAuthorizationOptions, VerifyHistoricalGovernanceContextOptions, HistoricalGovernanceContextResult, GovernanceBuyerIdentity, } from './governance';
50
50
  export type { BaseTaskEvent, ProtocolRequestEvent, ProtocolResponseEvent, TaskStatusEvent, ObjectEvent, TaskEvent, TaskEventCallbacks, } from './core/TaskEventTypes';
51
51
  export { createOperationId } from './core/TaskEventTypes';
52
52
  export type { AsyncHandlerConfig, WebhookMetadata, Activity, NotificationMetadata, MediaBuyDeliveryNotification, CreateMediaBuyStatusChangeHandler, UpdateMediaBuyStatusChangeHandler, SyncCreativesStatusChangeHandler, GetProductsStatusChangeHandler, ListProductsStatusChangeHandler, } from './core/AsyncHandler';
@@ -57,7 +57,7 @@ export * from './handlers/types';
57
57
  export type { Storage, AtomicTakeStorage, DeferredTaskStorage, BatchStorage, PatternStorage, AgentCapabilities, ConversationState, DeferredTaskState, StorageConfig, StorageFactory, StorageMiddleware, } from './storage/interfaces';
58
58
  export { MemoryStorage, createMemoryStorage, createMemoryStorageConfig } from './storage/MemoryStorage';
59
59
  export { ADCPError, TaskTimeoutError, MaxClarificationError, DeferredTaskError, TaskAbortedError, AgentNotFoundError, UnsupportedTaskError, ProtocolError, ValidationError as ADCPValidationError, // Rename to avoid conflict
60
- MissingInputHandlerError, InvalidContextError, ConfigurationError, AuthenticationCredentialsRejectedError, AuthenticationRequiredError, FeatureUnsupportedError, ProtocolFeatureUnsupportedError, UnsupportedBuyingModeError, AccountRequiredError, AccountPendingApprovalError, AccountAmbiguousError, BuyerSetupError, AccountNotFoundError, AccountSetupRequiredError, AccountPaymentRequiredError, AccountNotProvisionedError, SDK_ERROR_TO_PROTOCOL_ERROR_CODE, VersionUnsupportedError, IdempotencyConflictError, IdempotencyExpiredError, ResponseTooLargeError, ActionNotAllowedError, adcpErrorToTypedError, getClientPreflightAdcpError, isADCPError, isErrorOfType, extractErrorInfo, is401Error, mapSdkErrorCodeToProtocolErrorCode, } from './errors';
60
+ MissingInputHandlerError, InvalidContextError, ConfigurationError, AuthenticationCredentialsRejectedError, AuthenticationRequiredError, FeatureUnsupportedError, ProtocolFeatureUnsupportedError, UnsupportedBuyingModeError, AccountRequiredError, AccountPendingApprovalError, AccountAmbiguousError, BuyerSetupError, AccountNotFoundError, AccountSetupRequiredError, AccountPaymentRequiredError, AccountNotProvisionedError, SDK_ERROR_TO_PROTOCOL_ERROR_CODE, VersionUnsupportedError, IdempotencyConflictError, IdempotencyExpiredError, ResponseTooLargeError, ActionNotAllowedError, PreparedFixturesDeniedError, adcpErrorToTypedError, getClientPreflightAdcpError, isADCPError, isErrorOfType, extractErrorInfo, is401Error, mapSdkErrorCodeToProtocolErrorCode, } from './errors';
61
61
  export type { OAuthMetadataInfo, ClientPreflightAdcpErrorInfo, ClientPreflightAdcpErrorRecovery, FeatureUnsupportedErrorOptions, ProtocolFeatureUnsupportedErrorOptions, ActionNotAllowedErrorDetails, ActionNotAllowedReasonValue, ActionNotAllowedAttemptedAction, ActionNotAllowedAvailableAction, ActionNotAllowedRecovery, } from './errors';
62
62
  export type { ActionNotAllowedDetails, ActionNotAllowedReason, AvailableActionsResult, AvailableActionsSource, DecomposedUpdateMediaBuy, DecomposedUpdateMediaBuyMutation, LegacyCoarseAction, MediaBuyActionContext, MediaBuyActionId, MediaBuyActionMode, MediaBuyAvailableAction, MediaBuyMutationDirection, MediaBuyMutationScope, MediaBuyUpdateFieldAction, MediaBuyValidAction, ModeMismatchRecovery, PreflightAllowed, PreflightDenial, PreflightDenied, BuyerPropertyPolicy, NormalizedPolicyDomain, ProductPolicyProductLike, ProductPolicyResolvedProperty, ProductPropertyPolicyIdentifier, ProductPropertyPolicyDiagnostic, ProductPropertyPolicyDiagnosticCode, ProductPropertyPolicyDiagnosticSeverity, ProductPropertyPolicyMode, ProductPropertyPolicySelectorBehavior, ProductPropertyPolicyValidationResult, PreflightResult, ResolvedAction, SLAWindow, SlaWindow, StructuredOnlyMediaBuyAction, ResolvedTargetingInput, TargetingInputFor, ValidateProductsAgainstPropertyPolicyOptions, UpdateFieldEntry, UpdateMediaBuyRequestLike, } from './media-buy';
63
63
  export { ACTIONS_BY_FIELD, LEGACY_COARSE_ACTIONS, STRUCTURED_ONLY_MEDIA_BUY_ACTIONS, UPDATE_FIELDS_BY_ACTION, applyTargetingInput, hasTargetingClears, resolveTargetingInput, canAddPackages, canCancel, canDecreaseBudget, canExtendFlight, canIncreaseBudget, canPause, canReallocateBudget, canRemoveCreative, canRemovePackages, canReplaceCreative, canResume, canShortenFlight, canUpdateCreativeAssignments, canUpdateFlightDates, canUpdateFrequencyCaps, canUpdatePacing, canUpdateTargeting, decomposeUpdateMediaBuy, findAvailableAction, getActionForMutation, getAvailableActions, getRollupParent, ProductPropertyPolicyError, normalizeDomainForPropertyPolicy, preflightUpdateMediaBuy, recoveryForModeMismatch, validateProductsAgainstPropertyPolicy, } from './media-buy';
package/dist/lib/index.js CHANGED
@@ -153,6 +153,7 @@ __export(index_exports, {
153
153
  PlacementPresentationReferenceSchema: () => import_schemas.PlacementPresentationReferenceSchema,
154
154
  PostgresStateStore: () => import_server.PostgresStateStore,
155
155
  PostgresTaskStore: () => import_server.PostgresTaskStore,
156
+ PreparedFixturesDeniedError: () => import_errors.PreparedFixturesDeniedError,
156
157
  PreviewFetchError: () => import_substitution.PreviewFetchError,
157
158
  ProductCache: () => import_product_cache.ProductCache,
158
159
  ProductPropertyPolicyError: () => import_media_buy.ProductPropertyPolicyError,
@@ -714,6 +715,7 @@ __export(index_exports, {
714
715
  vastAssetSlot: () => import_format_asset_slot_builders.vastAssetSlot,
715
716
  vastGroupAsset: () => import_format_asset_slot_builders.vastGroupAsset,
716
717
  verifyGovernanceAuthorization: () => import_governance.verifyGovernanceAuthorization,
718
+ verifyHistoricalGovernanceContext: () => import_governance.verifyHistoricalGovernanceContext,
717
719
  verifyIntrospection: () => import_server.verifyIntrospection,
718
720
  videoAsset: () => import_asset_builders.videoAsset,
719
721
  videoAssetSlot: () => import_format_asset_slot_builders.videoAssetSlot,
@@ -997,6 +999,7 @@ function createAdCPClientFromEnv() {
997
999
  PlacementPresentationReferenceSchema,
998
1000
  PostgresStateStore,
999
1001
  PostgresTaskStore,
1002
+ PreparedFixturesDeniedError,
1000
1003
  PreviewFetchError,
1001
1004
  ProductCache,
1002
1005
  ProductPropertyPolicyError,
@@ -1558,6 +1561,7 @@ function createAdCPClientFromEnv() {
1558
1561
  vastAssetSlot,
1559
1562
  vastGroupAsset,
1560
1563
  verifyGovernanceAuthorization,
1564
+ verifyHistoricalGovernanceContext,
1561
1565
  verifyIntrospection,
1562
1566
  videoAsset,
1563
1567
  videoAssetSlot,
@@ -160,6 +160,7 @@ import {
160
160
  targetDeclaresLegacyGovernanceAwareness,
161
161
  validateGovernancePlan,
162
162
  verifyGovernanceAuthorization,
163
+ verifyHistoricalGovernanceContext,
163
164
  createGovernanceAgentJwksResolver,
164
165
  REGULATED_HUMAN_REVIEW_CATEGORIES,
165
166
  ANNEX_III_POLICY_IDS
@@ -234,6 +235,7 @@ import {
234
235
  IdempotencyExpiredError,
235
236
  ResponseTooLargeError,
236
237
  ActionNotAllowedError,
238
+ PreparedFixturesDeniedError,
237
239
  adcpErrorToTypedError,
238
240
  getClientPreflightAdcpError,
239
241
  isADCPError,
@@ -959,6 +961,7 @@ export {
959
961
  PlacementPresentationReferenceSchema,
960
962
  PostgresStateStore,
961
963
  PostgresTaskStore,
964
+ PreparedFixturesDeniedError,
962
965
  PreviewFetchError,
963
966
  ProductCache,
964
967
  ProductPropertyPolicyError,
@@ -1520,6 +1523,7 @@ export {
1520
1523
  vastAssetSlot,
1521
1524
  vastGroupAsset,
1522
1525
  verifyGovernanceAuthorization,
1526
+ verifyHistoricalGovernanceContext,
1523
1527
  verifyIntrospection,
1524
1528
  videoAsset,
1525
1529
  videoAssetSlot,
@@ -300,6 +300,7 @@ export declare class MediaBuyLifecycleCoordinator {
300
300
  readonly negotiated_version: string;
301
301
  readonly lifecycle: MediaBuyLifecycle;
302
302
  readonly tools: ReadonlySet<string>;
303
+ private readonly refinementServedVersion?;
303
304
  private readonly allowedLosses;
304
305
  private readonly preferredLifecycle;
305
306
  private readonly principalScope?;
@@ -300,6 +300,7 @@ export declare class MediaBuyLifecycleCoordinator {
300
300
  readonly negotiated_version: string;
301
301
  readonly lifecycle: MediaBuyLifecycle;
302
302
  readonly tools: ReadonlySet<string>;
303
+ private readonly refinementServedVersion?;
303
304
  private readonly allowedLosses;
304
305
  private readonly preferredLifecycle;
305
306
  private readonly principalScope?;
@@ -32,10 +32,11 @@ var import_jcs = require('../utils/jcs.js');
32
32
  var import_error_extraction = require('../utils/error-extraction.js');
33
33
  var import_capabilities = require('../utils/capabilities.js');
34
34
  var import_tool_request_schemas = require('../utils/tool-request-schemas.js');
35
+ var import_version = require('../negotiation/version.js');
35
36
  var import_verification = require('../negotiation/verification.js');
36
37
  var import_response_unwrapper = require('../utils/response-unwrapper.js');
37
38
  var import_errors = require('../errors/index.js');
38
- var import_version = require('../version.js');
39
+ var import_version2 = require('../version.js');
39
40
  var import_abort = require('../protocols/abort.js');
40
41
  var import_schema_validator = require('../validation/schema-validator.js');
41
42
  var import_schema_validator2 = require('../validation/schema-validator.js');
@@ -755,11 +756,14 @@ function projectRequestProposals(data, lifecycle, negotiatedVersion2) {
755
756
  Object.defineProperty(projected, PROJECTED_RESPONSE_RAW, { value: source, enumerable: false });
756
757
  return projected;
757
758
  }
758
- function projectRefineProposals(data, lifecycle, refinements) {
759
+ function projectRefineProposals(data, lifecycle, refinements, adcpVersion, requestedVersion, servedAdcpVersion, discoveryCeiling) {
759
760
  const source = compactWirePayload(data);
760
761
  const proposalIds = refinements.map((refinement) => refinement.proposal_id);
761
762
  if (lifecycle === "compact") {
762
- (0, import_verification.assertRefineProposalsResponse)({ refinements }, source);
763
+ (0, import_verification.assertRefineProposalsResponse)({ refinements, adcp_version: requestedVersion }, source, {
764
+ adcpVersion,
765
+ servedAdcpVersion: (0, import_version.applicableRefinementServedVersion)(servedAdcpVersion, requestedVersion, discoveryCeiling)
766
+ });
763
767
  }
764
768
  const base = proposalResponseBase(source);
765
769
  const sourceResults = array(source.results);
@@ -778,10 +782,6 @@ function projectRefineProposals(data, lifecycle, refinements) {
778
782
  }
779
783
  const children = [...array(result.proposals), ...result.proposal === void 0 ? [] : [result.proposal]];
780
784
  if (result.outcome === "revised" || result.outcome === "partial" || result.outcome === "finalized") {
781
- const shape = (0, import_verification.validateRefineProposalsResponseShape)({ results: [result], products: [] });
782
- if (!shape.ok) {
783
- throw new TypeError(`refine_proposals result ${index} did not contain complete canonical proposal data.`);
784
- }
785
785
  const expectedStatus = result.outcome === "finalized" ? "committed" : "draft";
786
786
  if (children.some((child) => record(child).proposal_status !== expectedStatus)) {
787
787
  throw new TypeError(
@@ -990,6 +990,12 @@ class MediaBuyLifecycleCoordinator {
990
990
  constructor(agent, capabilities, options) {
991
991
  this.agent = agent;
992
992
  this.negotiated_version = negotiatedVersion(capabilities, agent.getAdcpVersion());
993
+ if (capabilities._synthetic === false) {
994
+ this.refinementServedVersion = (0, import_version.applicableRefinementServedVersion)(
995
+ capabilities.servedVersion,
996
+ (0, import_version2.toReleasePrecisionVersion)(agent.getWireAdcpVersion())
997
+ );
998
+ }
993
999
  this.tools = /* @__PURE__ */ new Set([...capabilities.mediaBuyLifecycleTools ?? [], ...capabilities.discoveredTools ?? []]);
994
1000
  this.preferredLifecycle = options.preferredLifecycle ?? "auto";
995
1001
  this.allowedLosses = new Set(options.allowedLosses ?? []);
@@ -1097,6 +1103,7 @@ class MediaBuyLifecycleCoordinator {
1097
1103
  negotiated_version;
1098
1104
  lifecycle;
1099
1105
  tools;
1106
+ refinementServedVersion;
1100
1107
  allowedLosses;
1101
1108
  preferredLifecycle;
1102
1109
  principalScope;
@@ -1938,7 +1945,7 @@ class MediaBuyLifecycleCoordinator {
1938
1945
  `${operation} requested adcp_major_version ${String(input.adcp_major_version)}, but the negotiated established lane is ${this.negotiated_version}. No request was sent.`
1939
1946
  );
1940
1947
  }
1941
- const expectedRelease = (0, import_version.toReleasePrecisionVersion)(this.negotiated_version);
1948
+ const expectedRelease = (0, import_version2.toReleasePrecisionVersion)(this.negotiated_version);
1942
1949
  if (input.adcp_version !== void 0 && (compareRelease(this.negotiated_version, "3.1") < 0 || input.adcp_version !== expectedRelease)) {
1943
1950
  throw this.unsupported(
1944
1951
  operation,
@@ -6430,7 +6437,15 @@ class MediaBuyLifecycleCoordinator {
6430
6437
  );
6431
6438
  const attemptEpoch2 = pendingRefinement2.attemptEpoch;
6432
6439
  const dispatchOptions2 = retry2 ? { ...options, skipIdempotencyAutoInject: retry2.skipIdempotencyAutoInject } : options;
6433
- const projectOnly2 = (data) => projectRefineProposals(data, lifecycle, params.refinements);
6440
+ const projectOnly2 = (data) => projectRefineProposals(
6441
+ data,
6442
+ lifecycle,
6443
+ params.refinements,
6444
+ this.agent.getAdcpVersion(),
6445
+ params.adcp_version ?? (0, import_version2.toReleasePrecisionVersion)(this.agent.getWireAdcpVersion()),
6446
+ this.refinementServedVersion,
6447
+ (0, import_version2.toReleasePrecisionVersion)(this.agent.getWireAdcpVersion())
6448
+ );
6434
6449
  const projectAndSettle2 = (data) => {
6435
6450
  try {
6436
6451
  const projected = projectOnly2(data);
@@ -6608,7 +6623,15 @@ class MediaBuyLifecycleCoordinator {
6608
6623
  ...retry ? { ...options, skipIdempotencyAutoInject: retry.skipIdempotencyAutoInject } : options,
6609
6624
  ...this.legacyWireTaskOptions()
6610
6625
  };
6611
- const projectOnly = (data) => projectRefineProposals(data, lifecycle, params.refinements);
6626
+ const projectOnly = (data) => projectRefineProposals(
6627
+ data,
6628
+ lifecycle,
6629
+ params.refinements,
6630
+ this.agent.getAdcpVersion(),
6631
+ params.adcp_version ?? (0, import_version2.toReleasePrecisionVersion)(this.agent.getWireAdcpVersion()),
6632
+ this.refinementServedVersion,
6633
+ (0, import_version2.toReleasePrecisionVersion)(this.agent.getWireAdcpVersion())
6634
+ );
6612
6635
  const projectAndSettle = (data) => {
6613
6636
  try {
6614
6637
  const projected = projectOnly(data);
@@ -16,12 +16,8 @@ import { canonicalize } from "../utils/jcs.mjs";
16
16
  import { extractAdcpErrorInfo, extractCorrelationId } from "../utils/error-extraction.mjs";
17
17
  import { assertValidIdempotencyReplayTtlSeconds } from "../utils/capabilities.mjs";
18
18
  import { TOOL_REQUEST_SCHEMAS } from "../utils/tool-request-schemas.mjs";
19
- import {
20
- assertRefineProposalsResponse,
21
- isStrictDateTime,
22
- proposalTermsDigest,
23
- validateRefineProposalsResponseShape
24
- } from "../negotiation/verification.mjs";
19
+ import { applicableRefinementServedVersion } from "../negotiation/version.mjs";
20
+ import { assertRefineProposalsResponse, isStrictDateTime, proposalTermsDigest } from "../negotiation/verification.mjs";
25
21
  import { isAdcpOperationSuccess, isTerminalAdcpError } from "../utils/response-unwrapper.mjs";
26
22
  import { ConfigurationError } from "../errors/index.mjs";
27
23
  import { toReleasePrecisionVersion } from "../version.mjs";
@@ -748,11 +744,14 @@ function projectRequestProposals(data, lifecycle, negotiatedVersion2) {
748
744
  Object.defineProperty(projected, PROJECTED_RESPONSE_RAW, { value: source, enumerable: false });
749
745
  return projected;
750
746
  }
751
- function projectRefineProposals(data, lifecycle, refinements) {
747
+ function projectRefineProposals(data, lifecycle, refinements, adcpVersion, requestedVersion, servedAdcpVersion, discoveryCeiling) {
752
748
  const source = compactWirePayload(data);
753
749
  const proposalIds = refinements.map((refinement) => refinement.proposal_id);
754
750
  if (lifecycle === "compact") {
755
- assertRefineProposalsResponse({ refinements }, source);
751
+ assertRefineProposalsResponse({ refinements, adcp_version: requestedVersion }, source, {
752
+ adcpVersion,
753
+ servedAdcpVersion: applicableRefinementServedVersion(servedAdcpVersion, requestedVersion, discoveryCeiling)
754
+ });
756
755
  }
757
756
  const base = proposalResponseBase(source);
758
757
  const sourceResults = array(source.results);
@@ -771,10 +770,6 @@ function projectRefineProposals(data, lifecycle, refinements) {
771
770
  }
772
771
  const children = [...array(result.proposals), ...result.proposal === void 0 ? [] : [result.proposal]];
773
772
  if (result.outcome === "revised" || result.outcome === "partial" || result.outcome === "finalized") {
774
- const shape = validateRefineProposalsResponseShape({ results: [result], products: [] });
775
- if (!shape.ok) {
776
- throw new TypeError(`refine_proposals result ${index} did not contain complete canonical proposal data.`);
777
- }
778
773
  const expectedStatus = result.outcome === "finalized" ? "committed" : "draft";
779
774
  if (children.some((child) => record(child).proposal_status !== expectedStatus)) {
780
775
  throw new TypeError(
@@ -983,6 +978,12 @@ class MediaBuyLifecycleCoordinator {
983
978
  constructor(agent, capabilities, options) {
984
979
  this.agent = agent;
985
980
  this.negotiated_version = negotiatedVersion(capabilities, agent.getAdcpVersion());
981
+ if (capabilities._synthetic === false) {
982
+ this.refinementServedVersion = applicableRefinementServedVersion(
983
+ capabilities.servedVersion,
984
+ toReleasePrecisionVersion(agent.getWireAdcpVersion())
985
+ );
986
+ }
986
987
  this.tools = /* @__PURE__ */ new Set([...capabilities.mediaBuyLifecycleTools ?? [], ...capabilities.discoveredTools ?? []]);
987
988
  this.preferredLifecycle = options.preferredLifecycle ?? "auto";
988
989
  this.allowedLosses = new Set(options.allowedLosses ?? []);
@@ -1090,6 +1091,7 @@ class MediaBuyLifecycleCoordinator {
1090
1091
  negotiated_version;
1091
1092
  lifecycle;
1092
1093
  tools;
1094
+ refinementServedVersion;
1093
1095
  allowedLosses;
1094
1096
  preferredLifecycle;
1095
1097
  principalScope;
@@ -6423,7 +6425,15 @@ class MediaBuyLifecycleCoordinator {
6423
6425
  );
6424
6426
  const attemptEpoch2 = pendingRefinement2.attemptEpoch;
6425
6427
  const dispatchOptions2 = retry2 ? { ...options, skipIdempotencyAutoInject: retry2.skipIdempotencyAutoInject } : options;
6426
- const projectOnly2 = (data) => projectRefineProposals(data, lifecycle, params.refinements);
6428
+ const projectOnly2 = (data) => projectRefineProposals(
6429
+ data,
6430
+ lifecycle,
6431
+ params.refinements,
6432
+ this.agent.getAdcpVersion(),
6433
+ params.adcp_version ?? toReleasePrecisionVersion(this.agent.getWireAdcpVersion()),
6434
+ this.refinementServedVersion,
6435
+ toReleasePrecisionVersion(this.agent.getWireAdcpVersion())
6436
+ );
6427
6437
  const projectAndSettle2 = (data) => {
6428
6438
  try {
6429
6439
  const projected = projectOnly2(data);
@@ -6601,7 +6611,15 @@ class MediaBuyLifecycleCoordinator {
6601
6611
  ...retry ? { ...options, skipIdempotencyAutoInject: retry.skipIdempotencyAutoInject } : options,
6602
6612
  ...this.legacyWireTaskOptions()
6603
6613
  };
6604
- const projectOnly = (data) => projectRefineProposals(data, lifecycle, params.refinements);
6614
+ const projectOnly = (data) => projectRefineProposals(
6615
+ data,
6616
+ lifecycle,
6617
+ params.refinements,
6618
+ this.agent.getAdcpVersion(),
6619
+ params.adcp_version ?? toReleasePrecisionVersion(this.agent.getWireAdcpVersion()),
6620
+ this.refinementServedVersion,
6621
+ toReleasePrecisionVersion(this.agent.getWireAdcpVersion())
6622
+ );
6605
6623
  const projectAndSettle = (data) => {
6606
6624
  try {
6607
6625
  const projected = projectOnly(data);
@@ -33,9 +33,9 @@ var import_idempotency = require('../utils/idempotency.js');
33
33
  var import_version = require('../version.js');
34
34
  var import_types = require('./types.js');
35
35
  var import_verification = require('./verification.js');
36
+ var import_version2 = require('./version.js');
36
37
  const MAX_PROPOSAL_REFINEMENTS = 25;
37
38
  const MAX_PROPOSAL_ALTERNATIVES = 10;
38
- const ADCP_32_RELEASE = /^3\.2(?:-[A-Za-z0-9]+(?:[.-][A-Za-z0-9]+)*)?$/;
39
39
  function extractProposalRefinementSupport(source) {
40
40
  const payload = unwrapCapabilityPayload(source);
41
41
  if (!isRecord(payload)) fail("capabilities response must be an object", "capabilities");
@@ -95,8 +95,11 @@ function refinementDimensions(refinement) {
95
95
  function validateRefineProposalsRequest(request, capabilities) {
96
96
  if (!isRecord(request)) fail("request must be an object");
97
97
  assertAllowedKeys(request, REQUEST_KEYS, "request");
98
- if (typeof request.adcp_version !== "string" || !ADCP_32_RELEASE.test(request.adcp_version)) {
99
- fail("refine_proposals requires an adcp_version on the 3.2 release line", "adcp_version");
98
+ if (!(0, import_version2.isProposalRefinementVersion)(request.adcp_version)) {
99
+ fail(
100
+ `refine_proposals requires a release-precision adcp_version on AdCP 3.2 or 3.3; received ${(0, import_version2.describeRefinementVersion)(request.adcp_version)}`,
101
+ "adcp_version"
102
+ );
100
103
  }
101
104
  if (request.adcp_major_version !== 3) {
102
105
  fail("refine_proposals requires adcp_major_version 3", "adcp_major_version");
@@ -345,8 +348,11 @@ function validateConstraints(refinement, base) {
345
348
  }
346
349
  function buildRefineProposalsRequest(input, capabilities, defaultAdcpVersion = import_version.ADCP_VERSION) {
347
350
  if (!isRecord(input)) fail("request input must be an object");
348
- if (input.adcp_version !== void 0 && !ADCP_32_RELEASE.test(input.adcp_version)) {
349
- fail("refine_proposals requires an adcp_version on the 3.2 release line", "adcp_version");
351
+ if (input.adcp_version !== void 0 && !(0, import_version2.isProposalRefinementVersion)(input.adcp_version)) {
352
+ fail(
353
+ `refine_proposals requires a release-precision adcp_version on AdCP 3.2 or 3.3; received ${(0, import_version2.describeRefinementVersion)(input.adcp_version)}`,
354
+ "adcp_version"
355
+ );
350
356
  }
351
357
  if (input.adcp_major_version !== void 0 && input.adcp_major_version !== 3) {
352
358
  fail("refine_proposals requires adcp_major_version 3", "adcp_major_version");
@@ -2,9 +2,9 @@ import { generateIdempotencyKey, isValidIdempotencyKey } from "../utils/idempote
2
2
  import { ADCP_VERSION, toReleasePrecisionVersion } from "../version.mjs";
3
3
  import { PROPOSAL_REFINEMENT_DIMENSIONS } from "./types.mjs";
4
4
  import { assertRefineProposalsResponse, isStrictDateTime } from "./verification.mjs";
5
+ import { describeRefinementVersion, isProposalRefinementVersion } from "./version.mjs";
5
6
  const MAX_PROPOSAL_REFINEMENTS = 25;
6
7
  const MAX_PROPOSAL_ALTERNATIVES = 10;
7
- const ADCP_32_RELEASE = /^3\.2(?:-[A-Za-z0-9]+(?:[.-][A-Za-z0-9]+)*)?$/;
8
8
  function extractProposalRefinementSupport(source) {
9
9
  const payload = unwrapCapabilityPayload(source);
10
10
  if (!isRecord(payload)) fail("capabilities response must be an object", "capabilities");
@@ -64,8 +64,11 @@ function refinementDimensions(refinement) {
64
64
  function validateRefineProposalsRequest(request, capabilities) {
65
65
  if (!isRecord(request)) fail("request must be an object");
66
66
  assertAllowedKeys(request, REQUEST_KEYS, "request");
67
- if (typeof request.adcp_version !== "string" || !ADCP_32_RELEASE.test(request.adcp_version)) {
68
- fail("refine_proposals requires an adcp_version on the 3.2 release line", "adcp_version");
67
+ if (!isProposalRefinementVersion(request.adcp_version)) {
68
+ fail(
69
+ `refine_proposals requires a release-precision adcp_version on AdCP 3.2 or 3.3; received ${describeRefinementVersion(request.adcp_version)}`,
70
+ "adcp_version"
71
+ );
69
72
  }
70
73
  if (request.adcp_major_version !== 3) {
71
74
  fail("refine_proposals requires adcp_major_version 3", "adcp_major_version");
@@ -314,8 +317,11 @@ function validateConstraints(refinement, base) {
314
317
  }
315
318
  function buildRefineProposalsRequest(input, capabilities, defaultAdcpVersion = ADCP_VERSION) {
316
319
  if (!isRecord(input)) fail("request input must be an object");
317
- if (input.adcp_version !== void 0 && !ADCP_32_RELEASE.test(input.adcp_version)) {
318
- fail("refine_proposals requires an adcp_version on the 3.2 release line", "adcp_version");
320
+ if (input.adcp_version !== void 0 && !isProposalRefinementVersion(input.adcp_version)) {
321
+ fail(
322
+ `refine_proposals requires a release-precision adcp_version on AdCP 3.2 or 3.3; received ${describeRefinementVersion(input.adcp_version)}`,
323
+ "adcp_version"
324
+ );
319
325
  }
320
326
  if (input.adcp_major_version !== void 0 && input.adcp_major_version !== 3) {
321
327
  fail("refine_proposals requires adcp_major_version 3", "adcp_major_version");
@@ -85,6 +85,8 @@ export interface FinalizeProposalRefinement {
85
85
  }
86
86
  export type ProposalRefinement = ReviseProposalRefinement | FinalizeProposalRefinement;
87
87
  export type Adcp32Version = '3.2' | `3.2-${string}`;
88
+ /** Supported proposal-refinement release pins; patches belong to schema pins. */
89
+ export type ProposalRefinementVersion = Adcp32Version | '3.3' | `3.3-${string}`;
88
90
  export interface RefineProposalsRequest {
89
91
  idempotency_key: string;
90
92
  refinements: ProposalRefinement[];
@@ -92,12 +94,12 @@ export interface RefineProposalsRequest {
92
94
  context?: Record<string, unknown>;
93
95
  governance_context?: string;
94
96
  push_notification_config?: Record<string, unknown>;
95
- adcp_version: Adcp32Version;
97
+ adcp_version: ProposalRefinementVersion;
96
98
  adcp_major_version: 3;
97
99
  }
98
100
  export type RefineProposalsInput = Omit<RefineProposalsRequest, 'idempotency_key' | 'adcp_version' | 'adcp_major_version'> & {
99
101
  idempotency_key?: string;
100
- adcp_version?: Adcp32Version;
102
+ adcp_version?: ProposalRefinementVersion;
101
103
  adcp_major_version?: 3;
102
104
  };
103
105
  export interface ProposalResolvedPricing {
@@ -85,6 +85,8 @@ export interface FinalizeProposalRefinement {
85
85
  }
86
86
  export type ProposalRefinement = ReviseProposalRefinement | FinalizeProposalRefinement;
87
87
  export type Adcp32Version = '3.2' | `3.2-${string}`;
88
+ /** Supported proposal-refinement release pins; patches belong to schema pins. */
89
+ export type ProposalRefinementVersion = Adcp32Version | '3.3' | `3.3-${string}`;
88
90
  export interface RefineProposalsRequest {
89
91
  idempotency_key: string;
90
92
  refinements: ProposalRefinement[];
@@ -92,12 +94,12 @@ export interface RefineProposalsRequest {
92
94
  context?: Record<string, unknown>;
93
95
  governance_context?: string;
94
96
  push_notification_config?: Record<string, unknown>;
95
- adcp_version: Adcp32Version;
97
+ adcp_version: ProposalRefinementVersion;
96
98
  adcp_major_version: 3;
97
99
  }
98
100
  export type RefineProposalsInput = Omit<RefineProposalsRequest, 'idempotency_key' | 'adcp_version' | 'adcp_major_version'> & {
99
101
  idempotency_key?: string;
100
- adcp_version?: Adcp32Version;
102
+ adcp_version?: ProposalRefinementVersion;
101
103
  adcp_major_version?: 3;
102
104
  };
103
105
  export interface ProposalResolvedPricing {
@@ -38,13 +38,22 @@ export declare function verifyProposalCommercialTerms(proposal: unknown, expecte
38
38
  export declare function assertProposalCommercialTerms(proposal: unknown, expectedCommercialTerms: unknown, options?: VerifyProposalCommercialTermsOptions): void;
39
39
  /** Strict RFC 3339 date-time accepted by the AdCP `format: date-time` contract. */
40
40
  export declare function isStrictDateTime(value: unknown): value is string;
41
- export declare function verifyRefineProposalsResponse(request: Pick<RefineProposalsRequest, 'refinements'>, response: unknown, options?: {
41
+ export declare function verifyRefineProposalsResponse(request: Pick<RefineProposalsRequest, 'refinements'> & Partial<Pick<RefineProposalsRequest, 'adcp_version'>>, response: unknown, options?: {
42
42
  now?: Date;
43
+ adcpVersion?: string;
44
+ servedAdcpVersion?: string;
43
45
  }): ProposalVerificationResult;
44
- export declare function assertRefineProposalsResponse(request: Pick<RefineProposalsRequest, 'refinements'>, response: unknown, options?: {
46
+ export declare function assertRefineProposalsResponse(request: Pick<RefineProposalsRequest, 'refinements'> & Partial<Pick<RefineProposalsRequest, 'adcp_version'>>, response: unknown, options?: {
45
47
  now?: Date;
48
+ adcpVersion?: string;
49
+ servedAdcpVersion?: string;
46
50
  }): asserts response is RefineProposalsCompletedResponse;
47
- /** Validate the finalized 3.2 completed or compact-submitted wire shape, without source semantics. */
48
- export declare function validateRefineProposalsResponseShape(response: unknown): ProposalVerificationResult;
49
- /** Assert the finalized 3.2 completed or compact-submitted wire shape, without requiring a source request. */
50
- export declare function assertRefineProposalsResponseShape(response: unknown): asserts response is RefineProposalsResponse;
51
+ /** Validate a completed or compact-submitted wire shape using the selected bundle.
52
+ * Pass adcpVersion when validating a negotiated contract other than the SDK pin. */
53
+ export declare function validateRefineProposalsResponseShape(response: unknown, options?: {
54
+ adcpVersion?: string;
55
+ }): ProposalVerificationResult;
56
+ /** Assert a selected completed or compact-submitted wire shape without source semantics. */
57
+ export declare function assertRefineProposalsResponseShape(response: unknown, options?: {
58
+ adcpVersion?: string;
59
+ }): asserts response is RefineProposalsResponse;
@@ -38,13 +38,22 @@ export declare function verifyProposalCommercialTerms(proposal: unknown, expecte
38
38
  export declare function assertProposalCommercialTerms(proposal: unknown, expectedCommercialTerms: unknown, options?: VerifyProposalCommercialTermsOptions): void;
39
39
  /** Strict RFC 3339 date-time accepted by the AdCP `format: date-time` contract. */
40
40
  export declare function isStrictDateTime(value: unknown): value is string;
41
- export declare function verifyRefineProposalsResponse(request: Pick<RefineProposalsRequest, 'refinements'>, response: unknown, options?: {
41
+ export declare function verifyRefineProposalsResponse(request: Pick<RefineProposalsRequest, 'refinements'> & Partial<Pick<RefineProposalsRequest, 'adcp_version'>>, response: unknown, options?: {
42
42
  now?: Date;
43
+ adcpVersion?: string;
44
+ servedAdcpVersion?: string;
43
45
  }): ProposalVerificationResult;
44
- export declare function assertRefineProposalsResponse(request: Pick<RefineProposalsRequest, 'refinements'>, response: unknown, options?: {
46
+ export declare function assertRefineProposalsResponse(request: Pick<RefineProposalsRequest, 'refinements'> & Partial<Pick<RefineProposalsRequest, 'adcp_version'>>, response: unknown, options?: {
45
47
  now?: Date;
48
+ adcpVersion?: string;
49
+ servedAdcpVersion?: string;
46
50
  }): asserts response is RefineProposalsCompletedResponse;
47
- /** Validate the finalized 3.2 completed or compact-submitted wire shape, without source semantics. */
48
- export declare function validateRefineProposalsResponseShape(response: unknown): ProposalVerificationResult;
49
- /** Assert the finalized 3.2 completed or compact-submitted wire shape, without requiring a source request. */
50
- export declare function assertRefineProposalsResponseShape(response: unknown): asserts response is RefineProposalsResponse;
51
+ /** Validate a completed or compact-submitted wire shape using the selected bundle.
52
+ * Pass adcpVersion when validating a negotiated contract other than the SDK pin. */
53
+ export declare function validateRefineProposalsResponseShape(response: unknown, options?: {
54
+ adcpVersion?: string;
55
+ }): ProposalVerificationResult;
56
+ /** Assert a selected completed or compact-submitted wire shape without source semantics. */
57
+ export declare function assertRefineProposalsResponseShape(response: unknown, options?: {
58
+ adcpVersion?: string;
59
+ }): asserts response is RefineProposalsResponse;