From a4f173d008697ec54c9f84b1e271e83840a79daf Mon Sep 17 00:00:00 2001 From: Samuel Newman Date: Sun, 18 Jan 2026 20:03:45 +0200 Subject: [PATCH 01/14] Bump version to 1.115.0 (#9726) Co-authored-by: Claude --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 36ba36ebe..b89ec45d6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "bsky.app", - "version": "1.114.0", + "version": "1.115.0", "private": true, "engines": { "node": ">=20" -- 2.51.2 From 5989bf7fad989a6fd8ac0958b7db917b7b204db0 Mon Sep 17 00:00:00 2001 From: Eric Bailey Date: Mon, 19 Jan 2026 10:48:13 -0600 Subject: [PATCH 02/14] Remove some unused things (#9719) --- src/lib/assets.native.ts | 4 ---- src/lib/assets.ts | 6 ------ src/lib/build-flags.ts | 2 -- src/lib/canvas.ts | 15 --------------- .../shell/createNativeStackNavigatorWithAuth.tsx | 3 +-- 5 files changed, 1 insertion(+), 29 deletions(-) delete mode 100644 src/lib/assets.native.ts delete mode 100644 src/lib/assets.ts delete mode 100644 src/lib/build-flags.ts delete mode 100644 src/lib/canvas.ts diff --git a/src/lib/assets.native.ts b/src/lib/assets.native.ts deleted file mode 100644 index e679d6256..000000000 --- a/src/lib/assets.native.ts +++ /dev/null @@ -1,4 +0,0 @@ -import {type ImageRequireSource} from 'react-native' - -export const DEF_AVATAR: ImageRequireSource = require('../../assets/default-avatar.png') -export const CLOUD_SPLASH: ImageRequireSource = require('../../assets/splash.png') diff --git a/src/lib/assets.ts b/src/lib/assets.ts deleted file mode 100644 index c5e0f8493..000000000 --- a/src/lib/assets.ts +++ /dev/null @@ -1,6 +0,0 @@ -import {type ImageRequireSource} from 'react-native' - -// @ts-ignore we need to pretend -prf -export const DEF_AVATAR: ImageRequireSource = {uri: '/img/default-avatar.png'} -// @ts-ignore we need to pretend -prf -export const CLOUD_SPLASH: ImageRequireSource = {uri: '/img/splash.png'} diff --git a/src/lib/build-flags.ts b/src/lib/build-flags.ts deleted file mode 100644 index cf05114e0..000000000 --- a/src/lib/build-flags.ts +++ /dev/null @@ -1,2 +0,0 @@ -export const LOGIN_INCLUDE_DEV_SERVERS = true -export const PWI_ENABLED = true diff --git a/src/lib/canvas.ts b/src/lib/canvas.ts deleted file mode 100644 index 760c0e67f..000000000 --- a/src/lib/canvas.ts +++ /dev/null @@ -1,15 +0,0 @@ -export const getCanvas = (base64: string): Promise => { - return new Promise(resolve => { - const image = new Image() - image.onload = () => { - const canvas = document.createElement('canvas') - canvas.width = image.width - canvas.height = image.height - - const ctx = canvas.getContext('2d') - ctx?.drawImage(image, 0, 0) - resolve(canvas) - } - image.src = base64 - }) -} diff --git a/src/view/shell/createNativeStackNavigatorWithAuth.tsx b/src/view/shell/createNativeStackNavigatorWithAuth.tsx index e2a2caae4..76f4f19ac 100644 --- a/src/view/shell/createNativeStackNavigatorWithAuth.tsx +++ b/src/view/shell/createNativeStackNavigatorWithAuth.tsx @@ -25,7 +25,6 @@ import { type NativeStackNavigatorProps, } from '@react-navigation/native-stack' -import {PWI_ENABLED} from '#/lib/build-flags' import {useWebMediaQueries} from '#/lib/hooks/useWebMediaQueries' import {useSession} from '#/state/session' import {useOnboardingState} from '#/state/shell' @@ -115,7 +114,7 @@ function NativeStackNavigator({ const {setShowLoggedOut} = useLoggedOutViewControls() const {isMobile} = useWebMediaQueries() const {leftNavMinimal} = useLayoutBreakpoints() - if (!hasSession && (!PWI_ENABLED || activeRouteRequiresAuth || IS_NATIVE)) { + if (!hasSession && (activeRouteRequiresAuth || IS_NATIVE)) { return } if (hasSession && currentAccount?.signupQueued) { -- 2.51.2 From bd9e8244f1b312aeadde485497f0d175e3dda2ef Mon Sep 17 00:00:00 2001 From: Eric Bailey Date: Mon, 19 Jan 2026 15:32:02 -0600 Subject: [PATCH 03/14] [APP-1783] Clean up some feature gates and logging (#9729) * Remove gates we don't need * Clean up some logging * Keep disable gates around for now * Add missing gate * Revert file * Revert package changes --- eslint.config.mjs | 1 + jest/jestSetup.js | 1 - src/App.native.tsx | 7 +- src/components/FeedInterstitials.tsx | 8 +- .../PostControls/ShareMenu/index.tsx | 9 +- .../contacts/FindContactsBannerNUX.tsx | 5 +- .../dialogs/nuxs/LiveNowBetaDialog.tsx | 3 +- src/lib/statsig/gates.ts | 16 +-- src/logger/bitdrift/lib/index.ts | 1 - src/logger/bitdrift/lib/index.web.ts | 4 - src/logger/bitdrift/setup/index.ts | 27 ----- src/logger/bitdrift/setup/index.web.ts | 0 src/logger/index.ts | 6 +- src/logger/transports/bitdrift.ts | 24 ----- src/screens/Onboarding/StepFinished/index.tsx | 16 +-- src/screens/Onboarding/index.tsx | 10 +- .../Settings/AppIconSettings/index.tsx | 7 +- src/screens/Settings/Settings.tsx | 6 +- src/state/session/logging.ts | 98 ++----------------- src/view/com/posts/PostFeed.tsx | 9 +- src/view/com/posts/PostFeedItem.tsx | 37 +++---- .../com/util/load-latest/LoadLatestBtn.tsx | 6 -- src/view/shell/bottom-bar/BottomBar.tsx | 11 +-- src/view/shell/bottom-bar/BottomBarWeb.tsx | 15 +-- src/view/shell/desktop/LeftNav.tsx | 11 +-- 25 files changed, 60 insertions(+), 278 deletions(-) delete mode 100644 src/logger/bitdrift/lib/index.ts delete mode 100644 src/logger/bitdrift/lib/index.web.ts delete mode 100644 src/logger/bitdrift/setup/index.ts delete mode 100644 src/logger/bitdrift/setup/index.web.ts delete mode 100644 src/logger/transports/bitdrift.ts diff --git a/eslint.config.mjs b/eslint.config.mjs index a864bea05..c3c36b4c4 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -72,6 +72,7 @@ export default defineConfig( sourceType: 'module', globals: { ...globals.browser, + ...globals.node, }, parserOptions: { parser: tsParser, diff --git a/jest/jestSetup.js b/jest/jestSetup.js index 8def1158c..ec5d4a936 100644 --- a/jest/jestSetup.js +++ b/jest/jestSetup.js @@ -114,5 +114,4 @@ jest.mock('statsig-react-native-expo', () => ({ }, })) -jest.mock('../src/logger/bitdrift/lib', () => ({})) jest.mock('../src/lib/statsig/statsig', () => ({})) diff --git a/src/App.native.tsx b/src/App.native.tsx index 8f0768815..7f49c0a14 100644 --- a/src/App.native.tsx +++ b/src/App.native.tsx @@ -1,5 +1,4 @@ import '#/logger/sentry/setup' -import '#/logger/bitdrift/setup' import '#/view/icons' import React, {useEffect, useState} from 'react' @@ -66,8 +65,10 @@ import {Provider as PolicyUpdateOverlayProvider} from '#/components/PolicyUpdate import {Provider as PortalProvider} from '#/components/Portal' import {Provider as VideoVolumeProvider} from '#/components/Post/Embed/VideoEmbed/VideoVolumeContext' import {ToastOutlet} from '#/components/Toast' -import {Provider as AgeAssuranceV2Provider} from '#/ageAssurance' -import {prefetchAgeAssuranceConfig} from '#/ageAssurance' +import { + prefetchAgeAssuranceConfig, + Provider as AgeAssuranceV2Provider, +} from '#/ageAssurance' import {IS_ANDROID, IS_IOS} from '#/env' import { prefetchLiveEvents, diff --git a/src/components/FeedInterstitials.tsx b/src/components/FeedInterstitials.tsx index 0034e120b..14887adb7 100644 --- a/src/components/FeedInterstitials.tsx +++ b/src/components/FeedInterstitials.tsx @@ -7,7 +7,7 @@ import {useLingui} from '@lingui/react' import {useNavigation} from '@react-navigation/native' import {type NavigationProp} from '#/lib/routes/types' -import {logEvent, useGate} from '#/lib/statsig/statsig' +import {logEvent} from '#/lib/statsig/statsig' import {logger} from '#/logger' import {type MetricEvents} from '#/logger/metrics' import {useModerationOpts} from '#/state/preferences/moderation-opts' @@ -435,7 +435,6 @@ export function ProfileGrid({ }) { const t = useTheme() const {_} = useLingui() - const gate = useGate() const moderationOpts = useModerationOpts() const {gtMobile} = useBreakpoints() const followDialogControl = useDialogControl() @@ -443,7 +442,6 @@ export function ProfileGrid({ const isLoading = isSuggestionsLoading || !moderationOpts const isProfileHeaderContext = viewContext === 'profileHeader' const isFeedContext = viewContext === 'feed' - const showDismissButton = onDismiss && gate('suggested_users_dismiss') const maxLength = gtMobile ? 3 : isProfileHeaderContext ? 12 : 6 const minLength = gtMobile ? 3 : 4 @@ -584,12 +582,12 @@ export function ProfileGrid({ (hovered || pressed) && t.atoms.border_contrast_high, ]}> - {showDismissButton && ( + {onDismiss && ( - - ) } diff --git a/src/features/liveEvents/components/LiveEventFeedCardCompact.tsx b/src/features/liveEvents/components/LiveEventFeedCardCompact.tsx index 562b4eb20..a4090b857 100644 --- a/src/features/liveEvents/components/LiveEventFeedCardCompact.tsx +++ b/src/features/liveEvents/components/LiveEventFeedCardCompact.tsx @@ -1,10 +1,11 @@ -import {useEffect, useMemo} from 'react' +import {useMemo} from 'react' import {View} from 'react-native' import {Image} from 'expo-image' import {LinearGradient} from 'expo-linear-gradient' import {msg} from '@lingui/macro' import {useLingui} from '@lingui/react' +import {useCallOnce} from '#/lib/once' import {isBskyCustomFeedUrl} from '#/lib/strings/url-helpers' import {atoms as a, utils} from '#/alf' import {Live_Stroke2_Corner0_Rounded as LiveIcon} from '#/components/icons/Live' @@ -39,13 +40,12 @@ export function LiveEventFeedCardCompact({ return '/' }, [feed.url]) - useEffect(() => { + useCallOnce(() => { ax.metric('liveEvents:feedBanner:seen', { feed: feed.url, context: metricContext, }) - // eslint-disable-next-line react-hooks/exhaustive-deps - }, []) + })() return ( ax.features.enabled(ax.features.IsBskyTeam), [ax]) + return useMemo( + () => ax.features.enabled(ax.features.IsBskyTeam), + [ax.features], + ) } diff --git a/src/screens/Settings/ContentAndMediaSettings.tsx b/src/screens/Settings/ContentAndMediaSettings.tsx index ac7c1db48..ba1e3b450 100644 --- a/src/screens/Settings/ContentAndMediaSettings.tsx +++ b/src/screens/Settings/ContentAndMediaSettings.tsx @@ -26,7 +26,6 @@ import {Window_Stroke2_Corner2_Rounded as WindowIcon} from '#/components/icons/W import * as Layout from '#/components/Layout' import {useAnalytics} from '#/analytics' import {IS_NATIVE} from '#/env' -import {LiveEventFeedsSettingsToggle} from '#/features/liveEvents/components/LiveEventFeedsSettingsToggle' type Props = NativeStackScreenProps< CommonNavigatorParams, @@ -150,7 +149,6 @@ export function ContentAndMediaSettingsScreen({}: Props) { - - ) : ( - <> - - - - )} + ) : null} -- 2.51.2 From 49e7a96cd97044f77d790bf8f315b0dff0631f3c Mon Sep 17 00:00:00 2001 From: pfrazee <1270099+pfrazee@users.noreply.github.com> Date: Sat, 24 Jan 2026 02:45:32 +0000 Subject: [PATCH 14/14] Nightly source-language update --- src/locale/locales/en/messages.po | 53 +++++++++++++++++++------------ 1 file changed, 33 insertions(+), 20 deletions(-) diff --git a/src/locale/locales/en/messages.po b/src/locale/locales/en/messages.po index fe08d56ab..2cd2be02e 100644 --- a/src/locale/locales/en/messages.po +++ b/src/locale/locales/en/messages.po @@ -1377,8 +1377,8 @@ msgctxt "Name of app icon variant" msgid "Aurora" msgstr "" -#: src/screens/Settings/ContentAndMediaSettings.tsx:118 -#: src/screens/Settings/ContentAndMediaSettings.tsx:124 +#: src/screens/Settings/ContentAndMediaSettings.tsx:117 +#: src/screens/Settings/ContentAndMediaSettings.tsx:123 msgid "Autoplay videos and GIFs" msgstr "" @@ -2258,7 +2258,6 @@ msgstr "" msgid "Configure content filtering setting for category: {name}" msgstr "" -#: src/features/liveEvents/components/DiscoverFeedLiveEventFeedsAndTrendingBanner.tsx:51 #: src/features/liveEvents/components/LiveEventFeedOptionsMenu.tsx:36 msgid "Configure live event banner" msgstr "" @@ -2338,7 +2337,7 @@ msgstr "" msgid "Contacts removed" msgstr "" -#: src/screens/Settings/ContentAndMediaSettings.tsx:53 +#: src/screens/Settings/ContentAndMediaSettings.tsx:52 msgid "Content & Media" msgstr "" @@ -3044,6 +3043,10 @@ msgstr "" msgid "Dismiss interests" msgstr "" +#: src/features/liveEvents/components/DiscoverFeedLiveEventFeedsAndTrendingBanner.tsx:81 +msgid "Dismiss live event banner" +msgstr "" + #: src/components/interstitials/TrendingVideos.tsx:89 msgid "Dismiss this section" msgstr "" @@ -3416,13 +3419,13 @@ msgstr "" msgid "Enable this source only" msgstr "" -#: src/screens/Settings/ContentAndMediaSettings.tsx:134 -#: src/screens/Settings/ContentAndMediaSettings.tsx:148 +#: src/screens/Settings/ContentAndMediaSettings.tsx:133 +#: src/screens/Settings/ContentAndMediaSettings.tsx:147 msgid "Enable trending topics" msgstr "" -#: src/screens/Settings/ContentAndMediaSettings.tsx:156 -#: src/screens/Settings/ContentAndMediaSettings.tsx:170 +#: src/screens/Settings/ContentAndMediaSettings.tsx:154 +#: src/screens/Settings/ContentAndMediaSettings.tsx:168 msgid "Enable trending videos in your Discover feed" msgstr "" @@ -3652,8 +3655,8 @@ msgstr "" msgid "Export My Data" msgstr "" -#: src/screens/Settings/ContentAndMediaSettings.tsx:86 -#: src/screens/Settings/ContentAndMediaSettings.tsx:89 +#: src/screens/Settings/ContentAndMediaSettings.tsx:85 +#: src/screens/Settings/ContentAndMediaSettings.tsx:88 msgid "External media" msgstr "" @@ -4213,8 +4216,8 @@ msgstr "" msgid "Following {handle}" msgstr "" -#: src/screens/Settings/ContentAndMediaSettings.tsx:78 -#: src/screens/Settings/ContentAndMediaSettings.tsx:81 +#: src/screens/Settings/ContentAndMediaSettings.tsx:77 +#: src/screens/Settings/ContentAndMediaSettings.tsx:80 msgid "Following feed preferences" msgstr "" @@ -5491,10 +5494,18 @@ msgstr "" msgid "Live event happening now: {0}" msgstr "" +#: src/features/liveEvents/components/DiscoverFeedLiveEventFeedsAndTrendingBanner.tsx:50 +msgid "Live event hidden" +msgstr "" + #: src/features/liveEvents/components/LiveEventFeedOptionsMenu.tsx:105 msgid "Live event options" msgstr "" +#: src/features/liveEvents/components/DiscoverFeedLiveEventFeedsAndTrendingBanner.tsx:52 +msgid "Live event unhidden" +msgstr "" + #: src/features/liveEvents/components/LiveEventFeedOptionsMenu.tsx:109 msgid "Live events appear occasionally when something exciting is happening. If you'd like, you can hide this particular event, or all events for this placement in your app interface." msgstr "" @@ -5595,8 +5606,8 @@ msgstr "" msgid "Make sure this is where you intend to go!" msgstr "" -#: src/screens/Settings/ContentAndMediaSettings.tsx:62 -#: src/screens/Settings/ContentAndMediaSettings.tsx:65 +#: src/screens/Settings/ContentAndMediaSettings.tsx:61 +#: src/screens/Settings/ContentAndMediaSettings.tsx:64 msgid "Manage saved feeds" msgstr "" @@ -9895,8 +9906,8 @@ msgstr "" msgid "Thread options" msgstr "" -#: src/screens/Settings/ContentAndMediaSettings.tsx:70 -#: src/screens/Settings/ContentAndMediaSettings.tsx:73 +#: src/screens/Settings/ContentAndMediaSettings.tsx:69 +#: src/screens/Settings/ContentAndMediaSettings.tsx:72 msgid "Thread preferences" msgstr "" @@ -10122,6 +10133,8 @@ msgctxt "Button label to undo saving/removing a post from saved posts." msgid "Undo" msgstr "" +#: src/features/liveEvents/components/DiscoverFeedLiveEventFeedsAndTrendingBanner.tsx:57 +#: src/features/liveEvents/components/DiscoverFeedLiveEventFeedsAndTrendingBanner.tsx:63 #: src/features/liveEvents/components/LiveEventFeedOptionsMenu.tsx:72 #: src/features/liveEvents/components/LiveEventFeedOptionsMenu.tsx:78 msgid "Undo" @@ -10384,8 +10397,8 @@ msgstr "" msgid "Use in-app browser" msgstr "" -#: src/screens/Settings/ContentAndMediaSettings.tsx:104 -#: src/screens/Settings/ContentAndMediaSettings.tsx:110 +#: src/screens/Settings/ContentAndMediaSettings.tsx:103 +#: src/screens/Settings/ContentAndMediaSettings.tsx:109 msgid "Use in-app browser to open links" msgstr "" @@ -11687,8 +11700,8 @@ msgstr "" #: src/Navigation.tsx:527 #: src/screens/Search/modules/ExploreInterestsCard.tsx:67 -#: src/screens/Settings/ContentAndMediaSettings.tsx:94 -#: src/screens/Settings/ContentAndMediaSettings.tsx:97 +#: src/screens/Settings/ContentAndMediaSettings.tsx:93 +#: src/screens/Settings/ContentAndMediaSettings.tsx:96 #: src/screens/Settings/InterestsSettings.tsx:46 msgid "Your interests" msgstr "" -- 2.51.2