@adcp/sdk 15.3.0 → 15.4.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 (42) hide show
  1. package/dist/lib/reporting/ledger/handler.d.mts +6 -0
  2. package/dist/lib/reporting/ledger/handler.d.ts +6 -0
  3. package/dist/lib/reporting/ledger/handler.js +36 -7
  4. package/dist/lib/reporting/ledger/handler.mjs +35 -7
  5. package/dist/lib/reporting/ledger/index.d.mts +1 -0
  6. package/dist/lib/reporting/ledger/index.d.ts +1 -0
  7. package/dist/lib/reporting/ledger/index.js +3 -1
  8. package/dist/lib/reporting/ledger/index.mjs +1 -0
  9. package/dist/lib/reporting/ledger/lifecycle.js +3 -2
  10. package/dist/lib/reporting/ledger/lifecycle.mjs +3 -2
  11. package/dist/lib/reporting/ledger/managed-postgres.js +5 -5
  12. package/dist/lib/reporting/ledger/managed-postgres.mjs +5 -5
  13. package/dist/lib/reporting/ledger/postgres.d.mts +4 -1
  14. package/dist/lib/reporting/ledger/postgres.d.ts +4 -1
  15. package/dist/lib/reporting/ledger/postgres.js +38 -0
  16. package/dist/lib/reporting/ledger/postgres.mjs +38 -0
  17. package/dist/lib/reporting/ledger/producer.js +3 -2
  18. package/dist/lib/reporting/ledger/producer.mjs +3 -2
  19. package/dist/lib/reporting/ledger/revision-metadata.d.mts +17 -0
  20. package/dist/lib/reporting/ledger/revision-metadata.d.ts +17 -0
  21. package/dist/lib/reporting/ledger/revision-metadata.js +71 -0
  22. package/dist/lib/reporting/ledger/revision-metadata.mjs +44 -0
  23. package/dist/lib/reporting/ledger/row-encoding.d.mts +128 -0
  24. package/dist/lib/reporting/ledger/row-encoding.d.ts +128 -0
  25. package/dist/lib/reporting/ledger/row-encoding.js +355 -0
  26. package/dist/lib/reporting/ledger/row-encoding.mjs +315 -0
  27. package/dist/lib/reporting/ledger/types.d.mts +37 -0
  28. package/dist/lib/reporting/ledger/types.d.ts +37 -0
  29. package/dist/lib/schemas-data/v2.5/_provenance.json +1 -1
  30. package/dist/lib/signing/agent-resolver/fetch-helpers.js +1 -1
  31. package/dist/lib/signing/agent-resolver/fetch-helpers.mjs +1 -1
  32. package/dist/lib/testing/storyboard/validations.d.mts +1 -1
  33. package/dist/lib/testing/storyboard/validations.d.ts +1 -1
  34. package/dist/lib/version.d.mts +3 -3
  35. package/dist/lib/version.d.ts +3 -3
  36. package/dist/lib/version.js +3 -3
  37. package/dist/lib/version.mjs +3 -3
  38. package/docs/TYPE-SUMMARY.md +1 -1
  39. package/docs/llms.txt +1 -1
  40. package/docs/migration-14.x-rc-worksheet.md +4 -4
  41. package/docs/recipes/verifying-inbound-webhooks.md +8 -0
  42. package/package.json +1 -1
@@ -198,6 +198,21 @@ export interface ReportingLedgerAdjustmentV1 {
198
198
  }
199
199
  export type ReportingLedgerRevisionSnapshotV1 = Omit<ReportingLedgerRevisionV1, 'rows'>;
200
200
  export type ReportingLedgerRevisionMetadataV1 = Omit<ReportingLedgerRevisionV1, 'rows'>;
201
+ export type ReportingLedgerAdjustmentMetadataV1 = Omit<ReportingLedgerAdjustmentV1, 'rows'>;
202
+ export interface ReportingRevisionRowsReadV1 {
203
+ reporting_revision_id: string;
204
+ account_id: string;
205
+ /** Zero-based ordinal of the first row to return. */
206
+ offset: number;
207
+ /** Maximum rows to return; at least 1. */
208
+ limit: number;
209
+ signal?: AbortSignal;
210
+ }
211
+ export interface ReportingRevisionRowsPageV1 {
212
+ rows: Record<string, unknown>[];
213
+ /** Total rows in the revision. */
214
+ total: number;
215
+ }
201
216
  export type ReportingLedgerAdjustmentSnapshotV1 = Omit<ReportingLedgerAdjustmentV1, 'rows'>;
202
217
  export interface ReportingLedgerConsumerStatusV1 {
203
218
  consumerStatusId: string;
@@ -761,12 +776,34 @@ export interface ReportingLedgerStore {
761
776
  }>;
762
777
  /** Returns an exact row-bearing revision only when it belongs to the resolved account. */
763
778
  getRevision(reporting_revision_id: string, account_id: string): Promise<ReportingLedgerRevisionV1 | null>;
779
+ /**
780
+ * Optional row-free counterpart of `getRevision`, scoped to the resolved
781
+ * account. Exact-read handlers prefer it so they never load every row to
782
+ * serve one page.
783
+ */
784
+ getRevisionMetadata?(reporting_revision_id: string, account_id: string): Promise<ReportingLedgerRevisionMetadataV1 | null>;
785
+ /**
786
+ * Optional: one page of a revision's rows in ordinal order, only when the
787
+ * revision belongs to the resolved account. `total` is the revision's row
788
+ * count. Stores that keep rows outside the revision document verify every
789
+ * row they return against the committed binding before returning it.
790
+ */
791
+ readRevisionRows?(input: ReportingRevisionRowsReadV1): Promise<ReportingRevisionRowsPageV1 | null>;
764
792
  listRevisions(reporting_obligation_id: string): Promise<ReportingLedgerRevisionV1[]>;
793
+ /**
794
+ * Optional: every retained revision for one obligation without
795
+ * materializing rows. The producer, lifecycle reconciler and status ingest
796
+ * prefer it and otherwise fall back to `listRevisions` with rows dropped.
797
+ * When `account_id` is supplied, only that account's revisions are returned.
798
+ */
799
+ listRevisionMetadata?(reporting_obligation_id: string, account_id?: string): Promise<ReportingLedgerRevisionMetadataV1[]>;
765
800
  commitAdjustment(adjustment: ReportingLedgerAdjustmentV1, lease: ReportingLedgerLeaseV1): Promise<{
766
801
  inserted: boolean;
767
802
  value: ReportingLedgerAdjustmentV1;
768
803
  }>;
769
804
  listAdjustments(reporting_obligation_id: string): Promise<ReportingLedgerAdjustmentV1[]>;
805
+ /** Optional row-free counterpart of `listAdjustments`, preferred when present. */
806
+ listAdjustmentMetadata?(reporting_obligation_id: string): Promise<ReportingLedgerAdjustmentMetadataV1[]>;
770
807
  putConsumerStatus(status: ReportingLedgerConsumerStatusV1): Promise<{
771
808
  inserted: boolean;
772
809
  value: ReportingLedgerConsumerStatusV1;
@@ -198,6 +198,21 @@ export interface ReportingLedgerAdjustmentV1 {
198
198
  }
199
199
  export type ReportingLedgerRevisionSnapshotV1 = Omit<ReportingLedgerRevisionV1, 'rows'>;
200
200
  export type ReportingLedgerRevisionMetadataV1 = Omit<ReportingLedgerRevisionV1, 'rows'>;
201
+ export type ReportingLedgerAdjustmentMetadataV1 = Omit<ReportingLedgerAdjustmentV1, 'rows'>;
202
+ export interface ReportingRevisionRowsReadV1 {
203
+ reporting_revision_id: string;
204
+ account_id: string;
205
+ /** Zero-based ordinal of the first row to return. */
206
+ offset: number;
207
+ /** Maximum rows to return; at least 1. */
208
+ limit: number;
209
+ signal?: AbortSignal;
210
+ }
211
+ export interface ReportingRevisionRowsPageV1 {
212
+ rows: Record<string, unknown>[];
213
+ /** Total rows in the revision. */
214
+ total: number;
215
+ }
201
216
  export type ReportingLedgerAdjustmentSnapshotV1 = Omit<ReportingLedgerAdjustmentV1, 'rows'>;
202
217
  export interface ReportingLedgerConsumerStatusV1 {
203
218
  consumerStatusId: string;
@@ -761,12 +776,34 @@ export interface ReportingLedgerStore {
761
776
  }>;
762
777
  /** Returns an exact row-bearing revision only when it belongs to the resolved account. */
763
778
  getRevision(reporting_revision_id: string, account_id: string): Promise<ReportingLedgerRevisionV1 | null>;
779
+ /**
780
+ * Optional row-free counterpart of `getRevision`, scoped to the resolved
781
+ * account. Exact-read handlers prefer it so they never load every row to
782
+ * serve one page.
783
+ */
784
+ getRevisionMetadata?(reporting_revision_id: string, account_id: string): Promise<ReportingLedgerRevisionMetadataV1 | null>;
785
+ /**
786
+ * Optional: one page of a revision's rows in ordinal order, only when the
787
+ * revision belongs to the resolved account. `total` is the revision's row
788
+ * count. Stores that keep rows outside the revision document verify every
789
+ * row they return against the committed binding before returning it.
790
+ */
791
+ readRevisionRows?(input: ReportingRevisionRowsReadV1): Promise<ReportingRevisionRowsPageV1 | null>;
764
792
  listRevisions(reporting_obligation_id: string): Promise<ReportingLedgerRevisionV1[]>;
793
+ /**
794
+ * Optional: every retained revision for one obligation without
795
+ * materializing rows. The producer, lifecycle reconciler and status ingest
796
+ * prefer it and otherwise fall back to `listRevisions` with rows dropped.
797
+ * When `account_id` is supplied, only that account's revisions are returned.
798
+ */
799
+ listRevisionMetadata?(reporting_obligation_id: string, account_id?: string): Promise<ReportingLedgerRevisionMetadataV1[]>;
765
800
  commitAdjustment(adjustment: ReportingLedgerAdjustmentV1, lease: ReportingLedgerLeaseV1): Promise<{
766
801
  inserted: boolean;
767
802
  value: ReportingLedgerAdjustmentV1;
768
803
  }>;
769
804
  listAdjustments(reporting_obligation_id: string): Promise<ReportingLedgerAdjustmentV1[]>;
805
+ /** Optional row-free counterpart of `listAdjustments`, preferred when present. */
806
+ listAdjustmentMetadata?(reporting_obligation_id: string): Promise<ReportingLedgerAdjustmentMetadataV1[]>;
770
807
  putConsumerStatus(status: ReportingLedgerConsumerStatusV1): Promise<{
771
808
  inserted: boolean;
772
809
  value: ReportingLedgerConsumerStatusV1;
@@ -4,5 +4,5 @@
4
4
  "source_sha": "4e553ad955f83b49c7d221ab5c3ff78237ad02e3",
5
5
  "source_tarball_sha256": "580656d6466ef9f0d1119985e6726c2efea718dc671e2ad30957fcb2fd54af0f",
6
6
  "upstream_adcp_version": "2.5.3",
7
- "synced_at": "2026-10-08T14:21:02.333Z"
7
+ "synced_at": "2026-10-08T19:53:54.089Z"
8
8
  }
@@ -118,7 +118,7 @@ function classifyDiscoveryFailure(error) {
118
118
  return { dns_error: "fetch_failed" };
119
119
  }
120
120
  function isPermanentDiscoveryFailure(detail) {
121
- return detail.dns_error === "ssrf_refused" || detail.http_status !== void 0 && detail.http_status >= 400 && detail.http_status < 500;
121
+ return detail.dns_error === "ssrf_refused" || detail.http_status !== void 0 && detail.http_status >= 400 && detail.http_status < 500 && detail.http_status !== 408 && detail.http_status !== 429;
122
122
  }
123
123
  // Annotate the CommonJS export names for ESM import in node:
124
124
  0 && (module.exports = {
@@ -91,7 +91,7 @@ function classifyDiscoveryFailure(error) {
91
91
  return { dns_error: "fetch_failed" };
92
92
  }
93
93
  function isPermanentDiscoveryFailure(detail) {
94
- return detail.dns_error === "ssrf_refused" || detail.http_status !== void 0 && detail.http_status >= 400 && detail.http_status < 500;
94
+ return detail.dns_error === "ssrf_refused" || detail.http_status !== void 0 && detail.http_status >= 400 && detail.http_status < 500 && detail.http_status !== 408 && detail.http_status !== 429;
95
95
  }
96
96
  export {
97
97
  DEFAULT_CONNECT_TIMEOUT_MS,
@@ -197,7 +197,7 @@ export interface UpstreamTrafficQueryResult {
197
197
  */
198
198
  export declare function runValidations(validations: StoryboardValidation[], context: ValidationContext): ValidationResult[];
199
199
  /** Capability semver emitted in run summaries and used for advisory expiry. */
200
- export declare const RUNNER_CAPABILITY_VERSION = "15.3.0";
200
+ export declare const RUNNER_CAPABILITY_VERSION = "15.4.0";
201
201
  /** True when a failed validation contributes to the owning step's grade. */
202
202
  export declare function validationFailsStep(result: ValidationResult): boolean;
203
203
  /**
@@ -197,7 +197,7 @@ export interface UpstreamTrafficQueryResult {
197
197
  */
198
198
  export declare function runValidations(validations: StoryboardValidation[], context: ValidationContext): ValidationResult[];
199
199
  /** Capability semver emitted in run summaries and used for advisory expiry. */
200
- export declare const RUNNER_CAPABILITY_VERSION = "15.3.0";
200
+ export declare const RUNNER_CAPABILITY_VERSION = "15.4.0";
201
201
  /** True when a failed validation contributes to the owning step's grade. */
202
202
  export declare function validationFailsStep(result: ValidationResult): boolean;
203
203
  /**
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * AdCP SDK library version
3
3
  */
4
- export declare const LIBRARY_VERSION = "15.3.0";
4
+ export declare const LIBRARY_VERSION = "15.4.0";
5
5
  /**
6
6
  * AdCP specification version this library is built for
7
7
  */
@@ -33,10 +33,10 @@ export type AdcpVersion = (typeof COMPATIBLE_ADCP_VERSIONS)[number];
33
33
  * Full version information
34
34
  */
35
35
  export declare const VERSION_INFO: {
36
- readonly library: "15.3.0";
36
+ readonly library: "15.4.0";
37
37
  readonly adcp: "3.2.3";
38
38
  readonly compatibleVersions: readonly ["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"];
39
- readonly generatedAt: "2026-10-08T13:30:50.878Z";
39
+ readonly generatedAt: "2026-10-08T17:53:59.048Z";
40
40
  };
41
41
  /**
42
42
  * Get the AdCP specification version this library is built for
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * AdCP SDK library version
3
3
  */
4
- export declare const LIBRARY_VERSION = "15.3.0";
4
+ export declare const LIBRARY_VERSION = "15.4.0";
5
5
  /**
6
6
  * AdCP specification version this library is built for
7
7
  */
@@ -33,10 +33,10 @@ export type AdcpVersion = (typeof COMPATIBLE_ADCP_VERSIONS)[number];
33
33
  * Full version information
34
34
  */
35
35
  export declare const VERSION_INFO: {
36
- readonly library: "15.3.0";
36
+ readonly library: "15.4.0";
37
37
  readonly adcp: "3.2.3";
38
38
  readonly compatibleVersions: readonly ["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"];
39
- readonly generatedAt: "2026-10-08T13:30:50.878Z";
39
+ readonly generatedAt: "2026-10-08T17:53:59.048Z";
40
40
  };
41
41
  /**
42
42
  * Get the AdCP specification version this library is built for
@@ -31,7 +31,7 @@ __export(version_exports, {
31
31
  toReleasePrecisionVersion: () => toReleasePrecisionVersion
32
32
  });
33
33
  module.exports = __toCommonJS(version_exports);
34
- const LIBRARY_VERSION = "15.3.0";
34
+ const LIBRARY_VERSION = "15.4.0";
35
35
  const ADCP_VERSION = "3.2.3";
36
36
  const ADCP_MAJOR_VERSION = 3;
37
37
  const COMPATIBLE_ADCP_VERSIONS = [
@@ -97,10 +97,10 @@ const COMPATIBLE_ADCP_VERSIONS = [
97
97
  "3.2.3"
98
98
  ];
99
99
  const VERSION_INFO = {
100
- library: "15.3.0",
100
+ library: "15.4.0",
101
101
  adcp: "3.2.3",
102
102
  compatibleVersions: COMPATIBLE_ADCP_VERSIONS,
103
- generatedAt: "2026-10-08T13:30:50.878Z"
103
+ generatedAt: "2026-10-08T17:53:59.048Z"
104
104
  };
105
105
  function getAdcpVersion() {
106
106
  return ADCP_VERSION;
@@ -1,4 +1,4 @@
1
- const LIBRARY_VERSION = "15.3.0";
1
+ const LIBRARY_VERSION = "15.4.0";
2
2
  const ADCP_VERSION = "3.2.3";
3
3
  const ADCP_MAJOR_VERSION = 3;
4
4
  const COMPATIBLE_ADCP_VERSIONS = [
@@ -64,10 +64,10 @@ const COMPATIBLE_ADCP_VERSIONS = [
64
64
  "3.2.3"
65
65
  ];
66
66
  const VERSION_INFO = {
67
- library: "15.3.0",
67
+ library: "15.4.0",
68
68
  adcp: "3.2.3",
69
69
  compatibleVersions: COMPATIBLE_ADCP_VERSIONS,
70
- generatedAt: "2026-10-08T13:30:50.878Z"
70
+ generatedAt: "2026-10-08T17:53:59.048Z"
71
71
  };
72
72
  function getAdcpVersion() {
73
73
  return ADCP_VERSION;
@@ -1,7 +1,7 @@
1
1
  # AdCP Type Summary
2
2
 
3
3
  > Generated at: 2026-10-08
4
- > @adcp/sdk v15.3.0
4
+ > @adcp/sdk v15.4.0
5
5
 
6
6
  Curated reference of the types that matter for using the AdCP client. For full generated types see `src/lib/types/tools.generated.ts` and `src/lib/types/core.generated.ts`.
7
7
 
package/docs/llms.txt CHANGED
@@ -1,7 +1,7 @@
1
1
  # Ad Context Protocol (AdCP)
2
2
 
3
3
  > Generated at: 2026-10-08
4
- > Library: @adcp/sdk v15.3.0
4
+ > Library: @adcp/sdk v15.4.0
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.
@@ -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.3.0` |
15
- | npm integrity | registry-derived after publication; run `npm view @adcp/sdk@15.3.0 dist.integrity` |
14
+ | Exact npm package | `@adcp/sdk@15.4.0` |
15
+ | npm integrity | registry-derived after publication; run `npm view @adcp/sdk@15.4.0 dist.integrity` |
16
16
  | Node.js runtime | `^20.19.0 || >=22.12.0` |
17
17
  | Default AdCP wire release | `3.2.3` |
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` |
@@ -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@15.3.0'
25
- npm view '@adcp/sdk@15.3.0' dist.integrity
24
+ npm install --save-exact '@adcp/sdk@15.4.0'
25
+ npm view '@adcp/sdk@15.4.0' dist.integrity
26
26
  ```
27
27
 
28
28
  ### Required and optional peers
@@ -372,6 +372,14 @@ await processWebhook(sender, payload);
372
372
 
373
373
  ## Failure Responses
374
374
 
375
+ Use `WebhookSignatureError.retryable` when deciding whether a failed RFC 9421
376
+ verification can be retried. Capabilities or brand.json discovery failures with
377
+ HTTP 408, 429, or 5xx are retryable, as are DNS failures, timeouts, and connection
378
+ resets. Other HTTP 4xx and SSRF policy refusals remain terminal; a temporary
379
+ discovery failure still requires successful signature verification before
380
+ processing the webhook.
381
+ Retry transient failures with backoff.
382
+
375
383
  Use `401` for signature failures. Do not include resolved private IPs, raw
376
384
  signature bases, JWKS bodies, secrets, or raw payload bytes in the response.
377
385
  Log correlation IDs and typed error codes; keep detailed material in a secure
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adcp/sdk",
3
- "version": "15.3.0",
3
+ "version": "15.4.0",
4
4
  "description": "AdCP SDK — client, server, and compliance harnesses for the AdContext Protocol (MCP + A2A)",
5
5
  "workspaces": [
6
6
  ".",