OAuthSecrets() — supabase Function Reference
Architecture documentation for the OAuthSecrets() function in OAuthSecrets.tsx from the supabase codebase.
Entity Profile
Relationship Graph
Source Code
apps/studio/components/interfaces/Organization/OAuthApps/OAuthSecrets/OAuthSecrets.tsx lines 19–95
export const OAuthSecrets = ({ selectedApp }: Props) => {
const { slug } = useParams()
const [createdSecret, setCreatedSecret] = useState<CreatedSecret>()
const { can: canManageSecrets } = useAsyncCheckPermissions(PermissionAction.UPDATE, 'oauth_apps')
const { id: appId } = selectedApp ?? {}
const { data } = useClientSecretsQuery({ slug, appId })
const secrets = data?.client_secrets ?? []
const { mutate: createSecret, isPending: isCreatingSecret } = useClientSecretCreateMutation({
onSuccess: (data) => setCreatedSecret(data),
})
const handleCreateSecret = () => {
if (!slug) return console.error('Slug is required')
if (!appId) return console.error('App ID is required')
createSecret({ slug, appId })
}
return (
<div className="flex flex-col gap-4">
<div className="flex items-center justify-between">
<div className="flex flex-col">
<span className="text-sm text-foreground">Client secrets</span>
<span className="text-sm text-foreground-light">
For handling callbacks in the OAuth 2.0 flow. Learn more{' '}
<InlineLink
href={`${DOCS_URL}/guides/integrations/build-a-supabase-integration#handling-the-callback`}
>
here
</InlineLink>
.
</span>
</div>
{canManageSecrets && (
<ButtonTooltip
type="default"
disabled={!appId || secrets.length >= 5}
onClick={handleCreateSecret}
loading={isCreatingSecret}
tooltip={{
content: {
side: 'bottom',
text: secrets.length >= 5 ? 'You can only have up to 5 client secrets' : undefined,
},
}}
>
Generate new secret
</ButtonTooltip>
)}
</div>
{createdSecret && (
<Alert_Shadcn_ variant="default">
<InfoIcon />
<AlertTitle_Shadcn_>
Make sure to copy your new client secret now. You won't be able to see it again.
</AlertTitle_Shadcn_>
</Alert_Shadcn_>
)}
<div className="-space-y-px">
{secrets
.sort((a, b) => new Date(b.created_at).getTime() - new Date(a.created_at).getTime())
.map((secret) => {
const isNew = createdSecret?.id === secret.id
const _secret = isNew
? { ...secret, client_secret: createdSecret.client_secret }
: secret
return <SecretRow key={secret.id} secret={_secret} appId={appId} />
})}
</div>
</div>
)
}
Domain
Subdomains
Source
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free