import type { AbortAppUploadResponse, AppAccessTokenResponse, AppBrowseRequest, AppDetailRequest, AppDetailResponse, AppMoreCollectionKey, AppMoreCollectionPage, AppMoreCollectionRequest, AppMoreCollectionsRequest, AppMoreCollectionsResponse, CreatorAppsBrowseRequest, AppRuntimeAssetsResponse, DevAppAccessTokenResponse, DevPlayerResetResponse, FinalizeAppUploadResponse, InitializeAppUploadRequest, InitializeAppUploadResponse, AppLogEntryRequest, AppLogEntryResponse, AppSourceBundleResponse, AppUploadLaunchCheckPreviewResponse, AppType, AppsListResponse, AppVersionDetailResponse, AppVersionVisibility, AppVersionsListResponse, CreateAppRequest, CreateAppResponse, ContentRemixRelationsResponse, ContentLicense, DeleteAppResponse, DeleteVersionResponse, RemixScaffoldResponse, RecordAppUploadLaunchCheckRequest, RecordAppUploadLaunchCheckResponse, UploadAppSessionFileResponse, UploadAppSessionOwnedAssetResponse, UpdateAppRequest, UpdateAppResponse, UpdateVersionResponse } from '@playdrop/types';
import type { UploadAppSessionFileOptions, UploadAppSessionOwnedAssetOptions } from '../client.js';
type ApiResponseLike<T> = {
    status: number;
    body: T;
    headers: Headers;
};
type RequestExecutor = <T>(input: {
    method: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';
    path: string;
    body?: unknown;
    headers?: Record<string, string>;
    signal?: AbortSignal;
}) => Promise<ApiResponseLike<T>>;
type ErrorHandler = (response: ApiResponseLike<unknown>, defaultMessage: string) => never;
type ParseResponseBody = <T>(response: Response) => Promise<T>;
export declare function buildAppsApiClientMethods(input: {
    request: RequestExecutor;
    handleApiError: ErrorHandler;
    fetchImpl: typeof fetch;
    includeBrowserCredentials: boolean;
    resolveBaseUrl: () => string;
    resolveUrl: (base: string, path: string) => string;
    parseResponseBody: ParseResponseBody;
    resolveToken: () => Promise<string | null>;
    getClientHeaders: () => Record<string, string>;
    buildCreatorAppMutationPath: (creatorUsername: string, name?: string) => string;
    normalizeCreatorItemSlug: (value: string, field: 'creator' | 'name') => string;
    normalizeSemverInput: (version: string) => string;
    parseContentDispositionFilename: (headerValue: string | null) => string | null;
}): {
    fetchApps(options?: AppBrowseRequest): Promise<AppsListResponse>;
    fetchAppsByType(type: AppType, options?: AppBrowseRequest): Promise<AppsListResponse>;
    fetchAppsByCreator(creatorUsername: string, options?: CreatorAppsBrowseRequest): Promise<AppsListResponse>;
    fetchAppBySlug(creatorUsername: string, appName: string, options?: AppDetailRequest): Promise<AppDetailResponse>;
    fetchAppMoreCollections(creatorUsername: string, appName: string, options?: AppMoreCollectionsRequest): Promise<AppMoreCollectionsResponse>;
    fetchAppMoreCollectionPage(creatorUsername: string, appName: string, collectionKey: AppMoreCollectionKey, options?: AppMoreCollectionRequest): Promise<AppMoreCollectionPage>;
    requestAppAccessToken(appId: number): Promise<AppAccessTokenResponse>;
    sendAppLog(appId: number, entry: AppLogEntryRequest): Promise<AppLogEntryResponse>;
    createApp(creatorUsername: string, createRequest: CreateAppRequest): Promise<CreateAppResponse>;
    updateApp(creatorUsername: string, name: string, updateRequest: UpdateAppRequest): Promise<UpdateAppResponse>;
    initializeAppUpload(creatorUsername: string, appName: string, requestBody: InitializeAppUploadRequest): Promise<InitializeAppUploadResponse>;
    uploadAppSessionFile(creatorUsername: string, appName: string, sessionId: string, fileKey: string, options: UploadAppSessionFileOptions): Promise<UploadAppSessionFileResponse>;
    uploadAppSessionOwnedAsset(creatorUsername: string, appName: string, sessionId: string, uploadKey: string, options: UploadAppSessionOwnedAssetOptions): Promise<UploadAppSessionOwnedAssetResponse>;
    finalizeAppUpload(creatorUsername: string, appName: string, sessionId: string): Promise<FinalizeAppUploadResponse>;
    fetchAppUploadLaunchCheckPreview(creatorUsername: string, appName: string, sessionId: string): Promise<AppUploadLaunchCheckPreviewResponse>;
    recordAppUploadLaunchCheck(creatorUsername: string, appName: string, sessionId: string, requestBody: RecordAppUploadLaunchCheckRequest): Promise<RecordAppUploadLaunchCheckResponse>;
    abortAppUpload(creatorUsername: string, appName: string, sessionId: string): Promise<AbortAppUploadResponse>;
    fetchAppRelated(creatorUsername: string, appName: string): Promise<ContentRemixRelationsResponse>;
    requestDevAppAccessToken(appId: number, slot: number): Promise<DevAppAccessTokenResponse>;
    resetDevPlayer(appId: number, slot: number): Promise<DevPlayerResetResponse>;
    resetAllDevPlayers(appId: number): Promise<DevPlayerResetResponse>;
    listAppVersions(creatorUsername: string, appName: string): Promise<AppVersionsListResponse>;
    getAppVersion(creatorUsername: string, appName: string, version: string): Promise<AppVersionDetailResponse>;
    fetchAppRuntimeAssets(creatorUsername: string, appName: string, version: string): Promise<AppRuntimeAssetsResponse>;
    downloadAppSource(creatorUsername: string, appName: string, version: string): Promise<{
        blob: Blob;
        metadata: AppSourceBundleResponse;
    }>;
    updateAppVersion(creatorUsername: string, appName: string, version: string, updates: {
        releaseNotes?: string | null;
        visibility?: AppVersionVisibility;
        license?: ContentLicense;
        setAsCurrent?: boolean;
    }): Promise<UpdateVersionResponse>;
    deleteAppVersion(creatorUsername: string, appName: string, version: string): Promise<DeleteVersionResponse>;
    deleteApp(creatorUsername: string, name: string): Promise<DeleteAppResponse>;
    fetchRemixScaffold(creatorUsername: string, appName: string, version?: string): Promise<RemixScaffoldResponse>;
};
export {};
//# sourceMappingURL=apps.d.ts.map