commitaf5262682eAuthor: Minseo Lee <itoupluk427@gmail.com> Date: Thu Aug 8 21:12:23 2024 +0900 Added trans (#4890) commita864f69849Author: dan <dan.abramov@gmail.com> Date: Thu Aug 8 06:20:24 2024 +0100 Keep interstitial fresh on refresh (#4888) commit00fea10782Author: dan <dan.abramov@gmail.com> Date: Thu Aug 8 05:56:22 2024 +0100 Include popcluster in suggestion ranking (#4887) commitb3092413ddAuthor: Hailey <me@haileyok.com> Date: Wed Aug 7 17:13:29 2024 -0700 Add logging of selected feed preference when displaying the following feed (#4789) commit1b02f81cb8Author: Hailey <me@haileyok.com> Date: Wed Aug 7 14:45:06 2024 -0700 [Video] Visibility detection view (#4741) Co-authored-by: Samuel Newman <10959775+mozzius@users.noreply.github.com> commitfff2c079c2Author: Samuel Newman <mozzius@protonmail.com> Date: Wed Aug 7 18:47:51 2024 +0100 [Videos] Video player - PR #2 - better web support (#4732) * attempt some sort of "usurping" system * polling-based active video approach * split into inner component again * click to steal active video * disable findAndActivateVideo on native * new intersectionobserver approach - wip * fix types * disable perf optimisation to allow overflow * make active player indicator subtler, clean up video utils * partially fix double-playing * start working on controls * fullscreen API * get buttons working somewhat * rm source from where it shouldn't be * use video elem as source of truth * fix keyboard nav + mute state * new icons, add fullscreen + time + fix play * unmount when far offscreen + round 2dp * listen globally to clicks rather than blur event * move controls to new file * reduce quality when not active * add hover state to buttons * stop propagation of videoplayer click * move around autoplay effects * increase background contrast * add subtitles button * add stopPropagation to root of video player * clean up VideoWebControls * fix chrome * change quality based on focused state * use autoLevelCapping instead of nextLevel * get subtitle track from stream * always use hlsjs * rework hls into a ref * render player earlier, allowing preload * add error boundary * clean up component structure and organisation * rework fullscreen API * disable fullscreen on iPhone * don't play when ready on pause * debounce buffering * simplify giant list of event listeners * update pref * reduce prop drilling * minimise rerenders in `ActiveViewContext` * restore prop drilling --------- Co-authored-by: Samuel Newman <10959775+mozzius@users.noreply.github.com> Co-authored-by: Hailey <me@haileyok.com> commitb701e8c68cAuthor: Samuel Newman <mozzius@protonmail.com> Date: Wed Aug 7 16:56:12 2024 +0100 [Video] Authed video upload (#4885) * add service auth call * update API package --------- Co-authored-by: Samuel Newman <10959775+mozzius@users.noreply.github.com> commit753a233408Author: Hailey <me@haileyok.com> Date: Tue Aug 6 11:21:59 2024 -0700 Tweak feed manip to show cases of A -> B without further children (#4883) commit5845e08eeeAuthor: dan <dan.abramov@gmail.com> Date: Tue Aug 6 17:12:27 2024 +0100 Show own replies before follows' replies in threads (#4882) commitb291a1ed8aAuthor: dan <dan.abramov@gmail.com> Date: Tue Aug 6 16:42:42 2024 +0100 Show more replies in Following (different heuristic) (#4880) commit686d5ebb53Author: dan <dan.abramov@gmail.com> Date: Tue Aug 6 01:30:52 2024 +0100 [Persisted] Make broadcast subscriptions granular by key (#4874) * Add fast path for guaranteed noop updates * Change persisted.onUpdate() API to take a key * Implement granular broadcast listeners commit966f6c511fAuthor: dan <dan.abramov@gmail.com> Date: Tue Aug 6 01:03:27 2024 +0100 [Persisted] Fix the race condition causing clobbered writes between tabs (#4873) * Broadcast the update in the same tick The motivation for the original code is unclear. I was not able to reproduce the described behavior and have not seen it mentioned on the web. I'll assume that this was a misunderstanding. * Remove defensive programming The only places in this code that we can expect to throw are schema.parse(), JSON.parse(), JSON.stringify(), and localStorage.getItem/setItem/removeItem. Let's push try/catch'es where we expect them to be necessary. * Don't write or clobber defaults Writing defaults to local storage is unnecessary. We would write them as a part of next update anyway. So I'm removing that to reduce the number of moving pieces. However, we do need to be wary of _state being set to defaults. Because _state gets mutated on write. We don't want to mutate the defaults object. To avoid having to think about this, let's copy on write. We don't write to this object very often. * Refactor: extract tryParse * Refactor: move string parsing into tryParse * Extract tryStringify, split logging by platform Shared data parsing/stringification errors are always logged. Storage errors are only logged on native because we trust the web APIs to work. * Add a layer of caching to readFromStorage to web We're going to be doing a read on every write so let's add a fast path that avoids parsing and validating. * Fix the race condition causing clobbered writes between tabs commit5bf7f3769dAuthor: dan <dan.abramov@gmail.com> Date: Tue Aug 6 00:30:58 2024 +0100 [Persisted] Fork web and native, make it synchronous on the web (#4872) * Delete logic for legacy storage * Delete superfluous tests At this point these tests aren't testing anything useful, let's just get rid of them. * Inline store.ts methods into persisted/index.ts * Fork persisted/index.ts into index.web.ts * Remove non-essential code and comments from both forks * Remove async/await from web fork of persisted/index.ts * Remove unused return * Enforce that forked types match commit74b0318d89Author: dan <dan.abramov@gmail.com> Date: Mon Aug 5 20:51:41 2024 +0100 Show replies in context of their threads (#4871) * Don't reconstruct threads from separate posts * Remove post-level dedupe for now * Change repost dedupe condition to look just at length * Delete unused isThread * Delete another isThread field It is now meaningless because there's nothing special about author threads. * Narrow down slice item shape so it does not need reply * Consolidate slice validation criteria in one place * Show replies in context * Make fallback marker work * Remove misleading and now-unused property It was called rootUri but it was actually the leaf URI. Regardless, it's not used anymore. * Add by-thread dedupe to non-author feeds * Add post-level dedupe * Always count from the start This is easier to think about. * Only tuner state need to be untouched on dry run * Account for threads in reply filtering * Remove repost deduping This is already being taken care of by item-level deduping. It's also now wrong and removing too much (since it wasn't filtering for reposts directly). * Calculate rootUri correctly * Apply Following settings to all lists * Don't dedupe intentional reposts by thread * Show reply parent when ambiguous * Explicitly remove orphaned replies from following/lists * Fix thread dedupe to work across pages * Mark grandparent-blocked as orphaned * Guard tuner state change by dryRun * Remove dead code * Don't dedupe feedgen threads * Revert "Apply Following settings to all lists" This reverts commit aff86be6d37b60cc5d0ac38f22c31a4808342cf4. Let's not do this yet and have a bit more discussion. This is a chunky change already. * Reason belongs to a slice, not item * Logically feedContext belongs to the slice * Update comment to reflect latest behavior commit18b423396bAuthor: Hailey <me@haileyok.com> Date: Mon Aug 5 12:21:34 2024 -0700 Add `PlatformInfo` module (#4877) commitfb278384c6Author: bnewbold <bnewbold@robocracy.org> Date: Fri Aug 2 15:57:50 2024 -0700 bskyweb: optional basic auth password middleware (#4759) commit6298e6897fAuthor: Samuel Newman <mozzius@protonmail.com> Date: Sat Aug 3 00:33:45 2024 +0200 tweak list header (#4870) Co-authored-by: Samuel Newman <10959775+mozzius@users.noreply.github.com> commitc3d8beee6dAuthor: Eric Bailey <git@esb.lol> Date: Fri Aug 2 13:05:33 2024 -0500 Respect labels on feeds and lists (#4818) * Prep * Pass in optional moderation to FeedCard * Compute moderation decision, filter contentList contexts, pass into card * Let's go a different route * Filter from within search queries * Use same search query for starter packs * Filter lists from profile tabs * Cleanup * Filter from profile feeds * Moderate post embeds * Memoize * Use ScreenHider on lists * Hide both list types * Fix crash on iOS in screen hider, fix lineheight * Memoize renderItem * Reuse objects to prevent re-renders commit293ac6fab2Author: dan <dan.abramov@gmail.com> Date: Fri Aug 2 17:13:31 2024 +0100 Only show replies in Following if following all involved actors (#4869) * Only show replies in Following for followed root and grandparent * Remove now-unnecessary check * Simplify condition commit7f292abf51Author: dan <dan.abramov@gmail.com> Date: Thu Aug 1 22:05:40 2024 +0100 Always limit Following replies to the people you follow (#4868) * Limit feed replies to people you follow * Remove dead code commitf056cb646eAuthor: Hailey <me@haileyok.com> Date: Thu Aug 1 10:32:36 2024 -0700 Fix missing header on Likes/Reposted By, add missing perf optimizations (#4867) * fix liked by list * fix lists * tweaks to style * change string commitc78e9e3147Author: Samuel Newman <mozzius@protonmail.com> Date: Thu Aug 1 19:14:32 2024 +0200 Move theme controls to its own screen (#4866) commit388c157c36Author: dan <dan.abramov@gmail.com> Date: Thu Aug 1 17:49:43 2024 +0100 Display second-to-last rather than second post in a slice (#4864) commitb0e130a4d8Author: Eric Bailey <git@esb.lol> Date: Thu Aug 1 10:29:27 2024 -0500 Update muted words dialog with `expiresAt` and `actorTarget` (#4801) * WIP not working dropdown * Update MutedWords dialog * Add i18n formatDistance * Comments * Handle text wrapping * Update label copy Co-authored-by: Hailey <me@haileyok.com> * Fix alignment * Improve translation output * Revert toggle changes * Better types for useFormatDistance * Tweaks * Integrate new sdk version into TagMenu * Use ampersand Co-authored-by: surfdude29 <149612116+surfdude29@users.noreply.github.com> * Bump SDK --------- Co-authored-by: Hailey <me@haileyok.com> Co-authored-by: surfdude29 <149612116+surfdude29@users.noreply.github.com> commitd2e88cc623Author: dan <dan.abramov@gmail.com> Date: Thu Aug 1 02:27:25 2024 +0100 Fetch enough pages to fill a page's worth of items (#4863) * Fetch enough pages to fill a page's worth of items * Add failsafe in case of appview bug commit70ffd387e3Author: Hailey <me@haileyok.com> Date: Wed Jul 31 11:16:14 2024 -0700 Only show "followed you back" when appropriate (#4849) * only show followed back when we should * try/catch * log * Update FeedItem.tsx * tweak commit576cef88b5Author: dan <dan.abramov@gmail.com> Date: Wed Jul 31 19:10:24 2024 +0100 [Web] Retrigger onEndReached if needed when content height changes (#4859) * Extract EdgeVisibility * Key Visibility by container height instead of item count commitc75bb65befAuthor: dan <dan.abramov@gmail.com> Date: Wed Jul 31 13:00:22 2024 +0100 Remove unused NoopFeedTuner (#4856) commitc3e77b56ffAuthor: GSMT <samaritanojr006@gmail.com> Date: Wed Jul 31 00:19:23 2024 +0200 useDedupe callback (#4855) commit8ddb28d3c5Author: Hailey <me@haileyok.com> Date: Tue Jul 30 08:25:31 2024 -0700 [Video] Uploads (#4754) * state for video uploads * get upload working * add a debug log * add post progress * progress * fetch data * add some progress info, web uploads * post on finished uploading (wip) * add a note * add some todos * clear video * merge some stuff * convert to `createUploadTask` * patch expo modules core * working native upload progress * platform fork * upload progress for web * cleanup * cleanup * more tweaks * simplify * fix type errors --------- Co-authored-by: Samuel Newman <10959775+mozzius@users.noreply.github.com> Merge remote-tracking branch 'upstream/main' into Improve-notification-localization
Bluesky Social App
Welcome friends! This is the codebase for the Bluesky Social app.
Get the app itself:
- Web: bsky.app
- iOS: App Store
- Android: Play Store
Development Resources
This is a React Native application, written in the TypeScript programming language. It builds on the atproto TypeScript packages (like @atproto/api), code for which is also open source, but in a different git repository.
There is a small amount of Go language source code (in ./bskyweb/), for a web service that returns the React Native Web application.
The Build Instructions are a good place to get started with the app itself.
The Authenticated Transfer Protocol ("AT Protocol" or "atproto") is a decentralized social media protocol. You don't need to understand AT Protocol to work with this application, but it can help. Learn more at:
- Overview and Guides
- Github Discussions 👈 Great place to ask questions
- Protocol Specifications
- Blogpost on self-authenticating data structures
The Bluesky Social application encompasses a set of schemas and APIs built in the overall AT Protocol framework. The namespace for these "Lexicons" is app.bsky.*.
Contributions
While we do accept contributions, we prioritize high quality issues and pull requests. Adhering to the below guidelines will ensure a more timely review.
Rules:
- We may not respond to your issue or PR.
- We may close an issue or PR without much feedback.
- We may lock discussions or contributions if our attention is getting DDOSed.
- We're not going to provide support for build issues.
Guidelines:
- Check for existing issues before filing a new one please.
- Open an issue and give some time for discussion before submitting a PR.
- Stay away from PRs like...
- Changing "Post" to "Skeet."
- Refactoring the codebase, e.g., to replace MobX with Redux or something.
- Adding entirely new features without prior discussion.
Remember, we serve a wide community of users. Our day-to-day involves us constantly asking "which top priority is our top priority." If you submit well-written PRs that solve problems concisely, that's an awesome contribution. Otherwise, as much as we'd love to accept your ideas and contributions, we really don't have the bandwidth. That's what forking is for!
Forking guidelines
You have our blessing 🪄✨ to fork this application! However, it's very important to be clear to users when you're giving them a fork.
Please be sure to:
- Change all branding in the repository and UI to clearly differentiate from Bluesky.
- Change any support links (feedback, email, terms of service, etc) to your own systems.
- Replace any analytics or error-collection systems with your own so we don't get super confused.
Security disclosures
If you discover any security issues, please send an email to security@bsky.app. The email is automatically CCed to the entire team and we'll respond promptly.
Are you a developer interested in building on atproto?
Bluesky is an open social network built on the AT Protocol, a flexible technology that will never lock developers out of the ecosystems that they help build. With atproto, third-party integration can be as seamless as first-party through custom feeds, federated services, clients, and more.
License (MIT)
See ./LICENSE for the full license.
P.S.
We ❤️ you and all of the ways you support us. Thank you for making Bluesky a great place!