nodeBB v1.17.0 Release Notes

Release Date: 2021-04-22 // 7 months ago
  • πŸ’₯ Breaking Changes
    • add additional flag hooks [breaking] (00a68a95)
    • 🚚 remove deprecated User.emailConfirm [breaking] (fb84c785)
    • 🚚 remove deprecated plugin hook filter:privileges:isUserAllowedTo [breaking] (5a775e09)
    • 🚚 remove deprecated plugin hook methods [breaking] (d41de481)
    • more removals of thumb specific backwards-compatibility [breaking] (cc0d562e)
    • πŸ— remove deprecated filter:admin/header.build hook [breaking] (5f9f241e)
    • πŸ’… remove deprecated v2 style responses for thumbs upload route [breaking] (84dfdfe6)
    • 🚚 remove deprecated getObject routes [breaking] (2ad0d0d0)
    • 🚚 remove 'filters' and 'categories' from flag details API return [breaking] (8b72479f)
    • filtering logic of flags [breaking] (1603566b)
    • feature flag for auto-resolving a user's flags on ban [breaking] (6b1c97db)
    • allow interstitial callbacks to be async functions [breaking] (280285cd)
    Chores
    • deps:
      • update dependency jsdom to v16.5.3 (0f249aa7)
      • update dependency eslint to v7.24.0 (60c0c16f)
      • update dependency husky to v6 (f155f326)
      • update commitlint monorepo to v12.1.1 (b4d01388)
      • update dependency jsdom to v16.5.2 (5e2e7a58)
      • update dependency eslint to v7.23.0 (d600cd94)
      • update dependency husky to v5.2.0 (77f551a4)
      • update dependency jsdom to v16.5.1 (28ed579b)
      • update dependency eslint to v7.22.0 (775c3b91)
      • update dependency mocha to v8.3.2 (3ce731d8)
      • update dependency jsdom to v16.5.0 (fd926d61)
      • update dependency mocha to v8.3.1 (651c629f)
      • update dependency husky to v5.1.3 (8791b44e)
      • update dependency husky to v5.1.2 (5f061b94)
      • update commitlint monorepo to v12 (42f7cd52)
      • update dependency eslint to v7.21.0 (59518437)
      • update dependency husky to v5.1.1 (2551295c)
      • update dependency husky to v5.1.0 (dc06fe22)
      • update dependency eslint to v7.20.0 (9ec0b2ed)
      • update dependency mocha to v8.3.0 (73f07958)
      • update dependency husky to v5 (d89ccf26)
      • update dependency lint-staged to v10.5.4 (030ecffa)
      • update dependency eslint to v7.19.0 (3696a199)
    • incrementing version number - v1.17.0-beta.5 (42c4f963)
    • fix indent (6406e527)
    • benchpress 2.4.1 (3403635c)
    • 🚚 remove log (a1ee1a2a)
    • incrementing version number - v1.17.0-beta.4 (91992240)
    • 0️⃣ bump composer-default (289bfc0b)
    • up themes (d14ba1f4)
    • 🚚 remove node 10 (8d3ec234)
    • 0️⃣ bump composer-default to 6.5.20 (33fbfdfe)
    • incrementing version number - v1.17.0-beta.3 (6e8b1bb9)
    • add multiparty dep (ef3ec96a)
    • incrementing version number - v1.17.0-beta.2 (0c1945dc)
    • incrementing version number - v1.17.0-beta.1 (31872aac)
    • bump composer (30954789)
    • bump deps (#9335) (b9fd2c87)
    • incrementing version number - v1.17.0-beta.0 (b61257ef)
    • incrementing version number - v1.16.3-beta.0 (477157cc)
    • 🌲 extra console.log (1ae8dda8)
    • up composer (1c9acef6)
    • πŸ‘• eslint max-len (cc9d6fd0)
    • πŸ‘• eslint no-restricted-syntax (5c2f0f05)
    • πŸ‘• eslint prefer-rest-params, prefer-spread (115d19e2)
    • πŸ‘• eslint prefer-destructuring (23f212a4)
    • πŸ‘• eslint object-curly-newline (8d1462ff)
    • πŸ‘• eslint function-paren-newline (62869bae)
    • πŸ‘• eslint no-var, vars-on-top (dab3b235)
    • πŸ‘• eslint prefer-arrow-callback (b56d9e12)
    • πŸ‘• eslint prefer-template (707b55b6)
    • πŸ‘• eslint import/newline-after-import (4ee0f145)
    • πŸ‘• eslint no-script-url (9f6a682c)
    • πŸ‘• eslint no-bitwise (dad01e30)
    • πŸ’… eslint rules matching existing styles (58528d1a)
    • fallbacks (74be1a59)
    • πŸ—„ deprecation notices for plugins using plugin old hook methods (3052256d)
    • πŸ—„ add deprecation notice in comments for ajaxify.loadExtraScripts (8b09292e)
    • incrementing version number - v1.16.2 (ea7f8381)
    • ⚑️ update changelog for v1.16.2 (d3883d4b)
    πŸ“š Documentation Changes
    • πŸ›  fixed typo (e7550673)
    • added comment re: #9305 (65c57c73)
    • ⚑️ update deprecation-removal version for plugin hook helper methods in 1.18.0 (15ba0abb)
    πŸ†• New Features
    • lang strings (9b71b087)
    • rate limit file uploads (a9978fcf)
    • filter flags by username #8489 (#9451) (8faa6e45)
    • πŸ”’ roll session identifier on login, as security best practice (697ed3bf)
    • allow different slugs (4494728c)
    • 🚚 remove sort again (fd3bc605)
    • ⚑️ update hook (f65d2162)
    • add reverse of recent to getSortedTopics (05f22361)
    • allow exists methods to work with arrays and single id (285aa365)
    • pass all data to filter:category.get (d16b45fd)
    • add action:posts.loaded (dbb59228)
    • ⏱ rescheduling (editing ST) (#9445) (aa0137b1)
    • ⬆️ upgrade sharp (#9442) (f7f46e7c)
    • optional urlMethod param for loginStrategies (9e1f72a4)
    • add hooks to language loading (#9426) (344575dd)
    • doggy.gif (b06f0ea2)
    • allow adding sorted-list items from forms outside of modal (a3e95e79)
    • ⏱ scheduled topics (#9399) (077330b7)
    • show link if category is a link (a94d9651)
    • make info page full width (dd12c83f)
    • allow optional fields argument on db.getObject(s) (#9385) (4327a09d)
    • closes #9380, add category filtering and topic tools to tag page (668508cc)
    • πŸ”€ allow sync function (#9379) (34b9aaed)
    • allow filter functions that return promises or the data directly (e6c52cf2)
    • add resolve flag to post tools (52082e12)
    • βͺ hide revert button in ACP > Privileges until privileges change (4cbd13fd)
    • ⏱ bring back static hook timeout (46270f9f)
    • ⬆️ upgrade connect-mongo, closes https://github.com/NodeBB/NodeBB/pull/9367 (3c60ccfd)
    • pass interstital errors to individual partials as well as to registerComplete (f71cb0e4)
    • πŸ”Œ add filter:plugins.firehook (5eb3132d)
    • 0️⃣ copy default favicon if it doesn't exist (754283d3)
    • 🌐 add missing translation keys (17184bfa)
    • allow missing (or non-array) middlewares argument in route helper methods (4b545085)
    • pass modified params, only affects filter hooks (e74df539)
    • add back topic id input (696c4895)
    • expose username validation logic to user lib, new hook filter:username.check (bfd512b9)
    • add $.deserialize to client side (e5133a78)
    • allow for settings.save/settings.load on client side (66196d2c)
    • 🚚 remove promise-pollyfil (902a88c2)
    • category privilege API routes (c1b3079d)
    • ⚑️ change uploadCroppedPicture to use updateProfile as well (0af9d26f)
    • ⚑️ use updateProfile for picture change (a598abcd)
    • βœ… allow payload to be passed to emailer test method (1155b0c4)
    • add uid of user who created flag to action:flags.create (069ac60f)
    • πŸ”Œ new client-side hook filter:api.options to allow plugins to modify api requests (7d391d47)
    • keep notifs for one month, load 50 notifications instead of 30 (02f08111)
    • also pass in uid to filter:email.prepare (86b0c57d)
    • new hook filter:email.prepare (27ea3dcb)
    • new hook static:email.send (bf90d158)
    • ⬆️ show time info for upgrade scripts (14a6c349)
    • add dashboard sub-pages to ACP menu (73dc64d9)
    • recent logins sessions table in dashbaord subpage (2f89b0d7)
    • topics dashboard details subpage (e1ed514b)
    • ⚑️ update user list in dashboard/users on graph update (c57c7703)
    • show list of recent users in dashboard/users (cc938224)
    • πŸ“œ req.query parsing and dynamically loading data instead (6fdcae73)
    • new hooks for notifications get/getCount (079a13d4)
    • allow hook unregistration, and temporary page-based hooks (d0136074)
    • πŸ“ˆ report login statistics from analytics data, instead of its own zset (16d3c457)
    • track login sessions for admin dashboard reporting (9a9f366d)
    • πŸ“ˆ track successful logins in analytics (504fd107)
    • pass user picture object into change_picture_modal (c96fd3b1)
    • add logout to invalid session (beb14273)
    • βœ… category search test (a592ebd1)
    • pass post object to filter:post.tools (ed3d9dcb)
    • allow defining a list of system tags (0e07f3c9)
    • βœ… add category search test, #9307 (bbaaead0)
    • add tag filter to getSortedTopics (9ce6f8ad)
    • ability to re-order topic thumbnails (7223074f)
    • add close button to topic thumbnail modal (db027170)
    • #9304, add category/topic/username to post queue notification emails (0738dae8)
    • βœ… add failing test for list append/prepend with list (#9303) (8f0386d9)
    • link to post-queue from topic event (a4b4a556)
    • post-queue topic event (8fd78ce5)
    • add post-queue cache (3f35fd33)
    • newsletter opt-in/out in UCP, closes #21 (3c7cd9a6)
    • load user posts/topics via xhr on infinitescroll (35954734)
    • #9294, put new categories at top (4b2bf12f)
    • add invalid event name to error message (670cde78)
    • new notifications load/loaded hooks on client side (7edc8f45)
    • πŸ— pass req.session into buildReqObject (a6fa351b)
    • new hook action:login.continue (4f976390)
    • banned-users group (53e0d4d2)
    • #9109, ability to delete a post's diffs (eb642f40)
    • add .delete() method to api module (501441b7)
    • doc add description (cc560ca3)
    • add doc for query param (ed11e171)
    • #9234, add pagination to /api/recent/posts/:term? (fffdc4e0)
    • allow sorted-lists on multiple pages (d5d24594)
    • #9232, add profile picture into exported zip (f6cd2862)
    • πŸ—„ new hook filter:login.override, deprecate action:auth.overrideLogin (b820d234)
    • πŸ”’ guard password fields in login/register against accidental caps lock (4bb3b032)
    • ability to search categories, #8813 (34c42c6f)
    • βͺ restore action:script.load, allow modifying loaded module via static:script.init (05be1c66)
    • async/await redis connection (fdfbc902)
    • async/await psql connection (33bf1b0e)
    • add group name to csv event (672959c1)
    • πŸ‘‰ user: icon background selector in change picture modal (95502124)
    • remountable-routes:
      • allow category and account routes to be remounted (9021f071)
      • allow /admin and /post to be remountable (f01af62b)
    • topic-events:
      • topic events GET route in write API (dc84559d)
      • server-side tests for topic events (449c379d)
      • clear out topic events when a topic is purged (0d4a3775)
      • client-side handling on topic event log (8e93bf73)
      • handle newest_to_oldest sort in topic events, WIP (882e6a15)
      • generic css for timeline-event (2293a07a)
      • support for uids in topic event payloads (611d1f87)
      • work in progress topic events logic and client-side implementation (ab2e1ecb)
    • hooks:
      • update action:ajaxify.end to use new hooks module (1d775721)
      • client-side hooks module (01c9b184)
    πŸ› Bug Fixes
    • ⏱ regress. rescheduling shouldn't add to sets that pinning removed… (#9477) (8b79c7f1)
    • logic is hard (4dd38446)
    • run in series (bc0ca61c)
    • wrong variable for cache (2e9efc0e)
    • accidentally committed this (13fa983e)
    • βœ… tests (eb240c90)
    • πŸ‘• eslint (fa0c92a7)
    • use req.ip instead, since guests can upload as well (ea22cd30)
    • #9492, keep query params on redirect (36f119a9)
    • stripTags for editing sorted list items as well (93598982)
    • #9487, session data gathered during a session is lost upon login (1fee6a70)
    • βœ… failure on session reroll 🍣 test (f4c5050a)
    • registration interstitials not handling promise rejections properly (e845c34b)
    • stripHTMLTags for sorted list entries (75073c0e)
    • βͺ restore original behavior for up/downvoting when logged out (e50408b4)
    • let recent replies respect oldest/newest sort settings (60eed8d8)
    • #9483, fix events count display (6907837f)
    • escape flag reason (161081e9)
    • πŸ”Œ copy change on plugin activate to instruct admins to rebuild as well as restart (95d5359c)
    • ⚑️ updateCategoryTagsCount (2dc3283f)
    • #9473 (#9476) (036f935f)
    • #9474, load hooks on page load (1af34b43)
    • spec (d09cdc04)
    • 🚧 #9466, don't call leaveRoom in maintenance mode (f32ea173)
    • exempt ST from being del/res via last main posts (#9468) (a0dd9080)
    • 0️⃣ #9462, on install copy default favicon (784600d9)
    • #9463 (c5ae8a70)
    • #9465 (4041e786)
    • #9450 express session saved even if saveUninitialized explicitly passed in (9c52fd2e)
    • acp crash (cb53a64c)
    • #9447, include query params in previousUrl (536591f8)
    • ⚑️ thumb count not updated when uploading multiple thumbs at a time (1ad1787e)
    • change email button stays disabled if user submitted an invalid email (01f63e5d)
    • use app.logout() to clear session after deleting user (cfdef77b)
    • ./nodebb help with [email protected] (#9434) (2a03012e)
    • hide titleRaw for deleted topics as well (edf80cfb)
    • #9410, fix post queue (c5dda64f)
    • privilege tables (9052db93)
    • #9420, paginate after loading notifications (67b09cba)
    • hooks for alert animate, no more fadein/fadeout for reconnect alert (d9e20290)
    • #9414, use posts:view_deleted (e42b152f)
    • preserve order when changing parent (2ceda70a)
    • #9411 (3c4e93a3)
    • #9412 (cef58d1d)
    • ⚑️ #9406, update flag post tools (93c595d9)
    • typo in switch..case (d8ff9851)
    • #9404, show signatures if the target user has signature privilege (801570e4)
    • selector (ee69c1f8)
    • sorting when filtering by uid (75553b24)
    • allow local (and overridden) login strategies to pass Error objects back (98b72ca5)
    • category search not using uid (6aa60b63)
    • inf scroll with subfolder install (262e059f)
    • flicker on dashboard (2041b808)
    • #9398, crash on post flag (90d64fe1)
    • #9395, pass all data from client to Topics.reply (#9396) (a8f7b244)
    • πŸ‘• lint (4ac38ab2)
    • #9394, fix guest handles (eb360351)
    • #9387, don't try to load undefined images (03e30634)
    • #9389, allow admins to add themselves to private groups (5c59354c)
    • 🌐 #9386, add missing translation string (482641e3)
    • #9383, don't show deleted topic titles in inf scroll (e789fe8d)
    • #9378, crash on verifyToken if API Token settings not saved (null case error) (cc489708)
    • closes #9382, fix digest topic links (35700d16)
    • spec (1e1127bd)
    • regression from filter hook change (53f67ff3)
    • crash if unreadTopics is undefined (617f4730)
    • dont crash if login el doesnt exist (f45c0aab)
    • regression via c1b3079d93fb4c49ba62a4be5279b7bff8e5a54d (2a939aad)
    • ⚑️ change notification updateCount to use client-side hooks (84725130)
    • βœ… tests (39b0e0fb)
    • #9370, show correct teaser index if sorting is newest to oldest (9382fc6d)
    • don't copy if src doesn't exist (ebccc794)
    • #9362 best not to check file exists on every page load; copying favicon to uploads/system folder instead (771a8955)
    • #9362 (ad565495)
    • regression where login redirect for admin routes didn't go to local=1 (678e8f0f)
    • πŸ‘• lint (f4f61b92)
    • if no in passed use "titles" to match header search (e787e6ea)
    • add back middleware.authenticateOrGuest (166d65a1)
    • request authentication called twice in account routes (e3b2c00d)
    • #9354, don't close quicksearch results if mouse is down on them (8a4c361e)
    • 🌲 #9339, only log email errors once per digest, notification push (3aa26c4d)
    • winston.info (3f42d40c)
    • #9351 bad logic when inserting rows to privilege tables, also a missing tfoot :foot: (c5e25788)
    • πŸ“œ app.parseAndTranslate to always return promise (c2650169)
    • bug where fallback window trigger was not firing if there were no hook listeners attached (1e579428)
    • bad assignment (c8b78654)
    • #9348 incorrect redirect via connect-ensure-login (fbe9215b)
    • bug where loginSeconds setting was ignored for local login (f806befd)
    • 🚚 remove old dep (b58bacaf)
    • notif pruning (2737f653)
    • βœ… notification prune test (ca817631)
    • user icon text overflow in some cases (2b7d0b5a)
    • use components for toggleNavbar instead (114e3a1e)
    • allow interstitial callbacks to be functional (no cb required) (9bf94ad5)
    • don't publish before pubClient is connected (cdf5d18f)
    • 🚚 remove unused async (48f1e265)
    • πŸ— in setupPageRoute helper, buildHeader after plugin hooks have fired (984c9dd9)
    • ⚑️ timeago missing on table update (655e2c67)
    • wrong qs param, allow string to be passed to util.getDaysArray (f8e1a74c)
    • wrong call to sortedSetAdd (dbe5f702)
    • session not persisting to database in some scenarios (020f0b83)
    • allow hidden inputs in user settings page (beaac0a1)
    • πŸ— use root context if buildAvatar context is undefined (b4c0b32b)
    • use bootbox module (fa91525a)
    • #9307, use _.flatten (25c8f026)
    • πŸ”Œ awaiting res.render in send404 controller > > A plugin wanted to use response:rotuer.page to 404 a specific page on some condition. res.render returns early in send404 and so must be awaited otherwise multiple responses will be sent (2fef4627)
    • do not overwrite config.port from URL, if it's already set (34096b73)
    • switch back to getSortedSetRange (8686fbfa)
    • settings v3 (91734a64)
    • βœ… another topic thumb test fix (782bef5e)
    • βœ… thumbs.associate logic fix + tests (7ebb6d30)
    • βœ… missing awaits, possible test fix (7665adf7)
    • #9301, dont call sitemapstream if there are no entries in categories/pages/topics.xml (9a6cf3d9)
    • properly incase its the same path (807b0d43)
    • numThumbs count on associate (76bcc0c9)
    • missing cache deletion calls for post-queue cache (1490b32d)
    • 🚚 use of removed URL to get post data (36e8d251)
    • init topic events from webserver.js (b81508c4)
    • check null topics (b753c69c)
    • guard against null topics (58cd797e)
    • βœ… tests, new categories go to top now (fc90f32e)
    • πŸ“œ #9292, messageobj.content already parsed (c953b1b3)
    • clear category cache on copy parent (765db86d)
    • delete category cache key on category create (ed3e9ce2)
    • typo (c61cc37b)
    • 🌲 wait for event.log to finish before killing process (a5fa212f)
    • βœ… tests, only generate csrf_token on 404 gets (b6493f89)
    • #9287, generate csrf_token on 404 (94f72d60)
    • do not blindly escape a notification's bodyLong (783786cf)
    • pass jquery object in to action:notifications.loaded hook (16610b2d)
    • #9275, (0cca6893)
    • don't use global bootbox obj (cfa0d423)
    • 🚚 remove console.log (550cd995)
    • 🚚 move service worker back to relative_path/service-worker.js (fca17cb7)
    • spec (ab0ef442)
    • markread selector (a4878a5b)
    • position when scrolling up (3090a2ae)
    • cache key collision (e40af441)
    • βœ… tests breakage due to 67e3fb64981fe2310b17515e1f18c32021a5e983 (5c21c33e)
    • register returnTo logic to match login route (67e3fb64)
    • βœ… tests (492cbc62)
    • πŸ”€ posts.uploads.sync dissociates uploaded thumbs of the main pid (f79aeef8)
    • ⚑️ update grammar on unban text (68da1c55)
    • privileges page - tweak icon position and width, group name wrapping (c729adeb)
    • πŸ”Œ autofocus on search field in ACP > Manage > Plugins (4af9c2fc)
    • βœ… openapi test specs (cabec378)
    • include admins (7c9674de)
    • include admins, limit to category mods, correct privilege name (eaf9d2e4)
    • βœ… http 200 test for api routes (bd583963)
    • invalid API call when unfollowing a user (58655e9a)
    • example (833c73e8)
    • πŸ‘· #9127, scope service worker to relative_path for the forum (#9239) (2bc74cff)
    • ⚑️ update docs (4c12e0aa)
    • βœ… broken test after sorted-lists logic change (d6f60f45)
    • clear all locks on restart (9834f72f)
    • action:admin.settingsLoaded to use new hooks lib (5131eb6b)
    • crash on firing action hook that had no listeners registered (b0f5d5a5)
    • bug where action:settings.sorted-list.loaded fired early (1a04ec64)
    • regression where filter:settings.set no longer received sorted-lists (a8be6fb8)
    • #9231, fix redis pubsub connection (5bc1f5b4)
    • don't translate message on every ajaxify (a29dd21d)
    • βœ… tests (05c53394)
    • improper override of req.body.username in login logic (74199220)
    • full settings hash not passed through to action:settings.set (473d5f4a)
    • #9223, don't overwrite stmp settings (a5bf9779)
    • multiple sorted-lists do not save to the correct set (4029ec37)
    • pass module name to static:script.init, +comments (f8bf9e99)
    • ⚑️ handle delete and update for categories:name zset (e8429f50)
    • 🚚 tests remove old routes (faeb6373)
    • 🚚 removed object routes (d41ce873)
    • 🚚 removed methods (647d3ba8)
    • incorrect return for Thumbs.get() if thumbs were disabled (7b090c58)
    • script failure if client-side page script does not exist (7da1b43f)
    • bug where action:ajaxify.end was never called if there were no init scripts (faf59603)
    • ⚑️ update js concatenation logic to bundle scripts.rjs into minfile regardless of build environment (8ff07bc1)
    • πŸ”§ #7125, allow list for page route, configurable via plugin hook (f975063b)
    • error on flag list if no flag filters were saved in session (942d9247)
    • mod cid filter accidentally saved in session (35c92d0c)
    • βœ… more tests for #9217 (ce7c74b2)
    • βœ… tests for #9217 (f2a5cd0b)
    • missing return for #9217 (27cae0d5)
    • #9217, render 400 error page on bad access to /register (b2b1450e)
    • βœ… redis check compat tests (78896fc6)
    • registration completion overriding returnTo if it was already set (a186ea0f)
    • add missing user delete event types (5c1b7429)
    • missing option for user-deleteAccount on ACP Events page (1c420602)
    • deps:
      • update dependency html-to-text to v7.1.1 (427e4f47)
      • update dependency redis to v3.1.2 (35a4d0be)
      • update dependency validator to v13.6.0 (e3d5d8d7)
      • update dependency nodebb-plugin-composer-default to v6.5.27 (1b846271)
      • update dependency redis to v3.1.1 (286a63e3)
      • update dependency nodebb-theme-persona to v11.0.17 (51d58ce6)
      • update dependency nodebb-theme-vanilla to v12.0.7 (16a1ba57)
      • update dependency postcss to v8.2.10 (31cec2de)
      • update dependency nodebb-plugin-mentions to v2.13.9 (fe087806)
      • update dependency mongodb to v3.6.6 (#9467) (4264b236)
      • update dependency sharp to v0.28.1 (34cbc9e2)
      • update dependency nodebb-theme-persona to v11.0.16 (a8330b6d)
      • update dependency nodebb-theme-vanilla to v12.0.6 (c02310b8)
      • update dependency nodebb-theme-persona to v11.0.15 (316c71d7)
      • update socket.io packages to v4.0.1 (e7776f8d)
      • update dependency redis to v3.1.0 (fd9ff334)
      • update dependency nodebb-plugin-composer-default to v6.5.26 (#9446) (8d9afbc6)
      • update dependency postcss to v8.2.9 (6f51c460)
      • update dependency nodebb-theme-persona to v11.0.14 (#9443) (fecfcd81)
      • update dependency nodebb-theme-persona to v11.0.13 (#9437) (e5cc6e40)
      • update dependency nodebb-theme-slick to v1.4.6 (dfdb0050)
      • update dependency nodebb-theme-persona to v11.0.11 (27de58f2)
      • update dependency benchpressjs to v2.4.3 (382f75bc)
      • update dependency nodebb-plugin-composer-default to v6.5.25 (24236718)
      • update dependency nodebb-theme-vanilla to v12.0.5 (89973d80)
      • update dependency nodebb-plugin-composer-default to v6.5.24 (dec34446)
      • update dependency nodebb-theme-persona to v11.0.10 (f78b4ba6)
      • update dependency nodebb-plugin-composer-default to v6.5.23 (#9422) (e35d0741)
      • update dependency nodebb-theme-persona to v11.0.8 (124cb9d9)
      • update dependency benchpressjs to v2.4.2 (1dddcb49)
      • update dependency nodebb-plugin-mentions to v2.13.8 (d511216c)
      • update dependency connect-mongo to v4.4.1 (29ff5bb9)
      • update dependency nodebb-theme-persona to v11.0.7 (c5734063)
      • update dependency nodebb-theme-vanilla to v12.0.4 (#9409) (870e6c2c)
      • update dependency nodebb-theme-slick to v1.4.5 (#9408) (24be8642)
      • update dependency nodebb-theme-persona to v11.0.6 (#9407) (b50739c1)
      • update dependency nodebb-plugin-spam-be-gone to v0.7.9 (#9405) (9359cae9)
      • update dependency nodebb-theme-persona to v11.0.5 (47b2b97f)
      • update dependency nodebb-plugin-composer-default to v6.5.21 (#9401) (2f70ac5a)
      • update dependency mongodb to v3.6.5 (fcd887fd)
      • update dependency nodebb-plugin-composer-default to v6.5.19 (#9391) (1631f159)
      • update dependency nodebb-plugin-composer-default to v6.5.17 (#9384) (8d401760)
      • update dependency nodebb-theme-persona to v11.0.3 (27facadb)
      • update dependency socket.io-redis to v6.1.0 (adaddde6)
      • update dependency nodebb-plugin-composer-default to v6.5.16 (a98e92b4)
      • update dependency nodebb-plugin-markdown to v8.12.7 (#9371) (56b0bfd5)
      • update dependency nodebb-theme-vanilla to v12.0.2 (#9369) (8923d34c)
      • update dependency nodebb-theme-persona to v11.0.2 (#9368) (fa71c483)
      • update socket.io packages to v4 (#9363) (13f3c504)
      • update dependency postcss to v8.2.8 (680cf5ef)
      • update dependency nodebb-theme-persona to v10.5.17 (2645bf55)
      • update dependency connect-mongo to v4.3.1 (59459074)
      • update dependency connect-mongo to v4.3.0 (f388086a)
      • update dependency autoprefixer to v10.2.5 (4f4cdacc)
      • update dependency postcss to v8.2.7 (72db3754)
      • update dependency nodebb-plugin-composer-default to v6.5.13 (017af7cb)
      • update dependency jquery to v3.6.0 (dd6082a0)
      • update dependency connect-mongo to v4.2.2 (ec0912cc)
      • update dependency nodebb-plugin-spam-be-gone to v0.7.8 (#9337) (536bae70)
      • update dependency nodebb-plugin-composer-default to v6.5.12 (2674de01)
      • update socket.io packages to v3.1.2 (510eb1f9)
      • update dependency nodebb-theme-persona to v10.5.16 (217d3afd)
      • update dependency nodebb-plugin-emoji-android to v2.0.5 (e8209341)
      • update dependency sharp to v0.27.2 (c5231f10)
      • update dependency nodebb-theme-vanilla to v11.4.5 (8596dcc4)
      • update dependency nodebb-theme-persona to v10.5.15 (753ab0a0)
      • update dependency nodebb-theme-persona to v10.5.14 (ed503b80)
      • update dependency nodebb-theme-persona to v10.5.12 (ddd8fa31)
      • update dependency benchpressjs to v2.4.1 (4ee3a8e8)
      • update dependency nodebb-theme-persona to v10.5.10 (7f8fd4b0)
      • update dependency nodebb-theme-persona to v10.5.9 (5dd748c6)
      • require xregexp 5.0.1 (86e911ba)
      • update dependency xregexp to v5 (513cd1c3)
      • update dependency nodebb-theme-persona to v10.5.8 (54b4dc1d)
      • update dependency postcss to v8.2.6 (4d92af5a)
      • update dependency nodebb-theme-persona to v10.5.7 (#9288) (c2459fd5)
      • update dependency nodebb-plugin-composer-default to v6.5.10 (b312725f)
      • update dependency nodebb-theme-persona to v10.5.6 (4599144f)
      • update dependency nodebb-widget-essentials to v5.0.3 (#9284) (eb9f058f)
      • update dependency nodebb-plugin-composer-default to v6.5.9 (6e14014b)
      • update dependency nodebb-plugin-composer-default to v6.5.8 (674a31d1)
      • update dependency nodebb-theme-slick to v1.4.3 (#9278) (d3923585)
      • update dependency nodebb-theme-vanilla to v11.4.4 (#9279) (1f28e8c3)
      • update dependency nodebb-theme-persona to v10.5.5 (#9277) (a7b46adc)
      • update dependency connect-redis to v5.1.0 (#9276) (83a0b6b8)
      • update dependency nodebb-theme-persona to v10.5.4 (#9270) (dc145284)
      • update dependency nodebb-theme-vanilla to v11.4.3 (#9272) (2fda6774)
      • update dependency nodebb-theme-slick to v1.4.2 (2b12905d)
      • update dependency nodebb-theme-lavender to v5.2.1 (fb2f1143)
      • update dependency nodebb-theme-slick to v1.4.1 (#9262) (2cfab367)
      • update socket.io packages to v3.1.1 (#9253) (2147d386)
      • update dependency postcss to v8.2.5 (1fa0d4f4)
      • update dependency nodebb-plugin-emoji-android to v2.0.1 (42e365d9)
      • update dependency nodebb-plugin-markdown to v8.12.6 (4fd6027b)
      • update dependency nodebb-plugin-mentions to v2.13.7 (8a2fe3d9)
      • update dependency nodebb-theme-vanilla to v11.4.2 (2326e9a6)
      • update dependency nodebb-theme-persona to v10.5.3 (9245ffaf)
      • update dependency nodebb-plugin-dbsearch to v4.2.0 (389690c3)
      • update dependency nodebb-plugin-composer-default to v6.5.7 (13e12c95)
      • update dependency json2csv to v5.0.6 (0aa8e03f)
      • bump theme deps for #9244 (44019e28)
      • update dependency mongodb to v3.6.4 (56e4e56b)
      • update dependency nodebb-theme-persona to v10.5.1 (04411449)
      • update dependency nodebb-theme-vanilla to v11.4.0 (#9238) (897d29ec)
      • update dependency nodebb-theme-slick to v1.4.0 (#9237) (8e2deab4)
      • update dependency nodebb-theme-persona to v10.5.0 (#9236) (4f842a79)
      • update dependency nodebb-theme-lavender to v5.2.0 (47fd1634)
      • update dependency nodebb-plugin-dbsearch to v4.1.3 (1e10ebfb)
      • update dependency nodebb-plugin-composer-default to v6.5.6 (0e2b329b)
      • update dependency autoprefixer to v10.2.4 (6c3b1fde)
      • update dependency nodebb-plugin-markdown to v8.12.5 (05901fcd)
      • update dependency nodebb-theme-persona to v10.4.1 (a9b3fb37)
      • update dependency sharp to v0.27.1 (a90773a6)
      • bump persona to get timeline style (ca14c0e2)
      • update dependency postcss to v8.2.4 (5b2f0be0)
      • update dependency autoprefixer to v10.2.3 (d99cb1cf)
      • update dependency postcss-clean to v1.2.0 (4232d97b)
    • #9315: api v3 post, put, del JSON (0d59fe3d)
    • remountable-routes:
      • more fixes to remountable routes (9d17f397)
      • bug with user routes remounting to itself (bc68e990)
    • #9252: pass site domain to nodemailer (#9254) (5e5d37c3)
    • topic-events:
      • topicEvents.init() test (aa8b84bb)
      • repeated invocations of Posts.addTopicEvents caused dupes to be added to DOM (df2fdd56)
    • hooks:
      • bug where hook firing would fail if there were no listeners (efff8e2a)
      • fallback handling for core invocations of hooks.fire (412d2858)
    Other Changes
    • πŸ“„ schema docs for new ACP dashboard subpage routes (0804d547)
    🐎 Performance Improvements
    • increase batch size for notifs, run parallel (728ac5ff)
    • ⬆️ faster category tags upgrade script (0dad568c)
    • use setObjectBulk (95033ef7)
    • ⬆️ make upgrade script faster (a07509f7)
    • ⬆️ make upgrade script faster (0959b124)
    • cache base_url (cf4002bc)
    • single call to get digest topics, dont send duplicate topics (5ce28207)
    • single db call to add all uids (90d5c9da)
    • make digests a little bit faster (0185ea1b)
    • only load thumbs for topics that actually have thumbs (7eebcbdb)
    ♻️ Refactors
    • make debug handler async (1db8920b)
    • widgets (#9471) (397baf02)
    • πŸ’… style, no need to convert length to string (d00268c9)
    • πŸ—„ deprecate action:script.load, use filter:script.load instead (d1685600)
    • 🚚 remove uncessary check (f316c4d4)
    • 🚚 remove async.each/reduce from hooks for better stack traces (d05d7091)
    • use hooks.fire (0d3979ef)
    • fix variable name (1982edfd)
    • account edit logic and template, closes #9364 (98bf4064)
    • automatically authenticate all requests setup through route helpers (#9357) (7da061f0)
    • βœ… async listen testSocket (0021c601)
    • 🚚 remove startsWith/endsWith (48bc23c0)
    • πŸ“œ app.parseAndTranslate to return promise if no callback passed (b5a6a314)
    • privileges, export modules directly (#9325) (293b7c26)
    • ⚑️ have Graph.init and Graph.update return promises (3fa2e3ce)
    • πŸ“ˆ abstract out some client side dashboard code into modules, analytics subpages for users, topics, and logins (f561799f)
    • 🚚 move picture change client-side logic to its own rjs module (28f6931e)
    • 🚚 remove dupe code (5286f208)
    • thumbs.associate accepts both relative path and url in path arg (3e6640ef)
    • 🚚 move post queue retrival code to posts.getQueuedPosts (36f20211)
    • call topic events init from within file itself (6074a0fb)
    • improvements (970bd06f)
    • ⚑️ update dom after diff deletion better (a2a7557c)
    • 🚚 removed 3 lines (4447a64e)
    • use Map to track sorted lists in Settings.set() (65de2e76)
    • πŸ‘‰ user: all plugins to change list of icon background colours (fbccf6e2)
    • remountable-routes:
      • rename src/routes/accounts.js to src/routes/user.js to better match the route prefix (1f28713f)
      • allow certain route prefixes to be mounted elsewhere (92758ec5)
    • topic-events:
      • expose addTopicEvents method in topic posts lib (9559fad8)
      • break out some logic in events.get into local modifyEvent method (cec3fc93)
      • fire topic event logging in topics/tools instead, pass uid into payload (425eca14)
    • hooks:
      • deprecate action:script.load client-side hook (8e5687a4)
      • better error handling (e7bd038d)
    βͺ Reverts
    • βͺ revert tag sort (f9df6431)
    • change toPid truthy (56523aa1)
    • bring back backwards compat (a1c01446)
    πŸ’… Code Style Changes
    • πŸ‘• eslint (b5ce8d25)
    • remountable-routes: abstract removable routes code to a separate local fn (16c1d6e9)
    βœ… Tests
    • 🚚 remove logs (435067aa)
    • clear cache between runs, require middleware later in helpers (2ea468da)
    • 🌲 log (d15e2710)
    • 🚚 remove equals (354e0a82)
    • βœ… test times (2f401d7d)
    • 🌲 log (80ef1082)
    • βœ… added test for session id reroll on login (a3a7ab3a)
    • βœ… add missing test (8ef38cb2)
    • βœ… double filter test (70a653d0)
    • βœ… admin/manage/users tests (0e67ab01)
    • fix spec for topic thumbs (4c078084)
    • added missing properties to topicObject (1d9ade4c)
    • βœ… added missing test file (b31f6dd2)
    • βœ… topic reordering tests (ad54b174)
    • βœ… additional tests for topic thumbs (50664487)
    • βœ… added more topic thumbnail tests (28b30134)
    • βœ… post diff deletion tests (72b050b4)
    • πŸ‘‰ user: added additional tests for icon background colour (d3a9e76a)