n8n
Version:
n8n Workflow Automation Tool
77 lines (76 loc) • 3.74 kB
TypeScript
import { AgentIntegrationConfig, type AgentIntegrationSettings, type AgentIntegrationStatusResponse } from '@n8n/api-types';
import { Logger } from '@n8n/backend-common';
import { GlobalConfig } from '@n8n/config';
import type { Channel, Thread, UserInfo } from 'chat';
import { InstanceSettings } from 'n8n-core';
import { CredentialsFinderService } from '../../../credentials/credentials-finder.service';
import { CredentialsService } from '../../../credentials/credentials.service';
import { Publisher } from '../../../scaling/pubsub/publisher.service';
import type { PubSubCommandMap } from '../../../scaling/pubsub/pubsub.event-map';
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>;
export interface ChatInstance {
initialize(): Promise<void>;
shutdown(): Promise<void>;
webhooks: Record<string, WebhookHandler>;
onNewMention: (handler: unknown) => void;
onSubscribedMessage: (handler: unknown) => void;
onAction: (handler: unknown) => void;
getAdapter(name: string): unknown;
openDM(user: string): Promise<Thread>;
thread(threadId: string): Thread;
channel(channelId: string): Channel;
getUser(user: string): Promise<UserInfo | null>;
}
interface ConnectOptions {
skipExternalHooks?: boolean;
settings?: AgentIntegrationSettings;
}
interface DisconnectOptions {
skipExternalHooks?: boolean;
}
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, integration: AgentIntegrationConfig, action: 'connect' | 'disconnect'): Promise<void>;
private connectionKey;
private connectionTypeFromKey;
connect(agentId: string, integration: AgentIntegrationConfig, userId: string, projectId: string, options?: ConnectOptions): Promise<void>;
disconnect(agentId: string, integration?: {
credentialId: string;
type: string;
}, options?: DisconnectOptions): Promise<void>;
disconnectAll(): Promise<void>;
disconnectLeaderOnlyIntegrations(): Promise<void>;
syncToConfig(agent: Agent, previous: AgentIntegrationConfig[], next: AgentIntegrationConfig[]): Promise<void>;
getStatus(agentId: string): AgentIntegrationStatusResponse & {
connections: number;
};
getChatInstance(agentId: string, integration?: {
type: string;
credentialId: 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;
private connectOptionsFor;
}
export {};