@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.
- package/README.md +45 -7
- package/dist/lib/compliance-fixtures/index.d.ts +1 -1
- package/dist/lib/compliance-fixtures/index.js +1 -1
- package/dist/lib/core/AgentClient.d.ts.map +1 -1
- package/dist/lib/core/SingleAgentClient.d.ts.map +1 -1
- package/dist/lib/core/SingleAgentClient.js +15 -0
- package/dist/lib/core/SingleAgentClient.js.map +1 -1
- package/dist/lib/core/TaskExecutor.d.ts +7 -0
- package/dist/lib/core/TaskExecutor.d.ts.map +1 -1
- package/dist/lib/core/TaskExecutor.js +9 -2
- package/dist/lib/core/TaskExecutor.js.map +1 -1
- package/dist/lib/index.d.ts +1 -1
- package/dist/lib/index.d.ts.map +1 -1
- package/dist/lib/index.js +7 -8
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/schemas/index.d.ts +1 -1
- package/dist/lib/schemas/index.js +1 -1
- package/dist/lib/server/create-adcp-server.d.ts +129 -11
- package/dist/lib/server/create-adcp-server.d.ts.map +1 -1
- package/dist/lib/server/create-adcp-server.js +112 -2
- package/dist/lib/server/create-adcp-server.js.map +1 -1
- package/dist/lib/server/ctx-metadata/backends/memory.d.ts +27 -0
- package/dist/lib/server/ctx-metadata/backends/memory.d.ts.map +1 -0
- package/dist/lib/server/ctx-metadata/backends/memory.js +72 -0
- package/dist/lib/server/ctx-metadata/backends/memory.js.map +1 -0
- package/dist/lib/server/ctx-metadata/backends/pg.d.ts +62 -0
- package/dist/lib/server/ctx-metadata/backends/pg.d.ts.map +1 -0
- package/dist/lib/server/ctx-metadata/backends/pg.js +145 -0
- package/dist/lib/server/ctx-metadata/backends/pg.js.map +1 -0
- package/dist/lib/server/ctx-metadata/index.d.ts +15 -0
- package/dist/lib/server/ctx-metadata/index.d.ts.map +1 -0
- package/dist/lib/server/ctx-metadata/index.js +28 -0
- package/dist/lib/server/ctx-metadata/index.js.map +1 -0
- package/dist/lib/server/ctx-metadata/store.d.ts +177 -0
- package/dist/lib/server/ctx-metadata/store.d.ts.map +1 -0
- package/dist/lib/server/ctx-metadata/store.js +327 -0
- package/dist/lib/server/ctx-metadata/store.js.map +1 -0
- package/dist/lib/server/ctx-metadata/wire-shape.d.ts +55 -0
- package/dist/lib/server/ctx-metadata/wire-shape.d.ts.map +1 -0
- package/dist/lib/server/ctx-metadata/wire-shape.js +121 -0
- package/dist/lib/server/ctx-metadata/wire-shape.js.map +1 -0
- package/dist/lib/server/decisioning/account.d.ts +309 -0
- package/dist/lib/server/decisioning/account.d.ts.map +1 -0
- package/dist/lib/server/decisioning/account.js +102 -0
- package/dist/lib/server/decisioning/account.js.map +1 -0
- package/dist/lib/server/decisioning/admin-router.d.ts +75 -0
- package/dist/lib/server/decisioning/admin-router.d.ts.map +1 -0
- package/dist/lib/server/decisioning/admin-router.js +120 -0
- package/dist/lib/server/decisioning/admin-router.js.map +1 -0
- package/dist/lib/server/decisioning/assembly-helpers.d.ts +204 -0
- package/dist/lib/server/decisioning/assembly-helpers.d.ts.map +1 -0
- package/dist/lib/server/decisioning/assembly-helpers.js +173 -0
- package/dist/lib/server/decisioning/assembly-helpers.js.map +1 -0
- package/dist/lib/server/decisioning/async-outcome.d.ts +154 -0
- package/dist/lib/server/decisioning/async-outcome.d.ts.map +1 -0
- package/dist/lib/server/decisioning/async-outcome.js +239 -0
- package/dist/lib/server/decisioning/async-outcome.js.map +1 -0
- package/dist/lib/server/decisioning/capabilities.d.ts +251 -0
- package/dist/lib/server/decisioning/capabilities.d.ts.map +1 -0
- package/dist/lib/server/decisioning/capabilities.js +16 -0
- package/dist/lib/server/decisioning/capabilities.js.map +1 -0
- package/dist/lib/server/decisioning/context.d.ts +212 -0
- package/dist/lib/server/decisioning/context.d.ts.map +1 -0
- package/dist/lib/server/decisioning/context.js +26 -0
- package/dist/lib/server/decisioning/context.js.map +1 -0
- package/dist/lib/server/decisioning/errors-typed.d.ts +104 -0
- package/dist/lib/server/decisioning/errors-typed.d.ts.map +1 -0
- package/dist/lib/server/decisioning/errors-typed.js +304 -0
- package/dist/lib/server/decisioning/errors-typed.js.map +1 -0
- package/dist/lib/server/decisioning/helpers.d.ts +131 -0
- package/dist/lib/server/decisioning/helpers.d.ts.map +1 -0
- package/dist/lib/server/decisioning/helpers.js +134 -0
- package/dist/lib/server/decisioning/helpers.js.map +1 -0
- package/dist/lib/server/decisioning/index.d.ts +46 -0
- package/dist/lib/server/decisioning/index.d.ts.map +1 -0
- package/dist/lib/server/decisioning/index.js +120 -0
- package/dist/lib/server/decisioning/index.js.map +1 -0
- package/dist/lib/server/decisioning/list-helpers.d.ts +53 -0
- package/dist/lib/server/decisioning/list-helpers.d.ts.map +1 -0
- package/dist/lib/server/decisioning/list-helpers.js +96 -0
- package/dist/lib/server/decisioning/list-helpers.js.map +1 -0
- package/dist/lib/server/decisioning/manifest-helpers.d.ts +56 -0
- package/dist/lib/server/decisioning/manifest-helpers.d.ts.map +1 -0
- package/dist/lib/server/decisioning/manifest-helpers.js +78 -0
- package/dist/lib/server/decisioning/manifest-helpers.js.map +1 -0
- package/dist/lib/server/decisioning/pagination.d.ts +21 -0
- package/dist/lib/server/decisioning/pagination.d.ts.map +1 -0
- package/dist/lib/server/decisioning/pagination.js +12 -0
- package/dist/lib/server/decisioning/pagination.js.map +1 -0
- package/dist/lib/server/decisioning/platform.d.ts +188 -0
- package/dist/lib/server/decisioning/platform.d.ts.map +1 -0
- package/dist/lib/server/decisioning/platform.js +19 -0
- package/dist/lib/server/decisioning/platform.js.map +1 -0
- package/dist/lib/server/decisioning/runtime/from-platform.d.ts +510 -0
- package/dist/lib/server/decisioning/runtime/from-platform.d.ts.map +1 -0
- package/dist/lib/server/decisioning/runtime/from-platform.js +2196 -0
- package/dist/lib/server/decisioning/runtime/from-platform.js.map +1 -0
- package/dist/lib/server/decisioning/runtime/postgres-task-registry.d.ts +114 -0
- package/dist/lib/server/decisioning/runtime/postgres-task-registry.d.ts.map +1 -0
- package/dist/lib/server/decisioning/runtime/postgres-task-registry.js +247 -0
- package/dist/lib/server/decisioning/runtime/postgres-task-registry.js.map +1 -0
- package/dist/lib/server/decisioning/runtime/protocol-for-tool.d.ts +32 -0
- package/dist/lib/server/decisioning/runtime/protocol-for-tool.d.ts.map +1 -0
- package/dist/lib/server/decisioning/runtime/protocol-for-tool.js +127 -0
- package/dist/lib/server/decisioning/runtime/protocol-for-tool.js.map +1 -0
- package/dist/lib/server/decisioning/runtime/task-registry.d.ts +105 -0
- package/dist/lib/server/decisioning/runtime/task-registry.d.ts.map +1 -0
- package/dist/lib/server/decisioning/runtime/task-registry.js +96 -0
- package/dist/lib/server/decisioning/runtime/task-registry.js.map +1 -0
- package/dist/lib/server/decisioning/runtime/to-context.d.ts +54 -0
- package/dist/lib/server/decisioning/runtime/to-context.d.ts.map +1 -0
- package/dist/lib/server/decisioning/runtime/to-context.js +166 -0
- package/dist/lib/server/decisioning/runtime/to-context.js.map +1 -0
- package/dist/lib/server/decisioning/runtime/validate-platform.d.ts +20 -0
- package/dist/lib/server/decisioning/runtime/validate-platform.d.ts.map +1 -0
- package/dist/lib/server/decisioning/runtime/validate-platform.js +93 -0
- package/dist/lib/server/decisioning/runtime/validate-platform.js.map +1 -0
- package/dist/lib/server/decisioning/specialisms/audiences.d.ts +72 -0
- package/dist/lib/server/decisioning/specialisms/audiences.d.ts.map +1 -0
- package/dist/lib/server/decisioning/specialisms/audiences.js +15 -0
- package/dist/lib/server/decisioning/specialisms/audiences.js.map +1 -0
- package/dist/lib/server/decisioning/specialisms/brand-rights.d.ts +92 -0
- package/dist/lib/server/decisioning/specialisms/brand-rights.d.ts.map +1 -0
- package/dist/lib/server/decisioning/specialisms/brand-rights.js +28 -0
- package/dist/lib/server/decisioning/specialisms/brand-rights.js.map +1 -0
- package/dist/lib/server/decisioning/specialisms/campaign-governance.d.ts +67 -0
- package/dist/lib/server/decisioning/specialisms/campaign-governance.d.ts.map +1 -0
- package/dist/lib/server/decisioning/specialisms/campaign-governance.js +31 -0
- package/dist/lib/server/decisioning/specialisms/campaign-governance.js.map +1 -0
- package/dist/lib/server/decisioning/specialisms/content-standards.d.ts +78 -0
- package/dist/lib/server/decisioning/specialisms/content-standards.d.ts.map +1 -0
- package/dist/lib/server/decisioning/specialisms/content-standards.js +35 -0
- package/dist/lib/server/decisioning/specialisms/content-standards.js.map +1 -0
- package/dist/lib/server/decisioning/specialisms/creative-ad-server.d.ts +81 -0
- package/dist/lib/server/decisioning/specialisms/creative-ad-server.d.ts.map +1 -0
- package/dist/lib/server/decisioning/specialisms/creative-ad-server.js +28 -0
- package/dist/lib/server/decisioning/specialisms/creative-ad-server.js.map +1 -0
- package/dist/lib/server/decisioning/specialisms/creative.d.ts +144 -0
- package/dist/lib/server/decisioning/specialisms/creative.d.ts.map +1 -0
- package/dist/lib/server/decisioning/specialisms/creative.js +19 -0
- package/dist/lib/server/decisioning/specialisms/creative.js.map +1 -0
- package/dist/lib/server/decisioning/specialisms/lists.d.ts +61 -0
- package/dist/lib/server/decisioning/specialisms/lists.d.ts.map +1 -0
- package/dist/lib/server/decisioning/specialisms/lists.js +30 -0
- package/dist/lib/server/decisioning/specialisms/lists.js.map +1 -0
- package/dist/lib/server/decisioning/specialisms/sales.d.ts +163 -0
- package/dist/lib/server/decisioning/specialisms/sales.d.ts.map +1 -0
- package/dist/lib/server/decisioning/specialisms/sales.js +64 -0
- package/dist/lib/server/decisioning/specialisms/sales.js.map +1 -0
- package/dist/lib/server/decisioning/specialisms/signals.d.ts +64 -0
- package/dist/lib/server/decisioning/specialisms/signals.d.ts.map +1 -0
- package/dist/lib/server/decisioning/specialisms/signals.js +28 -0
- package/dist/lib/server/decisioning/specialisms/signals.js.map +1 -0
- package/dist/lib/server/decisioning/start-time.d.ts +76 -0
- package/dist/lib/server/decisioning/start-time.d.ts.map +1 -0
- package/dist/lib/server/decisioning/start-time.js +81 -0
- package/dist/lib/server/decisioning/start-time.js.map +1 -0
- package/dist/lib/server/decisioning/status-changes.d.ts +165 -0
- package/dist/lib/server/decisioning/status-changes.d.ts.map +1 -0
- package/dist/lib/server/decisioning/status-changes.js +131 -0
- package/dist/lib/server/decisioning/status-changes.js.map +1 -0
- package/dist/lib/server/decisioning/status-mappers.d.ts +46 -0
- package/dist/lib/server/decisioning/status-mappers.d.ts.map +1 -0
- package/dist/lib/server/decisioning/status-mappers.js +46 -0
- package/dist/lib/server/decisioning/status-mappers.js.map +1 -0
- package/dist/lib/server/decisioning/tenant-registry.d.ts +289 -0
- package/dist/lib/server/decisioning/tenant-registry.d.ts.map +1 -0
- package/dist/lib/server/decisioning/tenant-registry.js +503 -0
- package/dist/lib/server/decisioning/tenant-registry.js.map +1 -0
- package/dist/lib/server/express-adapter.d.ts +1 -1
- package/dist/lib/server/express-adapter.js +1 -1
- package/dist/lib/server/governance.d.ts +1 -1
- package/dist/lib/server/governance.js +1 -1
- package/dist/lib/server/idempotency/store.d.ts +1 -1
- package/dist/lib/server/idempotency/store.js +1 -1
- package/dist/lib/server/index.d.ts +9 -2
- package/dist/lib/server/index.d.ts.map +1 -1
- package/dist/lib/server/index.js +79 -4
- package/dist/lib/server/index.js.map +1 -1
- package/dist/lib/server/legacy/v5/index.d.ts +38 -0
- package/dist/lib/server/legacy/v5/index.d.ts.map +1 -0
- package/dist/lib/server/legacy/v5/index.js +60 -0
- package/dist/lib/server/legacy/v5/index.js.map +1 -0
- package/dist/lib/server/normalize-errors.d.ts +88 -0
- package/dist/lib/server/normalize-errors.d.ts.map +1 -0
- package/dist/lib/server/normalize-errors.js +146 -0
- package/dist/lib/server/normalize-errors.js.map +1 -0
- package/dist/lib/server/pick-safe-details.d.ts +90 -0
- package/dist/lib/server/pick-safe-details.d.ts.map +1 -0
- package/dist/lib/server/pick-safe-details.js +148 -0
- package/dist/lib/server/pick-safe-details.js.map +1 -0
- package/dist/lib/server/postgres-state-store.d.ts +1 -1
- package/dist/lib/server/postgres-state-store.js +1 -1
- package/dist/lib/server/responses.d.ts +38 -0
- package/dist/lib/server/responses.d.ts.map +1 -1
- package/dist/lib/server/responses.js +38 -0
- package/dist/lib/server/responses.js.map +1 -1
- package/dist/lib/server/state-store.d.ts +1 -1
- package/dist/lib/server/state-store.js +1 -1
- package/dist/lib/server/test-controller.d.ts +10 -3
- package/dist/lib/server/test-controller.d.ts.map +1 -1
- package/dist/lib/server/test-controller.js +10 -3
- package/dist/lib/server/test-controller.js.map +1 -1
- package/dist/lib/testing/comply-controller.d.ts +47 -1
- package/dist/lib/testing/comply-controller.d.ts.map +1 -1
- package/dist/lib/testing/comply-controller.js +11 -4
- package/dist/lib/testing/comply-controller.js.map +1 -1
- package/dist/lib/testing/index.d.ts +1 -1
- package/dist/lib/testing/index.d.ts.map +1 -1
- package/dist/lib/testing/index.js.map +1 -1
- package/dist/lib/testing/personas/index.d.ts +143 -0
- package/dist/lib/testing/personas/index.d.ts.map +1 -0
- package/dist/lib/testing/personas/index.js +190 -0
- package/dist/lib/testing/personas/index.js.map +1 -0
- package/dist/lib/testing/storyboard/index.d.ts +1 -1
- package/dist/lib/testing/storyboard/index.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/index.js +3 -2
- package/dist/lib/testing/storyboard/index.js.map +1 -1
- package/dist/lib/testing/storyboard/runner.d.ts +13 -0
- package/dist/lib/testing/storyboard/runner.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/runner.js +179 -7
- package/dist/lib/testing/storyboard/runner.js.map +1 -1
- package/dist/lib/types/asset-instances.d.ts +1 -0
- package/dist/lib/types/asset-instances.d.ts.map +1 -1
- package/dist/lib/types/core.generated.d.ts +203 -98
- package/dist/lib/types/core.generated.d.ts.map +1 -1
- package/dist/lib/types/core.generated.js +1 -1
- package/dist/lib/types/index.d.ts +1 -0
- package/dist/lib/types/index.d.ts.map +1 -1
- package/dist/lib/types/index.js.map +1 -1
- package/dist/lib/types/schemas.generated.d.ts +599 -159
- package/dist/lib/types/schemas.generated.d.ts.map +1 -1
- package/dist/lib/types/schemas.generated.js +175 -94
- package/dist/lib/types/schemas.generated.js.map +1 -1
- package/dist/lib/types/tools.generated.d.ts +315 -46
- package/dist/lib/types/tools.generated.d.ts.map +1 -1
- package/dist/lib/utils/capabilities.d.ts +1 -1
- package/dist/lib/utils/capabilities.d.ts.map +1 -1
- package/dist/lib/utils/capabilities.js +6 -0
- package/dist/lib/utils/capabilities.js.map +1 -1
- package/dist/lib/validation/schema-validator.d.ts +13 -0
- package/dist/lib/validation/schema-validator.d.ts.map +1 -1
- package/dist/lib/validation/schema-validator.js +240 -3
- package/dist/lib/validation/schema-validator.js.map +1 -1
- package/dist/lib/version.d.ts +3 -3
- package/dist/lib/version.d.ts.map +1 -1
- package/dist/lib/version.js +3 -3
- package/dist/lib/version.js.map +1 -1
- package/docs/guides/BUILD-AN-AGENT.md +30 -5
- package/docs/llms.txt +28 -17
- package/examples/README.md +3 -1
- package/examples/decisioning-platform-broadcast-tv.ts +300 -0
- package/examples/decisioning-platform-identity-graph.ts +214 -0
- package/examples/decisioning-platform-mock-seller.ts +332 -0
- package/examples/decisioning-platform-multi-tenant.ts +128 -0
- package/examples/decisioning-platform-programmatic.ts +254 -0
- package/examples/signals-agent.ts +1 -1
- package/package.json +13 -2
- package/skills/build-brand-rights-agent/SKILL.md +10 -3
- package/skills/build-creative-agent/SKILL.md +94 -64
- package/skills/build-decisioning-creative-template/SKILL.md +554 -0
- package/skills/build-decisioning-platform/SKILL.md +304 -0
- package/skills/build-decisioning-platform/advanced/BRAND-RIGHTS.md +25 -0
- package/skills/build-decisioning-platform/advanced/COMPLIANCE.md +23 -0
- package/skills/build-decisioning-platform/advanced/GOVERNANCE.md +24 -0
- package/skills/build-decisioning-platform/advanced/HITL.md +34 -0
- package/skills/build-decisioning-platform/advanced/IDEMPOTENCY.md +52 -0
- package/skills/build-decisioning-platform/advanced/MULTI-TENANT.md +47 -0
- package/skills/build-decisioning-platform/advanced/OAUTH.md +22 -0
- package/skills/build-decisioning-platform/advanced/REFERENCE.md +991 -0
- package/skills/build-decisioning-platform/advanced/SANDBOX.md +24 -0
- package/skills/build-decisioning-platform/advanced/STATE-MACHINE.md +52 -0
- package/skills/build-decisioning-signal-marketplace/SKILL.md +269 -0
- package/skills/build-generative-seller-agent/SKILL.md +89 -53
- package/skills/build-governance-agent/SKILL.md +76 -45
- package/skills/build-retail-media-agent/SKILL.md +87 -62
- package/skills/build-seller-agent/SKILL.md +384 -255
- package/skills/build-seller-agent/deployment.md +5 -3
- package/skills/build-seller-agent/specialisms/audience-sync.md +0 -2
- package/skills/build-seller-agent/specialisms/sales-broadcast-tv.md +0 -2
- package/skills/build-seller-agent/specialisms/sales-guaranteed.md +0 -2
- package/skills/build-seller-agent/specialisms/sales-non-guaranteed.md +0 -2
- package/skills/build-seller-agent/specialisms/sales-proposal-mode.md +0 -2
- package/skills/build-seller-agent/specialisms/sales-social.md +0 -2
- package/skills/build-seller-agent/specialisms/signed-requests.md +0 -2
- package/skills/build-si-agent/SKILL.md +40 -32
- package/skills/build-signals-agent/SKILL.md +139 -92
- 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"}
|