2024-08-01 23:46:29 +00:00
import 'reflect-metadata'
2024-09-01 19:22:00 +00:00
import { CollectionController } from '$lib/server/api/controllers/collection.controller'
import { MfaController } from '$lib/server/api/controllers/mfa.controller'
2024-09-18 00:32:26 +00:00
import { OAuthController } from '$lib/server/api/controllers/oauth.controller'
2024-09-01 19:22:00 +00:00
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'
2024-09-07 00:35:16 +00:00
import { config } from './common/config'
2024-09-01 19:22:00 +00:00
import { IamController } from './controllers/iam.controller'
import { LoginController } from './controllers/login.controller'
import { validateAuthSession , verifyOrigin } from './middleware/auth.middleware'
2024-07-21 19:05:48 +00:00
2024-09-01 19:22:00 +00:00
/* -------------------------------------------------------------------------- */
/* App */
/* -------------------------------------------------------------------------- */
export const app = new Hono ( ) . basePath ( '/api' )
2024-07-21 19:05:48 +00:00
2024-09-01 19:22:00 +00:00
/* -------------------------------------------------------------------------- */
/* Global Middlewares */
/* -------------------------------------------------------------------------- */
app . use ( verifyOrigin ) . use ( validateAuthSession )
app . use ( logger ( ) )
2024-07-29 01:39:42 +00:00
app . use (
'/*' ,
cors ( {
2024-09-01 19:22:00 +00:00
origin : [ 'http://localhost:5173' , 'http://localhost:80' , 'http://host.docker.internal:80' , 'http://host.docker.internal:5173' ] , // Replace with your allowed domains
2024-07-29 01:39:42 +00:00
allowMethods : [ 'POST' ] ,
2024-09-01 19:22:00 +00:00
allowHeaders : [ 'Content-Type' ] ,
2024-07-29 01:39:42 +00:00
// credentials: true, // If you need to send cookies or HTTP authentication
2024-09-01 19:22:00 +00:00
} ) ,
)
2024-07-21 19:05:48 +00:00
2024-09-01 19:22:00 +00:00
/* -------------------------------------------------------------------------- */
/* Routes */
/* -------------------------------------------------------------------------- */
2024-07-21 19:05:48 +00:00
const routes = app
2024-09-01 19:22:00 +00:00
. route ( '/me' , container . resolve ( IamController ) . routes ( ) )
. route ( '/user' , container . resolve ( UserController ) . routes ( ) )
. route ( '/login' , container . resolve ( LoginController ) . routes ( ) )
2024-09-16 16:07:22 +00:00
. route ( '/oauth' , container . resolve ( OAuthController ) . routes ( ) )
2024-09-01 19:22:00 +00:00
. route ( '/signup' , container . resolve ( SignupController ) . routes ( ) )
2024-09-07 00:35:16 +00:00
. route ( '/wishlists' , container . resolve ( WishlistController ) . routes ( ) )
2024-09-01 19:22:00 +00:00
. route ( '/collections' , container . resolve ( CollectionController ) . routes ( ) )
. route ( '/mfa' , container . resolve ( MfaController ) . routes ( ) )
. get ( '/' , ( c ) = > c . json ( { message : 'Server is healthy' } ) )
2024-07-21 19:05:48 +00:00
/* -------------------------------------------------------------------------- */
2024-09-01 19:22:00 +00:00
/* Cron Jobs */
2024-07-21 19:05:48 +00:00
/* -------------------------------------------------------------------------- */
2024-09-01 19:22:00 +00:00
container . resolve ( AuthCleanupJobs ) . deleteStaleEmailVerificationRequests ( )
container . resolve ( AuthCleanupJobs ) . deleteStaleLoginRequests ( )
2024-07-25 00:39:03 +00:00
2024-09-01 19:22:00 +00:00
/* -------------------------------------------------------------------------- */
/* Exports */
/* -------------------------------------------------------------------------- */
export const rpc = hc < typeof routes > ( config . ORIGIN )
export type ApiClient = typeof rpc
export type ApiRoutes = typeof routes