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,