fix and update

This commit is contained in:
lendry
2026-07-01 14:58:30 +03:00
parent 0c9b8e2629
commit 7d344fb82e
3 changed files with 72 additions and 3 deletions

View File

@@ -1,6 +1,6 @@
import { firstValueFrom } from 'rxjs';
import { CoreGrpcService } from '../core-grpc.service';
import { normalizePublicBaseUrl, pickBestPublicBase, isInternalHostname } from './public-url';
import { normalizePublicBaseUrl, pickBestPublicBase, isInternalHostname, normalizeDedicatedApiIssuer } from './public-url';
function normalizeBaseUrl(url: string) {
return normalizePublicBaseUrl(url);
@@ -52,7 +52,8 @@ export async function resolveOAuthIssuer(core: CoreGrpcService, fallback = 'http
const fromDomain = await resolveProjectDomainUrl(core, true);
// env первым: в Docker .env перекрывает seed localhost в БД после первого деплоя.
return pickBestPublicBase([envIssuer, fromDb, fromDomain], fallback);
const picked = pickBestPublicBase([envIssuer, fromDb, fromDomain], fallback);
return normalizeDedicatedApiIssuer(picked);
}
export async function resolveFrontendUrl(core: CoreGrpcService, fallback = 'http://localhost:3002'): Promise<string> {

View File

@@ -17,6 +17,25 @@ export function normalizePublicBaseUrl(url: string) {
return url.trim().replace(/\/+$/, '');
}
/**
* На выделенном API-домене (api.example.com) gateway слушает в корне (/fedcm, /oauth).
* Префикс /idp-api нужен только на SSO-домене. Убираем лишний суффикс из PUBLIC_API_URL.
*/
export function normalizeDedicatedApiIssuer(url: string) {
const normalized = normalizePublicBaseUrl(url);
try {
const parsed = new URL(normalized);
const host = parsed.hostname.toLowerCase();
const path = parsed.pathname.replace(/\/+$/, '') || '/';
if (host.startsWith('api.') && (path === '/idp-api' || path.endsWith('/idp-api'))) {
return `${parsed.protocol}//${parsed.host}`;
}
} catch {
return normalized;
}
return normalized;
}
export function isInternalHostname(hostname: string) {
const host = hostname.trim().toLowerCase();
if (!host) {