UNPKG

@remcostoeten/fync

Version:

A unified TypeScript library for easy access to popular APIs (GitHub, Spotify, GitLab, etc.)

112 lines 5.29 kB
import { createSpotifyAuth, isTokenExpired, SPOTIFY_SCOPES, shouldRefreshToken } from "./auth"; import type { TChainableClient, TRequestOptions, TSpotifyClientConfig } from "./services/spotify-client"; import type { TSpotifyAlbum, TSpotifyArtist, TSpotifyAudioAnalysis, TSpotifyAudioFeatures, TSpotifyAuthenticationError, TSpotifyConfig, TSpotifyContext, TSpotifyExternalUrls, TSpotifyFollowers, TSpotifyImage, TSpotifyPagingObject, TSpotifyPlaybackState, TSpotifyPlayerDevice, TSpotifyPlaylist, TSpotifyPlaylistTrack, TSpotifyRecentlyPlayedItem, TSpotifyRecentlyPlayedResponse, TSpotifyScope, TSpotifySearchResult, TSpotifySection, TSpotifySegment, TSpotifyTimeInterval, TSpotifyTokenResponse, TSpotifyTrack, TSpotifyUser } from "./types"; type TSpotify = { api: TChainableClient; user(userId: string): TUserClient; me: TAuthenticatedUserClient; player: TPlayerClient; playlist(playlistId: string): TPlaylistClient; search: TSearchClient; library: TLibraryClient; }; type TUserClient = { get(): Promise<TSpotifyUser>; playlists: { get(options?: TRequestOptions): Promise<TSpotifyPagingObject<TSpotifyPlaylist>>; }; chain: TChainableClient; }; type TAuthenticatedUserClient = { get(): Promise<TSpotifyUser>; playlists: { get(options?: TRequestOptions): Promise<TSpotifyPagingObject<TSpotifyPlaylist>>; }; tracks: { get(options?: TRequestOptions): Promise<TSpotifyPagingObject<TSpotifyTrack>>; }; albums: { get(options?: TRequestOptions): Promise<TSpotifyPagingObject<TSpotifyAlbum>>; }; artists: { get(options?: TRequestOptions): Promise<TSpotifyPagingObject<TSpotifyArtist>>; }; recentlyPlayed: { get(options?: TRequestOptions): Promise<TSpotifyRecentlyPlayedResponse>; }; chain: TChainableClient; }; type TPlayerClient = { devices(): Promise<{ devices: TSpotifyPlayerDevice[]; }>; currentlyPlaying(): Promise<TSpotifyPlaybackState>; chain: TChainableClient; }; type TPlaylistClient = { get(): Promise<TSpotifyPlaylist>; tracks: { get(options?: TRequestOptions): Promise<TSpotifyPagingObject<TSpotifyPlaylistTrack>>; }; chain: TChainableClient; }; type TSearchClient = { tracks(query: string, options?: TRequestOptions): Promise<TSpotifySearchResult>; artists(query: string, options?: TRequestOptions): Promise<TSpotifySearchResult>; albums(query: string, options?: TRequestOptions): Promise<TSpotifySearchResult>; playlists(query: string, options?: TRequestOptions): Promise<TSpotifySearchResult>; shows(query: string, options?: TRequestOptions): Promise<TSpotifySearchResult>; episodes(query: string, options?: TRequestOptions): Promise<TSpotifySearchResult>; chain: TChainableClient; }; type TLibraryClient = { savedTracks: { get(options?: TRequestOptions): Promise<TSpotifyPagingObject<TSpotifyTrack>>; }; savedAlbums: { get(options?: TRequestOptions): Promise<TSpotifyPagingObject<TSpotifyAlbum>>; }; savedShows: { get(options?: TRequestOptions): Promise<TSpotifyPagingObject<unknown>>; }; savedEpisodes: { get(options?: TRequestOptions): Promise<TSpotifyPagingObject<unknown>>; }; chain: TChainableClient; }; /** * Creates a new Spotify Web API client * * @param config - Configuration for the Spotify client * @param config.token - Spotify access token from OAuth 2.0 flow (required) * @param config.baseUrl - Custom Spotify API URL (default: https://api.spotify.com/v1) * @param config.cache - Enable response caching (default: false) * @param config.cacheTTL - Cache time-to-live in milliseconds (default: 300000) * @param config.timeout - Request timeout in milliseconds (default: 30000) * * @returns Spotify client instance with access to user data, playlists, player controls, and search * * @example * ```typescript * const spotify = Spotify({ * token: process.env.SPOTIFY_ACCESS_TOKEN, * cache: true * }); * * // Get current user profile * const user = await spotify.me.get(); * * // Search for tracks * const tracks = await spotify.search.tracks('bohemian rhapsody'); * * // Control playback * await spotify.player.play({ uris: ['spotify:track:4iV5W9uYEdYUVa79Axb7Rh'] }); * * // Get user's playlists * const playlists = await spotify.me.playlists.get(); * ``` */ declare function Spotify(config: TSpotifyClientConfig): TSpotify; export { Spotify, SPOTIFY_SCOPES, createSpotifyAuth, isTokenExpired, shouldRefreshToken, }; export type { TSpotify, TUserClient, TAuthenticatedUserClient, TPlayerClient, TPlaylistClient, TSearchClient, TLibraryClient, TChainableClient, TRequestOptions, TSpotifyClientConfig, TSpotifyUser, TSpotifyPagingObject, TSpotifyPlaylist, TSpotifyPlaylistTrack, TSpotifyTrack, TSpotifyAlbum, TSpotifyArtist, TSpotifyPlaybackState, TSpotifyPlayerDevice, TSpotifySearchResult, TSpotifyAudioFeatures, TSpotifyAudioAnalysis, TSpotifyTokenResponse, TSpotifyImage, TSpotifyExternalUrls, TSpotifyFollowers, TSpotifyContext, TSpotifyScope, TSpotifyAuthenticationError, TSpotifyTimeInterval, TSpotifySection, TSpotifySegment, TSpotifyRecentlyPlayedResponse, TSpotifyRecentlyPlayedItem, TSpotifyConfig, }; //# sourceMappingURL=index.d.ts.map