mirror of
https://github.com/BradNut/boredgame
synced 2025-09-08 17:40:22 +00:00
66 lines
3.4 KiB
TypeScript
66 lines
3.4 KiB
TypeScript
import 'reflect-metadata'
|
|
import { CollectionController } from '$lib/server/api/controllers/collection.controller'
|
|
import { MfaController } from '$lib/server/api/controllers/mfa.controller'
|
|
import { OAuthController } from '$lib/server/api/controllers/oauth.controller'
|
|
import { SignupController } from '$lib/server/api/controllers/signup.controller'
|
|
import { UserController } from '$lib/server/api/controllers/user.controller'
|
|
import { WishlistController } from '$lib/server/api/controllers/wishlist.controller'
|
|
import { AuthCleanupJobs } from '$lib/server/api/jobs/auth-cleanup.job'
|
|
import { Hono } from 'hono'
|
|
import { hc } from 'hono/client'
|
|
import { cors } from 'hono/cors'
|
|
import { logger } from 'hono/logger'
|
|
import { container } from 'tsyringe'
|
|
import { config } from './common/config'
|
|
import { IamController } from './controllers/iam.controller'
|
|
import { LoginController } from './controllers/login.controller'
|
|
import { validateAuthSession, verifyOrigin } from './middleware/auth.middleware'
|
|
|
|
/* -------------------------------------------------------------------------- */
|
|
/* App */
|
|
/* -------------------------------------------------------------------------- */
|
|
export const app = new Hono().basePath('/api')
|
|
|
|
/* -------------------------------------------------------------------------- */
|
|
/* Global Middlewares */
|
|
/* -------------------------------------------------------------------------- */
|
|
app.use(verifyOrigin).use(validateAuthSession)
|
|
app.use(logger())
|
|
|
|
app.use(
|
|
'/*',
|
|
cors({
|
|
origin: ['http://localhost:5173', 'http://localhost:80', 'http://host.docker.internal:80', 'http://host.docker.internal:5173'], // Replace with your allowed domains
|
|
|
|
allowMethods: ['POST'],
|
|
allowHeaders: ['Content-Type'],
|
|
// credentials: true, // If you need to send cookies or HTTP authentication
|
|
}),
|
|
)
|
|
|
|
/* -------------------------------------------------------------------------- */
|
|
/* Routes */
|
|
/* -------------------------------------------------------------------------- */
|
|
const routes = app
|
|
.route('/me', container.resolve(IamController).routes())
|
|
.route('/user', container.resolve(UserController).routes())
|
|
.route('/login', container.resolve(LoginController).routes())
|
|
.route('/oauth', container.resolve(OAuthController).routes())
|
|
.route('/signup', container.resolve(SignupController).routes())
|
|
.route('/wishlists', container.resolve(WishlistController).routes())
|
|
.route('/collections', container.resolve(CollectionController).routes())
|
|
.route('/mfa', container.resolve(MfaController).routes())
|
|
.get('/', (c) => c.json({ message: 'Server is healthy' }))
|
|
|
|
/* -------------------------------------------------------------------------- */
|
|
/* Cron Jobs */
|
|
/* -------------------------------------------------------------------------- */
|
|
container.resolve(AuthCleanupJobs).deleteStaleEmailVerificationRequests()
|
|
container.resolve(AuthCleanupJobs).deleteStaleLoginRequests()
|
|
|
|
/* -------------------------------------------------------------------------- */
|
|
/* Exports */
|
|
/* -------------------------------------------------------------------------- */
|
|
export const rpc = hc<typeof routes>(config.ORIGIN)
|
|
export type ApiClient = typeof rpc
|
|
export type ApiRoutes = typeof routes
|