A social knowledge tool for researchers built on ATProto

formatting

+62 -22
+33 -11
src/modules/user/infrastructure/repositories/DrizzleTokenRepository.ts
··· 13 13 async saveRefreshToken(token: RefreshToken): Promise<Result<void>> { 14 14 try { 15 15 const tokenPreview = '...' + token.refreshToken.slice(-8); 16 - console.log(`[DrizzleTokenRepository] Saving new refresh token: ${tokenPreview} for user: ${token.userDid}, expiresAt: ${token.expiresAt.toISOString()}`); 16 + console.log( 17 + `[DrizzleTokenRepository] Saving new refresh token: ${tokenPreview} for user: ${token.userDid}, expiresAt: ${token.expiresAt.toISOString()}`, 18 + ); 17 19 18 20 await this.db.insert(authRefreshTokens).values({ 19 21 tokenId: token.tokenId, ··· 24 26 revoked: token.revoked, 25 27 }); 26 28 27 - console.log(`[DrizzleTokenRepository] Successfully saved refresh token: ${tokenPreview}`); 29 + console.log( 30 + `[DrizzleTokenRepository] Successfully saved refresh token: ${tokenPreview}`, 31 + ); 28 32 return ok(undefined); 29 33 } catch (error: any) { 30 - console.log(`[DrizzleTokenRepository] Failed to save refresh token: ${error.message}`); 34 + console.log( 35 + `[DrizzleTokenRepository] Failed to save refresh token: ${error.message}`, 36 + ); 31 37 return err(error); 32 38 } 33 39 } ··· 37 43 ): Promise<Result<RefreshToken | null>> { 38 44 try { 39 45 const tokenPreview = '...' + refreshToken.slice(-8); 40 - console.log(`[DrizzleTokenRepository] Searching for token: ${tokenPreview}`); 46 + console.log( 47 + `[DrizzleTokenRepository] Searching for token: ${tokenPreview}`, 48 + ); 41 49 42 50 const result = await this.db 43 51 .select() ··· 50 58 ) 51 59 .limit(1); 52 60 53 - console.log(`[DrizzleTokenRepository] Query returned ${result.length} results`); 61 + console.log( 62 + `[DrizzleTokenRepository] Query returned ${result.length} results`, 63 + ); 54 64 55 65 if (result.length === 0) { 56 66 // Check if token exists but is revoked ··· 61 71 .limit(1); 62 72 63 73 if (revokedResult.length > 0) { 64 - console.log(`[DrizzleTokenRepository] Token exists but is revoked: ${tokenPreview}`); 74 + console.log( 75 + `[DrizzleTokenRepository] Token exists but is revoked: ${tokenPreview}`, 76 + ); 65 77 } else { 66 - console.log(`[DrizzleTokenRepository] Token does not exist in database: ${tokenPreview}`); 78 + console.log( 79 + `[DrizzleTokenRepository] Token does not exist in database: ${tokenPreview}`, 80 + ); 67 81 } 68 82 69 83 return ok(null); 70 84 } 71 85 72 86 const token = result[0]!; 73 - console.log(`[DrizzleTokenRepository] Token found - userDid: ${token.userDid}, revoked: ${token.revoked}, expiresAt: ${token.expiresAt.toISOString()}`); 87 + console.log( 88 + `[DrizzleTokenRepository] Token found - userDid: ${token.userDid}, revoked: ${token.revoked}, expiresAt: ${token.expiresAt.toISOString()}`, 89 + ); 74 90 75 91 return ok({ ...token, revoked: token.revoked === true }); 76 92 } catch (error: any) { ··· 82 98 async revokeRefreshToken(refreshToken: string): Promise<Result<void>> { 83 99 try { 84 100 const tokenPreview = '...' + refreshToken.slice(-8); 85 - console.log(`[DrizzleTokenRepository] Revoking refresh token: ${tokenPreview}`); 101 + console.log( 102 + `[DrizzleTokenRepository] Revoking refresh token: ${tokenPreview}`, 103 + ); 86 104 87 105 const result = await this.db 88 106 .update(authRefreshTokens) 89 107 .set({ revoked: true }) 90 108 .where(eq(authRefreshTokens.refreshToken, refreshToken)); 91 109 92 - console.log(`[DrizzleTokenRepository] Successfully revoked refresh token: ${tokenPreview}`); 110 + console.log( 111 + `[DrizzleTokenRepository] Successfully revoked refresh token: ${tokenPreview}`, 112 + ); 93 113 return ok(undefined); 94 114 } catch (error: any) { 95 - console.log(`[DrizzleTokenRepository] Failed to revoke refresh token: ${error.message}`); 115 + console.log( 116 + `[DrizzleTokenRepository] Failed to revoke refresh token: ${error.message}`, 117 + ); 96 118 return err(error); 97 119 } 98 120 }
+27 -9
src/modules/user/infrastructure/services/JwtTokenService.ts
··· 66 66 async refreshToken(refreshToken: string): Promise<Result<TokenPair | null>> { 67 67 try { 68 68 const tokenPreview = '...' + refreshToken.slice(-8); 69 - console.log(`[JwtTokenService] Starting refresh for token: ${tokenPreview}`); 69 + console.log( 70 + `[JwtTokenService] Starting refresh for token: ${tokenPreview}`, 71 + ); 70 72 71 73 // Find the refresh token 72 74 const findResult = 73 75 await this.tokenRepository.findRefreshToken(refreshToken); 74 76 75 77 if (findResult.isErr()) { 76 - console.log(`[JwtTokenService] Database error finding token: ${findResult.error.message}`); 78 + console.log( 79 + `[JwtTokenService] Database error finding token: ${findResult.error.message}`, 80 + ); 77 81 return err(findResult.error); 78 82 } 79 83 80 84 const tokenData = findResult.unwrap(); 81 85 if (!tokenData) { 82 - console.log(`[JwtTokenService] Token not found in database: ${tokenPreview}`); 86 + console.log( 87 + `[JwtTokenService] Token not found in database: ${tokenPreview}`, 88 + ); 83 89 return ok(null); 84 90 } 85 91 86 - console.log(`[JwtTokenService] Token found - userDid: ${tokenData.userDid}, issuedAt: ${tokenData.issuedAt.toISOString()}, expiresAt: ${tokenData.expiresAt.toISOString()}, revoked: ${tokenData.revoked}`); 92 + console.log( 93 + `[JwtTokenService] Token found - userDid: ${tokenData.userDid}, issuedAt: ${tokenData.issuedAt.toISOString()}, expiresAt: ${tokenData.expiresAt.toISOString()}, revoked: ${tokenData.revoked}`, 94 + ); 87 95 88 96 // Check if token is expired 89 97 const now = new Date(); 90 98 if (now > tokenData.expiresAt) { 91 - console.log(`[JwtTokenService] Token expired - now: ${now.toISOString()}, expiresAt: ${tokenData.expiresAt.toISOString()}`); 99 + console.log( 100 + `[JwtTokenService] Token expired - now: ${now.toISOString()}, expiresAt: ${tokenData.expiresAt.toISOString()}`, 101 + ); 92 102 await this.revokeToken(refreshToken); 93 103 return ok(null); 94 104 } 95 105 96 - console.log(`[JwtTokenService] Token is valid, generating new tokens for user: ${tokenData.userDid}`); 106 + console.log( 107 + `[JwtTokenService] Token is valid, generating new tokens for user: ${tokenData.userDid}`, 108 + ); 97 109 98 110 // Generate new tokens 99 111 const newTokens = await this.generateToken(tokenData.userDid); 100 112 101 113 if (newTokens.isErr()) { 102 - console.log(`[JwtTokenService] Failed to generate new tokens: ${newTokens.error.message}`); 114 + console.log( 115 + `[JwtTokenService] Failed to generate new tokens: ${newTokens.error.message}`, 116 + ); 103 117 return newTokens; 104 118 } 105 119 ··· 108 122 // Revoke old token 109 123 const revokeResult = await this.revokeToken(refreshToken); 110 124 if (revokeResult.isErr()) { 111 - console.log(`[JwtTokenService] Warning: Failed to revoke old token: ${revokeResult.error.message}`); 125 + console.log( 126 + `[JwtTokenService] Warning: Failed to revoke old token: ${revokeResult.error.message}`, 127 + ); 112 128 } else { 113 129 console.log(`[JwtTokenService] Old token revoked successfully`); 114 130 } 115 131 116 132 return newTokens; 117 133 } catch (error: any) { 118 - console.log(`[JwtTokenService] Unexpected error during refresh: ${error.message}`); 134 + console.log( 135 + `[JwtTokenService] Unexpected error during refresh: ${error.message}`, 136 + ); 119 137 return err(error); 120 138 } 121 139 }
+2 -2
src/webapp/lib/auth/dal.ts
··· 13 13 console.log('Auth refresh already in progress, waiting...'); 14 14 return refreshPromise; 15 15 } 16 - 16 + 17 17 isRefreshing = true; 18 18 refreshPromise = (async () => { 19 19 try { ··· 34 34 refreshPromise = null; 35 35 } 36 36 })(); 37 - 37 + 38 38 return refreshPromise; 39 39 }, 40 40 );