diff --git a/CHANGELOG.md b/CHANGELOG.md index 1595423975..54e488c9d6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,957 @@ +#### v4.0.0 (2025-01-20) + +##### Breaking Changes + +* add new `escape` option to getPostSummaryByPids [breaking] (16c8a652) +* core html stripping on plaintext, remove 'filter:teasers.configureStripTags' hook, remove html stripping from teaser generation (c01f1549) + +##### Chores + +* **i18n:** + * fallback strings for new resources: nodebb.error (e53b3737) + * fallback strings for new resources: nodebb.aria (d04bdd9d) +* update changelog for v3.12.4 (e7e682ed) +* bump persona (3e08eb39) +* bump markdown, harmony, and persona to new major versions (499df8ab) +* remove now-unneeded v4 upgrade scripts (487e7be5) +* add type to webpack config file (#12072) (d79dfd03) +* rc4 (aa1f65e9) +* bump harmony for #12938 (8ec388af) +* rc3 (754ef9b2) +* upgrade script to fix outdated slugs for users with periods in their usernames (d1c27b4d) +* bump to rc.2 (e2b653b0) +* bump version to rc.1 (5aab151e) +* up persona (b25aa336) +* beta.4 (c1079356) +* up harmony (098836c1) +* beta.3 (27fb01f7) +* up harmony (34353bdb) +* beta.2 (cc267714) +* beta tag (86f624f8) +* up themes (471fbd3a) +* up themes (d4cf5e7e) +* restore activity history check in AP inbox middleware now that NodeBB sends unique IDs with applicable activities (7e23e192) +* up harmony (16fe85e2) +* up themes (789520e4) +* up harmony (7a5588da) +* bump version to 4.0.0-alpha (b691d2a9) +* up harmony (aae0b5b0) +* up harmony (b540ecd3) +* up harmony (18f9baff) +* info -> verbose logging in ap inbox.js (931a0f0a) +* make getParentChain logging verbose (6069bee0) +* lint (f6d4d563) +* up mentions (68c91650) +* up mentions (2b6e31a6) +* commenting out logic that drops requests if the id has already been seen, due to a regression in interoperability between NodeBB instances (bb0360bf) +* up mentions (2c87c6e8) +* up mentions (bad094e8) +* up markdown (58668b46) +* up markdown (dbd901d3) +* update ap cron job config (c680fa67) +* up mentions (c4c3c207) +* bump harmony (4cec6783) +* bump mentions (5ec24977) +* bump markdown (4fd0d27e) +* up mentions (78e11d6e) +* bump harmony (228c9173) +* some linting (fdba6840) +* debug log (3636dec7) +* up widgets (1ce986f7) +* lint (5e776088) +* minor cleanup (1253ded7) +* add verbose logging to middleware.validate (719bb0a0) +* up harmony (550e522f) +* move assertTopic to top of file, rename to assert (4ee8519d) +* up harmony (a84dba27) +* lint (c5c0c473) +* remove now-unused notes.assert (c6624b63) +* up harmony (66b4dc2c) +* up harmony (d31978b3) +* lint (0c2cfbe7) +* removed unused requires (911177ce) +* remove debug log (92c990f2) +* remove debug log (403bf3e1) +* update log verbiage (9c15b02a) +* additional logging (641a94d6) +* move assertNote to separate file in preparation for additional note-based methods (2b3b6e56) +* small var rename (8a5fb86d) +* minor re-shuffling of code (5e693702) +* reorganize controllers for clarity (2e899008) +* update AP helpers export, 404 logic reversal, no slugify in userslug in mock profile from remote instance (0cbbce8c) +* **deps:** + * update dependency lint-staged to v15.4.0 (#13059) (1c4c4f57) + * update dependency sass-embedded to v1.83.4 (#13045) (be2098d8) + * update dependency @commitlint/config-angular to v19.7.0 (#13030) (03432960) + * update dependency jsdom to v26 (#13040) (d12d9efb) + * update redis docker tag to v7.4.2 (#13033) (fd6f3ee6) + * update dependency lint-staged to v15.3.0 (#13031) (3340d984) + * update dependency sass-embedded to v1.83.1 (#13025) (b9364de2) + +##### Documentation Changes + +* add `resizeImageWidth` to openapi definition for /api/config route (7c1b9000) +* fix comment (e5331b84) +* schema update for activitypub acp route (3a05171f) +* update comment to reflect new behaviour (2cbd63dc) + +##### New Features + +* fix activitypub toggler to be more complete; tests. #13054 (af4d07fb) +* add activitypub file to translations (74831034) +* save audience into post hash (for remote posts) (b537437c) +* add `filter:topics.hasThumbs` filter hook (f4835695) +* append uploaded images into thumbnail set (cc65214d) +* #12976, shares collection (e83036a9) +* pending follows and logic for remote users, #12938 (2851e56b) +* #12935, show 'shared this to x' in topic event when moving topics out of cid -1 (fcf0f799) +* support for FEP fb2a (new-style account metadata) (549a6b7d) +* #12924, parse incoming custom fields from remote users (0f351ba7) +* #12924, custom user fields for local users now federating out (62fe70f2) +* add title property to custom emoji markup (3968c822) +* #12683, parse incoming emoji tags and replace in content prior to storage in database (09b1e119) +* fire new hook `filter:activitypub.mocks.note` on note mocking (4ba41a68) +* handle receipt of `Add` activity #12707 (3023b251) +* associate new topics created from asserted notes with their originating context, if that context is resolvable (6f237c57) +* #12822, send all outgoing links to `/ap` first to see if it's activitypub enabled, parse if able, otherwise redirect as normal (069c8228) +* normalization middleware to ensure incoming objects' data types are as expected (simplifies later logic) (13c048a5) +* send Update(Note) on chat message deletion and restoration, serving Tombstone if deleted (61445d3d) +* handle Update(Note) when object has limited visibility, #12834 (e5948464) +* check room counts on actor prune, #12834 (e0e2051d) +* federate on chat message edit, #12834 (1659015c) +* notify users on new message from remote users, fix use of parseInt in generating chat notification (2464d13c) +* handle incoming non-public activities as chat message, #12834 (b82e20df) +* federating out chat messages (2ab5ea39) +* update mdidleware.assert.message so roomId is optional (2b71434e) +* #12647, federate out `Add` activity on inbox.create and local post creation (bd44783e) +* send 308 when activitypub request for remote post comes in, #12831 (7f1f4859) +* dynamic category icon generation (edff3394) +* enable web-push plugin on first install (34c4cefe) +* service worker icon and badge support (4ae86145) +* update `buildRecipients` to include all topic participants and their followers, #12735 (6752a541) +* notification rescind support (d6bab253) +* update service worker to handle push and notificationclick (5109b539) +* add onmessage handler for service worker (40fe4d88) +* extend activitypubApi.create.note to accept a post object to reduce unnecessary calls to retrieve post summary (b63440cb) +* moving a topic out of cid -1 federates an Announce activity, #12734 (daa665eb) +* additional copy re: editing remote posts, #12732 (c3e14912) +* allow use of vanity domains pointing to an account hosted elsewhere (709a02d9) +* show local users who follow (or are followed) by a remote user, on a remote user's profile (a884681a) +* additional logic to handle special case where a queried object id reports a context, but it is not actually contained in the resolved context's collection (f9937a84) +* #12695 Topic Synchronization via resolvable `context` (ff0c289e) +* activitypub.get; allow the passing-in of custom headers via existing `options` parameter (da25fd21) +* add post attachments to topic thumbnails (2aeabce5) +* icon replacing user status for remote users, denoting that they are from outside the local instance, #12688 (a81ef609) +* allow activitypub request cache to be ignored (485b7758) +* send join date in local actor mock (3c9337b7) +* AP note replies collection, closes #12675 (26a7c51a) +* topic backfill logic via resolvable context #12647 (e75ec39b) +* send out `Update(Actor)` when a category is edited (09d8fbf9) +* instance-level allow andd deny list for federatioN (6e2178b0) +* store encountered instances by last seen date (d0a1ebcf) +* sending out 1b12-style Announce activities on incoming Create/Update/Like/Delete/Undo(Like) activities, when they pertain to notes (6569066e) +* assert actors when mocking post (f5b856f4) +* check to/cc/audience for local category and put topic there instead (overrides passed-in cid) (b6ffc47c) +* plumb audience into _activitypub when mocking posts (d9f1fa3a) +* send cause to ap.get error handler, delete local account representation if assertion fails with a 410 (3567f55a) +* #12589, add nodeinfo endpoint (578a53dd) +* add timestamp to most activity ids (42f514b7) +* show category followers in category federation ACP page (7313d5c6) +* logic for remote user deletion, cronjob, and ACP options for pruning options (4bb2c1a8) +* remote user deletion logic, #12611 (539300ff) +* allow user.exists to respond to requests for remote uids too (3dca79dd) +* pruning of stale notes older than 30 days with no engagement (709c9132) +* save remote user urls backreference (ff53f3c0) +* add another sanitization round before federating to remove classes from all tags in output html, closes #12573 (7c79e231) +* passing in types to parsePost for more specific handling by plugins (8cf96176) +* track incoming requests by id, analytics increment for some metrics, ignore repeated requests by id (4e9cd8ef) +* added analytics.peek (b106a6a0) +* Note deletion logic and refactoring, #12551 (ccd187e0) +* handle receipt of Update(Tombstone) (f4043959) +* on post delete, federate out an Update(Tombstone) (96db519b) +* serve Tombstone objects for soft deleted posts (5e9d47a1) +* ability to query remote users by webfinger handle (97615267) +* support the ability to search for posts and users by url (4cbb1f2a) +* basic retry queue (50bc9a37) +* on post edit, also target anyone who announced the post and their followers (807c3eac) +* add id to reject activity (32d1adf6) +* openapi spec for acp category federation page (fc3f3a78) +* support rescinding user flags (61a595de) +* slightly better title generation (b9d6aa46) +* help modal for world page (cf291a51) +* remove `/world/all` route, add intro header to `/world` (af324dae) +* add id to Like (ab055a77) +* handle 1b14 announce for remote content too (2ce3a116) +* resolve Crate and Announce activities (f802564e) +* utility functions to get local followers/counts given a remote actor uri, plumb cid into notes.assert via inbox.announce if a local cid is following the sending actor (452cb0a9) +* send id back during accepts (b7629c6e) +* handle Undo(Flag) (a1a7fb77) +* send undo when rescinding/deleting a report (c1dfa8d2) +* federate flag creation (2a2b855f) +* bulk purge flags (7bacbf76) +* rescind post flags (9ab1a2d1) +* integrate post uploads into attachments for outgoing note mocks (fdbd30dc) +* add id to profile updates (4d07ca4c) +* noremalize actor property in middleware (18ba2e38) +* save remote post url into hash for use (525b7c2c) +* note attachments via link preview plugin (6fc6cc33) +* add ids for undoing follows (3cc09d20) +* send back follow id in Accept (66b0d81c) +* add id to follows and verify accepts (72dbcfe3) +* resolve objects from ids in middleware (102c174e) +* filter out topics in cid -1 from tagged topics page, closes #12489 (d437d969) +* sign public key requests (fcd5447c) +* populate and send link tag/header respectively for activitypub-enabled content (4e0d7dd3) +* basic AP Flag support (d9eba6d2) +* send unique identifiers for note activities (9fc194e3) +* upgrade script to re-assert all known actors to save URL into hash, and bump mentions (943cef6d) +* sorting an filtering in /world (d1fa6a59) +* make the /api/world data more category-like (e266b447) +* add more properties from /category to /world (3c6966fb) +* follow redirects in API (e0138cbe) +* add checks to only continue with topic assertion if there is a relation to existing content, #12442 (55e947a0) +* add assertion lock on activitypub.notes.assert (2688b6bb) +* have category actor send Announce(Note) on remote replies to topics in a cid (04c743eb) +* have category actor send Announce(Note) activity on posts from that cid (7df5cabb) +* ability to update category handles (9dc20d0c) +* category handles, #12434 (3cc99a17) +* rename 'world' category to 'uncategorized' (9a5d4ffb) +* plumb pid into return data from posts.loadPostTools, add link to view original post, for remote content (17f62f24) +* add TTL cache for Actors.assert (d75894eb) +* log all post edits to the event log, return eid when logging events, plumb eid into Update(Note) to federate out as a unique id (83392f3c) +* if Update(Note) is received for a post that does not already exist, assert it (0bfdbb6a) +* return count of new notes in assertTopic (519e025e) +* add /world and /world/all to available nav items (f31d8c2e) +* mentions support (e4c1ca1e) +* allow user.search to handle remote handles, beginning of mentions support (1b64fdb5) +* integrate notifications for remote likes, follows, and announces. (c707a32a) +* federate tags out on new post (if new topic) (e1c43112) +* restrict loopback calls (77a3efb4) +* fine-grained privileges integration for fediverse users and world pseudo-category (1bd8f9a1) +* temporarily deny handling non-public notes (eaba2aa3) +* shared inbox (49c69a0f) +* security, cross-check key ownership against received actor (a94341f4) +* attachments support (e5b6ee97) +* save tids to individual user inboxes based on recipient list, new /world/all route (89128634) +* save actor follower URL backreference and sorted set backreference (da085b0e) +* infinite scrolling for /world (874b24cb) +* record remote Announce(Note) (6508287d) +* handle Announce(Note) when Note is a piece of remote content (94dcd29e) +* Announce(Note) and Undo(Announce) (415b4fe1) +* exposed method to find topic events based on a subset of saved info, returns topic event ids (b9821c52) +* topic and category S2S get responses (a461e5dd) +* send proper content-type on AP S2S responses (d18e65c4) +* category actors, stub outbox (88733a51) +* returning following and follower collections upon request (ae042ce3) +* Like(Note) and Undo(Like); federating likes (607c4623) +* origin checking on received Update activities (6930973d) +* Update(Note) (0e59f312) +* Update(Person) (6e87cf57) +* activitypub response to note retrieval via pid (6b517252) +* added mocks.actor and Update(Person) activity on profile update (8453b83e) +* Create(Note) on new topic or reply (0e016c6e) +* proper webfinger response for instance actor (da0211b1) +* application actor + public key for uid 0 signs, moved homepage route to after core routes are generated (9885f94a) +* native parsing of title for topics (981b4f14) +* beginnings of the /world route (04423232) +* handle Update(note) (ac672f08) +* handle Create(note) (f7477536) +* flesh out more topic info, fix navigator (7e89eadb) +* some additional work to properly save and retrieve remote topic data (4bd7a574) +* ability to browse to any ActivityPub note and have the entire topic chain render (485cf200) +* add activitypub request cache (326bb995) +* assertNotes method (ab40ba61) +* ability to load remote post data in a topic (3ce84b39) +* plumb uid into .addParentPosts() so .assertNotes() can be properly called (0d478b2c) +* stub lib for retrieving and mocking posts (f1e5e5a0) +* send name property in getActor response (5e1e8099) +* ability to browse follower/following lists of remote accounts (2a77ae55) +* expose following/follower counts in actor response (7fd15d66) +* show remote followers/following in user profile pages (739b0548) +* update mockProfile to accept actor uris as well as actor objects (672c7014) +* accept and undo support (4c1b2b3f) +* update activitypub helper resolveLocalUid to accept both webfinger name and full URL as input (1f79f542) +* follow/unfollow logic and receipt (c02271c7) +* actor cache, method to resolve inboxes, stub code for sending requests. Now base64 encoding digest as expected by Mastodon (cdc4275f) +* http signatures support, .sign() and .verify() AP helper methods (e7184eb8) +* add webfinger ttl cache (4f5f025d) +* add .has() call to cache/ttl (57895b72) +* ability to view federated profiles via url manipulation (a05b674e) +* followers and following endpoints (7e1dac39) +* inbox and outbox routes, stub controllers (81b6260f) +* global switch for disabling federation, + test (099124c4) +* activitypub actor endpoint for user accounts (2dec357a) +* **activitypub:** show world category in selectors (953231fc) + +##### Bug Fixes + +* ap webfinger test (3e33e1a3) +* if user is logged in after registration don't go back to /login (23b37f62) +* closes #13056, guard against undefined keyid,compare (6073a25b) +* bug where newly create cids were not responding via webfinger, 404 on webfinger errors, not 400 (c17809e4) +* #12990, local references via remote posts are not linkified properly, + tests for helper (98280d30) +* #12984, fix pids numeric sorting, handle non-integers (4dc740a2) +* add deprecation note re: as:audience (3cf3f93a) +* #13021, save details of follow request before sending the follow, avoid race condition (16616814) +* handle ap send errors with object body (450322d1) +* thumbs.get to handle null case from mime.getType (50b510e3) +* post upload sync duplication bug (cfeb49dd) +* language fallbacks for activitypub-related strings (37a4fd7c) +* add sourceContent prop to posts API; fix other tests (e1db9642) +* add sourceContent prop to posts API (8ebe6de1) +* add missing file for openapi tests (e6b20ed3) +* activitypub tests (12fb205b) +* broken tests (9c78255e) +* #13014, possible fix for peertube incompatibility: strip hash value from key IDs during check (0ad8ed9d) +* #12996, invalid title generation when remote post content has markdown source (1d36ab6d) +* #13017, probe redirection if url is identical to id (39705a17) +* #13016, remote account deletion frontend UI bug (2005a02a) +* add missing catch, closes #13012 (45021b5b) +* check if url is undefined (fa81078a) +* #12941, inherit audience from earlier posts in the chain so as to send a coherent value to Lemmy instances, re: lemmynet/lemmy#5278 (97384b2c) +* add 10s timeout for AP message send (25d6ef43) +* ignore subsequent shares of the same topic by that user (d734ce49) +* #12972, allow bridgyfed accounts to pass isWebfinger regex validation (a7e6cfe8) +* bump harmony (ee8ec61e) +* fix double thumb due to post attachments (755b9855) +* lemmy integration, handle `image` property as topic thumb (b15a684a) +* wrap try..catch around topics.reply in note assertion to output errors (b551abce) +* have options.update also trigger handle and search updates on actor assertion (050acb4f) +* separate out removals vs. additions in actor assertion in order to hopefully resolve #12959 (546ffed2) +* openapi schema for ap routes (c86b6f24) +* get version directly from package.json (3340720e) +* set linkValue for remote user fields (3d653cbb) +* crash due to missing param when calling getCustomUserFields (e5fdf9f1) +* set a user-agent when sending requests (64339e61) +* persist `sourceContent` into post hash when ingesting remote posts, update markdown so that field is parsed instead of ignoring content (1839388b) +* use fediverse pseudo-user for webfinger privilege checks (f32184b2) +* regression on remote deletes, received object is not always a simple id (d7fe3558) +* thrown exception from failed note assertion (830aab66) +* one more (304fa554) +* another fix re: 3780fdc6ff9fb23048266b43ceae86646fb795cc (69d5544a) +* thrown exception from failed note assertion (f7a294a7) +* additional fixes re: 3780fdc6ff9fb23048266b43ceae86646fb795cc (97861dd1) +* regression on remote deletes, received object is not always a simple id (3780fdc6) +* #12939 convert custom emoji in actor summary into images (78a9e86c) +* translate custom field names and values when federating out (e6edcefd) +* bump emoji-android version (552298f8) +* bump harmony and re-tag (593a1933) +* bump emoji to 6.0.1 (efa0cac3) +* bump harmony (00b2dd49) +* strip html from remote custom fields, linkify if url detected in now-plaintext field value (065f84b6) +* handling of empty custom user fields from remote users (1bebb82b) +* don't send custom fields in remote user actor object if no value is entered (09f00f8e) +* hotfix for empty user fields (ce1efd39) +* bump mentions (e5f804ff) +* #12928, topic showing wrong queued posts in-topic when topic is remote (7b747c8f) +* replace parseInt that was excluding remote pids from calculation (93bb73c1) +* #12923, inability to start chat with remote users via profile (b6a2520f) +* inability to directly post to a nodebb category from the fediverse (55ab85ac) +* #12919, handle when buildTopicsSortedSet returns a non-array (e4e6b1d2) +* #12912, strip custom emoji from remote content titles (7adc3140) +* don't chop off colons when generating titles as they could interfere with emoji (f449fafc) +* #12893, topic with pages returning OrderedCollectionPage instead of OrderedCollection. (d685b20e) +* missing return (cf3555fa) +* #12887, strip target attribute from remote posts' html (3eb0a0ed) +* #12866 again, more tests (a59dae3f) +* raise probe timeout to 2s (94e34907) +* topic count not showing up on category page (dd363446) +* #12882, view original post circles back to same topic (93844321) +* #12883, activitypub probe timeout (f8729571) +* errant mention detection via actors.note (22dbf15e) +* #12880, refactored ap controller.list to use `buildTopicsSortedSet`, moved out poor man's intersect to internal method (05c8ee9f) +* don't trust timestamps on received items (b1d779ca) +* use `categories.getTopicIds` instead of duplicating existing logic to get world tids (7bf41138) +* #12866, improve title generator, refactor tests (beb85604) +* one more fix (eccad588) +* debug return not restored back (0e982fcf) +* #12865, crash on liking a chat message (fc3243d6) +* possible fix to escaped emoji in titles (f5324501) +* #12707 ensure actor matches context attributedTo (998273cd) +* federate out an Add on post creation even if there are no category followers (15516862) +* accidental sending of Set to ActivityPub.send (3030a720) +* #12857 byebye cheerio (8492b5f4) +* inputIndex check (cac4f8e7) +* convert some more verbose logging to use ap logging helper (6208ab8d) +* regression introduced by 903d03891941902ddac80b380552530e1853c306 (d451adaf) +* lint (c34407d8) +* errant parseInt in canEditDelete (0f1b1164) +* guard against missing to/cc (1d5f490d) +* object not array (873d033b) +* backend logic fixes for #12853 (b472c589) +* groups not showing up on new reply (1bf09907) +* re-enable logging only for dev mode (a226ee9e) +* defer postdata retrieval (9062691a) +* `inReplyTo` incorrectly including system messages, #12834 (7ad7bc47) +* remote debug log (e9a27db2) +* error on replying to remote mids #12834 (adf33cfa) +* proper urls in `to`, #12834 (94ac57ea) +* simplify uid logic, explicitly mention all participants, even local users, #12834 (70fe8689) +* adjust timestamp after message creation instead of passing timestamp in, #12834 (0346e92b) +* limited visibility remote posts with greater scope than asserted roomId should add those users to the chat room, #12834 (22931be1) +* empty mid on frontend for remote posts (8abfd951) +* recent chats string generation to handle remote users #12834 (0a17a0b9) +* inReplyTo bug, #12834 (fc1d064d) +* remove sender from recipients, #12834 (8f7d0499) +* private note `inReplyTo` url, #12834 (f3045309) +* `inReplyTo` for private notes so that refer to the immediately previous message if not explicitly defined (f4a02d9c) +* duplicate logic and double-parsing issue, #12834 (8a1abe68) +* federate out a Create(Note) instead of just the note... doi... (74d5ced2) +* chat room kicking of remote users, (un)read logic for remote users (there is none), sendNotification to only apply to local uids (52080ba2) +* restrict the ability to make a remote user a chat room owner (b610b520) +* display of remote users in chat room search (f5129017) +* also ignore non-public notes on Update activity (2713d13c) +* bump web-push (f57758b9) +* logic tweak (15f60b24) +* fall back to inReplyTo traversal on context resolution failure (903d0389) +* tests (45a0b818) +* null defense (3d25a079) +* #12821, improvements to search bar and search logic (0b83e5b8) +* lint (c265666c) +* parse aboutme when mocking a user (c5e10c1a) +* remove superfluous service-worker code (90cc7e61) +* explicitly set `updated` property when federating notes out (6fe4d446) +* buttons for general settings (5bc907a0) +* bump mentions (e0c410cd) +* actors.assert attempting to process things that aren't actors, #12809 (6b4b4b1a) +* carry out mime-type guessing on incoming attachments (71ce3089) +* re-use already parsed html in api.posts.edit's call to getPostSummaryByPids, delay federating out edit activity for 5s to give link preview a chance to resolve (b04a1105) +* id on 1b12 announces (047d5992) +* better handling for remote posts that do not contain content (3c55d102) +* #12799 add externally linked images to `attachment` (1a0a2cd1) +* remove includeUncontrolled as we are posting messages, and that only works with windows you control lol (028b6d74) +* add logic to automatically take over clients from old service workers (1fbf9114) +* closes #12787, filter null topics (c2600b12) +* remove use of jquery $(this) in ajaxify (176f4d0d) +* crash when AP S2S call made to retrieve a remote user account (not allowed); now returning 404 (d42d3b1c) +* prevent crash if items is undefined (a80e3141) +* regression that caused replies to not get federated (652d6c6e) +* #12760, add proper security context for application actor (045e16d3) +* on topic move out of cid -1, also federate to the public address (909437c3) +* bump harmony (6ed32f67) +* type casting in user block logic (0f63f67b) +* restrict announce activity to topic moving OUT of cid -1 (f3eb6d50) +* #12751, topics:recent zset not updated when tid moved in/out of cid -1 (76551c71) +* bump mentions (e6d8e059) +* bump composer (22952c54) +* bump composer (e2879563) +* #12732 editing of remote post content (25bf97ae) +* #12733, html present in generated title for remote topics (34747122) +* #12729, replies to existing topics from Pixelfed not asserting properly due to incorrect `toPid` (f481cde1) +* move topic reply call in notes.assert to its own line (95e6d2b4) +* #12510, blocking of a single remote user causes content from all remote users to be blocked (53aee401) +* serve category actor image instead of nothing, serve brand logo in icon (cbe0a0ad) +* lint (d33fb92d) +* have note federation call .parsePost instead of firing plugin hook (93536386) +* always send replies uri instead of null if no replies exist, @trwnh (ff08fbb7) +* send `null` instead of empty array in `replies` property if mocked note has no replies (9bd6896d) +* bug that caused remote replies to other remote content to not always assert (2ced3502) +* bugs in user searching causing remote lookups to fail (1f896fb6) +* `audience` property in topic actor response (9a54f6bc) +* updating of post counts for remote users (3e494dc7) +* add privilege check to user follows (399d4103) +* accidental passing of string instead of constant (7bf349b6) +* lint (fc5a829c) +* update upgrade script date (b9f37c5c) +* include follower sets for reassertion (be393d57) +* missing await (5c9ac5d3) +* null check for note attachments for thumbs view (2aa04837) +* incorrect parsing of context items during note assertion, logic error with slicing (60408f23) +* logging in topic actor logic (bc00835c) +* issue with topic actors not returning proper json (609035b5) +* off by one error @barisusakli (cfbaf145) +* map to actual mainPid value (7bdf3769) +* skip topic retrieval when cid is -1, as it is done again later (92191995) +* flawed logic in generating topic context collection (31c7226e) +* rename announcers to shares (3c0d7616) +* catch thrown errors in src/api/activitypub (fdc0d670) +* federating category mentions (00a26679) +* send html in category description (f605e188) +* Update activity handling for non-Person actors (5e343a83) +* remove await from category update federation call (bacbfba9) +* issue where incrementing user hash fields didn't use the right key name for remote announce @barisusakli (e84cfd8c) +* lint (b0eec67d) +* send back empty array if no direct replies, bug with reply generation (af6ae6ee) +* accidental passing-in of an array into getUserField, breaks in pgsql? (8e1fccf0) +* hardcoded tid in topic thumbs test (78a6c60c) +* tighten up logic in checkToPid internal method (f629b20f) +* partial revert to fix url_parsed not being available at top of file @barisusakli (8ecbb5cc) +* removal of topics from applicable user inboxes when synced (46341673) +* tweak logic for topic counters sorted sets, #12642 (0d549f1d) +* #12667; handle cases where received id is not a URL (d92efb8a) +* #12673 fullname not defined in some remote actors (f662a606) +* only send Update(Actor) to followers, #12674 (26946c7f) +* missing sorted set member removal on category unfollow (a748068c) +* add timestamp to follow activity to make it unique (eab231ee) +* additional logging for activities with no context property (cb5e5b4b) +* update handling of Announce(Create(Note)) to also handle non-note types (600b1a86) +* push instead of unshift, now that order is reversed (cc0bbcb7) +* wrong property name for OrderedCollection items (a2fb939b) +* improper sourceContent in mocks (615aaa01) +* #12662, add original activity actor to Announced activity's cc (d6f44d8e) +* remove duplicate 1b12 announce in notes.assert (already handled in inbox) (4dbb73a4) +* #12652, incorrect user, post, topic counters with AP enabled (fe70a2b8) +* incorrect activity id sent out on 1b12 announce (ef97a784) +* #12654, incorrect location of `sharedInbox` property (b66d998d) +* regression that caused new notes to have undefined cid and fail privilege check (a371c9fc) +* move call to retrieve cid followers out of loop (89dd2fb0) +* do not retrieve remote outbox count when asserting actor (16f8f536) +* double sanitization (d9ac7f49) +* dont load cid=-1 in tag filter dropdown (7d679db2) +* change setImmediate to a 5s timeout to give plugins (or anything waiting for the return value of the API call) a chance to finish execution (7fada44b) +* openapi spec for v3 posts get (4b86b378) +* wrap ap note creation in setImmediate to let internal hooks have a chance to wrap up first (a3c6c872) +* improper sanitization and parsing in mocks.note (59818031) +* remove parseInt on users controller (5a2fa52c) +* send additional @context entry for `publicKey` support, fixes #12604 (4eb998d5) +* null case handling (e6e6c2a2) +* category follow schema test (4b8a9e58) +* getCidByPid call returning improper values because a remote url to a local post was passed in (4030c09e) +* 1b12 conformance for inbox.create as well (c8bc6e55) +* re-add sending of Announce(Note) for microblog support, #12434 (89d2363d) +* FEP 1b12 conformance, federate Announce(Create(Note)) instead of Announce(Note), #12434 (be95b5b1) +* missing openapi schema change (e9a0d495) +* eliminate infinite loop in actors.assert via user.getUsersFields (18e58318) +* minor adjustment in logic to work around relation logic (1219d7d3) +* introduce artificial 5s delay for 1b12 announces (101062cb) +* move logic to move topic on note assertion earlier in the flow so it actually runs (acd1630b) +* post count (badb7e2c) +* skip follower count check if cid follower is found (f29214e0) +* don't crash process on error in cronjobs (89465ec6) +* handle missing fullname in actor removal logic (ae3fa85f) +* guard against infinite loop during topic purge batch call (6272d059) +* unintentional parseInt during post purge (bcfac00b) +* pid in api call (70625133) +* missing await on topic purge (6ecc791d) +* don't attempt user reset token cleaning if uid is not a number (8d790964) +* set (f83a3672) +* incorrect use of .map on a Set (c6f2155f) +* another crash (f8d9f644) +* closes #12618, handle missing selector (35eb2d0d) +* crash in mocks.profile (6f37825b) +* bug that stopped remote users with dashes in their handle from being properly asserted (76290e37) +* parse incoming HTML to remove useless classes too (47406d13) +* update post cache clearing logic to call helper function (547fc17d) +* have replies provide `name` when mocked (b6653d15) +* lint (f93b237e) +* remove .only (a0054400) +* minor cleanup (129017f7) +* Notes.delete to delete announcer zsets too (b5b89038) +* rename api.activitypub.create.post to .note() (2d7ca48d) +* canPurge logic fault (d40d0b06) +* allow remote content to skip isReady check on topic creation/reply (5bfde4c4) +* Topic.isOwner check to handle remote users (0a1ad87d) +* special handling for privsTopics.canPurge for remote posts (b67a7c3c) +* Posts.isMain cast pid to String instead (9fbd48b1) +* special logic for purge privilege checks (9f44e99f) +* unnecessary parseInt in post purge api method (eda97da1) +* type error in attachment emptying method (336ea1ee) +* tag notification if pid is not int (baada2fc) +* encode most uses of pid to avoid more bugs like #12545 (c973a9ca) +* allow quoting AP posts, fixes #12545 (43dfb60f) +* Update(Note) federation should only apply to local content (6f9fa660) +* attach announcers and their followers to cc, not to targets, only attach announcers to targets (51089a34) +* bump harmony (2cd9088c) +* inability to query local content via remote url (ac74d9c5) +* ensure consistent return type from notes.assert (a7aeabc8) +* remove unnecessary check and guard against unsupported URIs before fetching (af986758) +* handle retry queue invalidation across a cluster (22b42f11) +* use batch.processArray properly (729f0fca) +* if an unknown post is navigated to by a logged-in user, automatically assert the post and add it to their inbox (4e7b12b9) +* bump harmony (e341a5d8) +* bump composer-default (4e006adb) +* save followersUrl to remote user hashes (738d47c7) +* notifications for tag followers not being sent if author is a remote user (8de2352e) +* send topic title in context object (05cdb7d9) +* partOf and type (109f4232) +* if post count is less than posts per page, don't paginate in ordered collection (1a21c8ad) +* send id for category announces (0336e8f0) +* post deletion of remote posts (5e203197) +* update title generator to include the punctuation, and also take into account question marks and exclamation marks (6ac5a779) +* remove unneeded `flagged` property in favour of flagId, use existing language key for rescind-report (449ffd66) +* have category sync routes return full api response, openapi schema for that pair of routes (b7ad4317) +* update signature parsing logic to handle values with equal signs in them, closes #12538 (596a5e4b) +* unintentional object pollution by buildForSelectCategories (40b9dabd) +* better logic for choosing webfinger lookups (ed84eed8) +* don't look up webfinger when it's not necessary (dd71340a) +* update hasRelation condition to be true if cid is passed in in options (6964b1fd) +* handle requests to URI IDs correctly (1ecbf02a) +* handle URI actor IDs (70001664) +* percent-encode outgoing webfinger requests (3d1e2cde) +* bump harmony (59021d8a) +* icon:text and icon:bgColor for remote users (3721f819) +* handle Announce(Create(Note)) (a9a7fd1e) +* use system pseudo-user for topic move call (dce33446) +* if the topic already existed in -1, move it to another category if one was passed in options (49a64dc7) +* add back reverse lookup for notes assertion checking via cids (407dda78) +* actors.assert should return false if webfinger cannot resolve to an id (b7ff7be2) +* support reporting remote content in Flag (026449dc) +* #12505, convert relative urls in links and images into absolute urls, uses same logic as for emails (7c4ae8eb) +* #12502, improper decrement (6befff5e) +* send userslug in preferredUsername (64258dac) +* wrong variable name (50f31b23) +* change default attachment type to Link, or Image if mediaType matches (bb4e418d) +* save modified actor back to req.body (c3365908) +* you scurvy cur! (52271cae) +* handle (created) and (expires) in http signatures (4d23a837) +* #12496, url in schema (f7833386) +* handle remote userslugs with non-lowercase letters (f5ea470d) +* send hs2019 as algo (to match cavage-12, handle incoming algorithm value (8d0876b8) +* bump harmony (b8daa02f) +* throw errors when local objects don't exist (959e1820) +* #12493, send unescaped fullname through via AP if displayname is set/used (e0f542c9) +* send only the id into actors.assert (465a46f2) +* use a slightly better error code to indicate object resolution failure (c92b5e07) +* assume object is full object and not just id everywhere (e0166ccc) +* use resolved object in likes (962c6351) +* reject accepts of invalid follows and return when already following (b6168202) +* handle resolved objects in flag (41f77f8f) +* additional verbose logging for signature verification (464dd806) +* bump mentions (6b169e04) +* default to showing alternate as link to the post object (86107535) +* pid via index calculation (de83d6b0) +* support ldjson with ActivityStreams profile in actor queries (c30c1288) +* early return on invalid actor (2d1524ee) +* use actor id in flags (e25f0621) +* make sort work with world filters (cd8a91fe) +* uppercase digest algorithm name for compatibility reasons (5c1c1d21) +* better handle null return from notes.assert (cbfc8d25) +* bump mentions (86caf237) +* actor assertion logic to ignore loopback urls (f40df387) +* lol (983153fb) +* maybe last tweak (42bdffdc) +* tweak upgrade script again (ae146024) +* tweak upgrade script again (166e3e2f) +* add timeout on activitypub.get, tweak upgrade script (442e98e4) +* tests, save actor URL into userRemote hash (59709a3c) +* show locally captured remote posts when browsing remote profiles (1084f21d) +* have getCidsByPrivilege include cid -1 when set is categories:cid (e828e87e) +* updateLastOnlineTime for remote uids (893788a2) +* bump harmony (2cbc3913) +* adjust world schema (a3dce463) +* redirect to /api/world for API requests (495d5435) +* lint (f078e1e2) +* skip notes.assert checks for Announce(Note) if it's a remote object, do our own checks; #12442 (4fcd2bb2) +* getSortedTopics; filter out topics in cid -1 unless explicitly asked for (dff5d1c6) +* #12444 add uncategorized topics counted stats to separate sorted set (8dcdf8ef) +* undefined object in notes.assert (1fb3c4fd) +* typo (bab41d12) +* restore userOrGroupExists, as alias to slugTaken (e0f6b707) +* send handle as category actor's preferredUsername, #12434 (803975fd) +* use CategoryObject in admins-mods schema def (aafdefa7) +* only send activitypub+json links via webfinger if activitypub is global enabled (65bb8666) +* bump harmony (9c03e6e9) +* resolve interoperability issues with Misskey, et al. (003c6469) +* bump harmony (da2a1e20) +* issue where cid -1 appeared in all category searches (8f131b71) +* bump harmony (2756aae7) +* post urls to use prefix instead of linking out directly to origin server, exposed encodeURIComponent as a template helper for themes (2408ecd8) +* regression that caused S2S calls to topics to return with a 404 (5a2d17df) +* restore accidentally removed calls to updateLocalRecipients and saveAttachments (5f60f75f) +* properly handle empty fields param (c76d4018) +* circular object ref. (7af07151) +* tweak maxTags handling (ccd9c7ed) +* bump mentions (ff6cc90c) +* send topic notif on reply (1a92239c) +* typo (44a183dd) +* double-OP issue when remote reply comes in to local mainPid (0a2482cf) +* filter out system tags and prune extra tags beyond number allowed, when creating topic from remote data (7aa56c72) +* resolve toPid to local pid if able (ebd750b4) +* tweak user.search to better handle local usernames with colons in them (c346177b) +* accidental saving of ephemeral _activitypub object into db, should plumb into hooks only (81b319f4) +* handle actor assertion failure if mocked profile does not have a fullname (338c568c) +* template helper (52c143aa) +* tests (4b2495b5) +* remove unused param in addParentPosts (01f7af92) +* only dereference id if it doesn't exist locally — fewer calls (eb8ff75b) +* specify param for api test for /world (b1491ca3) +* AP S2S handling for /user/:userslug route (9cd6b496) +* handle fetch failures on helpers.query (5768a437) +* more duplicate detection in to/cc (ceab77e4) +* markAsRead to handle remote topics (17c55922) +* parse questions like a post (90e7d3a1) +* properly build recipients... old logic was just plain wrong :shipit: (1e663239) +* reallow topic:read privilege for fediverse group (97e5b0fd) +* only serve local posts via S2S when queried (00101d9e) +* note not federated out to mentioned users' inboxes (6423d514) +* update styling of available nav items in ACP (6aece689) +* remove unresolvable actors from parsing prior to mocking profile (39da3ab6) +* send explicitly empty array for attachment prop in mocks.note (4a8b06e8) +* remove some privs from fediverse in world category (6999bd68) +* inability to retrieve previously-unknown remote users via url manipulation (28f38b26) +* tags received via AP should only be of type Hashtag (as mentions are also in tag prop (81b81e54) +* data schema of reject activities (beaedc86) +* fallbacks for if preferredUsername is not set (9f8c706f) +* pass proper uid to privilege check in AP note federation (95427c4a) +* remove console logging (4c2cbb5b) +* move fallback 0 return in parseIntFields to other side of ternary conditional (5b74f6da) +* remove intFields hack and update db.parseIntFields to only parseInt if field value is a number (f368a1a8) +* truthy check in notes.assert (6671b511) +* remote user avatars in notifications (aef1215f) +* bump mentions (ae09aa20) +* properly handle if mainPid is not a number (1ca9994f) +* mainPid detection in unprocessed ids in assertTopic (b529610b) +* redir on bad world filter (0cf6af9b) +* serve fallback images on category actor (8cb984d4) +* bump markdown (44452a3b) +* missing invocation of generatePostUrl in generateRepliedTo helper (a08b2efb) +* unable to process Update(Person) (96a3a746) +* crash in resolveLocalId if Number is passed in (d51f5e59) +* missing await, and handle local posts with no toPid (i.e. reply to OP) (0b6b86d1) +* don't overwrite title if present, on assertTopic (a3368a69) +* bump markdown (b1894276) +* copy fixes, rename upgrade script, disable federation on upgrades (281e9d6e) +* update ap-related deps to prerelease versions (10abb82e) +* defer federation of new topics when topic is scheduled, tie activitypub api module to global enable toggle (5f85e700) +* lint (563db78f) +* put postcount retrieval behind try..catch so errors are handled appropriately (28370b10) +* side-effects from adding toPid to post intFields (now removed) (b0115951) +* revert introduction of toPid into post intFields, manually cast toPid as int in getPostSummaryByPids if present and numeric (3a870360) +* check origin only if object is a string (92a8951b) +* send string to validator (893dd523) +* regression re: attachment handling (53d1c10e) +* parseIntFields for tids (31fd135f) +* handle undo(Announce) of remote notes (cfbbf4ca) +* assert actors on note assertion, resolve crash if announcing something that's already been announced (6a7f8f14) +* don't crash when no attachment, oops (0edaf17c) +* sanitize post remote post content regardless (8b0ccc80) +* wrong id parsed in announce (068c4fa9) +* accidental overwrite of hoisted internal variable (56cfae07) +* include mainPid in topic counts calculation (5c04e805) +* guests visiting /world should see all remote topics (19d017b9) +* timestamp calculation (6a11c89b) +* better handling of missing of invalid to, cc, timestamp values (76d5feb7) +* remote announces not showing up in local inboxes (814c4794) +* handle inaccessible boosts (9439987e) +* remove invalid/inaccessible object from parent traversal chain on get error (672a907d) +* handle invalid score (609a9a37) +* mainPid accidental int (22da3a6a) +* getParentChain error handling (69f1ace3) +* take mainPid into account in syncUserInboxes (d13980c8) +* typo (de71b733) +* stringify error body in ap.send (401b4c5f) +* activitypub.get failure handling (12968b62) +* only log warning on ap.send failure (ce4b5679) +* rejig some tertiary conditionals, fix broken inReplyTo when toPid is not defined and mainPid is a remote post (5fee4e33) +* resolveLocalId to return null values instead of throwing for no resolution (11dba85d) +* don't crash on activitypub.send non-2xx, better logging for successful sends (ac56289f) +* replies to remote content overriding mainPid in topic (2b1a3477) +* assertTopic incorrectly creating new id if passed-in id did not match the actual object's id (f1b8f3fe) +* urls in posts and announces (4fb6574c) +* remove now unused world/:tid route and assoc. controller (a61e7fe7) +* cast cids passed in to getCategoriesFields as ints (aafdebd2) +* logic error (80377599) +* logic derp (9795abbf) +* new language source file for activitypub text (21a2876e) +* getUserInfo internal method in topic events to not filter out uids because getUsersFields already does it (f7259ccb) +* category following and acceptance logic (25f0d484) +* properly assert resources in AP router (d2f14c36) +* update preferredUsername in category actor to match webfinger representation (d213ce79) +* follower calls to return empty item list unless a page is explicitly passed in (94361721) +* move all actor object urls to immutable variants (86a607ce) +* send proper @context value for posts (was missing) (457bfe16) +* remote follows, yet again (fef18824) +* a bunch of broken things, added test for Create(Note) (a3a0edb7) +* error handling for actor.assert (fa1c5490) +* missing break statement (2c834263) +* reject spiders on remote profile GETs (a355c05d) +* send back correct actor id on webfinger calls (25434d2a) +* parseInt on timestamp from post (ddf17ee5) +* /uid/:uid route to return actor (0b3ca8e3) +* the id of an actor should be its immutable uri (/uid/:uid) and not userslug (e07c3131) +* unused require, tests (3c24cfb4) +* send full as:Image object for icon and image in mocked actor object (0af97dd4) +* clear post cache on Update(Note) (f51bbe91) +* webfinger loopback (1ee03f2b) +* revert home page routing change and moved instance actor endpoint to (e00a03bb) +* restore avatars in topic list (3bdaa8a8) +* send preferredUsername in application actor response (f8cfe64c) +* note assertion on Create(Note) and Update(Note) to use instance key instead of uid 1's user key (4cc7ee65) +* add workaround for nodejs/undici#1305 required to remove sec-fetch-mode header (2cb37088) +* response, not res (9e58b04c) +* automatically reject unsigned POSTs to inbox (a3e1a666) +* handle case where pubKey cannot be found (33f3da8a) +* user data in /world (518169fe) +* bookmark in topic data is nullable now (970a5a6e) +* saving teaserPid, timestamp, lastposttime in topic, fixed post index issue in loading topics (60bc27ec) +* preserve cid if set (e038eb05) +* incorrect author uid saved in topic (75654852) +* infinite scroll for posts (8cd3ff1a) +* reply expansion (5ac02765) +* issues related to adding new reply chains to an existing topic, resolveId method in notes module (2981f663) +* simplify increasePostCount logic by combining methods (81d81098) +* have mocks.posts return same number of items as received (d992239d) +* show full names for remote users (d1cdb8f8) +* improper params sent to get and getActor (9221506b) +* restore hostname prop in getActor method (ec3c6b67) +* ActivityPub.get now throws on failure, handle in getActor (7ec75f58) +* send in mocked profile data in follow routes as well (942a9b7e) +* tests (c66b1867) +* isUri helper so that it passes ci tests (27e256d2) +* frontend follow logic, as uid is no longer webfinger slug (fcca9259) +* use simpler getSortedSetRevRange instead of unnecessary zunion call (283e460a) +* accept and undo logic saving improper id into database, updated follow logic so remote follow is not added to collection until an accept is received (759d69e0) +* relax activity-failed condition (3339baac) +* additional refactors and updates to follow/unfollow logic (6a54e009) +* bug where body wasn't properly sent on ap-style content-types (ac344011) +* send actor uris in follow instead of webfinger ids (543daee8) +* some wip code regarding handling a follow activity, remove unfollow activity as that does not exist (f3b0794d) +* accidental double-hash in sign/verify (0eadad84) +* incorrect logic (71e3d26b) +* update proceedOnActivityPub middleware to handle how Mastodon doesn't send the 'Accepts' header (dd480aa4) +* another bad call to request lib (88527884) +* broken call to request lib, tests (8d796170) +* update isJSON test in request lib (510763af) +* handle null actor uri in helpers.query (a21110fd) +* unused require (7f46f07c) +* store remote followed users count separately from local (e794f1d2) +* icon text and bgColor in remote profiles (4324f09c) +* add basic sanity-checking to middleware.validateActivity (99cc60c8) +* incorrect host/hostname usage in well-known test (bcee1c8d) +* save remote follower count separately from local follower count (4218ecc4) +* missing req.body when parsing ActivityPub requests (e6753ce5) +* bugs, more prep to start making calls to self (5d95765e) +* moved .well-known assets to separate router file, added basic webfinger implementation (51d8f3b1) +* **deps:** + * update dependency ace-builds to v1.37.5 (#13058) (76a14de3) + * update dependency fs-extra to v11.3.0 (#13055) (9a401b5b) + * update dependency postcss to v8.5.1 (#13050) (3ba1d264) + * update dependency nodebb-plugin-web-push to v0.7.2 (#13049) (e9a4c42b) + * update dependency nodebb-plugin-2factor to v7.5.8 (#13048) (3827f438) + * update dependency sass to v1.83.4 (#13046) (8e62800b) + * update dependency postcss to v8.5.0 (#13044) (c4c89116) + * update dependency cron to v3.5.0 (#13042) (5e5d920b) + * pin dependencies (#12987) (430d1479) + * update dependency satori to ^0.12.0 (#12995) (05f7b58c) + * update dependency tough-cookie to v5.1.0 (#13039) (34b0cf6b) + * update fontsource monorepo to v5.1.1 (#13029) (b1e87aa9) + * update dependency fetch-cookie to v3.1.0 (#13006) (df69b399) + * update dependency ace-builds to v1.37.4 (#12988) (3a33cd5b) + * update dependency esbuild to v0.24.2 (#12989) (701780fe) + * update dependency sanitize-html to v2.14.0 (#12994) (bfc962b9) + * update dependency ioredis to v5.4.2 (#12993) (7943fcde) + * update dependency cron to v3.4.0 (#13026) (de571d24) + * update dependency sass to v1.83.1 (#13028) (438f4e0a) + * update dependency nodebb-widget-essentials to v7.0.32 (#13027) (de076a21) + * #12683 bump emoji plugin to v6 (e8fda4c0) + * swap ntfy for web-push plugin (aa060d31) + * persona v4 support (83993cad) + * bump markdown (daed7413) + +##### Other Changes + +* fix paranthesis (8fd8079a) +* remove unused utils (7e450e1d) +* remove unused function (26765fe9) +* remove unused (530241e0) +* comment out actor assertion call in Users.getUsersFields (691f6917) +* fix some but not all tests (76453650) +* fix privileges in test runner (aadac705) +* unused requires, linting fixes (3e02efcd) +* additional logging (08f8babd) +* fix eslint errors (47b3ffb9) + +##### Performance Improvements + +* ~18x speedup of /world route (f6f01ba3) +* get rid of exists call, load all attachments in one call (9b8c834e) +* use batch in resolveInboxes (644bcec5) +* get rid of getPidByIndex, use postAtIndex (ad22b54e) +* '-inf' faster (c95075e1) +* move attachments to post hash (291bf7db) + +##### Refactors + +* use helpers.log (40257663) +* add `thumbsOnly` option to thumbs retrieval method so that embeds/attachments don't show up in composer thumbnail modal (51fd65ab) +* split (and remove) activitypub.json file and move strings to more appropriate locations (e4e10636) +* topic thumb logic so that `isDraft` is based on topic existence, and not whether it is a UUID, as remote topics are also UUIDs. (3439fdb6) +* post object schema to its own reference object, added sourceContent as optional value in post data (3073abd9) +* prolly dont need exists check (a42c9a6b) +* buildTopicsSortedSet (c1093c92) +* expose buildRecipients as a main activitypub lib method, call buildReceipients in ap controller actors for notes (5e47b194) +* followers url filtering logic, #12834 (ca683c6d) +* check HTTP signatures on all activitypub requests (8ef0df57) +* simplified ajaxify.check and likely made it equally more confusing (cf6c4c52) +* split out logic to determine ajaxification into exported method (fc4f6a4c) +* standardization; onNewPost internal method to return a superset of post summary (9357e718) +* follow/accept/undo logic to pass the same timestamp throughout the follow's lifetime (e015339c) +* store local follow backreferences for remote users (both followers and following), update actor pruning to take local follow counts into consideration, fixes #12701 (39f92eac) +* collection logic out to an activitypub helper (352857cf) +* context item retrieval logic (20aee8e9) +* announces (c021e7e8) +* single db call (c231ab78) +* actor pruning logic (6227ab90) +* catch errors (f76a5863) +* add method from mentions into core (3eca9785) +* dont need exist check, if post doesnt exist getPostData returns null (b2d03da9) +* User.getUidsByUserslugs, so it works with multiple slugs (eb6fe339) +* suggest topics, use strings for tids (3488a4bf) +* unused winston (869df3c2) +* change to info (d1625d5f) +* remove verbose logs, (2ae58570) +* comment out verbose logs (ba2d1841) +* get rid of noop (eaf43541) +* single cache.del call (9868a728) +* #12553, buildRecipients so that it is separate from addressing in mocks.js (1fa93465) +* use batch.processArray for sending AP messages (ea6e15bf) +* context actor to serve an as:OrderedCollection instead of as:Page, and added context property (as per FEP-7888) to refer to it, changed audience to point to category (4b29a1b9) +* post announce logic to save to separate zset instead of to topic events, closes #12536 (119800d9) +* remove unnecessary flag routes added in 9ab1a2d (53b352d0) +* split activitypub tests to subfolder files (94eafe1d) +* use URLSearchParams instead of multiple encodeURIComponent (844d1402) +* stub routes for category synchronization, refactor remote follow logic to allow categories to conduct follows as well (59a9dd84) +* use a helper to resolve actor URI (b921f8d1) +* use getSortedSetUnion in syncUserInboxes instead (6c1a0fb1) +* use one internal rejection method (ac765f1e) +* use topics.post, topics.reply, and posts.edit in Create(Note), Create(Note), and Update(Note), respectively (f7c8967e) +* use topics.create internal method instead of directly setting topic hash, handle incoming tags for OP (f5a61079) +* assertTopic to only call setObject when it is a new topic (bdcd862c) +* resolveId method, add hostname verification (ed4ccbfc) +* use existing sets for topics (instead of topicRemote, etc.) (ec2b375a) +* activitypub sending to handle signed requests from categories (35819cc9) +* replace JIT actor retrieval with actor assertion and storage logic (ef8cd34b) +* added mocks.note in preparation for AP note retrieval logic, inReplyTo is always populated now, unless new topic (5de4f084) +* simplify remote (un)follow controller (c9feb925) +* guard dispatcher definition so non-Node runtimes won't have issues (2ce14f50) +* generate a topic id when asserting a new topic (2ff70fdd) +* move activitypub-related middlewares to their own file (538776f9) +* simplify mocks.post as it only needs minimal data for saving into db (2bd9e984) +* move mockProfile and mockPost to separate mocks.js (06e15834) +* update ActivityPub.get and all methods calling it to take a uid so that requests can be signed (a1c8c3a0) +* validator check to helper method (2e330d8b) +* move profile mocking logic to discrete method in main activitypub lib (8d4fd9c0) +* update ap libs to use core request lib (5c881d3f) +* update activitypub.getActor to accept either url or webfinger id (68d5e4a8) +* minor restructure to move logic out of main controller file to src/api (c803b212) +* acp tpl + config option (ab3ff320) + +##### Code Style Changes + +* remove unused variable (9f94653b) + +##### Tests + +* fix spec (b80f0dab) +* missing ; (866588f7) +* fix guest handles in onNewPost (81f7371a) +* have actor assertion always use cache for tests (ad05f06b) +* fix broken test in category follows (4949d6c4) +* add attachments (6042f4a7) +* refactor tests to support additional Note tests (0c0f01b5) +* use encoded parameters in webfinger tests (8fd4ae2d) +* fix well-known error code repsonse (175521ba) +* refactor AP tests (42a09241) +* fix tests (e138b915) +* fix tests to reflect new immutable IDs, and added new tests for resource retrieval (42bb3c33) +* fix error copy (91a509c4) +* allow http proto on ci (24c1dfac) +* fixed improper signed_string reconstruction in `.verify()` (cc0d1886) +* fix webfinger test (9dfa1b72) +* added passing test cases for .sign() and .verify() (a10df987) +* updated activitypub test suite (1c8e13bb) +* added test cases for activitypub integration, WIP (4bd8d28a) + #### v3.12.4 (2025-01-20) ##### Chores