import { TransactionInstruction } from '@solana/web3.js';
import { AdvancedOptions } from '../../services/EntityManager/types';
import { Configuration, StreamTrackRequest, DownloadTrackRequest, TracksApi as GeneratedTracksApi, type DeleteTrackRequest, type FavoriteTrackRequest, type UnfavoriteTrackRequest, type ShareTrackRequest, type RepostTrackRequest, type UnrepostTrackRequest, type RecordTrackDownloadRequest } from '../generated/default';
import { EntityManagerDeleteTrackRequest, EntityManagerRepostTrackRequest, EntityManagerFavoriteTrackRequest, EntityManagerUnrepostTrackRequest, EntityManagerUnfavoriteTrackRequest, EntityManagerUpdateTrackRequest, PurchaseTrackRequest, GetPurchaseTrackInstructionsRequest, EntityManagerRecordTrackDownloadRequest, UploadTrackFilesRequest, EntityManagerShareTrackRequest, type PublishTrackRequest, type PublishStemRequest, type UploadTrackFilesTask, type UpdateTrackRequestWithFiles, type CreateTrackRequestWithFiles, type TracksApiServicesConfig } from './types';
export declare class TracksApi extends GeneratedTracksApi {
    private readonly trackUploadHelper;
    private readonly storage;
    private readonly entityManager?;
    private readonly logger;
    private readonly claimableTokensClient;
    private readonly paymentRouterClient;
    private readonly solanaRelay;
    private readonly solanaClient;
    constructor(configuration: Configuration, services: TracksApiServicesConfig);
    /**
     * Get the url of the track's streamable mp3 file
     */
    getTrackStreamUrl(params: StreamTrackRequest): Promise<string>;
    /**
     * Get the url of the track's downloadable file
     */
    getTrackDownloadUrl(params: DownloadTrackRequest): Promise<string>;
    /** @hidden
     * Upload track files, does not write to chain
     */
    uploadTrackFiles(params: UploadTrackFilesRequest): UploadTrackFilesTask;
    /** @hidden
     * Publishes a track that was uploaded using storage node uploadFileV2 uploads.
     */
    publishTrack(params: PublishTrackRequest, advancedOptions?: AdvancedOptions): Promise<{
        trackId: string;
        blockHash: string;
        blockNumber: number;
        transactionHash: string;
    }>;
    /** @hidden
     * Publishes a stem that was uploaded using storage node uploadFileV2 uploads.
     */
    publishStem(params: PublishStemRequest, advancedOptions?: AdvancedOptions): Promise<{
        trackId: string;
        blockHash: string;
        blockNumber: number;
        transactionHash: string;
    }>;
    /** @hidden
     * Write track upload to chain
     */
    writeTrackToChain(userId: string, metadata: ReturnType<typeof this.trackUploadHelper.populateTrackMetadataWithUploadResponse>, advancedOptions?: AdvancedOptions): Promise<{
        trackId: string;
        blockHash: string;
        blockNumber: number;
        transactionHash: string;
    }>;
    createTrack(params: CreateTrackRequestWithFiles, requestInit?: RequestInit): Promise<import("../generated/default").CreateTrackResponse>;
    /** @hidden
     * Update a track with entity manager
     */
    updateTrackWithEntityManager(params: EntityManagerUpdateTrackRequest, advancedOptions?: AdvancedOptions): Promise<import("../../services/EntityManager/types").EntityManagerTransactionReceipt>;
    updateTrack(params: UpdateTrackRequestWithFiles, requestInit?: RequestInit): Promise<import("../generated/default").WriteResponse>;
    /** @hidden
     * Delete a track
     */
    deleteTrackWithEntityManager(params: EntityManagerDeleteTrackRequest, advancedOptions?: AdvancedOptions): Promise<import("../../services/EntityManager/types").EntityManagerTransactionReceipt>;
    deleteTrack(params: DeleteTrackRequest, requestInit?: RequestInit): Promise<import("../generated/default").WriteResponse>;
    /** @hidden
     * Favorite a track
     */
    favoriteTrackWithEntityManager(params: EntityManagerFavoriteTrackRequest, advancedOptions?: AdvancedOptions): Promise<import("../../services/EntityManager/types").EntityManagerTransactionReceipt>;
    favoriteTrack(params: FavoriteTrackRequest, requestInit?: RequestInit): Promise<import("../generated/default").WriteResponse>;
    /** @hidden
     * Unfavorite a track
     */
    unfavoriteTrackWithEntityManager(params: EntityManagerUnfavoriteTrackRequest, advancedOptions?: AdvancedOptions): Promise<import("../../services/EntityManager/types").EntityManagerTransactionReceipt>;
    unfavoriteTrack(params: UnfavoriteTrackRequest, requestInit?: RequestInit): Promise<import("../generated/default").WriteResponse>;
    /** @hidden
     * Share a track
     */
    shareTrackWithEntityManager(params: EntityManagerShareTrackRequest, advancedOptions?: AdvancedOptions): Promise<import("../../services/EntityManager/types").EntityManagerTransactionReceipt>;
    shareTrack(params: ShareTrackRequest, requestInit?: RequestInit): Promise<import("../generated/default").WriteResponse>;
    /** @hidden
     * Repost a track
     */
    repostTrackWithEntityManager(params: EntityManagerRepostTrackRequest, advancedOptions?: AdvancedOptions): Promise<import("../../services/EntityManager/types").EntityManagerTransactionReceipt>;
    repostTrack(params: RepostTrackRequest, requestInit?: RequestInit): Promise<import("../generated/default").WriteResponse>;
    /** @hidden
     * Unrepost a track
     */
    unrepostTrackWithEntityManager(params: EntityManagerUnrepostTrackRequest, advancedOptions?: AdvancedOptions): Promise<import("../../services/EntityManager/types").EntityManagerTransactionReceipt>;
    unrepostTrack(params: UnrepostTrackRequest, requestInit?: RequestInit): Promise<import("../generated/default").WriteResponse>;
    /**
     * @hidden
     *
     * Records that a track was downloaded.
     */
    recordTrackDownloadWithEntityManager(params: EntityManagerRecordTrackDownloadRequest, advancedOptions?: AdvancedOptions): Promise<import("../../services/EntityManager/types").EntityManagerTransactionReceipt>;
    recordTrackDownload(params: RecordTrackDownloadRequest, requestInit?: RequestInit): Promise<import("../generated/default").WriteResponse>;
    /**
     * Gets the Solana instructions that purchase the track
     *
     * @hidden
     */
    getPurchaseTrackInstructions(params: GetPurchaseTrackInstructionsRequest): Promise<{
        instructions: {
            routeInstruction: TransactionInstruction;
            memoInstruction: TransactionInstruction;
            locationMemoInstruction: TransactionInstruction | undefined;
        };
        total: bigint;
    }>;
    /**
     * Purchases stream or download access to a track
     *
     * @hidden
     */
    purchaseTrack(params: PurchaseTrackRequest): Promise<string>;
    /**
     * Generates a new track ID
     *
     * @hidden
     */
    generateTrackId(): Promise<number>;
}
