@adcp/sdk 15.9.5 → 15.9.6
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/dist/lib/core/AgentClient.d.mts +4 -2
- package/dist/lib/core/AgentClient.d.ts +4 -2
- package/dist/lib/core/AgentClient.js +4 -2
- package/dist/lib/core/AgentClient.mjs +4 -2
- package/dist/lib/core/SingleAgentClient.d.mts +7 -3
- package/dist/lib/core/SingleAgentClient.d.ts +7 -3
- package/dist/lib/core/SingleAgentClient.js +204 -13
- package/dist/lib/core/SingleAgentClient.mjs +209 -13
- package/dist/lib/core/product-cache.d.mts +3 -1
- package/dist/lib/core/product-cache.d.ts +3 -1
- package/dist/lib/core/product-cache.js +2 -1
- package/dist/lib/core/product-cache.mjs +2 -1
- package/dist/lib/registry/types.d.mts +3 -2
- package/dist/lib/registry/types.d.ts +3 -2
- package/dist/lib/registry/types.generated.d.mts +21 -9
- package/dist/lib/registry/types.generated.d.ts +21 -9
- package/dist/lib/schemas-data/v2.5/_provenance.json +1 -1
- package/dist/lib/server/decisioning/runtime/from-platform.js +6 -2
- package/dist/lib/server/decisioning/runtime/from-platform.mjs +6 -2
- package/dist/lib/testing/storyboard/validations.d.mts +1 -1
- package/dist/lib/testing/storyboard/validations.d.ts +1 -1
- package/dist/lib/v2/projection/augment-response.js +6 -3
- package/dist/lib/v2/projection/augment-response.mjs +8 -5
- package/dist/lib/v2/projection/creative-delivery.d.mts +2 -0
- package/dist/lib/v2/projection/creative-delivery.d.ts +2 -0
- package/dist/lib/v2/projection/creative-delivery.js +36 -17
- package/dist/lib/v2/projection/creative-delivery.mjs +37 -18
- package/dist/lib/v2/projection/legacy-metadata.d.mts +12 -0
- package/dist/lib/v2/projection/legacy-metadata.d.ts +12 -0
- package/dist/lib/v2/projection/legacy-metadata.js +41 -1
- package/dist/lib/v2/projection/legacy-metadata.mjs +37 -1
- package/dist/lib/v2/projection/v1-to-v2.d.mts +7 -0
- package/dist/lib/v2/projection/v1-to-v2.d.ts +7 -0
- package/dist/lib/v2/projection/v1-to-v2.js +83 -2
- package/dist/lib/v2/projection/v1-to-v2.mjs +86 -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.mjs +3 -3
- package/docs/TYPE-SUMMARY.md +2 -2
- package/docs/guides/CREATIVE-DELIVERY.md +45 -6
- package/docs/llms.txt +2 -2
- package/docs/migration-14.x-rc-worksheet.md +4 -4
- package/package.json +1 -1
|
@@ -21,7 +21,8 @@ __export(v1_to_v2_exports, {
|
|
|
21
21
|
canonicalDeclarationFromBareId: () => canonicalDeclarationFromBareId,
|
|
22
22
|
migratedFormatOptionId: () => migratedFormatOptionId,
|
|
23
23
|
projectV1ProductToV2: () => projectV1ProductToV2,
|
|
24
|
-
resolveCanonicalFormatKind: () => resolveCanonicalFormatKind
|
|
24
|
+
resolveCanonicalFormatKind: () => resolveCanonicalFormatKind,
|
|
25
|
+
withDualEmissionLegacyRefs: () => withDualEmissionLegacyRefs
|
|
25
26
|
});
|
|
26
27
|
module.exports = __toCommonJS(v1_to_v2_exports);
|
|
27
28
|
var import_registry = require('./registry.js');
|
|
@@ -33,6 +34,7 @@ var import_resolve_agent_properties = require('../../discovery/resolve-agent-pro
|
|
|
33
34
|
var import_address_guards = require('../../net/address-guards.js');
|
|
34
35
|
var import_crypto = require("crypto");
|
|
35
36
|
var import_legacy_routes = require('./legacy-routes.js');
|
|
37
|
+
var import_legacy_metadata = require('./legacy-metadata.js');
|
|
36
38
|
const SDK_ID = `@adcp/sdk@${import_version.LIBRARY_VERSION}`;
|
|
37
39
|
class CatalogRequirementConflict extends Error {
|
|
38
40
|
}
|
|
@@ -337,6 +339,7 @@ function projectV1ProductToV2(v1, options) {
|
|
|
337
339
|
...rest,
|
|
338
340
|
format_options
|
|
339
341
|
};
|
|
342
|
+
for (const declaration of format_options) (0, import_legacy_metadata.rememberSynthesizedFormatOption)(declaration);
|
|
340
343
|
return { v2: v2Product, diagnostics, legacyRoutes: (0, import_legacy_routes.legacyRoutesForProduct)(v1.product_id, format_options) };
|
|
341
344
|
}
|
|
342
345
|
function canonicalDeclarationFromBareId(id, options) {
|
|
@@ -367,10 +370,88 @@ function normalizeAssetTypeSuffix(hint) {
|
|
|
367
370
|
function resolveCanonicalFormatKind(id, options) {
|
|
368
371
|
return canonicalDeclarationFromBareId(id, options)?.format_kind ?? null;
|
|
369
372
|
}
|
|
373
|
+
function record(value) {
|
|
374
|
+
return value !== null && typeof value === "object" && !Array.isArray(value) ? value : void 0;
|
|
375
|
+
}
|
|
376
|
+
function sameIdentity(left, right) {
|
|
377
|
+
const url = (value) => {
|
|
378
|
+
try {
|
|
379
|
+
return new URL(value).href;
|
|
380
|
+
} catch {
|
|
381
|
+
return value;
|
|
382
|
+
}
|
|
383
|
+
};
|
|
384
|
+
return url(left.agent_url) === url(right.agent_url) && left.id === right.id && ["width", "height", "duration_ms"].every((key) => {
|
|
385
|
+
const field = key;
|
|
386
|
+
return left[field] === void 0 || right[field] === void 0 || left[field] === right[field];
|
|
387
|
+
});
|
|
388
|
+
}
|
|
389
|
+
function compatible(option, ref) {
|
|
390
|
+
const known = canonicalDeclarationFromBareId(ref.id, { agentUrl: ref.agent_url });
|
|
391
|
+
if (known && known.format_kind !== option.format_kind) return false;
|
|
392
|
+
const params = record(option.params) ?? {};
|
|
393
|
+
const knownParams = record(known?.params) ?? {};
|
|
394
|
+
const constraints = {
|
|
395
|
+
width: ref.width ?? knownParams.width,
|
|
396
|
+
height: ref.height ?? knownParams.height,
|
|
397
|
+
duration_ms_exact: ref.duration_ms ?? knownParams.duration_ms_exact
|
|
398
|
+
};
|
|
399
|
+
if (Object.entries(constraints).some(
|
|
400
|
+
([key, value]) => typeof value === "number" && typeof params[key] === "number" && value !== params[key]
|
|
401
|
+
)) {
|
|
402
|
+
return false;
|
|
403
|
+
}
|
|
404
|
+
for (const dimension of ["width", "height"]) {
|
|
405
|
+
const actual = constraints[dimension];
|
|
406
|
+
const min = params[`min_${dimension}`];
|
|
407
|
+
const max = params[`max_${dimension}`];
|
|
408
|
+
if (typeof actual === "number" && (typeof min === "number" && actual < min || typeof max === "number" && actual > max))
|
|
409
|
+
return false;
|
|
410
|
+
}
|
|
411
|
+
const duration = constraints.duration_ms_exact;
|
|
412
|
+
if (typeof duration === "number" && typeof params.duration_ms_exact !== "number" && Array.isArray(params.duration_ms_range)) {
|
|
413
|
+
const [min, max] = params.duration_ms_range;
|
|
414
|
+
if (typeof min === "number" && duration < min || typeof max === "number" && duration > max) return false;
|
|
415
|
+
}
|
|
416
|
+
if (Array.isArray(params.sizes) && params.sizes.length > 0) {
|
|
417
|
+
return params.sizes.some((value) => {
|
|
418
|
+
const size = record(value);
|
|
419
|
+
return size && ["width", "height"].every((key) => {
|
|
420
|
+
const actual = constraints[key];
|
|
421
|
+
return typeof actual !== "number" || typeof size[key] !== "number" || actual === size[key];
|
|
422
|
+
});
|
|
423
|
+
});
|
|
424
|
+
}
|
|
425
|
+
return true;
|
|
426
|
+
}
|
|
427
|
+
function withDualEmissionLegacyRefs(formatOptions, formatIds) {
|
|
428
|
+
if (!Array.isArray(formatIds) || formatIds.length !== formatOptions.length) return formatOptions;
|
|
429
|
+
const aligned = formatOptions.every((value, index) => {
|
|
430
|
+
const option = record(value);
|
|
431
|
+
const ref = record(formatIds[index]);
|
|
432
|
+
if (!option || typeof option.format_kind !== "string" || option.canonical_formats_only === true || !ref || typeof ref.agent_url !== "string" || ref.agent_url.length === 0 || typeof ref.id !== "string" || ref.id.length === 0) {
|
|
433
|
+
return false;
|
|
434
|
+
}
|
|
435
|
+
const typedRef = ref;
|
|
436
|
+
const explicit = (0, import_legacy_metadata.legacyFormatRefsForDeclaration)(option);
|
|
437
|
+
return explicit.length > 0 ? explicit.some((existing) => sameIdentity(existing, typedRef)) : compatible(option, typedRef);
|
|
438
|
+
});
|
|
439
|
+
if (!aligned) return formatOptions;
|
|
440
|
+
return formatOptions.map((value, index) => {
|
|
441
|
+
if ((0, import_legacy_metadata.legacyFormatRefsForDeclaration)(value).length > 0) return value;
|
|
442
|
+
const paired = (0, import_legacy_metadata.concealLegacyFormatRefs)({
|
|
443
|
+
...value,
|
|
444
|
+
v1_format_ref: [{ ...formatIds[index] }]
|
|
445
|
+
});
|
|
446
|
+
(0, import_legacy_metadata.transferLegacyCreativeMetadata)(value, paired);
|
|
447
|
+
return paired;
|
|
448
|
+
});
|
|
449
|
+
}
|
|
370
450
|
// Annotate the CommonJS export names for ESM import in node:
|
|
371
451
|
0 && (module.exports = {
|
|
372
452
|
canonicalDeclarationFromBareId,
|
|
373
453
|
migratedFormatOptionId,
|
|
374
454
|
projectV1ProductToV2,
|
|
375
|
-
resolveCanonicalFormatKind
|
|
455
|
+
resolveCanonicalFormatKind,
|
|
456
|
+
withDualEmissionLegacyRefs
|
|
376
457
|
});
|
|
@@ -12,6 +12,12 @@ import { canonicalizeAgentUrl } from "../../discovery/resolve-agent-properties.m
|
|
|
12
12
|
import { isLikelyPrivateUrl } from "../../net/address-guards.mjs";
|
|
13
13
|
import { createHmac } from "crypto";
|
|
14
14
|
import { legacyRoutesForProduct } from "./legacy-routes.mjs";
|
|
15
|
+
import {
|
|
16
|
+
concealLegacyFormatRefs,
|
|
17
|
+
legacyFormatRefsForDeclaration,
|
|
18
|
+
rememberSynthesizedFormatOption,
|
|
19
|
+
transferLegacyCreativeMetadata
|
|
20
|
+
} from "./legacy-metadata.mjs";
|
|
15
21
|
const SDK_ID = `@adcp/sdk@${LIBRARY_VERSION}`;
|
|
16
22
|
class CatalogRequirementConflict extends Error {
|
|
17
23
|
}
|
|
@@ -316,6 +322,7 @@ function projectV1ProductToV2(v1, options) {
|
|
|
316
322
|
...rest,
|
|
317
323
|
format_options
|
|
318
324
|
};
|
|
325
|
+
for (const declaration of format_options) rememberSynthesizedFormatOption(declaration);
|
|
319
326
|
return { v2: v2Product, diagnostics, legacyRoutes: legacyRoutesForProduct(v1.product_id, format_options) };
|
|
320
327
|
}
|
|
321
328
|
function canonicalDeclarationFromBareId(id, options) {
|
|
@@ -346,9 +353,87 @@ function normalizeAssetTypeSuffix(hint) {
|
|
|
346
353
|
function resolveCanonicalFormatKind(id, options) {
|
|
347
354
|
return canonicalDeclarationFromBareId(id, options)?.format_kind ?? null;
|
|
348
355
|
}
|
|
356
|
+
function record(value) {
|
|
357
|
+
return value !== null && typeof value === "object" && !Array.isArray(value) ? value : void 0;
|
|
358
|
+
}
|
|
359
|
+
function sameIdentity(left, right) {
|
|
360
|
+
const url = (value) => {
|
|
361
|
+
try {
|
|
362
|
+
return new URL(value).href;
|
|
363
|
+
} catch {
|
|
364
|
+
return value;
|
|
365
|
+
}
|
|
366
|
+
};
|
|
367
|
+
return url(left.agent_url) === url(right.agent_url) && left.id === right.id && ["width", "height", "duration_ms"].every((key) => {
|
|
368
|
+
const field = key;
|
|
369
|
+
return left[field] === void 0 || right[field] === void 0 || left[field] === right[field];
|
|
370
|
+
});
|
|
371
|
+
}
|
|
372
|
+
function compatible(option, ref) {
|
|
373
|
+
const known = canonicalDeclarationFromBareId(ref.id, { agentUrl: ref.agent_url });
|
|
374
|
+
if (known && known.format_kind !== option.format_kind) return false;
|
|
375
|
+
const params = record(option.params) ?? {};
|
|
376
|
+
const knownParams = record(known?.params) ?? {};
|
|
377
|
+
const constraints = {
|
|
378
|
+
width: ref.width ?? knownParams.width,
|
|
379
|
+
height: ref.height ?? knownParams.height,
|
|
380
|
+
duration_ms_exact: ref.duration_ms ?? knownParams.duration_ms_exact
|
|
381
|
+
};
|
|
382
|
+
if (Object.entries(constraints).some(
|
|
383
|
+
([key, value]) => typeof value === "number" && typeof params[key] === "number" && value !== params[key]
|
|
384
|
+
)) {
|
|
385
|
+
return false;
|
|
386
|
+
}
|
|
387
|
+
for (const dimension of ["width", "height"]) {
|
|
388
|
+
const actual = constraints[dimension];
|
|
389
|
+
const min = params[`min_${dimension}`];
|
|
390
|
+
const max = params[`max_${dimension}`];
|
|
391
|
+
if (typeof actual === "number" && (typeof min === "number" && actual < min || typeof max === "number" && actual > max))
|
|
392
|
+
return false;
|
|
393
|
+
}
|
|
394
|
+
const duration = constraints.duration_ms_exact;
|
|
395
|
+
if (typeof duration === "number" && typeof params.duration_ms_exact !== "number" && Array.isArray(params.duration_ms_range)) {
|
|
396
|
+
const [min, max] = params.duration_ms_range;
|
|
397
|
+
if (typeof min === "number" && duration < min || typeof max === "number" && duration > max) return false;
|
|
398
|
+
}
|
|
399
|
+
if (Array.isArray(params.sizes) && params.sizes.length > 0) {
|
|
400
|
+
return params.sizes.some((value) => {
|
|
401
|
+
const size = record(value);
|
|
402
|
+
return size && ["width", "height"].every((key) => {
|
|
403
|
+
const actual = constraints[key];
|
|
404
|
+
return typeof actual !== "number" || typeof size[key] !== "number" || actual === size[key];
|
|
405
|
+
});
|
|
406
|
+
});
|
|
407
|
+
}
|
|
408
|
+
return true;
|
|
409
|
+
}
|
|
410
|
+
function withDualEmissionLegacyRefs(formatOptions, formatIds) {
|
|
411
|
+
if (!Array.isArray(formatIds) || formatIds.length !== formatOptions.length) return formatOptions;
|
|
412
|
+
const aligned = formatOptions.every((value, index) => {
|
|
413
|
+
const option = record(value);
|
|
414
|
+
const ref = record(formatIds[index]);
|
|
415
|
+
if (!option || typeof option.format_kind !== "string" || option.canonical_formats_only === true || !ref || typeof ref.agent_url !== "string" || ref.agent_url.length === 0 || typeof ref.id !== "string" || ref.id.length === 0) {
|
|
416
|
+
return false;
|
|
417
|
+
}
|
|
418
|
+
const typedRef = ref;
|
|
419
|
+
const explicit = legacyFormatRefsForDeclaration(option);
|
|
420
|
+
return explicit.length > 0 ? explicit.some((existing) => sameIdentity(existing, typedRef)) : compatible(option, typedRef);
|
|
421
|
+
});
|
|
422
|
+
if (!aligned) return formatOptions;
|
|
423
|
+
return formatOptions.map((value, index) => {
|
|
424
|
+
if (legacyFormatRefsForDeclaration(value).length > 0) return value;
|
|
425
|
+
const paired = concealLegacyFormatRefs({
|
|
426
|
+
...value,
|
|
427
|
+
v1_format_ref: [{ ...formatIds[index] }]
|
|
428
|
+
});
|
|
429
|
+
transferLegacyCreativeMetadata(value, paired);
|
|
430
|
+
return paired;
|
|
431
|
+
});
|
|
432
|
+
}
|
|
349
433
|
export {
|
|
350
434
|
canonicalDeclarationFromBareId,
|
|
351
435
|
migratedFormatOptionId,
|
|
352
436
|
projectV1ProductToV2,
|
|
353
|
-
resolveCanonicalFormatKind
|
|
437
|
+
resolveCanonicalFormatKind,
|
|
438
|
+
withDualEmissionLegacyRefs
|
|
354
439
|
};
|
package/dist/lib/version.d.mts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* AdCP SDK library version
|
|
3
3
|
*/
|
|
4
|
-
export declare const LIBRARY_VERSION = "15.9.
|
|
4
|
+
export declare const LIBRARY_VERSION = "15.9.6";
|
|
5
5
|
/**
|
|
6
6
|
* AdCP specification version this library is built for
|
|
7
7
|
*/
|
|
@@ -33,10 +33,10 @@ export type AdcpVersion = (typeof COMPATIBLE_ADCP_VERSIONS)[number];
|
|
|
33
33
|
* Full version information
|
|
34
34
|
*/
|
|
35
35
|
export declare const VERSION_INFO: {
|
|
36
|
-
readonly library: "15.9.
|
|
36
|
+
readonly library: "15.9.6";
|
|
37
37
|
readonly adcp: "3.2.5";
|
|
38
38
|
readonly compatibleVersions: readonly ["v2.5", "v2.6", "v3", "3.0.0", "3.0", "3.0.1", "3.0.2", "3.0.3", "3.0.4", "3.0.5", "3.0.6", "3.0.7", "3.0.8", "3.0.9", "3.0.10", "3.0.11", "3.0.12", "3.0.13", "3.0.14", "3.0.15", "3.0.16", "3.0.17", "3.0.18", "3.0.19", "3.0.20", "3.0.21", "3.0.22", "3.0.23", "3.0.24", "3.0.25", "3.1.0", "3.1", "3.1.1", "3.1.2", "3.1.3", "3.1.4", "3.1.5", "3.1.6", "3.1.7", "3.1.8", "3.1.9", "3.1.10", "3.1.11", "3.1.12", "3.1.13", "3.1.14", "3.1.15", "3.1.16", "3.1.17", "3.1.18", "3.1.19", "3.1.20", "3.1.21", "3.1.22", "3.1.23", "3.1.24", "3.1.25", "3.1.26", "3.1.27", "3.1.28", "3.1.29", "3.2.1", "3.2", "3.2.2", "3.2.3", "3.2.4", "3.2.5"];
|
|
39
|
-
readonly generatedAt: "2026-10-
|
|
39
|
+
readonly generatedAt: "2026-10-19T00:18:00.760Z";
|
|
40
40
|
};
|
|
41
41
|
/**
|
|
42
42
|
* Get the AdCP specification version this library is built for
|
package/dist/lib/version.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* AdCP SDK library version
|
|
3
3
|
*/
|
|
4
|
-
export declare const LIBRARY_VERSION = "15.9.
|
|
4
|
+
export declare const LIBRARY_VERSION = "15.9.6";
|
|
5
5
|
/**
|
|
6
6
|
* AdCP specification version this library is built for
|
|
7
7
|
*/
|
|
@@ -33,10 +33,10 @@ export type AdcpVersion = (typeof COMPATIBLE_ADCP_VERSIONS)[number];
|
|
|
33
33
|
* Full version information
|
|
34
34
|
*/
|
|
35
35
|
export declare const VERSION_INFO: {
|
|
36
|
-
readonly library: "15.9.
|
|
36
|
+
readonly library: "15.9.6";
|
|
37
37
|
readonly adcp: "3.2.5";
|
|
38
38
|
readonly compatibleVersions: readonly ["v2.5", "v2.6", "v3", "3.0.0", "3.0", "3.0.1", "3.0.2", "3.0.3", "3.0.4", "3.0.5", "3.0.6", "3.0.7", "3.0.8", "3.0.9", "3.0.10", "3.0.11", "3.0.12", "3.0.13", "3.0.14", "3.0.15", "3.0.16", "3.0.17", "3.0.18", "3.0.19", "3.0.20", "3.0.21", "3.0.22", "3.0.23", "3.0.24", "3.0.25", "3.1.0", "3.1", "3.1.1", "3.1.2", "3.1.3", "3.1.4", "3.1.5", "3.1.6", "3.1.7", "3.1.8", "3.1.9", "3.1.10", "3.1.11", "3.1.12", "3.1.13", "3.1.14", "3.1.15", "3.1.16", "3.1.17", "3.1.18", "3.1.19", "3.1.20", "3.1.21", "3.1.22", "3.1.23", "3.1.24", "3.1.25", "3.1.26", "3.1.27", "3.1.28", "3.1.29", "3.2.1", "3.2", "3.2.2", "3.2.3", "3.2.4", "3.2.5"];
|
|
39
|
-
readonly generatedAt: "2026-10-
|
|
39
|
+
readonly generatedAt: "2026-10-19T00:18:00.760Z";
|
|
40
40
|
};
|
|
41
41
|
/**
|
|
42
42
|
* Get the AdCP specification version this library is built for
|
package/dist/lib/version.js
CHANGED
|
@@ -31,7 +31,7 @@ __export(version_exports, {
|
|
|
31
31
|
toReleasePrecisionVersion: () => toReleasePrecisionVersion
|
|
32
32
|
});
|
|
33
33
|
module.exports = __toCommonJS(version_exports);
|
|
34
|
-
const LIBRARY_VERSION = "15.9.
|
|
34
|
+
const LIBRARY_VERSION = "15.9.6";
|
|
35
35
|
const ADCP_VERSION = "3.2.5";
|
|
36
36
|
const ADCP_MAJOR_VERSION = 3;
|
|
37
37
|
const COMPATIBLE_ADCP_VERSIONS = [
|
|
@@ -104,10 +104,10 @@ const COMPATIBLE_ADCP_VERSIONS = [
|
|
|
104
104
|
"3.2.5"
|
|
105
105
|
];
|
|
106
106
|
const VERSION_INFO = {
|
|
107
|
-
library: "15.9.
|
|
107
|
+
library: "15.9.6",
|
|
108
108
|
adcp: "3.2.5",
|
|
109
109
|
compatibleVersions: COMPATIBLE_ADCP_VERSIONS,
|
|
110
|
-
generatedAt: "2026-10-
|
|
110
|
+
generatedAt: "2026-10-19T00:18:00.760Z"
|
|
111
111
|
};
|
|
112
112
|
function getAdcpVersion() {
|
|
113
113
|
return ADCP_VERSION;
|
package/dist/lib/version.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const LIBRARY_VERSION = "15.9.
|
|
1
|
+
const LIBRARY_VERSION = "15.9.6";
|
|
2
2
|
const ADCP_VERSION = "3.2.5";
|
|
3
3
|
const ADCP_MAJOR_VERSION = 3;
|
|
4
4
|
const COMPATIBLE_ADCP_VERSIONS = [
|
|
@@ -71,10 +71,10 @@ const COMPATIBLE_ADCP_VERSIONS = [
|
|
|
71
71
|
"3.2.5"
|
|
72
72
|
];
|
|
73
73
|
const VERSION_INFO = {
|
|
74
|
-
library: "15.9.
|
|
74
|
+
library: "15.9.6",
|
|
75
75
|
adcp: "3.2.5",
|
|
76
76
|
compatibleVersions: COMPATIBLE_ADCP_VERSIONS,
|
|
77
|
-
generatedAt: "2026-10-
|
|
77
|
+
generatedAt: "2026-10-19T00:18:00.760Z"
|
|
78
78
|
};
|
|
79
79
|
function getAdcpVersion() {
|
|
80
80
|
return ADCP_VERSION;
|
package/docs/TYPE-SUMMARY.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# AdCP Type Summary
|
|
2
2
|
|
|
3
|
-
> Generated at: 2026-10-
|
|
4
|
-
> @adcp/sdk v15.9.
|
|
3
|
+
> Generated at: 2026-10-19
|
|
4
|
+
> @adcp/sdk v15.9.6
|
|
5
5
|
|
|
6
6
|
Curated reference of the types that matter for using the AdCP client. For full generated types see `src/lib/types/tools.generated.ts` and `src/lib/types/core.generated.ts`.
|
|
7
7
|
|
|
@@ -131,9 +131,45 @@ checks the explicit `media_buy.features.canonical_creatives` declaration. A
|
|
|
131
131
|
`unknown` because a 3.1 version claim does not prove the runtime accepts
|
|
132
132
|
canonical creatives. For MCP peers the client then inspects the advertised
|
|
133
133
|
input schema for the current tool only; support advertised by another creative
|
|
134
|
-
tool is never reused.
|
|
135
|
-
|
|
136
|
-
|
|
134
|
+
tool is never reused.
|
|
135
|
+
|
|
136
|
+
For a seller proven to serve AdCP 3.1, an otherwise unknown write uses canonical
|
|
137
|
+
delivery when every selected option and creative is covered by the seller's own
|
|
138
|
+
`format_options`. This follows the 3.1 buyer rule to prefer advertised format
|
|
139
|
+
options over dual-emitted legacy IDs. Creative option references and kinds must
|
|
140
|
+
match, including declared slots and dimensions. Sync assignments must all have
|
|
141
|
+
matching selector containers. Explicit legacy capabilities or tool schemas take
|
|
142
|
+
precedence; experimental declarations and options synthesized by the SDK from
|
|
143
|
+
legacy IDs do not establish canonical support. This also works when a 3.2 buyer
|
|
144
|
+
negotiates down to a 3.1 seller.
|
|
145
|
+
|
|
146
|
+
Supply the selected product or the result of `packageRefsForFormatOptions()` in
|
|
147
|
+
`creativeFormatProjection.selectorContainers`. Include `package_id` when using
|
|
148
|
+
assignments. After serializing a selection, include `product_id` so the same
|
|
149
|
+
client can recover the seller declaration from account-scoped product discovery,
|
|
150
|
+
including product-cache hits. Product evidence applies to that request only.
|
|
151
|
+
The seller remains responsible for full manifest validation.
|
|
152
|
+
|
|
153
|
+
Canonical fallback requires affirmative evidence from this client's product
|
|
154
|
+
discovery and an advertised `supported_versions` entry proving the seller serves
|
|
155
|
+
3.1. The fallback uses synchronous discovery and successful conditional catalog
|
|
156
|
+
revalidation. A saved product on a fresh client, including one synthesized from
|
|
157
|
+
legacy IDs, cannot establish support by its shape alone. Rediscover the product
|
|
158
|
+
in the current account and authorization scope first. Evidence expires after
|
|
159
|
+
the discovery TTL (five minutes by default); product-cache hits do not extend
|
|
160
|
+
it. Authorization changes and discovery invalidation invalidate the evidence.
|
|
161
|
+
Request-scoped custom transports require explicit capability or tool-schema
|
|
162
|
+
support and do not reuse this inferred product evidence.
|
|
163
|
+
|
|
164
|
+
Assignment-only sync and updates containing only an existing `package_id` keep
|
|
165
|
+
their existing wire behavior. Pass the matching selectors for this request to
|
|
166
|
+
use the product-based fallback; package IDs alone do not establish support.
|
|
167
|
+
Without assignments, each creative must match every supplied container; use
|
|
168
|
+
assignments or split mixed-format batches when the products accept different kinds.
|
|
169
|
+
|
|
170
|
+
Without matching product evidence, unknown peers receive a legacy projection
|
|
171
|
+
only when the selected product provides one unambiguous ref. Ambiguous or
|
|
172
|
+
unavailable mappings throw `CreativeFormatProjectionError` before transport.
|
|
137
173
|
|
|
138
174
|
Schema inspection follows local JSON Pointer `$ref` targets, including `$defs`,
|
|
139
175
|
and retains the complete listed document through shared discovery-cache reuse.
|
|
@@ -141,7 +177,7 @@ Unused definitions and annotations do not establish support. External references
|
|
|
141
177
|
named anchors, and dynamic references are not resolved; inspection never fetches
|
|
142
178
|
schema URLs. Cycles and traversal limits cannot force a guessed wire mode.
|
|
143
179
|
|
|
144
|
-
Before building creatives,
|
|
180
|
+
Before building creatives, inspect the tool's wire evidence:
|
|
145
181
|
|
|
146
182
|
```ts
|
|
147
183
|
const mode = await agent.resolveCreativeFormatWireMode('sync_creatives');
|
|
@@ -150,13 +186,16 @@ const mode = await agent.resolveCreativeFormatWireMode('sync_creatives');
|
|
|
150
186
|
This method is available on `AgentClient` and `SingleAgentClient`, accepts
|
|
151
187
|
`sync_creatives`, `create_media_buy`, or `update_media_buy`, and shares the
|
|
152
188
|
write path's capability discovery, tool-schema fallback, and buyer wire pin.
|
|
189
|
+
This context-free check does not inspect a write's product options, so an
|
|
190
|
+
`unknown` result can still become canonical for a matching 3.1 write as described
|
|
191
|
+
above.
|
|
153
192
|
It reuses fresh cached or primed evidence; cold discovery may make read calls,
|
|
154
193
|
but it sends no mutation. Pass `{ signal, transport }` as the optional second
|
|
155
194
|
argument to use the same cancellation and transport scope as the write.
|
|
156
195
|
|
|
157
196
|
The result is `canonical`, `legacy`, or `unknown` (`CreativeFormatWireMode`).
|
|
158
|
-
For older peers
|
|
159
|
-
requires one unambiguous legacy reference. It does not promise canonical
|
|
197
|
+
For older peers without matching product evidence, `unknown` means projection
|
|
198
|
+
still requires one unambiguous legacy reference. It does not promise canonical
|
|
160
199
|
support. Conflicting capability/schema evidence or missing release proof with
|
|
161
200
|
a 3.2+ buyer pin throws `CreativeFormatCapabilityError`, as during a write.
|
|
162
201
|
The standalone `resolveCreativeFormatWireMode(capabilities, version)` helper
|
package/docs/llms.txt
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Ad Context Protocol (AdCP)
|
|
2
2
|
|
|
3
|
-
> Generated at: 2026-10-
|
|
4
|
-
> Library: @adcp/sdk v15.9.
|
|
3
|
+
> Generated at: 2026-10-19
|
|
4
|
+
> Library: @adcp/sdk v15.9.6
|
|
5
5
|
> AdCP major version: 3
|
|
6
6
|
> Canonical URL: https://adcontextprotocol.github.io/adcp-client/llms.txt
|
|
7
7
|
> Note: the `Library` stamp reflects the package.json version at doc-generation time. The narrative below describes the surface that lands on the next-published minor — including any 6.7 helpers documented here ahead of the release tag.
|
|
@@ -11,8 +11,8 @@ below as the publication/deployment gate.
|
|
|
11
11
|
|
|
12
12
|
| Fact | Value |
|
|
13
13
|
| --- | --- |
|
|
14
|
-
| Exact npm package | `@adcp/sdk@15.9.
|
|
15
|
-
| npm integrity | registry-derived after publication; run `npm view @adcp/sdk@15.9.
|
|
14
|
+
| Exact npm package | `@adcp/sdk@15.9.6` |
|
|
15
|
+
| npm integrity | registry-derived after publication; run `npm view @adcp/sdk@15.9.6 dist.integrity` |
|
|
16
16
|
| Node.js runtime | `^20.19.0 || >=22.12.0` |
|
|
17
17
|
| Default AdCP wire release | `3.2.5` |
|
|
18
18
|
| Maintained wire releases | `v2.5`, `v2.6`, `v3`, `3.0.0`, `3.0`, `3.0.1`, `3.0.2`, `3.0.3`, `3.0.4`, `3.0.5`, `3.0.6`, `3.0.7`, `3.0.8`, `3.0.9`, `3.0.10`, `3.0.11`, `3.0.12`, `3.0.13`, `3.0.14`, `3.0.15`, `3.0.16`, `3.0.17`, `3.0.18`, `3.0.19`, `3.0.20`, `3.0.21`, `3.0.22`, `3.0.23`, `3.0.24`, `3.0.25`, `3.1.0`, `3.1`, `3.1.1`, `3.1.2`, `3.1.3`, `3.1.4`, `3.1.5`, `3.1.6`, `3.1.7`, `3.1.8`, `3.1.9`, `3.1.10`, `3.1.11`, `3.1.12`, `3.1.13`, `3.1.14`, `3.1.15`, `3.1.16`, `3.1.17`, `3.1.18`, `3.1.19`, `3.1.20`, `3.1.21`, `3.1.22`, `3.1.23`, `3.1.24`, `3.1.25`, `3.1.26`, `3.1.27`, `3.1.28`, `3.1.29`, `3.2.1`, `3.2`, `3.2.2`, `3.2.3`, `3.2.4`, `3.2.5` |
|
|
@@ -21,8 +21,8 @@ below as the publication/deployment gate.
|
|
|
21
21
|
Install exact production inputs rather than a moving range or dist-tag:
|
|
22
22
|
|
|
23
23
|
```bash
|
|
24
|
-
npm install --save-exact '@adcp/sdk@15.9.
|
|
25
|
-
npm view '@adcp/sdk@15.9.
|
|
24
|
+
npm install --save-exact '@adcp/sdk@15.9.6'
|
|
25
|
+
npm view '@adcp/sdk@15.9.6' dist.integrity
|
|
26
26
|
```
|
|
27
27
|
|
|
28
28
|
### Required and optional peers
|