'use client' import type { ApiKey, Environment, } from '@dify/contracts/enterprise/types.gen' import { AlertDialog, AlertDialogActions, AlertDialogCancelButton, AlertDialogConfirmButton, AlertDialogContent, AlertDialogDescription, AlertDialogTitle, } from '@langgenius/dify-ui/alert-dialog' import { cn } from '@langgenius/dify-ui/cn' import { toast } from '@langgenius/dify-ui/toast' import { useMutation } from '@tanstack/react-query' import { useState } from 'react' import { useTranslation } from 'react-i18next' import { consoleQuery } from '@/service/client' import { DetailTable, DetailTableBody, DetailTableCard, DetailTableCardList, DetailTableCell, DetailTableHead, DetailTableHeader, DetailTableRow, } from '../../components/detail-table' import { API_KEY_DETAIL_TABLE_COLUMN_CLASS_NAMES, } from '../../components/detail-table-styles' function ApiKeyName({ apiKey }: { apiKey: ApiKey }) { return ( {apiKey.displayName} ) } function EnvironmentBadge({ environment }: { environment?: Environment }) { return ( {environment?.displayName ?? '—'} ) } function ApiKeyValue({ value }: { value: string }) { return (
{value}
) } function RevokeApiKeyButton({ apiKey }: { apiKey: ApiKey }) { const { t } = useTranslation('deployments') const [showRevokeConfirm, setShowRevokeConfirm] = useState(false) const revokeApiKey = useMutation(consoleQuery.enterprise.accessService.deleteApiKey.mutationOptions()) const isRevoking = revokeApiKey.isPending const apiKeyName = apiKey.displayName function handleRevoke() { if (isRevoking) return revokeApiKey.mutate( { params: { appInstanceId: apiKey.appInstanceId, environmentId: apiKey.environmentId, apiKeyId: apiKey.id, }, }, { onSuccess: () => { setShowRevokeConfirm(false) toast.success(t('access.api.revokeSuccess')) }, onError: () => { toast.error(t('access.api.revokeFailed')) }, }, ) } function handleRevokeConfirmOpenChange(open: boolean) { if (isRevoking) return setShowRevokeConfirm(open) } return ( <>
{t('access.api.revokeConfirmTitle')} {t('access.api.revokeConfirmDescription', { name: apiKeyName })}
{t('operation.cancel', { ns: 'common' })} {t('access.revoke')}
) } function ApiKeyMobileRow({ apiKey, environment }: { apiKey: ApiKey environment?: Environment }) { const { t } = useTranslation('deployments') const displayValue = apiKey.maskedToken return (
{t('access.api.table.key')}
) } function ApiKeyDesktopRow({ apiKey, environment }: { apiKey: ApiKey environment?: Environment }) { const displayValue = apiKey.maskedToken return (
) } function ApiKeyTableHeader() { const { t } = useTranslation('deployments') return ( {t('access.api.table.name')} {t('access.api.table.environment')} {t('access.api.table.key')} {t('access.api.table.action')} ) } export function ApiKeyList({ apiKeys, environments }: { apiKeys: ApiKey[] environments: Environment[] }) { const environmentById = new Map(environments.map(environment => [environment.id, environment])) return ( <> {apiKeys.map(apiKey => ( ))}
{apiKeys.map(apiKey => ( ))}
) }