import * as T from '../types';
export type RequiredDependenciesOf<Manifest extends T.SDKManifest> = {
    [K in keyof Manifest['dependencies']]: Exclude<Manifest['dependencies'][K], undefined>['optional'] extends false ? K : never;
}[keyof Manifest['dependencies']];
export type OptionalDependenciesOf<Manifest extends T.SDKManifest> = Exclude<keyof Manifest['dependencies'], RequiredDependenciesOf<Manifest>>;
type DependencyRequirement = {
    kind: 'running';
    healthChecks: Array<T.HealthCheckId>;
    versionRange: string;
} | {
    kind: 'exists';
    versionRange: string;
};
export type CurrentDependenciesResult<Manifest extends T.SDKManifest> = {
    [K in RequiredDependenciesOf<Manifest>]: DependencyRequirement;
} & {
    [K in OptionalDependenciesOf<Manifest>]?: DependencyRequirement;
};
export declare function setupDependencies<Manifest extends T.SDKManifest>(fn: (options: {
    effects: T.Effects;
}) => Promise<CurrentDependenciesResult<Manifest>>): (effects: T.Effects) => Promise<null>;
export {};
