[Session] Experiment: Don't use withProxy (#4762)
* Reorder statements * Remove withProxy() usage behind a gatezio/stable
parent
ce0bf867ff
commit
9b9e09d002
|
@ -6,6 +6,7 @@ import {useLingui} from '@lingui/react'
|
||||||
|
|
||||||
import {getLabelingServiceTitle} from '#/lib/moderation'
|
import {getLabelingServiceTitle} from '#/lib/moderation'
|
||||||
import {ReportOption} from '#/lib/moderation/useReportOptions'
|
import {ReportOption} from '#/lib/moderation/useReportOptions'
|
||||||
|
import {useGate} from '#/lib/statsig/statsig'
|
||||||
import {useAgent} from '#/state/session'
|
import {useAgent} from '#/state/session'
|
||||||
import {CharProgress} from '#/view/com/composer/char-progress/CharProgress'
|
import {CharProgress} from '#/view/com/composer/char-progress/CharProgress'
|
||||||
import * as Toast from '#/view/com/util/Toast'
|
import * as Toast from '#/view/com/util/Toast'
|
||||||
|
@ -36,6 +37,7 @@ export function SubmitView({
|
||||||
const t = useTheme()
|
const t = useTheme()
|
||||||
const {_} = useLingui()
|
const {_} = useLingui()
|
||||||
const agent = useAgent()
|
const agent = useAgent()
|
||||||
|
const gate = useGate()
|
||||||
const [details, setDetails] = React.useState<string>('')
|
const [details, setDetails] = React.useState<string>('')
|
||||||
const [submitting, setSubmitting] = React.useState<boolean>(false)
|
const [submitting, setSubmitting] = React.useState<boolean>(false)
|
||||||
const [selectedServices, setSelectedServices] = React.useState<string[]>([
|
const [selectedServices, setSelectedServices] = React.useState<string[]>([
|
||||||
|
@ -60,15 +62,29 @@ export function SubmitView({
|
||||||
reason: details,
|
reason: details,
|
||||||
}
|
}
|
||||||
const results = await Promise.all(
|
const results = await Promise.all(
|
||||||
selectedServices.map(did =>
|
selectedServices.map(did => {
|
||||||
agent
|
if (gate('session_withproxy_fix')) {
|
||||||
.withProxy('atproto_labeler', did)
|
return agent
|
||||||
.createModerationReport(report)
|
.createModerationReport(report, {
|
||||||
.then(
|
encoding: 'application/json',
|
||||||
_ => true,
|
headers: {
|
||||||
_ => false,
|
'atproto-proxy': `${did}#atproto_labeler`,
|
||||||
),
|
},
|
||||||
),
|
})
|
||||||
|
.then(
|
||||||
|
_ => true,
|
||||||
|
_ => false,
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
return agent
|
||||||
|
.withProxy('atproto_labeler', did)
|
||||||
|
.createModerationReport(report)
|
||||||
|
.then(
|
||||||
|
_ => true,
|
||||||
|
_ => false,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}),
|
||||||
)
|
)
|
||||||
|
|
||||||
setSubmitting(false)
|
setSubmitting(false)
|
||||||
|
@ -92,6 +108,7 @@ export function SubmitView({
|
||||||
onSubmitComplete,
|
onSubmitComplete,
|
||||||
setError,
|
setError,
|
||||||
agent,
|
agent,
|
||||||
|
gate,
|
||||||
])
|
])
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|
|
@ -7,6 +7,7 @@ import {useMutation} from '@tanstack/react-query'
|
||||||
|
|
||||||
import {useLabelInfo} from '#/lib/moderation/useLabelInfo'
|
import {useLabelInfo} from '#/lib/moderation/useLabelInfo'
|
||||||
import {makeProfileLink} from '#/lib/routes/links'
|
import {makeProfileLink} from '#/lib/routes/links'
|
||||||
|
import {useGate} from '#/lib/statsig/statsig'
|
||||||
import {sanitizeHandle} from '#/lib/strings/handles'
|
import {sanitizeHandle} from '#/lib/strings/handles'
|
||||||
import {logger} from '#/logger'
|
import {logger} from '#/logger'
|
||||||
import {useAgent, useSession} from '#/state/session'
|
import {useAgent, useSession} from '#/state/session'
|
||||||
|
@ -201,22 +202,42 @@ function AppealForm({
|
||||||
const [details, setDetails] = React.useState('')
|
const [details, setDetails] = React.useState('')
|
||||||
const isAccountReport = 'did' in subject
|
const isAccountReport = 'did' in subject
|
||||||
const agent = useAgent()
|
const agent = useAgent()
|
||||||
|
const gate = useGate()
|
||||||
|
|
||||||
const {mutate, isPending} = useMutation({
|
const {mutate, isPending} = useMutation({
|
||||||
mutationFn: async () => {
|
mutationFn: async () => {
|
||||||
const $type = !isAccountReport
|
const $type = !isAccountReport
|
||||||
? 'com.atproto.repo.strongRef'
|
? 'com.atproto.repo.strongRef'
|
||||||
: 'com.atproto.admin.defs#repoRef'
|
: 'com.atproto.admin.defs#repoRef'
|
||||||
await agent
|
if (gate('session_withproxy_fix')) {
|
||||||
.withProxy('atproto_labeler', label.src)
|
await agent.createModerationReport(
|
||||||
.createModerationReport({
|
{
|
||||||
reasonType: ComAtprotoModerationDefs.REASONAPPEAL,
|
reasonType: ComAtprotoModerationDefs.REASONAPPEAL,
|
||||||
subject: {
|
subject: {
|
||||||
$type,
|
$type,
|
||||||
...subject,
|
...subject,
|
||||||
|
},
|
||||||
|
reason: details,
|
||||||
},
|
},
|
||||||
reason: details,
|
{
|
||||||
})
|
encoding: 'application/json',
|
||||||
|
headers: {
|
||||||
|
'atproto-proxy': `${label.src}#atproto_labeler`,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
await agent
|
||||||
|
.withProxy('atproto_labeler', label.src)
|
||||||
|
.createModerationReport({
|
||||||
|
reasonType: ComAtprotoModerationDefs.REASONAPPEAL,
|
||||||
|
subject: {
|
||||||
|
$type,
|
||||||
|
...subject,
|
||||||
|
},
|
||||||
|
reason: details,
|
||||||
|
})
|
||||||
|
}
|
||||||
},
|
},
|
||||||
onError: err => {
|
onError: err => {
|
||||||
logger.error('Failed to submit label appeal', {message: err})
|
logger.error('Failed to submit label appeal', {message: err})
|
||||||
|
|
|
@ -7,6 +7,7 @@ export type Gate =
|
||||||
| 'new_user_progress_guide'
|
| 'new_user_progress_guide'
|
||||||
| 'onboarding_minimum_interests'
|
| 'onboarding_minimum_interests'
|
||||||
| 'request_notifications_permission_after_onboarding_v2'
|
| 'request_notifications_permission_after_onboarding_v2'
|
||||||
|
| 'session_withproxy_fix'
|
||||||
| 'show_avi_follow_button'
|
| 'show_avi_follow_button'
|
||||||
| 'show_follow_back_label_v2'
|
| 'show_follow_back_label_v2'
|
||||||
| 'suggested_feeds_interstitial'
|
| 'suggested_feeds_interstitial'
|
||||||
|
|
|
@ -5,6 +5,7 @@ import throttle from 'lodash.throttle'
|
||||||
|
|
||||||
import {PROD_DEFAULT_FEED} from '#/lib/constants'
|
import {PROD_DEFAULT_FEED} from '#/lib/constants'
|
||||||
import {logEvent} from '#/lib/statsig/statsig'
|
import {logEvent} from '#/lib/statsig/statsig'
|
||||||
|
import {useGate} from '#/lib/statsig/statsig'
|
||||||
import {logger} from '#/logger'
|
import {logger} from '#/logger'
|
||||||
import {FeedDescriptor, FeedPostSliceItem} from '#/state/queries/post-feed'
|
import {FeedDescriptor, FeedPostSliceItem} from '#/state/queries/post-feed'
|
||||||
import {getFeedPostSlice} from '#/view/com/posts/Feed'
|
import {getFeedPostSlice} from '#/view/com/posts/Feed'
|
||||||
|
@ -24,6 +25,7 @@ const stateContext = React.createContext<StateContext>({
|
||||||
|
|
||||||
export function useFeedFeedback(feed: FeedDescriptor, hasSession: boolean) {
|
export function useFeedFeedback(feed: FeedDescriptor, hasSession: boolean) {
|
||||||
const agent = useAgent()
|
const agent = useAgent()
|
||||||
|
const gate = useGate()
|
||||||
const enabled = isDiscoverFeed(feed) && hasSession
|
const enabled = isDiscoverFeed(feed) && hasSession
|
||||||
const queue = React.useRef<Set<string>>(new Set())
|
const queue = React.useRef<Set<string>>(new Set())
|
||||||
const history = React.useRef<
|
const history = React.useRef<
|
||||||
|
@ -43,22 +45,38 @@ export function useFeedFeedback(feed: FeedDescriptor, hasSession: boolean) {
|
||||||
)
|
)
|
||||||
|
|
||||||
const sendToFeedNoDelay = React.useCallback(() => {
|
const sendToFeedNoDelay = React.useCallback(() => {
|
||||||
const proxyAgent = agent.withProxy(
|
|
||||||
// @ts-ignore TODO need to update withProxy() to support this key -prf
|
|
||||||
'bsky_fg',
|
|
||||||
// TODO when we start sending to other feeds, we need to grab their DID -prf
|
|
||||||
'did:web:discover.bsky.app',
|
|
||||||
) as BskyAgent
|
|
||||||
|
|
||||||
const interactions = Array.from(queue.current).map(toInteraction)
|
const interactions = Array.from(queue.current).map(toInteraction)
|
||||||
queue.current.clear()
|
queue.current.clear()
|
||||||
|
|
||||||
// Send to the feed
|
// Send to the feed
|
||||||
proxyAgent.app.bsky.feed
|
if (gate('session_withproxy_fix')) {
|
||||||
.sendInteractions({interactions})
|
agent.app.bsky.feed
|
||||||
.catch((e: any) => {
|
.sendInteractions(
|
||||||
logger.warn('Failed to send feed interactions', {error: e})
|
{interactions},
|
||||||
})
|
{
|
||||||
|
encoding: 'application/json',
|
||||||
|
headers: {
|
||||||
|
// TODO when we start sending to other feeds, we need to grab their DID -prf
|
||||||
|
'atproto-proxy': 'did:web:discover.bsky.app#bsky_fg',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
)
|
||||||
|
.catch((e: any) => {
|
||||||
|
logger.warn('Failed to send feed interactions', {error: e})
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
const proxyAgent = agent.withProxy(
|
||||||
|
// @ts-ignore TODO need to update withProxy() to support this key -prf
|
||||||
|
'bsky_fg',
|
||||||
|
// TODO when we start sending to other feeds, we need to grab their DID -prf
|
||||||
|
'did:web:discover.bsky.app',
|
||||||
|
) as BskyAgent
|
||||||
|
proxyAgent.app.bsky.feed
|
||||||
|
.sendInteractions({interactions})
|
||||||
|
.catch((e: any) => {
|
||||||
|
logger.warn('Failed to send feed interactions', {error: e})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
// Send to Statsig
|
// Send to Statsig
|
||||||
if (aggregatedStats.current === null) {
|
if (aggregatedStats.current === null) {
|
||||||
|
@ -66,7 +84,7 @@ export function useFeedFeedback(feed: FeedDescriptor, hasSession: boolean) {
|
||||||
}
|
}
|
||||||
sendOrAggregateInteractionsForStats(aggregatedStats.current, interactions)
|
sendOrAggregateInteractionsForStats(aggregatedStats.current, interactions)
|
||||||
throttledFlushAggregatedStats()
|
throttledFlushAggregatedStats()
|
||||||
}, [agent, throttledFlushAggregatedStats])
|
}, [agent, gate, throttledFlushAggregatedStats])
|
||||||
|
|
||||||
const sendToFeed = React.useMemo(
|
const sendToFeed = React.useMemo(
|
||||||
() =>
|
() =>
|
||||||
|
|
Loading…
Reference in New Issue