import type { CreateGameIdeaRequest, CreateGameIdeaResponse, GameIdeaDetailResponse, GameIdeaStatusResponse, GameIdeasListRequest, GameIdeasListResponse, RemixCandidatesResponse, ShipGameIdeaRequest, ShipGameIdeaResponse, StartGameIdeaRequest, StartGameIdeaResponse, UpdateGameIdeaRequest, UpdateGameIdeaResponse } from '@playdrop/types';
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 type CreateGameIdeaOptions = {
    payload: CreateGameIdeaRequest;
    image?: File | Blob;
    filename?: string;
};
export declare function buildGameIdeasApiClientMethods(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>;
}): {
    createGameIdea(options: CreateGameIdeaOptions): Promise<CreateGameIdeaResponse>;
    listGameIdeas(options?: GameIdeasListRequest): Promise<GameIdeasListResponse>;
    getGameIdea(idOrSlug: string): Promise<GameIdeaDetailResponse>;
    getGameIdeaStatus(idOrSlug: string): Promise<GameIdeaStatusResponse>;
    updateGameIdea(idOrSlug: string, body: UpdateGameIdeaRequest): Promise<UpdateGameIdeaResponse>;
    startGameIdea(idOrSlug: string, body?: StartGameIdeaRequest): Promise<StartGameIdeaResponse>;
    shipGameIdea(idOrSlug: string, body: ShipGameIdeaRequest): Promise<ShipGameIdeaResponse>;
    fetchRemixCandidates(options?: {
        q?: string;
        limit?: number;
        offset?: number;
    }): Promise<RemixCandidatesResponse>;
};
export {};
//# sourceMappingURL=game-ideas.d.ts.map