tooot/src/api/client.ts

56 lines
1.2 KiB
TypeScript
Raw Normal View History

2020-10-31 21:04:46 +01:00
import store, { RootState } from 'src/stacks/common/store'
2020-10-31 02:22:08 +01:00
import ky from 'ky'
2020-10-23 09:22:17 +02:00
2020-10-31 21:04:46 +01:00
const client = async ({
version = 'v1',
2020-10-31 21:04:46 +01:00
method,
instance,
endpoint,
2020-11-15 22:33:09 +01:00
headers,
2020-10-31 21:04:46 +01:00
query,
body
}: {
2020-11-09 01:04:47 +01:00
version?: 'v1' | 'v2'
method: 'get' | 'post' | 'delete'
2020-10-31 21:04:46 +01:00
instance: 'local' | 'remote'
endpoint: string
2020-11-15 22:33:09 +01:00
headers?: { [key: string]: string }
2020-10-31 21:04:46 +01:00
query?: {
[key: string]: string | number | boolean
}
body?: object
}): Promise<any> => {
const state: RootState['instanceInfo'] = store.getState().instanceInfo
2020-10-26 00:27:53 +01:00
2020-10-31 02:22:08 +01:00
let response
2020-10-23 09:22:17 +02:00
try {
2020-10-31 02:22:08 +01:00
response = await ky(endpoint, {
method: method,
prefixUrl: `https://${state[instance]}/api/${version}`,
2020-10-31 02:22:08 +01:00
searchParams: query,
headers: {
'Content-Type': 'application/json',
2020-11-15 22:33:09 +01:00
...headers,
2020-10-31 02:22:08 +01:00
...(instance === 'local' && {
Authorization: `Bearer ${state.localToken}`
})
},
...(body && { json: body })
})
2020-11-09 01:04:47 +01:00
} catch (error) {
return Promise.reject('ky error: ' + error)
2020-10-23 09:22:17 +02:00
}
2020-10-31 02:22:08 +01:00
if (response.ok) {
return Promise.resolve({
headers: response.headers,
body: await response.json()
})
} else {
console.error(response.status + ': ' + response.statusText)
return Promise.reject({ body: response.statusText })
2020-10-31 02:22:08 +01:00
}
2020-10-23 09:22:17 +02:00
}
2020-10-31 21:04:46 +01:00
export default client