{"version":3,"sources":["../../../src/maas/edge/google-vertex-maas-provider-edge.ts","../../../src/edge/google-vertex-auth-edge.ts","../../../src/version.ts","../../../src/maas/google-vertex-maas-provider.ts"],"sourcesContent":["import { resolve, type FetchFunction } from '@ai-sdk/provider-utils';\nimport {\n  generateAuthToken,\n  type GoogleCredentials,\n} from '../../edge/google-vertex-auth-edge';\nimport {\n  createVertexMaas as createVertexMaasOriginal,\n  type GoogleVertexMaasProvider,\n  type GoogleVertexMaasProviderSettings as GoogleVertexMaasProviderSettingsOriginal,\n} from '../google-vertex-maas-provider';\n\nexport type { GoogleVertexMaasProvider };\n\nexport interface GoogleVertexMaasProviderSettings extends GoogleVertexMaasProviderSettingsOriginal {\n  /**\n   * Optional. The Google credentials for the Google Cloud service account. If\n   * not provided, the Google Vertex provider will use environment variables to\n   * load the credentials.\n   */\n  googleCredentials?: GoogleCredentials;\n}\n\n/**\n * Create a Google Vertex AI MaaS (Model as a Service) provider instance for Edge runtimes.\n * Uses the OpenAI-compatible Chat Completions API for partner and open models.\n * Automatically handles Google Cloud authentication.\n *\n * @see https://cloud.google.com/vertex-ai/generative-ai/docs/maas/use-open-models\n */\nexport function createVertexMaas(\n  options: GoogleVertexMaasProviderSettings = {},\n): GoogleVertexMaasProvider {\n  // Create a custom fetch wrapper that adds auth headers\n  const customFetch: FetchFunction = async (url, init) => {\n    const token = await generateAuthToken(options.googleCredentials);\n    const resolvedHeaders = await resolve(options.headers);\n    const authHeaders = {\n      ...resolvedHeaders,\n      Authorization: `Bearer ${token}`,\n    };\n\n    // Merge auth headers with existing headers from init\n    const fetchInit = {\n      ...init,\n      headers: {\n        ...init?.headers,\n        ...authHeaders,\n      },\n    };\n\n    // Call the original fetch or user's custom fetch\n    return (options.fetch ?? fetch)(url, fetchInit);\n  };\n\n  return createVertexMaasOriginal({\n    ...options,\n    fetch: customFetch,\n    headers: undefined, // Don't pass headers, we handle them in fetch\n  });\n}\n\n/**\n * Default Google Vertex AI MaaS provider instance for Edge runtimes.\n */\nexport const vertexMaas = createVertexMaas();\n","import {\n  loadOptionalSetting,\n  loadSetting,\n  withUserAgentSuffix,\n  getRuntimeEnvironmentUserAgent,\n} from '@ai-sdk/provider-utils';\nimport { VERSION } from '../version';\n\nexport interface GoogleCredentials {\n  /**\n   * The client email for the Google Cloud service account. Defaults to the\n   * value of the `GOOGLE_CLIENT_EMAIL` environment variable.\n   */\n  clientEmail: string;\n\n  /**\n   * The private key for the Google Cloud service account. Defaults to the\n   * value of the `GOOGLE_PRIVATE_KEY` environment variable.\n   */\n  privateKey: string;\n\n  /**\n   * Optional. The private key ID for the Google Cloud service account. Defaults\n   * to the value of the `GOOGLE_PRIVATE_KEY_ID` environment variable.\n   */\n  privateKeyId?: string;\n}\n\nconst loadCredentials = async (): Promise<GoogleCredentials> => {\n  try {\n    return {\n      clientEmail: loadSetting({\n        settingValue: undefined,\n        settingName: 'clientEmail',\n        environmentVariableName: 'GOOGLE_CLIENT_EMAIL',\n        description: 'Google client email',\n      }),\n      privateKey: loadSetting({\n        settingValue: undefined,\n        settingName: 'privateKey',\n        environmentVariableName: 'GOOGLE_PRIVATE_KEY',\n        description: 'Google private key',\n      }),\n      privateKeyId: loadOptionalSetting({\n        settingValue: undefined,\n        environmentVariableName: 'GOOGLE_PRIVATE_KEY_ID',\n      }),\n    };\n  } catch (error: any) {\n    throw new Error(`Failed to load Google credentials: ${error.message}`);\n  }\n};\n\n// Convert a string to base64url\nconst base64url = (str: string) => {\n  return btoa(str).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=/g, '');\n};\nconst importPrivateKey = async (pemKey: string) => {\n  const pemHeader = '-----BEGIN PRIVATE KEY-----';\n  const pemFooter = '-----END PRIVATE KEY-----';\n\n  // Remove header, footer, and any whitespace/newlines\n  const pemContents = pemKey\n    .replace(pemHeader, '')\n    .replace(pemFooter, '')\n    .replace(/\\s/g, '');\n\n  // Decode base64 to binary\n  const binaryString = atob(pemContents);\n\n  // Convert binary string to Uint8Array\n  const binaryData = new Uint8Array(binaryString.length);\n  for (let i = 0; i < binaryString.length; i++) {\n    binaryData[i] = binaryString.charCodeAt(i);\n  }\n\n  return await crypto.subtle.importKey(\n    'pkcs8',\n    binaryData,\n    { name: 'RSASSA-PKCS1-v1_5', hash: 'SHA-256' },\n    true,\n    ['sign'],\n  );\n};\n\nconst buildJwt = async (credentials: GoogleCredentials) => {\n  const now = Math.floor(Date.now() / 1000);\n\n  // Only include kid in header if privateKeyId is provided\n  const header: { alg: string; typ: string; kid?: string } = {\n    alg: 'RS256',\n    typ: 'JWT',\n  };\n\n  if (credentials.privateKeyId) {\n    header.kid = credentials.privateKeyId;\n  }\n\n  const payload = {\n    iss: credentials.clientEmail,\n    scope: 'https://www.googleapis.com/auth/cloud-platform',\n    aud: 'https://oauth2.googleapis.com/token',\n    exp: now + 3600,\n    iat: now,\n  };\n\n  const privateKey = await importPrivateKey(credentials.privateKey);\n\n  const signingInput = `${base64url(JSON.stringify(header))}.${base64url(\n    JSON.stringify(payload),\n  )}`;\n  const encoder = new TextEncoder();\n  const data = encoder.encode(signingInput);\n\n  const signature = await crypto.subtle.sign(\n    'RSASSA-PKCS1-v1_5',\n    privateKey,\n    data,\n  );\n\n  const signatureBase64 = base64url(\n    String.fromCharCode(...new Uint8Array(signature)),\n  );\n\n  return `${base64url(JSON.stringify(header))}.${base64url(\n    JSON.stringify(payload),\n  )}.${signatureBase64}`;\n};\n\n/**\n * Generate an authentication token for Google Vertex AI in a manner compatible\n * with the Edge runtime.\n */\nexport async function generateAuthToken(credentials?: GoogleCredentials) {\n  try {\n    const creds = credentials || (await loadCredentials());\n    const jwt = await buildJwt(creds);\n\n    const response = await fetch('https://oauth2.googleapis.com/token', {\n      method: 'POST',\n      headers: withUserAgentSuffix(\n        { 'Content-Type': 'application/x-www-form-urlencoded' },\n        `ai-sdk/google-vertex/${VERSION}`,\n        getRuntimeEnvironmentUserAgent(),\n      ),\n      body: new URLSearchParams({\n        grant_type: 'urn:ietf:params:oauth:grant-type:jwt-bearer',\n        assertion: jwt,\n      }),\n    });\n\n    if (!response.ok) {\n      throw new Error(`Token request failed: ${response.statusText}`);\n    }\n\n    const data = await response.json();\n    return data.access_token;\n  } catch (error) {\n    throw error;\n  }\n}\n","// Version string of this package injected at build time.\ndeclare const __PACKAGE_VERSION__: string | undefined;\nexport const VERSION: string =\n  typeof __PACKAGE_VERSION__ !== 'undefined'\n    ? __PACKAGE_VERSION__\n    : '0.0.0-test';\n","import {\n  createOpenAICompatible,\n  type OpenAICompatibleProvider,\n} from '@ai-sdk/openai-compatible';\nimport {\n  loadOptionalSetting,\n  loadSetting,\n  withoutTrailingSlash,\n  type FetchFunction,\n  type Resolvable,\n} from '@ai-sdk/provider-utils';\nimport type { GoogleVertexMaasModelId } from './google-vertex-maas-options';\n\nexport interface GoogleVertexMaasProvider extends OpenAICompatibleProvider<\n  GoogleVertexMaasModelId,\n  string,\n  string,\n  string\n> {}\n\nexport interface GoogleVertexMaasProviderSettings {\n  /**\n   * Google Cloud project ID. Defaults to the value of the `GOOGLE_VERTEX_PROJECT` environment variable.\n   */\n  project?: string;\n\n  /**\n   * Google Cloud location/region. Defaults to the value of the `GOOGLE_VERTEX_LOCATION` environment variable.\n   * Use 'global' for the global endpoint.\n   */\n  location?: string;\n\n  /**\n   * Base URL for the API calls. If not provided, will be constructed from project and location.\n   */\n  baseURL?: string;\n\n  /**\n   * Headers to use for requests. Can be:\n   * - A headers object\n   * - A Promise that resolves to a headers object\n   * - A function that returns a headers object\n   * - A function that returns a Promise of a headers object\n   */\n  headers?: Resolvable<Record<string, string | undefined>>;\n\n  /**\n   * Custom fetch implementation. You can use it as a middleware to intercept requests,\n   * or to provide a custom fetch implementation for e.g. testing.\n   */\n  fetch?: FetchFunction;\n}\n\n/**\n * Create a Google Vertex AI MaaS (Model as a Service) provider instance.\n * Uses the OpenAI-compatible Chat Completions API for partner and open models.\n *\n * @see https://cloud.google.com/vertex-ai/generative-ai/docs/maas/use-open-models\n */\nexport function createVertexMaas(\n  options: GoogleVertexMaasProviderSettings = {},\n): GoogleVertexMaasProvider {\n  // Lazy-load settings to support loading from environment variables at runtime\n  const loadLocation = () =>\n    loadOptionalSetting({\n      settingValue: options.location,\n      environmentVariableName: 'GOOGLE_VERTEX_LOCATION',\n    });\n\n  const loadProject = () =>\n    loadSetting({\n      settingValue: options.project,\n      settingName: 'project',\n      environmentVariableName: 'GOOGLE_VERTEX_PROJECT',\n      description: 'Google Vertex project',\n    });\n\n  // Construct base URL: https://aiplatform.googleapis.com/v1/projects/{project}/locations/{location}/endpoints/openapi\n  const constructBaseURL = () => {\n    const projectId = loadProject();\n    const location = loadLocation() ?? 'global';\n\n    return `https://aiplatform.googleapis.com/v1/projects/${projectId}/locations/${location}/endpoints/openapi`;\n  };\n\n  const loadBaseURL = () =>\n    withoutTrailingSlash(options.baseURL ?? '') || constructBaseURL();\n\n  let cachedProvider: GoogleVertexMaasProvider | undefined;\n  const getProvider = () =>\n    (cachedProvider ??= createOpenAICompatible({\n      name: 'vertex.maas',\n      baseURL: loadBaseURL(),\n      fetch: options.fetch,\n    }));\n\n  const provider = (modelId: GoogleVertexMaasModelId) => getProvider()(modelId);\n\n  provider.specificationVersion = 'v3' as const;\n  provider.languageModel = (modelId: GoogleVertexMaasModelId) =>\n    getProvider().languageModel(modelId);\n  provider.chatModel = (modelId: GoogleVertexMaasModelId) =>\n    getProvider().chatModel(modelId);\n  provider.completionModel = (modelId: string) =>\n    getProvider().completionModel(modelId);\n  provider.embeddingModel = (modelId: string) =>\n    getProvider().embeddingModel(modelId);\n  provider.textEmbeddingModel = (modelId: string) =>\n    getProvider().textEmbeddingModel(modelId);\n  provider.imageModel = (modelId: string) => getProvider().imageModel(modelId);\n\n  return provider as GoogleVertexMaasProvider;\n}\n"],"mappings":"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","names":["loadOptionalSetting","loadSetting","createVertexMaas"]}