diff --git a/src/CachingAuthorizationServerProvider.ts b/src/CachingAuthorizationServerProvider.ts index 18f4814..267db11 100644 --- a/src/CachingAuthorizationServerProvider.ts +++ b/src/CachingAuthorizationServerProvider.ts @@ -2,14 +2,21 @@ import type { AuthorizationServerProvider } from "./AuthorizationServerProvider. import type * as oauth from "oauth4webapi" export class CachingAuthorizationServerProvider implements AuthorizationServerProvider { - readonly #cache = new Map> // TODO: Take cache from caller + readonly #cache = new Map // TODO: Take cache from caller readonly #original: AuthorizationServerProvider constructor(original: AuthorizationServerProvider) { this.#original = original } - getAuthorizationServer(request: Request): Promise { - return this.#cache.getOrInsertComputed(request.url, _ => this.#original.getAuthorizationServer(request)) + async getAuthorizationServer(request: Request): Promise { + const cached = this.#cache.get(request.url) + if (cached !== undefined) { + return cached + } + + const fresh = await this.#original.getAuthorizationServer(request) + this.#cache.set(request.url, fresh) + return fresh } } diff --git a/src/CachingClientProvider.ts b/src/CachingClientProvider.ts index 07307c8..ddda929 100644 --- a/src/CachingClientProvider.ts +++ b/src/CachingClientProvider.ts @@ -2,7 +2,7 @@ import type { ClientProvider } from "./ClientProvider.js" import type * as oauth from "oauth4webapi" export class CachingClientProvider implements ClientProvider { - readonly #cache = new Map> // TODO: Take cache from caller + readonly #cache = new Map // TODO: Take cache from caller readonly #original: ClientProvider constructor(original: ClientProvider) { @@ -10,6 +10,13 @@ export class CachingClientProvider implements ClientProvider { } async getClient(as: oauth.AuthorizationServer, redirectUri: string, signal: AbortSignal): Promise { - return this.#cache.getOrInsertComputed(as.issuer, _ => this.#original.getClient(as, redirectUri, signal)) + const cached = this.#cache.get(as.issuer) + if (cached !== undefined) { + return cached + } + + const fresh = await this.#original.getClient(as, redirectUri, signal) + this.#cache.set(as.issuer, fresh) + return fresh } } diff --git a/src/CachingIssuerProvider.ts b/src/CachingIssuerProvider.ts index a42151a..992342f 100644 --- a/src/CachingIssuerProvider.ts +++ b/src/CachingIssuerProvider.ts @@ -1,14 +1,21 @@ import { IssuerProvider } from "./IssuerProvider.js" export class CachingIssuerProvider implements IssuerProvider { - readonly #cache = new Map> // TODO: Take cache from caller + readonly #cache = new Map // TODO: Take cache from caller readonly #original: IssuerProvider constructor(original: IssuerProvider) { this.#original = original } - getIssuer(request: Request): Promise { - return this.#cache.getOrInsertComputed(request.url, _ => this.#original.getIssuer(request)) + async getIssuer(request: Request): Promise { + const cached = this.#cache.get(request.url) + if (cached !== undefined) { + return cached + } + + const fresh = await this.#original.getIssuer(request) + this.#cache.set(request.url, fresh) + return fresh } }