@adcp/sdk 14.0.0-beta.11 → 14.0.0-beta.13
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/bin/adcp-storyboard-sandbox.js +16 -0
- package/bin/adcp.js +28 -30
- package/dist/lib/index.d.mts +3 -3
- package/dist/lib/index.d.ts +3 -3
- package/dist/lib/index.d.ts.map +1 -1
- package/dist/lib/index.js +2 -0
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/index.mjs +3 -1
- package/dist/lib/index.mjs.map +1 -1
- package/dist/lib/schemas/index.d.mts +385 -1
- package/dist/lib/schemas/index.d.ts +385 -1
- package/dist/lib/schemas/index.d.ts.map +1 -1
- package/dist/lib/schemas/index.js +13 -0
- package/dist/lib/schemas/index.js.map +1 -1
- package/dist/lib/schemas/index.mjs +11 -0
- package/dist/lib/schemas/index.mjs.map +1 -1
- package/dist/lib/schemas-data/v2.5/_provenance.json +1 -1
- package/dist/lib/server/create-adcp-server.d.mts +2 -2
- package/dist/lib/server/create-adcp-server.d.ts +2 -2
- package/dist/lib/server/create-adcp-server.d.ts.map +1 -1
- package/dist/lib/server/create-adcp-server.js +6 -1
- package/dist/lib/server/create-adcp-server.js.map +1 -1
- package/dist/lib/server/create-adcp-server.mjs +6 -1
- package/dist/lib/server/create-adcp-server.mjs.map +1 -1
- package/dist/lib/server/decisioning/index.d.mts +3 -3
- package/dist/lib/server/decisioning/index.d.ts +3 -3
- package/dist/lib/server/decisioning/index.d.ts.map +1 -1
- package/dist/lib/server/decisioning/index.js.map +1 -1
- package/dist/lib/server/decisioning/index.mjs.map +1 -1
- package/dist/lib/server/decisioning/runtime/from-platform.d.mts +24 -17
- package/dist/lib/server/decisioning/runtime/from-platform.d.ts +24 -17
- package/dist/lib/server/decisioning/runtime/from-platform.d.ts.map +1 -1
- package/dist/lib/server/decisioning/runtime/from-platform.js +71 -42
- package/dist/lib/server/decisioning/runtime/from-platform.js.map +1 -1
- package/dist/lib/server/decisioning/runtime/from-platform.mjs +75 -43
- package/dist/lib/server/decisioning/runtime/from-platform.mjs.map +1 -1
- package/dist/lib/server/decisioning/runtime/postgres-task-registry.d.mts +15 -21
- package/dist/lib/server/decisioning/runtime/postgres-task-registry.d.ts +15 -21
- package/dist/lib/server/decisioning/runtime/postgres-task-registry.d.ts.map +1 -1
- package/dist/lib/server/decisioning/runtime/postgres-task-registry.js +100 -30
- package/dist/lib/server/decisioning/runtime/postgres-task-registry.js.map +1 -1
- package/dist/lib/server/decisioning/runtime/postgres-task-registry.mjs +100 -30
- package/dist/lib/server/decisioning/runtime/postgres-task-registry.mjs.map +1 -1
- package/dist/lib/server/decisioning/runtime/task-registry.d.mts +30 -16
- package/dist/lib/server/decisioning/runtime/task-registry.d.ts +30 -16
- package/dist/lib/server/decisioning/runtime/task-registry.d.ts.map +1 -1
- package/dist/lib/server/decisioning/runtime/task-registry.js +40 -20
- package/dist/lib/server/decisioning/runtime/task-registry.js.map +1 -1
- package/dist/lib/server/decisioning/runtime/task-registry.mjs +38 -19
- package/dist/lib/server/decisioning/runtime/task-registry.mjs.map +1 -1
- package/dist/lib/server/decisioning/runtime/to-context.d.mts +2 -2
- package/dist/lib/server/decisioning/runtime/to-context.d.ts +2 -2
- package/dist/lib/server/decisioning/runtime/to-context.d.ts.map +1 -1
- package/dist/lib/server/decisioning/runtime/to-context.js +2 -2
- package/dist/lib/server/decisioning/runtime/to-context.js.map +1 -1
- package/dist/lib/server/decisioning/runtime/to-context.mjs +2 -2
- package/dist/lib/server/decisioning/runtime/to-context.mjs.map +1 -1
- package/dist/lib/server/decisioning/specialisms/creative-ad-server.d.mts +3 -2
- package/dist/lib/server/decisioning/specialisms/creative-ad-server.d.ts +3 -2
- package/dist/lib/server/decisioning/specialisms/creative-ad-server.d.ts.map +1 -1
- package/dist/lib/server/decisioning/specialisms/creative-ad-server.js.map +1 -1
- package/dist/lib/server/decisioning/specialisms/creative.d.mts +10 -10
- package/dist/lib/server/decisioning/specialisms/creative.d.ts +10 -10
- package/dist/lib/server/decisioning/specialisms/creative.d.ts.map +1 -1
- package/dist/lib/server/decisioning/specialisms/creative.js.map +1 -1
- package/dist/lib/server/index.d.mts +1 -1
- package/dist/lib/server/index.d.ts +1 -1
- package/dist/lib/server/index.d.ts.map +1 -1
- package/dist/lib/server/index.js.map +1 -1
- package/dist/lib/server/index.mjs.map +1 -1
- package/dist/lib/signing/agent-context.d.mts +1 -0
- package/dist/lib/signing/agent-context.d.ts +1 -0
- package/dist/lib/signing/agent-context.d.ts.map +1 -1
- package/dist/lib/signing/agent-context.js +37 -2
- package/dist/lib/signing/agent-context.js.map +1 -1
- package/dist/lib/signing/agent-context.mjs +38 -3
- package/dist/lib/signing/agent-context.mjs.map +1 -1
- package/dist/lib/signing/agent-fetch.d.mts +1 -2
- package/dist/lib/signing/agent-fetch.d.ts +1 -2
- package/dist/lib/signing/agent-fetch.d.ts.map +1 -1
- package/dist/lib/signing/agent-fetch.js +2 -0
- package/dist/lib/signing/agent-fetch.js.map +1 -1
- package/dist/lib/signing/agent-fetch.mjs +2 -0
- package/dist/lib/signing/agent-fetch.mjs.map +1 -1
- package/dist/lib/signing/agent-resolver/etld.js.map +1 -1
- package/dist/lib/signing/agent-resolver/etld.mjs.map +1 -1
- package/dist/lib/testing/client.d.mts +6 -0
- package/dist/lib/testing/client.d.ts +6 -0
- package/dist/lib/testing/client.d.ts.map +1 -1
- package/dist/lib/testing/client.js +76 -4
- package/dist/lib/testing/client.js.map +1 -1
- package/dist/lib/testing/client.mjs +75 -4
- package/dist/lib/testing/client.mjs.map +1 -1
- package/dist/lib/testing/compliance/comply.d.ts.map +1 -1
- package/dist/lib/testing/compliance/comply.js +6 -0
- package/dist/lib/testing/compliance/comply.js.map +1 -1
- package/dist/lib/testing/compliance/comply.mjs +7 -1
- package/dist/lib/testing/compliance/comply.mjs.map +1 -1
- package/dist/lib/testing/storyboard/default-invariants.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/default-invariants.js +11 -2
- package/dist/lib/testing/storyboard/default-invariants.js.map +1 -1
- package/dist/lib/testing/storyboard/default-invariants.mjs +11 -2
- package/dist/lib/testing/storyboard/default-invariants.mjs.map +1 -1
- package/dist/lib/testing/storyboard/index.d.mts +1 -1
- 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.map +1 -1
- package/dist/lib/testing/storyboard/index.mjs.map +1 -1
- package/dist/lib/testing/storyboard/loader.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/loader.js +14 -0
- package/dist/lib/testing/storyboard/loader.js.map +1 -1
- package/dist/lib/testing/storyboard/loader.mjs +14 -0
- package/dist/lib/testing/storyboard/loader.mjs.map +1 -1
- package/dist/lib/testing/storyboard/phase-condition.d.mts +41 -0
- package/dist/lib/testing/storyboard/phase-condition.d.ts +42 -0
- package/dist/lib/testing/storyboard/phase-condition.d.ts.map +1 -0
- package/dist/lib/testing/storyboard/phase-condition.js +215 -0
- package/dist/lib/testing/storyboard/phase-condition.js.map +1 -0
- package/dist/lib/testing/storyboard/phase-condition.mjs +189 -0
- package/dist/lib/testing/storyboard/phase-condition.mjs.map +1 -0
- package/dist/lib/testing/storyboard/request-builder.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/request-builder.js +15 -2
- package/dist/lib/testing/storyboard/request-builder.js.map +1 -1
- package/dist/lib/testing/storyboard/request-builder.mjs +15 -2
- package/dist/lib/testing/storyboard/request-builder.mjs.map +1 -1
- package/dist/lib/testing/storyboard/request-signing/functional-dispatch.d.mts +15 -0
- package/dist/lib/testing/storyboard/request-signing/functional-dispatch.d.ts +16 -0
- package/dist/lib/testing/storyboard/request-signing/functional-dispatch.d.ts.map +1 -0
- package/dist/lib/testing/storyboard/request-signing/functional-dispatch.js +106 -0
- package/dist/lib/testing/storyboard/request-signing/functional-dispatch.js.map +1 -0
- package/dist/lib/testing/storyboard/request-signing/functional-dispatch.mjs +82 -0
- package/dist/lib/testing/storyboard/request-signing/functional-dispatch.mjs.map +1 -0
- package/dist/lib/testing/storyboard/request-signing/test-kit.d.mts +15 -0
- package/dist/lib/testing/storyboard/request-signing/test-kit.d.ts +15 -0
- package/dist/lib/testing/storyboard/request-signing/test-kit.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/request-signing/test-kit.js +58 -0
- package/dist/lib/testing/storyboard/request-signing/test-kit.js.map +1 -1
- package/dist/lib/testing/storyboard/request-signing/test-kit.mjs +58 -0
- package/dist/lib/testing/storyboard/request-signing/test-kit.mjs.map +1 -1
- package/dist/lib/testing/storyboard/request-signing/vector-loader.d.mts +2 -0
- package/dist/lib/testing/storyboard/request-signing/vector-loader.d.ts +2 -0
- package/dist/lib/testing/storyboard/request-signing/vector-loader.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/request-signing/vector-loader.js +7 -1
- package/dist/lib/testing/storyboard/request-signing/vector-loader.js.map +1 -1
- package/dist/lib/testing/storyboard/request-signing/vector-loader.mjs +6 -1
- package/dist/lib/testing/storyboard/request-signing/vector-loader.mjs.map +1 -1
- package/dist/lib/testing/storyboard/runner.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/runner.js +67 -24
- package/dist/lib/testing/storyboard/runner.js.map +1 -1
- package/dist/lib/testing/storyboard/runner.mjs +67 -24
- package/dist/lib/testing/storyboard/runner.mjs.map +1 -1
- package/dist/lib/testing/storyboard/task-map.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/task-map.js +6 -2
- package/dist/lib/testing/storyboard/task-map.js.map +1 -1
- package/dist/lib/testing/storyboard/task-map.mjs +6 -2
- package/dist/lib/testing/storyboard/task-map.mjs.map +1 -1
- package/dist/lib/testing/storyboard/types.d.mts +5 -4
- package/dist/lib/testing/storyboard/types.d.ts +5 -4
- package/dist/lib/testing/storyboard/types.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/types.js.map +1 -1
- package/dist/lib/testing/storyboard/types.mjs.map +1 -1
- package/dist/lib/testing/storyboard/validations.d.mts +1 -1
- package/dist/lib/testing/storyboard/validations.d.ts +1 -1
- package/dist/lib/testing/storyboard/webhook-assertions.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/webhook-assertions.js +60 -4
- package/dist/lib/testing/storyboard/webhook-assertions.js.map +1 -1
- package/dist/lib/testing/storyboard/webhook-assertions.mjs +60 -4
- package/dist/lib/testing/storyboard/webhook-assertions.mjs.map +1 -1
- package/dist/lib/testing/storyboard/webhook-receiver.d.mts +15 -0
- package/dist/lib/testing/storyboard/webhook-receiver.d.ts +15 -0
- package/dist/lib/testing/storyboard/webhook-receiver.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/webhook-receiver.js +57 -6
- package/dist/lib/testing/storyboard/webhook-receiver.js.map +1 -1
- package/dist/lib/testing/storyboard/webhook-receiver.mjs +57 -6
- package/dist/lib/testing/storyboard/webhook-receiver.mjs.map +1 -1
- package/dist/lib/testing/types.d.mts +12 -0
- package/dist/lib/testing/types.d.ts +12 -0
- package/dist/lib/testing/types.d.ts.map +1 -1
- package/dist/lib/testing/types.js.map +1 -1
- package/dist/lib/types/comply-test-controller.d.ts +1 -14
- package/dist/lib/types/core.generated.d.mts +6 -3
- package/dist/lib/types/core.generated.d.ts +6 -3
- package/dist/lib/types/core.generated.d.ts.map +1 -1
- package/dist/lib/types/core.generated.js.map +1 -1
- package/dist/lib/types/get-products.d.ts +1 -14
- package/dist/lib/types/index.d.mts +1 -1
- package/dist/lib/types/index.d.ts +1 -1
- package/dist/lib/types/index.d.ts.map +1 -1
- package/dist/lib/types/index.js.map +1 -1
- package/dist/lib/types/index.mjs.map +1 -1
- package/dist/lib/types/list-transformers.d.ts +9 -5
- package/dist/lib/types/schemas.generated.d.ts +23 -352
- package/dist/lib/types/schemas.generated.d.ts.map +1 -1
- package/dist/lib/types/schemas.generated.js +7 -4
- package/dist/lib/types/schemas.generated.js.map +1 -1
- package/dist/lib/types/schemas.generated.mjs +6 -4
- package/dist/lib/types/schemas.generated.mjs.map +1 -1
- package/dist/lib/types/server-payload-aliases.d.mts +2 -1
- package/dist/lib/types/server-payload-aliases.d.ts +2 -1
- package/dist/lib/types/server-payload-aliases.d.ts.map +1 -1
- package/dist/lib/types/server-payload-aliases.js.map +1 -1
- package/dist/lib/types/tools.generated.d.mts +6 -3
- package/dist/lib/types/tools.generated.d.ts +6 -3
- package/dist/lib/types/tools.generated.d.ts.map +1 -1
- package/dist/lib/types/tools.generated.js.map +1 -1
- package/dist/lib/utils/build-creative-return-builders.d.mts +5 -1
- package/dist/lib/utils/build-creative-return-builders.d.ts +5 -1
- package/dist/lib/utils/build-creative-return-builders.d.ts.map +1 -1
- package/dist/lib/utils/build-creative-return-builders.js +9 -3
- package/dist/lib/utils/build-creative-return-builders.js.map +1 -1
- package/dist/lib/utils/build-creative-return-builders.mjs +7 -2
- package/dist/lib/utils/build-creative-return-builders.mjs.map +1 -1
- package/dist/lib/utils/response-unwrapper.js +1 -1
- package/dist/lib/utils/response-unwrapper.js.map +1 -1
- package/dist/lib/utils/response-unwrapper.mjs +1 -1
- package/dist/lib/utils/response-unwrapper.mjs.map +1 -1
- package/dist/lib/validation/schema-loader.d.ts.map +1 -1
- package/dist/lib/validation/schema-loader.js +16 -7
- package/dist/lib/validation/schema-loader.js.map +1 -1
- package/dist/lib/validation/schema-loader.mjs +16 -7
- package/dist/lib/validation/schema-loader.mjs.map +1 -1
- package/dist/lib/version.d.mts +3 -3
- package/dist/lib/version.d.ts +3 -3
- package/dist/lib/version.js +3 -3
- package/dist/lib/version.js.map +1 -1
- package/dist/lib/version.mjs +3 -3
- package/dist/lib/version.mjs.map +1 -1
- package/docs/llms.txt +2 -2
- package/docs/migration-5.x-to-6.x.md +3 -2
- package/docs/migration-task-registry-scoping.md +61 -0
- package/examples/hello_seller_adapter_guaranteed.ts +1 -1
- package/package.json +5 -5
- package/skills/build-decisioning-creative-template/SKILL.md +2 -2
- package/skills/build-decisioning-platform/SKILL.md +4 -2
- package/skills/build-decisioning-platform/advanced/REFERENCE.md +7 -6
|
@@ -44,7 +44,10 @@ import { _extractResponseSummaryEntry } from "../response-summary.mjs";
|
|
|
44
44
|
import { productsResponse } from "../../responses.mjs";
|
|
45
45
|
import { TOOL_ENTITY_FIELDS } from "./entity-hydration.generated.mjs";
|
|
46
46
|
import { z } from "zod";
|
|
47
|
-
import {
|
|
47
|
+
import {
|
|
48
|
+
createInMemoryTaskRegistry,
|
|
49
|
+
taskRecordMatchesScope
|
|
50
|
+
} from "./task-registry.mjs";
|
|
48
51
|
import { protocolForTool, SPEC_WEBHOOK_TASK_TYPES } from "./protocol-for-tool.mjs";
|
|
49
52
|
const DEFAULT_FRAMEWORK_LOGGER = {
|
|
50
53
|
debug: () => {
|
|
@@ -1338,10 +1341,20 @@ function createAdcpServerFromPlatform(platform, opts) {
|
|
|
1338
1341
|
}
|
|
1339
1342
|
const pooledIdempotency = opts.pool && opts.idempotency === void 0 ? createIdempotencyStore({ backend: pgBackend(opts.pool) }) : void 0;
|
|
1340
1343
|
const pooledCtxMetadata = opts.pool && opts.ctxMetadata === void 0 ? createCtxMetadataStore({ backend: pgCtxMetadataStore(opts.pool) }) : void 0;
|
|
1341
|
-
|
|
1344
|
+
if (opts.pool && opts.taskRegistry === void 0 && opts.taskRegistryNamespace === void 0) {
|
|
1345
|
+
throw new PlatformConfigError(
|
|
1346
|
+
"taskRegistryNamespace is required when opts.pool supplies the task registry. Use the same trusted namespace with getAllAdcpMigrations({ taskRegistryNamespace }) or getDecisioningTaskRegistryMigration({ namespace })."
|
|
1347
|
+
);
|
|
1348
|
+
}
|
|
1349
|
+
const pooledTaskRegistry = opts.pool && opts.taskRegistry === void 0 ? createPostgresTaskRegistry({ pool: opts.pool, namespace: opts.taskRegistryNamespace }) : void 0;
|
|
1342
1350
|
const effectiveIdempotency = opts.idempotency ?? pooledIdempotency;
|
|
1343
1351
|
const effectiveCtxMetadata = opts.ctxMetadata ?? pooledCtxMetadata;
|
|
1344
1352
|
const taskRegistry = opts.taskRegistry ?? pooledTaskRegistry ?? buildDefaultTaskRegistry();
|
|
1353
|
+
if (taskRegistry.scopeVersion !== 1) {
|
|
1354
|
+
throw new PlatformConfigError(
|
|
1355
|
+
"taskRegistry.scopeVersion must be 1. Migrate custom registries to the account/principal-scoped TaskRegistry signatures before use."
|
|
1356
|
+
);
|
|
1357
|
+
}
|
|
1345
1358
|
const baseBus = opts.statusChangeBus ?? createInMemoryStatusChangeBus();
|
|
1346
1359
|
const taskWebhookEmit = opts.taskWebhookEmitter?.emit;
|
|
1347
1360
|
const observability = opts.observability;
|
|
@@ -2008,15 +2021,13 @@ function createAdcpServerFromPlatform(platform, opts) {
|
|
|
2008
2021
|
}
|
|
2009
2022
|
}
|
|
2010
2023
|
return Object.assign(server, {
|
|
2011
|
-
getTaskState: async (taskId,
|
|
2012
|
-
const record = await taskRegistry.getTask(taskId);
|
|
2013
|
-
|
|
2014
|
-
if (expectedAccountId !== void 0 && record.accountId !== expectedAccountId) {
|
|
2015
|
-
return null;
|
|
2016
|
-
}
|
|
2017
|
-
return record;
|
|
2024
|
+
getTaskState: async (taskId, scope) => {
|
|
2025
|
+
const record = await taskRegistry.getTask(taskId, scope);
|
|
2026
|
+
return record && taskRecordMatchesScope(record, scope) ? record : null;
|
|
2018
2027
|
},
|
|
2019
|
-
|
|
2028
|
+
getTaskStateUnsafe: (taskId) => taskRegistry._getTaskUnsafe(taskId),
|
|
2029
|
+
awaitTask: (taskId, scope) => taskRegistry.awaitTask(taskId, scope),
|
|
2030
|
+
awaitTaskUnsafe: (taskId) => taskRegistry._awaitTaskUnsafe(taskId),
|
|
2020
2031
|
statusChange: statusChangeBus
|
|
2021
2032
|
});
|
|
2022
2033
|
}
|
|
@@ -2189,9 +2200,26 @@ function buildTasksGetTool(platform, taskRegistry, agentRegistry, logger, resolv
|
|
|
2189
2200
|
});
|
|
2190
2201
|
}
|
|
2191
2202
|
}
|
|
2203
|
+
if (resolvedAccountId === void 0) {
|
|
2204
|
+
return adcpError("REFERENCE_NOT_FOUND", {
|
|
2205
|
+
message: `Task ${args.task_id} not found`,
|
|
2206
|
+
field: "task_id"
|
|
2207
|
+
});
|
|
2208
|
+
}
|
|
2209
|
+
const ownerCtx = {
|
|
2210
|
+
store: {},
|
|
2211
|
+
...extra?.authInfo !== void 0 && { authInfo: extra.authInfo },
|
|
2212
|
+
...agent !== void 0 && { agent },
|
|
2213
|
+
...sessionKey !== void 0 && { sessionKey },
|
|
2214
|
+
account: resolvedAccount ?? { id: resolvedAccountId }
|
|
2215
|
+
};
|
|
2216
|
+
const expectedOwnerScope = taskOwnerScopeFor(ownerCtx, resolvedAccountId);
|
|
2192
2217
|
let record;
|
|
2193
2218
|
try {
|
|
2194
|
-
record = await taskRegistry.getTask(args.task_id
|
|
2219
|
+
record = await taskRegistry.getTask(args.task_id, {
|
|
2220
|
+
accountId: resolvedAccountId,
|
|
2221
|
+
ownerScope: expectedOwnerScope
|
|
2222
|
+
});
|
|
2195
2223
|
} catch (err) {
|
|
2196
2224
|
logger.error?.("Task registry read failed during tasks_get poll", {
|
|
2197
2225
|
error: err instanceof Error ? err.message : String(err)
|
|
@@ -2204,34 +2232,15 @@ function buildTasksGetTool(platform, taskRegistry, agentRegistry, logger, resolv
|
|
|
2204
2232
|
field: "task_id"
|
|
2205
2233
|
});
|
|
2206
2234
|
}
|
|
2207
|
-
if (
|
|
2235
|
+
if (!taskRecordMatchesScope(record, {
|
|
2236
|
+
accountId: resolvedAccountId,
|
|
2237
|
+
ownerScope: expectedOwnerScope
|
|
2238
|
+
})) {
|
|
2208
2239
|
return adcpError("REFERENCE_NOT_FOUND", {
|
|
2209
2240
|
message: `Task ${args.task_id} not found`,
|
|
2210
2241
|
field: "task_id"
|
|
2211
2242
|
});
|
|
2212
2243
|
}
|
|
2213
|
-
if (resolvedAccountId !== void 0 && record.accountId !== resolvedAccountId) {
|
|
2214
|
-
return adcpError("REFERENCE_NOT_FOUND", {
|
|
2215
|
-
message: `Task ${args.task_id} not found`,
|
|
2216
|
-
field: "task_id"
|
|
2217
|
-
});
|
|
2218
|
-
}
|
|
2219
|
-
if (resolvedAccountId !== void 0) {
|
|
2220
|
-
const ownerCtx = {
|
|
2221
|
-
store: {},
|
|
2222
|
-
...extra?.authInfo !== void 0 && { authInfo: extra.authInfo },
|
|
2223
|
-
...agent !== void 0 && { agent },
|
|
2224
|
-
...sessionKey !== void 0 && { sessionKey },
|
|
2225
|
-
account: resolvedAccount ?? { id: resolvedAccountId }
|
|
2226
|
-
};
|
|
2227
|
-
const expectedOwnerScope = taskOwnerScopeFor(ownerCtx, resolvedAccountId);
|
|
2228
|
-
if (record.ownerScope === void 0 ? expectedOwnerScope !== `account:${resolvedAccountId}` : record.ownerScope !== expectedOwnerScope) {
|
|
2229
|
-
return adcpError("REFERENCE_NOT_FOUND", {
|
|
2230
|
-
message: `Task ${args.task_id} not found`,
|
|
2231
|
-
field: "task_id"
|
|
2232
|
-
});
|
|
2233
|
-
}
|
|
2234
|
-
}
|
|
2235
2244
|
const payload = {
|
|
2236
2245
|
task_id: record.taskId,
|
|
2237
2246
|
task_type: record.tool,
|
|
@@ -2375,8 +2384,17 @@ function wrapBusWithObservability(bus, observability) {
|
|
|
2375
2384
|
recent: bus.recent.bind(bus)
|
|
2376
2385
|
};
|
|
2377
2386
|
}
|
|
2378
|
-
function getAllAdcpMigrations() {
|
|
2379
|
-
|
|
2387
|
+
function getAllAdcpMigrations(options) {
|
|
2388
|
+
if (!options) {
|
|
2389
|
+
throw new PlatformConfigError(
|
|
2390
|
+
"getAllAdcpMigrations requires { taskRegistryNamespace }; use a stable, trusted deployment or tenant namespace."
|
|
2391
|
+
);
|
|
2392
|
+
}
|
|
2393
|
+
return [
|
|
2394
|
+
getIdempotencyMigration(),
|
|
2395
|
+
getCtxMetadataMigration(),
|
|
2396
|
+
getDecisioningTaskRegistryMigration({ namespace: options.taskRegistryNamespace })
|
|
2397
|
+
].join("\n\n");
|
|
2380
2398
|
}
|
|
2381
2399
|
function buildDefaultTaskRegistry() {
|
|
2382
2400
|
const env = process.env.NODE_ENV;
|
|
@@ -2384,7 +2402,7 @@ function buildDefaultTaskRegistry() {
|
|
|
2384
2402
|
const ack = process.env.ADCP_DECISIONING_ALLOW_INMEMORY_TASKS === "1";
|
|
2385
2403
|
if (!safe && !ack) {
|
|
2386
2404
|
throw new Error(
|
|
2387
|
-
'createAdcpServerFromPlatform: in-memory task registry refused outside {NODE_ENV=test, NODE_ENV=development}. Production deployments need a durable task registry \u2014 pick one of:\n 1. (Recommended) Pass `taskRegistry: createPostgresTaskRegistry({ pool })` to keep HITL tasks across restarts. See `@adcp/sdk/server/decisioning` for `getDecisioningTaskRegistryMigration()` \u2014 run it once against your DB.\n 2. Pass `taskRegistry: createInMemoryTaskRegistry()` explicitly if you accept that in-flight tasks are lost on process restart. The explicit pass-in is the contract \u2014 saying "yes I want in-memory in production" in code is the right shape.\n 3. ADCP_DECISIONING_ALLOW_INMEMORY_TASKS=1 env flag is the ops escape hatch (same effect as #2 but config-only); prefer #2 in adopter code.'
|
|
2405
|
+
'createAdcpServerFromPlatform: in-memory task registry refused outside {NODE_ENV=test, NODE_ENV=development}. Production deployments need a durable task registry \u2014 pick one of:\n 1. (Recommended) Pass `taskRegistry: createPostgresTaskRegistry({ pool, namespace: tenantId })` to keep HITL tasks across restarts. See `@adcp/sdk/server/decisioning` for `getDecisioningTaskRegistryMigration({ namespace })` \u2014 run it once against your DB.\n 2. Pass `taskRegistry: createInMemoryTaskRegistry()` explicitly if you accept that in-flight tasks are lost on process restart. The explicit pass-in is the contract \u2014 saying "yes I want in-memory in production" in code is the right shape.\n 3. ADCP_DECISIONING_ALLOW_INMEMORY_TASKS=1 env flag is the ops escape hatch (same effect as #2 but config-only); prefer #2 in adopter code.'
|
|
2388
2406
|
);
|
|
2389
2407
|
}
|
|
2390
2408
|
return createInMemoryTaskRegistry();
|
|
@@ -2519,7 +2537,12 @@ async function routeIfHandoff(taskRegistry, opts, result, project) {
|
|
|
2519
2537
|
taskRegistry,
|
|
2520
2538
|
opts,
|
|
2521
2539
|
async (taskId) => {
|
|
2522
|
-
const inner = await taskFn(
|
|
2540
|
+
const inner = await taskFn(
|
|
2541
|
+
buildHandoffContext(taskRegistry, taskId, {
|
|
2542
|
+
accountId: opts.accountId,
|
|
2543
|
+
ownerScope: opts.ownerScope ?? `account:${opts.accountId}`
|
|
2544
|
+
})
|
|
2545
|
+
);
|
|
2523
2546
|
rejectResponseSummary(inner);
|
|
2524
2547
|
return await project(inner);
|
|
2525
2548
|
},
|
|
@@ -2567,6 +2590,10 @@ async function dispatchHitl(taskRegistry, opts, taskFn, overrideTaskId) {
|
|
|
2567
2590
|
);
|
|
2568
2591
|
};
|
|
2569
2592
|
const completion = (async () => {
|
|
2593
|
+
const registryScope = {
|
|
2594
|
+
accountId: opts.accountId,
|
|
2595
|
+
ownerScope: opts.ownerScope ?? `account:${opts.accountId}`
|
|
2596
|
+
};
|
|
2570
2597
|
let result;
|
|
2571
2598
|
let taskFnError;
|
|
2572
2599
|
try {
|
|
@@ -2580,10 +2607,10 @@ async function dispatchHitl(taskRegistry, opts, taskFn, overrideTaskId) {
|
|
|
2580
2607
|
stripImplementationConfig(result);
|
|
2581
2608
|
}
|
|
2582
2609
|
try {
|
|
2583
|
-
await taskRegistry.complete(taskId, result);
|
|
2610
|
+
await taskRegistry.complete(taskId, registryScope, result);
|
|
2584
2611
|
} catch (registryErr) {
|
|
2585
2612
|
opts.logger.error(
|
|
2586
|
-
`[adcp/decisioning] task ${taskId} (${opts.tool}) completed but registry write failed \u2014 manual reconciliation required. Webhook not emitted; buyer state will diverge until resolved. Error: ${registryErr instanceof Error ?
|
|
2613
|
+
`[adcp/decisioning] task ${taskId} (${opts.tool}) completed but registry write failed \u2014 manual reconciliation required. Webhook not emitted; buyer state will diverge until resolved. Error type: ${registryErr instanceof Error ? "Error" : typeof registryErr}`
|
|
2587
2614
|
);
|
|
2588
2615
|
fireTransition("failed", "REGISTRY_WRITE_FAILED");
|
|
2589
2616
|
return;
|
|
@@ -2603,10 +2630,10 @@ async function dispatchHitl(taskRegistry, opts, taskFn, overrideTaskId) {
|
|
|
2603
2630
|
);
|
|
2604
2631
|
const failureArtifact = { errors: [structured] };
|
|
2605
2632
|
try {
|
|
2606
|
-
await taskRegistry.fail(taskId, structured, failureArtifact);
|
|
2633
|
+
await taskRegistry.fail(taskId, registryScope, structured, failureArtifact);
|
|
2607
2634
|
} catch (registryErr) {
|
|
2608
2635
|
opts.logger.error(
|
|
2609
|
-
`[adcp/decisioning] task ${taskId} (${opts.tool}) failed AND registry fail-write also failed \u2014 manual reconciliation required. Webhook not emitted.
|
|
2636
|
+
`[adcp/decisioning] task ${taskId} (${opts.tool}) failed AND registry fail-write also failed \u2014 manual reconciliation required. Webhook not emitted. Task error code: ${structured.code}; registry error type: ${registryErr instanceof Error ? "Error" : typeof registryErr}`
|
|
2610
2637
|
);
|
|
2611
2638
|
fireTransition("failed", "REGISTRY_WRITE_FAILED");
|
|
2612
2639
|
return;
|
|
@@ -2616,7 +2643,11 @@ async function dispatchHitl(taskRegistry, opts, taskFn, overrideTaskId) {
|
|
|
2616
2643
|
task: { task_id: taskId, status: "failed", result: failureArtifact, error: structured }
|
|
2617
2644
|
});
|
|
2618
2645
|
})();
|
|
2619
|
-
taskRegistry._registerBackground(
|
|
2646
|
+
taskRegistry._registerBackground(
|
|
2647
|
+
taskId,
|
|
2648
|
+
{ accountId: opts.accountId, ownerScope: opts.ownerScope ?? `account:${opts.accountId}` },
|
|
2649
|
+
completion
|
|
2650
|
+
);
|
|
2620
2651
|
return { status: "submitted", task_id: taskId };
|
|
2621
2652
|
}
|
|
2622
2653
|
function buildTaskWebhookPayload(opts, taskId, status, artifact) {
|
|
@@ -3835,6 +3866,7 @@ function buildMediaBuyHandlers(platform, taskRegistry, taskWebhookEmit, observab
|
|
|
3835
3866
|
}
|
|
3836
3867
|
function projectBuildCreativeReturn(ret) {
|
|
3837
3868
|
if (ret != null && typeof ret === "object" && !Array.isArray(ret)) {
|
|
3869
|
+
if ("creatives" in ret) return ret;
|
|
3838
3870
|
if ("creative_manifest" in ret) return ret;
|
|
3839
3871
|
if ("creative_manifests" in ret) return ret;
|
|
3840
3872
|
}
|