├── .env.exemple ├── .gitignore ├── LICENSE ├── README.md ├── assets └── blaze.png ├── package.json ├── prisma ├── migrations │ ├── 20220327173518_create_colors │ │ └── migration.sql │ ├── 20220327180159_create_colors │ │ └── migration.sql │ ├── 20220420090747_init │ │ └── migration.sql │ ├── 20220420091541_alter_tables_name │ │ └── migration.sql │ ├── 20220420093220_alter_table_configs_for_standard │ │ └── migration.sql │ ├── 20220428174009_change_created_at_column_type │ │ └── migration.sql │ └── migration_lock.toml └── schema.prisma ├── src ├── app.ts ├── bot │ └── CreateBot.ts ├── helpers │ ├── BotMetrics │ │ └── MetricDouble.ts │ └── Messages │ │ └── MountMessageHelpers.ts ├── prisma │ └── client.ts ├── router.ts ├── server.ts └── useCases │ ├── configs │ ├── ConfigsController.ts │ └── ConfigsUseCase.ts │ └── counts │ └── CountsUseCase.ts ├── tsconfig.json └── yarn.lock /.env.exemple: -------------------------------------------------------------------------------- 1 | PORT = 3000 2 | TOKEN_TELEGRAM = your bot token 3 | CHANNEL_NAME = your ID channel 4 | BOT_NAME = bot name 5 | 6 | DATABASE_URL="mysql://userDatabase:password@localhost:port/nameDatabase" 7 | 8 | API_BLAZE_DOUBLE_RECENT = https://blaze.com/api/roulette_games/recent -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | # Keep environment variables out of version control 3 | .env 4 | dist 5 | api -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Jocimar Costa 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |
2 | 3 | 4 |
5 |
6 | 7 | Logo 8 | 9 | 10 |

Blaze Double

11 |
12 | 13 | 14 | 15 | 16 | ## 🤖 Bot Blaze 17 | 18 | A [Blaze][blaze] apostas é um cassino online que recentemente se tornou popular nas redes sociais. 19 | 20 | Esse bot tem como objetivo enviar mensagem em grupo/canal no telegram, indicando uma possível cor para apostar. 21 | 22 | * __O bot não faz a coleta da útima cor que saiu na blaze, isso você vai ter que fazer.__ 23 | * __Para fazer alguma alteração no padrão desse Bot, acesse esse arquivo `MetricDouble.ts`.__ 24 | 25 | Caminho: 26 | ``` 27 | ./src/helpers/botMetrics/MetricDouble.ts 28 | ``` 29 | * __Esse bot foi desenvolvido com o padrão de cores 🔴🔴🔴⚫, ao cadastrar seu bot , precisa informar o padrão, ou seja, a quantidade de vezes que precisa repetir uma cor para poder enviar o sinal no canal.__ 30 | 31 | 32 |

top

33 | 34 | 35 | 36 | 37 | ## ✨ Instalação 38 | 39 | _Para executar o bot, precisa seguir os passos a seguir._ 40 | * __Presumo que já tenha [NodeJs][nodejs] instalado.__ 41 | 42 | 1. Clone o repositório 43 | ```sh 44 | git clone https://github.com/jocimarjsc/blazebot 45 | ``` 46 | 2. Instalar as dependências 47 | ```sh 48 | npm install 49 | ``` 50 | ou 51 | ```sh 52 | yarn 53 | ``` 54 | 3. Trocar o nome do arquivo `.env.exemple` para `.env` 55 | 56 | 4. Coloque os valores das variavés de ambiente no arquivo `.env` 57 | ```js 58 | PORT = 3000 //não alterar essa porta 59 | 60 | TOKEN_TELEGRAM = your bot token 61 | 62 | CHANNEL_NAME = your ID channel 63 | 64 | BOT_NAME = bot name 65 | 66 | DATABASE_URL="mysql://userDatabase:password@localhost:port/nameDatabase" 67 | ``` 68 | 69 |

top

70 | 71 | 72 | 73 | 74 | ### 🗃️ Banco de dados 75 | 76 | Para esse projeto é necessário ter um banco de dados, optei por usar o [MySql][mysql]. 77 | 78 | 1. Instale o [MySql][mysql] 79 | 80 | 2. Crie um banco de dados com o seguinte nome `tips_blaze` 81 | 82 |

top

83 | 84 | 85 | 86 | 87 | ## 📝 Como Usar 88 | 89 | 1. Deve-se executar 90 | 91 | ``` 92 | npx prisma migrate dev --name add_tables 93 | ``` 94 | ou 95 | ``` 96 | yarn prisma migrate dev --name add_tables 97 | ``` 98 | 99 | 2. Executar como desenvolvimento 100 | ``` 101 | npm run dev 102 | ``` 103 | ou 104 | ``` 105 | yarn dev 106 | ``` 107 | 3. Executar em produção 108 | ``` 109 | npm run build 110 | ``` 111 | ou 112 | ``` 113 | yarn build 114 | ``` 115 | Depois esse comando 116 | ``` 117 | npm run start 118 | ``` 119 | ou 120 | ``` 121 | yarn start 122 | ``` 123 | 124 | __Se tudo ocorreu bem, deve ver no console as seguintes messagens:__ 125 | ``` 126 | 🤖 Bot On! 🟢 127 | ✅ Server is running! 128 | ``` 129 | 130 |

top

131 | 132 | ## 📛 Rotas 133 | _Para que o BOT venha enviar mensagem no telegram, você precisa enviar uma request para a "Rota" abaixo._ 134 | 135 | * Recebe a última cor que saiu na [Blaze][blaze], Método: "POST". 136 | 137 | ``` 138 | https://localhost:3000/colors 139 | ``` 140 | ~~~json 141 | //espera receber esses parametros 142 | { 143 | "colorName": "red", 144 | "number": "4" 145 | } 146 | ~~~ 147 | * Se no console aparecer: 148 | ``` 149 | ⚙️ Precisa configurar seu bot! 150 | ``` 151 | _Abra a conversa do seu Bot no telegram use o comando `/start` e siga os passos para cadastrar seu bot._ 152 | 153 | ## ⚠️ Observações 154 | 155 | 1. _Você precisa **COLETAR** a última cor que saiu na [Blaze][blaze]._ 156 | 157 |

top

158 | 159 | ## Contato 160 | 161 | Telegram: __@jocimarjsc__ 162 | 163 | 164 | 165 | --- 166 | ⌨️ com ❤️ por [Jocimar Costa][GitHub] 😊 167 | 168 | [GitHub]: https://github.com/jocimarjsc 169 | [blaze]: https://blaze.com/r/KOGDR9 170 | [mysql]: https://dev.mysql.com/downloads/installer/ 171 | [nodejs]: https://nodejs.org/en/ -------------------------------------------------------------------------------- /assets/blaze.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jocimarjsc/blazebot/f8d3fa1ad9ffffc362a97bf4050be51469e9282f/assets/blaze.png -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "botblaze", 3 | "version": "1.0.0", 4 | "main": "index.js", 5 | "license": "", 6 | "scripts": { 7 | "start": "node ./dist/server.js", 8 | "dev": "ts-node-dev --transpile-only --ignore-watch node_modules src/server.ts", 9 | "build": "tsc --build", 10 | "clean": "tsc --build --clean" 11 | }, 12 | "devDependencies": { 13 | "@types/axios": "^0.14.0", 14 | "@types/cors": "^2.8.12", 15 | "@types/express": "^4.17.13", 16 | "prisma": "^3.11.1", 17 | "ts-node-dev": "^1.1.8", 18 | "typescript": "^4.6.3" 19 | }, 20 | "dependencies": { 21 | "@prisma/client": "^3.11.1", 22 | "axios": "^0.27.2", 23 | "cors": "^2.8.5", 24 | "dotenv": "^16.0.0", 25 | "express": "^4.17.3", 26 | "mysql": "^2.18.1", 27 | "telegraf": "^4.7.0" 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /prisma/migrations/20220327173518_create_colors/migration.sql: -------------------------------------------------------------------------------- 1 | -- CreateTable 2 | CREATE TABLE `Colors` ( 3 | `id` VARCHAR(191) NOT NULL, 4 | `color` VARCHAR(191) NOT NULL, 5 | `number` VARCHAR(191) NOT NULL, 6 | `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), 7 | 8 | PRIMARY KEY (`id`) 9 | ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; 10 | -------------------------------------------------------------------------------- /prisma/migrations/20220327180159_create_colors/migration.sql: -------------------------------------------------------------------------------- 1 | /* 2 | Warnings: 3 | 4 | - You are about to drop the column `color` on the `colors` table. All the data in the column will be lost. 5 | - Added the required column `colorName` to the `Colors` table without a default value. This is not possible if the table is not empty. 6 | 7 | */ 8 | -- AlterTable 9 | ALTER TABLE `colors` DROP COLUMN `color`, 10 | ADD COLUMN `colorName` VARCHAR(191) NOT NULL; 11 | -------------------------------------------------------------------------------- /prisma/migrations/20220420090747_init/migration.sql: -------------------------------------------------------------------------------- 1 | /* 2 | Warnings: 3 | 4 | - You are about to drop the `colors` table. If the table is not empty, all the data it contains will be lost. 5 | 6 | */ 7 | -- DropTable 8 | DROP TABLE `colors`; 9 | 10 | -- CreateTable 11 | CREATE TABLE `config` ( 12 | `id` VARCHAR(191) NOT NULL, 13 | `name` VARCHAR(191) NOT NULL, 14 | `default` VARCHAR(191) NOT NULL, 15 | `password` VARCHAR(191) NOT NULL, 16 | `activo` BOOLEAN NOT NULL, 17 | `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), 18 | `updatedAt` DATETIME(3) NOT NULL, 19 | 20 | PRIMARY KEY (`id`) 21 | ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; 22 | 23 | -- CreateTable 24 | CREATE TABLE `count` ( 25 | `id` VARCHAR(191) NOT NULL, 26 | `countGreen` INTEGER NOT NULL, 27 | `countWhite` INTEGER NOT NULL, 28 | `countRed` INTEGER NOT NULL, 29 | `countGale1` INTEGER NOT NULL, 30 | `countGale2` INTEGER NOT NULL, 31 | `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), 32 | `updatedAt` DATETIME(3) NOT NULL, 33 | 34 | PRIMARY KEY (`id`) 35 | ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; 36 | -------------------------------------------------------------------------------- /prisma/migrations/20220420091541_alter_tables_name/migration.sql: -------------------------------------------------------------------------------- 1 | /* 2 | Warnings: 3 | 4 | - You are about to drop the `config` table. If the table is not empty, all the data it contains will be lost. 5 | - You are about to drop the `count` table. If the table is not empty, all the data it contains will be lost. 6 | 7 | */ 8 | -- DropTable 9 | DROP TABLE `config`; 10 | 11 | -- DropTable 12 | DROP TABLE `count`; 13 | 14 | -- CreateTable 15 | CREATE TABLE `configs` ( 16 | `id` VARCHAR(191) NOT NULL, 17 | `name` VARCHAR(191) NOT NULL, 18 | `default` VARCHAR(191) NOT NULL, 19 | `password` VARCHAR(191) NOT NULL, 20 | `activo` BOOLEAN NOT NULL, 21 | `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), 22 | `updatedAt` DATETIME(3) NOT NULL, 23 | 24 | PRIMARY KEY (`id`) 25 | ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; 26 | 27 | -- CreateTable 28 | CREATE TABLE `counts` ( 29 | `id` VARCHAR(191) NOT NULL, 30 | `countGreen` INTEGER NOT NULL, 31 | `countWhite` INTEGER NOT NULL, 32 | `countRed` INTEGER NOT NULL, 33 | `countGale1` INTEGER NOT NULL, 34 | `countGale2` INTEGER NOT NULL, 35 | `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), 36 | `updatedAt` DATETIME(3) NOT NULL, 37 | 38 | PRIMARY KEY (`id`) 39 | ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; 40 | -------------------------------------------------------------------------------- /prisma/migrations/20220420093220_alter_table_configs_for_standard/migration.sql: -------------------------------------------------------------------------------- 1 | /* 2 | Warnings: 3 | 4 | - You are about to drop the column `default` on the `configs` table. All the data in the column will be lost. 5 | - Added the required column `standard` to the `configs` table without a default value. This is not possible if the table is not empty. 6 | 7 | */ 8 | -- AlterTable 9 | ALTER TABLE `configs` DROP COLUMN `default`, 10 | ADD COLUMN `standard` INTEGER NOT NULL; 11 | -------------------------------------------------------------------------------- /prisma/migrations/20220428174009_change_created_at_column_type/migration.sql: -------------------------------------------------------------------------------- 1 | -- AlterTable 2 | ALTER TABLE `counts` MODIFY `createdAt` VARCHAR(191) NOT NULL; 3 | -------------------------------------------------------------------------------- /prisma/migrations/migration_lock.toml: -------------------------------------------------------------------------------- 1 | # Please do not edit this file manually 2 | # It should be added in your version-control system (i.e. Git) 3 | provider = "mysql" -------------------------------------------------------------------------------- /prisma/schema.prisma: -------------------------------------------------------------------------------- 1 | // This is your Prisma schema file, 2 | // learn more about it in the docs: https://pris.ly/d/prisma-schema 3 | 4 | generator client { 5 | provider = "prisma-client-js" 6 | } 7 | 8 | datasource db { 9 | provider = "mysql" 10 | url = env("DATABASE_URL") 11 | } 12 | 13 | model Config { 14 | id String @id @default(uuid()) 15 | name String 16 | standard Int 17 | password String 18 | activo Boolean 19 | createdAt DateTime @default(now()) 20 | updatedAt DateTime @updatedAt 21 | 22 | @@map("configs") 23 | } 24 | 25 | model Count { 26 | id String @id @default(uuid()) 27 | countGreen Int 28 | countWhite Int 29 | countRed Int 30 | countGale1 Int 31 | countGale2 Int 32 | createdAt String 33 | updatedAt DateTime @updatedAt 34 | 35 | @@map("counts") 36 | } -------------------------------------------------------------------------------- /src/app.ts: -------------------------------------------------------------------------------- 1 | import express from "express" 2 | import cors from "cors" 3 | import * as dotenv from "dotenv"; 4 | import { routes } from "./router" 5 | import { Bot } from "./bot/CreateBot"; 6 | 7 | dotenv.config(); 8 | 9 | const bot = new Bot() 10 | bot.inital() 11 | bot.commandBot() 12 | 13 | const app = express() 14 | 15 | app.use(cors()) 16 | 17 | app.use(express.json()) 18 | 19 | app.use(routes) 20 | 21 | export { app } -------------------------------------------------------------------------------- /src/bot/CreateBot.ts: -------------------------------------------------------------------------------- 1 | import { Telegraf } from "telegraf" 2 | import { ConfigsController } from "../useCases/configs/ConfigsController" 3 | import { ConfigsUseCase } from "../useCases/configs/ConfigsUseCase" 4 | import { CountsUseCase } from "../useCases/counts/CountsUseCase" 5 | 6 | interface IMessage { 7 | countGreen?: number 8 | countRed?: number 9 | color?: string 10 | channel?: string 11 | message: string 12 | messageID?: number 13 | } 14 | 15 | interface IDataCount { 16 | id: string 17 | countWhite: number 18 | countGreen: number 19 | countRed: number 20 | countGale1: number 21 | countGale2: number 22 | totalWin?: number 23 | totalSent?: number 24 | percentageWin?: number 25 | } 26 | 27 | class Bot { 28 | start: string 29 | bots: Telegraf 30 | 31 | constructor() { 32 | this.start = "🤖 Bot On! 🟢" 33 | this.bots = new Telegraf(process.env.TOKEN_TELEGRAM) 34 | } 35 | 36 | public async inital() { 37 | 38 | try { 39 | console.log(this.start) 40 | this.bots.launch(); 41 | 42 | process.once("SIGINT", () => this.bots.stop("SIGINT")); 43 | process.once("SIGTERM", () => this.bots.stop("SIGTERM")); 44 | } catch (error) { 45 | console.log("Error in connection of API!") 46 | } 47 | } 48 | 49 | async sendMessage({ countGreen, countRed, color, message }: IMessage) { 50 | try { 51 | const messageId = await this.bots.telegram.sendMessage(process.env.CHANNEL_NAME, message, { parse_mode: 'HTML' }) 52 | 53 | return messageId.message_id 54 | } catch (error) { 55 | console.log("Error send message!") 56 | } 57 | 58 | } 59 | 60 | async deleteMessageWithID(messageID: any) { 61 | try { 62 | await this.bots.telegram.deleteMessage(process.env.CHANNEL_NAME, messageID) 63 | } catch (error) { 64 | console.log("Error in delete message!") 65 | } 66 | } 67 | 68 | async replyMessage({ message, messageID }: IMessage) { 69 | try { 70 | const messageId = await this.bots.telegram.sendMessage(process.env.CHANNEL_NAME, message, { reply_to_message_id: messageID, parse_mode: "HTML" }) 71 | return messageId.message_id 72 | } catch (error) { 73 | console.log("Error reply message!") 74 | console.log(error.message) 75 | } 76 | } 77 | 78 | async commandBot() { 79 | this.bots.start(async (ctx) => { 80 | await ctx.reply(`🤖 Bem vindo ao ${ctx.botInfo.first_name} 📣\n\n/padrao Ver as configurações do Bot.\n\n/config Cadastrar e alterar as configs do Bot.\n\n/resultado Envia relatório no canal.\nVocê pode passar uma data\nExemplo: '24/01/2022', se não vai\nser enviado com a data do dia.\n\n/help Ajuda.`, { parse_mode: 'HTML' }) 81 | }) 82 | 83 | this.bots.help(async (ctx) => { 84 | await ctx.reply(`🤖 Bot Comandos 📣\n\n/padrao Ver as configurações do Bot.\n\n/config Cadastrar e alterar as configs do Bot.\n\n/resultado Envia relatório no canal.\nVocê pode passar uma data\nExemplo: '24/01/2022', se não vai\nser enviado com a data do dia.`, { parse_mode: 'HTML' }) 85 | }) 86 | 87 | this.bots.command("padrao", async (ctx) => { 88 | const configUseCase = new ConfigsUseCase() 89 | const configs = await configUseCase.show() 90 | 91 | if (configs !== null) { 92 | const { activo, standard } = await configUseCase.show() 93 | await ctx.reply(`🤖 Bot Configs ⚙️\n\nBot: ${activo ? "Ativado" : "Desativado"}\nPadrão: ${Number(standard)}`, { parse_mode: 'HTML' }) 94 | return 95 | } 96 | await ctx.reply(`Você precisa configurar seu bot\n\n/config`, { parse_mode: 'HTML' }) 97 | }) 98 | 99 | this.bots.command("resultado", async (ctx) => { 100 | const [command, date] = ctx.message.text.split(" ") 101 | const countUseCase = new CountsUseCase() 102 | const data = await countUseCase.getCounts(date) 103 | 104 | if (data.length === 0) { 105 | console.log("Sem registro") 106 | await ctx.reply(`📊 Resultados até agora! 📈\n\n⛔Sem registro\n\n✅Acertos: 0\n❌Não Bateu: 0\n\n🥇Primeira Entrada: 0\n1️⃣Primeira Gale: 0\n2️⃣Segunda Gale: 0\n⚪Winn Branco: 0\n\n 0% de aproveitamento!`, { parse_mode: 'HTML' }) 107 | return 108 | } 109 | 110 | const { greenWhite, green, red, gale1, gale2, totalWin, totalSent, percentageWin } = await this.calculateCounts(data) 111 | 112 | const message = `📊 Resultados até agora! 📈\n\n✅Acertos: ${totalWin}\n❌Não Bateu: ${red}\n\n🥇Primeira Entrada: ${green}\n1️⃣Primeira Gale: ${gale1}\n2️⃣Segunda Gale: ${gale2}\n⚪Winn Branco: ${greenWhite}\n\n ${Math.round(100 - percentageWin)}% de aproveitamento!` 113 | await this.sendMessage({ message }) 114 | await ctx.replyWithHTML(`📨 Relatório enviado!`) 115 | return 116 | }) 117 | 118 | this.bots.command("config", async (ctx) => { 119 | const configUseCase = new ConfigsUseCase() 120 | const configs = await configUseCase.show() 121 | 122 | const configsController = new ConfigsController() 123 | 124 | const respone = ctx.message.text.split(" ") 125 | const [_, botName, password, newDefault, activo] = ctx.message.text.split(" ") 126 | const newActivo = activo === "ativado" ? true : false 127 | 128 | if (respone.length !== 5) { 129 | await ctx.reply("⚠️ Parametros Errados!\n\nEnviar da seguinte maneira:\n\nComando: /config\nBot: nome do seu bot\nSenha: senha de acesso\nPadrão: número do seu padrão, ex. 3\nAtivo: ativado ou desativado\n\nExemplo: /config blaze-bot abc123 4 ativado", { parse_mode: 'HTML' }) 130 | return 131 | } 132 | 133 | switch (activo) { 134 | case "ativado": 135 | case "desativado": 136 | if (configs === null) { 137 | await configsController.create({ name: botName, standard: Number(newDefault), activo: newActivo, password: password.toString() }) 138 | await ctx.reply(`⚠️ Atenção ⚠️\n\nCadastro realizado!`, { parse_mode: 'HTML' }) 139 | return 140 | } 141 | 142 | if (configs.password === password && configs.name === botName) { 143 | await configsController.create({ name: botName, standard: Number(newDefault), activo: newActivo, password: password.toString() }) 144 | await ctx.reply(`⚠️ Atenção ⚠️\n\nParâmetros Alterados\n\nBot: ${newActivo ? "Ativado" : "Desativado"}\nPadrão: ${Number(newDefault)}`, { parse_mode: 'HTML' }) 145 | return 146 | } 147 | await ctx.reply(`⚠️ Atenção ⚠️\n\nNome do Bot ou Senha errada!`, { parse_mode: 'HTML' }) 148 | break; 149 | default: 150 | await ctx.reply("⚠️ Atenção ⚠️\n\nInforme se o BOT está \nativado ou desativado", { parse_mode: 'HTML' }) 151 | break; 152 | } 153 | }) 154 | } 155 | 156 | async calculateCounts(data: Array) { 157 | let greenWhite = null 158 | let green = null 159 | let red = null 160 | let gale1 = null 161 | let gale2 = null 162 | 163 | data.forEach(async counts => { 164 | greenWhite = greenWhite + counts.countWhite 165 | green = green + counts.countGreen 166 | red = red + counts.countRed 167 | gale1 = gale1 + counts.countGale1 168 | gale2 = gale2 + counts.countGale2 169 | }) 170 | let totalWin = green + greenWhite + gale1 + gale2 171 | let totalSent = totalWin + red 172 | let percentageWin = Math.round((red * 100) / totalSent) 173 | 174 | return { 175 | greenWhite, 176 | green, 177 | red, 178 | gale1, 179 | gale2, 180 | totalWin, 181 | totalSent, 182 | percentageWin 183 | } 184 | } 185 | } 186 | 187 | export { Bot } -------------------------------------------------------------------------------- /src/helpers/BotMetrics/MetricDouble.ts: -------------------------------------------------------------------------------- 1 | import { Bot } from "../../bot/CreateBot" 2 | import { MountMessageHelper } from "../Messages/MountMessageHelpers" 3 | import { CountsUseCase } from "../../useCases/counts/CountsUseCase" 4 | import { ConfigsUseCase } from "../../useCases/configs/ConfigsUseCase" 5 | 6 | interface ISequenceFour { 7 | colorName: string 8 | number: string 9 | standard: number 10 | } 11 | 12 | let data = { 13 | messageID: null, 14 | idMessageSent: null, 15 | standard: null, 16 | isEqual: false, 17 | countGale1: 0, 18 | countGale2: 0, 19 | gale: 0, 20 | counterTipSent: 0, 21 | countGreen: 0, 22 | countWhite: 0, 23 | countRed: 0, 24 | countColorEqual: 0, 25 | lastColor: "", 26 | colors: [] 27 | } 28 | 29 | class MetricDouble { 30 | bot: Bot 31 | mounteMessageHelper: MountMessageHelper 32 | alert: Promise 33 | info: Promise 34 | cover: Promise 35 | entryBlack: Promise 36 | entryRed: Promise 37 | red: Promise 38 | greenWithWhite: Promise 39 | green: Promise 40 | date: string 41 | createdAt: string 42 | 43 | countsUseCase: CountsUseCase 44 | getConfigs: ConfigsUseCase 45 | 46 | constructor() { 47 | this.bot = new Bot() 48 | this.mounteMessageHelper = new MountMessageHelper() 49 | this.alert = this.mounteMessageHelper.Alert() 50 | this.info = this.mounteMessageHelper.Info() 51 | this.cover = this.mounteMessageHelper.Cover() 52 | this.entryBlack = this.mounteMessageHelper.Entryblack() 53 | this.entryRed = this.mounteMessageHelper.EntryRed() 54 | this.green = this.mounteMessageHelper.Green() 55 | this.greenWithWhite = this.mounteMessageHelper.GreenWithWhite() 56 | this.red = this.mounteMessageHelper.Red() 57 | this.date = Intl.DateTimeFormat("pt-br").format(new Date()) 58 | this.createdAt = this.date 59 | 60 | this.countsUseCase = new CountsUseCase() 61 | this.getConfigs = new ConfigsUseCase() 62 | } 63 | 64 | async verifySequenceFour({ colorName, number }: ISequenceFour) { 65 | const configs = await this.getConfigs.findByName(process.env.BOT_NAME) 66 | if(!configs) { 67 | console.log("⛔ O nome do BOT no arquivo .env não é o mesmo nome que você cadastrou!") 68 | return 69 | } 70 | data.standard = configs.standard 71 | 72 | //import mensagens 73 | const ColorOfEntry = colorName === "red" ? await this.entryBlack : await this.entryRed 74 | 75 | if (data.lastColor === colorName || data.lastColor === "") { 76 | data.colors = [] 77 | data.colors.push({ colorName, number }) 78 | data.lastColor = colorName 79 | data.countColorEqual += 1 80 | data.isEqual = true 81 | 82 | if (colorName === "white") { 83 | data.countColorEqual = 0 84 | console.log(data.colors) 85 | console.log("--------------------------------------------------") 86 | } 87 | 88 | //possivel entrada 89 | if (data.isEqual === true && data.countColorEqual === data.standard - 1 && colorName !== "white") { 90 | const message = `Analisando Possível Entrada: ${ColorOfEntry}` 91 | 92 | const messageID = await this.bot.sendMessage({ message }) 93 | data.messageID = messageID 94 | console.log(`BOT1: Analisando Possível Entrada: ${ColorOfEntry}`) 95 | console.log(data.colors) 96 | console.log("--------------------------------------------------") 97 | 98 | return data 99 | } 100 | 101 | //enviar tip 102 | if (data.isEqual === true && data.countColorEqual === data.standard && colorName !== "white") { 103 | if (data.messageID !== null) await this.bot.deleteMessageWithID(data.messageID) 104 | data.messageID = null 105 | const message = `✅Entrar: ${ColorOfEntry} ${await this.cover}\n${await this.info}` 106 | const message2 = `🎰BLAZE DOUBLE\n⚠️Última cor ${data.lastColor === "red" ? "🟥" : "⬛"}\n\n🎲 ENTRAR NO ${colorName === "black" ? "🟥" : "⬛"}⬜\n2️⃣ Máximo 02 Martingale` 107 | data.counterTipSent += 1 108 | 109 | const messageID = await this.bot.sendMessage({ message: message2 }) 110 | data.idMessageSent = messageID 111 | console.log(`BOT1: TIP ENVIADA: ${ColorOfEntry} ${await this.cover}`) 112 | console.log(data.colors) 113 | console.log("--------------------------------------------------") 114 | 115 | return data 116 | } 117 | 118 | //conferencia red e martingale 119 | if (data.isEqual === true && data.lastColor === colorName && colorName !== "white" && data.countColorEqual > data.standard) { 120 | data.gale += 1 121 | 122 | //martingales 123 | if (data.gale === 1) { 124 | const message = `Vamos Primeira Gale` 125 | const messageID = await this.bot.replyMessage({ message: `Vamos Primeira Gale`, messageID: data.idMessageSent }) 126 | data.messageID = messageID 127 | console.log(`BOT1: GALE: Vamos a Primeira Gale`) 128 | console.log(data.colors) 129 | console.log("--------------------------------------------------") 130 | return data 131 | } 132 | 133 | if (data.gale === 2) { 134 | if (data.messageID !== null) await this.bot.deleteMessageWithID(data.messageID) 135 | const message = `Vamos Primeira Gale` 136 | const messageID = await this.bot.replyMessage({ message: `Vamos Segunda Gale`, messageID: data.idMessageSent }) 137 | data.messageID = messageID 138 | console.log(`BOT1: GALE: Vamos Segunda Gale`) 139 | console.log(data.colors) 140 | console.log("--------------------------------------------------") 141 | return data 142 | } 143 | 144 | //inicio conferencia red 145 | if (data.messageID !== null) await this.bot.deleteMessageWithID(data.messageID) 146 | data.gale = 0 147 | data.colors = [] 148 | data.colors.push({ colorName, number }) 149 | data.countColorEqual = 0 150 | data.countColorEqual += 1 151 | data.countRed += 1 152 | data.lastColor = colorName 153 | 154 | await this.countsUseCase.createCounts({ 155 | countWhite: 0, 156 | countGreen: 0, 157 | countRed: 1, 158 | countGale1: data.gale === 1 ? 1 : 0, 159 | countGale2: data.gale === 2 ? 1 : 0, 160 | createdAt: this.createdAt 161 | }) 162 | 163 | await this.bot.replyMessage({ message: `${await this.red}`, messageID: data.idMessageSent }) 164 | console.log(`BOT1: RED: ${await this.red}`) 165 | console.log(data.colors) 166 | console.log("--------------------------------------------------") 167 | return data 168 | } 169 | console.log(data.colors) 170 | console.log("--------------------------------------------------") 171 | return data 172 | } 173 | 174 | if (data.lastColor !== colorName) { 175 | //possivel entrada e sequencia quebrada 176 | const possibleEntryCancel = data.isEqual === true && data.countColorEqual === data.standard - 1 177 | if (possibleEntryCancel) { 178 | if (data.messageID !== null) await this.bot.deleteMessageWithID(data.messageID) 179 | data.messageID = null 180 | console.log("BOT1: ---> Sequência Quebrada, Mensagem apagada.") 181 | console.log(data.colors) 182 | console.log("--------------------------------------------------") 183 | data.colors = [] 184 | } 185 | 186 | //green na cor white 187 | const redWithWhite = colorName === "white" && data.countColorEqual >= data.standard 188 | if (redWithWhite) { 189 | if (data.messageID !== null) await this.bot.deleteMessageWithID(data.messageID) 190 | data.messageID = null 191 | const thisGale = data.gale === 1 ? "Primeira Gale" : "Segunda Gale" 192 | data.colors = [] 193 | data.colors.push({ colorName, number }) 194 | data.lastColor = colorName 195 | data.countColorEqual = 0 196 | data.countColorEqual += 1 197 | data.countWhite += 1 198 | data.isEqual = false 199 | data.countGale1 += data.gale === 1 ? 1 : 0 200 | data.countGale2 += data.gale === 2 ? 1 : 0 201 | 202 | await this.countsUseCase.createCounts({ 203 | countWhite: 1, 204 | countGreen: 0, 205 | countRed: 0, 206 | countGale1: 0, 207 | countGale2: 0, 208 | createdAt: this.createdAt 209 | }) 210 | 211 | await this.bot.replyMessage({ message: `${await this.greenWithWhite}${data.gale ? `\n${thisGale}` : ""}`, messageID: data.idMessageSent }) 212 | console.log(`BOT1: GREEN WHITE: ${await this.greenWithWhite} ${data.gale ? `\n\n${thisGale}` : ""}`) 213 | console.log(data.colors) 214 | console.log("--------------------------------------------------") 215 | data.gale = 0 216 | 217 | return data 218 | } 219 | 220 | data.countColorEqual += 1 221 | data.isEqual = false 222 | 223 | //conferencia green 224 | if (data.isEqual === false && data.countColorEqual >= data.standard + 1 && data.lastColor !== "white") { 225 | if (data.messageID !== null) await this.bot.deleteMessageWithID(data.messageID) 226 | data.messageID = null 227 | 228 | const thisGale = data.gale === 1 ? "Primeira Gale" : "Segunda Gale" 229 | 230 | data.isEqual = false 231 | data.colors = [] 232 | data.colors.push({ colorName, number }) 233 | data.lastColor = colorName 234 | data.countGreen += data.gale === 1 || data.gale === 2 ? 0 : 1 235 | data.countColorEqual = 0 236 | data.countColorEqual += 1 237 | data.countGale1 += data.gale === 1 ? 1 : 0 238 | data.countGale2 += data.gale === 2 ? 1 : 0 239 | 240 | await this.countsUseCase.createCounts({ 241 | countWhite: 0, 242 | countGreen: data.gale === 1 || data.gale === 2 ? 0 : 1, 243 | countRed: 0, 244 | countGale1: data.gale === 1 ? 1 : 0, 245 | countGale2: data.gale === 2 ? 1 : 0, 246 | createdAt: this.createdAt 247 | }) 248 | 249 | await this.bot.replyMessage({ message: `${await this.green}${data.gale ? `\n${thisGale}` : ""}`, messageID: data.idMessageSent }) 250 | console.log(`BOT1: GREEN: ${await this.green} ${data.gale ? `\n${thisGale}` : ""}`) 251 | console.log(data.colors) 252 | console.log("--------------------------------------------------") 253 | data.gale = 0 254 | 255 | return data 256 | } 257 | 258 | data.colors = [] 259 | data.colors.push({ colorName, number }) 260 | data.lastColor = colorName 261 | 262 | data.countColorEqual = 0 263 | data.countColorEqual += 1 264 | 265 | console.log(data.colors) 266 | console.log("--------------------------------------------------") 267 | 268 | return data 269 | } 270 | 271 | return data 272 | } 273 | // async verifySequenceFour({ colorName, number, standard }: ISequenceFour) { 274 | // //insira seu padrão aqui 275 | // const message = `Você precisa fazer o seu padrão!` 276 | // this.bot.sendMessage({ message }) 277 | // console.log({ message }) 278 | 279 | // return { message } 280 | // } 281 | } 282 | 283 | export { MetricDouble } -------------------------------------------------------------------------------- /src/helpers/Messages/MountMessageHelpers.ts: -------------------------------------------------------------------------------- 1 | class MountMessageHelper { 2 | entryRed: string 3 | entryblack: string 4 | green: string 5 | red: string 6 | confirmedEntry: string 7 | info: string 8 | cover: string 9 | alert: string 10 | balance: string 11 | abortEntry: string 12 | greenWithWhite: string 13 | 14 | constructor() { 15 | this.confirmedEntry = "⚠️Entrada Confirmada⚠️" 16 | this.abortEntry = "⚠️ABORTAR ENTRADA⚠️ \n\n ❌❌❌❌❌❌❌❌❌" 17 | this.entryRed = "🔴" 18 | this.entryblack = "⚫" 19 | this.green = "WINNNN! ✅✅ 🤑💰" 20 | this.red = "REEED! ❌❌😯💨" 21 | this.info = "2️⃣ Máximo 02 Martingale" 22 | this.cover = "⚪" 23 | this.alert = "⚠️ATENÇÃO⚠️" 24 | this.balance = "📊 Balanço 📊" 25 | this.greenWithWhite = "WINNNN!!✅✅ 🤑💰\n\nNo Branco⚪" 26 | } 27 | 28 | async ConfirmedEntry() { 29 | return this.confirmedEntry 30 | } 31 | 32 | async AbortEntry() { 33 | return this.abortEntry 34 | } 35 | 36 | async EntryRed() { 37 | return this.entryRed 38 | } 39 | 40 | async Entryblack() { 41 | return this.entryblack 42 | } 43 | 44 | async Green() { 45 | return this.green 46 | } 47 | 48 | async GreenWithWhite() { 49 | return this.greenWithWhite 50 | } 51 | 52 | async Red() { 53 | return this.red 54 | } 55 | 56 | async Info() { 57 | return this.info 58 | } 59 | 60 | async Cover() { 61 | return this.cover 62 | } 63 | 64 | async Alert() { 65 | return this.alert 66 | } 67 | 68 | async Balance() { 69 | return this.balance 70 | } 71 | } 72 | 73 | export { MountMessageHelper } -------------------------------------------------------------------------------- /src/prisma/client.ts: -------------------------------------------------------------------------------- 1 | import { PrismaClient } from "@prisma/client" 2 | 3 | const client = new PrismaClient() 4 | 5 | export { client } -------------------------------------------------------------------------------- /src/router.ts: -------------------------------------------------------------------------------- 1 | import { Router } from "express" 2 | import { ConfigsController } from "./useCases/configs/ConfigsController" 3 | 4 | const routes = Router() 5 | 6 | const configController = new ConfigsController() 7 | 8 | routes.post("/colors", configController.handle) 9 | 10 | export { routes } -------------------------------------------------------------------------------- /src/server.ts: -------------------------------------------------------------------------------- 1 | import { app } from "./app"; 2 | 3 | app.listen(process.env.PORT || 3000, () => console.log("✅ Server is running!")) -------------------------------------------------------------------------------- /src/useCases/configs/ConfigsController.ts: -------------------------------------------------------------------------------- 1 | import { Request, Response } from "express" 2 | import { MetricDouble } from "../../helpers/BotMetrics/MetricDouble" 3 | import { ConfigsUseCase } from "./ConfigsUseCase" 4 | 5 | interface IConfigsRequest { 6 | id?: string 7 | name: string 8 | standard: number 9 | password: string 10 | activo: boolean 11 | } 12 | 13 | class ConfigsController { 14 | async handle(request: Request, response: Response) { 15 | const { colorName, number } = request.body 16 | const configsUseCase = new ConfigsUseCase() 17 | const configs = await configsUseCase.show() 18 | 19 | if (!configs) { 20 | console.log("⚙️ Precisa configurar seu bot!") 21 | return response.status(501).json({ message: "Need to configure the bot!"}) 22 | } 23 | 24 | if (configs.activo) { 25 | const metricDouble = new MetricDouble() 26 | const data = await metricDouble.verifySequenceFour({ colorName, number, standard: configs.standard }) 27 | 28 | return response.json(data) 29 | } 30 | 31 | console.log("⛔Bot desativado") 32 | 33 | return response.status(501).json({ message: "Bot is desactived!"}) 34 | } 35 | 36 | async create({ name, standard, activo, password }: IConfigsRequest) { 37 | const configsUseCase = new ConfigsUseCase() 38 | 39 | const alreadyExistsConfigs = await configsUseCase.show() 40 | 41 | if (!alreadyExistsConfigs) { 42 | const newConfigs = await configsUseCase.create({ 43 | name, standard, activo, password 44 | }) 45 | 46 | return newConfigs 47 | } 48 | 49 | 50 | const updateConfig = await configsUseCase.update({ 51 | id: alreadyExistsConfigs.id, 52 | standard, 53 | activo 54 | }) 55 | 56 | return updateConfig 57 | } 58 | } 59 | 60 | export { ConfigsController } -------------------------------------------------------------------------------- /src/useCases/configs/ConfigsUseCase.ts: -------------------------------------------------------------------------------- 1 | import { client } from "../../prisma/client" 2 | 3 | interface IConfigsRequest { 4 | id?: string 5 | name?: string 6 | standard?: number 7 | password?: string 8 | activo?: boolean 9 | } 10 | 11 | class ConfigsUseCase { 12 | async create({ name, standard, password, activo }: IConfigsRequest) { 13 | const configs = await client.config.create({ 14 | data: { 15 | name, 16 | standard, 17 | password, 18 | activo 19 | } 20 | }) 21 | 22 | return configs 23 | } 24 | 25 | async show() { 26 | const configs = await client.config.findFirst() 27 | 28 | return configs 29 | } 30 | 31 | async findByName(name: string) { 32 | const config = await client.config.findFirst({ 33 | where: { name } 34 | }) 35 | 36 | return config 37 | } 38 | 39 | async update({ standard, activo, id }: IConfigsRequest) { 40 | const configs = await client.config.update({ 41 | where: { id }, 42 | data: { 43 | standard, 44 | activo 45 | } 46 | }) 47 | 48 | return configs 49 | } 50 | } 51 | 52 | export { ConfigsUseCase } -------------------------------------------------------------------------------- /src/useCases/counts/CountsUseCase.ts: -------------------------------------------------------------------------------- 1 | import { client } from "../../prisma/client" 2 | 3 | interface ICounts { 4 | id?: string 5 | countGreen?: number 6 | countWhite?: number 7 | countRed?: number 8 | countGale1?: number 9 | countGale2?: number 10 | createdAt: string 11 | } 12 | 13 | class CountsUseCase { 14 | async getCounts(consultationDate: string) { 15 | const d = new Date() 16 | 17 | const date = Intl.DateTimeFormat("pt-br").format(d) 18 | 19 | const counts = await client.count.findMany({ 20 | where: { 21 | createdAt: consultationDate ? consultationDate : date 22 | } 23 | }) 24 | 25 | return counts 26 | } 27 | 28 | async createCounts({ countGreen, countWhite, countRed, countGale1, countGale2, createdAt }: ICounts) { 29 | const counts = await client.count.create({ 30 | data: { 31 | countGreen, 32 | countWhite, 33 | countRed, 34 | countGale1, 35 | countGale2, 36 | createdAt 37 | } 38 | }) 39 | 40 | return counts 41 | } 42 | 43 | async updateCounts({ id, countGreen, countWhite, countRed, countGale1, countGale2 }: ICounts) { 44 | const updateCounts = await client.count.update({ 45 | where: { id }, 46 | data: { 47 | countGreen, 48 | countWhite, 49 | countRed, 50 | countGale1, 51 | countGale2 52 | } 53 | }) 54 | 55 | return updateCounts 56 | } 57 | } 58 | 59 | export { CountsUseCase } -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | /* Visit https://aka.ms/tsconfig.json to read more about this file */ 4 | 5 | /* Projects */ 6 | // "incremental": true, /* Enable incremental compilation */ 7 | // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ 8 | // "tsBuildInfoFile": "./", /* Specify the folder for .tsbuildinfo incremental compilation files. */ 9 | // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects */ 10 | // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ 11 | // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ 12 | 13 | /* Language and Environment */ 14 | "target": "es5", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ 15 | // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ 16 | // "jsx": "preserve", /* Specify what JSX code is generated. */ 17 | // "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */ 18 | // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ 19 | // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h' */ 20 | // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ 21 | // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using `jsx: react-jsx*`.` */ 22 | // "reactNamespace": "", /* Specify the object invoked for `createElement`. This only applies when targeting `react` JSX emit. */ 23 | // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ 24 | // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ 25 | 26 | /* Modules */ 27 | "module": "commonjs", /* Specify what module code is generated. */ 28 | // "rootDir": "./", /* Specify the root folder within your source files. */ 29 | // "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */ 30 | // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ 31 | // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ 32 | // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ 33 | // "typeRoots": [], /* Specify multiple folders that act like `./node_modules/@types`. */ 34 | // "types": [], /* Specify type package names to be included without being referenced in a source file. */ 35 | // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ 36 | // "resolveJsonModule": true, /* Enable importing .json files */ 37 | // "noResolve": true, /* Disallow `import`s, `require`s or ``s from expanding the number of files TypeScript should add to a project. */ 38 | 39 | /* JavaScript Support */ 40 | // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the `checkJS` option to get errors from these files. */ 41 | // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ 42 | // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from `node_modules`. Only applicable with `allowJs`. */ 43 | 44 | /* Emit */ 45 | // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ 46 | // "declarationMap": true, /* Create sourcemaps for d.ts files. */ 47 | // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ 48 | // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ 49 | // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If `declaration` is true, also designates a file that bundles all .d.ts output. */ 50 | "outDir": "dist", /* Specify an output folder for all emitted files. */ 51 | // "removeComments": true, /* Disable emitting comments. */ 52 | // "noEmit": true, /* Disable emitting files from a compilation. */ 53 | // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ 54 | // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types */ 55 | // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ 56 | // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ 57 | // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ 58 | // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ 59 | // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ 60 | // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ 61 | // "newLine": "crlf", /* Set the newline character for emitting files. */ 62 | // "stripInternal": true, /* Disable emitting declarations that have `@internal` in their JSDoc comments. */ 63 | // "noEmitHelpers": true, /* Disable generating custom helper functions like `__extends` in compiled output. */ 64 | // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ 65 | // "preserveConstEnums": true, /* Disable erasing `const enum` declarations in generated code. */ 66 | // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ 67 | // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ 68 | 69 | /* Interop Constraints */ 70 | // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ 71 | // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ 72 | "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables `allowSyntheticDefaultImports` for type compatibility. */ 73 | // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ 74 | "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ 75 | 76 | /* Type Checking */ 77 | "strict": false, /* Enable all strict type-checking options. */ 78 | // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied `any` type.. */ 79 | // "strictNullChecks": true, /* When type checking, take into account `null` and `undefined`. */ 80 | // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ 81 | // "strictBindCallApply": true, /* Check that the arguments for `bind`, `call`, and `apply` methods match the original function. */ 82 | // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ 83 | // "noImplicitThis": true, /* Enable error reporting when `this` is given the type `any`. */ 84 | // "useUnknownInCatchVariables": true, /* Type catch clause variables as 'unknown' instead of 'any'. */ 85 | // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ 86 | // "noUnusedLocals": true, /* Enable error reporting when a local variables aren't read. */ 87 | // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read */ 88 | // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ 89 | // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ 90 | // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ 91 | // "noUncheckedIndexedAccess": true, /* Include 'undefined' in index signature results */ 92 | // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ 93 | // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type */ 94 | // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ 95 | // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ 96 | 97 | /* Completeness */ 98 | // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ 99 | "skipLibCheck": true /* Skip type checking all .d.ts files. */ 100 | } 101 | } 102 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@prisma/client@^3.11.1": 6 | version "3.11.1" 7 | resolved "https://registry.yarnpkg.com/@prisma/client/-/client-3.11.1.tgz#bde6dec71ae133d04ce1c6658e3d76627a3c6dc7" 8 | integrity sha512-B3C7zQG4HbjJzUr2Zg9UVkBJutbqq9/uqkl1S138+keZCubJrwizx3RuIvGwI+s+pm3qbsyNqXiZgL3Ir0fSng== 9 | dependencies: 10 | "@prisma/engines-version" "3.11.1-1.1a2506facaf1a4727b7c26850735e88ec779dee9" 11 | 12 | "@prisma/engines-version@3.11.1-1.1a2506facaf1a4727b7c26850735e88ec779dee9": 13 | version "3.11.1-1.1a2506facaf1a4727b7c26850735e88ec779dee9" 14 | resolved "https://registry.yarnpkg.com/@prisma/engines-version/-/engines-version-3.11.1-1.1a2506facaf1a4727b7c26850735e88ec779dee9.tgz#81a1835b495ad287ad7824dbd62f74e9eee90fb9" 15 | integrity sha512-HkcsDniA4iNb/gi0iuyOJNAM7nD/LwQ0uJm15v360O5dee3TM4lWdSQiTYBMK6FF68ACUItmzSur7oYuUZ2zkQ== 16 | 17 | "@prisma/engines@3.11.1-1.1a2506facaf1a4727b7c26850735e88ec779dee9": 18 | version "3.11.1-1.1a2506facaf1a4727b7c26850735e88ec779dee9" 19 | resolved "https://registry.yarnpkg.com/@prisma/engines/-/engines-3.11.1-1.1a2506facaf1a4727b7c26850735e88ec779dee9.tgz#09ac23f8f615a8586d8d44538060ada199fe872c" 20 | integrity sha512-MILbsGnvmnhCbFGa2/iSnsyGyazU3afzD7ldjCIeLIGKkNBMSZgA2IvpYsAXl+6qFHKGrS3B2otKfV31dwMSQw== 21 | 22 | "@types/axios@^0.14.0": 23 | version "0.14.0" 24 | resolved "https://registry.yarnpkg.com/@types/axios/-/axios-0.14.0.tgz#ec2300fbe7d7dddd7eb9d3abf87999964cafce46" 25 | integrity sha512-KqQnQbdYE54D7oa/UmYVMZKq7CO4l8DEENzOKc4aBRwxCXSlJXGz83flFx5L7AWrOQnmuN3kVsRdt+GZPPjiVQ== 26 | dependencies: 27 | axios "*" 28 | 29 | "@types/body-parser@*": 30 | version "1.19.2" 31 | resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.2.tgz#aea2059e28b7658639081347ac4fab3de166e6f0" 32 | integrity sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g== 33 | dependencies: 34 | "@types/connect" "*" 35 | "@types/node" "*" 36 | 37 | "@types/connect@*": 38 | version "3.4.35" 39 | resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1" 40 | integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ== 41 | dependencies: 42 | "@types/node" "*" 43 | 44 | "@types/cors@^2.8.12": 45 | version "2.8.12" 46 | resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.12.tgz#6b2c510a7ad7039e98e7b8d3d6598f4359e5c080" 47 | integrity sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw== 48 | 49 | "@types/express-serve-static-core@^4.17.18": 50 | version "4.17.28" 51 | resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz#c47def9f34ec81dc6328d0b1b5303d1ec98d86b8" 52 | integrity sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig== 53 | dependencies: 54 | "@types/node" "*" 55 | "@types/qs" "*" 56 | "@types/range-parser" "*" 57 | 58 | "@types/express@^4.17.13": 59 | version "4.17.13" 60 | resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.13.tgz#a76e2995728999bab51a33fabce1d705a3709034" 61 | integrity sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA== 62 | dependencies: 63 | "@types/body-parser" "*" 64 | "@types/express-serve-static-core" "^4.17.18" 65 | "@types/qs" "*" 66 | "@types/serve-static" "*" 67 | 68 | "@types/mime@^1": 69 | version "1.3.2" 70 | resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.2.tgz#93e25bf9ee75fe0fd80b594bc4feb0e862111b5a" 71 | integrity sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw== 72 | 73 | "@types/node@*": 74 | version "17.0.23" 75 | resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.23.tgz#3b41a6e643589ac6442bdbd7a4a3ded62f33f7da" 76 | integrity sha512-UxDxWn7dl97rKVeVS61vErvw086aCYhDLyvRQZ5Rk65rZKepaFdm53GeqXaKBuOhED4e9uWq34IC3TdSdJJ2Gw== 77 | 78 | "@types/qs@*": 79 | version "6.9.7" 80 | resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" 81 | integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== 82 | 83 | "@types/range-parser@*": 84 | version "1.2.4" 85 | resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc" 86 | integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== 87 | 88 | "@types/serve-static@*": 89 | version "1.13.10" 90 | resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.10.tgz#f5e0ce8797d2d7cc5ebeda48a52c96c4fa47a8d9" 91 | integrity sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ== 92 | dependencies: 93 | "@types/mime" "^1" 94 | "@types/node" "*" 95 | 96 | "@types/strip-bom@^3.0.0": 97 | version "3.0.0" 98 | resolved "https://registry.yarnpkg.com/@types/strip-bom/-/strip-bom-3.0.0.tgz#14a8ec3956c2e81edb7520790aecf21c290aebd2" 99 | integrity sha1-FKjsOVbC6B7bdSB5CuzyHCkK69I= 100 | 101 | "@types/strip-json-comments@0.0.30": 102 | version "0.0.30" 103 | resolved "https://registry.yarnpkg.com/@types/strip-json-comments/-/strip-json-comments-0.0.30.tgz#9aa30c04db212a9a0649d6ae6fd50accc40748a1" 104 | integrity sha512-7NQmHra/JILCd1QqpSzl8+mJRc8ZHz3uDm8YV1Ks9IhK0epEiTw8aIErbvH9PI+6XbqhyIQy3462nEsn7UVzjQ== 105 | 106 | abort-controller@^3.0.0: 107 | version "3.0.0" 108 | resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" 109 | integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== 110 | dependencies: 111 | event-target-shim "^5.0.0" 112 | 113 | accepts@~1.3.8: 114 | version "1.3.8" 115 | resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" 116 | integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== 117 | dependencies: 118 | mime-types "~2.1.34" 119 | negotiator "0.6.3" 120 | 121 | anymatch@~3.1.2: 122 | version "3.1.2" 123 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" 124 | integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== 125 | dependencies: 126 | normalize-path "^3.0.0" 127 | picomatch "^2.0.4" 128 | 129 | arg@^4.1.0: 130 | version "4.1.3" 131 | resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" 132 | integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== 133 | 134 | array-flatten@1.1.1: 135 | version "1.1.1" 136 | resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" 137 | integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= 138 | 139 | asynckit@^0.4.0: 140 | version "0.4.0" 141 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" 142 | integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== 143 | 144 | axios@*, axios@^0.27.2: 145 | version "0.27.2" 146 | resolved "https://registry.yarnpkg.com/axios/-/axios-0.27.2.tgz#207658cc8621606e586c85db4b41a750e756d972" 147 | integrity sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ== 148 | dependencies: 149 | follow-redirects "^1.14.9" 150 | form-data "^4.0.0" 151 | 152 | balanced-match@^1.0.0: 153 | version "1.0.2" 154 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" 155 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 156 | 157 | bignumber.js@9.0.0: 158 | version "9.0.0" 159 | resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.0.0.tgz#805880f84a329b5eac6e7cb6f8274b6d82bdf075" 160 | integrity sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A== 161 | 162 | binary-extensions@^2.0.0: 163 | version "2.2.0" 164 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" 165 | integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== 166 | 167 | body-parser@1.19.2: 168 | version "1.19.2" 169 | resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.2.tgz#4714ccd9c157d44797b8b5607d72c0b89952f26e" 170 | integrity sha512-SAAwOxgoCKMGs9uUAUFHygfLAyaniaoun6I8mFY9pRAJL9+Kec34aU+oIjDhTycub1jozEfEwx1W1IuOYxVSFw== 171 | dependencies: 172 | bytes "3.1.2" 173 | content-type "~1.0.4" 174 | debug "2.6.9" 175 | depd "~1.1.2" 176 | http-errors "1.8.1" 177 | iconv-lite "0.4.24" 178 | on-finished "~2.3.0" 179 | qs "6.9.7" 180 | raw-body "2.4.3" 181 | type-is "~1.6.18" 182 | 183 | brace-expansion@^1.1.7: 184 | version "1.1.11" 185 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 186 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 187 | dependencies: 188 | balanced-match "^1.0.0" 189 | concat-map "0.0.1" 190 | 191 | braces@~3.0.2: 192 | version "3.0.2" 193 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" 194 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 195 | dependencies: 196 | fill-range "^7.0.1" 197 | 198 | buffer-alloc-unsafe@^1.1.0: 199 | version "1.1.0" 200 | resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0" 201 | integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg== 202 | 203 | buffer-alloc@^1.2.0: 204 | version "1.2.0" 205 | resolved "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec" 206 | integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow== 207 | dependencies: 208 | buffer-alloc-unsafe "^1.1.0" 209 | buffer-fill "^1.0.0" 210 | 211 | buffer-fill@^1.0.0: 212 | version "1.0.0" 213 | resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" 214 | integrity sha1-+PeLdniYiO858gXNY39o5wISKyw= 215 | 216 | buffer-from@^1.0.0: 217 | version "1.1.2" 218 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" 219 | integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== 220 | 221 | bytes@3.1.2: 222 | version "3.1.2" 223 | resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" 224 | integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== 225 | 226 | chokidar@^3.5.1: 227 | version "3.5.3" 228 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" 229 | integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== 230 | dependencies: 231 | anymatch "~3.1.2" 232 | braces "~3.0.2" 233 | glob-parent "~5.1.2" 234 | is-binary-path "~2.1.0" 235 | is-glob "~4.0.1" 236 | normalize-path "~3.0.0" 237 | readdirp "~3.6.0" 238 | optionalDependencies: 239 | fsevents "~2.3.2" 240 | 241 | combined-stream@^1.0.8: 242 | version "1.0.8" 243 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" 244 | integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== 245 | dependencies: 246 | delayed-stream "~1.0.0" 247 | 248 | concat-map@0.0.1: 249 | version "0.0.1" 250 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 251 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 252 | 253 | content-disposition@0.5.4: 254 | version "0.5.4" 255 | resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" 256 | integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== 257 | dependencies: 258 | safe-buffer "5.2.1" 259 | 260 | content-type@~1.0.4: 261 | version "1.0.4" 262 | resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" 263 | integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== 264 | 265 | cookie-signature@1.0.6: 266 | version "1.0.6" 267 | resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" 268 | integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= 269 | 270 | cookie@0.4.2: 271 | version "0.4.2" 272 | resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" 273 | integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== 274 | 275 | core-util-is@~1.0.0: 276 | version "1.0.3" 277 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" 278 | integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== 279 | 280 | cors@^2.8.5: 281 | version "2.8.5" 282 | resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" 283 | integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== 284 | dependencies: 285 | object-assign "^4" 286 | vary "^1" 287 | 288 | create-require@^1.1.0: 289 | version "1.1.1" 290 | resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" 291 | integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== 292 | 293 | debug@2.6.9: 294 | version "2.6.9" 295 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" 296 | integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== 297 | dependencies: 298 | ms "2.0.0" 299 | 300 | debug@^4.3.3: 301 | version "4.3.4" 302 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" 303 | integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== 304 | dependencies: 305 | ms "2.1.2" 306 | 307 | delayed-stream@~1.0.0: 308 | version "1.0.0" 309 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" 310 | integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== 311 | 312 | depd@~1.1.2: 313 | version "1.1.2" 314 | resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" 315 | integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= 316 | 317 | destroy@~1.0.4: 318 | version "1.0.4" 319 | resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" 320 | integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= 321 | 322 | diff@^4.0.1: 323 | version "4.0.2" 324 | resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" 325 | integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== 326 | 327 | dotenv@^16.0.0: 328 | version "16.0.0" 329 | resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.0.0.tgz#c619001253be89ebb638d027b609c75c26e47411" 330 | integrity sha512-qD9WU0MPM4SWLPJy/r2Be+2WgQj8plChsyrCNQzW/0WjvcJQiKQJ9mH3ZgB3fxbUUxgc/11ZJ0Fi5KiimWGz2Q== 331 | 332 | dynamic-dedupe@^0.3.0: 333 | version "0.3.0" 334 | resolved "https://registry.yarnpkg.com/dynamic-dedupe/-/dynamic-dedupe-0.3.0.tgz#06e44c223f5e4e94d78ef9db23a6515ce2f962a1" 335 | integrity sha1-BuRMIj9eTpTXjvnbI6ZRXOL5YqE= 336 | dependencies: 337 | xtend "^4.0.0" 338 | 339 | ee-first@1.1.1: 340 | version "1.1.1" 341 | resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" 342 | integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= 343 | 344 | encodeurl@~1.0.2: 345 | version "1.0.2" 346 | resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" 347 | integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= 348 | 349 | escape-html@~1.0.3: 350 | version "1.0.3" 351 | resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" 352 | integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= 353 | 354 | etag@~1.8.1: 355 | version "1.8.1" 356 | resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" 357 | integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= 358 | 359 | event-target-shim@^5.0.0: 360 | version "5.0.1" 361 | resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" 362 | integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== 363 | 364 | express@^4.17.3: 365 | version "4.17.3" 366 | resolved "https://registry.yarnpkg.com/express/-/express-4.17.3.tgz#f6c7302194a4fb54271b73a1fe7a06478c8f85a1" 367 | integrity sha512-yuSQpz5I+Ch7gFrPCk4/c+dIBKlQUxtgwqzph132bsT6qhuzss6I8cLJQz7B3rFblzd6wtcI0ZbGltH/C4LjUg== 368 | dependencies: 369 | accepts "~1.3.8" 370 | array-flatten "1.1.1" 371 | body-parser "1.19.2" 372 | content-disposition "0.5.4" 373 | content-type "~1.0.4" 374 | cookie "0.4.2" 375 | cookie-signature "1.0.6" 376 | debug "2.6.9" 377 | depd "~1.1.2" 378 | encodeurl "~1.0.2" 379 | escape-html "~1.0.3" 380 | etag "~1.8.1" 381 | finalhandler "~1.1.2" 382 | fresh "0.5.2" 383 | merge-descriptors "1.0.1" 384 | methods "~1.1.2" 385 | on-finished "~2.3.0" 386 | parseurl "~1.3.3" 387 | path-to-regexp "0.1.7" 388 | proxy-addr "~2.0.7" 389 | qs "6.9.7" 390 | range-parser "~1.2.1" 391 | safe-buffer "5.2.1" 392 | send "0.17.2" 393 | serve-static "1.14.2" 394 | setprototypeof "1.2.0" 395 | statuses "~1.5.0" 396 | type-is "~1.6.18" 397 | utils-merge "1.0.1" 398 | vary "~1.1.2" 399 | 400 | fill-range@^7.0.1: 401 | version "7.0.1" 402 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" 403 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 404 | dependencies: 405 | to-regex-range "^5.0.1" 406 | 407 | finalhandler@~1.1.2: 408 | version "1.1.2" 409 | resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" 410 | integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== 411 | dependencies: 412 | debug "2.6.9" 413 | encodeurl "~1.0.2" 414 | escape-html "~1.0.3" 415 | on-finished "~2.3.0" 416 | parseurl "~1.3.3" 417 | statuses "~1.5.0" 418 | unpipe "~1.0.0" 419 | 420 | follow-redirects@^1.14.9: 421 | version "1.15.1" 422 | resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.1.tgz#0ca6a452306c9b276e4d3127483e29575e207ad5" 423 | integrity sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA== 424 | 425 | form-data@^4.0.0: 426 | version "4.0.0" 427 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" 428 | integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== 429 | dependencies: 430 | asynckit "^0.4.0" 431 | combined-stream "^1.0.8" 432 | mime-types "^2.1.12" 433 | 434 | forwarded@0.2.0: 435 | version "0.2.0" 436 | resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" 437 | integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== 438 | 439 | fresh@0.5.2: 440 | version "0.5.2" 441 | resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" 442 | integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= 443 | 444 | fs.realpath@^1.0.0: 445 | version "1.0.0" 446 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 447 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 448 | 449 | fsevents@~2.3.2: 450 | version "2.3.2" 451 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" 452 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== 453 | 454 | function-bind@^1.1.1: 455 | version "1.1.1" 456 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 457 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 458 | 459 | glob-parent@~5.1.2: 460 | version "5.1.2" 461 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" 462 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== 463 | dependencies: 464 | is-glob "^4.0.1" 465 | 466 | glob@^7.1.3: 467 | version "7.2.0" 468 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" 469 | integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== 470 | dependencies: 471 | fs.realpath "^1.0.0" 472 | inflight "^1.0.4" 473 | inherits "2" 474 | minimatch "^3.0.4" 475 | once "^1.3.0" 476 | path-is-absolute "^1.0.0" 477 | 478 | has@^1.0.3: 479 | version "1.0.3" 480 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" 481 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 482 | dependencies: 483 | function-bind "^1.1.1" 484 | 485 | http-errors@1.8.1: 486 | version "1.8.1" 487 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.8.1.tgz#7c3f28577cbc8a207388455dbd62295ed07bd68c" 488 | integrity sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g== 489 | dependencies: 490 | depd "~1.1.2" 491 | inherits "2.0.4" 492 | setprototypeof "1.2.0" 493 | statuses ">= 1.5.0 < 2" 494 | toidentifier "1.0.1" 495 | 496 | iconv-lite@0.4.24: 497 | version "0.4.24" 498 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" 499 | integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== 500 | dependencies: 501 | safer-buffer ">= 2.1.2 < 3" 502 | 503 | inflight@^1.0.4: 504 | version "1.0.6" 505 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 506 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 507 | dependencies: 508 | once "^1.3.0" 509 | wrappy "1" 510 | 511 | inherits@2, inherits@2.0.4, inherits@~2.0.3: 512 | version "2.0.4" 513 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 514 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 515 | 516 | ipaddr.js@1.9.1: 517 | version "1.9.1" 518 | resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" 519 | integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== 520 | 521 | is-binary-path@~2.1.0: 522 | version "2.1.0" 523 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" 524 | integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== 525 | dependencies: 526 | binary-extensions "^2.0.0" 527 | 528 | is-core-module@^2.8.1: 529 | version "2.8.1" 530 | resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.1.tgz#f59fdfca701d5879d0a6b100a40aa1560ce27211" 531 | integrity sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA== 532 | dependencies: 533 | has "^1.0.3" 534 | 535 | is-extglob@^2.1.1: 536 | version "2.1.1" 537 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 538 | integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= 539 | 540 | is-glob@^4.0.1, is-glob@~4.0.1: 541 | version "4.0.3" 542 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" 543 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== 544 | dependencies: 545 | is-extglob "^2.1.1" 546 | 547 | is-number@^7.0.0: 548 | version "7.0.0" 549 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 550 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 551 | 552 | isarray@~1.0.0: 553 | version "1.0.0" 554 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 555 | integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= 556 | 557 | make-error@^1.1.1: 558 | version "1.3.6" 559 | resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" 560 | integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== 561 | 562 | media-typer@0.3.0: 563 | version "0.3.0" 564 | resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" 565 | integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= 566 | 567 | merge-descriptors@1.0.1: 568 | version "1.0.1" 569 | resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" 570 | integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= 571 | 572 | methods@~1.1.2: 573 | version "1.1.2" 574 | resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" 575 | integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= 576 | 577 | mime-db@1.52.0: 578 | version "1.52.0" 579 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" 580 | integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== 581 | 582 | mime-types@^2.1.12, mime-types@~2.1.24, mime-types@~2.1.34: 583 | version "2.1.35" 584 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" 585 | integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== 586 | dependencies: 587 | mime-db "1.52.0" 588 | 589 | mime@1.6.0: 590 | version "1.6.0" 591 | resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" 592 | integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== 593 | 594 | minimatch@^3.0.4: 595 | version "3.1.2" 596 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" 597 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== 598 | dependencies: 599 | brace-expansion "^1.1.7" 600 | 601 | minimist@^1.2.5: 602 | version "1.2.6" 603 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" 604 | integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== 605 | 606 | mkdirp@^1.0.4: 607 | version "1.0.4" 608 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" 609 | integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== 610 | 611 | module-alias@^2.2.2: 612 | version "2.2.2" 613 | resolved "https://registry.yarnpkg.com/module-alias/-/module-alias-2.2.2.tgz#151cdcecc24e25739ff0aa6e51e1c5716974c0e0" 614 | integrity sha512-A/78XjoX2EmNvppVWEhM2oGk3x4lLxnkEA4jTbaK97QKSDjkIoOsKQlfylt/d3kKKi596Qy3NP5XrXJ6fZIC9Q== 615 | 616 | ms@2.0.0: 617 | version "2.0.0" 618 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 619 | integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= 620 | 621 | ms@2.1.2: 622 | version "2.1.2" 623 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 624 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 625 | 626 | ms@2.1.3: 627 | version "2.1.3" 628 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" 629 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== 630 | 631 | mysql@^2.18.1: 632 | version "2.18.1" 633 | resolved "https://registry.yarnpkg.com/mysql/-/mysql-2.18.1.tgz#2254143855c5a8c73825e4522baf2ea021766717" 634 | integrity sha512-Bca+gk2YWmqp2Uf6k5NFEurwY/0td0cpebAucFpY/3jhrwrVGuxU2uQFCHjU19SJfje0yQvi+rVWdq78hR5lig== 635 | dependencies: 636 | bignumber.js "9.0.0" 637 | readable-stream "2.3.7" 638 | safe-buffer "5.1.2" 639 | sqlstring "2.3.1" 640 | 641 | negotiator@0.6.3: 642 | version "0.6.3" 643 | resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" 644 | integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== 645 | 646 | node-fetch@^2.6.7: 647 | version "2.6.7" 648 | resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" 649 | integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== 650 | dependencies: 651 | whatwg-url "^5.0.0" 652 | 653 | normalize-path@^3.0.0, normalize-path@~3.0.0: 654 | version "3.0.0" 655 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" 656 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== 657 | 658 | object-assign@^4: 659 | version "4.1.1" 660 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 661 | integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= 662 | 663 | on-finished@~2.3.0: 664 | version "2.3.0" 665 | resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" 666 | integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= 667 | dependencies: 668 | ee-first "1.1.1" 669 | 670 | once@^1.3.0: 671 | version "1.4.0" 672 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 673 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 674 | dependencies: 675 | wrappy "1" 676 | 677 | p-timeout@^4.1.0: 678 | version "4.1.0" 679 | resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-4.1.0.tgz#788253c0452ab0ffecf18a62dff94ff1bd09ca0a" 680 | integrity sha512-+/wmHtzJuWii1sXn3HCuH/FTwGhrp4tmJTxSKJbfS+vkipci6osxXM5mY0jUiRzWKMTgUT8l7HFbeSwZAynqHw== 681 | 682 | parseurl@~1.3.3: 683 | version "1.3.3" 684 | resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" 685 | integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== 686 | 687 | path-is-absolute@^1.0.0: 688 | version "1.0.1" 689 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 690 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 691 | 692 | path-parse@^1.0.7: 693 | version "1.0.7" 694 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" 695 | integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== 696 | 697 | path-to-regexp@0.1.7: 698 | version "0.1.7" 699 | resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" 700 | integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= 701 | 702 | picomatch@^2.0.4, picomatch@^2.2.1: 703 | version "2.3.1" 704 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" 705 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== 706 | 707 | prisma@^3.11.1: 708 | version "3.11.1" 709 | resolved "https://registry.yarnpkg.com/prisma/-/prisma-3.11.1.tgz#fff9c0bcf83cb30c2e1d650882d5eb3c5565e028" 710 | integrity sha512-aYn8bQwt1xwR2oSsVNHT4PXU7EhsThIwmpNB/MNUaaMx5OPLTro6VdNJe/sJssXFLxhamfWeMjwmpXjljo6xkg== 711 | dependencies: 712 | "@prisma/engines" "3.11.1-1.1a2506facaf1a4727b7c26850735e88ec779dee9" 713 | 714 | process-nextick-args@~2.0.0: 715 | version "2.0.1" 716 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" 717 | integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== 718 | 719 | proxy-addr@~2.0.7: 720 | version "2.0.7" 721 | resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" 722 | integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== 723 | dependencies: 724 | forwarded "0.2.0" 725 | ipaddr.js "1.9.1" 726 | 727 | qs@6.9.7: 728 | version "6.9.7" 729 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.7.tgz#4610846871485e1e048f44ae3b94033f0e675afe" 730 | integrity sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw== 731 | 732 | range-parser@~1.2.1: 733 | version "1.2.1" 734 | resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" 735 | integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== 736 | 737 | raw-body@2.4.3: 738 | version "2.4.3" 739 | resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.3.tgz#8f80305d11c2a0a545c2d9d89d7a0286fcead43c" 740 | integrity sha512-UlTNLIcu0uzb4D2f4WltY6cVjLi+/jEN4lgEUj3E04tpMDpUlkBo/eSn6zou9hum2VMNpCCUone0O0WeJim07g== 741 | dependencies: 742 | bytes "3.1.2" 743 | http-errors "1.8.1" 744 | iconv-lite "0.4.24" 745 | unpipe "1.0.0" 746 | 747 | readable-stream@2.3.7: 748 | version "2.3.7" 749 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" 750 | integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== 751 | dependencies: 752 | core-util-is "~1.0.0" 753 | inherits "~2.0.3" 754 | isarray "~1.0.0" 755 | process-nextick-args "~2.0.0" 756 | safe-buffer "~5.1.1" 757 | string_decoder "~1.1.1" 758 | util-deprecate "~1.0.1" 759 | 760 | readdirp@~3.6.0: 761 | version "3.6.0" 762 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" 763 | integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== 764 | dependencies: 765 | picomatch "^2.2.1" 766 | 767 | resolve@^1.0.0: 768 | version "1.22.0" 769 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198" 770 | integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw== 771 | dependencies: 772 | is-core-module "^2.8.1" 773 | path-parse "^1.0.7" 774 | supports-preserve-symlinks-flag "^1.0.0" 775 | 776 | rimraf@^2.6.1: 777 | version "2.7.1" 778 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" 779 | integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== 780 | dependencies: 781 | glob "^7.1.3" 782 | 783 | safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: 784 | version "5.1.2" 785 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 786 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== 787 | 788 | safe-buffer@5.2.1: 789 | version "5.2.1" 790 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" 791 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== 792 | 793 | safe-compare@^1.1.4: 794 | version "1.1.4" 795 | resolved "https://registry.yarnpkg.com/safe-compare/-/safe-compare-1.1.4.tgz#5e0128538a82820e2e9250cd78e45da6786ba593" 796 | integrity sha512-b9wZ986HHCo/HbKrRpBJb2kqXMK9CEWIE1egeEvZsYn69ay3kdfl9nG3RyOcR+jInTDf7a86WQ1d4VJX7goSSQ== 797 | dependencies: 798 | buffer-alloc "^1.2.0" 799 | 800 | "safer-buffer@>= 2.1.2 < 3": 801 | version "2.1.2" 802 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 803 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== 804 | 805 | sandwich-stream@^2.0.2: 806 | version "2.0.2" 807 | resolved "https://registry.yarnpkg.com/sandwich-stream/-/sandwich-stream-2.0.2.tgz#6d1feb6cf7e9fe9fadb41513459a72c2e84000fa" 808 | integrity sha512-jLYV0DORrzY3xaz/S9ydJL6Iz7essZeAfnAavsJ+zsJGZ1MOnsS52yRjU3uF3pJa/lla7+wisp//fxOwOH8SKQ== 809 | 810 | send@0.17.2: 811 | version "0.17.2" 812 | resolved "https://registry.yarnpkg.com/send/-/send-0.17.2.tgz#926622f76601c41808012c8bf1688fe3906f7820" 813 | integrity sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww== 814 | dependencies: 815 | debug "2.6.9" 816 | depd "~1.1.2" 817 | destroy "~1.0.4" 818 | encodeurl "~1.0.2" 819 | escape-html "~1.0.3" 820 | etag "~1.8.1" 821 | fresh "0.5.2" 822 | http-errors "1.8.1" 823 | mime "1.6.0" 824 | ms "2.1.3" 825 | on-finished "~2.3.0" 826 | range-parser "~1.2.1" 827 | statuses "~1.5.0" 828 | 829 | serve-static@1.14.2: 830 | version "1.14.2" 831 | resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.2.tgz#722d6294b1d62626d41b43a013ece4598d292bfa" 832 | integrity sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ== 833 | dependencies: 834 | encodeurl "~1.0.2" 835 | escape-html "~1.0.3" 836 | parseurl "~1.3.3" 837 | send "0.17.2" 838 | 839 | setprototypeof@1.2.0: 840 | version "1.2.0" 841 | resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" 842 | integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== 843 | 844 | source-map-support@^0.5.12, source-map-support@^0.5.17: 845 | version "0.5.21" 846 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" 847 | integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== 848 | dependencies: 849 | buffer-from "^1.0.0" 850 | source-map "^0.6.0" 851 | 852 | source-map@^0.6.0: 853 | version "0.6.1" 854 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 855 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== 856 | 857 | sqlstring@2.3.1: 858 | version "2.3.1" 859 | resolved "https://registry.yarnpkg.com/sqlstring/-/sqlstring-2.3.1.tgz#475393ff9e91479aea62dcaf0ca3d14983a7fb40" 860 | integrity sha1-R1OT/56RR5rqYtyvDKPRSYOn+0A= 861 | 862 | "statuses@>= 1.5.0 < 2", statuses@~1.5.0: 863 | version "1.5.0" 864 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" 865 | integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= 866 | 867 | string_decoder@~1.1.1: 868 | version "1.1.1" 869 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" 870 | integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== 871 | dependencies: 872 | safe-buffer "~5.1.0" 873 | 874 | strip-bom@^3.0.0: 875 | version "3.0.0" 876 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" 877 | integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= 878 | 879 | strip-json-comments@^2.0.0: 880 | version "2.0.1" 881 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" 882 | integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= 883 | 884 | supports-preserve-symlinks-flag@^1.0.0: 885 | version "1.0.0" 886 | resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" 887 | integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== 888 | 889 | telegraf@^4.7.0: 890 | version "4.7.0" 891 | resolved "https://registry.yarnpkg.com/telegraf/-/telegraf-4.7.0.tgz#6ee8a8f98900a67472f1ca935c0aba3e8fa49f05" 892 | integrity sha512-rspH4kiVHE1zpnyQvlGFj+Tzu7zN02gSOcdLUayvnkaTwww2E6xBkwne+DKkDPdaRhvQ61J+dcVhLQv9fL+FsQ== 893 | dependencies: 894 | abort-controller "^3.0.0" 895 | debug "^4.3.3" 896 | minimist "^1.2.5" 897 | module-alias "^2.2.2" 898 | node-fetch "^2.6.7" 899 | p-timeout "^4.1.0" 900 | safe-compare "^1.1.4" 901 | sandwich-stream "^2.0.2" 902 | typegram "^3.8.0" 903 | 904 | to-regex-range@^5.0.1: 905 | version "5.0.1" 906 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 907 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 908 | dependencies: 909 | is-number "^7.0.0" 910 | 911 | toidentifier@1.0.1: 912 | version "1.0.1" 913 | resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" 914 | integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== 915 | 916 | tr46@~0.0.3: 917 | version "0.0.3" 918 | resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" 919 | integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o= 920 | 921 | tree-kill@^1.2.2: 922 | version "1.2.2" 923 | resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" 924 | integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== 925 | 926 | ts-node-dev@^1.1.8: 927 | version "1.1.8" 928 | resolved "https://registry.yarnpkg.com/ts-node-dev/-/ts-node-dev-1.1.8.tgz#95520d8ab9d45fffa854d6668e2f8f9286241066" 929 | integrity sha512-Q/m3vEwzYwLZKmV6/0VlFxcZzVV/xcgOt+Tx/VjaaRHyiBcFlV0541yrT09QjzzCxlDZ34OzKjrFAynlmtflEg== 930 | dependencies: 931 | chokidar "^3.5.1" 932 | dynamic-dedupe "^0.3.0" 933 | minimist "^1.2.5" 934 | mkdirp "^1.0.4" 935 | resolve "^1.0.0" 936 | rimraf "^2.6.1" 937 | source-map-support "^0.5.12" 938 | tree-kill "^1.2.2" 939 | ts-node "^9.0.0" 940 | tsconfig "^7.0.0" 941 | 942 | ts-node@^9.0.0: 943 | version "9.1.1" 944 | resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-9.1.1.tgz#51a9a450a3e959401bda5f004a72d54b936d376d" 945 | integrity sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg== 946 | dependencies: 947 | arg "^4.1.0" 948 | create-require "^1.1.0" 949 | diff "^4.0.1" 950 | make-error "^1.1.1" 951 | source-map-support "^0.5.17" 952 | yn "3.1.1" 953 | 954 | tsconfig@^7.0.0: 955 | version "7.0.0" 956 | resolved "https://registry.yarnpkg.com/tsconfig/-/tsconfig-7.0.0.tgz#84538875a4dc216e5c4a5432b3a4dec3d54e91b7" 957 | integrity sha512-vZXmzPrL+EmC4T/4rVlT2jNVMWCi/O4DIiSj3UHg1OE5kCKbk4mfrXc6dZksLgRM/TZlKnousKH9bbTazUWRRw== 958 | dependencies: 959 | "@types/strip-bom" "^3.0.0" 960 | "@types/strip-json-comments" "0.0.30" 961 | strip-bom "^3.0.0" 962 | strip-json-comments "^2.0.0" 963 | 964 | type-is@~1.6.18: 965 | version "1.6.18" 966 | resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" 967 | integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== 968 | dependencies: 969 | media-typer "0.3.0" 970 | mime-types "~2.1.24" 971 | 972 | typegram@^3.8.0: 973 | version "3.8.0" 974 | resolved "https://registry.yarnpkg.com/typegram/-/typegram-3.8.0.tgz#6f09e1f3d27bb4659dcf6e294603550584c7b39c" 975 | integrity sha512-MdlbWu0HfmgFJf4+xj6eqGYuanV2LJxBYTzLrD0kTV+woQ5dxDD2k8UVVjYnbBGkAagAyxzQevPiFZRWLFHSBw== 976 | 977 | typescript@^4.6.3: 978 | version "4.6.3" 979 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.6.3.tgz#eefeafa6afdd31d725584c67a0eaba80f6fc6c6c" 980 | integrity sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw== 981 | 982 | unpipe@1.0.0, unpipe@~1.0.0: 983 | version "1.0.0" 984 | resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" 985 | integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= 986 | 987 | util-deprecate@~1.0.1: 988 | version "1.0.2" 989 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 990 | integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= 991 | 992 | utils-merge@1.0.1: 993 | version "1.0.1" 994 | resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" 995 | integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= 996 | 997 | vary@^1, vary@~1.1.2: 998 | version "1.1.2" 999 | resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" 1000 | integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= 1001 | 1002 | webidl-conversions@^3.0.0: 1003 | version "3.0.1" 1004 | resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" 1005 | integrity sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE= 1006 | 1007 | whatwg-url@^5.0.0: 1008 | version "5.0.0" 1009 | resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" 1010 | integrity sha1-lmRU6HZUYuN2RNNib2dCzotwll0= 1011 | dependencies: 1012 | tr46 "~0.0.3" 1013 | webidl-conversions "^3.0.0" 1014 | 1015 | wrappy@1: 1016 | version "1.0.2" 1017 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 1018 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 1019 | 1020 | xtend@^4.0.0: 1021 | version "4.0.2" 1022 | resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" 1023 | integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== 1024 | 1025 | yn@3.1.1: 1026 | version "3.1.1" 1027 | resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" 1028 | integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== 1029 | --------------------------------------------------------------------------------