/** The shape of plugin metadata objects in plugin-manifest.json */
export interface IPluginMetaData {
    id?: string;
    /** @deprecated use `id` instead */
    name?: string;
    version: string;
    url?: string;
    /** @deprecated if using a plugin-manifest.json baked into a deck instance, use `url` instead */
    devUrl?: string;
    module?: any;
}
declare type ISource = 'gate' | 'deck';
export interface INormalizedPluginMetaData {
    id: string;
    source: ISource;
    version: string;
    url?: string;
    module?: any;
}
export declare class PluginRegistry {
    private pluginManifests;
    getRegisteredPlugins(): INormalizedPluginMetaData[];
    registerPluginMetaData(source: ISource, pluginMetaData: IPluginMetaData): INormalizedPluginMetaData | undefined;
    normalize(source: ISource, pluginMetaData: IPluginMetaData): INormalizedPluginMetaData;
    validateMetaData(pluginMetaData: IPluginMetaData): void;
    /** Loads plugin manifest file served as a custom deck asset */
    loadPluginManifestFromDeck(): Promise<IPluginMetaData[]>;
    /** Loads plugin manifest file served from gate */
    loadPluginManifestFromGate(): Promise<IPluginMetaData[]>;
    /**
     * Loads plugin manifests from Gate and from `/plugin-manifest.json` in the deck resources
     *
     * plugin-manifest.json should contain an array of IPluginMetaData objects, i.e.,
     * [{ 'name': 'myPlugin', 'version': '1.2.3', 'url': '/plugins/index.js' }]
     */
    loadPluginManifest(source: ISource, location: string, pluginsMetaDataPromise: PromiseLike<IPluginMetaData[]>): Promise<IPluginMetaData[]>;
    loadPlugins(): Promise<any[]>;
    private load;
    private loadModuleFromUrl;
}
export {};
