···1212import {RootStoreModel} from './root-store'
1313import {IS_PROD} from 'lib/constants'
1414import {track} from 'lib/analytics/analytics'
1515+import {logger} from '#/logger'
15161617export type ServiceDescription = DescribeServer.OutputSchema
1718···5657 ),
5758 isResumingSession: this.isResumingSession,
5859 }
5959- this.rootStore.log.debug(message, details)
6060+ logger.debug(message, details, logger.DebugContext.session)
6061 }
61626263 /**
+3-2
src/state/models/ui/create-account.ts
···88import {cleanError} from 'lib/strings/errors'
99import {getAge} from 'lib/strings/time'
1010import {track} from 'lib/analytics/analytics'
1111+import {logger} from '#/logger'
11121213const DEFAULT_DATE = new Date(Date.now() - 60e3 * 60 * 24 * 365 * 20) // default to 20 years ago
1314···7677 this.setServiceDescription(desc)
7778 this.setUserDomain(desc.availableUserDomains[0])
7879 } catch (err: any) {
7979- this.rootStore.log.warn(
8080+ logger.warn(
8081 `Failed to fetch service description for ${this.serviceUrl}`,
8182 {error: err},
8283 )
···127128 errMsg =
128129 'Invite code not accepted. Check that you input it correctly and try again.'
129130 }
130130- this.rootStore.log.error('Failed to create account', {error: e})
131131+ logger.error('Failed to create account', {error: e})
131132 this.setIsProcessing(false)
132133 this.setError(cleanError(errMsg))
133134 throw e
+2-1
src/state/models/ui/preferences.ts
···1414import {getAge} from 'lib/strings/time'
1515import {FeedTuner} from 'lib/api/feed-manip'
1616import {LANGUAGES} from '../../../locale/languages'
1717+import {logger} from '#/logger'
17181819// TEMP we need to permanently convert 'show' to 'ignore', for now we manually convert -prf
1920export type LabelPreference = APILabelPreference | 'show'
···246247 })
247248 await this.rootStore.agent.setSavedFeeds(saved, pinned)
248249 } catch (error) {
249249- this.rootStore.log.error('Failed to set default feeds', {error})
250250+ logger.error('Failed to set default feeds', {error})
250251 }
251252 }
252253 } finally {
···44import {cleanError} from 'lib/strings/errors'
55import {FeedSourceModel} from '../content/feed-source'
66import {track} from 'lib/analytics/analytics'
77+import {logger} from '#/logger'
7889export class SavedFeedsModel {
910 // state
···126127 this.hasLoaded = true
127128 this.error = cleanError(err)
128129 if (err) {
129129- this.rootStore.log.error('Failed to fetch user feeds', {err})
130130+ logger.error('Failed to fetch user feeds', {err})
130131 }
131132 }
132133
+8-9
src/view/com/auth/login/Login.tsx
···3030import {useTheme} from 'lib/ThemeContext'
3131import {cleanError} from 'lib/strings/errors'
3232import {isWeb} from 'platform/detection'
3333+import {logger} from '#/logger'
33343435enum Forms {
3536 Login,
···8182 if (aborted) {
8283 return
8384 }
8484- store.log.warn(
8585- `Failed to fetch service description for ${serviceUrl}`,
8686- {error: err},
8787- )
8585+ logger.warn(`Failed to fetch service description for ${serviceUrl}`, {
8686+ error: err,
8787+ })
8888 setError(
8989 'Unable to contact your service. Please check your Internet connection.',
9090 )
···9393 return () => {
9494 aborted = true
9595 }
9696- }, [store.session, store.log, serviceUrl, retryDescribeTrigger])
9696+ }, [store.session, serviceUrl, retryDescribeTrigger])
97979898 const onPressRetryConnect = () => setRetryDescribeTrigger({})
9999 const onPressForgotPassword = () => {
···349349 })
350350 } catch (e: any) {
351351 const errMsg = e.toString()
352352- store.log.warn('Failed to login', {error: e})
352352+ logger.warn('Failed to login', {error: e})
353353 setIsProcessing(false)
354354 if (errMsg.includes('Authentication Required')) {
355355 setError('Invalid username or password')
···578578 onEmailSent()
579579 } catch (e: any) {
580580 const errMsg = e.toString()
581581- store.log.warn('Failed to request password reset', {error: e})
581581+ logger.warn('Failed to request password reset', {error: e})
582582 setIsProcessing(false)
583583 if (isNetworkError(e)) {
584584 setError(
···694694}
695695696696const SetNewPasswordForm = ({
697697- store,
698697 error,
699698 serviceUrl,
700699 setError,
···734733 onPasswordSet()
735734 } catch (e: any) {
736735 const errMsg = e.toString()
737737- store.log.warn('Failed to set new password', {error: e})
736736+ logger.warn('Failed to set new password', {error: e})
738737 setIsProcessing(false)
739738 if (isNetworkError(e)) {
740739 setError(
+2-1
src/view/com/composer/photos/OpenCameraBtn.tsx
···1212import {HITSLOP_10, POST_IMG_MAX} from 'lib/constants'
1313import {GalleryModel} from 'state/models/media/gallery'
1414import {isMobileWeb, isNative} from 'platform/detection'
1515+import {logger} from '#/logger'
15161617type Props = {
1718 gallery: GalleryModel
···3940 gallery.add(img)
4041 } catch (err: any) {
4142 // ignore
4242- store.log.warn('Error using camera', {error: err})
4343+ logger.warn('Error using camera', {error: err})
4344 }
4445 }, [gallery, track, store, requestCameraAccessIfNeeded])
4546
+4-3
src/view/com/composer/useExternalLinkFetch.ts
···1616} from 'lib/strings/url-helpers'
1717import {ComposerOpts} from 'state/models/ui/shell'
1818import {POST_IMG_MAX} from 'lib/constants'
1919+import {logger} from '#/logger'
19202021export function useExternalLinkFetch({
2122 setQuote,
···4647 setExtLink(undefined)
4748 },
4849 err => {
4949- store.log.error('Failed to fetch post for quote embedding', {
5050+ logger.error('Failed to fetch post for quote embedding', {
5051 error: err,
5152 })
5253 setExtLink(undefined)
···6667 })
6768 },
6869 err => {
6969- store.log.error('Failed to fetch feed for embedding', {error: err})
7070+ logger.error('Failed to fetch feed for embedding', {error: err})
7071 setExtLink(undefined)
7172 },
7273 )
···8485 })
8586 },
8687 err => {
8787- store.log.error('Failed to fetch list for embedding', {error: err})
8888+ logger.error('Failed to fetch list for embedding', {error: err})
8889 setExtLink(undefined)
8990 },
9091 )
···1515import {AtUri} from '@atproto/api'
1616import * as Toast from 'view/com/util/Toast'
1717import {sanitizeHandle} from 'lib/strings/handles'
1818+import {logger} from '#/logger'
18191920export const FeedSourceCard = observer(function FeedSourceCardImpl({
2021 item,
···4546 Toast.show('Removed from my feeds')
4647 } catch (e) {
4748 Toast.show('There was an issue contacting your server')
4848- store.log.error('Failed to unsave feed', {error: e})
4949+ logger.error('Failed to unsave feed', {error: e})
4950 }
5051 },
5152 })
···5556 Toast.show('Added to my feeds')
5657 } catch (e) {
5758 Toast.show('There was an issue contacting your server')
5858- store.log.error('Failed to save feed', {error: e})
5959+ logger.error('Failed to save feed', {error: e})
5960 }
6061 }
6162 }, [store, item])
+3-2
src/view/com/lists/ListItems.tsx
···2121import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
2222import {s} from 'lib/styles'
2323import {OnScrollCb} from 'lib/hooks/useOnMainScroll'
2424+import {logger} from '#/logger'
24252526const LOADING_ITEM = {_reactKey: '__loading__'}
2627const EMPTY_ITEM = {_reactKey: '__empty__'}
···9495 try {
9596 await list.refresh()
9697 } catch (err) {
9797- list.rootStore.log.error('Failed to refresh lists', {error: err})
9898+ logger.error('Failed to refresh lists', {error: err})
9899 }
99100 setIsRefreshing(false)
100101 }, [list, track, setIsRefreshing])
···104105 try {
105106 await list.loadMore()
106107 } catch (err) {
107107- list.rootStore.log.error('Failed to load more lists', {error: err})
108108+ logger.error('Failed to load more lists', {error: err})
108109 }
109110 }, [list, track])
110111
+3-2
src/view/com/lists/ListsList.tsx
···1919import {usePalette} from 'lib/hooks/usePalette'
2020import {FlatList} from '../util/Views.web'
2121import {s} from 'lib/styles'
2222+import {logger} from '#/logger'
22232324const LOADING = {_reactKey: '__loading__'}
2425const EMPTY = {_reactKey: '__empty__'}
···7879 try {
7980 await listsList.refresh()
8081 } catch (err) {
8181- listsList.rootStore.log.error('Failed to refresh lists', {error: err})
8282+ logger.error('Failed to refresh lists', {error: err})
8283 }
8384 setIsRefreshing(false)
8485 }, [listsList, track, setIsRefreshing])
···8889 try {
8990 await listsList.loadMore()
9091 } catch (err) {
9191- listsList.rootStore.log.error('Failed to load more lists', {error: err})
9292+ logger.error('Failed to load more lists', {error: err})
9293 }
9394 }, [listsList, track])
9495
+2-1
src/view/com/modals/AddAppPasswords.tsx
···1212} from '@fortawesome/react-native-fontawesome'
1313import Clipboard from '@react-native-clipboard/clipboard'
1414import * as Toast from '../util/Toast'
1515+import {logger} from '#/logger'
15161617export const snapPoints = ['70%']
1718···9596 }
9697 } catch (e) {
9798 Toast.show('Failed to create app password.')
9898- store.log.error('Failed to create app password', {error: e})
9999+ logger.error('Failed to create app password', {error: e})
99100 }
100101 }
101102
···1515import {isIOS} from 'platform/detection'
1616import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
1717import * as Toast from '../util/Toast'
1818+import {logger} from '#/logger'
18191920export const snapPoints = ['90%']
2021···103104 Toast.show(
104105 'There was an issue syncing your preferences with the server',
105106 )
106106- store.log.error('Failed to update preferences with server', {error: e})
107107+ logger.error('Failed to update preferences with server', {error: e})
107108 }
108109 }
109110···168169 Toast.show(
169170 'There was an issue syncing your preferences with the server',
170171 )
171171- store.log.error('Failed to update preferences with server', {error: e})
172172+ logger.error('Failed to update preferences with server', {error: e})
172173 }
173174 },
174175 [store, group],
···1919import {useAnalytics} from 'lib/analytics/analytics'
2020import {usePalette} from 'lib/hooks/usePalette'
2121import {useTheme} from 'lib/ThemeContext'
2222+import {logger} from '#/logger'
22232324const LOADING_ITEM = {_reactKey: '__loading__'}
2425const EMPTY_FEED_ITEM = {_reactKey: '__empty__'}
···9293 try {
9394 await feed.refresh()
9495 } catch (err) {
9595- feed.rootStore.log.error('Failed to refresh posts feed', {error: err})
9696+ logger.error('Failed to refresh posts feed', {error: err})
9697 }
9798 setIsRefreshing(false)
9899 }, [feed, track, setIsRefreshing])
···104105 try {
105106 await feed.loadMore()
106107 } catch (err) {
107107- feed.rootStore.log.error('Failed to load more posts', {error: err})
108108+ logger.error('Failed to load more posts', {error: err})
108109 }
109110 }, [feed, track])
110111
+2-1
src/view/com/posts/FeedErrorMessage.tsx
···1010import {useNavigation} from '@react-navigation/native'
1111import {NavigationProp} from 'lib/routes/types'
1212import {useStores} from 'state/index'
1313+import {logger} from '#/logger'
13141415const MESSAGES = {
1516 [KnownError.Unknown]: '',
···7374 Toast.show(
7475 'There was an an issue removing this feed. Please check your internet connection and try again.',
7576 )
7676- store.log.error('Failed to remove feed', {error: err})
7777+ logger.error('Failed to remove feed', {error: err})
7778 }
7879 },
7980 onPressCancel() {
···1414import {useSafeAreaInsets} from 'react-native-safe-area-context'
1515import {clamp} from 'lodash'
1616import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
1717+import {logger} from '#/logger'
17181819const SHELL_FOOTER_HEIGHT = 44
1920···3839 InteractionManager.runAfterInteractions(() => {
3940 if (!view.hasLoaded && !view.isLoading) {
4041 view.setup().catch(err => {
4141- store.log.error('Failed to fetch thread', {error: err})
4242+ logger.error('Failed to fetch thread', {error: err})
4243 })
4344 }
4445 })
+5-4
src/view/screens/Profile.tsx
···2929import {FeedSourceModel} from 'state/models/content/feed-source'
3030import {useSetTitle} from 'lib/hooks/useSetTitle'
3131import {combinedDisplayName} from 'lib/strings/display-names'
3232+import {logger} from '#/logger'
32333334type Props = NativeStackScreenProps<CommonNavigatorParams, 'Profile'>
3435export const ProfileScreen = withAuthRequired(
···108109 uiState
109110 .refresh()
110111 .catch((err: any) =>
111111- store.log.error('Failed to refresh user profile', {error: err}),
112112+ logger.error('Failed to refresh user profile', {error: err}),
112113 )
113113- }, [uiState, store])
114114+ }, [uiState])
114115 const onEndReached = React.useCallback(() => {
115116 uiState.loadMore().catch((err: any) =>
116116- store.log.error('Failed to load more entries in user profile', {
117117+ logger.error('Failed to load more entries in user profile', {
117118 error: err,
118119 }),
119120 )
120120- }, [uiState, store])
121121+ }, [uiState])
121122 const onPressTryAgain = React.useCallback(() => {
122123 uiState.setup()
123124 }, [uiState])
+7-6
src/view/screens/ProfileFeed.tsx
···4040import {sanitizeHandle} from 'lib/strings/handles'
4141import {makeProfileLink} from 'lib/routes/links'
4242import {ComposeIcon2} from 'lib/icons'
4343+import {logger} from '#/logger'
43444445const SECTION_TITLES = ['Posts', 'About']
4546···165166 Toast.show(
166167 'There was an an issue updating your feeds, please check your internet connection and try again.',
167168 )
168168- store.log.error('Failed up update feeds', {error: err})
169169+ logger.error('Failed up update feeds', {error: err})
169170 }
170170- }, [store, feedInfo])
171171+ }, [feedInfo])
171172172173 const onToggleLiked = React.useCallback(async () => {
173174 Haptics.default()
···181182 Toast.show(
182183 'There was an an issue contacting the server, please check your internet connection and try again.',
183184 )
184184- store.log.error('Failed up toggle like', {error: err})
185185+ logger.error('Failed up toggle like', {error: err})
185186 }
186186- }, [store, feedInfo])
187187+ }, [feedInfo])
187188188189 const onTogglePinned = React.useCallback(async () => {
189190 Haptics.default()
190191 if (feedInfo) {
191192 feedInfo.togglePin().catch(e => {
192193 Toast.show('There was an issue contacting the server')
193193- store.log.error('Failed to toggle pinned feed', {error: e})
194194+ logger.error('Failed to toggle pinned feed', {error: e})
194195 })
195196 }
196196- }, [store, feedInfo])
197197+ }, [feedInfo])
197198198199 const onPressShare = React.useCallback(() => {
199200 const url = toShareUrl(`/profile/${handleOrDid}/feed/${rkey}`)
+3-2
src/view/screens/ProfileList.tsx
···4343import {makeProfileLink, makeListLink} from 'lib/routes/links'
4444import {ComposeIcon2} from 'lib/icons'
4545import {ListItems} from 'view/com/lists/ListItems'
4646+import {logger} from '#/logger'
46474748const SECTION_TITLES_CURATE = ['Posts', 'About']
4849const SECTION_TITLES_MOD = ['About']
···272273 Haptics.default()
273274 list.togglePin().catch(e => {
274275 Toast.show('There was an issue contacting the server')
275275- store.log.error('Failed to toggle pinned list', {error: e})
276276+ logger.error('Failed to toggle pinned list', {error: e})
276277 })
277277- }, [store, list])
278278+ }, [list])
278279279280 const onSubscribeMute = useCallback(() => {
280281 store.shell.openModal({
+7-7
src/view/screens/SavedFeeds.tsx
···2626import * as Toast from 'view/com/util/Toast'
2727import {Haptics} from 'lib/haptics'
2828import {TextLink} from 'view/com/util/Link'
2929+import {logger} from '#/logger'
29303031const HITSLOP_TOP = {
3132 top: 20,
···159160 item: FeedSourceModel
160161}) {
161162 const pal = usePalette('default')
162162- const store = useStores()
163163 const isPinned = item.isPinned
164164165165 const onTogglePinned = useCallback(() => {
166166 Haptics.default()
167167 item.togglePin().catch(e => {
168168 Toast.show('There was an issue contacting the server')
169169- store.log.error('Failed to toggle pinned feed', {error: e})
169169+ logger.error('Failed to toggle pinned feed', {error: e})
170170 })
171171- }, [item, store])
171171+ }, [item])
172172 const onPressUp = useCallback(
173173 () =>
174174 savedFeeds.movePinnedFeed(item, 'up').catch(e => {
175175 Toast.show('There was an issue contacting the server')
176176- store.log.error('Failed to set pinned feed order', {error: e})
176176+ logger.error('Failed to set pinned feed order', {error: e})
177177 }),
178178- [store, savedFeeds, item],
178178+ [savedFeeds, item],
179179 )
180180 const onPressDown = useCallback(
181181 () =>
182182 savedFeeds.movePinnedFeed(item, 'down').catch(e => {
183183 Toast.show('There was an issue contacting the server')
184184- store.log.error('Failed to set pinned feed order', {error: e})
184184+ logger.error('Failed to set pinned feed order', {error: e})
185185 }),
186186- [store, savedFeeds, item],
186186+ [savedFeeds, item],
187187 )
188188189189 return (
+4-4
src/view/screens/Settings.tsx
···4545import Clipboard from '@react-native-clipboard/clipboard'
4646import {makeProfileLink} from 'lib/routes/links'
4747import {AccountDropdownBtn} from 'view/com/util/AccountDropdownBtn'
4848+import {logger} from '#/logger'
48494950// TEMPORARY (APP-700)
5051// remove after backend testing finishes
···110111 Toast.show('Your handle has been updated')
111112 },
112113 err => {
113113- store.log.error(
114114- 'Failed to reload from server after handle update',
115115- {error: err},
116116- )
114114+ logger.error('Failed to reload from server after handle update', {
115115+ error: err,
116116+ })
117117 setIsSwitching(false)
118118 },
119119 )