UNPKG

js_ts_discogs_api_v2_library

Version:

TS / JS Library for Discogs API v2 Access.

413 lines 15.9 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const dotenv_1 = __importDefault(require("dotenv")); const node_fetch_1 = __importDefault(require("node-fetch")); const debug_1 = require("./utils/debug"); dotenv_1.default.config(); (0, debug_1.info)('JS TS Discogs API v2 Library Version 0.0.3'); (0, debug_1.info)('© Dex Vinyl 2022'); (0, debug_1.info)('Released under MIT License'); class Client { constructor({ host, port, userAgent, token, key, secret, discogsUserName, }) { this.protocol = 'https'; this.defaults = { host: 'api.discogs.com', port: 443, userAgent: 'JSTSDiscogsAPIV2Library', apiVersion: 'v2', outputFormat: 'discogs', requestLimit: 25, requestLimitAuth: 60, requestLimitInterval: 60000, discogsUserName: ' ', perPage: '50', }; this.discogsUserName = process.env.DISCOGS_USER_NAME || this.defaults.discogsUserName; this.host = host || this.defaults.host; this.port = port || this.defaults.port; this.userAgent = userAgent || this.defaults.userAgent; this.auth = this.createAuthString({ token, key, secret }); this.ratelimit = { ratelimit: 25, remaining: 25, used: 0, }; this.perPage = process.env.DISCOGS_PER_PAGE || this.defaults.perPage; } createAuthString({ token, key, secret, }) { let authString; let discogsToken = token || process.env.DISCOGS_API_TOKEN; let discogsKey = key || process.env.DISCOGS_API_KEY; let discogsSecret = secret || process.env.DISCOGS_API_SECRET; if (discogsToken) { authString = `token=${(discogsToken)}`; } else if ((discogsKey) && (discogsSecret)) { authString = `key=${(discogsKey)}, secret=${(discogsSecret)}`; } return authString || null; } request(path, method = 'GET', body) { return __awaiter(this, void 0, void 0, function* () { const requestHeaders = { 'User-Agent': this.userAgent, }; if (this.auth) { requestHeaders['Authorization'] = `Discogs ${this.auth}`; } while (true) { try { const fetchObject = { method, headers: requestHeaders, }; if (body) { if (typeof body == 'object') { fetchObject.body = JSON.stringify(body); fetchObject.headers['Content-Type'] = 'application/json'; } else { fetchObject.body = body; } } const response = yield (0, node_fetch_1.default)(`${this.protocol}://${this.host}/${path}`, fetchObject); const responseHeaders = response.headers; const data = yield response.json(); this.ratelimit = { ratelimit: Number(responseHeaders.get('x-discogs-ratelimit')), remaining: Number(responseHeaders.get('x-discogs-ratelimit-remaining')), used: Number(responseHeaders.get('x-discogs-ratelimit-used')) }; return { data, headers: responseHeaders, }; } catch (error) { console.error(error); // @ts-ignore if (theError.type == "invalid-json") { (0, debug_1.log)("Invalid JSON Received Waiting 5 Seconds Before Retry"); yield this.delay(5000); (0, debug_1.debug)("Trying Again"); } } } }); } getRatelimit() { return this.ratelimit; } // Helper Functions getRequest(path) { return __awaiter(this, void 0, void 0, function* () { return this.request(path, 'GET'); }); } deleteRequest(path) { return __awaiter(this, void 0, void 0, function* () { return this.request(path, 'DELETE'); }); } postRequest(path, body) { return __awaiter(this, void 0, void 0, function* () { return this.request(path, 'POST', body); }); } putRequest(path, body) { return __awaiter(this, void 0, void 0, function* () { return this.request(path, 'PUT', body); }); } // // HAVE A NAP // delay(ms) { return __awaiter(this, void 0, void 0, function* () { return new Promise(resolve => setTimeout(resolve, ms)); }); } // // CALCULATE RATE LIMIT // calculateRateLimitRemaining() { return __awaiter(this, void 0, void 0, function* () { let rateRemaining = this.getRatelimit().remaining; let rateBarrier = 2; //this.getRatelimit().ratelimit/5; (0, debug_1.log)("You Have " + rateRemaining + " Requests Remaining"); if (rateRemaining <= rateBarrier) { (0, debug_1.log)("Generating Random Wait Time"); const rngWaitTime = Math.floor(Math.random() * (55 - 15 + 1)) + 15; (0, debug_1.log)("You've Used ALL You API Rate Allowance, Waiting for " + rngWaitTime + " Seconds"); (0, debug_1.log)("The Threshold is " + rateBarrier + " Requests"); (0, debug_1.log)(new Date()); let rngWaitTimeMS = rngWaitTime * 1000; yield this.delay(rngWaitTimeMS); (0, debug_1.log)("Ok I Waited " + rngWaitTime + " Seconds, Continuing... "); (0, debug_1.log)(new Date()); yield this.delay(1000); } }); } // // USER SPECIFIC ENDPOINTS // getUser() { return __awaiter(this, void 0, void 0, function* () { return this.getRequest(`users/${this.discogsUserName}`); }); } deleteUser() { return __awaiter(this, void 0, void 0, function* () { return this.deleteRequest(`users/${this.discogsUserName}`); }); } getUserCollection(pageNumber, sort, sortOrder) { return __awaiter(this, void 0, void 0, function* () { yield this.calculateRateLimitRemaining(); if (!pageNumber) { pageNumber = "1"; } if (!sortOrder) { sortOrder = "desc"; } if (!sort) { sort = "added"; } else if (sort == "year") { } else if (sort == "artist") { } else if (sort == "title") { } else if (sort == "catno") { } else if (sort == "format") { } else if (sort == "rating") { } else { sort = "added"; } return this.getRequest(`users/${this.discogsUserName}/collection?sort=${sort}&sort_order=${sortOrder}&per_page=${this.perPage}&page=${pageNumber}`); }); } getUserWantlist(pageNumber, sort, sortOrder) { return __awaiter(this, void 0, void 0, function* () { yield this.calculateRateLimitRemaining(); if (!pageNumber) { pageNumber = "1"; } if (!sortOrder) { sortOrder = "desc"; } if (!sort) { sort = "added"; } else if (sort == "year") { } else if (sort == "artist") { } else if (sort == "title") { } else if (sort == "catno") { } else if (sort == "format") { } else if (sort == "rating") { } else { sort = "added"; } return this.getRequest(`users/${this.discogsUserName}/wants?sort=${sort}&sort_order=${sortOrder}&per_page=${this.perPage}&page=${pageNumber}`); }); } getUserFolders() { return __awaiter(this, void 0, void 0, function* () { yield this.calculateRateLimitRemaining(); return this.getRequest(`users/${this.discogsUserName}/collection/folders`); }); } getUserFolderContents(folder, pageNumber, sort, sortOrder) { return __awaiter(this, void 0, void 0, function* () { yield this.calculateRateLimitRemaining(); if (!pageNumber) { pageNumber = "1"; } if (!sortOrder) { sortOrder = "desc"; } if (!sort) { sort = "added"; } else if (sort == "year") { } else if (sort == "artist") { } else if (sort == "title") { } else if (sort == "catno") { } else if (sort == "format") { } else if (sort == "rating") { } else { sort = "added"; } return this.getRequest(`users/${this.discogsUserName}/collection/folders/${folder}/releases?sort=${sort}&sort_order=${sortOrder}&per_page=${this.perPage}&page=${pageNumber}`); }); } getUserCollectionValue() { return __awaiter(this, void 0, void 0, function* () { yield this.calculateRateLimitRemaining(); return this.getRequest(`users/${this.discogsUserName}/collection/value`); }); } // // RELEASE ENDPOINTS // getRelease(releaseId) { return __awaiter(this, void 0, void 0, function* () { yield this.calculateRateLimitRemaining(); return this.getRequest(`releases/${releaseId}`); }); } getReleaseUserRating(releaseId) { return __awaiter(this, void 0, void 0, function* () { yield this.calculateRateLimitRemaining(); return this.getRequest(`releases/${releaseId}/rating/${this.discogsUserName}`); }); } getReleaseCommunityRating(releaseId) { return __awaiter(this, void 0, void 0, function* () { yield this.calculateRateLimitRemaining(); return this.getRequest(`releases/${releaseId}/rating`); }); } getReleaseStats(releaseId) { return __awaiter(this, void 0, void 0, function* () { yield this.calculateRateLimitRemaining(); return this.getRequest(`releases/${releaseId}/stats`); }); } getMasterRelease(masterId) { return __awaiter(this, void 0, void 0, function* () { yield this.calculateRateLimitRemaining(); return this.getRequest(`masters/${masterId}`); }); } getMasterReleaseVersions(masterId) { return __awaiter(this, void 0, void 0, function* () { yield this.calculateRateLimitRemaining(); return this.getRequest(`masters/${masterId}/versions`); // takes parameters, needs adding }); } // // ARTIST ENDPOINTS // getArtistDetails(ArtistId) { return __awaiter(this, void 0, void 0, function* () { yield this.calculateRateLimitRemaining(); return this.getRequest(`artists/${ArtistId}`); }); } getArtistReleases(ArtistId, pageNumber, sort, sortOrder) { return __awaiter(this, void 0, void 0, function* () { yield this.calculateRateLimitRemaining(); if (!pageNumber) { pageNumber = "1"; } if (!sortOrder) { sortOrder = "desc"; } if (!sort) { sort = "title"; } else if (sort == "year") { } else if (sort == "format") { } else { sort = "title"; } return this.getRequest(`artists/${ArtistId}/releases?sort=${sort}&sort_order=${sortOrder}&per_page=${this.perPage}&page=${pageNumber}`); // takes parameters, needs adding }); } // // LABEL ENDPOINTS // getLabelDetails(LabelId) { return __awaiter(this, void 0, void 0, function* () { yield this.calculateRateLimitRemaining(); return this.getRequest(`labels/${LabelId}`); }); } getLabelReleases(LabelId, pageNumber, sort, sortOrder) { return __awaiter(this, void 0, void 0, function* () { yield this.calculateRateLimitRemaining(); if (!pageNumber) { pageNumber = "1"; } if (!sortOrder) { sortOrder = "desc"; } if (!sort) { sort = "title"; } else if (sort == "year") { } else if (sort == "artist") { } else if (sort == "catno") { } else if (sort == "format") { } else { sort = "added"; } return this.getRequest(`labels/${LabelId}/releases?sort=${sort}&sort_order=${sortOrder}&per_page=${this.perPage}&page=${pageNumber}`); // takes parameters, needs adding }); } // // SEARCH ENDPOINTS // getSearch(query, pageNumber) { if (!pageNumber) { pageNumber = "1"; } return this.request(`database/search?q=${query}&page=${pageNumber}`); } getSearchArtist(query, pageNumber) { if (!pageNumber) { pageNumber = "1"; } return this.request(`database/search?q=${query}&type=artist&page=${pageNumber}`); } getSearchReleaseId(query, pageNumber) { if (!pageNumber) { pageNumber = "1"; } return this.request(`database/search?release_id=${query}&type=release&page=${pageNumber}`); } getSearchCatalogueNumber(query, pageNumber) { if (!pageNumber) { pageNumber = "1"; } return this.request(`database/search?catno=${query}&type=release&page=${pageNumber}`); } getSearchReleaseTitle(query, pageNumber) { if (!pageNumber) { pageNumber = "1"; } return this.request(`database/search?release_title=${query}&type=release&page=${pageNumber}`); } getSearchTrackTitle(query, pageNumber) { if (!pageNumber) { pageNumber = "1"; } return this.request(`database/search?track=${query}&type=release&page=${pageNumber}`); } getSearchLabelReleases(query, pageNumber) { if (!pageNumber) { pageNumber = "1"; } return this.request(`database/search?label=${query}&type=release&page=${pageNumber}`); } getSearchLabel(query, pageNumber) { if (!pageNumber) { pageNumber = "1"; } return this.request(`database/search?q=${query}&type=label&page=${pageNumber}`); } } exports.default = Client; //# sourceMappingURL=index.js.map