11import "./polyfills/compression" ;
22import { auth } from "@databuddy/auth" ;
3- import {
4- appRouter ,
5- createAbortSignalInterceptor ,
6- createRPCContext ,
7- recordORPCError ,
8- setupUncaughtErrorHandlers ,
9- } from "@databuddy/rpc" ;
3+ import { appRouter , createRPCContext } from "@databuddy/rpc" ;
104import { logger } from "@databuddy/shared/logger" ;
115import cors from "@elysiajs/cors" ;
12- import { context } from "@opentelemetry/api" ;
13- import { ORPCError , onError } from "@orpc/server" ;
6+ import { onError } from "@orpc/server" ;
147import { RPCHandler } from "@orpc/server/fetch" ;
158import { autumnHandler } from "autumn-js/elysia" ;
169import { Elysia } from "elysia" ;
17- import {
18- endRequestSpan ,
19- initTracing ,
20- shutdownTracing ,
21- startRequestSpan ,
22- } from "./lib/tracing" ;
2310import { assistant } from "./routes/assistant" ;
2411import { exportRoute } from "./routes/export" ;
2512import { health } from "./routes/health" ;
2613import { publicApi } from "./routes/public" ;
2714import { query } from "./routes/query" ;
2815
29- initTracing ( ) ;
30- setupUncaughtErrorHandlers ( ) ;
31-
3216const rpcHandler = new RPCHandler ( appRouter , {
3317 interceptors : [
34- createAbortSignalInterceptor ( ) ,
3518 onError ( ( error ) => {
3619 logger . error ( error ) ;
3720 } ) ,
3821 ] ,
3922} ) ;
4023
4124const app = new Elysia ( )
42- . state ( "tracing" , {
43- span : null as ReturnType < typeof startRequestSpan > [ "span" ] | null ,
44- activeContext : null as ReturnType < typeof context . active > | null | undefined ,
45- startTime : 0 ,
46- } )
4725 . use (
4826 cors ( {
4927 credentials : true ,
@@ -57,31 +35,6 @@ const app = new Elysia()
5735 )
5836 . use ( publicApi )
5937 . use ( health )
60- . onBeforeHandle ( function startTrace ( { request, path, store } ) {
61- const method = request . method ;
62- const startTime = Date . now ( ) ;
63-
64- // Extract route from path (e.g., "/rpc/websites.list" -> "websites.list")
65- const route = path . startsWith ( "/rpc/" ) ? path . slice ( 5 ) : path ;
66- const { span, activeContext } = startRequestSpan (
67- method ,
68- request . url ,
69- route
70- ) ;
71-
72- // Store span, context, and start time in Elysia store
73- store . tracing = {
74- span,
75- activeContext,
76- startTime,
77- } ;
78- } )
79- . onAfterHandle ( function endTrace ( { response, store } ) {
80- if ( store . tracing ?. span && store . tracing . startTime ) {
81- const statusCode = response instanceof Response ? response . status : 200 ;
82- endRequestSpan ( store . tracing . span , statusCode , store . tracing . startTime ) ;
83- }
84- } )
8538 . use (
8639 autumnHandler ( {
8740 identify : async ( { request } ) => {
@@ -109,35 +62,17 @@ const app = new Elysia()
10962 . use ( exportRoute )
11063 . all (
11164 "/rpc/*" ,
112- async ( { request, store } ) => {
65+ async ( { request } ) => {
11366 try {
11467 const rpcContext = await createRPCContext ( {
11568 headers : request . headers ,
11669 } ) ;
117-
118- const handler = async ( ) => {
119- const { response } = await rpcHandler . handle ( request , {
120- prefix : "/rpc" ,
121- context : rpcContext ,
122- } ) ;
123- return response ;
124- } ;
125-
126- const activeContext = store . tracing ?. activeContext ;
127- const response = activeContext
128- ? await context . with ( activeContext , handler )
129- : await handler ( ) ;
130-
70+ const { response } = await rpcHandler . handle ( request , {
71+ prefix : "/rpc" ,
72+ context : rpcContext ,
73+ } ) ;
13174 return response ?? new Response ( "Not Found" , { status : 404 } ) ;
13275 } catch ( error ) {
133- // Record ORPC errors in OpenTelemetry
134- if ( error instanceof ORPCError ) {
135- recordORPCError ( {
136- code : error . code ,
137- message : error . message ,
138- } ) ;
139- }
140-
14176 logger . error ( { error } , "RPC handler failed" ) ;
14277 return new Response ( "Internal Server Error" , { status : 500 } ) ;
14378 }
@@ -146,12 +81,7 @@ const app = new Elysia()
14681 parse : "none" ,
14782 }
14883 )
149- . onError ( function handleError ( { error, code, store } ) {
150- if ( store . tracing ?. span && store . tracing . startTime ) {
151- const statusCode = code === "NOT_FOUND" ? 404 : 500 ;
152- endRequestSpan ( store . tracing . span , statusCode , store . tracing . startTime ) ;
153- }
154-
84+ . onError ( function handleError ( { error, code } ) {
15585 const errorMessage = error instanceof Error ? error . message : String ( error ) ;
15686 logger . error ( { error, code } , errorMessage ) ;
15787
@@ -170,18 +100,12 @@ export default {
170100 port : 3001 ,
171101} ;
172102
173- process . on ( "SIGINT" , async ( ) => {
103+ process . on ( "SIGINT" , ( ) => {
174104 logger . info ( "SIGINT received, shutting down gracefully..." ) ;
175- await shutdownTracing ( ) . catch ( ( error ) =>
176- logger . error ( { error } , "Shutdown error" )
177- ) ;
178105 process . exit ( 0 ) ;
179106} ) ;
180107
181- process . on ( "SIGTERM" , async ( ) => {
108+ process . on ( "SIGTERM" , ( ) => {
182109 logger . info ( "SIGTERM received, shutting down gracefully..." ) ;
183- await shutdownTracing ( ) . catch ( ( error ) =>
184- logger . error ( { error } , "Shutdown error" )
185- ) ;
186110 process . exit ( 0 ) ;
187111} ) ;
0 commit comments