@adcp/sdk 15.9.1 → 16.0.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/adcp-identity.js +74 -0
- package/bin/adcp.js +2 -0
- package/dist/lib/adapters/keyed-account-backend.d.mts +37 -0
- package/dist/lib/adapters/keyed-account-backend.d.ts +37 -0
- package/dist/lib/adapters/keyed-account-backend.js +121 -0
- package/dist/lib/adapters/keyed-account-backend.mjs +94 -0
- package/dist/lib/adapters/keyed-account-store.d.mts +28 -0
- package/dist/lib/adapters/keyed-account-store.d.ts +28 -0
- package/dist/lib/adapters/keyed-account-store.js +227 -0
- package/dist/lib/adapters/keyed-account-store.mjs +203 -0
- package/dist/lib/core/SingleAgentClient.d.mts +25 -2
- package/dist/lib/core/SingleAgentClient.d.ts +25 -2
- package/dist/lib/core/SingleAgentClient.js +280 -62
- package/dist/lib/core/SingleAgentClient.mjs +282 -57
- package/dist/lib/core/TaskExecutor.d.mts +6 -0
- package/dist/lib/core/TaskExecutor.d.ts +6 -0
- package/dist/lib/core/TaskExecutor.js +66 -5
- package/dist/lib/core/TaskExecutor.mjs +71 -5
- package/dist/lib/core/postgres-webhook-registration-store.js +32 -5
- package/dist/lib/core/postgres-webhook-registration-store.mjs +32 -5
- package/dist/lib/core/redis-webhook-registration-store.js +23 -1
- package/dist/lib/core/redis-webhook-registration-store.mjs +23 -1
- package/dist/lib/core/webhook-registration.d.mts +7 -1
- package/dist/lib/core/webhook-registration.d.ts +7 -1
- package/dist/lib/core/webhook-registration.js +24 -2
- package/dist/lib/core/webhook-registration.mjs +23 -2
- package/dist/lib/identity-3.3/generated-compat.d.mts +34 -0
- package/dist/lib/identity-3.3/generated-compat.d.ts +34 -0
- package/dist/lib/identity-3.3/generated-compat.js +16 -0
- package/dist/lib/identity-3.3/generated-compat.mjs +0 -0
- package/dist/lib/identity-3.3/index.d.mts +10 -0
- package/dist/lib/identity-3.3/index.d.ts +10 -0
- package/dist/lib/identity-3.3/index.js +79 -0
- package/dist/lib/identity-3.3/index.mjs +50 -0
- package/dist/lib/identity-3.3/lifecycle.d.mts +125 -0
- package/dist/lib/identity-3.3/lifecycle.d.ts +125 -0
- package/dist/lib/identity-3.3/lifecycle.js +294 -0
- package/dist/lib/identity-3.3/lifecycle.mjs +272 -0
- package/dist/lib/identity-3.3/revocation.d.mts +86 -0
- package/dist/lib/identity-3.3/revocation.d.ts +86 -0
- package/dist/lib/identity-3.3/revocation.js +308 -0
- package/dist/lib/identity-3.3/revocation.mjs +286 -0
- package/dist/lib/identity-3.3/schemas.draft.d.mts +2472 -0
- package/dist/lib/identity-3.3/schemas.draft.d.ts +2472 -0
- package/dist/lib/identity-3.3/schemas.draft.js +1448 -0
- package/dist/lib/identity-3.3/schemas.draft.mjs +1428 -0
- package/dist/lib/identity-3.3/server.d.mts +46 -0
- package/dist/lib/identity-3.3/server.d.ts +46 -0
- package/dist/lib/identity-3.3/server.js +279 -0
- package/dist/lib/identity-3.3/server.mjs +260 -0
- package/dist/lib/identity-3.3/store.d.mts +24 -0
- package/dist/lib/identity-3.3/store.d.ts +24 -0
- package/dist/lib/identity-3.3/store.js +191 -0
- package/dist/lib/identity-3.3/store.mjs +169 -0
- package/dist/lib/identity-3.3/trust.d.mts +155 -0
- package/dist/lib/identity-3.3/trust.d.ts +155 -0
- package/dist/lib/identity-3.3/trust.js +383 -0
- package/dist/lib/identity-3.3/trust.mjs +342 -0
- package/dist/lib/identity-3.3/types.d.mts +155 -0
- package/dist/lib/identity-3.3/types.d.ts +155 -0
- package/dist/lib/identity-3.3/types.js +16 -0
- package/dist/lib/identity-3.3/types.mjs +0 -0
- package/dist/lib/identity-3.3/validation.d.mts +2 -0
- package/dist/lib/identity-3.3/validation.d.ts +2 -0
- package/dist/lib/identity-3.3/validation.js +125 -0
- package/dist/lib/identity-3.3/validation.mjs +91 -0
- package/dist/lib/index.d.mts +1 -1
- package/dist/lib/index.d.ts +1 -1
- package/dist/lib/index.js +2 -0
- package/dist/lib/index.mjs +2 -0
- package/dist/lib/protocols/index.d.mts +1 -1
- package/dist/lib/protocols/index.d.ts +1 -1
- package/dist/lib/protocols/index.js +2 -2
- package/dist/lib/protocols/index.mjs +2 -2
- package/dist/lib/reporting/azure/index.d.mts +5 -0
- package/dist/lib/reporting/azure/index.d.ts +5 -0
- package/dist/lib/reporting/azure/index.js +26 -7
- package/dist/lib/reporting/azure/index.mjs +26 -7
- package/dist/lib/reporting/bigquery/index.d.mts +39 -5
- package/dist/lib/reporting/bigquery/index.d.ts +39 -5
- package/dist/lib/reporting/bigquery/index.js +26 -20
- package/dist/lib/reporting/bigquery/index.mjs +26 -20
- package/dist/lib/reporting/gcs/adapter.d.mts +8 -1
- package/dist/lib/reporting/gcs/adapter.d.ts +8 -1
- package/dist/lib/reporting/gcs/errors.d.mts +6 -0
- package/dist/lib/reporting/gcs/errors.d.ts +6 -0
- package/dist/lib/reporting/gcs/fence.d.mts +5 -0
- package/dist/lib/reporting/gcs/fence.d.ts +5 -0
- package/dist/lib/reporting/gcs/index.d.mts +9 -0
- package/dist/lib/reporting/gcs/index.d.ts +9 -0
- package/dist/lib/reporting/gcs/reader.d.mts +27 -3
- package/dist/lib/reporting/gcs/reader.d.ts +27 -3
- package/dist/lib/reporting/gcs/row-provider.d.mts +7 -0
- package/dist/lib/reporting/gcs/row-provider.d.ts +7 -0
- package/dist/lib/reporting/gcs/row-provider.js +34 -14
- package/dist/lib/reporting/gcs/row-provider.mjs +34 -14
- package/dist/lib/reporting/ledger/change-feed.d.mts +22 -1
- package/dist/lib/reporting/ledger/change-feed.d.ts +22 -1
- package/dist/lib/reporting/ledger/index.d.mts +11 -0
- package/dist/lib/reporting/ledger/index.d.ts +11 -0
- package/dist/lib/reporting/ledger/managed-postgres.d.mts +8 -0
- package/dist/lib/reporting/ledger/managed-postgres.d.ts +8 -0
- package/dist/lib/reporting/ledger/managed-router.d.mts +27 -2
- package/dist/lib/reporting/ledger/managed-router.d.ts +27 -2
- package/dist/lib/reporting/ledger/managed.d.mts +86 -6
- package/dist/lib/reporting/ledger/managed.d.ts +86 -6
- package/dist/lib/reporting/ledger/notification-activity.d.mts +65 -3
- package/dist/lib/reporting/ledger/notification-activity.d.ts +65 -3
- package/dist/lib/reporting/ledger/object-writes.d.mts +64 -5
- package/dist/lib/reporting/ledger/object-writes.d.ts +64 -5
- package/dist/lib/reporting/ledger/postgres.d.mts +43 -9
- package/dist/lib/reporting/ledger/postgres.d.ts +43 -9
- package/dist/lib/reporting/ledger/postgres.js +43 -27
- package/dist/lib/reporting/ledger/postgres.mjs +43 -27
- package/dist/lib/reporting/ledger/row-encoding.d.mts +92 -6
- package/dist/lib/reporting/ledger/row-encoding.d.ts +92 -6
- package/dist/lib/reporting/ledger/row-encoding.js +8 -4
- package/dist/lib/reporting/ledger/row-encoding.mjs +6 -3
- package/dist/lib/reporting/ledger/row-storage-errors.d.mts +11 -1
- package/dist/lib/reporting/ledger/row-storage-errors.d.ts +11 -1
- package/dist/lib/reporting/ledger/row-storage-migration.d.mts +19 -1
- package/dist/lib/reporting/ledger/row-storage-migration.d.ts +19 -1
- package/dist/lib/reporting/ledger/row-storage-migration.js +133 -18
- package/dist/lib/reporting/ledger/row-storage-migration.mjs +133 -18
- package/dist/lib/reporting/ledger/row-storage-object.d.mts +103 -12
- package/dist/lib/reporting/ledger/row-storage-object.d.ts +103 -12
- package/dist/lib/reporting/ledger/row-storage-object.js +106 -31
- package/dist/lib/reporting/ledger/row-storage-object.mjs +104 -31
- package/dist/lib/reporting/ledger/row-storage.d.mts +87 -20
- package/dist/lib/reporting/ledger/row-storage.d.ts +87 -20
- package/dist/lib/reporting/ledger/row-storage.js +126 -66
- package/dist/lib/reporting/ledger/row-storage.mjs +129 -67
- package/dist/lib/reporting/ledger/schedule.d.mts +13 -0
- package/dist/lib/reporting/ledger/schedule.d.ts +13 -0
- package/dist/lib/reporting/ledger/schedule.js +24 -0
- package/dist/lib/reporting/ledger/schedule.mjs +23 -0
- package/dist/lib/reporting/ledger/types.d.mts +23 -1
- package/dist/lib/reporting/ledger/types.d.ts +23 -1
- package/dist/lib/reporting/s3/index.d.mts +5 -0
- package/dist/lib/reporting/s3/index.d.ts +5 -0
- package/dist/lib/reporting/s3/index.js +37 -14
- package/dist/lib/reporting/s3/index.mjs +37 -14
- package/dist/lib/reporting/service/index.d.mts +10 -0
- package/dist/lib/reporting/service/index.d.ts +10 -0
- package/dist/lib/reporting/service/maintenance.d.mts +28 -2
- package/dist/lib/reporting/service/maintenance.d.ts +28 -2
- package/dist/lib/schemas-data/v2.5/_provenance.json +1 -1
- package/dist/lib/server/account-sync-contract.d.mts +14 -0
- package/dist/lib/server/account-sync-contract.d.ts +14 -0
- package/dist/lib/server/account-sync-contract.js +225 -0
- package/dist/lib/server/account-sync-contract.mjs +197 -0
- package/dist/lib/server/adcp-server.js +5 -0
- package/dist/lib/server/adcp-server.mjs +10 -0
- package/dist/lib/server/auth-signature.d.mts +15 -0
- package/dist/lib/server/auth-signature.d.ts +15 -0
- package/dist/lib/server/auth-signature.js +72 -2
- package/dist/lib/server/auth-signature.mjs +81 -2
- package/dist/lib/server/auth.d.mts +6 -0
- package/dist/lib/server/auth.d.ts +6 -0
- package/dist/lib/server/auth.js +6 -0
- package/dist/lib/server/auth.mjs +6 -0
- package/dist/lib/server/create-adcp-server.d.mts +19 -5
- package/dist/lib/server/create-adcp-server.d.ts +19 -5
- package/dist/lib/server/create-adcp-server.js +259 -19
- package/dist/lib/server/create-adcp-server.mjs +266 -10
- package/dist/lib/server/decisioning/account.d.mts +24 -1
- package/dist/lib/server/decisioning/account.d.ts +24 -1
- package/dist/lib/server/decisioning/index.d.mts +1 -1
- package/dist/lib/server/decisioning/index.d.ts +1 -1
- package/dist/lib/server/decisioning/runtime/from-platform.d.mts +0 -50
- package/dist/lib/server/decisioning/runtime/from-platform.d.ts +0 -50
- package/dist/lib/server/decisioning/runtime/from-platform.js +61 -11
- package/dist/lib/server/decisioning/runtime/from-platform.mjs +65 -12
- package/dist/lib/server/index.d.mts +2 -0
- package/dist/lib/server/index.d.ts +2 -0
- package/dist/lib/server/index.js +12 -0
- package/dist/lib/server/index.mjs +12 -0
- package/dist/lib/server/notification-subscriptions/runtime.js +9 -1
- package/dist/lib/server/notification-subscriptions/runtime.mjs +9 -1
- package/dist/lib/server/notification-subscriptions/types.d.mts +5 -0
- package/dist/lib/server/notification-subscriptions/types.d.ts +5 -0
- package/dist/lib/server/principal/types.d.mts +1 -1
- package/dist/lib/server/principal/types.d.ts +1 -1
- package/dist/lib/server/serve.js +5 -0
- package/dist/lib/server/serve.mjs +5 -0
- package/dist/lib/server/webhook-delivery/recovery.d.mts +1 -0
- package/dist/lib/server/webhook-delivery/recovery.d.ts +1 -0
- package/dist/lib/server/webhook-delivery/recovery.js +4 -0
- package/dist/lib/server/webhook-delivery/recovery.mjs +4 -0
- package/dist/lib/server/webhook-emitter.d.mts +10 -0
- package/dist/lib/server/webhook-emitter.d.ts +10 -0
- package/dist/lib/server/webhook-emitter.js +22 -0
- package/dist/lib/server/webhook-emitter.mjs +22 -0
- package/dist/lib/signing/agent-context.d.mts +0 -5
- package/dist/lib/signing/agent-context.d.ts +0 -5
- package/dist/lib/signing/agent-context.js +9 -1
- package/dist/lib/signing/agent-context.mjs +9 -1
- package/dist/lib/signing/agent-fetch.js +27 -2
- package/dist/lib/signing/agent-fetch.mjs +32 -2
- package/dist/lib/signing/agent-resolver/canonicalize.d.mts +10 -15
- package/dist/lib/signing/agent-resolver/canonicalize.d.ts +10 -15
- package/dist/lib/signing/agent-resolver/canonicalize.js +17 -5
- package/dist/lib/signing/agent-resolver/canonicalize.mjs +16 -5
- package/dist/lib/signing/agent-resolver/index.d.mts +1 -0
- package/dist/lib/signing/agent-resolver/index.d.ts +1 -0
- package/dist/lib/signing/agent-resolver/index.js +5 -0
- package/dist/lib/signing/agent-resolver/index.mjs +3 -0
- package/dist/lib/signing/agent-resolver/resolved-agent-jwks.d.mts +3 -2
- package/dist/lib/signing/agent-resolver/resolved-agent-jwks.d.ts +3 -2
- package/dist/lib/signing/agent-resolver/resolved-agent-jwks.js +30 -3
- package/dist/lib/signing/agent-resolver/resolved-agent-jwks.mjs +30 -3
- package/dist/lib/signing/agent-resolver/strict-json.d.mts +2 -2
- package/dist/lib/signing/agent-resolver/strict-json.d.ts +2 -2
- package/dist/lib/signing/agent-resolver/strict-json.js +5 -3
- package/dist/lib/signing/agent-resolver/strict-json.mjs +5 -3
- package/dist/lib/signing/brand-jwks.d.mts +2 -2
- package/dist/lib/signing/brand-jwks.d.ts +2 -2
- package/dist/lib/signing/brand-jwks.js +4 -4
- package/dist/lib/signing/brand-jwks.mjs +4 -4
- package/dist/lib/signing/client.d.mts +1 -0
- package/dist/lib/signing/client.d.ts +1 -0
- package/dist/lib/signing/client.js +5 -0
- package/dist/lib/signing/client.mjs +3 -0
- package/dist/lib/signing/crypto.js +8 -0
- package/dist/lib/signing/crypto.mjs +9 -1
- package/dist/lib/signing/fetch-async.js +1 -1
- package/dist/lib/signing/fetch-async.mjs +1 -1
- package/dist/lib/signing/fetch.js +1 -1
- package/dist/lib/signing/fetch.mjs +1 -1
- package/dist/lib/signing/jwks-https.d.mts +1 -1
- package/dist/lib/signing/jwks-https.d.ts +1 -1
- package/dist/lib/signing/jwks-https.js +1 -1
- package/dist/lib/signing/jwks-https.mjs +1 -1
- package/dist/lib/signing/jwks.d.mts +11 -3
- package/dist/lib/signing/jwks.d.ts +11 -3
- package/dist/lib/signing/jwks.js +1 -1
- package/dist/lib/signing/jwks.mjs +1 -1
- package/dist/lib/signing/middleware.js +9 -0
- package/dist/lib/signing/middleware.mjs +14 -0
- package/dist/lib/signing/parser.d.mts +9 -6
- package/dist/lib/signing/parser.d.ts +9 -6
- package/dist/lib/signing/parser.js +82 -64
- package/dist/lib/signing/parser.mjs +83 -65
- package/dist/lib/signing/revocation.d.mts +4 -1
- package/dist/lib/signing/revocation.d.ts +4 -1
- package/dist/lib/signing/revocation.js +36 -3
- package/dist/lib/signing/revocation.mjs +34 -2
- package/dist/lib/signing/server.d.mts +1 -1
- package/dist/lib/signing/server.d.ts +1 -1
- package/dist/lib/signing/server.js +4 -0
- package/dist/lib/signing/server.mjs +4 -0
- package/dist/lib/signing/types.d.mts +3 -0
- package/dist/lib/signing/types.d.ts +3 -0
- package/dist/lib/signing/verifier.js +1 -1
- package/dist/lib/signing/verifier.mjs +1 -1
- package/dist/lib/signing/web-bot-auth.d.mts +191 -0
- package/dist/lib/signing/web-bot-auth.d.ts +191 -0
- package/dist/lib/signing/web-bot-auth.js +837 -0
- package/dist/lib/signing/web-bot-auth.mjs +796 -0
- package/dist/lib/signing/webhook-verifier.js +1 -1
- package/dist/lib/signing/webhook-verifier.mjs +1 -1
- package/dist/lib/testing/client.d.mts +1 -4
- package/dist/lib/testing/client.d.ts +1 -4
- package/dist/lib/testing/client.js +141 -20
- package/dist/lib/testing/client.mjs +137 -19
- package/dist/lib/testing/compliance/comply.js +29 -10
- package/dist/lib/testing/compliance/comply.mjs +37 -11
- package/dist/lib/testing/storyboard/account-sync-contract.d.mts +3 -0
- package/dist/lib/testing/storyboard/account-sync-contract.d.ts +3 -0
- package/dist/lib/testing/storyboard/account-sync-contract.js +79 -0
- package/dist/lib/testing/storyboard/account-sync-contract.mjs +55 -0
- package/dist/lib/testing/storyboard/default-invariants.js +2 -0
- package/dist/lib/testing/storyboard/default-invariants.mjs +2 -0
- package/dist/lib/testing/storyboard/runner.js +23 -8
- package/dist/lib/testing/storyboard/runner.mjs +24 -8
- package/dist/lib/testing/storyboard/validations.d.mts +1 -1
- package/dist/lib/testing/storyboard/validations.d.ts +1 -1
- package/dist/lib/types/adcp.d.mts +4 -0
- package/dist/lib/types/adcp.d.ts +4 -0
- package/dist/lib/types/schemas.generated.d.ts +6 -6
- package/dist/lib/utils/capabilities.d.mts +1 -0
- package/dist/lib/utils/capabilities.d.ts +1 -0
- package/dist/lib/utils/capabilities.js +5 -0
- package/dist/lib/utils/capabilities.mjs +5 -0
- package/dist/lib/v2/projection/catalog-snapshot.js +3 -1
- package/dist/lib/v2/projection/catalog-snapshot.mjs +3 -1
- package/dist/lib/v2/projection/creative-delivery.d.mts +34 -10
- package/dist/lib/v2/projection/creative-delivery.d.ts +34 -10
- package/dist/lib/v2/projection/creative-delivery.js +26 -10
- package/dist/lib/v2/projection/creative-delivery.mjs +26 -10
- package/dist/lib/v2/projection/index.d.mts +1 -1
- package/dist/lib/v2/projection/index.d.ts +1 -1
- package/dist/lib/v2/projection/index.js +2 -0
- package/dist/lib/v2/projection/index.mjs +2 -0
- package/dist/lib/v2/projection/legacy-routes.d.mts +34 -2
- package/dist/lib/v2/projection/legacy-routes.d.ts +34 -2
- package/dist/lib/v2/projection/legacy-routes.js +35 -2
- package/dist/lib/v2/projection/legacy-routes.mjs +32 -2
- package/dist/lib/validation/schema-loader.d.mts +2 -0
- package/dist/lib/validation/schema-loader.d.ts +2 -0
- package/dist/lib/validation/schema-loader.js +43 -4
- package/dist/lib/validation/schema-loader.mjs +39 -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 +2 -2
- package/docs/guides/DISCOVERY-CACHE-AND-SESSION-REUSE.md +4 -0
- package/docs/guides/REPORTING-LEDGER-CUTOVER.md +1 -1
- package/docs/guides/REPORTING-LEDGER.md +99 -29
- package/docs/guides/REPORTING-OPERATIONS.md +29 -13
- package/docs/guides/REPORTING-STABILITY.md +76 -0
- package/docs/guides/account-resolution.md +101 -0
- package/docs/llms.txt +3 -2
- package/docs/migration-12-to-13.md +15 -0
- package/docs/migration-14.x-rc-worksheet.md +4 -4
- package/docs/migration-agent-identity-3.3.md +494 -0
- package/docs/migration-agent-resolution-3.3.md +5 -0
- package/docs/migration-reporting-row-storage-alignment.md +137 -0
- package/examples/storyboards/account-sync-contract.yaml +57 -0
- package/package.json +17 -1
|
@@ -5,6 +5,8 @@ consumer runtime. Reliable Reporting controls evidence used for billing and
|
|
|
5
5
|
large media-spend decisions. Treat its PostgreSQL state, destination objects,
|
|
6
6
|
signing keys, and authentication registry as financial infrastructure.
|
|
7
7
|
|
|
8
|
+
> **Stability:** the storage subpaths this runbook operates are experimental. Pin `@adcp/sdk` with `~` and read each minor's changeset before upgrading. See the [Reliable Reporting stability policy](REPORTING-STABILITY.md).
|
|
9
|
+
|
|
8
10
|
## Production topology
|
|
9
11
|
|
|
10
12
|
Use one PostgreSQL primary with synchronous durability appropriate to the
|
|
@@ -90,6 +92,9 @@ service runs for you. See
|
|
|
90
92
|
verified chunks. Existing revisions keep their inline rows, and every
|
|
91
93
|
binary built with row storage reads both forms. Do not run a writer older
|
|
92
94
|
than this release once chunked revisions exist: it cannot read them.
|
|
95
|
+
Upgrading from 15.8.x? Row storage renamed its stored fields to AdCP's
|
|
96
|
+
names; re-apply the migration before starting new binaries (see
|
|
97
|
+
[Breaking: reporting row storage field alignment](../migration-reporting-row-storage-alignment.md)).
|
|
93
98
|
2. **Existing inline rows (optional).** Run `migrateInlineRows` in bounded
|
|
94
99
|
batches from a maintenance job until it returns no cursor. Alert on any
|
|
95
100
|
`quarantined` IDs: those revisions no longer reproduce their committed
|
|
@@ -116,7 +121,14 @@ service runs for you. See
|
|
|
116
121
|
cannot hold the table indefinitely.
|
|
117
122
|
5. **Warehouse sink.** Apply `REPORTING_WAREHOUSE_SINK_MIGRATION`, create the
|
|
118
123
|
tables, and the `current_rows` view, then schedule `runOnce`. Point analysts
|
|
119
|
-
at `current_rows`.
|
|
124
|
+
at `current_rows`. Set the sink's `location` to the dataset's location: replay
|
|
125
|
+
lookups of load jobs need it outside the US and EU multi-regions, and the sink
|
|
126
|
+
warns once per process when it is unset. When upgrading from 15.9.0, stop
|
|
127
|
+
every 15.9.0 sink worker before starting newer ones, then re-apply
|
|
128
|
+
`REPORTING_WAREHOUSE_SINK_MIGRATION`. A 15.9.0 worker cancels a load at its
|
|
129
|
+
deadline, so one running beside a newer worker on the same sink can cancel a
|
|
130
|
+
job the newer worker is waiting on; the job ends `DONE` with an error and the
|
|
131
|
+
attempt advances. Rows do not duplicate, but convergence slows.
|
|
120
132
|
6. **Retention.** Enable `retention` last, after confirming the advertised
|
|
121
133
|
`status_retention_days` is the window you intend to keep. Retirement deletes
|
|
122
134
|
rows and ledger records for whole periods and cannot be undone. Keep backups
|
|
@@ -339,21 +351,22 @@ What it checks:
|
|
|
339
351
|
and job ID unchanged and that table's persisted deadline grown, the job must
|
|
340
352
|
end `DONE` without an error (the sink never cancels it), and later runs under
|
|
341
353
|
the same sink name must converge with no duplicate rows, the same job ID and
|
|
342
|
-
no second upload. A
|
|
354
|
+
no second upload. A slow-upload scenario runs a sink whose upload of a 50,000-row
|
|
343
355
|
batch outlasts its 1-second deadline and asserts that it converges within 8
|
|
344
356
|
runs, loads every row exactly once, never changes the job ID, and never
|
|
345
357
|
starts an upload after the job exists (a link fast enough to beat the
|
|
346
|
-
deadline passes and says so).
|
|
358
|
+
deadline passes and says so). A
|
|
359
|
+
`period_date` scenario checks that non-UTC periods land on their
|
|
360
|
+
source-timezone date.
|
|
347
361
|
- **Cancel probe of the service** (`INFO`, never a failure). It cancels a
|
|
348
362
|
5000-row load the moment it is created and reports whether BigQuery stopped
|
|
349
363
|
it; in practice it accepts the cancel and lets the load finish, which is why
|
|
350
364
|
the sink never cancels a load and finds it by job ID instead.
|
|
351
365
|
- **Overlapping runs** (`INFO`, never a failure). Two concurrent `runOnce()`
|
|
352
|
-
calls over one pending batch, and a deterministic reproduction of
|
|
366
|
+
calls over one pending batch, and a deterministic reproduction of the stale-plan race: one
|
|
353
367
|
run reads its sink state, another completes the batch and a new revision
|
|
354
368
|
commits, then the first resumes. Without the fence the first run reloads
|
|
355
|
-
revisions the second already loaded (duplicate rows); with the fence
|
|
356
|
-
PR #3197 it rejects as stale and nothing duplicates. Read the verdict in the
|
|
369
|
+
revisions the second already loaded (duplicate rows); with the plan fence it rejects as stale and nothing duplicates. Read the verdict in the
|
|
357
370
|
report; the exit status does not depend on it.
|
|
358
371
|
- **Cross-project.** Set `GCP_CLIENT_PROJECT` to a project other than
|
|
359
372
|
`GCP_BQ_PROJECT`. Load jobs are then created in the destination project, and
|
|
@@ -364,7 +377,10 @@ What it checks:
|
|
|
364
377
|
prevention, lifecycle rules) and `runReportingRowObjectProviderConformanceV1`,
|
|
365
378
|
then commits a revision through an object binding on the bucket and reads it
|
|
366
379
|
back verified (full read, ranged page, a second store instance, and a replayed
|
|
367
|
-
commit that uploads nothing).
|
|
380
|
+
commit that uploads nothing). It also commits revisions for non-UTC periods and
|
|
381
|
+
checks that each object key has one `{period_date}` segment holding the
|
|
382
|
+
source-timezone date, and that each chunk's `native_version_ref` and
|
|
383
|
+
`size_bytes` match the stored object's generation and size.
|
|
368
384
|
|
|
369
385
|
Everything it creates carries a per-run id: a dataset named
|
|
370
386
|
`<GCP_DATASET_PREFIX><run id>`, objects under `<GCS_PREFIX>/<run id>/`, and
|
|
@@ -436,15 +452,15 @@ export GCS_BUCKET=my-test-bucket GCS_PREFIX=adcp-reporting-validation
|
|
|
436
452
|
npm run validate:reporting-gcp -- --yes
|
|
437
453
|
```
|
|
438
454
|
|
|
439
|
-
Against a pull request branch (
|
|
455
|
+
Against a pull request branch (replace `<n>` with its number), keep running the script from
|
|
440
456
|
`main` and point it at a second built checkout, so a branch cut before this
|
|
441
457
|
script existed still works:
|
|
442
458
|
|
|
443
459
|
```bash
|
|
444
|
-
git fetch origin pull
|
|
445
|
-
git worktree add ../adcp-client-pr
|
|
446
|
-
(cd ../adcp-client-pr
|
|
447
|
-
ADCP_SDK_ROOT=../adcp-client-pr
|
|
460
|
+
git fetch origin pull/<n>/head:pr-<n>
|
|
461
|
+
git worktree add ../adcp-client-pr-<n> pr-<n>
|
|
462
|
+
(cd ../adcp-client-pr-<n> && npm ci && npm run build)
|
|
463
|
+
ADCP_SDK_ROOT=../adcp-client-pr-<n> npm run validate:reporting-gcp -- --yes
|
|
448
464
|
```
|
|
449
465
|
|
|
450
466
|
The same environment applies. The run ends with a `PASS`, `FAIL` and `INFO`
|
|
@@ -452,7 +468,7 @@ report and a markdown block (project and bucket names masked) to paste into
|
|
|
452
468
|
the PR. The exit status is 0 with no `FAIL`, 1 with any `FAIL`, and 2 for a
|
|
453
469
|
configuration problem or a missing `--yes`. Results of the overlap probes are
|
|
454
470
|
`INFO` on purpose: on `main` expect the stale-run probe to report duplicates,
|
|
455
|
-
and on
|
|
471
|
+
and on a branch with the plan fence expect it to report none.
|
|
456
472
|
|
|
457
473
|
`test/lib/reporting-gcp-validation-pg.test.js` drives the script's core against
|
|
458
474
|
in-memory BigQuery and Storage doubles and a real PostgreSQL, so the logic,
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# Reliable Reporting stability policy
|
|
2
|
+
|
|
3
|
+
The Reliable Reporting storage surface is **experimental**. It is new, it has not yet run in production at an adopter, and its shape is still being settled by real use. Marking it experimental lets breaking changes there ship in minor releases, with notice, instead of forcing a major release of the whole SDK.
|
|
4
|
+
|
|
5
|
+
This follows how the AdCP protocol treats experimental surfaces (`x-status: experimental` in the schemas, with advance notice of breaking changes).
|
|
6
|
+
|
|
7
|
+
## What is experimental
|
|
8
|
+
|
|
9
|
+
An export is experimental when its TSDoc carries an `@experimental` tag that links to this page. Editors show the tag on hover, and some mark the symbol as unstable.
|
|
10
|
+
|
|
11
|
+
| Subpath | Status |
|
|
12
|
+
| ------------------------------ | --------------------------------------------------------------------------- |
|
|
13
|
+
| `@adcp/sdk/reporting/gcs` | Experimental (every export) |
|
|
14
|
+
| `@adcp/sdk/reporting/s3` | Experimental (every export) |
|
|
15
|
+
| `@adcp/sdk/reporting/azure` | Experimental (every export) |
|
|
16
|
+
| `@adcp/sdk/reporting/bigquery` | Experimental (every export) |
|
|
17
|
+
| `@adcp/sdk/reporting/ledger` | Partly experimental (see below) |
|
|
18
|
+
| `@adcp/sdk/reporting/service` | Partly experimental: retention, compaction and change-feed maintenance only |
|
|
19
|
+
|
|
20
|
+
Within `@adcp/sdk/reporting/ledger`, the experimental exports are:
|
|
21
|
+
|
|
22
|
+
- the PostgreSQL ledger store (`PostgresReportingLedgerStore`), its migrations and errors, and `sweepExpiredReportingLedgerState`;
|
|
23
|
+
- row storage (`ReportingRowStorageV1`, row bindings, row encoding, the row-storage migration and probe, and row-store errors) and object writes;
|
|
24
|
+
- the host change feed (`REPORTING_LEDGER_CHANGES_MIGRATION`, change records and cursors);
|
|
25
|
+
- managed delivery (the runtime, the store, the adapter contract, the adapter router and the PostgreSQL store);
|
|
26
|
+
- notification activity stores and checkpoints;
|
|
27
|
+
- the store, transaction, lease and row-read interfaces in `ledger/types`.
|
|
28
|
+
|
|
29
|
+
Within `@adcp/sdk/reporting/service`, the experimental exports are `ReportingRetentionOptionsV1`, `ReportingCompactionOptionsV1`, `ReportingChangeFeedMaintenanceOptionsV1`, `runReportingLedgerMaintenance` and the related maintenance types and error.
|
|
30
|
+
|
|
31
|
+
### Not experimental
|
|
32
|
+
|
|
33
|
+
These follow normal semver. A breaking change to them ships in a major release.
|
|
34
|
+
|
|
35
|
+
- The protocol-facing handlers: `createReportingDeliveryHandler`, `createReportingStatusHandler`, `createSyncReportingStatusHandler`, `createSyncReportingReceiptsHandler`, and the status-ingest request and response schemas.
|
|
36
|
+
- `createReportingProducer`, `assertSupportedReportingAuthoritativeParty` and `UnsupportedReportingFeatureError`.
|
|
37
|
+
- The health, coverage, lifecycle, schedule and consumer-status-identity helpers in `@adcp/sdk/reporting/ledger`.
|
|
38
|
+
- `createReliableReportingService`, `createPostgresReliableReportingProductionService` and the service conformance runner in `@adcp/sdk/reporting/service`.
|
|
39
|
+
- `@adcp/sdk/reporting/consumer` (buyer reconciliation and worker) and `@adcp/sdk/reporting/source` (source contract and executor). They are separate subpaths with their own `V1` contract suffixes and are not covered by this policy.
|
|
40
|
+
|
|
41
|
+
If you are unsure about a symbol, read its TSDoc. An `@experimental` tag means it is covered. No tag means it is not.
|
|
42
|
+
|
|
43
|
+
## What "experimental" means
|
|
44
|
+
|
|
45
|
+
- **Breaking changes may ship in minor releases.** That covers signatures, option names, stored field and column names, migrations, and defaults in the experimental exports.
|
|
46
|
+
- **Every such change is announced.** The changeset describes the break and includes a migration note, and the release notes carry it. Larger changes also get a `docs/migration-*.md` walkthrough.
|
|
47
|
+
- **The wire protocol is not affected.** Buyer-visible behavior these exports implement (reporting delivery, `revision_content_sha256`, status, receipts and so on) follows AdCP's own versioning, not this policy. A change to the SDK's storage layout does not change what a buyer sees.
|
|
48
|
+
- **Security and correctness fixes are not held back.** If a fix needs a breaking change, it ships in a minor.
|
|
49
|
+
|
|
50
|
+
## How to pin
|
|
51
|
+
|
|
52
|
+
Adopters of the experimental subpaths should not use a caret range, which accepts every future minor.
|
|
53
|
+
|
|
54
|
+
```json
|
|
55
|
+
{
|
|
56
|
+
"dependencies": {
|
|
57
|
+
"@adcp/sdk": "~16.0.0"
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
- `~16.0.0` takes patches only (recommended).
|
|
63
|
+
- An exact version (`"16.0.0"`) is stricter still.
|
|
64
|
+
- Read the changelog before widening to a new minor, and apply any migration it names.
|
|
65
|
+
|
|
66
|
+
If you use only the stable surfaces, a caret range is fine as usual.
|
|
67
|
+
|
|
68
|
+
## Migrations
|
|
69
|
+
|
|
70
|
+
Database migrations exported from experimental subpaths (`REPORTING_LEDGER_MIGRATION`, `REPORTING_ROW_STORAGE_MIGRATION` and the others) stay idempotent where practical, and a changeset says when you must re-apply one. See [Reliable Reporting production operations](REPORTING-OPERATIONS.md) and the [ledger guide](REPORTING-LEDGER.md).
|
|
71
|
+
|
|
72
|
+
## When this will change
|
|
73
|
+
|
|
74
|
+
The surface is expected to stabilize after the first production adopter runs on SDK 16 stable. At that point the `@experimental` tags are removed in a minor release with a changelog note, and breaking changes need a major release from then on.
|
|
75
|
+
|
|
76
|
+
Related: [Seller reporting ledger](REPORTING-LEDGER.md), [Reliable Reporting production operations](REPORTING-OPERATIONS.md).
|
|
@@ -29,6 +29,101 @@ For buyer setup and opt-in lifecycle management, see
|
|
|
29
29
|
For upgrading an existing integration, use the
|
|
30
30
|
[14.0-to-14.1 checklist](../migration-14.0-to-14.1.md).
|
|
31
31
|
|
|
32
|
+
### Account sync contracts
|
|
33
|
+
|
|
34
|
+
For platform `accounts.upsert`, the framework looks up accepted natural-key
|
|
35
|
+
entries with `provisioning: false` before calling the batch method. The optional
|
|
36
|
+
`ctx.existing` array is aligned with the entries passed to `upsert`; each element
|
|
37
|
+
is the pre-write account snapshot or `null`. All natural-key dimensions are
|
|
38
|
+
preserved, including brand countries, operator unit, currency, timezone and sandbox.
|
|
39
|
+
Natural-key snapshots require the resolved account's own brand and operator;
|
|
40
|
+
identity-free singleton resolvers supply no snapshot rather than matching every key.
|
|
41
|
+
Use these snapshots to update the existing ID instead of creating another account.
|
|
42
|
+
Snapshots are advisory: enforce uniqueness atomically in your own storage too.
|
|
43
|
+
|
|
44
|
+
The framework emits typed, server-side `accounts.onDiagnostic` events for
|
|
45
|
+
`ACCOUNT_SYNC_IDEMPOTENCY_VIOLATION`, `ACCOUNT_SYNC_PAYMENT_TERMS_MISMATCH`, and
|
|
46
|
+
`ACCOUNT_BILLING_FIELDS_MISSING`, plus `ACCOUNT_SYNC_BILLING_MISMATCH` when an
|
|
47
|
+
active result silently replaces requested agent billing with another party
|
|
48
|
+
(strict mode rejects it with `BILLING_NOT_SUPPORTED`). ID-only resolvers that reject natural-key
|
|
49
|
+
lookups remain usable and emit `ACCOUNT_SYNC_LOOKUP_UNSUPPORTED`; their
|
|
50
|
+
identity checks require store-level enforcement. Events contain only the code, tool and original
|
|
51
|
+
row index. Development logs also receive warnings. Callback exceptions do not
|
|
52
|
+
change the result of a committed write. The default behavior preserves existing
|
|
53
|
+
responses. Set `accounts.strictIdempotency: true` to return per-row failures for
|
|
54
|
+
changed IDs, `created` on an existing key, or an active account that omits or
|
|
55
|
+
changes requested terms (`PAYMENT_TERMS_NOT_SUPPORTED`). Identity violations
|
|
56
|
+
return `SERVICE_UNAVAILABLE`. These post-write checks cannot roll back adopter writes.
|
|
57
|
+
|
|
58
|
+
Missing sync billing/terms are filled only from a stored account whose ID matches
|
|
59
|
+
the result, never from the buyer's requested terms. Agent-billed list rows without
|
|
60
|
+
terms also emit a diagnostic. Low-level handler-bag overrides do not use this
|
|
61
|
+
platform-store guard.
|
|
62
|
+
|
|
63
|
+
### Persistent keyed accounts
|
|
64
|
+
|
|
65
|
+
`createKeyedAccountStore` from `@adcp/sdk/server` supplies deterministic IDs and
|
|
66
|
+
additive, non-expiring account syncs. Choose `memoryKeyedAccountBackend()` for one
|
|
67
|
+
process, `pgKeyedAccountBackend(pool)` for PostgreSQL, or
|
|
68
|
+
`redisKeyedAccountBackend(client)` for a persistent Redis deployment with eviction
|
|
69
|
+
disabled. Custom KV backends can implement `KeyedAccountBackend` using native
|
|
70
|
+
atomic compare-and-swap; ordinary read followed by write is insufficient.
|
|
71
|
+
|
|
72
|
+
```ts
|
|
73
|
+
import {
|
|
74
|
+
createKeyedAccountStore,
|
|
75
|
+
getKeyedAccountMigration,
|
|
76
|
+
pgKeyedAccountBackend,
|
|
77
|
+
} from '@adcp/sdk/server';
|
|
78
|
+
|
|
79
|
+
await pool.query(getKeyedAccountMigration());
|
|
80
|
+
const accounts = createKeyedAccountStore({
|
|
81
|
+
namespace: 'seller-production', // trusted deployment namespace
|
|
82
|
+
backend: pgKeyedAccountBackend(pool),
|
|
83
|
+
resolution: 'implicit',
|
|
84
|
+
buildAccount: async (entry, { accountId, existing, dryRun, ctx }) => {
|
|
85
|
+
// Your onboarding code accepts the requested terms or throws AdcpError.
|
|
86
|
+
// It must use accountId for idempotent upstream writes too.
|
|
87
|
+
return onboardAdvertiser(entry, { accountId, existing, dryRun, authInfo: ctx?.authInfo });
|
|
88
|
+
},
|
|
89
|
+
});
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
`buildAccount` is required and returns the actual account, using the supplied
|
|
93
|
+
`accountId`. The store validates active payment terms before committing; a
|
|
94
|
+
rejected update leaves the stored account intact. It strips `authInfo` before
|
|
95
|
+
persistence; credentials must also stay out of `ctx_metadata`. By default the
|
|
96
|
+
store partitions accounts by stable OAuth client, API key ID or verified agent
|
|
97
|
+
URL. Override `principalKey` only with a trusted authorization partition, never
|
|
98
|
+
buyer-supplied request fields. Use distinct namespaces for different sellers.
|
|
99
|
+
|
|
100
|
+
Concurrent writes retry atomic CAS up to ten times, re-running `buildAccount`
|
|
101
|
+
against fresh state. Its external side effects must therefore be idempotent on
|
|
102
|
+
the supplied account ID. A crash between an upstream write and the local CAS
|
|
103
|
+
still requires that upstream idempotency. The backend stores one roster per
|
|
104
|
+
principal with a default `maxAccounts` limit of 1000 and suits modest rosters; large sellers should use indexed account
|
|
105
|
+
tables with unique natural-key constraints. Share the memory backend across
|
|
106
|
+
server factories; use persistent storage across restarts.
|
|
107
|
+
|
|
108
|
+
Dry runs do not persist; `buildAccount` receives `dryRun: true` and must preview
|
|
109
|
+
without upstream writes or other side effects. Only the seller-returned account
|
|
110
|
+
determines sandbox authority; the buyer's sandbox flag participates in identity
|
|
111
|
+
and never grants test-tool access. Settings updates cannot provision a missing natural-key
|
|
112
|
+
account. `delete_missing` and operator identity reconciliation are explicitly
|
|
113
|
+
unsupported; close accounts through your lifecycle code. List cursors are bound
|
|
114
|
+
to the principal, filters and roster revision and become stale after a write.
|
|
115
|
+
An unknown ID-keyed entry rejects the batch before any `buildAccount` callback:
|
|
116
|
+
this interface requires brand/operator on failed rows, and unauthorized account
|
|
117
|
+
identities must not be invented or exposed. Failed known-account updates retain
|
|
118
|
+
the account's actual status and leave persisted state intact.
|
|
119
|
+
|
|
120
|
+
Run [the account sync storyboard](../../examples/storyboards/account-sync-contract.yaml)
|
|
121
|
+
with one authenticated sandbox caller. Its `account.sync_contract` invariant
|
|
122
|
+
checks repeat syncs with fresh request keys, exact accepted terms and billing
|
|
123
|
+
fields on list rows. The fixture is SDK-authored; canonical protocol storyboards
|
|
124
|
+
remain unchanged. A seller rejecting the fixture's terms needs an accepted-terms
|
|
125
|
+
fixture to exercise successful repeat provisioning.
|
|
126
|
+
|
|
32
127
|
Account resolvers receive `ctx.provisioning`. It is false on discovery and
|
|
33
128
|
negotiation (`get_products`, `list_products`, `get_signals`, and proposal
|
|
34
129
|
request/refine/decline); these tasks MUST use lookup only. It is true on spend
|
|
@@ -623,3 +718,9 @@ const accounts = {
|
|
|
623
718
|
**Hand-rolled stores.** For stores that don't use `createRosterAccountStore`,
|
|
624
719
|
handle `resolve(undefined, ctx)` in your own `resolve` implementation by
|
|
625
720
|
checking `ref === undefined` before the id-arm branch.
|
|
721
|
+
|
|
722
|
+
### Callback boundaries
|
|
723
|
+
|
|
724
|
+
A custom `principalKey` may be synchronous or asynchronous, and must return a nonempty primitive string derived from trusted authentication state. Missing, object, numeric, boolean, or blank values fail closed before backend access. Use a stable tenant identity, keep it deterministic across repeated calls in one request, and bound callback I/O durations.
|
|
725
|
+
|
|
726
|
+
`createKeyedAccountStore` captures dry-run intent before callbacks and gives each CAS retry fresh copies of sync entries and request input. Mutating callback request arguments cannot change the original request or turn a preview into a committed write. Framework commercial checks also retain an independent request snapshot. Async diagnostic hooks are fire-and-forget; their failures are isolated from dispatch.
|
package/docs/llms.txt
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Ad Context Protocol (AdCP)
|
|
2
2
|
|
|
3
|
-
> Generated at: 2026-10-
|
|
4
|
-
> Library: @adcp/sdk
|
|
3
|
+
> Generated at: 2026-10-15
|
|
4
|
+
> Library: @adcp/sdk v16.0.0-beta.2
|
|
5
5
|
> AdCP major version: 3
|
|
6
6
|
> Canonical URL: https://adcontextprotocol.github.io/adcp-client/llms.txt
|
|
7
7
|
> Note: the `Library` stamp reflects the package.json version at doc-generation time. The narrative below describes the surface that lands on the next-published minor — including any 6.7 helpers documented here ahead of the release tag.
|
|
@@ -2143,6 +2143,7 @@ These docs are available locally in the repo and hosted at https://adcontextprot
|
|
|
2143
2143
|
| Reporting ledger cutover from custom tables | docs/guides/REPORTING-LEDGER-CUTOVER.md | [link](https://adcontextprotocol.github.io/adcp-client/guides/REPORTING-LEDGER-CUTOVER.md) |
|
|
2144
2144
|
| Buyer reporting reconciliation | docs/guides/REPORTING-RECONCILIATION.md | [link](https://adcontextprotocol.github.io/adcp-client/guides/REPORTING-RECONCILIATION.md) |
|
|
2145
2145
|
| Reliable Reporting production operations | docs/guides/REPORTING-OPERATIONS.md | [link](https://adcontextprotocol.github.io/adcp-client/guides/REPORTING-OPERATIONS.md) |
|
|
2146
|
+
| Reliable Reporting stability policy (experimental storage subpaths) | docs/guides/REPORTING-STABILITY.md | [link](https://adcontextprotocol.github.io/adcp-client/guides/REPORTING-STABILITY.md) |
|
|
2146
2147
|
| Validate your agent (5-command checklist) | docs/guides/VALIDATE-YOUR-AGENT.md | [link](https://adcontextprotocol.github.io/adcp-client/guides/VALIDATE-YOUR-AGENT.md) |
|
|
2147
2148
|
| Async patterns (polling, webhooks, deferred) | docs/guides/ASYNC-DEVELOPER-GUIDE.md | [link](https://adcontextprotocol.github.io/adcp-client/guides/ASYNC-DEVELOPER-GUIDE.md) |
|
|
2148
2149
|
| Async API reference | docs/guides/ASYNC-API-REFERENCE.md | [link](https://adcontextprotocol.github.io/adcp-client/guides/ASYNC-API-REFERENCE.md) |
|
|
@@ -400,6 +400,21 @@ resolve. An `AgentClient` given a resolver rebuilt from these routes applies
|
|
|
400
400
|
that rewrite in another process, as it does after its own discovery. Routes
|
|
401
401
|
without `seller_declared` leave canonical writes unchanged.
|
|
402
402
|
|
|
403
|
+
A buyer that stored the seller's raw `get_products` product, and projects it
|
|
404
|
+
again in a process that never ran discovery, can record the same origin by
|
|
405
|
+
passing that stored product: `legacyRoutesForProduct(productId,
|
|
406
|
+
projected.format_options, { sellerProduct: storedProduct })`. An option is then
|
|
407
|
+
seller-declared exactly when the stored product's own `format_options[]` names
|
|
408
|
+
it, which is the rule the SDK applies after its own discovery.
|
|
409
|
+
|
|
410
|
+
The client reads that origin from the resolver function that
|
|
411
|
+
`canonicalFormatLegacyResolverFromRoutes()` returns. A resolver you build around
|
|
412
|
+
it, for example one that tries the stored routes and then another source, is a
|
|
413
|
+
different function and carries no origin unless you pass it through
|
|
414
|
+
`carryFormatOptionOrigins(composedResolver, routesResolver)`.
|
|
415
|
+
`canonicalFormatLegacyResolverFromCatalogSnapshots(snapshots, fallback)` already
|
|
416
|
+
carries its fallback's origin.
|
|
417
|
+
|
|
403
418
|
Compatibility consumers that must retain top-level `format_ids[]` while
|
|
404
419
|
publishing URL-free canonical declarations can use the additive projection:
|
|
405
420
|
|
|
@@ -11,8 +11,8 @@ below as the publication/deployment gate.
|
|
|
11
11
|
|
|
12
12
|
| Fact | Value |
|
|
13
13
|
| --- | --- |
|
|
14
|
-
| Exact npm package | `@adcp/sdk@
|
|
15
|
-
| npm integrity | registry-derived after publication; run `npm view @adcp/sdk@
|
|
14
|
+
| Exact npm package | `@adcp/sdk@16.0.0-beta.2` |
|
|
15
|
+
| npm integrity | registry-derived after publication; run `npm view @adcp/sdk@16.0.0-beta.2 dist.integrity` |
|
|
16
16
|
| Node.js runtime | `^20.19.0 || >=22.12.0` |
|
|
17
17
|
| Default AdCP wire release | `3.2.4` |
|
|
18
18
|
| Maintained wire releases | `v2.5`, `v2.6`, `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.2.1`, `3.2`, `3.2.2`, `3.2.3`, `3.2.4` |
|
|
@@ -21,8 +21,8 @@ below as the publication/deployment gate.
|
|
|
21
21
|
Install exact production inputs rather than a moving range or dist-tag:
|
|
22
22
|
|
|
23
23
|
```bash
|
|
24
|
-
npm install --save-exact '@adcp/sdk@
|
|
25
|
-
npm view '@adcp/sdk@
|
|
24
|
+
npm install --save-exact '@adcp/sdk@16.0.0-beta.2'
|
|
25
|
+
npm view '@adcp/sdk@16.0.0-beta.2' dist.integrity
|
|
26
26
|
```
|
|
27
27
|
|
|
28
28
|
### Required and optional peers
|