export declare enum PoTokenContext {
    GVS = "gvs",
    PLAYER = "player",
    SUBS = "subs"
}
export declare enum ContentBindingType {
    VISITOR_DATA = "visitor_data",
    DATASYNC_ID = "datasync_id",
    VIDEO_ID = "video_id",
    VISITOR_ID = "visitor_id"
}
export interface InnertubeContext {
    client: {
        clientName: string;
        clientVersion: string;
        clientScreen?: string;
        clientId?: string;
        visitorData?: string;
        platform?: string;
        osName?: string;
        osVersion?: string;
        deviceModel?: string;
        remoteHost?: string;
    };
    user?: {
        lockedSafetyMode?: boolean;
    };
    request?: {
        useSsl?: boolean;
        internalExperimentFlags?: string[];
    };
}
export interface PoTokenRequest {
    context: PoTokenContext;
    innertubeContext: InnertubeContext;
    innertubeHost?: string;
    sessionIndex?: string;
    playerUrl?: string;
    isAuthenticated: boolean;
    videoWebpage?: string;
    internalClientName?: string;
    visitorData?: string;
    dataSyncId?: string;
    videoId?: string;
    requestCookies: any[];
    requestProxy?: string;
    requestHeaders: Record<string, string>;
    requestTimeout?: number;
    requestSourceAddress?: string;
    requestVerifyTls: boolean;
    bypassCache: boolean;
}
export interface PoTokenResponse {
    poToken: string;
    expiresAt?: number;
}
export interface PoTokenCacheSpec {
    keyBindings: Record<string, string | null>;
    defaultTtl: number;
    writePolicy: 'WRITE_ALL' | 'WRITE_FIRST';
}
export declare class PoTokenError extends Error {
    constructor(message: string);
}
export declare class PoTokenProviderRejectedRequest extends PoTokenError {
    constructor(message: string);
}
export declare const WEBPO_CLIENTS: string[];
export declare function getWebPoContentBinding(request: PoTokenRequest, webpoClients?: string[], bindToVisitorId?: boolean): [string | null, ContentBindingType | null];
export declare function generateWebPoCacheSpec(request: PoTokenRequest, bindToVisitorId?: boolean): PoTokenCacheSpec | null;
export declare abstract class PoTokenProvider {
    abstract providerName: string;
    abstract providerVersion: string;
    protected supportedContexts: PoTokenContext[];
    abstract requestPoToken(request: PoTokenRequest): Promise<PoTokenResponse>;
    supportsContext(context: PoTokenContext): boolean;
    validateRequest(request: PoTokenRequest): void;
}
export declare class PoTokenCache {
    private cache;
    generateCacheKey(spec: PoTokenCacheSpec): string;
    get(request: PoTokenRequest): PoTokenResponse | null;
    store(request: PoTokenRequest, response: PoTokenResponse): void;
    clear(): void;
}
//# sourceMappingURL=PoTokenProvider.d.ts.map