add support for a custom fetch function (closing #2)

This commit is contained in:
Gingka/Ginger Pepper 2023-06-14 15:08:52 -04:00
parent bad0ec49db
commit 44288b92ee
No known key found for this signature in database
GPG key ID: 5F47E26A5D221AEC

View file

@ -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",