n8n
Version:
n8n Workflow Automation Tool
59 lines (58 loc) • 3.15 kB
TypeScript
import { type AgentCredentialIntegration, type AgentIntegrationStatusResponse } from '@n8n/api-types';
import { Logger } from '@n8n/backend-common';
import { GlobalConfig } from '@n8n/config';
import { InstanceSettings } from 'n8n-core';
import { CredentialsFinderService } from '../../../credentials/credentials-finder.service';
import { CredentialsService } from '../../../credentials/credentials.service';
import type { PubSubCommandMap } from '../../../scaling/pubsub/pubsub.event-map';
import { Publisher } from '../../../scaling/pubsub/publisher.service';
import { UrlService } from '../../../services/url.service';
import { ChatIntegrationRegistry } from './agent-chat-integration';
import type { Agent } from '../entities/agent.entity';
import { AgentRepository } from '../repositories/agent.repository';
type WebhookHandler = (request: Request, options?: {
waitUntil?: (task: Promise<unknown>) => void;
}) => Promise<Response>;
interface ChatInstance {
initialize(): Promise<void>;
shutdown(): Promise<void>;
webhooks: Record<string, WebhookHandler>;
onNewMention: (handler: unknown) => void;
onSubscribedMessage: (handler: unknown) => void;
onAction: (handler: unknown) => void;
}
export declare class ChatIntegrationService {
private readonly logger;
private readonly agentRepository;
private readonly credentialsService;
private readonly credentialsFinderService;
private readonly urlService;
private readonly integrationRegistry;
private readonly instanceSettings;
private readonly publisher;
private readonly globalConfig;
private readonly connections;
constructor(logger: Logger, agentRepository: AgentRepository, credentialsService: CredentialsService, credentialsFinderService: CredentialsFinderService, urlService: UrlService, integrationRegistry: ChatIntegrationRegistry, instanceSettings: InstanceSettings, publisher: Publisher, globalConfig: GlobalConfig);
broadcastIntegrationChange(agentId: string, type: string, credentialId: string, action: 'connect' | 'disconnect'): Promise<void>;
private connectionKey;
private connectionTypeFromKey;
connect(agentId: string, credentialId: string, integrationType: string, userId: string, projectId: string, options?: {
skipExternalHooks?: boolean;
}): Promise<void>;
disconnect(agentId: string, type?: string, credentialId?: string): Promise<void>;
disconnectAll(): Promise<void>;
disconnectLeaderOnlyIntegrations(): Promise<void>;
syncToConfig(agent: Agent, previous: AgentCredentialIntegration[], next: AgentCredentialIntegration[]): Promise<void>;
getStatus(agentId: string): AgentIntegrationStatusResponse & {
connections: number;
};
getChatInstance(agentId: string): ChatInstance | undefined;
getWebhookHandler(agentId: string, platform: string): WebhookHandler | undefined;
reconnectAll(): Promise<void>;
handleIntegrationChanged(payload: PubSubCommandMap['agent-chat-integration-changed']): Promise<void>;
private disconnectOne;
private resolveUser;
private decryptCredential;
private buildWebhookUrl;
}
export {};