@adcp/sdk 14.0.0-rc.32 → 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 (222) hide show
  1. package/bin/adcp-storyboard-summary.js +1 -0
  2. package/dist/lib/brand/domain.d.mts +30 -0
  3. package/dist/lib/brand/domain.d.ts +30 -0
  4. package/dist/lib/brand/domain.js +109 -0
  5. package/dist/lib/brand/domain.mjs +82 -0
  6. package/dist/lib/brand/index.d.mts +2 -1
  7. package/dist/lib/brand/index.d.ts +2 -1
  8. package/dist/lib/brand/index.js +9 -2
  9. package/dist/lib/brand/index.mjs +5 -1
  10. package/dist/lib/conformance/oracle.js +26 -6
  11. package/dist/lib/conformance/oracle.mjs +26 -6
  12. package/dist/lib/core/ConversationTypes.d.mts +14 -0
  13. package/dist/lib/core/ConversationTypes.d.ts +14 -0
  14. package/dist/lib/core/SingleAgentClient.js +7 -2
  15. package/dist/lib/core/SingleAgentClient.mjs +8 -3
  16. package/dist/lib/core/TaskExecutor.js +3 -0
  17. package/dist/lib/core/TaskExecutor.mjs +3 -0
  18. package/dist/lib/index.d.mts +3 -3
  19. package/dist/lib/index.d.ts +3 -3
  20. package/dist/lib/index.js +6 -0
  21. package/dist/lib/index.mjs +7 -1
  22. package/dist/lib/protocols/mcp-modern.d.mts +2 -0
  23. package/dist/lib/protocols/mcp-modern.d.ts +2 -0
  24. package/dist/lib/protocols/mcp-modern.js +7 -4
  25. package/dist/lib/protocols/mcp-modern.mjs +7 -4
  26. package/dist/lib/protocols/mcp.js +2 -1
  27. package/dist/lib/protocols/mcp.mjs +3 -2
  28. package/dist/lib/registry/types.generated.d.mts +1 -1
  29. package/dist/lib/registry/types.generated.d.ts +1 -1
  30. package/dist/lib/schemas-data/v2.5/_provenance.json +1 -1
  31. package/dist/lib/server/a2a-adapter.js +2 -3
  32. package/dist/lib/server/a2a-adapter.mjs +4 -4
  33. package/dist/lib/server/adcp-server.d.mts +11 -2
  34. package/dist/lib/server/adcp-server.d.ts +11 -2
  35. package/dist/lib/server/adcp-server.js +3 -2
  36. package/dist/lib/server/adcp-server.mjs +3 -2
  37. package/dist/lib/server/create-adcp-server.d.mts +43 -17
  38. package/dist/lib/server/create-adcp-server.d.ts +43 -17
  39. package/dist/lib/server/create-adcp-server.js +288 -164
  40. package/dist/lib/server/create-adcp-server.mjs +200 -77
  41. package/dist/lib/server/decisioning/account.d.mts +2 -0
  42. package/dist/lib/server/decisioning/account.d.ts +2 -0
  43. package/dist/lib/server/decisioning/async-outcome.d.mts +34 -0
  44. package/dist/lib/server/decisioning/async-outcome.d.ts +34 -0
  45. package/dist/lib/server/decisioning/async-outcome.js +4 -1
  46. package/dist/lib/server/decisioning/async-outcome.mjs +4 -1
  47. package/dist/lib/server/decisioning/context.d.mts +2 -0
  48. package/dist/lib/server/decisioning/context.d.ts +2 -0
  49. package/dist/lib/server/decisioning/runtime/from-platform.js +77 -41
  50. package/dist/lib/server/decisioning/runtime/from-platform.mjs +77 -41
  51. package/dist/lib/server/decisioning/runtime/to-context.d.mts +1 -1
  52. package/dist/lib/server/decisioning/runtime/to-context.d.ts +1 -1
  53. package/dist/lib/server/decisioning/runtime/to-context.js +24 -7
  54. package/dist/lib/server/decisioning/runtime/to-context.mjs +24 -7
  55. package/dist/lib/server/errors.d.mts +23 -0
  56. package/dist/lib/server/errors.d.ts +23 -0
  57. package/dist/lib/server/errors.js +2 -1
  58. package/dist/lib/server/errors.mjs +2 -1
  59. package/dist/lib/server/index.d.mts +4 -2
  60. package/dist/lib/server/index.d.ts +4 -2
  61. package/dist/lib/server/index.js +25 -0
  62. package/dist/lib/server/index.mjs +26 -0
  63. package/dist/lib/server/legacy/v5/index.d.mts +1 -1
  64. package/dist/lib/server/legacy/v5/index.d.ts +1 -1
  65. package/dist/lib/server/normalize-errors.d.mts +15 -3
  66. package/dist/lib/server/normalize-errors.d.ts +15 -3
  67. package/dist/lib/server/normalize-errors.js +6 -0
  68. package/dist/lib/server/normalize-errors.mjs +6 -0
  69. package/dist/lib/server/notification-subscriptions/index.d.mts +9 -0
  70. package/dist/lib/server/notification-subscriptions/index.d.ts +9 -0
  71. package/dist/lib/server/notification-subscriptions/index.js +55 -0
  72. package/dist/lib/server/notification-subscriptions/index.mjs +30 -0
  73. package/dist/lib/server/notification-subscriptions/memory-store.d.mts +3 -0
  74. package/dist/lib/server/notification-subscriptions/memory-store.d.ts +3 -0
  75. package/dist/lib/server/notification-subscriptions/memory-store.js +95 -0
  76. package/dist/lib/server/notification-subscriptions/memory-store.mjs +71 -0
  77. package/dist/lib/server/notification-subscriptions/postgres-runtime.d.mts +42 -0
  78. package/dist/lib/server/notification-subscriptions/postgres-runtime.d.ts +42 -0
  79. package/dist/lib/server/notification-subscriptions/postgres-runtime.js +84 -0
  80. package/dist/lib/server/notification-subscriptions/postgres-runtime.mjs +65 -0
  81. package/dist/lib/server/notification-subscriptions/postgres-store.d.mts +10 -0
  82. package/dist/lib/server/notification-subscriptions/postgres-store.d.ts +10 -0
  83. package/dist/lib/server/notification-subscriptions/postgres-store.js +232 -0
  84. package/dist/lib/server/notification-subscriptions/postgres-store.mjs +206 -0
  85. package/dist/lib/server/notification-subscriptions/protocol-handlers.d.mts +14 -0
  86. package/dist/lib/server/notification-subscriptions/protocol-handlers.d.ts +14 -0
  87. package/dist/lib/server/notification-subscriptions/protocol-handlers.js +102 -0
  88. package/dist/lib/server/notification-subscriptions/protocol-handlers.mjs +78 -0
  89. package/dist/lib/server/notification-subscriptions/runtime.d.mts +20 -0
  90. package/dist/lib/server/notification-subscriptions/runtime.d.ts +20 -0
  91. package/dist/lib/server/notification-subscriptions/runtime.js +849 -0
  92. package/dist/lib/server/notification-subscriptions/runtime.mjs +821 -0
  93. package/dist/lib/server/notification-subscriptions/types.d.mts +330 -0
  94. package/dist/lib/server/notification-subscriptions/types.d.ts +330 -0
  95. package/dist/lib/server/notification-subscriptions/types.js +35 -0
  96. package/dist/lib/server/notification-subscriptions/types.mjs +11 -0
  97. package/dist/lib/server/redact.d.mts +1 -51
  98. package/dist/lib/server/redact.d.ts +1 -51
  99. package/dist/lib/server/redact.js +2 -9
  100. package/dist/lib/server/redact.mjs +1 -8
  101. package/dist/lib/server/webhook-delivery/recovery.d.mts +2 -0
  102. package/dist/lib/server/webhook-delivery/recovery.d.ts +2 -0
  103. package/dist/lib/server/webhook-delivery/recovery.js +9 -4
  104. package/dist/lib/server/webhook-delivery/recovery.mjs +9 -4
  105. package/dist/lib/server/webhook-emitter.d.mts +41 -0
  106. package/dist/lib/server/webhook-emitter.d.ts +41 -0
  107. package/dist/lib/server/webhook-emitter.js +76 -4
  108. package/dist/lib/server/webhook-emitter.mjs +76 -4
  109. package/dist/lib/signing/agent-resolver/etld.js +7 -2
  110. package/dist/lib/signing/agent-resolver/etld.mjs +7 -2
  111. package/dist/lib/signing/agent-resolver/resolve-agent.js +21 -4
  112. package/dist/lib/signing/agent-resolver/resolve-agent.mjs +21 -4
  113. package/dist/lib/testing/compliance/summary.js +34 -6
  114. package/dist/lib/testing/compliance/summary.mjs +34 -6
  115. package/dist/lib/testing/storyboard/validations.d.mts +1 -1
  116. package/dist/lib/testing/storyboard/validations.d.ts +1 -1
  117. package/dist/lib/types/accept-proposal.d.ts +6 -3
  118. package/dist/lib/types/acquire-rights.d.ts +6 -3
  119. package/dist/lib/types/activate-signal.d.ts +6 -3
  120. package/dist/lib/types/build-creative.d.ts +11 -8
  121. package/dist/lib/types/buy-products.d.ts +6 -3
  122. package/dist/lib/types/calibrate-content.d.ts +6 -3
  123. package/dist/lib/types/comply-test-controller.d.ts +8 -5
  124. package/dist/lib/types/control-media-buy.d.ts +6 -3
  125. package/dist/lib/types/create-collection-list.d.ts +5 -2
  126. package/dist/lib/types/create-content-standards.d.ts +6 -3
  127. package/dist/lib/types/create-media-buy.d.ts +7 -4
  128. package/dist/lib/types/create-property-list.d.ts +5 -2
  129. package/dist/lib/types/decline-proposals.d.ts +6 -3
  130. package/dist/lib/types/delete-collection-list.d.ts +5 -2
  131. package/dist/lib/types/delete-property-list.d.ts +5 -2
  132. package/dist/lib/types/get-account-financials.d.ts +6 -3
  133. package/dist/lib/types/get-adcp-capabilities.d.ts +6 -3
  134. package/dist/lib/types/get-brand-identity.d.ts +6 -3
  135. package/dist/lib/types/get-collection-list.d.ts +5 -2
  136. package/dist/lib/types/get-content-standards.d.ts +6 -3
  137. package/dist/lib/types/get-creative-delivery.d.ts +6 -3
  138. package/dist/lib/types/get-creative-features.d.ts +6 -3
  139. package/dist/lib/types/get-media-buy-artifacts.d.ts +6 -3
  140. package/dist/lib/types/get-media-buy-delivery.d.ts +6 -3
  141. package/dist/lib/types/get-media-buys.d.ts +6 -3
  142. package/dist/lib/types/get-plan-audit-logs.d.ts +5 -2
  143. package/dist/lib/types/get-principal.d.ts +7 -4
  144. package/dist/lib/types/get-products.d.ts +7 -4
  145. package/dist/lib/types/get-property-list.d.ts +5 -2
  146. package/dist/lib/types/get-reporting-status.d.ts +8 -5
  147. package/dist/lib/types/get-rights.d.ts +6 -3
  148. package/dist/lib/types/get-signals.d.ts +7 -4
  149. package/dist/lib/types/get-task-status.d.ts +5 -2
  150. package/dist/lib/types/list-account-changes.d.ts +8 -5
  151. package/dist/lib/types/list-accounts.d.ts +6 -3
  152. package/dist/lib/types/list-collection-lists.d.ts +5 -2
  153. package/dist/lib/types/list-content-standards.d.ts +6 -3
  154. package/dist/lib/types/list-creative-formats.d.ts +6 -3
  155. package/dist/lib/types/list-creatives.d.ts +8 -5
  156. package/dist/lib/types/list-property-lists.d.ts +5 -2
  157. package/dist/lib/types/list-tasks.d.ts +5 -2
  158. package/dist/lib/types/list-transformers.d.ts +6 -3
  159. package/dist/lib/types/log-event.d.ts +6 -3
  160. package/dist/lib/types/preview-creative.d.ts +5 -2
  161. package/dist/lib/types/provide-performance-feedback.d.ts +6 -3
  162. package/dist/lib/types/refine-proposals.d.ts +8 -5
  163. package/dist/lib/types/report-usage.d.ts +6 -3
  164. package/dist/lib/types/request-proposals.d.ts +8 -5
  165. package/dist/lib/types/schemas.generated.d.ts +4 -4
  166. package/dist/lib/types/schemas.generated.js +3 -3
  167. package/dist/lib/types/schemas.generated.mjs +3 -3
  168. package/dist/lib/types/search-brands.d.ts +6 -3
  169. package/dist/lib/types/si-get-offering.d.ts +6 -3
  170. package/dist/lib/types/si-initiate-session.d.ts +6 -3
  171. package/dist/lib/types/si-send-message.d.ts +6 -3
  172. package/dist/lib/types/si-terminate-session.d.ts +6 -3
  173. package/dist/lib/types/sync-accounts.d.ts +7 -4
  174. package/dist/lib/types/sync-agent-notification-configs.d.ts +6 -3
  175. package/dist/lib/types/sync-audiences.d.ts +8 -5
  176. package/dist/lib/types/sync-catalogs.d.ts +9 -6
  177. package/dist/lib/types/sync-creatives.d.ts +8 -5
  178. package/dist/lib/types/sync-event-sources.d.ts +7 -4
  179. package/dist/lib/types/sync-governance.d.ts +7 -4
  180. package/dist/lib/types/sync-plans.d.ts +5 -2
  181. package/dist/lib/types/sync-principal.d.ts +9 -6
  182. package/dist/lib/types/sync-reporting-receipts.d.ts +6 -3
  183. package/dist/lib/types/update-collection-list.d.ts +5 -2
  184. package/dist/lib/types/update-content-standards.d.ts +6 -3
  185. package/dist/lib/types/update-media-buy.d.ts +7 -4
  186. package/dist/lib/types/update-property-list.d.ts +5 -2
  187. package/dist/lib/types/update-rights.d.ts +6 -3
  188. package/dist/lib/types/validate-content-delivery.d.ts +6 -3
  189. package/dist/lib/types/validate-input.d.ts +5 -2
  190. package/dist/lib/types/validate-property-delivery.d.ts +5 -2
  191. package/dist/lib/types/verify-brand-claim.d.ts +6 -3
  192. package/dist/lib/types/verify-brand-claims.d.ts +6 -3
  193. package/dist/lib/utils/adcp-version-config.d.mts +1 -1
  194. package/dist/lib/utils/adcp-version-config.d.ts +1 -1
  195. package/dist/lib/utils/adcp-version-config.js +7 -7
  196. package/dist/lib/utils/adcp-version-config.mjs +7 -7
  197. package/dist/lib/utils/buyer-retry-policy.d.mts +11 -0
  198. package/dist/lib/utils/buyer-retry-policy.d.ts +11 -0
  199. package/dist/lib/utils/error-extraction.d.mts +8 -0
  200. package/dist/lib/utils/error-extraction.d.ts +8 -0
  201. package/dist/lib/utils/error-extraction.js +15 -0
  202. package/dist/lib/utils/error-extraction.mjs +15 -0
  203. package/dist/lib/utils/logger.d.mts +10 -1
  204. package/dist/lib/utils/logger.d.ts +10 -1
  205. package/dist/lib/utils/logger.js +193 -8
  206. package/dist/lib/utils/logger.mjs +193 -8
  207. package/dist/lib/utils/redact-credential-patterns.d.mts +2 -0
  208. package/dist/lib/utils/redact-credential-patterns.d.ts +2 -0
  209. package/dist/lib/utils/redact-credential-patterns.js +66 -0
  210. package/dist/lib/utils/redact-credential-patterns.mjs +42 -0
  211. package/dist/lib/version.d.mts +3 -3
  212. package/dist/lib/version.d.ts +3 -3
  213. package/dist/lib/version.js +3 -3
  214. package/dist/lib/version.mjs +3 -3
  215. package/docs/TYPE-SUMMARY.md +25 -2
  216. package/docs/guides/BUILD-AN-AGENT.md +7 -0
  217. package/docs/guides/MEDIA-BUY-3.2-COMPATIBILITY.md +17 -1
  218. package/docs/guides/PERSISTENT-NOTIFICATION-RUNTIME.md +214 -0
  219. package/docs/guides/PRODUCTION-DURABILITY.md +5 -0
  220. package/docs/llms.txt +5 -2
  221. package/docs/migration-13-to-14.md +22 -0
  222. package/package.json +1 -1
@@ -19,6 +19,7 @@ const { writeFileSync } = require('node:fs');
19
19
 
20
20
  function escapeMarkdownCell(s) {
21
21
  return String(s ?? '')
22
+ .replace(/\\/g, '\\\\')
22
23
  .replace(/\|/g, '\\|')
23
24
  .replace(/\n/g, ' ');
24
25
  }
@@ -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
  };
@@ -56,17 +56,33 @@ const STACK_TRACE_REGEXES = [
56
56
  /\.go:\d+ \+0x[0-9a-f]+/,
57
57
  // PHP: `#7 /var/www/foo.php(42): Bar->baz()` — numbered frame with file:line
58
58
  /#\d+ [^\s]+\.php\(\d+\):/,
59
- // JVM: `\n\tat com.foo.Bar.method(Bar.java:42)` — fully-qualified
60
- // method with source:line. Anchored to whitespace/newline so an
61
- // echoed Javadoc reference in prose (`"at com.foo.Bar(Bar.java:42)"`)
62
- // doesn't trigger the detector — real stack frames sit on their own
63
- // indented line.
64
- /(?:\\n\s*|^\s+|\n\s+)at [\w$.]+\.[\w$]+\([\w$]+\.(?:java|kt|kts|scala|groovy):\d+\)/,
65
59
  // .NET: `at Foo.Bar.Baz() in /path/to/X.cs:line 42` — method invocation
66
60
  // followed by ` in ` and a file:line marker. The method-name charset
67
61
  // includes parens/brackets for generic and overloaded signatures.
68
62
  /at [\w.<>`,()[\]]+ in [^:\s]+\.(?:cs|vb|fs):line \d+/
69
63
  ];
64
+ const JVM_STACK_FRAME = /^at [\w$.]+\.[\w$]+\([\w$]+\.(?:java|kt|kts|scala|groovy):\d+\)\s*/;
65
+ function isJsonFramingSuffix(value) {
66
+ if (!value.startsWith('"')) return false;
67
+ for (let index = 1; index < value.length; index++) {
68
+ const char = value[index];
69
+ if (char !== "}" && char !== "]" && char !== "," && char !== " " && char !== " ") return false;
70
+ }
71
+ return true;
72
+ }
73
+ function hasJvmStackFrame(haystack) {
74
+ const lines = haystack.replaceAll("\\n", "\n").split("\n");
75
+ for (const [index, line] of lines.entries()) {
76
+ const candidate = line.trimStart();
77
+ if (index > 0 || candidate !== line) {
78
+ const match = JVM_STACK_FRAME.exec(candidate);
79
+ if (match && (match[0].length === candidate.length || isJsonFramingSuffix(candidate.slice(match[0].length)))) {
80
+ return true;
81
+ }
82
+ }
83
+ }
84
+ return false;
85
+ }
70
86
  const FS_PATH_SIGNATURES = [/\/Users\/[^ "']+/, /\/home\/[^ "']+/, /[A-Z]:\\\\Users\\\\/];
71
87
  let cachedAjv = null;
72
88
  function getAjv() {
@@ -160,6 +176,10 @@ function checkNoStackLeak(result, failures) {
160
176
  return;
161
177
  }
162
178
  }
179
+ if (hasJvmStackFrame(haystack)) {
180
+ failures.push(`stack trace leak (matched ${JVM_STACK_FRAME.source})`);
181
+ return;
182
+ }
163
183
  for (const rx of STACK_TRACE_REGEXES) {
164
184
  if (rx.test(haystack)) {
165
185
  failures.push(`stack trace leak (matched ${rx.source})`);
@@ -22,17 +22,33 @@ const STACK_TRACE_REGEXES = [
22
22
  /\.go:\d+ \+0x[0-9a-f]+/,
23
23
  // PHP: `#7 /var/www/foo.php(42): Bar->baz()` — numbered frame with file:line
24
24
  /#\d+ [^\s]+\.php\(\d+\):/,
25
- // JVM: `\n\tat com.foo.Bar.method(Bar.java:42)` — fully-qualified
26
- // method with source:line. Anchored to whitespace/newline so an
27
- // echoed Javadoc reference in prose (`"at com.foo.Bar(Bar.java:42)"`)
28
- // doesn't trigger the detector — real stack frames sit on their own
29
- // indented line.
30
- /(?:\\n\s*|^\s+|\n\s+)at [\w$.]+\.[\w$]+\([\w$]+\.(?:java|kt|kts|scala|groovy):\d+\)/,
31
25
  // .NET: `at Foo.Bar.Baz() in /path/to/X.cs:line 42` — method invocation
32
26
  // followed by ` in ` and a file:line marker. The method-name charset
33
27
  // includes parens/brackets for generic and overloaded signatures.
34
28
  /at [\w.<>`,()[\]]+ in [^:\s]+\.(?:cs|vb|fs):line \d+/
35
29
  ];
30
+ const JVM_STACK_FRAME = /^at [\w$.]+\.[\w$]+\([\w$]+\.(?:java|kt|kts|scala|groovy):\d+\)\s*/;
31
+ function isJsonFramingSuffix(value) {
32
+ if (!value.startsWith('"')) return false;
33
+ for (let index = 1; index < value.length; index++) {
34
+ const char = value[index];
35
+ if (char !== "}" && char !== "]" && char !== "," && char !== " " && char !== " ") return false;
36
+ }
37
+ return true;
38
+ }
39
+ function hasJvmStackFrame(haystack) {
40
+ const lines = haystack.replaceAll("\\n", "\n").split("\n");
41
+ for (const [index, line] of lines.entries()) {
42
+ const candidate = line.trimStart();
43
+ if (index > 0 || candidate !== line) {
44
+ const match = JVM_STACK_FRAME.exec(candidate);
45
+ if (match && (match[0].length === candidate.length || isJsonFramingSuffix(candidate.slice(match[0].length)))) {
46
+ return true;
47
+ }
48
+ }
49
+ }
50
+ return false;
51
+ }
36
52
  const FS_PATH_SIGNATURES = [/\/Users\/[^ "']+/, /\/home\/[^ "']+/, /[A-Z]:\\\\Users\\\\/];
37
53
  let cachedAjv = null;
38
54
  function getAjv() {
@@ -126,6 +142,10 @@ function checkNoStackLeak(result, failures) {
126
142
  return;
127
143
  }
128
144
  }
145
+ if (hasJvmStackFrame(haystack)) {
146
+ failures.push(`stack trace leak (matched ${JVM_STACK_FRAME.source})`);
147
+ return;
148
+ }
129
149
  for (const rx of STACK_TRACE_REGEXES) {
130
150
  if (rx.test(haystack)) {
131
151
  failures.push(`stack trace leak (matched ${rx.source})`);
@@ -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
  }
@@ -5488,6 +5488,8 @@ Hint: this usually means agent_uri does not include the MCP endpoint path. The S
5488
5488
  ...options?.signal && { signal: options.signal },
5489
5489
  ...clientRequestTimeoutMs !== void 0 && { timeout: clientRequestTimeoutMs }
5490
5490
  };
5491
+ const discoveryAdcpVersion = this.getWireAdcpVersion();
5492
+ const mcpListParams = (0, import_version.parseAdcpMajorVersion)(discoveryAdcpVersion) >= 3 ? { _meta: { adcp_version: (0, import_version.toReleasePrecisionVersion)(discoveryAdcpVersion) } } : void 0;
5491
5493
  const ensureReadAuthToken = async () => {
5492
5494
  if (!this.normalizedAgent.oauth_client_credentials) return this.normalizedAgent.auth_token;
5493
5495
  const { ensureClientCredentialsTokens, getAgentStorage } = await import("../auth/oauth/index.js");
@@ -5504,7 +5506,7 @@ Hint: this usually means agent_uri does not include the MCP endpoint path. The S
5504
5506
  const mcpClient2 = this.normalizedAgent._inProcessMcpClient;
5505
5507
  const toolsList = await withResponseSizeLimit(
5506
5508
  maxResponseBytes,
5507
- () => mcpClient2.listTools(void 0, mcpRequestOptions)
5509
+ () => mcpClient2.listTools(mcpListParams, mcpRequestOptions)
5508
5510
  );
5509
5511
  const tools = toolsList.tools.map((tool) => ({
5510
5512
  name: tool.name,
@@ -5557,6 +5559,9 @@ Hint: this usually means agent_uri does not include the MCP endpoint path. The S
5557
5559
  maxResponseBytes,
5558
5560
  () => tryListModernMCPTools(agent.agent_uri, readAuthToken, this.normalizedAgent.headers, {
5559
5561
  authProvider,
5562
+ ...mcpListParams?._meta.adcp_version !== void 0 && {
5563
+ adcpVersion: mcpListParams._meta.adcp_version
5564
+ },
5560
5565
  signal: options?.signal,
5561
5566
  requestTimeoutMs: transport?.requestTimeoutMs,
5562
5567
  fetchFn: transport?.trustedFetchFn,
@@ -5582,7 +5587,7 @@ Hint: this usually means agent_uri does not include the MCP endpoint path. The S
5582
5587
  try {
5583
5588
  const toolsList = await withResponseSizeLimit(
5584
5589
  maxResponseBytes,
5585
- () => mcpClient.listTools(void 0, mcpRequestOptions)
5590
+ () => mcpClient.listTools(mcpListParams, mcpRequestOptions)
5586
5591
  );
5587
5592
  const tools = toolsList.tools.map((tool) => ({
5588
5593
  name: tool.name,
@@ -1,7 +1,7 @@
1
1
  import { z } from "zod";
2
2
  import * as schemas from "../types/schemas.generated.mjs";
3
3
  import { ADCP_ENVELOPE_FIELDS } from "../types/adcp.mjs";
4
- import { parseAdcpMajorVersion } from "../version.mjs";
4
+ import { parseAdcpMajorVersion, toReleasePrecisionVersion } from "../version.mjs";
5
5
  import {
6
6
  isAdcpVersionSupported,
7
7
  isAdcpVersionAtLeast,
@@ -5542,6 +5542,8 @@ Hint: this usually means agent_uri does not include the MCP endpoint path. The S
5542
5542
  ...options?.signal && { signal: options.signal },
5543
5543
  ...clientRequestTimeoutMs !== void 0 && { timeout: clientRequestTimeoutMs }
5544
5544
  };
5545
+ const discoveryAdcpVersion = this.getWireAdcpVersion();
5546
+ const mcpListParams = parseAdcpMajorVersion(discoveryAdcpVersion) >= 3 ? { _meta: { adcp_version: toReleasePrecisionVersion(discoveryAdcpVersion) } } : void 0;
5545
5547
  const ensureReadAuthToken = async () => {
5546
5548
  if (!this.normalizedAgent.oauth_client_credentials) return this.normalizedAgent.auth_token;
5547
5549
  const { ensureClientCredentialsTokens, getAgentStorage } = await import("../auth/oauth/index.mjs");
@@ -5558,7 +5560,7 @@ Hint: this usually means agent_uri does not include the MCP endpoint path. The S
5558
5560
  const mcpClient2 = this.normalizedAgent._inProcessMcpClient;
5559
5561
  const toolsList = await withResponseSizeLimit(
5560
5562
  maxResponseBytes,
5561
- () => mcpClient2.listTools(void 0, mcpRequestOptions)
5563
+ () => mcpClient2.listTools(mcpListParams, mcpRequestOptions)
5562
5564
  );
5563
5565
  const tools = toolsList.tools.map((tool) => ({
5564
5566
  name: tool.name,
@@ -5611,6 +5613,9 @@ Hint: this usually means agent_uri does not include the MCP endpoint path. The S
5611
5613
  maxResponseBytes,
5612
5614
  () => tryListModernMCPTools(agent.agent_uri, readAuthToken, this.normalizedAgent.headers, {
5613
5615
  authProvider,
5616
+ ...mcpListParams?._meta.adcp_version !== void 0 && {
5617
+ adcpVersion: mcpListParams._meta.adcp_version
5618
+ },
5614
5619
  signal: options?.signal,
5615
5620
  requestTimeoutMs: transport?.requestTimeoutMs,
5616
5621
  fetchFn: transport?.trustedFetchFn,
@@ -5636,7 +5641,7 @@ Hint: this usually means agent_uri does not include the MCP endpoint path. The S
5636
5641
  try {
5637
5642
  const toolsList = await withResponseSizeLimit(
5638
5643
  maxResponseBytes,
5639
- () => mcpClient.listTools(void 0, mcpRequestOptions)
5644
+ () => mcpClient.listTools(mcpListParams, mcpRequestOptions)
5640
5645
  );
5641
5646
  const tools = toolsList.tools.map((tool) => ({
5642
5647
  name: tool.name,
@@ -1673,6 +1673,9 @@ class TaskExecutor {
1673
1673
  }
1674
1674
  externalTaskObservationKey(observation) {
1675
1675
  return (0, import_crypto.createHmac)("sha256", EXTERNAL_TASK_OBSERVATION_HMAC_KEY).update(
1676
+ // This keyed digest deduplicates canonical task observations; it does
1677
+ // not store or verify passwords. Agent responses are over-tainted.
1678
+ // codeql[js/insufficient-password-hash]
1676
1679
  (0, import_jcs.canonicalize)({
1677
1680
  status: observation.status,
1678
1681
  serverTaskId: observation.serverTaskId ?? null,
@@ -1647,6 +1647,9 @@ class TaskExecutor {
1647
1647
  }
1648
1648
  externalTaskObservationKey(observation) {
1649
1649
  return createHmac("sha256", EXTERNAL_TASK_OBSERVATION_HMAC_KEY).update(
1650
+ // This keyed digest deduplicates canonical task observations; it does
1651
+ // not store or verify passwords. Agent responses are over-tainted.
1652
+ // codeql[js/insufficient-password-hash]
1650
1653
  canonicalize({
1651
1654
  status: observation.status,
1652
1655
  serverTaskId: observation.serverTaskId ?? null,
@@ -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';
@@ -163,7 +163,7 @@ export type { Error as TaskErrorDetail } from './types/core.generated.mjs';
163
163
  export { STANDARD_ERROR_CODES, isStandardErrorCode, getErrorRecovery } from './types/error-codes.mjs';
164
164
  export type { StandardErrorCode, ErrorRecovery } from './types/error-codes.mjs';
165
165
  export { adcpError, legacyCapabilitiesResponse, legacyProductsResponse, legacyMediaBuyResponse, legacyDeliveryResponse, legacyListAccountsResponse, legacyListCreativeFormatsResponse, legacyUpdateMediaBuyResponse, legacyGetMediaBuysResponse, legacyPerformanceFeedbackResponse, legacyBuildCreativeResponse, legacyBuildCreativeMultiResponse, legacyPreviewCreativeResponse, legacyCreativeDeliveryResponse, legacyListCreativesResponse, legacyListPropertyListsResponse, legacyListCollectionListsResponse, legacyListContentStandardsResponse, legacyGetPlanAuditLogsResponse, legacySyncCreativesResponse, legacyGetSignalsResponse, legacyActivateSignalResponse, legacyCancelMediaBuyResponse, legacyAcquireRightsResponse, legacyAcquireRightsAcquired, legacyAcquireRightsPendingApproval, legacyAcquireRightsRejected, legacySyncAccountsResponse, legacySyncGovernanceResponse, legacyReportUsageResponse, validActionsForStatus, MEDIA_BUY_TRANSITIONS, CREATIVE_ASSET_TRANSITIONS, isLegalMediaBuyTransition, isLegalCreativeTransition, assertMediaBuyTransition, assertCreativeTransition, getAccountMode, isSandboxOrMockAccount, assertSandboxAccount, taskToolResponse, registerAdcpTaskTool, createTaskCapableServer, InMemoryTaskStore, isTerminal, serve, taskScopeFromPrincipal, UnknownHostError, hostname, resolveHost, verifyIntrospection, registerTestController, handleTestControllerRequest, TestControllerError, toMcpResponse, TOOL_INPUT_SHAPE, CONTROLLER_SCENARIOS, DISCOVERY_ARM_SCENARIOS, SEED_SCENARIOS, SESSION_ENTRY_CAP, enforceMapCap, createSeedFixtureCache, PostgresTaskStore, cleanupExpiredTasks, getMcpTasksMigration, MCP_TASKS_MIGRATION, ADCP_PRE_TRANSPORT, checkGovernance, governanceDeniedError, DEFAULT_REPORTING_CAPABILITIES, InMemoryStateStore, PostgresStateStore, getAdcpStateMigration, ADCP_STATE_MIGRATION, StateError, PatchConflictError, SESSION_KEY_FIELD, createSessionedStore, scopedStore, patchWithRetry, isPutIfMatchConflict, requireSessionKey, structuredSerialize, structuredDeserialize, createIdempotencyStore, memoryBackend, pgBackend, getIdempotencyMigration, IDEMPOTENCY_MIGRATION, cleanupExpiredIdempotency, redisBackend, createLazyBackend, hashPayload, IdempotencyClaimOwnershipError, getServeRequestContext, ADCP_SERVE_REQUEST_CONTEXT, createA2AAdapter, A2AInvocationError, MCP_APP_RESOURCE_MIME_TYPE, ADCP_MIRRORED_STRUCTURED_CONTENT_META_KEY, } from './server/index.mjs';
166
- export type { AdcpErrorOptions, AdcpErrorResponse, McpToolResponse, ValidAction, CancelMediaBuyInput, AdcpTaskToolConfig, TaskStore, TaskMessageQueue, CreateTaskOptions, ToolTaskHandler, CreateTaskRequestHandlerExtra, TaskRequestHandlerExtra, CreateTaskResult, GetTaskResult, Task, ServeContext, ServeOptions, PgQueryable, PostgresTaskStoreOptions, TestControllerStore, TestControllerStoreFactory, TestControllerStoreOrFactory, ControllerScenario, SeedScenario, SeedFixtureCache, SessionContext, OnInstructionsError, MaybePromise, LegacyAdcpServerConfig, LegacyAdcpToolMap, AdcpServerToolName, AdcpCapabilitiesConfig, LegacyAdcpCustomToolConfig, McpAppUiMeta, McpAppMeta, AdcpMcpResourceDefinition, McpAppResourceCsp, McpAppResourcePermissions, McpAppResourceUiMeta, McpAppResourceMeta, McpAppResourceReadContext, AdcpLogger, LegacyHandlerContext, LegacyMediaBuyHandlers, LegacySignalsHandlers, LegacyCreativeHandlers, LegacyGovernanceHandlers, LegacyAccountHandlers, LegacyEventTrackingHandlers, LegacySponsoredIntelligenceHandlers, SignedRequestsConfig, AdcpPreTransport, AdcpServer, AdcpServerTransport, AdcpTestRequest, AdcpTestToolsCallRequest, AdcpTestResponse, AdcpInvokeOptions, StructuredContentFallbackTransport, StructuredContentTextFallback, StructuredContentTextFallbackContext, CheckGovernanceOptions, GovernanceCallResult, GovernanceApproved, GovernanceDenied, GovernanceConditions, AdcpStateStore, ListOptions as StateListOptions, ListResult as StateListResult, PostgresStateStoreOptions, InMemoryStateStoreOptions, VersionedDocument, PutIfMatchResult, PatchWithRetryOptions, StateErrorCode, SessionKeyContext, IdempotencyStore, IdempotencyStoreConfig, IdempotencyBackend, IdempotencyCacheEntry, IdempotencyCheckResult, MemoryBackendOptions, PgBackendOptions, RedisBackendOptions, RedisBackendClient, RedisLikeClient, LazyBackendFactory, LazyBackendOptions, A2AAdapter, A2AAdapterOptions, A2AAgentCardOverrides, A2AAgentCapabilitiesOverride, A2AAgentSkillOverride, A2AMountOptions, ExpressAppLike, LegacyHttpSecurityScheme, LegacySecurityScheme, AccountMode, RequireCacheScopeWhenProducts, ServerPayload, GetProductsPayload, CreateMediaBuyPayload, UpdateMediaBuyPayload, GetMediaBuysPayload, GetMediaBuyDeliveryPayload, ListCreativesPayload, GetCreativeDeliveryPayload, CanonicalPreviewCreativePayload, PreviewCreativePayload, LegacyGetProductsPayload, LegacyCreateMediaBuyPayload, LegacyUpdateMediaBuyPayload, LegacyGetMediaBuysPayload, LegacyGetMediaBuyDeliveryPayload, LegacyListCreativesPayload, LegacyGetCreativeDeliveryPayload, LegacyListCreativeFormatsPayload, LegacyListCreativeFormatsResponsePayload, LegacyListCreativeFormatsServerPayload, LegacyBuildCreativePayload, LegacyBuildCreativeMultiPayload, LegacyBuildCreativeVariantPayload, LegacyPreviewCreativePayload, SyncCreativesPayload, SyncCreativesSuccessPayload, SyncCreativesErrorPayload, } from './server/index.mjs';
166
+ export type { AdcpErrorOptions, AdcpErrorResponse, McpToolResponse, ValidAction, CancelMediaBuyInput, AdcpTaskToolConfig, TaskStore, TaskMessageQueue, CreateTaskOptions, ToolTaskHandler, CreateTaskRequestHandlerExtra, TaskRequestHandlerExtra, CreateTaskResult, GetTaskResult, Task, ServeContext, ServeOptions, PgQueryable, PostgresTaskStoreOptions, TestControllerStore, TestControllerStoreFactory, TestControllerStoreOrFactory, ControllerScenario, SeedScenario, SeedFixtureCache, SessionContext, OnInstructionsError, MaybePromise, LegacyAdcpServerConfig, LegacyAdcpToolMap, AdcpServerToolName, AdcpCapabilitiesConfig, LegacyAdcpCustomToolConfig, LegacyAdcpCustomToolHandler, LegacyAdcpCustomToolHandlerExtra, McpAppUiMeta, McpAppMeta, AdcpMcpResourceDefinition, McpAppResourceCsp, McpAppResourcePermissions, McpAppResourceUiMeta, McpAppResourceMeta, McpAppResourceReadContext, AdcpLogger, LegacyHandlerContext, LegacyMediaBuyHandlers, LegacySignalsHandlers, LegacyCreativeHandlers, LegacyGovernanceHandlers, LegacyAccountHandlers, LegacyEventTrackingHandlers, LegacySponsoredIntelligenceHandlers, SignedRequestsConfig, AdcpPreTransport, AdcpServer, AdcpServerTransport, AdcpTestRequest, AdcpTestToolsCallRequest, AdcpTestResponse, AdcpInvokeOptions, StructuredContentFallbackTransport, StructuredContentTextFallback, StructuredContentTextFallbackContext, CheckGovernanceOptions, GovernanceCallResult, GovernanceApproved, GovernanceDenied, GovernanceConditions, AdcpStateStore, ListOptions as StateListOptions, ListResult as StateListResult, PostgresStateStoreOptions, InMemoryStateStoreOptions, VersionedDocument, PutIfMatchResult, PatchWithRetryOptions, StateErrorCode, SessionKeyContext, IdempotencyStore, IdempotencyStoreConfig, IdempotencyBackend, IdempotencyCacheEntry, IdempotencyCheckResult, MemoryBackendOptions, PgBackendOptions, RedisBackendOptions, RedisBackendClient, RedisLikeClient, LazyBackendFactory, LazyBackendOptions, A2AAdapter, A2AAdapterOptions, A2AAgentCardOverrides, A2AAgentCapabilitiesOverride, A2AAgentSkillOverride, A2AMountOptions, ExpressAppLike, LegacyHttpSecurityScheme, LegacySecurityScheme, AccountMode, RequireCacheScopeWhenProducts, ServerPayload, GetProductsPayload, CreateMediaBuyPayload, UpdateMediaBuyPayload, GetMediaBuysPayload, GetMediaBuyDeliveryPayload, ListCreativesPayload, GetCreativeDeliveryPayload, CanonicalPreviewCreativePayload, PreviewCreativePayload, LegacyGetProductsPayload, LegacyCreateMediaBuyPayload, LegacyUpdateMediaBuyPayload, LegacyGetMediaBuysPayload, LegacyGetMediaBuyDeliveryPayload, LegacyListCreativesPayload, LegacyGetCreativeDeliveryPayload, LegacyListCreativeFormatsPayload, LegacyListCreativeFormatsResponsePayload, LegacyListCreativeFormatsServerPayload, LegacyBuildCreativePayload, LegacyBuildCreativeMultiPayload, LegacyBuildCreativeVariantPayload, LegacyPreviewCreativePayload, SyncCreativesPayload, SyncCreativesSuccessPayload, SyncCreativesErrorPayload, } from './server/index.mjs';
167
167
  export { isRetryable, getRetryDelay } from './utils/retry.mjs';
168
168
  export { decideRetry, BuyerRetryPolicy } from './utils/buyer-retry-policy.mjs';
169
169
  export type { RetryDecision, RetryContext, RetryDecisionOverride } from './utils/buyer-retry-policy.mjs';