umbot
Version:
Мультиплатформенный фреймворк для создания голосовых навыков и чат-ботов с единой бизнес-логикой. Встроенная поддержка ВКонтакте, Telegram, Viber, MAX, Яндекс Алисы, Маруси и Сбера SmartApp. Архитектура на адаптерах позволяет подключать любые другие платф
123 lines (122 loc) • 6.68 kB
TypeScript
/**
* Модуль для упрощённого запуска приложения без boilerplate-кода.
*
* Предоставляет функцию {@link run}, которая автоматически инициализирует бота,
* подключает платформы, настраивает базу данных и запускает сервер или тесты
* в зависимости от выбранного режима (`dev`, `dev-online`, `prod`).
*
* Используйте этот модуль, если не требуется кастомная конфигурация HTTP-сервера
* или сложная асинхронная инициализация.
*
* @packageDocumentation
* @module build
*/
import { Bot, IAppConfig, IAppParam, TBotControllerClass, TPlugin } from './index';
import { IBotTestParams } from './test';
import { Server } from 'node:http';
/**
* Режим работы приложения
* @remarks
* Определяет режим запуска и окружение приложения:
* - dev: Запуск в режиме тестирования с использованием консоли в качестве тестового окружения.
* Удобно для локальной разработки и отладки.
* - dev-online: Запуск в режиме тестирования с использованием webhook.
* Позволяет тестировать интеграции с внешними сервисами.
* - prod: Запуск в релизном режиме для использования в продакшн среде.
* Все оптимизации включены, логирование минимально.
*/
export type TMode = 'dev' | 'dev-online' | 'prod';
/**
* Настройки для приложения.
*/
export interface IConfig {
/**
* Конфигурация приложения.
*/
appConfig?: IAppConfig;
/**
* Параметры приложения.
*/
appParam?: IAppParam;
/**
* Контроллер, отвечающий за логику приложения.
* В случае если контроллер не указан, то будет использоваться контроллер по умолчанию.
*/
controller?: TBotControllerClass;
/**
* Параметры для тестового окружения. Стоит указывать когда mode = dev
*/
testParams?: IBotTestParams;
/**
* Дополнительная логика для приложения, позволяющая дополнительно подключить различные плагины и адаптеры, добавить действие/шаг или выполнить любое другое действие по настройке приложения.
* Стоит указывать когда нужно задать дополнительные настройки приложения.
*
* @example
* ```ts
* logic: (bot: Bot) => {
* bot.addCommand('my_command', ['my_slot'], (intent, bc) => { bc.text = 'OK'; }); // Добавляем команду
* }
* ```
* @param bot
*/
logic?: (bot: Bot) => void;
/**
* Список плагинов, которые будут подключены к приложению.
* Стоит использовать, когда необходимо подключить различные платформы, адаптеры для работы с базой данных и тд.
* По умолчанию включает все доступные платформы, и для работы с базой данных, будет использоваться либо `FileAdapter` (для работы с файловой базой), либо `MongoAdapter` (для MongoDb базы).
* Необходимый адаптер будет подключен в зависимости от настроек приложения. Если были указаны настройки для подключения к базе данных, то будет использоваться `MongoAdapter`, в противном случае `FileAdapter`
*/
plugins?: TPlugin[];
}
/**
* Единая точка входа для запуска приложения — «из коробки» без boilerplate-кода.
*
* **Зачем это нужно?**
* Вместо ручной инициализации (5-7 строк):
* ```ts
* const bot = new Bot();
* bot.setAppConfig(config.appConfig || {});
* bot.setPlatformParams(config.appParam);
* bot.initBotController(config.controller);
* bot.setAppMode('strict_prod');
* bot.start(hostname, port);
* ```
*
* Достаточно одного вызова:
* ```ts
* run(config, 'prod', '0.0.0.0', 8080);
* ```
*
* **Когда использовать:**
* - Стандартные сценарии запуска (локальная разработка, тестирование, продакшн)
* - Когда используется встроенный HTTP-сервер фреймворка (`node:http.Server`)
*
* **Когда не использовать:**
* - Нужен кастомный HTTP-сервер (Express, Fastify)
* - Требуется сложная логика инициализации (асинхронная загрузка конфига и т.п.)
*
* @param config — конфигурация приложения (контроллер, параметры, плагины)
* @param mode — режим работы ('dev' для консольных тестов, 'dev-online' для webhook-тестов, 'prod' для продакшна)
* @param hostname — хост (по умолчанию 'localhost')
* @param port — порт (по умолчанию 3000)
* @returns В режиме 'dev' возвращает Promise<void>; в режимах 'dev-online' и 'prod' — объект Server (node:http.Server).
*
* @example
* ```ts
* // Запуск в режиме разработки
* run({
* appConfig: { ... },
* appParam: { ... },
* controller: MyController,
* testParams: { ... }
* }, 'dev');
*
* // Запуск в продакшн режиме
* run({
* appConfig: { ... },
* appParam: { ... },
* controller: MyController
* }, 'prod');
* ```
*/
export declare function run(config: IConfig, mode?: TMode, hostname?: string, port?: number): Server | Promise<void>;