@adcp/sdk 14.0.0-rc.33 → 14.0.0-rc.34

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 (48) hide show
  1. package/dist/lib/brand/domain.d.mts +30 -0
  2. package/dist/lib/brand/domain.d.ts +30 -0
  3. package/dist/lib/brand/domain.js +109 -0
  4. package/dist/lib/brand/domain.mjs +82 -0
  5. package/dist/lib/brand/index.d.mts +2 -1
  6. package/dist/lib/brand/index.d.ts +2 -1
  7. package/dist/lib/brand/index.js +9 -2
  8. package/dist/lib/brand/index.mjs +5 -1
  9. package/dist/lib/core/ConversationTypes.d.mts +14 -0
  10. package/dist/lib/core/ConversationTypes.d.ts +14 -0
  11. package/dist/lib/index.d.mts +2 -2
  12. package/dist/lib/index.d.ts +2 -2
  13. package/dist/lib/index.js +6 -0
  14. package/dist/lib/index.mjs +7 -1
  15. package/dist/lib/schemas-data/v2.5/_provenance.json +1 -1
  16. package/dist/lib/server/create-adcp-server.js +10 -3
  17. package/dist/lib/server/create-adcp-server.mjs +9 -3
  18. package/dist/lib/server/decisioning/async-outcome.d.mts +30 -0
  19. package/dist/lib/server/decisioning/async-outcome.d.ts +30 -0
  20. package/dist/lib/server/decisioning/async-outcome.js +4 -1
  21. package/dist/lib/server/decisioning/async-outcome.mjs +4 -1
  22. package/dist/lib/server/errors.d.mts +23 -0
  23. package/dist/lib/server/errors.d.ts +23 -0
  24. package/dist/lib/server/errors.js +2 -1
  25. package/dist/lib/server/errors.mjs +2 -1
  26. package/dist/lib/server/normalize-errors.d.mts +15 -3
  27. package/dist/lib/server/normalize-errors.d.ts +15 -3
  28. package/dist/lib/server/normalize-errors.js +6 -0
  29. package/dist/lib/server/normalize-errors.mjs +6 -0
  30. package/dist/lib/signing/agent-resolver/etld.js +7 -2
  31. package/dist/lib/signing/agent-resolver/etld.mjs +7 -2
  32. package/dist/lib/signing/agent-resolver/resolve-agent.js +21 -4
  33. package/dist/lib/signing/agent-resolver/resolve-agent.mjs +21 -4
  34. package/dist/lib/testing/storyboard/validations.d.mts +1 -1
  35. package/dist/lib/testing/storyboard/validations.d.ts +1 -1
  36. package/dist/lib/utils/buyer-retry-policy.d.mts +11 -0
  37. package/dist/lib/utils/buyer-retry-policy.d.ts +11 -0
  38. package/dist/lib/utils/error-extraction.d.mts +8 -0
  39. package/dist/lib/utils/error-extraction.d.ts +8 -0
  40. package/dist/lib/utils/error-extraction.js +15 -0
  41. package/dist/lib/utils/error-extraction.mjs +15 -0
  42. package/dist/lib/version.d.mts +3 -3
  43. package/dist/lib/version.d.ts +3 -3
  44. package/dist/lib/version.js +3 -3
  45. package/dist/lib/version.mjs +3 -3
  46. package/docs/TYPE-SUMMARY.md +2 -2
  47. package/docs/llms.txt +2 -2
  48. package/package.json +1 -1
@@ -0,0 +1,30 @@
1
+ export type BrandDomainValidationCode = 'invalid_syntax' | 'not_registrable' | 'special_use_not_allowed';
2
+ export declare class BrandDomainValidationError extends Error {
3
+ readonly code: BrandDomainValidationCode;
4
+ readonly domain: string;
5
+ constructor(code: BrandDomainValidationCode, domain: string);
6
+ }
7
+ export interface ValidateBrandDomainOptions {
8
+ /**
9
+ * Admit the protocol's narrow development-name set: subdomains of
10
+ * `.localhost`, `.test`, `.example`, or `.invalid`, plus the reserved
11
+ * `example.com`, `example.net`, and `example.org` names. Default false.
12
+ *
13
+ * This option is deliberately explicit and is never inferred from
14
+ * `NODE_ENV`. Bare `localhost` remains invalid because BrandRef wire syntax
15
+ * always requires a dotted domain. `.local` remains forbidden because it
16
+ * participates in multicast DNS.
17
+ */
18
+ allowDevelopmentDomains?: boolean;
19
+ }
20
+ /**
21
+ * Validate and canonicalize a BrandRef/BrandKey domain.
22
+ *
23
+ * The JSON Schema enforces portable dotted wire syntax. This helper adds the
24
+ * runtime policy needed before brand discovery: a production name must have a
25
+ * registrable domain in the pinned ICANN+PRIVATE Public Suffix List and must
26
+ * not be an IANA special-use name.
27
+ */
28
+ export declare function validateBrandDomain(domain: string, options?: ValidateBrandDomainOptions): string;
29
+ export declare function isDevelopmentBrandDomain(domain: string): boolean;
30
+ export declare function isSpecialUseBrandDomain(domain: string): boolean;
@@ -0,0 +1,30 @@
1
+ export type BrandDomainValidationCode = 'invalid_syntax' | 'not_registrable' | 'special_use_not_allowed';
2
+ export declare class BrandDomainValidationError extends Error {
3
+ readonly code: BrandDomainValidationCode;
4
+ readonly domain: string;
5
+ constructor(code: BrandDomainValidationCode, domain: string);
6
+ }
7
+ export interface ValidateBrandDomainOptions {
8
+ /**
9
+ * Admit the protocol's narrow development-name set: subdomains of
10
+ * `.localhost`, `.test`, `.example`, or `.invalid`, plus the reserved
11
+ * `example.com`, `example.net`, and `example.org` names. Default false.
12
+ *
13
+ * This option is deliberately explicit and is never inferred from
14
+ * `NODE_ENV`. Bare `localhost` remains invalid because BrandRef wire syntax
15
+ * always requires a dotted domain. `.local` remains forbidden because it
16
+ * participates in multicast DNS.
17
+ */
18
+ allowDevelopmentDomains?: boolean;
19
+ }
20
+ /**
21
+ * Validate and canonicalize a BrandRef/BrandKey domain.
22
+ *
23
+ * The JSON Schema enforces portable dotted wire syntax. This helper adds the
24
+ * runtime policy needed before brand discovery: a production name must have a
25
+ * registrable domain in the pinned ICANN+PRIVATE Public Suffix List and must
26
+ * not be an IANA special-use name.
27
+ */
28
+ export declare function validateBrandDomain(domain: string, options?: ValidateBrandDomainOptions): string;
29
+ export declare function isDevelopmentBrandDomain(domain: string): boolean;
30
+ export declare function isSpecialUseBrandDomain(domain: string): boolean;
@@ -0,0 +1,109 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var domain_exports = {};
20
+ __export(domain_exports, {
21
+ BrandDomainValidationError: () => BrandDomainValidationError,
22
+ isDevelopmentBrandDomain: () => isDevelopmentBrandDomain,
23
+ isSpecialUseBrandDomain: () => isSpecialUseBrandDomain,
24
+ validateBrandDomain: () => validateBrandDomain
25
+ });
26
+ module.exports = __toCommonJS(domain_exports);
27
+ var import_tldts = require("tldts");
28
+ var import_canonicalize = require('../signing/agent-resolver/canonicalize.js');
29
+ const DOTTED_WIRE_DOMAIN = /^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)+$/;
30
+ const DEVELOPMENT_SUFFIXES = ["localhost", "test", "example", "invalid"];
31
+ const DEVELOPMENT_EXACT_NAMES = /* @__PURE__ */ new Set(["example.com", "example.net", "example.org"]);
32
+ const SPECIAL_USE_SUFFIXES = [
33
+ "alt",
34
+ "6tisch.arpa",
35
+ "eap.arpa",
36
+ "eap-noob.arpa",
37
+ "home.arpa",
38
+ "in-addr.arpa",
39
+ "ip6.arpa",
40
+ "ipv4only.arpa",
41
+ "resolver.arpa",
42
+ "service.arpa",
43
+ "example",
44
+ "example.com",
45
+ "example.net",
46
+ "example.org",
47
+ "invalid",
48
+ "local",
49
+ "localhost",
50
+ "onion",
51
+ "test"
52
+ ];
53
+ class BrandDomainValidationError extends Error {
54
+ constructor(code, domain) {
55
+ const messages = {
56
+ invalid_syntax: "Brand domain must be a bare, lowercase-compatible dotted hostname",
57
+ not_registrable: "Brand domain must have a registrable public or private-suffix domain",
58
+ special_use_not_allowed: "IANA special-use brand domain is not allowed in production"
59
+ };
60
+ super(messages[code]);
61
+ this.code = code;
62
+ this.domain = domain;
63
+ this.name = "BrandDomainValidationError";
64
+ }
65
+ code;
66
+ domain;
67
+ }
68
+ function validateBrandDomain(domain, options = {}) {
69
+ if (typeof domain !== "string" || domain.length === 0 || /[\s/:@?#]/.test(domain)) {
70
+ throw new BrandDomainValidationError("invalid_syntax", domain);
71
+ }
72
+ let canonical;
73
+ try {
74
+ canonical = (0, import_canonicalize.canonicalizeHost)(domain);
75
+ } catch {
76
+ throw new BrandDomainValidationError("invalid_syntax", domain);
77
+ }
78
+ if (!DOTTED_WIRE_DOMAIN.test(canonical)) {
79
+ throw new BrandDomainValidationError("invalid_syntax", domain);
80
+ }
81
+ const developmentName = isDevelopmentBrandDomain(canonical);
82
+ if (developmentName && options.allowDevelopmentDomains === true) return canonical;
83
+ const parsed = (0, import_tldts.parse)(canonical, {
84
+ allowPrivateDomains: true,
85
+ detectSpecialUse: true,
86
+ extractHostname: false
87
+ });
88
+ if (parsed.isSpecialUse || developmentName || isSpecialUseBrandDomain(canonical)) {
89
+ throw new BrandDomainValidationError("special_use_not_allowed", domain);
90
+ }
91
+ if (parsed.isIp || !parsed.domain || !parsed.isIcann && !parsed.isPrivate) {
92
+ throw new BrandDomainValidationError("not_registrable", domain);
93
+ }
94
+ return canonical;
95
+ }
96
+ function isDevelopmentBrandDomain(domain) {
97
+ if (DEVELOPMENT_EXACT_NAMES.has(domain)) return true;
98
+ return DEVELOPMENT_SUFFIXES.some((suffix) => domain.endsWith(`.${suffix}`));
99
+ }
100
+ function isSpecialUseBrandDomain(domain) {
101
+ return SPECIAL_USE_SUFFIXES.some((suffix) => domain === suffix || domain.endsWith(`.${suffix}`));
102
+ }
103
+ // Annotate the CommonJS export names for ESM import in node:
104
+ 0 && (module.exports = {
105
+ BrandDomainValidationError,
106
+ isDevelopmentBrandDomain,
107
+ isSpecialUseBrandDomain,
108
+ validateBrandDomain
109
+ });
@@ -0,0 +1,82 @@
1
+ import { parse as parseTld } from "tldts";
2
+ import { canonicalizeHost } from "../signing/agent-resolver/canonicalize.mjs";
3
+ const DOTTED_WIRE_DOMAIN = /^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)+$/;
4
+ const DEVELOPMENT_SUFFIXES = ["localhost", "test", "example", "invalid"];
5
+ const DEVELOPMENT_EXACT_NAMES = /* @__PURE__ */ new Set(["example.com", "example.net", "example.org"]);
6
+ const SPECIAL_USE_SUFFIXES = [
7
+ "alt",
8
+ "6tisch.arpa",
9
+ "eap.arpa",
10
+ "eap-noob.arpa",
11
+ "home.arpa",
12
+ "in-addr.arpa",
13
+ "ip6.arpa",
14
+ "ipv4only.arpa",
15
+ "resolver.arpa",
16
+ "service.arpa",
17
+ "example",
18
+ "example.com",
19
+ "example.net",
20
+ "example.org",
21
+ "invalid",
22
+ "local",
23
+ "localhost",
24
+ "onion",
25
+ "test"
26
+ ];
27
+ class BrandDomainValidationError extends Error {
28
+ constructor(code, domain) {
29
+ const messages = {
30
+ invalid_syntax: "Brand domain must be a bare, lowercase-compatible dotted hostname",
31
+ not_registrable: "Brand domain must have a registrable public or private-suffix domain",
32
+ special_use_not_allowed: "IANA special-use brand domain is not allowed in production"
33
+ };
34
+ super(messages[code]);
35
+ this.code = code;
36
+ this.domain = domain;
37
+ this.name = "BrandDomainValidationError";
38
+ }
39
+ code;
40
+ domain;
41
+ }
42
+ function validateBrandDomain(domain, options = {}) {
43
+ if (typeof domain !== "string" || domain.length === 0 || /[\s/:@?#]/.test(domain)) {
44
+ throw new BrandDomainValidationError("invalid_syntax", domain);
45
+ }
46
+ let canonical;
47
+ try {
48
+ canonical = canonicalizeHost(domain);
49
+ } catch {
50
+ throw new BrandDomainValidationError("invalid_syntax", domain);
51
+ }
52
+ if (!DOTTED_WIRE_DOMAIN.test(canonical)) {
53
+ throw new BrandDomainValidationError("invalid_syntax", domain);
54
+ }
55
+ const developmentName = isDevelopmentBrandDomain(canonical);
56
+ if (developmentName && options.allowDevelopmentDomains === true) return canonical;
57
+ const parsed = parseTld(canonical, {
58
+ allowPrivateDomains: true,
59
+ detectSpecialUse: true,
60
+ extractHostname: false
61
+ });
62
+ if (parsed.isSpecialUse || developmentName || isSpecialUseBrandDomain(canonical)) {
63
+ throw new BrandDomainValidationError("special_use_not_allowed", domain);
64
+ }
65
+ if (parsed.isIp || !parsed.domain || !parsed.isIcann && !parsed.isPrivate) {
66
+ throw new BrandDomainValidationError("not_registrable", domain);
67
+ }
68
+ return canonical;
69
+ }
70
+ function isDevelopmentBrandDomain(domain) {
71
+ if (DEVELOPMENT_EXACT_NAMES.has(domain)) return true;
72
+ return DEVELOPMENT_SUFFIXES.some((suffix) => domain.endsWith(`.${suffix}`));
73
+ }
74
+ function isSpecialUseBrandDomain(domain) {
75
+ return SPECIAL_USE_SUFFIXES.some((suffix) => domain === suffix || domain.endsWith(`.${suffix}`));
76
+ }
77
+ export {
78
+ BrandDomainValidationError,
79
+ isDevelopmentBrandDomain,
80
+ isSpecialUseBrandDomain,
81
+ validateBrandDomain
82
+ };
@@ -1,5 +1,7 @@
1
1
  import type { RegistryClient, SaveBrandResponse } from '../registry/index.mjs';
2
2
  import type { GetBrandIdentitySuccess } from '../types/core.generated.mjs';
3
+ export { BrandDomainValidationError, isDevelopmentBrandDomain, validateBrandDomain } from './domain.mjs';
4
+ export type { BrandDomainValidationCode, ValidateBrandDomainOptions } from './domain.mjs';
3
5
  export type BrandJsonRecord = Record<string, unknown>;
4
6
  type ProtocolBrandLogo = NonNullable<GetBrandIdentitySuccess['logos']>[number];
5
7
  export type BrandWebsiteAliasRelationship = 'owned';
@@ -148,4 +150,3 @@ export declare function checkLogoSlotCoverage(brandJsonOrBrand: BrandJsonRecord,
148
150
  export declare function updateBrandJsonFromMappings(options: UpdateBrandJsonFromMappingsOptions): Promise<UpdateBrandJsonFromMappingsResult>;
149
151
  export declare function extractBrandWebsiteAliases(brandJsonOrBrand: BrandJsonRecord, options?: ExtractBrandWebsiteAliasesOptions): BrandWebsiteAlias[];
150
152
  export declare function extractBrandWebsiteAliasDomains(brandJsonOrBrand: BrandJsonRecord, options?: ExtractBrandWebsiteAliasesOptions): string[];
151
- export {};
@@ -1,5 +1,7 @@
1
1
  import type { RegistryClient, SaveBrandResponse } from '../registry';
2
2
  import type { GetBrandIdentitySuccess } from '../types/core.generated';
3
+ export { BrandDomainValidationError, isDevelopmentBrandDomain, validateBrandDomain } from './domain';
4
+ export type { BrandDomainValidationCode, ValidateBrandDomainOptions } from './domain';
3
5
  export type BrandJsonRecord = Record<string, unknown>;
4
6
  type ProtocolBrandLogo = NonNullable<GetBrandIdentitySuccess['logos']>[number];
5
7
  export type BrandWebsiteAliasRelationship = 'owned';
@@ -148,4 +150,3 @@ export declare function checkLogoSlotCoverage(brandJsonOrBrand: BrandJsonRecord,
148
150
  export declare function updateBrandJsonFromMappings(options: UpdateBrandJsonFromMappingsOptions): Promise<UpdateBrandJsonFromMappingsResult>;
149
151
  export declare function extractBrandWebsiteAliases(brandJsonOrBrand: BrandJsonRecord, options?: ExtractBrandWebsiteAliasesOptions): BrandWebsiteAlias[];
150
152
  export declare function extractBrandWebsiteAliasDomains(brandJsonOrBrand: BrandJsonRecord, options?: ExtractBrandWebsiteAliasesOptions): string[];
151
- export {};
@@ -18,16 +18,20 @@ var __copyProps = (to, from, except, desc) => {
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
19
  var brand_exports = {};
20
20
  __export(brand_exports, {
21
+ BrandDomainValidationError: () => import_domain.BrandDomainValidationError,
21
22
  COMMON_LOGO_SLOTS: () => COMMON_LOGO_SLOTS,
22
23
  applyBrandAssetMappings: () => applyBrandAssetMappings,
23
24
  checkLogoSlotCoverage: () => checkLogoSlotCoverage,
24
25
  extractBrandWebsiteAliasDomains: () => extractBrandWebsiteAliasDomains,
25
26
  extractBrandWebsiteAliases: () => extractBrandWebsiteAliases,
27
+ isDevelopmentBrandDomain: () => import_domain.isDevelopmentBrandDomain,
26
28
  selectLogoForSlot: () => selectLogoForSlot,
27
29
  updateBrandJsonFromMappings: () => updateBrandJsonFromMappings,
28
- validateBrandAssetMappings: () => validateBrandAssetMappings
30
+ validateBrandAssetMappings: () => validateBrandAssetMappings,
31
+ validateBrandDomain: () => import_domain.validateBrandDomain
29
32
  });
30
33
  module.exports = __toCommonJS(brand_exports);
34
+ var import_domain = require('./domain.js');
31
35
  const COMMON_LOGO_SLOTS = [
32
36
  "logo_card_light",
33
37
  "logo_card_dark",
@@ -464,12 +468,15 @@ function readLocalizedName(value) {
464
468
  }
465
469
  // Annotate the CommonJS export names for ESM import in node:
466
470
  0 && (module.exports = {
471
+ BrandDomainValidationError,
467
472
  COMMON_LOGO_SLOTS,
468
473
  applyBrandAssetMappings,
469
474
  checkLogoSlotCoverage,
470
475
  extractBrandWebsiteAliasDomains,
471
476
  extractBrandWebsiteAliases,
477
+ isDevelopmentBrandDomain,
472
478
  selectLogoForSlot,
473
479
  updateBrandJsonFromMappings,
474
- validateBrandAssetMappings
480
+ validateBrandAssetMappings,
481
+ validateBrandDomain
475
482
  });
@@ -1,3 +1,4 @@
1
+ import { BrandDomainValidationError, isDevelopmentBrandDomain, validateBrandDomain } from "./domain.mjs";
1
2
  const COMMON_LOGO_SLOTS = [
2
3
  "logo_card_light",
3
4
  "logo_card_dark",
@@ -433,12 +434,15 @@ function readLocalizedName(value) {
433
434
  return void 0;
434
435
  }
435
436
  export {
437
+ BrandDomainValidationError,
436
438
  COMMON_LOGO_SLOTS,
437
439
  applyBrandAssetMappings,
438
440
  checkLogoSlotCoverage,
439
441
  extractBrandWebsiteAliasDomains,
440
442
  extractBrandWebsiteAliases,
443
+ isDevelopmentBrandDomain,
441
444
  selectLogoForSlot,
442
445
  updateBrandJsonFromMappings,
443
- validateBrandAssetMappings
446
+ validateBrandAssetMappings,
447
+ validateBrandDomain
444
448
  };
@@ -345,6 +345,20 @@ export interface AdcpErrorInfo {
345
345
  * the field, `'enum'` → pick a valid value, `'type'` → fix the value type.
346
346
  */
347
347
  issues?: AdcpValidationIssue[];
348
+ /**
349
+ * Buyer-actionable classification of the failure. Present when the enclosing
350
+ * `code`/`message` is too coarse or carries producer-internal context that
351
+ * must not cross the buyer trust boundary. `code` reuses the standard error
352
+ * vocabulary; `message` is buyer-safe by spec — no vendor identifiers,
353
+ * ad-server type names, internal object names, internal IDs, or stack traces
354
+ * — so it may be rendered directly to a buyer UI. When present, the
355
+ * enclosing `recovery` classifies the buyer-actionable reason. See
356
+ * `core/error.json`'s `buyer_reason` field for the normative contract.
357
+ */
358
+ buyer_reason?: {
359
+ code: string;
360
+ message: string;
361
+ };
348
362
  /** True when the SDK inferred this error from unstructured text (L1 compliance) */
349
363
  synthetic?: boolean;
350
364
  }
@@ -345,6 +345,20 @@ export interface AdcpErrorInfo {
345
345
  * the field, `'enum'` → pick a valid value, `'type'` → fix the value type.
346
346
  */
347
347
  issues?: AdcpValidationIssue[];
348
+ /**
349
+ * Buyer-actionable classification of the failure. Present when the enclosing
350
+ * `code`/`message` is too coarse or carries producer-internal context that
351
+ * must not cross the buyer trust boundary. `code` reuses the standard error
352
+ * vocabulary; `message` is buyer-safe by spec — no vendor identifiers,
353
+ * ad-server type names, internal object names, internal IDs, or stack traces
354
+ * — so it may be rendered directly to a buyer UI. When present, the
355
+ * enclosing `recovery` classifies the buyer-actionable reason. See
356
+ * `core/error.json`'s `buyer_reason` field for the normative contract.
357
+ */
358
+ buyer_reason?: {
359
+ code: string;
360
+ message: string;
361
+ };
348
362
  /** True when the SDK inferred this error from unstructured text (L1 compliance) */
349
363
  synthetic?: boolean;
350
364
  }
@@ -2,8 +2,8 @@ export { RegistryClient, RegistryRequestError, isRegistryRequestError, RegistryS
2
2
  export type { RegistrySyncConfig, RegistrySyncState, RegistrySyncTransport, RegistrySyncEvents, AgentFilter, RegistrySyncProperty, CursorStore, PropertyRegistryConfig, FeedStreamQuery, FeedStreamMessage, FeedHeartbeat, FeedStreamErrorData, OpenFeedStreamOptions, FeedFreshness, } from './registry/index.mjs';
3
3
  export { openFeedStream, parseSseStream, sanitizeStreamText, DEFAULT_MAX_SSE_FRAME_BYTES, FeedStreamError, FeedStreamUnsupportedError, FeedStreamCursorExpiredError, FeedStreamHttpError, FeedStreamParseError, } from './registry/index.mjs';
4
4
  export type { ResolvedBrand, LookupBrandOptions, ResolvedProperty as ResolvedRegistryProperty, PropertyInfo, RegistryClientConfig, SaveBrandRequest, SaveBrandResponse, BrandLogoReviewStatus, ApprovedBrandLogoAsset, PendingBrandLogoAsset, ReviewedBrandLogoAsset, BrandLogoAsset, ListBrandLogosOptions, ListBrandLogosResponse, SaveBrandLogoInput, SaveBrandLogoResponse, UploadBrandLogoInput, UploadBrandLogoResponse, SavePropertyIdentity, RegistryPropertyIdentity, SavePropertyRequest, SavePropertyResponse, ResolveIdentifiersRequest, ResolveIdentifiersResponse, FileCatalogDisputeRequest, FileCatalogDisputeResponse, GetCatalogDisputeResponse, BrandRegistryItem, PropertyRegistryItem, ValidationResult as RegistryValidationResult, FederatedAgentWithDetails, FederatedPublisher, DomainLookupResult, ListBrandsOptions, ListBrandsResponse, GetBrandJsonResponse, ListOptions, ListAgentsOptions, ListAgentsResponse, ListPublishersResponse, ValidateAdagentsRequest, ValidateAdagentsResponse, CreateAdagentsRequest, CreateAdagentsResponse, AdagentsAuthorizedAgent, AdagentsCatalogFormat, AdagentsPlacementDefinition, AdagentsPlacementFormatReference, AdagentsPlacementFormatOption, AdagentsPlacementTag, CreatedAdagentsJson, CommunityMirrorAdagentsConfig, CreateCommunityMirrorAdagentsConfig, CommunityMirrorAdagentsCatalog, PublishCommunityMirrorAdagentsResponse, CommunityMirrorAdagentsSummary, ListCommunityMirrorAdagentsResponse, GetCommunityMirrorAdagentsResponse, PublishCommunityMirrorAdagentsRequest, PublishCommunityMirrorAdagentsError, DeleteCommunityMirrorAdagentsResponse, PublisherPropertySelector, CompanySearchResult, FindCompanyResult, ManagerRevalidationRequest, ManagerRevalidationResponse, ListPoliciesQuery, ListPoliciesResponse, ResolvePolicyQuery, ResolvePolicyResponse, ResolvePoliciesBulkRequest, ResolvePoliciesBulkResponse, GetPolicyHistoryQuery, GetPolicyHistoryResponse, SavePolicyRequest, SavePolicyResponse, GetBrandHistoryQuery, GetBrandHistoryResponse, GetPropertyHistoryQuery, GetPropertyHistoryResponse, RegistryFeedEvent, AgentEventPayload, PropertyEventPayload, CollectionEventPayload, AuthorizationEventPayload, PublisherEventPayload, BrandEventPayload, CatalogBrowseResponse, CatalogBrowseEntry, CatalogSyncResponse, CatalogSyncEntry, AgentCompliance, AgentComplianceDetail, StoryboardStatus, OperatorLookupResult, PublisherLookupResult, ComplianceChangedPayload, GetAgentStoryboardStatusResponse, GetAgentStoryboardStatusBulkResponse, } from './registry/index.mjs';
5
- export { COMMON_LOGO_SLOTS, applyBrandAssetMappings, checkLogoSlotCoverage, extractBrandWebsiteAliasDomains, extractBrandWebsiteAliases, selectLogoForSlot, updateBrandJsonFromMappings, validateBrandAssetMappings, } from './brand/index.mjs';
6
- export type { AppliedBrandAssetMapping, ApplyBrandAssetMappingsOptions, ApplyBrandAssetMappingsResult, BrandAssetCandidate, BrandAssetCropBox, BrandAssetExtractionMethod, BrandAssetMapping, BrandAssetMappingIssue, BrandAssetMappingTarget, BrandAssetMappingValidationResult, BrandAssetReviewStatus, BrandWebsiteAlias, BrandWebsiteAliasRelationship, BrandWebsiteAliasSource, BrandJsonRecord, BrandLogoBackground, BrandLogoOrientation, BrandLogoProposal, BrandLogoVariant, ExtractBrandWebsiteAliasesOptions, LogoSelectionOptions, LogoSlotCoverage, LogoSlotCoverageOptions, ResolveBrandAssetUrl, SkippedBrandAssetMapping, UpdateBrandJsonFromMappingsOptions, UpdateBrandJsonFromMappingsResult, } from './brand/index.mjs';
5
+ export { COMMON_LOGO_SLOTS, BrandDomainValidationError, applyBrandAssetMappings, checkLogoSlotCoverage, extractBrandWebsiteAliasDomains, extractBrandWebsiteAliases, isDevelopmentBrandDomain, selectLogoForSlot, updateBrandJsonFromMappings, validateBrandAssetMappings, validateBrandDomain, } from './brand/index.mjs';
6
+ export type { AppliedBrandAssetMapping, ApplyBrandAssetMappingsOptions, ApplyBrandAssetMappingsResult, BrandAssetCandidate, BrandAssetCropBox, BrandAssetExtractionMethod, BrandAssetMapping, BrandAssetMappingIssue, BrandAssetMappingTarget, BrandAssetMappingValidationResult, BrandAssetReviewStatus, BrandWebsiteAlias, BrandWebsiteAliasRelationship, BrandWebsiteAliasSource, BrandJsonRecord, BrandDomainValidationCode, BrandLogoBackground, BrandLogoOrientation, BrandLogoProposal, BrandLogoVariant, ExtractBrandWebsiteAliasesOptions, LogoSelectionOptions, LogoSlotCoverage, LogoSlotCoverageOptions, ResolveBrandAssetUrl, SkippedBrandAssetMapping, UpdateBrandJsonFromMappingsOptions, UpdateBrandJsonFromMappingsResult, ValidateBrandDomainOptions, } from './brand/index.mjs';
7
7
  export { PropertyIndex, getPropertyIndex, resetPropertyIndex, type PropertyMatch, type AgentAuthorization, } from './discovery/property-index.mjs';
8
8
  export { PropertyCrawler, type AgentInfo, type CrawlResult, type PropertyCrawlerConfig, } from './discovery/property-crawler.mjs';
9
9
  export { NetworkConsistencyChecker, type NetworkConsistencyCheckerConfig, type NetworkCheckReport, type CheckSummary, type CheckProgress, type OrphanedPointer, type StalePointer, type MissingPointer, type SchemaError, type AgentHealthResult, type DomainDetail, type DomainStatus, } from './discovery/network-consistency-checker.mjs';
@@ -2,8 +2,8 @@ export { RegistryClient, RegistryRequestError, isRegistryRequestError, RegistryS
2
2
  export type { RegistrySyncConfig, RegistrySyncState, RegistrySyncTransport, RegistrySyncEvents, AgentFilter, RegistrySyncProperty, CursorStore, PropertyRegistryConfig, FeedStreamQuery, FeedStreamMessage, FeedHeartbeat, FeedStreamErrorData, OpenFeedStreamOptions, FeedFreshness, } from './registry';
3
3
  export { openFeedStream, parseSseStream, sanitizeStreamText, DEFAULT_MAX_SSE_FRAME_BYTES, FeedStreamError, FeedStreamUnsupportedError, FeedStreamCursorExpiredError, FeedStreamHttpError, FeedStreamParseError, } from './registry';
4
4
  export type { ResolvedBrand, LookupBrandOptions, ResolvedProperty as ResolvedRegistryProperty, PropertyInfo, RegistryClientConfig, SaveBrandRequest, SaveBrandResponse, BrandLogoReviewStatus, ApprovedBrandLogoAsset, PendingBrandLogoAsset, ReviewedBrandLogoAsset, BrandLogoAsset, ListBrandLogosOptions, ListBrandLogosResponse, SaveBrandLogoInput, SaveBrandLogoResponse, UploadBrandLogoInput, UploadBrandLogoResponse, SavePropertyIdentity, RegistryPropertyIdentity, SavePropertyRequest, SavePropertyResponse, ResolveIdentifiersRequest, ResolveIdentifiersResponse, FileCatalogDisputeRequest, FileCatalogDisputeResponse, GetCatalogDisputeResponse, BrandRegistryItem, PropertyRegistryItem, ValidationResult as RegistryValidationResult, FederatedAgentWithDetails, FederatedPublisher, DomainLookupResult, ListBrandsOptions, ListBrandsResponse, GetBrandJsonResponse, ListOptions, ListAgentsOptions, ListAgentsResponse, ListPublishersResponse, ValidateAdagentsRequest, ValidateAdagentsResponse, CreateAdagentsRequest, CreateAdagentsResponse, AdagentsAuthorizedAgent, AdagentsCatalogFormat, AdagentsPlacementDefinition, AdagentsPlacementFormatReference, AdagentsPlacementFormatOption, AdagentsPlacementTag, CreatedAdagentsJson, CommunityMirrorAdagentsConfig, CreateCommunityMirrorAdagentsConfig, CommunityMirrorAdagentsCatalog, PublishCommunityMirrorAdagentsResponse, CommunityMirrorAdagentsSummary, ListCommunityMirrorAdagentsResponse, GetCommunityMirrorAdagentsResponse, PublishCommunityMirrorAdagentsRequest, PublishCommunityMirrorAdagentsError, DeleteCommunityMirrorAdagentsResponse, PublisherPropertySelector, CompanySearchResult, FindCompanyResult, ManagerRevalidationRequest, ManagerRevalidationResponse, ListPoliciesQuery, ListPoliciesResponse, ResolvePolicyQuery, ResolvePolicyResponse, ResolvePoliciesBulkRequest, ResolvePoliciesBulkResponse, GetPolicyHistoryQuery, GetPolicyHistoryResponse, SavePolicyRequest, SavePolicyResponse, GetBrandHistoryQuery, GetBrandHistoryResponse, GetPropertyHistoryQuery, GetPropertyHistoryResponse, RegistryFeedEvent, AgentEventPayload, PropertyEventPayload, CollectionEventPayload, AuthorizationEventPayload, PublisherEventPayload, BrandEventPayload, CatalogBrowseResponse, CatalogBrowseEntry, CatalogSyncResponse, CatalogSyncEntry, AgentCompliance, AgentComplianceDetail, StoryboardStatus, OperatorLookupResult, PublisherLookupResult, ComplianceChangedPayload, GetAgentStoryboardStatusResponse, GetAgentStoryboardStatusBulkResponse, } from './registry';
5
- export { COMMON_LOGO_SLOTS, applyBrandAssetMappings, checkLogoSlotCoverage, extractBrandWebsiteAliasDomains, extractBrandWebsiteAliases, selectLogoForSlot, updateBrandJsonFromMappings, validateBrandAssetMappings, } from './brand';
6
- export type { AppliedBrandAssetMapping, ApplyBrandAssetMappingsOptions, ApplyBrandAssetMappingsResult, BrandAssetCandidate, BrandAssetCropBox, BrandAssetExtractionMethod, BrandAssetMapping, BrandAssetMappingIssue, BrandAssetMappingTarget, BrandAssetMappingValidationResult, BrandAssetReviewStatus, BrandWebsiteAlias, BrandWebsiteAliasRelationship, BrandWebsiteAliasSource, BrandJsonRecord, BrandLogoBackground, BrandLogoOrientation, BrandLogoProposal, BrandLogoVariant, ExtractBrandWebsiteAliasesOptions, LogoSelectionOptions, LogoSlotCoverage, LogoSlotCoverageOptions, ResolveBrandAssetUrl, SkippedBrandAssetMapping, UpdateBrandJsonFromMappingsOptions, UpdateBrandJsonFromMappingsResult, } from './brand';
5
+ export { COMMON_LOGO_SLOTS, BrandDomainValidationError, applyBrandAssetMappings, checkLogoSlotCoverage, extractBrandWebsiteAliasDomains, extractBrandWebsiteAliases, isDevelopmentBrandDomain, selectLogoForSlot, updateBrandJsonFromMappings, validateBrandAssetMappings, validateBrandDomain, } from './brand';
6
+ export type { AppliedBrandAssetMapping, ApplyBrandAssetMappingsOptions, ApplyBrandAssetMappingsResult, BrandAssetCandidate, BrandAssetCropBox, BrandAssetExtractionMethod, BrandAssetMapping, BrandAssetMappingIssue, BrandAssetMappingTarget, BrandAssetMappingValidationResult, BrandAssetReviewStatus, BrandWebsiteAlias, BrandWebsiteAliasRelationship, BrandWebsiteAliasSource, BrandJsonRecord, BrandDomainValidationCode, BrandLogoBackground, BrandLogoOrientation, BrandLogoProposal, BrandLogoVariant, ExtractBrandWebsiteAliasesOptions, LogoSelectionOptions, LogoSlotCoverage, LogoSlotCoverageOptions, ResolveBrandAssetUrl, SkippedBrandAssetMapping, UpdateBrandJsonFromMappingsOptions, UpdateBrandJsonFromMappingsResult, ValidateBrandDomainOptions, } from './brand';
7
7
  export { PropertyIndex, getPropertyIndex, resetPropertyIndex, type PropertyMatch, type AgentAuthorization, } from './discovery/property-index';
8
8
  export { PropertyCrawler, type AgentInfo, type CrawlResult, type PropertyCrawlerConfig, } from './discovery/property-crawler';
9
9
  export { NetworkConsistencyChecker, type NetworkConsistencyCheckerConfig, type NetworkCheckReport, type CheckSummary, type CheckProgress, type OrphanedPointer, type StalePointer, type MissingPointer, type SchemaError, type AgentHealthResult, type DomainDetail, type DomainStatus, } from './discovery/network-consistency-checker';
package/dist/lib/index.js CHANGED
@@ -46,6 +46,7 @@ __export(index_exports, {
46
46
  AuthenticationCredentialsRejectedError: () => import_errors.AuthenticationCredentialsRejectedError,
47
47
  AuthenticationRequiredError: () => import_errors.AuthenticationRequiredError,
48
48
  BRAND_RIGHTS_TOOLS: () => import_capabilities.BRAND_RIGHTS_TOOLS,
49
+ BrandDomainValidationError: () => import_brand.BrandDomainValidationError,
49
50
  BrandJsonSchema: () => import_wellknown_schemas.BrandJsonSchema,
50
51
  BuyerRetryPolicy: () => import_buyer_retry_policy.BuyerRetryPolicy,
51
52
  CATALOG_MACRO_VECTORS: () => import_substitution.CATALOG_MACRO_VECTORS,
@@ -438,6 +439,7 @@ __export(index_exports, {
438
439
  isCreateMediaBuyInputRequired: () => import_typeGuards.isCreateMediaBuyInputRequired,
439
440
  isCreateMediaBuySubmitted: () => import_typeGuards.isCreateMediaBuySubmitted,
440
441
  isCreateMediaBuyWorking: () => import_typeGuards.isCreateMediaBuyWorking,
442
+ isDevelopmentBrandDomain: () => import_brand.isDevelopmentBrandDomain,
441
443
  isEnvSecretReference: () => import_oauth4.isEnvSecretReference,
442
444
  isErrorOfType: () => import_errors.isErrorOfType,
443
445
  isGetProductsCompleted: () => import_typeGuards.isGetProductsCompleted,
@@ -666,6 +668,7 @@ __export(index_exports, {
666
668
  validateAdcpVersionWire: () => import_schema_loader.validateAdcpVersionWire,
667
669
  validateAgentUrl: () => import_validation.validateAgentUrl,
668
670
  validateBrandAssetMappings: () => import_brand.validateBrandAssetMappings,
671
+ validateBrandDomain: () => import_brand.validateBrandDomain,
669
672
  validateGetProductsCacheScope: () => import_get_products_cache_scope.validateGetProductsCacheScope,
670
673
  validateGovernancePlan: () => import_governance.validateGovernancePlan,
671
674
  validateProductsAgainstPropertyPolicy: () => import_media_buy.validateProductsAgainstPropertyPolicy,
@@ -837,6 +840,7 @@ function createAdCPClientFromEnv() {
837
840
  AuthenticationCredentialsRejectedError,
838
841
  AuthenticationRequiredError,
839
842
  BRAND_RIGHTS_TOOLS,
843
+ BrandDomainValidationError,
840
844
  BrandJsonSchema,
841
845
  BuyerRetryPolicy,
842
846
  CATALOG_MACRO_VECTORS,
@@ -1229,6 +1233,7 @@ function createAdCPClientFromEnv() {
1229
1233
  isCreateMediaBuyInputRequired,
1230
1234
  isCreateMediaBuySubmitted,
1231
1235
  isCreateMediaBuyWorking,
1236
+ isDevelopmentBrandDomain,
1232
1237
  isEnvSecretReference,
1233
1238
  isErrorOfType,
1234
1239
  isGetProductsCompleted,
@@ -1457,6 +1462,7 @@ function createAdCPClientFromEnv() {
1457
1462
  validateAdcpVersionWire,
1458
1463
  validateAgentUrl,
1459
1464
  validateBrandAssetMappings,
1465
+ validateBrandDomain,
1460
1466
  validateGetProductsCacheScope,
1461
1467
  validateGovernancePlan,
1462
1468
  validateProductsAgainstPropertyPolicy,
@@ -21,13 +21,16 @@ import {
21
21
  } from "./registry/index.mjs";
22
22
  import {
23
23
  COMMON_LOGO_SLOTS,
24
+ BrandDomainValidationError,
24
25
  applyBrandAssetMappings,
25
26
  checkLogoSlotCoverage,
26
27
  extractBrandWebsiteAliasDomains,
27
28
  extractBrandWebsiteAliases,
29
+ isDevelopmentBrandDomain,
28
30
  selectLogoForSlot,
29
31
  updateBrandJsonFromMappings,
30
- validateBrandAssetMappings
32
+ validateBrandAssetMappings,
33
+ validateBrandDomain
31
34
  } from "./brand/index.mjs";
32
35
  import {
33
36
  PropertyIndex,
@@ -793,6 +796,7 @@ export {
793
796
  AuthenticationCredentialsRejectedError,
794
797
  AuthenticationRequiredError,
795
798
  BRAND_RIGHTS_TOOLS,
799
+ BrandDomainValidationError,
796
800
  BrandJsonSchema,
797
801
  BuyerRetryPolicy,
798
802
  CATALOG_MACRO_VECTORS,
@@ -1185,6 +1189,7 @@ export {
1185
1189
  isCreateMediaBuyInputRequired,
1186
1190
  isCreateMediaBuySubmitted,
1187
1191
  isCreateMediaBuyWorking,
1192
+ isDevelopmentBrandDomain,
1188
1193
  isEnvSecretReference,
1189
1194
  isErrorOfType,
1190
1195
  isGetProductsCompleted,
@@ -1413,6 +1418,7 @@ export {
1413
1418
  validateAdcpVersionWire,
1414
1419
  validateAgentUrl,
1415
1420
  validateBrandAssetMappings,
1421
+ validateBrandDomain,
1416
1422
  validateGetProductsCacheScope,
1417
1423
  validateGovernancePlan,
1418
1424
  validateProductsAgainstPropertyPolicy,
@@ -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-09-07T02:22:39.478Z"
7
+ "synced_at": "2026-09-08T23:08:47.294Z"
8
8
  }
@@ -25,6 +25,7 @@ __export(create_adcp_server_exports, {
25
25
  ADCP_SIGNED_REQUESTS_STATE: () => ADCP_SIGNED_REQUESTS_STATE,
26
26
  COMPACT_MEDIA_BUY_MUTATION_TOOLS: () => COMPACT_MEDIA_BUY_MUTATION_TOOLS,
27
27
  MEDIA_BUY_MCP_TOOL_PROFILE: () => MEDIA_BUY_MCP_TOOL_PROFILE,
28
+ __unstable__projectThrownAdcpError: () => __unstable__projectThrownAdcpError,
28
29
  createAdcpServer: () => createAdcpServer,
29
30
  requireSessionKey: () => requireSessionKey
30
31
  });
@@ -261,6 +262,9 @@ function hasUncacheableSyncAccountRejection(response) {
261
262
  function shouldCacheIdempotencyResponse(response) {
262
263
  return !isErrorResponse(response) && !hasUncacheableSyncAccountRejection(response);
263
264
  }
265
+ function __unstable__projectThrownAdcpError(err) {
266
+ return projectThrownAdcpError(err);
267
+ }
264
268
  function projectThrownAdcpError(err) {
265
269
  return (0, import_errors2.adcpError)(err.code, {
266
270
  recovery: err.recovery,
@@ -268,7 +272,8 @@ function projectThrownAdcpError(err) {
268
272
  ...err.field !== void 0 && { field: err.field },
269
273
  ...err.suggestion !== void 0 && { suggestion: err.suggestion },
270
274
  ...err.retry_after !== void 0 && { retry_after: err.retry_after },
271
- ...err.details !== void 0 && { details: err.details }
275
+ ...err.details !== void 0 && { details: err.details },
276
+ ...err.buyer_reason !== void 0 && { buyer_reason: err.buyer_reason }
272
277
  });
273
278
  }
274
279
  function isThrownAdcpError(value) {
@@ -1057,7 +1062,7 @@ function sanitizePayloadError(value) {
1057
1062
  message: typeof safe.message === "string" ? safe.message : "operation failed",
1058
1063
  recovery: import_error_codes.STANDARD_ERROR_CODES[code].recovery
1059
1064
  };
1060
- for (const key of ["field", "suggestion", "retry_after", "issues"]) {
1065
+ for (const key of ["field", "suggestion", "retry_after", "issues", "buyer_reason"]) {
1061
1066
  if (safe[key] !== void 0) projected[key] = safe[key];
1062
1067
  }
1063
1068
  if (safe.details !== void 0) {
@@ -1120,7 +1125,8 @@ const PAYLOAD_ERROR_FIELDS = /* @__PURE__ */ new Set([
1120
1125
  "suggestion",
1121
1126
  "retry_after",
1122
1127
  "issues",
1123
- "details"
1128
+ "details",
1129
+ "buyer_reason"
1124
1130
  ]);
1125
1131
  function projectEnvelopeToPayloadError(envelope) {
1126
1132
  const out = {};
@@ -4456,6 +4462,7 @@ function createAdcpServer(config) {
4456
4462
  ADCP_SIGNED_REQUESTS_STATE,
4457
4463
  COMPACT_MEDIA_BUY_MUTATION_TOOLS,
4458
4464
  MEDIA_BUY_MCP_TOOL_PROFILE,
4465
+ __unstable__projectThrownAdcpError,
4459
4466
  createAdcpServer,
4460
4467
  requireSessionKey
4461
4468
  });
@@ -331,6 +331,9 @@ function hasUncacheableSyncAccountRejection(response) {
331
331
  function shouldCacheIdempotencyResponse(response) {
332
332
  return !isErrorResponse(response) && !hasUncacheableSyncAccountRejection(response);
333
333
  }
334
+ function __unstable__projectThrownAdcpError(err) {
335
+ return projectThrownAdcpError(err);
336
+ }
334
337
  function projectThrownAdcpError(err) {
335
338
  return adcpError(err.code, {
336
339
  recovery: err.recovery,
@@ -338,7 +341,8 @@ function projectThrownAdcpError(err) {
338
341
  ...err.field !== void 0 && { field: err.field },
339
342
  ...err.suggestion !== void 0 && { suggestion: err.suggestion },
340
343
  ...err.retry_after !== void 0 && { retry_after: err.retry_after },
341
- ...err.details !== void 0 && { details: err.details }
344
+ ...err.details !== void 0 && { details: err.details },
345
+ ...err.buyer_reason !== void 0 && { buyer_reason: err.buyer_reason }
342
346
  });
343
347
  }
344
348
  function isThrownAdcpError(value) {
@@ -1127,7 +1131,7 @@ function sanitizePayloadError(value) {
1127
1131
  message: typeof safe.message === "string" ? safe.message : "operation failed",
1128
1132
  recovery: STANDARD_ERROR_CODES[code].recovery
1129
1133
  };
1130
- for (const key of ["field", "suggestion", "retry_after", "issues"]) {
1134
+ for (const key of ["field", "suggestion", "retry_after", "issues", "buyer_reason"]) {
1131
1135
  if (safe[key] !== void 0) projected[key] = safe[key];
1132
1136
  }
1133
1137
  if (safe.details !== void 0) {
@@ -1190,7 +1194,8 @@ const PAYLOAD_ERROR_FIELDS = /* @__PURE__ */ new Set([
1190
1194
  "suggestion",
1191
1195
  "retry_after",
1192
1196
  "issues",
1193
- "details"
1197
+ "details",
1198
+ "buyer_reason"
1194
1199
  ]);
1195
1200
  function projectEnvelopeToPayloadError(envelope) {
1196
1201
  const out = {};
@@ -4525,6 +4530,7 @@ export {
4525
4530
  ADCP_SIGNED_REQUESTS_STATE,
4526
4531
  COMPACT_MEDIA_BUY_MUTATION_TOOLS,
4527
4532
  MEDIA_BUY_MCP_TOOL_PROFILE,
4533
+ __unstable__projectThrownAdcpError,
4528
4534
  createAdcpServer,
4529
4535
  requireSessionKey
4530
4536
  };