* **feat**: add support for setting watch state via category ID and member UID in route params
* **feat**: update category watch/privilege routes and logic to use `member` param instead of `uid`/`member` body field
* **feat**: add support for unfollowing via actor parameter in category routes
* **feat**: add deprecation warnings for legacy category routes and refactor privilege fetching to inline async call
* docs: add openapi specs for new category routes with path parameters
Co-authored-by: aider (ollama/ministral-3:8b) <aider@aider.chat>
* fix: some minor errors in file paths
* feat: support path extraction from req.query in assert.path middleware
Co-authored-by: aider (ollama/ministral-3:8b) <aider@aider.chat>
* feat: support message from both query and body in removeQueuedPost
Co-authored-by: aider (ollama/ministral-3:8b) <aider@aider.chat>
* fix: remove ai-added check that path is defined, it is not required
* fix: send message as query param instead of in body, when rejecting queued post
* lint: comma dangle
* `feat(openapi): add optional query parameter support for topic delete endpoints`
Co-authored-by: aider (ollama/ministral-3:8b) <aider@aider.chat>
* feat: add query parameter and make request body optional for topic thumbnail deletion
Co-authored-by: aider (ollama/ministral-3:8b) <aider@aider.chat>
* feat: support query params for thumb path and crosspost id in topics endpoints
Co-authored-by: aider (ollama/ministral-3:8b) <aider@aider.chat>
* feat: add query params for mute/unmute reason and timestamp
Co-authored-by: aider (ollama/ministral-3:8b) <aider@aider.chat>
* docs: update unmute API to support query params for reason and until timestamp
Co-authored-by: aider (ollama/ministral-3:8b) <aider@aider.chat>
* docs: update unmute endpoint to support reason via request body
Co-authored-by: aider (ollama/ministral-3:8b) <aider@aider.chat>
* feat: add reason parameter support to users.unmute
Co-authored-by: aider (ollama/ministral-3:8b) <aider@aider.chat>
* feat: allow unban reason to be sent via req.query
* fix: timestamps are unix timestamps not 8601
* docs: mute shouldn't have been updated
* chore: remove deprecation warnings
---------
Co-authored-by: aider (ollama/ministral-3:8b) <aider@aider.chat>
* refactor: how admins change emails
ability for admins to change emails from acp
ability for admins to change passwords from acp
only users themselves can use /user/<slug>/edit/email
group actions in manage users dropdown
admins can use the same modal from profile page instead of interstitial to update email
add missing checks to addEmail, if email take throw error
add targetUid to email change event
* test: bunch of baloney
* test: remove old test
* feat: wip user emails api
* fix: allow admins with manage-users access to email confirmation api as well
* fix: wrong route path
* docs: openapi spec
* feat: allow invites in normal registration mode + invite privilege
* feat: select groups to join from an invite
* test: check if groups from invitations have been joined
* fix: remove unused variable
* feat: write API versions of socket calls
* docs: openapi specs for the new routes
* test: iron out mongo redis difference
* refactor: move inviteGroups endpoint into write API
* refactor: use GET /api/v3/users/:uid/invites/groups
Instead of GET /api/v3/users/:uid/inviteGroups
* fix: no need for /api/v3 prefix when using api module
* fix: tests
* refactor: change POST /api/v3/users/invite
To POST /api/v3/users/:uid/invites
* refactor: make helpers.invite awaitable
* fix: restrict invite API to self-use only
* fix: move invite groups controller to write api, +tests
* fix: tests
Co-authored-by: Julian Lam <julian@nodebb.org>
@baris Also, I am now allowing the following properties to be saved in User.saveSettings:
- categoryTopicSort
- topicPostSort
- setCategorySort
- setTopicSort