@ai-sdk/gateway 3.0.39 → 3.0.41

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -247,7 +247,7 @@ async function createGatewayErrorFromResponse({
247
247
  cause,
248
248
  authMethod
249
249
  }) {
250
- var _a8;
250
+ var _a9;
251
251
  const parseResult = await safeValidateTypes({
252
252
  value: response,
253
253
  schema: gatewayErrorResponseSchema
@@ -266,7 +266,7 @@ async function createGatewayErrorFromResponse({
266
266
  const validatedResponse = parseResult.value;
267
267
  const errorType = validatedResponse.error.type;
268
268
  const message = validatedResponse.error.message;
269
- const generationId = (_a8 = validatedResponse.generationId) != null ? _a8 : void 0;
269
+ const generationId = (_a9 = validatedResponse.generationId) != null ? _a9 : void 0;
270
270
  switch (errorType) {
271
271
  case "authentication_error":
272
272
  return GatewayAuthenticationError.createContextualError({
@@ -333,22 +333,91 @@ var gatewayErrorResponseSchema = lazySchema2(
333
333
  )
334
334
  );
335
335
 
336
+ // src/errors/gateway-timeout-error.ts
337
+ var name7 = "GatewayTimeoutError";
338
+ var marker8 = `vercel.ai.gateway.error.${name7}`;
339
+ var symbol8 = Symbol.for(marker8);
340
+ var _a8, _b8;
341
+ var GatewayTimeoutError = class _GatewayTimeoutError extends (_b8 = GatewayError, _a8 = symbol8, _b8) {
342
+ constructor({
343
+ message = "Request timed out",
344
+ statusCode = 408,
345
+ cause,
346
+ generationId
347
+ } = {}) {
348
+ super({ message, statusCode, cause, generationId });
349
+ this[_a8] = true;
350
+ // used in isInstance
351
+ this.name = name7;
352
+ this.type = "timeout_error";
353
+ }
354
+ static isInstance(error) {
355
+ return GatewayError.hasMarker(error) && symbol8 in error;
356
+ }
357
+ /**
358
+ * Creates a helpful timeout error message with troubleshooting guidance
359
+ */
360
+ static createTimeoutError({
361
+ originalMessage,
362
+ statusCode = 408,
363
+ cause,
364
+ generationId
365
+ }) {
366
+ const message = `Gateway request timed out: ${originalMessage}
367
+
368
+ This is a client-side timeout. To resolve this, increase your timeout configuration: https://vercel.com/docs/ai-gateway/capabilities/video-generation#extending-timeouts-for-node.js`;
369
+ return new _GatewayTimeoutError({
370
+ message,
371
+ statusCode,
372
+ cause,
373
+ generationId
374
+ });
375
+ }
376
+ };
377
+
336
378
  // src/errors/as-gateway-error.ts
337
- function asGatewayError(error, authMethod) {
338
- var _a8;
379
+ function isTimeoutError(error) {
380
+ if (!(error instanceof Error)) {
381
+ return false;
382
+ }
383
+ const errorCode = error.code;
384
+ if (typeof errorCode === "string") {
385
+ const undiciTimeoutCodes = [
386
+ "UND_ERR_HEADERS_TIMEOUT",
387
+ "UND_ERR_BODY_TIMEOUT",
388
+ "UND_ERR_CONNECT_TIMEOUT"
389
+ ];
390
+ return undiciTimeoutCodes.includes(errorCode);
391
+ }
392
+ return false;
393
+ }
394
+ async function asGatewayError(error, authMethod) {
395
+ var _a9;
339
396
  if (GatewayError.isInstance(error)) {
340
397
  return error;
341
398
  }
399
+ if (isTimeoutError(error)) {
400
+ return GatewayTimeoutError.createTimeoutError({
401
+ originalMessage: error instanceof Error ? error.message : "Unknown error",
402
+ cause: error
403
+ });
404
+ }
342
405
  if (APICallError.isInstance(error)) {
343
- return createGatewayErrorFromResponse({
406
+ if (error.cause && isTimeoutError(error.cause)) {
407
+ return GatewayTimeoutError.createTimeoutError({
408
+ originalMessage: error.message,
409
+ cause: error
410
+ });
411
+ }
412
+ return await createGatewayErrorFromResponse({
344
413
  response: extractApiCallResponse(error),
345
- statusCode: (_a8 = error.statusCode) != null ? _a8 : 500,
414
+ statusCode: (_a9 = error.statusCode) != null ? _a9 : 500,
346
415
  defaultMessage: "Gateway request failed",
347
416
  cause: error,
348
417
  authMethod
349
418
  });
350
419
  }
351
- return createGatewayErrorFromResponse({
420
+ return await createGatewayErrorFromResponse({
352
421
  response: {},
353
422
  statusCode: 500,
354
423
  defaultMessage: error instanceof Error ? `Gateway request failed: ${error.message}` : "Unknown Gateway error",
@@ -673,7 +742,7 @@ var GatewayEmbeddingModel = class {
673
742
  abortSignal,
674
743
  providerOptions
675
744
  }) {
676
- var _a8;
745
+ var _a9;
677
746
  const resolvedHeaders = await resolve3(this.config.headers());
678
747
  try {
679
748
  const {
@@ -704,7 +773,7 @@ var GatewayEmbeddingModel = class {
704
773
  });
705
774
  return {
706
775
  embeddings: responseBody.embeddings,
707
- usage: (_a8 = responseBody.usage) != null ? _a8 : void 0,
776
+ usage: (_a9 = responseBody.usage) != null ? _a9 : void 0,
708
777
  providerMetadata: responseBody.providerMetadata,
709
778
  response: { headers: responseHeaders, body: rawValue },
710
779
  warnings: []
@@ -766,7 +835,7 @@ var GatewayImageModel = class {
766
835
  headers,
767
836
  abortSignal
768
837
  }) {
769
- var _a8, _b8, _c, _d;
838
+ var _a9, _b9, _c, _d;
770
839
  const resolvedHeaders = await resolve4(this.config.headers());
771
840
  try {
772
841
  const {
@@ -806,7 +875,7 @@ var GatewayImageModel = class {
806
875
  return {
807
876
  images: responseBody.images,
808
877
  // Always base64 strings from server
809
- warnings: (_a8 = responseBody.warnings) != null ? _a8 : [],
878
+ warnings: (_a9 = responseBody.warnings) != null ? _a9 : [],
810
879
  providerMetadata: responseBody.providerMetadata,
811
880
  response: {
812
881
  timestamp: /* @__PURE__ */ new Date(),
@@ -815,7 +884,7 @@ var GatewayImageModel = class {
815
884
  },
816
885
  ...responseBody.usage != null && {
817
886
  usage: {
818
- inputTokens: (_b8 = responseBody.usage.inputTokens) != null ? _b8 : void 0,
887
+ inputTokens: (_b9 = responseBody.usage.inputTokens) != null ? _b9 : void 0,
819
888
  outputTokens: (_c = responseBody.usage.outputTokens) != null ? _c : void 0,
820
889
  totalTokens: (_d = responseBody.usage.totalTokens) != null ? _d : void 0
821
890
  }
@@ -910,7 +979,7 @@ var GatewayVideoModel = class {
910
979
  headers,
911
980
  abortSignal
912
981
  }) {
913
- var _a8;
982
+ var _a9;
914
983
  const resolvedHeaders = await resolve5(this.config.headers());
915
984
  try {
916
985
  const {
@@ -948,7 +1017,7 @@ var GatewayVideoModel = class {
948
1017
  });
949
1018
  return {
950
1019
  videos: responseBody.videos,
951
- warnings: (_a8 = responseBody.warnings) != null ? _a8 : [],
1020
+ warnings: (_a9 = responseBody.warnings) != null ? _a9 : [],
952
1021
  providerMetadata: responseBody.providerMetadata,
953
1022
  response: {
954
1023
  timestamp: /* @__PURE__ */ new Date(),
@@ -1199,25 +1268,25 @@ var gatewayTools = {
1199
1268
  import { getContext } from "@vercel/oidc";
1200
1269
  import { getVercelOidcToken } from "@vercel/oidc";
1201
1270
  async function getVercelRequestId() {
1202
- var _a8;
1203
- return (_a8 = getContext().headers) == null ? void 0 : _a8["x-vercel-id"];
1271
+ var _a9;
1272
+ return (_a9 = getContext().headers) == null ? void 0 : _a9["x-vercel-id"];
1204
1273
  }
1205
1274
 
1206
1275
  // src/gateway-provider.ts
1207
1276
  import { withUserAgentSuffix } from "@ai-sdk/provider-utils";
1208
1277
 
1209
1278
  // src/version.ts
1210
- var VERSION = true ? "3.0.39" : "0.0.0-test";
1279
+ var VERSION = true ? "3.0.41" : "0.0.0-test";
1211
1280
 
1212
1281
  // src/gateway-provider.ts
1213
1282
  var AI_GATEWAY_PROTOCOL_VERSION = "0.0.1";
1214
1283
  function createGatewayProvider(options = {}) {
1215
- var _a8, _b8;
1284
+ var _a9, _b9;
1216
1285
  let pendingMetadata = null;
1217
1286
  let metadataCache = null;
1218
- const cacheRefreshMillis = (_a8 = options.metadataCacheRefreshMillis) != null ? _a8 : 1e3 * 60 * 5;
1287
+ const cacheRefreshMillis = (_a9 = options.metadataCacheRefreshMillis) != null ? _a9 : 1e3 * 60 * 5;
1219
1288
  let lastFetchTime = 0;
1220
- const baseURL = (_b8 = withoutTrailingSlash(options.baseURL)) != null ? _b8 : "https://ai-gateway.vercel.sh/v3/ai";
1289
+ const baseURL = (_b9 = withoutTrailingSlash(options.baseURL)) != null ? _b9 : "https://ai-gateway.vercel.sh/v3/ai";
1221
1290
  const getHeaders = async () => {
1222
1291
  try {
1223
1292
  const auth = await getGatewayAuthToken(options);
@@ -1272,8 +1341,8 @@ function createGatewayProvider(options = {}) {
1272
1341
  });
1273
1342
  };
1274
1343
  const getAvailableModels = async () => {
1275
- var _a9, _b9, _c;
1276
- const now = (_c = (_b9 = (_a9 = options._internal) == null ? void 0 : _a9.currentDate) == null ? void 0 : _b9.call(_a9).getTime()) != null ? _c : Date.now();
1344
+ var _a10, _b10, _c;
1345
+ const now = (_c = (_b10 = (_a10 = options._internal) == null ? void 0 : _a10.currentDate) == null ? void 0 : _b10.call(_a10).getTime()) != null ? _c : Date.now();
1277
1346
  if (!pendingMetadata || now - lastFetchTime > cacheRefreshMillis) {
1278
1347
  lastFetchTime = now;
1279
1348
  pendingMetadata = new GatewayFetchMetadata({