@ai-sdk/gateway 1.0.0-beta.2 → 1.0.0-beta.4

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,18 @@
1
1
  # @ai-sdk/gateway
2
2
 
3
+ ## 1.0.0-beta.4
4
+
5
+ ### Patch Changes
6
+
7
+ - 97fedf9: feat (providers/gateway): include description and pricing info in model list
8
+
9
+ ## 1.0.0-beta.3
10
+
11
+ ### Patch Changes
12
+
13
+ - f3639fa: feat (providers/gateway): improve oidc api key client auth flow
14
+ - d454e4b: fix (providers/gateway): fix timestamp error when streaming objects
15
+
3
16
  ## 1.0.0-beta.2
4
17
 
5
18
  ### Patch Changes
package/dist/index.d.mts CHANGED
@@ -14,6 +14,23 @@ interface GatewayLanguageModelEntry {
14
14
  * The display name of the model for presentation in user-facing contexts.
15
15
  */
16
16
  name: string;
17
+ /**
18
+ * Optional description of the model.
19
+ */
20
+ description?: string | null;
21
+ /**
22
+ * Optional pricing information for the model.
23
+ */
24
+ pricing?: {
25
+ /**
26
+ * Cost per input token in USD.
27
+ */
28
+ input: string;
29
+ /**
30
+ * Cost per output token in USD.
31
+ */
32
+ output: string;
33
+ } | null;
17
34
  /**
18
35
  * Additional AI SDK language model specifications for the model.
19
36
  */
@@ -110,6 +127,16 @@ declare class GatewayAuthenticationError extends GatewayError {
110
127
  cause?: unknown;
111
128
  });
112
129
  static isInstance(error: unknown): error is GatewayAuthenticationError;
130
+ /**
131
+ * Creates a contextual error message when authentication fails
132
+ */
133
+ static createContextualError({ apiKeyProvided, oidcTokenProvided, message, statusCode, cause, }: {
134
+ apiKeyProvided: boolean;
135
+ oidcTokenProvided: boolean;
136
+ message?: string;
137
+ statusCode?: number;
138
+ cause?: unknown;
139
+ }): GatewayAuthenticationError;
113
140
  }
114
141
 
115
142
  declare const symbol$4: unique symbol;
package/dist/index.d.ts CHANGED
@@ -14,6 +14,23 @@ interface GatewayLanguageModelEntry {
14
14
  * The display name of the model for presentation in user-facing contexts.
15
15
  */
16
16
  name: string;
17
+ /**
18
+ * Optional description of the model.
19
+ */
20
+ description?: string | null;
21
+ /**
22
+ * Optional pricing information for the model.
23
+ */
24
+ pricing?: {
25
+ /**
26
+ * Cost per input token in USD.
27
+ */
28
+ input: string;
29
+ /**
30
+ * Cost per output token in USD.
31
+ */
32
+ output: string;
33
+ } | null;
17
34
  /**
18
35
  * Additional AI SDK language model specifications for the model.
19
36
  */
@@ -110,6 +127,16 @@ declare class GatewayAuthenticationError extends GatewayError {
110
127
  cause?: unknown;
111
128
  });
112
129
  static isInstance(error: unknown): error is GatewayAuthenticationError;
130
+ /**
131
+ * Creates a contextual error message when authentication fails
132
+ */
133
+ static createContextualError({ apiKeyProvided, oidcTokenProvided, message, statusCode, cause, }: {
134
+ apiKeyProvided: boolean;
135
+ oidcTokenProvided: boolean;
136
+ message?: string;
137
+ statusCode?: number;
138
+ cause?: unknown;
139
+ }): GatewayAuthenticationError;
113
140
  }
114
141
 
115
142
  declare const symbol$4: unique symbol;
package/dist/index.js CHANGED
@@ -76,7 +76,7 @@ var name = "GatewayAuthenticationError";
76
76
  var marker2 = `vercel.ai.gateway.error.${name}`;
77
77
  var symbol2 = Symbol.for(marker2);
78
78
  var _a2, _b2;
79
- var GatewayAuthenticationError = class extends (_b2 = GatewayError, _a2 = symbol2, _b2) {
79
+ var GatewayAuthenticationError = class _GatewayAuthenticationError extends (_b2 = GatewayError, _a2 = symbol2, _b2) {
80
80
  constructor({
81
81
  message = "Authentication failed",
82
82
  statusCode = 401,
@@ -91,6 +91,54 @@ var GatewayAuthenticationError = class extends (_b2 = GatewayError, _a2 = symbol
91
91
  static isInstance(error) {
92
92
  return GatewayError.hasMarker(error) && symbol2 in error;
93
93
  }
94
+ /**
95
+ * Creates a contextual error message when authentication fails
96
+ */
97
+ static createContextualError({
98
+ apiKeyProvided,
99
+ oidcTokenProvided,
100
+ message = "Authentication failed",
101
+ statusCode = 401,
102
+ cause
103
+ }) {
104
+ let contextualMessage;
105
+ if (apiKeyProvided) {
106
+ contextualMessage = `AI Gateway authentication failed: Invalid API key provided.
107
+
108
+ The token is expected to be provided via the 'apiKey' option or 'AI_GATEWAY_API_KEY' environment variable.`;
109
+ } else if (oidcTokenProvided) {
110
+ contextualMessage = `AI Gateway authentication failed: Invalid OIDC token provided.
111
+
112
+ The token is expected to be provided via the 'VERCEL_OIDC_TOKEN' environment variable. It expires every 12 hours.
113
+ - make sure your Vercel project settings have OIDC enabled
114
+ - if running locally with 'vercel dev', the token is automatically obtained and refreshed
115
+ - if running locally with your own dev server, run 'vercel env pull' to fetch the token
116
+ - in production/preview, the token is automatically obtained and refreshed
117
+
118
+ Alternative: Provide an API key via 'apiKey' option or 'AI_GATEWAY_API_KEY' environment variable.`;
119
+ } else {
120
+ contextualMessage = `AI Gateway authentication failed: No authentication provided.
121
+
122
+ Provide either an API key or OIDC token.
123
+
124
+ API key instructions:
125
+
126
+ The token is expected to be provided via the 'apiKey' option or 'AI_GATEWAY_API_KEY' environment variable.
127
+
128
+ OIDC token instructions:
129
+
130
+ The token is expected to be provided via the 'VERCEL_OIDC_TOKEN' environment variable. It expires every 12 hours.
131
+ - make sure your Vercel project settings have OIDC enabled
132
+ - if running locally with 'vercel dev', the token is automatically obtained and refreshed
133
+ - if running locally with your own dev server, run 'vercel env pull' to fetch the token
134
+ - in production/preview, the token is automatically obtained and refreshed`;
135
+ }
136
+ return new _GatewayAuthenticationError({
137
+ message: contextualMessage,
138
+ statusCode,
139
+ cause
140
+ });
141
+ }
94
142
  };
95
143
 
96
144
  // src/errors/gateway-invalid-request-error.ts
@@ -218,7 +266,8 @@ function createGatewayErrorFromResponse({
218
266
  response,
219
267
  statusCode,
220
268
  defaultMessage = "Gateway request failed",
221
- cause
269
+ cause,
270
+ authMethod
222
271
  }) {
223
272
  const parseResult = gatewayErrorResponseSchema.safeParse(response);
224
273
  if (!parseResult.success) {
@@ -235,7 +284,12 @@ function createGatewayErrorFromResponse({
235
284
  const message = validatedResponse.error.message;
236
285
  switch (errorType) {
237
286
  case "authentication_error":
238
- return new GatewayAuthenticationError({ message, statusCode, cause });
287
+ return GatewayAuthenticationError.createContextualError({
288
+ apiKeyProvided: authMethod === "api-key",
289
+ oidcTokenProvided: authMethod === "oidc",
290
+ statusCode,
291
+ cause
292
+ });
239
293
  case "invalid_request_error":
240
294
  return new GatewayInvalidRequestError({ message, statusCode, cause });
241
295
  case "rate_limit_exceeded":
@@ -267,7 +321,7 @@ var gatewayErrorResponseSchema = import_v42.z.object({
267
321
  });
268
322
 
269
323
  // src/errors/as-gateway-error.ts
270
- function asGatewayError(error) {
324
+ function asGatewayError(error, authMethod) {
271
325
  var _a8;
272
326
  if (GatewayError.isInstance(error)) {
273
327
  return error;
@@ -277,14 +331,16 @@ function asGatewayError(error) {
277
331
  response: extractApiCallResponse(error),
278
332
  statusCode: (_a8 = error.statusCode) != null ? _a8 : 500,
279
333
  defaultMessage: "Gateway request failed",
280
- cause: error
334
+ cause: error,
335
+ authMethod
281
336
  });
282
337
  }
283
338
  return createGatewayErrorFromResponse({
284
339
  response: {},
285
340
  statusCode: 500,
286
341
  defaultMessage: error instanceof Error ? `Gateway request failed: ${error.message}` : "Unknown Gateway error",
287
- cause: error
342
+ cause: error,
343
+ authMethod
288
344
  });
289
345
  }
290
346
 
@@ -335,9 +391,15 @@ var gatewayLanguageModelSpecificationSchema = import_v43.z.object({
335
391
  provider: import_v43.z.string(),
336
392
  modelId: import_v43.z.string()
337
393
  });
394
+ var gatewayLanguageModelPricingSchema = import_v43.z.object({
395
+ input: import_v43.z.string(),
396
+ output: import_v43.z.string()
397
+ });
338
398
  var gatewayLanguageModelEntrySchema = import_v43.z.object({
339
399
  id: import_v43.z.string(),
340
400
  name: import_v43.z.string(),
401
+ description: import_v43.z.string().nullish(),
402
+ pricing: gatewayLanguageModelPricingSchema.nullish(),
341
403
  specification: gatewayLanguageModelSpecificationSchema
342
404
  });
343
405
  var gatewayFetchMetadataSchema = import_v43.z.object({
@@ -347,6 +409,22 @@ var gatewayFetchMetadataSchema = import_v43.z.object({
347
409
  // src/gateway-language-model.ts
348
410
  var import_provider_utils2 = require("@ai-sdk/provider-utils");
349
411
  var import_v44 = require("zod/v4");
412
+
413
+ // src/errors/parse-auth-method.ts
414
+ var import_zod = require("zod");
415
+ var GATEWAY_AUTH_METHOD_HEADER = "x-ai-gateway-auth-method";
416
+ function parseAuthMethod(headers) {
417
+ const result = gatewayAuthMethodSchema.safeParse(
418
+ headers[GATEWAY_AUTH_METHOD_HEADER]
419
+ );
420
+ return result.success ? result.data : void 0;
421
+ }
422
+ var gatewayAuthMethodSchema = import_zod.z.union([
423
+ import_zod.z.literal("api-key"),
424
+ import_zod.z.literal("oidc")
425
+ ]);
426
+
427
+ // src/gateway-language-model.ts
350
428
  var GatewayLanguageModel = class {
351
429
  constructor(modelId, config) {
352
430
  this.modelId = modelId;
@@ -359,6 +437,7 @@ var GatewayLanguageModel = class {
359
437
  }
360
438
  async doGenerate(options) {
361
439
  const { abortSignal, ...body } = options;
440
+ const resolvedHeaders = await (0, import_provider_utils2.resolve)(this.config.headers());
362
441
  try {
363
442
  const {
364
443
  responseHeaders,
@@ -367,7 +446,7 @@ var GatewayLanguageModel = class {
367
446
  } = await (0, import_provider_utils2.postJsonToApi)({
368
447
  url: this.getUrl(),
369
448
  headers: (0, import_provider_utils2.combineHeaders)(
370
- await (0, import_provider_utils2.resolve)(this.config.headers()),
449
+ resolvedHeaders,
371
450
  options.headers,
372
451
  this.getModelConfigHeaders(this.modelId, false),
373
452
  await (0, import_provider_utils2.resolve)(this.config.o11yHeaders)
@@ -388,16 +467,17 @@ var GatewayLanguageModel = class {
388
467
  warnings: []
389
468
  };
390
469
  } catch (error) {
391
- throw asGatewayError(error);
470
+ throw asGatewayError(error, parseAuthMethod(resolvedHeaders));
392
471
  }
393
472
  }
394
473
  async doStream(options) {
395
474
  const { abortSignal, ...body } = options;
475
+ const resolvedHeaders = await (0, import_provider_utils2.resolve)(this.config.headers());
396
476
  try {
397
477
  const { value: response, responseHeaders } = await (0, import_provider_utils2.postJsonToApi)({
398
478
  url: this.getUrl(),
399
479
  headers: (0, import_provider_utils2.combineHeaders)(
400
- await (0, import_provider_utils2.resolve)(this.config.headers()),
480
+ resolvedHeaders,
401
481
  options.headers,
402
482
  this.getModelConfigHeaders(this.modelId, true),
403
483
  await (0, import_provider_utils2.resolve)(this.config.o11yHeaders)
@@ -420,6 +500,9 @@ var GatewayLanguageModel = class {
420
500
  if (streamPart.type === "raw" && !options.includeRawChunks) {
421
501
  return;
422
502
  }
503
+ if (streamPart.type === "response-metadata" && streamPart.timestamp && typeof streamPart.timestamp === "string") {
504
+ streamPart.timestamp = new Date(streamPart.timestamp);
505
+ }
423
506
  controller.enqueue(streamPart);
424
507
  } else {
425
508
  controller.error(
@@ -433,17 +516,17 @@ var GatewayLanguageModel = class {
433
516
  response: { headers: responseHeaders }
434
517
  };
435
518
  } catch (error) {
436
- throw asGatewayError(error);
519
+ throw asGatewayError(error, parseAuthMethod(resolvedHeaders));
437
520
  }
438
521
  }
439
522
  isFilePart(part) {
440
523
  return part && typeof part === "object" && "type" in part && part.type === "file";
441
524
  }
442
525
  /**
443
- * Encodes image parts in the prompt to base64. Mutates the passed options
444
- * instance directly to avoid copying the image data.
526
+ * Encodes file parts in the prompt to base64. Mutates the passed options
527
+ * instance directly to avoid copying the file data.
445
528
  * @param options - The options to encode.
446
- * @returns The options with the image parts encoded.
529
+ * @returns The options with the file parts encoded.
447
530
  */
448
531
  maybeEncodeFileParts(options) {
449
532
  for (const message of options.prompt) {
@@ -480,12 +563,7 @@ async function getVercelOidcToken() {
480
563
  const token = (_b8 = (_a8 = getContext().headers) == null ? void 0 : _a8["x-vercel-oidc-token"]) != null ? _b8 : process.env.VERCEL_OIDC_TOKEN;
481
564
  if (!token) {
482
565
  throw new GatewayAuthenticationError({
483
- message: `Failed to get Vercel OIDC token for AI Gateway access.
484
- The token is expected to be provided via the 'VERCEL_OIDC_TOKEN' environment variable. It expires every 12 hours.
485
- - make sure your Vercel project settings have OIDC enabled
486
- - if you're running locally with 'vercel dev' the token is automatically obtained and refreshed for you
487
- - if you're running locally with your own dev server script you can fetch/update the token by running 'vercel env pull'
488
- - in production or preview the token is automatically obtained and refreshed for you`,
566
+ message: "OIDC token not available",
489
567
  statusCode: 401
490
568
  });
491
569
  }
@@ -504,13 +582,6 @@ function getContext() {
504
582
 
505
583
  // src/gateway-provider.ts
506
584
  var AI_GATEWAY_PROTOCOL_VERSION = "0.0.1";
507
- async function getGatewayAuthToken(options) {
508
- var _a8;
509
- return (_a8 = (0, import_provider_utils3.loadOptionalSetting)({
510
- settingValue: options.apiKey,
511
- environmentVariableName: "AI_GATEWAY_API_KEY"
512
- })) != null ? _a8 : await getVercelOidcToken();
513
- }
514
585
  function createGatewayProvider(options = {}) {
515
586
  var _a8, _b8;
516
587
  let pendingMetadata = null;
@@ -519,11 +590,20 @@ function createGatewayProvider(options = {}) {
519
590
  let lastFetchTime = 0;
520
591
  const baseURL = (_b8 = (0, import_provider_utils3.withoutTrailingSlash)(options.baseURL)) != null ? _b8 : "https://ai-gateway.vercel.sh/v1/ai";
521
592
  const getHeaders = async () => {
522
- return {
523
- Authorization: `Bearer ${await getGatewayAuthToken(options)}`,
524
- "ai-gateway-protocol-version": AI_GATEWAY_PROTOCOL_VERSION,
525
- ...options.headers
526
- };
593
+ const auth = await getGatewayAuthToken(options);
594
+ if (auth) {
595
+ return {
596
+ Authorization: `Bearer ${auth.token}`,
597
+ "ai-gateway-protocol-version": AI_GATEWAY_PROTOCOL_VERSION,
598
+ [GATEWAY_AUTH_METHOD_HEADER]: auth.authMethod,
599
+ ...options.headers
600
+ };
601
+ }
602
+ throw GatewayAuthenticationError.createContextualError({
603
+ apiKeyProvided: false,
604
+ oidcTokenProvided: false,
605
+ statusCode: 401
606
+ });
527
607
  };
528
608
  const createLanguageModel = (modelId) => {
529
609
  const deploymentId = (0, import_provider_utils3.loadOptionalSetting)({
@@ -566,8 +646,8 @@ function createGatewayProvider(options = {}) {
566
646
  }).getAvailableModels().then((metadata) => {
567
647
  metadataCache = metadata;
568
648
  return metadata;
569
- }).catch((error) => {
570
- throw asGatewayError(error);
649
+ }).catch(async (error) => {
650
+ throw asGatewayError(error, parseAuthMethod(await getHeaders()));
571
651
  });
572
652
  }
573
653
  return metadataCache ? Promise.resolve(metadataCache) : pendingMetadata;
@@ -591,6 +671,27 @@ function createGatewayProvider(options = {}) {
591
671
  return provider;
592
672
  }
593
673
  var gateway = createGatewayProvider();
674
+ async function getGatewayAuthToken(options) {
675
+ const apiKey = (0, import_provider_utils3.loadOptionalSetting)({
676
+ settingValue: options.apiKey,
677
+ environmentVariableName: "AI_GATEWAY_API_KEY"
678
+ });
679
+ if (apiKey) {
680
+ return {
681
+ token: apiKey,
682
+ authMethod: "api-key"
683
+ };
684
+ }
685
+ try {
686
+ const oidcToken = await getVercelOidcToken();
687
+ return {
688
+ token: oidcToken,
689
+ authMethod: "oidc"
690
+ };
691
+ } catch (error) {
692
+ return null;
693
+ }
694
+ }
594
695
  // Annotate the CommonJS export names for ESM import in node:
595
696
  0 && (module.exports = {
596
697
  GatewayAuthenticationError,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/gateway-provider.ts","../src/errors/as-gateway-error.ts","../src/errors/create-gateway-error.ts","../src/errors/gateway-error.ts","../src/errors/gateway-authentication-error.ts","../src/errors/gateway-invalid-request-error.ts","../src/errors/gateway-rate-limit-error.ts","../src/errors/gateway-model-not-found-error.ts","../src/errors/gateway-internal-server-error.ts","../src/errors/gateway-response-error.ts","../src/errors/extract-api-call-response.ts","../src/gateway-fetch-metadata.ts","../src/gateway-language-model.ts","../src/vercel-environment.ts"],"sourcesContent":["export type { GatewayModelId } from './gateway-language-model-settings';\nexport type {\n GatewayLanguageModelEntry,\n GatewayLanguageModelSpecification,\n} from './gateway-model-entry';\nexport {\n createGatewayProvider,\n createGatewayProvider as createGateway,\n gateway,\n} from './gateway-provider';\nexport type {\n GatewayProvider,\n GatewayProviderSettings,\n} from './gateway-provider';\nexport {\n GatewayError,\n GatewayAuthenticationError,\n GatewayInvalidRequestError,\n GatewayRateLimitError,\n GatewayModelNotFoundError,\n GatewayInternalServerError,\n GatewayResponseError,\n} from './errors';\nexport type { GatewayErrorResponse } from './errors';\n","import type { LanguageModelV2, ProviderV2 } from '@ai-sdk/provider';\nimport { NoSuchModelError } from '@ai-sdk/provider';\nimport {\n loadOptionalSetting,\n withoutTrailingSlash,\n} from '@ai-sdk/provider-utils';\nimport { type FetchFunction } from '@ai-sdk/provider-utils';\nimport { asGatewayError } from './errors';\nimport {\n GatewayFetchMetadata,\n type GatewayFetchMetadataResponse,\n} from './gateway-fetch-metadata';\nimport { GatewayLanguageModel } from './gateway-language-model';\nimport type { GatewayModelId } from './gateway-language-model-settings';\nimport { getVercelOidcToken, getVercelRequestId } from './vercel-environment';\n\nexport interface GatewayProvider extends ProviderV2 {\n (modelId: GatewayModelId): LanguageModelV2;\n\n /**\nCreates a model for text generation.\n*/\n languageModel(modelId: GatewayModelId): LanguageModelV2;\n\n /**\nReturns available providers and models for use with the remote provider.\n */\n getAvailableModels(): Promise<GatewayFetchMetadataResponse>;\n}\n\nexport interface GatewayProviderSettings {\n /**\nThe base URL prefix for API calls. Defaults to `https://ai-gateway.vercel.sh/v1/ai`.\n */\n baseURL?: string;\n\n /**\nAPI key that is being sent using the `Authorization` header.\n */\n apiKey?: string;\n\n /**\nCustom headers to include in the requests.\n */\n headers?: Record<string, string>;\n\n /**\nCustom fetch implementation. You can use it as a middleware to intercept requests,\nor to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n\n /**\nHow frequently to refresh the metadata cache in milliseconds.\n */\n metadataCacheRefreshMillis?: number;\n\n /**\n * @internal For testing purposes only\n */\n _internal?: {\n currentDate?: () => Date;\n };\n}\n\nconst AI_GATEWAY_PROTOCOL_VERSION = '0.0.1';\n\nexport async function getGatewayAuthToken(options: GatewayProviderSettings) {\n return (\n loadOptionalSetting({\n settingValue: options.apiKey,\n environmentVariableName: 'AI_GATEWAY_API_KEY',\n }) ?? (await getVercelOidcToken())\n );\n}\n\n/**\nCreate a remote provider instance.\n */\nexport function createGatewayProvider(\n options: GatewayProviderSettings = {},\n): GatewayProvider {\n let pendingMetadata: Promise<GatewayFetchMetadataResponse> | null = null;\n let metadataCache: GatewayFetchMetadataResponse | null = null;\n const cacheRefreshMillis =\n options.metadataCacheRefreshMillis ?? 1000 * 60 * 5;\n let lastFetchTime = 0;\n\n const baseURL =\n withoutTrailingSlash(options.baseURL) ??\n 'https://ai-gateway.vercel.sh/v1/ai';\n\n const getHeaders = async () => {\n return {\n Authorization: `Bearer ${await getGatewayAuthToken(options)}`,\n 'ai-gateway-protocol-version': AI_GATEWAY_PROTOCOL_VERSION,\n ...options.headers,\n };\n };\n\n const createLanguageModel = (modelId: GatewayModelId) => {\n const deploymentId = loadOptionalSetting({\n settingValue: undefined,\n environmentVariableName: 'VERCEL_DEPLOYMENT_ID',\n });\n const environment = loadOptionalSetting({\n settingValue: undefined,\n environmentVariableName: 'VERCEL_ENV',\n });\n const region = loadOptionalSetting({\n settingValue: undefined,\n environmentVariableName: 'VERCEL_REGION',\n });\n return new GatewayLanguageModel(modelId, {\n provider: 'gateway',\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n o11yHeaders: async () => {\n const requestId = await getVercelRequestId();\n return {\n ...(deploymentId && { 'ai-o11y-deployment-id': deploymentId }),\n ...(environment && { 'ai-o11y-environment': environment }),\n ...(region && { 'ai-o11y-region': region }),\n ...(requestId && { 'ai-o11y-request-id': requestId }),\n };\n },\n });\n };\n\n const getAvailableModels = async () => {\n const now = options._internal?.currentDate?.().getTime() ?? Date.now();\n if (!pendingMetadata || now - lastFetchTime > cacheRefreshMillis) {\n lastFetchTime = now;\n pendingMetadata = new GatewayFetchMetadata({\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n })\n .getAvailableModels()\n .then(metadata => {\n metadataCache = metadata;\n return metadata;\n })\n .catch((error: unknown) => {\n throw asGatewayError(error);\n });\n }\n\n return metadataCache ? Promise.resolve(metadataCache) : pendingMetadata;\n };\n\n const provider = function (modelId: GatewayModelId) {\n if (new.target) {\n throw new Error(\n 'The Gateway Provider model function cannot be called with the new keyword.',\n );\n }\n\n return createLanguageModel(modelId);\n };\n\n provider.getAvailableModels = getAvailableModels;\n provider.imageModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'imageModel' });\n };\n provider.languageModel = createLanguageModel;\n provider.textEmbeddingModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'textEmbeddingModel' });\n };\n\n return provider;\n}\n\nexport const gateway = createGatewayProvider();\n","import { APICallError } from '@ai-sdk/provider';\nimport { extractApiCallResponse, GatewayError } from '.';\nimport { createGatewayErrorFromResponse } from './create-gateway-error';\n\nexport function asGatewayError(error: unknown) {\n if (GatewayError.isInstance(error)) {\n return error;\n }\n\n if (APICallError.isInstance(error)) {\n return createGatewayErrorFromResponse({\n response: extractApiCallResponse(error),\n statusCode: error.statusCode ?? 500,\n defaultMessage: 'Gateway request failed',\n cause: error,\n });\n }\n\n return createGatewayErrorFromResponse({\n response: {},\n statusCode: 500,\n defaultMessage:\n error instanceof Error\n ? `Gateway request failed: ${error.message}`\n : 'Unknown Gateway error',\n cause: error,\n });\n}\n","import { z } from 'zod/v4';\nimport type { GatewayError } from './gateway-error';\nimport { GatewayAuthenticationError } from './gateway-authentication-error';\nimport { GatewayInvalidRequestError } from './gateway-invalid-request-error';\nimport { GatewayRateLimitError } from './gateway-rate-limit-error';\nimport {\n GatewayModelNotFoundError,\n modelNotFoundParamSchema,\n} from './gateway-model-not-found-error';\nimport { GatewayInternalServerError } from './gateway-internal-server-error';\nimport { GatewayResponseError } from './gateway-response-error';\n\nexport function createGatewayErrorFromResponse({\n response,\n statusCode,\n defaultMessage = 'Gateway request failed',\n cause,\n}: {\n response: unknown;\n statusCode: number;\n defaultMessage?: string;\n cause?: unknown;\n}): GatewayError {\n const parseResult = gatewayErrorResponseSchema.safeParse(response);\n if (!parseResult.success) {\n return new GatewayResponseError({\n message: `Invalid error response format: ${defaultMessage}`,\n statusCode,\n response,\n validationError: parseResult.error,\n cause,\n });\n }\n\n const validatedResponse: GatewayErrorResponse = parseResult.data;\n const errorType = validatedResponse.error.type;\n const message = validatedResponse.error.message;\n\n switch (errorType) {\n case 'authentication_error':\n return new GatewayAuthenticationError({ message, statusCode, cause });\n case 'invalid_request_error':\n return new GatewayInvalidRequestError({ message, statusCode, cause });\n case 'rate_limit_exceeded':\n return new GatewayRateLimitError({ message, statusCode, cause });\n case 'model_not_found': {\n const modelResult = modelNotFoundParamSchema.safeParse(\n validatedResponse.error.param,\n );\n return new GatewayModelNotFoundError({\n message,\n statusCode,\n modelId: modelResult.success ? modelResult.data.modelId : undefined,\n cause,\n });\n }\n case 'internal_server_error':\n return new GatewayInternalServerError({ message, statusCode, cause });\n default:\n return new GatewayInternalServerError({ message, statusCode, cause });\n }\n}\n\nconst gatewayErrorResponseSchema = z.object({\n error: z.object({\n message: z.string(),\n type: z.string().nullish(),\n param: z.unknown().nullish(),\n code: z.union([z.string(), z.number()]).nullish(),\n }),\n});\n\nexport type GatewayErrorResponse = z.infer<typeof gatewayErrorResponseSchema>;\n","const marker = 'vercel.ai.gateway.error';\nconst symbol = Symbol.for(marker);\n\nexport abstract class GatewayError extends Error {\n private readonly [symbol] = true; // used in isInstance\n\n abstract readonly name: string;\n abstract readonly type: string;\n readonly statusCode: number;\n readonly cause?: unknown;\n\n constructor({\n message,\n statusCode = 500,\n cause,\n }: {\n message: string;\n statusCode?: number;\n cause?: unknown;\n }) {\n super(message);\n this.statusCode = statusCode;\n this.cause = cause;\n }\n\n /**\n * Checks if the given error is a Gateway Error.\n * @param {unknown} error - The error to check.\n * @returns {boolean} True if the error is a Gateway Error, false otherwise.\n */\n static isInstance(error: unknown): error is GatewayError {\n return GatewayError.hasMarker(error);\n }\n\n static hasMarker(error: unknown): error is GatewayError {\n return (\n typeof error === 'object' &&\n error !== null &&\n symbol in error &&\n (error as any)[symbol] === true\n );\n }\n}\n","import { GatewayError } from './gateway-error';\n\nconst name = 'GatewayAuthenticationError';\nconst marker = `vercel.ai.gateway.error.${name}`;\nconst symbol = Symbol.for(marker);\n\n/**\n * Authentication failed - invalid API key or OIDC token\n */\nexport class GatewayAuthenticationError extends GatewayError {\n private readonly [symbol] = true; // used in isInstance\n\n readonly name = name;\n readonly type = 'authentication_error';\n\n constructor({\n message = 'Authentication failed',\n statusCode = 401,\n cause,\n }: {\n message?: string;\n statusCode?: number;\n cause?: unknown;\n } = {}) {\n super({ message, statusCode, cause });\n }\n\n static isInstance(error: unknown): error is GatewayAuthenticationError {\n return GatewayError.hasMarker(error) && symbol in error;\n }\n}\n","import { GatewayError } from './gateway-error';\n\nconst name = 'GatewayInvalidRequestError';\nconst marker = `vercel.ai.gateway.error.${name}`;\nconst symbol = Symbol.for(marker);\n\n/**\n * Invalid request - missing headers, malformed data, etc.\n */\nexport class GatewayInvalidRequestError extends GatewayError {\n private readonly [symbol] = true; // used in isInstance\n\n readonly name = name;\n readonly type = 'invalid_request_error';\n\n constructor({\n message = 'Invalid request',\n statusCode = 400,\n cause,\n }: {\n message?: string;\n statusCode?: number;\n cause?: unknown;\n } = {}) {\n super({ message, statusCode, cause });\n }\n\n static isInstance(error: unknown): error is GatewayInvalidRequestError {\n return GatewayError.hasMarker(error) && symbol in error;\n }\n}\n","import { GatewayError } from './gateway-error';\n\nconst name = 'GatewayRateLimitError';\nconst marker = `vercel.ai.gateway.error.${name}`;\nconst symbol = Symbol.for(marker);\n\n/**\n * Rate limit exceeded.\n */\nexport class GatewayRateLimitError extends GatewayError {\n private readonly [symbol] = true; // used in isInstance\n\n readonly name = name;\n readonly type = 'rate_limit_exceeded';\n\n constructor({\n message = 'Rate limit exceeded',\n statusCode = 429,\n cause,\n }: {\n message?: string;\n statusCode?: number;\n cause?: unknown;\n } = {}) {\n super({ message, statusCode, cause });\n }\n\n static isInstance(error: unknown): error is GatewayRateLimitError {\n return GatewayError.hasMarker(error) && symbol in error;\n }\n}\n","import { z } from 'zod/v4';\nimport { GatewayError } from './gateway-error';\n\nconst name = 'GatewayModelNotFoundError';\nconst marker = `vercel.ai.gateway.error.${name}`;\nconst symbol = Symbol.for(marker);\n\nexport const modelNotFoundParamSchema = z.object({\n modelId: z.string(),\n});\n\n/**\n * Model not found or not available\n */\nexport class GatewayModelNotFoundError extends GatewayError {\n private readonly [symbol] = true; // used in isInstance\n\n readonly name = name;\n readonly type = 'model_not_found';\n readonly modelId?: string;\n\n constructor({\n message = 'Model not found',\n statusCode = 404,\n modelId,\n cause,\n }: {\n message?: string;\n statusCode?: number;\n modelId?: string;\n cause?: unknown;\n } = {}) {\n super({ message, statusCode, cause });\n this.modelId = modelId;\n }\n\n static isInstance(error: unknown): error is GatewayModelNotFoundError {\n return GatewayError.hasMarker(error) && symbol in error;\n }\n}\n","import { GatewayError } from './gateway-error';\n\nconst name = 'GatewayInternalServerError';\nconst marker = `vercel.ai.gateway.error.${name}`;\nconst symbol = Symbol.for(marker);\n\n/**\n * Internal server error from the Gateway\n */\nexport class GatewayInternalServerError extends GatewayError {\n private readonly [symbol] = true; // used in isInstance\n\n readonly name = name;\n readonly type = 'internal_server_error';\n\n constructor({\n message = 'Internal server error',\n statusCode = 500,\n cause,\n }: {\n message?: string;\n statusCode?: number;\n cause?: unknown;\n } = {}) {\n super({ message, statusCode, cause });\n }\n\n static isInstance(error: unknown): error is GatewayInternalServerError {\n return GatewayError.hasMarker(error) && symbol in error;\n }\n}\n","import { GatewayError } from './gateway-error';\nimport type { ZodError } from 'zod/v4';\n\nconst name = 'GatewayResponseError';\nconst marker = `vercel.ai.gateway.error.${name}`;\nconst symbol = Symbol.for(marker);\n\n/**\n * Gateway response parsing error\n */\nexport class GatewayResponseError extends GatewayError {\n private readonly [symbol] = true; // used in isInstance\n\n readonly name = name;\n readonly type = 'response_error';\n readonly response?: unknown;\n readonly validationError?: ZodError;\n\n constructor({\n message = 'Invalid response from Gateway',\n statusCode = 502,\n response,\n validationError,\n cause,\n }: {\n message?: string;\n statusCode?: number;\n response?: unknown;\n validationError?: ZodError;\n cause?: unknown;\n } = {}) {\n super({ message, statusCode, cause });\n this.response = response;\n this.validationError = validationError;\n }\n\n static isInstance(error: unknown): error is GatewayResponseError {\n return GatewayError.hasMarker(error) && symbol in error;\n }\n}\n","import type { APICallError } from '@ai-sdk/provider';\n\nexport function extractApiCallResponse(error: APICallError): unknown {\n if (error.data !== undefined) {\n return error.data;\n }\n if (error.responseBody != null) {\n try {\n return JSON.parse(error.responseBody);\n } catch {\n return error.responseBody;\n }\n }\n return {};\n}\n","import {\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n getFromApi,\n resolve,\n} from '@ai-sdk/provider-utils';\nimport { asGatewayError } from './errors';\nimport type { GatewayConfig } from './gateway-config';\nimport type { GatewayLanguageModelEntry } from './gateway-model-entry';\nimport { z } from 'zod/v4';\n\ntype GatewayFetchMetadataConfig = GatewayConfig;\n\nexport interface GatewayFetchMetadataResponse {\n models: GatewayLanguageModelEntry[];\n}\n\nexport class GatewayFetchMetadata {\n constructor(private readonly config: GatewayFetchMetadataConfig) {}\n\n async getAvailableModels(): Promise<GatewayFetchMetadataResponse> {\n try {\n const { value } = await getFromApi({\n url: `${this.config.baseURL}/config`,\n headers: await resolve(this.config.headers()),\n successfulResponseHandler: createJsonResponseHandler(\n gatewayFetchMetadataSchema,\n ),\n failedResponseHandler: createJsonErrorResponseHandler({\n errorSchema: z.any(),\n errorToMessage: data => data,\n }),\n fetch: this.config.fetch,\n });\n\n return value;\n } catch (error) {\n throw asGatewayError(error);\n }\n }\n}\n\nconst gatewayLanguageModelSpecificationSchema = z.object({\n specificationVersion: z.literal('v2'),\n provider: z.string(),\n modelId: z.string(),\n});\n\nconst gatewayLanguageModelEntrySchema = z.object({\n id: z.string(),\n name: z.string(),\n specification: gatewayLanguageModelSpecificationSchema,\n});\n\nconst gatewayFetchMetadataSchema = z.object({\n models: z.array(gatewayLanguageModelEntrySchema),\n});\n","import type {\n LanguageModelV2,\n LanguageModelV2CallOptions,\n LanguageModelV2FilePart,\n LanguageModelV2StreamPart,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createEventSourceResponseHandler,\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n postJsonToApi,\n resolve,\n type ParseResult,\n type Resolvable,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport type { GatewayConfig } from './gateway-config';\nimport type { GatewayModelId } from './gateway-language-model-settings';\nimport { asGatewayError } from './errors';\n\ntype GatewayChatConfig = GatewayConfig & {\n provider: string;\n o11yHeaders: Resolvable<Record<string, string>>;\n};\n\nexport class GatewayLanguageModel implements LanguageModelV2 {\n readonly specificationVersion = 'v2';\n readonly supportedUrls = { '*/*': [/.*/] };\n\n constructor(\n readonly modelId: GatewayModelId,\n private readonly config: GatewayChatConfig,\n ) {}\n\n get provider(): string {\n return this.config.provider;\n }\n\n async doGenerate(\n options: Parameters<LanguageModelV2['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV2['doGenerate']>>> {\n const { abortSignal, ...body } = options;\n try {\n const {\n responseHeaders,\n value: responseBody,\n rawValue: rawResponse,\n } = await postJsonToApi({\n url: this.getUrl(),\n headers: combineHeaders(\n await resolve(this.config.headers()),\n options.headers,\n this.getModelConfigHeaders(this.modelId, false),\n await resolve(this.config.o11yHeaders),\n ),\n body: this.maybeEncodeFileParts(body),\n successfulResponseHandler: createJsonResponseHandler(z.any()),\n failedResponseHandler: createJsonErrorResponseHandler({\n errorSchema: z.any(),\n errorToMessage: data => data,\n }),\n ...(abortSignal && { abortSignal }),\n fetch: this.config.fetch,\n });\n\n return {\n ...responseBody,\n request: { body },\n response: { headers: responseHeaders, body: rawResponse },\n warnings: [],\n };\n } catch (error) {\n throw asGatewayError(error);\n }\n }\n\n async doStream(\n options: Parameters<LanguageModelV2['doStream']>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV2['doStream']>>> {\n const { abortSignal, ...body } = options;\n\n try {\n const { value: response, responseHeaders } = await postJsonToApi({\n url: this.getUrl(),\n headers: combineHeaders(\n await resolve(this.config.headers()),\n options.headers,\n this.getModelConfigHeaders(this.modelId, true),\n await resolve(this.config.o11yHeaders),\n ),\n body: this.maybeEncodeFileParts(body),\n successfulResponseHandler: createEventSourceResponseHandler(z.any()),\n failedResponseHandler: createJsonErrorResponseHandler({\n errorSchema: z.any(),\n errorToMessage: data => data,\n }),\n ...(abortSignal && { abortSignal }),\n fetch: this.config.fetch,\n });\n\n return {\n stream: response.pipeThrough(\n new TransformStream<\n ParseResult<LanguageModelV2StreamPart>,\n LanguageModelV2StreamPart\n >({\n transform(chunk, controller) {\n if (chunk.success) {\n const streamPart = chunk.value;\n\n // Handle raw chunks: if this is a raw chunk from the gateway API,\n // only emit it if includeRawChunks is true\n if (streamPart.type === 'raw' && !options.includeRawChunks) {\n return; // Skip raw chunks if not requested\n }\n\n controller.enqueue(streamPart);\n } else {\n controller.error(\n (chunk as { success: false; error: unknown }).error,\n );\n }\n },\n }),\n ),\n request: { body },\n response: { headers: responseHeaders },\n };\n } catch (error) {\n throw asGatewayError(error);\n }\n }\n\n private isFilePart(part: unknown) {\n return (\n part && typeof part === 'object' && 'type' in part && part.type === 'file'\n );\n }\n\n /**\n * Encodes image parts in the prompt to base64. Mutates the passed options\n * instance directly to avoid copying the image data.\n * @param options - The options to encode.\n * @returns The options with the image parts encoded.\n */\n private maybeEncodeFileParts(options: LanguageModelV2CallOptions) {\n for (const message of options.prompt) {\n for (const part of message.content) {\n if (this.isFilePart(part)) {\n const filePart = part as LanguageModelV2FilePart;\n // If the image part is a URL it will get cleanly converted to a string.\n // If it's a binary image attachment we convert it to a data url.\n // In either case, server-side we should only ever see URLs as strings.\n if (filePart.data instanceof Uint8Array) {\n const buffer = Uint8Array.from(filePart.data);\n const base64Data = Buffer.from(buffer).toString('base64');\n filePart.data = new URL(\n `data:${filePart.mediaType || 'application/octet-stream'};base64,${base64Data}`,\n );\n }\n }\n }\n }\n return options;\n }\n\n private getUrl() {\n return `${this.config.baseURL}/language-model`;\n }\n\n private getModelConfigHeaders(modelId: string, streaming: boolean) {\n return {\n 'ai-language-model-specification-version': '2',\n 'ai-language-model-id': modelId,\n 'ai-language-model-streaming': String(streaming),\n };\n }\n}\n","import { GatewayAuthenticationError } from './errors';\n\nexport async function getVercelOidcToken(): Promise<string> {\n const token =\n getContext().headers?.['x-vercel-oidc-token'] ??\n process.env.VERCEL_OIDC_TOKEN;\n\n if (!token) {\n throw new GatewayAuthenticationError({\n message: `Failed to get Vercel OIDC token for AI Gateway access.\nThe token is expected to be provided via the 'VERCEL_OIDC_TOKEN' environment variable. It expires every 12 hours.\n- make sure your Vercel project settings have OIDC enabled\n- if you're running locally with 'vercel dev' the token is automatically obtained and refreshed for you\n- if you're running locally with your own dev server script you can fetch/update the token by running 'vercel env pull'\n- in production or preview the token is automatically obtained and refreshed for you`,\n statusCode: 401,\n });\n }\n\n return token;\n}\n\nexport async function getVercelRequestId(): Promise<string | undefined> {\n return getContext().headers?.['x-vercel-id'];\n}\n\ntype Context = {\n headers?: Record<string, string>;\n};\n\nconst SYMBOL_FOR_REQ_CONTEXT = Symbol.for('@vercel/request-context');\n\nfunction getContext(): Context {\n const fromSymbol: typeof globalThis & {\n [SYMBOL_FOR_REQ_CONTEXT]?: { get?: () => Context };\n } = globalThis;\n return fromSymbol[SYMBOL_FOR_REQ_CONTEXT]?.get?.() ?? {};\n}\n"],"mappings":"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","names":["import_provider","import_provider_utils","import_v4","marker","symbol","_a","_b","name","marker","symbol","_a","_b","name","marker","symbol","_a","_b","name","marker","symbol","_a","_b","name","marker","symbol","_a","_b","name","marker","symbol","_a","_b","_a","import_v4","import_provider_utils","import_v4","_a","_b","_a","_b"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/gateway-provider.ts","../src/errors/as-gateway-error.ts","../src/errors/create-gateway-error.ts","../src/errors/gateway-error.ts","../src/errors/gateway-authentication-error.ts","../src/errors/gateway-invalid-request-error.ts","../src/errors/gateway-rate-limit-error.ts","../src/errors/gateway-model-not-found-error.ts","../src/errors/gateway-internal-server-error.ts","../src/errors/gateway-response-error.ts","../src/errors/extract-api-call-response.ts","../src/gateway-fetch-metadata.ts","../src/gateway-language-model.ts","../src/errors/parse-auth-method.ts","../src/vercel-environment.ts"],"sourcesContent":["export type { GatewayModelId } from './gateway-language-model-settings';\nexport type {\n GatewayLanguageModelEntry,\n GatewayLanguageModelSpecification,\n} from './gateway-model-entry';\nexport {\n createGatewayProvider,\n createGatewayProvider as createGateway,\n gateway,\n} from './gateway-provider';\nexport type {\n GatewayProvider,\n GatewayProviderSettings,\n} from './gateway-provider';\nexport {\n GatewayError,\n GatewayAuthenticationError,\n GatewayInvalidRequestError,\n GatewayRateLimitError,\n GatewayModelNotFoundError,\n GatewayInternalServerError,\n GatewayResponseError,\n} from './errors';\nexport type { GatewayErrorResponse } from './errors';\n","import type { LanguageModelV2, ProviderV2 } from '@ai-sdk/provider';\nimport { NoSuchModelError } from '@ai-sdk/provider';\nimport {\n loadOptionalSetting,\n withoutTrailingSlash,\n} from '@ai-sdk/provider-utils';\nimport { type FetchFunction } from '@ai-sdk/provider-utils';\nimport { asGatewayError } from './errors';\nimport {\n GatewayFetchMetadata,\n type GatewayFetchMetadataResponse,\n} from './gateway-fetch-metadata';\nimport { GatewayLanguageModel } from './gateway-language-model';\nimport type { GatewayModelId } from './gateway-language-model-settings';\nimport { getVercelOidcToken, getVercelRequestId } from './vercel-environment';\nimport { GatewayAuthenticationError } from './errors';\nimport { z } from 'zod';\nimport {\n GATEWAY_AUTH_METHOD_HEADER,\n parseAuthMethod,\n} from './errors/parse-auth-method';\n\nexport interface GatewayProvider extends ProviderV2 {\n (modelId: GatewayModelId): LanguageModelV2;\n\n /**\nCreates a model for text generation.\n*/\n languageModel(modelId: GatewayModelId): LanguageModelV2;\n\n /**\nReturns available providers and models for use with the remote provider.\n */\n getAvailableModels(): Promise<GatewayFetchMetadataResponse>;\n}\n\nexport interface GatewayProviderSettings {\n /**\nThe base URL prefix for API calls. Defaults to `https://ai-gateway.vercel.sh/v1/ai`.\n */\n baseURL?: string;\n\n /**\nAPI key that is being sent using the `Authorization` header.\n */\n apiKey?: string;\n\n /**\nCustom headers to include in the requests.\n */\n headers?: Record<string, string>;\n\n /**\nCustom fetch implementation. You can use it as a middleware to intercept requests,\nor to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n\n /**\nHow frequently to refresh the metadata cache in milliseconds.\n */\n metadataCacheRefreshMillis?: number;\n\n /**\n * @internal For testing purposes only\n */\n _internal?: {\n currentDate?: () => Date;\n };\n}\n\nconst AI_GATEWAY_PROTOCOL_VERSION = '0.0.1';\n\n/**\nCreate a remote provider instance.\n */\nexport function createGatewayProvider(\n options: GatewayProviderSettings = {},\n): GatewayProvider {\n let pendingMetadata: Promise<GatewayFetchMetadataResponse> | null = null;\n let metadataCache: GatewayFetchMetadataResponse | null = null;\n const cacheRefreshMillis =\n options.metadataCacheRefreshMillis ?? 1000 * 60 * 5;\n let lastFetchTime = 0;\n\n const baseURL =\n withoutTrailingSlash(options.baseURL) ??\n 'https://ai-gateway.vercel.sh/v1/ai';\n\n const getHeaders = async () => {\n const auth = await getGatewayAuthToken(options);\n if (auth) {\n return {\n Authorization: `Bearer ${auth.token}`,\n 'ai-gateway-protocol-version': AI_GATEWAY_PROTOCOL_VERSION,\n [GATEWAY_AUTH_METHOD_HEADER]: auth.authMethod,\n ...options.headers,\n };\n }\n\n throw GatewayAuthenticationError.createContextualError({\n apiKeyProvided: false,\n oidcTokenProvided: false,\n statusCode: 401,\n });\n };\n\n const createLanguageModel = (modelId: GatewayModelId) => {\n const deploymentId = loadOptionalSetting({\n settingValue: undefined,\n environmentVariableName: 'VERCEL_DEPLOYMENT_ID',\n });\n const environment = loadOptionalSetting({\n settingValue: undefined,\n environmentVariableName: 'VERCEL_ENV',\n });\n const region = loadOptionalSetting({\n settingValue: undefined,\n environmentVariableName: 'VERCEL_REGION',\n });\n\n return new GatewayLanguageModel(modelId, {\n provider: 'gateway',\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n o11yHeaders: async () => {\n const requestId = await getVercelRequestId();\n return {\n ...(deploymentId && { 'ai-o11y-deployment-id': deploymentId }),\n ...(environment && { 'ai-o11y-environment': environment }),\n ...(region && { 'ai-o11y-region': region }),\n ...(requestId && { 'ai-o11y-request-id': requestId }),\n };\n },\n });\n };\n\n const getAvailableModels = async () => {\n const now = options._internal?.currentDate?.().getTime() ?? Date.now();\n if (!pendingMetadata || now - lastFetchTime > cacheRefreshMillis) {\n lastFetchTime = now;\n\n pendingMetadata = new GatewayFetchMetadata({\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n })\n .getAvailableModels()\n .then(metadata => {\n metadataCache = metadata;\n return metadata;\n })\n .catch(async (error: unknown) => {\n throw asGatewayError(error, parseAuthMethod(await getHeaders()));\n });\n }\n\n return metadataCache ? Promise.resolve(metadataCache) : pendingMetadata;\n };\n\n const provider = function (modelId: GatewayModelId) {\n if (new.target) {\n throw new Error(\n 'The Gateway Provider model function cannot be called with the new keyword.',\n );\n }\n\n return createLanguageModel(modelId);\n };\n\n provider.getAvailableModels = getAvailableModels;\n provider.imageModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'imageModel' });\n };\n provider.languageModel = createLanguageModel;\n provider.textEmbeddingModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'textEmbeddingModel' });\n };\n\n return provider;\n}\n\nexport const gateway = createGatewayProvider();\n\nexport async function getGatewayAuthToken(\n options: GatewayProviderSettings,\n): Promise<{\n token: string;\n authMethod: 'api-key' | 'oidc';\n} | null> {\n const apiKey = loadOptionalSetting({\n settingValue: options.apiKey,\n environmentVariableName: 'AI_GATEWAY_API_KEY',\n });\n\n if (apiKey) {\n return {\n token: apiKey,\n authMethod: 'api-key',\n };\n }\n\n try {\n const oidcToken = await getVercelOidcToken();\n return {\n token: oidcToken,\n authMethod: 'oidc',\n };\n } catch (error) {\n return null;\n }\n}\n","import { APICallError } from '@ai-sdk/provider';\nimport { extractApiCallResponse, GatewayError } from '.';\nimport { createGatewayErrorFromResponse } from './create-gateway-error';\n\nexport function asGatewayError(\n error: unknown,\n authMethod?: 'api-key' | 'oidc',\n) {\n if (GatewayError.isInstance(error)) {\n return error;\n }\n\n if (APICallError.isInstance(error)) {\n return createGatewayErrorFromResponse({\n response: extractApiCallResponse(error),\n statusCode: error.statusCode ?? 500,\n defaultMessage: 'Gateway request failed',\n cause: error,\n authMethod,\n });\n }\n\n return createGatewayErrorFromResponse({\n response: {},\n statusCode: 500,\n defaultMessage:\n error instanceof Error\n ? `Gateway request failed: ${error.message}`\n : 'Unknown Gateway error',\n cause: error,\n authMethod,\n });\n}\n","import { z } from 'zod/v4';\nimport type { GatewayError } from './gateway-error';\nimport { GatewayAuthenticationError } from './gateway-authentication-error';\nimport { GatewayInvalidRequestError } from './gateway-invalid-request-error';\nimport { GatewayRateLimitError } from './gateway-rate-limit-error';\nimport {\n GatewayModelNotFoundError,\n modelNotFoundParamSchema,\n} from './gateway-model-not-found-error';\nimport { GatewayInternalServerError } from './gateway-internal-server-error';\nimport { GatewayResponseError } from './gateway-response-error';\n\nexport function createGatewayErrorFromResponse({\n response,\n statusCode,\n defaultMessage = 'Gateway request failed',\n cause,\n authMethod,\n}: {\n response: unknown;\n statusCode: number;\n defaultMessage?: string;\n cause?: unknown;\n authMethod?: 'api-key' | 'oidc';\n}): GatewayError {\n const parseResult = gatewayErrorResponseSchema.safeParse(response);\n if (!parseResult.success) {\n return new GatewayResponseError({\n message: `Invalid error response format: ${defaultMessage}`,\n statusCode,\n response,\n validationError: parseResult.error,\n cause,\n });\n }\n\n const validatedResponse: GatewayErrorResponse = parseResult.data;\n const errorType = validatedResponse.error.type;\n const message = validatedResponse.error.message;\n\n switch (errorType) {\n case 'authentication_error':\n return GatewayAuthenticationError.createContextualError({\n apiKeyProvided: authMethod === 'api-key',\n oidcTokenProvided: authMethod === 'oidc',\n statusCode,\n cause,\n });\n case 'invalid_request_error':\n return new GatewayInvalidRequestError({ message, statusCode, cause });\n case 'rate_limit_exceeded':\n return new GatewayRateLimitError({ message, statusCode, cause });\n case 'model_not_found': {\n const modelResult = modelNotFoundParamSchema.safeParse(\n validatedResponse.error.param,\n );\n return new GatewayModelNotFoundError({\n message,\n statusCode,\n modelId: modelResult.success ? modelResult.data.modelId : undefined,\n cause,\n });\n }\n case 'internal_server_error':\n return new GatewayInternalServerError({ message, statusCode, cause });\n default:\n return new GatewayInternalServerError({ message, statusCode, cause });\n }\n}\n\nconst gatewayErrorResponseSchema = z.object({\n error: z.object({\n message: z.string(),\n type: z.string().nullish(),\n param: z.unknown().nullish(),\n code: z.union([z.string(), z.number()]).nullish(),\n }),\n});\n\nexport type GatewayErrorResponse = z.infer<typeof gatewayErrorResponseSchema>;\n","const marker = 'vercel.ai.gateway.error';\nconst symbol = Symbol.for(marker);\n\nexport abstract class GatewayError extends Error {\n private readonly [symbol] = true; // used in isInstance\n\n abstract readonly name: string;\n abstract readonly type: string;\n readonly statusCode: number;\n readonly cause?: unknown;\n\n constructor({\n message,\n statusCode = 500,\n cause,\n }: {\n message: string;\n statusCode?: number;\n cause?: unknown;\n }) {\n super(message);\n this.statusCode = statusCode;\n this.cause = cause;\n }\n\n /**\n * Checks if the given error is a Gateway Error.\n * @param {unknown} error - The error to check.\n * @returns {boolean} True if the error is a Gateway Error, false otherwise.\n */\n static isInstance(error: unknown): error is GatewayError {\n return GatewayError.hasMarker(error);\n }\n\n static hasMarker(error: unknown): error is GatewayError {\n return (\n typeof error === 'object' &&\n error !== null &&\n symbol in error &&\n (error as any)[symbol] === true\n );\n }\n}\n","import { GatewayError } from './gateway-error';\n\nconst name = 'GatewayAuthenticationError';\nconst marker = `vercel.ai.gateway.error.${name}`;\nconst symbol = Symbol.for(marker);\n\n/**\n * Authentication failed - invalid API key or OIDC token\n */\nexport class GatewayAuthenticationError extends GatewayError {\n private readonly [symbol] = true; // used in isInstance\n\n readonly name = name;\n readonly type = 'authentication_error';\n\n constructor({\n message = 'Authentication failed',\n statusCode = 401,\n cause,\n }: {\n message?: string;\n statusCode?: number;\n cause?: unknown;\n } = {}) {\n super({ message, statusCode, cause });\n }\n\n static isInstance(error: unknown): error is GatewayAuthenticationError {\n return GatewayError.hasMarker(error) && symbol in error;\n }\n\n /**\n * Creates a contextual error message when authentication fails\n */\n static createContextualError({\n apiKeyProvided,\n oidcTokenProvided,\n message = 'Authentication failed',\n statusCode = 401,\n cause,\n }: {\n apiKeyProvided: boolean;\n oidcTokenProvided: boolean;\n message?: string;\n statusCode?: number;\n cause?: unknown;\n }): GatewayAuthenticationError {\n let contextualMessage: string;\n\n if (apiKeyProvided) {\n contextualMessage = `AI Gateway authentication failed: Invalid API key provided.\n\nThe token is expected to be provided via the 'apiKey' option or 'AI_GATEWAY_API_KEY' environment variable.`;\n } else if (oidcTokenProvided) {\n contextualMessage = `AI Gateway authentication failed: Invalid OIDC token provided.\n\nThe token is expected to be provided via the 'VERCEL_OIDC_TOKEN' environment variable. It expires every 12 hours.\n- make sure your Vercel project settings have OIDC enabled\n- if running locally with 'vercel dev', the token is automatically obtained and refreshed\n- if running locally with your own dev server, run 'vercel env pull' to fetch the token\n- in production/preview, the token is automatically obtained and refreshed\n\nAlternative: Provide an API key via 'apiKey' option or 'AI_GATEWAY_API_KEY' environment variable.`;\n } else {\n contextualMessage = `AI Gateway authentication failed: No authentication provided.\n\nProvide either an API key or OIDC token.\n\nAPI key instructions:\n\nThe token is expected to be provided via the 'apiKey' option or 'AI_GATEWAY_API_KEY' environment variable.\n\nOIDC token instructions:\n\nThe token is expected to be provided via the 'VERCEL_OIDC_TOKEN' environment variable. It expires every 12 hours.\n- make sure your Vercel project settings have OIDC enabled\n- if running locally with 'vercel dev', the token is automatically obtained and refreshed\n- if running locally with your own dev server, run 'vercel env pull' to fetch the token\n- in production/preview, the token is automatically obtained and refreshed`;\n }\n\n return new GatewayAuthenticationError({\n message: contextualMessage,\n statusCode,\n cause,\n });\n }\n}\n","import { GatewayError } from './gateway-error';\n\nconst name = 'GatewayInvalidRequestError';\nconst marker = `vercel.ai.gateway.error.${name}`;\nconst symbol = Symbol.for(marker);\n\n/**\n * Invalid request - missing headers, malformed data, etc.\n */\nexport class GatewayInvalidRequestError extends GatewayError {\n private readonly [symbol] = true; // used in isInstance\n\n readonly name = name;\n readonly type = 'invalid_request_error';\n\n constructor({\n message = 'Invalid request',\n statusCode = 400,\n cause,\n }: {\n message?: string;\n statusCode?: number;\n cause?: unknown;\n } = {}) {\n super({ message, statusCode, cause });\n }\n\n static isInstance(error: unknown): error is GatewayInvalidRequestError {\n return GatewayError.hasMarker(error) && symbol in error;\n }\n}\n","import { GatewayError } from './gateway-error';\n\nconst name = 'GatewayRateLimitError';\nconst marker = `vercel.ai.gateway.error.${name}`;\nconst symbol = Symbol.for(marker);\n\n/**\n * Rate limit exceeded.\n */\nexport class GatewayRateLimitError extends GatewayError {\n private readonly [symbol] = true; // used in isInstance\n\n readonly name = name;\n readonly type = 'rate_limit_exceeded';\n\n constructor({\n message = 'Rate limit exceeded',\n statusCode = 429,\n cause,\n }: {\n message?: string;\n statusCode?: number;\n cause?: unknown;\n } = {}) {\n super({ message, statusCode, cause });\n }\n\n static isInstance(error: unknown): error is GatewayRateLimitError {\n return GatewayError.hasMarker(error) && symbol in error;\n }\n}\n","import { z } from 'zod/v4';\nimport { GatewayError } from './gateway-error';\n\nconst name = 'GatewayModelNotFoundError';\nconst marker = `vercel.ai.gateway.error.${name}`;\nconst symbol = Symbol.for(marker);\n\nexport const modelNotFoundParamSchema = z.object({\n modelId: z.string(),\n});\n\n/**\n * Model not found or not available\n */\nexport class GatewayModelNotFoundError extends GatewayError {\n private readonly [symbol] = true; // used in isInstance\n\n readonly name = name;\n readonly type = 'model_not_found';\n readonly modelId?: string;\n\n constructor({\n message = 'Model not found',\n statusCode = 404,\n modelId,\n cause,\n }: {\n message?: string;\n statusCode?: number;\n modelId?: string;\n cause?: unknown;\n } = {}) {\n super({ message, statusCode, cause });\n this.modelId = modelId;\n }\n\n static isInstance(error: unknown): error is GatewayModelNotFoundError {\n return GatewayError.hasMarker(error) && symbol in error;\n }\n}\n","import { GatewayError } from './gateway-error';\n\nconst name = 'GatewayInternalServerError';\nconst marker = `vercel.ai.gateway.error.${name}`;\nconst symbol = Symbol.for(marker);\n\n/**\n * Internal server error from the Gateway\n */\nexport class GatewayInternalServerError extends GatewayError {\n private readonly [symbol] = true; // used in isInstance\n\n readonly name = name;\n readonly type = 'internal_server_error';\n\n constructor({\n message = 'Internal server error',\n statusCode = 500,\n cause,\n }: {\n message?: string;\n statusCode?: number;\n cause?: unknown;\n } = {}) {\n super({ message, statusCode, cause });\n }\n\n static isInstance(error: unknown): error is GatewayInternalServerError {\n return GatewayError.hasMarker(error) && symbol in error;\n }\n}\n","import { GatewayError } from './gateway-error';\nimport type { ZodError } from 'zod/v4';\n\nconst name = 'GatewayResponseError';\nconst marker = `vercel.ai.gateway.error.${name}`;\nconst symbol = Symbol.for(marker);\n\n/**\n * Gateway response parsing error\n */\nexport class GatewayResponseError extends GatewayError {\n private readonly [symbol] = true; // used in isInstance\n\n readonly name = name;\n readonly type = 'response_error';\n readonly response?: unknown;\n readonly validationError?: ZodError;\n\n constructor({\n message = 'Invalid response from Gateway',\n statusCode = 502,\n response,\n validationError,\n cause,\n }: {\n message?: string;\n statusCode?: number;\n response?: unknown;\n validationError?: ZodError;\n cause?: unknown;\n } = {}) {\n super({ message, statusCode, cause });\n this.response = response;\n this.validationError = validationError;\n }\n\n static isInstance(error: unknown): error is GatewayResponseError {\n return GatewayError.hasMarker(error) && symbol in error;\n }\n}\n","import type { APICallError } from '@ai-sdk/provider';\n\nexport function extractApiCallResponse(error: APICallError): unknown {\n if (error.data !== undefined) {\n return error.data;\n }\n if (error.responseBody != null) {\n try {\n return JSON.parse(error.responseBody);\n } catch {\n return error.responseBody;\n }\n }\n return {};\n}\n","import {\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n getFromApi,\n resolve,\n} from '@ai-sdk/provider-utils';\nimport { asGatewayError } from './errors';\nimport type { GatewayConfig } from './gateway-config';\nimport type { GatewayLanguageModelEntry } from './gateway-model-entry';\nimport { z } from 'zod/v4';\n\ntype GatewayFetchMetadataConfig = GatewayConfig;\n\nexport interface GatewayFetchMetadataResponse {\n models: GatewayLanguageModelEntry[];\n}\n\nexport class GatewayFetchMetadata {\n constructor(private readonly config: GatewayFetchMetadataConfig) {}\n\n async getAvailableModels(): Promise<GatewayFetchMetadataResponse> {\n try {\n const { value } = await getFromApi({\n url: `${this.config.baseURL}/config`,\n headers: await resolve(this.config.headers()),\n successfulResponseHandler: createJsonResponseHandler(\n gatewayFetchMetadataSchema,\n ),\n failedResponseHandler: createJsonErrorResponseHandler({\n errorSchema: z.any(),\n errorToMessage: data => data,\n }),\n fetch: this.config.fetch,\n });\n\n return value;\n } catch (error) {\n throw asGatewayError(error);\n }\n }\n}\n\nconst gatewayLanguageModelSpecificationSchema = z.object({\n specificationVersion: z.literal('v2'),\n provider: z.string(),\n modelId: z.string(),\n});\n\nconst gatewayLanguageModelPricingSchema = z.object({\n input: z.string(),\n output: z.string(),\n});\n\nconst gatewayLanguageModelEntrySchema = z.object({\n id: z.string(),\n name: z.string(),\n description: z.string().nullish(),\n pricing: gatewayLanguageModelPricingSchema.nullish(),\n specification: gatewayLanguageModelSpecificationSchema,\n});\n\nconst gatewayFetchMetadataSchema = z.object({\n models: z.array(gatewayLanguageModelEntrySchema),\n});\n","import type {\n LanguageModelV2,\n LanguageModelV2CallOptions,\n LanguageModelV2FilePart,\n LanguageModelV2StreamPart,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createEventSourceResponseHandler,\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n postJsonToApi,\n resolve,\n type ParseResult,\n type Resolvable,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport type { GatewayConfig } from './gateway-config';\nimport type { GatewayModelId } from './gateway-language-model-settings';\nimport { asGatewayError } from './errors';\nimport { parseAuthMethod } from './errors/parse-auth-method';\n\ntype GatewayChatConfig = GatewayConfig & {\n provider: string;\n o11yHeaders: Resolvable<Record<string, string>>;\n};\n\nexport class GatewayLanguageModel implements LanguageModelV2 {\n readonly specificationVersion = 'v2';\n readonly supportedUrls = { '*/*': [/.*/] };\n\n constructor(\n readonly modelId: GatewayModelId,\n private readonly config: GatewayChatConfig,\n ) {}\n\n get provider(): string {\n return this.config.provider;\n }\n\n async doGenerate(\n options: Parameters<LanguageModelV2['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV2['doGenerate']>>> {\n const { abortSignal, ...body } = options;\n const resolvedHeaders = await resolve(this.config.headers());\n try {\n const {\n responseHeaders,\n value: responseBody,\n rawValue: rawResponse,\n } = await postJsonToApi({\n url: this.getUrl(),\n headers: combineHeaders(\n resolvedHeaders,\n options.headers,\n this.getModelConfigHeaders(this.modelId, false),\n await resolve(this.config.o11yHeaders),\n ),\n body: this.maybeEncodeFileParts(body),\n successfulResponseHandler: createJsonResponseHandler(z.any()),\n failedResponseHandler: createJsonErrorResponseHandler({\n errorSchema: z.any(),\n errorToMessage: data => data,\n }),\n ...(abortSignal && { abortSignal }),\n fetch: this.config.fetch,\n });\n\n return {\n ...responseBody,\n request: { body },\n response: { headers: responseHeaders, body: rawResponse },\n warnings: [],\n };\n } catch (error) {\n throw asGatewayError(error, parseAuthMethod(resolvedHeaders));\n }\n }\n\n async doStream(\n options: Parameters<LanguageModelV2['doStream']>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV2['doStream']>>> {\n const { abortSignal, ...body } = options;\n const resolvedHeaders = await resolve(this.config.headers());\n try {\n const { value: response, responseHeaders } = await postJsonToApi({\n url: this.getUrl(),\n headers: combineHeaders(\n resolvedHeaders,\n options.headers,\n this.getModelConfigHeaders(this.modelId, true),\n await resolve(this.config.o11yHeaders),\n ),\n body: this.maybeEncodeFileParts(body),\n successfulResponseHandler: createEventSourceResponseHandler(z.any()),\n failedResponseHandler: createJsonErrorResponseHandler({\n errorSchema: z.any(),\n errorToMessage: data => data,\n }),\n ...(abortSignal && { abortSignal }),\n fetch: this.config.fetch,\n });\n\n return {\n stream: response.pipeThrough(\n new TransformStream<\n ParseResult<LanguageModelV2StreamPart>,\n LanguageModelV2StreamPart\n >({\n transform(chunk, controller) {\n if (chunk.success) {\n const streamPart = chunk.value;\n\n // Handle raw chunks: if this is a raw chunk from the gateway API,\n // only emit it if includeRawChunks is true\n if (streamPart.type === 'raw' && !options.includeRawChunks) {\n return; // Skip raw chunks if not requested\n }\n\n if (\n streamPart.type === 'response-metadata' &&\n streamPart.timestamp &&\n typeof streamPart.timestamp === 'string'\n ) {\n streamPart.timestamp = new Date(streamPart.timestamp);\n }\n\n controller.enqueue(streamPart);\n } else {\n controller.error(\n (chunk as { success: false; error: unknown }).error,\n );\n }\n },\n }),\n ),\n request: { body },\n response: { headers: responseHeaders },\n };\n } catch (error) {\n throw asGatewayError(error, parseAuthMethod(resolvedHeaders));\n }\n }\n\n private isFilePart(part: unknown) {\n return (\n part && typeof part === 'object' && 'type' in part && part.type === 'file'\n );\n }\n\n /**\n * Encodes file parts in the prompt to base64. Mutates the passed options\n * instance directly to avoid copying the file data.\n * @param options - The options to encode.\n * @returns The options with the file parts encoded.\n */\n private maybeEncodeFileParts(options: LanguageModelV2CallOptions) {\n for (const message of options.prompt) {\n for (const part of message.content) {\n if (this.isFilePart(part)) {\n const filePart = part as LanguageModelV2FilePart;\n // If the file part is a URL it will get cleanly converted to a string.\n // If it's a binary file attachment we convert it to a data url.\n // In either case, server-side we should only ever see URLs as strings.\n if (filePart.data instanceof Uint8Array) {\n const buffer = Uint8Array.from(filePart.data);\n const base64Data = Buffer.from(buffer).toString('base64');\n filePart.data = new URL(\n `data:${filePart.mediaType || 'application/octet-stream'};base64,${base64Data}`,\n );\n }\n }\n }\n }\n return options;\n }\n\n private getUrl() {\n return `${this.config.baseURL}/language-model`;\n }\n\n private getModelConfigHeaders(modelId: string, streaming: boolean) {\n return {\n 'ai-language-model-specification-version': '2',\n 'ai-language-model-id': modelId,\n 'ai-language-model-streaming': String(streaming),\n };\n }\n}\n","import { z } from 'zod';\n\nexport const GATEWAY_AUTH_METHOD_HEADER = 'x-ai-gateway-auth-method' as const;\n\nexport function parseAuthMethod(headers: Record<string, string | undefined>) {\n const result = gatewayAuthMethodSchema.safeParse(\n headers[GATEWAY_AUTH_METHOD_HEADER],\n );\n return result.success ? result.data : undefined;\n}\n\nconst gatewayAuthMethodSchema = z.union([\n z.literal('api-key'),\n z.literal('oidc'),\n]);\n","import { GatewayAuthenticationError } from './errors';\n\nexport async function getVercelOidcToken(): Promise<string> {\n const token =\n getContext().headers?.['x-vercel-oidc-token'] ??\n process.env.VERCEL_OIDC_TOKEN;\n\n if (!token) {\n throw new GatewayAuthenticationError({\n message: 'OIDC token not available',\n statusCode: 401,\n });\n }\n\n return token;\n}\n\nexport async function getVercelRequestId(): Promise<string | undefined> {\n return getContext().headers?.['x-vercel-id'];\n}\n\ntype Context = {\n headers?: Record<string, string>;\n};\n\nconst SYMBOL_FOR_REQ_CONTEXT = Symbol.for('@vercel/request-context');\n\nfunction getContext(): Context {\n const fromSymbol: typeof globalThis & {\n [SYMBOL_FOR_REQ_CONTEXT]?: { get?: () => Context };\n } = globalThis;\n return fromSymbol[SYMBOL_FOR_REQ_CONTEXT]?.get?.() ?? {};\n}\n"],"mappings":"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","names":["import_provider","import_provider_utils","import_v4","marker","symbol","_a","_b","name","marker","symbol","_a","_b","name","marker","symbol","_a","_b","name","marker","symbol","_a","_b","name","marker","symbol","_a","_b","name","marker","symbol","_a","_b","_a","import_v4","import_provider_utils","import_v4","_a","_b","_a","_b"]}
package/dist/index.mjs CHANGED
@@ -44,7 +44,7 @@ var name = "GatewayAuthenticationError";
44
44
  var marker2 = `vercel.ai.gateway.error.${name}`;
45
45
  var symbol2 = Symbol.for(marker2);
46
46
  var _a2, _b2;
47
- var GatewayAuthenticationError = class extends (_b2 = GatewayError, _a2 = symbol2, _b2) {
47
+ var GatewayAuthenticationError = class _GatewayAuthenticationError extends (_b2 = GatewayError, _a2 = symbol2, _b2) {
48
48
  constructor({
49
49
  message = "Authentication failed",
50
50
  statusCode = 401,
@@ -59,6 +59,54 @@ var GatewayAuthenticationError = class extends (_b2 = GatewayError, _a2 = symbol
59
59
  static isInstance(error) {
60
60
  return GatewayError.hasMarker(error) && symbol2 in error;
61
61
  }
62
+ /**
63
+ * Creates a contextual error message when authentication fails
64
+ */
65
+ static createContextualError({
66
+ apiKeyProvided,
67
+ oidcTokenProvided,
68
+ message = "Authentication failed",
69
+ statusCode = 401,
70
+ cause
71
+ }) {
72
+ let contextualMessage;
73
+ if (apiKeyProvided) {
74
+ contextualMessage = `AI Gateway authentication failed: Invalid API key provided.
75
+
76
+ The token is expected to be provided via the 'apiKey' option or 'AI_GATEWAY_API_KEY' environment variable.`;
77
+ } else if (oidcTokenProvided) {
78
+ contextualMessage = `AI Gateway authentication failed: Invalid OIDC token provided.
79
+
80
+ The token is expected to be provided via the 'VERCEL_OIDC_TOKEN' environment variable. It expires every 12 hours.
81
+ - make sure your Vercel project settings have OIDC enabled
82
+ - if running locally with 'vercel dev', the token is automatically obtained and refreshed
83
+ - if running locally with your own dev server, run 'vercel env pull' to fetch the token
84
+ - in production/preview, the token is automatically obtained and refreshed
85
+
86
+ Alternative: Provide an API key via 'apiKey' option or 'AI_GATEWAY_API_KEY' environment variable.`;
87
+ } else {
88
+ contextualMessage = `AI Gateway authentication failed: No authentication provided.
89
+
90
+ Provide either an API key or OIDC token.
91
+
92
+ API key instructions:
93
+
94
+ The token is expected to be provided via the 'apiKey' option or 'AI_GATEWAY_API_KEY' environment variable.
95
+
96
+ OIDC token instructions:
97
+
98
+ The token is expected to be provided via the 'VERCEL_OIDC_TOKEN' environment variable. It expires every 12 hours.
99
+ - make sure your Vercel project settings have OIDC enabled
100
+ - if running locally with 'vercel dev', the token is automatically obtained and refreshed
101
+ - if running locally with your own dev server, run 'vercel env pull' to fetch the token
102
+ - in production/preview, the token is automatically obtained and refreshed`;
103
+ }
104
+ return new _GatewayAuthenticationError({
105
+ message: contextualMessage,
106
+ statusCode,
107
+ cause
108
+ });
109
+ }
62
110
  };
63
111
 
64
112
  // src/errors/gateway-invalid-request-error.ts
@@ -186,7 +234,8 @@ function createGatewayErrorFromResponse({
186
234
  response,
187
235
  statusCode,
188
236
  defaultMessage = "Gateway request failed",
189
- cause
237
+ cause,
238
+ authMethod
190
239
  }) {
191
240
  const parseResult = gatewayErrorResponseSchema.safeParse(response);
192
241
  if (!parseResult.success) {
@@ -203,7 +252,12 @@ function createGatewayErrorFromResponse({
203
252
  const message = validatedResponse.error.message;
204
253
  switch (errorType) {
205
254
  case "authentication_error":
206
- return new GatewayAuthenticationError({ message, statusCode, cause });
255
+ return GatewayAuthenticationError.createContextualError({
256
+ apiKeyProvided: authMethod === "api-key",
257
+ oidcTokenProvided: authMethod === "oidc",
258
+ statusCode,
259
+ cause
260
+ });
207
261
  case "invalid_request_error":
208
262
  return new GatewayInvalidRequestError({ message, statusCode, cause });
209
263
  case "rate_limit_exceeded":
@@ -235,7 +289,7 @@ var gatewayErrorResponseSchema = z2.object({
235
289
  });
236
290
 
237
291
  // src/errors/as-gateway-error.ts
238
- function asGatewayError(error) {
292
+ function asGatewayError(error, authMethod) {
239
293
  var _a8;
240
294
  if (GatewayError.isInstance(error)) {
241
295
  return error;
@@ -245,14 +299,16 @@ function asGatewayError(error) {
245
299
  response: extractApiCallResponse(error),
246
300
  statusCode: (_a8 = error.statusCode) != null ? _a8 : 500,
247
301
  defaultMessage: "Gateway request failed",
248
- cause: error
302
+ cause: error,
303
+ authMethod
249
304
  });
250
305
  }
251
306
  return createGatewayErrorFromResponse({
252
307
  response: {},
253
308
  statusCode: 500,
254
309
  defaultMessage: error instanceof Error ? `Gateway request failed: ${error.message}` : "Unknown Gateway error",
255
- cause: error
310
+ cause: error,
311
+ authMethod
256
312
  });
257
313
  }
258
314
 
@@ -308,9 +364,15 @@ var gatewayLanguageModelSpecificationSchema = z3.object({
308
364
  provider: z3.string(),
309
365
  modelId: z3.string()
310
366
  });
367
+ var gatewayLanguageModelPricingSchema = z3.object({
368
+ input: z3.string(),
369
+ output: z3.string()
370
+ });
311
371
  var gatewayLanguageModelEntrySchema = z3.object({
312
372
  id: z3.string(),
313
373
  name: z3.string(),
374
+ description: z3.string().nullish(),
375
+ pricing: gatewayLanguageModelPricingSchema.nullish(),
314
376
  specification: gatewayLanguageModelSpecificationSchema
315
377
  });
316
378
  var gatewayFetchMetadataSchema = z3.object({
@@ -326,7 +388,23 @@ import {
326
388
  postJsonToApi,
327
389
  resolve as resolve2
328
390
  } from "@ai-sdk/provider-utils";
329
- import { z as z4 } from "zod/v4";
391
+ import { z as z5 } from "zod/v4";
392
+
393
+ // src/errors/parse-auth-method.ts
394
+ import { z as z4 } from "zod";
395
+ var GATEWAY_AUTH_METHOD_HEADER = "x-ai-gateway-auth-method";
396
+ function parseAuthMethod(headers) {
397
+ const result = gatewayAuthMethodSchema.safeParse(
398
+ headers[GATEWAY_AUTH_METHOD_HEADER]
399
+ );
400
+ return result.success ? result.data : void 0;
401
+ }
402
+ var gatewayAuthMethodSchema = z4.union([
403
+ z4.literal("api-key"),
404
+ z4.literal("oidc")
405
+ ]);
406
+
407
+ // src/gateway-language-model.ts
330
408
  var GatewayLanguageModel = class {
331
409
  constructor(modelId, config) {
332
410
  this.modelId = modelId;
@@ -339,6 +417,7 @@ var GatewayLanguageModel = class {
339
417
  }
340
418
  async doGenerate(options) {
341
419
  const { abortSignal, ...body } = options;
420
+ const resolvedHeaders = await resolve2(this.config.headers());
342
421
  try {
343
422
  const {
344
423
  responseHeaders,
@@ -347,15 +426,15 @@ var GatewayLanguageModel = class {
347
426
  } = await postJsonToApi({
348
427
  url: this.getUrl(),
349
428
  headers: combineHeaders(
350
- await resolve2(this.config.headers()),
429
+ resolvedHeaders,
351
430
  options.headers,
352
431
  this.getModelConfigHeaders(this.modelId, false),
353
432
  await resolve2(this.config.o11yHeaders)
354
433
  ),
355
434
  body: this.maybeEncodeFileParts(body),
356
- successfulResponseHandler: createJsonResponseHandler2(z4.any()),
435
+ successfulResponseHandler: createJsonResponseHandler2(z5.any()),
357
436
  failedResponseHandler: createJsonErrorResponseHandler2({
358
- errorSchema: z4.any(),
437
+ errorSchema: z5.any(),
359
438
  errorToMessage: (data) => data
360
439
  }),
361
440
  ...abortSignal && { abortSignal },
@@ -368,24 +447,25 @@ var GatewayLanguageModel = class {
368
447
  warnings: []
369
448
  };
370
449
  } catch (error) {
371
- throw asGatewayError(error);
450
+ throw asGatewayError(error, parseAuthMethod(resolvedHeaders));
372
451
  }
373
452
  }
374
453
  async doStream(options) {
375
454
  const { abortSignal, ...body } = options;
455
+ const resolvedHeaders = await resolve2(this.config.headers());
376
456
  try {
377
457
  const { value: response, responseHeaders } = await postJsonToApi({
378
458
  url: this.getUrl(),
379
459
  headers: combineHeaders(
380
- await resolve2(this.config.headers()),
460
+ resolvedHeaders,
381
461
  options.headers,
382
462
  this.getModelConfigHeaders(this.modelId, true),
383
463
  await resolve2(this.config.o11yHeaders)
384
464
  ),
385
465
  body: this.maybeEncodeFileParts(body),
386
- successfulResponseHandler: createEventSourceResponseHandler(z4.any()),
466
+ successfulResponseHandler: createEventSourceResponseHandler(z5.any()),
387
467
  failedResponseHandler: createJsonErrorResponseHandler2({
388
- errorSchema: z4.any(),
468
+ errorSchema: z5.any(),
389
469
  errorToMessage: (data) => data
390
470
  }),
391
471
  ...abortSignal && { abortSignal },
@@ -400,6 +480,9 @@ var GatewayLanguageModel = class {
400
480
  if (streamPart.type === "raw" && !options.includeRawChunks) {
401
481
  return;
402
482
  }
483
+ if (streamPart.type === "response-metadata" && streamPart.timestamp && typeof streamPart.timestamp === "string") {
484
+ streamPart.timestamp = new Date(streamPart.timestamp);
485
+ }
403
486
  controller.enqueue(streamPart);
404
487
  } else {
405
488
  controller.error(
@@ -413,17 +496,17 @@ var GatewayLanguageModel = class {
413
496
  response: { headers: responseHeaders }
414
497
  };
415
498
  } catch (error) {
416
- throw asGatewayError(error);
499
+ throw asGatewayError(error, parseAuthMethod(resolvedHeaders));
417
500
  }
418
501
  }
419
502
  isFilePart(part) {
420
503
  return part && typeof part === "object" && "type" in part && part.type === "file";
421
504
  }
422
505
  /**
423
- * Encodes image parts in the prompt to base64. Mutates the passed options
424
- * instance directly to avoid copying the image data.
506
+ * Encodes file parts in the prompt to base64. Mutates the passed options
507
+ * instance directly to avoid copying the file data.
425
508
  * @param options - The options to encode.
426
- * @returns The options with the image parts encoded.
509
+ * @returns The options with the file parts encoded.
427
510
  */
428
511
  maybeEncodeFileParts(options) {
429
512
  for (const message of options.prompt) {
@@ -460,12 +543,7 @@ async function getVercelOidcToken() {
460
543
  const token = (_b8 = (_a8 = getContext().headers) == null ? void 0 : _a8["x-vercel-oidc-token"]) != null ? _b8 : process.env.VERCEL_OIDC_TOKEN;
461
544
  if (!token) {
462
545
  throw new GatewayAuthenticationError({
463
- message: `Failed to get Vercel OIDC token for AI Gateway access.
464
- The token is expected to be provided via the 'VERCEL_OIDC_TOKEN' environment variable. It expires every 12 hours.
465
- - make sure your Vercel project settings have OIDC enabled
466
- - if you're running locally with 'vercel dev' the token is automatically obtained and refreshed for you
467
- - if you're running locally with your own dev server script you can fetch/update the token by running 'vercel env pull'
468
- - in production or preview the token is automatically obtained and refreshed for you`,
546
+ message: "OIDC token not available",
469
547
  statusCode: 401
470
548
  });
471
549
  }
@@ -484,13 +562,6 @@ function getContext() {
484
562
 
485
563
  // src/gateway-provider.ts
486
564
  var AI_GATEWAY_PROTOCOL_VERSION = "0.0.1";
487
- async function getGatewayAuthToken(options) {
488
- var _a8;
489
- return (_a8 = loadOptionalSetting({
490
- settingValue: options.apiKey,
491
- environmentVariableName: "AI_GATEWAY_API_KEY"
492
- })) != null ? _a8 : await getVercelOidcToken();
493
- }
494
565
  function createGatewayProvider(options = {}) {
495
566
  var _a8, _b8;
496
567
  let pendingMetadata = null;
@@ -499,11 +570,20 @@ function createGatewayProvider(options = {}) {
499
570
  let lastFetchTime = 0;
500
571
  const baseURL = (_b8 = withoutTrailingSlash(options.baseURL)) != null ? _b8 : "https://ai-gateway.vercel.sh/v1/ai";
501
572
  const getHeaders = async () => {
502
- return {
503
- Authorization: `Bearer ${await getGatewayAuthToken(options)}`,
504
- "ai-gateway-protocol-version": AI_GATEWAY_PROTOCOL_VERSION,
505
- ...options.headers
506
- };
573
+ const auth = await getGatewayAuthToken(options);
574
+ if (auth) {
575
+ return {
576
+ Authorization: `Bearer ${auth.token}`,
577
+ "ai-gateway-protocol-version": AI_GATEWAY_PROTOCOL_VERSION,
578
+ [GATEWAY_AUTH_METHOD_HEADER]: auth.authMethod,
579
+ ...options.headers
580
+ };
581
+ }
582
+ throw GatewayAuthenticationError.createContextualError({
583
+ apiKeyProvided: false,
584
+ oidcTokenProvided: false,
585
+ statusCode: 401
586
+ });
507
587
  };
508
588
  const createLanguageModel = (modelId) => {
509
589
  const deploymentId = loadOptionalSetting({
@@ -546,8 +626,8 @@ function createGatewayProvider(options = {}) {
546
626
  }).getAvailableModels().then((metadata) => {
547
627
  metadataCache = metadata;
548
628
  return metadata;
549
- }).catch((error) => {
550
- throw asGatewayError(error);
629
+ }).catch(async (error) => {
630
+ throw asGatewayError(error, parseAuthMethod(await getHeaders()));
551
631
  });
552
632
  }
553
633
  return metadataCache ? Promise.resolve(metadataCache) : pendingMetadata;
@@ -571,6 +651,27 @@ function createGatewayProvider(options = {}) {
571
651
  return provider;
572
652
  }
573
653
  var gateway = createGatewayProvider();
654
+ async function getGatewayAuthToken(options) {
655
+ const apiKey = loadOptionalSetting({
656
+ settingValue: options.apiKey,
657
+ environmentVariableName: "AI_GATEWAY_API_KEY"
658
+ });
659
+ if (apiKey) {
660
+ return {
661
+ token: apiKey,
662
+ authMethod: "api-key"
663
+ };
664
+ }
665
+ try {
666
+ const oidcToken = await getVercelOidcToken();
667
+ return {
668
+ token: oidcToken,
669
+ authMethod: "oidc"
670
+ };
671
+ } catch (error) {
672
+ return null;
673
+ }
674
+ }
574
675
  export {
575
676
  GatewayAuthenticationError,
576
677
  GatewayError,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/gateway-provider.ts","../src/errors/as-gateway-error.ts","../src/errors/create-gateway-error.ts","../src/errors/gateway-error.ts","../src/errors/gateway-authentication-error.ts","../src/errors/gateway-invalid-request-error.ts","../src/errors/gateway-rate-limit-error.ts","../src/errors/gateway-model-not-found-error.ts","../src/errors/gateway-internal-server-error.ts","../src/errors/gateway-response-error.ts","../src/errors/extract-api-call-response.ts","../src/gateway-fetch-metadata.ts","../src/gateway-language-model.ts","../src/vercel-environment.ts"],"sourcesContent":["import type { LanguageModelV2, ProviderV2 } from '@ai-sdk/provider';\nimport { NoSuchModelError } from '@ai-sdk/provider';\nimport {\n loadOptionalSetting,\n withoutTrailingSlash,\n} from '@ai-sdk/provider-utils';\nimport { type FetchFunction } from '@ai-sdk/provider-utils';\nimport { asGatewayError } from './errors';\nimport {\n GatewayFetchMetadata,\n type GatewayFetchMetadataResponse,\n} from './gateway-fetch-metadata';\nimport { GatewayLanguageModel } from './gateway-language-model';\nimport type { GatewayModelId } from './gateway-language-model-settings';\nimport { getVercelOidcToken, getVercelRequestId } from './vercel-environment';\n\nexport interface GatewayProvider extends ProviderV2 {\n (modelId: GatewayModelId): LanguageModelV2;\n\n /**\nCreates a model for text generation.\n*/\n languageModel(modelId: GatewayModelId): LanguageModelV2;\n\n /**\nReturns available providers and models for use with the remote provider.\n */\n getAvailableModels(): Promise<GatewayFetchMetadataResponse>;\n}\n\nexport interface GatewayProviderSettings {\n /**\nThe base URL prefix for API calls. Defaults to `https://ai-gateway.vercel.sh/v1/ai`.\n */\n baseURL?: string;\n\n /**\nAPI key that is being sent using the `Authorization` header.\n */\n apiKey?: string;\n\n /**\nCustom headers to include in the requests.\n */\n headers?: Record<string, string>;\n\n /**\nCustom fetch implementation. You can use it as a middleware to intercept requests,\nor to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n\n /**\nHow frequently to refresh the metadata cache in milliseconds.\n */\n metadataCacheRefreshMillis?: number;\n\n /**\n * @internal For testing purposes only\n */\n _internal?: {\n currentDate?: () => Date;\n };\n}\n\nconst AI_GATEWAY_PROTOCOL_VERSION = '0.0.1';\n\nexport async function getGatewayAuthToken(options: GatewayProviderSettings) {\n return (\n loadOptionalSetting({\n settingValue: options.apiKey,\n environmentVariableName: 'AI_GATEWAY_API_KEY',\n }) ?? (await getVercelOidcToken())\n );\n}\n\n/**\nCreate a remote provider instance.\n */\nexport function createGatewayProvider(\n options: GatewayProviderSettings = {},\n): GatewayProvider {\n let pendingMetadata: Promise<GatewayFetchMetadataResponse> | null = null;\n let metadataCache: GatewayFetchMetadataResponse | null = null;\n const cacheRefreshMillis =\n options.metadataCacheRefreshMillis ?? 1000 * 60 * 5;\n let lastFetchTime = 0;\n\n const baseURL =\n withoutTrailingSlash(options.baseURL) ??\n 'https://ai-gateway.vercel.sh/v1/ai';\n\n const getHeaders = async () => {\n return {\n Authorization: `Bearer ${await getGatewayAuthToken(options)}`,\n 'ai-gateway-protocol-version': AI_GATEWAY_PROTOCOL_VERSION,\n ...options.headers,\n };\n };\n\n const createLanguageModel = (modelId: GatewayModelId) => {\n const deploymentId = loadOptionalSetting({\n settingValue: undefined,\n environmentVariableName: 'VERCEL_DEPLOYMENT_ID',\n });\n const environment = loadOptionalSetting({\n settingValue: undefined,\n environmentVariableName: 'VERCEL_ENV',\n });\n const region = loadOptionalSetting({\n settingValue: undefined,\n environmentVariableName: 'VERCEL_REGION',\n });\n return new GatewayLanguageModel(modelId, {\n provider: 'gateway',\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n o11yHeaders: async () => {\n const requestId = await getVercelRequestId();\n return {\n ...(deploymentId && { 'ai-o11y-deployment-id': deploymentId }),\n ...(environment && { 'ai-o11y-environment': environment }),\n ...(region && { 'ai-o11y-region': region }),\n ...(requestId && { 'ai-o11y-request-id': requestId }),\n };\n },\n });\n };\n\n const getAvailableModels = async () => {\n const now = options._internal?.currentDate?.().getTime() ?? Date.now();\n if (!pendingMetadata || now - lastFetchTime > cacheRefreshMillis) {\n lastFetchTime = now;\n pendingMetadata = new GatewayFetchMetadata({\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n })\n .getAvailableModels()\n .then(metadata => {\n metadataCache = metadata;\n return metadata;\n })\n .catch((error: unknown) => {\n throw asGatewayError(error);\n });\n }\n\n return metadataCache ? Promise.resolve(metadataCache) : pendingMetadata;\n };\n\n const provider = function (modelId: GatewayModelId) {\n if (new.target) {\n throw new Error(\n 'The Gateway Provider model function cannot be called with the new keyword.',\n );\n }\n\n return createLanguageModel(modelId);\n };\n\n provider.getAvailableModels = getAvailableModels;\n provider.imageModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'imageModel' });\n };\n provider.languageModel = createLanguageModel;\n provider.textEmbeddingModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'textEmbeddingModel' });\n };\n\n return provider;\n}\n\nexport const gateway = createGatewayProvider();\n","import { APICallError } from '@ai-sdk/provider';\nimport { extractApiCallResponse, GatewayError } from '.';\nimport { createGatewayErrorFromResponse } from './create-gateway-error';\n\nexport function asGatewayError(error: unknown) {\n if (GatewayError.isInstance(error)) {\n return error;\n }\n\n if (APICallError.isInstance(error)) {\n return createGatewayErrorFromResponse({\n response: extractApiCallResponse(error),\n statusCode: error.statusCode ?? 500,\n defaultMessage: 'Gateway request failed',\n cause: error,\n });\n }\n\n return createGatewayErrorFromResponse({\n response: {},\n statusCode: 500,\n defaultMessage:\n error instanceof Error\n ? `Gateway request failed: ${error.message}`\n : 'Unknown Gateway error',\n cause: error,\n });\n}\n","import { z } from 'zod/v4';\nimport type { GatewayError } from './gateway-error';\nimport { GatewayAuthenticationError } from './gateway-authentication-error';\nimport { GatewayInvalidRequestError } from './gateway-invalid-request-error';\nimport { GatewayRateLimitError } from './gateway-rate-limit-error';\nimport {\n GatewayModelNotFoundError,\n modelNotFoundParamSchema,\n} from './gateway-model-not-found-error';\nimport { GatewayInternalServerError } from './gateway-internal-server-error';\nimport { GatewayResponseError } from './gateway-response-error';\n\nexport function createGatewayErrorFromResponse({\n response,\n statusCode,\n defaultMessage = 'Gateway request failed',\n cause,\n}: {\n response: unknown;\n statusCode: number;\n defaultMessage?: string;\n cause?: unknown;\n}): GatewayError {\n const parseResult = gatewayErrorResponseSchema.safeParse(response);\n if (!parseResult.success) {\n return new GatewayResponseError({\n message: `Invalid error response format: ${defaultMessage}`,\n statusCode,\n response,\n validationError: parseResult.error,\n cause,\n });\n }\n\n const validatedResponse: GatewayErrorResponse = parseResult.data;\n const errorType = validatedResponse.error.type;\n const message = validatedResponse.error.message;\n\n switch (errorType) {\n case 'authentication_error':\n return new GatewayAuthenticationError({ message, statusCode, cause });\n case 'invalid_request_error':\n return new GatewayInvalidRequestError({ message, statusCode, cause });\n case 'rate_limit_exceeded':\n return new GatewayRateLimitError({ message, statusCode, cause });\n case 'model_not_found': {\n const modelResult = modelNotFoundParamSchema.safeParse(\n validatedResponse.error.param,\n );\n return new GatewayModelNotFoundError({\n message,\n statusCode,\n modelId: modelResult.success ? modelResult.data.modelId : undefined,\n cause,\n });\n }\n case 'internal_server_error':\n return new GatewayInternalServerError({ message, statusCode, cause });\n default:\n return new GatewayInternalServerError({ message, statusCode, cause });\n }\n}\n\nconst gatewayErrorResponseSchema = z.object({\n error: z.object({\n message: z.string(),\n type: z.string().nullish(),\n param: z.unknown().nullish(),\n code: z.union([z.string(), z.number()]).nullish(),\n }),\n});\n\nexport type GatewayErrorResponse = z.infer<typeof gatewayErrorResponseSchema>;\n","const marker = 'vercel.ai.gateway.error';\nconst symbol = Symbol.for(marker);\n\nexport abstract class GatewayError extends Error {\n private readonly [symbol] = true; // used in isInstance\n\n abstract readonly name: string;\n abstract readonly type: string;\n readonly statusCode: number;\n readonly cause?: unknown;\n\n constructor({\n message,\n statusCode = 500,\n cause,\n }: {\n message: string;\n statusCode?: number;\n cause?: unknown;\n }) {\n super(message);\n this.statusCode = statusCode;\n this.cause = cause;\n }\n\n /**\n * Checks if the given error is a Gateway Error.\n * @param {unknown} error - The error to check.\n * @returns {boolean} True if the error is a Gateway Error, false otherwise.\n */\n static isInstance(error: unknown): error is GatewayError {\n return GatewayError.hasMarker(error);\n }\n\n static hasMarker(error: unknown): error is GatewayError {\n return (\n typeof error === 'object' &&\n error !== null &&\n symbol in error &&\n (error as any)[symbol] === true\n );\n }\n}\n","import { GatewayError } from './gateway-error';\n\nconst name = 'GatewayAuthenticationError';\nconst marker = `vercel.ai.gateway.error.${name}`;\nconst symbol = Symbol.for(marker);\n\n/**\n * Authentication failed - invalid API key or OIDC token\n */\nexport class GatewayAuthenticationError extends GatewayError {\n private readonly [symbol] = true; // used in isInstance\n\n readonly name = name;\n readonly type = 'authentication_error';\n\n constructor({\n message = 'Authentication failed',\n statusCode = 401,\n cause,\n }: {\n message?: string;\n statusCode?: number;\n cause?: unknown;\n } = {}) {\n super({ message, statusCode, cause });\n }\n\n static isInstance(error: unknown): error is GatewayAuthenticationError {\n return GatewayError.hasMarker(error) && symbol in error;\n }\n}\n","import { GatewayError } from './gateway-error';\n\nconst name = 'GatewayInvalidRequestError';\nconst marker = `vercel.ai.gateway.error.${name}`;\nconst symbol = Symbol.for(marker);\n\n/**\n * Invalid request - missing headers, malformed data, etc.\n */\nexport class GatewayInvalidRequestError extends GatewayError {\n private readonly [symbol] = true; // used in isInstance\n\n readonly name = name;\n readonly type = 'invalid_request_error';\n\n constructor({\n message = 'Invalid request',\n statusCode = 400,\n cause,\n }: {\n message?: string;\n statusCode?: number;\n cause?: unknown;\n } = {}) {\n super({ message, statusCode, cause });\n }\n\n static isInstance(error: unknown): error is GatewayInvalidRequestError {\n return GatewayError.hasMarker(error) && symbol in error;\n }\n}\n","import { GatewayError } from './gateway-error';\n\nconst name = 'GatewayRateLimitError';\nconst marker = `vercel.ai.gateway.error.${name}`;\nconst symbol = Symbol.for(marker);\n\n/**\n * Rate limit exceeded.\n */\nexport class GatewayRateLimitError extends GatewayError {\n private readonly [symbol] = true; // used in isInstance\n\n readonly name = name;\n readonly type = 'rate_limit_exceeded';\n\n constructor({\n message = 'Rate limit exceeded',\n statusCode = 429,\n cause,\n }: {\n message?: string;\n statusCode?: number;\n cause?: unknown;\n } = {}) {\n super({ message, statusCode, cause });\n }\n\n static isInstance(error: unknown): error is GatewayRateLimitError {\n return GatewayError.hasMarker(error) && symbol in error;\n }\n}\n","import { z } from 'zod/v4';\nimport { GatewayError } from './gateway-error';\n\nconst name = 'GatewayModelNotFoundError';\nconst marker = `vercel.ai.gateway.error.${name}`;\nconst symbol = Symbol.for(marker);\n\nexport const modelNotFoundParamSchema = z.object({\n modelId: z.string(),\n});\n\n/**\n * Model not found or not available\n */\nexport class GatewayModelNotFoundError extends GatewayError {\n private readonly [symbol] = true; // used in isInstance\n\n readonly name = name;\n readonly type = 'model_not_found';\n readonly modelId?: string;\n\n constructor({\n message = 'Model not found',\n statusCode = 404,\n modelId,\n cause,\n }: {\n message?: string;\n statusCode?: number;\n modelId?: string;\n cause?: unknown;\n } = {}) {\n super({ message, statusCode, cause });\n this.modelId = modelId;\n }\n\n static isInstance(error: unknown): error is GatewayModelNotFoundError {\n return GatewayError.hasMarker(error) && symbol in error;\n }\n}\n","import { GatewayError } from './gateway-error';\n\nconst name = 'GatewayInternalServerError';\nconst marker = `vercel.ai.gateway.error.${name}`;\nconst symbol = Symbol.for(marker);\n\n/**\n * Internal server error from the Gateway\n */\nexport class GatewayInternalServerError extends GatewayError {\n private readonly [symbol] = true; // used in isInstance\n\n readonly name = name;\n readonly type = 'internal_server_error';\n\n constructor({\n message = 'Internal server error',\n statusCode = 500,\n cause,\n }: {\n message?: string;\n statusCode?: number;\n cause?: unknown;\n } = {}) {\n super({ message, statusCode, cause });\n }\n\n static isInstance(error: unknown): error is GatewayInternalServerError {\n return GatewayError.hasMarker(error) && symbol in error;\n }\n}\n","import { GatewayError } from './gateway-error';\nimport type { ZodError } from 'zod/v4';\n\nconst name = 'GatewayResponseError';\nconst marker = `vercel.ai.gateway.error.${name}`;\nconst symbol = Symbol.for(marker);\n\n/**\n * Gateway response parsing error\n */\nexport class GatewayResponseError extends GatewayError {\n private readonly [symbol] = true; // used in isInstance\n\n readonly name = name;\n readonly type = 'response_error';\n readonly response?: unknown;\n readonly validationError?: ZodError;\n\n constructor({\n message = 'Invalid response from Gateway',\n statusCode = 502,\n response,\n validationError,\n cause,\n }: {\n message?: string;\n statusCode?: number;\n response?: unknown;\n validationError?: ZodError;\n cause?: unknown;\n } = {}) {\n super({ message, statusCode, cause });\n this.response = response;\n this.validationError = validationError;\n }\n\n static isInstance(error: unknown): error is GatewayResponseError {\n return GatewayError.hasMarker(error) && symbol in error;\n }\n}\n","import type { APICallError } from '@ai-sdk/provider';\n\nexport function extractApiCallResponse(error: APICallError): unknown {\n if (error.data !== undefined) {\n return error.data;\n }\n if (error.responseBody != null) {\n try {\n return JSON.parse(error.responseBody);\n } catch {\n return error.responseBody;\n }\n }\n return {};\n}\n","import {\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n getFromApi,\n resolve,\n} from '@ai-sdk/provider-utils';\nimport { asGatewayError } from './errors';\nimport type { GatewayConfig } from './gateway-config';\nimport type { GatewayLanguageModelEntry } from './gateway-model-entry';\nimport { z } from 'zod/v4';\n\ntype GatewayFetchMetadataConfig = GatewayConfig;\n\nexport interface GatewayFetchMetadataResponse {\n models: GatewayLanguageModelEntry[];\n}\n\nexport class GatewayFetchMetadata {\n constructor(private readonly config: GatewayFetchMetadataConfig) {}\n\n async getAvailableModels(): Promise<GatewayFetchMetadataResponse> {\n try {\n const { value } = await getFromApi({\n url: `${this.config.baseURL}/config`,\n headers: await resolve(this.config.headers()),\n successfulResponseHandler: createJsonResponseHandler(\n gatewayFetchMetadataSchema,\n ),\n failedResponseHandler: createJsonErrorResponseHandler({\n errorSchema: z.any(),\n errorToMessage: data => data,\n }),\n fetch: this.config.fetch,\n });\n\n return value;\n } catch (error) {\n throw asGatewayError(error);\n }\n }\n}\n\nconst gatewayLanguageModelSpecificationSchema = z.object({\n specificationVersion: z.literal('v2'),\n provider: z.string(),\n modelId: z.string(),\n});\n\nconst gatewayLanguageModelEntrySchema = z.object({\n id: z.string(),\n name: z.string(),\n specification: gatewayLanguageModelSpecificationSchema,\n});\n\nconst gatewayFetchMetadataSchema = z.object({\n models: z.array(gatewayLanguageModelEntrySchema),\n});\n","import type {\n LanguageModelV2,\n LanguageModelV2CallOptions,\n LanguageModelV2FilePart,\n LanguageModelV2StreamPart,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createEventSourceResponseHandler,\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n postJsonToApi,\n resolve,\n type ParseResult,\n type Resolvable,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport type { GatewayConfig } from './gateway-config';\nimport type { GatewayModelId } from './gateway-language-model-settings';\nimport { asGatewayError } from './errors';\n\ntype GatewayChatConfig = GatewayConfig & {\n provider: string;\n o11yHeaders: Resolvable<Record<string, string>>;\n};\n\nexport class GatewayLanguageModel implements LanguageModelV2 {\n readonly specificationVersion = 'v2';\n readonly supportedUrls = { '*/*': [/.*/] };\n\n constructor(\n readonly modelId: GatewayModelId,\n private readonly config: GatewayChatConfig,\n ) {}\n\n get provider(): string {\n return this.config.provider;\n }\n\n async doGenerate(\n options: Parameters<LanguageModelV2['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV2['doGenerate']>>> {\n const { abortSignal, ...body } = options;\n try {\n const {\n responseHeaders,\n value: responseBody,\n rawValue: rawResponse,\n } = await postJsonToApi({\n url: this.getUrl(),\n headers: combineHeaders(\n await resolve(this.config.headers()),\n options.headers,\n this.getModelConfigHeaders(this.modelId, false),\n await resolve(this.config.o11yHeaders),\n ),\n body: this.maybeEncodeFileParts(body),\n successfulResponseHandler: createJsonResponseHandler(z.any()),\n failedResponseHandler: createJsonErrorResponseHandler({\n errorSchema: z.any(),\n errorToMessage: data => data,\n }),\n ...(abortSignal && { abortSignal }),\n fetch: this.config.fetch,\n });\n\n return {\n ...responseBody,\n request: { body },\n response: { headers: responseHeaders, body: rawResponse },\n warnings: [],\n };\n } catch (error) {\n throw asGatewayError(error);\n }\n }\n\n async doStream(\n options: Parameters<LanguageModelV2['doStream']>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV2['doStream']>>> {\n const { abortSignal, ...body } = options;\n\n try {\n const { value: response, responseHeaders } = await postJsonToApi({\n url: this.getUrl(),\n headers: combineHeaders(\n await resolve(this.config.headers()),\n options.headers,\n this.getModelConfigHeaders(this.modelId, true),\n await resolve(this.config.o11yHeaders),\n ),\n body: this.maybeEncodeFileParts(body),\n successfulResponseHandler: createEventSourceResponseHandler(z.any()),\n failedResponseHandler: createJsonErrorResponseHandler({\n errorSchema: z.any(),\n errorToMessage: data => data,\n }),\n ...(abortSignal && { abortSignal }),\n fetch: this.config.fetch,\n });\n\n return {\n stream: response.pipeThrough(\n new TransformStream<\n ParseResult<LanguageModelV2StreamPart>,\n LanguageModelV2StreamPart\n >({\n transform(chunk, controller) {\n if (chunk.success) {\n const streamPart = chunk.value;\n\n // Handle raw chunks: if this is a raw chunk from the gateway API,\n // only emit it if includeRawChunks is true\n if (streamPart.type === 'raw' && !options.includeRawChunks) {\n return; // Skip raw chunks if not requested\n }\n\n controller.enqueue(streamPart);\n } else {\n controller.error(\n (chunk as { success: false; error: unknown }).error,\n );\n }\n },\n }),\n ),\n request: { body },\n response: { headers: responseHeaders },\n };\n } catch (error) {\n throw asGatewayError(error);\n }\n }\n\n private isFilePart(part: unknown) {\n return (\n part && typeof part === 'object' && 'type' in part && part.type === 'file'\n );\n }\n\n /**\n * Encodes image parts in the prompt to base64. Mutates the passed options\n * instance directly to avoid copying the image data.\n * @param options - The options to encode.\n * @returns The options with the image parts encoded.\n */\n private maybeEncodeFileParts(options: LanguageModelV2CallOptions) {\n for (const message of options.prompt) {\n for (const part of message.content) {\n if (this.isFilePart(part)) {\n const filePart = part as LanguageModelV2FilePart;\n // If the image part is a URL it will get cleanly converted to a string.\n // If it's a binary image attachment we convert it to a data url.\n // In either case, server-side we should only ever see URLs as strings.\n if (filePart.data instanceof Uint8Array) {\n const buffer = Uint8Array.from(filePart.data);\n const base64Data = Buffer.from(buffer).toString('base64');\n filePart.data = new URL(\n `data:${filePart.mediaType || 'application/octet-stream'};base64,${base64Data}`,\n );\n }\n }\n }\n }\n return options;\n }\n\n private getUrl() {\n return `${this.config.baseURL}/language-model`;\n }\n\n private getModelConfigHeaders(modelId: string, streaming: boolean) {\n return {\n 'ai-language-model-specification-version': '2',\n 'ai-language-model-id': modelId,\n 'ai-language-model-streaming': String(streaming),\n };\n }\n}\n","import { GatewayAuthenticationError } from './errors';\n\nexport async function getVercelOidcToken(): Promise<string> {\n const token =\n getContext().headers?.['x-vercel-oidc-token'] ??\n process.env.VERCEL_OIDC_TOKEN;\n\n if (!token) {\n throw new GatewayAuthenticationError({\n message: `Failed to get Vercel OIDC token for AI Gateway access.\nThe token is expected to be provided via the 'VERCEL_OIDC_TOKEN' environment variable. It expires every 12 hours.\n- make sure your Vercel project settings have OIDC enabled\n- if you're running locally with 'vercel dev' the token is automatically obtained and refreshed for you\n- if you're running locally with your own dev server script you can fetch/update the token by running 'vercel env pull'\n- in production or preview the token is automatically obtained and refreshed for you`,\n statusCode: 401,\n });\n }\n\n return token;\n}\n\nexport async function getVercelRequestId(): Promise<string | undefined> {\n return getContext().headers?.['x-vercel-id'];\n}\n\ntype Context = {\n headers?: Record<string, string>;\n};\n\nconst SYMBOL_FOR_REQ_CONTEXT = Symbol.for('@vercel/request-context');\n\nfunction getContext(): Context {\n const fromSymbol: typeof globalThis & {\n [SYMBOL_FOR_REQ_CONTEXT]?: { get?: () => Context };\n } = globalThis;\n return fromSymbol[SYMBOL_FOR_REQ_CONTEXT]?.get?.() ?? {};\n}\n"],"mappings":"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","names":["z","marker","symbol","_a","_b","name","marker","symbol","_a","_b","name","marker","symbol","_a","_b","name","marker","symbol","_a","_b","name","marker","symbol","_a","_b","name","marker","symbol","_a","_b","z","_a","z","createJsonErrorResponseHandler","createJsonResponseHandler","resolve","z","resolve","createJsonResponseHandler","z","createJsonErrorResponseHandler","_a","_b","_a","_b"]}
1
+ {"version":3,"sources":["../src/gateway-provider.ts","../src/errors/as-gateway-error.ts","../src/errors/create-gateway-error.ts","../src/errors/gateway-error.ts","../src/errors/gateway-authentication-error.ts","../src/errors/gateway-invalid-request-error.ts","../src/errors/gateway-rate-limit-error.ts","../src/errors/gateway-model-not-found-error.ts","../src/errors/gateway-internal-server-error.ts","../src/errors/gateway-response-error.ts","../src/errors/extract-api-call-response.ts","../src/gateway-fetch-metadata.ts","../src/gateway-language-model.ts","../src/errors/parse-auth-method.ts","../src/vercel-environment.ts"],"sourcesContent":["import type { LanguageModelV2, ProviderV2 } from '@ai-sdk/provider';\nimport { NoSuchModelError } from '@ai-sdk/provider';\nimport {\n loadOptionalSetting,\n withoutTrailingSlash,\n} from '@ai-sdk/provider-utils';\nimport { type FetchFunction } from '@ai-sdk/provider-utils';\nimport { asGatewayError } from './errors';\nimport {\n GatewayFetchMetadata,\n type GatewayFetchMetadataResponse,\n} from './gateway-fetch-metadata';\nimport { GatewayLanguageModel } from './gateway-language-model';\nimport type { GatewayModelId } from './gateway-language-model-settings';\nimport { getVercelOidcToken, getVercelRequestId } from './vercel-environment';\nimport { GatewayAuthenticationError } from './errors';\nimport { z } from 'zod';\nimport {\n GATEWAY_AUTH_METHOD_HEADER,\n parseAuthMethod,\n} from './errors/parse-auth-method';\n\nexport interface GatewayProvider extends ProviderV2 {\n (modelId: GatewayModelId): LanguageModelV2;\n\n /**\nCreates a model for text generation.\n*/\n languageModel(modelId: GatewayModelId): LanguageModelV2;\n\n /**\nReturns available providers and models for use with the remote provider.\n */\n getAvailableModels(): Promise<GatewayFetchMetadataResponse>;\n}\n\nexport interface GatewayProviderSettings {\n /**\nThe base URL prefix for API calls. Defaults to `https://ai-gateway.vercel.sh/v1/ai`.\n */\n baseURL?: string;\n\n /**\nAPI key that is being sent using the `Authorization` header.\n */\n apiKey?: string;\n\n /**\nCustom headers to include in the requests.\n */\n headers?: Record<string, string>;\n\n /**\nCustom fetch implementation. You can use it as a middleware to intercept requests,\nor to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n\n /**\nHow frequently to refresh the metadata cache in milliseconds.\n */\n metadataCacheRefreshMillis?: number;\n\n /**\n * @internal For testing purposes only\n */\n _internal?: {\n currentDate?: () => Date;\n };\n}\n\nconst AI_GATEWAY_PROTOCOL_VERSION = '0.0.1';\n\n/**\nCreate a remote provider instance.\n */\nexport function createGatewayProvider(\n options: GatewayProviderSettings = {},\n): GatewayProvider {\n let pendingMetadata: Promise<GatewayFetchMetadataResponse> | null = null;\n let metadataCache: GatewayFetchMetadataResponse | null = null;\n const cacheRefreshMillis =\n options.metadataCacheRefreshMillis ?? 1000 * 60 * 5;\n let lastFetchTime = 0;\n\n const baseURL =\n withoutTrailingSlash(options.baseURL) ??\n 'https://ai-gateway.vercel.sh/v1/ai';\n\n const getHeaders = async () => {\n const auth = await getGatewayAuthToken(options);\n if (auth) {\n return {\n Authorization: `Bearer ${auth.token}`,\n 'ai-gateway-protocol-version': AI_GATEWAY_PROTOCOL_VERSION,\n [GATEWAY_AUTH_METHOD_HEADER]: auth.authMethod,\n ...options.headers,\n };\n }\n\n throw GatewayAuthenticationError.createContextualError({\n apiKeyProvided: false,\n oidcTokenProvided: false,\n statusCode: 401,\n });\n };\n\n const createLanguageModel = (modelId: GatewayModelId) => {\n const deploymentId = loadOptionalSetting({\n settingValue: undefined,\n environmentVariableName: 'VERCEL_DEPLOYMENT_ID',\n });\n const environment = loadOptionalSetting({\n settingValue: undefined,\n environmentVariableName: 'VERCEL_ENV',\n });\n const region = loadOptionalSetting({\n settingValue: undefined,\n environmentVariableName: 'VERCEL_REGION',\n });\n\n return new GatewayLanguageModel(modelId, {\n provider: 'gateway',\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n o11yHeaders: async () => {\n const requestId = await getVercelRequestId();\n return {\n ...(deploymentId && { 'ai-o11y-deployment-id': deploymentId }),\n ...(environment && { 'ai-o11y-environment': environment }),\n ...(region && { 'ai-o11y-region': region }),\n ...(requestId && { 'ai-o11y-request-id': requestId }),\n };\n },\n });\n };\n\n const getAvailableModels = async () => {\n const now = options._internal?.currentDate?.().getTime() ?? Date.now();\n if (!pendingMetadata || now - lastFetchTime > cacheRefreshMillis) {\n lastFetchTime = now;\n\n pendingMetadata = new GatewayFetchMetadata({\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n })\n .getAvailableModels()\n .then(metadata => {\n metadataCache = metadata;\n return metadata;\n })\n .catch(async (error: unknown) => {\n throw asGatewayError(error, parseAuthMethod(await getHeaders()));\n });\n }\n\n return metadataCache ? Promise.resolve(metadataCache) : pendingMetadata;\n };\n\n const provider = function (modelId: GatewayModelId) {\n if (new.target) {\n throw new Error(\n 'The Gateway Provider model function cannot be called with the new keyword.',\n );\n }\n\n return createLanguageModel(modelId);\n };\n\n provider.getAvailableModels = getAvailableModels;\n provider.imageModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'imageModel' });\n };\n provider.languageModel = createLanguageModel;\n provider.textEmbeddingModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'textEmbeddingModel' });\n };\n\n return provider;\n}\n\nexport const gateway = createGatewayProvider();\n\nexport async function getGatewayAuthToken(\n options: GatewayProviderSettings,\n): Promise<{\n token: string;\n authMethod: 'api-key' | 'oidc';\n} | null> {\n const apiKey = loadOptionalSetting({\n settingValue: options.apiKey,\n environmentVariableName: 'AI_GATEWAY_API_KEY',\n });\n\n if (apiKey) {\n return {\n token: apiKey,\n authMethod: 'api-key',\n };\n }\n\n try {\n const oidcToken = await getVercelOidcToken();\n return {\n token: oidcToken,\n authMethod: 'oidc',\n };\n } catch (error) {\n return null;\n }\n}\n","import { APICallError } from '@ai-sdk/provider';\nimport { extractApiCallResponse, GatewayError } from '.';\nimport { createGatewayErrorFromResponse } from './create-gateway-error';\n\nexport function asGatewayError(\n error: unknown,\n authMethod?: 'api-key' | 'oidc',\n) {\n if (GatewayError.isInstance(error)) {\n return error;\n }\n\n if (APICallError.isInstance(error)) {\n return createGatewayErrorFromResponse({\n response: extractApiCallResponse(error),\n statusCode: error.statusCode ?? 500,\n defaultMessage: 'Gateway request failed',\n cause: error,\n authMethod,\n });\n }\n\n return createGatewayErrorFromResponse({\n response: {},\n statusCode: 500,\n defaultMessage:\n error instanceof Error\n ? `Gateway request failed: ${error.message}`\n : 'Unknown Gateway error',\n cause: error,\n authMethod,\n });\n}\n","import { z } from 'zod/v4';\nimport type { GatewayError } from './gateway-error';\nimport { GatewayAuthenticationError } from './gateway-authentication-error';\nimport { GatewayInvalidRequestError } from './gateway-invalid-request-error';\nimport { GatewayRateLimitError } from './gateway-rate-limit-error';\nimport {\n GatewayModelNotFoundError,\n modelNotFoundParamSchema,\n} from './gateway-model-not-found-error';\nimport { GatewayInternalServerError } from './gateway-internal-server-error';\nimport { GatewayResponseError } from './gateway-response-error';\n\nexport function createGatewayErrorFromResponse({\n response,\n statusCode,\n defaultMessage = 'Gateway request failed',\n cause,\n authMethod,\n}: {\n response: unknown;\n statusCode: number;\n defaultMessage?: string;\n cause?: unknown;\n authMethod?: 'api-key' | 'oidc';\n}): GatewayError {\n const parseResult = gatewayErrorResponseSchema.safeParse(response);\n if (!parseResult.success) {\n return new GatewayResponseError({\n message: `Invalid error response format: ${defaultMessage}`,\n statusCode,\n response,\n validationError: parseResult.error,\n cause,\n });\n }\n\n const validatedResponse: GatewayErrorResponse = parseResult.data;\n const errorType = validatedResponse.error.type;\n const message = validatedResponse.error.message;\n\n switch (errorType) {\n case 'authentication_error':\n return GatewayAuthenticationError.createContextualError({\n apiKeyProvided: authMethod === 'api-key',\n oidcTokenProvided: authMethod === 'oidc',\n statusCode,\n cause,\n });\n case 'invalid_request_error':\n return new GatewayInvalidRequestError({ message, statusCode, cause });\n case 'rate_limit_exceeded':\n return new GatewayRateLimitError({ message, statusCode, cause });\n case 'model_not_found': {\n const modelResult = modelNotFoundParamSchema.safeParse(\n validatedResponse.error.param,\n );\n return new GatewayModelNotFoundError({\n message,\n statusCode,\n modelId: modelResult.success ? modelResult.data.modelId : undefined,\n cause,\n });\n }\n case 'internal_server_error':\n return new GatewayInternalServerError({ message, statusCode, cause });\n default:\n return new GatewayInternalServerError({ message, statusCode, cause });\n }\n}\n\nconst gatewayErrorResponseSchema = z.object({\n error: z.object({\n message: z.string(),\n type: z.string().nullish(),\n param: z.unknown().nullish(),\n code: z.union([z.string(), z.number()]).nullish(),\n }),\n});\n\nexport type GatewayErrorResponse = z.infer<typeof gatewayErrorResponseSchema>;\n","const marker = 'vercel.ai.gateway.error';\nconst symbol = Symbol.for(marker);\n\nexport abstract class GatewayError extends Error {\n private readonly [symbol] = true; // used in isInstance\n\n abstract readonly name: string;\n abstract readonly type: string;\n readonly statusCode: number;\n readonly cause?: unknown;\n\n constructor({\n message,\n statusCode = 500,\n cause,\n }: {\n message: string;\n statusCode?: number;\n cause?: unknown;\n }) {\n super(message);\n this.statusCode = statusCode;\n this.cause = cause;\n }\n\n /**\n * Checks if the given error is a Gateway Error.\n * @param {unknown} error - The error to check.\n * @returns {boolean} True if the error is a Gateway Error, false otherwise.\n */\n static isInstance(error: unknown): error is GatewayError {\n return GatewayError.hasMarker(error);\n }\n\n static hasMarker(error: unknown): error is GatewayError {\n return (\n typeof error === 'object' &&\n error !== null &&\n symbol in error &&\n (error as any)[symbol] === true\n );\n }\n}\n","import { GatewayError } from './gateway-error';\n\nconst name = 'GatewayAuthenticationError';\nconst marker = `vercel.ai.gateway.error.${name}`;\nconst symbol = Symbol.for(marker);\n\n/**\n * Authentication failed - invalid API key or OIDC token\n */\nexport class GatewayAuthenticationError extends GatewayError {\n private readonly [symbol] = true; // used in isInstance\n\n readonly name = name;\n readonly type = 'authentication_error';\n\n constructor({\n message = 'Authentication failed',\n statusCode = 401,\n cause,\n }: {\n message?: string;\n statusCode?: number;\n cause?: unknown;\n } = {}) {\n super({ message, statusCode, cause });\n }\n\n static isInstance(error: unknown): error is GatewayAuthenticationError {\n return GatewayError.hasMarker(error) && symbol in error;\n }\n\n /**\n * Creates a contextual error message when authentication fails\n */\n static createContextualError({\n apiKeyProvided,\n oidcTokenProvided,\n message = 'Authentication failed',\n statusCode = 401,\n cause,\n }: {\n apiKeyProvided: boolean;\n oidcTokenProvided: boolean;\n message?: string;\n statusCode?: number;\n cause?: unknown;\n }): GatewayAuthenticationError {\n let contextualMessage: string;\n\n if (apiKeyProvided) {\n contextualMessage = `AI Gateway authentication failed: Invalid API key provided.\n\nThe token is expected to be provided via the 'apiKey' option or 'AI_GATEWAY_API_KEY' environment variable.`;\n } else if (oidcTokenProvided) {\n contextualMessage = `AI Gateway authentication failed: Invalid OIDC token provided.\n\nThe token is expected to be provided via the 'VERCEL_OIDC_TOKEN' environment variable. It expires every 12 hours.\n- make sure your Vercel project settings have OIDC enabled\n- if running locally with 'vercel dev', the token is automatically obtained and refreshed\n- if running locally with your own dev server, run 'vercel env pull' to fetch the token\n- in production/preview, the token is automatically obtained and refreshed\n\nAlternative: Provide an API key via 'apiKey' option or 'AI_GATEWAY_API_KEY' environment variable.`;\n } else {\n contextualMessage = `AI Gateway authentication failed: No authentication provided.\n\nProvide either an API key or OIDC token.\n\nAPI key instructions:\n\nThe token is expected to be provided via the 'apiKey' option or 'AI_GATEWAY_API_KEY' environment variable.\n\nOIDC token instructions:\n\nThe token is expected to be provided via the 'VERCEL_OIDC_TOKEN' environment variable. It expires every 12 hours.\n- make sure your Vercel project settings have OIDC enabled\n- if running locally with 'vercel dev', the token is automatically obtained and refreshed\n- if running locally with your own dev server, run 'vercel env pull' to fetch the token\n- in production/preview, the token is automatically obtained and refreshed`;\n }\n\n return new GatewayAuthenticationError({\n message: contextualMessage,\n statusCode,\n cause,\n });\n }\n}\n","import { GatewayError } from './gateway-error';\n\nconst name = 'GatewayInvalidRequestError';\nconst marker = `vercel.ai.gateway.error.${name}`;\nconst symbol = Symbol.for(marker);\n\n/**\n * Invalid request - missing headers, malformed data, etc.\n */\nexport class GatewayInvalidRequestError extends GatewayError {\n private readonly [symbol] = true; // used in isInstance\n\n readonly name = name;\n readonly type = 'invalid_request_error';\n\n constructor({\n message = 'Invalid request',\n statusCode = 400,\n cause,\n }: {\n message?: string;\n statusCode?: number;\n cause?: unknown;\n } = {}) {\n super({ message, statusCode, cause });\n }\n\n static isInstance(error: unknown): error is GatewayInvalidRequestError {\n return GatewayError.hasMarker(error) && symbol in error;\n }\n}\n","import { GatewayError } from './gateway-error';\n\nconst name = 'GatewayRateLimitError';\nconst marker = `vercel.ai.gateway.error.${name}`;\nconst symbol = Symbol.for(marker);\n\n/**\n * Rate limit exceeded.\n */\nexport class GatewayRateLimitError extends GatewayError {\n private readonly [symbol] = true; // used in isInstance\n\n readonly name = name;\n readonly type = 'rate_limit_exceeded';\n\n constructor({\n message = 'Rate limit exceeded',\n statusCode = 429,\n cause,\n }: {\n message?: string;\n statusCode?: number;\n cause?: unknown;\n } = {}) {\n super({ message, statusCode, cause });\n }\n\n static isInstance(error: unknown): error is GatewayRateLimitError {\n return GatewayError.hasMarker(error) && symbol in error;\n }\n}\n","import { z } from 'zod/v4';\nimport { GatewayError } from './gateway-error';\n\nconst name = 'GatewayModelNotFoundError';\nconst marker = `vercel.ai.gateway.error.${name}`;\nconst symbol = Symbol.for(marker);\n\nexport const modelNotFoundParamSchema = z.object({\n modelId: z.string(),\n});\n\n/**\n * Model not found or not available\n */\nexport class GatewayModelNotFoundError extends GatewayError {\n private readonly [symbol] = true; // used in isInstance\n\n readonly name = name;\n readonly type = 'model_not_found';\n readonly modelId?: string;\n\n constructor({\n message = 'Model not found',\n statusCode = 404,\n modelId,\n cause,\n }: {\n message?: string;\n statusCode?: number;\n modelId?: string;\n cause?: unknown;\n } = {}) {\n super({ message, statusCode, cause });\n this.modelId = modelId;\n }\n\n static isInstance(error: unknown): error is GatewayModelNotFoundError {\n return GatewayError.hasMarker(error) && symbol in error;\n }\n}\n","import { GatewayError } from './gateway-error';\n\nconst name = 'GatewayInternalServerError';\nconst marker = `vercel.ai.gateway.error.${name}`;\nconst symbol = Symbol.for(marker);\n\n/**\n * Internal server error from the Gateway\n */\nexport class GatewayInternalServerError extends GatewayError {\n private readonly [symbol] = true; // used in isInstance\n\n readonly name = name;\n readonly type = 'internal_server_error';\n\n constructor({\n message = 'Internal server error',\n statusCode = 500,\n cause,\n }: {\n message?: string;\n statusCode?: number;\n cause?: unknown;\n } = {}) {\n super({ message, statusCode, cause });\n }\n\n static isInstance(error: unknown): error is GatewayInternalServerError {\n return GatewayError.hasMarker(error) && symbol in error;\n }\n}\n","import { GatewayError } from './gateway-error';\nimport type { ZodError } from 'zod/v4';\n\nconst name = 'GatewayResponseError';\nconst marker = `vercel.ai.gateway.error.${name}`;\nconst symbol = Symbol.for(marker);\n\n/**\n * Gateway response parsing error\n */\nexport class GatewayResponseError extends GatewayError {\n private readonly [symbol] = true; // used in isInstance\n\n readonly name = name;\n readonly type = 'response_error';\n readonly response?: unknown;\n readonly validationError?: ZodError;\n\n constructor({\n message = 'Invalid response from Gateway',\n statusCode = 502,\n response,\n validationError,\n cause,\n }: {\n message?: string;\n statusCode?: number;\n response?: unknown;\n validationError?: ZodError;\n cause?: unknown;\n } = {}) {\n super({ message, statusCode, cause });\n this.response = response;\n this.validationError = validationError;\n }\n\n static isInstance(error: unknown): error is GatewayResponseError {\n return GatewayError.hasMarker(error) && symbol in error;\n }\n}\n","import type { APICallError } from '@ai-sdk/provider';\n\nexport function extractApiCallResponse(error: APICallError): unknown {\n if (error.data !== undefined) {\n return error.data;\n }\n if (error.responseBody != null) {\n try {\n return JSON.parse(error.responseBody);\n } catch {\n return error.responseBody;\n }\n }\n return {};\n}\n","import {\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n getFromApi,\n resolve,\n} from '@ai-sdk/provider-utils';\nimport { asGatewayError } from './errors';\nimport type { GatewayConfig } from './gateway-config';\nimport type { GatewayLanguageModelEntry } from './gateway-model-entry';\nimport { z } from 'zod/v4';\n\ntype GatewayFetchMetadataConfig = GatewayConfig;\n\nexport interface GatewayFetchMetadataResponse {\n models: GatewayLanguageModelEntry[];\n}\n\nexport class GatewayFetchMetadata {\n constructor(private readonly config: GatewayFetchMetadataConfig) {}\n\n async getAvailableModels(): Promise<GatewayFetchMetadataResponse> {\n try {\n const { value } = await getFromApi({\n url: `${this.config.baseURL}/config`,\n headers: await resolve(this.config.headers()),\n successfulResponseHandler: createJsonResponseHandler(\n gatewayFetchMetadataSchema,\n ),\n failedResponseHandler: createJsonErrorResponseHandler({\n errorSchema: z.any(),\n errorToMessage: data => data,\n }),\n fetch: this.config.fetch,\n });\n\n return value;\n } catch (error) {\n throw asGatewayError(error);\n }\n }\n}\n\nconst gatewayLanguageModelSpecificationSchema = z.object({\n specificationVersion: z.literal('v2'),\n provider: z.string(),\n modelId: z.string(),\n});\n\nconst gatewayLanguageModelPricingSchema = z.object({\n input: z.string(),\n output: z.string(),\n});\n\nconst gatewayLanguageModelEntrySchema = z.object({\n id: z.string(),\n name: z.string(),\n description: z.string().nullish(),\n pricing: gatewayLanguageModelPricingSchema.nullish(),\n specification: gatewayLanguageModelSpecificationSchema,\n});\n\nconst gatewayFetchMetadataSchema = z.object({\n models: z.array(gatewayLanguageModelEntrySchema),\n});\n","import type {\n LanguageModelV2,\n LanguageModelV2CallOptions,\n LanguageModelV2FilePart,\n LanguageModelV2StreamPart,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createEventSourceResponseHandler,\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n postJsonToApi,\n resolve,\n type ParseResult,\n type Resolvable,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport type { GatewayConfig } from './gateway-config';\nimport type { GatewayModelId } from './gateway-language-model-settings';\nimport { asGatewayError } from './errors';\nimport { parseAuthMethod } from './errors/parse-auth-method';\n\ntype GatewayChatConfig = GatewayConfig & {\n provider: string;\n o11yHeaders: Resolvable<Record<string, string>>;\n};\n\nexport class GatewayLanguageModel implements LanguageModelV2 {\n readonly specificationVersion = 'v2';\n readonly supportedUrls = { '*/*': [/.*/] };\n\n constructor(\n readonly modelId: GatewayModelId,\n private readonly config: GatewayChatConfig,\n ) {}\n\n get provider(): string {\n return this.config.provider;\n }\n\n async doGenerate(\n options: Parameters<LanguageModelV2['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV2['doGenerate']>>> {\n const { abortSignal, ...body } = options;\n const resolvedHeaders = await resolve(this.config.headers());\n try {\n const {\n responseHeaders,\n value: responseBody,\n rawValue: rawResponse,\n } = await postJsonToApi({\n url: this.getUrl(),\n headers: combineHeaders(\n resolvedHeaders,\n options.headers,\n this.getModelConfigHeaders(this.modelId, false),\n await resolve(this.config.o11yHeaders),\n ),\n body: this.maybeEncodeFileParts(body),\n successfulResponseHandler: createJsonResponseHandler(z.any()),\n failedResponseHandler: createJsonErrorResponseHandler({\n errorSchema: z.any(),\n errorToMessage: data => data,\n }),\n ...(abortSignal && { abortSignal }),\n fetch: this.config.fetch,\n });\n\n return {\n ...responseBody,\n request: { body },\n response: { headers: responseHeaders, body: rawResponse },\n warnings: [],\n };\n } catch (error) {\n throw asGatewayError(error, parseAuthMethod(resolvedHeaders));\n }\n }\n\n async doStream(\n options: Parameters<LanguageModelV2['doStream']>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV2['doStream']>>> {\n const { abortSignal, ...body } = options;\n const resolvedHeaders = await resolve(this.config.headers());\n try {\n const { value: response, responseHeaders } = await postJsonToApi({\n url: this.getUrl(),\n headers: combineHeaders(\n resolvedHeaders,\n options.headers,\n this.getModelConfigHeaders(this.modelId, true),\n await resolve(this.config.o11yHeaders),\n ),\n body: this.maybeEncodeFileParts(body),\n successfulResponseHandler: createEventSourceResponseHandler(z.any()),\n failedResponseHandler: createJsonErrorResponseHandler({\n errorSchema: z.any(),\n errorToMessage: data => data,\n }),\n ...(abortSignal && { abortSignal }),\n fetch: this.config.fetch,\n });\n\n return {\n stream: response.pipeThrough(\n new TransformStream<\n ParseResult<LanguageModelV2StreamPart>,\n LanguageModelV2StreamPart\n >({\n transform(chunk, controller) {\n if (chunk.success) {\n const streamPart = chunk.value;\n\n // Handle raw chunks: if this is a raw chunk from the gateway API,\n // only emit it if includeRawChunks is true\n if (streamPart.type === 'raw' && !options.includeRawChunks) {\n return; // Skip raw chunks if not requested\n }\n\n if (\n streamPart.type === 'response-metadata' &&\n streamPart.timestamp &&\n typeof streamPart.timestamp === 'string'\n ) {\n streamPart.timestamp = new Date(streamPart.timestamp);\n }\n\n controller.enqueue(streamPart);\n } else {\n controller.error(\n (chunk as { success: false; error: unknown }).error,\n );\n }\n },\n }),\n ),\n request: { body },\n response: { headers: responseHeaders },\n };\n } catch (error) {\n throw asGatewayError(error, parseAuthMethod(resolvedHeaders));\n }\n }\n\n private isFilePart(part: unknown) {\n return (\n part && typeof part === 'object' && 'type' in part && part.type === 'file'\n );\n }\n\n /**\n * Encodes file parts in the prompt to base64. Mutates the passed options\n * instance directly to avoid copying the file data.\n * @param options - The options to encode.\n * @returns The options with the file parts encoded.\n */\n private maybeEncodeFileParts(options: LanguageModelV2CallOptions) {\n for (const message of options.prompt) {\n for (const part of message.content) {\n if (this.isFilePart(part)) {\n const filePart = part as LanguageModelV2FilePart;\n // If the file part is a URL it will get cleanly converted to a string.\n // If it's a binary file attachment we convert it to a data url.\n // In either case, server-side we should only ever see URLs as strings.\n if (filePart.data instanceof Uint8Array) {\n const buffer = Uint8Array.from(filePart.data);\n const base64Data = Buffer.from(buffer).toString('base64');\n filePart.data = new URL(\n `data:${filePart.mediaType || 'application/octet-stream'};base64,${base64Data}`,\n );\n }\n }\n }\n }\n return options;\n }\n\n private getUrl() {\n return `${this.config.baseURL}/language-model`;\n }\n\n private getModelConfigHeaders(modelId: string, streaming: boolean) {\n return {\n 'ai-language-model-specification-version': '2',\n 'ai-language-model-id': modelId,\n 'ai-language-model-streaming': String(streaming),\n };\n }\n}\n","import { z } from 'zod';\n\nexport const GATEWAY_AUTH_METHOD_HEADER = 'x-ai-gateway-auth-method' as const;\n\nexport function parseAuthMethod(headers: Record<string, string | undefined>) {\n const result = gatewayAuthMethodSchema.safeParse(\n headers[GATEWAY_AUTH_METHOD_HEADER],\n );\n return result.success ? result.data : undefined;\n}\n\nconst gatewayAuthMethodSchema = z.union([\n z.literal('api-key'),\n z.literal('oidc'),\n]);\n","import { GatewayAuthenticationError } from './errors';\n\nexport async function getVercelOidcToken(): Promise<string> {\n const token =\n getContext().headers?.['x-vercel-oidc-token'] ??\n process.env.VERCEL_OIDC_TOKEN;\n\n if (!token) {\n throw new GatewayAuthenticationError({\n message: 'OIDC token not available',\n statusCode: 401,\n });\n }\n\n return token;\n}\n\nexport async function getVercelRequestId(): Promise<string | undefined> {\n return getContext().headers?.['x-vercel-id'];\n}\n\ntype Context = {\n headers?: Record<string, string>;\n};\n\nconst SYMBOL_FOR_REQ_CONTEXT = Symbol.for('@vercel/request-context');\n\nfunction getContext(): Context {\n const fromSymbol: typeof globalThis & {\n [SYMBOL_FOR_REQ_CONTEXT]?: { get?: () => Context };\n } = globalThis;\n return fromSymbol[SYMBOL_FOR_REQ_CONTEXT]?.get?.() ?? {};\n}\n"],"mappings":"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","names":["z","marker","symbol","_a","_b","name","marker","symbol","_a","_b","name","marker","symbol","_a","_b","name","marker","symbol","_a","_b","name","marker","symbol","_a","_b","name","marker","symbol","_a","_b","z","_a","z","createJsonErrorResponseHandler","createJsonResponseHandler","resolve","z","z","resolve","createJsonResponseHandler","z","createJsonErrorResponseHandler","_a","_b","_a","_b"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@ai-sdk/gateway",
3
3
  "private": false,
4
- "version": "1.0.0-beta.2",
4
+ "version": "1.0.0-beta.4",
5
5
  "license": "Apache-2.0",
6
6
  "sideEffects": false,
7
7
  "main": "./dist/index.js",