12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- import { useState, useCallback } from 'react'
- import debounce from 'lodash-es/debounce'
- import { DebouncedFunc } from 'lodash-es'
- import { validateProviderKey } from '@/service/common'
- export enum ValidatedStatus {
- Success = 'success',
- Error = 'error',
- Exceed = 'exceed'
- }
- const useValidateToken = (providerName: string): [boolean, ValidatedStatus | undefined, DebouncedFunc<(token: string) => Promise<void>>] => {
- const [validating, setValidating] = useState(false)
- const [validatedStatus, setValidatedStatus] = useState<ValidatedStatus | undefined>()
- const validate = useCallback(debounce(async (token: string) => {
- if (!token) {
- setValidatedStatus(undefined)
- return
- }
- setValidating(true)
- try {
- const res = await validateProviderKey({ url: `/workspaces/current/providers/${providerName}/token-validate`, body: { token } })
- setValidatedStatus(res.result === 'success' ? ValidatedStatus.Success : ValidatedStatus.Error)
- } catch (e: any) {
- if (e.status === 400) {
- e.json().then(({ code }: any) => {
- if (code === 'provider_request_failed') {
- setValidatedStatus(ValidatedStatus.Exceed)
- }
- })
- } else {
- setValidatedStatus(ValidatedStatus.Error)
- }
- } finally {
- setValidating(false)
- }
- }, 500), [])
- return [
- validating,
- validatedStatus,
- validate,
- ]
- }
- export default useValidateToken
|