UNPKG

musicbrainz-api

Version:

MusicBrainz API client for reading and submitting metadata

57 lines 2.17 kB
export class HttpClient { constructor(options) { this.options = options; } get(path, options) { return this._fetch('get', path, options); } post(path, options) { return this._fetch('post', path, options); } postForm(path, formData, options) { const encodedFormData = new URLSearchParams(formData).toString(); return this._fetch('post', path, { ...options, body: encodedFormData, headers: { 'Content-Type': 'application/x-www-form-urlencoded' } }); } // biome-ignore lint/complexity/noBannedTypes: postJson(path, json, options) { const encodedJson = JSON.stringify(json); return this._fetch('post', path, { ...options, body: encodedJson, headers: { 'Content-Type': 'application/json.' } }); } async _fetch(method, path, options) { if (!options) options = {}; let url = path.startsWith('/') ? `${this.options.baseUrl}${path}` : `${this.options.baseUrl}/${path}`; if (options.query) { const urlSearchParams = new URLSearchParams(); for (const key of Object.keys(options.query)) { const value = options.query[key]; (Array.isArray(value) ? value : [value]).forEach(value => { urlSearchParams.append(key, value); }); } url += `?${urlSearchParams.toString()}`; } const cookies = await this.getCookies(); const headers = new Headers(options.headers); headers.set('User-Agent', this.options.userAgent); if (cookies !== null) { headers.set('Cookie', cookies); } const response = await fetch(url, { method, ...options, headers, body: options.body, redirect: options.followRedirects === false ? 'manual' : 'follow' }); await this.registerCookies(response); return response; } registerCookies(response) { return Promise.resolve(undefined); } async getCookies() { return Promise.resolve(null); } } //# sourceMappingURL=http-client.js.map