diff --git a/apps/web/app/dashboard/settings/company-settings-form.tsx b/apps/web/app/dashboard/settings/company-settings-form.tsx index f76cfd4..a75f872 100644 --- a/apps/web/app/dashboard/settings/company-settings-form.tsx +++ b/apps/web/app/dashboard/settings/company-settings-form.tsx @@ -38,6 +38,7 @@ export function CompanySettingsForm({ company }: CompanySettingsFormProps) { const router = useRouter() const queryClient = useQueryClient() const [deleteConfirmation, setDeleteConfirmation] = useState("") + const [copyStatus, setCopyStatus] = useState<"idle" | "copied" | "error">("idle") const updateMutation = useMutation({ mutationFn: (payload: { name: string; description: string }) => updateCompanyAction(company.id, payload).then((result) => { @@ -76,8 +77,37 @@ export function CompanySettingsForm({ company }: CompanySettingsFormProps) { return result }), + onSuccess: () => { + setCopyStatus("idle") + }, }) + async function copyToken(token: string) { + try { + if (navigator.clipboard?.writeText) { + await navigator.clipboard.writeText(token) + } else { + const textArea = document.createElement("textarea") + textArea.value = token + textArea.setAttribute("readonly", "") + textArea.style.position = "fixed" + textArea.style.opacity = "0" + document.body.appendChild(textArea) + textArea.select() + const copied = document.execCommand("copy") + document.body.removeChild(textArea) + + if (!copied) { + throw new Error("Copy command failed") + } + } + + setCopyStatus("copied") + } catch { + setCopyStatus("error") + } + } + function updateCompany(formData: FormData) { updateMutation.mutate({ name: String(formData.get("name") ?? ""), @@ -130,10 +160,33 @@ export function CompanySettingsForm({ company }: CompanySettingsFormProps) {

{tokenMutation.data?.token ? (
-

- New company bearer token · copy now -

-

{tokenMutation.data.token}

+
+
+

+ New company bearer token · copy now +

+

{tokenMutation.data.token}

+
+ +
+ {copyStatus === "copied" ? ( +

+ Token copied to clipboard. +

+ ) : null} + {copyStatus === "error" ? ( +

+ Could not copy automatically. Select and copy the token manually. +

+ ) : null}

This token cannot be viewed again. Update `.openclaw/agentbridge/.env` or any other external agent configuration that uses the old token.