point the state and feature moderation call sites at the sdk

Query, notification and feature-level moderation reads switch to the sdk types
and take their `moderate*`/`hasMutedWord` entry points from the
`lib/moderation/subjects` seam, since these paths still carry
`@atproto/api`-typed views.

`shouldFilterNotif` is the one behavioral seam worth noting: its notification
and facet values come from an unmigrated read, so the mute-word check goes
through the widening wrapper rather than the sdk export directly.
This commit is contained in:
Samuel Newman
2026-08-04 02:36:02 +03:00
parent f1411df0a4
commit de09c83f99
17 changed files with 30 additions and 40 deletions
+1 -1
View File
@@ -1,5 +1,5 @@
import {createContext, useContext, useMemo} from 'react'
import {hasMutedWord} from '@atproto/api'
import {hasMutedWord} from '@bsky.app/sdk/moderation'
import {QueryClient, useQuery} from '@tanstack/react-query'
import {useOnAppStateChange} from '#/lib/appState'
@@ -1,16 +1,13 @@
import {useCallback, useMemo} from 'react'
import {View} from 'react-native'
import {Image} from 'expo-image'
import {
type AppBskyActorDefs,
type AppBskyEmbedExternal,
moderateStatus,
} from '@atproto/api'
import {type AppBskyActorDefs, type AppBskyEmbedExternal} from '@atproto/api'
import {Trans, useLingui} from '@lingui/react/macro'
import {useNavigation} from '@react-navigation/native'
import {useQueryClient} from '@tanstack/react-query'
import {useOpenLink} from '#/lib/hooks/useOpenLink'
import {moderateStatus} from '#/lib/moderation/subjects'
import {type NavigationProp} from '#/lib/routes/types'
import {sanitizeHandle} from '#/lib/strings/handles'
import {toNiceDomain} from '#/lib/strings/url-helpers'
+1 -1
View File
@@ -3,7 +3,6 @@ import {
type $Typed,
type AppBskyActorDefs,
AppBskyEmbedExternal,
moderateStatus,
} from '@atproto/api'
import {retry} from '@atproto/common-web'
import {type l} from '@atproto/lex'
@@ -16,6 +15,7 @@ import {isAfter, parseISO} from 'date-fns'
import {uploadBlob} from '#/lib/api'
import {imageToThumb} from '#/lib/api/resolve'
import {getLinkMeta, type LinkMeta} from '#/lib/link-meta/link-meta'
import {moderateStatus} from '#/lib/moderation/subjects'
import {matchXrpcError} from '#/lib/xrpc-error'
import {useAppConfig} from '#/state/appConfig'
import {
+3 -5
View File
@@ -1,12 +1,10 @@
import {useCallback} from 'react'
import {
type AppBskyActorDefs,
moderateProfile,
type ModerationOpts,
} from '@atproto/api'
import {type AppBskyActorDefs} from '@atproto/api'
import {type ModerationOpts} from '@bsky.app/sdk/moderation'
import {keepPreviousData, useQuery, useQueryClient} from '@tanstack/react-query'
import {isJustAMute, moduiContainsHideableOffense} from '#/lib/moderation'
import {moderateProfile} from '#/lib/moderation/subjects'
import {logger} from '#/logger'
import {STALE} from '#/state/queries'
import {useAppviewClient} from '#/state/session'
+2 -6
View File
@@ -1,10 +1,5 @@
import {useMemo, useRef} from 'react'
import {
type AppBskyActorDefs,
AppBskyFeedDefs,
AtUri,
moderatePost,
} from '@atproto/api'
import {type AppBskyActorDefs, AppBskyFeedDefs, AtUri} from '@atproto/api'
import {type AtUriString} from '@atproto/syntax'
import {msg} from '@lingui/core/macro'
import {useLingui} from '@lingui/react'
@@ -17,6 +12,7 @@ import {
import {CustomFeedAPI} from '#/lib/api/feed/custom'
import {aggregateUserInterests} from '#/lib/api/feed/utils'
import {FeedTuner} from '#/lib/api/feed-manip'
import {moderatePost} from '#/lib/moderation/subjects'
import {cleanError} from '#/lib/strings/errors'
import {useModerationOpts} from '#/state/preferences/moderation-opts'
import {
+1 -1
View File
@@ -4,7 +4,6 @@ import {
type AppBskyFeedDefs,
type AppBskyGraphDefs,
AtUri,
moderateFeedGenerator,
} from '@atproto/api'
import {type AtUriString} from '@atproto/syntax'
import {RichText} from '@bsky.app/sdk/richtext'
@@ -20,6 +19,7 @@ import {
} from '@tanstack/react-query'
import {DISCOVER_FEED_URI, DISCOVER_SAVED_FEED} from '#/lib/constants'
import {moderateFeedGenerator} from '#/lib/moderation/subjects'
import {sanitizeDisplayName} from '#/lib/strings/display-names'
import {sanitizeHandle} from '#/lib/strings/handles'
import {asSdkFacets} from '#/lib/strings/rich-text-helpers'
+2 -6
View File
@@ -17,12 +17,7 @@
*/
import {useCallback, useEffect, useMemo, useRef} from 'react'
import {
AppBskyFeedDefs,
AppBskyFeedPost,
AtUri,
moderatePost,
} from '@atproto/api'
import {AppBskyFeedDefs, AppBskyFeedPost, AtUri} from '@atproto/api'
import {
type InfiniteData,
type QueryClient,
@@ -31,6 +26,7 @@ import {
useQueryClient,
} from '@tanstack/react-query'
import {moderatePost} from '#/lib/moderation/subjects'
import {useModerationOpts} from '#/state/preferences/moderation-opts'
import {STALE} from '#/state/queries'
import {useAppviewClient} from '#/state/session'
+2 -3
View File
@@ -6,16 +6,15 @@ import {
type AppBskyGraphDefs,
AppBskyGraphStarterpack,
type AppBskyNotificationListNotifications,
hasMutedWord,
moderateNotification,
type ModerationOpts,
} from '@atproto/api'
import {type Client} from '@atproto/lex'
import {type AtUriString} from '@atproto/syntax'
import {type ModerationOpts} from '@bsky.app/sdk/moderation'
import {type QueryClient} from '@tanstack/react-query'
import chunk from 'lodash.chunk'
import {labelIsHideableOffense} from '#/lib/moderation'
import {hasMutedWord, moderateNotification} from '#/lib/moderation/subjects'
import {app} from '#/lexicons'
import * as bsky from '#/types/bsky'
import {precacheProfile} from '../profile'
+5 -3
View File
@@ -5,12 +5,13 @@ import {
AppBskyFeedDefs,
type AppBskyFeedPost,
AtUri,
moderatePost,
type ModerationDecision,
type ModerationPrefs,
} from '@atproto/api'
import {type Client} from '@atproto/lex'
import {type AtIdentifierString, type AtUriString} from '@atproto/syntax'
import {
type ModerationDecision,
type ModerationPrefs,
} from '@bsky.app/sdk/moderation'
import {
type InfiniteData,
type QueryClient,
@@ -31,6 +32,7 @@ import {type FeedAPI, type ReasonFeedSource} from '#/lib/api/feed/types'
import {aggregateUserInterests} from '#/lib/api/feed/utils'
import {FeedTuner, type FeedTunerFn} from '#/lib/api/feed-manip'
import {DISCOVER_FEED_URI} from '#/lib/constants'
import {moderatePost} from '#/lib/moderation/subjects'
import {logger} from '#/logger'
import {STALE} from '#/state/queries'
import {DEFAULT_LOGGED_OUT_PREFERENCES} from '#/state/queries/preferences/const'
+1 -1
View File
@@ -1,4 +1,3 @@
import {moderateFeedGenerator} from '@atproto/api'
import {type DidString} from '@atproto/syntax'
import {
type InfiniteData,
@@ -6,6 +5,7 @@ import {
useInfiniteQuery,
} from '@tanstack/react-query'
import {moderateFeedGenerator} from '#/lib/moderation/subjects'
import {useAppviewClient} from '#/state/session'
import {app} from '#/lexicons'
import {useModerationOpts} from '../preferences/moderation-opts'
+1 -1
View File
@@ -1,4 +1,3 @@
import {moderateUserList} from '@atproto/api'
import {type DidString} from '@atproto/syntax'
import {
type InfiniteData,
@@ -6,6 +5,7 @@ import {
useInfiniteQuery,
} from '@tanstack/react-query'
import {moderateUserList} from '#/lib/moderation/subjects'
import {useAppviewClient} from '#/state/session'
import {app} from '#/lexicons'
import {useModerationOpts} from '../preferences/moderation-opts'
+2 -1
View File
@@ -1,5 +1,5 @@
import {useCallback, useMemo, useRef} from 'react'
import {type AppBskyFeedDefs, AtUri, moderatePost} from '@atproto/api'
import {type AppBskyFeedDefs, AtUri} from '@atproto/api'
import {
type InfiniteData,
type QueryClient,
@@ -7,6 +7,7 @@ import {
useInfiniteQuery,
} from '@tanstack/react-query'
import {moderatePost} from '#/lib/moderation/subjects'
import {useModerationOpts} from '#/state/preferences/moderation-opts'
import {useAppviewClient} from '#/state/session'
import {type SearchFilters} from '#/screens/Search/searchParams'
@@ -1,5 +1,5 @@
import {useCallback, useMemo} from 'react'
import {hasMutedWord} from '@atproto/api'
import {hasMutedWord} from '@bsky.app/sdk/moderation'
import {useQuery} from '@tanstack/react-query'
import {
+2 -1
View File
@@ -1,4 +1,5 @@
import {AppBskyUnspeccedDefs, type ModerationOpts} from '@atproto/api'
import {AppBskyUnspeccedDefs} from '@atproto/api'
import {type ModerationOpts} from '@bsky.app/sdk/moderation'
import {
type ApiThreadItem,
+1 -1
View File
@@ -5,8 +5,8 @@ import {
type AppBskyUnspeccedDefs,
type AppBskyUnspeccedGetPostThreadOtherV2,
type AppBskyUnspeccedGetPostThreadV2,
type ModerationDecision,
} from '@atproto/api'
import {type ModerationDecision} from '@bsky.app/sdk/moderation'
export type ApiThreadItem =
| AppBskyUnspeccedGetPostThreadV2.ThreadItem
+2 -2
View File
@@ -5,10 +5,10 @@ import {
type AppBskyUnspeccedDefs,
type AppBskyUnspeccedGetPostThreadV2,
AtUri,
moderatePost,
type ModerationOpts,
} from '@atproto/api'
import {type ModerationOpts} from '@bsky.app/sdk/moderation'
import {moderatePost} from '#/lib/moderation/subjects'
import {makeProfileLink} from '#/lib/routes/links'
import {
type ApiThreadItem,
+1 -1
View File
@@ -3,8 +3,8 @@ import {
type AppBskyActorDefs,
type AppBskyFeedDefs,
type AppBskyUnspeccedGetPostThreadV2,
type ModerationDecision,
} from '@atproto/api'
import {type ModerationDecision} from '@bsky.app/sdk/moderation'
import {msg} from '@lingui/core/macro'
import {useLingui} from '@lingui/react'
import {useQueryClient} from '@tanstack/react-query'