Bluesky app fork with some witchin' additions 💫

Do not nuke session on unknown backend errors (#2399)

* Do not nuke session on unknown backend errors

* Restore existing functionality

* Use new event

* Kick user out to sign in

* Remove unstable

authored by

Eric Bailey and committed by
GitHub
0ee0554b c1e8abfb

+48 -28
+1 -1
package.json
··· 39 39 "nuke": "rm -rf ./node_modules && rm -rf ./ios && rm -rf ./android" 40 40 }, 41 41 "dependencies": { 42 - "@atproto/api": "^0.7.4", 42 + "@atproto/api": "^0.8.0", 43 43 "@bam.tech/react-native-image-resizer": "^3.0.4", 44 44 "@braintree/sanitize-url": "^6.0.2", 45 45 "@emoji-mart/react": "^1.1.1",
+43 -23
src/state/session/index.tsx
··· 102 102 expired: boolean 103 103 refreshedAccount: SessionAccount 104 104 }) => void, 105 + { 106 + networkErrorCallback, 107 + }: { 108 + networkErrorCallback?: () => void 109 + } = {}, 105 110 ): AtpPersistSessionHandler { 106 111 return function persistSession(event, session) { 107 112 const expired = event === 'expired' || event === 'create-failed' 113 + 114 + if (event === 'network-error') { 115 + logger.warn(`session: persistSessionHandler received network-error event`) 116 + networkErrorCallback?.() 117 + return 118 + } 108 119 109 120 const refreshedAccount: SessionAccount = { 110 121 service: account.service, ··· 179 190 [setStateAndPersist], 180 191 ) 181 192 193 + const clearCurrentAccount = React.useCallback(() => { 194 + logger.debug( 195 + `session: clear current account`, 196 + {}, 197 + logger.DebugContext.session, 198 + ) 199 + __globalAgent = PUBLIC_BSKY_AGENT 200 + queryClient.clear() 201 + setStateAndPersist(s => ({ 202 + ...s, 203 + currentAccount: undefined, 204 + })) 205 + }, [setStateAndPersist, queryClient]) 206 + 182 207 const createAccount = React.useCallback<ApiContext['createAccount']>( 183 208 async ({service, email, password, handle, inviteCode}: any) => { 184 209 logger.info(`session: creating account`, { ··· 211 236 } 212 237 213 238 agent.setPersistSessionHandler( 214 - createPersistSessionHandler(account, ({expired, refreshedAccount}) => { 215 - upsertAccount(refreshedAccount, expired) 216 - }), 239 + createPersistSessionHandler( 240 + account, 241 + ({expired, refreshedAccount}) => { 242 + upsertAccount(refreshedAccount, expired) 243 + }, 244 + {networkErrorCallback: clearCurrentAccount}, 245 + ), 217 246 ) 218 247 219 248 __globalAgent = agent ··· 230 259 ) 231 260 track('Create Account') 232 261 }, 233 - [upsertAccount, queryClient], 262 + [upsertAccount, queryClient, clearCurrentAccount], 234 263 ) 235 264 236 265 const login = React.useCallback<ApiContext['login']>( ··· 263 292 } 264 293 265 294 agent.setPersistSessionHandler( 266 - createPersistSessionHandler(account, ({expired, refreshedAccount}) => { 267 - upsertAccount(refreshedAccount, expired) 268 - }), 295 + createPersistSessionHandler( 296 + account, 297 + ({expired, refreshedAccount}) => { 298 + upsertAccount(refreshedAccount, expired) 299 + }, 300 + {networkErrorCallback: clearCurrentAccount}, 301 + ), 269 302 ) 270 303 271 304 __globalAgent = agent ··· 283 316 284 317 track('Sign In', {resumedSession: false}) 285 318 }, 286 - [upsertAccount, queryClient], 319 + [upsertAccount, queryClient, clearCurrentAccount], 287 320 ) 288 321 289 - const clearCurrentAccount = React.useCallback(() => { 290 - logger.debug( 291 - `session: clear current account`, 292 - {}, 293 - logger.DebugContext.session, 294 - ) 295 - __globalAgent = PUBLIC_BSKY_AGENT 296 - queryClient.clear() 297 - setStateAndPersist(s => ({ 298 - ...s, 299 - currentAccount: undefined, 300 - })) 301 - }, [setStateAndPersist, queryClient]) 302 - 303 322 const logout = React.useCallback<ApiContext['logout']>(async () => { 304 323 clearCurrentAccount() 305 324 logger.debug(`session: logout`, {}, logger.DebugContext.session) ··· 333 352 ({expired, refreshedAccount}) => { 334 353 upsertAccount(refreshedAccount, expired) 335 354 }, 355 + {networkErrorCallback: clearCurrentAccount}, 336 356 ), 337 357 }) 338 358 ··· 433 453 } 434 454 } 435 455 }, 436 - [upsertAccount, queryClient], 456 + [upsertAccount, queryClient, clearCurrentAccount], 437 457 ) 438 458 439 459 const resumeSession = React.useCallback<ApiContext['resumeSession']>(
+4 -4
yarn.lock
··· 48 48 typed-emitter "^2.1.0" 49 49 zod "^3.21.4" 50 50 51 - "@atproto/api@^0.7.4": 52 - version "0.7.4" 53 - resolved "https://registry.yarnpkg.com/@atproto/api/-/api-0.7.4.tgz#0dd6e725c88d1f941c57670dc82b60fde10f4ec6" 54 - integrity sha512-7DBy6/OcXemzCPzA0dx52LLYRABBs8bq9Docs3is+WRgEx5/Pd1kHSAlCHIaBhsym8fZ3/U4Fks/5FSHkSm4yQ== 51 + "@atproto/api@^0.8.0": 52 + version "0.8.0" 53 + resolved "https://registry.yarnpkg.com/@atproto/api/-/api-0.8.0.tgz#57ef1f6292d05ba851e3acec575139cfc4fd7a7a" 54 + integrity sha512-FgPOoij/PAEa0YoLKqj5NFYBvysdyb13gtS2XpJOdIvUZ2KehMlTrtj7g0AR78pRfME2jJjIgmAw6qpmSsjSTw== 55 55 dependencies: 56 56 "@atproto/common-web" "^0.2.3" 57 57 "@atproto/lexicon" "^0.3.1"