import { DataSource, Repository } from 'typeorm'; import { ConfigService } from '@nestjs/config'; import { IntegrationConfig } from '../entity/integration-config.entity'; import { UserIntegration } from '../entity/user-integration.entity'; import { IntegrationEntityMapper } from '../entity/integration-entity-mapper.entity'; import { IntegrationFactory } from '../factories/integration.factory'; import { IntegrationResult } from '../strategies/integration.strategy'; import { GmailApiStrategy } from '../strategies/email/gmail-api.strategy'; import { SendGridApiStrategy } from '../strategies/email/sendgrid-api.strategy'; import { IntegrationQueueService } from './integration-queue.service'; import { BulkMessageDto, BulkCreateUserIntegrationDto, CreateUserIntegrationDto, UpdateUserIntegrationDto } from '../dto/create-config.dto'; import { FieldMapperService } from '../../mapper/service/field-mapper.service'; import { EntityServiceImpl } from '../../meta/service/entity-service-impl.service'; import { MediaDataService } from '../../meta/service/media-data.service'; import { ReflectionHelper } from '../../../utils/service/reflection-helper.service'; export interface SendMessageDto { levelId: number; levelType: string; app_code: string; to: string; message: string; mode?: 'EMAIL' | 'SMS' | 'WA' | 'TELEPHONE'; priority?: number; user_id?: number; } export interface GenericMessageDto { levelId: number; levelType: string; app_code: string; to: string | string[]; message: string; subject?: string; type?: 'EMAIL' | 'SMS' | 'WA' | 'TELEPHONE'; priority?: 'high' | 'medium' | 'low'; cc?: string | string[]; bcc?: string | string[]; html?: string; attachments?: any[]; mediaUrl?: string; templateId?: string; variables?: Record; user_id?: number; entity_type?: string; entity_id?: number; organization_id?: number; enterprise_id?: number; mapped_entities?: any; } export interface IntegrationConfigWithConfig extends IntegrationConfig { config?: any; } export interface GmailSSOResult { hubId: number; configId: number; } export declare class IntegrationService { private readonly configRepository; private readonly userIntegrationRepository; private readonly entityMapperRepository; private readonly dataSource; private readonly integrationFactory; private readonly gmailApiStrategy; private readonly sendGridApiStrategy; private readonly configService; private readonly mediaService; private readonly fieldMapperService; private readonly entityService; private readonly reflectionHelper; private readonly queueService?; private readonly logger; private readonly gmailOAuthStates; constructor(configRepository: Repository, userIntegrationRepository: Repository, entityMapperRepository: Repository, dataSource: DataSource, integrationFactory: IntegrationFactory, gmailApiStrategy: GmailApiStrategy, sendGridApiStrategy: SendGridApiStrategy, configService: ConfigService, mediaService: MediaDataService, fieldMapperService: FieldMapperService, entityService: EntityServiceImpl, reflectionHelper: ReflectionHelper, queueService?: IntegrationQueueService | undefined); private deriveServiceType; sendMessage({ levelId, levelType, app_code, to, message, mode, priority, user_id, }: SendMessageDto): Promise; getActiveConfigs(levelId: number, levelType: string, appcode: string, mode?: 'EMAIL' | 'SMS' | 'WA' | 'TELEPHONE'): Promise; getSingleActiveConfig(levelId: number, levelType: string, app_code: string, integration_type: 'EMAIL' | 'SMS' | 'WA' | 'TELEPHONE'): Promise; getAllIntegrationData(loggedInUser: any, integration_type?: string): Promise; private sortConfigsByPriority; private sendViaConfig; createIntegrationConfig(levelId: number, levelType: string, app_code: string, configType: 'EMAIL' | 'SMS' | 'WA' | 'TELEPHONE', provider: string, integration_source_id: number, config: any, priority?: number, is_default?: boolean): Promise; getSupportedCombinations(): { mode: string; service: string; provider: string; }[]; getLevelConfigs(levelId: number, levelType: string, filters?: { app_code?: string; integration_type?: 'WA' | 'SMS' | 'EMAIL' | 'TELEPHONE'; integration_provider?: string; }): Promise>; private extractLinkedSource; private extractConfigDetails; updateConfigStatus(hubId: number, status: number): Promise; deleteConfiguration(configId: number): Promise; updateConfiguration(hubId: number, updateData: { config?: any; priority?: number; is_default?: boolean; status?: number; }): Promise; sendGenericMessage(messageDto: GenericMessageDto): Promise; sendBulkMessage(bulkDto: BulkMessageDto): Promise<{ results: IntegrationResult[]; summary: any; }>; scheduleMessage(scheduledDto: any): Promise<{ scheduled: boolean; scheduleId?: string; }>; sendTemplateMessage(templateDto: any): Promise; private detectCommunicationType; private sortConfigsByPriorityAndDefault; processTemplate(templateId: number, entity_type: any, entity_id: any, loggedInUser?: any, mappedEntities?: Record): Promise<{ variables?: Record; externalTemplateId?: string; rich_text?: string; subject?: string; }>; private replaceTemplateVariables; private getTemplate; private chunkArray; initGmailOAuth(levelId: number, levelType: string, app_code: string, email?: string): Promise<{ authUrl: string; state: string; }>; handleGmailOAuthCallback(code: string, state: string): Promise; handleGmailTokensCallback(email: string, accessToken: string, refreshToken: string, state: string, name?: { displayName?: string; givenName?: string; familyName?: string; }): Promise; testGmailConfig(hubId: number): Promise<{ success: boolean; error?: string; }>; private generateSecureState; private validateUniqueActiveConfig; private requiresOAuthFlow; private generateOAuthUrl; private createDirectConfig; initOutlookOAuth(levelId: number, levelType: string, app_code: string, email?: string): Promise<{ authUrl: string; state: string; }>; handleOutlookOAuthCallback(code: string, state: string): Promise; getIntegrationConfigById(hubId: number): Promise<(IntegrationConfig & { config: IntegrationConfig; linkedSource?: string; configDetails?: any; }) | null>; getIntegrationTemplates(levelId: number, levelType: string, app_code: string, integration_type: 'EMAIL' | 'SMS' | 'WA' | 'TELEPHONE'): Promise<{ success: boolean; data?: Array<{ label: string; value: string; }>; error?: string; }>; getSendGridTemplates(levelId: number, levelType: string, app_code: string): Promise<{ success: boolean; data?: Array<{ label: string; value: string; }>; error?: string; }>; getSendGridVerifiedSenders(apiKey: string): Promise<{ success: boolean; data?: Array<{ label: string; value: string; }>; error?: string; }>; createUserIntegration(createDto: CreateUserIntegrationDto): Promise; bulkCreateUserIntegration(bulkDto: BulkCreateUserIntegrationDto): Promise<{ created: UserIntegration[]; updated: UserIntegration[]; failed: Array<{ data: CreateUserIntegrationDto; error: string; }>; summary: { total: number; created: number; updated: number; failed: number; }; }>; getUserIntegrations(userId: number): Promise; getConfigUserIntegrations(configId: number): Promise; getUserIntegrationByUserAndConfig(userId: number, configId: number): Promise; updateUserIntegration(id: number, updateDto: UpdateUserIntegrationDto): Promise; deleteUserIntegration(id: number): Promise; getUserIntegrationForStrategy(userId: number, integrationConfigId: number): Promise; checkAgentStatus(levelId: number, levelType: string, appCode: string, userId: number, integrationType?: 'TELEPHONE'): Promise<{ success: boolean; isReady?: boolean; state?: string; agentInfo?: any; error?: string; }>; }