import type { SatelliteDid } from '@junobuild/ic-client/actor';
import type { Asset, AssetKey, Storage } from '@junobuild/storage';
import type { ReadOptions } from '../../core/types/call-options';
import type { ListParams } from '../../core/types/list';
import type { SatelliteOptions } from '../../core/types/satellite';
import type { Assets } from '../types/storage';
/**
 * Uploads a blob to the storage.
 *
 * @param {SatelliteOptions} [params.satellite] - Options to specify a satellite in a NodeJS environment only. In browser environments, the satellite configuration is inherited from the initialization through `initSatellite()`.
 * @returns {Promise<AssetKey>} A promise that resolves to the asset key.
 */
export declare const uploadBlob: (params: Storage & {
    satellite?: SatelliteOptions;
}) => Promise<AssetKey>;
/**
 * Uploads a file to the storage.
 *
 * @param {SatelliteOptions} [params.satellite] - Options to specify a satellite in a NodeJS environment only. In browser environments, the satellite configuration is inherited from the initialization through `initSatellite()`.
 * @returns {Promise<AssetKey>} A promise that resolves to the asset key.
 */
export declare const uploadFile: (params: Partial<Pick<Storage, "filename">> & Omit<Storage, "filename" | "data"> & {
    data: File;
} & {
    satellite?: SatelliteOptions;
}) => Promise<AssetKey>;
/**
 * Lists assets in a collection with optional filtering.
 *
 * @param {Object} params - The parameters for listing the assets.
 * @param {string} params.collection - The name of the collection.
 * @param {ListParams} [params.filter] - The filter parameters.
 * @param {ReadOptions} [params.options] - Call options controlling certification. Defaults to uncertified reads for performance unless specified.
 * @param {SatelliteOptions} [params.satellite] - Options to specify a satellite in a NodeJS environment only. In browser environments, the satellite configuration is inherited from the initialization through `initSatellite()`.
 * @returns {Promise<Assets>} A promise that resolves to the list of assets.
 */
export declare const listAssets: ({ collection, filter, satellite: satelliteOptions, options }: {
    collection: string;
    filter?: ListParams;
    satellite?: SatelliteOptions;
    options?: ReadOptions;
}) => Promise<Assets>;
/**
 * Counts assets in a collection with optional filtering.
 *
 * @param {Object} params - The parameters for counting the assets.
 * @param {string} params.collection - The name of the collection.
 * @param {ListParams} [params.filter] - The filter parameters for narrowing down the count.
 * @param {ReadOptions} [params.options] - Call options controlling certification. Defaults to uncertified reads for performance unless specified.
 * @param {SatelliteOptions} [params.satellite] - Options to specify a satellite in a NodeJS environment only. In browser environments, the satellite configuration is inherited from the initialization through `initSatellite()`.
 * @returns {Promise<bigint>} A promise that resolves to the count of assets as a bigint.
 */
export declare const countAssets: ({ collection, filter, satellite: satelliteOptions, options }: {
    collection: string;
    filter?: ListParams;
    satellite?: SatelliteOptions;
    options?: ReadOptions;
}) => Promise<bigint>;
/**
 * Deletes an asset from the storage.
 *
 * @param {Object} params - The parameters for deleting the asset.
 * @param {string} params.collection - The name of the collection.
 * @param {string} params.fullPath - The full path of the asset.
 * @param {SatelliteOptions} [params.satellite] - Options to specify a satellite in a NodeJS environment only. In browser environments, the satellite configuration is inherited from the initialization through `initSatellite()`.
 * @returns {Promise<void>} A promise that resolves when the asset is deleted.
 */
export declare const deleteAsset: ({ collection, fullPath, satellite }: {
    collection: string;
    satellite?: SatelliteOptions;
} & Pick<AssetKey, "fullPath">) => Promise<void>;
/**
 * Deletes multiple assets from the storage.
 *
 * @param {Object} params - The parameters for deleting the assets.
 * @param {Array} params.assets - The list of assets with their collections and full paths.
 * @param {SatelliteOptions} [params.satellite] - Options to specify a satellite in a NodeJS environment only. In browser environments, the satellite configuration is inherited from the initialization through `initSatellite()`.
 * @returns {Promise<void>} A promise that resolves when the assets are deleted.
 */
export declare const deleteManyAssets: ({ assets, satellite }: {
    assets: ({
        collection: string;
    } & Pick<AssetKey, "fullPath">)[];
    satellite?: SatelliteOptions;
}) => Promise<void>;
/**
 * Deletes multiple assets from a collection based on filtering criteria.
 *
 * @param {Object} params - The parameters for deleting the assets.
 * @param {string} params.collection - The name of the collection from which to delete assets.
 * @param {ListParams} [params.filter] - The filter criteria to match assets for deletion.
 * @param {SatelliteOptions} [params.satellite] - Options to specify a satellite in a NodeJS environment only. In browser environments, the satellite configuration is inherited from the initialization through `initSatellite()`.
 * @returns {Promise<void>} A promise that resolves when the assets matching the filter criteria are deleted.
 */
export declare const deleteFilteredAssets: ({ collection, satellite: satelliteOptions, filter }: {
    collection: string;
    satellite?: SatelliteOptions;
    filter?: ListParams;
}) => Promise<void>;
/**
 * Retrieves an asset from the storage.
 *
 * @param {Object} params - The parameters for retrieving the asset.
 * @param {string} params.collection - The name of the collection.
 * @param {string} params.fullPath - The full path of the asset.
 * @param {ReadOptions} [params.options] - Call options controlling certification. Defaults to uncertified reads for performance unless specified.
 * @param {SatelliteOptions} [params.satellite] - Options to specify a satellite in a NodeJS environment only. In browser environments, the satellite configuration is inherited from the initialization through `initSatellite()`.
 * @returns {Promise<AssetNoContent | undefined>} A promise that resolves to the asset or undefined if not found.
 */
export declare const getAsset: ({ satellite, options, ...rest }: {
    collection: string;
    satellite?: SatelliteOptions;
    options?: ReadOptions;
} & Pick<AssetKey, "fullPath">) => Promise<SatelliteDid.AssetNoContent | undefined>;
/**
 * Retrieves multiple assets from the storage.
 *
 * @param {Object} params - The parameters for retrieving the assets.
 * @param {Array} params.assets - The list of assets with their collections and full paths.
 * @param {ReadOptions} [params.options] - Call options controlling certification. Defaults to uncertified reads for performance unless specified.
 * @param {SatelliteOptions} [params.satellite] - Options to specify a satellite in a NodeJS environment only. In browser environments, the satellite configuration is inherited from the initialization through `initSatellite()`.
 * @returns {Promise<Array<AssetNoContent | undefined>>} A promise that resolves to an array of assets or undefined if not found.
 */
export declare const getManyAssets: ({ satellite, options, ...rest }: {
    assets: ({
        collection: string;
    } & Pick<AssetKey, "fullPath">)[];
    satellite?: SatelliteOptions;
    options?: ReadOptions;
}) => Promise<(SatelliteDid.AssetNoContent | undefined)[]>;
/**
 * Returns a public URL for accessing a specific asset stored on a Satellite.
 *
 * This URL can be used to:
 * - Open the file directly in a browser
 * - Embed the asset in HTML elements like `<img src="...">`, `<video src="...">`, or `<a href="...">`
 * - Programmatically download or display the asset in your application
 *
 * ### Example
 * ```ts
 * const url = downloadUrl({
 *   assetKey: {
 *     fullPath: '/images/logo.png',
 *   }
 * });
 *
 * // Usage in an <img> tag
 * <img src={url} alt="Logo" />
 * ```
 *
 * @param {Object} params - Parameters for generating the URL.
 * @param {Object} params.assetKey - Identifies the asset to generate the URL for.
 * @param {string} params.assetKey.fullPath - The full path of the asset (e.g., `/folder/file.jpg`).
 * @param {string} [params.assetKey.token] - Optional access token for accessing protected assets.
 * @param {SatelliteOptions} [params.satellite] - Options to specify a satellite in a NodeJS environment only. In browser environments, the satellite configuration is inherited from the initialization through `initSatellite()`.
 * @returns {string} A full URL pointing to the asset.
 */
export declare const downloadUrl: ({ assetKey: { fullPath, token }, satellite: satelliteOptions }: {
    assetKey: Pick<Asset, "fullPath" | "token">;
} & {
    satellite?: SatelliteOptions;
}) => string;
