import { TransactionInstruction } from '@solana/web3.js';
import type { EntityManagerService, ClaimableTokensClient, PaymentRouterClient, SolanaRelayService } from '../../services';
import { AdvancedOptions } from '../../services/EntityManager/types';
import type { LoggerService } from '../../services/Logger';
import type { SolanaClient } from '../../services/Solana/programs/SolanaClient';
import type { StorageService } from '../../services/Storage';
import { Configuration, StreamTrackRequest, DownloadTrackRequest, TracksApi as GeneratedTracksApi } from '../generated/default';
import { DeleteTrackRequest, RepostTrackRequest, FavoriteTrackRequest, UnrepostTrackRequest, UnfavoriteTrackRequest, UpdateTrackRequest, UploadTrackRequest, PurchaseTrackRequest, GetPurchaseTrackInstructionsRequest, RecordTrackDownloadRequest, UploadTrackFilesRequest, ShareTrackRequest } from './types';
export declare class TracksApi extends GeneratedTracksApi {
    private readonly storage;
    private readonly entityManager;
    private readonly logger;
    private readonly claimableTokensClient;
    private readonly paymentRouterClient;
    private readonly solanaRelay;
    private readonly solanaClient;
    private readonly trackUploadHelper;
    constructor(configuration: Configuration, storage: StorageService, entityManager: EntityManagerService, logger: LoggerService, claimableTokensClient: ClaimableTokensClient, paymentRouterClient: PaymentRouterClient, solanaRelay: SolanaRelayService, solanaClient: SolanaClient);
    /**
     * 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): Promise<{
        trackSegments: never[];
        trackCid: string | undefined;
        previewCid: string | undefined;
        origFileCid: string;
        origFilename: string | undefined;
        audioUploadId: string;
        coverArtSizes: string | undefined;
        duration: number;
        bpm: string | number | null | undefined;
        musicalKey: string | null | undefined;
        audioAnalysisErrorCount: number;
        title: string;
        description?: string | undefined;
        trackId?: number | undefined;
        genre?: import("../..").Genre | null | undefined;
        aiAttributionUserId?: number | undefined;
        fieldVisibility?: {
            mood?: boolean | undefined;
            tags?: boolean | undefined;
            genre?: boolean | undefined;
            share?: boolean | undefined;
            playCount?: boolean | undefined;
            remixes?: boolean | undefined;
        } | undefined;
        mood?: import("../..").Mood | null | undefined;
        tags?: string | undefined;
        isrc?: string | null | undefined;
        isUnlisted?: boolean | undefined;
        iswc?: string | null | undefined;
        license?: string | null | undefined;
        isStreamGated?: boolean | undefined;
        streamConditions?: {
            nftCollection?: {
                name: string;
                chain: "eth";
                address: string;
                standard: "ERC721" | "ERC1155";
                slug: string;
                imageUrl?: string | undefined;
                externalLink?: string | null | undefined;
            } | {
                name: string;
                chain: "sol";
                address: string;
                imageUrl?: string | undefined;
                externalLink?: string | null | undefined;
            } | undefined;
        } | {
            followUserId: number;
        } | {
            tipUserId: number;
        } | {
            usdcPurchase: {
                price: number;
                splits?: any;
            };
        } | null | undefined;
        isDownloadGated?: boolean | undefined;
        downloadConditions?: {
            nftCollection?: {
                name: string;
                chain: "eth";
                address: string;
                standard: "ERC721" | "ERC1155";
                slug: string;
                imageUrl?: string | undefined;
                externalLink?: string | null | undefined;
            } | {
                name: string;
                chain: "sol";
                address: string;
                imageUrl?: string | undefined;
                externalLink?: string | null | undefined;
            } | undefined;
        } | {
            followUserId: number;
        } | {
            tipUserId: number;
        } | {
            usdcPurchase: {
                price: number;
                splits?: any;
            };
        } | null | undefined;
        releaseDate?: Date | undefined;
        remixOf?: {
            tracks: {
                parentTrackId: number;
            }[];
        } | undefined;
        stemOf?: {
            parentTrackId: number;
            category: import("../..").StemCategory;
        } | undefined;
        previewStartSeconds?: number | undefined;
        placementHosts?: string | undefined;
        isDownloadable?: boolean | undefined;
        isOriginalAvailable?: boolean | undefined;
        ddexReleaseIds?: Record<string, string> | null | undefined;
        ddexApp?: string | undefined;
        artists?: {
            name: string;
            roles: string[];
            sequence_number?: number | undefined;
        }[] | null | undefined;
        resourceContributors?: {
            name: string;
            roles: string[];
            sequence_number?: number | undefined;
        }[] | null | undefined;
        indirectResourceContributors?: {
            name: string;
            roles: string[];
            sequence_number?: number | undefined;
        }[] | null | undefined;
        rightsController?: {
            name: string;
            roles: string[];
            rights_share_unknown?: string | undefined;
        } | null | undefined;
        copyrightLine?: {
            year: string;
            text: string;
        } | null | undefined;
        producerCopyrightLine?: {
            year: string;
            text: string;
        } | null | undefined;
        parentalWarningType?: string | null | undefined;
        isCustomBpm?: boolean | undefined;
        isCustomMusicalKey?: boolean | undefined;
        commentsDisabled?: boolean | undefined;
        isScheduledRelease?: boolean | undefined;
    }>;
    /** @hidden
     * Write track upload to chain
     */
    writeTrackToChain(userId: string, metadata: ReturnType<typeof this.trackUploadHelper.populateTrackMetadataWithUploadResponse>, advancedOptions?: AdvancedOptions): Promise<{
        trackId: string;
        blockHash: string;
        blockNumber: number;
    }>;
    /** @hidden
     * Upload a track
     */
    uploadTrack(params: UploadTrackRequest, advancedOptions?: AdvancedOptions): Promise<{
        trackId: string;
        blockHash: string;
        blockNumber: number;
    }>;
    /** @hidden
     * Update a track
     */
    updateTrack(params: UpdateTrackRequest, advancedOptions?: AdvancedOptions): Promise<import("../../services/EntityManager/types").EntityManagerTransactionReceipt>;
    /** @hidden
     * Delete a track
     */
    deleteTrack(params: DeleteTrackRequest, advancedOptions?: AdvancedOptions): Promise<import("../../services/EntityManager/types").EntityManagerTransactionReceipt>;
    /** @hidden
     * Favorite a track
     */
    favoriteTrack(params: FavoriteTrackRequest, advancedOptions?: AdvancedOptions): Promise<import("../../services/EntityManager/types").EntityManagerTransactionReceipt>;
    /** @hidden
     * Unfavorite a track
     */
    unfavoriteTrack(params: UnfavoriteTrackRequest, advancedOptions?: AdvancedOptions): Promise<import("../../services/EntityManager/types").EntityManagerTransactionReceipt>;
    /** @hidden
     * Share a track
     */
    shareTrack(params: ShareTrackRequest, advancedOptions?: AdvancedOptions): Promise<import("../../services/EntityManager/types").EntityManagerTransactionReceipt>;
    /** @hidden
     * Repost a track
     */
    repostTrack(params: RepostTrackRequest, advancedOptions?: AdvancedOptions): Promise<import("../../services/EntityManager/types").EntityManagerTransactionReceipt>;
    /** @hidden
     * Unrepost a track
     */
    unrepostTrack(params: UnrepostTrackRequest, advancedOptions?: AdvancedOptions): Promise<import("../../services/EntityManager/types").EntityManagerTransactionReceipt>;
    /**
     * @hidden
     *
     * Records that a track was downloaded.
     */
    recordTrackDownload(params: RecordTrackDownloadRequest, advancedOptions?: AdvancedOptions): Promise<import("../../services/EntityManager/types").EntityManagerTransactionReceipt>;
    /**
     * 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>;
}
