import qs from 'qs' import { i18n } from '../locales' export const requestClient = async (...rest: Parameters) => { const res = await fetch(...rest) return res.json() } export interface ApprowResponse { code: number message?: string data?: T } requestClient.get = async ( path: string, query: Record = {}, init?: RequestInit ): Promise> => { const res = await fetch( `${requestClient.baseUrl}${path}${qs.stringify(query, { addQueryPrefix: true, })}`, { ...init, headers: { ...init?.headers, [requestClient.langHeader]: i18n.language, }, } ) return res.json() } requestClient.post = async ( path: string, data: any, config?: { headers: any } ): Promise> => { const res = await fetch(`${requestClient.baseUrl}${path}`, { method: 'POST', body: JSON.stringify(data), headers: { ...config?.headers, 'Content-Type': 'application/json', [requestClient.langHeader]: i18n.language, }, }) return res.json() } requestClient.baseUrl = '' requestClient.setBaseUrl = (base: string) => { requestClient.baseUrl = base.replace(/\/$/, '') } const DEFAULT_LANG_HEADER = 'x-approw-lang' requestClient.langHeader = DEFAULT_LANG_HEADER requestClient.setLangHeader = (key: string | undefined) => { requestClient.langHeader = key || DEFAULT_LANG_HEADER }