@adcp/sdk 5.25.1 → 6.0.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 (288) hide show
  1. package/README.md +45 -7
  2. package/dist/lib/compliance-fixtures/index.d.ts +1 -1
  3. package/dist/lib/compliance-fixtures/index.js +1 -1
  4. package/dist/lib/core/AgentClient.d.ts.map +1 -1
  5. package/dist/lib/core/SingleAgentClient.d.ts.map +1 -1
  6. package/dist/lib/core/SingleAgentClient.js +15 -0
  7. package/dist/lib/core/SingleAgentClient.js.map +1 -1
  8. package/dist/lib/core/TaskExecutor.d.ts +7 -0
  9. package/dist/lib/core/TaskExecutor.d.ts.map +1 -1
  10. package/dist/lib/core/TaskExecutor.js +9 -2
  11. package/dist/lib/core/TaskExecutor.js.map +1 -1
  12. package/dist/lib/index.d.ts +1 -1
  13. package/dist/lib/index.d.ts.map +1 -1
  14. package/dist/lib/index.js +7 -8
  15. package/dist/lib/index.js.map +1 -1
  16. package/dist/lib/schemas/index.d.ts +1 -1
  17. package/dist/lib/schemas/index.js +1 -1
  18. package/dist/lib/server/create-adcp-server.d.ts +129 -11
  19. package/dist/lib/server/create-adcp-server.d.ts.map +1 -1
  20. package/dist/lib/server/create-adcp-server.js +112 -2
  21. package/dist/lib/server/create-adcp-server.js.map +1 -1
  22. package/dist/lib/server/ctx-metadata/backends/memory.d.ts +27 -0
  23. package/dist/lib/server/ctx-metadata/backends/memory.d.ts.map +1 -0
  24. package/dist/lib/server/ctx-metadata/backends/memory.js +72 -0
  25. package/dist/lib/server/ctx-metadata/backends/memory.js.map +1 -0
  26. package/dist/lib/server/ctx-metadata/backends/pg.d.ts +62 -0
  27. package/dist/lib/server/ctx-metadata/backends/pg.d.ts.map +1 -0
  28. package/dist/lib/server/ctx-metadata/backends/pg.js +145 -0
  29. package/dist/lib/server/ctx-metadata/backends/pg.js.map +1 -0
  30. package/dist/lib/server/ctx-metadata/index.d.ts +15 -0
  31. package/dist/lib/server/ctx-metadata/index.d.ts.map +1 -0
  32. package/dist/lib/server/ctx-metadata/index.js +28 -0
  33. package/dist/lib/server/ctx-metadata/index.js.map +1 -0
  34. package/dist/lib/server/ctx-metadata/store.d.ts +177 -0
  35. package/dist/lib/server/ctx-metadata/store.d.ts.map +1 -0
  36. package/dist/lib/server/ctx-metadata/store.js +327 -0
  37. package/dist/lib/server/ctx-metadata/store.js.map +1 -0
  38. package/dist/lib/server/ctx-metadata/wire-shape.d.ts +55 -0
  39. package/dist/lib/server/ctx-metadata/wire-shape.d.ts.map +1 -0
  40. package/dist/lib/server/ctx-metadata/wire-shape.js +121 -0
  41. package/dist/lib/server/ctx-metadata/wire-shape.js.map +1 -0
  42. package/dist/lib/server/decisioning/account.d.ts +309 -0
  43. package/dist/lib/server/decisioning/account.d.ts.map +1 -0
  44. package/dist/lib/server/decisioning/account.js +102 -0
  45. package/dist/lib/server/decisioning/account.js.map +1 -0
  46. package/dist/lib/server/decisioning/admin-router.d.ts +75 -0
  47. package/dist/lib/server/decisioning/admin-router.d.ts.map +1 -0
  48. package/dist/lib/server/decisioning/admin-router.js +120 -0
  49. package/dist/lib/server/decisioning/admin-router.js.map +1 -0
  50. package/dist/lib/server/decisioning/assembly-helpers.d.ts +204 -0
  51. package/dist/lib/server/decisioning/assembly-helpers.d.ts.map +1 -0
  52. package/dist/lib/server/decisioning/assembly-helpers.js +173 -0
  53. package/dist/lib/server/decisioning/assembly-helpers.js.map +1 -0
  54. package/dist/lib/server/decisioning/async-outcome.d.ts +154 -0
  55. package/dist/lib/server/decisioning/async-outcome.d.ts.map +1 -0
  56. package/dist/lib/server/decisioning/async-outcome.js +239 -0
  57. package/dist/lib/server/decisioning/async-outcome.js.map +1 -0
  58. package/dist/lib/server/decisioning/capabilities.d.ts +251 -0
  59. package/dist/lib/server/decisioning/capabilities.d.ts.map +1 -0
  60. package/dist/lib/server/decisioning/capabilities.js +16 -0
  61. package/dist/lib/server/decisioning/capabilities.js.map +1 -0
  62. package/dist/lib/server/decisioning/context.d.ts +212 -0
  63. package/dist/lib/server/decisioning/context.d.ts.map +1 -0
  64. package/dist/lib/server/decisioning/context.js +26 -0
  65. package/dist/lib/server/decisioning/context.js.map +1 -0
  66. package/dist/lib/server/decisioning/errors-typed.d.ts +104 -0
  67. package/dist/lib/server/decisioning/errors-typed.d.ts.map +1 -0
  68. package/dist/lib/server/decisioning/errors-typed.js +304 -0
  69. package/dist/lib/server/decisioning/errors-typed.js.map +1 -0
  70. package/dist/lib/server/decisioning/helpers.d.ts +131 -0
  71. package/dist/lib/server/decisioning/helpers.d.ts.map +1 -0
  72. package/dist/lib/server/decisioning/helpers.js +134 -0
  73. package/dist/lib/server/decisioning/helpers.js.map +1 -0
  74. package/dist/lib/server/decisioning/index.d.ts +46 -0
  75. package/dist/lib/server/decisioning/index.d.ts.map +1 -0
  76. package/dist/lib/server/decisioning/index.js +120 -0
  77. package/dist/lib/server/decisioning/index.js.map +1 -0
  78. package/dist/lib/server/decisioning/list-helpers.d.ts +53 -0
  79. package/dist/lib/server/decisioning/list-helpers.d.ts.map +1 -0
  80. package/dist/lib/server/decisioning/list-helpers.js +96 -0
  81. package/dist/lib/server/decisioning/list-helpers.js.map +1 -0
  82. package/dist/lib/server/decisioning/manifest-helpers.d.ts +56 -0
  83. package/dist/lib/server/decisioning/manifest-helpers.d.ts.map +1 -0
  84. package/dist/lib/server/decisioning/manifest-helpers.js +78 -0
  85. package/dist/lib/server/decisioning/manifest-helpers.js.map +1 -0
  86. package/dist/lib/server/decisioning/pagination.d.ts +21 -0
  87. package/dist/lib/server/decisioning/pagination.d.ts.map +1 -0
  88. package/dist/lib/server/decisioning/pagination.js +12 -0
  89. package/dist/lib/server/decisioning/pagination.js.map +1 -0
  90. package/dist/lib/server/decisioning/platform.d.ts +188 -0
  91. package/dist/lib/server/decisioning/platform.d.ts.map +1 -0
  92. package/dist/lib/server/decisioning/platform.js +19 -0
  93. package/dist/lib/server/decisioning/platform.js.map +1 -0
  94. package/dist/lib/server/decisioning/runtime/from-platform.d.ts +510 -0
  95. package/dist/lib/server/decisioning/runtime/from-platform.d.ts.map +1 -0
  96. package/dist/lib/server/decisioning/runtime/from-platform.js +2196 -0
  97. package/dist/lib/server/decisioning/runtime/from-platform.js.map +1 -0
  98. package/dist/lib/server/decisioning/runtime/postgres-task-registry.d.ts +114 -0
  99. package/dist/lib/server/decisioning/runtime/postgres-task-registry.d.ts.map +1 -0
  100. package/dist/lib/server/decisioning/runtime/postgres-task-registry.js +247 -0
  101. package/dist/lib/server/decisioning/runtime/postgres-task-registry.js.map +1 -0
  102. package/dist/lib/server/decisioning/runtime/protocol-for-tool.d.ts +32 -0
  103. package/dist/lib/server/decisioning/runtime/protocol-for-tool.d.ts.map +1 -0
  104. package/dist/lib/server/decisioning/runtime/protocol-for-tool.js +127 -0
  105. package/dist/lib/server/decisioning/runtime/protocol-for-tool.js.map +1 -0
  106. package/dist/lib/server/decisioning/runtime/task-registry.d.ts +105 -0
  107. package/dist/lib/server/decisioning/runtime/task-registry.d.ts.map +1 -0
  108. package/dist/lib/server/decisioning/runtime/task-registry.js +96 -0
  109. package/dist/lib/server/decisioning/runtime/task-registry.js.map +1 -0
  110. package/dist/lib/server/decisioning/runtime/to-context.d.ts +54 -0
  111. package/dist/lib/server/decisioning/runtime/to-context.d.ts.map +1 -0
  112. package/dist/lib/server/decisioning/runtime/to-context.js +166 -0
  113. package/dist/lib/server/decisioning/runtime/to-context.js.map +1 -0
  114. package/dist/lib/server/decisioning/runtime/validate-platform.d.ts +20 -0
  115. package/dist/lib/server/decisioning/runtime/validate-platform.d.ts.map +1 -0
  116. package/dist/lib/server/decisioning/runtime/validate-platform.js +93 -0
  117. package/dist/lib/server/decisioning/runtime/validate-platform.js.map +1 -0
  118. package/dist/lib/server/decisioning/specialisms/audiences.d.ts +72 -0
  119. package/dist/lib/server/decisioning/specialisms/audiences.d.ts.map +1 -0
  120. package/dist/lib/server/decisioning/specialisms/audiences.js +15 -0
  121. package/dist/lib/server/decisioning/specialisms/audiences.js.map +1 -0
  122. package/dist/lib/server/decisioning/specialisms/brand-rights.d.ts +92 -0
  123. package/dist/lib/server/decisioning/specialisms/brand-rights.d.ts.map +1 -0
  124. package/dist/lib/server/decisioning/specialisms/brand-rights.js +28 -0
  125. package/dist/lib/server/decisioning/specialisms/brand-rights.js.map +1 -0
  126. package/dist/lib/server/decisioning/specialisms/campaign-governance.d.ts +67 -0
  127. package/dist/lib/server/decisioning/specialisms/campaign-governance.d.ts.map +1 -0
  128. package/dist/lib/server/decisioning/specialisms/campaign-governance.js +31 -0
  129. package/dist/lib/server/decisioning/specialisms/campaign-governance.js.map +1 -0
  130. package/dist/lib/server/decisioning/specialisms/content-standards.d.ts +78 -0
  131. package/dist/lib/server/decisioning/specialisms/content-standards.d.ts.map +1 -0
  132. package/dist/lib/server/decisioning/specialisms/content-standards.js +35 -0
  133. package/dist/lib/server/decisioning/specialisms/content-standards.js.map +1 -0
  134. package/dist/lib/server/decisioning/specialisms/creative-ad-server.d.ts +81 -0
  135. package/dist/lib/server/decisioning/specialisms/creative-ad-server.d.ts.map +1 -0
  136. package/dist/lib/server/decisioning/specialisms/creative-ad-server.js +28 -0
  137. package/dist/lib/server/decisioning/specialisms/creative-ad-server.js.map +1 -0
  138. package/dist/lib/server/decisioning/specialisms/creative.d.ts +144 -0
  139. package/dist/lib/server/decisioning/specialisms/creative.d.ts.map +1 -0
  140. package/dist/lib/server/decisioning/specialisms/creative.js +19 -0
  141. package/dist/lib/server/decisioning/specialisms/creative.js.map +1 -0
  142. package/dist/lib/server/decisioning/specialisms/lists.d.ts +61 -0
  143. package/dist/lib/server/decisioning/specialisms/lists.d.ts.map +1 -0
  144. package/dist/lib/server/decisioning/specialisms/lists.js +30 -0
  145. package/dist/lib/server/decisioning/specialisms/lists.js.map +1 -0
  146. package/dist/lib/server/decisioning/specialisms/sales.d.ts +163 -0
  147. package/dist/lib/server/decisioning/specialisms/sales.d.ts.map +1 -0
  148. package/dist/lib/server/decisioning/specialisms/sales.js +64 -0
  149. package/dist/lib/server/decisioning/specialisms/sales.js.map +1 -0
  150. package/dist/lib/server/decisioning/specialisms/signals.d.ts +64 -0
  151. package/dist/lib/server/decisioning/specialisms/signals.d.ts.map +1 -0
  152. package/dist/lib/server/decisioning/specialisms/signals.js +28 -0
  153. package/dist/lib/server/decisioning/specialisms/signals.js.map +1 -0
  154. package/dist/lib/server/decisioning/start-time.d.ts +76 -0
  155. package/dist/lib/server/decisioning/start-time.d.ts.map +1 -0
  156. package/dist/lib/server/decisioning/start-time.js +81 -0
  157. package/dist/lib/server/decisioning/start-time.js.map +1 -0
  158. package/dist/lib/server/decisioning/status-changes.d.ts +165 -0
  159. package/dist/lib/server/decisioning/status-changes.d.ts.map +1 -0
  160. package/dist/lib/server/decisioning/status-changes.js +131 -0
  161. package/dist/lib/server/decisioning/status-changes.js.map +1 -0
  162. package/dist/lib/server/decisioning/status-mappers.d.ts +46 -0
  163. package/dist/lib/server/decisioning/status-mappers.d.ts.map +1 -0
  164. package/dist/lib/server/decisioning/status-mappers.js +46 -0
  165. package/dist/lib/server/decisioning/status-mappers.js.map +1 -0
  166. package/dist/lib/server/decisioning/tenant-registry.d.ts +289 -0
  167. package/dist/lib/server/decisioning/tenant-registry.d.ts.map +1 -0
  168. package/dist/lib/server/decisioning/tenant-registry.js +503 -0
  169. package/dist/lib/server/decisioning/tenant-registry.js.map +1 -0
  170. package/dist/lib/server/express-adapter.d.ts +1 -1
  171. package/dist/lib/server/express-adapter.js +1 -1
  172. package/dist/lib/server/governance.d.ts +1 -1
  173. package/dist/lib/server/governance.js +1 -1
  174. package/dist/lib/server/idempotency/store.d.ts +1 -1
  175. package/dist/lib/server/idempotency/store.js +1 -1
  176. package/dist/lib/server/index.d.ts +9 -2
  177. package/dist/lib/server/index.d.ts.map +1 -1
  178. package/dist/lib/server/index.js +79 -4
  179. package/dist/lib/server/index.js.map +1 -1
  180. package/dist/lib/server/legacy/v5/index.d.ts +38 -0
  181. package/dist/lib/server/legacy/v5/index.d.ts.map +1 -0
  182. package/dist/lib/server/legacy/v5/index.js +60 -0
  183. package/dist/lib/server/legacy/v5/index.js.map +1 -0
  184. package/dist/lib/server/normalize-errors.d.ts +88 -0
  185. package/dist/lib/server/normalize-errors.d.ts.map +1 -0
  186. package/dist/lib/server/normalize-errors.js +146 -0
  187. package/dist/lib/server/normalize-errors.js.map +1 -0
  188. package/dist/lib/server/pick-safe-details.d.ts +90 -0
  189. package/dist/lib/server/pick-safe-details.d.ts.map +1 -0
  190. package/dist/lib/server/pick-safe-details.js +148 -0
  191. package/dist/lib/server/pick-safe-details.js.map +1 -0
  192. package/dist/lib/server/postgres-state-store.d.ts +1 -1
  193. package/dist/lib/server/postgres-state-store.js +1 -1
  194. package/dist/lib/server/responses.d.ts +38 -0
  195. package/dist/lib/server/responses.d.ts.map +1 -1
  196. package/dist/lib/server/responses.js +38 -0
  197. package/dist/lib/server/responses.js.map +1 -1
  198. package/dist/lib/server/state-store.d.ts +1 -1
  199. package/dist/lib/server/state-store.js +1 -1
  200. package/dist/lib/server/test-controller.d.ts +10 -3
  201. package/dist/lib/server/test-controller.d.ts.map +1 -1
  202. package/dist/lib/server/test-controller.js +10 -3
  203. package/dist/lib/server/test-controller.js.map +1 -1
  204. package/dist/lib/testing/comply-controller.d.ts +47 -1
  205. package/dist/lib/testing/comply-controller.d.ts.map +1 -1
  206. package/dist/lib/testing/comply-controller.js +11 -4
  207. package/dist/lib/testing/comply-controller.js.map +1 -1
  208. package/dist/lib/testing/index.d.ts +1 -1
  209. package/dist/lib/testing/index.d.ts.map +1 -1
  210. package/dist/lib/testing/index.js.map +1 -1
  211. package/dist/lib/testing/personas/index.d.ts +143 -0
  212. package/dist/lib/testing/personas/index.d.ts.map +1 -0
  213. package/dist/lib/testing/personas/index.js +190 -0
  214. package/dist/lib/testing/personas/index.js.map +1 -0
  215. package/dist/lib/testing/storyboard/index.d.ts +1 -1
  216. package/dist/lib/testing/storyboard/index.d.ts.map +1 -1
  217. package/dist/lib/testing/storyboard/index.js +3 -2
  218. package/dist/lib/testing/storyboard/index.js.map +1 -1
  219. package/dist/lib/testing/storyboard/runner.d.ts +13 -0
  220. package/dist/lib/testing/storyboard/runner.d.ts.map +1 -1
  221. package/dist/lib/testing/storyboard/runner.js +179 -7
  222. package/dist/lib/testing/storyboard/runner.js.map +1 -1
  223. package/dist/lib/types/asset-instances.d.ts +1 -0
  224. package/dist/lib/types/asset-instances.d.ts.map +1 -1
  225. package/dist/lib/types/core.generated.d.ts +203 -98
  226. package/dist/lib/types/core.generated.d.ts.map +1 -1
  227. package/dist/lib/types/core.generated.js +1 -1
  228. package/dist/lib/types/index.d.ts +1 -0
  229. package/dist/lib/types/index.d.ts.map +1 -1
  230. package/dist/lib/types/index.js.map +1 -1
  231. package/dist/lib/types/schemas.generated.d.ts +599 -159
  232. package/dist/lib/types/schemas.generated.d.ts.map +1 -1
  233. package/dist/lib/types/schemas.generated.js +175 -94
  234. package/dist/lib/types/schemas.generated.js.map +1 -1
  235. package/dist/lib/types/tools.generated.d.ts +315 -46
  236. package/dist/lib/types/tools.generated.d.ts.map +1 -1
  237. package/dist/lib/utils/capabilities.d.ts +1 -1
  238. package/dist/lib/utils/capabilities.d.ts.map +1 -1
  239. package/dist/lib/utils/capabilities.js +6 -0
  240. package/dist/lib/utils/capabilities.js.map +1 -1
  241. package/dist/lib/validation/schema-validator.d.ts +13 -0
  242. package/dist/lib/validation/schema-validator.d.ts.map +1 -1
  243. package/dist/lib/validation/schema-validator.js +240 -3
  244. package/dist/lib/validation/schema-validator.js.map +1 -1
  245. package/dist/lib/version.d.ts +3 -3
  246. package/dist/lib/version.d.ts.map +1 -1
  247. package/dist/lib/version.js +3 -3
  248. package/dist/lib/version.js.map +1 -1
  249. package/docs/guides/BUILD-AN-AGENT.md +30 -5
  250. package/docs/llms.txt +28 -17
  251. package/examples/README.md +3 -1
  252. package/examples/decisioning-platform-broadcast-tv.ts +300 -0
  253. package/examples/decisioning-platform-identity-graph.ts +214 -0
  254. package/examples/decisioning-platform-mock-seller.ts +332 -0
  255. package/examples/decisioning-platform-multi-tenant.ts +128 -0
  256. package/examples/decisioning-platform-programmatic.ts +254 -0
  257. package/examples/signals-agent.ts +1 -1
  258. package/package.json +13 -2
  259. package/skills/build-brand-rights-agent/SKILL.md +10 -3
  260. package/skills/build-creative-agent/SKILL.md +94 -64
  261. package/skills/build-decisioning-creative-template/SKILL.md +554 -0
  262. package/skills/build-decisioning-platform/SKILL.md +304 -0
  263. package/skills/build-decisioning-platform/advanced/BRAND-RIGHTS.md +25 -0
  264. package/skills/build-decisioning-platform/advanced/COMPLIANCE.md +23 -0
  265. package/skills/build-decisioning-platform/advanced/GOVERNANCE.md +24 -0
  266. package/skills/build-decisioning-platform/advanced/HITL.md +34 -0
  267. package/skills/build-decisioning-platform/advanced/IDEMPOTENCY.md +52 -0
  268. package/skills/build-decisioning-platform/advanced/MULTI-TENANT.md +47 -0
  269. package/skills/build-decisioning-platform/advanced/OAUTH.md +22 -0
  270. package/skills/build-decisioning-platform/advanced/REFERENCE.md +991 -0
  271. package/skills/build-decisioning-platform/advanced/SANDBOX.md +24 -0
  272. package/skills/build-decisioning-platform/advanced/STATE-MACHINE.md +52 -0
  273. package/skills/build-decisioning-signal-marketplace/SKILL.md +269 -0
  274. package/skills/build-generative-seller-agent/SKILL.md +89 -53
  275. package/skills/build-governance-agent/SKILL.md +76 -45
  276. package/skills/build-retail-media-agent/SKILL.md +87 -62
  277. package/skills/build-seller-agent/SKILL.md +384 -255
  278. package/skills/build-seller-agent/deployment.md +5 -3
  279. package/skills/build-seller-agent/specialisms/audience-sync.md +0 -2
  280. package/skills/build-seller-agent/specialisms/sales-broadcast-tv.md +0 -2
  281. package/skills/build-seller-agent/specialisms/sales-guaranteed.md +0 -2
  282. package/skills/build-seller-agent/specialisms/sales-non-guaranteed.md +0 -2
  283. package/skills/build-seller-agent/specialisms/sales-proposal-mode.md +0 -2
  284. package/skills/build-seller-agent/specialisms/sales-social.md +0 -2
  285. package/skills/build-seller-agent/specialisms/signed-requests.md +0 -2
  286. package/skills/build-si-agent/SKILL.md +40 -32
  287. package/skills/build-signals-agent/SKILL.md +139 -92
  288. package/skills/call-adcp-agent.previous/SKILL.md +5 -0
@@ -0,0 +1,127 @@
1
+ "use strict";
2
+ /**
3
+ * Tool-name → AdCP protocol category mapping.
4
+ *
5
+ * Goes on the webhook payload's `protocol` field (per `enums/adcp-protocol.json`)
6
+ * and on the `tasks_get` lifecycle response so receivers can route to the
7
+ * right pipeline before parsing the task body.
8
+ *
9
+ * The map is exported as a plain `Record<string, AdcpProtocol>` so adopters
10
+ * with framework-extension code paths can introspect it (e.g., to build
11
+ * per-protocol metric emitters).
12
+ *
13
+ * @public
14
+ */
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.SPEC_WEBHOOK_TASK_TYPES = exports.TOOL_PROTOCOL_MAP = void 0;
17
+ exports.protocolForTool = protocolForTool;
18
+ /**
19
+ * Tool-name → protocol lookup. Keys are wire tool names (snake_case). Values
20
+ * are the 6 closed-enum protocol categories from `enums/adcp-protocol.json`.
21
+ *
22
+ * Tools not in this map fall through to `'media-buy'` — sales is the
23
+ * largest specialism and the safest default for unknown tools (anything
24
+ * the framework dispatches but isn't catalogued here is most likely a new
25
+ * sales tool added in a downstream release).
26
+ */
27
+ exports.TOOL_PROTOCOL_MAP = {
28
+ // sponsored-intelligence
29
+ si_initiate_session: 'sponsored-intelligence',
30
+ si_send_message: 'sponsored-intelligence',
31
+ si_end_session: 'sponsored-intelligence',
32
+ si_get_session: 'sponsored-intelligence',
33
+ // governance
34
+ check_governance: 'governance',
35
+ sync_plans: 'governance',
36
+ report_plan_outcome: 'governance',
37
+ get_plan_audit_logs: 'governance',
38
+ get_media_buy_artifacts: 'governance',
39
+ calibrate_content: 'governance',
40
+ validate_content_delivery: 'governance',
41
+ create_property_list: 'governance',
42
+ update_property_list: 'governance',
43
+ get_property_list: 'governance',
44
+ list_property_lists: 'governance',
45
+ delete_property_list: 'governance',
46
+ create_collection_list: 'governance',
47
+ update_collection_list: 'governance',
48
+ get_collection_list: 'governance',
49
+ list_collection_lists: 'governance',
50
+ delete_collection_list: 'governance',
51
+ create_content_standards: 'governance',
52
+ update_content_standards: 'governance',
53
+ get_content_standards: 'governance',
54
+ // signals
55
+ get_signals: 'signals',
56
+ activate_signal: 'signals',
57
+ // creative
58
+ build_creative: 'creative',
59
+ preview_creative: 'creative',
60
+ get_creative_delivery: 'creative',
61
+ list_creative_formats: 'creative',
62
+ list_creatives: 'creative',
63
+ sync_creatives: 'creative',
64
+ // brand
65
+ get_brand_identity: 'brand',
66
+ get_rights: 'brand',
67
+ acquire_rights: 'brand',
68
+ // media-buy (explicit listing — anything not here falls back to media-buy)
69
+ get_products: 'media-buy',
70
+ create_media_buy: 'media-buy',
71
+ update_media_buy: 'media-buy',
72
+ get_media_buy_delivery: 'media-buy',
73
+ sync_audiences: 'media-buy',
74
+ sync_accounts: 'media-buy',
75
+ list_accounts: 'media-buy',
76
+ get_account_financials: 'media-buy',
77
+ report_usage: 'media-buy',
78
+ log_event: 'media-buy',
79
+ sync_event_sources: 'media-buy',
80
+ sync_catalogs: 'media-buy',
81
+ provide_performance_feedback: 'media-buy',
82
+ get_media_buys: 'media-buy',
83
+ };
84
+ /**
85
+ * Map a v6 tool name to its AdCP protocol category. Falls back to
86
+ * `'media-buy'` for unknown tools — see `TOOL_PROTOCOL_MAP` JSDoc.
87
+ */
88
+ function protocolForTool(tool) {
89
+ return exports.TOOL_PROTOCOL_MAP[tool] ?? 'media-buy';
90
+ }
91
+ /**
92
+ * Tools whose `task_type` value is permitted in the v6.0 webhook payload
93
+ * envelope. Spec `enums/task-type.json` is a closed 20-value enum at AdCP
94
+ * 3.0 GA — receivers validate against it. Tools NOT in this set still
95
+ * dispatch fine but the framework MUST NOT emit a webhook with a
96
+ * non-spec `task_type` value (it would be rejected by spec-validating
97
+ * subscribers).
98
+ *
99
+ * Tracking spec issue to widen the enum: filing as `adcontextprotocol/adcp`
100
+ * follow-up. Until that lands the framework gates webhook delivery to
101
+ * spec-listed tools and uses `publishStatusChange` for the rest.
102
+ *
103
+ * @internal
104
+ */
105
+ exports.SPEC_WEBHOOK_TASK_TYPES = new Set([
106
+ 'create_media_buy',
107
+ 'update_media_buy',
108
+ 'sync_creatives',
109
+ 'activate_signal',
110
+ 'get_signals',
111
+ 'create_property_list',
112
+ 'update_property_list',
113
+ 'get_property_list',
114
+ 'list_property_lists',
115
+ 'delete_property_list',
116
+ 'sync_accounts',
117
+ 'get_account_financials',
118
+ 'get_creative_delivery',
119
+ 'sync_event_sources',
120
+ 'sync_audiences',
121
+ 'sync_catalogs',
122
+ 'log_event',
123
+ 'get_brand_identity',
124
+ 'get_rights',
125
+ 'acquire_rights',
126
+ ]);
127
+ //# sourceMappingURL=protocol-for-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol-for-tool.js","sourceRoot":"","sources":["../../../../../src/lib/server/decisioning/runtime/protocol-for-tool.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;GAYG;;;AAkFH,0CAEC;AA9ED;;;;;;;;GAQG;AACU,QAAA,iBAAiB,GAA2C;IACvE,yBAAyB;IACzB,mBAAmB,EAAE,wBAAwB;IAC7C,eAAe,EAAE,wBAAwB;IACzC,cAAc,EAAE,wBAAwB;IACxC,cAAc,EAAE,wBAAwB;IAExC,aAAa;IACb,gBAAgB,EAAE,YAAY;IAC9B,UAAU,EAAE,YAAY;IACxB,mBAAmB,EAAE,YAAY;IACjC,mBAAmB,EAAE,YAAY;IACjC,uBAAuB,EAAE,YAAY;IACrC,iBAAiB,EAAE,YAAY;IAC/B,yBAAyB,EAAE,YAAY;IACvC,oBAAoB,EAAE,YAAY;IAClC,oBAAoB,EAAE,YAAY;IAClC,iBAAiB,EAAE,YAAY;IAC/B,mBAAmB,EAAE,YAAY;IACjC,oBAAoB,EAAE,YAAY;IAClC,sBAAsB,EAAE,YAAY;IACpC,sBAAsB,EAAE,YAAY;IACpC,mBAAmB,EAAE,YAAY;IACjC,qBAAqB,EAAE,YAAY;IACnC,sBAAsB,EAAE,YAAY;IACpC,wBAAwB,EAAE,YAAY;IACtC,wBAAwB,EAAE,YAAY;IACtC,qBAAqB,EAAE,YAAY;IAEnC,UAAU;IACV,WAAW,EAAE,SAAS;IACtB,eAAe,EAAE,SAAS;IAE1B,WAAW;IACX,cAAc,EAAE,UAAU;IAC1B,gBAAgB,EAAE,UAAU;IAC5B,qBAAqB,EAAE,UAAU;IACjC,qBAAqB,EAAE,UAAU;IACjC,cAAc,EAAE,UAAU;IAC1B,cAAc,EAAE,UAAU;IAE1B,QAAQ;IACR,kBAAkB,EAAE,OAAO;IAC3B,UAAU,EAAE,OAAO;IACnB,cAAc,EAAE,OAAO;IAEvB,2EAA2E;IAC3E,YAAY,EAAE,WAAW;IACzB,gBAAgB,EAAE,WAAW;IAC7B,gBAAgB,EAAE,WAAW;IAC7B,sBAAsB,EAAE,WAAW;IACnC,cAAc,EAAE,WAAW;IAC3B,aAAa,EAAE,WAAW;IAC1B,aAAa,EAAE,WAAW;IAC1B,sBAAsB,EAAE,WAAW;IACnC,YAAY,EAAE,WAAW;IACzB,SAAS,EAAE,WAAW;IACtB,kBAAkB,EAAE,WAAW;IAC/B,aAAa,EAAE,WAAW;IAC1B,4BAA4B,EAAE,WAAW;IACzC,cAAc,EAAE,WAAW;CAC5B,CAAC;AAEF;;;GAGG;AACH,SAAgB,eAAe,CAAC,IAAY;IAC1C,OAAO,yBAAiB,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC;AAChD,CAAC;AAED;;;;;;;;;;;;;GAaG;AACU,QAAA,uBAAuB,GAAwB,IAAI,GAAG,CAAC;IAClE,kBAAkB;IAClB,kBAAkB;IAClB,gBAAgB;IAChB,iBAAiB;IACjB,aAAa;IACb,sBAAsB;IACtB,sBAAsB;IACtB,mBAAmB;IACnB,qBAAqB;IACrB,sBAAsB;IACtB,eAAe;IACf,wBAAwB;IACxB,uBAAuB;IACvB,oBAAoB;IACpB,gBAAgB;IAChB,eAAe;IACf,WAAW;IACX,oBAAoB;IACpB,YAAY;IACZ,gBAAgB;CACjB,CAAC,CAAC"}
@@ -0,0 +1,105 @@
1
+ /**
2
+ * In-memory task registry for the v6.0 alpha runtime.
3
+ *
4
+ * The framework owns task lifecycle. When an adopter method returns a
5
+ * `TaskHandoff` marker, the framework:
6
+ * 1. Allocates a `taskId` and writes a `submitted` record.
7
+ * 2. Returns the submitted envelope to the buyer immediately.
8
+ * 3. Runs the handoff function in the background.
9
+ * 4. Updates the record on progress (`updateProgress`) and terminal
10
+ * state (`complete` / `fail`) from the method's return/throw.
11
+ *
12
+ * Adopters never call into the registry directly. Wire-level `tasks/get`
13
+ * integration (so buyers can poll the lifecycle) reads via `getTask`;
14
+ * test harnesses use `awaitTask` to flush the background promise
15
+ * deterministically.
16
+ *
17
+ * Status: Preview / 6.0.
18
+ *
19
+ * @public
20
+ */
21
+ import type { AdcpStructuredError, TaskHandoffProgress } from '../async-outcome';
22
+ /**
23
+ * AdCP-spec task lifecycle states. Mirrors `enums/task-status.json` —
24
+ * the v6 framework writes `'submitted'` on create, transitions to
25
+ * `'working'` on the first `updateProgress()` call, and terminates at
26
+ * `'completed'` / `'failed'`. The other states (`'input-required'`,
27
+ * `'canceled'`, `'rejected'`, `'auth-required'`, `'unknown'`) are
28
+ * reserved for adopter-emitted transitions via the forthcoming
29
+ * `taskRegistry.transition()` API (v6.1).
30
+ */
31
+ export type TaskStatus = 'submitted' | 'working' | 'input-required' | 'completed' | 'canceled' | 'failed' | 'rejected' | 'auth-required' | 'unknown';
32
+ export interface TaskRecord<TResult = unknown, TError extends AdcpStructuredError = AdcpStructuredError> {
33
+ taskId: string;
34
+ /** Tool name that started the task (e.g., 'create_media_buy'). */
35
+ tool: string;
36
+ /** Account that started the task — sessionKey-like for cross-request scoping. */
37
+ accountId: string;
38
+ /** Current lifecycle state — full AdCP-spec `task-status` enum. */
39
+ status: TaskStatus;
40
+ /** Status message on the final arm (`error.message` on failed). */
41
+ statusMessage?: string;
42
+ /** Terminal result on `completed`. */
43
+ result?: TResult;
44
+ /** Terminal error on `failed`. */
45
+ error?: TError;
46
+ /**
47
+ * Intermediate progress from `TaskHandoffContext.update(...)` calls.
48
+ * Written by the background handoff function; surfaced to buyers polling
49
+ * `tasks_get` via the spec `progress` field.
50
+ */
51
+ progress?: TaskHandoffProgress;
52
+ /**
53
+ * Whether the buyer wired `push_notification_config.url` on the original
54
+ * request. Surfaced to the buyer via `tasks_get`'s spec-defined
55
+ * `has_webhook: boolean` field so they can decide between long-poll vs.
56
+ * single-shot polling.
57
+ */
58
+ hasWebhook?: boolean;
59
+ /** ISO 8601 timestamps. */
60
+ createdAt: string;
61
+ updatedAt: string;
62
+ }
63
+ export interface TaskRegistry {
64
+ /**
65
+ * Allocate a new task record. Returns the `taskId` the framework hands
66
+ * to `platform.xxxTask(taskId, ...)`. Initial status is `submitted`.
67
+ *
68
+ * `hasWebhook: true` when the buyer wired `push_notification_config.url`
69
+ * — surfaced via `tasks_get`'s `has_webhook` field. Defaults to `false`.
70
+ */
71
+ create(opts: {
72
+ tool: string;
73
+ accountId: string;
74
+ hasWebhook?: boolean;
75
+ }): Promise<{
76
+ taskId: string;
77
+ }>;
78
+ /** Read a task by id. Returns `null` if unknown. */
79
+ getTask<TResult = unknown>(taskId: string): Promise<TaskRecord<TResult> | null>;
80
+ /**
81
+ * Mark a task `completed` with the method's return value. No-op if the
82
+ * task is already terminal (idempotent).
83
+ */
84
+ complete<TResult>(taskId: string, result: TResult): Promise<void>;
85
+ /**
86
+ * Mark a task `failed` with the structured error. No-op if the task is
87
+ * already terminal (idempotent).
88
+ */
89
+ fail(taskId: string, error: AdcpStructuredError): Promise<void>;
90
+ /**
91
+ * Record intermediate progress from `TaskHandoffContext.update(...)`.
92
+ * Transitions the task from `'submitted'` → `'working'` on the first
93
+ * call. No-op on already-terminal tasks. The `progress` payload is
94
+ * written to the record and surfaced to buyers polling `tasks_get`.
95
+ */
96
+ updateProgress(taskId: string, progress: TaskHandoffProgress): Promise<void>;
97
+ /**
98
+ * Await any registered background completion for a task. Resolves
99
+ * immediately if no background is registered or it has already settled.
100
+ * Used by test harnesses + `tasks/get` integration.
101
+ */
102
+ awaitTask(taskId: string): Promise<void>;
103
+ }
104
+ export declare function createInMemoryTaskRegistry(): TaskRegistry;
105
+ //# sourceMappingURL=task-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-registry.d.ts","sourceRoot":"","sources":["../../../../../src/lib/server/decisioning/runtime/task-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAGH,OAAO,KAAK,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAEjF;;;;;;;;GAQG;AACH,MAAM,MAAM,UAAU,GAClB,WAAW,GACX,SAAS,GACT,gBAAgB,GAChB,WAAW,GACX,UAAU,GACV,QAAQ,GACR,UAAU,GACV,eAAe,GACf,SAAS,CAAC;AAEd,MAAM,WAAW,UAAU,CAAC,OAAO,GAAG,OAAO,EAAE,MAAM,SAAS,mBAAmB,GAAG,mBAAmB;IACrG,MAAM,EAAE,MAAM,CAAC;IACf,kEAAkE;IAClE,IAAI,EAAE,MAAM,CAAC;IACb,iFAAiF;IACjF,SAAS,EAAE,MAAM,CAAC;IAClB,mEAAmE;IACnE,MAAM,EAAE,UAAU,CAAC;IACnB,mEAAmE;IACnE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,sCAAsC;IACtC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,kCAAkC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,QAAQ,CAAC,EAAE,mBAAmB,CAAC;IAC/B;;;;;OAKG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,2BAA2B;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAMD,MAAM,WAAW,YAAY;IAC3B;;;;;;OAMG;IACH,MAAM,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAErG,oDAAoD;IACpD,OAAO,CAAC,OAAO,GAAG,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;IAEhF;;;OAGG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAElE;;;OAGG;IACH,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEhE;;;;;OAKG;IACH,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAW7E;;;;OAIG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1C;AAED,wBAAgB,0BAA0B,IAAI,YAAY,CAsEzD"}
@@ -0,0 +1,96 @@
1
+ "use strict";
2
+ /**
3
+ * In-memory task registry for the v6.0 alpha runtime.
4
+ *
5
+ * The framework owns task lifecycle. When an adopter method returns a
6
+ * `TaskHandoff` marker, the framework:
7
+ * 1. Allocates a `taskId` and writes a `submitted` record.
8
+ * 2. Returns the submitted envelope to the buyer immediately.
9
+ * 3. Runs the handoff function in the background.
10
+ * 4. Updates the record on progress (`updateProgress`) and terminal
11
+ * state (`complete` / `fail`) from the method's return/throw.
12
+ *
13
+ * Adopters never call into the registry directly. Wire-level `tasks/get`
14
+ * integration (so buyers can poll the lifecycle) reads via `getTask`;
15
+ * test harnesses use `awaitTask` to flush the background promise
16
+ * deterministically.
17
+ *
18
+ * Status: Preview / 6.0.
19
+ *
20
+ * @public
21
+ */
22
+ Object.defineProperty(exports, "__esModule", { value: true });
23
+ exports.createInMemoryTaskRegistry = createInMemoryTaskRegistry;
24
+ const node_crypto_1 = require("node:crypto");
25
+ function createInMemoryTaskRegistry() {
26
+ const tasks = new Map();
27
+ const backgrounds = new Map();
28
+ return {
29
+ async create(opts) {
30
+ const taskId = `task_${(0, node_crypto_1.randomUUID)()}`;
31
+ const now = new Date().toISOString();
32
+ tasks.set(taskId, {
33
+ taskId,
34
+ tool: opts.tool,
35
+ accountId: opts.accountId,
36
+ status: 'submitted',
37
+ ...(opts.hasWebhook && { hasWebhook: true }),
38
+ createdAt: now,
39
+ updatedAt: now,
40
+ });
41
+ return { taskId };
42
+ },
43
+ async getTask(taskId) {
44
+ const record = tasks.get(taskId);
45
+ return record ?? null;
46
+ },
47
+ async complete(taskId, result) {
48
+ const existing = tasks.get(taskId);
49
+ if (!existing)
50
+ return;
51
+ if (existing.status === 'completed' || existing.status === 'failed')
52
+ return;
53
+ existing.status = 'completed';
54
+ existing.result = result;
55
+ existing.updatedAt = new Date().toISOString();
56
+ },
57
+ async fail(taskId, error) {
58
+ const existing = tasks.get(taskId);
59
+ if (!existing)
60
+ return;
61
+ if (existing.status === 'completed' || existing.status === 'failed')
62
+ return;
63
+ existing.status = 'failed';
64
+ existing.error = error;
65
+ existing.statusMessage = error.message;
66
+ existing.updatedAt = new Date().toISOString();
67
+ },
68
+ async updateProgress(taskId, progress) {
69
+ const existing = tasks.get(taskId);
70
+ if (!existing)
71
+ return;
72
+ if (existing.status === 'completed' || existing.status === 'failed')
73
+ return;
74
+ if (existing.status === 'submitted')
75
+ existing.status = 'working';
76
+ existing.progress = progress;
77
+ existing.updatedAt = new Date().toISOString();
78
+ },
79
+ _registerBackground(taskId, completion) {
80
+ const composed = completion.then(() => {
81
+ if (backgrounds.get(taskId) === composed)
82
+ backgrounds.delete(taskId);
83
+ }, () => {
84
+ if (backgrounds.get(taskId) === composed)
85
+ backgrounds.delete(taskId);
86
+ });
87
+ backgrounds.set(taskId, composed);
88
+ },
89
+ async awaitTask(taskId) {
90
+ const pending = backgrounds.get(taskId);
91
+ if (pending)
92
+ await pending;
93
+ },
94
+ };
95
+ }
96
+ //# sourceMappingURL=task-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-registry.js","sourceRoot":"","sources":["../../../../../src/lib/server/decisioning/runtime/task-registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Translate the existing `HandlerContext` into the v6 `RequestContext` shape
3
+ * that platform methods receive.
4
+ *
5
+ * The handler-style framework already resolves the account, sets sessionKey,
6
+ * and exposes `store` + `authInfo` + `emitWebhook`. The new context layers
7
+ * `state.*` (sync state reads), `resolve.*` (async framework-mediated
8
+ * resolvers), and `handoffToTask(...)` (the unified hybrid-seller handoff
9
+ * primitive) on top.
10
+ *
11
+ * **Stub status — v6.0 alpha.** `state.*` (workflow-step reads, proposal
12
+ * lookups, governance JWS) and `resolve.*` (property/collection-list +
13
+ * format fetchers) are NOT yet wired. The state readers return empty
14
+ * results; the resolvers throw. Touching them in a platform method will
15
+ * crash the request — the framework hasn't connected them to an underlying
16
+ * store / fetch layer yet.
17
+ *
18
+ * Adopters spiking against the preview surface MUST avoid `ctx.state.*`
19
+ * and `ctx.resolve.*` until the wire-up commits land in rc.1. Use
20
+ * `ctx.account`, `ctx.handoffToTask(...)`, and the structured-error /
21
+ * status-change primitives only.
22
+ *
23
+ * @internal — framework-internal wiring; not adopter surface. The
24
+ * exported helpers (`buildRequestContext`, `buildHandoffContext`) are
25
+ * called from the dispatch seam in `from-platform.ts`. Adopters should
26
+ * never construct a `RequestContext` themselves; the framework supplies
27
+ * one to every specialism method call.
28
+ */
29
+ import type { Account } from '../account';
30
+ import type { RequestContext } from '../context';
31
+ import type { TaskRegistry } from './task-registry';
32
+ import { type TaskHandoffContext } from '../async-outcome';
33
+ import type { CtxMetadataStore } from '../../ctx-metadata';
34
+ export declare function buildRequestContext<TCtxMeta = Record<string, unknown>>(handlerCtx: HandlerContext<Account<TCtxMeta>>, ctxMetadataStore?: CtxMetadataStore): RequestContext<Account<TCtxMeta>>;
35
+ /**
36
+ * Construct a `TaskHandoffContext` from a registry + framework-issued
37
+ * task id. The framework calls this AFTER detecting a `TaskHandoff`
38
+ * marker on a method's return — the handoff function gets a context
39
+ * carrying the framework-allocated `taskId` plus `update`/`heartbeat`
40
+ * affordances.
41
+ *
42
+ * `update(progress)` writes the progress payload to the task record and
43
+ * transitions status `submitted` → `working`. Buyers polling `tasks_get`
44
+ * see the `progress` object and the `'working'` status — this is the
45
+ * buyer-facing UX signal that distinguishes "stuck/no news" from
46
+ * "step 2/3, awaiting trafficker." Errors from the registry write are
47
+ * swallowed so a transient DB hiccup doesn't abort the adopter's handoff
48
+ * function.
49
+ *
50
+ * `heartbeat()` remains a no-op stub (v6.1); it is a liveness / TTL-reset
51
+ * signal for operator infrastructure, not buyer-facing.
52
+ */
53
+ export declare function buildHandoffContext(taskRegistry: TaskRegistry, taskId: string): TaskHandoffContext;
54
+ //# sourceMappingURL=to-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"to-context.d.ts","sourceRoot":"","sources":["../../../../../src/lib/server/decisioning/runtime/to-context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,KAAK,EAAE,cAAc,EAAuB,MAAM,YAAY,CAAC;AACtE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAsB,KAAK,kBAAkB,EAAoB,MAAM,kBAAkB,CAAC;AACjG,OAAO,KAAK,EAAE,gBAAgB,EAAgC,MAAM,oBAAoB,CAAC;AAgDzF,wBAAgB,mBAAmB,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACpE,UAAU,EAAE,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,EAC7C,gBAAgB,CAAC,EAAE,gBAAgB,GAClC,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAwDnC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,GAAG,kBAAkB,CAgBlG"}
@@ -0,0 +1,166 @@
1
+ "use strict";
2
+ /**
3
+ * Translate the existing `HandlerContext` into the v6 `RequestContext` shape
4
+ * that platform methods receive.
5
+ *
6
+ * The handler-style framework already resolves the account, sets sessionKey,
7
+ * and exposes `store` + `authInfo` + `emitWebhook`. The new context layers
8
+ * `state.*` (sync state reads), `resolve.*` (async framework-mediated
9
+ * resolvers), and `handoffToTask(...)` (the unified hybrid-seller handoff
10
+ * primitive) on top.
11
+ *
12
+ * **Stub status — v6.0 alpha.** `state.*` (workflow-step reads, proposal
13
+ * lookups, governance JWS) and `resolve.*` (property/collection-list +
14
+ * format fetchers) are NOT yet wired. The state readers return empty
15
+ * results; the resolvers throw. Touching them in a platform method will
16
+ * crash the request — the framework hasn't connected them to an underlying
17
+ * store / fetch layer yet.
18
+ *
19
+ * Adopters spiking against the preview surface MUST avoid `ctx.state.*`
20
+ * and `ctx.resolve.*` until the wire-up commits land in rc.1. Use
21
+ * `ctx.account`, `ctx.handoffToTask(...)`, and the structured-error /
22
+ * status-change primitives only.
23
+ *
24
+ * @internal — framework-internal wiring; not adopter surface. The
25
+ * exported helpers (`buildRequestContext`, `buildHandoffContext`) are
26
+ * called from the dispatch seam in `from-platform.ts`. Adopters should
27
+ * never construct a `RequestContext` themselves; the framework supplies
28
+ * one to every specialism method call.
29
+ */
30
+ Object.defineProperty(exports, "__esModule", { value: true });
31
+ exports.buildRequestContext = buildRequestContext;
32
+ exports.buildHandoffContext = buildHandoffContext;
33
+ const async_outcome_1 = require("../async-outcome");
34
+ /**
35
+ * Build an account-scoped CtxMetadataAccessor for a single request.
36
+ *
37
+ * Account scope comes from `ctx.account.id` — accessor methods don't take
38
+ * an account param. When `account.id` is null/undefined (no-account tools),
39
+ * the accessor methods reject — no-account tools cannot use ctx_metadata
40
+ * (cross-tenant collision risk via missing scope).
41
+ */
42
+ function buildCtxMetadataAccessor(store, accountId) {
43
+ return {
44
+ get(kind, id) {
45
+ return store.get(accountId, kind, id);
46
+ },
47
+ bulkGet(refs) {
48
+ return store.bulkGet(accountId, refs);
49
+ },
50
+ set(kind, id, value, ttlSeconds) {
51
+ return store.set(accountId, kind, id, value, ttlSeconds);
52
+ },
53
+ delete(kind, id) {
54
+ return store.delete(accountId, kind, id);
55
+ },
56
+ account(id) {
57
+ return store.get(accountId, 'account', id);
58
+ },
59
+ product(id) {
60
+ return store.get(accountId, 'product', id);
61
+ },
62
+ mediaBuy(id) {
63
+ return store.get(accountId, 'media_buy', id);
64
+ },
65
+ package(id) {
66
+ return store.get(accountId, 'package', id);
67
+ },
68
+ creative(id) {
69
+ return store.get(accountId, 'creative', id);
70
+ },
71
+ audience(id) {
72
+ return store.get(accountId, 'audience', id);
73
+ },
74
+ signal(id) {
75
+ return store.get(accountId, 'signal', id);
76
+ },
77
+ };
78
+ }
79
+ function buildRequestContext(handlerCtx, ctxMetadataStore) {
80
+ // `account` may legitimately be undefined for tools whose wire request
81
+ // doesn't carry an `account` field AND whose `resolveAccountFromAuth`
82
+ // returned null (`'explicit'`-mode adopters who don't model the
83
+ // no-account tools, or buyers calling without auth). Adopter handlers
84
+ // for those tools are responsible for either deriving the account
85
+ // themselves (e.g., via `media_buy_id` ownership) or throwing
86
+ // `AdcpError('ACCOUNT_NOT_FOUND')` if account is required.
87
+ //
88
+ // The `RequestContext.account` type is non-optional for ergonomic typing
89
+ // — adopters writing handlers for the 90% case (tools with `account` on
90
+ // the wire) shouldn't have to optional-chain everywhere. Adopters of
91
+ // no-account tools either:
92
+ // 1. Declare `resolution: 'derived'` and return a singleton from
93
+ // `accounts.resolve(undefined)` — `ctx.account` is always set
94
+ // 2. Implement only `'explicit'` and never claim no-account
95
+ // specialisms — the tool is unreachable
96
+ // 3. Read `ctx.account` defensively (`as Account | undefined` cast)
97
+ // and look up by request body when missing
98
+ const account = handlerCtx.account;
99
+ const stubResolver = (name) => async () => {
100
+ throw new Error(`ctx.resolve.${name}: not yet wired in v6.0 alpha — landing in rc.1. ` +
101
+ `Avoid touching ctx.resolve.* in adopter code until the framework ` +
102
+ `connects this resolver to an underlying fetcher.`);
103
+ };
104
+ // Bind ctx-metadata accessor when store wired AND account scope present.
105
+ // No-account tools (provide_performance_feedback, list_creative_formats)
106
+ // get `ctx.ctxMetadata = undefined` even when the store is wired — cannot
107
+ // use ctx_metadata without an account boundary (cross-tenant risk).
108
+ const ctxMetadata = ctxMetadataStore != null && account != null && (account.id ?? '') !== ''
109
+ ? buildCtxMetadataAccessor(ctxMetadataStore, account.id)
110
+ : undefined;
111
+ return {
112
+ account,
113
+ state: {
114
+ findByObject: () => [],
115
+ findProposalById: () => null,
116
+ governanceContext: () => null,
117
+ workflowSteps: () => [],
118
+ },
119
+ resolve: {
120
+ propertyList: stubResolver('propertyList'),
121
+ collectionList: stubResolver('collectionList'),
122
+ creativeFormat: stubResolver('creativeFormat'),
123
+ },
124
+ ctxMetadata,
125
+ handoffToTask(fn) {
126
+ return (0, async_outcome_1._createTaskHandoff)(fn);
127
+ },
128
+ };
129
+ }
130
+ /**
131
+ * Construct a `TaskHandoffContext` from a registry + framework-issued
132
+ * task id. The framework calls this AFTER detecting a `TaskHandoff`
133
+ * marker on a method's return — the handoff function gets a context
134
+ * carrying the framework-allocated `taskId` plus `update`/`heartbeat`
135
+ * affordances.
136
+ *
137
+ * `update(progress)` writes the progress payload to the task record and
138
+ * transitions status `submitted` → `working`. Buyers polling `tasks_get`
139
+ * see the `progress` object and the `'working'` status — this is the
140
+ * buyer-facing UX signal that distinguishes "stuck/no news" from
141
+ * "step 2/3, awaiting trafficker." Errors from the registry write are
142
+ * swallowed so a transient DB hiccup doesn't abort the adopter's handoff
143
+ * function.
144
+ *
145
+ * `heartbeat()` remains a no-op stub (v6.1); it is a liveness / TTL-reset
146
+ * signal for operator infrastructure, not buyer-facing.
147
+ */
148
+ function buildHandoffContext(taskRegistry, taskId) {
149
+ return {
150
+ id: taskId,
151
+ update: async (progress) => {
152
+ try {
153
+ await taskRegistry.updateProgress(taskId, progress);
154
+ }
155
+ catch {
156
+ // Swallow — a transient registry write failure must not abort the
157
+ // adopter's background handoff function. The buyer-facing impact is
158
+ // a missed progress event, not a failed task.
159
+ }
160
+ },
161
+ heartbeat: async () => {
162
+ await Promise.resolve();
163
+ },
164
+ };
165
+ }
166
+ //# sourceMappingURL=to-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"to-context.js","sourceRoot":"","sources":["../../../../../src/lib/server/decisioning/runtime/to-context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Runtime validation that a `DecisioningPlatform` impl matches its
3
+ * `capabilities.specialisms[]` declaration.
4
+ *
5
+ * Compile-time, `RequiredPlatformsFor<S>` enforces this in TypeScript adopter
6
+ * code. Untyped JS callers, downstream packages with relaxed `tsconfig`, and
7
+ * Python-port adopters running this through bindings need a runtime gate.
8
+ *
9
+ * Mirrors the v1.0 specialism × interface mapping in
10
+ * `src/lib/server/decisioning/platform.ts`.
11
+ *
12
+ * @public
13
+ */
14
+ import type { DecisioningPlatform } from '../platform';
15
+ export declare class PlatformConfigError extends Error {
16
+ readonly name: "PlatformConfigError";
17
+ constructor(message: string);
18
+ }
19
+ export declare function validatePlatform(platform: DecisioningPlatform): void;
20
+ //# sourceMappingURL=validate-platform.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-platform.d.ts","sourceRoot":"","sources":["../../../../../src/lib/server/decisioning/runtime/validate-platform.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AA2CvD,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,QAAQ,CAAC,IAAI,EAAG,qBAAqB,CAAU;gBACnC,OAAO,EAAE,MAAM;CAG5B;AAcD,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,mBAAmB,GAAG,IAAI,CAkBpE"}