diff --git a/src/components/verification/VerificationsDialog.tsx b/src/components/verification/VerificationsDialog.tsx index d61823968..4f8edf4a8 100644 --- a/src/components/verification/VerificationsDialog.tsx +++ b/src/components/verification/VerificationsDialog.tsx @@ -40,7 +40,6 @@ export function VerificationsDialog({ profile={profile} verificationState={verificationState} /> - ) } diff --git a/src/components/verification/VerifierDialog.tsx b/src/components/verification/VerifierDialog.tsx index 01f7e4bd3..5a405dba0 100644 --- a/src/components/verification/VerifierDialog.tsx +++ b/src/components/verification/VerifierDialog.tsx @@ -151,8 +151,6 @@ function Inner({ - - ) } diff --git a/src/screens/Profile/Header/DisplayName.tsx b/src/screens/Profile/Header/DisplayName.tsx index b74c063d4..bed3425db 100644 --- a/src/screens/Profile/Header/DisplayName.tsx +++ b/src/screens/Profile/Header/DisplayName.tsx @@ -1,11 +1,12 @@ import {View} from 'react-native' -import {AppBskyActorDefs, ModerationDecision} from '@atproto/api' +import {type AppBskyActorDefs, type ModerationDecision} from '@atproto/api' import {sanitizeDisplayName} from '#/lib/strings/display-names' import {sanitizeHandle} from '#/lib/strings/handles' -import {Shadow} from '#/state/cache/types' -import {atoms as a, useBreakpoints, useTheme} from '#/alf' +import {type Shadow} from '#/state/cache/types' +import {atoms as a, platform, useBreakpoints, useTheme} from '#/alf' import {Text} from '#/components/Typography' +import {VerificationCheckButton} from '#/components/verification/VerificationCheckButton' export function ProfileHeaderDisplayName({ profile, @@ -18,7 +19,7 @@ export function ProfileHeaderDisplayName({ const {gtMobile} = useBreakpoints() return ( - + + + ) diff --git a/src/state/queries/constellation.ts b/src/state/queries/constellation.ts index 5117af8c5..e2909af7c 100644 --- a/src/state/queries/constellation.ts +++ b/src/state/queries/constellation.ts @@ -28,12 +28,17 @@ const headers = new Headers({ const makeReqUrl = ( instance: string, route: string, - params: Record, + params: Record, ) => { const url = new URL(instance) url.pathname = route for (const [k, v] of Object.entries(params)) { - url.searchParams.set(k, v) + // NOTE: in the future this should probably be a repeated param... + if (Array.isArray(v)) { + url.searchParams.set(k, v.join(',')) + } else { + url.searchParams.set(k, v) + } } return url } @@ -46,6 +51,7 @@ export async function* constellationLinks( target: string collection: Collection path: string + from_dids?: string[] }, ) { const url = makeReqUrl(instance, 'links', params) diff --git a/src/state/queries/deer-verification.ts b/src/state/queries/deer-verification.ts index 0975441d7..ac98065a1 100644 --- a/src/state/queries/deer-verification.ts +++ b/src/state/queries/deer-verification.ts @@ -18,7 +18,6 @@ import { asyncGenCollect, asyncGenDedupe, asyncGenFilter, - asyncGenTake, asyncGenTryMap, type ConstellationLink, constellationLinks, @@ -49,17 +48,12 @@ export function getTrustedConstellationVerifications( trusted: Set, ) { const urip = new AtUri(did) - const verificationLinks = asyncGenTake( - constellationLinks(instance, { - target: urip.host, - collection: 'app.bsky.graph.verification', - path: '.subject', - // TODO: remove this when constellation supports filtering - // without a max here, a malicious user could create thousands of verification records and hang a client - // since we can't filter to only trusted verifiers before searching for backlinks yet - }), - 100, - ) + const verificationLinks = constellationLinks(instance, { + target: urip.host, + collection: 'app.bsky.graph.verification', + path: '.subject', + from_dids: Array.from(trusted), + }) return asyncGenDedupe( asyncGenFilter(verificationLinks, ({did}) => trusted.has(did)), ({did}) => did,