From f85b6301dd159dd3ceea27d95e2c5b5b221f1bee Mon Sep 17 00:00:00 2001 From: ramvignesh-b Date: Wed, 13 May 2026 00:54:34 +0530 Subject: [PATCH] feat: implement multi-tenancy in TokenManager --- src/core/TokenManager.ts | 30 +++++++++++++----------------- 1 file changed, 13 insertions(+), 17 deletions(-) diff --git a/src/core/TokenManager.ts b/src/core/TokenManager.ts index c1dbadd..bc6998d 100644 --- a/src/core/TokenManager.ts +++ b/src/core/TokenManager.ts @@ -7,41 +7,37 @@ export class TokenManager { private provider: OAuthProvider, ) {} - async getAccessToken(providerName: string): Promise { - const accessKey = `provider:${providerName}:access_token`; + async getAccessToken(tenantId: string, providerName: string): Promise { + const accessKey = `tenant:${tenantId}:provider:${providerName}:access_token`; const cached = await this.redis.get(accessKey); if (cached) return cached; - const refreshKey = `provider:${providerName}:refresh_token`; + const refreshKey = `tenant:${tenantId}:provider:${providerName}:refresh_token`; const refreshToken = await this.redis.get(refreshKey); if (!refreshToken) return null; const tokens = await this.provider.refreshToken(refreshToken); - await this.saveTokens(providerName, tokens); + await this.saveTokens(tenantId, providerName, tokens); return tokens.accessToken; } - async refreshAccessToken(providerName: string): Promise { - const refreshKey = `provider:${providerName}:refresh_token`; + async refreshAccessToken(tenantId: string, providerName: string): Promise { + const refreshKey = `tenant:${tenantId}:provider:${providerName}:refresh_token`; const refreshToken = await this.redis.get(refreshKey); if (!refreshToken) return null; const tokens = await this.provider.refreshToken(refreshToken); - await this.saveTokens(providerName, tokens); + await this.saveTokens(tenantId, providerName, tokens); return tokens.accessToken; } - async saveTokens(providerName: string, tokens: TokenResponse) { + async saveTokens(tenantId: string, providerName: string, tokens: TokenResponse) { + const baseKey = `tenant:${tenantId}:provider:${providerName}`; + await this.redis.set(`${baseKey}:access_token`, tokens.accessToken, "EX", tokens.expiresIn); + await this.redis.set(`${baseKey}:refresh_token`, tokens.refreshToken); + await this.redis.set(`${baseKey}:last_updated`, new Date().toISOString()); await this.redis.set( - `provider:${providerName}:access_token`, - tokens.accessToken, - "EX", - tokens.expiresIn, - ); - await this.redis.set(`provider:${providerName}:refresh_token`, tokens.refreshToken); - await this.redis.set(`provider:${providerName}:last_updated`, new Date().toISOString()); - await this.redis.set( - `provider:${providerName}:expires_at`, + `${baseKey}:expires_at`, new Date(Date.now() + tokens.expiresIn * 1000).toISOString(), ); }