[SDK] Route moderation reports through the appview client (#11368)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Samuel Newman
2026-08-13 22:26:18 +03:00
committed by GitHub
parent 34d1c75756
commit d991118215
7 changed files with 127 additions and 87 deletions
@@ -1,13 +1,14 @@
import {useState} from 'react'
import {View} from 'react-native'
import {ToolsOzoneReportDefs} from '@atproto/api'
import {type DidString} from '@atproto/syntax'
import {msg} from '@lingui/core/macro'
import {useLingui} from '@lingui/react'
import {Trans} from '@lingui/react/macro'
import {useMutation} from '@tanstack/react-query'
import {BLUESKY_MOD_SERVICE_HEADERS} from '#/lib/constants'
import {useAgent, useSession} from '#/state/session'
import {MOD_PROXY_SERVICE} from '#/lib/constants'
import {useAppviewClient, useSession} from '#/state/session'
import {atoms as a, useBreakpoints, web} from '#/alf'
import {AgeAssuranceBadge} from '#/components/ageAssurance/AgeAssuranceBadge'
import {Button, ButtonIcon, ButtonText} from '#/components/Button'
@@ -17,6 +18,7 @@ import * as Toast from '#/components/Toast'
import {Text} from '#/components/Typography'
import {logger} from '#/ageAssurance'
import {useAnalytics} from '#/analytics'
import {com} from '#/lexicons'
export function AgeAssuranceAppealDialog({
control,
@@ -42,7 +44,7 @@ function Inner({control}: {control: Dialog.DialogControlProps}) {
const ax = useAnalytics()
const {currentAccount} = useSession()
const {gtPhone} = useBreakpoints()
const agent = useAgent()
const client = useAppviewClient()
const [details, setDetails] = useState('')
const isInvalid = details.length > 1000
@@ -51,19 +53,22 @@ function Inner({control}: {control: Dialog.DialogControlProps}) {
mutationFn: async () => {
ax.metric('ageAssurance:appealDialogSubmit', {})
await agent.createModerationReport(
if (!currentAccount) {
throw new Error('No current account, should be unreachable')
}
await client.call(
com.atproto.moderation.createReport,
{
reasonType: ToolsOzoneReportDefs.REASONAPPEAL,
subject: {
$type: 'com.atproto.admin.defs#repoRef',
did: currentAccount?.did,
// the persisted account did is already resolved
did: currentAccount.did as DidString,
},
reason: `AGE_ASSURANCE_INQUIRY: ` + details,
},
{
encoding: 'application/json',
headers: BLUESKY_MOD_SERVICE_HEADERS,
},
{service: MOD_PROXY_SERVICE},
)
},
onError: err => {