import { type AccountAuthProvider } from '@mcp-z/oauth'; import type { CachedToken } from '@mcp-z/oauth-google'; import { DcrOAuthProvider, LoopbackOAuthProvider, ServiceAccountProvider } from '@mcp-z/oauth-google'; import type { Logger, PromptModule, ToolModule } from '@mcp-z/server'; import type { Router } from 'express'; import type { Keyv } from 'keyv'; import type { ServerConfig } from '../types.js'; /** * Drive OAuth runtime dependencies */ export interface OAuthRuntimeDeps { logger: Logger; tokenStore: Keyv; dcrStore?: Keyv; } /** * Auth middleware wrapper with withToolAuth/withResourceAuth/withPromptAuth methods * Uses structural constraints to avoid contravariance issues with handler types. */ export interface AuthMiddleware { withToolAuth(module: T): T; withResourceAuth(module: T): T; withPromptAuth(module: T): T; } /** * Result of OAuth adapter creation */ export interface OAuthAdapters { primary: LoopbackOAuthProvider | ServiceAccountProvider | DcrOAuthProvider; middleware: AuthMiddleware; authAdapter: AccountAuthProvider; accountTools: ToolModule[]; accountPrompts: PromptModule[]; dcrRouter?: Router; loopbackRouter?: Router; } /** * Create Drive OAuth adapters based on transport configuration * * Returns primary adapter (loopback or service account), pre-configured middleware, * auth email provider, and pre-selected account tools based on auth mode. * * Primary adapter selection is based on auth mode: * - 'loopback-oauth': LoopbackOAuthProvider (interactive OAuth with token storage) * - 'service-account': ServiceAccountProvider (JWT-based authentication) * * @param config - Server configuration (transport + auth settings) * @param deps - Runtime dependencies (logger, tokenStore, etc.) * @returns OAuth adapters with pre-configured middleware and account tools * @throws Error if service account mode but no key file provided */ export declare function createOAuthAdapters(config: ServerConfig, deps: OAuthRuntimeDeps, baseUrl?: string): Promise;