@@ -3,32 +3,33 @@ import { AppResponse, errToResponse } from "@/utils/responses";
33import { User , UserSchema } from "./validation" ;
44import { getContext } from "@getcronit/pylon" ;
55import { InvalidToken , UnauthorizedUser } from "./errors" ;
6+ import { InternalServerError } from "@/utils/error" ;
67
7- type Tail < T extends unknown [ ] > = T extends [ unknown , ...infer R ] ? R : never ;
8-
9- export function authorized < T > (
10- fn : ( user : User , ...args ) => Promise < AppResponse < T > >
11- ) {
12- return async (
13- ...args : Tail < Parameters < typeof fn > >
14- ) : Promise < ReturnType < typeof fn > > => {
8+ export function authorized < TArgs extends unknown [ ] , TReturn > (
9+ fn : ( user : User , ...args : TArgs ) => Promise < AppResponse < TReturn > >
10+ ) : ( ...args : TArgs ) => Promise < AppResponse < TReturn > > {
11+ return async ( ...args : TArgs ) : Promise < AppResponse < TReturn > > => {
1512 const ctx = getContext ( ) ;
1613 const authorization = ctx . req . header ( "Authorization" ) ;
1714 if ( ! authorization ) return errToResponse ( new UnauthorizedUser ( ) ) ;
1815
19- const sliced = authorization . split ( " " ) ;
20- if ( sliced . length !== 2 || sliced [ 0 ] !== "Bearer" )
16+ const [ scheme , token ] = authorization . split ( " " ) ;
17+ if ( scheme !== "Bearer" || ! token )
2118 return errToResponse ( new UnauthorizedUser ( ) ) ;
2219
23- const token = sliced [ 1 ] ;
20+ let user : User ;
2421 try {
2522 const payload = await verifyToken ( token ) ;
26- const data = UserSchema . parse ( payload ) ;
27- // Spread user into original fn
28- return await fn ( data , ...args ) ;
23+ user = UserSchema . parse ( payload ) ;
24+ } catch ( _err ) {
25+ return errToResponse ( new InvalidToken ( ) ) ;
26+ }
27+
28+ try {
29+ return await fn ( user , ...args ) ;
2930 } catch ( err ) {
3031 console . error ( err ) ;
31- return errToResponse ( new InvalidToken ( ) ) ;
32+ return errToResponse ( new InternalServerError ( ) ) ;
3233 }
3334 } ;
3435}
0 commit comments