@adcp/sdk 7.3.0 → 7.5.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/dist/lib/core/AgentClient.d.ts.map +1 -1
- package/dist/lib/core/SingleAgentClient.d.ts +58 -14
- package/dist/lib/core/SingleAgentClient.d.ts.map +1 -1
- package/dist/lib/core/SingleAgentClient.js +68 -26
- package/dist/lib/core/SingleAgentClient.js.map +1 -1
- package/dist/lib/errors/index.d.ts +8 -3
- package/dist/lib/errors/index.d.ts.map +1 -1
- package/dist/lib/errors/index.js +1 -1
- package/dist/lib/errors/index.js.map +1 -1
- package/dist/lib/index.d.ts +2 -2
- package/dist/lib/index.d.ts.map +1 -1
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/protocols/index.d.ts +16 -6
- package/dist/lib/protocols/index.d.ts.map +1 -1
- package/dist/lib/protocols/index.js.map +1 -1
- package/dist/lib/protocols/responseSizeLimit.js +7 -0
- package/dist/lib/protocols/responseSizeLimit.js.map +1 -1
- package/dist/lib/registry/index.d.ts +36 -3
- package/dist/lib/registry/index.d.ts.map +1 -1
- package/dist/lib/registry/index.js +41 -5
- package/dist/lib/registry/index.js.map +1 -1
- package/dist/lib/schemas-data/v2.5/_provenance.json +1 -1
- package/dist/lib/server/create-adcp-server.d.ts +95 -0
- package/dist/lib/server/create-adcp-server.d.ts.map +1 -1
- package/dist/lib/server/create-adcp-server.js +543 -35
- package/dist/lib/server/create-adcp-server.js.map +1 -1
- package/dist/lib/server/example-tld-guard.d.ts +9 -0
- package/dist/lib/server/example-tld-guard.d.ts.map +1 -0
- package/dist/lib/server/example-tld-guard.js +25 -0
- package/dist/lib/server/example-tld-guard.js.map +1 -0
- package/dist/lib/server/index.d.ts +5 -3
- package/dist/lib/server/index.d.ts.map +1 -1
- package/dist/lib/server/index.js +17 -4
- package/dist/lib/server/index.js.map +1 -1
- package/dist/lib/server/test-controller-bridge.d.ts +885 -1
- package/dist/lib/server/test-controller-bridge.d.ts.map +1 -1
- package/dist/lib/server/test-controller-bridge.js +1502 -2
- package/dist/lib/server/test-controller-bridge.js.map +1 -1
- package/dist/lib/testing/compliance/comply.d.ts.map +1 -1
- package/dist/lib/testing/compliance/comply.js +130 -6
- package/dist/lib/testing/compliance/comply.js.map +1 -1
- package/dist/lib/testing/compliance/index.d.ts +1 -1
- package/dist/lib/testing/compliance/index.d.ts.map +1 -1
- package/dist/lib/testing/compliance/types.d.ts +83 -0
- package/dist/lib/testing/compliance/types.d.ts.map +1 -1
- package/dist/lib/testing/index.d.ts +3 -3
- package/dist/lib/testing/index.d.ts.map +1 -1
- package/dist/lib/testing/index.js +17 -3
- package/dist/lib/testing/index.js.map +1 -1
- package/dist/lib/types/core.generated.d.ts +1212 -20
- package/dist/lib/types/core.generated.d.ts.map +1 -1
- package/dist/lib/types/core.generated.js +1 -1
- package/dist/lib/types/inline-enums.generated.d.ts +6 -2
- package/dist/lib/types/inline-enums.generated.d.ts.map +1 -1
- package/dist/lib/types/inline-enums.generated.js +11 -5
- package/dist/lib/types/inline-enums.generated.js.map +1 -1
- package/dist/lib/types/schemas.generated.d.ts +26202 -26253
- package/dist/lib/types/schemas.generated.d.ts.map +1 -1
- package/dist/lib/types/schemas.generated.js +1353 -1300
- package/dist/lib/types/schemas.generated.js.map +1 -1
- package/dist/lib/types/tools.generated.d.ts +1082 -21
- package/dist/lib/types/tools.generated.d.ts.map +1 -1
- package/dist/lib/types/wellknown-schemas.generated.d.ts +2 -2
- package/dist/lib/validation/sync-creatives.d.ts +6 -6
- package/dist/lib/version.d.ts +3 -3
- package/dist/lib/version.js +3 -3
- package/examples/hello_creative_adapter_ad_server.ts +5 -0
- package/examples/hello_creative_adapter_template.ts +5 -0
- package/examples/hello_seller_adapter_guaranteed.ts +5 -0
- package/examples/hello_seller_adapter_non_guaranteed.ts +5 -0
- package/examples/hello_seller_adapter_social.ts +5 -0
- package/examples/hello_si_adapter_brand.ts +5 -0
- package/package.json +2 -2
- package/skills/call-adcp-agent/SKILL.md +1 -0
|
@@ -248,14 +248,14 @@ export declare const BrandJsonSchema: z.ZodUnion<readonly [z.ZodObject<{
|
|
|
248
248
|
html: "html";
|
|
249
249
|
javascript: "javascript";
|
|
250
250
|
daast: "daast";
|
|
251
|
-
brief: "brief";
|
|
252
|
-
catalog: "catalog";
|
|
253
251
|
image: "image";
|
|
254
252
|
video: "video";
|
|
255
253
|
text: "text";
|
|
256
254
|
webhook: "webhook";
|
|
257
255
|
css: "css";
|
|
258
256
|
markdown: "markdown";
|
|
257
|
+
brief: "brief";
|
|
258
|
+
catalog: "catalog";
|
|
259
259
|
}>;
|
|
260
260
|
url: z.ZodString;
|
|
261
261
|
tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
@@ -32,7 +32,7 @@ export declare const SyncCreativesItemSchema: z.ZodObject<{
|
|
|
32
32
|
contacts: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
33
33
|
role: z.ZodUnion<readonly [z.ZodLiteral<"billing">, z.ZodLiteral<"legal">, z.ZodLiteral<"creative">, z.ZodLiteral<"general">]>;
|
|
34
34
|
name: z.ZodOptional<z.ZodString>;
|
|
35
|
-
email: z.ZodOptional<z.
|
|
35
|
+
email: z.ZodOptional<z.ZodEmail>;
|
|
36
36
|
phone: z.ZodOptional<z.ZodString>;
|
|
37
37
|
}, z.core.$loose>>>;
|
|
38
38
|
bank: z.ZodOptional<z.ZodObject<{
|
|
@@ -53,7 +53,7 @@ export declare const SyncCreativesItemSchema: z.ZodObject<{
|
|
|
53
53
|
setup: z.ZodOptional<z.ZodObject<{
|
|
54
54
|
url: z.ZodOptional<z.ZodString>;
|
|
55
55
|
message: z.ZodString;
|
|
56
|
-
expires_at: z.ZodOptional<z.
|
|
56
|
+
expires_at: z.ZodOptional<z.ZodISODateTime>;
|
|
57
57
|
}, z.core.$loose>>;
|
|
58
58
|
account_scope: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"operator">, z.ZodLiteral<"brand">, z.ZodLiteral<"operator_brand">, z.ZodLiteral<"agent">]>>;
|
|
59
59
|
governance_agents: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
@@ -132,7 +132,7 @@ export declare const SyncCreativesSuccessStrictSchema: z.ZodObject<{
|
|
|
132
132
|
contacts: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
133
133
|
role: z.ZodUnion<readonly [z.ZodLiteral<"billing">, z.ZodLiteral<"legal">, z.ZodLiteral<"creative">, z.ZodLiteral<"general">]>;
|
|
134
134
|
name: z.ZodOptional<z.ZodString>;
|
|
135
|
-
email: z.ZodOptional<z.
|
|
135
|
+
email: z.ZodOptional<z.ZodEmail>;
|
|
136
136
|
phone: z.ZodOptional<z.ZodString>;
|
|
137
137
|
}, z.core.$loose>>>;
|
|
138
138
|
bank: z.ZodOptional<z.ZodObject<{
|
|
@@ -153,7 +153,7 @@ export declare const SyncCreativesSuccessStrictSchema: z.ZodObject<{
|
|
|
153
153
|
setup: z.ZodOptional<z.ZodObject<{
|
|
154
154
|
url: z.ZodOptional<z.ZodString>;
|
|
155
155
|
message: z.ZodString;
|
|
156
|
-
expires_at: z.ZodOptional<z.
|
|
156
|
+
expires_at: z.ZodOptional<z.ZodISODateTime>;
|
|
157
157
|
}, z.core.$loose>>;
|
|
158
158
|
account_scope: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"operator">, z.ZodLiteral<"brand">, z.ZodLiteral<"operator_brand">, z.ZodLiteral<"agent">]>>;
|
|
159
159
|
governance_agents: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
@@ -246,7 +246,7 @@ export declare const SyncCreativesResponseStrictSchema: z.ZodUnion<readonly [z.Z
|
|
|
246
246
|
contacts: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
247
247
|
role: z.ZodUnion<readonly [z.ZodLiteral<"billing">, z.ZodLiteral<"legal">, z.ZodLiteral<"creative">, z.ZodLiteral<"general">]>;
|
|
248
248
|
name: z.ZodOptional<z.ZodString>;
|
|
249
|
-
email: z.ZodOptional<z.
|
|
249
|
+
email: z.ZodOptional<z.ZodEmail>;
|
|
250
250
|
phone: z.ZodOptional<z.ZodString>;
|
|
251
251
|
}, z.core.$loose>>>;
|
|
252
252
|
bank: z.ZodOptional<z.ZodObject<{
|
|
@@ -267,7 +267,7 @@ export declare const SyncCreativesResponseStrictSchema: z.ZodUnion<readonly [z.Z
|
|
|
267
267
|
setup: z.ZodOptional<z.ZodObject<{
|
|
268
268
|
url: z.ZodOptional<z.ZodString>;
|
|
269
269
|
message: z.ZodString;
|
|
270
|
-
expires_at: z.ZodOptional<z.
|
|
270
|
+
expires_at: z.ZodOptional<z.ZodISODateTime>;
|
|
271
271
|
}, z.core.$loose>>;
|
|
272
272
|
account_scope: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"operator">, z.ZodLiteral<"brand">, z.ZodLiteral<"operator_brand">, z.ZodLiteral<"agent">]>>;
|
|
273
273
|
governance_agents: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
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 = "7.
|
|
4
|
+
export declare const LIBRARY_VERSION = "7.5.0";
|
|
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: "7.
|
|
36
|
+
readonly library: "7.5.0";
|
|
37
37
|
readonly adcp: "3.0.11";
|
|
38
38
|
readonly compatibleVersions: readonly ["v2.5", "v2.6", "v3", "3.0.0-beta.1", "3.0.0-beta.3", "3.0.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"];
|
|
39
|
-
readonly generatedAt: "2026-05-
|
|
39
|
+
readonly generatedAt: "2026-05-16T17:11:36.941Z";
|
|
40
40
|
};
|
|
41
41
|
/**
|
|
42
42
|
* Get the AdCP specification version this library is built for
|
package/dist/lib/version.js
CHANGED
|
@@ -11,7 +11,7 @@ exports.parseAdcpMajorVersion = parseAdcpMajorVersion;
|
|
|
11
11
|
/**
|
|
12
12
|
* AdCP SDK library version
|
|
13
13
|
*/
|
|
14
|
-
exports.LIBRARY_VERSION = '7.
|
|
14
|
+
exports.LIBRARY_VERSION = '7.5.0';
|
|
15
15
|
/**
|
|
16
16
|
* AdCP specification version this library is built for
|
|
17
17
|
*/
|
|
@@ -52,10 +52,10 @@ exports.COMPATIBLE_ADCP_VERSIONS = [
|
|
|
52
52
|
* Full version information
|
|
53
53
|
*/
|
|
54
54
|
exports.VERSION_INFO = {
|
|
55
|
-
library: '7.
|
|
55
|
+
library: '7.5.0',
|
|
56
56
|
adcp: '3.0.11',
|
|
57
57
|
compatibleVersions: exports.COMPATIBLE_ADCP_VERSIONS,
|
|
58
|
-
generatedAt: '2026-05-
|
|
58
|
+
generatedAt: '2026-05-16T17:11:36.941Z',
|
|
59
59
|
};
|
|
60
60
|
/**
|
|
61
61
|
* Get the AdCP specification version this library is built for
|
|
@@ -60,6 +60,7 @@ import {
|
|
|
60
60
|
memoryBackend,
|
|
61
61
|
serve,
|
|
62
62
|
verifyApiKey,
|
|
63
|
+
assertNoExampleTlds,
|
|
63
64
|
type AccountStore,
|
|
64
65
|
type Account,
|
|
65
66
|
type CreativeAdServerPlatform,
|
|
@@ -86,6 +87,10 @@ const ADCP_AUTH_TOKEN = process.env['ADCP_AUTH_TOKEN'] ?? 'sk_harness_do_not_use
|
|
|
86
87
|
const PUBLIC_AGENT_URL = process.env['PUBLIC_AGENT_URL'] ?? `http://127.0.0.1:${PORT}`;
|
|
87
88
|
|
|
88
89
|
const KNOWN_PUBLISHERS = ['creative-network.example', 'acmeoutdoor.example', 'pinnacle-agency.example'];
|
|
90
|
+
assertNoExampleTlds(
|
|
91
|
+
{ KNOWN_PUBLISHERS },
|
|
92
|
+
{ allowIn: ['test', 'development'], checklistPath: 'examples/hello_creative_adapter_ad_server.ts' }
|
|
93
|
+
);
|
|
89
94
|
const SANDBOX_ID_PREFIX = 'sandbox_';
|
|
90
95
|
|
|
91
96
|
// ---------------------------------------------------------------------------
|
|
@@ -38,6 +38,7 @@ import {
|
|
|
38
38
|
memoryBackend,
|
|
39
39
|
AdcpError,
|
|
40
40
|
defineCreativeBuilderPlatform,
|
|
41
|
+
assertNoExampleTlds,
|
|
41
42
|
type DecisioningPlatform,
|
|
42
43
|
type CreativeBuilderPlatform,
|
|
43
44
|
type BuildCreativeReturn,
|
|
@@ -72,6 +73,10 @@ const PUBLIC_AGENT_URL = process.env['PUBLIC_AGENT_URL'] ?? `http://127.0.0.1:${
|
|
|
72
73
|
// platforms expose a global format catalog or the workspace tied to the API
|
|
73
74
|
// key's principal; the mock fixture keys templates per workspace.
|
|
74
75
|
const DEFAULT_LISTING_WORKSPACE = process.env['DEFAULT_LISTING_WORKSPACE'] ?? 'ws_acme_studio';
|
|
76
|
+
assertNoExampleTlds(
|
|
77
|
+
{ DEFAULT_LISTING_WORKSPACE, PUBLIC_AGENT_URL },
|
|
78
|
+
{ allowIn: ['test', 'development'], checklistPath: 'examples/hello_creative_adapter_template.ts' }
|
|
79
|
+
);
|
|
75
80
|
|
|
76
81
|
// ---------------------------------------------------------------------------
|
|
77
82
|
// Upstream client — SWAP for production.
|
|
@@ -68,6 +68,7 @@ import {
|
|
|
68
68
|
AdcpError,
|
|
69
69
|
getAccountMode,
|
|
70
70
|
assertMediaBuyTransition,
|
|
71
|
+
assertNoExampleTlds,
|
|
71
72
|
type DecisioningPlatform,
|
|
72
73
|
type SalesCorePlatform,
|
|
73
74
|
type SalesIngestionPlatform,
|
|
@@ -101,6 +102,10 @@ const ADCP_AUTH_TOKEN = process.env['ADCP_AUTH_TOKEN'] ?? 'sk_harness_do_not_use
|
|
|
101
102
|
const PUBLIC_AGENT_URL = process.env['PUBLIC_AGENT_URL'] ?? `http://127.0.0.1:${PORT}`;
|
|
102
103
|
|
|
103
104
|
const KNOWN_PUBLISHERS = ['acmeoutdoor.example', 'pinnacle-agency.example', 'premium-sports.example'];
|
|
105
|
+
assertNoExampleTlds(
|
|
106
|
+
{ KNOWN_PUBLISHERS },
|
|
107
|
+
{ allowIn: ['test', 'development'], checklistPath: 'examples/hello_seller_adapter_guaranteed.ts' }
|
|
108
|
+
);
|
|
104
109
|
|
|
105
110
|
// SWAP: the seller's minimum committable max_variance_percent — the
|
|
106
111
|
// buyer-vs-seller billing-count delta this seller will tolerate before
|
|
@@ -62,6 +62,7 @@ import {
|
|
|
62
62
|
createMediaBuyStore,
|
|
63
63
|
InMemoryStateStore,
|
|
64
64
|
assertMediaBuyTransition,
|
|
65
|
+
assertNoExampleTlds,
|
|
65
66
|
type DecisioningPlatform,
|
|
66
67
|
type SalesCorePlatform,
|
|
67
68
|
type SalesIngestionPlatform,
|
|
@@ -96,6 +97,10 @@ const ADCP_AUTH_TOKEN = process.env['ADCP_AUTH_TOKEN'] ?? 'sk_harness_do_not_use
|
|
|
96
97
|
const PUBLIC_AGENT_URL = process.env['PUBLIC_AGENT_URL'] ?? `http://127.0.0.1:${PORT}`;
|
|
97
98
|
|
|
98
99
|
const KNOWN_PUBLISHERS = ['remnant-network.example', 'acmeoutdoor.example', 'pinnacle-agency.example'];
|
|
100
|
+
assertNoExampleTlds(
|
|
101
|
+
{ KNOWN_PUBLISHERS },
|
|
102
|
+
{ allowIn: ['test', 'development'], checklistPath: 'examples/hello_seller_adapter_non_guaranteed.ts' }
|
|
103
|
+
);
|
|
99
104
|
|
|
100
105
|
// TEST-ONLY: id-prefix used by the sandbox arm in `accounts.resolve` so
|
|
101
106
|
// production sellers don't need this; remove the sandbox arm + this
|
|
@@ -38,6 +38,7 @@ import {
|
|
|
38
38
|
AdcpError,
|
|
39
39
|
defineSalesPlatform,
|
|
40
40
|
defineAudiencePlatform,
|
|
41
|
+
assertNoExampleTlds,
|
|
41
42
|
type DecisioningPlatform,
|
|
42
43
|
type SalesPlatform,
|
|
43
44
|
type AudiencePlatform,
|
|
@@ -303,6 +304,10 @@ interface AdvertiserMeta {
|
|
|
303
304
|
// AdCP-side identifiers from the mock's seed data. SWAP: replace with a
|
|
304
305
|
// real `/advertiser/list` call.
|
|
305
306
|
const KNOWN_ADVERTISERS = ['acmeoutdoor.example', 'summit-media.example'];
|
|
307
|
+
assertNoExampleTlds(
|
|
308
|
+
{ KNOWN_ADVERTISERS },
|
|
309
|
+
{ allowIn: ['test', 'development'], checklistPath: 'examples/hello_seller_adapter_social.ts' }
|
|
310
|
+
);
|
|
306
311
|
|
|
307
312
|
// Buyer event_source_id → upstream pixel_id translation map. The mock
|
|
308
313
|
// ignores buyer-supplied pixel_id and assigns its own (`px_<uuid>`); buyers
|
|
@@ -47,6 +47,7 @@ import {
|
|
|
47
47
|
createUpstreamHttpClient,
|
|
48
48
|
memoryBackend,
|
|
49
49
|
AdcpError,
|
|
50
|
+
assertNoExampleTlds,
|
|
50
51
|
type AccountStore,
|
|
51
52
|
type Account,
|
|
52
53
|
} from '@adcp/sdk/server';
|
|
@@ -81,6 +82,10 @@ const ADCP_AUTH_TOKEN = process.env['ADCP_AUTH_TOKEN'] ?? 'sk_harness_do_not_use
|
|
|
81
82
|
// tenant), so a hardcoded default is fine. Multi-brand deployments derive
|
|
82
83
|
// from `ctx.authInfo` per-API-key binding instead.
|
|
83
84
|
const DEFAULT_LISTING_BRAND = process.env['DEFAULT_LISTING_BRAND'] ?? 'brand_nova_motors';
|
|
85
|
+
assertNoExampleTlds(
|
|
86
|
+
{ DEFAULT_LISTING_BRAND },
|
|
87
|
+
{ allowIn: ['test', 'development'], checklistPath: 'examples/hello_si_adapter_brand.ts' }
|
|
88
|
+
);
|
|
84
89
|
|
|
85
90
|
// ---------------------------------------------------------------------------
|
|
86
91
|
// Upstream client — SWAP for production.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@adcp/sdk",
|
|
3
|
-
"version": "7.
|
|
3
|
+
"version": "7.5.0",
|
|
4
4
|
"description": "AdCP SDK — client, server, and compliance harnesses for the AdContext Protocol (MCP + A2A)",
|
|
5
5
|
"workspaces": [
|
|
6
6
|
".",
|
|
@@ -208,7 +208,7 @@
|
|
|
208
208
|
"build:lib": "npm run sync-version && npm run schemas:ensure && tsx scripts/generate-wire-spec-fields.ts && tsc --project tsconfig.lib.json && tsx scripts/copy-schemas-to-dist.ts",
|
|
209
209
|
"build:test-agents": "npm run build:lib && tsc -p test-agents/tsconfig.json --rootDir test-agents",
|
|
210
210
|
"pretest": "npm run schemas:ensure",
|
|
211
|
-
"test": "NODE_ENV=test node --test-timeout=60000 --test-force-exit --test test/*.test.js test/lib/*.test.js",
|
|
211
|
+
"test": "NODE_ENV=test node --test-timeout=60000 --test-force-exit --test test/*.test.js test/lib/*.test.js && npm test --workspace=packages/eslint-plugin --if-present",
|
|
212
212
|
"pretest:lib": "npm run schemas:ensure",
|
|
213
213
|
"test:lib": "NODE_ENV=test node --test-timeout=60000 --test-force-exit --test test/lib/*.test.js",
|
|
214
214
|
"pretest:examples": "npm run build",
|
|
@@ -240,6 +240,7 @@ Quick lookup before reading the full envelope. Match what you see in `adcp_error
|
|
|
240
240
|
| `recovery: 'transient'` (rate limit, 5xx, timeout) | Server-side, retry-safe | Retry with the **same** `idempotency_key`. |
|
|
241
241
|
| `recovery: 'correctable'` | Buyer-side fix | Read `issues[]`, patch the pointers, resend. Most cases close in one attempt. |
|
|
242
242
|
| `recovery: 'terminal'` (account suspended, payment required, …) | Requires human action | Don't retry. Surface to the user. |
|
|
243
|
+
| `[adcp] Warning: agent … does not expose get_adcp_capabilities` (one-shot per client, `@adcp/client` only) | Seller didn't ship v3 discovery — routed through the v2 adapter with idempotency-TTL guarantee unknown | Branch on `client.isSyntheticV2()` before dispatch. Tighten retry policy (lower attempt cap, longer backoff) or fall back to natural-key recovery for these sellers. Same predicate also flags synthetic v3 caveat — see `isSyntheticV2()` JSDoc. |
|
|
243
244
|
| HTTP 401 with `WWW-Authenticate` header | Missing or expired credential | Add `Authorization` per the agent's auth spec; re-auth if applicable. If the challenge `scheme` is `Basic` (gateway-fronted agents — Apigee, Kong, AWS API GW), the SDK / CLI need `auth: { type: 'basic', username, password }` or `--auth user:pass --auth-scheme basic` — `Bearer` will never succeed against that gateway. **Saved aliases**: if registered with `--auth-scheme basic`, the scheme persists in `~/.adcp/config.json` and auto-applies on every later invocation — don't redundantly repeat the flag on each call. |
|
|
244
245
|
|
|
245
246
|
If your symptom isn't here, fall through to the next section.
|