import { type aether } from '../../aether/aether';
import { type Factory } from './factory';
import { type Sink, type Source, type Spec } from './telem';
export interface Provider {
    clusterKey: string;
    key: string;
    equals: (other: Provider) => boolean;
    registerFactory: (f: Factory) => void;
    create: <T>(props: Spec) => T;
}
export declare const useProvider: (ctx: aether.Context) => Provider;
export declare const setProvider: (ctx: aether.Context, prov: Provider) => void;
export declare const registerFactory: (ctx: aether.Context, f: Factory) => void;
export declare const useSource: <V>(ctx: aether.Context, spec: Spec, prev: Source<V>) => Promise<Source<V>>;
export declare const useSink: <V>(ctx: aether.Context, spec: Spec, prev: Sink<V>) => Promise<Sink<V>>;
