@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/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # @ai-sdk/gateway
2
2
 
3
+ ## 3.0.41
4
+
5
+ ### Patch Changes
6
+
7
+ - 99fbed8: feat: normalize provider specific model options type names and ensure they are exported
8
+
9
+ ## 3.0.40
10
+
11
+ ### Patch Changes
12
+
13
+ - a2208a2: fix (provider/gateway): added custom error class and message for client side timeouts
14
+
3
15
  ## 3.0.39
4
16
 
5
17
  ### Patch Changes
package/dist/index.d.mts CHANGED
@@ -432,7 +432,7 @@ interface GatewayProviderSettings {
432
432
  declare function createGatewayProvider(options?: GatewayProviderSettings): GatewayProvider;
433
433
  declare const gateway: GatewayProvider;
434
434
 
435
- declare const gatewayProviderOptions: _ai_sdk_provider_utils.LazySchema<{
435
+ declare const gatewayLanguageModelOptions: _ai_sdk_provider_utils.LazySchema<{
436
436
  only?: string[] | undefined;
437
437
  order?: string[] | undefined;
438
438
  user?: string | undefined;
@@ -441,7 +441,7 @@ declare const gatewayProviderOptions: _ai_sdk_provider_utils.LazySchema<{
441
441
  byok?: Record<string, Record<string, unknown>[]> | undefined;
442
442
  zeroDataRetention?: boolean | undefined;
443
443
  }>;
444
- type GatewayProviderOptions = InferSchema<typeof gatewayProviderOptions>;
444
+ type GatewayLanguageModelOptions = InferSchema<typeof gatewayLanguageModelOptions>;
445
445
 
446
446
  declare const symbol$6: unique symbol;
447
447
  declare abstract class GatewayError extends Error {
@@ -596,4 +596,4 @@ declare class GatewayResponseError extends GatewayError {
596
596
  static isInstance(error: unknown): error is GatewayResponseError;
597
597
  }
598
598
 
599
- export { GatewayAuthenticationError, type GatewayCreditsResponse, GatewayError, type GatewayErrorResponse, GatewayInternalServerError, GatewayInvalidRequestError, type GatewayLanguageModelEntry, type GatewayLanguageModelSpecification, type GatewayLanguageModelEntry as GatewayModelEntry, type GatewayModelId, GatewayModelNotFoundError, type GatewayProvider, type GatewayProviderOptions, type GatewayProviderSettings, GatewayRateLimitError, GatewayResponseError, type GatewayVideoModelId, createGatewayProvider as createGateway, createGatewayProvider, gateway };
599
+ export { GatewayAuthenticationError, type GatewayCreditsResponse, GatewayError, type GatewayErrorResponse, GatewayInternalServerError, GatewayInvalidRequestError, type GatewayLanguageModelEntry, type GatewayLanguageModelOptions, type GatewayLanguageModelSpecification, type GatewayLanguageModelEntry as GatewayModelEntry, type GatewayModelId, GatewayModelNotFoundError, type GatewayProvider, type GatewayLanguageModelOptions as GatewayProviderOptions, type GatewayProviderSettings, GatewayRateLimitError, GatewayResponseError, type GatewayVideoModelId, createGatewayProvider as createGateway, createGatewayProvider, gateway };
package/dist/index.d.ts CHANGED
@@ -432,7 +432,7 @@ interface GatewayProviderSettings {
432
432
  declare function createGatewayProvider(options?: GatewayProviderSettings): GatewayProvider;
433
433
  declare const gateway: GatewayProvider;
434
434
 
435
- declare const gatewayProviderOptions: _ai_sdk_provider_utils.LazySchema<{
435
+ declare const gatewayLanguageModelOptions: _ai_sdk_provider_utils.LazySchema<{
436
436
  only?: string[] | undefined;
437
437
  order?: string[] | undefined;
438
438
  user?: string | undefined;
@@ -441,7 +441,7 @@ declare const gatewayProviderOptions: _ai_sdk_provider_utils.LazySchema<{
441
441
  byok?: Record<string, Record<string, unknown>[]> | undefined;
442
442
  zeroDataRetention?: boolean | undefined;
443
443
  }>;
444
- type GatewayProviderOptions = InferSchema<typeof gatewayProviderOptions>;
444
+ type GatewayLanguageModelOptions = InferSchema<typeof gatewayLanguageModelOptions>;
445
445
 
446
446
  declare const symbol$6: unique symbol;
447
447
  declare abstract class GatewayError extends Error {
@@ -596,4 +596,4 @@ declare class GatewayResponseError extends GatewayError {
596
596
  static isInstance(error: unknown): error is GatewayResponseError;
597
597
  }
598
598
 
599
- export { GatewayAuthenticationError, type GatewayCreditsResponse, GatewayError, type GatewayErrorResponse, GatewayInternalServerError, GatewayInvalidRequestError, type GatewayLanguageModelEntry, type GatewayLanguageModelSpecification, type GatewayLanguageModelEntry as GatewayModelEntry, type GatewayModelId, GatewayModelNotFoundError, type GatewayProvider, type GatewayProviderOptions, type GatewayProviderSettings, GatewayRateLimitError, GatewayResponseError, type GatewayVideoModelId, createGatewayProvider as createGateway, createGatewayProvider, gateway };
599
+ export { GatewayAuthenticationError, type GatewayCreditsResponse, GatewayError, type GatewayErrorResponse, GatewayInternalServerError, GatewayInvalidRequestError, type GatewayLanguageModelEntry, type GatewayLanguageModelOptions, type GatewayLanguageModelSpecification, type GatewayLanguageModelEntry as GatewayModelEntry, type GatewayModelId, GatewayModelNotFoundError, type GatewayProvider, type GatewayLanguageModelOptions as GatewayProviderOptions, type GatewayProviderSettings, GatewayRateLimitError, GatewayResponseError, type GatewayVideoModelId, createGatewayProvider as createGateway, createGatewayProvider, gateway };
package/dist/index.js CHANGED
@@ -4,8 +4,8 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
4
  var __getOwnPropNames = Object.getOwnPropertyNames;
5
5
  var __hasOwnProp = Object.prototype.hasOwnProperty;
6
6
  var __export = (target, all) => {
7
- for (var name7 in all)
8
- __defProp(target, name7, { get: all[name7], enumerable: true });
7
+ for (var name8 in all)
8
+ __defProp(target, name8, { get: all[name8], enumerable: true });
9
9
  };
10
10
  var __copyProps = (to, from, except, desc) => {
11
11
  if (from && typeof from === "object" || typeof from === "function") {
@@ -275,7 +275,7 @@ async function createGatewayErrorFromResponse({
275
275
  cause,
276
276
  authMethod
277
277
  }) {
278
- var _a8;
278
+ var _a9;
279
279
  const parseResult = await (0, import_provider_utils2.safeValidateTypes)({
280
280
  value: response,
281
281
  schema: gatewayErrorResponseSchema
@@ -294,7 +294,7 @@ async function createGatewayErrorFromResponse({
294
294
  const validatedResponse = parseResult.value;
295
295
  const errorType = validatedResponse.error.type;
296
296
  const message = validatedResponse.error.message;
297
- const generationId = (_a8 = validatedResponse.generationId) != null ? _a8 : void 0;
297
+ const generationId = (_a9 = validatedResponse.generationId) != null ? _a9 : void 0;
298
298
  switch (errorType) {
299
299
  case "authentication_error":
300
300
  return GatewayAuthenticationError.createContextualError({
@@ -361,22 +361,91 @@ var gatewayErrorResponseSchema = (0, import_provider_utils2.lazySchema)(
361
361
  )
362
362
  );
363
363
 
364
+ // src/errors/gateway-timeout-error.ts
365
+ var name7 = "GatewayTimeoutError";
366
+ var marker8 = `vercel.ai.gateway.error.${name7}`;
367
+ var symbol8 = Symbol.for(marker8);
368
+ var _a8, _b8;
369
+ var GatewayTimeoutError = class _GatewayTimeoutError extends (_b8 = GatewayError, _a8 = symbol8, _b8) {
370
+ constructor({
371
+ message = "Request timed out",
372
+ statusCode = 408,
373
+ cause,
374
+ generationId
375
+ } = {}) {
376
+ super({ message, statusCode, cause, generationId });
377
+ this[_a8] = true;
378
+ // used in isInstance
379
+ this.name = name7;
380
+ this.type = "timeout_error";
381
+ }
382
+ static isInstance(error) {
383
+ return GatewayError.hasMarker(error) && symbol8 in error;
384
+ }
385
+ /**
386
+ * Creates a helpful timeout error message with troubleshooting guidance
387
+ */
388
+ static createTimeoutError({
389
+ originalMessage,
390
+ statusCode = 408,
391
+ cause,
392
+ generationId
393
+ }) {
394
+ const message = `Gateway request timed out: ${originalMessage}
395
+
396
+ 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`;
397
+ return new _GatewayTimeoutError({
398
+ message,
399
+ statusCode,
400
+ cause,
401
+ generationId
402
+ });
403
+ }
404
+ };
405
+
364
406
  // src/errors/as-gateway-error.ts
365
- function asGatewayError(error, authMethod) {
366
- var _a8;
407
+ function isTimeoutError(error) {
408
+ if (!(error instanceof Error)) {
409
+ return false;
410
+ }
411
+ const errorCode = error.code;
412
+ if (typeof errorCode === "string") {
413
+ const undiciTimeoutCodes = [
414
+ "UND_ERR_HEADERS_TIMEOUT",
415
+ "UND_ERR_BODY_TIMEOUT",
416
+ "UND_ERR_CONNECT_TIMEOUT"
417
+ ];
418
+ return undiciTimeoutCodes.includes(errorCode);
419
+ }
420
+ return false;
421
+ }
422
+ async function asGatewayError(error, authMethod) {
423
+ var _a9;
367
424
  if (GatewayError.isInstance(error)) {
368
425
  return error;
369
426
  }
427
+ if (isTimeoutError(error)) {
428
+ return GatewayTimeoutError.createTimeoutError({
429
+ originalMessage: error instanceof Error ? error.message : "Unknown error",
430
+ cause: error
431
+ });
432
+ }
370
433
  if (import_provider.APICallError.isInstance(error)) {
371
- return createGatewayErrorFromResponse({
434
+ if (error.cause && isTimeoutError(error.cause)) {
435
+ return GatewayTimeoutError.createTimeoutError({
436
+ originalMessage: error.message,
437
+ cause: error
438
+ });
439
+ }
440
+ return await createGatewayErrorFromResponse({
372
441
  response: extractApiCallResponse(error),
373
- statusCode: (_a8 = error.statusCode) != null ? _a8 : 500,
442
+ statusCode: (_a9 = error.statusCode) != null ? _a9 : 500,
374
443
  defaultMessage: "Gateway request failed",
375
444
  cause: error,
376
445
  authMethod
377
446
  });
378
447
  }
379
- return createGatewayErrorFromResponse({
448
+ return await createGatewayErrorFromResponse({
380
449
  response: {},
381
450
  statusCode: 500,
382
451
  defaultMessage: error instanceof Error ? `Gateway request failed: ${error.message}` : "Unknown Gateway error",
@@ -675,7 +744,7 @@ var GatewayEmbeddingModel = class {
675
744
  abortSignal,
676
745
  providerOptions
677
746
  }) {
678
- var _a8;
747
+ var _a9;
679
748
  const resolvedHeaders = await (0, import_provider_utils6.resolve)(this.config.headers());
680
749
  try {
681
750
  const {
@@ -706,7 +775,7 @@ var GatewayEmbeddingModel = class {
706
775
  });
707
776
  return {
708
777
  embeddings: responseBody.embeddings,
709
- usage: (_a8 = responseBody.usage) != null ? _a8 : void 0,
778
+ usage: (_a9 = responseBody.usage) != null ? _a9 : void 0,
710
779
  providerMetadata: responseBody.providerMetadata,
711
780
  response: { headers: responseHeaders, body: rawValue },
712
781
  warnings: []
@@ -761,7 +830,7 @@ var GatewayImageModel = class {
761
830
  headers,
762
831
  abortSignal
763
832
  }) {
764
- var _a8, _b8, _c, _d;
833
+ var _a9, _b9, _c, _d;
765
834
  const resolvedHeaders = await (0, import_provider_utils7.resolve)(this.config.headers());
766
835
  try {
767
836
  const {
@@ -801,7 +870,7 @@ var GatewayImageModel = class {
801
870
  return {
802
871
  images: responseBody.images,
803
872
  // Always base64 strings from server
804
- warnings: (_a8 = responseBody.warnings) != null ? _a8 : [],
873
+ warnings: (_a9 = responseBody.warnings) != null ? _a9 : [],
805
874
  providerMetadata: responseBody.providerMetadata,
806
875
  response: {
807
876
  timestamp: /* @__PURE__ */ new Date(),
@@ -810,7 +879,7 @@ var GatewayImageModel = class {
810
879
  },
811
880
  ...responseBody.usage != null && {
812
881
  usage: {
813
- inputTokens: (_b8 = responseBody.usage.inputTokens) != null ? _b8 : void 0,
882
+ inputTokens: (_b9 = responseBody.usage.inputTokens) != null ? _b9 : void 0,
814
883
  outputTokens: (_c = responseBody.usage.outputTokens) != null ? _c : void 0,
815
884
  totalTokens: (_d = responseBody.usage.totalTokens) != null ? _d : void 0
816
885
  }
@@ -898,7 +967,7 @@ var GatewayVideoModel = class {
898
967
  headers,
899
968
  abortSignal
900
969
  }) {
901
- var _a8;
970
+ var _a9;
902
971
  const resolvedHeaders = await (0, import_provider_utils8.resolve)(this.config.headers());
903
972
  try {
904
973
  const {
@@ -936,7 +1005,7 @@ var GatewayVideoModel = class {
936
1005
  });
937
1006
  return {
938
1007
  videos: responseBody.videos,
939
- warnings: (_a8 = responseBody.warnings) != null ? _a8 : [],
1008
+ warnings: (_a9 = responseBody.warnings) != null ? _a9 : [],
940
1009
  providerMetadata: responseBody.providerMetadata,
941
1010
  response: {
942
1011
  timestamp: /* @__PURE__ */ new Date(),
@@ -1179,25 +1248,25 @@ var gatewayTools = {
1179
1248
  var import_oidc = require("@vercel/oidc");
1180
1249
  var import_oidc2 = require("@vercel/oidc");
1181
1250
  async function getVercelRequestId() {
1182
- var _a8;
1183
- return (_a8 = (0, import_oidc.getContext)().headers) == null ? void 0 : _a8["x-vercel-id"];
1251
+ var _a9;
1252
+ return (_a9 = (0, import_oidc.getContext)().headers) == null ? void 0 : _a9["x-vercel-id"];
1184
1253
  }
1185
1254
 
1186
1255
  // src/gateway-provider.ts
1187
1256
  var import_provider_utils12 = require("@ai-sdk/provider-utils");
1188
1257
 
1189
1258
  // src/version.ts
1190
- var VERSION = true ? "3.0.39" : "0.0.0-test";
1259
+ var VERSION = true ? "3.0.41" : "0.0.0-test";
1191
1260
 
1192
1261
  // src/gateway-provider.ts
1193
1262
  var AI_GATEWAY_PROTOCOL_VERSION = "0.0.1";
1194
1263
  function createGatewayProvider(options = {}) {
1195
- var _a8, _b8;
1264
+ var _a9, _b9;
1196
1265
  let pendingMetadata = null;
1197
1266
  let metadataCache = null;
1198
- const cacheRefreshMillis = (_a8 = options.metadataCacheRefreshMillis) != null ? _a8 : 1e3 * 60 * 5;
1267
+ const cacheRefreshMillis = (_a9 = options.metadataCacheRefreshMillis) != null ? _a9 : 1e3 * 60 * 5;
1199
1268
  let lastFetchTime = 0;
1200
- const baseURL = (_b8 = (0, import_provider_utils11.withoutTrailingSlash)(options.baseURL)) != null ? _b8 : "https://ai-gateway.vercel.sh/v3/ai";
1269
+ const baseURL = (_b9 = (0, import_provider_utils11.withoutTrailingSlash)(options.baseURL)) != null ? _b9 : "https://ai-gateway.vercel.sh/v3/ai";
1201
1270
  const getHeaders = async () => {
1202
1271
  try {
1203
1272
  const auth = await getGatewayAuthToken(options);
@@ -1252,8 +1321,8 @@ function createGatewayProvider(options = {}) {
1252
1321
  });
1253
1322
  };
1254
1323
  const getAvailableModels = async () => {
1255
- var _a9, _b9, _c;
1256
- const now = (_c = (_b9 = (_a9 = options._internal) == null ? void 0 : _a9.currentDate) == null ? void 0 : _b9.call(_a9).getTime()) != null ? _c : Date.now();
1324
+ var _a10, _b10, _c;
1325
+ const now = (_c = (_b10 = (_a10 = options._internal) == null ? void 0 : _a10.currentDate) == null ? void 0 : _b10.call(_a10).getTime()) != null ? _c : Date.now();
1257
1326
  if (!pendingMetadata || now - lastFetchTime > cacheRefreshMillis) {
1258
1327
  lastFetchTime = now;
1259
1328
  pendingMetadata = new GatewayFetchMetadata({