UNPKG

masto

Version:

Mastodon API client for JavaScript, TypeScript, Node.js, browsers

55 lines (54 loc) 1.77 kB
import { mergeHeadersInit } from "./merge-headers-init.js"; export class HttpConfigImpl { props; serializer; constructor(props, serializer) { this.props = props; this.serializer = serializer; } mergeRequestInitWithDefaults(override = {}) { const requestInit = { ...this.props.requestInit }; // Merge { const { headers, signal, ...rest } = override; Object.assign(requestInit, rest); requestInit.headers = this.mergeHeadersWithDefaults(headers); requestInit.signal = this.mergeAbortSignalWithDefaults(signal); } return requestInit; } resolvePath(path, params) { const url = new URL(path, this.props.url); if (typeof params === "string") { url.search = params; } else if (params) { url.search = this.serializer.serialize("querystring", params); } return url; } mergeHeadersWithDefaults(override = {}) { const headersInit = mergeHeadersInit([ this.props.requestInit?.headers ?? {}, override, ]); const headers = new Headers(headersInit); if (this.props.accessToken) { headers.set("Authorization", `Bearer ${this.props.accessToken}`); } return new Headers(headers); } mergeAbortSignalWithDefaults(signal) { const signals = []; if (this.props.timeout) { signals.push(AbortSignal.timeout(this.props.timeout)); } if (this.props.requestInit?.signal) { signals.push(this.props.requestInit.signal); } if (signal) { signals.push(signal); } return AbortSignal.any(signals); } }