| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- import { PermissionAction } from '@supabase/shared-types/out/constants'
- import { useParams } from 'common'
- import { AlertCircle, ExternalLink, Loader2 } from 'lucide-react'
- import Link from 'next/link'
- import type { ReactNode } from 'react'
- import { Button } from 'ui'
- import { Input } from 'ui-patterns/DataInputs/Input'
- import type { projectKeys } from './Connect.types'
- import { useAsyncCheckPermissions } from '@/hooks/misc/useCheckPermissions'
- function KeyRow({ label, value }: { label: ReactNode; value: string }) {
- return (
- <div className="flex flex-col gap-5 lg:grid lg:grid-cols-12">
- <div className="col-span-4">
- <h3 className="text-sm text-foreground">{label}</h3>
- </div>
- <div className="col-span-8">
- <Input readOnly copy className="font-mono" value={value} />
- </div>
- </div>
- )
- }
- export function ApiKeysTabContent({ projectKeys }: { projectKeys: projectKeys }) {
- const { ref: projectRef } = useParams()
- const { isLoading: isLoadingPermissions, can: canReadAPIKeys } = useAsyncCheckPermissions(
- PermissionAction.SECRETS_READ,
- '*'
- )
- if (isLoadingPermissions) {
- return (
- <div className="flex items-center justify-center py-8 space-x-2">
- <Loader2 className="animate-spin" size={16} strokeWidth={1.5} />
- <p className="text-sm text-foreground-light">Retrieving API keys</p>
- </div>
- )
- }
- if (!canReadAPIKeys) {
- return (
- <div className="flex items-center py-8 space-x-2">
- <AlertCircle size={16} strokeWidth={1.5} />
- <p className="text-sm text-foreground-light">You don't have permission to view API keys.</p>
- </div>
- )
- }
- return (
- <div className="flex flex-col gap-8">
- <KeyRow label="Project URL" value={projectKeys.apiUrl ?? ''} />
- <KeyRow label="Publishable Key" value={projectKeys.publishableKey ?? ''} />
- <KeyRow
- label={
- <>
- Anon Key <span className="text-foreground-lighter font-normal">(Legacy)</span>
- </>
- }
- value={projectKeys.anonKey ?? ''}
- />
- <div className="gap-5 lg:grid lg:grid-cols-12">
- <div className="col-start-5 col-span-8 pl-2 flex items-center justify-between">
- <p className="text-xs text-foreground-lighter">For secret keys, see API settings.</p>
- <Button asChild type="default" icon={<ExternalLink size={14} />}>
- <Link href={`/project/${projectRef}/settings/api-keys`}>API settings</Link>
- </Button>
- </div>
- </div>
- </div>
- )
- }
|