/// <reference types="node" />
import { Response, Router } from 'express';
import { Server } from 'http';
import { Logger } from 'winston';
import { ActorModel } from '../../models/actor/actor';
import { PluginPlaylistPrivacyManager, PluginSettingsManager, PluginStorageManager, PluginTranscodingManager, PluginVideoCategoryManager, PluginVideoLanguageManager, PluginVideoLicenceManager, PluginVideoPrivacyManager, RegisterServerHookOptions, RegisterServerSettingOptions, ServerConfig, ThumbnailType, VideoBlacklistCreate } from '../../../shared/models';
import { MUserDefault, MVideo, MVideoThumbnail, UserNotificationModelForApi } from '../models';
import { RegisterServerAuthExternalOptions, RegisterServerAuthExternalResult, RegisterServerAuthPassOptions } from './register-server-auth.model';
import { RegisterServerWebSocketRouteOptions } from './register-server-websocket-route.model';
export declare type PeerTubeHelpers = {
    logger: Logger;
    database: {
        query: Function;
    };
    videos: {
        loadByUrl: (url: string) => Promise<MVideoThumbnail>;
        loadByIdOrUUID: (id: number | string) => Promise<MVideoThumbnail>;
        removeVideo: (videoId: number) => Promise<void>;
        ffprobe: (path: string) => Promise<any>;
        getFiles: (id: number | string) => Promise<{
            webtorrent: {
                videoFiles: {
                    path: string;
                    url: string;
                    resolution: number;
                    size: number;
                    fps: number;
                }[];
            };
            hls: {
                videoFiles: {
                    path: string;
                    url: string;
                    resolution: number;
                    size: number;
                    fps: number;
                }[];
            };
            thumbnails: {
                type: ThumbnailType;
                path: string;
            }[];
        }>;
    };
    config: {
        getWebserverUrl: () => string;
        getServerConfig: () => Promise<ServerConfig>;
    };
    moderation: {
        blockServer: (options: {
            byAccountId: number;
            hostToBlock: string;
        }) => Promise<void>;
        unblockServer: (options: {
            byAccountId: number;
            hostToUnblock: string;
        }) => Promise<void>;
        blockAccount: (options: {
            byAccountId: number;
            handleToBlock: string;
        }) => Promise<void>;
        unblockAccount: (options: {
            byAccountId: number;
            handleToUnblock: string;
        }) => Promise<void>;
        blacklistVideo: (options: {
            videoIdOrUUID: number | string;
            createOptions: VideoBlacklistCreate;
        }) => Promise<void>;
        unblacklistVideo: (options: {
            videoIdOrUUID: number | string;
        }) => Promise<void>;
    };
    server: {
        getHTTPServer: () => Server;
        getServerActor: () => Promise<ActorModel>;
    };
    socket: {
        sendNotification: (userId: number, notification: UserNotificationModelForApi) => void;
        sendVideoLiveNewState: (video: MVideo) => void;
    };
    plugin: {
        getBaseStaticRoute: () => string;
        getBaseRouterRoute: () => string;
        getBaseWebSocketRoute: () => string;
        getDataDirectoryPath: () => string;
    };
    user: {
        getAuthUser: (response: Response) => Promise<MUserDefault>;
        loadById: (id: number) => Promise<MUserDefault>;
    };
};
export declare type RegisterServerOptions = {
    registerHook: (options: RegisterServerHookOptions) => void;
    registerSetting: (options: RegisterServerSettingOptions) => void;
    settingsManager: PluginSettingsManager;
    storageManager: PluginStorageManager;
    videoCategoryManager: PluginVideoCategoryManager;
    videoLanguageManager: PluginVideoLanguageManager;
    videoLicenceManager: PluginVideoLicenceManager;
    videoPrivacyManager: PluginVideoPrivacyManager;
    playlistPrivacyManager: PluginPlaylistPrivacyManager;
    transcodingManager: PluginTranscodingManager;
    registerIdAndPassAuth: (options: RegisterServerAuthPassOptions) => void;
    registerExternalAuth: (options: RegisterServerAuthExternalOptions) => RegisterServerAuthExternalResult;
    unregisterIdAndPassAuth: (authName: string) => void;
    unregisterExternalAuth: (authName: string) => void;
    getRouter(): Router;
    registerWebSocketRoute: (options: RegisterServerWebSocketRouteOptions) => void;
    peertubeHelpers: PeerTubeHelpers;
};
//# sourceMappingURL=register-server-option.model.d.ts.map