import icon from "data-base64:~assets/icon.png"; import { Storage } from "@plasmohq/storage"; import { ReloadIcon } from "@radix-ui/react-icons"; import { useState } from "react"; import { useNavigate } from "react-router-dom"; import { Button } from "~/routes/ui/button"; import { ConnectionSettingsButton } from "~/routes/ui/connection-settings-button"; import { buildBackendUrl } from "~utils/backend-url"; const ApiKeyForm = () => { const navigation = useNavigate(); const [apiKey, setApiKey] = useState(""); const [error, setError] = useState(""); const [loading, setLoading] = useState(false); const storage = new Storage({ area: "local" }); const validateForm = () => { if (!apiKey) { setError("Personal access token is required"); return false; } setError(""); return true; }; const handleSubmit = async (event: { preventDefault: () => void }) => { event.preventDefault(); if (!validateForm()) return; setLoading(true); try { const response = await fetch(await buildBackendUrl("/verify-token"), { method: "GET", headers: { Authorization: `Bearer ${apiKey}`, }, }); setLoading(false); if (response.ok) { // Store the PAT as the bearer token for existing background handlers. await storage.set("token", apiKey); navigation("/"); } else { setError("Invalid personal access token. Please check and try again."); } } catch (error) { setLoading(false); setError("An error occurred. Please try again later."); } }; return (
Your personal access token connects this extension to SurfSense.
Need a personal access token?{" "} Sign up