@adcp/sdk 6.9.0 → 6.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (261) hide show
  1. package/bin/adcp.js +285 -5
  2. package/compliance/cache/3.0.6.previous/domains/brand/index.yaml +163 -0
  3. package/compliance/cache/3.0.6.previous/domains/creative/index.yaml +412 -0
  4. package/compliance/cache/3.0.6.previous/domains/governance/index.yaml +683 -0
  5. package/compliance/cache/3.0.6.previous/domains/media-buy/creative-reception.yaml +247 -0
  6. package/compliance/cache/3.0.6.previous/domains/media-buy/index.yaml +769 -0
  7. package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/create_media_buy_async.yaml +232 -0
  8. package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/creative_fate_after_cancellation.yaml +414 -0
  9. package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/delivery_reporting.yaml +205 -0
  10. package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/governance_approved.yaml +211 -0
  11. package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/governance_conditions.yaml +196 -0
  12. package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/governance_denied.yaml +192 -0
  13. package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/governance_denied_recovery.yaml +244 -0
  14. package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/invalid_transitions.yaml +284 -0
  15. package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/inventory_list_no_match.yaml +143 -0
  16. package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/inventory_list_targeting.yaml +271 -0
  17. package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/measurement_terms_rejected.yaml +195 -0
  18. package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/pending_creatives_to_start.yaml +250 -0
  19. package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/proposal_finalize.yaml +243 -0
  20. package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/refine_products.yaml +148 -0
  21. package/compliance/cache/3.0.6.previous/domains/media-buy/state-machine.yaml +442 -0
  22. package/compliance/cache/3.0.6.previous/domains/signals/index.yaml +266 -0
  23. package/compliance/cache/3.0.6.previous/domains/sponsored-intelligence/index.yaml +256 -0
  24. package/compliance/cache/3.0.6.previous/index.json +324 -0
  25. package/compliance/cache/3.0.6.previous/protocols/brand/index.yaml +163 -0
  26. package/compliance/cache/3.0.6.previous/protocols/creative/index.yaml +412 -0
  27. package/compliance/cache/3.0.6.previous/protocols/governance/index.yaml +683 -0
  28. package/compliance/cache/3.0.6.previous/protocols/media-buy/creative-reception.yaml +247 -0
  29. package/compliance/cache/3.0.6.previous/protocols/media-buy/index.yaml +769 -0
  30. package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/create_media_buy_async.yaml +232 -0
  31. package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/creative_fate_after_cancellation.yaml +414 -0
  32. package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/delivery_reporting.yaml +205 -0
  33. package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/governance_approved.yaml +211 -0
  34. package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/governance_conditions.yaml +196 -0
  35. package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/governance_denied.yaml +192 -0
  36. package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/governance_denied_recovery.yaml +244 -0
  37. package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/invalid_transitions.yaml +284 -0
  38. package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/inventory_list_no_match.yaml +143 -0
  39. package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/inventory_list_targeting.yaml +271 -0
  40. package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/measurement_terms_rejected.yaml +195 -0
  41. package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/pending_creatives_to_start.yaml +250 -0
  42. package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/proposal_finalize.yaml +243 -0
  43. package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/refine_products.yaml +148 -0
  44. package/compliance/cache/3.0.6.previous/protocols/media-buy/state-machine.yaml +442 -0
  45. package/compliance/cache/3.0.6.previous/protocols/signals/index.yaml +266 -0
  46. package/compliance/cache/3.0.6.previous/protocols/sponsored-intelligence/index.yaml +256 -0
  47. package/compliance/cache/3.0.6.previous/specialisms/audience-sync/index.yaml +280 -0
  48. package/compliance/cache/3.0.6.previous/specialisms/brand-rights/index.yaml +350 -0
  49. package/compliance/cache/3.0.6.previous/specialisms/brand-rights/scenarios/governance_denied.yaml +204 -0
  50. package/compliance/cache/3.0.6.previous/specialisms/collection-lists/index.yaml +359 -0
  51. package/compliance/cache/3.0.6.previous/specialisms/content-standards/index.yaml +572 -0
  52. package/compliance/cache/3.0.6.previous/specialisms/creative-ad-server/index.yaml +383 -0
  53. package/compliance/cache/3.0.6.previous/specialisms/creative-generative/generative-seller.yaml +758 -0
  54. package/compliance/cache/3.0.6.previous/specialisms/creative-generative/index.yaml +746 -0
  55. package/compliance/cache/3.0.6.previous/specialisms/creative-template/index.yaml +413 -0
  56. package/compliance/cache/3.0.6.previous/specialisms/governance-aware-seller/index.yaml +136 -0
  57. package/compliance/cache/3.0.6.previous/specialisms/governance-delivery-monitor/index.yaml +441 -0
  58. package/compliance/cache/3.0.6.previous/specialisms/governance-spend-authority/denied.yaml +221 -0
  59. package/compliance/cache/3.0.6.previous/specialisms/governance-spend-authority/index.yaml +330 -0
  60. package/compliance/cache/3.0.6.previous/specialisms/property-lists/index.yaml +482 -0
  61. package/compliance/cache/3.0.6.previous/specialisms/sales-broadcast-tv/index.yaml +689 -0
  62. package/compliance/cache/3.0.6.previous/specialisms/sales-catalog-driven/index.yaml +779 -0
  63. package/compliance/cache/3.0.6.previous/specialisms/sales-guaranteed/index.yaml +504 -0
  64. package/compliance/cache/3.0.6.previous/specialisms/sales-non-guaranteed/index.yaml +428 -0
  65. package/compliance/cache/3.0.6.previous/specialisms/sales-proposal-mode/index.yaml +520 -0
  66. package/compliance/cache/3.0.6.previous/specialisms/sales-social/index.yaml +584 -0
  67. package/compliance/cache/3.0.6.previous/specialisms/signal-marketplace/index.yaml +415 -0
  68. package/compliance/cache/3.0.6.previous/specialisms/signal-marketplace/scenarios/governance_denied.yaml +207 -0
  69. package/compliance/cache/3.0.6.previous/specialisms/signal-owned/index.yaml +316 -0
  70. package/compliance/cache/3.0.6.previous/test-kits/acme-outdoor.yaml +210 -0
  71. package/compliance/cache/3.0.6.previous/test-kits/bistro-oranje.yaml +126 -0
  72. package/compliance/cache/3.0.6.previous/test-kits/nova-motors.yaml +262 -0
  73. package/compliance/cache/3.0.6.previous/test-kits/osei-natural.yaml +126 -0
  74. package/compliance/cache/3.0.6.previous/test-kits/signed-requests-runner.yaml +155 -0
  75. package/compliance/cache/3.0.6.previous/test-kits/substitution-observer-runner.yaml +690 -0
  76. package/compliance/cache/3.0.6.previous/test-kits/summit-foods.yaml +125 -0
  77. package/compliance/cache/3.0.6.previous/test-kits/webhook-receiver-runner.yaml +265 -0
  78. package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/001-minimal-plan.json +43 -0
  79. package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/002-full-plan.json +217 -0
  80. package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/003-bookkeeping-stripped.json +60 -0
  81. package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/004a-human-review-omitted.json +43 -0
  82. package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/004b-human-review-explicit-null.json +49 -0
  83. package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/005a-policy-categories-order-1.json +53 -0
  84. package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/005b-policy-categories-order-2.json +57 -0
  85. package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/006a-ext-trace-v1.json +49 -0
  86. package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/006b-ext-trace-v2.json +53 -0
  87. package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/007-unicode-objectives.json +43 -0
  88. package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/008-numeric-canonicalization.json +65 -0
  89. package/compliance/cache/3.0.6.previous/test-vectors/request-signing/README.md +219 -0
  90. package/compliance/cache/3.0.6.previous/test-vectors/request-signing/canonicalization.json +241 -0
  91. package/compliance/cache/3.0.6.previous/test-vectors/request-signing/keys.json +60 -0
  92. package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/001-no-signature-header.json +24 -0
  93. package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/002-wrong-tag.json +26 -0
  94. package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/003-expired-signature.json +26 -0
  95. package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/004-window-too-long.json +26 -0
  96. package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/005-alg-not-allowed.json +26 -0
  97. package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/006-missing-covered-component.json +26 -0
  98. package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/007-missing-content-digest.json +26 -0
  99. package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/008-unknown-keyid.json +26 -0
  100. package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/009-key-ops-missing-verify.json +27 -0
  101. package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/010-content-digest-mismatch.json +33 -0
  102. package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/011-malformed-header.json +27 -0
  103. package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/012-missing-expires-param.json +26 -0
  104. package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/013-expires-le-created.json +27 -0
  105. package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/014-missing-nonce-param.json +27 -0
  106. package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/015-signature-invalid.json +28 -0
  107. package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/016-replayed-nonce.json +35 -0
  108. package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/017-key-revoked.json +38 -0
  109. package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/018-digest-covered-when-forbidden.json +28 -0
  110. package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/019-signature-without-signature-input.json +26 -0
  111. package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/020-rate-abuse.json +34 -0
  112. package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/021-duplicate-signature-input-label.json +31 -0
  113. package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/022-multi-valued-content-type.json +31 -0
  114. package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/023-multi-valued-content-digest.json +32 -0
  115. package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/024-unquoted-string-param.json +31 -0
  116. package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/025-jwk-alg-crv-mismatch.json +43 -0
  117. package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/026-non-ascii-host.json +31 -0
  118. package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/027-webhook-registration-authentication-unsigned.json +25 -0
  119. package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/001-basic-post.json +30 -0
  120. package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/002-post-with-content-digest.json +31 -0
  121. package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/003-es256-post.json +30 -0
  122. package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/004-multiple-signature-labels.json +26 -0
  123. package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/005-default-port-stripped.json +30 -0
  124. package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/006-dot-segment-path.json +30 -0
  125. package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/007-query-byte-preserved.json +30 -0
  126. package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/008-percent-encoded-path.json +30 -0
  127. package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/009-percent-encoded-unreserved-decoded.json +30 -0
  128. package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/010-percent-encoded-slash-preserved.json +30 -0
  129. package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/011-ipv6-authority.json +30 -0
  130. package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/012-ipv6-authority-default-port-stripped.json +30 -0
  131. package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/README.md +211 -0
  132. package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/keys.json +61 -0
  133. package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/001-wrong-tag.json +26 -0
  134. package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/002-expired-signature.json +26 -0
  135. package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/003-window-too-long.json +26 -0
  136. package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/004-alg-not-allowed.json +26 -0
  137. package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/005-missing-authority-component.json +26 -0
  138. package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/006-missing-content-digest.json +25 -0
  139. package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/007-unknown-keyid.json +26 -0
  140. package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/008-wrong-adcp-use.json +26 -0
  141. package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/009-content-digest-mismatch.json +26 -0
  142. package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/010-malformed-signature-input.json +26 -0
  143. package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/011-signature-without-input.json +25 -0
  144. package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/012-missing-expires-param.json +26 -0
  145. package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/013-expires-le-created.json +26 -0
  146. package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/014-missing-nonce-param.json +26 -0
  147. package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/015-signature-invalid.json +26 -0
  148. package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/016-replayed-nonce.json +37 -0
  149. package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/017-key-revoked.json +32 -0
  150. package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/018-rate-abuse.json +33 -0
  151. package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/019-revocation-stale.json +32 -0
  152. package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/020-key-ops-missing-verify.json +41 -0
  153. package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/021-base64-alphabet-mixing.json +26 -0
  154. package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/positive/001-basic-post.json +24 -0
  155. package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/positive/002-es256-post.json +24 -0
  156. package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/positive/003-multiple-signature-labels.json +24 -0
  157. package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/positive/004-default-port-stripped.json +24 -0
  158. package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/positive/005-percent-encoded-path.json +24 -0
  159. package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/positive/006-query-byte-preserved.json +24 -0
  160. package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/positive/007-body-without-idempotency-key.json +25 -0
  161. package/compliance/cache/3.0.6.previous/universal/capability-discovery.yaml +125 -0
  162. package/compliance/cache/3.0.6.previous/universal/collection-lists-pagination-integrity.yaml +306 -0
  163. package/compliance/cache/3.0.6.previous/universal/content-standards-pagination-integrity.yaml +326 -0
  164. package/compliance/cache/3.0.6.previous/universal/deterministic-testing.yaml +1343 -0
  165. package/compliance/cache/3.0.6.previous/universal/error-compliance.yaml +474 -0
  166. package/compliance/cache/3.0.6.previous/universal/fictional-entities.yaml +307 -0
  167. package/compliance/cache/3.0.6.previous/universal/get-media-buys-pagination-integrity.yaml +160 -0
  168. package/compliance/cache/3.0.6.previous/universal/get-signals-pagination-integrity.yaml +211 -0
  169. package/compliance/cache/3.0.6.previous/universal/idempotency.yaml +593 -0
  170. package/compliance/cache/3.0.6.previous/universal/pagination-integrity-creative-formats.yaml +258 -0
  171. package/compliance/cache/3.0.6.previous/universal/pagination-integrity-list-accounts.yaml +262 -0
  172. package/compliance/cache/3.0.6.previous/universal/pagination-integrity.yaml +263 -0
  173. package/compliance/cache/3.0.6.previous/universal/property-lists-pagination-integrity.yaml +307 -0
  174. package/compliance/cache/3.0.6.previous/universal/runner-output-contract.yaml +358 -0
  175. package/compliance/cache/3.0.6.previous/universal/schema-validation.yaml +526 -0
  176. package/compliance/cache/3.0.6.previous/universal/security.yaml +431 -0
  177. package/compliance/cache/3.0.6.previous/universal/signed-requests.yaml +205 -0
  178. package/compliance/cache/3.0.6.previous/universal/storyboard-schema.yaml +1176 -0
  179. package/compliance/cache/3.0.6.previous/universal/v3-envelope-integrity.yaml +106 -0
  180. package/compliance/cache/3.0.6.previous/universal/webhook-emission.yaml +337 -0
  181. package/dist/lib/schemas-data/v2.5/_provenance.json +1 -1
  182. package/dist/lib/server/create-adcp-server.d.ts +33 -0
  183. package/dist/lib/server/create-adcp-server.d.ts.map +1 -1
  184. package/dist/lib/server/create-adcp-server.js +127 -1
  185. package/dist/lib/server/create-adcp-server.js.map +1 -1
  186. package/dist/lib/server/credential-policy.d.ts +221 -0
  187. package/dist/lib/server/credential-policy.d.ts.map +1 -0
  188. package/dist/lib/server/credential-policy.js +260 -0
  189. package/dist/lib/server/credential-policy.js.map +1 -0
  190. package/dist/lib/server/decisioning/async-outcome.d.ts +17 -0
  191. package/dist/lib/server/decisioning/async-outcome.d.ts.map +1 -1
  192. package/dist/lib/server/decisioning/async-outcome.js +23 -18
  193. package/dist/lib/server/decisioning/async-outcome.js.map +1 -1
  194. package/dist/lib/server/decisioning/context.d.ts +8 -2
  195. package/dist/lib/server/decisioning/context.d.ts.map +1 -1
  196. package/dist/lib/server/decisioning/index.d.ts +1 -0
  197. package/dist/lib/server/decisioning/index.d.ts.map +1 -1
  198. package/dist/lib/server/decisioning/index.js.map +1 -1
  199. package/dist/lib/server/decisioning/runtime/from-platform.js +6 -4
  200. package/dist/lib/server/decisioning/runtime/from-platform.js.map +1 -1
  201. package/dist/lib/server/decisioning/runtime/postgres-task-registry.d.ts.map +1 -1
  202. package/dist/lib/server/decisioning/runtime/postgres-task-registry.js +5 -2
  203. package/dist/lib/server/decisioning/runtime/postgres-task-registry.js.map +1 -1
  204. package/dist/lib/server/decisioning/runtime/task-registry.d.ts +5 -0
  205. package/dist/lib/server/decisioning/runtime/task-registry.d.ts.map +1 -1
  206. package/dist/lib/server/decisioning/runtime/task-registry.js +4 -1
  207. package/dist/lib/server/decisioning/runtime/task-registry.js.map +1 -1
  208. package/dist/lib/server/decisioning/runtime/to-context.d.ts.map +1 -1
  209. package/dist/lib/server/decisioning/runtime/to-context.js +10 -2
  210. package/dist/lib/server/decisioning/runtime/to-context.js.map +1 -1
  211. package/dist/lib/server/dynamic-registry.d.ts +219 -0
  212. package/dist/lib/server/dynamic-registry.d.ts.map +1 -0
  213. package/dist/lib/server/dynamic-registry.js +245 -0
  214. package/dist/lib/server/dynamic-registry.js.map +1 -0
  215. package/dist/lib/server/index.d.ts +8 -0
  216. package/dist/lib/server/index.d.ts.map +1 -1
  217. package/dist/lib/server/index.js +15 -4
  218. package/dist/lib/server/index.js.map +1 -1
  219. package/dist/lib/server/operational-platform.d.ts +239 -0
  220. package/dist/lib/server/operational-platform.d.ts.map +1 -0
  221. package/dist/lib/server/operational-platform.js +94 -0
  222. package/dist/lib/server/operational-platform.js.map +1 -0
  223. package/dist/lib/server/test-controller.d.ts +2 -0
  224. package/dist/lib/server/test-controller.d.ts.map +1 -1
  225. package/dist/lib/server/test-controller.js +6 -11
  226. package/dist/lib/server/test-controller.js.map +1 -1
  227. package/dist/lib/server/wire-safe.d.ts +211 -0
  228. package/dist/lib/server/wire-safe.d.ts.map +1 -0
  229. package/dist/lib/server/wire-safe.js +231 -0
  230. package/dist/lib/server/wire-safe.js.map +1 -0
  231. package/dist/lib/server/wire-spec-fields.generated.d.ts +168 -0
  232. package/dist/lib/server/wire-spec-fields.generated.d.ts.map +1 -0
  233. package/dist/lib/server/wire-spec-fields.generated.js +172 -0
  234. package/dist/lib/server/wire-spec-fields.generated.js.map +1 -0
  235. package/dist/lib/testing/compliance/index.d.ts +2 -0
  236. package/dist/lib/testing/compliance/index.d.ts.map +1 -1
  237. package/dist/lib/testing/compliance/index.js +6 -1
  238. package/dist/lib/testing/compliance/index.js.map +1 -1
  239. package/dist/lib/testing/compliance/summary.d.ts +77 -0
  240. package/dist/lib/testing/compliance/summary.d.ts.map +1 -0
  241. package/dist/lib/testing/compliance/summary.js +176 -0
  242. package/dist/lib/testing/compliance/summary.js.map +1 -0
  243. package/dist/lib/testing/comply-controller.d.ts +2 -0
  244. package/dist/lib/testing/comply-controller.d.ts.map +1 -1
  245. package/dist/lib/testing/comply-controller.js.map +1 -1
  246. package/dist/lib/testing/storyboard/compliance.d.ts +26 -0
  247. package/dist/lib/testing/storyboard/compliance.d.ts.map +1 -1
  248. package/dist/lib/testing/storyboard/compliance.js +51 -0
  249. package/dist/lib/testing/storyboard/compliance.js.map +1 -1
  250. package/dist/lib/testing/storyboard/index.d.ts +2 -2
  251. package/dist/lib/testing/storyboard/index.d.ts.map +1 -1
  252. package/dist/lib/testing/storyboard/index.js +4 -2
  253. package/dist/lib/testing/storyboard/index.js.map +1 -1
  254. package/dist/lib/testing/storyboard/runner.d.ts.map +1 -1
  255. package/dist/lib/testing/storyboard/runner.js +58 -5
  256. package/dist/lib/testing/storyboard/runner.js.map +1 -1
  257. package/dist/lib/version.d.ts +3 -3
  258. package/dist/lib/version.d.ts.map +1 -1
  259. package/dist/lib/version.js +3 -3
  260. package/dist/lib/version.js.map +1 -1
  261. package/package.json +2 -2
@@ -0,0 +1,211 @@
1
+ /**
2
+ * Wire-spec field discipline at the operational fan-out boundary.
3
+ *
4
+ * `WireSafe<T>` is a branded type that signals "this object has been
5
+ * stripped to AdCP wire-spec fields and is safe to forward upstream."
6
+ * The brand is constructed only by {@link pickWireSpecFields} (or
7
+ * variants). Code that spreads a buyer request directly cannot satisfy
8
+ * the brand — `{ ...buyerReq, paused: true }` is `T`, not
9
+ * `WireSafe<T>`.
10
+ *
11
+ * The brand is the L2 of #1529: where L1 (`credentialPolicy`,
12
+ * `src/lib/server/credential-policy.ts`) catches credential-shaped
13
+ * keys at the buyer-facing dispatch boundary, L2 catches structural
14
+ * leakage at the operational dispatch boundary — storefront fan-out
15
+ * code that picks per-target args from a buyer request, where the
16
+ * scrub happens BEFORE the credential scan would have run on the
17
+ * upstream call.
18
+ *
19
+ * **The brand is opt-in at the type level.** `OperationalPlatform`
20
+ * methods accept plain `UpdateMediaBuyRequest` etc. (not branded —
21
+ * see #1530's interface), so adopters who don't use the helper
22
+ * aren't broken. Adopters who DO use the helper get the safety
23
+ * benefit at the picking site: assigning the result to a
24
+ * `WireSafe<UpdateMediaBuyRequest>` variable forces `pickWireSpecFields`
25
+ * to be the constructor; spreading the buyer request elsewhere fails
26
+ * to satisfy the brand.
27
+ *
28
+ * **Migration footgun:** `pickWireSpecFields` ALONE doesn't close
29
+ * the round-2 / round-3 vectors (nested `context.<x>_access_token`,
30
+ * nested `ext.<x>_access_token`). `ext` and `context` are wire-spec
31
+ * fields, so the helper preserves them whole. Storefronts that fan
32
+ * out MUST chain {@link scrubExtensions} after the pick — that helper
33
+ * filters ext/context to a caller-specified key allowlist AND
34
+ * recursively drops credential-shaped keys at any depth (using the
35
+ * L1 default pattern set or an adopter-supplied matcher). Calling
36
+ * `pickWireSpecFields` without `scrubExtensions` reopens the
37
+ * round-2/round-3 attack surface.
38
+ *
39
+ * @see docs/guides/CTX-METADATA-SAFETY.md
40
+ * @see scripts/generate-wire-spec-fields.ts — codegen for the
41
+ * allowlist constants this module reads.
42
+ *
43
+ * @public
44
+ */
45
+ import { type CredentialPatternsConfig } from './credential-policy';
46
+ import { WIRE_SPEC_FIELDS, type WireSpecRequestName } from './wire-spec-fields.generated';
47
+ declare const __wireSafe: unique symbol;
48
+ /**
49
+ * A request shape that has been narrowed to AdCP wire-spec fields.
50
+ * Cannot be produced by spreading a buyer request — only via
51
+ * {@link pickWireSpecFields} or by typed `as WireSafe<T>` assertion
52
+ * at a known-safe construction site (e.g. a poller that builds the
53
+ * request from stored state, not from buyer input).
54
+ *
55
+ * The brand is what makes this load-bearing: `{ ...buyerRequest }` is
56
+ * `T`, not `WireSafe<T>`, so passing it where `WireSafe<T>` is
57
+ * required is a compile error.
58
+ */
59
+ export type WireSafe<T> = T & {
60
+ readonly [__wireSafe]: true;
61
+ };
62
+ export type { WireSpecRequestName };
63
+ export { WIRE_SPEC_FIELDS };
64
+ /**
65
+ * The wire-spec request type associated with a `WireSpecRequestName`.
66
+ * Internal — adopters access it transparently via
67
+ * `pickWireSpecFields`'s return narrowing.
68
+ */
69
+ type WireSpecRequestShape<K extends WireSpecRequestName> = (typeof WIRE_SPEC_FIELDS)[K]['__type'];
70
+ /**
71
+ * Strip a buyer request to the wire-spec fields defined for
72
+ * `schemaName` and return the result branded `WireSafe<T>`. The
73
+ * canonical constructor of {@link WireSafe}.
74
+ *
75
+ * Drops every property NOT in the schema's `properties` allowlist,
76
+ * including buyer-supplied unknown keys (`<platform>_access_token`,
77
+ * `account: { brand: 'attacker.com' }`-style identity-pivot fields,
78
+ * arbitrary attacker payload). The allowlist comes from codegen — the
79
+ * AdCP request schema IS the allowlist; drift is structurally
80
+ * impossible.
81
+ *
82
+ * **Top-level only.** `ext` and `context` are wire-spec fields and
83
+ * are preserved verbatim by this helper. Storefronts MUST chain
84
+ * {@link scrubExtensions} to drop nested credentials in those
85
+ * envelopes. See the module-level migration footgun warning.
86
+ *
87
+ * Storefronts call this once per upstream target during fan-out:
88
+ *
89
+ * ```ts
90
+ * const safe = pickWireSpecFields(buyerReq, 'UpdateMediaBuyRequest');
91
+ * for (const target of targets) {
92
+ * const perTarget = scrubExtensions(safe, { ... });
93
+ * await operational.updateMediaBuy(ctxFor(target), perTarget);
94
+ * }
95
+ * ```
96
+ *
97
+ * Pollers that construct requests from stored state typically don't
98
+ * need this — their inputs aren't buyer-controlled. They can opt in
99
+ * for symmetric type safety with `as WireSafe<T>` if their type
100
+ * system encourages it, or call this helper anyway (the strip is a
101
+ * no-op when input is already wire-spec only).
102
+ *
103
+ * @param request - Buyer-supplied (or otherwise untrusted) input.
104
+ * @param schemaName - PascalCase request type name from
105
+ * {@link WIRE_SPEC_FIELDS}. TypeScript narrows the return type to
106
+ * `WireSafe<RequestType>` based on this — so
107
+ * `pickWireSpecFields(req, 'UpdateMediaBuyRequest')` returns
108
+ * `WireSafe<UpdateMediaBuyRequest>`.
109
+ *
110
+ * @example
111
+ * ```ts
112
+ * import { pickWireSpecFields } from '@adcp/sdk/server';
113
+ *
114
+ * // Buyer sends:
115
+ * // { media_buy_id: 'mb_1', paused: true, snap_access_token: 'attacker' }
116
+ * const safe = pickWireSpecFields(buyerReq, 'UpdateMediaBuyRequest');
117
+ * // safe: WireSafe<UpdateMediaBuyRequest>
118
+ * // value: { media_buy_id: 'mb_1', paused: true } — credential dropped
119
+ * ```
120
+ */
121
+ export declare function pickWireSpecFields<K extends WireSpecRequestName>(request: unknown, schemaName: K): WireSafe<WireSpecRequestShape<K>>;
122
+ /**
123
+ * Apply an extension-object allowlist to a `WireSafe<T>` and
124
+ * recursively scrub credential-shaped values. Closes the round-2 /
125
+ * round-3 nested-credential vectors that `pickWireSpecFields` alone
126
+ * leaves open (because `ext` and `context` are wire-spec fields and
127
+ * are preserved verbatim by the pick).
128
+ *
129
+ * Three operations, applied in order:
130
+ *
131
+ * 1. **Top-level allowlist filter** (when `allowedExtKeys` is set):
132
+ * drop keys from `ext` and `context` that aren't in the
133
+ * allowlist. Pass an empty Set to drop both fields entirely;
134
+ * pass `undefined` to leave the top level untouched.
135
+ * 2. **Recursive credential scan** (when `recursiveCredentialScan`
136
+ * is `true`, default): walk surviving values in `ext`/`context`
137
+ * at any depth and drop nested keys that match the L1
138
+ * credential-pattern set (or an adopter-supplied matcher). Closes
139
+ * `ext.partner.token` and similar deep-nesting attack vectors.
140
+ * 3. **Adopter inject** (when `inject` is set): merge
141
+ * storefront-controlled values into `ext` and/or `context`.
142
+ * Inject runs LAST so storefront-resolved credentials override
143
+ * any allowlisted buyer values that collide.
144
+ *
145
+ * The `WireSafe<T>` brand survives — the operation is closed over
146
+ * the wire-spec field set.
147
+ *
148
+ * @example
149
+ * ```ts
150
+ * const safe = pickWireSpecFields(buyerReq, 'UpdateMediaBuyRequest');
151
+ * const perTarget = scrubExtensions(safe, {
152
+ * allowedExtKeys: new Set(['scope3_api_key', 'partner_request_id']),
153
+ * inject: {
154
+ * context: {
155
+ * managed_access_token: target.token,
156
+ * managed_advertiser_id: target.advertiserId,
157
+ * },
158
+ * },
159
+ * });
160
+ * ```
161
+ */
162
+ export interface ScrubExtensionsOptions {
163
+ /**
164
+ * Set of keys permitted to survive on `ext` and `context`. Keys
165
+ * outside this set are dropped from both. Pass `undefined` to leave
166
+ * `ext`/`context` top-level untouched (only the recursive scan and
167
+ * `inject` apply); pass an empty set to drop both entirely.
168
+ */
169
+ allowedExtKeys?: ReadonlySet<string>;
170
+ /**
171
+ * When true (default), recursively walk surviving `ext`/`context`
172
+ * values and drop nested keys matching the credential-pattern set.
173
+ * Closes round-4-style deep-nesting attack vectors that the
174
+ * top-level allowlist alone cannot — e.g. an adopter who allowlists
175
+ * `partner` and forgets that `partner.token` is buyer-controlled.
176
+ *
177
+ * Set to `false` only when you've validated the surviving
178
+ * `ext`/`context` shapes yourself (e.g. via Zod-typed extensions).
179
+ */
180
+ recursiveCredentialScan?: boolean;
181
+ /**
182
+ * Optional matcher overrides for the recursive scan. Defaults to
183
+ * the L1 credential-policy default pattern set
184
+ * ({@link DEFAULT_CREDENTIAL_PATTERNS}). Pass `extend` to add
185
+ * adopter-specific patterns; pass `matcher` to fully replace the
186
+ * regex set.
187
+ */
188
+ credentialPatterns?: CredentialPatternsConfig;
189
+ /**
190
+ * Adopter-controlled values to merge into `ext` and/or `context`
191
+ * AFTER the allowlist filter and recursive scan run. Used to inject
192
+ * storefront-owned routing tokens (e.g. resolved per-target
193
+ * advertiser IDs) into the per-target request.
194
+ *
195
+ * **Adopter-side ONLY — values here MUST be storefront-derived,
196
+ * never read from the incoming buyer request.** Threading buyer-
197
+ * controlled values through `inject` defeats the discipline.
198
+ * Values injected here bypass the recursive credential scan and
199
+ * are merged in after it completes — ensure they are fully
200
+ * storefront-derived, never shaped by buyer input.
201
+ */
202
+ inject?: {
203
+ ext?: Record<string, unknown>;
204
+ context?: Record<string, unknown>;
205
+ };
206
+ }
207
+ /**
208
+ * Implementation of {@link ScrubExtensionsOptions}. See JSDoc above.
209
+ */
210
+ export declare function scrubExtensions<T extends object>(request: WireSafe<T>, options: ScrubExtensionsOptions): WireSafe<T>;
211
+ //# sourceMappingURL=wire-safe.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wire-safe.d.ts","sourceRoot":"","sources":["../../../src/lib/server/wire-safe.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AAEH,OAAO,EAA0B,KAAK,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC5F,OAAO,EAAE,gBAAgB,EAAE,KAAK,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAE1F,OAAO,CAAC,MAAM,UAAU,EAAE,OAAO,MAAM,CAAC;AAExC;;;;;;;;;;GAUG;AACH,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG;IAAE,QAAQ,CAAC,CAAC,UAAU,CAAC,EAAE,IAAI,CAAA;CAAE,CAAC;AAE9D,YAAY,EAAE,mBAAmB,EAAE,CAAC;AAEpC,OAAO,EAAE,gBAAgB,EAAE,CAAC;AAE5B;;;;GAIG;AACH,KAAK,oBAAoB,CAAC,CAAC,SAAS,mBAAmB,IAAI,CAAC,OAAO,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;AAElG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,mBAAmB,EAC9D,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,CAAC,GACZ,QAAQ,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAuBnC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,MAAM,WAAW,sBAAsB;IACrC;;;;;OAKG;IACH,cAAc,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAErC;;;;;;;;;OASG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAElC;;;;;;OAMG;IACH,kBAAkB,CAAC,EAAE,wBAAwB,CAAC;IAE9C;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,EAAE;QACP,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC9B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACnC,CAAC;CACH;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,CAAC,SAAS,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,sBAAsB,GAAG,QAAQ,CAAC,CAAC,CAAC,CAyDpH"}
@@ -0,0 +1,231 @@
1
+ "use strict";
2
+ /**
3
+ * Wire-spec field discipline at the operational fan-out boundary.
4
+ *
5
+ * `WireSafe<T>` is a branded type that signals "this object has been
6
+ * stripped to AdCP wire-spec fields and is safe to forward upstream."
7
+ * The brand is constructed only by {@link pickWireSpecFields} (or
8
+ * variants). Code that spreads a buyer request directly cannot satisfy
9
+ * the brand — `{ ...buyerReq, paused: true }` is `T`, not
10
+ * `WireSafe<T>`.
11
+ *
12
+ * The brand is the L2 of #1529: where L1 (`credentialPolicy`,
13
+ * `src/lib/server/credential-policy.ts`) catches credential-shaped
14
+ * keys at the buyer-facing dispatch boundary, L2 catches structural
15
+ * leakage at the operational dispatch boundary — storefront fan-out
16
+ * code that picks per-target args from a buyer request, where the
17
+ * scrub happens BEFORE the credential scan would have run on the
18
+ * upstream call.
19
+ *
20
+ * **The brand is opt-in at the type level.** `OperationalPlatform`
21
+ * methods accept plain `UpdateMediaBuyRequest` etc. (not branded —
22
+ * see #1530's interface), so adopters who don't use the helper
23
+ * aren't broken. Adopters who DO use the helper get the safety
24
+ * benefit at the picking site: assigning the result to a
25
+ * `WireSafe<UpdateMediaBuyRequest>` variable forces `pickWireSpecFields`
26
+ * to be the constructor; spreading the buyer request elsewhere fails
27
+ * to satisfy the brand.
28
+ *
29
+ * **Migration footgun:** `pickWireSpecFields` ALONE doesn't close
30
+ * the round-2 / round-3 vectors (nested `context.<x>_access_token`,
31
+ * nested `ext.<x>_access_token`). `ext` and `context` are wire-spec
32
+ * fields, so the helper preserves them whole. Storefronts that fan
33
+ * out MUST chain {@link scrubExtensions} after the pick — that helper
34
+ * filters ext/context to a caller-specified key allowlist AND
35
+ * recursively drops credential-shaped keys at any depth (using the
36
+ * L1 default pattern set or an adopter-supplied matcher). Calling
37
+ * `pickWireSpecFields` without `scrubExtensions` reopens the
38
+ * round-2/round-3 attack surface.
39
+ *
40
+ * @see docs/guides/CTX-METADATA-SAFETY.md
41
+ * @see scripts/generate-wire-spec-fields.ts — codegen for the
42
+ * allowlist constants this module reads.
43
+ *
44
+ * @public
45
+ */
46
+ Object.defineProperty(exports, "__esModule", { value: true });
47
+ exports.WIRE_SPEC_FIELDS = void 0;
48
+ exports.pickWireSpecFields = pickWireSpecFields;
49
+ exports.scrubExtensions = scrubExtensions;
50
+ const credential_policy_1 = require("./credential-policy");
51
+ const wire_spec_fields_generated_1 = require("./wire-spec-fields.generated");
52
+ Object.defineProperty(exports, "WIRE_SPEC_FIELDS", { enumerable: true, get: function () { return wire_spec_fields_generated_1.WIRE_SPEC_FIELDS; } });
53
+ /**
54
+ * Strip a buyer request to the wire-spec fields defined for
55
+ * `schemaName` and return the result branded `WireSafe<T>`. The
56
+ * canonical constructor of {@link WireSafe}.
57
+ *
58
+ * Drops every property NOT in the schema's `properties` allowlist,
59
+ * including buyer-supplied unknown keys (`<platform>_access_token`,
60
+ * `account: { brand: 'attacker.com' }`-style identity-pivot fields,
61
+ * arbitrary attacker payload). The allowlist comes from codegen — the
62
+ * AdCP request schema IS the allowlist; drift is structurally
63
+ * impossible.
64
+ *
65
+ * **Top-level only.** `ext` and `context` are wire-spec fields and
66
+ * are preserved verbatim by this helper. Storefronts MUST chain
67
+ * {@link scrubExtensions} to drop nested credentials in those
68
+ * envelopes. See the module-level migration footgun warning.
69
+ *
70
+ * Storefronts call this once per upstream target during fan-out:
71
+ *
72
+ * ```ts
73
+ * const safe = pickWireSpecFields(buyerReq, 'UpdateMediaBuyRequest');
74
+ * for (const target of targets) {
75
+ * const perTarget = scrubExtensions(safe, { ... });
76
+ * await operational.updateMediaBuy(ctxFor(target), perTarget);
77
+ * }
78
+ * ```
79
+ *
80
+ * Pollers that construct requests from stored state typically don't
81
+ * need this — their inputs aren't buyer-controlled. They can opt in
82
+ * for symmetric type safety with `as WireSafe<T>` if their type
83
+ * system encourages it, or call this helper anyway (the strip is a
84
+ * no-op when input is already wire-spec only).
85
+ *
86
+ * @param request - Buyer-supplied (or otherwise untrusted) input.
87
+ * @param schemaName - PascalCase request type name from
88
+ * {@link WIRE_SPEC_FIELDS}. TypeScript narrows the return type to
89
+ * `WireSafe<RequestType>` based on this — so
90
+ * `pickWireSpecFields(req, 'UpdateMediaBuyRequest')` returns
91
+ * `WireSafe<UpdateMediaBuyRequest>`.
92
+ *
93
+ * @example
94
+ * ```ts
95
+ * import { pickWireSpecFields } from '@adcp/sdk/server';
96
+ *
97
+ * // Buyer sends:
98
+ * // { media_buy_id: 'mb_1', paused: true, snap_access_token: 'attacker' }
99
+ * const safe = pickWireSpecFields(buyerReq, 'UpdateMediaBuyRequest');
100
+ * // safe: WireSafe<UpdateMediaBuyRequest>
101
+ * // value: { media_buy_id: 'mb_1', paused: true } — credential dropped
102
+ * ```
103
+ */
104
+ function pickWireSpecFields(request, schemaName) {
105
+ const allowlist = wire_spec_fields_generated_1.WIRE_SPEC_FIELDS[schemaName].fields;
106
+ const out = {};
107
+ if (request === null || typeof request !== 'object') {
108
+ // Defensive: caller passed something that isn't a request object.
109
+ // Return an empty WireSafe — the upstream call will reject on
110
+ // missing required fields (e.g. `idempotency_key`), which is the
111
+ // right error class to surface (it's adopter-side, not buyer-side).
112
+ return out;
113
+ }
114
+ const source = request;
115
+ // Indexed loop instead of for-of: avoids Array.prototype[Symbol.iterator]
116
+ // dispatch, which a supply-chain dep could poison to inject extra field
117
+ // names into the iteration at call time (freeze of the array object does
118
+ // not prevent iterator-protocol interception).
119
+ const len = allowlist.length;
120
+ for (let i = 0; i < len; i++) {
121
+ const field = allowlist[i]; // non-null: i is bounds-checked by len
122
+ if (Object.prototype.hasOwnProperty.call(source, field)) {
123
+ out[field] = source[field];
124
+ }
125
+ }
126
+ return out;
127
+ }
128
+ /**
129
+ * Implementation of {@link ScrubExtensionsOptions}. See JSDoc above.
130
+ */
131
+ function scrubExtensions(request, options) {
132
+ const out = { ...request };
133
+ const { allowedExtKeys, recursiveCredentialScan = true, credentialPatterns, inject } = options;
134
+ // Step 1: top-level allowlist filter. When `allowedExtKeys` is
135
+ // undefined we leave the top level alone (recursive scan and
136
+ // inject still run); when it's an empty set we drop both fields.
137
+ if (allowedExtKeys !== undefined) {
138
+ const sourceExt = (out.ext ?? {});
139
+ const sourceCtx = (out.context ?? {});
140
+ const filteredExt = {};
141
+ const filteredCtx = {};
142
+ for (const k of allowedExtKeys) {
143
+ if (Object.prototype.hasOwnProperty.call(sourceExt, k))
144
+ filteredExt[k] = sourceExt[k];
145
+ if (Object.prototype.hasOwnProperty.call(sourceCtx, k))
146
+ filteredCtx[k] = sourceCtx[k];
147
+ }
148
+ out.ext = filteredExt;
149
+ out.context = filteredCtx;
150
+ }
151
+ // Step 2: recursive credential-shape scan. Strategy depends on
152
+ // whether step 1 ran:
153
+ //
154
+ // - With `allowedExtKeys` set: top-level is already gated by
155
+ // the explicit allowlist. The adopter has affirmed those keys
156
+ // are legitimate (e.g. `scope3_api_key` allowlisted on a
157
+ // specific tool), so we DON'T second-guess them by name. The
158
+ // scan applies to depths 1+ — dropping nested credentials
159
+ // INSIDE allowlisted values (`partner: { token: '...' }`
160
+ // becomes `partner: {}`).
161
+ //
162
+ // - Without `allowedExtKeys`: no top-level gate; scan from
163
+ // depth 0 to drop credential-shaped keys at any depth. This
164
+ // is the path adopters take when they trust their own
165
+ // ext/context shapes but want belt-and-suspenders coverage.
166
+ if (recursiveCredentialScan) {
167
+ const fromDepth = allowedExtKeys !== undefined ? 1 : 0;
168
+ if (out.ext !== undefined && out.ext !== null && typeof out.ext === 'object') {
169
+ out.ext = stripNestedCredentials(out.ext, credentialPatterns, fromDepth);
170
+ }
171
+ if (out.context !== undefined && out.context !== null && typeof out.context === 'object') {
172
+ out.context = stripNestedCredentials(out.context, credentialPatterns, fromDepth);
173
+ }
174
+ }
175
+ // Step 3: adopter-controlled inject. Runs AFTER the scan so
176
+ // storefront-resolved credentials/IDs aren't accidentally dropped
177
+ // by the recursive scan (e.g. injected `managed_access_token` is
178
+ // intentional and belongs).
179
+ if (inject?.ext) {
180
+ out.ext = { ...out.ext, ...inject.ext };
181
+ }
182
+ if (inject?.context) {
183
+ out.context = { ...out.context, ...inject.context };
184
+ }
185
+ return out;
186
+ }
187
+ /**
188
+ * Recursively walk a value and drop keys matching the credential
189
+ * pattern set, starting from `fromDepth`. Used by `scrubExtensions`
190
+ * to close round-4 nesting.
191
+ *
192
+ * `fromDepth = 0` scans every depth including the top level — used
193
+ * when no `allowedExtKeys` is supplied.
194
+ * `fromDepth = 1` skips the top level — used when the top-level
195
+ * keys have already been gated by an explicit allowlist (the
196
+ * adopter affirmed them legitimate by name).
197
+ *
198
+ * Returns a NEW object/array tree — input is not mutated. Cycle-safe
199
+ * via `WeakSet`. Primitives pass through.
200
+ */
201
+ function stripNestedCredentials(value, patterns, fromDepth = 0) {
202
+ // Identify credential-shaped paths via the L1 scanner.
203
+ const hits = new Set((0, credential_policy_1.scanArgsForCredentials)(value, patterns));
204
+ if (hits.size === 0)
205
+ return value;
206
+ const seen = new WeakSet();
207
+ const walk = (node, path, depth) => {
208
+ if (node === null || typeof node !== 'object')
209
+ return node;
210
+ if (seen.has(node))
211
+ return node;
212
+ seen.add(node);
213
+ if (Array.isArray(node)) {
214
+ return node.map((item, i) => walk(item, [...path, String(i)], depth + 1));
215
+ }
216
+ const out = {};
217
+ for (const [key, child] of Object.entries(node)) {
218
+ const childPath = [...path, key];
219
+ // Only drop the key if we're AT or BEYOND `fromDepth`. Keys
220
+ // shallower than fromDepth pass through unchecked because
221
+ // they were already gated upstream.
222
+ if (depth >= fromDepth && hits.has(childPath.join('.'))) {
223
+ continue;
224
+ }
225
+ out[key] = walk(child, childPath, depth + 1);
226
+ }
227
+ return out;
228
+ };
229
+ return walk(value, [], 0);
230
+ }
231
+ //# sourceMappingURL=wire-safe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wire-safe.js","sourceRoot":"","sources":["../../../src/lib/server/wire-safe.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,168 @@
1
+ import type { AcquireRightsRequest, ActivateSignalRequest, BuildCreativeRequest, CalibrateContentRequest, CreateCollectionListRequest, CreateContentStandardsRequest, CreateMediaBuyRequest, CreatePropertyListRequest, DeleteCollectionListRequest, DeletePropertyListRequest, GetMediaBuyDeliveryRequest, LogEventRequest, ProvidePerformanceFeedbackRequest, ReportPlanOutcomeRequest, ReportUsageRequest, SIInitiateSessionRequest, SISendMessageRequest, SyncAccountsRequest, SyncAudiencesRequest, SyncCatalogsRequest, SyncCreativesRequest, SyncEventSourcesRequest, SyncGovernanceRequest, SyncPlansRequest, UpdateCollectionListRequest, UpdateContentStandardsRequest, UpdateMediaBuyRequest, UpdatePropertyListRequest, UpdateRightsRequest } from '../types';
2
+ /**
3
+ * Wire-spec field allowlists per request type. The `fields` values
4
+ * are exact top-level property names from the AdCP request JSON
5
+ * schemas; `pickWireSpecFields(req, schemaName)` uses them to strip
6
+ * buyer-controlled args to schema-spec fields at the operational
7
+ * fan-out boundary. Drift between this map and the schemas is
8
+ * impossible by construction — both are emitted from the same
9
+ * codegen pass.
10
+ *
11
+ * The `__type` phantom is type-only (`null as unknown as T`) — it
12
+ * carries the wire-spec request shape so `pickWireSpecFields`'s
13
+ * return type narrows per `schemaName`. Runtime cost: one null
14
+ * property per entry.
15
+ *
16
+ * Arrays and entry objects are runtime-frozen via `Object.freeze`
17
+ * so a misbehaving dependency cannot widen the scrub via prototype
18
+ * pollution or shared-state mutation of the allowlist.
19
+ */
20
+ export declare const WIRE_SPEC_FIELDS: Readonly<{
21
+ /** schemas/cache/3.0.6/brand/acquire-rights-request.json */
22
+ readonly AcquireRightsRequest: Readonly<{
23
+ fields: readonly string[];
24
+ __type: AcquireRightsRequest;
25
+ }>;
26
+ /** schemas/cache/3.0.6/signals/activate-signal-request.json */
27
+ readonly ActivateSignalRequest: Readonly<{
28
+ fields: readonly string[];
29
+ __type: ActivateSignalRequest;
30
+ }>;
31
+ /** schemas/cache/3.0.6/media-buy/build-creative-request.json */
32
+ readonly BuildCreativeRequest: Readonly<{
33
+ fields: readonly string[];
34
+ __type: BuildCreativeRequest;
35
+ }>;
36
+ /** schemas/cache/3.0.6/content-standards/calibrate-content-request.json */
37
+ readonly CalibrateContentRequest: Readonly<{
38
+ fields: readonly string[];
39
+ __type: CalibrateContentRequest;
40
+ }>;
41
+ /** schemas/cache/3.0.6/collection/create-collection-list-request.json */
42
+ readonly CreateCollectionListRequest: Readonly<{
43
+ fields: readonly string[];
44
+ __type: CreateCollectionListRequest;
45
+ }>;
46
+ /** schemas/cache/3.0.6/content-standards/create-content-standards-request.json */
47
+ readonly CreateContentStandardsRequest: Readonly<{
48
+ fields: readonly string[];
49
+ __type: CreateContentStandardsRequest;
50
+ }>;
51
+ /** schemas/cache/3.0.6/media-buy/create-media-buy-request.json */
52
+ readonly CreateMediaBuyRequest: Readonly<{
53
+ fields: readonly string[];
54
+ __type: CreateMediaBuyRequest;
55
+ }>;
56
+ /** schemas/cache/3.0.6/property/create-property-list-request.json */
57
+ readonly CreatePropertyListRequest: Readonly<{
58
+ fields: readonly string[];
59
+ __type: CreatePropertyListRequest;
60
+ }>;
61
+ /** schemas/cache/3.0.6/collection/delete-collection-list-request.json */
62
+ readonly DeleteCollectionListRequest: Readonly<{
63
+ fields: readonly string[];
64
+ __type: DeleteCollectionListRequest;
65
+ }>;
66
+ /** schemas/cache/3.0.6/property/delete-property-list-request.json */
67
+ readonly DeletePropertyListRequest: Readonly<{
68
+ fields: readonly string[];
69
+ __type: DeletePropertyListRequest;
70
+ }>;
71
+ /** schemas/cache/3.0.6/media-buy/get-media-buy-delivery-request.json */
72
+ readonly GetMediaBuyDeliveryRequest: Readonly<{
73
+ fields: readonly string[];
74
+ __type: GetMediaBuyDeliveryRequest;
75
+ }>;
76
+ /** schemas/cache/3.0.6/media-buy/log-event-request.json */
77
+ readonly LogEventRequest: Readonly<{
78
+ fields: readonly string[];
79
+ __type: LogEventRequest;
80
+ }>;
81
+ /** schemas/cache/3.0.6/media-buy/provide-performance-feedback-request.json */
82
+ readonly ProvidePerformanceFeedbackRequest: Readonly<{
83
+ fields: readonly string[];
84
+ __type: ProvidePerformanceFeedbackRequest;
85
+ }>;
86
+ /** schemas/cache/3.0.6/governance/report-plan-outcome-request.json */
87
+ readonly ReportPlanOutcomeRequest: Readonly<{
88
+ fields: readonly string[];
89
+ __type: ReportPlanOutcomeRequest;
90
+ }>;
91
+ /** schemas/cache/3.0.6/account/report-usage-request.json */
92
+ readonly ReportUsageRequest: Readonly<{
93
+ fields: readonly string[];
94
+ __type: ReportUsageRequest;
95
+ }>;
96
+ /** schemas/cache/3.0.6/sponsored-intelligence/si-initiate-session-request.json */
97
+ readonly SIInitiateSessionRequest: Readonly<{
98
+ fields: readonly string[];
99
+ __type: SIInitiateSessionRequest;
100
+ }>;
101
+ /** schemas/cache/3.0.6/sponsored-intelligence/si-send-message-request.json */
102
+ readonly SISendMessageRequest: Readonly<{
103
+ fields: readonly string[];
104
+ __type: SISendMessageRequest;
105
+ }>;
106
+ /** schemas/cache/3.0.6/account/sync-accounts-request.json */
107
+ readonly SyncAccountsRequest: Readonly<{
108
+ fields: readonly string[];
109
+ __type: SyncAccountsRequest;
110
+ }>;
111
+ /** schemas/cache/3.0.6/media-buy/sync-audiences-request.json */
112
+ readonly SyncAudiencesRequest: Readonly<{
113
+ fields: readonly string[];
114
+ __type: SyncAudiencesRequest;
115
+ }>;
116
+ /** schemas/cache/3.0.6/media-buy/sync-catalogs-request.json */
117
+ readonly SyncCatalogsRequest: Readonly<{
118
+ fields: readonly string[];
119
+ __type: SyncCatalogsRequest;
120
+ }>;
121
+ /** schemas/cache/3.0.6/creative/sync-creatives-request.json */
122
+ readonly SyncCreativesRequest: Readonly<{
123
+ fields: readonly string[];
124
+ __type: SyncCreativesRequest;
125
+ }>;
126
+ /** schemas/cache/3.0.6/media-buy/sync-event-sources-request.json */
127
+ readonly SyncEventSourcesRequest: Readonly<{
128
+ fields: readonly string[];
129
+ __type: SyncEventSourcesRequest;
130
+ }>;
131
+ /** schemas/cache/3.0.6/account/sync-governance-request.json */
132
+ readonly SyncGovernanceRequest: Readonly<{
133
+ fields: readonly string[];
134
+ __type: SyncGovernanceRequest;
135
+ }>;
136
+ /** schemas/cache/3.0.6/governance/sync-plans-request.json */
137
+ readonly SyncPlansRequest: Readonly<{
138
+ fields: readonly string[];
139
+ __type: SyncPlansRequest;
140
+ }>;
141
+ /** schemas/cache/3.0.6/collection/update-collection-list-request.json */
142
+ readonly UpdateCollectionListRequest: Readonly<{
143
+ fields: readonly string[];
144
+ __type: UpdateCollectionListRequest;
145
+ }>;
146
+ /** schemas/cache/3.0.6/content-standards/update-content-standards-request.json */
147
+ readonly UpdateContentStandardsRequest: Readonly<{
148
+ fields: readonly string[];
149
+ __type: UpdateContentStandardsRequest;
150
+ }>;
151
+ /** schemas/cache/3.0.6/media-buy/update-media-buy-request.json */
152
+ readonly UpdateMediaBuyRequest: Readonly<{
153
+ fields: readonly string[];
154
+ __type: UpdateMediaBuyRequest;
155
+ }>;
156
+ /** schemas/cache/3.0.6/property/update-property-list-request.json */
157
+ readonly UpdatePropertyListRequest: Readonly<{
158
+ fields: readonly string[];
159
+ __type: UpdatePropertyListRequest;
160
+ }>;
161
+ /** schemas/cache/3.0.6/brand/update-rights-request.json */
162
+ readonly UpdateRightsRequest: Readonly<{
163
+ fields: readonly string[];
164
+ __type: UpdateRightsRequest;
165
+ }>;
166
+ }>;
167
+ export type WireSpecRequestName = keyof typeof WIRE_SPEC_FIELDS;
168
+ //# sourceMappingURL=wire-spec-fields.generated.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wire-spec-fields.generated.d.ts","sourceRoot":"","sources":["../../../src/lib/server/wire-spec-fields.generated.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,uBAAuB,EACvB,2BAA2B,EAC3B,6BAA6B,EAC7B,qBAAqB,EACrB,yBAAyB,EACzB,2BAA2B,EAC3B,yBAAyB,EACzB,0BAA0B,EAC1B,eAAe,EACf,iCAAiC,EACjC,wBAAwB,EACxB,kBAAkB,EAClB,wBAAwB,EACxB,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,uBAAuB,EACvB,qBAAqB,EACrB,gBAAgB,EAChB,2BAA2B,EAC3B,6BAA6B,EAC7B,qBAAqB,EACrB,yBAAyB,EACzB,mBAAmB,EACpB,MAAM,UAAU,CAAC;AAElB;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,gBAAgB;IAC3B,4DAA4D;;gBAE4H,SAAS,MAAM,EAAE;gBAC5K,oBAAoB;;IAEjD,+DAA+D;;gBAEsG,SAAS,MAAM,EAAE;gBACzJ,qBAAqB;;IAElD,gEAAgE;;gBAEsR,SAAS,MAAM,EAAE;gBAC1U,oBAAoB;;IAEjD,2EAA2E;;gBAEoC,SAAS,MAAM,EAAE;gBACnG,uBAAuB;;IAEpD,yEAAyE;;gBAEgF,SAAS,MAAM,EAAE;gBAC7I,2BAA2B;;IAExD,kFAAkF;;gBAEoE,SAAS,MAAM,EAAE;gBAC1I,6BAA6B;;IAE1D,kEAAkE;;gBAEgR,SAAS,MAAM,EAAE;gBACtU,qBAAqB;;IAElD,qEAAqE;;gBAEmF,SAAS,MAAM,EAAE;gBAC5I,yBAAyB;;IAEtD,yEAAyE;;gBAEgC,SAAS,MAAM,EAAE;gBAC7F,2BAA2B;;IAExD,qEAAqE;;gBAEoC,SAAS,MAAM,EAAE;gBAC7F,yBAAyB;;IAEtD,wEAAwE;;gBAE2I,SAAS,MAAM,EAAE;gBACvM,0BAA0B;;IAEvD,2DAA2D;;gBAEuE,SAAS,MAAM,EAAE;gBACtH,eAAe;;IAE5C,8EAA8E;;gBAE0H,SAAS,MAAM,EAAE;gBAC5L,iCAAiC;;IAE9D,sEAAsE;;gBAEwH,SAAS,MAAM,EAAE;gBAClL,wBAAwB;;IAErD,4DAA4D;;gBAEoD,SAAS,MAAM,EAAE;gBACpG,kBAAkB;;IAE/C,kFAAkF;;gBAE0G,SAAS,MAAM,EAAE;gBAChL,wBAAwB;;IAErD,8EAA8E;;gBAEgD,SAAS,MAAM,EAAE;gBAClH,oBAAoB;;IAEjD,6DAA6D;;gBAEyF,SAAS,MAAM,EAAE;gBAC1I,mBAAmB;;IAEhD,gEAAgE;;gBAE4D,SAAS,MAAM,EAAE;gBAChH,oBAAoB;;IAEjD,+DAA+D;;gBAEiI,SAAS,MAAM,EAAE;gBACpL,mBAAmB;;IAEhD,+DAA+D;;gBAEiJ,SAAS,MAAM,EAAE;gBACpM,oBAAoB;;IAEjD,oEAAoE;;gBAE4D,SAAS,MAAM,EAAE;gBACpH,uBAAuB;;IAEpD,+DAA+D;;gBAEiC,SAAS,MAAM,EAAE;gBACpF,qBAAqB;;IAElD,6DAA6D;;gBAEgC,SAAS,MAAM,EAAE;gBACjF,gBAAgB;;IAE7C,yEAAyE;;gBAEwG,SAAS,MAAM,EAAE;gBACrK,2BAA2B;;IAExD,kFAAkF;;gBAEmF,SAAS,MAAM,EAAE;gBACzJ,6BAA6B;;IAE1D,kEAAkE;;gBAEsN,SAAS,MAAM,EAAE;gBAC5Q,qBAAqB;;IAElD,qEAAqE;;gBAE2G,SAAS,MAAM,EAAE;gBACpK,yBAAyB;;IAEtD,2DAA2D;;gBAE0H,SAAS,MAAM,EAAE;gBACzK,mBAAmB;;EAEvC,CAAC;AAEZ,MAAM,MAAM,mBAAmB,GAAG,MAAM,OAAO,gBAAgB,CAAC"}