RealtimeTokensPopover() — supabase Function Reference
Architecture documentation for the RealtimeTokensPopover() function in RealtimeTokensPopover.tsx from the supabase codebase.
Entity Profile
Relationship Graph
Source Code
apps/studio/components/interfaces/Realtime/Inspector/RealtimeTokensPopover.tsx lines 23–94
export const RealtimeTokensPopover = ({ config, onChangeConfig }: RealtimeTokensPopoverProps) => {
const { ref } = useParams()
const { data: org } = useSelectedOrganizationQuery()
const snap = useRoleImpersonationStateSnapshot()
const { can: canReadAPIKeys } = useAsyncCheckPermissions(PermissionAction.SECRETS_READ, '*')
const { data: apiKeys } = useAPIKeysQuery(
{
projectRef: config.projectRef,
reveal: true,
},
{ enabled: canReadAPIKeys }
)
const { anonKey, publishableKey } = getKeys(apiKeys)
const { data: postgrestConfig } = useProjectPostgrestConfigQuery(
{ projectRef: config.projectRef },
{ enabled: IS_PLATFORM }
)
const jwtSecret = postgrestConfig?.jwt_secret
const { mutate: sendEvent } = useSendEventMutation()
// only send a telemetry event if the user changes the role. Don't send an event during initial render.
const isMounted = useRef(false)
useEffect(() => {
if (isMounted.current) {
sendEvent({
action: 'realtime_inspector_database_role_updated',
groups: { project: ref ?? 'Unknown', organization: org?.slug ?? 'Unknown' },
})
}
isMounted.current = true
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [snap.role])
useEffect(() => {
const triggerUpdateTokenBearer = async () => {
let token: string | undefined
let bearer: string | null = null
if (
config.projectRef !== undefined &&
jwtSecret !== undefined &&
snap.role !== undefined &&
snap.role.type === 'postgrest'
) {
token = publishableKey?.api_key ?? anonKey?.api_key
await getRoleImpersonationJWT(config.projectRef, jwtSecret, snap.role)
.then((b) => (bearer = b))
.catch((err) => toast.error(`Failed to get JWT for role: ${err.message}`))
} else {
try {
const data = await getTemporaryAPIKey({ projectRef: config.projectRef, expiry: 3600 })
token = data.api_key
} catch (error) {
token = publishableKey?.api_key
}
}
if (token) {
onChangeConfig({ ...config, token, bearer })
}
}
triggerUpdateTokenBearer()
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [snap.role, anonKey])
return <RoleImpersonationPopover align="start" variant="connected-on-both" />
}
Domain
Subdomains
Source
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free