mirror of
				https://github.com/hydralauncher/hydra.git
				synced 2025-03-09 15:40:26 +00:00 
			
		
		
		
	feat: updates
This commit is contained in:
		
							parent
							
								
									3ade87fe0b
								
							
						
					
					
						commit
						57e4bd4d27
					
				
					 10 changed files with 132 additions and 84 deletions
				
			
		|  | @ -11,10 +11,18 @@ import { logger } from "./logger"; | |||
| import { UserNotLoggedInError, SubscriptionRequiredError } from "@shared"; | ||||
| import { omit } from "lodash-es"; | ||||
| import { appVersion } from "@main/constants"; | ||||
| import { getUserData } from "./user/get-user-data"; | ||||
| 
 | ||||
| interface HydraApiOptions { | ||||
|   needsAuth?: boolean; | ||||
|   needsCloud?: boolean; | ||||
|   needsSubscription?: boolean; | ||||
| } | ||||
| 
 | ||||
| interface HydraApiUserAuth { | ||||
|   authToken: string; | ||||
|   refreshToken: string; | ||||
|   expirationTimestamp: number; | ||||
|   subscription: { expiresAt: Date | null } | null; | ||||
| } | ||||
| 
 | ||||
| export class HydraApi { | ||||
|  | @ -25,27 +33,22 @@ export class HydraApi { | |||
| 
 | ||||
|   private static secondsToMilliseconds = (seconds: number) => seconds * 1000; | ||||
| 
 | ||||
|   private static userAuth = { | ||||
|   private static userAuth: HydraApiUserAuth = { | ||||
|     authToken: "", | ||||
|     refreshToken: "", | ||||
|     expirationTimestamp: 0, | ||||
|     subscription: null, | ||||
|   }; | ||||
| 
 | ||||
|   private static isLoggedIn() { | ||||
|     return this.userAuth.authToken !== ""; | ||||
|   } | ||||
| 
 | ||||
|   private static async hasCloudSubscription() { | ||||
|     return userSubscriptionRepository | ||||
|       .findOne({ where: { id: 1 } }) | ||||
|       .then((userSubscription) => { | ||||
|         if (!userSubscription) return false; | ||||
| 
 | ||||
|         return ( | ||||
|           !userSubscription.expiresAt || | ||||
|           userSubscription!.expiresAt > new Date() | ||||
|         ); | ||||
|       }); | ||||
|   private static hasCloudSubscription() { | ||||
|     return ( | ||||
|       this.userAuth.subscription?.expiresAt && | ||||
|       this.userAuth.subscription.expiresAt > new Date() | ||||
|     ); | ||||
|   } | ||||
| 
 | ||||
|   static async handleExternalAuth(uri: string) { | ||||
|  | @ -67,6 +70,7 @@ export class HydraApi { | |||
|       authToken: accessToken, | ||||
|       refreshToken: refreshToken, | ||||
|       expirationTimestamp: tokenExpirationTimestamp, | ||||
|       subscription: null, | ||||
|     }; | ||||
| 
 | ||||
|     logger.log( | ||||
|  | @ -84,6 +88,16 @@ export class HydraApi { | |||
|       ["id"] | ||||
|     ); | ||||
| 
 | ||||
|     await getUserData().then((userDetails) => { | ||||
|       if (userDetails?.subscription) { | ||||
|         this.userAuth.subscription = { | ||||
|           expiresAt: userDetails.subscription.expiresAt | ||||
|             ? new Date(userDetails.subscription.expiresAt) | ||||
|             : null, | ||||
|         }; | ||||
|       } | ||||
|     }); | ||||
| 
 | ||||
|     if (WindowManager.mainWindow) { | ||||
|       WindowManager.mainWindow.webContents.send("on-signin"); | ||||
|       await clearGamesRemoteIds(); | ||||
|  | @ -96,6 +110,7 @@ export class HydraApi { | |||
|       authToken: "", | ||||
|       refreshToken: "", | ||||
|       expirationTimestamp: 0, | ||||
|       subscription: null, | ||||
|     }; | ||||
|   } | ||||
| 
 | ||||
|  | @ -161,14 +176,20 @@ export class HydraApi { | |||
|       ); | ||||
|     } | ||||
| 
 | ||||
|     await getUserData(); | ||||
| 
 | ||||
|     const userAuth = await userAuthRepository.findOne({ | ||||
|       where: { id: 1 }, | ||||
|       relations: { subscription: true }, | ||||
|     }); | ||||
| 
 | ||||
|     this.userAuth = { | ||||
|       authToken: userAuth?.accessToken ?? "", | ||||
|       refreshToken: userAuth?.refreshToken ?? "", | ||||
|       expirationTimestamp: userAuth?.tokenExpirationTimestamp ?? 0, | ||||
|       subscription: userAuth?.subscription | ||||
|         ? { expiresAt: userAuth.subscription?.expiresAt } | ||||
|         : null, | ||||
|     }; | ||||
|   } | ||||
| 
 | ||||
|  | @ -236,9 +257,11 @@ export class HydraApi { | |||
|         authToken: "", | ||||
|         expirationTimestamp: 0, | ||||
|         refreshToken: "", | ||||
|         subscription: null, | ||||
|       }; | ||||
| 
 | ||||
|       userAuthRepository.delete({ id: 1 }); | ||||
|       userSubscriptionRepository.delete({ id: 1 }); | ||||
| 
 | ||||
|       this.sendSignOutEvent(); | ||||
|     } | ||||
|  | @ -248,14 +271,14 @@ export class HydraApi { | |||
| 
 | ||||
|   private static async validateOptions(options?: HydraApiOptions) { | ||||
|     const needsAuth = options?.needsAuth == undefined || options.needsAuth; | ||||
|     const needsCloud = options?.needsCloud === true; | ||||
|     const needsSubscription = options?.needsSubscription === true; | ||||
| 
 | ||||
|     if (needsAuth) { | ||||
|       if (!this.isLoggedIn()) throw new UserNotLoggedInError(); | ||||
|       await this.revalidateAccessTokenIfExpired(); | ||||
|     } | ||||
| 
 | ||||
|     if (needsCloud) { | ||||
|     if (needsSubscription) { | ||||
|       if (!(await this.hasCloudSubscription())) { | ||||
|         throw new SubscriptionRequiredError(); | ||||
|       } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue