From 185c3d6ee14b09a1bffafcbc950cf7be7851772d Mon Sep 17 00:00:00 2001 From: Paul Frazee Date: Sat, 9 Mar 2024 13:25:22 -0800 Subject: [PATCH] Add test-environment mod authority --- src/lib/constants.ts | 4 +++ src/screens/Moderation/index.tsx | 39 +++------------------ src/screens/Onboarding/StepTopicalFeeds.tsx | 6 ++-- src/state/queries/preferences/moderation.ts | 9 +++-- src/state/session/index.tsx | 23 +++++++++++- src/view/com/auth/create/state.ts | 4 +-- 6 files changed, 39 insertions(+), 46 deletions(-) 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) {