Files
web/packages/trpc/lib/api/index.ts
Linus Flood 5eaaea527f Merged in feat/sw-3623-fetchretry (pull request #3180)
feat(SW_3623): remove fetch-retry

* feat(SW_3623): remove fetch-retry


Approved-by: Joakim Jäderberg
2025-11-20 13:24:34 +00:00

116 lines
2.8 KiB
TypeScript

import merge from "deepmerge"
import { env } from "../../env/server"
import type { Endpoint } from "./endpoints"
export { endpoints } from "./endpoints"
interface RequestOptionsWithJSONBody
extends Omit<RequestInit, "body" | "method"> {
body?: Record<string, unknown>
}
interface RequestOptionsWithOutBody
extends Omit<RequestInit, "body" | "method"> {}
const defaultOptions: RequestInit = {
cache: "no-store",
headers: {
Accept: "application/json",
"Content-Type": "application/json",
},
mode: "cors",
}
export async function get(
endpoint: Endpoint,
options: RequestOptionsWithOutBody,
params = {}
) {
const url = new URL(env.API_BASEURL)
url.pathname = endpoint
url.search = new URLSearchParams(params).toString()
return fetch(url, {
...merge.all([defaultOptions, { method: "GET" }, options]),
signal: AbortSignal.timeout(15_000),
})
}
export async function patch(
endpoint: Endpoint | `${Endpoint}/${string}`,
options: RequestOptionsWithJSONBody,
params = {}
) {
const { body, ...requestOptions } = options
const url = new URL(env.API_BASEURL)
url.pathname = endpoint
url.search = new URLSearchParams(params).toString()
return fetch(url, {
...merge.all([
defaultOptions,
{ body: JSON.stringify(body), method: "PATCH" },
requestOptions,
]),
signal: AbortSignal.timeout(30_000),
})
}
export async function post(
endpoint: Endpoint | `${Endpoint}/${string}`,
options: RequestOptionsWithJSONBody,
params = {}
) {
const { body, ...requestOptions } = options
const url = new URL(env.API_BASEURL)
url.pathname = endpoint
url.search = new URLSearchParams(params).toString()
return fetch(url, {
...merge.all([
defaultOptions,
{ body: JSON.stringify(body), method: "POST" },
requestOptions,
]),
signal: AbortSignal.timeout(30_000),
})
}
export async function put(
endpoint: Endpoint | `${Endpoint}/${string}`,
options: RequestOptionsWithJSONBody,
params = {}
) {
const { body, ...requestOptions } = options
const url = new URL(env.API_BASEURL)
url.pathname = endpoint
url.search = new URLSearchParams(params).toString()
return fetch(url, {
...merge.all([
defaultOptions,
{ body: JSON.stringify(body), method: "PUT" },
requestOptions,
]),
signal: AbortSignal.timeout(30_000),
})
}
export async function remove(
endpoint: Endpoint | `${Endpoint}/${string}`,
options: RequestOptionsWithJSONBody,
params = {}
) {
const { body, ...requestOptions } = options
const url = new URL(env.API_BASEURL)
url.pathname = endpoint
url.search = new URLSearchParams(params).toString()
return fetch(url, {
...merge.all([
defaultOptions,
{ body: JSON.stringify(body), method: "DELETE" },
requestOptions,
]),
signal: AbortSignal.timeout(30_000),
})
}