* Add group plan selection modal for upgrades
Allow users to select an existing group to upgrade before creating a new one.
* crlf -> lf lint
* set selection of group plan
Also tiny UI fixes
* Update group plan selection to include expired plans
* Add includeExpiredPlans option to group fetching
* force flag when fetching group plans
* Update group plan eligibility check
* Fix eslint error in push notification import
* replace chaining (?.) w/null check
* Remove comment
* set initial selected group plan, and fix card rounding
* format member count
* Show warning for pending party invites when upgrading to paid group plan
Show warning for pending party invites when upgrading to paid group plan. If user upgrades from party to group, remove any pending invites
* suppress error toasts for group modal, and UI tweaks for group modal
suppress error toast for 404 on party fetch for users without a party (for group modal), Increase check SVG size in selectableCard, and show "Previously upgraded" label for parties that were canceled group plans
* Clear upgradingGroup state after group plan payment
* fix(content): textual tweaks and updates
* fix(link): direct to FAQ instead of wiki
* fix(faq): correct Markdown
* Show orb of rebirth confirmation modal after use (window refresh)
* Set and check rebirth confirmation modal from localstorage
Set and check rebirth confirmation modal from localstorage after window reload
* Don't show orb of rebirth confirmation modal until page reloads
* message effective limit optimization
* Keep max limit for web (400 recent messages)
* Fix amount of messages initially being shown
* PM_PER_PAGE set to 50
* Increases number of messages in inbox test
* Increases number of messages for inbox pagination test
* Set and check rebirth confirmation modal from localstorage
Set and check rebirth confirmation modal from localstorage after window reload
* Don't show orb of rebirth confirmation modal until page reloads
* message effective limit optimization
* Keep max limit for web (400 recent messages)
* Add UUID validation for 'before' query parameter
* add party message stress test tool in admin panel
* lint
* add MAX_PM_COUNT of 400, admin tool for stress testing messages
* comment
* update stress test inbox message tool to use logged in user
* comment
---------
Co-authored-by: Kalista Payne <kalista@habitica.com>
* fix(content): textual tweaks and updates
* fix(link): direct to FAQ instead of wiki
* fix(faq): correct Markdown
* Show orb of rebirth confirmation modal after use (window refresh)
* Set and check rebirth confirmation modal from localstorage
Set and check rebirth confirmation modal from localstorage after window reload
* Don't show orb of rebirth confirmation modal until page reloads
* message effective limit optimization
* Keep max limit for web (400 recent messages)
* Fix amount of messages initially being shown
* PM_PER_PAGE set to 50
* Increases number of messages in inbox test
* Increases number of messages for inbox pagination test
* Set and check rebirth confirmation modal from localstorage
Set and check rebirth confirmation modal from localstorage after window reload
* Don't show orb of rebirth confirmation modal until page reloads
* message effective limit optimization
* Keep max limit for web (400 recent messages)
* Add UUID validation for 'before' query parameter
* add party message stress test tool in admin panel
* lint
* add MAX_PM_COUNT of 400, admin tool for stress testing messages
* comment
* update stress test inbox message tool to use logged in user
* comment
---------
Co-authored-by: Kalista Payne <kalista@habitica.com>
* fix test wording
* make shadow mute work for dms
* shadow mute chat messages
* shadow mute invites
* oops
* refactor mute handling into middleware
* correctly throw error
* fix
* test(chat): expect errors when muted
Also fixes the Linux version in the mongo commands. Again. wtf
---------
Co-authored-by: Kalista Payne <kalista@habitica.com>
* split component prepare new views / states
* extract empty and disabled state as components
* fix empty state mail icon
* first logic switching between modes, move page to /private-messages/index.vue
* extract autoCompleteHelper.js
* style header + start new message input
* style plus button + focus input
* state logic, types for sanity
* WIP PM new Message started
* add /members/username test
* first design changes to messageCard
* delete private message or chat - based on the mode
* copy as todo
* mention links to modal
* report chat or private message
* WIP likeButton
* likeButton styling
* hide like on private message cards
* fix unit test
* replace copy as todo - to just a copy to clipboard
* style changes
* menu position + like button width
* dropdown items background + like font
* fix like button padding
* move api endpoints and tests around to group inbox methods + like for inbox private messages
* restyle system messages
* Dropdown Radius and Padding
* WIP system messages
* fix lint
* copy delta commit of allowing liking own private messages
* enable liking private messages
* fix menu non hovered item icon color
* fix import path
* ignore background on system messages
* requested changes + migration
* update migration to update the unique id to some messages and delete the duplicates
* migration based on users pagination
* fix(migration): use Promise.all
* change to bulkWrites per User, and all messages in one run (of a user)
* check for array
* use rest operator ...
* skip sorting to get the users
* remove migration, disable like for private messages without uniqueMessageId
* lean+bulkWrite for likes, add time checks for like and auth for further debugging
* add a limit 2 get the messages by uniqueId
* Adding a simple server start script
* remove pinned nodemon dep
* fix inbox controller/tests
* fix / requested style changes
* fix empty state padding /
* hide avatar weapons on messages - fix avatar spacing on messages
* Hourglass Simplification (#15323)
* begin removing obsolete tests
* begin refactoring
* update cron tests
* cleanup
* finish basic implementation of new logic
* add more subscription tests
* subscription test improvements
* return nextHourglassDate again
* fix gem limit
* fix(test): short circuit this.
* fix(admin): correct logic and style for shrimple subs
* WIP(frontend): draft of main subs page view
* fix hourglass count
* Fix hourglass logic for upgrades
* fix admin panel display
* WIP(subs): extant Stripe state
* fix admin panel strings
* fix missing transaction type
* add new field for cumulative subscription count
* show date for hourglass bonus if it was received
* fix test
* feat(subscription): max Gems progress readout
* fix(css): correct and refactor heights and selection states
* fix(subs): correct border-radius and redirect
* fix(stripe): correct redirect after success
* Admin panel display fixes
* don’t give additional HG for new sub if they already got one this month
* fix issue with promo hourglasses
* fix(subscription): update layout when gifting
* fix(subscriptions): more gift layout revisions
* fix(subscriptions): minor visual updates
* fix(subs): pass autoRenews through Stripe
* fix(subs): gifts DON't renew
* fix(lint): unnecessary ternary
* fix(lint): do negate object ig
* fix(subs): try again on gifts
* fix(subs): unhovery and un-12-monthy
* fix bug with incorrectly giving HG bonus
* remove only
* fix test
* fix test
* fix(subs): also redirect to subs after gift sub
* fix(subs): fix typeError
* fix(g1g1): don't try to find Gems promo during bogo
---------
Co-authored-by: Phillip Thelen <phillip@habitica.com>
Co-authored-by: Kalista Payne <sabe@habitica.com>
* chore(sprites): update subproject
* fix(layout): tighten cancellation note
* fix(subs): Google wording and HG escape
* chore(testing): fake g1g1 dates
* fix(subs): don't hide HG preview entirely
* fix(subs): center next hourglass message
* working validatedTextInput.vue within start-new-conversation-input-header.vue 🎉
* fix(git): remove changes from old develop
* Revert "fix(git): remove changes from old develop"
This reverts commit 0e30f7df00.
* fix(git): no actually just this file i guesss
* adding an empty loading state, hiding
* fought the avatar arch nemesis again
* fix chatMessages (party chat) message spacing
* move disabled text back to above the input area - re-enable input area
* show disabled private messages top panel
* fix font color
* fixing uiStates - removing disabled - moving the own user check to the last
* fix(lint): add missing prop defaults
* fix(lint): object default should be fn
* fix(chat): correct grammar in error
* remove weapon position relative
* revert most of avatar.vue changes, add back weapons in chat message UI
* show date tooltip above system / skill messages
* fix toggle disable icon position
* trivial CSS cleanup
* fix(typo): English syntax in test
* chore(test): small style cleanup
* chore(logging): revert debug function
* chore(debug): remove timers from inbox like
---------
Co-authored-by: SabreCat <sabe@habitica.com>
Co-authored-by: Kalista Payne <sabrecat@gmail.com>
Co-authored-by: Phillip Thelen <phillip@habitica.com>
* use lean for getting task lists
* Only load necessary user data for group-plans call
Also don’t make a db request for groups if the user is in none
* Only load necessary user fields for in app rewards
* Optimize updateStore by not checking every item
* Only load necessary user data for task scoring
* improve performance of inbox request calls
* merge fix
* fix scoring task call
* add quests to scoring call
* fix showing official pinned items
* also load achievements
* begin moving to new fcm library
* Add error handling
* Add opening notification to correct screen
* Fix tests and make async
* lint fix
* Rename pushNotificationstest..js to pushNotifications.test.js
* fix(potions): remove Fungi Potion time banner
* 5.24.3
* update(content): add 2024-06 content prebuild (#15231)
* update sprites
* add 2024-06 content
* add 2024-06 enchanted armoire items
* update sprites
* update sprites
* fix errors found in testing
* Fix liveliness probes being rate limited (#15236)
* Do not rate limit any liveliness probes
* update example config
* Translated using Weblate (German)
Currently translated at 96.2% (181 of 188 strings)
Translated using Weblate (Japanese)
Currently translated at 99.4% (769 of 773 strings)
Translated using Weblate (German)
Currently translated at 93.6% (176 of 188 strings)
Translated using Weblate (Japanese)
Currently translated at 96.2% (2972 of 3089 strings)
Translated using Weblate (Japanese)
Currently translated at 100.0% (232 of 232 strings)
Translated using Weblate (Japanese)
Currently translated at 96.8% (841 of 868 strings)
Translated using Weblate (Ukrainian)
Currently translated at 100.0% (94 of 94 strings)
Translated using Weblate (Ukrainian)
Currently translated at 100.0% (113 of 113 strings)
Translated using Weblate (Ukrainian)
Currently translated at 100.0% (131 of 131 strings)
Translated using Weblate (Japanese)
Currently translated at 100.0% (286 of 286 strings)
Translated using Weblate (German)
Currently translated at 86.7% (163 of 188 strings)
Translated using Weblate (German)
Currently translated at 85.1% (160 of 188 strings)
Translated using Weblate (German)
Currently translated at 84.0% (158 of 188 strings)
Translated using Weblate (Ukrainian)
Currently translated at 100.0% (94 of 94 strings)
Translated using Weblate (German)
Currently translated at 83.5% (157 of 188 strings)
Translated using Weblate (Ukrainian)
Currently translated at 100.0% (113 of 113 strings)
Translated using Weblate (German)
Currently translated at 82.9% (156 of 188 strings)
Translated using Weblate (Ukrainian)
Currently translated at 100.0% (113 of 113 strings)
Translated using Weblate (German)
Currently translated at 81.9% (154 of 188 strings)
Translated using Weblate (Ukrainian)
Currently translated at 100.0% (113 of 113 strings)
Translated using Weblate (Ukrainian)
Currently translated at 100.0% (8 of 8 strings)
Translated using Weblate (Ukrainian)
Currently translated at 100.0% (8 of 8 strings)
Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (188 of 188 strings)
Translated using Weblate (German)
Currently translated at 79.2% (149 of 188 strings)
Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (189 of 189 strings)
Translated using Weblate (Ukrainian)
Currently translated at 100.0% (8 of 8 strings)
Translated using Weblate (German)
Currently translated at 90.6% (2799 of 3089 strings)
Translated using Weblate (German)
Currently translated at 77.6% (146 of 188 strings)
Translated using Weblate (German)
Currently translated at 90.5% (2797 of 3089 strings)
Translated using Weblate (German)
Currently translated at 90.4% (2794 of 3089 strings)
Translated using Weblate (Ukrainian)
Currently translated at 100.0% (131 of 131 strings)
Translated using Weblate (German)
Currently translated at 90.1% (2786 of 3089 strings)
Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (188 of 188 strings)
Translated using Weblate (German)
Currently translated at 77.1% (145 of 188 strings)
Translated using Weblate (Chinese (Simplified))
Currently translated at 98.7% (763 of 773 strings)
Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (868 of 868 strings)
Translated using Weblate (Ukrainian)
Currently translated at 100.0% (131 of 131 strings)
Translated using Weblate (Spanish)
Currently translated at 100.0% (286 of 286 strings)
Translated using Weblate (German)
Currently translated at 90.0% (2782 of 3089 strings)
Translated using Weblate (Spanish)
Currently translated at 100.0% (773 of 773 strings)
Translated using Weblate (Ukrainian)
Currently translated at 100.0% (378 of 378 strings)
Translated using Weblate (Spanish)
Currently translated at 100.0% (868 of 868 strings)
Translated using Weblate (Spanish)
Currently translated at 100.0% (167 of 167 strings)
Translated using Weblate (Ukrainian)
Currently translated at 100.0% (259 of 259 strings)
Translated using Weblate (Japanese)
Currently translated at 100.0% (259 of 259 strings)
Translated using Weblate (Ukrainian)
Currently translated at 100.0% (131 of 131 strings)
Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (286 of 286 strings)
Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (239 of 239 strings)
Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (188 of 188 strings)
Translated using Weblate (French)
Currently translated at 100.0% (188 of 188 strings)
Translated using Weblate (German)
Currently translated at 75.0% (141 of 188 strings)
Translated using Weblate (Spanish)
Currently translated at 99.0% (766 of 773 strings)
Translated using Weblate (Ukrainian)
Currently translated at 100.0% (189 of 189 strings)
Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (868 of 868 strings)
Translated using Weblate (Japanese)
Currently translated at 98.8% (764 of 773 strings)
Translated using Weblate (Japanese)
Currently translated at 99.6% (258 of 259 strings)
Translated using Weblate (Japanese)
Currently translated at 100.0% (378 of 378 strings)
Translated using Weblate (Japanese)
Currently translated at 100.0% (188 of 188 strings)
Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (140 of 140 strings)
Translated using Weblate (Ukrainian)
Currently translated at 100.0% (131 of 131 strings)
Translated using Weblate (Ukrainian)
Currently translated at 100.0% (286 of 286 strings)
Translated using Weblate (Ukrainian)
Currently translated at 62.5% (1931 of 3089 strings)
Translated using Weblate (German)
Currently translated at 89.8% (2777 of 3089 strings)
Translated using Weblate (French)
Currently translated at 100.0% (188 of 188 strings)
Translated using Weblate (Chinese (Simplified))
Currently translated at 98.5% (762 of 773 strings)
Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (868 of 868 strings)
Translated using Weblate (Ukrainian)
Currently translated at 100.0% (286 of 286 strings)
Translated using Weblate (Ukrainian)
Currently translated at 100.0% (286 of 286 strings)
Translated using Weblate (French)
Currently translated at 82.9% (156 of 188 strings)
Translated using Weblate (German)
Currently translated at 93.0% (241 of 259 strings)
Translated using Weblate (Ukrainian)
Currently translated at 100.0% (286 of 286 strings)
Translated using Weblate (Ukrainian)
Currently translated at 100.0% (8 of 8 strings)
Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (427 of 427 strings)
Translated using Weblate (Chinese (Simplified))
Currently translated at 98.5% (762 of 773 strings)
Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (868 of 868 strings)
Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (167 of 167 strings)
Translated using Weblate (Japanese)
Currently translated at 99.2% (257 of 259 strings)
Translated using Weblate (Chinese (Simplified))
Currently translated at 98.5% (762 of 773 strings)
Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (868 of 868 strings)
Translated using Weblate (German)
Currently translated at 92.2% (239 of 259 strings)
Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (286 of 286 strings)
Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (239 of 239 strings)
Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (188 of 188 strings)
Translated using Weblate (German)
Currently translated at 91.8% (238 of 259 strings)
Translated using Weblate (Ukrainian)
Currently translated at 100.0% (131 of 131 strings)
Translated using Weblate (Chinese (Simplified))
Currently translated at 98.5% (762 of 773 strings)
Translated using Weblate (German)
Currently translated at 90.3% (234 of 259 strings)
Co-authored-by: Finrod <963505255@qq.com>
Co-authored-by: Jaime Martí <jaumemarti77@icloud.com>
Co-authored-by: Kem Kembo <medamamef@gmail.com>
Co-authored-by: Sophie LE MASLE <sophiesuff@gmail.com>
Co-authored-by: TOMA Mitsuru <toma0001@gmail.com>
Co-authored-by: Tetiana <merekka13@gmail.com>
Co-authored-by: Toro Mor <thomas.bizer@gmx.de>
Co-authored-by: Weblate <noreply@weblate.org>
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/es/
Translate-URL: https://translate.habitica.com/projects/habitica/achievements/zh_Hans/
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/es/
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/zh_Hans/
Translate-URL: https://translate.habitica.com/projects/habitica/character/uk/
Translate-URL: https://translate.habitica.com/projects/habitica/character/zh_Hans/
Translate-URL: https://translate.habitica.com/projects/habitica/content/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/content/uk/
Translate-URL: https://translate.habitica.com/projects/habitica/faq/de/
Translate-URL: https://translate.habitica.com/projects/habitica/faq/fr/
Translate-URL: https://translate.habitica.com/projects/habitica/faq/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/faq/zh_Hans/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/de/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/gear/uk/
Translate-URL: https://translate.habitica.com/projects/habitica/generic/zh_Hans/
Translate-URL: https://translate.habitica.com/projects/habitica/groups/zh_Hans/
Translate-URL: https://translate.habitica.com/projects/habitica/inventory/uk/
Translate-URL: https://translate.habitica.com/projects/habitica/limited/es/
Translate-URL: https://translate.habitica.com/projects/habitica/limited/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/limited/uk/
Translate-URL: https://translate.habitica.com/projects/habitica/limited/zh_Hans/
Translate-URL: https://translate.habitica.com/projects/habitica/npc/uk/
Translate-URL: https://translate.habitica.com/projects/habitica/overview/uk/
Translate-URL: https://translate.habitica.com/projects/habitica/pets/uk/
Translate-URL: https://translate.habitica.com/projects/habitica/quests/uk/
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/es/
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/zh_Hans/
Translate-URL: https://translate.habitica.com/projects/habitica/settings/de/
Translate-URL: https://translate.habitica.com/projects/habitica/settings/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/settings/uk/
Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/ja/
Translate-URL: https://translate.habitica.com/projects/habitica/tasks/zh_Hans/
Translation: Habitica/Achievements
Translation: Habitica/Backgrounds
Translation: Habitica/Character
Translation: Habitica/Content
Translation: Habitica/Faq
Translation: Habitica/Gear
Translation: Habitica/Generic
Translation: Habitica/Groups
Translation: Habitica/Inventory
Translation: Habitica/Limited
Translation: Habitica/Npc
Translation: Habitica/Overview
Translation: Habitica/Pets
Translation: Habitica/Quests
Translation: Habitica/Questscontent
Translation: Habitica/Settings
Translation: Habitica/Subscriber
Translation: Habitica/Tasks
* 5.25.0
* Fix dockerfile (#15241)
* Fix issue with l4p not resetting properly (#15240)
* actually clear out seeking field on user. Even when creating a party
* Add tests to ensure party.seeking is cleared
* fix(lint): don't assign unused const
---------
Co-authored-by: Sabe Jones <sabe@habitica.com>
---------
Co-authored-by: Sabe Jones <sabe@habitica.com>
Co-authored-by: Natalie <78037386+CuriousMagpie@users.noreply.github.com>
Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: Finrod <963505255@qq.com>
Co-authored-by: Jaime Martí <jaumemarti77@icloud.com>
Co-authored-by: Kem Kembo <medamamef@gmail.com>
Co-authored-by: Sophie LE MASLE <sophiesuff@gmail.com>
Co-authored-by: TOMA Mitsuru <toma0001@gmail.com>
Co-authored-by: Tetiana <merekka13@gmail.com>
Co-authored-by: Toro Mor <thomas.bizer@gmx.de>
Co-authored-by: Rafał Jagielski <jagielski.rafal.uwm@gmail.com>
* push notifications: handle some more error codes and when the user is loaded using .lean()
* fix lint
* do not send push notification if message is missing
* Strip markdown from push notifications
* Revert "Strip markdown from push notifications"
This reverts commit 4741e584c6.
* correctly set type for mention push notifications
* Add unformattedText field to chat messages
* fiix lint errors
* Add check that markdown formatting is stripped from messages
* Add check for markdown formatting in messages.
* load user info per conversation.id
* fix projection
* load user data based on / from conversations
* fix tests
* remove unneeded properties of 2nd query
* merge all changes to one commit of PR #11157 / #11226
* rename the new paged messages route
* rename event, move map-method to the Inbox schema, fix lint
* move `mapMessage`-call to `getUserInbox`
* revert schema.method back to a normal one
* load messages per conversation
* only sort ones in ui
* add contributor to message
* fix correct message layout/message
* mugenScroll on chatMessages
* fix lint, no mugen-scroll, use own scroll handler
* fix height / margin of modal + use button to load more
* fix tests
* user data from inbox
* style "load earlier messages"
* move mapMessage to the inbox api result / extract sentMessage of members-api-controller
* fix test back
* fix test
* keep last scroll position
* just set the Id of the returned message instead of all other properties
* fix add new messages (buttons were hidden) + load more
* item-mounted debounce to trigger the re-scrolling
* shared model for chat and inbox
* disable inbox schema
* inbox: use separate model
* remove old code that used group.chat
* add back chat field (not used) and remove old tests
* remove inbox exclusions when loading user
* add GET /api/v3/inbox/messages
* add comment
* implement DELETE /inbox/messages/:messageid in v4
* implement GET /inbox/messages in v4 and update tests
* implement DELETE /api/v4/inbox/clear
* fix url
* fix doc
* update /export/inbox.html
* update other data exports
* add back messages in user schema
* add user.toJSONWithInbox
* add compativility until migration is done
* more compatibility
* fix tojson called twice
* add compatibility methods
* fix common tests
* fix v4 integration tests
* v3 get user -> with inbox
* start to fix tests
* fix v3 integration tests
* wip
* wip, client use new route
* update tests for members/send-private-message
* tests for get user in v4
* add tests for DELETE /inbox/messages/:messageId
* add tests for DELETE /inbox/clear in v4
* update docs
* fix tests
* initial migration
* fix migration
* fix migration
* migration fixes
* migrate api.enterCouponCode
* migrate api.castSpell
* migrate reset, reroll, rebirth
* add routes to v4 version
* fix tests
* fixes
* api.updateUser
* remove .only
* get user -> userLib
* refactor inbox.vue to work with new data model
* fix return message when messaging yourself
* wip fix bug with new conversation
* wip
* fix remaining ui issues
* move api.registerLocal, fixes
* keep only v3 version of GET /inbox/messages
* new inbox client
* add tests for sendPrivateMessage returning the message
* update DELETE user message tests
* port v3 GET-inbox_messages
* use v4 delete message route
* sendPrivateMessage: return sent message
* fix