import type { Labels } from '@ariestools/sdk';
import type { ProviderMoniker } from '@xyo-network/xl1-protocol/protocol-lib';
import type { CreatableProvider, CreatableProviderFactory, CreatableProviderInstance, ProviderFactoryScope } from './CreatableProvider.js';
import type { GetInstanceOptions } from './GetInstanceOptions.js';
declare global {
    var xyoServiceSingletons: Record<string, unknown>;
}
/** ProviderFactoryDescription helper function. */
export declare function providerFactoryDescription(factory: CreatableProviderFactory, labels?: Labels): string;
/** ProviderFactory implementation. */
export declare class ProviderFactory<TProvider extends CreatableProviderInstance, TDependencies extends ProviderMoniker[]> implements CreatableProviderFactory<TProvider> {
    /** Provider class instantiated by this factory. */
    creatableProvider: CreatableProvider<TProvider>;
    /** Primary moniker used to resolve this provider. */
    defaultMoniker: CreatableProvider<TProvider>['monikers'][number];
    /** Legacy default parameters merged into provider creation input. */
    defaultParams: Partial<Omit<TProvider['params'], 'context'>>;
    /** Provider monikers that must resolve before this provider can be created. */
    dependencies: TDependencies;
    /** Labels used to distinguish provider instances with the same moniker. */
    labels?: Labels;
    /** Provider monikers implemented by this provider class. */
    monikers: CreatableProvider<TProvider>['monikers'];
    /** Provider class name used in diagnostics and instance keys. */
    providerName: string;
    /** Lifetime and sharing boundary for provider instances created by the factory. */
    scope: ProviderFactoryScope;
    private _uniqueId;
    /** Creates an instance with the supplied configuration. */
    constructor(creatableProvider: CreatableProvider<TProvider>, dependencies: TDependencies, params?: Partial<Omit<TProvider['params'], 'context'>>, labels?: Labels, scope?: ProviderFactoryScope);
    /** Resolves  moniker from configured providers. */
    get resolvedMoniker(): string;
    /** Returns the unique id result exposed by this provider. */
    get uniqueId(): symbol;
    /** Params-free factory — the provider self-resolves from context.config and the context runtime homes. */
    static for<TInstance extends CreatableProviderInstance, TDependencies extends ProviderMoniker[]>(creatableProvider: CreatableProvider<TInstance>, dependencies: TDependencies, labels?: Labels): ProviderFactory<TInstance, TDependencies>;
    /** @deprecated params are being removed — use `for(creatableProvider, dependencies)`; providers self-resolve */
    static withParams<TInstance extends CreatableProviderInstance, TDependencies extends ProviderMoniker[]>(creatableProvider: CreatableProvider<TInstance>, dependencies: TDependencies, params?: Partial<Omit<TInstance['params'], 'context'>>, labels?: Labels): ProviderFactory<TInstance, TDependencies>;
    /** Creates a provider factory with the supplied dependencies and default parameters. */
    factory<TInstance extends CreatableProviderInstance, TDependencies extends ProviderMoniker[]>(this: CreatableProviderFactory<TInstance, TDependencies>, dependencies: TDependencies, params?: Partial<Omit<TInstance['params'], 'context'>>, labels?: Labels): ProviderFactory<TInstance, TDependencies>;
    /** Returns instance. */
    getInstance(this: CreatableProviderFactory<TProvider>, params: TProvider['params'], { start }: GetInstanceOptions): Promise<TProvider>;
    /** Attempts to get instance and returns `undefined` when it cannot be resolved. */
    tryGetInstance(this: CreatableProviderFactory<TProvider>, params: TProvider['params'], options?: GetInstanceOptions): Promise<TProvider | undefined>;
}
//# sourceMappingURL=ProviderFactory.d.ts.map