Proto commits in bluesky-social/atproto

These commits are when the Protocol Buffers files have changed: (only the last 100 relevant commits are shown)

Commit:e4e6e84
Author:Eric Bailey
Committer:GitHub

searchPostsV2: filter by multiple languages (#5146) Swap the singular `language` filter for a repeated `languages` field and add `excludeLanguages`, matching tango#1100. `languages` moves into `PostsFilters` (applied to both include and exclude); the singular `language` is removed from `SearchPostsV2Request` and the remaining fields are renumbered to stay byte-compatible with the upstream proto. Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

Commit:5206b3a
Author:Eric Bailey
Committer:GitHub

Add `searchPostsV2` (#5114) * Initial lexicon spec * Sketch out searchPostsV2 impl * Changeset * Remove old experiment for clarity for now * Add misisng field to existing dev-env v2 impl * Update fields

Commit:cab3ac3
Author:rafael
Committer:GitHub

update chat lexicons and deprecate chat notif pref (#5123) Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

Commit:13eff6a
Author:Eric Bailey
Committer:Eric Bailey

Update fields

Commit:eb170f5
Author:Claude

Add poll embed type to app.bsky Introduces native polls for Bluesky posts: - Lexicons: app.bsky.poll.topic (the poll record), app.bsky.poll.vote (a single-choice vote, strongRef to a topic), app.bsky.embed.poll (the post embed + pollView), and the app.bsky.poll.getVotes / app.bsky.poll.getPoll queries. Adds the embed to the post, postView, and viewRecord unions, and a "poll-ended" notification reason. - Bsky indexing: poll-topic and poll-vote plugins. Votes dedupe on (creator, subject) so only the first vote per user counts, and votes cast after a poll's endsAt are dropped. Per-option counts are denormalized into poll_option_agg. - Data plane: getPollVotesBySubject (paginated, optional option filter), getPollVotesByActorAndSubjects (viewer state), getPollVoteCounts, and getPollVoterFacepile, which prioritizes accounts the viewer follows. - Hydration + views: pollView assembles per-option counts, the viewer's vote, and a follow-ordered <=3 voter facepile per option. - Poll closing: a periodic PollCloser sweep emits a one-time poll-ended notification to the author and all voters once endsAt passes (the only time-triggered notification source); getPoll lets clients fetch full results from that notification. - Tests: end-to-end coverage in packages/bsky/tests/views/polls.test.ts. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AinMGjbJNqE2pfaGzn6tvZ

Commit:a1fa46a
Author:Eric Bailey

Add repost-only actor mutes

Commit:a89e912
Author:Eric Bailey

Update fields

Commit:3002e9f
Author:Cam Sweeney
Committer:GitHub

searchv2: typeahead params envelope, arabic hint, detected langs (#5112) * searchv2: typeahead params envelope, arabic hint, detected langs * add changeset

Commit:1dfab81
Author:Eric Bailey

Sketch out searchPostsV2 impl

Commit:d5f3615
Author:rafaeleyng

bsky: consume expanded notification preferences Track tango proto changes (bluesky-social/tango#1034): - rename ChatNotificationInclude.ACCEPTED -> FOLLOWS (value 2 kept) - add ChatRequestNotificationPreference message + chat_request field Wire chatRequest through the getPreferences/putPreferencesV2 lex<->proto converters and the dataplane mock, and update the chat include value from "accepted" to "follows" to match the app.bsky.notification lexicon. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

Commit:0d62d5b
Author:treethought
Committer:GitHub

bsky: enable search v2 behind feature gate (#5035) * bsky: enable search v2 behind feature gate * wrap v1 search logic for dev env * fix features scope

Commit:2c958f8
Author:Eric Bailey
Committer:GitHub

Integrate `site.standard` lexicons and record hydration + new `getEmbedExternalView` (#4915) * Add rich metadata fields to app.bsky.embed.external#viewExternal * Hook up hydration * Update lexicons to match new changes * Hydrate site.standard records by ref on the read path Replaces the placeholder GetSiteStandardDocumentsWithPublication RPC with GetSiteStandardRecordsByURI and GetSiteStandardRecordsByRef to match what tango exposes. Hydration uses the ByRef variant so embedded link cards freeze to the exact record versions present at post time. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * Plumb hydration state into externalEmbed view Threads HydrationState through externalEmbed call sites and adds a lookup helper that resolves associatedRecords against the hydrated site.standard documents and publications by their "<uri>@<cid>" keys. Field extraction is left as a follow-up. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * Implement getEmbedExternalView for compose-time link cards Switches the lex query to take an array of site.standard.* URIs and return strongRefs alongside an optional viewExternal. The handler resolves URIs through GetSiteStandardRecordsByURI and emits strongRefs suitable for embedding into a post's external.associatedRecords. viewExternal field decoration and verification are left as follow-ups. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * Update getEmbedExternalView lex, update code to use new lexicons * Integrate new protos and response shapes * Update lexicons * Hydrate labels for site.standard.* URIs and gate on takedown Appends site.standard record URIs to the post-hydration label fetch so state.labels carries entries for every SS doc/publication referenced by an embed. Adds actionSiteStandardTakedownLabels to drop hydrated SS records whose labels include a takedown from a redacting labeler. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * Decorate viewExternal with site.standard records externalEmbed now layers a site.standard-derived overlay on top of the post's embed values, so hydrated document/publication fields override title/description/thumb/createdAt/updatedAt/labels/source while uri and associatedRefs always come from the post. The overlay is exposed as externalEmbedFromStandardSite for reuse. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * Wire getEmbedExternalView through site.standard hydration Adds Hydrator.hydrateEmbedExternalViewFromUris which filters input URIs to site.standard.*, hydrates the latest record versions plus labels, and gates taken-down records. The handler runs that hydration, builds associatedRefs/Records from the surviving entries, and produces a view via Views.externalEmbedFromStandardSite. Adds a required `url` param to the lex so the returned viewExternal can carry the user's pasted share URL as its `uri`. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * Refactor getEmbedExternalView to createPipeline Adopts the skeleton/hydration/rules/presentation pattern used by other query handlers (searchPosts, getFeedGenerators) for parity. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * PR review nits - Clarify in the getEmbedExternalView lex that `view` is optional - Simplify the no-fields-set branch in buildExternalEmbedSourceTheme - Make externalEmbed's overlay spread order robust to future overlay fields by re-setting uri and associatedRefs after the spread Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * Extract site.standard hydrator into hydration/external.ts Splits the SS record types, key helpers, AssociatedSiteStandardRecord type, and the two getSiteStandardRecords RPC wrappers out of feed.ts and the SITE_STANDARD_NSID_PREFIX const out of hydrator.ts into a new ExternalHydrator class. The Hydrator gains an `external` field mirroring how actor/feed/graph/label are mounted, and call sites move from this.feed.* to this.external.*. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * PR review nits - Refresh siteStandardRefsFromPosts JSDoc to reflect uri@cid map keys - Note in the getEmbedExternalView handler why we pass over the hydration maps twice - Move AssociatedSiteStandardRecord back to views/index.ts since it's internal to that module's view-building helpers Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * Thread includeTakedowns through read-path SS hydration The compose-time hydrator method already forwards ctx.includeTakedowns; mirror it on the read path so parseRecord respects the same flag and takedown gating stays consistent across the two entry points. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * Fix var shadowing * Update changeset * Update lex, update codepaths * Merge labels * Format * Remove comment * Prune publications not referenced by any hydrated document The dataplane auto-resolves a document's `site` field, so a request can return a publication the caller never asked for. If the caller also passed a publication URI that doesn't match any document's `site`, that publication is dropped to keep the response strictly tied to the documents we returned. Publication-only resolution (no documents hydrated) skips the prune. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * Format * Estimate reading time from document.textContent Uses a coarse 200wpm word-count heuristic to populate viewExternal's readingTime when a document has plaintext content. Factored into a helper so swapping in a library later is a one-function change. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * Move publication pruning into the getEmbedExternalView handler The hydrator method goes back to a generic "fetch what was requested" shape. Request-shape semantics — i.e. dropping publications the dataplane auto-resolved that the caller didn't actually ask for — now live in presentation, alongside the rest of the response assembly. collectAllowedPublicationUris is exported from hydration/external for reuse. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * Extract site.standard helpers into util/standard-site.ts Moves SITE_STANDARD_NSID_PREFIX, the (uri, cid) key helpers, collectAllowedPublicationUris, AssociatedSiteStandardRecord, lookupAssociatedSiteStandardRecords, and estimateReadingTimeMinutes out of hydration/external and views/index into a single util module. The util keeps no hydration imports — collectAllowedPublicationUris and lookupAssociatedSiteStandardRecords are typed structurally over the record-info shapes they read. Also tightens the getEmbedExternalView handler: empty maps return early, publications get pruned only when documents are present, and the view is always returned with the request's `url` and overlay-derived title/description (falling back to empty strings) when any record was hydrated. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * Move SS hydration-state lookup back to hydration/external The util-level helper went generic over the doc/publication info shape, which lost the documented hydration-map types (and their `uri@cid` key docblocks) at the call boundary. Move it next to buildSiteStandardRecordsHydrationMaps under the more discoverable name getSiteStandardRecordsFromHydrationMaps and type it concretely against SiteStandardDocuments/Publications. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * Mirror takedowns across site.standard doc/pub pairs Fold the per-record null sweep and the cross-pair sweep into a single actionSiteStandardTakedownLabels(documents, publications, labels) so neither read- nor compose-path callers can forget the second half. If either side of a doc/publication pair (discovered via doc.record.site) is taken down, mirror the null onto the other side; orphan docs and orphan publications still get the per-record sweep. Also: in the view layer, treat the document as authoritative for title/description as a unit — don't blend a doc's title with a publication's description. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * Split externalEmbedFromStandardSite into ref- and record-based variants externalEmbedFromStandardSite stays as the read-path entry point, resolving doc/publication via the by-ref lookup against state, then delegates to externalEmbedFromStandardSiteRecords which owns the overlay-building body. The compose-path handler now captures the first hydrated doc/publication during its existing pass over the SS maps and calls the records variant directly, eliminating the redundant second walk. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * Dispatch presentation by hydrated record type `presentation` is now a thin dispatcher that hands off to a `standardSitePresentation` helper when site.standard records were hydrated, returning `{}` otherwise. Future record types get their own branch. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * Document empty-string contract on getEmbedExternalView output When the resolved records don't supply title/description, those fields land as empty strings on the returned view rather than the view being omitted. Spell that out in the lex description and at the build site so clients know to treat empty values as 'no enrichment' rather than 'titleless content.' Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * Inline gate for publication allow-set Collapse the `prunePublications` flag into the allow-set itself: when no docs were hydrated, `allowedPublicationUris` is `undefined` and the publication loop allows everything; an empty set still means "constraint exists, nothing matches" and drops every publication. Removes the second variable that encoded the same rule. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * Validate site.standard records against the assumed URL Both view-layer entry points now take an `assumedUrl` (the post's external.uri on the read path, the request's `url` on compose) and pass it through to validateStandardSiteForUrl. The validator mirrors the spec's rule tree: - Doc + publication: doc.site must resolve to the hydrated publication, and publication.url + document.path must equal assumedUrl. - Loose doc: doc.site must be HTTP and doc.site + document.path must equal assumedUrl. - Publication only: publication.url must equal assumedUrl. URL comparison normalizes via the WHATWG URL constructor (resolving path against base, lowercase host, dropping query/fragment, stripping trailing slash). On failure, the overlay is dropped and clients fall back to the bare embed. Adds parameterized tests covering the rule tree and the URL normalization cases. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * Reject misconstructed doc/pub pairings during ref lookup When `associatedRefs` carries both a document and a publication, the hydration-map lookup now requires the doc's `site` field to equal the publication ref's URI; mismatches return both slots as `undefined` rather than silently rendering enrichment from records that don't agree. Doc-only and publication-only refs pass through unchanged. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * Symmetric SS lookup contracts across read and compose paths Splits the SS hydration-map lookup into two named sister functions: - getSiteStandardRecordsFromHydrationMapsByRefs (read path) trusts the post's strongRefs and rejects pairs that disagree, including the case where a doc declares an at-uri `site` but no matching publication ref was pinned. - getSiteStandardRecordsFromHydrationMapsByDocumentUri (compose path) takes the first hydrated doc and pairs it with the publication its `site` field points at, rejecting the whole pairing when the declared publication wasn't auto-resolved. The handler now uses the compose-path variant directly, so the firstDoc/firstPub capture, the allowed-publications prune, and collectAllowedPublicationUris all go away. By the time externalEmbedFromStandardSiteRecords runs, both paths guarantee the same contract: doc+pub agree on URI, doc-only means loose doc, pub-only means publication-only flow, otherwise both slots are undefined. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * Test the SS hydration-map lookups Covers both byRefs (read-path strict) and byDocumentUri (compose-path doc-first) variants, including the doc/pub pair-match invariant, the loose-doc and publication-only branches, the bail-out when a doc declares an at-uri publication that wasn't hydrated, and version-exact lookup misses. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * Tighten validation and the empty-overlay contract - validateStandardSiteForUrl is now URL-match only; the structural pair-agreement and orphan-doc checks live exclusively in the hydration-map lookups (`hydration/external.ts`). Function and test comments cross-reference where each layer enforces what. - externalEmbedFromStandardSiteRecords now bails out and returns undefined when the chosen pair can't supply both `title` and `description`. The handler treats an undefined overlay the same as "nothing hydrated" and returns `{}` so Cardy falls back to its own card render and skips writing strongRefs to the post. - Lex description on getEmbedExternalView updated: empty-string fallbacks for title/description are gone; the response is empty when records are missing or validation fails. - Lookup JSDocs cross-reference each other: same observable contract, different upstream guarantee. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * Drop unused collectAllowedPublicationUris The handler-side prune got obsoleted by the doc-first lookup (getSiteStandardRecordsFromHydrationMapsByDocumentUri), which only emits the publication a hydrated doc points at. No callers remain. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * Remove untracked new codegen files * Remove untracked new codegen files for Ozone * Update comments * Refresh comments on the SS external-embed view methods The overlay is now a fully-populated `viewExternal['external']` (uri, title, description always set), not a partial. Update the JSDocs and the read-path spread comment to match: drop the "partial overlay" / "uri intentionally excluded" framing, explain the new return shape, and note that the spread on the read path layers SS-derived fields over post-author-supplied ones with `associatedRefs` re-set last because the post is authoritative. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * Stick to convention * Fmt * Untrack generated files --------- Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>

Commit:733d557
Author:rafael
Committer:GitHub

update courier proto (#4919)

Commit:dacb0e8
Author:rafael
Committer:GitHub

group chat declaration hydration (#4868) Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

Commit:efb2b58
Author:Eric Bailey
Committer:GitHub

[APP-1926] Add bsync delete operations support (#4745) * Add bsync handlers for deletion request * Add test * Changeset * Abtract util, add comments

Commit:5905eb9
Author:rafael
Committer:GitHub

Drafts implementation (#4549)

Commit:9bdd358
Author:bnewbold
Committer:GitHub

Experiment: wire-through germ chat declaration in bsky appview backend (#4415) * lexicons: add germ chat declaration record, and ref from profile view * codegen germ record for bsky pkg * make lex-client build happy by including germ ref * add germ chat declaration methods to dataplane .proto * dataplane codegen * start wiring up germ chat records * germ lex in api package * api codegen * initial attempt at germ record test * update germ lexicon * make codegen * updates for germ declaration NSID rename * implement new germ hydration * more progress on germ integration * fix germ profile test The main issue here was forgetting the '.associated.' bit in the data path. * remove unnecessary germ imports/refs * hydrate germ metadata in basic profile view (as per schema) * type fixes for germ appview test * prettier * synchronize bsky.proto with dataplane; run buf:gen * add changeset for Germ declaration records

Commit:6d9a326
Author:rafaeleyng

store createdAt

Commit:b0405fb
Author:rafaeleyng

rename savedAt -> updatedAt

Commit:4fc0ee2
Author:rafaeleyng
Committer:rafaeleyng

implementation

Commit:57811e4
Author:Eric Bailey
Committer:GitHub

Reserve field on ActorInfo (#4469)

Commit:397c62f
Author:Jim Calabro
Committer:GitHub

Sitemap Handlers (#4434) * add sitemap protos * cd packages/bsky && npm run buf:gen * implement user sitemap handlers * add a test * lint:fix * use /external * use Readable pipe for slightly more effecient data transfer * rename functions to include the word user * improve not found case and add test

Commit:380aa3b
Author:rafael
Committer:GitHub

appview: Contact import lexicons (#4393)

Commit:90f1569
Author:Eric Bailey
Committer:GitHub

Age Assurance V2 (#4407) Age Assurance v2 endpoints and config

Commit:532b228
Author:Eric Bailey
Committer:GitHub

[APP-1484] Add thread/search exploration code and feature gate (#4327) * Add ranking exploration code and feature gate * Import sort

Commit:b52e981
Author:Eric Bailey
Committer:Eric Bailey

Add debug field to lex and proto, codegen

Commit:cdab1a2
Author:Eric Bailey
Committer:Eric Bailey

Gen bufs

The documentation is generated from this commit.

Commit:63f6f33
Author:rafael

Bookmarks moderation endpoints

Commit:64100a7
Author:rafael
Committer:GitHub

Bookmarks (#4163)

The documentation is generated from this commit.

Commit:083566d
Author:rafael
Committer:GitHub

Endpoint for unregistering push notifications (#4041) Co-authored-by: Samuel Newman <mozzius@protonmail.com>

Commit:91bc841
Author:rafael
Committer:GitHub

Update proto to keep up with latest changes (#4040)

Commit:88c1364
Author:rafael
Committer:GitHub

APIs for age assurance compliance (#4028) Co-authored-by: Eric Bailey <git@esb.lol>

Commit:10ce5c4
Author:rafael
Committer:rafael

Verification response flow

Commit:5cb628d
Author:rafael
Committer:rafael

Fix up XPRC endpoints

Commit:8c7ba2e
Author:Eric Bailey
Committer:rafael

Initial implementation

Commit:c73d913
Author:Jim Calabro
Committer:GitHub

Pass Through Age Restricted Status on Device Push Tokens (#4030) * add ageRestricted to lexicon * make codegen * update courier proto * pass through ageRestricted * make fmt

Commit:23f3ee2
Author:rafael
Committer:rafael

Verification response flow

Commit:bf83ab0
Author:Eric Bailey
Committer:rafael

Initial implementation

Commit:2991c85
Author:rafael
Committer:rafael

Fix up XPRC endpoints

Commit:722ab08
Author:rafael
Committer:rafael

Verification response flow

Commit:b352080
Author:rafael
Committer:rafael

Fix up XPRC endpoints

Commit:06441ee
Author:rafael
Committer:rafael

Fix up XPRC endpoints

Commit:9c3c3ae
Author:Eric Bailey
Committer:rafael

Initial implementation

Commit:8a0f190
Author:Samuel Newman
Committer:GitHub

Subscribe to activity implementation (#3908) Co-authored-by: rafael <rafael@blueskyweb.xyz>

Commit:982b869
Author:rafael
Committer:rafael

Update proto

Commit:c377034
Author:rafael

Fix up XPRC endpoints

Commit:27cc32b
Author:rafael
Committer:rafael

Fixup the 2 XRPC endpoints

Commit:a67410e
Author:Eric Bailey
Committer:rafael

Init lex

Commit:511ae82
Author:Samuel Newman
Committer:rafael

Implement activity subscriptions

Commit:5829d12
Author:jcalabro

update courier proto

Commit:7fd57f6
Author:rafael

Add endpoint to get records

Commit:d577e70
Author:rafael

Use string instead of enum for declaration value

Commit:c20553e
Author:rafael

ActivitySubscriptionResponse->ActivitySubscription

Commit:f66969d
Author:rafael
Committer:rafael

Hydrate activity subscript. outside relationships

Commit:6cc33ce
Author:rafael
Committer:rafael

Rename self-declaration values

Commit:3d8eb12
Author:Eric Bailey
Committer:Eric Bailey

Init lex

Commit:f2beb8a
Author:rafael
Committer:rafael

New approach in putActivitySubscription

Commit:b43de1e
Author:rafael
Committer:rafael

Ret. actorDid+namespace in getActivitySubscription

Commit:2a90dd4
Author:rafael
Committer:rafael

Address change requests in protobuf

Commit:15aba33
Author:rafael
Committer:rafael

Implement activity declaration on profile viewer

Commit:90a14fd
Author:rafael
Committer:rafael

Add profile.associated.activitySubscriptions

Commit:2816127
Author:rafael
Committer:rafael

Implement listActivitySubscriptions

Commit:9f7be0b
Author:devin ivy
Committer:GitHub

Appview: sync up protos for notification prefs (#3970) appview: sync up protos for notification prefs

Commit:9e79233
Author:Eric Bailey
Committer:Eric Bailey

Init lex

Commit:ca70ab9
Author:rafael
Committer:rafael

New approach in putActivitySubscription

Commit:8a6ec82
Author:rafael
Committer:rafael

Address change requests in protobuf

Commit:169f2af
Author:rafael
Committer:rafael

Implement listActivitySubscriptions

Commit:4291166
Author:rafael
Committer:rafael

Add profile.associated.activitySubscriptions

Commit:c18c67a
Author:rafael
Committer:rafael

Implement activity declaration on profile viewer

Commit:e88f57b
Author:Eric Bailey

Rename bufs, runtime

Commit:8190bed
Author:Eric Bailey

Add bufs and get state methods

Commit:76ddcda
Author:rafael

Address change requests in protobuf

Commit:9dcf938
Author:rafael

Implement activity declaration on profile viewer

Commit:23da580
Author:rafael

Add profile.associated.activitySubscriptions

Commit:8b7a469
Author:rafael
Committer:rafael

Implement listActivitySubscriptions

Commit:3f07ffd
Author:rafael
Committer:GitHub

Add field to NotificationPreferences proto msg (#3946)

Commit:a48671e
Author:Samuel Newman
Committer:GitHub

Notification preferences V2 endpoints (#3901) Co-authored-by: surfdude29 <149612116+surfdude29@users.noreply.github.com> Co-authored-by: rafael <rafael@blueskyweb.xyz>

Commit:2801f2c
Author:rafael

Rework proto and lex

Commit:ee56cb4
Author:rafael

Specific preferences per notification setting

Commit:eabe737
Author:rafael
Committer:rafael

Impl. notif getPreferences and putPreferencesV2

Commit:b9616f6
Author:rafael
Committer:GitHub

[bsync] Rename operation endpoint properties (#3921)

Commit:cb8bf18
Author:rafael
Committer:GitHub

`app.bsky.unspecced.getPostThreadV2` filtering (#3905)

Commit:e474623
Author:Jim Calabro
Committer:GitHub

Add Generic Bsync Proto (#3887) Co-authored-by: rafael <rafael@blueskyweb.xyz>

Commit:389e5d7
Author:rafael

Add bsync endpoint for generic operation

Commit:7e877ba
Author:jcalabro

Add Generic Bsync Proto

Commit:3a65b68
Author:rafael
Committer:GitHub

Actor status lexicon and views (#3824)

Commit:192be86
Author:rafael

Actor status lexicon and views

Commit:ab4e720
Author:rafael
Committer:GitHub

Handle resolution improvements (#3816) * Handle resolution improvements On PDS, only perform resolution if appview is not configured. On appview, never perform resolution, only rely on dataplane. * changeset * appview: add lookup_unidirectional to GetDidsByHandles * appview: plumb lookup_unidirectional for handle lookup * note --------- Co-authored-by: Devin Ivy <devinivy@gmail.com>

Commit:b428ce3
Author:rafael
Committer:GitHub

Hookup no-cache arg to GetInteractionCounts (#3812)

Commit:688268b
Author:rafael
Committer:GitHub

Delegated verification (#3761) Co-authored-by: Eric Bailey <git@esb.lol>

Commit:ebc5505
Author:rafael
Committer:rafael

wip

Commit:7a1e471
Author:rafael
Committer:rafael

Remove unneeded endpoints

Commit:b665b7a
Author:rafael
Committer:rafael

First vouch implementation

Commit:388e5d3
Author:devin ivy
Committer:GitHub

Appview: skip actor cache for viewer (#3733) * appview: skip actor cache for viewer * appview: rename getActors cache control arg, convenience on hydration ctx

Commit:c0a75d3
Author:rafael
Committer:GitHub

posts_with_video filter (#3390)

Commit:22204d1
Author:rafael
Committer:rafael

Fix bsync and bsky proto casing

Commit:2e52960
Author:rafael
Committer:rafael

Implement suggestions

Commit:1cfff09
Author:rafael
Committer:rafael

add purchases endpoints on bsky

Commit:94c2387
Author:rafael
Committer:rafael

lexicon and proto definitions

Commit:ea159c6
Author:rafael
Committer:rafael

Add bsync scanPurchaseOperations route