/**
 * Base class for model gateway providers
 * Gateways fetch provider configurations and build URLs for model access
 */
import type { LanguageModelV2 } from '@ai-sdk/provider-v5';
import type { LanguageModelV3 } from '@ai-sdk/provider-v6';
import type { StreamTransport } from '../../../stream/types.js';
import type { OpenAITransport, ResponsesWebSocketOptions } from '../provider-options.js';
export interface ProviderConfig {
    url?: string;
    apiKeyHeader?: string;
    apiKeyEnvVar: string | string[];
    name: string;
    models: string[];
    docUrl?: string;
    gateway: string;
    npm?: string;
}
/**
 * Union type for language models that can be returned by gateways.
 * Supports both AI SDK v5 (LanguageModelV2) and v6 (LanguageModelV3).
 */
export type GatewayLanguageModel = LanguageModelV2 | LanguageModelV3;
export type GatewayStreamTransportHandle = Pick<StreamTransport, 'type' | 'close'>;
/** @internal Stream transport handle attached by gateways that own custom streaming transports. */
export declare const MASTRA_GATEWAY_STREAM_TRANSPORT: unique symbol;
export type GatewayLanguageModelWithStreamTransport = GatewayLanguageModel & {
    [MASTRA_GATEWAY_STREAM_TRANSPORT]?: GatewayStreamTransportHandle;
};
export declare abstract class MastraModelGateway {
    /**
     * Unique identifier for the gateway
     * This ID is used as the prefix for all providers from this gateway (e.g., "netlify/anthropic")
     * Exception: models.dev is a provider registry and doesn't use a prefix
     */
    abstract readonly id: string;
    /**
     * Name of the gateway provider
     */
    abstract readonly name: string;
    /**
     * Get the gateway ID
     */
    getId(): string;
    /**
     * Whether this gateway should be enabled for the current runtime.
     * Disabled gateways are skipped when syncing and filtered out when reading cached registry data.
     */
    shouldEnable(): boolean;
    /**
     * Fetch provider configurations from the gateway
     * Should return providers in the standard format
     */
    abstract fetchProviders(): Promise<Record<string, ProviderConfig>>;
    /**
     * Build the URL for a specific model/provider combination
     * @param modelId Full model ID (e.g., "openai/gpt-4o" or "netlify/openai/gpt-4o")
     * @param envVars Environment variables available
     * @returns URL string if this gateway can handle the model, false otherwise
     */
    abstract buildUrl(modelId: string, envVars: Record<string, string>): string | undefined | Promise<string | undefined>;
    abstract getApiKey(modelId: string): Promise<string>;
    /**
     * Resolve a language model from the gateway.
     * Supports returning either LanguageModelV2 (AI SDK v5) or LanguageModelV3 (AI SDK v6).
     */
    abstract resolveLanguageModel(args: {
        modelId: string;
        providerId: string;
        apiKey: string;
        headers?: Record<string, string>;
        transport?: OpenAITransport;
        responsesWebSocket?: ResponsesWebSocketOptions;
    }): Promise<GatewayLanguageModel> | GatewayLanguageModel;
    /**
     * Custom serialization for tracing/observability spans.
     * Gateways typically hold credentials (apiKey, OAuth tokens, customFetch
     * closures that capture secrets). The base implementation exposes only
     * the gateway identity so subclasses are safe by default.
     *
     * Subclasses that want to expose additional non-sensitive fields
     * (e.g. baseUrl when it's a public URL) can override this method.
     */
    serializeForSpan(): {
        id: string;
        name: string;
    };
}
//# sourceMappingURL=base.d.ts.map