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'
2024-10-07 05:59:12 +00:00
import { OpenAPIHono } from '@hono/zod-openapi'
import type { PinoLogger } from 'hono-pino'
2024-09-01 19:22:00 +00:00
import { hc } from 'hono/client'
import { cors } from 'hono/cors'
2024-10-07 05:59:12 +00:00
import { notFound , onError } from 'stoker/middlewares' ;
2024-09-01 19:22:00 +00:00
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-10-07 05:59:12 +00:00
import { pinoLogger } from './middleware/pino-logger.middleware'
type AppBindings = {
Variables : {
logger : PinoLogger
}
}
2024-07-21 19:05:48 +00:00
2024-09-01 19:22:00 +00:00
/* -------------------------------------------------------------------------- */
/* App */
/* -------------------------------------------------------------------------- */
2024-10-07 05:59:12 +00:00
export const app = new OpenAPIHono < AppBindings > ( ) . 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 )
2024-10-07 05:59:12 +00:00
app . use ( pinoLogger ( ) )
app . notFound ( notFound )
app . onError ( onError )
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-10-07 05:59:12 +00:00
. get ( '/error' , ( c ) = > {
c . status ( 422 ) ;
c . var . logger . info ( 'Logged here' ) ;
throw new Error ( 'Test error' )
} )
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 */
/* -------------------------------------------------------------------------- */
2024-10-01 04:20:19 +00:00
export const rpc = hc < typeof routes > ( config . api . origin )
2024-09-01 19:22:00 +00:00
export type ApiClient = typeof rpc
export type ApiRoutes = typeof routes