UNPKG

@ley0x/better-auth-lastfm

Version:

Last.fm authentication plugin for BetterAuth

89 lines (84 loc) 4.63 kB
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 };