@adcp/sdk 16.0.0-beta.9 → 16.1.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.
- package/README.md +54 -2
- package/bin/adcp-identity.js +3 -2
- package/dist/lib/client/core.d.mts +1 -1
- package/dist/lib/client/core.d.ts +1 -1
- package/dist/lib/core/AgentClient.d.mts +8 -1
- package/dist/lib/core/AgentClient.d.ts +8 -1
- package/dist/lib/core/AgentClient.js +10 -0
- package/dist/lib/core/AgentClient.mjs +10 -0
- package/dist/lib/core/AsyncHandler.d.mts +2 -0
- package/dist/lib/core/AsyncHandler.d.ts +2 -0
- package/dist/lib/core/AsyncHandler.js +1 -1
- package/dist/lib/core/AsyncHandler.mjs +1 -1
- package/dist/lib/core/ConversationTypes.d.mts +32 -0
- package/dist/lib/core/ConversationTypes.d.ts +32 -0
- package/dist/lib/core/SingleAgentClient.d.mts +11 -1
- package/dist/lib/core/SingleAgentClient.d.ts +11 -1
- package/dist/lib/core/SingleAgentClient.js +25 -6
- package/dist/lib/core/SingleAgentClient.mjs +26 -7
- package/dist/lib/core/TaskExecutor.d.mts +3 -1
- package/dist/lib/core/TaskExecutor.d.ts +3 -1
- package/dist/lib/core/TaskExecutor.js +127 -34
- package/dist/lib/core/TaskExecutor.mjs +127 -34
- package/dist/lib/core/task-deadline.d.mts +2 -0
- package/dist/lib/core/task-deadline.d.ts +2 -0
- package/dist/lib/core/task-deadline.js +20 -2
- package/dist/lib/core/task-deadline.mjs +19 -2
- package/dist/lib/identity-3.3/revocation.js +6 -7
- package/dist/lib/identity-3.3/revocation.mjs +6 -7
- package/dist/lib/identity-3.3/schemas.draft.js +1 -1
- package/dist/lib/identity-3.3/schemas.draft.mjs +1 -1
- package/dist/lib/identity-3.3/trust.d.mts +8 -0
- package/dist/lib/identity-3.3/trust.d.ts +8 -0
- package/dist/lib/identity-3.3/trust.js +41 -12
- package/dist/lib/identity-3.3/trust.mjs +40 -12
- package/dist/lib/index.d.mts +1 -1
- package/dist/lib/index.d.ts +1 -1
- package/dist/lib/server/account-sync-contract.js +4 -1
- package/dist/lib/server/account-sync-contract.mjs +4 -1
- package/dist/lib/server/create-adcp-server.js +1 -1
- package/dist/lib/server/create-adcp-server.mjs +1 -1
- package/dist/lib/server/decisioning/runtime/from-platform.js +22 -17
- package/dist/lib/server/decisioning/runtime/from-platform.mjs +22 -17
- package/dist/lib/signing/crypto.d.mts +1 -1
- package/dist/lib/signing/crypto.d.ts +1 -1
- package/dist/lib/signing/crypto.js +2 -45
- package/dist/lib/signing/crypto.mjs +2 -46
- package/dist/lib/signing/web-bot-auth.d.mts +18 -10
- package/dist/lib/signing/web-bot-auth.d.ts +18 -10
- package/dist/lib/signing/web-bot-auth.js +48 -28
- package/dist/lib/signing/web-bot-auth.mjs +49 -29
- package/dist/lib/testing/storyboard/validations.d.mts +1 -1
- package/dist/lib/testing/storyboard/validations.d.ts +1 -1
- package/dist/lib/v2/projection/catalog.d.mts +10 -0
- package/dist/lib/v2/projection/catalog.d.ts +10 -0
- package/dist/lib/v2/projection/catalog.js +5 -0
- package/dist/lib/v2/projection/catalog.mjs +4 -0
- package/dist/lib/v2/projection/creative-delivery.d.mts +15 -9
- package/dist/lib/v2/projection/creative-delivery.d.ts +15 -9
- package/dist/lib/v2/projection/creative-delivery.js +71 -10
- package/dist/lib/v2/projection/creative-delivery.mjs +71 -10
- package/dist/lib/v2/projection/v1-to-v2.js +3 -2
- package/dist/lib/v2/projection/v1-to-v2.mjs +4 -3
- 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.mjs +3 -3
- package/docs/TYPE-SUMMARY.md +12 -2
- package/docs/guides/CREATIVE-DELIVERY.md +18 -1
- package/docs/guides/REPORTING-STABILITY.md +7 -7
- package/docs/llms.txt +3 -3
- package/docs/migration-14.x-rc-worksheet.md +4 -4
- package/docs/migration-agent-identity-3.3.md +56 -23
- package/docs/migration-reporting-storage-package.md +3 -3
- package/docs/releases/16.0.0.md +20 -0
- package/package.json +1 -1
|
@@ -16,8 +16,8 @@ pin using `ADCP_VERSION` inside that tarball.
|
|
|
16
16
|
|
|
17
17
|
| Fact | Value |
|
|
18
18
|
| --- | --- |
|
|
19
|
-
| Checkout `package.json` version | `@adcp/sdk@16.
|
|
20
|
-
| npm integrity | registry-derived after publication; run `npm view @adcp/sdk@16.
|
|
19
|
+
| Checkout `package.json` version | `@adcp/sdk@16.1.0` |
|
|
20
|
+
| npm integrity | registry-derived after publication; run `npm view @adcp/sdk@16.1.0 dist.integrity` |
|
|
21
21
|
| Node.js runtime | `^20.19.0 || >=22.12.0` |
|
|
22
22
|
| Default AdCP wire release | `3.2.5` |
|
|
23
23
|
| Maintained wire releases | `v3`, `3.0.0`, `3.0`, `3.0.1`, `3.0.2`, `3.0.3`, `3.0.4`, `3.0.5`, `3.0.6`, `3.0.7`, `3.0.8`, `3.0.9`, `3.0.10`, `3.0.11`, `3.0.12`, `3.0.13`, `3.0.14`, `3.0.15`, `3.0.16`, `3.0.17`, `3.0.18`, `3.0.19`, `3.0.20`, `3.0.21`, `3.0.22`, `3.0.23`, `3.0.24`, `3.0.25`, `3.1.0`, `3.1`, `3.1.1`, `3.1.2`, `3.1.3`, `3.1.4`, `3.1.5`, `3.1.6`, `3.1.7`, `3.1.8`, `3.1.9`, `3.1.10`, `3.1.11`, `3.1.12`, `3.1.13`, `3.1.14`, `3.1.15`, `3.1.16`, `3.1.17`, `3.1.18`, `3.1.19`, `3.1.20`, `3.1.21`, `3.1.22`, `3.1.23`, `3.1.24`, `3.1.25`, `3.1.26`, `3.1.27`, `3.1.28`, `3.1.29`, `3.2.1`, `3.2`, `3.2.2`, `3.2.3`, `3.2.4`, `3.2.5` |
|
|
@@ -26,8 +26,8 @@ pin using `ADCP_VERSION` inside that tarball.
|
|
|
26
26
|
For a checkout at the published release commit, install the exact package version:
|
|
27
27
|
|
|
28
28
|
```bash
|
|
29
|
-
npm install --save-exact '@adcp/sdk@16.
|
|
30
|
-
npm view '@adcp/sdk@16.
|
|
29
|
+
npm install --save-exact '@adcp/sdk@16.1.0'
|
|
30
|
+
npm view '@adcp/sdk@16.1.0' dist.integrity
|
|
31
31
|
```
|
|
32
32
|
|
|
33
33
|
### Required and optional peers
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
The experimental identity rollout is tracked in
|
|
4
4
|
[adcp-client#3233](https://github.com/adcontextprotocol/adcp-client/issues/3233).
|
|
5
5
|
This release implements the rollout behind explicit experimental configuration.
|
|
6
|
-
The SDK's default `ADCP_VERSION` remains **3.2.
|
|
6
|
+
The SDK's default `ADCP_VERSION` remains **3.2.5**. Experimental client/server
|
|
7
7
|
instances select the 3.3 carrier and apply the pinned draft overlays to the
|
|
8
8
|
released bundle; they do not regenerate or replace the public 3.2 types.
|
|
9
9
|
Upstream PRs remain open, so the experiment can change before graduation.
|
|
@@ -126,18 +126,44 @@ final UTF-8 body, covers the selected `Signature-Agent` member and digest,
|
|
|
126
126
|
uses a fresh 64-byte nonce, and refuses automatic HTTP redirects. A request
|
|
127
127
|
carries exactly one `web-bot-auth` signature and one `Signature-Agent` member:
|
|
128
128
|
relays were removed from the profile, `signWebBotAuth` throws on `relay: true`
|
|
129
|
-
and on a request that already carries signature fields
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
129
|
+
and on a request that already carries signature fields. The verifier reads
|
|
130
|
+
only the `Signature-Input` member tagged `web-bot-auth` and ignores members
|
|
131
|
+
with other tags, such as a CDN's own signature. It answers a second
|
|
132
|
+
`web-bot-auth` signature or a second `Signature-Agent` member with 403.
|
|
133
|
+
Signing keys are Ed25519 only; ES256 stays on the AdCP RFC 9421 profile, and
|
|
133
134
|
`createWebBotAuthFetch`, `createWebhookEmitter` and `createAdcpServer` refuse
|
|
134
|
-
a P-256 Web Bot Auth key at wire-up.
|
|
135
|
+
a P-256 or RSA Web Bot Auth key at wire-up.
|
|
136
|
+
|
|
137
|
+
This also changes two helpers outside the experiment. `verifySignature` and
|
|
138
|
+
`verifySignatureAsync`, which `@adcp/sdk/signing/server` exports, no longer
|
|
139
|
+
verify `rsa-pss-sha512`: they return `false` for it, as for any algorithm they
|
|
140
|
+
don't support. Only Web Bot Auth used it, and the AdCP RFC 9421 profile allows
|
|
141
|
+
only `ed25519` and `ecdsa-p256-sha256`. A caller that verifies RSA-PSS
|
|
142
|
+
signatures with these helpers needs to verify them with `node:crypto` or
|
|
143
|
+
WebCrypto instead.
|
|
144
|
+
|
|
145
|
+
The covered `Signature-Agent` member must be exactly the canonical https origin
|
|
146
|
+
string, compared as received: a lowercase host, no default port, and no path
|
|
147
|
+
(not even `/`), query, fragment, or userinfo. Any other value, including an
|
|
148
|
+
`http://` origin, is a 403 before any directory fetch. The signers apply the
|
|
149
|
+
same rule: `signWebBotAuth`, `createSignedSignatureDirectory` and
|
|
150
|
+
`createWebBotAuthFetch` canonicalize the agent origin they are given and throw a
|
|
151
|
+
`TypeError` when it is not https, such as `http://localhost:3000`. There is no
|
|
152
|
+
http opt-in. The member's `type`
|
|
153
|
+
parameter is a Token (WBA section 5.2.1), and the verifier accepts
|
|
154
|
+
`type=directory` as a Token or as a String. It ignores a member of any other
|
|
155
|
+
type, which leaves no member to resolve (403).
|
|
135
156
|
|
|
136
157
|
`SignatureDirectoryResolver` derives the directory from the covered canonical
|
|
137
|
-
origin. Directories must be signed (WBA Appendix B.1): it
|
|
138
|
-
|
|
139
|
-
`content-digest`, and the exact body digest before caching keys.
|
|
140
|
-
|
|
158
|
+
origin. Directories must be signed (WBA Appendix B.1): it uses each Ed25519
|
|
159
|
+
key that has a valid possession signature, covering `"@authority";req` and
|
|
160
|
+
`content-digest`, and validates the exact body digest before caching keys. It
|
|
161
|
+
ignores every other key and any signature it made: a key the profile cannot
|
|
162
|
+
use, such as a P-256 key, a key it cannot import, such as an Ed25519 key with
|
|
163
|
+
no `x` (RFC 7517 section 5), and a key without a valid signature (WBA Appendix
|
|
164
|
+
B.1; directory draft section 5). An unsigned directory, one with no validly
|
|
165
|
+
signed Ed25519 key, or one that publishes private key material for any key,
|
|
166
|
+
usable or not, is a discovery failure. Its audit proof retains the signed body and
|
|
141
167
|
headers. Verification requires this resolver so context-free JWKS adapters cannot
|
|
142
168
|
attribute a key to an arbitrary origin. Discovery uses HTTPS, DNS pinning, no redirects, a 256 KiB cap, a
|
|
143
169
|
5-second connect bound and 10-second total bound, at most 64 keys, and bounded
|
|
@@ -155,8 +181,7 @@ Serve the exact JWS at `/.well-known/governance-revocations.json` and refresh it
|
|
|
155
181
|
before `next_update` (the command defaults to five minutes). Pass `--snapshot`
|
|
156
182
|
to sign a list of revoked key thumbprints and optional reasons/dates.
|
|
157
183
|
`createSignedOriginRevocationList` provides the same authoring API. The SDK
|
|
158
|
-
signs and verifies revocation lists with directory keys
|
|
159
|
-
and PS512 for RSA keys (a P-256 key cannot be published in a key directory). Observed key revocations are permanent;
|
|
184
|
+
signs and verifies revocation lists with Ed25519 directory keys, as EdDSA. Observed key revocations are permanent;
|
|
160
185
|
refresh failures use the last verified list only within the published grace
|
|
161
186
|
window. Staleness follows the list's signed `next_update`, never the polling
|
|
162
187
|
interval: the verifier re-polls at least every polling interval (at most 30
|
|
@@ -336,7 +361,12 @@ operator) to the signer's operator, or a two-link chain through the account
|
|
|
336
361
|
operator, is accepted. The
|
|
337
362
|
intersection must cover the actual brand IDs, countries, scope, signer-origin
|
|
338
363
|
narrowing and temporal window. A restrictive published grant cannot be
|
|
339
|
-
superseded by seller fallback. A
|
|
364
|
+
superseded by seller fallback. A grant's `grantee` must be a registrable domain
|
|
365
|
+
under the pinned PSL snapshot (`alice.github.io` is one; `github.io` and
|
|
366
|
+
`media.agency.com` are not). A grant whose `grantee` is not one covers no claim
|
|
367
|
+
and does not block seller fallback, but its scopes still count for
|
|
368
|
+
`exclusive_grants`. `createTrustRecord` and `adcp identity trust-validate` refuse
|
|
369
|
+
such grantees. A trust 200 disables brand.json authority;
|
|
340
370
|
authoritative absence alone permits explicit legacy policy. An established
|
|
341
371
|
identity lacking a grant gets `PERMISSION_DENIED` with
|
|
342
372
|
`{ scope: 'agent', reason: 'grant_absent' }`. No account or live buy is changed.
|
|
@@ -379,16 +409,19 @@ released schemas:
|
|
|
379
409
|
|
|
380
410
|
| PR | Pinned head | Surface |
|
|
381
411
|
| --- | --- | --- |
|
|
382
|
-
| [7894](https://github.com/adcontextprotocol/adcp/pull/7894) | `
|
|
412
|
+
| [7894](https://github.com/adcontextprotocol/adcp/pull/7894) | `9f472d63900b99efcd9ed05b5d0bb75552c3b9d6` | WBA wire profile (`wba-profile.mdx`), profile selectors |
|
|
383
413
|
| [8121](https://github.com/adcontextprotocol/adcp/pull/8121) | `f5973ac0267b1b94d714c55fc4e3ad8fc2511350` | Origin identity and key-free trust v1 |
|
|
384
414
|
| [8162](https://github.com/adcontextprotocol/adcp/pull/8162) | `5c9914c5c382cc32f3d2ad7842942e548c414705` | Ratified identity, coexistence, revocation |
|
|
385
415
|
| [8168](https://github.com/adcontextprotocol/adcp/pull/8168) | `45540941dfd61e80ab8a463f780cb147c82a32f0` | Relationship and principal response arms |
|
|
386
|
-
| [8169](https://github.com/adcontextprotocol/adcp/pull/8169) | `3ce6a14d7afaa71fa78ddf2223ed0421e01205ae` | Grants, trust schema, grant_absent |
|
|
416
|
+
| [8169](https://github.com/adcontextprotocol/adcp/pull/8169) | `3ce6a14d7afaa71fa78ddf2223ed0421e01205ae` | Grants, trust schema, grant_absent; the registrable-domain `grantee` rule and its schema description from `eabe46048530c08a34e6eee6e4d15d7848e01c57` |
|
|
387
417
|
| [8170](https://github.com/adcontextprotocol/adcp/pull/8170) | `8d3591e70e9a717c7fdfb513360a796fba24ca9a` | Onboarding additions only; its old trust key fields are excluded |
|
|
388
418
|
| [8177](https://github.com/adcontextprotocol/adcp/pull/8177) | `b663f8e4235fe4276c73fb9bac6db491b2252bbf` | Reporting authentication omission |
|
|
419
|
+
| [8298](https://github.com/adcontextprotocol/adcp/pull/8298) | `f44785a5b65db93988f30ad3d23ba5849f1a1d5e` | WBA interop harness, directory and request vectors |
|
|
389
420
|
|
|
390
|
-
The vectors in `test/fixtures/wba-profile/` are byte-identical to #
|
|
391
|
-
head
|
|
421
|
+
The vectors in `test/fixtures/wba-profile/` are byte-identical to #8298 at that
|
|
422
|
+
head (see `PINNED.json`), which carries the #7894 profile and vectors. Every
|
|
423
|
+
vendored request and directory vector is graded, and the interop harness
|
|
424
|
+
(adcontextprotocol/adcp#8298) grades `scenarios.json`.
|
|
392
425
|
|
|
393
426
|
Verification runs in Cloudflare's `http-message-sig` (signature base, coverage,
|
|
394
427
|
window, algorithm and cryptographic checks); the SDK adds the profile rules in
|
|
@@ -413,7 +446,7 @@ so verification can run in a CDN or middleware in front of the AdCP server.
|
|
|
413
446
|
reason is logged, never sent. A 429 for local load shedding (directory fetch
|
|
414
447
|
limiter, replay-store `rate_abuse`) carries `Retry-After` instead.
|
|
415
448
|
- Every signed request carries `created`, `expires` (at most 300 seconds
|
|
416
|
-
later), `keyid`, `alg` (`ed25519`
|
|
449
|
+
later), `keyid`, `alg` (`ed25519`) and a `nonce` of 64
|
|
417
450
|
bytes, unpadded Base64URL or canonical padded Base64 (Cloudflare's default).
|
|
418
451
|
The former 16-byte floor is gone: a shorter nonce is a 403. Replay state is
|
|
419
452
|
keyed on the nonce bytes, so the two encodings of one nonce collide.
|
|
@@ -454,14 +487,14 @@ so verification can run in a CDN or middleware in front of the AdCP server.
|
|
|
454
487
|
back off on 429 or 503.
|
|
455
488
|
- `@target-uri` and `@authority` are taken from the target URI as received
|
|
456
489
|
(RFC 9421 §2.2.2), never canonicalized; canonical origins identify the signer
|
|
457
|
-
only. Ed25519 and
|
|
458
|
-
where the runtime has it, so it also works on Cloudflare workerd.
|
|
490
|
+
only. Web Bot Auth is Ed25519 only, and it also works on Cloudflare workerd.
|
|
459
491
|
`test/fixtures/wba-interop/` holds fixtures verified in both directions against
|
|
460
492
|
Cloudflare's `web-bot-auth`; they already used signed directories and are
|
|
461
493
|
unchanged.
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
494
|
+
#7894 drops the governance-token checks and the `governance/` vectors from the
|
|
495
|
+
WBA profile. Governance moves to the AdCP layer under a separate R4 erratum,
|
|
496
|
+
which moves JWS artifacts, governance included, to the identity's WBA key
|
|
497
|
+
directory in 3.3. This change leaves the SDK's governance code as it is.
|
|
465
498
|
The buyer default onboarding field is `profiles.adcp.onboarding`, matching the
|
|
466
499
|
schema; the design's `record_profiles` wording names the schema definition.
|
|
467
500
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Reliable Reporting storage moved to `@adcp/reporting-storage`
|
|
2
2
|
|
|
3
|
-
**Applies to:** SDK 16
|
|
3
|
+
**Applies to:** SDK 16. **Kind:** breaking, by design. There are no re-export shims: the moved subpaths are gone from `@adcp/sdk`.
|
|
4
4
|
|
|
5
5
|
The Reliable Reporting storage implementations now ship as their own package, `@adcp/reporting-storage`, on its own version line. `@adcp/sdk` keeps the protocol layer. If you import anything from `@adcp/sdk/reporting/gcs`, `/s3`, `/azure` or `/bigquery`, or the PostgreSQL store, row storage, managed delivery or notification activity from `@adcp/sdk/reporting/ledger`, or `createPostgresReliableReportingProductionService` from `@adcp/sdk/reporting/service`, change those imports. Nothing else changes on the wire, in the database schema, or in the ledger's behavior.
|
|
6
6
|
|
|
@@ -11,10 +11,10 @@ Why: storage keeps its own release cadence, as Auth.js, LangGraph and OpenTeleme
|
|
|
11
11
|
1. Install the package next to the SDK. `@adcp/sdk` is a peer dependency of it, so the host keeps exactly one copy:
|
|
12
12
|
|
|
13
13
|
```bash
|
|
14
|
-
npm install @adcp/sdk
|
|
14
|
+
npm install @adcp/sdk@^16.0.0 @adcp/reporting-storage@~0.1.0
|
|
15
15
|
```
|
|
16
16
|
|
|
17
|
-
Pin the storage package with `~` (`"@adcp/reporting-storage": "~0.1.0
|
|
17
|
+
Pin the storage package with `~` (`"@adcp/reporting-storage": "~0.1.0"`; this stable range does not match the earlier `0.1.0-beta.0` prerelease): it is pre-1.0 and every export is experimental. The cloud SDKs are optional peers of the new package, not of `@adcp/sdk` any more, so keep `@aws-sdk/client-s3`, `@azure/storage-blob` and `@google-cloud/storage` in your own dependencies for the providers you use.
|
|
18
18
|
|
|
19
19
|
2. Change the imports using the table below, then run `tsc --noEmit`. A moved name on `@adcp/sdk/reporting/ledger` or `/service` is `TS2305: Module '"@adcp/sdk/reporting/ledger"' has no exported member 'PostgresReportingLedgerStore'`; a deleted subpath is `TS2307: Cannot find module '@adcp/sdk/reporting/gcs'`. At runtime the deleted subpaths fail with `ERR_PACKAGE_PATH_NOT_EXPORTED`, and a stale CommonJS `require` of a moved name on a kept subpath destructures to `undefined` and fails later as `X is not a constructor`, so grep JavaScript too (see [Self-grade](#self-grade)).
|
|
20
20
|
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# SDK 16.0.0
|
|
2
|
+
|
|
3
|
+
SDK 16 is the stable AdCP 3.2 release line. Its default protocol pin is **3.2.5**, with maintained AdCP 3.0 and 3.1 compatibility. Install it with `npm install @adcp/sdk@^16.0.0`.
|
|
4
|
+
|
|
5
|
+
## Upgrade from SDK 15
|
|
6
|
+
|
|
7
|
+
- **AdCP 2 support is removed.** Sellers must support AdCP 3 capability discovery. Retired adapters, types, schema bundles and `allowV2` configuration are removed. See the [AdCP 2 retirement guide](../migration-drop-adcp-2.md).
|
|
8
|
+
- **Reliable Reporting storage has its own package.** Install `@adcp/reporting-storage@~0.1.0` alongside the SDK and update the moved imports. The storage package remains experimental and pre-1.0 even though SDK 16 is stable. See the [package migration](../migration-reporting-storage-package.md) and [stability policy](../guides/REPORTING-STABILITY.md).
|
|
9
|
+
- **Reporting row storage uses the protocol field names and source-timezone period dates.** Apply the migration and update custom object providers as described in the [row storage alignment guide](../migration-reporting-row-storage-alignment.md). Re-apply the warehouse sink migration when upgrading existing BigQuery sinks; see the [SDK changelog](https://github.com/adcontextprotocol/adcp-client/blob/main/CHANGELOG.md#1600).
|
|
10
|
+
- **Compliance notice codes use the canonical names.** Replace `request_signing.required` with `request_signing_required_in_4_0` and `webhook_signing.legacy_hmac_fallback.removed` with `legacy_hmac_fallback_removed_in_4_0` in comparisons and dashboard keys.
|
|
11
|
+
|
|
12
|
+
The [changelog](https://github.com/adcontextprotocol/adcp-client/blob/main/CHANGELOG.md#1600) includes the complete SDK 16 changes, including creative wire selection, account sync, property-list workflows and reporting fixes. Use the [release-bound upgrade worksheet](../migration-14.x-rc-worksheet.md) to check the exact package, runtime, peers and protocol bundle.
|
|
13
|
+
|
|
14
|
+
SDK 16.0.0 also includes [#3350](https://github.com/adcontextprotocol/adcp-client/pull/3350): legacy creative delivery maps asset keys to the selected format's declared asset IDs, including image, click URL and tracker slots, while preserving occupied or ambiguous keys. See [creative delivery](../guides/CREATIVE-DELIVERY.md).
|
|
15
|
+
|
|
16
|
+
## AdCP 3.3 preview
|
|
17
|
+
|
|
18
|
+
The explicit `@adcp/sdk/identity-3.3` opt-in remains experimental. Promoting SDK 16 does not graduate that API or change the default wire pin to AdCP 3.3. See the [experimental identity guide](../migration-agent-identity-3.3.md).
|
|
19
|
+
|
|
20
|
+
SDK 17 beta is the next release line for adopting the published AdCP 3.3 beta bundle. SDK 16 stays on AdCP 3.2 while that work proceeds. The `latest` channel stays on stable releases and `beta` carries the SDK 17 previews; a preview is published only once its protocol bundle is available and its integration passes validation.
|