spotify-ts-wrapper
Version:
Spotify TypeScript wrapper.
242 lines (241 loc) • 7.83 kB
JavaScript
;
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;
}