Task 8: codemod repointed 150 namespace-type files to #/lexicons
(AppBskyFeedDefs.PostView -> app.bsky.feed.defs.PostView, .Record -> .Main)
plus ~105 hand-fixed consumers (composer/video state, DebugMod, Profile,
onboarding, dialogs). DM_SERVICE_HEADERS deleted; last chat call sites on
the chat client. RichText.tsx flipped to SDK-only. Remaining @atproto/api
importers: the three session bridge files, the deliberate dual-world
matcher in lib/xrpc-error.ts, and test fixtures. toLex boundary casts are
TODO(phase4)-tagged for bridge removal.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- PasswordSession (@atproto/lex-password-session) is now the single auth
core; SessionAgent bridges it to the base Agent from @atproto/api so
the ~148 useAgent() consumer files keep working unchanged
- SessionBundle carries {session, agent, accountClient, appviewClient};
useLexClient() now returns the authed appview client, new
useAppviewClient()/usePdsClient() hooks
- reducer: OpaqueSessionBundle, new replaced-current-bundle action for
network-free cross-tab same-did sync (PasswordSession is immutable, so
the bundle is rebuilt instead of mutated in place)
- moderation: AtpAgent.configure -> Client.configure + Agent.configure,
per-account labelers on both the bridge and the appview client
- push-token unregistration uses temporary PasswordSessions
- hard-tail migrations: SignupQueued refresh via resumeSession shim,
useBeginAgeAssurance scoped-token raw Client, useAccountEmailState
reads currentAccount
- PDS routing preserved on the no-network resume fast path by
synthesizing a minimal didDoc from the persisted pdsUrl
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* persist startup queries
* Use IDB for query storage (#9687)
* Add storage abstraction for persisted query data
Introduce a platform-specific storage abstraction layer for react-query
persistence:
- Native: Uses MMKV for high-performance synchronous storage
- Web: Uses IndexedDB via the `idb` library for efficient async storage
This replaces the previous AsyncStorage implementation with more performant
platform-native solutions. The abstraction maintains API compatibility with
@tanstack/query-async-storage-persister.
* Refactor storage abstraction to use factory pattern
Change createPersistedQueryStorage to a factory function that accepts a
storage ID, allowing multiple isolated storage instances:
- Native: Each instance gets its own MMKV store
- Web: Each instance gets its own IndexedDB database
Adopt the factory pattern in:
- react-query.tsx: Uses 'persisted_queries' storage
- ageAssurance/data.tsx: Uses 'age_assurance' storage
This provides better separation between different query client caches
and allows each to be managed independently.
---------
Co-authored-by: Claude <noreply@anthropic.com>
* Refactor to use archival storage
(cherry picked from commit a773b40e41c96f821cd32260919ce1437c0fc3ab)
* Improve archive db types
(cherry picked from commit 80e4959ba2aa00c984c26aed2f7dfae1095720b0)
* rm idb
* clear on logout, bust on app version
* create abstraction for persisting queries, make gcTime infinite
* Rm abstraction
---------
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Eric Bailey <git@esb.lol>
* WIP
* Clean up growthbook code, integrate into init and sessions
* Move everything out of React
* Add metrics client
* Move to separate file
* Shared metadata cache
* Ensure we update metadata when session ID changes
* Ensure userMetadata is cleared when logging out
* WIP revamp
* Integrate feature gates into analytics context
* Clean up old code
* Fix useMeta util
* Some comments and cleanup
* Add logger to base analytics context
* Refactor current route handling
* Rip out LogEvent from navigation
* Update tracking endpoint
* Migrate toClout
* Clear out statsig client
* Add todo, reset logger readme
* Ope fix statsig noop
* Refactor logging in feed-feedback, add debug logging to metrics client
* Remove LogEvents alias for Metrics
* Prefer root package export
* Remove Metrics alias from logger
* [APP-1782] Migrate to new analytics APIs (#9735)
* Migrate logEvent to useAnalytics
* Migrate logger.metric to useAnalytics
* Migrate tricky spot, fix types
* Migrate remaining tricky spot
* Missed one
* Remove metric() from logger
* Migrate useGate to useAnalytics
* Remove all other StatSig mentions
* Update event payload
* Update logger tests
* Mock expo method
* Fix session ID bug
* Add session ID test
* Add test for metrics client
* Clarify intent
* Clean up core analytics file
* Clean up the call once utils
* Fix TODO
* Fix TODO
* Fix TODO
* Fix TODO
* Fix TODO
* Remove debug code
* Fix navigation context
* OK nav context is not working, todo
* Checkpoint: works but feels hacky
* Fix navigation context issue
* Improve feature API
* Improve metric logging
* Update logger tests
* Age Assurance V2
* Tighten up test
* Add todos for sdk migration
* Align RQ versions
* Use useEffect for side effect
* Improve effects, memoize
* Standarize on birthdate
* Copy feedback
* Copilot
* Add support link
* Reove double ..
* Cleanup
* Remove redirect dialog
* Cleanup todos, add comments
* Update splash in main template too
* Mock some stuff
* Exhaustive checks
Co-authored-by: Samuel Newman <mozzius@protonmail.com>
* Exhaustive checks
Co-authored-by: Samuel Newman <mozzius@protonmail.com>
* Small fix to bday handling
* Add comment
* onboarding style tweak
sneaking this in sorry!
* rm unreachable breaks
* Put useIntentHandler back on web
* Remove misleading success set
* Align on birthdate
---------
Co-authored-by: Samuel Newman <mozzius@protonmail.com>