scrivito
Version:
Scrivito is a professional, yet easy to use SaaS Enterprise Content Management Service, built for digital agencies and medium to large businesses. It is completely maintenance-free, cost-effective, and has unprecedented performance and security.
40 lines (30 loc) • 1.06 kB
text/typescript
import { TokenAuthorizationProvider, clientConfig } from 'scrivito_sdk/client';
import {
BrowserTokenParams,
fetchBrowserToken,
} from 'scrivito_sdk/client/browser_token';
import { computeCacheKey, onReset } from 'scrivito_sdk/common';
let providerCache: Record<string, TokenAuthorizationProvider | undefined> = {};
export function getTokenProvider(
params: BrowserTokenParams
): TokenAuthorizationProvider {
const cacheKey = computeCacheKey(params);
const cachedProvider = providerCache[cacheKey];
if (cachedProvider) return cachedProvider;
const newProvider = new TokenAuthorizationProvider(async () => {
const { iamTokenFetcher } = await clientConfig.fetch();
return iamTokenFetcher
? iamTokenFetcher(params)
: fetchBrowserToken(params);
});
providerCache[cacheKey] = newProvider;
return newProvider;
}
/** for test purposes */
export function injectBrowserToken(
params: BrowserTokenParams,
token: string
): void {
getTokenProvider(params).injectToken(token);
}
onReset(() => (providerCache = {}));