import { TransactionInstruction } from '@solana/web3.js';
import type { ClaimableTokensClient, PaymentRouterClient, SolanaRelayService, StorageService } from '../../services';
import type { EntityManagerService, AdvancedOptions } from '../../services/EntityManager/types';
import type { LoggerService } from '../../services/Logger';
import type { SolanaClient } from '../../services/Solana/programs/SolanaClient';
import { type Configuration } from '../generated/default';
import { DeleteAlbumRequest, FavoriteAlbumRequest, getAlbumRequest, getAlbumsRequest, getAlbumTracksRequest, GetPurchaseAlbumInstructionsRequest, PurchaseAlbumRequest, RepostAlbumRequest, UnfavoriteAlbumRequest, UnrepostAlbumRequest, UpdateAlbumRequest, UploadAlbumRequest, CreateAlbumRequest } from './types';
export declare class AlbumsApi {
    private logger;
    private claimableTokensClient;
    private paymentRouterClient;
    private solanaRelay;
    private solanaClient;
    private readonly playlistsApi;
    constructor(configuration: Configuration, storage: StorageService, entityManager: EntityManagerService, logger: LoggerService, claimableTokensClient: ClaimableTokensClient, paymentRouterClient: PaymentRouterClient, solanaRelay: SolanaRelayService, solanaClient: SolanaClient);
    getAlbum(params: getAlbumRequest): Promise<import("../generated/default").PlaylistResponse>;
    getBulkAlbums(params: getAlbumsRequest): Promise<import("../generated/default").PlaylistResponse>;
    getAlbumTracks(params: getAlbumTracksRequest): Promise<import("../generated/default").PlaylistTracksResponse>;
    /** @hidden
     * Create an album from existing tracks
     */
    createAlbum(params: CreateAlbumRequest, advancedOptions?: AdvancedOptions): Promise<{
        albumId: string | null;
        playlistId: string | null;
        blockHash: string;
        blockNumber: number;
    }>;
    /** @hidden
     * Upload an album
     * Uploads the specified tracks and combines them into an album
     */
    uploadAlbum(params: UploadAlbumRequest, advancedOptions?: AdvancedOptions): Promise<{
        blockHash: string;
        blockNumber: number;
        albumId: string | null;
    }>;
    /** @hidden
     * Update an album
     */
    updateAlbum(params: UpdateAlbumRequest, advancedOptions?: AdvancedOptions): Promise<Pick<import("web3-core").TransactionReceipt, "blockHash" | "blockNumber">>;
    /** @hidden
     * Delete an album
     */
    deleteAlbum(params: DeleteAlbumRequest, advancedOptions?: AdvancedOptions): Promise<Pick<import("web3-core").TransactionReceipt, "blockHash" | "blockNumber">>;
    /** @hidden
     * Favorite an album
     */
    favoriteAlbum(params: FavoriteAlbumRequest, advancedOptions?: AdvancedOptions): Promise<Pick<import("web3-core").TransactionReceipt, "blockHash" | "blockNumber">>;
    /** @hidden
     * Unfavorite an album
     */
    unfavoriteAlbum(params: UnfavoriteAlbumRequest, advancedOptions?: AdvancedOptions): Promise<Pick<import("web3-core").TransactionReceipt, "blockHash" | "blockNumber">>;
    /** @hidden
     * Repost an album
     */
    repostAlbum(params: RepostAlbumRequest, advancedOptions?: AdvancedOptions): Promise<Pick<import("web3-core").TransactionReceipt, "blockHash" | "blockNumber">>;
    /** @hidden
     * Unrepost an album
     */
    unrepostAlbum(params: UnrepostAlbumRequest, advancedOptions?: AdvancedOptions): Promise<Pick<import("web3-core").TransactionReceipt, "blockHash" | "blockNumber">>;
    /**
     * Gets the Solana instructions that purchase the album
     *
     * @hidden
     */
    getPurchaseAlbumInstructions(params: GetPurchaseAlbumInstructionsRequest): Promise<{
        instructions: {
            routeInstruction: TransactionInstruction;
            memoInstruction: TransactionInstruction;
            locationMemoInstruction: TransactionInstruction | undefined;
        };
        total: bigint;
    }>;
    /**
     * Purchases stream access to an album
     *
     * @hidden
     */
    purchaseAlbum(params: PurchaseAlbumRequest): Promise<string>;
}
