import type { OAuthRegisteredClientsStore } from '@modelcontextprotocol/sdk/server/auth/clients.js'; import type { AuthorizationParams, OAuthServerProvider } from '@modelcontextprotocol/sdk/server/auth/provider.js'; import type { AuthInfo } from '@modelcontextprotocol/sdk/server/auth/types.js'; import type { OAuthClientInformationFull, OAuthTokens, OAuthTokenRevocationRequest } from '@modelcontextprotocol/sdk/shared/auth.js'; import type { McpClientConnectedPeriod, McpClientTypeFilter } from '@n8n/api-types'; import { Logger } from '@n8n/backend-common'; import { GlobalConfig } from '@n8n/config'; import type { User } from '@n8n/db'; import type { Response } from 'express'; import { ProtectedResourceRegistry } from '../../services/protected-resource.registry'; import { OAuthClient } from './database/entities/oauth-client.entity'; import { OAuthClientRepository } from './database/repositories/oauth-client.repository'; import { UserConsentRepository } from './database/repositories/oauth-user-consent.repository'; import { OAuthAuthorizationCodeService } from './oauth-authorization-code.service'; import { OAuthSessionService } from './oauth-session.service'; import { OAuthTokenService } from './oauth-token.service'; import { UserManagementMailer } from '../../user-management/email'; export type ConnectedOAuthClientOwner = { id: string; firstName: string | null; lastName: string | null; email: string; }; export type ConnectedOAuthClient = Omit & { grantedAt: number; scopes: string[]; owner?: ConnectedOAuthClientOwner; }; export type ConnectedOAuthClientTotals = { mine: number; all?: number; }; export type ListConnectedClientsOptions = { ownership?: 'mine' | 'all'; skip?: number; take?: number; name?: string; ownerId?: string; type?: McpClientTypeFilter; connected?: McpClientConnectedPeriod; }; export declare class OAuthServerService implements OAuthServerProvider { private readonly logger; private readonly globalConfig; private readonly oauthSessionService; private readonly oauthClientRepository; private readonly tokenService; private readonly authorizationCodeService; private readonly userConsentRepository; private readonly resourceRegistry; private readonly mailer; constructor(logger: Logger, globalConfig: GlobalConfig, oauthSessionService: OAuthSessionService, oauthClientRepository: OAuthClientRepository, tokenService: OAuthTokenService, authorizationCodeService: OAuthAuthorizationCodeService, userConsentRepository: UserConsentRepository, resourceRegistry: ProtectedResourceRegistry, mailer: UserManagementMailer); get clientsStore(): OAuthRegisteredClientsStore; isClientLimitReached(): Promise; getInstanceClientStats(): Promise<{ count: number; limit: number; atCapacity: boolean; }>; private enforceClientLimit; private validateClientRegistration; private isRedirectUriAllowed; private isLoopbackHost; authorize(client: OAuthClientInformationFull, params: AuthorizationParams, res: Response): Promise; challengeForAuthorizationCode(client: OAuthClientInformationFull, authorizationCode: string): Promise; exchangeAuthorizationCode(client: OAuthClientInformationFull, authorizationCode: string, _codeVerifier?: string, redirectUri?: string, resource?: URL): Promise; exchangeRefreshToken(client: OAuthClientInformationFull, refreshToken: string, _scopes?: string[], resource?: URL): Promise; verifyAccessToken(token: string): Promise; private resolveAndValidateResourceIndicator; revokeToken(client: OAuthClientInformationFull, request: OAuthTokenRevocationRequest): Promise; getAllClients(user: User, options?: ListConnectedClientsOptions): Promise<{ clients: ConnectedOAuthClient[]; count: number; totals: ConnectedOAuthClientTotals; owners?: ConnectedOAuthClientOwner[]; }>; getInstanceScopeTools(): Record | undefined; deleteClient(clientId: string, userId: string, revoker?: User): Promise; }