From 44288b92ee712dcbb5c73d250379d6f5b6bdd4f1 Mon Sep 17 00:00:00 2001 From: Gingka/Ginger Pepper <33764485+ExperiBass@users.noreply.github.com> Date: Wed, 14 Jun 2023 15:08:52 -0400 Subject: [PATCH] add support for a custom fetch function (closing #2) --- src/http.ts | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/src/http.ts b/src/http.ts index e5e36ce..c2349ad 100644 --- a/src/http.ts +++ b/src/http.ts @@ -148,18 +148,25 @@ export class LemmyHttp { #apiUrl: string; #headers: { [key: string]: string } = {}; #pictrsUrl: string; + #fetchFunction = fetch; /** * Generates a new instance of LemmyHttp. * @param baseUrl the base url, without the vX version: https://lemmy.ml -> goes to https://lemmy.ml/api/vX * @param headers optional headers. Should contain `x-real-ip` and `x-forwarded-for` . */ - constructor(baseUrl: string, headers?: { [key: string]: string }) { + constructor( + baseUrl: string, + options?: { + fetchFunction: typeof fetch; + headers?: { [key: string]: string }; + } + ) { this.#apiUrl = `${baseUrl}/api/${VERSION}`; this.#pictrsUrl = `${baseUrl}/pictrs/image`; - if (headers) { - this.#headers = headers; + if (options?.headers) { + this.#headers = options.headers; } } @@ -1265,7 +1272,7 @@ export class LemmyHttp { let url: string | undefined = undefined; let delete_url: string | undefined = undefined; - const response = await fetch(this.#pictrsUrl, { + const response = await this.#fetchFunction(this.#pictrsUrl, { method: HttpType.Post, body: formData as unknown as BodyInit, headers: { @@ -1301,12 +1308,12 @@ export class LemmyHttp { let response: Response; if (type_ === HttpType.Get) { const getUrl = `${this.#buildFullUrl(endpoint)}?${encodeGetParams(form)}`; - response = await fetch(getUrl, { + response = await this.#fetchFunction(getUrl, { method: HttpType.Get, headers: this.#headers, }); } else { - response = await fetch(this.#buildFullUrl(endpoint), { + response = await this.#fetchFunction(this.#buildFullUrl(endpoint), { method: type_, headers: { "Content-Type": "application/json",