Releases: adcontextprotocol/adcp-client
@adcp/sdk@8.1.0-beta.18
Patch Changes
- 448249c: Include
operation_idin framework-emitted task webhook payloads and validate
push notification operation identifiers at the request boundary.
@adcp/sdk@8.1.0-beta.17
Minor Changes
-
a7d460d: Update the SDK schema pin and generated surfaces to AdCP 3.1.0-rc.2.
Regenerates TypeScript/Zod schemas, docs, registry types, manifest-derived
constants, and wire field allowlists from the 3.1 RC protocol bundle. Preserves
SignalCatalogTypecompatibility aliases across generated type, schema, and
enum entrypoints while adopting the renamedSignalAvailabilityTypesurface. -
f325c11: Update the SDK schema pin and generated surfaces to AdCP 3.1.0-rc.4.
Regenerates TypeScript/Zod schemas, docs, manifest-derived constants, entity
hydration metadata, and server wire field allowlists from the rc4 protocol
bundle. Adds GitHub-dist fallback for schema syncs when the website mirror has
not yet published a signed protocol bundle, and keeps the media-buy mode
mismatch recovery path tolerant of older 3.1 prerelease sellers that still emit
requires_proposal. -
e9638ae: Reuse authorization-code OAuth MCP sessions across related tool calls and export
closeOAuthConnections()for scoped cleanup. -
f9ed580: fix(storyboard): add regex-backed field pattern validations
Storyboard validations now support
field_patternandenvelope_field_patternchecks for string fields, with consistent handling for missing fields, non-string values, invalid regex sources, conformance replay, and schema drift detection. -
2326b27: Expose typed webhook parse/verify results, add buyer webhook receiver conformance replay checks, and clarify delivery webhook envelope docs.
Patch Changes
- 3300db7: Allow packaged catalog-era
adagents.jsonschemas to validate community mirror catalogs withauthorized_agents: [], while preserving the stricter non-empty authorization requirement for legacy authorization-only schema bundles. - 249604c: Fix external compliance/schema bundle handling by scoping schema roots per run, preloading async response refs for request validators, preserving hosted stable-line aliases on the wire, and exposing schema-root options through conformance fuzzing.
- ceb8b80: Add storyboard runner support for step-level HTTP Basic auth directives.
@adcp/sdk@8.1.0-beta.16
Patch Changes
- cbaebbc: Restore signing-only response helpers under
@adcp/sdk/signingfor adopters that sign JSON transport responses and publish
response-signingJWKs.
@adcp/sdk@8.1.0-beta.15
Minor Changes
-
476e452: Update the SDK schema pin and generated surfaces to AdCP 3.1.0-beta.7.
Regenerates TypeScript/Zod schemas, docs, manifest-derived constants, wire
field allowlists, and the 3.1 beta opt-in type surface from the beta.7
protocol bundle. The test-controller andcreateComplyControllerhelpers now
recognize and advertise the new beta.7 compliance controller scenarios
(force_creative_purge,seed_measurement_catalog,
query_provenance_audit_observations), auto-seeded product/pricing fixtures
are projected throughcompliance_testing.scenarios, and the beta sync wrapper
preserves protocol-managed artifacts when the beta is also the primary pin. -
dceec03: Add brand JSON asset mapping helpers for validating PDF/model extraction output, applying approved logo mappings, selecting logos by slot, checking slot coverage, and saving updated brand manifests through the registry client.
-
743946b: Add typed registry helpers for community mirror adagents catalogs.
buildCommunityMirrorAdagents()andRegistryClient.createCommunityMirrorAdagents()emit catalog-only descriptors withauthorized_agents: [], whileCreateAdagentsRequestnow exposes typedformats,placements, andplacement_tagsshapes for local adopter code. -
a06542b: Emit the canonical
signed_requests_specialism_deprecatedrunner notice when
agents still advertise the deprecatedsigned-requestsspecialism on the
signed-requests storyboard.The notice is a counter-neutral deprecation advisory with
capability_path: "specialisms"andeffective_version: "4.0". This widens
the publicNoticeCodeunion so dashboards and CI gates can handle the new
canonical code explicitly.
Patch Changes
- 8353d64: Reject catastrophic
format_schemaregex patterns in canonical reference resolution withinvalid_schema/budget_exceeded. - 766cf27: Add a storyboard-level
preferred_attestation_modehint for upstream traffic
controller prefetches. - 2ed0dd1: Tighten sync_accounts commercial filtering diagnostics and replay caching for
stable rejected rows.
@adcp/sdk@8.1.0-beta.14
Minor Changes
-
546f093: Document the AdCP 3.1
AUTH_MISSING/AUTH_INVALIDsplit while keeping deprecatedAuthRequiredErrorwire-compatible withAUTH_REQUIRED. The decisioning runtime also refreshes once onAUTH_MISSINGwhenAccountStore.refreshTokenis configured, attaching the refreshed upstream token to a request-local account clone before retrying. -
fa8c1ba: Add framework-level
sync_accountscommercial enforcement for AdCP 3.1 buyer-agent billing gates, including clamped per-agent billing errors, unmapped-bearer oracle protection, supported payment terms checks, and idempotency cache bypass for rejected account rows. -
799d5b6: Add storyboard
canonical_format_satisfactionvalidation for canonical format create-time assertions.The check compares actual
create_media_buypackage selectors against priorget_productsproduct format declarations, including canonicalformat_option_refs, legacyformat_idsnormalized throughv1_format_refor catalog projection, richer param containment, under-specified selector rejection, and format-specific rejection diagnostics. -
6ffbdfa: Add
createCanonicalReferenceResolverthrough the package root and@adcp/sdk/canonical-referencesfor immutableformat_schemaandplatform_extensionsURI+SHA-256 references. The resolver applies SSRF-safe DNS-pinned fetching, redirect blocking, timeout and body caps, digest verification, caller-owned policy-scoped caching, structured non-throwing statuses, and JSON Schema validation plus pinned$refsandboxing forformat_schema. -
505c09c: Hide
comply_test_controllerandcompliance_testingdiscovery from live principals while preserving sandbox/mock controller dispatch and live-targetPERMISSION_DENIEDhandling. -
965fb43: Add shared mock-server scenario scaffolding for storyboard fixtures: token-protected
/_scenario/*HTTP routes surfaced in mock-server summaries, programmatichandle.scenario, fixture reset/state snapshots, authenticated scripted fault responses, loopback-only webhook emit/capture stubs, and exactidempotency_keyreplay handling on state-creation mock routes. -
8ec6cbd: Expose a public schema-root override for hosted compliance runs via
schemaRootoptions andregisterExternalSchemaRootfrom@adcp/sdk/testing. -
bc0c21f: Add the rate-limit trip/replay observer for the AdCP 3.1
rate_limit_trip_runnerstoryboard contract.The storyboard runner now executes
expect_rate_limit_not_replayedby bursting fresh idempotency keys untilRATE_LIMITED, waiting the advertisedretry_after, replaying the same key, and grading the newreplay_not_cached_rate_limitcheck. If the burst exhaustsmax_attemptswithout a rate-limit response, the step emitsskip_reason: "rate_limit_not_triggered"and canonicalskip.reason: "not_applicable". The publicRateLimitTripObserverhelper is exported from both@adcp/sdkand@adcp/sdk/testing. -
35947d7: Harden
RegistryClienttransport defaults with timeout, max body size, redirect policy, and injectable fetch options. The default registry host now uses the canonical upstream registry, and callers pinned to the legacy host can either updatebaseUrlor opt intoredirect: 'follow'.Regenerate registry OpenAPI types so
CreateAdagentsRequestaccepts catalog metadata fields for community mirror manifests, while preserving backward-compatiblelistAgents()/listPublishers()source summaries and the legacytype: 'si'list-agent filter. Add CI drift checks that regenerate registry types from the bundled upstream registry OpenAPI before validating generated files. -
748e5c9: breaking: remove the preview RFC 9421 transport response-signing surface from the beta line
AdCP 3.x does not authorize generic RFC 9421 §2.2.9 transport response signing. The SDK no longer exports
signResponse,signResponseAsync,verifyResponseSignature,createResponseVerifier,ResponseSignatureError,RESPONSE_SIGNING_TAG,RESPONSE_MANDATORY_COMPONENTS,buildResponseSignatureBase,ResponseLike,prepareResponseSignature,finalizeResponseSignature,SignResponseOptions,PreparedResponseSignature,SignedResponse, the response-verifier option/result types, or the'response-signing'JWK purpose.Runtime helpers also reject the retired purpose:
pemToAdcpJwk({ adcp_use: 'response-signing' })andmintEphemeralEd25519Key({ adcp_use: 'response-signing' })now throw, andInMemorySigningProviderpreserves retired or unknown raw purpose strings sosignRequestAsync()andsignWebhookAsync()still fail closed instead of silently treating the key as unscoped.Request signing and webhook signing are unchanged. There is no conformant AdCP 3.x replacement for generic transport response signing; future designated-task payload JWS support should land under a fresh spec-defined purpose and helper surface.
-
2764c56: Adopt several SDK-side follow-ups unblocked by the AdCP 3.1 schema cache.
- Preserve explicit
conversion_tracking.supported_targetsdeclarations without inventing a default; omitted values mean only target-less event goals are guaranteed. - Allow
supported_optimization_metricsto derive from a staticproductCatalog; empty derived or explicit metric arrays are omitted from the wire response instead of advertising an empty 3.1 metric-optimization declaration. - Treat
sponsored-intelligenceas a first-class specialism in compile-time and runtime platform validation, and update the SI example/skill docs. - Align upstream-recorder
RecordedCalloutput with the cached 3.1query_upstream_trafficschema, including raw/digest attestation metadata, payload length, and digest-mode identifier proofs. - Honor storyboard
required_any_of_toolsgates withrequirement_unmetskips and skip-cause aggregation.
BREAKING:
RecordedCallis now a raw/digest discriminated union for the 3.1query_upstream_trafficresponse. Raw calls carrypayloadandpayload_length; digest calls carrypayload_digest_sha256,payload_length, and optionalidentifier_match_proofs. Consumers that assumedRecordedCall.payloadwas always present, or that constructRecordedCallliterals, need to handle the branch-specific fields.validatePlatformnow rejectsspecialisms: ['sponsored-intelligence']unless the platform provides thesponsoredIntelligenceimplementation required by that specialism. Adapters that previously advertised the specialism without dispatch support must either add the platform field or stop advertising the specialism.
- Preserve explicit
-
9e5eeda: Surface the seller-served, release-precision response
adcp_versionecho asresult.metadata.adcpVersion. -
363ddf5: Add
seed_buyer_agentsupport forcomply_test_controllerand storyboard controller seeding. -
80f255b: Harden digest-mode upstream traffic attestations with JCS length alignment, bounded identifier proof scanning, clearer not-applicable grading, and stricter storyboard identifier path validation.
computePayloadDigestSha256()now applies the recorder's default payload normalization and secret-key redaction before hashing, and accepts a thirdRegExp | false | PayloadDigestOptionsargument. PasscreateUpstreamRecorder({ redactPattern })through as{ redactPattern }, andcreateUpstreamRecorder({ maxPayloadBytes })through as{ maxPayloadBytes }. Pass{ prenormalized: true }only when the payload has already been normalized/redacted exactly as the recorder would store it; prenormalized inputs with unredacted secret-shaped keys now throwPayloadDigestError, malformed prenormalized JSON strings and duplicate secret-shaped form keys are rejected, and{ redactPattern: false }is rejected unless paired with{ prenormalized: true }. Secret-shaped keys in prenormalized payloads are considered safe only when their value is the literal"[redacted]"marker ornull. Legacy bareRegExpandfalseforms remain accepted for this major but are soft-deprecated in favor of{ redactPattern }and{ prenormalized: true }.RecordedCall.hostandRecordedCall.pathare emitted as strings. The recorder populates both fields fromnew URL(url)when parsing succeeds and emits empty strings when parsing fails.BEHAVIOR CHANGE: digest-mode
payload_lengthnow reports the canonical byte length covered bypayload_digest_sha256; raw calls continue to report the redacted emitted payload length.Manual
record()calls with JSON-string payloads now parse and secret-redact the stored payload just like wrappedfetch()calls, so raw and digest attestations use the same redacted body view. Parsed JSON string payloads now fail closed beyond the recorder's 256-level JSON canonicalization cap, and malformed JSON strings get a best-effort key-based secret scrub before diagnostic storage and surface anonErrorevent when configured and digest-mode identifier scanning cannot parse them. Digest-mode query projection now drops only the non-canonical recorded entry and surfacesdigest_canonicalization_failedthrough configuredonErrorinstead of throwing the whole query. Redaction now walks to the recorder's 256-level JSON canonicalization cap with cycle protection, raw recording rejects structured payloads beyond that cap, invalid purpose classifier values are omitted instead of emitting off-spec strings, and disabled recorder queries without a caller-supplied bound return a schema-valid epochsince_timestamp. Purpose classifier values remain a preview surface until thepurposefield is adopted by the spec; unknown values are omitted rather than emitted on the wire.Storyboard
identifier_pathsare request-payload-relative. Loader validation now rejects request/response/context-prefixed forms includingrequest.*,$["request"].*, and$..request.*; use paths such asaudiences[*].add[*].hashed_email. `runStoryboardSt...
@adcp/sdk@8.1.0-beta.13
Minor Changes
-
156059c: Update the SDK schema pin and generated surfaces to AdCP 3.1.0-beta.5.
The 3.1 beta write-side media-buy helpers now emit
format_option_refs/
format_option_idinstead of the removedcapability_idspath, while keeping
the old capability-named helper exports as beta.3 compatibility aliases.
packageRefsForCapabilities()is now documented as beta.3-only and emits a
one-time warning because beta.5 sellers rejectcapability_idson
PackageRequest.PROPOSAL_NOT_FOUNDrecovery is aligned to beta5 ascorrectable, and the
projection diagnostic detail name follows the beta5format_option_idfield
instead of the beta.3capability_idname. Regenerated types, Zod schemas,
docs, schema caches, conformance arbitraries, retry policy, and compliance
controller support are aligned with the beta5 protocol bundle. -
8c0a7f0: Expose canonical creative format migration helpers and get_products cache-scope helpers.
Adds the
CanonicalFormatnamespace plus projection subpath builder helpers for authoringformat_options[]and v1 fallback refs, exports the existing projection/write-side helpers from the package root, and addsensureGetProductsCacheScope()/validateGetProductsCacheScope()for storefronts composing legacy upstream product feeds.Also widens
SyncCreativesPayloadto include operation-levelSyncCreativesErrorpayloads and adds explicitlist_creative_formatsserver payload aliases. -
05bc22b: Add first-class helpers for decomposing and enforcing
update_media_buyaction requests.decomposeUpdateMediaBuy()exposes concrete requested mutations with action, path, scope, package IDs, and best-effort before/after values, whileassertUpdateMediaBuyAllowed()lets server adopters throw canonicalACTION_NOT_ALLOWEDerrors from per-buyavailable_actions[].
Patch Changes
-
f05ca49: Disambiguate A2A artifact
statusfields so domain payloads likeupdate_media_buyreturningstatus: "canceled"are treated as completed tool responses, not task lifecycle cancellations. Parser, validator, task polling, and signing discovery logic now consistently read the latest structured DataPart. -
a312e00: Publish releases under AdCP minor-line npm dist-tags.
The release wrapper derives
adcp-<major.minor>frompackage.json#adcp_version
and uses that as the publish-time npm tag, so OIDC trusted publishing can update
the compatibility channel without a post-publish dist-tag mutation. -
b8a08bb: Accept AdCP 3.1
vendor_metricoptimization goals increate_media_buyvalidation and treat top-levelerrors[]as advisory when a task-aware success or submitted payload is present. -
3600320: fix: let external compliance dirs provide their matching schema bundle
When
--compliance-dirpoints at another SDK package or checkout, the storyboard runner now registers the sibling schema bundle before constructing the test client. This allows a beta runner that ships only the 3.1 cache to execute a supplied 3.0 compliance bundle without failing theadcpVersionschema-bundle preflight. -
9beb418: Fix idempotency storyboard grading for MCP sellers by keeping missing-field vectors on the initialized SDK transport, and allow standard
recoverymetadata onIDEMPOTENCY_CONFLICTerror envelopes. -
ca64f88: Split storyboard runner exclusions from selected-but-skipped steps in compliance summaries.
Runs now report caller-excluded work, such as version gates, explicit request-signing vector filters, live-side-effect opt-outs, and profile exclusions, under
steps_not_selected/not_selected_by_reasoninstead of inflatingsteps_skipped. Selected steps that could not execute, such as missing tools or missingcomply_test_controller, remain skipped.The narrow compliance summary artifact is bumped to schema version 2 and now exposes
not_selected_count, optionalnot_selectedrecords,not_selected_by_reason, andskipped_by_reason.
@adcp/sdk@8.1.0-beta.12
Minor Changes
-
bbf735c: Export
parseWholesaleFeedWebhookNotification/
normalizeWholesaleFeedWebhookNotificationhelpers for canonical wholesale-feed
webhook receivers and alignWholesaleFeedSyncdedupe semantics with delivery
idempotency_keyplus canonical logical event identity
notification_id === event.event_id.Add buyer-side signal discovery helpers that normalize
get_signalsrows,
expose the canonicalactivate_signal.signal_agent_segment_idhandle, and
build activation requests without confusingsignal_idprovenance for the
activation key.
Patch Changes
-
70cdb20: Recognize
ACTION_NOT_ALLOWEDthrough the shared standard error-code runtime table so decisioningAdcpErrorconstruction does not warn for the AdCP 3.1 code. -
d6528d7: Tighten beta.11 server payload migration around
get_products.cache_scope.Server-facing
get_productspayload aliases andproductsResponse()now require
cache_scopewheneverproductsare returned or a wholesale-feed response is
unchanged. Unchanged responses still omitproducts, but must echo
cache_scope. Strict response validation catches plain JavaScript adopters that
bypass TypeScript.Framework response defaulting now infers
cache_scope: 'public'only when there
is no inline account and no auth-derived/resolved account. Account-scoped
requests fail closed unless the adapter explicitly choosespublicor
account, and sandbox/test-controller seeded merges no longer hide missing
account-scoped scope.
@adcp/sdk@8.1.0-beta.11
Minor Changes
-
8d32fe6: fix(media-buy): use generated 3.1 types for
available_actions[]surfaceThe hand-written wire-shape types in
src/lib/media-buy/types.ts(MediaBuyValidAction,MediaBuyActionMode,MediaBuyAvailableAction,ActionNotAllowedReason,ActionNotAllowedDetails, and the SLA window) are deleted and replaced with re-exports fromsrc/lib/types/core.generated.tsnow that the AdCP 3.1.0-beta.3 schema cache produces them.Breaking type shape fix. The previously-shipped
SlaWindowwas{ unit, value, response_max? }. The spec evolved toSLAWindow(caps, ISO acronym convention) with shape{ response_max?, completion_max? }where both are ISO 8601 duration strings. Adopters readingavailable_actions[0].sla.response_maxagainst the prior type would have hit a runtime shape mismatch when sellers actually populatedsla.SLAWindowis the canonical export;SlaWindowremains as a deprecated import-compatibility alias to the corrected generated shape.Helper-local types stay:
LEGACY_COARSE_ACTIONS,LegacyCoarseAction,MediaBuyActionContext,UpdateMediaBuyRequestLike. These are convenience subsets the preflight resolver reads against and aren't part of the wire schema.scripts/generate-media-buy-update-fields.tsre-ran against the real 3.1.0-beta.3 cache. The generatedenumMetadata.update_fieldstable is unchanged from the snapshot taken against the merged-but-pre-release upstream copy.Preflight logic, boolean gates,
ActionNotAllowedError, and the compat shim forvalid_actions[]are unchanged. -
a809021: Re-export SSRF-safe networking helpers from the package root and the new
@adcp/sdk/netpublic subpath. This includesssrfSafeFetch,
SsrfRefusedError,SSRF_TRANSIENT_CODES,decodeBodyAsJsonOrText,
isPrivateIp,isAlwaysBlocked, andisLikelyPrivateUrl.Docs add the 8.0 -> 8.1 migration guide and a recipe for verifying inbound
webhooks with RFC 9421, per-agent isolation, multi-replica replay storage, and
legacy HMAC handling.
Patch Changes
- dcefd85: Expose named server
*Payloadaliases from the root, types, and server barrels so adopters can annotate server-side adapter returns without importing wire*Responsetypes. - 90d9edb: Normalize legacy media-buy lifecycle status responses during validation and storyboard capture, and export
getAuthoritativeMediaBuyStatus/isMediaBuyStatushelpers for reading authoritative media-buy status from mixed-version payloads. The normalized return shape preserves seller-provided legacystatusvalues while adding canonicalmedia_buy_statuswhere the lifecycle status is unambiguous. - 77252a9: Fix false-positive collision warnings in per-tool type extractor when the same type is emitted by both tools.generated and core.generated with different JSDoc but identical structure.
@adcp/sdk@8.1.0-beta.10
Patch Changes
-
6738e2a: Export named server
*Payloadand*HandlerResultaliases for decisioning handlers, and keep those payload types aligned with runtime response projection by stripping write-only webhook credentials and billing bank fields.Adopters that annotated server helper layers with generated wire
*Response/*Successtypes should switch those annotations to the exported aliases from@adcp/sdk/server, or useServerPayload<T>directly for less common generated response shapes. -
21240cf: fix: make storyboard runner version negotiation explicit
Storyboards now inherit the AdCP version from the selected compliance cache, suppress the exact
adcp_versionmarker for 3.0 cache runs, and opt into explicit 3.1 markers only when running 3.1 storyboards. The compliance runner and CLI also expose cache selection so the runner does not infer the spec line solely from the installed package version.
@adcp/sdk@8.1.0-beta.9
Patch Changes
-
c9a2e63: Expose generated input helpers for brand discovery and verification custom tools, including a full-schema helper for union-shaped
verify_brand_claimrequests. -
e52f1bf: Preserve ZodObject helpers for safe generated object intersections, including
validate_property_deliveryrequest schemas used for MCP tool registration. -
94ba961: Restore ZodObject helper access on ProductSchema and marker-backed canonical format schemas by collapsing marker-only intersections during schema generation.
Also preserve exact known-key typing for exported tool request/input schema maps while keeping dynamic string lookups explicitly nullable.
-
eb0d260: Restore
ZodObjectergonomics for generated schemas whose only intersection arms are opaqueRecord<string, unknown>markers.ProductSchemaand related marker-only format schemas now expose object helpers like.extend(),.omit(),.pick(), and.shapeagain without changing runtime validation behavior. -
314ea71: Type server/platform handler returns as domain payloads rather than requiring protocol task-envelope fields from generated wire response types. The SDK continues to stamp envelope fields such as
status: "completed"at dispatch time, and exportsServerPayload<T>for adopters that want explicit payload return annotations.