import * as better_auth from 'better-auth';

interface LastfmPluginOptions {
    /**
     * Last.fm API key
     */
    apiKey: string;
    /**
     * Last.fm shared secret for API signature generation
     */
    sharedSecret: string;
    /**
     * Base URL for your application (used for callback URL generation)
     * @default process.env.BETTER_AUTH_URL || 'http://localhost:3000'
     */
    baseUrl?: string;
    /**
     * Custom redirect path after successful authentication
     * @default '/dashboard'
     */
    redirectTo?: string;
}
interface LastfmSession {
    key: string;
    name: string;
    subscriber: number;
}
interface LastfmAuthResponse {
    session: LastfmSession;
}
interface LastfmUserProfile {
    username: string;
    sessionKey: string;
}

/**
 * Last.fm authentication plugin for BetterAuth
 *
 * Provides Last.fm authentication using their custom API flow (not OAuth)
 * Creates a session with the Last.fm session key for subsequent API calls
 */
declare function lastfmPlugin(options: LastfmPluginOptions): {
    id: "lastfm";
    endpoints: {
        '/lastfm/signin': better_auth.StrictEndpoint<"/lastfm/signin", {
            method: "GET";
        }, {
            status: ("OK" | "CREATED" | "ACCEPTED" | "NO_CONTENT" | "MULTIPLE_CHOICES" | "MOVED_PERMANENTLY" | "FOUND" | "SEE_OTHER" | "NOT_MODIFIED" | "TEMPORARY_REDIRECT" | "BAD_REQUEST" | "UNAUTHORIZED" | "PAYMENT_REQUIRED" | "FORBIDDEN" | "NOT_FOUND" | "METHOD_NOT_ALLOWED" | "NOT_ACCEPTABLE" | "PROXY_AUTHENTICATION_REQUIRED" | "REQUEST_TIMEOUT" | "CONFLICT" | "GONE" | "LENGTH_REQUIRED" | "PRECONDITION_FAILED" | "PAYLOAD_TOO_LARGE" | "URI_TOO_LONG" | "UNSUPPORTED_MEDIA_TYPE" | "RANGE_NOT_SATISFIABLE" | "EXPECTATION_FAILED" | "I'M_A_TEAPOT" | "MISDIRECTED_REQUEST" | "UNPROCESSABLE_ENTITY" | "LOCKED" | "FAILED_DEPENDENCY" | "TOO_EARLY" | "UPGRADE_REQUIRED" | "PRECONDITION_REQUIRED" | "TOO_MANY_REQUESTS" | "REQUEST_HEADER_FIELDS_TOO_LARGE" | "UNAVAILABLE_FOR_LEGAL_REASONS" | "INTERNAL_SERVER_ERROR" | "NOT_IMPLEMENTED" | "BAD_GATEWAY" | "SERVICE_UNAVAILABLE" | "GATEWAY_TIMEOUT" | "HTTP_VERSION_NOT_SUPPORTED" | "VARIANT_ALSO_NEGOTIATES" | "INSUFFICIENT_STORAGE" | "LOOP_DETECTED" | "NOT_EXTENDED" | "NETWORK_AUTHENTICATION_REQUIRED") | better_auth.Status;
            body: ({
                message?: string;
                code?: string;
                cause?: unknown;
            } & Record<string, any>) | undefined;
            headers: HeadersInit;
            statusCode: number;
            name: string;
            message: string;
            stack?: string;
        }>;
        '/lastfm/callback': better_auth.StrictEndpoint<"/lastfm/callback", {
            method: "GET";
        }, {
            status: ("OK" | "CREATED" | "ACCEPTED" | "NO_CONTENT" | "MULTIPLE_CHOICES" | "MOVED_PERMANENTLY" | "FOUND" | "SEE_OTHER" | "NOT_MODIFIED" | "TEMPORARY_REDIRECT" | "BAD_REQUEST" | "UNAUTHORIZED" | "PAYMENT_REQUIRED" | "FORBIDDEN" | "NOT_FOUND" | "METHOD_NOT_ALLOWED" | "NOT_ACCEPTABLE" | "PROXY_AUTHENTICATION_REQUIRED" | "REQUEST_TIMEOUT" | "CONFLICT" | "GONE" | "LENGTH_REQUIRED" | "PRECONDITION_FAILED" | "PAYLOAD_TOO_LARGE" | "URI_TOO_LONG" | "UNSUPPORTED_MEDIA_TYPE" | "RANGE_NOT_SATISFIABLE" | "EXPECTATION_FAILED" | "I'M_A_TEAPOT" | "MISDIRECTED_REQUEST" | "UNPROCESSABLE_ENTITY" | "LOCKED" | "FAILED_DEPENDENCY" | "TOO_EARLY" | "UPGRADE_REQUIRED" | "PRECONDITION_REQUIRED" | "TOO_MANY_REQUESTS" | "REQUEST_HEADER_FIELDS_TOO_LARGE" | "UNAVAILABLE_FOR_LEGAL_REASONS" | "INTERNAL_SERVER_ERROR" | "NOT_IMPLEMENTED" | "BAD_GATEWAY" | "SERVICE_UNAVAILABLE" | "GATEWAY_TIMEOUT" | "HTTP_VERSION_NOT_SUPPORTED" | "VARIANT_ALSO_NEGOTIATES" | "INSUFFICIENT_STORAGE" | "LOOP_DETECTED" | "NOT_EXTENDED" | "NETWORK_AUTHENTICATION_REQUIRED") | better_auth.Status;
            body: ({
                message?: string;
                code?: string;
                cause?: unknown;
            } & Record<string, any>) | undefined;
            headers: HeadersInit;
            statusCode: number;
            name: string;
            message: string;
            stack?: string;
        } | {
            error: string;
        }>;
    };
};

/**
 * Creates a Last.fm API signature as required by their authentication flow
 * @param params - Object containing API parameters
 * @param secret - Last.fm shared secret
 * @returns MD5 hash of sorted parameters + secret
 */
declare function createLastfmApiSignature(params: Record<string, string>, secret: string): string;

export { type LastfmAuthResponse, type LastfmPluginOptions, type LastfmSession, type LastfmUserProfile, createLastfmApiSignature, lastfmPlugin };
