@adcp/sdk 15.9.0 → 16.0.0-beta.1

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 (295) hide show
  1. package/bin/adcp-identity.js +74 -0
  2. package/bin/adcp.js +2 -0
  3. package/dist/lib/adapters/keyed-account-backend.d.mts +37 -0
  4. package/dist/lib/adapters/keyed-account-backend.d.ts +37 -0
  5. package/dist/lib/adapters/keyed-account-backend.js +121 -0
  6. package/dist/lib/adapters/keyed-account-backend.mjs +94 -0
  7. package/dist/lib/adapters/keyed-account-store.d.mts +28 -0
  8. package/dist/lib/adapters/keyed-account-store.d.ts +28 -0
  9. package/dist/lib/adapters/keyed-account-store.js +227 -0
  10. package/dist/lib/adapters/keyed-account-store.mjs +203 -0
  11. package/dist/lib/core/SingleAgentClient.d.mts +16 -2
  12. package/dist/lib/core/SingleAgentClient.d.ts +16 -2
  13. package/dist/lib/core/SingleAgentClient.js +259 -62
  14. package/dist/lib/core/SingleAgentClient.mjs +261 -57
  15. package/dist/lib/core/TaskExecutor.d.mts +6 -0
  16. package/dist/lib/core/TaskExecutor.d.ts +6 -0
  17. package/dist/lib/core/TaskExecutor.js +66 -5
  18. package/dist/lib/core/TaskExecutor.mjs +71 -5
  19. package/dist/lib/core/postgres-webhook-registration-store.js +32 -5
  20. package/dist/lib/core/postgres-webhook-registration-store.mjs +32 -5
  21. package/dist/lib/core/redis-webhook-registration-store.js +23 -1
  22. package/dist/lib/core/redis-webhook-registration-store.mjs +23 -1
  23. package/dist/lib/core/webhook-registration.d.mts +7 -1
  24. package/dist/lib/core/webhook-registration.d.ts +7 -1
  25. package/dist/lib/core/webhook-registration.js +24 -2
  26. package/dist/lib/core/webhook-registration.mjs +23 -2
  27. package/dist/lib/identity-3.3/index.d.mts +10 -0
  28. package/dist/lib/identity-3.3/index.d.ts +10 -0
  29. package/dist/lib/identity-3.3/index.js +75 -0
  30. package/dist/lib/identity-3.3/index.mjs +46 -0
  31. package/dist/lib/identity-3.3/lifecycle.d.mts +113 -0
  32. package/dist/lib/identity-3.3/lifecycle.d.ts +113 -0
  33. package/dist/lib/identity-3.3/lifecycle.js +267 -0
  34. package/dist/lib/identity-3.3/lifecycle.mjs +240 -0
  35. package/dist/lib/identity-3.3/revocation.d.mts +50 -0
  36. package/dist/lib/identity-3.3/revocation.d.ts +50 -0
  37. package/dist/lib/identity-3.3/revocation.js +238 -0
  38. package/dist/lib/identity-3.3/revocation.mjs +216 -0
  39. package/dist/lib/identity-3.3/schemas.draft.d.mts +2472 -0
  40. package/dist/lib/identity-3.3/schemas.draft.d.ts +2472 -0
  41. package/dist/lib/identity-3.3/schemas.draft.js +1448 -0
  42. package/dist/lib/identity-3.3/schemas.draft.mjs +1428 -0
  43. package/dist/lib/identity-3.3/server.d.mts +34 -0
  44. package/dist/lib/identity-3.3/server.d.ts +34 -0
  45. package/dist/lib/identity-3.3/server.js +219 -0
  46. package/dist/lib/identity-3.3/server.mjs +194 -0
  47. package/dist/lib/identity-3.3/store.d.mts +24 -0
  48. package/dist/lib/identity-3.3/store.d.ts +24 -0
  49. package/dist/lib/identity-3.3/store.js +191 -0
  50. package/dist/lib/identity-3.3/store.mjs +169 -0
  51. package/dist/lib/identity-3.3/trust.d.mts +94 -0
  52. package/dist/lib/identity-3.3/trust.d.ts +94 -0
  53. package/dist/lib/identity-3.3/trust.js +278 -0
  54. package/dist/lib/identity-3.3/trust.mjs +239 -0
  55. package/dist/lib/identity-3.3/types.d.mts +127 -0
  56. package/dist/lib/identity-3.3/types.d.ts +127 -0
  57. package/dist/lib/identity-3.3/types.js +16 -0
  58. package/dist/lib/identity-3.3/types.mjs +0 -0
  59. package/dist/lib/identity-3.3/validation.d.mts +2 -0
  60. package/dist/lib/identity-3.3/validation.d.ts +2 -0
  61. package/dist/lib/identity-3.3/validation.js +125 -0
  62. package/dist/lib/identity-3.3/validation.mjs +91 -0
  63. package/dist/lib/index.d.mts +1 -1
  64. package/dist/lib/index.d.ts +1 -1
  65. package/dist/lib/reporting/azure/index.d.mts +5 -0
  66. package/dist/lib/reporting/azure/index.d.ts +5 -0
  67. package/dist/lib/reporting/azure/index.js +26 -7
  68. package/dist/lib/reporting/azure/index.mjs +26 -7
  69. package/dist/lib/reporting/bigquery/index.d.mts +80 -25
  70. package/dist/lib/reporting/bigquery/index.d.ts +80 -25
  71. package/dist/lib/reporting/bigquery/index.js +184 -81
  72. package/dist/lib/reporting/bigquery/index.mjs +182 -80
  73. package/dist/lib/reporting/gcs/adapter.d.mts +8 -1
  74. package/dist/lib/reporting/gcs/adapter.d.ts +8 -1
  75. package/dist/lib/reporting/gcs/errors.d.mts +6 -0
  76. package/dist/lib/reporting/gcs/errors.d.ts +6 -0
  77. package/dist/lib/reporting/gcs/fence.d.mts +5 -0
  78. package/dist/lib/reporting/gcs/fence.d.ts +5 -0
  79. package/dist/lib/reporting/gcs/index.d.mts +9 -0
  80. package/dist/lib/reporting/gcs/index.d.ts +9 -0
  81. package/dist/lib/reporting/gcs/reader.d.mts +27 -3
  82. package/dist/lib/reporting/gcs/reader.d.ts +27 -3
  83. package/dist/lib/reporting/gcs/row-provider.d.mts +7 -0
  84. package/dist/lib/reporting/gcs/row-provider.d.ts +7 -0
  85. package/dist/lib/reporting/gcs/row-provider.js +34 -14
  86. package/dist/lib/reporting/gcs/row-provider.mjs +34 -14
  87. package/dist/lib/reporting/ledger/change-feed.d.mts +22 -1
  88. package/dist/lib/reporting/ledger/change-feed.d.ts +22 -1
  89. package/dist/lib/reporting/ledger/index.d.mts +11 -0
  90. package/dist/lib/reporting/ledger/index.d.ts +11 -0
  91. package/dist/lib/reporting/ledger/managed-postgres.d.mts +8 -0
  92. package/dist/lib/reporting/ledger/managed-postgres.d.ts +8 -0
  93. package/dist/lib/reporting/ledger/managed-router.d.mts +27 -2
  94. package/dist/lib/reporting/ledger/managed-router.d.ts +27 -2
  95. package/dist/lib/reporting/ledger/managed.d.mts +86 -6
  96. package/dist/lib/reporting/ledger/managed.d.ts +86 -6
  97. package/dist/lib/reporting/ledger/notification-activity.d.mts +65 -3
  98. package/dist/lib/reporting/ledger/notification-activity.d.ts +65 -3
  99. package/dist/lib/reporting/ledger/object-writes.d.mts +64 -5
  100. package/dist/lib/reporting/ledger/object-writes.d.ts +64 -5
  101. package/dist/lib/reporting/ledger/postgres.d.mts +43 -9
  102. package/dist/lib/reporting/ledger/postgres.d.ts +43 -9
  103. package/dist/lib/reporting/ledger/postgres.js +43 -27
  104. package/dist/lib/reporting/ledger/postgres.mjs +43 -27
  105. package/dist/lib/reporting/ledger/row-encoding.d.mts +92 -6
  106. package/dist/lib/reporting/ledger/row-encoding.d.ts +92 -6
  107. package/dist/lib/reporting/ledger/row-encoding.js +8 -4
  108. package/dist/lib/reporting/ledger/row-encoding.mjs +6 -3
  109. package/dist/lib/reporting/ledger/row-storage-errors.d.mts +11 -1
  110. package/dist/lib/reporting/ledger/row-storage-errors.d.ts +11 -1
  111. package/dist/lib/reporting/ledger/row-storage-migration.d.mts +19 -1
  112. package/dist/lib/reporting/ledger/row-storage-migration.d.ts +19 -1
  113. package/dist/lib/reporting/ledger/row-storage-migration.js +133 -18
  114. package/dist/lib/reporting/ledger/row-storage-migration.mjs +133 -18
  115. package/dist/lib/reporting/ledger/row-storage-object.d.mts +103 -12
  116. package/dist/lib/reporting/ledger/row-storage-object.d.ts +103 -12
  117. package/dist/lib/reporting/ledger/row-storage-object.js +106 -31
  118. package/dist/lib/reporting/ledger/row-storage-object.mjs +104 -31
  119. package/dist/lib/reporting/ledger/row-storage.d.mts +87 -20
  120. package/dist/lib/reporting/ledger/row-storage.d.ts +87 -20
  121. package/dist/lib/reporting/ledger/row-storage.js +126 -66
  122. package/dist/lib/reporting/ledger/row-storage.mjs +129 -67
  123. package/dist/lib/reporting/ledger/schedule.d.mts +13 -0
  124. package/dist/lib/reporting/ledger/schedule.d.ts +13 -0
  125. package/dist/lib/reporting/ledger/schedule.js +24 -0
  126. package/dist/lib/reporting/ledger/schedule.mjs +23 -0
  127. package/dist/lib/reporting/ledger/types.d.mts +23 -1
  128. package/dist/lib/reporting/ledger/types.d.ts +23 -1
  129. package/dist/lib/reporting/s3/index.d.mts +5 -0
  130. package/dist/lib/reporting/s3/index.d.ts +5 -0
  131. package/dist/lib/reporting/s3/index.js +37 -14
  132. package/dist/lib/reporting/s3/index.mjs +37 -14
  133. package/dist/lib/reporting/service/index.d.mts +10 -0
  134. package/dist/lib/reporting/service/index.d.ts +10 -0
  135. package/dist/lib/reporting/service/maintenance.d.mts +28 -2
  136. package/dist/lib/reporting/service/maintenance.d.ts +28 -2
  137. package/dist/lib/schemas-data/v2.5/_provenance.json +1 -1
  138. package/dist/lib/server/account-sync-contract.d.mts +14 -0
  139. package/dist/lib/server/account-sync-contract.d.ts +14 -0
  140. package/dist/lib/server/account-sync-contract.js +225 -0
  141. package/dist/lib/server/account-sync-contract.mjs +197 -0
  142. package/dist/lib/server/adcp-server.js +5 -0
  143. package/dist/lib/server/adcp-server.mjs +10 -0
  144. package/dist/lib/server/auth-signature.d.mts +10 -0
  145. package/dist/lib/server/auth-signature.d.ts +10 -0
  146. package/dist/lib/server/auth-signature.js +61 -2
  147. package/dist/lib/server/auth-signature.mjs +65 -2
  148. package/dist/lib/server/auth.d.mts +6 -0
  149. package/dist/lib/server/auth.d.ts +6 -0
  150. package/dist/lib/server/auth.js +6 -0
  151. package/dist/lib/server/auth.mjs +6 -0
  152. package/dist/lib/server/create-adcp-server.d.mts +19 -5
  153. package/dist/lib/server/create-adcp-server.d.ts +19 -5
  154. package/dist/lib/server/create-adcp-server.js +238 -19
  155. package/dist/lib/server/create-adcp-server.mjs +240 -10
  156. package/dist/lib/server/decisioning/account.d.mts +24 -1
  157. package/dist/lib/server/decisioning/account.d.ts +24 -1
  158. package/dist/lib/server/decisioning/index.d.mts +1 -1
  159. package/dist/lib/server/decisioning/index.d.ts +1 -1
  160. package/dist/lib/server/decisioning/runtime/from-platform.d.mts +0 -50
  161. package/dist/lib/server/decisioning/runtime/from-platform.d.ts +0 -50
  162. package/dist/lib/server/decisioning/runtime/from-platform.js +61 -11
  163. package/dist/lib/server/decisioning/runtime/from-platform.mjs +65 -12
  164. package/dist/lib/server/index.d.mts +2 -0
  165. package/dist/lib/server/index.d.ts +2 -0
  166. package/dist/lib/server/index.js +12 -0
  167. package/dist/lib/server/index.mjs +12 -0
  168. package/dist/lib/server/notification-subscriptions/runtime.js +9 -1
  169. package/dist/lib/server/notification-subscriptions/runtime.mjs +9 -1
  170. package/dist/lib/server/notification-subscriptions/types.d.mts +5 -0
  171. package/dist/lib/server/notification-subscriptions/types.d.ts +5 -0
  172. package/dist/lib/server/principal/types.d.mts +1 -1
  173. package/dist/lib/server/principal/types.d.ts +1 -1
  174. package/dist/lib/server/serve.js +5 -0
  175. package/dist/lib/server/serve.mjs +5 -0
  176. package/dist/lib/server/webhook-delivery/recovery.d.mts +1 -0
  177. package/dist/lib/server/webhook-delivery/recovery.d.ts +1 -0
  178. package/dist/lib/server/webhook-delivery/recovery.js +4 -0
  179. package/dist/lib/server/webhook-delivery/recovery.mjs +4 -0
  180. package/dist/lib/server/webhook-emitter.d.mts +10 -0
  181. package/dist/lib/server/webhook-emitter.d.ts +10 -0
  182. package/dist/lib/server/webhook-emitter.js +22 -0
  183. package/dist/lib/server/webhook-emitter.mjs +22 -0
  184. package/dist/lib/signing/agent-context.d.mts +0 -5
  185. package/dist/lib/signing/agent-context.d.ts +0 -5
  186. package/dist/lib/signing/agent-context.js +9 -1
  187. package/dist/lib/signing/agent-context.mjs +9 -1
  188. package/dist/lib/signing/agent-fetch.js +27 -2
  189. package/dist/lib/signing/agent-fetch.mjs +32 -2
  190. package/dist/lib/signing/agent-resolver/canonicalize.d.mts +10 -15
  191. package/dist/lib/signing/agent-resolver/canonicalize.d.ts +10 -15
  192. package/dist/lib/signing/agent-resolver/canonicalize.js +17 -5
  193. package/dist/lib/signing/agent-resolver/canonicalize.mjs +16 -5
  194. package/dist/lib/signing/agent-resolver/index.d.mts +1 -0
  195. package/dist/lib/signing/agent-resolver/index.d.ts +1 -0
  196. package/dist/lib/signing/agent-resolver/index.js +5 -0
  197. package/dist/lib/signing/agent-resolver/index.mjs +3 -0
  198. package/dist/lib/signing/agent-resolver/resolved-agent-jwks.d.mts +3 -2
  199. package/dist/lib/signing/agent-resolver/resolved-agent-jwks.d.ts +3 -2
  200. package/dist/lib/signing/agent-resolver/resolved-agent-jwks.js +30 -3
  201. package/dist/lib/signing/agent-resolver/resolved-agent-jwks.mjs +30 -3
  202. package/dist/lib/signing/agent-resolver/strict-json.d.mts +2 -2
  203. package/dist/lib/signing/agent-resolver/strict-json.d.ts +2 -2
  204. package/dist/lib/signing/agent-resolver/strict-json.js +5 -3
  205. package/dist/lib/signing/agent-resolver/strict-json.mjs +5 -3
  206. package/dist/lib/signing/brand-jwks.d.mts +2 -2
  207. package/dist/lib/signing/brand-jwks.d.ts +2 -2
  208. package/dist/lib/signing/brand-jwks.js +4 -4
  209. package/dist/lib/signing/brand-jwks.mjs +4 -4
  210. package/dist/lib/signing/client.d.mts +1 -0
  211. package/dist/lib/signing/client.d.ts +1 -0
  212. package/dist/lib/signing/client.js +5 -0
  213. package/dist/lib/signing/client.mjs +3 -0
  214. package/dist/lib/signing/jwks-https.d.mts +1 -1
  215. package/dist/lib/signing/jwks-https.d.ts +1 -1
  216. package/dist/lib/signing/jwks-https.js +1 -1
  217. package/dist/lib/signing/jwks-https.mjs +1 -1
  218. package/dist/lib/signing/jwks.d.mts +11 -3
  219. package/dist/lib/signing/jwks.d.ts +11 -3
  220. package/dist/lib/signing/jwks.js +1 -1
  221. package/dist/lib/signing/jwks.mjs +1 -1
  222. package/dist/lib/signing/parser.d.mts +1 -1
  223. package/dist/lib/signing/parser.d.ts +1 -1
  224. package/dist/lib/signing/parser.js +5 -3
  225. package/dist/lib/signing/parser.mjs +6 -4
  226. package/dist/lib/signing/revocation.d.mts +4 -1
  227. package/dist/lib/signing/revocation.d.ts +4 -1
  228. package/dist/lib/signing/revocation.js +33 -3
  229. package/dist/lib/signing/revocation.mjs +31 -2
  230. package/dist/lib/signing/server.d.mts +1 -1
  231. package/dist/lib/signing/server.d.ts +1 -1
  232. package/dist/lib/signing/server.js +4 -0
  233. package/dist/lib/signing/server.mjs +4 -0
  234. package/dist/lib/signing/types.d.mts +3 -0
  235. package/dist/lib/signing/types.d.ts +3 -0
  236. package/dist/lib/signing/web-bot-auth.d.mts +117 -0
  237. package/dist/lib/signing/web-bot-auth.d.ts +117 -0
  238. package/dist/lib/signing/web-bot-auth.js +660 -0
  239. package/dist/lib/signing/web-bot-auth.mjs +624 -0
  240. package/dist/lib/testing/client.d.mts +1 -4
  241. package/dist/lib/testing/client.d.ts +1 -4
  242. package/dist/lib/testing/client.js +141 -20
  243. package/dist/lib/testing/client.mjs +137 -19
  244. package/dist/lib/testing/compliance/comply.js +29 -10
  245. package/dist/lib/testing/compliance/comply.mjs +37 -11
  246. package/dist/lib/testing/storyboard/account-sync-contract.d.mts +3 -0
  247. package/dist/lib/testing/storyboard/account-sync-contract.d.ts +3 -0
  248. package/dist/lib/testing/storyboard/account-sync-contract.js +79 -0
  249. package/dist/lib/testing/storyboard/account-sync-contract.mjs +55 -0
  250. package/dist/lib/testing/storyboard/default-invariants.js +2 -0
  251. package/dist/lib/testing/storyboard/default-invariants.mjs +2 -0
  252. package/dist/lib/testing/storyboard/runner.js +23 -8
  253. package/dist/lib/testing/storyboard/runner.mjs +24 -8
  254. package/dist/lib/testing/storyboard/validations.d.mts +1 -1
  255. package/dist/lib/testing/storyboard/validations.d.ts +1 -1
  256. package/dist/lib/types/adcp.d.mts +4 -0
  257. package/dist/lib/types/adcp.d.ts +4 -0
  258. package/dist/lib/types/schemas.generated.d.ts +6 -6
  259. package/dist/lib/utils/capabilities.d.mts +1 -0
  260. package/dist/lib/utils/capabilities.d.ts +1 -0
  261. package/dist/lib/utils/capabilities.js +5 -0
  262. package/dist/lib/utils/capabilities.mjs +5 -0
  263. package/dist/lib/v2/projection/creative-delivery.d.mts +3 -1
  264. package/dist/lib/v2/projection/creative-delivery.d.ts +3 -1
  265. package/dist/lib/v2/projection/creative-delivery.js +26 -10
  266. package/dist/lib/v2/projection/creative-delivery.mjs +26 -10
  267. package/dist/lib/v2/projection/index.d.mts +1 -1
  268. package/dist/lib/v2/projection/index.d.ts +1 -1
  269. package/dist/lib/v2/projection/legacy-routes.d.mts +24 -2
  270. package/dist/lib/v2/projection/legacy-routes.d.ts +24 -2
  271. package/dist/lib/v2/projection/legacy-routes.js +28 -2
  272. package/dist/lib/v2/projection/legacy-routes.mjs +26 -2
  273. package/dist/lib/validation/schema-loader.d.mts +2 -0
  274. package/dist/lib/validation/schema-loader.d.ts +2 -0
  275. package/dist/lib/validation/schema-loader.js +43 -4
  276. package/dist/lib/validation/schema-loader.mjs +39 -3
  277. package/dist/lib/version.d.mts +3 -3
  278. package/dist/lib/version.d.ts +3 -3
  279. package/dist/lib/version.js +3 -3
  280. package/dist/lib/version.mjs +3 -3
  281. package/docs/TYPE-SUMMARY.md +2 -2
  282. package/docs/guides/DISCOVERY-CACHE-AND-SESSION-REUSE.md +4 -0
  283. package/docs/guides/REPORTING-LEDGER-CUTOVER.md +1 -1
  284. package/docs/guides/REPORTING-LEDGER.md +132 -46
  285. package/docs/guides/REPORTING-OPERATIONS.md +25 -4
  286. package/docs/guides/REPORTING-STABILITY.md +76 -0
  287. package/docs/guides/account-resolution.md +101 -0
  288. package/docs/llms.txt +3 -2
  289. package/docs/migration-12-to-13.md +7 -0
  290. package/docs/migration-14.x-rc-worksheet.md +4 -4
  291. package/docs/migration-agent-identity-3.3.md +355 -0
  292. package/docs/migration-agent-resolution-3.3.md +5 -0
  293. package/docs/migration-reporting-row-storage-alignment.md +137 -0
  294. package/examples/storyboards/account-sync-contract.yaml +57 -0
  295. package/package.json +15 -1
@@ -1,4 +1,10 @@
1
+ import { getWebBotAuthLegacyOriginGate } from "../signing/web-bot-auth.mjs";
1
2
  import { RequestSignatureError } from "../signing/errors.mjs";
3
+ import {
4
+ selectSignatureProfile,
5
+ verifyWebBotAuth,
6
+ WebBotAuthError
7
+ } from "../signing/web-bot-auth.mjs";
2
8
  import { InMemoryReplayStore } from "../signing/replay.mjs";
3
9
  import { InMemoryRevocationStore } from "../signing/revocation.mjs";
4
10
  import {
@@ -23,6 +29,11 @@ import {
23
29
  } from "./auth.mjs";
24
30
  function verifySignatureAsAuthenticator(options) {
25
31
  const replayStore = options.replayStore ?? new InMemoryReplayStore();
32
+ const legacyOriginGate = options.assertLegacyOriginAllowed ?? getWebBotAuthLegacyOriginGate(options.webBotAuth?.resolvePrincipal);
33
+ if (options.webBotAuth && !legacyOriginGate)
34
+ throw new TypeError(
35
+ "Web Bot Auth requires an origin-binding migration fence; use createIdentity33PrincipalResolver or supply assertLegacyOriginAllowed"
36
+ );
26
37
  const revocationStore = options.revocationStore ?? new InMemoryRevocationStore();
27
38
  const authenticator = async (req) => {
28
39
  if (!hasSignatureHeader(req)) return null;
@@ -36,6 +47,46 @@ function verifySignatureAsAuthenticator(options) {
36
47
  };
37
48
  let result;
38
49
  try {
50
+ if (selectSignatureProfile(requestLike) === "web-bot-auth") {
51
+ if (!options.getUrl && !getServeRequestContext(req)?.publicUrl || !options.webBotAuth || !options.capability.profiles?.includes("web-bot-auth"))
52
+ throw new WebBotAuthError(403, "profile_disabled");
53
+ if (req.method !== "GET" && req.rawBody === void 0)
54
+ throw new WebBotAuthError(403, "raw_body_missing");
55
+ const signers = await verifyWebBotAuth(requestLike, {
56
+ directory: options.webBotAuth.directory,
57
+ deferAuthorizationErrors: typeof options.resolveOperation(req) === "string",
58
+ replayStore,
59
+ isRevoked: options.webBotAuth.isRevoked,
60
+ now: options.now,
61
+ requireFreshRevocation: ![
62
+ "get_adcp_capabilities",
63
+ "get_principal",
64
+ "list_creative_formats",
65
+ "list_accounts"
66
+ ].includes(String(options.resolveOperation(req)))
67
+ });
68
+ const principal2 = await options.webBotAuth.resolvePrincipal(
69
+ signers,
70
+ options.resolveOperation(req)
71
+ );
72
+ const signer2 = signers[signers.length - 1];
73
+ req.verifiedSigner = {
74
+ keyid: signer2.keyid,
75
+ agent_url: signer2.origin,
76
+ verified_at: signer2.verified_at
77
+ };
78
+ const failed = signers.find((s) => s.authorizationFailure);
79
+ return {
80
+ ...principal2,
81
+ extra: {
82
+ ...principal2.extra,
83
+ webBotAuthAuthorization: {
84
+ signer: failed ?? signer2,
85
+ ...failed && { authorizationFailure: failed.authorizationFailure }
86
+ }
87
+ }
88
+ };
89
+ }
39
90
  result = await verifyRequestSignature(requestLike, {
40
91
  capability: options.capability,
41
92
  jwks: options.jwks,
@@ -46,7 +97,18 @@ function verifySignatureAsAuthenticator(options) {
46
97
  operation: options.resolveOperation(req),
47
98
  agentUrlForKeyid: options.agentUrlForKeyid
48
99
  });
100
+ if (result.status === "verified" && legacyOriginGate) {
101
+ if (!result.agent_url)
102
+ throw new RequestSignatureError(
103
+ "request_signature_key_unknown",
104
+ 7,
105
+ "Legacy signer must resolve an agent origin when migration fencing is enabled"
106
+ );
107
+ await legacyOriginGate(result.agent_url);
108
+ }
49
109
  } catch (err) {
110
+ if (err instanceof WebBotAuthError)
111
+ throw new AuthError(err.message, { cause: err, status: err.status, headers: err.headers, body: err.body });
50
112
  if (err instanceof RequestSignatureError) {
51
113
  throw new AuthError(`Signature rejected (${err.code}).`, { cause: err });
52
114
  }
@@ -67,7 +129,8 @@ function verifySignatureAsAuthenticator(options) {
67
129
  req.verifiedSigner = signer;
68
130
  return principal;
69
131
  };
70
- return tagAuthenticatorNeedsRawBody(authenticator);
132
+ const tagged = tagAuthenticatorNeedsRawBody(authenticator);
133
+ return options.webBotAuth ? tagAuthenticatorPresenceGated(tagged) : tagged;
71
134
  }
72
135
  function principalForVerifiedSigner(signer, makePrincipal) {
73
136
  if (!SAFE_KEYID.test(signer.keyid)) {
@@ -194,7 +257,7 @@ function logUnresolvable(req) {
194
257
  }
195
258
  const SAFE_KEYID = /^[A-Za-z0-9._-]{1,256}$/;
196
259
  function hasSignatureHeader(req) {
197
- return nonEmptyHeader(req.headers["signature-input"]) || nonEmptyHeader(req.headers["signature"]);
260
+ return req.headers["signature-agent"] !== void 0 || nonEmptyHeader(req.headers["signature-input"]) || nonEmptyHeader(req.headers["signature"]);
198
261
  }
199
262
  function nonEmptyHeader(v) {
200
263
  if (typeof v === "string") return v.length > 0;
@@ -145,8 +145,14 @@ export type Authenticator = (req: IncomingMessage) => AuthResult | Promise<AuthR
145
145
  */
146
146
  export declare class AuthError extends Error {
147
147
  readonly publicMessage: string;
148
+ readonly status?: 400 | 403 | 429;
149
+ readonly body?: Record<string, unknown>;
150
+ readonly headers?: Record<string, string>;
148
151
  constructor(publicMessage: string, options?: {
149
152
  cause?: unknown;
153
+ status?: 400 | 403 | 429;
154
+ headers?: Record<string, string>;
155
+ body?: Record<string, unknown>;
150
156
  });
151
157
  }
152
158
  /**
@@ -145,8 +145,14 @@ export type Authenticator = (req: IncomingMessage) => AuthResult | Promise<AuthR
145
145
  */
146
146
  export declare class AuthError extends Error {
147
147
  readonly publicMessage: string;
148
+ readonly status?: 400 | 403 | 429;
149
+ readonly body?: Record<string, unknown>;
150
+ readonly headers?: Record<string, string>;
148
151
  constructor(publicMessage: string, options?: {
149
152
  cause?: unknown;
153
+ status?: 400 | 403 | 429;
154
+ headers?: Record<string, string>;
155
+ body?: Record<string, unknown>;
150
156
  });
151
157
  }
152
158
  /**
@@ -56,10 +56,16 @@ const DEFAULT_JWT_ALGORITHMS = Object.freeze([
56
56
  const DEFAULT_JWT_CLOCK_TOLERANCE_SECONDS = 30;
57
57
  class AuthError extends Error {
58
58
  publicMessage;
59
+ status;
60
+ body;
61
+ headers;
59
62
  constructor(publicMessage, options) {
60
63
  super(publicMessage);
61
64
  this.name = "AuthError";
62
65
  this.publicMessage = publicMessage;
66
+ this.body = options?.body;
67
+ this.status = options?.status;
68
+ this.headers = options?.headers;
63
69
  if (options?.cause !== void 0) this.cause = options.cause;
64
70
  }
65
71
  }
@@ -17,10 +17,16 @@ const DEFAULT_JWT_ALGORITHMS = Object.freeze([
17
17
  const DEFAULT_JWT_CLOCK_TOLERANCE_SECONDS = 30;
18
18
  class AuthError extends Error {
19
19
  publicMessage;
20
+ status;
21
+ body;
22
+ headers;
20
23
  constructor(publicMessage, options) {
21
24
  super(publicMessage);
22
25
  this.name = "AuthError";
23
26
  this.publicMessage = publicMessage;
27
+ this.body = options?.body;
28
+ this.status = options?.status;
29
+ this.headers = options?.headers;
24
30
  if (options?.cause !== void 0) this.cause = options.cause;
25
31
  }
26
32
  }
@@ -795,7 +795,9 @@ export interface AdcpCapabilitiesConfig {
795
795
  */
796
796
  supported_versions?: string[];
797
797
  features?: Partial<MediaBuyFeatures>;
798
- account?: Partial<AccountCapabilities>;
798
+ account?: Partial<AccountCapabilities> & {
799
+ agent_onboarding?: import('../identity-3.3/types.mjs').AgentOnboarding;
800
+ };
799
801
  creative?: Partial<CreativeCapabilities>;
800
802
  extensions_supported?: readonly string[];
801
803
  /**
@@ -812,7 +814,9 @@ export interface AdcpCapabilitiesConfig {
812
814
  * claim without a working verifier is graded as FAIL by the conformance
813
815
  * runner (see `@adcp/sdk/testing/storyboard/request-signing`).
814
816
  */
815
- request_signing?: NonNullable<GetAdCPCapabilitiesResponse['request_signing']>;
817
+ request_signing?: NonNullable<GetAdCPCapabilitiesResponse['request_signing']> & {
818
+ profiles?: ('adcp/request-signing/v1' | 'web-bot-auth')[];
819
+ };
816
820
  /**
817
821
  * Specialism claims the agent supports. Each entry maps to a storyboard
818
822
  * bundle under `/compliance/{version}/specialisms/{id}/`; the AAO
@@ -884,9 +888,13 @@ export interface AdcpCapabilitiesOverrides {
884
888
  experimental_features?: GetAdCPCapabilitiesResponse['experimental_features'] | null;
885
889
  account?: Partial<NonNullable<GetAdCPCapabilitiesResponse['account']>> | null;
886
890
  compliance_testing?: GetAdCPCapabilitiesResponse['compliance_testing'] | null;
887
- webhook_signing?: GetAdCPCapabilitiesResponse['webhook_signing'] | null;
891
+ webhook_signing?: (NonNullable<GetAdCPCapabilitiesResponse['webhook_signing']> & {
892
+ profiles?: ('adcp/webhook-signing/v1' | 'web-bot-auth')[];
893
+ }) | null;
888
894
  identity?: GetAdCPCapabilitiesResponse['identity'] | null;
889
- request_signing?: GetAdCPCapabilitiesResponse['request_signing'] | null;
895
+ request_signing?: (NonNullable<GetAdCPCapabilitiesResponse['request_signing']> & {
896
+ profiles?: ('adcp/request-signing/v1' | 'web-bot-auth')[];
897
+ }) | null;
890
898
  }
891
899
  /**
892
900
  * Inputs for the auto-wired RFC 9421 request-signature verifier. When set on
@@ -923,6 +931,8 @@ export interface AdcpCapabilitiesOverrides {
923
931
  * abuse / replay-detection guards would be per-request (i.e. broken).
924
932
  */
925
933
  export interface SignedRequestsConfig {
934
+ webBotAuth?: import('./auth-signature.mjs').VerifySignatureAsAuthenticatorOptions['webBotAuth'];
935
+ assertLegacyOriginAllowed?: (agentUrl: string) => Promise<void>;
926
936
  /** Resolves verification keys by `keyid`. */
927
937
  jwks: JwksResolver;
928
938
  /** Stores `(keyid, signature-bytes, expires)` tuples for replay detection. */
@@ -1176,7 +1186,7 @@ export interface AdcpCustomToolConfig<InputArgs extends undefined | ZodRawShapeC
1176
1186
  *
1177
1187
  * @public
1178
1188
  */
1179
- export type WebhooksConfig = Pick<WebhookEmitterOptions, 'signerKey' | 'signerProvider' | 'retries' | 'deliveryStore' | 'idempotencyKeyStore' | 'deliveryRetryHorizonSeconds' | 'deliveryRecovery' | 'generateIdempotencyKey' | 'authorizeAttempt' | 'fetch' | 'userAgent' | 'tag'> & {
1189
+ export type WebhooksConfig = Pick<WebhookEmitterOptions, 'signerKey' | 'signerProvider' | 'webBotAuth' | 'signingProfile' | 'retries' | 'deliveryStore' | 'idempotencyKeyStore' | 'deliveryRetryHorizonSeconds' | 'deliveryRecovery' | 'generateIdempotencyKey' | 'authorizeAttempt' | 'fetch' | 'userAgent' | 'tag'> & {
1180
1190
  /** Stable publisher namespace for shared delivery-store keys. Defaults to the trusted server name. */
1181
1191
  publisherScope?: string;
1182
1192
  /** Trusted fallback namespace for a genuinely single-tenant server. */
@@ -1189,6 +1199,10 @@ export type WebhooksConfig = Pick<WebhookEmitterOptions, 'signerKey' | 'signerPr
1189
1199
  onAttemptObserverError?: WebhookEmitterOptions['onAttemptObserverError'];
1190
1200
  };
1191
1201
  export interface AdcpServerConfig<TAccount = unknown> {
1202
+ /** Experimental 3.3 authorization, invoked before idempotency and handler side effects. */
1203
+ identity33?: {
1204
+ authorize: (ctx: HandlerContext<TAccount>, tool: string, params: unknown) => Promise<void>;
1205
+ };
1192
1206
  name: string;
1193
1207
  version: string;
1194
1208
  /**
@@ -795,7 +795,9 @@ export interface AdcpCapabilitiesConfig {
795
795
  */
796
796
  supported_versions?: string[];
797
797
  features?: Partial<MediaBuyFeatures>;
798
- account?: Partial<AccountCapabilities>;
798
+ account?: Partial<AccountCapabilities> & {
799
+ agent_onboarding?: import('../identity-3.3/types').AgentOnboarding;
800
+ };
799
801
  creative?: Partial<CreativeCapabilities>;
800
802
  extensions_supported?: readonly string[];
801
803
  /**
@@ -812,7 +814,9 @@ export interface AdcpCapabilitiesConfig {
812
814
  * claim without a working verifier is graded as FAIL by the conformance
813
815
  * runner (see `@adcp/sdk/testing/storyboard/request-signing`).
814
816
  */
815
- request_signing?: NonNullable<GetAdCPCapabilitiesResponse['request_signing']>;
817
+ request_signing?: NonNullable<GetAdCPCapabilitiesResponse['request_signing']> & {
818
+ profiles?: ('adcp/request-signing/v1' | 'web-bot-auth')[];
819
+ };
816
820
  /**
817
821
  * Specialism claims the agent supports. Each entry maps to a storyboard
818
822
  * bundle under `/compliance/{version}/specialisms/{id}/`; the AAO
@@ -884,9 +888,13 @@ export interface AdcpCapabilitiesOverrides {
884
888
  experimental_features?: GetAdCPCapabilitiesResponse['experimental_features'] | null;
885
889
  account?: Partial<NonNullable<GetAdCPCapabilitiesResponse['account']>> | null;
886
890
  compliance_testing?: GetAdCPCapabilitiesResponse['compliance_testing'] | null;
887
- webhook_signing?: GetAdCPCapabilitiesResponse['webhook_signing'] | null;
891
+ webhook_signing?: (NonNullable<GetAdCPCapabilitiesResponse['webhook_signing']> & {
892
+ profiles?: ('adcp/webhook-signing/v1' | 'web-bot-auth')[];
893
+ }) | null;
888
894
  identity?: GetAdCPCapabilitiesResponse['identity'] | null;
889
- request_signing?: GetAdCPCapabilitiesResponse['request_signing'] | null;
895
+ request_signing?: (NonNullable<GetAdCPCapabilitiesResponse['request_signing']> & {
896
+ profiles?: ('adcp/request-signing/v1' | 'web-bot-auth')[];
897
+ }) | null;
890
898
  }
891
899
  /**
892
900
  * Inputs for the auto-wired RFC 9421 request-signature verifier. When set on
@@ -923,6 +931,8 @@ export interface AdcpCapabilitiesOverrides {
923
931
  * abuse / replay-detection guards would be per-request (i.e. broken).
924
932
  */
925
933
  export interface SignedRequestsConfig {
934
+ webBotAuth?: import('./auth-signature').VerifySignatureAsAuthenticatorOptions['webBotAuth'];
935
+ assertLegacyOriginAllowed?: (agentUrl: string) => Promise<void>;
926
936
  /** Resolves verification keys by `keyid`. */
927
937
  jwks: JwksResolver;
928
938
  /** Stores `(keyid, signature-bytes, expires)` tuples for replay detection. */
@@ -1176,7 +1186,7 @@ export interface AdcpCustomToolConfig<InputArgs extends undefined | ZodRawShapeC
1176
1186
  *
1177
1187
  * @public
1178
1188
  */
1179
- export type WebhooksConfig = Pick<WebhookEmitterOptions, 'signerKey' | 'signerProvider' | 'retries' | 'deliveryStore' | 'idempotencyKeyStore' | 'deliveryRetryHorizonSeconds' | 'deliveryRecovery' | 'generateIdempotencyKey' | 'authorizeAttempt' | 'fetch' | 'userAgent' | 'tag'> & {
1189
+ export type WebhooksConfig = Pick<WebhookEmitterOptions, 'signerKey' | 'signerProvider' | 'webBotAuth' | 'signingProfile' | 'retries' | 'deliveryStore' | 'idempotencyKeyStore' | 'deliveryRetryHorizonSeconds' | 'deliveryRecovery' | 'generateIdempotencyKey' | 'authorizeAttempt' | 'fetch' | 'userAgent' | 'tag'> & {
1180
1190
  /** Stable publisher namespace for shared delivery-store keys. Defaults to the trusted server name. */
1181
1191
  publisherScope?: string;
1182
1192
  /** Trusted fallback namespace for a genuinely single-tenant server. */
@@ -1189,6 +1199,10 @@ export type WebhooksConfig = Pick<WebhookEmitterOptions, 'signerKey' | 'signerPr
1189
1199
  onAttemptObserverError?: WebhookEmitterOptions['onAttemptObserverError'];
1190
1200
  };
1191
1201
  export interface AdcpServerConfig<TAccount = unknown> {
1202
+ /** Experimental 3.3 authorization, invoked before idempotency and handler side effects. */
1203
+ identity33?: {
1204
+ authorize: (ctx: HandlerContext<TAccount>, tool: string, params: unknown) => Promise<void>;
1205
+ };
1192
1206
  name: string;
1193
1207
  version: string;
1194
1208
  /**