export type ProviderMergeMode = 'replaceAll' | 'append' | 'prepend' | 'insertAt' | 'replaceByName'; export type ProviderSource = 'decision' | 'decisionPlusExternal'; export type BalancerProvider = { /** Stable id (merge identity key), e.g. a Globo POP code like `ber-sp`. */ name: string; /** CDN/vendor label, e.g. `globo`. */ provider: string; /** Manifest or route URL. Optional when `host` is set. */ url?: string; /** CDN hostname used for segment rewriting. Required when `url` is omitted. Wins over the `url` hostname when both are set. */ host?: string; /** * Optional prefix prepended before `segment.pathName` (e.g. a signed JWT prefix `/j/{token}/`). * Defaults to '' — never inferred from the manifest `url` pathname. */ path?: string; port?: string; score?: number; weight?: number; price?: number; absolute?: boolean; dnsEnabled?: boolean; auth?: cdnAuthInfo; original?: boolean; }; export type ExternalProvidersOptions = { mergeMode?: ProviderMergeMode; insertIndex?: number; respectClientOrder?: boolean; activeSwitching?: string; cdnBalanceMethod?: string; }; /** * Resolve the host / port / path / url tuple used for segment rewriting. * Matches /decision semantics: `host` drives CDN switching; `path` is an optional * prefix (e.g. Globo JWT) — never the manifest pathname, which already arrives via * `segment.pathName`. Returns null (instead of throwing) for unusable entries so a * single malformed provider cannot break the whole overlay call. */ export declare function deriveHostAndPath(url?: string, host?: string, port?: string, path?: string): { host: string; port?: string; path: string; url: string; } | null; export declare function balancerProviderToCdnApiData(provider: BalancerProvider, index: number, respectClientOrder: boolean): cdnApiData | null; export declare function getBaselineProvidersFromDecision(resp: balancerResponse): cdnApiData[]; export declare function mergeProviderLists(baseline: cdnApiData[], external: BalancerProvider[], options: ExternalProvidersOptions): cdnApiData[]; export declare function buildDecisionResponseWithMergedProviders(decision: balancerResponse, mergedProviders: cdnApiData[], options: ExternalProvidersOptions): balancerResponse; /** * Holds the runtime external-provider overlay and the last raw /decision response. * The overlay is re-applied on every decision refresh so injected hosts survive * updateTime / manifest-driven reloads. `clearExternalProviders` restores the raw * decision baseline; profile settings are untouched either way. */ export default class ExternalProvidersManager { private externalProviders; private externalOptions; private lastDecisionResponse; private lastOriginalHost; private hasExternalOverlay; hasOverlay(): boolean; getProviderSource(): ProviderSource; getExternalProviders(): BalancerProvider[]; getExternalOptions(): ExternalProvidersOptions; getLastOriginalHost(): string; /** * Called on every successful /decision. Remembers the raw response and returns * either the raw response (no overlay) or the overlay-merged response. */ applyDecisionOverlay(decision: balancerResponse, originalHost: string): balancerResponse; setExternalProviders(providers: BalancerProvider[], options?: ExternalProvidersOptions): balancerResponse | null; clearExternalProviders(): balancerResponse | null; private buildMergedDecision; }