mirror of
https://github.com/linux-odyssey/linux-odyssey.git
synced 2026-11-06 03:20:13 +08:00
* feat: update filegraph on touch command * feat: update filegraph on mkdir * feat: add different parsing opts for each command * refactor: replace axios with fetch. put handleCommand to a new file * feat: add config for mounting cli in dev stage * refactor: clean up unused validators * feat: add command handler for copy files. reuse resolvePath function * feat: add rm handler, support specific files deletion. Glob not supported yet * feat: handle discover cases that the folder is actually empty * feat: handle discover empty folder better and support rmdir * feat: handle mv command * refactor: remove unused console logs
92 lines
2.4 KiB
TypeScript
92 lines
2.4 KiB
TypeScript
import fs from 'fs/promises'
|
|
import express from 'express'
|
|
import http from 'http'
|
|
import YAML from 'yaml'
|
|
import swaggerUI from 'swagger-ui-express'
|
|
import passport from 'passport'
|
|
import * as trpcExpress from '@trpc/server/adapters/express'
|
|
import { connectDB } from '../../packages/models'
|
|
|
|
import './auth/passport.js'
|
|
import socketServer from './api/socket.js'
|
|
import apiRouter from './api/routes/index.js'
|
|
import { questManager } from './models/quest.js'
|
|
import config from './config.js'
|
|
import errorHandler from './middleware/error.js'
|
|
import { globalRateLimit } from './middleware/rateLimiter.js'
|
|
import sessionMiddleware from './middleware/session.js'
|
|
import expiryRemovalScheduler from './containers/expiryChecker.js'
|
|
import setupTest from './utils/setupTest.js'
|
|
import logger from './utils/logger.js'
|
|
import { appRouter } from './routers/index.js'
|
|
import { createContext } from './trpc.js'
|
|
|
|
async function main() {
|
|
if (!config.secret) {
|
|
logger.error(
|
|
'No SECRET_KEY found in .env! To set up a persistent key, please run `yarn setup`:'
|
|
)
|
|
process.exit(1)
|
|
}
|
|
|
|
try {
|
|
await connectDB(config.db)
|
|
logger.info('Connected to MongoDB')
|
|
} catch (err) {
|
|
logger.error(err)
|
|
process.exit(1)
|
|
}
|
|
|
|
if (config.testing.enabled) {
|
|
logger.info('Setting up test environment')
|
|
await setupTest()
|
|
}
|
|
|
|
try {
|
|
await questManager.loadAndUpdateQuests()
|
|
} catch (err) {
|
|
logger.error('Failed to load quests', err)
|
|
return
|
|
}
|
|
expiryRemovalScheduler()
|
|
|
|
const file = await fs.readFile('./swagger.yaml', 'utf8')
|
|
const swaggerDocument = YAML.parse(file)
|
|
|
|
const app = express()
|
|
const server = http.createServer(app)
|
|
socketServer(server)
|
|
app.set('trust proxy', [
|
|
'loopback',
|
|
'linklocal',
|
|
'uniquelocal',
|
|
...config.trustedProxies,
|
|
])
|
|
logger.info('Trusted proxies:', config.trustedProxies)
|
|
app.use(globalRateLimit)
|
|
app.use(sessionMiddleware)
|
|
app.use(passport.session())
|
|
app.use('/api-docs', swaggerUI.serve, swaggerUI.setup(swaggerDocument))
|
|
app.use(express.json())
|
|
|
|
app.get('/', (req, res) => {
|
|
res.send('Hello World!')
|
|
})
|
|
|
|
app.use('/api/v1', apiRouter)
|
|
app.use(
|
|
'/trpc',
|
|
trpcExpress.createExpressMiddleware({
|
|
router: appRouter,
|
|
createContext,
|
|
})
|
|
)
|
|
app.use(errorHandler)
|
|
|
|
server.listen(config.port, '0.0.0.0', () => {
|
|
logger.info(`Server listening at ${config.baseUrl}`)
|
|
})
|
|
}
|
|
|
|
main().catch((err) => logger.error(err))
|