musicbrainz-api
Version:
MusicBrainz API client for reading and submitting metadata
57 lines • 2.17 kB
JavaScript
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