UNPKG

umbot

Version:

Мультиплатформенный фреймворк для создания голосовых навыков и чат-ботов с единой бизнес-логикой. Встроенная поддержка ВКонтакте, Telegram, Viber, MAX, Яндекс Алисы, Маруси и Сбера SmartApp. Архитектура на адаптерах позволяет подключать любые другие платф

123 lines (122 loc) 6.68 kB
/** * Модуль для упрощённого запуска приложения без 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>;