import { BaseSocialMediaAction } from '../../base/base-social.action';
import { UserInfo } from '@memberjunction/core';
import { AxiosInstance, AxiosError } from 'axios';
import { SocialPost, MediaFile } from '../../base/base-social.action';
/**
 * Base class for all YouTube actions.
 * Handles YouTube Data API v3 authentication and common functionality.
 */
export declare abstract class YouTubeBaseAction extends BaseSocialMediaAction {
    protected get platformName(): string;
    protected get apiBaseUrl(): string;
    /**
     * Axios instance for API requests
     */
    protected axiosInstance: AxiosInstance;
    /**
     * Initialize the axios instance with base configuration
     */
    protected initializeAxios(): void;
    /**
     * YouTube-specific OAuth token refresh
     */
    protected refreshAccessToken(): Promise<void>;
    /**
     * Make authenticated request to YouTube API
     */
    protected makeYouTubeRequest<T = any>(endpoint: string, method?: 'GET' | 'POST' | 'PUT' | 'DELETE', data?: any, params?: Record<string, any>, contextUser?: UserInfo): Promise<T>;
    /**
     * Handle YouTube API errors
     */
    protected handleYouTubeApiError(error: AxiosError): void;
    /**
     * Upload video to YouTube
     */
    protected uploadVideo(videoFile: MediaFile, metadata: {
        title: string;
        description?: string;
        tags?: string[];
        categoryId?: string;
        privacyStatus?: 'private' | 'unlisted' | 'public';
    }): Promise<string>;
    /**
     * Initiate resumable upload session
     */
    private initiateResumableUpload;
    /**
     * Perform the actual video upload
     */
    private performResumableUpload;
    /**
     * Upload single media file (thumbnail)
     */
    protected uploadSingleMedia(file: MediaFile): Promise<string>;
    /**
     * Convert YouTube video to standard social post format
     */
    protected normalizePost(youtubeVideo: any): SocialPost;
    /**
     * Extract analytics from video statistics
     */
    private extractVideoAnalytics;
    /**
     * Search for videos
     */
    protected searchPosts(params: any): Promise<SocialPost[]>;
    /**
     * Get quota cost for an operation
     */
    protected getQuotaCost(operation: string): number;
    /**
     * Parse ISO 8601 duration to seconds
     */
    protected parseDuration(isoDuration: string): number;
    /**
     * Format bytes to human readable size
     */
    protected formatBytes(bytes: number): string;
    /**
     * Validate video file
     */
    protected validateVideoFile(file: MediaFile): void;
}
//# sourceMappingURL=youtube-base.action.d.ts.map