"use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; var __param = (this && this.__param) || function (paramIndex, decorator) { return function (target, key) { decorator(target, key, paramIndex); } }; Object.defineProperty(exports, "__esModule", { value: true }); exports.InternalIntegrationsController = void 0; const common_1 = require("@nestjs/common"); const config_1 = require("@nestjs/config"); const swagger_1 = require("@nestjs/swagger"); const tenant_integrations_service_1 = require("../services/tenant-integrations.service"); const tenant_integration_credential_entity_1 = require("../entities/tenant-integration-credential.entity"); let InternalIntegrationsController = class InternalIntegrationsController { constructor(integrationsService, configService) { this.integrationsService = integrationsService; this.configService = configService; } validateInternalKey(internalKey) { const expectedKey = this.configService.get('INTERNAL_API_KEY'); if (!expectedKey || internalKey !== expectedKey) { throw new common_1.UnauthorizedException('Invalid internal API key'); } } async getWhatsAppCredentials(tenantId, internalKey) { this.validateInternalKey(internalKey); const credential = await this.integrationsService.getCredential(tenantId, tenant_integration_credential_entity_1.IntegrationType.WHATSAPP, tenant_integration_credential_entity_1.IntegrationProvider.META); if (!credential || !credential.isActive) { return { configured: false, message: 'WhatsApp not configured for this tenant', }; } return { configured: true, credentials: { accessToken: credential.credentials?.['accessToken'], phoneNumberId: credential.credentials?.['phoneNumberId'], businessAccountId: credential.credentials?.['businessAccountId'], verifyToken: credential.credentials?.['verifyToken'], }, }; } async getLLMConfig(tenantId, internalKey) { this.validateInternalKey(internalKey); const credentials = await this.integrationsService.getCredentials(tenantId); const llmCredential = credentials.find((c) => c.integrationType === tenant_integration_credential_entity_1.IntegrationType.LLM && c.isActive); if (!llmCredential) { return { configured: false, message: 'LLM not configured for this tenant', }; } return { configured: true, provider: llmCredential.provider, credentials: { apiKey: llmCredential.credentials?.['apiKey'], }, config: { model: llmCredential.config?.['model'], maxTokens: llmCredential.config?.['maxTokens'], temperature: llmCredential.config?.['temperature'], baseUrl: llmCredential.config?.['baseUrl'], systemPrompt: llmCredential.config?.['systemPrompt'], }, }; } async resolveTenantFromPhoneNumberId(phoneNumberId, internalKey) { this.validateInternalKey(internalKey); const tenantId = await this.integrationsService.resolveTenantFromPhoneNumberId(phoneNumberId); if (!tenantId) { return { found: false, message: 'No tenant found for this phone number ID', }; } return { found: true, tenantId, }; } }; exports.InternalIntegrationsController = InternalIntegrationsController; __decorate([ (0, common_1.Get)(':tenantId/whatsapp'), (0, swagger_1.ApiOperation)({ summary: 'Get WhatsApp credentials for a tenant (internal use)' }), (0, swagger_1.ApiHeader)({ name: 'X-Internal-Key', required: true }), (0, swagger_1.ApiResponse)({ status: 200, description: 'Credentials returned' }), (0, swagger_1.ApiResponse)({ status: 401, description: 'Invalid internal key' }), (0, swagger_1.ApiResponse)({ status: 404, description: 'Tenant not found or not configured' }), __param(0, (0, common_1.Param)('tenantId')), __param(1, (0, common_1.Headers)('x-internal-key')), __metadata("design:type", Function), __metadata("design:paramtypes", [String, String]), __metadata("design:returntype", Promise) ], InternalIntegrationsController.prototype, "getWhatsAppCredentials", null); __decorate([ (0, common_1.Get)(':tenantId/llm'), (0, swagger_1.ApiOperation)({ summary: 'Get LLM configuration for a tenant (internal use)' }), (0, swagger_1.ApiHeader)({ name: 'X-Internal-Key', required: true }), (0, swagger_1.ApiResponse)({ status: 200, description: 'Configuration returned' }), (0, swagger_1.ApiResponse)({ status: 401, description: 'Invalid internal key' }), __param(0, (0, common_1.Param)('tenantId')), __param(1, (0, common_1.Headers)('x-internal-key')), __metadata("design:type", Function), __metadata("design:paramtypes", [String, String]), __metadata("design:returntype", Promise) ], InternalIntegrationsController.prototype, "getLLMConfig", null); __decorate([ (0, common_1.Get)('resolve-tenant/:phoneNumberId'), (0, swagger_1.ApiOperation)({ summary: 'Resolve tenant ID from WhatsApp phone number ID' }), (0, swagger_1.ApiHeader)({ name: 'X-Internal-Key', required: true }), (0, swagger_1.ApiResponse)({ status: 200, description: 'Tenant ID returned' }), (0, swagger_1.ApiResponse)({ status: 401, description: 'Invalid internal key' }), __param(0, (0, common_1.Param)('phoneNumberId')), __param(1, (0, common_1.Headers)('x-internal-key')), __metadata("design:type", Function), __metadata("design:paramtypes", [String, String]), __metadata("design:returntype", Promise) ], InternalIntegrationsController.prototype, "resolveTenantFromPhoneNumberId", null); exports.InternalIntegrationsController = InternalIntegrationsController = __decorate([ (0, swagger_1.ApiTags)('Internal - Integrations'), (0, common_1.Controller)('internal/integrations'), __metadata("design:paramtypes", [tenant_integrations_service_1.TenantIntegrationsService, config_1.ConfigService]) ], InternalIntegrationsController); //# sourceMappingURL=internal-integrations.controller.js.map