112 lines
3.0 KiB
TypeScript
112 lines
3.0 KiB
TypeScript
import * as process from 'node:process';
|
|
|
|
import { ExpressAdapter } from '@bull-board/express';
|
|
import { BullBoardModule } from '@bull-board/nestjs';
|
|
import { RedisModule } from '@liaoliaots/nestjs-redis';
|
|
import { BullModule } from '@nestjs/bullmq';
|
|
import { AppsController } from '@waha/apps/app_sdk/api/apps.controller';
|
|
import { BullAuthMiddleware } from '@waha/apps/app_sdk/auth';
|
|
import { AppsDisabledService } from '@waha/apps/app_sdk/services/AppsDisabledService';
|
|
import { AppsEnabledService } from '@waha/apps/app_sdk/services/AppsEnabledService';
|
|
import { AppsService } from '@waha/apps/app_sdk/services/IAppsService';
|
|
import { ChatWootExports } from '@waha/apps/chatwoot/chatwoot.module';
|
|
import { parseBool } from '@waha/helpers';
|
|
import { RMutexModule } from '@waha/modules/rmutex';
|
|
|
|
const IMPORTS = [
|
|
BullModule.forRoot({
|
|
connection: {
|
|
url: process.env.REDIS_URL || 'redis://:redis@localhost:6379',
|
|
maxRetriesPerRequest: null,
|
|
},
|
|
prefix: `waha-${process.env.WAHA_WORKER_ID}`,
|
|
}),
|
|
RedisModule.forRoot({
|
|
closeClient: true,
|
|
config: {
|
|
url: process.env.REDIS_URL || 'redis://:redis@localhost:6379',
|
|
onClientCreated: async (client) => {
|
|
try {
|
|
await client.ping();
|
|
} catch (err) {
|
|
console.error('[Redis] Connection failed:', err);
|
|
process.exit(1); // Stop the app if Redis is unavailable
|
|
}
|
|
},
|
|
},
|
|
}),
|
|
RMutexModule,
|
|
BullBoardModule.forRoot({
|
|
route: '/jobs',
|
|
adapter: ExpressAdapter,
|
|
middleware: BullAuthMiddleware(),
|
|
boardOptions: {
|
|
uiConfig: {
|
|
boardTitle: 'Jobs | WAHA',
|
|
boardLogo: {
|
|
path: '/dashboard/layout/images/logo-white.svg',
|
|
width: 35,
|
|
height: 35,
|
|
},
|
|
favIcon: {
|
|
default: '/dashboard/favicon.ico',
|
|
alternative: '/dashboard/favicon.ico',
|
|
},
|
|
miscLinks: [
|
|
{
|
|
text: '📊 Dashboard',
|
|
url: '/dashboard',
|
|
},
|
|
{
|
|
text: '📚 Swagger (OpenAPI)',
|
|
url: '/',
|
|
},
|
|
],
|
|
},
|
|
},
|
|
}),
|
|
...ChatWootExports.imports,
|
|
];
|
|
|
|
const AppsEnabled = {
|
|
imports: IMPORTS,
|
|
controllers: [AppsController, ...ChatWootExports.controllers],
|
|
providers: [
|
|
{
|
|
provide: AppsService,
|
|
useClass: AppsEnabledService,
|
|
},
|
|
...ChatWootExports.providers,
|
|
],
|
|
};
|
|
|
|
const AppsDisabled = {
|
|
providers: [
|
|
{
|
|
provide: AppsService,
|
|
useClass: AppsDisabledService,
|
|
},
|
|
],
|
|
imports: [],
|
|
controllers: [AppsController],
|
|
};
|
|
|
|
function checkApiKey() {
|
|
const key = process.env.WHATSAPP_API_KEY || process.env.WAHA_API_KEY;
|
|
if (!key) {
|
|
return;
|
|
}
|
|
const plain = process.env.WAHA_API_KEY_PLAIN;
|
|
if (!plain) {
|
|
throw Error(
|
|
'WAHA_API_KEY set, please provide WAHA_API_KEY_PLAIN when WAHA_APPS_ENABLED',
|
|
);
|
|
}
|
|
}
|
|
|
|
const enabled = parseBool(process.env.WAHA_APPS_ENABLED);
|
|
if (enabled) {
|
|
checkApiKey();
|
|
}
|
|
export const AppsModuleExports = enabled ? AppsEnabled : AppsDisabled;
|