import type { Volume as FlyVolume } from "@distilled.cloud/fly-io/machines";
import * as machines from "@distilled.cloud/fly-io/machines";
import * as Effect from "effect/Effect";
import type { DiskSpec } from "./MountVolume.ts";
export declare const DEFAULT_VOLUME_REGION = "iad";
export declare const MIN_SIZE_GB = 1;
declare const VolumeNotCreated_base: new = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
readonly _tag: "Fly.VolumeNotCreated";
} & Readonly;
export declare class VolumeNotCreated extends VolumeNotCreated_base<{
name: string;
appName: string;
}> {
}
export declare const destroying: (state: string | undefined) => state is "destroyed" | "pending_destroy" | "scheduled_for_destruction";
export declare const getVolumeById: (appName: string, volumeId: string) => Effect.Effect;
export declare const listVolumesByApp: (appName: string) => Effect.Effect;
export declare const listVolumeGroup: (appName: string, name: string, region: string) => Effect.Effect;
export declare const waitUntilVolumeReady: (appName: string, volumeId: string) => Effect.Effect;
export declare const waitUntilVolumeGone: (appName: string, volumeId: string) => Effect.Effect;
export declare const pathKey: (path: string) => string;
export declare const volumeGroupName: (id: string, disk: Pick) => Effect.Effect;
export declare const createVolume: (input: {
appName: string;
name: string;
region: string;
disk: DiskSpec;
}) => Effect.Effect;
export declare const syncVolume: (appName: string, volume: FlyVolume, disk: DiskSpec) => Effect.Effect;
/**
* Observe-ensure-sync a Fly volume group (`name` shared, `count`
* independent volumes). Extras are left in place for the caller to
* delete after the Machines that mount them are gone.
*/
export declare const ensureVolumeGroup: (input: {
appName: string;
name: string;
region: string;
count: number;
disk: DiskSpec;
preferIds?: readonly string[];
}) => Effect.Effect<{
volumes: FlyVolume[];
extras: FlyVolume[];
}, import("@distilled.cloud/hetzner").BadRequest | import("@distilled.cloud/hetzner").Forbidden | import("@distilled.cloud/hetzner").NotFound | VolumeNotCreated | machines.FlyIoOpError, machines.FlyIoOpContext>;
export declare const deleteVolume: (appName: string, volumeId: string) => Effect.Effect;
export declare const listOwnedVolumes: () => Effect.Effect<{
appName: string;
volumeId: string;
volume: FlyVolume;
}[], import("./Environment.ts").FlyOrgNotFound | import("@distilled.cloud/hetzner").Forbidden | machines.FlyIoOpError, machines.FlyIoOpContext>;
export {};
//# sourceMappingURL=Volume.d.ts.map