@adcp/sdk 16.0.0-beta.2 → 16.0.0-beta.3

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 (87) hide show
  1. package/README.md +54 -0
  2. package/dist/lib/core/ConversationTypes.d.mts +8 -3
  3. package/dist/lib/core/ConversationTypes.d.ts +8 -3
  4. package/dist/lib/core/SingleAgentClient.d.mts +5 -3
  5. package/dist/lib/core/SingleAgentClient.d.ts +5 -3
  6. package/dist/lib/core/TaskExecutor.js +5 -1
  7. package/dist/lib/core/TaskExecutor.mjs +5 -1
  8. package/dist/lib/errors/index.d.mts +9 -4
  9. package/dist/lib/errors/index.d.ts +9 -4
  10. package/dist/lib/index.d.mts +2 -2
  11. package/dist/lib/index.d.ts +2 -2
  12. package/dist/lib/index.js +6 -0
  13. package/dist/lib/index.mjs +7 -1
  14. package/dist/lib/negotiation/types.d.mts +20 -39
  15. package/dist/lib/negotiation/types.d.ts +20 -39
  16. package/dist/lib/protocols/index.d.mts +60 -24
  17. package/dist/lib/protocols/index.d.ts +60 -24
  18. package/dist/lib/protocols/index.js +9 -4
  19. package/dist/lib/protocols/index.mjs +3 -0
  20. package/dist/lib/protocols/mcp-modern.js +1 -0
  21. package/dist/lib/protocols/mcp-modern.mjs +2 -1
  22. package/dist/lib/protocols/mcp.js +1 -0
  23. package/dist/lib/protocols/mcp.mjs +2 -1
  24. package/dist/lib/protocols/responseSizeLimit.d.mts +91 -5
  25. package/dist/lib/protocols/responseSizeLimit.d.ts +91 -5
  26. package/dist/lib/protocols/responseSizeLimit.js +195 -31
  27. package/dist/lib/protocols/responseSizeLimit.mjs +192 -31
  28. package/dist/lib/schemas-data/v2.5/_provenance.json +1 -1
  29. package/dist/lib/signing/crypto.d.mts +15 -0
  30. package/dist/lib/signing/crypto.d.ts +15 -0
  31. package/dist/lib/signing/crypto.js +75 -3
  32. package/dist/lib/signing/crypto.mjs +78 -3
  33. package/dist/lib/signing/server.d.mts +1 -1
  34. package/dist/lib/signing/server.d.ts +1 -1
  35. package/dist/lib/signing/server.js +2 -0
  36. package/dist/lib/signing/server.mjs +2 -1
  37. package/dist/lib/signing/signer.js +2 -8
  38. package/dist/lib/signing/signer.mjs +3 -9
  39. package/dist/lib/signing/testing.js +2 -6
  40. package/dist/lib/signing/testing.mjs +3 -7
  41. package/dist/lib/signing/verifier.js +2 -2
  42. package/dist/lib/signing/verifier.mjs +3 -3
  43. package/dist/lib/signing/web-bot-auth.js +20 -7
  44. package/dist/lib/signing/web-bot-auth.mjs +21 -8
  45. package/dist/lib/signing/webhook-verifier.js +2 -2
  46. package/dist/lib/signing/webhook-verifier.mjs +3 -3
  47. package/dist/lib/substitution/compile.js +2 -1
  48. package/dist/lib/substitution/compile.mjs +2 -1
  49. package/dist/lib/substitution/consent-macros.d.mts +4 -0
  50. package/dist/lib/substitution/consent-macros.d.ts +4 -0
  51. package/dist/lib/substitution/consent-macros.js +45 -0
  52. package/dist/lib/substitution/consent-macros.mjs +20 -0
  53. package/dist/lib/substitution/index.d.mts +1 -1
  54. package/dist/lib/substitution/index.d.ts +1 -1
  55. package/dist/lib/substitution/index.js +2 -0
  56. package/dist/lib/substitution/index.mjs +2 -1
  57. package/dist/lib/substitution/translate.d.mts +15 -2
  58. package/dist/lib/substitution/translate.d.ts +15 -2
  59. package/dist/lib/substitution/translate.js +148 -26
  60. package/dist/lib/substitution/translate.mjs +147 -26
  61. package/dist/lib/testing/client.js +2 -1
  62. package/dist/lib/testing/client.mjs +2 -1
  63. package/dist/lib/testing/scenarios/capabilities.js +1 -1
  64. package/dist/lib/testing/scenarios/capabilities.mjs +1 -1
  65. package/dist/lib/testing/storyboard/request-signing/builder.js +2 -5
  66. package/dist/lib/testing/storyboard/request-signing/builder.mjs +3 -6
  67. package/dist/lib/testing/storyboard/signer-grader/grader.js +2 -7
  68. package/dist/lib/testing/storyboard/signer-grader/grader.mjs +2 -7
  69. package/dist/lib/testing/storyboard/validations.d.mts +1 -1
  70. package/dist/lib/testing/storyboard/validations.d.ts +1 -1
  71. package/dist/lib/types/enums.generated.d.mts +3 -0
  72. package/dist/lib/types/enums.generated.d.ts +3 -0
  73. package/dist/lib/types/enums.generated.js +9 -0
  74. package/dist/lib/types/enums.generated.mjs +6 -0
  75. package/dist/lib/validation/schema-loader.js +25 -0
  76. package/dist/lib/validation/schema-loader.mjs +24 -0
  77. package/dist/lib/version.d.mts +3 -3
  78. package/dist/lib/version.d.ts +3 -3
  79. package/dist/lib/version.js +3 -3
  80. package/dist/lib/version.mjs +3 -3
  81. package/docs/TYPE-SUMMARY.md +6 -1
  82. package/docs/guides/DISCOVERY-CACHE-AND-SESSION-REUSE.md +3 -2
  83. package/docs/guides/UNIVERSAL-MACRO-COMPILATION.md +38 -0
  84. package/docs/guides/VALIDATE-YOUR-AGENT.md +12 -0
  85. package/docs/llms.txt +1 -1
  86. package/docs/migration-14.x-rc-worksheet.md +4 -4
  87. package/package.json +2 -1
@@ -12,6 +12,7 @@ import { normalizeTransportOptions } from "../protocols/index.mjs";
12
12
  import { createHmac, hkdfSync, randomBytes } from "node:crypto";
13
13
  import { AsyncLocalStorage } from "node:async_hooks";
14
14
  import { validateIncomingResponse } from "../validation/client-hooks.mjs";
15
+ import { resolveServedValidationVersion } from "../validation/schema-loader.mjs";
15
16
  import { extractVersionUnsupportedDetails } from "../utils/error-extraction.mjs";
16
17
  import { buildAgentSigningContext } from "../signing/client.mjs";
17
18
  import { bindAgentStorage } from "../auth/oauth/storage-registry.mjs";
@@ -491,7 +492,7 @@ async function discoverAgentProfile(client, signal, schemaAdcpVersion) {
491
492
  caps.data,
492
493
  "strict",
493
494
  void 0,
494
- schemaAdcpVersion ?? client.getAdcpVersion()
495
+ resolveServedValidationVersion(caps.data, schemaAdcpVersion ?? client.getAdcpVersion())
495
496
  );
496
497
  if (!validation.valid) {
497
498
  profile.capabilities_schema_issues = validation.issues.map((issue) => ({
@@ -239,7 +239,7 @@ function crossValidateProtocolsAndTools(capabilities, tools) {
239
239
  creative: import_capabilities.CREATIVE_TOOLS,
240
240
  sponsored_intelligence: import_capabilities.SPONSORED_INTELLIGENCE_TOOLS,
241
241
  trusted_match: import_capabilities.TRUSTED_MATCH_TOOLS,
242
- compliance: import_capabilities.COMPLIANCE_TOOLS
242
+ compliance_testing: import_capabilities.COMPLIANCE_TOOLS
243
243
  };
244
244
  const perProtocolDiffs = {};
245
245
  for (const protocol of capabilities.protocols) {
@@ -225,7 +225,7 @@ function crossValidateProtocolsAndTools(capabilities, tools) {
225
225
  creative: CREATIVE_TOOLS,
226
226
  sponsored_intelligence: SPONSORED_INTELLIGENCE_TOOLS,
227
227
  trusted_match: TRUSTED_MATCH_TOOLS,
228
- compliance: COMPLIANCE_TOOLS
228
+ compliance_testing: COMPLIANCE_TOOLS
229
229
  };
230
230
  const perProtocolDiffs = {};
231
231
  for (const protocol of capabilities.protocols) {
@@ -24,6 +24,7 @@ __export(builder_exports, {
24
24
  });
25
25
  module.exports = __toCommonJS(builder_exports);
26
26
  var import_crypto = require("crypto");
27
+ var import_crypto2 = require('../../../signing/crypto.js');
27
28
  var import_signing = require('../../../signing/index.js');
28
29
  var import_vector_loader = require('./vector-loader.js');
29
30
  function buildPositiveRequest(vector, keys, options = {}) {
@@ -571,11 +572,7 @@ function formatParamsWithOmissions(components, params, override) {
571
572
  return `(${componentList});${pairs.join(";")}`;
572
573
  }
573
574
  function produceSignature(key, data) {
574
- const privateKey = (0, import_crypto.createPrivateKey)({ key: key.privateKey, format: "jwk" });
575
- if (key.alg === "ed25519") {
576
- return new Uint8Array((0, import_crypto.sign)(null, data, privateKey));
577
- }
578
- return new Uint8Array((0, import_crypto.sign)("sha256", data, { key: privateKey, dsaEncoding: "ieee-p1363" }));
575
+ return (0, import_crypto2.signWithPrivateJwk)(key.alg, key.privateKey, data);
579
576
  }
580
577
  function signerKeyFor(vector, keys) {
581
578
  const kid = vector.jwks_ref?.[0];
@@ -1,4 +1,5 @@
1
- import { createHash, createPrivateKey, randomBytes, randomUUID, sign as nodeSign } from "crypto";
1
+ import { createHash, randomBytes, randomUUID } from "crypto";
2
+ import { signWithPrivateJwk } from "../../../signing/crypto.mjs";
2
3
  import {
3
4
  buildSignatureBase,
4
5
  computeContentDigest,
@@ -554,11 +555,7 @@ function formatParamsWithOmissions(components, params, override) {
554
555
  return `(${componentList});${pairs.join(";")}`;
555
556
  }
556
557
  function produceSignature(key, data) {
557
- const privateKey = createPrivateKey({ key: key.privateKey, format: "jwk" });
558
- if (key.alg === "ed25519") {
559
- return new Uint8Array(nodeSign(null, data, privateKey));
560
- }
561
- return new Uint8Array(nodeSign("sha256", data, { key: privateKey, dsaEncoding: "ieee-p1363" }));
558
+ return signWithPrivateJwk(key.alg, key.privateKey, data);
562
559
  }
563
560
  function signerKeyFor(vector, keys) {
564
561
  const kid = vector.jwks_ref?.[0];
@@ -22,7 +22,7 @@ __export(grader_exports, {
22
22
  });
23
23
  module.exports = __toCommonJS(grader_exports);
24
24
  var import_promises = require("node:fs/promises");
25
- var import_node_crypto = require("node:crypto");
25
+ var import_crypto = require('../../../signing/crypto.js');
26
26
  var import_signing = require('../../../signing/index.js');
27
27
  var import_ssrf_fetch = require('../../../net/ssrf-fetch.js');
28
28
  var import_content_digest = require('../../../signing/content-digest.js');
@@ -175,12 +175,7 @@ async function keyFileProvider(filePath, kid, algorithm) {
175
175
  algorithm,
176
176
  fingerprint: `key-file:${kid}`,
177
177
  async sign(payload) {
178
- const privateKey = (0, import_node_crypto.createPrivateKey)({ key: jwk, format: "jwk" });
179
- const data = Buffer.from(payload);
180
- if (algorithm === "ed25519") {
181
- return new Uint8Array((0, import_node_crypto.sign)(null, data, privateKey));
182
- }
183
- return new Uint8Array((0, import_node_crypto.sign)("sha256", data, { key: privateKey, dsaEncoding: "ieee-p1363" }));
178
+ return (0, import_crypto.signWithPrivateJwkAsync)(algorithm, jwk, payload);
184
179
  }
185
180
  };
186
181
  }
@@ -1,5 +1,5 @@
1
1
  import { readFile } from "node:fs/promises";
2
- import { createPrivateKey, sign as nodeSign } from "node:crypto";
2
+ import { signWithPrivateJwkAsync } from "../../../signing/crypto.mjs";
3
3
  import {
4
4
  HttpsJwksResolver,
5
5
  InMemoryReplayStore,
@@ -159,12 +159,7 @@ async function keyFileProvider(filePath, kid, algorithm) {
159
159
  algorithm,
160
160
  fingerprint: `key-file:${kid}`,
161
161
  async sign(payload) {
162
- const privateKey = createPrivateKey({ key: jwk, format: "jwk" });
163
- const data = Buffer.from(payload);
164
- if (algorithm === "ed25519") {
165
- return new Uint8Array(nodeSign(null, data, privateKey));
166
- }
167
- return new Uint8Array(nodeSign("sha256", data, { key: privateKey, dsaEncoding: "ieee-p1363" }));
162
+ return signWithPrivateJwkAsync(algorithm, jwk, payload);
168
163
  }
169
164
  };
170
165
  }
@@ -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 = "16.0.0-beta.2";
200
+ export declare const RUNNER_CAPABILITY_VERSION = "16.0.0-beta.3";
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 = "16.0.0-beta.2";
200
+ export declare const RUNNER_CAPABILITY_VERSION = "16.0.0-beta.3";
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
  /**
@@ -98,6 +98,8 @@ export declare const FrequencyCapDurationUnitValues: readonly ["seconds", "minut
98
98
  export declare const FrequencyCapMutableFieldValues: readonly ["max_impressions", "per", "window", "suppress"];
99
99
  export declare const FrequencyCapScopeValues: readonly ["package"];
100
100
  export declare const GenreTaxonomyValues: readonly ["iab_content_3.0", "iab_content_2.2", "gracenote", "eidr", "apple_genres", "google_genres", "roku", "amazon_genres", "custom"];
101
+ export declare const GeographicPlaceIdentifierSystemValues: readonly ["geonames", "google_ads", "microsoft_ads"];
102
+ export declare const GeographicPlaceTypeValues: readonly ["airport", "borough", "city", "city_region", "commune", "county", "district", "municipality", "neighborhood", "post_town", "prefecture", "province", "quarter", "state", "territory", "ward"];
101
103
  export declare const GeographicTargetingLevelValues: readonly ["country", "region", "metro", "postal_area"];
102
104
  export declare const GOPTypeValues: readonly ["closed", "open"];
103
105
  export declare const GovernanceDecisionValues: readonly ["approved", "denied", "conditions"];
@@ -200,6 +202,7 @@ export declare const SortMetricValues: readonly ["impressions", "spend", "clicks
200
202
  export declare const SpecialCategoryValues: readonly ["awards", "championship", "concert", "conference", "election", "festival", "gala", "holiday", "premiere", "product_launch", "reunion", "tribute"];
201
203
  export declare const SponsoredPlacementTypeValues: readonly ["sponsored_search", "sponsored_display", "sponsored_native"];
202
204
  export declare const StandardScopeValues: readonly ["attestation_verifier"];
205
+ export declare const StartTimingValues: readonly ["asap"];
203
206
  export declare const StoryboardStatusValues: readonly ["passing", "failing", "partial", "untested", "skipped", "not_selected", "unknown"];
204
207
  export declare const TalentRoleValues: readonly ["host", "guest", "creator", "cast", "narrator", "producer", "correspondent", "commentator", "analyst"];
205
208
  export declare const TaskStatusValues: readonly ["submitted", "working", "input-required", "completed", "canceled", "failed", "rejected", "auth-required", "unknown"];
@@ -98,6 +98,8 @@ export declare const FrequencyCapDurationUnitValues: readonly ["seconds", "minut
98
98
  export declare const FrequencyCapMutableFieldValues: readonly ["max_impressions", "per", "window", "suppress"];
99
99
  export declare const FrequencyCapScopeValues: readonly ["package"];
100
100
  export declare const GenreTaxonomyValues: readonly ["iab_content_3.0", "iab_content_2.2", "gracenote", "eidr", "apple_genres", "google_genres", "roku", "amazon_genres", "custom"];
101
+ export declare const GeographicPlaceIdentifierSystemValues: readonly ["geonames", "google_ads", "microsoft_ads"];
102
+ export declare const GeographicPlaceTypeValues: readonly ["airport", "borough", "city", "city_region", "commune", "county", "district", "municipality", "neighborhood", "post_town", "prefecture", "province", "quarter", "state", "territory", "ward"];
101
103
  export declare const GeographicTargetingLevelValues: readonly ["country", "region", "metro", "postal_area"];
102
104
  export declare const GOPTypeValues: readonly ["closed", "open"];
103
105
  export declare const GovernanceDecisionValues: readonly ["approved", "denied", "conditions"];
@@ -200,6 +202,7 @@ export declare const SortMetricValues: readonly ["impressions", "spend", "clicks
200
202
  export declare const SpecialCategoryValues: readonly ["awards", "championship", "concert", "conference", "election", "festival", "gala", "holiday", "premiere", "product_launch", "reunion", "tribute"];
201
203
  export declare const SponsoredPlacementTypeValues: readonly ["sponsored_search", "sponsored_display", "sponsored_native"];
202
204
  export declare const StandardScopeValues: readonly ["attestation_verifier"];
205
+ export declare const StartTimingValues: readonly ["asap"];
203
206
  export declare const StoryboardStatusValues: readonly ["passing", "failing", "partial", "untested", "skipped", "not_selected", "unknown"];
204
207
  export declare const TalentRoleValues: readonly ["host", "guest", "creator", "cast", "narrator", "producer", "correspondent", "commentator", "analyst"];
205
208
  export declare const TaskStatusValues: readonly ["submitted", "working", "input-required", "completed", "canceled", "failed", "rejected", "auth-required", "unknown"];
@@ -121,6 +121,8 @@ __export(enums_generated_exports, {
121
121
  FrequencyCapScopeValues: () => FrequencyCapScopeValues,
122
122
  GOPTypeValues: () => GOPTypeValues,
123
123
  GenreTaxonomyValues: () => GenreTaxonomyValues,
124
+ GeographicPlaceIdentifierSystemValues: () => GeographicPlaceIdentifierSystemValues,
125
+ GeographicPlaceTypeValues: () => GeographicPlaceTypeValues,
124
126
  GeographicTargetingLevelValues: () => GeographicTargetingLevelValues,
125
127
  GovernanceDecisionValues: () => GovernanceDecisionValues,
126
128
  GovernanceDomainValues: () => GovernanceDomainValues,
@@ -223,6 +225,7 @@ __export(enums_generated_exports, {
223
225
  SpecialCategoryValues: () => SpecialCategoryValues,
224
226
  SponsoredPlacementTypeValues: () => SponsoredPlacementTypeValues,
225
227
  StandardScopeValues: () => StandardScopeValues,
228
+ StartTimingValues: () => StartTimingValues,
226
229
  StoryboardStatusValues: () => StoryboardStatusValues,
227
230
  TMPResponseTypeValues: () => TMPResponseTypeValues,
228
231
  TalentRoleValues: () => TalentRoleValues,
@@ -354,6 +357,8 @@ const FrequencyCapDurationUnitValues = ["seconds", "minutes", "hours", "days", "
354
357
  const FrequencyCapMutableFieldValues = ["max_impressions", "per", "window", "suppress"];
355
358
  const FrequencyCapScopeValues = ["package"];
356
359
  const GenreTaxonomyValues = ["iab_content_3.0", "iab_content_2.2", "gracenote", "eidr", "apple_genres", "google_genres", "roku", "amazon_genres", "custom"];
360
+ const GeographicPlaceIdentifierSystemValues = ["geonames", "google_ads", "microsoft_ads"];
361
+ const GeographicPlaceTypeValues = ["airport", "borough", "city", "city_region", "commune", "county", "district", "municipality", "neighborhood", "post_town", "prefecture", "province", "quarter", "state", "territory", "ward"];
357
362
  const GeographicTargetingLevelValues = ["country", "region", "metro", "postal_area"];
358
363
  const GOPTypeValues = ["closed", "open"];
359
364
  const GovernanceDecisionValues = ["approved", "denied", "conditions"];
@@ -455,6 +460,7 @@ const SortMetricValues = ["impressions", "spend", "clicks", "ctr", "views", "com
455
460
  const SpecialCategoryValues = ["awards", "championship", "concert", "conference", "election", "festival", "gala", "holiday", "premiere", "product_launch", "reunion", "tribute"];
456
461
  const SponsoredPlacementTypeValues = ["sponsored_search", "sponsored_display", "sponsored_native"];
457
462
  const StandardScopeValues = ["attestation_verifier"];
463
+ const StartTimingValues = ["asap"];
458
464
  const StoryboardStatusValues = ["passing", "failing", "partial", "untested", "skipped", "not_selected", "unknown"];
459
465
  const TalentRoleValues = ["host", "guest", "creator", "cast", "narrator", "producer", "correspondent", "commentator", "analyst"];
460
466
  const TaskStatusValues = ["submitted", "working", "input-required", "completed", "canceled", "failed", "rejected", "auth-required", "unknown"];
@@ -712,6 +718,8 @@ const RequestSigningErrorCodeMetadata = Object.freeze(requestSigningErrorCodeMet
712
718
  FrequencyCapScopeValues,
713
719
  GOPTypeValues,
714
720
  GenreTaxonomyValues,
721
+ GeographicPlaceIdentifierSystemValues,
722
+ GeographicPlaceTypeValues,
715
723
  GeographicTargetingLevelValues,
716
724
  GovernanceDecisionValues,
717
725
  GovernanceDomainValues,
@@ -814,6 +822,7 @@ const RequestSigningErrorCodeMetadata = Object.freeze(requestSigningErrorCodeMet
814
822
  SpecialCategoryValues,
815
823
  SponsoredPlacementTypeValues,
816
824
  StandardScopeValues,
825
+ StartTimingValues,
817
826
  StoryboardStatusValues,
818
827
  TMPResponseTypeValues,
819
828
  TalentRoleValues,
@@ -98,6 +98,8 @@ const FrequencyCapDurationUnitValues = ["seconds", "minutes", "hours", "days", "
98
98
  const FrequencyCapMutableFieldValues = ["max_impressions", "per", "window", "suppress"];
99
99
  const FrequencyCapScopeValues = ["package"];
100
100
  const GenreTaxonomyValues = ["iab_content_3.0", "iab_content_2.2", "gracenote", "eidr", "apple_genres", "google_genres", "roku", "amazon_genres", "custom"];
101
+ const GeographicPlaceIdentifierSystemValues = ["geonames", "google_ads", "microsoft_ads"];
102
+ const GeographicPlaceTypeValues = ["airport", "borough", "city", "city_region", "commune", "county", "district", "municipality", "neighborhood", "post_town", "prefecture", "province", "quarter", "state", "territory", "ward"];
101
103
  const GeographicTargetingLevelValues = ["country", "region", "metro", "postal_area"];
102
104
  const GOPTypeValues = ["closed", "open"];
103
105
  const GovernanceDecisionValues = ["approved", "denied", "conditions"];
@@ -199,6 +201,7 @@ const SortMetricValues = ["impressions", "spend", "clicks", "ctr", "views", "com
199
201
  const SpecialCategoryValues = ["awards", "championship", "concert", "conference", "election", "festival", "gala", "holiday", "premiere", "product_launch", "reunion", "tribute"];
200
202
  const SponsoredPlacementTypeValues = ["sponsored_search", "sponsored_display", "sponsored_native"];
201
203
  const StandardScopeValues = ["attestation_verifier"];
204
+ const StartTimingValues = ["asap"];
202
205
  const StoryboardStatusValues = ["passing", "failing", "partial", "untested", "skipped", "not_selected", "unknown"];
203
206
  const TalentRoleValues = ["host", "guest", "creator", "cast", "narrator", "producer", "correspondent", "commentator", "analyst"];
204
207
  const TaskStatusValues = ["submitted", "working", "input-required", "completed", "canceled", "failed", "rejected", "auth-required", "unknown"];
@@ -455,6 +458,8 @@ export {
455
458
  FrequencyCapScopeValues,
456
459
  GOPTypeValues,
457
460
  GenreTaxonomyValues,
461
+ GeographicPlaceIdentifierSystemValues,
462
+ GeographicPlaceTypeValues,
458
463
  GeographicTargetingLevelValues,
459
464
  GovernanceDecisionValues,
460
465
  GovernanceDomainValues,
@@ -557,6 +562,7 @@ export {
557
562
  SpecialCategoryValues,
558
563
  SponsoredPlacementTypeValues,
559
564
  StandardScopeValues,
565
+ StartTimingValues,
560
566
  StoryboardStatusValues,
561
567
  TMPResponseTypeValues,
562
568
  TalentRoleValues,
@@ -48,6 +48,7 @@ __export(schema_loader_exports, {
48
48
  listValidatorKeys: () => listValidatorKeys,
49
49
  registerExternalSchemaRoot: () => registerExternalSchemaRoot,
50
50
  resolveBundleKey: () => resolveBundleKey,
51
+ resolveServedValidationVersion: () => resolveServedValidationVersion,
51
52
  schemaAllowsTopLevelField: () => schemaAllowsTopLevelField,
52
53
  toReleasePrecisionWire: () => toReleasePrecisionWire,
53
54
  unregisterExternalSchemaRoot: () => unregisterExternalSchemaRoot,
@@ -754,6 +755,29 @@ function hasSchemaBundle(version) {
754
755
  return false;
755
756
  }
756
757
  }
758
+ const SERVED_RELEASE_MAJOR = /^(\d+)\.\d+(?:-[a-zA-Z0-9.-]+)?$/;
759
+ const NUMERIC_PIN_MAJOR = /^(\d+)\.\d+/;
760
+ function resolveServedValidationVersion(response, pinnedVersion) {
761
+ const pinMajor = NUMERIC_PIN_MAJOR.exec(pinnedVersion)?.[1];
762
+ if (pinMajor === void 0) return pinnedVersion;
763
+ try {
764
+ if (isExternalSchemaRootActive(pinnedVersion)) return pinnedVersion;
765
+ } catch {
766
+ return pinnedVersion;
767
+ }
768
+ const echoed = response !== null && typeof response === "object" ? response.adcp_version : void 0;
769
+ if (typeof echoed !== "string") return pinnedVersion;
770
+ const echoMajor = SERVED_RELEASE_MAJOR.exec(echoed)?.[1];
771
+ if (echoMajor === void 0 || echoMajor !== pinMajor) return pinnedVersion;
772
+ let pinnedRelease;
773
+ try {
774
+ pinnedRelease = toReleasePrecisionWire(pinnedVersion);
775
+ } catch {
776
+ return pinnedVersion;
777
+ }
778
+ if (echoed === pinnedRelease) return pinnedVersion;
779
+ return hasSchemaBundle(echoed) ? echoed : pinnedVersion;
780
+ }
757
781
  const mcpToolSchemaCache = /* @__PURE__ */ new Map();
758
782
  const mcpToolSummaryCache = /* @__PURE__ */ new Map();
759
783
  function boundedMcpToolSummary(value) {
@@ -1019,6 +1043,7 @@ function cloneJsonValue(value) {
1019
1043
  listValidatorKeys,
1020
1044
  registerExternalSchemaRoot,
1021
1045
  resolveBundleKey,
1046
+ resolveServedValidationVersion,
1022
1047
  schemaAllowsTopLevelField,
1023
1048
  toReleasePrecisionWire,
1024
1049
  unregisterExternalSchemaRoot,
@@ -701,6 +701,29 @@ function hasSchemaBundle(version) {
701
701
  return false;
702
702
  }
703
703
  }
704
+ const SERVED_RELEASE_MAJOR = /^(\d+)\.\d+(?:-[a-zA-Z0-9.-]+)?$/;
705
+ const NUMERIC_PIN_MAJOR = /^(\d+)\.\d+/;
706
+ function resolveServedValidationVersion(response, pinnedVersion) {
707
+ const pinMajor = NUMERIC_PIN_MAJOR.exec(pinnedVersion)?.[1];
708
+ if (pinMajor === void 0) return pinnedVersion;
709
+ try {
710
+ if (isExternalSchemaRootActive(pinnedVersion)) return pinnedVersion;
711
+ } catch {
712
+ return pinnedVersion;
713
+ }
714
+ const echoed = response !== null && typeof response === "object" ? response.adcp_version : void 0;
715
+ if (typeof echoed !== "string") return pinnedVersion;
716
+ const echoMajor = SERVED_RELEASE_MAJOR.exec(echoed)?.[1];
717
+ if (echoMajor === void 0 || echoMajor !== pinMajor) return pinnedVersion;
718
+ let pinnedRelease;
719
+ try {
720
+ pinnedRelease = toReleasePrecisionWire(pinnedVersion);
721
+ } catch {
722
+ return pinnedVersion;
723
+ }
724
+ if (echoed === pinnedRelease) return pinnedVersion;
725
+ return hasSchemaBundle(echoed) ? echoed : pinnedVersion;
726
+ }
704
727
  const mcpToolSchemaCache = /* @__PURE__ */ new Map();
705
728
  const mcpToolSummaryCache = /* @__PURE__ */ new Map();
706
729
  function boundedMcpToolSummary(value) {
@@ -965,6 +988,7 @@ export {
965
988
  listValidatorKeys,
966
989
  registerExternalSchemaRoot,
967
990
  resolveBundleKey,
991
+ resolveServedValidationVersion,
968
992
  schemaAllowsTopLevelField,
969
993
  toReleasePrecisionWire,
970
994
  unregisterExternalSchemaRoot,
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * AdCP SDK library version
3
3
  */
4
- export declare const LIBRARY_VERSION = "16.0.0-beta.2";
4
+ export declare const LIBRARY_VERSION = "16.0.0-beta.3";
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: "16.0.0-beta.2";
36
+ readonly library: "16.0.0-beta.3";
37
37
  readonly adcp: "3.2.4";
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", "3.2.4"];
39
- readonly generatedAt: "2026-10-15T15:37:12.181Z";
39
+ readonly generatedAt: "2026-10-15T18:57:32.995Z";
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 = "16.0.0-beta.2";
4
+ export declare const LIBRARY_VERSION = "16.0.0-beta.3";
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: "16.0.0-beta.2";
36
+ readonly library: "16.0.0-beta.3";
37
37
  readonly adcp: "3.2.4";
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", "3.2.4"];
39
- readonly generatedAt: "2026-10-15T15:37:12.181Z";
39
+ readonly generatedAt: "2026-10-15T18:57:32.995Z";
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 = "16.0.0-beta.2";
34
+ const LIBRARY_VERSION = "16.0.0-beta.3";
35
35
  const ADCP_VERSION = "3.2.4";
36
36
  const ADCP_MAJOR_VERSION = 3;
37
37
  const COMPATIBLE_ADCP_VERSIONS = [
@@ -98,10 +98,10 @@ const COMPATIBLE_ADCP_VERSIONS = [
98
98
  "3.2.4"
99
99
  ];
100
100
  const VERSION_INFO = {
101
- library: "16.0.0-beta.2",
101
+ library: "16.0.0-beta.3",
102
102
  adcp: "3.2.4",
103
103
  compatibleVersions: COMPATIBLE_ADCP_VERSIONS,
104
- generatedAt: "2026-10-15T15:37:12.181Z"
104
+ generatedAt: "2026-10-15T18:57:32.995Z"
105
105
  };
106
106
  function getAdcpVersion() {
107
107
  return ADCP_VERSION;
@@ -1,4 +1,4 @@
1
- const LIBRARY_VERSION = "16.0.0-beta.2";
1
+ const LIBRARY_VERSION = "16.0.0-beta.3";
2
2
  const ADCP_VERSION = "3.2.4";
3
3
  const ADCP_MAJOR_VERSION = 3;
4
4
  const COMPATIBLE_ADCP_VERSIONS = [
@@ -65,10 +65,10 @@ const COMPATIBLE_ADCP_VERSIONS = [
65
65
  "3.2.4"
66
66
  ];
67
67
  const VERSION_INFO = {
68
- library: "16.0.0-beta.2",
68
+ library: "16.0.0-beta.3",
69
69
  adcp: "3.2.4",
70
70
  compatibleVersions: COMPATIBLE_ADCP_VERSIONS,
71
- generatedAt: "2026-10-15T15:37:12.181Z"
71
+ generatedAt: "2026-10-15T18:57:32.995Z"
72
72
  };
73
73
  function getAdcpVersion() {
74
74
  return ADCP_VERSION;
@@ -1,7 +1,7 @@
1
1
  # AdCP Type Summary
2
2
 
3
3
  > Generated at: 2026-10-15
4
- > @adcp/sdk v16.0.0-beta.2
4
+ > @adcp/sdk v16.0.0-beta.3
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
 
@@ -49,6 +49,11 @@ interface A2ALegacyCompatOptions {
49
49
  }
50
50
 
51
51
  interface TransportOptions {
52
+ // Defaults to 4 MiB (DEFAULT_MAX_RESPONSE_BYTES); only 0 opts out
53
+ // (Infinity / negatives fall back to the default).
54
+ // SSE is bounded per event plus `maxResponseBytes * 2` cumulative per call.
55
+ // Over-cap responses throw ResponseTooLargeError; nothing is truncated.
56
+ // A per-call `transport` replaces this object; it does not merge.
52
57
  maxResponseBytes?: number;
53
58
  trustedFetchFn?: typeof fetch;
54
59
  allowPrivateIp?: boolean;
@@ -55,7 +55,7 @@ The key is a SHA-256 over:
55
55
  | configured `adcpVersion` / `wireAdcpVersion` | negotiated version |
56
56
  | every non-correlation, non-credential header | unknown `x-*` tenant / routing / policy headers can select a different upstream view, so they fail closed into the key. This includes `baggage`, **ambient OpenTelemetry baggage included** |
57
57
  | request-signing identity and policy | `kind`, `kid`, `alg`, agent URL and signing policy; never the private key |
58
- | effective `allowPrivateIp`, `maxResponseBytes` | the transport policy the evidence was gathered under (per-call `transport` overrides included) |
58
+ | configured `allowPrivateIp`, `maxResponseBytes` | the transport policy the evidence was gathered under (per-call `transport` overrides included). These are the values the caller *configured*, not the effective ones: an unset `maxResponseBytes` keys as "unset" rather than as the 4 MiB default, so entries written before the default landed stay reusable. The MCP connection cache keys the *resolved* cap instead — see [Reusable MCP connections](#reusable-mcp-connections) |
59
59
 
60
60
  Not part of the key: correlation headers (`x-request-id`, `x-correlation-id`, `traceparent`, ...), and credential header values (`Authorization`, `x-adcp-auth`) — OAuth and `auth_token` credentials are also owned by `authIdentity`; a token rotation for the same authorization scope keeps the entry. **Choose `authIdentity` at least as narrow as the credential's authorization scope.** Change the identity or invalidate the cache when permissions change or access is revoked; use a distinct identity for anonymous access. Two principals must never share an identity. Keys are hashes and never contain the identity, token or header values.
61
61
 
@@ -101,7 +101,7 @@ Unlike [`primeCapabilities`](../TYPE-SUMMARY.md) — which stays client-bound an
101
101
 
102
102
  This behavior applies by default, including calls that pass a signal or timeout outside a connection scope. The process-wide legacy/OAuth session cache retains at most 20 connections per cache with LRU eviction and has no idle expiry. For request workflows with many distinct credentials, use a scope to bound session lifetime. At process shutdown, `closeConnections()` from `@adcp/sdk/advanced` closes the process-wide connections.
103
103
 
104
- A reusable session is keyed only by what changes the _connection_: endpoint, credential, tenant / routing headers, signing identity, `allowPrivateIp`, a caller-injected fetch, and the workflow scope. These no longer choose or split a session:
104
+ A reusable session is keyed only by what changes the _connection_: endpoint, credential, tenant / routing headers, signing identity, `allowPrivateIp`, `maxResponseBytes`, a caller-injected fetch, and the workflow scope. These no longer choose or split a session:
105
105
 
106
106
  - **Correlation headers**: `traceparent`, `tracestate`, `x-request-id`, `x-correlation-id`, `x-trace-id`, `x-span-id`, `x-debug-id`, `x-client-request-id`, `x-b3-*`, `x-amzn-trace-id`, `x-cloud-trace-context`, `x-datadog-*`, `sentry-trace`, and vendor-prefixed `x-<vendor>-request-id` / `-correlation-id` / `-trace-id` / `-span-id` / `-debug-id`. Names suggesting credentials or tenant/routing identity (including `auth`, `token`, `tenant`, `account`, `workspace`, `seat`, `advertiser`, `publisher`, `buyer` and `seller`) are never treated as correlation. **`baggage` stays in the key**: it can carry tenant or routing members. Any header outside the list above also stays in the key (fail closed).
107
107
  - **`AbortSignal`** and **`requestTimeoutMs`**: they bound a call.
@@ -114,6 +114,7 @@ Isolation properties:
114
114
  - A caller that joins another caller's in-flight connect waits under its own signal and timeout. If the creator cancels the connect, the joiner retries for itself, with at most two retries after foreign aborts.
115
115
  - A caller-injected `fetchFn` (a per-call network trust boundary) keeps its own one-shot session outside a connection scope; inside a scope its identity is part of the key.
116
116
  - Connections are never shared across credentials, tenant headers, signing identities or `allowPrivateIp` settings.
117
+ - Connections are never shared across different `maxResponseBytes` values either. The response cap is decided once per request, and a session's standalone `GET` event-stream listener issues exactly one request — at connect time — so it carries whatever policy opened the connection for the life of that connection. Sharing across policies would let one `maxResponseBytes: 0` call hand an uncapped listener to every later caller. The key uses the *resolved* cap, so an explicit `4 * 1024 * 1024` and an unset value are the same policy and share a session; `0` and any other number each get their own. Varying the cap per call therefore costs a session per distinct value against the same agent, against a 20-entry LRU — prefer a single client-level value where you can, or pin the session with `withMCPConnectionScope` where continuity matters.
117
118
 
118
119
  ### Public connection scope
119
120
 
@@ -96,3 +96,41 @@ Do not create a global mapping based only on a token's spelling. A token such as
96
96
  cookie for another, and an account identifier for a third. Scope every mapping
97
97
  to its source dialect and keep the supporting vendor documentation with the
98
98
  registry entry.
99
+
100
+ Vendor-scoped TCF mappings retain the complete receiving vendor ID: map
101
+ `${GDPR_CONSENT_755}` to `{GDPR_CONSENT_755}`, never to unscoped
102
+ `{GDPR_CONSENT}` or another vendor's token. The suffix must be a positive
103
+ decimal integer without leading zeros. `{ADDTL_CONSENT}` is also supported,
104
+ with the same source-dialect and documentation requirements. Its CMP-provided
105
+ value is opaque; the helper does not generate consent or modify provider lists.
106
+
107
+ For the return translation, supply exact native mappings:
108
+
109
+ ```typescript
110
+ import { translateUniversalMacros } from '@adcp/sdk/substitution';
111
+
112
+ const translated = translateUniversalMacros(
113
+ 'https://pixel.vendor.example/i?gdpr={GDPR}&c={GDPR_CONSENT_755}&a={ADDTL_CONSENT}',
114
+ {
115
+ '{GDPR}': { native: '${GDPR}' },
116
+ '{GDPR_CONSENT_755}': { native: '${GDPR_CONSENT_755}' },
117
+ '{ADDTL_CONSENT}': { native: '${ADDTL_CONSENT}' },
118
+ }
119
+ );
120
+ ```
121
+
122
+ Existing native tokens pass through unchanged. The emitted URL may contain at
123
+ most one scoped TCF token, including pre-existing tokens and native aliases
124
+ identified by the supplied mappings. After dropping unsupported parameters,
125
+ multiple occurrences throw `MultipleVendorConsentMacrosError` with code
126
+ `multiple_vendor_consent_macros` and the second token in canonical AdCP form.
127
+ Additional Consent does not count toward that limit. Concrete `value` mappings
128
+ are encoded and reported in `frozen_consent_macros`; missing consent mappings
129
+ appear in `dropped_consent_macros`. When an unscoped target requires an unknown
130
+ vendor ID, use `'{GDPR_CONSENT}': { value: '' }` and translate `{GDPR}`
131
+ independently rather than guessing an ID.
132
+
133
+ These helpers implement the AdCP 3.3 translation contract. Generated protocol
134
+ types and declaration/capability validation still follow the SDK's pinned schema
135
+ release. Helper support alone does not establish a resolver's declared support
136
+ for a scoped token or Additional Consent.
@@ -668,6 +668,18 @@ try {
668
668
 
669
669
  These policies follow the language-neutral fixture ratified in [AdCP #6674](https://github.com/adcontextprotocol/adcp/issues/6674).
670
670
 
671
+ The AdCP 3.3 fixture also covers vendor-scoped `{GDPR_CONSENT_<gvl_id>}` and
672
+ `{ADDTL_CONSENT}`. Preserve the receiving vendor ID and treat Additional Consent
673
+ as opaque CMP data. Both participate in dropped/frozen consent diagnostics.
674
+ After unsupported parameters are dropped, a URL with multiple scoped TCF
675
+ occurrences throws `MultipleVendorConsentMacrosError` (exported from both
676
+ `@adcp/sdk` and `@adcp/sdk/substitution`), with code
677
+ `multiple_vendor_consent_macros` and the canonical second token in `macro`.
678
+ Existing native tokens and verified native aliases count; encoded concrete
679
+ values and Additional Consent do not. See the
680
+ [compilation guide](UNIVERSAL-MACRO-COMPILATION.md) for mapping and schema-version
681
+ boundaries.
682
+
671
683
  ---
672
684
 
673
685
  ## The fork-matrix: canonical adapter → compliance
package/docs/llms.txt CHANGED
@@ -1,7 +1,7 @@
1
1
  # Ad Context Protocol (AdCP)
2
2
 
3
3
  > Generated at: 2026-10-15
4
- > Library: @adcp/sdk v16.0.0-beta.2
4
+ > Library: @adcp/sdk v16.0.0-beta.3
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@16.0.0-beta.2` |
15
- | npm integrity | registry-derived after publication; run `npm view @adcp/sdk@16.0.0-beta.2 dist.integrity` |
14
+ | Exact npm package | `@adcp/sdk@16.0.0-beta.3` |
15
+ | npm integrity | registry-derived after publication; run `npm view @adcp/sdk@16.0.0-beta.3 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@16.0.0-beta.2'
25
- npm view '@adcp/sdk@16.0.0-beta.2' dist.integrity
24
+ npm install --save-exact '@adcp/sdk@16.0.0-beta.3'
25
+ npm view '@adcp/sdk@16.0.0-beta.3' dist.integrity
26
26
  ```
27
27
 
28
28
  ### Required and optional peers
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adcp/sdk",
3
- "version": "16.0.0-beta.2",
3
+ "version": "16.0.0-beta.3",
4
4
  "description": "AdCP SDK — client, server, and compliance harnesses for the AdContext Protocol (MCP + A2A)",
5
5
  "workspaces": [
6
6
  ".",
@@ -875,6 +875,7 @@
875
875
  "typescript": "^5.9.3",
876
876
  "typescript-eslint": "^8.68.0",
877
877
  "web-bot-auth": "0.2.0",
878
+ "workerd": "1.20260730.1",
878
879
  "zod": "^4.4.3",
879
880
  "zod-openapi": "^5.4.3"
880
881
  },