@anthropic-ai/sdk 0.126.0 → 0.127.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/CHANGELOG.md +38 -0
- package/client.d.mts +10 -9
- package/client.d.mts.map +1 -1
- package/client.d.ts +10 -9
- package/client.d.ts.map +1 -1
- package/client.js +33 -19
- package/client.js.map +1 -1
- package/client.mjs +34 -20
- package/client.mjs.map +1 -1
- package/internal/parse.d.mts.map +1 -1
- package/internal/parse.d.ts.map +1 -1
- package/internal/parse.js +2 -2
- package/internal/parse.js.map +1 -1
- package/internal/parse.mjs +3 -3
- package/internal/parse.mjs.map +1 -1
- package/internal/shims.d.mts +3 -3
- package/internal/shims.d.mts.map +1 -1
- package/internal/shims.d.ts +3 -3
- package/internal/shims.d.ts.map +1 -1
- package/internal/shims.js.map +1 -1
- package/internal/shims.mjs.map +1 -1
- package/internal/utils/log.d.mts +7 -12
- package/internal/utils/log.d.mts.map +1 -1
- package/internal/utils/log.d.ts +7 -12
- package/internal/utils/log.d.ts.map +1 -1
- package/internal/utils/log.js +12 -0
- package/internal/utils/log.js.map +1 -1
- package/internal/utils/log.mjs +11 -0
- package/internal/utils/log.mjs.map +1 -1
- package/lib/BetaMessageStream.d.mts.map +1 -1
- package/lib/BetaMessageStream.d.ts.map +1 -1
- package/lib/BetaMessageStream.js +7 -5
- package/lib/BetaMessageStream.js.map +1 -1
- package/lib/BetaMessageStream.mjs +7 -5
- package/lib/BetaMessageStream.mjs.map +1 -1
- package/lib/beta-parser.d.mts +1 -3
- package/lib/beta-parser.d.mts.map +1 -1
- package/lib/beta-parser.d.ts +1 -3
- package/lib/beta-parser.d.ts.map +1 -1
- package/lib/beta-parser.js.map +1 -1
- package/lib/beta-parser.mjs.map +1 -1
- package/lib/internal/stub.d.mts +2 -0
- package/lib/internal/stub.d.mts.map +1 -0
- package/lib/internal/stub.d.ts +2 -0
- package/lib/internal/stub.d.ts.map +1 -0
- package/lib/internal/stub.js +6 -0
- package/lib/internal/stub.js.map +1 -0
- package/lib/internal/stub.mjs +3 -0
- package/lib/internal/stub.mjs.map +1 -0
- package/lib/internal/types.d.mts +5 -0
- package/lib/internal/types.d.mts.map +1 -0
- package/lib/internal/types.d.ts +5 -0
- package/lib/internal/types.d.ts.map +1 -0
- package/lib/internal/types.js +3 -0
- package/lib/internal/types.js.map +1 -0
- package/lib/internal/types.mjs +2 -0
- package/lib/internal/types.mjs.map +1 -0
- package/lib/middleware.js +6 -1
- package/lib/middleware.js.map +1 -1
- package/lib/middleware.mjs +6 -1
- package/lib/middleware.mjs.map +1 -1
- package/lib/parser.d.mts +1 -3
- package/lib/parser.d.mts.map +1 -1
- package/lib/parser.d.ts +1 -3
- package/lib/parser.d.ts.map +1 -1
- package/lib/parser.js.map +1 -1
- package/lib/parser.mjs.map +1 -1
- package/lib/tools/BetaToolRunner.d.mts +21 -6
- package/lib/tools/BetaToolRunner.d.mts.map +1 -1
- package/lib/tools/BetaToolRunner.d.ts +21 -6
- package/lib/tools/BetaToolRunner.d.ts.map +1 -1
- package/lib/tools/BetaToolRunner.js +125 -23
- package/lib/tools/BetaToolRunner.js.map +1 -1
- package/lib/tools/BetaToolRunner.mjs +125 -23
- package/lib/tools/BetaToolRunner.mjs.map +1 -1
- package/lib/transform-json-schema.js +7 -5
- package/lib/transform-json-schema.js.map +1 -1
- package/lib/transform-json-schema.mjs +7 -5
- package/lib/transform-json-schema.mjs.map +1 -1
- package/package.json +2 -1
- package/resources/beta/deployment-runs.d.mts +4 -0
- package/resources/beta/deployment-runs.d.mts.map +1 -1
- package/resources/beta/deployment-runs.d.ts +4 -0
- package/resources/beta/deployment-runs.d.ts.map +1 -1
- package/resources/beta/deployments.d.mts +5 -0
- package/resources/beta/deployments.d.mts.map +1 -1
- package/resources/beta/deployments.d.ts +5 -0
- package/resources/beta/deployments.d.ts.map +1 -1
- package/resources/beta/dreams.d.mts +17 -0
- package/resources/beta/dreams.d.mts.map +1 -1
- package/resources/beta/dreams.d.ts +17 -0
- package/resources/beta/dreams.d.ts.map +1 -1
- package/resources/beta/memory-stores/memories.d.mts +6 -0
- package/resources/beta/memory-stores/memories.d.mts.map +1 -1
- package/resources/beta/memory-stores/memories.d.ts +6 -0
- package/resources/beta/memory-stores/memories.d.ts.map +1 -1
- package/resources/beta/memory-stores/memory-versions.d.mts +7 -0
- package/resources/beta/memory-stores/memory-versions.d.mts.map +1 -1
- package/resources/beta/memory-stores/memory-versions.d.ts +7 -0
- package/resources/beta/memory-stores/memory-versions.d.ts.map +1 -1
- package/resources/beta/messages/messages.d.mts +1 -1
- package/resources/beta/messages/messages.d.ts +1 -1
- package/resources/beta/organization/index.d.mts +1 -1
- package/resources/beta/organization/index.d.mts.map +1 -1
- package/resources/beta/organization/index.d.ts +1 -1
- package/resources/beta/organization/index.d.ts.map +1 -1
- package/resources/beta/organization/index.js.map +1 -1
- package/resources/beta/organization/index.mjs.map +1 -1
- package/resources/beta/organization/organization.d.mts +2 -2
- package/resources/beta/organization/organization.d.mts.map +1 -1
- package/resources/beta/organization/organization.d.ts +2 -2
- package/resources/beta/organization/organization.d.ts.map +1 -1
- package/resources/beta/organization/organization.js.map +1 -1
- package/resources/beta/organization/organization.mjs.map +1 -1
- package/resources/beta/organization/rate-limits.d.mts +87 -5
- package/resources/beta/organization/rate-limits.d.mts.map +1 -1
- package/resources/beta/organization/rate-limits.d.ts +87 -5
- package/resources/beta/organization/rate-limits.d.ts.map +1 -1
- package/resources/beta/organization/workspaces/rate-limits.d.mts +9 -4
- package/resources/beta/organization/workspaces/rate-limits.d.mts.map +1 -1
- package/resources/beta/organization/workspaces/rate-limits.d.ts +9 -4
- package/resources/beta/organization/workspaces/rate-limits.d.ts.map +1 -1
- package/resources/beta/organization/workspaces/rate-limits.js.map +1 -1
- package/resources/beta/organization/workspaces/rate-limits.mjs.map +1 -1
- package/resources/beta/sessions/sessions.d.mts +6 -0
- package/resources/beta/sessions/sessions.d.mts.map +1 -1
- package/resources/beta/sessions/sessions.d.ts +6 -0
- package/resources/beta/sessions/sessions.d.ts.map +1 -1
- package/resources/beta/sessions/sessions.js.map +1 -1
- package/resources/beta/sessions/sessions.mjs.map +1 -1
- package/resources/beta/tunnels/certificates.d.mts +2 -2
- package/resources/beta/tunnels/certificates.d.ts +2 -2
- package/resources/beta/vaults/credentials.d.mts +19 -5
- package/resources/beta/vaults/credentials.d.mts.map +1 -1
- package/resources/beta/vaults/credentials.d.ts +19 -5
- package/resources/beta/vaults/credentials.d.ts.map +1 -1
- package/src/client.ts +82 -71
- package/src/internal/parse.ts +8 -11
- package/src/internal/shims.ts +4 -3
- package/src/internal/utils/log.ts +16 -2
- package/src/lib/BetaMessageStream.ts +7 -5
- package/src/lib/beta-parser.ts +1 -3
- package/src/lib/internal/stub.ts +2 -0
- package/src/lib/internal/types.ts +2 -0
- package/src/lib/middleware.ts +6 -1
- package/src/lib/parser.ts +1 -3
- package/src/lib/tools/BetaToolRunner.ts +157 -24
- package/src/lib/transform-json-schema.ts +8 -6
- package/src/resources/beta/deployment-runs.ts +4 -0
- package/src/resources/beta/deployments.ts +5 -0
- package/src/resources/beta/dreams.ts +17 -0
- package/src/resources/beta/memory-stores/memories.ts +6 -0
- package/src/resources/beta/memory-stores/memory-versions.ts +7 -0
- package/src/resources/beta/messages/messages.ts +1 -1
- package/src/resources/beta/organization/index.ts +6 -0
- package/src/resources/beta/organization/organization.ts +12 -0
- package/src/resources/beta/organization/rate-limits.ts +112 -4
- package/src/resources/beta/organization/workspaces/rate-limits.ts +16 -4
- package/src/resources/beta/sessions/sessions.ts +6 -0
- package/src/resources/beta/tunnels/certificates.ts +2 -2
- package/src/resources/beta/vaults/credentials.ts +19 -5
- package/src/version.ts +1 -1
- package/version.d.mts +1 -1
- package/version.d.ts +1 -1
- package/version.js +1 -1
- package/version.mjs +1 -1
package/src/client.ts
CHANGED
|
@@ -31,12 +31,16 @@ export type { Middleware, MiddlewareContext, MiddlewareNext } from './core/middl
|
|
|
31
31
|
export type { APIRequest } from './core/api';
|
|
32
32
|
import * as Pagination from './core/pagination';
|
|
33
33
|
import {
|
|
34
|
+
type BidirectionalPageCursor,
|
|
34
35
|
type BidirectionalPageCursorParams,
|
|
35
36
|
BidirectionalPageCursorResponse,
|
|
37
|
+
type Page,
|
|
38
|
+
type PageCursor,
|
|
36
39
|
type PageCursorParams,
|
|
37
40
|
PageCursorResponse,
|
|
38
41
|
type PageParams,
|
|
39
42
|
PageResponse,
|
|
43
|
+
type TokenPage,
|
|
40
44
|
type TokenPageParams,
|
|
41
45
|
TokenPageResponse,
|
|
42
46
|
} from './core/pagination';
|
|
@@ -358,8 +362,8 @@ import { readEnv } from './internal/utils/env';
|
|
|
358
362
|
import {
|
|
359
363
|
type LogLevel,
|
|
360
364
|
type Logger,
|
|
365
|
+
debugLogRequestDetails,
|
|
361
366
|
defaultLogLevel,
|
|
362
|
-
formatRequestDetails,
|
|
363
367
|
loggerFor,
|
|
364
368
|
parseLogLevel,
|
|
365
369
|
} from './internal/utils/log';
|
|
@@ -1046,7 +1050,7 @@ export class BaseAnthropic {
|
|
|
1046
1050
|
?.split(',')
|
|
1047
1051
|
.map((s) => s.trim());
|
|
1048
1052
|
if (!existing?.includes(OAUTH_API_BETA_HEADER)) {
|
|
1049
|
-
headers.
|
|
1053
|
+
headers.set('anthropic-beta', [...(existing ?? []), OAUTH_API_BETA_HEADER].join(','));
|
|
1050
1054
|
}
|
|
1051
1055
|
request.headers = headers;
|
|
1052
1056
|
}
|
|
@@ -1119,7 +1123,10 @@ export class BaseAnthropic {
|
|
|
1119
1123
|
retryOfRequestLogID: string | undefined,
|
|
1120
1124
|
): Promise<APIResponseProps> {
|
|
1121
1125
|
const options = await optionsInput;
|
|
1122
|
-
|
|
1126
|
+
let maxRetries = validatePositiveInteger('maxRetries', options.maxRetries ?? this.maxRetries);
|
|
1127
|
+
if (this.isStreamBody(options.body)) {
|
|
1128
|
+
maxRetries = 0;
|
|
1129
|
+
}
|
|
1123
1130
|
if (retriesRemaining == null) {
|
|
1124
1131
|
retriesRemaining = maxRetries;
|
|
1125
1132
|
// Top-level call: reset per-request auth flags so a reused options object
|
|
@@ -1172,43 +1179,42 @@ export class BaseAnthropic {
|
|
|
1172
1179
|
this.middleware.length > 0 || !!options.middleware?.length || this.backendMiddleware().length > 0;
|
|
1173
1180
|
if (hasMiddleware && !isTimeout && !isRetryableError(response)) {
|
|
1174
1181
|
loggerFor(this).info(`[${requestLogID}] middleware error (not retryable)`);
|
|
1175
|
-
loggerFor(this)
|
|
1176
|
-
|
|
1177
|
-
|
|
1178
|
-
|
|
1179
|
-
|
|
1180
|
-
|
|
1181
|
-
message: response.message,
|
|
1182
|
-
}),
|
|
1183
|
-
);
|
|
1182
|
+
debugLogRequestDetails(loggerFor(this), `[${requestLogID}] middleware error (not retryable)`, {
|
|
1183
|
+
retryOfRequestLogID,
|
|
1184
|
+
url,
|
|
1185
|
+
durationMs: headersTime - startTime,
|
|
1186
|
+
message: response.message,
|
|
1187
|
+
});
|
|
1184
1188
|
throw response;
|
|
1185
1189
|
}
|
|
1186
1190
|
if (retriesRemaining) {
|
|
1187
1191
|
loggerFor(this).info(
|
|
1188
1192
|
`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} - ${retryMessage}`,
|
|
1189
1193
|
);
|
|
1190
|
-
|
|
1194
|
+
debugLogRequestDetails(
|
|
1195
|
+
loggerFor(this),
|
|
1191
1196
|
`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} (${retryMessage})`,
|
|
1192
|
-
|
|
1197
|
+
{
|
|
1193
1198
|
retryOfRequestLogID,
|
|
1194
1199
|
url,
|
|
1195
1200
|
durationMs: headersTime - startTime,
|
|
1196
1201
|
message: response.message,
|
|
1197
|
-
}
|
|
1202
|
+
},
|
|
1198
1203
|
);
|
|
1199
1204
|
return this.retryRequest(options, retriesRemaining, retryOfRequestLogID ?? requestLogID);
|
|
1200
1205
|
}
|
|
1201
1206
|
loggerFor(this).info(
|
|
1202
1207
|
`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} - error; no more retries left`,
|
|
1203
1208
|
);
|
|
1204
|
-
|
|
1209
|
+
debugLogRequestDetails(
|
|
1210
|
+
loggerFor(this),
|
|
1205
1211
|
`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} (error; no more retries left)`,
|
|
1206
|
-
|
|
1212
|
+
{
|
|
1207
1213
|
retryOfRequestLogID,
|
|
1208
1214
|
url,
|
|
1209
1215
|
durationMs: headersTime - startTime,
|
|
1210
1216
|
message: response.message,
|
|
1211
|
-
}
|
|
1217
|
+
},
|
|
1212
1218
|
);
|
|
1213
1219
|
if (isTimeout) {
|
|
1214
1220
|
throw new Errors.APIConnectionTimeoutError();
|
|
@@ -1238,16 +1244,13 @@ export class BaseAnthropic {
|
|
|
1238
1244
|
await Shims.CancelReadableStream(response.body);
|
|
1239
1245
|
releaseRequestSignal(controller);
|
|
1240
1246
|
loggerFor(this).info(`${responseInfo} - ${retryMessage}`);
|
|
1241
|
-
loggerFor(this)
|
|
1242
|
-
|
|
1243
|
-
|
|
1244
|
-
|
|
1245
|
-
|
|
1246
|
-
|
|
1247
|
-
|
|
1248
|
-
durationMs: headersTime - startTime,
|
|
1249
|
-
}),
|
|
1250
|
-
);
|
|
1247
|
+
debugLogRequestDetails(loggerFor(this), `[${requestLogID}] response error (${retryMessage})`, {
|
|
1248
|
+
retryOfRequestLogID,
|
|
1249
|
+
url: response.url,
|
|
1250
|
+
status: response.status,
|
|
1251
|
+
headers: response.headers,
|
|
1252
|
+
durationMs: headersTime - startTime,
|
|
1253
|
+
});
|
|
1251
1254
|
return this.retryRequest(
|
|
1252
1255
|
options,
|
|
1253
1256
|
retriesRemaining,
|
|
@@ -1264,17 +1267,14 @@ export class BaseAnthropic {
|
|
|
1264
1267
|
const errJSON = safeJSON(errText) as any;
|
|
1265
1268
|
const errMessage = errJSON ? undefined : errText;
|
|
1266
1269
|
|
|
1267
|
-
loggerFor(this)
|
|
1268
|
-
|
|
1269
|
-
|
|
1270
|
-
|
|
1271
|
-
|
|
1272
|
-
|
|
1273
|
-
|
|
1274
|
-
|
|
1275
|
-
durationMs: Date.now() - startTime,
|
|
1276
|
-
}),
|
|
1277
|
-
);
|
|
1270
|
+
debugLogRequestDetails(loggerFor(this), `[${requestLogID}] response error (${retryMessage})`, {
|
|
1271
|
+
retryOfRequestLogID,
|
|
1272
|
+
url: response.url,
|
|
1273
|
+
status: response.status,
|
|
1274
|
+
headers: response.headers,
|
|
1275
|
+
message: errMessage,
|
|
1276
|
+
durationMs: Date.now() - startTime,
|
|
1277
|
+
});
|
|
1278
1278
|
|
|
1279
1279
|
releaseRequestSignal(controller);
|
|
1280
1280
|
const err = this.makeStatusError(response.status, errJSON, errMessage, response.headers);
|
|
@@ -1282,16 +1282,13 @@ export class BaseAnthropic {
|
|
|
1282
1282
|
}
|
|
1283
1283
|
|
|
1284
1284
|
loggerFor(this).info(responseInfo);
|
|
1285
|
-
loggerFor(this)
|
|
1286
|
-
|
|
1287
|
-
|
|
1288
|
-
|
|
1289
|
-
|
|
1290
|
-
|
|
1291
|
-
|
|
1292
|
-
durationMs: headersTime - startTime,
|
|
1293
|
-
}),
|
|
1294
|
-
);
|
|
1285
|
+
debugLogRequestDetails(loggerFor(this), `[${requestLogID}] response start`, {
|
|
1286
|
+
retryOfRequestLogID,
|
|
1287
|
+
url: response.url,
|
|
1288
|
+
status: response.status,
|
|
1289
|
+
headers: response.headers,
|
|
1290
|
+
durationMs: headersTime - startTime,
|
|
1291
|
+
});
|
|
1295
1292
|
|
|
1296
1293
|
armAbandonmentBackstop(response.body ?? response, controller);
|
|
1297
1294
|
return { response, options, controller, requestLogID, retryOfRequestLogID, startTime };
|
|
@@ -1390,16 +1387,13 @@ export class BaseAnthropic {
|
|
|
1390
1387
|
await this.prepareRequest(innerInit, { url: innerUrlStr, options: requestOptions });
|
|
1391
1388
|
|
|
1392
1389
|
if (logCtx) {
|
|
1393
|
-
loggerFor(this).
|
|
1394
|
-
|
|
1395
|
-
|
|
1396
|
-
|
|
1397
|
-
|
|
1398
|
-
|
|
1399
|
-
|
|
1400
|
-
headers: innerInit.headers,
|
|
1401
|
-
}),
|
|
1402
|
-
);
|
|
1390
|
+
debugLogRequestDetails(loggerFor(this), `[${logCtx.requestLogID}] sending request`, {
|
|
1391
|
+
retryOfRequestLogID: logCtx.retryOfRequestLogID,
|
|
1392
|
+
method: innerInit.method,
|
|
1393
|
+
url: innerUrlStr,
|
|
1394
|
+
options: requestOptions,
|
|
1395
|
+
headers: innerInit.headers,
|
|
1396
|
+
});
|
|
1403
1397
|
}
|
|
1404
1398
|
|
|
1405
1399
|
return timedFetch(innerUrl, innerInit);
|
|
@@ -1628,11 +1622,7 @@ export class BaseAnthropic {
|
|
|
1628
1622
|
((globalThis as any).ReadableStream && body instanceof (globalThis as any).ReadableStream)
|
|
1629
1623
|
) {
|
|
1630
1624
|
return { bodyHeaders: undefined, body: body as BodyInit };
|
|
1631
|
-
} else if (
|
|
1632
|
-
typeof body === 'object' &&
|
|
1633
|
-
(Symbol.asyncIterator in body ||
|
|
1634
|
-
(Symbol.iterator in body && 'next' in body && typeof body.next === 'function'))
|
|
1635
|
-
) {
|
|
1625
|
+
} else if (this.isStreamBody(body)) {
|
|
1636
1626
|
return { bodyHeaders: undefined, body: Shims.ReadableStreamFrom(body as AsyncIterable<Uint8Array>) };
|
|
1637
1627
|
} else if (
|
|
1638
1628
|
typeof body === 'object' &&
|
|
@@ -1647,6 +1637,22 @@ export class BaseAnthropic {
|
|
|
1647
1637
|
}
|
|
1648
1638
|
}
|
|
1649
1639
|
|
|
1640
|
+
/**
|
|
1641
|
+
* Whether `body` is sent as a stream, which can be read only once:
|
|
1642
|
+
* a `ReadableStream`, an async iterable or an iterator.
|
|
1643
|
+
*/
|
|
1644
|
+
private isStreamBody(body: unknown): boolean {
|
|
1645
|
+
if ((globalThis as any).ReadableStream && body instanceof (globalThis as any).ReadableStream) {
|
|
1646
|
+
return true;
|
|
1647
|
+
}
|
|
1648
|
+
return (
|
|
1649
|
+
typeof body === 'object' &&
|
|
1650
|
+
body !== null &&
|
|
1651
|
+
(Symbol.asyncIterator in body ||
|
|
1652
|
+
(Symbol.iterator in body && 'next' in body && typeof body.next === 'function'))
|
|
1653
|
+
);
|
|
1654
|
+
}
|
|
1655
|
+
|
|
1650
1656
|
static Anthropic = this;
|
|
1651
1657
|
static HUMAN_PROMPT = HUMAN_PROMPT;
|
|
1652
1658
|
static AI_PROMPT = AI_PROMPT;
|
|
@@ -1694,17 +1700,22 @@ export declare namespace Anthropic {
|
|
|
1694
1700
|
|
|
1695
1701
|
export type { ApiKeySetter };
|
|
1696
1702
|
|
|
1697
|
-
export
|
|
1698
|
-
export { type PageParams as PageParams, type PageResponse as PageResponse };
|
|
1703
|
+
export { type Page as Page, type PageParams as PageParams, type PageResponse as PageResponse };
|
|
1699
1704
|
|
|
1700
|
-
export
|
|
1701
|
-
|
|
1705
|
+
export {
|
|
1706
|
+
type TokenPage as TokenPage,
|
|
1707
|
+
type TokenPageParams as TokenPageParams,
|
|
1708
|
+
type TokenPageResponse as TokenPageResponse,
|
|
1709
|
+
};
|
|
1702
1710
|
|
|
1703
|
-
export
|
|
1704
|
-
|
|
1711
|
+
export {
|
|
1712
|
+
type PageCursor as PageCursor,
|
|
1713
|
+
type PageCursorParams as PageCursorParams,
|
|
1714
|
+
type PageCursorResponse as PageCursorResponse,
|
|
1715
|
+
};
|
|
1705
1716
|
|
|
1706
|
-
export import BidirectionalPageCursor = Pagination.BidirectionalPageCursor;
|
|
1707
1717
|
export {
|
|
1718
|
+
type BidirectionalPageCursor as BidirectionalPageCursor,
|
|
1708
1719
|
type BidirectionalPageCursorParams as BidirectionalPageCursorParams,
|
|
1709
1720
|
type BidirectionalPageCursorResponse as BidirectionalPageCursorResponse,
|
|
1710
1721
|
};
|
package/src/internal/parse.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { FinalRequestOptions } from './request-options';
|
|
2
2
|
import { Stream } from '../core/streaming';
|
|
3
3
|
import { type BaseAnthropic } from '../client';
|
|
4
|
-
import {
|
|
4
|
+
import { debugLogRequestDetails, loggerFor } from './utils/log';
|
|
5
5
|
import { releaseRequestSignal } from './request-signal';
|
|
6
6
|
import type { AbstractPage } from '../core/pagination';
|
|
7
7
|
|
|
@@ -63,16 +63,13 @@ export async function defaultParseResponse<T>(
|
|
|
63
63
|
releaseRequestSignal(props.controller);
|
|
64
64
|
}
|
|
65
65
|
});
|
|
66
|
-
loggerFor(client)
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
durationMs: Date.now() - startTime,
|
|
74
|
-
}),
|
|
75
|
-
);
|
|
66
|
+
debugLogRequestDetails(loggerFor(client), `[${requestLogID}] response parsed`, {
|
|
67
|
+
retryOfRequestLogID,
|
|
68
|
+
url: response.url,
|
|
69
|
+
status: response.status,
|
|
70
|
+
body,
|
|
71
|
+
durationMs: Date.now() - startTime,
|
|
72
|
+
});
|
|
76
73
|
return body;
|
|
77
74
|
}
|
|
78
75
|
|
package/src/internal/shims.ts
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
8
|
import type { Fetch } from './builtin-types';
|
|
9
|
-
import type { ReadableStream } from './shim-types';
|
|
9
|
+
import type { ReadableStream as ReadableStreamType } from './shim-types';
|
|
10
10
|
|
|
11
11
|
export function getDefaultFetch(): Fetch {
|
|
12
12
|
if (typeof fetch !== 'undefined') {
|
|
@@ -18,9 +18,10 @@ export function getDefaultFetch(): Fetch {
|
|
|
18
18
|
);
|
|
19
19
|
}
|
|
20
20
|
|
|
21
|
+
// The runtime's global ReadableStream constructor, not the type imported above as ReadableStreamType.
|
|
21
22
|
type ReadableStreamArgs = ConstructorParameters<typeof ReadableStream>;
|
|
22
23
|
|
|
23
|
-
export function makeReadableStream(...args: ReadableStreamArgs):
|
|
24
|
+
export function makeReadableStream(...args: ReadableStreamArgs): ReadableStreamType {
|
|
24
25
|
const ReadableStream = (globalThis as any).ReadableStream;
|
|
25
26
|
if (typeof ReadableStream === 'undefined') {
|
|
26
27
|
// Note: All of the platforms / runtimes we officially support already define
|
|
@@ -33,7 +34,7 @@ export function makeReadableStream(...args: ReadableStreamArgs): ReadableStream
|
|
|
33
34
|
return new ReadableStream(...args);
|
|
34
35
|
}
|
|
35
36
|
|
|
36
|
-
export function ReadableStreamFrom<T>(iterable: Iterable<T> | AsyncIterable<T>):
|
|
37
|
+
export function ReadableStreamFrom<T>(iterable: Iterable<T> | AsyncIterable<T>): ReadableStreamType<T> {
|
|
37
38
|
let iter: AsyncIterator<T> | Iterator<T> =
|
|
38
39
|
Symbol.asyncIterator in iterable ? iterable[Symbol.asyncIterator]() : iterable[Symbol.iterator]();
|
|
39
40
|
|
|
@@ -112,7 +112,7 @@ export function defaultLogger(): Logger {
|
|
|
112
112
|
return cachedDefaultLogger;
|
|
113
113
|
}
|
|
114
114
|
|
|
115
|
-
|
|
115
|
+
type RequestDetails = {
|
|
116
116
|
options?: RequestOptions | undefined;
|
|
117
117
|
headers?: Headers | Record<string, string> | undefined;
|
|
118
118
|
retryOfRequestLogID?: string | undefined;
|
|
@@ -123,7 +123,21 @@ export const formatRequestDetails = (details: {
|
|
|
123
123
|
durationMs?: number | undefined;
|
|
124
124
|
message?: unknown;
|
|
125
125
|
body?: unknown;
|
|
126
|
-
}
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Logs `details` at debug level. Formatting copies headers and options, so it
|
|
130
|
+
* runs only when debug logging is enabled.
|
|
131
|
+
*/
|
|
132
|
+
export function debugLogRequestDetails(logger: Logger, message: string, details: RequestDetails): void {
|
|
133
|
+
// `loggerFor` filters disabled levels to `noop`.
|
|
134
|
+
if (logger.debug === noop) {
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
logger.debug(message, formatRequestDetails(details));
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
export const formatRequestDetails = (details: RequestDetails) => {
|
|
127
141
|
if (details.options) {
|
|
128
142
|
details.options = { ...details.options };
|
|
129
143
|
delete details.options['headers']; // redundant + leaks internals
|
|
@@ -695,11 +695,13 @@ export class BetaMessageStream<ParsedT = null> implements AsyncIterable<BetaMess
|
|
|
695
695
|
}
|
|
696
696
|
case 'compaction_delta': {
|
|
697
697
|
if (snapshotContent?.type === 'compaction') {
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
698
|
+
// The delta carries the block's final value (null content = failed compaction), so assign.
|
|
699
|
+
const block = { ...snapshotContent, content: event.delta.content };
|
|
700
|
+
// beta-gated key: only copy it when the server sent it
|
|
701
|
+
if ('encrypted_content' in event.delta) {
|
|
702
|
+
block.encrypted_content = event.delta.encrypted_content;
|
|
703
|
+
}
|
|
704
|
+
snapshot.content[event.index] = block;
|
|
703
705
|
}
|
|
704
706
|
break;
|
|
705
707
|
}
|
package/src/lib/beta-parser.ts
CHANGED
|
@@ -8,9 +8,7 @@ import {
|
|
|
8
8
|
BetaTextBlock,
|
|
9
9
|
MessageCreateParams,
|
|
10
10
|
} from '../resources/beta/messages/messages';
|
|
11
|
-
|
|
12
|
-
// vendored from typefest just to make things look a bit nicer on hover
|
|
13
|
-
type Simplify<T> = { [KeyType in keyof T]: T[KeyType] } & {};
|
|
11
|
+
import type { Simplify } from './internal/types';
|
|
14
12
|
|
|
15
13
|
type AutoParseableBetaOutputConfig = Omit<BetaOutputConfig, 'format'> & {
|
|
16
14
|
format?: BetaJSONOutputFormat | AutoParseableBetaOutputFormat<any> | null;
|
package/src/lib/middleware.ts
CHANGED
|
@@ -895,6 +895,11 @@ function applyDelta(
|
|
|
895
895
|
break;
|
|
896
896
|
}
|
|
897
897
|
case 'compaction_delta': {
|
|
898
|
+
// The delta carries the block's final value; the start event is only a null-content shell.
|
|
899
|
+
block.content = delta.content;
|
|
900
|
+
if ('encrypted_content' in delta) {
|
|
901
|
+
block.encrypted_content = delta.encrypted_content;
|
|
902
|
+
}
|
|
898
903
|
break;
|
|
899
904
|
}
|
|
900
905
|
default:
|
|
@@ -933,8 +938,8 @@ function withMiddlewareHeaders(request: APIRequest, betas: readonly AnthropicBet
|
|
|
933
938
|
);
|
|
934
939
|
for (const beta of betas) {
|
|
935
940
|
if (!existing.has(beta)) {
|
|
936
|
-
headers.append('anthropic-beta', beta);
|
|
937
941
|
existing.add(beta);
|
|
942
|
+
headers.set('anthropic-beta', [...existing].join(','));
|
|
938
943
|
}
|
|
939
944
|
}
|
|
940
945
|
headers.set(
|
package/src/lib/parser.ts
CHANGED
|
@@ -8,9 +8,7 @@ import {
|
|
|
8
8
|
TextBlock,
|
|
9
9
|
MessageCreateParams,
|
|
10
10
|
} from '../resources/messages/messages';
|
|
11
|
-
|
|
12
|
-
// vendored from typefest just to make things look a bit nicer on hover
|
|
13
|
-
type Simplify<T> = { [KeyType in keyof T]: T[KeyType] } & {};
|
|
11
|
+
import type { Simplify } from './internal/types';
|
|
14
12
|
|
|
15
13
|
type AutoParseableOutputConfig = Omit<OutputConfig, 'format'> & {
|
|
16
14
|
format?: JSONOutputFormat | AutoParseableOutputFormat<any> | null;
|