@ai-sdk/provider-utils 2.1.2 → 2.1.3

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 CHANGED
@@ -1,5 +1,11 @@
1
1
  # @ai-sdk/provider-utils
2
2
 
3
+ ## 2.1.3
4
+
5
+ ### Patch Changes
6
+
7
+ - 39e5c1f: feat (provider-utils): add getFromApi and response handlers for binary responses and status-code errors
8
+
3
9
  ## 2.1.2
4
10
 
5
11
  ### Patch Changes
package/dist/index.d.mts CHANGED
@@ -54,43 +54,6 @@ declare const generateId: (size?: number) => string;
54
54
 
55
55
  declare function getErrorMessage(error: unknown | undefined): string;
56
56
 
57
- declare function isAbortError(error: unknown): error is Error;
58
-
59
- declare function loadApiKey({ apiKey, environmentVariableName, apiKeyParameterName, description, }: {
60
- apiKey: string | undefined;
61
- environmentVariableName: string;
62
- apiKeyParameterName?: string;
63
- description: string;
64
- }): string;
65
-
66
- /**
67
- * Loads an optional `string` setting from the environment or a parameter.
68
- *
69
- * @param settingValue - The setting value.
70
- * @param environmentVariableName - The environment variable name.
71
- * @returns The setting value.
72
- */
73
- declare function loadOptionalSetting({ settingValue, environmentVariableName, }: {
74
- settingValue: string | undefined;
75
- environmentVariableName: string;
76
- }): string | undefined;
77
-
78
- /**
79
- * Loads a `string` setting from the environment or a parameter.
80
- *
81
- * @param settingValue - The setting value.
82
- * @param environmentVariableName - The environment variable name.
83
- * @param settingName - The setting name.
84
- * @param description - The description of the setting.
85
- * @returns The setting value.
86
- */
87
- declare function loadSetting({ settingValue, environmentVariableName, settingName, description, }: {
88
- settingValue: string | undefined;
89
- environmentVariableName: string;
90
- settingName: string;
91
- description: string;
92
- }): string;
93
-
94
57
  /**
95
58
  * Used to mark validator functions so we can support both Zod and custom schemas.
96
59
  */
@@ -194,6 +157,58 @@ declare const createJsonErrorResponseHandler: <T>({ errorSchema, errorToMessage,
194
157
  declare const createEventSourceResponseHandler: <T>(chunkSchema: ZodSchema<T>) => ResponseHandler<ReadableStream<ParseResult<T>>>;
195
158
  declare const createJsonStreamResponseHandler: <T>(chunkSchema: ZodSchema<T>) => ResponseHandler<ReadableStream<ParseResult<T>>>;
196
159
  declare const createJsonResponseHandler: <T>(responseSchema: ZodSchema<T>) => ResponseHandler<T>;
160
+ declare const createBinaryResponseHandler: () => ResponseHandler<Uint8Array>;
161
+ declare const createStatusCodeErrorResponseHandler: () => ResponseHandler<APICallError>;
162
+
163
+ declare const getFromApi: <T>({ url, headers, successfulResponseHandler, failedResponseHandler, abortSignal, fetch, }: {
164
+ url: string;
165
+ headers?: Record<string, string | undefined>;
166
+ failedResponseHandler: ResponseHandler<Error>;
167
+ successfulResponseHandler: ResponseHandler<T>;
168
+ abortSignal?: AbortSignal;
169
+ fetch?: FetchFunction;
170
+ }) => Promise<{
171
+ value: T;
172
+ rawValue?: unknown;
173
+ responseHeaders?: Record<string, string>;
174
+ }>;
175
+
176
+ declare function isAbortError(error: unknown): error is Error;
177
+
178
+ declare function loadApiKey({ apiKey, environmentVariableName, apiKeyParameterName, description, }: {
179
+ apiKey: string | undefined;
180
+ environmentVariableName: string;
181
+ apiKeyParameterName?: string;
182
+ description: string;
183
+ }): string;
184
+
185
+ /**
186
+ * Loads an optional `string` setting from the environment or a parameter.
187
+ *
188
+ * @param settingValue - The setting value.
189
+ * @param environmentVariableName - The environment variable name.
190
+ * @returns The setting value.
191
+ */
192
+ declare function loadOptionalSetting({ settingValue, environmentVariableName, }: {
193
+ settingValue: string | undefined;
194
+ environmentVariableName: string;
195
+ }): string | undefined;
196
+
197
+ /**
198
+ * Loads a `string` setting from the environment or a parameter.
199
+ *
200
+ * @param settingValue - The setting value.
201
+ * @param environmentVariableName - The environment variable name.
202
+ * @param settingName - The setting name.
203
+ * @param description - The description of the setting.
204
+ * @returns The setting value.
205
+ */
206
+ declare function loadSetting({ settingValue, environmentVariableName, settingName, description, }: {
207
+ settingValue: string | undefined;
208
+ environmentVariableName: string;
209
+ settingName: string;
210
+ description: string;
211
+ }): string;
197
212
 
198
213
  declare const postJsonToApi: <T>({ url, headers, body, failedResponseHandler, successfulResponseHandler, abortSignal, fetch, }: {
199
214
  url: string;
@@ -312,4 +327,4 @@ interface ToolResult<NAME extends string, ARGS, RESULT> {
312
327
  result: RESULT;
313
328
  }
314
329
 
315
- export { type FetchFunction, type IDGenerator, type ParseResult, type Resolvable, type ResponseHandler, type ToolCall, type ToolResult, type ValidationResult, type Validator, asValidator, combineHeaders, convertAsyncIteratorToReadableStream, convertBase64ToUint8Array, convertUint8ArrayToBase64, createEventSourceResponseHandler, createIdGenerator, createJsonErrorResponseHandler, createJsonResponseHandler, createJsonStreamResponseHandler, extractResponseHeaders, generateId, getErrorMessage, isAbortError, isParsableJson, isValidator, loadApiKey, loadOptionalSetting, loadSetting, parseJSON, postJsonToApi, postToApi, resolve, safeParseJSON, safeValidateTypes, validateTypes, validator, validatorSymbol, withoutTrailingSlash, zodValidator };
330
+ export { type FetchFunction, type IDGenerator, type ParseResult, type Resolvable, type ResponseHandler, type ToolCall, type ToolResult, type ValidationResult, type Validator, asValidator, combineHeaders, convertAsyncIteratorToReadableStream, convertBase64ToUint8Array, convertUint8ArrayToBase64, createBinaryResponseHandler, createEventSourceResponseHandler, createIdGenerator, createJsonErrorResponseHandler, createJsonResponseHandler, createJsonStreamResponseHandler, createStatusCodeErrorResponseHandler, extractResponseHeaders, generateId, getErrorMessage, getFromApi, isAbortError, isParsableJson, isValidator, loadApiKey, loadOptionalSetting, loadSetting, parseJSON, postJsonToApi, postToApi, resolve, safeParseJSON, safeValidateTypes, validateTypes, validator, validatorSymbol, withoutTrailingSlash, zodValidator };
package/dist/index.d.ts CHANGED
@@ -54,43 +54,6 @@ declare const generateId: (size?: number) => string;
54
54
 
55
55
  declare function getErrorMessage(error: unknown | undefined): string;
56
56
 
57
- declare function isAbortError(error: unknown): error is Error;
58
-
59
- declare function loadApiKey({ apiKey, environmentVariableName, apiKeyParameterName, description, }: {
60
- apiKey: string | undefined;
61
- environmentVariableName: string;
62
- apiKeyParameterName?: string;
63
- description: string;
64
- }): string;
65
-
66
- /**
67
- * Loads an optional `string` setting from the environment or a parameter.
68
- *
69
- * @param settingValue - The setting value.
70
- * @param environmentVariableName - The environment variable name.
71
- * @returns The setting value.
72
- */
73
- declare function loadOptionalSetting({ settingValue, environmentVariableName, }: {
74
- settingValue: string | undefined;
75
- environmentVariableName: string;
76
- }): string | undefined;
77
-
78
- /**
79
- * Loads a `string` setting from the environment or a parameter.
80
- *
81
- * @param settingValue - The setting value.
82
- * @param environmentVariableName - The environment variable name.
83
- * @param settingName - The setting name.
84
- * @param description - The description of the setting.
85
- * @returns The setting value.
86
- */
87
- declare function loadSetting({ settingValue, environmentVariableName, settingName, description, }: {
88
- settingValue: string | undefined;
89
- environmentVariableName: string;
90
- settingName: string;
91
- description: string;
92
- }): string;
93
-
94
57
  /**
95
58
  * Used to mark validator functions so we can support both Zod and custom schemas.
96
59
  */
@@ -194,6 +157,58 @@ declare const createJsonErrorResponseHandler: <T>({ errorSchema, errorToMessage,
194
157
  declare const createEventSourceResponseHandler: <T>(chunkSchema: ZodSchema<T>) => ResponseHandler<ReadableStream<ParseResult<T>>>;
195
158
  declare const createJsonStreamResponseHandler: <T>(chunkSchema: ZodSchema<T>) => ResponseHandler<ReadableStream<ParseResult<T>>>;
196
159
  declare const createJsonResponseHandler: <T>(responseSchema: ZodSchema<T>) => ResponseHandler<T>;
160
+ declare const createBinaryResponseHandler: () => ResponseHandler<Uint8Array>;
161
+ declare const createStatusCodeErrorResponseHandler: () => ResponseHandler<APICallError>;
162
+
163
+ declare const getFromApi: <T>({ url, headers, successfulResponseHandler, failedResponseHandler, abortSignal, fetch, }: {
164
+ url: string;
165
+ headers?: Record<string, string | undefined>;
166
+ failedResponseHandler: ResponseHandler<Error>;
167
+ successfulResponseHandler: ResponseHandler<T>;
168
+ abortSignal?: AbortSignal;
169
+ fetch?: FetchFunction;
170
+ }) => Promise<{
171
+ value: T;
172
+ rawValue?: unknown;
173
+ responseHeaders?: Record<string, string>;
174
+ }>;
175
+
176
+ declare function isAbortError(error: unknown): error is Error;
177
+
178
+ declare function loadApiKey({ apiKey, environmentVariableName, apiKeyParameterName, description, }: {
179
+ apiKey: string | undefined;
180
+ environmentVariableName: string;
181
+ apiKeyParameterName?: string;
182
+ description: string;
183
+ }): string;
184
+
185
+ /**
186
+ * Loads an optional `string` setting from the environment or a parameter.
187
+ *
188
+ * @param settingValue - The setting value.
189
+ * @param environmentVariableName - The environment variable name.
190
+ * @returns The setting value.
191
+ */
192
+ declare function loadOptionalSetting({ settingValue, environmentVariableName, }: {
193
+ settingValue: string | undefined;
194
+ environmentVariableName: string;
195
+ }): string | undefined;
196
+
197
+ /**
198
+ * Loads a `string` setting from the environment or a parameter.
199
+ *
200
+ * @param settingValue - The setting value.
201
+ * @param environmentVariableName - The environment variable name.
202
+ * @param settingName - The setting name.
203
+ * @param description - The description of the setting.
204
+ * @returns The setting value.
205
+ */
206
+ declare function loadSetting({ settingValue, environmentVariableName, settingName, description, }: {
207
+ settingValue: string | undefined;
208
+ environmentVariableName: string;
209
+ settingName: string;
210
+ description: string;
211
+ }): string;
197
212
 
198
213
  declare const postJsonToApi: <T>({ url, headers, body, failedResponseHandler, successfulResponseHandler, abortSignal, fetch, }: {
199
214
  url: string;
@@ -312,4 +327,4 @@ interface ToolResult<NAME extends string, ARGS, RESULT> {
312
327
  result: RESULT;
313
328
  }
314
329
 
315
- export { type FetchFunction, type IDGenerator, type ParseResult, type Resolvable, type ResponseHandler, type ToolCall, type ToolResult, type ValidationResult, type Validator, asValidator, combineHeaders, convertAsyncIteratorToReadableStream, convertBase64ToUint8Array, convertUint8ArrayToBase64, createEventSourceResponseHandler, createIdGenerator, createJsonErrorResponseHandler, createJsonResponseHandler, createJsonStreamResponseHandler, extractResponseHeaders, generateId, getErrorMessage, isAbortError, isParsableJson, isValidator, loadApiKey, loadOptionalSetting, loadSetting, parseJSON, postJsonToApi, postToApi, resolve, safeParseJSON, safeValidateTypes, validateTypes, validator, validatorSymbol, withoutTrailingSlash, zodValidator };
330
+ export { type FetchFunction, type IDGenerator, type ParseResult, type Resolvable, type ResponseHandler, type ToolCall, type ToolResult, type ValidationResult, type Validator, asValidator, combineHeaders, convertAsyncIteratorToReadableStream, convertBase64ToUint8Array, convertUint8ArrayToBase64, createBinaryResponseHandler, createEventSourceResponseHandler, createIdGenerator, createJsonErrorResponseHandler, createJsonResponseHandler, createJsonStreamResponseHandler, createStatusCodeErrorResponseHandler, extractResponseHeaders, generateId, getErrorMessage, getFromApi, isAbortError, isParsableJson, isValidator, loadApiKey, loadOptionalSetting, loadSetting, parseJSON, postJsonToApi, postToApi, resolve, safeParseJSON, safeValidateTypes, validateTypes, validator, validatorSymbol, withoutTrailingSlash, zodValidator };
package/dist/index.js CHANGED
@@ -35,14 +35,17 @@ __export(src_exports, {
35
35
  convertAsyncIteratorToReadableStream: () => convertAsyncIteratorToReadableStream,
36
36
  convertBase64ToUint8Array: () => convertBase64ToUint8Array,
37
37
  convertUint8ArrayToBase64: () => convertUint8ArrayToBase64,
38
+ createBinaryResponseHandler: () => createBinaryResponseHandler,
38
39
  createEventSourceResponseHandler: () => createEventSourceResponseHandler,
39
40
  createIdGenerator: () => createIdGenerator,
40
41
  createJsonErrorResponseHandler: () => createJsonErrorResponseHandler,
41
42
  createJsonResponseHandler: () => createJsonResponseHandler,
42
43
  createJsonStreamResponseHandler: () => createJsonStreamResponseHandler,
44
+ createStatusCodeErrorResponseHandler: () => createStatusCodeErrorResponseHandler,
43
45
  extractResponseHeaders: () => extractResponseHeaders,
44
46
  generateId: () => generateId,
45
47
  getErrorMessage: () => getErrorMessage,
48
+ getFromApi: () => getFromApi,
46
49
  isAbortError: () => isAbortError,
47
50
  isParsableJson: () => isParsableJson,
48
51
  isValidator: () => isValidator,
@@ -149,13 +152,104 @@ function getErrorMessage(error) {
149
152
  return JSON.stringify(error);
150
153
  }
151
154
 
155
+ // src/get-from-api.ts
156
+ var import_provider2 = require("@ai-sdk/provider");
157
+
158
+ // src/remove-undefined-entries.ts
159
+ function removeUndefinedEntries(record) {
160
+ return Object.fromEntries(
161
+ Object.entries(record).filter(([_key, value]) => value != null)
162
+ );
163
+ }
164
+
152
165
  // src/is-abort-error.ts
153
166
  function isAbortError(error) {
154
167
  return error instanceof Error && (error.name === "AbortError" || error.name === "TimeoutError");
155
168
  }
156
169
 
170
+ // src/get-from-api.ts
171
+ var getOriginalFetch = () => globalThis.fetch;
172
+ var getFromApi = async ({
173
+ url,
174
+ headers = {},
175
+ successfulResponseHandler,
176
+ failedResponseHandler,
177
+ abortSignal,
178
+ fetch = getOriginalFetch()
179
+ }) => {
180
+ try {
181
+ const response = await fetch(url, {
182
+ method: "GET",
183
+ headers: removeUndefinedEntries(headers),
184
+ signal: abortSignal
185
+ });
186
+ const responseHeaders = extractResponseHeaders(response);
187
+ if (!response.ok) {
188
+ let errorInformation;
189
+ try {
190
+ errorInformation = await failedResponseHandler({
191
+ response,
192
+ url,
193
+ requestBodyValues: {}
194
+ });
195
+ } catch (error) {
196
+ if (isAbortError(error) || import_provider2.APICallError.isInstance(error)) {
197
+ throw error;
198
+ }
199
+ throw new import_provider2.APICallError({
200
+ message: "Failed to process error response",
201
+ cause: error,
202
+ statusCode: response.status,
203
+ url,
204
+ responseHeaders,
205
+ requestBodyValues: {}
206
+ });
207
+ }
208
+ throw errorInformation.value;
209
+ }
210
+ try {
211
+ return await successfulResponseHandler({
212
+ response,
213
+ url,
214
+ requestBodyValues: {}
215
+ });
216
+ } catch (error) {
217
+ if (error instanceof Error) {
218
+ if (isAbortError(error) || import_provider2.APICallError.isInstance(error)) {
219
+ throw error;
220
+ }
221
+ }
222
+ throw new import_provider2.APICallError({
223
+ message: "Failed to process successful response",
224
+ cause: error,
225
+ statusCode: response.status,
226
+ url,
227
+ responseHeaders,
228
+ requestBodyValues: {}
229
+ });
230
+ }
231
+ } catch (error) {
232
+ if (isAbortError(error)) {
233
+ throw error;
234
+ }
235
+ if (error instanceof TypeError && error.message === "fetch failed") {
236
+ const cause = error.cause;
237
+ if (cause != null) {
238
+ throw new import_provider2.APICallError({
239
+ message: `Cannot connect to API: ${cause.message}`,
240
+ cause,
241
+ url,
242
+ isRetryable: true,
243
+ requestBodyValues: {}
244
+ });
245
+ }
246
+ }
247
+ throw error;
248
+ }
249
+ };
250
+
157
251
  // src/load-api-key.ts
158
- var import_provider2 = require("@ai-sdk/provider");
252
+ var import_provider3 = require("@ai-sdk/provider");
159
253
  function loadApiKey({
160
254
  apiKey,
161
255
  environmentVariableName,
@@ -166,23 +260,23 @@ function loadApiKey({
166
260
  return apiKey;
167
261
  }
168
262
  if (apiKey != null) {
169
- throw new import_provider2.LoadAPIKeyError({
263
+ throw new import_provider3.LoadAPIKeyError({
170
264
  message: `${description} API key must be a string.`
171
265
  });
172
266
  }
173
267
  if (typeof process === "undefined") {
174
- throw new import_provider2.LoadAPIKeyError({
268
+ throw new import_provider3.LoadAPIKeyError({
175
269
  message: `${description} API key is missing. Pass it using the '${apiKeyParameterName}' parameter. Environment variables is not supported in this environment.`
176
270
  });
177
271
  }
178
272
  apiKey = process.env[environmentVariableName];
179
273
  if (apiKey == null) {
180
- throw new import_provider2.LoadAPIKeyError({
274
+ throw new import_provider3.LoadAPIKeyError({
181
275
  message: `${description} API key is missing. Pass it using the '${apiKeyParameterName}' parameter or the ${environmentVariableName} environment variable.`
182
276
  });
183
277
  }
184
278
  if (typeof apiKey !== "string") {
185
- throw new import_provider2.LoadAPIKeyError({
279
+ throw new import_provider3.LoadAPIKeyError({
186
280
  message: `${description} API key must be a string. The value of the ${environmentVariableName} environment variable is not a string.`
187
281
  });
188
282
  }
@@ -208,7 +302,7 @@ function loadOptionalSetting({
208
302
  }
209
303
 
210
304
  // src/load-setting.ts
211
- var import_provider3 = require("@ai-sdk/provider");
305
+ var import_provider4 = require("@ai-sdk/provider");
212
306
  function loadSetting({
213
307
  settingValue,
214
308
  environmentVariableName,
@@ -219,23 +313,23 @@ function loadSetting({
219
313
  return settingValue;
220
314
  }
221
315
  if (settingValue != null) {
222
- throw new import_provider3.LoadSettingError({
316
+ throw new import_provider4.LoadSettingError({
223
317
  message: `${description} setting must be a string.`
224
318
  });
225
319
  }
226
320
  if (typeof process === "undefined") {
227
- throw new import_provider3.LoadSettingError({
321
+ throw new import_provider4.LoadSettingError({
228
322
  message: `${description} setting is missing. Pass it using the '${settingName}' parameter. Environment variables is not supported in this environment.`
229
323
  });
230
324
  }
231
325
  settingValue = process.env[environmentVariableName];
232
326
  if (settingValue == null) {
233
- throw new import_provider3.LoadSettingError({
327
+ throw new import_provider4.LoadSettingError({
234
328
  message: `${description} setting is missing. Pass it using the '${settingName}' parameter or the ${environmentVariableName} environment variable.`
235
329
  });
236
330
  }
237
331
  if (typeof settingValue !== "string") {
238
- throw new import_provider3.LoadSettingError({
332
+ throw new import_provider4.LoadSettingError({
239
333
  message: `${description} setting must be a string. The value of the ${environmentVariableName} environment variable is not a string.`
240
334
  });
241
335
  }
@@ -243,11 +337,11 @@ function loadSetting({
243
337
  }
244
338
 
245
339
  // src/parse-json.ts
246
- var import_provider5 = require("@ai-sdk/provider");
340
+ var import_provider6 = require("@ai-sdk/provider");
247
341
  var import_secure_json_parse = __toESM(require("secure-json-parse"));
248
342
 
249
343
  // src/validate-types.ts
250
- var import_provider4 = require("@ai-sdk/provider");
344
+ var import_provider5 = require("@ai-sdk/provider");
251
345
 
252
346
  // src/validator.ts
253
347
  var validatorSymbol = Symbol.for("vercel.ai.validator");
@@ -274,7 +368,7 @@ function validateTypes({
274
368
  }) {
275
369
  const result = safeValidateTypes({ value, schema: inputSchema });
276
370
  if (!result.success) {
277
- throw import_provider4.TypeValidationError.wrap({ value, cause: result.error });
371
+ throw import_provider5.TypeValidationError.wrap({ value, cause: result.error });
278
372
  }
279
373
  return result.value;
280
374
  }
@@ -293,12 +387,12 @@ function safeValidateTypes({
293
387
  }
294
388
  return {
295
389
  success: false,
296
- error: import_provider4.TypeValidationError.wrap({ value, cause: result.error })
390
+ error: import_provider5.TypeValidationError.wrap({ value, cause: result.error })
297
391
  };
298
392
  } catch (error) {
299
393
  return {
300
394
  success: false,
301
- error: import_provider4.TypeValidationError.wrap({ value, cause: error })
395
+ error: import_provider5.TypeValidationError.wrap({ value, cause: error })
302
396
  };
303
397
  }
304
398
  }
@@ -315,10 +409,10 @@ function parseJSON({
315
409
  }
316
410
  return validateTypes({ value, schema });
317
411
  } catch (error) {
318
- if (import_provider5.JSONParseError.isInstance(error) || import_provider5.TypeValidationError.isInstance(error)) {
412
+ if (import_provider6.JSONParseError.isInstance(error) || import_provider6.TypeValidationError.isInstance(error)) {
319
413
  throw error;
320
414
  }
321
- throw new import_provider5.JSONParseError({ text, cause: error });
415
+ throw new import_provider6.JSONParseError({ text, cause: error });
322
416
  }
323
417
  }
324
418
  function safeParseJSON({
@@ -335,7 +429,7 @@ function safeParseJSON({
335
429
  } catch (error) {
336
430
  return {
337
431
  success: false,
338
- error: import_provider5.JSONParseError.isInstance(error) ? error : new import_provider5.JSONParseError({ text, cause: error })
432
+ error: import_provider6.JSONParseError.isInstance(error) ? error : new import_provider6.JSONParseError({ text, cause: error })
339
433
  };
340
434
  }
341
435
  }
@@ -349,17 +443,8 @@ function isParsableJson(input) {
349
443
  }
350
444
 
351
445
  // src/post-to-api.ts
352
- var import_provider6 = require("@ai-sdk/provider");
353
-
354
- // src/remove-undefined-entries.ts
355
- function removeUndefinedEntries(record) {
356
- return Object.fromEntries(
357
- Object.entries(record).filter(([_key, value]) => value != null)
358
- );
359
- }
360
-
361
- // src/post-to-api.ts
362
- var getOriginalFetch = () => globalThis.fetch;
446
+ var import_provider7 = require("@ai-sdk/provider");
447
+ var getOriginalFetch2 = () => globalThis.fetch;
363
448
  var postJsonToApi = async ({
364
449
  url,
365
450
  headers,
@@ -390,7 +475,7 @@ var postToApi = async ({
390
475
  successfulResponseHandler,
391
476
  failedResponseHandler,
392
477
  abortSignal,
393
- fetch = getOriginalFetch()
478
+ fetch = getOriginalFetch2()
394
479
  }) => {
395
480
  try {
396
481
  const response = await fetch(url, {
@@ -409,10 +494,10 @@ var postToApi = async ({
409
494
  requestBodyValues: body.values
410
495
  });
411
496
  } catch (error) {
412
- if (isAbortError(error) || import_provider6.APICallError.isInstance(error)) {
497
+ if (isAbortError(error) || import_provider7.APICallError.isInstance(error)) {
413
498
  throw error;
414
499
  }
415
- throw new import_provider6.APICallError({
500
+ throw new import_provider7.APICallError({
416
501
  message: "Failed to process error response",
417
502
  cause: error,
418
503
  statusCode: response.status,
@@ -431,11 +516,11 @@ var postToApi = async ({
431
516
  });
432
517
  } catch (error) {
433
518
  if (error instanceof Error) {
434
- if (isAbortError(error) || import_provider6.APICallError.isInstance(error)) {
519
+ if (isAbortError(error) || import_provider7.APICallError.isInstance(error)) {
435
520
  throw error;
436
521
  }
437
522
  }
438
- throw new import_provider6.APICallError({
523
+ throw new import_provider7.APICallError({
439
524
  message: "Failed to process successful response",
440
525
  cause: error,
441
526
  statusCode: response.status,
@@ -451,7 +536,7 @@ var postToApi = async ({
451
536
  if (error instanceof TypeError && error.message === "fetch failed") {
452
537
  const cause = error.cause;
453
538
  if (cause != null) {
454
- throw new import_provider6.APICallError({
539
+ throw new import_provider7.APICallError({
455
540
  message: `Cannot connect to API: ${cause.message}`,
456
541
  cause,
457
542
  url,
@@ -474,7 +559,7 @@ async function resolve(value) {
474
559
  }
475
560
 
476
561
  // src/response-handler.ts
477
- var import_provider7 = require("@ai-sdk/provider");
562
+ var import_provider8 = require("@ai-sdk/provider");
478
563
  var import_stream = require("eventsource-parser/stream");
479
564
  var createJsonErrorResponseHandler = ({
480
565
  errorSchema,
@@ -486,7 +571,7 @@ var createJsonErrorResponseHandler = ({
486
571
  if (responseBody.trim() === "") {
487
572
  return {
488
573
  responseHeaders,
489
- value: new import_provider7.APICallError({
574
+ value: new import_provider8.APICallError({
490
575
  message: response.statusText,
491
576
  url,
492
577
  requestBodyValues,
@@ -504,7 +589,7 @@ var createJsonErrorResponseHandler = ({
504
589
  });
505
590
  return {
506
591
  responseHeaders,
507
- value: new import_provider7.APICallError({
592
+ value: new import_provider8.APICallError({
508
593
  message: errorToMessage(parsedError),
509
594
  url,
510
595
  requestBodyValues,
@@ -518,7 +603,7 @@ var createJsonErrorResponseHandler = ({
518
603
  } catch (parseError) {
519
604
  return {
520
605
  responseHeaders,
521
- value: new import_provider7.APICallError({
606
+ value: new import_provider8.APICallError({
522
607
  message: response.statusText,
523
608
  url,
524
609
  requestBodyValues,
@@ -533,7 +618,7 @@ var createJsonErrorResponseHandler = ({
533
618
  var createEventSourceResponseHandler = (chunkSchema) => async ({ response }) => {
534
619
  const responseHeaders = extractResponseHeaders(response);
535
620
  if (response.body == null) {
536
- throw new import_provider7.EmptyResponseBodyError({});
621
+ throw new import_provider8.EmptyResponseBodyError({});
537
622
  }
538
623
  return {
539
624
  responseHeaders,
@@ -557,7 +642,7 @@ var createEventSourceResponseHandler = (chunkSchema) => async ({ response }) =>
557
642
  var createJsonStreamResponseHandler = (chunkSchema) => async ({ response }) => {
558
643
  const responseHeaders = extractResponseHeaders(response);
559
644
  if (response.body == null) {
560
- throw new import_provider7.EmptyResponseBodyError({});
645
+ throw new import_provider8.EmptyResponseBodyError({});
561
646
  }
562
647
  let buffer = "";
563
648
  return {
@@ -589,7 +674,7 @@ var createJsonResponseHandler = (responseSchema) => async ({ response, url, requ
589
674
  });
590
675
  const responseHeaders = extractResponseHeaders(response);
591
676
  if (!parsedResult.success) {
592
- throw new import_provider7.APICallError({
677
+ throw new import_provider8.APICallError({
593
678
  message: "Invalid JSON response",
594
679
  cause: parsedResult.error,
595
680
  statusCode: response.status,
@@ -605,6 +690,51 @@ var createJsonResponseHandler = (responseSchema) => async ({ response, url, requ
605
690
  rawValue: parsedResult.rawValue
606
691
  };
607
692
  };
693
+ var createBinaryResponseHandler = () => async ({ response, url, requestBodyValues }) => {
694
+ const responseHeaders = extractResponseHeaders(response);
695
+ if (!response.body) {
696
+ throw new import_provider8.APICallError({
697
+ message: "Response body is empty",
698
+ url,
699
+ requestBodyValues,
700
+ statusCode: response.status,
701
+ responseHeaders,
702
+ responseBody: void 0
703
+ });
704
+ }
705
+ try {
706
+ const buffer = await response.arrayBuffer();
707
+ return {
708
+ responseHeaders,
709
+ value: new Uint8Array(buffer)
710
+ };
711
+ } catch (error) {
712
+ throw new import_provider8.APICallError({
713
+ message: "Failed to read response as array buffer",
714
+ url,
715
+ requestBodyValues,
716
+ statusCode: response.status,
717
+ responseHeaders,
718
+ responseBody: void 0,
719
+ cause: error
720
+ });
721
+ }
722
+ };
723
+ var createStatusCodeErrorResponseHandler = () => async ({ response, url, requestBodyValues }) => {
724
+ const responseHeaders = extractResponseHeaders(response);
725
+ const responseBody = await response.text();
726
+ return {
727
+ responseHeaders,
728
+ value: new import_provider8.APICallError({
729
+ message: response.statusText,
730
+ url,
731
+ requestBodyValues,
732
+ statusCode: response.status,
733
+ responseHeaders,
734
+ responseBody
735
+ })
736
+ };
737
+ };
608
738
 
609
739
  // src/uint8-utils.ts
610
740
  var { btoa, atob } = globalThis;
@@ -632,14 +762,17 @@ function withoutTrailingSlash(url) {
632
762
  convertAsyncIteratorToReadableStream,
633
763
  convertBase64ToUint8Array,
634
764
  convertUint8ArrayToBase64,
765
+ createBinaryResponseHandler,
635
766
  createEventSourceResponseHandler,
636
767
  createIdGenerator,
637
768
  createJsonErrorResponseHandler,
638
769
  createJsonResponseHandler,
639
770
  createJsonStreamResponseHandler,
771
+ createStatusCodeErrorResponseHandler,
640
772
  extractResponseHeaders,
641
773
  generateId,
642
774
  getErrorMessage,
775
+ getFromApi,
643
776
  isAbortError,
644
777
  isParsableJson,
645
778
  isValidator,