import { type StorageProvider, type StorageUploadResult, type StorageFile, type StorageListOptions, type StorageProviderConfig } from "../index";
import { type Web3SignedSignFn } from "../../auth/web3-signed-builder";
/**
 * Wallet-style signer used by {@link VanaStorage} to authenticate every
 * request. For Personal Server flows this can be a registered server wallet
 * signing requests for the owner's storage namespace.
 *
 * @category Storage
 */
export interface VanaStorageSigner {
    /** EIP-191 address (`0x...`). */
    address: `0x${string}`;
    /** EIP-191 personal_sign callback (e.g. viem `account.signMessage`). */
    signMessage: Web3SignedSignFn;
}
/**
 * Configuration for {@link VanaStorage}.
 *
 * @category Storage
 */
export interface VanaStorageConfig {
    /**
     * Base URL of the vana-storage Worker. Defaults to `https://storage.vana.org`.
     */
    endpoint?: string;
    /**
     * Wallet signer used to authenticate writes and reads.
     */
    signer: VanaStorageSigner;
    /**
     * Owner namespace under which blobs are stored. Defaults to the signer address.
     */
    ownerAddress?: `0x${string}`;
    /**
     * Optional `fetch` implementation. Defaults to the global `fetch`.
     * Useful for tests and for environments that need a custom HTTP client.
     */
    fetchImpl?: typeof fetch;
}
/**
 * Storage provider that talks to the vana-storage Worker
 * (`https://storage.vana.org` by default). All requests are authenticated
 * with Web3Signed headers signed by the configured wallet.
 *
 * @remarks
 * Filenames passed to {@link VanaStorage.upload} must be of the form
 * `"{scope}/{collectedAt}"` (e.g. `"instagram.profile/2026-05-08T20:00:00.000Z"`).
 * The owner address is prepended automatically to produce the canonical
 * blob path `/v1/blobs/{owner}/{scope}/{collectedAt}`.
 *
 * @category Storage
 *
 * @example
 * ```typescript
 * import { privateKeyToAccount } from "viem/accounts";
 * import { VanaStorage } from "@opendatalabs/vana-sdk/node";
 *
 * const account = privateKeyToAccount(process.env.PRIVATE_KEY as `0x${string}`);
 * const storage = new VanaStorage({
 *   signer: {
 *     address: account.address,
 *     signMessage: (msg) => account.signMessage({ message: msg }),
 *   },
 * });
 *
 * const result = await storage.upload(
 *   new Blob([ciphertext]),
 *   "instagram.profile/2026-05-08T20:00:00.000Z",
 * );
 * ```
 */
export declare class VanaStorage implements StorageProvider {
    private readonly endpoint;
    private readonly signer;
    private readonly ownerAddress;
    private readonly fetchImpl;
    constructor(config: VanaStorageConfig);
    /**
     * Upload an encrypted blob to vana-storage.
     *
     * @param file - The blob to upload.
     * @param filename - Required relative key in the form `"{scope}/{collectedAt}"`.
     *   The owner address is prepended automatically.
     */
    upload(file: Blob, filename?: string): Promise<StorageUploadResult>;
    /**
     * Download a blob by URL. The URL must point at a path under this
     * provider's endpoint.
     */
    download(url: string): Promise<Blob>;
    /**
     * Listing is not supported by vana-storage — file discovery is handled by
     * the Gateway DataRegistry, not the storage layer.
     */
    list(_options?: StorageListOptions): Promise<StorageFile[]>;
    delete(url: string): Promise<boolean>;
    getConfig(): StorageProviderConfig;
    private signRequest;
    private pathFromUrl;
}
