diff --git a/studio/components/interfaces/Home/NewProjectPanel/APIKeys.tsx b/studio/components/interfaces/Home/NewProjectPanel/APIKeys.tsx
index be15452cdae..c870e476db0 100644
--- a/studio/components/interfaces/Home/NewProjectPanel/APIKeys.tsx
+++ b/studio/components/interfaces/Home/NewProjectPanel/APIKeys.tsx
@@ -1,6 +1,58 @@
+import Link from 'next/link'
+import { useState } from 'react'
+import { useRouter } from 'next/router'
+import { Input, IconLoader, IconAlertCircle } from '@supabase/ui'
+import { JwtSecretUpdateStatus } from '@supabase/shared-types/out/events'
+import { PermissionAction } from '@supabase/shared-types/out/constants'
+
+import { checkPermissions, useJwtSecretUpdateStatus, useProjectSettings } from 'hooks'
+import { DEFAULT_PROJECT_API_SERVICE_ID } from 'lib/constants'
+import Snippets from 'components/to-be-cleaned/Docs/Snippets'
import Panel from 'components/ui/Panel'
+import SimpleCodeBlock from 'components/to-be-cleaned/SimpleCodeBlock'
const APIKeys = () => {
+ const router = useRouter()
+ const { ref } = router.query
+
+ const availableLanguages = [
+ { name: 'Javascript', key: 'js' },
+ { name: 'Python', key: 'python' },
+ { name: 'Dart', key: 'dart' },
+ ]
+ const [selectedLanguage, setSelectedLanguage] = useState(availableLanguages[0])
+
+ const {
+ services,
+ isError: isProjectSettingsError,
+ isLoading: isProjectSettingsLoading,
+ } = useProjectSettings(ref as string | undefined)
+
+ const {
+ jwtSecretUpdateStatus,
+ isError: isJwtSecretUpdateStatusError,
+ isLoading: isJwtSecretUpdateStatusLoading,
+ }: any = useJwtSecretUpdateStatus(ref)
+
+ const canReadAPIKeys = checkPermissions(PermissionAction.READ, 'service_api_keys')
+
+ // Get the API service
+ const apiService = (services ?? []).find((x: any) => x.app.id == DEFAULT_PROJECT_API_SERVICE_ID)
+ const apiConfig = apiService?.app_config ?? {}
+ const apiKeys = apiService?.service_api_keys ?? []
+
+ // API keys should not be empty. However it can be populated with a delay on project creation
+ const isApiKeysEmpty = apiKeys.length === 0
+ const isNotUpdatingJwtSecret =
+ jwtSecretUpdateStatus === undefined || jwtSecretUpdateStatus === JwtSecretUpdateStatus.Updated
+
+ const apiUrl = `https://${apiConfig.endpoint}`
+ const anonKey = apiKeys.find((key: any) => key.tags === 'anon')
+
+ const clientInitSnippet: any = Snippets.init(apiUrl)
+ const selectedLanguageSnippet =
+ clientInitSnippet[selectedLanguage.key]?.code ?? 'No snippet available'
+
return (
Your API is secured behind an API gateway which requires an API Key for every request.
- You can use the keys below to use Supabase client libraries.
+ You can use the parameters below to use Supabase client libraries.
+ {isProjectSettingsError ? 'Failed to retrieve API keys' : 'Failed to update JWT secret'} +
++ {isProjectSettingsLoading || isApiKeysEmpty + ? 'Retrieving API keys' + : 'JWT secret is being updated'} +
+API Key
+
+ {x}
+
+ ))}
+ {'public'}
+ + This key is safe to use in a browser if you have enabled Row Level Security (RLS) + for your tables and configured policies. You may also use the service key which + can be found{' '} + + here + {' '} + to bypass RLS. +
+ } + /> +- Interact with your database through the Supabase client libraries with your API keys. + Interact with your database through the{' '} + + Supabase client libraries + {' '} + with your API keys.
More information about your project's keys can be found in your project's API
@@ -235,8 +238,6 @@ const NewProjectPanel: FC