@memberjunction/actions-bizapps-social
Version:
Social Media Actions for MemberJunction - Twitter, LinkedIn, Facebook, Instagram, TikTok, YouTube, HootSuite, Buffer
83 lines • 2.64 kB
TypeScript
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