添加TGBot前端玩家注册
continuous-integration/drone/push Build is failing
Details
continuous-integration/drone/push Build is failing
Details
This commit is contained in:
parent
5f5918e830
commit
4d448d876e
|
@ -20,11 +20,11 @@
|
|||
## 开发计划:
|
||||
|
||||
#### Beta 1.0:
|
||||
- [ ] 基础世界树 API
|
||||
- [x] 基础世界树 API
|
||||
+ [x] /authserver
|
||||
+ [x] /sessionserver
|
||||
+ [x] 测试
|
||||
+ [ ] /api
|
||||
+ [x] /api
|
||||
- [ ] 进阶 API
|
||||
- [ ] 皮肤上传和安全检查
|
||||
+ [x] 皮肤数据的RSA签名
|
||||
|
@ -34,6 +34,9 @@
|
|||
- [x] 服务器状态接口
|
||||
- [x] authlib-injector 元数据接口
|
||||
- [ ] TGbot前端
|
||||
+ [x] 注册
|
||||
+ [ ] 用户查询、改密等
|
||||
+ [ ] 管理员指令
|
||||
|
||||
#### Release 1.0
|
||||
- [ ] 单元测试
|
||||
|
|
|
@ -13,11 +13,13 @@
|
|||
"shelljs.exec": "^1.1.8"
|
||||
},
|
||||
"dependencies": {
|
||||
"axios": "^0.27.2",
|
||||
"fastify": "^3.29.0",
|
||||
"hex-to-uuid": "^1.1.1",
|
||||
"mongoose": "^6.3.1",
|
||||
"pino-pretty": "^7.6.1",
|
||||
"pngjs": "^6.0.0"
|
||||
"pngjs": "^6.0.0",
|
||||
"telegraf": "^4.8.2"
|
||||
},
|
||||
"scripts": {
|
||||
"dev": "nodemon --watch src/index.js",
|
||||
|
|
|
@ -39,6 +39,9 @@ export const config = {
|
|||
preHooks: (fastify) => {}, // 在这里添加自定义hook
|
||||
preRouting: (fastify) => {}, // 在这里添加自定义路由
|
||||
postRouting: (fastify) => {}, // 我也不知道你在这里写了有啥用...
|
||||
},
|
||||
telegram: {
|
||||
token: '5161996862:AAHY79HdmI9A9Xoumv4E8hzi5UUrY38n5h0',
|
||||
}
|
||||
}
|
||||
|
||||
|
|
19
src/index.js
19
src/index.js
|
@ -8,6 +8,8 @@ import * as AdvancedRoutings from './routes/advanced.js'
|
|||
import * as APIRoutings from './routes/api.js'
|
||||
import { config } from './config.js'
|
||||
import { readFileSync } from 'fs'
|
||||
import { Scenes, session, Telegraf } from 'telegraf'
|
||||
import { allScenes, registerAllPlayerCommands } from './telegram/player-commands.js';
|
||||
|
||||
export const server = fastify({
|
||||
logger: {
|
||||
|
@ -16,6 +18,8 @@ export const server = fastify({
|
|||
}
|
||||
})
|
||||
|
||||
export const telegraf = new Telegraf(config.telegram.token)
|
||||
|
||||
export const setup = async () => {
|
||||
const mongooseClient = await mongoose.connect(config.database.url)
|
||||
const models = registerModels(mongooseClient)
|
||||
|
@ -61,15 +65,27 @@ export const setup = async () => {
|
|||
cape: 'assets.lama.icu/textures/cape/default.png'
|
||||
},
|
||||
registerDate: Date.now(),
|
||||
permissions: [{ node: 'login', allowed: true, duration: 0, eternal: true, startDate: Date.now(), highPriority: false }]
|
||||
permissions: [{ node: 'login', allowed: true, duration: 0, eternal: true, startDate: Date.now(), highPriority: false }],
|
||||
telegramBind: {
|
||||
username: 'test',
|
||||
verified: true,
|
||||
}
|
||||
}).save()
|
||||
}
|
||||
|
||||
const stage = new Scenes.Stage([ ...allScenes ])
|
||||
telegraf.use(session())
|
||||
telegraf.use(stage.middleware())
|
||||
|
||||
registerAllPlayerCommands()
|
||||
}
|
||||
|
||||
const launch = async () => {
|
||||
process.on('SIGINT', () => {
|
||||
new Promise(shutdown)
|
||||
})
|
||||
|
||||
telegraf.launch()
|
||||
|
||||
await server.listen(config.server.port, config.server.url)
|
||||
|
||||
|
@ -78,6 +94,7 @@ const launch = async () => {
|
|||
|
||||
export const shutdown = async () => {
|
||||
server.close()
|
||||
telegraf.stop()
|
||||
mongoose.disconnect()
|
||||
}
|
||||
|
||||
|
|
|
@ -1,9 +1,11 @@
|
|||
import { TokenSchema } from "./token.js";
|
||||
import { PlayerSchema } from "./player.js";
|
||||
import { InviteTokenSchema } from "./invite.js";
|
||||
|
||||
export function registerModels(mongoose) {
|
||||
return {
|
||||
Token: mongoose.model("Token", TokenSchema),
|
||||
Player: mongoose.model("Player", PlayerSchema),
|
||||
Invitation: mongoose.model('Invitation', InviteTokenSchema)
|
||||
}
|
||||
}
|
|
@ -0,0 +1,9 @@
|
|||
import mongoose from 'mongoose'
|
||||
const { Schema } = mongoose
|
||||
|
||||
export const InviteTokenSchema = new Schema({
|
||||
by: String, // Telegram username
|
||||
token: String
|
||||
})
|
||||
|
||||
// { from: string, id: number, sign: string }
|
|
@ -14,6 +14,10 @@ export const PlayerSchema = new Schema({
|
|||
},
|
||||
registerDate: Number,
|
||||
permissions: [{ node: String, allowed: Boolean, duration: Number, startDate: Number, highPriority: Boolean }], // ban -> true
|
||||
telegramBind: {
|
||||
username: String,
|
||||
verified: Boolean,
|
||||
}
|
||||
})
|
||||
|
||||
export const PlayerSeriliazationSchema = {
|
||||
|
|
|
@ -78,6 +78,14 @@ export const authenticate = {
|
|||
})
|
||||
}
|
||||
|
||||
if(!player.telegramBind || !player.telegramBind.verified) {
|
||||
return await rep.code(401).send({
|
||||
error: "Unauthorized",
|
||||
errorMessage: "未绑定 Telegram 账号或账号验证未通过,登录请求已禁止",
|
||||
cause: "未绑定 Telegram 账号或账号验证未通,登录请求已禁止"
|
||||
})
|
||||
}
|
||||
|
||||
if(!clientToken) {
|
||||
clientToken = createHash('sha256').update( "" + Math.random() * 1.048596).digest().toString('hex')
|
||||
}
|
||||
|
|
|
@ -0,0 +1,204 @@
|
|||
import { Scenes } from 'telegraf'
|
||||
import { telegraf, server } from '../index.js'
|
||||
import { createHash } from 'crypto'
|
||||
import axios from 'axios'
|
||||
import { uuid } from '../generator.js'
|
||||
|
||||
export const registerAllPlayerCommands = async () => {
|
||||
await register()
|
||||
}
|
||||
|
||||
|
||||
|
||||
const defaultSkin = "http://textures.minecraft.net/texture/ddb8684e59f771666bde5f411fcb2e495c452f2ecabc31981bc132ac71bdd394"
|
||||
|
||||
const registerWizard = new Scenes.WizardScene('REGISTRIATION_WIZARD',
|
||||
(ctx) => {
|
||||
ctx.reply('欢迎来到注册流程,如果想中途取消使用指令 "/cancle" ,请先告诉我您的用户名')
|
||||
ctx.scene.session.data = {
|
||||
username: ctx.from.username
|
||||
}
|
||||
return ctx.wizard.next()
|
||||
},
|
||||
(ctx) => {
|
||||
if(!ctx.message.text || ctx.message.text < 3) {
|
||||
return ctx.reply('用户名不能少于 3 个字符!请重新输入')
|
||||
}
|
||||
|
||||
const username = ctx.from.username === 'Lapis_Apple' ? 'LSP' : ctx.message.text
|
||||
ctx.reply(`请设置玩家 ${username} 的密码`)
|
||||
ctx.scene.session.data.playerUsername = username
|
||||
|
||||
return ctx.wizard.next()
|
||||
},
|
||||
async (ctx) => {
|
||||
if(!ctx.message.text || ctx.message.text < 6) {
|
||||
return ctx.reply('密码不能少于 6 个字符!请重新输入')
|
||||
}
|
||||
|
||||
ctx.scene.session.data.password = createHash('sha256').update(ctx.message.text).digest('hex')
|
||||
|
||||
const duplicated = await server.models.Player.findOne({ password: ctx.scene.session.data.password })
|
||||
if(duplicated) {
|
||||
return ctx.reply(`该密码hash为:${ctx.scene.session.data.password.substring(3,10)} 已检测到数据库中存在重复密码(${JSON.stringify({d: duplicated})}),为了安全请重新输入`)
|
||||
}
|
||||
|
||||
ctx.reply(`该密码hash为:${ctx.scene.session.data.password.substring(3,10)} 请确认是否正确,若正确请输入 'confirm'`)
|
||||
|
||||
return ctx.wizard.next()
|
||||
},
|
||||
(ctx) => {
|
||||
if(!ctx.message.text || ctx.message.text !== 'confirm') {
|
||||
return ctx.reply('请输入 "confirm" 确认您的密码,或者输入 /cancle 取消注册')
|
||||
}
|
||||
|
||||
ctx.replyWithMarkdownV2("请输入您的邮箱。**注意:我们并不会向您发送注册确认,邮箱仅作为符合 authlib\\-injector 登陆规范在登陆时使用**")
|
||||
return ctx.wizard.next()
|
||||
},
|
||||
(ctx) => {
|
||||
if(!ctx.message.text || ctx.message.text.length < 6) {
|
||||
return ctx.reply('邮箱不能少于 6 个字符!请重新输入')
|
||||
}
|
||||
|
||||
ctx.scene.session.data.email = ctx.message.text
|
||||
ctx.reply(`是否需要同步同用户名正版玩家的皮肤和披风? 输入 'yes' 或者 'no'`)
|
||||
return ctx.wizard.next()
|
||||
},
|
||||
(ctx) => {
|
||||
if(!ctx.message.text || ctx.message.text !== 'yes' && ctx.message.text !== 'no') {
|
||||
return ctx.reply('请输入 "yes" 或者 "no"')
|
||||
}
|
||||
|
||||
ctx.scene.session.data.sync = ctx.message.text === 'yes'
|
||||
ctx.reply(`请问您是否有注册邀请码? 有请输入邀请码,没有输入 'skip'`)
|
||||
return ctx.wizard.next()
|
||||
},
|
||||
(ctx) => {
|
||||
if(!ctx.message.text || ctx.message.text === 'skip') {
|
||||
ctx.scene.session.data.inviteCode = null
|
||||
} else {
|
||||
if(!ctx.message.text || ctx.message.text.length < 6) {
|
||||
return ctx.reply('邀请码不能少于 6 个字符!请重新输入')
|
||||
}
|
||||
ctx.scene.session.data.inviteCode = ctx.message.text
|
||||
}
|
||||
|
||||
ctx.reply(
|
||||
`好的现在来确认一下信息:\n`+
|
||||
`用户名:${ctx.scene.session.data.playerUsername}\n`+
|
||||
`密码:${ctx.scene.session.data.password.substring(3,10)}\n`+
|
||||
`邮箱:${ctx.scene.session.data.email}\n`+
|
||||
`同步皮肤和披风:${ctx.scene.session.data.sync ? '是' : '否'}\n`+
|
||||
`邀请码:${ctx.scene.session.data.inviteCode ?? '无'}\n`+
|
||||
`是否确认? 输入 'yes' 或者 'no'`
|
||||
)
|
||||
return ctx.wizard.next()
|
||||
},
|
||||
async (ctx) => {
|
||||
if(!ctx.message.text || ctx.message.text !== 'yes' && ctx.message.text !== 'no') {
|
||||
return ctx.reply('请输入 "yes" 或者 "no"')
|
||||
}
|
||||
|
||||
if(ctx.message.text === 'no') {
|
||||
ctx.reply("已取消注册")
|
||||
return ctx.scene.leave()
|
||||
} else {
|
||||
let message = await ctx.reply("正在注册...")
|
||||
|
||||
let skin = defaultSkin
|
||||
let cape = ""
|
||||
|
||||
if(ctx.scene.session.data.sync) {
|
||||
try{
|
||||
message = await telegraf.telegram.editMessageText(ctx.chat.id, message.message_id, null, '获取对应正版玩家皮肤中...')
|
||||
const uuid = await axios({
|
||||
method: 'GET',
|
||||
url: "https://api.mojang.com/users/profiles/minecraft/" + ctx.scene.session.data.playerUsername,
|
||||
})
|
||||
|
||||
if(uuid.status === 400) {
|
||||
message = await telegraf.telegram.editMessageText(ctx.chat.id, message.message_id, null, '对应正版玩家不存在!已跳过皮肤获取')
|
||||
} else {
|
||||
const skinResponse = await axios({
|
||||
method: 'GET',
|
||||
url: `https://sessionserver.mojang.com/session/minecraft/profile/${uuid.data.id}`,
|
||||
responseType: 'json',
|
||||
})
|
||||
|
||||
const skinData = JSON.parse(Buffer.from(skinResponse.data.properties[0].value, 'base64').toString())
|
||||
skin = skinData.textures.SKIN.url
|
||||
cape = skinData.textures.CAPE?.url
|
||||
|
||||
message = await telegraf.telegram.editMessageText(ctx.chat.id, message.message_id, null, '成功同步皮肤和披风')
|
||||
}
|
||||
} catch(err) {
|
||||
server.log.info(err.toJSON())
|
||||
}
|
||||
}
|
||||
|
||||
let verified = false
|
||||
if(ctx.scene.session.data.inviteCode) {
|
||||
await telegraf.telegram.editMessageText(ctx.chat.id, message.message_id, null, message.text + '\n验证邀请码中...')
|
||||
const invi = server.models.Invitation.findOne({
|
||||
token: ctx.scene.session.data.inviteCode
|
||||
})
|
||||
if(invi) {
|
||||
message = await telegraf.telegram.editMessageText(ctx.chat.id, message.message_id, null, message.text + '\n邀请码验证成功!邀请人: ' + invi.by)
|
||||
verified = true
|
||||
} else {
|
||||
message = await telegraf.telegram.editMessageText(ctx.chat.id, message.message_id, null, message.text + '\n邀请码无效! 已跳过')
|
||||
}
|
||||
}
|
||||
|
||||
const player = new server.models.Player({
|
||||
uuid: uuid("LSP-yggdrasil:" + ctx.scene.session.data.playerUsername),
|
||||
username: ctx.scene.session.data.playerUsername,
|
||||
password: ctx.scene.session.data.password,
|
||||
email: ctx.scene.session.data.email,
|
||||
textures: {
|
||||
skin: skin,
|
||||
cape: cape
|
||||
},
|
||||
registerDate: Date.now(),
|
||||
permissions: [{ node: 'login', allowed: true, duration: 0, eternal: true, startDate: Date.now(), highPriority: false }],
|
||||
telegramBind: {
|
||||
username: ctx.from.username,
|
||||
verified: verified
|
||||
}
|
||||
})
|
||||
|
||||
player.save()
|
||||
|
||||
message = await telegraf.telegram.editMessageText(ctx.chat.id, message.message_id, null, message.text + '\n注册成功!')
|
||||
|
||||
ctx.scene.leave()
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
export const allScenes = [
|
||||
registerWizard,
|
||||
]
|
||||
|
||||
const register = async () => {
|
||||
registerWizard.command('cancel', (ctx) => {
|
||||
ctx.reply("注册已取消")
|
||||
return ctx.scene.leave()
|
||||
})
|
||||
|
||||
telegraf.command('register', async (ctx) => {
|
||||
const username = ctx.from.username
|
||||
if(!username) {
|
||||
return ctx.reply("请设置 Telegram 用户名!")
|
||||
}
|
||||
|
||||
const player = await server.models.Player.findOne({ "telegramBind.username": username })
|
||||
server.log.info(player)
|
||||
if(!player) {
|
||||
return ctx.scene.enter('REGISTRIATION_WIZARD')
|
||||
} else {
|
||||
return ctx.reply(`您已绑定用户: ${player.username} (${player.uuid})`)
|
||||
}
|
||||
|
||||
})
|
||||
}
|
152
yarn.lock
152
yarn.lock
|
@ -671,6 +671,13 @@ abbrev@1:
|
|||
resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
|
||||
integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==
|
||||
|
||||
abort-controller@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392"
|
||||
integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==
|
||||
dependencies:
|
||||
event-target-shim "^5.0.0"
|
||||
|
||||
abstract-logging@^2.0.0:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/abstract-logging/-/abstract-logging-2.0.1.tgz#6b0c371df212db7129b57d2e7fcf282b8bf1c839"
|
||||
|
@ -764,6 +771,11 @@ args@^5.0.1:
|
|||
leven "2.1.0"
|
||||
mri "1.1.4"
|
||||
|
||||
asynckit@^0.4.0:
|
||||
version "0.4.0"
|
||||
resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
|
||||
integrity sha1-x57Zf380y48robyXkLzDZkdLS3k=
|
||||
|
||||
atomic-sleep@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/atomic-sleep/-/atomic-sleep-1.0.0.tgz#eb85b77a601fc932cfe432c5acd364a9e2c9075b"
|
||||
|
@ -779,6 +791,14 @@ avvio@^7.1.2:
|
|||
fastq "^1.6.1"
|
||||
queue-microtask "^1.1.2"
|
||||
|
||||
axios@^0.27.2:
|
||||
version "0.27.2"
|
||||
resolved "https://registry.yarnpkg.com/axios/-/axios-0.27.2.tgz#207658cc8621606e586c85db4b41a750e756d972"
|
||||
integrity sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==
|
||||
dependencies:
|
||||
follow-redirects "^1.14.9"
|
||||
form-data "^4.0.0"
|
||||
|
||||
babel-jest@^28.0.3:
|
||||
version "28.0.3"
|
||||
resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-28.0.3.tgz#843dc170da5b9671d4054ada9fdcd28f85f92a6e"
|
||||
|
@ -908,6 +928,24 @@ bson@^4.6.2:
|
|||
dependencies:
|
||||
buffer "^5.6.0"
|
||||
|
||||
buffer-alloc-unsafe@^1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0"
|
||||
integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==
|
||||
|
||||
buffer-alloc@^1.2.0:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec"
|
||||
integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==
|
||||
dependencies:
|
||||
buffer-alloc-unsafe "^1.1.0"
|
||||
buffer-fill "^1.0.0"
|
||||
|
||||
buffer-fill@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c"
|
||||
integrity sha1-+PeLdniYiO858gXNY39o5wISKyw=
|
||||
|
||||
buffer-from@^1.0.0:
|
||||
version "1.1.2"
|
||||
resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5"
|
||||
|
@ -1071,6 +1109,13 @@ colorette@^2.0.7:
|
|||
resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.16.tgz#713b9af84fdb000139f04546bd4a93f62a5085da"
|
||||
integrity sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==
|
||||
|
||||
combined-stream@^1.0.8:
|
||||
version "1.0.8"
|
||||
resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
|
||||
integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
|
||||
dependencies:
|
||||
delayed-stream "~1.0.0"
|
||||
|
||||
concat-map@0.0.1:
|
||||
version "0.0.1"
|
||||
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
|
||||
|
@ -1126,7 +1171,7 @@ dateformat@^4.6.3:
|
|||
resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-4.6.3.tgz#556fa6497e5217fedb78821424f8a1c22fa3f4b5"
|
||||
integrity sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==
|
||||
|
||||
debug@4.x, debug@^4.0.0, debug@^4.1.0, debug@^4.1.1:
|
||||
debug@4.x, debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.3:
|
||||
version "4.3.4"
|
||||
resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
|
||||
integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
|
||||
|
@ -1167,6 +1212,11 @@ defer-to-connect@^1.0.1:
|
|||
resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591"
|
||||
integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==
|
||||
|
||||
delayed-stream@~1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
|
||||
integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk=
|
||||
|
||||
denque@^2.0.1:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/denque/-/denque-2.0.1.tgz#bcef4c1b80dc32efe97515744f21a4229ab8934a"
|
||||
|
@ -1384,6 +1434,11 @@ esprima@^4.0.0:
|
|||
resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
|
||||
integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
|
||||
|
||||
event-target-shim@^5.0.0:
|
||||
version "5.0.1"
|
||||
resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789"
|
||||
integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==
|
||||
|
||||
execa@^5.0.0:
|
||||
version "5.1.1"
|
||||
resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd"
|
||||
|
@ -1515,6 +1570,20 @@ flatstr@^1.0.12:
|
|||
resolved "https://registry.yarnpkg.com/flatstr/-/flatstr-1.0.12.tgz#c2ba6a08173edbb6c9640e3055b95e287ceb5931"
|
||||
integrity sha512-4zPxDyhCyiN2wIAtSLI6gc82/EjqZc1onI4Mz/l0pWrAlsSfYH/2ZIcU+e3oA2wDwbzIWNKwa23F8rh6+DRWkw==
|
||||
|
||||
follow-redirects@^1.14.9:
|
||||
version "1.15.0"
|
||||
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.0.tgz#06441868281c86d0dda4ad8bdaead2d02dca89d4"
|
||||
integrity sha512-aExlJShTV4qOUOL7yF1U5tvLCB0xQuudbf6toyYA0E/acBNw71mvjFTnLaRp50aQaYocMR0a/RMMBIHeZnGyjQ==
|
||||
|
||||
form-data@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452"
|
||||
integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==
|
||||
dependencies:
|
||||
asynckit "^0.4.0"
|
||||
combined-stream "^1.0.8"
|
||||
mime-types "^2.1.12"
|
||||
|
||||
forwarded@0.2.0:
|
||||
version "0.2.0"
|
||||
resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811"
|
||||
|
@ -2376,6 +2445,18 @@ micromatch@^4.0.4:
|
|||
braces "^3.0.2"
|
||||
picomatch "^2.3.1"
|
||||
|
||||
mime-db@1.52.0:
|
||||
version "1.52.0"
|
||||
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70"
|
||||
integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
|
||||
|
||||
mime-types@^2.1.12:
|
||||
version "2.1.35"
|
||||
resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a"
|
||||
integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
|
||||
dependencies:
|
||||
mime-db "1.52.0"
|
||||
|
||||
mimic-fn@^2.1.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
|
||||
|
@ -2393,11 +2474,16 @@ minimatch@^3.0.4:
|
|||
dependencies:
|
||||
brace-expansion "^1.1.7"
|
||||
|
||||
minimist@^1.2.0:
|
||||
minimist@^1.2.0, minimist@^1.2.6:
|
||||
version "1.2.6"
|
||||
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44"
|
||||
integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==
|
||||
|
||||
module-alias@^2.2.2:
|
||||
version "2.2.2"
|
||||
resolved "https://registry.yarnpkg.com/module-alias/-/module-alias-2.2.2.tgz#151cdcecc24e25739ff0aa6e51e1c5716974c0e0"
|
||||
integrity sha512-A/78XjoX2EmNvppVWEhM2oGk3x4lLxnkEA4jTbaK97QKSDjkIoOsKQlfylt/d3kKKi596Qy3NP5XrXJ6fZIC9Q==
|
||||
|
||||
mongodb-connection-string-url@^2.5.2:
|
||||
version "2.5.2"
|
||||
resolved "https://registry.yarnpkg.com/mongodb-connection-string-url/-/mongodb-connection-string-url-2.5.2.tgz#f075c8d529e8d3916386018b8a396aed4f16e5ed"
|
||||
|
@ -2463,6 +2549,13 @@ natural-compare@^1.4.0:
|
|||
resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
|
||||
integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=
|
||||
|
||||
node-fetch@^2.6.7:
|
||||
version "2.6.7"
|
||||
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad"
|
||||
integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==
|
||||
dependencies:
|
||||
whatwg-url "^5.0.0"
|
||||
|
||||
node-int64@^0.4.0:
|
||||
version "0.4.0"
|
||||
resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b"
|
||||
|
@ -2551,6 +2644,11 @@ p-locate@^4.1.0:
|
|||
dependencies:
|
||||
p-limit "^2.2.0"
|
||||
|
||||
p-timeout@^4.1.0:
|
||||
version "4.1.0"
|
||||
resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-4.1.0.tgz#788253c0452ab0ffecf18a62dff94ff1bd09ca0a"
|
||||
integrity sha512-+/wmHtzJuWii1sXn3HCuH/FTwGhrp4tmJTxSKJbfS+vkipci6osxXM5mY0jUiRzWKMTgUT8l7HFbeSwZAynqHw==
|
||||
|
||||
p-try@^2.0.0:
|
||||
version "2.2.0"
|
||||
resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
|
||||
|
@ -2859,6 +2957,13 @@ safe-buffer@~5.2.0:
|
|||
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
|
||||
integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
|
||||
|
||||
safe-compare@^1.1.4:
|
||||
version "1.1.4"
|
||||
resolved "https://registry.yarnpkg.com/safe-compare/-/safe-compare-1.1.4.tgz#5e0128538a82820e2e9250cd78e45da6786ba593"
|
||||
integrity sha512-b9wZ986HHCo/HbKrRpBJb2kqXMK9CEWIE1egeEvZsYn69ay3kdfl9nG3RyOcR+jInTDf7a86WQ1d4VJX7goSSQ==
|
||||
dependencies:
|
||||
buffer-alloc "^1.2.0"
|
||||
|
||||
safe-regex2@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/safe-regex2/-/safe-regex2-2.0.0.tgz#b287524c397c7a2994470367e0185e1916b1f5b9"
|
||||
|
@ -2866,6 +2971,11 @@ safe-regex2@^2.0.0:
|
|||
dependencies:
|
||||
ret "~0.2.0"
|
||||
|
||||
sandwich-stream@^2.0.2:
|
||||
version "2.0.2"
|
||||
resolved "https://registry.yarnpkg.com/sandwich-stream/-/sandwich-stream-2.0.2.tgz#6d1feb6cf7e9fe9fadb41513459a72c2e84000fa"
|
||||
integrity sha512-jLYV0DORrzY3xaz/S9ydJL6Iz7essZeAfnAavsJ+zsJGZ1MOnsS52yRjU3uF3pJa/lla7+wisp//fxOwOH8SKQ==
|
||||
|
||||
saslprep@^1.0.3:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.yarnpkg.com/saslprep/-/saslprep-1.0.3.tgz#4c02f946b56cf54297e347ba1093e7acac4cf226"
|
||||
|
@ -3109,6 +3219,21 @@ supports-preserve-symlinks-flag@^1.0.0:
|
|||
resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
|
||||
integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
|
||||
|
||||
telegraf@^4.8.2:
|
||||
version "4.8.2"
|
||||
resolved "https://registry.yarnpkg.com/telegraf/-/telegraf-4.8.2.tgz#6357102712be3d2472b6d5afc099be86e677ccb4"
|
||||
integrity sha512-FFxdhFVnoAzxK6x6980rDPqadLI6AWjKhYe/dwkzd29+hmzVPzOQBKRujjkv4iVIfIJGt2QbuNtJUBukdDwBLg==
|
||||
dependencies:
|
||||
abort-controller "^3.0.0"
|
||||
debug "^4.3.3"
|
||||
minimist "^1.2.6"
|
||||
module-alias "^2.2.2"
|
||||
node-fetch "^2.6.7"
|
||||
p-timeout "^4.1.0"
|
||||
safe-compare "^1.1.4"
|
||||
sandwich-stream "^2.0.2"
|
||||
typegram "^3.9.0"
|
||||
|
||||
terminal-link@^2.0.0:
|
||||
version "2.1.1"
|
||||
resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994"
|
||||
|
@ -3172,6 +3297,11 @@ tr46@^3.0.0:
|
|||
dependencies:
|
||||
punycode "^2.1.1"
|
||||
|
||||
tr46@~0.0.3:
|
||||
version "0.0.3"
|
||||
resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
|
||||
integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=
|
||||
|
||||
type-detect@4.0.8:
|
||||
version "4.0.8"
|
||||
resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c"
|
||||
|
@ -3194,6 +3324,11 @@ typedarray-to-buffer@^3.1.5:
|
|||
dependencies:
|
||||
is-typedarray "^1.0.0"
|
||||
|
||||
typegram@^3.9.0:
|
||||
version "3.9.1"
|
||||
resolved "https://registry.yarnpkg.com/typegram/-/typegram-3.9.1.tgz#b4ebfc83579ab01e8e95391e8f10e84abe265cdd"
|
||||
integrity sha512-vfFr2o0iX+amnUj1h/0c49y8bCvGwt6DgdmTVD732Kf81XG26vgFwNWj+33Ol+xORC7m0cqU2hPYGRtcGinwZg==
|
||||
|
||||
undefsafe@^2.0.5:
|
||||
version "2.0.5"
|
||||
resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.5.tgz#38733b9327bdcd226db889fb723a6efd162e6e2c"
|
||||
|
@ -3271,6 +3406,11 @@ walker@^1.0.7:
|
|||
dependencies:
|
||||
makeerror "1.0.12"
|
||||
|
||||
webidl-conversions@^3.0.0:
|
||||
version "3.0.1"
|
||||
resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"
|
||||
integrity sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=
|
||||
|
||||
webidl-conversions@^7.0.0:
|
||||
version "7.0.0"
|
||||
resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a"
|
||||
|
@ -3284,6 +3424,14 @@ whatwg-url@^11.0.0:
|
|||
tr46 "^3.0.0"
|
||||
webidl-conversions "^7.0.0"
|
||||
|
||||
whatwg-url@^5.0.0:
|
||||
version "5.0.0"
|
||||
resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d"
|
||||
integrity sha1-lmRU6HZUYuN2RNNib2dCzotwll0=
|
||||
dependencies:
|
||||
tr46 "~0.0.3"
|
||||
webidl-conversions "^3.0.0"
|
||||
|
||||
which@^2.0.1:
|
||||
version "2.0.2"
|
||||
resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
|
||||
|
|
Loading…
Reference in New Issue