From 8c934b6c0105d60912e7d61afd0e9540eaa54374 Mon Sep 17 00:00:00 2001 From: openhands Date: Tue, 5 Nov 2024 23:26:12 +0000 Subject: [PATCH] fix: add proper TypeScript types for GitHub data and auth cache --- frontend/src/types/github.ts | 41 ++++++++++++++++++++++++++++++++ frontend/src/utils/auth-cache.ts | 14 +++++++---- 2 files changed, 50 insertions(+), 5 deletions(-) create mode 100644 frontend/src/types/github.ts diff --git a/frontend/src/types/github.ts b/frontend/src/types/github.ts new file mode 100644 index 0000000000..6671e314ff --- /dev/null +++ b/frontend/src/types/github.ts @@ -0,0 +1,41 @@ +export interface GitHubUser { + id: number; + login: string; + avatar_url: string; +} + +export interface GitHubErrorReponse { + message: string; + documentation_url: string; + status: number; +} + +export interface GitHubRepository { + id: number; + name: string; + full_name: string; + private: boolean; + html_url: string; + description: string | null; + fork: boolean; + created_at: string; + updated_at: string; + pushed_at: string; + git_url: string; + ssh_url: string; + clone_url: string; + default_branch: string; +} + +export interface GitHubCommit { + sha: string; + commit: { + author: { + name: string; + email: string; + date: string; + }; + message: string; + }; + html_url: string; +} \ No newline at end of file diff --git a/frontend/src/utils/auth-cache.ts b/frontend/src/utils/auth-cache.ts index 8976db018c..9e74d9c2e0 100644 --- a/frontend/src/utils/auth-cache.ts +++ b/frontend/src/utils/auth-cache.ts @@ -1,14 +1,18 @@ +import type { GitHubUser, GitHubErrorReponse } from "#/types/github"; + interface CacheEntry { value: T; timestamp: number; token: string; } +type GitHubUserResponse = GitHubUser | GitHubErrorReponse; + class AuthCache { private static instance: AuthCache; private cache: { isAuthed?: CacheEntry; - githubUser?: CacheEntry; + githubUser?: CacheEntry; } = {}; private constructor() {} @@ -20,11 +24,11 @@ class AuthCache { return AuthCache.instance; } - private isExpired(entry: CacheEntry, maxAge: number): boolean { + private isExpired(entry: CacheEntry, maxAge: number): boolean { return Date.now() - entry.timestamp > maxAge; } - private tokenChanged(entry: CacheEntry, currentToken: string): boolean { + private tokenChanged(entry: CacheEntry, currentToken: string): boolean { return entry.token !== currentToken; } @@ -44,7 +48,7 @@ class AuthCache { }; } - getGithubUser(token: string): any | undefined { + getGithubUser(token: string): GitHubUserResponse | undefined { const entry = this.cache.githubUser; if (!entry || this.isExpired(entry, 300000) || this.tokenChanged(entry, token)) { return undefined; @@ -52,7 +56,7 @@ class AuthCache { return entry.value; } - setGithubUser(token: string, value: any): void { + setGithubUser(token: string, value: GitHubUserResponse): void { this.cache.githubUser = { value, timestamp: Date.now(),