diff --git a/src/lib/constants.ts b/src/lib/constants.ts
index e868443950..f5a72669a9 100644
--- a/src/lib/constants.ts
+++ b/src/lib/constants.ts
@@ -35,6 +35,10 @@ export const MAX_GRAPHEME_LENGTH = 300
// but increasing limit per user feedback
export const MAX_ALT_TEXT = 1000
+export function IS_TEST_USER(handle?: string) {
+ return handle && handle?.endsWith('.test')
+}
+
export function IS_PROD_SERVICE(url?: string) {
return url && url !== STAGING_SERVICE && url !== LOCAL_DEV_SERVICE
}
diff --git a/src/screens/Moderation/index.tsx b/src/screens/Moderation/index.tsx
index bbce303ecc..2c3e53bae9 100644
--- a/src/screens/Moderation/index.tsx
+++ b/src/screens/Moderation/index.tsx
@@ -21,10 +21,10 @@ import {ScrollView} from '#/view/com/util/Views'
import {
UsePreferencesQueryResponse,
+ useMyLabelers,
usePreferencesQuery,
usePreferencesSetAdultContentMutation,
} from '#/state/queries/preferences'
-import {useLabelersDetailedInfoQuery} from '#/state/queries/labeler'
import {logger} from '#/logger'
import {useTheme, atoms as a, useBreakpoints} from '#/alf'
@@ -86,16 +86,11 @@ export function ModerationScreen(
error: preferencesError,
data: preferences,
} = usePreferencesQuery()
- const labelerDids = preferences
- ? preferences.moderationPrefs.labelers.map(l => l.did)
- : []
const {
isLoading: isLabelersLoading,
data: labelers,
error: labelersError,
- } = useLabelersDetailedInfoQuery({
- dids: labelerDids,
- })
+ } = useMyLabelers()
const {gtMobile} = useBreakpoints()
const {height} = useSafeAreaFrame()
@@ -411,36 +406,10 @@ export function ModerationScreenInner({
Advanced
-
-
-
-
-
-
- {labelers.map(mod => {
+ {labelers.map((mod, i) => {
return (
-
+ {i !== 0 && }
([])
const [saving, setSaving] = React.useState(false)
const suggestedFeedUris = React.useMemo(() => {
- if (!IS_PROD_SERVICE(currentAccount?.service)) return []
+ if (IS_TEST_USER(currentAccount?.handle)) return []
return aggregateInterestItems(
state.interestsStepResults.selectedInterests,
state.interestsStepResults.apiResponse.suggestedFeedUris,
state.interestsStepResults.apiResponse.suggestedFeedUris.default || [],
).slice(0, 10)
}, [
- currentAccount?.service,
+ currentAccount?.handle,
state.interestsStepResults.apiResponse.suggestedFeedUris,
state.interestsStepResults.selectedInterests,
])
diff --git a/src/state/queries/preferences/moderation.ts b/src/state/queries/preferences/moderation.ts
index f7a5637984..9386848b96 100644
--- a/src/state/queries/preferences/moderation.ts
+++ b/src/state/queries/preferences/moderation.ts
@@ -1,6 +1,6 @@
import {
DEFAULT_LABEL_SETTINGS,
- BSKY_LABELER_DID,
+ BskyAgent,
interpretLabelValueDefinitions,
} from '@atproto/api'
@@ -17,10 +17,9 @@ export const DEFAULT_LOGGED_OUT_LABEL_PREFERENCES: typeof DEFAULT_LABEL_SETTINGS
export function useMyLabelers() {
const prefs = usePreferencesQuery()
- const dids = prefs.data?.moderationPrefs.labelers.map(l => l.did) || []
- if (!dids.includes(BSKY_LABELER_DID)) {
- dids.push(BSKY_LABELER_DID)
- }
+ const dids = BskyAgent.modAuthoritiesHeader.concat(
+ prefs.data?.moderationPrefs.labelers.map(l => l.did) || [],
+ )
const labelers = useLabelersDetailedInfoQuery({dids})
return {
isLoading: prefs.isLoading || labelers.isLoading,
diff --git a/src/state/session/index.tsx b/src/state/session/index.tsx
index f3b3d70ae7..e969dc19d8 100644
--- a/src/state/session/index.tsx
+++ b/src/state/session/index.tsx
@@ -1,9 +1,14 @@
import React from 'react'
-import {BskyAgent, AtpPersistSessionHandler} from '@atproto/api'
+import {
+ BskyAgent,
+ AtpPersistSessionHandler,
+ BSKY_LABELER_DID,
+} from '@atproto/api'
import {useQueryClient} from '@tanstack/react-query'
import {jwtDecode} from 'jwt-decode'
import {IS_DEV} from '#/env'
+import {IS_TEST_USER} from '#/lib/constants'
import {isWeb} from '#/platform/detection'
import {networkRetry} from '#/lib/async/retry'
import {logger} from '#/logger'
@@ -257,6 +262,8 @@ export function Provider({children}: React.PropsWithChildren<{}>) {
deactivated,
}
+ await configureModeration(agent, account)
+
agent.setPersistSessionHandler(
createPersistSessionHandler(
account,
@@ -300,6 +307,8 @@ export function Provider({children}: React.PropsWithChildren<{}>) {
deactivated: isSessionDeactivated(agent.session.accessJwt),
}
+ await configureModeration(agent, account)
+
agent.setPersistSessionHandler(
createPersistSessionHandler(
account,
@@ -354,6 +363,7 @@ export function Provider({children}: React.PropsWithChildren<{}>) {
})
// @ts-ignore
if (IS_DEV && isWeb) window.agent = agent
+ await configureModeration(agent, account)
let canReusePrevSession = false
try {
@@ -649,6 +659,17 @@ export function Provider({children}: React.PropsWithChildren<{}>) {
)
}
+async function configureModeration(agent: BskyAgent, account: SessionAccount) {
+ if (IS_TEST_USER(account.handle)) {
+ console.warn('USING TEST ENV MODERATION')
+ const did = (await agent.resolveHandle({handle: 'mod-authority.test'})).data
+ .did
+ BskyAgent.configure({modAuthorities: [did]})
+ } else {
+ BskyAgent.configure({modAuthorities: [BSKY_LABELER_DID]})
+ }
+}
+
export function useSession() {
return React.useContext(StateContext)
}
diff --git a/src/view/com/auth/create/state.ts b/src/view/com/auth/create/state.ts
index 7a727ec0b2..840084dcb7 100644
--- a/src/view/com/auth/create/state.ts
+++ b/src/view/com/auth/create/state.ts
@@ -12,7 +12,7 @@ import {createFullHandle, validateHandle} from '#/lib/strings/handles'
import {cleanError} from '#/lib/strings/errors'
import {useOnboardingDispatch} from '#/state/shell/onboarding'
import {useSessionApi} from '#/state/session'
-import {DEFAULT_SERVICE, IS_PROD_SERVICE} from '#/lib/constants'
+import {DEFAULT_SERVICE, IS_TEST_USER} from '#/lib/constants'
import {
DEFAULT_PROD_FEEDS,
usePreferencesSetBirthDateMutation,
@@ -147,7 +147,7 @@ export function useSubmitCreateAccount(
: undefined,
})
setBirthDate({birthDate: uiState.birthDate})
- if (IS_PROD_SERVICE(uiState.serviceUrl)) {
+ if (!IS_TEST_USER(uiState.handle)) {
setSavedFeeds(DEFAULT_PROD_FEEDS)
}
} catch (e: any) {