feat: implement multi-tenancy in TokenManager

This commit is contained in:
ramvignesh-b
2026-05-13 00:54:34 +05:30
parent d096627b28
commit f85b6301dd
+13 -17
View File
@@ -7,41 +7,37 @@ export class TokenManager {
private provider: OAuthProvider,
) {}
async getAccessToken(providerName: string): Promise<string | null> {
const accessKey = `provider:${providerName}:access_token`;
async getAccessToken(tenantId: string, providerName: string): Promise<string | null> {
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<string | null> {
const refreshKey = `provider:${providerName}:refresh_token`;
async refreshAccessToken(tenantId: string, providerName: string): Promise<string | null> {
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(),
);
}