From 1c5ece5a86892aa5aeb9cbdde93301b2238093f4 Mon Sep 17 00:00:00 2001 From: devlikepro Date: Thu, 27 Aug 2026 15:07:00 +0700 Subject: [PATCH] fix: app config import --- src/api/sessions.examples.ts | 2 +- src/apps/app_sdk/apps/apps.ts | 28 +++++++++++++++++++ src/apps/app_sdk/apps/definition.ts | 4 +-- src/apps/app_sdk/apps/name.ts | 6 ---- src/apps/app_sdk/dto/app.dto.ts | 14 +++++++--- src/apps/apps.module.ts | 7 ----- .../api/brazilian-phone-numbers.controller.ts | 2 +- .../brazilian-phone-numbers/app.module.ts | 4 +-- src/apps/calls/app.module.ts | 4 +-- src/apps/chatwoot/app.module.ts | 4 +-- src/apps/mcp/app.module.ts | 4 +-- 11 files changed, 45 insertions(+), 34 deletions(-) create mode 100644 src/apps/app_sdk/apps/apps.ts delete mode 100644 src/apps/app_sdk/apps/name.ts diff --git a/src/api/sessions.examples.ts b/src/api/sessions.examples.ts index 37c5751c..e8907c1d 100644 --- a/src/api/sessions.examples.ts +++ b/src/api/sessions.examples.ts @@ -1,4 +1,4 @@ -import { AppName } from '@waha/apps/app_sdk/apps/name'; +import { AppName } from '@waha/apps/app_sdk/apps/apps'; export const SessionExamples = { basic: { diff --git a/src/apps/app_sdk/apps/apps.ts b/src/apps/app_sdk/apps/apps.ts new file mode 100644 index 00000000..964e18bb --- /dev/null +++ b/src/apps/app_sdk/apps/apps.ts @@ -0,0 +1,28 @@ +import { Type } from '@nestjs/common'; +import { BrazilianPhoneNumbersAppConfig } from '@waha/apps/brazilian-phone-numbers/dto/config.dto'; +import { CallsAppConfig } from '@waha/apps/calls/dto/config.dto'; +import { ChatWootAppConfig } from '@waha/apps/chatwoot/dto/config.dto'; +import { McpAppConfig } from '@waha/apps/mcp/dto/config.dto'; + +export enum AppName { + chatwoot = 'chatwoot', + calls = 'calls', + mcp = 'mcp', + brazilianPhoneNumbers = 'brazilian-phone-numbers', +} + +/** + * DTO classes used to transform and validate App.config, by app name. + * Kept separate from the registry so DTOs (imported by core structures) can resolve config classes + * without pulling in every app module (controllers, services, queues) - that creates require cycles. + */ +export const AppConfigClasses: Record> = { + [AppName.brazilianPhoneNumbers]: BrazilianPhoneNumbersAppConfig, + [AppName.calls]: CallsAppConfig, + [AppName.chatwoot]: ChatWootAppConfig, + [AppName.mcp]: McpAppConfig, +}; + +export function GetAppConfigClass(name: AppName): Type { + return AppConfigClasses[name] ?? Object; +} diff --git a/src/apps/app_sdk/apps/definition.ts b/src/apps/app_sdk/apps/definition.ts index b020de9e..a9e1e0e4 100644 --- a/src/apps/app_sdk/apps/definition.ts +++ b/src/apps/app_sdk/apps/definition.ts @@ -1,5 +1,5 @@ import { Type } from '@nestjs/common'; -import { AppName } from '@waha/apps/app_sdk/apps/name'; +import { AppName } from '@waha/apps/app_sdk/apps/apps'; import { GetApp } from '@waha/apps/app_sdk/apps/registry'; import { IAppService } from '@waha/apps/app_sdk/services/IAppService'; @@ -36,8 +36,6 @@ export interface AppModule { nestjs: AppNestJS; // Service implementing app lifecycle hooks; must also be listed in 'nestjs.providers' Service: Type; - // DTO class used to transform and validate App.config - ConfigClass: Type; } export function isUniqueApp(name: AppName): boolean { diff --git a/src/apps/app_sdk/apps/name.ts b/src/apps/app_sdk/apps/name.ts deleted file mode 100644 index 3af07fdb..00000000 --- a/src/apps/app_sdk/apps/name.ts +++ /dev/null @@ -1,6 +0,0 @@ -export enum AppName { - chatwoot = 'chatwoot', - calls = 'calls', - mcp = 'mcp', - brazilianPhoneNumbers = 'brazilian-phone-numbers', -} diff --git a/src/apps/app_sdk/dto/app.dto.ts b/src/apps/app_sdk/dto/app.dto.ts index 61e1d409..8e1c6769 100644 --- a/src/apps/app_sdk/dto/app.dto.ts +++ b/src/apps/app_sdk/dto/app.dto.ts @@ -6,9 +6,12 @@ import { IsString, ValidateNested, } from 'class-validator'; -import { ApiProperty } from '@nestjs/swagger'; -import { AppName } from '@waha/apps/app_sdk/apps/name'; -import { GetApp } from '@waha/apps/app_sdk/apps/registry'; +import { ApiExtraModels, ApiProperty } from '@nestjs/swagger'; +import { + AppConfigClasses, + AppName, + GetAppConfigClass, +} from '@waha/apps/app_sdk/apps/apps'; export class App { @IsString() @@ -37,7 +40,10 @@ export class App { if (!name) { return Object; } - return GetApp(name)?.ConfigClass ?? Object; + return GetAppConfigClass(name); }) config: T; } + +// Swagger models for app configs +ApiExtraModels(...Object.values(AppConfigClasses))(App); diff --git a/src/apps/apps.module.ts b/src/apps/apps.module.ts index c31e3abf..82a945fe 100644 --- a/src/apps/apps.module.ts +++ b/src/apps/apps.module.ts @@ -1,14 +1,7 @@ -import { ApiExtraModels } from '@nestjs/swagger'; import { AppRuntimeConfig } from '@waha/apps/app_sdk/apps/AppRuntime'; -import { GetApps } from '@waha/apps/app_sdk/apps/registry'; -import { App } from '@waha/apps/app_sdk/dto/app.dto'; import { AppsDisabled } from '@waha/apps/apps.module.disabled'; import { AppsEnabled } from '@waha/apps/apps.module.enabled'; -// Swagger models for app configs come from the registry - -// applied here instead of app.dto.ts to avoid a require cycle through the registry -ApiExtraModels(...GetApps().map((app) => app.ConfigClass))(App); - export const AppsModuleExports = AppRuntimeConfig.Enabled() ? AppsEnabled : AppsDisabled; diff --git a/src/apps/brazilian-phone-numbers/api/brazilian-phone-numbers.controller.ts b/src/apps/brazilian-phone-numbers/api/brazilian-phone-numbers.controller.ts index 2c7dec0e..a0af5a21 100644 --- a/src/apps/brazilian-phone-numbers/api/brazilian-phone-numbers.controller.ts +++ b/src/apps/brazilian-phone-numbers/api/brazilian-phone-numbers.controller.ts @@ -22,7 +22,7 @@ import { } from '@waha/apps/brazilian-phone-numbers/dto/config.dto'; import { BrazilianPhoneCorePlugin } from '@waha/apps/brazilian-phone-numbers/plugins/BrazilianPhoneCorePlugin'; import { BrazilianPhoneCacheRepository } from '@waha/apps/brazilian-phone-numbers/storage/BrazilianPhoneCacheRepository'; -import { AppName } from '@waha/apps/app_sdk/apps/name'; +import { AppName } from '@waha/apps/app_sdk/apps/apps'; import { AppRepository } from '@waha/apps/app_sdk/storage/AppRepository'; import { AppDB } from '@waha/apps/app_sdk/storage/types'; import { SessionManager } from '@waha/core/abc/manager.abc'; diff --git a/src/apps/brazilian-phone-numbers/app.module.ts b/src/apps/brazilian-phone-numbers/app.module.ts index b7e21b85..a4cad478 100644 --- a/src/apps/brazilian-phone-numbers/app.module.ts +++ b/src/apps/brazilian-phone-numbers/app.module.ts @@ -1,7 +1,6 @@ import { AppModule } from '@waha/apps/app_sdk/apps/definition'; -import { AppName } from '@waha/apps/app_sdk/apps/name'; +import { AppName } from '@waha/apps/app_sdk/apps/apps'; import { BrazilianPhoneNumbersController } from '@waha/apps/brazilian-phone-numbers/api/brazilian-phone-numbers.controller'; -import { BrazilianPhoneNumbersAppConfig } from '@waha/apps/brazilian-phone-numbers/dto/config.dto'; import { BrazilianPhoneNumbersAppService } from '@waha/apps/brazilian-phone-numbers/services/BrazilianPhoneNumbersAppService'; const BrazilianPhoneNumbersAppModule: AppModule = { @@ -19,7 +18,6 @@ const BrazilianPhoneNumbersAppModule: AppModule = { providers: [BrazilianPhoneNumbersAppService], }, Service: BrazilianPhoneNumbersAppService, - ConfigClass: BrazilianPhoneNumbersAppConfig, }; export default BrazilianPhoneNumbersAppModule; diff --git a/src/apps/calls/app.module.ts b/src/apps/calls/app.module.ts index 533bf56f..7f97527d 100644 --- a/src/apps/calls/app.module.ts +++ b/src/apps/calls/app.module.ts @@ -1,6 +1,5 @@ import { AppModule } from '@waha/apps/app_sdk/apps/definition'; -import { AppName } from '@waha/apps/app_sdk/apps/name'; -import { CallsAppConfig } from '@waha/apps/calls/dto/config.dto'; +import { AppName } from '@waha/apps/app_sdk/apps/apps'; import { CallsAppService } from '@waha/apps/calls/services/CallsAppService'; const CallsAppModule: AppModule = { @@ -18,7 +17,6 @@ const CallsAppModule: AppModule = { providers: [CallsAppService], }, Service: CallsAppService, - ConfigClass: CallsAppConfig, }; export default CallsAppModule; diff --git a/src/apps/chatwoot/app.module.ts b/src/apps/chatwoot/app.module.ts index a26f908d..5d7dfd34 100644 --- a/src/apps/chatwoot/app.module.ts +++ b/src/apps/chatwoot/app.module.ts @@ -1,7 +1,6 @@ import { AppModule } from '@waha/apps/app_sdk/apps/definition'; -import { AppName } from '@waha/apps/app_sdk/apps/name'; +import { AppName } from '@waha/apps/app_sdk/apps/apps'; import { RegisterAppQueue } from '@waha/apps/app_sdk/BullUtils'; -import { ChatWootAppConfig } from '@waha/apps/chatwoot/dto/config.dto'; import { ExponentialRetriesJobOptions, JobRemoveOptions, @@ -178,7 +177,6 @@ const ChatWootAppModule: AppModule = { providers: PROVIDERS, }, Service: ChatWootAppService, - ConfigClass: ChatWootAppConfig, }; export default ChatWootAppModule; diff --git a/src/apps/mcp/app.module.ts b/src/apps/mcp/app.module.ts index 106dd00a..33cfe373 100644 --- a/src/apps/mcp/app.module.ts +++ b/src/apps/mcp/app.module.ts @@ -1,7 +1,6 @@ import { AppModule } from '@waha/apps/app_sdk/apps/definition'; -import { AppName } from '@waha/apps/app_sdk/apps/name'; +import { AppName } from '@waha/apps/app_sdk/apps/apps'; import { McpController } from '@waha/apps/mcp/api/mcp.controller'; -import { McpAppConfig } from '@waha/apps/mcp/dto/config.dto'; import { McpService } from '@waha/apps/mcp/mcp.service'; import { McpAppService } from '@waha/apps/mcp/services/McpAppService'; @@ -20,7 +19,6 @@ const McpAppModule: AppModule = { providers: [McpService, McpAppService], }, Service: McpAppService, - ConfigClass: McpAppConfig, }; export default McpAppModule;