import { ApiToken } from 'db' import { fetcher } from 'services/utils' import useSWR, { KeyedMutator } from 'swr' import { isNotEmpty, sendRequest } from 'utils' export type ApiTokenFromServer = { id: string; name: string; createdAt: string } type ReturnedProps = { apiTokens?: ApiTokenFromServer[] isLoading: boolean mutate: KeyedMutator } type ServerResponse = { apiTokens: ApiTokenFromServer[] } export const useApiTokens = ({ userId, onError, }: { userId?: string onError: (error: Error) => void }): ReturnedProps => { const { data, error, mutate } = useSWR( userId ? `/api/users/${userId}/api-tokens` : null, fetcher, { dedupingInterval: isNotEmpty(process.env.NEXT_PUBLIC_E2E_TEST) ? 0 : undefined, } ) if (error) onError(error) return { apiTokens: data?.apiTokens, isLoading: !error && !data, mutate, } } export const createApiToken = (userId: string, { name }: { name: string }) => sendRequest<{ apiToken: ApiTokenFromServer & { token: string } }>({ url: `/api/users/${userId}/api-tokens`, method: 'POST', body: { name, }, }) export const deleteApiToken = ({ userId, tokenId, }: { userId: string tokenId: string }) => sendRequest<{ apiToken: ApiToken }>({ url: `/api/users/${userId}/api-tokens/${tokenId}`, method: 'DELETE', })