import { useEffect, useState } from "react"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select"; import { ApiKeyField } from "./connect-fields"; import { AWS_REGION_OPTIONS, BEDROCK_AUTH_ACCESS_KEY, BEDROCK_AUTH_IAM, BEDROCK_AUTH_LONG_TERM_API_KEY, type ProviderConnectFormProps, } from "./provider-metadata"; /** * Amazon Bedrock connect form. Region + auth method drive which AWS credentials * are collected; everything rides along in `extra.litellm_params`. */ export function BedrockConnectForm({ onDraftChange }: ProviderConnectFormProps) { const [region, setRegion] = useState(""); const [authMethod, setAuthMethod] = useState(BEDROCK_AUTH_ACCESS_KEY); const [accessKeyId, setAccessKeyId] = useState(""); const [secretAccessKey, setSecretAccessKey] = useState(""); const [bearerToken, setBearerToken] = useState(""); const canSubmit = (() => { if (!region) return false; if (authMethod === BEDROCK_AUTH_ACCESS_KEY) { return Boolean(accessKeyId && secretAccessKey); } if (authMethod === BEDROCK_AUTH_LONG_TERM_API_KEY) { return Boolean(bearerToken); } return true; })(); useEffect(() => { const params: Record = { aws_region_name: region }; if (authMethod === BEDROCK_AUTH_ACCESS_KEY) { params.aws_access_key_id = accessKeyId; params.aws_secret_access_key = secretAccessKey; } else if (authMethod === BEDROCK_AUTH_LONG_TERM_API_KEY) { params.aws_bearer_token_bedrock = bearerToken; } onDraftChange({ base_url: null, api_key: null, extra: { litellm_params: params } }, canSubmit); }, [accessKeyId, authMethod, bearerToken, canSubmit, onDraftChange, region, secretAccessKey]); return (
{authMethod === BEDROCK_AUTH_ACCESS_KEY ? ( <>
setAccessKeyId(event.target.value)} placeholder="Enter your AWS access key ID" />
) : null} {authMethod === BEDROCK_AUTH_LONG_TERM_API_KEY ? ( ) : null} {authMethod === BEDROCK_AUTH_IAM ? (

SurfSense will use the IAM role attached to the environment it's running in to authenticate.

) : null}

Add Bedrock model IDs from the provider's settings after connecting.

); }