import { EventEmitter } from 'events';
import _ from 'lodash';
import { Environment } from 'nunjucks';
import { GetNodeListParams, PossibleProviderType } from '../provider';
import { ArtifactConfig, ArtifactConfigInput, CommandConfig, PossibleNodeConfigType, RemoteSnippet, SubscriptionUserinfo } from '../types';
export interface ArtifactOptions {
    readonly remoteSnippetList?: ReadonlyArray<RemoteSnippet>;
    readonly templateEngine?: Environment;
}
export type ExtendableRenderContext = Record<string, string>;
export declare class Artifact extends EventEmitter {
    surgioConfig: CommandConfig;
    private options;
    initProgress: number;
    artifact: ArtifactConfig;
    providerNameList: ReadonlyArray<string>;
    nodeConfigListMap: Map<string, ReadonlyArray<PossibleNodeConfigType>>;
    providerMap: Map<string, PossibleProviderType>;
    nodeList: PossibleNodeConfigType[];
    subscriptionUserInfo?: SubscriptionUserinfo;
    subscriptionUserInfoMap: Map<string, SubscriptionUserinfo>;
    private customFilters;
    private netflixFilter;
    private youtubePremiumFilter;
    constructor(surgioConfig: CommandConfig, artifactConfig: ArtifactConfigInput, options?: ArtifactOptions);
    get isReady(): boolean;
    getRenderContext(extendRenderContext?: ExtendableRenderContext): {
        readonly netflixFilter: NonNullable<((nodeConfig: PossibleNodeConfigType) => boolean) | {
            readonly filter: <T extends PossibleNodeConfigType>(nodeList: ReadonlyArray<T>) => ReadonlyArray<T>;
            readonly supportSort: true;
        } | undefined>;
        readonly youtubePremiumFilter: NonNullable<((nodeConfig: PossibleNodeConfigType) => boolean) | {
            readonly filter: <T extends PossibleNodeConfigType>(nodeList: ReadonlyArray<T>) => ReadonlyArray<T>;
            readonly supportSort: true;
        } | undefined>;
        readonly customFilters: Record<string, ((nodeConfig: PossibleNodeConfigType) => boolean) | {
            readonly filter: <T extends PossibleNodeConfigType>(nodeList: ReadonlyArray<T>) => ReadonlyArray<T>;
            readonly supportSort: true;
        }>;
        readonly customParams: Readonly<Record<string, any>>;
        readonly usFilter: import("../types").NodeFilterType;
        readonly hkFilter: import("../types").NodeFilterType;
        readonly japanFilter: import("../types").NodeFilterType;
        readonly koreaFilter: import("../types").NodeFilterType;
        readonly singaporeFilter: import("../types").NodeFilterType;
        readonly germanyFilter: import("../types").NodeFilterType;
        readonly taiwanFilter: import("../types").NodeFilterType;
        readonly chinaBackFilter: import("../types").NodeFilterType;
        readonly chinaOutFilter: import("../types").NodeFilterType;
        readonly shadowsocksFilter: import("../types").NodeFilterType;
        readonly shadowsocksrFilter: import("../types").NodeFilterType;
        readonly vmessFilter: import("../types").NodeFilterType;
        readonly v2rayFilter: import("../types").NodeFilterType;
        readonly snellFilter: import("../types").NodeFilterType;
        readonly tuicFilter: import("../types").NodeFilterType;
        readonly httpFilter: import("../types").NodeFilterType;
        readonly httpsFilter: import("../types").NodeFilterType;
        readonly trojanFilter: import("../types").NodeFilterType;
        readonly socks5Filter: import("../types").NodeFilterType;
        readonly wireguardFilter: import("../types").NodeFilterType;
        readonly hysteria2Filter: import("../types").NodeFilterType;
        readonly vlessFilter: import("../types").NodeFilterType;
        readonly anytlsFilter: import("../types").NodeFilterType;
        readonly proxyTestUrl: string | undefined;
        readonly proxyTestInterval: number | undefined;
        readonly internetTestUrl: string | undefined;
        readonly internetTestInterval: number | undefined;
        readonly downloadUrl: string;
        readonly snippet: (filePath: string) => RemoteSnippet;
        readonly remoteSnippets: _.Dictionary<RemoteSnippet>;
        readonly nodeList: PossibleNodeConfigType[];
        readonly provider: string;
        readonly providerName: string;
        readonly artifactName: string;
        readonly getDownloadUrl: (name: string) => string;
        readonly getUrl: (p: string) => string;
        readonly getNodeNames: (list: ReadonlyArray<PossibleNodeConfigType>, filter?: import("../types").NodeFilterType | import("../types").SortedNodeFilterType, separator?: string) => string;
        readonly getClashNodes: (list: ReadonlyArray<PossibleNodeConfigType>, filter?: import("../types").NodeFilterType | import("../types").SortedNodeFilterType) => Record<string, any>[];
        readonly getClashNodeNames: (list: ReadonlyArray<PossibleNodeConfigType>, filter?: import("../types").NodeFilterType | import("../types").SortedNodeFilterType, prependNodeNames?: ReadonlyArray<string>, defaultNodeNames?: ReadonlyArray<string>) => ReadonlyArray<string>;
        readonly getSingboxNodes: (list: ReadonlyArray<PossibleNodeConfigType>, filter?: import("../types").NodeFilterType | import("../types").SortedNodeFilterType) => Record<string, any>[];
        readonly getSingboxNodeNames: (list: ReadonlyArray<PossibleNodeConfigType>, filter?: import("../types").NodeFilterType | import("../types").SortedNodeFilterType) => ReadonlyArray<string>;
        readonly getSurgeNodes: (nodeList: ReadonlyArray<PossibleNodeConfigType>, filter?: import("../types").NodeFilterType | import("../types").SortedNodeFilterType) => string;
        readonly getSurgeNodeNames: (nodeList: ReadonlyArray<PossibleNodeConfigType>, filter?: import("../types").NodeFilterType | import("../types").SortedNodeFilterType) => string;
        readonly getSurgeWireguardNodes: (nodeList: ReadonlyArray<PossibleNodeConfigType>) => string;
        readonly getSurfboardNodes: (list: ReadonlyArray<PossibleNodeConfigType>, filter?: import("../types").NodeFilterType | import("../types").SortedNodeFilterType) => string;
        readonly getSurfboardNodeNames: (list: ReadonlyArray<PossibleNodeConfigType>, filter?: import("../types").NodeFilterType | import("../types").SortedNodeFilterType) => string;
        readonly getShadowsocksNodes: (list: ReadonlyArray<import("../types").ShadowsocksNodeConfig>, groupName?: string) => string;
        readonly getShadowsocksNodesJSON: (list: ReadonlyArray<import("../types").ShadowsocksNodeConfig>) => string;
        readonly getShadowsocksrNodes: (list: ReadonlyArray<import("../types").ShadowsocksrNodeConfig>, groupName: string) => string;
        readonly getV2rayNNodes: (list: ReadonlyArray<import("../types").VmessNodeConfig>) => string;
        readonly getQuantumultXNodes: (nodeList: ReadonlyArray<PossibleNodeConfigType>, filter?: import("../types").NodeFilterType | import("../types").SortedNodeFilterType) => string;
        readonly getQuantumultXNodeNames: (nodeList: ReadonlyArray<PossibleNodeConfigType>, filter?: import("../types").NodeFilterType | import("../types").SortedNodeFilterType) => string;
        readonly getLoonNodes: (list: ReadonlyArray<PossibleNodeConfigType>, filter?: import("../types").NodeFilterType | import("../types").SortedNodeFilterType) => string;
        readonly getLoonNodeNames: (list: ReadonlyArray<PossibleNodeConfigType>, filter?: import("../types").NodeFilterType | import("../types").SortedNodeFilterType, separator?: string) => string;
        readonly toUrlSafeBase64: (str: string) => string;
        readonly toBase64: (str: string) => string;
        readonly encodeURIComponent: typeof encodeURIComponent;
    };
    init(params?: {
        getNodeListParams?: GetNodeListParams;
    }): Promise<this>;
    getMergedCustomParams(extendableCustomParams?: Record<string, any>): Readonly<Record<string, any>>;
    render(templateEngine?: Environment, extendRenderContext?: ExtendableRenderContext): string;
    private providerMapper;
}
