lsp-yggdrasil/src/index.js

119 lines
4.0 KiB
JavaScript
Raw Normal View History

2022-05-02 15:12:46 +00:00
import { fastify } from 'fastify'
import { mongoose } from 'mongoose'
import { registerModels } from './models/index.js';
import * as Hooks from './hooks.js'
import * as AuthenticateRoutings from './routes/authenticate.js'
2022-05-09 14:09:08 +00:00
import * as SessionServerRoutings from './routes/session.js'
import * as AdvancedRoutings from './routes/advanced.js'
import * as APIRoutings from './routes/api.js'
import { config } from './config.js'
import { readFileSync } from 'fs'
2022-05-14 16:29:52 +00:00
import { Scenes, session, Telegraf } from 'telegraf'
import { allScenes, registerAllPlayerCommands } from './telegram/player-commands.js';
2022-05-02 15:12:46 +00:00
export const server = fastify({
logger: {
2022-05-05 07:36:10 +00:00
prettyPrint: true,
2022-05-11 00:58:06 +00:00
// level: 'error'
2022-05-02 15:12:46 +00:00
}
})
2022-05-14 16:29:52 +00:00
export const telegraf = new Telegraf(config.telegram.token)
2022-05-05 07:36:10 +00:00
export const setup = async () => {
2022-05-02 15:12:46 +00:00
const mongooseClient = await mongoose.connect(config.database.url)
const models = registerModels(mongooseClient)
const publicKey = readFileSync(config.signing.public).toString()
const privateKey = readFileSync(config.signing.private).toString()
2022-05-02 15:12:46 +00:00
server.decorate('mongoose', mongooseClient)
server.decorate('models', models)
server.decorate('keys', { publicKey, privateKey })
2022-05-02 15:12:46 +00:00
config.custom.preHooks(server)
2022-05-02 15:12:46 +00:00
server.addHook('preHandler', Hooks.headerValidation)
config.custom.preRouting(server)
// Authserver routings
server.route(AuthenticateRoutings.authenticate)
server.route(AuthenticateRoutings.refresh)
server.route(AuthenticateRoutings.validate)
server.route(AuthenticateRoutings.invalidate)
server.route(AuthenticateRoutings.signout)
2022-05-09 14:09:08 +00:00
server.route(SessionServerRoutings.join)
server.route(SessionServerRoutings.hasJoined)
2022-05-11 00:58:06 +00:00
server.route(SessionServerRoutings.profile)
2022-05-09 14:09:08 +00:00
server.route(AdvancedRoutings.meta)
server.route(AdvancedRoutings.status)
server.route(APIRoutings.profiles)
config.custom.postRouting(server)
2022-05-13 07:28:13 +00:00
if(process.env["UNIT_TEST"] || process.env["DEVEL_FIRST_RUN"]) {
// Create a test player
await new models.Player({
username: 'test',
password: '8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92',
email: 'i@lama.icu',
uuid: '098f6bcd-4621-3373-8ade-4e832627b4f6',
texture: {
skin: 'assets.lama.icu/textures/skin/steve.png',
cape: 'assets.lama.icu/textures/cape/default.png'
},
registerDate: Date.now(),
2022-05-14 16:29:52 +00:00
permissions: [{ node: 'login', allowed: true, duration: 0, eternal: true, startDate: Date.now(), highPriority: false }],
telegramBind: {
username: 'test',
verified: true,
}
}).save()
2022-05-13 07:28:13 +00:00
}
2022-05-14 16:29:52 +00:00
const stage = new Scenes.Stage([ ...allScenes ])
telegraf.use(session())
telegraf.use(stage.middleware())
registerAllPlayerCommands()
2022-05-05 07:36:10 +00:00
}
2022-05-05 07:36:10 +00:00
const launch = async () => {
process.on('SIGINT', () => {
new Promise(shutdown)
})
2022-05-14 16:29:52 +00:00
telegraf.launch()
2022-05-05 07:36:10 +00:00
2022-05-02 15:12:46 +00:00
await server.listen(config.server.port, config.server.url)
server.log.info("老色批世界树 > 基于 fastify 的高性能 HTTP 服务器已启动")
2022-05-05 07:36:10 +00:00
}
export const shutdown = async () => {
server.close()
2022-05-14 16:29:52 +00:00
telegraf.stop()
2022-05-05 07:36:10 +00:00
mongoose.disconnect()
}
(async () => {
if(!process.env["UNIT_TEST"]) {
console.log(`
================================================================
__ _____ ______ __ __ _ __
/ / / ___// __ \\ \\/ /___ _____ _____/ /________ ______(_) /
/ / \\__ \\/ /_/ /\\ / __ \`/ __ \`/ __ / ___/ __ \`/ ___/ / /
/ /______/ / ____/ / / /_/ / /_/ / /_/ / / / /_/ (__ ) / /
/_____/____/_/ /_/\\__, /\\__, /\\__,_/_/ \\__,_/____/_/_/
/____//____/
================================================================\n`)
if(typeof PROGRAM_PRODUCTION === 'undefined') {
console.warn("⚠ 警告: 您运行的不是正式版本,可能会不稳定,仅限开发环境运行!\n")
}
await setup()
await launch()
}
2022-05-11 00:58:06 +00:00
})()