From 87da9078fe3c6dfca4e813bef67b486299b119f5 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Mon, 26 Apr 2021 12:25:07 +0700 Subject: [PATCH] added webhook parser --- config.example.yml | 5 ++++- src/api/http/index.ts | 8 +++++--- src/api/http/types.ts | 4 ---- src/api/http/validation.ts | 14 ++++---------- src/config/types.ts | 6 ++++++ src/config/validate.ts | 8 +++++++- src/index.ts | 7 ++++++- 7 files changed, 32 insertions(+), 20 deletions(-) diff --git a/config.example.yml b/config.example.yml index 58b21dd..dcf6511 100644 --- a/config.example.yml +++ b/config.example.yml @@ -2,7 +2,10 @@ http: port: 3002 telegram: key: '' - webhookUrl: http://localhost:3002/webhook +webhook: + path: /webhook + url: https://something.org:123123/webhook + enabled: false logger: level: info #vk: diff --git a/src/api/http/index.ts b/src/api/http/index.ts index 920f51d..6662b35 100644 --- a/src/api/http/index.ts +++ b/src/api/http/index.ts @@ -6,6 +6,7 @@ import loggerHttpMiddleware from "../../service/logger/http"; import logger from "../../service/logger"; import { TelegramService } from "../../service/telegram"; import http from "http"; +import { WebhookConfig } from "../../config/types"; export class HttpApi { app: Express; @@ -13,7 +14,8 @@ export class HttpApi { constructor( private props: HttpConfig, private telegram: TelegramService, - private vk: VkService + private vk: VkService, + private webhook?: WebhookConfig ) { this.app = express(); this.app.use(express.json()); @@ -35,8 +37,8 @@ export class HttpApi { this.app.use(bodyParser.json()); this.app.use(express.json()); - if (props?.webhook?.enabled && props?.webhook?.url) { - logger.info(`using webhook at ${props.webhook.url}`); + if (this?.webhook?.enabled && this?.webhook?.path) { + logger.info(`using webhook at ${this.webhook.path}`); this.app.post(props.webhook.url, this.handleWebhook); } } diff --git a/src/api/http/types.ts b/src/api/http/types.ts index cd2322e..eecda3d 100644 --- a/src/api/http/types.ts +++ b/src/api/http/types.ts @@ -1,7 +1,3 @@ export interface HttpConfig extends Record { port: number; - webhook?: { - url?: string; - enabled?: boolean; - }; } diff --git a/src/api/http/validation.ts b/src/api/http/validation.ts index 0e3322b..4e96472 100644 --- a/src/api/http/validation.ts +++ b/src/api/http/validation.ts @@ -1,11 +1,5 @@ -import { boolean, number, object, string } from "yup"; +import { number, object } from "yup"; -export const httpConfigSchema = object() - .required() - .shape({ - port: number().defined().required().positive(), - webhook: object().optional().shape({ - url: string(), - enabled: boolean(), - }), - }); +export const httpConfigSchema = object().required().shape({ + port: number().defined().required().positive(), +}); diff --git a/src/config/types.ts b/src/config/types.ts index 1c089aa..100f258 100644 --- a/src/config/types.ts +++ b/src/config/types.ts @@ -3,9 +3,15 @@ import { VkConfig } from "../service/vk/types"; import { HttpConfig } from "../api/http/types"; import { LoggerConfig } from "../service/logger/types"; +export interface WebhookConfig { + path?: string; + url?: string; + enabled?: boolean; +} export interface Config extends Record { http: HttpConfig; telegram: TelegramConfig; vk: VkConfig; logger?: LoggerConfig; + webhook?: WebhookConfig; } diff --git a/src/config/validate.ts b/src/config/validate.ts index c3e1dcf..b5e0608 100644 --- a/src/config/validate.ts +++ b/src/config/validate.ts @@ -1,15 +1,21 @@ -import { object } from "yup"; +import { boolean, object, string } from "yup"; import { httpConfigSchema } from "../api/http/validation"; import { Config } from "./types"; import { vkConfigSchema } from "../service/vk/validation"; import { telegramConfigSchema } from "../service/telegram/validation"; import { loggerConfigSchema } from "../service/logger/config"; +const webhookValidationSchema = object().optional().shape({ + url: string(), + enabled: boolean(), +}); + const configSchema = object().required().shape({ http: httpConfigSchema, vk: vkConfigSchema, telegram: telegramConfigSchema, logger: loggerConfigSchema, + webhook: webhookValidationSchema, }); export const validateConfig = (config: Config) => diff --git a/src/index.ts b/src/index.ts index 4baefb8..0bf416e 100644 --- a/src/index.ts +++ b/src/index.ts @@ -14,7 +14,12 @@ async function main() { const telegramApi = new TelegramApi(telegram).listen(); await telegram.start(); - const httpApi = new HttpApi(config.http, telegram, vkService).listen(); + const httpApi = new HttpApi( + config.http, + telegram, + vkService, + config.webhook + ).listen(); } catch (e) { logger.error(e.message); }