UNPKG

spotify-ts-wrapper

Version:

Spotify TypeScript wrapper.

242 lines (241 loc) 7.83 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getParamsFromUrl = getParamsFromUrl; exports.getSpotifyURL = getSpotifyURL; exports.createSpotifyParams = createSpotifyParams; exports.fixDoubleEncodedUrl = fixDoubleEncodedUrl; exports.createSpotifySectionParams = createSpotifySectionParams; exports.createSpotifyPlaylisrParams = createSpotifyPlaylisrParams; exports.createSpotifyAlbumParams = createSpotifyAlbumParams; exports.createSpotifyArtistParams = createSpotifyArtistParams; exports.createSpotifySearchAllParams = createSpotifySearchAllParams; exports.createParamsFromURL = createParamsFromURL; exports.createSpotifyShowParams = createSpotifyShowParams; exports.createSpotifyPodcastParams = createSpotifyPodcastParams; exports.createSpotifyHomeFeedParams = createSpotifyHomeFeedParams; exports.extractParamsFromUrl = extractParamsFromUrl; function getParamsFromUrl(url) { const urlObj = new URL(url); const operationName = urlObj.searchParams.get("operationName") || ""; const variables = JSON.parse(decodeURIComponent(urlObj.searchParams.get("variables") || "{}")); const extensions = JSON.parse(decodeURIComponent(urlObj.searchParams.get("extensions") || "{}")); return { operationName, variables, extensions, }; } function getSpotifyURL(params) { const baseURL = "https://api-partner.spotify.com/pathfinder/v1/query"; const urlObj = new URL(baseURL); for (const [key, value] of Object.entries(params)) { if (typeof value === "object") { urlObj.searchParams.set(key, encodeURIComponent(JSON.stringify(value))); } else { urlObj.searchParams.set(key, String(value)); } } return urlObj.toString(); } function createSpotifyParams(params) { const { id, pagePagination, sectionPagination } = params; return { operationName: "browsePage", variables: { pagePagination: { offset: pagePagination.offset, limit: pagePagination.limit, }, sectionPagination: { offset: sectionPagination.offset, limit: sectionPagination.limit, }, uri: `spotify:page:${id}`, }, extensions: { persistedQuery: { version: 1, sha256Hash: "177a4ae12a90e35d335f060216ce5df7864a228c6ca262bd5ed90b37c2419dd9", }, }, }; } function fixDoubleEncodedUrl(url) { function decodeTwice(encodedStr) { try { return decodeURIComponent(decodeURIComponent(encodedStr)); } catch (e) { console.error("Error decoding URL:", e); return encodedStr; } } const urlObj = new URL(url); const variables = urlObj.searchParams.get("variables"); const extensions = urlObj.searchParams.get("extensions"); if (variables) { urlObj.searchParams.set("variables", decodeTwice(variables)); } if (extensions) { urlObj.searchParams.set("extensions", decodeTwice(extensions)); } return urlObj.toString(); } function createSpotifySectionParams(params) { return { operationName: "browseSection", variables: { pagination: { offset: params.offSet, limit: params.limit }, uri: `spotify:section:${params.id}`, }, extensions: { persistedQuery: { version: 1, sha256Hash: "8cb45a0fea4341b810e6f16ed2832c7ef9d3099aaf0034ee2a0ce49afbe42748", }, }, }; } function createSpotifyPlaylisrParams(params) { return { operationName: "fetchPlaylist", variables: { uri: `spotify:playlist:${params.id}`, offset: params.offSet, limit: params.limit, }, extensions: { persistedQuery: { version: 1, sha256Hash: "76849d094f1ac9870ac9dbd5731bde5dc228264574b5f5d8cbc8f5a8f2f26116", }, }, }; } function createSpotifyAlbumParams(params) { return { operationName: "getAlbum", variables: { uri: `spotify:album:${params.id}`, locale: "", offset: params.offSet, limit: params.limit, }, extensions: { persistedQuery: { version: 1, sha256Hash: "ea2ba83b1e7c59f47c829543609d99255f5a79ce8ad3b356f3660f22350fb1cb", }, }, }; } function createSpotifyArtistParams(params) { return { operationName: "queryArtistOverview", variables: { uri: `spotify:artist:${params.id}`, locale: "", includePrerelease: true, }, extensions: { persistedQuery: { version: 1, sha256Hash: "bc0107feab9595387a22ebed6c944c9cf72c81b2f72a3d26ac055e4465173a1f", }, }, }; } function createSpotifySearchAllParams(params) { return { operationName: "searchDesktop", variables: { searchTerm: params.query, offset: params === null || params === void 0 ? void 0 : params.offSet, limit: params.limit, numberOfTopResults: params.topResults, includeAudiobooks: true, includeArtistHasConcertsField: false, includePreReleases: true, includeLocalConcertsField: false, }, extensions: { persistedQuery: { version: 1, sha256Hash: "bd8eb4cb57ae6deeac1a7d2ebe8487b65d52e0b69387a2b51590c2471f5fd57e", }, }, }; } function createParamsFromURL(url) { const params = {}; const queryString = url.split("?")[1]; if (queryString) { const pairs = queryString.split("&"); pairs.forEach((pair) => { const [key, value] = pair.split("="); if (key && value !== undefined) { params[key] = decodeURIComponent(value); } }); } return params; } function createSpotifyShowParams(params) { return { operationName: "queryPodcastEpisodes", variables: { uri: `spotify:show:${params.id}`, offset: params.offSet, limit: params.limit, }, extensions: { persistedQuery: { version: 1, sha256Hash: "108deda91e2701403d95dc39bdade6741c2331be85737b804a00de22cc0acabf", }, }, }; } function createSpotifyPodcastParams(params) { return { operationName: "queryShowMetadataV2", variables: { uri: `spotify:show:${params.id}` }, extensions: { persistedQuery: { version: 1, sha256Hash: "5fb034a236a3e8301e9eca0e23def3341ed66c891ea2d4fea374c091dc4b4a6a", }, }, }; } function createSpotifyHomeFeedParams(params) { return { operationName: "home", variables: { timeZone: params.timezone, sp_t: "ec924e993f8ed33c1f4787da25af3a4b", country: params.country, facet: null, sectionItemsLimit: params.sectionItemsLimit, }, extensions: { persistedQuery: { version: 1, sha256Hash: "247c301b09d40403b11bc7f86379c64ebd6e857474fb6ade53d543e45ccfcdae", }, }, }; } function extractParamsFromUrl(url) { const params = {}; const queryString = url.split("?")[1]; if (!queryString) { return params; } const queryParams = new URLSearchParams(queryString); queryParams.forEach((value, key) => { params[key] = value; }); return params; }