* add tags to post lex
* kiss
* add richtext facet and validation attrs
* add tag validation attrs to post
* codegen
* add maxLength for tags, add description
* validate post tags on write
* add test
* handle tags in indexer
* add tags to postView, codegen
* return tags on post thread view
* format
* revert formatting change to docs
* use establish validation pattern
* add changeset
(cherry picked from commit fcb6fe7c26144662f791c7900afcd84c7bf1be6b)
* remove tags from postView, codegen
* remove tags from thread view
* revert unused changes
* lexicons for block lists
* reorg blockset functionality into graph service, impl block/mute filtering
* apply filterBlocksAndMutes() throughout appview except feeds
* update local feeds to pass through cleanFeedSkeleton(), offload block/mute application
* impl for grabbing block/mute details by did pair
* refactor getActorInfos away, use actor service
* experiment with moving getFeedGenerators over to a pipeline
* move getPostThread over to a pipeline
* move feeds over to pipelines
* move suggestions and likes over to pipelines
* move reposted-by, follows, followers over to pipelines, tidy author feed and post thread
* remove old block/mute checks
* unify post presentation logic
* move profiles endpoints over to pipelines
* tidy
* tidy
* misc fixes
* unify some profile hydration/presentation in appview
* profile detail, split hydration and presentation, misc fixes
* unify feed hydration w/ profile hydration
* unify hydration step for embeds, tidy application of labels
* setup indexing of list-blocks in bsky appview
* apply list-blocks, impl getListBlocks, tidy getList, tests
* tidy
* update pds proxy snaps
* update pds proxy snaps
* fix snap
* make algos return feed items, save work in getFeed
* misc changes, tidy
* tidy
* fix aturi import
* initial lexicons for interaction-gating
* add interactions view to post views
* codegen
* model bad reply/interaction check state on posts
* initial impl for checking bad reply or interaction on write
* omit invalid interactions from post thread
* support not-found list in interaction view
* hydrate can-reply state on threads
* present interaction views on posts
* misc fixes, update snaps
* tidy/reorg
* tidy
* split interaction gating into separate record in lexicon
* switch interaction-gating impl to use separate record type
* allow checking reply gate w/ root post deletion
* fix
* initial gating tests
* tighten gated reply views, tests
* reply-gating list rule tests
* allow custom post rkeys within window
* hoist actors out of composeThread()
* tidy
* update thread gate lexicons, codegen
* lex fix
* rename gate to threadgate in bsky, update views
* lex fix
* improve terminology around reply validation
* fix down migration
* remove thread gates on actor unindexing
* add back .prettierignore
* tidy
* run ci on all prs
* syntax
* run ci on all prs
* format
* fix snap
---------
Co-authored-by: Devin Ivy <devinivy@gmail.com>
* lexicons for block lists
* reorg blockset functionality into graph service, impl block/mute filtering
* apply filterBlocksAndMutes() throughout appview except feeds
* update local feeds to pass through cleanFeedSkeleton(), offload block/mute application
* impl for grabbing block/mute details by did pair
* refactor getActorInfos away, use actor service
* experiment with moving getFeedGenerators over to a pipeline
* move getPostThread over to a pipeline
* move feeds over to pipelines
* move suggestions and likes over to pipelines
* move reposted-by, follows, followers over to pipelines, tidy author feed and post thread
* remove old block/mute checks
* unify post presentation logic
* move profiles endpoints over to pipelines
* tidy
* tidy
* misc fixes
* unify some profile hydration/presentation in appview
* profile detail, split hydration and presentation, misc fixes
* unify feed hydration w/ profile hydration
* unify hydration step for embeds, tidy application of labels
* setup indexing of list-blocks in bsky appview
* apply list-blocks, impl getListBlocks, tidy getList, tests
* tidy
* update pds proxy snaps
* update pds proxy snaps
* fix snap
* make algos return feed items, save work in getFeed
* misc changes, tidy
* tidy
* fix aturi import
* lex
* list purpose
* lex gen
* add route
* add proxy route
* seed client helpers
* tests
* mutes and blocks
* proxy test
* snapshot
* hoist actors out of composeThread()
* tidy
* tidy
* run ci on all prs
* format
* format
* fix snap name
* fix snapsh
---------
Co-authored-by: Devin Ivy <devinivy@gmail.com>
* lexicons for block lists
* reorg blockset functionality into graph service, impl block/mute filtering
* apply filterBlocksAndMutes() throughout appview except feeds
* update local feeds to pass through cleanFeedSkeleton(), offload block/mute application
* impl for grabbing block/mute details by did pair
* refactor getActorInfos away, use actor service
* experiment with moving getFeedGenerators over to a pipeline
* move getPostThread over to a pipeline
* move feeds over to pipelines
* move suggestions and likes over to pipelines
* move reposted-by, follows, followers over to pipelines, tidy author feed and post thread
* remove old block/mute checks
* unify post presentation logic
* move profiles endpoints over to pipelines
* tidy
* tidy
* misc fixes
* unify some profile hydration/presentation in appview
* profile detail, split hydration and presentation, misc fixes
* unify feed hydration w/ profile hydration
* unify hydration step for embeds, tidy application of labels
* setup indexing of list-blocks in bsky appview
* apply list-blocks, impl getListBlocks, tidy getList, tests
* tidy
* update pds proxy snaps
* update pds proxy snaps
* fix snap
* make algos return feed items, save work in getFeed
* misc changes, tidy
* tidy
* fix aturi import
* hoist actors out of composeThread()
* tidy
* run ci on all prs
* format
* build
* proxy graph.getListBlocks
* remove unneeded index
* build pds
* setup noop listblock indexer on pds
* remove build
---------
Co-authored-by: dholms <dtholmgren@gmail.com>
* Add aspectRatio field to embed image lexicon
* lexicon codegen
* pass aspectRatio through to imagesEmbed views
* simplify aspectRatio logic, port to bsky package
* re-run lexicon codegen
* pseudocode for sending notification to user
* add notification push token table
* lexicon codegen
* `pds` and `api` codegen
* update lexicon
* add simple function to `putNotificationPushToken` into `notification_push_token` table
* reorgnaize imports
* add unspecced `putNotificationPushToken` to pds
* add `notification-push-tokens` table to PDS
* check if token exists before adding it to db
* add endpoint and appId to PDS table
* setup notification server
* fix logic for inserting token into db
* fix NotificationServer methods by making them static
* fix merge conflicts
* add comments on how sending ntoifications work
* remove dead code
* move notifServer to AppContext
* refactor code to handle notif sending in `Indexer` service
* add additional data when sending notifs
* clean up code
* move notif logic to indexer
* add `appId` and `endpoint` optional params to putNotificationPushToken
* clone notification code to AppView
* add endpoint to register push token with app view
* disable pds and enable app view notification server
* clean up code
* simply logic to check if a token already exists
* remove NotificationServer from PDS
* remove notification-push-token table from PDS
* remove `putNotificationPushToken` endpoint
* clean up code
* let `axios` throw error if `gorush` has an error
* let `kysely` throw error if notif cannot be registered by client
* rename `registerPushNotificationEndpoint` to `registerPushNotifications`
* delete `putNotificationPushToken` from AppView
* rename putPushNotificationToken to registerPushNotification
* remove dead notification code from pds
* remove sanitizeDisplayName from NotificationSever
* move `pushNotificationEndpoint` to config
* temp add `pushNotificationEndpoint` to dev-env setup
* remove example test from feed-generation.test.ts
* add test for registerPushNotification and clean up error handling
* move notifications test to its own file
* add test for NotificationServer to check if tokens are retrieved correctly
* remove unused functions from NotificationServer
* add additional tests for NotificationServer
* add return type to getNotificationDisplayAttributes function
* remove unnecessary comments
* remove dead NotificationServer code from PDS
* clean up code to prepareNotifsToSend
* put sending notifications as part of the backgroundQueue
* log instead of throwing error if notification attributes don't exist
* remove logs
* add more tests to `notification-server.test.ts`
* show replied with text for reply notifs
* better error handling when sending notifications via backgroundQueue
* add rate limit and batching to sending notifications
* add comments to NotificationServer
* merge with main
* use redis for rate limiting instead of normal rate limits
* move `notificationBatchSize` into config
* usePrimary db in test
* hoist push notif migration to present, update model to remove endpoint
* update push notif lexicon
* pare down lex for unregistering push
* helpers for working with service endpoints from did doc
* service-authed register/unregister push notifs
* add well-known endpoint to appview
* update bsky notif service tests
* fix to batching logic, misc tidy
* batch display notifications
* colocate all notification sending logic
* tidy tests
* remove unregister token for now
* fix registerPush lexicon, make a procedure
* fix registerPush impl, test pds proxy to notif service
* fix tests, make notif server optional when not configured
* fix notif server config for bsky app service
* move notif server rate limiting in-mem for now, add sending retry
* codegen tidy
* only push notifs on commit
* build
* fix notif rate limiter check
* send notifs from users w/o a profile
* remove build
---------
Co-authored-by: dholms <dtholmgren@gmail.com>
Co-authored-by: Devin Ivy <devinivy@gmail.com>
* Add self-label schemas
* switch around array and union for self-labels
* apply self-labels to post and profile views
* test for self labels in pds
* apply self-labels to post and profile views in bsky appview
* test for self labels in bsky appview
* update pds proxied test snapshots
* Add support for self-labels to the mdoeration sdk
* Disable unknown-labeler filtering until 3P support is added
---------
Co-authored-by: Devin Ivy <devinivy@gmail.com>
* add lexicon for unspecced applyLabels procedure
* implement label push to pds via unspecced.applyLabels
* add hive retry to bsky appview
* build
* update applyLabels to work with raw label data
* update bsky hive labeler
* remove build
* add cid to ListView and ListViewBasic
* add test for mute list embed
* add support for list embeds views
* test
* port to appview
* update missing snap
---------
Co-authored-by: dholms <dtholmgren@gmail.com>
* Add languages field to post record
* helper for parsing bcp47
* add language format to lexicon
* codegen for post record langs field
* re-export language parsing in api package
* tests and tidy for lexicon language format
* index post langs, in-progress
* update snapshots, fixes record-with-media embed issue
* index post langs on bsky appview
* don't bother indexing post langs in pds appview, tidy
* Misc notification and optimization in bsky, tidy
* Handle notifs on message queue in bsky appview
* Sync-up profile labeling behavior in bsky
* No async work during actor unindexing in bsky, include additional indexes
* Prevent deeply nested notifs w/ hellthread exception in bsky appview
* Add indexes to bsky appview for more efficient actor deletion/unindexing
* Update pds proxy snaps for updated bsky profile labeling
* Return custom suggestions in bsky appview
* Test out-of-order indexing of aggregations on bsky appview
* Proxy pds getPopular to hot-classic feed on appview. Proxy getPopularFeedGenerators to appview.
* Make did field required on feedgen view
* Add lexicon LexXrpcParameters, Object required properties check
Now schemas like the one below won't validate
```
...
{
"type": "object",
"required": ["foo"],
"properties": {}
}
...
````
* Fix lexicons with missing required fields
* Improve lexicon user type error messages and document why it needs to be `z.custom`
* actor type in profiles
* skeleton lex
* more schemas
* first pass at feed composition
* cleanup services
* more tidying
* fix up tests
* bookmarking schemas
* make feeds records instead of actors
* some cleanup
* fleshing out feeds as records
* wip
* working into cfg & dev-env
* fix appview test util
* bookmarking + views
* tidy
* add displayName
* db migration
* wip test
* blob processing
* first test working!
* Sync-up snapshots
* wip
* Fix pds ctx type
* Sync lexicons on pds and api
* wip
* fully refactor
* Prep for open union in reply data in bsky appview, sync-up snapshots
* msgs & ports
* Make pds did cache sqlite-friendly
* Start scaffolding more feedgen tests
* revamp appview tests
* revamp pds tests
* merge in dev env utils
* ensure plc close
* add feed gen to dev-env
* second feed gen
* named feeds in mock
* fix issue with dev-env pds appview
* update bsky snaps
* Flesh-out some feed gen tests
* Fix feed gen reply test
* Test feed bookmarking
* update skeleton defs
* merge
* Sync-up pds with updated feed skeleton contract
* Fix feed bookmark viewer state
* add feed embeds
* Test inaccurate feed gen repost
* Tighten some error behaviors around feed gens
* generator view in record embed
* test
* bookmarked/subscribed -> saved
* updated snaps
* name & descript on alices feed
* add like counts
* proposed lex
* tweak
* fetch feed generator details
* add describeFeedGen to dev-env
* adds tests for getFeedGenerator
* Update lexicons/app/bsky/feed/getFeedGenerator.json
Co-authored-by: devin ivy <devinivy@gmail.com>
* update describe
* add cid to feed gen view
* add alice feed gen avatar
* generator displayName required
* update snaps
* Fix dev env public url (#1058)
* Fix the public url used by dev-env
* move publicUrl location
---------
Co-authored-by: dholms <dtholmgren@gmail.com>
* add defs for feed gen prefs & decrease displayName length
* build branch
* updated how saved feeds works
* cleanup lex
* mount route
* Starter bsky algos (#1046)
* implement some starter bsky algos
* add team dids
* tidy
* add quotepost check to whats hot classic
* tests
* carve out feedgen section of pds
* apply limits
* add describeFeedGenerator route
* Whats hot new (#1060)
* map out new whats hot
* only available in postgres
* Fix dev env public url (#1058)
* Fix the public url used by dev-env
* move publicUrl location
---------
Co-authored-by: dholms <dtholmgren@gmail.com>
* add defs for feed gen prefs & decrease displayName length
* build branch
* updated how saved feeds works
* build algos branch
* remove relative imports to @atproto/api
* update hot classic name
* rm build
---------
Co-authored-by: Paul Frazee <pfrazee@gmail.com>
* v0.3.6
* v0.3.7
* v0.1.10
* update name of skyline
* build branch
* aws build
* getFeedGenerators test
* For now only use new replyRef union for custom feeds, for compat
* Don't use replyRef union on new feeds yet
---------
Co-authored-by: Devin Ivy <devinivy@gmail.com>
Co-authored-by: Paul Frazee <pfrazee@gmail.com>
* Add lexicons for account preferences
* Move prefs to app.bsky, codegen
* Setup model and services for user prefs
* Setup xrpc methods for prefs
* Test preferences, fixes
* Tidy
* Tidy
---------
Co-authored-by: Devin Ivy <devinivy@gmail.com>
* block lexicons
* table schema
* block processing
* Actor-block migration
* Add blocked post lexicon to getPostThread
* getBlocks routes
* Add missing lexicons to bsky
* Add block state to actor views
* throw on blocked accounts in getAuthorFeed
* blcok state in profile views
* Update getPostThread to support block views, update existing test
* strip out blocks out oof timeline & popular
* more routes
* Test blocked posts in threads
* Support blocks on record embeds
* notifs
* Update pds test snapshots w/ block state
* fix search
* Update pds actor search snapshots w/ blocks
* test
* tests
* update lex
* fix up from returning blocking as record
* ci for branch
* fix build issue in bsky
* more blocks tests
* fix actor search test
* hook getBlocks up to router
* bugfix & actually test lol
---------
Co-authored-by: Devin Ivy <devinivy@gmail.com>
* com.atproto.label.label lexicon
For persisting un-signed label objects in repositories.
There will likely be a handful of XRPC query endpoints in the
com.atproto.label namespace in the near future.
* lexicons: com.atproto.label.subscribeLabels
* lexicons: com.atproto.label.query
* lexicons: label updates post lex-refactor
* lexicons: rename label.query to label.queryLabels
* lexicons: queryLabels larger batch sizes; improve description
* lexicons: add labels to profiles, posts, notifications
* lexicons: add negation ('neg') flag to labels
* lexicon: label vals on moderation actions
This is a mechanism to create (or negate) labels as part of a moderation
action. The fields are optional, so this is backwards compatible, and if
we wanted to embed entire labels in the future (instead of just "val"
strings), that would be possible using a different field name.
* lexicons: update label.label to label.defs#label
* codegen
---------
Co-authored-by: dholms <dtholmgren@gmail.com>