| import React from 'react'; | |
| import { object, string } from 'zod'; | |
| import { Label } from '@librechat/client'; | |
| import { AuthKeys } from 'librechat-data-provider'; | |
| import type { TConfigProps } from '~/common'; | |
| import FileUpload from '~/components/Chat/Input/Files/FileUpload'; | |
| import { useLocalize, useMultipleKeys } from '~/hooks'; | |
| import InputWithLabel from './InputWithLabel'; | |
| const CredentialsSchema = object({ | |
| client_email: string().email().min(3), | |
| project_id: string().min(3), | |
| private_key: string().min(601), | |
| }); | |
| const validateCredentials = (credentials: Record<string, unknown>) => { | |
| const result = CredentialsSchema.safeParse(credentials); | |
| return result.success; | |
| }; | |
| const GoogleConfig = ({ userKey, setUserKey }: Pick<TConfigProps, 'userKey' | 'setUserKey'>) => { | |
| const localize = useLocalize(); | |
| const { getMultiKey, setMultiKey } = useMultipleKeys(setUserKey); | |
| return ( | |
| <> | |
| <div className="flex flex-row"> | |
| <Label htmlFor={AuthKeys.GOOGLE_SERVICE_KEY} className="text-left text-sm font-medium"> | |
| {localize('com_endpoint_config_google_service_key')} | |
| </Label> | |
| <Label className="mx-1 text-right text-sm text-text-secondary"> | |
| {localize('com_endpoint_config_google_cloud_platform')} | |
| </Label> | |
| <br /> | |
| </div> | |
| <FileUpload | |
| id={AuthKeys.GOOGLE_SERVICE_KEY} | |
| className="w-full" | |
| containerClassName="dark:bg-gray-700 h-10 max-h-10 w-full resize-none py-2 dark:ring-1 dark:ring-gray-600" | |
| text={localize('com_endpoint_config_key_import_json_key')} | |
| successText={localize('com_endpoint_config_key_import_json_key_success')} | |
| invalidText={localize('com_endpoint_config_key_import_json_key_invalid')} | |
| validator={validateCredentials} | |
| onFileSelected={(data) => { | |
| setMultiKey(AuthKeys.GOOGLE_SERVICE_KEY, JSON.stringify(data), userKey); | |
| }} | |
| /> | |
| <InputWithLabel | |
| id={AuthKeys.GOOGLE_API_KEY} | |
| value={getMultiKey(AuthKeys.GOOGLE_API_KEY, userKey) ?? ''} | |
| onChange={(e: { target: { value: string } }) => | |
| setMultiKey(AuthKeys.GOOGLE_API_KEY, e.target.value ?? '', userKey) | |
| } | |
| label={localize('com_endpoint_config_google_api_key')} | |
| subLabel={localize('com_endpoint_config_google_gemini_api')} | |
| /> | |
| </> | |
| ); | |
| }; | |
| export default GoogleConfig; | |