n8n
Version:
n8n Workflow Automation Tool
106 lines (105 loc) • 3.8 kB
TypeScript
import type { AgentIntegrationConfig, N8N_CHAT_INTEGRATION_TYPE } from '@n8n/api-types';
import type { z } from 'zod';
import type { IntegrationErrorCode } from './integration-error-codes';
export type IntegrationMessageTarget = {
type: 'thread';
threadId: string;
channelId?: string;
userId?: string;
} | {
type: 'channel';
channelId: string;
threadId?: string;
} | {
type: 'dm';
userId: string;
threadId?: string;
};
export interface IntegrationMessageContext {
integrationConnectionId: string;
platform: string;
target: IntegrationMessageTarget;
messageId?: string;
interactingUserId?: string;
agentUserId?: string;
subject?: IntegrationMessageSubject;
updatedAt: string;
}
export interface IntegrationMessageSubject {
type: string;
id: string;
title?: string;
description?: string;
url?: string;
status?: string;
labels?: string[];
assignee?: IntegrationSubjectPerson;
author?: IntegrationSubjectPerson;
}
export interface IntegrationSubjectPerson {
id: string;
name: string;
}
export type IntegrationToolConnectionSource = AgentIntegrationConfig | {
type: typeof N8N_CHAT_INTEGRATION_TYPE;
credentialId?: undefined;
};
export type IntegrationContextQuery = 'get_current_message_context' | 'get_current_subject' | 'get_current_user' | 'get_current_channel_info' | 'get_user' | 'get_channel_info' | 'search_users' | 'search_channels' | 'get_team' | 'search_teams' | 'get_project' | 'search_projects' | 'search_labels' | 'search_issue_states' | 'get_issue' | 'search_issues';
export type IntegrationAction = 'respond' | 'send_dm' | 'send_channel_message' | 'add_reaction' | 'create_issue' | 'update_issue' | 'create_comment';
export interface IntegrationToolOperationDefinition<Name extends string = string> {
name: Name;
inputSchema: z.ZodType;
description: string;
}
export type IntegrationContextQueryDefinition = IntegrationToolOperationDefinition<IntegrationContextQuery>;
export type IntegrationActionDefinition = IntegrationToolOperationDefinition<IntegrationAction>;
export interface IntegrationToolConnectionDescriptor {
agentId?: string;
integration: IntegrationToolConnectionSource;
integrationConnectionId: string;
contextToolName: string;
actionToolName: string;
contextQueries: IntegrationContextQuery[];
actions: IntegrationAction[];
contextToolDefinitions: IntegrationContextQueryDefinition[];
actionToolDefinitions: IntegrationActionDefinition[];
contextToolGuidance?: string[];
actionToolGuidance?: string[];
}
export interface IntegrationMessageContextStore {
getLatest(threadId: string): Promise<IntegrationMessageContext | null>;
setLatest(threadId: string, resourceId: string, context: IntegrationMessageContext): Promise<void>;
}
export interface IntegrationContextQueryExecutor {
execute(params: {
descriptor: IntegrationToolConnectionDescriptor;
query: IntegrationContextQuery;
input: Record<string, unknown>;
persistence?: {
threadId: string;
resourceId: string;
};
}): Promise<unknown>;
}
export interface IntegrationActionExecutor {
execute(params: {
descriptor: IntegrationToolConnectionDescriptor;
action: IntegrationAction;
input: Record<string, unknown>;
awaitResponse: boolean;
runId?: string;
toolCallId?: string;
currentMessageContext?: IntegrationMessageContext;
}): Promise<IntegrationActionResult>;
}
export type IntegrationActionResult = {
ok: true;
messageContext?: IntegrationMessageContext;
[key: string]: unknown;
} | {
ok: false;
error: {
code: IntegrationErrorCode;
message: string;
};
};