import { Eye, RefreshCcw } from "lucide-react"; import { Trans, useTranslation } from "react-i18next"; import type { MetaFunction } from "react-router"; import { useLoaderData } from "react-router"; import { CopyToClipboardPopover } from "~/components/CopyToClipboardPopover"; import { SendouButton } from "~/components/elements/Button"; import { FormMessage } from "~/components/FormMessage"; import { FormWithConfirm } from "~/components/FormWithConfirm"; import { Main } from "~/components/Main"; import { SubmitButton } from "~/components/SubmitButton"; import { metaTags } from "~/utils/remix"; import { API_DOC_LINK } from "~/utils/urls"; import { action } from "../actions/api.server"; import { loader } from "../loaders/api.server"; export { action, loader }; export const meta: MetaFunction = (args) => { return metaTags({ title: "API Access", location: args.location, }); }; export default function ApiPage() { const data = useLoaderData(); const { t } = useTranslation(["common"]); return (

{t("common:api.title")}

Generate an API token to access the sendou.ink API. See the API documentation for available endpoints, usage examples and guidelines to follow.

{!data.hasAccess ? (
{t("common:api.noAccess")}
) : (
)}
); } function TokenSection({ token, tokenType, generateAction, }: { token: string | null; tokenType: "read" | "write"; generateAction: string; }) { const { t } = useTranslation(["common"]); const isWriteToken = tokenType === "write"; const labelKey = isWriteToken ? "common:api.writeTokenLabel" : "common:api.readTokenLabel"; const descriptionKey = isWriteToken ? "common:api.writeTokenDescription" : "common:api.readTokenDescription"; return (

{t(labelKey)}

{t(descriptionKey)}

{token ? (
}> {t("common:api.revealButton")} } />
}> {t("common:api.regenerate.button")}
) : (
{t("common:api.generate")}
)}
); }