import { PermissionAction } from '@supabase/shared-types/out/constants' import { useMemo } from 'react' import { useParams } from 'common' import { FormHeader } from 'components/ui/Forms/FormHeader' import { APIKeysData, useAPIKeysQuery } from 'data/api-keys/api-keys-query' import { useCheckPermissions, usePermissionsLoaded } from 'hooks/misc/useCheckPermissions' import { Card, CardContent, EyeOffIcon, Skeleton, WarningIcon, cn } from 'ui' import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from 'ui/src/components/shadcn/ui/table' import { APIKeyRow } from './APIKeyRow' import CreateSecretAPIKeyModal from './CreateSecretAPIKeyModal' export const SecretAPIKeys = () => { const { ref: projectRef } = useParams() const { data: apiKeysData, isLoading: isLoadingApiKeys, error, } = useAPIKeysQuery({ projectRef, reveal: false }) const isLoadingPermissions = !usePermissionsLoaded() const canReadAPIKeys = useCheckPermissions(PermissionAction.TENANT_SQL_ADMIN_WRITE, '*') const secretApiKeys = useMemo( () => apiKeysData?.filter( (key): key is Extract => key.type === 'secret' ) ?? [], [apiKeysData] ) const empty = secretApiKeys?.length === 0 && !isLoadingApiKeys && !isLoadingPermissions const RowLoading = () => ( ) const TableContainer = ({ children }: { children: React.ReactNode }) => (
} /> Name API Key {children}
) if (isLoadingApiKeys || isLoadingPermissions) { return ( ) } if (!canReadAPIKeys) { return (

You do not have permission to read API Secret Keys

Contact your organization owner/admin to request access.

) } if (error) { return (

Error loading Secret API Keys

{error.message}

) } if (empty) { return (

No secret API keys exist

Your project can't be accessed using secret API keys.

) } return ( {secretApiKeys.map((apiKey) => ( ))} ) }