| 
                        1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 | 
                        - import { useState, useCallback, SetStateAction, Dispatch } 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'
 - }
 - export type SetValidatedStatus = Dispatch<SetStateAction<ValidatedStatus | undefined>>
 - export type ValidateFn = DebouncedFunc<(token: any, config: ValidateFnConfig) => void>
 - type ValidateTokenReturn = [
 -   boolean, 
 -   ValidatedStatus | undefined, 
 -   SetValidatedStatus,
 -   ValidateFn
 - ]
 - export type ValidateFnConfig = {
 -   beforeValidating: (token: any) => boolean
 - }
 - 
 - const useValidateToken = (providerName: string): ValidateTokenReturn => {
 -   const [validating, setValidating] = useState(false)
 -   const [validatedStatus, setValidatedStatus] = useState<ValidatedStatus | undefined>()
 -   const validate = useCallback(debounce(async (token: string, config: ValidateFnConfig) => {
 -     if (!config.beforeValidating(token)) {
 -       return false
 -     }
 -     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' && providerName === 'openai') {
 -             setValidatedStatus(ValidatedStatus.Exceed)
 -           } else {
 -             setValidatedStatus(ValidatedStatus.Error)
 -           }
 -         })
 -       } else {
 -         setValidatedStatus(ValidatedStatus.Error)
 -       }
 -     } finally {
 -       setValidating(false)
 -     }
 -   }, 500), [])
 - 
 -   return [
 -     validating,
 -     validatedStatus,
 -     setValidatedStatus,
 -     validate
 -   ]
 - }
 - 
 - export default useValidateToken
 
 
  |