@@ -42,27 +42,25 @@ function saltAnonymousId(anonymousId: string, salt: string): string {
4242 . digest ( 'hex' ) ;
4343}
4444
45- async function validateRequest ( body : any , query : any , request : Request ) {
45+ async function validateRequest ( body : any , request : Request ) {
4646 if ( ! validatePayloadSize ( body , VALIDATION_LIMITS . PAYLOAD_MAX_SIZE ) ) {
4747 await logBlockedTraffic (
4848 request ,
4949 body ,
50- query ,
5150 'payload_too_large' ,
5251 'Validation Error'
5352 ) ;
5453 return { error : { status : 'error' , message : 'Payload too large' } } ;
5554 }
5655
5756 const clientId = sanitizeString (
58- query . client_id ,
57+ request . headers . get ( 'client-id' ) ,
5958 VALIDATION_LIMITS . SHORT_STRING_MAX_LENGTH
6059 ) ;
6160 if ( ! clientId ) {
6261 await logBlockedTraffic (
6362 request ,
6463 body ,
65- query ,
6664 'missing_client_id' ,
6765 'Validation Error'
6866 ) ;
@@ -74,7 +72,6 @@ async function validateRequest(body: any, query: any, request: Request) {
7472 await logBlockedTraffic (
7573 request ,
7674 body ,
77- query ,
7875 'invalid_client_id' ,
7976 'Validation Error' ,
8077 undefined ,
@@ -96,7 +93,6 @@ async function validateRequest(body: any, query: any, request: Request) {
9693 await logBlockedTraffic (
9794 request ,
9895 body ,
99- query ,
10096 'exceeded_event_limit' ,
10197 'Validation Error' ,
10298 undefined ,
@@ -111,7 +107,6 @@ async function validateRequest(body: any, query: any, request: Request) {
111107 await logBlockedTraffic (
112108 request ,
113109 body ,
114- query ,
115110 'origin_not_authorized' ,
116111 'Security Check' ,
117112 undefined ,
@@ -130,7 +125,6 @@ async function validateRequest(body: any, query: any, request: Request) {
130125 await logBlockedTraffic (
131126 request ,
132127 body ,
133- query ,
134128 botCheck . reason || 'unknown_bot' ,
135129 botCheck . category || 'Bot Detection' ,
136130 botCheck . botName ,
@@ -445,7 +439,6 @@ async function checkDuplicate(
445439async function logBlockedTraffic (
446440 request : Request ,
447441 body : any ,
448- query : any ,
449442 blockReason : string ,
450443 blockCategory : string ,
451444 botName ?: string ,
@@ -523,7 +516,11 @@ async function logBlockedTraffic(
523516 values : [ blockedEvent ] ,
524517 format : 'JSONEachRow' ,
525518 } )
526- . then ( ( ) => { } )
519+ . then ( ( ) => {
520+ logger . info ( 'Logged blocked traffic' , {
521+ blockedEvent,
522+ } ) ;
523+ } )
527524 . catch ( ( err ) => {
528525 logger . error ( 'Failed to log blocked traffic' , { error : err as Error } ) ;
529526 } ) ;
@@ -533,129 +530,101 @@ async function logBlockedTraffic(
533530}
534531
535532const app = new Elysia ( )
536- . post (
537- '/' ,
538- async ( {
539- body,
540- query,
541- request,
542- } : {
543- body : any ;
544- query : any ;
545- request : Request ;
546- } ) => {
547- const validation = await validateRequest ( body , query , request ) ;
548- if ( ! validation . success ) {
549- return validation . error ;
550- }
533+ . post ( '/' , async ( { body, request } : { body : any ; request : Request } ) => {
534+ const validation = await validateRequest ( body , request ) ;
535+ if ( ! validation . success ) {
536+ return validation . error ;
537+ }
551538
552- const { clientId, userAgent, ip } = validation ;
539+ const { clientId, userAgent, ip } = validation ;
553540
554- const salt = await getDailySalt ( ) ;
555- if ( body . anonymous_id ) {
556- body . anonymous_id = saltAnonymousId ( body . anonymous_id , salt ) ;
557- }
541+ const salt = await getDailySalt ( ) ;
542+ if ( body . anonymous_id ) {
543+ body . anonymous_id = saltAnonymousId ( body . anonymous_id , salt ) ;
544+ }
558545
559- const eventType = body . type || 'track' ;
560-
561- if ( eventType === 'track' ) {
562- const parseResult = analyticsEventSchema . safeParse ( body ) ;
563- if ( ! parseResult . success ) {
564- console . error (
565- 'Blocked event schema errors:' ,
566- parseResult . error . issues ,
567- 'Payload:' ,
568- body
569- ) ;
570- await logBlockedTraffic (
571- request ,
572- body ,
573- query ,
574- 'invalid_schema' ,
575- 'Schema Validation' ,
576- undefined ,
577- clientId
578- ) ;
579- return {
580- status : 'error' ,
581- message : 'Invalid event schema' ,
582- errors : parseResult . error . issues ,
583- } ;
584- }
585- insertTrackEvent ( body , clientId , userAgent , ip ) ;
586- return { status : 'success' , type : 'track' } ;
546+ const eventType = body . type || 'track' ;
547+
548+ if ( eventType === 'track' ) {
549+ const parseResult = analyticsEventSchema . safeParse ( body ) ;
550+ if ( ! parseResult . success ) {
551+ logger . error ( 'Blocked event schema errors:' , {
552+ issues : parseResult . error . issues ,
553+ payload : body ,
554+ } ) ;
555+ await logBlockedTraffic (
556+ request ,
557+ body ,
558+ 'invalid_schema' ,
559+ 'Schema Validation' ,
560+ undefined ,
561+ clientId
562+ ) ;
563+ return {
564+ status : 'error' ,
565+ message : 'Invalid event schema' ,
566+ errors : parseResult . error . issues ,
567+ } ;
587568 }
569+ insertTrackEvent ( body , clientId , userAgent , ip ) ;
570+ return { status : 'success' , type : 'track' } ;
571+ }
588572
589- if ( eventType === 'error' ) {
590- const parseResult = errorEventSchema . safeParse ( body ) ;
591- if ( ! parseResult . success ) {
592- console . error (
593- 'Blocked event schema errors:' ,
594- parseResult . error . issues ,
595- 'Payload:' ,
596- body
597- ) ;
598- await logBlockedTraffic (
599- request ,
600- body ,
601- query ,
602- 'invalid_schema' ,
603- 'Schema Validation' ,
604- undefined ,
605- clientId
606- ) ;
607- return {
608- status : 'error' ,
609- message : 'Invalid event schema' ,
610- errors : parseResult . error . issues ,
611- } ;
612- }
613- insertError ( body , clientId , userAgent , ip ) ;
614- return { status : 'success' , type : 'error' } ;
573+ if ( eventType === 'error' ) {
574+ const parseResult = errorEventSchema . safeParse ( body ) ;
575+ if ( ! parseResult . success ) {
576+ logger . error ( 'Blocked event schema errors:' , {
577+ issues : parseResult . error . issues ,
578+ payload : body ,
579+ } ) ;
580+ await logBlockedTraffic (
581+ request ,
582+ body ,
583+ 'invalid_schema' ,
584+ 'Schema Validation' ,
585+ undefined ,
586+ clientId
587+ ) ;
588+ return {
589+ status : 'error' ,
590+ message : 'Invalid event schema' ,
591+ errors : parseResult . error . issues ,
592+ } ;
615593 }
594+ insertError ( body , clientId , userAgent , ip ) ;
595+ return { status : 'success' , type : 'error' } ;
596+ }
616597
617- if ( eventType === 'web_vitals' ) {
618- const parseResult = webVitalsEventSchema . safeParse ( body ) ;
619- if ( ! parseResult . success ) {
620- console . error (
621- 'Blocked event schema errors:' ,
622- parseResult . error . issues ,
623- 'Payload:' ,
624- body
625- ) ;
626- await logBlockedTraffic (
627- request ,
628- body ,
629- query ,
630- 'invalid_schema' ,
631- 'Schema Validation' ,
632- undefined ,
633- clientId
634- ) ;
635- return {
636- status : 'error' ,
637- message : 'Invalid event schema' ,
638- errors : parseResult . error . issues ,
639- } ;
640- }
641- insertWebVitals ( body , clientId , userAgent , ip ) ;
642- return { status : 'success' , type : 'web_vitals' } ;
598+ if ( eventType === 'web_vitals' ) {
599+ const parseResult = webVitalsEventSchema . safeParse ( body ) ;
600+ if ( ! parseResult . success ) {
601+ logger . error ( 'Blocked event schema errors:' , {
602+ issues : parseResult . error . issues ,
603+ payload : body ,
604+ } ) ;
605+ await logBlockedTraffic (
606+ request ,
607+ body ,
608+ 'invalid_schema' ,
609+ 'Schema Validation' ,
610+ undefined ,
611+ clientId
612+ ) ;
613+ return {
614+ status : 'error' ,
615+ message : 'Invalid event schema' ,
616+ errors : parseResult . error . issues ,
617+ } ;
643618 }
644-
645- return { status : 'error ' , message : 'Unknown event type ' } ;
619+ insertWebVitals ( body , clientId , userAgent , ip ) ;
620+ return { status : 'success ' , type : 'web_vitals ' } ;
646621 }
647- )
622+
623+ return { status : 'error' , message : 'Unknown event type' } ;
624+ } )
648625 . post (
649626 '/batch' ,
650- async ( {
651- body,
652- query,
653- request,
654- } : {
655- body : any ;
656- query : any ;
657- request : Request ;
658- } ) => {
627+ async ( { body, request } : { body : any ; request : Request } ) => {
659628 if ( ! Array . isArray ( body ) ) {
660629 return {
661630 status : 'error' ,
@@ -667,7 +636,7 @@ const app = new Elysia()
667636 return { status : 'error' , message : 'Batch too large' } ;
668637 }
669638
670- const validation = await validateRequest ( body , query , request ) ;
639+ const validation = await validateRequest ( body , request ) ;
671640 if ( ! validation . success ) {
672641 return { ...validation . error , batch : true } ;
673642 }
@@ -688,16 +657,13 @@ const app = new Elysia()
688657 if ( eventType === 'track' ) {
689658 const parseResult = analyticsEventSchema . safeParse ( event ) ;
690659 if ( ! parseResult . success ) {
691- console . error (
692- 'Blocked event schema errors:' ,
693- parseResult . error . issues ,
694- 'Payload:' ,
695- event
696- ) ;
660+ logger . error ( 'Blocked event schema errors:' , {
661+ issues : parseResult . error . issues ,
662+ payload : event ,
663+ } ) ;
697664 await logBlockedTraffic (
698665 request ,
699666 event ,
700- query ,
701667 'invalid_schema' ,
702668 'Schema Validation' ,
703669 undefined ,
@@ -730,16 +696,14 @@ const app = new Elysia()
730696 if ( eventType === 'error' ) {
731697 const parseResult = errorEventSchema . safeParse ( event ) ;
732698 if ( ! parseResult . success ) {
733- console . error (
734- 'Blocked event schema errors:' ,
735- parseResult . error . issues ,
736- 'Payload:' ,
737- event
738- ) ;
699+ logger . error ( 'Blocked event schema errors:' , {
700+ issues : parseResult . error . issues ,
701+ payload : event ,
702+ event,
703+ } ) ;
739704 await logBlockedTraffic (
740705 request ,
741706 event ,
742- query ,
743707 'invalid_schema' ,
744708 'Schema Validation' ,
745709 undefined ,
@@ -772,16 +736,14 @@ const app = new Elysia()
772736 if ( eventType === 'web_vitals' ) {
773737 const parseResult = webVitalsEventSchema . safeParse ( event ) ;
774738 if ( ! parseResult . success ) {
775- console . error (
776- 'Blocked event schema errors:' ,
777- parseResult . error . issues ,
778- 'Payload:' ,
779- event
780- ) ;
739+ logger . error ( 'Blocked event schema errors:' , {
740+ issues : parseResult . error . issues ,
741+ payload : event ,
742+ event,
743+ } ) ;
781744 await logBlockedTraffic (
782745 request ,
783746 event ,
784- query ,
785747 'invalid_schema' ,
786748 'Schema Validation' ,
787749 undefined ,
0 commit comments