-
Notifications
You must be signed in to change notification settings - Fork 189
Expand file tree
/
Copy pathindex.ts
More file actions
85 lines (79 loc) · 2.06 KB
/
Copy pathindex.ts
File metadata and controls
85 lines (79 loc) · 2.06 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
import './polyfills/compression';
import { auth } from '@databuddy/auth';
import { appRouter, createTRPCContext } from '@databuddy/rpc';
import cors from '@elysiajs/cors';
import { fetchRequestHandler } from '@trpc/server/adapters/fetch';
import { autumnHandler } from 'autumn-js/elysia';
import { Elysia } from 'elysia';
import { logger } from './lib/logger';
import { cspHeaders, securityMiddleware } from './middleware/security';
import { assistant } from './routes/assistant';
import { exportRoute } from './routes/export';
import { health } from './routes/health';
import { query } from './routes/query';
const app = new Elysia()
.use(securityMiddleware())
.use(cspHeaders())
.use(
cors({
credentials: true,
origin: [
/(?:^|\.)databuddy\.cc$/,
...(process.env.NODE_ENV === 'development'
? ['http://localhost:3000']
: []),
],
})
)
.use(health)
.use(
autumnHandler({
identify: async ({ request }) => {
const session = await auth.api.getSession({
headers: request.headers,
});
return {
customerId: session?.user.id,
customerData: {
name: session?.user.name,
email: session?.user.email,
},
};
},
})
)
.use(query)
.use(assistant)
.use(exportRoute)
.all('/trpc/*', ({ request }) => {
return fetchRequestHandler({
endpoint: '/trpc',
router: appRouter,
req: request,
createContext: () => createTRPCContext({ headers: request.headers }),
});
})
.onError(({ error, code }) => {
const errorMessage = error instanceof Error ? error.message : String(error);
logger.error(errorMessage, { error });
return new Response(
JSON.stringify({
success: false,
error: errorMessage,
code: code ?? 'INTERNAL_SERVER_ERROR',
}),
{ status: 500, headers: { 'Content-Type': 'application/json' } }
);
});
export default {
fetch: app.fetch,
port: 3001,
};
process.on('SIGINT', () => {
logger.info('SIGINT signal received, shutting down...');
process.exit(0);
});
process.on('SIGTERM', () => {
logger.info('SIGTERM signal received, shutting down...');
process.exit(0);
});