42 lines
1.2 KiB
TypeScript
42 lines
1.2 KiB
TypeScript
export function normalizeBaseUrl(url: string) {
|
|
return url.trim().replace(/\/+$/, '');
|
|
}
|
|
|
|
export function resolveOAuthApiBase(settings: Record<string, string>, fallback = 'http://localhost:3000') {
|
|
const publicApi = settings.PUBLIC_API_URL?.trim();
|
|
if (publicApi) {
|
|
return normalizeBaseUrl(publicApi);
|
|
}
|
|
|
|
const domain = settings.PROJECT_DOMAIN?.trim();
|
|
if (domain) {
|
|
if (domain.startsWith('http://') || domain.startsWith('https://')) {
|
|
return normalizeBaseUrl(domain);
|
|
}
|
|
return `https://${domain.replace(/^\/+/, '')}`;
|
|
}
|
|
|
|
return normalizeBaseUrl(fallback);
|
|
}
|
|
|
|
export interface OAuthEndpoints {
|
|
issuer: string;
|
|
authorizationEndpoint: string;
|
|
tokenEndpoint: string;
|
|
userInfoEndpoint: string;
|
|
openIdConfigurationUrl: string;
|
|
jwksUrl: string;
|
|
}
|
|
|
|
export function buildOAuthEndpoints(apiBase: string): OAuthEndpoints {
|
|
const base = normalizeBaseUrl(apiBase);
|
|
return {
|
|
issuer: base,
|
|
authorizationEndpoint: `${base}/oauth/authorize`,
|
|
tokenEndpoint: `${base}/oauth/token`,
|
|
userInfoEndpoint: `${base}/oauth/userinfo`,
|
|
openIdConfigurationUrl: `${base}/.well-known/openid-configuration`,
|
|
jwksUrl: `${base}/.well-known/jwks.json`
|
|
};
|
|
}
|