@anthropic-ai/sdk 0.100.0 → 0.101.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 +40 -0
- package/_vendor/partial-json-parser/parser.d.mts.map +1 -1
- package/_vendor/partial-json-parser/parser.d.ts.map +1 -1
- package/_vendor/partial-json-parser/parser.js +14 -2
- package/_vendor/partial-json-parser/parser.js.map +1 -1
- package/_vendor/partial-json-parser/parser.mjs +14 -2
- package/_vendor/partial-json-parser/parser.mjs.map +1 -1
- package/client.d.mts +23 -1
- package/client.d.mts.map +1 -1
- package/client.d.ts +23 -1
- package/client.d.ts.map +1 -1
- package/client.js +54 -11
- package/client.js.map +1 -1
- package/client.mjs +54 -11
- package/client.mjs.map +1 -1
- package/core/api.d.mts +11 -0
- package/core/api.d.mts.map +1 -0
- package/core/api.d.ts +11 -0
- package/core/api.d.ts.map +1 -0
- package/core/api.js +3 -0
- package/core/api.js.map +1 -0
- package/core/api.mjs +2 -0
- package/core/api.mjs.map +1 -0
- package/core/error.d.mts +11 -0
- package/core/error.d.mts.map +1 -1
- package/core/error.d.ts +11 -0
- package/core/error.d.ts.map +1 -1
- package/core/error.js +17 -1
- package/core/error.js.map +1 -1
- package/core/error.mjs +15 -0
- package/core/error.mjs.map +1 -1
- package/core/middleware.d.mts +117 -0
- package/core/middleware.d.mts.map +1 -0
- package/core/middleware.d.ts +117 -0
- package/core/middleware.d.ts.map +1 -0
- package/core/middleware.js +167 -0
- package/core/middleware.js.map +1 -0
- package/core/middleware.mjs +161 -0
- package/core/middleware.mjs.map +1 -0
- package/index.d.mts +3 -2
- package/index.d.mts.map +1 -1
- package/index.d.ts +3 -2
- package/index.d.ts.map +1 -1
- package/index.js +2 -1
- package/index.js.map +1 -1
- package/index.mjs +2 -2
- package/index.mjs.map +1 -1
- package/internal/request-options.d.mts +7 -0
- package/internal/request-options.d.mts.map +1 -1
- package/internal/request-options.d.ts +7 -0
- package/internal/request-options.d.ts.map +1 -1
- package/internal/request-options.js.map +1 -1
- package/internal/request-options.mjs.map +1 -1
- package/lib/BetaMessageStream.d.mts.map +1 -1
- package/lib/BetaMessageStream.d.ts.map +1 -1
- package/lib/BetaMessageStream.js +4 -0
- package/lib/BetaMessageStream.js.map +1 -1
- package/lib/BetaMessageStream.mjs +4 -0
- package/lib/BetaMessageStream.mjs.map +1 -1
- package/package.json +1 -1
- package/resources/beta/messages/messages.d.mts.map +1 -1
- package/resources/beta/messages/messages.d.ts.map +1 -1
- package/resources/beta/messages/messages.js +2 -0
- package/resources/beta/messages/messages.js.map +1 -1
- package/resources/beta/messages/messages.mjs +2 -0
- package/resources/beta/messages/messages.mjs.map +1 -1
- package/resources/messages/messages.d.mts.map +1 -1
- package/resources/messages/messages.d.ts.map +1 -1
- package/resources/messages/messages.js +2 -0
- package/resources/messages/messages.js.map +1 -1
- package/resources/messages/messages.mjs +2 -0
- package/resources/messages/messages.mjs.map +1 -1
- package/src/_vendor/partial-json-parser/parser.ts +18 -2
- package/src/client.ts +77 -10
- package/src/core/api.ts +11 -0
- package/src/core/error.ts +15 -0
- package/src/core/middleware.ts +293 -0
- package/src/index.ts +10 -1
- package/src/internal/request-options.ts +8 -0
- package/src/lib/BetaMessageStream.ts +4 -0
- package/src/resources/beta/messages/messages.ts +2 -0
- package/src/resources/messages/messages.ts +2 -0
- 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/core/error.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"error.mjs","sourceRoot":"","sources":["../src/core/error.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"error.mjs","sourceRoot":"","sources":["../src/core/error.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import type { Fetch } from "../internal/builtin-types.mjs";
|
|
2
|
+
import type { FinalRequestOptions } from "../internal/request-options.mjs";
|
|
3
|
+
import type { APIRequest } from "./api.mjs";
|
|
4
|
+
/**
|
|
5
|
+
* Invokes the rest of the middleware chain, ending with the underlying `fetch`.
|
|
6
|
+
*
|
|
7
|
+
* This function can be invoked multiple times.
|
|
8
|
+
*/
|
|
9
|
+
export type MiddlewareNext = (request: APIRequest) => Promise<Response>;
|
|
10
|
+
/**
|
|
11
|
+
* Helpers passed to each middleware alongside `next`, scoped to the request
|
|
12
|
+
* in flight (one context is shared by every middleware in the chain).
|
|
13
|
+
*/
|
|
14
|
+
export interface MiddlewareContext {
|
|
15
|
+
/**
|
|
16
|
+
* The SDK request options the API call in flight was made with: `method`,
|
|
17
|
+
* `path`, the pre-encoded `body`, `stream`, etc.
|
|
18
|
+
*
|
|
19
|
+
* `undefined` when the chain isn't running for an SDK API request, i.e.
|
|
20
|
+
* for credential token-exchange requests.
|
|
21
|
+
*/
|
|
22
|
+
readonly options?: FinalRequestOptions | undefined;
|
|
23
|
+
/**
|
|
24
|
+
* Parse a response body the way the SDK would for the request in flight:
|
|
25
|
+
*
|
|
26
|
+
* - JSON responses are decoded, with the non-enumerable `_request_id`
|
|
27
|
+
* property attached like SDK return values, and anything else resolves
|
|
28
|
+
* to the body text.
|
|
29
|
+
* - For streaming requests ({@link options}`.stream`), resolves immediately
|
|
30
|
+
* with a {@link Stream} reading an independent copy of the response body —
|
|
31
|
+
* iterating it doesn't consume the client's events, and aborting or
|
|
32
|
+
* `break`ing out of it doesn't cancel the underlying request. Each call
|
|
33
|
+
* returns a fresh `Stream` (streams are single-consumer, so they aren't
|
|
34
|
+
* cached). Error (non-2xx) responses parse as JSON/text rather than as a
|
|
35
|
+
* stream, mirroring the SDK's own handling.
|
|
36
|
+
* - For binary requests, resolves with the `Response` itself, unconsumed.
|
|
37
|
+
*
|
|
38
|
+
* Reads through an internal `response.clone()`, so the response stays
|
|
39
|
+
* readable: the client (and any other middleware) can still consume the
|
|
40
|
+
* body afterwards. Non-stream results are cached per `Response` and shared
|
|
41
|
+
* across the middleware chain, so repeated calls cost a single read.
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* ```ts
|
|
45
|
+
* const mw: Middleware = async (request, next, ctx) => {
|
|
46
|
+
* const response = await next(request);
|
|
47
|
+
* const data = await ctx.parse<Message>(response);
|
|
48
|
+
* if (data.type === 'message') console.log(data.usage);
|
|
49
|
+
* return response;
|
|
50
|
+
* };
|
|
51
|
+
* ```
|
|
52
|
+
*/
|
|
53
|
+
parse<T = unknown>(response: Response): Promise<T>;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* A function that wraps each HTTP request made by the client.
|
|
57
|
+
*
|
|
58
|
+
* Middleware may observe or modify the request before calling `next`, observe
|
|
59
|
+
* or replace the response, short-circuit by returning a `Response` without
|
|
60
|
+
* calling `next`, or call `next` multiple times to implement custom retries.
|
|
61
|
+
*
|
|
62
|
+
* Middleware must not consume the body of the `Response` it returns - the
|
|
63
|
+
* client still needs to read it. To inspect the body, use
|
|
64
|
+
* `await ctx.parse(response)` (cached, leaves the body readable) or read a
|
|
65
|
+
* clone (`await response.clone().text()`); to transform it, return a
|
|
66
|
+
* replacement, e.g. `new Response(body, response)`.
|
|
67
|
+
*
|
|
68
|
+
* Middleware runs per HTTP attempt, inside the SDK's retry loop; the attempt
|
|
69
|
+
* number is available via the `X-Stainless-Retry-Count` request header. An
|
|
70
|
+
* error thrown from middleware propagates to the caller as-is.
|
|
71
|
+
*
|
|
72
|
+
* Middleware errors are **not** retried apart from connection-level errors:
|
|
73
|
+
* timeout/abort errors, errors thrown by `fetch()`, and `APIConnectionError`s
|
|
74
|
+
* or `RetryableError`s — thrown directly or present anywhere in an error's
|
|
75
|
+
* `cause` chain. Retryable middleware errors still propagate to the caller
|
|
76
|
+
* as-is once retries are exhausted.
|
|
77
|
+
*
|
|
78
|
+
* @example
|
|
79
|
+
* ```ts
|
|
80
|
+
* const logger: Middleware = async (request, next) => {
|
|
81
|
+
* console.log('->', request.method, request.url);
|
|
82
|
+
* const response = await next(request);
|
|
83
|
+
* console.log('<-', response.status, request.url);
|
|
84
|
+
* return response;
|
|
85
|
+
* };
|
|
86
|
+
*
|
|
87
|
+
* const client = new Anthropic({ middleware: [logger] });
|
|
88
|
+
* ```
|
|
89
|
+
*/
|
|
90
|
+
export type Middleware = (request: APIRequest, next: MiddlewareNext, ctx: MiddlewareContext) => Promise<Response>;
|
|
91
|
+
/** Whether `err` was thrown by the underlying `fetch` rather than by a middleware. */
|
|
92
|
+
export declare function isFetchOriginError(err: unknown): boolean;
|
|
93
|
+
/**
|
|
94
|
+
* Whether an error thrown by middleware should stay on the SDK's
|
|
95
|
+
* connection-error retry policy: fetch-origin, abort, `APIConnectionError`, or
|
|
96
|
+
* `RetryableError` — checked through the error's `cause` chain.
|
|
97
|
+
*/
|
|
98
|
+
export declare function isRetryableError(err: unknown): boolean;
|
|
99
|
+
/**
|
|
100
|
+
* Wraps `fetchFn` so each call runs through `middleware`, keeping the same
|
|
101
|
+
* call signature as `fetch` itself.
|
|
102
|
+
*
|
|
103
|
+
* With no middleware, calls are passed straight through to `fetchFn`.
|
|
104
|
+
* Otherwise the arguments are normalized into an {@link APIRequest} (headers
|
|
105
|
+
* coerced to a `Headers` instance, URL stringified) before entering the
|
|
106
|
+
* chain. The chain is composed per call, so mutations of a `middleware`
|
|
107
|
+
* array are picked up by later requests.
|
|
108
|
+
*
|
|
109
|
+
* `options` — the SDK request options behind this call, when there are any —
|
|
110
|
+
* is surfaced to middleware as `ctx.options` and drives `ctx.parse`.
|
|
111
|
+
*/
|
|
112
|
+
export declare function wrapFetchWithMiddleware(fetchFn: Fetch, middleware: readonly Middleware[], options?: FinalRequestOptions | undefined): Fetch;
|
|
113
|
+
/**
|
|
114
|
+
* Composes `middleware` around `fetchFn` and returns the entry point of the chain.
|
|
115
|
+
*/
|
|
116
|
+
export declare function applyMiddleware(fetchFn: Fetch, middleware: readonly Middleware[], options?: FinalRequestOptions | undefined): MiddlewareNext;
|
|
117
|
+
//# sourceMappingURL=middleware.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"middleware.d.mts","sourceRoot":"","sources":["../src/core/middleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,sCAAkC;AAGvD,OAAO,KAAK,EAAE,mBAAmB,EAAE,wCAAoC;AACvE,OAAO,KAAK,EAAE,UAAU,EAAE,kBAAc;AAIxC;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,EAAE,UAAU,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;AAExE;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;;;;OAMG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,mBAAmB,GAAG,SAAS,CAAC;IAEnD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;IACH,KAAK,CAAC,CAAC,GAAG,OAAO,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CACpD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,MAAM,MAAM,UAAU,GAAG,CACvB,OAAO,EAAE,UAAU,EACnB,IAAI,EAAE,cAAc,EACpB,GAAG,EAAE,iBAAiB,KACnB,OAAO,CAAC,QAAQ,CAAC,CAAC;AAWvB,sFAAsF;AACtF,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAExD;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAetD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,KAAK,EACd,UAAU,EAAE,SAAS,UAAU,EAAE,EACjC,OAAO,CAAC,EAAE,mBAAmB,GAAG,SAAS,GACxC,KAAK,CA6BP;AA6ED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,KAAK,EACd,UAAU,EAAE,SAAS,UAAU,EAAE,EACjC,OAAO,CAAC,EAAE,mBAAmB,GAAG,SAAS,GACxC,cAAc,CAuBhB"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import type { Fetch } from "../internal/builtin-types.js";
|
|
2
|
+
import type { FinalRequestOptions } from "../internal/request-options.js";
|
|
3
|
+
import type { APIRequest } from "./api.js";
|
|
4
|
+
/**
|
|
5
|
+
* Invokes the rest of the middleware chain, ending with the underlying `fetch`.
|
|
6
|
+
*
|
|
7
|
+
* This function can be invoked multiple times.
|
|
8
|
+
*/
|
|
9
|
+
export type MiddlewareNext = (request: APIRequest) => Promise<Response>;
|
|
10
|
+
/**
|
|
11
|
+
* Helpers passed to each middleware alongside `next`, scoped to the request
|
|
12
|
+
* in flight (one context is shared by every middleware in the chain).
|
|
13
|
+
*/
|
|
14
|
+
export interface MiddlewareContext {
|
|
15
|
+
/**
|
|
16
|
+
* The SDK request options the API call in flight was made with: `method`,
|
|
17
|
+
* `path`, the pre-encoded `body`, `stream`, etc.
|
|
18
|
+
*
|
|
19
|
+
* `undefined` when the chain isn't running for an SDK API request, i.e.
|
|
20
|
+
* for credential token-exchange requests.
|
|
21
|
+
*/
|
|
22
|
+
readonly options?: FinalRequestOptions | undefined;
|
|
23
|
+
/**
|
|
24
|
+
* Parse a response body the way the SDK would for the request in flight:
|
|
25
|
+
*
|
|
26
|
+
* - JSON responses are decoded, with the non-enumerable `_request_id`
|
|
27
|
+
* property attached like SDK return values, and anything else resolves
|
|
28
|
+
* to the body text.
|
|
29
|
+
* - For streaming requests ({@link options}`.stream`), resolves immediately
|
|
30
|
+
* with a {@link Stream} reading an independent copy of the response body —
|
|
31
|
+
* iterating it doesn't consume the client's events, and aborting or
|
|
32
|
+
* `break`ing out of it doesn't cancel the underlying request. Each call
|
|
33
|
+
* returns a fresh `Stream` (streams are single-consumer, so they aren't
|
|
34
|
+
* cached). Error (non-2xx) responses parse as JSON/text rather than as a
|
|
35
|
+
* stream, mirroring the SDK's own handling.
|
|
36
|
+
* - For binary requests, resolves with the `Response` itself, unconsumed.
|
|
37
|
+
*
|
|
38
|
+
* Reads through an internal `response.clone()`, so the response stays
|
|
39
|
+
* readable: the client (and any other middleware) can still consume the
|
|
40
|
+
* body afterwards. Non-stream results are cached per `Response` and shared
|
|
41
|
+
* across the middleware chain, so repeated calls cost a single read.
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* ```ts
|
|
45
|
+
* const mw: Middleware = async (request, next, ctx) => {
|
|
46
|
+
* const response = await next(request);
|
|
47
|
+
* const data = await ctx.parse<Message>(response);
|
|
48
|
+
* if (data.type === 'message') console.log(data.usage);
|
|
49
|
+
* return response;
|
|
50
|
+
* };
|
|
51
|
+
* ```
|
|
52
|
+
*/
|
|
53
|
+
parse<T = unknown>(response: Response): Promise<T>;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* A function that wraps each HTTP request made by the client.
|
|
57
|
+
*
|
|
58
|
+
* Middleware may observe or modify the request before calling `next`, observe
|
|
59
|
+
* or replace the response, short-circuit by returning a `Response` without
|
|
60
|
+
* calling `next`, or call `next` multiple times to implement custom retries.
|
|
61
|
+
*
|
|
62
|
+
* Middleware must not consume the body of the `Response` it returns - the
|
|
63
|
+
* client still needs to read it. To inspect the body, use
|
|
64
|
+
* `await ctx.parse(response)` (cached, leaves the body readable) or read a
|
|
65
|
+
* clone (`await response.clone().text()`); to transform it, return a
|
|
66
|
+
* replacement, e.g. `new Response(body, response)`.
|
|
67
|
+
*
|
|
68
|
+
* Middleware runs per HTTP attempt, inside the SDK's retry loop; the attempt
|
|
69
|
+
* number is available via the `X-Stainless-Retry-Count` request header. An
|
|
70
|
+
* error thrown from middleware propagates to the caller as-is.
|
|
71
|
+
*
|
|
72
|
+
* Middleware errors are **not** retried apart from connection-level errors:
|
|
73
|
+
* timeout/abort errors, errors thrown by `fetch()`, and `APIConnectionError`s
|
|
74
|
+
* or `RetryableError`s — thrown directly or present anywhere in an error's
|
|
75
|
+
* `cause` chain. Retryable middleware errors still propagate to the caller
|
|
76
|
+
* as-is once retries are exhausted.
|
|
77
|
+
*
|
|
78
|
+
* @example
|
|
79
|
+
* ```ts
|
|
80
|
+
* const logger: Middleware = async (request, next) => {
|
|
81
|
+
* console.log('->', request.method, request.url);
|
|
82
|
+
* const response = await next(request);
|
|
83
|
+
* console.log('<-', response.status, request.url);
|
|
84
|
+
* return response;
|
|
85
|
+
* };
|
|
86
|
+
*
|
|
87
|
+
* const client = new Anthropic({ middleware: [logger] });
|
|
88
|
+
* ```
|
|
89
|
+
*/
|
|
90
|
+
export type Middleware = (request: APIRequest, next: MiddlewareNext, ctx: MiddlewareContext) => Promise<Response>;
|
|
91
|
+
/** Whether `err` was thrown by the underlying `fetch` rather than by a middleware. */
|
|
92
|
+
export declare function isFetchOriginError(err: unknown): boolean;
|
|
93
|
+
/**
|
|
94
|
+
* Whether an error thrown by middleware should stay on the SDK's
|
|
95
|
+
* connection-error retry policy: fetch-origin, abort, `APIConnectionError`, or
|
|
96
|
+
* `RetryableError` — checked through the error's `cause` chain.
|
|
97
|
+
*/
|
|
98
|
+
export declare function isRetryableError(err: unknown): boolean;
|
|
99
|
+
/**
|
|
100
|
+
* Wraps `fetchFn` so each call runs through `middleware`, keeping the same
|
|
101
|
+
* call signature as `fetch` itself.
|
|
102
|
+
*
|
|
103
|
+
* With no middleware, calls are passed straight through to `fetchFn`.
|
|
104
|
+
* Otherwise the arguments are normalized into an {@link APIRequest} (headers
|
|
105
|
+
* coerced to a `Headers` instance, URL stringified) before entering the
|
|
106
|
+
* chain. The chain is composed per call, so mutations of a `middleware`
|
|
107
|
+
* array are picked up by later requests.
|
|
108
|
+
*
|
|
109
|
+
* `options` — the SDK request options behind this call, when there are any —
|
|
110
|
+
* is surfaced to middleware as `ctx.options` and drives `ctx.parse`.
|
|
111
|
+
*/
|
|
112
|
+
export declare function wrapFetchWithMiddleware(fetchFn: Fetch, middleware: readonly Middleware[], options?: FinalRequestOptions | undefined): Fetch;
|
|
113
|
+
/**
|
|
114
|
+
* Composes `middleware` around `fetchFn` and returns the entry point of the chain.
|
|
115
|
+
*/
|
|
116
|
+
export declare function applyMiddleware(fetchFn: Fetch, middleware: readonly Middleware[], options?: FinalRequestOptions | undefined): MiddlewareNext;
|
|
117
|
+
//# sourceMappingURL=middleware.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../src/core/middleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,qCAAkC;AAGvD,OAAO,KAAK,EAAE,mBAAmB,EAAE,uCAAoC;AACvE,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAc;AAIxC;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,EAAE,UAAU,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;AAExE;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;;;;OAMG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,mBAAmB,GAAG,SAAS,CAAC;IAEnD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;IACH,KAAK,CAAC,CAAC,GAAG,OAAO,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CACpD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,MAAM,MAAM,UAAU,GAAG,CACvB,OAAO,EAAE,UAAU,EACnB,IAAI,EAAE,cAAc,EACpB,GAAG,EAAE,iBAAiB,KACnB,OAAO,CAAC,QAAQ,CAAC,CAAC;AAWvB,sFAAsF;AACtF,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAExD;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAetD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,KAAK,EACd,UAAU,EAAE,SAAS,UAAU,EAAE,EACjC,OAAO,CAAC,EAAE,mBAAmB,GAAG,SAAS,GACxC,KAAK,CA6BP;AA6ED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,KAAK,EACd,UAAU,EAAE,SAAS,UAAU,EAAE,EACjC,OAAO,CAAC,EAAE,mBAAmB,GAAG,SAAS,GACxC,cAAc,CAuBhB"}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isFetchOriginError = isFetchOriginError;
|
|
4
|
+
exports.isRetryableError = isRetryableError;
|
|
5
|
+
exports.wrapFetchWithMiddleware = wrapFetchWithMiddleware;
|
|
6
|
+
exports.applyMiddleware = applyMiddleware;
|
|
7
|
+
const errors_1 = require("../internal/errors.js");
|
|
8
|
+
const parse_1 = require("../internal/parse.js");
|
|
9
|
+
const error_1 = require("./error.js");
|
|
10
|
+
const streaming_1 = require("./streaming.js");
|
|
11
|
+
/**
|
|
12
|
+
* Errors thrown by the underlying `fetch`, as opposed to by a middleware.
|
|
13
|
+
*
|
|
14
|
+
* Tracked so the client can apply its connection-error retry policy to
|
|
15
|
+
* transport failures while letting errors thrown by middleware propagate to
|
|
16
|
+
* the caller untouched.
|
|
17
|
+
*/
|
|
18
|
+
const fetchOriginErrors = new WeakSet();
|
|
19
|
+
/** Whether `err` was thrown by the underlying `fetch` rather than by a middleware. */
|
|
20
|
+
function isFetchOriginError(err) {
|
|
21
|
+
return typeof err === 'object' && err !== null && fetchOriginErrors.has(err);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Whether an error thrown by middleware should stay on the SDK's
|
|
25
|
+
* connection-error retry policy: fetch-origin, abort, `APIConnectionError`, or
|
|
26
|
+
* `RetryableError` — checked through the error's `cause` chain.
|
|
27
|
+
*/
|
|
28
|
+
function isRetryableError(err) {
|
|
29
|
+
const seen = new Set(); // guard against `cause` cycles
|
|
30
|
+
while (typeof err === 'object' && err !== null && !seen.has(err)) {
|
|
31
|
+
seen.add(err);
|
|
32
|
+
if (isFetchOriginError(err) ||
|
|
33
|
+
(0, errors_1.isAbortError)(err) ||
|
|
34
|
+
err instanceof error_1.APIConnectionError ||
|
|
35
|
+
err instanceof error_1.RetryableError) {
|
|
36
|
+
return true;
|
|
37
|
+
}
|
|
38
|
+
err = err.cause;
|
|
39
|
+
}
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Wraps `fetchFn` so each call runs through `middleware`, keeping the same
|
|
44
|
+
* call signature as `fetch` itself.
|
|
45
|
+
*
|
|
46
|
+
* With no middleware, calls are passed straight through to `fetchFn`.
|
|
47
|
+
* Otherwise the arguments are normalized into an {@link APIRequest} (headers
|
|
48
|
+
* coerced to a `Headers` instance, URL stringified) before entering the
|
|
49
|
+
* chain. The chain is composed per call, so mutations of a `middleware`
|
|
50
|
+
* array are picked up by later requests.
|
|
51
|
+
*
|
|
52
|
+
* `options` — the SDK request options behind this call, when there are any —
|
|
53
|
+
* is surfaced to middleware as `ctx.options` and drives `ctx.parse`.
|
|
54
|
+
*/
|
|
55
|
+
function wrapFetchWithMiddleware(fetchFn, middleware, options) {
|
|
56
|
+
return async (url, init = {}) => {
|
|
57
|
+
if (middleware.length === 0) {
|
|
58
|
+
// use undefined this binding; fetch errors if bound to something else in browser/cloudflare
|
|
59
|
+
return fetchFn.call(undefined, url, init);
|
|
60
|
+
}
|
|
61
|
+
const headers = init.headers instanceof Headers ? init.headers : new Headers(init.headers);
|
|
62
|
+
const response = await applyMiddleware(fetchFn, middleware, options)({
|
|
63
|
+
...init,
|
|
64
|
+
headers,
|
|
65
|
+
url: typeof url === 'string' ? url
|
|
66
|
+
: url instanceof URL ? url.href
|
|
67
|
+
: url.url,
|
|
68
|
+
});
|
|
69
|
+
// Catch a footgun before the client tries to read the body itself and
|
|
70
|
+
// fails with a confusing low-level stream error.
|
|
71
|
+
if (response.bodyUsed || response.body?.locked) {
|
|
72
|
+
throw new error_1.AnthropicError('middleware consumed the response body; use response.clone() to inspect it, ' +
|
|
73
|
+
'or return new Response(body, response) to consume and replace it');
|
|
74
|
+
}
|
|
75
|
+
return response;
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Creates the {@link MiddlewareContext} shared by every middleware in one chain.
|
|
80
|
+
*/
|
|
81
|
+
function createMiddlewareContext(options) {
|
|
82
|
+
// Keyed on the Response so each `next()` call's response (e.g. with custom
|
|
83
|
+
// retries, or a middleware swapping in a replacement) parses independently,
|
|
84
|
+
// while several middleware parsing the same response share a single read.
|
|
85
|
+
const cache = new WeakMap();
|
|
86
|
+
return {
|
|
87
|
+
options,
|
|
88
|
+
parse(response) {
|
|
89
|
+
// Streams are single-consumer, so caching one would hand later callers
|
|
90
|
+
// an already-consumed stream; every call gets a fresh clone-backed one.
|
|
91
|
+
if (options?.stream && response.ok) {
|
|
92
|
+
return parseMiddlewareResponse(response, options);
|
|
93
|
+
}
|
|
94
|
+
let parsed = cache.get(response);
|
|
95
|
+
if (!parsed) {
|
|
96
|
+
parsed = parseMiddlewareResponse(response, options);
|
|
97
|
+
cache.set(response, parsed);
|
|
98
|
+
}
|
|
99
|
+
return parsed;
|
|
100
|
+
},
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Mirrors the client's own response parsing (`defaultParseResponse` in
|
|
105
|
+
* `internal/parse.ts`), reading through a clone so the body stays available
|
|
106
|
+
* to the rest of the chain and the client itself.
|
|
107
|
+
*/
|
|
108
|
+
async function parseMiddlewareResponse(response, options) {
|
|
109
|
+
if (response.bodyUsed || response.body?.locked) {
|
|
110
|
+
throw new error_1.AnthropicError('cannot ctx.parse() a response whose body was already consumed; ' +
|
|
111
|
+
'call ctx.parse() instead of reading the body, or read via response.clone()');
|
|
112
|
+
}
|
|
113
|
+
// Error responses parse as JSON/text below — the SDK only stream-parses
|
|
114
|
+
// successful responses, and middleware typically wants the error body.
|
|
115
|
+
if (options?.stream && response.ok) {
|
|
116
|
+
// A fresh controller rather than the request's own: aborting (or
|
|
117
|
+
// `break`ing out of) the middleware's stream must not cancel the
|
|
118
|
+
// in-flight request the client is still reading.
|
|
119
|
+
const streamClass = options.__streamClass ?? streaming_1.Stream;
|
|
120
|
+
return streamClass.fromSSEResponse(response.clone(), new AbortController());
|
|
121
|
+
}
|
|
122
|
+
// fetch refuses to read the body when the status code is 204.
|
|
123
|
+
if (response.status === 204) {
|
|
124
|
+
return null;
|
|
125
|
+
}
|
|
126
|
+
if (options?.__binaryResponse) {
|
|
127
|
+
return response;
|
|
128
|
+
}
|
|
129
|
+
const contentType = response.headers.get('content-type');
|
|
130
|
+
const mediaType = contentType?.split(';')[0]?.trim();
|
|
131
|
+
const isJSON = mediaType?.includes('application/json') || mediaType?.endsWith('+json');
|
|
132
|
+
if (isJSON) {
|
|
133
|
+
if (response.headers.get('content-length') === '0') {
|
|
134
|
+
// if there is no content we can't do anything
|
|
135
|
+
return undefined;
|
|
136
|
+
}
|
|
137
|
+
return (0, parse_1.addRequestID)(await response.clone().json(), response);
|
|
138
|
+
}
|
|
139
|
+
return await response.clone().text();
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Composes `middleware` around `fetchFn` and returns the entry point of the chain.
|
|
143
|
+
*/
|
|
144
|
+
function applyMiddleware(fetchFn, middleware, options) {
|
|
145
|
+
// use undefined this binding; fetch errors if bound to something else in browser/cloudflare
|
|
146
|
+
let next = async ({ url, ...init }) => {
|
|
147
|
+
try {
|
|
148
|
+
return await fetchFn.call(undefined, url, init);
|
|
149
|
+
}
|
|
150
|
+
catch (err) {
|
|
151
|
+
// Brand the error as fetch-origin, normalizing with `castToError` first since a
|
|
152
|
+
// WeakSet can't hold primitives and the brand must be on the same object the
|
|
153
|
+
// client's own `castToError` will later pass through.
|
|
154
|
+
const error = (0, errors_1.castToError)(err);
|
|
155
|
+
fetchOriginErrors.add(error);
|
|
156
|
+
throw error;
|
|
157
|
+
}
|
|
158
|
+
};
|
|
159
|
+
const ctx = createMiddlewareContext(options);
|
|
160
|
+
for (let i = middleware.length - 1; i >= 0; i--) {
|
|
161
|
+
const mw = middleware[i];
|
|
162
|
+
const nextInner = next;
|
|
163
|
+
next = async (request) => mw(request, nextInner, ctx);
|
|
164
|
+
}
|
|
165
|
+
return next;
|
|
166
|
+
}
|
|
167
|
+
//# sourceMappingURL=middleware.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"middleware.js","sourceRoot":"","sources":["../src/core/middleware.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import { castToError, isAbortError } from "../internal/errors.mjs";
|
|
2
|
+
import { addRequestID } from "../internal/parse.mjs";
|
|
3
|
+
import { AnthropicError, APIConnectionError, RetryableError } from "./error.mjs";
|
|
4
|
+
import { Stream } from "./streaming.mjs";
|
|
5
|
+
/**
|
|
6
|
+
* Errors thrown by the underlying `fetch`, as opposed to by a middleware.
|
|
7
|
+
*
|
|
8
|
+
* Tracked so the client can apply its connection-error retry policy to
|
|
9
|
+
* transport failures while letting errors thrown by middleware propagate to
|
|
10
|
+
* the caller untouched.
|
|
11
|
+
*/
|
|
12
|
+
const fetchOriginErrors = new WeakSet();
|
|
13
|
+
/** Whether `err` was thrown by the underlying `fetch` rather than by a middleware. */
|
|
14
|
+
export function isFetchOriginError(err) {
|
|
15
|
+
return typeof err === 'object' && err !== null && fetchOriginErrors.has(err);
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Whether an error thrown by middleware should stay on the SDK's
|
|
19
|
+
* connection-error retry policy: fetch-origin, abort, `APIConnectionError`, or
|
|
20
|
+
* `RetryableError` — checked through the error's `cause` chain.
|
|
21
|
+
*/
|
|
22
|
+
export function isRetryableError(err) {
|
|
23
|
+
const seen = new Set(); // guard against `cause` cycles
|
|
24
|
+
while (typeof err === 'object' && err !== null && !seen.has(err)) {
|
|
25
|
+
seen.add(err);
|
|
26
|
+
if (isFetchOriginError(err) ||
|
|
27
|
+
isAbortError(err) ||
|
|
28
|
+
err instanceof APIConnectionError ||
|
|
29
|
+
err instanceof RetryableError) {
|
|
30
|
+
return true;
|
|
31
|
+
}
|
|
32
|
+
err = err.cause;
|
|
33
|
+
}
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Wraps `fetchFn` so each call runs through `middleware`, keeping the same
|
|
38
|
+
* call signature as `fetch` itself.
|
|
39
|
+
*
|
|
40
|
+
* With no middleware, calls are passed straight through to `fetchFn`.
|
|
41
|
+
* Otherwise the arguments are normalized into an {@link APIRequest} (headers
|
|
42
|
+
* coerced to a `Headers` instance, URL stringified) before entering the
|
|
43
|
+
* chain. The chain is composed per call, so mutations of a `middleware`
|
|
44
|
+
* array are picked up by later requests.
|
|
45
|
+
*
|
|
46
|
+
* `options` — the SDK request options behind this call, when there are any —
|
|
47
|
+
* is surfaced to middleware as `ctx.options` and drives `ctx.parse`.
|
|
48
|
+
*/
|
|
49
|
+
export function wrapFetchWithMiddleware(fetchFn, middleware, options) {
|
|
50
|
+
return async (url, init = {}) => {
|
|
51
|
+
if (middleware.length === 0) {
|
|
52
|
+
// use undefined this binding; fetch errors if bound to something else in browser/cloudflare
|
|
53
|
+
return fetchFn.call(undefined, url, init);
|
|
54
|
+
}
|
|
55
|
+
const headers = init.headers instanceof Headers ? init.headers : new Headers(init.headers);
|
|
56
|
+
const response = await applyMiddleware(fetchFn, middleware, options)({
|
|
57
|
+
...init,
|
|
58
|
+
headers,
|
|
59
|
+
url: typeof url === 'string' ? url
|
|
60
|
+
: url instanceof URL ? url.href
|
|
61
|
+
: url.url,
|
|
62
|
+
});
|
|
63
|
+
// Catch a footgun before the client tries to read the body itself and
|
|
64
|
+
// fails with a confusing low-level stream error.
|
|
65
|
+
if (response.bodyUsed || response.body?.locked) {
|
|
66
|
+
throw new AnthropicError('middleware consumed the response body; use response.clone() to inspect it, ' +
|
|
67
|
+
'or return new Response(body, response) to consume and replace it');
|
|
68
|
+
}
|
|
69
|
+
return response;
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Creates the {@link MiddlewareContext} shared by every middleware in one chain.
|
|
74
|
+
*/
|
|
75
|
+
function createMiddlewareContext(options) {
|
|
76
|
+
// Keyed on the Response so each `next()` call's response (e.g. with custom
|
|
77
|
+
// retries, or a middleware swapping in a replacement) parses independently,
|
|
78
|
+
// while several middleware parsing the same response share a single read.
|
|
79
|
+
const cache = new WeakMap();
|
|
80
|
+
return {
|
|
81
|
+
options,
|
|
82
|
+
parse(response) {
|
|
83
|
+
// Streams are single-consumer, so caching one would hand later callers
|
|
84
|
+
// an already-consumed stream; every call gets a fresh clone-backed one.
|
|
85
|
+
if (options?.stream && response.ok) {
|
|
86
|
+
return parseMiddlewareResponse(response, options);
|
|
87
|
+
}
|
|
88
|
+
let parsed = cache.get(response);
|
|
89
|
+
if (!parsed) {
|
|
90
|
+
parsed = parseMiddlewareResponse(response, options);
|
|
91
|
+
cache.set(response, parsed);
|
|
92
|
+
}
|
|
93
|
+
return parsed;
|
|
94
|
+
},
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Mirrors the client's own response parsing (`defaultParseResponse` in
|
|
99
|
+
* `internal/parse.ts`), reading through a clone so the body stays available
|
|
100
|
+
* to the rest of the chain and the client itself.
|
|
101
|
+
*/
|
|
102
|
+
async function parseMiddlewareResponse(response, options) {
|
|
103
|
+
if (response.bodyUsed || response.body?.locked) {
|
|
104
|
+
throw new AnthropicError('cannot ctx.parse() a response whose body was already consumed; ' +
|
|
105
|
+
'call ctx.parse() instead of reading the body, or read via response.clone()');
|
|
106
|
+
}
|
|
107
|
+
// Error responses parse as JSON/text below — the SDK only stream-parses
|
|
108
|
+
// successful responses, and middleware typically wants the error body.
|
|
109
|
+
if (options?.stream && response.ok) {
|
|
110
|
+
// A fresh controller rather than the request's own: aborting (or
|
|
111
|
+
// `break`ing out of) the middleware's stream must not cancel the
|
|
112
|
+
// in-flight request the client is still reading.
|
|
113
|
+
const streamClass = options.__streamClass ?? Stream;
|
|
114
|
+
return streamClass.fromSSEResponse(response.clone(), new AbortController());
|
|
115
|
+
}
|
|
116
|
+
// fetch refuses to read the body when the status code is 204.
|
|
117
|
+
if (response.status === 204) {
|
|
118
|
+
return null;
|
|
119
|
+
}
|
|
120
|
+
if (options?.__binaryResponse) {
|
|
121
|
+
return response;
|
|
122
|
+
}
|
|
123
|
+
const contentType = response.headers.get('content-type');
|
|
124
|
+
const mediaType = contentType?.split(';')[0]?.trim();
|
|
125
|
+
const isJSON = mediaType?.includes('application/json') || mediaType?.endsWith('+json');
|
|
126
|
+
if (isJSON) {
|
|
127
|
+
if (response.headers.get('content-length') === '0') {
|
|
128
|
+
// if there is no content we can't do anything
|
|
129
|
+
return undefined;
|
|
130
|
+
}
|
|
131
|
+
return addRequestID(await response.clone().json(), response);
|
|
132
|
+
}
|
|
133
|
+
return await response.clone().text();
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Composes `middleware` around `fetchFn` and returns the entry point of the chain.
|
|
137
|
+
*/
|
|
138
|
+
export function applyMiddleware(fetchFn, middleware, options) {
|
|
139
|
+
// use undefined this binding; fetch errors if bound to something else in browser/cloudflare
|
|
140
|
+
let next = async ({ url, ...init }) => {
|
|
141
|
+
try {
|
|
142
|
+
return await fetchFn.call(undefined, url, init);
|
|
143
|
+
}
|
|
144
|
+
catch (err) {
|
|
145
|
+
// Brand the error as fetch-origin, normalizing with `castToError` first since a
|
|
146
|
+
// WeakSet can't hold primitives and the brand must be on the same object the
|
|
147
|
+
// client's own `castToError` will later pass through.
|
|
148
|
+
const error = castToError(err);
|
|
149
|
+
fetchOriginErrors.add(error);
|
|
150
|
+
throw error;
|
|
151
|
+
}
|
|
152
|
+
};
|
|
153
|
+
const ctx = createMiddlewareContext(options);
|
|
154
|
+
for (let i = middleware.length - 1; i >= 0; i--) {
|
|
155
|
+
const mw = middleware[i];
|
|
156
|
+
const nextInner = next;
|
|
157
|
+
next = async (request) => mw(request, nextInner, ctx);
|
|
158
|
+
}
|
|
159
|
+
return next;
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=middleware.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"middleware.mjs","sourceRoot":"","sources":["../src/core/middleware.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,+BAA2B;AAC/D,OAAO,EAAE,YAAY,EAAE,8BAA0B;AAGjD,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,cAAc,EAAE,oBAAgB;AAC7E,OAAO,EAAE,MAAM,EAAE,wBAAoB;AAiGrC;;;;;;GAMG;AACH,MAAM,iBAAiB,GAAG,IAAI,OAAO,EAAU,CAAC;AAEhD,sFAAsF;AACtF,MAAM,UAAU,kBAAkB,CAAC,GAAY;IAC7C,OAAO,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,IAAI,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC/E,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAY;IAC3C,MAAM,IAAI,GAAG,IAAI,GAAG,EAAW,CAAC,CAAC,+BAA+B;IAChE,OAAO,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QACjE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACd,IACE,kBAAkB,CAAC,GAAG,CAAC;YACvB,YAAY,CAAC,GAAG,CAAC;YACjB,GAAG,YAAY,kBAAkB;YACjC,GAAG,YAAY,cAAc,EAC7B,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,GAAG,GAAI,GAA2B,CAAC,KAAK,CAAC;IAC3C,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,uBAAuB,CACrC,OAAc,EACd,UAAiC,EACjC,OAAyC;IAEzC,OAAO,KAAK,EAAE,GAAG,EAAE,IAAI,GAAG,EAAE,EAAE,EAAE;QAC9B,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,4FAA4F;YAC5F,OAAO,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QAC5C,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,YAAY,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC3F,MAAM,QAAQ,GAAG,MAAM,eAAe,CACpC,OAAO,EACP,UAAU,EACV,OAAO,CACR,CAAC;YACA,GAAG,IAAI;YACP,OAAO;YACP,GAAG,EACD,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG;gBAC7B,CAAC,CAAC,GAAG,YAAY,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI;oBAC/B,CAAC,CAAC,GAAG,CAAC,GAAG;SACZ,CAAC,CAAC;QACH,sEAAsE;QACtE,iDAAiD;QACjD,IAAI,QAAQ,CAAC,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;YAC/C,MAAM,IAAI,cAAc,CACtB,6EAA6E;gBAC3E,kEAAkE,CACrE,CAAC;QACJ,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,uBAAuB,CAAC,OAAwC;IACvE,2EAA2E;IAC3E,4EAA4E;IAC5E,0EAA0E;IAC1E,MAAM,KAAK,GAAG,IAAI,OAAO,EAA8B,CAAC;IACxD,OAAO;QACL,OAAO;QACP,KAAK,CAAI,QAAkB;YACzB,uEAAuE;YACvE,wEAAwE;YACxE,IAAI,OAAO,EAAE,MAAM,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACnC,OAAO,uBAAuB,CAAC,QAAQ,EAAE,OAAO,CAAe,CAAC;YAClE,CAAC;YACD,IAAI,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACjC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,GAAG,uBAAuB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBACpD,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC9B,CAAC;YACD,OAAO,MAAoB,CAAC;QAC9B,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,uBAAuB,CACpC,QAAkB,EAClB,OAAwC;IAExC,IAAI,QAAQ,CAAC,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;QAC/C,MAAM,IAAI,cAAc,CACtB,iEAAiE;YAC/D,4EAA4E,CAC/E,CAAC;IACJ,CAAC;IAED,wEAAwE;IACxE,uEAAuE;IACvE,IAAI,OAAO,EAAE,MAAM,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;QACnC,iEAAiE;QACjE,iEAAiE;QACjE,iDAAiD;QACjD,MAAM,WAAW,GAAG,OAAO,CAAC,aAAa,IAAI,MAAM,CAAC;QACpD,OAAO,WAAW,CAAC,eAAe,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,IAAI,eAAe,EAAE,CAAC,CAAC;IAC9E,CAAC;IAED,8DAA8D;IAC9D,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,OAAO,EAAE,gBAAgB,EAAE,CAAC;QAC9B,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IACzD,MAAM,SAAS,GAAG,WAAW,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;IACrD,MAAM,MAAM,GAAG,SAAS,EAAE,QAAQ,CAAC,kBAAkB,CAAC,IAAI,SAAS,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;IACvF,IAAI,MAAM,EAAE,CAAC;QACX,IAAI,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,KAAK,GAAG,EAAE,CAAC;YACnD,8CAA8C;YAC9C,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,YAAY,CAAC,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,QAAQ,CAAC,CAAC;IAC/D,CAAC;IAED,OAAO,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC;AACvC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAC7B,OAAc,EACd,UAAiC,EACjC,OAAyC;IAEzC,4FAA4F;IAC5F,IAAI,IAAI,GAAmB,KAAK,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE;QACpD,IAAI,CAAC;YACH,OAAO,MAAM,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QAClD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,gFAAgF;YAChF,6EAA6E;YAC7E,sDAAsD;YACtD,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;YAC/B,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAC7B,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,GAAG,GAAG,uBAAuB,CAAC,OAAO,CAAC,CAAC;IAC7C,KAAK,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAChD,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC,CAAE,CAAC;QAC1B,MAAM,SAAS,GAAG,IAAI,CAAC;QACvB,IAAI,GAAG,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;IACxD,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
|
package/index.d.mts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
export { Anthropic as default } from "./client.mjs";
|
|
2
2
|
export { type Uploadable, toFile } from "./core/uploads.mjs";
|
|
3
3
|
export { APIPromise } from "./core/api-promise.mjs";
|
|
4
|
-
export {
|
|
4
|
+
export { type Middleware, type MiddlewareContext, type MiddlewareNext } from "./core/middleware.mjs";
|
|
5
|
+
export { BaseAnthropic, Anthropic, type APIRequest, type ClientOptions, HUMAN_PROMPT, AI_PROMPT, } from "./client.mjs";
|
|
5
6
|
export { PagePromise } from "./core/pagination.mjs";
|
|
6
|
-
export { AnthropicError, APIError, APIConnectionError, APIConnectionTimeoutError, APIUserAbortError, NotFoundError, ConflictError, RateLimitError, BadRequestError, AuthenticationError, InternalServerError, PermissionDeniedError, UnprocessableEntityError, } from "./core/error.mjs";
|
|
7
|
+
export { AnthropicError, APIError, APIConnectionError, APIConnectionTimeoutError, APIUserAbortError, RetryableError, NotFoundError, ConflictError, RateLimitError, BadRequestError, AuthenticationError, InternalServerError, PermissionDeniedError, UnprocessableEntityError, } from "./core/error.mjs";
|
|
7
8
|
export type { AutoParseableOutputFormat, ParsedMessage, ParsedContentBlock, ParseableMessageCreateParams, ExtractParsedContentFromParams, } from "./lib/parser.mjs";
|
|
8
9
|
//# sourceMappingURL=index.d.mts.map
|
package/index.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","sourceRoot":"","sources":["src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,IAAI,OAAO,EAAE,qBAAiB;AAEhD,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,EAAE,2BAAuB;AACzD,OAAO,EAAE,UAAU,EAAE,+BAA2B;AAChD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.mts","sourceRoot":"","sources":["src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,IAAI,OAAO,EAAE,qBAAiB;AAEhD,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,EAAE,2BAAuB;AACzD,OAAO,EAAE,UAAU,EAAE,+BAA2B;AAChD,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,iBAAiB,EAAE,KAAK,cAAc,EAAE,8BAA0B;AACjG,OAAO,EACL,aAAa,EACb,SAAS,EACT,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,YAAY,EACZ,SAAS,GACV,qBAAiB;AAClB,OAAO,EAAE,WAAW,EAAE,8BAA0B;AAChD,OAAO,EACL,cAAc,EACd,QAAQ,EACR,kBAAkB,EAClB,yBAAyB,EACzB,iBAAiB,EACjB,cAAc,EACd,aAAa,EACb,aAAa,EACb,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACrB,wBAAwB,GACzB,yBAAqB;AAEtB,YAAY,EACV,yBAAyB,EACzB,aAAa,EACb,kBAAkB,EAClB,4BAA4B,EAC5B,8BAA8B,GAC/B,yBAAqB"}
|
package/index.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
export { Anthropic as default } from "./client.js";
|
|
2
2
|
export { type Uploadable, toFile } from "./core/uploads.js";
|
|
3
3
|
export { APIPromise } from "./core/api-promise.js";
|
|
4
|
-
export {
|
|
4
|
+
export { type Middleware, type MiddlewareContext, type MiddlewareNext } from "./core/middleware.js";
|
|
5
|
+
export { BaseAnthropic, Anthropic, type APIRequest, type ClientOptions, HUMAN_PROMPT, AI_PROMPT, } from "./client.js";
|
|
5
6
|
export { PagePromise } from "./core/pagination.js";
|
|
6
|
-
export { AnthropicError, APIError, APIConnectionError, APIConnectionTimeoutError, APIUserAbortError, NotFoundError, ConflictError, RateLimitError, BadRequestError, AuthenticationError, InternalServerError, PermissionDeniedError, UnprocessableEntityError, } from "./core/error.js";
|
|
7
|
+
export { AnthropicError, APIError, APIConnectionError, APIConnectionTimeoutError, APIUserAbortError, RetryableError, NotFoundError, ConflictError, RateLimitError, BadRequestError, AuthenticationError, InternalServerError, PermissionDeniedError, UnprocessableEntityError, } from "./core/error.js";
|
|
7
8
|
export type { AutoParseableOutputFormat, ParsedMessage, ParsedContentBlock, ParseableMessageCreateParams, ExtractParsedContentFromParams, } from "./lib/parser.js";
|
|
8
9
|
//# sourceMappingURL=index.d.ts.map
|
package/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,IAAI,OAAO,EAAE,oBAAiB;AAEhD,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,EAAE,0BAAuB;AACzD,OAAO,EAAE,UAAU,EAAE,8BAA2B;AAChD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,IAAI,OAAO,EAAE,oBAAiB;AAEhD,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,EAAE,0BAAuB;AACzD,OAAO,EAAE,UAAU,EAAE,8BAA2B;AAChD,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,iBAAiB,EAAE,KAAK,cAAc,EAAE,6BAA0B;AACjG,OAAO,EACL,aAAa,EACb,SAAS,EACT,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,YAAY,EACZ,SAAS,GACV,oBAAiB;AAClB,OAAO,EAAE,WAAW,EAAE,6BAA0B;AAChD,OAAO,EACL,cAAc,EACd,QAAQ,EACR,kBAAkB,EAClB,yBAAyB,EACzB,iBAAiB,EACjB,cAAc,EACd,aAAa,EACb,aAAa,EACb,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACrB,wBAAwB,GACzB,wBAAqB;AAEtB,YAAY,EACV,yBAAyB,EACzB,aAAa,EACb,kBAAkB,EAClB,4BAA4B,EAC5B,8BAA8B,GAC/B,wBAAqB"}
|