diff --git a/.changeset/angry-kids-occur.md b/.changeset/angry-kids-occur.md new file mode 100644 index 000000000000..d0b4961dd564 --- /dev/null +++ b/.changeset/angry-kids-occur.md @@ -0,0 +1,4 @@ +--- +"@rocket.chat/meteor": patch +--- +Fixed GDPR removal to correctly wipe everything related to the user apart from _id & activity fields diff --git a/.changeset/bump-patch-1699478965737.md b/.changeset/bump-patch-1699478965737.md new file mode 100644 index 000000000000..e1eaa7980afb --- /dev/null +++ b/.changeset/bump-patch-1699478965737.md @@ -0,0 +1,5 @@ +--- +'@rocket.chat/meteor': patch +--- + +Bump @rocket.chat/meteor version. diff --git a/.changeset/bump-patch-1699591347357.md b/.changeset/bump-patch-1699591347357.md new file mode 100644 index 000000000000..e1eaa7980afb --- /dev/null +++ b/.changeset/bump-patch-1699591347357.md @@ -0,0 +1,5 @@ +--- +'@rocket.chat/meteor': patch +--- + +Bump @rocket.chat/meteor version. diff --git a/.changeset/bump-patch-1699738736996.md b/.changeset/bump-patch-1699738736996.md new file mode 100644 index 000000000000..e1eaa7980afb --- /dev/null +++ b/.changeset/bump-patch-1699738736996.md @@ -0,0 +1,5 @@ +--- +'@rocket.chat/meteor': patch +--- + +Bump @rocket.chat/meteor version. diff --git a/.changeset/bump-patch-1699940713809.md b/.changeset/bump-patch-1699940713809.md new file mode 100644 index 000000000000..e1eaa7980afb --- /dev/null +++ b/.changeset/bump-patch-1699940713809.md @@ -0,0 +1,5 @@ +--- +'@rocket.chat/meteor': patch +--- + +Bump @rocket.chat/meteor version. diff --git a/.changeset/bump-patch-1699991612617.md b/.changeset/bump-patch-1699991612617.md new file mode 100644 index 000000000000..e1eaa7980afb --- /dev/null +++ b/.changeset/bump-patch-1699991612617.md @@ -0,0 +1,5 @@ +--- +'@rocket.chat/meteor': patch +--- + +Bump @rocket.chat/meteor version. diff --git a/.changeset/bump-patch-1699998565522.md b/.changeset/bump-patch-1699998565522.md new file mode 100644 index 000000000000..e1eaa7980afb --- /dev/null +++ b/.changeset/bump-patch-1699998565522.md @@ -0,0 +1,5 @@ +--- +'@rocket.chat/meteor': patch +--- + +Bump @rocket.chat/meteor version. diff --git a/.changeset/bump-patch-1700263798234.md b/.changeset/bump-patch-1700263798234.md new file mode 100644 index 000000000000..e1eaa7980afb --- /dev/null +++ b/.changeset/bump-patch-1700263798234.md @@ -0,0 +1,5 @@ +--- +'@rocket.chat/meteor': patch +--- + +Bump @rocket.chat/meteor version. diff --git a/.changeset/chatty-schools-notice.md b/.changeset/chatty-schools-notice.md new file mode 100644 index 000000000000..f759b1691cc2 --- /dev/null +++ b/.changeset/chatty-schools-notice.md @@ -0,0 +1,5 @@ +--- +'@rocket.chat/meteor': patch +--- + +fix: OAuth login by redirect failing on firefox diff --git a/.changeset/cool-rockets-talk.md b/.changeset/cool-rockets-talk.md new file mode 100644 index 000000000000..8dc5af53dd88 --- /dev/null +++ b/.changeset/cool-rockets-talk.md @@ -0,0 +1,5 @@ +--- +"@rocket.chat/meteor": patch +--- + +add support to DeepL open api diff --git a/.changeset/honest-socks-sniff.md b/.changeset/honest-socks-sniff.md new file mode 100644 index 000000000000..efdaea336774 --- /dev/null +++ b/.changeset/honest-socks-sniff.md @@ -0,0 +1,5 @@ +--- +"@rocket.chat/meteor": patch +--- + +fix: Google Maps and Katex config settings were not visible diff --git a/.changeset/loud-foxes-grin.md b/.changeset/loud-foxes-grin.md new file mode 100644 index 000000000000..3fa989aa0dd2 --- /dev/null +++ b/.changeset/loud-foxes-grin.md @@ -0,0 +1,5 @@ +--- +"@rocket.chat/meteor": patch +--- + +fix: Visitor message not being sent to webhook due to wrong validation of settings diff --git a/.changeset/ninety-files-sing.md b/.changeset/ninety-files-sing.md new file mode 100644 index 000000000000..b5cf45ea81d8 --- /dev/null +++ b/.changeset/ninety-files-sing.md @@ -0,0 +1,5 @@ +--- +"@rocket.chat/meteor": patch +--- + +regression: changed UniqueID modal being displayed wrongly during startup diff --git a/.changeset/old-buckets-camp.md b/.changeset/old-buckets-camp.md new file mode 100644 index 000000000000..e91a59816445 --- /dev/null +++ b/.changeset/old-buckets-camp.md @@ -0,0 +1,7 @@ +--- +"@rocket.chat/meteor": patch +--- + +Add the date and time to the email sent when a new device logs in + + diff --git a/.changeset/pre.json b/.changeset/pre.json new file mode 100644 index 000000000000..23292ba7856a --- /dev/null +++ b/.changeset/pre.json @@ -0,0 +1,138 @@ +{ + "mode": "pre", + "tag": "rc", + "initialVersions": { + "@rocket.chat/meteor": "6.5.0-develop", + "rocketchat-services": "1.1.14", + "@rocket.chat/account-service": "0.2.14", + "@rocket.chat/authorization-service": "0.2.14", + "@rocket.chat/ddp-streamer": "0.1.14", + "@rocket.chat/omnichannel-transcript": "0.2.14", + "@rocket.chat/presence-service": "0.2.14", + "@rocket.chat/queue-worker": "0.2.14", + "@rocket.chat/stream-hub-service": "0.2.14", + "@rocket.chat/api-client": "0.1.14", + "@rocket.chat/ddp-client": "0.2.5", + "@rocket.chat/license": "0.0.1", + "@rocket.chat/omnichannel-services": "0.0.20", + "@rocket.chat/pdf-worker": "0.0.20", + "@rocket.chat/presence": "0.0.20", + "@rocket.chat/ui-theming": "0.1.0", + "@rocket.chat/account-utils": "0.0.1", + "@rocket.chat/agenda": "0.0.2", + "@rocket.chat/base64": "1.0.12", + "@rocket.chat/cas-validate": "0.0.1", + "@rocket.chat/core-services": "0.2.5", + "@rocket.chat/core-typings": "6.4.5", + "@rocket.chat/cron": "0.0.16", + "@rocket.chat/eslint-config": "0.6.0", + "@rocket.chat/favicon": "0.0.1", + "@rocket.chat/fuselage-ui-kit": "2.0.5", + "@rocket.chat/gazzodown": "2.0.5", + "@rocket.chat/i18n": "0.0.2", + "@rocket.chat/instance-status": "0.0.20", + "@rocket.chat/jwt": "0.0.1", + "@rocket.chat/livechat": "1.14.5", + "@rocket.chat/log-format": "0.0.1", + "@rocket.chat/logger": "0.0.1", + "@rocket.chat/mock-providers": "0.0.2", + "@rocket.chat/model-typings": "0.1.5", + "@rocket.chat/models": "0.0.20", + "@rocket.chat/poplib": "0.0.1", + "@rocket.chat/password-policies": "0.0.1", + "@rocket.chat/random": "1.2.1", + "@rocket.chat/release-action": "2.2.0", + "@rocket.chat/rest-typings": "6.4.5", + "@rocket.chat/server-cloud-communication": "0.0.1", + "@rocket.chat/server-fetch": "0.0.1", + "@rocket.chat/sha256": "1.0.9", + "@rocket.chat/tools": "0.1.0", + "@rocket.chat/ui-client": "2.0.5", + "@rocket.chat/ui-composer": "0.0.1", + "@rocket.chat/ui-contexts": "2.0.5", + "@rocket.chat/ui-video-conf": "2.0.5", + "@rocket.chat/uikit-playground": "0.2.5", + "@rocket.chat/web-ui-registration": "2.0.5" + }, + "changesets": [ + "angry-kids-occur", + "blue-trainers-explain", + "brave-snakes-scream", + "brown-comics-cheat", + "brown-donuts-drive", + "bump-patch-1699478965737", + "bump-patch-1699591347357", + "bump-patch-1699738736996", + "bump-patch-1699940713809", + "bump-patch-1699991612617", + "bump-patch-1699998565522", + "bump-patch-1700263798234", + "cool-rockets-talk", + "cool-zoos-move", + "cuddly-ties-run", + "cyan-mangos-do", + "dull-trainers-drive", + "eleven-gorillas-deliver", + "empty-files-know", + "fluffy-monkeys-sing", + "fuzzy-plums-travel", + "gentle-radios-relate", + "heavy-ads-carry", + "hip-pans-argue", + "honest-socks-sniff", + "khaki-feet-dance", + "kind-books-love", + "large-pandas-beam", + "late-pants-switch", + "lazy-shoes-teach", + "long-cars-dream", + "lucky-vans-develop", + "nice-chairs-add", + "ninety-carrots-flow", + "ninety-files-sing", + "odd-hounds-thank", + "old-buckets-camp", + "old-zoos-hang", + "perfect-onions-develop", + "perfect-pianos-yawn", + "popular-actors-cheat", + "proud-shrimps-cheat", + "quiet-countries-provide", + "quiet-phones-reply", + "rich-dogs-smell", + "rotten-dryers-allow", + "rotten-pears-watch", + "selfish-hounds-pay", + "selfish-panthers-stare", + "serious-cats-fetch", + "seven-carpets-march", + "seven-emus-pay", + "shiny-pillows-run", + "six-pens-look", + "slow-coats-shout", + "soft-cows-juggle", + "sour-hotels-flash", + "stale-masks-learn", + "strange-papayas-yell", + "sweet-chefs-exist", + "sweet-feet-relate", + "tall-moons-beam", + "thick-ads-run", + "thick-spoons-compete", + "thirty-jokes-compete", + "thirty-pumpkins-fix", + "tidy-bears-applaud", + "tidy-cows-destroy", + "tiny-wolves-deliver", + "tough-apples-turn", + "tough-carrots-walk", + "twelve-files-deny", + "twenty-colts-hope", + "warm-melons-type", + "weak-cameras-pay", + "weak-elephants-kneel", + "wicked-humans-hang", + "wicked-jars-double", + "workspace-status-admin-page" + ] +} diff --git a/.changeset/rotten-pears-watch.md b/.changeset/rotten-pears-watch.md new file mode 100644 index 000000000000..9cd76a9ff8a4 --- /dev/null +++ b/.changeset/rotten-pears-watch.md @@ -0,0 +1,8 @@ +--- +"@rocket.chat/meteor": patch +--- + +fix: wrong client hash calculation due to race condition on assets + +Some deployments may suffer from some reloads if running multiple instances. It's caused by different client hashes generated due to a possible race condition on custom assets load at the startup time. Forcing the clients to talk to the right backend instances, which causes reloads if sticky sessions are not enabled. +This change removes the assets from the hash calculation preventing the race condition and possible different hashes. After this change, the clients will not reload when the admin changes assets. diff --git a/.changeset/selfish-panthers-stare.md b/.changeset/selfish-panthers-stare.md new file mode 100644 index 000000000000..cfc7c1ba891f --- /dev/null +++ b/.changeset/selfish-panthers-stare.md @@ -0,0 +1,5 @@ +--- +"@rocket.chat/meteor": patch +--- + +Fixed Canned responses stream not working, causing users to refresh to see newly created responses. diff --git a/.changeset/thick-ads-run.md b/.changeset/thick-ads-run.md new file mode 100644 index 000000000000..d7a3668d0464 --- /dev/null +++ b/.changeset/thick-ads-run.md @@ -0,0 +1,12 @@ +--- +"@rocket.chat/meteor": patch +--- + +fix: immediate auto reload issues + +Immediate auto reload increases server load on restarts/upgrades and increases the chance of getting 404 on Meteor's config file blocking the UI on a loading screen + +This change adds delays on front and backend codes on automatic client reload: + +- Front-end, adds a warning message including the old and new hashes, and a delay of 60 seconds after being notified by the server +- Back-end, delays the client notifications on a random value between 2 and 10 minutes per connection, allowing different clients to reload at different moments and distributing the load along the time. diff --git a/.changeset/twenty-colts-hope.md b/.changeset/twenty-colts-hope.md new file mode 100644 index 000000000000..28178729872f --- /dev/null +++ b/.changeset/twenty-colts-hope.md @@ -0,0 +1,5 @@ +--- +"@rocket.chat/meteor": patch +--- + +Fixed an issue in which the engagement dashboard page tabs had no reactivity and would not change their content upon being clicked on. diff --git a/.changeset/weak-elephants-kneel.md b/.changeset/weak-elephants-kneel.md new file mode 100644 index 000000000000..f97820f9269e --- /dev/null +++ b/.changeset/weak-elephants-kneel.md @@ -0,0 +1,5 @@ +--- +"@rocket.chat/meteor": patch +--- + +fix: `TypeError`: Cannot use 'in' operator in `undefined` for every message sent diff --git a/apps/meteor/.docker/Dockerfile.alpine b/apps/meteor/.docker/Dockerfile.alpine index 003baa57aa8b..94baef809217 100644 --- a/apps/meteor/.docker/Dockerfile.alpine +++ b/apps/meteor/.docker/Dockerfile.alpine @@ -12,7 +12,7 @@ RUN set -x \ && npm install --production \ # Start hack for sharp... && rm -rf npm/node_modules/sharp \ - && npm install sharp@0.30.4 \ + && npm install sharp@0.32.6 \ && mv node_modules/sharp npm/node_modules/sharp \ # End hack for sharp # Start hack for isolated-vm... diff --git a/apps/meteor/.docker/Dockerfile.rhel b/apps/meteor/.docker/Dockerfile.rhel index 1481b0445e45..dc90b0f88133 100644 --- a/apps/meteor/.docker/Dockerfile.rhel +++ b/apps/meteor/.docker/Dockerfile.rhel @@ -1,6 +1,6 @@ FROM registry.access.redhat.com/ubi8/nodejs-12 -ENV RC_VERSION 6.5.0-develop +ENV RC_VERSION 6.6.0-develop MAINTAINER buildmaster@rocket.chat diff --git a/apps/meteor/CHANGELOG.md b/apps/meteor/CHANGELOG.md index b3265229cc6f..d676b3b742ef 100644 --- a/apps/meteor/CHANGELOG.md +++ b/apps/meteor/CHANGELOG.md @@ -1,5 +1,419 @@ # @rocket.chat/meteor +## 6.5.0-rc.7 + +### Patch Changes + +- Bump @rocket.chat/meteor version. +- 88833b24e9: fix: Google Maps and Katex config settings were not visible +- 150a580851: regression: changed UniqueID modal being displayed wrongly during startup +- 7ed7cb41ce: Add the date and time to the email sent when a new device logs in + - @rocket.chat/core-typings@6.5.0-rc.7 + - @rocket.chat/rest-typings@6.5.0-rc.7 + - @rocket.chat/api-client@0.1.15-rc.7 + - @rocket.chat/license@0.1.0-rc.7 + - @rocket.chat/omnichannel-services@0.1.0-rc.7 + - @rocket.chat/pdf-worker@0.0.21-rc.7 + - @rocket.chat/presence@0.1.0-rc.7 + - @rocket.chat/core-services@0.3.0-rc.7 + - @rocket.chat/cron@0.0.17-rc.7 + - @rocket.chat/gazzodown@3.0.0-rc.7 + - @rocket.chat/model-typings@0.2.0-rc.7 + - @rocket.chat/ui-contexts@3.0.0-rc.7 + - @rocket.chat/server-cloud-communication@0.0.1 + - @rocket.chat/fuselage-ui-kit@3.0.0-rc.7 + - @rocket.chat/models@0.0.21-rc.7 + - @rocket.chat/ui-theming@0.1.1-rc.0 + - @rocket.chat/ui-client@3.0.0-rc.7 + - @rocket.chat/ui-video-conf@3.0.0-rc.7 + - @rocket.chat/web-ui-registration@3.0.0-rc.6 + - @rocket.chat/instance-status@0.0.21-rc.7 + +## 6.5.0-rc.6 + +### Patch Changes + +- Bump @rocket.chat/meteor version. +- aaf11e92dc: Fixed Canned responses stream not working, causing users to refresh to see newly created responses. + - @rocket.chat/core-typings@6.5.0-rc.6 + - @rocket.chat/rest-typings@6.5.0-rc.6 + - @rocket.chat/api-client@0.1.15-rc.6 + - @rocket.chat/license@0.1.0-rc.6 + - @rocket.chat/omnichannel-services@0.1.0-rc.6 + - @rocket.chat/pdf-worker@0.0.21-rc.6 + - @rocket.chat/presence@0.1.0-rc.6 + - @rocket.chat/core-services@0.3.0-rc.6 + - @rocket.chat/cron@0.0.17-rc.6 + - @rocket.chat/gazzodown@3.0.0-rc.6 + - @rocket.chat/model-typings@0.2.0-rc.6 + - @rocket.chat/ui-contexts@3.0.0-rc.6 + - @rocket.chat/server-cloud-communication@0.0.1 + - @rocket.chat/fuselage-ui-kit@3.0.0-rc.6 + - @rocket.chat/models@0.0.21-rc.6 + - @rocket.chat/ui-theming@0.1.1-rc.0 + - @rocket.chat/ui-client@3.0.0-rc.6 + - @rocket.chat/ui-video-conf@3.0.0-rc.6 + - @rocket.chat/web-ui-registration@3.0.0-rc.5 + - @rocket.chat/instance-status@0.0.21-rc.6 + +## 6.5.0-rc.5 + +### Patch Changes + +- Bump @rocket.chat/meteor version. +- 3ce070a3de: fix: wrong client hash calculation due to race condition on assets + + Some deployments may suffer from some reloads if running multiple instances. It's caused by different client hashes generated due to a possible race condition on custom assets load at the startup time. Forcing the clients to talk to the right backend instances, which causes reloads if sticky sessions are not enabled. + This change removes the assets from the hash calculation preventing the race condition and possible different hashes. After this change, the clients will not reload when the admin changes assets. + +- 26b8c8124c: fix: `TypeError`: Cannot use 'in' operator in `undefined` for every message sent + - @rocket.chat/core-typings@6.5.0-rc.5 + - @rocket.chat/rest-typings@6.5.0-rc.5 + - @rocket.chat/api-client@0.1.15-rc.5 + - @rocket.chat/license@0.1.0-rc.5 + - @rocket.chat/omnichannel-services@0.1.0-rc.5 + - @rocket.chat/pdf-worker@0.0.21-rc.5 + - @rocket.chat/presence@0.1.0-rc.5 + - @rocket.chat/core-services@0.3.0-rc.5 + - @rocket.chat/cron@0.0.17-rc.5 + - @rocket.chat/gazzodown@3.0.0-rc.5 + - @rocket.chat/model-typings@0.2.0-rc.5 + - @rocket.chat/ui-contexts@3.0.0-rc.5 + - @rocket.chat/server-cloud-communication@0.0.1 + - @rocket.chat/fuselage-ui-kit@3.0.0-rc.5 + - @rocket.chat/models@0.0.21-rc.5 + - @rocket.chat/ui-theming@0.1.1-rc.0 + - @rocket.chat/ui-client@3.0.0-rc.5 + - @rocket.chat/ui-video-conf@3.0.0-rc.5 + - @rocket.chat/web-ui-registration@3.0.0-rc.4 + - @rocket.chat/instance-status@0.0.21-rc.5 + +## 6.5.0-rc.4 + +### Patch Changes + +- Bump @rocket.chat/meteor version. + - @rocket.chat/core-typings@6.5.0-rc.4 + - @rocket.chat/rest-typings@6.5.0-rc.4 + - @rocket.chat/api-client@0.1.15-rc.4 + - @rocket.chat/license@0.1.0-rc.4 + - @rocket.chat/omnichannel-services@0.1.0-rc.4 + - @rocket.chat/pdf-worker@0.0.21-rc.4 + - @rocket.chat/presence@0.1.0-rc.4 + - @rocket.chat/core-services@0.3.0-rc.4 + - @rocket.chat/cron@0.0.17-rc.4 + - @rocket.chat/gazzodown@3.0.0-rc.4 + - @rocket.chat/model-typings@0.2.0-rc.4 + - @rocket.chat/ui-contexts@3.0.0-rc.4 + - @rocket.chat/server-cloud-communication@0.0.1 + - @rocket.chat/fuselage-ui-kit@3.0.0-rc.4 + - @rocket.chat/models@0.0.21-rc.4 + - @rocket.chat/ui-theming@0.1.1-rc.0 + - @rocket.chat/ui-client@3.0.0-rc.4 + - @rocket.chat/ui-video-conf@3.0.0-rc.4 + - @rocket.chat/web-ui-registration@3.0.0-rc.3 + - @rocket.chat/instance-status@0.0.21-rc.4 + +## 6.5.0-rc.3 + +### Patch Changes + +- Bump @rocket.chat/meteor version. +- 8668485fda: fix: immediate auto reload issues + + Immediate auto reload increases server load on restarts/upgrades and increases the chance of getting 404 on Meteor's config file blocking the UI on a loading screen + + This change adds delays on front and backend codes on automatic client reload: + + - Front-end, adds a warning message including the old and new hashes, and a delay of 60 seconds after being notified by the server + - Back-end, delays the client notifications on a random value between 2 and 10 minutes per connection, allowing different clients to reload at different moments and distributing the load along the time. + - @rocket.chat/core-typings@6.5.0-rc.3 + - @rocket.chat/rest-typings@6.5.0-rc.3 + - @rocket.chat/api-client@0.1.15-rc.3 + - @rocket.chat/license@0.1.0-rc.3 + - @rocket.chat/omnichannel-services@0.1.0-rc.3 + - @rocket.chat/pdf-worker@0.0.21-rc.3 + - @rocket.chat/presence@0.1.0-rc.3 + - @rocket.chat/core-services@0.3.0-rc.3 + - @rocket.chat/cron@0.0.17-rc.3 + - @rocket.chat/gazzodown@3.0.0-rc.3 + - @rocket.chat/model-typings@0.2.0-rc.3 + - @rocket.chat/ui-contexts@3.0.0-rc.3 + - @rocket.chat/server-cloud-communication@0.0.1 + - @rocket.chat/fuselage-ui-kit@3.0.0-rc.3 + - @rocket.chat/models@0.0.21-rc.3 + - @rocket.chat/ui-theming@0.1.1-rc.0 + - @rocket.chat/ui-client@3.0.0-rc.3 + - @rocket.chat/ui-video-conf@3.0.0-rc.3 + - @rocket.chat/instance-status@0.0.21-rc.3 + - @rocket.chat/web-ui-registration@3.0.0-rc.2 + +## 6.5.0-rc.2 + +### Patch Changes + +- Bump @rocket.chat/meteor version. + - @rocket.chat/core-typings@6.5.0-rc.2 + - @rocket.chat/rest-typings@6.5.0-rc.2 + - @rocket.chat/api-client@0.1.15-rc.2 + - @rocket.chat/license@0.1.0-rc.2 + - @rocket.chat/omnichannel-services@0.1.0-rc.2 + - @rocket.chat/pdf-worker@0.0.21-rc.2 + - @rocket.chat/presence@0.1.0-rc.2 + - @rocket.chat/core-services@0.3.0-rc.2 + - @rocket.chat/cron@0.0.17-rc.2 + - @rocket.chat/gazzodown@3.0.0-rc.2 + - @rocket.chat/model-typings@0.2.0-rc.2 + - @rocket.chat/ui-contexts@3.0.0-rc.2 + - @rocket.chat/server-cloud-communication@0.0.1 + - @rocket.chat/fuselage-ui-kit@3.0.0-rc.2 + - @rocket.chat/models@0.0.21-rc.2 + - @rocket.chat/ui-theming@0.1.1-rc.0 + - @rocket.chat/ui-client@3.0.0-rc.2 + - @rocket.chat/ui-video-conf@3.0.0-rc.2 + - @rocket.chat/web-ui-registration@3.0.0-rc.2 + - @rocket.chat/instance-status@0.0.21-rc.2 + +## 6.5.0-rc.1 + +### Patch Changes + +- Bump @rocket.chat/meteor version. + - @rocket.chat/core-typings@6.5.0-rc.1 + - @rocket.chat/rest-typings@6.5.0-rc.1 + - @rocket.chat/api-client@0.1.15-rc.1 + - @rocket.chat/license@0.1.0-rc.1 + - @rocket.chat/omnichannel-services@0.1.0-rc.1 + - @rocket.chat/pdf-worker@0.0.21-rc.1 + - @rocket.chat/presence@0.1.0-rc.1 + - @rocket.chat/core-services@0.3.0-rc.1 + - @rocket.chat/cron@0.0.17-rc.1 + - @rocket.chat/gazzodown@3.0.0-rc.1 + - @rocket.chat/model-typings@0.2.0-rc.1 + - @rocket.chat/ui-contexts@3.0.0-rc.1 + - @rocket.chat/server-cloud-communication@0.0.1 + - @rocket.chat/fuselage-ui-kit@3.0.0-rc.1 + - @rocket.chat/models@0.0.21-rc.1 + - @rocket.chat/ui-theming@0.1.1-rc.0 + - @rocket.chat/ui-client@3.0.0-rc.1 + - @rocket.chat/ui-video-conf@3.0.0-rc.1 + - @rocket.chat/web-ui-registration@3.0.0-rc.1 + - @rocket.chat/instance-status@0.0.21-rc.1 + +## 6.5.0-rc.0 + +### Minor Changes + +- a31d5336c9: Added a new admin page called `Subscription`, this page is responsible of managing the current workspace subscription and it has a overview of the usage and limits of the plan +- 1642bad3ae: New setting to automatically enable autotranslate when joining rooms +- 747ec6c70e: Updated slack bridge to add support for connecting using slack apps in addition to the slack legacy bot +- 47303b5232: chore: adding some portugueses translations to the app details page +- c0ef13a0bf: Added `push` statistic, containing three bits. Each bit represents a boolean: + ``` + 1 1 1 + | | | + | | +- push enabled = 0b1 = 1 + | +--- push gateway enabled = 0b10 = 2 + +----- push gateway changed = 0b100 = 4 + ``` +- 809eb63d79: Fix typing indicator of Apps user +- ee2c7d1228: feat: Setup wizard content updates and enforcing cloud connectivity +- c38711b346: Add the daily and monthly peaks of concurrent connections to statistics + - Added `dailyPeakConnections` statistic for monitoring the daily peak of concurrent connections in a workspace; + - Added `maxMonthlyPeakConnections` statistic for monitoring the last 30 days peak of concurrent connections in a workspace; +- f3dd1277e6: Added new Omnichannel setting 'Hide conversation after closing' +- 92613680b7: Added option to select between two script engine options for the integrations +- ec1b2b9846: Create a deployment fingerprint to identify possible deployment changes caused by database cloning. A question to the admin will confirm if it's a regular deployment change or an intent of a new deployment and correct identification values as needed. + The fingerprint is composed by `${siteUrl}${dbConnectionString}` and hashed via `sha256` in `base64`. + An environment variable named `AUTO_ACCEPT_FINGERPRINT`, when set to `true`, can be used to auto-accept an expected fingerprint change as a regular deployment update. +- 5f81a0f3cb: Implemented the License library, it is used to handle the functionality like expiration date, modules, limits, etc. + Also added a version v3 of the license, which contains an extended list of features. + v2 is still supported, since we convert it to v3 on the fly. +- 5d55a9394e: Added a new Admin page called `Workspace info` in place of Information page, to make it easier to check the license + +### Patch Changes + +- 72e8ece564: Fixed GDPR removal to correctly wipe everything related to the user apart from \_id & activity fields +- 8a02759e40: Fixed an issue where broadcasted events were published twice within the same instance +- dea1fe9191: chore: Calculate & Store MAC stats + Added new info to the stats: `omnichannelContactsBySource`, `uniqueContactsOfLastMonth`, `uniqueContactsOfLastWeek`, `uniqueContactsOfYesterday` +- 38e3933504: add support to DeepL open api +- e8eeb2a79d: fixed threads breaking when sending messages too fast +- 18ed36cdd1: fix: custom-css injection +- b85df55030: fix: UI issue on marketplace filters +- 75f0ae31d9: fix: Remove model-level query restrictions for monitors +- 2124868d4f: Fix trying to upload same file again and again. +- 93a0859e87: Fix unnecessary username validation on accounts profile form +- 27c75f15f3: Changed the name of the administration Logs page to "Records", implemented a tab layout in this page and added a new tab called "Analytic reports" that shows the most recent result of the statistics endpoint. +- f5c0d6b45d: Fixed DM room with "guest" user kept as "read only" after reactivating user +- 058650128d: fix: Change plan name from Enterprise to Premium on marketplace filtering +- bba3c9da6a: fix: Omnichannel webhook is not retrying requests +- dea1fe9191: feat: Save visitor's activity on agent's interaction +- c714962b0e: Fixed message disappearing from room after erased even if "Show Deleted Status" is enabled +- e24d071675: Fixed intermittent errors caused by the removal of subscriptions and inquiries when lacking permissions. +- 3650ab81b5: Fixed issue with file attachments in rooms' messages export having no content +- afdcad7e67: test: read receipts +- 06a8e30289: chore: Change plan name Enterprise to Premium on marketplace +- dd254a9bf5: fix: mobile ringing notification missing call id +- 704ed0fc7b: Fix i18n translations using sprintf post processor +- 223dce18a3: Do not allow auto-translation to be enabled in E2E rooms +- 4344d838a9: fix: Unable to send attachments via email as an omni-agent +- ab78404954: New permission for testing push notifications +- b14e159d9b: Search users using full name too on share message modal +- a82d8c2bb0: Add pagination & tooltips to agent's dropdown on forwarding modal +- 134b71df44: fix: Monitors now able to forward a chat without taking it first +- bd1c8b1e45: Fixed a problem that would prevent private apps from being shown on air-gapped environments +- a8718eddc0: Add new permission to allow kick users from rooms without being a member +- 5b9d6883bf: feat: Improve UI when MAC limits are reached + feat: Limit endpoints on MAC limit reached +- 1f2b384c62: fix: cloud alerts not working +- 3fd0bc4120: download translation files through CDN +- 7342800286: Replace the old Enterprise labels to newest Premium +- 696bbc4f94: fix: Disables GenericMenu without any sections or items +- 2a1aa293a5: Check for room scoped permissions for starting discussions +- 3a62ac4ece: fix: user dropdown menu position on RTL layout +- ad7e52b742: Enable the option `Only allow verified users to login` to SaaS environment +- 7493442650: chore: Deprecate un-used meteor method for omnichannel analytics +- f7b07a0fc5: feat: Community users will now be able to customize their Business hour timezone +- 54d8ad4392: Forward headers when using proxy for file uploads +- a98f3ff303: feat: added `licenses.info` endpoint +- 3488f6b024: Fixed an issue in which the engagement dashboard page tabs had no reactivity and would not change their content upon being clicked on. +- dea1fe9191: feat: Disable and annonimize visitors instead of removing +- ff2263a3c1: Fixed issue with message read receipts not being created when accessing a room the first time +- 76c7b957ee: Improve cache of static files +- 4a59798da8: Handle the username update in the background +- Updated dependencies [7da1edf866] +- Updated dependencies [dea1fe9191] +- Updated dependencies [c2f337664e] +- Updated dependencies [747ec6c70e] +- Updated dependencies [c0ef13a0bf] +- Updated dependencies [c38711b346] +- Updated dependencies [223dce18a3] +- Updated dependencies [5b9d6883bf] +- Updated dependencies [35363420f0] +- Updated dependencies [92613680b7] +- Updated dependencies [ec1b2b9846] +- Updated dependencies [8e89b5a3b0] +- Updated dependencies [a98f3ff303] +- Updated dependencies [5f81a0f3cb] +- Updated dependencies [dea1fe9191] + - @rocket.chat/ui-contexts@3.0.0-rc.0 + - @rocket.chat/web-ui-registration@3.0.0-rc.0 + - @rocket.chat/core-typings@6.5.0-rc.0 + - @rocket.chat/model-typings@0.2.0-rc.0 + - @rocket.chat/gazzodown@3.0.0-rc.0 + - @rocket.chat/i18n@0.0.3-rc.0 + - @rocket.chat/presence@0.1.0-rc.0 + - @rocket.chat/core-services@0.3.0-rc.0 + - @rocket.chat/rest-typings@6.5.0-rc.0 + - @rocket.chat/server-fetch@0.0.2-rc.0 + - @rocket.chat/tools@0.2.0-rc.0 + - @rocket.chat/ui-theming@0.1.1-rc.0 + - @rocket.chat/license@0.1.0-rc.0 + - @rocket.chat/jwt@0.1.0-rc.0 + - @rocket.chat/omnichannel-services@0.1.0-rc.0 + - @rocket.chat/fuselage-ui-kit@3.0.0-rc.0 + - @rocket.chat/ui-client@3.0.0-rc.0 + - @rocket.chat/ui-video-conf@3.0.0-rc.0 + - @rocket.chat/api-client@0.1.15-rc.0 + - @rocket.chat/pdf-worker@0.0.21-rc.0 + - @rocket.chat/cron@0.0.17-rc.0 + - @rocket.chat/models@0.0.21-rc.0 + - @rocket.chat/server-cloud-communication@0.0.1 + - @rocket.chat/instance-status@0.0.21-rc.0 + +## 6.4.8 + +### Patch Changes + +- 550900bb2b: Bump @rocket.chat/meteor version. +- Bump @rocket.chat/meteor version. + - @rocket.chat/core-typings@6.4.8 + - @rocket.chat/rest-typings@6.4.8 + - @rocket.chat/api-client@0.1.17 + - @rocket.chat/omnichannel-services@0.0.23 + - @rocket.chat/pdf-worker@0.0.23 + - @rocket.chat/presence@0.0.23 + - @rocket.chat/core-services@0.2.8 + - @rocket.chat/cron@0.0.19 + - @rocket.chat/gazzodown@2.0.8 + - @rocket.chat/model-typings@0.1.8 + - @rocket.chat/ui-contexts@2.0.8 + - @rocket.chat/fuselage-ui-kit@2.0.8 + - @rocket.chat/models@0.0.23 + - @rocket.chat/ui-theming@0.1.0 + - @rocket.chat/ui-client@2.0.8 + - @rocket.chat/ui-video-conf@2.0.8 + - @rocket.chat/web-ui-registration@2.0.8 + - @rocket.chat/instance-status@0.0.23 + +## 6.4.7 + +### Patch Changes + +- 037efa4f4f: Bump @rocket.chat/meteor version. +- Bump @rocket.chat/meteor version. +- b98492e3ee: Add additional checks to the OAuth tokens to prevent future issues + - @rocket.chat/core-typings@6.4.7 + - @rocket.chat/rest-typings@6.4.7 + - @rocket.chat/api-client@0.1.16 + - @rocket.chat/omnichannel-services@0.0.22 + - @rocket.chat/pdf-worker@0.0.22 + - @rocket.chat/presence@0.0.22 + - @rocket.chat/core-services@0.2.7 + - @rocket.chat/cron@0.0.18 + - @rocket.chat/gazzodown@2.0.7 + - @rocket.chat/model-typings@0.1.7 + - @rocket.chat/ui-contexts@2.0.7 + - @rocket.chat/fuselage-ui-kit@2.0.7 + - @rocket.chat/models@0.0.22 + - @rocket.chat/ui-theming@0.1.0 + - @rocket.chat/ui-client@2.0.7 + - @rocket.chat/ui-video-conf@2.0.7 + - @rocket.chat/web-ui-registration@2.0.7 + - @rocket.chat/instance-status@0.0.22 + +## 6.4.6 + +### Patch Changes + +- 35ea15005a: Bump @rocket.chat/meteor version. +- Bump @rocket.chat/meteor version. +- 57deb49ceb: fix: OAuth login by redirect failing on firefox +- 00875fc9ab: fix: wrong client hash calculation due to race condition on assets + + Some deployments may suffer from some reloads if running multiple instances. It's caused by different client hashes generated due to a possible race condition on custom assets load at the startup time. Forcing the clients to talk to the right backend instances, which causes reloads if sticky sessions are not enabled. + This change removes the assets from the hash calculation preventing the race condition and possible different hashes. After this change, the clients will not reload when the admin changes assets. + +- b7ea8651bf: fix: immediate auto reload issues + + Immediate auto reload increases server load on restarts/upgrades and increases the chance of getting 404 on Meteor's config file blocking the UI on a loading screen + + This change adds delays on front and backend codes on automatic client reload: + + - Front-end, adds a warning message including the old and new hashes, and a delay of 60 seconds after being notified by the server + - Back-end, delays the client notifications on a random value between 2 and 10 minutes per connection, allowing different clients to reload at different moments and distributing the load along the time. + +- 873eea9d54: fix: `TypeError`: Cannot use 'in' operator in `undefined` for every message sent + - @rocket.chat/core-typings@6.4.6 + - @rocket.chat/rest-typings@6.4.6 + - @rocket.chat/api-client@0.1.15 + - @rocket.chat/omnichannel-services@0.0.21 + - @rocket.chat/pdf-worker@0.0.21 + - @rocket.chat/presence@0.0.21 + - @rocket.chat/core-services@0.2.6 + - @rocket.chat/cron@0.0.17 + - @rocket.chat/gazzodown@2.0.6 + - @rocket.chat/model-typings@0.1.6 + - @rocket.chat/ui-contexts@2.0.6 + - @rocket.chat/fuselage-ui-kit@2.0.6 + - @rocket.chat/models@0.0.21 + - @rocket.chat/ui-theming@0.1.0 + - @rocket.chat/ui-client@2.0.6 + - @rocket.chat/ui-video-conf@2.0.6 + - @rocket.chat/web-ui-registration@2.0.6 + - @rocket.chat/instance-status@0.0.21 + ## 6.4.5 ### Patch Changes diff --git a/apps/meteor/app/api/server/v1/cloud.ts b/apps/meteor/app/api/server/v1/cloud.ts index 6fb675cfccd4..626cefb9ae3d 100644 --- a/apps/meteor/app/api/server/v1/cloud.ts +++ b/apps/meteor/app/api/server/v1/cloud.ts @@ -1,3 +1,4 @@ +import { CloudAnnouncements } from '@rocket.chat/models'; import { check } from 'meteor/check'; import { hasPermissionAsync } from '../../../authorization/server/functions/hasPermission'; @@ -176,3 +177,23 @@ API.v1.addRoute( }, }, ); + +API.v1.addRoute( + 'cloud.announcements', + { authRequired: true }, + { + async get() { + const now = new Date(); + const announcements = await CloudAnnouncements.find( + { + $or: [{ 'selector.roles': { $elemMatch: { $in: this.user.roles } } }, { selector: { $exists: false } }], + platform: { $in: ['web'] }, + startAt: { $lte: now }, + expireAt: { $gte: now }, + }, + { sort: { startAt: 1 } }, + ).toArray(); + return API.v1.success({ announcements }); + }, + }, +); diff --git a/apps/meteor/app/assets/server/assets.ts b/apps/meteor/app/assets/server/assets.ts index 726d16ac34bf..529526ba6750 100644 --- a/apps/meteor/app/assets/server/assets.ts +++ b/apps/meteor/app/assets/server/assets.ts @@ -1,16 +1,14 @@ import crypto from 'crypto'; import type { ServerResponse, IncomingMessage } from 'http'; -import type { IRocketChatAssets, IRocketChatAsset, IRocketChatAssetCache } from '@rocket.chat/core-typings'; +import type { IRocketChatAssets, IRocketChatAsset } from '@rocket.chat/core-typings'; import { Settings } from '@rocket.chat/models'; import type { ServerMethods } from '@rocket.chat/ui-contexts'; import type { NextHandleFunction } from 'connect'; import sizeOf from 'image-size'; import { Meteor } from 'meteor/meteor'; import { WebApp, WebAppInternals } from 'meteor/webapp'; -import { WebAppHashing } from 'meteor/webapp-hashing'; import sharp from 'sharp'; -import _ from 'underscore'; import { hasPermissionAsync } from '../../authorization/server/functions/hasPermission'; import { RocketChatFile } from '../../file/server'; @@ -371,55 +369,6 @@ Meteor.startup(() => { }, 200); }); -const { calculateClientHash } = WebAppHashing; - -WebAppHashing.calculateClientHash = function (manifest, includeFilter, runtimeConfigOverride): string { - for (const key of Object.keys(assets)) { - const value = getAssetByKey(key); - if (!value.cache && !value.defaultUrl) { - continue; - } - - let cache: IRocketChatAssetCache; - if (value.cache) { - cache = { - path: value.cache.path, - cacheable: value.cache.cacheable, - sourceMapUrl: value.cache.sourceMapUrl, - where: value.cache.where, - type: value.cache.type, - url: value.cache.url, - size: value.cache.size, - hash: value.cache.hash, - }; - } else { - const extension = value.defaultUrl?.split('.').pop(); - cache = { - path: `assets/${key}.${extension}`, - cacheable: false, - sourceMapUrl: undefined, - where: 'client', - type: 'asset', - url: `/assets/${key}.${extension}?v3`, - hash: 'v3', - }; - } - - const manifestItem = _.findWhere(manifest, { - path: key, - }); - - if (manifestItem) { - const index = manifest.indexOf(manifestItem); - manifest[index] = cache; - } else { - manifest.push(cache); - } - } - - return calculateClientHash.call(this, manifest, includeFilter, runtimeConfigOverride); -}; - declare module '@rocket.chat/ui-contexts' { // eslint-disable-next-line @typescript-eslint/naming-convention interface ServerMethods { diff --git a/apps/meteor/app/autotranslate/server/deeplTranslate.ts b/apps/meteor/app/autotranslate/server/deeplTranslate.ts index 8aaed5c12d28..349133f7fd4c 100644 --- a/apps/meteor/app/autotranslate/server/deeplTranslate.ts +++ b/apps/meteor/app/autotranslate/server/deeplTranslate.ts @@ -18,6 +18,9 @@ import { SystemLogger } from '../../../server/lib/logger/system'; import { settings } from '../../settings/server'; import { TranslationProviderRegistry, AutoTranslate } from './autotranslate'; +const proApiEndpoint = 'https://api.deepl.com/v2/translate'; +const freeApiEndpoint = 'https://api-free.deepl.com/v2/translate'; + /** * DeepL translation service provider class representation. * Encapsulates the service provider settings and information. @@ -38,10 +41,18 @@ class DeeplAutoTranslate extends AutoTranslate { constructor() { super(); this.name = 'deepl-translate'; - this.apiEndPointUrl = 'https://api.deepl.com/v2/translate'; + this.apiEndPointUrl = proApiEndpoint; + // Get the service provide API key. settings.watch('AutoTranslate_DeepLAPIKey', (value) => { this.apiKey = value; + + // if the api key ends with `:fx` it is a free api key + if (/:fx$/.test(value)) { + this.apiEndPointUrl = freeApiEndpoint; + return; + } + this.apiEndPointUrl = proApiEndpoint; }); } @@ -205,7 +216,13 @@ class DeeplAutoTranslate extends AutoTranslate { language = language.substr(0, 2); } try { - const result = await fetch(this.apiEndPointUrl, { params: { auth_key: this.apiKey, target_lang: language, text: msgs } }); + const result = await fetch(this.apiEndPointUrl, { + params: { target_lang: language, text: msgs }, + headers: { + Authorization: `DeepL-Auth-Key ${this.apiKey}`, + }, + method: 'POST', + }); if (!result.ok) { throw new Error(result.statusText); diff --git a/apps/meteor/app/cloud/server/functions/buildRegistrationData.ts b/apps/meteor/app/cloud/server/functions/buildRegistrationData.ts index ea94db8d17a1..cc08b42b4556 100644 --- a/apps/meteor/app/cloud/server/functions/buildRegistrationData.ts +++ b/apps/meteor/app/cloud/server/functions/buildRegistrationData.ts @@ -1,4 +1,5 @@ -import { Statistics, Users } from '@rocket.chat/models'; +import { LivechatRooms, Statistics, Users } from '@rocket.chat/models'; +import moment from 'moment'; import { settings } from '../../../settings/server'; import { statistics } from '../../../statistics/server'; @@ -61,6 +62,7 @@ export async function buildWorkspaceRegistrationData { try { - const token = await getWorkspaceAccessTokenOrThrow(false, 'workspace:billing'); + const token = await getWorkspaceAccessTokenOrThrow(true, 'workspace:billing', false); const subscriptionURL = getURL('admin/subscription', { full: true, diff --git a/apps/meteor/app/cloud/server/functions/getWorkspaceAccessToken.ts b/apps/meteor/app/cloud/server/functions/getWorkspaceAccessToken.ts index b495e3342d4b..d5b92c97ef7d 100644 --- a/apps/meteor/app/cloud/server/functions/getWorkspaceAccessToken.ts +++ b/apps/meteor/app/cloud/server/functions/getWorkspaceAccessToken.ts @@ -10,7 +10,7 @@ import { retrieveRegistrationStatus } from './retrieveRegistrationStatus'; * @param {boolean} save * @returns string */ -export async function getWorkspaceAccessToken(forceNew = false, scope = '', save = true): Promise { +export async function getWorkspaceAccessToken(forceNew = false, scope = '', save = true, throwOnError = false): Promise { const { workspaceRegistered } = await retrieveRegistrationStatus(); if (!workspaceRegistered) { @@ -29,7 +29,7 @@ export async function getWorkspaceAccessToken(forceNew = false, scope = '', save return settings.get('Cloud_Workspace_Access_Token'); } - const accessToken = await getWorkspaceAccessTokenWithScope(scope); + const accessToken = await getWorkspaceAccessTokenWithScope(scope, throwOnError); if (save) { await Promise.all([ @@ -37,7 +37,6 @@ export async function getWorkspaceAccessToken(forceNew = false, scope = '', save Settings.updateValueById('Cloud_Workspace_Access_Token_Expires_At', accessToken.expiresAt), ]); } - return accessToken.token; } @@ -47,11 +46,17 @@ export class CloudWorkspaceAccessTokenError extends Error { } } +export class CloudWorkspaceAccessTokenEmptyError extends Error { + constructor() { + super('Workspace access token is empty'); + } +} + export async function getWorkspaceAccessTokenOrThrow(forceNew = false, scope = '', save = true): Promise { - const token = await getWorkspaceAccessToken(forceNew, scope, save); + const token = await getWorkspaceAccessToken(forceNew, scope, save, true); if (!token) { - throw new CloudWorkspaceAccessTokenError(); + throw new CloudWorkspaceAccessTokenEmptyError(); } return token; diff --git a/apps/meteor/app/cloud/server/functions/getWorkspaceAccessTokenWithScope.ts b/apps/meteor/app/cloud/server/functions/getWorkspaceAccessTokenWithScope.ts index 88509902cb6d..bb32476fd3dc 100644 --- a/apps/meteor/app/cloud/server/functions/getWorkspaceAccessTokenWithScope.ts +++ b/apps/meteor/app/cloud/server/functions/getWorkspaceAccessTokenWithScope.ts @@ -4,10 +4,11 @@ import { SystemLogger } from '../../../../server/lib/logger/system'; import { settings } from '../../../settings/server'; import { workspaceScopes } from '../oauthScopes'; import { getRedirectUri } from './getRedirectUri'; +import { CloudWorkspaceAccessTokenError } from './getWorkspaceAccessToken'; import { removeWorkspaceRegistrationInfo } from './removeWorkspaceRegistrationInfo'; import { retrieveRegistrationStatus } from './retrieveRegistrationStatus'; -export async function getWorkspaceAccessTokenWithScope(scope = '') { +export async function getWorkspaceAccessTokenWithScope(scope = '', throwOnError = false) { const { workspaceRegistered } = await retrieveRegistrationStatus(); const tokenResponse = { token: '', expiresAt: new Date() }; @@ -58,6 +59,9 @@ export async function getWorkspaceAccessTokenWithScope(scope = '') { if (err.response?.data?.error === 'oauth_invalid_client_credentials') { SystemLogger.error('Server has been unregistered from cloud'); void removeWorkspaceRegistrationInfo(); + if (throwOnError) { + throw new CloudWorkspaceAccessTokenError(); + } } return tokenResponse; diff --git a/apps/meteor/app/cloud/server/functions/getWorkspaceLicense.ts b/apps/meteor/app/cloud/server/functions/getWorkspaceLicense.ts index f9f0cfadc669..ca97e2a6fcdd 100644 --- a/apps/meteor/app/cloud/server/functions/getWorkspaceLicense.ts +++ b/apps/meteor/app/cloud/server/functions/getWorkspaceLicense.ts @@ -49,36 +49,25 @@ const fetchCloudWorkspaceLicensePayload = async ({ token }: { token: string }): return payload; }; -export async function getWorkspaceLicense(): Promise<{ updated: boolean; license: string }> { +export async function getWorkspaceLicense() { const currentLicense = await Settings.findOne('Cloud_Workspace_License'); // it should never happen, since even if the license is not found, it will return an empty settings if (!currentLicense?._updatedAt) { throw new CloudWorkspaceLicenseError('Failed to retrieve current license'); } - const fromCurrentLicense = async () => { - const license = currentLicense?.value as string | undefined; - if (license) { - await callbacks.run('workspaceLicenseChanged', license); - } - - return { updated: false, license: license ?? '' }; - }; - try { const token = await getWorkspaceAccessToken(); if (!token) { - return fromCurrentLicense(); + return; } const payload = await fetchCloudWorkspaceLicensePayload({ token }); if (currentLicense.value && Date.parse(payload.updatedAt) <= currentLicense._updatedAt.getTime()) { - return fromCurrentLicense(); + return; } - await Settings.updateValueById('Cloud_Workspace_License', payload.license); - await callbacks.run('workspaceLicenseChanged', payload.license); return { updated: true, license: payload.license }; @@ -88,7 +77,5 @@ export async function getWorkspaceLicense(): Promise<{ updated: boolean; license url: '/license', err, }); - - return fromCurrentLicense(); } } diff --git a/apps/meteor/app/cloud/server/functions/removeWorkspaceRegistrationInfo.ts b/apps/meteor/app/cloud/server/functions/removeWorkspaceRegistrationInfo.ts index 5884a282482b..ec26e0bb9b27 100644 --- a/apps/meteor/app/cloud/server/functions/removeWorkspaceRegistrationInfo.ts +++ b/apps/meteor/app/cloud/server/functions/removeWorkspaceRegistrationInfo.ts @@ -18,5 +18,6 @@ export async function removeWorkspaceRegistrationInfo() { Settings.updateValueById('Cloud_Workspace_Registration_Client_Uri', null), ]); + await Settings.updateValueById('Show_Setup_Wizard', 'in_progress'); return true; } diff --git a/apps/meteor/app/cloud/server/functions/saveRegistrationData.ts b/apps/meteor/app/cloud/server/functions/saveRegistrationData.ts index 8e1e03113af4..9faa52c787b5 100644 --- a/apps/meteor/app/cloud/server/functions/saveRegistrationData.ts +++ b/apps/meteor/app/cloud/server/functions/saveRegistrationData.ts @@ -1,6 +1,7 @@ import { Settings } from '@rocket.chat/models'; -import { callbacks } from '../../../../lib/callbacks'; +import { settings } from '../../../settings/server'; +import { syncCloudData } from './syncWorkspace/syncCloudData'; export function saveRegistrationData({ workspaceId, @@ -10,7 +11,6 @@ export function saveRegistrationData({ client_secret_expires_at, publicKey, registration_client_uri, - licenseData, }: { workspaceId: string; client_name: string; @@ -19,9 +19,6 @@ export function saveRegistrationData({ client_secret_expires_at: number; publicKey: string; registration_client_uri: string; - licenseData: { - license: string; - }; }) { return Promise.all([ Settings.updateValueById('Register_Server', true), @@ -32,9 +29,29 @@ export function saveRegistrationData({ Settings.updateValueById('Cloud_Workspace_Client_Secret_Expires_At', client_secret_expires_at), Settings.updateValueById('Cloud_Workspace_PublicKey', publicKey), Settings.updateValueById('Cloud_Workspace_Registration_Client_Uri', registration_client_uri), - Settings.updateValueById('Cloud_Workspace_License', licenseData.license || ''), ]).then(async (...results) => { - await callbacks.run('workspaceLicenseChanged', licenseData.license); + // wait until all the settings are updated before syncing the data + for await (const retry of Array.from({ length: 10 })) { + if ( + settings.get('Register_Server') === true && + settings.get('Cloud_Workspace_Id') === workspaceId && + settings.get('Cloud_Workspace_Name') === client_name && + settings.get('Cloud_Workspace_Client_Id') === client_id && + settings.get('Cloud_Workspace_Client_Secret') === client_secret && + settings.get('Cloud_Workspace_Client_Secret_Expires_At') === client_secret_expires_at && + settings.get('Cloud_Workspace_PublicKey') === publicKey && + settings.get('Cloud_Workspace_Registration_Client_Uri') === registration_client_uri + ) { + break; + } + + if (retry === 9) { + throw new Error('Failed to save registration data'); + } + await new Promise((resolve) => setTimeout(resolve, 1000)); + } + + await syncCloudData(); return results; }); } diff --git a/apps/meteor/app/cloud/server/functions/syncWorkspace/syncCloudData.ts b/apps/meteor/app/cloud/server/functions/syncWorkspace/syncCloudData.ts index 5f529a4892ec..63dc37dd9901 100644 --- a/apps/meteor/app/cloud/server/functions/syncWorkspace/syncCloudData.ts +++ b/apps/meteor/app/cloud/server/functions/syncWorkspace/syncCloudData.ts @@ -1,4 +1,5 @@ import type { Cloud, Serialized } from '@rocket.chat/core-typings'; +import { DuplicatedLicenseError } from '@rocket.chat/license'; import { serverFetch as fetch } from '@rocket.chat/server-fetch'; import { v, compile } from 'suretype'; @@ -74,8 +75,30 @@ export async function syncCloudData() { await callbacks.run('workspaceLicenseChanged', license); + SystemLogger.info({ + msg: 'Synced with Rocket.Chat Cloud', + function: 'syncCloudData', + }); + return true; } catch (err) { + /** + * If some of CloudWorkspaceAccessError and CloudWorkspaceRegistrationError happens, makes no sense to run the legacySyncWorkspace + * because it will fail too. + * The DuplicatedLicenseError license error is also ignored because it is not a problem. the Cloud is allowed to send the same license twice. + */ + switch (true) { + case err instanceof CloudWorkspaceAccessError: + case err instanceof CloudWorkspaceRegistrationError: + case err instanceof DuplicatedLicenseError: + SystemLogger.info({ + msg: 'Failed to sync with Rocket.Chat Cloud', + function: 'syncCloudData', + err, + }); + return; + } + SystemLogger.error({ msg: 'Failed to sync with Rocket.Chat Cloud', url: '/sync', @@ -83,5 +106,10 @@ export async function syncCloudData() { }); } + SystemLogger.info({ + msg: 'Falling back to legacy sync', + function: 'syncCloudData', + }); + await legacySyncWorkspace(); } diff --git a/apps/meteor/app/cloud/server/license.ts b/apps/meteor/app/cloud/server/license.ts index e9ab8eccf4ab..49c03c564216 100644 --- a/apps/meteor/app/cloud/server/license.ts +++ b/apps/meteor/app/cloud/server/license.ts @@ -1 +1 @@ -export const LICENSE_VERSION = 2 as const; +export const LICENSE_VERSION = 3 as const; diff --git a/apps/meteor/app/cloud/server/methods.ts b/apps/meteor/app/cloud/server/methods.ts index 1d328d0c213e..edb3a078ac14 100644 --- a/apps/meteor/app/cloud/server/methods.ts +++ b/apps/meteor/app/cloud/server/methods.ts @@ -29,7 +29,6 @@ declare module '@rocket.chat/ui-contexts' { 'cloud:syncWorkspace': () => boolean; 'cloud:connectWorkspace': (token: string) => boolean | Error; 'cloud:reconnectWorkspace': () => boolean; - 'cloud:disconnectWorkspace': () => boolean; 'cloud:getOAuthAuthorizationUrl': () => string; 'cloud:finishOAuthAuthorization': (code: string, state: string) => boolean; 'cloud:checkUserLoggedIn': () => boolean; diff --git a/apps/meteor/app/custom-oauth/client/custom_oauth_client.js b/apps/meteor/app/custom-oauth/client/custom_oauth_client.js index a11277758438..c516f115aede 100644 --- a/apps/meteor/app/custom-oauth/client/custom_oauth_client.js +++ b/apps/meteor/app/custom-oauth/client/custom_oauth_client.js @@ -6,7 +6,6 @@ import { Meteor } from 'meteor/meteor'; import { OAuth } from 'meteor/oauth'; import { ServiceConfiguration } from 'meteor/service-configuration'; -import './swapSessionStorage'; import { isURL } from '../../../lib/utils/isURL'; // Request custom OAuth credentials for the user diff --git a/apps/meteor/app/custom-oauth/client/swapSessionStorage.js b/apps/meteor/app/custom-oauth/client/swapSessionStorage.js deleted file mode 100644 index 83d93310975e..000000000000 --- a/apps/meteor/app/custom-oauth/client/swapSessionStorage.js +++ /dev/null @@ -1,44 +0,0 @@ -import { Meteor } from 'meteor/meteor'; -import { OAuth } from 'meteor/oauth'; -import { Reload } from 'meteor/reload'; - -// TODO: This is a nasty workaround and should be removed as soon as possible -// Firefox is losing the sessionStorage data (v >= 79.0) after the redirect - -if (navigator.userAgent.indexOf('Firefox') !== -1) { - const KEY_NAME = 'Swapped_Storage_Workaround'; - - OAuth.saveDataForRedirect = (loginService, credentialToken) => { - Meteor._localStorage.setItem(KEY_NAME, JSON.stringify({ loginService, credentialToken })); - Reload._migrate(null, { immediateMigration: true }); - }; - - OAuth.getDataAfterRedirect = () => { - let migrationData = Meteor._localStorage.getItem(KEY_NAME); - Meteor._localStorage.removeItem(KEY_NAME); - try { - migrationData = JSON.parse(migrationData); - } catch (error) { - migrationData = null; - } - - if (!(migrationData && migrationData.credentialToken)) { - return null; - } - - const { credentialToken } = migrationData; - const key = OAuth._storageTokenPrefix + credentialToken; - let credentialSecret; - try { - credentialSecret = sessionStorage.getItem(key); - sessionStorage.removeItem(key); - } catch (e) { - Meteor._debug('error retrieving credentialSecret', e); - } - return { - loginService: migrationData.loginService, - credentialToken, - credentialSecret, - }; - }; -} diff --git a/apps/meteor/app/lib/server/functions/sendMessage.js b/apps/meteor/app/lib/server/functions/sendMessage.js index 72247d4b1870..f4d84c64d59e 100644 --- a/apps/meteor/app/lib/server/functions/sendMessage.js +++ b/apps/meteor/app/lib/server/functions/sendMessage.js @@ -248,9 +248,9 @@ export const sendMessage = async function (user, message, room, upsert = false, parseUrlsInMessage(message, previewUrls); - message = await Message.beforeSave({ message, room, user }); - message = await callbacks.run('beforeSaveMessage', message, room); + + message = await Message.beforeSave({ message, room, user }); if (message) { if (message.t === 'otr') { const otrStreamer = notifications.streamRoomMessage; diff --git a/apps/meteor/app/lib/server/functions/updateMessage.ts b/apps/meteor/app/lib/server/functions/updateMessage.ts index 9c544bd9a333..baca3f1b80ca 100644 --- a/apps/meteor/app/lib/server/functions/updateMessage.ts +++ b/apps/meteor/app/lib/server/functions/updateMessage.ts @@ -54,11 +54,11 @@ export const updateMessage = async function ( return; } + message = await callbacks.run('beforeSaveMessage', message); + // TODO remove type cast message = await Message.beforeSave({ message: message as IMessage, room, user }); - message = await callbacks.run('beforeSaveMessage', message); - const { _id, ...editedMessage } = message; if (!editedMessage.msg) { diff --git a/apps/meteor/app/lib/server/index.ts b/apps/meteor/app/lib/server/index.ts index 8fa779ec9644..c2d4bdda7472 100644 --- a/apps/meteor/app/lib/server/index.ts +++ b/apps/meteor/app/lib/server/index.ts @@ -21,8 +21,6 @@ import './methods/createToken'; import './methods/deleteMessage'; import './methods/deleteUserOwnAccount'; import './methods/executeSlashCommandPreview'; -import './startup/filterATAllTag'; -import './startup/filterATHereTag'; import './methods/getChannelHistory'; import './methods/getRoomJoinCode'; import './methods/getRoomRoles'; diff --git a/apps/meteor/app/lib/server/startup/filterATAllTag.ts b/apps/meteor/app/lib/server/startup/filterATAllTag.ts deleted file mode 100644 index dfa3b1b1d84a..000000000000 --- a/apps/meteor/app/lib/server/startup/filterATAllTag.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { api } from '@rocket.chat/core-services'; -import { isEditedMessage } from '@rocket.chat/core-typings'; -import { Users } from '@rocket.chat/models'; -import { Meteor } from 'meteor/meteor'; -import moment from 'moment'; -import _ from 'underscore'; - -import { callbacks } from '../../../../lib/callbacks'; -import { i18n } from '../../../../server/lib/i18n'; -import { hasPermissionAsync } from '../../../authorization/server/functions/hasPermission'; - -callbacks.add( - 'beforeSaveMessage', - async (message) => { - // If the message was edited, or is older than 60 seconds (imported) - // the notifications will be skipped, so we can also skip this validation - if (isEditedMessage(message) || (message.ts && Math.abs(moment(message.ts).diff(moment())) > 60000)) { - return message; - } - - // Test if the message mentions include @all. - if (message.mentions != null && _.pluck(message.mentions, '_id').some((item) => item === 'all')) { - // Check if the user has permissions to use @all in both global and room scopes. - if ( - !(await hasPermissionAsync(message.u._id, 'mention-all')) && - !(await hasPermissionAsync(message.u._id, 'mention-all', message.rid)) - ) { - // Get the language of the user for the error notification. - const { language } = (await Users.findOneById(message.u._id)) || {}; - const action = i18n.t('Notify_all_in_this_room', { lng: language }); - - // Add a notification to the chat, informing the user that this - // action is not allowed. - void api.broadcast('notify.ephemeralMessage', message.u._id, message.rid, { - // TODO: i18n - msg: i18n.t('error-action-not-allowed', { action } as any, language), - }); - - // Also throw to stop propagation of 'sendMessage'. - throw new Meteor.Error('error-action-not-allowed', 'Notify all in this room not allowed', { - method: 'filterATAllTag', - action: 'Notify_all_in_this_room', - }); - } - } - - return message; - }, - callbacks.priority.MEDIUM, - 'filterATAllTag', -); diff --git a/apps/meteor/app/lib/server/startup/filterATHereTag.ts b/apps/meteor/app/lib/server/startup/filterATHereTag.ts deleted file mode 100644 index 305f03455d81..000000000000 --- a/apps/meteor/app/lib/server/startup/filterATHereTag.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { api } from '@rocket.chat/core-services'; -import { isEditedMessage } from '@rocket.chat/core-typings'; -import { Users } from '@rocket.chat/models'; -import { Meteor } from 'meteor/meteor'; -import moment from 'moment'; -import _ from 'underscore'; - -import { callbacks } from '../../../../lib/callbacks'; -import { i18n } from '../../../../server/lib/i18n'; -import { hasPermissionAsync } from '../../../authorization/server/functions/hasPermission'; - -callbacks.add( - 'beforeSaveMessage', - async (message) => { - // If the message was edited, or is older than 60 seconds (imported) - // the notifications will be skipped, so we can also skip this validation - if (isEditedMessage(message) || (message.ts && Math.abs(moment(message.ts).diff(moment())) > 60000)) { - return message; - } - - // Test if the message mentions include @here. - if (message.mentions != null && _.pluck(message.mentions, '_id').some((item) => item === 'here')) { - // Check if the user has permissions to use @here in both global and room scopes. - if ( - !(await hasPermissionAsync(message.u._id, 'mention-here')) && - !(await hasPermissionAsync(message.u._id, 'mention-here', message.rid)) - ) { - // Get the language of the user for the error notification. - const { language } = (await Users.findOneById(message.u._id)) || {}; - const action = i18n.t('Notify_active_in_this_room', { lng: language }); - - // Add a notification to the chat, informing the user that this - // action is not allowed. - void api.broadcast('notify.ephemeralMessage', message.u._id, message.rid, { - // TODO: i18n - msg: i18n.t('error-action-not-allowed', { action } as any, language), - }); - - // Also throw to stop propagation of 'sendMessage'. - throw new Meteor.Error('error-action-not-allowed', 'Notify here in this room not allowed', { - method: 'filterATHereTag', - action: 'Notify_active_in_this_room', - }); - } - } - - return message; - }, - callbacks.priority.MEDIUM, - 'filterATHereTag', -); diff --git a/apps/meteor/app/livechat/server/hooks/sendToCRM.ts b/apps/meteor/app/livechat/server/hooks/sendToCRM.ts index d435da17e8ec..44b55e1b82f8 100644 --- a/apps/meteor/app/livechat/server/hooks/sendToCRM.ts +++ b/apps/meteor/app/livechat/server/hooks/sendToCRM.ts @@ -269,7 +269,7 @@ callbacks.add( if (message.token && !settings.get('Livechat_webhook_on_visitor_message')) { return message; } - if (!settings.get('Livechat_webhook_on_agent_message')) { + if (!message.token && !settings.get('Livechat_webhook_on_agent_message')) { return message; } // if the message has a type means it is a special message (like the closing comment), so skips diff --git a/apps/meteor/app/livechat/server/lib/AnalyticsTyped.ts b/apps/meteor/app/livechat/server/lib/AnalyticsTyped.ts index 20717d6e02dd..1b0f7b4c2919 100644 --- a/apps/meteor/app/livechat/server/lib/AnalyticsTyped.ts +++ b/apps/meteor/app/livechat/server/lib/AnalyticsTyped.ts @@ -7,6 +7,6 @@ export const getAgentOverviewDataCached = mem(Analytics.getAgentOverviewData, { // while the data on the overview page is cached for 1 minute export const getAnalyticsOverviewDataCached = mem(Analytics.getAnalyticsOverviewData, { maxAge: 60000, cacheKey: JSON.stringify }); export const getAnalyticsOverviewDataCachedForRealtime = mem(Analytics.getAnalyticsOverviewData, { - maxAge: 5000, + maxAge: process.env.TEST_MODE === 'true' ? 1 : 5000, cacheKey: JSON.stringify, }); diff --git a/apps/meteor/app/livechat/server/lib/Helper.ts b/apps/meteor/app/livechat/server/lib/Helper.ts index 29e4e18f0e05..78351cdc6683 100644 --- a/apps/meteor/app/livechat/server/lib/Helper.ts +++ b/apps/meteor/app/livechat/server/lib/Helper.ts @@ -1,5 +1,5 @@ import { LivechatTransferEventType } from '@rocket.chat/apps-engine/definition/livechat'; -import { api, Message } from '@rocket.chat/core-services'; +import { api, Message, Omnichannel } from '@rocket.chat/core-services'; import type { ILivechatVisitor, IOmnichannelRoom, @@ -543,10 +543,8 @@ export const forwardRoomToDepartment = async (room: IOmnichannelRoom, guest: ILi agent = { agentId, username }; } - if (!RoutingManager.getConfig()?.autoAssignAgent) { - logger.debug( - `Routing algorithm doesn't support auto assignment (using ${RoutingManager.methodName}). Chat will be on department queue`, - ); + if (!RoutingManager.getConfig()?.autoAssignAgent || !(await Omnichannel.isWithinMACLimit(room))) { + logger.debug(`Room ${room._id} will be on department queue`); await LivechatTyped.saveTransferHistory(room, transferData); return RoutingManager.unassignAgent(inquiry, departmentId); } diff --git a/apps/meteor/app/livechat/server/lib/LivechatTyped.ts b/apps/meteor/app/livechat/server/lib/LivechatTyped.ts index 317d2e6c7b53..27c99d4e1000 100644 --- a/apps/meteor/app/livechat/server/lib/LivechatTyped.ts +++ b/apps/meteor/app/livechat/server/lib/LivechatTyped.ts @@ -527,11 +527,7 @@ class LivechatClass { throw new Error('error-invalid-room'); } - if (!(await Omnichannel.isWithinMACLimit(room))) { - throw new Error('error-mac-limit-reached'); - } - - const showAgentInfo = settings.get('Livechat_show_agent_info'); + const showAgentInfo = settings.get('Livechat_show_agent_info'); const closingMessage = await Messages.findLivechatClosingMessage(rid, { projection: { ts: 1 } }); const ignoredMessageTypes: MessageTypesValues[] = [ 'livechat_navigation_history', diff --git a/apps/meteor/app/livechat/server/lib/RoutingManager.ts b/apps/meteor/app/livechat/server/lib/RoutingManager.ts index e9c173d86913..7b85c31f26ac 100644 --- a/apps/meteor/app/livechat/server/lib/RoutingManager.ts +++ b/apps/meteor/app/livechat/server/lib/RoutingManager.ts @@ -10,6 +10,7 @@ import type { InquiryWithAgentInfo, TransferData, } from '@rocket.chat/core-typings'; +import { License } from '@rocket.chat/license'; import { Logger } from '@rocket.chat/logger'; import { LivechatInquiry, LivechatRooms, Subscriptions, Rooms, Users } from '@rocket.chat/models'; import { Match, check } from 'meteor/check'; @@ -82,6 +83,13 @@ export const RoutingManager: Routing = { this.methodName = name; } + const shouldPreventQueueStart = await License.shouldPreventAction('monthlyActiveContacts'); + + if (shouldPreventQueueStart) { + logger.error('Monthly Active Contacts limit reached. Queue will not start'); + return; + } + void (await Omnichannel.getQueueWorker()).shouldStart(); }, @@ -178,10 +186,6 @@ export const RoutingManager: Routing = { return false; } - if (!(await Omnichannel.isWithinMACLimit(room))) { - throw new Error('error-mac-limit-reached'); - } - if (departmentId && departmentId !== department) { logger.debug(`Switching department for inquiry ${inquiry._id} [Current: ${department} | Next: ${departmentId}]`); await updateChatDepartment({ @@ -269,10 +273,6 @@ export const RoutingManager: Routing = { }, async transferRoom(room, guest, transferData) { - if (!(await Omnichannel.isWithinMACLimit(room))) { - throw new Error('error-mac-limit-reached'); - } - logger.debug(`Transfering room ${room._id} by ${transferData.transferredBy._id}`); if (transferData.departmentId) { logger.debug(`Transfering room ${room._id} to department ${transferData.departmentId}`); diff --git a/apps/meteor/app/livechat/server/methods/sendTranscript.ts b/apps/meteor/app/livechat/server/methods/sendTranscript.ts index 7456397de7b4..366a73c8bb0a 100644 --- a/apps/meteor/app/livechat/server/methods/sendTranscript.ts +++ b/apps/meteor/app/livechat/server/methods/sendTranscript.ts @@ -1,10 +1,11 @@ -import { Users } from '@rocket.chat/models'; +import { Omnichannel } from '@rocket.chat/core-services'; +import { LivechatRooms, Users } from '@rocket.chat/models'; import type { ServerMethods } from '@rocket.chat/ui-contexts'; import { check } from 'meteor/check'; -import { DDPRateLimiter } from 'meteor/ddp-rate-limiter'; import { Meteor } from 'meteor/meteor'; import { hasPermissionAsync } from '../../../authorization/server/functions/hasPermission'; +import { RateLimiter } from '../../../lib/server'; import { Livechat } from '../lib/LivechatTyped'; declare module '@rocket.chat/ui-contexts' { @@ -29,18 +30,21 @@ Meteor.methods({ const user = await Users.findOneById(uid, { projection: { _id: 1, username: 1, name: 1, utcOffset: 1 }, }); + + const room = await LivechatRooms.findOneById(rid, { projection: { activity: 1 } }); + if (!room) { + throw new Meteor.Error('error-invalid-room', 'Invalid room', { method: 'livechat:sendTranscript' }); + } + if (!(await Omnichannel.isWithinMACLimit(room))) { + throw new Meteor.Error('error-mac-limit-reached', 'MAC limit reached', { method: 'livechat:sendTranscript' }); + } + return Livechat.sendTranscript({ token, rid, email, subject, user }); }, }); -DDPRateLimiter.addRule( - { - type: 'method', - name: 'livechat:sendTranscript', - connectionId() { - return true; - }, +RateLimiter.limitMethod('livechat:sendTranscript', 1, 5000, { + connectionId() { + return true; }, - 1, - 5000, -); +}); diff --git a/apps/meteor/app/message-pin/server/pinMessage.ts b/apps/meteor/app/message-pin/server/pinMessage.ts index 906f0c98c181..24f910f01f71 100644 --- a/apps/meteor/app/message-pin/server/pinMessage.ts +++ b/apps/meteor/app/message-pin/server/pinMessage.ts @@ -108,10 +108,10 @@ Meteor.methods({ username: me.username, }; - originalMessage = await Message.beforeSave({ message: originalMessage, room, user: me }); - originalMessage = await callbacks.run('beforeSaveMessage', originalMessage); + originalMessage = await Message.beforeSave({ message: originalMessage, room, user: me }); + await Messages.setPinnedByIdAndUserId(originalMessage._id, originalMessage.pinnedBy, originalMessage.pinned); if (settings.get('Message_Read_Receipt_Store_Users')) { await ReadReceipts.setPinnedByMessageId(message._id, originalMessage.pinned); @@ -211,10 +211,10 @@ Meteor.methods({ throw new Meteor.Error('not-authorized', 'Not Authorized', { method: 'unpinMessage' }); } - originalMessage = await Message.beforeSave({ message: originalMessage, room, user: me }); - originalMessage = await callbacks.run('beforeSaveMessage', originalMessage); + originalMessage = await Message.beforeSave({ message: originalMessage, room, user: me }); + if (isTheLastMessage(room, message)) { await Rooms.setLastMessagePinned(room._id, originalMessage.pinnedBy, originalMessage.pinned); } diff --git a/apps/meteor/app/push/server/apn.ts b/apps/meteor/app/push/server/apn.ts index 1794a2886324..e64bf08c1c78 100644 --- a/apps/meteor/app/push/server/apn.ts +++ b/apps/meteor/app/push/server/apn.ts @@ -65,7 +65,7 @@ export const sendAPN = ({ note.payload.messageFrom = notification.from; note.priority = priority; - note.topic = `${notification.topic}${notification.apn?.topicSuffix || ''}`; + note.topic = notification.topic; note.mutableContent = true; void apnConnection.send(note, userToken).then((response) => { diff --git a/apps/meteor/app/push/server/definition.ts b/apps/meteor/app/push/server/definition.ts index 39ab94de0a36..c849d06c11b8 100644 --- a/apps/meteor/app/push/server/definition.ts +++ b/apps/meteor/app/push/server/definition.ts @@ -26,7 +26,6 @@ export type PendingPushNotification = { notId?: number; apn?: { category?: string; - topicSuffix?: string; }; gcm?: { style?: string; diff --git a/apps/meteor/app/push/server/push.ts b/apps/meteor/app/push/server/push.ts index fe08f7b0a214..a80631d335bf 100644 --- a/apps/meteor/app/push/server/push.ts +++ b/apps/meteor/app/push/server/push.ts @@ -201,13 +201,12 @@ class PushClass { } private getGatewayNotificationData(notification: PendingPushNotification): Omit { - // Gateway accepts every attribute from the PendingPushNotification type, except for the priority and apn.topicSuffix - const { priority: _priority, apn, ...notifData } = notification; - const { topicSuffix: _topicSuffix, ...apnData } = apn || ({} as RequiredField['apn']); + // Gateway currently accepts every attribute from the PendingPushNotification type, except for the priority + // If new attributes are added to the PendingPushNotification type, they'll need to be removed here as well. + const { priority: _priority, ...notifData } = notification; return { ...notifData, - ...(notification.apn ? { apn: { ...apnData } } : {}), }; } @@ -221,8 +220,6 @@ class PushClass { return; } - const { topicSuffix = '' } = notification.apn || {}; - const gatewayNotification = this.getGatewayNotificationData(notification); for (const gateway of this.options.gateways) { @@ -230,7 +227,7 @@ class PushClass { if ('apn' in app.token && app.token.apn) { countApn.push(app._id); - return this.sendGatewayPush(gateway, 'apn', app.token.apn, { topic: `${app.appName}${topicSuffix}`, ...gatewayNotification }); + return this.sendGatewayPush(gateway, 'apn', app.token.apn, { topic: app.appName, ...gatewayNotification }); } if ('gcm' in app.token && app.token.gcm) { @@ -318,7 +315,6 @@ class PushClass { contentAvailable: Match.Optional(Match.Integer), apn: Match.Optional({ category: Match.Optional(String), - topicSuffix: Match.Optional(String), }), gcm: Match.Optional({ image: Match.Optional(String), @@ -357,7 +353,7 @@ class PushClass { ...(this.hasApnOptions(options) ? { apn: { - ...pick(options.apn, 'category', 'topicSuffix'), + ...pick(options.apn, 'category'), }, } : {}), diff --git a/apps/meteor/app/smarsh-connector/server/functions/generateEml.ts b/apps/meteor/app/smarsh-connector/server/functions/generateEml.ts index f2b6ff355730..ce110cbff430 100644 --- a/apps/meteor/app/smarsh-connector/server/functions/generateEml.ts +++ b/apps/meteor/app/smarsh-connector/server/functions/generateEml.ts @@ -90,7 +90,12 @@ export const generateEml = async (): Promise => { if (message.t) { const messageType = MessageTypes.getType(message); if (messageType) { - rows.push(i18n.t(messageType.message, messageType.data ? messageType.data(message) : {}, 'en')); + rows.push( + i18n.t(messageType.message, { + lng: 'en', + replace: messageType.data ? messageType.data(message) : {}, + }), + ); } else { rows.push(`${message.msg} (${message.t})`); } diff --git a/apps/meteor/app/ui-message/client/ActionManager.ts b/apps/meteor/app/ui-message/client/ActionManager.ts index 14650c3e12a0..dc66a5407a8e 100644 --- a/apps/meteor/app/ui-message/client/ActionManager.ts +++ b/apps/meteor/app/ui-message/client/ActionManager.ts @@ -1,21 +1,18 @@ import type { DistributiveOmit, UiKit } from '@rocket.chat/core-typings'; import { Emitter } from '@rocket.chat/emitter'; import { Random } from '@rocket.chat/random'; -import type { ActionManagerContext, RouterContext } from '@rocket.chat/ui-contexts'; +import type { RouterContext, IActionManager } from '@rocket.chat/ui-contexts'; import type { ContextType } from 'react'; import { lazy } from 'react'; import * as banners from '../../../client/lib/banners'; import { imperativeModal } from '../../../client/lib/imperativeModal'; -import { router } from '../../../client/providers/RouterProvider'; import { sdk } from '../../utils/client/lib/SDKClient'; import { UiKitTriggerTimeoutError } from './UiKitTriggerTimeoutError'; const UiKitModal = lazy(() => import('../../../client/views/modal/uikit/UiKitModal')); -type ActionManagerType = Exclude, undefined>; - -export class ActionManager implements ActionManagerType { +export class ActionManager implements IActionManager { protected static TRIGGER_TIMEOUT = 5000; protected static TRIGGER_TIMEOUT_ERROR = 'TRIGGER_TIMEOUT_ERROR'; @@ -58,6 +55,14 @@ export class ActionManager implements ActionManagerType { return this.events.off(eventName, listener); } + public notifyBusy() { + this.events.emit('busy', { busy: true }); + } + + public notifyIdle() { + this.events.emit('busy', { busy: false }); + } + public generateTriggerId(appId: string | undefined) { const triggerId = Random.id(); this.triggersId.set(triggerId, appId); @@ -66,7 +71,7 @@ export class ActionManager implements ActionManagerType { } public async emitInteraction(appId: string, userInteraction: DistributiveOmit) { - this.events.emit('busy', { busy: true }); + this.notifyBusy(); const triggerId = this.generateTriggerId(appId); @@ -84,7 +89,7 @@ export class ActionManager implements ActionManagerType { .then((interaction) => this.handleServerInteraction(interaction)), ]).finally(() => { if (timeout) clearTimeout(timeout); - this.events.emit('busy', { busy: false }); + this.notifyIdle(); }); } @@ -115,20 +120,7 @@ export class ActionManager implements ActionManagerType { case 'modal.open': { const { view } = interaction; - const instance = imperativeModal.open({ - component: UiKitModal, - props: { - key: view.id, - initialView: interaction.view, - }, - }); - - this.viewInstances.set(view.id, { - close: () => { - instance.close(); - this.viewInstances.delete(view.id); - }, - }); + this.openModal(view); break; } @@ -151,12 +143,7 @@ export class ActionManager implements ActionManagerType { case 'banner.open': { const { type, triggerId, ...view } = interaction; - banners.open(view); - this.viewInstances.set(view.viewId, { - close: () => { - banners.closeById(view.viewId); - }, - }); + this.openBanner(view); break; } @@ -181,30 +168,7 @@ export class ActionManager implements ActionManagerType { case 'contextual_bar.open': { const { view } = interaction; - this.viewInstances.set(view.id, { - payload: { - view, - }, - close: () => { - this.viewInstances.delete(view.id); - }, - }); - - const routeName = this.router.getRouteName(); - const routeParams = this.router.getRouteParameters(); - - if (!routeName) { - break; - } - - this.router.navigate({ - name: routeName, - params: { - ...routeParams, - tab: 'app', - context: view.id, - }, - }); + this.openContextualBar(view); break; } @@ -226,12 +190,84 @@ export class ActionManager implements ActionManagerType { return this.viewInstances.get(viewId)?.payload; } + public openView(surface: 'modal', view: UiKit.ModalView): void; + + public openView(surface: 'banner', view: UiKit.BannerView): void; + + public openView(surface: 'contextual_bar', view: UiKit.ContextualBarView): void; + + public openView(surface: string, view: UiKit.View) { + switch (surface) { + case 'modal': + this.openModal(view as UiKit.ModalView); + break; + + case 'banner': + this.openBanner(view as UiKit.BannerView); + break; + + case 'contextual_bar': + this.openContextualBar(view as UiKit.ContextualBarView); + break; + } + } + + private openModal(view: UiKit.ModalView) { + const instance = imperativeModal.open({ + component: UiKitModal, + props: { + key: view.id, + initialView: view, + }, + }); + + this.viewInstances.set(view.id, { + close: () => { + instance.close(); + this.viewInstances.delete(view.id); + }, + }); + } + + private openBanner(view: UiKit.BannerView) { + banners.open(view); + this.viewInstances.set(view.viewId, { + close: () => { + banners.closeById(view.viewId); + }, + }); + } + + private openContextualBar(view: UiKit.ContextualBarView) { + this.viewInstances.set(view.id, { + payload: { + view, + }, + close: () => { + this.viewInstances.delete(view.id); + }, + }); + + const routeName = this.router.getRouteName(); + const routeParams = this.router.getRouteParameters(); + + if (!routeName) { + return; + } + + this.router.navigate({ + name: routeName, + params: { + ...routeParams, + tab: 'app', + context: view.id, + }, + }); + } + public disposeView(viewId: UiKit.ModalView['id'] | UiKit.BannerView['viewId'] | UiKit.ContextualBarView['id']) { const instance = this.viewInstances.get(viewId); instance?.close?.(); this.viewInstances.delete(viewId); } } - -/** @deprecated consumer should use the context instead */ -export const actionManager = new ActionManager(router); diff --git a/apps/meteor/app/ui/client/lib/ChatMessages.ts b/apps/meteor/app/ui/client/lib/ChatMessages.ts index 4563bae81d52..2e7c4a479e86 100644 --- a/apps/meteor/app/ui/client/lib/ChatMessages.ts +++ b/apps/meteor/app/ui/client/lib/ChatMessages.ts @@ -1,5 +1,6 @@ import type { IMessage, IRoom, IUser } from '@rocket.chat/core-typings'; import { isVideoConfMessage } from '@rocket.chat/core-typings'; +import type { IActionManager } from '@rocket.chat/ui-contexts'; import type { UIEvent } from 'react'; import type { ChatAPI, ComposerAPI, DataAPI, UploadsAPI } from '../../../../client/lib/chats/ChatAPI'; @@ -18,7 +19,6 @@ import { setHighlightMessage, clearHighlightMessage, } from '../../../../client/views/room/MessageList/providers/messageHighlightSubscription'; -import { actionManager } from '../../../ui-message/client/ActionManager'; import { UserAction } from './UserAction'; type DeepWritable = T extends (...args: any) => any @@ -144,13 +144,14 @@ export class ChatMessages implements ChatAPI { rid: IRoom['_id']; tmid?: IMessage['_id']; uid: IUser['_id'] | null; + actionManager: IActionManager; }, ) { const { rid, tmid } = params; this.uid = params.uid; this.data = createDataAPI({ rid, tmid }); this.uploads = createUploadsAPI({ rid, tmid }); - this.ActionManager = actionManager; + this.ActionManager = params.actionManager; const unimplemented = () => { throw new Error('Flow is not implemented'); diff --git a/apps/meteor/app/ui/client/lib/userCard.tsx b/apps/meteor/app/ui/client/lib/userCard.tsx index 98bfca9e53fc..e4fd5b343140 100644 --- a/apps/meteor/app/ui/client/lib/userCard.tsx +++ b/apps/meteor/app/ui/client/lib/userCard.tsx @@ -68,7 +68,7 @@ export const openUserCard = (params: Omit) => { if (!unregisterPortal) { const children = createElement(UserCardWithProps); - const portal = createPortal(children, container); + const portal = <>{createPortal(children, container)}; unregisterPortal = registerPortal(container, portal); } diff --git a/apps/meteor/app/utils/lib/i18n.ts b/apps/meteor/app/utils/lib/i18n.ts index 7fa491d965e8..a491159e49e9 100644 --- a/apps/meteor/app/utils/lib/i18n.ts +++ b/apps/meteor/app/utils/lib/i18n.ts @@ -5,7 +5,7 @@ import { isObject } from '../../../lib/utils/isObject'; export const i18n = i18next.use(sprintf); -export const addSprinfToI18n = function (t: (typeof i18n)['t']) { +export const addSprinfToI18n = function (t: (key: string, ...replaces: any) => string) { return function (key: string, ...replaces: any): string { if (replaces[0] === undefined || (isObject(replaces[0]) && !Array.isArray(replaces[0]))) { return t(key, ...replaces); diff --git a/apps/meteor/app/utils/rocketchat.info b/apps/meteor/app/utils/rocketchat.info index b9e235456291..a193b82aaedc 100644 --- a/apps/meteor/app/utils/rocketchat.info +++ b/apps/meteor/app/utils/rocketchat.info @@ -1,3 +1,3 @@ { - "version": "6.5.0-develop" + "version": "6.6.0-develop" } diff --git a/apps/meteor/client/components/TooltipPortal.tsx b/apps/meteor/client/components/TooltipPortal.tsx index f841e59899f0..937f6ed879ca 100644 --- a/apps/meteor/client/components/TooltipPortal.tsx +++ b/apps/meteor/client/components/TooltipPortal.tsx @@ -1,5 +1,5 @@ import type { FC } from 'react'; -import { memo, useEffect, useState } from 'react'; +import React, { memo, useEffect, useState } from 'react'; import { createPortal } from 'react-dom'; import { createAnchor } from '../lib/utils/createAnchor'; @@ -8,7 +8,7 @@ import { deleteAnchor } from '../lib/utils/deleteAnchor'; const TooltipPortal: FC = ({ children }) => { const [tooltipRoot] = useState(() => createAnchor('react-tooltip')); useEffect(() => (): void => deleteAnchor(tooltipRoot), [tooltipRoot]); - return createPortal(children, tooltipRoot); + return <>{createPortal(children, tooltipRoot)}; }; export default memo(TooltipPortal); diff --git a/apps/meteor/client/components/message/uikit/UiKitMessageBlock.tsx b/apps/meteor/client/components/message/uikit/UiKitMessageBlock.tsx index 22db3777518b..dbdd8f4e731b 100644 --- a/apps/meteor/client/components/message/uikit/UiKitMessageBlock.tsx +++ b/apps/meteor/client/components/message/uikit/UiKitMessageBlock.tsx @@ -2,7 +2,6 @@ import type { IMessage, IRoom } from '@rocket.chat/core-typings'; import { MessageBlock } from '@rocket.chat/fuselage'; import { UiKitComponent, UiKitMessage as UiKitMessageSurfaceRender, UiKitContext } from '@rocket.chat/fuselage-ui-kit'; import type { MessageSurfaceLayout } from '@rocket.chat/ui-kit'; -import type { ReactElement } from 'react'; import React from 'react'; import { useMessageBlockContextValue } from '../../../uikit/hooks/useMessageBlockContextValue'; @@ -14,7 +13,7 @@ type UiKitMessageBlockProps = { blocks: MessageSurfaceLayout; }; -const UiKitMessageBlock = ({ rid, mid, blocks }: UiKitMessageBlockProps): ReactElement => { +const UiKitMessageBlock = ({ rid, mid, blocks }: UiKitMessageBlockProps) => { const contextValue = useMessageBlockContextValue(rid, mid); return ( diff --git a/apps/meteor/client/components/modal/ModalPortal.tsx b/apps/meteor/client/components/modal/ModalPortal.tsx index 2b2b198462f5..577f89e72103 100644 --- a/apps/meteor/client/components/modal/ModalPortal.tsx +++ b/apps/meteor/client/components/modal/ModalPortal.tsx @@ -1,5 +1,5 @@ import type { ReactElement, ReactNode } from 'react'; -import { memo, useEffect, useState } from 'react'; +import React, { memo, useEffect, useState } from 'react'; import { createPortal } from 'react-dom'; import { createAnchor } from '../../lib/utils/createAnchor'; @@ -15,7 +15,7 @@ type ModalPortalProps = { const ModalPortal = ({ children }: ModalPortalProps): ReactElement => { const [modalRoot] = useState(() => createAnchor('modal-root')); useEffect(() => (): void => deleteAnchor(modalRoot), [modalRoot]); - return createPortal(children, modalRoot); + return <>{createPortal(children, modalRoot)}; }; export default memo(ModalPortal); diff --git a/apps/meteor/client/hooks/useAppTranslations.ts b/apps/meteor/client/hooks/useAppTranslations.ts deleted file mode 100644 index bf4f83e48d85..000000000000 --- a/apps/meteor/client/hooks/useAppTranslations.ts +++ /dev/null @@ -1,74 +0,0 @@ -import { useDebouncedCallback } from '@rocket.chat/fuselage-hooks'; -import { useEndpoint, useSingleStream, useUserId } from '@rocket.chat/ui-contexts'; -import { useQuery, useQueryClient } from '@tanstack/react-query'; -import { useEffect } from 'react'; - -import { i18n } from '../../app/utils/lib/i18n'; -import { Utilities } from '../../ee/lib/misc/Utilities'; - -export const useAppTranslations = () => { - const queryClient = useQueryClient(); - - const apps = useSingleStream('apps'); - const uid = useUserId(); - - const getAppsLanguages = useEndpoint('GET', '/apps/languages'); - - const result = useQuery(['apps', 'translations'], () => getAppsLanguages(), { - staleTime: Infinity, - }); - - useEffect(() => { - if (result.data) { - result.data.apps.forEach(({ id, languages }) => { - loadAppI18nResources(id, languages); - }); - } - }, [result.data]); - - const invalidate = useDebouncedCallback( - () => { - queryClient.invalidateQueries(['apps', 'translations']); - }, - 100, - [], - ); - - useEffect(() => { - if (!uid) { - return; - } - - return apps('apps', ([key]) => { - if (['app/added'].includes(key)) { - invalidate(); - } - }); - }, [uid, apps, invalidate]); - - const loadAppI18nResources = ( - appId: string, - languages: { - [key: string]: { - Params: string; - Description: string; - Setting_Name: string; - Setting_Description: string; - }; - }, - ) => { - Object.entries(languages).forEach(([language, translations]) => { - const regex = /([a-z]{2,3})-([a-z]{2,4})/; - const match = regex.exec(language); - const normalizedLanguage = match ? `${match[1]}-${match[2].toUpperCase()}` : language; - - // Translations keys must be scoped under app id - const scopedTranslations = Object.entries(translations).reduce>((acc, [key, value]) => { - acc[Utilities.getI18nKeyForApp(key, appId)] = value; - return acc; - }, {}); - - i18n.addResourceBundle(normalizedLanguage, 'core', scopedTranslations); - }); - }; -}; diff --git a/apps/meteor/client/hooks/useIsEnterprise.ts b/apps/meteor/client/hooks/useIsEnterprise.ts index f91d754014c4..e2622d8b695d 100644 --- a/apps/meteor/client/hooks/useIsEnterprise.ts +++ b/apps/meteor/client/hooks/useIsEnterprise.ts @@ -1,13 +1,8 @@ import type { OperationResult } from '@rocket.chat/rest-typings'; -import { useEndpoint } from '@rocket.chat/ui-contexts'; import type { UseQueryResult } from '@tanstack/react-query'; -import { useQuery } from '@tanstack/react-query'; -export const useIsEnterprise = (): UseQueryResult> => { - const isEnterpriseEdition = useEndpoint('GET', '/v1/licenses.isEnterprise'); +import { useLicenseBase } from './useLicense'; - return useQuery(['licenses', 'isEnterprise'], () => isEnterpriseEdition(), { - keepPreviousData: true, - staleTime: Infinity, - }); +export const useIsEnterprise = (): UseQueryResult> => { + return useLicenseBase({ select: (data) => ({ isEnterprise: Boolean(data?.license.license) }) }); }; diff --git a/apps/meteor/client/hooks/useLicense.ts b/apps/meteor/client/hooks/useLicense.ts index a2ea89359f87..bdf983061d66 100644 --- a/apps/meteor/client/hooks/useLicense.ts +++ b/apps/meteor/client/hooks/useLicense.ts @@ -1,11 +1,11 @@ import type { Serialized } from '@rocket.chat/core-typings'; import type { OperationResult } from '@rocket.chat/rest-typings'; -import { useEndpoint, useSingleStream } from '@rocket.chat/ui-contexts'; +import { useEndpoint, useSingleStream, useUserId } from '@rocket.chat/ui-contexts'; import type { QueryClient, UseQueryResult } from '@tanstack/react-query'; import { useQuery, useQueryClient } from '@tanstack/react-query'; import { useEffect } from 'react'; -type LicenseDataType = Awaited>['license']; +type LicenseDataType = Serialized>>; type LicenseParams = { loadValues?: boolean; @@ -18,12 +18,20 @@ const invalidateQueryClientLicenses = (() => { clearTimeout(timeout); timeout = setTimeout(() => { timeout = undefined; - queryClient.invalidateQueries(['licenses', 'getLicenses']); + queryClient.invalidateQueries(['licenses']); }, 5000); }; })(); -export const useLicense = (params?: LicenseParams): UseQueryResult> => { +export const useLicenseBase = ({ + params, + select, +}: { + params?: LicenseParams; + select: (data: LicenseDataType) => TData; +}) => { + const uid = useUserId(); + const getLicenses = useEndpoint('GET', '/v1/licenses.info'); const invalidateQueries = useInvalidateLicense(); @@ -32,15 +40,27 @@ export const useLicense = (params?: LicenseParams): UseQueryResult notify('license', () => invalidateQueries()), [notify, invalidateQueries]); - return useQuery(['licenses', 'getLicenses', params?.loadValues], () => getLicenses({ ...params }), { + return useQuery(['licenses', 'getLicenses', params], () => getLicenses({ ...params }), { staleTime: Infinity, keepPreviousData: true, - select: (data) => data.license, + select, + enabled: !!uid, }); }; +export const useLicense = (params?: LicenseParams) => { + return useLicenseBase({ params, select: (data) => data.license }); +}; + +export const useHasLicense = (): UseQueryResult => { + return useLicenseBase({ select: (data) => Boolean(data.license) }); +}; + +export const useLicenseName = (params?: LicenseParams) => { + return useLicenseBase({ params, select: (data) => data?.license.tags?.map((tag) => tag.name).join(' ') || 'Community' }); +}; + export const useInvalidateLicense = () => { const queryClient = useQueryClient(); - return () => invalidateQueryClientLicenses(queryClient); }; diff --git a/apps/meteor/client/hooks/useShouldPreventAction.ts b/apps/meteor/client/hooks/useShouldPreventAction.ts new file mode 100644 index 000000000000..edcbd5abe676 --- /dev/null +++ b/apps/meteor/client/hooks/useShouldPreventAction.ts @@ -0,0 +1,9 @@ +import type { LicenseLimitKind } from '@rocket.chat/license'; + +import { useLicense } from './useLicense'; + +export const useShouldPreventAction = (action: LicenseLimitKind): boolean => { + const { data: { preventedActions } = {} } = useLicense(); + + return Boolean(preventedActions?.[action]); +}; diff --git a/apps/meteor/client/hooks/useTranslationsForApps.ts b/apps/meteor/client/hooks/useTranslationsForApps.ts new file mode 100644 index 000000000000..9cc4fd8c0991 --- /dev/null +++ b/apps/meteor/client/hooks/useTranslationsForApps.ts @@ -0,0 +1,58 @@ +import { normalizeLanguage } from '@rocket.chat/tools'; +import { useEndpoint, useSingleStream, useUserId } from '@rocket.chat/ui-contexts'; +import { useQuery, useQueryClient } from '@tanstack/react-query'; +import { useEffect } from 'react'; +import { useTranslation } from 'react-i18next'; + +import { withDebouncing } from '../../lib/utils/highOrderFunctions'; + +export const useTranslationsForApps = () => { + const getAppsLanguages = useEndpoint('GET', '/apps/languages'); + + const { isSuccess, data } = useQuery({ + queryKey: ['apps', 'translations'] as const, + queryFn: () => getAppsLanguages(), + staleTime: Infinity, + }); + + const { i18n } = useTranslation(); + + useEffect(() => { + if (!isSuccess) { + return; + } + + data.apps.forEach(({ id: appId, languages }) => { + Object.entries(languages).forEach(([language, translations]) => { + const normalizedLanguage = normalizeLanguage(language); + const namespace = `app-${appId}`; + i18n.addResourceBundle(normalizedLanguage, namespace, translations); + }); + }); + }, [i18n, data, isSuccess]); + + const queryClient = useQueryClient(); + const subscribeToApps = useSingleStream('apps'); + const uid = useUserId(); + + useEffect(() => { + if (!uid) { + return; + } + + const invalidate = withDebouncing({ wait: 100 })(() => { + queryClient.invalidateQueries(['apps', 'translations']); + }); + + const unsubscribe = subscribeToApps('apps', ([key]) => { + if (key === 'app/added') { + invalidate(); + } + }); + + return () => { + unsubscribe(); + invalidate.cancel(); + }; + }, [uid, subscribeToApps, queryClient]); +}; diff --git a/apps/meteor/client/hooks/useWorkspaceInfo.ts b/apps/meteor/client/hooks/useWorkspaceInfo.ts index 472a8ed334dd..fbc9ba872556 100644 --- a/apps/meteor/client/hooks/useWorkspaceInfo.ts +++ b/apps/meteor/client/hooks/useWorkspaceInfo.ts @@ -3,7 +3,7 @@ import type { IInstance } from '@rocket.chat/rest-typings'; import { useEndpoint } from '@rocket.chat/ui-contexts'; import { useMutation, useQueries, useQueryClient } from '@tanstack/react-query'; -export const useWorkspaceInfo = () => { +export const useWorkspaceInfo = ({ refreshStatistics }: { refreshStatistics?: boolean } = {}) => { const getStatistics = useEndpoint('GET', '/v1/statistics'); const getInstances = useEndpoint('GET', '/v1/instances.get'); const getServerInfo = useEndpoint('GET', '/info'); @@ -49,7 +49,7 @@ export const useWorkspaceInfo = () => { }, { queryKey: ['info', 'statistics'], - queryFn: () => getStatistics({ refresh: 'true' }), + queryFn: () => getStatistics({ refresh: refreshStatistics ? 'true' : 'false' }), staleTime: Infinity, keepPreviousData: true, select: (data: Serialized) => ({ diff --git a/apps/meteor/client/lib/appLayout.tsx b/apps/meteor/client/lib/appLayout.tsx index 1c39e3dece10..3962a0f300cb 100644 --- a/apps/meteor/client/lib/appLayout.tsx +++ b/apps/meteor/client/lib/appLayout.tsx @@ -7,6 +7,7 @@ const BannerRegion = lazy(() => import('../views/banners/BannerRegion')); const PortalsWrapper = lazy(() => import('../views/root/PortalsWrapper')); const ModalRegion = lazy(() => import('../views/modal/ModalRegion')); const ActionManagerBusyState = lazy(() => import('../components/ActionManagerBusyState')); +const CloudAnnouncementsRegion = lazy(() => import('../views/cloud/CloudAnnouncementsRegion')); type AppLayoutDescriptor = ReactElement | null; @@ -23,10 +24,6 @@ class AppLayoutSubscription extends Emitter<{ update: void }> { } render(element: ReactElement): void { - this.setCurrentValue(this.wrap(element)); - } - - renderStandalone(element: ReactElement): void { this.setCurrentValue(element); } @@ -35,6 +32,7 @@ class AppLayoutSubscription extends Emitter<{ update: void }> { <> + {element} diff --git a/apps/meteor/client/lib/chats/ChatAPI.ts b/apps/meteor/client/lib/chats/ChatAPI.ts index 8242de07d791..36f40f404a4f 100644 --- a/apps/meteor/client/lib/chats/ChatAPI.ts +++ b/apps/meteor/client/lib/chats/ChatAPI.ts @@ -1,4 +1,5 @@ import type { IMessage, IRoom, ISubscription } from '@rocket.chat/core-typings'; +import type { IActionManager } from '@rocket.chat/ui-contexts'; import type { UIEvent } from 'react'; import type { FormattingButton } from '../../../app/ui-message/client/messageBox/messageBoxFormatting'; @@ -141,7 +142,7 @@ export type ChatAPI = { performContinuously(action: 'recording' | 'uploading' | 'playing'): void; }; - ActionManager: any; + ActionManager: IActionManager; readonly flows: { readonly uploadFiles: (files: readonly File[], resetFileInput?: () => void) => Promise; diff --git a/apps/meteor/client/lib/chats/flows/processSlashCommand.ts b/apps/meteor/client/lib/chats/flows/processSlashCommand.ts index c9922162a67c..52fa050c743f 100644 --- a/apps/meteor/client/lib/chats/flows/processSlashCommand.ts +++ b/apps/meteor/client/lib/chats/flows/processSlashCommand.ts @@ -4,7 +4,6 @@ import { escapeHTML } from '@rocket.chat/string-helpers'; import { hasAtLeastOnePermission } from '../../../../app/authorization/client'; import { settings } from '../../../../app/settings/client'; -import { actionManager } from '../../../../app/ui-message/client/ActionManager'; import { slashCommands } from '../../../../app/utils/client'; import { sdk } from '../../../../app/utils/client/lib/SDKClient'; import { t } from '../../../../app/utils/lib/i18n'; @@ -78,7 +77,7 @@ export const processSlashCommand = async (chat: ChatAPI, message: IMessage): Pro params: [{ eventName: 'slashCommandsStats', timestamp: Date.now(), command: commandName }], }); - const triggerId = actionManager.generateTriggerId(appId); + const triggerId = chat.ActionManager.generateTriggerId(appId); const data = { cmd: commandName, @@ -89,7 +88,7 @@ export const processSlashCommand = async (chat: ChatAPI, message: IMessage): Pro try { if (appId) { - chat.ActionManager.events.emit('busy', { busy: true }); + chat.ActionManager.notifyBusy(); } const result = await sdk.call('slashCommand', { cmd: commandName, params, msg: message, triggerId }); @@ -101,7 +100,7 @@ export const processSlashCommand = async (chat: ChatAPI, message: IMessage): Pro } if (appId) { - chat.ActionManager.events.emit('busy', { busy: false }); + chat.ActionManager.notifyIdle(); } return true; diff --git a/apps/meteor/client/lib/utils/isOverLicenseLimits.ts b/apps/meteor/client/lib/utils/isOverLicenseLimits.ts index 3bb8d1d50dbf..e2978a2d4c28 100644 --- a/apps/meteor/client/lib/utils/isOverLicenseLimits.ts +++ b/apps/meteor/client/lib/utils/isOverLicenseLimits.ts @@ -9,4 +9,4 @@ type Limits = Record< >; export const isOverLicenseLimits = (limits: Limits): boolean => - Object.values(limits).some((limit) => limit.value !== undefined && limit.value > limit.max); + Object.values(limits).some((limit) => limit.value !== undefined && limit.max !== -1 && limit.value > limit.max); diff --git a/apps/meteor/client/portals/VideoConfPopupPortal.ts b/apps/meteor/client/portals/VideoConfPopupPortal.tsx similarity index 82% rename from apps/meteor/client/portals/VideoConfPopupPortal.ts rename to apps/meteor/client/portals/VideoConfPopupPortal.tsx index 5e4f22612c62..b1c0746e93e2 100644 --- a/apps/meteor/client/portals/VideoConfPopupPortal.ts +++ b/apps/meteor/client/portals/VideoConfPopupPortal.tsx @@ -1,5 +1,5 @@ import type { ReactElement, ReactNode } from 'react'; -import { memo, useEffect, useState } from 'react'; +import React, { memo, useEffect, useState } from 'react'; import { createPortal } from 'react-dom'; import { createAnchor } from '../lib/utils/createAnchor'; @@ -12,7 +12,7 @@ type VideoConfPortalProps = { const VideoConfPortal = ({ children }: VideoConfPortalProps): ReactElement => { const [videoConfRoot] = useState(() => createAnchor('video-conf-root')); useEffect(() => (): void => deleteAnchor(videoConfRoot), [videoConfRoot]); - return createPortal(children, videoConfRoot); + return <>{createPortal(children, videoConfRoot)}; }; export default memo(VideoConfPortal); diff --git a/apps/meteor/client/providers/ActionManagerProvider.tsx b/apps/meteor/client/providers/ActionManagerProvider.tsx index e8961ec357e9..7305a4b1a674 100644 --- a/apps/meteor/client/providers/ActionManagerProvider.tsx +++ b/apps/meteor/client/providers/ActionManagerProvider.tsx @@ -1,19 +1,22 @@ -import { ActionManagerContext } from '@rocket.chat/ui-contexts'; +import { ActionManagerContext, useRouter } from '@rocket.chat/ui-contexts'; import type { ReactNode, ReactElement } from 'react'; import React from 'react'; -import { actionManager } from '../../app/ui-message/client/ActionManager'; +import { ActionManager } from '../../app/ui-message/client/ActionManager'; import { useAppActionButtons } from '../hooks/useAppActionButtons'; import { useAppSlashCommands } from '../hooks/useAppSlashCommands'; -import { useAppTranslations } from '../hooks/useAppTranslations'; import { useAppUiKitInteraction } from '../hooks/useAppUiKitInteraction'; +import { useTranslationsForApps } from '../hooks/useTranslationsForApps'; +import { useInstance } from '../views/room/providers/hooks/useInstance'; type ActionManagerProviderProps = { children?: ReactNode; }; const ActionManagerProvider = ({ children }: ActionManagerProviderProps): ReactElement => { - useAppTranslations(); + const router = useRouter(); + const actionManager = useInstance(() => [new ActionManager(router)], [router]); + useTranslationsForApps(); useAppActionButtons(); useAppSlashCommands(); useAppUiKitInteraction(actionManager.handleServerInteraction.bind(actionManager)); diff --git a/apps/meteor/client/providers/AppsProvider.tsx b/apps/meteor/client/providers/AppsProvider.tsx index 45ea9eadec29..bb35c01c4ae2 100644 --- a/apps/meteor/client/providers/AppsProvider.tsx +++ b/apps/meteor/client/providers/AppsProvider.tsx @@ -6,6 +6,8 @@ import React, { useEffect } from 'react'; import { AppClientOrchestratorInstance } from '../../ee/client/apps/orchestrator'; import { AppsContext } from '../contexts/AppsContext'; +import { useIsEnterprise } from '../hooks/useIsEnterprise'; +import { useInvalidateLicense } from '../hooks/useLicense'; import { AsyncStatePhase } from '../lib/asyncState'; import { useInvalidateAppsCountQueryCallback } from '../views/marketplace/hooks/useAppsCountQuery'; import type { App } from '../views/marketplace/types'; @@ -17,7 +19,11 @@ const AppsProvider: FC = ({ children }) => { const queryClient = useQueryClient(); + const { data } = useIsEnterprise(); + const isEnterprise = !!data?.isEnterprise; + const invalidateAppsCountQuery = useInvalidateAppsCountQueryCallback(); + const invalidateLicenseQuery = useInvalidateLicense(); const stream = useSingleStream('apps'); @@ -35,8 +41,11 @@ const AppsProvider: FC = ({ children }) => { if (['app/added', 'app/removed', 'app/updated', 'app/statusUpdate', 'app/settingUpdated'].includes(key)) { invalidate(); } + if (['app/added', 'app/removed'].includes(key) && !isEnterprise) { + invalidateLicenseQuery(); + } }); - }, [invalidate, stream]); + }, [invalidate, invalidateLicenseQuery, isEnterprise, stream]); const marketplace = useQuery( ['marketplace', 'apps-marketplace', isAdminUser], diff --git a/apps/meteor/client/providers/OmnichannelProvider.tsx b/apps/meteor/client/providers/OmnichannelProvider.tsx index 6e7cf38f8cd5..fcf57a399905 100644 --- a/apps/meteor/client/providers/OmnichannelProvider.tsx +++ b/apps/meteor/client/providers/OmnichannelProvider.tsx @@ -19,8 +19,8 @@ import { useHasLicenseModule } from '../../ee/client/hooks/useHasLicenseModule'; import { ClientLogger } from '../../lib/ClientLogger'; import type { OmnichannelContextValue } from '../contexts/OmnichannelContext'; import { OmnichannelContext } from '../contexts/OmnichannelContext'; -import { useLicense } from '../hooks/useLicense'; import { useReactiveValue } from '../hooks/useReactiveValue'; +import { useShouldPreventAction } from '../hooks/useShouldPreventAction'; const emptyContextValue: OmnichannelContextValue = { inquiries: { enabled: false }, @@ -76,9 +76,7 @@ const OmnichannelProvider: FC = ({ children }) => { enabled: isPrioritiesEnabled, }); - const { data: { preventedActions } = {} } = useLicense(); - - const isOverMacLimit = Boolean(preventedActions?.monthlyActiveContacts); + const isOverMacLimit = useShouldPreventAction('monthlyActiveContacts'); useEffect(() => { if (!isPrioritiesEnabled) { diff --git a/apps/meteor/client/providers/RouterProvider.tsx b/apps/meteor/client/providers/RouterProvider.tsx index 0f146ec83128..4f0aab3a602b 100644 --- a/apps/meteor/client/providers/RouterProvider.tsx +++ b/apps/meteor/client/providers/RouterProvider.tsx @@ -131,7 +131,7 @@ const defineRoutes = (routes: RouteObject[]) => { const flowRoutes = routes.map((route) => { if (route.path === '*') { FlowRouter.notFound = { - action: () => appLayout.renderStandalone(<>{route.element}), + action: () => appLayout.render(<>{route.element}), }; return FlowRouter.notFound; @@ -139,7 +139,7 @@ const defineRoutes = (routes: RouteObject[]) => { return FlowRouter.route(route.path, { name: route.id, - action: () => appLayout.renderStandalone(<>{route.element}), + action: () => appLayout.render(<>{route.element}), }); }); @@ -156,7 +156,7 @@ const defineRoutes = (routes: RouteObject[]) => { delete FlowRouter._routesMap[flowRoute.name]; } else { FlowRouter.notFound = { - action: () => appLayout.renderStandalone(<>), + action: () => appLayout.render(<>), }; } }); diff --git a/apps/meteor/client/providers/TranslationProvider.tsx b/apps/meteor/client/providers/TranslationProvider.tsx index 2cf47066c4e4..f9fdf299a5d6 100644 --- a/apps/meteor/client/providers/TranslationProvider.tsx +++ b/apps/meteor/client/providers/TranslationProvider.tsx @@ -1,6 +1,7 @@ import { useLocalStorage, useMutableCallback } from '@rocket.chat/fuselage-hooks'; import languages from '@rocket.chat/i18n/dist/languages'; import en from '@rocket.chat/i18n/src/locales/en.i18n.json'; +import { normalizeLanguage } from '@rocket.chat/tools'; import type { TranslationKey, TranslationContextValue } from '@rocket.chat/ui-contexts'; import { useMethod, useSetting, TranslationContext } from '@rocket.chat/ui-contexts'; import type i18next from 'i18next'; @@ -16,7 +17,6 @@ import { getURL } from '../../app/utils/client'; import { i18n, addSprinfToI18n } from '../../app/utils/lib/i18n'; import { AppClientOrchestratorInstance } from '../../ee/client/apps/orchestrator'; import { applyCustomTranslations } from '../lib/utils/applyCustomTranslations'; -import { filterLanguage } from '../lib/utils/filterLanguage'; import { isRTLScriptLanguage } from '../lib/utils/isRTLScriptLanguage'; i18n.use(I18NextHttpBackend).use(initReactI18next).use(sprintf); @@ -180,7 +180,7 @@ type TranslationProviderProps = { const useAutoLanguage = () => { const serverLanguage = useSetting('Language'); - const browserLanguage = filterLanguage(window.navigator.userLanguage ?? window.navigator.language); + const browserLanguage = normalizeLanguage(window.navigator.userLanguage ?? window.navigator.language); const defaultUserLanguage = browserLanguage || serverLanguage || 'en'; // if the language is supported, if not remove the region diff --git a/apps/meteor/client/sidebar/SidebarPortal.tsx b/apps/meteor/client/sidebar/SidebarPortal.tsx index 2b6594d11561..59856df71773 100644 --- a/apps/meteor/client/sidebar/SidebarPortal.tsx +++ b/apps/meteor/client/sidebar/SidebarPortal.tsx @@ -10,7 +10,7 @@ const SidebarPortal: FC = ({ children }) => { return null; } - return createPortal({children}, sidebarRoot); + return <>{createPortal({children}, sidebarRoot)}; }; export default memo(SidebarPortal); diff --git a/apps/meteor/client/sidebar/header/actions/hooks/useAuditItems.spec.tsx b/apps/meteor/client/sidebar/header/actions/hooks/useAuditItems.spec.tsx index a5a280262bd4..95d2d219bc14 100644 --- a/apps/meteor/client/sidebar/header/actions/hooks/useAuditItems.spec.tsx +++ b/apps/meteor/client/sidebar/header/actions/hooks/useAuditItems.spec.tsx @@ -6,7 +6,12 @@ import { useAuditItems } from './useAuditItems'; it('should return an empty array if doesn`t have license', async () => { const { result, waitFor } = renderHook(() => useAuditItems(), { wrapper: mockAppRoot() - .withMethod('license:getModules', () => []) + .withEndpoint('GET', '/v1/licenses.info', () => ({ + // @ts-expect-error: just for testing + license: { + activeModules: [], + }, + })) .withJohnDoe() .withPermission('can-audit') .withPermission('can-audit-log') @@ -21,6 +26,16 @@ it('should return an empty array if doesn`t have license', async () => { it('should return an empty array if have license and not have permissions', async () => { const { result, waitFor } = renderHook(() => useAuditItems(), { wrapper: mockAppRoot() + .withEndpoint('GET', '/v1/licenses.info', () => ({ + license: { + license: { + // @ts-expect-error: just for testing + grantedModules: [{ module: 'auditing' }], + }, + // @ts-expect-error: just for testing + activeModules: ['auditing'], + }, + })) .withMethod('license:getModules', () => ['auditing']) .withJohnDoe() .build(), @@ -34,7 +49,16 @@ it('should return an empty array if have license and not have permissions', asyn it('should return auditItems if have license and permissions', async () => { const { result, waitFor } = renderHook(() => useAuditItems(), { wrapper: mockAppRoot() - .withMethod('license:getModules', () => ['auditing']) + .withEndpoint('GET', '/v1/licenses.info', () => ({ + license: { + license: { + // @ts-expect-error: just for testing + grantedModules: [{ module: 'auditing' }], + }, + // @ts-expect-error: just for testing + activeModules: ['auditing'], + }, + })) .withJohnDoe() .withPermission('can-audit') .withPermission('can-audit-log') @@ -59,7 +83,16 @@ it('should return auditItems if have license and permissions', async () => { it('should return auditMessages item if have license and can-audit permission', async () => { const { result, waitFor } = renderHook(() => useAuditItems(), { wrapper: mockAppRoot() - .withMethod('license:getModules', () => ['auditing']) + .withEndpoint('GET', '/v1/licenses.info', () => ({ + license: { + license: { + // @ts-expect-error: just for testing + grantedModules: [{ module: 'auditing' }], + }, + // @ts-expect-error: just for testing + activeModules: ['auditing'], + }, + })) .withJohnDoe() .withPermission('can-audit') .build(), @@ -77,7 +110,16 @@ it('should return auditMessages item if have license and can-audit permission', it('should return audiLogs item if have license and can-audit-log permission', async () => { const { result, waitFor } = renderHook(() => useAuditItems(), { wrapper: mockAppRoot() - .withMethod('license:getModules', () => ['auditing']) + .withEndpoint('GET', '/v1/licenses.info', () => ({ + license: { + license: { + // @ts-expect-error: just for testing + grantedModules: [{ module: 'auditing' }], + }, + // @ts-expect-error: just for testing + activeModules: ['auditing'], + }, + })) .withJohnDoe() .withPermission('can-audit-log') .build(), diff --git a/apps/meteor/client/startup/startup.ts b/apps/meteor/client/startup/startup.ts index 6b2b66ec69d7..2541529a1aef 100644 --- a/apps/meteor/client/startup/startup.ts +++ b/apps/meteor/client/startup/startup.ts @@ -5,14 +5,11 @@ import { Session } from 'meteor/session'; import { Tracker } from 'meteor/tracker'; import moment from 'moment'; -import { hasPermission } from '../../app/authorization/client'; import { register } from '../../app/markdown/lib/hljs'; import { settings } from '../../app/settings/client'; import { getUserPreference } from '../../app/utils/client'; import 'hljs9/styles/github.css'; import { sdk } from '../../app/utils/client/lib/SDKClient'; -import { t } from '../../app/utils/lib/i18n'; -import * as banners from '../lib/banners'; import { synchronizeUserData, removeLocalUserData } from '../lib/userData'; import { fireGlobalEvent } from '../lib/utils/fireGlobalEvent'; @@ -60,31 +57,6 @@ Meteor.startup(() => { fireGlobalEvent('status-changed', status); } }); - - Tracker.autorun(async (c) => { - const uid = Meteor.userId(); - if (!uid) { - return; - } - - if (!hasPermission('manage-cloud')) { - return; - } - - const { - registrationStatus: { workspaceRegistered }, - } = await sdk.rest.get('/v1/cloud.registrationStatus'); - c.stop(); - - if (workspaceRegistered !== true) { - banners.open({ - id: 'cloud-registration', - title: () => t('Cloud_registration_pending_title'), - html: () => t('Cloud_registration_pending_html'), - modifiers: ['large', 'danger'], - }); - } - }); }); Meteor.startup(() => { Tracker.autorun(() => { diff --git a/apps/meteor/client/views/admin/rooms/EditRoom.tsx b/apps/meteor/client/views/admin/rooms/EditRoom.tsx index 3ed6b14c69c4..0f824d71f5c7 100644 --- a/apps/meteor/client/views/admin/rooms/EditRoom.tsx +++ b/apps/meteor/client/views/admin/rooms/EditRoom.tsx @@ -11,19 +11,20 @@ import { FieldHint, ToggleSwitch, TextAreaInput, + FieldError, } from '@rocket.chat/fuselage'; -import { useMutableCallback } from '@rocket.chat/fuselage-hooks'; -import { useTranslation } from '@rocket.chat/ui-contexts'; -import type { ReactElement } from 'react'; -import React, { useMemo } from 'react'; +import { useMutableCallback, useUniqueId } from '@rocket.chat/fuselage-hooks'; +import { useEndpoint, useToastMessageDispatch, useTranslation } from '@rocket.chat/ui-contexts'; +import React from 'react'; +import { useForm, Controller } from 'react-hook-form'; -import { RoomSettingsEnum } from '../../../../definition/IRoomTypeConfig'; import { ContextualbarScrollableContent, ContextualbarFooter } from '../../../components/Contextualbar'; import RoomAvatarEditor from '../../../components/avatar/RoomAvatarEditor'; -import { useEndpointAction } from '../../../hooks/useEndpointAction'; -import { useForm } from '../../../hooks/useForm'; +import { getDirtyFields } from '../../../lib/getDirtyFields'; import { roomCoordinator } from '../../../lib/rooms/roomCoordinator'; +import { useArchiveRoom } from '../../hooks/roomActions/useArchiveRoom'; import { useDeleteRoom } from '../../hooks/roomActions/useDeleteRoom'; +import { useEditAdminRoomPermissions } from './useEditAdminRoomPermissions'; type EditRoomProps = { room: Pick; @@ -61,197 +62,239 @@ const getInitialValues = (room: Pick): EditRoomFormV roomAvatar: undefined, }); -const EditRoom = ({ room, onChange, onDelete }: EditRoomProps): ReactElement => { +const EditRoom = ({ room, onChange, onDelete }: EditRoomProps) => { const t = useTranslation(); - - const { values, handlers, hasUnsavedChanges, reset } = useForm(getInitialValues(room)); - - const [canViewName, canViewTopic, canViewAnnouncement, canViewArchived, canViewDescription, canViewType, canViewReadOnly] = - useMemo(() => { - const isAllowed = roomCoordinator.getRoomDirectives(room.t).allowRoomSettingChange; - return [ - isAllowed?.(room, RoomSettingsEnum.NAME), - isAllowed?.(room, RoomSettingsEnum.TOPIC), - isAllowed?.(room, RoomSettingsEnum.ANNOUNCEMENT), - isAllowed?.(room, RoomSettingsEnum.ARCHIVE_OR_UNARCHIVE), - isAllowed?.(room, RoomSettingsEnum.DESCRIPTION), - isAllowed?.(room, RoomSettingsEnum.TYPE), - isAllowed?.(room, RoomSettingsEnum.READ_ONLY), - isAllowed?.(room, RoomSettingsEnum.REACT_WHEN_READ_ONLY), - ]; - }, [room]); + const dispatchToastMessage = useToastMessageDispatch(); const { - roomName, - roomType, - readOnly, - reactWhenReadOnly, - archived, - isDefault, - favorite, - featured, - roomTopic, - roomAvatar, - roomDescription, - roomAnnouncement, - } = values as EditRoomFormValues; + control, + watch, + reset, + handleSubmit, + formState: { isDirty, errors, dirtyFields }, + } = useForm({ defaultValues: getInitialValues(room) }); - const { - handleIsDefault, - handleFavorite, - handleFeatured, - handleRoomName, - handleRoomType, - handleReadOnly, - handleReactWhenReadOnly, - handleArchived, - handleRoomAvatar, - handleRoomTopic, - handleRoomDescription, - handleRoomAnnouncement, - } = handlers; + const { canViewName, canViewTopic, canViewAnnouncement, canViewArchived, canViewDescription, canViewType, canViewReadOnly } = + useEditAdminRoomPermissions(room); - const changeArchivation = archived !== !!room.archived; + const { roomType, readOnly, archived } = watch(); + + const changeArchiving = archived !== !!room.archived; const { handleDelete, canDeleteRoom, isDeleting } = useDeleteRoom(room, { reload: onDelete }); - const archiveSelector = room.archived ? 'unarchive' : 'archive'; - const archiveMessage = room.archived ? 'Room_has_been_unarchived' : 'Room_has_been_archived'; + const saveAction = useEndpoint('POST', '/v1/rooms.saveRoomSettings'); - const saveAction = useEndpointAction('POST', '/v1/rooms.saveRoomSettings', { - successMessage: t('Room_updated_successfully'), - }); - const archiveAction = useEndpointAction('POST', '/v1/rooms.changeArchivationState', { successMessage: t(archiveMessage) }); + const handleArchive = useArchiveRoom(room); - const handleSave = useMutableCallback(async () => { - const save = (): Promise<{ success: boolean; rid: string }> => - saveAction({ + const handleUpdateRoomData = useMutableCallback(async ({ isDefault, roomName, favorite, ...formData }) => { + const data = getDirtyFields(formData, dirtyFields); + + try { + await saveAction({ rid: room._id, roomName: roomType === 'd' ? undefined : roomName, - roomTopic, - roomType, - readOnly, default: isDefault, favorite: { defaultValue: isDefault, favorite }, - featured, - reactWhenReadOnly, - roomDescription, - roomAnnouncement, - roomAvatar, + ...data, }); - const archive = (): Promise<{ success: boolean }> => archiveAction({ rid: room._id, action: archiveSelector }); - - const promises = []; - hasUnsavedChanges && promises.push(save()); - changeArchivation && promises.push(archive()); - await Promise.all(promises); - onChange(); + dispatchToastMessage({ type: 'success', message: t('Room_updated_successfully') }); + onChange(); + } catch (error) { + dispatchToastMessage({ type: 'error', message: error }); + } }); - const changeRoomType = useMutableCallback(() => { - handleRoomType(roomType === 'p' ? 'c' : 'p'); + const handleSave = useMutableCallback(async (data) => { + await Promise.all([isDirty && handleUpdateRoomData(data), changeArchiving && handleArchive()].filter(Boolean)); }); + const roomNameField = useUniqueId(); + const ownerField = useUniqueId(); + const roomDescription = useUniqueId(); + const roomAnnouncement = useUniqueId(); + const roomTopicField = useUniqueId(); + const roomTypeField = useUniqueId(); + const readOnlyField = useUniqueId(); + const reactWhenReadOnly = useUniqueId(); + const archivedField = useUniqueId(); + const isDefaultField = useUniqueId(); + const favoriteField = useUniqueId(); + const featuredField = useUniqueId(); + return ( <> - e.preventDefault())}> + {room.t !== 'd' && ( - + ( + + )} + /> )} - {t('Name')} + + {t('Name')} + - + ( + + )} + /> + {errors?.roomName && ( + + {errors.roomName.message} + + )} {room.t !== 'd' && ( <> {room.u && ( - {t('Owner')} + {t('Owner')} - {room.u?.username} + )} {canViewDescription && ( - {t('Description')} + {t('Description')} - ( + + )} /> )} {canViewAnnouncement && ( - {t('Announcement')} + {t('Announcement')} - ( + + )} /> )} {canViewTopic && ( - {t('Topic')} + {t('Topic')} - + } + /> )} {canViewType && ( - {t('Private')} + {t('Private')} - + ( + onChange(value === 'p' ? 'c' : 'p')} + aria-describedby={`${roomTypeField}-hint`} + /> + )} + /> - {t('Just_invited_people_can_access_this_channel')} + {t('Just_invited_people_can_access_this_channel')} )} {canViewReadOnly && ( - {t('Read_only')} + {t('Read_only')} - + ( + + )} + /> - {t('Only_authorized_users_can_write_new_messages')} + {t('Only_authorized_users_can_write_new_messages')} )} {readOnly && ( - {t('React_when_read_only')} + {t('React_when_read_only')} - + ( + + )} + /> - {t('React_when_read_only_changed_successfully')} + {t('React_when_read_only_changed_successfully')} )} {canViewArchived && ( - {t('Room_archivation_state_true')} + {t('Room_archivation_state_true')} - + ( + + )} + /> @@ -260,35 +303,53 @@ const EditRoom = ({ room, onChange, onDelete }: EditRoomProps): ReactElement => )} - {t('Default')} + {t('Default')} - + ( + + )} + /> - {t('Favorite')} + {t('Favorite')} - + ( + + )} + /> - {t('Featured')} + {t('Featured')} - + ( + + )} + /> - - diff --git a/apps/meteor/client/views/admin/rooms/EditRoomContextBar.tsx b/apps/meteor/client/views/admin/rooms/EditRoomContextBar.tsx deleted file mode 100644 index e99841c730e3..000000000000 --- a/apps/meteor/client/views/admin/rooms/EditRoomContextBar.tsx +++ /dev/null @@ -1,13 +0,0 @@ -import { usePermission } from '@rocket.chat/ui-contexts'; -import type { ReactElement } from 'react'; -import React from 'react'; - -import NotAuthorizedPage from '../../notAuthorized/NotAuthorizedPage'; -import EditRoomWithData from './EditRoomWithData'; - -const EditRoomContextBar = ({ rid, onReload }: { rid: string | undefined; onReload: () => void }): ReactElement => { - const canViewRoomAdministration = usePermission('view-room-administration'); - return canViewRoomAdministration ? : ; -}; - -export default EditRoomContextBar; diff --git a/apps/meteor/client/views/admin/rooms/EditRoomWithData.tsx b/apps/meteor/client/views/admin/rooms/EditRoomWithData.tsx index a3d959fa4781..6bd487c8218a 100644 --- a/apps/meteor/client/views/admin/rooms/EditRoomWithData.tsx +++ b/apps/meteor/client/views/admin/rooms/EditRoomWithData.tsx @@ -1,16 +1,26 @@ -import { Box, Skeleton } from '@rocket.chat/fuselage'; -import { useEndpoint, useToastMessageDispatch } from '@rocket.chat/ui-contexts'; +import type { IRoom } from '@rocket.chat/core-typings'; +import { useEndpoint, useRouter, useToastMessageDispatch, useTranslation } from '@rocket.chat/ui-contexts'; import { useQuery } from '@tanstack/react-query'; -import type { FC } from 'react'; import React from 'react'; +import { + Contextualbar, + ContextualbarHeader, + ContextualbarTitle, + ContextualbarClose, + ContextualbarSkeleton, +} from '../../../components/Contextualbar'; import EditRoom from './EditRoom'; -const EditRoomWithData: FC<{ rid?: string; onReload: () => void }> = ({ rid, onReload }) => { - const getAdminRooms = useEndpoint('GET', '/v1/rooms.adminRooms.getRoom'); +type EditRoomWithDataProps = { rid?: IRoom['_id']; onReload: () => void }; +const EditRoomWithData = ({ rid, onReload }: EditRoomWithDataProps) => { + const t = useTranslation(); + const router = useRouter(); const dispatchToastMessage = useToastMessageDispatch(); + const getAdminRooms = useEndpoint('GET', '/v1/rooms.adminRooms.getRoom'); + const { data, isLoading, refetch } = useQuery( ['rooms', rid, 'admin'], async () => { @@ -25,16 +35,7 @@ const EditRoomWithData: FC<{ rid?: string; onReload: () => void }> = ({ rid, onR ); if (isLoading) { - return ( - - - - - - - - - ); + return ; } const handleChange = (): void => { @@ -46,7 +47,15 @@ const EditRoomWithData: FC<{ rid?: string; onReload: () => void }> = ({ rid, onR onReload(); }; - return data ? : null; + return data ? ( + + + {t('Room_Info')} + router.navigate('/admin/rooms')} /> + + + + ) : null; }; export default EditRoomWithData; diff --git a/apps/meteor/client/views/admin/rooms/RoomsPage.tsx b/apps/meteor/client/views/admin/rooms/RoomsPage.tsx index 08d384325505..9b51738ab7c7 100644 --- a/apps/meteor/client/views/admin/rooms/RoomsPage.tsx +++ b/apps/meteor/client/views/admin/rooms/RoomsPage.tsx @@ -1,23 +1,16 @@ -import { useRouteParameter, useRoute, useTranslation } from '@rocket.chat/ui-contexts'; +import { useRouteParameter, useTranslation } from '@rocket.chat/ui-contexts'; import type { ReactElement } from 'react'; import React, { useRef } from 'react'; -import { Contextualbar, ContextualbarHeader, ContextualbarTitle, ContextualbarClose } from '../../../components/Contextualbar'; import Page from '../../../components/Page'; -import EditRoomContextBar from './EditRoomContextBar'; +import EditRoomWithData from './EditRoomWithData'; import RoomsTable from './RoomsTable'; const RoomsPage = (): ReactElement => { const t = useTranslation(); - const context = useRouteParameter('context'); const id = useRouteParameter('id'); - - const roomsRoute = useRoute('admin-rooms'); - - const handleContextualbarCloseButtonClick = (): void => { - roomsRoute.push({}); - }; + const context = useRouteParameter('context'); const reloadRef = useRef(() => null); @@ -29,15 +22,7 @@ const RoomsPage = (): ReactElement => { - {context && ( - - - {t('Room_Info')} - - - - - )} + {context && } ); }; diff --git a/apps/meteor/client/views/admin/rooms/useEditAdminRoomPermissions.ts b/apps/meteor/client/views/admin/rooms/useEditAdminRoomPermissions.ts new file mode 100644 index 000000000000..a250015098a1 --- /dev/null +++ b/apps/meteor/client/views/admin/rooms/useEditAdminRoomPermissions.ts @@ -0,0 +1,24 @@ +import type { IRoom, RoomAdminFieldsType } from '@rocket.chat/core-typings'; +import { useMemo } from 'react'; + +import { RoomSettingsEnum } from '../../../../definition/IRoomTypeConfig'; +import { roomCoordinator } from '../../../lib/rooms/roomCoordinator'; + +export const useEditAdminRoomPermissions = (room: Pick) => { + const [canViewName, canViewTopic, canViewAnnouncement, canViewArchived, canViewDescription, canViewType, canViewReadOnly] = + useMemo(() => { + const isAllowed = roomCoordinator.getRoomDirectives(room.t).allowRoomSettingChange; + return [ + isAllowed?.(room, RoomSettingsEnum.NAME), + isAllowed?.(room, RoomSettingsEnum.TOPIC), + isAllowed?.(room, RoomSettingsEnum.ANNOUNCEMENT), + isAllowed?.(room, RoomSettingsEnum.ARCHIVE_OR_UNARCHIVE), + isAllowed?.(room, RoomSettingsEnum.DESCRIPTION), + isAllowed?.(room, RoomSettingsEnum.TYPE), + isAllowed?.(room, RoomSettingsEnum.READ_ONLY), + isAllowed?.(room, RoomSettingsEnum.REACT_WHEN_READ_ONLY), + ]; + }, [room]); + + return { canViewName, canViewTopic, canViewAnnouncement, canViewArchived, canViewDescription, canViewType, canViewReadOnly }; +}; diff --git a/apps/meteor/client/views/admin/subscription/SubscriptionCalloutLimits.tsx b/apps/meteor/client/views/admin/subscription/SubscriptionCalloutLimits.tsx new file mode 100644 index 000000000000..8982492bb4a8 --- /dev/null +++ b/apps/meteor/client/views/admin/subscription/SubscriptionCalloutLimits.tsx @@ -0,0 +1,151 @@ +import { Callout } from '@rocket.chat/fuselage'; +import type { LicenseBehavior } from '@rocket.chat/license/src/definition/LicenseBehavior'; +import { validateLimit } from '@rocket.chat/license/src/validation/validateLimit'; +import { ExternalLink } from '@rocket.chat/ui-client'; +import React from 'react'; +import { Trans, useTranslation } from 'react-i18next'; + +import { useLicense } from '../../../hooks/useLicense'; +import { useCheckoutUrlAction } from './hooks/useCheckoutUrl'; +import { CONTACT_SALES_LINK } from './utils/links'; + +export const SubscriptionCalloutLimits = () => { + const mutation = useCheckoutUrlAction(); + + const { t } = useTranslation(); + const result = useLicense({ loadValues: true }); + + if (result.isLoading || result.isError) { + return null; + } + + const { license, limits } = result.data; + + if (!license || !limits) { + return null; + } + + const keyLimits = Object.keys(limits) as Array; + + // Get the rule with the highest limit that applies to this key + + const rules = keyLimits + .map((key) => { + const rule = license.limits[key] + ?.filter((limit) => validateLimit(limit.max, limits[key].value ?? 0, limit.behavior)) + .sort((a, b) => b.max - a.max)[0]; + + if (!rule) { + return undefined; + } + + return [key, rule.behavior]; + }) + .filter(Boolean) as Array<[keyof typeof limits, LicenseBehavior]>; + + if (!rules.length) { + return null; + } + + // Group by behavior + const groupedRules = rules.reduce((acc, [key, behavior]) => { + if (!acc[behavior]) { + acc[behavior] = []; + } + + acc[behavior].push(key); + + return acc; + }, {} as Record); + + const { prevent_action, disable_modules, invalidate_license, start_fair_policy } = groupedRules; + + const map = (key: keyof typeof limits) => t(`subscription.callout.${key}`); + + const handleClick = (params: Record) => (e: React.MouseEvent) => { + e.preventDefault(); + if (mutation.isLoading) { + return; + } + mutation.mutate(params); + }; + + return ( + <> + {start_fair_policy && ( + + + Your workspace reached the <>{{ val: start_fair_policy.map(map) }} limit. + + Manage your subscription + + to increase limits. + + + )} + {prevent_action && ( + + + Your workspace exceeded the <>{{ val: prevent_action.map(map) }} license limit. + + Manage your subscription + + to increase limits. + + + )} + + {disable_modules && ( + + + Your workspace exceeded the <>{{ val: disable_modules.map(map) }} license limit. + + Manage your subscription + + to increase limits. + + + )} + + {invalidate_license && ( + + + Your workspace exceeded the <>{{ val: invalidate_license.map(map) }} license limit. + + Manage your subscription + + to increase limits. + + + )} + + ); +}; diff --git a/apps/meteor/client/views/admin/subscription/SubscriptionPage.tsx b/apps/meteor/client/views/admin/subscription/SubscriptionPage.tsx index 42e8cff54ad5..e6b03b0237a4 100644 --- a/apps/meteor/client/views/admin/subscription/SubscriptionPage.tsx +++ b/apps/meteor/client/views/admin/subscription/SubscriptionPage.tsx @@ -1,12 +1,13 @@ import { Box, Button, ButtonGroup, Callout, Grid, Throbber } from '@rocket.chat/fuselage'; import { useRouter } from '@rocket.chat/ui-contexts'; import { t } from 'i18next'; -import React, { memo, useEffect } from 'react'; +import React, { memo, useCallback, useEffect } from 'react'; import Page from '../../../components/Page'; import { useIsEnterprise } from '../../../hooks/useIsEnterprise'; -import { useLicense } from '../../../hooks/useLicense'; +import { useInvalidateLicense, useLicense } from '../../../hooks/useLicense'; import { useRegistrationStatus } from '../../../hooks/useRegistrationStatus'; +import { SubscriptionCalloutLimits } from './SubscriptionCalloutLimits'; import SubscriptionPageSkeleton from './SubscriptionPageSkeleton'; import UpgradeButton from './components/UpgradeButton'; import UpgradeToGetMore from './components/UpgradeToGetMore'; @@ -26,8 +27,9 @@ const SubscriptionPage = () => { const router = useRouter(); const { data: enterpriseData } = useIsEnterprise(); const { isRegistered } = useRegistrationStatus(); - const { data: licensesData, isLoading: isLicenseLoading, refetch: refetchLicense } = useLicense({ loadValues: true }); + const { data: licensesData, isLoading: isLicenseLoading } = useLicense({ loadValues: true }); const syncLicenseUpdate = useWorkspaceSync(); + const invalidateLicenseQuery = useInvalidateLicense(); const { subscriptionSuccess } = router.getSearchParameters(); @@ -45,24 +47,17 @@ const SubscriptionPage = () => { const macLimit = getKeyLimit('monthlyActiveContacts'); const seatsLimit = getKeyLimit('activeUsers'); - const handleSyncLicenseUpdateClick = () => { - syncLicenseUpdate.mutate(); - }; + const handleSyncLicenseUpdate = useCallback(() => { + syncLicenseUpdate.mutate(undefined, { + onSuccess: () => invalidateLicenseQuery(), + }); + }, [invalidateLicenseQuery, syncLicenseUpdate]); useEffect(() => { if (subscriptionSuccess && syncLicenseUpdate.isIdle) { - syncLicenseUpdate.mutate(undefined, { - onSuccess: () => - router.navigate( - { - name: router.getRouteName()!, - params: Object.fromEntries(Object.entries(router.getSearchParameters()).filter(([key]) => key !== 'subscriptionSuccess')), - }, - { replace: true }, - ), - }); + handleSyncLicenseUpdate(); } - }, [refetchLicense, router, subscriptionSuccess, syncLicenseUpdate]); + }, [handleSyncLicenseUpdate, subscriptionSuccess, syncLicenseUpdate]); return ( @@ -72,12 +67,14 @@ const SubscriptionPage = () => { )} - + + {t(isEnterprise ? 'Manage_subscription' : 'Upgrade')} + @@ -87,6 +84,7 @@ const SubscriptionPage = () => { {t('Sync_license_update_Callout')} )} + {isLicenseLoading && } {!isLicenseLoading && ( @@ -107,7 +105,7 @@ const SubscriptionPage = () => { {seatsLimit.value !== undefined && ( {seatsLimit.max !== Infinity ? ( - + ) : ( )} @@ -117,7 +115,7 @@ const SubscriptionPage = () => { {macLimit.value !== undefined && ( {macLimit.max !== Infinity ? ( - + ) : ( )} diff --git a/apps/meteor/client/views/admin/subscription/components/FeatureUsageCard.tsx b/apps/meteor/client/views/admin/subscription/components/FeatureUsageCard.tsx index 2bed47d5b7c4..bcde39d701fd 100644 --- a/apps/meteor/client/views/admin/subscription/components/FeatureUsageCard.tsx +++ b/apps/meteor/client/views/admin/subscription/components/FeatureUsageCard.tsx @@ -3,7 +3,6 @@ import type { ReactElement, ReactNode } from 'react'; import React, { memo } from 'react'; import InfoTextIconModal from './InfoTextIconModal'; -import UpgradeButton from './UpgradeButton'; type FeatureUsageCardProps = { children?: ReactNode; @@ -13,27 +12,22 @@ type FeatureUsageCardProps = { export type CardProps = { title: string; infoText?: string; - showUpgradeButton?: boolean; - upgradeButtonText?: string; + upgradeButton?: ReactNode; }; const FeatureUsageCard = ({ children, card }: FeatureUsageCardProps): ReactElement => { - const { title, infoText, showUpgradeButton, upgradeButtonText = 'Upgrade' } = card; + const { title, infoText, upgradeButton } = card; return ( {title} {infoText && } - + {children} - {showUpgradeButton && ( - - - - )} + {upgradeButton && {upgradeButton}} ); }; diff --git a/apps/meteor/client/views/admin/subscription/components/PieGraphCard.tsx b/apps/meteor/client/views/admin/subscription/components/PieGraphCard.tsx deleted file mode 100644 index c74d5f2476d7..000000000000 --- a/apps/meteor/client/views/admin/subscription/components/PieGraphCard.tsx +++ /dev/null @@ -1,29 +0,0 @@ -import colors from '@rocket.chat/fuselage-tokens/colors'; -import { useTranslation } from '@rocket.chat/ui-contexts'; -import type { ReactElement } from 'react'; -import React, { memo } from 'react'; - -import type { CardProps } from './FeatureUsageCard'; -import FeatureUsageCard from './FeatureUsageCard'; -import type { UsagePieGraphProps } from './UsagePieGraph'; -import UsagePieGraph from './UsagePieGraph'; - -type PieGraphCardProps = { - pieGraph: UsagePieGraphProps; - card: CardProps; -}; - -const PieGraphCard = ({ pieGraph, card }: PieGraphCardProps): ReactElement => { - const t = useTranslation(); - - const quantityAvailable = pieGraph && Math.max(pieGraph.total - pieGraph.used, 0); - const color = pieGraph && pieGraph.used / pieGraph.total >= 0.8 ? colors.d500 : undefined; - - return ( - - - - ); -}; - -export default memo(PieGraphCard); diff --git a/apps/meteor/client/views/admin/subscription/components/UpgradeButton.tsx b/apps/meteor/client/views/admin/subscription/components/UpgradeButton.tsx index 8beaace5f93b..7c28094ff58a 100644 --- a/apps/meteor/client/views/admin/subscription/components/UpgradeButton.tsx +++ b/apps/meteor/client/views/admin/subscription/components/UpgradeButton.tsx @@ -2,16 +2,18 @@ import { Button, ButtonGroup, Throbber } from '@rocket.chat/fuselage'; import type { ButtonProps } from '@rocket.chat/fuselage/dist/components/Button/Button'; import type { ReactElement } from 'react'; import React, { memo } from 'react'; -import { useTranslation } from 'react-i18next'; import { useCheckoutUrlAction } from '../hooks/useCheckoutUrl'; -type UpgradeButtonProps = { - i18nKey?: string; -} & Partial; - -const UpgradeButton = ({ i18nKey = 'Manage_subscription', ...props }: UpgradeButtonProps): ReactElement => { - const { t } = useTranslation(); +const UpgradeButton = ({ + children, + target = '_blank', + action, + ...props +}: Partial & { + target: string; + action: string; +}): ReactElement => { const mutation = useCheckoutUrlAction(); const handleBtnClick = () => { @@ -19,13 +21,16 @@ const UpgradeButton = ({ i18nKey = 'Manage_subscription', ...props }: UpgradeBut return; } - mutation.mutate(); + mutation.mutate({ + target, + action, + }); }; return ( ); diff --git a/apps/meteor/client/views/admin/subscription/components/UsagePieGraph.tsx b/apps/meteor/client/views/admin/subscription/components/UsagePieGraph.tsx index af5d4b673410..143f85bd34e6 100644 --- a/apps/meteor/client/views/admin/subscription/components/UsagePieGraph.tsx +++ b/apps/meteor/client/views/admin/subscription/components/UsagePieGraph.tsx @@ -87,9 +87,11 @@ const UsagePieGraph = ({ used = 0, total = 0, label, color, size = 140 }: UsageP {used} / {unlimited ? '∞' : total} - - {label} - + {label && ( + + {label} + + )} ); }; diff --git a/apps/meteor/client/views/admin/subscription/components/cards/ActiveSessionsCard.tsx b/apps/meteor/client/views/admin/subscription/components/cards/ActiveSessionsCard.tsx index 97da1c5438b3..fbd850f262ba 100644 --- a/apps/meteor/client/views/admin/subscription/components/cards/ActiveSessionsCard.tsx +++ b/apps/meteor/client/views/admin/subscription/components/cards/ActiveSessionsCard.tsx @@ -6,6 +6,7 @@ import { useTranslation } from 'react-i18next'; import { useActiveConnections } from '../../../../hooks/useActiveConnections'; import type { CardProps } from '../FeatureUsageCard'; import FeatureUsageCard from '../FeatureUsageCard'; +import UpgradeButton from '../UpgradeButton'; const getLimits = ({ max, current }: { max: number; current: number }) => { const total = max || 0; @@ -29,7 +30,6 @@ const ActiveSessionsCard = (): ReactElement => { const card: CardProps = { title: t('ActiveSessions'), infoText: t('ActiveSessions_InfoText'), - showUpgradeButton: true, }; if (result.isLoading || result.isError) { @@ -43,7 +43,18 @@ const ActiveSessionsCard = (): ReactElement => { const { total, used, available, exceedLimit } = getLimits(result.data); return ( - + + {t('Upgrade')} + + ), + }), + }} + > {used} / {total} diff --git a/apps/meteor/client/views/admin/subscription/components/cards/ActiveSessionsPeakCard.tsx b/apps/meteor/client/views/admin/subscription/components/cards/ActiveSessionsPeakCard.tsx index b478115bd27e..f62ec2ad164c 100644 --- a/apps/meteor/client/views/admin/subscription/components/cards/ActiveSessionsPeakCard.tsx +++ b/apps/meteor/client/views/admin/subscription/components/cards/ActiveSessionsPeakCard.tsx @@ -7,6 +7,7 @@ import { useFormatDate } from '../../../../../hooks/useFormatDate'; import { useStatistics } from '../../../../hooks/useStatistics'; import type { CardProps } from '../FeatureUsageCard'; import FeatureUsageCard from '../FeatureUsageCard'; +import UpgradeButton from '../UpgradeButton'; const ActiveSessionsPeakCard = (): ReactElement => { const { t } = useTranslation(); @@ -23,12 +24,18 @@ const ActiveSessionsPeakCard = (): ReactElement => { const card: CardProps = { title: t('ActiveSessionsPeak'), infoText: t('ActiveSessionsPeak_InfoText'), - showUpgradeButton: exceedLimit, + ...(exceedLimit && { + upgradeButton: ( + + {t('Upgrade')} + + ), + }), }; return ( - {!isLoading && maxMonthlyPeakConnections ? ( + {!isLoading && maxMonthlyPeakConnections !== undefined ? ( {used} / {total} diff --git a/apps/meteor/client/views/admin/subscription/components/cards/AppsUsageCard.tsx b/apps/meteor/client/views/admin/subscription/components/cards/AppsUsageCard.tsx index 0c48957c7a7a..0043e12d02d1 100644 --- a/apps/meteor/client/views/admin/subscription/components/cards/AppsUsageCard.tsx +++ b/apps/meteor/client/views/admin/subscription/components/cards/AppsUsageCard.tsx @@ -5,6 +5,7 @@ import { useTranslation } from 'react-i18next'; import type { CardProps } from '../FeatureUsageCard'; import FeatureUsageCard from '../FeatureUsageCard'; +import UpgradeButton from '../UpgradeButton'; type AppsUsageCardProps = { privateAppsLimit?: { value?: number; max: number }; @@ -25,7 +26,13 @@ const AppsUsageCard = ({ privateAppsLimit, marketplaceAppsLimit }: AppsUsageCard const card: CardProps = { title: t('Apps'), infoText: t('Apps_InfoText'), - showUpgradeButton: (marketplaceAppsPercentage || 0) >= 80, + ...((marketplaceAppsPercentage || 0) >= 80 && { + upgradeButton: ( + + {t('Upgrade')} + + ), + }), }; return ( diff --git a/apps/meteor/client/views/admin/subscription/components/cards/MACCard.tsx b/apps/meteor/client/views/admin/subscription/components/cards/MACCard.tsx index cc2a2eb59d1e..e22231294fae 100644 --- a/apps/meteor/client/views/admin/subscription/components/cards/MACCard.tsx +++ b/apps/meteor/client/views/admin/subscription/components/cards/MACCard.tsx @@ -1,11 +1,22 @@ +import { Palette } from '@rocket.chat/fuselage'; import type { ReactElement } from 'react'; import React from 'react'; import { useTranslation } from 'react-i18next'; import type { CardProps } from '../FeatureUsageCard'; -import PieGraphCard from '../PieGraphCard'; +import FeatureUsageCard from '../FeatureUsageCard'; +import UpgradeButton from '../UpgradeButton'; +import UsagePieGraph from '../UsagePieGraph'; -const MACCard = ({ value = 0, max }: { value: number; max: number }): ReactElement => { +const MACCard = ({ + value = 0, + max, + hideManageSubscription, +}: { + value: number; + max: number; + hideManageSubscription?: boolean; +}): ReactElement => { const { t } = useTranslation(); const pieGraph = { @@ -15,14 +26,37 @@ const MACCard = ({ value = 0, max }: { value: number; max: number }): ReactEleme const nearLimit = pieGraph && pieGraph.used / pieGraph.total >= 0.8; + const macLeft = pieGraph.total - pieGraph.used; + const card: CardProps = { title: t('Monthly_active_contacts'), infoText: t('MAC_InfoText'), - showUpgradeButton: nearLimit, - upgradeButtonText: 'Buy_more', + ...(hideManageSubscription && { + upgradeButton: ( + + {t('Buy_more')} + + ), + + ...(nearLimit && { + upgradeButton: ( + + {t('Upgrade')} + + ), + }), + }), }; - return ; + const color = nearLimit ? Palette.statusColor['status-font-on-danger'].toString() : undefined; + + const message = macLeft > 0 ? t('MAC_Available', { macLeft }) : undefined; + + return ( + + + + ); }; export default MACCard; diff --git a/apps/meteor/client/views/admin/subscription/components/cards/PlanCard/PlanCardPremium.tsx b/apps/meteor/client/views/admin/subscription/components/cards/PlanCard/PlanCardPremium.tsx index 767c1c37e30c..d829cd4affc2 100644 --- a/apps/meteor/client/views/admin/subscription/components/cards/PlanCard/PlanCardPremium.tsx +++ b/apps/meteor/client/views/admin/subscription/components/cards/PlanCard/PlanCardPremium.tsx @@ -7,6 +7,7 @@ import { Trans, useTranslation } from 'react-i18next'; import { useFormatDate } from '../../../../../../hooks/useFormatDate'; import { useIsSelfHosted } from '../../../../../../hooks/useIsSelfHosted'; +import { useLicenseName } from '../../../../../../hooks/useLicense'; import { CONTACT_SALES_LINK } from '../../../utils/links'; import PlanCardBase from './PlanCardBase'; @@ -25,13 +26,13 @@ const PlanCardPremium = ({ licenseInformation, licenseLimits }: PlanCardProps): const { isSelfHosted, isLoading } = useIsSelfHosted(); const formatDate = useFormatDate(); - const planName = licenseInformation.tags?.[0]?.name ?? ''; + const planName = useLicenseName(); const isAutoRenew = licenseInformation.autoRenew; const { visualExpiration } = licenseInformation; return ( - + {licenseLimits?.activeUsers.max === Infinity || (licenseLimits?.monthlyActiveContacts.max === Infinity && ( @@ -43,18 +44,20 @@ const PlanCardPremium = ({ licenseInformation, licenseLimits }: PlanCardProps): {licenseLimits?.activeUsers.max !== Infinity && licenseLimits?.monthlyActiveContacts.max === Infinity && t('Unlimited_MACs')} ))} - - - - {isAutoRenew ? ( - t('Renews_DATE', { date: formatDate(visualExpiration) }) - ) : ( - - Contact sales to check plan renew date. - - )} + {visualExpiration && ( + + + + {isAutoRenew ? ( + t('Renews_DATE', { date: formatDate(visualExpiration) }) + ) : ( + + Contact sales to check plan renew date. + + )} + - + )} {!isLoading ? ( {isSelfHosted ? t('Self_managed_hosting') : t('Cloud_hosting')} diff --git a/apps/meteor/client/views/admin/subscription/components/cards/PlanCard/PlanCardTrial.tsx b/apps/meteor/client/views/admin/subscription/components/cards/PlanCard/PlanCardTrial.tsx index 588dad4f3e96..f1d3001bd508 100644 --- a/apps/meteor/client/views/admin/subscription/components/cards/PlanCard/PlanCardTrial.tsx +++ b/apps/meteor/client/views/admin/subscription/components/cards/PlanCard/PlanCardTrial.tsx @@ -1,4 +1,4 @@ -import { Box, Button, Tag } from '@rocket.chat/fuselage'; +import { Box, Tag } from '@rocket.chat/fuselage'; import type { ILicenseV3 } from '@rocket.chat/license'; import { ExternalLink } from '@rocket.chat/ui-client'; import differenceInDays from 'date-fns/differenceInDays'; @@ -6,7 +6,8 @@ import type { ReactElement } from 'react'; import React from 'react'; import { Trans, useTranslation } from 'react-i18next'; -import { CONTACT_SALES_LINK, DOWNGRADE_LINK, TRIAL_LINK } from '../../../utils/links'; +import { useLicenseName } from '../../../../../../hooks/useLicense'; +import { DOWNGRADE_LINK, TRIAL_LINK } from '../../../utils/links'; import UpgradeButton from '../../UpgradeButton'; import PlanCardBase from './PlanCardBase'; @@ -17,18 +18,19 @@ type PlanCardProps = { const PlanCardTrial = ({ licenseInformation }: PlanCardProps): ReactElement => { const { t } = useTranslation(); - const planName = licenseInformation.tags?.[0]?.name ?? ''; + const planName = useLicenseName(); const isSalesAssisted = licenseInformation.grantedBy?.method !== 'self-service' || true; const { visualExpiration } = licenseInformation; - const trialDaysLeft = differenceInDays(new Date(visualExpiration), new Date()); - return ( - + - - {t('Trial_active')} {t('n_days_left', { n: trialDaysLeft })} - + {visualExpiration && ( + + {t('Trial_active')}{' '} + {t('n_days_left', { n: differenceInDays(new Date(visualExpiration), new Date()) })} + + )} {isSalesAssisted ? ( @@ -46,13 +48,10 @@ const PlanCardTrial = ({ licenseInformation }: PlanCardProps): ReactElement => { Why has a trial been applied to this workspace? - {isSalesAssisted ? ( - - ) : ( - - )} + + + {isSalesAssisted ? t('Finish_purchase') : t('Contact_sales')} + ); diff --git a/apps/meteor/client/views/admin/subscription/components/cards/SeatsCard.tsx b/apps/meteor/client/views/admin/subscription/components/cards/SeatsCard.tsx index 94081580fbec..34a58fb1791c 100644 --- a/apps/meteor/client/views/admin/subscription/components/cards/SeatsCard.tsx +++ b/apps/meteor/client/views/admin/subscription/components/cards/SeatsCard.tsx @@ -1,16 +1,20 @@ +import { Palette } from '@rocket.chat/fuselage'; import type { ReactElement } from 'react'; import React from 'react'; import { useTranslation } from 'react-i18next'; import type { CardProps } from '../FeatureUsageCard'; -import PieGraphCard from '../PieGraphCard'; +import FeatureUsageCard from '../FeatureUsageCard'; +import UpgradeButton from '../UpgradeButton'; +import UsagePieGraph from '../UsagePieGraph'; type SeatsCardProps = { value: number; max: number; + hideManageSubscription?: boolean; }; -const SeatsCard = ({ value, max }: SeatsCardProps): ReactElement => { +const SeatsCard = ({ value, max, hideManageSubscription }: SeatsCardProps): ReactElement => { const { t } = useTranslation(); const pieGraph = { @@ -23,11 +27,25 @@ const SeatsCard = ({ value, max }: SeatsCardProps): ReactElement => { const card: CardProps = { title: t('Seats'), infoText: t('Seats_InfoText'), - showUpgradeButton: nearLimit, - upgradeButtonText: 'Buy_more', + ...(hideManageSubscription && + nearLimit && { + upgradeButton: ( + + {t('Buy_more')} + + ), + }), }; - return ; + const seatsLeft = pieGraph.total - pieGraph.used; + const color = pieGraph.used / pieGraph.total >= 0.8 ? Palette.statusColor['status-font-on-danger'].toString() : undefined; + + const message = seatsLeft > 0 ? t('Seats_Available', { seatsLeft }) : undefined; + return ( + + + + ); }; export default SeatsCard; diff --git a/apps/meteor/client/views/admin/subscription/hooks/useCheckoutUrl.ts b/apps/meteor/client/views/admin/subscription/hooks/useCheckoutUrl.ts index 56ef0396e93e..e4ea7ef042bd 100644 --- a/apps/meteor/client/views/admin/subscription/hooks/useCheckoutUrl.ts +++ b/apps/meteor/client/views/admin/subscription/hooks/useCheckoutUrl.ts @@ -9,12 +9,29 @@ export const useCheckoutUrlAction = () => { const handleExternalLink = useExternalLink(); return useMutation({ - mutationFn: async () => { + mutationFn: async (extraData?: Record) => { const { url } = await getCheckoutUrl(); - handleExternalLink(url); + + const extraUrlParams = new URL(url); + + if (extraData) { + Object.entries(extraData).forEach(([key, value]) => { + extraUrlParams.searchParams.append(key, value.toString()); + }); + } + + handleExternalLink(extraUrlParams.toString()); }, - onError: () => { - handleExternalLink(CONTACT_SALES_LINK); + onError: (_e, extraData) => { + const extraUrlParams = new URL(CONTACT_SALES_LINK); + + if (extraData) { + Object.entries(extraData).forEach(([key, value]) => { + extraUrlParams.searchParams.append(key, value.toString()); + }); + } + + handleExternalLink(extraUrlParams.toString()); }, }); }; diff --git a/apps/meteor/client/views/admin/users/AdminUsersPage.tsx b/apps/meteor/client/views/admin/users/AdminUsersPage.tsx index 45e22b293817..c93861911e9a 100644 --- a/apps/meteor/client/views/admin/users/AdminUsersPage.tsx +++ b/apps/meteor/client/views/admin/users/AdminUsersPage.tsx @@ -9,6 +9,7 @@ import { Contextualbar, ContextualbarHeader, ContextualbarTitle, ContextualbarCl import Page from '../../../components/Page'; import PageContent from '../../../components/Page/PageContent'; import PageHeader from '../../../components/Page/PageHeader'; +import { useShouldPreventAction } from '../../../hooks/useShouldPreventAction'; import AdminInviteUsers from './AdminInviteUsers'; import AdminUserCreated from './AdminUserCreated'; import AdminUserForm from './AdminUserForm'; @@ -27,6 +28,7 @@ const UsersPage = (): ReactElement => { const canCreateUser = usePermission('create-user'); const canBulkCreateUser = usePermission('bulk-register-user'); + const isCreateUserDisabled = useShouldPreventAction('activeUsers'); const [tab, setTab] = useState<'all' | 'invited' | 'active' | 'deactivated' | 'pending'>('all'); const [pendingActionsCount, setPendingActionsCount] = useState(0); @@ -37,10 +39,10 @@ const UsersPage = (): ReactElement => { return; } - if (seatsCap.activeUsers >= seatsCap.maxActiveUsers && context && !['edit', 'info'].includes(context)) { + if (isCreateUserDisabled && !['edit', 'info'].includes(context)) { router.navigate('/admin/users'); } - }, [context, seatsCap, tab, router]); + }, [context, isCreateUserDisabled, router, seatsCap]); const handleReload = (): void => { seatsCap?.reload(); diff --git a/apps/meteor/client/views/admin/workspace/VersionCard/VersionCard.tsx b/apps/meteor/client/views/admin/workspace/VersionCard/VersionCard.tsx index a954cc4963ce..3af049a25809 100644 --- a/apps/meteor/client/views/admin/workspace/VersionCard/VersionCard.tsx +++ b/apps/meteor/client/views/admin/workspace/VersionCard/VersionCard.tsx @@ -11,7 +11,7 @@ import { Trans, useTranslation } from 'react-i18next'; import semver from 'semver'; import { useFormatDate } from '../../../../hooks/useFormatDate'; -import { useLicense } from '../../../../hooks/useLicense'; +import { useLicense, useLicenseName } from '../../../../hooks/useLicense'; import { useRegistrationStatus } from '../../../../hooks/useRegistrationStatus'; import { isOverLicenseLimits } from '../../../../lib/utils/isOverLicenseLimits'; import RegisterWorkspaceModal from '../../cloud/modals/RegisterWorkspaceModal'; @@ -29,22 +29,6 @@ type VersionCardProps = { serverInfo: IWorkspaceInfo; }; -const getVersionStatus = (serverVersion: string, versions: { version: string }[]): VersionStatus => { - const coercedServerVersion = String(semver.coerce(serverVersion)); - const highestVersion = versions.reduce((prev, current) => (prev.version > current.version ? prev : current)); - const isSupported = versions.some((v) => v.version === coercedServerVersion || v.version === serverVersion); - - if (semver.gte(coercedServerVersion, highestVersion.version)) { - return 'latest'; - } - - if (isSupported && semver.gt(highestVersion.version, coercedServerVersion)) { - return 'available_version'; - } - - return 'outdated'; -}; - const VersionCard = ({ serverInfo }: VersionCardProps): ReactElement => { const mediaQuery = useMediaQuery('(min-width: 1024px)'); @@ -62,29 +46,31 @@ const VersionCard = ({ serverInfo }: VersionCardProps): ReactElement => { const formatDate = useFormatDate(); - const { data: licenseData, isLoading, refetch: refetchLicense } = useLicense(); + const { data: licenseData, isLoading, refetch: refetchLicense } = useLicense({ loadValues: true }); const { isRegistered } = useRegistrationStatus(); - const { license, tags, trial: isTrial, limits } = licenseData || {}; + const { license, limits } = licenseData || {}; const isAirgapped = license?.information?.offline; - const licenseName = tags?.[0]?.name ?? 'Community'; - const visualExpiration = formatDate(license?.information?.visualExpiration || ''); + const licenseName = useLicenseName(); const serverVersion = serverInfo.version; - const supportedVersions = useMemo( - () => decodeBase64(serverInfo?.supportedVersions?.signed || ''), - [serverInfo?.supportedVersions?.signed], - ); + const { versionStatus, versions } = useMemo(() => { + const supportedVersions = serverInfo?.supportedVersions?.signed ? decodeBase64(serverInfo?.supportedVersions?.signed) : undefined; - const isOverLimits = limits && isOverLicenseLimits(limits); - - const versionStatus = useMemo(() => { - if (!supportedVersions.versions) { - return; + if (!supportedVersions) { + return {}; } - return getVersionStatus(serverVersion, supportedVersions.versions); - }, [serverVersion, supportedVersions.versions]); + + const versionStatus = getVersionStatus(serverVersion, supportedVersions?.versions); + + return { + versionStatus, + versions: supportedVersions?.versions, + }; + }, [serverInfo?.supportedVersions?.signed, serverVersion]); + + const isOverLimits = limits && isOverLicenseLimits(limits); const actionButton: | undefined @@ -109,7 +95,7 @@ const VersionCard = ({ serverInfo }: VersionCardProps): ReactElement => { }; } - if (versionStatus === 'outdated') { + if (versionStatus?.label === 'outdated') { return { action: () => { window.open(RELEASES_EXTERNAL_LINK, '_blank'); @@ -137,7 +123,7 @@ const VersionCard = ({ serverInfo }: VersionCardProps): ReactElement => { icon: 'check', label: t('Operating_withing_plan_limits'), }, - isAirgapped && { + (isAirgapped || !versions) && { type: 'neutral', icon: 'warning', label: ( @@ -149,28 +135,28 @@ const VersionCard = ({ serverInfo }: VersionCardProps): ReactElement => { ), }, - versionStatus !== 'outdated' - ? { - type: 'neutral', - icon: 'check', - label: ( - - Version - supported - until {visualExpiration} - - ), - } - : { - type: 'danger', - icon: 'warning', - label: ( - - Version - not supported - - ), - }, + versionStatus?.label !== 'outdated' && + versionStatus?.expiration && { + type: 'neutral', + icon: 'check', + label: ( + + Version + supported + until {formatDate(versionStatus?.expiration)} + + ), + }, + versionStatus?.label === 'outdated' && { + type: 'danger', + icon: 'warning', + label: ( + + Version + not supported + + ), + }, isRegistered ? { type: 'neutral', @@ -184,7 +170,7 @@ const VersionCard = ({ serverInfo }: VersionCardProps): ReactElement => { }, ].filter(Boolean) as VersionActionItem[] ).sort((a) => (a.type === 'danger' ? -1 : 1)); - }, [isOverLimits, isAirgapped, versionStatus, isRegistered, t, visualExpiration]); + }, [isOverLimits, t, isAirgapped, versions, versionStatus?.label, versionStatus?.expiration, formatDate, isRegistered]); return ( @@ -196,14 +182,14 @@ const VersionCard = ({ serverInfo }: VersionCardProps): ReactElement => { {t('Version_version', { version: serverVersion })} - + {!isAirgapped && versions && } - {licenseName} {isTrial && `(${t('trial')})`} + {licenseName.data} {actionItems.length > 0 && ( @@ -228,7 +214,33 @@ const VersionCard = ({ serverInfo }: VersionCardProps): ReactElement => { export default VersionCard; -const decodeBase64 = (b64: string): SupportedVersions => { +const decodeBase64 = (b64: string): SupportedVersions | undefined => { const [, bodyEncoded] = b64.split('.'); + if (!bodyEncoded) { + return; + } + return JSON.parse(atob(bodyEncoded)); }; + +const getVersionStatus = ( + serverVersion: string, + versions: SupportedVersions['versions'], +): { label: VersionStatus; expiration: Date | undefined } => { + const coercedServerVersion = String(semver.coerce(serverVersion)); + const highestVersion = versions.reduce((prev, current) => (prev.version > current.version ? prev : current)); + const currentVersionData = versions.find((v) => v.version.includes(coercedServerVersion) || v.version.includes(serverVersion)); + const isSupported = currentVersionData?.version === coercedServerVersion || currentVersionData?.version === serverVersion; + + const versionStatus: { + label: VersionStatus; + expiration: Date | undefined; + } = { + label: 'outdated', + ...(semver.gte(coercedServerVersion, highestVersion.version) && { label: 'latest' }), + ...(isSupported && semver.gt(highestVersion.version, coercedServerVersion) && { label: 'available_version' }), + expiration: currentVersionData?.expiration, + }; + + return versionStatus; +}; diff --git a/apps/meteor/client/views/admin/workspace/WorkspacePage.tsx b/apps/meteor/client/views/admin/workspace/WorkspacePage.tsx index fb504ce4e063..356ceeb6593e 100644 --- a/apps/meteor/client/views/admin/workspace/WorkspacePage.tsx +++ b/apps/meteor/client/views/admin/workspace/WorkspacePage.tsx @@ -15,6 +15,7 @@ type WorkspaceStatusPageProps = { canViewStatistics: boolean; serverInfo: IWorkspaceInfo; statistics: IStats; + statisticsIsLoading: boolean; instances: IInstance[]; onClickRefreshButton: () => void; onClickDownloadInfo: () => void; @@ -24,6 +25,7 @@ const WorkspacePage = ({ canViewStatistics, serverInfo, statistics, + statisticsIsLoading, instances, onClickRefreshButton, onClickDownloadInfo, @@ -40,10 +42,8 @@ const WorkspacePage = ({ {canViewStatistics && ( - - + diff --git a/apps/meteor/client/views/admin/workspace/WorkspaceRoute.tsx b/apps/meteor/client/views/admin/workspace/WorkspaceRoute.tsx index b7b22d8ff674..bce054bf7f44 100644 --- a/apps/meteor/client/views/admin/workspace/WorkspaceRoute.tsx +++ b/apps/meteor/client/views/admin/workspace/WorkspaceRoute.tsx @@ -1,11 +1,11 @@ import { Callout, ButtonGroup, Button } from '@rocket.chat/fuselage'; import { usePermission, useTranslation } from '@rocket.chat/ui-contexts'; import type { ReactElement } from 'react'; -import React, { memo } from 'react'; +import React, { memo, useState } from 'react'; import Page from '../../../components/Page'; import PageSkeleton from '../../../components/PageSkeleton'; -import { useRefreshStatistics, useWorkspaceInfo } from '../../../hooks/useWorkspaceInfo'; +import { useWorkspaceInfo } from '../../../hooks/useWorkspaceInfo'; import { downloadJsonAs } from '../../../lib/download'; import NotAuthorizedPage from '../../notAuthorized/NotAuthorizedPage'; import WorkspacePage from './WorkspacePage'; @@ -14,8 +14,8 @@ const WorkspaceRoute = (): ReactElement => { const t = useTranslation(); const canViewStatistics = usePermission('view-statistics'); - const [serverInfoQuery, instancesQuery, statisticsQuery] = useWorkspaceInfo(); - const refetchStatistics = useRefreshStatistics(); + const [refreshStatistics, setRefreshStatistics] = useState(false); + const [serverInfoQuery, instancesQuery, statisticsQuery] = useWorkspaceInfo({ refreshStatistics }); if (!canViewStatistics) { return ; @@ -24,8 +24,10 @@ const WorkspaceRoute = (): ReactElement => { if (serverInfoQuery.isLoading || instancesQuery.isLoading || statisticsQuery.isLoading) { return ; } - const handleClickRefreshButton = (): void => { - refetchStatistics.mutate(); + + const handleClickRefreshButton = async () => { + setRefreshStatistics(true); + statisticsQuery.refetch(); }; if (serverInfoQuery.isError || instancesQuery.isError || statisticsQuery.isError) { @@ -33,7 +35,7 @@ const WorkspaceRoute = (): ReactElement => { - @@ -54,6 +56,7 @@ const WorkspaceRoute = (): ReactElement => { canViewStatistics={canViewStatistics} serverInfo={serverInfoQuery.data} statistics={statisticsQuery.data} + statisticsIsLoading={statisticsQuery.isLoading} instances={instancesQuery.data} onClickRefreshButton={handleClickRefreshButton} onClickDownloadInfo={handleClickDownloadInfo} diff --git a/apps/meteor/client/views/cloud/CloudAnnouncementHandler.tsx b/apps/meteor/client/views/cloud/CloudAnnouncementHandler.tsx new file mode 100644 index 000000000000..c2fef93c6f29 --- /dev/null +++ b/apps/meteor/client/views/cloud/CloudAnnouncementHandler.tsx @@ -0,0 +1,56 @@ +import type { Cloud, UiKit } from '@rocket.chat/core-typings'; +import { useEffect, useRef } from 'react'; +import { useTranslation } from 'react-i18next'; + +import { exhaustiveCheck } from '../../../lib/utils/exhaustiveCheck'; +import { useUiKitActionManager } from '../../uikit/hooks/useUiKitActionManager'; + +type CloudAnnouncementHandlerProps = Pick; + +const CloudAnnouncementHandler = ({ dictionary = {}, surface, view }: CloudAnnouncementHandlerProps) => { + const { i18n } = useTranslation(); + + useEffect(() => { + const appNs = `app-cloud-announcements-core`; + + for (const [language, translations] of Object.entries(dictionary)) { + i18n.addResources(language, appNs, translations); + } + }, [i18n, dictionary]); + + const actionManager = useUiKitActionManager(); + + const viewRef = useRef({ ...view, appId: 'cloud-announcements-core' }); + viewRef.current = { ...view, appId: 'cloud-announcements-core' }; + + useEffect(() => { + switch (surface) { + case 'modal': { + const modalView = viewRef.current as UiKit.ModalView; + + actionManager.openView('modal', modalView); + + return () => { + actionManager.disposeView(modalView.id); + }; + } + + case 'banner': { + const bannerView = viewRef.current as UiKit.BannerView; + + actionManager.openView('banner', { ...bannerView }); + + return () => { + actionManager.disposeView(bannerView.viewId); + }; + } + + default: + exhaustiveCheck(surface); + } + }, [actionManager, surface]); + + return null; +}; + +export default CloudAnnouncementHandler; diff --git a/apps/meteor/client/views/cloud/CloudAnnouncementsRegion.tsx b/apps/meteor/client/views/cloud/CloudAnnouncementsRegion.tsx new file mode 100644 index 000000000000..7f08fb3f83ae --- /dev/null +++ b/apps/meteor/client/views/cloud/CloudAnnouncementsRegion.tsx @@ -0,0 +1,32 @@ +import { useEndpoint, useUserId } from '@rocket.chat/ui-contexts'; +import { useQuery } from '@tanstack/react-query'; +import React from 'react'; + +import CloudAnnouncementHandler from './CloudAnnouncementHandler'; + +const CloudAnnouncementsRegion = () => { + const uid = useUserId(); + + const getAnnouncements = useEndpoint('GET', '/v1/cloud.announcements'); + + const { isSuccess, data: announcements } = useQuery({ + queryKey: ['cloud', 'announcements'], + queryFn: () => getAnnouncements(), + select: (data) => data.announcements, + enabled: !!uid, + }); + + if (!isSuccess) { + return null; + } + + return ( + <> + {announcements.map((announcement) => ( + + ))} + + ); +}; + +export default CloudAnnouncementsRegion; diff --git a/apps/meteor/client/views/hooks/roomActions/useArchiveRoom.tsx b/apps/meteor/client/views/hooks/roomActions/useArchiveRoom.tsx new file mode 100644 index 000000000000..9abcffa07a35 --- /dev/null +++ b/apps/meteor/client/views/hooks/roomActions/useArchiveRoom.tsx @@ -0,0 +1,20 @@ +import type { IRoom, RoomAdminFieldsType } from '@rocket.chat/core-typings'; +import { useMutableCallback } from '@rocket.chat/fuselage-hooks'; +import { useEndpoint, useToastMessageDispatch, useTranslation } from '@rocket.chat/ui-contexts'; + +export const useArchiveRoom = (room: Pick) => { + const t = useTranslation(); + const dispatchToastMessage = useToastMessageDispatch(); + const archiveAction = useEndpoint('POST', '/v1/rooms.changeArchivationState'); + + const handleArchive = useMutableCallback(async () => { + try { + await archiveAction({ rid: room._id, action: room.archived ? 'unarchive' : 'archive' }); + dispatchToastMessage({ type: 'success', message: room.archived ? t('Room_has_been_unarchived') : t('Room_has_been_archived') }); + } catch (error) { + dispatchToastMessage({ type: 'error', message: error }); + } + }); + + return handleArchive; +}; diff --git a/apps/meteor/client/views/invite/hooks/useValidateInviteQuery.ts b/apps/meteor/client/views/invite/hooks/useValidateInviteQuery.ts index a68f47a3fb09..0d5d8bfc6dc1 100644 --- a/apps/meteor/client/views/invite/hooks/useValidateInviteQuery.ts +++ b/apps/meteor/client/views/invite/hooks/useValidateInviteQuery.ts @@ -37,7 +37,7 @@ export const useValidateInviteQuery = (userId: string | null, token: string | un } if (registrationForm !== 'Disabled') { - setLoginDefaultState('register'); + setLoginDefaultState('invite-register'); } else { setLoginDefaultState('login'); } diff --git a/apps/meteor/client/views/marketplace/BundleChips.tsx b/apps/meteor/client/views/marketplace/BundleChips.tsx index 4e2953bd8519..b3110832145d 100644 --- a/apps/meteor/client/views/marketplace/BundleChips.tsx +++ b/apps/meteor/client/views/marketplace/BundleChips.tsx @@ -16,19 +16,31 @@ type BundleChipsProps = { const BundleChips = ({ bundledIn }: BundleChipsProps): ReactElement => { const t = useTranslation(); + const handlePlanName = (label: string): string => { + if (label === 'Enterprise') { + return 'Premium'; + } + return label; + }; + return ( <> - {bundledIn.map(({ bundleId, bundleName }) => ( - - {bundleName} - - ))} + {bundledIn.map(({ bundleId, bundleName }) => { + // this is a workaround to not change plan name for versions lower than 6.5.0 + const handledName = handlePlanName(bundleName); + + return ( + + {handledName} + + ); + })} ); }; diff --git a/apps/meteor/client/views/omnichannel/additionalForms.tsx b/apps/meteor/client/views/omnichannel/additionalForms.tsx index 0b04097ab154..152245df90be 100644 --- a/apps/meteor/client/views/omnichannel/additionalForms.tsx +++ b/apps/meteor/client/views/omnichannel/additionalForms.tsx @@ -1,7 +1,7 @@ import BusinessHoursMultipleContainer from '../../../ee/client/omnichannel/additionalForms/BusinessHoursMultipleContainer'; import ContactManager from '../../../ee/client/omnichannel/additionalForms/ContactManager'; import CurrentChatTags from '../../../ee/client/omnichannel/additionalForms/CurrentChatTags'; -import CustomFieldsAdditionalFormContainer from '../../../ee/client/omnichannel/additionalForms/CustomFieldsAdditionalFormContainer'; +import CustomFieldsAdditionalForm from '../../../ee/client/omnichannel/additionalForms/CustomFieldsAdditionalForm'; import DepartmentBusinessHours from '../../../ee/client/omnichannel/additionalForms/DepartmentBusinessHours'; import DepartmentForwarding from '../../../ee/client/omnichannel/additionalForms/DepartmentForwarding'; import EeNumberInput from '../../../ee/client/omnichannel/additionalForms/EeNumberInput'; @@ -13,7 +13,7 @@ import PrioritiesSelect from '../../../ee/client/omnichannel/additionalForms/Pri import SlaPoliciesSelect from '../../../ee/client/omnichannel/additionalForms/SlaPoliciesSelect'; export { - CustomFieldsAdditionalFormContainer, + CustomFieldsAdditionalForm, MaxChatsPerAgentContainer, MaxChatsPerAgentDisplay, EeNumberInput, diff --git a/apps/meteor/client/views/omnichannel/customFields/CustomFieldsForm.stories.tsx b/apps/meteor/client/views/omnichannel/customFields/CustomFieldsForm.stories.tsx index d7dabfe388a8..840581154afd 100644 --- a/apps/meteor/client/views/omnichannel/customFields/CustomFieldsForm.stories.tsx +++ b/apps/meteor/client/views/omnichannel/customFields/CustomFieldsForm.stories.tsx @@ -1,13 +1,12 @@ import { Box } from '@rocket.chat/fuselage'; -import { action } from '@storybook/addon-actions'; import type { ComponentMeta, ComponentStory } from '@storybook/react'; import React from 'react'; -import NewCustomFieldsForm from './NewCustomFieldsForm'; +import EditCustomFields from './EditCustomFields'; export default { - title: 'Omnichannel/NewCustomFieldsForm', - component: NewCustomFieldsForm, + title: 'Omnichannel/CustomFields', + component: EditCustomFields, decorators: [ (fn) => ( @@ -15,23 +14,7 @@ export default { ), ], -} as ComponentMeta; +} as ComponentMeta; -export const Default: ComponentStory = (args) => ; +export const Default: ComponentStory = (args) => ; Default.storyName = 'CustomFieldsForm'; -Default.args = { - values: { - field: '', - label: '', - scope: 'visitor', - visibility: true, - regexp: '', - }, - handlers: { - handleField: action('handleField'), - handleLabel: action('handleLabel'), - handleScope: action('handleScope'), - handleVisibility: action('handleVisibility'), - handleRegexp: action('handleRegexp'), - }, -}; diff --git a/apps/meteor/client/views/omnichannel/customFields/CustomFieldsPage.tsx b/apps/meteor/client/views/omnichannel/customFields/CustomFieldsPage.tsx index 6ca2fea326c5..4ee813159221 100644 --- a/apps/meteor/client/views/omnichannel/customFields/CustomFieldsPage.tsx +++ b/apps/meteor/client/views/omnichannel/customFields/CustomFieldsPage.tsx @@ -1,30 +1,33 @@ import { Button } from '@rocket.chat/fuselage'; -import { useMutableCallback } from '@rocket.chat/fuselage-hooks'; -import { useRoute, useTranslation } from '@rocket.chat/ui-contexts'; -import type { MutableRefObject } from 'react'; +import { useRouteParameter, useRouter, useTranslation } from '@rocket.chat/ui-contexts'; import React from 'react'; import Page from '../../../components/Page'; import CustomFieldsTable from './CustomFieldsTable'; +import EditCustomFields from './EditCustomFields'; +import EditCustomFieldsWithData from './EditCustomFieldsWithData'; -const CustomFieldsPage = ({ reload }: { reload: MutableRefObject<() => void> }) => { +const CustomFieldsPage = () => { const t = useTranslation(); - const router = useRoute('omnichannel-customfields'); + const router = useRouter(); - const onAddNew = useMutableCallback(() => router.push({ context: 'new' })); + const context = useRouteParameter('context'); + const id = useRouteParameter('id'); return ( - - + + {context === 'edit' && id && } + {context === 'new' && } ); }; diff --git a/apps/meteor/client/views/omnichannel/customFields/CustomFieldsRoute.tsx b/apps/meteor/client/views/omnichannel/customFields/CustomFieldsRoute.tsx index 4297a26fc924..2ffc7580e3fa 100644 --- a/apps/meteor/client/views/omnichannel/customFields/CustomFieldsRoute.tsx +++ b/apps/meteor/client/views/omnichannel/customFields/CustomFieldsRoute.tsx @@ -1,33 +1,17 @@ -import { useRouteParameter, usePermission } from '@rocket.chat/ui-contexts'; -import React, { useRef, useCallback } from 'react'; +import { usePermission } from '@rocket.chat/ui-contexts'; +import React from 'react'; import NotAuthorizedPage from '../../notAuthorized/NotAuthorizedPage'; import CustomFieldsPage from './CustomFieldsPage'; -import EditCustomFieldsPage from './EditCustomFieldsPageContainer'; -import NewCustomFieldsPage from './NewCustomFieldsPage'; const CustomFieldsRoute = () => { - const reload = useRef(() => null); const canViewCustomFields = usePermission('view-livechat-customfields'); - const context = useRouteParameter('context'); - - const handleReload = useCallback(() => { - reload.current(); - }, [reload]); if (!canViewCustomFields) { return ; } - if (context === 'new') { - return ; - } - - if (context === 'edit') { - return ; - } - - return ; + return ; }; export default CustomFieldsRoute; diff --git a/apps/meteor/client/views/omnichannel/customFields/CustomFieldsTable.tsx b/apps/meteor/client/views/omnichannel/customFields/CustomFieldsTable.tsx index f9872c710a5e..3298139319b2 100644 --- a/apps/meteor/client/views/omnichannel/customFields/CustomFieldsTable.tsx +++ b/apps/meteor/client/views/omnichannel/customFields/CustomFieldsTable.tsx @@ -1,9 +1,8 @@ -import { Pagination } from '@rocket.chat/fuselage'; +import { IconButton, Pagination } from '@rocket.chat/fuselage'; import { useDebouncedValue, useMutableCallback } from '@rocket.chat/fuselage-hooks'; import { useTranslation, useEndpoint, useRouter } from '@rocket.chat/ui-contexts'; import { useQuery, hashQueryKey } from '@tanstack/react-query'; -import type { MutableRefObject } from 'react'; -import React, { useMemo, useState, useEffect } from 'react'; +import React, { useMemo, useState } from 'react'; import FilterByText from '../../../components/FilterByText'; import GenericNoResults from '../../../components/GenericNoResults'; @@ -18,9 +17,9 @@ import { } from '../../../components/GenericTable'; import { usePagination } from '../../../components/GenericTable/hooks/usePagination'; import { useSort } from '../../../components/GenericTable/hooks/useSort'; -import RemoveCustomFieldButton from './RemoveCustomFieldButton'; +import { useRemoveCustomField } from './useRemoveCustomField'; -const CustomFieldsTable = ({ reload }: { reload: MutableRefObject<() => void> }) => { +const CustomFieldsTable = () => { const t = useTranslation(); const router = useRouter(); const [filter, setFilter] = useState(''); @@ -32,6 +31,8 @@ const CustomFieldsTable = ({ reload }: { reload: MutableRefObject<() => void> }) const handleAddNew = useMutableCallback(() => router.navigate('/omnichannel/customfields/new')); const onRowClick = useMutableCallback((id) => () => router.navigate(`/omnichannel/customfields/edit/${id}`)); + const handleDelete = useRemoveCustomField(); + const query = useMemo( () => ({ text: debouncedFilter, @@ -43,18 +44,11 @@ const CustomFieldsTable = ({ reload }: { reload: MutableRefObject<() => void> }) ); const getCustomFields = useEndpoint('GET', '/v1/livechat/custom-fields'); - const { data, isSuccess, isLoading, refetch } = useQuery(['livechat-customFields', query, debouncedFilter], async () => - getCustomFields(query), - ); + const { data, isSuccess, isLoading } = useQuery(['livechat-customFields', query, debouncedFilter], async () => getCustomFields(query)); const [defaultQuery] = useState(hashQueryKey([query])); const queryHasChanged = defaultQuery !== hashQueryKey([query]); - useEffect(() => { - reload.current = refetch; - }, [reload, refetch]); - reload.current = refetch; - const headers = ( <> @@ -75,9 +69,7 @@ const CustomFieldsTable = ({ reload }: { reload: MutableRefObject<() => void> }) > {t('Visibility')} - - {t('Remove')} - + ); @@ -116,7 +108,17 @@ const CustomFieldsTable = ({ reload }: { reload: MutableRefObject<() => void> }) {label} {scope === 'visitor' ? t('Visitor') : t('Room')} {visibility === 'visible' ? t('Visible') : t('Hidden')} - + + { + e.stopPropagation(); + handleDelete(_id); + }} + /> + ))} diff --git a/apps/meteor/client/views/omnichannel/customFields/EditCustomFields.tsx b/apps/meteor/client/views/omnichannel/customFields/EditCustomFields.tsx new file mode 100644 index 000000000000..5a96076bd1b3 --- /dev/null +++ b/apps/meteor/client/views/omnichannel/customFields/EditCustomFields.tsx @@ -0,0 +1,226 @@ +import type { ILivechatCustomField, Serialized } from '@rocket.chat/core-typings'; +import type { SelectOption } from '@rocket.chat/fuselage'; +import { + FieldError, + Box, + Button, + ButtonGroup, + Field, + FieldGroup, + FieldLabel, + FieldRow, + Select, + TextInput, + ToggleSwitch, +} from '@rocket.chat/fuselage'; +import { useMutableCallback, useUniqueId } from '@rocket.chat/fuselage-hooks'; +import { useToastMessageDispatch, useMethod, useTranslation, useRouter } from '@rocket.chat/ui-contexts'; +import { useQueryClient } from '@tanstack/react-query'; +import React, { useMemo } from 'react'; +import { FormProvider, useForm, Controller } from 'react-hook-form'; + +import { + Contextualbar, + ContextualbarTitle, + ContextualbarHeader, + ContextualbarClose, + ContextualbarFooter, + ContextualbarScrollableContent, +} from '../../../components/Contextualbar'; +import { CustomFieldsAdditionalForm } from '../additionalForms'; +import { useRemoveCustomField } from './useRemoveCustomField'; + +const getInitialValues = (customFieldData: Serialized | undefined) => ({ + field: customFieldData?._id || '', + label: customFieldData?.label || '', + scope: customFieldData?.scope || 'visitor', + visibility: customFieldData?.visibility === 'visible', + searchable: !!customFieldData?.searchable, + regexp: customFieldData?.regexp || '', + // additional props + type: customFieldData?.type || 'input', + required: !!customFieldData?.required, + defaultValue: customFieldData?.defaultValue || '', + options: customFieldData?.options || '', + public: !!customFieldData?.public, +}); + +const EditCustomFields = ({ customFieldData }: { customFieldData?: Serialized }) => { + const t = useTranslation(); + const router = useRouter(); + const queryClient = useQueryClient(); + const dispatchToastMessage = useToastMessageDispatch(); + + const handleDelete = useRemoveCustomField(); + + const methods = useForm({ mode: 'onBlur', values: getInitialValues(customFieldData) }); + const { + control, + handleSubmit, + formState: { isDirty, errors }, + } = methods; + + const saveCustomField = useMethod('livechat:saveCustomField'); + + const handleSave = useMutableCallback(async ({ visibility, ...data }) => { + try { + await saveCustomField(customFieldData?._id as unknown as string, { + visibility: visibility ? 'visible' : 'hidden', + ...data, + }); + + dispatchToastMessage({ type: 'success', message: t('Saved') }); + queryClient.invalidateQueries(['livechat-customFields']); + router.navigate('/omnichannel/customfields'); + } catch (error) { + dispatchToastMessage({ type: 'error', message: error }); + } + }); + + const scopeOptions: SelectOption[] = useMemo( + () => [ + ['visitor', t('Visitor')], + ['room', t('Room')], + ], + [t], + ); + + const formId = useUniqueId(); + const fieldField = useUniqueId(); + const labelField = useUniqueId(); + const scopeField = useUniqueId(); + const visibilityField = useUniqueId(); + const searchableField = useUniqueId(); + const regexpField = useUniqueId(); + + return ( + + + {customFieldData?._id ? t('Edit_Custom_Field') : t('New_Custom_Field')} + router.navigate('/omnichannel/customfields')} /> + + + +
+ + + + {t('Field')} + + + (!/^[0-9a-zA-Z-_]+$/.test(value) ? t('error-invalid-custom-field-name') : undefined), + }} + render={({ field }) => ( + + )} + /> + + {errors?.field && ( + + {errors.field.message} + + )} + + + + {t('Label')} + + + ( + + )} + /> + + {errors?.label && ( + + {errors.label.message} + + )} + + + {t('Scope')} + + - - - - - {t('Visible')} - - - - - - - - {t('Searchable')} - - - - - - - {t('Validation')} - - - - - - ); -}; - -export default NewCustomFieldsForm; diff --git a/apps/meteor/client/views/omnichannel/customFields/NewCustomFieldsPage.js b/apps/meteor/client/views/omnichannel/customFields/NewCustomFieldsPage.js deleted file mode 100644 index e5ba5a892808..000000000000 --- a/apps/meteor/client/views/omnichannel/customFields/NewCustomFieldsPage.js +++ /dev/null @@ -1,86 +0,0 @@ -import { Box, Button, FieldGroup, ButtonGroup } from '@rocket.chat/fuselage'; -import { useMutableCallback } from '@rocket.chat/fuselage-hooks'; -import { useToastMessageDispatch, useRoute, useMethod, useTranslation } from '@rocket.chat/ui-contexts'; -import React, { useCallback, useState } from 'react'; - -import Page from '../../../components/Page'; -import { useForm } from '../../../hooks/useForm'; -import { CustomFieldsAdditionalFormContainer } from '../additionalForms'; -import NewCustomFieldsForm from './NewCustomFieldsForm'; - -const initialValues = { - field: '', - label: '', - scope: 'visitor', - visibility: true, - regexp: '', - searchable: true, -}; - -const NewCustomFieldsPage = ({ reload }) => { - const t = useTranslation(); - const dispatchToastMessage = useToastMessageDispatch(); - - const [additionalValues, setAdditionalValues] = useState({}); - - const router = useRoute('omnichannel-customfields'); - - const handleReturn = useCallback(() => { - router.push({}); - }, [router]); - - const { values, handlers, hasUnsavedChanges } = useForm(initialValues); - - const save = useMethod('livechat:saveCustomField'); - - const { hasError, data: additionalData, hasUnsavedChanges: additionalFormChanged } = additionalValues; - - const { label, field } = values; - - const canSave = !hasError && label && field && (additionalFormChanged || hasUnsavedChanges); - - const handleSave = useMutableCallback(async () => { - try { - await save(undefined, { - ...values, - visibility: values.visibility ? 'visible' : 'hidden', - ...additionalData, - }); - - dispatchToastMessage({ type: 'success', message: t('Saved') }); - reload(); - router.push({}); - } catch (error) { - dispatchToastMessage({ type: 'error', message: error }); - } - }); - - const handleAdditionalForm = useMutableCallback((val) => { - setAdditionalValues({ ...additionalValues, ...val }); - }); - - return ( - - - - - - - - - - - - - - - - - ); -}; - -export default NewCustomFieldsPage; diff --git a/apps/meteor/client/views/omnichannel/customFields/RemoveCustomFieldButton.tsx b/apps/meteor/client/views/omnichannel/customFields/useRemoveCustomField.tsx similarity index 56% rename from apps/meteor/client/views/omnichannel/customFields/RemoveCustomFieldButton.tsx rename to apps/meteor/client/views/omnichannel/customFields/useRemoveCustomField.tsx index 9f21fdd5d5ee..f4bbeb62a770 100644 --- a/apps/meteor/client/views/omnichannel/customFields/RemoveCustomFieldButton.tsx +++ b/apps/meteor/client/views/omnichannel/customFields/useRemoveCustomField.tsx @@ -1,25 +1,23 @@ -import type { ILivechatCustomField } from '@rocket.chat/core-typings'; -import { IconButton } from '@rocket.chat/fuselage'; import { useMutableCallback } from '@rocket.chat/fuselage-hooks'; import { useSetModal, useToastMessageDispatch, useMethod, useTranslation } from '@rocket.chat/ui-contexts'; +import { useQueryClient } from '@tanstack/react-query'; import React from 'react'; import GenericModal from '../../../components/GenericModal'; -import { GenericTableCell } from '../../../components/GenericTable'; -const RemoveCustomFieldButton = ({ _id, reload }: { _id: ILivechatCustomField['_id']; reload: () => void }) => { +export const useRemoveCustomField = () => { const t = useTranslation(); const setModal = useSetModal(); const dispatchToastMessage = useToastMessageDispatch(); const removeCustomField = useMethod('livechat:removeCustomField'); + const queryClient = useQueryClient(); - const handleDelete = useMutableCallback((e) => { - e.stopPropagation(); + const handleDelete = useMutableCallback((id) => { const onDeleteAgent = async () => { try { - await removeCustomField(_id); + await removeCustomField(id); dispatchToastMessage({ type: 'success', message: t('Custom_Field_Removed') }); - reload(); + queryClient.invalidateQueries(['livechat-customFields']); } catch (error) { dispatchToastMessage({ type: 'error', message: error }); } finally { @@ -30,11 +28,5 @@ const RemoveCustomFieldButton = ({ _id, reload }: { _id: ILivechatCustomField['_ setModal( setModal()} confirmText={t('Delete')} />); }); - return ( - - - - ); + return handleDelete; }; - -export default RemoveCustomFieldButton; diff --git a/apps/meteor/client/views/room/body/RoomBody.tsx b/apps/meteor/client/views/room/body/RoomBody.tsx index 153e669c275d..207c16e1d805 100644 --- a/apps/meteor/client/views/room/body/RoomBody.tsx +++ b/apps/meteor/client/views/room/body/RoomBody.tsx @@ -626,7 +626,6 @@ const RoomBody = (): ReactElement => { void; }; -const ComposerMessage = ({ rid, tmid, readOnly, onSend, ...props }: ComposerMessageProps): ReactElement => { +const ComposerMessage = ({ tmid, readOnly, onSend, ...props }: ComposerMessageProps): ReactElement => { const chat = useChat(); + const room = useRoom(); const dispatchToastMessage = useToastMessageDispatch(); const composerProps = useMemo( @@ -69,15 +70,15 @@ const ComposerMessage = ({ rid, tmid, readOnly, onSend, ...props }: ComposerMess [chat?.data, chat?.flows, chat?.action, chat?.composer?.text, chat?.messageEditing, dispatchToastMessage, onSend], ); - const publicationReady = useReactiveValue(useCallback(() => LegacyRoomManager.getOpenedRoomByRid(rid)?.streamActive ?? false, [rid])); + const publicationReady = useReactiveValue( + useCallback(() => LegacyRoomManager.getOpenedRoomByRid(room._id)?.streamActive ?? false, [room._id]), + ); if (!publicationReady) { return ; } - return ( - - ); + return ; }; export default memo(ComposerMessage); diff --git a/apps/meteor/client/views/room/composer/messageBox/MessageBox.tsx b/apps/meteor/client/views/room/composer/messageBox/MessageBox.tsx index c92e124abb07..b0ff907ca064 100644 --- a/apps/meteor/client/views/room/composer/messageBox/MessageBox.tsx +++ b/apps/meteor/client/views/room/composer/messageBox/MessageBox.tsx @@ -1,4 +1,4 @@ -import type { IMessage, IRoom, ISubscription } from '@rocket.chat/core-typings'; +import type { IMessage, ISubscription } from '@rocket.chat/core-typings'; import { Button, Tag, Box } from '@rocket.chat/fuselage'; import { useContentBoxSize, useMutableCallback } from '@rocket.chat/fuselage-hooks'; import { @@ -10,7 +10,7 @@ import { MessageComposerActionsDivider, MessageComposerToolbarSubmit, } from '@rocket.chat/ui-composer'; -import { useTranslation, useUserPreference, useLayout, useUserRoom } from '@rocket.chat/ui-contexts'; +import { useTranslation, useUserPreference, useLayout } from '@rocket.chat/ui-contexts'; import { useMutation } from '@tanstack/react-query'; import type { ReactElement, MouseEventHandler, FormEvent, KeyboardEventHandler, KeyboardEvent, Ref, ClipboardEventHandler } from 'react'; import React, { memo, useRef, useReducer, useCallback } from 'react'; @@ -33,6 +33,7 @@ import AudioMessageRecorder from '../../../composer/AudioMessageRecorder'; import VideoMessageRecorder from '../../../composer/VideoMessageRecorder'; import { useChat } from '../../contexts/ChatContext'; import { useComposerPopup } from '../../contexts/ComposerPopupContext'; +import { useRoom } from '../../contexts/RoomContext'; import ComposerUserActionIndicator from '../ComposerUserActionIndicator'; import { useAutoGrow } from '../RoomComposer/hooks/useAutoGrow'; import { useMessageComposerMergedRefs } from '../hooks/useMessageComposerMergedRefs'; @@ -78,7 +79,6 @@ const a: any[] = []; const getEmptyArray = () => a; type MessageBoxProps = { - rid: IRoom['_id']; tmid?: IMessage['_id']; readOnly: boolean; onSend?: (params: { value: string; tshow?: boolean; previewUrls?: string[] }) => Promise; @@ -97,7 +97,6 @@ type MessageBoxProps = { }; const MessageBox = ({ - rid, tmid, onSend, onJoin, @@ -111,8 +110,8 @@ const MessageBox = ({ previewUrls, }: MessageBoxProps): ReactElement => { const chat = useChat(); + const room = useRoom(); const t = useTranslation(); - const room = useUserRoom(rid); const composerPlaceholder = useMessageBoxPlaceholder(t('Message'), room); const [typing, setTyping] = useReducer(reducer, false); @@ -129,7 +128,7 @@ const MessageBox = ({ const messageComposerRef = useRef(null); const shadowRef = useRef(null); - const storageID = `${rid}${tmid ? `-${tmid}` : ''}`; + const storageID = `${room._id}${tmid ? `-${tmid}` : ''}`; const callbackRef = useCallback( (node: HTMLTextAreaElement) => { @@ -277,7 +276,7 @@ const MessageBox = ({ const { textAreaStyle, shadowStyle } = useAutoGrow(textareaRef, shadowRef, isRecordingAudio); - const canSend = useReactiveValue(useCallback(() => roomCoordinator.verifyCanSendMessage(rid), [rid])); + const canSend = useReactiveValue(useCallback(() => roomCoordinator.verifyCanSendMessage(room._id), [room._id])); const sizes = useContentBoxSize(textareaRef); @@ -366,7 +365,7 @@ const MessageBox = ({ focused={focused as any} renderItem={popup.renderItem} ref={commandsRef} - rid={rid} + rid={room._id} tmid={tmid} suspended={suspended} /> @@ -378,9 +377,9 @@ const MessageBox = ({ )} - {isRecordingVideo && } + {isRecordingVideo && } - {isRecordingAudio && } + {isRecordingAudio && } } aria-label={composerPlaceholder} @@ -417,7 +416,7 @@ const MessageBox = ({ isRecording={isRecording} typing={typing} canSend={canSend} - rid={rid} + rid={room._id} tmid={tmid} isMicrophoneDenied={isMicrophoneDenied} /> @@ -441,7 +440,7 @@ const MessageBox = ({ - + ); }; diff --git a/apps/meteor/client/views/room/contextualBar/Info/EditRoomInfo/EditRoomInfo.tsx b/apps/meteor/client/views/room/contextualBar/Info/EditRoomInfo/EditRoomInfo.tsx index ac325ed64a80..b5dc5120d0d7 100644 --- a/apps/meteor/client/views/room/contextualBar/Info/EditRoomInfo/EditRoomInfo.tsx +++ b/apps/meteor/client/views/room/contextualBar/Info/EditRoomInfo/EditRoomInfo.tsx @@ -37,6 +37,7 @@ import { import RawText from '../../../../../components/RawText'; import RoomAvatarEditor from '../../../../../components/avatar/RoomAvatarEditor'; import { getDirtyFields } from '../../../../../lib/getDirtyFields'; +import { useArchiveRoom } from '../../../../hooks/roomActions/useArchiveRoom'; import { useDeleteRoom } from '../../../../hooks/roomActions/useDeleteRoom'; import { useEditRoomInitialValues } from './useEditRoomInitialValues'; import { useEditRoomPermissions } from './useEditRoomPermissions'; @@ -93,7 +94,8 @@ const EditRoomInfo = ({ room, onClickClose, onClickBack }: EditRoomInfoProps) => const changeArchiving = archived !== !!room.archived; const saveAction = useEndpoint('POST', '/v1/rooms.saveRoomSettings'); - const archiveAction = useEndpoint('POST', '/v1/rooms.changeArchivationState'); + + const handleArchive = useArchiveRoom(room); const handleUpdateRoomData = useMutableCallback(async ({ hideSysMes, ...formData }) => { const data = getDirtyFields(formData, dirtyFields); @@ -115,15 +117,6 @@ const EditRoomInfo = ({ room, onClickClose, onClickBack }: EditRoomInfoProps) => } }); - const handleArchive = useMutableCallback(async () => { - try { - await archiveAction({ rid: room._id, action: room.archived ? 'unarchive' : 'archive' }); - dispatchToastMessage({ type: 'success', message: room.archived ? t('Room_has_been_unarchived') : t('Room_has_been_archived') }); - } catch (error) { - dispatchToastMessage({ type: 'error', message: error }); - } - }); - const handleSave = useMutableCallback(async (data) => { await Promise.all([isDirty && handleUpdateRoomData(data), changeArchiving && handleArchive()].filter(Boolean)); }); diff --git a/apps/meteor/client/views/room/contextualBar/Threads/components/ThreadChat.tsx b/apps/meteor/client/views/room/contextualBar/Threads/components/ThreadChat.tsx index f17357143757..5b2f659d81fb 100644 --- a/apps/meteor/client/views/room/contextualBar/Threads/components/ThreadChat.tsx +++ b/apps/meteor/client/views/room/contextualBar/Threads/components/ThreadChat.tsx @@ -101,7 +101,6 @@ const ThreadChat = ({ mainMessage }: ThreadChatProps) => { { - const instance = new ChatMessages({ rid, tmid, uid }); + const instance = new ChatMessages({ rid, tmid, uid, actionManager }); return [instance, () => instance.release()]; }, [rid, tmid, uid]); diff --git a/apps/meteor/client/views/setupWizard/steps/RegisterServerStep.tsx b/apps/meteor/client/views/setupWizard/steps/RegisterServerStep.tsx index 26d69a5ff6fc..b8370897104b 100644 --- a/apps/meteor/client/views/setupWizard/steps/RegisterServerStep.tsx +++ b/apps/meteor/client/views/setupWizard/steps/RegisterServerStep.tsx @@ -37,8 +37,13 @@ const RegisterServerStep = (): ReactElement => { staleTime: Infinity, }); - const { data } = useQuery(['setupWizard/registerIntent'], async () => registerPreIntent(), { + const { + data: offline, + isLoading, + isError, + } = useQuery(['setupWizard/registerIntent'], async () => registerPreIntent(), { staleTime: Infinity, + select: (data) => data.offline, }); const { mutate } = useMutation( @@ -77,7 +82,7 @@ const RegisterServerStep = (): ReactElement => { stepCount={maxSteps} onSubmit={handleRegister} currentStep={currentStep} - offline={!data || data.offline} + offline={isError || (!isLoading && offline)} /> ); }; diff --git a/apps/meteor/ee/app/canned-responses/client/startup/responses.js b/apps/meteor/ee/app/canned-responses/client/startup/responses.js index 7979f74b0630..6d5834d91cc0 100644 --- a/apps/meteor/ee/app/canned-responses/client/startup/responses.js +++ b/apps/meteor/ee/app/canned-responses/client/startup/responses.js @@ -24,20 +24,23 @@ Meteor.startup(() => { if (!hasPermission('view-canned-responses')) { return; } - try { - // TODO: check options - sdk.stream('canned-responses', 'canned-responses', (response, options) => { - const { agentsId } = options || {}; - if (Array.isArray(agentsId) && !agentsId.includes(Meteor.userId())) { - return; - } - events[response.type](response); - }); - const { responses } = await sdk.rest.get('/v1/canned-responses.get'); - responses.forEach((response) => CannedResponse.insert(response)); - c.stop(); - } catch (error) { - console.log(error); - } + Tracker.afterFlush(() => { + try { + // TODO: check options + sdk.stream('canned-responses', ['canned-responses'], (response, options) => { + const { agentsId } = options || {}; + if (Array.isArray(agentsId) && !agentsId.includes(Meteor.userId())) { + return; + } + events[response.type](response); + }); + } catch (error) { + console.log(error); + } + }); + + const { responses } = await sdk.rest.get('/v1/canned-responses.get'); + responses.forEach((response) => CannedResponse.insert(response)); + c.stop(); }); }); diff --git a/apps/meteor/ee/app/license/server/maxSeatsBanners.ts b/apps/meteor/ee/app/license/server/maxSeatsBanners.ts index b5aba719f29d..c94ee41248bf 100644 --- a/apps/meteor/ee/app/license/server/maxSeatsBanners.ts +++ b/apps/meteor/ee/app/license/server/maxSeatsBanners.ts @@ -15,7 +15,7 @@ const makeWarningBanner = (seats: number): IBanner => ({ view: { icon: 'warning', variant: 'warning', - viewId: '', + viewId: WARNING_BANNER_ID, appId: 'banner-core', blocks: [ { @@ -49,7 +49,7 @@ const makeDangerBanner = (): IBanner => ({ view: { icon: 'ban', variant: 'danger', - viewId: '', + viewId: DANGER_BANNER_ID, appId: 'banner-core', blocks: [ { diff --git a/apps/meteor/ee/app/license/server/settings.ts b/apps/meteor/ee/app/license/server/settings.ts index dc95c88d3481..beea68ee2b5f 100644 --- a/apps/meteor/ee/app/license/server/settings.ts +++ b/apps/meteor/ee/app/license/server/settings.ts @@ -3,8 +3,10 @@ import { Meteor } from 'meteor/meteor'; import { settingsRegistry } from '../../../../app/settings/server'; Meteor.startup(async () => { - await settingsRegistry.addGroup('Premium', async function () { - await this.section('Premium', async function () { + // The proper name for this group is Premium, but we can't change it because it's already in use and we will break the settings + // TODO: Keep this until next major updates + await settingsRegistry.addGroup('Enterprise', async function () { + await this.section('Enterprise', async function () { await this.add('Enterprise_License', '', { type: 'string', i18nLabel: 'Premium_License', @@ -12,7 +14,6 @@ Meteor.startup(async () => { await this.add('Enterprise_License_Data', '', { type: 'string', hidden: true, - blocked: true, public: false, }); await this.add('Enterprise_License_Status', '', { diff --git a/apps/meteor/ee/app/license/server/startup.ts b/apps/meteor/ee/app/license/server/startup.ts index 422e453b591c..e0dd567da392 100644 --- a/apps/meteor/ee/app/license/server/startup.ts +++ b/apps/meteor/ee/app/license/server/startup.ts @@ -42,7 +42,29 @@ const applyLicense = async (license: string, isNewLicense: boolean): Promise { +/** + * This is a debounced function that will sync the workspace data to the cloud. + * it caches the context, waits for a second and then syncs the data. + */ + +const syncByTriggerDebounced = (() => { + let timeout: NodeJS.Timeout | undefined; + const contexts: Set = new Set(); + return async (context: string) => { + contexts.add(context); + if (timeout) { + clearTimeout(timeout); + } + + timeout = setTimeout(() => { + timeout = undefined; + void syncByTrigger([...contexts]); + contexts.clear(); + }, 1000); + }; +})(); + +const syncByTrigger = async (contexts: string[]) => { if (!License.encryptedLicense) { return; } @@ -60,16 +82,19 @@ const syncByTrigger = async (context: string) => { const [, , signed] = License.encryptedLicense.split('.'); // Check if this sync has already been done. Based on License, behavior. - if (existingData.signed === signed && existingData[context] === period) { + + if ([...contexts.values()].every((context) => existingData.signed === signed && existingData[context] === period)) { return; } + const obj = Object.fromEntries(contexts.map((context) => [context, period])); + await Settings.updateValueById( 'Enterprise_License_Data', JSON.stringify({ ...(existingData.signed === signed && existingData), ...existingData, - [context]: period, + ...obj, signed, }), ); @@ -91,11 +116,11 @@ settings.onReady(async () => { callbacks.add('workspaceLicenseChanged', async (updatedLicense) => applyLicense(updatedLicense, true)); - License.onBehaviorTriggered('prevent_action', (context) => syncByTrigger(`prevent_action_${context.limit}`)); + License.onBehaviorTriggered('prevent_action', (context) => syncByTriggerDebounced(`prevent_action_${context.limit}`)); - License.onBehaviorTriggered('start_fair_policy', async (context) => syncByTrigger(`start_fair_policy_${context.limit}`)); + License.onBehaviorTriggered('start_fair_policy', async (context) => syncByTriggerDebounced(`start_fair_policy_${context.limit}`)); - License.onBehaviorTriggered('disable_modules', async (context) => syncByTrigger(`disable_modules_${context.limit}`)); + License.onBehaviorTriggered('disable_modules', async (context) => syncByTriggerDebounced(`disable_modules_${context.limit}`)); License.onChange(() => api.broadcast('license.sync')); @@ -123,4 +148,4 @@ License.setLicenseLimitCounter('guestUsers', () => Users.getActiveLocalGuestCoun License.setLicenseLimitCounter('roomsPerGuest', async (context) => (context?.userId ? Subscriptions.countByUserId(context.userId) : 0)); License.setLicenseLimitCounter('privateApps', () => getAppCount('private')); License.setLicenseLimitCounter('marketplaceApps', () => getAppCount('marketplace')); -License.setLicenseLimitCounter('monthlyActiveContacts', async () => LivechatVisitors.countVisitorsOnPeriod(moment.utc().format('YYYY-MM'))); +License.setLicenseLimitCounter('monthlyActiveContacts', () => LivechatVisitors.countVisitorsOnPeriod(moment.utc().format('YYYY-MM'))); diff --git a/apps/meteor/ee/client/apps/orchestrator.ts b/apps/meteor/ee/client/apps/orchestrator.ts index 2433d79aa7b5..eaaf367796ae 100644 --- a/apps/meteor/ee/client/apps/orchestrator.ts +++ b/apps/meteor/ee/client/apps/orchestrator.ts @@ -1,14 +1,13 @@ import { AppClientManager } from '@rocket.chat/apps-engine/client/AppClientManager'; -import type { IApiEndpointMetadata } from '@rocket.chat/apps-engine/definition/api'; import type { IPermission } from '@rocket.chat/apps-engine/definition/permissions/IPermission'; import type { ISetting } from '@rocket.chat/apps-engine/definition/settings'; -import type { AppScreenshot, AppRequestFilter, Serialized, AppRequestsStats, PaginatedAppRequests } from '@rocket.chat/core-typings'; +import type { Serialized } from '@rocket.chat/core-typings'; import { hasAtLeastOnePermission } from '../../../app/authorization/client'; import { sdk } from '../../../app/utils/client/lib/SDKClient'; import { dispatchToastMessage } from '../../../client/lib/toast'; import type { App } from '../../../client/views/marketplace/types'; -import type { IAppLanguage, IAppExternalURL, ICategory } from './@types/IOrchestrator'; +import type { IAppExternalURL, ICategory } from './@types/IOrchestrator'; import { RealAppsEngineUIHost } from './RealAppsEngineUIHost'; class AppClientOrchestrator { @@ -43,11 +42,6 @@ class AppClientOrchestrator { } } - public async screenshots(appId: string): Promise { - const { screenshots } = await sdk.rest.get(`/apps/${appId}/screenshots`); - return screenshots; - } - public async getInstalledApps(): Promise { const result = await sdk.rest.get<'/apps/installed'>('/apps/installed'); @@ -87,53 +81,15 @@ class AppClientOrchestrator { return apps; } - public async getAppsLanguages(): Promise { - const { apps } = await sdk.rest.get('/apps/languages'); - return apps; - } - public async getApp(appId: string): Promise { const { app } = await sdk.rest.get(`/apps/${appId}` as any); return app; } - public async getAppFromMarketplace(appId: string, version: string): Promise<{ app: App; success: boolean }> { - const result = await sdk.rest.get( - `/apps/${appId}` as any, - { - marketplace: 'true', - version, - } as any, - ); - return result; - } - - public async getLatestAppFromMarketplace(appId: string, version: string): Promise { - const { app } = await sdk.rest.get( - `/apps/${appId}` as any, - { - marketplace: 'true', - update: 'true', - appVersion: version, - } as any, - ); - return app; - } - public async setAppSettings(appId: string, settings: ISetting[]): Promise { await sdk.rest.post(`/apps/${appId}/settings`, { settings }); } - public async getAppApis(appId: string): Promise { - const { apis } = await sdk.rest.get(`/apps/${appId}/apis`); - return apis; - } - - public async getAppLanguages(appId: string) { - const { languages } = await sdk.rest.get(`/apps/${appId}/languages`); - return languages; - } - public async installApp(appId: string, version: string, permissionsGranted?: IPermission[]): Promise { const { app } = await sdk.rest.post<'/apps/'>('/apps/', { appId, @@ -197,32 +153,6 @@ class AppClientOrchestrator { throw new Error('Failed to build external url'); } - public async appRequests( - appId: string, - filter?: AppRequestFilter, - sort?: string, - limit?: number, - offset?: number, - ): Promise { - try { - const response = await sdk.rest.get(`/apps/app-request?appId=${appId}&q=${filter}&sort=${sort}&limit=${limit}&offset=${offset}`); - - return response; - } catch (e: unknown) { - throw new Error('Could not get the list of app requests'); - } - } - - public async getAppRequestsStats(): Promise { - try { - const response = await sdk.rest.get('/apps/app-request/stats'); - - return response; - } catch (e: unknown) { - throw new Error('Could not get the app requests stats'); - } - } - public async getCategories(): Promise> { const result = await sdk.rest.get('/apps/categories'); @@ -232,10 +162,6 @@ class AppClientOrchestrator { } throw new Error('Failed to get categories'); } - - public getUIHost(): RealAppsEngineUIHost { - return this._appClientUIHost; - } } export const AppClientOrchestratorInstance = new AppClientOrchestrator(); diff --git a/apps/meteor/ee/client/hooks/useHasLicenseModule.ts b/apps/meteor/ee/client/hooks/useHasLicenseModule.ts index c7d76b093c3b..4e44029c60f4 100644 --- a/apps/meteor/ee/client/hooks/useHasLicenseModule.ts +++ b/apps/meteor/ee/client/hooks/useHasLicenseModule.ts @@ -1,14 +1,11 @@ import type { LicenseModule } from '@rocket.chat/license'; -import { useMethod, useUserId } from '@rocket.chat/ui-contexts'; -import { useQuery } from '@tanstack/react-query'; -export const useHasLicenseModule = (licenseName: LicenseModule): 'loading' | boolean => { - const method = useMethod('license:getModules'); - const uid = useUserId(); - - const features = useQuery(['ee.features'], method, { - enabled: !!uid, - }); +import { useLicenseBase } from '../../../client/hooks/useLicense'; - return features.data?.includes(licenseName) ?? 'loading'; +export const useHasLicenseModule = (licenseName: LicenseModule): 'loading' | boolean => { + return ( + useLicenseBase({ + select: (data) => data.license.activeModules.includes(licenseName), + }).data ?? 'loading' + ); }; diff --git a/apps/meteor/ee/client/omnichannel/additionalForms/CustomFieldsAdditionalForm.js b/apps/meteor/ee/client/omnichannel/additionalForms/CustomFieldsAdditionalForm.js deleted file mode 100644 index 4650d08135c8..000000000000 --- a/apps/meteor/ee/client/omnichannel/additionalForms/CustomFieldsAdditionalForm.js +++ /dev/null @@ -1,65 +0,0 @@ -import { Box, Field, TextInput, ToggleSwitch, Select } from '@rocket.chat/fuselage'; -import { useTranslation } from '@rocket.chat/ui-contexts'; -import React, { useMemo } from 'react'; - -const CustomFieldsAdditionalForm = ({ values = {}, handlers = {}, state, className, errors }) => { - const t = useTranslation(); - - const { type, required, defaultValue, options, public: isPublic } = values; - - const { handleType, handleRequired, handleDefaultValue, handleOptions, handlePublic } = handlers; - - const { optionsError } = errors; - - const typeOptions = useMemo( - () => [ - ['input', t('Input')], - ['select', t('Select')], - ], - [t], - ); - - return ( - <> - - - {t('Required')} - - - - - - - {t('Type')} - - } /> + + + + {t('Default_value')} + + } /> + + + + {t('Options')} + + (type === 'select' && !checkIsOptionsValid(optionsValue) ? t('error-invalid-value') : undefined), + }} + render={({ field }) => ( + + )} + /> + + {t('Livechat_custom_fields_options_placeholder')} + {errors.options && ( + + {errors.options.message} + + )} + + + + {t('Public')} + + ( + + )} + /> + + + {t('Livechat_custom_fields_public_description')} + + + ); +}; + +export default CustomFieldsAdditionalForm; diff --git a/apps/meteor/ee/client/omnichannel/additionalForms/CustomFieldsAdditionalFormContainer.js b/apps/meteor/ee/client/omnichannel/additionalForms/CustomFieldsAdditionalFormContainer.js deleted file mode 100644 index e5c8a37b9c05..000000000000 --- a/apps/meteor/ee/client/omnichannel/additionalForms/CustomFieldsAdditionalFormContainer.js +++ /dev/null @@ -1,50 +0,0 @@ -import { useTranslation } from '@rocket.chat/ui-contexts'; -import React, { useMemo, useEffect } from 'react'; - -import { useForm } from '../../../../client/hooks/useForm'; -import { useHasLicenseModule } from '../../hooks/useHasLicenseModule'; -import CustomFieldsAdditionalForm from './CustomFieldsAdditionalForm'; - -const getInitialValues = (data) => ({ - type: data.type || 'input', - required: !!data.required, - defaultValue: data.defaultValue ?? '', - options: data.options || '', - public: !!data.public, -}); - -const checkInvalidOptions = (value) => { - if (!value || value.trim() === '') { - return false; - } - - return value.split(',').every((v) => /^[a-zA-Z0-9-_ ]+$/.test(v)); -}; - -const CustomFieldsAdditionalFormContainer = ({ data = {}, state, onChange, className }) => { - const t = useTranslation(); - const hasLicense = useHasLicenseModule('livechat-enterprise'); - - const { values, handlers, hasUnsavedChanges } = useForm(getInitialValues(data)); - - const errors = useMemo( - () => ({ - optionsError: checkInvalidOptions(values.options) ? t('error-invalid-value') : undefined, - }), - [t, values.options], - ); - - const hasError = useMemo(() => !!Object.values(errors).filter(Boolean).length, [errors]); - - useEffect(() => { - onChange({ data: values, hasError, hasUnsavedChanges }); - }, [hasError, hasUnsavedChanges, onChange, values]); - - if (!hasLicense) { - return null; - } - - return ; -}; - -export default CustomFieldsAdditionalFormContainer; diff --git a/apps/meteor/ee/client/sidebar/footer/SidebarFooterWatermark.tsx b/apps/meteor/ee/client/sidebar/footer/SidebarFooterWatermark.tsx index 353fd213e526..88b872ed46a3 100644 --- a/apps/meteor/ee/client/sidebar/footer/SidebarFooterWatermark.tsx +++ b/apps/meteor/ee/client/sidebar/footer/SidebarFooterWatermark.tsx @@ -3,25 +3,29 @@ import { useTranslation } from '@rocket.chat/ui-contexts'; import type { ReactElement } from 'react'; import React from 'react'; -import { useLicense } from '../../../../client/hooks/useLicense'; +import { useLicense, useLicenseName } from '../../../../client/hooks/useLicense'; export const SidebarFooterWatermark = (): ReactElement | null => { const t = useTranslation(); const response = useLicense(); + const licenseName = useLicenseName(); + if (response.isLoading || response.isError) { return null; } + if (licenseName.isError || licenseName.isLoading) { + return null; + } + const license = response.data; if (license.activeModules.includes('hide-watermark') && !license.trial) { return null; } - const [{ name: planName } = { name: 'Community' }] = license.tags ?? []; - return ( @@ -29,7 +33,7 @@ export const SidebarFooterWatermark = (): ReactElement | null => { {t('Powered_by_RocketChat')} - {[planName, license.trial ? 'trial' : ''].filter(Boolean).join(' ')} + {licenseName.data} diff --git a/apps/meteor/ee/client/views/admin/engagementDashboard/EngagementDashboardRoute.tsx b/apps/meteor/ee/client/views/admin/engagementDashboard/EngagementDashboardRoute.tsx index 19262c6e9a79..33d1acf1d35e 100644 --- a/apps/meteor/ee/client/views/admin/engagementDashboard/EngagementDashboardRoute.tsx +++ b/apps/meteor/ee/client/views/admin/engagementDashboard/EngagementDashboardRoute.tsx @@ -1,4 +1,4 @@ -import { usePermission, useRouter, useSetModal, useCurrentModal, useTranslation } from '@rocket.chat/ui-contexts'; +import { usePermission, useRouter, useSetModal, useCurrentModal, useTranslation, useRouteParameter } from '@rocket.chat/ui-contexts'; import type { ReactElement } from 'react'; import React, { useEffect } from 'react'; @@ -21,7 +21,7 @@ const EngagementDashboardRoute = (): ReactElement | null => { const isModalOpen = useCurrentModal() !== null; const router = useRouter(); - const { tab } = router.getRouteParameters(); + const tab = useRouteParameter('tab'); const eventStats = useEndpointAction('POST', '/v1/statistics.telemetry'); const hasEngagementDashboard = useHasLicenseModule('engagement-dashboard') as boolean; @@ -46,15 +46,17 @@ const EngagementDashboardRoute = (): ReactElement | null => { ); } - if (!isValidTab(tab)) { - router.navigate( - { - pattern: '/admin/engagement/:tab?', - params: { tab: 'users' }, - }, - { replace: true }, - ); - } + router.subscribeToRouteChange(() => { + if (!isValidTab(tab)) { + router.navigate( + { + pattern: '/admin/engagement/:tab?', + params: { tab: 'users' }, + }, + { replace: true }, + ); + } + }); }, [shouldShowUpsell, router, tab, setModal, t, handleManageSubscription, cloudWorkspaceHadTrial, handleTalkToSales]); if (isModalOpen) { diff --git a/apps/meteor/ee/client/views/admin/users/UserPageHeaderContentWithSeatsCap.tsx b/apps/meteor/ee/client/views/admin/users/UserPageHeaderContentWithSeatsCap.tsx index 05f89b325355..324aae2bdc90 100644 --- a/apps/meteor/ee/client/views/admin/users/UserPageHeaderContentWithSeatsCap.tsx +++ b/apps/meteor/ee/client/views/admin/users/UserPageHeaderContentWithSeatsCap.tsx @@ -4,6 +4,7 @@ import type { ReactElement } from 'react'; import React from 'react'; import { useExternalLink } from '../../../../../client/hooks/useExternalLink'; +import { useShouldPreventAction } from '../../../../../client/hooks/useShouldPreventAction'; import CloseToSeatsCapModal from './CloseToSeatsCapModal'; import ReachedSeatsCapModal from './ReachedSeatsCapModal'; import SeatsCapUsage from './SeatsCapUsage'; @@ -18,6 +19,8 @@ const UserPageHeaderContentWithSeatsCap = ({ activeUsers, maxActiveUsers }: User const seatsLinkUrl = useRequestSeatsLink(); const handleExternalLink = useExternalLink(); + const isCreateUserDisabled = useShouldPreventAction('activeUsers'); + const t = useTranslation(); const usersRoute = useRoute('admin-users'); @@ -29,16 +32,11 @@ const UserPageHeaderContentWithSeatsCap = ({ activeUsers, maxActiveUsers }: User return ratio >= 0.8; }; - const hasReachedLimit = (): boolean => { - const ratio = activeUsers / maxActiveUsers; - return ratio >= 1; - }; - const withPreventionOnReachedLimit = (fn: () => void) => (): void => { if (typeof seatsLinkUrl !== 'string') { return; } - if (hasReachedLimit()) { + if (isCreateUserDisabled) { setModal(); return; } diff --git a/apps/meteor/ee/lib/misc/Utilities.js b/apps/meteor/ee/lib/misc/Utilities.ts similarity index 70% rename from apps/meteor/ee/lib/misc/Utilities.js rename to apps/meteor/ee/lib/misc/Utilities.ts index 3d2d9a96270d..5ce7184aa601 100644 --- a/apps/meteor/ee/lib/misc/Utilities.js +++ b/apps/meteor/ee/lib/misc/Utilities.ts @@ -1,9 +1,31 @@ export class Utilities { - static getI18nKeyForApp(key, appId) { - return key && `apps-${appId}-${key}`; + static getI18nKeyForApp(key: TKey, appId: TAppId) { + return `app-${appId}.${key}` as const; } - static curl({ method, params, auth, headers = {}, url, query, content }, opts = {}) { + static curl( + { + method, + params, + auth, + headers = {}, + url, + query, + content, + }: { + method: string; + params?: Record; + auth?: string; + headers?: Record; + url: string; + query?: Record; + content?: unknown; + }, + opts: { + verbose?: boolean; + headers?: boolean; + } = {}, + ) { const newLine = '\\\n '; const cmd = ['curl']; @@ -45,7 +67,7 @@ export class Utilities { } // headers - const headerKeys = []; + const headerKeys: string[] = []; Object.entries(headers).forEach(([key, val]) => { key = key.toLowerCase(); headerKeys.push(key); diff --git a/apps/meteor/ee/server/lib/deviceManagement/session.ts b/apps/meteor/ee/server/lib/deviceManagement/session.ts index 33ed220f4183..7d68f89942cd 100644 --- a/apps/meteor/ee/server/lib/deviceManagement/session.ts +++ b/apps/meteor/ee/server/lib/deviceManagement/session.ts @@ -2,6 +2,7 @@ import type { ISocketConnection } from '@rocket.chat/core-typings'; import { Users } from '@rocket.chat/models'; import { Accounts } from 'meteor/accounts-base'; import { Meteor } from 'meteor/meteor'; +import moment from 'moment'; import { UAParser } from 'ua-parser-js'; import * as Mailer from '../../../../app/mailer/server/api'; @@ -58,6 +59,8 @@ export const listenSessionLogin = () => { return; } + const dateFormat = settings.get('Message_TimeAndDateFormat'); + const { name, username, @@ -75,6 +78,7 @@ export const listenSessionLogin = () => { }`, ipInfo: connection.clientAddress, userAgent: '', + date: moment().format(String(dateFormat)), }; switch (device.type) { diff --git a/apps/meteor/ee/server/lib/deviceManagement/startup.ts b/apps/meteor/ee/server/lib/deviceManagement/startup.ts index 963f479f5675..ee79d34da651 100644 --- a/apps/meteor/ee/server/lib/deviceManagement/startup.ts +++ b/apps/meteor/ee/server/lib/deviceManagement/startup.ts @@ -18,7 +18,7 @@ export const createEmailTemplates = async (): Promise => { }); await this.add( 'Device_Management_Email_Body', - '

{Login_Detected}

[name] ([username]) {Logged_In_Via}

{Device_Management_Client}: [browserInfo]
{Device_Management_OS}: [osInfo]
{Device_Management_Device}: [deviceInfo]
{Device_Management_IP}:[ipInfo]

[userAgent]

{Access_Your_Account}

{Or_Copy_And_Paste_This_URL_Into_A_Tab_Of_Your_Browser}
[SITE_URL]

{Thank_You_For_Choosing_RocketChat}

', + '

{Login_Detected}

[name] ([username]) {Logged_In_Via}

{Device_Management_Client}: [browserInfo]
{Device_Management_OS}: [osInfo]
{Device_Management_Device}: [deviceInfo]
{Device_Management_IP}:[ipInfo]
{Date}: [date]

[userAgent]

{Access_Your_Account}

{Or_Copy_And_Paste_This_URL_Into_A_Tab_Of_Your_Browser}
[SITE_URL]

{Thank_You_For_Choosing_RocketChat}

', { type: 'code', code: 'text/html', diff --git a/apps/meteor/ee/server/services/CHANGELOG.md b/apps/meteor/ee/server/services/CHANGELOG.md index 883df88d4704..7836b8eb1868 100644 --- a/apps/meteor/ee/server/services/CHANGELOG.md +++ b/apps/meteor/ee/server/services/CHANGELOG.md @@ -1,5 +1,124 @@ # rocketchat-services +## 1.1.15-rc.7 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.7 +- @rocket.chat/rest-typings@6.5.0-rc.7 +- @rocket.chat/core-services@0.3.0-rc.7 +- @rocket.chat/model-typings@0.2.0-rc.7 +- @rocket.chat/models@0.0.21-rc.7 + +## 1.1.15-rc.6 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.6 +- @rocket.chat/rest-typings@6.5.0-rc.6 +- @rocket.chat/core-services@0.3.0-rc.6 +- @rocket.chat/model-typings@0.2.0-rc.6 +- @rocket.chat/models@0.0.21-rc.6 + +## 1.1.15-rc.5 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.5 +- @rocket.chat/rest-typings@6.5.0-rc.5 +- @rocket.chat/core-services@0.3.0-rc.5 +- @rocket.chat/model-typings@0.2.0-rc.5 +- @rocket.chat/models@0.0.21-rc.5 + +## 1.1.15-rc.4 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.4 +- @rocket.chat/rest-typings@6.5.0-rc.4 +- @rocket.chat/core-services@0.3.0-rc.4 +- @rocket.chat/model-typings@0.2.0-rc.4 +- @rocket.chat/models@0.0.21-rc.4 + +## 1.1.15-rc.3 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.3 +- @rocket.chat/rest-typings@6.5.0-rc.3 +- @rocket.chat/core-services@0.3.0-rc.3 +- @rocket.chat/model-typings@0.2.0-rc.3 +- @rocket.chat/models@0.0.21-rc.3 + +## 1.1.15-rc.2 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.2 +- @rocket.chat/rest-typings@6.5.0-rc.2 +- @rocket.chat/core-services@0.3.0-rc.2 +- @rocket.chat/model-typings@0.2.0-rc.2 +- @rocket.chat/models@0.0.21-rc.2 + +## 1.1.15-rc.1 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.1 +- @rocket.chat/rest-typings@6.5.0-rc.1 +- @rocket.chat/core-services@0.3.0-rc.1 +- @rocket.chat/model-typings@0.2.0-rc.1 +- @rocket.chat/models@0.0.21-rc.1 + +## 1.1.15-rc.0 + +### Patch Changes + +- Updated dependencies [dea1fe9191] +- Updated dependencies [c0ef13a0bf] +- Updated dependencies [223dce18a3] +- Updated dependencies [5b9d6883bf] +- Updated dependencies [92613680b7] +- Updated dependencies [ec1b2b9846] +- Updated dependencies [a98f3ff303] +- Updated dependencies [5f81a0f3cb] +- Updated dependencies [dea1fe9191] + - @rocket.chat/core-typings@6.5.0-rc.0 + - @rocket.chat/model-typings@0.2.0-rc.0 + - @rocket.chat/core-services@0.3.0-rc.0 + - @rocket.chat/rest-typings@6.5.0-rc.0 + - @rocket.chat/models@0.0.21-rc.0 + +## 1.1.17 + +### Patch Changes + +- @rocket.chat/core-typings@6.4.8 +- @rocket.chat/rest-typings@6.4.8 +- @rocket.chat/core-services@0.2.8 +- @rocket.chat/model-typings@0.1.8 +- @rocket.chat/models@0.0.23 + +## 1.1.16 + +### Patch Changes + +- @rocket.chat/core-typings@6.4.7 +- @rocket.chat/rest-typings@6.4.7 +- @rocket.chat/core-services@0.2.7 +- @rocket.chat/model-typings@0.1.7 +- @rocket.chat/models@0.0.22 + +## 1.1.15 + +### Patch Changes + +- @rocket.chat/core-typings@6.4.6 +- @rocket.chat/rest-typings@6.4.6 +- @rocket.chat/core-services@0.2.6 +- @rocket.chat/model-typings@0.1.6 +- @rocket.chat/models@0.0.21 + ## 1.1.14 ### Patch Changes diff --git a/apps/meteor/ee/server/services/package.json b/apps/meteor/ee/server/services/package.json index b73f193d6f96..d6d6c527fbfc 100644 --- a/apps/meteor/ee/server/services/package.json +++ b/apps/meteor/ee/server/services/package.json @@ -1,7 +1,7 @@ { "name": "rocketchat-services", "private": true, - "version": "1.1.14", + "version": "1.1.18-rc.0", "description": "Rocket.Chat Authorization service", "main": "index.js", "scripts": { @@ -40,7 +40,7 @@ "fibers": "^5.0.3", "jaeger-client": "^3.19.0", "mem": "^8.1.1", - "moleculer": "^0.14.29", + "moleculer": "^0.14.31", "mongodb": "^4.17.1", "nats": "^2.6.1", "pino": "^8.15.0", @@ -51,13 +51,13 @@ }, "devDependencies": { "@rocket.chat/icons": "^0.32.0", - "@types/cookie": "^0.5.1", - "@types/cookie-parser": "^1.4.3", - "@types/ejson": "^2.2.0", - "@types/express": "^4.17.17", - "@types/fibers": "^3.1.1", - "@types/node": "^14.18.51", - "@types/ws": "^8.5.5", + "@types/cookie": "^0.5.3", + "@types/cookie-parser": "^1.4.5", + "@types/ejson": "^2.2.1", + "@types/express": "^4.17.20", + "@types/fibers": "^3.1.3", + "@types/node": "^14.18.63", + "@types/ws": "^8.5.8", "npm-run-all": "^4.1.5", "pino-pretty": "^7.6.1", "pm2": "^5.2.0", diff --git a/apps/meteor/ee/server/settings/ldap.ts b/apps/meteor/ee/server/settings/ldap.ts index 1c9137a903ce..413499375b07 100644 --- a/apps/meteor/ee/server/settings/ldap.ts +++ b/apps/meteor/ee/server/settings/ldap.ts @@ -14,7 +14,7 @@ export function addSettings(): Promise { await this.with( { - tab: 'LDAP_Premium', + tab: 'LDAP_Enterprise', enterprise: true, modules: ['ldap-enterprise'], }, diff --git a/apps/meteor/ee/server/settings/saml.ts b/apps/meteor/ee/server/settings/saml.ts index 0b4e8ee5d3c8..50cb499af07f 100644 --- a/apps/meteor/ee/server/settings/saml.ts +++ b/apps/meteor/ee/server/settings/saml.ts @@ -15,7 +15,7 @@ export const addSettings = async function (name: string): Promise { await settingsRegistry.addGroup('SAML', async function () { await this.with( { - tab: 'SAML_Premium', + tab: 'SAML_Enterprise', enterprise: true, modules: ['saml-enterprise'], }, diff --git a/apps/meteor/ee/server/startup/engagementDashboard.ts b/apps/meteor/ee/server/startup/engagementDashboard.ts index ca5dda577bb0..f7a18f1f347b 100644 --- a/apps/meteor/ee/server/startup/engagementDashboard.ts +++ b/apps/meteor/ee/server/startup/engagementDashboard.ts @@ -1,17 +1,14 @@ import { License } from '@rocket.chat/license'; -import { Meteor } from 'meteor/meteor'; License.onToggledFeature('engagement-dashboard', { - up: () => - Meteor.startup(async () => { - const { prepareAnalytics, attachCallbacks } = await import('../lib/engagementDashboard/startup'); - await prepareAnalytics(); - attachCallbacks(); - await import('../api/engagementDashboard'); - }), - down: () => - Meteor.startup(async () => { - const { detachCallbacks } = await import('../lib/engagementDashboard/startup'); - detachCallbacks(); - }), + up: async () => { + const { prepareAnalytics, attachCallbacks } = await import('../lib/engagementDashboard/startup'); + await prepareAnalytics(); + attachCallbacks(); + await import('../api/engagementDashboard'); + }, + down: async () => { + const { detachCallbacks } = await import('../lib/engagementDashboard/startup'); + detachCallbacks(); + }, }); diff --git a/apps/meteor/ee/server/startup/seatsCap.ts b/apps/meteor/ee/server/startup/seatsCap.ts index e72852052acc..d5762e5e9c13 100644 --- a/apps/meteor/ee/server/startup/seatsCap.ts +++ b/apps/meteor/ee/server/startup/seatsCap.ts @@ -70,6 +70,8 @@ callbacks.add( const handleMaxSeatsBanners = throttle(async function _handleMaxSeatsBanners() { const maxActiveUsers = License.getMaxActiveUsers(); + await License.shouldPreventAction('activeUsers'); + if (!maxActiveUsers) { await disableWarningBannerDiscardingDismissal(); await disableDangerBannerDiscardingDismissal(); diff --git a/apps/meteor/lib/utils/exhaustiveCheck.ts b/apps/meteor/lib/utils/exhaustiveCheck.ts new file mode 100644 index 000000000000..bf09ea3f6bad --- /dev/null +++ b/apps/meteor/lib/utils/exhaustiveCheck.ts @@ -0,0 +1,3 @@ +export const exhaustiveCheck = (_: never): never => { + throw new Error('Exhaustive check failed'); +}; diff --git a/apps/meteor/package.json b/apps/meteor/package.json index ba575f5a7b3f..b8a860dccad2 100644 --- a/apps/meteor/package.json +++ b/apps/meteor/package.json @@ -1,7 +1,7 @@ { "name": "@rocket.chat/meteor", "description": "The Ultimate Open Source WebChat Platform", - "version": "6.5.0-develop", + "version": "6.6.0-develop", "private": true, "author": { "name": "Rocket.Chat", @@ -64,13 +64,13 @@ }, "devDependencies": { "@axe-core/playwright": "^4.7.3", - "@babel/core": "~7.22.9", - "@babel/eslint-parser": "~7.22.9", + "@babel/core": "~7.22.20", + "@babel/eslint-parser": "~7.22.15", "@babel/plugin-proposal-nullish-coalescing-operator": "~7.18.6", "@babel/plugin-proposal-optional-chaining": "~7.21.0", - "@babel/preset-env": "~7.22.9", - "@babel/preset-react": "~7.22.5", - "@babel/register": "~7.22.5", + "@babel/preset-env": "~7.22.20", + "@babel/preset-react": "~7.22.15", + "@babel/register": "~7.22.15", "@faker-js/faker": "~8.0.2", "@playwright/test": "^1.37.1", "@rocket.chat/eslint-config": "workspace:^", @@ -84,85 +84,85 @@ "@storybook/addons": "~6.5.16", "@storybook/react": "~6.5.16", "@storybook/testing-library": "0.0.13", - "@swc/core": "^1.3.66", - "@swc/jest": "^0.2.26", + "@swc/core": "^1.3.95", + "@swc/jest": "^0.2.29", "@tanstack/react-query-devtools": "^4.19.1", "@testing-library/react": "~12.1.5", "@testing-library/react-hooks": "^8.0.1", "@testing-library/user-event": "~13.5.0", - "@types/adm-zip": "^0.5.0", - "@types/archiver": "^5.3.2", - "@types/bad-words": "^3.0.1", - "@types/bcrypt": "^5.0.0", - "@types/body-parser": "^1.19.2", - "@types/busboy": "^1.5.0", - "@types/chai": "^4.3.5", - "@types/chai-as-promised": "^7.1.5", - "@types/chai-datetime": "0.0.37", - "@types/chai-dom": "0.0.13", - "@types/chai-spies": "~1.0.3", + "@types/adm-zip": "^0.5.3", + "@types/archiver": "^5.3.4", + "@types/bad-words": "^3.0.2", + "@types/bcrypt": "^5.0.1", + "@types/body-parser": "^1.19.4", + "@types/busboy": "^1.5.2", + "@types/chai": "^4.3.9", + "@types/chai-as-promised": "^7.1.7", + "@types/chai-datetime": "0.0.38", + "@types/chai-dom": "1.11.2", + "@types/chai-spies": "~1.0.5", "@types/clipboard": "^2.0.7", - "@types/codemirror": "^5.60.8", - "@types/cookie-parser": "^1.4.3", - "@types/cors": "^2.8.13", - "@types/cssom": "^0.4.1", + "@types/codemirror": "^5.60.12", + "@types/cookie-parser": "^1.4.5", + "@types/cors": "^2.8.15", + "@types/cssom": "^0.4.2", "@types/dompurify": "^2.3.3", - "@types/ejson": "^2.2.0", - "@types/express": "^4.17.17", + "@types/ejson": "^2.2.1", + "@types/express": "^4.17.20", "@types/express-rate-limit": "^5.1.3", - "@types/fibers": "^3.1.1", - "@types/google-libphonenumber": "^7.4.23", - "@types/gravatar": "^1.8.3", + "@types/fibers": "^3.1.3", + "@types/google-libphonenumber": "^7.4.29", + "@types/gravatar": "^1.8.5", "@types/he": "^1.1.2", - "@types/i18next-sprintf-postprocessor": "^0.2.0", - "@types/imap": "^0.8.37", + "@types/i18next-sprintf-postprocessor": "^0.2.2", + "@types/imap": "^0.8.39", "@types/jsdom": "^16.2.15", - "@types/jsdom-global": "^3.0.4", - "@types/jsrsasign": "^10.5.8", - "@types/later": "^1.2.7", + "@types/jsdom-global": "^3.0.6", + "@types/jsrsasign": "^10.5.11", + "@types/later": "^1.2.8", "@types/ldapjs": "^2.2.5", - "@types/less": "~3.0.3", - "@types/lodash.get": "^4.4.7", - "@types/mailparser": "^3.4.0", + "@types/less": "~3.0.5", + "@types/lodash.get": "^4.4.8", + "@types/mailparser": "^3.4.3", "@types/marked": "^4.0.8", - "@types/meteor-collection-hooks": "^0.8.6", + "@types/meteor-collection-hooks": "^0.8.8", "@types/mkdirp": "^1.0.2", "@types/mocha": "github:whitecolor/mocha-types", "@types/moment-timezone": "^0.5.30", - "@types/node": "^14.18.51", - "@types/node-gcm": "^1.0.1", - "@types/node-rsa": "^1.1.1", - "@types/nodemailer": "^6.4.8", - "@types/oauth2-server": "^3.0.13", - "@types/parseurl": "^1.3.1", - "@types/photoswipe": "^4.1.2", - "@types/prometheus-gc-stats": "^0.6.2", - "@types/proxyquire": "^1.3.28", - "@types/psl": "^1.1.0", - "@types/react": "~17.0.62", - "@types/react-dom": "~17.0.20", - "@types/rewire": "^2.5.28", - "@types/sanitize-html": "^2.9.0", + "@types/node": "^14.18.63", + "@types/node-gcm": "^1.0.3", + "@types/node-rsa": "^1.1.3", + "@types/nodemailer": "^6.4.13", + "@types/oauth2-server": "^3.0.15", + "@types/parseurl": "^1.3.2", + "@types/photoswipe": "^4.1.5", + "@types/prometheus-gc-stats": "^0.6.3", + "@types/proxyquire": "^1.3.30", + "@types/psl": "^1.1.2", + "@types/react": "~17.0.69", + "@types/react-dom": "~17.0.22", + "@types/rewire": "^2.5.29", + "@types/sanitize-html": "^2.9.3", "@types/semver": "^7.3.10", "@types/sharp": "^0.30.5", - "@types/sinon": "^10.0.15", - "@types/strict-uri-encode": "^2.0.0", + "@types/sinon": "^10.0.20", + "@types/strict-uri-encode": "^2.0.1", "@types/string-strip-html": "^5.0.1", - "@types/supertest": "^2.0.12", - "@types/textarea-caret": "^3.0.1", - "@types/ua-parser-js": "^0.7.36", - "@types/use-subscription": "^1.0.0", - "@types/use-sync-external-store": "^0.0.3", + "@types/supertest": "^2.0.15", + "@types/textarea-caret": "^3.0.2", + "@types/ua-parser-js": "^0.7.38", + "@types/use-subscription": "^1.0.1", + "@types/use-sync-external-store": "^0.0.5", "@types/uuid": "^8.3.4", - "@types/xml-crypto": "~1.4.2", - "@types/xml-encryption": "~1.2.1", + "@types/xml-crypto": "~1.4.4", + "@types/xml-encryption": "~1.2.3", "@typescript-eslint/eslint-plugin": "~5.60.1", "@typescript-eslint/parser": "~5.60.1", "autoprefixer": "^9.8.8", "babel-loader": "^8.3.0", "babel-plugin-array-includes": "^2.0.3", "babel-plugin-istanbul": "^6.1.1", - "chai": "^4.3.7", + "chai": "^4.3.10", "chai-as-promised": "^7.1.1", "chai-datetime": "^1.8.0", "chai-dom": "^1.11.0", @@ -174,22 +174,22 @@ "eslint-plugin-anti-trojan-source": "~1.1.1", "eslint-plugin-import": "~2.26.0", "eslint-plugin-no-floating-promise": "~1.0.2", - "eslint-plugin-playwright": "~0.15.0", + "eslint-plugin-playwright": "~0.15.3", "eslint-plugin-prettier": "~4.2.1", "eslint-plugin-react": "~7.32.2", "eslint-plugin-react-hooks": "~4.6.0", - "eslint-plugin-testing-library": "~5.11.0", + "eslint-plugin-testing-library": "~5.11.1", "eslint-plugin-you-dont-need-lodash-underscore": "~6.12.0", "fast-glob": "^3.2.12", - "i18next": "~23.4.5", - "jest": "~29.6.1", + "i18next": "~23.4.9", + "jest": "~29.6.4", "jsdom-global": "^3.0.2", "mocha": "^9.2.2", "nyc": "^15.1.0", "outdent": "~0.8.0", "pino-pretty": "^7.6.1", - "playwright-qase-reporter": "^1.2.0-alpha.3", - "postcss": "~8.4.24", + "playwright-qase-reporter": "^1.2.1", + "postcss": "~8.4.31", "postcss-custom-properties": "^11.0.0", "postcss-easy-import": "^3.0.0", "postcss-load-config": "^3.1.4", @@ -210,7 +210,7 @@ "typescript": "~5.2.2" }, "dependencies": { - "@babel/runtime": "~7.22.6", + "@babel/runtime": "~7.22.15", "@bugsnag/js": "~7.20.2", "@bugsnag/plugin-react": "~7.19.0", "@google-cloud/storage": "^6.11.0", @@ -221,7 +221,7 @@ "@nivo/line": "0.80.0", "@nivo/pie": "0.80.0", "@react-aria/color": "^3.0.0-beta.15", - "@react-pdf/renderer": "^3.1.12", + "@react-pdf/renderer": "^3.1.14", "@rocket.chat/account-utils": "workspace:^", "@rocket.chat/agenda": "workspace:^", "@rocket.chat/api-client": "workspace:^", @@ -280,14 +280,14 @@ "@slack/bolt": "^3.14.0", "@slack/rtm-api": "^6.0.0", "@tanstack/react-query": "^4.16.1", - "@types/cookie": "^0.5.1", + "@types/cookie": "^0.5.3", "@types/katex": "^0.14.0", - "@types/lodash": "^4.14.195", - "@types/lodash.debounce": "^4.0.7", - "@types/object-path": "^0.11.1", - "@types/proxy-from-env": "^1.0.1", - "@types/speakeasy": "^2.0.7", - "@xmldom/xmldom": "^0.8.8", + "@types/lodash": "^4.14.200", + "@types/lodash.debounce": "^4.0.8", + "@types/object-path": "^0.11.3", + "@types/proxy-from-env": "^1.0.3", + "@types/speakeasy": "^2.0.9", + "@xmldom/xmldom": "^0.8.10", "adm-zip": "0.5.10", "ajv": "^8.11.0", "ajv-formats": "~2.1.1", @@ -307,7 +307,7 @@ "change-case": "^4.1.2", "chart.js": "^3.8.0", "clipboard": "^2.0.11", - "codemirror": "^5.65.13", + "codemirror": "^5.65.15", "colorette": "^2.0.20", "colors": "^1.4.0", "connect": "^3.7.0", @@ -335,8 +335,8 @@ "file-type": "^16.5.4", "filenamify": "^4.3.0", "filesize": "9.0.11", - "generate-password": "^1.7.0", - "google-libphonenumber": "^3.2.32", + "generate-password": "^1.7.1", + "google-libphonenumber": "^3.2.33", "googleapis": "^104.0.0", "gravatar": "^1.8.2", "he": "^1.2.0", @@ -357,7 +357,7 @@ "jsdom": "^16.7.0", "jsrsasign": "^10.5.24", "juice": "^8.0.0", - "katex": "^0.16.7", + "katex": "~0.16.9", "ldap-escape": "^2.0.6", "ldapjs": "^2.3.3", "limax": "^3.0.0", @@ -372,7 +372,7 @@ "mime-db": "^1.52.0", "mime-type": "^4.0.0", "mkdirp": "^1.0.4", - "moleculer": "^0.14.29", + "moleculer": "^0.14.31", "moment": "^2.29.4", "moment-timezone": "^0.5.43", "mongo-message-queue": "^1.0.0", @@ -393,24 +393,24 @@ "pino": "^8.15.0", "postis": "^2.2.0", "prom-client": "^14.0.1", - "prometheus-gc-stats": "^0.6.4", + "prometheus-gc-stats": "^0.6.5", "proxy-from-env": "^1.1.0", "psl": "^1.8.0", "query-string": "^7.1.3", "queue-fifo": "^0.2.6", - "rc-scrollbars": "^1.1.5", + "rc-scrollbars": "^1.1.6", "react": "~17.0.2", "react-aria": "~3.23.1", "react-dom": "~17.0.2", "react-error-boundary": "^3.1.4", "react-hook-form": "~7.45.4", - "react-i18next": "~13.2.1", + "react-i18next": "~13.2.2", "react-keyed-flatten-children": "^1.3.0", "react-virtuoso": "^1.11.1", "redis": "^4.0.6", "sanitize-html": "^2.7.2", "semver": "^7.3.7", - "sharp": "^0.30.7", + "sharp": "^0.32.6", "sip.js": "^0.20.1", "sodium-native": "^3.3.0", "sodium-plus": "^0.9.0", @@ -425,7 +425,7 @@ "turndown": "^7.1.2", "twilio": "^3.76.1", "twit": "^2.2.11", - "ua-parser-js": "^1.0.35", + "ua-parser-js": "^1.0.37", "underscore": "^1.13.6", "universal-perf-hooks": "^1.0.1", "url-polyfill": "^1.1.12", @@ -433,7 +433,7 @@ "use-sync-external-store": "^1.2.0", "uuid": "^8.3.2", "vm2": "^3.9.19", - "webdav": "^4.11.2", + "webdav": "^4.11.3", "xml-crypto": "~3.1.0", "xml-encryption": "~3.0.2", "xml2js": "~0.5.0", diff --git a/apps/meteor/packages/autoupdate/autoupdate_client.js b/apps/meteor/packages/autoupdate/autoupdate_client.js new file mode 100644 index 000000000000..36202d32bc5f --- /dev/null +++ b/apps/meteor/packages/autoupdate/autoupdate_client.js @@ -0,0 +1,207 @@ +// Subscribe to the `meteor_autoupdate_clientVersions` collection, +// which contains the set of acceptable client versions. +// +// A "hard code push" occurs when the running client version is not in +// the set of acceptable client versions (or the server updates the +// collection, there is a published client version marked `current` and +// the running client version is no longer in the set). +// +// When the `reload` package is loaded, a hard code push causes +// the browser to reload, so that it will load the latest client +// version from the server. +// +// A "soft code push" represents the situation when the running client +// version is in the set of acceptable versions, but there is a newer +// version available on the server. +// +// `Autoupdate.newClientAvailable` is a reactive data source which +// becomes `true` if a new version of the client is available on +// the server. +// +// This package doesn't implement a soft code reload process itself, +// but `newClientAvailable` could be used for example to display a +// "click to reload" link to the user. + +// The client version of the client code currently running in the +// browser. + +import { ClientVersions } from "./client_versions.js"; + +const clientArch = Meteor.isCordova ? "web.cordova" : + Meteor.isModern ? "web.browser" : "web.browser.legacy"; + +const autoupdateVersions = + ((__meteor_runtime_config__.autoupdate || {}).versions || {})[clientArch] || { + version: "unknown", + versionRefreshable: "unknown", + versionNonRefreshable: "unknown", + assets: [], + }; + +export const Autoupdate = {}; + +// Stores acceptable client versions. +const clientVersions = + Autoupdate._clientVersions = // Used by a self-test and hot-module-replacement + new ClientVersions(); + +Meteor.connection.registerStore( + "meteor_autoupdate_clientVersions", + clientVersions.createStore() +); + +Autoupdate.newClientAvailable = function () { + return clientVersions.newClientAvailable( + clientArch, + ["versionRefreshable", "versionNonRefreshable"], + autoupdateVersions + ); +}; + +// Set to true if the link.onload callback ever fires for any node. +let knownToSupportCssOnLoad = false; + +const retry = new Retry({ + // Unlike the stream reconnect use of Retry, which we want to be instant + // in normal operation, this is a wacky failure. We don't want to retry + // right away, we can start slowly. + // + // A better way than timeconstants here might be to use the knowledge + // of when we reconnect to help trigger these retries. Typically, the + // server fixing code will result in a restart and reconnect, but + // potentially the subscription could have a transient error. + minCount: 0, // don't do any immediate retries + baseTimeout: 30*1000 // start with 30s +}); + +let failures = 0; + +Autoupdate._retrySubscription = () => { + Meteor.subscribe("meteor_autoupdate_clientVersions", { + onError(error) { + Meteor._debug("autoupdate subscription failed", error); + failures++; + retry.retryLater(failures, function () { + // Just retry making the subscription, don't reload the whole + // page. While reloading would catch more cases (for example, + // the server went back a version and is now doing old-style hot + // code push), it would also be more prone to reload loops, + // which look really bad to the user. Just retrying the + // subscription over DDP means it is at least possible to fix by + // updating the server. + Autoupdate._retrySubscription(); + }); + }, + + onReady() { + // Call checkNewVersionDocument with a slight delay, so that the + // const handle declaration is guaranteed to be initialized, even if + // the added or changed callbacks are called synchronously. + const resolved = Promise.resolve(); + function check(doc) { + resolved.then(() => checkNewVersionDocument(doc)); + } + + const stop = clientVersions.watch(check); + + const reloadDelayInSeconds = Meteor.isProduction ? 60 : 0; + + function checkNewVersionDocument(doc) { + if (doc._id !== clientArch) { + return; + } + + if (doc.versionNonRefreshable !== + autoupdateVersions.versionNonRefreshable) { + // Non-refreshable assets have changed, so we have to reload the + // whole page rather than just replacing tags. + if (stop) stop(); + if (Package.reload) { + // The reload package should be provided by ddp-client, which + // is provided by the ddp package that autoupdate depends on. + + // Delay reload in 60 seconds + console.warn('Client version changed from', autoupdateVersions.versionNonRefreshable, 'to', doc.versionNonRefreshable, `Page will reload in ${reloadDelayInSeconds} seconds`); + setTimeout(() => { + Package.reload.Reload._reload(); + }, reloadDelayInSeconds * 1000); + } + return; + } + + if (doc.versionRefreshable !== autoupdateVersions.versionRefreshable) { + autoupdateVersions.versionRefreshable = doc.versionRefreshable; + + // Switch out old css links for the new css links. Inspired by: + // https://github.com/guard/guard-livereload/blob/master/js/livereload.js#L710 + var newCss = doc.assets || []; + var oldLinks = []; + + Array.prototype.forEach.call( + document.getElementsByTagName('link'), + function (link) { + if (link.className === '__meteor-css__') { + oldLinks.push(link); + } + } + ); + + function waitUntilCssLoads(link, callback) { + var called; + + link.onload = function () { + knownToSupportCssOnLoad = true; + if (! called) { + called = true; + callback(); + } + }; + + if (! knownToSupportCssOnLoad) { + var id = Meteor.setInterval(function () { + if (link.sheet) { + if (! called) { + called = true; + callback(); + } + Meteor.clearInterval(id); + } + }, 50); + } + } + + let newLinksLeftToLoad = newCss.length; + function removeOldLinks() { + if (oldLinks.length > 0 && + --newLinksLeftToLoad < 1) { + oldLinks.splice(0).forEach(link => { + link.parentNode.removeChild(link); + }); + } + } + + if (newCss.length > 0) { + newCss.forEach(css => { + const newLink = document.createElement("link"); + newLink.setAttribute("rel", "stylesheet"); + newLink.setAttribute("type", "text/css"); + newLink.setAttribute("class", "__meteor-css__"); + newLink.setAttribute("href", css.url); + + waitUntilCssLoads(newLink, function () { + Meteor.setTimeout(removeOldLinks, 200); + }); + + const head = document.getElementsByTagName("head").item(0); + head.appendChild(newLink); + }); + } else { + removeOldLinks(); + } + } + } + } + }); +}; + +Autoupdate._retrySubscription(); diff --git a/apps/meteor/packages/autoupdate/autoupdate_server.js b/apps/meteor/packages/autoupdate/autoupdate_server.js new file mode 100644 index 000000000000..a1d468490bfa --- /dev/null +++ b/apps/meteor/packages/autoupdate/autoupdate_server.js @@ -0,0 +1,182 @@ +// Publish the current client versions for each client architecture +// (web.browser, web.browser.legacy, web.cordova). When a client observes +// a change in the versions associated with its client architecture, +// it will refresh itself, either by swapping out CSS assets or by +// reloading the page. Changes to the replaceable version are ignored +// and handled by the hot-module-replacement package. +// +// There are four versions for any given client architecture: `version`, +// `versionRefreshable`, `versionNonRefreshable`, and +// `versionReplaceable`. The refreshable version is a hash of just the +// client resources that are refreshable, such as CSS. The replaceable +// version is a hash of files that can be updated with HMR. The +// non-refreshable version is a hash of the rest of the client assets, +// excluding the refreshable ones: HTML, JS that is not replaceable, and +// static files in the `public` directory. The `version` version is a +// combined hash of everything. +// +// If the environment variable `AUTOUPDATE_VERSION` is set, it will be +// used in place of all client versions. You can use this variable to +// control when the client reloads. For example, if you want to force a +// reload only after major changes, use a custom AUTOUPDATE_VERSION and +// change it only when something worth pushing to clients happens. +// +// The server publishes a `meteor_autoupdate_clientVersions` collection. +// The ID of each document is the client architecture, and the fields of +// the document are the versions described above. + +import { ClientVersions } from "./client_versions.js"; +var Future = Npm.require("fibers/future"); + +export const Autoupdate = __meteor_runtime_config__.autoupdate = { + // Map from client architectures (web.browser, web.browser.legacy, + // web.cordova) to version fields { version, versionRefreshable, + // versionNonRefreshable, refreshable } that will be stored in + // ClientVersions documents (whose IDs are client architectures). This + // data gets serialized into the boilerplate because it's stored in + // __meteor_runtime_config__.autoupdate.versions. + versions: {} +}; + +// Stores acceptable client versions. +const clientVersions = new ClientVersions(); + +// The client hash includes __meteor_runtime_config__, so wait until +// all packages have loaded and have had a chance to populate the +// runtime config before using the client hash as our default auto +// update version id. + +// Note: Tests allow people to override Autoupdate.autoupdateVersion before +// startup. +Autoupdate.autoupdateVersion = null; +Autoupdate.autoupdateVersionRefreshable = null; +Autoupdate.autoupdateVersionCordova = null; +Autoupdate.appId = __meteor_runtime_config__.appId = process.env.APP_ID; + +var syncQueue = new Meteor._SynchronousQueue(); + +function updateVersions(shouldReloadClientProgram) { + // Step 1: load the current client program on the server + if (shouldReloadClientProgram) { + WebAppInternals.reloadClientPrograms(); + } + + const { + // If the AUTOUPDATE_VERSION environment variable is defined, it takes + // precedence, but Autoupdate.autoupdateVersion is still supported as + // a fallback. In most cases neither of these values will be defined. + AUTOUPDATE_VERSION = Autoupdate.autoupdateVersion + } = process.env; + + // Step 2: update __meteor_runtime_config__.autoupdate.versions. + const clientArchs = Object.keys(WebApp.clientPrograms); + clientArchs.forEach(arch => { + Autoupdate.versions[arch] = { + version: AUTOUPDATE_VERSION || + WebApp.calculateClientHash(arch), + versionRefreshable: AUTOUPDATE_VERSION || + WebApp.calculateClientHashRefreshable(arch), + versionNonRefreshable: AUTOUPDATE_VERSION || + WebApp.calculateClientHashNonRefreshable(arch), + versionReplaceable: AUTOUPDATE_VERSION || + WebApp.calculateClientHashReplaceable(arch), + versionHmr: WebApp.clientPrograms[arch].hmrVersion + }; + }); + + // Step 3: form the new client boilerplate which contains the updated + // assets and __meteor_runtime_config__. + if (shouldReloadClientProgram) { + WebAppInternals.generateBoilerplate(); + } + + // Step 4: update the ClientVersions collection. + // We use `onListening` here because we need to use + // `WebApp.getRefreshableAssets`, which is only set after + // `WebApp.generateBoilerplate` is called by `main` in webapp. + WebApp.onListening(() => { + clientArchs.forEach(arch => { + const payload = { + ...Autoupdate.versions[arch], + assets: WebApp.getRefreshableAssets(arch), + }; + + clientVersions.set(arch, payload); + }); + }); +} + +Meteor.publish( + "meteor_autoupdate_clientVersions", + function (appId) { + // `null` happens when a client doesn't have an appId and passes + // `undefined` to `Meteor.subscribe`. `undefined` is translated to + // `null` as JSON doesn't have `undefined. + check(appId, Match.OneOf(String, undefined, null)); + + // Don't notify clients using wrong appId such as mobile apps built with a + // different server but pointing at the same local url + if (Autoupdate.appId && appId && Autoupdate.appId !== appId) + return []; + + // Random value to delay the updates for 2-10 minutes + const randomInterval = Meteor.isProduction ? (Math.floor(Math.random() * 8) + 2) * 1000 * 60 : 0; + + const stop = clientVersions.watch((version, isNew) => { + setTimeout(() => { + (isNew ? this.added : this.changed) + .call(this, "meteor_autoupdate_clientVersions", version._id, version) + }, randomInterval); + }); + + this.onStop(() => stop()); + this.ready(); + }, + {is_auto: true} +); + +Meteor.startup(function () { + updateVersions(false); + + // Force any connected clients that are still looking for these older + // document IDs to reload. + ["version", + "version-refreshable", + "version-cordova", + ].forEach(_id => { + clientVersions.set(_id, { + version: "outdated" + }); + }); +}); + +var fut = new Future(); + +// We only want 'refresh' to trigger 'updateVersions' AFTER onListen, +// so we add a queued task that waits for onListen before 'refresh' can queue +// tasks. Note that the `onListening` callbacks do not fire until after +// Meteor.startup, so there is no concern that the 'updateVersions' calls from +// 'refresh' will overlap with the `updateVersions` call from Meteor.startup. + +syncQueue.queueTask(function () { + fut.wait(); +}); + +WebApp.onListening(function () { + fut.return(); +}); + +function enqueueVersionsRefresh() { + syncQueue.queueTask(function () { + updateVersions(true); + }); +} + +// Listen for messages pertaining to the client-refresh topic. +import { onMessage } from "meteor/inter-process-messaging"; +onMessage("client-refresh", enqueueVersionsRefresh); + +// Another way to tell the process to refresh: send SIGHUP signal +process.on('SIGHUP', Meteor.bindEnvironment(function () { + enqueueVersionsRefresh(); +}, "handling SIGHUP signal for refresh")); diff --git a/apps/meteor/packages/autoupdate/client_versions.js b/apps/meteor/packages/autoupdate/client_versions.js new file mode 100644 index 000000000000..1f7b6069fc2d --- /dev/null +++ b/apps/meteor/packages/autoupdate/client_versions.js @@ -0,0 +1,104 @@ +import { Tracker } from "meteor/tracker"; + +export class ClientVersions { + constructor() { + this._versions = new Map(); + this._watchCallbacks = new Set(); + } + + // Creates a Livedata store for use with `Meteor.connection.registerStore`. + // After the store is registered, document updates reported by Livedata are + // merged with the documents in this `ClientVersions` instance. + createStore() { + return { + update: ({ id, msg, fields }) => { + if (msg === "added" || msg === "changed") { + this.set(id, fields); + } + } + }; + } + + hasVersions() { + return this._versions.size > 0; + } + + get(id) { + return this._versions.get(id); + } + + // Adds or updates a version document and invokes registered callbacks for the + // added/updated document. If a document with the given ID already exists, its + // fields are merged with `fields`. + set(id, fields) { + let version = this._versions.get(id); + let isNew = false; + + if (version) { + Object.assign(version, fields); + } else { + version = { + _id: id, + ...fields + }; + + isNew = true; + this._versions.set(id, version); + } + + this._watchCallbacks.forEach(({ fn, filter }) => { + if (! filter || filter === version._id) { + fn(version, isNew); + } + }); + } + + // Registers a callback that will be invoked when a version document is added + // or changed. Calling the function returned by `watch` removes the callback. + // If `skipInitial` is true, the callback isn't be invoked for existing + // documents. If `filter` is set, the callback is only invoked for documents + // with ID `filter`. + watch(fn, { skipInitial, filter } = {}) { + if (! skipInitial) { + const resolved = Promise.resolve(); + + this._versions.forEach((version) => { + if (! filter || filter === version._id) { + resolved.then(() => fn(version, true)); + } + }); + } + + const callback = { fn, filter }; + this._watchCallbacks.add(callback); + + return () => this._watchCallbacks.delete(callback); + } + + // A reactive data source for `Autoupdate.newClientAvailable`. + newClientAvailable(id, fields, currentVersion) { + function isNewVersion(version) { + return ( + version._id === id && + fields.some((field) => version[field] !== currentVersion[field]) + ); + } + + const dependency = new Tracker.Dependency(); + const version = this.get(id); + + dependency.depend(); + + const stop = this.watch( + (version) => { + if (isNewVersion(version)) { + dependency.changed(); + stop(); + } + }, + { skipInitial: true } + ); + + return !! version && isNewVersion(version); + } +} diff --git a/apps/meteor/packages/autoupdate/package.js b/apps/meteor/packages/autoupdate/package.js new file mode 100644 index 000000000000..a7ad595e0692 --- /dev/null +++ b/apps/meteor/packages/autoupdate/package.js @@ -0,0 +1,19 @@ +Package.describe({ + summary: 'Update the client when new client code is available', + version: '1.8.0', +}); + +Package.onUse(function(api) { + api.use(['webapp', 'check', 'inter-process-messaging'], 'server'); + + api.use(['tracker', 'retry'], 'client'); + + api.use('reload', 'client', { weak: true }); + + api.use(['ecmascript', 'ddp'], ['client', 'server']); + + api.mainModule('autoupdate_server.js', 'server'); + api.mainModule('autoupdate_client.js', 'client'); + + api.export('Autoupdate'); +}); diff --git a/apps/meteor/packages/rocketchat-i18n/i18n/af.i18n.json b/apps/meteor/packages/rocketchat-i18n/i18n/af.i18n.json index c1322ebab0af..42feea83fda0 100644 --- a/apps/meteor/packages/rocketchat-i18n/i18n/af.i18n.json +++ b/apps/meteor/packages/rocketchat-i18n/i18n/af.i18n.json @@ -973,7 +973,6 @@ "Enter_name_here": "Voer naam hier in", "Enter_Normal": "Normale modus (stuur met Enter)", "Enter_to": "Tik in", - "Enterprise": "onderneming", "Entertainment": "Vermaak", "Error": "fout", "Error_404": "Fout: 404", @@ -2757,5 +2756,6 @@ "registration.component.form.reasonToJoin": "Rede om deel te neem", "registration.component.form.invalidConfirmPass": "Die wagwoord bevestiging pas nie by die wagwoord nie", "registration.component.form.confirmPassword": "Bevestig jou wagwoord", - "registration.component.form.sendConfirmationEmail": "Stuur bevestiging e-pos" + "registration.component.form.sendConfirmationEmail": "Stuur bevestiging e-pos", + "UpgradeToGetMore_engagement-dashboard_Title": "Analytics" } \ No newline at end of file diff --git a/apps/meteor/packages/rocketchat-i18n/i18n/ar.i18n.json b/apps/meteor/packages/rocketchat-i18n/i18n/ar.i18n.json index 392b4a99b3ad..72a16aa8184a 100644 --- a/apps/meteor/packages/rocketchat-i18n/i18n/ar.i18n.json +++ b/apps/meteor/packages/rocketchat-i18n/i18n/ar.i18n.json @@ -426,6 +426,7 @@ "App_author_homepage": "الصفحة الرئيسية للمؤلف", "App_Details": "تفاصيل التطبيق", "App_Information": "معلومات التطبيق", + "Apps_context_enterprise": "مؤسسة", "App_Installation": "تثبيت التطبيق", "App_status_auto_enabled": "تم التمكين", "App_status_constructed": "تم الإنشاء", @@ -449,7 +450,6 @@ "Apply": "تطبيق", "Apply_and_refresh_all_clients": "التطبيق وتحديث جميع العملاء", "Apps": "التطبيقات", - "Apps_context_enterprise": "مؤسسة", "Apps_context_installed": "تم التثبيت", "Apps_Engine_Version": "إصدار محرك التطبيقات", "Apps_Essential_Alert": "هذا التطبيق ضروري للأحداث التالية:", @@ -1575,6 +1575,8 @@ "email_style_description": "تجنب المحدِّدات المتداخلة", "email_style_label": "نمط البريد الإلكتروني", "Email_subject": "موضوع البريد الإلكتروني", + "Enterprise_License": "ترخيص المؤسسة", + "Enterprise_License_Description": "إذا تم تسجيل مساحة العمل الخاصة بك وتم توفير الترخيص بواسطة Rocket.Chat Cloud، فلن تحتاج إلى تحديث الترخيص يدويًا هنا.", "Email_verified": "تم التحقق من البريد الإلكتروني", "Email_sent": "تم إرسال البريد الإلكتروني", "Emoji": "رمز تعبيري", @@ -1627,9 +1629,6 @@ "Enter_Normal": "الوضع العادي (إرسال باستخدام إنتر)", "Enter_to": "إدخال إلى", "Enter_your_E2E_password": "أدخل كلمة مرور التشفير بين الطرفيات", - "Enterprise": "مؤسسة", - "Enterprise_License": "ترخيص المؤسسة", - "Enterprise_License_Description": "إذا تم تسجيل مساحة العمل الخاصة بك وتم توفير الترخيص بواسطة Rocket.Chat Cloud، فلن تحتاج إلى تحديث الترخيص يدويًا هنا.", "Entertainment": "الترفيه", "Error": "خطأ", "Error_something_went_wrong": "أُووبس! هناك خطأ ما. يرجى إعادة تحميل الصفحة أو الاتصال بالمسؤول.", @@ -2435,7 +2434,6 @@ "LDAP_DataSync_Roles": "أدوار المزامنة", "LDAP_DataSync_Channels": "مزامنة Channel", "LDAP_DataSync_Teams": "مزامنة الفِرَق", - "LDAP_Enterprise": "مؤسسة", "LDAP_DataSync_BackgroundSync": "مزامنة الخلفية", "LDAP_Server_Type": "نوع الخادم", "LDAP_Server_Type_AD": "Active Directory", @@ -3660,7 +3658,6 @@ "SAML_AuthnRequest_Template": "قالب طلب المصادقة", "SAML_AuthnRequest_Template_Description": "المتغيرات التالية متاحة: \n- **\\_\\_newId\\_\\_**: سلسلة المعرّف التي تم إنشاؤها عشوائيًا \n- **\\_\\_instant\\_\\_**: الطابع الزمني الحالي \n- **\\_\\_callbackUrl\\_\\_**: عنوان URL لرد الاتصال Rocket.Chat. \n- **\\_\\_entryPoint\\_\\_**: قيمة إعداد {{Custom Entry Point}}. \n- **\\_\\_issuer\\_\\_**: قيمة إعداد {{Custom Issuer}}. \n- **\\_\\_identifierFormatTag\\_\\_**: محتويات {{NameID Policy Template}} إذا تم تكوين {{Identifier Format}} صالح. \n- **\\_\\_identifierFormat\\_\\_**: قيمة إعداد {{Identifier Format}}. \n- **\\_\\_authnContextTag\\_\\_**: محتويات {{AuthnContext Template}} إذا تم تكوين {{Custom Authn Context}} صالح. \n- **\\_\\_authnContextComparison\\_\\_**: قيمة إعداد{{Authn Context Comparison}}. \n- **\\_\\_authnContext\\_\\_**: قيمة إعداد {{Custom Authn Context}}.", "SAML_Connection": "اتصال", - "SAML_Enterprise": "مؤسسة", "SAML_General": "عام", "SAML_Custom_Authn_Context": "سياق المصادقة المخصص", "SAML_Custom_Authn_Context_Comparison": "مقارنة سياق المصادقة", @@ -4117,8 +4114,12 @@ "Teams_Search_teams": "البحث عن الفِرَق", "Teams_New_Read_only_Label": "القراءة فقط", "Technology_Services": "الخدمات التكنولوجية", + "Upgrade_tab_connection_error_description": "يبدو أنه ليس لديك اتصال بالإنترنت. قد يكون هذا بسبب أن مساحة العمل الخاصة بك مثبتة على خادم مؤمن بالكامل ومفصول.", "Terms": "الشروط", + "Upgrade_tab_connection_error_restore": "قم باستعادة الاتصال الخاص بك للتعرف على الميزات التي فاتتك.", "Test_Connection": "اختبار الاتصال", + "Upgrade_tab_go_fully_featured": "انتقل إلى الميزات الكاملة", + "Upgrade_tab_trial_guide": "دليل التجربة", "Test_Desktop_Notifications": "اختبار إشعارات سطح المكتب", "Test_LDAP_Search": "اختبار بحث LDAP", "test-admin-options": "خيارات الاختبار على لوحة الإدارة مثل تسجيل الدخول إلى LDAP والإشعارات الفورية", @@ -4274,7 +4275,6 @@ "Transcript_message": "رسالة لإظهارها عند السؤال عن النسخة المكتوبة", "Transcript_of_your_livechat_conversation": "نسخة مكتوبة من محادثة القناة متعددة الاتجاهات", "Transcript_Request": "طلب نسخة مكتوبة", - "onboarding.form.registeredServerForm.continueStandalone": "المتابعة كمستقل", "transfer-livechat-guest": "نقل ضيوف Livechat", "transfer-livechat-guest_description": "إذن لنقل ضيوف Livechat", "Transferred": "تم النقل", @@ -4378,10 +4378,6 @@ "Update_to_version": "التحديث إلى {{version}}", "Update_your_RocketChat": "تحديث Rocket.Chat الخاص بك", "Updated_at": "تم التحديث في ", - "Upgrade_tab_connection_error_description": "يبدو أنه ليس لديك اتصال بالإنترنت. قد يكون هذا بسبب أن مساحة العمل الخاصة بك مثبتة على خادم مؤمن بالكامل ومفصول.", - "Upgrade_tab_connection_error_restore": "قم باستعادة الاتصال الخاص بك للتعرف على الميزات التي فاتتك.", - "Upgrade_tab_go_fully_featured": "انتقل إلى الميزات الكاملة", - "Upgrade_tab_trial_guide": "دليل التجربة", "Upgrade_tab_upgrade_your_plan": "قم بترقية اشتراكك", "Upload": "تحميل", "Uploads": "تحميلات", @@ -4574,6 +4570,7 @@ "view-l-room": "عرض Rooms القناة متعددة الاتجاهات", "view-l-room_description": "إذن لعرض غرف القناة متعددة الاتجاهات", "view-livechat-analytics": "عرض تحليلات القناة متعددة الاتجاهات", + "onboarding.page.awaitingConfirmation.subtitle": "لقد أرسلنا إليك رسالة بريد إلكتروني إلى {{emailAddress}} مع رابط تأكيد. يرجى التحقق من أن رمز الأمان أدناه يطابق الرمز الموجود في رسالة البريد الإلكتروني.", "view-livechat-analytics_description": "إذن لعرض تحليلات الدردشة المباشرة", "view-livechat-appearance": "عرض مظهر القناة متعددة الاتجاهات", "view-livechat-appearance_description": "إذن لعرض مظهر الدردشة المباشرة", @@ -4815,80 +4812,12 @@ "registration.component.form.confirmation": "التأكيد", "registration.component.form.sendConfirmationEmail": "إرسال رسالة تأكيد", "registration.component.form.register": "تسجيل", - "onboarding.component.form.requiredField": "هذا الحقل مطلوب", - "onboarding.component.form.steps": "الخطوة {{currentStep}} من {{stepCount}}", - "onboarding.component.form.action.back": "عودة", - "onboarding.component.form.action.next": "التالي", - "onboarding.component.form.action.skip": "تخطي هذه الخطوة", - "onboarding.component.form.action.register": "تسجيل", - "onboarding.component.form.action.confirm": "تأكيد", - "onboarding.component.form.termsAndConditions": "أوافق على <1>البنود والشروط و<3>سياسة الخصوصية", - "onboarding.component.emailCodeFallback": "ألم تتلق رسالة بريد إلكتروني؟ <1>إعادة الإرسال or <3>تغيير البريد الإلكتروني", - "onboarding.page.form.title": "دعنا <1>نطلق مساحة العمل الخاصة بك", - "onboarding.page.awaitingConfirmation.title": "بانتظار التأكيد", - "onboarding.page.awaitingConfirmation.subtitle": "لقد أرسلنا إليك رسالة بريد إلكتروني إلى {{emailAddress}} مع رابط تأكيد. يرجى التحقق من أن رمز الأمان أدناه يطابق الرمز الموجود في رسالة البريد الإلكتروني.", - "onboarding.page.emailConfirmed.title": "تم تأكيد البريد الإلكتروني!", - "onboarding.page.emailConfirmed.subtitle": "يمكنك العودة إلى تطبيق Rocket.Chat الخاص بك - لقد أطلقنا مساحة العمل الخاصة بك سابقًا.", - "onboarding.page.checkYourEmail.title": "تحقق من بريدك الالكتروني", - "onboarding.page.checkYourEmail.subtitle": "تم إرسال طلبك بنجاح.<1>تحقق من صندوق بريدك الإلكتروني لبدء الإصدار التجريبي من ‏Enterprise.‏<1>ستنتهي صلاحية الرابط في غضون 30 دقيقة.", - "onboarding.page.confirmationProcess.title": "التأكيد قيد التقدم", - "onboarding.page.cloudDescription.title": "لنبدأ مساحة العمل الخاصة بك و<1>الإصدار التجريبي لمدة 14 يومًا", - "onboarding.page.cloudDescription.tryGold": "جرب أفضل خطة ذهبية لدينا لمدة 14 يومًا مجانًا", - "onboarding.page.cloudDescription.numberOfIntegrations": "1000 عملية تكامل", - "onboarding.page.cloudDescription.availability": "قابلية وصول عالية", - "onboarding.page.cloudDescription.auditing": "لوحة تدقيق الرسائل/سجلات التدقيق", - "onboarding.page.cloudDescription.engagement": "لوحة معلومات المشاركة", - "onboarding.page.cloudDescription.ldap": "مزامنة LDAP المحسّنة", - "onboarding.page.cloudDescription.omnichannel": "تجربة متميزة للقناة متعددة الاتجاهات", - "onboarding.page.cloudDescription.sla": "اتفاقية مستوى الخدمة: الإصدار المتميز", - "onboarding.page.cloudDescription.push": "الإشعارات المنبثقة الآمنة", - "onboarding.page.cloudDescription.goldIncludes": "* تشمل الباقة الذهبية جميع الميزات الموجودة في الخطط الأخرى", - "onboarding.page.alreadyHaveAccount": "هل لديك حساب؟ <1>إدارة مساحات العمل الخاصة بك.", - "onboarding.page.invalidLink.title": "لم يعد الرابط الخاص بك صالحًا", - "onboarding.page.invalidLink.content": "يبدو أنه سبق لك استخدام رابط الدعوة. تم إنشاؤه لتسجيل دخول واحد. اطلب رابطًا جديدًا للانضمام إلى مساحة العمل الخاصة بك.", - "onboarding.page.invalidLink.button.text": "طلب رابط جديد", - "onboarding.page.requestTrial.title": "طلب <1>نسخة تجريبية لمدة 30 يومًا", - "onboarding.page.requestTrial.subtitle": "جرب أفضل خطة إصدار Enterprise لمدة 30 يومًا مجانًا", - "onboarding.page.magicLinkEmail.title": "أرسلنا لك رابط تسجيل الدخول عبر البريد الإلكتروني", - "onboarding.page.magicLinkEmail.subtitle": "انقر فوق الرابط الموجود في البريد الإلكتروني الذي أرسلناه لك للتو لتسجيل الدخول إلى مساحة العمل الخاصة بك. <1>ستنتهي صلاحية الرابط خلال 30 دقيقة.", - "onboarding.form.adminInfoForm.title": "معلومات المسؤول", - "onboarding.form.adminInfoForm.subtitle": "نحتاج إلى هذا لإنشاء ملف شخصي مسؤول داخل مساحة العمل الخاصة بك", - "onboarding.form.adminInfoForm.fields.fullName.label": "الاسم الكامل", - "onboarding.form.adminInfoForm.fields.fullName.placeholder": "الاسم الأول واسم العائلة", - "onboarding.form.adminInfoForm.fields.username.label": "اسم المستخدم", - "onboarding.form.adminInfoForm.fields.username.placeholder": "‎@username", - "onboarding.form.adminInfoForm.fields.email.label": "البريد الإلكتروني", - "onboarding.form.adminInfoForm.fields.email.placeholder": "البريد الإلكتروني", - "onboarding.form.adminInfoForm.fields.password.label": "كلمة المرور", - "onboarding.form.adminInfoForm.fields.password.placeholder": "إنشاء كلمة مرور", - "onboarding.form.adminInfoForm.fields.keepPosted.label": "أبقني على اطلاع بتحديثات Rocket.Chat", - "onboarding.form.organizationInfoForm.title": "معلومات المؤسسة", - "onboarding.form.organizationInfoForm.subtitle": "نرجو أن تتعاون معنا. ستساعدنا هذه المعلومات على تخصيص مساحة عملك", - "onboarding.form.organizationInfoForm.fields.organizationName.label": "اسم المؤسسة", - "onboarding.form.organizationInfoForm.fields.organizationName.placeholder": "اسم المؤسسة", - "onboarding.form.organizationInfoForm.fields.organizationType.label": "نوع المؤسسة", - "onboarding.form.organizationInfoForm.fields.organizationType.placeholder": "تحديد", - "onboarding.form.organizationInfoForm.fields.organizationIndustry.label": "مجال المؤسسة", - "onboarding.form.organizationInfoForm.fields.organizationIndustry.placeholder": "تحديد", - "onboarding.form.organizationInfoForm.fields.organizationSize.label": "حجم المؤسسة", - "onboarding.form.organizationInfoForm.fields.organizationSize.placeholder": "تحديد", - "onboarding.form.organizationInfoForm.fields.country.label": "البلد", - "onboarding.form.organizationInfoForm.fields.country.placeholder": "تحديد", - "onboarding.form.registeredServerForm.title": "تسجيل الخادم الخاص بك", - "onboarding.form.registeredServerForm.included.push": "الإشعارات المرسلة عبر الهاتف المحمول", - "onboarding.form.registeredServerForm.included.externalProviders": "التكامل مع مقدمي الخدمات الخارجيين (WhatsApp وFacebook وTelegram وTwitter)", - "onboarding.form.registeredServerForm.included.apps": "الوصول إلى تطبيقات السوق", - "onboarding.form.registeredServerForm.fields.accountEmail.inputLabel": "البريد الإلكتروني لحساب السحابة", - "onboarding.form.registeredServerForm.fields.accountEmail.inputPlaceholder": "يرجى إدخال بريدك الإلكتروني", - "onboarding.form.registeredServerForm.keepInformed": "أبقني على اطلاع بالأخبار والأحداث", - "onboarding.form.standaloneServerForm.title": "تأكيد الخادم المستقل", - "onboarding.form.standaloneServerForm.servicesUnavailable": "لن تكون بعض الخدمات متاحة أو ستتطلب إعدادًا يدويًا", - "onboarding.form.standaloneServerForm.publishOwnApp": "لإرسال الإشعارات، تحتاج إلى تجميع تطبيقك الخاص ونشره على Google Play وApp Store", - "onboarding.form.standaloneServerForm.manuallyIntegrate": "تحتاج إلى التكامل مع الخدمات الخارجية يدويًا", "Awaiting_confirmation": "بانتظار التأكيد", "RegisterWorkspace_Features_MobileNotifications_Title": "الإشعارات المرسلة عبر الهاتف المحمول", "RegisterWorkspace_Features_Marketplace_Title": "السوق", "RegisterWorkspace_Features_Omnichannel_Title": "قناة متعددة الاتجاهات", "RegisterWorkspace_Setup_Label": "البريد الإلكتروني لحساب السحابة", - "cloud.RegisterWorkspace_Setup_Terms_Privacy": "أوافق على <1>البنود والشروط و<3>سياسة الخصوصية" -} \ No newline at end of file + "cloud.RegisterWorkspace_Setup_Terms_Privacy": "أوافق على <1>البنود والشروط و<3>سياسة الخصوصية", + "UpgradeToGetMore_engagement-dashboard_Title": "التحليلات", + "UpgradeToGetMore_auditing_Title": "تدقيق الرسائل" +} diff --git a/apps/meteor/packages/rocketchat-i18n/i18n/az.i18n.json b/apps/meteor/packages/rocketchat-i18n/i18n/az.i18n.json index d63adf27a952..f5eef4b24285 100644 --- a/apps/meteor/packages/rocketchat-i18n/i18n/az.i18n.json +++ b/apps/meteor/packages/rocketchat-i18n/i18n/az.i18n.json @@ -973,7 +973,6 @@ "Enter_name_here": "Bura ad daxil edin", "Enter_Normal": "Normal rejim (Enter ilə göndərin)", "Enter_to": "Daxil ol", - "Enterprise": "Müəssisə", "Entertainment": "Əyləncə", "Error": "Səhv", "Error_404": "Hata: 404", @@ -2757,5 +2756,6 @@ "registration.component.form.reasonToJoin": "Qoşulma səbəbi", "registration.component.form.invalidConfirmPass": "Şifrənin təsdiqlənməsi şifrə uyğun gəlmir", "registration.component.form.confirmPassword": "Şifrənizi təsdiqləyin", - "registration.component.form.sendConfirmationEmail": "Təsdiq e-poçt göndər" + "registration.component.form.sendConfirmationEmail": "Təsdiq e-poçt göndər", + "UpgradeToGetMore_engagement-dashboard_Title": "Analytics" } \ No newline at end of file diff --git a/apps/meteor/packages/rocketchat-i18n/i18n/be-BY.i18n.json b/apps/meteor/packages/rocketchat-i18n/i18n/be-BY.i18n.json index f46d3ea22b1d..326bbc0ecf59 100644 --- a/apps/meteor/packages/rocketchat-i18n/i18n/be-BY.i18n.json +++ b/apps/meteor/packages/rocketchat-i18n/i18n/be-BY.i18n.json @@ -992,7 +992,6 @@ "Enter_name_here": "Калі ласка, увядзіце імя тут", "Enter_Normal": "Нармальны рэжым (адпраўка з Enter)", "Enter_to": "увядзіце ў", - "Enterprise": "прадпрыемства", "Entertainment": "забавы", "Error": "памылка", "Error_404": "Памылка: 404", @@ -2775,5 +2774,6 @@ "registration.component.form.reasonToJoin": "прычына рэгістрацыі", "registration.component.form.invalidConfirmPass": "Пацвярджэнне пароля не супадае пароль", "registration.component.form.confirmPassword": "Пацвердзіць пароль", - "registration.component.form.sendConfirmationEmail": "Адправіць па электроннай пошце пацвярджэнне" + "registration.component.form.sendConfirmationEmail": "Адправіць па электроннай пошце пацвярджэнне", + "UpgradeToGetMore_engagement-dashboard_Title": "аналітыка" } \ No newline at end of file diff --git a/apps/meteor/packages/rocketchat-i18n/i18n/bg.i18n.json b/apps/meteor/packages/rocketchat-i18n/i18n/bg.i18n.json index b4bd9d07a849..f71214f4ce44 100644 --- a/apps/meteor/packages/rocketchat-i18n/i18n/bg.i18n.json +++ b/apps/meteor/packages/rocketchat-i18n/i18n/bg.i18n.json @@ -973,7 +973,6 @@ "Enter_name_here": "Въведете име тук", "Enter_Normal": "Нормален режим (изпратете с Enter)", "Enter_to": "Влезте в", - "Enterprise": "начинание", "Entertainment": "забавление", "Error": "Грешка", "Error_404": "Грешка: 404", @@ -2749,5 +2748,6 @@ "registration.component.form.reasonToJoin": "Причина за присъединяване", "registration.component.form.invalidConfirmPass": "Потвърждението на паролата не съвпада с паролата", "registration.component.form.confirmPassword": "Потвърдите паролата", - "registration.component.form.sendConfirmationEmail": "Изпратете имейл за потвърждение" + "registration.component.form.sendConfirmationEmail": "Изпратете имейл за потвърждение", + "UpgradeToGetMore_engagement-dashboard_Title": "анализ" } \ No newline at end of file diff --git a/apps/meteor/packages/rocketchat-i18n/i18n/bs.i18n.json b/apps/meteor/packages/rocketchat-i18n/i18n/bs.i18n.json index 81135ed5fa0d..ed6b9becf11c 100644 --- a/apps/meteor/packages/rocketchat-i18n/i18n/bs.i18n.json +++ b/apps/meteor/packages/rocketchat-i18n/i18n/bs.i18n.json @@ -970,7 +970,6 @@ "Enter_name_here": "Unesite ime", "Enter_Normal": "Normalni način rada (pošalji s Enterom)", "Enter_to": "Uđi u ", - "Enterprise": "Poduzeće", "Entertainment": "Zabava", "Error": "Pogreška", "Error_404": "Pogreška: 404", @@ -2745,5 +2744,6 @@ "registration.component.form.reasonToJoin": "Razlog pridruživanja", "registration.component.form.invalidConfirmPass": "Potvrda lozinke se ne slaže sa lozinkom", "registration.component.form.confirmPassword": "Potvrdi svoju lozinku", - "registration.component.form.sendConfirmationEmail": "Pošalji potvrdni email" + "registration.component.form.sendConfirmationEmail": "Pošalji potvrdni email", + "UpgradeToGetMore_engagement-dashboard_Title": "Analitika" } \ No newline at end of file diff --git a/apps/meteor/packages/rocketchat-i18n/i18n/ca.i18n.json b/apps/meteor/packages/rocketchat-i18n/i18n/ca.i18n.json index 9f0ef2e27a74..c91d0043ce4a 100644 --- a/apps/meteor/packages/rocketchat-i18n/i18n/ca.i18n.json +++ b/apps/meteor/packages/rocketchat-i18n/i18n/ca.i18n.json @@ -426,6 +426,7 @@ "App_author_homepage": "pàgina d'inici de l'autor", "App_Details": "Detalls de l’Aplicació", "App_Information": "Informació de l'aplicació", + "Apps_context_enterprise": "Empresa", "App_Installation": "Instal·lació de l'aplicació", "App_status_auto_enabled": "Actiu", "App_status_constructed": "Construït", @@ -449,7 +450,6 @@ "Apply": "Aplicar", "Apply_and_refresh_all_clients": "Aplicar i refrescar tots els clients", "Apps": "Aplicacions", - "Apps_context_enterprise": "Empresa", "Apps_context_installed": "Instal·lat", "Apps_Engine_Version": "Versió del Motor d'Aplicacions", "Apps_Essential_Alert": "Aquesta aplicació és essencial per als següents esdeveniments:", @@ -1567,6 +1567,8 @@ "email_style_description": "Eviteu els selectors imbricats", "email_style_label": "Estil de correu electrònic", "Email_subject": "Assumpte", + "Enterprise_License": "Llicència d’empresa", + "Enterprise_License_Description": "Si el vostre espai de treball està registrat i la llicència la proporciona Rocket.Chat Cloud, no cal que actualitzeu manualment la llicència aquí.", "Email_verified": "Adreça de correu-e verificada", "Email_sent": "Correu electrònic enviat", "Emoji": "Emoji", @@ -1618,9 +1620,6 @@ "Enter_Normal": "Mode normal (envia amb Enter)", "Enter_to": "Entra a", "Enter_your_E2E_password": "Introduïu la vostra contrasenya E2E", - "Enterprise": "Empresa", - "Enterprise_License": "Llicència d’empresa", - "Enterprise_License_Description": "Si el vostre espai de treball està registrat i la llicència la proporciona Rocket.Chat Cloud, no cal que actualitzeu manualment la llicència aquí.", "Entertainment": "Entreteniment", "Error": "Error", "Error_404": "Error: 404", @@ -2409,7 +2408,6 @@ "LDAP_DataSync_Roles": "Funcions de sincronització", "LDAP_DataSync_Channels": "Sincronització Channels", "LDAP_DataSync_Teams": "Equips de sincronització", - "LDAP_Enterprise": "Empresa", "LDAP_DataSync_BackgroundSync": "Sincronització en segon pla", "LDAP_Server_Type": "Tipus de servidor", "LDAP_Server_Type_AD": "Directori Actiu", @@ -3600,7 +3598,6 @@ "SAML_AuthnRequest_Template": "Plantilla AuthnRequest", "SAML_AuthnRequest_Template_Description": "Les següents variables estan disponibles: \n - ** \\ _ \\ _ newId \\ _ \\ _ **: Cadena d'identificació generada aleatoriamente \n- ** \\ _ \\ _ instant \\ _ \\ _ **: Data i hora actual \n- ** \\ _ \\ _ callbackUrl \\ _ \\ _ **: la URL de devolució de trucada d'Rocket.Chat. \n- ** \\ _ \\ _ entryPoint \\ _ \\ _ **: El valor de l'opció {{Custom Entry Point }} \n- ** \\ _ \\ _ issuer \\ _ \\ _ **: El valor de l'opció {{Custom Issuer }} \n- ** \\ _ \\ _ identifierFormatTag \\ _ \\ _ **: El contingut d'{{NameID Policy Template}} si un vàlid {{Identifier Format}} és configurado. \n- ** \\ _ \\ _ identifierFormat \\ _ \\ _ **: El valor de l'opció {{Identifier Format }} \n- ** \\ _ \\ _ authnContextTag \\ _ \\ _ **: El contingut de {{AuthnContext Template}} si un vàlid {{Custom Authn Context}} és configurado. \n- ** \\ _ \\ _ authnContextComparison \\ _ \\ _ * *: El valor de l'opció {{Authn Context Comparison }} \n- ** \\ _ \\ _ authnContext \\ _ \\ _ **: El valor de l'opció {{Custom Authn Context}}", "SAML_Connection": "Connexió", - "SAML_Enterprise": "Empresa", "SAML_General": "General", "SAML_Custom_Authn_Context": "Context Authn personalitzat", "SAML_Custom_Authn_Context_Comparison": "Comparació del context d’Authn", @@ -4694,6 +4691,10 @@ "registration.component.form.confirmPassword": "Confirma la contrasenya", "registration.component.form.confirmation": "Confirmació", "registration.component.form.sendConfirmationEmail": "Envia correu-e de confirmació", + "onboarding.component.form.action.pasteHere": "Enganxa aquí ...", + "onboarding.form.registerOfflineForm.title": "Registra't sense connexió", "RegisterWorkspace_Features_Marketplace_Title": "Mercat", - "RegisterWorkspace_Features_Omnichannel_Title": "LiveChat" + "RegisterWorkspace_Features_Omnichannel_Title": "LiveChat", + "UpgradeToGetMore_engagement-dashboard_Title": "Analítiques", + "UpgradeToGetMore_auditing_Title": "Auditoria de missatges" } \ No newline at end of file diff --git a/apps/meteor/packages/rocketchat-i18n/i18n/cs.i18n.json b/apps/meteor/packages/rocketchat-i18n/i18n/cs.i18n.json index c2fbddd26d29..6ef85e7d4962 100644 --- a/apps/meteor/packages/rocketchat-i18n/i18n/cs.i18n.json +++ b/apps/meteor/packages/rocketchat-i18n/i18n/cs.i18n.json @@ -1336,6 +1336,8 @@ "email_style_description": "Vyhnout se vnořeným selektorům", "email_style_label": "Styl e-mailu", "Email_subject": "Předmět", + "Enterprise_License": "Enterprise licence", + "Enterprise_License_Description": "Pokud je vaše prostředí registrováno a máte od Rocket.Chat licenci není potřeba ji zde ručně doplňovat", "Email_verified": "Email ověřen", "Emoji": "Emotikony", "EmojiCustomFilesystem": "Vlastní filesystem pro emotikony", @@ -1372,9 +1374,6 @@ "Enter_Normal": "Normální mód (odeslání po stisku klávesy enter)", "Enter_to": "Enter", "Enter_your_E2E_password": "Zadejte heslo E2E", - "Enterprise": "Korporace", - "Enterprise_License": "Enterprise licence", - "Enterprise_License_Description": "Pokud je vaše prostředí registrováno a máte od Rocket.Chat licenci není potřeba ji zde ručně doplňovat", "Entertainment": "Zábava", "Error": "Chyba", "Error_404": "Chyba: 404 nenalezeno", @@ -3962,5 +3961,9 @@ "registration.component.form.reasonToJoin": "Důvod připojení", "registration.component.form.invalidConfirmPass": "Hesla nesouhlasí", "registration.component.form.confirmPassword": "Potvrďte heslo", - "registration.component.form.sendConfirmationEmail": "Zaslat potvrzovací e-mail" + "registration.component.form.sendConfirmationEmail": "Zaslat potvrzovací e-mail", + "onboarding.component.form.action.pasteHere": "Vložte sem ...", + "onboarding.form.registerOfflineForm.title": "Registrovat ručně", + "UpgradeToGetMore_engagement-dashboard_Title": "Analytika", + "UpgradeToGetMore_auditing_Title": "Audit zpráv" } \ No newline at end of file diff --git a/apps/meteor/packages/rocketchat-i18n/i18n/cy.i18n.json b/apps/meteor/packages/rocketchat-i18n/i18n/cy.i18n.json index 0f939e6b345e..5e3589014899 100644 --- a/apps/meteor/packages/rocketchat-i18n/i18n/cy.i18n.json +++ b/apps/meteor/packages/rocketchat-i18n/i18n/cy.i18n.json @@ -972,7 +972,6 @@ "Enter_name_here": "Rhowch enw yma", "Enter_Normal": "Modd arferol (anfonwch â Enter)", "Enter_to": "Rhowch i", - "Enterprise": "Menter", "Entertainment": "Adloniant", "Error": "Gwall", "Error_404": "Gwall: 404", @@ -2748,5 +2747,6 @@ "registration.component.form.reasonToJoin": "Rheswm i Ymuno", "registration.component.form.invalidConfirmPass": "Nid yw'r cadarnhad cyfrinair yn cyfateb i'r cyfrinair", "registration.component.form.confirmPassword": "Cadarnhau eich cyfrinair", - "registration.component.form.sendConfirmationEmail": "Anfon ebost cadarnhad" + "registration.component.form.sendConfirmationEmail": "Anfon ebost cadarnhad", + "UpgradeToGetMore_engagement-dashboard_Title": "Dadansoddiadau" } \ No newline at end of file diff --git a/apps/meteor/packages/rocketchat-i18n/i18n/da.i18n.json b/apps/meteor/packages/rocketchat-i18n/i18n/da.i18n.json index 66e3bb1f035e..79eb2743394a 100644 --- a/apps/meteor/packages/rocketchat-i18n/i18n/da.i18n.json +++ b/apps/meteor/packages/rocketchat-i18n/i18n/da.i18n.json @@ -1344,6 +1344,8 @@ "email_style_description": "Undgå nedarvede valg", "email_style_label": "E-mail-Style", "Email_subject": "Emne", + "Enterprise_License": "Koncernlicens", + "Enterprise_License_Description": "Hvis dit workspace er registreret og en licens er tildelt af Rocket.Chat Cloud, behøver du ikke manuelt at opdatere licensen her", "Email_verified": "Email bekræftet", "Emoji": "Emoji", "EmojiCustomFilesystem": "Brugerdefineret emoji-filsystem", @@ -1380,9 +1382,6 @@ "Enter_Normal": "Normal mode (send med Enter)", "Enter_to": "Indtast til", "Enter_your_E2E_password": "Indtast din E2E adgangskode", - "Enterprise": "Firma", - "Enterprise_License": "Koncernlicens", - "Enterprise_License_Description": "Hvis dit workspace er registreret og en licens er tildelt af Rocket.Chat Cloud, behøver du ikke manuelt at opdatere licensen her", "Entertainment": "Underholdning", "Error": "Fejl", "Error_404": "Fejl: 404", @@ -3984,5 +3983,9 @@ "registration.component.form.reasonToJoin": "Årsag til at deltage", "registration.component.form.invalidConfirmPass": "Adgangskodebekræftelsen stemmer ikke overens med adgangskoden", "registration.component.form.confirmPassword": "Bekræft dit kodeord", - "registration.component.form.sendConfirmationEmail": "Send bekræftelses-email" + "registration.component.form.sendConfirmationEmail": "Send bekræftelses-email", + "onboarding.component.form.action.pasteHere": "Indsæt her ...", + "onboarding.form.registerOfflineForm.title": "Registrer offline", + "UpgradeToGetMore_engagement-dashboard_Title": "Analyse", + "UpgradeToGetMore_auditing_Title": "Meddelelsesovervågning" } \ No newline at end of file diff --git a/apps/meteor/packages/rocketchat-i18n/i18n/de-AT.i18n.json b/apps/meteor/packages/rocketchat-i18n/i18n/de-AT.i18n.json index 68b45bb97714..be9adb9f18f2 100644 --- a/apps/meteor/packages/rocketchat-i18n/i18n/de-AT.i18n.json +++ b/apps/meteor/packages/rocketchat-i18n/i18n/de-AT.i18n.json @@ -976,7 +976,6 @@ "Enter_name_here": "Namen hier eingeben", "Enter_Normal": "Normaler Modus (mit Eingabetaste senden)", "Enter_to": "Enter-Taste: ", - "Enterprise": "Unternehmen", "Entertainment": "Unterhaltung", "Error": "Fehler", "Error_404": "Fehler 404", @@ -2757,5 +2756,6 @@ "registration.component.form.reasonToJoin": "Grund zu Join", "registration.component.form.invalidConfirmPass": "Die Passwörter stimmen nicht überein.", "registration.component.form.confirmPassword": "Bestätigen Sie Ihr Passwort.", - "registration.component.form.sendConfirmationEmail": "Bestätigungsmail versenden" + "registration.component.form.sendConfirmationEmail": "Bestätigungsmail versenden", + "UpgradeToGetMore_engagement-dashboard_Title": "Analytics" } \ No newline at end of file diff --git a/apps/meteor/packages/rocketchat-i18n/i18n/de-IN.i18n.json b/apps/meteor/packages/rocketchat-i18n/i18n/de-IN.i18n.json index c5248fc959b9..83c76f7c1882 100644 --- a/apps/meteor/packages/rocketchat-i18n/i18n/de-IN.i18n.json +++ b/apps/meteor/packages/rocketchat-i18n/i18n/de-IN.i18n.json @@ -192,8 +192,10 @@ "Accounts_TwoFactorAuthentication_MaxDelta_Description": "Das maximale Delta bestimmt, wie viele Token zu einem bestimmten Zeitpunkt gültig sind. Token werden alle 30 Sekunden generiert und gelten für (30 * Maximum Delta) Sekunden. \nBeispiel: Wenn ein maximales Delta auf 10 gesetzt ist, kann jedes Token bis zu 300 Sekunden vor oder nach dem Zeitstempel verwendet werden. Dies ist nützlich, wenn die Uhr des Clients nicht richtig mit dem Server synchronisiert ist.", "Accounts_UseDefaultBlockedDomainsList": "Standardliste für blockierte Domains verwenden", "Accounts_UseDNSDomainCheck": "DNS-Domain-Check verwenden", + "API_EmbedDisabledFor": "Einbettungen für Benutzer deaktivieren", "Accounts_UserAddedEmail_Default": "

Willkommen zu [Site_Name]

Besuche [Site_URL] und probiere noch heute die beste Open-Source-Chat-Lösung aus.

Du kannst Dich mit den folgenden Daten anmelden: E-Mail-Adresse: [email] Passwort: [password]Es kann sein, dass Du Dein Passwort nach der ersten Anmeldung ändern musst.", "Accounts_UserAddedEmail_Description": "Du kannst folgenden Platzhalter verwenden: \n - `[name]`, `[fname]`, `[lname]` für den vollständigen Namen des Benutzers, Vornamen oder Nachnamen. \n - [email] für die E-Mail-Adresse des Benutzers. \n - [password] für das Kennwort des Benutzers. \n - [Site_Name] und `[Site_URL]` für den Anwendungsname und die URL. ", + "API_EmbedDisabledFor_Description": "Kommaseparierte Liste von Benutzernamen zum Einbetten von Link-Vorschauen", "Accounts_UserAddedEmailSubject_Default": "Du wurdest zu [Site_Name] hinzugefügt", "Activate": "Aktivieren", "Activity": "Aktivität", @@ -217,6 +219,7 @@ "add-user-to-any-p-room_description": "Berechtigung, Benutzer jedem privaten Kanal hinzuzufügen", "add-user-to-joined-room": "Benutzer jedem beigetretenen Kanal hinzufügen", "add-user-to-joined-room_description": "Berechtigung, Benutzer jedem beigetretenen Kanal hinzuzufügen", + "Apps_Framework_enabled": "Das App Framework aktivieren", "Adding_OAuth_Services": "Hinzufügen von OAuth-Services", "Adding_permission": "Berechtigung hinzufügen", "Adding_user": "Füge BenutzerIn hinzu", @@ -236,11 +239,20 @@ "Alias_Format": "Alias-Format", "Alias_Format_Description": "Nachricht von Slack mit einem Alias importieren; %s wird mit dem Benutzernamen ersetzt. Wenn Feld leer bleibt, wird kein Alias benutzt.", "Alias_Set": "Alias setzen", + "AutoLinker_Email": "AutoLinker für E-Mail-Adressen", "Aliases": "Aliase", + "AutoLinker_Phone": "AutoLinker für Telefonnummern", + "AutoLinker_Phone_Description": "Telefonnummern automatisch verlinken. z.B. `(123) 456-7890`", "All": "Alle", + "AutoLinker_StripPrefix": "AutoLinker Präfix entfernen", + "AutoLinker_StripPrefix_Description": "Kurze Anzeige. z.B. https://rocket.chat => rocket.chat", "All_added_tokens_will_be_required_by_the_user": "Alle hinzugefügten Tokens werden vom Benutzer verlangt werden", + "AutoLinker_Urls_Scheme": "Schema des AutoLinkers: // URLs", "All_channels": "Alle Kanäle", + "AutoLinker_Urls_TLD": "AutoLinker TLD-URLs", + "AutoLinker_Urls_www": "AutoLinker \"www\"-URLs", "All_logs": "Alle Protokolle", + "AutoLinker_UrlsRegExp": "AutoLinker RegExp für URLs", "All_messages": "Alle Nachrichten", "All_users": "Alle Benutzer", "All_users_in_the_channel_can_write_new_messages": "Alle Benutzer in diesem Kanal dürfen Nachrichten schreiben", @@ -252,6 +264,7 @@ "Allow_switching_departments": "Erlaube Besuchern, Abteilungen zu wechseln", "Almost_done": "Fast geschafft", "Alphabetical": "alphabetisch", + "bold": "fett", "Always_open_in_new_window": "Immer in neuem Fenster öffnen", "Analytics": "Analytics", "Analytics_features_enabled": "Aktivierte Funktionen", @@ -276,14 +289,12 @@ "API_Drupal_URL_Description": "Beispiel: https://domain.de (ohne abschließenden /)", "API_Embed": "Link-Vorschauen einbetten", "API_Embed_Description": "Eingebettete Link-Vorschau für Links, die von Benutzern gepostet wurden.", - "API_Embed_UserAgent": "User Agent des Requests übermitteln", - "API_EmbedCacheExpirationDays": "Tage bis zum Ablauf den eingebetteten Caches", - "API_EmbedDisabledFor": "Einbettungen für Benutzer deaktivieren", - "API_EmbedDisabledFor_Description": "Kommaseparierte Liste von Benutzernamen zum Einbetten von Link-Vorschauen", "API_EmbedIgnoredHosts": "Einbettungen für Hosts deaktivieren", "API_EmbedIgnoredHosts_Description": "Kommagetrennte Liste von Hosts oder CIDR-Adressen, z. B. localhost, 127.0.0.1, 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16", "API_EmbedSafePorts": "Sichere Ports", "API_EmbedSafePorts_Description": "Kommagetrennte Liste der Ports, für die eine Vorschau erlaubt ist.", + "API_Embed_UserAgent": "User Agent des Requests übermitteln", + "API_EmbedCacheExpirationDays": "Tage bis zum Ablauf den eingebetteten Caches", "API_Enable_CORS": "CORS", "API_Enable_Direct_Message_History_EndPoint": "Endpunkt für den Verlauf von Direktnachrichten", "API_Enable_Direct_Message_History_EndPoint_Description": "Aktiviere `/api/v1/im.history.others`. Hierüber ist es möglich, Direktnachrichten einzusehen, an denen der Benutzer nicht beteiligt ist.", @@ -309,7 +320,9 @@ "API_Personal_Access_Tokens_To_REST_API": "Persönlicher Zugangsschlüssel für die REST API", "API_Shield_Types": "Shield Typen", "API_Shield_Types_Description": "Shield Typen. Konfiguration mit einer komma-separierten Liste. Optionen: `online`, `channel` oder `*` für \"Alles\"", + "Apps_Framework_Development_Mode": "Entwicklungsmodus aktivieren", "API_Token": "API-Token", + "Apps_Framework_Development_Mode_Description": "Im Entwicklungsmodus können Apps installiert werden, die nicht vom Rocketchat Marketplace stammen.", "API_Tokenpass_URL": "Url des Tokenpass Servers", "API_Tokenpass_URL_Description": "Beispiel: `https://domain.com` (ohne Schrägstrich am Ende)", "API_Upper_Count_Limit": "Maximales Limit", @@ -343,12 +356,10 @@ "Apply_and_refresh_all_clients": "Anwenden und alle Clients aktualisieren", "Apps": "Apps", "Apps_Engine_Version": "Version der Anwendungsumgebung", - "Apps_Framework_Development_Mode": "Entwicklungsmodus aktivieren", - "Apps_Framework_Development_Mode_Description": "Im Entwicklungsmodus können Apps installiert werden, die nicht vom Rocketchat Marketplace stammen.", - "Apps_Framework_enabled": "Das App Framework aktivieren", "Apps_Marketplace_Login_Required_Description": "Um Apps aus dem Rocket.Chat Marketplace herunterladen zu können, muss der Arbeitsbereich registriert sein.", "Apps_Marketplace_Login_Required_Title": "Marketplace Login benötigt", "Apps_Settings": "App-Einstellungen", + "AutoLinker": "Auto Linker", "Apps_WhatIsIt": "Apps: Was ist das?", "Apps_WhatIsIt_paragraph1": "Ein neues Icon im Administrationsbereich! Was bedeutet das und was sind Apps?", "Apps_WhatIsIt_paragraph2": "Zunächst einmal beziehen sich Apps in diesem Zusammenhang nicht auf die mobilen Anwendungen. Tatsächlich wäre es am besten, sie in Form von Plugins oder fortgeschrittenen Integrationen zu betrachten.", @@ -387,16 +398,6 @@ "Auto_Translate": "Automatische Übersetzung", "auto-translate": "Automatische Übersetzung", "auto-translate_description": "Berechtigung, die automatische Überstzung zu verwenden", - "AutoLinker": "Auto Linker", - "AutoLinker_Email": "AutoLinker für E-Mail-Adressen", - "AutoLinker_Phone": "AutoLinker für Telefonnummern", - "AutoLinker_Phone_Description": "Telefonnummern automatisch verlinken. z.B. `(123) 456-7890`", - "AutoLinker_StripPrefix": "AutoLinker Präfix entfernen", - "AutoLinker_StripPrefix_Description": "Kurze Anzeige. z.B. https://rocket.chat => rocket.chat", - "AutoLinker_Urls_Scheme": "Schema des AutoLinkers: // URLs", - "AutoLinker_Urls_TLD": "AutoLinker TLD-URLs", - "AutoLinker_Urls_www": "AutoLinker \"www\"-URLs", - "AutoLinker_UrlsRegExp": "AutoLinker RegExp für URLs", "Automatic_Translation": "Automatische Übersetzung", "AutoTranslate": "Automatische Übersetzung", "AutoTranslate_APIKey": "API Key", @@ -437,7 +438,6 @@ "Blockstack_ButtonLabelText": "Text des Button-Labels", "Blockstack_Generate_Username": "Benutzernamen generieren", "Body": "Textkörper", - "bold": "fett", "bot_request": "Bot-Anfrage", "BotHelpers_userFields": "Benutzerfelder", "BotHelpers_userFields_Description": "CSV-Datei mit Benutzerfeldern die von Bot-Methoden genutzt werden dürfen.", @@ -801,6 +801,7 @@ "Country_Saudi_Arabia": "Saudi Arabien", "Country_Senegal": "Senegal", "Country_Serbia_and_Montenegro": "Serbien und Montenegro", + "inline_code": "Code", "Country_Seychelles": "Seychellen", "Country_Sierra_Leone": "Sierra Leone", "Country_Singapore": "Singapur", @@ -900,7 +901,6 @@ "Custom_Sound_Has_Been_Deleted": "Der eigene Ton wurde gelöscht.", "Custom_Sound_Info": "Info zu eigenen Tönen", "Custom_Sound_Saved_Successfully": "Der eigene Ton wurde erfolgreich gespeichert", - "Custom_Sounds": "Benutzerdefinierte Töne", "Custom_Translations": "Benutzerdefinierte Übersetzungen", "Custom_Translations_Description": "Ein gültiges JSON, in dem die Schlüssel Sprachkürzel sind, die wiederum Tupel von Schlüssel und Übersetzungen enthalten. Beispiel: \n `{\"en\": {\"Channels\": \"Rooms\"},\"pt\": {\"Channels\": \"Salas\"}}`", "Customize": "anpassen", @@ -967,6 +967,7 @@ "Desktop_Notifications_Enabled": "Desktop-Benachrichtigungen sind aktiviert.", "Desktop_Notifications_Not_Enabled": "Desktopbenachrichtigungen sind nicht aktiviert", "Details": "Details", + "line": "Zeile", "Different_Style_For_User_Mentions": "Anderer Stil für Benutzer-Erwähnungen", "Direct_message_someone": "Jemandem eine Direktnachricht schicken", "Direct_Messages": "Direktnachrichten", @@ -1030,12 +1031,22 @@ "Dry_run": "Probelauf", "Dry_run_description": "Es wird nur eine E-Mail an die Adresse aus dem Feld \"Absender\" geschickt. Die E-Mail-Adresse muss zu einem gültigen Benutzer gehören.", "Duplicate_archived_channel_name": "Ein archivierter Kanal mit dem Namen '%s' existiert bereits.", + "Markdown_Headers": "Markdown-Überschriften", + "Markdown_Marked_Breaks": "Formatierte Umbrüche", "Duplicate_archived_private_group_name": "Eine archivierter private Gruppe mit dem Namen '%s' existiert bereits.", "Duplicate_channel_name": "Ein Kanal mit dem Namen '%s' existiert bereits", + "Markdown_Marked_GFM": "Formatierung mit Github Flavoured Markdown (GFM)", + "Markdown_Marked_Pedantic": "Pedantisch Formatieren", + "Markdown_Marked_SmartLists": "Formatierte smarte Listen", "Duplicate_private_group_name": "Eine private Gruppe mit dem Namen '%s' existiert bereits.", + "Markdown_Marked_Smartypants": "Formatiere mit intelligenter Punktsetzung (\"Smartypants\")", "Duplicated_Email_address_will_be_ignored": "Doppelte E-Mail_Adressen werden ignoriert.", + "Markdown_Marked_Tables": "Formatierte Tabellen", "duplicated-account": "Doppeltes Konto", "E2E Encryption": "Ende-zu-Ende-Verschlüsselung", + "Markdown_Parser": "Markdown Parser", + "Markdown_SupportSchemesForLink": "Unterstützte Markdown- Schemata für Links", + "Markdown_SupportSchemesForLink_Description": "Kommata getrennte Liste von erlaubten Schemata", "E2E_Enable_alert": "Dieses Feature ist derzeit im Beta-Test. Bitte melde Fehler unter github.com/RocketChat/Rocket.Chat/issues und beachte folgende Auswirkungen:
- Verschlüsselte Nachrichten werden durch die Suche nicht gefunden werden.
- Die mobilen Apps unterstützen derzeit noch keine verschlüsselten Nachrichten.
- Bots werden wahrscheinlich keine verschlüsselten Nachrichten verarbeiten können.
- Uploads werden in dieser Version nicht verschlüsselt werden.", "E2E_Enable_description": "Aktiviere diese Option, um Direktnachrichten und private Gruppen verschlüsseln zu können.", "E2E_Enabled": "E2E aktiviert", @@ -1045,8 +1056,11 @@ "Edit": "Bearbeiten", "Edit_Custom_Field": "Benutzerdefinierte Felder bearbeiten", "Edit_Department": "Abteilung bearbeiten", + "Message_AllowSnippeting": "Erlauben, Snippets aus Nachrichten zu erstellen", "Edit_previous_message": "`%s` - Bearbeite vorherige Nachricht", "Edit_Trigger": "Trigger bearbeiten", + "Message_Attachments_GroupAttach": "Schaltflächen für Anhänge gruppieren", + "Message_Attachments_GroupAttachDescription": "Dies sorgt dafür, dass die Schaltflächen in einem erweiterbaren Menü untergebracht werden. So wird weniger Bildschirmplatz benötigt.", "edit-message": "Nachricht bearbeiten", "edit-message_description": "Berechtigung, eine Nachricht in einem Raum zu bearbeiten", "edit-other-user-active-status": "Online-Status anderer Benutzer ändern", @@ -1063,10 +1077,13 @@ "edit-room_description": "Berechtigung, einen Raum zu bearbeiten (Name, Thema, Sichtbarkeit, Archivierung)", "edit-room-retention-policy": "Bearbeiten der Aufbewahrungsrichtlinie für Räume", "edit-room-retention-policy_description": "Berechtigung zum Bearbeiten der Aufbewahrungsrichtlinie eines Raums, um darin enthaltene Nachrichten automatisch zu löschen", + "multi_line": "Mehrzeilig", "edited": "bearbeitet", "Editing_room": "Raum bearbeiten", "Editing_user": "BenutzerIn bearbeiten", + "Message_ShowEditedStatus": "Bearbeitungsstatus anzeigen", "Education": "Bildung", + "Message_ShowFormattingTips": "Formatierungshilfe anzeigen", "Email": "E-Mail", "Email_address_to_send_offline_messages": "E-Mail-Adresse zum Senden von Offline-Nachrichten", "Email_already_exists": "Die E-Mail-Adresse existiert bereits.", @@ -1113,7 +1130,6 @@ "Enter_Normal": "Normaler Modus (mit Eingabetaste senden)", "Enter_to": "Eingabetaste: ", "Enter_your_E2E_password": "Gib Dein Passwort für die Ende-Zu-Ende-Verschlüsselung ein", - "Enterprise": "Unternehmen", "Entertainment": "Unterhaltung", "Error": "Fehler", "Error_404": "Fehler: 404(nicht gefunden)", @@ -1259,6 +1275,7 @@ "FEDERATION_Status": "Status", "FEDERATION_Test_Setup_Error": "Ich konnte Deinen Server mit dieser Konfiguration nicht finden. Bitte überprüfe Deine Einstellungen.", "FEDERATION_Test_Setup_Success": "Dein Föderations-Setup funktioniert - andere Server können diesen Server nun finden!", + "Retry_Count": "Anzahl der Wiederholungsversuche", "Field": "Feld", "Field_removed": "Feld entfernt", "Field_required": "Feld erforderlich", @@ -1363,9 +1380,9 @@ "Full_Screen": "Vollbild", "Gaming": "Spiele", "General": "Allgemeines", - "Get_link": "Link abrufen", "github_no_public_email": "Du hast keine öffentliche E-Mail-Adresse in Deinem GitHub-Account.", "Give_a_unique_name_for_the_custom_oauth": "Gib dem benutzerdefinierten OAuth-Konto einen eindeutigen Namen.", + "strike": "durchgestrichen", "Give_the_application_a_name_This_will_be_seen_by_your_users": "Gib der Anwendung einen Namen. Alle Nutzer können diesen Namen sehen.", "Global": "Global", "Global Policy": "Globale Policy", @@ -1379,7 +1396,10 @@ "Graphql_CORS": "GraphQL CORS", "Graphql_Enabled": "GraphQL aktiviert", "Graphql_Subscription_Port": "GraphQL Subscription Port", + "Snippet_Messages": "Nachrichten-Snippets", "Group_by_Type": "Gruppieren nach Typ", + "snippet-message": "Nachrichten-Snippet", + "snippet-message_description": "Berechtigung, ein Nachrichten-Snippet zu erstellen", "Group_discussions": "Gruppendiskussionen", "Group_favorites": "Gruppenfavoriten", "Group_mentions_disabled_x_members": "Die Gruppenerwähnungen `@all` und `@here` wurden für Räume mit mehr als {{total}} Mitgliedern deaktiviert.", @@ -1419,8 +1439,6 @@ "Idle_Time_Limit_Description": "Zeitraum bis sich der Status in away ändert. Der Wert muss in Sekunden angegeben werden.", "if_they_are_from": "(wenn sie von %s sind)", "If_this_email_is_registered": "Wenn es sich um eine registrierte E-Mail-Adresse handelt, werden wir an diese eine Anleitung zum Zurücksetzen des Passworts senden. Solltest Du zeitnah keine E-Mail erhalten, versuche es noch einmal.", - "If_you_are_sure_type_in_your_password": "Wenn Du Dir sicher bist, gib Dein Passwort ein:", - "If_you_are_sure_type_in_your_username": "Wenn Du Dir sicher bist, gib Deinen Benutzernamen ein:", "If_you_didnt_ask_for_reset_ignore_this_email": "Wenn Du das Zurücksetzen des Kennworts nicht angefordert hast, kannst Du diese E-Mail ignorieren.", "Iframe_Integration": "Iframe-Integration", "Iframe_Integration_receive_enable": "Empfang zulassen", @@ -1475,7 +1493,6 @@ "Industry": "Industrie", "Info": "Info", "initials_avatar": "Avatar aus Initialien", - "inline_code": "Code", "Install": "Installieren", "Install_Extension": "Erweiterung installieren", "Install_FxOs": "Rocket.Chat in Deinen Firefox installieren", @@ -1585,7 +1602,6 @@ "IssueLinks_LinkTemplate": "Vorlage für Issue-Verknüpfungen", "IssueLinks_LinkTemplate_Description": "Vorlage für Issue-Verknüpfungen; %s wird mit der Issue-Nummer ersetzt werden.", "It_works": "Es funktioniert", - "italic": "Kursiv", "italics": "kursiv", "Job_Title": "Berufsbezeichnung", "Join_audio_call": "Anruf beitreten", @@ -1752,7 +1768,6 @@ "leave-c": "Kanäle verlassen", "leave-p": "Verlasse private Gruppen", "Lets_get_you_new_one": "Lass mich Ihnen ein neues geben!", - "line": "Zeile", "List_of_Channels": "Liste der Kanäle", "List_of_Direct_Messages": "Liste der Direktnachrichten", "Livechat": "Livechat", @@ -1862,16 +1877,6 @@ "Mark_as_unread": "Als ungelesen markieren", "Mark_read": "Als gelesen markieren", "Mark_unread": "Als ungelesen markieren", - "Markdown_Headers": "Markdown-Überschriften", - "Markdown_Marked_Breaks": "Formatierte Umbrüche", - "Markdown_Marked_GFM": "Formatierung mit Github Flavoured Markdown (GFM)", - "Markdown_Marked_Pedantic": "Pedantisch Formatieren", - "Markdown_Marked_SmartLists": "Formatierte smarte Listen", - "Markdown_Marked_Smartypants": "Formatiere mit intelligenter Punktsetzung (\"Smartypants\")", - "Markdown_Marked_Tables": "Formatierte Tabellen", - "Markdown_Parser": "Markdown Parser", - "Markdown_SupportSchemesForLink": "Unterstützte Markdown- Schemata für Links", - "Markdown_SupportSchemesForLink_Description": "Kommata getrennte Liste von erlaubten Schemata", "Marketplace_view_marketplace": "Marketplace anzeigen", "Max_length_is": "Maximale Länge ist %s", "Media": "Medien", @@ -1898,14 +1903,11 @@ "Message_AllowEditing_BlockEditInMinutesDescription": "Gib 0 ein, um das Bearbeiten von Nachrichten unbegrenzt zu erlauben.", "Message_AllowPinning": "Das Anheften von Nachrichten erlauben", "Message_AllowPinning_Description": "Benutzern das Anheften von Nachrichten in Kanälen erlauben", - "Message_AllowSnippeting": "Erlauben, Snippets aus Nachrichten zu erstellen", "Message_AllowStarring": "Erlaube es, Nachrichten als Favoriten zu markieren", "Message_AllowUnrecognizedSlashCommand": "Unerkannte Slash-Kommandos erlauben", "Message_AlwaysSearchRegExp": "Beim Suchen immer reguläre Ausdrücke verwenden", "Message_AlwaysSearchRegExp_Description": "Wir empfehlen diese Option, wenn Deine Sprache in der [MongoDB-Textsuche](https://docs.mongodb.org/manual/reference/text-search-languages/#text-search-languages) nicht unterstützt wird.", "Message_Attachments": "Nachrichten-Anhänge", - "Message_Attachments_GroupAttach": "Schaltflächen für Anhänge gruppieren", - "Message_Attachments_GroupAttachDescription": "Dies sorgt dafür, dass die Schaltflächen in einem erweiterbaren Menü untergebracht werden. So wird weniger Bildschirmplatz benötigt.", "Report_sent": "Bericht gesendet", "Message_Audio": "Audio Nachricht", "Message_Audio_bitRate": "Audio-Nachrichten-Bitrate", @@ -1943,8 +1945,6 @@ "Message_removed": "Die Nachricht wurde entfernt", "Message_sent_by_email": "Nachricht per E-Mail versendet", "Message_ShowDeletedStatus": "Löschstatus anzeigen", - "Message_ShowEditedStatus": "Bearbeitungsstatus anzeigen", - "Message_ShowFormattingTips": "Formatierungshilfe anzeigen", "Message_starring": "Markieren von favorisierten Nachrichten", "Message_Time": "Zeitpunkt der Nachricht", "Message_TimeAndDateFormat": "Zeit- und Datumsformat", @@ -1983,7 +1983,6 @@ "Move_end_message": "`%s` - Zum Ende der Nachricht springen", "Msgs": "Nachrichten", "multi": "mehrere", - "multi_line": "Mehrzeilig", "Mute_all_notifications": "Alle Benachrichtigungen stummschalten", "Mute_Focused_Conversations": "Stumm geschaltete Gespräche", "Mute_Group_Mentions": "Mute @all und @here erwähnt", @@ -2071,9 +2070,7 @@ "Number_of_events": "Anzahl der Ereignisse", "Number_of_federated_users": "Anzahl föderierter Benutzer", "Number_of_messages": "Nachrichtenanzahl", - "OAuth Apps": "OAuth-Apps", "OAuth_Application": "OAuth-Anwendung", - "OAuth_Applications": "OAuth-Anwendungen", "Objects": "Objekte", "Off": "Aus", "Off_the_record_conversation": "Off-the-record-Gespräche", @@ -2376,7 +2373,6 @@ "RetentionPolicyRoom_MaxAge": "Maximales Nachrichtenalter in Tagen (Standard: {{max}})", "RetentionPolicyRoom_OverrideGlobal": "Globale Aufbewahrungsrichtlinie außer Kraft setzen", "RetentionPolicyRoom_ReadTheDocs": "Achtung! Das Anpassen dieser Einstellungen ohne große Sorgfalt kann den gesamten Nachrichtenverlauf zerstören. Bitte lies die Dokumentation, bevor Du das Feature unter hieraktivierst.", - "Retry_Count": "Anzahl der Wiederholungsversuche", "Return_to_home": "Zurück zur Startseite", "Return_to_previous_page": "zur vorherigen Seite zurückkehren", "Robot_Instructions_File_Content": "Inhalt von Robots.txt", @@ -2511,6 +2507,7 @@ "Set_as_leader": "Zum Diskussionsleiter ernennen", "Set_as_moderator": "Zum Moderator ernennen", "Set_as_owner": "Zum Besitzer machen", + "Upload_app": "App hochladen", "set-leader": "Diskussionsleiter ernennen", "set-moderator": "Moderator ernennen", "set-moderator_description": "Berechtigung, andere Benutzer zum Moderator eines Kanals zu ernennen", @@ -2592,10 +2589,7 @@ "SMTP_Test_Button": "SMTP-Einstellungen testen", "SMTP_Username": "SMTP-Benutzername", "Snippet_Added": "Erstellt am %s", - "Snippet_Messages": "Nachrichten-Snippets", "Snippet_name": "Snippet-Name", - "snippet-message": "Nachrichten-Snippet", - "snippet-message_description": "Berechtigung, ein Nachrichten-Snippet zu erstellen", "Snippeted_a_message": "Ein Snippet wurde erstellt: {{snippetLink}}", "Social_Network": "Soziales Netzwerk", "Sorry_page_you_requested_does_not_exist_or_was_deleted": "Entschuldigung, die angeforderte Seite existiert nicht oder wurde gelöscht!", @@ -2653,7 +2647,6 @@ "Stream_Cast": "Stream Cast", "Stream_Cast_Address": "Stream Cast Adresse", "Stream_Cast_Address_Description": "IP oder Host Deines zentralen Stream Cast Servers inkl. Port, bspw. `192.168.1.1:3000` oder `localhost:4000`", - "strike": "durchgestrichen", "Style": "Stil", "Subject": "Betreff", "Submit": "Abssenden", @@ -2819,7 +2812,6 @@ "Type_your_job_title": "Gib Deine Job-Bezeichnung ein", "Type_your_message": "Gib Deine Nachricht ein", "Type_your_name": "Gib Deinen Namen ein", - "Type_your_new_password": "Gib ein neues Passwort ein", "Type_your_password": "Gib Dein Passwort ein", "Type_your_username": "Gib Deinen Benutzernamen ein", "UI_Allow_room_names_with_special_chars": "Sonderzeichen im Raumnamen erlauben", @@ -2858,7 +2850,6 @@ "Update_to_version": "Auf Version {{version}} aktualisieren", "Update_your_RocketChat": "Aktualisiere Dein Rocket.Chat", "Updated_at": "Aktualisiert am", - "Upload_app": "App hochladen", "Upload_file_description": "Dateibeschreibung", "Upload_file_name": "Dateiname", "Upload_file_question": "Datei hochladen?", @@ -3112,4 +3103,4 @@ "Your_question": "Deine Frage", "Your_server_link": "Dein Server-Link", "Your_workspace_is_ready": "Dein Arbeitsbereich ist einsatzbereit 🎉" -} +} \ No newline at end of file diff --git a/apps/meteor/packages/rocketchat-i18n/i18n/de.i18n.json b/apps/meteor/packages/rocketchat-i18n/i18n/de.i18n.json index 52054a3ebdad..a0d2c67273da 100644 --- a/apps/meteor/packages/rocketchat-i18n/i18n/de.i18n.json +++ b/apps/meteor/packages/rocketchat-i18n/i18n/de.i18n.json @@ -468,6 +468,7 @@ "App_Details": "Anwendungs-Details", "App_Info": "App Info", "App_Information": "App-Informationen", + "Apps_context_enterprise": "Unternehmen", "App_Installation": "App-Installation", "App_not_enabled": "App nicht aktiviert", "App_not_found": "Anwendung nicht gefunden", @@ -495,7 +496,6 @@ "Apply_and_refresh_all_clients": "Anwenden und alle Clients aktualisieren", "Apps": "Anwendungen", "Apps_context_explore": "Erkunden", - "Apps_context_enterprise": "Unternehmen", "Apps_context_installed": "Installiert", "Apps_context_requested": "Angefordert", "Apps_Engine_Version": "Version der Anwendungs-Engine", @@ -769,6 +769,7 @@ "Broadcasting_media_server_url": "Broadcasting Media Server-URL", "Browse_Files": "Dateien durchsuchen", "Browser_does_not_support_audio_element": "Ihr Browser unterstützt das Audioelement nicht.", + "Call_number_enterprise_only": "Rufnummer (nur Enterprise Edition)", "Browser_does_not_support_video_element": "Ihr Browser unterstützt das Videoelement nicht.", "Browser_does_not_support_recording_video": "Ihr Browser unterstützt keine Videoaufzeichnung", "Bugsnag_api_key": "Bugsnag API-Schlüssel", @@ -805,7 +806,6 @@ "Call_provider": "Anrufserive-Anbieter", "Call_Already_Ended": "Anruf bereits beendet", "Call_number": "Rufnummer", - "Call_number_enterprise_only": "Rufnummer (nur Enterprise Edition)", "call-management": "Anrufverwaltung", "call-management_description": "Erlaubnis zum Starten einer Besprechung", "Call_ongoing": "Anruf laufend", @@ -1765,11 +1765,15 @@ "Email_Notifications_Change_Disabled": "Der Rocket.Chat Administrator hat Offline-E-Mail-Benachrichtigungen deaktiviert", "Email_or_username": "E-Mail-Adresse oder Nutzername", "Email_Placeholder": "Bitte geben Sie Ihre E-Mail-Adresse ein", + "Enterprise_capabilities": "Enterprise-Funktionen", "Email_Placeholder_any": "Bitte geben Sie E-Mail-Adressen ein ...", "email_plain_text_only": "Nur reine Text-E-Mails senden", "email_style_description": "Verschachtelte Selektoren vermeiden", "email_style_label": "E-Mail-Stil", + "Enterprise_Description": "Aktualisieren Sie Ihre Enterprise-Lizenz manuell.", "Email_subject": "Betreff", + "Enterprise_License": "Unternehmenslizenz", + "Enterprise_License_Description": "Wenn dein Arbeitsbereich registriert ist und die Lizenz von Rocket.Chat Cloud zur Verfügung gestellt wird, brauchest du die Lizenz hier nicht manuell zu aktualisieren.", "Email_verified": "Die E-Mail-Adresse wurde bestätigt.", "Email_sent": "E-Mail gesendet", "Emoji": "Emoji", @@ -1827,11 +1831,6 @@ "Enter_Normal": "Normaler Modus (mit Eingabetaste senden)", "Enter_to": "Eingabetaste: ", "Enter_your_E2E_password": "Geben Sie ihr Passwort für die Ende-Zu-Ende-Verschlüsselung ein", - "Enterprise": "Unternehmen", - "Enterprise_capabilities": "Enterprise-Funktionen", - "Enterprise_Description": "Aktualisieren Sie Ihre Enterprise-Lizenz manuell.", - "Enterprise_License": "Unternehmenslizenz", - "Enterprise_License_Description": "Wenn dein Arbeitsbereich registriert ist und die Lizenz von Rocket.Chat Cloud zur Verfügung gestellt wird, brauchest du die Lizenz hier nicht manuell zu aktualisieren.", "Entertainment": "Unterhaltung", "Error": "Fehler", "Error_something_went_wrong": "Huch! Ein Fehler ist aufgetreten. Bitte laden Sie die Seite neu oder kontaktieren Sie einen Administrator.", @@ -1903,6 +1902,7 @@ "error-invalid-email-address": "Ungültige E-Mail-Adresse", "error-invalid-email-inbox": "Ungültiger E-Mail-Posteingang", "error-email-inbox-not-found": "E-Mail-Posteingang nicht gefunden", + "error-this-is-an-ee-feature": "Dies ist eine Funktion der Enterprise Edition", "error-invalid-file-height": "Ungültige Bildhöhe der Datei", "error-invalid-file-type": "Ungültiges Dateiformat", "error-invalid-file-width": "Ungültige Bildhöhe der Datei", @@ -1976,7 +1976,6 @@ "error-tags-must-be-assigned-before-closing-chat": "Tags müssen vor dem Schließen des Chats zugewiesen werden", "error-the-field-is-required": "Das Feld {{field}} ist erforderlich.", "error-this-is-not-a-livechat-room": "Dies ist kein Livechat-Raum", - "error-this-is-an-ee-feature": "Dies ist eine Funktion der Enterprise Edition", "error-token-already-exists": "Ein Zugangsschlüssel mit diesem Namen existiert bereits", "error-token-does-not-exists": "Der Zugangsschlüssel existiert nicht", "error-too-many-requests": "Fehler, zu viele Anfragen. Bitte fahren Sie langsamer fort. Sie müssen {{seconds}} Sekunden warten, bevor Sie es erneut versuchen können.", @@ -2176,10 +2175,12 @@ "FileUpload_S3_BucketURL": "Bucket-URL", "FileUpload_S3_CDN": "CDN-Domain für Downloads", "FileUpload_S3_ForcePathStyle": "Pfad-Stil erzwingen", + "Google_Meet_Enterprise_only": "Google Meet (nur Enterprise)", "FileUpload_S3_Proxy_Avatars": "Proxy-Zugriff auf Avatare", "FileUpload_S3_Proxy_Avatars_Description": "Der Zugriff auf alle Avatare erfolgt über den Rocket.Chat Server als Proxy, anstatt direkt die Asset-URL an den Client weiterzureichen", "FileUpload_S3_Proxy_Uploads": "Proxy-Zugriff auf Datei-Uploads", "FileUpload_S3_Proxy_Uploads_Description": "Der Zugriff auf alle hochgelanden Dateien erfolgt über den Rocket.Chat Server als Proxy, anstatt direkt die Asset-URL an den Client weiterzureichen", + "Hold_Call_EE_only": "Anruf halten (nur Enterprise Edition)", "FileUpload_S3_Region": "Region", "FileUpload_S3_SignatureVersion": "Signaturversion", "FileUpload_S3_URLExpiryTimeSpan": "Verfallsdatum für URLs", @@ -2234,6 +2235,7 @@ "Forgot_Password_Email": "Hier klicken, um das Passwort zurückzusetzen.", "Forgot_Password_Email_Subject": "[Site_Name] - Passwort-Wiederherstellung", "Forgot_password_section": "Passwort vergessen", + "Hold_EE_only": "Halten (nur Enterprise Edition)", "Format": "Format", "Forward": "Weiterleiten", "Forward_chat": "Chat weiterleiten", @@ -2277,10 +2279,8 @@ "Global_purge_override_warning": "Eine globale Aufbewahrungsrichtlinie ist vorhanden. Wenn Sie die globale Aufbewahrungsrichtlinie außer Kraft setzen, können Sie nur eine Richtlinie anwenden, die strenger ist als die globale Richtlinie.", "Global_Search": "Globale Suche", "Go_to_your_workspace": "Auf zu Ihrem Arbeitsbereich!", - "Google_Meet_Enterprise_only": "Google Meet (nur Enterprise)", "Google_Play": "Google Play", "Hold_Call": "Gespräch halten", - "Hold_Call_EE_only": "Anruf halten (nur Enterprise Edition)", "GoogleCloudStorage": "Google Cloud-Speicher", "GoogleNaturalLanguage_ServiceAccount_Description": "Service-Konto SchlüsselDatei (JSON). Weiterführende Informationen dazu [hier](https://cloud.google.com/natural-language/docs/common/auth#set_up_a_service_account)", "GoogleTagManager_id": "Google-Tag-Manager-ID", @@ -2335,7 +2335,6 @@ "History": "Chronik", "Hold_Time": "Haltezeit", "Hold": "Halten", - "Hold_EE_only": "Halten (nur Enterprise Edition)", "Home": "Startseite", "Homepage": "Startseite", "Host": "Host", @@ -2722,7 +2721,6 @@ "LDAP_DataSync_Roles": "Synchronisationsrollen", "LDAP_DataSync_Channels": "Synchronisationskanäle", "LDAP_DataSync_Teams": "Synchronisationsteams", - "LDAP_Enterprise": "Unternehmen", "LDAP_DataSync_BackgroundSync": "Hintergrundsynchronisierung", "LDAP_Server_Type": "Servertyp", "LDAP_Server_Type_AD": "Active Directory", @@ -2977,15 +2975,27 @@ "Load_Rotation": "Rotation laden", "Loading": "Wird geladen", "Loading_more_from_history": "Weitere Nachrichten aus dem Verlauf anzeigen", + "marketplace_featured_section_community_featured": "Ausgewählte von der Gemeinschaft unterstützt Apps", "Loading_suggestion": "Vorschläge werden geladen", + "marketplace_featured_section_community_supported": "Von der Gemeinschaft unterstützte Apps", "Loading...": "Wird geladen...", + "marketplace_featured_section_enterprise": "Ausgewählte Enterprise-Apps", + "marketplace_featured_section_featured": "Ausgewählte Apps", + "marketplace_featured_section_most_popular": "Beliebteste Apps", "Local_Domains": "Lokale Domains", + "marketplace_featured_section_new_arrivals": "Neu eingetroffen", "Local_Password": "Lokales Passwort", + "marketplace_featured_section_popular_this_month": "Beliebte Apps in diesem Monat", "Local_Time": "Lokalzeit", + "marketplace_featured_section_recommended": "Empfohlene Apps", "Local_Timezone": "Lokale Zeitzone", + "marketplace_featured_section_social": "Soziale Apps", "Local_Time_time": "Lokalzeit: {{time}}", + "marketplace_featured_section_trending": "Aktuelle Apps", "Localization": "Lokalisierung", "Location": "Standort", + "marketplace_featured_section_omnichannel": "Omnichannel-Apps", + "marketplace_featured_section_video_conferencing": "Apps für Videokonferenzen", "Log_Exceptions_to_Channel": "Ausnahmen in einen Channel schreiben", "Log_Exceptions_to_Channel_Description": "Name eines Channels, der alle abgefangenen Ausnahmen aufnimmt. Leer lassen, um sie nur ins Anwendungslog zu schreiben.", "Log_File": "Datei und Zeile anzeigen", @@ -3119,18 +3129,6 @@ "Marketplace_app_last_updated": "Zuletzt aktualisiert {{lastUpdated}}", "Marketplace_view_marketplace": "Marketplace anzeigen", "Marketplace_error": "Keine Verbindung zum Internet oder zu Ihrem Arbeitsbereich möglich, möglicherweise handelt es sich um eine Offline-Installation.", - "marketplace_featured_section_community_featured": "Ausgewählte von der Gemeinschaft unterstützt Apps", - "marketplace_featured_section_community_supported": "Von der Gemeinschaft unterstützte Apps", - "marketplace_featured_section_enterprise": "Ausgewählte Enterprise-Apps", - "marketplace_featured_section_featured": "Ausgewählte Apps", - "marketplace_featured_section_most_popular": "Beliebteste Apps", - "marketplace_featured_section_new_arrivals": "Neu eingetroffen", - "marketplace_featured_section_popular_this_month": "Beliebte Apps in diesem Monat", - "marketplace_featured_section_recommended": "Empfohlene Apps", - "marketplace_featured_section_social": "Soziale Apps", - "marketplace_featured_section_trending": "Aktuelle Apps", - "marketplace_featured_section_omnichannel": "Omnichannel-Apps", - "marketplace_featured_section_video_conferencing": "Apps für Videokonferenzen", "MAU_value": "MAU {{value}}", "Max_length_is": "Maximale Länge ist %s", "Max_number_incoming_livechats_displayed": "Maximale Anzahl der in der Warteschlange angezeigten Elemente", @@ -3239,6 +3237,7 @@ "Message_HideType_subscription_role_removed": "Meldungen „Rolle nicht länger definiert“ ausblenden", "Message_HideType_uj": "\"Benutzer beigetreten\"-Nachricht deaktivieren", "Message_HideType_ujt": "Nachrichten \"Benutzer ist Team beigetreten\" ausblenden", + "New_Call_Enterprise_Edition_Only": "Neuer Anruf (nur Enterprise Edition)", "Message_HideType_ul": "Meldungen \"Benutzer verlassen\" ausblenden", "Message_HideType_ult": "Nachrichten \"Benutzer hat Team verlassen\" ausblenden", "Message_HideType_user_added_room_to_team": "Meldungen \"Benutzer hat Room zu Team hinzugefügt\" ausblenden", @@ -3403,7 +3402,6 @@ "New_Application": "Neue Anwendung", "New_Business_Hour": "Neue Öffnungszeiten", "New_Call": "Neuer Aufruf", - "New_Call_Enterprise_Edition_Only": "Neuer Anruf (nur Enterprise Edition)", "New_chat_in_queue": "Neuer Chat in der Warteschlange", "New_chat_priority": "Priorität geändert: {{user}} hat die Priorität in {{priority}} geändert", "New_chat_transfer": "Neue Chatübertragung: {{transfer}}", @@ -4121,7 +4119,6 @@ "SAML_AuthnRequest_Template": "AuthnRequest-Vorlage", "SAML_AuthnRequest_Template_Description": "Die folgenden Variablen sind verfügbar: \n- **\\_\\_newId\\_\\_**: Zufällig erzeugte ID-Zeichenfolge \n- **\\_\\_instant\\_\\_**: Aktuelle Zeitmarke \n- **\\_\\_callbackUrl\\_\\_**: Die Rückruf-URL von Rocket.Chat. \n- **\\_\\_entryPoint\\_\\_**: Der Wert der Einstellung {{Custom Entry Point}} \n- **\\_\\_issuer\\_\\_**: Der Wert der Einstellung {{Custom Issuer}} \n- **\\_\\_identifierFormatTag\\_\\_**: Der Inhalt von {{NameID Policy Template}}, wenn ein gültiges {{Identifier Format}} konfiguriert ist. \n- **\\_\\_identifierFormat\\_\\_**: Der Wert der Einstellung {{Identifier Format}} \n- **\\_\\_authnContextTag\\_\\_**: Der Inhalt von {{AuthnContext Template}}, wenn ein gültiger {{Custom Authn Context}} konfiguriert ist. \n- **\\_\\_authnContextComparison\\_\\_**: Der Wert der Einstellung {{Authn Context Comparison}} \n- **\\_\\_authnContext\\_\\_**: Der Wert der Einstellung {{Custom Authn Context}}", "SAML_Connection": "Verbindung", - "SAML_Enterprise": "Unternehmen", "SAML_General": "Allgemein", "SAML_Custom_Authn_Context": "Benutzerdefinierter Authn-Kontext", "SAML_Custom_Authn_Context_Comparison": "Authn-Kontextvergleich", @@ -4626,9 +4623,13 @@ "Teams_Search_teams": "Teams suchen", "Teams_New_Read_only_Label": "Schreibgeschützt", "Technology_Services": "Technologie-Dienstleistungen", + "Upgrade_tab_connection_error_description": "Sieht so aus, als hätten Sie keine Internetverbindung. Das kann daran liegen, dass Ihr Arbeitsbereich auf einem vollständig gesicherten Server mit Air Gap installiert ist", "Terms": "Allgemeine Geschäftsbedingungen", "Terms_of_use": "Nutzungsbedingungen", + "Upgrade_tab_connection_error_restore": "Stellen Sie Ihre Verbindung wieder her, um mehr über die Funktionen zu erfahren, die Ihnen entgehen.", "Test_Connection": "Verbindung testen", + "Upgrade_tab_go_fully_featured": "Erhalte vollen Funktionsumfang", + "Upgrade_tab_trial_guide": "Leitfaden für Versuche", "Test_Desktop_Notifications": "Desktop-Benachrichtigungen testen", "Test_LDAP_Search": "LDAP-Testsuche", "test-admin-options": "Testen Sie die Optionen im Verwaltungsbereich wie LDAP-Anmeldung und Push-Benachrichtigungen", @@ -4796,7 +4797,6 @@ "Transcript_message": "Nachricht, die bei der Nachfrage bzgl. einer Mitschrift gesendet wird", "Transcript_of_your_livechat_conversation": "Transkript deiner Omnichannel-Konversation", "Transcript_Request": "Protokollanforderung", - "onboarding.form.registeredServerForm.continueStandalone": "Als Stand-alone fortfahren", "transfer-livechat-guest": "Livechat Gäste übertragen", "transfer-livechat-guest_description": "Berechtigung, Livechat-Gäste zu übertragen", "Transferred": "Übertragen", @@ -4903,10 +4903,6 @@ "Update_to_version": "Auf Version {{version}} aktualisieren", "Update_your_RocketChat": "Aktualisieren Sie Ihr Rocket.Chat", "Updated_at": "Aktualisiert am", - "Upgrade_tab_connection_error_description": "Sieht so aus, als hätten Sie keine Internetverbindung. Das kann daran liegen, dass Ihr Arbeitsbereich auf einem vollständig gesicherten Server mit Air Gap installiert ist", - "Upgrade_tab_connection_error_restore": "Stellen Sie Ihre Verbindung wieder her, um mehr über die Funktionen zu erfahren, die Ihnen entgehen.", - "Upgrade_tab_go_fully_featured": "Erhalte vollen Funktionsumfang", - "Upgrade_tab_trial_guide": "Leitfaden für Versuche", "Upgrade_tab_upgrade_your_plan": "Aktualisieren Sie Ihren Plan", "Upload": "Hochladen", "Uploads": "Uploads", @@ -5148,6 +5144,7 @@ "view-l-room": "Omnichannel-Rooms anzeigen", "view-l-room_description": "Berechtigung, Omnichannel-Rooms anzuzeigen", "view-livechat-analytics": "Omnichannel-Analytics anzeigen", + "onboarding.page.awaitingConfirmation.subtitle": "Wir haben dir eine E-Mail zur Bestätigung an {{emailAddress}} geschickt. Bitte stelle sicher, dass der Bestätigungscode unten dem in der E-Mail entspricht", "view-livechat-analytics_description": "Berechtigung zum Anzeigen von Live-Chat-Analysen", "view-livechat-appearance": "Omnichannel-Darstellung ansehen", "view-livechat-appearance_description": "Berechtigung zum Anzeigen der Live-Chat-Darstellung", @@ -5426,76 +5423,6 @@ "registration.component.form.confirmation": "Bestätigung", "registration.component.form.sendConfirmationEmail": "Bestätigungsmail versenden", "registration.component.form.register": "Registrieren", - "onboarding.component.form.requiredField": "Dies ist ein Pflichtfeld", - "onboarding.component.form.steps": "Schrit {{currentStep}} von {{stepCount}}", - "onboarding.component.form.action.back": "Zurück", - "onboarding.component.form.action.next": "Nächster", - "onboarding.component.form.action.skip": "Überspringen", - "onboarding.component.form.action.register": "Registrieren", - "onboarding.component.form.action.confirm": "Bestätigen", - "onboarding.component.form.termsAndConditions": "Ich bin mit den Nutzungsvereinbarung und den Datenschutzbestimmungen einverstanden", - "onboarding.component.emailCodeFallback": "Keine E-Mail erhalten? Noch einemal versenden oder E-Mailadresse ändern", - "onboarding.page.form.title": "<1>Starten wir Ihren Arbeitsbereich", - "onboarding.page.awaitingConfirmation.title": "Warten auf Bestätigung", - "onboarding.page.awaitingConfirmation.subtitle": "Wir haben dir eine E-Mail zur Bestätigung an {{emailAddress}} geschickt. Bitte stelle sicher, dass der Bestätigungscode unten dem in der E-Mail entspricht", - "onboarding.page.emailConfirmed.title": "E-Mail bestätigt", - "onboarding.page.emailConfirmed.subtitle": "Sie können zu Ihrer Rocket.Chat-Anwendung zurückkehren - wir haben Ihren Arbeitsbereich bereits gestartet.", - "onboarding.page.checkYourEmail.title": "Bitte prüfe Deine E-Mail", - "onboarding.page.checkYourEmail.subtitle": "Ihre Anforderung wurde erfolgreich gesendet.<1>Prüfen Sie Ihren E-Mail-Eingang, um Ihre Unternehmens-Testversion zu starten.<1>Der Link verfällt in 30 Minuten.", - "onboarding.page.confirmationProcess.title": "Bestätigung in Bearbeitung", - "onboarding.page.cloudDescription.title": "Starten Sie Ihren Arbeitsbereich und die <1>14-tägige Testphase", - "onboarding.page.cloudDescription.tryGold": "Testen Sie unseren besten Gold-Plan 14 Tage gratis", - "onboarding.page.cloudDescription.numberOfIntegrations": "1.000 Integrationen", - "onboarding.page.cloudDescription.availability": "Hohe Verfügbarkeit", - "onboarding.page.cloudDescription.auditing": "Auditpanel/Auditprotokolle für Nachrichten", - "onboarding.page.cloudDescription.engagement": "Einsatz-Dashboard", - "onboarding.page.cloudDescription.ldap": "Erweiterte LDAP-Synchronisierung", - "onboarding.page.cloudDescription.omnichannel": "Omnichannel Premium", - "onboarding.page.cloudDescription.sla": "SLA: Premium", - "onboarding.page.cloudDescription.push": "Sichere Push-Benachrichtigungen", - "onboarding.page.cloudDescription.goldIncludes": "* der Gold-Plan enthält alle Funktionen der anderen Pläne", - "onboarding.page.alreadyHaveAccount": "Haben Sie bereits ein Konto? <1>Verwalten Sie Ihre Arbeitsbereiche.", - "onboarding.page.invalidLink.title": "Ihr Link ist nicht mehr gültig", - "onboarding.page.invalidLink.content": "Scheinbar haben Sie den Einladungslink bereits verwendet. Er wird für eine einmalige Anmeldung generiert. Fordern Sie einen neuen an, um Ihrem Arbeitsbereich beizutreten.", - "onboarding.page.invalidLink.button.text": "Neuen Link anfordern", - "onboarding.page.requestTrial.title": "<1>30-Tage Testversion anfordern", - "onboarding.page.requestTrial.subtitle": "Testen Sie unseren besten Enterprise Edition-Plan 30 Tage lang gratis", - "onboarding.page.magicLinkEmail.title": "Wir haben Ihnen einen Anmeldelink gesendet", - "onboarding.page.magicLinkEmail.subtitle": "Klicken Sie auf den Link, in der gerade an Sie versandten E-Mail, um sich bei Ihrem Arbeitsbereich anzumelden. <1>Der Link verfällt in 30 Minuten.", - "onboarding.form.adminInfoForm.title": "Admin-Info", - "onboarding.form.adminInfoForm.subtitle": "Das ist erforderlich, um ein Admin-Profil in Ihrem Arbeitsbereich zu erstellen", - "onboarding.form.adminInfoForm.fields.fullName.label": "Vollständiger Name", - "onboarding.form.adminInfoForm.fields.fullName.placeholder": "Vor- und Zuname", - "onboarding.form.adminInfoForm.fields.username.label": "Benutzername", - "onboarding.form.adminInfoForm.fields.username.placeholder": "@benutzername", - "onboarding.form.adminInfoForm.fields.email.label": "E-Mail", - "onboarding.form.adminInfoForm.fields.email.placeholder": "E-Mail", - "onboarding.form.adminInfoForm.fields.password.label": "Passwort", - "onboarding.form.adminInfoForm.fields.password.placeholder": "Passwort erstellen", - "onboarding.form.adminInfoForm.fields.keepPosted.label": "Halten Sie mich über Rocket.Chat-Updates auf dem Laufenden", - "onboarding.form.organizationInfoForm.title": "Organisations-Info", - "onboarding.form.organizationInfoForm.subtitle": "Bitte, haben Sie Verständnis. Diese Informationen helfen uns, Ihren Arbeitsbereich zu personalisieren.", - "onboarding.form.organizationInfoForm.fields.organizationName.label": "Name der Organisation", - "onboarding.form.organizationInfoForm.fields.organizationName.placeholder": "Name der Organisation", - "onboarding.form.organizationInfoForm.fields.organizationType.label": "Art der Organisation", - "onboarding.form.organizationInfoForm.fields.organizationType.placeholder": "Auswählen", - "onboarding.form.organizationInfoForm.fields.organizationIndustry.label": "Branche der Organisation", - "onboarding.form.organizationInfoForm.fields.organizationIndustry.placeholder": "Auswählen", - "onboarding.form.organizationInfoForm.fields.organizationSize.label": "Größe der Organisation", - "onboarding.form.organizationInfoForm.fields.organizationSize.placeholder": "Auswählen", - "onboarding.form.organizationInfoForm.fields.country.label": "Land", - "onboarding.form.organizationInfoForm.fields.country.placeholder": "Auswählen", - "onboarding.form.registeredServerForm.title": "Registrieren Sie Ihren Server", - "onboarding.form.registeredServerForm.included.push": "Mobile Push-Benachrichtigungen", - "onboarding.form.registeredServerForm.included.externalProviders": "Integration mit externen Anbietern (WhatsApp, Facebook, Telegram, Twitter)", - "onboarding.form.registeredServerForm.included.apps": "Zugriff auf Marktplatz-Apps", - "onboarding.form.registeredServerForm.fields.accountEmail.inputLabel": "Cloud-Konto-E-Mail", - "onboarding.form.registeredServerForm.fields.accountEmail.inputPlaceholder": "Bitte geben Sie Ihre E-Mail-Adresse ein", - "onboarding.form.registeredServerForm.keepInformed": "Informieren Sie mich über Neuigkeiten und Ereignisse", - "onboarding.form.standaloneServerForm.title": "Stand-alone-Server-Bestätigung", - "onboarding.form.standaloneServerForm.servicesUnavailable": "Einige der Services werden nicht verfügbar sein oder erfordern eine manuelle Einrichtung", - "onboarding.form.standaloneServerForm.publishOwnApp": "Um Push-Benachrichtigungen zu senden, müssen Sie Ihre eigene App kompilieren und in Google Play und im App Store veröffentlichen", - "onboarding.form.standaloneServerForm.manuallyIntegrate": "Manuelle Integration mit externen Services erforderlich", "Something_Went_Wrong": "Etwas ist schief gelaufen", "Toolbox_room_actions": "Primäre Room-Aktionen", "Theme_light": "Hell", @@ -5521,5 +5448,7 @@ "RegisterWorkspace_Syncing_Complete": "Synchronisierung abgeschlossen", "RegisterWorkspace_Connection_Error": "Beim Verbinden ist ein Fehler aufgetreten", "cloud.RegisterWorkspace_Setup_Terms_Privacy": "Ich bin mit den Nutzungsvereinbarung und den Datenschutzbestimmungen einverstanden", - "Uninstall_grandfathered_app": "{{appName}} deinstallieren?" -} \ No newline at end of file + "Uninstall_grandfathered_app": "{{appName}} deinstallieren?", + "UpgradeToGetMore_engagement-dashboard_Title": "Analytics", + "UpgradeToGetMore_auditing_Title": "Nachrichtenüberprüfung" +} diff --git a/apps/meteor/packages/rocketchat-i18n/i18n/el.i18n.json b/apps/meteor/packages/rocketchat-i18n/i18n/el.i18n.json index b51fa54a97af..d547bf11304d 100644 --- a/apps/meteor/packages/rocketchat-i18n/i18n/el.i18n.json +++ b/apps/meteor/packages/rocketchat-i18n/i18n/el.i18n.json @@ -980,7 +980,6 @@ "Enter_name_here": "Πληκτρολογήστε το όνομα εδώ", "Enter_Normal": "Κανονική λειτουργία (αποστολή με Enter)", "Enter_to": "Enter για να", - "Enterprise": "Επιχείρηση", "Entertainment": "Ψυχαγωγία", "Error": "Λάθος", "Error_404": "Σφάλμα 404", @@ -2766,5 +2765,6 @@ "registration.component.form.reasonToJoin": "Λόγος για συμμετοχή", "registration.component.form.invalidConfirmPass": "Η επιβεβαίωση κωδικού δεν ταιριάζει με τον αρχικό κωδικό", "registration.component.form.confirmPassword": "Επιβεβαιώστε τον κωδικό σας", - "registration.component.form.sendConfirmationEmail": "Αποστολή email επιβεβαίωσης" + "registration.component.form.sendConfirmationEmail": "Αποστολή email επιβεβαίωσης", + "UpgradeToGetMore_engagement-dashboard_Title": "Αναλυτικά στοιχεία" } \ No newline at end of file diff --git a/apps/meteor/packages/rocketchat-i18n/i18n/en.i18n.json b/apps/meteor/packages/rocketchat-i18n/i18n/en.i18n.json index 4666a72e2a53..67cd827793d5 100644 --- a/apps/meteor/packages/rocketchat-i18n/i18n/en.i18n.json +++ b/apps/meteor/packages/rocketchat-i18n/i18n/en.i18n.json @@ -503,6 +503,7 @@ "App_Details": "App details", "App_Info": "App Info", "App_Information": "App Information", + "Apps_context_enterprise": "Enterprise", "App_Installation": "App Installation", "App_not_enabled": "App not enabled", "App_not_found": "App not found", @@ -512,6 +513,7 @@ "App_status_error_disabled": "Disabled: Uncaught Error", "App_status_initialized": "Initialized", "App_status_invalid_license_disabled": "Disabled: Invalid License", + "Apps_disabled_when_Enterprise_trial_ended": "Apps disabled when Enterprise trial ended", "App_status_invalid_settings_disabled": "Disabled: Configuration Needed", "App_status_manually_disabled": "Disabled: Manually", "App_status_manually_enabled": "Enabled", @@ -825,6 +827,7 @@ "Broadcasting_media_server_url": "Broadcasting Media Server URL", "Browse_Files": "Browse Files", "Browser_does_not_support_audio_element": "Your browser does not support the audio element.", + "Call_number_enterprise_only": "Call number (Enterprise Edition only)", "Browser_does_not_support_video_element": "Your browser does not support the video element.", "Browser_does_not_support_recording_video": "Your browser does not support recording video", "Bugsnag_api_key": "Bugsnag API Key", @@ -1060,8 +1063,6 @@ "Cloud_register_offline_finish_helper": "After completing the registration process in the Cloud Console you should be presented with some text. Please paste it here to finish the registration.", "Cloud_register_offline_helper": "Workspaces can be manually registered if airgapped or network access is restricted. Copy the text below and go to our Cloud Console to complete the process.", "Cloud_register_success": "Your workspace has been successfully registered!", - "Cloud_registration_pending_html": "Push notifications will not work until the registration is finished. Learn more", - "Cloud_registration_pending_title": "Cloud registration is still pending", "Cloud_registration_required": "Registration Required", "Cloud_registration_required_description": "Looks like during setup you didn't chose to register your workspace.", "Cloud_registration_required_link_text": "Click here to register your workspace.", @@ -1853,13 +1854,21 @@ "Email_notification_show_message": "Show Message in Email Notification", "Email_Notifications_Change_Disabled": "Your Rocket.Chat administrator has disabled email notifications", "Email_or_username": "Email or username", + "Enterprise_capability": "Enterprise capability", "Email_Placeholder": "Please enter your email address...", + "Enterprise_capabilities": "Enterprise capabilities", "Email_Placeholder_any": "Please enter email addresses...", "email_plain_text_only": "Send only plain text emails", + "Enterprise_Departments_description_upgrade": "Workspaces on Community Edition can create just one department. Upgrade to Enterprise to remove limits and supercharge your workspace.", + "Enterprise_Departments_description_free_trial": "Workspaces on Community Edition can create one department. Start a free Enterprise trial to create multiple departments today!", "email_style_description": "Avoid nested selectors", "email_style_label": "Email Style", + "Enterprise_Description": "Manually update your Premium license.", "Email_subject": "Email Subject", + "Enterprise_License": "Enterprise License", + "Enterprise_License_Description": "If your workspace is registered and license is provided by Rocket.Chat cloud you don't need to manually update the license here.", "Email_verified": "Email verified", + "Enterprise_Only": "Enterprise only", "Email_sent": "Email sent", "Email_verification_isnt_required": "Email verification to login is not required. To require, enable setting in Accounts > Registration", "Emoji": "Emoji", @@ -2011,6 +2020,7 @@ "error-invalid-email-address": "Invalid email address", "error-invalid-email-inbox": "Invalid Email Inbox", "error-email-inbox-not-found": "Email Inbox not found", + "error-this-is-an-ee-feature": "This is an enterprise edition feature", "error-invalid-file-height": "Invalid file height", "error-invalid-file-type": "Invalid file type", "error-invalid-file-width": "Invalid file width", @@ -2144,6 +2154,7 @@ "Exact": "Exact", "Example_payload": "Example payload", "Example_s": "Example: %s", + "Federation_Matrix_join_public_rooms_is_enterprise": "Join federated rooms is an Enterprise Edition feature", "except_pinned": "(except those that are pinned)", "Exclude_Botnames": "Exclude Bots", "Exclude_Botnames_Description": "Do not propagate messages from bots whose name matches the regular expression above. If left empty, all messages from bots will be propagated.", @@ -2317,10 +2328,12 @@ "FileUpload_S3_BucketURL": "Bucket URL", "FileUpload_S3_CDN": "CDN Domain for Downloads", "FileUpload_S3_ForcePathStyle": "Force Path Style", + "Google_Meet_Enterprise_only": "Google Meet (Enterprise only)", "FileUpload_S3_Proxy_Avatars": "Proxy Avatars", "FileUpload_S3_Proxy_Avatars_Description": "Proxy avatar file transmissions through your server instead of direct access to the asset's URL", "FileUpload_S3_Proxy_Uploads": "Proxy Uploads", "FileUpload_S3_Proxy_Uploads_Description": "Proxy upload file transmissions through your server instead of direct access to the asset's URL", + "Hold_Call_EE_only": "Hold Call (Enterprise Edition only)", "FileUpload_S3_Region": "Region", "FileUpload_S3_SignatureVersion": "Signature Version", "FileUpload_S3_URLExpiryTimeSpan": "URLs Expiration Timespan", @@ -2378,6 +2391,7 @@ "Forgot_Password_Email": "Click here to reset your password.", "Forgot_Password_Email_Subject": "[Site_Name] - Password Recovery", "Forgot_password_section": "Forgot password", + "Hold_EE_only": "Hold (Enterprise Edition only)", "Format": "Format", "Forward": "Forward", "Forward_chat": "Forward chat", @@ -2900,7 +2914,7 @@ "LDAP_DataSync_Roles": "Sync Roles", "LDAP_DataSync_Channels": "Sync Channels", "LDAP_DataSync_Teams": "Sync Teams", - "LDAP_Premium": "Premium", + "LDAP_Enterprise": "Premium", "LDAP_DataSync_BackgroundSync": "Background Sync", "LDAP_Server_Type": "Server Type", "LDAP_Server_Type_AD": "Active Directory", @@ -3082,7 +3096,7 @@ "Livechat_Agents": "Agents", "Livechat_allow_manual_on_hold": "Allow agents to manually place chat On Hold", "Livechat_allow_manual_on_hold_Description": "If enabled, the agent will get the option to place a chat On Hold", - "Livechat_allow_manual_on_hold_upon_agent_engagement_only" : "Chats on hold only after agent engagement", + "Livechat_allow_manual_on_hold_upon_agent_engagement_only": "Chats on hold only after agent engagement", "Livechat_allow_manual_on_hold_upon_agent_engagement_only_Description": "Only allow chats to be put on hold if the agent is the one who sent the last message in the conversation.", "Livechat_AllowedDomainsList": "Livechat Allowed Domains", "Livechat_Appearance": "Livechat Appearance", @@ -3180,16 +3194,28 @@ "Load_Rotation": "Load Rotation", "Loading": "Loading", "Loading_more_from_history": "Loading more from history", + "marketplace_featured_section_community_featured": "Featured Community Apps", "Loading_suggestion": "Loading suggestions", + "marketplace_featured_section_community_supported": "Community Supported Apps", "Loading...": "Loading...", + "marketplace_featured_section_enterprise": "Featured Enterprise Apps", "Local": "Local", + "marketplace_featured_section_featured": "Featured Apps", + "marketplace_featured_section_most_popular": "Most Popular Apps", "Local_Domains": "Local Domains", + "marketplace_featured_section_new_arrivals": "New Arrivals", "Local_Password": "Local Password", + "marketplace_featured_section_popular_this_month": "Apps Popular this Month", "Local_Time": "Local Time", + "marketplace_featured_section_recommended": "Recommended Apps", "Local_Timezone": "Local Timezone", + "marketplace_featured_section_social": "Social Apps", "Local_Time_time": "Local Time: {{time}}", + "marketplace_featured_section_trending": "Trending Apps", "Localization": "Localization", "Location": "Location", + "marketplace_featured_section_omnichannel": "Omnichannel Apps", + "marketplace_featured_section_video_conferencing": "Video Conferencing Apps", "Log_Exceptions_to_Channel": "Log Exceptions to Channel", "Log_Exceptions_to_Channel_Description": "A channel that will receive all captured exceptions. Leave empty to ignore exceptions.", "Log_File": "Show File and Line", @@ -3453,6 +3479,7 @@ "Message_HideType_subscription_role_removed": "Hide \"Role No Longer Defined\" messages", "Message_HideType_uj": "Hide \"User Join\" messages", "Message_HideType_ujt": "Hide \"User Joined Team\" messages", + "New_Call_Enterprise_Edition_Only": "New Call (Enterprise Edition Only)", "Message_HideType_ul": "Hide \"User Leave\" messages", "Message_HideType_ult": "Hide \"User Left Team\" messages", "Message_HideType_user_added_room_to_team": "Hide \"User Added Room to Team\" messages", @@ -3754,6 +3781,7 @@ "None": "None", "Nonprofit": "Nonprofit", "Not_authorized": "Not authorized", + "Pexip_Enterprise_only": "Pexip (Enterprise only)", "Normal": "Normal", "Not_Available": "Not Available", "Not_assigned": "Not assigned", @@ -4300,6 +4328,7 @@ "request": "request", "requests": "requests", "Requests": "Requests", + "Search_Enterprise_Apps": "Search Enterprise apps", "Requested": "Requested", "Requested_apps_will_appear_here": "Requested apps will appear here", "request-pdf-transcript": "Request PDF Transcript", @@ -4464,7 +4493,7 @@ "SAML_AuthnRequest_Template": "AuthnRequest Template", "SAML_AuthnRequest_Template_Description": "The following variables are available: \n- **\\_\\_newId\\_\\_**: Randomly generated id string \n- **\\_\\_instant\\_\\_**: Current timestamp \n- **\\_\\_callbackUrl\\_\\_**: The Rocket.Chat callback URL. \n- **\\_\\_entryPoint\\_\\_**: The value of the {{Custom Entry Point}} setting. \n- **\\_\\_issuer\\_\\_**: The value of the {{Custom Issuer}} setting. \n- **\\_\\_identifierFormatTag\\_\\_**: The contents of the {{NameID Policy Template}} if a valid {{Identifier Format}} is configured. \n- **\\_\\_identifierFormat\\_\\_**: The value of the {{Identifier Format}} setting. \n- **\\_\\_authnContextTag\\_\\_**: The contents of the {{AuthnContext Template}} if a valid {{Custom Authn Context}} is configured. \n- **\\_\\_authnContextComparison\\_\\_**: The value of the {{Authn Context Comparison}} setting. \n- **\\_\\_authnContext\\_\\_**: The value of the {{Custom Authn Context}} setting.", "SAML_Connection": "Connection", - "SAML_Premium": "Premium", + "SAML_Enterprise": "Premium", "SAML_General": "General", "SAML_Custom_Authn_Context": "Custom Authn Context", "SAML_Custom_Authn_Context_Comparison": "Authn Context Comparison", @@ -4588,6 +4617,9 @@ "Search_Rooms": "Search Rooms", "Search_Users": "Search Users", "Seats_Available": "{{seatsLeft}} Seats Available", + "MAC_Available": "{{macLeft}} MAC's Available", + "MAC_Required": "{{macRequired}} MAC's Required", + "Seats_Required": "{{seatsRequired}} Seats Required", "Seats_usage": "Seats Usage", "seconds": "seconds", "Secret_token": "Secret Token", @@ -4600,6 +4632,7 @@ "See_full_profile": "See full profile", "See_history": "See history", "See_on_Engagement_Dashboard": "See on Engagement Dashboard", + "Select": "Select", "Select_a_department": "Select a department", "Select_a_room": "Select a room", "Select_a_user": "Select a user", @@ -5025,9 +5058,13 @@ "Teams_Search_teams": "Search Teams", "Teams_New_Read_only_Label": "Read Only", "Technology_Services": "Technology Services", + "Upgrade_tab_connection_error_description": "Looks like you have no internet connection. This may be because your workspace is installed on a fully-secured air-gapped server", "Terms": "Terms", "Terms_of_use": "Terms of use", + "Upgrade_tab_connection_error_restore": "Restore your connection to learn about features you are missing out on.", "Test_Connection": "Test Connection", + "Upgrade_tab_go_fully_featured": "Go fully featured", + "Upgrade_tab_trial_guide": "Trial guide", "Test_Desktop_Notifications": "Test Desktop Notifications", "Test_LDAP_Search": "Test LDAP Search", "test-admin-options": "Test options on admin panel", @@ -5138,6 +5175,7 @@ "This_is_a_deprecated_feature_alert": "This is a deprecated feature. It may not work as expected and will not get new updates.", "Zapier_integration_has_been_deprecated": "The Zapier integration has been deprecated, may not work as expected and will not receive updates", "Install_Zapier_from_marketplace": "Install the Zapier app from Marketplace to avoid disruptions", + "Input": "Input", "This_is_a_push_test_messsage": "This is a push test message", "This_message_was_rejected_by__peer__peer": "This message was rejected by {{peer}} peer.", "This_monitor_was_already_selected": "This monitor was already selected", @@ -5585,6 +5623,7 @@ "view-full-other-user-info_description": "Permission to view full profile of other users including account creation date, last login, etc.", "view-history": "View History", "view-history_description": "Permission to view the channel history", + "onboarding.component.form.action.registerNow": "Register now", "view-join-code": "View Join Code", "view-join-code_description": "Permission to view the channel join code", "view-joined-room": "View Joined Room", @@ -5592,6 +5631,7 @@ "view-l-room": "View Omnichannel Rooms", "view-l-room_description": "Permission to view Omnichannel rooms", "view-livechat-analytics": "View Omnichannel Analytics", + "onboarding.page.awaitingConfirmation.subtitle": "We have sent you an email to {{emailAddress}} with a confirmation link. Please verify that the security code below matches the one in the email.", "view-livechat-analytics_description": "Permission to view live chat analytics", "view-livechat-appearance": "View Omnichannel Appearance", "view-livechat-appearance_description": "Permission to view live chat appearance", @@ -5695,8 +5735,10 @@ "Wait_activation_warning": "Before you can login, your account must be manually activated by an administrator.", "Waiting_for_answer": "Waiting for answer", "Waiting_queue": "Waiting queue", + "Enterprise_cap_description": "Enterprise workspaces have no cap on the presence service.", "Waiting_queue_message": "Waiting queue message", "Waiting_queue_message_description": "Message that will be displayed to the visitors when they get in the queue", + "More_about_Enterprise_Edition": "More about Enterprise Edition", "Waiting_Time": "Waiting Time", "Waiting_for_server_connection": "Waiting for server connection", "Warning": "Warning", @@ -5763,6 +5805,7 @@ "Would_you_like_to_return_the_inquiry": "Would you like to return the inquiry?", "Would_you_like_to_return_the_queue": "Would you like to move back this room to the queue? All conversation history will be kept on the room.", "Would_you_like_to_place_chat_on_hold": "Would you like to place this chat On-Hold?", + "multiple_instance_solutions": "multiple instance solutions", "Wrap_up_the_call": "Wrap-up the call", "Wrap_Up_Notes": "Wrap-Up Notes", "Workspace": "Workspace", @@ -5980,6 +6023,20 @@ "onboarding.form.standaloneServerForm.servicesUnavailable": "Some of the services will be unavailable or will require manual setup", "onboarding.form.standaloneServerForm.publishOwnApp": "In order to send push notitications you need to compile and publish your own app to Google Play and App Store", "onboarding.form.standaloneServerForm.manuallyIntegrate": "Need to manually integrate with external services", + "subscription.callout.servicesDisruptionsMayOccur": "Services Disruptions may occur", + "subscription.callout.servicesDisruptionsOccurring": "Services Disruptions occurring", + "subscription.callout.capabilitiesDisabled": "Capabilities disabled", + "subscription.callout.description.limitsExceeded_one": "Your workspace exceeded the <1>{{val}} license limit. <3>Manage your subscription to increase limits.", + "subscription.callout.description.limitsExceeded_other": "Your workspace exceeded the <1>{{val, list}} license limits. <3>Manage your subscription to increase limits.", + "subscription.callout.description.limitsReached_one": "Your workspace reached the <1>{{val}} license limit. <3>Manage your subscription to increase limits.", + "subscription.callout.description.limitsReached_other": "Your workspace reached the <1>{{val, list}} license limits. <3>Manage your subscription to increase limits.", + "subscription.callout.allPremiumCapabilitiesDisabled": "All premium capabilities disabled", + "subscription.callout.activeUsers": "seats", + "subscription.callout.guestUsers": "guests", + "subscription.callout.roomsPerGuest": "max guest per room", + "subscription.callout.privateApps": "installed private apps", + "subscription.callout.marketplaceApps": "installed marketplace apps", + "subscription.callout.monthlyActiveContacts": "monthly active contacts", "Something_Went_Wrong": "Something went wrong", "Toolbox_room_actions": "Primary Room actions", "Theme_light": "Light", @@ -6129,8 +6186,9 @@ "unread_messages_counter": "{{count}} unread message", "unread_messages_counter_plural": "{{count}} unread messages", "Premium": "Premium", + "Enterprise": "Premium", "Premium_capability": "Premium capability", - "Operating_withing_plan_limits": "Operating withing plan limits", + "Operating_withing_plan_limits": "Operating within plan limits", "Plan_limits_reached": "Plan limits reached", "Workspace_not_registered": "Workspace not registered", "Users_Connected": "Users connected", diff --git a/apps/meteor/packages/rocketchat-i18n/i18n/eo.i18n.json b/apps/meteor/packages/rocketchat-i18n/i18n/eo.i18n.json index 9c9501c8a174..8a9c04f729b2 100644 --- a/apps/meteor/packages/rocketchat-i18n/i18n/eo.i18n.json +++ b/apps/meteor/packages/rocketchat-i18n/i18n/eo.i18n.json @@ -973,7 +973,6 @@ "Enter_name_here": "Enmetu nomon ĉi tie", "Enter_Normal": "Normala reĝimo (sendu kun Eniri)", "Enter_to": "Eniri al", - "Enterprise": "Entrepreno", "Entertainment": "Amuzaĵo", "Error": "Eraro", "Error_404": "Eraro: 404", @@ -2758,5 +2757,6 @@ "registration.component.form.reasonToJoin": "Kialo por aliĝi", "registration.component.form.invalidConfirmPass": "La konfirmilo de pasvorto ne kongruas kun pasvorto", "registration.component.form.confirmPassword": "Konfirmu vian pasvorton", - "registration.component.form.sendConfirmationEmail": "Sendu konfirman retpoŝton" + "registration.component.form.sendConfirmationEmail": "Sendu konfirman retpoŝton", + "UpgradeToGetMore_engagement-dashboard_Title": "Analitiko" } \ No newline at end of file diff --git a/apps/meteor/packages/rocketchat-i18n/i18n/es.i18n.json b/apps/meteor/packages/rocketchat-i18n/i18n/es.i18n.json index e44f564b381b..e7228feb72d6 100644 --- a/apps/meteor/packages/rocketchat-i18n/i18n/es.i18n.json +++ b/apps/meteor/packages/rocketchat-i18n/i18n/es.i18n.json @@ -424,6 +424,7 @@ "App_author_homepage": "página de inicio del autor", "App_Details": "Detalles de la aplicación", "App_Information": "Información de la aplicación", + "Apps_context_enterprise": "Empresa", "App_Installation": "Instalación de la aplicación", "App_status_auto_enabled": "Habilitada", "App_status_constructed": "Construida", @@ -447,7 +448,6 @@ "Apply": "Aplicar", "Apply_and_refresh_all_clients": "Aplicar y actualizar todos los clientes", "Apps": "Aplicaciones", - "Apps_context_enterprise": "Empresa", "Apps_context_installed": "Instalada", "Apps_Engine_Version": "Versión de motor de aplicaciones", "Apps_Essential_Alert": "Esta aplicación es esencial para los siguientes eventos:", @@ -1565,6 +1565,8 @@ "email_style_description": "Evitar selectores anidados", "email_style_label": "Estilo de correo electrónico", "Email_subject": "Asunto de correo electrónico", + "Enterprise_License": "Licencia de empresa", + "Enterprise_License_Description": "Si tu espacio de trabajo está registrado y la licencia la proporciona Rocket.Chat Cloud, no es necesario que actualices la licencia manualmente aquí.", "Email_verified": "Correo electrónico verificado", "Email_sent": "Correo electrónico enviado", "Emoji": "Emoji", @@ -1616,9 +1618,6 @@ "Enter_Normal": "Modo normal (enviar con Intro)", "Enter_to": "Intro para", "Enter_your_E2E_password": "Introduzca su contraseña E2E", - "Enterprise": "Empresa", - "Enterprise_License": "Licencia de empresa", - "Enterprise_License_Description": "Si tu espacio de trabajo está registrado y la licencia la proporciona Rocket.Chat Cloud, no es necesario que actualices la licencia manualmente aquí.", "Entertainment": "Entretenimiento", "Error": "Error", "Error_404": "Error 404", @@ -2412,7 +2411,6 @@ "LDAP_DataSync_Roles": "Sincronizar roles", "LDAP_DataSync_Channels": "Sincronizar Channels", "LDAP_DataSync_Teams": "Sincronizar equipos", - "LDAP_Enterprise": "Empresa", "LDAP_DataSync_BackgroundSync": "Sincronización en segundo plano", "LDAP_Server_Type": "Tipo de servidor", "LDAP_Server_Type_AD": "Active Directory", @@ -3630,7 +3628,6 @@ "SAML_AuthnRequest_Template": "Plantilla AuthnRequest", "SAML_AuthnRequest_Template_Description": "Las siguientes variables están disponibles: \n- **\\_\\_newId\\_\\_**: Cadena de identificación generada aleatoriamente \n- **\\_\\_instant\\_\\_**: Fecha y hora actual \n- **\\_\\_callbackUrl\\_\\_**: URL de devolución de llamada de Rocket.Chat \n- **\\_\\_entryPoint\\_\\_**: Valor del ajuste {{Custom Entry Point}} \n- **\\_\\_issuer\\_\\_**: Valor del ajuste {{Custom Issuer}} \n- **\\_\\_identifierFormatTag\\_\\_**: Contenido de {{NameID Policy Template}} si un {{Identifier Format}} válido está configurado \n- **\\_\\_identifierFormat\\_\\_**: Valor del ajuste {{Identifier Format}} \n- **\\_\\_authnContextTag\\_\\_**: Contenido de {{AuthnContext Template}} si un {{Custom Authn Context}} válido está configurado \n- **\\_\\_authnContextComparison\\_\\_**: Valor del ajuste {{Authn Context Comparison}} \n- **\\_\\_authnContext\\_\\_**: Valor del ajuste {{Custom Authn Context}}", "SAML_Connection": "Conexión", - "SAML_Enterprise": "Empresa", "SAML_General": "General", "SAML_Custom_Authn_Context": "Contexto de autenticación personalizado", "SAML_Custom_Authn_Context_Comparison": "Comparación de contexto de autenticación", @@ -4244,7 +4241,6 @@ "Transcript_message": "Mensaje para mostrar al preguntar sobre la transcripción", "Transcript_of_your_livechat_conversation": "Transcripción de tu conversación de Omnichannel.", "Transcript_Request": "Solicitud de transcripción", - "onboarding.form.registeredServerForm.continueStandalone": "Continuar como independiente", "transfer-livechat-guest": "Transferir invitados de Livechat", "transfer-livechat-guest_description": "Permiso para transferir invitados de Livechat", "Transferred": "Transferido", @@ -4536,6 +4532,7 @@ "view-l-room": "Ver Rooms de Omnichannel", "view-l-room_description": "Permiso para ver las salas de Omnichannel", "view-livechat-analytics": "Ver análisis de Omnichannel", + "onboarding.page.awaitingConfirmation.subtitle": "Hemos enviado un correo electrónico a {{emailAddress}} con un enlace de confirmación. Verifica que el siguiente código de seguridad coincide con el del mensaje.", "view-livechat-analytics_description": "Permiso para ver análisis de Livechat", "view-livechat-appearance": "Ver apariencia de Omnichannel", "view-livechat-appearance_description": "Permiso para ver la apariencia de Livechat", @@ -4766,81 +4763,13 @@ "registration.component.form.confirmPassword": "Confirma tu contraseña", "registration.component.form.confirmation": "Confirmación", "registration.component.form.register": "Registrar", - "onboarding.component.form.requiredField": "Este campo es obligatorio", - "onboarding.component.form.steps": "Paso {{currentStep}} de {{stepCount}}", - "onboarding.component.form.action.back": "Anterior", - "onboarding.component.form.action.next": "Siguiente", - "onboarding.component.form.action.skip": "Omitir este paso", - "onboarding.component.form.action.register": "Registrar", - "onboarding.component.form.action.confirm": "Confirmar", - "onboarding.component.form.termsAndConditions": "Acepto los <1>términos y condiciones y la <3>política de privacidad", - "onboarding.component.emailCodeFallback": "¿No has recibido el correo electrónico? <1>Volver a enviar o <3>cambiar correo electrónico", - "onboarding.page.form.title": "Vamos a <1>Iniciar tu espacio de trabajo", - "onboarding.page.awaitingConfirmation.title": "Esperando confirmación", - "onboarding.page.awaitingConfirmation.subtitle": "Hemos enviado un correo electrónico a {{emailAddress}} con un enlace de confirmación. Verifica que el siguiente código de seguridad coincide con el del mensaje.", - "onboarding.page.emailConfirmed.title": "Correo electrónico confirmado", - "onboarding.page.emailConfirmed.subtitle": "Puedes volver a la aplicación de Rocket.Chat. Ya hemos iniciado tu espacio de trabajo.", - "onboarding.page.checkYourEmail.title": "Comprueba tu correo electrónico", - "onboarding.page.checkYourEmail.subtitle": "Se ha enviado correctamente tu solicitud.<1>Consulta tu bandeja de entrada de correo electrónico para iniciar la prueba empresarial.<1>El enlace caducará en 30 minutos.", - "onboarding.page.confirmationProcess.title": "Confirmación en curso", - "onboarding.page.cloudDescription.title": "Vamos a iniciar tu espacio de trabajo y la <1>prueba de 14 días", - "onboarding.page.cloudDescription.tryGold": "Prueba nuestro plan Gold gratis durante 14 días", - "onboarding.page.cloudDescription.numberOfIntegrations": "1000 integraciones", - "onboarding.page.cloudDescription.availability": "Alta disponibilidad", - "onboarding.page.cloudDescription.auditing": "Registros de auditoría/Panel de auditoría de mensajes", - "onboarding.page.cloudDescription.engagement": "Panel de interacción", - "onboarding.page.cloudDescription.ldap": "Sincronización mejorada LDAP", - "onboarding.page.cloudDescription.omnichannel": "Omnichannel premium", - "onboarding.page.cloudDescription.sla": "Acuerdo de nivel de servicio: Premium", - "onboarding.page.cloudDescription.push": "Notificaciones push seguras", - "onboarding.page.cloudDescription.goldIncludes": "* El plan Gold incluye todas las funciones del resto de planes", - "onboarding.page.alreadyHaveAccount": "¿Ya tienes una cuenta? <1>Gestiona tus espacios de trabajo", - "onboarding.page.invalidLink.title": "El enlace ya no es válido", - "onboarding.page.invalidLink.content": "Parece que ya has usado este enlace de invitación. Se ha generado para un uso único. Solicita uno nuevo para unirte a tu espacio de trabajo.", - "onboarding.page.invalidLink.button.text": "Solicitar nuevo enlace", - "onboarding.page.requestTrial.title": "Solicitar una <1>prueba de 30 días", - "onboarding.page.requestTrial.subtitle": "Prueba nuestro mejor plan Enterprise Edition gratis durante 30 días", - "onboarding.page.magicLinkEmail.title": "Te hemos enviado un enlace de inicio de sesión por correo electrónico", - "onboarding.page.magicLinkEmail.subtitle": "Haz clic en el enlace del mensaje que acabamos de enviarte para iniciar sesión en tu espacio de trabajo. <1>El enlace caducará en 30 minutos.", - "onboarding.form.adminInfoForm.title": "Información de administrador", - "onboarding.form.adminInfoForm.subtitle": "Necesitamos esto para crear un perfil de administrador en tu espacio de trabajo", - "onboarding.form.adminInfoForm.fields.fullName.label": "Nombre completo", - "onboarding.form.adminInfoForm.fields.fullName.placeholder": "Nombre y apellido", - "onboarding.form.adminInfoForm.fields.username.label": "Nombre de usuario", - "onboarding.form.adminInfoForm.fields.username.placeholder": "@username", - "onboarding.form.adminInfoForm.fields.email.label": "Correo electrónico", - "onboarding.form.adminInfoForm.fields.email.placeholder": "Correo electrónico", - "onboarding.form.adminInfoForm.fields.password.label": "Contraseña", - "onboarding.form.adminInfoForm.fields.password.placeholder": "Crear contraseña", - "onboarding.form.adminInfoForm.fields.keepPosted.label": "Recibir información sobre Rocket.Chat", - "onboarding.form.organizationInfoForm.title": "Información de organización", - "onboarding.form.organizationInfoForm.subtitle": "Ya falta poco. Esta información nos ayudará a personalizar tu espacio de trabajo", - "onboarding.form.organizationInfoForm.fields.organizationName.label": "Nombre de la organización", - "onboarding.form.organizationInfoForm.fields.organizationName.placeholder": "Nombre de la organización", - "onboarding.form.organizationInfoForm.fields.organizationType.label": "Tipo de organización", - "onboarding.form.organizationInfoForm.fields.organizationType.placeholder": "Seleccionar", - "onboarding.form.organizationInfoForm.fields.organizationIndustry.label": "Sector de la organización", - "onboarding.form.organizationInfoForm.fields.organizationIndustry.placeholder": "Seleccionar", - "onboarding.form.organizationInfoForm.fields.organizationSize.label": "Tamaño de la organización", - "onboarding.form.organizationInfoForm.fields.organizationSize.placeholder": "Seleccionar", - "onboarding.form.organizationInfoForm.fields.country.label": "País", - "onboarding.form.organizationInfoForm.fields.country.placeholder": "Seleccionar", - "onboarding.form.registeredServerForm.title": "Registrar tu servidor", - "onboarding.form.registeredServerForm.included.push": "Notificaciones push para móviles", - "onboarding.form.registeredServerForm.included.externalProviders": "Integración con proveedores externos (WhatsApp, Facebook, Telegram, Twitter)", - "onboarding.form.registeredServerForm.included.apps": "Acceso al Marketplace de aplicaciones", - "onboarding.form.registeredServerForm.fields.accountEmail.inputLabel": "Cuenta de correo electrónico en la nube", - "onboarding.form.registeredServerForm.fields.accountEmail.inputPlaceholder": "Introduce tu correo electrónico", - "onboarding.form.registeredServerForm.keepInformed": "Recibir información sobre noticias y eventos", - "onboarding.form.standaloneServerForm.title": "Confirmación de servidor independiente", - "onboarding.form.standaloneServerForm.servicesUnavailable": "Algunos servicios no estarán disponibles o requerirán configuración manual", - "onboarding.form.standaloneServerForm.publishOwnApp": "Para enviarte notificaciones push, debes compilar y publicar tu propia aplicación en Google Play y App Store", - "onboarding.form.standaloneServerForm.manuallyIntegrate": "Necesita integrarse manualmente con servicios externos", "This_attachment_is_not_supported": "El formato de archivo no es soportado", "Awaiting_confirmation": "Esperando confirmación", "RegisterWorkspace_Features_MobileNotifications_Title": "Notificaciones push para móviles", "RegisterWorkspace_Features_Marketplace_Title": "Marketplace", "RegisterWorkspace_Features_Omnichannel_Title": "Omnichannel", "RegisterWorkspace_Setup_Label": "Cuenta de correo electrónico en la nube", - "cloud.RegisterWorkspace_Setup_Terms_Privacy": "Acepto los <1>términos y condiciones y la <3>política de privacidad" -} \ No newline at end of file + "cloud.RegisterWorkspace_Setup_Terms_Privacy": "Acepto los <1>términos y condiciones y la <3>política de privacidad", + "UpgradeToGetMore_engagement-dashboard_Title": "Análisis", + "UpgradeToGetMore_auditing_Title": "Auditoría de mensajes" +} diff --git a/apps/meteor/packages/rocketchat-i18n/i18n/fa.i18n.json b/apps/meteor/packages/rocketchat-i18n/i18n/fa.i18n.json index dba68fa6b255..40a9e3680128 100644 --- a/apps/meteor/packages/rocketchat-i18n/i18n/fa.i18n.json +++ b/apps/meteor/packages/rocketchat-i18n/i18n/fa.i18n.json @@ -1190,6 +1190,7 @@ "Email_Placeholder": "لطفا آدرس ایمیل خود را وارد کنید...", "Email_Placeholder_any": "لطفا آدرسهای ایمیل را وارد کنید ...", "Email_subject": "موضوع", + "Enterprise_License": "مجوز سازمانی", "Email_verified": "ایمیل تایید شد", "Emoji": "شکلک", "EmojiCustomFilesystem": "سیستم فایل Emoji سفارشی", @@ -1214,8 +1215,6 @@ "Enter_name_here": "نام را اینجا وارد کنید", "Enter_Normal": "حالت عادی (ارسال با Enter)", "Enter_to": "ورود به ", - "Enterprise": "شرکت، پروژه", - "Enterprise_License": "مجوز سازمانی", "Entertainment": "سرگرمی", "Error": "خطا", "Error_404": "خطای 404", @@ -3102,5 +3101,7 @@ "registration.component.form.invalidConfirmPass": "تأییدیه رمز عبور با رمز عبور اصلی مطابقت ندارد.", "registration.component.form.confirmPassword": "رمز عبور خود را تأیید کنید", "registration.component.form.sendConfirmationEmail": "ارسال ایمیل تایید", - "RegisterWorkspace_Features_Omnichannel_Title": "کانال همه‌کاره" + "onboarding.form.registerOfflineForm.title": "ثبت دستی", + "RegisterWorkspace_Features_Omnichannel_Title": "کانال همه‌کاره", + "UpgradeToGetMore_engagement-dashboard_Title": "تجزیه و تحلیل ترافیک" } \ No newline at end of file diff --git a/apps/meteor/packages/rocketchat-i18n/i18n/fi.i18n.json b/apps/meteor/packages/rocketchat-i18n/i18n/fi.i18n.json index f482e42419a4..c6fbfa677d42 100644 --- a/apps/meteor/packages/rocketchat-i18n/i18n/fi.i18n.json +++ b/apps/meteor/packages/rocketchat-i18n/i18n/fi.i18n.json @@ -472,6 +472,7 @@ "App_Details": "Sovelluksen tiedot", "App_Info": "Sovelluksen tiedot", "App_Information": "Sovellustiedot", + "Apps_context_enterprise": "Yritys", "App_Installation": "Sovelluksen asennus", "App_not_enabled": "Sovellus ei käytössä", "App_not_found": "Sovellusta ei löydy", @@ -481,6 +482,7 @@ "App_status_error_disabled": "Ei käytössä: tuntematon virhe", "App_status_initialized": "Alustettu", "App_status_invalid_license_disabled": "Ei käytössä: virheellinen käyttöoikeus", + "Apps_disabled_when_Enterprise_trial_ended": "Sovellukset poistuivat käytöstä, kun yritysversion kokeilujakso päättyi", "App_status_invalid_settings_disabled": "Ei käytössä: määrityksiä tarvitaan", "App_status_manually_disabled": "Ei käytössä: manuaalisesti", "App_status_manually_enabled": "Käytössä", @@ -499,7 +501,6 @@ "Apply_and_refresh_all_clients": "Tallenna ja päivitä kaikki asiakkaat", "Apps": "Sovellukset", "Apps_context_explore": "Tutustu", - "Apps_context_enterprise": "Yritys", "Apps_context_installed": "Asennettu", "Apps_context_requested": "Pyydetty", "Apps_context_private": "Yksityiset sovellukset", @@ -508,9 +509,8 @@ "Private_Apps_Count_Enabled": "{{count}} yksityistä sovellusta käytössä", "Private_Apps_Count_Enabled_plural": "{{count}} yksityistä sovellusta käytössä", "Apps_Count_Enabled_tooltip": "Yhteisöversion työtiloissa voi ottaa käyttöön enintään {{number}} {{context}}sovellusta", - "Apps_disabled_when_Enterprise_trial_ended": "Sovellukset poistuivat käytöstä, kun yritysversion kokeilujakso päättyi", - "Apps_disabled_when_Enterprise_trial_ended_description": "Yhteisöversion työtiloissa voi olla käytössä enintään 5 markkinapaikkasovellusta ja 3 yksityistä sovellusta. Pyydä työtilan järjestelmänvalvojaa ottamaan sovelluksia käyttöön uudelleen.", - "Apps_disabled_when_Enterprise_trial_ended_description_admin": "Yhteisöversion työtiloissa voi olla käytössä enintään 5 markkinapaikkasovellusta ja 3 yksityistä sovellusta. Ota tarvitsemasi sovellukset käyttöön uudelleen.", + "Apps_disabled_when_Premium_trial_ended_description": "Yhteisöversion työtiloissa voi olla käytössä enintään 5 markkinapaikkasovellusta ja 3 yksityistä sovellusta. Pyydä työtilan järjestelmänvalvojaa ottamaan sovelluksia käyttöön uudelleen.", + "Apps_disabled_when_Premium_trial_ended_description_admin": "Yhteisöversion työtiloissa voi olla käytössä enintään 5 markkinapaikkasovellusta ja 3 yksityistä sovellusta. Ota tarvitsemasi sovellukset käyttöön uudelleen.", "Apps_Engine_Version": "Sovellusmoottorin versio", "Apps_Essential_Alert": "Tämä sovellus on välttämätön seuraavissa tapahtumissa:", "Apps_Essential_Disclaimer": "Edellä mainitut tapahtumat keskeytyvät, jos sovellus poistetaan käytöstä. Jos haluat Rocket.Chatin toimivan ilman tämän sovelluksen toimintoja, sinun on poistettava sovellus", @@ -783,6 +783,7 @@ "Broadcasting_media_server_url": "Lähettävän mediapalvelimen URL-osoite", "Browse_Files": "Selaa tiedostoja", "Browser_does_not_support_audio_element": "Selain ei tue äänielementtiä.", + "Call_number_enterprise_only": "Soittajanumero (vain Enterprise Edition)", "Browser_does_not_support_video_element": "Selain ei tue videoelementtiä.", "Browser_does_not_support_recording_video": "Selain ei tue videon tallentamista", "Bugsnag_api_key": "Bugsnag API -avain", @@ -822,7 +823,6 @@ "Call_provider": "Puhelun palveluntarjoaja", "Call_Already_Ended": "Puhelu on jo päättynyt", "Call_number": "Soita numeroon", - "Call_number_enterprise_only": "Soittajanumero (vain Enterprise Edition)", "call-management": "Puhelujen hallinta", "call-management_description": "Oikeus aloittaa kokous", "Call_ongoing": "Puhelu käynnissä", @@ -1781,13 +1781,21 @@ "Email_notification_show_message": "Näytä viesti sähköposti-ilmoituksessa", "Email_Notifications_Change_Disabled": "Rocker.Chatin järjestelmänvalvoja on poistanut käytöstä sähköposti-ilmoitukset", "Email_or_username": "Sähköpostiosoite tai käyttäjätunnus", + "Enterprise_capability": "Yritysominaisuudet", "Email_Placeholder": "Anna sähköpostiosoitteesi...", + "Enterprise_capabilities": "Yritysominaisuudet", "Email_Placeholder_any": "Anna sähköpostiosoitteita...", "email_plain_text_only": "Lähetä sähköposti vain tavallisena tekstinä", + "Enterprise_Departments_description_upgrade": "Yhteisöversion työtiloissa voidaan luoda vain yksi osasto. Poista rajat ja tehosta työtilaasi päivittämällä yritysversioon.", + "Enterprise_Departments_description_free_trial": "Yhteisöversion työtiloissa voi luoda yhden osaston. Aloita maksuton yritysversion kokeilu, jotta voit luoda useita osastoja heti!", "email_style_description": "Vältä sisäkkäisiä valitsimia", "email_style_label": "Sähköpostin tyyli", + "Enterprise_Description": "Päivitä yrityskäyttöoikeus manuaalisesti.", "Email_subject": "Sähköpostin aihe", + "Enterprise_License": "Yrityskäyttöoikeus", + "Enterprise_License_Description": "Jos työtilasi on rekisteröity ja sinulla on Rocket.Chat-pilven käyttöoikeus, sinun ei tarvitse päivittää käyttöoikeutta manuaalisesti tässä.", "Email_verified": "Sähköposti vahvistettu", + "Enterprise_Only": "Vain yritysversio", "Email_sent": "Sähköposti lähetetty", "Emoji": "Emoji", "EmojiCustomFilesystem": "Mukautettujen emojien tiedostojärjestelmä", @@ -1847,16 +1855,7 @@ "Enter_Normal": "Normaali tila (Enter lähettää viestin)", "Enter_to": "Siirry", "Enter_your_E2E_password": "Anna E2E-salasanasi", - "Enterprise": "Yritys", - "Enterprise_capability": "Yritysominaisuudet", - "Enterprise_capabilities": "Yritysominaisuudet", - "Enterprise_Departments_title": "Liitä asiakkaat jonoihin ja paranna agenttien tuottavuutta", - "Enterprise_Departments_description_upgrade": "Yhteisöversion työtiloissa voidaan luoda vain yksi osasto. Poista rajat ja tehosta työtilaasi päivittämällä yritysversioon.", - "Enterprise_Departments_description_free_trial": "Yhteisöversion työtiloissa voi luoda yhden osaston. Aloita maksuton yritysversion kokeilu, jotta voit luoda useita osastoja heti!", - "Enterprise_Description": "Päivitä yrityskäyttöoikeus manuaalisesti.", - "Enterprise_License": "Yrityskäyttöoikeus", - "Enterprise_License_Description": "Jos työtilasi on rekisteröity ja sinulla on Rocket.Chat-pilven käyttöoikeus, sinun ei tarvitse päivittää käyttöoikeutta manuaalisesti tässä.", - "Enterprise_Only": "Vain yritysversio", + "Premium_Departments_title": "Liitä asiakkaat jonoihin ja paranna agenttien tuottavuutta", "Entertainment": "Viihde", "Error": "Virhe", "Error_something_went_wrong": "Oho! Jokin meni pieleen. Lataa sivu uudelleen tai ota yhteys järjestelmänvalvojaan.", @@ -1931,6 +1930,7 @@ "error-invalid-email-address": "Virheellinen sähköpostiosoite", "error-invalid-email-inbox": "Virheellinen sähköpostin Saapuneet-kansio", "error-email-inbox-not-found": "Sähköpostin Saapuneet-kansiota ei löydy", + "error-this-is-an-ee-feature": "Tämä ominaisuus on yritysversiossa", "error-invalid-file-height": "Virheellinen tiedoston korkeus", "error-invalid-file-type": "Virheellinen tiedostotyyppi", "error-invalid-file-width": "Virheellinen tiedoston leveys", @@ -2005,7 +2005,6 @@ "error-tags-must-be-assigned-before-closing-chat": "Tunnisteet on määritettävä ennen keskustelun sulkemista", "error-the-field-is-required": "Kenttä {{field}} on pakollinen.", "error-this-is-not-a-livechat-room": "Tämä ei ole monikanavahuone", - "error-this-is-an-ee-feature": "Tämä ominaisuus on yritysversiossa", "error-token-already-exists": "Tällä nimellä oleva tunnus on jo olemassa", "error-token-does-not-exists": "Tunnusta ei ole olemassa", "error-too-many-requests": "Virhe, liikaa pyyntöjä. Hidasta vähän. Odota {{seconds}} sekuntia ennen uutta yritystä.", @@ -2046,6 +2045,7 @@ "Exact": "Tarkka", "Example_payload": "Esimerkkikuorma", "Example_s": "Esimerkki: %s", + "Federation_Matrix_join_public_rooms_is_enterprise": "Liittyminen liittoutuneisiin huoneisiin on yritysversion ominaisuus", "except_pinned": "(paitsi kiinnitetyt)", "Exclude_Botnames": "Älä sisällytä botteja", "Exclude_Botnames_Description": "Älä levitä viestejä boteilta, joiden nimi vastaa edellä mainittua säännöllistä lauseketta. Jos jätät tämän tyhjäksi, kaikkien bottien viestit levitetään.", @@ -2138,7 +2138,6 @@ "Federation_Matrix_losing_privileges_warning": "Et voi kumota tätä toimenpidettä, koska alennat itsesi. Jos olet viimeinen käyttäjä, jolla on laajat oikeudet, et voi saada tätä oikeutta takaisin. Haluatko silti jatkaa?", "Federation_Matrix_not_allowed_to_change_moderator": "Et saa vaihtaa moderaattoria", "Federation_Matrix_not_allowed_to_change_owner": "Et saa vaihtaa omistajaa", - "Federation_Matrix_join_public_rooms_is_enterprise": "Liittyminen liittoutuneisiin huoneisiin on yritysversion ominaisuus", "Field": "Kenttä", "Field_removed": "Kenttä poistettu", "Field_required": "Kenttä pakollinen", @@ -2210,10 +2209,12 @@ "FileUpload_S3_BucketURL": "Säilön URL-osoite", "FileUpload_S3_CDN": "CDN-toimialue latauksille", "FileUpload_S3_ForcePathStyle": "Pakota polkutyyli", + "Google_Meet_Enterprise_only": "Google Meet (vain yritysversio)", "FileUpload_S3_Proxy_Avatars": "Välityspalvelimen avatarit", "FileUpload_S3_Proxy_Avatars_Description": "Välityspalvelimen avatartiedostojen siirto palvelimen kautta käyttämättä resurssin URL-osoitetta suoraan", "FileUpload_S3_Proxy_Uploads": "Välityspalvelinlataukset", "FileUpload_S3_Proxy_Uploads_Description": "Välityspalvelin lataa tiedostonsiirrot palvelimen kautta käyttämättä resurssin URL-osoitetta suoraan", + "Hold_Call_EE_only": "Aseta puhelu pitoon (vain yritysversio)", "FileUpload_S3_Region": "Alue", "FileUpload_S3_SignatureVersion": "Allekirjoitusversio", "FileUpload_S3_URLExpiryTimeSpan": "URL-osoitteiden vanhenemisaika", @@ -2268,6 +2269,7 @@ "Forgot_Password_Email": "Nollaa salasanasi napsauttamalla tätä.", "Forgot_Password_Email_Subject": "[Site_Name] - Salasanan palautus", "Forgot_password_section": "Unohtunut salasana", + "Hold_EE_only": "Pidä (vain yritysversio)", "Format": "Muotoile", "Forward": "Välitä", "Forward_chat": "Välitä keskustelu", @@ -2311,10 +2313,8 @@ "Global_purge_override_warning": "Yleinen säilytyskäytäntö on käytössä. Jos jätät asetuksen Ohita yleinen säilytyskäytäntö pois käytöstä, voit käyttää ainoastaan yleistä käytäntöä tiukempaa käytäntöä.", "Global_Search": "Yleinen haku", "Go_to_your_workspace": "Siirry työtilaasi", - "Google_Meet_Enterprise_only": "Google Meet (vain yritysversio)", "Google_Play": "Google Play", "Hold_Call": "Aseta puhelu pitoon", - "Hold_Call_EE_only": "Aseta puhelu pitoon (vain yritysversio)", "GoogleCloudStorage": "Google-pilvitallennus", "GoogleNaturalLanguage_ServiceAccount_Description": "Palvelutiliavaimen JSON-tiedosto. Lisätietoja on [täällä](https://cloud.google.com/natural-language/docs/common/auth#set_up_a_service_account)", "GoogleTagManager_id": "Google Tag Manager -tunnus", @@ -2370,7 +2370,6 @@ "History": "Historia", "Hold_Time": "Pitoaika", "Hold": "Pidä", - "Hold_EE_only": "Pidä (vain yritysversio)", "Home": "Koti", "Homepage": "Aloitussivu", "Homepage_Custom_Content_Default_Message": "Järjestelmänvalvojat voivat lisätä html-sisältöä hahmonnettavaksi tähän valkoiseen tilaan.", @@ -2763,7 +2762,6 @@ "LDAP_DataSync_Roles": "Synkronoi roolit", "LDAP_DataSync_Channels": "Synkronoi kanavat Channel", "LDAP_DataSync_Teams": "Synkronoi tiimit", - "LDAP_Enterprise": "Yritys", "LDAP_DataSync_BackgroundSync": "Taustasynkronointi", "LDAP_Server_Type": "Palvelimen tyyppi", "LDAP_Server_Type_AD": "Active Directory", @@ -3021,16 +3019,28 @@ "Load_Rotation": "Kuorman kierto", "Loading": "Ladataan", "Loading_more_from_history": "Ladataan lisää historiasta", + "marketplace_featured_section_community_featured": "Esitellyt yhteisön sovellukset", "Loading_suggestion": "Ladataan ehdotuksia", + "marketplace_featured_section_community_supported": "Yhteisön tukemat sovellukset", "Loading...": "Ladataan...", + "marketplace_featured_section_enterprise": "Esitellyt yrityssovellukset", "Local": "Paikallinen", + "marketplace_featured_section_featured": "Esitellyt sovellukset", + "marketplace_featured_section_most_popular": "Suosituimmat sovellukset", "Local_Domains": "Paikalliset toimialueet", + "marketplace_featured_section_new_arrivals": "Uutuudet", "Local_Password": "Paikallinen salasana", + "marketplace_featured_section_popular_this_month": "Kuukauden suosituimmat sovellukset", "Local_Time": "Paikallinen aika", + "marketplace_featured_section_recommended": "Suositellut sovellukset", "Local_Timezone": "Paikallinen aikavyöhyke", + "marketplace_featured_section_social": "Sosiaaliset sovellukset", "Local_Time_time": "Paikallinen aika: {{time}}", + "marketplace_featured_section_trending": "Trendaavat sovellukset", "Localization": "Lokalisointi", "Location": "Sijainti", + "marketplace_featured_section_omnichannel": "Omnichannel-sovellukset", + "marketplace_featured_section_video_conferencing": "Videoneuvottelusovellukset", "Log_Exceptions_to_Channel": "Kirjaa poikkeukset kanavalle Channel", "Log_Exceptions_to_Channel_Description": "Kanava, joka vastaanottaa kaikki tallennetut poikkeukset. Jättämällä tyhjäksi voit ohittaa poikkeukset.", "Log_File": "Näytä tiedosto ja rivi", @@ -3169,18 +3179,6 @@ "Marketplace_app_last_updated": "Viimeksi päivitetty {{lastUpdated}}", "Marketplace_view_marketplace": "Näytä kauppapaikka", "Marketplace_error": "Yhteyttä internetiin ei voi muodostaa, tai työtilasi on offline-asennus.", - "marketplace_featured_section_community_featured": "Esitellyt yhteisön sovellukset", - "marketplace_featured_section_community_supported": "Yhteisön tukemat sovellukset", - "marketplace_featured_section_enterprise": "Esitellyt yrityssovellukset", - "marketplace_featured_section_featured": "Esitellyt sovellukset", - "marketplace_featured_section_most_popular": "Suosituimmat sovellukset", - "marketplace_featured_section_new_arrivals": "Uutuudet", - "marketplace_featured_section_popular_this_month": "Kuukauden suosituimmat sovellukset", - "marketplace_featured_section_recommended": "Suositellut sovellukset", - "marketplace_featured_section_social": "Sosiaaliset sovellukset", - "marketplace_featured_section_trending": "Trendaavat sovellukset", - "marketplace_featured_section_omnichannel": "Omnichannel-sovellukset", - "marketplace_featured_section_video_conferencing": "Videoneuvottelusovellukset", "MAU_value": "MAU {{value}}", "Max_length_is": "Maksimi pituus on %s", "Max_number_incoming_livechats_displayed": "Jonossa näytettävien kohteiden enimmäismäärä", @@ -3289,6 +3287,7 @@ "Message_HideType_subscription_role_removed": "Piilota \"Rooliasetus poistettu\"-viestit", "Message_HideType_uj": "Piilota \"Käyttäjä liittyi\"-viestit", "Message_HideType_ujt": "Piilota \"Käyttäjä liittyi tiimiin\"-viestit", + "New_Call_Enterprise_Edition_Only": "Uusi puhelu (vain yritysversio)", "Message_HideType_ul": "Piilota \"Käyttäjän poistui\"-viestit", "Message_HideType_ult": "Piilota \"Käyttäjä poistui tiimistä\"-viestit", "Message_HideType_user_added_room_to_team": "Piilota \"Käyttäjä lisäsi huoneen Room Tiimiin\"-viestit", @@ -3440,7 +3439,6 @@ "New_Application": "Uusi sovellus", "New_Business_Hour": "Uusi aukioloaika", "New_Call": "Uusi puhelu", - "New_Call_Enterprise_Edition_Only": "Uusi puhelu (vain yritysversio)", "New_chat_in_queue": "Uusi keskustelu jonossa", "New_chat_priority": "Prioriteetti muutettu: {{user}} prioriteettti muutettu {{priority}}", "New_chat_transfer": "Uusi chat-siirto: {{transfer}}", @@ -3524,6 +3522,7 @@ "None": "Ei mitään", "Nonprofit": "Voittoa tavoittelematon", "Not_authorized": "Ei valtuutettu", + "Pexip_Enterprise_only": "Pexip (vain yritysversio)", "Normal": "Normaali", "Not_Available": "Ei saatavilla", "Not_assigned": "Ei määritetty", @@ -3741,7 +3740,6 @@ "Permalink": "Pysyvä linkki", "Permissions": "Oikeudet", "Personal_Access_Tokens": "Henkilökohtaiset pääsykoodit", - "Pexip_Enterprise_only": "Pexip (vain yritysversio)", "Phone": "Puhelin", "Phone_call": "Puhelu", "Phone_Number": "Puhelinnumero", @@ -4031,6 +4029,7 @@ "request": "pyyntö", "requests": "pyyntöä", "Requests": "Pyynnöt", + "Search_Enterprise_Apps": "Hae yrityssovelluksia", "Requested": "Pyydetty", "Requested_apps_will_appear_here": "Pyydetyt sovellukset näkyvät tässä", "request-pdf-transcript": "Pyydä PDF-tekstitallennetta", @@ -4194,7 +4193,6 @@ "SAML_AuthnRequest_Template": "AuthnRequest-malli", "SAML_AuthnRequest_Template_Description": "Seuraavat muuttujat ovat käytettävissä: \n- **\\_\\_newId\\__\\_**: Satunnaisesti luotu id-merkkijono \n- **\\__\\_instant\\_\\_\\_**: Nykyinen aikaleima \n- **\\_\\_callbackUrl\\_\\_**: Rocket.Chatin takaisinkutsun URL-osoite. \n- **\\_\\_entryPoint\\_\\_**: {{Custom Entry Point}} -asetuksen arvo. \n- **\\____________**: {{Custom Issuer}} -asetuksen arvo. \n- **\\_\\_identifierFormatTag\\_\\_**: __NameID-käytäntömallin__ sisältö, jos voimassa oleva {{Identifier Format}} on määritetty. \n- **\\_\\_identifierFormat\\_\\_**: {{Identifier Format}} -asetuksen arvo. \n- **\\_\\_authnContextTag\\_\\_**: __AuthnContext-mallin__ sisältö, jos voimassa oleva {{Custom Authn Context}} on määritetty. \n- **\\_\\_authnContextComparison\\_\\_**: {{Authn Context Comparison}} -asetuksen arvo. \n- **\\_\\_authnContext\\_\\_**: {{Custom Authn Context}} -asetuksen arvo.", "SAML_Connection": "Yhteys", - "SAML_Enterprise": "Yritys", "SAML_General": "Yleinen", "SAML_Custom_Authn_Context": "Mukautettu Authn-konteksti", "SAML_Custom_Authn_Context_Comparison": "Authn kontekstin vertailu", @@ -4286,7 +4284,6 @@ "Search": "Haku", "Searchable": "Hakukelpoinen", "Search_Apps": "Hae sovelluksia", - "Search_Enterprise_Apps": "Hae yrityssovelluksia", "Search_Installed_Apps": "Hae asennettuja sovelluksia", "Search_Private_apps": "Hae yksityisiä sovelluksia", "Search_Requested_Apps": "Hae pyydettyjä sovelluksia", @@ -4720,9 +4717,13 @@ "Teams_Search_teams": "Etsi tiimejä", "Teams_New_Read_only_Label": "Vain luku", "Technology_Services": "Tekniikkapalvelut", + "Upgrade_tab_connection_error_description": "Näyttää siltä, että sinulla ei ole internet-yhteyttä. Tämä voi johtua siitä, että työtilasi on asennettu täysin suojattuun air-gapped palvelimeen", "Terms": "Ehdot", "Terms_of_use": "Käyttöehdot", + "Upgrade_tab_connection_error_restore": "Palauta yhteys, niin saat tietää puuttuvista ominaisuuksista.", "Test_Connection": "Testaa yhteys", + "Upgrade_tab_go_fully_featured": "Ota kaikki ominaisuudet käyttöön", + "Upgrade_tab_trial_guide": "Kokeiluopas", "Test_Desktop_Notifications": "Testaa työpöytäilmoitukset", "Test_LDAP_Search": "Testaa LDAP-haku", "test-admin-options": "Hallintapaneelin testausvaihtoehdot", @@ -4893,7 +4894,6 @@ "Transcript_message": "Viesti, kun kysytään puhtaaksikirjoituksesta", "Transcript_of_your_livechat_conversation": "Puhtaaksikirjoitus Omnichannel-keskustelustasi.", "Transcript_Request": "Puhtaaksikirjoituspyyntö", - "onboarding.form.registeredServerForm.continueStandalone": "Jatka itsenäisellä versiolla", "transfer-livechat-guest": "Siirrä Livechat-vieraita", "transfer-livechat-guest_description": "Lupa siirtää livechat-vieraita", "Transferred": "Siirretty", @@ -5009,10 +5009,6 @@ "Update_to_version": "Päivitys versioon {{version}}", "Update_your_RocketChat": "Päivitä Chatsovellus", "Updated_at": "Päivitetty klo.", - "Upgrade_tab_connection_error_description": "Näyttää siltä, että sinulla ei ole internet-yhteyttä. Tämä voi johtua siitä, että työtilasi on asennettu täysin suojattuun air-gapped palvelimeen", - "Upgrade_tab_connection_error_restore": "Palauta yhteys, niin saat tietää puuttuvista ominaisuuksista.", - "Upgrade_tab_go_fully_featured": "Ota kaikki ominaisuudet käyttöön", - "Upgrade_tab_trial_guide": "Kokeiluopas", "Upgrade_tab_upgrade_your_plan": "Päivitä tilauksesi", "Upload": "Lataa", "Uploads": "Lataukset", @@ -5260,6 +5256,7 @@ "view-full-other-user-info_description": "Oikeus tarkastella muiden käyttäjien täydellistä profiilia, mukaan lukien tilin luontipäivä, viimeinen sisäänkirjautuminen jne.", "view-history": "Näytä historia", "view-history_description": "Oikeus tarkastella kanavan historiaa", + "onboarding.component.form.action.registerNow": "Rekisteröidy nyt", "view-join-code": "Näytä liittymiskoodi", "view-join-code_description": "Oikeus tarkastella kanavan liittymiskoodia", "view-joined-room": "Katso yhdistetty huone", @@ -5267,6 +5264,7 @@ "view-l-room": "Näytä Omnichannel-huoneet Room", "view-l-room_description": "Lupa tarkastella Omnichannel-huoneita", "view-livechat-analytics": "Näytä Omnichannel-analytiikka", + "onboarding.page.awaitingConfirmation.subtitle": "Olemme lähettäneet sinulle sähköpostia osoitteeseen {{emailAddress}}, jossa on vahvistuslinkki. Tarkista, että alla oleva turvakoodi vastaa sähköpostissa olevaa koodia.", "view-livechat-analytics_description": "Lupa tarkastella live-chatin analytiikkaa", "view-livechat-appearance": "Näytä Omnichannel-ulkoasu", "view-livechat-appearance_description": "Lupa tarkastella live-chatin ulkoasua", @@ -5366,8 +5364,10 @@ "Wait_activation_warning": "Ennen kuin voit kirjautua, järjestelmänvalvojan on aktivoitava tilisi manuaalisesti.", "Waiting_for_answer": "Odotetaan vastausta", "Waiting_queue": "Odotusjonossa", + "Enterprise_cap_description": "Yritysversion työtiloissa ei ole läsnäolopalvelun ylärajaa.", "Waiting_queue_message": "Odotusjonon viesti", "Waiting_queue_message_description": "Viesti, joka näytetään kävijöille, kun he joutuvat jonoon", + "More_about_Enterprise_Edition": "Lisätietoja yritysversiosta", "Waiting_Time": "Odotusaika", "Waiting_for_server_connection": "Odottaa palvelinyhteyttä", "Warning": "Varoitus", @@ -5433,6 +5433,7 @@ "Would_you_like_to_return_the_inquiry": "Haluatko palauttaa kyselyn?", "Would_you_like_to_return_the_queue": "Haluatteko siirtää tämän huoneen takaisin jonoon? Kaikki keskusteluhistoria säilyy huoneessa.", "Would_you_like_to_place_chat_on_hold": "Haluaisitko asettaa tämän keskustelun pitoon?", + "multiple_instance_solutions": "usean esiintymän ratkaisut", "Wrap_up_the_call": "Puhelun päättäminen", "Wrap_Up_Notes": "Lopetusmuistiinpanot", "Workspace": "Työtila", @@ -5563,79 +5564,6 @@ "registration.component.form.confirmation": "Vahvistus", "registration.component.form.sendConfirmationEmail": "Lähetä vahvistussähköposti", "registration.component.form.register": "Rekisteröidy", - "onboarding.component.form.requiredField": "Tämä kenttä on pakollinen", - "onboarding.component.form.steps": "Vaihe {{currentStep}} / {{stepCount}}", - "onboarding.component.form.action.back": "Takaisin", - "onboarding.component.form.action.next": "Seuraava", - "onboarding.component.form.action.skip": "Ohita tämä vaihe", - "onboarding.component.form.action.register": "Rekisteröi", - "onboarding.component.form.action.registerNow": "Rekisteröidy nyt", - "onboarding.component.form.action.confirm": "Vahvista", - "onboarding.component.form.termsAndConditions": "Hyväksyn käyttöehdot <1>ja <3>tietosuojaselosteen", - "onboarding.component.emailCodeFallback": "Etkö saanut sähköpostia? <1>Lähetä uudelleen tai <3>muuta sähköpostia", - "onboarding.page.form.title": " <1>Käynnistetään työtilasi", - "onboarding.page.awaitingConfirmation.title": "Odotamme vahvistusta", - "onboarding.page.awaitingConfirmation.subtitle": "Olemme lähettäneet sinulle sähköpostia osoitteeseen {{emailAddress}}, jossa on vahvistuslinkki. Tarkista, että alla oleva turvakoodi vastaa sähköpostissa olevaa koodia.", - "onboarding.page.emailConfirmed.title": "Sähköposti vahvistettu!", - "onboarding.page.emailConfirmed.subtitle": "Voit palata chatsovellukseen, olemme jo käynnistäneet työtilasi.", - "onboarding.page.checkYourEmail.title": "Tarkista sähköpostisi", - "onboarding.page.checkYourEmail.subtitle": "Your request has been sent successfully.<1>Check your email inbox to launch your Enterprise trial.<1>The link will expire in 30 minutes.", - "onboarding.page.confirmationProcess.title": "Vahvistus käynnissä", - "onboarding.page.cloudDescription.title": "Käynnistetään työtilasi ja <1>14 päivän kokeilujakso", - "onboarding.page.cloudDescription.tryGold": "Kokeile parasta Gold-pakettiamme 14 päivän ajan ilmaiseksi", - "onboarding.page.cloudDescription.numberOfIntegrations": "1,000 integraatiota", - "onboarding.page.cloudDescription.availability": "Korkea saatavuus", - "onboarding.page.cloudDescription.auditing": "Viestien tarkastuspaneeli / Tarkastuslokit", - "onboarding.page.cloudDescription.engagement": "Engagement Dashboard", - "onboarding.page.cloudDescription.ldap": "Parannettu LDAP-synkronointi", - "onboarding.page.cloudDescription.omnichannel": "Omnichannel-premium", - "onboarding.page.cloudDescription.sla": "SLA: Premium", - "onboarding.page.cloudDescription.push": "Suojatut push-ilmoitukset", - "onboarding.page.cloudDescription.goldIncludes": "* Kultainen taso sisältää kaikki muiden tasojen ominaisuudet", - "onboarding.page.alreadyHaveAccount": "Onko sinulla jo tili? <1>Hallitse työtilojasi.", - "onboarding.page.invalidLink.title": "Linkkisi ei ole enää voimassa", - "onboarding.page.invalidLink.content": "Näyttää siltä, että olet jo käyttänyt kutsulinkkiä. Se on luotu yhtä sisäänkirjautumista varten. Pyydä uusi kutsu liittyäksesi työtilaasi.", - "onboarding.page.invalidLink.button.text": "Pyydä uusi linkki", - "onboarding.page.requestTrial.title": "Pyydä <1>30 päivän kokeilujakso", - "onboarding.page.requestTrial.subtitle": "Kokeile parasta yritysversion sopimustamme 30 päivää maksutta", - "onboarding.page.magicLinkEmail.title": "Lähetimme sinulle kirjautumislinkin sähköpostitse", - "onboarding.page.magicLinkEmail.subtitle": "Klikkaa juuri lähettämässämme sähköpostiviestissä olevaa linkkiä kirjautuaksesi työtilaasi. <1>Linkki päättyy 30 minuutin kuluttua.", - "onboarding.form.adminInfoForm.title": "Admin Info", - "onboarding.form.adminInfoForm.subtitle": "Tarvitsemme tätä luodaksemme ylläpitäjäprofiilin työtilaasi", - "onboarding.form.adminInfoForm.fields.fullName.label": "Koko nimi", - "onboarding.form.adminInfoForm.fields.fullName.placeholder": "Etu- ja sukunimi", - "onboarding.form.adminInfoForm.fields.username.label": "Käyttäjänimi", - "onboarding.form.adminInfoForm.fields.username.placeholder": "@username", - "onboarding.form.adminInfoForm.fields.email.label": "Sähköposti", - "onboarding.form.adminInfoForm.fields.email.placeholder": "Sähköposti", - "onboarding.form.adminInfoForm.fields.password.label": "Salasana", - "onboarding.form.adminInfoForm.fields.password.placeholder": "Luo salasana", - "onboarding.form.adminInfoForm.fields.keepPosted.label": "Pidä minut ajan tasalla chatsovelluksen päivityksistä", - "onboarding.form.organizationInfoForm.title": "Organisaation tiedot", - "onboarding.form.organizationInfoForm.subtitle": "Pyydämme kärsivällisyyttä, nämä tiedot auttavat meitä muokkaamaan työtilasi yksilölliseksi", - "onboarding.form.organizationInfoForm.fields.organizationName.label": "Organisaation nimi", - "onboarding.form.organizationInfoForm.fields.organizationName.placeholder": "Organisaation nimi", - "onboarding.form.organizationInfoForm.fields.organizationType.label": "Organisaation tyyppi", - "onboarding.form.organizationInfoForm.fields.organizationType.placeholder": "Valitse", - "onboarding.form.organizationInfoForm.fields.organizationIndustry.label": "Organisaation toimiala", - "onboarding.form.organizationInfoForm.fields.organizationIndustry.placeholder": "Valitse", - "onboarding.form.organizationInfoForm.fields.organizationSize.label": "Organisaation koko", - "onboarding.form.organizationInfoForm.fields.organizationSize.placeholder": "Valitse", - "onboarding.form.organizationInfoForm.fields.country.label": "Maa", - "onboarding.form.organizationInfoForm.fields.country.placeholder": "Valitse", - "onboarding.form.registeredServerForm.title": "Rekisteröi palvelimesi", - "onboarding.form.registeredServerForm.included.push": "Mobiili push-ilmoitukset", - "onboarding.form.registeredServerForm.included.externalProviders": "Integrointi ulkoisten palveluntarjoajien kanssa (WhatsApp, Facebook, Telegram, Twitter)", - "onboarding.form.registeredServerForm.included.apps": "Pääsy kauppapaikan sovelluksiin", - "onboarding.form.registeredServerForm.fields.accountEmail.inputLabel": "Cloud-tilin sähköposti", - "onboarding.form.registeredServerForm.fields.accountEmail.inputPlaceholder": "Kirjoita sähköpostiosoitteesi", - "onboarding.form.registeredServerForm.keepInformed": "Pidä minut ajan tasalla uutisista ja tapahtumista", - "onboarding.form.registeredServerForm.registerLater": "Rekisteröidy myöhemmin", - "onboarding.form.registeredServerForm.notConnectedToInternet": "Palvelin ei ole yhteydessä internetiin, joten työtila on rekisteröitävä offline-tilassa.", - "onboarding.form.standaloneServerForm.title": "Itsenäisen palvelimen vahvistus", - "onboarding.form.standaloneServerForm.servicesUnavailable": "Jotkin palvelut eivät ole käytettävissä tai vaativat manuaalista asennusta", - "onboarding.form.standaloneServerForm.publishOwnApp": "Jotta voit lähettää push-ilmoituksia, sinun on koottava ja julkaistava oma sovelluksesi Google Play- ja App Store -sovelluksissa", - "onboarding.form.standaloneServerForm.manuallyIntegrate": "Tarve integroida manuaalisesti ulkoisiin palveluihin", "Something_Went_Wrong": "Jokin meni pieleen", "Toolbox_room_actions": "Ensisijaiset huoneen Room toimet", "Theme_light": "Vaalea", @@ -5678,9 +5606,7 @@ "Undo_request": "Kumoa pyyntö", "No_permission": "Ei oikeutta", "Community_cap_description": "Yhteisön työtiloissa on 200 samanaikaisen yhteyden yläraja. Vaikka aktiivisia yhteyksiä voi olla sitä enemmänkin, kyseisen rajan jälkeen et enää näe käyttäjien tilaa. Tämä ei vaikuta siihen, miten he voivat lähettää ja vastaanottaa viestejä.", - "Enterprise_cap_description": "Yritysversion työtiloissa ei ole läsnäolopalvelun ylärajaa.", "Service_status": "Palvelun tila", - "More_about_Enterprise_Edition": "Lisätietoja yritysversiosta", "Presence_service_cap": "Läsnäolopalvelun yläraja", "User_Status": "Käyttäjän tila", "Active_connections": "Aktiiviset yhteydet", @@ -5746,8 +5672,8 @@ "cloud.RegisterWorkspace_Token_Step_One": "1. Valitse: <1>cloud.rocket.chat > Työtilat ja <3>Itse hallinnoitu rekisteröinti.", "cloud.RegisterWorkspace_Setup_Terms_Privacy": "Hyväksyn <1>käyttöehdot ja <3>tietosuojakäytännön", "Larger_amounts_of_active_connections": "Jos tarvitset enemmän aktiivisia yhteyksiä, ota harkintaan", - "multiple_instance_solutions": "usean esiintymän ratkaisut", "Uninstall_grandfathered_app": "Poistetaanko {{appName}}?", "App_will_lose_grandfathered_status": "**Tämä {{context}}sovellus menettää aikaisemmin käytetössä olleen sovelluksen tilansa.** \n \nYhteisöversion työtiloissa voi olla käytössä enintään {{limit}} {{context}} sovellusta. aikaisemmin Aikaisemmin käytössä olleet sovellukset lasketaan mukaan rajoitukseen, mutta rajoitusta ei sovelleta niihin.", - "Theme_Appearence": "Teeman ulkoasu" + "Theme_Appearence": "Teeman ulkoasu", + "UpgradeToGetMore_engagement-dashboard_Title": "Analytics" } diff --git a/apps/meteor/packages/rocketchat-i18n/i18n/fr.i18n.json b/apps/meteor/packages/rocketchat-i18n/i18n/fr.i18n.json index f460fc0b61de..acb08457e133 100644 --- a/apps/meteor/packages/rocketchat-i18n/i18n/fr.i18n.json +++ b/apps/meteor/packages/rocketchat-i18n/i18n/fr.i18n.json @@ -426,6 +426,7 @@ "App_author_homepage": "Page d'accueil de l'auteur", "App_Details": "Détails de l'application", "App_Information": "Informations sur l'application", + "Apps_context_enterprise": "Entreprise", "App_Installation": "Installation de l'application", "App_status_auto_enabled": "Activé", "App_status_constructed": "Construit", @@ -450,7 +451,6 @@ "Apply": "Appliquer", "Apply_and_refresh_all_clients": "Appliquer et actualiser tous les clients", "Apps": "Applications", - "Apps_context_enterprise": "Entreprise", "Apps_context_installed": "Installé", "Apps_Engine_Version": "Version d'Apps Engine", "Apps_Essential_Alert": "Cette application est indispensable pour les événements suivants :", @@ -1580,6 +1580,8 @@ "email_style_description": "Éviter les sélecteurs imbriqués", "email_style_label": "Style d'e-mail", "Email_subject": "Objet de l'e-mail", + "Enterprise_License": "Licence d'entreprise", + "Enterprise_License_Description": "Si votre espace de travail est enregistré et que la licence est fournie par le cloud Rocket.Chat, vous n'avez pas besoin de mettre à jour manuellement la licence ici.", "Email_verified": "Adresse e-mail vérifiée", "Email_sent": "E-mail envoyé", "Emoji": "Emoji", @@ -1631,9 +1633,6 @@ "Enter_Normal": "Mode normal (envoyé avec Entrée)", "Enter_to": "Entrée pour", "Enter_your_E2E_password": "Entrez votre mot de passe E2E", - "Enterprise": "Entreprise", - "Enterprise_License": "Licence d'entreprise", - "Enterprise_License_Description": "Si votre espace de travail est enregistré et que la licence est fournie par le cloud Rocket.Chat, vous n'avez pas besoin de mettre à jour manuellement la licence ici.", "Entertainment": "Divertissement", "Error": "Erreur", "Error_404": "Erreur 404", @@ -2429,7 +2428,6 @@ "LDAP_DataSync_Roles": "Synchroniser les rôles", "LDAP_DataSync_Channels": "Synchroniser les canaux", "LDAP_DataSync_Teams": "Synchroniser les équipes", - "LDAP_Enterprise": "Entreprise", "LDAP_DataSync_BackgroundSync": "Synchronisation en arrière-plan", "LDAP_Server_Type": "Type de serveur", "LDAP_Server_Type_AD": "Active Directory", @@ -3654,7 +3652,6 @@ "SAML_AuthnRequest_Template": "Modèle AuthnRequest", "SAML_AuthnRequest_Template_Description": "Les variables suivantes sont disponibles : \n- **\\_\\_newId\\_\\_** : Chaîne d'ID générée aléatoirement \n- **\\_\\_instant\\_\\_** : Horodatage actuel \n- **\\_\\_callbackUrl\\_\\_** : URL de rappel Rocket.Chat. \n- **\\_\\_entryPoint\\_\\_** : Valeur du paramètre {{Custom Entry Point}}. \n- **\\_\\_issuer\\_\\_** : Valeur du paramètre {{Custom Issuer}}. \n- **\\_\\_identifierFormatTag\\_\\_** : Contenu de {{NameID Policy Template}} si un {{Identifier Format}} valide est configuré. \n- **\\_\\_identifierFormat\\_\\_** : Valeur du paramètre {{Identifier Format}}. \n- **\\_\\_authnContextTag\\_\\_** : Contenu de {{AuthnContext Template}} si un {{Custom Authn Context}} valide est configuré. \n- **\\_\\_authnContextComparison\\_\\_** : Valeur du paramètre {{Authn Context Comparison}}. \n- **\\_\\_authnContext\\_\\_** : Valeur du paramètre {{Custom Authn Context}}.", "SAML_Connection": "Connexion", - "SAML_Enterprise": "Entreprise", "SAML_General": "Général", "SAML_Custom_Authn_Context": "Contexte authn personnalisé", "SAML_Custom_Authn_Context_Comparison": "Comparaison du contexte authn ", @@ -4117,8 +4114,12 @@ "Teams_Search_teams": "Rechercher des équipes", "Teams_New_Read_only_Label": "Lecture seule", "Technology_Services": "Services technologiques", + "Upgrade_tab_connection_error_description": "Il semble que vous n'ayez pas de connexion Internet. Cela peut être dû au fait que votre espace de travail est installé sur un serveur air-gap entièrement sécurisé", "Terms": "Conditions", + "Upgrade_tab_connection_error_restore": "Rétablissez votre connexion pour découvrir les fonctionnalités qui vous manquent.", "Test_Connection": "Tester la connexion", + "Upgrade_tab_go_fully_featured": "Passez à la version complète", + "Upgrade_tab_trial_guide": "Guide d'essai", "Test_Desktop_Notifications": "Tester les notifications de bureau", "Test_LDAP_Search": "Tester la recherche LDAP", "test-admin-options": "Tester les options du panneau d'administration telles que la connexion LDAP et les notifications push", @@ -4275,7 +4276,6 @@ "Transcript_message": "Message à afficher pour demander si la transcription est voulue", "Transcript_of_your_livechat_conversation": "Transcription de votre conversation omnicanale", "Transcript_Request": "Demande de transcription", - "onboarding.form.registeredServerForm.continueStandalone": "Continuer en mode autonome", "transfer-livechat-guest": "Transférer les invités Livechat", "transfer-livechat-guest_description": "Autorisation de transférer des invités Livechat", "Transferred": "Transféré", @@ -4379,10 +4379,6 @@ "Update_to_version": "Mettre à jour vers {{version}}", "Update_your_RocketChat": "Mettre à jour votre Rocket.Chat", "Updated_at": "Mis à jour à", - "Upgrade_tab_connection_error_description": "Il semble que vous n'ayez pas de connexion Internet. Cela peut être dû au fait que votre espace de travail est installé sur un serveur air-gap entièrement sécurisé", - "Upgrade_tab_connection_error_restore": "Rétablissez votre connexion pour découvrir les fonctionnalités qui vous manquent.", - "Upgrade_tab_go_fully_featured": "Passez à la version complète", - "Upgrade_tab_trial_guide": "Guide d'essai", "Upgrade_tab_upgrade_your_plan": "Améliorez votre plan", "Upload": "Charger", "Uploads": "Chargements", @@ -4577,6 +4573,7 @@ "view-l-room": "Voir les salons omnicanaux", "view-l-room_description": "Autorisation de voir les salons omnicanaux", "view-livechat-analytics": "Afficher les analyses omnicanales", + "onboarding.page.awaitingConfirmation.subtitle": "Nous vous avons envoyé un e-mail à {{emailAddress}} avec un lien de confirmation. Veuillez vérifier que le code de sécurité ci-dessous correspond à celui de l'e-mail.", "view-livechat-analytics_description": "Autorisation d'afficher les analyses Livechat", "view-livechat-appearance": "Afficher l'apparence omnicanale", "view-livechat-appearance_description": "Autorisation d'afficher l'apparence de Livechat", @@ -4815,80 +4812,12 @@ "registration.component.form.confirmation": "Confirmation", "registration.component.form.sendConfirmationEmail": "Envoyer un e-mail de confirmation", "registration.component.form.register": "S'inscrire", - "onboarding.component.form.requiredField": "Ce champ est requis", - "onboarding.component.form.steps": "Étape {{currentStep}} sur {{stepCount}}", - "onboarding.component.form.action.back": "Retour", - "onboarding.component.form.action.next": "Suivant", - "onboarding.component.form.action.skip": "Passer cette étape", - "onboarding.component.form.action.register": "S'inscrire", - "onboarding.component.form.action.confirm": "Confirmer", - "onboarding.component.form.termsAndConditions": "J'accepte les <1>Conditions d'utilisation et la <3>Politique de confidentialité", - "onboarding.component.emailCodeFallback": "Vous n'avez pas reçu d'e-mail ? <1>Renvoyer ou <3>Modifier l'adresse mail", - "onboarding.page.form.title": "<1>Lancez votre espace de travail", - "onboarding.page.awaitingConfirmation.title": "En attente de confirmation", - "onboarding.page.awaitingConfirmation.subtitle": "Nous vous avons envoyé un e-mail à {{emailAddress}} avec un lien de confirmation. Veuillez vérifier que le code de sécurité ci-dessous correspond à celui de l'e-mail.", - "onboarding.page.emailConfirmed.title": "E-mail confirmé !", - "onboarding.page.emailConfirmed.subtitle": "Vous pouvez retourner à votre application Rocket.Chat : nous avons déjà lancé votre espace de travail.", - "onboarding.page.checkYourEmail.title": "Vérifiez votre messagerie", - "onboarding.page.checkYourEmail.subtitle": "Votre demande a été envoyée. <1>Vérifiez votre boîte de réception pour commencer votre essai de la version Entreprise.<1>Le lien expirera dans 30 minutes.", - "onboarding.page.confirmationProcess.title": "Confirmation en cours", - "onboarding.page.cloudDescription.title": "Lancez votre espace de travail et <1>l'essai de 14 jours", - "onboarding.page.cloudDescription.tryGold": "Essayez gratuitement notre meilleur forfait Gold pendant 14 jours", - "onboarding.page.cloudDescription.numberOfIntegrations": "1 000 intégrations", - "onboarding.page.cloudDescription.availability": "Haute disponibilité", - "onboarding.page.cloudDescription.auditing": "Panneau d'audit des messages/journaux d'audit", - "onboarding.page.cloudDescription.engagement": "Tableau de bord d'engagement", - "onboarding.page.cloudDescription.ldap": "Synchronisation LDAP améliorée", - "onboarding.page.cloudDescription.omnichannel": "Omnicanal premium", - "onboarding.page.cloudDescription.sla": "SLA : Premium", - "onboarding.page.cloudDescription.push": "Notifications push sécurisées", - "onboarding.page.cloudDescription.goldIncludes": "* Le forfait Golden comprend toutes les fonctionnalités des autres forfaits", - "onboarding.page.alreadyHaveAccount": "Vous avez déjà un compte ? <1>Gérez vos espaces de travail.", - "onboarding.page.invalidLink.title": "Votre lien n'est plus valide", - "onboarding.page.invalidLink.content": "Il semble que vous ayez déjà utilisé le lien d'invitation. Il est généré pour une connexion unique. Demandez-en un nouveau pour rejoindre votre espace de travail.", - "onboarding.page.invalidLink.button.text": "Demander un nouveau lien", - "onboarding.page.requestTrial.title": "Demander un <1>essai de 30 jours", - "onboarding.page.requestTrial.subtitle": "Essayez notre meilleur forfait Enterprise Edition gratuitement pendant 30 jours", - "onboarding.page.magicLinkEmail.title": "Nous vous avons envoyé un lien de connexion par e-mail", - "onboarding.page.magicLinkEmail.subtitle": "Cliquez sur le lien dans l'e-mail que nous venons de vous envoyer pour vous connecter à votre espace de travail. <1>Le lien expirera dans 30 minutes.", - "onboarding.form.adminInfoForm.title": "Infos sur l'administrateur", - "onboarding.form.adminInfoForm.subtitle": "Nous en avons besoin pour créer un profil d'administrateur dans votre espace de travail", - "onboarding.form.adminInfoForm.fields.fullName.label": "Nom complet", - "onboarding.form.adminInfoForm.fields.fullName.placeholder": "Prénom et nom", - "onboarding.form.adminInfoForm.fields.username.label": "Nom d'utilisateur", - "onboarding.form.adminInfoForm.fields.username.placeholder": "@nomdutilisateur", - "onboarding.form.adminInfoForm.fields.email.label": "E-mail", - "onboarding.form.adminInfoForm.fields.email.placeholder": "E-mail", - "onboarding.form.adminInfoForm.fields.password.label": "Mot de passe", - "onboarding.form.adminInfoForm.fields.password.placeholder": "Créer un mot de passe", - "onboarding.form.adminInfoForm.fields.keepPosted.label": "M'informer des mises à jour de Rocket.Chat", - "onboarding.form.organizationInfoForm.title": "Informations sur l'organisation", - "onboarding.form.organizationInfoForm.subtitle": "Aidez-nous ! Grâce à ces informations, nous pourrons personnaliser votre espace de travail", - "onboarding.form.organizationInfoForm.fields.organizationName.label": "Nom de l'organisation", - "onboarding.form.organizationInfoForm.fields.organizationName.placeholder": "Nom de l'organisation", - "onboarding.form.organizationInfoForm.fields.organizationType.label": "Type d'organisation", - "onboarding.form.organizationInfoForm.fields.organizationType.placeholder": "Sélectionnez", - "onboarding.form.organizationInfoForm.fields.organizationIndustry.label": "Secteur de l'organisation", - "onboarding.form.organizationInfoForm.fields.organizationIndustry.placeholder": "Sélectionnez", - "onboarding.form.organizationInfoForm.fields.organizationSize.label": "Taille de l'organisation", - "onboarding.form.organizationInfoForm.fields.organizationSize.placeholder": "Sélectionnez", - "onboarding.form.organizationInfoForm.fields.country.label": "Pays", - "onboarding.form.organizationInfoForm.fields.country.placeholder": "Sélectionnez", - "onboarding.form.registeredServerForm.title": "Enregistrer votre serveur", - "onboarding.form.registeredServerForm.included.push": "Notifications push mobiles", - "onboarding.form.registeredServerForm.included.externalProviders": "Intégration avec des fournisseurs externes (WhatsApp, Facebook, Telegram, Twitter)", - "onboarding.form.registeredServerForm.included.apps": "Accès aux applications du marketplace", - "onboarding.form.registeredServerForm.fields.accountEmail.inputLabel": "E-mail du compte cloud", - "onboarding.form.registeredServerForm.fields.accountEmail.inputPlaceholder": "Entrez votre adresse e-mail", - "onboarding.form.registeredServerForm.keepInformed": "Me tenir informé des actualités et des événements", - "onboarding.form.standaloneServerForm.title": "Confirmation du serveur autonome", - "onboarding.form.standaloneServerForm.servicesUnavailable": "Certains services ne seront pas disponibles ou nécessiteront une configuration manuelle", - "onboarding.form.standaloneServerForm.publishOwnApp": "Pour envoyer des notifications push, vous devez compiler et publier votre propre application sur Google Play et App Store", - "onboarding.form.standaloneServerForm.manuallyIntegrate": "Intégration manuelle des services externes requise", "Awaiting_confirmation": "En attente de confirmation", "RegisterWorkspace_Features_MobileNotifications_Title": "Notifications push mobiles", "RegisterWorkspace_Features_Marketplace_Title": "Marketplace", "RegisterWorkspace_Features_Omnichannel_Title": "Omnicanal", "RegisterWorkspace_Setup_Label": "E-mail du compte cloud", - "cloud.RegisterWorkspace_Setup_Terms_Privacy": "J'accepte les <1>Conditions d'utilisation et la <3>Politique de confidentialité" -} \ No newline at end of file + "cloud.RegisterWorkspace_Setup_Terms_Privacy": "J'accepte les <1>Conditions d'utilisation et la <3>Politique de confidentialité", + "UpgradeToGetMore_engagement-dashboard_Title": "Analyses", + "UpgradeToGetMore_auditing_Title": "Audit des messages" +} diff --git a/apps/meteor/packages/rocketchat-i18n/i18n/gl.i18n.json b/apps/meteor/packages/rocketchat-i18n/i18n/gl.i18n.json index 9ee622195a6a..c45c3559bbe2 100644 --- a/apps/meteor/packages/rocketchat-i18n/i18n/gl.i18n.json +++ b/apps/meteor/packages/rocketchat-i18n/i18n/gl.i18n.json @@ -270,7 +270,6 @@ "Threads": "Fíos", "to_see_more_details_on_how_to_integrate": "para ver máis detalles sobre como integrarse.", "Total_Threads": "Fíos totais", - "onboarding.form.registeredServerForm.continueStandalone": "Continúa como autónomo", "Travel_and_Places": "Viaxes e Lugares", "Type_your_message": "Escribe a túa mensaxe", "Unpin_Message": "Anular fixación da mensaxe", @@ -278,6 +277,7 @@ "Videocall_enabled": "Videochamada habilitada", "Videocall_declined": "Videochamada rexeitada.", "view-full-other-user-info": "Ver toda a información do usuario", + "onboarding.page.awaitingConfirmation.subtitle": "Enviámosche un correo electrónico a {{emailAddress}} cunha ligazón de confirmación. Verifique que o código de seguranza que aparece a continuación coincide co do correo electrónico.", "You_can_close_this_window_now": "Xa podes pechar esta ventá.", "You_can_use_an_emoji_as_avatar": "Tamén podes usar un emoji como avatar.", "You_can_use_webhooks_to_easily_integrate_livechat_with_your_CRM": "Podes usar webhooks para integrar facilmente o chat de vídeo co teu CRM.", @@ -315,75 +315,5 @@ "Your_question": "A túa pregunta", "Your_server_link": "O teu enlace do servidor", "Your_temporary_password_is_password": "A túa contrasinal temporal é [password].", - "Your_workspace_is_ready": "O teu espazo de traballo está preparado para usarse🎉", - "onboarding.component.form.requiredField": "Este campo é necesario", - "onboarding.component.form.steps": "Paso {{currentStep}} de {{stepCount}}", - "onboarding.component.form.action.back": "De volta", - "onboarding.component.form.action.next": "A continuación", - "onboarding.component.form.action.skip": "Ignore este paso", - "onboarding.component.form.action.register": "Rexistrarse", - "onboarding.component.form.action.confirm": "Confirmar", - "onboarding.component.form.termsAndConditions": "Acepto os <1>Termos e condicións e a <3>Política de privacidade", - "onboarding.component.emailCodeFallback": "Non recibiches o correo electrónico? <1>Reenviar ou <3>Cambiar correo electrónico", - "onboarding.page.form.title": "Imos <1>Iniciar o teu espazo de traballo", - "onboarding.page.awaitingConfirmation.title": "Agardando confirmación", - "onboarding.page.awaitingConfirmation.subtitle": "Enviámosche un correo electrónico a {{emailAddress}} cunha ligazón de confirmación. Verifique que o código de seguranza que aparece a continuación coincide co do correo electrónico.", - "onboarding.page.emailConfirmed.title": "Correo electrónico confirmado!", - "onboarding.page.emailConfirmed.subtitle": "Podes volver á túa aplicación Rocket.Chat: xa lanzamos o teu espazo de traballo.", - "onboarding.page.checkYourEmail.title": "Comprobe o seu correo electrónico", - "onboarding.page.checkYourEmail.subtitle": "A túa solicitude enviouse correctamente.<1>Comproba a túa caixa de entrada de correo electrónico para iniciar a proba de Enterprise.<1>A ligazón caducará en 30 minutos.", - "onboarding.page.confirmationProcess.title": "Confirmación en proceso", - "onboarding.page.cloudDescription.title": "Imos lanzar o teu espazo de traballo e a <1>proba de 14 días", - "onboarding.page.cloudDescription.tryGold": "Proba o noso mellor plan Gold durante 14 días de balde", - "onboarding.page.cloudDescription.numberOfIntegrations": "1.000 integracións", - "onboarding.page.cloudDescription.availability": "Alta dispoñibilidade", - "onboarding.page.cloudDescription.auditing": "Panel de auditoría de mensaxes / Rexistros de auditoría", - "onboarding.page.cloudDescription.engagement": "Panel de control de compromiso", - "onboarding.page.cloudDescription.ldap": "Sincronización mellorada por LDAP", - "onboarding.page.cloudDescription.omnichannel": "Omnichannel premium", - "onboarding.page.cloudDescription.sla": "SLA: Premium", - "onboarding.page.cloudDescription.push": "Notificacións push seguras", - "onboarding.page.cloudDescription.goldIncludes": "* O plano dourado inclúe todas as funcións doutros planos", - "onboarding.page.alreadyHaveAccount": "Xa ten unha conta? <1>Xestiona os teus espazos de traballo.", - "onboarding.page.invalidLink.title": "A tú link xa non é válido", - "onboarding.page.invalidLink.content": "Parece que xa usaches a link de invitación. Xérase para un único inicio de sesión. Solicita un novo para unirse ao teu espazo de traballo.", - "onboarding.page.invalidLink.button.text": "Solicita un novo link", - "onboarding.page.requestTrial.title": "Solicita unha <1>proba de 30 días", - "onboarding.page.requestTrial.subtitle": "Proba o noso mellor plana de empresas durante 30 días de balde", - "onboarding.page.magicLinkEmail.title": "Enviámosche por correo electrónico un link de inicio de sesión", - "onboarding.page.magicLinkEmail.subtitle": "Fai clic na ligazón do correo electrónico que che acabamos de enviar para iniciar sesión no teu espazo de traballo. <1>A ligazón caducará en 30 minutos.", - "onboarding.form.adminInfoForm.title": "Información administrativa", - "onboarding.form.adminInfoForm.subtitle": "Necesitamos isto para crear un perfil de administrador dentro do teu espazo de traballo", - "onboarding.form.adminInfoForm.fields.fullName.label": "Nome completo", - "onboarding.form.adminInfoForm.fields.fullName.placeholder": "Nome e apelidos", - "onboarding.form.adminInfoForm.fields.username.label": "Nome de usuario", - "onboarding.form.adminInfoForm.fields.username.placeholder": "@nome-de-usuario", - "onboarding.form.adminInfoForm.fields.email.label": "Email", - "onboarding.form.adminInfoForm.fields.email.placeholder": "Email", - "onboarding.form.adminInfoForm.fields.password.label": "Contrasinal", - "onboarding.form.adminInfoForm.fields.password.placeholder": "Crear contrasinal", - "onboarding.form.adminInfoForm.fields.keepPosted.label": "Mantéñame informado sobre as actualizacións de Rocket.Chat", - "onboarding.form.organizationInfoForm.title": "Información da organización", - "onboarding.form.organizationInfoForm.subtitle": "Por favor, ten paciencia connosco. Esta información axudaranos a personalizar o teu espazo de traballo", - "onboarding.form.organizationInfoForm.fields.organizationName.label": "Nome da Organización", - "onboarding.form.organizationInfoForm.fields.organizationName.placeholder": "Nome da Organización", - "onboarding.form.organizationInfoForm.fields.organizationType.label": "Tipo de organización", - "onboarding.form.organizationInfoForm.fields.organizationType.placeholder": "Seleccione", - "onboarding.form.organizationInfoForm.fields.organizationIndustry.label": "Industria da organización", - "onboarding.form.organizationInfoForm.fields.organizationIndustry.placeholder": "Seleccione", - "onboarding.form.organizationInfoForm.fields.organizationSize.label": "Tamaño da organización", - "onboarding.form.organizationInfoForm.fields.organizationSize.placeholder": "Seleccione", - "onboarding.form.organizationInfoForm.fields.country.label": "País", - "onboarding.form.organizationInfoForm.fields.country.placeholder": "Seleccione", - "onboarding.form.registeredServerForm.title": "Rexistra o teu servidor", - "onboarding.form.registeredServerForm.included.push": "Notificacións push móbiles", - "onboarding.form.registeredServerForm.included.externalProviders": "Integración con provedores externos (WhatsApp, Facebook, Telegram, Twitter)", - "onboarding.form.registeredServerForm.included.apps": "Acceso a aplicacións do mercado", - "onboarding.form.registeredServerForm.fields.accountEmail.inputLabel": "Correo electrónico da conta na nube", - "onboarding.form.registeredServerForm.fields.accountEmail.inputPlaceholder": "Introduce o teu correo electrónico", - "onboarding.form.registeredServerForm.keepInformed": "Mantéñame informado sobre novidades e eventos", - "onboarding.form.standaloneServerForm.title": "Confirmación do servidor autónomo", - "onboarding.form.standaloneServerForm.servicesUnavailable": "Algúns dos servizos non estarán dispoñibles ou requirirán unha configuración manual", - "onboarding.form.standaloneServerForm.publishOwnApp": "Para enviar notificacións push, debes compilar e publicar a túa propia aplicación en Google Play e App Store", - "onboarding.form.standaloneServerForm.manuallyIntegrate": "Necesita integrarse manualmente con servizos externos" -} \ No newline at end of file + "Your_workspace_is_ready": "O teu espazo de traballo está preparado para usarse🎉" +} diff --git a/apps/meteor/packages/rocketchat-i18n/i18n/he.i18n.json b/apps/meteor/packages/rocketchat-i18n/i18n/he.i18n.json index 7f391aa806b4..0f17d3f548c2 100644 --- a/apps/meteor/packages/rocketchat-i18n/i18n/he.i18n.json +++ b/apps/meteor/packages/rocketchat-i18n/i18n/he.i18n.json @@ -1534,5 +1534,6 @@ "registration.component.form.submit": "שליחה", "registration.component.form.invalidConfirmPass": "אימות הססמה אינו זהה לססמה", "registration.component.form.confirmPassword": "אמת את הסיסמה שלך", - "registration.component.form.sendConfirmationEmail": "שליחת דוא״ל אימות" + "registration.component.form.sendConfirmationEmail": "שליחת דוא״ל אימות", + "UpgradeToGetMore_engagement-dashboard_Title": "סטטיסטיקה" } \ No newline at end of file diff --git a/apps/meteor/packages/rocketchat-i18n/i18n/hr.i18n.json b/apps/meteor/packages/rocketchat-i18n/i18n/hr.i18n.json index bbad485652d1..6d9969fd2588 100644 --- a/apps/meteor/packages/rocketchat-i18n/i18n/hr.i18n.json +++ b/apps/meteor/packages/rocketchat-i18n/i18n/hr.i18n.json @@ -1104,7 +1104,6 @@ "Enter_name_here": "Unesite ime", "Enter_Normal": "Normalni način rada (pošalji s Enterom)", "Enter_to": "Uđi u ", - "Enterprise": "Poduzeće", "Entertainment": "Zabava", "Error": "Pogreška", "Error_404": "Pogreška: 404", @@ -2894,5 +2893,6 @@ "registration.component.form.reasonToJoin": "Razlog pridruživanja", "registration.component.form.invalidConfirmPass": "Potvrda lozinke se ne slaže sa lozinkom", "registration.component.form.confirmPassword": "Potvrdi svoju lozinku", - "registration.component.form.sendConfirmationEmail": "Pošalji potvrdni email" + "registration.component.form.sendConfirmationEmail": "Pošalji potvrdni email", + "UpgradeToGetMore_engagement-dashboard_Title": "Analitika" } \ No newline at end of file diff --git a/apps/meteor/packages/rocketchat-i18n/i18n/hu.i18n.json b/apps/meteor/packages/rocketchat-i18n/i18n/hu.i18n.json index 1177a356dc71..d72382c06ae9 100644 --- a/apps/meteor/packages/rocketchat-i18n/i18n/hu.i18n.json +++ b/apps/meteor/packages/rocketchat-i18n/i18n/hu.i18n.json @@ -754,6 +754,7 @@ "Broadcasting_media_server_url": "Műsorszórási médiakiszolgáló URL", "Browse_Files": "Fájlok tallózása", "Browser_does_not_support_audio_element": "A böngészője nem támogatja az „audio” elemet.", + "Call_number_enterprise_only": "Szám hívása (csak vállalati kiadás)", "Browser_does_not_support_video_element": "A böngészője nem támogatja a „video” elemet.", "Browser_does_not_support_recording_video": "A böngészője nem támogatja a videó rögzítését", "Bugsnag_api_key": "Bugsnag API-kulcs", @@ -790,7 +791,6 @@ "Call_provider": "Hívásszolgáltató", "Call_Already_Ended": "A hívás már befejeződött", "Call_number": "Szám hívása", - "Call_number_enterprise_only": "Szám hívása (csak vállalati kiadás)", "call-management": "Híváskezelés", "call-management_description": "Jogosultság egy értekezlet kezdéséhez", "Call_ongoing": "Hívás folyamatban", @@ -1732,11 +1732,15 @@ "Email_Notifications_Change_Disabled": "A Rocket.Chat adminisztrátora letiltotta az e-mail-értesítéseket", "Email_or_username": "E-mail-cím vagy felhasználónév", "Email_Placeholder": "Adja meg az e-mail-címét…", + "Enterprise_capabilities": "Vállalati képességek", "Email_Placeholder_any": "Adjon meg e-mail-címeket…", "email_plain_text_only": "Csak egyszerű szöveges e-mailek küldése", "email_style_description": "Egymásba ágyazott kiválasztók elkerülése", "email_style_label": "E-mail stílusa", + "Enterprise_Description": "A vállalati licenc kézi frissítése.", "Email_subject": "E-mail tárgya", + "Enterprise_License": "Vállalati licenc", + "Enterprise_License_Description": "Ha a munkaterülete regisztrálva van és a Rocket.Chat felhője biztosítja a licencet, akkor itt nem kell kézzel frissítenie a licencet.", "Email_verified": "E-mail ellenőrizve", "Email_sent": "E-mail elküldve", "Emoji": "Emodzsi", @@ -1794,11 +1798,6 @@ "Enter_Normal": "Normál mód (küldés az Enter billentyűvel)", "Enter_to": "Belépés ide:", "Enter_your_E2E_password": "A végpontok közötti titkosítási jelszó megadása", - "Enterprise": "Vállalati", - "Enterprise_capabilities": "Vállalati képességek", - "Enterprise_Description": "A vállalati licenc kézi frissítése.", - "Enterprise_License": "Vállalati licenc", - "Enterprise_License_Description": "Ha a munkaterülete regisztrálva van és a Rocket.Chat felhője biztosítja a licencet, akkor itt nem kell kézzel frissítenie a licencet.", "Entertainment": "Szórakozás", "Error": "Hiba", "Error_something_went_wrong": "Hoppá! Valami elromlott. Töltse újra az oldalt, vagy vegye fel a kapcsolatot egy adminisztrátorral.", @@ -1870,6 +1869,7 @@ "error-invalid-email-address": "Érvénytelen e-mail-cím", "error-invalid-email-inbox": "Érvénytelen beérkező levelek mappa", "error-email-inbox-not-found": "A beérkező levelek mappa nem található", + "error-this-is-an-ee-feature": "Ez egy vállalati kiadási funkció", "error-invalid-file-height": "Érvénytelen fájlmagasság", "error-invalid-file-type": "Érvénytelen fájltípus", "error-invalid-file-width": "Érvénytelen fájlszélesség", @@ -1942,7 +1942,6 @@ "error-tags-must-be-assigned-before-closing-chat": "Címkéket kell hozzárendelni a csevegés lezárása előtt", "error-the-field-is-required": "A(z) {{field}} mező kötelező.", "error-this-is-not-a-livechat-room": "Ez nem összcsatornás szoba", - "error-this-is-an-ee-feature": "Ez egy vállalati kiadási funkció", "error-token-already-exists": "Már létezik ilyen nevű token", "error-token-does-not-exists": "A token nem létezik", "error-too-many-requests": "Hiba, túl sok kérés. Lassítson. Várnia kell {{seconds}} másodpercet, mielőtt újra próbálkozna.", @@ -2132,10 +2131,12 @@ "FileUpload_S3_BucketURL": "Gyűjtő URL", "FileUpload_S3_CDN": "CDN-tartomány a letöltésekhez", "FileUpload_S3_ForcePathStyle": "Útvonal stílusának kényszerítése", + "Google_Meet_Enterprise_only": "Google Meet (csak vállalati)", "FileUpload_S3_Proxy_Avatars": "Proxyavatarok", "FileUpload_S3_Proxy_Avatars_Description": "Proxyavatar fájlátvitelek a kiszolgálón keresztül az eszköz URL-jének közvetlen elérése helyett", "FileUpload_S3_Proxy_Uploads": "Proxyfeltöltések", "FileUpload_S3_Proxy_Uploads_Description": "Proxyfeltöltés fájlátvitelek a kiszolgálón keresztül az eszköz URL-jének közvetlen elérése helyett", + "Hold_Call_EE_only": "Tartott hívás (csak vállalati kiadás)", "FileUpload_S3_Region": "Régió", "FileUpload_S3_SignatureVersion": "Aláírás verziója", "FileUpload_S3_URLExpiryTimeSpan": "URL-ek lejárati időtartama", @@ -2190,6 +2191,7 @@ "Forgot_Password_Email": "Kattintson ide a jelszava visszaállításához.", "Forgot_Password_Email_Subject": "[Site_Name] – jelszó-helyreállítás", "Forgot_password_section": "Elfelejtett jelszó", + "Hold_EE_only": "Tartás (csak vállalati kiadás)", "Format": "Formátum", "Forward": "Továbbítás", "Forward_chat": "Csevegés továbbítása", @@ -2233,10 +2235,8 @@ "Global_purge_override_warning": "Globális megőrzési házirend van érvényben. Ha kikapcsolja a „Globális megőrzési házirend felülbírálása” beállítást, akkor csak a globális házirendnél szigorúbb házirendet alkalmazhat.", "Global_Search": "Globális keresés", "Go_to_your_workspace": "Ugrás a munkaterületére", - "Google_Meet_Enterprise_only": "Google Meet (csak vállalati)", "Google_Play": "Google Play", "Hold_Call": "Tartott hívás", - "Hold_Call_EE_only": "Tartott hívás (csak vállalati kiadás)", "GoogleCloudStorage": "Google-felhőtárhely", "GoogleNaturalLanguage_ServiceAccount_Description": "A szolgáltatás fiókkulcsának JSON-fájlja. További információk találhatók [itt](https://cloud.google.com/natural-language/docs/common/auth#set_up_a_service_account)", "GoogleTagManager_id": "Google-címkekezelő azonosítója", @@ -2288,7 +2288,6 @@ "History": "Előzmények", "Hold_Time": "Tartási idő", "Hold": "Tartás", - "Hold_EE_only": "Tartás (csak vállalati kiadás)", "Home": "Kezdőlap", "Homepage": "Honlap", "Host": "Kiszolgáló", @@ -2657,7 +2656,6 @@ "LDAP_DataSync_Roles": "Szerepek szinkronizálása", "LDAP_DataSync_Channels": "Csatornák szinkronizálása", "LDAP_DataSync_Teams": "Csapatok szinkronizálása", - "LDAP_Enterprise": "Vállalati", "LDAP_DataSync_BackgroundSync": "Háttérben történő szinkronizálás", "LDAP_Server_Type": "Kiszolgáló típusa", "LDAP_Server_Type_AD": "Active Directory", @@ -2911,15 +2909,27 @@ "Load_Rotation": "Forgatás betöltése", "Loading": "Betöltés", "Loading_more_from_history": "Továbbiak betöltése az előzményekből", + "marketplace_featured_section_community_featured": "Kiemelt közösségi alkalmazások", "Loading_suggestion": "Javaslatok betöltése", + "marketplace_featured_section_community_supported": "Közösségi támogatású alkalmazások", "Loading...": "Betöltés…", + "marketplace_featured_section_enterprise": "Kiemelt vállalati alkalmazások", + "marketplace_featured_section_featured": "Kiemelt alkalmazások", + "marketplace_featured_section_most_popular": "Legnépszerűbb alkalmazások", "Local_Domains": "Helyi tartományok", + "marketplace_featured_section_new_arrivals": "Újonnan érkezettek", "Local_Password": "Helyi jelszó", + "marketplace_featured_section_popular_this_month": "Ebben a hónapban népszerű alkalmazások", "Local_Time": "Helyi idő", + "marketplace_featured_section_recommended": "Ajánlott alkalmazások", "Local_Timezone": "Helyi időzóna", + "marketplace_featured_section_social": "Közösségi alkalmazások", "Local_Time_time": "Helyi idő: {{time}}", + "marketplace_featured_section_trending": "Felkapott alkalmazások", "Localization": "Honosítás", "Location": "Hely", + "marketplace_featured_section_omnichannel": "Összcsatornás alkalmazások", + "marketplace_featured_section_video_conferencing": "Videokonferencia alkalmazások", "Log_Exceptions_to_Channel": "Kivételek naplózása egy csatornába", "Log_Exceptions_to_Channel_Description": "Egy csatorna, amely az összes elfogott kivételt megkapja. Hagyja üresen a kivételek figyelmen kívül hagyásához.", "Log_File": "Fájl és sor megjelenítése", @@ -3053,18 +3063,6 @@ "Marketplace_app_last_updated": "Utoljára frissítve: {{lastUpdated}}", "Marketplace_view_marketplace": "Piactér megtekintése", "Marketplace_error": "Nem lehet kapcsolódni az internetre, vagy a munkaterülete kapcsolat nélküli telepítésű lehet.", - "marketplace_featured_section_community_featured": "Kiemelt közösségi alkalmazások", - "marketplace_featured_section_community_supported": "Közösségi támogatású alkalmazások", - "marketplace_featured_section_enterprise": "Kiemelt vállalati alkalmazások", - "marketplace_featured_section_featured": "Kiemelt alkalmazások", - "marketplace_featured_section_most_popular": "Legnépszerűbb alkalmazások", - "marketplace_featured_section_new_arrivals": "Újonnan érkezettek", - "marketplace_featured_section_popular_this_month": "Ebben a hónapban népszerű alkalmazások", - "marketplace_featured_section_recommended": "Ajánlott alkalmazások", - "marketplace_featured_section_social": "Közösségi alkalmazások", - "marketplace_featured_section_trending": "Felkapott alkalmazások", - "marketplace_featured_section_omnichannel": "Összcsatornás alkalmazások", - "marketplace_featured_section_video_conferencing": "Videokonferencia alkalmazások", "MAU_value": "MAU {{value}}", "Max_length_is": "A legnagyobb hossz %s", "Max_number_incoming_livechats_displayed": "A várólistában megjelenített elemek legnagyobb száma", @@ -3172,6 +3170,7 @@ "Message_HideType_subscription_role_removed": "A „szerep többé nincs meghatározva” üzenetek elrejtése", "Message_HideType_uj": "A „felhasználó csatlakozott” üzenetek elrejtése", "Message_HideType_ujt": "A „felhasználó csatlakozott a csapathoz” üzenetek elrejtése", + "New_Call_Enterprise_Edition_Only": "Új hívás (csak vállalati kiadás)", "Message_HideType_ul": "A „felhasználó kilépett” üzenetek elrejtése", "Message_HideType_ult": "A „felhasználó elhagyta a csapatot” üzenetek elrejtése", "Message_HideType_user_added_room_to_team": "A „felhasználó hozzáadta a szobát a csapathoz” üzenetek elrejtése", @@ -3316,7 +3315,6 @@ "New_Application": "Új alkalmazás", "New_Business_Hour": "Új munkaidő", "New_Call": "Új hívás", - "New_Call_Enterprise_Edition_Only": "Új hívás (csak vállalati kiadás)", "New_chat_in_queue": "Új csevegés a várólistában", "New_chat_priority": "Prioritás megváltoztatva: {{user}} megváltoztatta a prioritást {{priority}} szintre", "New_chat_transfer": "Új csevegésátadás: {{transfer}}", @@ -3397,6 +3395,7 @@ "None": "Nincs", "Nonprofit": "Nonprofit", "Not_authorized": "Nincs felhatalmazva", + "Pexip_Enterprise_only": "Pexip (csak vállalati)", "Normal": "Normál", "Not_Available": "Nem érhető el", "Not_enough_data": "Nincs elég adat", @@ -3602,7 +3601,6 @@ "Permalink": "Állandó hivatkozás", "Permissions": "Jogosultságok", "Personal_Access_Tokens": "Személyes hozzáférési tokenek", - "Pexip_Enterprise_only": "Pexip (csak vállalati)", "Phone": "Telefon", "Phone_call": "Telefonhívás", "Phone_Number": "Telefonszám", @@ -4039,7 +4037,6 @@ "SAML_AuthnRequest_Template": "AuthN-kérés sablon", "SAML_AuthnRequest_Template_Description": "A következő változók érhetők el: \n- **\\_\\_newId\\_\\_**: véletlenszerűen előállított azonosító-karakterlánc. \n- **\\_\\_instant\\_\\_**: jelenlegi időbélyeg. \n- **\\_\\_callbackUrl\\_\\_**: a Rocket.Chat visszahívási URL-je. \n- **\\_\\_entryPoint\\_\\_**: az __egyéni belépési pont__ beállítás értéke. \n- **\\_\\_issuer\\_\\_**: az __egyéni kibocsátó__ beállítás értéke. \n- **\\_\\_identifierFormatTag\\_\\_**: a __NameID házirend sablon__ tartalma, ha érvényes __azonosítóformátum__ van beállítva. \n- **\\_\\_identifierFormat\\_\\_**: az __azonosítóformátum__ beállítás értéke. \n- **\\_\\_authnContextTag\\_\\_**: az {{AuthN-környezet sablon}} tartalma, ha érvényes __egyéni AuthN-környezet__ van beállítva. \n- **\\_\\_authnContextComparison\\_\\_**: az __AuthN-környezet összehasonlítása__ beállítás értéke. \n- **\\_\\_authnContext\\_\\_**: az __egyéni AuthN-környezet__ beállítás értéke.", "SAML_Connection": "Kapcsolat", - "SAML_Enterprise": "Vállalati", "SAML_General": "Általános", "SAML_Custom_Authn_Context": "Egyéni AuthN-környezet", "SAML_Custom_Authn_Context_Comparison": "AuthN-környezet összehasonlítása", @@ -4541,9 +4538,13 @@ "Teams_Search_teams": "Csapatok keresése", "Teams_New_Read_only_Label": "Csak olvasható", "Technology_Services": "Technológiai szolgáltatások", + "Upgrade_tab_connection_error_description": "Úgy tűnik, hogy nincs internetkapcsolata. Ez azért lehet, mert a munkaterülete egy teljesen biztonságos, légréses kiszolgálón van telepítve.", "Terms": "Feltételek", "Terms_of_use": "Használati feltételek", + "Upgrade_tab_connection_error_restore": "Állítsa vissza a kapcsolatot, hogy megtudja, milyen funkciókról maradt le.", "Test_Connection": "Kapcsolat tesztelése", + "Upgrade_tab_go_fully_featured": "Irány teljes értékűvé", + "Upgrade_tab_trial_guide": "Próba útmutató", "Test_Desktop_Notifications": "Asztali értesítések tesztelése", "Test_LDAP_Search": "LDAP-keresés tesztelése", "test-admin-options": "Beállítások tesztelése az adminisztrátori panelen", @@ -4711,7 +4712,6 @@ "Transcript_message": "Az átirattal kapcsolatos kérdezéskor megjelenítendő üzenet", "Transcript_of_your_livechat_conversation": "Az összcsatornás beszélgetésének átirata.", "Transcript_Request": "Átírási kérés", - "onboarding.form.registeredServerForm.continueStandalone": "Folytatás egyedülállóként", "transfer-livechat-guest": "Élő csevegés vendégeinek átadása", "transfer-livechat-guest_description": "Jogosultság az élő csevegés vendégeinek átadásához", "Transferred": "Átadva", @@ -4822,10 +4822,6 @@ "Update_to_version": "Frissítés a(z) {{version}} verzióra", "Update_your_RocketChat": "A Rocket.Chat frissítése", "Updated_at": "Frissítve", - "Upgrade_tab_connection_error_description": "Úgy tűnik, hogy nincs internetkapcsolata. Ez azért lehet, mert a munkaterülete egy teljesen biztonságos, légréses kiszolgálón van telepítve.", - "Upgrade_tab_connection_error_restore": "Állítsa vissza a kapcsolatot, hogy megtudja, milyen funkciókról maradt le.", - "Upgrade_tab_go_fully_featured": "Irány teljes értékűvé", - "Upgrade_tab_trial_guide": "Próba útmutató", "Upgrade_tab_upgrade_your_plan": "Előfizetéses csomag frissítése", "Upload": "Feltöltés", "Uploads": "Feltöltések", @@ -5073,6 +5069,7 @@ "view-l-room": "Összcsatornás szobák megtekintése", "view-l-room_description": "Jogosultság az összcsatornás szobák megtekintéséhez", "view-livechat-analytics": "Összcsatornás elemzések megtekintése", + "onboarding.page.awaitingConfirmation.subtitle": "Egy megerősítő hivatkozást tartalmazó levelet küldtünk Önnek a(z) {{emailAddress}} e-mail-címre. Ellenőrizze, hogy az alábbi biztonsági kód megegyezik-e azzal, amit e-mailben kapott.", "view-livechat-analytics_description": "Jogosultság az élő csevegés elemzéseinek megtekintéséhez", "view-livechat-appearance": "Összcsatorna megjelenésének megtekintése", "view-livechat-appearance_description": "Jogosultság az élő csevegés megjelenésének megtekintéséhez", @@ -5353,81 +5350,13 @@ "registration.component.form.invalidConfirmPass": "A két jelszó nem eggyezik", "registration.component.form.confirmPassword": "Erősítse meg a jelszavát", "registration.component.form.sendConfirmationEmail": "Megerősítő email elküldése", - "onboarding.component.form.requiredField": "Ez a mező kötelező", - "onboarding.component.form.steps": "{{currentStep}} / {{stepCount}} lépés", - "onboarding.component.form.action.back": "Vissza", - "onboarding.component.form.action.next": "Következő", - "onboarding.component.form.action.skip": "Lépés kihagyása", - "onboarding.component.form.action.register": "Regisztráció", - "onboarding.component.form.action.confirm": "Megerősítés", - "onboarding.component.form.termsAndConditions": "Elfogadom a <1>használati feltételeket és az <3>adatvédelmi irányelveket", - "onboarding.component.emailCodeFallback": "Nem kapott levelet? <1>Újraküldés vagy <3>e-mail-cím megváltoztatása", - "onboarding.page.form.title": "<1>Indítsuk el a munkaterületét", - "onboarding.page.awaitingConfirmation.title": "Megerősítésre vár", - "onboarding.page.awaitingConfirmation.subtitle": "Egy megerősítő hivatkozást tartalmazó levelet küldtünk Önnek a(z) {{emailAddress}} e-mail-címre. Ellenőrizze, hogy az alábbi biztonsági kód megegyezik-e azzal, amit e-mailben kapott.", - "onboarding.page.emailConfirmed.title": "E-mail-cím megerősítve!", - "onboarding.page.emailConfirmed.subtitle": "Visszatérhet a Rocket.Chat alkalmazásához – már elindítottuk a munkaterületét.", - "onboarding.page.checkYourEmail.title": "Nézze meg a leveleit", - "onboarding.page.checkYourEmail.subtitle": "A kérése sikeresen el lett küldve.<1>Nézze meg a beérkező levelek mappát a vállalati próbaverzió indításához.<1>A hivatkozás 30 percen belül lejár.", - "onboarding.page.confirmationProcess.title": "Megerősítés folyamatban", - "onboarding.page.cloudDescription.title": "Indítsuk el a munkaterületét és egy <1>14 napos próbaverziót", - "onboarding.page.cloudDescription.tryGold": "Próbálja ki a legjobb arany előfizetéses csomagunkat 14 napig ingyen", - "onboarding.page.cloudDescription.numberOfIntegrations": "1000 integráció", - "onboarding.page.cloudDescription.availability": "Magas rendelkezésre állás", - "onboarding.page.cloudDescription.auditing": "Üzenetauditálási panel / audit naplók", - "onboarding.page.cloudDescription.engagement": "Részvételi vezérlőpult", - "onboarding.page.cloudDescription.ldap": "Javított LDAP-szinkronizáció", - "onboarding.page.cloudDescription.omnichannel": "Prémium összcsatorna", - "onboarding.page.cloudDescription.sla": "SLA: prémium", - "onboarding.page.cloudDescription.push": "Biztonságossá tett leküldéses értesítések", - "onboarding.page.cloudDescription.goldIncludes": "* Az arany előfizetéses csomag a más előfizetéses csomagokban lévő összes funkciót tartalmazza", - "onboarding.page.alreadyHaveAccount": "Már van fiókja? <1>Munkaterületek kezelése.", - "onboarding.page.invalidLink.title": "A hivatkozása többé nem érvényes", - "onboarding.page.invalidLink.content": "Úgy tűnik, hogy már használta a meghívási hivatkozást. Csak egyszeri bejelentkezéshez lett előállítva. Kérjen egy újat, hogy csatlakozhasson a munkaterületéhez.", - "onboarding.page.invalidLink.button.text": "Új hivatkozás kérése", - "onboarding.page.requestTrial.title": "<1>30 napos próbaverzió kérése", - "onboarding.page.requestTrial.subtitle": "Próbálja ki a legjobb vállalati kiadású előfizetéses csomagunkat 30 napig ingyen", - "onboarding.page.magicLinkEmail.title": "Elküldünk Önnek egy bejelentkezési hivatkozást e-mailben", - "onboarding.page.magicLinkEmail.subtitle": "Kattintson a most elküldött levélben lévő hivatkozásra, hogy bejelentkezhessen a munkaterületére. <1>A hivatkozás 30 percen belül lejár.", - "onboarding.form.adminInfoForm.title": "Adminisztrátor-információk", - "onboarding.form.adminInfoForm.subtitle": "Erre azért van szükségünk, hogy létrehozzunk egy adminisztrátori profilt a munkaterületén belül", - "onboarding.form.adminInfoForm.fields.fullName.label": "Teljes név", - "onboarding.form.adminInfoForm.fields.fullName.placeholder": "Keresztnév és vezetéknév", - "onboarding.form.adminInfoForm.fields.username.label": "Felhasználónév", - "onboarding.form.adminInfoForm.fields.username.placeholder": "@username", - "onboarding.form.adminInfoForm.fields.email.label": "E-mail-cím", - "onboarding.form.adminInfoForm.fields.email.placeholder": "E-mail-cím", - "onboarding.form.adminInfoForm.fields.password.label": "Jelszó", - "onboarding.form.adminInfoForm.fields.password.placeholder": "Jelszó létrehozása", - "onboarding.form.adminInfoForm.fields.keepPosted.label": "Tájékoztassanak a Rocket.Chat frissítéseiről", - "onboarding.form.organizationInfoForm.title": "Szervezetinformációk", - "onboarding.form.organizationInfoForm.subtitle": "Legyen türelemmel. Ezek az információk segítenek nekünk személyre szabni a munkaterületét.", - "onboarding.form.organizationInfoForm.fields.organizationName.label": "Szervezet neve", - "onboarding.form.organizationInfoForm.fields.organizationName.placeholder": "Szervezet neve", - "onboarding.form.organizationInfoForm.fields.organizationType.label": "Szervezet típusa", - "onboarding.form.organizationInfoForm.fields.organizationType.placeholder": "Kiválasztás", - "onboarding.form.organizationInfoForm.fields.organizationIndustry.label": "Szervezet iparága", - "onboarding.form.organizationInfoForm.fields.organizationIndustry.placeholder": "Kiválasztás", - "onboarding.form.organizationInfoForm.fields.organizationSize.label": "Szervezet mérete", - "onboarding.form.organizationInfoForm.fields.organizationSize.placeholder": "Kiválasztás", - "onboarding.form.organizationInfoForm.fields.country.label": "Ország", - "onboarding.form.organizationInfoForm.fields.country.placeholder": "Kiválasztás", - "onboarding.form.registeredServerForm.title": "Kiszolgáló regisztrálása", - "onboarding.form.registeredServerForm.included.push": "Mobil leküldéses értesítések", - "onboarding.form.registeredServerForm.included.externalProviders": "Integráció külső szolgáltatókkal (WhatsApp, Facebook, Telegram, Twitter)", - "onboarding.form.registeredServerForm.included.apps": "Hozzáférés a piactér alkalmazásaihoz", - "onboarding.form.registeredServerForm.fields.accountEmail.inputLabel": "Felhős fiók e-mail-címe", - "onboarding.form.registeredServerForm.fields.accountEmail.inputPlaceholder": "Adja meg az e-mail-címét", - "onboarding.form.registeredServerForm.keepInformed": "Tájékoztassanak a hírekről és az eseményekről", - "onboarding.form.standaloneServerForm.title": "Egyedülálló kiszolgáló megerősítése", - "onboarding.form.standaloneServerForm.servicesUnavailable": "Néhány szolgáltatás nem lesz elérhető, vagy kézi beállítást igényel", - "onboarding.form.standaloneServerForm.publishOwnApp": "A leküldéses értesítések küldéséhez saját alkalmazást kell összeállítania és közzétennie a Google Play és az App Store áruházakban", - "onboarding.form.standaloneServerForm.manuallyIntegrate": "Kézzel kell integrálni a külső szolgáltatásokkal", "Something_Went_Wrong": "Valami elromlott", "Toolbox_room_actions": "Elsődleges szoba műveletei", "Theme_light": "Világos", "Theme_dark": "Sötét", "Join_your_team": "Csatlakozás csapathoz", "Create_an_account": "Fiók létrehozása", - "RegisterWorkspace_Features_Marketplace_Title": "Piactér" -} \ No newline at end of file + "RegisterWorkspace_Features_Marketplace_Title": "Piactér", + "UpgradeToGetMore_engagement-dashboard_Title": "Analitika", + "UpgradeToGetMore_auditing_Title": "Üzenet ellenőrzés" +} diff --git a/apps/meteor/packages/rocketchat-i18n/i18n/id.i18n.json b/apps/meteor/packages/rocketchat-i18n/i18n/id.i18n.json index 4f78b268bcc8..0a53b8066e5e 100644 --- a/apps/meteor/packages/rocketchat-i18n/i18n/id.i18n.json +++ b/apps/meteor/packages/rocketchat-i18n/i18n/id.i18n.json @@ -973,7 +973,6 @@ "Enter_name_here": "Masukkan nama di sini", "Enter_Normal": "Mode normal (kirim dengan Enter)", "Enter_to": "Masuk ke", - "Enterprise": "Perusahaan", "Entertainment": "Hiburan", "Error": "Kesalahan", "Error_404": "Kesalahan 404", @@ -2767,5 +2766,6 @@ "registration.component.form.reasonToJoin": "Alasan untuk bergabung", "registration.component.form.invalidConfirmPass": "Kata sandi konfirmasi tidak cocok dengan kata sandi utama", "registration.component.form.confirmPassword": "Konfirmasikan kata sandi anda", - "registration.component.form.sendConfirmationEmail": "Kirim email konfirmasi" + "registration.component.form.sendConfirmationEmail": "Kirim email konfirmasi", + "UpgradeToGetMore_engagement-dashboard_Title": "Analytics" } \ No newline at end of file diff --git a/apps/meteor/packages/rocketchat-i18n/i18n/it.i18n.json b/apps/meteor/packages/rocketchat-i18n/i18n/it.i18n.json index 498c3ea4b5fc..e1355c9e55fe 100644 --- a/apps/meteor/packages/rocketchat-i18n/i18n/it.i18n.json +++ b/apps/meteor/packages/rocketchat-i18n/i18n/it.i18n.json @@ -1020,7 +1020,6 @@ "Enter_name_here": "Inserisci il nome qui", "Enter_Normal": "Modalità normale (inviato con Invio)", "Enter_to": "Invio per", - "Enterprise": "impresa", "Entertainment": "Divertimento", "Error": "Errore", "Error_404": "Errore 404", @@ -2860,5 +2859,6 @@ "registration.component.form.reasonToJoin": "Motivo per partecipare", "registration.component.form.invalidConfirmPass": "La password di conferma non corrisponde con la password", "registration.component.form.confirmPassword": "Conferma la tua password", - "registration.component.form.sendConfirmationEmail": "Invia email di conferma" + "registration.component.form.sendConfirmationEmail": "Invia email di conferma", + "UpgradeToGetMore_engagement-dashboard_Title": "Analytics" } \ No newline at end of file diff --git a/apps/meteor/packages/rocketchat-i18n/i18n/ja.i18n.json b/apps/meteor/packages/rocketchat-i18n/i18n/ja.i18n.json index 31973b5da92a..5fac2ab6e26c 100644 --- a/apps/meteor/packages/rocketchat-i18n/i18n/ja.i18n.json +++ b/apps/meteor/packages/rocketchat-i18n/i18n/ja.i18n.json @@ -424,6 +424,7 @@ "App_author_homepage": "著者のホームページ", "App_Details": "アプリの詳細", "App_Information": "アプリ情報", + "Apps_context_enterprise": "エンタープライズ", "App_Installation": "アプリのインストール", "App_status_auto_enabled": "有効", "App_status_constructed": "構築済み", @@ -447,7 +448,6 @@ "Apply": "適用", "Apply_and_refresh_all_clients": "すべてのクライアントを適用して更新", "Apps": "アプリ", - "Apps_context_enterprise": "エンタープライズ", "Apps_context_installed": "インストール済み", "Apps_Engine_Version": "アプリエンジンのバージョン", "Apps_Essential_Alert": "このアプリは次のイベントに不可欠です:", @@ -1562,6 +1562,8 @@ "email_style_description": "ネストされたセレクターを回避", "email_style_label": "メールスタイル", "Email_subject": "メールの件名", + "Enterprise_License": "エンタープライズライセンス", + "Enterprise_License_Description": "ワークスペースが登録されており、ライセンスがRocket.Chat Cloudによって提供されている場合は、ここでライセンスを手動で更新する必要はありません。", "Email_verified": "メール確認済み", "Email_sent": "メール送信済み", "Emoji": "絵文字", @@ -1613,9 +1615,6 @@ "Enter_Normal": "通常モード(Enterで送信)", "Enter_to": "Enterキーで", "Enter_your_E2E_password": "E2Eパスワードを入力してください", - "Enterprise": "エンタープライズ", - "Enterprise_License": "エンタープライズライセンス", - "Enterprise_License_Description": "ワークスペースが登録されており、ライセンスがRocket.Chat Cloudによって提供されている場合は、ここでライセンスを手動で更新する必要はありません。", "Entertainment": "エンターテインメント", "Error": "エラー", "Error_404": "エラー404", @@ -2406,7 +2405,6 @@ "LDAP_DataSync_Roles": "ロールの同期", "LDAP_DataSync_Channels": "Channelsの同期", "LDAP_DataSync_Teams": "チームの同期", - "LDAP_Enterprise": "エンタープライズ", "LDAP_DataSync_BackgroundSync": "バックグラウンド同期", "LDAP_Server_Type": "サーバーの種類", "LDAP_Server_Type_AD": "Active Directory", @@ -3622,7 +3620,6 @@ "SAML_AuthnRequest_Template": "AuthnRequestテンプレート", "SAML_AuthnRequest_Template_Description": "次の変数を使用できます。 \n- **\\_\\_newId\\_\\_**:ランダムに生成されたID文字列 \n- **\\_\\_instant\\_\\_**:現在のタイムスタンプ \n- **\\_\\_callbackUrl\\_\\_**:Rocket.ChatコールバックURL \n- **\\_\\_entryPoint\\_\\_**:{{Custom Entry Point}}設定の値 \n- **\\_\\_issuer\\_\\_**:{{Custom Issuer}}設定の値 \n- **\\_\\_identifierFormatTag\\_\\_**:有効な{{Identifier Format}}が構成されている場合の{{NameID Policy Template}}の内容 \n- **\\_\\_identifierFormat\\_\\_**:{{Identifier Format}}設定の値 \n- **\\_\\_authnContextTag\\_\\_**:有効な{{Custom Authn Context}}が構成されている場合の {{AuthnContext Template}} の内容 \n- **\\_\\_authnContextComparison\\_\\_**:{{Authn Context Comparison}}設定の値 \n- **\\_\\_authnContext\\_\\_**:{{Custom Authn Context}}設定の値", "SAML_Connection": "接続", - "SAML_Enterprise": "エンタープライズ", "SAML_General": "一般", "SAML_Custom_Authn_Context": "カスタム認証コンテキスト", "SAML_Custom_Authn_Context_Comparison": "認証コンテキストの比較", @@ -4234,7 +4231,6 @@ "Transcript_message": "トランスクリプトについて質問するときに表示するメッセージ", "Transcript_of_your_livechat_conversation": "オムニチャネル会話のトランスクリプト。", "Transcript_Request": "トランスクリプト要求", - "onboarding.form.registeredServerForm.continueStandalone": "スタンドアロンとして続行", "transfer-livechat-guest": "ライブチャットゲストの転送", "transfer-livechat-guest_description": "ライブチャットゲストを転送する権限", "Transferred": "転送済み", @@ -4527,6 +4523,7 @@ "view-l-room": "オムニチャネルRoomの表示", "view-l-room_description": "オムニチャネルルームを表示する権限", "view-livechat-analytics": "オムニチャネル分析の表示", + "onboarding.page.awaitingConfirmation.subtitle": "確認用のリンクが含まれるメールを{{emailAddress}}に送信しました。以下のセキュリティコードとメールのセキュリティコードが一致していることを確認してください。", "view-livechat-analytics_description": "ライブチャットの分析を表示する権限", "view-livechat-appearance": "オムニチャネルデザインの表示", "view-livechat-appearance_description": "ライブチャットのデザインを表示する権限", @@ -4765,80 +4762,12 @@ "registration.component.form.confirmation": "確認", "registration.component.form.sendConfirmationEmail": "確認メールを送信", "registration.component.form.register": "登録", - "onboarding.component.form.requiredField": "このフィールドは必須です", - "onboarding.component.form.steps": "ステップ{{currentStep}}/{{stepCount}}", - "onboarding.component.form.action.back": "戻る", - "onboarding.component.form.action.next": "次へ", - "onboarding.component.form.action.skip": "このステップをスキップ", - "onboarding.component.form.action.register": "登録", - "onboarding.component.form.action.confirm": "確認", - "onboarding.component.form.termsAndConditions": "<1>使用と<3>プライバシーポリシーに同意します", - "onboarding.component.emailCodeFallback": "メールを受け取っていませんか?返信または <3>メールを変更してください", - "onboarding.page.form.title": "ワークスペースを<1>起動しましょう", - "onboarding.page.awaitingConfirmation.title": "確認を待っています", - "onboarding.page.awaitingConfirmation.subtitle": "確認用のリンクが含まれるメールを{{emailAddress}}に送信しました。以下のセキュリティコードとメールのセキュリティコードが一致していることを確認してください。", - "onboarding.page.emailConfirmed.title": "メールを確認しました!", - "onboarding.page.emailConfirmed.subtitle": "Rocket.Chatアプリケーションに戻ることができます。すでにワークスペースを起動しています。", - "onboarding.page.checkYourEmail.title": "メールのチェック", - "onboarding.page.checkYourEmail.subtitle": "要求が正常に送信されました。<1>受信トレイをチェックし、Enterprise試用版を起動してください。<1>リンクの有効期間は30分です。", - "onboarding.page.confirmationProcess.title": "確認中", - "onboarding.page.cloudDescription.title": "ワークスペースと<1>14日間の試用版を起動しましょう", - "onboarding.page.cloudDescription.tryGold": "14日間の最上位のGoldプランを無料でお試しください", - "onboarding.page.cloudDescription.numberOfIntegrations": "1,000件を統合", - "onboarding.page.cloudDescription.availability": "高可用性", - "onboarding.page.cloudDescription.auditing": "メッセージ監査パネル/監査ログ", - "onboarding.page.cloudDescription.engagement": "エンゲージメントダッシュボード", - "onboarding.page.cloudDescription.ldap": "LDAP拡張同期", - "onboarding.page.cloudDescription.omnichannel": "オムニチャネルプレミアム", - "onboarding.page.cloudDescription.sla": "SLA:プレミアム", - "onboarding.page.cloudDescription.push": "安全なプッシュ通知", - "onboarding.page.cloudDescription.goldIncludes": "*Goldプランには他のプランのすべての機能が含まれます", - "onboarding.page.alreadyHaveAccount": "アカウントをすでにお持ちの場合は、<1>ワークスペースを管理してください。", - "onboarding.page.invalidLink.title": "リンクが無効になりました", - "onboarding.page.invalidLink.content": "すでに招待リンクを使用しているようです。このリンクはシングルサインイン用に生成されます。ワークスペースに参加するための新しいサインインを要求してください。", - "onboarding.page.invalidLink.button.text": "新しいリンクを要求", - "onboarding.page.requestTrial.title": "<1>30日間の試用版の要求", - "onboarding.page.requestTrial.subtitle": "30日間の最上位のEnterprise Editionプランを無料でお試しください", - "onboarding.page.magicLinkEmail.title": "ログインリンクをメールで送信しました", - "onboarding.page.magicLinkEmail.subtitle": "送信されたメールのリンクをクリックし、ワークスペースにサインインしてください。 <1>リンクの有効期間は30分です。", - "onboarding.form.adminInfoForm.title": "管理者情報", - "onboarding.form.adminInfoForm.subtitle": "これはワークスペース内に管理プロファイルを作成するために必要です", - "onboarding.form.adminInfoForm.fields.fullName.label": "氏名", - "onboarding.form.adminInfoForm.fields.fullName.placeholder": "姓名", - "onboarding.form.adminInfoForm.fields.username.label": "ユーザー名", - "onboarding.form.adminInfoForm.fields.username.placeholder": "@ユーザー名", - "onboarding.form.adminInfoForm.fields.email.label": "メール", - "onboarding.form.adminInfoForm.fields.email.placeholder": "メール", - "onboarding.form.adminInfoForm.fields.password.label": "パスワード", - "onboarding.form.adminInfoForm.fields.password.placeholder": "パスワードを作成", - "onboarding.form.adminInfoForm.fields.keepPosted.label": "Rocket.Chatの更新に関する投稿を受け取る", - "onboarding.form.organizationInfoForm.title": "組織情報", - "onboarding.form.organizationInfoForm.subtitle": "しばらくお待ちください。この情報はワークスペースのパーソナライズに役立ちます", - "onboarding.form.organizationInfoForm.fields.organizationName.label": "組織名", - "onboarding.form.organizationInfoForm.fields.organizationName.placeholder": "組織名", - "onboarding.form.organizationInfoForm.fields.organizationType.label": "組織の種類", - "onboarding.form.organizationInfoForm.fields.organizationType.placeholder": "選択", - "onboarding.form.organizationInfoForm.fields.organizationIndustry.label": "組織の業種", - "onboarding.form.organizationInfoForm.fields.organizationIndustry.placeholder": "選択", - "onboarding.form.organizationInfoForm.fields.organizationSize.label": "組織の規模", - "onboarding.form.organizationInfoForm.fields.organizationSize.placeholder": "選択", - "onboarding.form.organizationInfoForm.fields.country.label": "国", - "onboarding.form.organizationInfoForm.fields.country.placeholder": "選択", - "onboarding.form.registeredServerForm.title": "サーバーの登録", - "onboarding.form.registeredServerForm.included.push": "モバイルプッシュ通知", - "onboarding.form.registeredServerForm.included.externalProviders": "外部プロバイダー(WhatsApp、Facebook、Telegram、Twitter)との統合", - "onboarding.form.registeredServerForm.included.apps": "マーケットプレイスアプリにアクセス", - "onboarding.form.registeredServerForm.fields.accountEmail.inputLabel": "クラウドアカウントメール", - "onboarding.form.registeredServerForm.fields.accountEmail.inputPlaceholder": "メールアドレスを入力してください", - "onboarding.form.registeredServerForm.keepInformed": "ニュースとイベントの情報を受け取る", - "onboarding.form.standaloneServerForm.title": "スタンドアロンサーバーの確認", - "onboarding.form.standaloneServerForm.servicesUnavailable": "一部のサービスは利用できないか、手動で設定する必要があります", - "onboarding.form.standaloneServerForm.publishOwnApp": "プッシュ通知を送信するには、独自のアプリをコンパイルしてGoogle PlayとApp Storeに公開する必要があります", - "onboarding.form.standaloneServerForm.manuallyIntegrate": "外部サービスと手動で統合する必要があります", "Awaiting_confirmation": "確認を待っています", "RegisterWorkspace_Features_MobileNotifications_Title": "モバイルプッシュ通知", "RegisterWorkspace_Features_Marketplace_Title": "マーケットプレイス", "RegisterWorkspace_Features_Omnichannel_Title": "オムニチャネル", "RegisterWorkspace_Setup_Label": "クラウドアカウントメール", - "cloud.RegisterWorkspace_Setup_Terms_Privacy": "<1>使用と<3>プライバシーポリシーに同意します" -} \ No newline at end of file + "cloud.RegisterWorkspace_Setup_Terms_Privacy": "<1>使用と<3>プライバシーポリシーに同意します", + "UpgradeToGetMore_engagement-dashboard_Title": "分析", + "UpgradeToGetMore_auditing_Title": "メッセージ監査" +} diff --git a/apps/meteor/packages/rocketchat-i18n/i18n/ka-GE.i18n.json b/apps/meteor/packages/rocketchat-i18n/i18n/ka-GE.i18n.json index 6dd72917fe9d..ce34a793ff46 100644 --- a/apps/meteor/packages/rocketchat-i18n/i18n/ka-GE.i18n.json +++ b/apps/meteor/packages/rocketchat-i18n/i18n/ka-GE.i18n.json @@ -1268,6 +1268,8 @@ "email_style_description": "ქვე სელექტორების უგულებელყოფა", "email_style_label": "ელ.ფოსტის სტილი", "Email_subject": "საგანი", + "Enterprise_License": "საწარმოოს ლიცენზია", + "Enterprise_License_Description": "თუ თქვენი სამუშაო ადგილი რეგისტრირებულია და ლიცენზირებულია Rocket.Chat Cloud–-ის მიერ , აქ ლიცენზიის ხელით განახლება არ დაგჭირდებათ.", "Email_verified": "ელ.ფოსტა დამოწმდა", "Emoji": "ემოჯი", "EmojiCustomFilesystem": "პერსონალური ემოჯი ფაილ-სისტემა", @@ -1304,8 +1306,6 @@ "Enter_Normal": "ნორმალური რეჟიმი", "Enter_to": "შესვლა", "Enter_your_E2E_password": "შეიყვანეთ თქვენი E2E პაროლი", - "Enterprise_License": "საწარმოოს ლიცენზია", - "Enterprise_License_Description": "თუ თქვენი სამუშაო ადგილი რეგისტრირებულია და ლიცენზირებულია Rocket.Chat Cloud–-ის მიერ , აქ ლიცენზიის ხელით განახლება არ დაგჭირდებათ.", "Entertainment": "გართობა", "Error": "შეცდომა", "Error_404": "შეცდომა: 404", @@ -3666,5 +3666,9 @@ "registration.component.form.reasonToJoin": "გაწევრიანების მიზეზი", "registration.component.form.invalidConfirmPass": "პაროლის დასტური არ შეესაბამება პაროლს", "registration.component.form.confirmPassword": "დაადასტურეთ თქვენი პაროლი", - "registration.component.form.sendConfirmationEmail": "დადასტურების ელ.ფოსტის გაგზავნა" + "registration.component.form.sendConfirmationEmail": "დადასტურების ელ.ფოსტის გაგზავნა", + "onboarding.component.form.action.pasteHere": "ჩასვით აქ ...", + "onboarding.form.registerOfflineForm.title": "ხელით დარეგისტრირება", + "UpgradeToGetMore_engagement-dashboard_Title": "ანალიტიკა", + "UpgradeToGetMore_auditing_Title": "შეტყობინებების შემოწმება" } \ No newline at end of file diff --git a/apps/meteor/packages/rocketchat-i18n/i18n/km.i18n.json b/apps/meteor/packages/rocketchat-i18n/i18n/km.i18n.json index 376c4f51610a..b2bd9ab7d4a9 100644 --- a/apps/meteor/packages/rocketchat-i18n/i18n/km.i18n.json +++ b/apps/meteor/packages/rocketchat-i18n/i18n/km.i18n.json @@ -1163,6 +1163,8 @@ "Email_Placeholder_any": "សូមបញ្ចូលអាសយដ្ឋានអ៊ីមែល ...", "email_style_label": "រចនាប័ទ្មអ៊ីម៉ែល", "Email_subject": "ប្រធានបទ", + "Enterprise_License": "អាជ្ញាប័ណ្ណសហគ្រាស", + "Enterprise_License_Description": "ប្រសិនបើកន្លែងធ្វើការរបស់អ្នកត្រូវបានចុះឈ្មោះហើយអាជ្ញាប័ណ្ណត្រូវបានផ្តល់ដោយ Rocket.Chat Cloud អ្នកមិនចាំបាច់ធ្វើបច្ចុប្បន្នភាពអាជ្ញាប័ណ្ណដោយដៃនៅទីនេះទេ។", "Email_verified": "អ៊ីម៉ែល​បញ្ជាក់", "Emoji": "សញ្ញា​អារម្មណ៍", "EmojiCustomFilesystem": "ប្រព័ន្ធឯកសារសញ្ញាអារម្មណ៍ផ្ទាល់ខ្លួន", @@ -1192,9 +1194,6 @@ "Enter_Normal": "របៀបធម្មតា (ផ្ញើជាមួយបញ្ចូល)", "Enter_to": "បញ្ចូល", "Enter_your_E2E_password": "បញ្ចូលពាក្យសម្ងាត់ E2E របស់អ្នក", - "Enterprise": "សហគ្រាស", - "Enterprise_License": "អាជ្ញាប័ណ្ណសហគ្រាស", - "Enterprise_License_Description": "ប្រសិនបើកន្លែងធ្វើការរបស់អ្នកត្រូវបានចុះឈ្មោះហើយអាជ្ញាប័ណ្ណត្រូវបានផ្តល់ដោយ Rocket.Chat Cloud អ្នកមិនចាំបាច់ធ្វើបច្ចុប្បន្នភាពអាជ្ញាប័ណ្ណដោយដៃនៅទីនេះទេ។", "Entertainment": "ការកំសាន្ត", "Error": "កំហុសក្នុងការ", "Error_404": "កំហុស: 404", @@ -3112,5 +3111,8 @@ "registration.component.form.reasonToJoin": "ហេតុផលដើម្បីចូលរួម", "registration.component.form.invalidConfirmPass": "ពាក្យ​សម្ងាត់​បញ្ជាក់​មិន​ដូច​ពាក្យ​សម្ងាត់​បាន​បញ្ចូល​", "registration.component.form.confirmPassword": "បញ្ជាក់​ពាក្យ​សម្ងាត់", - "registration.component.form.sendConfirmationEmail": "ផ្ញើរអ៊ីម៉ែល​បញ្ជាក់" + "registration.component.form.sendConfirmationEmail": "ផ្ញើរអ៊ីម៉ែល​បញ្ជាក់", + "onboarding.form.registerOfflineForm.title": "ចុះឈ្មោះដោយដៃ", + "UpgradeToGetMore_engagement-dashboard_Title": "វិភាគ", + "UpgradeToGetMore_auditing_Title": "សវនកម្មសារ" } \ No newline at end of file diff --git a/apps/meteor/packages/rocketchat-i18n/i18n/ko.i18n.json b/apps/meteor/packages/rocketchat-i18n/i18n/ko.i18n.json index 2574c0b288b8..7d3c83aed552 100644 --- a/apps/meteor/packages/rocketchat-i18n/i18n/ko.i18n.json +++ b/apps/meteor/packages/rocketchat-i18n/i18n/ko.i18n.json @@ -1393,6 +1393,8 @@ "email_style_description": "중첩된 선택 사용 안 함", "email_style_label": "이메일 스타일", "Email_subject": "제목", + "Enterprise_License": "기업 라이센스", + "Enterprise_License_Description": "WorkSpace가 등록되어 있고, Rocket.Chat Cloud에서 제공한 라이선스일 경우, 여기에 라이센스를 수동으로 업데이트 할 필요가 없습니다.", "Email_verified": "이메일 확인", "Emoji": "Emoji", "EmojiCustomFilesystem": "사용자 정의 이모티콘 파일 시스템", @@ -1429,9 +1431,6 @@ "Enter_Normal": "일반 모드 (Enter 키와 함께 전송)", "Enter_to": "입력:", "Enter_your_E2E_password": "E2E 비밀번호를 입력하세요.", - "Enterprise": "기업", - "Enterprise_License": "기업 라이센스", - "Enterprise_License_Description": "WorkSpace가 등록되어 있고, Rocket.Chat Cloud에서 제공한 라이선스일 경우, 여기에 라이센스를 수동으로 업데이트 할 필요가 없습니다.", "Entertainment": "엔터테인먼트", "Error": "오류", "Error_404": "오류: 404", @@ -4026,5 +4025,9 @@ "registration.component.form.reasonToJoin": "가입 이유", "registration.component.form.invalidConfirmPass": "비밀번호가 일치하지 않습니다.", "registration.component.form.confirmPassword": "비밀번호를 확인하세요", - "registration.component.form.sendConfirmationEmail": "확인 메일 보내기" + "registration.component.form.sendConfirmationEmail": "확인 메일 보내기", + "onboarding.component.form.action.pasteHere": "여기에 붙여 넣기 ...", + "onboarding.form.registerOfflineForm.title": "오프라인 등록", + "UpgradeToGetMore_engagement-dashboard_Title": "분석(에널리틱스)", + "UpgradeToGetMore_auditing_Title": "메시지 감사" } \ No newline at end of file diff --git a/apps/meteor/packages/rocketchat-i18n/i18n/ku.i18n.json b/apps/meteor/packages/rocketchat-i18n/i18n/ku.i18n.json index 8441a8a2fda8..16d158296baf 100644 --- a/apps/meteor/packages/rocketchat-i18n/i18n/ku.i18n.json +++ b/apps/meteor/packages/rocketchat-i18n/i18n/ku.i18n.json @@ -972,7 +972,6 @@ "Enter_name_here": "name li vir binivîse", "Enter_Normal": "Modeya Normal (Ji Bi Enter bişîne)", "Enter_to": "binivîse", - "Enterprise": "Enterprise", "Entertainment": "Axaftin", "Error": "Şaşî", "Error_404": "Çewt: 404", @@ -2747,5 +2746,6 @@ "registration.component.form.reasonToJoin": "Reason to join", "registration.component.form.invalidConfirmPass": "دووبارەکراوەی تێپەڕەوشە یەکناگرێتەوە لەگەڵ تێپەڕەوشە", "registration.component.form.confirmPassword": "تێپەڕەوشەکەت پشتڕاستکەوە", - "registration.component.form.sendConfirmationEmail": "ئیمەیڵی پشتڕاستکردنەوە بنێرە" + "registration.component.form.sendConfirmationEmail": "ئیمەیڵی پشتڕاستکردنەوە بنێرە", + "UpgradeToGetMore_engagement-dashboard_Title": "analytics" } \ No newline at end of file diff --git a/apps/meteor/packages/rocketchat-i18n/i18n/lo.i18n.json b/apps/meteor/packages/rocketchat-i18n/i18n/lo.i18n.json index 81c5ababade7..669b16aafcb0 100644 --- a/apps/meteor/packages/rocketchat-i18n/i18n/lo.i18n.json +++ b/apps/meteor/packages/rocketchat-i18n/i18n/lo.i18n.json @@ -974,6 +974,8 @@ "Email_Placeholder": "ກະລຸນາໃສ່ທີ່ຢູ່ອີເມວຂອງທ່ານ ...", "Email_Placeholder_any": "ກະລຸນາໃສ່ທີ່ຢູ່ອີເມວ ...", "Email_subject": "Subject", + "Enterprise_License": "ສິດໃຊ້ງານລະດັບອົງກອນ", + "Enterprise_License_Description": "ຫາກພື້ນທີ່ເຮັດວຽກຂອງທ່ານລົງທະບຽນ ແລະ ໄດ້ຮັບອະນຸຍາດຈາກ Rocket.Chat Cloud ທ່ານບໍ່ຈໍາເປັນຕ້ອງອັບເດດສິຂະສິດການນໍາໃຊ້ເອງຢູ່ບ່ອນນີ້.", "Email_verified": "Email ກວດສອບ", "Emoji": "Emoji", "EmojiCustomFilesystem": "Custom Emoji Filesystem", @@ -998,9 +1000,6 @@ "Enter_name_here": "ກະລຸນາໃສ່ຊື່ນີ້", "Enter_Normal": "ໂຫມດປະກະຕິ (ສົ່ງກັບ Enter)", "Enter_to": "ກະລຸນາໃສ່ທີ່", - "Enterprise": "Enterprise", - "Enterprise_License": "ສິດໃຊ້ງານລະດັບອົງກອນ", - "Enterprise_License_Description": "ຫາກພື້ນທີ່ເຮັດວຽກຂອງທ່ານລົງທະບຽນ ແລະ ໄດ້ຮັບອະນຸຍາດຈາກ Rocket.Chat Cloud ທ່ານບໍ່ຈໍາເປັນຕ້ອງອັບເດດສິຂະສິດການນໍາໃຊ້ເອງຢູ່ບ່ອນນີ້.", "Entertainment": "ຄວາມບັນເທີງ", "Error": "Error", "Error_404": "ຂໍ້ຜິດພາດ: 404", @@ -2795,5 +2794,6 @@ "registration.component.form.reasonToJoin": "ເຫດຜົນທີ່ຈະເຂົ້າຮ່ວມ", "registration.component.form.invalidConfirmPass": "ການຢືນຢັນລະຫັດຜ່ານບໍ່ກົງກັບລະຫັດຜ່ານ", "registration.component.form.confirmPassword": "ຢືນຢັນລະຫັດຜ່ານຂອງທ່ານ", - "registration.component.form.sendConfirmationEmail": "ສົ່ງອີເມວການຢືນຢັນ" + "registration.component.form.sendConfirmationEmail": "ສົ່ງອີເມວການຢືນຢັນ", + "UpgradeToGetMore_engagement-dashboard_Title": "ການວິເຄາະ" } \ No newline at end of file diff --git a/apps/meteor/packages/rocketchat-i18n/i18n/lt.i18n.json b/apps/meteor/packages/rocketchat-i18n/i18n/lt.i18n.json index 8d3e1c746860..eb49bf3c63de 100644 --- a/apps/meteor/packages/rocketchat-i18n/i18n/lt.i18n.json +++ b/apps/meteor/packages/rocketchat-i18n/i18n/lt.i18n.json @@ -1028,7 +1028,6 @@ "Enter_name_here": "Įveskite pavadinimą čia", "Enter_Normal": "Normalus režimas (siųsti su \"Enter\")", "Enter_to": "Įeiti į", - "Enterprise": "Įmonė", "Entertainment": "Pramogos", "Error": "Klaida", "Error_404": "Klaida: 404", @@ -2812,5 +2811,6 @@ "registration.component.form.reasonToJoin": "Priežastys prisijungti", "registration.component.form.invalidConfirmPass": "Slaptažodžio patvirtinimas nesutampa su slaptažodžiu", "registration.component.form.confirmPassword": "Patvirtinkite savo slaptažodį", - "registration.component.form.sendConfirmationEmail": "Siųsti patvirtinimo el. Laišką" + "registration.component.form.sendConfirmationEmail": "Siųsti patvirtinimo el. Laišką", + "UpgradeToGetMore_engagement-dashboard_Title": "\"Analytics\"" } \ No newline at end of file diff --git a/apps/meteor/packages/rocketchat-i18n/i18n/lv.i18n.json b/apps/meteor/packages/rocketchat-i18n/i18n/lv.i18n.json index e658e85d3b05..cadd9fce67fd 100644 --- a/apps/meteor/packages/rocketchat-i18n/i18n/lv.i18n.json +++ b/apps/meteor/packages/rocketchat-i18n/i18n/lv.i18n.json @@ -962,6 +962,8 @@ "Email_Placeholder": "Lūdzu ievadiet savu e-pasta adresi...", "Email_Placeholder_any": "Lūdzu, ievadiet e-pasta adreses ...", "Email_subject": "Temats", + "Enterprise_License": "Uzņēmuma licence", + "Enterprise_License_Description": "Ja jūsu darbvieta ir reģistrēta un licenci nodrošina Rocket.Chat Mākulis, jums šeit licence nav manuāli jāaktualalizē.", "Email_verified": "E-pasts ir apstiprināts", "Emoji": "Emoji", "EmojiCustomFilesystem": "Pielāgota Emoji failu sistēma", @@ -986,9 +988,6 @@ "Enter_name_here": "Ievadiet nosaukumu šeit", "Enter_Normal": "Normāls režīms (nosūtīt ar 'Enter')", "Enter_to": "Enter uz", - "Enterprise": "Uzņēmums", - "Enterprise_License": "Uzņēmuma licence", - "Enterprise_License_Description": "Ja jūsu darbvieta ir reģistrēta un licenci nodrošina Rocket.Chat Mākulis, jums šeit licence nav manuāli jāaktualalizē.", "Entertainment": "Izklaide", "Error": "Kļūda", "Error_404": "Kļūda: 404", @@ -2753,5 +2752,6 @@ "registration.component.form.reasonToJoin": "Iemesls pievienoties", "registration.component.form.invalidConfirmPass": "Paroles apstiprinājums neatbilst parolei", "registration.component.form.confirmPassword": "Apstipriniet savu paroli", - "registration.component.form.sendConfirmationEmail": "Nosūtīt apstiprinājuma e-pastu" + "registration.component.form.sendConfirmationEmail": "Nosūtīt apstiprinājuma e-pastu", + "UpgradeToGetMore_engagement-dashboard_Title": "Analītika" } \ No newline at end of file diff --git a/apps/meteor/packages/rocketchat-i18n/i18n/mn.i18n.json b/apps/meteor/packages/rocketchat-i18n/i18n/mn.i18n.json index c7959fc2a85c..ae6c84d9dc8c 100644 --- a/apps/meteor/packages/rocketchat-i18n/i18n/mn.i18n.json +++ b/apps/meteor/packages/rocketchat-i18n/i18n/mn.i18n.json @@ -972,7 +972,6 @@ "Enter_name_here": "Нэрийг оруулна уу", "Enter_Normal": "Хэвийн горим (Enter ашиглан илгээ)", "Enter_to": "Руу оруулна уу", - "Enterprise": "Аж ахуйн нэгж", "Entertainment": "Үзвэр үйлчилгээ", "Error": "Алдаа", "Error_404": "Алдаа: 404", @@ -2746,5 +2745,6 @@ "registration.component.form.reasonToJoin": "Яагаад болохгүй гэж?", "registration.component.form.invalidConfirmPass": "Нууц үг баталгаажуулалт нь нууц үгтэй таарахгүй байна", "registration.component.form.confirmPassword": "Нууц үгээ батлах", - "registration.component.form.sendConfirmationEmail": "Баталгаажуулах имэйл илгээх" + "registration.component.form.sendConfirmationEmail": "Баталгаажуулах имэйл илгээх", + "UpgradeToGetMore_engagement-dashboard_Title": "Аналитик" } \ No newline at end of file diff --git a/apps/meteor/packages/rocketchat-i18n/i18n/ms-MY.i18n.json b/apps/meteor/packages/rocketchat-i18n/i18n/ms-MY.i18n.json index dea066ead6fd..a29f217b19f9 100644 --- a/apps/meteor/packages/rocketchat-i18n/i18n/ms-MY.i18n.json +++ b/apps/meteor/packages/rocketchat-i18n/i18n/ms-MY.i18n.json @@ -973,7 +973,6 @@ "Enter_name_here": "Masukkan nama di sini", "Enter_Normal": "Mod biasa (hantar dengan Enter)", "Enter_to": "Masuk ke", - "Enterprise": "Enterprise", "Entertainment": "Hiburan", "Error": "ralat", "Error_404": "Ralat: 404", @@ -2763,5 +2762,6 @@ "registration.component.form.reasonToJoin": "Sebab untuk Bergabung", "registration.component.form.invalidConfirmPass": "Pengesahan kata laluan tidak sepadan dengan kata laluan", "registration.component.form.confirmPassword": "Sahkan kata laluan anda", - "registration.component.form.sendConfirmationEmail": "Hantar e-mel pengesahan" + "registration.component.form.sendConfirmationEmail": "Hantar e-mel pengesahan", + "UpgradeToGetMore_engagement-dashboard_Title": "Analisis" } \ No newline at end of file diff --git a/apps/meteor/packages/rocketchat-i18n/i18n/nl.i18n.json b/apps/meteor/packages/rocketchat-i18n/i18n/nl.i18n.json index eff6811050c1..0a9deaf7bf26 100644 --- a/apps/meteor/packages/rocketchat-i18n/i18n/nl.i18n.json +++ b/apps/meteor/packages/rocketchat-i18n/i18n/nl.i18n.json @@ -426,6 +426,7 @@ "App_author_homepage": "auteur homepage", "App_Details": "Applicatie details", "App_Information": "App-informatie", + "Apps_context_enterprise": "Onderneming", "App_Installation": "App-installatie", "App_status_auto_enabled": "Ingeschakeld", "App_status_constructed": "Gebouwd", @@ -450,7 +451,6 @@ "Apply": "Toepassen", "Apply_and_refresh_all_clients": "Toepassen en alle klanten opnieuw laden", "Apps": "Apps", - "Apps_context_enterprise": "Onderneming", "Apps_context_installed": "Geïnstalleerd", "Apps_Engine_Version": "Apps Engine-versie", "Apps_Essential_Alert": "Deze app is essentieel voor de volgende evenementen:", @@ -1575,6 +1575,8 @@ "email_style_description": "Vermijd geneste selectors", "email_style_label": "E-mailstijl", "Email_subject": "E-mail onderwerp", + "Enterprise_License": "Enterprise-licentie", + "Enterprise_License_Description": "Als uw werkruimte geregistreerd is en de licentie verstrekt wordt door Rocket.Chat Cloud, hoeft u de licentie hier niet handmatig bij te werken.", "Email_verified": "E-mailadres geverifieerd", "Email_sent": "E-mail verzonden", "Emoji": "Emoji", @@ -1626,9 +1628,6 @@ "Enter_Normal": "Normale modus (verzenden met Enter)", "Enter_to": "Enter om", "Enter_your_E2E_password": "Voer uw E2E-wachtwoord in", - "Enterprise": "Onderneming", - "Enterprise_License": "Enterprise-licentie", - "Enterprise_License_Description": "Als uw werkruimte geregistreerd is en de licentie verstrekt wordt door Rocket.Chat Cloud, hoeft u de licentie hier niet handmatig bij te werken.", "Entertainment": "Vermaak", "Error": "Fout", "Error_404": "Foutmelding 404", @@ -2423,7 +2422,6 @@ "LDAP_DataSync_Roles": "Rollen synchroniseren", "LDAP_DataSync_Channels": "Kanalen synchroniseren", "LDAP_DataSync_Teams": "Teams synchroniseren", - "LDAP_Enterprise": "Onderneming", "LDAP_DataSync_BackgroundSync": "Achtergrondsynchronisatie", "LDAP_Server_Type": "Server type", "LDAP_Server_Type_AD": "Active Directory", @@ -3647,7 +3645,6 @@ "SAML_AuthnRequest_Template": "AuthnRequest Template", "SAML_AuthnRequest_Template_Description": "De volgende variabelen zijn beschikbaar: \n- **\\_\\_newId\\_\\_**: Willekeurig gegenegeerde id-string \n- **\\_\\_instant\\_\\_**: Huidige tijdstempel \n- **\\_\\_callbackUrl\\_\\_**: De Rocket.Chat callback URL. \n- **\\_\\_entryPoint\\_\\_**: De waarde van de {{Custom Entry Point}} instelling. \n- **\\_\\_issuer\\_\\_**: De waarde van de {{Custom Issuer}} instelling. \n- **\\_\\_identifierFormatTag\\_\\_**: De inhoud van de {{NameID Policy Template}} indien een geldige {{Identifier Format}} geconfigureerd is. \n- **\\_\\_identifierFormat\\_\\_**: De waarde van de {{Identifier Format}} instelling. \n- **\\_\\_authnContextTag\\_\\_**: De inhoud van de {{AuthnContext Template}} indien een geldige {{Custom Authn Context}} geconfigureerd is. \n- **\\_\\_authnContextComparison\\_\\_**: De waarde van de {{Authn Context Comparison}} instelling. \n- **\\_\\_authnContext\\_\\_**: De waarde van de {{Custom Authn Context}} instelling.", "SAML_Connection": "Verbinding", - "SAML_Enterprise": "Onderneming", "SAML_General": "Algemeen", "SAML_Custom_Authn_Context": "Aangepaste Authn-context", "SAML_Custom_Authn_Context_Comparison": "Authn-contextvergelijking", @@ -4108,8 +4105,12 @@ "Teams_Search_teams": "Zoek teams", "Teams_New_Read_only_Label": "Alleen lezen", "Technology_Services": "Technologiediensten", + "Upgrade_tab_connection_error_description": "Het lijkt erop dat je geen internetverbinding hebt. Dit kan komen omdat jouw werkruimte geïnstalleerd is op een volledig beveiligde air-gapped server", "Terms": "Voorwaarden", + "Upgrade_tab_connection_error_restore": "Herstel uw verbinding om meer te weten komen over functies die u mist.", "Test_Connection": "Test verbinding", + "Upgrade_tab_go_fully_featured": "Upgrade naar de volledige versie", + "Upgrade_tab_trial_guide": "Proefgids", "Test_Desktop_Notifications": "Desktopmeldingen testen", "Test_LDAP_Search": "LDAP-zoekopdracht testen", "test-admin-options": "Test opties op admin paneel zoals LDAP login en pushmeldingen", @@ -4265,7 +4266,6 @@ "Transcript_message": "Bericht dat moet worden weergegeven bij vragen over transcript", "Transcript_of_your_livechat_conversation": "Transcript van uw omnichannel-gesprek.", "Transcript_Request": "Transcriptieverzoek", - "onboarding.form.registeredServerForm.continueStandalone": "Ga verder als standalone", "transfer-livechat-guest": "Transfer Livechat-gasten", "transfer-livechat-guest_description": "Toestemming om livechat-gasten over te dragen", "Transferred": "Overgedragen", @@ -4369,10 +4369,6 @@ "Update_to_version": "Update naar {{version}}", "Update_your_RocketChat": "Update je Rocket.Chat", "Updated_at": "Bijgewerkt op", - "Upgrade_tab_connection_error_description": "Het lijkt erop dat je geen internetverbinding hebt. Dit kan komen omdat jouw werkruimte geïnstalleerd is op een volledig beveiligde air-gapped server", - "Upgrade_tab_connection_error_restore": "Herstel uw verbinding om meer te weten komen over functies die u mist.", - "Upgrade_tab_go_fully_featured": "Upgrade naar de volledige versie", - "Upgrade_tab_trial_guide": "Proefgids", "Upgrade_tab_upgrade_your_plan": "Upgrade je abonnement", "Upload": "Uploaden", "Uploads": "Uploads", @@ -4565,6 +4561,7 @@ "view-l-room": "Bekijk omnichannel-kamers", "view-l-room_description": "Toestemming om omnichannel-kamers te bekijken", "view-livechat-analytics": "Omnichannel analytics bekijken", + "onboarding.page.awaitingConfirmation.subtitle": "We hebben je een e-mail gestuurd naar {{emailAddress}} met een bevestigingslink. Controleer of de onderstaande beveiligingscode overeenkomt met die in de e-mail.", "view-livechat-analytics_description": "Toestemming om livechat analyses te bekijken", "view-livechat-appearance": "Bekijk omnichannel-uiterlijk", "view-livechat-appearance_description": "Toestemming om het uiterlijk van de livechat te bekijken", @@ -4803,80 +4800,12 @@ "registration.component.form.confirmation": "Bevestiging", "registration.component.form.sendConfirmationEmail": "Stuur een bevestigingsmail", "registration.component.form.register": "Registreren", - "onboarding.component.form.requiredField": "Dit veld is verplicht", - "onboarding.component.form.steps": "Stap {{currentStep}} van {{stepCount}}", - "onboarding.component.form.action.back": "Terug", - "onboarding.component.form.action.next": "Volgende", - "onboarding.component.form.action.skip": "Sla deze stap over", - "onboarding.component.form.action.register": "Registreren", - "onboarding.component.form.action.confirm": "Bevestigen", - "onboarding.component.form.termsAndConditions": "Ik ga akkoord met de <1>Algemene voorwaarden en <3>Privacybeleid", - "onboarding.component.emailCodeFallback": "Geen e-mail ontvangen? <1>Opnieuw verzenden of <3>E-mailadres wijzigen", - "onboarding.page.form.title": "<1>Lanceer uw werkruimte", - "onboarding.page.awaitingConfirmation.title": "Wachtend op bevestiging", - "onboarding.page.awaitingConfirmation.subtitle": "We hebben je een e-mail gestuurd naar {{emailAddress}} met een bevestigingslink. Controleer of de onderstaande beveiligingscode overeenkomt met die in de e-mail.", - "onboarding.page.emailConfirmed.title": "E-mail bevestigd!", - "onboarding.page.emailConfirmed.subtitle": "U kunt terugkeren naar uw Rocket.Chat-toepassing - we hebben uw werkruimte al gelanceerd.", - "onboarding.page.checkYourEmail.title": "Controleer je e-mail", - "onboarding.page.checkYourEmail.subtitle": "Uw verzoek is succesvol verzonden.<1>Controleer uw e-mailinbox om uw Enterprise-proefversie te starten.<1>De link verloopt over 30 minuten.", - "onboarding.page.confirmationProcess.title": "Bevestiging in verwerking", - "onboarding.page.cloudDescription.title": "Laten we uw werkruimte en <1>14-daagse proefversie lanceren", - "onboarding.page.cloudDescription.tryGold": "Probeer gratis gedurende 14 dagen onze beste Gold-abonnement", - "onboarding.page.cloudDescription.numberOfIntegrations": "1.000 integraties", - "onboarding.page.cloudDescription.availability": "Hoge beschikbaarheid", - "onboarding.page.cloudDescription.auditing": "Controlepaneel voor berichten / Auditlogboeken", - "onboarding.page.cloudDescription.engagement": "Betrokkenheidsdashboard", - "onboarding.page.cloudDescription.ldap": "Uitgebreide LDAP synchronisatie", - "onboarding.page.cloudDescription.omnichannel": "Omnichannel premium", - "onboarding.page.cloudDescription.sla": "SLA: Premium", - "onboarding.page.cloudDescription.push": "Beveiligde pushmeldingen", - "onboarding.page.cloudDescription.goldIncludes": "* Gouden abonnement bevat alle functies van andere abonnementen", - "onboarding.page.alreadyHaveAccount": "Heb je al een account? <1>Beheer jouw werkruimten.", - "onboarding.page.invalidLink.title": "Uw link is niet meer geldig", - "onboarding.page.invalidLink.content": "Het lijkt erop dat je de uitnodigingslink al hebt gebruikt. Het wordt voor een eenmalige aanmelding gegenereerd. Vraag een nieuwe aan om lid te worden van jouw werkruimte.", - "onboarding.page.invalidLink.button.text": "Nieuwe link aanvragen", - "onboarding.page.requestTrial.title": "Vraag een <1>30-daagse proefversie aan", - "onboarding.page.requestTrial.subtitle": "Probeer gratis onze beste Enterprise Edition-abonnement gedurende 30 dagen", - "onboarding.page.magicLinkEmail.title": "We hebben je een inloglink gemaild.", - "onboarding.page.magicLinkEmail.subtitle": "Klik op de link in de e-mail die we u zojuist hebben gestuurd om u aan te melden bij uw werkruimte. <1>De link verloopt over 30 minuten.", - "onboarding.form.adminInfoForm.title": "Admin info", - "onboarding.form.adminInfoForm.subtitle": "We hebben dit nodig om een beheerdersprofiel in uw werkruimte te maken", - "onboarding.form.adminInfoForm.fields.fullName.label": "Volledige naam", - "onboarding.form.adminInfoForm.fields.fullName.placeholder": "Voornaam en naam", - "onboarding.form.adminInfoForm.fields.username.label": "Gebruikersnaam", - "onboarding.form.adminInfoForm.fields.username.placeholder": "@gebruikersnaam", - "onboarding.form.adminInfoForm.fields.email.label": "E-mailadres", - "onboarding.form.adminInfoForm.fields.email.placeholder": "E-mailadres", - "onboarding.form.adminInfoForm.fields.password.label": "Wachtwoord", - "onboarding.form.adminInfoForm.fields.password.placeholder": "Wachtwoord aanmaken", - "onboarding.form.adminInfoForm.fields.keepPosted.label": "Hou me op de hoogte van Rocket.Chat-updates", - "onboarding.form.organizationInfoForm.title": "Organisatie info", - "onboarding.form.organizationInfoForm.subtitle": "Wees geduldig met ons. Met deze informatie kunnen we uw werkruimte personaliseren", - "onboarding.form.organizationInfoForm.fields.organizationName.label": "Organisatie naam", - "onboarding.form.organizationInfoForm.fields.organizationName.placeholder": "Organisatie naam", - "onboarding.form.organizationInfoForm.fields.organizationType.label": "Organisatie type", - "onboarding.form.organizationInfoForm.fields.organizationType.placeholder": "Selecteer", - "onboarding.form.organizationInfoForm.fields.organizationIndustry.label": "Organisatie industrie", - "onboarding.form.organizationInfoForm.fields.organizationIndustry.placeholder": "Selecteer", - "onboarding.form.organizationInfoForm.fields.organizationSize.label": "Organisatiegrootte", - "onboarding.form.organizationInfoForm.fields.organizationSize.placeholder": "Selecteer", - "onboarding.form.organizationInfoForm.fields.country.label": "Land", - "onboarding.form.organizationInfoForm.fields.country.placeholder": "Selecteer", - "onboarding.form.registeredServerForm.title": "Registreer uw server", - "onboarding.form.registeredServerForm.included.push": "Mobiele pushmeldingen", - "onboarding.form.registeredServerForm.included.externalProviders": "Integratie met externe providers (WhatsApp, Facebook, Telegram, Twitter)", - "onboarding.form.registeredServerForm.included.apps": "Toegang tot Marketplace-apps", - "onboarding.form.registeredServerForm.fields.accountEmail.inputLabel": "E-mailadres van cloudaccount", - "onboarding.form.registeredServerForm.fields.accountEmail.inputPlaceholder": "Voer uw e-mailadres in", - "onboarding.form.registeredServerForm.keepInformed": "Hou me op de hoogte van nieuws en evenementen", - "onboarding.form.standaloneServerForm.title": "Standalone serverbevestiging", - "onboarding.form.standaloneServerForm.servicesUnavailable": "Sommige diensten zullen niet beschikbaar zijn of vereisen handmatige configuratie", - "onboarding.form.standaloneServerForm.publishOwnApp": "Om pushmeldingen te verzenden, moet u uw eigen app compileren en publiceren in Google Play en App Store", - "onboarding.form.standaloneServerForm.manuallyIntegrate": "Moet handmatig worden geïntegreerd met externe services", "Awaiting_confirmation": "Wachtend op bevestiging", "RegisterWorkspace_Features_MobileNotifications_Title": "Mobiele pushmeldingen", "RegisterWorkspace_Features_Marketplace_Title": "Marktplaats", "RegisterWorkspace_Features_Omnichannel_Title": "Omnichannel", "RegisterWorkspace_Setup_Label": "E-mailadres van cloudaccount", - "cloud.RegisterWorkspace_Setup_Terms_Privacy": "Ik ga akkoord met de <1>Algemene voorwaarden en <3>Privacybeleid" -} \ No newline at end of file + "cloud.RegisterWorkspace_Setup_Terms_Privacy": "Ik ga akkoord met de <1>Algemene voorwaarden en <3>Privacybeleid", + "UpgradeToGetMore_engagement-dashboard_Title": "Analytics", + "UpgradeToGetMore_auditing_Title": "Bericht auditing" +} diff --git a/apps/meteor/packages/rocketchat-i18n/i18n/no.i18n.json b/apps/meteor/packages/rocketchat-i18n/i18n/no.i18n.json index 1eb6c8ceb8bd..111c9efa53bd 100644 --- a/apps/meteor/packages/rocketchat-i18n/i18n/no.i18n.json +++ b/apps/meteor/packages/rocketchat-i18n/i18n/no.i18n.json @@ -1018,6 +1018,8 @@ "Email_Placeholder": "Vennligst skriv inn E-postadressen din...", "Email_Placeholder_any": "Vennligst skriv inn e-postadresser ...", "Email_subject": "Emne", + "Enterprise_License": "Enterpriselisens", + "Enterprise_License_Description": "Hvis arbeidsområdet ditt er registrert og lisensen er levert av Rocket.Chat Cloud trenger du ikke å oppdatere lisensen manuelt her.", "Email_verified": "E-post bekreftet", "Emoji": "Emoji", "EmojiCustomFilesystem": "Egendefinert Emoji-filsystem", @@ -1040,9 +1042,6 @@ "Enter_name_here": "Skriv inn navn her", "Enter_Normal": "Normal modus (send med Enter)", "Enter_to": "Skriv inn til", - "Enterprise": "Bedriften", - "Enterprise_License": "Enterpriselisens", - "Enterprise_License_Description": "Hvis arbeidsområdet ditt er registrert og lisensen er levert av Rocket.Chat Cloud trenger du ikke å oppdatere lisensen manuelt her.", "Entertainment": "Underholdning", "Error": "Feil", "Error_404": "Feil: 404", @@ -2859,5 +2858,6 @@ "registration.component.form.reasonToJoin": "Årsak til å bli med", "registration.component.form.invalidConfirmPass": "Passordbekreftelsen stemmer ikke overens med passordet", "registration.component.form.confirmPassword": "Bekreft passordet ditt", - "registration.component.form.sendConfirmationEmail": "Send bekreftelses-e-post" + "registration.component.form.sendConfirmationEmail": "Send bekreftelses-e-post", + "UpgradeToGetMore_engagement-dashboard_Title": "Analytics" } \ No newline at end of file diff --git a/apps/meteor/packages/rocketchat-i18n/i18n/pl.i18n.json b/apps/meteor/packages/rocketchat-i18n/i18n/pl.i18n.json index 80ab48d383c0..53a6c9d5f26b 100644 --- a/apps/meteor/packages/rocketchat-i18n/i18n/pl.i18n.json +++ b/apps/meteor/packages/rocketchat-i18n/i18n/pl.i18n.json @@ -455,6 +455,7 @@ "App_Details": "Szczegóły aplikacji", "App_Info": "Info o aplikacji", "App_Information": "Informacje o aplikacji", + "Apps_context_enterprise": "Enterprise", "App_Installation": "Instalacja aplikacji", "App_status_auto_enabled": "Włączone", "App_status_constructed": "Skonstruowane", @@ -480,7 +481,6 @@ "Apply_and_refresh_all_clients": "Zastosuj i odśwież wszystkich klientów", "Apps": "Aplikacje", "Apps_context_explore": "Poznaj", - "Apps_context_enterprise": "Enterprise", "Apps_context_installed": "Zainstalowana", "Apps_Engine_Version": "Wersja silnika aplikacji", "Apps_Essential_Alert": "Ta aplikacja jest niezbędna dla następujących zdarzeń:", @@ -743,6 +743,7 @@ "Broadcasting_media_server_url": "Rozgłaszanie adresu URL serwera multimedialnego", "Browse_Files": "Przeglądaj pliki", "Browser_does_not_support_audio_element": "Przeglądarka nie obsługuje tego elementu dźwiękowego.", + "Call_number_enterprise_only": "Numer połączenia (tylko wersja Enterprise Edition)", "Browser_does_not_support_video_element": "Przeglądarka nie obsługuje tego elementu wideo.", "Bugsnag_api_key": "Klucz API Bugsnag", "Build_Environment": "Środowisko kompilacji", @@ -776,7 +777,6 @@ "Call_provider": "Dostawca połączenia", "Call_Already_Ended": "Połączenie już zakończone", "Call_number": "Numer połączenia", - "Call_number_enterprise_only": "Numer połączenia (tylko wersja Enterprise Edition)", "call-management": "Zarządzanie połączeniami", "call-management_description": "Zezwolenie na rozpoczęcie spotkania", "Call_unavailable_for_federation": "Połączenie jest niedostępne dla pokoi Federacji", @@ -1709,7 +1709,10 @@ "email_plain_text_only": "Wysyłaj wiadomości e-mail zwykłym tekstem", "email_style_description": "Unikaj zagnieżdżonych selektorów", "email_style_label": "Styl e-mail", + "Enterprise_Description": "Zaktualizuj licencję Enterprise manualnie.", "Email_subject": "Temat", + "Enterprise_License": "Licencja Enterprise", + "Enterprise_License_Description": "Jeśli Twoja przestrzeń robocza jest zarejestrowana i licencja jest dostarczana przez Rocket.Chat Cloud, nie musisz ręcznie aktualizować licencji tutaj.", "Email_verified": "E-mail zweryfikowany", "Email_sent": "Email wysłany", "Emoji": "Emotikon", @@ -1766,10 +1769,6 @@ "Enter_Normal": "Tryb normalny (wysyłaj klawiszem Enter)", "Enter_to": "Naciśnij Enter: ", "Enter_your_E2E_password": "Wprowadź swoje hasło E2E", - "Enterprise": "Enterprise", - "Enterprise_Description": "Zaktualizuj licencję Enterprise manualnie.", - "Enterprise_License": "Licencja Enterprise", - "Enterprise_License_Description": "Jeśli Twoja przestrzeń robocza jest zarejestrowana i licencja jest dostarczana przez Rocket.Chat Cloud, nie musisz ręcznie aktualizować licencji tutaj.", "Entertainment": "Rozrywka", "Error": "Błąd", "Error_something_went_wrong": "Ups! Coś poszło nie tak. Odśwież stronę lub skontaktuj się z administratorem.", @@ -1840,6 +1839,7 @@ "error-invalid-email-address": "Niepoprawny adres email", "error-invalid-email-inbox": "Nieprawidłowa skrzynka przychodząca Email", "error-email-inbox-not-found": "Nie znaleziono skrzynki odbiorczej e-mail", + "error-this-is-an-ee-feature": "To jest funkcja edycji Enterprise", "error-invalid-file-height": "Nieprawidłowa wysokość pliku", "error-invalid-file-type": "Nieprawidłowy typ pliku", "error-invalid-file-width": "Nieprawidłowa szerokość pliku", @@ -1912,7 +1912,6 @@ "error-tags-must-be-assigned-before-closing-chat": "Tag(i) musi (muszą) być przypisane przed zamknięciem czatu", "error-the-field-is-required": "Wymagane jest {{field}} pola.", "error-this-is-not-a-livechat-room": "To nie jest pokój Livechata", - "error-this-is-an-ee-feature": "To jest funkcja edycji Enterprise", "error-token-already-exists": "Token o tej nazwie już istnieje", "error-token-does-not-exists": "Token nie istnieje", "error-too-many-requests": "Błąd, zbyt wiele żądań. Proszę zwolnij. Musisz czekać {{seconds}} sekund przed ponowną próbą.", @@ -2103,6 +2102,7 @@ "FileUpload_S3_Proxy_Avatars_Description": "Pliki avatara proxy przesyłają się przez twój serwer zamiast bezpośredniego dostępu do adresu URL zasobu", "FileUpload_S3_Proxy_Uploads": "Przesyłanie z serwera proxy", "FileUpload_S3_Proxy_Uploads_Description": "Przesyłanie pliku proxy za pośrednictwem serwera zamiast bezpośredniego dostępu do adresu URL zasobu", + "Hold_Call_EE_only": "Zawieszenie połączenia (tylko wersja Enterprise)", "FileUpload_S3_Region": "Region", "FileUpload_S3_SignatureVersion": "Wersja podpisu", "FileUpload_S3_URLExpiryTimeSpan": "Czas przedawnienia URL", @@ -2202,7 +2202,6 @@ "Go_to_your_workspace": "Idź do swojej przestrzeni roboczej", "Google_Play": "Google Play", "Hold_Call": "Zawieś połączenie", - "Hold_Call_EE_only": "Zawieszenie połączenia (tylko wersja Enterprise)", "GoogleCloudStorage": "Google Cloud Storage", "GoogleNaturalLanguage_ServiceAccount_Description": "Plik JSON klucza usługi. Więcej informacji można znaleźć [tutaj] (https://cloud.google.com/natural-language/docs/common/auth#set_up_a_service_account)", "GoogleTagManager_id": "Menedżer tagów Google Id", @@ -2619,7 +2618,6 @@ "LDAP_DataSync_Roles": "Synchronizacja ról", "LDAP_DataSync_Channels": "Synchronizacja Channel", "LDAP_DataSync_Teams": "Synchronizacja zespołów", - "LDAP_Enterprise": "Enterprise", "LDAP_DataSync_BackgroundSync": "Synchronizacja w tle", "LDAP_Server_Type": "Typ serwera", "LDAP_Server_Type_AD": "Active Directory", @@ -3116,6 +3114,7 @@ "Message_HideType_subscription_role_removed": "Ukryj wiadomość \"Rola już nie ma definicji\"", "Message_HideType_uj": "Ukryj wiadomości \"Dołącz do użytkownika\"", "Message_HideType_ujt": "Ukryj komunikaty „Użytkownik dołączył do zespołu”", + "New_Call_Enterprise_Edition_Only": "Nowe połączenie (tylko wersja Enterprise)", "Message_HideType_ul": "Ukryj wiadomości \"zostawiaj użytkownika\"", "Message_HideType_ult": "Ukryj komunikaty „Użytkownik opuścił zespół”", "Message_HideType_user_added_room_to_team": "Ukryj komunikaty „Użytkownik dodał pokój do zespołu”", @@ -3257,7 +3256,6 @@ "New_Application": "Nowa aplikacja", "New_Business_Hour": "Nowe godziny pracy", "New_Call": "Nowe połączenie", - "New_Call_Enterprise_Edition_Only": "Nowe połączenie (tylko wersja Enterprise)", "New_chat_in_queue": "Nowa rozmowa w kolejce", "New_chat_priority": "Zmieniono priorytet: {{user}} zmienił priorytet na {{priority}}", "New_chat_transfer": "Nowy transfer czatu: {{transfer}}", @@ -3974,7 +3972,6 @@ "SAML_AuthnRequest_Template": "Szablon AuthnContext ", "SAML_AuthnRequest_Template_Description": "Poniższe zmienne są dostępne: \n- **\\_\\_newId\\_\\_**: Losowo wygenerowany ciąg id \n- **\\_\\_instant\\_\\_**: Aktualny timestamp \n- **\\_\\_callbackUrl\\_\\_**: Rocket.Chat callback URL. \n- **\\_\\_entryPoint\\_\\_**: Wartość opcji {{Custom Entry Point}} . \n- **\\_\\_issuer\\_\\_**: Wartość opcji {{Custom Issuer}} . \n- **\\_\\_identifierFormatTag\\_\\_**: Zawartość {{NameID Policy Template}} jeśli poprawny {{Identifier Format}} jest skonfigurowany. \n- **\\_\\_identifierFormat\\_\\_**: Wartość opcji {{Identifier Format}} . \n- **\\_\\_authnContextTag\\_\\_**: Zawartość {{AuthnContext Template}} jeśli poprawny {{Custom Authn Context}} jest skonfigurowany. \n- **\\_\\_authnContextComparison\\_\\_**: Wartość opcji {{Authn Context Comparison}} . \n- **\\_\\_authnContext\\_\\_**: Wartość opcji {{Custom Authn Context}} .", "SAML_Connection": "Połączenie", - "SAML_Enterprise": "Enterprise", "SAML_General": "General", "SAML_Custom_Authn_Context": "Custom Authn Context", "SAML_Custom_Authn_Context_Comparison": "Authn Context Comparison", @@ -4473,9 +4470,13 @@ "Teams_Search_teams": "Wyszukaj zespoły", "Teams_New_Read_only_Label": "Tylko do odczytu", "Technology_Services": "Usługi technologiczne", + "Upgrade_tab_connection_error_description": "Wygląda na to, że nie masz połączenia z internetem. Może to być spowodowane tym, że Twoja przestrzeń robocza jest zainstalowana na w pełni zabezpieczonym serwerze", "Terms": "Warunki", "Terms_of_use": "Warunki użytkowania", + "Upgrade_tab_connection_error_restore": "Przywróć połączenie, aby dowiedzieć się o funkcjach, których Ci brakuje.", "Test_Connection": "Test połączenia", + "Upgrade_tab_go_fully_featured": "Zostań w pełni funkcjonalny", + "Upgrade_tab_trial_guide": "Przewodnik próbny", "Test_Desktop_Notifications": "Testuj powiadomienia na pulpicie", "Test_LDAP_Search": "Testuj wyszukiwanie LDAP", "test-admin-options": "Testuj opcje w panelu administracyjnym, takie jak logowanie LDAP i powiadomienia push", @@ -4642,7 +4643,6 @@ "Transcript_message": "Wiadomość do wyświetlenia przy zapytaniu o transkrypt.", "Transcript_of_your_livechat_conversation": "Transkrypt twojej rozmowy.", "Transcript_Request": "Wniosek o transkrypt", - "onboarding.form.registeredServerForm.continueStandalone": "Kontynuuj jako standalone", "transfer-livechat-guest": "Przenieś gości Livechat", "transfer-livechat-guest_description": "Zezwolenie na przeniesienie gości livechat", "Transferred": "Przekazane", @@ -4747,10 +4747,6 @@ "Update_to_version": "Zaktualizuj do {{version}}", "Update_your_RocketChat": "Zaktualizuj swój Rocket.Chat", "Updated_at": "Zaktualizowano na", - "Upgrade_tab_connection_error_description": "Wygląda na to, że nie masz połączenia z internetem. Może to być spowodowane tym, że Twoja przestrzeń robocza jest zainstalowana na w pełni zabezpieczonym serwerze", - "Upgrade_tab_connection_error_restore": "Przywróć połączenie, aby dowiedzieć się o funkcjach, których Ci brakuje.", - "Upgrade_tab_go_fully_featured": "Zostań w pełni funkcjonalny", - "Upgrade_tab_trial_guide": "Przewodnik próbny", "Upgrade_tab_upgrade_your_plan": "Zwiększ poziom swojego plan", "Upload": "Wczytaj", "Uploads": "Przesyłane pliki", @@ -4995,6 +4991,7 @@ "view-l-room": "Wyświetl pokoje Livechat", "view-l-room_description": "Zezwolenie na oglądanie kanałów na żywo", "view-livechat-analytics": "Zobacz analizę Livechat", + "onboarding.page.awaitingConfirmation.subtitle": "Wysłaliśmy do Ciebie wiadomość e-mail na adres {{emailAddress}} z linkiem potwierdzającym. Proszę sprawdzić, czy poniższy kod bezpieczeństwa jest zgodny z tym w wiadomości e-mail.", "view-livechat-analytics_description": "Uprawnienie do przeglądania live chat analytics", "view-livechat-appearance": "Zobacz wygląd omnichannel", "view-livechat-appearance_description": "Uprawnienie do podglądu wyglądu livechat", @@ -5264,76 +5261,6 @@ "registration.component.form.confirmation": "Potwierdzenie", "registration.component.form.sendConfirmationEmail": "Wyślij e-mail z potwierdzeniem", "registration.component.form.register": "Rejestracja", - "onboarding.component.form.requiredField": "To pole jest wymagane", - "onboarding.component.form.steps": "Krok {{currentStep}} z {{stepCount}}", - "onboarding.component.form.action.back": "Wstecz", - "onboarding.component.form.action.next": "Następny", - "onboarding.component.form.action.skip": "Pomiń ten krok", - "onboarding.component.form.action.register": "Rejestracja", - "onboarding.component.form.action.confirm": "Potwierdź", - "onboarding.component.form.termsAndConditions": "Zgadzam się z <1>zasadami i warunkami i <3>Polityką prywatności.", - "onboarding.component.emailCodeFallback": "Nie otrzymałeś emaila? <1>Wyślij ponownie lub <3>Zmień e-mail.", - "onboarding.page.form.title": "<1> Uruchom <1> swoją przestrzeń roboczą", - "onboarding.page.awaitingConfirmation.title": "Oczekuje na potwierdzenie", - "onboarding.page.awaitingConfirmation.subtitle": "Wysłaliśmy do Ciebie wiadomość e-mail na adres {{emailAddress}} z linkiem potwierdzającym. Proszę sprawdzić, czy poniższy kod bezpieczeństwa jest zgodny z tym w wiadomości e-mail.", - "onboarding.page.emailConfirmed.title": "Email potwierdzony!", - "onboarding.page.emailConfirmed.subtitle": "Możesz wrócić do swojej aplikacji Rocket.Chat - uruchomiliśmy już Twój obszar roboczy.", - "onboarding.page.checkYourEmail.title": "Sprawdź swój email", - "onboarding.page.checkYourEmail.subtitle": "Twoja prośba została wysłana pomyślnie.<1>Sprawdź swoją skrzynkę e-mail, aby uruchomić wersję próbną Enterprise.<1>Link wygaśnie za 30 minut.", - "onboarding.page.confirmationProcess.title": "Potwierdzenie w toku", - "onboarding.page.cloudDescription.title": "Uruchom swój obszar roboczy i <1>14-dniowy okres próbny.", - "onboarding.page.cloudDescription.tryGold": "Wypróbuj nasz najlepszy plan Gold przez 14 dni za darmo", - "onboarding.page.cloudDescription.numberOfIntegrations": "1000 integracji", - "onboarding.page.cloudDescription.availability": "Wysoka dostępność", - "onboarding.page.cloudDescription.auditing": "Panel audytu wiadomości / Logi audytu", - "onboarding.page.cloudDescription.engagement": "Engagement Dashboard", - "onboarding.page.cloudDescription.ldap": "Ulepszona synchronizacja LDAP", - "onboarding.page.cloudDescription.omnichannel": "Omnichannel premium", - "onboarding.page.cloudDescription.sla": "SLA: Premium", - "onboarding.page.cloudDescription.push": "Bezpieczne powiadomienia push", - "onboarding.page.cloudDescription.goldIncludes": "* Złoty plan zawiera wszystkie funkcje z innych planów", - "onboarding.page.alreadyHaveAccount": "Masz już konto? <1>Zarządzaj swoimi obszarami roboczymi.", - "onboarding.page.invalidLink.title": "Twój link jest nieważny", - "onboarding.page.invalidLink.content": "Wygląda na to, że już używałeś linku z zaproszeniem. Jest on generowany dla pojedynczego logowania. Poproś o nowy, aby dołączyć do swojej przestrzeni roboczej.", - "onboarding.page.invalidLink.button.text": "Zażądaj nowego linku", - "onboarding.page.requestTrial.title": "Zamów <1>30-dniową wersję próbną.", - "onboarding.page.requestTrial.subtitle": "Wypróbuj nasz najlepszy plan Enterprise Edition przez 30 dni za darmo", - "onboarding.page.magicLinkEmail.title": "Wysłaliśmy Ci link do logowania", - "onboarding.page.magicLinkEmail.subtitle": "Kliknij link w wiadomości e-mail, którą właśnie do Ciebie wysłaliśmy, aby zalogować się do swojego obszaru roboczego. <1>Link wygaśnie za 30 minut.", - "onboarding.form.adminInfoForm.title": "Admin Info", - "onboarding.form.adminInfoForm.subtitle": "Potrzebujemy tego, aby utworzyć profil administratora w twoim obszarze roboczym", - "onboarding.form.adminInfoForm.fields.fullName.label": "Pełna nazwa", - "onboarding.form.adminInfoForm.fields.fullName.placeholder": "Imię i nazwisko", - "onboarding.form.adminInfoForm.fields.username.label": "Nazwa użytkownika", - "onboarding.form.adminInfoForm.fields.username.placeholder": "@username", - "onboarding.form.adminInfoForm.fields.email.label": "E-mail", - "onboarding.form.adminInfoForm.fields.email.placeholder": "E-mail", - "onboarding.form.adminInfoForm.fields.password.label": "Hasło", - "onboarding.form.adminInfoForm.fields.password.placeholder": "Utwórz hasło", - "onboarding.form.adminInfoForm.fields.keepPosted.label": "Informuj mnie o aktualizacjach Rocket.Chat", - "onboarding.form.organizationInfoForm.title": "Informacje o organizacji", - "onboarding.form.organizationInfoForm.subtitle": "Prosimy, bądź z nami. Te informacje pomogą nam spersonalizować Twoje miejsce pracy.", - "onboarding.form.organizationInfoForm.fields.organizationName.label": "Nazwa organizacji", - "onboarding.form.organizationInfoForm.fields.organizationName.placeholder": "Nazwa organizacji", - "onboarding.form.organizationInfoForm.fields.organizationType.label": "Typ organizacji", - "onboarding.form.organizationInfoForm.fields.organizationType.placeholder": "Wybór", - "onboarding.form.organizationInfoForm.fields.organizationIndustry.label": "Branża organizacji", - "onboarding.form.organizationInfoForm.fields.organizationIndustry.placeholder": "Wybór", - "onboarding.form.organizationInfoForm.fields.organizationSize.label": "Wielkość organizacji", - "onboarding.form.organizationInfoForm.fields.organizationSize.placeholder": "Wybór", - "onboarding.form.organizationInfoForm.fields.country.label": "Kraj", - "onboarding.form.organizationInfoForm.fields.country.placeholder": "Wybór", - "onboarding.form.registeredServerForm.title": "Zarejestruj swój serwer", - "onboarding.form.registeredServerForm.included.push": "Powiadomienia mobilne push", - "onboarding.form.registeredServerForm.included.externalProviders": "Integracja z zewnętrznymi dostawcami (WhatsApp, Facebook, Telegram, Twitter)", - "onboarding.form.registeredServerForm.included.apps": "Dostęp do aplikacji w Marketplace", - "onboarding.form.registeredServerForm.fields.accountEmail.inputLabel": "E-mail konta w chmurze", - "onboarding.form.registeredServerForm.fields.accountEmail.inputPlaceholder": "Proszę wpisać swój adres e-mail", - "onboarding.form.registeredServerForm.keepInformed": "Informuj mnie o nowościach i wydarzeniach", - "onboarding.form.standaloneServerForm.title": "Potwierdzenie serwera standalone", - "onboarding.form.standaloneServerForm.servicesUnavailable": "Niektóre z usług będą niedostępne lub będą wymagały ręcznej konfiguracji", - "onboarding.form.standaloneServerForm.publishOwnApp": "W celu wysyłania powiadomień push należy skompilować i opublikować własną aplikację w Google Play i App Store", - "onboarding.form.standaloneServerForm.manuallyIntegrate": "Konieczność ręcznej integracji z usługami zewnętrznymi", "Something_Went_Wrong": "Coś poszło nie tak", "Join_your_team": "Dołącz do swojego zespołu", "Create_an_account": "Utwórz konto", @@ -5349,5 +5276,7 @@ "RegisterWorkspace_Features_Omnichannel_Title": "Omnichannel", "RegisterWorkspace_Setup_Label": "E-mail konta w chmurze", "RegisterWorkspace_Syncing_Complete": "Synchronizacja zakończona", - "cloud.RegisterWorkspace_Setup_Terms_Privacy": "Zgadzam się z <1>zasadami i warunkami i <3>Polityką prywatności." -} \ No newline at end of file + "cloud.RegisterWorkspace_Setup_Terms_Privacy": "Zgadzam się z <1>zasadami i warunkami i <3>Polityką prywatności.", + "UpgradeToGetMore_engagement-dashboard_Title": "Analityka", + "UpgradeToGetMore_auditing_Title": "Audyt wiadomości" +} diff --git a/apps/meteor/packages/rocketchat-i18n/i18n/pt-BR.i18n.json b/apps/meteor/packages/rocketchat-i18n/i18n/pt-BR.i18n.json index 775b6bfc60af..241db63d3f87 100644 --- a/apps/meteor/packages/rocketchat-i18n/i18n/pt-BR.i18n.json +++ b/apps/meteor/packages/rocketchat-i18n/i18n/pt-BR.i18n.json @@ -457,6 +457,7 @@ "App_Details": "Detalhes do aplicativo", "App_Info": "Informação do aplicativo", "App_Information": "Informações do aplicativo", + "Apps_context_enterprise": "Enterprise", "App_Installation": "Instalação do aplicativo", "App_status_auto_enabled": "Habilitado", "App_status_constructed": "Criado", @@ -480,7 +481,6 @@ "Apply": "Aplicar", "Apply_and_refresh_all_clients": "Aplicar e atualizar todos os clientes", "Apps": "Aplicativos", - "Apps_context_enterprise": "Enterprise", "Apps_context_installed": "Instalado", "Apps_Engine_Version": "Versão do mecanismo de aplicativos", "Apps_Essential_Alert": "Este aplicativo é essencial para os seguintes eventos:", @@ -1618,6 +1618,8 @@ "email_style_description": "Evite seletores aninhados", "email_style_label": "Estilo do e-mail", "Email_subject": "Assunto do e-mail", + "Enterprise_License": "Licença Enterprise", + "Enterprise_License_Description": "Se você registrou seu espaço de trabalho e a licença foi fornecida pela Rocket.Chat Cloud, você não precisará atualizar a licença manualmente aqui.", "Email_verified": "E-mail verificado", "Email_sent": "E-mail enviado", "Emoji": "Emoji", @@ -1669,9 +1671,6 @@ "Enter_Normal": "Modo normal (enviar com Enter)", "Enter_to": "Enter para", "Enter_your_E2E_password": "Digite sua senha E2E", - "Enterprise": "Enterprise", - "Enterprise_License": "Licença Enterprise", - "Enterprise_License_Description": "Se você registrou seu espaço de trabalho e a licença foi fornecida pela Rocket.Chat Cloud, você não precisará atualizar a licença manualmente aqui.", "Entertainment": "Entretenimento", "Error": "Erro", "Error_404": "Erro 404", @@ -2033,6 +2032,7 @@ "Forgot_Password_Email": "Clique aqui para redefinir sua senha.", "Forgot_Password_Email_Subject": "[Site_Name] - Recuperar Senha", "Forgot_password_section": "Esqueceu senha", + "Hold_EE_only": "Pausar (Enterprise Edition only)", "Forward": "Encaminhar", "Forward_chat": "Encaminhar conversa", "Forward_to_department": "Encaminhar ao departamento", @@ -2123,7 +2123,6 @@ "History": "Histórico", "Hold_Time": "Tempo de espera", "Hold": "Pausar", - "Hold_EE_only": "Pausar (Enterprise Edition only)", "Home": "Início", "Host": "Host", "Hospitality_Businness": "Hospitalidade", @@ -2478,7 +2477,6 @@ "LDAP_DataSync_Roles": "Sincronizar funções", "LDAP_DataSync_Channels": "Sincronizar canal", "LDAP_DataSync_Teams": "Sincronizar equipes", - "LDAP_Enterprise": "Enterprise", "LDAP_DataSync_BackgroundSync": "Sincronização em segundo plano", "LDAP_Server_Type": "Tipo de servidor", "LDAP_Server_Type_AD": "Active Directory", @@ -3725,7 +3723,6 @@ "SAML_AuthnRequest_Template": "Modelo AuthnRequest", "SAML_AuthnRequest_Template_Description": "As seguintes variáveis estão disponíveis: \n- **\\_\\_newId\\_\\_**: String ID gerada aleatoriamente \n- **\\_\\_instant\\_\\_**: Carimbo de hora atual \n- **\\_\\_callbackUrl\\_\\_**: O URL de callback do Rocket.Chat. \n- **\\_\\_entryPoint\\_\\_**: O valor da configuração {{Custom Entry Point}}. \n- **\\_\\_issuer\\_\\_**: O valor da configuração {{Custom Issuer}}. \n- **\\_\\_identifierFormatTag\\_\\_**: O conteúdo de {{NameID Policy Template}} se um {{Identifier Format}} válido estiver configurado. \n- **\\_\\_identifierFormat\\_\\_**: O valor da configuração {{Identifier Format}}. \n- **\\_\\_authnContextTag\\_\\_**: O conteúdo de {{AuthnContext Template}} se um {{Custom Authn Context}} válido estiver configurado. \n- **\\_\\_authnContextComparison\\_\\_**: O valor da configuração {{Authn Context Comparison}}. \n- **\\_\\_authnContext\\_\\_**: O valor da configuração {{Custom Authn Context}}.", "SAML_Connection": "Conexão", - "SAML_Enterprise": "Enterprise", "SAML_General": "Geral", "SAML_Custom_Authn_Context": "Authn Contex personalizado", "SAML_Custom_Authn_Context_Comparison": "Comparação de Authn Contex", @@ -4189,8 +4186,12 @@ "Teams_Search_teams": "Pesquisar equipes", "Teams_New_Read_only_Label": "Somente leitura", "Technology_Services": "Serviços tecnológicos", + "Upgrade_tab_connection_error_description": "Parece que você não está com conexão com a internet. Isso pode ser porque sua workspace está instalada num servidor totalmente seguro sem acesso à internet", "Terms": "Termos", + "Upgrade_tab_connection_error_restore": "Restaure sua conexão para aprender sobre funcionalidades que você está perdendo", "Test_Connection": "Testar conexão", + "Upgrade_tab_go_fully_featured": "Obtenha todos os recursos", + "Upgrade_tab_trial_guide": "Guia de teste", "Test_Desktop_Notifications": "Testar notificações da área de trabalho", "Test_LDAP_Search": "Testar pesquisa do LDAP", "test-admin-options": "Testar opções no painel administrativo como login LDAP e push notifications", @@ -4349,7 +4350,6 @@ "Transcript_message": "Mensagem para mostrar ao perguntar sobre a transcrição", "Transcript_of_your_livechat_conversation": "Transcrição da sua conversa do omnichannel.", "Transcript_Request": "Solicitação de transcrição", - "onboarding.form.registeredServerForm.continueStandalone": "Continuar como standalone", "transfer-livechat-guest": "Transferir convidados do livechat", "transfer-livechat-guest_description": "Permissão para transferir convidados do livechat", "Transferred": "Transferido", @@ -4460,10 +4460,6 @@ "Update_to_version": "Atualizado para {{version}}", "Update_your_RocketChat": "Atualize seu Rocket.Chat", "Updated_at": "Atualizado em", - "Upgrade_tab_connection_error_description": "Parece que você não está com conexão com a internet. Isso pode ser porque sua workspace está instalada num servidor totalmente seguro sem acesso à internet", - "Upgrade_tab_connection_error_restore": "Restaure sua conexão para aprender sobre funcionalidades que você está perdendo", - "Upgrade_tab_go_fully_featured": "Obtenha todos os recursos", - "Upgrade_tab_trial_guide": "Guia de teste", "Upgrade_tab_upgrade_your_plan": "Faça upgrade no seu plano", "Upload": "Upload", "Uploads": "Uploads", @@ -4657,6 +4653,7 @@ "view-l-room": "Ver salas de omnichannel", "view-l-room_description": "Permissão para ver salas de omnichannel", "view-livechat-analytics": "Ver a análise do omnichannel", + "onboarding.page.awaitingConfirmation.subtitle": "Enviamos um e-mail para {{emailAddress}} com um link de confirmação. Verifique se o código de segurança abaixo coincide com o do e-mail.", "view-livechat-analytics_description": "Permissão para ver análise do livechat", "view-livechat-appearance": "Ver aparência do omnichannel", "view-livechat-appearance_description": "Permissão para ver aparência do livechat", @@ -4903,76 +4900,6 @@ "registration.component.form.confirmation": "Confirmação", "registration.component.form.sendConfirmationEmail": "Enviar email de confirmação", "registration.component.form.register": "Registrar", - "onboarding.component.form.requiredField": "Este campo é obrigatório", - "onboarding.component.form.steps": "Etapa {{currentStep}} de {{stepCount}}", - "onboarding.component.form.action.back": "Voltar", - "onboarding.component.form.action.next": "Avançar", - "onboarding.component.form.action.skip": "Pular essa etapa", - "onboarding.component.form.action.register": "Registrar", - "onboarding.component.form.action.confirm": "Confirmar", - "onboarding.component.form.termsAndConditions": "Eu concordo com os <1>Termos e condições e a <3>Política de privacidade", - "onboarding.component.emailCodeFallback": "Não recebeu e-mail? <1>Reenviar ou <3>Alterar e-mail", - "onboarding.page.form.title": "Vamos <1>Iniciar seu espaço de trabalho", - "onboarding.page.awaitingConfirmation.title": "Aguardando confirmação", - "onboarding.page.awaitingConfirmation.subtitle": "Enviamos um e-mail para {{emailAddress}} com um link de confirmação. Verifique se o código de segurança abaixo coincide com o do e-mail.", - "onboarding.page.emailConfirmed.title": "E-mail confirmado!", - "onboarding.page.emailConfirmed.subtitle": "Você pode retornar para seu aplicativo Rocket.Chat - nós já iniciamos seu espaço de trabalho.", - "onboarding.page.checkYourEmail.title": "Verifique seu e-mail", - "onboarding.page.checkYourEmail.subtitle": "Sua solicitação foi enviada com sucesso. <1>Verifique sua caixa de e-mail para iniciar seu teste Enterprise. <1>O link expirará em 30 minutos.", - "onboarding.page.confirmationProcess.title": "Confirmação em processo", - "onboarding.page.cloudDescription.title": "Vamos iniciar seu espaço de trabalho e o <1>teste de 14 dias", - "onboarding.page.cloudDescription.tryGold": "Experimento nosso melhor plano Gold grátis por 14 dias", - "onboarding.page.cloudDescription.numberOfIntegrations": "1.000 integrações", - "onboarding.page.cloudDescription.availability": "Alta disponibilidade", - "onboarding.page.cloudDescription.auditing": "Painel de auditoria de mensagem/Logs de auditoria", - "onboarding.page.cloudDescription.engagement": "Painel de engajamento", - "onboarding.page.cloudDescription.ldap": "Sincronização melhorada de LDAP", - "onboarding.page.cloudDescription.omnichannel": "Omnichannel premium", - "onboarding.page.cloudDescription.sla": "SLA: Premium", - "onboarding.page.cloudDescription.push": "Notificações push seguras", - "onboarding.page.cloudDescription.goldIncludes": "* Plano Golden inclui todas as funcionalidades dos outros planos", - "onboarding.page.alreadyHaveAccount": "Já tem uma conta? <1>Gerencie seus espaços de trabalho.", - "onboarding.page.invalidLink.title": "Seu link não é mais válido", - "onboarding.page.invalidLink.content": "Parece que você já usou link de convite. Ele é gerado para um único login. Solicite um novo para entrar no espaço de trabalho.", - "onboarding.page.invalidLink.button.text": "Solicitar novo link", - "onboarding.page.requestTrial.title": "Solicitar <1>Teste de 30 dias", - "onboarding.page.requestTrial.subtitle": "Experimento nosso melhor plano Enterprise Edition grátis por 30 dias", - "onboarding.page.magicLinkEmail.title": "Nós enviamos um link de login por e-mail", - "onboarding.page.magicLinkEmail.subtitle": "Clique no link no e-mail que enviamos para iniciar sessão em seu espaço de trabalho. <1>O link vai expirar em 30 minutos.", - "onboarding.form.adminInfoForm.title": "Informação administrativa", - "onboarding.form.adminInfoForm.subtitle": "Precisamos disso para criar um perfil de administração dentro do seu espaço de trabalho.", - "onboarding.form.adminInfoForm.fields.fullName.label": "Nome completo", - "onboarding.form.adminInfoForm.fields.fullName.placeholder": "Primeiro e último nome", - "onboarding.form.adminInfoForm.fields.username.label": "Nome de usuário", - "onboarding.form.adminInfoForm.fields.username.placeholder": "@username", - "onboarding.form.adminInfoForm.fields.email.label": "E-mail", - "onboarding.form.adminInfoForm.fields.email.placeholder": "E-mail", - "onboarding.form.adminInfoForm.fields.password.label": "Senha", - "onboarding.form.adminInfoForm.fields.password.placeholder": "Criar senha", - "onboarding.form.adminInfoForm.fields.keepPosted.label": "Mantenha-me informado sobre as atualizações do Rocket.Chat", - "onboarding.form.organizationInfoForm.title": "Informações da organização", - "onboarding.form.organizationInfoForm.subtitle": "Tenha paciência conosco. Estas informações nos ajudarão a personalizar seu espaço de trabalho.", - "onboarding.form.organizationInfoForm.fields.organizationName.label": "Nome da organização", - "onboarding.form.organizationInfoForm.fields.organizationName.placeholder": "Nome da organização", - "onboarding.form.organizationInfoForm.fields.organizationType.label": "Tipo de organização", - "onboarding.form.organizationInfoForm.fields.organizationType.placeholder": "Selecionar", - "onboarding.form.organizationInfoForm.fields.organizationIndustry.label": "Setor da organização", - "onboarding.form.organizationInfoForm.fields.organizationIndustry.placeholder": "Selecionar", - "onboarding.form.organizationInfoForm.fields.organizationSize.label": "Tamanho da organização", - "onboarding.form.organizationInfoForm.fields.organizationSize.placeholder": "Selecionar", - "onboarding.form.organizationInfoForm.fields.country.label": "País", - "onboarding.form.organizationInfoForm.fields.country.placeholder": "Selecionar", - "onboarding.form.registeredServerForm.title": "Registre seu servidor", - "onboarding.form.registeredServerForm.included.push": "Notificações push móveis", - "onboarding.form.registeredServerForm.included.externalProviders": "Integração com provedores externos (WhatsApp, Facebook, Telegram, Twitter)", - "onboarding.form.registeredServerForm.included.apps": "Acesso a aplicativos de Marketplace", - "onboarding.form.registeredServerForm.fields.accountEmail.inputLabel": "E-mail da conta da nuvem", - "onboarding.form.registeredServerForm.fields.accountEmail.inputPlaceholder": "Insira seu e-mail", - "onboarding.form.registeredServerForm.keepInformed": "Mantenha-me informado sobre notícias e eventos", - "onboarding.form.standaloneServerForm.title": "Confirmação de servidor standalone", - "onboarding.form.standaloneServerForm.servicesUnavailable": "Alguns dos serviços estarão indisponíveis ou precisarão de configuração manual", - "onboarding.form.standaloneServerForm.publishOwnApp": "Para enviar notificações de push, você precisará compilar e publicar seu próprio aplicativo no Google Play e App Store", - "onboarding.form.standaloneServerForm.manuallyIntegrate": "É necessário integrar manualmente com serviços externos", "Conversations_by_agents": "Conversas por agente", "Conversations_by_channel": "Conversar por canal", "Conversations_by_department": "Conversas por departamento", @@ -4983,5 +4910,7 @@ "RegisterWorkspace_Features_Marketplace_Title": "Marketplace", "RegisterWorkspace_Features_Omnichannel_Title": "Omnichannel", "RegisterWorkspace_Setup_Label": "E-mail da conta da nuvem", - "cloud.RegisterWorkspace_Setup_Terms_Privacy": "Eu concordo com os <1>Termos e condições e a <3>Política de privacidade" + "cloud.RegisterWorkspace_Setup_Terms_Privacy": "Eu concordo com os <1>Termos e condições e a <3>Política de privacidade", + "UpgradeToGetMore_engagement-dashboard_Title": "Analytics", + "UpgradeToGetMore_auditing_Title": "Auditoria de mensagem" } diff --git a/apps/meteor/packages/rocketchat-i18n/i18n/pt.i18n.json b/apps/meteor/packages/rocketchat-i18n/i18n/pt.i18n.json index 7fe110f038ee..72a3bf417bde 100644 --- a/apps/meteor/packages/rocketchat-i18n/i18n/pt.i18n.json +++ b/apps/meteor/packages/rocketchat-i18n/i18n/pt.i18n.json @@ -1172,7 +1172,6 @@ "Enter_Normal": "Modo normal (enviar com Enter)", "Enter_to": "Clique ( Enter )para", "Enter_your_E2E_password": "Digite sua senha E2E", - "Enterprise": "Empreendimento", "Entertainment": "Entretenimento", "Error": "Erro", "Error_404": "Erro:404", @@ -3174,5 +3173,6 @@ "registration.component.form.reasonToJoin": "Razão para se juntar", "registration.component.form.invalidConfirmPass": "A confirmação da senha não é igual à senha", "registration.component.form.confirmPassword": "Confirmar a senha", - "registration.component.form.sendConfirmationEmail": "Enviar email de confirmação" -} + "registration.component.form.sendConfirmationEmail": "Enviar email de confirmação", + "UpgradeToGetMore_engagement-dashboard_Title": "Analytics" +} \ No newline at end of file diff --git a/apps/meteor/packages/rocketchat-i18n/i18n/ro.i18n.json b/apps/meteor/packages/rocketchat-i18n/i18n/ro.i18n.json index 9f1326ebca11..ba36c951eee0 100644 --- a/apps/meteor/packages/rocketchat-i18n/i18n/ro.i18n.json +++ b/apps/meteor/packages/rocketchat-i18n/i18n/ro.i18n.json @@ -974,7 +974,6 @@ "Enter_name_here": "Introdu numele aici", "Enter_Normal": "Modul normal (trimiteți cu Enter)", "Enter_to": "Enter pentru a", - "Enterprise": "Afacere", "Entertainment": "Divertisment", "Error": "Eroare", "Error_404": "Eroare 404", @@ -2752,5 +2751,6 @@ "registration.component.form.reasonToJoin": "Motivul de a te alătura", "registration.component.form.invalidConfirmPass": "Confirmarea parolei nu se potrivește cu parola introdusă", "registration.component.form.confirmPassword": "Confirmați parola", - "registration.component.form.sendConfirmationEmail": "Trimite email de confirmare" + "registration.component.form.sendConfirmationEmail": "Trimite email de confirmare", + "UpgradeToGetMore_engagement-dashboard_Title": "Analytics" } \ No newline at end of file diff --git a/apps/meteor/packages/rocketchat-i18n/i18n/ru.i18n.json b/apps/meteor/packages/rocketchat-i18n/i18n/ru.i18n.json index 48557a3a146e..a430149e6a6b 100644 --- a/apps/meteor/packages/rocketchat-i18n/i18n/ru.i18n.json +++ b/apps/meteor/packages/rocketchat-i18n/i18n/ru.i18n.json @@ -471,6 +471,7 @@ "App_Details": "Сведения о приложении", "App_Info": "Информация о приложении", "App_Information": "Информация о приложении", + "Apps_context_enterprise": "Организация", "App_Installation": "Установка приложения", "App_not_enabled": "Приложение не включено", "App_not_found": "Приложение не найдено", @@ -480,6 +481,7 @@ "App_status_error_disabled": "Отключено: неизвестная ошибка", "App_status_initialized": "Инициализировано", "App_status_invalid_license_disabled": "Отключено: недействительная лицензия", + "Apps_disabled_when_Enterprise_trial_ended": "Приложения отключены по окончании пробной версии Enterprise", "App_status_invalid_settings_disabled": "Отключено: требуется конфигурация", "App_status_manually_disabled": "Отключено: вручную", "App_status_manually_enabled": "Включено", @@ -497,7 +499,6 @@ "Apply": "Подать заявление", "Apply_and_refresh_all_clients": "Применить", "Apps": "Приложения", - "Apps_context_enterprise": "Организация", "Apps_context_installed": "Установлен", "Apps_context_requested": "Запрошено", "Apps_context_private": "Приватные приложения", @@ -506,7 +507,6 @@ "Private_Apps_Count_Enabled": "{{count}} приватное приложение включено", "Private_Apps_Count_Enabled_plural": "{{count}} приватных приложений включено", "Apps_Count_Enabled_tooltip": "В рабочих пространствах Community Edition можно использовать до {{number}} {{context}} приложений", - "Apps_disabled_when_Enterprise_trial_ended": "Приложения отключены по окончании пробной версии Enterprise", "Apps_Engine_Version": "Версия движка приложений", "Apps_Essential_Alert": "Это приложение необходимо для следующих событий:", "Apps_Essential_Disclaimer": "Перечисленные выше события будут прерваны, если это приложение будет отключено. Если вы хотите, чтобы Rocket.Chat работал без функциональности этого приложения, вам необходимо его удалить", @@ -768,6 +768,7 @@ "Broadcasting_media_server_url": "URL-адрес трансляционного медиа-сервера", "Browse_Files": "Просмотр файлов", "Browser_does_not_support_audio_element": "Ваш браузер не поддерживает звуковой элемент.", + "Call_number_enterprise_only": "Вызов номера (Только для ЕЕ)", "Browser_does_not_support_video_element": "Ваш браузер не поддерживает видео элемент.", "Browser_does_not_support_recording_video": "Ваш браузер не поддерживает запись видео", "Bugsnag_api_key": "Ключ Bugsnag API", @@ -803,7 +804,6 @@ "Call_provider": "Поставщик вызовов", "Call_Already_Ended": "Вызов уже завершен", "Call_number": "Вызов номера", - "Call_number_enterprise_only": "Вызов номера (Только для ЕЕ)", "call-management": "Управление вызовами", "call-management_description": "Разрешение на начало собрания", "Call_ongoing": "Звонок продолжается", @@ -1705,7 +1705,10 @@ "email_plain_text_only": "Отправлять только обычные текстовые сообщения", "email_style_description": "Избегать вложенных селекторов", "email_style_label": "Стиль электронной почты", + "Enterprise_Description": "Вручную обновите лицензию Enterprise.", "Email_subject": "Тема", + "Enterprise_License": "Корпоративная лицензия", + "Enterprise_License_Description": "Если ваше рабочее пространство зарегистрировано и лицензия предоставлена Rocket.Chat Cloud, вам не нужно вручную обновлять лицензию здесь.", "Email_verified": "Адрес электронной почты подтверждён", "Email_sent": "Письмо отправлено", "Emoji": "Эмодзи ", @@ -1759,10 +1762,6 @@ "Enter_Normal": "Обычный режим (отправка по Enter)", "Enter_to": "Войти в", "Enter_your_E2E_password": "Введите пароль E2E", - "Enterprise": "Корпорация", - "Enterprise_Description": "Вручную обновите лицензию Enterprise.", - "Enterprise_License": "Корпоративная лицензия", - "Enterprise_License_Description": "Если ваше рабочее пространство зарегистрировано и лицензия предоставлена Rocket.Chat Cloud, вам не нужно вручную обновлять лицензию здесь.", "Entertainment": "Развлечения", "Error": "Ошибка", "Error_something_went_wrong": "Ой! Что-то пошло не так. Пожалуйста, перезагрузите страницу или обратитесь к администратору.", @@ -2074,6 +2073,7 @@ "FileUpload_S3_Proxy_Avatars_Description": "Передача файлов прокси-сервера через ваш сервер вместо прямого доступа к URL-адресу ресурса", "FileUpload_S3_Proxy_Uploads": "Загрузка прокси", "FileUpload_S3_Proxy_Uploads_Description": "Передача файлов прокси-сервера через ваш сервер вместо прямого доступа к URL-адресу актива", + "Hold_Call_EE_only": "Удержание вызова (Только для ЕЕ)", "FileUpload_S3_Region": "Регион", "FileUpload_S3_SignatureVersion": "Версия подписи", "FileUpload_S3_URLExpiryTimeSpan": "Время истечения срока действия URL-адресов", @@ -2167,7 +2167,6 @@ "Global_Search": "Общий поиск", "Go_to_your_workspace": "Перейти в рабочее пространство", "Hold_Call": "Удерживать вызов", - "Hold_Call_EE_only": "Удержание вызова (Только для ЕЕ)", "GoogleCloudStorage": "Google Cloud Storage", "GoogleNaturalLanguage_ServiceAccount_Description": "Учетная запись ключа JSON файла. Больше информации можно найти здесь [here](https://cloud.google.com/natural-language/docs/common/auth#set_up_a_service_account)", "GoogleTagManager_id": "Идентификатор Google Tag Manager ", @@ -2569,7 +2568,6 @@ "LDAP_DataSync_Roles": "Синхронизировать роли", "LDAP_DataSync_Channels": "Синхронизировать каналы", "LDAP_DataSync_Teams": "Синхронизировать рабочие группы", - "LDAP_Enterprise": "Организация", "LDAP_DataSync_BackgroundSync": "Фоновая синхронизация", "LDAP_Server_Type": "Тип сервера", "LDAP_Server_Type_AD": "Active Directory", @@ -3030,6 +3028,7 @@ "Message_HideType_subscription_role_removed": "Скрыть сообщения \"Роль больше не определена\"", "Message_HideType_uj": "Не показывать сообщение \"Пользователь присоединился к чату\"", "Message_HideType_ujt": "Скрыть сообщения \"Пользователь присоединился к рабочей группе\"", + "New_Call_Enterprise_Edition_Only": "Новый звонок (Только для ЕЕ)", "Message_HideType_ul": "Не показывать сообщение \"Пользователь покинул чат\"", "Message_HideType_ult": "Скрыть сообщения \"Пользователь вышел из рабочей группы\"", "Message_HideType_user_added_room_to_team": "Скрыть сообщения \"Пользователь добавил комнату в рабочую группу\"", @@ -3160,7 +3159,6 @@ "New_Application": "Новое приложение", "New_Business_Hour": "Новые рабочие часы", "New_Call": "Новый звонок", - "New_Call_Enterprise_Edition_Only": "Новый звонок (Только для ЕЕ)", "New_chat_in_queue": "Новый чат в очереди", "New_chat_priority": "Приоритет изменен: {{user}} изменил приоритет на {{priority}}", "New_chat_transfer": "Новый чат-трансфер: {{transfer}}", @@ -3808,7 +3806,6 @@ "SAML_AuthnRequest_Template": "Шаблон AuthnRequest", "SAML_AuthnRequest_Template_Description": "Доступны следующие переменные: \n- **\\_\\_\\_newId\\_\\_**: Случайно сгенерированная строка идентификатора \n- **\\_\\_\\_\\_стоянная\\_\\_**: Текущая метка времени \n- **\\_\\_callbackUrl\\_\\_**: URL обратного вызова Rocket.Chat. \n- **\\_\\_entryPoint\\_\\_**: Значение параметра {{Custom Entry Point}}. \n- **\\_\\_\\_\\_issuer\\_\\_**: Значение параметра {{Custom Issuer}}. \n- **\\_\\_identifierFormatTag\\_\\_**: Содержимое шаблона {{NameID Policy Template}}, если настроен действительный {{Identifier Format}}. \n- **\\_\\_identifierFormat\\_\\_**: Значение параметра __Формат_идентификатора__. \n- **\\_\\_authnContextTag\\_\\_**: Содержимое шаблона __Автоконтекста__, если настроен действительный __Настроенный Автоконтекст__. \n- **\\_\\_authnContextComparison\\_\\_**: Значение параметра __Сравнение контекстов_. \n- **\\_\\_authnContext\\_\\_**: Значение параметра {{Custom Authn Context}}.", "SAML_Connection": "Подключение", - "SAML_Enterprise": "Организация", "SAML_General": "Общее", "SAML_Custom_Authn_Context": "Пользовательский контекст Authn", "SAML_Custom_Authn_Context_Comparison": "Сравнение контекста Authn", @@ -4280,8 +4277,12 @@ "Teams_Search_teams": "Поиск Команд", "Teams_New_Read_only_Label": "Только для чтения", "Technology_Services": "Технологические услуги", + "Upgrade_tab_connection_error_description": "Кажется у вас нет подключения к интернету. Это возможно потому, что ваш воркспейс развернут на полностью защищенном изолированном сервере.", "Terms": "Условия", + "Upgrade_tab_connection_error_restore": "Восстановите подключение, чтобы узнать у всех возможностях, которые вы упускаете.", "Test_Connection": "Проверка соединения", + "Upgrade_tab_go_fully_featured": "Полнофункциональная версия", + "Upgrade_tab_trial_guide": "Руководство по пробному периоду", "Test_Desktop_Notifications": "Тест десктопных уведомлений", "Test_LDAP_Search": "Проверить поиск по LDAP", "test-admin-options": "Проверка настроек административной панели таких как вход по LDAP и мобильные уведомления", @@ -4438,7 +4439,6 @@ "Transcript_message": "Показать это сообщение, когда спрашиваем про получение переписке", "Transcript_of_your_livechat_conversation": "Ваши переписки в Livechat.", "Transcript_Request": "Запрос стенограммы", - "onboarding.form.registeredServerForm.continueStandalone": "Продолжить в автономном режиме", "transfer-livechat-guest": "Трансфер гостей Livechat", "transfer-livechat-guest_description": "Разрешение на перевод гостей Livechat", "Transferred": "Переведено", @@ -4546,10 +4546,6 @@ "Update_to_version": "Обновить до {{version}}", "Update_your_RocketChat": "Обновите ваш Rocket.Chat", "Updated_at": "Обновлено в", - "Upgrade_tab_connection_error_description": "Кажется у вас нет подключения к интернету. Это возможно потому, что ваш воркспейс развернут на полностью защищенном изолированном сервере.", - "Upgrade_tab_connection_error_restore": "Восстановите подключение, чтобы узнать у всех возможностях, которые вы упускаете.", - "Upgrade_tab_go_fully_featured": "Полнофункциональная версия", - "Upgrade_tab_trial_guide": "Руководство по пробному периоду", "Upgrade_tab_upgrade_your_plan": "Улучшить ваш план", "Upload": "Загрузить", "Uploads": "Загрузки", @@ -4759,6 +4755,7 @@ "view-l-room": "Просматривать LiveChat комнаты", "view-l-room_description": "Разрешение на просмотр LiveChat комнат", "view-livechat-analytics": "Просмотр Livechat Analytics", + "onboarding.page.awaitingConfirmation.subtitle": "Мы отправили вам электронное письмо по адресу {{emailAddress}} со ссылкой для подтверждения. Убедитесь, что указанный ниже код безопасности совпадает с кодом, указанным в письме.", "view-livechat-analytics_description": "Разрешение на просмотр аналитики Livechat", "view-livechat-appearance": "Просмотр внешний вид Omnichannel", "view-livechat-appearance_description": "Разрешение на просмотр внешнего вида Livechat", @@ -5001,76 +4998,6 @@ "registration.component.form.confirmation": "Подтверждение", "registration.component.form.sendConfirmationEmail": "Отправить электронное письмо с подтверждением", "registration.component.form.register": "Зарегистрироваться", - "onboarding.component.form.requiredField": "Это обязательное поле", - "onboarding.component.form.steps": "Шаг {{currentStep}} из {{stepCount}}", - "onboarding.component.form.action.back": "Назад", - "onboarding.component.form.action.next": "Далее", - "onboarding.component.form.action.skip": "Пропустить этот шаг", - "onboarding.component.form.action.register": "Зарегистрироваться", - "onboarding.component.form.action.confirm": "Подтвердить", - "onboarding.component.form.termsAndConditions": "Я принимаю <1>Положения и условия и <3>Политику конфиденциальности", - "onboarding.component.emailCodeFallback": "Не получили электронное письмо? <1>Отправить повторно или <3>Изменить адрес электронной почты", - "onboarding.page.form.title": "<1>Запустим ваше рабочее пространство", - "onboarding.page.awaitingConfirmation.title": "Ожидает подтверждения", - "onboarding.page.awaitingConfirmation.subtitle": "Мы отправили вам электронное письмо по адресу {{emailAddress}} со ссылкой для подтверждения. Убедитесь, что указанный ниже код безопасности совпадает с кодом, указанным в письме.", - "onboarding.page.emailConfirmed.title": "Адрес электронной почты подтвержден!", - "onboarding.page.emailConfirmed.subtitle": "Вы можете вернуться в приложение Rocket.Chat — мы уже запустили ваше рабочее пространство.", - "onboarding.page.checkYourEmail.title": "Проверьте адрес электронной почты", - "onboarding.page.checkYourEmail.subtitle": "Запрос успешно отправлен.<1>Проверьте папку \"Входящие\" своего почтового ящика, чтобы запустить пробную версию для организаций.<1>Срок действия ссылки истечет через 30 минут.", - "onboarding.page.confirmationProcess.title": "Выполняется подтверждение", - "onboarding.page.cloudDescription.title": "Запустим ваше рабочее пространство и <1>пробную версию на 14 дней", - "onboarding.page.cloudDescription.tryGold": "Попробуйте наш лучший план Gold в течение 14 дней бесплатно", - "onboarding.page.cloudDescription.numberOfIntegrations": "1000 интеграций", - "onboarding.page.cloudDescription.availability": "Высокая доступность", - "onboarding.page.cloudDescription.auditing": "Панель аудита сообщений/журналы аудита", - "onboarding.page.cloudDescription.engagement": "Панель мониторинга взаимодействия", - "onboarding.page.cloudDescription.ldap": "Расширенная синхронизация LDAP", - "onboarding.page.cloudDescription.omnichannel": "Омниканальный премиум", - "onboarding.page.cloudDescription.sla": "Соглашение об уровне обслуживания: премиум", - "onboarding.page.cloudDescription.push": "Защищенные push-уведомления", - "onboarding.page.cloudDescription.goldIncludes": "* План Golden включает в себя все функции других планов", - "onboarding.page.alreadyHaveAccount": "Уже есть учетная запись? <1>Управляйте своими рабочими пространствами.", - "onboarding.page.invalidLink.title": "Ваша ссылка больше не действительна", - "onboarding.page.invalidLink.content": "Похоже, вы уже использовали ссылку с приглашением. Она создана для единого входа. Запросите новую ссылку, чтобы присоединиться к рабочему пространству.", - "onboarding.page.invalidLink.button.text": "Запросить новую ссылку", - "onboarding.page.requestTrial.title": "Запросить <1>пробную версию на 30 дней", - "onboarding.page.requestTrial.subtitle": "Воспользуйтесь нашим лучшим тарифным планом Enterprise Edition в течение 30 дней бесплатно", - "onboarding.page.magicLinkEmail.title": "Мы отправили вам ссылку для входа в систему в электронном письме", - "onboarding.page.magicLinkEmail.subtitle": "Нажмите на ссылку в электронном письме, чтобы войти в свое рабочее пространство. <1>Срок действия ссылки истечет через 30 минут.", - "onboarding.form.adminInfoForm.title": "Информация об администраторе", - "onboarding.form.adminInfoForm.subtitle": "Это необходимо для создания профиля администратора в вашем рабочем пространстве", - "onboarding.form.adminInfoForm.fields.fullName.label": "Полное имя", - "onboarding.form.adminInfoForm.fields.fullName.placeholder": "Имя и фамилия", - "onboarding.form.adminInfoForm.fields.username.label": "Имя пользователя", - "onboarding.form.adminInfoForm.fields.username.placeholder": "@имя пользователя", - "onboarding.form.adminInfoForm.fields.email.label": "Электронная почта", - "onboarding.form.adminInfoForm.fields.email.placeholder": "Электронная почта", - "onboarding.form.adminInfoForm.fields.password.label": "Пароль", - "onboarding.form.adminInfoForm.fields.password.placeholder": "Создать пароль", - "onboarding.form.adminInfoForm.fields.keepPosted.label": "Сообщайте мне информацию об обновлениях Rocket.Chat", - "onboarding.form.organizationInfoForm.title": "Информация об организации", - "onboarding.form.organizationInfoForm.subtitle": "Оставайтесь с нами. Эта информация поможет нам персонализировать ваше рабочее пространство", - "onboarding.form.organizationInfoForm.fields.organizationName.label": "Название организации", - "onboarding.form.organizationInfoForm.fields.organizationName.placeholder": "Название организации", - "onboarding.form.organizationInfoForm.fields.organizationType.label": "Тип организации", - "onboarding.form.organizationInfoForm.fields.organizationType.placeholder": "Выбрать", - "onboarding.form.organizationInfoForm.fields.organizationIndustry.label": "Отрасль организации", - "onboarding.form.organizationInfoForm.fields.organizationIndustry.placeholder": "Выбрать", - "onboarding.form.organizationInfoForm.fields.organizationSize.label": "Размер организации", - "onboarding.form.organizationInfoForm.fields.organizationSize.placeholder": "Выбрать", - "onboarding.form.organizationInfoForm.fields.country.label": "Страна", - "onboarding.form.organizationInfoForm.fields.country.placeholder": "Выбрать", - "onboarding.form.registeredServerForm.title": "Зарегистрируйте сервер", - "onboarding.form.registeredServerForm.included.push": "Push-уведомления на мобильных устройствах", - "onboarding.form.registeredServerForm.included.externalProviders": "Интеграция с внешними поставщиками (WhatsApp, Facebook, Telegram, Twitter)", - "onboarding.form.registeredServerForm.included.apps": "Доступ к приложениям магазина", - "onboarding.form.registeredServerForm.fields.accountEmail.inputLabel": "Адрес электронной почты учетной записи в облаке", - "onboarding.form.registeredServerForm.fields.accountEmail.inputPlaceholder": "Введите адрес электронной почты", - "onboarding.form.registeredServerForm.keepInformed": "Сообщайте мне новости и информацию о событиях", - "onboarding.form.standaloneServerForm.title": "Подтверждение автономного сервера", - "onboarding.form.standaloneServerForm.servicesUnavailable": "Некоторые сервисы будут недоступны или потребуется ручная настройка", - "onboarding.form.standaloneServerForm.publishOwnApp": "Чтобы отправлять push-уведомления, необходимо создать и опубликовать собственное приложение в Google Play и App Store", - "onboarding.form.standaloneServerForm.manuallyIntegrate": "Необходимо вручную выполнить интеграцию с внешними сервисами", "Theme_light": "Светлая", "Theme_dark": "Темная", "Theme_match_system": "Системная", @@ -5092,5 +5019,7 @@ "RegisterWorkspace_Features_Omnichannel_Title": "Настройки Omnichannel", "RegisterWorkspace_Setup_Label": "Адрес электронной почты учетной записи в облаке", "cloud.RegisterWorkspace_Setup_Terms_Privacy": "Я принимаю <1>Положения и условия и <3>Политику конфиденциальности", - "Theme_Appearence": "Внешний вид" -} \ No newline at end of file + "Theme_Appearence": "Внешний вид", + "UpgradeToGetMore_engagement-dashboard_Title": "Аналитика", + "UpgradeToGetMore_auditing_Title": "Аудит сообщений" +} diff --git a/apps/meteor/packages/rocketchat-i18n/i18n/sk-SK.i18n.json b/apps/meteor/packages/rocketchat-i18n/i18n/sk-SK.i18n.json index dd4830288374..2f06da10fa21 100644 --- a/apps/meteor/packages/rocketchat-i18n/i18n/sk-SK.i18n.json +++ b/apps/meteor/packages/rocketchat-i18n/i18n/sk-SK.i18n.json @@ -959,6 +959,7 @@ "Email_Placeholder": "Prosím, zadajte svoju e-mailovú adresu...", "Email_Placeholder_any": "Zadajte e-mailové adresy ...", "Email_subject": "predmet", + "Enterprise_License": "Enterprise licencia", "Email_verified": "E-mail bol overený", "Emoji": "Emoji", "EmojiCustomFilesystem": "Vlastný súborový systém Emoji", @@ -981,8 +982,6 @@ "Enter_name_here": "Tu zadajte názov", "Enter_Normal": "Normálny režim (odoslať pomocou Enter)", "Enter_to": "Zadajte do", - "Enterprise": "podnik", - "Enterprise_License": "Enterprise licencia", "Entertainment": "zábava", "Error": "Chyba", "Error_404": "Chyba: 404", @@ -2762,5 +2761,6 @@ "registration.component.form.reasonToJoin": "Dôvod pripojenia", "registration.component.form.invalidConfirmPass": "Potvrdenie hesla sa nezhoduje s heslom", "registration.component.form.confirmPassword": "Potvrďte svoje heslo", - "registration.component.form.sendConfirmationEmail": "Pošlite potvrdzovací e-mail" + "registration.component.form.sendConfirmationEmail": "Pošlite potvrdzovací e-mail", + "UpgradeToGetMore_engagement-dashboard_Title": "Analytika" } \ No newline at end of file diff --git a/apps/meteor/packages/rocketchat-i18n/i18n/sl-SI.i18n.json b/apps/meteor/packages/rocketchat-i18n/i18n/sl-SI.i18n.json index fb52e11295fe..4e5c27ba319b 100644 --- a/apps/meteor/packages/rocketchat-i18n/i18n/sl-SI.i18n.json +++ b/apps/meteor/packages/rocketchat-i18n/i18n/sl-SI.i18n.json @@ -970,7 +970,6 @@ "Enter_name_here": "Vnesite ime tukaj", "Enter_Normal": "Navadni način (pošljite s tipko enter)", "Enter_to": "Enter za", - "Enterprise": "Podjetje", "Entertainment": "Zabava", "Error": "Napaka", "Error_404": "Napaka: 404", @@ -2742,5 +2741,6 @@ "registration.component.form.reasonToJoin": "Razlog za pridružitev", "registration.component.form.invalidConfirmPass": "Potrditev gesla se ne ujema z geslom", "registration.component.form.confirmPassword": "Potrdi geslo", - "registration.component.form.sendConfirmationEmail": "Pošlji potrditveno e-poštno sporočilo" + "registration.component.form.sendConfirmationEmail": "Pošlji potrditveno e-poštno sporočilo", + "UpgradeToGetMore_engagement-dashboard_Title": "Analiza" } \ No newline at end of file diff --git a/apps/meteor/packages/rocketchat-i18n/i18n/sq.i18n.json b/apps/meteor/packages/rocketchat-i18n/i18n/sq.i18n.json index fdb85c4fe51b..dfc68feb8873 100644 --- a/apps/meteor/packages/rocketchat-i18n/i18n/sq.i18n.json +++ b/apps/meteor/packages/rocketchat-i18n/i18n/sq.i18n.json @@ -974,7 +974,6 @@ "Enter_name_here": "Shkruani emrin këtu", "Enter_Normal": "Modaliteti normal (dërgoni me Enter)", "Enter_to": "Enter për të", - "Enterprise": "Ndërmarrje", "Entertainment": "argëtim", "Error": "gabim", "Error_404": "Error: 404", @@ -2753,5 +2752,6 @@ "registration.component.form.reasonToJoin": "Arsyeja për t'u bashkuar", "registration.component.form.invalidConfirmPass": "Konfirmimi Fjalëkalimi nuk përputhet me fjalëkalimin", "registration.component.form.confirmPassword": "Konfirmoni fjalëkalimin tuaj", - "registration.component.form.sendConfirmationEmail": "Dërgo email konfirmimi" + "registration.component.form.sendConfirmationEmail": "Dërgo email konfirmimi", + "UpgradeToGetMore_engagement-dashboard_Title": "Analitikë" } \ No newline at end of file diff --git a/apps/meteor/packages/rocketchat-i18n/i18n/sr.i18n.json b/apps/meteor/packages/rocketchat-i18n/i18n/sr.i18n.json index 73a4e9f57c4e..150749dde7b1 100644 --- a/apps/meteor/packages/rocketchat-i18n/i18n/sr.i18n.json +++ b/apps/meteor/packages/rocketchat-i18n/i18n/sr.i18n.json @@ -883,7 +883,6 @@ "Enter_name_here": "Овде унесите име", "Enter_Normal": "Нормални режим (пошаљи са Ентер)", "Enter_to": "Ентер да", - "Enterprise": "Предузеће", "Entertainment": "Забава", "Error": "Грешка", "Error_404": "Грешка: 404", @@ -2563,5 +2562,6 @@ "registration.component.form.reasonToJoin": "Разлог за придруживање", "registration.component.form.invalidConfirmPass": "Потврдна лозинка се не поклапа са лозинком", "registration.component.form.confirmPassword": "Потврдите лозинку", - "registration.component.form.sendConfirmationEmail": "Пошаљи потврдну поруку" + "registration.component.form.sendConfirmationEmail": "Пошаљи потврдну поруку", + "UpgradeToGetMore_engagement-dashboard_Title": "Аналитика" } \ No newline at end of file diff --git a/apps/meteor/packages/rocketchat-i18n/i18n/sv.i18n.json b/apps/meteor/packages/rocketchat-i18n/i18n/sv.i18n.json index 5cf724dd49c1..b941eb75d49c 100644 --- a/apps/meteor/packages/rocketchat-i18n/i18n/sv.i18n.json +++ b/apps/meteor/packages/rocketchat-i18n/i18n/sv.i18n.json @@ -471,6 +471,7 @@ "App_Details": "Appdetaljer", "App_Info": "Appinfo", "App_Information": "Appinformation", + "Apps_context_enterprise": "Enterprise", "App_Installation": "Appinstallation", "App_not_enabled": "Appen är inte aktiverad", "App_not_found": "Hittar inte appen", @@ -480,6 +481,7 @@ "App_status_error_disabled": "Inaktiverad: Okänt fel", "App_status_initialized": "initierad", "App_status_invalid_license_disabled": "Inaktiverad: Ogiltig licens", + "Apps_disabled_when_Enterprise_trial_ended": "Appar inaktiverade när Enterprise trial avslutades", "App_status_invalid_settings_disabled": "Inaktiverad: Konfiguration behövs", "App_status_manually_disabled": "Inaktiverad: manuellt", "App_status_manually_enabled": "Aktiverad", @@ -498,7 +500,6 @@ "Apply_and_refresh_all_clients": "Tillämpa och uppdatera alla klienter", "Apps": "Appar", "Apps_context_explore": "Utforska", - "Apps_context_enterprise": "Enterprise", "Apps_context_installed": "Installerad", "Apps_context_requested": "Begärt", "Apps_context_private": "Privata appar", @@ -507,9 +508,8 @@ "Private_Apps_Count_Enabled": "{{count}} privat app aktiverad", "Private_Apps_Count_Enabled_plural": "{{count}} privata appar aktiverade", "Apps_Count_Enabled_tooltip": "Arbetsytorna i Community Edition kan aktivera upp till {{number}} {{context}} appar", - "Apps_disabled_when_Enterprise_trial_ended": "Appar inaktiverade när Enterprise trial avslutades", - "Apps_disabled_when_Enterprise_trial_ended_description": "Arbetsytorna i Community Edition kan ha upp till 5 marknadsplatsappar och 3 privata appar aktiverade. Be din arbetsrumsadministratör att återaktivera appar.", - "Apps_disabled_when_Enterprise_trial_ended_description_admin": "Arbetsytorna i Community Edition kan ha upp till 5 marknadsplatsappar och 3 privata appar aktiverade. Återaktivera de appar du behöver.", + "Apps_disabled_when_Premium_trial_ended_description": "Arbetsytorna i Community Edition kan ha upp till 5 marknadsplatsappar och 3 privata appar aktiverade. Be din arbetsrumsadministratör att återaktivera appar.", + "Apps_disabled_when_Premium_trial_ended_description_admin": "Arbetsytorna i Community Edition kan ha upp till 5 marknadsplatsappar och 3 privata appar aktiverade. Återaktivera de appar du behöver.", "Apps_Engine_Version": "App Engine-version", "Apps_Essential_Alert": "Den här appen behövs för följande händelser:", "Apps_Essential_Disclaimer": "De händelser som anges ovan avbryts om appen inaktiveras. Vill du använda Rocket.Chat utan den här appens funktioner måste du avinstallera den", @@ -782,6 +782,7 @@ "Broadcasting_media_server_url": "URL till medieserver för sändning", "Browse_Files": "Bläddra bland filer", "Browser_does_not_support_audio_element": "Webbläsaren har inte stöd för ljudkomponenten.", + "Call_number_enterprise_only": "Ring upp nummer (endast Enterprise Edition)", "Browser_does_not_support_video_element": "Webbläsaren har inte stöd för videokomponenten.", "Browser_does_not_support_recording_video": "Webbläsaren har inte stöd för videoinspelning", "Bugsnag_api_key": "Bugsnag API-nyckel", @@ -821,7 +822,6 @@ "Call_provider": "Samtalsleverantör", "Call_Already_Ended": "Samtalet har redan avslutats", "Call_number": "Ring upp nummer", - "Call_number_enterprise_only": "Ring upp nummer (endast Enterprise Edition)", "call-management": "Samtalshantering", "call-management_description": "Behörighet att starta ett möte", "Call_ongoing": "Samtal pågår", @@ -1782,13 +1782,21 @@ "Email_notification_show_message": "Visa meddelande i e-postavisering", "Email_Notifications_Change_Disabled": "Rocket.Chat-administratören har inaktiverat e-postaviseringar", "Email_or_username": "Epost eller användarnamn", + "Enterprise_capability": "Enterprise-funktioner", "Email_Placeholder": "Skriv in din e-postadress...", + "Enterprise_capabilities": "Enterprise-funktioner", "Email_Placeholder_any": "Ange e-postadresser...", "email_plain_text_only": "Skicka bara e-postmeddelanden med oformaterad text", + "Enterprise_Departments_description_upgrade": "Arbetsytorna i Community Edition kan bara skapa en avdelning. Uppgradera till Enterprise för att ta bort begränsningar och ge ditt arbetsområde mer kraft.", + "Enterprise_Departments_description_free_trial": "Arbetsytorna i Community Edition kan skapa en avdelning. Starta en kostnadsfri testversion för Enterprise för att skapa flera avdelningar idag!", "email_style_description": "Undvik kapslade väljare", "email_style_label": "E-postformat", + "Enterprise_Description": "Uppdatera Enterprise-licensen manuellt.", "Email_subject": "Ämne", + "Enterprise_License": "Enterprise-licens", + "Enterprise_License_Description": "Om din arbetsyta är registrerad och en licens har tillhandahållits av Rocket.Chat-molnet behöver du inte uppdatera licensen manuellt här.", "Email_verified": "E-post verifierad", + "Enterprise_Only": "Endast Enterprise", "Email_sent": "E-postmeddelandet har skickats", "Emoji": "Emoji", "EmojiCustomFilesystem": "Anpassat emoji-filsystem", @@ -1848,16 +1856,7 @@ "Enter_your_E2E_password": "Ange ditt E2E-lösenord", "Enter_your_password_to_delete_your_account": "Ange ditt lösenord för att radera ditt konto. Detta kan inte göras ogjort.", "Enter_your_username_to_delete_your_account": "Ange ditt användarnamn för att radera ditt konto. Detta kan inte göras ogjort.", - "Enterprise": "Enterprise", - "Enterprise_capability": "Enterprise-funktioner", - "Enterprise_capabilities": "Enterprise-funktioner", - "Enterprise_Departments_title": "Tilldela kunder till köer och förbättra agenternas produktivitet", - "Enterprise_Departments_description_upgrade": "Arbetsytorna i Community Edition kan bara skapa en avdelning. Uppgradera till Enterprise för att ta bort begränsningar och ge ditt arbetsområde mer kraft.", - "Enterprise_Departments_description_free_trial": "Arbetsytorna i Community Edition kan skapa en avdelning. Starta en kostnadsfri testversion för Enterprise för att skapa flera avdelningar idag!", - "Enterprise_Description": "Uppdatera Enterprise-licensen manuellt.", - "Enterprise_License": "Enterprise-licens", - "Enterprise_License_Description": "Om din arbetsyta är registrerad och en licens har tillhandahållits av Rocket.Chat-molnet behöver du inte uppdatera licensen manuellt här.", - "Enterprise_Only": "Endast Enterprise", + "Premium_Departments_title": "Tilldela kunder till köer och förbättra agenternas produktivitet", "Entertainment": "Underhållning", "Error": "Fel", "Error_something_went_wrong": "Ojdå! Något gick fel. Läs in sidan igen eller kontakta en administratör.", @@ -1932,6 +1931,7 @@ "error-invalid-email-address": "Ogiltig e-postadress", "error-invalid-email-inbox": "Ogiltig inkorg för e-post", "error-email-inbox-not-found": "Inkorgen för e-post hittades inte", + "error-this-is-an-ee-feature": "Det här är en funktion för Enterprise Edition", "error-invalid-file-height": "Felaktig filhöjd", "error-invalid-file-type": "Felaktig filtyp", "error-invalid-file-width": "Felaktig filbredd", @@ -2006,7 +2006,6 @@ "error-tags-must-be-assigned-before-closing-chat": "Taggar måste tilldelas innan chatten stängs", "error-the-field-is-required": "Fältet {{field}} krävs.", "error-this-is-not-a-livechat-room": "Detta är inte ett Omnichannel-rum", - "error-this-is-an-ee-feature": "Det här är en funktion för Enterprise Edition", "error-token-already-exists": "Det finns redan en token med det namnet", "error-token-does-not-exists": "Token finns inte", "error-too-many-requests": "Fel, alltför många förfrågningar. Snälla sakta ner. Du måste vänta {{seconds}} sekunder innan du försöker igen.", @@ -2047,6 +2046,7 @@ "Exact": "Exakt", "Example_payload": "Exempel på nyttolast", "Example_s": "Exempel: %s", + "Federation_Matrix_join_public_rooms_is_enterprise": "Gå med i federerade rum är en funktion i Enterprise Edition", "except_pinned": "(förutom de som är pinnade)", "Exclude_Botnames": "Exkludera botar", "Exclude_Botnames_Description": "Sprid inte meddelanden från botar, vars namn matchar det reguljära uttrycket ovan. Om tomt kommer alla meddelanden från botar att spridas.", @@ -2139,7 +2139,6 @@ "Federation_Matrix_losing_privileges_warning": "Du kommer inte att kunna ångra denna åtgärd eftersom du degraderar dig själv. Om du är den sista privilegierade användaren kan du inte återfå dessa privilegier. Vill du fortsätta ändå?", "Federation_Matrix_not_allowed_to_change_moderator": "Du får inte ändra moderatorn", "Federation_Matrix_not_allowed_to_change_owner": "Du får inte byta ägare", - "Federation_Matrix_join_public_rooms_is_enterprise": "Gå med i federerade rum är en funktion i Enterprise Edition", "Field": "Fält", "Field_removed": "Fältet borttaget", "Field_required": "Fält krävs", @@ -2211,10 +2210,12 @@ "FileUpload_S3_BucketURL": "Bucket-URL", "FileUpload_S3_CDN": "CDN-domän för nedladdningar", "FileUpload_S3_ForcePathStyle": "Tvinga stilsökväg", + "Google_Meet_Enterprise_only": "Google Meet (endast Enterprise Edition)", "FileUpload_S3_Proxy_Avatars": "Proxyavatarer", "FileUpload_S3_Proxy_Avatars_Description": "Proxyavatar-filöverföringar via din server istället för direkt tillgång till URL", "FileUpload_S3_Proxy_Uploads": "Proxy-uppladdningar", "FileUpload_S3_Proxy_Uploads_Description": "Proxy överför filöverföringar via din server istället för direkt tillgång till tillgångens URL", + "Hold_Call_EE_only": "Parkera samtal (endast Enterprise Edition)", "FileUpload_S3_Region": "Område", "FileUpload_S3_SignatureVersion": "Signaturversion", "FileUpload_S3_URLExpiryTimeSpan": "URL-sändningstiden", @@ -2269,6 +2270,7 @@ "Forgot_Password_Email": "Klicka på här för att återställa ditt lösenord.", "Forgot_Password_Email_Subject": "[Site_Name] - Återställning av lösenord", "Forgot_password_section": "Glömt lösenord", + "Hold_EE_only": "Spärra (endast Enterprise Edition)", "Format": "Format", "Forward": "Vidarebefodra", "Forward_chat": "Vidarebefodra chatt", @@ -2312,10 +2314,8 @@ "Global_purge_override_warning": "Det finns en global policy för lagring av information. Om du inte väljer \"åsidosätt global lagringspolicy\" kan du bara tillämpa en policy som är strängare än den globala policyn.", "Global_Search": "Global sökning", "Go_to_your_workspace": "Gå till din arbetsyta", - "Google_Meet_Enterprise_only": "Google Meet (endast Enterprise Edition)", "Google_Play": "Google Play", "Hold_Call": "Parkera samtal", - "Hold_Call_EE_only": "Parkera samtal (endast Enterprise Edition)", "GoogleCloudStorage": "Google Cloud Storage", "GoogleNaturalLanguage_ServiceAccount_Description": "JSON-fil för tjänstekontonyckel. Mer information finns [här] (https://cloud.google.com/natural-language/docs/common/auth#set_up_a_service_account)", "GoogleTagManager_id": "Google Tag manager id", @@ -2371,7 +2371,6 @@ "History": "Historik", "Hold_Time": "Spärrtid", "Hold": "Spärra", - "Hold_EE_only": "Spärra (endast Enterprise Edition)", "Home": "Hem", "Homepage": "Hemsida", "Homepage_Custom_Content_Default_Message": "Administratörer kan lägga in html-innehåll som ska återges i detta vita utrymme.", @@ -2765,7 +2764,6 @@ "LDAP_DataSync_Roles": "Synkronisera roller", "LDAP_DataSync_Channels": "Synkronisera Channel", "LDAP_DataSync_Teams": "Synkronisera team", - "LDAP_Enterprise": "Enterprise", "LDAP_DataSync_BackgroundSync": "Synkronisering i bakgrunden", "LDAP_Server_Type": "Servertyp", "LDAP_Server_Type_AD": "Active Directory", @@ -3023,16 +3021,28 @@ "Load_Rotation": "Belastningsrotation", "Loading": "Läser in", "Loading_more_from_history": "Laddar mer från historiken", + "marketplace_featured_section_community_featured": "Utvalda communityappar", "Loading_suggestion": "Laddar förslag", + "marketplace_featured_section_community_supported": "Appar som stöds av communityn", "Loading...": "Laddar...", + "marketplace_featured_section_enterprise": "Utvalda Enterprise-sappar", "Local": "Lokal", + "marketplace_featured_section_featured": "Utvalda appar", + "marketplace_featured_section_most_popular": "De populäraste apparna", "Local_Domains": "Lokala domäner", + "marketplace_featured_section_new_arrivals": "Nyheter", "Local_Password": "Lokalt lösenord", + "marketplace_featured_section_popular_this_month": "Populära appar den här månaden ", "Local_Time": "Lokal tid", + "marketplace_featured_section_recommended": "Rekommenderade appar", "Local_Timezone": "Lokal tidszon", + "marketplace_featured_section_social": "Appar för sociala nätverk", "Local_Time_time": "Lokal tid: {{time}}", + "marketplace_featured_section_trending": "Trendande appar", "Localization": "Lokalisering", "Location": "Plats", + "marketplace_featured_section_omnichannel": "Omnichannel-appar", + "marketplace_featured_section_video_conferencing": "Appar för videokonferenser", "Log_Exceptions_to_Channel": "Logga undantag till kanal", "Log_Exceptions_to_Channel_Description": "En kanal som tar emot alla fångade undantag. Lämna tomma för att ignorera undantag.", "Log_File": "Visa fil och rad", @@ -3171,18 +3181,6 @@ "Marketplace_app_last_updated": "Uppdaterades senast {{lastUpdated}}", "Marketplace_view_marketplace": "Visa Marketplace", "Marketplace_error": "Det går inte att ansluta till internet eller så kanske arbetsytan är installerad offline.", - "marketplace_featured_section_community_featured": "Utvalda communityappar", - "marketplace_featured_section_community_supported": "Appar som stöds av communityn", - "marketplace_featured_section_enterprise": "Utvalda Enterprise-sappar", - "marketplace_featured_section_featured": "Utvalda appar", - "marketplace_featured_section_most_popular": "De populäraste apparna", - "marketplace_featured_section_new_arrivals": "Nyheter", - "marketplace_featured_section_popular_this_month": "Populära appar den här månaden ", - "marketplace_featured_section_recommended": "Rekommenderade appar", - "marketplace_featured_section_social": "Appar för sociala nätverk", - "marketplace_featured_section_trending": "Trendande appar", - "marketplace_featured_section_omnichannel": "Omnichannel-appar", - "marketplace_featured_section_video_conferencing": "Appar för videokonferenser", "MAU_value": "MAU {{value}}", "Max_length_is": "Max längd är %s", "Max_number_incoming_livechats_displayed": "Högsta antal objekt som visas i kön", @@ -3293,6 +3291,7 @@ "Message_HideType_subscription_role_removed": "Dölj meddelandet \"Rollen är inte definierad längre\"", "Message_HideType_uj": "Dölj meddelandet \"Användare anslöt\"", "Message_HideType_ujt": "Dölj meddelandet \"Användaren anslöt till teamet\"", + "New_Call_Enterprise_Edition_Only": "Nytt samtal (endast Enterprise Edition)", "Message_HideType_ul": "Dölj meddelanden \"Användare lämnade\"", "Message_HideType_ult": "Dölj meddelandet \"Användaren lämnade teamet\"", "Message_HideType_user_added_room_to_team": "Dölj meddelandet \"Användaren lade till rummet till teamet\"", @@ -3444,7 +3443,6 @@ "New_Application": "Ny applikation", "New_Business_Hour": "Ny kontorstid", "New_Call": "Nytt samtal", - "New_Call_Enterprise_Edition_Only": "Nytt samtal (endast Enterprise Edition)", "New_chat_in_queue": "Ny chatt i kö", "New_chat_priority": "Prioriteten har ändrats: {{user}} ändrade prioriteten till {{priority}}", "New_chat_transfer": "Ny chattöverföring: {{transfer}}", @@ -3528,6 +3526,7 @@ "None": "Ingen", "Nonprofit": "Ideellt", "Not_authorized": "Inte auktoriserad", + "Pexip_Enterprise_only": "Pexip (endast Enterprise Edition)", "Normal": "Normal", "Not_Available": "Inte tillgänglig", "Not_assigned": "Ej tilldelad", @@ -3745,7 +3744,6 @@ "Permalink": "Länka meddelande", "Permissions": "Tillstånd", "Personal_Access_Tokens": "Personliga åtkomsttokens", - "Pexip_Enterprise_only": "Pexip (endast Enterprise Edition)", "Phone": "Telefon", "Phone_call": "Telefonsamtal", "Phone_Number": "Telefonnummer", @@ -4035,6 +4033,7 @@ "request": "förfrågan", "requests": "förfrågningar", "Requests": "Förfrågningar", + "Search_Enterprise_Apps": "Sök efter Enterprise-applikationer", "Requested": "Förfrågat", "Requested_apps_will_appear_here": "Här visas appförfrågningar", "request-pdf-transcript": "Begär PDF-utskrift", @@ -4198,7 +4197,6 @@ "SAML_AuthnRequest_Template": "Mallen AuthnRequest", "SAML_AuthnRequest_Template_Description": "Följande variabler är tillgängliga: \n- **\\_\\_newId\\_\\_**: Slumpmässigt genererad id-sträng \n- **\\_\\_instant\\_\\_**: Aktuell tidsstämpel \n- **\\_\\_callbackUrl\\_\\_**: Återanrops-URL:en för Rocket.Chat. \n- **\\_\\_entryPoint\\_\\_**: Värdet för inställningen {{Custom Entry Point}}. \n- **\\_\\_issuer\\_\\_**: Värdet för inställningen {{Custom Issuer}}. \n- **\\_\\_identifierFormatTag\\_\\_**: Innehållet i {{NameID Policy Template}} om ett giltigt {{Identifier Format}} har konfigurerats. \n- **\\_\\_identifierFormat\\_\\_**: Värdet för inställningen {{Identifier Format}}. \n- **\\_\\_authnContextTag\\_\\_**: Innehållet i {{AuthnContext Template}} om en giltig {{Custom Authn Context}} is har konfigurerats. \n- **\\_\\_authnContextComparison\\_\\_**: Värdet för inställningen {{Authn Context Comparison}}. \n- **\\_\\_authnContext\\_\\_**: Värdet för inställningen {{Custom Authn Context}}.", "SAML_Connection": "Anslutning", - "SAML_Enterprise": "Enterprise", "SAML_General": "Allmänt", "SAML_Custom_Authn_Context": "Anpassad autentiseringskontext", "SAML_Custom_Authn_Context_Comparison": "Jämförelse av autentiseringskontext", @@ -4290,7 +4288,6 @@ "Search": "Sök", "Searchable": "Sökbart", "Search_Apps": "Sök efter appar", - "Search_Enterprise_Apps": "Sök efter Enterprise-applikationer", "Search_Installed_Apps": "Sök efter installerade appar", "Search_Private_apps": "Sök efter privata appar", "Search_Requested_Apps": "Sök efter efterfrågade appar", @@ -4724,9 +4721,13 @@ "Teams_Search_teams": "Sök efter team", "Teams_New_Read_only_Label": "Läs endast", "Technology_Services": "Tekniska tjänster", + "Upgrade_tab_connection_error_description": "Du verkar inte ha någon internetanslutning. Det kan bero på att din arbetsyta är installerad på en komplett skyddad server med airgap-skydd", "Terms": "Villkor", "Terms_of_use": "Användarvillkor", + "Upgrade_tab_connection_error_restore": "Upprätta anslutningen om du vill veta mer om de funktioner du går miste om.", "Test_Connection": "Testa anslutningen", + "Upgrade_tab_go_fully_featured": "Aktivera alla funktioner", + "Upgrade_tab_trial_guide": "Provperiodsguide", "Test_Desktop_Notifications": "Testa skrivbordsnotifieringar", "Test_LDAP_Search": "Testa LDAP-sökning", "test-admin-options": "Testa alternativ på administrationspanelen", @@ -4897,7 +4898,6 @@ "Transcript_message": "Meddelande att visa när du frågar om utskrift", "Transcript_of_your_livechat_conversation": "Utskrift av din Omnichannel-konversation.", "Transcript_Request": "Förfrågan om utskrift", - "onboarding.form.registeredServerForm.continueStandalone": "Fortsätt med fristående", "transfer-livechat-guest": "Överför Livechat-gäster", "transfer-livechat-guest_description": "Behörighet att överföra Livechat-gäster", "Transferred": "Överförda", @@ -5013,10 +5013,6 @@ "Update_to_version": "Uppdatera till {{version}}", "Update_your_RocketChat": "Uppdatera din Rocket.Chat", "Updated_at": "Uppdaterad den", - "Upgrade_tab_connection_error_description": "Du verkar inte ha någon internetanslutning. Det kan bero på att din arbetsyta är installerad på en komplett skyddad server med airgap-skydd", - "Upgrade_tab_connection_error_restore": "Upprätta anslutningen om du vill veta mer om de funktioner du går miste om.", - "Upgrade_tab_go_fully_featured": "Aktivera alla funktioner", - "Upgrade_tab_trial_guide": "Provperiodsguide", "Upgrade_tab_upgrade_your_plan": "Uppgradera ditt abonnemang", "Upload": "Ladda upp", "Uploads": "Uppladdningar", @@ -5264,6 +5260,7 @@ "view-full-other-user-info_description": "Tillstånd att visa fullständig profil för andra användare, inklusive datum för registrering av konto, senaste inloggning etc.", "view-history": "Se historik", "view-history_description": "Tillstånd att visa kanalhistoriken", + "onboarding.component.form.action.registerNow": "Registrera dig nu", "view-join-code": "Visa koden för deltagande", "view-join-code_description": "Tillstånd att se koden för kanalanslutning", "view-joined-room": "Visa anslutna Room", @@ -5271,6 +5268,7 @@ "view-l-room": "Visa Omnichannel Room", "view-l-room_description": "Tillstånd att visa Omnichannel-rum", "view-livechat-analytics": "Visa Omnichannel-analys", + "onboarding.page.awaitingConfirmation.subtitle": "Vi har skickat ett meddelande med en länk för att bekräfta till {{emailAddress}}. Bekräfta att säkerhetskoden nedan matchar den i e-postmeddelandet.", "view-livechat-analytics_description": "Behörighet att visa livechattanalyser", "view-livechat-appearance": "Visa Omnichannel-utseende", "view-livechat-appearance_description": "Behörighet att visa livechattutseende", @@ -5370,8 +5368,10 @@ "Wait_activation_warning": "Innan du kan logga in måste ditt konto aktiveras manuellt av en administratör.", "Waiting_for_answer": "Väntar på svar", "Waiting_queue": "Kö", + "Enterprise_cap_description": "Arbetsytorna i Community Edition för Enterprise har inget tak för närvarotjänsten.", "Waiting_queue_message": "Kömeddelande", "Waiting_queue_message_description": "Meddelande som visas för besökare när de placeras i kön", + "More_about_Enterprise_Edition": "Mer om Enterprise Edition", "Waiting_Time": "Väntetid", "Waiting_for_server_connection": "Väntar på serveranslutning", "Warning": "Varning", @@ -5437,6 +5437,7 @@ "Would_you_like_to_return_the_inquiry": "Vill du skicka tillbaka förfrågan?", "Would_you_like_to_return_the_queue": "Vill du flytta tillbaka rummet till kön? All konversationshistorik behålls för rummet.", "Would_you_like_to_place_chat_on_hold": "Vill du parkera chatten?", + "multiple_instance_solutions": "lösningar med flera instanser", "Wrap_up_the_call": "Avsluta samtalet", "Wrap_Up_Notes": "Avslutningsanteckningar", "Workspace": "Arbetsyta", @@ -5567,79 +5568,6 @@ "registration.component.form.confirmation": "Bekräftelse", "registration.component.form.sendConfirmationEmail": "Skicka e-postbekräftelse", "registration.component.form.register": "Registrera", - "onboarding.component.form.requiredField": "Fältet är obligatoriskt", - "onboarding.component.form.steps": "Steg {{currentStep}} av {{stepCount}}", - "onboarding.component.form.action.back": "Tillbaka", - "onboarding.component.form.action.next": "Nästa", - "onboarding.component.form.action.skip": "Hoppa över det här steget", - "onboarding.component.form.action.register": "Registrera", - "onboarding.component.form.action.registerNow": "Registrera dig nu", - "onboarding.component.form.action.confirm": "Bekräfta", - "onboarding.component.form.termsAndConditions": "Jag godkänner <1>villkoren och <3>integritetspolicyn", - "onboarding.component.emailCodeFallback": "Fick du inget e-postmeddelande? <1>Skicka igen eller <3>ändra e-postadressen", - "onboarding.page.form.title": "Nu <1>startar vi arbetsytan", - "onboarding.page.awaitingConfirmation.title": "Väntar på bekräftelse", - "onboarding.page.awaitingConfirmation.subtitle": "Vi har skickat ett meddelande med en länk för att bekräfta till {{emailAddress}}. Bekräfta att säkerhetskoden nedan matchar den i e-postmeddelandet.", - "onboarding.page.emailConfirmed.title": "E-postadressen har bekräftats.", - "onboarding.page.emailConfirmed.subtitle": "Du kan gå tillbaka till Rocket.Chat-applikationen. Vi har startat din arbetsyta.", - "onboarding.page.checkYourEmail.title": "Titta i inkorgen", - "onboarding.page.checkYourEmail.subtitle": "Din förfrågan har skickats.<1>Titta i inkorgen och starta din testperiod på Enterprise Edition.<1>Länken upphör att gälla om 30 minuter.", - "onboarding.page.confirmationProcess.title": "Bekräftelse pågår", - "onboarding.page.cloudDescription.title": "Låt oss starta din arbetsyta och din <1>14 dagars provperiod", - "onboarding.page.cloudDescription.tryGold": "Testa vårt bästa abonnemang, Gold, 14 dagar utan kostnad", - "onboarding.page.cloudDescription.numberOfIntegrations": "1 000 integreringar", - "onboarding.page.cloudDescription.availability": "Hög tillgänglighet", - "onboarding.page.cloudDescription.auditing": "Panel för meddelandegranskning/granskningsloggar", - "onboarding.page.cloudDescription.engagement": "Infopanel för engagemang", - "onboarding.page.cloudDescription.ldap": "LDAP-förstärkt synkronisering", - "onboarding.page.cloudDescription.omnichannel": "Omnichannel premium", - "onboarding.page.cloudDescription.sla": "Licensavtal: Premium", - "onboarding.page.cloudDescription.push": "Säkra pushmeddelanden", - "onboarding.page.cloudDescription.goldIncludes": "* I Gold-abonnemanget ingår alla funktioner från andra abonnemang", - "onboarding.page.alreadyHaveAccount": "Har du redan ett konto? <1>Hantera dina arbetsytor.", - "onboarding.page.invalidLink.title": "Länken har upphört att gälla", - "onboarding.page.invalidLink.content": "Du verkar redan ha använt inbjudningslänken. Den genereras för en enskild inloggning. Begär en ny för att ansluta till arbetsytan.", - "onboarding.page.invalidLink.button.text": "Begär en ny länk", - "onboarding.page.requestTrial.title": "Begär en <1>30 dagars provperiod", - "onboarding.page.requestTrial.subtitle": "Prova på vårt bästa Enterprise Edition-abonnemang i 30 dagar utan kostnad", - "onboarding.page.magicLinkEmail.title": "Vi har skickat en inloggningslänk via e-post ", - "onboarding.page.magicLinkEmail.subtitle": "Logga in på arbetsytan genom att klicka på länken i e-postmeddelandet vi precis skickade till dig. <1>Länken upphör att gälla om 30 minuter.", - "onboarding.form.adminInfoForm.title": "Information om administratör", - "onboarding.form.adminInfoForm.subtitle": "Vi behöver skapa en administratörsprofil i din arbetsyta", - "onboarding.form.adminInfoForm.fields.fullName.label": "Fullständigt namn", - "onboarding.form.adminInfoForm.fields.fullName.placeholder": "För- och efternamn", - "onboarding.form.adminInfoForm.fields.username.label": "Användarnamn", - "onboarding.form.adminInfoForm.fields.username.placeholder": "@användarnamn", - "onboarding.form.adminInfoForm.fields.email.label": "E-post", - "onboarding.form.adminInfoForm.fields.email.placeholder": "E-post", - "onboarding.form.adminInfoForm.fields.password.label": "Lösenord", - "onboarding.form.adminInfoForm.fields.password.placeholder": "Skapa lösenord", - "onboarding.form.adminInfoForm.fields.keepPosted.label": "Håll mig informerad om Rocket.Chat-uppdateringar", - "onboarding.form.organizationInfoForm.title": "Organisationsinfo", - "onboarding.form.organizationInfoForm.subtitle": "Bara lite till. Vi behöver den här informationen för att anpassa din arbetsyta", - "onboarding.form.organizationInfoForm.fields.organizationName.label": "Organisationsnamn", - "onboarding.form.organizationInfoForm.fields.organizationName.placeholder": "Organisationsnamn", - "onboarding.form.organizationInfoForm.fields.organizationType.label": "Typ av organisation", - "onboarding.form.organizationInfoForm.fields.organizationType.placeholder": "Välj", - "onboarding.form.organizationInfoForm.fields.organizationIndustry.label": "Organisationens bransch", - "onboarding.form.organizationInfoForm.fields.organizationIndustry.placeholder": "Välj", - "onboarding.form.organizationInfoForm.fields.organizationSize.label": "Organisationens storlek", - "onboarding.form.organizationInfoForm.fields.organizationSize.placeholder": "Välj", - "onboarding.form.organizationInfoForm.fields.country.label": "Land", - "onboarding.form.organizationInfoForm.fields.country.placeholder": "Välj", - "onboarding.form.registeredServerForm.title": "Registrera din server", - "onboarding.form.registeredServerForm.included.push": "Mobila push-meddelanden", - "onboarding.form.registeredServerForm.included.externalProviders": "Integrering med externa leverantörer (WhatsApp, Facebook, Telegram, Twitter)", - "onboarding.form.registeredServerForm.included.apps": "Åtkomst till appar i Marketplace", - "onboarding.form.registeredServerForm.fields.accountEmail.inputLabel": "E-postadress för molnkonto", - "onboarding.form.registeredServerForm.fields.accountEmail.inputPlaceholder": "Ange din e-postadress", - "onboarding.form.registeredServerForm.keepInformed": "Håll mig informerad om nyheter och händelser", - "onboarding.form.registeredServerForm.registerLater": "Registrera dig senare", - "onboarding.form.registeredServerForm.notConnectedToInternet": "Servern är inte ansluten till internet, så du måste göra en offline-registrering för den här arbetsytan.", - "onboarding.form.standaloneServerForm.title": "Bekräftelse av fristående server", - "onboarding.form.standaloneServerForm.servicesUnavailable": "Vissa av tjänsterna kommer att vara otillgängliga eller måste ställas in manuellt", - "onboarding.form.standaloneServerForm.publishOwnApp": "Om du ska kunna skicka pushmeddelanden måste du kompilera och publicera din egen app på Google Play och App Store", - "onboarding.form.standaloneServerForm.manuallyIntegrate": "Behöver integrera manuellt med externa tjänster", "Something_Went_Wrong": "Ett fel inträffade", "Toolbox_room_actions": "Primära åtgärder i rum", "Theme_light": "Ljus", @@ -5682,9 +5610,7 @@ "Undo_request": "Ångra förfrågan", "No_permission": "Inget tillstånd", "Community_cap_description": "Arbetsytorna i Community Edition har ett tak på 200 samtidiga anslutningar, även om du kan ha fler anslutningar aktiva, kan du inte se användarnas status när du har nått gränsen. Detta påverkar inte deras förmåga att skicka och ta emot meddelanden.", - "Enterprise_cap_description": "Arbetsytorna i Community Edition för Enterprise har inget tak för närvarotjänsten.", "Service_status": "Status för tjänsten", - "More_about_Enterprise_Edition": "Mer om Enterprise Edition", "Presence_service_cap": "Tak för närvarotjänster", "User_Status": "Användarstatus", "Active_connections": "Aktiva anslutningar", @@ -5750,8 +5676,8 @@ "cloud.RegisterWorkspace_Token_Step_One": "1. Gå till: <1>cloud.rocket.chat > Arbetsytor och klicka på \" <3>Register self-managed\".", "cloud.RegisterWorkspace_Setup_Terms_Privacy": "Jag godkänner <1>villkoren och <3>integritetspolicyn", "Larger_amounts_of_active_connections": "För större mängder aktiva anslutningar kan du överväga vår", - "multiple_instance_solutions": "lösningar med flera instanser", "Uninstall_grandfathered_app": "Avinstallera {{appName}}?", "App_will_lose_grandfathered_status": "**Denna {{context}}-app kommer att förlora sin status som gammal app.** \n \nArbetsytorna i Community Edition kan ha upp till {{limit}} __kontext__-appar aktiverade. Gamla appar inkluderas i gränsen, men gränsen tillämpas inte på dem.", - "Theme_Appearence": "Utseende för tema" -} \ No newline at end of file + "Theme_Appearence": "Utseende för tema", + "UpgradeToGetMore_engagement-dashboard_Title": "Analytics" +} diff --git a/apps/meteor/packages/rocketchat-i18n/i18n/ta-IN.i18n.json b/apps/meteor/packages/rocketchat-i18n/i18n/ta-IN.i18n.json index b1d003f0f85c..8db5552cb7ff 100644 --- a/apps/meteor/packages/rocketchat-i18n/i18n/ta-IN.i18n.json +++ b/apps/meteor/packages/rocketchat-i18n/i18n/ta-IN.i18n.json @@ -974,7 +974,6 @@ "Enter_name_here": "இங்கே பெயரை உள்ளிடுக", "Enter_Normal": "இயல்பான பயன்முறை (உள்ளிடவும்)", "Enter_to": "க்கு சேர்க்கவும்", - "Enterprise": "நிறுவன", "Entertainment": "பொழுதுபோக்கு", "Error": "பிழை", "Error_404": "பிழை: 404", @@ -2757,5 +2756,6 @@ "registration.component.form.reasonToJoin": "சேர காரணம்", "registration.component.form.invalidConfirmPass": "கடவுச்சொல்லை உறுதிப்படுத்தும் கடவுச்சொல் பொருந்தவில்லை", "registration.component.form.confirmPassword": "உங்கள் கடவுச்சொல்லை உறுதிப்படுத்துக", - "registration.component.form.sendConfirmationEmail": "உறுதிப்படுத்தும் மின்னஞ்சல் அனுப்பவும்" + "registration.component.form.sendConfirmationEmail": "உறுதிப்படுத்தும் மின்னஞ்சல் அனுப்பவும்", + "UpgradeToGetMore_engagement-dashboard_Title": "அனலிட்டிக்ஸ்" } \ No newline at end of file diff --git a/apps/meteor/packages/rocketchat-i18n/i18n/th-TH.i18n.json b/apps/meteor/packages/rocketchat-i18n/i18n/th-TH.i18n.json index 21b9d0e62439..86fa8967abc5 100644 --- a/apps/meteor/packages/rocketchat-i18n/i18n/th-TH.i18n.json +++ b/apps/meteor/packages/rocketchat-i18n/i18n/th-TH.i18n.json @@ -972,7 +972,6 @@ "Enter_name_here": "ป้อนชื่อที่นี่", "Enter_Normal": "โหมดปกติ (ส่งพร้อมด้วย Enter)", "Enter_to": "เข้าสู่", - "Enterprise": "องค์กร", "Entertainment": "การบันเทิง", "Error": "ความผิดพลาด", "Error_404": "ข้อผิดพลาด: 404", @@ -2740,5 +2739,6 @@ "registration.component.form.reasonToJoin": "เหตุผลที่เข้าร่วม", "registration.component.form.invalidConfirmPass": "การยืนยันรหัสผ่านไม่ตรงกับรหัสผ่าน", "registration.component.form.confirmPassword": "ยืนยันรหัสผ่านของคุณ", - "registration.component.form.sendConfirmationEmail": "ส่งอีเมลยืนยัน" + "registration.component.form.sendConfirmationEmail": "ส่งอีเมลยืนยัน", + "UpgradeToGetMore_engagement-dashboard_Title": "Analytics" } \ No newline at end of file diff --git a/apps/meteor/packages/rocketchat-i18n/i18n/tr.i18n.json b/apps/meteor/packages/rocketchat-i18n/i18n/tr.i18n.json index 77bad5262630..fcb44774c0d4 100644 --- a/apps/meteor/packages/rocketchat-i18n/i18n/tr.i18n.json +++ b/apps/meteor/packages/rocketchat-i18n/i18n/tr.i18n.json @@ -1185,7 +1185,6 @@ "Enter_Normal": "Normal mod (Enter ile gönder)", "Enter_to": "İçin girin", "Enter_your_E2E_password": "Uçtan uca şifrenizi girin", - "Enterprise": "Kuruluş", "Entertainment": "Eğlence", "Error": "Hata", "Error_404": "Hata:404", @@ -3262,5 +3261,8 @@ "registration.component.form.invalidConfirmPass": "Şifre doğrulaması şifre ile eşleşmiyor", "registration.component.form.confirmPassword": "Parolanızı onaylayın", "registration.component.form.sendConfirmationEmail": "Doğrulama e-postası gönder", - "RegisterWorkspace_Features_Omnichannel_Title": "Çoklu Kanal" + "onboarding.component.form.action.pasteHere": "Buraya yapıştırın...", + "onboarding.form.registerOfflineForm.title": "Manuel Kayıt", + "RegisterWorkspace_Features_Omnichannel_Title": "Çoklu Kanal", + "UpgradeToGetMore_engagement-dashboard_Title": "Mantıksal Analiz" } \ No newline at end of file diff --git a/apps/meteor/packages/rocketchat-i18n/i18n/ug.i18n.json b/apps/meteor/packages/rocketchat-i18n/i18n/ug.i18n.json index e8838c82a80e..57a828f92ffb 100644 --- a/apps/meteor/packages/rocketchat-i18n/i18n/ug.i18n.json +++ b/apps/meteor/packages/rocketchat-i18n/i18n/ug.i18n.json @@ -1242,5 +1242,6 @@ "registration.component.form.submit": "تاپشۇرۇش", "registration.component.form.invalidConfirmPass": "ئىككىنچى قېتىم كىرگۈزۈلگەن مەخپىي نومۇر بىلەن بىرىنچى قېتىم كىرگۈزۈلگىنى بىلەن ماس كەلمىدى.", "registration.component.form.confirmPassword": "مەخپىي نومۇرنى جەزملەشتۈرۈش", - "registration.component.form.sendConfirmationEmail": "جەزملەشتۈرگەن ئىلخەت يوللاندى" + "registration.component.form.sendConfirmationEmail": "جەزملەشتۈرگەن ئىلخەت يوللاندى", + "UpgradeToGetMore_engagement-dashboard_Title": "ئانالىز قىلىش" } \ No newline at end of file diff --git a/apps/meteor/packages/rocketchat-i18n/i18n/uk.i18n.json b/apps/meteor/packages/rocketchat-i18n/i18n/uk.i18n.json index 43f5ecab66a4..7e17116d33f5 100644 --- a/apps/meteor/packages/rocketchat-i18n/i18n/uk.i18n.json +++ b/apps/meteor/packages/rocketchat-i18n/i18n/uk.i18n.json @@ -1256,6 +1256,7 @@ "email_style_description": "Уникайте вкладених селекторів", "email_style_label": "Стиль листа", "Email_subject": "Тема", + "Enterprise_License": "Ліцензія підприємства", "Email_verified": "Електронну адресу підтверджено ", "Emoji": "Emoji", "EmojiCustomFilesystem": "Спеціальна файлова система Emoji", @@ -1289,8 +1290,6 @@ "Enter_Normal": "Нормальний режим (відправляти клавішою \"Enter\")", "Enter_to": "Ввійти в", "Enter_your_E2E_password": "Введіть свій пароль E2E", - "Enterprise": "Підприємство", - "Enterprise_License": "Ліцензія підприємства", "Entertainment": "Розваги", "Error": "Помилка", "Error_404": "Помилка: 404", @@ -3348,5 +3347,8 @@ "registration.component.form.reasonToJoin": "Причина приєднання", "registration.component.form.invalidConfirmPass": "Підтвердження пароля не збігаються пароль", "registration.component.form.confirmPassword": "Підтвердити новий пароль", - "registration.component.form.sendConfirmationEmail": "Надіслати електронною поштою підтвердження" + "registration.component.form.sendConfirmationEmail": "Надіслати електронною поштою підтвердження", + "onboarding.form.registerOfflineForm.title": "Реєстрація вручну", + "UpgradeToGetMore_engagement-dashboard_Title": "Аналітика", + "UpgradeToGetMore_auditing_Title": "Аудит повідомлень" } \ No newline at end of file diff --git a/apps/meteor/packages/rocketchat-i18n/i18n/vi-VN.i18n.json b/apps/meteor/packages/rocketchat-i18n/i18n/vi-VN.i18n.json index 044baaa73720..c7421b1525a1 100644 --- a/apps/meteor/packages/rocketchat-i18n/i18n/vi-VN.i18n.json +++ b/apps/meteor/packages/rocketchat-i18n/i18n/vi-VN.i18n.json @@ -1068,7 +1068,6 @@ "Enter_name_here": "Nhập tên ở đây", "Enter_Normal": "Chế độ thông thường (gửi kèm với Enter)", "Enter_to": "Nhập vào", - "Enterprise": "Doanh nghiệp", "Entertainment": "Giải trí", "Error": "lỗi", "Error_404": "Lỗi: 404", @@ -2851,5 +2850,6 @@ "registration.component.form.reasonToJoin": "Lý do tham gia", "registration.component.form.invalidConfirmPass": "Xác nhận mật khẩu không khớp với mật khẩu", "registration.component.form.confirmPassword": "Xác nhận mật khẩu của bạn", - "registration.component.form.sendConfirmationEmail": "Gửi email xác nhận" + "registration.component.form.sendConfirmationEmail": "Gửi email xác nhận", + "UpgradeToGetMore_engagement-dashboard_Title": "phân tích" } \ No newline at end of file diff --git a/apps/meteor/packages/rocketchat-i18n/i18n/zh-HK.i18n.json b/apps/meteor/packages/rocketchat-i18n/i18n/zh-HK.i18n.json index 18c3d1f9548e..b34e924da9ae 100644 --- a/apps/meteor/packages/rocketchat-i18n/i18n/zh-HK.i18n.json +++ b/apps/meteor/packages/rocketchat-i18n/i18n/zh-HK.i18n.json @@ -995,7 +995,6 @@ "Enter_name_here": "在此输入姓名", "Enter_Normal": "普通模式(使用回车发送)", "Enter_to": "进入", - "Enterprise": "企业", "Entertainment": "娱乐", "Error": "错误", "Error_404": "错误:404", @@ -2772,5 +2771,6 @@ "registration.component.form.reasonToJoin": "加入的理由", "registration.component.form.invalidConfirmPass": "第二次密码输入与第一次不匹配", "registration.component.form.confirmPassword": "确认密码", - "registration.component.form.sendConfirmationEmail": "已发送确认电子邮件" + "registration.component.form.sendConfirmationEmail": "已发送确认电子邮件", + "UpgradeToGetMore_engagement-dashboard_Title": "分析" } \ No newline at end of file diff --git a/apps/meteor/packages/rocketchat-i18n/i18n/zh-TW.i18n.json b/apps/meteor/packages/rocketchat-i18n/i18n/zh-TW.i18n.json index 24dedfcf33e7..7950e0b8b588 100644 --- a/apps/meteor/packages/rocketchat-i18n/i18n/zh-TW.i18n.json +++ b/apps/meteor/packages/rocketchat-i18n/i18n/zh-TW.i18n.json @@ -1559,6 +1559,8 @@ "email_style_description": "避免使用套版選擇器", "email_style_label": "電子郵件型態", "Email_subject": "主旨", + "Enterprise_License": "企業授權", + "Enterprise_License_Description": "如果您的工作區已註冊,並且授權是由Rocket.Chat Cloud提供的,則無需在此處手動更新授權。", "Email_verified": "電子郵件已驗證", "Email_sent": "電子郵件寄件", "Emoji": "表情符號", @@ -1605,9 +1607,6 @@ "Enter_Normal": "普通模式(使用 Enter 發送)", "Enter_to": "進入", "Enter_your_E2E_password": "輸入您的 E2E 密碼", - "Enterprise": "企業", - "Enterprise_License": "企業授權", - "Enterprise_License_Description": "如果您的工作區已註冊,並且授權是由Rocket.Chat Cloud提供的,則無需在此處手動更新授權。", "Entertainment": "娛樂", "Error": "錯誤", "Error_404": "錯誤:404", @@ -2379,7 +2378,6 @@ "LDAP_DataSync_Roles": "同步身份", "LDAP_DataSync_Channels": "同步 Channel", "LDAP_DataSync_Teams": "同步團體", - "LDAP_Enterprise": "企業", "LDAP_DataSync_BackgroundSync": "背景同步", "LDAP_Server_Type": "伺服器類型", "LDAP_Server_Type_AD": "Active Directory", @@ -4045,7 +4043,6 @@ "Transcript_message": "詢問筆錄時要顯示的訊息", "Transcript_of_your_livechat_conversation": "您的聊天記錄的談話內容。", "Transcript_Request": "紀錄要求", - "onboarding.form.registeredServerForm.continueStandalone": "以獨立狀態繼續", "transfer-livechat-guest": "轉送即時聊天訪客", "Translate": "翻譯", "Translated": "翻譯", @@ -4310,6 +4307,7 @@ "view-l-room": "檢視即時聊天 Room", "view-l-room_description": "允許檢視即時聊天頻道", "view-livechat-analytics": "檢視即時聊天分析", + "onboarding.page.awaitingConfirmation.subtitle": "我們已向您傳送包含確認連結的電子郵件至 {{emailAddress}}。請驗證下方的安全代碼與電子郵件中的安全代碼相同。", "view-livechat-departments": "檢視即時聊天部門", "view-livechat-manager": "檢視即時聊天管理者", "view-livechat-manager_description": "允許檢視其他即時聊天管理者", @@ -4513,80 +4511,12 @@ "registration.component.form.confirmation": "確認", "registration.component.form.sendConfirmationEmail": "已傳送確認電子郵件", "registration.component.form.register": "註冊", - "onboarding.component.form.requiredField": "此為必填欄位", - "onboarding.component.form.steps": "步驟 {{currentStep}}/{{stepCount}}", - "onboarding.component.form.action.back": "返回", - "onboarding.component.form.action.next": "下一步", - "onboarding.component.form.action.skip": "略過此步驟", - "onboarding.component.form.action.register": "註冊", - "onboarding.component.form.action.confirm": "確認", - "onboarding.component.form.termsAndConditions": "我同意<1>條款及條件和<3>隱私權政策", - "onboarding.component.emailCodeFallback": "沒有收到電子郵件?<1>重新傳送或<3>變更電子郵件", - "onboarding.page.form.title": "<1>啟動您的工作空間吧!", - "onboarding.page.awaitingConfirmation.title": "等待確認", - "onboarding.page.awaitingConfirmation.subtitle": "我們已向您傳送包含確認連結的電子郵件至 {{emailAddress}}。請驗證下方的安全代碼與電子郵件中的安全代碼相同。", - "onboarding.page.emailConfirmed.title": "電子郵件已確認!", - "onboarding.page.emailConfirmed.subtitle": "您可以返回 Rocket.Chat 應用程式 – 我們已啟動您的工作空間。", - "onboarding.page.checkYourEmail.title": "請查看您的電子郵件", - "onboarding.page.checkYourEmail.subtitle": "您的要求已成功傳送。<1>請查看您的電子郵件收件匣以啟動企業試用版。<1>該連結將在 30 分鐘後到期。", - "onboarding.page.confirmationProcess.title": "確認處理中", - "onboarding.page.cloudDescription.title": "啟動您的工作空間和 <1>14 天試用期吧!", - "onboarding.page.cloudDescription.tryGold": "試用我們最棒的黃金方案,免費試用 14 天", - "onboarding.page.cloudDescription.numberOfIntegrations": "1,000 項整合", - "onboarding.page.cloudDescription.availability": "高可用性", - "onboarding.page.cloudDescription.auditing": "訊息稽核面板/稽核記錄", - "onboarding.page.cloudDescription.engagement": "參與度儀表板", - "onboarding.page.cloudDescription.ldap": "LDAP 強化同步", - "onboarding.page.cloudDescription.omnichannel": "Omnichannel 進階版", - "onboarding.page.cloudDescription.sla": "SLA:進階版", - "onboarding.page.cloudDescription.push": "安全推播通知", - "onboarding.page.cloudDescription.goldIncludes": "* 黃金方案包含其他方案中的所有功能", - "onboarding.page.alreadyHaveAccount": "已經有帳戶了?<1>管理您的工作空間。", - "onboarding.page.invalidLink.title": "您的連結不再有效", - "onboarding.page.invalidLink.content": "您似乎已經使用邀請連結。該連結僅可用於單次的登入。請要求新的連結以加入您的工作空間。", - "onboarding.page.invalidLink.button.text": "要求新連結", - "onboarding.page.requestTrial.title": "要求 <1>30 天試用期", - "onboarding.page.requestTrial.subtitle": "試用我們最棒的企業版方案,30 天免費", - "onboarding.page.magicLinkEmail.title": "我們已透過電子郵件傳送登入連結給您", - "onboarding.page.magicLinkEmail.subtitle": "按一下我們剛傳送給您的電子郵件中的連結,即可登入您的工作空間。<1>該連結將在 30 分鐘後到期。", - "onboarding.form.adminInfoForm.title": "管理員資訊", - "onboarding.form.adminInfoForm.subtitle": "我們需要此資訊以在您的工作空間內建立管理員個人資料", - "onboarding.form.adminInfoForm.fields.fullName.label": "全名", - "onboarding.form.adminInfoForm.fields.fullName.placeholder": "姓名", - "onboarding.form.adminInfoForm.fields.username.label": "使用者名稱", - "onboarding.form.adminInfoForm.fields.username.placeholder": "@username", - "onboarding.form.adminInfoForm.fields.email.label": "電子郵件", - "onboarding.form.adminInfoForm.fields.email.placeholder": "電子郵件", - "onboarding.form.adminInfoForm.fields.password.label": "密碼", - "onboarding.form.adminInfoForm.fields.password.placeholder": "建立密碼", - "onboarding.form.adminInfoForm.fields.keepPosted.label": "在有 Rocket.Chat 相關更新時通知我", - "onboarding.form.organizationInfoForm.title": "組織資訊", - "onboarding.form.organizationInfoForm.subtitle": "請多包涵。這些資料將可協助我們個人化您的工作空間", - "onboarding.form.organizationInfoForm.fields.organizationName.label": "組織名稱", - "onboarding.form.organizationInfoForm.fields.organizationName.placeholder": "組織名稱", - "onboarding.form.organizationInfoForm.fields.organizationType.label": "組織類型", - "onboarding.form.organizationInfoForm.fields.organizationType.placeholder": "選取", - "onboarding.form.organizationInfoForm.fields.organizationIndustry.label": "組織產業", - "onboarding.form.organizationInfoForm.fields.organizationIndustry.placeholder": "選取", - "onboarding.form.organizationInfoForm.fields.organizationSize.label": "組織規模", - "onboarding.form.organizationInfoForm.fields.organizationSize.placeholder": "選取", - "onboarding.form.organizationInfoForm.fields.country.label": "國家/地區", - "onboarding.form.organizationInfoForm.fields.country.placeholder": "選取", - "onboarding.form.registeredServerForm.title": "註冊您的伺服器", - "onboarding.form.registeredServerForm.included.push": "行動推播通知", - "onboarding.form.registeredServerForm.included.externalProviders": "與外部提供者 (WhatsApp、Facebook、Telegram、Twitter) 整合", - "onboarding.form.registeredServerForm.included.apps": "存取市集應用程式", - "onboarding.form.registeredServerForm.fields.accountEmail.inputLabel": "雲端帳戶電子郵件", - "onboarding.form.registeredServerForm.fields.accountEmail.inputPlaceholder": "請輸入您的電子郵件", - "onboarding.form.registeredServerForm.keepInformed": "在有新聞與活動消息時通知我", - "onboarding.form.standaloneServerForm.title": "獨立伺服器確認", - "onboarding.form.standaloneServerForm.servicesUnavailable": "部分服務將無法使用或是需要手動設定", - "onboarding.form.standaloneServerForm.publishOwnApp": "若要傳送推播通知,您必須對您所擁有的應用程式進行編碼,並將應用程式發佈至 Google Play 和 App Store", - "onboarding.form.standaloneServerForm.manuallyIntegrate": "需要手動與外部服務整合", "Awaiting_confirmation": "等待確認", "RegisterWorkspace_Features_MobileNotifications_Title": "行動推播通知", "RegisterWorkspace_Features_Marketplace_Title": "商店", "RegisterWorkspace_Features_Omnichannel_Title": "Omnichannel", "RegisterWorkspace_Setup_Label": "雲端帳戶電子郵件", - "cloud.RegisterWorkspace_Setup_Terms_Privacy": "我同意<1>條款及條件和<3>隱私權政策" -} \ No newline at end of file + "cloud.RegisterWorkspace_Setup_Terms_Privacy": "我同意<1>條款及條件和<3>隱私權政策", + "UpgradeToGetMore_engagement-dashboard_Title": "分析", + "UpgradeToGetMore_auditing_Title": "訊息稽核" +} diff --git a/apps/meteor/packages/rocketchat-i18n/i18n/zh.i18n.json b/apps/meteor/packages/rocketchat-i18n/i18n/zh.i18n.json index 283944175541..736df101ecdf 100644 --- a/apps/meteor/packages/rocketchat-i18n/i18n/zh.i18n.json +++ b/apps/meteor/packages/rocketchat-i18n/i18n/zh.i18n.json @@ -1414,6 +1414,8 @@ "email_style_description": "避免嵌套选择器", "email_style_label": "邮箱风格", "Email_subject": "邮件主题", + "Enterprise_License": "企业许可证", + "Enterprise_License_Description": "如果您的工作区已经注册,且您的许可证由Rock.Chat Cloud提供,那么您无需在这里手动更新许可证。", "Email_verified": "邮箱已验证", "Email_sent": "已发送的电子邮件", "Emoji": "表情符号", @@ -1452,9 +1454,6 @@ "Enter_Normal": "常规模式(Enter 发送消息)", "Enter_to": "进入", "Enter_your_E2E_password": "输入您的端到端密码", - "Enterprise": "企业", - "Enterprise_License": "企业许可证", - "Enterprise_License_Description": "如果您的工作区已经注册,且您的许可证由Rock.Chat Cloud提供,那么您无需在这里手动更新许可证。", "Entertainment": "娱乐", "Error": "错误", "Error_404": "错误:404", @@ -4134,5 +4133,9 @@ "registration.component.form.reasonToJoin": "加入的理由", "registration.component.form.invalidConfirmPass": "两次输入的密码不一致", "registration.component.form.confirmPassword": "确认密码", - "registration.component.form.sendConfirmationEmail": "已发送确认电子邮件" + "registration.component.form.sendConfirmationEmail": "已发送确认电子邮件", + "onboarding.component.form.action.pasteHere": "在此粘贴", + "onboarding.form.registerOfflineForm.title": "离线注册", + "UpgradeToGetMore_engagement-dashboard_Title": "分析", + "UpgradeToGetMore_auditing_Title": "消息审计" } \ No newline at end of file diff --git a/apps/meteor/packages/rocketchat-livechat/assets/demo.html b/apps/meteor/packages/rocketchat-livechat/assets/demo.html index a8269484df63..49dfd42e71fa 100644 --- a/apps/meteor/packages/rocketchat-livechat/assets/demo.html +++ b/apps/meteor/packages/rocketchat-livechat/assets/demo.html @@ -2,18 +2,6 @@ - @@ -35,9 +23,12 @@

without changing page title

page 7
diff --git a/apps/meteor/server/models/raw/Analytics.ts b/apps/meteor/server/models/raw/Analytics.ts index 254ff32965bb..4e95cadebbcd 100644 --- a/apps/meteor/server/models/raw/Analytics.ts +++ b/apps/meteor/server/models/raw/Analytics.ts @@ -14,7 +14,7 @@ export class AnalyticsRaw extends BaseRaw implements IAnalyticsModel } protected modelIndexes(): IndexDescription[] { - return [{ key: { date: 1 } }, { key: { 'room._id': 1, 'date': 1 }, unique: true }]; + return [{ key: { date: 1 } }, { key: { 'room._id': 1, 'date': 1 }, unique: true, partialFilterExpression: { type: 'rooms' } }]; } saveMessageSent({ room, date }: { room: IRoom; date: IAnalytic['date'] }): Promise { diff --git a/apps/meteor/server/models/raw/CloudAnnouncements.ts b/apps/meteor/server/models/raw/CloudAnnouncements.ts index 21b4304b2bd5..b801762170be 100644 --- a/apps/meteor/server/models/raw/CloudAnnouncements.ts +++ b/apps/meteor/server/models/raw/CloudAnnouncements.ts @@ -1,6 +1,6 @@ import type { Cloud } from '@rocket.chat/core-typings'; import type { ICloudAnnouncementsModel } from '@rocket.chat/model-typings'; -import type { Db } from 'mongodb'; +import type { Db, DeleteResult } from 'mongodb'; import { BaseRaw } from './BaseRaw'; @@ -8,4 +8,8 @@ export class CloudAnnouncementsRaw extends BaseRaw implement constructor(db: Db) { super(db, 'cloud_announcements'); } + + removeByViewId(viewId: string): Promise { + return this.deleteMany({ $or: [{ 'view.id': viewId }, { 'view.viewId': viewId }] }); + } } diff --git a/apps/meteor/server/models/raw/LivechatInquiry.ts b/apps/meteor/server/models/raw/LivechatInquiry.ts index fd95a0ea8c4f..b9269915731c 100644 --- a/apps/meteor/server/models/raw/LivechatInquiry.ts +++ b/apps/meteor/server/models/raw/LivechatInquiry.ts @@ -172,6 +172,10 @@ export class LivechatInquiryRaw extends BaseRaw implemen } async unlock(inquiryId: string): Promise { + return this.updateOne({ _id: inquiryId }, { $unset: { locked: 1, lockedAt: 1 } }); + } + + async unlockAndQueue(inquiryId: string): Promise { return this.updateOne( { _id: inquiryId }, { $unset: { locked: 1, lockedAt: 1 }, $set: { status: LivechatInquiryStatus.QUEUED, queuedAt: new Date() } }, @@ -283,7 +287,7 @@ export class LivechatInquiryRaw extends BaseRaw implemen }, { $set: { status: LivechatInquiryStatus.TAKEN, takenAt: new Date() }, - $unset: { defaultAgent: 1, estimatedInactivityCloseTimeAt: 1 }, + $unset: { defaultAgent: 1, estimatedInactivityCloseTimeAt: 1, queuedAt: 1 }, }, ); } diff --git a/apps/meteor/server/models/raw/LivechatRooms.ts b/apps/meteor/server/models/raw/LivechatRooms.ts index 974c2b5cb570..94adf40569fd 100644 --- a/apps/meteor/server/models/raw/LivechatRooms.ts +++ b/apps/meteor/server/models/raw/LivechatRooms.ts @@ -51,7 +51,6 @@ export class LivechatRoomsRaw extends BaseRaw implements ILive { key: { 'omnichannel.predictedVisitorAbandonmentAt': 1 }, sparse: true }, { key: { closedAt: 1 }, sparse: true }, { key: { servedBy: 1 }, sparse: true }, - { key: { 'v.token': 1 }, sparse: true }, { key: { 'v.token': 1, 'email.thread': 1 }, sparse: true }, { key: { 'v._id': 1 }, sparse: true }, { key: { t: 1, departmentId: 1, closedAt: 1 }, partialFilterExpression: { closedAt: { $exists: true } } }, diff --git a/apps/meteor/server/models/raw/LivechatVisitors.ts b/apps/meteor/server/models/raw/LivechatVisitors.ts index 7b478bab43d6..7974867a289b 100644 --- a/apps/meteor/server/models/raw/LivechatVisitors.ts +++ b/apps/meteor/server/models/raw/LivechatVisitors.ts @@ -435,6 +435,9 @@ export class LivechatVisitorsRaw extends BaseRaw implements IL ip: 1, host: 1, userAgent: 1, + username: 1, + ts: 1, + status: 1, }, }, ); diff --git a/apps/meteor/server/models/raw/OAuthAccessTokens.ts b/apps/meteor/server/models/raw/OAuthAccessTokens.ts index b8b3daac8772..6143a6379e2f 100644 --- a/apps/meteor/server/models/raw/OAuthAccessTokens.ts +++ b/apps/meteor/server/models/raw/OAuthAccessTokens.ts @@ -18,11 +18,17 @@ export class OAuthAccessTokensRaw extends BaseRaw implements ]; } - findOneByAccessToken(accessToken: string, options?: FindOptions): Promise { + async findOneByAccessToken(accessToken: string, options?: FindOptions): Promise { + if (!accessToken) { + return null; + } return this.findOne({ accessToken }, options); } - findOneByRefreshToken(refreshToken: string, options?: FindOptions): Promise { + async findOneByRefreshToken(refreshToken: string, options?: FindOptions): Promise { + if (!refreshToken) { + return null; + } return this.findOne({ refreshToken }, options); } } diff --git a/apps/meteor/server/models/raw/Rooms.ts b/apps/meteor/server/models/raw/Rooms.ts index 8b8a6637284c..536719c5983a 100644 --- a/apps/meteor/server/models/raw/Rooms.ts +++ b/apps/meteor/server/models/raw/Rooms.ts @@ -53,9 +53,6 @@ export class RoomsRaw extends BaseRaw implements IRoomsModel { key: { muted: 1 }, sparse: true, }, - { - key: { t: 1 }, - }, { key: { 'u._id': 1 }, }, diff --git a/apps/meteor/server/models/raw/Subscriptions.ts b/apps/meteor/server/models/raw/Subscriptions.ts index a7b9bb347511..72a91e6ab17c 100644 --- a/apps/meteor/server/models/raw/Subscriptions.ts +++ b/apps/meteor/server/models/raw/Subscriptions.ts @@ -60,7 +60,6 @@ export class SubscriptionsRaw extends BaseRaw implements ISubscri { key: { 'userHighlights.0': 1 }, sparse: true }, { key: { prid: 1 } }, { key: { 'u._id': 1, 'open': 1, 'department': 1 } }, - { key: { rid: 1 } }, { key: { rid: 1, ls: 1 } }, ]; } diff --git a/apps/meteor/server/models/raw/Users.js b/apps/meteor/server/models/raw/Users.js index c8cee8f2f6bf..5b399323f143 100644 --- a/apps/meteor/server/models/raw/Users.js +++ b/apps/meteor/server/models/raw/Users.js @@ -56,7 +56,6 @@ export class UsersRaw extends BaseRaw { { key: { lastLogin: 1 } }, { key: { status: 1 } }, { key: { statusText: 1 } }, - { key: { active: 1 }, sparse: 1 }, { key: { statusConnection: 1 }, sparse: 1 }, { key: { appId: 1 }, sparse: 1 }, { key: { type: 1 } }, diff --git a/apps/meteor/server/modules/core-apps/cloudAnnouncements.module.ts b/apps/meteor/server/modules/core-apps/cloudAnnouncements.module.ts new file mode 100644 index 000000000000..cf57c2a3faa7 --- /dev/null +++ b/apps/meteor/server/modules/core-apps/cloudAnnouncements.module.ts @@ -0,0 +1,36 @@ +import type { IUiKitCoreApp, UiKitCoreAppPayload } from '@rocket.chat/core-services'; +import { CloudAnnouncements } from '@rocket.chat/models'; + +export class CloudAnnouncementsModule implements IUiKitCoreApp { + appId = 'cloud-announcements-core'; + + // TODO: forward to Cloud Workspace API and update announcements + blockAction(_payload: UiKitCoreAppPayload): Promise { + return Promise.resolve(); + } + + // TODO: forward to Cloud Workspace API and update announcements + viewSubmit(_payload: UiKitCoreAppPayload): Promise { + return Promise.resolve(); + } + + // TODO: forward to Cloud Workspace API and update announcements + async viewClosed(payload: UiKitCoreAppPayload): Promise { + const { view } = payload.payload; + + if (!view) { + // TODO: should we throw an error here? + return; + } + + const viewId = view.id || view.viewId; + + if (!viewId) { + // TODO: should we throw an error here? + return; + } + + await CloudAnnouncements.removeByViewId(viewId); + return undefined; + } +} diff --git a/apps/meteor/server/routes/i18n.ts b/apps/meteor/server/routes/i18n.ts index 8aa1c30a3085..1bdba1f09cc8 100644 --- a/apps/meteor/server/routes/i18n.ts +++ b/apps/meteor/server/routes/i18n.ts @@ -7,7 +7,8 @@ import { match } from 'path-to-regexp'; const matchRoute = match<{ lng: string }>('/:lng.json', { decode: decodeURIComponent }); const i18nHandler = async function (req: IncomingMessage, res: ServerResponse) { - const match = matchRoute(req.url ?? '/'); + const url = new URL(req.url ?? '/', `https://${req.headers.host}`); + const match = matchRoute(url.pathname); if (match === false) { res.writeHead(400); diff --git a/apps/meteor/server/services/messages/hooks/BeforeSavePreventMention.ts b/apps/meteor/server/services/messages/hooks/BeforeSavePreventMention.ts new file mode 100644 index 000000000000..b87c0e613d2d --- /dev/null +++ b/apps/meteor/server/services/messages/hooks/BeforeSavePreventMention.ts @@ -0,0 +1,47 @@ +import { Authorization, MeteorError, type IApiService } from '@rocket.chat/core-services'; +import { type IMessage, type IUser } from '@rocket.chat/core-typings'; + +import { i18n } from '../../../lib/i18n'; + +export class BeforeSavePreventMention { + constructor(private api?: IApiService) {} + + async preventMention({ + message, + user, + mention, + permission, + }: { + message: IMessage; + user: Pick; + mention: 'here' | 'all'; + permission: string; + }): Promise { + if (!message.mentions?.some(({ _id }) => _id === mention)) { + return true; + } + + // Check if the user has permissions to use @all in both global and room scopes. + if (await Authorization.hasPermission(message.u._id, permission)) { + return true; + } + + if (await Authorization.hasPermission(message.u._id, permission, message.rid)) { + return true; + } + + const action = i18n.t('Notify_all_in_this_room', { lng: user.language }); + + // Add a notification to the chat, informing the user that this + // action is not allowed. + void this.api?.broadcast('notify.ephemeralMessage', message.u._id, message.rid, { + // TODO: i18n + msg: i18n.t('error-action-not-allowed', { action } as any, user.language), + }); + + // Also throw to stop propagation of 'sendMessage'. + throw new MeteorError('error-action-not-allowed', `Notify ${mention} in this room not allowed`, { + action: 'Notify_all_in_this_room', + }); + } +} diff --git a/apps/meteor/server/services/messages/service.ts b/apps/meteor/server/services/messages/service.ts index f981422727f7..f28a9d71b2f5 100644 --- a/apps/meteor/server/services/messages/service.ts +++ b/apps/meteor/server/services/messages/service.ts @@ -1,6 +1,6 @@ import type { IMessageService } from '@rocket.chat/core-services'; import { ServiceClassInternal } from '@rocket.chat/core-services'; -import type { IMessage, MessageTypesValues, IUser, IRoom } from '@rocket.chat/core-typings'; +import { type IMessage, type MessageTypesValues, type IUser, type IRoom, isEditedMessage } from '@rocket.chat/core-typings'; import { Messages } from '@rocket.chat/models'; import type BadWordsFilter from 'bad-words'; @@ -10,6 +10,7 @@ import { updateMessage } from '../../../app/lib/server/functions/updateMessage'; import { executeSendMessage } from '../../../app/lib/server/methods/sendMessage'; import { executeSetReaction } from '../../../app/reactions/server/setReaction'; import { settings } from '../../../app/settings/server'; +import { BeforeSavePreventMention } from './hooks/BeforeSavePreventMention'; import { configureBadWords } from './hooks/badwords'; export class MessageService extends ServiceClassInternal implements IMessageService { @@ -17,7 +18,11 @@ export class MessageService extends ServiceClassInternal implements IMessageServ private badWordsFilter?: BadWordsFilter; + private preventMention: BeforeSavePreventMention; + async created() { + this.preventMention = new BeforeSavePreventMention(this.api); + await this.configureBadWords(); } @@ -80,11 +85,11 @@ export class MessageService extends ServiceClassInternal implements IMessageServ async beforeSave({ message, room: _room, - user: _user, + user, }: { message: IMessage; room: IRoom; - user: Pick; + user: Pick; }): Promise { // TODO looks like this one was not being used (so I'll left it commented) // await this.joinDiscussionOnMessage({ message, room, user }); @@ -94,9 +99,20 @@ export class MessageService extends ServiceClassInternal implements IMessageServ message = await this.filterBadWords(message); } + if (!this.isEditedOrOld(message)) { + await Promise.all([ + this.preventMention.preventMention({ message, user, mention: 'all', permission: 'mention-all' }), + this.preventMention.preventMention({ message, user, mention: 'here', permission: 'mention-here' }), + ]); + } + return message; } + private isEditedOrOld(message: IMessage): boolean { + return isEditedMessage(message) || !message.ts || Math.abs(Date.now() - message.ts.getTime()) > 60000; + } + private isBadWordsFilterEnabled() { return !!settings.get('Message_AllowBadWordsFilter'); } diff --git a/apps/meteor/server/services/nps/notification.ts b/apps/meteor/server/services/nps/notification.ts index 692b9bc6291f..50cfa52331e7 100644 --- a/apps/meteor/server/services/nps/notification.ts +++ b/apps/meteor/server/services/nps/notification.ts @@ -1,5 +1,6 @@ import type { IBanner } from '@rocket.chat/core-typings'; import { BannerPlatform } from '@rocket.chat/core-typings'; +import { Random } from '@rocket.chat/random'; import moment from 'moment'; import { settings } from '../../../app/settings/server'; @@ -21,7 +22,7 @@ export const getBannerForAdmins = (expireAt: Date): Omit => { }, _updatedAt: new Date(), view: { - viewId: '', + viewId: Random.id(), appId: '', blocks: [ { diff --git a/apps/meteor/server/services/omnichannel/queue.ts b/apps/meteor/server/services/omnichannel/queue.ts index 8bb2e86f2313..9617704b8950 100644 --- a/apps/meteor/server/services/omnichannel/queue.ts +++ b/apps/meteor/server/services/omnichannel/queue.ts @@ -64,6 +64,12 @@ export class OmnichannelQueue implements IOmnichannelQueue { return; } + if (await License.shouldPreventAction('monthlyActiveContacts', 1)) { + queueLogger.debug('MAC limit reached. Queue wont execute'); + this.running = false; + return; + } + const queue = await this.nextQueue(); const queueDelayTimeout = this.delay(); queueLogger.info(`Executing queue ${queue || 'Public'} with timeout of ${queueDelayTimeout}`); @@ -86,8 +92,10 @@ export class OmnichannelQueue implements IOmnichannelQueue { // Note: this removes the "one-shot" behavior of queue, allowing it to take a conversation again in the future // And sorting them by _updatedAt: -1 will make it so that the oldest inquiries are taken first // preventing us from playing with the same inquiry over and over again - await LivechatInquiry.unlock(nextInquiry._id); + return await LivechatInquiry.unlockAndQueue(nextInquiry._id); } + + await LivechatInquiry.unlock(nextInquiry._id); } catch (e) { queueLogger.error({ msg: 'Error processing queue', @@ -105,10 +113,6 @@ export class OmnichannelQueue implements IOmnichannelQueue { return; } - if (await License.shouldPreventAction('monthlyActiveContacts')) { - return; - } - const routingSupportsAutoAssign = RoutingManager.getConfig()?.autoAssignAgent; queueLogger.debug({ msg: 'Routing method supports auto assignment', diff --git a/apps/meteor/server/services/omnichannel/service.ts b/apps/meteor/server/services/omnichannel/service.ts index d89f840a41bb..34599cbc7a33 100644 --- a/apps/meteor/server/services/omnichannel/service.ts +++ b/apps/meteor/server/services/omnichannel/service.ts @@ -44,6 +44,12 @@ export class OmnichannelService extends ServiceClassInternal implements IOmnicha License.onValidateLicense(async (): Promise => { RoutingManager.isMethodSet() && (await this.queueWorker.shouldStart()); }); + + // NOTE: When there's no license or license is invalid, we fallback to CE behavior + // CE behavior means there's no MAC limit, so we start the queue + License.onInvalidateLicense(async (): Promise => { + this.queueWorker.isRunning() && (await this.queueWorker.shouldStart()); + }); } getQueueWorker(): IOmnichannelQueue { diff --git a/apps/meteor/server/services/push/service.ts b/apps/meteor/server/services/push/service.ts index 437db7b391d8..2d2c1c61ea38 100644 --- a/apps/meteor/server/services/push/service.ts +++ b/apps/meteor/server/services/push/service.ts @@ -9,7 +9,8 @@ export class PushService extends ServiceClassInternal implements IPushService { super(); this.onEvent('watch.users', async (data) => { - if (!('diff' in data) || !('services.resume.loginTokens' in data.diff)) { + // for some reason data.diff can be set to undefined + if (!('diff' in data) || !data.diff || !('services.resume.loginTokens' in data.diff)) { return; } if (data.diff['services.resume.loginTokens'] === undefined) { diff --git a/apps/meteor/server/services/video-conference/service.ts b/apps/meteor/server/services/video-conference/service.ts index 818280fd4d31..1240e9ec7270 100644 --- a/apps/meteor/server/services/video-conference/service.ts +++ b/apps/meteor/server/services/video-conference/service.ts @@ -627,8 +627,7 @@ export class VideoConfService extends ServiceClassInternal implements IVideoConf image: RocketChatAssets.getURL('Assets_favicon_192'), }, apn: { - category: 'MESSAGE_NOREPLY', - topicSuffix: '.voip', + category: 'VIDEOCONF', }, }); } diff --git a/apps/meteor/server/settings/message.ts b/apps/meteor/server/settings/message.ts index 17dd1f7b230d..e83189579085 100644 --- a/apps/meteor/server/settings/message.ts +++ b/apps/meteor/server/settings/message.ts @@ -337,23 +337,23 @@ export const createMessageSettings = () => public: true, }); - await this.section('Katex', async () => { + await this.section('Katex', async function () { const enableQuery = { _id: 'Katex_Enabled', value: true, }; - await settingsRegistry.add('Katex_Enabled', true, { + await this.add('Katex_Enabled', true, { type: 'boolean', public: true, i18nDescription: 'Katex_Enabled_Description', }); - await settingsRegistry.add('Katex_Parenthesis_Syntax', true, { + await this.add('Katex_Parenthesis_Syntax', true, { type: 'boolean', public: true, enableQuery, i18nDescription: 'Katex_Parenthesis_Syntax_Description', }); - await settingsRegistry.add('Katex_Dollar_Syntax', false, { + await this.add('Katex_Dollar_Syntax', false, { type: 'boolean', public: true, enableQuery, @@ -361,14 +361,14 @@ export const createMessageSettings = () => }); }); - await this.section('Google Maps', async () => { - await settingsRegistry.add('MapView_Enabled', false, { + await this.section('Google Maps', async function () { + await this.add('MapView_Enabled', false, { type: 'boolean', public: true, i18nLabel: 'MapView_Enabled', i18nDescription: 'MapView_Enabled_Description', }); - await settingsRegistry.add('MapView_GMapsAPIKey', '', { + await this.add('MapView_GMapsAPIKey', '', { type: 'string', public: true, i18nLabel: 'MapView_GMapsAPIKey', diff --git a/apps/meteor/server/settings/misc.ts b/apps/meteor/server/settings/misc.ts index fa7b6bbde3d0..e04c4d6d3b8e 100644 --- a/apps/meteor/server/settings/misc.ts +++ b/apps/meteor/server/settings/misc.ts @@ -46,10 +46,6 @@ const verifyFingerPrint = async function () { await updateFingerprint(fingerprint, false); }; -settings.watch('Site_Url', () => { - void verifyFingerPrint(); -}); - // Insert server unique id if it doesn't exist export const createMiscSettings = async () => { await settingsRegistry.add('uniqueID', process.env.DEPLOYMENT_ID || uuidv4(), { @@ -61,12 +57,16 @@ export const createMiscSettings = async () => { readonly: true, }); - await settingsRegistry.add('Deployment_FingerPrint_Verified', false, { + await settingsRegistry.add('Deployment_FingerPrint_Verified', true, { type: 'boolean', public: true, readonly: true, }); + settings.watch('Site_Url', () => { + void verifyFingerPrint(); + }); + await settingsRegistry.add('Initial_Channel_Created', false, { type: 'boolean', hidden: true, diff --git a/apps/meteor/server/startup/coreApps.ts b/apps/meteor/server/startup/coreApps.ts index dbc4606ea38a..14b2234f6603 100644 --- a/apps/meteor/server/startup/coreApps.ts +++ b/apps/meteor/server/startup/coreApps.ts @@ -1,8 +1,10 @@ import { BannerModule } from '../modules/core-apps/banner.module'; +import { CloudAnnouncementsModule } from '../modules/core-apps/cloudAnnouncements.module'; import { Nps } from '../modules/core-apps/nps.module'; import { VideoConfModule } from '../modules/core-apps/videoconf.module'; import { registerCoreApp } from '../services/uikit-core-app/service'; +registerCoreApp(new CloudAnnouncementsModule()); registerCoreApp(new Nps()); registerCoreApp(new BannerModule()); registerCoreApp(new VideoConfModule()); diff --git a/apps/meteor/server/startup/migrations/index.ts b/apps/meteor/server/startup/migrations/index.ts index 26bc4f992ee2..8247f9a72bb5 100644 --- a/apps/meteor/server/startup/migrations/index.ts +++ b/apps/meteor/server/startup/migrations/index.ts @@ -36,4 +36,5 @@ import './v299'; import './v300'; import './v301'; import './v303'; +import './v304'; import './xrun'; diff --git a/apps/meteor/server/startup/migrations/v304.ts b/apps/meteor/server/startup/migrations/v304.ts new file mode 100644 index 000000000000..e5d6484446f0 --- /dev/null +++ b/apps/meteor/server/startup/migrations/v304.ts @@ -0,0 +1,11 @@ +import { Analytics } from '@rocket.chat/models'; + +import { addMigration } from '../../lib/migrations'; + +addMigration({ + version: 304, + name: 'Drop wrong index from analytics collection', + async up() { + await Analytics.col.dropIndex('room._id_1_date_1'); + }, +}); diff --git a/apps/meteor/tests/e2e/message-actions.spec.ts b/apps/meteor/tests/e2e/message-actions.spec.ts index 7cfa089326b2..ad48c09beeba 100644 --- a/apps/meteor/tests/e2e/message-actions.spec.ts +++ b/apps/meteor/tests/e2e/message-actions.spec.ts @@ -1,8 +1,7 @@ -import type { Page } from '@playwright/test'; - import { Users } from './fixtures/userStates'; import { HomeChannel } from './page-objects'; import { createTargetChannel } from './utils'; +import { setUserPreferences } from './utils/setUserPreferences'; import { expect, test } from './utils/test'; test.use({ storageState: Users.admin.state }); @@ -69,6 +68,7 @@ test.describe.serial('message-actions', () => { await poHomeChannel.content.sendMessage('Message to star'); await poHomeChannel.content.openLastMessageMenu(); await page.locator('[data-qa-id="star-message"]').click(); + await poHomeChannel.dismissToast(); await page.getByRole('button').and(page.getByTitle('Options')).click(); await page.locator('[data-key="starred-messages"]').click(); await expect(poHomeChannel.content.lastUserMessageBody).toHaveText('Message to star'); @@ -87,22 +87,11 @@ test.describe.serial('message-actions', () => { }); test.describe('Preference Hide Contextual Bar by clicking outside of it Enabled', () => { - let adminPage: Page; - test.beforeAll(async ({ browser }) => { - adminPage = await browser.newPage({ storageState: Users.admin.state }); - await adminPage.goto('/account/preferences'); - await adminPage.locator('role=heading[name="Messages"]').click(); - await adminPage.locator('text="Hide Contextual Bar by clicking outside of it"').click(); - }); - test.afterAll(async () => { - await adminPage.close(); + test.beforeAll(async ({ api }) => { + await setUserPreferences(api, { hideFlexTab: true }); }); - test.afterAll(async ({ browser }) => { - adminPage = await browser.newPage({ storageState: Users.admin.state }); - await adminPage.goto('/account/preferences'); - await adminPage.locator('role=heading[name="Messages"]').click(); - await adminPage.locator('text="Hide Contextual Bar by clicking outside of it"').click(); - await adminPage.close(); + test.afterAll(async ({ api }) => { + await setUserPreferences(api, { hideFlexTab: false }); }); test.beforeEach(async ({ page }) => { poHomeChannel = new HomeChannel(page); diff --git a/apps/meteor/tests/e2e/omnichannel/omnichannel-custom-fields.spec.ts b/apps/meteor/tests/e2e/omnichannel/omnichannel-custom-fields.spec.ts index dd5c93609f6e..472e9bbcc807 100644 --- a/apps/meteor/tests/e2e/omnichannel/omnichannel-custom-fields.spec.ts +++ b/apps/meteor/tests/e2e/omnichannel/omnichannel-custom-fields.spec.ts @@ -4,7 +4,7 @@ import { test, expect } from '../utils/test'; test.use({ storageState: Users.admin.state }); -test.describe.serial('omnichannel-agents', () => { +test.describe.parallel('omnichannel-customFields', () => { let poOmnichannelCustomFields: OmnichannelCustomFields; const newField = 'any_field'; test.beforeEach(async ({ page }) => { @@ -32,14 +32,16 @@ test.describe.serial('omnichannel-agents', () => { await poOmnichannelCustomFields.firstRowInTable(newField).click(); await poOmnichannelCustomFields.inputLabel.fill('new_any_label'); - await poOmnichannelCustomFields.btnEditSave.click(); + await poOmnichannelCustomFields.visibleLabel.click(); + await poOmnichannelCustomFields.btnSave.click(); await expect(page.locator(`[qa-user-id="${newField}"] td:nth-child(2)`)).toHaveText(newLabel); }); test('expect remove "new_field"', async () => { await poOmnichannelCustomFields.inputSearch.fill(newField); - await poOmnichannelCustomFields.btnDeletefirstRowInTable.click(); + await poOmnichannelCustomFields.firstRowInTable(newField).click(); + await poOmnichannelCustomFields.btnDeleteCustomField.click(); await poOmnichannelCustomFields.btnModalRemove.click(); await poOmnichannelCustomFields.inputSearch.fill(newField); diff --git a/apps/meteor/tests/e2e/omnichannel/omnichannel-livechat-widget.spec.ts b/apps/meteor/tests/e2e/omnichannel/omnichannel-livechat-widget.spec.ts new file mode 100644 index 000000000000..812a2496c740 --- /dev/null +++ b/apps/meteor/tests/e2e/omnichannel/omnichannel-livechat-widget.spec.ts @@ -0,0 +1,31 @@ +import type { Page } from '@playwright/test'; + +import { test, expect } from '../utils/test'; + +test.describe('Omnichannel - Livechat Widget Embedded', () => { + test.describe('Widget is working on Embedded View', () => { + let page: Page; + let siteName: string; + + test.beforeAll(async ({ browser, api }) => { + page = await browser.newPage(); + await expect((await api.post('/settings/Enable_CSP', { value: false })).status()).toBe(200); + const { value } = await(await api.get('/settings/Site_Name')).json(); + siteName = value; + + + await page.goto('/packages/rocketchat_livechat/assets/demo.html'); + }); + + test.afterAll(async ({ api }) => { + await expect((await api.post('/settings/Enable_CSP', { value: true })).status()).toBe(200); + await page.close(); + }); + + test('Open and Close widget', async () => { + await test.step('Expect widget to be visible while embedded in an iframe', async () => { + await expect(page.frameLocator('#rocketchat-iframe').locator(`role=button[name="${siteName}"]`)).toBeVisible(); + }); + }); + }); +}); diff --git a/apps/meteor/tests/e2e/omnichannel/omnichannel-triggers.spec.ts b/apps/meteor/tests/e2e/omnichannel/omnichannel-triggers.spec.ts index d1adc22d7bbb..548aeb6a2717 100644 --- a/apps/meteor/tests/e2e/omnichannel/omnichannel-triggers.spec.ts +++ b/apps/meteor/tests/e2e/omnichannel/omnichannel-triggers.spec.ts @@ -6,7 +6,7 @@ import { Users } from '../fixtures/userStates'; import { OmnichannelLiveChat, HomeOmnichannel } from '../page-objects'; import { test, expect } from '../utils/test'; -test.describe.parallel('omnichannel-triggers', () => { +test.describe.serial('omnichannel-triggers', () => { let triggersName: string; let triggerMessage: string; let poLiveChat: OmnichannelLiveChat; diff --git a/apps/meteor/tests/e2e/page-objects/omnichannel-custom-fields.ts b/apps/meteor/tests/e2e/page-objects/omnichannel-custom-fields.ts index 17430223ca73..9768139fe09d 100644 --- a/apps/meteor/tests/e2e/page-objects/omnichannel-custom-fields.ts +++ b/apps/meteor/tests/e2e/page-objects/omnichannel-custom-fields.ts @@ -17,31 +17,31 @@ export class OmnichannelCustomFields { } get inputField(): Locator { - return this.page.locator('[placeholder="Field"]'); + return this.page.locator('input[name="field"]'); } get inputLabel(): Locator { - return this.page.locator('[placeholder="Label"]'); + return this.page.locator('input[name="label"]'); + } + + get visibleLabel(): Locator { + return this.page.locator('label >> text="Visible"'); } get btnSave(): Locator { - return this.page.locator('[data-qa-id="NewCustomFieldsPageButtonSave"]'); + return this.page.locator('button >> text=Save'); } get inputSearch(): Locator { return this.page.locator('[placeholder="Search"]'); } - get btnEditSave(): Locator { - return this.page.locator('[data-qa-id="BtnSaveEditCustomFieldsPage"]'); - } - firstRowInTable(filedName: string) { return this.page.locator(`[qa-user-id="${filedName}"]`); } - get btnDeletefirstRowInTable() { - return this.page.locator('button[title="Remove"]'); + get btnDeleteCustomField() { + return this.page.locator('button >> text=Delete'); } get btnModalRemove(): Locator { diff --git a/apps/meteor/tests/e2e/utils/setUserPreferences.ts b/apps/meteor/tests/e2e/utils/setUserPreferences.ts new file mode 100644 index 000000000000..7be26ce4a894 --- /dev/null +++ b/apps/meteor/tests/e2e/utils/setUserPreferences.ts @@ -0,0 +1,7 @@ +import type { APIResponse } from '@playwright/test'; +import { UsersSetPreferencesParamsPOST } from '@rocket.chat/rest-typings'; + +import type { BaseTest } from './test'; + +export const setUserPreferences = (api: BaseTest['api'], preferences: UsersSetPreferencesParamsPOST['data']): Promise => + api.post(`/v1/users.setPreferences`, { data: preferences }); diff --git a/apps/meteor/tests/end-to-end/api/livechat/00-rooms.ts b/apps/meteor/tests/end-to-end/api/livechat/00-rooms.ts index 39d044d59dc5..3048f2270cd2 100644 --- a/apps/meteor/tests/end-to-end/api/livechat/00-rooms.ts +++ b/apps/meteor/tests/end-to-end/api/livechat/00-rooms.ts @@ -33,7 +33,7 @@ import { } from '../../../data/livechat/rooms'; import { saveTags } from '../../../data/livechat/tags'; import type { DummyResponse } from '../../../data/livechat/utils'; -import { sleep } from '../../../data/livechat/utils'; +import { parseMethodResponse, sleep } from '../../../data/livechat/utils'; import { restorePermissionToRoles, addPermissions, @@ -2003,4 +2003,143 @@ describe('LIVECHAT - rooms', function () { .expect(200); }); }); + + describe('livechat:sendTranscript', () => { + it('should fail if user doesnt have send-omnichannel-chat-transcript permission', async () => { + await updatePermission('send-omnichannel-chat-transcript', []); + const { body } = await request + .post(methodCall('livechat:sendTranscript')) + .set(credentials) + .send({ + message: JSON.stringify({ + msg: 'method', + id: '1091', + method: 'livechat:sendTranscript', + params: ['test', 'test', 'test', 'test'], + }), + }) + .expect(200); + + const result = parseMethodResponse(body); + expect(body.success).to.be.true; + expect(result).to.have.property('error').that.is.an('object').that.has.property('error', 'error-not-allowed'); + }); + it('should fail if not all params are provided', async () => { + await updatePermission('send-omnichannel-chat-transcript', ['admin']); + const { body } = await request + .post(methodCall('livechat:sendTranscript')) + .set(credentials) + .send({ + message: JSON.stringify({ + msg: 'method', + id: '1091', + method: 'livechat:sendTranscript', + params: [], + }), + }) + .expect(200); + + const result = parseMethodResponse(body); + expect(body.success).to.be.true; + expect(result).to.have.property('error').that.is.an('object').that.has.property('errorType', 'Match.Error'); + }); + it('should fail if token is invalid', async () => { + const { body } = await request + .post(methodCall('livechat:sendTranscript')) + .set(credentials) + .send({ + message: JSON.stringify({ + msg: 'method', + id: '1091', + method: 'livechat:sendTranscript', + params: ['invalid-token', 'test', 'test', 'test'], + }), + }) + .expect(200); + + const result = parseMethodResponse(body); + expect(body.success).to.be.true; + expect(result).to.have.property('error').that.is.an('object'); + }); + it('should fail if roomId is invalid', async () => { + const visitor = await createVisitor(); + const { body } = await request + .post(methodCall('livechat:sendTranscript')) + .set(credentials) + .send({ + message: JSON.stringify({ + msg: 'method', + id: '1091', + method: 'livechat:sendTranscript', + params: [visitor.token, 'invalid-room-id', 'test', 'test'], + }), + }) + .expect(200); + + const result = parseMethodResponse(body); + expect(body.success).to.be.true; + expect(result).to.have.property('error').that.is.an('object'); + }); + it('should fail if token is from another conversation', async () => { + const visitor = await createVisitor(); + const visitor2 = await createVisitor(); + const { _id } = await createLivechatRoom(visitor.token); + const { body } = await request + .post(methodCall('livechat:sendTranscript')) + .set(credentials) + .send({ + message: JSON.stringify({ + msg: 'method', + id: '1091', + method: 'livechat:sendTranscript', + params: [visitor2.token, _id, 'test', 'test'], + }), + }) + .expect(200); + + const result = parseMethodResponse(body); + expect(body.success).to.be.true; + expect(result).to.have.property('error').that.is.an('object'); + }); + it('should fail if email provided is invalid', async () => { + const visitor = await createVisitor(); + const { _id } = await createLivechatRoom(visitor.token); + const { body } = await request + .post(methodCall('livechat:sendTranscript')) + .set(credentials) + .send({ + message: JSON.stringify({ + msg: 'method', + id: '1091', + method: 'livechat:sendTranscript', + params: [visitor.token, _id, 'invalid-email', 'test'], + }), + }) + .expect(200); + + const result = parseMethodResponse(body); + expect(body.success).to.be.true; + expect(result).to.have.property('error').that.is.an('object'); + }); + it('should work if all params are good', async () => { + const visitor = await createVisitor(); + const { _id } = await createLivechatRoom(visitor.token); + const { body } = await request + .post(methodCall('livechat:sendTranscript')) + .set(credentials) + .send({ + message: JSON.stringify({ + msg: 'method', + id: '1091', + method: 'livechat:sendTranscript', + params: [visitor.token, _id, 'test@test', 'test'], + }), + }) + .expect(200); + + const result = parseMethodResponse(body); + expect(body.success).to.be.true; + expect(result).to.have.property('result', true); + }); + }); }); diff --git a/apps/meteor/tests/end-to-end/api/livechat/24-routing.ts b/apps/meteor/tests/end-to-end/api/livechat/24-routing.ts index 5c3e84a19a8e..48d447b9923d 100644 --- a/apps/meteor/tests/end-to-end/api/livechat/24-routing.ts +++ b/apps/meteor/tests/end-to-end/api/livechat/24-routing.ts @@ -1,4 +1,4 @@ -import type { ILivechatDepartment, IUser } from '@rocket.chat/core-typings'; +import { UserStatus, type ILivechatDepartment, type IUser } from '@rocket.chat/core-typings'; import { expect } from 'chai'; import { after, before, describe, it } from 'mocha'; @@ -16,7 +16,7 @@ import { sleep } from '../../../data/livechat/utils'; import { updateSetting } from '../../../data/permissions.helper'; import type { IUserCredentialsHeader } from '../../../data/user'; import { password } from '../../../data/user'; -import { createUser, deleteUser, login } from '../../../data/users.helper'; +import { createUser, deleteUser, login, setUserActiveStatus, setUserStatus } from '../../../data/users.helper'; import { IS_EE } from '../../../e2e/config/constants'; (IS_EE ? describe : describe.skip)('Omnichannel - Routing', () => { @@ -123,6 +123,30 @@ import { IS_EE } from '../../../e2e/config/constants'; expect(roomInfo.servedBy).to.be.undefined; }); + it('should ignore disabled users', async () => { + await updateSetting('Livechat_maximum_chats_per_agent', 0); + await setUserActiveStatus(testUser2.user._id, false); + + const visitor = await createVisitor(testDepartment._id); + const room = await createLivechatRoom(visitor.token); + + await sleep(5000); + + const roomInfo = await getLivechatRoomInfo(room._id); + expect(roomInfo.servedBy).to.be.undefined; + }); + it('should ignore offline users when Livechat_enabled_when_agent_idle is false', async () => { + await updateSetting('Livechat_enabled_when_agent_idle', false); + await setUserStatus(testUser.credentials, UserStatus.OFFLINE); + + const visitor = await createVisitor(testDepartment._id); + const room = await createLivechatRoom(visitor.token); + + await sleep(5000); + + const roomInfo = await getLivechatRoomInfo(room._id); + expect(roomInfo.servedBy).to.be.undefined; + }); }); describe('Load Balancing', () => { before(async () => { diff --git a/apps/meteor/tests/unit/server/services/messages/hooks/BeforeSavePreventMention.tests.ts b/apps/meteor/tests/unit/server/services/messages/hooks/BeforeSavePreventMention.tests.ts new file mode 100644 index 000000000000..6dc6d472cae5 --- /dev/null +++ b/apps/meteor/tests/unit/server/services/messages/hooks/BeforeSavePreventMention.tests.ts @@ -0,0 +1,114 @@ +import { expect } from 'chai'; +import proxyquire from 'proxyquire'; + +const Authorization = { + hasPermission: async (_uid: string, _permission: string, _room?: string): Promise => true, +}; + +class MeteorError extends Error {} + +const { BeforeSavePreventMention } = proxyquire + .noCallThru() + .load('../../../../../../server/services/messages/hooks/BeforeSavePreventMention', { + '@rocket.chat/core-services': { + Authorization, + MeteorError, + }, + '../../../lib/i18n': { + i18n: { + t: (s: any) => s, + }, + }, + }); + +describe('Prevent mention on messages', () => { + it('should return void if message has no mentions', async () => { + const preventMention = new BeforeSavePreventMention(); + + return expect( + preventMention.preventMention({ + message: { rid: 'GENERAL', msg: 'hey', u: { _id: 'random' } }, + user: { _id: 'userId', language: 'en' }, + mention: 'all', + permission: 'mention-all', + }), + ).to.eventually.be.true; + }); + + it("should return void if message doesnt't have @all mention", () => { + const preventMention = new BeforeSavePreventMention(); + + return expect( + preventMention.preventMention({ + message: { rid: 'GENERAL', msg: 'hey', mentions: [{ _id: 'here' }], u: { _id: 'random' } }, + user: { _id: 'userId', language: 'en' }, + mention: 'all', + permission: 'mention-all', + }), + ).to.eventually.be.true; + }); + + it("should return void if message doesnt't have @here mention", () => { + const preventMention = new BeforeSavePreventMention(); + + return expect( + preventMention.preventMention({ + message: { rid: 'GENERAL', msg: 'hey', mentions: [{ _id: 'all' }], u: { _id: 'random' } }, + user: { _id: 'userId', language: 'en' }, + mention: 'all', + permission: 'mention-here', + }), + ).to.eventually.be.true; + }); + + it('should return true if user has required permission', () => { + const preventMention = new BeforeSavePreventMention(); + + Authorization.hasPermission = async () => true; + + return expect( + preventMention.preventMention({ + message: { rid: 'GENERAL', msg: 'hey', mentions: [{ _id: 'all' }], u: { _id: 'random' } }, + user: { _id: 'userId', language: 'en' }, + mention: 'all', + permission: 'mention-all', + }), + ).to.eventually.be.true; + }); + + it('should return void if user has required permission on room scope', () => { + const preventMention = new BeforeSavePreventMention(); + + Authorization.hasPermission = async (_uid, _permission, room) => { + if (room) { + return true; + } + + return false; + }; + + return expect( + preventMention.preventMention({ + message: { rid: 'GENERAL', msg: 'hey', mentions: [{ _id: 'all' }], u: { _id: 'random' } }, + user: { _id: 'userId', language: 'en' }, + mention: 'all', + permission: 'mention-all', + }), + ).to.eventually.be.true; + }); + + it("should throw if user doesn't have required permissions", () => { + Authorization.hasPermission = async (_uid, _permission, _room) => false; + + const preventMention = new BeforeSavePreventMention(); + + return expect( + preventMention.preventMention({ + message: { rid: 'GENERAL', msg: 'hey', mentions: [{ _id: 'all' }], u: { _id: 'random' } }, + user: { _id: 'userId', language: 'en' }, + mention: 'all', + permission: 'mention-all', + }), + ).to.be.rejectedWith(MeteorError); + }); +}); diff --git a/ee/apps/account-service/CHANGELOG.md b/ee/apps/account-service/CHANGELOG.md index fc99af061659..a19189da6cbf 100644 --- a/ee/apps/account-service/CHANGELOG.md +++ b/ee/apps/account-service/CHANGELOG.md @@ -1,5 +1,130 @@ # @rocket.chat/account-service +## 0.3.0-rc.7 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.7 +- @rocket.chat/rest-typings@6.5.0-rc.7 +- @rocket.chat/core-services@0.3.0-rc.7 +- @rocket.chat/model-typings@0.2.0-rc.7 +- @rocket.chat/models@0.0.21-rc.7 + +## 0.3.0-rc.6 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.6 +- @rocket.chat/rest-typings@6.5.0-rc.6 +- @rocket.chat/core-services@0.3.0-rc.6 +- @rocket.chat/model-typings@0.2.0-rc.6 +- @rocket.chat/models@0.0.21-rc.6 + +## 0.3.0-rc.5 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.5 +- @rocket.chat/rest-typings@6.5.0-rc.5 +- @rocket.chat/core-services@0.3.0-rc.5 +- @rocket.chat/model-typings@0.2.0-rc.5 +- @rocket.chat/models@0.0.21-rc.5 + +## 0.3.0-rc.4 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.4 +- @rocket.chat/rest-typings@6.5.0-rc.4 +- @rocket.chat/core-services@0.3.0-rc.4 +- @rocket.chat/model-typings@0.2.0-rc.4 +- @rocket.chat/models@0.0.21-rc.4 + +## 0.3.0-rc.3 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.3 +- @rocket.chat/rest-typings@6.5.0-rc.3 +- @rocket.chat/core-services@0.3.0-rc.3 +- @rocket.chat/model-typings@0.2.0-rc.3 +- @rocket.chat/models@0.0.21-rc.3 + +## 0.3.0-rc.2 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.2 +- @rocket.chat/rest-typings@6.5.0-rc.2 +- @rocket.chat/core-services@0.3.0-rc.2 +- @rocket.chat/model-typings@0.2.0-rc.2 +- @rocket.chat/models@0.0.21-rc.2 + +## 0.3.0-rc.1 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.1 +- @rocket.chat/rest-typings@6.5.0-rc.1 +- @rocket.chat/core-services@0.3.0-rc.1 +- @rocket.chat/model-typings@0.2.0-rc.1 +- @rocket.chat/models@0.0.21-rc.1 + +## 0.3.0-rc.0 + +### Minor Changes + +- 5f81a0f3cb: Implemented the License library, it is used to handle the functionality like expiration date, modules, limits, etc. + Also added a version v3 of the license, which contains an extended list of features. + v2 is still supported, since we convert it to v3 on the fly. + +### Patch Changes + +- Updated dependencies [dea1fe9191] +- Updated dependencies [c0ef13a0bf] +- Updated dependencies [223dce18a3] +- Updated dependencies [5b9d6883bf] +- Updated dependencies [92613680b7] +- Updated dependencies [ec1b2b9846] +- Updated dependencies [a98f3ff303] +- Updated dependencies [5f81a0f3cb] +- Updated dependencies [dea1fe9191] + - @rocket.chat/core-typings@6.5.0-rc.0 + - @rocket.chat/model-typings@0.2.0-rc.0 + - @rocket.chat/core-services@0.3.0-rc.0 + - @rocket.chat/rest-typings@6.5.0-rc.0 + - @rocket.chat/models@0.0.21-rc.0 + +## 0.2.17 + +### Patch Changes + +- @rocket.chat/core-typings@6.4.8 +- @rocket.chat/rest-typings@6.4.8 +- @rocket.chat/core-services@0.2.8 +- @rocket.chat/model-typings@0.1.8 +- @rocket.chat/models@0.0.23 + +## 0.2.16 + +### Patch Changes + +- @rocket.chat/core-typings@6.4.7 +- @rocket.chat/rest-typings@6.4.7 +- @rocket.chat/core-services@0.2.7 +- @rocket.chat/model-typings@0.1.7 +- @rocket.chat/models@0.0.22 + +## 0.2.15 + +### Patch Changes + +- @rocket.chat/core-typings@6.4.6 +- @rocket.chat/rest-typings@6.4.6 +- @rocket.chat/core-services@0.2.6 +- @rocket.chat/model-typings@0.1.6 +- @rocket.chat/models@0.0.21 + ## 0.2.14 ### Patch Changes diff --git a/ee/apps/account-service/package.json b/ee/apps/account-service/package.json index 2f5a8ecf4fbd..9a8de416d40e 100644 --- a/ee/apps/account-service/package.json +++ b/ee/apps/account-service/package.json @@ -1,7 +1,7 @@ { "name": "@rocket.chat/account-service", "private": true, - "version": "0.2.14", + "version": "0.3.0-rc.7", "description": "Rocket.Chat Account service", "scripts": { "build": "tsc -p tsconfig.json", @@ -22,7 +22,7 @@ "@rocket.chat/models": "workspace:^", "@rocket.chat/rest-typings": "workspace:^", "@rocket.chat/string-helpers": "next", - "@types/node": "^14.18.51", + "@types/node": "^14.18.63", "bcrypt": "^5.0.1", "ejson": "^2.2.3", "event-loop-stats": "^1.4.1", @@ -30,18 +30,18 @@ "fibers": "^5.0.3", "gc-stats": "^1.4.0", "mem": "^8.1.1", - "moleculer": "^0.14.29", + "moleculer": "^0.14.31", "mongodb": "^4.17.1", "nats": "^2.4.0", "pino": "^8.15.0", "polka": "^0.5.2", - "uuid": "^9.0.0" + "uuid": "^9.0.1" }, "devDependencies": { "@rocket.chat/eslint-config": "workspace:^", - "@types/bcrypt": "^5.0.0", - "@types/gc-stats": "^1", - "@types/polka": "^0.5.4", + "@types/bcrypt": "^5.0.1", + "@types/gc-stats": "^1.4.2", + "@types/polka": "^0.5.6", "eslint": "~8.45.0", "ts-node": "^10.9.1", "typescript": "~5.2.2" diff --git a/ee/apps/authorization-service/CHANGELOG.md b/ee/apps/authorization-service/CHANGELOG.md index 7a4697d509b2..08a17b61063b 100644 --- a/ee/apps/authorization-service/CHANGELOG.md +++ b/ee/apps/authorization-service/CHANGELOG.md @@ -1,5 +1,130 @@ # @rocket.chat/authorization-service +## 0.3.0-rc.7 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.7 +- @rocket.chat/rest-typings@6.5.0-rc.7 +- @rocket.chat/core-services@0.3.0-rc.7 +- @rocket.chat/model-typings@0.2.0-rc.7 +- @rocket.chat/models@0.0.21-rc.7 + +## 0.3.0-rc.6 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.6 +- @rocket.chat/rest-typings@6.5.0-rc.6 +- @rocket.chat/core-services@0.3.0-rc.6 +- @rocket.chat/model-typings@0.2.0-rc.6 +- @rocket.chat/models@0.0.21-rc.6 + +## 0.3.0-rc.5 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.5 +- @rocket.chat/rest-typings@6.5.0-rc.5 +- @rocket.chat/core-services@0.3.0-rc.5 +- @rocket.chat/model-typings@0.2.0-rc.5 +- @rocket.chat/models@0.0.21-rc.5 + +## 0.3.0-rc.4 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.4 +- @rocket.chat/rest-typings@6.5.0-rc.4 +- @rocket.chat/core-services@0.3.0-rc.4 +- @rocket.chat/model-typings@0.2.0-rc.4 +- @rocket.chat/models@0.0.21-rc.4 + +## 0.3.0-rc.3 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.3 +- @rocket.chat/rest-typings@6.5.0-rc.3 +- @rocket.chat/core-services@0.3.0-rc.3 +- @rocket.chat/model-typings@0.2.0-rc.3 +- @rocket.chat/models@0.0.21-rc.3 + +## 0.3.0-rc.2 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.2 +- @rocket.chat/rest-typings@6.5.0-rc.2 +- @rocket.chat/core-services@0.3.0-rc.2 +- @rocket.chat/model-typings@0.2.0-rc.2 +- @rocket.chat/models@0.0.21-rc.2 + +## 0.3.0-rc.1 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.1 +- @rocket.chat/rest-typings@6.5.0-rc.1 +- @rocket.chat/core-services@0.3.0-rc.1 +- @rocket.chat/model-typings@0.2.0-rc.1 +- @rocket.chat/models@0.0.21-rc.1 + +## 0.3.0-rc.0 + +### Minor Changes + +- 5f81a0f3cb: Implemented the License library, it is used to handle the functionality like expiration date, modules, limits, etc. + Also added a version v3 of the license, which contains an extended list of features. + v2 is still supported, since we convert it to v3 on the fly. + +### Patch Changes + +- Updated dependencies [dea1fe9191] +- Updated dependencies [c0ef13a0bf] +- Updated dependencies [223dce18a3] +- Updated dependencies [5b9d6883bf] +- Updated dependencies [92613680b7] +- Updated dependencies [ec1b2b9846] +- Updated dependencies [a98f3ff303] +- Updated dependencies [5f81a0f3cb] +- Updated dependencies [dea1fe9191] + - @rocket.chat/core-typings@6.5.0-rc.0 + - @rocket.chat/model-typings@0.2.0-rc.0 + - @rocket.chat/core-services@0.3.0-rc.0 + - @rocket.chat/rest-typings@6.5.0-rc.0 + - @rocket.chat/models@0.0.21-rc.0 + +## 0.2.17 + +### Patch Changes + +- @rocket.chat/core-typings@6.4.8 +- @rocket.chat/rest-typings@6.4.8 +- @rocket.chat/core-services@0.2.8 +- @rocket.chat/model-typings@0.1.8 +- @rocket.chat/models@0.0.23 + +## 0.2.16 + +### Patch Changes + +- @rocket.chat/core-typings@6.4.7 +- @rocket.chat/rest-typings@6.4.7 +- @rocket.chat/core-services@0.2.7 +- @rocket.chat/model-typings@0.1.7 +- @rocket.chat/models@0.0.22 + +## 0.2.15 + +### Patch Changes + +- @rocket.chat/core-typings@6.4.6 +- @rocket.chat/rest-typings@6.4.6 +- @rocket.chat/core-services@0.2.6 +- @rocket.chat/model-typings@0.1.6 +- @rocket.chat/models@0.0.21 + ## 0.2.14 ### Patch Changes diff --git a/ee/apps/authorization-service/package.json b/ee/apps/authorization-service/package.json index 1bc47f6e6c7e..83d0969d07cf 100644 --- a/ee/apps/authorization-service/package.json +++ b/ee/apps/authorization-service/package.json @@ -1,7 +1,7 @@ { "name": "@rocket.chat/authorization-service", "private": true, - "version": "0.2.14", + "version": "0.3.0-rc.7", "description": "Rocket.Chat Authorization service", "scripts": { "build": "tsc -p tsconfig.json", @@ -22,14 +22,14 @@ "@rocket.chat/models": "workspace:^", "@rocket.chat/rest-typings": "workspace:^", "@rocket.chat/string-helpers": "next", - "@types/node": "^14.18.51", + "@types/node": "^14.18.63", "ejson": "^2.2.3", "event-loop-stats": "^1.4.1", "eventemitter3": "^4.0.7", "fibers": "^5.0.3", "gc-stats": "^1.4.0", "mem": "^8.1.1", - "moleculer": "^0.14.29", + "moleculer": "^0.14.31", "mongodb": "^4.17.1", "nats": "^2.4.0", "pino": "^8.15.0", @@ -37,8 +37,8 @@ }, "devDependencies": { "@rocket.chat/eslint-config": "workspace:^", - "@types/gc-stats": "^1", - "@types/polka": "^0.5.4", + "@types/gc-stats": "^1.4.2", + "@types/polka": "^0.5.6", "eslint": "~8.45.0", "ts-node": "^10.9.1", "typescript": "~5.2.2" diff --git a/ee/apps/ddp-streamer/CHANGELOG.md b/ee/apps/ddp-streamer/CHANGELOG.md index 10bce4f89307..f86e59f76b96 100644 --- a/ee/apps/ddp-streamer/CHANGELOG.md +++ b/ee/apps/ddp-streamer/CHANGELOG.md @@ -1,5 +1,153 @@ # @rocket.chat/ddp-streamer +## 0.2.0-rc.7 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.7 +- @rocket.chat/rest-typings@6.5.0-rc.7 +- @rocket.chat/core-services@0.3.0-rc.7 +- @rocket.chat/model-typings@0.2.0-rc.7 +- @rocket.chat/ui-contexts@3.0.0-rc.7 +- @rocket.chat/models@0.0.21-rc.7 +- @rocket.chat/instance-status@0.0.21-rc.7 + +## 0.2.0-rc.6 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.6 +- @rocket.chat/rest-typings@6.5.0-rc.6 +- @rocket.chat/core-services@0.3.0-rc.6 +- @rocket.chat/model-typings@0.2.0-rc.6 +- @rocket.chat/ui-contexts@3.0.0-rc.6 +- @rocket.chat/models@0.0.21-rc.6 +- @rocket.chat/instance-status@0.0.21-rc.6 + +## 0.2.0-rc.5 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.5 +- @rocket.chat/rest-typings@6.5.0-rc.5 +- @rocket.chat/core-services@0.3.0-rc.5 +- @rocket.chat/model-typings@0.2.0-rc.5 +- @rocket.chat/ui-contexts@3.0.0-rc.5 +- @rocket.chat/models@0.0.21-rc.5 +- @rocket.chat/instance-status@0.0.21-rc.5 + +## 0.2.0-rc.4 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.4 +- @rocket.chat/rest-typings@6.5.0-rc.4 +- @rocket.chat/core-services@0.3.0-rc.4 +- @rocket.chat/model-typings@0.2.0-rc.4 +- @rocket.chat/ui-contexts@3.0.0-rc.4 +- @rocket.chat/models@0.0.21-rc.4 +- @rocket.chat/instance-status@0.0.21-rc.4 + +## 0.2.0-rc.3 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.3 +- @rocket.chat/rest-typings@6.5.0-rc.3 +- @rocket.chat/core-services@0.3.0-rc.3 +- @rocket.chat/model-typings@0.2.0-rc.3 +- @rocket.chat/ui-contexts@3.0.0-rc.3 +- @rocket.chat/models@0.0.21-rc.3 +- @rocket.chat/instance-status@0.0.21-rc.3 + +## 0.2.0-rc.2 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.2 +- @rocket.chat/rest-typings@6.5.0-rc.2 +- @rocket.chat/core-services@0.3.0-rc.2 +- @rocket.chat/model-typings@0.2.0-rc.2 +- @rocket.chat/ui-contexts@3.0.0-rc.2 +- @rocket.chat/models@0.0.21-rc.2 +- @rocket.chat/instance-status@0.0.21-rc.2 + +## 0.2.0-rc.1 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.1 +- @rocket.chat/rest-typings@6.5.0-rc.1 +- @rocket.chat/core-services@0.3.0-rc.1 +- @rocket.chat/model-typings@0.2.0-rc.1 +- @rocket.chat/ui-contexts@3.0.0-rc.1 +- @rocket.chat/models@0.0.21-rc.1 +- @rocket.chat/instance-status@0.0.21-rc.1 + +## 0.2.0-rc.0 + +### Minor Changes + +- 5f81a0f3cb: Implemented the License library, it is used to handle the functionality like expiration date, modules, limits, etc. + Also added a version v3 of the license, which contains an extended list of features. + v2 is still supported, since we convert it to v3 on the fly. + +### Patch Changes + +- Updated dependencies [7da1edf866] +- Updated dependencies [dea1fe9191] +- Updated dependencies [c0ef13a0bf] +- Updated dependencies [223dce18a3] +- Updated dependencies [5b9d6883bf] +- Updated dependencies [92613680b7] +- Updated dependencies [ec1b2b9846] +- Updated dependencies [a98f3ff303] +- Updated dependencies [5f81a0f3cb] +- Updated dependencies [dea1fe9191] + - @rocket.chat/ui-contexts@3.0.0-rc.0 + - @rocket.chat/core-typings@6.5.0-rc.0 + - @rocket.chat/model-typings@0.2.0-rc.0 + - @rocket.chat/core-services@0.3.0-rc.0 + - @rocket.chat/rest-typings@6.5.0-rc.0 + - @rocket.chat/models@0.0.21-rc.0 + - @rocket.chat/instance-status@0.0.21-rc.0 + +## 0.1.17 + +### Patch Changes + +- @rocket.chat/core-typings@6.4.8 +- @rocket.chat/rest-typings@6.4.8 +- @rocket.chat/core-services@0.2.8 +- @rocket.chat/model-typings@0.1.8 +- @rocket.chat/ui-contexts@2.0.8 +- @rocket.chat/models@0.0.23 +- @rocket.chat/instance-status@0.0.23 + +## 0.1.16 + +### Patch Changes + +- @rocket.chat/core-typings@6.4.7 +- @rocket.chat/rest-typings@6.4.7 +- @rocket.chat/core-services@0.2.7 +- @rocket.chat/model-typings@0.1.7 +- @rocket.chat/ui-contexts@2.0.7 +- @rocket.chat/models@0.0.22 +- @rocket.chat/instance-status@0.0.22 + +## 0.1.15 + +### Patch Changes + +- @rocket.chat/core-typings@6.4.6 +- @rocket.chat/rest-typings@6.4.6 +- @rocket.chat/core-services@0.2.6 +- @rocket.chat/model-typings@0.1.6 +- @rocket.chat/ui-contexts@2.0.6 +- @rocket.chat/models@0.0.21 +- @rocket.chat/instance-status@0.0.21 + ## 0.1.14 ### Patch Changes diff --git a/ee/apps/ddp-streamer/package.json b/ee/apps/ddp-streamer/package.json index ae0f1ac7fdac..4cee0967c56c 100644 --- a/ee/apps/ddp-streamer/package.json +++ b/ee/apps/ddp-streamer/package.json @@ -1,7 +1,7 @@ { "name": "@rocket.chat/ddp-streamer", "private": true, - "version": "0.1.14", + "version": "0.2.0-rc.7", "description": "Rocket.Chat DDP-Streamer service", "scripts": { "build": "tsc -p tsconfig.json", @@ -34,26 +34,26 @@ "gc-stats": "^1.4.0", "jaeger-client": "^3.19.0", "mem": "^8.1.1", - "moleculer": "^0.14.29", + "moleculer": "^0.14.31", "mongodb": "^4.17.1", "nats": "^2.4.0", "pino": "^8.15.0", "polka": "^0.5.2", - "sharp": "^0.30.7", + "sharp": "^0.32.6", "underscore": "^1.13.6", "uuid": "^7.0.3", "ws": "^8.8.1" }, "devDependencies": { "@rocket.chat/eslint-config": "workspace:^", - "@types/ejson": "^2.2.0", - "@types/gc-stats": "^1", - "@types/meteor": "^2.9.2", - "@types/node": "^14.18.51", - "@types/polka": "^0.5.4", + "@types/ejson": "^2.2.1", + "@types/gc-stats": "^1.4.2", + "@types/meteor": "^2.9.5", + "@types/node": "^14.18.63", + "@types/polka": "^0.5.6", "@types/sharp": "^0.30.5", "@types/uuid": "^8.3.4", - "@types/ws": "^8.5.5", + "@types/ws": "^8.5.8", "eslint": "~8.45.0", "pino-pretty": "^7.6.1", "ts-node": "^10.9.1", diff --git a/ee/apps/omnichannel-transcript/CHANGELOG.md b/ee/apps/omnichannel-transcript/CHANGELOG.md index a6cc1cd86b76..4cf5684defe4 100644 --- a/ee/apps/omnichannel-transcript/CHANGELOG.md +++ b/ee/apps/omnichannel-transcript/CHANGELOG.md @@ -1,5 +1,141 @@ # @rocket.chat/omnichannel-transcript +## 0.3.0-rc.7 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.7 +- @rocket.chat/omnichannel-services@0.1.0-rc.7 +- @rocket.chat/pdf-worker@0.0.21-rc.7 +- @rocket.chat/core-services@0.3.0-rc.7 +- @rocket.chat/model-typings@0.2.0-rc.7 +- @rocket.chat/models@0.0.21-rc.7 + +## 0.3.0-rc.6 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.6 +- @rocket.chat/omnichannel-services@0.1.0-rc.6 +- @rocket.chat/pdf-worker@0.0.21-rc.6 +- @rocket.chat/core-services@0.3.0-rc.6 +- @rocket.chat/model-typings@0.2.0-rc.6 +- @rocket.chat/models@0.0.21-rc.6 + +## 0.3.0-rc.5 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.5 +- @rocket.chat/omnichannel-services@0.1.0-rc.5 +- @rocket.chat/pdf-worker@0.0.21-rc.5 +- @rocket.chat/core-services@0.3.0-rc.5 +- @rocket.chat/model-typings@0.2.0-rc.5 +- @rocket.chat/models@0.0.21-rc.5 + +## 0.3.0-rc.4 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.4 +- @rocket.chat/omnichannel-services@0.1.0-rc.4 +- @rocket.chat/pdf-worker@0.0.21-rc.4 +- @rocket.chat/core-services@0.3.0-rc.4 +- @rocket.chat/model-typings@0.2.0-rc.4 +- @rocket.chat/models@0.0.21-rc.4 + +## 0.3.0-rc.3 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.3 +- @rocket.chat/omnichannel-services@0.1.0-rc.3 +- @rocket.chat/pdf-worker@0.0.21-rc.3 +- @rocket.chat/core-services@0.3.0-rc.3 +- @rocket.chat/model-typings@0.2.0-rc.3 +- @rocket.chat/models@0.0.21-rc.3 + +## 0.3.0-rc.2 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.2 +- @rocket.chat/omnichannel-services@0.1.0-rc.2 +- @rocket.chat/pdf-worker@0.0.21-rc.2 +- @rocket.chat/core-services@0.3.0-rc.2 +- @rocket.chat/model-typings@0.2.0-rc.2 +- @rocket.chat/models@0.0.21-rc.2 + +## 0.3.0-rc.1 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.1 +- @rocket.chat/omnichannel-services@0.1.0-rc.1 +- @rocket.chat/pdf-worker@0.0.21-rc.1 +- @rocket.chat/core-services@0.3.0-rc.1 +- @rocket.chat/model-typings@0.2.0-rc.1 +- @rocket.chat/models@0.0.21-rc.1 + +## 0.3.0-rc.0 + +### Minor Changes + +- 5f81a0f3cb: Implemented the License library, it is used to handle the functionality like expiration date, modules, limits, etc. + Also added a version v3 of the license, which contains an extended list of features. + v2 is still supported, since we convert it to v3 on the fly. + +### Patch Changes + +- Updated dependencies [dea1fe9191] +- Updated dependencies [c0ef13a0bf] +- Updated dependencies [223dce18a3] +- Updated dependencies [5b9d6883bf] +- Updated dependencies [92613680b7] +- Updated dependencies [ec1b2b9846] +- Updated dependencies [5f81a0f3cb] +- Updated dependencies [dea1fe9191] + - @rocket.chat/core-typings@6.5.0-rc.0 + - @rocket.chat/model-typings@0.2.0-rc.0 + - @rocket.chat/core-services@0.3.0-rc.0 + - @rocket.chat/tools@0.2.0-rc.0 + - @rocket.chat/omnichannel-services@0.1.0-rc.0 + - @rocket.chat/pdf-worker@0.0.21-rc.0 + - @rocket.chat/models@0.0.21-rc.0 + +## 0.2.17 + +### Patch Changes + +- @rocket.chat/core-typings@6.4.8 +- @rocket.chat/omnichannel-services@0.0.23 +- @rocket.chat/pdf-worker@0.0.23 +- @rocket.chat/core-services@0.2.8 +- @rocket.chat/model-typings@0.1.8 +- @rocket.chat/models@0.0.23 + +## 0.2.16 + +### Patch Changes + +- @rocket.chat/core-typings@6.4.7 +- @rocket.chat/omnichannel-services@0.0.22 +- @rocket.chat/pdf-worker@0.0.22 +- @rocket.chat/core-services@0.2.7 +- @rocket.chat/model-typings@0.1.7 +- @rocket.chat/models@0.0.22 + +## 0.2.15 + +### Patch Changes + +- @rocket.chat/core-typings@6.4.6 +- @rocket.chat/omnichannel-services@0.0.21 +- @rocket.chat/pdf-worker@0.0.21 +- @rocket.chat/core-services@0.2.6 +- @rocket.chat/model-typings@0.1.6 +- @rocket.chat/models@0.0.21 + ## 0.2.14 ### Patch Changes diff --git a/ee/apps/omnichannel-transcript/package.json b/ee/apps/omnichannel-transcript/package.json index 788205b5d1de..7369f418a6d0 100644 --- a/ee/apps/omnichannel-transcript/package.json +++ b/ee/apps/omnichannel-transcript/package.json @@ -1,7 +1,7 @@ { "name": "@rocket.chat/omnichannel-transcript", "private": true, - "version": "0.2.14", + "version": "0.3.0-rc.7", "description": "Rocket.Chat service", "scripts": { "build": "tsc -p tsconfig.json", @@ -15,7 +15,7 @@ ], "author": "Rocket.Chat", "dependencies": { - "@react-pdf/renderer": "^3.1.12", + "@react-pdf/renderer": "^3.1.14", "@rocket.chat/core-services": "workspace:^", "@rocket.chat/core-typings": "workspace:^", "@rocket.chat/emitter": "next", @@ -25,7 +25,7 @@ "@rocket.chat/omnichannel-services": "workspace:^", "@rocket.chat/pdf-worker": "workspace:^", "@rocket.chat/tools": "workspace:^", - "@types/node": "^14.18.51", + "@types/node": "^14.18.63", "ejson": "^2.2.3", "emoji-toolkit": "^7.0.1", "event-loop-stats": "^1.4.1", @@ -33,7 +33,7 @@ "fibers": "^5.0.3", "gc-stats": "^1.4.0", "mem": "^8.1.1", - "moleculer": "^0.14.29", + "moleculer": "^0.14.31", "moment-timezone": "^0.5.43", "mongo-message-queue": "^1.0.0", "mongodb": "^4.17.1", @@ -44,8 +44,8 @@ "devDependencies": { "@rocket.chat/eslint-config": "workspace:^", "@rocket.chat/ui-contexts": "workspace:^", - "@types/gc-stats": "^1", - "@types/polka": "^0.5.4", + "@types/gc-stats": "^1.4.2", + "@types/polka": "^0.5.6", "eslint": "~8.45.0", "ts-node": "^10.9.1", "typescript": "~5.2.2" diff --git a/ee/apps/presence-service/CHANGELOG.md b/ee/apps/presence-service/CHANGELOG.md index ab38309b7706..cc34c979175a 100644 --- a/ee/apps/presence-service/CHANGELOG.md +++ b/ee/apps/presence-service/CHANGELOG.md @@ -1,5 +1,130 @@ # @rocket.chat/presence-service +## 0.3.0-rc.7 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.7 +- @rocket.chat/presence@0.1.0-rc.7 +- @rocket.chat/core-services@0.3.0-rc.7 +- @rocket.chat/model-typings@0.2.0-rc.7 +- @rocket.chat/models@0.0.21-rc.7 + +## 0.3.0-rc.6 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.6 +- @rocket.chat/presence@0.1.0-rc.6 +- @rocket.chat/core-services@0.3.0-rc.6 +- @rocket.chat/model-typings@0.2.0-rc.6 +- @rocket.chat/models@0.0.21-rc.6 + +## 0.3.0-rc.5 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.5 +- @rocket.chat/presence@0.1.0-rc.5 +- @rocket.chat/core-services@0.3.0-rc.5 +- @rocket.chat/model-typings@0.2.0-rc.5 +- @rocket.chat/models@0.0.21-rc.5 + +## 0.3.0-rc.4 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.4 +- @rocket.chat/presence@0.1.0-rc.4 +- @rocket.chat/core-services@0.3.0-rc.4 +- @rocket.chat/model-typings@0.2.0-rc.4 +- @rocket.chat/models@0.0.21-rc.4 + +## 0.3.0-rc.3 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.3 +- @rocket.chat/presence@0.1.0-rc.3 +- @rocket.chat/core-services@0.3.0-rc.3 +- @rocket.chat/model-typings@0.2.0-rc.3 +- @rocket.chat/models@0.0.21-rc.3 + +## 0.3.0-rc.2 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.2 +- @rocket.chat/presence@0.1.0-rc.2 +- @rocket.chat/core-services@0.3.0-rc.2 +- @rocket.chat/model-typings@0.2.0-rc.2 +- @rocket.chat/models@0.0.21-rc.2 + +## 0.3.0-rc.1 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.1 +- @rocket.chat/presence@0.1.0-rc.1 +- @rocket.chat/core-services@0.3.0-rc.1 +- @rocket.chat/model-typings@0.2.0-rc.1 +- @rocket.chat/models@0.0.21-rc.1 + +## 0.3.0-rc.0 + +### Minor Changes + +- 5f81a0f3cb: Implemented the License library, it is used to handle the functionality like expiration date, modules, limits, etc. + Also added a version v3 of the license, which contains an extended list of features. + v2 is still supported, since we convert it to v3 on the fly. + +### Patch Changes + +- Updated dependencies [dea1fe9191] +- Updated dependencies [c0ef13a0bf] +- Updated dependencies [c38711b346] +- Updated dependencies [223dce18a3] +- Updated dependencies [5b9d6883bf] +- Updated dependencies [92613680b7] +- Updated dependencies [ec1b2b9846] +- Updated dependencies [5f81a0f3cb] +- Updated dependencies [dea1fe9191] + - @rocket.chat/core-typings@6.5.0-rc.0 + - @rocket.chat/model-typings@0.2.0-rc.0 + - @rocket.chat/presence@0.1.0-rc.0 + - @rocket.chat/core-services@0.3.0-rc.0 + - @rocket.chat/models@0.0.21-rc.0 + +## 0.2.17 + +### Patch Changes + +- @rocket.chat/core-typings@6.4.8 +- @rocket.chat/presence@0.0.23 +- @rocket.chat/core-services@0.2.8 +- @rocket.chat/model-typings@0.1.8 +- @rocket.chat/models@0.0.23 + +## 0.2.16 + +### Patch Changes + +- @rocket.chat/core-typings@6.4.7 +- @rocket.chat/presence@0.0.22 +- @rocket.chat/core-services@0.2.7 +- @rocket.chat/model-typings@0.1.7 +- @rocket.chat/models@0.0.22 + +## 0.2.15 + +### Patch Changes + +- @rocket.chat/core-typings@6.4.6 +- @rocket.chat/presence@0.0.21 +- @rocket.chat/core-services@0.2.6 +- @rocket.chat/model-typings@0.1.6 +- @rocket.chat/models@0.0.21 + ## 0.2.14 ### Patch Changes diff --git a/ee/apps/presence-service/package.json b/ee/apps/presence-service/package.json index 873fb4b9e585..092c29aea948 100644 --- a/ee/apps/presence-service/package.json +++ b/ee/apps/presence-service/package.json @@ -1,7 +1,7 @@ { "name": "@rocket.chat/presence-service", "private": true, - "version": "0.2.14", + "version": "0.3.0-rc.7", "description": "Rocket.Chat Presence service", "scripts": { "build": "tsc -p tsconfig.json", @@ -22,14 +22,14 @@ "@rocket.chat/models": "workspace:^", "@rocket.chat/presence": "workspace:^", "@rocket.chat/string-helpers": "next", - "@types/node": "^14.18.51", + "@types/node": "^14.18.63", "ejson": "^2.2.3", "event-loop-stats": "^1.4.1", "eventemitter3": "^4.0.7", "fibers": "^5.0.3", "gc-stats": "^1.4.0", "mem": "^8.1.1", - "moleculer": "^0.14.29", + "moleculer": "^0.14.31", "mongodb": "^4.17.1", "nats": "^2.4.0", "pino": "^8.15.0", @@ -37,8 +37,8 @@ }, "devDependencies": { "@rocket.chat/eslint-config": "workspace:^", - "@types/gc-stats": "^1", - "@types/polka": "^0.5.4", + "@types/gc-stats": "^1.4.2", + "@types/polka": "^0.5.6", "eslint": "~8.45.0", "ts-node": "^10.9.1", "typescript": "~5.2.2" diff --git a/ee/apps/queue-worker/CHANGELOG.md b/ee/apps/queue-worker/CHANGELOG.md index 32800e6efe99..54b40f64181d 100644 --- a/ee/apps/queue-worker/CHANGELOG.md +++ b/ee/apps/queue-worker/CHANGELOG.md @@ -1,5 +1,129 @@ # @rocket.chat/queue-worker +## 0.3.0-rc.7 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.7 +- @rocket.chat/omnichannel-services@0.1.0-rc.7 +- @rocket.chat/core-services@0.3.0-rc.7 +- @rocket.chat/model-typings@0.2.0-rc.7 +- @rocket.chat/models@0.0.21-rc.7 + +## 0.3.0-rc.6 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.6 +- @rocket.chat/omnichannel-services@0.1.0-rc.6 +- @rocket.chat/core-services@0.3.0-rc.6 +- @rocket.chat/model-typings@0.2.0-rc.6 +- @rocket.chat/models@0.0.21-rc.6 + +## 0.3.0-rc.5 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.5 +- @rocket.chat/omnichannel-services@0.1.0-rc.5 +- @rocket.chat/core-services@0.3.0-rc.5 +- @rocket.chat/model-typings@0.2.0-rc.5 +- @rocket.chat/models@0.0.21-rc.5 + +## 0.3.0-rc.4 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.4 +- @rocket.chat/omnichannel-services@0.1.0-rc.4 +- @rocket.chat/core-services@0.3.0-rc.4 +- @rocket.chat/model-typings@0.2.0-rc.4 +- @rocket.chat/models@0.0.21-rc.4 + +## 0.3.0-rc.3 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.3 +- @rocket.chat/omnichannel-services@0.1.0-rc.3 +- @rocket.chat/core-services@0.3.0-rc.3 +- @rocket.chat/model-typings@0.2.0-rc.3 +- @rocket.chat/models@0.0.21-rc.3 + +## 0.3.0-rc.2 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.2 +- @rocket.chat/omnichannel-services@0.1.0-rc.2 +- @rocket.chat/core-services@0.3.0-rc.2 +- @rocket.chat/model-typings@0.2.0-rc.2 +- @rocket.chat/models@0.0.21-rc.2 + +## 0.3.0-rc.1 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.1 +- @rocket.chat/omnichannel-services@0.1.0-rc.1 +- @rocket.chat/core-services@0.3.0-rc.1 +- @rocket.chat/model-typings@0.2.0-rc.1 +- @rocket.chat/models@0.0.21-rc.1 + +## 0.3.0-rc.0 + +### Minor Changes + +- 5f81a0f3cb: Implemented the License library, it is used to handle the functionality like expiration date, modules, limits, etc. + Also added a version v3 of the license, which contains an extended list of features. + v2 is still supported, since we convert it to v3 on the fly. + +### Patch Changes + +- Updated dependencies [dea1fe9191] +- Updated dependencies [c0ef13a0bf] +- Updated dependencies [223dce18a3] +- Updated dependencies [5b9d6883bf] +- Updated dependencies [92613680b7] +- Updated dependencies [ec1b2b9846] +- Updated dependencies [5f81a0f3cb] +- Updated dependencies [dea1fe9191] + - @rocket.chat/core-typings@6.5.0-rc.0 + - @rocket.chat/model-typings@0.2.0-rc.0 + - @rocket.chat/core-services@0.3.0-rc.0 + - @rocket.chat/omnichannel-services@0.1.0-rc.0 + - @rocket.chat/models@0.0.21-rc.0 + +## 0.2.17 + +### Patch Changes + +- @rocket.chat/core-typings@6.4.8 +- @rocket.chat/omnichannel-services@0.0.23 +- @rocket.chat/core-services@0.2.8 +- @rocket.chat/model-typings@0.1.8 +- @rocket.chat/models@0.0.23 + +## 0.2.16 + +### Patch Changes + +- @rocket.chat/core-typings@6.4.7 +- @rocket.chat/omnichannel-services@0.0.22 +- @rocket.chat/core-services@0.2.7 +- @rocket.chat/model-typings@0.1.7 +- @rocket.chat/models@0.0.22 + +## 0.2.15 + +### Patch Changes + +- @rocket.chat/core-typings@6.4.6 +- @rocket.chat/omnichannel-services@0.0.21 +- @rocket.chat/core-services@0.2.6 +- @rocket.chat/model-typings@0.1.6 +- @rocket.chat/models@0.0.21 + ## 0.2.14 ### Patch Changes diff --git a/ee/apps/queue-worker/package.json b/ee/apps/queue-worker/package.json index 3298aa48b3cc..d86b3d8ac00e 100644 --- a/ee/apps/queue-worker/package.json +++ b/ee/apps/queue-worker/package.json @@ -1,7 +1,7 @@ { "name": "@rocket.chat/queue-worker", "private": true, - "version": "0.2.14", + "version": "0.3.0-rc.7", "description": "Rocket.Chat service", "scripts": { "build": "tsc -p tsconfig.json", @@ -15,7 +15,7 @@ ], "author": "Rocket.Chat", "dependencies": { - "@react-pdf/renderer": "^3.1.12", + "@react-pdf/renderer": "^3.1.14", "@rocket.chat/core-services": "workspace:^", "@rocket.chat/core-typings": "workspace:^", "@rocket.chat/emitter": "next", @@ -23,7 +23,7 @@ "@rocket.chat/model-typings": "workspace:^", "@rocket.chat/models": "workspace:^", "@rocket.chat/omnichannel-services": "workspace:^", - "@types/node": "^14.18.51", + "@types/node": "^14.18.63", "ejson": "^2.2.3", "emoji-toolkit": "^7.0.1", "event-loop-stats": "^1.4.1", @@ -31,7 +31,7 @@ "fibers": "^5.0.3", "gc-stats": "^1.4.0", "mem": "^8.1.1", - "moleculer": "^0.14.29", + "moleculer": "^0.14.31", "moment-timezone": "^0.5.43", "mongo-message-queue": "^1.0.0", "mongodb": "^4.17.1", @@ -41,8 +41,8 @@ }, "devDependencies": { "@rocket.chat/eslint-config": "workspace:^", - "@types/gc-stats": "^1", - "@types/polka": "^0.5.4", + "@types/gc-stats": "^1.4.2", + "@types/polka": "^0.5.6", "eslint": "~8.45.0", "ts-node": "^10.9.1", "typescript": "~5.2.2" diff --git a/ee/apps/stream-hub-service/CHANGELOG.md b/ee/apps/stream-hub-service/CHANGELOG.md index b9bb432df948..d27e6701d005 100644 --- a/ee/apps/stream-hub-service/CHANGELOG.md +++ b/ee/apps/stream-hub-service/CHANGELOG.md @@ -1,5 +1,118 @@ # @rocket.chat/stream-hub-service +## 0.3.0-rc.7 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.7 +- @rocket.chat/core-services@0.3.0-rc.7 +- @rocket.chat/model-typings@0.2.0-rc.7 +- @rocket.chat/models@0.0.21-rc.7 + +## 0.3.0-rc.6 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.6 +- @rocket.chat/core-services@0.3.0-rc.6 +- @rocket.chat/model-typings@0.2.0-rc.6 +- @rocket.chat/models@0.0.21-rc.6 + +## 0.3.0-rc.5 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.5 +- @rocket.chat/core-services@0.3.0-rc.5 +- @rocket.chat/model-typings@0.2.0-rc.5 +- @rocket.chat/models@0.0.21-rc.5 + +## 0.3.0-rc.4 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.4 +- @rocket.chat/core-services@0.3.0-rc.4 +- @rocket.chat/model-typings@0.2.0-rc.4 +- @rocket.chat/models@0.0.21-rc.4 + +## 0.3.0-rc.3 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.3 +- @rocket.chat/core-services@0.3.0-rc.3 +- @rocket.chat/model-typings@0.2.0-rc.3 +- @rocket.chat/models@0.0.21-rc.3 + +## 0.3.0-rc.2 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.2 +- @rocket.chat/core-services@0.3.0-rc.2 +- @rocket.chat/model-typings@0.2.0-rc.2 +- @rocket.chat/models@0.0.21-rc.2 + +## 0.3.0-rc.1 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.1 +- @rocket.chat/core-services@0.3.0-rc.1 +- @rocket.chat/model-typings@0.2.0-rc.1 +- @rocket.chat/models@0.0.21-rc.1 + +## 0.3.0-rc.0 + +### Minor Changes + +- 5f81a0f3cb: Implemented the License library, it is used to handle the functionality like expiration date, modules, limits, etc. + Also added a version v3 of the license, which contains an extended list of features. + v2 is still supported, since we convert it to v3 on the fly. + +### Patch Changes + +- Updated dependencies [dea1fe9191] +- Updated dependencies [c0ef13a0bf] +- Updated dependencies [223dce18a3] +- Updated dependencies [5b9d6883bf] +- Updated dependencies [92613680b7] +- Updated dependencies [ec1b2b9846] +- Updated dependencies [5f81a0f3cb] +- Updated dependencies [dea1fe9191] + - @rocket.chat/core-typings@6.5.0-rc.0 + - @rocket.chat/model-typings@0.2.0-rc.0 + - @rocket.chat/core-services@0.3.0-rc.0 + - @rocket.chat/models@0.0.21-rc.0 + +## 0.2.17 + +### Patch Changes + +- @rocket.chat/core-typings@6.4.8 +- @rocket.chat/core-services@0.2.8 +- @rocket.chat/model-typings@0.1.8 +- @rocket.chat/models@0.0.23 + +## 0.2.16 + +### Patch Changes + +- @rocket.chat/core-typings@6.4.7 +- @rocket.chat/core-services@0.2.7 +- @rocket.chat/model-typings@0.1.7 +- @rocket.chat/models@0.0.22 + +## 0.2.15 + +### Patch Changes + +- @rocket.chat/core-typings@6.4.6 +- @rocket.chat/core-services@0.2.6 +- @rocket.chat/model-typings@0.1.6 +- @rocket.chat/models@0.0.21 + ## 0.2.14 ### Patch Changes diff --git a/ee/apps/stream-hub-service/package.json b/ee/apps/stream-hub-service/package.json index 8bd7cd58d491..a615bb9bde70 100644 --- a/ee/apps/stream-hub-service/package.json +++ b/ee/apps/stream-hub-service/package.json @@ -1,7 +1,7 @@ { "name": "@rocket.chat/stream-hub-service", "private": true, - "version": "0.2.14", + "version": "0.3.0-rc.7", "description": "Rocket.Chat Stream Hub service", "scripts": { "build": "tsc -p tsconfig.json", @@ -22,14 +22,14 @@ "@rocket.chat/model-typings": "workspace:^", "@rocket.chat/models": "workspace:^", "@rocket.chat/string-helpers": "next", - "@types/node": "^14.18.51", + "@types/node": "^14.18.63", "ejson": "^2.2.3", "event-loop-stats": "^1.4.1", "eventemitter3": "^4.0.7", "fibers": "^5.0.3", "gc-stats": "^1.4.0", "mem": "^8.1.1", - "moleculer": "^0.14.29", + "moleculer": "^0.14.31", "mongodb": "^4.17.1", "nats": "^2.4.0", "pino": "^8.15.0", @@ -38,9 +38,9 @@ "devDependencies": { "@rocket.chat/eslint-config": "workspace:^", "@rocket.chat/rest-typings": "workspace:^", - "@types/bcrypt": "^5.0.0", - "@types/gc-stats": "^1", - "@types/polka": "^0.5.4", + "@types/bcrypt": "^5.0.1", + "@types/gc-stats": "^1.4.2", + "@types/polka": "^0.5.6", "eslint": "~8.45.0", "ts-node": "^10.9.1", "typescript": "~5.2.2" diff --git a/ee/packages/api-client/CHANGELOG.md b/ee/packages/api-client/CHANGELOG.md index ed31495e7dbc..7f0793b918b8 100644 --- a/ee/packages/api-client/CHANGELOG.md +++ b/ee/packages/api-client/CHANGELOG.md @@ -1,5 +1,90 @@ # @rocket.chat/api-client +## 0.1.15-rc.7 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.7 +- @rocket.chat/rest-typings@6.5.0-rc.7 + +## 0.1.15-rc.6 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.6 +- @rocket.chat/rest-typings@6.5.0-rc.6 + +## 0.1.15-rc.5 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.5 +- @rocket.chat/rest-typings@6.5.0-rc.5 + +## 0.1.15-rc.4 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.4 +- @rocket.chat/rest-typings@6.5.0-rc.4 + +## 0.1.15-rc.3 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.3 +- @rocket.chat/rest-typings@6.5.0-rc.3 + +## 0.1.15-rc.2 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.2 +- @rocket.chat/rest-typings@6.5.0-rc.2 + +## 0.1.15-rc.1 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.1 +- @rocket.chat/rest-typings@6.5.0-rc.1 + +## 0.1.15-rc.0 + +### Patch Changes + +- Updated dependencies [dea1fe9191] +- Updated dependencies [c0ef13a0bf] +- Updated dependencies [5b9d6883bf] +- Updated dependencies [92613680b7] +- Updated dependencies [ec1b2b9846] +- Updated dependencies [a98f3ff303] +- Updated dependencies [5f81a0f3cb] +- Updated dependencies [dea1fe9191] + - @rocket.chat/core-typings@6.5.0-rc.0 + - @rocket.chat/rest-typings@6.5.0-rc.0 + +## 0.1.17 + +### Patch Changes + +- @rocket.chat/core-typings@6.4.8 +- @rocket.chat/rest-typings@6.4.8 + +## 0.1.16 + +### Patch Changes + +- @rocket.chat/core-typings@6.4.7 +- @rocket.chat/rest-typings@6.4.7 + +## 0.1.15 + +### Patch Changes + +- @rocket.chat/core-typings@6.4.6 +- @rocket.chat/rest-typings@6.4.6 + ## 0.1.14 ### Patch Changes diff --git a/ee/packages/api-client/package.json b/ee/packages/api-client/package.json index 9195cb18e4f9..3cefb84a8088 100644 --- a/ee/packages/api-client/package.json +++ b/ee/packages/api-client/package.json @@ -1,13 +1,13 @@ { "name": "@rocket.chat/api-client", - "version": "0.1.14", + "version": "0.1.18-rc.0", "devDependencies": { - "@swc/core": "^1.3.66", - "@swc/jest": "^0.2.26", - "@types/jest": "~29.5.3", - "@types/strict-uri-encode": "^2.0.0", + "@swc/core": "^1.3.95", + "@swc/jest": "^0.2.29", + "@types/jest": "~29.5.7", + "@types/strict-uri-encode": "^2.0.1", "eslint": "~8.45.0", - "jest": "~29.6.1", + "jest": "~29.6.4", "jest-fetch-mock": "^3.0.3", "ts-jest": "~29.0.5", "typescript": "~5.2.2" diff --git a/ee/packages/ddp-client/CHANGELOG.md b/ee/packages/ddp-client/CHANGELOG.md index e79ec6f116c7..b665410d6093 100644 --- a/ee/packages/ddp-client/CHANGELOG.md +++ b/ee/packages/ddp-client/CHANGELOG.md @@ -1,5 +1,89 @@ # @rocket.chat/ddp-client +## 0.2.6-rc.7 + +### Patch Changes + +- @rocket.chat/rest-typings@6.5.0-rc.7 +- @rocket.chat/api-client@0.1.15-rc.7 + +## 0.2.6-rc.6 + +### Patch Changes + +- @rocket.chat/rest-typings@6.5.0-rc.6 +- @rocket.chat/api-client@0.1.15-rc.6 + +## 0.2.6-rc.5 + +### Patch Changes + +- @rocket.chat/rest-typings@6.5.0-rc.5 +- @rocket.chat/api-client@0.1.15-rc.5 + +## 0.2.6-rc.4 + +### Patch Changes + +- @rocket.chat/rest-typings@6.5.0-rc.4 +- @rocket.chat/api-client@0.1.15-rc.4 + +## 0.2.6-rc.3 + +### Patch Changes + +- @rocket.chat/rest-typings@6.5.0-rc.3 +- @rocket.chat/api-client@0.1.15-rc.3 + +## 0.2.6-rc.2 + +### Patch Changes + +- @rocket.chat/rest-typings@6.5.0-rc.2 +- @rocket.chat/api-client@0.1.15-rc.2 + +## 0.2.6-rc.1 + +### Patch Changes + +- @rocket.chat/rest-typings@6.5.0-rc.1 +- @rocket.chat/api-client@0.1.15-rc.1 + +## 0.2.6-rc.0 + +### Patch Changes + +- 5b9d6883bf: feat: Improve UI when MAC limits are reached + feat: Limit endpoints on MAC limit reached +- Updated dependencies [5b9d6883bf] +- Updated dependencies [92613680b7] +- Updated dependencies [ec1b2b9846] +- Updated dependencies [a98f3ff303] +- Updated dependencies [5f81a0f3cb] + - @rocket.chat/rest-typings@6.5.0-rc.0 + - @rocket.chat/api-client@0.1.15-rc.0 + +## 0.2.8 + +### Patch Changes + +- @rocket.chat/rest-typings@6.4.8 +- @rocket.chat/api-client@0.1.17 + +## 0.2.7 + +### Patch Changes + +- @rocket.chat/rest-typings@6.4.7 +- @rocket.chat/api-client@0.1.16 + +## 0.2.6 + +### Patch Changes + +- @rocket.chat/rest-typings@6.4.6 +- @rocket.chat/api-client@0.1.15 + ## 0.2.5 ### Patch Changes diff --git a/ee/packages/ddp-client/package.json b/ee/packages/ddp-client/package.json index b2f3cb2b99d6..4804abb369a7 100644 --- a/ee/packages/ddp-client/package.json +++ b/ee/packages/ddp-client/package.json @@ -1,14 +1,14 @@ { "name": "@rocket.chat/ddp-client", - "version": "0.2.5", + "version": "0.2.9-rc.0", "devDependencies": { - "@swc/core": "^1.3.66", - "@swc/jest": "^0.2.26", - "@types/jest": "~29.5.3", - "@types/ws": "^8.5.5", + "@swc/core": "^1.3.95", + "@swc/jest": "^0.2.29", + "@types/jest": "~29.5.7", + "@types/ws": "^8.5.8", "eslint": "~8.45.0", - "jest": "~29.6.1", - "jest-environment-jsdom": "~29.6.1", + "jest": "~29.6.4", + "jest-environment-jsdom": "~29.6.4", "jest-websocket-mock": "^2.4.0", "typescript": "~5.2.2", "ws": "^8.13.0" diff --git a/ee/packages/license/CHANGELOG.md b/ee/packages/license/CHANGELOG.md new file mode 100644 index 000000000000..a4b1453e8faf --- /dev/null +++ b/ee/packages/license/CHANGELOG.md @@ -0,0 +1,64 @@ +# @rocket.chat/license + +## 0.1.0-rc.7 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.7 + +## 0.1.0-rc.6 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.6 + +## 0.1.0-rc.5 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.5 + +## 0.1.0-rc.4 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.4 + +## 0.1.0-rc.3 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.3 + +## 0.1.0-rc.2 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.2 + +## 0.1.0-rc.1 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.1 + +## 0.1.0-rc.0 + +### Minor Changes + +- 5f81a0f3cb: Implemented the License library, it is used to handle the functionality like expiration date, modules, limits, etc. + Also added a version v3 of the license, which contains an extended list of features. + v2 is still supported, since we convert it to v3 on the fly. + +### Patch Changes + +- a98f3ff303: feat: added `licenses.info` endpoint +- Updated dependencies [dea1fe9191] +- Updated dependencies [c0ef13a0bf] +- Updated dependencies [5b9d6883bf] +- Updated dependencies [92613680b7] +- Updated dependencies [ec1b2b9846] +- Updated dependencies [5f81a0f3cb] +- Updated dependencies [dea1fe9191] + - @rocket.chat/core-typings@6.5.0-rc.0 + - @rocket.chat/jwt@0.1.0-rc.0 diff --git a/ee/packages/license/__tests__/MockedLicenseBuilder.ts b/ee/packages/license/__tests__/MockedLicenseBuilder.ts index 4f2b49596be3..d68976b23df0 100644 --- a/ee/packages/license/__tests__/MockedLicenseBuilder.ts +++ b/ee/packages/license/__tests__/MockedLicenseBuilder.ts @@ -10,7 +10,7 @@ export class MockedLicenseBuilder { information: { id?: string; autoRenew: boolean; - visualExpiration: Timestamp; + visualExpiration?: Timestamp; notifyAdminsAt?: Timestamp; notifyUsersAt?: Timestamp; trial: boolean; diff --git a/ee/packages/license/__tests__/emitter.spec.ts b/ee/packages/license/__tests__/emitter.spec.ts index ce949365e8a6..bf5406ef8501 100644 --- a/ee/packages/license/__tests__/emitter.spec.ts +++ b/ee/packages/license/__tests__/emitter.spec.ts @@ -242,7 +242,7 @@ describe('Event License behaviors', () => { await expect(licenseManager.shouldPreventAction('activeUsers')).resolves.toBe(false); await expect(fn).toBeCalledTimes(2); - await expect(toggleFn).toBeCalledTimes(1); + await expect(toggleFn).toBeCalledTimes(0); await expect(fn).toBeCalledWith({ reason: 'limit', @@ -277,7 +277,7 @@ describe('Event License behaviors', () => { expect(preventFn).toBeCalledTimes(0); expect(preventToggleFn).toBeCalledTimes(0); expect(allowFn).toBeCalledTimes(1); - expect(allowToggleFn).toBeCalledTimes(1); + expect(allowToggleFn).toBeCalledTimes(0); preventFn.mockClear(); preventToggleFn.mockClear(); diff --git a/ee/packages/license/package.json b/ee/packages/license/package.json index ec79532a9680..814649c87e0f 100644 --- a/ee/packages/license/package.json +++ b/ee/packages/license/package.json @@ -1,16 +1,16 @@ { "name": "@rocket.chat/license", - "version": "0.0.1", + "version": "0.1.0-rc.7", "private": true, "devDependencies": { - "@swc/core": "^1.3.66", - "@swc/jest": "^0.2.26", - "@types/bcrypt": "^5.0.0", - "@types/jest": "~29.5.3", - "@types/ws": "^8.5.5", + "@swc/core": "^1.3.95", + "@swc/jest": "^0.2.29", + "@types/bcrypt": "^5.0.1", + "@types/jest": "~29.5.7", + "@types/ws": "^8.5.8", "eslint": "~8.45.0", - "jest": "~29.6.1", - "jest-environment-jsdom": "~29.6.1", + "jest": "~29.6.4", + "jest-environment-jsdom": "~29.6.4", "jest-websocket-mock": "^2.4.0", "ts-jest": "~29.0.5", "typescript": "^5.2.2" diff --git a/ee/packages/license/src/definition/ILicenseV3.ts b/ee/packages/license/src/definition/ILicenseV3.ts index d3a2d7f572a3..eabc276cd09d 100644 --- a/ee/packages/license/src/definition/ILicenseV3.ts +++ b/ee/packages/license/src/definition/ILicenseV3.ts @@ -8,7 +8,7 @@ export interface ILicenseV3 { information: { id?: string; autoRenew: boolean; - visualExpiration: Timestamp; + visualExpiration?: Timestamp; notifyAdminsAt?: Timestamp; notifyUsersAt?: Timestamp; trial: boolean; diff --git a/ee/packages/license/src/definition/events.ts b/ee/packages/license/src/definition/events.ts index b9d211da9b7a..f19dc13cc82e 100644 --- a/ee/packages/license/src/definition/events.ts +++ b/ee/packages/license/src/definition/events.ts @@ -15,6 +15,7 @@ export type LicenseEvents = ModuleValidation & BehaviorTriggeredToggled & BehaviorTriggered & LimitReached & { + installed: undefined; validate: undefined; invalidate: undefined; module: { module: LicenseModule; valid: boolean }; diff --git a/ee/packages/license/src/events/emitter.ts b/ee/packages/license/src/events/emitter.ts index 51f3282a9742..dde10d68563f 100644 --- a/ee/packages/license/src/events/emitter.ts +++ b/ee/packages/license/src/events/emitter.ts @@ -6,18 +6,26 @@ import { logger } from '../logger'; export function moduleValidated(this: LicenseManager, module: LicenseModule) { try { this.emit('module', { module, valid: true }); + } catch (error) { + logger.error({ msg: `Error running module (valid: true) event: ${module}`, error }); + } + try { this.emit(`valid:${module}`); } catch (error) { - logger.error({ msg: 'Error running module added event', error }); + logger.error({ msg: `Error running module added event: ${module}`, error }); } } export function moduleRemoved(this: LicenseManager, module: LicenseModule) { try { this.emit('module', { module, valid: false }); + } catch (error) { + logger.error({ msg: `Error running module (valid: false) event: ${module}`, error }); + } + try { this.emit(`invalid:${module}`); } catch (error) { - logger.error({ msg: 'Error running module removed event', error }); + logger.error({ msg: `Error running module removed event: ${module}`, error }); } } diff --git a/ee/packages/license/src/index.ts b/ee/packages/license/src/index.ts index e590ce7722b2..6e680e5296de 100644 --- a/ee/packages/license/src/index.ts +++ b/ee/packages/license/src/index.ts @@ -22,6 +22,7 @@ import { getTags } from './tags'; import { getCurrentValueForLicenseLimit, setLicenseLimitCounter } from './validation/getCurrentValueForLicenseLimit'; import { validateFormat } from './validation/validateFormat'; +export { DuplicatedLicenseError } from './errors/DuplicatedLicenseError'; export * from './definition/ILicenseTag'; export * from './definition/ILicenseV2'; export * from './definition/ILicenseV3'; diff --git a/ee/packages/license/src/license.spec.ts b/ee/packages/license/src/license.spec.ts index b6ad946860fc..a1a226bdff5b 100644 --- a/ee/packages/license/src/license.spec.ts +++ b/ee/packages/license/src/license.spec.ts @@ -148,7 +148,48 @@ describe('Validate License Limits', () => { await expect(licenseManager.shouldPreventAction('activeUsers')).resolves.toBe(true); await expect(licenseManager.shouldPreventAction('activeUsers')).resolves.toBe(true); expect(preventActionCallback).toHaveBeenCalledTimes(4); - expect(fairUsageCallback).toHaveBeenCalledTimes(4); + expect(fairUsageCallback).toHaveBeenCalledTimes(1); + }); + it('should trigger the toggle event if the counter is under the limit', async () => { + const licenseManager = await getReadyLicenseManager(); + + const fairUsageCallback = jest.fn(); + const preventActionCallback = jest.fn(); + + licenseManager.onBehaviorToggled('start_fair_policy', fairUsageCallback); + licenseManager.onBehaviorTriggered('prevent_action', preventActionCallback); + + const license = await new MockedLicenseBuilder().withLimits('activeUsers', [ + { + max: 12, + behavior: 'prevent_action', + }, + { + max: 10, + behavior: 'start_fair_policy', + }, + ]); + + await expect(licenseManager.setLicense(await license.sign())).resolves.toBe(true); + + licenseManager.setLicenseLimitCounter('activeUsers', () => 12); + await expect(licenseManager.shouldPreventAction('activeUsers')).resolves.toBe(true); + expect(fairUsageCallback).toHaveBeenCalledTimes(1); + expect(preventActionCallback).toHaveBeenCalledTimes(1); + + preventActionCallback.mockClear(); + fairUsageCallback.mockClear(); + licenseManager.setLicenseLimitCounter('activeUsers', () => 12); + await expect(licenseManager.shouldPreventAction('activeUsers')).resolves.toBe(true); + expect(fairUsageCallback).toHaveBeenCalledTimes(0); + expect(preventActionCallback).toHaveBeenCalledTimes(1); + + preventActionCallback.mockClear(); + fairUsageCallback.mockClear(); + licenseManager.setLicenseLimitCounter('activeUsers', () => 5); + await expect(licenseManager.shouldPreventAction('activeUsers')).resolves.toBe(false); + expect(fairUsageCallback).toHaveBeenCalledTimes(1); + expect(preventActionCallback).toHaveBeenCalledTimes(0); }); }); @@ -274,3 +315,104 @@ describe('License.getInfo', () => { }); }); }); + +describe('License.setLicense', () => { + it('should trigger the validate event even if the module callback throws an error', async () => { + const licenseManager = await getReadyLicenseManager(); + + const validateCallback = jest.fn(); + const moduleCallback = jest.fn(() => { + throw new Error('Error'); + }); + + const syncCallback = jest.fn(); + + licenseManager.on('validate', validateCallback); + licenseManager.on('sync', syncCallback); + licenseManager.on('module', moduleCallback); + + const license = await new MockedLicenseBuilder().withGratedModules(['auditing']); + + await expect(licenseManager.setLicense(await license.sign())).resolves.toBe(true); + + expect(validateCallback).toHaveBeenCalledTimes(1); + expect(moduleCallback).toHaveBeenCalledTimes(1); + expect(syncCallback).toHaveBeenCalledTimes(0); + }); + + it('should trigger the sync event only from the sync method', async () => { + const licenseManager = await getReadyLicenseManager(); + + const validateCallback = jest.fn(); + const moduleCallback = jest.fn(); + const syncCallback = jest.fn(); + + licenseManager.on('validate', validateCallback); + licenseManager.on('sync', syncCallback); + licenseManager.on('module', moduleCallback); + + const license = await new MockedLicenseBuilder().withGratedModules(['auditing']).withLimits('activeUsers', [ + { + max: 10, + behavior: 'disable_modules', + modules: ['auditing'], + }, + ]); + + await expect(licenseManager.setLicense(await license.sign(), true)).resolves.toBe(true); + + expect(validateCallback).toHaveBeenCalledTimes(1); + expect(moduleCallback).toHaveBeenCalledTimes(1); + expect(syncCallback).toHaveBeenCalledTimes(0); + + validateCallback.mockClear(); + moduleCallback.mockClear(); + syncCallback.mockClear(); + + licenseManager.setLicenseLimitCounter('activeUsers', () => 11); + await licenseManager.revalidateLicense(); + + expect(validateCallback).toHaveBeenCalledTimes(1); + expect(moduleCallback).toHaveBeenCalledTimes(1); + expect(syncCallback).toHaveBeenCalledTimes(1); + }); + + it('should trigger the sync event even if the module callback throws an error', async () => { + const licenseManager = await getReadyLicenseManager(); + + const validateCallback = jest.fn(); + const moduleCallback = jest.fn(() => { + throw new Error('Error'); + }); + const syncCallback = jest.fn(); + + licenseManager.on('validate', validateCallback); + licenseManager.on('sync', syncCallback); + licenseManager.on('module', moduleCallback); + + const license = await new MockedLicenseBuilder().withGratedModules(['auditing']).withLimits('activeUsers', [ + { + max: 10, + behavior: 'disable_modules', + modules: ['auditing'], + }, + ]); + + await expect(licenseManager.setLicense(await license.sign(), true)).resolves.toBe(true); + + expect(validateCallback).toHaveBeenCalledTimes(1); + expect(moduleCallback).toHaveBeenCalledTimes(1); + expect(syncCallback).toHaveBeenCalledTimes(0); + + validateCallback.mockClear(); + moduleCallback.mockClear(); + syncCallback.mockClear(); + + licenseManager.setLicenseLimitCounter('activeUsers', () => 11); + await licenseManager.revalidateLicense(); + + expect(validateCallback).toHaveBeenCalledTimes(1); + expect(moduleCallback).toHaveBeenCalledTimes(1); + expect(syncCallback).toHaveBeenCalledTimes(1); + }); +}); diff --git a/ee/packages/license/src/license.ts b/ee/packages/license/src/license.ts index aaabf255812c..c8a5c0a514d5 100644 --- a/ee/packages/license/src/license.ts +++ b/ee/packages/license/src/license.ts @@ -3,7 +3,7 @@ import { Emitter } from '@rocket.chat/emitter'; import { type ILicenseTag } from './definition/ILicenseTag'; import type { ILicenseV2 } from './definition/ILicenseV2'; import type { ILicenseV3, LicenseLimitKind } from './definition/ILicenseV3'; -import type { BehaviorWithContext } from './definition/LicenseBehavior'; +import type { BehaviorWithContext, LicenseBehavior } from './definition/LicenseBehavior'; import type { LicenseInfo } from './definition/LicenseInfo'; import type { LicenseModule } from './definition/LicenseModule'; import type { LicenseValidationOptions } from './definition/LicenseValidationOptions'; @@ -52,12 +52,19 @@ export class LicenseManager extends Emitter { private _lockedLicense: string | undefined; - public shouldPreventActionResults = new Map(); + private states = new Map>(); + + public get shouldPreventActionResults() { + const state = this.states.get('prevent_action') ?? new Map(); + + this.states.set('prevent_action', state); + + return state; + } constructor() { super(); - - this.on('validate', () => showLicense.call(this, this._license, this._valid)); + this.on('installed', () => showLicense.call(this, this._license, this._valid)); } public get license(): ILicenseV3 | undefined { @@ -268,6 +275,8 @@ export class LicenseManager extends Emitter { } await this.setLicenseV3(decrypted, encryptedLicense, decrypted, isNewLicense); + this.emit('installed'); + return true; } catch (e) { logger.error('Invalid license'); @@ -349,7 +358,9 @@ export class LicenseManager extends Emitter { action: T, extraCount = 0, context: Partial> = {}, - { suppressLog }: Pick = {}, + { suppressLog }: Pick = { + suppressLog: process.env.LICENSE_VALIDATION_SUPPRESS_LOG !== 'false', + }, ): Promise { const options: LicenseValidationOptions = { ...(extraCount && { behaviors: ['prevent_action'] }), @@ -378,7 +389,22 @@ export class LicenseManager extends Emitter { return shouldPreventAction; } - if (isBehaviorsInResult(validationResult, ['invalidate_license', 'disable_modules', 'start_fair_policy'])) { + // check if any of the behaviors that should trigger a sync changed + if ( + (['invalidate_license', 'disable_modules', 'start_fair_policy'] as const).some((behavior) => { + const hasChanged = this.consolidateBehaviorState(action, behavior, isBehaviorsInResult(validationResult, [behavior])); + if (hasChanged && behavior === 'start_fair_policy') { + this.triggerBehaviorEventsToggled([ + { + behavior: 'start_fair_policy', + reason: 'limit', + limit: action, + }, + ]); + } + return hasChanged; + }) + ) { await this.revalidateLicense(); } @@ -393,9 +419,7 @@ export class LicenseManager extends Emitter { } as BehaviorWithContext, ]; - if (this.shouldPreventActionResults.get(action) !== shouldPreventAction) { - this.shouldPreventActionResults.set(action, shouldPreventAction); - + if (this.consolidateBehaviorState(action, 'prevent_action', shouldPreventAction)) { this.triggerBehaviorEventsToggled(eventsToEmit); } @@ -404,6 +428,23 @@ export class LicenseManager extends Emitter { return shouldPreventAction; } + private consolidateBehaviorState(action: T, behavior: LicenseBehavior, triggered: boolean): boolean { + // check if the behavior changed + const state = this.states.get(behavior) ?? new Map(); + + const currentState = state.get(action) ?? false; + + if (currentState === triggered) { + return false; + } + + // if it changed, update the state + state.set(action, triggered); + + this.states.set(behavior, state); + return true; + } + public async getInfo({ limits: includeLimits, currentValues: loadCurrentValues, diff --git a/ee/packages/license/src/v2/convertToV3.ts b/ee/packages/license/src/v2/convertToV3.ts index f4232c0bac4f..94e94a868e54 100644 --- a/ee/packages/license/src/v2/convertToV3.ts +++ b/ee/packages/license/src/v2/convertToV3.ts @@ -14,7 +14,7 @@ export const convertToV3 = (v2: ILicenseV2): ILicenseV3 => { version: '3.0', information: { autoRenew: false, - visualExpiration: new Date(Date.parse(v2.meta?.trialEnd || v2.expiry)).toISOString(), + ...((v2.meta?.trialEnd || v2.expiry) && { visualExpiration: new Date(Date.parse(v2.meta?.trialEnd || v2.expiry)).toISOString() }), trial: v2.meta?.trial || false, offline: false, createdAt: new Date().toISOString(), diff --git a/ee/packages/omnichannel-services/CHANGELOG.md b/ee/packages/omnichannel-services/CHANGELOG.md index a116c30f6ebf..aea3cb273457 100644 --- a/ee/packages/omnichannel-services/CHANGELOG.md +++ b/ee/packages/omnichannel-services/CHANGELOG.md @@ -1,5 +1,143 @@ # @rocket.chat/omnichannel-services +## 0.1.0-rc.7 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.7 +- @rocket.chat/rest-typings@6.5.0-rc.7 +- @rocket.chat/pdf-worker@0.0.21-rc.7 +- @rocket.chat/core-services@0.3.0-rc.7 +- @rocket.chat/model-typings@0.2.0-rc.7 +- @rocket.chat/models@0.0.21-rc.7 + +## 0.1.0-rc.6 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.6 +- @rocket.chat/rest-typings@6.5.0-rc.6 +- @rocket.chat/pdf-worker@0.0.21-rc.6 +- @rocket.chat/core-services@0.3.0-rc.6 +- @rocket.chat/model-typings@0.2.0-rc.6 +- @rocket.chat/models@0.0.21-rc.6 + +## 0.1.0-rc.5 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.5 +- @rocket.chat/rest-typings@6.5.0-rc.5 +- @rocket.chat/pdf-worker@0.0.21-rc.5 +- @rocket.chat/core-services@0.3.0-rc.5 +- @rocket.chat/model-typings@0.2.0-rc.5 +- @rocket.chat/models@0.0.21-rc.5 + +## 0.1.0-rc.4 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.4 +- @rocket.chat/rest-typings@6.5.0-rc.4 +- @rocket.chat/pdf-worker@0.0.21-rc.4 +- @rocket.chat/core-services@0.3.0-rc.4 +- @rocket.chat/model-typings@0.2.0-rc.4 +- @rocket.chat/models@0.0.21-rc.4 + +## 0.1.0-rc.3 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.3 +- @rocket.chat/rest-typings@6.5.0-rc.3 +- @rocket.chat/pdf-worker@0.0.21-rc.3 +- @rocket.chat/core-services@0.3.0-rc.3 +- @rocket.chat/model-typings@0.2.0-rc.3 +- @rocket.chat/models@0.0.21-rc.3 + +## 0.1.0-rc.2 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.2 +- @rocket.chat/rest-typings@6.5.0-rc.2 +- @rocket.chat/pdf-worker@0.0.21-rc.2 +- @rocket.chat/core-services@0.3.0-rc.2 +- @rocket.chat/model-typings@0.2.0-rc.2 +- @rocket.chat/models@0.0.21-rc.2 + +## 0.1.0-rc.1 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.1 +- @rocket.chat/rest-typings@6.5.0-rc.1 +- @rocket.chat/pdf-worker@0.0.21-rc.1 +- @rocket.chat/core-services@0.3.0-rc.1 +- @rocket.chat/model-typings@0.2.0-rc.1 +- @rocket.chat/models@0.0.21-rc.1 + +## 0.1.0-rc.0 + +### Minor Changes + +- 5f81a0f3cb: Implemented the License library, it is used to handle the functionality like expiration date, modules, limits, etc. + Also added a version v3 of the license, which contains an extended list of features. + v2 is still supported, since we convert it to v3 on the fly. + +### Patch Changes + +- dea1fe9191: feat: Disable and annonimize visitors instead of removing +- Updated dependencies [dea1fe9191] +- Updated dependencies [c0ef13a0bf] +- Updated dependencies [223dce18a3] +- Updated dependencies [5b9d6883bf] +- Updated dependencies [92613680b7] +- Updated dependencies [ec1b2b9846] +- Updated dependencies [a98f3ff303] +- Updated dependencies [5f81a0f3cb] +- Updated dependencies [dea1fe9191] + - @rocket.chat/core-typings@6.5.0-rc.0 + - @rocket.chat/model-typings@0.2.0-rc.0 + - @rocket.chat/core-services@0.3.0-rc.0 + - @rocket.chat/rest-typings@6.5.0-rc.0 + - @rocket.chat/tools@0.2.0-rc.0 + - @rocket.chat/pdf-worker@0.0.21-rc.0 + - @rocket.chat/models@0.0.21-rc.0 + +## 0.0.23 + +### Patch Changes + +- @rocket.chat/core-typings@6.4.8 +- @rocket.chat/rest-typings@6.4.8 +- @rocket.chat/pdf-worker@0.0.23 +- @rocket.chat/core-services@0.2.8 +- @rocket.chat/model-typings@0.1.8 +- @rocket.chat/models@0.0.23 + +## 0.0.22 + +### Patch Changes + +- @rocket.chat/core-typings@6.4.7 +- @rocket.chat/rest-typings@6.4.7 +- @rocket.chat/pdf-worker@0.0.22 +- @rocket.chat/core-services@0.2.7 +- @rocket.chat/model-typings@0.1.7 +- @rocket.chat/models@0.0.22 + +## 0.0.21 + +### Patch Changes + +- @rocket.chat/core-typings@6.4.6 +- @rocket.chat/rest-typings@6.4.6 +- @rocket.chat/pdf-worker@0.0.21 +- @rocket.chat/core-services@0.2.6 +- @rocket.chat/model-typings@0.1.6 +- @rocket.chat/models@0.0.21 + ## 0.0.20 ### Patch Changes diff --git a/ee/packages/omnichannel-services/package.json b/ee/packages/omnichannel-services/package.json index 448d35d17fc0..73fa510e6d12 100644 --- a/ee/packages/omnichannel-services/package.json +++ b/ee/packages/omnichannel-services/package.json @@ -1,12 +1,12 @@ { "name": "@rocket.chat/omnichannel-services", - "version": "0.0.20", + "version": "0.1.0-rc.7", "private": true, "devDependencies": { "@rocket.chat/eslint-config": "workspace:^", - "@types/jest": "~29.5.3", + "@types/jest": "~29.5.7", "eslint": "~8.45.0", - "jest": "~29.6.1", + "jest": "~29.6.4", "ts-jest": "~29.0.5", "typescript": "~5.2.2" }, @@ -21,7 +21,7 @@ "@rocket.chat/rest-typings": "workspace:^", "@rocket.chat/string-helpers": "next", "@rocket.chat/tools": "workspace:^", - "@types/node": "^14.18.51", + "@types/node": "^14.18.63", "ejson": "^2.2.3", "emoji-toolkit": "^7.0.1", "eventemitter3": "^4.0.7", diff --git a/ee/packages/omnichannel-services/src/OmnichannelTranscript.ts b/ee/packages/omnichannel-services/src/OmnichannelTranscript.ts index 0e135d5ed263..7f27e70ac8a5 100644 --- a/ee/packages/omnichannel-services/src/OmnichannelTranscript.ts +++ b/ee/packages/omnichannel-services/src/OmnichannelTranscript.ts @@ -8,7 +8,6 @@ import { QueueWorker as queueService, Translation as translationService, Settings as settingsService, - License as licenseService, } from '@rocket.chat/core-services'; import type { IOmnichannelTranscriptService } from '@rocket.chat/core-services'; import type { IMessage, IUser, IRoom, IUpload, ILivechatVisitor, ILivechatAgent } from '@rocket.chat/core-typings'; @@ -61,27 +60,11 @@ export class OmnichannelTranscript extends ServiceClass implements IOmnichannelT currentJobNumber = 0; - shouldWork = false; - constructor(loggerClass: typeof Logger) { super(); this.worker = new PdfWorker('chat-transcript'); // eslint-disable-next-line new-cap this.log = new loggerClass('OmnichannelTranscript'); - - this.onEvent('license.module', ({ module, valid }) => { - if (module === 'scalability') { - this.shouldWork = valid; - } - }); - } - - async started(): Promise { - try { - this.shouldWork = await licenseService.hasModule('scalability'); - } catch (e: unknown) { - // ignore - } } async getTimezone(user?: { utcOffset?: string | number }): Promise { @@ -109,10 +92,6 @@ export class OmnichannelTranscript extends ServiceClass implements IOmnichannelT } async requestTranscript({ details }: { details: WorkDetails }): Promise { - if (!this.shouldWork) { - this.log.info(`Not requesting transcript for room ${details.rid} because scalability module is not enabled`); - return; - } this.log.info(`Requesting transcript for room ${details.rid} by user ${details.userId}`); const room = await LivechatRooms.findOneById(details.rid); if (!room) { @@ -286,10 +265,6 @@ export class OmnichannelTranscript extends ServiceClass implements IOmnichannelT } async workOnPdf({ details }: { details: WorkDetailsWithSource }): Promise { - if (!this.shouldWork) { - this.log.info(`Processing transcript for room ${details.rid} by user ${details.userId} - Stopped (no scalability license found)`); - return; - } this.log.info(`Processing transcript for room ${details.rid} by user ${details.userId} - Received from queue`); if (this.maxNumberOfConcurrentJobs <= this.currentJobNumber) { this.log.error(`Processing transcript for room ${details.rid} by user ${details.userId} - Too many concurrent jobs, queuing again`); diff --git a/ee/packages/omnichannel-services/src/QueueWorker.ts b/ee/packages/omnichannel-services/src/QueueWorker.ts index bfb69362fac6..b217586d3a83 100644 --- a/ee/packages/omnichannel-services/src/QueueWorker.ts +++ b/ee/packages/omnichannel-services/src/QueueWorker.ts @@ -1,4 +1,4 @@ -import { ServiceClass, api, License } from '@rocket.chat/core-services'; +import { ServiceClass, api } from '@rocket.chat/core-services'; import type { IQueueWorkerService, HealthAggResult } from '@rocket.chat/core-services'; import type { Logger } from '@rocket.chat/logger'; import type { Actions, ValidResult, Work } from 'mongo-message-queue'; @@ -17,28 +17,12 @@ export class QueueWorker extends ServiceClass implements IQueueWorkerService { private logger: Logger; - private shouldWork = true; - constructor(private readonly db: Db, loggerClass: typeof Logger) { super(); // eslint-disable-next-line new-cap this.logger = new loggerClass('QueueWorker'); this.queue = new MessageQueue(); - - this.onEvent('license.module', ({ module, valid }) => { - if (module === 'scalability') { - this.shouldWork = valid; - } - }); - } - - async started(): Promise { - try { - this.shouldWork = await License.hasModule('scalability'); - } catch (e: unknown) { - // ignore - } } isServiceNotFoundMessage(message: string): boolean { @@ -132,11 +116,6 @@ export class QueueWorker extends ServiceClass implements IQueueWorkerService { // `to` is a service name that will be called, including namespace + action // This is a "generic" job that allows you to call any service async queueWork>(queue: Actions, to: string, data: T): Promise { - if (!this.shouldWork) { - this.logger.info('Queue worker is disabled, not queueing work'); - return; - } - this.logger.info(`Queueing work for ${to}`); if (!this.matchServiceCall(to)) { // We don't want to queue calls to invalid service names diff --git a/ee/packages/pdf-worker/CHANGELOG.md b/ee/packages/pdf-worker/CHANGELOG.md index 883242f74dd7..c27e364ea564 100644 --- a/ee/packages/pdf-worker/CHANGELOG.md +++ b/ee/packages/pdf-worker/CHANGELOG.md @@ -1,5 +1,78 @@ # @rocket.chat/pdf-worker +## 0.0.21-rc.7 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.7 + +## 0.0.21-rc.6 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.6 + +## 0.0.21-rc.5 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.5 + +## 0.0.21-rc.4 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.4 + +## 0.0.21-rc.3 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.3 + +## 0.0.21-rc.2 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.2 + +## 0.0.21-rc.1 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.1 + +## 0.0.21-rc.0 + +### Patch Changes + +- Updated dependencies [dea1fe9191] +- Updated dependencies [c0ef13a0bf] +- Updated dependencies [5b9d6883bf] +- Updated dependencies [92613680b7] +- Updated dependencies [ec1b2b9846] +- Updated dependencies [5f81a0f3cb] +- Updated dependencies [dea1fe9191] + - @rocket.chat/core-typings@6.5.0-rc.0 + +## 0.0.23 + +### Patch Changes + +- @rocket.chat/core-typings@6.4.8 + +## 0.0.22 + +### Patch Changes + +- @rocket.chat/core-typings@6.4.7 + +## 0.0.21 + +### Patch Changes + +- @rocket.chat/core-typings@6.4.6 + ## 0.0.20 ### Patch Changes diff --git a/ee/packages/pdf-worker/package.json b/ee/packages/pdf-worker/package.json index 3cf36caa094f..9b0e3579f80e 100644 --- a/ee/packages/pdf-worker/package.json +++ b/ee/packages/pdf-worker/package.json @@ -1,19 +1,19 @@ { "name": "@rocket.chat/pdf-worker", - "version": "0.0.20", + "version": "0.0.24-rc.0", "private": true, "devDependencies": { "@storybook/addon-essentials": "~6.5.16", "@storybook/react": "~6.5.16", "@testing-library/jest-dom": "^5.16.5", "@testing-library/react": "~13.4.0", - "@types/emojione": "^2.2.6", - "@types/jest": "~29.5.3", - "@types/react-dom": "~17.0.20", - "@types/testing-library__jest-dom": "~5.14.6", + "@types/emojione": "^2.2.8", + "@types/jest": "~29.5.7", + "@types/react-dom": "~17.0.22", + "@types/testing-library__jest-dom": "~5.14.9", "eslint": "~8.45.0", - "jest": "~29.6.1", - "jest-environment-jsdom": "~29.6.1", + "jest": "~29.6.4", + "jest-environment-jsdom": "~29.6.4", "react-dom": "^18.2.0", "ts-jest": "~29.0.5", "typescript": "~5.2.2" @@ -32,10 +32,10 @@ "/dist" ], "dependencies": { - "@react-pdf/renderer": "^3.1.12", + "@react-pdf/renderer": "^3.1.14", "@rocket.chat/core-typings": "workspace:^", "@rocket.chat/fuselage-tokens": "^0.32.0", - "@types/react": "~17.0.62", + "@types/react": "~17.0.69", "emoji-assets": "^7.0.1", "emoji-toolkit": "^7.0.1", "moment": "^2.29.4", diff --git a/ee/packages/presence/CHANGELOG.md b/ee/packages/presence/CHANGELOG.md index 0e65388e31b0..ba4eb4b27108 100644 --- a/ee/packages/presence/CHANGELOG.md +++ b/ee/packages/presence/CHANGELOG.md @@ -1,5 +1,107 @@ # @rocket.chat/presence +## 0.1.0-rc.7 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.7 +- @rocket.chat/core-services@0.3.0-rc.7 +- @rocket.chat/models@0.0.21-rc.7 + +## 0.1.0-rc.6 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.6 +- @rocket.chat/core-services@0.3.0-rc.6 +- @rocket.chat/models@0.0.21-rc.6 + +## 0.1.0-rc.5 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.5 +- @rocket.chat/core-services@0.3.0-rc.5 +- @rocket.chat/models@0.0.21-rc.5 + +## 0.1.0-rc.4 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.4 +- @rocket.chat/core-services@0.3.0-rc.4 +- @rocket.chat/models@0.0.21-rc.4 + +## 0.1.0-rc.3 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.3 +- @rocket.chat/core-services@0.3.0-rc.3 +- @rocket.chat/models@0.0.21-rc.3 + +## 0.1.0-rc.2 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.2 +- @rocket.chat/core-services@0.3.0-rc.2 +- @rocket.chat/models@0.0.21-rc.2 + +## 0.1.0-rc.1 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.1 +- @rocket.chat/core-services@0.3.0-rc.1 +- @rocket.chat/models@0.0.21-rc.1 + +## 0.1.0-rc.0 + +### Minor Changes + +- c38711b346: Add peak connections monitoring and methods to get and reset the counter +- 5f81a0f3cb: Implemented the License library, it is used to handle the functionality like expiration date, modules, limits, etc. + Also added a version v3 of the license, which contains an extended list of features. + v2 is still supported, since we convert it to v3 on the fly. + +### Patch Changes + +- Updated dependencies [dea1fe9191] +- Updated dependencies [c0ef13a0bf] +- Updated dependencies [5b9d6883bf] +- Updated dependencies [92613680b7] +- Updated dependencies [ec1b2b9846] +- Updated dependencies [5f81a0f3cb] +- Updated dependencies [dea1fe9191] + - @rocket.chat/core-typings@6.5.0-rc.0 + - @rocket.chat/core-services@0.3.0-rc.0 + - @rocket.chat/models@0.0.21-rc.0 + +## 0.0.23 + +### Patch Changes + +- @rocket.chat/core-typings@6.4.8 +- @rocket.chat/core-services@0.2.8 +- @rocket.chat/models@0.0.23 + +## 0.0.22 + +### Patch Changes + +- @rocket.chat/core-typings@6.4.7 +- @rocket.chat/core-services@0.2.7 +- @rocket.chat/models@0.0.22 + +## 0.0.21 + +### Patch Changes + +- @rocket.chat/core-typings@6.4.6 +- @rocket.chat/core-services@0.2.6 +- @rocket.chat/models@0.0.21 + ## 0.0.20 ### Patch Changes diff --git a/ee/packages/presence/package.json b/ee/packages/presence/package.json index df63f2c7c2e5..7bcfc6e1db03 100644 --- a/ee/packages/presence/package.json +++ b/ee/packages/presence/package.json @@ -1,18 +1,18 @@ { "name": "@rocket.chat/presence", - "version": "0.0.20", + "version": "0.1.0-rc.7", "private": true, "devDependencies": { - "@babel/core": "~7.22.9", - "@babel/preset-env": "~7.22.9", - "@babel/preset-typescript": "~7.22.5", + "@babel/core": "~7.22.20", + "@babel/preset-env": "~7.22.20", + "@babel/preset-typescript": "~7.22.15", "@rocket.chat/apps-engine": "1.41.0-alpha.290", "@rocket.chat/eslint-config": "workspace:^", "@rocket.chat/rest-typings": "workspace:^", - "@types/node": "^14.18.51", + "@types/node": "^14.18.63", "babel-jest": "^29.0.3", "eslint": "~8.45.0", - "jest": "~29.6.1", + "jest": "~29.6.4", "typescript": "~5.2.2" }, "scripts": { diff --git a/ee/packages/ui-theming/CHANGELOG.md b/ee/packages/ui-theming/CHANGELOG.md index 134f170ce82a..45a65c34bf22 100644 --- a/ee/packages/ui-theming/CHANGELOG.md +++ b/ee/packages/ui-theming/CHANGELOG.md @@ -1,5 +1,11 @@ # @rocket.chat/ui-theming +## 0.1.1-rc.0 + +### Patch Changes + +- 8e89b5a3b0: fix: light-theme font-disabled color + ## 0.1.0 ### Minor Changes diff --git a/ee/packages/ui-theming/package.json b/ee/packages/ui-theming/package.json index c29617a2eddf..3870408f7a50 100644 --- a/ee/packages/ui-theming/package.json +++ b/ee/packages/ui-theming/package.json @@ -1,6 +1,6 @@ { "name": "@rocket.chat/ui-theming", - "version": "0.1.0", + "version": "0.1.1-rc.0", "private": true, "devDependencies": { "@rocket.chat/css-in-js": "next", @@ -18,14 +18,14 @@ "@storybook/manager-webpack4": "~6.5.16", "@storybook/react": "~6.5.16", "@storybook/testing-library": "~0.0.13", - "@types/jest": "~29.5.3", - "@types/react": "~17.0.62", + "@types/jest": "~29.5.7", + "@types/react": "~17.0.69", "eslint": "~8.45.0", "eslint-plugin-anti-trojan-source": "~1.1.1", "eslint-plugin-react": "~7.32.2", "eslint-plugin-react-hooks": "~4.6.0", - "eslint-plugin-testing-library": "^5.11.0", - "jest": "~29.6.1", + "eslint-plugin-testing-library": "^5.11.1", + "jest": "~29.6.4", "react": "~17.0.2", "react-docgen-typescript-plugin": "~1.0.5", "ts-jest": "~29.0.5", diff --git a/ee/packages/ui-theming/src/PaletteStyleTag.tsx b/ee/packages/ui-theming/src/PaletteStyleTag.tsx index ce911ce4a122..62e31ef3d947 100644 --- a/ee/packages/ui-theming/src/PaletteStyleTag.tsx +++ b/ee/packages/ui-theming/src/PaletteStyleTag.tsx @@ -1,4 +1,4 @@ -import { memo } from 'react'; +import React, { memo } from 'react'; import { createPortal } from 'react-dom'; import { codeBlock } from './codeBlockStyles'; @@ -23,5 +23,5 @@ export const PaletteStyleTag = memo(function PaletteStyleTag() { }; const palette = convertToCss(getPalette(), '.rcx-content--main, .rcx-tile'); - return createPortal(theme === 'dark' ? palette + codeBlock : palette, useCreateStyleContainer('main-palette')); + return <>{createPortal(theme === 'dark' ? palette + codeBlock : palette, useCreateStyleContainer('main-palette'))}; }); diff --git a/ee/packages/ui-theming/src/SidebarPaletteStyleTag.tsx b/ee/packages/ui-theming/src/SidebarPaletteStyleTag.tsx index fd8cdba5022d..593f8ab2cdf7 100644 --- a/ee/packages/ui-theming/src/SidebarPaletteStyleTag.tsx +++ b/ee/packages/ui-theming/src/SidebarPaletteStyleTag.tsx @@ -1,5 +1,5 @@ import type { ReactElement } from 'react'; -import { memo } from 'react'; +import React, { memo } from 'react'; import { createPortal } from 'react-dom'; import { convertToCss } from './helpers/convertToCss'; @@ -18,5 +18,5 @@ export const SidebarPaletteStyleTag = memo(function SidebarPaletteStyleTag(): Re const palette = convertToCss({ ...darkPalette, ...defaultSidebarPalette }, '.rcx-sidebar--main'); - return createPortal(palette, useCreateStyleContainer('sidebar-palette')); + return <>{createPortal(palette, useCreateStyleContainer('sidebar-palette'))}; }); diff --git a/package.json b/package.json index 26c680cf7186..0391a0303edc 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "rocket.chat", - "version": "6.5.0-develop", + "version": "6.6.0-develop", "description": "Rocket.Chat Monorepo", "main": "index.js", "private": true, @@ -17,9 +17,9 @@ "fuselage": "./fuselage.sh" }, "devDependencies": { - "@changesets/cli": "^2.26.1", - "@types/chart.js": "^2.9.37", - "@types/js-yaml": "^4.0.5", + "@changesets/cli": "^2.26.2", + "@types/chart.js": "^2.9.39", + "@types/js-yaml": "^4.0.8", "husky": "^7.0.4", "turbo": "~1.10.16" }, @@ -66,5 +66,8 @@ "@storybook/react-docgen-typescript-plugin@1.0.2-canary.6.9d540b91e815f8fc2f8829189deb00553559ff63.0": "patch:@storybook/react-docgen-typescript-plugin@npm%3A1.0.2-canary.6.9d540b91e815f8fc2f8829189deb00553559ff63.0#./.yarn/patches/@storybook-react-docgen-typescript-plugin-npm-1.0.2-canary.6.9d540b91e815f8fc2f8829189deb00553559ff63.0-b31cc57c40.patch", "mongodb@^4.17.1": "patch:mongodb@npm:4.17.1#.yarn/patches/mongodb-npm-4.17.1-a2fe811ff1.patch", "@rocket.chat/forked-matrix-sdk-crypto-nodejs": "0.1.0-beta.13" + }, + "dependencies": { + "node-gyp": "^9.4.1" } } diff --git a/packages/account-utils/package.json b/packages/account-utils/package.json index 23423d568acc..30fe066a978a 100644 --- a/packages/account-utils/package.json +++ b/packages/account-utils/package.json @@ -3,9 +3,9 @@ "version": "0.0.1", "private": true, "devDependencies": { - "@types/jest": "~29.5.3", + "@types/jest": "~29.5.7", "eslint": "~8.45.0", - "jest": "~29.6.1", + "jest": "~29.6.4", "ts-jest": "~29.0.5", "typescript": "~5.2.2" }, diff --git a/packages/agenda/package.json b/packages/agenda/package.json index f533e05dba28..695859a888b4 100644 --- a/packages/agenda/package.json +++ b/packages/agenda/package.json @@ -12,10 +12,10 @@ "mongodb": "^4.17.1" }, "devDependencies": { - "@types/debug": "^4.1.8", - "@types/jest": "~29.5.3", + "@types/debug": "^4.1.10", + "@types/jest": "~29.5.7", "eslint": "~8.45.0", - "jest": "~29.6.1", + "jest": "~29.6.4", "ts-jest": "~29.0.5", "typescript": "~5.2.2" }, diff --git a/packages/base64/package.json b/packages/base64/package.json index 36e4d0da04af..eb4882767f33 100644 --- a/packages/base64/package.json +++ b/packages/base64/package.json @@ -13,13 +13,13 @@ "test": "jest" }, "devDependencies": { - "@babel/core": "~7.22.9", - "@babel/preset-env": "~7.22.9", + "@babel/core": "~7.22.20", + "@babel/preset-env": "~7.22.20", "@rocket.chat/eslint-config": "workspace:^", "@typescript-eslint/eslint-plugin": "~5.60.1", "@typescript-eslint/parser": "~5.60.1", "eslint": "~8.45.0", - "jest": "~29.6.1", + "jest": "~29.6.4", "ts-jest": "~29.0.5", "typescript": "~5.2.2" }, diff --git a/packages/cas-validate/package.json b/packages/cas-validate/package.json index ea7e05a1ba16..4f60755332c3 100644 --- a/packages/cas-validate/package.json +++ b/packages/cas-validate/package.json @@ -4,9 +4,9 @@ "version": "0.0.1", "private": true, "devDependencies": { - "@types/jest": "~29.5.3", + "@types/jest": "~29.5.7", "eslint": "~8.45.0", - "jest": "~29.6.1", + "jest": "~29.6.4", "ts-jest": "~29.0.5", "typescript": "~5.2.2" }, diff --git a/packages/core-services/CHANGELOG.md b/packages/core-services/CHANGELOG.md index 5a8f14102124..37a2fec2ff4e 100644 --- a/packages/core-services/CHANGELOG.md +++ b/packages/core-services/CHANGELOG.md @@ -1,5 +1,109 @@ # @rocket.chat/core-services +## 0.3.0-rc.7 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.7 +- @rocket.chat/rest-typings@6.5.0-rc.7 +- @rocket.chat/models@0.0.21-rc.7 + +## 0.3.0-rc.6 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.6 +- @rocket.chat/rest-typings@6.5.0-rc.6 +- @rocket.chat/models@0.0.21-rc.6 + +## 0.3.0-rc.5 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.5 +- @rocket.chat/rest-typings@6.5.0-rc.5 +- @rocket.chat/models@0.0.21-rc.5 + +## 0.3.0-rc.4 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.4 +- @rocket.chat/rest-typings@6.5.0-rc.4 +- @rocket.chat/models@0.0.21-rc.4 + +## 0.3.0-rc.3 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.3 +- @rocket.chat/rest-typings@6.5.0-rc.3 +- @rocket.chat/models@0.0.21-rc.3 + +## 0.3.0-rc.2 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.2 +- @rocket.chat/rest-typings@6.5.0-rc.2 +- @rocket.chat/models@0.0.21-rc.2 + +## 0.3.0-rc.1 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.1 +- @rocket.chat/rest-typings@6.5.0-rc.1 +- @rocket.chat/models@0.0.21-rc.1 + +## 0.3.0-rc.0 + +### Minor Changes + +- 5f81a0f3cb: Implemented the License library, it is used to handle the functionality like expiration date, modules, limits, etc. + Also added a version v3 of the license, which contains an extended list of features. + v2 is still supported, since we convert it to v3 on the fly. + +### Patch Changes + +- 5b9d6883bf: feat: Improve UI when MAC limits are reached + feat: Limit endpoints on MAC limit reached +- Updated dependencies [dea1fe9191] +- Updated dependencies [c0ef13a0bf] +- Updated dependencies [5b9d6883bf] +- Updated dependencies [92613680b7] +- Updated dependencies [ec1b2b9846] +- Updated dependencies [a98f3ff303] +- Updated dependencies [5f81a0f3cb] +- Updated dependencies [dea1fe9191] + - @rocket.chat/core-typings@6.5.0-rc.0 + - @rocket.chat/rest-typings@6.5.0-rc.0 + - @rocket.chat/models@0.0.21-rc.0 + +## 0.2.8 + +### Patch Changes + +- @rocket.chat/core-typings@6.4.8 +- @rocket.chat/rest-typings@6.4.8 +- @rocket.chat/models@0.0.23 + +## 0.2.7 + +### Patch Changes + +- @rocket.chat/core-typings@6.4.7 +- @rocket.chat/rest-typings@6.4.7 +- @rocket.chat/models@0.0.22 + +## 0.2.6 + +### Patch Changes + +- @rocket.chat/core-typings@6.4.6 +- @rocket.chat/rest-typings@6.4.6 +- @rocket.chat/models@0.0.21 + ## 0.2.5 ### Patch Changes diff --git a/packages/core-services/package.json b/packages/core-services/package.json index aa695fc13ef1..22883244d4e3 100644 --- a/packages/core-services/package.json +++ b/packages/core-services/package.json @@ -1,18 +1,18 @@ { "name": "@rocket.chat/core-services", - "version": "0.2.5", + "version": "0.3.0-rc.7", "private": true, "devDependencies": { - "@babel/core": "~7.22.9", - "@babel/preset-env": "~7.22.9", - "@babel/preset-typescript": "~7.22.5", + "@babel/core": "~7.22.20", + "@babel/preset-env": "~7.22.20", + "@babel/preset-typescript": "~7.22.15", "@rocket.chat/eslint-config": "workspace:^", - "@types/babel__core": "^7", - "@types/babel__preset-env": "^7", - "@types/jest": "~29.5.3", + "@types/babel__core": "^7.20.3", + "@types/babel__preset-env": "^7.9.4", + "@types/jest": "~29.5.7", "babel-jest": "^29.5.0", "eslint": "~8.45.0", - "jest": "~29.6.1", + "jest": "~29.6.4", "mongodb": "^4.17.1", "prettier": "~2.8.8", "typescript": "~5.2.2" @@ -41,7 +41,7 @@ "@rocket.chat/models": "workspace:^", "@rocket.chat/rest-typings": "workspace:^", "@rocket.chat/ui-kit": "^0.32.1", - "@types/fibers": "^3.1.1", + "@types/fibers": "^3.1.3", "fibers": "^5.0.3" } } diff --git a/packages/core-services/src/index.ts b/packages/core-services/src/index.ts index d3cc778e5a22..e2615e13d57d 100644 --- a/packages/core-services/src/index.ts +++ b/packages/core-services/src/index.ts @@ -1,6 +1,7 @@ import { proxify, proxifyWithWait } from './lib/proxify'; import type { IAccount, ILoginResult } from './types/IAccount'; import type { IAnalyticsService } from './types/IAnalyticsService'; +import { IApiService } from './types/IApiService'; import type { IAppsEngineService } from './types/IAppsEngineService'; import type { IAuthorization, RoomAccessValidator } from './types/IAuthorization'; import type { IAuthorizationLivechat } from './types/IAuthorizationLivechat'; @@ -63,6 +64,7 @@ export { FindVoipRoomsParams, IAccount, IAnalyticsService, + IApiService, IAppsEngineService, IAuthorization, IAuthorizationLivechat, diff --git a/packages/core-typings/CHANGELOG.md b/packages/core-typings/CHANGELOG.md index db968b0f7e5e..fdbaa2258da4 100644 --- a/packages/core-typings/CHANGELOG.md +++ b/packages/core-typings/CHANGELOG.md @@ -1,5 +1,53 @@ # @rocket.chat/core-typings +## 6.5.0-rc.7 + +## 6.5.0-rc.6 + +## 6.5.0-rc.5 + +## 6.5.0-rc.4 + +## 6.5.0-rc.3 + +## 6.5.0-rc.2 + +## 6.5.0-rc.1 + +## 6.5.0-rc.0 + +### Minor Changes + +- c0ef13a0bf: Added `push` statistic, containing three bits. Each bit represents a boolean: + ``` + 1 1 1 + | | | + | | +- push enabled = 0b1 = 1 + | +--- push gateway enabled = 0b10 = 2 + +----- push gateway changed = 0b100 = 4 + ``` +- 92613680b7: Added option to select between two script engine options for the integrations +- ec1b2b9846: Create a deployment fingerprint to identify possible deployment changes caused by database cloning. A question to the admin will confirm if it's a regular deployment change or an intent of a new deployment and correct identification values as needed. + The fingerprint is composed by `${siteUrl}${dbConnectionString}` and hashed via `sha256` in `base64`. + An environment variable named `AUTO_ACCEPT_FINGERPRINT`, when set to `true`, can be used to auto-accept an expected fingerprint change as a regular deployment update. +- 5f81a0f3cb: Implemented the License library, it is used to handle the functionality like expiration date, modules, limits, etc. + Also added a version v3 of the license, which contains an extended list of features. + v2 is still supported, since we convert it to v3 on the fly. + +### Patch Changes + +- dea1fe9191: chore: Calculate & Store MAC stats + Added new info to the stats: `omnichannelContactsBySource`, `uniqueContactsOfLastMonth`, `uniqueContactsOfLastWeek`, `uniqueContactsOfYesterday` +- 5b9d6883bf: feat: Improve UI when MAC limits are reached + feat: Limit endpoints on MAC limit reached +- dea1fe9191: feat: Disable and annonimize visitors instead of removing + +## 6.4.8 + +## 6.4.7 + +## 6.4.6 + ## 6.4.5 ## 6.4.4 diff --git a/packages/core-typings/package.json b/packages/core-typings/package.json index 027d2c926841..b37b8f9e4063 100644 --- a/packages/core-typings/package.json +++ b/packages/core-typings/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package", "name": "@rocket.chat/core-typings", - "version": "6.4.5", + "version": "6.6.0-develop", "devDependencies": { "@rocket.chat/eslint-config": "workspace:^", "eslint": "~8.45.0", diff --git a/packages/cron/CHANGELOG.md b/packages/cron/CHANGELOG.md index 2557911ce83d..df345293e9ee 100644 --- a/packages/cron/CHANGELOG.md +++ b/packages/cron/CHANGELOG.md @@ -1,5 +1,89 @@ # @rocket.chat/cron +## 0.0.17-rc.7 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.7 +- @rocket.chat/models@0.0.21-rc.7 + +## 0.0.17-rc.6 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.6 +- @rocket.chat/models@0.0.21-rc.6 + +## 0.0.17-rc.5 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.5 +- @rocket.chat/models@0.0.21-rc.5 + +## 0.0.17-rc.4 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.4 +- @rocket.chat/models@0.0.21-rc.4 + +## 0.0.17-rc.3 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.3 +- @rocket.chat/models@0.0.21-rc.3 + +## 0.0.17-rc.2 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.2 +- @rocket.chat/models@0.0.21-rc.2 + +## 0.0.17-rc.1 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.1 +- @rocket.chat/models@0.0.21-rc.1 + +## 0.0.17-rc.0 + +### Patch Changes + +- Updated dependencies [dea1fe9191] +- Updated dependencies [c0ef13a0bf] +- Updated dependencies [5b9d6883bf] +- Updated dependencies [92613680b7] +- Updated dependencies [ec1b2b9846] +- Updated dependencies [5f81a0f3cb] +- Updated dependencies [dea1fe9191] + - @rocket.chat/core-typings@6.5.0-rc.0 + - @rocket.chat/models@0.0.21-rc.0 + +## 0.0.19 + +### Patch Changes + +- @rocket.chat/core-typings@6.4.8 +- @rocket.chat/models@0.0.23 + +## 0.0.18 + +### Patch Changes + +- @rocket.chat/core-typings@6.4.7 +- @rocket.chat/models@0.0.22 + +## 0.0.17 + +### Patch Changes + +- @rocket.chat/core-typings@6.4.6 +- @rocket.chat/models@0.0.21 + ## 0.0.16 ### Patch Changes diff --git a/packages/cron/package.json b/packages/cron/package.json index 910a8f460dd2..70a436aff65f 100644 --- a/packages/cron/package.json +++ b/packages/cron/package.json @@ -1,11 +1,11 @@ { "name": "@rocket.chat/cron", - "version": "0.0.16", + "version": "0.0.20-rc.0", "private": true, "devDependencies": { - "@types/jest": "~29.5.3", + "@types/jest": "~29.5.7", "eslint": "~8.45.0", - "jest": "~29.6.1", + "jest": "~29.6.4", "ts-jest": "~29.0.5", "typescript": "~5.2.2" }, diff --git a/packages/eslint-config/package.json b/packages/eslint-config/package.json index 9b0adef2d80e..b33ec1369392 100644 --- a/packages/eslint-config/package.json +++ b/packages/eslint-config/package.json @@ -4,8 +4,8 @@ "description": "Rocket.Chat's JS/TS ESLint config", "dependencies": { "@babel/core": "^7.20.7", - "@babel/eslint-parser": "~7.22.9", - "@types/eslint": "~8.44.0", + "@babel/eslint-parser": "~7.22.15", + "@types/eslint": "~8.44.6", "@types/prettier": "^2.6.3", "@typescript-eslint/eslint-plugin": "~5.60.1", "@typescript-eslint/parser": "~5.60.1", @@ -13,7 +13,7 @@ "eslint-config-prettier": "~8.8.0", "eslint-plugin-anti-trojan-source": "~1.1.1", "eslint-plugin-import": "~2.26.0", - "eslint-plugin-jest": "~27.2.2", + "eslint-plugin-jest": "~27.2.3", "eslint-plugin-prettier": "~4.2.1", "prettier": "~2.8.8" }, diff --git a/packages/fuselage-ui-kit/CHANGELOG.md b/packages/fuselage-ui-kit/CHANGELOG.md index acf95bdd9806..ea42640d97a1 100644 --- a/packages/fuselage-ui-kit/CHANGELOG.md +++ b/packages/fuselage-ui-kit/CHANGELOG.md @@ -1,5 +1,95 @@ # Change Log +## 3.0.0-rc.7 + +### Patch Changes + +- @rocket.chat/gazzodown@3.0.0-rc.7 +- @rocket.chat/ui-contexts@3.0.0-rc.7 +- @rocket.chat/ui-video-conf@3.0.0-rc.7 + +## 3.0.0-rc.6 + +### Patch Changes + +- @rocket.chat/gazzodown@3.0.0-rc.6 +- @rocket.chat/ui-contexts@3.0.0-rc.6 +- @rocket.chat/ui-video-conf@3.0.0-rc.6 + +## 3.0.0-rc.5 + +### Patch Changes + +- @rocket.chat/gazzodown@3.0.0-rc.5 +- @rocket.chat/ui-contexts@3.0.0-rc.5 +- @rocket.chat/ui-video-conf@3.0.0-rc.5 + +## 3.0.0-rc.4 + +### Patch Changes + +- @rocket.chat/gazzodown@3.0.0-rc.4 +- @rocket.chat/ui-contexts@3.0.0-rc.4 +- @rocket.chat/ui-video-conf@3.0.0-rc.4 + +## 3.0.0-rc.3 + +### Patch Changes + +- @rocket.chat/gazzodown@3.0.0-rc.3 +- @rocket.chat/ui-contexts@3.0.0-rc.3 +- @rocket.chat/ui-video-conf@3.0.0-rc.3 + +## 3.0.0-rc.2 + +### Patch Changes + +- @rocket.chat/gazzodown@3.0.0-rc.2 +- @rocket.chat/ui-contexts@3.0.0-rc.2 +- @rocket.chat/ui-video-conf@3.0.0-rc.2 + +## 3.0.0-rc.1 + +### Patch Changes + +- @rocket.chat/gazzodown@3.0.0-rc.1 +- @rocket.chat/ui-contexts@3.0.0-rc.1 +- @rocket.chat/ui-video-conf@3.0.0-rc.1 + +## 3.0.0-rc.0 + +### Patch Changes + +- Updated dependencies [7da1edf866] +- Updated dependencies [c2f337664e] + - @rocket.chat/ui-contexts@3.0.0-rc.0 + - @rocket.chat/gazzodown@3.0.0-rc.0 + - @rocket.chat/ui-video-conf@3.0.0-rc.0 + +## 2.0.8 + +### Patch Changes + +- @rocket.chat/gazzodown@2.0.8 +- @rocket.chat/ui-contexts@2.0.8 +- @rocket.chat/ui-video-conf@2.0.8 + +## 2.0.7 + +### Patch Changes + +- @rocket.chat/gazzodown@2.0.7 +- @rocket.chat/ui-contexts@2.0.7 +- @rocket.chat/ui-video-conf@2.0.7 + +## 2.0.6 + +### Patch Changes + +- @rocket.chat/gazzodown@2.0.6 +- @rocket.chat/ui-contexts@2.0.6 +- @rocket.chat/ui-video-conf@2.0.6 + ## 2.0.5 ### Patch Changes diff --git a/packages/fuselage-ui-kit/package.json b/packages/fuselage-ui-kit/package.json index 831391d40162..090477afdf9f 100644 --- a/packages/fuselage-ui-kit/package.json +++ b/packages/fuselage-ui-kit/package.json @@ -1,7 +1,7 @@ { "name": "@rocket.chat/fuselage-ui-kit", "private": true, - "version": "2.0.5", + "version": "3.0.0-rc.7", "description": "UiKit elements for Rocket.Chat Apps built under Fuselage design system", "homepage": "https://rocketchat.github.io/Rocket.Chat.Fuselage/", "author": { @@ -47,18 +47,18 @@ "@rocket.chat/icons": "*", "@rocket.chat/prettier-config": "*", "@rocket.chat/styled": "*", - "@rocket.chat/ui-contexts": "2.0.5", + "@rocket.chat/ui-contexts": "3.0.0-rc.7", "@rocket.chat/ui-kit": "*", - "@rocket.chat/ui-video-conf": "2.0.5", + "@rocket.chat/ui-video-conf": "3.0.0-rc.7", "@tanstack/react-query": "*", "react": "*", "react-dom": "*" }, "devDependencies": { - "@babel/core": "~7.22.10", - "@babel/preset-env": "~7.22.10", - "@babel/preset-react": "~7.22.5", - "@babel/preset-typescript": "~7.22.5", + "@babel/core": "~7.22.20", + "@babel/preset-env": "~7.22.20", + "@babel/preset-react": "~7.22.15", + "@babel/preset-typescript": "~7.22.15", "@rocket.chat/apps-engine": "1.41.0-alpha.290", "@rocket.chat/eslint-config": "workspace:^", "@rocket.chat/fuselage": "^0.37.1", @@ -78,10 +78,10 @@ "@storybook/source-loader": "~6.5.16", "@storybook/theming": "~6.5.16", "@tanstack/react-query": "^4.16.1", - "@types/babel__core": "^7", - "@types/babel__preset-env": "^7", - "@types/react": "~17.0.62", - "@types/react-dom": "~17.0.20", + "@types/babel__core": "^7.20.3", + "@types/babel__preset-env": "^7.9.4", + "@types/react": "~17.0.69", + "@types/react-dom": "~17.0.22", "babel-loader": "~8.2.5", "cross-env": "^7.0.3", "eslint": "~8.45.0", @@ -90,6 +90,7 @@ "prettier": "~2.8.8", "react-docgen-typescript-plugin": "~1.0.5", "react-dom": "^17.0.2", + "react-i18next": "~13.2.2", "rimraf": "^3.0.2", "storybook-dark-mode": "~3.0.1", "tslib": "^2.5.3", diff --git a/packages/fuselage-ui-kit/src/contexts/AppIdContext.tsx b/packages/fuselage-ui-kit/src/contexts/AppIdContext.tsx new file mode 100644 index 000000000000..717c5fa9a58a --- /dev/null +++ b/packages/fuselage-ui-kit/src/contexts/AppIdContext.tsx @@ -0,0 +1,30 @@ +import type { ReactNode } from 'react'; +import { createContext, useContext, useDebugValue } from 'react'; + +import { UiKitContext } from './UiKitContext'; + +const AppIdContext = createContext(undefined); + +type AppIdProviderProps = { + children: ReactNode; + appId?: string; +}; + +export const AppIdProvider = ({ children, appId }: AppIdProviderProps) => { + if (!appId) { + return <>{children}; + } + + return ( + {children} + ); +}; + +export const useAppId = () => { + const outerAppId = useContext(UiKitContext).appId ?? 'core'; + const appId = useContext(AppIdContext) ?? outerAppId; + + useDebugValue(appId); + + return appId; +}; diff --git a/packages/fuselage-ui-kit/src/elements/DatePickerElement.tsx b/packages/fuselage-ui-kit/src/elements/DatePickerElement.tsx index a0357c303e1f..c2744ce47571 100644 --- a/packages/fuselage-ui-kit/src/elements/DatePickerElement.tsx +++ b/packages/fuselage-ui-kit/src/elements/DatePickerElement.tsx @@ -2,19 +2,19 @@ import { InputBox } from '@rocket.chat/fuselage'; import type * as UiKit from '@rocket.chat/ui-kit'; import type { ReactElement } from 'react'; +import { useStringFromTextObject } from '../hooks/useStringFromTextObject'; import { useUiKitState } from '../hooks/useUiKitState'; import type { BlockProps } from '../utils/BlockProps'; -import { fromTextObjectToString } from '../utils/fromTextObjectToString'; type DatePickerElementProps = BlockProps; const DatePickerElement = ({ block, context, - surfaceRenderer, }: DatePickerElementProps): ReactElement => { const [{ loading, value, error }, action] = useUiKitState(block, context); const { actionId, placeholder } = block; + const fromTextObjectToString = useStringFromTextObject(); return ( ); diff --git a/packages/fuselage-ui-kit/src/elements/MarkdownTextElement.tsx b/packages/fuselage-ui-kit/src/elements/MarkdownTextElement.tsx index 25e552772604..6085c2831128 100644 --- a/packages/fuselage-ui-kit/src/elements/MarkdownTextElement.tsx +++ b/packages/fuselage-ui-kit/src/elements/MarkdownTextElement.tsx @@ -1,32 +1,17 @@ import { Markup } from '@rocket.chat/gazzodown'; import { parse } from '@rocket.chat/message-parser'; -import { useTranslation } from '@rocket.chat/ui-contexts'; import type { TextObject } from '@rocket.chat/ui-kit'; -import { useContext } from 'react'; -import { UiKitContext } from '../contexts/UiKitContext'; +import { useAppTranslation } from '../hooks/useAppTranslation'; const MarkdownTextElement = ({ textObject }: { textObject: TextObject }) => { - const t = useTranslation() as ( - key: string, - args: { [key: string]: string | number } - ) => string; + const { t } = useAppTranslation(); - const { appId } = useContext(UiKitContext); + const text = textObject.i18n + ? t(textObject.i18n.key, { ...textObject.i18n.args }) + : textObject.text; - const { i18n } = textObject; - - if (i18n) { - return ( - - ); - } - - return ; + return ; }; export default MarkdownTextElement; diff --git a/packages/fuselage-ui-kit/src/elements/MultiStaticSelectElement.tsx b/packages/fuselage-ui-kit/src/elements/MultiStaticSelectElement.tsx index 3649fd2cd172..a1948a921f49 100644 --- a/packages/fuselage-ui-kit/src/elements/MultiStaticSelectElement.tsx +++ b/packages/fuselage-ui-kit/src/elements/MultiStaticSelectElement.tsx @@ -4,26 +4,26 @@ import type * as UiKit from '@rocket.chat/ui-kit'; import type { ReactElement } from 'react'; import { memo, useCallback, useMemo } from 'react'; +import { useStringFromTextObject } from '../hooks/useStringFromTextObject'; import { useUiKitState } from '../hooks/useUiKitState'; import type { BlockProps } from '../utils/BlockProps'; -import { fromTextObjectToString } from '../utils/fromTextObjectToString'; type MultiStaticSelectElementProps = BlockProps; const MultiStaticSelectElement = ({ block, context, - surfaceRenderer, }: MultiStaticSelectElementProps): ReactElement => { const [{ loading, value, error }, action] = useUiKitState(block, context); + const fromTextObjectToString = useStringFromTextObject(); const options = useMemo( () => - block.options.map(({ value, text }, i) => [ + block.options.map(({ value, text }) => [ value, - fromTextObjectToString(surfaceRenderer, text, i) ?? '', + fromTextObjectToString(text) ?? '', ]), - [block.options, surfaceRenderer] + [block.options, fromTextObjectToString] ); const handleChange = useCallback( @@ -39,11 +39,7 @@ const MultiStaticSelectElement = ({ disabled={loading} error={error} options={options} - placeholder={fromTextObjectToString( - surfaceRenderer, - block.placeholder, - 0 - )} + placeholder={fromTextObjectToString(block.placeholder)} onChange={handleChange} /> ); diff --git a/packages/fuselage-ui-kit/src/elements/OverflowElement.tsx b/packages/fuselage-ui-kit/src/elements/OverflowElement.tsx index c239271f1c70..1af8fe18394c 100644 --- a/packages/fuselage-ui-kit/src/elements/OverflowElement.tsx +++ b/packages/fuselage-ui-kit/src/elements/OverflowElement.tsx @@ -9,18 +9,18 @@ import type * as UiKit from '@rocket.chat/ui-kit'; import type { ReactElement } from 'react'; import { useRef, useCallback, useMemo } from 'react'; +import { useStringFromTextObject } from '../hooks/useStringFromTextObject'; import { useUiKitState } from '../hooks/useUiKitState'; import type { BlockProps } from '../utils/BlockProps'; -import { fromTextObjectToString } from '../utils/fromTextObjectToString'; type OverflowElementProps = BlockProps; const OverflowElement = ({ block, context, - surfaceRenderer, }: OverflowElementProps): ReactElement => { const [{ loading }, action] = useUiKitState(block, context); + const fromTextObjectToString = useStringFromTextObject(); const fireChange = useCallback( ([value]: [UiKit.ActionOf, string]) => @@ -30,15 +30,15 @@ const OverflowElement = ({ const options = useMemo( () => - block.options.map(({ value, text, url }: UiKit.Option, i) => [ + block.options.map(({ value, text, url }) => [ value, - fromTextObjectToString(surfaceRenderer, text, i) ?? '', + fromTextObjectToString(text) ?? '', undefined, undefined, undefined, url, ]), - [block.options, surfaceRenderer] + [block.options, fromTextObjectToString] ); const [cursor, handleKeyDown, handleKeyUp, reset, [visible, hide, show]] = diff --git a/packages/fuselage-ui-kit/src/elements/PlainTextElement.tsx b/packages/fuselage-ui-kit/src/elements/PlainTextElement.tsx index 7b5510645ffe..df3aabb356ff 100644 --- a/packages/fuselage-ui-kit/src/elements/PlainTextElement.tsx +++ b/packages/fuselage-ui-kit/src/elements/PlainTextElement.tsx @@ -1,23 +1,15 @@ -import { useTranslation } from '@rocket.chat/ui-contexts'; import type { TextObject } from '@rocket.chat/ui-kit'; -import { useContext } from 'react'; -import { UiKitContext } from '../contexts/UiKitContext'; +import { useAppTranslation } from '../hooks/useAppTranslation'; const PlainTextElement = ({ textObject }: { textObject: TextObject }) => { - const t = useTranslation() as ( - key: string, - args: { [key: string]: string | number } - ) => string; + const { t } = useAppTranslation(); - const { appId } = useContext(UiKitContext); - const { i18n } = textObject; + const text = textObject.i18n + ? t(textObject.i18n.key, { ...textObject.i18n.args }) + : textObject.text; - if (i18n) { - return <>{t(`apps-${appId}-${i18n.key}`, { ...i18n.args })}; - } - - return <>{textObject.text}; + return <>{text}; }; export default PlainTextElement; diff --git a/packages/fuselage-ui-kit/src/elements/PlainTextInputElement.tsx b/packages/fuselage-ui-kit/src/elements/PlainTextInputElement.tsx index 698d4ded25f8..013c0985b832 100644 --- a/packages/fuselage-ui-kit/src/elements/PlainTextInputElement.tsx +++ b/packages/fuselage-ui-kit/src/elements/PlainTextInputElement.tsx @@ -3,18 +3,18 @@ import type * as UiKit from '@rocket.chat/ui-kit'; import type { ReactElement } from 'react'; import { memo } from 'react'; +import { useStringFromTextObject } from '../hooks/useStringFromTextObject'; import { useUiKitState } from '../hooks/useUiKitState'; import type { BlockProps } from '../utils/BlockProps'; -import { fromTextObjectToString } from '../utils/fromTextObjectToString'; type PlainTextInputElementProps = BlockProps; const PlainTextInputElement = ({ block, context, - surfaceRenderer, }: PlainTextInputElementProps): ReactElement => { const [{ loading, value, error }, action] = useUiKitState(block, context); + const fromTextObjectToString = useStringFromTextObject(); if (block.multiline) { return ( @@ -26,11 +26,7 @@ const PlainTextInputElement = ({ error={error} value={value} onChange={action} - placeholder={ - block.placeholder - ? fromTextObjectToString(surfaceRenderer, block.placeholder, 0) - : undefined - } + placeholder={fromTextObjectToString(block.placeholder)} /> ); } @@ -43,11 +39,7 @@ const PlainTextInputElement = ({ error={error} value={value} onChange={action} - placeholder={ - block.placeholder - ? fromTextObjectToString(surfaceRenderer, block.placeholder, 0) - : undefined - } + placeholder={fromTextObjectToString(block.placeholder)} /> ); }; diff --git a/packages/fuselage-ui-kit/src/elements/StaticSelectElement.tsx b/packages/fuselage-ui-kit/src/elements/StaticSelectElement.tsx index 781e25ad831c..c68a7f067a8d 100644 --- a/packages/fuselage-ui-kit/src/elements/StaticSelectElement.tsx +++ b/packages/fuselage-ui-kit/src/elements/StaticSelectElement.tsx @@ -3,26 +3,26 @@ import type * as UiKit from '@rocket.chat/ui-kit'; import type { ReactElement } from 'react'; import { memo, useCallback, useMemo } from 'react'; +import { useStringFromTextObject } from '../hooks/useStringFromTextObject'; import { useUiKitState } from '../hooks/useUiKitState'; import type { BlockProps } from '../utils/BlockProps'; -import { fromTextObjectToString } from '../utils/fromTextObjectToString'; type StaticSelectElementProps = BlockProps; const StaticSelectElement = ({ block, context, - surfaceRenderer, }: StaticSelectElementProps): ReactElement => { const [{ loading, value, error }, action] = useUiKitState(block, context); + const fromTextObjectToString = useStringFromTextObject(); const options = useMemo<[string, string][]>( () => - block.options.map((option, i) => [ + block.options.map((option) => [ option.value, - fromTextObjectToString(surfaceRenderer, option.text, i) ?? '', + fromTextObjectToString(option.text) ?? '', ]), - [block.options, surfaceRenderer] + [block.options, fromTextObjectToString] ); const handleChange = useCallback( @@ -38,11 +38,7 @@ const StaticSelectElement = ({ disabled={loading} error={error} options={options} - placeholder={fromTextObjectToString( - surfaceRenderer, - block.placeholder, - 0 - )} + placeholder={fromTextObjectToString(block.placeholder)} onChange={handleChange} /> ); diff --git a/packages/fuselage-ui-kit/src/elements/TimePickerElement.tsx b/packages/fuselage-ui-kit/src/elements/TimePickerElement.tsx index 9814b412e6e3..b0bda777cd3e 100644 --- a/packages/fuselage-ui-kit/src/elements/TimePickerElement.tsx +++ b/packages/fuselage-ui-kit/src/elements/TimePickerElement.tsx @@ -2,19 +2,19 @@ import { InputBox } from '@rocket.chat/fuselage'; import type * as UiKit from '@rocket.chat/ui-kit'; import type { ReactElement } from 'react'; +import { useStringFromTextObject } from '../hooks/useStringFromTextObject'; import { useUiKitState } from '../hooks/useUiKitState'; import type { BlockProps } from '../utils/BlockProps'; -import { fromTextObjectToString } from '../utils/fromTextObjectToString'; type TimePickerElementProps = BlockProps; const TimePickerElement = ({ block, context, - surfaceRenderer, }: TimePickerElementProps): ReactElement => { const [{ loading, value, error }, action] = useUiKitState(block, context); const { actionId, placeholder } = block; + const fromTextObjectToString = useStringFromTextObject(); return ( ); diff --git a/packages/fuselage-ui-kit/src/extractInitialStateFromLayout.ts b/packages/fuselage-ui-kit/src/extractInitialStateFromLayout.ts deleted file mode 100644 index 10b6790d976a..000000000000 --- a/packages/fuselage-ui-kit/src/extractInitialStateFromLayout.ts +++ /dev/null @@ -1,90 +0,0 @@ -import type * as UiKit from '@rocket.chat/ui-kit'; - -type Value = { value: unknown; blockId?: string }; - -type LayoutBlockWithElement = Extract< - UiKit.LayoutBlock, - { element: UiKit.BlockElement | UiKit.TextObject } ->; -type LayoutBlockWithElements = Extract< - UiKit.LayoutBlock, - { elements: readonly (UiKit.BlockElement | UiKit.TextObject)[] } ->; - -const hasElement = ( - block: UiKit.LayoutBlock -): block is LayoutBlockWithElement => 'element' in block; - -const hasElements = ( - block: UiKit.LayoutBlock -): block is LayoutBlockWithElements => - 'elements' in block && Array.isArray(block.elements); - -const isActionableElement = ( - element: UiKit.BlockElement | UiKit.TextObject -): element is UiKit.ActionableElement => - 'actionId' in element && typeof element.actionId === 'string'; - -const hasInitialValue = ( - element: UiKit.ActionableElement -): element is UiKit.ActionableElement & { initialValue: number | string } => - 'initialValue' in element; - -const hasInitialTime = ( - element: UiKit.ActionableElement -): element is UiKit.ActionableElement & { initialTime: string } => - 'initialTime' in element; - -const hasInitialDate = ( - element: UiKit.ActionableElement -): element is UiKit.ActionableElement & { initialDate: string } => - 'initialDate' in element; - -const hasInitialOption = ( - element: UiKit.ActionableElement -): element is UiKit.ActionableElement & { initialOption: UiKit.Option } => - 'initialOption' in element; - -const hasInitialOptions = ( - element: UiKit.ActionableElement -): element is UiKit.ActionableElement & { initialOptions: UiKit.Option[] } => - 'initialOptions' in element; - -const getInitialValue = (element: UiKit.ActionableElement) => - (hasInitialValue(element) && element.initialValue) || - (hasInitialTime(element) && element.initialTime) || - (hasInitialDate(element) && element.initialDate) || - (hasInitialOption(element) && element.initialOption.value) || - (hasInitialOptions(element) && - element.initialOptions.map((option) => option.value)) || - undefined; - -const reduceInitialValuesFromLayoutBlock = ( - state: { [actionId: string]: Value }, - block: UiKit.LayoutBlock -) => { - if (hasElement(block)) { - if (isActionableElement(block.element)) { - state[block.element.actionId] = { - value: getInitialValue(block.element), - blockId: block.blockId, - }; - } - } - - if (hasElements(block)) { - for (const element of block.elements) { - if (isActionableElement(element)) { - state[element.actionId] = { - value: getInitialValue(element), - blockId: block.blockId, - }; - } - } - } - - return state; -}; - -export const extractInitialStateFromLayout = (blocks: UiKit.LayoutBlock[]) => - blocks.reduce(reduceInitialValuesFromLayoutBlock, {}); diff --git a/packages/fuselage-ui-kit/src/hooks/useAppTranslation.ts b/packages/fuselage-ui-kit/src/hooks/useAppTranslation.ts new file mode 100644 index 000000000000..c29cf0953386 --- /dev/null +++ b/packages/fuselage-ui-kit/src/hooks/useAppTranslation.ts @@ -0,0 +1,13 @@ +import { useDebugValue } from 'react'; +import { useTranslation } from 'react-i18next'; + +import { useAppId } from '../contexts/AppIdContext'; + +export const useAppTranslation = () => { + const appId = useAppId(); + const appNs = `app-${appId}`; + + useDebugValue(appNs); + + return useTranslation(appNs); +}; diff --git a/packages/fuselage-ui-kit/src/hooks/useStringFromTextObject.ts b/packages/fuselage-ui-kit/src/hooks/useStringFromTextObject.ts new file mode 100644 index 000000000000..72908da48eca --- /dev/null +++ b/packages/fuselage-ui-kit/src/hooks/useStringFromTextObject.ts @@ -0,0 +1,21 @@ +import type * as UiKit from '@rocket.chat/ui-kit'; +import { useCallback } from 'react'; + +import { useAppTranslation } from './useAppTranslation'; + +export const useStringFromTextObject = () => { + const { t } = useAppTranslation(); + + return useCallback( + (textObject: UiKit.TextObject | undefined): string | undefined => { + if (!textObject) { + return undefined; + } + + return textObject.i18n + ? t?.(textObject.i18n.key, { ...textObject.i18n.args }) + : textObject.text; + }, + [t] + ); +}; diff --git a/packages/fuselage-ui-kit/src/hooks/useUiKitState.ts b/packages/fuselage-ui-kit/src/hooks/useUiKitState.ts index 0a736dcc1c6c..4468f4fd86a7 100644 --- a/packages/fuselage-ui-kit/src/hooks/useUiKitState.ts +++ b/packages/fuselage-ui-kit/src/hooks/useUiKitState.ts @@ -3,40 +3,7 @@ import * as UiKit from '@rocket.chat/ui-kit'; import { useContext, useMemo, useState } from 'react'; import { UiKitContext } from '../contexts/UiKitContext'; - -const hasInitialValue = ( - element: TElement -): element is TElement & { initialValue: number | string } => - 'initialValue' in element; - -const hasInitialTime = ( - element: TElement -): element is TElement & { initialTime: string } => 'initialTime' in element; - -const hasInitialDate = ( - element: TElement -): element is TElement & { initialDate: string } => 'initialDate' in element; - -const hasInitialOption = ( - element: TElement -): element is TElement & { initialOption: UiKit.Option } => - 'initialOption' in element; - -const hasInitialOptions = ( - element: TElement -): element is TElement & { initialOptions: UiKit.Option[] } => - 'initialOptions' in element; - -const getInitialValue = ( - element: TElement -) => - (hasInitialValue(element) && element.initialValue) || - (hasInitialTime(element) && element.initialTime) || - (hasInitialDate(element) && element.initialDate) || - (hasInitialOption(element) && element.initialOption.value) || - (hasInitialOptions(element) && - element.initialOptions.map((option) => option.value)) || - undefined; +import { getInitialValue } from '../utils/getInitialValue'; const getElementValueFromState = ( actionId: string, diff --git a/packages/fuselage-ui-kit/src/index.ts b/packages/fuselage-ui-kit/src/index.ts index 9db1f2097835..d2d31f0d2ace 100644 --- a/packages/fuselage-ui-kit/src/index.ts +++ b/packages/fuselage-ui-kit/src/index.ts @@ -2,4 +2,4 @@ export * from './hooks/useUiKitState'; export * from './contexts/UiKitContext'; export * from './surfaces'; export { UiKitComponent } from './utils/UiKitComponent'; -export { extractInitialStateFromLayout } from './extractInitialStateFromLayout'; +export { extractInitialStateFromLayout } from './utils/extractInitialStateFromLayout'; diff --git a/packages/fuselage-ui-kit/src/surfaces/ContextualBarSurfaceRenderer.tsx b/packages/fuselage-ui-kit/src/surfaces/ContextualBarSurfaceRenderer.tsx index 5e4af0e7caeb..48b678365a7f 100644 --- a/packages/fuselage-ui-kit/src/surfaces/ContextualBarSurfaceRenderer.tsx +++ b/packages/fuselage-ui-kit/src/surfaces/ContextualBarSurfaceRenderer.tsx @@ -2,6 +2,7 @@ import * as UiKit from '@rocket.chat/ui-kit'; import type { ReactElement } from 'react'; import TabNavigationBlock from '../blocks/TabNavigationBlock'; +import { AppIdProvider } from '../contexts/AppIdContext'; import { FuselageSurfaceRenderer, renderTextObject, @@ -33,13 +34,14 @@ export class ContextualBarSurfaceRenderer extends FuselageSurfaceRenderer { ): ReactElement | null { if (context === UiKit.BlockContext.BLOCK) { return ( - + + + ); } diff --git a/packages/fuselage-ui-kit/src/surfaces/MessageSurfaceRenderer.tsx b/packages/fuselage-ui-kit/src/surfaces/FuselageMessageSurfaceRenderer.tsx similarity index 73% rename from packages/fuselage-ui-kit/src/surfaces/MessageSurfaceRenderer.tsx rename to packages/fuselage-ui-kit/src/surfaces/FuselageMessageSurfaceRenderer.tsx index 4ca4682123ff..610dd1f408c5 100644 --- a/packages/fuselage-ui-kit/src/surfaces/MessageSurfaceRenderer.tsx +++ b/packages/fuselage-ui-kit/src/surfaces/FuselageMessageSurfaceRenderer.tsx @@ -2,6 +2,7 @@ import * as UiKit from '@rocket.chat/ui-kit'; import type { ReactElement } from 'react'; import VideoConferenceBlock from '../blocks/VideoConferenceBlock/VideoConferenceBlock'; +import { AppIdProvider } from '../contexts/AppIdContext'; import { FuselageSurfaceRenderer, renderTextObject, @@ -32,13 +33,14 @@ export class FuselageMessageSurfaceRenderer extends FuselageSurfaceRenderer { ): ReactElement | null { if (context === UiKit.BlockContext.BLOCK) { return ( - + + + ); } diff --git a/packages/fuselage-ui-kit/src/surfaces/FuselageSurfaceRenderer.tsx b/packages/fuselage-ui-kit/src/surfaces/FuselageSurfaceRenderer.tsx index 348aafd7c1ee..a2cbdb62d16c 100644 --- a/packages/fuselage-ui-kit/src/surfaces/FuselageSurfaceRenderer.tsx +++ b/packages/fuselage-ui-kit/src/surfaces/FuselageSurfaceRenderer.tsx @@ -9,6 +9,7 @@ import ImageBlock from '../blocks/ImageBlock'; import InputBlock from '../blocks/InputBlock'; import PreviewBlock from '../blocks/PreviewBlock'; import SectionBlock from '../blocks/SectionBlock'; +import { AppIdProvider } from '../contexts/AppIdContext'; import ButtonElement from '../elements/ButtonElement'; import CheckboxElement from '../elements/CheckboxElement'; import DatePickerElement from '../elements/DatePickerElement'; @@ -58,6 +59,13 @@ export const renderTextObject = ( } }; +const isImageBlock = ( + _elementOrBlock: UiKit.ImageBlock | UiKit.ImageElement, + context: UiKit.BlockContext +): _elementOrBlock is UiKit.ImageBlock => { + return context === UiKit.BlockContext.BLOCK; +}; + type FuselageSurfaceRendererProps = ConstructorParameters< typeof UiKit.SurfaceRenderer >[0]; @@ -120,13 +128,14 @@ export abstract class FuselageSurfaceRenderer extends UiKit.SurfaceRenderer + + + ); } @@ -159,13 +168,14 @@ export abstract class FuselageSurfaceRenderer extends UiKit.SurfaceRenderer + + + ); } @@ -179,13 +189,14 @@ export abstract class FuselageSurfaceRenderer extends UiKit.SurfaceRenderer + + + ); } @@ -197,15 +208,16 @@ export abstract class FuselageSurfaceRenderer extends UiKit.SurfaceRenderer + + + ); } @@ -227,13 +239,17 @@ export abstract class FuselageSurfaceRenderer extends UiKit.SurfaceRenderer + appId={block.appId} + > + + ); } @@ -247,13 +263,14 @@ export abstract class FuselageSurfaceRenderer extends UiKit.SurfaceRenderer + + + ); } @@ -270,13 +287,14 @@ export abstract class FuselageSurfaceRenderer extends UiKit.SurfaceRenderer + + + ); } @@ -290,13 +308,14 @@ export abstract class FuselageSurfaceRenderer extends UiKit.SurfaceRenderer + + + ); } @@ -310,13 +329,14 @@ export abstract class FuselageSurfaceRenderer extends UiKit.SurfaceRenderer + + + ); } @@ -330,13 +350,14 @@ export abstract class FuselageSurfaceRenderer extends UiKit.SurfaceRenderer + + + ); } @@ -350,13 +371,14 @@ export abstract class FuselageSurfaceRenderer extends UiKit.SurfaceRenderer + + + ); } @@ -370,13 +392,14 @@ export abstract class FuselageSurfaceRenderer extends UiKit.SurfaceRenderer + + + ); } @@ -390,13 +413,14 @@ export abstract class FuselageSurfaceRenderer extends UiKit.SurfaceRenderer + + + ); } @@ -410,13 +434,14 @@ export abstract class FuselageSurfaceRenderer extends UiKit.SurfaceRenderer + + + ); } @@ -430,13 +455,14 @@ export abstract class FuselageSurfaceRenderer extends UiKit.SurfaceRenderer + + + ); } @@ -450,13 +476,14 @@ export abstract class FuselageSurfaceRenderer extends UiKit.SurfaceRenderer + + + ); } @@ -467,13 +494,14 @@ export abstract class FuselageSurfaceRenderer extends UiKit.SurfaceRenderer + + + ); } @@ -490,13 +518,14 @@ export abstract class FuselageSurfaceRenderer extends UiKit.SurfaceRenderer + + + ); } } diff --git a/packages/fuselage-ui-kit/src/surfaces/index.ts b/packages/fuselage-ui-kit/src/surfaces/index.ts index 133ec5dc714a..8b92a4d646a2 100644 --- a/packages/fuselage-ui-kit/src/surfaces/index.ts +++ b/packages/fuselage-ui-kit/src/surfaces/index.ts @@ -2,8 +2,8 @@ import BannerSurface from './BannerSurface'; import { BannerSurfaceRenderer } from './BannerSurfaceRenderer'; import ContextualBarSurface from './ContextualBarSurface'; import { ContextualBarSurfaceRenderer } from './ContextualBarSurfaceRenderer'; +import { FuselageMessageSurfaceRenderer } from './FuselageMessageSurfaceRenderer'; import MessageSurface from './MessageSurface'; -import { FuselageMessageSurfaceRenderer } from './MessageSurfaceRenderer'; import ModalSurface from './ModalSurface'; import { ModalSurfaceRenderer } from './ModalSurfaceRenderer'; import { createSurfaceRenderer } from './createSurfaceRenderer'; diff --git a/packages/fuselage-ui-kit/src/utils/extractInitialStateFromLayout.ts b/packages/fuselage-ui-kit/src/utils/extractInitialStateFromLayout.ts new file mode 100644 index 000000000000..0fc66c7f72ab --- /dev/null +++ b/packages/fuselage-ui-kit/src/utils/extractInitialStateFromLayout.ts @@ -0,0 +1,40 @@ +import type * as UiKit from '@rocket.chat/ui-kit'; + +import { type Value, getInitialValue } from './getInitialValue'; +import { hasElement } from './hasElement'; +import { hasElements } from './hasElements'; + +const isActionableElement = ( + element: UiKit.BlockElement | UiKit.TextObject +): element is UiKit.ActionableElement => + 'actionId' in element && typeof element.actionId === 'string'; + +const reduceInitialValuesFromLayoutBlock = ( + state: { [actionId: string]: Value }, + block: UiKit.LayoutBlock +) => { + if (hasElement(block)) { + if (isActionableElement(block.element)) { + state[block.element.actionId] = { + value: getInitialValue(block.element), + blockId: block.blockId, + }; + } + } + + if (hasElements(block)) { + for (const element of block.elements) { + if (isActionableElement(element)) { + state[element.actionId] = { + value: getInitialValue(element), + blockId: block.blockId, + }; + } + } + } + + return state; +}; + +export const extractInitialStateFromLayout = (blocks: UiKit.LayoutBlock[]) => + blocks.reduce(reduceInitialValuesFromLayoutBlock, {}); diff --git a/packages/fuselage-ui-kit/src/utils/fromTextObjectToString.ts b/packages/fuselage-ui-kit/src/utils/fromTextObjectToString.ts deleted file mode 100644 index adc624986c7e..000000000000 --- a/packages/fuselage-ui-kit/src/utils/fromTextObjectToString.ts +++ /dev/null @@ -1,21 +0,0 @@ -import * as UiKit from '@rocket.chat/ui-kit'; -import type { ReactElement } from 'react'; -import { renderToStaticMarkup } from 'react-dom/server'; - -export const fromTextObjectToString = ( - surfaceRenderer: UiKit.SurfaceRenderer, - textObject: UiKit.TextObject, - index: number -): string | undefined => { - const element = surfaceRenderer.renderTextObject( - textObject, - index, - UiKit.BlockContext.NONE - ); - - if (!element) { - return undefined; - } - - return renderToStaticMarkup(element); -}; diff --git a/packages/fuselage-ui-kit/src/utils/getInitialValue.ts b/packages/fuselage-ui-kit/src/utils/getInitialValue.ts new file mode 100644 index 000000000000..7e75d4d5231c --- /dev/null +++ b/packages/fuselage-ui-kit/src/utils/getInitialValue.ts @@ -0,0 +1,37 @@ +import type * as UiKit from '@rocket.chat/ui-kit'; + +export type Value = { value: unknown; blockId?: string }; + +const hasInitialValue = ( + element: UiKit.ActionableElement +): element is UiKit.ActionableElement & { initialValue: number | string } => + 'initialValue' in element; + +const hasInitialTime = ( + element: UiKit.ActionableElement +): element is UiKit.ActionableElement & { initialTime: string } => + 'initialTime' in element; + +const hasInitialDate = ( + element: UiKit.ActionableElement +): element is UiKit.ActionableElement & { initialDate: string } => + 'initialDate' in element; + +const hasInitialOption = ( + element: UiKit.ActionableElement +): element is UiKit.ActionableElement & { initialOption: UiKit.Option } => + 'initialOption' in element; + +const hasInitialOptions = ( + element: UiKit.ActionableElement +): element is UiKit.ActionableElement & { initialOptions: UiKit.Option[] } => + 'initialOptions' in element; + +export const getInitialValue = (element: UiKit.ActionableElement) => + (hasInitialValue(element) && element.initialValue) || + (hasInitialTime(element) && element.initialTime) || + (hasInitialDate(element) && element.initialDate) || + (hasInitialOption(element) && element.initialOption.value) || + (hasInitialOptions(element) && + element.initialOptions.map((option) => option.value)) || + undefined; diff --git a/packages/fuselage-ui-kit/src/utils/hasElement.ts b/packages/fuselage-ui-kit/src/utils/hasElement.ts new file mode 100644 index 000000000000..42484addf444 --- /dev/null +++ b/packages/fuselage-ui-kit/src/utils/hasElement.ts @@ -0,0 +1,10 @@ +import type * as UiKit from '@rocket.chat/ui-kit'; + +type LayoutBlockWithElement = Extract< + UiKit.LayoutBlock, + { element: UiKit.BlockElement | UiKit.TextObject } +>; + +export const hasElement = ( + block: UiKit.LayoutBlock +): block is LayoutBlockWithElement => 'element' in block; diff --git a/packages/fuselage-ui-kit/src/utils/hasElements.ts b/packages/fuselage-ui-kit/src/utils/hasElements.ts new file mode 100644 index 000000000000..9df00cda1768 --- /dev/null +++ b/packages/fuselage-ui-kit/src/utils/hasElements.ts @@ -0,0 +1,11 @@ +import type * as UiKit from '@rocket.chat/ui-kit'; + +type LayoutBlockWithElements = Extract< + UiKit.LayoutBlock, + { elements: readonly (UiKit.BlockElement | UiKit.TextObject)[] } +>; + +export const hasElements = ( + block: UiKit.LayoutBlock +): block is LayoutBlockWithElements => + 'elements' in block && Array.isArray(block.elements); diff --git a/packages/gazzodown/CHANGELOG.md b/packages/gazzodown/CHANGELOG.md index ebf2a6f453d6..db795a3acad7 100644 --- a/packages/gazzodown/CHANGELOG.md +++ b/packages/gazzodown/CHANGELOG.md @@ -1,5 +1,102 @@ # @rocket.chat/gazzodown +## 3.0.0-rc.7 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.7 +- @rocket.chat/ui-contexts@3.0.0-rc.7 +- @rocket.chat/ui-client@3.0.0-rc.7 + +## 3.0.0-rc.6 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.6 +- @rocket.chat/ui-contexts@3.0.0-rc.6 +- @rocket.chat/ui-client@3.0.0-rc.6 + +## 3.0.0-rc.5 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.5 +- @rocket.chat/ui-contexts@3.0.0-rc.5 +- @rocket.chat/ui-client@3.0.0-rc.5 + +## 3.0.0-rc.4 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.4 +- @rocket.chat/ui-contexts@3.0.0-rc.4 +- @rocket.chat/ui-client@3.0.0-rc.4 + +## 3.0.0-rc.3 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.3 +- @rocket.chat/ui-contexts@3.0.0-rc.3 +- @rocket.chat/ui-client@3.0.0-rc.3 + +## 3.0.0-rc.2 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.2 +- @rocket.chat/ui-contexts@3.0.0-rc.2 +- @rocket.chat/ui-client@3.0.0-rc.2 + +## 3.0.0-rc.1 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.1 +- @rocket.chat/ui-contexts@3.0.0-rc.1 +- @rocket.chat/ui-client@3.0.0-rc.1 + +## 3.0.0-rc.0 + +### Patch Changes + +- c2f337664e: fixed an issue with mentions showing usernames instead of names on smaller screens +- Updated dependencies [7da1edf866] +- Updated dependencies [dea1fe9191] +- Updated dependencies [c0ef13a0bf] +- Updated dependencies [5b9d6883bf] +- Updated dependencies [92613680b7] +- Updated dependencies [ec1b2b9846] +- Updated dependencies [5f81a0f3cb] +- Updated dependencies [dea1fe9191] + - @rocket.chat/ui-contexts@3.0.0-rc.0 + - @rocket.chat/core-typings@6.5.0-rc.0 + - @rocket.chat/ui-client@3.0.0-rc.0 + +## 2.0.8 + +### Patch Changes + +- @rocket.chat/core-typings@6.4.8 +- @rocket.chat/ui-contexts@2.0.8 +- @rocket.chat/ui-client@2.0.8 + +## 2.0.7 + +### Patch Changes + +- @rocket.chat/core-typings@6.4.7 +- @rocket.chat/ui-contexts@2.0.7 +- @rocket.chat/ui-client@2.0.7 + +## 2.0.6 + +### Patch Changes + +- @rocket.chat/core-typings@6.4.6 +- @rocket.chat/ui-contexts@2.0.6 +- @rocket.chat/ui-client@2.0.6 + ## 2.0.5 ### Patch Changes diff --git a/packages/gazzodown/package.json b/packages/gazzodown/package.json index 90cda6c256c1..dfd8a632814a 100644 --- a/packages/gazzodown/package.json +++ b/packages/gazzodown/package.json @@ -1,9 +1,9 @@ { "name": "@rocket.chat/gazzodown", - "version": "2.0.5", + "version": "3.0.0-rc.7", "private": true, "devDependencies": { - "@babel/core": "~7.22.9", + "@babel/core": "~7.22.20", "@rocket.chat/core-typings": "workspace:^", "@rocket.chat/css-in-js": "next", "@rocket.chat/fuselage": "^0.37.1", @@ -21,15 +21,15 @@ "@storybook/manager-webpack4": "~6.5.16", "@storybook/react": "~6.5.16", "@storybook/testing-library": "~0.0.13", - "@swc/core": "^1.3.66", - "@swc/jest": "^0.2.26", + "@swc/core": "^1.3.95", + "@swc/jest": "^0.2.29", "@testing-library/jest-dom": "^5.16.5", "@testing-library/react": "~12.1.5", - "@types/jest": "~29.5.3", - "@types/katex": "~0.16.0", - "@types/react": "~17.0.62", - "@types/react-dom": "~17.0.20", - "@types/testing-library__jest-dom": "~5.14.6", + "@types/jest": "~29.5.7", + "@types/katex": "~0.16.5", + "@types/react": "~17.0.69", + "@types/react-dom": "~17.0.22", + "@types/testing-library__jest-dom": "~5.14.9", "@typescript-eslint/eslint-plugin": "~5.60.1", "@typescript-eslint/parser": "~5.60.1", "babel-loader": "^8.3.0", @@ -37,11 +37,11 @@ "eslint-plugin-anti-trojan-source": "~1.1.1", "eslint-plugin-react": "~7.32.2", "eslint-plugin-react-hooks": "~4.6.0", - "eslint-plugin-storybook": "~0.6.12", + "eslint-plugin-storybook": "~0.6.15", "identity-obj-proxy": "^3.0.0", - "jest": "~29.6.1", - "jest-environment-jsdom": "~29.6.1", - "katex": "~0.16.7", + "jest": "~29.6.4", + "jest-environment-jsdom": "~29.6.4", + "katex": "~0.16.9", "outdent": "^0.8.0", "react-docgen-typescript-plugin": "~1.0.5", "react-dom": "~17.0.2", @@ -65,14 +65,14 @@ "/dist" ], "peerDependencies": { - "@rocket.chat/core-typings": "6.4.5", + "@rocket.chat/core-typings": "6.6.0-develop", "@rocket.chat/css-in-js": "*", "@rocket.chat/fuselage": "*", "@rocket.chat/fuselage-tokens": "*", "@rocket.chat/message-parser": "*", "@rocket.chat/styled": "*", - "@rocket.chat/ui-client": "2.0.5", - "@rocket.chat/ui-contexts": "2.0.5", + "@rocket.chat/ui-client": "3.0.0-rc.7", + "@rocket.chat/ui-contexts": "3.0.0-rc.7", "katex": "*", "react": "*" }, diff --git a/packages/i18n/CHANGELOG.md b/packages/i18n/CHANGELOG.md index 7eecb2d845e9..460d2b868bd7 100644 --- a/packages/i18n/CHANGELOG.md +++ b/packages/i18n/CHANGELOG.md @@ -1,5 +1,11 @@ # @rocket.chat/i18n +## 0.0.3-rc.0 + +### Patch Changes + +- 747ec6c70e: Updated slack bridge to add support for connecting using slack apps in addition to the slack legacy bot + ## 0.0.2 ### Patch Changes diff --git a/packages/i18n/package.json b/packages/i18n/package.json index 08c924493580..86d60ed24c3c 100644 --- a/packages/i18n/package.json +++ b/packages/i18n/package.json @@ -1,13 +1,13 @@ { "name": "@rocket.chat/i18n", - "version": "0.0.2", + "version": "0.0.3-rc.0", "private": true, "devDependencies": { - "@babel/core": "~7.22.10", - "@babel/preset-env": "~7.22.10", + "@babel/core": "~7.22.20", + "@babel/preset-env": "~7.22.20", "babel-jest": "^29.5.0", "eslint": "~8.45.0", - "jest": "~29.6.1", + "jest": "~29.6.4", "ts-jest": "~29.0.5", "tsup": "^6.7.0", "typescript": "~5.2.2" diff --git a/packages/instance-status/CHANGELOG.md b/packages/instance-status/CHANGELOG.md index 634a1cb8d6b5..45593a97f303 100644 --- a/packages/instance-status/CHANGELOG.md +++ b/packages/instance-status/CHANGELOG.md @@ -1,5 +1,71 @@ # @rocket.chat/instance-status +## 0.0.21-rc.7 + +### Patch Changes + +- @rocket.chat/models@0.0.21-rc.7 + +## 0.0.21-rc.6 + +### Patch Changes + +- @rocket.chat/models@0.0.21-rc.6 + +## 0.0.21-rc.5 + +### Patch Changes + +- @rocket.chat/models@0.0.21-rc.5 + +## 0.0.21-rc.4 + +### Patch Changes + +- @rocket.chat/models@0.0.21-rc.4 + +## 0.0.21-rc.3 + +### Patch Changes + +- @rocket.chat/models@0.0.21-rc.3 + +## 0.0.21-rc.2 + +### Patch Changes + +- @rocket.chat/models@0.0.21-rc.2 + +## 0.0.21-rc.1 + +### Patch Changes + +- @rocket.chat/models@0.0.21-rc.1 + +## 0.0.21-rc.0 + +### Patch Changes + +- @rocket.chat/models@0.0.21-rc.0 + +## 0.0.23 + +### Patch Changes + +- @rocket.chat/models@0.0.23 + +## 0.0.22 + +### Patch Changes + +- @rocket.chat/models@0.0.22 + +## 0.0.21 + +### Patch Changes + +- @rocket.chat/models@0.0.21 + ## 0.0.20 ### Patch Changes diff --git a/packages/instance-status/package.json b/packages/instance-status/package.json index d2b9dcf83861..eb512a50dffe 100644 --- a/packages/instance-status/package.json +++ b/packages/instance-status/package.json @@ -1,6 +1,6 @@ { "name": "@rocket.chat/instance-status", - "version": "0.0.20", + "version": "0.0.24-rc.0", "private": true, "devDependencies": { "@rocket.chat/eslint-config": "workspace:^", diff --git a/packages/jwt/CHANGELOG.md b/packages/jwt/CHANGELOG.md new file mode 100644 index 000000000000..20eeaf8727ce --- /dev/null +++ b/packages/jwt/CHANGELOG.md @@ -0,0 +1,9 @@ +# @rocket.chat/jwt + +## 0.1.0-rc.0 + +### Minor Changes + +- 5f81a0f3cb: Implemented the License library, it is used to handle the functionality like expiration date, modules, limits, etc. + Also added a version v3 of the license, which contains an extended list of features. + v2 is still supported, since we convert it to v3 on the fly. diff --git a/packages/jwt/package.json b/packages/jwt/package.json index b6be368917c3..be389ab3e046 100644 --- a/packages/jwt/package.json +++ b/packages/jwt/package.json @@ -1,11 +1,11 @@ { "name": "@rocket.chat/jwt", - "version": "0.0.1", + "version": "0.1.0-rc.0", "private": true, "devDependencies": { - "@types/jest": "~29.5.3", + "@types/jest": "~29.5.7", "eslint": "~8.45.0", - "jest": "~29.6.1", + "jest": "~29.6.4", "ts-jest": "^29.1.1", "typescript": "~5.2.2" }, diff --git a/packages/livechat/CHANGELOG.md b/packages/livechat/CHANGELOG.md index a07fa84d96a5..abe2212eb7b7 100644 --- a/packages/livechat/CHANGELOG.md +++ b/packages/livechat/CHANGELOG.md @@ -1,5 +1,73 @@ # @rocket.chat/livechat Change Log +## 1.14.6-rc.7 + +### Patch Changes + +- @rocket.chat/gazzodown@3.0.0-rc.7 + +## 1.14.6-rc.6 + +### Patch Changes + +- @rocket.chat/gazzodown@3.0.0-rc.6 + +## 1.14.6-rc.5 + +### Patch Changes + +- @rocket.chat/gazzodown@3.0.0-rc.5 + +## 1.14.6-rc.4 + +### Patch Changes + +- @rocket.chat/gazzodown@3.0.0-rc.4 + +## 1.14.6-rc.3 + +### Patch Changes + +- @rocket.chat/gazzodown@3.0.0-rc.3 + +## 1.14.6-rc.2 + +### Patch Changes + +- @rocket.chat/gazzodown@3.0.0-rc.2 + +## 1.14.6-rc.1 + +### Patch Changes + +- @rocket.chat/gazzodown@3.0.0-rc.1 + +## 1.14.6-rc.0 + +### Patch Changes + +- Updated dependencies [c2f337664e] + - @rocket.chat/gazzodown@3.0.0-rc.0 + +## 1.14.8 + +### Patch Changes + +- d1c8e7ac13: Fixes reactivity issue with `registerGuest` Widget API Call, as well as other similar endpoint + - @rocket.chat/gazzodown@2.0.8 + +## 1.14.7 + +### Patch Changes + +- @rocket.chat/gazzodown@2.0.7 + +## 1.14.6 + +### Patch Changes + +- @rocket.chat/gazzodown@2.0.6 + ## 1.14.5 ### Patch Changes diff --git a/packages/livechat/package.json b/packages/livechat/package.json index e87d52067c47..0cf288930699 100644 --- a/packages/livechat/package.json +++ b/packages/livechat/package.json @@ -1,6 +1,6 @@ { "name": "@rocket.chat/livechat", - "version": "1.14.5", + "version": "1.14.9-rc.0", "files": [ "/build" ], @@ -24,9 +24,9 @@ "typecheck": "tsc -p tsconfig.typecheck.json" }, "devDependencies": { - "@babel/eslint-parser": "~7.22.9", - "@babel/preset-env": "~7.22.9", - "@babel/preset-typescript": "~7.22.5", + "@babel/eslint-parser": "~7.22.15", + "@babel/preset-env": "~7.22.20", + "@babel/preset-typescript": "~7.22.15", "@rocket.chat/core-typings": "workspace:^", "@rocket.chat/ddp-client": "workspace:^", "@rocket.chat/eslint-config": "workspace:^", @@ -36,10 +36,10 @@ "@storybook/addon-postcss": "~2.0.0", "@storybook/preact": "~6.5.16", "@storybook/theming": "~6.5.16", - "@types/crypto-js": "~4.1.1", + "@types/crypto-js": "~4.1.3", "@types/mini-css-extract-plugin": "~1.4.3", "@types/webpack": "^5.28.4", - "@types/webpack-bundle-analyzer": "^4", + "@types/webpack-bundle-analyzer": "^4.6.2", "@types/webpack-dev-server": "~4.7.2", "@types/whatwg-fetch": "~0.0.33", "@typescript-eslint/eslint-plugin": "~5.60.1", @@ -69,7 +69,7 @@ "postcss-ie11-supports": "^0.1.3", "postcss-loader": "^3.0.0", "postcss-logical": "^4.0.2", - "postcss-scss": "^4.0.6", + "postcss-scss": "^4.0.9", "postcss-selector-not": "^4.0.1", "react-dom": "~17.0.2", "rimraf": "^3.0.2", @@ -84,7 +84,7 @@ "typescript": "~5.2.2", "url-loader": "^4.1.1", "webpack": "^5.89.0", - "webpack-bundle-analyzer": "^4.9.0", + "webpack-bundle-analyzer": "^4.9.1", "webpack-cli": "^5.1.4", "webpack-dev-server": "~4.13.3" }, @@ -102,7 +102,7 @@ "date-fns": "^2.15.0", "emoji-mart": "^3.0.1", "history": "~5.3.0", - "i18next": "~23.4.5", + "i18next": "~23.4.9", "markdown-it": "^11.0.1", "mem": "^6.1.1", "mitt": "^2.1.0", @@ -110,8 +110,8 @@ "preact-router": "^3.2.1", "query-string": "^7.1.3", "react-hook-form": "~7.45.4", - "react-i18next": "~13.2.1", - "whatwg-fetch": "^3.6.2" + "react-i18next": "~13.2.2", + "whatwg-fetch": "^3.6.19" }, "browserslist": [ "last 2 versions", diff --git a/packages/livechat/src/lib/hooks.js b/packages/livechat/src/lib/hooks.js index 795358312173..311cf0b2a00b 100644 --- a/packages/livechat/src/lib/hooks.js +++ b/packages/livechat/src/lib/hooks.js @@ -14,6 +14,7 @@ const createOrUpdateGuest = async (guest) => { token && (await store.setState({ token })); const { visitor: user } = await Livechat.grantVisitor({ visitor: { ...guest } }); store.setState({ user }); + await loadConfig(); }; const updateIframeGuestData = (data) => { @@ -141,8 +142,7 @@ const api = { if (token === localToken) { return; } - createOrUpdateGuest({ token }); - await loadConfig(); + await createOrUpdateGuest({ token }); }, setGuestName(name) { @@ -153,8 +153,8 @@ const api = { updateIframeGuestData({ email }); }, - registerGuest(data = {}) { - if (typeof data !== 'object') { + async registerGuest(data) { + if (!data || typeof data !== 'object') { return; } @@ -166,7 +166,9 @@ const api = { api.setDepartment(data.department); } - createOrUpdateGuest(data); + Livechat.unsubscribeAll(); + + await createOrUpdateGuest(data); }, async setLanguage(language) { diff --git a/packages/livechat/webpack.config.ts b/packages/livechat/webpack.config.ts index ecc404e7187f..361077be2a68 100644 --- a/packages/livechat/webpack.config.ts +++ b/packages/livechat/webpack.config.ts @@ -167,7 +167,7 @@ const config = (_env: any, args: webpack.WebpackOptionsNormalized): webpack.Conf output: { path: _('./dist'), publicPath: args.mode === 'production' ? 'livechat/' : '/', - filename: '[name].rocketchat-livechat.min.js', + filename: 'rocketchat-livechat.min.js', }, module: { rules: [ diff --git a/packages/log-format/package.json b/packages/log-format/package.json index dc21d5a87dfe..56cfd2d4e4ac 100644 --- a/packages/log-format/package.json +++ b/packages/log-format/package.json @@ -4,10 +4,10 @@ "private": true, "devDependencies": { "@types/chalk": "^2.2.0", - "@types/ejson": "^2.2.0", - "@types/jest": "~29.5.3", + "@types/ejson": "^2.2.1", + "@types/jest": "~29.5.7", "eslint": "~8.45.0", - "jest": "~29.6.1", + "jest": "~29.6.4", "ts-jest": "~29.0.5", "typescript": "~5.2.2" }, diff --git a/packages/logger/package.json b/packages/logger/package.json index 48968b3d5095..a1e83ea24f3b 100644 --- a/packages/logger/package.json +++ b/packages/logger/package.json @@ -3,9 +3,9 @@ "version": "0.0.1", "private": true, "devDependencies": { - "@types/jest": "~29.5.3", + "@types/jest": "~29.5.7", "eslint": "~8.45.0", - "jest": "~29.6.1", + "jest": "~29.6.4", "ts-jest": "~29.0.5", "typescript": "~5.2.2" }, diff --git a/packages/mock-providers/CHANGELOG.md b/packages/mock-providers/CHANGELOG.md index 915bcabc5395..8165d50cc90c 100644 --- a/packages/mock-providers/CHANGELOG.md +++ b/packages/mock-providers/CHANGELOG.md @@ -1,5 +1,12 @@ # @rocket.chat/mock-providers +## 0.0.3-rc.0 + +### Patch Changes + +- Updated dependencies [747ec6c70e] + - @rocket.chat/i18n@0.0.3-rc.0 + ## 0.0.2 ### Patch Changes diff --git a/packages/mock-providers/package.json b/packages/mock-providers/package.json index c2aeb2665350..4c173f5de311 100644 --- a/packages/mock-providers/package.json +++ b/packages/mock-providers/package.json @@ -1,19 +1,19 @@ { "name": "@rocket.chat/mock-providers", - "version": "0.0.2", + "version": "0.0.3-rc.0", "private": true, "dependencies": { "@rocket.chat/i18n": "workspace:~", - "i18next": "~23.4.5", - "react-i18next": "~13.2.1" + "i18next": "~23.4.9", + "react-i18next": "~13.2.2" }, "devDependencies": { "@rocket.chat/ui-contexts": "workspace:*", "@storybook/react": "~6.5.16", "@tanstack/react-query": "^4.16.1", - "@types/jest": "~29.5.3", + "@types/jest": "~29.5.7", "eslint": "~8.45.0", - "jest": "~29.6.1", + "jest": "~29.6.4", "react": "~17.0.2", "ts-jest": "~29.0.5", "typescript": "~5.2.2" diff --git a/packages/mock-providers/src/MockedAppRootBuilder.tsx b/packages/mock-providers/src/MockedAppRootBuilder.tsx index ae3eeea4cf1d..df2c69d99b91 100644 --- a/packages/mock-providers/src/MockedAppRootBuilder.tsx +++ b/packages/mock-providers/src/MockedAppRootBuilder.tsx @@ -436,7 +436,10 @@ export class MockedAppRootBuilder { handleServerInteraction: () => undefined, off: () => undefined, on: () => undefined, + openView: () => undefined, disposeView: () => undefined, + notifyBusy: () => undefined, + notifyIdle: () => undefined, }} > {/* diff --git a/packages/model-typings/CHANGELOG.md b/packages/model-typings/CHANGELOG.md index 75e796f286fe..12ed3645d773 100644 --- a/packages/model-typings/CHANGELOG.md +++ b/packages/model-typings/CHANGELOG.md @@ -1,5 +1,90 @@ # @rocket.chat/model-typings +## 0.2.0-rc.7 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.7 + +## 0.2.0-rc.6 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.6 + +## 0.2.0-rc.5 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.5 + +## 0.2.0-rc.4 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.4 + +## 0.2.0-rc.3 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.3 + +## 0.2.0-rc.2 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.2 + +## 0.2.0-rc.1 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.1 + +## 0.2.0-rc.0 + +### Minor Changes + +- ec1b2b9846: Create a deployment fingerprint to identify possible deployment changes caused by database cloning. A question to the admin will confirm if it's a regular deployment change or an intent of a new deployment and correct identification values as needed. + The fingerprint is composed by `${siteUrl}${dbConnectionString}` and hashed via `sha256` in `base64`. + An environment variable named `AUTO_ACCEPT_FINGERPRINT`, when set to `true`, can be used to auto-accept an expected fingerprint change as a regular deployment update. +- 5f81a0f3cb: Implemented the License library, it is used to handle the functionality like expiration date, modules, limits, etc. + Also added a version v3 of the license, which contains an extended list of features. + v2 is still supported, since we convert it to v3 on the fly. + +### Patch Changes + +- dea1fe9191: chore: Calculate & Store MAC stats + Added new info to the stats: `omnichannelContactsBySource`, `uniqueContactsOfLastMonth`, `uniqueContactsOfLastWeek`, `uniqueContactsOfYesterday` +- 223dce18a3: Do not allow auto-translation to be enabled in E2E rooms +- Updated dependencies [dea1fe9191] +- Updated dependencies [c0ef13a0bf] +- Updated dependencies [5b9d6883bf] +- Updated dependencies [92613680b7] +- Updated dependencies [ec1b2b9846] +- Updated dependencies [5f81a0f3cb] +- Updated dependencies [dea1fe9191] + - @rocket.chat/core-typings@6.5.0-rc.0 + +## 0.1.8 + +### Patch Changes + +- @rocket.chat/core-typings@6.4.8 + +## 0.1.7 + +### Patch Changes + +- @rocket.chat/core-typings@6.4.7 + +## 0.1.6 + +### Patch Changes + +- @rocket.chat/core-typings@6.4.6 + ## 0.1.5 ### Patch Changes diff --git a/packages/model-typings/package.json b/packages/model-typings/package.json index 99726a7ff71e..8d92ab5ae540 100644 --- a/packages/model-typings/package.json +++ b/packages/model-typings/package.json @@ -1,12 +1,12 @@ { "name": "@rocket.chat/model-typings", - "version": "0.1.5", + "version": "0.2.0-rc.7", "private": true, "devDependencies": { - "@types/jest": "~29.5.3", - "@types/node-rsa": "^1.1.1", + "@types/jest": "~29.5.7", + "@types/node-rsa": "^1.1.3", "eslint": "~8.45.0", - "jest": "~29.6.1", + "jest": "~29.6.4", "mongodb": "^4.17.1", "ts-jest": "~29.0.5", "typescript": "~5.2.2" diff --git a/packages/model-typings/src/models/ICloudAnnouncementsModel.ts b/packages/model-typings/src/models/ICloudAnnouncementsModel.ts index 672ff8c316a0..faa13bb3ff76 100644 --- a/packages/model-typings/src/models/ICloudAnnouncementsModel.ts +++ b/packages/model-typings/src/models/ICloudAnnouncementsModel.ts @@ -1,6 +1,8 @@ import type { Cloud } from '@rocket.chat/core-typings'; +import type { DeleteResult } from 'mongodb'; import type { IBaseModel } from './IBaseModel'; -// eslint-disable-next-line @typescript-eslint/no-empty-interface -export interface ICloudAnnouncementsModel extends IBaseModel {} +export interface ICloudAnnouncementsModel extends IBaseModel { + removeByViewId(viewId: string): Promise; +} diff --git a/packages/model-typings/src/models/ILivechatInquiryModel.ts b/packages/model-typings/src/models/ILivechatInquiryModel.ts index 4ab0203aa5b3..6cad9d91865e 100644 --- a/packages/model-typings/src/models/ILivechatInquiryModel.ts +++ b/packages/model-typings/src/models/ILivechatInquiryModel.ts @@ -19,6 +19,7 @@ export interface ILivechatInquiryModel extends IBaseModel; findNextAndLock(queueSortBy: OmnichannelSortingMechanismSettingType, department?: string): Promise; unlock(inquiryId: string): Promise; + unlockAndQueue(inquiryId: string): Promise; unlockAll(): Promise; getCurrentSortedQueueAsync(props: { inquiryId?: string; diff --git a/packages/models/CHANGELOG.md b/packages/models/CHANGELOG.md index c11508fcac75..b747514a9979 100644 --- a/packages/models/CHANGELOG.md +++ b/packages/models/CHANGELOG.md @@ -1,5 +1,75 @@ # @rocket.chat/models +## 0.0.21-rc.7 + +### Patch Changes + +- @rocket.chat/model-typings@0.2.0-rc.7 + +## 0.0.21-rc.6 + +### Patch Changes + +- @rocket.chat/model-typings@0.2.0-rc.6 + +## 0.0.21-rc.5 + +### Patch Changes + +- @rocket.chat/model-typings@0.2.0-rc.5 + +## 0.0.21-rc.4 + +### Patch Changes + +- @rocket.chat/model-typings@0.2.0-rc.4 + +## 0.0.21-rc.3 + +### Patch Changes + +- @rocket.chat/model-typings@0.2.0-rc.3 + +## 0.0.21-rc.2 + +### Patch Changes + +- @rocket.chat/model-typings@0.2.0-rc.2 + +## 0.0.21-rc.1 + +### Patch Changes + +- @rocket.chat/model-typings@0.2.0-rc.1 + +## 0.0.21-rc.0 + +### Patch Changes + +- Updated dependencies [dea1fe9191] +- Updated dependencies [223dce18a3] +- Updated dependencies [ec1b2b9846] +- Updated dependencies [5f81a0f3cb] + - @rocket.chat/model-typings@0.2.0-rc.0 + +## 0.0.23 + +### Patch Changes + +- @rocket.chat/model-typings@0.1.8 + +## 0.0.22 + +### Patch Changes + +- @rocket.chat/model-typings@0.1.7 + +## 0.0.21 + +### Patch Changes + +- @rocket.chat/model-typings@0.1.6 + ## 0.0.20 ### Patch Changes diff --git a/packages/models/package.json b/packages/models/package.json index 67778f6df5c6..4471297e7a9c 100644 --- a/packages/models/package.json +++ b/packages/models/package.json @@ -1,11 +1,11 @@ { "name": "@rocket.chat/models", - "version": "0.0.20", + "version": "0.0.24-rc.0", "private": true, "devDependencies": { - "@types/jest": "~29.5.3", + "@types/jest": "~29.5.7", "eslint": "~8.45.0", - "jest": "~29.6.1", + "jest": "~29.6.4", "ts-jest": "~29.0.5", "typescript": "~5.2.2" }, diff --git a/packages/node-poplib/package.json b/packages/node-poplib/package.json index dc91a3722016..ce80d3c1fec4 100644 --- a/packages/node-poplib/package.json +++ b/packages/node-poplib/package.json @@ -3,9 +3,9 @@ "version": "0.0.1", "private": true, "devDependencies": { - "@types/jest": "~29.5.3", + "@types/jest": "~29.5.7", "eslint": "~8.45.0", - "jest": "~29.6.1", + "jest": "~29.6.4", "ts-jest": "~29.0.5", "typescript": "~5.2.2" }, diff --git a/packages/password-policies/package.json b/packages/password-policies/package.json index 52fa766671db..23ee01767bc5 100644 --- a/packages/password-policies/package.json +++ b/packages/password-policies/package.json @@ -3,11 +3,11 @@ "version": "0.0.1", "private": true, "devDependencies": { - "@types/chai": "^4.3.5", - "@types/jest": "~29.5.3", - "chai": "^4.3.7", + "@types/chai": "^4.3.9", + "@types/jest": "~29.5.7", + "chai": "^4.3.10", "eslint": "~8.45.0", - "jest": "~29.6.1", + "jest": "~29.6.4", "ts-jest": "~29.0.5", "typescript": "~5.2.2" }, diff --git a/packages/random/package.json b/packages/random/package.json index 15ca3ee0b47a..931b3784aa45 100644 --- a/packages/random/package.json +++ b/packages/random/package.json @@ -14,14 +14,14 @@ "test": "jest" }, "devDependencies": { - "@babel/core": "~7.22.9", - "@babel/preset-env": "~7.22.9", + "@babel/core": "~7.22.20", + "@babel/preset-env": "~7.22.20", "@rocket.chat/eslint-config": "workspace:^", "@typescript-eslint/eslint-plugin": "~5.60.1", "@typescript-eslint/parser": "~5.60.1", "eslint": "~8.45.0", - "jest": "~29.6.1", - "jest-environment-jsdom": "~29.6.1", + "jest": "~29.6.4", + "jest-environment-jsdom": "~29.6.4", "ts-jest": "~29.0.5", "typescript": "~5.2.2" }, diff --git a/packages/release-action/package.json b/packages/release-action/package.json index 0a1e3ded8927..ce574dddc8b0 100644 --- a/packages/release-action/package.json +++ b/packages/release-action/package.json @@ -10,11 +10,11 @@ "main": "dist/index.js", "packageManager": "yarn@3.5.1", "devDependencies": { - "@types/node": "^16.18.36", + "@types/node": "^16.18.60", "typescript": "~5.2.2" }, "dependencies": { - "@actions/core": "^1.10.0", + "@actions/core": "^1.10.1", "@actions/exec": "^1.1.1", "@actions/github": "^5.1.1", "@octokit/plugin-throttling": "^6.0.0", diff --git a/packages/rest-typings/CHANGELOG.md b/packages/rest-typings/CHANGELOG.md index 69412e4e1878..9bca22a51398 100644 --- a/packages/rest-typings/CHANGELOG.md +++ b/packages/rest-typings/CHANGELOG.md @@ -1,5 +1,100 @@ # @rocket.chat/rest-typings +## 6.5.0-rc.7 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.7 +- @rocket.chat/license@0.1.0-rc.7 + +## 6.5.0-rc.6 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.6 +- @rocket.chat/license@0.1.0-rc.6 + +## 6.5.0-rc.5 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.5 +- @rocket.chat/license@0.1.0-rc.5 + +## 6.5.0-rc.4 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.4 +- @rocket.chat/license@0.1.0-rc.4 + +## 6.5.0-rc.3 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.3 +- @rocket.chat/license@0.1.0-rc.3 + +## 6.5.0-rc.2 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.2 +- @rocket.chat/license@0.1.0-rc.2 + +## 6.5.0-rc.1 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.1 +- @rocket.chat/license@0.1.0-rc.1 + +## 6.5.0-rc.0 + +### Minor Changes + +- 92613680b7: Added option to select between two script engine options for the integrations +- ec1b2b9846: Create a deployment fingerprint to identify possible deployment changes caused by database cloning. A question to the admin will confirm if it's a regular deployment change or an intent of a new deployment and correct identification values as needed. + The fingerprint is composed by `${siteUrl}${dbConnectionString}` and hashed via `sha256` in `base64`. + An environment variable named `AUTO_ACCEPT_FINGERPRINT`, when set to `true`, can be used to auto-accept an expected fingerprint change as a regular deployment update. +- a98f3ff303: feat: added `licenses.info` endpoint +- 5f81a0f3cb: Implemented the License library, it is used to handle the functionality like expiration date, modules, limits, etc. + Also added a version v3 of the license, which contains an extended list of features. + v2 is still supported, since we convert it to v3 on the fly. + +### Patch Changes + +- 5b9d6883bf: feat: Improve UI when MAC limits are reached + feat: Limit endpoints on MAC limit reached +- Updated dependencies [dea1fe9191] +- Updated dependencies [c0ef13a0bf] +- Updated dependencies [5b9d6883bf] +- Updated dependencies [92613680b7] +- Updated dependencies [ec1b2b9846] +- Updated dependencies [a98f3ff303] +- Updated dependencies [5f81a0f3cb] +- Updated dependencies [dea1fe9191] + - @rocket.chat/core-typings@6.5.0-rc.0 + - @rocket.chat/license@0.1.0-rc.0 + +## 6.4.8 + +### Patch Changes + +- @rocket.chat/core-typings@6.4.8 + +## 6.4.7 + +### Patch Changes + +- @rocket.chat/core-typings@6.4.7 + +## 6.4.6 + +### Patch Changes + +- @rocket.chat/core-typings@6.4.6 + ## 6.4.5 ### Patch Changes diff --git a/packages/rest-typings/package.json b/packages/rest-typings/package.json index 1b83cd5a8d49..e01bf0e1dd4f 100644 --- a/packages/rest-typings/package.json +++ b/packages/rest-typings/package.json @@ -1,12 +1,12 @@ { "name": "@rocket.chat/rest-typings", - "version": "6.4.5", + "version": "6.6.0-develop", "devDependencies": { "@rocket.chat/eslint-config": "workspace:^", - "@types/jest": "~29.5.3", + "@types/jest": "~29.5.7", "eslint": "~8.45.0", - "jest": "~29.6.1", - "jest-environment-jsdom": "~29.6.1", + "jest": "~29.6.4", + "jest-environment-jsdom": "~29.6.4", "mongodb": "^4.17.1", "ts-jest": "~29.0.5", "typescript": "~5.2.2" diff --git a/packages/rest-typings/src/apps/index.ts b/packages/rest-typings/src/apps/index.ts index 31427afb3fee..bf1514aceeab 100644 --- a/packages/rest-typings/src/apps/index.ts +++ b/packages/rest-typings/src/apps/index.ts @@ -53,14 +53,7 @@ export type AppsEndpoints = { GET: () => { apps: { id: string; - languages: { - [key: string]: { - Params: string; - Description: string; - Setting_Name: string; - Setting_Description: string; - }; - }; + languages: { [language: string]: { [key: string]: string } }; }[]; }; }; diff --git a/packages/rest-typings/src/v1/cloud.ts b/packages/rest-typings/src/v1/cloud.ts index f63d3e3d330d..1146488bb5ff 100644 --- a/packages/rest-typings/src/v1/cloud.ts +++ b/packages/rest-typings/src/v1/cloud.ts @@ -1,4 +1,4 @@ -import type { CloudRegistrationIntentData, CloudConfirmationPollData, CloudRegistrationStatus } from '@rocket.chat/core-typings'; +import type { CloudRegistrationIntentData, CloudConfirmationPollData, CloudRegistrationStatus, Cloud } from '@rocket.chat/core-typings'; import Ajv from 'ajv'; const ajv = new Ajv({ @@ -91,4 +91,7 @@ export type CloudEndpoints = { '/v1/cloud.syncWorkspace': { POST: () => { success: boolean }; }; + '/v1/cloud.announcements': { + GET: () => { announcements: Cloud.Announcement[] }; + }; }; diff --git a/packages/rest-typings/src/v1/omnichannel.ts b/packages/rest-typings/src/v1/omnichannel.ts index 1d2f7a7469b9..494bbde6f4a3 100644 --- a/packages/rest-typings/src/v1/omnichannel.ts +++ b/packages/rest-typings/src/v1/omnichannel.ts @@ -3359,7 +3359,7 @@ export type OmnichannelEndpoints = { }>; }; '/v1/livechat/custom-fields/:_id': { - GET: () => { customField: ILivechatCustomField | null }; + GET: () => { customField: ILivechatCustomField }; }; '/v1/livechat/:rid/messages': { GET: (params: LivechatRidMessagesProps) => PaginatedResult<{ diff --git a/packages/server-cloud-communication/package.json b/packages/server-cloud-communication/package.json index 52a3ff801dac..b18de7084958 100644 --- a/packages/server-cloud-communication/package.json +++ b/packages/server-cloud-communication/package.json @@ -4,9 +4,9 @@ "private": true, "devDependencies": { "@rocket.chat/license": "workspace:^", - "@types/jest": "~29.5.3", + "@types/jest": "~29.5.7", "eslint": "~8.45.0", - "jest": "~29.6.1", + "jest": "~29.6.4", "ts-jest": "~29.0.5", "typescript": "~5.1.6" }, diff --git a/packages/server-fetch/CHANGELOG.md b/packages/server-fetch/CHANGELOG.md new file mode 100644 index 000000000000..8f3300bcf11e --- /dev/null +++ b/packages/server-fetch/CHANGELOG.md @@ -0,0 +1,7 @@ +# @rocket.chat/server-fetch + +## 0.0.2-rc.0 + +### Patch Changes + +- 35363420f0: Fixed an issue where the payload of an HTTP request made by an app wouldn't be correctly encoded in some cases diff --git a/packages/server-fetch/package.json b/packages/server-fetch/package.json index 8509aa70d558..8ef2e1b9a7ad 100644 --- a/packages/server-fetch/package.json +++ b/packages/server-fetch/package.json @@ -1,11 +1,11 @@ { "name": "@rocket.chat/server-fetch", - "version": "0.0.1", + "version": "0.0.2-rc.0", "private": true, "devDependencies": { - "@types/jest": "~29.5.3", + "@types/jest": "~29.5.7", "eslint": "~8.45.0", - "jest": "~29.6.1", + "jest": "~29.6.4", "ts-jest": "~29.0.5", "typescript": "~5.2.2" }, @@ -25,7 +25,7 @@ "extends": "../../package.json" }, "dependencies": { - "@types/proxy-from-env": "^1.0.1", + "@types/proxy-from-env": "^1.0.3", "http-proxy-agent": "^5.0.0", "https-proxy-agent": "^5.0.1", "node-fetch": "2.3.0", diff --git a/packages/sha256/package.json b/packages/sha256/package.json index b343cc5cae2d..12ebcc783afd 100644 --- a/packages/sha256/package.json +++ b/packages/sha256/package.json @@ -13,13 +13,13 @@ "test": "jest" }, "devDependencies": { - "@babel/core": "~7.22.9", - "@babel/preset-env": "~7.22.9", + "@babel/core": "~7.22.20", + "@babel/preset-env": "~7.22.20", "@rocket.chat/eslint-config": "workspace:^", "@typescript-eslint/eslint-plugin": "~5.60.1", "@typescript-eslint/parser": "~5.60.1", "eslint": "~8.45.0", - "jest": "~29.6.1", + "jest": "~29.6.4", "ts-jest": "~29.0.5", "typescript": "~5.2.2" }, diff --git a/packages/tools/CHANGELOG.md b/packages/tools/CHANGELOG.md index b5d9e6f419d4..f72e09c4d313 100644 --- a/packages/tools/CHANGELOG.md +++ b/packages/tools/CHANGELOG.md @@ -1,5 +1,11 @@ # @rocket.chat/tools +## 0.2.0-rc.0 + +### Minor Changes + +- 92613680b7: Added option to select between two script engine options for the integrations + ## 0.1.0 ### Minor Changes diff --git a/packages/tools/package.json b/packages/tools/package.json index ed5e7bdd44bf..72f25887198a 100644 --- a/packages/tools/package.json +++ b/packages/tools/package.json @@ -1,11 +1,11 @@ { "name": "@rocket.chat/tools", - "version": "0.1.0", + "version": "0.2.0-rc.0", "private": true, "devDependencies": { - "@types/jest": "~29.5.3", + "@types/jest": "~29.5.7", "eslint": "~8.45.0", - "jest": "~29.6.1", + "jest": "~29.6.4", "ts-jest": "~29.0.5", "typescript": "~5.2.2" }, diff --git a/packages/tools/src/index.ts b/packages/tools/src/index.ts index b8bc90d9cb54..6ec3e38d358a 100644 --- a/packages/tools/src/index.ts +++ b/packages/tools/src/index.ts @@ -1,4 +1,5 @@ +export * from './normalizeLanguage'; export * from './pick'; -export * from './timezone'; export * from './stream'; +export * from './timezone'; export * from './wrapExceptions'; diff --git a/apps/meteor/client/lib/utils/filterLanguage.ts b/packages/tools/src/normalizeLanguage.ts similarity index 79% rename from apps/meteor/client/lib/utils/filterLanguage.ts rename to packages/tools/src/normalizeLanguage.ts index 0f6bc9b67d9a..9231d5c20da5 100644 --- a/apps/meteor/client/lib/utils/filterLanguage.ts +++ b/packages/tools/src/normalizeLanguage.ts @@ -1,4 +1,4 @@ -export const filterLanguage = (language: string): string => { +export const normalizeLanguage = (language: string): string => { // Fix browsers having all-lowercase language settings eg. pt-br, en-us const regex = /([a-z]{2,3})-([a-z]{2,4})/; const matches = regex.exec(language); diff --git a/packages/ui-client/CHANGELOG.md b/packages/ui-client/CHANGELOG.md index 876b0251fb5a..713b0a7ee5ee 100644 --- a/packages/ui-client/CHANGELOG.md +++ b/packages/ui-client/CHANGELOG.md @@ -1,5 +1,72 @@ # @rocket.chat/ui-client +## 3.0.0-rc.7 + +### Patch Changes + +- @rocket.chat/ui-contexts@3.0.0-rc.7 + +## 3.0.0-rc.6 + +### Patch Changes + +- @rocket.chat/ui-contexts@3.0.0-rc.6 + +## 3.0.0-rc.5 + +### Patch Changes + +- @rocket.chat/ui-contexts@3.0.0-rc.5 + +## 3.0.0-rc.4 + +### Patch Changes + +- @rocket.chat/ui-contexts@3.0.0-rc.4 + +## 3.0.0-rc.3 + +### Patch Changes + +- @rocket.chat/ui-contexts@3.0.0-rc.3 + +## 3.0.0-rc.2 + +### Patch Changes + +- @rocket.chat/ui-contexts@3.0.0-rc.2 + +## 3.0.0-rc.1 + +### Patch Changes + +- @rocket.chat/ui-contexts@3.0.0-rc.1 + +## 3.0.0-rc.0 + +### Patch Changes + +- Updated dependencies [7da1edf866] + - @rocket.chat/ui-contexts@3.0.0-rc.0 + +## 2.0.8 + +### Patch Changes + +- @rocket.chat/ui-contexts@2.0.8 + +## 2.0.7 + +### Patch Changes + +- @rocket.chat/ui-contexts@2.0.7 + +## 2.0.6 + +### Patch Changes + +- @rocket.chat/ui-contexts@2.0.6 + ## 2.0.5 ### Patch Changes diff --git a/packages/ui-client/package.json b/packages/ui-client/package.json index 4d55df1fbd56..3b7e7c246c25 100644 --- a/packages/ui-client/package.json +++ b/packages/ui-client/package.json @@ -1,9 +1,9 @@ { "name": "@rocket.chat/ui-client", - "version": "2.0.5", + "version": "3.0.0-rc.7", "private": true, "devDependencies": { - "@babel/core": "~7.22.9", + "@babel/core": "~7.22.20", "@rocket.chat/css-in-js": "next", "@rocket.chat/fuselage": "^0.37.1", "@rocket.chat/fuselage-hooks": "^0.32.1", @@ -20,21 +20,21 @@ "@storybook/manager-webpack4": "~6.5.16", "@storybook/react": "~6.5.16", "@storybook/testing-library": "~0.0.13", - "@swc/jest": "^0.2.26", + "@swc/jest": "^0.2.29", "@testing-library/jest-dom": "~5.16.5", - "@testing-library/react": "^12.1.2", + "@testing-library/react": "^12.1.5", "@testing-library/react-hooks": "^8.0.1", - "@types/babel__core": "~7.20.1", - "@types/jest": "~29.5.3", - "@types/react": "~17.0.62", - "@types/react-dom": "~17.0.20", + "@types/babel__core": "~7.20.3", + "@types/jest": "~29.5.7", + "@types/react": "~17.0.69", + "@types/react-dom": "~17.0.22", "eslint": "~8.45.0", "eslint-plugin-anti-trojan-source": "~1.1.1", "eslint-plugin-react": "~7.32.2", "eslint-plugin-react-hooks": "~4.6.0", - "eslint-plugin-storybook": "~0.6.12", - "eslint-plugin-testing-library": "~5.11.0", - "jest": "~29.6.1", + "eslint-plugin-storybook": "~0.6.15", + "eslint-plugin-testing-library": "~5.11.1", + "jest": "~29.6.4", "react": "^17.0.2", "react-dom": "^17.0.2", "react-hook-form": "~7.45.4", @@ -61,7 +61,7 @@ "@rocket.chat/fuselage": "*", "@rocket.chat/fuselage-hooks": "*", "@rocket.chat/icons": "*", - "@rocket.chat/ui-contexts": "2.0.5", + "@rocket.chat/ui-contexts": "3.0.0-rc.7", "react": "~17.0.2" }, "volta": { diff --git a/packages/ui-client/src/components/Card/CardBody.tsx b/packages/ui-client/src/components/Card/CardBody.tsx index d1b108abdd52..70a9e127c27d 100644 --- a/packages/ui-client/src/components/Card/CardBody.tsx +++ b/packages/ui-client/src/components/Card/CardBody.tsx @@ -3,11 +3,12 @@ import type { FC, CSSProperties, ComponentProps } from 'react'; type CardBodyProps = { flexDirection?: CSSProperties['flexDirection']; + minHeight?: ComponentProps['minHeight']; height?: ComponentProps['height']; }; -const CardBody: FC = ({ children, flexDirection = 'row', height }) => ( - +const CardBody: FC = ({ children, flexDirection = 'row', ...props }) => ( + {children} ); diff --git a/packages/ui-composer/package.json b/packages/ui-composer/package.json index 09e1270a3005..4551d06659cc 100644 --- a/packages/ui-composer/package.json +++ b/packages/ui-composer/package.json @@ -3,7 +3,7 @@ "version": "0.0.1", "private": true, "devDependencies": { - "@babel/core": "~7.22.9", + "@babel/core": "~7.22.20", "@rocket.chat/eslint-config": "workspace:^", "@rocket.chat/fuselage": "^0.37.1", "@rocket.chat/icons": "^0.32.0", @@ -14,13 +14,13 @@ "@storybook/manager-webpack4": "~6.5.16", "@storybook/react": "~6.5.16", "@storybook/testing-library": "~0.0.13", - "@types/babel__core": "~7.20.1", - "@types/jest": "~29.5.3", + "@types/babel__core": "~7.20.3", + "@types/jest": "~29.5.7", "eslint": "~8.45.0", "eslint-plugin-react": "~7.32.2", "eslint-plugin-react-hooks": "~4.6.0", - "eslint-plugin-storybook": "~0.6.12", - "jest": "~29.6.1", + "eslint-plugin-storybook": "~0.6.15", + "jest": "~29.6.4", "react-docgen-typescript-plugin": "~1.0.5", "ts-jest": "~29.0.5", "typescript": "~5.2.2" diff --git a/packages/ui-contexts/CHANGELOG.md b/packages/ui-contexts/CHANGELOG.md index a6e875ed5c7d..f570d5e5c159 100644 --- a/packages/ui-contexts/CHANGELOG.md +++ b/packages/ui-contexts/CHANGELOG.md @@ -1,5 +1,102 @@ # @rocket.chat/ui-contexts +## 3.0.0-rc.7 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.7 +- @rocket.chat/rest-typings@6.5.0-rc.7 +- @rocket.chat/ddp-client@0.2.6-rc.7 + +## 3.0.0-rc.6 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.6 +- @rocket.chat/rest-typings@6.5.0-rc.6 +- @rocket.chat/ddp-client@0.2.6-rc.6 + +## 3.0.0-rc.5 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.5 +- @rocket.chat/rest-typings@6.5.0-rc.5 +- @rocket.chat/ddp-client@0.2.6-rc.5 + +## 3.0.0-rc.4 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.4 +- @rocket.chat/rest-typings@6.5.0-rc.4 +- @rocket.chat/ddp-client@0.2.6-rc.4 + +## 3.0.0-rc.3 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.3 +- @rocket.chat/rest-typings@6.5.0-rc.3 +- @rocket.chat/ddp-client@0.2.6-rc.3 + +## 3.0.0-rc.2 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.2 +- @rocket.chat/rest-typings@6.5.0-rc.2 +- @rocket.chat/ddp-client@0.2.6-rc.2 + +## 3.0.0-rc.1 + +### Patch Changes + +- @rocket.chat/core-typings@6.5.0-rc.1 +- @rocket.chat/rest-typings@6.5.0-rc.1 +- @rocket.chat/ddp-client@0.2.6-rc.1 + +## 3.0.0-rc.0 + +### Patch Changes + +- 7da1edf866: Fixed an issue in the invite registration flow in which the user would not be automatically redirected to the homepage upon succesfully submiting the user registration form. +- Updated dependencies [dea1fe9191] +- Updated dependencies [c0ef13a0bf] +- Updated dependencies [5b9d6883bf] +- Updated dependencies [92613680b7] +- Updated dependencies [ec1b2b9846] +- Updated dependencies [a98f3ff303] +- Updated dependencies [5f81a0f3cb] +- Updated dependencies [dea1fe9191] + - @rocket.chat/core-typings@6.5.0-rc.0 + - @rocket.chat/rest-typings@6.5.0-rc.0 + - @rocket.chat/ddp-client@0.2.6-rc.0 + +## 2.0.8 + +### Patch Changes + +- @rocket.chat/core-typings@6.4.8 +- @rocket.chat/rest-typings@6.4.8 +- @rocket.chat/ddp-client@0.2.8 + +## 2.0.7 + +### Patch Changes + +- @rocket.chat/core-typings@6.4.7 +- @rocket.chat/rest-typings@6.4.7 +- @rocket.chat/ddp-client@0.2.7 + +## 2.0.6 + +### Patch Changes + +- @rocket.chat/core-typings@6.4.6 +- @rocket.chat/rest-typings@6.4.6 +- @rocket.chat/ddp-client@0.2.6 + ## 2.0.5 ### Patch Changes diff --git a/packages/ui-contexts/package.json b/packages/ui-contexts/package.json index d5291f22a887..b75a5449907a 100644 --- a/packages/ui-contexts/package.json +++ b/packages/ui-contexts/package.json @@ -1,19 +1,19 @@ { "name": "@rocket.chat/ui-contexts", - "version": "2.0.5", + "version": "3.0.0-rc.7", "private": true, "devDependencies": { "@rocket.chat/core-typings": "workspace:^", "@rocket.chat/emitter": "next", "@rocket.chat/fuselage-hooks": "^0.32.1", "@rocket.chat/rest-typings": "workspace:^", - "@types/jest": "~29.5.3", - "@types/react": "~17.0.62", - "@types/react-dom": "~17.0.20", - "@types/use-sync-external-store": "^0.0.3", + "@types/jest": "~29.5.7", + "@types/react": "~17.0.69", + "@types/react-dom": "~17.0.22", + "@types/use-sync-external-store": "^0.0.5", "eslint": "~8.45.0", "eslint-plugin-react-hooks": "^4.6.0", - "jest": "~29.6.1", + "jest": "~29.6.4", "mongodb": "^4.17.1", "react": "~17.0.2", "ts-jest": "~29.0.5", diff --git a/packages/ui-contexts/src/ActionManagerContext.ts b/packages/ui-contexts/src/ActionManagerContext.ts index 76ca45cb6080..538e0332454b 100644 --- a/packages/ui-contexts/src/ActionManagerContext.ts +++ b/packages/ui-contexts/src/ActionManagerContext.ts @@ -1,11 +1,16 @@ import type { DistributiveOmit, UiKit } from '@rocket.chat/core-typings'; import { createContext } from 'react'; -type ActionManager = { +/** + * An action manager is responsible for handling interactions with the UiKit. + */ +export interface IActionManager { on(viewId: string, listener: (data: any) => void): void; on(eventName: 'busy', listener: ({ busy }: { busy: boolean }) => void): void; off(viewId: string, listener: (data: any) => any): void; off(eventName: 'busy', listener: ({ busy }: { busy: boolean }) => void): void; + notifyBusy(): void; + notifyIdle(): void; generateTriggerId(appId: string | undefined): string; emitInteraction(appId: string, userInteraction: DistributiveOmit): Promise; handleServerInteraction(interaction: UiKit.ServerInteraction): UiKit.ServerInteraction['type'] | undefined; @@ -14,7 +19,10 @@ type ActionManager = { view: UiKit.ContextualBarView; } | undefined; + openView(surface: 'modal', view: UiKit.ModalView): void; + openView(surface: 'banner', view: UiKit.BannerView): void; + openView(surface: 'contextual_bar', view: UiKit.ContextualBarView): void; disposeView(viewId: UiKit.ModalView['id'] | UiKit.BannerView['viewId'] | UiKit.ContextualBarView['id']): void; -}; +} -export const ActionManagerContext = createContext(undefined); +export const ActionManagerContext = createContext(undefined); diff --git a/packages/ui-contexts/src/TranslationContext.ts b/packages/ui-contexts/src/TranslationContext.ts index d0f9bb6318c3..b73428932d8f 100644 --- a/packages/ui-contexts/src/TranslationContext.ts +++ b/packages/ui-contexts/src/TranslationContext.ts @@ -11,7 +11,7 @@ export type TranslationLanguage = { key: string; }; -export type TranslationKey = keyof typeof keys; +export type TranslationKey = keyof typeof keys | `app-${string}.${string}`; export type TranslationContextValue = { languages: TranslationLanguage[]; diff --git a/packages/ui-contexts/src/index.ts b/packages/ui-contexts/src/index.ts index d404dc921579..4e35d9e02af8 100644 --- a/packages/ui-contexts/src/index.ts +++ b/packages/ui-contexts/src/index.ts @@ -14,7 +14,7 @@ export { TooltipContext, TooltipContextValue } from './TooltipContext'; export { TranslationContext, TranslationContextValue } from './TranslationContext'; export { UserContext, UserContextValue, LoginService } from './UserContext'; export { DeviceContext, Device, IExperimentalHTMLAudioElement, DeviceContextValue } from './DeviceContext'; -export { ActionManagerContext } from './ActionManagerContext'; +export { ActionManagerContext, IActionManager } from './ActionManagerContext'; export { useAbsoluteUrl } from './hooks/useAbsoluteUrl'; export { useAllPermissions } from './hooks/useAllPermissions'; diff --git a/packages/ui-video-conf/CHANGELOG.md b/packages/ui-video-conf/CHANGELOG.md index 059c853ab2d7..400346f3835f 100644 --- a/packages/ui-video-conf/CHANGELOG.md +++ b/packages/ui-video-conf/CHANGELOG.md @@ -1,5 +1,72 @@ # @rocket.chat/ui-video-conf +## 3.0.0-rc.7 + +### Patch Changes + +- @rocket.chat/ui-contexts@3.0.0-rc.7 + +## 3.0.0-rc.6 + +### Patch Changes + +- @rocket.chat/ui-contexts@3.0.0-rc.6 + +## 3.0.0-rc.5 + +### Patch Changes + +- @rocket.chat/ui-contexts@3.0.0-rc.5 + +## 3.0.0-rc.4 + +### Patch Changes + +- @rocket.chat/ui-contexts@3.0.0-rc.4 + +## 3.0.0-rc.3 + +### Patch Changes + +- @rocket.chat/ui-contexts@3.0.0-rc.3 + +## 3.0.0-rc.2 + +### Patch Changes + +- @rocket.chat/ui-contexts@3.0.0-rc.2 + +## 3.0.0-rc.1 + +### Patch Changes + +- @rocket.chat/ui-contexts@3.0.0-rc.1 + +## 3.0.0-rc.0 + +### Patch Changes + +- Updated dependencies [7da1edf866] + - @rocket.chat/ui-contexts@3.0.0-rc.0 + +## 2.0.8 + +### Patch Changes + +- @rocket.chat/ui-contexts@2.0.8 + +## 2.0.7 + +### Patch Changes + +- @rocket.chat/ui-contexts@2.0.7 + +## 2.0.6 + +### Patch Changes + +- @rocket.chat/ui-contexts@2.0.6 + ## 2.0.5 ### Patch Changes diff --git a/packages/ui-video-conf/package.json b/packages/ui-video-conf/package.json index 43fc28ba25c5..16293f9424d6 100644 --- a/packages/ui-video-conf/package.json +++ b/packages/ui-video-conf/package.json @@ -1,9 +1,9 @@ { "name": "@rocket.chat/ui-video-conf", - "version": "2.0.5", + "version": "3.0.0-rc.7", "private": true, "devDependencies": { - "@babel/core": "~7.22.9", + "@babel/core": "~7.22.20", "@rocket.chat/css-in-js": "next", "@rocket.chat/eslint-config": "workspace:^", "@rocket.chat/fuselage": "^0.37.1", @@ -18,13 +18,13 @@ "@storybook/manager-webpack4": "~6.5.16", "@storybook/react": "~6.5.16", "@storybook/testing-library": "~0.0.13", - "@types/babel__core": "~7.20.1", - "@types/jest": "~29.5.3", + "@types/babel__core": "~7.20.3", + "@types/jest": "~29.5.7", "eslint": "~8.45.0", "eslint-plugin-react": "~7.32.2", "eslint-plugin-react-hooks": "~4.6.0", - "eslint-plugin-storybook": "~0.6.12", - "jest": "~29.6.1", + "eslint-plugin-storybook": "~0.6.15", + "jest": "~29.6.4", "react-docgen-typescript-plugin": "~1.0.5", "ts-jest": "~29.0.5", "typescript": "~5.2.2" @@ -35,7 +35,7 @@ "@rocket.chat/fuselage-hooks": "*", "@rocket.chat/icons": "*", "@rocket.chat/styled": "*", - "@rocket.chat/ui-contexts": "2.0.5", + "@rocket.chat/ui-contexts": "3.0.0-rc.7", "react": "^17.0.2", "react-dom": "^17.0.2" }, diff --git a/packages/uikit-playground/CHANGELOG.md b/packages/uikit-playground/CHANGELOG.md index 940765eeee7f..fc591fd32c99 100644 --- a/packages/uikit-playground/CHANGELOG.md +++ b/packages/uikit-playground/CHANGELOG.md @@ -1,5 +1,83 @@ # @rocket.chat/uikit-playground +## 0.2.6-rc.7 + +### Patch Changes + +- @rocket.chat/ui-contexts@3.0.0-rc.7 +- @rocket.chat/fuselage-ui-kit@3.0.0-rc.7 + +## 0.2.6-rc.6 + +### Patch Changes + +- @rocket.chat/ui-contexts@3.0.0-rc.6 +- @rocket.chat/fuselage-ui-kit@3.0.0-rc.6 + +## 0.2.6-rc.5 + +### Patch Changes + +- @rocket.chat/ui-contexts@3.0.0-rc.5 +- @rocket.chat/fuselage-ui-kit@3.0.0-rc.5 + +## 0.2.6-rc.4 + +### Patch Changes + +- @rocket.chat/ui-contexts@3.0.0-rc.4 +- @rocket.chat/fuselage-ui-kit@3.0.0-rc.4 + +## 0.2.6-rc.3 + +### Patch Changes + +- @rocket.chat/ui-contexts@3.0.0-rc.3 +- @rocket.chat/fuselage-ui-kit@3.0.0-rc.3 + +## 0.2.6-rc.2 + +### Patch Changes + +- @rocket.chat/ui-contexts@3.0.0-rc.2 +- @rocket.chat/fuselage-ui-kit@3.0.0-rc.2 + +## 0.2.6-rc.1 + +### Patch Changes + +- @rocket.chat/ui-contexts@3.0.0-rc.1 +- @rocket.chat/fuselage-ui-kit@3.0.0-rc.1 + +## 0.2.6-rc.0 + +### Patch Changes + +- Updated dependencies [7da1edf866] + - @rocket.chat/ui-contexts@3.0.0-rc.0 + - @rocket.chat/fuselage-ui-kit@3.0.0-rc.0 + +## 0.2.8 + +### Patch Changes + +- @rocket.chat/ui-contexts@2.0.8 +- @rocket.chat/fuselage-ui-kit@2.0.8 + +## 0.2.7 + +### Patch Changes + +- @rocket.chat/ui-contexts@2.0.7 +- @rocket.chat/fuselage-ui-kit@2.0.7 + +## 0.2.6 + +### Patch Changes + +- @rocket.chat/ui-contexts@2.0.6 +- @rocket.chat/fuselage-ui-kit@2.0.6 + ## 0.2.5 ### Patch Changes diff --git a/packages/uikit-playground/package.json b/packages/uikit-playground/package.json index bf7f2b8094ab..a02abbb30c9a 100644 --- a/packages/uikit-playground/package.json +++ b/packages/uikit-playground/package.json @@ -1,7 +1,7 @@ { "name": "@rocket.chat/uikit-playground", "private": true, - "version": "0.2.5", + "version": "0.2.9-rc.0", "type": "module", "scripts": { "dev": "vite", @@ -36,16 +36,16 @@ "use-subscription": "^1.8.0" }, "devDependencies": { - "@types/react": "~17.0.62", - "@types/react-beautiful-dnd": "^13.1.4", - "@types/react-dom": "~17.0.20", - "@types/use-subscription": "^1.0.0", + "@types/react": "~17.0.69", + "@types/react-beautiful-dnd": "^13.1.6", + "@types/react-dom": "~17.0.22", + "@types/use-subscription": "^1.0.1", "@typescript-eslint/eslint-plugin": "~5.60.1", "@typescript-eslint/parser": "~5.60.1", "@vitejs/plugin-react": "^4.0.0", "eslint": "~8.45.0", "eslint-plugin-react-hooks": "^4.6.0", - "eslint-plugin-react-refresh": "^0.4.1", + "eslint-plugin-react-refresh": "^0.4.4", "typescript": "~5.2.2", "vite": "^4.3.9" }, diff --git a/packages/web-ui-registration/CHANGELOG.md b/packages/web-ui-registration/CHANGELOG.md index 8ac0b8f51f87..f1cbded5ded9 100644 --- a/packages/web-ui-registration/CHANGELOG.md +++ b/packages/web-ui-registration/CHANGELOG.md @@ -1,5 +1,67 @@ # @rocket.chat/web-ui-registration +## 3.0.0-rc.6 + +### Patch Changes + +- @rocket.chat/ui-contexts@3.0.0-rc.7 + +## 3.0.0-rc.5 + +### Patch Changes + +- @rocket.chat/ui-contexts@3.0.0-rc.6 + +## 3.0.0-rc.4 + +### Patch Changes + +- @rocket.chat/ui-contexts@3.0.0-rc.5 + +## 3.0.0-rc.3 + +### Patch Changes + +- @rocket.chat/ui-contexts@3.0.0-rc.4 + +## 3.0.0-rc.2 + +### Patch Changes + +- @rocket.chat/ui-contexts@3.0.0-rc.2 + +## 3.0.0-rc.1 + +### Patch Changes + +- @rocket.chat/ui-contexts@3.0.0-rc.1 + +## 3.0.0-rc.0 + +### Patch Changes + +- 7da1edf866: Fixed an issue in the invite registration flow in which the user would not be automatically redirected to the homepage upon succesfully submiting the user registration form. +- Updated dependencies [7da1edf866] + - @rocket.chat/ui-contexts@3.0.0-rc.0 + +## 2.0.8 + +### Patch Changes + +- @rocket.chat/ui-contexts@2.0.8 + +## 2.0.7 + +### Patch Changes + +- @rocket.chat/ui-contexts@2.0.7 + +## 2.0.6 + +### Patch Changes + +- @rocket.chat/ui-contexts@2.0.6 + ## 2.0.5 ### Patch Changes diff --git a/packages/web-ui-registration/package.json b/packages/web-ui-registration/package.json index 392b7163ec98..ae313fe52f67 100644 --- a/packages/web-ui-registration/package.json +++ b/packages/web-ui-registration/package.json @@ -1,6 +1,6 @@ { "name": "@rocket.chat/web-ui-registration", - "version": "2.0.5", + "version": "3.0.0-rc.6", "private": true, "homepage": "https://rocket.chat", "main": "./dist/index.js", @@ -17,13 +17,14 @@ "dev": "tsc -p tsconfig.build.json --watch --preserveWatchOutput" }, "devDependencies": { - "@babel/core": "~7.22.10", - "@babel/preset-env": "~7.22.10", - "@babel/preset-react": "~7.22.5", - "@babel/preset-typescript": "~7.22.5", + "@babel/core": "~7.22.20", + "@babel/preset-env": "~7.22.20", + "@babel/preset-react": "~7.22.15", + "@babel/preset-typescript": "~7.22.15", "@rocket.chat/i18n": "workspace:~", "@rocket.chat/layout": "next", "@rocket.chat/mock-providers": "workspace:~", + "@rocket.chat/tools": "workspace:~", "@rocket.chat/ui-client": "workspace:^", "@rocket.chat/ui-contexts": "workspace:^", "@storybook/addon-actions": "~6.5.16", @@ -32,24 +33,25 @@ "@storybook/builder-webpack4": "~6.5.16", "@storybook/manager-webpack4": "~6.5.16", "@storybook/react": "~6.5.16", - "@storybook/testing-library": "^0.2.0", + "@storybook/testing-library": "^0.2.2", "@tanstack/react-query": "^4.16.1", "@testing-library/react": "^13.3.0", - "@types/jest": "~29.5.3", - "@types/react": "~17.0.62", + "@types/jest": "~29.5.7", + "@types/react": "~17.0.69", "babel-loader": "~8.3.0", "eslint": "~8.45.0", - "jest": "~29.6.1", + "jest": "~29.6.4", "react": "~17.0.2", "react-hook-form": "~7.45.4", - "react-i18next": "~13.2.1", + "react-i18next": "~13.2.2", "storybook-dark-mode": "~3.0.1", "ts-jest": "~29.0.5", "typescript": "~5.2.2" }, "peerDependencies": { "@rocket.chat/layout": "*", - "@rocket.chat/ui-contexts": "2.0.5", + "@rocket.chat/tools": "*", + "@rocket.chat/ui-contexts": "3.0.0-rc.7", "@tanstack/react-query": "*", "react": "*", "react-hook-form": "*", diff --git a/packages/web-ui-registration/src/RegisterSecretPageRouter.tsx b/packages/web-ui-registration/src/RegisterSecretPageRouter.tsx index a14f48e754ca..889d7e53e7b9 100644 --- a/packages/web-ui-registration/src/RegisterSecretPageRouter.tsx +++ b/packages/web-ui-registration/src/RegisterSecretPageRouter.tsx @@ -14,7 +14,7 @@ export const RegisterSecretPageRouter = ({ origin, }: { setLoginRoute: DispatchLoginRouter; - origin: 'register' | 'secret-register'; + origin: 'register' | 'secret-register' | 'invite-register'; }): ReactElement => { const registrationMode = useSetting('Accounts_RegistrationForm'); @@ -26,7 +26,7 @@ export const RegisterSecretPageRouter = ({ return ; } - if (isPublicRegistration) { + if (isPublicRegistration || (origin === 'invite-register' && isRegistrationAllowedForSecret)) { return ( diff --git a/packages/web-ui-registration/src/RegistrationPageRouter.tsx b/packages/web-ui-registration/src/RegistrationPageRouter.tsx index 3c92f528fa9c..a8d2064b5769 100644 --- a/packages/web-ui-registration/src/RegistrationPageRouter.tsx +++ b/packages/web-ui-registration/src/RegistrationPageRouter.tsx @@ -1,3 +1,4 @@ +import { useSession } from '@rocket.chat/ui-contexts'; import type { ReactElement, ReactNode } from 'react'; import GuestForm from './GuestForm'; @@ -15,7 +16,8 @@ export const RegistrationPageRouter = ({ defaultRoute?: LoginRoutes; children?: ReactNode; }): ReactElement | null => { - const [route, setLoginRoute] = useLoginRouter(defaultRoute); + const defaultRouteSession = useSession('loginDefaultState') as LoginRoutes | undefined; + const [route, setLoginRoute] = useLoginRouter(defaultRouteSession || defaultRoute); if (route === 'guest') { return ( @@ -41,7 +43,7 @@ export const RegistrationPageRouter = ({ ); } - if (route === 'secret-register' || route === 'register') { + if (route === 'secret-register' || route === 'register' || route === 'invite-register') { return ; } diff --git a/packages/web-ui-registration/src/components/LoginSwitchLanguageFooter.tsx b/packages/web-ui-registration/src/components/LoginSwitchLanguageFooter.tsx index 17b45e9157cb..0d08fba8a3ac 100644 --- a/packages/web-ui-registration/src/components/LoginSwitchLanguageFooter.tsx +++ b/packages/web-ui-registration/src/components/LoginSwitchLanguageFooter.tsx @@ -1,21 +1,11 @@ import { Button } from '@rocket.chat/fuselage'; import { useLocalStorage } from '@rocket.chat/fuselage-hooks'; import { HorizontalWizardLayoutCaption } from '@rocket.chat/layout'; +import { normalizeLanguage } from '@rocket.chat/tools'; import { type TranslationLanguage, useSetting, useLoadLanguage, useLanguage, useLanguages } from '@rocket.chat/ui-contexts'; import { type ReactElement, type UIEvent, useMemo, useEffect } from 'react'; import { Trans, useTranslation } from 'react-i18next'; -const normalizeLanguage = (language: string): string => { - // Fix browsers having all-lowercase language settings eg. pt-br, en-us - const regex = /([a-z]{2,3})-([a-z]{2,4})/; - const matches = regex.exec(language); - if (matches) { - return `${matches[1]}-${matches[2].toUpperCase()}`; - } - - return language; -}; - const useSuggestedLanguages = ({ browserLanguage = normalizeLanguage(window.navigator.language ?? 'en'), }: { diff --git a/packages/web-ui-registration/src/hooks/useLoginRouter.ts b/packages/web-ui-registration/src/hooks/useLoginRouter.ts index 6c907e39a1c5..5a5b1e98223e 100644 --- a/packages/web-ui-registration/src/hooks/useLoginRouter.ts +++ b/packages/web-ui-registration/src/hooks/useLoginRouter.ts @@ -1,7 +1,15 @@ import type { Dispatch } from 'react'; import { useState } from 'react'; -export type LoginRoutes = 'login' | 'reset-password' | 'register' | 'register-invalid' | 'secret-register' | 'guest' | 'anonymous'; +export type LoginRoutes = + | 'login' + | 'reset-password' + | 'register' + | 'register-invalid' + | 'secret-register' + | 'invite-register' + | 'guest' + | 'anonymous'; export const useLoginRouter = (route: LoginRoutes): [LoginRoutes, DispatchLoginRouter] => useState(route); diff --git a/yarn.lock b/yarn.lock index 4fb2046ddaf1..3de75904ea8c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12,13 +12,13 @@ __metadata: languageName: node linkType: hard -"@actions/core@npm:^1.10.0": - version: 1.10.0 - resolution: "@actions/core@npm:1.10.0" +"@actions/core@npm:^1.10.1": + version: 1.10.1 + resolution: "@actions/core@npm:1.10.1" dependencies: "@actions/http-client": ^2.0.1 uuid: ^8.3.2 - checksum: 0a75621e007ab20d887434cdd165f0b9036f14c22252a2faed33543d8b9d04ec95d823e69ca636a25245574e4585d73e1e9e47a845339553c664f9f2c9614669 + checksum: 96524c2725e70e3c3176b4e4d93a1358a86f3c5ca777db9a2f65eadfa672f00877db359bf60fffc416c33838ffb4743db93bcc5bf53e76199dd28bf7f7ff8e80 languageName: node linkType: hard @@ -975,17 +975,7 @@ __metadata: languageName: node linkType: hard -"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.10.4, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.22.10, @babel/code-frame@npm:^7.5.5, @babel/code-frame@npm:^7.8.3": - version: 7.22.10 - resolution: "@babel/code-frame@npm:7.22.10" - dependencies: - "@babel/highlight": ^7.22.10 - chalk: ^2.4.2 - checksum: 89a06534ad19759da6203a71bad120b1d7b2ddc016c8e07d4c56b35dea25e7396c6da60a754e8532a86733092b131ae7f661dbe6ba5d165ea777555daa2ed3c9 - languageName: node - linkType: hard - -"@babel/code-frame@npm:^7.22.13": +"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.10.4, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.22.13, @babel/code-frame@npm:^7.5.5, @babel/code-frame@npm:^7.8.3": version: 7.22.13 resolution: "@babel/code-frame@npm:7.22.13" dependencies: @@ -995,14 +985,7 @@ __metadata: languageName: node linkType: hard -"@babel/compat-data@npm:^7.20.5, @babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.22.9": - version: 7.22.9 - resolution: "@babel/compat-data@npm:7.22.9" - checksum: bed77d9044ce948b4327b30dd0de0779fa9f3a7ed1f2d31638714ed00229fa71fc4d1617ae0eb1fad419338d3658d0e9a5a083297451e09e73e078d0347ff808 - languageName: node - linkType: hard - -"@babel/compat-data@npm:^7.22.20": +"@babel/compat-data@npm:^7.20.5, @babel/compat-data@npm:^7.22.20, @babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.22.9": version: 7.22.20 resolution: "@babel/compat-data@npm:7.22.20" checksum: efedd1d18878c10fde95e4d82b1236a9aba41395ef798cbb651f58dbf5632dbff475736c507b8d13d4c8f44809d41c0eb2ef0d694283af9ba5dd8339b6dab451 @@ -1033,56 +1016,44 @@ __metadata: languageName: node linkType: hard -"@babel/core@npm:^7.1.0, @babel/core@npm:^7.11.6, @babel/core@npm:^7.12.10, @babel/core@npm:^7.12.3, @babel/core@npm:^7.20.7, @babel/core@npm:^7.21.4, @babel/core@npm:^7.7.5, @babel/core@npm:~7.22.10, @babel/core@npm:~7.22.9": - version: 7.22.10 - resolution: "@babel/core@npm:7.22.10" +"@babel/core@npm:^7.1.0, @babel/core@npm:^7.11.6, @babel/core@npm:^7.12.10, @babel/core@npm:^7.12.3, @babel/core@npm:^7.20.7, @babel/core@npm:^7.21.4, @babel/core@npm:^7.7.5, @babel/core@npm:~7.22.20": + version: 7.22.20 + resolution: "@babel/core@npm:7.22.20" dependencies: "@ampproject/remapping": ^2.2.0 - "@babel/code-frame": ^7.22.10 - "@babel/generator": ^7.22.10 - "@babel/helper-compilation-targets": ^7.22.10 - "@babel/helper-module-transforms": ^7.22.9 - "@babel/helpers": ^7.22.10 - "@babel/parser": ^7.22.10 - "@babel/template": ^7.22.5 - "@babel/traverse": ^7.22.10 - "@babel/types": ^7.22.10 + "@babel/code-frame": ^7.22.13 + "@babel/generator": ^7.22.15 + "@babel/helper-compilation-targets": ^7.22.15 + "@babel/helper-module-transforms": ^7.22.20 + "@babel/helpers": ^7.22.15 + "@babel/parser": ^7.22.16 + "@babel/template": ^7.22.15 + "@babel/traverse": ^7.22.20 + "@babel/types": ^7.22.19 convert-source-map: ^1.7.0 debug: ^4.1.0 gensync: ^1.0.0-beta.2 - json5: ^2.2.2 + json5: ^2.2.3 semver: ^6.3.1 - checksum: cc4efa09209fe1f733cf512e9e4bb50870b191ab2dee8014e34cd6e731f204e48476cc53b4bbd0825d4d342304d577ae43ff5fd8ab3896080673c343321acb32 + checksum: 73663a079194b5dc406b2e2e5e50db81977d443e4faf7ef2c27e5836cd9a359e81e551115193dc9b1a93471275351a972e54904f4d3aa6cb156f51e26abf6765 languageName: node linkType: hard -"@babel/eslint-parser@npm:~7.22.9": - version: 7.22.9 - resolution: "@babel/eslint-parser@npm:7.22.9" +"@babel/eslint-parser@npm:~7.22.15": + version: 7.22.15 + resolution: "@babel/eslint-parser@npm:7.22.15" dependencies: "@nicolo-ribaudo/eslint-scope-5-internals": 5.1.1-v1 eslint-visitor-keys: ^2.1.0 semver: ^6.3.1 peerDependencies: - "@babel/core": ">=7.11.0" + "@babel/core": ^7.11.0 eslint: ^7.5.0 || ^8.0.0 - checksum: 4f417796c803056aad2c8fa69b8a7a78a1fdacc307d95702f22894cab42b83554e47de7d0b3cfbee667f25014bca0179f859aa86ceb684b09803192e1200b48d - languageName: node - linkType: hard - -"@babel/generator@npm:^7.12.11, @babel/generator@npm:^7.12.5, @babel/generator@npm:^7.22.10, @babel/generator@npm:^7.7.2": - version: 7.22.10 - resolution: "@babel/generator@npm:7.22.10" - dependencies: - "@babel/types": ^7.22.10 - "@jridgewell/gen-mapping": ^0.3.2 - "@jridgewell/trace-mapping": ^0.3.17 - jsesc: ^2.5.1 - checksum: 59a79730abdff9070692834bd3af179e7a9413fa2ff7f83dff3eb888765aeaeb2bfc7b0238a49613ed56e1af05956eff303cc139f2407eda8df974813e486074 + checksum: efdc749164a40de1b68e3ed395f441dfb7864c85d0a2ee3e4bc4f06dd0b7f675acb9be97cdc9025b88b3e80d38749a2b30e392ce7f6a79313c3aaf82ba8ccd68 languageName: node linkType: hard -"@babel/generator@npm:^7.23.0": +"@babel/generator@npm:^7.12.11, @babel/generator@npm:^7.12.5, @babel/generator@npm:^7.22.15, @babel/generator@npm:^7.23.0, @babel/generator@npm:^7.7.2": version: 7.23.0 resolution: "@babel/generator@npm:7.23.0" dependencies: @@ -1112,20 +1083,7 @@ __metadata: languageName: node linkType: hard -"@babel/helper-compilation-targets@npm:^7.13.0, @babel/helper-compilation-targets@npm:^7.20.7, @babel/helper-compilation-targets@npm:^7.22.10, @babel/helper-compilation-targets@npm:^7.22.5, @babel/helper-compilation-targets@npm:^7.22.6": - version: 7.22.10 - resolution: "@babel/helper-compilation-targets@npm:7.22.10" - dependencies: - "@babel/compat-data": ^7.22.9 - "@babel/helper-validator-option": ^7.22.15 - browserslist: ^4.21.9 - lru-cache: ^5.1.1 - semver: ^6.3.1 - checksum: f6f1896816392bcff671bbe6e277307729aee53befb4a66ea126e2a91eda78d819a70d06fa384c74ef46c1595544b94dca50bef6c78438d9ffd31776dafbd435 - languageName: node - linkType: hard - -"@babel/helper-compilation-targets@npm:^7.22.15": +"@babel/helper-compilation-targets@npm:^7.13.0, @babel/helper-compilation-targets@npm:^7.20.7, @babel/helper-compilation-targets@npm:^7.22.15, @babel/helper-compilation-targets@npm:^7.22.5, @babel/helper-compilation-targets@npm:^7.22.6": version: 7.22.15 resolution: "@babel/helper-compilation-targets@npm:7.22.15" dependencies: @@ -1247,7 +1205,7 @@ __metadata: languageName: node linkType: hard -"@babel/helper-module-transforms@npm:^7.12.1, @babel/helper-module-transforms@npm:^7.22.5, @babel/helper-module-transforms@npm:^7.22.9, @babel/helper-module-transforms@npm:^7.23.0": +"@babel/helper-module-transforms@npm:^7.12.1, @babel/helper-module-transforms@npm:^7.22.20, @babel/helper-module-transforms@npm:^7.22.5, @babel/helper-module-transforms@npm:^7.23.0": version: 7.23.0 resolution: "@babel/helper-module-transforms@npm:7.23.0" dependencies: @@ -1352,14 +1310,7 @@ __metadata: languageName: node linkType: hard -"@babel/helper-validator-identifier@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/helper-validator-identifier@npm:7.22.5" - checksum: 7f0f30113474a28298c12161763b49de5018732290ca4de13cdaefd4fd0d635a6fe3f6686c37a02905fb1e64f21a5ee2b55140cf7b070e729f1bd66866506aea - languageName: node - linkType: hard - -"@babel/helper-validator-option@npm:^7.16.7, @babel/helper-validator-option@npm:^7.22.15, @babel/helper-validator-option@npm:^7.22.5": +"@babel/helper-validator-option@npm:^7.16.7, @babel/helper-validator-option@npm:^7.22.15": version: 7.22.15 resolution: "@babel/helper-validator-option@npm:7.22.15" checksum: 68da52b1e10002a543161494c4bc0f4d0398c8fdf361d5f7f4272e95c45d5b32d974896d44f6a0ea7378c9204988879d73613ca683e13bd1304e46d25ff67a8d @@ -1377,14 +1328,14 @@ __metadata: languageName: node linkType: hard -"@babel/helpers@npm:^7.12.5, @babel/helpers@npm:^7.22.10": - version: 7.23.1 - resolution: "@babel/helpers@npm:7.23.1" +"@babel/helpers@npm:^7.12.5, @babel/helpers@npm:^7.22.15": + version: 7.23.2 + resolution: "@babel/helpers@npm:7.23.2" dependencies: "@babel/template": ^7.22.15 - "@babel/traverse": ^7.23.0 + "@babel/traverse": ^7.23.2 "@babel/types": ^7.23.0 - checksum: acfc345102045c24ea2a4d60e00dcf8220e215af3add4520e2167700661338e6a80bd56baf44bb764af05ec6621101c9afc315dc107e18c61fa6da8acbdbb893 + checksum: aaf4828df75ec460eaa70e5c9f66e6dadc28dae3728ddb7f6c13187dbf38030e142194b83d81aa8a31bbc35a5529a5d7d3f3cf59d5d0b595f5dd7f9d8f1ced8e languageName: node linkType: hard @@ -1399,27 +1350,7 @@ __metadata: languageName: node linkType: hard -"@babel/highlight@npm:^7.22.10": - version: 7.22.10 - resolution: "@babel/highlight@npm:7.22.10" - dependencies: - "@babel/helper-validator-identifier": ^7.22.5 - chalk: ^2.4.2 - js-tokens: ^4.0.0 - checksum: f714a1e1a72dd9d72f6383f4f30fd342e21a8df32d984a4ea8f5eab691bb6ba6db2f8823d4b4cf135d98869e7a98925b81306aa32ee3c429f8cfa52c75889e1b - languageName: node - linkType: hard - -"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.12.11, @babel/parser@npm:^7.12.7, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.22.10": - version: 7.22.10 - resolution: "@babel/parser@npm:7.22.10" - bin: - parser: ./bin/babel-parser.js - checksum: af51567b7d3cdf523bc608eae057397486c7fa6c2e5753027c01fe5c36f0767b2d01ce3049b222841326cc5b8c7fda1d810ac1a01af0a97bb04679e2ef9f7049 - languageName: node - linkType: hard - -"@babel/parser@npm:^7.22.15, @babel/parser@npm:^7.23.0": +"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.12.11, @babel/parser@npm:^7.12.7, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.22.15, @babel/parser@npm:^7.22.16, @babel/parser@npm:^7.23.0": version: 7.23.0 resolution: "@babel/parser@npm:7.23.0" bin: @@ -2135,7 +2066,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-modules-commonjs@npm:^7.22.15, @babel/plugin-transform-modules-commonjs@npm:^7.22.5, @babel/plugin-transform-modules-commonjs@npm:^7.23.0": +"@babel/plugin-transform-modules-commonjs@npm:^7.22.15, @babel/plugin-transform-modules-commonjs@npm:^7.23.0": version: 7.23.0 resolution: "@babel/plugin-transform-modules-commonjs@npm:7.23.0" dependencies: @@ -2365,18 +2296,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-react-jsx@npm:^7.12.12, @babel/plugin-transform-react-jsx@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-react-jsx@npm:7.22.5" +"@babel/plugin-transform-react-jsx@npm:^7.12.12, @babel/plugin-transform-react-jsx@npm:^7.22.15, @babel/plugin-transform-react-jsx@npm:^7.22.5": + version: 7.22.15 + resolution: "@babel/plugin-transform-react-jsx@npm:7.22.15" dependencies: "@babel/helper-annotate-as-pure": ^7.22.5 - "@babel/helper-module-imports": ^7.22.5 + "@babel/helper-module-imports": ^7.22.15 "@babel/helper-plugin-utils": ^7.22.5 "@babel/plugin-syntax-jsx": ^7.22.5 - "@babel/types": ^7.22.5 + "@babel/types": ^7.22.15 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: c8f93f29f32cf79683ca2b8958fd62f38155674846ef27a7d4b6fbeb8713c37257418391731b58ff8024ec37b888bed5960e615a3f552e28245d2082e7f2a2df + checksum: 3899054e89550c3a0ef041af7c47ee266e2e934f498ee80fefeda778a6aa177b48aa8b4d2a8bf5848de977fec564571699ab952d9fa089c4c19b45ddb121df09 languageName: node linkType: hard @@ -2471,7 +2402,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-typescript@npm:^7.22.15, @babel/plugin-transform-typescript@npm:^7.22.5": +"@babel/plugin-transform-typescript@npm:^7.22.15": version: 7.22.15 resolution: "@babel/plugin-transform-typescript@npm:7.22.15" dependencies: @@ -2532,7 +2463,7 @@ __metadata: languageName: node linkType: hard -"@babel/preset-env@npm:^7.12.11, @babel/preset-env@npm:~7.22.10, @babel/preset-env@npm:~7.22.9": +"@babel/preset-env@npm:^7.12.11, @babel/preset-env@npm:~7.22.20": version: 7.22.20 resolution: "@babel/preset-env@npm:7.22.20" dependencies: @@ -2648,19 +2579,19 @@ __metadata: languageName: node linkType: hard -"@babel/preset-react@npm:^7.12.10, @babel/preset-react@npm:~7.22.5": - version: 7.22.5 - resolution: "@babel/preset-react@npm:7.22.5" +"@babel/preset-react@npm:^7.12.10, @babel/preset-react@npm:~7.22.15": + version: 7.22.15 + resolution: "@babel/preset-react@npm:7.22.15" dependencies: "@babel/helper-plugin-utils": ^7.22.5 - "@babel/helper-validator-option": ^7.22.5 + "@babel/helper-validator-option": ^7.22.15 "@babel/plugin-transform-react-display-name": ^7.22.5 - "@babel/plugin-transform-react-jsx": ^7.22.5 + "@babel/plugin-transform-react-jsx": ^7.22.15 "@babel/plugin-transform-react-jsx-development": ^7.22.5 "@babel/plugin-transform-react-pure-annotations": ^7.22.5 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: b977c7ee83e93f62d77e61929ca3d97e5291e026e2f025a1b8b7ac9186486ed56c7d5bc36f0becabe0c24e8c42a4e4f2243a3cf841384cfafc3204c5d3e6c619 + checksum: c3ef99dfa2e9f57d2e08603e883aa20f47630a826c8e413888a93ae6e0084b5016871e463829be125329d40a1ba0a89f7c43d77b6dab52083c225cb43e63d10e languageName: node linkType: hard @@ -2679,24 +2610,24 @@ __metadata: languageName: node linkType: hard -"@babel/preset-typescript@npm:~7.22.5": - version: 7.22.5 - resolution: "@babel/preset-typescript@npm:7.22.5" +"@babel/preset-typescript@npm:~7.22.15": + version: 7.22.15 + resolution: "@babel/preset-typescript@npm:7.22.15" dependencies: "@babel/helper-plugin-utils": ^7.22.5 - "@babel/helper-validator-option": ^7.22.5 + "@babel/helper-validator-option": ^7.22.15 "@babel/plugin-syntax-jsx": ^7.22.5 - "@babel/plugin-transform-modules-commonjs": ^7.22.5 - "@babel/plugin-transform-typescript": ^7.22.5 + "@babel/plugin-transform-modules-commonjs": ^7.22.15 + "@babel/plugin-transform-typescript": ^7.22.15 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 7be1670cb4404797d3a473bd72d66eb2b3e0f2f8a672a5e40bdb0812cc66085ec84bcd7b896709764cabf042fdc6b7f2d4755ac7cce10515eb596ff61dab5154 + checksum: 02ac4d5c812a52357c8f517f81584725f06f385d54ccfda89dd082e0ed89a94bd9f4d9b05fa1cbdcf426e3489c1921f04c93c5acc5deea83407a64c22ad2feb4 languageName: node linkType: hard -"@babel/register@npm:^7.12.1, @babel/register@npm:~7.22.5": - version: 7.22.5 - resolution: "@babel/register@npm:7.22.5" +"@babel/register@npm:^7.12.1, @babel/register@npm:~7.22.15": + version: 7.22.15 + resolution: "@babel/register@npm:7.22.15" dependencies: clone-deep: ^4.0.1 find-cache-dir: ^2.0.0 @@ -2705,7 +2636,7 @@ __metadata: source-map-support: ^0.5.16 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 723ce27fdad6faee5b3f51ef4f5154f7f285d61da665367de14de85abbe1c81ccbac11f699671cd0ed6b755dd430f28a62364fed5d49f2527625a9ea3bf40056 + checksum: 5497be6773608cd2d874210edd14499fce464ddbea170219da55955afe4c9173adb591164193458fd639e43b7d1314088a6186f4abf241476c59b3f0da6afd6f languageName: node linkType: hard @@ -2725,12 +2656,12 @@ __metadata: languageName: node linkType: hard -"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.11.2, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.13.10, @babel/runtime@npm:^7.15.4, @babel/runtime@npm:^7.17.2, @babel/runtime@npm:^7.17.8, @babel/runtime@npm:^7.20.1, @babel/runtime@npm:^7.20.13, @babel/runtime@npm:^7.22.5, @babel/runtime@npm:^7.5.0, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.6.2, @babel/runtime@npm:^7.7.6, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.9.2, @babel/runtime@npm:~7.22.6": - version: 7.22.10 - resolution: "@babel/runtime@npm:7.22.10" +"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.11.2, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.13.10, @babel/runtime@npm:^7.15.4, @babel/runtime@npm:^7.17.2, @babel/runtime@npm:^7.17.8, @babel/runtime@npm:^7.20.1, @babel/runtime@npm:^7.20.13, @babel/runtime@npm:^7.22.5, @babel/runtime@npm:^7.5.0, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.6.2, @babel/runtime@npm:^7.7.6, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.9.2, @babel/runtime@npm:~7.22.15": + version: 7.22.15 + resolution: "@babel/runtime@npm:7.22.15" dependencies: regenerator-runtime: ^0.14.0 - checksum: 524d41517e68953dbc73a4f3616b8475e5813f64e28ba89ff5fca2c044d535c2ea1a3f310df1e5bb06162e1f0b401b5c4af73fe6e2519ca2450d9d8c44cf268d + checksum: 793296df1e41599a935a3d77ec01eb6088410d3fd4dbe4e92f06c6b7bb2f8355024e6d78621a3a35f44e0e23b0b59107f23d585384df4f3123256a1e1492040e languageName: node linkType: hard @@ -2754,9 +2685,9 @@ __metadata: languageName: node linkType: hard -"@babel/traverse@npm:^7.1.6, @babel/traverse@npm:^7.12.11, @babel/traverse@npm:^7.12.9, @babel/traverse@npm:^7.13.0, @babel/traverse@npm:^7.22.10, @babel/traverse@npm:^7.23.0": - version: 7.23.0 - resolution: "@babel/traverse@npm:7.23.0" +"@babel/traverse@npm:^7.1.6, @babel/traverse@npm:^7.12.11, @babel/traverse@npm:^7.12.9, @babel/traverse@npm:^7.13.0, @babel/traverse@npm:^7.22.20, @babel/traverse@npm:^7.23.2": + version: 7.23.2 + resolution: "@babel/traverse@npm:7.23.2" dependencies: "@babel/code-frame": ^7.22.13 "@babel/generator": ^7.23.0 @@ -2768,22 +2699,11 @@ __metadata: "@babel/types": ^7.23.0 debug: ^4.1.0 globals: ^11.1.0 - checksum: 0b17fae53269e1af2cd3edba00892bc2975ad5df9eea7b84815dab07dfec2928c451066d51bc65b4be61d8499e77db7e547ce69ef2a7b0eca3f96269cb43a0b0 - languageName: node - linkType: hard - -"@babel/types@npm:^7.0.0, @babel/types@npm:^7.12.11, @babel/types@npm:^7.12.7, @babel/types@npm:^7.2.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.22.10, @babel/types@npm:^7.22.5, @babel/types@npm:^7.3.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3": - version: 7.22.10 - resolution: "@babel/types@npm:7.22.10" - dependencies: - "@babel/helper-string-parser": ^7.22.5 - "@babel/helper-validator-identifier": ^7.22.5 - to-fast-properties: ^2.0.0 - checksum: 095c4f4b7503fa816e4094113f0ec2351ef96ff32012010b771693066ff628c7c664b21c6bd3fb93aeb46fe7c61f6b3a3c9e4ed0034d6a2481201c417371c8af + checksum: 26a1eea0dde41ab99dde8b9773a013a0dc50324e5110a049f5d634e721ff08afffd54940b3974a20308d7952085ac769689369e9127dea655f868c0f6e1ab35d languageName: node linkType: hard -"@babel/types@npm:^7.22.15, @babel/types@npm:^7.22.19, @babel/types@npm:^7.23.0": +"@babel/types@npm:^7.0.0, @babel/types@npm:^7.12.11, @babel/types@npm:^7.12.7, @babel/types@npm:^7.2.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.22.10, @babel/types@npm:^7.22.15, @babel/types@npm:^7.22.19, @babel/types@npm:^7.22.5, @babel/types@npm:^7.23.0, @babel/types@npm:^7.3.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3": version: 7.23.0 resolution: "@babel/types@npm:7.23.0" dependencies: @@ -2897,12 +2817,12 @@ __metadata: languageName: node linkType: hard -"@changesets/apply-release-plan@npm:^6.1.3": - version: 6.1.3 - resolution: "@changesets/apply-release-plan@npm:6.1.3" +"@changesets/apply-release-plan@npm:^6.1.4": + version: 6.1.4 + resolution: "@changesets/apply-release-plan@npm:6.1.4" dependencies: "@babel/runtime": ^7.20.1 - "@changesets/config": ^2.3.0 + "@changesets/config": ^2.3.1 "@changesets/get-version-range-type": ^0.3.2 "@changesets/git": ^2.0.0 "@changesets/types": ^5.2.1 @@ -2913,22 +2833,22 @@ __metadata: outdent: ^0.5.0 prettier: ^2.7.1 resolve-from: ^5.0.0 - semver: ^5.4.1 - checksum: 3772a6e0ede33abdac6fcc52359307f770d5fafa53295c83e0a11b81e5802b2fe5e74e4d672c0a082f5d73dc1a9ef56509870b81824111396f74de99ada9526b + semver: ^7.5.3 + checksum: d386aee70c5483c97d964c6fa1191878005b7050d34b2e1e4a1ad66d9ad44f8f20d1c884e01e770b954bd2d4364f935510e53ae896212669f67e5c37b2a610c7 languageName: node linkType: hard -"@changesets/assemble-release-plan@npm:^5.2.3": - version: 5.2.3 - resolution: "@changesets/assemble-release-plan@npm:5.2.3" +"@changesets/assemble-release-plan@npm:^5.2.4": + version: 5.2.4 + resolution: "@changesets/assemble-release-plan@npm:5.2.4" dependencies: "@babel/runtime": ^7.20.1 "@changesets/errors": ^0.1.4 - "@changesets/get-dependents-graph": ^1.3.5 + "@changesets/get-dependents-graph": ^1.3.6 "@changesets/types": ^5.2.1 "@manypkg/get-packages": ^1.1.3 - semver: ^5.4.1 - checksum: 2c61894414736b12e9a26903d73c387b65f4caba398e280488b885f4d0f4bb307aaa6bae140dfd754c85de6557bd07645accda2af6b8794837ab43823ba6215c + semver: ^7.5.3 + checksum: 32f443a0afec3d5a4afc68c8de32e8ff88531ea24976b50583b1d6870d71cec2729f27952af82854eb54e2ad0a619872d211d654c596ee0eb42c83ab54ad15ae languageName: node linkType: hard @@ -2941,18 +2861,18 @@ __metadata: languageName: node linkType: hard -"@changesets/cli@npm:^2.26.1": - version: 2.26.1 - resolution: "@changesets/cli@npm:2.26.1" +"@changesets/cli@npm:^2.26.2": + version: 2.26.2 + resolution: "@changesets/cli@npm:2.26.2" dependencies: "@babel/runtime": ^7.20.1 - "@changesets/apply-release-plan": ^6.1.3 - "@changesets/assemble-release-plan": ^5.2.3 + "@changesets/apply-release-plan": ^6.1.4 + "@changesets/assemble-release-plan": ^5.2.4 "@changesets/changelog-git": ^0.1.14 - "@changesets/config": ^2.3.0 + "@changesets/config": ^2.3.1 "@changesets/errors": ^0.1.4 - "@changesets/get-dependents-graph": ^1.3.5 - "@changesets/get-release-plan": ^3.0.16 + "@changesets/get-dependents-graph": ^1.3.6 + "@changesets/get-release-plan": ^3.0.17 "@changesets/git": ^2.0.0 "@changesets/logger": ^0.0.5 "@changesets/pre": ^1.0.14 @@ -2961,7 +2881,7 @@ __metadata: "@changesets/write": ^0.2.3 "@manypkg/get-packages": ^1.1.3 "@types/is-ci": ^3.0.0 - "@types/semver": ^6.0.0 + "@types/semver": ^7.5.0 ansi-colors: ^4.1.3 chalk: ^2.1.0 enquirer: ^2.3.0 @@ -2974,28 +2894,28 @@ __metadata: p-limit: ^2.2.0 preferred-pm: ^3.0.0 resolve-from: ^5.0.0 - semver: ^5.4.1 + semver: ^7.5.3 spawndamnit: ^2.0.0 term-size: ^2.1.0 tty-table: ^4.1.5 bin: changeset: bin.js - checksum: d7d6445ebbc1b2718d97852a2275f59af32020e8a1e1efe666767819dd862c7794ce50627ad52f1f97ba4bc57c81bfc4750e92265757cc94ab2d44198d2afb10 + checksum: fc7b5bf319b19abed7a8d33a9fbd9ce49108af61c9c51920f609a49cb0c557f0b998711250d0cac149d0bed8a522f3109c4d8b0dda65b96ff2f823d16ca2f972 languageName: node linkType: hard -"@changesets/config@npm:^2.3.0": - version: 2.3.0 - resolution: "@changesets/config@npm:2.3.0" +"@changesets/config@npm:^2.3.1": + version: 2.3.1 + resolution: "@changesets/config@npm:2.3.1" dependencies: "@changesets/errors": ^0.1.4 - "@changesets/get-dependents-graph": ^1.3.5 + "@changesets/get-dependents-graph": ^1.3.6 "@changesets/logger": ^0.0.5 "@changesets/types": ^5.2.1 "@manypkg/get-packages": ^1.1.3 fs-extra: ^7.0.1 micromatch: ^4.0.2 - checksum: 68a61437ffeda219f22f6d4d32bf8d428e6f284d7e0e191c0629f64f035a051b4068222b1ea3ff1866e5944a153004735dab82205404919f6806c97c546700b1 + checksum: 8af58e3add4751ac8ce2c01f026ac8843b8d1c07c9a3df6518496eaef67f56458a84cad310763c588f7eccbf6831afbf280df7e05e78b294027b6b847be3d0cc languageName: node linkType: hard @@ -3008,31 +2928,31 @@ __metadata: languageName: node linkType: hard -"@changesets/get-dependents-graph@npm:^1.3.5": - version: 1.3.5 - resolution: "@changesets/get-dependents-graph@npm:1.3.5" +"@changesets/get-dependents-graph@npm:^1.3.6": + version: 1.3.6 + resolution: "@changesets/get-dependents-graph@npm:1.3.6" dependencies: "@changesets/types": ^5.2.1 "@manypkg/get-packages": ^1.1.3 chalk: ^2.1.0 fs-extra: ^7.0.1 - semver: ^5.4.1 - checksum: d7abb1da21804fd66b1458e46be2f2aec741145a43500b0463a5acfbb420ac5ce776a7328fa660ad4e6e811f933bd6f36e7bbaf00fb3f591d46f0b8e7108fdcd + semver: ^7.5.3 + checksum: d2cbbc5041063b939899502d1b264a0d9edb655acefd7f6197883229156bb7cfd1ace642ae4a1f7f7b432f2c51429f5dc9851ff5a9ed47f1c0159916e66627a9 languageName: node linkType: hard -"@changesets/get-release-plan@npm:^3.0.16": - version: 3.0.16 - resolution: "@changesets/get-release-plan@npm:3.0.16" +"@changesets/get-release-plan@npm:^3.0.17": + version: 3.0.17 + resolution: "@changesets/get-release-plan@npm:3.0.17" dependencies: "@babel/runtime": ^7.20.1 - "@changesets/assemble-release-plan": ^5.2.3 - "@changesets/config": ^2.3.0 + "@changesets/assemble-release-plan": ^5.2.4 + "@changesets/config": ^2.3.1 "@changesets/pre": ^1.0.14 "@changesets/read": ^0.5.9 "@changesets/types": ^5.2.1 "@manypkg/get-packages": ^1.1.3 - checksum: ab8360c17f69437ad51edfd8910a2609ab8dc1e8cf006994b3938b2551b1eb08b7ab8043b8bf1e94916cbadd89e357a0c1148e20eab8bb5e3ae284384d239942 + checksum: 8a0e3794d0f1e6220d173dbec96352ad69b585d013c3183888ca598dfdfcaa8a5ac3f7f36d5c511575cdc3559c2ad6f8cecfaa16ba9c24380899a81daa7af924 languageName: node linkType: hard @@ -3920,50 +3840,50 @@ __metadata: languageName: node linkType: hard -"@jest/console@npm:^29.6.1": - version: 29.6.1 - resolution: "@jest/console@npm:29.6.1" +"@jest/console@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/console@npm:29.7.0" dependencies: - "@jest/types": ^29.6.1 + "@jest/types": ^29.6.3 "@types/node": "*" chalk: ^4.0.0 - jest-message-util: ^29.6.1 - jest-util: ^29.6.1 + jest-message-util: ^29.7.0 + jest-util: ^29.7.0 slash: ^3.0.0 - checksum: d0ab23a00947bfb4bff8c0a7e5a7afd16519de16dde3fe7e77b9f13e794c6df7043ecf7fcdde66ac0d2b5fb3262e9cab3d92eaf61f89a12d3b8e3602e06a9902 + checksum: 0e3624e32c5a8e7361e889db70b170876401b7d70f509a2538c31d5cd50deb0c1ae4b92dc63fe18a0902e0a48c590c21d53787a0df41a52b34fa7cab96c384d6 languageName: node linkType: hard -"@jest/core@npm:^29.6.1": - version: 29.6.1 - resolution: "@jest/core@npm:29.6.1" +"@jest/core@npm:^29.6.4, @jest/core@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/core@npm:29.7.0" dependencies: - "@jest/console": ^29.6.1 - "@jest/reporters": ^29.6.1 - "@jest/test-result": ^29.6.1 - "@jest/transform": ^29.6.1 - "@jest/types": ^29.6.1 + "@jest/console": ^29.7.0 + "@jest/reporters": ^29.7.0 + "@jest/test-result": ^29.7.0 + "@jest/transform": ^29.7.0 + "@jest/types": ^29.6.3 "@types/node": "*" ansi-escapes: ^4.2.1 chalk: ^4.0.0 ci-info: ^3.2.0 exit: ^0.1.2 graceful-fs: ^4.2.9 - jest-changed-files: ^29.5.0 - jest-config: ^29.6.1 - jest-haste-map: ^29.6.1 - jest-message-util: ^29.6.1 - jest-regex-util: ^29.4.3 - jest-resolve: ^29.6.1 - jest-resolve-dependencies: ^29.6.1 - jest-runner: ^29.6.1 - jest-runtime: ^29.6.1 - jest-snapshot: ^29.6.1 - jest-util: ^29.6.1 - jest-validate: ^29.6.1 - jest-watcher: ^29.6.1 + jest-changed-files: ^29.7.0 + jest-config: ^29.7.0 + jest-haste-map: ^29.7.0 + jest-message-util: ^29.7.0 + jest-regex-util: ^29.6.3 + jest-resolve: ^29.7.0 + jest-resolve-dependencies: ^29.7.0 + jest-runner: ^29.7.0 + jest-runtime: ^29.7.0 + jest-snapshot: ^29.7.0 + jest-util: ^29.7.0 + jest-validate: ^29.7.0 + jest-watcher: ^29.7.0 micromatch: ^4.0.4 - pretty-format: ^29.6.1 + pretty-format: ^29.7.0 slash: ^3.0.0 strip-ansi: ^6.0.0 peerDependencies: @@ -3971,7 +3891,7 @@ __metadata: peerDependenciesMeta: node-notifier: optional: true - checksum: 736dcc90c6c58dd9e1d2da122103b851187719ce3b3d4167689c63e68252632cd817712955b52ddaa648eba9c6f98f86cd58677325f0db4185f76899c64d7dac + checksum: af759c9781cfc914553320446ce4e47775ae42779e73621c438feb1e4231a5d4862f84b1d8565926f2d1aab29b3ec3dcfdc84db28608bdf5f29867124ebcfc0d languageName: node linkType: hard @@ -3984,72 +3904,72 @@ __metadata: languageName: node linkType: hard -"@jest/environment@npm:^29.6.1": - version: 29.6.1 - resolution: "@jest/environment@npm:29.6.1" +"@jest/environment@npm:^29.6.4, @jest/environment@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/environment@npm:29.7.0" dependencies: - "@jest/fake-timers": ^29.6.1 - "@jest/types": ^29.6.1 + "@jest/fake-timers": ^29.7.0 + "@jest/types": ^29.6.3 "@types/node": "*" - jest-mock: ^29.6.1 - checksum: fb671f91f27e7aa1ba04983ef87a83f0794a597aba0a57d08cbb1fcb484c2aedc2201e99f85fafe27aec9be78af6f2d1d7e6ea88267938992a1d0f9d4615f5b2 + jest-mock: ^29.7.0 + checksum: 6fb398143b2543d4b9b8d1c6dbce83fa5247f84f550330604be744e24c2bd2178bb893657d62d1b97cf2f24baf85c450223f8237cccb71192c36a38ea2272934 languageName: node linkType: hard -"@jest/expect-utils@npm:^29.6.1": - version: 29.6.1 - resolution: "@jest/expect-utils@npm:29.6.1" +"@jest/expect-utils@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/expect-utils@npm:29.7.0" dependencies: - jest-get-type: ^29.4.3 - checksum: 037ee017eca62f7b45e1465fb5c6f9e92d5709a9ac716b8bff0bd294240a54de734e8f968fb69309cc4aef6c83b9552d5a821f3b18371af394bf04783859d706 + jest-get-type: ^29.6.3 + checksum: 75eb177f3d00b6331bcaa057e07c0ccb0733a1d0a1943e1d8db346779039cb7f103789f16e502f888a3096fb58c2300c38d1f3748b36a7fa762eb6f6d1b160ed languageName: node linkType: hard -"@jest/expect@npm:^29.6.1": - version: 29.6.1 - resolution: "@jest/expect@npm:29.6.1" +"@jest/expect@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/expect@npm:29.7.0" dependencies: - expect: ^29.6.1 - jest-snapshot: ^29.6.1 - checksum: 5c56977b3cc8489744d97d9dc2dcb196c1dfecc83a058a7ef0fd4f63d68cf120a23d27669272d1e1b184fb4337b85e4ac1fc7f886e3988fdf243d42d73973eac + expect: ^29.7.0 + jest-snapshot: ^29.7.0 + checksum: a01cb85fd9401bab3370618f4b9013b90c93536562222d920e702a0b575d239d74cecfe98010aaec7ad464f67cf534a353d92d181646a4b792acaa7e912ae55e languageName: node linkType: hard -"@jest/fake-timers@npm:^29.6.1": - version: 29.6.1 - resolution: "@jest/fake-timers@npm:29.6.1" +"@jest/fake-timers@npm:^29.6.4, @jest/fake-timers@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/fake-timers@npm:29.7.0" dependencies: - "@jest/types": ^29.6.1 + "@jest/types": ^29.6.3 "@sinonjs/fake-timers": ^10.0.2 "@types/node": "*" - jest-message-util: ^29.6.1 - jest-mock: ^29.6.1 - jest-util: ^29.6.1 - checksum: 86991276944b7d6c2ada3703a272517f5f8f2f4e2af1fe26065f6db1dac4dc6299729a88c46bcb781dcc1b20504c1d4bbd8119fd8a0838ac81a9a4b5d2c8e429 + jest-message-util: ^29.7.0 + jest-mock: ^29.7.0 + jest-util: ^29.7.0 + checksum: caf2bbd11f71c9241b458d1b5a66cbe95debc5a15d96442444b5d5c7ba774f523c76627c6931cca5e10e76f0d08761f6f1f01a608898f4751a0eee54fc3d8d00 languageName: node linkType: hard -"@jest/globals@npm:^29.6.1": - version: 29.6.1 - resolution: "@jest/globals@npm:29.6.1" +"@jest/globals@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/globals@npm:29.7.0" dependencies: - "@jest/environment": ^29.6.1 - "@jest/expect": ^29.6.1 - "@jest/types": ^29.6.1 - jest-mock: ^29.6.1 - checksum: fcca0b970a8b4894a1cdff0f500a86b45609e72c0a4319875e9504237b839df1a46c44d2f1362c6d87fdc7a05928edcc4b5a3751c9e6648dd70a761cdab64c94 + "@jest/environment": ^29.7.0 + "@jest/expect": ^29.7.0 + "@jest/types": ^29.6.3 + jest-mock: ^29.7.0 + checksum: 97dbb9459135693ad3a422e65ca1c250f03d82b2a77f6207e7fa0edd2c9d2015fbe4346f3dc9ebff1678b9d8da74754d4d440b7837497f8927059c0642a22123 languageName: node linkType: hard -"@jest/reporters@npm:^29.6.1": - version: 29.6.1 - resolution: "@jest/reporters@npm:29.6.1" +"@jest/reporters@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/reporters@npm:29.7.0" dependencies: "@bcoe/v8-coverage": ^0.2.3 - "@jest/console": ^29.6.1 - "@jest/test-result": ^29.6.1 - "@jest/transform": ^29.6.1 - "@jest/types": ^29.6.1 + "@jest/console": ^29.7.0 + "@jest/test-result": ^29.7.0 + "@jest/transform": ^29.7.0 + "@jest/types": ^29.6.3 "@jridgewell/trace-mapping": ^0.3.18 "@types/node": "*" chalk: ^4.0.0 @@ -4058,13 +3978,13 @@ __metadata: glob: ^7.1.3 graceful-fs: ^4.2.9 istanbul-lib-coverage: ^3.0.0 - istanbul-lib-instrument: ^5.1.0 + istanbul-lib-instrument: ^6.0.0 istanbul-lib-report: ^3.0.0 istanbul-lib-source-maps: ^4.0.0 istanbul-reports: ^3.1.3 - jest-message-util: ^29.6.1 - jest-util: ^29.6.1 - jest-worker: ^29.6.1 + jest-message-util: ^29.7.0 + jest-util: ^29.7.0 + jest-worker: ^29.7.0 slash: ^3.0.0 string-length: ^4.0.1 strip-ansi: ^6.0.0 @@ -4074,7 +3994,7 @@ __metadata: peerDependenciesMeta: node-notifier: optional: true - checksum: b7dae415f3f6342b4db2671261bbee29af20a829f42135316c3dd548b9ef85290c9bb64a0e3aec4a55486596be1257ac8216a0f8d9794acd43f8b8fb686fc7e3 + checksum: 7eadabd62cc344f629024b8a268ecc8367dba756152b761bdcb7b7e570a3864fc51b2a9810cd310d85e0a0173ef002ba4528d5ea0329fbf66ee2a3ada9c40455 languageName: node linkType: hard @@ -4087,47 +4007,47 @@ __metadata: languageName: node linkType: hard -"@jest/schemas@npm:^29.6.0": - version: 29.6.0 - resolution: "@jest/schemas@npm:29.6.0" +"@jest/schemas@npm:^29.6.3": + version: 29.6.3 + resolution: "@jest/schemas@npm:29.6.3" dependencies: "@sinclair/typebox": ^0.27.8 - checksum: c00511c69cf89138a7d974404d3a5060af375b5a52b9c87215d91873129b382ca11c1ff25bd6d605951404bb381ddce5f8091004a61e76457da35db1f5c51365 + checksum: 910040425f0fc93cd13e68c750b7885590b8839066dfa0cd78e7def07bbb708ad869381f725945d66f2284de5663bbecf63e8fdd856e2ae6e261ba30b1687e93 languageName: node linkType: hard -"@jest/source-map@npm:^29.6.0": - version: 29.6.0 - resolution: "@jest/source-map@npm:29.6.0" +"@jest/source-map@npm:^29.6.3": + version: 29.6.3 + resolution: "@jest/source-map@npm:29.6.3" dependencies: "@jridgewell/trace-mapping": ^0.3.18 callsites: ^3.0.0 graceful-fs: ^4.2.9 - checksum: 9c6c40387410bb70b2fae8124287fc28f6bdd1b2d7f24348e8611e1bb638b404518228a4ce64a582365b589c536ae8e7ebab0126cef59a87874b71061d19783b + checksum: bcc5a8697d471396c0003b0bfa09722c3cd879ad697eb9c431e6164e2ea7008238a01a07193dfe3cbb48b1d258eb7251f6efcea36f64e1ebc464ea3c03ae2deb languageName: node linkType: hard -"@jest/test-result@npm:^29.6.1": - version: 29.6.1 - resolution: "@jest/test-result@npm:29.6.1" +"@jest/test-result@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/test-result@npm:29.7.0" dependencies: - "@jest/console": ^29.6.1 - "@jest/types": ^29.6.1 + "@jest/console": ^29.7.0 + "@jest/types": ^29.6.3 "@types/istanbul-lib-coverage": ^2.0.0 collect-v8-coverage: ^1.0.0 - checksum: 9397a3a3410c5df564e79297b1be4fe33807a6157a017a1f74b54a6ef14de1530f12b922299e822e66a82c53269da16661772bffde3d883a78c5eefd2cd6d1cc + checksum: 67b6317d526e335212e5da0e768e3b8ab8a53df110361b80761353ad23b6aea4432b7c5665bdeb87658ea373b90fb1afe02ed3611ef6c858c7fba377505057fa languageName: node linkType: hard -"@jest/test-sequencer@npm:^29.6.1": - version: 29.6.1 - resolution: "@jest/test-sequencer@npm:29.6.1" +"@jest/test-sequencer@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/test-sequencer@npm:29.7.0" dependencies: - "@jest/test-result": ^29.6.1 + "@jest/test-result": ^29.7.0 graceful-fs: ^4.2.9 - jest-haste-map: ^29.6.1 + jest-haste-map: ^29.7.0 slash: ^3.0.0 - checksum: f3437178b5dca0401ed2e990d8b69161442351856d56f5725e009a487f5232b51039f8829673884b9bea61c861120d08a53a36432f4a4b8aab38915a68f7000d + checksum: 73f43599017946be85c0b6357993b038f875b796e2f0950487a82f4ebcb115fa12131932dd9904026b4ad8be131fe6e28bd8d0aa93b1563705185f9804bff8bd languageName: node linkType: hard @@ -4154,26 +4074,26 @@ __metadata: languageName: node linkType: hard -"@jest/transform@npm:^29.6.1": - version: 29.6.1 - resolution: "@jest/transform@npm:29.6.1" +"@jest/transform@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/transform@npm:29.7.0" dependencies: "@babel/core": ^7.11.6 - "@jest/types": ^29.6.1 + "@jest/types": ^29.6.3 "@jridgewell/trace-mapping": ^0.3.18 babel-plugin-istanbul: ^6.1.1 chalk: ^4.0.0 convert-source-map: ^2.0.0 fast-json-stable-stringify: ^2.1.0 graceful-fs: ^4.2.9 - jest-haste-map: ^29.6.1 - jest-regex-util: ^29.4.3 - jest-util: ^29.6.1 + jest-haste-map: ^29.7.0 + jest-regex-util: ^29.6.3 + jest-util: ^29.7.0 micromatch: ^4.0.4 pirates: ^4.0.4 slash: ^3.0.0 write-file-atomic: ^4.0.2 - checksum: 1635cd66e4b3dbba0689ecefabc6137301756c9c12d1d23e25124dd0dd9b4a6a38653d51e825e90f74faa022152ac1eaf200591fb50417aa7e1f7d1d1c2bc11d + checksum: 0f8ac9f413903b3cb6d240102db848f2a354f63971ab885833799a9964999dd51c388162106a807f810071f864302cdd8e3f0c241c29ce02d85a36f18f3f40ab languageName: node linkType: hard @@ -4203,17 +4123,17 @@ __metadata: languageName: node linkType: hard -"@jest/types@npm:^29.6.1": - version: 29.6.1 - resolution: "@jest/types@npm:29.6.1" +"@jest/types@npm:^29.6.3": + version: 29.6.3 + resolution: "@jest/types@npm:29.6.3" dependencies: - "@jest/schemas": ^29.6.0 + "@jest/schemas": ^29.6.3 "@types/istanbul-lib-coverage": ^2.0.0 "@types/istanbul-reports": ^3.0.0 "@types/node": "*" "@types/yargs": ^17.0.8 chalk: ^4.0.0 - checksum: 89fc1ccf71a84fe0da643e0675b1cfe6a6f19ea72e935b2ab1dbdb56ec547e94433fb59b3536d3832a6e156c077865b7176fe9dae707dab9c3d2f9405ba6233c + checksum: a0bcf15dbb0eca6bdd8ce61a3fb055349d40268622a7670a3b2eb3c3dbafe9eb26af59938366d520b86907b9505b0f9b29b85cec11579a9e580694b87cd90fcc languageName: node linkType: hard @@ -6674,47 +6594,47 @@ __metadata: languageName: node linkType: hard -"@react-pdf/font@npm:^2.3.6": - version: 2.3.6 - resolution: "@react-pdf/font@npm:2.3.6" +"@react-pdf/font@npm:^2.3.7": + version: 2.3.7 + resolution: "@react-pdf/font@npm:2.3.7" dependencies: "@babel/runtime": ^7.20.13 - "@react-pdf/types": ^2.3.3 + "@react-pdf/types": ^2.3.4 cross-fetch: ^3.1.5 fontkit: ^2.0.2 is-url: ^1.2.4 - checksum: 572e34d416ad645e609afcb582c6b8baabe4017019bbfa696b90dddfcb3931069a9dc71124f1bf9b75652063f8c434880c383b212edc659a66dd2be3879f4213 + checksum: bf3f774045294c3e4f2f7b3e86e631ee01dddfe8e8c11fb97264cfa1fbf21e4f3c4ed0684d4971c967c4c175bb918e56f7c1d0dbeac4aa1adf30c618f965f3c9 languageName: node linkType: hard -"@react-pdf/image@npm:^2.2.1": - version: 2.2.1 - resolution: "@react-pdf/image@npm:2.2.1" +"@react-pdf/image@npm:^2.2.2": + version: 2.2.2 + resolution: "@react-pdf/image@npm:2.2.2" dependencies: "@babel/runtime": ^7.20.13 "@react-pdf/png-js": ^2.2.0 cross-fetch: ^3.1.5 - checksum: d2b3c9e5b6a23c377724072c875eaeea6389fa513ae0e88ed442d7efb0eaa373b0f195e7c6b9404297ede802d063cf20109800f4d7b951087f66bb64f7c04f1a + checksum: f14c5595ba25f54a2274c1ec4b2d19b195108f05ac34960a0ec8c03499f2090faa9937428ed1d189597fb675733b4d68d092d98c18319e0ef6efa530d12c605b languageName: node linkType: hard -"@react-pdf/layout@npm:^3.6.2": - version: 3.6.2 - resolution: "@react-pdf/layout@npm:3.6.2" +"@react-pdf/layout@npm:^3.6.3": + version: 3.6.3 + resolution: "@react-pdf/layout@npm:3.6.3" dependencies: "@babel/runtime": ^7.20.13 "@react-pdf/fns": 2.0.1 - "@react-pdf/image": ^2.2.1 + "@react-pdf/image": ^2.2.2 "@react-pdf/pdfkit": ^3.0.2 "@react-pdf/primitives": ^3.0.0 - "@react-pdf/stylesheet": ^4.1.7 + "@react-pdf/stylesheet": ^4.1.8 "@react-pdf/textkit": ^4.2.0 - "@react-pdf/types": ^2.3.3 + "@react-pdf/types": ^2.3.4 "@react-pdf/yoga": ^4.1.2 cross-fetch: ^3.1.5 emoji-regex: ^10.2.1 queue: ^6.0.1 - checksum: 15816b14aa7ba8720ea5da88f3cf269070c189a2600959c61c92314aebf04e72c691df6947a1bda04d61a561ee68b046e1c8110960da121ffb63badb3d893d08 + checksum: 812b5f3c3f27fba2fc6a15c35a3e9191e4d6407ff4a23a96c2d99889842c26f15bf03531e67c607cc2114ed731739d03f02c934926db7bc05926ef29ed959dad languageName: node linkType: hard @@ -6748,35 +6668,35 @@ __metadata: languageName: node linkType: hard -"@react-pdf/render@npm:^3.2.6": - version: 3.2.6 - resolution: "@react-pdf/render@npm:3.2.6" +"@react-pdf/render@npm:^3.2.7": + version: 3.2.7 + resolution: "@react-pdf/render@npm:3.2.7" dependencies: "@babel/runtime": ^7.20.13 "@react-pdf/fns": 2.0.1 "@react-pdf/primitives": ^3.0.0 "@react-pdf/textkit": ^4.2.0 - "@react-pdf/types": ^2.3.3 + "@react-pdf/types": ^2.3.4 abs-svg-path: ^0.1.1 color-string: ^1.5.3 normalize-svg-path: ^1.1.0 parse-svg-path: ^0.1.2 svg-arc-to-cubic-bezier: ^3.2.0 - checksum: 9d0bde1e5042db8a251e474092415bd49ed4b01d7d1d404e50e6f7480d282cf59f51ed9fe08deed633aefcdcee424dd955bf4e659471905326e2911e672db925 + checksum: 74bb7190d006fee7b2df074bb28ade1f0bdf4a20a33998cdc2826974f4b4fc3622e660a598a4f4623046c12009bc3b663aa8701d9361a487334b84c7c2512de7 languageName: node linkType: hard -"@react-pdf/renderer@npm:^3.1.12": - version: 3.1.12 - resolution: "@react-pdf/renderer@npm:3.1.12" +"@react-pdf/renderer@npm:^3.1.14": + version: 3.1.14 + resolution: "@react-pdf/renderer@npm:3.1.14" dependencies: "@babel/runtime": ^7.20.13 - "@react-pdf/font": ^2.3.6 - "@react-pdf/layout": ^3.6.2 + "@react-pdf/font": ^2.3.7 + "@react-pdf/layout": ^3.6.3 "@react-pdf/pdfkit": ^3.0.2 "@react-pdf/primitives": ^3.0.0 - "@react-pdf/render": ^3.2.6 - "@react-pdf/types": ^2.3.3 + "@react-pdf/render": ^3.2.7 + "@react-pdf/types": ^2.3.4 events: ^3.3.0 object-assign: ^4.1.1 prop-types: ^15.6.2 @@ -6784,22 +6704,22 @@ __metadata: scheduler: ^0.17.0 peerDependencies: react: ^16.8.6 || ^17.0.0 || ^18.0.0 - checksum: 7fa9779c8594e8e650fc121de5b89a40268ccab62b89a87c32f110bb4ea97adacd1d0fb2893533e3834613478bed71de2c1161e88e42916862b1523d7f10367e + checksum: f0313c066b5e9f34e87940a86dd344d07347829781407ea9e7d24480213624b8d0457a8258c09b62c6cfe145120f4e06978ebf7d18e7272a2e8a7d21f02c6202 languageName: node linkType: hard -"@react-pdf/stylesheet@npm:^4.1.7": - version: 4.1.7 - resolution: "@react-pdf/stylesheet@npm:4.1.7" +"@react-pdf/stylesheet@npm:^4.1.8": + version: 4.1.8 + resolution: "@react-pdf/stylesheet@npm:4.1.8" dependencies: "@babel/runtime": ^7.20.13 "@react-pdf/fns": 2.0.1 - "@react-pdf/types": ^2.3.3 + "@react-pdf/types": ^2.3.4 color-string: ^1.5.3 hsl-to-hex: ^1.0.0 media-engine: ^1.0.3 postcss-value-parser: ^4.1.0 - checksum: f120ebe017fe48db6559105f080619b0f1f37931a87da9d1f3ac64ab75792c320ba08c4ee85e907040546b99e37d62e1571bc2de5e5cbbcf8891a6521b46bd3a + checksum: c5339fdb49ee0420a6633e0955632073440fb0d235f0153164dae17401c5880995cf835c8ca1cf81a23ba83e4377439584ee86d2ab695796f01030791ab4f31f languageName: node linkType: hard @@ -6815,10 +6735,10 @@ __metadata: languageName: node linkType: hard -"@react-pdf/types@npm:^2.3.3": - version: 2.3.3 - resolution: "@react-pdf/types@npm:2.3.3" - checksum: f4d9e5ba0b8481cb485d17922079f320de469500495f9bbd06161fca7e9deb127ea860c38c34f01d1339c519e032c0d9f63ea681c13eeedee2c8ef5cc0b79d19 +"@react-pdf/types@npm:^2.3.4": + version: 2.3.4 + resolution: "@react-pdf/types@npm:2.3.4" + checksum: 3aa1b00581c69b5078fbc946d7c86abc984c2bef6a1b4b51e236be6719efd6773f794d390356df6d8355aa3c1f5a3a4a4bdca1e2d3c31fe3d3bf55250e405b02 languageName: node linkType: hard @@ -7783,10 +7703,10 @@ __metadata: "@rocket.chat/models": "workspace:^" "@rocket.chat/rest-typings": "workspace:^" "@rocket.chat/string-helpers": next - "@types/bcrypt": ^5.0.0 - "@types/gc-stats": ^1 - "@types/node": ^14.18.51 - "@types/polka": ^0.5.4 + "@types/bcrypt": ^5.0.1 + "@types/gc-stats": ^1.4.2 + "@types/node": ^14.18.63 + "@types/polka": ^0.5.6 bcrypt: ^5.0.1 ejson: ^2.2.3 eslint: ~8.45.0 @@ -7795,14 +7715,14 @@ __metadata: fibers: ^5.0.3 gc-stats: ^1.4.0 mem: ^8.1.1 - moleculer: ^0.14.29 + moleculer: ^0.14.31 mongodb: ^4.17.1 nats: ^2.4.0 pino: ^8.15.0 polka: ^0.5.2 ts-node: ^10.9.1 typescript: ~5.2.2 - uuid: ^9.0.0 + uuid: ^9.0.1 languageName: unknown linkType: soft @@ -7810,9 +7730,9 @@ __metadata: version: 0.0.0-use.local resolution: "@rocket.chat/account-utils@workspace:packages/account-utils" dependencies: - "@types/jest": ~29.5.3 + "@types/jest": ~29.5.7 eslint: ~8.45.0 - jest: ~29.6.1 + jest: ~29.6.4 ts-jest: ~29.0.5 typescript: ~5.2.2 languageName: unknown @@ -7822,14 +7742,14 @@ __metadata: version: 0.0.0-use.local resolution: "@rocket.chat/agenda@workspace:packages/agenda" dependencies: - "@types/debug": ^4.1.8 - "@types/jest": ~29.5.3 + "@types/debug": ^4.1.10 + "@types/jest": ~29.5.7 cron: ~1.8.2 date.js: ~0.3.3 debug: ~4.1.1 eslint: ~8.45.0 human-interval: ^2.0.1 - jest: ~29.6.1 + jest: ~29.6.4 moment-timezone: ~0.5.43 mongodb: ^4.17.1 ts-jest: ~29.0.5 @@ -7843,13 +7763,13 @@ __metadata: dependencies: "@rocket.chat/core-typings": "workspace:^" "@rocket.chat/rest-typings": "workspace:^" - "@swc/core": ^1.3.66 - "@swc/jest": ^0.2.26 - "@types/jest": ~29.5.3 - "@types/strict-uri-encode": ^2.0.0 + "@swc/core": ^1.3.95 + "@swc/jest": ^0.2.29 + "@types/jest": ~29.5.7 + "@types/strict-uri-encode": ^2.0.1 eslint: ~8.45.0 filter-obj: ^3.0.0 - jest: ~29.6.1 + jest: ~29.6.4 jest-fetch-mock: ^3.0.3 query-string: ^7.1.3 split-on-first: ^3.0.0 @@ -7907,9 +7827,9 @@ __metadata: "@rocket.chat/models": "workspace:^" "@rocket.chat/rest-typings": "workspace:^" "@rocket.chat/string-helpers": next - "@types/gc-stats": ^1 - "@types/node": ^14.18.51 - "@types/polka": ^0.5.4 + "@types/gc-stats": ^1.4.2 + "@types/node": ^14.18.63 + "@types/polka": ^0.5.6 ejson: ^2.2.3 eslint: ~8.45.0 event-loop-stats: ^1.4.1 @@ -7917,7 +7837,7 @@ __metadata: fibers: ^5.0.3 gc-stats: ^1.4.0 mem: ^8.1.1 - moleculer: ^0.14.29 + moleculer: ^0.14.31 mongodb: ^4.17.1 nats: ^2.4.0 pino: ^8.15.0 @@ -7931,13 +7851,13 @@ __metadata: version: 0.0.0-use.local resolution: "@rocket.chat/base64@workspace:packages/base64" dependencies: - "@babel/core": ~7.22.9 - "@babel/preset-env": ~7.22.9 + "@babel/core": ~7.22.20 + "@babel/preset-env": ~7.22.20 "@rocket.chat/eslint-config": "workspace:^" "@typescript-eslint/eslint-plugin": ~5.60.1 "@typescript-eslint/parser": ~5.60.1 eslint: ~8.45.0 - jest: ~29.6.1 + jest: ~29.6.4 ts-jest: ~29.0.5 typescript: ~5.2.2 languageName: unknown @@ -7947,10 +7867,10 @@ __metadata: version: 0.0.0-use.local resolution: "@rocket.chat/cas-validate@workspace:packages/cas-validate" dependencies: - "@types/jest": ~29.5.3 + "@types/jest": ~29.5.7 cheerio: 1.0.0-rc.10 eslint: ~8.45.0 - jest: ~29.6.1 + jest: ~29.6.4 ts-jest: ~29.0.5 typescript: ~5.2.2 languageName: unknown @@ -7960,9 +7880,9 @@ __metadata: version: 0.0.0-use.local resolution: "@rocket.chat/core-services@workspace:packages/core-services" dependencies: - "@babel/core": ~7.22.9 - "@babel/preset-env": ~7.22.9 - "@babel/preset-typescript": ~7.22.5 + "@babel/core": ~7.22.20 + "@babel/preset-env": ~7.22.20 + "@babel/preset-typescript": ~7.22.15 "@rocket.chat/apps-engine": 1.41.0-alpha.290 "@rocket.chat/core-typings": "workspace:^" "@rocket.chat/eslint-config": "workspace:^" @@ -7971,14 +7891,14 @@ __metadata: "@rocket.chat/models": "workspace:^" "@rocket.chat/rest-typings": "workspace:^" "@rocket.chat/ui-kit": ^0.32.1 - "@types/babel__core": ^7 - "@types/babel__preset-env": ^7 - "@types/fibers": ^3.1.1 - "@types/jest": ~29.5.3 + "@types/babel__core": ^7.20.3 + "@types/babel__preset-env": ^7.9.4 + "@types/fibers": ^3.1.3 + "@types/jest": ~29.5.7 babel-jest: ^29.5.0 eslint: ~8.45.0 fibers: ^5.0.3 - jest: ~29.6.1 + jest: ~29.6.4 mongodb: ^4.17.1 prettier: ~2.8.8 typescript: ~5.2.2 @@ -8009,9 +7929,9 @@ __metadata: "@rocket.chat/core-typings": "workspace:^" "@rocket.chat/models": "workspace:^" "@rocket.chat/random": "workspace:^" - "@types/jest": ~29.5.3 + "@types/jest": ~29.5.7 eslint: ~8.45.0 - jest: ~29.6.1 + jest: ~29.6.4 mongodb: ^4.17.1 ts-jest: ~29.0.5 typescript: ~5.2.2 @@ -8059,13 +7979,13 @@ __metadata: dependencies: "@rocket.chat/api-client": "workspace:^" "@rocket.chat/rest-typings": "workspace:^" - "@swc/core": ^1.3.66 - "@swc/jest": ^0.2.26 - "@types/jest": ~29.5.3 - "@types/ws": ^8.5.5 + "@swc/core": ^1.3.95 + "@swc/jest": ^0.2.29 + "@types/jest": ~29.5.7 + "@types/ws": ^8.5.8 eslint: ~8.45.0 - jest: ~29.6.1 - jest-environment-jsdom: ~29.6.1 + jest: ~29.6.4 + jest-environment-jsdom: ~29.6.4 jest-websocket-mock: ^2.4.0 typescript: ~5.2.2 ws: ^8.13.0 @@ -8090,14 +8010,14 @@ __metadata: "@rocket.chat/rest-typings": "workspace:^" "@rocket.chat/string-helpers": next "@rocket.chat/ui-contexts": "workspace:^" - "@types/ejson": ^2.2.0 - "@types/gc-stats": ^1 - "@types/meteor": ^2.9.2 - "@types/node": ^14.18.51 - "@types/polka": ^0.5.4 + "@types/ejson": ^2.2.1 + "@types/gc-stats": ^1.4.2 + "@types/meteor": ^2.9.5 + "@types/node": ^14.18.63 + "@types/polka": ^0.5.6 "@types/sharp": ^0.30.5 "@types/uuid": ^8.3.4 - "@types/ws": ^8.5.5 + "@types/ws": ^8.5.8 colorette: ^1.4.0 ejson: ^2.2.3 eslint: ~8.45.0 @@ -8107,13 +8027,13 @@ __metadata: gc-stats: ^1.4.0 jaeger-client: ^3.19.0 mem: ^8.1.1 - moleculer: ^0.14.29 + moleculer: ^0.14.31 mongodb: ^4.17.1 nats: ^2.4.0 pino: ^8.15.0 pino-pretty: ^7.6.1 polka: ^0.5.2 - sharp: ^0.30.7 + sharp: ^0.32.6 ts-node: ^10.9.1 typescript: ~5.2.2 underscore: ^1.13.6 @@ -8134,8 +8054,8 @@ __metadata: resolution: "@rocket.chat/eslint-config@workspace:packages/eslint-config" dependencies: "@babel/core": ^7.20.7 - "@babel/eslint-parser": ~7.22.9 - "@types/eslint": ~8.44.0 + "@babel/eslint-parser": ~7.22.15 + "@types/eslint": ~8.44.6 "@types/prettier": ^2.6.3 "@typescript-eslint/eslint-plugin": ~5.60.1 "@typescript-eslint/parser": ~5.60.1 @@ -8143,7 +8063,7 @@ __metadata: eslint-config-prettier: ~8.8.0 eslint-plugin-anti-trojan-source: ~1.1.1 eslint-plugin-import: ~2.26.0 - eslint-plugin-jest: ~27.2.2 + eslint-plugin-jest: ~27.2.3 eslint-plugin-prettier: ~4.2.1 prettier: ~2.8.8 languageName: unknown @@ -8184,31 +8104,7 @@ __metadata: languageName: node linkType: hard -"@rocket.chat/forked-matrix-bot-sdk@npm:^0.6.0-beta.2": - version: 0.6.0-beta.2 - resolution: "@rocket.chat/forked-matrix-bot-sdk@npm:0.6.0-beta.2" - dependencies: - "@rocket.chat/forked-matrix-sdk-crypto-nodejs": ^0.1.0-beta.12 - "@types/express": ^4.17.13 - another-json: ^0.2.0 - chalk: ^4 - express: ^4.17.2 - glob-to-regexp: ^0.4.1 - hash.js: ^1.1.7 - html-to-text: ^8.1.0 - htmlencode: ^0.0.4 - lowdb: ^1 - lru-cache: ^6.0.0 - mkdirp: ^1.0.4 - morgan: ^1.10.0 - request: ^2.88.2 - request-promise: ^4.2.6 - sanitize-html: ^2.6.1 - checksum: f2ce128ab6d93289d711161c217ad0d2c0b879ae37c8c5527b3aea7294845c19f713f69fccde65d260f07780777be80718b73e8bdc38a6c65cba94a94fd7d85d - languageName: node - linkType: hard - -"@rocket.chat/forked-matrix-bot-sdk@npm:^0.6.0-beta.3": +"@rocket.chat/forked-matrix-bot-sdk@npm:^0.6.0-beta.2, @rocket.chat/forked-matrix-bot-sdk@npm:^0.6.0-beta.3": version: 0.6.0-beta.3 resolution: "@rocket.chat/forked-matrix-bot-sdk@npm:0.6.0-beta.3" dependencies: @@ -8293,10 +8189,10 @@ __metadata: version: 0.0.0-use.local resolution: "@rocket.chat/fuselage-ui-kit@workspace:packages/fuselage-ui-kit" dependencies: - "@babel/core": ~7.22.10 - "@babel/preset-env": ~7.22.10 - "@babel/preset-react": ~7.22.5 - "@babel/preset-typescript": ~7.22.5 + "@babel/core": ~7.22.20 + "@babel/preset-env": ~7.22.20 + "@babel/preset-react": ~7.22.15 + "@babel/preset-typescript": ~7.22.15 "@rocket.chat/apps-engine": 1.41.0-alpha.290 "@rocket.chat/eslint-config": "workspace:^" "@rocket.chat/fuselage": ^0.37.1 @@ -8317,10 +8213,10 @@ __metadata: "@storybook/source-loader": ~6.5.16 "@storybook/theming": ~6.5.16 "@tanstack/react-query": ^4.16.1 - "@types/babel__core": ^7 - "@types/babel__preset-env": ^7 - "@types/react": ~17.0.62 - "@types/react-dom": ~17.0.20 + "@types/babel__core": ^7.20.3 + "@types/babel__preset-env": ^7.9.4 + "@types/react": ~17.0.69 + "@types/react-dom": ~17.0.22 babel-loader: ~8.2.5 cross-env: ^7.0.3 eslint: ~8.45.0 @@ -8329,6 +8225,7 @@ __metadata: prettier: ~2.8.8 react-docgen-typescript-plugin: ~1.0.5 react-dom: ^17.0.2 + react-i18next: ~13.2.2 rimraf: ^3.0.2 storybook-dark-mode: ~3.0.1 tslib: ^2.5.3 @@ -8342,9 +8239,9 @@ __metadata: "@rocket.chat/icons": "*" "@rocket.chat/prettier-config": "*" "@rocket.chat/styled": "*" - "@rocket.chat/ui-contexts": 2.0.5 + "@rocket.chat/ui-contexts": 3.0.0-rc.7 "@rocket.chat/ui-kit": "*" - "@rocket.chat/ui-video-conf": 2.0.5 + "@rocket.chat/ui-video-conf": 3.0.0-rc.7 "@tanstack/react-query": "*" react: "*" react-dom: "*" @@ -8379,7 +8276,7 @@ __metadata: version: 0.0.0-use.local resolution: "@rocket.chat/gazzodown@workspace:packages/gazzodown" dependencies: - "@babel/core": ~7.22.9 + "@babel/core": ~7.22.20 "@rocket.chat/core-typings": "workspace:^" "@rocket.chat/css-in-js": next "@rocket.chat/fuselage": ^0.37.1 @@ -8397,15 +8294,15 @@ __metadata: "@storybook/manager-webpack4": ~6.5.16 "@storybook/react": ~6.5.16 "@storybook/testing-library": ~0.0.13 - "@swc/core": ^1.3.66 - "@swc/jest": ^0.2.26 + "@swc/core": ^1.3.95 + "@swc/jest": ^0.2.29 "@testing-library/jest-dom": ^5.16.5 "@testing-library/react": ~12.1.5 - "@types/jest": ~29.5.3 - "@types/katex": ~0.16.0 - "@types/react": ~17.0.62 - "@types/react-dom": ~17.0.20 - "@types/testing-library__jest-dom": ~5.14.6 + "@types/jest": ~29.5.7 + "@types/katex": ~0.16.5 + "@types/react": ~17.0.69 + "@types/react-dom": ~17.0.22 + "@types/testing-library__jest-dom": ~5.14.9 "@typescript-eslint/eslint-plugin": ~5.60.1 "@typescript-eslint/parser": ~5.60.1 babel-loader: ^8.3.0 @@ -8413,12 +8310,12 @@ __metadata: eslint-plugin-anti-trojan-source: ~1.1.1 eslint-plugin-react: ~7.32.2 eslint-plugin-react-hooks: ~4.6.0 - eslint-plugin-storybook: ~0.6.12 + eslint-plugin-storybook: ~0.6.15 highlight.js: ^11.5.1 identity-obj-proxy: ^3.0.0 - jest: ~29.6.1 - jest-environment-jsdom: ~29.6.1 - katex: ~0.16.7 + jest: ~29.6.4 + jest-environment-jsdom: ~29.6.4 + katex: ~0.16.9 outdent: ^0.8.0 react-docgen-typescript-plugin: ~1.0.5 react-dom: ~17.0.2 @@ -8426,14 +8323,14 @@ __metadata: ts-jest: ~29.0.5 typescript: ~5.2.2 peerDependencies: - "@rocket.chat/core-typings": 6.4.5 + "@rocket.chat/core-typings": 6.6.0-develop "@rocket.chat/css-in-js": "*" "@rocket.chat/fuselage": "*" "@rocket.chat/fuselage-tokens": "*" "@rocket.chat/message-parser": "*" "@rocket.chat/styled": "*" - "@rocket.chat/ui-client": 2.0.5 - "@rocket.chat/ui-contexts": 2.0.5 + "@rocket.chat/ui-client": 3.0.0-rc.7 + "@rocket.chat/ui-contexts": 3.0.0-rc.7 katex: "*" react: "*" languageName: unknown @@ -8443,11 +8340,11 @@ __metadata: version: 0.0.0-use.local resolution: "@rocket.chat/i18n@workspace:packages/i18n" dependencies: - "@babel/core": ~7.22.10 - "@babel/preset-env": ~7.22.10 + "@babel/core": ~7.22.20 + "@babel/preset-env": ~7.22.20 babel-jest: ^29.5.0 eslint: ~8.45.0 - jest: ~29.6.1 + jest: ~29.6.4 ts-jest: ~29.0.5 tsup: ^6.7.0 typescript: ~5.2.2 @@ -8478,9 +8375,9 @@ __metadata: version: 0.0.0-use.local resolution: "@rocket.chat/jwt@workspace:packages/jwt" dependencies: - "@types/jest": ~29.5.3 + "@types/jest": ~29.5.7 eslint: ~8.45.0 - jest: ~29.6.1 + jest: ~29.6.4 jose: ^4.14.4 ts-jest: ^29.1.1 typescript: ~5.2.2 @@ -8506,15 +8403,15 @@ __metadata: "@rocket.chat/core-typings": "workspace:^" "@rocket.chat/jwt": "workspace:^" "@rocket.chat/logger": "workspace:^" - "@swc/core": ^1.3.66 - "@swc/jest": ^0.2.26 - "@types/bcrypt": ^5.0.0 - "@types/jest": ~29.5.3 - "@types/ws": ^8.5.5 + "@swc/core": ^1.3.95 + "@swc/jest": ^0.2.29 + "@types/bcrypt": ^5.0.1 + "@types/jest": ~29.5.7 + "@types/ws": ^8.5.8 bcrypt: ^5.0.1 eslint: ~8.45.0 - jest: ~29.6.1 - jest-environment-jsdom: ~29.6.1 + jest: ~29.6.4 + jest-environment-jsdom: ~29.6.4 jest-websocket-mock: ^2.4.0 ts-jest: ~29.0.5 typescript: ^5.2.2 @@ -8525,9 +8422,9 @@ __metadata: version: 0.0.0-use.local resolution: "@rocket.chat/livechat@workspace:packages/livechat" dependencies: - "@babel/eslint-parser": ~7.22.9 - "@babel/preset-env": ~7.22.9 - "@babel/preset-typescript": ~7.22.5 + "@babel/eslint-parser": ~7.22.15 + "@babel/preset-env": ~7.22.20 + "@babel/preset-typescript": ~7.22.15 "@rocket.chat/core-typings": "workspace:^" "@rocket.chat/ddp-client": "workspace:^" "@rocket.chat/eslint-config": "workspace:^" @@ -8542,10 +8439,10 @@ __metadata: "@storybook/addon-postcss": ~2.0.0 "@storybook/preact": ~6.5.16 "@storybook/theming": ~6.5.16 - "@types/crypto-js": ~4.1.1 + "@types/crypto-js": ~4.1.3 "@types/mini-css-extract-plugin": ~1.4.3 "@types/webpack": ^5.28.4 - "@types/webpack-bundle-analyzer": ^4 + "@types/webpack-bundle-analyzer": ^4.6.2 "@types/webpack-dev-server": ~4.7.2 "@types/whatwg-fetch": ~0.0.33 "@typescript-eslint/eslint-plugin": ~5.60.1 @@ -8568,7 +8465,7 @@ __metadata: history: ~5.3.0 html-webpack-plugin: ^5.5.3 husky: ^4.3.8 - i18next: ~23.4.5 + i18next: ~23.4.9 if-env: ^1.0.4 image-webpack-loader: ~8.1.0 lorem-ipsum: ^2.0.8 @@ -8583,14 +8480,14 @@ __metadata: postcss-ie11-supports: ^0.1.3 postcss-loader: ^3.0.0 postcss-logical: ^4.0.2 - postcss-scss: ^4.0.6 + postcss-scss: ^4.0.9 postcss-selector-not: ^4.0.1 preact: 10.15.1 preact-router: ^3.2.1 query-string: ^7.1.3 react-dom: ~17.0.2 react-hook-form: ~7.45.4 - react-i18next: ~13.2.1 + react-i18next: ~13.2.2 rimraf: ^3.0.2 sass: ~1.62.1 sass-loader: ~10.4.1 @@ -8603,10 +8500,10 @@ __metadata: typescript: ~5.2.2 url-loader: ^4.1.1 webpack: ^5.89.0 - webpack-bundle-analyzer: ^4.9.0 + webpack-bundle-analyzer: ^4.9.1 webpack-cli: ^5.1.4 webpack-dev-server: ~4.13.3 - whatwg-fetch: ^3.6.2 + whatwg-fetch: ^3.6.19 peerDependencies: "@rocket.chat/fuselage-tokens": "*" "@rocket.chat/logo": "*" @@ -8618,12 +8515,12 @@ __metadata: resolution: "@rocket.chat/log-format@workspace:packages/log-format" dependencies: "@types/chalk": ^2.2.0 - "@types/ejson": ^2.2.0 - "@types/jest": ~29.5.3 + "@types/ejson": ^2.2.1 + "@types/jest": ~29.5.7 chalk: ^4.0.0 ejson: ^2.2.3 eslint: ~8.45.0 - jest: ~29.6.1 + jest: ~29.6.4 ts-jest: ~29.0.5 typescript: ~5.2.2 languageName: unknown @@ -8634,9 +8531,9 @@ __metadata: resolution: "@rocket.chat/logger@workspace:packages/logger" dependencies: "@rocket.chat/emitter": next - "@types/jest": ~29.5.3 + "@types/jest": ~29.5.7 eslint: ~8.45.0 - jest: ~29.6.1 + jest: ~29.6.4 pino: ^8.15.0 ts-jest: ~29.0.5 typescript: ~5.2.2 @@ -8684,14 +8581,14 @@ __metadata: resolution: "@rocket.chat/meteor@workspace:apps/meteor" dependencies: "@axe-core/playwright": ^4.7.3 - "@babel/core": ~7.22.9 - "@babel/eslint-parser": ~7.22.9 + "@babel/core": ~7.22.20 + "@babel/eslint-parser": ~7.22.15 "@babel/plugin-proposal-nullish-coalescing-operator": ~7.18.6 "@babel/plugin-proposal-optional-chaining": ~7.21.0 - "@babel/preset-env": ~7.22.9 - "@babel/preset-react": ~7.22.5 - "@babel/register": ~7.22.5 - "@babel/runtime": ~7.22.6 + "@babel/preset-env": ~7.22.20 + "@babel/preset-react": ~7.22.15 + "@babel/register": ~7.22.15 + "@babel/runtime": ~7.22.15 "@bugsnag/js": ~7.20.2 "@bugsnag/plugin-react": ~7.19.0 "@faker-js/faker": ~8.0.2 @@ -8704,7 +8601,7 @@ __metadata: "@nivo/pie": 0.80.0 "@playwright/test": ^1.37.1 "@react-aria/color": ^3.0.0-beta.15 - "@react-pdf/renderer": ^3.1.12 + "@react-pdf/renderer": ^3.1.14 "@rocket.chat/account-utils": "workspace:^" "@rocket.chat/agenda": "workspace:^" "@rocket.chat/api-client": "workspace:^" @@ -8773,89 +8670,89 @@ __metadata: "@storybook/addons": ~6.5.16 "@storybook/react": ~6.5.16 "@storybook/testing-library": 0.0.13 - "@swc/core": ^1.3.66 - "@swc/jest": ^0.2.26 + "@swc/core": ^1.3.95 + "@swc/jest": ^0.2.29 "@tanstack/react-query": ^4.16.1 "@tanstack/react-query-devtools": ^4.19.1 "@testing-library/react": ~12.1.5 "@testing-library/react-hooks": ^8.0.1 "@testing-library/user-event": ~13.5.0 - "@types/adm-zip": ^0.5.0 - "@types/archiver": ^5.3.2 - "@types/bad-words": ^3.0.1 - "@types/bcrypt": ^5.0.0 - "@types/body-parser": ^1.19.2 - "@types/busboy": ^1.5.0 - "@types/chai": ^4.3.5 - "@types/chai-as-promised": ^7.1.5 - "@types/chai-datetime": 0.0.37 - "@types/chai-dom": 0.0.13 - "@types/chai-spies": ~1.0.3 + "@types/adm-zip": ^0.5.3 + "@types/archiver": ^5.3.4 + "@types/bad-words": ^3.0.2 + "@types/bcrypt": ^5.0.1 + "@types/body-parser": ^1.19.4 + "@types/busboy": ^1.5.2 + "@types/chai": ^4.3.9 + "@types/chai-as-promised": ^7.1.7 + "@types/chai-datetime": 0.0.38 + "@types/chai-dom": 1.11.2 + "@types/chai-spies": ~1.0.5 "@types/clipboard": ^2.0.7 - "@types/codemirror": ^5.60.8 - "@types/cookie": ^0.5.1 - "@types/cookie-parser": ^1.4.3 - "@types/cors": ^2.8.13 - "@types/cssom": ^0.4.1 + "@types/codemirror": ^5.60.12 + "@types/cookie": ^0.5.3 + "@types/cookie-parser": ^1.4.5 + "@types/cors": ^2.8.15 + "@types/cssom": ^0.4.2 "@types/dompurify": ^2.3.3 - "@types/ejson": ^2.2.0 - "@types/express": ^4.17.17 + "@types/ejson": ^2.2.1 + "@types/express": ^4.17.20 "@types/express-rate-limit": ^5.1.3 - "@types/fibers": ^3.1.1 - "@types/google-libphonenumber": ^7.4.23 - "@types/gravatar": ^1.8.3 + "@types/fibers": ^3.1.3 + "@types/google-libphonenumber": ^7.4.29 + "@types/gravatar": ^1.8.5 "@types/he": ^1.1.2 - "@types/i18next-sprintf-postprocessor": ^0.2.0 - "@types/imap": ^0.8.37 + "@types/i18next-sprintf-postprocessor": ^0.2.2 + "@types/imap": ^0.8.39 "@types/jsdom": ^16.2.15 - "@types/jsdom-global": ^3.0.4 - "@types/jsrsasign": ^10.5.8 + "@types/jsdom-global": ^3.0.6 + "@types/jsrsasign": ^10.5.11 "@types/katex": ^0.14.0 - "@types/later": ^1.2.7 + "@types/later": ^1.2.8 "@types/ldapjs": ^2.2.5 - "@types/less": ~3.0.3 - "@types/lodash": ^4.14.195 - "@types/lodash.debounce": ^4.0.7 - "@types/lodash.get": ^4.4.7 - "@types/mailparser": ^3.4.0 + "@types/less": ~3.0.5 + "@types/lodash": ^4.14.200 + "@types/lodash.debounce": ^4.0.8 + "@types/lodash.get": ^4.4.8 + "@types/mailparser": ^3.4.3 "@types/marked": ^4.0.8 - "@types/meteor-collection-hooks": ^0.8.6 + "@types/meteor-collection-hooks": ^0.8.8 "@types/mkdirp": ^1.0.2 "@types/mocha": "github:whitecolor/mocha-types" "@types/moment-timezone": ^0.5.30 - "@types/node": ^14.18.51 - "@types/node-gcm": ^1.0.1 - "@types/node-rsa": ^1.1.1 - "@types/nodemailer": ^6.4.8 - "@types/oauth2-server": ^3.0.13 - "@types/object-path": ^0.11.1 - "@types/parseurl": ^1.3.1 - "@types/photoswipe": ^4.1.2 - "@types/prometheus-gc-stats": ^0.6.2 - "@types/proxy-from-env": ^1.0.1 - "@types/proxyquire": ^1.3.28 - "@types/psl": ^1.1.0 - "@types/react": ~17.0.62 - "@types/react-dom": ~17.0.20 - "@types/rewire": ^2.5.28 - "@types/sanitize-html": ^2.9.0 + "@types/node": ^14.18.63 + "@types/node-gcm": ^1.0.3 + "@types/node-rsa": ^1.1.3 + "@types/nodemailer": ^6.4.13 + "@types/oauth2-server": ^3.0.15 + "@types/object-path": ^0.11.3 + "@types/parseurl": ^1.3.2 + "@types/photoswipe": ^4.1.5 + "@types/prometheus-gc-stats": ^0.6.3 + "@types/proxy-from-env": ^1.0.3 + "@types/proxyquire": ^1.3.30 + "@types/psl": ^1.1.2 + "@types/react": ~17.0.69 + "@types/react-dom": ~17.0.22 + "@types/rewire": ^2.5.29 + "@types/sanitize-html": ^2.9.3 "@types/semver": ^7.3.10 "@types/sharp": ^0.30.5 - "@types/sinon": ^10.0.15 - "@types/speakeasy": ^2.0.7 - "@types/strict-uri-encode": ^2.0.0 + "@types/sinon": ^10.0.20 + "@types/speakeasy": ^2.0.9 + "@types/strict-uri-encode": ^2.0.1 "@types/string-strip-html": ^5.0.1 - "@types/supertest": ^2.0.12 - "@types/textarea-caret": ^3.0.1 - "@types/ua-parser-js": ^0.7.36 - "@types/use-subscription": ^1.0.0 - "@types/use-sync-external-store": ^0.0.3 + "@types/supertest": ^2.0.15 + "@types/textarea-caret": ^3.0.2 + "@types/ua-parser-js": ^0.7.38 + "@types/use-subscription": ^1.0.1 + "@types/use-sync-external-store": ^0.0.5 "@types/uuid": ^8.3.4 - "@types/xml-crypto": ~1.4.2 - "@types/xml-encryption": ~1.2.1 + "@types/xml-crypto": ~1.4.4 + "@types/xml-encryption": ~1.2.3 "@typescript-eslint/eslint-plugin": ~5.60.1 "@typescript-eslint/parser": ~5.60.1 - "@xmldom/xmldom": ^0.8.8 + "@xmldom/xmldom": ^0.8.10 adm-zip: 0.5.10 ajv: ^8.11.0 ajv-formats: ~2.1.1 @@ -8875,7 +8772,7 @@ __metadata: bson: ^4.6.4 busboy: ^1.6.0 bytebuffer: 5.0.1 - chai: ^4.3.7 + chai: ^4.3.10 chai-as-promised: ^7.1.1 chai-datetime: ^1.8.0 chai-dom: ^1.11.0 @@ -8884,7 +8781,7 @@ __metadata: change-case: ^4.1.2 chart.js: ^3.8.0 clipboard: ^2.0.11 - codemirror: ^5.65.13 + codemirror: ^5.65.15 colorette: ^2.0.20 colors: ^1.4.0 connect: ^3.7.0 @@ -8909,11 +8806,11 @@ __metadata: eslint-plugin-anti-trojan-source: ~1.1.1 eslint-plugin-import: ~2.26.0 eslint-plugin-no-floating-promise: ~1.0.2 - eslint-plugin-playwright: ~0.15.0 + eslint-plugin-playwright: ~0.15.3 eslint-plugin-prettier: ~4.2.1 eslint-plugin-react: ~7.32.2 eslint-plugin-react-hooks: ~4.6.0 - eslint-plugin-testing-library: ~5.11.0 + eslint-plugin-testing-library: ~5.11.1 eslint-plugin-you-dont-need-lodash-underscore: ~6.12.0 eventemitter3: ^4.0.7 exif-be-gone: ^1.3.2 @@ -8926,8 +8823,8 @@ __metadata: file-type: ^16.5.4 filenamify: ^4.3.0 filesize: 9.0.11 - generate-password: ^1.7.0 - google-libphonenumber: ^3.2.32 + generate-password: ^1.7.1 + google-libphonenumber: ^3.2.33 googleapis: ^104.0.0 gravatar: ^1.8.2 he: ^1.2.0 @@ -8935,7 +8832,7 @@ __metadata: hljs9: "npm:highlight.js@^9.18.5" http-proxy-agent: ^5.0.0 human-interval: ^2.0.1 - i18next: ~23.4.5 + i18next: ~23.4.9 i18next-http-backend: ^1.4.5 i18next-sprintf-postprocessor: ^0.2.2 iconv-lite: ^0.6.3 @@ -8944,14 +8841,14 @@ __metadata: ip-range-check: ^0.2.0 is-svg: ^4.3.2 isolated-vm: 4.4.2 - jest: ~29.6.1 + jest: ~29.6.4 jquery: ^3.6.0 jschardet: ^3.0.0 jsdom: ^16.7.0 jsdom-global: ^3.0.2 jsrsasign: ^10.5.24 juice: ^8.0.0 - katex: ^0.16.7 + katex: ~0.16.9 ldap-escape: ^2.0.6 ldapjs: ^2.3.3 limax: ^3.0.0 @@ -8967,7 +8864,7 @@ __metadata: mime-type: ^4.0.0 mkdirp: ^1.0.4 mocha: ^9.2.2 - moleculer: ^0.14.29 + moleculer: ^0.14.31 moment: ^2.29.4 moment-timezone: ^0.5.43 mongo-message-queue: ^1.0.0 @@ -8989,8 +8886,8 @@ __metadata: photoswipe: ^4.1.3 pino: ^8.15.0 pino-pretty: ^7.6.1 - playwright-qase-reporter: ^1.2.0-alpha.3 - postcss: ~8.4.24 + playwright-qase-reporter: ^1.2.1 + postcss: ~8.4.31 postcss-custom-properties: ^11.0.0 postcss-easy-import: ^3.0.0 postcss-load-config: ^3.1.4 @@ -9000,27 +8897,27 @@ __metadata: postis: ^2.2.0 prettier: ~2.8.8 prom-client: ^14.0.1 - prometheus-gc-stats: ^0.6.4 + prometheus-gc-stats: ^0.6.5 proxy-from-env: ^1.1.0 proxyquire: ^2.1.3 psl: ^1.8.0 query-string: ^7.1.3 queue-fifo: ^0.2.6 - rc-scrollbars: ^1.1.5 + rc-scrollbars: ^1.1.6 react: ~17.0.2 react-aria: ~3.23.1 react-docgen-typescript-plugin: ^1.0.5 react-dom: ~17.0.2 react-error-boundary: ^3.1.4 react-hook-form: ~7.45.4 - react-i18next: ~13.2.1 + react-i18next: ~13.2.2 react-keyed-flatten-children: ^1.3.0 react-virtuoso: ^1.11.1 redis: ^4.0.6 rewire: ^6.0.0 sanitize-html: ^2.7.2 semver: ^7.3.7 - sharp: ^0.30.7 + sharp: ^0.32.6 sinon: ^14.0.2 sip.js: ^0.20.1 sodium-native: ^3.3.0 @@ -9043,7 +8940,7 @@ __metadata: twilio: ^3.76.1 twit: ^2.2.11 typescript: ~5.2.2 - ua-parser-js: ^1.0.35 + ua-parser-js: ^1.0.37 underscore: ^1.13.6 universal-perf-hooks: ^1.0.1 url-polyfill: ^1.1.12 @@ -9051,7 +8948,7 @@ __metadata: use-sync-external-store: ^1.2.0 uuid: ^8.3.2 vm2: ^3.9.19 - webdav: ^4.11.2 + webdav: ^4.11.3 xml-crypto: ~3.1.0 xml-encryption: ~3.0.2 xml2js: ~0.5.0 @@ -9067,12 +8964,12 @@ __metadata: "@rocket.chat/ui-contexts": "workspace:*" "@storybook/react": ~6.5.16 "@tanstack/react-query": ^4.16.1 - "@types/jest": ~29.5.3 + "@types/jest": ~29.5.7 eslint: ~8.45.0 - i18next: ~23.4.5 - jest: ~29.6.1 + i18next: ~23.4.9 + jest: ~29.6.4 react: ~17.0.2 - react-i18next: ~13.2.1 + react-i18next: ~13.2.2 ts-jest: ~29.0.5 typescript: ~5.2.2 peerDependencies: @@ -9086,10 +8983,10 @@ __metadata: resolution: "@rocket.chat/model-typings@workspace:packages/model-typings" dependencies: "@rocket.chat/core-typings": "workspace:^" - "@types/jest": ~29.5.3 - "@types/node-rsa": ^1.1.1 + "@types/jest": ~29.5.7 + "@types/node-rsa": ^1.1.3 eslint: ~8.45.0 - jest: ~29.6.1 + jest: ~29.6.4 mongodb: ^4.17.1 ts-jest: ~29.0.5 typescript: ~5.2.2 @@ -9101,9 +8998,9 @@ __metadata: resolution: "@rocket.chat/models@workspace:packages/models" dependencies: "@rocket.chat/model-typings": "workspace:^" - "@types/jest": ~29.5.3 + "@types/jest": ~29.5.7 eslint: ~8.45.0 - jest: ~29.6.1 + jest: ~29.6.4 ts-jest: ~29.0.5 typescript: ~5.2.2 languageName: unknown @@ -9133,14 +9030,14 @@ __metadata: "@rocket.chat/rest-typings": "workspace:^" "@rocket.chat/string-helpers": next "@rocket.chat/tools": "workspace:^" - "@types/jest": ~29.5.3 - "@types/node": ^14.18.51 + "@types/jest": ~29.5.7 + "@types/node": ^14.18.63 ejson: ^2.2.3 emoji-toolkit: ^7.0.1 eslint: ~8.45.0 eventemitter3: ^4.0.7 fibers: ^5.0.3 - jest: ~29.6.1 + jest: ~29.6.4 mem: ^8.1.1 moment-timezone: ^0.5.43 mongo-message-queue: ^1.0.0 @@ -9155,7 +9052,7 @@ __metadata: version: 0.0.0-use.local resolution: "@rocket.chat/omnichannel-transcript@workspace:ee/apps/omnichannel-transcript" dependencies: - "@react-pdf/renderer": ^3.1.12 + "@react-pdf/renderer": ^3.1.14 "@rocket.chat/core-services": "workspace:^" "@rocket.chat/core-typings": "workspace:^" "@rocket.chat/emitter": next @@ -9167,9 +9064,9 @@ __metadata: "@rocket.chat/pdf-worker": "workspace:^" "@rocket.chat/tools": "workspace:^" "@rocket.chat/ui-contexts": "workspace:^" - "@types/gc-stats": ^1 - "@types/node": ^14.18.51 - "@types/polka": ^0.5.4 + "@types/gc-stats": ^1.4.2 + "@types/node": ^14.18.63 + "@types/polka": ^0.5.6 ejson: ^2.2.3 emoji-toolkit: ^7.0.1 eslint: ~8.45.0 @@ -9178,7 +9075,7 @@ __metadata: fibers: ^5.0.3 gc-stats: ^1.4.0 mem: ^8.1.1 - moleculer: ^0.14.29 + moleculer: ^0.14.31 moment-timezone: ^0.5.43 mongo-message-queue: ^1.0.0 mongodb: ^4.17.1 @@ -9215,11 +9112,11 @@ __metadata: version: 0.0.0-use.local resolution: "@rocket.chat/password-policies@workspace:packages/password-policies" dependencies: - "@types/chai": ^4.3.5 - "@types/jest": ~29.5.3 - chai: ^4.3.7 + "@types/chai": ^4.3.9 + "@types/jest": ~29.5.7 + chai: ^4.3.10 eslint: ~8.45.0 - jest: ~29.6.1 + jest: ~29.6.4 ts-jest: ~29.0.5 typescript: ~5.2.2 languageName: unknown @@ -9229,23 +9126,23 @@ __metadata: version: 0.0.0-use.local resolution: "@rocket.chat/pdf-worker@workspace:ee/packages/pdf-worker" dependencies: - "@react-pdf/renderer": ^3.1.12 + "@react-pdf/renderer": ^3.1.14 "@rocket.chat/core-typings": "workspace:^" "@rocket.chat/fuselage-tokens": ^0.32.0 "@storybook/addon-essentials": ~6.5.16 "@storybook/react": ~6.5.16 "@testing-library/jest-dom": ^5.16.5 "@testing-library/react": ~13.4.0 - "@types/emojione": ^2.2.6 - "@types/jest": ~29.5.3 - "@types/react": ~17.0.62 - "@types/react-dom": ~17.0.20 - "@types/testing-library__jest-dom": ~5.14.6 + "@types/emojione": ^2.2.8 + "@types/jest": ~29.5.7 + "@types/react": ~17.0.69 + "@types/react-dom": ~17.0.22 + "@types/testing-library__jest-dom": ~5.14.9 emoji-assets: ^7.0.1 emoji-toolkit: ^7.0.1 eslint: ~8.45.0 - jest: ~29.6.1 - jest-environment-jsdom: ~29.6.1 + jest: ~29.6.4 + jest-environment-jsdom: ~29.6.4 moment: ^2.29.4 moment-timezone: ^0.5.43 react: ^18.2.0 @@ -9259,9 +9156,9 @@ __metadata: version: 0.0.0-use.local resolution: "@rocket.chat/poplib@workspace:packages/node-poplib" dependencies: - "@types/jest": ~29.5.3 + "@types/jest": ~29.5.7 eslint: ~8.45.0 - jest: ~29.6.1 + jest: ~29.6.4 ts-jest: ~29.0.5 typescript: ~5.2.2 languageName: unknown @@ -9279,9 +9176,9 @@ __metadata: "@rocket.chat/models": "workspace:^" "@rocket.chat/presence": "workspace:^" "@rocket.chat/string-helpers": next - "@types/gc-stats": ^1 - "@types/node": ^14.18.51 - "@types/polka": ^0.5.4 + "@types/gc-stats": ^1.4.2 + "@types/node": ^14.18.63 + "@types/polka": ^0.5.6 ejson: ^2.2.3 eslint: ~8.45.0 event-loop-stats: ^1.4.1 @@ -9289,7 +9186,7 @@ __metadata: fibers: ^5.0.3 gc-stats: ^1.4.0 mem: ^8.1.1 - moleculer: ^0.14.29 + moleculer: ^0.14.31 mongodb: ^4.17.1 nats: ^2.4.0 pino: ^8.15.0 @@ -9303,19 +9200,19 @@ __metadata: version: 0.0.0-use.local resolution: "@rocket.chat/presence@workspace:ee/packages/presence" dependencies: - "@babel/core": ~7.22.9 - "@babel/preset-env": ~7.22.9 - "@babel/preset-typescript": ~7.22.5 + "@babel/core": ~7.22.20 + "@babel/preset-env": ~7.22.20 + "@babel/preset-typescript": ~7.22.15 "@rocket.chat/apps-engine": 1.41.0-alpha.290 "@rocket.chat/core-services": "workspace:^" "@rocket.chat/core-typings": "workspace:^" "@rocket.chat/eslint-config": "workspace:^" "@rocket.chat/models": "workspace:^" "@rocket.chat/rest-typings": "workspace:^" - "@types/node": ^14.18.51 + "@types/node": ^14.18.63 babel-jest: ^29.0.3 eslint: ~8.45.0 - jest: ~29.6.1 + jest: ~29.6.4 mongodb: ^4.17.1 typescript: ~5.2.2 languageName: unknown @@ -9334,7 +9231,7 @@ __metadata: version: 0.0.0-use.local resolution: "@rocket.chat/queue-worker@workspace:ee/apps/queue-worker" dependencies: - "@react-pdf/renderer": ^3.1.12 + "@react-pdf/renderer": ^3.1.14 "@rocket.chat/core-services": "workspace:^" "@rocket.chat/core-typings": "workspace:^" "@rocket.chat/emitter": next @@ -9343,9 +9240,9 @@ __metadata: "@rocket.chat/model-typings": "workspace:^" "@rocket.chat/models": "workspace:^" "@rocket.chat/omnichannel-services": "workspace:^" - "@types/gc-stats": ^1 - "@types/node": ^14.18.51 - "@types/polka": ^0.5.4 + "@types/gc-stats": ^1.4.2 + "@types/node": ^14.18.63 + "@types/polka": ^0.5.6 ejson: ^2.2.3 emoji-toolkit: ^7.0.1 eslint: ~8.45.0 @@ -9354,7 +9251,7 @@ __metadata: fibers: ^5.0.3 gc-stats: ^1.4.0 mem: ^8.1.1 - moleculer: ^0.14.29 + moleculer: ^0.14.31 moment-timezone: ^0.5.43 mongo-message-queue: ^1.0.0 mongodb: ^4.17.1 @@ -9370,14 +9267,14 @@ __metadata: version: 0.0.0-use.local resolution: "@rocket.chat/random@workspace:packages/random" dependencies: - "@babel/core": ~7.22.9 - "@babel/preset-env": ~7.22.9 + "@babel/core": ~7.22.20 + "@babel/preset-env": ~7.22.20 "@rocket.chat/eslint-config": "workspace:^" "@typescript-eslint/eslint-plugin": ~5.60.1 "@typescript-eslint/parser": ~5.60.1 eslint: ~8.45.0 - jest: ~29.6.1 - jest-environment-jsdom: ~29.6.1 + jest: ~29.6.4 + jest-environment-jsdom: ~29.6.4 ts-jest: ~29.0.5 typescript: ~5.2.2 languageName: unknown @@ -9387,12 +9284,12 @@ __metadata: version: 0.0.0-use.local resolution: "@rocket.chat/release-action@workspace:packages/release-action" dependencies: - "@actions/core": ^1.10.0 + "@actions/core": ^1.10.1 "@actions/exec": ^1.1.1 "@actions/github": ^5.1.1 "@octokit/plugin-throttling": ^6.0.0 "@rocket.chat/eslint-config": "workspace:^" - "@types/node": ^16.18.36 + "@types/node": ^16.18.60 eslint: ~8.45.0 mdast-util-to-string: 2.0.0 remark-parse: 9.0.0 @@ -9413,12 +9310,12 @@ __metadata: "@rocket.chat/license": "workspace:^" "@rocket.chat/message-parser": next "@rocket.chat/ui-kit": ^0.32.1 - "@types/jest": ~29.5.3 + "@types/jest": ~29.5.7 ajv: ^8.11.0 ajv-formats: ^2.1.1 eslint: ~8.45.0 - jest: ~29.6.1 - jest-environment-jsdom: ~29.6.1 + jest: ~29.6.4 + jest-environment-jsdom: ~29.6.4 mongodb: ^4.17.1 ts-jest: ~29.0.5 typescript: ~5.2.2 @@ -9443,9 +9340,9 @@ __metadata: resolution: "@rocket.chat/server-cloud-communication@workspace:packages/server-cloud-communication" dependencies: "@rocket.chat/license": "workspace:^" - "@types/jest": ~29.5.3 + "@types/jest": ~29.5.7 eslint: ~8.45.0 - jest: ~29.6.1 + jest: ~29.6.4 ts-jest: ~29.0.5 typescript: ~5.1.6 languageName: unknown @@ -9455,12 +9352,12 @@ __metadata: version: 0.0.0-use.local resolution: "@rocket.chat/server-fetch@workspace:packages/server-fetch" dependencies: - "@types/jest": ~29.5.3 - "@types/proxy-from-env": ^1.0.1 + "@types/jest": ~29.5.7 + "@types/proxy-from-env": ^1.0.3 eslint: ~8.45.0 http-proxy-agent: ^5.0.0 https-proxy-agent: ^5.0.1 - jest: ~29.6.1 + jest: ~29.6.4 node-fetch: 2.3.0 proxy-from-env: ^1.1.0 ts-jest: ~29.0.5 @@ -9472,13 +9369,13 @@ __metadata: version: 0.0.0-use.local resolution: "@rocket.chat/sha256@workspace:packages/sha256" dependencies: - "@babel/core": ~7.22.9 - "@babel/preset-env": ~7.22.9 + "@babel/core": ~7.22.20 + "@babel/preset-env": ~7.22.20 "@rocket.chat/eslint-config": "workspace:^" "@typescript-eslint/eslint-plugin": ~5.60.1 "@typescript-eslint/parser": ~5.60.1 eslint: ~8.45.0 - jest: ~29.6.1 + jest: ~29.6.4 ts-jest: ~29.0.5 typescript: ~5.2.2 languageName: unknown @@ -9497,10 +9394,10 @@ __metadata: "@rocket.chat/models": "workspace:^" "@rocket.chat/rest-typings": "workspace:^" "@rocket.chat/string-helpers": next - "@types/bcrypt": ^5.0.0 - "@types/gc-stats": ^1 - "@types/node": ^14.18.51 - "@types/polka": ^0.5.4 + "@types/bcrypt": ^5.0.1 + "@types/gc-stats": ^1.4.2 + "@types/node": ^14.18.63 + "@types/polka": ^0.5.6 ejson: ^2.2.3 eslint: ~8.45.0 event-loop-stats: ^1.4.1 @@ -9508,7 +9405,7 @@ __metadata: fibers: ^5.0.3 gc-stats: ^1.4.0 mem: ^8.1.1 - moleculer: ^0.14.29 + moleculer: ^0.14.31 mongodb: ^4.17.1 nats: ^2.4.0 pino: ^8.15.0 @@ -9554,13 +9451,13 @@ __metadata: languageName: node linkType: hard -"@rocket.chat/tools@workspace:^, @rocket.chat/tools@workspace:packages/tools": +"@rocket.chat/tools@workspace:^, @rocket.chat/tools@workspace:packages/tools, @rocket.chat/tools@workspace:~": version: 0.0.0-use.local resolution: "@rocket.chat/tools@workspace:packages/tools" dependencies: - "@types/jest": ~29.5.3 + "@types/jest": ~29.5.7 eslint: ~8.45.0 - jest: ~29.6.1 + jest: ~29.6.4 moment-timezone: ^0.5.43 ts-jest: ~29.0.5 typescript: ~5.2.2 @@ -9571,7 +9468,7 @@ __metadata: version: 0.0.0-use.local resolution: "@rocket.chat/ui-client@workspace:packages/ui-client" dependencies: - "@babel/core": ~7.22.9 + "@babel/core": ~7.22.20 "@rocket.chat/css-in-js": next "@rocket.chat/fuselage": ^0.37.1 "@rocket.chat/fuselage-hooks": ^0.32.1 @@ -9588,21 +9485,21 @@ __metadata: "@storybook/manager-webpack4": ~6.5.16 "@storybook/react": ~6.5.16 "@storybook/testing-library": ~0.0.13 - "@swc/jest": ^0.2.26 + "@swc/jest": ^0.2.29 "@testing-library/jest-dom": ~5.16.5 - "@testing-library/react": ^12.1.2 + "@testing-library/react": ^12.1.5 "@testing-library/react-hooks": ^8.0.1 - "@types/babel__core": ~7.20.1 - "@types/jest": ~29.5.3 - "@types/react": ~17.0.62 - "@types/react-dom": ~17.0.20 + "@types/babel__core": ~7.20.3 + "@types/jest": ~29.5.7 + "@types/react": ~17.0.69 + "@types/react-dom": ~17.0.22 eslint: ~8.45.0 eslint-plugin-anti-trojan-source: ~1.1.1 eslint-plugin-react: ~7.32.2 eslint-plugin-react-hooks: ~4.6.0 - eslint-plugin-storybook: ~0.6.12 - eslint-plugin-testing-library: ~5.11.0 - jest: ~29.6.1 + eslint-plugin-storybook: ~0.6.15 + eslint-plugin-testing-library: ~5.11.1 + jest: ~29.6.4 react: ^17.0.2 react-dom: ^17.0.2 react-hook-form: ~7.45.4 @@ -9613,7 +9510,7 @@ __metadata: "@rocket.chat/fuselage": "*" "@rocket.chat/fuselage-hooks": "*" "@rocket.chat/icons": "*" - "@rocket.chat/ui-contexts": 2.0.5 + "@rocket.chat/ui-contexts": 3.0.0-rc.7 react: ~17.0.2 languageName: unknown linkType: soft @@ -9622,7 +9519,7 @@ __metadata: version: 0.0.0-use.local resolution: "@rocket.chat/ui-composer@workspace:packages/ui-composer" dependencies: - "@babel/core": ~7.22.9 + "@babel/core": ~7.22.20 "@rocket.chat/eslint-config": "workspace:^" "@rocket.chat/fuselage": ^0.37.1 "@rocket.chat/icons": ^0.32.0 @@ -9633,13 +9530,13 @@ __metadata: "@storybook/manager-webpack4": ~6.5.16 "@storybook/react": ~6.5.16 "@storybook/testing-library": ~0.0.13 - "@types/babel__core": ~7.20.1 - "@types/jest": ~29.5.3 + "@types/babel__core": ~7.20.3 + "@types/jest": ~29.5.7 eslint: ~8.45.0 eslint-plugin-react: ~7.32.2 eslint-plugin-react-hooks: ~4.6.0 - eslint-plugin-storybook: ~0.6.12 - jest: ~29.6.1 + eslint-plugin-storybook: ~0.6.15 + jest: ~29.6.4 react-docgen-typescript-plugin: ~1.0.5 ts-jest: ~29.0.5 typescript: ~5.2.2 @@ -9660,13 +9557,13 @@ __metadata: "@rocket.chat/fuselage-hooks": ^0.32.1 "@rocket.chat/password-policies": "workspace:^" "@rocket.chat/rest-typings": "workspace:^" - "@types/jest": ~29.5.3 - "@types/react": ~17.0.62 - "@types/react-dom": ~17.0.20 - "@types/use-sync-external-store": ^0.0.3 + "@types/jest": ~29.5.7 + "@types/react": ~17.0.69 + "@types/react-dom": ~17.0.22 + "@types/use-sync-external-store": ^0.0.5 eslint: ~8.45.0 eslint-plugin-react-hooks: ^4.6.0 - jest: ~29.6.1 + jest: ~29.6.4 mongodb: ^4.17.1 react: ~17.0.2 ts-jest: ~29.0.5 @@ -9709,14 +9606,14 @@ __metadata: "@storybook/manager-webpack4": ~6.5.16 "@storybook/react": ~6.5.16 "@storybook/testing-library": ~0.0.13 - "@types/jest": ~29.5.3 - "@types/react": ~17.0.62 + "@types/jest": ~29.5.7 + "@types/react": ~17.0.69 eslint: ~8.45.0 eslint-plugin-anti-trojan-source: ~1.1.1 eslint-plugin-react: ~7.32.2 eslint-plugin-react-hooks: ~4.6.0 - eslint-plugin-testing-library: ^5.11.0 - jest: ~29.6.1 + eslint-plugin-testing-library: ^5.11.1 + jest: ~29.6.4 react: ~17.0.2 react-docgen-typescript-plugin: ~1.0.5 ts-jest: ~29.0.5 @@ -9734,7 +9631,7 @@ __metadata: version: 0.0.0-use.local resolution: "@rocket.chat/ui-video-conf@workspace:packages/ui-video-conf" dependencies: - "@babel/core": ~7.22.9 + "@babel/core": ~7.22.20 "@rocket.chat/css-in-js": next "@rocket.chat/emitter": next "@rocket.chat/eslint-config": "workspace:^" @@ -9750,13 +9647,13 @@ __metadata: "@storybook/manager-webpack4": ~6.5.16 "@storybook/react": ~6.5.16 "@storybook/testing-library": ~0.0.13 - "@types/babel__core": ~7.20.1 - "@types/jest": ~29.5.3 + "@types/babel__core": ~7.20.3 + "@types/jest": ~29.5.7 eslint: ~8.45.0 eslint-plugin-react: ~7.32.2 eslint-plugin-react-hooks: ~4.6.0 - eslint-plugin-storybook: ~0.6.12 - jest: ~29.6.1 + eslint-plugin-storybook: ~0.6.15 + jest: ~29.6.4 react-docgen-typescript-plugin: ~1.0.5 ts-jest: ~29.0.5 typescript: ~5.2.2 @@ -9766,7 +9663,7 @@ __metadata: "@rocket.chat/fuselage-hooks": "*" "@rocket.chat/icons": "*" "@rocket.chat/styled": "*" - "@rocket.chat/ui-contexts": 2.0.5 + "@rocket.chat/ui-contexts": 3.0.0-rc.7 react: ^17.0.2 react-dom: ^17.0.2 languageName: unknown @@ -9790,17 +9687,17 @@ __metadata: "@rocket.chat/logo": ^0.31.28 "@rocket.chat/styled": next "@rocket.chat/ui-contexts": "workspace:~" - "@types/react": ~17.0.62 - "@types/react-beautiful-dnd": ^13.1.4 - "@types/react-dom": ~17.0.20 - "@types/use-subscription": ^1.0.0 + "@types/react": ~17.0.69 + "@types/react-beautiful-dnd": ^13.1.6 + "@types/react-dom": ~17.0.22 + "@types/use-subscription": ^1.0.1 "@typescript-eslint/eslint-plugin": ~5.60.1 "@typescript-eslint/parser": ~5.60.1 "@vitejs/plugin-react": ^4.0.0 codemirror: ^6.0.1 eslint: ~8.45.0 eslint-plugin-react-hooks: ^4.6.0 - eslint-plugin-react-refresh: ^0.4.1 + eslint-plugin-react-refresh: ^0.4.4 eslint4b-prebuilt: ^6.7.2 rc-scrollbars: ^1.1.6 react: ^17.0.2 @@ -9819,13 +9716,14 @@ __metadata: version: 0.0.0-use.local resolution: "@rocket.chat/web-ui-registration@workspace:packages/web-ui-registration" dependencies: - "@babel/core": ~7.22.10 - "@babel/preset-env": ~7.22.10 - "@babel/preset-react": ~7.22.5 - "@babel/preset-typescript": ~7.22.5 + "@babel/core": ~7.22.20 + "@babel/preset-env": ~7.22.20 + "@babel/preset-react": ~7.22.15 + "@babel/preset-typescript": ~7.22.15 "@rocket.chat/i18n": "workspace:~" "@rocket.chat/layout": next "@rocket.chat/mock-providers": "workspace:~" + "@rocket.chat/tools": "workspace:~" "@rocket.chat/ui-client": "workspace:^" "@rocket.chat/ui-contexts": "workspace:^" "@storybook/addon-actions": ~6.5.16 @@ -9834,23 +9732,24 @@ __metadata: "@storybook/builder-webpack4": ~6.5.16 "@storybook/manager-webpack4": ~6.5.16 "@storybook/react": ~6.5.16 - "@storybook/testing-library": ^0.2.0 + "@storybook/testing-library": ^0.2.2 "@tanstack/react-query": ^4.16.1 "@testing-library/react": ^13.3.0 - "@types/jest": ~29.5.3 - "@types/react": ~17.0.62 + "@types/jest": ~29.5.7 + "@types/react": ~17.0.69 babel-loader: ~8.3.0 eslint: ~8.45.0 - jest: ~29.6.1 + jest: ~29.6.4 react: ~17.0.2 react-hook-form: ~7.45.4 - react-i18next: ~13.2.1 + react-i18next: ~13.2.2 storybook-dark-mode: ~3.0.1 ts-jest: ~29.0.5 typescript: ~5.2.2 peerDependencies: "@rocket.chat/layout": "*" - "@rocket.chat/ui-contexts": 2.0.5 + "@rocket.chat/tools": "*" + "@rocket.chat/ui-contexts": 3.0.0-rc.7 "@tanstack/react-query": "*" react: "*" react-hook-form: "*" @@ -11614,14 +11513,14 @@ __metadata: languageName: node linkType: hard -"@storybook/testing-library@npm:^0.2.0": - version: 0.2.0 - resolution: "@storybook/testing-library@npm:0.2.0" +"@storybook/testing-library@npm:^0.2.2": + version: 0.2.2 + resolution: "@storybook/testing-library@npm:0.2.2" dependencies: "@testing-library/dom": ^9.0.0 - "@testing-library/user-event": ^14.0.0 + "@testing-library/user-event": ^14.4.0 ts-dedent: ^2.2.0 - checksum: 1c1c16aea6f961de344f5d43bdfd2847bc5f44df1037c2e1383312bb6b842e2c17a805670fc9cfe1a8425f9e48e240fe5d025ab3d4802a198cfe9eb6ed8e7636 + checksum: 8ccdc1fbbb3472264c56b0aaf2f1c5d273f1ae9b230a53adf9cf82bf82c1a555550894f0e8869c206fa07b1fe8423da4d56590377756c58de3ec560b35a96c46 languageName: node linkType: hard @@ -11692,90 +11591,92 @@ __metadata: languageName: node linkType: hard -"@swc/core-darwin-arm64@npm:1.3.66": - version: 1.3.66 - resolution: "@swc/core-darwin-arm64@npm:1.3.66" +"@swc/core-darwin-arm64@npm:1.3.95": + version: 1.3.95 + resolution: "@swc/core-darwin-arm64@npm:1.3.95" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@swc/core-darwin-x64@npm:1.3.66": - version: 1.3.66 - resolution: "@swc/core-darwin-x64@npm:1.3.66" +"@swc/core-darwin-x64@npm:1.3.95": + version: 1.3.95 + resolution: "@swc/core-darwin-x64@npm:1.3.95" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@swc/core-linux-arm-gnueabihf@npm:1.3.66": - version: 1.3.66 - resolution: "@swc/core-linux-arm-gnueabihf@npm:1.3.66" +"@swc/core-linux-arm-gnueabihf@npm:1.3.95": + version: 1.3.95 + resolution: "@swc/core-linux-arm-gnueabihf@npm:1.3.95" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@swc/core-linux-arm64-gnu@npm:1.3.66": - version: 1.3.66 - resolution: "@swc/core-linux-arm64-gnu@npm:1.3.66" +"@swc/core-linux-arm64-gnu@npm:1.3.95": + version: 1.3.95 + resolution: "@swc/core-linux-arm64-gnu@npm:1.3.95" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@swc/core-linux-arm64-musl@npm:1.3.66": - version: 1.3.66 - resolution: "@swc/core-linux-arm64-musl@npm:1.3.66" +"@swc/core-linux-arm64-musl@npm:1.3.95": + version: 1.3.95 + resolution: "@swc/core-linux-arm64-musl@npm:1.3.95" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@swc/core-linux-x64-gnu@npm:1.3.66": - version: 1.3.66 - resolution: "@swc/core-linux-x64-gnu@npm:1.3.66" +"@swc/core-linux-x64-gnu@npm:1.3.95": + version: 1.3.95 + resolution: "@swc/core-linux-x64-gnu@npm:1.3.95" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@swc/core-linux-x64-musl@npm:1.3.66": - version: 1.3.66 - resolution: "@swc/core-linux-x64-musl@npm:1.3.66" +"@swc/core-linux-x64-musl@npm:1.3.95": + version: 1.3.95 + resolution: "@swc/core-linux-x64-musl@npm:1.3.95" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@swc/core-win32-arm64-msvc@npm:1.3.66": - version: 1.3.66 - resolution: "@swc/core-win32-arm64-msvc@npm:1.3.66" +"@swc/core-win32-arm64-msvc@npm:1.3.95": + version: 1.3.95 + resolution: "@swc/core-win32-arm64-msvc@npm:1.3.95" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@swc/core-win32-ia32-msvc@npm:1.3.66": - version: 1.3.66 - resolution: "@swc/core-win32-ia32-msvc@npm:1.3.66" +"@swc/core-win32-ia32-msvc@npm:1.3.95": + version: 1.3.95 + resolution: "@swc/core-win32-ia32-msvc@npm:1.3.95" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@swc/core-win32-x64-msvc@npm:1.3.66": - version: 1.3.66 - resolution: "@swc/core-win32-x64-msvc@npm:1.3.66" +"@swc/core-win32-x64-msvc@npm:1.3.95": + version: 1.3.95 + resolution: "@swc/core-win32-x64-msvc@npm:1.3.95" conditions: os=win32 & cpu=x64 languageName: node linkType: hard -"@swc/core@npm:^1.3.66": - version: 1.3.66 - resolution: "@swc/core@npm:1.3.66" +"@swc/core@npm:^1.3.95": + version: 1.3.95 + resolution: "@swc/core@npm:1.3.95" dependencies: - "@swc/core-darwin-arm64": 1.3.66 - "@swc/core-darwin-x64": 1.3.66 - "@swc/core-linux-arm-gnueabihf": 1.3.66 - "@swc/core-linux-arm64-gnu": 1.3.66 - "@swc/core-linux-arm64-musl": 1.3.66 - "@swc/core-linux-x64-gnu": 1.3.66 - "@swc/core-linux-x64-musl": 1.3.66 - "@swc/core-win32-arm64-msvc": 1.3.66 - "@swc/core-win32-ia32-msvc": 1.3.66 - "@swc/core-win32-x64-msvc": 1.3.66 + "@swc/core-darwin-arm64": 1.3.95 + "@swc/core-darwin-x64": 1.3.95 + "@swc/core-linux-arm-gnueabihf": 1.3.95 + "@swc/core-linux-arm64-gnu": 1.3.95 + "@swc/core-linux-arm64-musl": 1.3.95 + "@swc/core-linux-x64-gnu": 1.3.95 + "@swc/core-linux-x64-musl": 1.3.95 + "@swc/core-win32-arm64-msvc": 1.3.95 + "@swc/core-win32-ia32-msvc": 1.3.95 + "@swc/core-win32-x64-msvc": 1.3.95 + "@swc/counter": ^0.1.1 + "@swc/types": ^0.1.5 peerDependencies: "@swc/helpers": ^0.5.0 dependenciesMeta: @@ -11802,7 +11703,14 @@ __metadata: peerDependenciesMeta: "@swc/helpers": optional: true - checksum: e6029c648ba47c522bed51a9f2fee606f82de1f9233e2e89197e43b0a4867054174ca05e825e688cdc4de332221c0da2e12ba7ba875549e8b5432aa70fe19263 + checksum: 49856ad64fa16151f7f784956c8134060c5ed612c9b3fcb79e33676c77219f61fa3bb6b9e0dd15d78c7bff92cacc0c944d2b4e60849eb93caca917a8544b1c2c + languageName: node + linkType: hard + +"@swc/counter@npm:^0.1.1": + version: 0.1.2 + resolution: "@swc/counter@npm:0.1.2" + checksum: 8427c594f1f0cf44b83885e9c8fe1e370c9db44ae96e07a37c117a6260ee97797d0709483efbcc244e77bac578690215f45b23254c4cd8a70fb25ddbb50bf33e languageName: node linkType: hard @@ -11815,15 +11723,22 @@ __metadata: languageName: node linkType: hard -"@swc/jest@npm:^0.2.26": - version: 0.2.26 - resolution: "@swc/jest@npm:0.2.26" +"@swc/jest@npm:^0.2.29": + version: 0.2.29 + resolution: "@swc/jest@npm:0.2.29" dependencies: "@jest/create-cache-key-function": ^27.4.2 jsonc-parser: ^3.2.0 peerDependencies: "@swc/core": "*" - checksum: 771821ed08cf168ca0b6307dee7689253d0af0685acd08408ac431860a7c42ace892db2cb6bb6dcfe297edbdce0f2e22d44ed4ed72d1c621be9e841cffd408a0 + checksum: 9eaad322310f34e81f67d41411a7d60663341af1bd9fb65456faa914c936d849d6f643fa3b942a187d52e71e62c33097098c639d25c2047fa874f49bf51cec76 + languageName: node + linkType: hard + +"@swc/types@npm:^0.1.5": + version: 0.1.5 + resolution: "@swc/types@npm:0.1.5" + checksum: 6aee11f62d3d805a64848e0bd5f0e0e615f958e327a9e1260056c368d7d28764d89e38bd8005a536c9bf18afbcd303edd84099d60df34a2975d62540f61df13b languageName: node linkType: hard @@ -11948,7 +11863,7 @@ __metadata: languageName: node linkType: hard -"@testing-library/react@npm:^12.1.2, @testing-library/react@npm:~12.1.5": +"@testing-library/react@npm:^12.1.5, @testing-library/react@npm:~12.1.5": version: 12.1.5 resolution: "@testing-library/react@npm:12.1.5" dependencies: @@ -11987,12 +11902,12 @@ __metadata: languageName: node linkType: hard -"@testing-library/user-event@npm:^14.0.0": - version: 14.4.3 - resolution: "@testing-library/user-event@npm:14.4.3" +"@testing-library/user-event@npm:^14.4.0": + version: 14.5.1 + resolution: "@testing-library/user-event@npm:14.5.1" peerDependencies: "@testing-library/dom": ">=7.21.4" - checksum: 852c48ea6db1c9471b18276617c84fec4320771e466cd58339a732ca3fd73ad35e5a43ae14f51af51a8d0a150dcf60fcaab049ef367871207bea8f92c4b8195e + checksum: 3e6bc9fd53dfe2f3648190193ed2fd4bca2a1bfb47f68810df3b33f05412526e5fd5c4ef9dc5375635e0f4cdf1859916867b597eed22bda1321e04242ea6c519 languageName: node linkType: hard @@ -12052,21 +11967,21 @@ __metadata: languageName: node linkType: hard -"@types/adm-zip@npm:^0.5.0": - version: 0.5.0 - resolution: "@types/adm-zip@npm:0.5.0" +"@types/adm-zip@npm:^0.5.3": + version: 0.5.3 + resolution: "@types/adm-zip@npm:0.5.3" dependencies: "@types/node": "*" - checksum: 11dd013584e47d431bdf7c115b73cd3162c1a1eca0fbb911f691c9734e904cfe4a01ac1d2d3cbf76d0a952e01fcce8a01fd6fb1c150675a29d740a7fb15325b2 + checksum: 995e21441cc6fe180f12ebf4e722bc6dbde0f9c765e57353018a0969a27cf15542c3f5451bfa1a82b958d5ed5e371fb3cbe55f934076dae22d8bf6a259a536bf languageName: node linkType: hard -"@types/archiver@npm:^5.3.2": - version: 5.3.2 - resolution: "@types/archiver@npm:5.3.2" +"@types/archiver@npm:^5.3.4": + version: 5.3.4 + resolution: "@types/archiver@npm:5.3.4" dependencies: "@types/readdir-glob": "*" - checksum: 9db5b4fdc1740fa07d08340ed827598cc6eda97406ac18a06a158670c7124d4120650a3b9cd660e9e39b42f033cf8f052566da32681e8ad91163473df88a3c4c + checksum: 4ef27b99091ada9b8f13017d5b9e6d42a439e35a7858b30e040c408e081d98d8db6307b0762500288b5da38cab9823c4756b6abae1fdd2658d42bfb09eb7c5fb languageName: node linkType: hard @@ -12084,16 +11999,16 @@ __metadata: languageName: node linkType: hard -"@types/babel__core@npm:^7, @types/babel__core@npm:^7.0.0, @types/babel__core@npm:^7.1.14, @types/babel__core@npm:~7.20.1": - version: 7.20.1 - resolution: "@types/babel__core@npm:7.20.1" +"@types/babel__core@npm:^7.0.0, @types/babel__core@npm:^7.1.14, @types/babel__core@npm:^7.20.3, @types/babel__core@npm:~7.20.3": + version: 7.20.3 + resolution: "@types/babel__core@npm:7.20.3" dependencies: "@babel/parser": ^7.20.7 "@babel/types": ^7.20.7 "@types/babel__generator": "*" "@types/babel__template": "*" "@types/babel__traverse": "*" - checksum: 9fcd9691a33074802d9057ff70b0e3ff3778f52470475b68698a0f6714fbe2ccb36c16b43dc924eb978cd8a81c1f845e5ff4699e7a47606043b539eb8c6331a8 + checksum: 8d14acc14d99b4b8bf36c00da368f6d597bd9ae3344aa7048f83f0f701b0463fa7c7bf2e50c3e4382fdbcfd1e4187b3452a0f0888b0f3ae8fad975591f7bdb94 languageName: node linkType: hard @@ -12106,10 +12021,10 @@ __metadata: languageName: node linkType: hard -"@types/babel__preset-env@npm:^7": - version: 7.9.2 - resolution: "@types/babel__preset-env@npm:7.9.2" - checksum: a905ed92a3f602384966153e74a94790425e98af54e392a7fcfb5c5ded2f2a58c49a9fa64a0cb506fbffb8169ad25b56ea87983c812a4fb880f0716668c8c085 +"@types/babel__preset-env@npm:^7.9.4": + version: 7.9.4 + resolution: "@types/babel__preset-env@npm:7.9.4" + checksum: a4580b541d4fe7bdf9ecb9695cb90827f96c75e5c807e6fcf6cbca3beeb9106019dc322b2d08de03025d57c6f3f1431d80eb3ea6d9416e90bc8ee15460efa27d languageName: node linkType: hard @@ -12132,29 +12047,29 @@ __metadata: languageName: node linkType: hard -"@types/bad-words@npm:^3.0.1": - version: 3.0.1 - resolution: "@types/bad-words@npm:3.0.1" - checksum: c700fadd2bafef153812137220466ca3148425228915ddb6e7e80bc339fa983d2ddef098cacf00196fbd7467181ae5b9747d8fd383fc5ed17f8bf5e62e89d425 +"@types/bad-words@npm:^3.0.2": + version: 3.0.2 + resolution: "@types/bad-words@npm:3.0.2" + checksum: aa40d10364b73deb5617c0b53d5a782841ddd173e6cc68bc41d48c2c95c63ac81d23e2cabeb3d686cb7d655512353ac1866135203305b820d4c60859635ba9d3 languageName: node linkType: hard -"@types/bcrypt@npm:^5.0.0": - version: 5.0.0 - resolution: "@types/bcrypt@npm:5.0.0" +"@types/bcrypt@npm:^5.0.1": + version: 5.0.1 + resolution: "@types/bcrypt@npm:5.0.1" dependencies: "@types/node": "*" - checksum: 063c32c7a519d64768dfc0169a319b8244d6a6cb50a355c93992b3c5fee1dbc236526a1111f0e7bb25abc8b0473e5f40a5edfeb8b33cad2a6ea35aa2d7d7db14 + checksum: 2419ad2e7601b2c306ce2bd8bd8d911770f1abdea780efd4e61e9329b757e47c80fbd73fc52a925a371de47247ce92f04d11bdf24b8b44754ea0ba18d06d2202 languageName: node linkType: hard -"@types/body-parser@npm:*, @types/body-parser@npm:^1.19.2": - version: 1.19.2 - resolution: "@types/body-parser@npm:1.19.2" +"@types/body-parser@npm:*, @types/body-parser@npm:^1.19.4": + version: 1.19.4 + resolution: "@types/body-parser@npm:1.19.4" dependencies: "@types/connect": "*" "@types/node": "*" - checksum: e17840c7d747a549f00aebe72c89313d09fbc4b632b949b2470c5cb3b1cb73863901ae84d9335b567a79ec5efcfb8a28ff8e3f36bc8748a9686756b6d5681f40 + checksum: 10accc30773319bd49af7d12d2cd5faf9a0293ea4764345297f26ba6ef31d5caa7609da7619584d6c61279e09b89d3ab13d28c5cb644807c5d9c722ae1454778 languageName: node linkType: hard @@ -12167,55 +12082,55 @@ __metadata: languageName: node linkType: hard -"@types/busboy@npm:^1.5.0": - version: 1.5.0 - resolution: "@types/busboy@npm:1.5.0" +"@types/busboy@npm:^1.5.2": + version: 1.5.2 + resolution: "@types/busboy@npm:1.5.2" dependencies: "@types/node": "*" - checksum: ffa7bf25c0395f6927526b7d97e70cd2df789e4ca0d231e41855fb08542fa236891ce457d83cc50cac6e5cef6be092ab80597070dcf1413f736462690a23e987 + checksum: d2cfa334e06ce0fbeb31bdac7b4ba051b85e508f4f46d016e55488a717c626e19285f0e2fae40d0183d0f676dd162ab9216613799f83d40430e1996fba4bfb2f languageName: node linkType: hard -"@types/chai-as-promised@npm:^7.1.5": - version: 7.1.5 - resolution: "@types/chai-as-promised@npm:7.1.5" +"@types/chai-as-promised@npm:^7.1.7": + version: 7.1.7 + resolution: "@types/chai-as-promised@npm:7.1.7" dependencies: "@types/chai": "*" - checksum: 7c1345c6e32513d52d8e562ec173c23161648d6b792046525f18803a9932d7b3ad3dca8f0181e3c529ec42b106099f174e34edeb184d61dc93e32c98b5132fd4 + checksum: 59199afbd91289588648e263d7f32f7d72fa9c0075f3c17b1e760e10fdc1a310c2170a392b0d17d96cfff2c51daca72839eed6d80142f9230c9784b8e08ba676 languageName: node linkType: hard -"@types/chai-datetime@npm:0.0.37": - version: 0.0.37 - resolution: "@types/chai-datetime@npm:0.0.37" +"@types/chai-datetime@npm:0.0.38": + version: 0.0.38 + resolution: "@types/chai-datetime@npm:0.0.38" dependencies: "@types/chai": "*" - checksum: c55cb13f7359f670849d0f313517d4c3f1f5ff4e82851b9643a0aeda426666e40a43b99518c02c877bc533c6180196f68fc48e077f37487e8b71f3a4b1855272 + checksum: 2c0269e91a282ef71fe5603a94b6df4c3b784e3ded25f380ed91c0d91c26d08ac33da6bde903bc9bddfec4636455378c26810947a989ef87fe37078213e350ca languageName: node linkType: hard -"@types/chai-dom@npm:0.0.13": - version: 0.0.13 - resolution: "@types/chai-dom@npm:0.0.13" +"@types/chai-dom@npm:1.11.2": + version: 1.11.2 + resolution: "@types/chai-dom@npm:1.11.2" dependencies: "@types/chai": "*" - checksum: 94820d5d086eb339af62c74c17f79640b86b1f70818e366bff943826b5d28400a4a97f1b8740ae7727f93ebe9887bc9b5a3ae4aab4a5be420f8cdb4bd5eaef0e + checksum: d59a90bf2b497797178d3a5bd17f242caaf6ee098563142fdc765a6c12786f94bc0a9b8e4023de37ef8c803198ce9562823651610b02c80f1e21a29f2ece80fd languageName: node linkType: hard -"@types/chai-spies@npm:~1.0.3": - version: 1.0.3 - resolution: "@types/chai-spies@npm:1.0.3" +"@types/chai-spies@npm:~1.0.5": + version: 1.0.5 + resolution: "@types/chai-spies@npm:1.0.5" dependencies: "@types/chai": "*" - checksum: f88b1a021c1f6c37259adf4268b00401431633027995725a49c44658b0fedf7ec09aa4e26e59fdf6564df0767a0b105b26a4a9c8a7c6acaf9ba417b06a4c9c70 + checksum: d8009e0e4bf78fdce4a6824d43a2e206ddc0c07e3869f5d55ed7a7476c5623f77d0a5f444148ce7a0b9d9f47592fe3f0c6652952e6a0f514d8603cbb2e587cd4 languageName: node linkType: hard -"@types/chai@npm:*, @types/chai@npm:^4.3.5": - version: 4.3.5 - resolution: "@types/chai@npm:4.3.5" - checksum: c8f26a88c6b5b53a3275c7f5ff8f107028e3cbb9ff26795fff5f3d9dea07106a54ce9e2dce5e40347f7c4cc35657900aaf0c83934a25a1ae12e61e0f5516e431 +"@types/chai@npm:*, @types/chai@npm:^4.3.9": + version: 4.3.9 + resolution: "@types/chai@npm:4.3.9" + checksum: 2300a2c7abd4cb590349927a759b3d0172211a69f363db06e585faf7874a47f125ef3b364cce4f6190e3668147587fc11164c791c9560cf9bce8478fb7019610 languageName: node linkType: hard @@ -12228,12 +12143,12 @@ __metadata: languageName: node linkType: hard -"@types/chart.js@npm:^2.9.37": - version: 2.9.37 - resolution: "@types/chart.js@npm:2.9.37" +"@types/chart.js@npm:^2.9.39": + version: 2.9.39 + resolution: "@types/chart.js@npm:2.9.39" dependencies: moment: ^2.10.2 - checksum: 5626a8cc3b410c9f2668ee7efd5b1b408f7de814608f83f9fdb349f59e3c7f5eb7199e73b41e6634c24b4ccb8d3846b290264df8d4224d184f63b095f82cfb94 + checksum: c19cab03143db9cabc9c7277b77a974634baa9a9554dc95a7d2996091ac88ca9d98718e701446932a4cf0b8f3c2862ad0d3f232e1deb6a9bdf72d9ef5342582d languageName: node linkType: hard @@ -12246,12 +12161,12 @@ __metadata: languageName: node linkType: hard -"@types/codemirror@npm:^5.60.8": - version: 5.60.8 - resolution: "@types/codemirror@npm:5.60.8" +"@types/codemirror@npm:^5.60.12": + version: 5.60.12 + resolution: "@types/codemirror@npm:5.60.12" dependencies: "@types/tern": "*" - checksum: bc3a63eab0308b3ef5ed2ca22afb7f1c0b8acde6477e1d569df7e93f3fe4f78754d28a3e081c72931259fe1bf906a319b54bcdeba74600b989e5558d32478496 + checksum: dff22f32ea42ccd3f9bfcf408631f94a11ffb4614ff4fa8cc55adf7da6e7ba96650533b8dd27d037242747bdaa85141e93520f84409db7bc394862a174a10e1e languageName: node linkType: hard @@ -12274,19 +12189,19 @@ __metadata: languageName: node linkType: hard -"@types/cookie-parser@npm:^1.4.3": - version: 1.4.3 - resolution: "@types/cookie-parser@npm:1.4.3" +"@types/cookie-parser@npm:^1.4.5": + version: 1.4.5 + resolution: "@types/cookie-parser@npm:1.4.5" dependencies: "@types/express": "*" - checksum: f390f3af1b1711190dee2c2ecd9af33af81fbde8d81ee820dadb6fe1e0d80c3faba40af37c6ed36fb88b04b64870f6a021f7e9edceecd17c42fe22abe0af5005 + checksum: 45855721706d6a57bb0441db11fb59db407414ea83a0000a0df80d19230447cc3bcc43c436397bfb8998ec78db222265fa8083456b00c5b5054a0c03d06f0086 languageName: node linkType: hard -"@types/cookie@npm:^0.5.1": - version: 0.5.1 - resolution: "@types/cookie@npm:0.5.1" - checksum: 9a8d60fc84797122bc399d6bd330fe5780dc7aab032321de705049ea925339f74658bfa418de483a625d51858770efef58df633ff2e20f1bdf7fbd74a52847e2 +"@types/cookie@npm:^0.5.3": + version: 0.5.3 + resolution: "@types/cookie@npm:0.5.3" + checksum: b785618f6b2fdceb6a20a17e1dfe99651b1e5c2c079f486de76dfb21b508f09d91913755e4a6dbdfe628882ea32466bb2e9318b114ce34efa5e624356494fcab languageName: node linkType: hard @@ -12297,35 +12212,35 @@ __metadata: languageName: node linkType: hard -"@types/cors@npm:^2.8.13": - version: 2.8.13 - resolution: "@types/cors@npm:2.8.13" +"@types/cors@npm:^2.8.15": + version: 2.8.15 + resolution: "@types/cors@npm:2.8.15" dependencies: "@types/node": "*" - checksum: 7ef197ea19d2e5bf1313b8416baa6f3fd6dd887fd70191da1f804f557395357dafd8bc8bed0ac60686923406489262a7c8a525b55748f7b2b8afa686700de907 + checksum: ef7b0aba4c6a4c1fe9d459bd471ebaa891a75319682c9248daa17720003d1d0d2c59de4bdb6868630596ade9b7c3c949e652d6141b14c6fe4387ffcc520d0f3f languageName: node linkType: hard -"@types/crypto-js@npm:~4.1.1": - version: 4.1.1 - resolution: "@types/crypto-js@npm:4.1.1" - checksum: ea3d6a67b69f88baeb6af96004395903d2367a41bd5cd86306da23a44dd96589749495da50974a9b01bb5163c500764c8a33706831eade036bddae016417e3ea +"@types/crypto-js@npm:~4.1.3": + version: 4.1.3 + resolution: "@types/crypto-js@npm:4.1.3" + checksum: 4489854579c1b90b77da881fc980e3f05ab1e9c68b18ae580fedbb7b0fb40d531fda7bdc05f1b3bd5d4218c1d97c2f821bbac57eb3d7d9e505ce5a2c5b034166 languageName: node linkType: hard -"@types/cssom@npm:^0.4.1": - version: 0.4.1 - resolution: "@types/cssom@npm:0.4.1" - checksum: 0f44f5ff27f5dfadfb89c8bd00f8d588dc1aaa77ec05ffa3ab732929683aef842f55a6c52c9a75586a28987f009b45f6ea5f63dbc34660f6bb98650eea7f59e9 +"@types/cssom@npm:^0.4.2": + version: 0.4.2 + resolution: "@types/cssom@npm:0.4.2" + checksum: 4bcc54245b8c09c832c21465f60af412a5c2446ae5c17ab1a874dd87a9488e43951f8027594cc0eaf99d4e9a7c061882f017552a13f0a94ac25db9ac92fea837 languageName: node linkType: hard -"@types/debug@npm:^4.1.8": - version: 4.1.8 - resolution: "@types/debug@npm:4.1.8" +"@types/debug@npm:^4.1.10": + version: 4.1.10 + resolution: "@types/debug@npm:4.1.10" dependencies: "@types/ms": "*" - checksum: a9a9bb40a199e9724aa944e139a7659173a9b274798ea7efbc277cb084bc37d32fc4c00877c3496fac4fed70a23243d284adb75c00b5fdabb38a22154d18e5df + checksum: 938f79c5b610f851da9c67ecd8641a09b33ce9cb38fe4c9f4d20ee743d6bccb5d8e9a833a4cd23e0684a316622af67a0634fa706baea5a01f5219961d1976314 languageName: node linkType: hard @@ -12338,17 +12253,17 @@ __metadata: languageName: node linkType: hard -"@types/ejson@npm:^2.2.0": - version: 2.2.0 - resolution: "@types/ejson@npm:2.2.0" - checksum: 0cbc610c58a60847822353782d133f7a3cf362223d58f6a2b6ce0ae6e1f22885dc8f2a6ca7676df2556ed631e74c5a4880575704b964fdef89d216dc69ac0ad6 +"@types/ejson@npm:^2.2.1": + version: 2.2.1 + resolution: "@types/ejson@npm:2.2.1" + checksum: 8a0e6e9d50a9b33cdb645e7fdaca5fccb5a0687be0918eaeb06c9c7f21bb8b5757881de77c9d19d84bf16e6949c10b23d098954990aef7bd26257d471f4c008f languageName: node linkType: hard -"@types/emojione@npm:^2.2.6": - version: 2.2.6 - resolution: "@types/emojione@npm:2.2.6" - checksum: 5a049b57ea99eb88359b257256cdb74f048f8cfddc58a7ea9a50ba5d937f9414025c0616205b67f63512fcbbba44471901209d8f3c7fb5a9741fb6d3038eb864 +"@types/emojione@npm:^2.2.8": + version: 2.2.8 + resolution: "@types/emojione@npm:2.2.8" + checksum: 3342fd3fbcbc7e7429c7a23330f559d0f41f4fcba5a699035fddb53efba8c7c5ed3af54024011643aa338792d8fd963768766877bc115e093bef193a391abb05 languageName: node linkType: hard @@ -12362,13 +12277,13 @@ __metadata: languageName: node linkType: hard -"@types/eslint@npm:*, @types/eslint@npm:~8.44.0": - version: 8.44.0 - resolution: "@types/eslint@npm:8.44.0" +"@types/eslint@npm:*, @types/eslint@npm:~8.44.6": + version: 8.44.6 + resolution: "@types/eslint@npm:8.44.6" dependencies: "@types/estree": "*" "@types/json-schema": "*" - checksum: 2655f409a4ecdd64bb9dd9eb6715e7a2ac30c0e7f902b414e10dbe9d6d497baa5a0f13105e1f7bd5ad7a913338e2ab4bed1faf192a7a0d27d1acd45ba79d3f69 + checksum: ed8de582ab3dbd7ec0bf97d41f4f3de28dd8a37fc48bc423e1c406bbb70d1fd8c4175ba17ad6495ef9ef99a43df71421277b7a2a0355097489c4c4cf6bb266ff languageName: node linkType: hard @@ -12407,41 +12322,31 @@ __metadata: languageName: node linkType: hard -"@types/express@npm:*, @types/express@npm:^4.17.13, @types/express@npm:^4.17.17, @types/express@npm:^4.17.8, @types/express@npm:^4.7.0": - version: 4.17.17 - resolution: "@types/express@npm:4.17.17" - dependencies: - "@types/body-parser": "*" - "@types/express-serve-static-core": ^4.17.33 - "@types/qs": "*" - "@types/serve-static": "*" - checksum: 0196dacc275ac3ce89d7364885cb08e7fb61f53ca101f65886dbf1daf9b7eb05c0943e2e4bbd01b0cc5e50f37e0eea7e4cbe97d0304094411ac73e1b7998f4da - languageName: node - linkType: hard - -"@types/express@npm:^4.16.1": - version: 4.17.18 - resolution: "@types/express@npm:4.17.18" +"@types/express@npm:*, @types/express@npm:^4.16.1, @types/express@npm:^4.17.13, @types/express@npm:^4.17.20, @types/express@npm:^4.17.8, @types/express@npm:^4.7.0": + version: 4.17.20 + resolution: "@types/express@npm:4.17.20" dependencies: "@types/body-parser": "*" "@types/express-serve-static-core": ^4.17.33 "@types/qs": "*" "@types/serve-static": "*" - checksum: 8c178da4f0edff1f006d871fbdc3f849620986ff10bad252f3dfd45b57554e26aaa28c602285df028930d5216e257a06fbaf795070f8bb42f7d87e3b689cba50 + checksum: bf8a97d283128e5129f9ccabbeef728ff3f0484465e0ae74a304bd0588fa6cb715ae68845650caba9a641944b7791ba125d02ddbd47a7e62aaefdd036570c6c5 languageName: node linkType: hard -"@types/fibers@npm:^3.1.1": - version: 3.1.1 - resolution: "@types/fibers@npm:3.1.1" - checksum: 3bcc53c92dcaabf77cf31274c06ba615a59d21730bdb47214f64d7bf356ab31712f1d9c79707e50d2c9d2f8cda8cca4f7e4c20ddf272b07397d20fb196dbc400 +"@types/fibers@npm:^3.1.3": + version: 3.1.3 + resolution: "@types/fibers@npm:3.1.3" + checksum: c4511eecea1c4e73a4b4310ff5152bb43477dfbd7c19ea8614de5ce6d604c6bd629b4552bdbc06fbd593215c684d06aee4e6d8e6681b4ab019f2b8a03838de79 languageName: node linkType: hard -"@types/gc-stats@npm:^1": - version: 1.4.1 - resolution: "@types/gc-stats@npm:1.4.1" - checksum: 07c08e5452f96e3afbaba259ec0f684f1172b0e1bdb466d8606bc9af0428399bf334b57944ef2762d61be122892619aabab11ff63cd07f2dfc7dd436118d04b6 +"@types/gc-stats@npm:^1.4.2": + version: 1.4.2 + resolution: "@types/gc-stats@npm:1.4.2" + dependencies: + "@types/node": "*" + checksum: 4039f699b497595c3ac30f221f72d798e12a764093ab5df05cec25cd501fe806005daec10c25737d2b08449772bc318ac720f01fe73d13fdb33168429e25483f languageName: node linkType: hard @@ -12455,10 +12360,10 @@ __metadata: languageName: node linkType: hard -"@types/google-libphonenumber@npm:^7.4.23": - version: 7.4.23 - resolution: "@types/google-libphonenumber@npm:7.4.23" - checksum: 6c46f980fcff49befbddc165dea466cd2b444bf12a2a110767c6a656164cbfc09cbc84e1d2142b275def443246704115eddaf040668caee623676b1e37bb90bc +"@types/google-libphonenumber@npm:^7.4.29": + version: 7.4.29 + resolution: "@types/google-libphonenumber@npm:7.4.29" + checksum: 63b1d03ab6dcd877c1249251d73c54777f6b6cbd13f6b3107c8fcef70d19f8e3a768555942735318da86fa6c50ea0dcfc82d521d4defc9e9dfc1e67b4746ab96 languageName: node linkType: hard @@ -12471,10 +12376,10 @@ __metadata: languageName: node linkType: hard -"@types/gravatar@npm:^1.8.3": - version: 1.8.3 - resolution: "@types/gravatar@npm:1.8.3" - checksum: 7d05ab0b0fae62c6932bbb952b863e67a96385dd428a4cef161518e5e5176788194db34ca0815ce28a41779e472ea3d6ca21fedd0f00d77e62b016b59117bf81 +"@types/gravatar@npm:^1.8.5": + version: 1.8.5 + resolution: "@types/gravatar@npm:1.8.5" + checksum: a4a5e9010e5f2caff27f360cd4e0acf4e3276be3fdf8cc4a38baed8b9ca14d187b6b5c1d30d4d3abe326b0aecf30d1b47111ea543c8f6caf8bce9a8bb147c090 languageName: node linkType: hard @@ -12527,21 +12432,21 @@ __metadata: languageName: node linkType: hard -"@types/i18next-sprintf-postprocessor@npm:^0.2.0": - version: 0.2.0 - resolution: "@types/i18next-sprintf-postprocessor@npm:0.2.0" +"@types/i18next-sprintf-postprocessor@npm:^0.2.2": + version: 0.2.2 + resolution: "@types/i18next-sprintf-postprocessor@npm:0.2.2" dependencies: i18next: ">=17.0.11" - checksum: be1203358724c253a402f08043ba5900661849ee0ae103c5a9928f07b17e0ff1558fe22219a10d1a28a915af5564337135ee91572c6ae7f2a427bb67291e6800 + checksum: 1029c5f896e453534a128013f9ee8a0873a2e03b82a18a530842d06618c3dd1b1f3adf0491efa3f7efd86d19c61b23af60df5c0f36306ed298a20d6d895db95e languageName: node linkType: hard -"@types/imap@npm:^0.8.37": - version: 0.8.37 - resolution: "@types/imap@npm:0.8.37" +"@types/imap@npm:^0.8.39": + version: 0.8.39 + resolution: "@types/imap@npm:0.8.39" dependencies: "@types/node": "*" - checksum: 39af91e5ed0fe3b6f261a735f5af29de2ac325bddefbaa0067fcd1f51c9aa6d9d7c50eb0843091bca1faf14158085709c16315acddd6222d56e4557519abfba6 + checksum: 403a0810dc24f035d1762d9ebc1cf548448bdbe565ab6062d2a1d1be2afd4f8ef1483723d4077c0e0e2312a39a27f393a513a40515589149c0617aa984946ae5 languageName: node linkType: hard @@ -12595,13 +12500,13 @@ __metadata: languageName: node linkType: hard -"@types/jest@npm:*, @types/jest@npm:~29.5.3": - version: 29.5.3 - resolution: "@types/jest@npm:29.5.3" +"@types/jest@npm:*, @types/jest@npm:~29.5.7": + version: 29.5.7 + resolution: "@types/jest@npm:29.5.7" dependencies: expect: ^29.0.0 pretty-format: ^29.0.0 - checksum: e36bb92e0b9e5ea7d6f8832baa42f087fc1697f6cd30ec309a07ea4c268e06ec460f1f0cfd2581daf5eff5763475190ec1ad8ac6520c49ccfe4f5c0a48bfa676 + checksum: e28624ccb0ef1255a03fbbb4b5bc3e5cbcdc450d39e0739985ff679b124198f808c38c8c3e67859c6efc0e848196deeb8cfed028e12a821c511dfc1112a2d6e9 languageName: node linkType: hard @@ -12614,19 +12519,19 @@ __metadata: languageName: node linkType: hard -"@types/js-yaml@npm:^4.0.5": - version: 4.0.5 - resolution: "@types/js-yaml@npm:4.0.5" - checksum: 7dcac8c50fec31643cc9d6444b5503239a861414cdfaa7ae9a38bc22597c4d850c4b8cec3d82d73b3fbca408348ce223b0408d598b32e094470dfffc6d486b4d +"@types/js-yaml@npm:^4.0.8": + version: 4.0.8 + resolution: "@types/js-yaml@npm:4.0.8" + checksum: a5a77a5a1eac7e7fb667156c251c2b947ca4ddfdda570726369dd50bd5b2b1d0da2d0fb4273d1b10aa1782406d7b3da8923d957df4fb89dbfa1db06f43297de2 languageName: node linkType: hard -"@types/jsdom-global@npm:^3.0.4": - version: 3.0.4 - resolution: "@types/jsdom-global@npm:3.0.4" +"@types/jsdom-global@npm:^3.0.6": + version: 3.0.6 + resolution: "@types/jsdom-global@npm:3.0.6" dependencies: "@types/jsdom": "*" - checksum: c4da8432609686961a4336b8adfe882cd844a5c8cb0213d12c8d2a69d8602a73ef0f175e9ed7d45ab75b833c8551147eb21015efe1b9505872326f1ea9d7ec91 + checksum: cb216d588d6abc583615706bbc8beab6265d7afec8e51cadea06f84dd5ba4508e583c500556b2c273d7569c80af9cd68dce19ab6042cd881567aa0fe10261cd1 languageName: node linkType: hard @@ -12675,10 +12580,10 @@ __metadata: languageName: node linkType: hard -"@types/jsrsasign@npm:^10.5.8": - version: 10.5.8 - resolution: "@types/jsrsasign@npm:10.5.8" - checksum: ef53cee635ab31ae60b41d050266e16949be84b9b6781eb7585acc9094bc6e1f8c9aff4f19221ee1c587ecf3134a6b551800989d2add6f28f9176a248c89a57d +"@types/jsrsasign@npm:^10.5.11": + version: 10.5.11 + resolution: "@types/jsrsasign@npm:10.5.11" + checksum: c18b52af99ffb831fd84738356a49e94407e732f0a88f0f6db1e1fd55c06a47d2bab23a9e17b3b21af50fbf5f4d115e13fbe2796357204b18072929bd7b4bd5c languageName: node linkType: hard @@ -12689,10 +12594,10 @@ __metadata: languageName: node linkType: hard -"@types/katex@npm:~0.16.0": - version: 0.16.0 - resolution: "@types/katex@npm:0.16.0" - checksum: f93ceb2496621d18a28252264c0b7f5b0bdf125f9dc92d1adfbd9bf00942cd2918de336fae628d3929e615aaf84b7adb1781711c4e4605664be0827b1013ec14 +"@types/katex@npm:~0.16.5": + version: 0.16.5 + resolution: "@types/katex@npm:0.16.5" + checksum: a1ce22cd87acd9b32891931f2bc4355c3540cc0a423e161a2e5b040d3e50812cb85ce1fd09f23d42324b19f9da30ded6b1807114f215624f670d79bb46c47cc8 languageName: node linkType: hard @@ -12705,10 +12610,10 @@ __metadata: languageName: node linkType: hard -"@types/later@npm:^1.2.7": - version: 1.2.7 - resolution: "@types/later@npm:1.2.7" - checksum: 247f10e3e39bf50d78cdeb95f854e73b8378fdb2de542a0b632d892377098b438c2596dd99657d2ca0ca9370b07a2c112b29e5fbde636c91e4292f9a82b04572 +"@types/later@npm:^1.2.8": + version: 1.2.8 + resolution: "@types/later@npm:1.2.8" + checksum: b89b391e6dc6721955b04c01b81a3e38b4ac3d4f40ebcf35bc34d694c46a81c387c028760b3fc1441b9852c46298dfd562708f61504aba65983d2484b99d6420 languageName: node linkType: hard @@ -12721,45 +12626,45 @@ __metadata: languageName: node linkType: hard -"@types/less@npm:~3.0.3": - version: 3.0.3 - resolution: "@types/less@npm:3.0.3" - checksum: 389ce4c843fb88484ffbe4e3b63da0db1cea3e594c57086a5e642431f031f569819b4a210ae4ca109207d2307daa7e48e0e00315892fa7582748e0f434e62881 +"@types/less@npm:~3.0.5": + version: 3.0.5 + resolution: "@types/less@npm:3.0.5" + checksum: 72d04c7877a63ef8a49e22a2aaf2e595aec41b4fcbbb48603e4d3a3d1e2d903edea6654db00bba52148ea4101a904e866b410599088b41935aa4c0733d25ef3c languageName: node linkType: hard -"@types/lodash.debounce@npm:^4.0.7": - version: 4.0.7 - resolution: "@types/lodash.debounce@npm:4.0.7" +"@types/lodash.debounce@npm:^4.0.8": + version: 4.0.8 + resolution: "@types/lodash.debounce@npm:4.0.8" dependencies: "@types/lodash": "*" - checksum: e873b2d77f89010876baba3437ef826b17221b98948e00b5590828334a481dea1c8f9d28543210e564adc53199584f42c3cb171f8b6c3614fefc0b4e0888679c + checksum: 63f195cb053ca390135a9aca62bb60fa149ca81838519871506b60760ff4113333709becb8e4147707eaa3d916dab7eff66b0588caf4ce508cabda9bee9c5b60 languageName: node linkType: hard -"@types/lodash.get@npm:^4.4.7": - version: 4.4.7 - resolution: "@types/lodash.get@npm:4.4.7" +"@types/lodash.get@npm:^4.4.8": + version: 4.4.8 + resolution: "@types/lodash.get@npm:4.4.8" dependencies: "@types/lodash": "*" - checksum: 0dbf1960606e4707c34e8ffbe97ffaad0e47fc5df7a6e24ea6e4fe5838d2468aa13360f38815c77b06e3c9932631ae15662b4139036a69ee16aeb54827a21405 + checksum: fea09c12f098e5cbdc16510e8319a7f0dd4d0af49a5e6622ae4f0dcd4893f1b2c44a5d22f452d73443f50b85c8461f3fe2370c19b8d9051686265bbb0aae0ffa languageName: node linkType: hard -"@types/lodash@npm:*, @types/lodash@npm:^4.14.167, @types/lodash@npm:^4.14.195": - version: 4.14.195 - resolution: "@types/lodash@npm:4.14.195" - checksum: 39b75ca635b3fa943d17d3d3aabc750babe4c8212485a4df166fe0516e39288e14b0c60afc6e21913cc0e5a84734633c71e617e2bd14eaa1cf51b8d7799c432e +"@types/lodash@npm:*, @types/lodash@npm:^4.14.167, @types/lodash@npm:^4.14.200": + version: 4.14.200 + resolution: "@types/lodash@npm:4.14.200" + checksum: 6471f8bb5da692a6ecf03a8da4935bfbc341e67ee9bcb4f5730bfacff0c367232548f0a01e8ac5ea18c6fe78fb085d502494e33ccb47a7ee87cbdee03b47d00d languageName: node linkType: hard -"@types/mailparser@npm:^3.4.0": - version: 3.4.0 - resolution: "@types/mailparser@npm:3.4.0" +"@types/mailparser@npm:^3.4.3": + version: 3.4.3 + resolution: "@types/mailparser@npm:3.4.3" dependencies: "@types/node": "*" iconv-lite: ^0.6.3 - checksum: 05232ba3579b09224e5335848da27817a4cac8cc0eb622202904b62851fd61bbab7b5ca90016531e40098641351d84c2355f10cd9c9fa718da4ea2cb0e637bd0 + checksum: 9374b713311b523b66429a7b509e90229dd001029e87d901ab6c756e1856eb2a8427012c016ad70ac45b39056eba1334e568f85ce9f329f5dd147986a897b691 languageName: node linkType: hard @@ -12779,26 +12684,27 @@ __metadata: languageName: node linkType: hard -"@types/meteor-collection-hooks@npm:^0.8.6": - version: 0.8.6 - resolution: "@types/meteor-collection-hooks@npm:0.8.6" +"@types/meteor-collection-hooks@npm:^0.8.8": + version: 0.8.8 + resolution: "@types/meteor-collection-hooks@npm:0.8.8" dependencies: meteor-typings: ^1.3.1 - checksum: 620f6315dba4457dcacb0656ebdabfe2997b39be8757b87cd883e11aa77a573c27abbb0682b75c5d284ccc2be372b377d17c22a09d465ba2d59e3e62ca298ccf + checksum: bf0afc8531c836f3f7ead4aa0f8be3f69257af7a62397924a50533a20837b21b16c307777bb4fe52dc2e26753ba7269d0df6133ba6f1dad27d4075fea38a05f9 languageName: node linkType: hard -"@types/meteor@npm:^2.9.2": - version: 2.9.2 - resolution: "@types/meteor@npm:2.9.2" +"@types/meteor@npm:^2.9.5": + version: 2.9.5 + resolution: "@types/meteor@npm:2.9.5" dependencies: "@types/connect": "*" "@types/jquery": "*" + "@types/node": "*" "@types/nodemailer": "*" "@types/react": "*" "@types/underscore": "*" mongodb: ^4.3.1 - checksum: 6395578e5d5f139aad8dfd0f70cb489dd70984b78ed2ab791bfabc59c70f94196cdb3cfc40659da0498ae1962f135782067579e5c320341c9a1a331553329f56 + checksum: e16d072fe0f0ddaf2a8ac6b442580126c6d38e9e2ac36d72551d401a9a86c1dfa42e17b28ac28842b43ed0106b1c47126348332b3fcca3c86ef0d266c1201da9 languageName: node linkType: hard @@ -12883,30 +12789,23 @@ __metadata: languageName: node linkType: hard -"@types/node-gcm@npm:^1.0.1": - version: 1.0.1 - resolution: "@types/node-gcm@npm:1.0.1" - checksum: feaf8952ae0029075fef79b5a6397fbccb19caa6580bc9e15ab20f47fa122f4be2241dde72bb5884ec87b4a8a5d33a4e9e4c219a6e83cf906bf7d93f373f4f0e +"@types/node-gcm@npm:^1.0.3": + version: 1.0.3 + resolution: "@types/node-gcm@npm:1.0.3" + checksum: 232e3d401f381fe9312343efb920892a7aa2f63457e00608ff2c3f0d1bff4a3707affe9a9e484ffead39272cfba0d1791901b7e937420233455dd047d63a4587 languageName: node linkType: hard -"@types/node-rsa@npm:^1.1.1": - version: 1.1.1 - resolution: "@types/node-rsa@npm:1.1.1" +"@types/node-rsa@npm:^1.1.3": + version: 1.1.3 + resolution: "@types/node-rsa@npm:1.1.3" dependencies: "@types/node": "*" - checksum: dee0c318618991f115b6e757c54980324c3b2f7dfec8137dcb31e8e88955e7c048d5e89e1e3a572148697783f323dbf9af5738ac5bbe9069666663ad3737284d + checksum: 03606729a96722623e316b1728d45ba452e008e01e886127d1d964221119dd4196be724ec062fc81be5beb28ce8e5fcc9c55109275cdae60545ddc293b89e77d languageName: node linkType: hard -"@types/node@npm:*, @types/node@npm:>=12.0.0, @types/node@npm:>=8.9.0": - version: 17.0.40 - resolution: "@types/node@npm:17.0.40" - checksum: e3b2fe876672fbe4be84ce17773944eb2f5eaba50e2c6c0536bdf6d4972ed6488581580581f154183fdc8f2d56fa42a42e3d6e83b9b71ee25adea16a84765e92 - languageName: node - linkType: hard - -"@types/node@npm:>=12, @types/node@npm:>=18.0.0": +"@types/node@npm:*, @types/node@npm:>=12, @types/node@npm:>=12.0.0, @types/node@npm:>=18.0.0, @types/node@npm:>=8.9.0": version: 20.8.4 resolution: "@types/node@npm:20.8.4" dependencies: @@ -12922,26 +12821,26 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:^14.0.10 || ^16.0.0, @types/node@npm:^14.14.20 || ^16.0.0, @types/node@npm:^16.18.36": - version: 16.18.36 - resolution: "@types/node@npm:16.18.36" - checksum: a9d138fa1269079c60daad6984713dc0b713983f8b34a83edbc6d7957b2e38beab9b2598c9fe99f19d073e20bc212a18aaf82eabdc23ef64dce7d2089a9aab2a +"@types/node@npm:^14.0.10 || ^16.0.0, @types/node@npm:^14.14.20 || ^16.0.0, @types/node@npm:^16.18.60": + version: 16.18.60 + resolution: "@types/node@npm:16.18.60" + checksum: aa0c81c3f20e663584bf17a5968e54c419277af7982ef41f9d83edd1b7ab4c8af2583a3c8a9e1cf659c6307e6f787e1be20522855121371f5a46d1d54f8a70e3 languageName: node linkType: hard -"@types/node@npm:^14.0.26, @types/node@npm:^14.14.37, @types/node@npm:^14.18.51": - version: 14.18.51 - resolution: "@types/node@npm:14.18.51" - checksum: 0960a31d2ac605763fe79c8edcee3cb48257d345ce417c019d84ff5d8cd92dd0937674814ab3f169346b4259c29f640556006bcb2c54cfb3e63fa0cf728d320e +"@types/node@npm:^14.0.26, @types/node@npm:^14.14.37, @types/node@npm:^14.18.63": + version: 14.18.63 + resolution: "@types/node@npm:14.18.63" + checksum: be909061a54931778c71c49dc562586c32f909c4b6197e3d71e6dac726d8bd9fccb9f599c0df99f52742b68153712b5097c0f00cac4e279fa894b0ea6719a8fd languageName: node linkType: hard -"@types/nodemailer@npm:*, @types/nodemailer@npm:^6.4.8": - version: 6.4.8 - resolution: "@types/nodemailer@npm:6.4.8" +"@types/nodemailer@npm:*, @types/nodemailer@npm:^6.4.13": + version: 6.4.13 + resolution: "@types/nodemailer@npm:6.4.13" dependencies: "@types/node": "*" - checksum: 3cc9b6a0e54f25a1b36124df413964ff5a69e8dc4558c5dfc06818917313a50f4dbfe31fc9190e4270d07a0f8678474da24a2eae42f907933ea81d983b4772d4 + checksum: fd27d57d5801aaa7594d3bab748aedb1addc0c3a8ff9a21ea7675eec0e7e99cc477d05264b757b97691612fcfab37e52ded6c0725a700a90ad24fc7829dcc641 languageName: node linkType: hard @@ -12959,19 +12858,19 @@ __metadata: languageName: node linkType: hard -"@types/oauth2-server@npm:^3.0.13": - version: 3.0.13 - resolution: "@types/oauth2-server@npm:3.0.13" +"@types/oauth2-server@npm:^3.0.15": + version: 3.0.15 + resolution: "@types/oauth2-server@npm:3.0.15" dependencies: "@types/express": "*" - checksum: 126ce8a99a50b515801891212c20a928bd447ea634956aef0073ff704ac19b79ed8800567f3aa433f234bf2ee54b498211e3e23e864c34d211c76ea0662fa3e0 + checksum: b6c73ec0ba3a83e7a9cc1bf0e75fd640a76bcf57742642775abf950d851478a686e3f54ad8e24a09772e1dd89ed953742418c76ebb7df12b97b68f1cb94dae80 languageName: node linkType: hard -"@types/object-path@npm:^0.11.1": - version: 0.11.1 - resolution: "@types/object-path@npm:0.11.1" - checksum: 007e819d1d9dc830491b60023b1502ef1e421416d9953d6fefcda7d06eb91548eef8ee30073a9cfb6a834ac977042f6e1a761cde2d6a7973b06ddca753be91e3 +"@types/object-path@npm:^0.11.3": + version: 0.11.3 + resolution: "@types/object-path@npm:0.11.3" + checksum: 9c2f1ec11d9d15df1682ab1483c0f51cac3ff8c3a951662a50d15fd48824fc43a052041503d0761790a29a4100e33989eb519889948c3592d0bf6bde59d3ec79 languageName: node linkType: hard @@ -13003,35 +12902,35 @@ __metadata: languageName: node linkType: hard -"@types/parseurl@npm:^1.3.1": - version: 1.3.1 - resolution: "@types/parseurl@npm:1.3.1" +"@types/parseurl@npm:^1.3.2": + version: 1.3.2 + resolution: "@types/parseurl@npm:1.3.2" dependencies: "@types/node": "*" - checksum: e2d6fd6ad3259a70239cee48de496bc5e5d074a2c52199227e7414d889b8df05c039d2cbde8198e05493f8d64fffb7de1fa98e7228ed3e3d149f6f51d31c8e9e + checksum: bfe0ad3222a957a1d8d21a5378a61a3ce21f0ce45ddfdd98fc727207b4bd3caf590d2a448c39d08774949e485a5f5f08429f6025a6b0123456a8a7fb9270ddb2 languageName: node linkType: hard -"@types/photoswipe@npm:^4.1.2": - version: 4.1.2 - resolution: "@types/photoswipe@npm:4.1.2" - checksum: 58f9b85171b5d24a70dea8b7cd68eaaef29159f05130f2284320ef438874c538f00e81763d4025d79fb03366180cff12e01c4a40d04a0c823ca4df656ee8b912 +"@types/photoswipe@npm:^4.1.5": + version: 4.1.5 + resolution: "@types/photoswipe@npm:4.1.5" + checksum: a6b5fd6b029b8e84bc43f680549abf33dbc02e551e8dd176e29ca82e80edf66d0b62777fd42fe415d9e52b7a570718cac684aaea544f8dc084d1cb8bcc422f0f languageName: node linkType: hard -"@types/polka@npm:^0.5.4": - version: 0.5.4 - resolution: "@types/polka@npm:0.5.4" +"@types/polka@npm:^0.5.6": + version: 0.5.6 + resolution: "@types/polka@npm:0.5.6" dependencies: "@types/express": "*" "@types/express-serve-static-core": "*" "@types/node": "*" "@types/trouter": "*" - checksum: 8027a6cf6989d63ad01346c031698885586f3b800746bc35c84ab66f981e452cc58f8770fec703509cacf615f450c7010eb5221cef47a75e9494cdc42df8f8b3 + checksum: e956629526782b722fe134a93e159774d13d58a66796f5b6f763b04cd5c426439a8556962e1da8e8a61574ed1ad6239ffbef28cd8c03b4f8828a9a4b03189dde languageName: node linkType: hard -"@types/prettier@npm:^2.1.5, @types/prettier@npm:^2.6.3": +"@types/prettier@npm:^2.6.3": version: 2.6.3 resolution: "@types/prettier@npm:2.6.3" checksum: e1836699ca189fff6d2a73dc22e028b6a6f693ed1180d5998ac29fa197caf8f85aa92cb38db642e4a370e616b451cb5722ad2395dab11c78e025a1455f37d1f0 @@ -13045,10 +12944,10 @@ __metadata: languageName: node linkType: hard -"@types/prometheus-gc-stats@npm:^0.6.2": - version: 0.6.2 - resolution: "@types/prometheus-gc-stats@npm:0.6.2" - checksum: 403b3dbd792b83e592376e2002260cf57fb18f98c8b8528a24dc65e545cb8d0e9bf9941dc28edfa397b670b9a7336913da991005ef0278611209dde9b51406db +"@types/prometheus-gc-stats@npm:^0.6.3": + version: 0.6.3 + resolution: "@types/prometheus-gc-stats@npm:0.6.3" + checksum: b8ad00f21c2d7f19819b0d82b778f4919847e44f1f74a570fb52386fa7c5250af3a5e2eef5b8aa69cbf7fd8cc68f31f91bd7a002ce5b3722bb971da31af543a0 languageName: node linkType: hard @@ -13066,26 +12965,26 @@ __metadata: languageName: node linkType: hard -"@types/proxy-from-env@npm:^1.0.1": - version: 1.0.1 - resolution: "@types/proxy-from-env@npm:1.0.1" +"@types/proxy-from-env@npm:^1.0.3": + version: 1.0.3 + resolution: "@types/proxy-from-env@npm:1.0.3" dependencies: "@types/node": "*" - checksum: 72d04675fc7107d4a1d4a2ca56773d0caf23bdd48fa45b96b72b199f33f54854164b994c45f549214c51227f8bb9ae4e189e48d74a4a46b668fd4210bf97f8c0 + checksum: 3661687ae4bd90b9c41e504d3e3124b1ccd7d39d5877a7930fc3630989e37bde4e6b9055ea719d4b85c400a872bee02336ee5e187380f075cec021a4aebced44 languageName: node linkType: hard -"@types/proxyquire@npm:^1.3.28": - version: 1.3.28 - resolution: "@types/proxyquire@npm:1.3.28" - checksum: 9f0267b4516c2686a2e99a6d4dbd2ed660133180aad775a4000f3e103d8b2fe6b1bfe5b36003edf7adfb02542aed6c2fa6049fc217daea73ebced2942a762f27 +"@types/proxyquire@npm:^1.3.30": + version: 1.3.30 + resolution: "@types/proxyquire@npm:1.3.30" + checksum: e247d0afdb59aae942313112ca6429b0cbe410b0a858796c63e16ea945b3a7686f0660a03c685d79f10ed807051f645a763e13aa72d3725aeea74fd40901fdad languageName: node linkType: hard -"@types/psl@npm:^1.1.0": - version: 1.1.0 - resolution: "@types/psl@npm:1.1.0" - checksum: 648a4a40827fb101a05616b9c448b04d40c467db9f09e08099274759fd5e032e7d276013296679765c7d7359f43f0479094c1d8b6a56a8f9445b84b5a9af1263 +"@types/psl@npm:^1.1.2": + version: 1.1.2 + resolution: "@types/psl@npm:1.1.2" + checksum: fc0a7ae56ca53157035226d964f5a37749187804c07787d25a3f8e0235130c277b52d027139d1a7058d7826014a8019d68d46e2719b0404ac8545d39d41fc43a languageName: node linkType: hard @@ -13110,21 +13009,21 @@ __metadata: languageName: node linkType: hard -"@types/react-beautiful-dnd@npm:^13.1.4": - version: 13.1.4 - resolution: "@types/react-beautiful-dnd@npm:13.1.4" +"@types/react-beautiful-dnd@npm:^13.1.6": + version: 13.1.6 + resolution: "@types/react-beautiful-dnd@npm:13.1.6" dependencies: "@types/react": "*" - checksum: 76220f1031721e73f712cf0021de6a3cf4049260ec29996cd587876ebd6ed01b9c31d8efb5cf230eb4d2b6259525ffe0f3054667732d30c79df37e49f9398c5e + checksum: 437c315cac4455fd0085150d5d163330e523e965193f642f45edf34eb56098e68a6f956d90ecb11abfcb03ce34177e5445c1489da46353ee5a6a6306414fb936 languageName: node linkType: hard -"@types/react-dom@npm:<18.0.0, @types/react-dom@npm:~17.0.20": - version: 17.0.20 - resolution: "@types/react-dom@npm:17.0.20" +"@types/react-dom@npm:<18.0.0, @types/react-dom@npm:~17.0.22": + version: 17.0.22 + resolution: "@types/react-dom@npm:17.0.22" dependencies: "@types/react": ^17 - checksum: 525439fb14a033fc5dbe74711ecc50ec82273a528df9656594066a6219401e975101dafffd15d9a1a57a9442d52ea0c92eaacae09554dde27cd792e773f67467 + checksum: 3c24331c0a2211370968befaad107598ee4f796c08e9b0de0b0126ee598a7c51f7bf4e0e7d9a76522a3b60d91f091d46131d136bcbe49aeb6ec3b8480dff03f9 languageName: node linkType: hard @@ -13149,14 +13048,14 @@ __metadata: languageName: node linkType: hard -"@types/react@npm:*, @types/react@npm:^17, @types/react@npm:~17.0.62": - version: 17.0.62 - resolution: "@types/react@npm:17.0.62" +"@types/react@npm:*, @types/react@npm:^17, @types/react@npm:~17.0.69": + version: 17.0.69 + resolution: "@types/react@npm:17.0.69" dependencies: "@types/prop-types": "*" "@types/scheduler": "*" csstype: ^3.0.2 - checksum: 428a5aff44824ef504e9a9259b5894fe44a5db1c344b536990f07e132900ff5b34cbef0be77a84f30f37be1f88fc8b56dce328f568de8d65de3bfe414c05b2e1 + checksum: b83d4ec968b712b2b1a444c614b1ef3e59879c6911bc4001158de5de49b80b6a20fc4859353244f0171b94845d4c85a6379071445242ff23bbbc9b0ff24577d7 languageName: node linkType: hard @@ -13185,19 +13084,19 @@ __metadata: languageName: node linkType: hard -"@types/rewire@npm:^2.5.28": - version: 2.5.28 - resolution: "@types/rewire@npm:2.5.28" - checksum: c416a0f30b68c3d7aa7d67fa1297506d7ae890f831363f5e7a2ca704e0d3e2ec564efe1ce1f20a31f4f6408b3dc76a0f6ed79048ef4b7cc38905db31aeaf55df +"@types/rewire@npm:^2.5.29": + version: 2.5.29 + resolution: "@types/rewire@npm:2.5.29" + checksum: 2ad2f1134fe7c350fc88f0a9cc17eb49377f1a61776cde10b62bae0f5956dedd97adbb8da0e3ca8ddfb7034699a89fe2f9dc31af35f11727c4b38c8a089877c3 languageName: node linkType: hard -"@types/sanitize-html@npm:^2.9.0": - version: 2.9.0 - resolution: "@types/sanitize-html@npm:2.9.0" +"@types/sanitize-html@npm:^2.9.3": + version: 2.9.3 + resolution: "@types/sanitize-html@npm:2.9.3" dependencies: htmlparser2: ^8.0.0 - checksum: b60f42b740bbfb1b1434ce8b43925a38ecc608b60aa654fd009d2e22e33f324b61d370768c55bd2fd98e03de08518ffa8911d61606c483526fb931bb8b59d1b0 + checksum: 882a39ec767e0c5fd4402108db4b8e4f85ff555cf490ad8c7340d9c58c57c3ffefa33c0d248d5e67047df6f744ca60e125da5485efc18ac450783f3900178373 languageName: node linkType: hard @@ -13208,17 +13107,10 @@ __metadata: languageName: node linkType: hard -"@types/semver@npm:^6.0.0": - version: 6.2.3 - resolution: "@types/semver@npm:6.2.3" - checksum: 83c86d7005b229df9c4c0d6d13825b839a01932895504596140aea19e2b88f63ac27ab1575347451b50eedb63f72309e845ce1a0ca78360c4f719bbb38371594 - languageName: node - linkType: hard - -"@types/semver@npm:^7.3.10, @types/semver@npm:^7.3.12": - version: 7.3.13 - resolution: "@types/semver@npm:7.3.13" - checksum: 00c0724d54757c2f4bc60b5032fe91cda6410e48689633d5f35ece8a0a66445e3e57fa1d6e07eb780f792e82ac542948ec4d0b76eb3484297b79bd18b8cf1cb0 +"@types/semver@npm:^7.3.10, @types/semver@npm:^7.3.12, @types/semver@npm:^7.5.0": + version: 7.5.4 + resolution: "@types/semver@npm:7.5.4" + checksum: 120c0189f6fec5f2d12d0d71ac8a4cfa952dc17fa3d842e8afddb82bba8828a4052f8799c1653e2b47ae1977435f38e8985658fde971905ce5afb8e23ee97ecf languageName: node linkType: hard @@ -13260,12 +13152,12 @@ __metadata: languageName: node linkType: hard -"@types/sinon@npm:^10.0.15": - version: 10.0.15 - resolution: "@types/sinon@npm:10.0.15" +"@types/sinon@npm:^10.0.20": + version: 10.0.20 + resolution: "@types/sinon@npm:10.0.20" dependencies: "@types/sinonjs__fake-timers": "*" - checksum: cec6d7d9d5582ca3ac851b029d5d90451bfe6d376164253792a6eb6ddcd609a0411a7fac9ed92e1879e7d3ec091d2ea2e8dbb4f6140a1065439b81dc20cafa7c + checksum: 7322771345c202b90057f8112e0d34b7339e5ae1827fb1bfe385fc9e38ed6a2f18b4c66e88d27d98c775f7f74fb1167c0c14f61ca64155786534541e6c6eb05f languageName: node linkType: hard @@ -13299,12 +13191,12 @@ __metadata: languageName: node linkType: hard -"@types/speakeasy@npm:^2.0.7": - version: 2.0.7 - resolution: "@types/speakeasy@npm:2.0.7" +"@types/speakeasy@npm:^2.0.9": + version: 2.0.9 + resolution: "@types/speakeasy@npm:2.0.9" dependencies: "@types/node": "*" - checksum: 30152d950ea23654060ef596ea459935a9ea80ba4d9803b13fc9b02c7a27a7b5c96742f2cb00db51b19ba0e13ef9a16c1fd977042f61c9019b10c4191e2f1b97 + checksum: 4f3d2217f96625c481f9220a5d16a776c7003d9025fafe728f91f07ba815ac2233db4df85cf4a721b5e042a478f793eee6e4e54c397288f3a39e3f04aa8375ac languageName: node linkType: hard @@ -13324,10 +13216,10 @@ __metadata: languageName: node linkType: hard -"@types/strict-uri-encode@npm:^2.0.0": - version: 2.0.0 - resolution: "@types/strict-uri-encode@npm:2.0.0" - checksum: e37b6e39fc1440d30bb5f114b3c56a4ecc5db1b7bb1f705bcf607d0eb9e8798953ccaa3792b35c97e74fe61fcc0ff80982d963c22bba056a0745098d4a5c6699 +"@types/strict-uri-encode@npm:^2.0.1": + version: 2.0.1 + resolution: "@types/strict-uri-encode@npm:2.0.1" + checksum: 63d62f43d20583428d112f6a9de5a444f31f8e314a8c57b9a59523f99ae3152e41e2e39ff0fb0404171135402d2226aba21a5db64de0d0d385ec8c11d5a0f4ce languageName: node linkType: hard @@ -13350,12 +13242,12 @@ __metadata: languageName: node linkType: hard -"@types/supertest@npm:^2.0.12": - version: 2.0.12 - resolution: "@types/supertest@npm:2.0.12" +"@types/supertest@npm:^2.0.15": + version: 2.0.15 + resolution: "@types/supertest@npm:2.0.15" dependencies: "@types/superagent": "*" - checksum: f0e2b44f86bec2f708d6a3d0cb209055b487922040773049b0f8c6b557af52d4b5fa904e17dfaa4ce6e610172206bbec7b62420d158fa57b6ffc2de37b1730d3 + checksum: 89c1983662f0ab20969b3a6c44344397fd222d0f78b282619aabbe817f7c88a64210fd2b8b8f075ea22a27084e30ebc287bc5105619cbbf9af7f008e77f6eb93 languageName: node linkType: hard @@ -13375,19 +13267,19 @@ __metadata: languageName: node linkType: hard -"@types/testing-library__jest-dom@npm:^5.9.1, @types/testing-library__jest-dom@npm:~5.14.6": - version: 5.14.6 - resolution: "@types/testing-library__jest-dom@npm:5.14.6" +"@types/testing-library__jest-dom@npm:^5.9.1, @types/testing-library__jest-dom@npm:~5.14.9": + version: 5.14.9 + resolution: "@types/testing-library__jest-dom@npm:5.14.9" dependencies: "@types/jest": "*" - checksum: 92f81cefeacba3b5c06d4b3fbea0341fe2bcaa6e425c026ae262de39f1148c2588cf3003112aa4ac0880c3972ffb77641a863f3be71518d1d8080402c944e326 + checksum: d364494fc2545316292e88861146146af1e3818792ca63b62a63758b2f737669b687f4aaddfcfbcb7d0e1ed7890a9bd05de23ff97f277d5e68de574497a9ee72 languageName: node linkType: hard -"@types/textarea-caret@npm:^3.0.1": - version: 3.0.1 - resolution: "@types/textarea-caret@npm:3.0.1" - checksum: 18ff4275f0411187aebf4f475e318f5c62a87c056d3ff280b86e18fca6bf2c9bfab9ea885135f210131df230fc761b9f560b66dd8d3d2ebb161610f4ffbf3541 +"@types/textarea-caret@npm:^3.0.2": + version: 3.0.2 + resolution: "@types/textarea-caret@npm:3.0.2" + checksum: 6989477fa7be544cb84ffbb3302d5c4c2632e7900e0fcc12adf9bd78f4d0ebbf38db9392cb39c8fa791aba935013e1b14aeb1c222f328a67de6202f945331e73 languageName: node linkType: hard @@ -13419,10 +13311,10 @@ __metadata: languageName: node linkType: hard -"@types/ua-parser-js@npm:^0.7.36": - version: 0.7.36 - resolution: "@types/ua-parser-js@npm:0.7.36" - checksum: 8c24d4dc12ed1b8b98195838093391c358c81bf75e9cae0ecec8f7824b441e069daaa17b974a3e257172caddb671439f0c0b44bf43bfcf409b7a574a25aab948 +"@types/ua-parser-js@npm:^0.7.38": + version: 0.7.38 + resolution: "@types/ua-parser-js@npm:0.7.38" + checksum: 8a44887f7c782ed4c59c4d9cb254674f2ff41d8f653da0c2bd6d4ace79cc3de1ce5648b77f906e337fb97328e1114583e54c3b8882d194e1b8cb281f407a1ef7 languageName: node linkType: hard @@ -13449,17 +13341,17 @@ __metadata: languageName: node linkType: hard -"@types/use-subscription@npm:^1.0.0": - version: 1.0.0 - resolution: "@types/use-subscription@npm:1.0.0" - checksum: 47fff868682692ecda7110bd04ba4c5b1324854c0bcccc765606a42d4bd9be475207413c8829a883b98e7edd801100df53876da0ff89ac21a8f964e440636ef2 +"@types/use-subscription@npm:^1.0.1": + version: 1.0.1 + resolution: "@types/use-subscription@npm:1.0.1" + checksum: f9e3535d40dbcd606e7ef306120c52a78b9da7a94ebe0b56af8f8326984588b2db12fbc841e2b2d719728810816afa9c7d64b40a849048186a4308e2f3ff0339 languageName: node linkType: hard -"@types/use-sync-external-store@npm:^0.0.3": - version: 0.0.3 - resolution: "@types/use-sync-external-store@npm:0.0.3" - checksum: 161ddb8eec5dbe7279ac971531217e9af6b99f7783213566d2b502e2e2378ea19cf5e5ea4595039d730aa79d3d35c6567d48599f69773a02ffcff1776ec2a44e +"@types/use-sync-external-store@npm:^0.0.5": + version: 0.0.5 + resolution: "@types/use-sync-external-store@npm:0.0.5" + checksum: 96a22fa059d8a6d0fe0b03e5157eb22f599ab1cc58b9441617dec4be6d8586260fcf9041912ab90e92d9c6ea6dfec5c758bae6418552aa687fc7e0bb904e68bc languageName: node linkType: hard @@ -13477,14 +13369,14 @@ __metadata: languageName: node linkType: hard -"@types/webpack-bundle-analyzer@npm:^4": - version: 4.6.0 - resolution: "@types/webpack-bundle-analyzer@npm:4.6.0" +"@types/webpack-bundle-analyzer@npm:^4.6.2": + version: 4.6.2 + resolution: "@types/webpack-bundle-analyzer@npm:4.6.2" dependencies: "@types/node": "*" tapable: ^2.2.0 webpack: ^5 - checksum: 1cd5baa621a1dbe820bacf981d6e48f3423b733fb5e33c1356347e73d5e3e880ae6ebacf8f43d9e47e135d3ed2653ec5e40e12c6ce187f2eb3f548d9c949f6aa + checksum: 2f798e0c6a4aac9da84f56c4600c8fafbac7cc2316b0a0b3e35cab46f5b0d045c29b8c9803c64f03756faa941ff7344920e16b45fe46a322ae3be52f4c8dee76 languageName: node linkType: hard @@ -13575,31 +13467,31 @@ __metadata: languageName: node linkType: hard -"@types/ws@npm:^8.5.1, @types/ws@npm:^8.5.5": - version: 8.5.5 - resolution: "@types/ws@npm:8.5.5" +"@types/ws@npm:^8.5.1, @types/ws@npm:^8.5.5, @types/ws@npm:^8.5.8": + version: 8.5.8 + resolution: "@types/ws@npm:8.5.8" dependencies: "@types/node": "*" - checksum: d00bf8070e6938e3ccf933010921c6ce78ac3606696ce37a393b27a9a603f7bd93ea64f3c5fa295a2f743575ba9c9a9fdb904af0f5fe2229bf2adf0630386e4a + checksum: 4ad30de842834d4dd8e6e1476470752709d4165352a3a36780f23f4fdb686d4ac8ca5e16a0e0622940ddace910b856ff8a0baa2e24e41d204fb7a6a02ab2172b languageName: node linkType: hard -"@types/xml-crypto@npm:~1.4.2": - version: 1.4.2 - resolution: "@types/xml-crypto@npm:1.4.2" +"@types/xml-crypto@npm:~1.4.4": + version: 1.4.4 + resolution: "@types/xml-crypto@npm:1.4.4" dependencies: "@types/node": "*" xpath: 0.0.27 - checksum: 8fe8fc709ba070c46249800105301a533eb95e1a7a696986e4ac753aed1d238a826bce2b1e0d2548559e03f4e57bee27e26df69417766814bc0dd6a9bf2a1763 + checksum: c19616b531b26d7f3fafee6165d7be42969bfa2ef7184f501c489c80515d483425fb97e55ae816d91cf2f92e765e81f0a7cfc97c5dedb46f829edb677b154a55 languageName: node linkType: hard -"@types/xml-encryption@npm:~1.2.1": - version: 1.2.1 - resolution: "@types/xml-encryption@npm:1.2.1" +"@types/xml-encryption@npm:~1.2.3": + version: 1.2.3 + resolution: "@types/xml-encryption@npm:1.2.3" dependencies: "@types/node": "*" - checksum: abfc6d779e1674c268258296e9c03b307cb80383c5d598c0cda1ad75dc901b8d4104b5818990086b08bac199dbe7374706913a29c58cf614a741847f912854f1 + checksum: 1f678c5cb7378702dd1bfbbe1ec3b4dd62d7b8350c225866df109d60c8c7c4e39b20d32193ead175b1c68944ce22ffcae470685371e6257bf0bfe45f7f366aec languageName: node linkType: hard @@ -14169,10 +14061,10 @@ __metadata: languageName: node linkType: hard -"@xmldom/xmldom@npm:^0.8.5, @xmldom/xmldom@npm:^0.8.8": - version: 0.8.8 - resolution: "@xmldom/xmldom@npm:0.8.8" - checksum: 5f5fc0482fcc599f62e3009516932a265e00f1bb2093fe2c76f3f8d9bfebdd13246f48d4132c9b301c7a573f0fa8712e56aa747dce75b179c2b73f1dde7b5f42 +"@xmldom/xmldom@npm:^0.8.10, @xmldom/xmldom@npm:^0.8.5": + version: 0.8.10 + resolution: "@xmldom/xmldom@npm:0.8.10" + checksum: 4c136aec31fb3b49aaa53b6fcbfe524d02a1dc0d8e17ee35bd3bf35e9ce1344560481cd1efd086ad1a4821541482528672306d5e37cdbd187f33d7fadd3e2cf0 languageName: node linkType: hard @@ -14204,7 +14096,7 @@ __metadata: languageName: node linkType: hard -"abbrev@npm:1": +"abbrev@npm:1, abbrev@npm:^1.0.0": version: 1.1.1 resolution: "abbrev@npm:1.1.1" checksum: a4a97ec07d7ea112c517036882b2ac22f3109b7b19077dc656316d07d308438aac28e4d9746dc4d84bf6b1e75b4a7b0a5f3cb30592419f128ca9a8cee3bcfa17 @@ -14886,7 +14778,7 @@ __metadata: languageName: node linkType: hard -"aria-query@npm:5.1.3": +"aria-query@npm:5.1.3, aria-query@npm:^5.0.0": version: 5.1.3 resolution: "aria-query@npm:5.1.3" dependencies: @@ -14895,13 +14787,6 @@ __metadata: languageName: node linkType: hard -"aria-query@npm:^5.0.0": - version: 5.0.0 - resolution: "aria-query@npm:5.0.0" - checksum: c41f98866c5a304561ee8cae55856711cddad6f3f85d8cb43cc5f79667078d9b8979ce32d244c1ff364e6463a4d0b6865804a33ccc717fed701b281cf7dc6296 - languageName: node - linkType: hard - "arr-diff@npm:^4.0.0": version: 4.0.0 resolution: "arr-diff@npm:4.0.0" @@ -15028,19 +14913,6 @@ __metadata: languageName: node linkType: hard -"array.prototype.map@npm:^1.0.4": - version: 1.0.4 - resolution: "array.prototype.map@npm:1.0.4" - dependencies: - call-bind: ^1.0.2 - define-properties: ^1.1.3 - es-abstract: ^1.19.0 - es-array-method-boxes-properly: ^1.0.0 - is-string: ^1.0.7 - checksum: 08c8065ae9e60585c1262e54556da2340cd140dc799d790843c1f4ad3a3f458e9866d147c8ff0308741e8316904313f682803ca15c179f65cb2f5b993fa71a82 - languageName: node - linkType: hard - "array.prototype.map@npm:^1.0.5": version: 1.0.6 resolution: "array.prototype.map@npm:1.0.6" @@ -15432,20 +15304,27 @@ __metadata: languageName: node linkType: hard -"babel-jest@npm:^29.0.3, babel-jest@npm:^29.5.0, babel-jest@npm:^29.6.1": - version: 29.6.1 - resolution: "babel-jest@npm:29.6.1" +"b4a@npm:^1.6.4": + version: 1.6.4 + resolution: "b4a@npm:1.6.4" + checksum: 81b086f9af1f8845fbef4476307236bda3d660c158c201db976f19cdce05f41f93110ab6b12fd7a2696602a490cc43d5410ee36a56d6eef93afb0d6ca69ac3b2 + languageName: node + linkType: hard + +"babel-jest@npm:^29.0.3, babel-jest@npm:^29.5.0, babel-jest@npm:^29.7.0": + version: 29.7.0 + resolution: "babel-jest@npm:29.7.0" dependencies: - "@jest/transform": ^29.6.1 + "@jest/transform": ^29.7.0 "@types/babel__core": ^7.1.14 babel-plugin-istanbul: ^6.1.1 - babel-preset-jest: ^29.5.0 + babel-preset-jest: ^29.6.3 chalk: ^4.0.0 graceful-fs: ^4.2.9 slash: ^3.0.0 peerDependencies: "@babel/core": ^7.8.0 - checksum: bc46cfba468edde91f34a8292501d4448a39fab72d80d7d95f4349feb114fa21becb01def007d6166de7933ab9633bf5b5e1b72ba6ffeaa991f7abf014a2f61d + checksum: ee6f8e0495afee07cac5e4ee167be705c711a8cc8a737e05a587a131fdae2b3c8f9aa55dfd4d9c03009ac2d27f2de63d8ba96d3e8460da4d00e8af19ef9a83f7 languageName: node linkType: hard @@ -15527,15 +15406,15 @@ __metadata: languageName: node linkType: hard -"babel-plugin-jest-hoist@npm:^29.5.0": - version: 29.5.0 - resolution: "babel-plugin-jest-hoist@npm:29.5.0" +"babel-plugin-jest-hoist@npm:^29.6.3": + version: 29.6.3 + resolution: "babel-plugin-jest-hoist@npm:29.6.3" dependencies: "@babel/template": ^7.3.3 "@babel/types": ^7.3.3 "@types/babel__core": ^7.1.14 "@types/babel__traverse": ^7.0.6 - checksum: 099b5254073b6bc985b6d2d045ad26fb8ed30ff8ae6404c4fe8ee7cd0e98a820f69e3dfb871c7c65aae0f4b65af77046244c07bb92d49ef9005c90eedf681539 + checksum: 51250f22815a7318f17214a9d44650ba89551e6d4f47a2dc259128428324b52f5a73979d010cefd921fd5a720d8c1d55ad74ff601cd94c7bd44d5f6292fde2d1 languageName: node linkType: hard @@ -15649,15 +15528,15 @@ __metadata: languageName: node linkType: hard -"babel-preset-jest@npm:^29.5.0": - version: 29.5.0 - resolution: "babel-preset-jest@npm:29.5.0" +"babel-preset-jest@npm:^29.6.3": + version: 29.6.3 + resolution: "babel-preset-jest@npm:29.6.3" dependencies: - babel-plugin-jest-hoist: ^29.5.0 + babel-plugin-jest-hoist: ^29.6.3 babel-preset-current-node-syntax: ^1.0.0 peerDependencies: "@babel/core": ^7.0.0 - checksum: 5566ca2762766c9319b4973d018d2fa08c0fcf6415c72cc54f4c8e7199e851ea8f5e6c6730f03ed7ed44fc8beefa959dd15911f2647dee47c615ff4faeddb1ad + checksum: aa4ff2a8a728d9d698ed521e3461a109a1e66202b13d3494e41eea30729a5e7cc03b3a2d56c594423a135429c37bf63a9fa8b0b9ce275298be3095a88c69f6fb languageName: node linkType: hard @@ -16035,24 +15914,6 @@ __metadata: languageName: node linkType: hard -"body-parser@npm:1.19.2": - version: 1.19.2 - resolution: "body-parser@npm:1.19.2" - dependencies: - bytes: 3.1.2 - content-type: ~1.0.4 - debug: 2.6.9 - depd: ~1.1.2 - http-errors: 1.8.1 - iconv-lite: 0.4.24 - on-finished: ~2.3.0 - qs: 6.9.7 - raw-body: 2.4.3 - type-is: ~1.6.18 - checksum: 7f777ea65670e2622ca4a785b5dcb2a68451b3bb8d4d0f41091d307d56b640dba588a9ae04d85dda2cdd5e42788266a783528d5417e5643720fd611fd52522e7 - languageName: node - linkType: hard - "body-parser@npm:1.20.1": version: 1.20.1 resolution: "body-parser@npm:1.20.1" @@ -16953,18 +16814,18 @@ __metadata: languageName: node linkType: hard -"chai@npm:>1.9.0, chai@npm:^4.3.7": - version: 4.3.7 - resolution: "chai@npm:4.3.7" +"chai@npm:>1.9.0, chai@npm:^4.3.10": + version: 4.3.10 + resolution: "chai@npm:4.3.10" dependencies: assertion-error: ^1.1.0 - check-error: ^1.0.2 - deep-eql: ^4.1.2 - get-func-name: ^2.0.0 - loupe: ^2.3.1 + check-error: ^1.0.3 + deep-eql: ^4.1.3 + get-func-name: ^2.0.2 + loupe: ^2.3.6 pathval: ^1.1.1 - type-detect: ^4.0.5 - checksum: 0bba7d267848015246a66995f044ce3f0ebc35e530da3cbdf171db744e14cbe301ab913a8d07caf7952b430257ccbb1a4a983c570a7c5748dc537897e5131f7c + type-detect: ^4.0.8 + checksum: 536668c60a0d985a0fbd94418028e388d243a925d7c5e858c7443e334753511614a3b6a124bac9ca077dfc4c37acc367d62f8c294960f440749536dc181dfc6d languageName: node linkType: hard @@ -17125,10 +16986,12 @@ __metadata: languageName: node linkType: hard -"check-error@npm:^1.0.2": - version: 1.0.2 - resolution: "check-error@npm:1.0.2" - checksum: d9d106504404b8addd1ee3f63f8c0eaa7cd962a1a28eb9c519b1c4a1dc7098be38007fc0060f045ee00f075fbb7a2a4f42abcf61d68323677e11ab98dc16042e +"check-error@npm:^1.0.2, check-error@npm:^1.0.3": + version: 1.0.3 + resolution: "check-error@npm:1.0.3" + dependencies: + get-func-name: ^2.0.2 + checksum: e2131025cf059b21080f4813e55b3c480419256914601750b0fee3bd9b2b8315b531e551ef12560419b8b6d92a3636511322752b1ce905703239e7cc451b6399 languageName: node linkType: hard @@ -17524,10 +17387,10 @@ __metadata: languageName: node linkType: hard -"codemirror@npm:^5.65.13": - version: 5.65.13 - resolution: "codemirror@npm:5.65.13" - checksum: 47060461edaebecd03b3fba4e73a30cdccc0c51ce3a3a05bafae3c9cafd682101383e94d77d54081eaf1ae18da5b74343e98343c637c52cea409956469039098 +"codemirror@npm:^5.65.15": + version: 5.65.15 + resolution: "codemirror@npm:5.65.15" + checksum: 30e0cff9bfb2265b94fa6766e13975cb71db228e114d6d8cdcc160b495e32b0ff921ac09959715e3fef30a48c5a9d0655ffd0ff6c5fe7024656add438bb2b058 languageName: node linkType: hard @@ -17997,13 +17860,6 @@ __metadata: languageName: node linkType: hard -"cookie@npm:0.4.2": - version: 0.4.2 - resolution: "cookie@npm:0.4.2" - checksum: a00833c998bedf8e787b4c342defe5fa419abd96b32f4464f718b91022586b8f1bafbddd499288e75c037642493c83083da426c6a9080d309e3bd90fd11baa9b - languageName: node - linkType: hard - "cookie@npm:0.5.0, cookie@npm:^0.5.0": version: 0.5.0 resolution: "cookie@npm:0.5.0" @@ -18234,6 +18090,23 @@ __metadata: languageName: node linkType: hard +"create-jest@npm:^29.7.0": + version: 29.7.0 + resolution: "create-jest@npm:29.7.0" + dependencies: + "@jest/types": ^29.6.3 + chalk: ^4.0.0 + exit: ^0.1.2 + graceful-fs: ^4.2.9 + jest-config: ^29.7.0 + jest-util: ^29.7.0 + prompts: ^2.0.1 + bin: + create-jest: bin/create-jest.js + checksum: 1427d49458adcd88547ef6fa39041e1fe9033a661293aa8d2c3aa1b4967cb5bf4f0c00436c7a61816558f28ba2ba81a94d5c962e8022ea9a883978fc8e1f2945 + languageName: node + linkType: hard + "create-require@npm:^1.1.0": version: 1.1.1 resolution: "create-require@npm:1.1.1" @@ -19174,7 +19047,19 @@ __metadata: languageName: node linkType: hard -"deep-eql@npm:^4.1.2": +"dedent@npm:^1.0.0": + version: 1.5.1 + resolution: "dedent@npm:1.5.1" + peerDependencies: + babel-plugin-macros: ^3.1.0 + peerDependenciesMeta: + babel-plugin-macros: + optional: true + checksum: c3c300a14edf1bdf5a873f9e4b22e839d62490bc5c8d6169c1f15858a1a76733d06a9a56930e963d677a2ceeca4b6b0894cc5ea2f501aa382ca5b92af3413c2a + languageName: node + linkType: hard + +"deep-eql@npm:^4.1.3": version: 4.1.3 resolution: "deep-eql@npm:4.1.3" dependencies: @@ -19411,13 +19296,6 @@ __metadata: languageName: node linkType: hard -"destroy@npm:~1.0.4": - version: 1.0.4 - resolution: "destroy@npm:1.0.4" - checksum: da9ab4961dc61677c709da0c25ef01733042614453924d65636a7db37308fef8a24cd1e07172e61173d471ca175371295fbc984b0af5b2b4ff47cd57bd784c03 - languageName: node - linkType: hard - "desvg-loader@npm:^0.1.0": version: 0.1.0 resolution: "desvg-loader@npm:0.1.0" @@ -19452,13 +19330,20 @@ __metadata: languageName: node linkType: hard -"detect-libc@npm:^2.0.0, detect-libc@npm:^2.0.1": +"detect-libc@npm:^2.0.0": version: 2.0.1 resolution: "detect-libc@npm:2.0.1" checksum: ccb05fcabbb555beb544d48080179c18523a343face9ee4e1a86605a8715b4169f94d663c21a03c310ac824592f2ba9a5270218819bb411ad7be578a527593d7 languageName: node linkType: hard +"detect-libc@npm:^2.0.2": + version: 2.0.2 + resolution: "detect-libc@npm:2.0.2" + checksum: 2b2cd3649b83d576f4be7cc37eb3b1815c79969c8b1a03a40a4d55d83bc74d010753485753448eacb98784abf22f7dbd3911fd3b60e29fda28fed2d1a997944d + languageName: node + linkType: hard + "detect-newline@npm:^3.0.0": version: 3.1.0 resolution: "detect-newline@npm:3.1.0" @@ -19526,10 +19411,10 @@ __metadata: languageName: node linkType: hard -"diff-sequences@npm:^29.4.3": - version: 29.4.3 - resolution: "diff-sequences@npm:29.4.3" - checksum: 28b265e04fdddcf7f9f814effe102cc95a9dec0564a579b5aed140edb24fc345c611ca52d76d725a3cab55d3888b915b5e8a4702e0f6058968a90fa5f41fcde7 +"diff-sequences@npm:^29.6.3": + version: 29.6.3 + resolution: "diff-sequences@npm:29.6.3" + checksum: f4914158e1f2276343d98ff5b31fc004e7304f5470bf0f1adb2ac6955d85a531a6458d33e87667f98f6ae52ebd3891bb47d420bb48a5bd8b7a27ee25b20e33aa languageName: node linkType: hard @@ -20292,39 +20177,7 @@ __metadata: languageName: node linkType: hard -"es-abstract@npm:^1.17.2, es-abstract@npm:^1.19.0, es-abstract@npm:^1.19.1, es-abstract@npm:^1.19.5, es-abstract@npm:^1.20.4": - version: 1.20.4 - resolution: "es-abstract@npm:1.20.4" - dependencies: - call-bind: ^1.0.2 - es-to-primitive: ^1.2.1 - function-bind: ^1.1.1 - function.prototype.name: ^1.1.5 - get-intrinsic: ^1.1.3 - get-symbol-description: ^1.0.0 - has: ^1.0.3 - has-property-descriptors: ^1.0.0 - has-symbols: ^1.0.3 - internal-slot: ^1.0.3 - is-callable: ^1.2.7 - is-negative-zero: ^2.0.2 - is-regex: ^1.1.4 - is-shared-array-buffer: ^1.0.2 - is-string: ^1.0.7 - is-weakref: ^1.0.2 - object-inspect: ^1.12.2 - object-keys: ^1.1.1 - object.assign: ^4.1.4 - regexp.prototype.flags: ^1.4.3 - safe-regex-test: ^1.0.0 - string.prototype.trimend: ^1.0.5 - string.prototype.trimstart: ^1.0.5 - unbox-primitive: ^1.0.2 - checksum: 89297cc785c31aedf961a603d5a07ed16471e435d3a1b6d070b54f157cf48454b95cda2ac55e4b86ff4fe3276e835fcffd2771578e6fa634337da49b26826141 - languageName: node - linkType: hard - -"es-abstract@npm:^1.22.1": +"es-abstract@npm:^1.17.2, es-abstract@npm:^1.19.1, es-abstract@npm:^1.20.4, es-abstract@npm:^1.22.1": version: 1.22.2 resolution: "es-abstract@npm:1.22.2" dependencies: @@ -20684,13 +20537,13 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-jest@npm:~27.2.2": - version: 27.2.2 - resolution: "eslint-plugin-jest@npm:27.2.2" +"eslint-plugin-jest@npm:~27.2.3": + version: 27.2.3 + resolution: "eslint-plugin-jest@npm:27.2.3" dependencies: "@typescript-eslint/utils": ^5.10.0 peerDependencies: - "@typescript-eslint/eslint-plugin": ^5.0.0 + "@typescript-eslint/eslint-plugin": ^5.0.0 || ^6.0.0 eslint: ^7.0.0 || ^8.0.0 jest: "*" peerDependenciesMeta: @@ -20698,7 +20551,7 @@ __metadata: optional: true jest: optional: true - checksum: 98b63252d985f5dedf36ce9587dd4a0d24daf71ca8a997258343402c0d33ddd5070502378dafd9ac7fc0ef2e0d557b5c77f18e09ad73c71a52de8061db88293f + checksum: 4c7e07f52f17749ac6fd0ff5fcd5ce30b88983ba31eeee322e4d48859f55eaa112f06172e586ad2031c00ff28bb2dfdc3d35c83895251b9c0e860fa47dfc5ff4 languageName: node linkType: hard @@ -20711,16 +20564,16 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-playwright@npm:~0.15.0": - version: 0.15.0 - resolution: "eslint-plugin-playwright@npm:0.15.0" +"eslint-plugin-playwright@npm:~0.15.3": + version: 0.15.3 + resolution: "eslint-plugin-playwright@npm:0.15.3" peerDependencies: eslint: ">=7" eslint-plugin-jest: ">=25" peerDependenciesMeta: eslint-plugin-jest: optional: true - checksum: fe772ee1f611802f70310cd02d2048f64b244644fcb00b47e935aac8cfab800612b122fe50deb3e1ea6bde1d1d635a745f3574cc316fcccbeaaa278be9c2e20f + checksum: 5dff7f1d8346dac41980197ce24f2629f09acc44b612c38a6859cb31d5dc29caa4d9a09fec0b10443bae7ebc4b79d4c926dca284707bae729469016ce9f1dbfc languageName: node linkType: hard @@ -20748,12 +20601,12 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-react-refresh@npm:^0.4.1": - version: 0.4.1 - resolution: "eslint-plugin-react-refresh@npm:0.4.1" +"eslint-plugin-react-refresh@npm:^0.4.4": + version: 0.4.4 + resolution: "eslint-plugin-react-refresh@npm:0.4.4" peerDependencies: eslint: ">=7" - checksum: 932f982797ef54a87e20039c32739c1a6df8355165d17ba851620b4690632432f511605e20c30e6abdb4c58d2bd926e96347f9253db724dcf3dae92bd1258d1d + checksum: 6b93f43cef5f69c18751db3267ce6cc7cb88f07061df28fc12401be56d93f37134f2a794c760f51cd5f84c5e81d81b003ef761ca76e7674646808b82884aa356 languageName: node linkType: hard @@ -20782,9 +20635,9 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-storybook@npm:~0.6.12": - version: 0.6.12 - resolution: "eslint-plugin-storybook@npm:0.6.12" +"eslint-plugin-storybook@npm:~0.6.15": + version: 0.6.15 + resolution: "eslint-plugin-storybook@npm:0.6.15" dependencies: "@storybook/csf": ^0.0.1 "@typescript-eslint/utils": ^5.45.0 @@ -20792,18 +20645,18 @@ __metadata: ts-dedent: ^2.2.0 peerDependencies: eslint: ">=6" - checksum: 8e0e160c71216019c291a5a03b797b5359076067d16ea03b3dec63594093d45398f028d15c47eb89f2ddb6e8db18cc7e376b02d921dacc4fb31bbc8da46363c8 + checksum: e2c4d7be3e695c88d7194c363fba8ac644b36583bf9d608aa59dcd53cc5e422f7828611ee49c7934639ce827c0206d33fa94b3ea452ffbd2c8e7254ed90bc412 languageName: node linkType: hard -"eslint-plugin-testing-library@npm:^5.11.0, eslint-plugin-testing-library@npm:~5.11.0": - version: 5.11.0 - resolution: "eslint-plugin-testing-library@npm:5.11.0" +"eslint-plugin-testing-library@npm:^5.11.1, eslint-plugin-testing-library@npm:~5.11.1": + version: 5.11.1 + resolution: "eslint-plugin-testing-library@npm:5.11.1" dependencies: "@typescript-eslint/utils": ^5.58.0 peerDependencies: eslint: ^7.5.0 || ^8.0.0 - checksum: 7f19d3dedd7788b411ca3d9045de682feb26025b9c26d97d4e2f0bf62f5eaa276147d946bd5d0cd967b822e546a954330fdb7ef80485301264f646143f011a02 + checksum: 9f3fc68ef9f13016a4381b33ab5dbffcc189e5de3eaeba184bcf7d2771faa7f54e59c04b652162fb1c0f83fb52428dd909db5450a25508b94be59eba69fcc990 languageName: node linkType: hard @@ -21318,17 +21171,23 @@ __metadata: languageName: node linkType: hard -"expect@npm:^29.0.0, expect@npm:^29.6.1": - version: 29.6.1 - resolution: "expect@npm:29.6.1" +"expect@npm:^29.0.0, expect@npm:^29.7.0": + version: 29.7.0 + resolution: "expect@npm:29.7.0" dependencies: - "@jest/expect-utils": ^29.6.1 - "@types/node": "*" - jest-get-type: ^29.4.3 - jest-matcher-utils: ^29.6.1 - jest-message-util: ^29.6.1 - jest-util: ^29.6.1 - checksum: 4e712e52c90f6c54e748fd2876be33c43ada6a59088ddf6a1acb08b18b3b97b3a672124684abe32599986d2f2a438d5afad148837ee06ea386d2a4bf0348de78 + "@jest/expect-utils": ^29.7.0 + jest-get-type: ^29.6.3 + jest-matcher-utils: ^29.7.0 + jest-message-util: ^29.7.0 + jest-util: ^29.7.0 + checksum: 9257f10288e149b81254a0fda8ffe8d54a7061cd61d7515779998b012579d2b8c22354b0eb901daf0145f347403da582f75f359f4810c007182ad3fb318b5c0c + languageName: node + linkType: hard + +"exponential-backoff@npm:^3.1.1": + version: 3.1.1 + resolution: "exponential-backoff@npm:3.1.1" + checksum: 3d21519a4f8207c99f7457287291316306255a328770d320b401114ec8481986e4e467e854cb9914dd965e0a1ca810a23ccb559c642c88f4c7f55c55778a9b48 languageName: node linkType: hard @@ -21348,7 +21207,7 @@ __metadata: languageName: node linkType: hard -"express@npm:^4.16.4": +"express@npm:^4.16.4, express@npm:^4.17.1, express@npm:^4.17.2, express@npm:^4.17.3": version: 4.18.2 resolution: "express@npm:4.18.2" dependencies: @@ -21387,44 +21246,6 @@ __metadata: languageName: node linkType: hard -"express@npm:^4.17.1, express@npm:^4.17.2, express@npm:^4.17.3": - version: 4.17.3 - resolution: "express@npm:4.17.3" - dependencies: - accepts: ~1.3.8 - array-flatten: 1.1.1 - body-parser: 1.19.2 - content-disposition: 0.5.4 - content-type: ~1.0.4 - cookie: 0.4.2 - cookie-signature: 1.0.6 - debug: 2.6.9 - depd: ~1.1.2 - encodeurl: ~1.0.2 - escape-html: ~1.0.3 - etag: ~1.8.1 - finalhandler: ~1.1.2 - fresh: 0.5.2 - merge-descriptors: 1.0.1 - methods: ~1.1.2 - on-finished: ~2.3.0 - parseurl: ~1.3.3 - path-to-regexp: 0.1.7 - proxy-addr: ~2.0.7 - qs: 6.9.7 - range-parser: ~1.2.1 - safe-buffer: 5.2.1 - send: 0.17.2 - serve-static: 1.14.2 - setprototypeof: 1.2.0 - statuses: ~1.5.0 - type-is: ~1.6.18 - utils-merge: 1.0.1 - vary: ~1.1.2 - checksum: 967e53b74a37eafdf9789b9938c8df86102928b4985b1ad5e385c709deeab405a364de95ca744bc2cc5d05b5d9cc1efc69ae2ae17688a462038648d5a924bfad - languageName: node - linkType: hard - "ext-list@npm:^2.0.0": version: 2.2.2 resolution: "ext-list@npm:2.2.2" @@ -21539,6 +21360,13 @@ __metadata: languageName: node linkType: hard +"fast-fifo@npm:^1.1.0, fast-fifo@npm:^1.2.0": + version: 1.3.2 + resolution: "fast-fifo@npm:1.3.2" + checksum: 6bfcba3e4df5af7be3332703b69a7898a8ed7020837ec4395bb341bd96cc3a6d86c3f6071dd98da289618cf2234c70d84b2a6f09a33dd6f988b1ff60d8e54275 + languageName: node + linkType: hard + "fast-glob@npm:^2.2.6": version: 2.2.7 resolution: "fast-glob@npm:2.2.7" @@ -21646,6 +21474,17 @@ __metadata: languageName: node linkType: hard +"fast-xml-parser@npm:^4.2.4": + version: 4.3.2 + resolution: "fast-xml-parser@npm:4.3.2" + dependencies: + strnum: ^1.0.5 + bin: + fxparser: src/cli/cli.js + checksum: d507ce2efa5fd13d0a5ba28bd76dd68f2fc30ad8748357c37b70f360d19417866d79e35a688af067d5bceaaa796033fa985206aef9692f7a421e1326b6e73309 + languageName: node + linkType: hard + "fastest-levenshtein@npm:^1.0.12": version: 1.0.12 resolution: "fastest-levenshtein@npm:1.0.12" @@ -21653,7 +21492,7 @@ __metadata: languageName: node linkType: hard -"fastest-validator@npm:^1.16.0": +"fastest-validator@npm:^1.17.0": version: 1.17.0 resolution: "fastest-validator@npm:1.17.0" checksum: 0a6240f6dc7b544b3aadf9367410ecd64590dbfe505e6a24c339df954dd216f3a714d64a224abeef531d0a40dc348efe6cdbf59372d28954ac450cc0b212e0ec @@ -21955,7 +21794,7 @@ __metadata: languageName: node linkType: hard -"finalhandler@npm:1.1.2, finalhandler@npm:~1.1.2": +"finalhandler@npm:1.1.2": version: 1.1.2 resolution: "finalhandler@npm:1.1.2" dependencies: @@ -22522,19 +22361,7 @@ __metadata: languageName: node linkType: hard -"function.prototype.name@npm:^1.1.0, function.prototype.name@npm:^1.1.5": - version: 1.1.5 - resolution: "function.prototype.name@npm:1.1.5" - dependencies: - call-bind: ^1.0.2 - define-properties: ^1.1.3 - es-abstract: ^1.19.0 - functions-have-names: ^1.2.2 - checksum: acd21d733a9b649c2c442f067567743214af5fa248dbeee69d8278ce7df3329ea5abac572be9f7470b4ec1cd4d8f1040e3c5caccf98ebf2bf861a0deab735c27 - languageName: node - linkType: hard - -"function.prototype.name@npm:^1.1.6": +"function.prototype.name@npm:^1.1.0, function.prototype.name@npm:^1.1.6": version: 1.1.6 resolution: "function.prototype.name@npm:1.1.6" dependencies: @@ -22553,7 +22380,7 @@ __metadata: languageName: node linkType: hard -"functions-have-names@npm:^1.2.2, functions-have-names@npm:^1.2.3": +"functions-have-names@npm:^1.2.3": version: 1.2.3 resolution: "functions-have-names@npm:1.2.3" checksum: c3f1f5ba20f4e962efb71344ce0a40722163e85bee2101ce25f88214e78182d2d2476aa85ef37950c579eb6cf6ee811c17b3101bb84004bb75655f3e33f3fdb5 @@ -22672,10 +22499,10 @@ __metadata: languageName: node linkType: hard -"generate-password@npm:^1.7.0": - version: 1.7.0 - resolution: "generate-password@npm:1.7.0" - checksum: c0d13e9a9c72d84adc4365a0c0dbd28463f2da1975b4ec83f34a126b95122551274755db641418e5aa11c8d94c1d216c8da8314f38e56e05378e1a43792f4614 +"generate-password@npm:^1.7.1": + version: 1.7.1 + resolution: "generate-password@npm:1.7.1" + checksum: 76ab72dcf13ae174e4e069b32b94d7c2613c6e83db1c00ffad17a480a80875b28c4ed8f0767b143f7103b0742afb45a10549e6ef2f72c0a994979e77b8e95b86 languageName: node linkType: hard @@ -22707,10 +22534,10 @@ __metadata: languageName: node linkType: hard -"get-func-name@npm:^2.0.0": - version: 2.0.0 - resolution: "get-func-name@npm:2.0.0" - checksum: 8d82e69f3e7fab9e27c547945dfe5cc0c57fc0adf08ce135dddb01081d75684a03e7a0487466f478872b341d52ac763ae49e660d01ab83741f74932085f693c3 +"get-func-name@npm:^2.0.1, get-func-name@npm:^2.0.2": + version: 2.0.2 + resolution: "get-func-name@npm:2.0.2" + checksum: 3f62f4c23647de9d46e6f76d2b3eafe58933a9b3830c60669e4180d6c601ce1b4aa310ba8366143f55e52b139f992087a9f0647274e8745621fa2af7e0acf13b languageName: node linkType: hard @@ -23080,16 +22907,7 @@ __metadata: languageName: node linkType: hard -"globalthis@npm:^1.0.0": - version: 1.0.2 - resolution: "globalthis@npm:1.0.2" - dependencies: - define-properties: ^1.1.3 - checksum: 5a5f3c7ab94708260a98106b35946b74bb57f6b2013e39668dc9e8770b80a3418103b63a2b4aa01c31af15fdf6a2940398ffc0a408573c34c2304f928895adff - languageName: node - linkType: hard - -"globalthis@npm:^1.0.3": +"globalthis@npm:^1.0.0, globalthis@npm:^1.0.3": version: 1.0.3 resolution: "globalthis@npm:1.0.3" dependencies: @@ -23204,10 +23022,10 @@ __metadata: languageName: node linkType: hard -"google-libphonenumber@npm:^3.2.32": - version: 3.2.32 - resolution: "google-libphonenumber@npm:3.2.32" - checksum: 6f6e033df053759758c37a3ca76e83d2026933d900ffb24349040767561f81e4c2faa88a01b023019528f4f560d4a878c2c635b6e604c9d3111f801eb514c959 +"google-libphonenumber@npm:^3.2.33": + version: 3.2.33 + resolution: "google-libphonenumber@npm:3.2.33" + checksum: d029c19c7278ac9acb446028c2e304df16341732905a0cf8a105ab595cb19c01456fd57d76e48a3220038044d8ce361edc539eea2bfd924ea36fb28178cf7dbe languageName: node linkType: hard @@ -24082,19 +23900,6 @@ __metadata: languageName: node linkType: hard -"http-errors@npm:1.8.1": - version: 1.8.1 - resolution: "http-errors@npm:1.8.1" - dependencies: - depd: ~1.1.2 - inherits: 2.0.4 - setprototypeof: 1.2.0 - statuses: ">= 1.5.0 < 2" - toidentifier: 1.0.1 - checksum: d3c7e7e776fd51c0a812baff570bdf06fe49a5dc448b700ab6171b1250e4cf7db8b8f4c0b133e4bfe2451022a5790c1ca6c2cae4094dedd6ac8304a1267f91d2 - languageName: node - linkType: hard - "http-errors@npm:2.0.0": version: 2.0.0 resolution: "http-errors@npm:2.0.0" @@ -24315,12 +24120,12 @@ __metadata: languageName: node linkType: hard -"i18next@npm:>=17.0.11, i18next@npm:~23.4.5": - version: 23.4.5 - resolution: "i18next@npm:23.4.5" +"i18next@npm:>=17.0.11, i18next@npm:~23.4.9": + version: 23.4.9 + resolution: "i18next@npm:23.4.9" dependencies: "@babel/runtime": ^7.22.5 - checksum: b39a1edc19fc6fb34df4fd95581e2b86dd5d8c8345e3409a3366df606a72b62f25ee31a82fb9b0e22161cd856408989c91b74ee737b0cce00d547e6d371a14f5 + checksum: 46ac2415dc817c0e25e1c5e64332249825cd63b5fb9a5d42e3a2329d4ecd098c0f15a243f56b53e03db02e2e9931ca9bb4447370b2436f9ad6556de40ce981cf languageName: node linkType: hard @@ -24898,10 +24703,10 @@ __metadata: languageName: node linkType: hard -"ipaddr.js@npm:^2.0.1": - version: 2.0.1 - resolution: "ipaddr.js@npm:2.0.1" - checksum: dd194a394a843d470f88d17191b0948f383ed1c8e320813f850c336a0fcb5e9215d97ec26ca35ab4fbbd31392c8b3467f3e8344628029ed3710b2ff6b5d1034e +"ipaddr.js@npm:^2.0.1, ipaddr.js@npm:^2.1.0": + version: 2.1.0 + resolution: "ipaddr.js@npm:2.1.0" + checksum: 807a054f2bd720c4d97ee479d6c9e865c233bea21f139fb8dabd5a35c4226d2621c42e07b4ad94ff3f82add926a607d8d9d37c625ad0319f0e08f9f2bd1968e2 languageName: node linkType: hard @@ -25864,7 +25669,7 @@ __metadata: languageName: node linkType: hard -"istanbul-lib-instrument@npm:^5.0.4, istanbul-lib-instrument@npm:^5.1.0": +"istanbul-lib-instrument@npm:^5.0.4": version: 5.1.0 resolution: "istanbul-lib-instrument@npm:5.1.0" dependencies: @@ -25877,6 +25682,19 @@ __metadata: languageName: node linkType: hard +"istanbul-lib-instrument@npm:^6.0.0": + version: 6.0.1 + resolution: "istanbul-lib-instrument@npm:6.0.1" + dependencies: + "@babel/core": ^7.12.3 + "@babel/parser": ^7.14.7 + "@istanbuljs/schema": ^0.1.2 + istanbul-lib-coverage: ^3.2.0 + semver: ^7.5.4 + checksum: fb23472e739cfc9b027cefcd7d551d5e7ca7ff2817ae5150fab99fe42786a7f7b56a29a2aa8309c37092e18297b8003f9c274f50ca4360949094d17fbac81472 + languageName: node + linkType: hard + "istanbul-lib-processinfo@npm:^2.0.2": version: 2.0.3 resolution: "istanbul-lib-processinfo@npm:2.0.3" @@ -25963,59 +25781,59 @@ __metadata: languageName: node linkType: hard -"jest-changed-files@npm:^29.5.0": - version: 29.5.0 - resolution: "jest-changed-files@npm:29.5.0" +"jest-changed-files@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-changed-files@npm:29.7.0" dependencies: execa: ^5.0.0 + jest-util: ^29.7.0 p-limit: ^3.1.0 - checksum: a67a7cb3c11f8f92bd1b7c79e84f724cbd11a9ad51f3cdadafe3ce7ee3c79ee50dbea128f920f5fddc807e9e4e83f5462143094391feedd959a77dd20ab96cf3 + checksum: 963e203893c396c5dfc75e00a49426688efea7361b0f0e040035809cecd2d46b3c01c02be2d9e8d38b1138357d2de7719ea5b5be21f66c10f2e9685a5a73bb99 languageName: node linkType: hard -"jest-circus@npm:^29.6.1": - version: 29.6.1 - resolution: "jest-circus@npm:29.6.1" +"jest-circus@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-circus@npm:29.7.0" dependencies: - "@jest/environment": ^29.6.1 - "@jest/expect": ^29.6.1 - "@jest/test-result": ^29.6.1 - "@jest/types": ^29.6.1 + "@jest/environment": ^29.7.0 + "@jest/expect": ^29.7.0 + "@jest/test-result": ^29.7.0 + "@jest/types": ^29.6.3 "@types/node": "*" chalk: ^4.0.0 co: ^4.6.0 - dedent: ^0.7.0 + dedent: ^1.0.0 is-generator-fn: ^2.0.0 - jest-each: ^29.6.1 - jest-matcher-utils: ^29.6.1 - jest-message-util: ^29.6.1 - jest-runtime: ^29.6.1 - jest-snapshot: ^29.6.1 - jest-util: ^29.6.1 + jest-each: ^29.7.0 + jest-matcher-utils: ^29.7.0 + jest-message-util: ^29.7.0 + jest-runtime: ^29.7.0 + jest-snapshot: ^29.7.0 + jest-util: ^29.7.0 p-limit: ^3.1.0 - pretty-format: ^29.6.1 + pretty-format: ^29.7.0 pure-rand: ^6.0.0 slash: ^3.0.0 stack-utils: ^2.0.3 - checksum: f3e39a74b601929448df92037f0599978d4d7a4b8f636f64e8020533d2d2b2f669d6729c80c6efed69341ca26753e5061e9787a0acd6c70af2127a94375ebb76 + checksum: 349437148924a5a109c9b8aad6d393a9591b4dac1918fc97d81b7fc515bc905af9918495055071404af1fab4e48e4b04ac3593477b1d5dcf48c4e71b527c70a7 languageName: node linkType: hard -"jest-cli@npm:^29.6.1": - version: 29.6.1 - resolution: "jest-cli@npm:29.6.1" +"jest-cli@npm:^29.6.4": + version: 29.7.0 + resolution: "jest-cli@npm:29.7.0" dependencies: - "@jest/core": ^29.6.1 - "@jest/test-result": ^29.6.1 - "@jest/types": ^29.6.1 + "@jest/core": ^29.7.0 + "@jest/test-result": ^29.7.0 + "@jest/types": ^29.6.3 chalk: ^4.0.0 + create-jest: ^29.7.0 exit: ^0.1.2 - graceful-fs: ^4.2.9 import-local: ^3.0.2 - jest-config: ^29.6.1 - jest-util: ^29.6.1 - jest-validate: ^29.6.1 - prompts: ^2.0.1 + jest-config: ^29.7.0 + jest-util: ^29.7.0 + jest-validate: ^29.7.0 yargs: ^17.3.1 peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 @@ -26024,34 +25842,34 @@ __metadata: optional: true bin: jest: bin/jest.js - checksum: f5854ffea977b9a12520ea71f8d0cc8a626cbb93d7e1e6eea18a2a1f2b25f70f1b6b08a89f11b4dc7dd36a1776a9ac2cf8ec5c7998086f913ee690c06c07c949 + checksum: 664901277a3f5007ea4870632ed6e7889db9da35b2434e7cb488443e6bf5513889b344b7fddf15112135495b9875892b156faeb2d7391ddb9e2a849dcb7b6c36 languageName: node linkType: hard -"jest-config@npm:^29.6.1": - version: 29.6.1 - resolution: "jest-config@npm:29.6.1" +"jest-config@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-config@npm:29.7.0" dependencies: "@babel/core": ^7.11.6 - "@jest/test-sequencer": ^29.6.1 - "@jest/types": ^29.6.1 - babel-jest: ^29.6.1 + "@jest/test-sequencer": ^29.7.0 + "@jest/types": ^29.6.3 + babel-jest: ^29.7.0 chalk: ^4.0.0 ci-info: ^3.2.0 deepmerge: ^4.2.2 glob: ^7.1.3 graceful-fs: ^4.2.9 - jest-circus: ^29.6.1 - jest-environment-node: ^29.6.1 - jest-get-type: ^29.4.3 - jest-regex-util: ^29.4.3 - jest-resolve: ^29.6.1 - jest-runner: ^29.6.1 - jest-util: ^29.6.1 - jest-validate: ^29.6.1 + jest-circus: ^29.7.0 + jest-environment-node: ^29.7.0 + jest-get-type: ^29.6.3 + jest-regex-util: ^29.6.3 + jest-resolve: ^29.7.0 + jest-runner: ^29.7.0 + jest-util: ^29.7.0 + jest-validate: ^29.7.0 micromatch: ^4.0.4 parse-json: ^5.2.0 - pretty-format: ^29.6.1 + pretty-format: ^29.7.0 slash: ^3.0.0 strip-json-comments: ^3.1.1 peerDependencies: @@ -26062,7 +25880,7 @@ __metadata: optional: true ts-node: optional: true - checksum: 3a30afeb28cc5658ef9cd95f2551ab8a29641bb6d377eb239cba8e7522eb4611c9a98cdcf173d87f5ad7b5e1ad242c3cd5434a260107bd3c7e8305d05023e05c + checksum: 4cabf8f894c180cac80b7df1038912a3fc88f96f2622de33832f4b3314f83e22b08fb751da570c0ab2b7988f21604bdabade95e3c0c041068ac578c085cf7dff languageName: node linkType: hard @@ -26078,72 +25896,72 @@ __metadata: languageName: node linkType: hard -"jest-diff@npm:^29.6.1": - version: 29.6.2 - resolution: "jest-diff@npm:29.6.2" +"jest-diff@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-diff@npm:29.7.0" dependencies: chalk: ^4.0.0 - diff-sequences: ^29.4.3 - jest-get-type: ^29.4.3 - pretty-format: ^29.6.2 - checksum: 0effd66a0c23f8c139ebf7ca99ed30b479b86fff66f19ad4869f130aaf7ae6a24ca1533f697b7e4930cbe2ddffc85387723fcca673501c653fb77a38f538e959 + diff-sequences: ^29.6.3 + jest-get-type: ^29.6.3 + pretty-format: ^29.7.0 + checksum: 08e24a9dd43bfba1ef07a6374e5af138f53137b79ec3d5cc71a2303515335898888fa5409959172e1e05de966c9e714368d15e8994b0af7441f0721ee8e1bb77 languageName: node linkType: hard -"jest-docblock@npm:^29.4.3": - version: 29.4.3 - resolution: "jest-docblock@npm:29.4.3" +"jest-docblock@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-docblock@npm:29.7.0" dependencies: detect-newline: ^3.0.0 - checksum: e0e9df1485bb8926e5b33478cdf84b3387d9caf3658e7dc1eaa6dc34cb93dea0d2d74797f6e940f0233a88f3dadd60957f2288eb8f95506361f85b84bf8661df + checksum: 66390c3e9451f8d96c5da62f577a1dad701180cfa9b071c5025acab2f94d7a3efc2515cfa1654ebe707213241541ce9c5530232cdc8017c91ed64eea1bd3b192 languageName: node linkType: hard -"jest-each@npm:^29.6.1": - version: 29.6.1 - resolution: "jest-each@npm:29.6.1" +"jest-each@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-each@npm:29.7.0" dependencies: - "@jest/types": ^29.6.1 + "@jest/types": ^29.6.3 chalk: ^4.0.0 - jest-get-type: ^29.4.3 - jest-util: ^29.6.1 - pretty-format: ^29.6.1 - checksum: 9d2ea7ed5326ee8c22523b22c66c85fe73754ea39f9b389881956508ee441392c61072a5fbf673e39beddd31d011bb94acae3edc77053ba4f9aa5c060114a5c8 + jest-get-type: ^29.6.3 + jest-util: ^29.7.0 + pretty-format: ^29.7.0 + checksum: e88f99f0184000fc8813f2a0aa79e29deeb63700a3b9b7928b8a418d7d93cd24933608591dbbdea732b473eb2021c72991b5cc51a17966842841c6e28e6f691c languageName: node linkType: hard -"jest-environment-jsdom@npm:~29.6.1": - version: 29.6.1 - resolution: "jest-environment-jsdom@npm:29.6.1" +"jest-environment-jsdom@npm:~29.6.4": + version: 29.6.4 + resolution: "jest-environment-jsdom@npm:29.6.4" dependencies: - "@jest/environment": ^29.6.1 - "@jest/fake-timers": ^29.6.1 - "@jest/types": ^29.6.1 + "@jest/environment": ^29.6.4 + "@jest/fake-timers": ^29.6.4 + "@jest/types": ^29.6.3 "@types/jsdom": ^20.0.0 "@types/node": "*" - jest-mock: ^29.6.1 - jest-util: ^29.6.1 + jest-mock: ^29.6.3 + jest-util: ^29.6.3 jsdom: ^20.0.0 peerDependencies: canvas: ^2.5.0 peerDependenciesMeta: canvas: optional: true - checksum: e8a9bff00a011235b004699f34bc85b18fdac82049513410cbf2dc1c2dd332bc1b4f108976412df1d29f2fa8bf0360aaf84eb0f5b4db1db2fb7fc7155dc14be7 + checksum: 2afe105f12d7d93ca56e2e6f67ab07ada3dd3da0516d1198f254930683ab9feb2b8c14417baaca53544eed88fd7fb5744f0dbce2e100269746187317ce0347df languageName: node linkType: hard -"jest-environment-node@npm:^29.6.1": - version: 29.6.1 - resolution: "jest-environment-node@npm:29.6.1" +"jest-environment-node@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-environment-node@npm:29.7.0" dependencies: - "@jest/environment": ^29.6.1 - "@jest/fake-timers": ^29.6.1 - "@jest/types": ^29.6.1 + "@jest/environment": ^29.7.0 + "@jest/fake-timers": ^29.7.0 + "@jest/types": ^29.6.3 "@types/node": "*" - jest-mock: ^29.6.1 - jest-util: ^29.6.1 - checksum: a50287e1ff29d131646bd09acc3222ac6ea0ad61e86bf73851d318ef2be0633a421b8558c4a15ddc67e0ffcfc32da7f6a0d8a2ddbfa85453837899dec88d256c + jest-mock: ^29.7.0 + jest-util: ^29.7.0 + checksum: 501a9966292cbe0ca3f40057a37587cb6def25e1e0c5e39ac6c650fe78d3c70a2428304341d084ac0cced5041483acef41c477abac47e9a290d5545fd2f15646 languageName: node linkType: hard @@ -26164,10 +25982,10 @@ __metadata: languageName: node linkType: hard -"jest-get-type@npm:^29.4.3": - version: 29.4.3 - resolution: "jest-get-type@npm:29.4.3" - checksum: 6ac7f2dde1c65e292e4355b6c63b3a4897d7e92cb4c8afcf6d397f2682f8080e094c8b0b68205a74d269882ec06bf696a9de6cd3e1b7333531e5ed7b112605ce +"jest-get-type@npm:^29.6.3": + version: 29.6.3 + resolution: "jest-get-type@npm:29.6.3" + checksum: 88ac9102d4679d768accae29f1e75f592b760b44277df288ad76ce5bf038c3f5ce3719dea8aa0f035dac30e9eb034b848ce716b9183ad7cc222d029f03e92205 languageName: node linkType: hard @@ -26196,65 +26014,65 @@ __metadata: languageName: node linkType: hard -"jest-haste-map@npm:^29.6.1": - version: 29.6.1 - resolution: "jest-haste-map@npm:29.6.1" +"jest-haste-map@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-haste-map@npm:29.7.0" dependencies: - "@jest/types": ^29.6.1 + "@jest/types": ^29.6.3 "@types/graceful-fs": ^4.1.3 "@types/node": "*" anymatch: ^3.0.3 fb-watchman: ^2.0.0 fsevents: ^2.3.2 graceful-fs: ^4.2.9 - jest-regex-util: ^29.4.3 - jest-util: ^29.6.1 - jest-worker: ^29.6.1 + jest-regex-util: ^29.6.3 + jest-util: ^29.7.0 + jest-worker: ^29.7.0 micromatch: ^4.0.4 walker: ^1.0.8 dependenciesMeta: fsevents: optional: true - checksum: 7c74d5a0f6aafa9f4e60fae7949d4774770c0243fb529c24f2f4c81229db479fa318dc8b81e8d226865aef1d600af10bd8404dd208e802318434b46f75d5d869 + checksum: c2c8f2d3e792a963940fbdfa563ce14ef9e14d4d86da645b96d3cd346b8d35c5ce0b992ee08593939b5f718cf0a1f5a90011a056548a1dbf58397d4356786f01 languageName: node linkType: hard -"jest-leak-detector@npm:^29.6.1": - version: 29.6.1 - resolution: "jest-leak-detector@npm:29.6.1" +"jest-leak-detector@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-leak-detector@npm:29.7.0" dependencies: - jest-get-type: ^29.4.3 - pretty-format: ^29.6.1 - checksum: 5122d40c248effaede4c9ee3a99046a3f30088fef7bfc4af534678b432455161399357af46deb6423de7e05c6597920d6ee8cd570e26048886a90d541334f8c8 + jest-get-type: ^29.6.3 + pretty-format: ^29.7.0 + checksum: e3950e3ddd71e1d0c22924c51a300a1c2db6cf69ec1e51f95ccf424bcc070f78664813bef7aed4b16b96dfbdeea53fe358f8aeaaea84346ae15c3735758f1605 languageName: node linkType: hard -"jest-matcher-utils@npm:^29.6.1": - version: 29.6.1 - resolution: "jest-matcher-utils@npm:29.6.1" +"jest-matcher-utils@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-matcher-utils@npm:29.7.0" dependencies: chalk: ^4.0.0 - jest-diff: ^29.6.1 - jest-get-type: ^29.4.3 - pretty-format: ^29.6.1 - checksum: d2efa6aed6e4820758b732b9fefd315c7fa4508ee690da656e1c5ac4c1a0f4cee5b04c9719ee1fda9aeb883b4209186c145089ced521e715b9fa70afdfa4a9c6 + jest-diff: ^29.7.0 + jest-get-type: ^29.6.3 + pretty-format: ^29.7.0 + checksum: d7259e5f995d915e8a37a8fd494cb7d6af24cd2a287b200f831717ba0d015190375f9f5dc35393b8ba2aae9b2ebd60984635269c7f8cff7d85b077543b7744cd languageName: node linkType: hard -"jest-message-util@npm:^29.6.1": - version: 29.6.1 - resolution: "jest-message-util@npm:29.6.1" +"jest-message-util@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-message-util@npm:29.7.0" dependencies: "@babel/code-frame": ^7.12.13 - "@jest/types": ^29.6.1 + "@jest/types": ^29.6.3 "@types/stack-utils": ^2.0.0 chalk: ^4.0.0 graceful-fs: ^4.2.9 micromatch: ^4.0.4 - pretty-format: ^29.6.1 + pretty-format: ^29.7.0 slash: ^3.0.0 stack-utils: ^2.0.3 - checksum: 3e7cb2ff087fe72255292e151d24e4fbb4cd6134885c0a67a4b302f233fe4110bf7580b176f427f05ad7550eb878ed94237209785d09d659a7d171ffa59c068f + checksum: a9d025b1c6726a2ff17d54cc694de088b0489456c69106be6b615db7a51b7beb66788bea7a59991a019d924fbf20f67d085a445aedb9a4d6760363f4d7d09930 languageName: node linkType: hard @@ -26268,14 +26086,14 @@ __metadata: languageName: node linkType: hard -"jest-mock@npm:^29.6.1": - version: 29.6.1 - resolution: "jest-mock@npm:29.6.1" +"jest-mock@npm:^29.6.3, jest-mock@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-mock@npm:29.7.0" dependencies: - "@jest/types": ^29.6.1 + "@jest/types": ^29.6.3 "@types/node": "*" - jest-util: ^29.6.1 - checksum: 5e902f1a7eba1eb1a64eb6c19947fe1316834359d9869d0e2644d8979b9cad0465885dc4c9909c471888cddeea835c938cec6263d386d3d1aad720fc74e52ea1 + jest-util: ^29.7.0 + checksum: 81ba9b68689a60be1482212878973700347cb72833c5e5af09895882b9eb5c4e02843a1bbdf23f94c52d42708bab53a30c45a3482952c9eec173d1eaac5b86c5 languageName: node linkType: hard @@ -26298,96 +26116,96 @@ __metadata: languageName: node linkType: hard -"jest-regex-util@npm:^29.4.3": - version: 29.4.3 - resolution: "jest-regex-util@npm:29.4.3" - checksum: 96fc7fc28cd4dd73a63c13a526202c4bd8b351d4e5b68b1a2a2c88da3308c2a16e26feaa593083eb0bac38cca1aa9dd05025412e7de013ba963fb8e66af22b8a +"jest-regex-util@npm:^29.6.3": + version: 29.6.3 + resolution: "jest-regex-util@npm:29.6.3" + checksum: 0518beeb9bf1228261695e54f0feaad3606df26a19764bc19541e0fc6e2a3737191904607fb72f3f2ce85d9c16b28df79b7b1ec9443aa08c3ef0e9efda6f8f2a languageName: node linkType: hard -"jest-resolve-dependencies@npm:^29.6.1": - version: 29.6.1 - resolution: "jest-resolve-dependencies@npm:29.6.1" +"jest-resolve-dependencies@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-resolve-dependencies@npm:29.7.0" dependencies: - jest-regex-util: ^29.4.3 - jest-snapshot: ^29.6.1 - checksum: cee0a0fe53fd4531492a526b6ccd32377baad1eff6e6c124f04e9dc920219fd23fd39be88bb9551ee68d5fe92a3af627b423c9bc65a2aa0ac8a223c0e74dbbbb + jest-regex-util: ^29.6.3 + jest-snapshot: ^29.7.0 + checksum: aeb75d8150aaae60ca2bb345a0d198f23496494677cd6aefa26fc005faf354061f073982175daaf32b4b9d86b26ca928586344516e3e6969aa614cb13b883984 languageName: node linkType: hard -"jest-resolve@npm:^29.6.1": - version: 29.6.1 - resolution: "jest-resolve@npm:29.6.1" +"jest-resolve@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-resolve@npm:29.7.0" dependencies: chalk: ^4.0.0 graceful-fs: ^4.2.9 - jest-haste-map: ^29.6.1 + jest-haste-map: ^29.7.0 jest-pnp-resolver: ^1.2.2 - jest-util: ^29.6.1 - jest-validate: ^29.6.1 + jest-util: ^29.7.0 + jest-validate: ^29.7.0 resolve: ^1.20.0 resolve.exports: ^2.0.0 slash: ^3.0.0 - checksum: 9ce979a0f4a751bea58caea76415112df2a3f4d58e294019872244728aadd001f0ec20c873a3c805dd8f7c762143b3c14d00f87d124ed87c9981fbf8723090ef + checksum: 0ca218e10731aa17920526ec39deaec59ab9b966237905ffc4545444481112cd422f01581230eceb7e82d86f44a543d520a71391ec66e1b4ef1a578bd5c73487 languageName: node linkType: hard -"jest-runner@npm:^29.6.1": - version: 29.6.1 - resolution: "jest-runner@npm:29.6.1" +"jest-runner@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-runner@npm:29.7.0" dependencies: - "@jest/console": ^29.6.1 - "@jest/environment": ^29.6.1 - "@jest/test-result": ^29.6.1 - "@jest/transform": ^29.6.1 - "@jest/types": ^29.6.1 + "@jest/console": ^29.7.0 + "@jest/environment": ^29.7.0 + "@jest/test-result": ^29.7.0 + "@jest/transform": ^29.7.0 + "@jest/types": ^29.6.3 "@types/node": "*" chalk: ^4.0.0 emittery: ^0.13.1 graceful-fs: ^4.2.9 - jest-docblock: ^29.4.3 - jest-environment-node: ^29.6.1 - jest-haste-map: ^29.6.1 - jest-leak-detector: ^29.6.1 - jest-message-util: ^29.6.1 - jest-resolve: ^29.6.1 - jest-runtime: ^29.6.1 - jest-util: ^29.6.1 - jest-watcher: ^29.6.1 - jest-worker: ^29.6.1 + jest-docblock: ^29.7.0 + jest-environment-node: ^29.7.0 + jest-haste-map: ^29.7.0 + jest-leak-detector: ^29.7.0 + jest-message-util: ^29.7.0 + jest-resolve: ^29.7.0 + jest-runtime: ^29.7.0 + jest-util: ^29.7.0 + jest-watcher: ^29.7.0 + jest-worker: ^29.7.0 p-limit: ^3.1.0 source-map-support: 0.5.13 - checksum: 0e4dbda26669ae31fee32f8a62b3119bba510f2d17a098d6157b48a73ed2fc9842405bf893f3045c12b3632c7c0e3399fb22684b18ab5566aff4905b26c79a9a + checksum: f0405778ea64812bf9b5c50b598850d94ccf95d7ba21f090c64827b41decd680ee19fcbb494007cdd7f5d0d8906bfc9eceddd8fa583e753e736ecd462d4682fb languageName: node linkType: hard -"jest-runtime@npm:^29.6.1": - version: 29.6.1 - resolution: "jest-runtime@npm:29.6.1" +"jest-runtime@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-runtime@npm:29.7.0" dependencies: - "@jest/environment": ^29.6.1 - "@jest/fake-timers": ^29.6.1 - "@jest/globals": ^29.6.1 - "@jest/source-map": ^29.6.0 - "@jest/test-result": ^29.6.1 - "@jest/transform": ^29.6.1 - "@jest/types": ^29.6.1 + "@jest/environment": ^29.7.0 + "@jest/fake-timers": ^29.7.0 + "@jest/globals": ^29.7.0 + "@jest/source-map": ^29.6.3 + "@jest/test-result": ^29.7.0 + "@jest/transform": ^29.7.0 + "@jest/types": ^29.6.3 "@types/node": "*" chalk: ^4.0.0 cjs-module-lexer: ^1.0.0 collect-v8-coverage: ^1.0.0 glob: ^7.1.3 graceful-fs: ^4.2.9 - jest-haste-map: ^29.6.1 - jest-message-util: ^29.6.1 - jest-mock: ^29.6.1 - jest-regex-util: ^29.4.3 - jest-resolve: ^29.6.1 - jest-snapshot: ^29.6.1 - jest-util: ^29.6.1 + jest-haste-map: ^29.7.0 + jest-message-util: ^29.7.0 + jest-mock: ^29.7.0 + jest-regex-util: ^29.6.3 + jest-resolve: ^29.7.0 + jest-snapshot: ^29.7.0 + jest-util: ^29.7.0 slash: ^3.0.0 strip-bom: ^4.0.0 - checksum: 7c360c9694467d996f3d6d914fefa0e7bda554adda8c2b9fba31546dba663d71a64eda103ff68120a2422f3c16db8f0bc2c445923fe8fb934f37e53ef74fb429 + checksum: d19f113d013e80691e07047f68e1e3448ef024ff2c6b586ce4f90cd7d4c62a2cd1d460110491019719f3c59bfebe16f0e201ed005ef9f80e2cf798c374eed54e languageName: node linkType: hard @@ -26401,32 +26219,31 @@ __metadata: languageName: node linkType: hard -"jest-snapshot@npm:^29.6.1": - version: 29.6.1 - resolution: "jest-snapshot@npm:29.6.1" +"jest-snapshot@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-snapshot@npm:29.7.0" dependencies: "@babel/core": ^7.11.6 "@babel/generator": ^7.7.2 "@babel/plugin-syntax-jsx": ^7.7.2 "@babel/plugin-syntax-typescript": ^7.7.2 "@babel/types": ^7.3.3 - "@jest/expect-utils": ^29.6.1 - "@jest/transform": ^29.6.1 - "@jest/types": ^29.6.1 - "@types/prettier": ^2.1.5 + "@jest/expect-utils": ^29.7.0 + "@jest/transform": ^29.7.0 + "@jest/types": ^29.6.3 babel-preset-current-node-syntax: ^1.0.0 chalk: ^4.0.0 - expect: ^29.6.1 + expect: ^29.7.0 graceful-fs: ^4.2.9 - jest-diff: ^29.6.1 - jest-get-type: ^29.4.3 - jest-matcher-utils: ^29.6.1 - jest-message-util: ^29.6.1 - jest-util: ^29.6.1 + jest-diff: ^29.7.0 + jest-get-type: ^29.6.3 + jest-matcher-utils: ^29.7.0 + jest-message-util: ^29.7.0 + jest-util: ^29.7.0 natural-compare: ^1.4.0 - pretty-format: ^29.6.1 + pretty-format: ^29.7.0 semver: ^7.5.3 - checksum: e8f69d1fd4a29d354d4dca9eb2a22674b300f8ef509e4f1e75337c880414a00d2bdc9d3849a6855dbb5a76bfbe74603f33435378a3877e69f0838e4cc2244350 + checksum: 86821c3ad0b6899521ce75ee1ae7b01b17e6dfeff9166f2cf17f012e0c5d8c798f30f9e4f8f7f5bed01ea7b55a6bc159f5eda778311162cbfa48785447c237ad languageName: node linkType: hard @@ -26444,47 +26261,47 @@ __metadata: languageName: node linkType: hard -"jest-util@npm:^29.0.0, jest-util@npm:^29.6.1": - version: 29.6.1 - resolution: "jest-util@npm:29.6.1" +"jest-util@npm:^29.0.0, jest-util@npm:^29.6.3, jest-util@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-util@npm:29.7.0" dependencies: - "@jest/types": ^29.6.1 + "@jest/types": ^29.6.3 "@types/node": "*" chalk: ^4.0.0 ci-info: ^3.2.0 graceful-fs: ^4.2.9 picomatch: ^2.2.3 - checksum: fc553556c1350c443449cadaba5fb9d604628e8b5ceb6ceaf4e7e08975b24277d0a14bf2e0f956024e03c23e556fcb074659423422a06fbedf2ab52978697ac7 + checksum: 042ab4980f4ccd4d50226e01e5c7376a8556b472442ca6091a8f102488c0f22e6e8b89ea874111d2328a2080083bf3225c86f3788c52af0bd0345a00eb57a3ca languageName: node linkType: hard -"jest-validate@npm:^29.6.1": - version: 29.6.1 - resolution: "jest-validate@npm:29.6.1" +"jest-validate@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-validate@npm:29.7.0" dependencies: - "@jest/types": ^29.6.1 + "@jest/types": ^29.6.3 camelcase: ^6.2.0 chalk: ^4.0.0 - jest-get-type: ^29.4.3 + jest-get-type: ^29.6.3 leven: ^3.1.0 - pretty-format: ^29.6.1 - checksum: d2491f3f33d9bbc2dcaaa6acbff26f257b59c5eeceb65a52a9c1cec2f679b836ec2a4658b7004c0ef9d90cd0d9bd664e41d5ed6900f932bea742dd8e6b85e7f1 + pretty-format: ^29.7.0 + checksum: 191fcdc980f8a0de4dbdd879fa276435d00eb157a48683af7b3b1b98b0f7d9de7ffe12689b617779097ff1ed77601b9f7126b0871bba4f776e222c40f62e9dae languageName: node linkType: hard -"jest-watcher@npm:^29.6.1": - version: 29.6.1 - resolution: "jest-watcher@npm:29.6.1" +"jest-watcher@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-watcher@npm:29.7.0" dependencies: - "@jest/test-result": ^29.6.1 - "@jest/types": ^29.6.1 + "@jest/test-result": ^29.7.0 + "@jest/types": ^29.6.3 "@types/node": "*" ansi-escapes: ^4.2.1 chalk: ^4.0.0 emittery: ^0.13.1 - jest-util: ^29.6.1 + jest-util: ^29.7.0 string-length: ^4.0.1 - checksum: 69bd5a602284fdce6eba5486c5c57aca6b511d91cb0907c34c104d6dd931e18ce67baa7f8e280fa473e5d81ea3e7b9e7d94f712c37ab0b3b8cc2aec30676955d + checksum: 67e6e7fe695416deff96b93a14a561a6db69389a0667e9489f24485bb85e5b54e12f3b2ba511ec0b777eca1e727235b073e3ebcdd473d68888650489f88df92f languageName: node linkType: hard @@ -26520,26 +26337,26 @@ __metadata: languageName: node linkType: hard -"jest-worker@npm:^29.6.1": - version: 29.6.1 - resolution: "jest-worker@npm:29.6.1" +"jest-worker@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-worker@npm:29.7.0" dependencies: "@types/node": "*" - jest-util: ^29.6.1 + jest-util: ^29.7.0 merge-stream: ^2.0.0 supports-color: ^8.0.0 - checksum: 0af309ea4db17c4c47e84a9246f907960a15577683c005fdeafc8f3c06bc455136f95a6f28fa2a3e924b767eb4dacd9b40915a7707305f88586f099af3ac27a8 + checksum: 30fff60af49675273644d408b650fc2eb4b5dcafc5a0a455f238322a8f9d8a98d847baca9d51ff197b6747f54c7901daa2287799230b856a0f48287d131f8c13 languageName: node linkType: hard -"jest@npm:~29.6.1": - version: 29.6.1 - resolution: "jest@npm:29.6.1" +"jest@npm:~29.6.4": + version: 29.6.4 + resolution: "jest@npm:29.6.4" dependencies: - "@jest/core": ^29.6.1 - "@jest/types": ^29.6.1 + "@jest/core": ^29.6.4 + "@jest/types": ^29.6.3 import-local: ^3.0.2 - jest-cli: ^29.6.1 + jest-cli: ^29.6.4 peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: @@ -26547,7 +26364,7 @@ __metadata: optional: true bin: jest: bin/jest.js - checksum: 7b8c0ca72f483e00ec19dcf9549f9a9af8ae468ab62925b148d714b58eb52d5fea9a082625193bc833d2d9b64cf65a11f3d37857636c5551af05c10aec4ce71b + checksum: ba28ca7a86d029bcd742bb254c0c8d0119c1e002ddae128ff6409ebabc0b29c36f69dbf3fdd326aff16e7b2500c9a918bbc6a9a5db4d966e035127242239439f languageName: node linkType: hard @@ -26857,7 +26674,7 @@ __metadata: languageName: node linkType: hard -"json5@npm:^2.1.2, json5@npm:^2.2.2, json5@npm:^2.2.3": +"json5@npm:^2.1.2, json5@npm:^2.2.3": version: 2.2.3 resolution: "json5@npm:2.2.3" bin: @@ -27069,14 +26886,14 @@ __metadata: languageName: node linkType: hard -"katex@npm:^0.16.7, katex@npm:~0.16.7": - version: 0.16.7 - resolution: "katex@npm:0.16.7" +"katex@npm:~0.16.9": + version: 0.16.9 + resolution: "katex@npm:0.16.9" dependencies: commander: ^8.3.0 bin: katex: cli.js - checksum: 6c3f61e28820ecba074a149d17be6d731d8a950cdd7826851e16f2b0f3627c4119acd8c6e4fb86950063c4e99a6e478720ea6cca3dc82e59bbca81001ee00b70 + checksum: 861194dfd4d86505e657f688fb73048d46ac498edafce71199502a35b03c0ecc35ba930c631be79c4a09d90a0d23476673cd52f6bc367c7a161854d64005fa95 languageName: node linkType: hard @@ -27554,6 +27371,13 @@ __metadata: languageName: node linkType: hard +"lodash.escape@npm:^4.0.1": + version: 4.0.1 + resolution: "lodash.escape@npm:4.0.1" + checksum: fcb54f457497256964d619d5cccbd80a961916fca60df3fe0fa3e7f052715c2944c0ed5aefb4f9e047d127d44aa2d55555f3350cb42c6549e9e293fb30b41e7f + languageName: node + linkType: hard + "lodash.flatten@npm:^4.4.0": version: 4.4.0 resolution: "lodash.flatten@npm:4.4.0" @@ -27582,6 +27406,13 @@ __metadata: languageName: node linkType: hard +"lodash.invokemap@npm:^4.6.0": + version: 4.6.0 + resolution: "lodash.invokemap@npm:4.6.0" + checksum: 646ceebbefbcb6da301f8c2868254680fd0bcdc6ada470495d9ae49c9c32938829c1b38a38c95d0258409a9655f85db404b16e648381c7450b7ed3d9c52d8808 + languageName: node + linkType: hard + "lodash.isboolean@npm:^3.0.3": version: 3.0.3 resolution: "lodash.isboolean@npm:3.0.3" @@ -27645,6 +27476,13 @@ __metadata: languageName: node linkType: hard +"lodash.pullall@npm:^4.2.0": + version: 4.2.0 + resolution: "lodash.pullall@npm:4.2.0" + checksum: 7a5fbaedf186ec197ce1e0b9ba1d88a89773ebaf6a8291c7d273838cac59cb3b339cf36ef00e94172862ee84d2304c38face161846f08f5581d0553dcbdcd090 + languageName: node + linkType: hard + "lodash.sortby@npm:^4.7.0": version: 4.7.0 resolution: "lodash.sortby@npm:4.7.0" @@ -27687,6 +27525,13 @@ __metadata: languageName: node linkType: hard +"lodash.uniqby@npm:^4.7.0": + version: 4.7.0 + resolution: "lodash.uniqby@npm:4.7.0" + checksum: 659264545a95726d1493123345aad8cbf56e17810fa9a0b029852c6d42bc80517696af09d99b23bef1845d10d95e01b8b4a1da578f22aeba7a30d3e0022a4938 + languageName: node + linkType: hard + "lodash.without@npm:^4.4.0": version: 4.4.0 resolution: "lodash.without@npm:4.4.0" @@ -27798,12 +27643,12 @@ __metadata: languageName: node linkType: hard -"loupe@npm:^2.3.1": - version: 2.3.4 - resolution: "loupe@npm:2.3.4" +"loupe@npm:^2.3.6": + version: 2.3.7 + resolution: "loupe@npm:2.3.7" dependencies: - get-func-name: ^2.0.0 - checksum: 5af91db61aa18530f1749a64735ee194ac263e65e9f4d1562bf3036c591f1baa948289c193e0e34c7b5e2c1b75d3c1dc4fce87f5edb3cee10b0c0df46bc9ffb3 + get-func-name: ^2.0.1 + checksum: 96c058ec7167598e238bb7fb9def2f9339215e97d6685d9c1e3e4bdb33d14600e11fe7a812cf0c003dfb73ca2df374f146280b2287cae9e8d989e9d7a69a203b languageName: node linkType: hard @@ -29034,15 +28879,15 @@ __metadata: languageName: node linkType: hard -"moleculer@npm:^0.14.29": - version: 0.14.29 - resolution: "moleculer@npm:0.14.29" +"moleculer@npm:^0.14.31": + version: 0.14.31 + resolution: "moleculer@npm:0.14.31" dependencies: args: ^5.0.3 eventemitter2: ^6.4.9 - fastest-validator: ^1.16.0 + fastest-validator: ^1.17.0 glob: ^7.2.0 - ipaddr.js: ^2.0.1 + ipaddr.js: ^2.1.0 kleur: ^4.1.5 lodash: ^4.17.21 lru-cache: ^6.0.0 @@ -29119,7 +28964,7 @@ __metadata: bin: moleculer-runner: bin/moleculer-runner.js moleculer-runner-esm: bin/moleculer-runner.mjs - checksum: b04d1012dcf86136e1bfc1930a0acfde028295cc5220ae0ed8f4d23236cf63fa3417f01f1f82cd11d1661aebd32d4834bffe052dbe6d89d514acde1d9a107eff + checksum: 4d6d05f98e2174b708de8c946901a4a3a1de411505f43909216a9d2ff93820e6eec7edd44b45c99ab04c6c312304a63a346288e181fead48558763fb4ec69c24 languageName: node linkType: hard @@ -29560,12 +29405,12 @@ __metadata: languageName: node linkType: hard -"node-addon-api@npm:^5.0.0": - version: 5.0.0 - resolution: "node-addon-api@npm:5.0.0" +"node-addon-api@npm:^6.1.0": + version: 6.1.0 + resolution: "node-addon-api@npm:6.1.0" dependencies: node-gyp: latest - checksum: 7c5e2043ac37f6108784d94ed73a44ae6d3e68eb968de60680922fc6bc3d17fa69448c0feb4e0c9d3f4c74a0324822e566a8340a56916d9d6f23cb3e85620334 + checksum: 3a539510e677cfa3a833aca5397300e36141aca064cdc487554f2017110709a03a95da937e98c2a14ec3c626af7b2d1b6dabe629a481f9883143d0d5bff07bf2 languageName: node linkType: hard @@ -29656,6 +29501,27 @@ __metadata: languageName: node linkType: hard +"node-gyp@npm:^9.4.1": + version: 9.4.1 + resolution: "node-gyp@npm:9.4.1" + dependencies: + env-paths: ^2.2.0 + exponential-backoff: ^3.1.1 + glob: ^7.1.4 + graceful-fs: ^4.2.6 + make-fetch-happen: ^10.0.3 + nopt: ^6.0.0 + npmlog: ^6.0.0 + rimraf: ^3.0.2 + semver: ^7.3.5 + tar: ^6.1.2 + which: ^2.0.2 + bin: + node-gyp: bin/node-gyp.js + checksum: 8576c439e9e925ab50679f87b7dfa7aa6739e42822e2ad4e26c36341c0ba7163fdf5a946f0a67a476d2f24662bc40d6c97bd9e79ced4321506738e6b760a1577 + languageName: node + linkType: hard + "node-gyp@npm:latest": version: 9.0.0 resolution: "node-gyp@npm:9.0.0" @@ -29796,6 +29662,17 @@ __metadata: languageName: node linkType: hard +"nopt@npm:^6.0.0": + version: 6.0.0 + resolution: "nopt@npm:6.0.0" + dependencies: + abbrev: ^1.0.0 + bin: + nopt: bin/nopt.js + checksum: 82149371f8be0c4b9ec2f863cc6509a7fd0fa729929c009f3a58e4eb0c9e4cae9920e8f1f8eb46e7d032fec8fb01bede7f0f41a67eb3553b7b8e14fa53de1dac + languageName: node + linkType: hard + "normalize-package-data@npm:^2.3.2, normalize-package-data@npm:^2.3.4, normalize-package-data@npm:^2.5.0": version: 2.5.0 resolution: "normalize-package-data@npm:2.5.0" @@ -30143,14 +30020,7 @@ __metadata: languageName: node linkType: hard -"object-inspect@npm:^1.12.2, object-inspect@npm:^1.9.0": - version: 1.12.2 - resolution: "object-inspect@npm:1.12.2" - checksum: a534fc1b8534284ed71f25ce3a496013b7ea030f3d1b77118f6b7b1713829262be9e6243acbcb3ef8c626e2b64186112cb7f6db74e37b2789b9c789ca23048b2 - languageName: node - linkType: hard - -"object-inspect@npm:^1.12.3": +"object-inspect@npm:^1.12.3, object-inspect@npm:^1.9.0": version: 1.12.3 resolution: "object-inspect@npm:1.12.3" checksum: dabfd824d97a5f407e6d5d24810d888859f6be394d8b733a77442b277e0808860555176719c5905e765e3743a7cada6b8b0a3b85e5331c530fd418cc8ae991db @@ -31446,13 +31316,14 @@ __metadata: languageName: node linkType: hard -"playwright-qase-reporter@npm:^1.2.0-alpha.3": - version: 1.2.0-alpha.3 - resolution: "playwright-qase-reporter@npm:1.2.0-alpha.3" +"playwright-qase-reporter@npm:^1.2.1": + version: 1.2.1 + resolution: "playwright-qase-reporter@npm:1.2.1" dependencies: + chalk: ^4.1.0 form-data: ^3.0.0 - qaseio: ^2.0.1 - checksum: 6c1960dbb49928c9d5b77eeb955c2a674cf28d97141d7406354b908688f0983c8da0c7d0b2d620bb39411a99663803055a5359812726982ad4e53c7c54fd8c84 + qaseio: ^2.0.2 + checksum: 8b4d2f5902a8d655b781e9dd6898d5d2f25739033f1fda2b600b07ac3fc7680f9a1ee917a969b7315f4f05211e36f1a6699155f9ead05a435afa695932bde9fa languageName: node linkType: hard @@ -32179,12 +32050,12 @@ __metadata: languageName: node linkType: hard -"postcss-scss@npm:^4.0.6": - version: 4.0.6 - resolution: "postcss-scss@npm:4.0.6" +"postcss-scss@npm:^4.0.9": + version: 4.0.9 + resolution: "postcss-scss@npm:4.0.9" peerDependencies: - postcss: ^8.4.19 - checksum: 133a1cba31e2e167f4e841e66ec6a798eaf44c7911f9182ade0b5b1e71a8198814aa390b8c9d5db6b01358115232e5b15b1a4f8c5198acfccfb1f3fdbd328cdf + postcss: ^8.4.29 + checksum: dc358bafc23d52ed3a9a29333808825deba213042be74ece6eae7a61c692f67d0e6691fa7005367b013c01c79562fbb9ef2fe4c0485075233931bd90715f5132 languageName: node linkType: hard @@ -32321,14 +32192,14 @@ __metadata: languageName: node linkType: hard -"postcss@npm:^8.2.15, postcss@npm:^8.3.11, postcss@npm:^8.4.14, postcss@npm:^8.4.23, postcss@npm:~8.4.24": - version: 8.4.24 - resolution: "postcss@npm:8.4.24" +"postcss@npm:^8.2.15, postcss@npm:^8.3.11, postcss@npm:^8.4.14, postcss@npm:^8.4.23, postcss@npm:~8.4.31": + version: 8.4.31 + resolution: "postcss@npm:8.4.31" dependencies: nanoid: ^3.3.6 picocolors: ^1.0.0 source-map-js: ^1.0.2 - checksum: 814e2126dacfea313588eda09cc99a9b4c26ec55c059188aa7a916d20d26d483483106dc5ff9e560731b59f45c5bb91b945dfadc670aed875cc90ddbbf4e787d + checksum: 1d8611341b073143ad90486fcdfeab49edd243377b1f51834dc4f6d028e82ce5190e4f11bb2633276864503654fb7cab28e67abdc0fbf9d1f88cad4a0ff0beea languageName: node linkType: hard @@ -32508,14 +32379,14 @@ __metadata: languageName: node linkType: hard -"pretty-format@npm:^29.0.0, pretty-format@npm:^29.6.1, pretty-format@npm:^29.6.2": - version: 29.6.2 - resolution: "pretty-format@npm:29.6.2" +"pretty-format@npm:^29.0.0, pretty-format@npm:^29.7.0": + version: 29.7.0 + resolution: "pretty-format@npm:29.7.0" dependencies: - "@jest/schemas": ^29.6.0 + "@jest/schemas": ^29.6.3 ansi-styles: ^5.0.0 react-is: ^18.0.0 - checksum: a0f972a44f959023c0df9cdfe9eed7540264d7f7ddf74667db8a5294444d5aa153fd47d20327df10ae86964e2ceec10e46ea06b1a5c9c12e02348b78c952c9fc + checksum: 032c1602383e71e9c0c02a01bbd25d6759d60e9c7cf21937dde8357aa753da348fcec5def5d1002c9678a8524d5fe099ad98861286550ef44de8808cc61e43b6 languageName: node linkType: hard @@ -32596,18 +32467,18 @@ __metadata: languageName: node linkType: hard -"prometheus-gc-stats@npm:^0.6.4": - version: 0.6.4 - resolution: "prometheus-gc-stats@npm:0.6.4" +"prometheus-gc-stats@npm:^0.6.5": + version: 0.6.5 + resolution: "prometheus-gc-stats@npm:0.6.5" dependencies: gc-stats: ^1.4.0 optional: ^0.1.3 peerDependencies: - prom-client: ">= 10 <= 12" + prom-client: ">= 10 <= 14" dependenciesMeta: gc-stats: optional: true - checksum: 1e632cd0b9ad893b5ee1c3df0b5a3af27a69f2b0c821714d793dcf30de04489c9e207ad5e2ee062b61fc76681a1dbeab268cf31388fc55575501052115d0c410 + checksum: a0a83745937b581e6c5afbe95e6aaef6ca004cf25d35d05f7300e6db26bf37486802b14f972e02f7b332fcf3bcfe4c792d05383d004985d480b8b9450e04f8b8 languageName: node linkType: hard @@ -32635,21 +32506,7 @@ __metadata: languageName: node linkType: hard -"promise.allsettled@npm:^1.0.0": - version: 1.0.5 - resolution: "promise.allsettled@npm:1.0.5" - dependencies: - array.prototype.map: ^1.0.4 - call-bind: ^1.0.2 - define-properties: ^1.1.3 - es-abstract: ^1.19.1 - get-intrinsic: ^1.1.1 - iterate-value: ^1.0.2 - checksum: 92775552d3a3487ed924852e5de00a217a202cefc833e8cc169283fe4f7dbe09953505b0c7471b2681e09aa7d064bdbd07b978d44ff536f712e4dcd7c9faba35 - languageName: node - linkType: hard - -"promise.allsettled@npm:^1.0.2": +"promise.allsettled@npm:^1.0.0, promise.allsettled@npm:^1.0.2": version: 1.0.7 resolution: "promise.allsettled@npm:1.0.7" dependencies: @@ -32898,13 +32755,13 @@ __metadata: languageName: node linkType: hard -"qaseio@npm:^2.0.1": - version: 2.0.1 - resolution: "qaseio@npm:2.0.1" +"qaseio@npm:^2.0.2": + version: 2.0.2 + resolution: "qaseio@npm:2.0.2" dependencies: axios: ^0.25.0 form-data: ^3.0.0 - checksum: 3542f968c05294615a42bc1f57c92a4d7073055466bc2588876de09d6bcd7f7af8b4180db2c04ef01cc4e9c3326c7405c78500e6c83de9d3bb23b12f95246d79 + checksum: 33a0307f2daaf614d719c7c049e50b3aabf1cb783c93355e42ece5a254fac3e68741b4decf9dca0553a48decf8967610cabe058ea135ea8d7bf93f160a6e3902 languageName: node linkType: hard @@ -32924,13 +32781,6 @@ __metadata: languageName: node linkType: hard -"qs@npm:6.9.7": - version: 6.9.7 - resolution: "qs@npm:6.9.7" - checksum: 5bbd263332ccf320a1f36d04a2019a5834dc20bcb736431eaccde2a39dcba03fb26d2fd00174f5d7bc26aaad1cad86124b18440883ac042ea2a0fca6170c1bf1 - languageName: node - linkType: hard - "qs@npm:~6.5.2": version: 6.5.3 resolution: "qs@npm:6.5.3" @@ -33005,6 +32855,13 @@ __metadata: languageName: node linkType: hard +"queue-tick@npm:^1.0.1": + version: 1.0.1 + resolution: "queue-tick@npm:1.0.1" + checksum: 57c3292814b297f87f792fbeb99ce982813e4e54d7a8bdff65cf53d5c084113913289d4a48ec8bbc964927a74b847554f9f4579df43c969a6c8e0f026457ad01 + languageName: node + linkType: hard + "queue@npm:6.0.2, queue@npm:^6.0.1": version: 6.0.2 resolution: "queue@npm:6.0.2" @@ -33188,18 +33045,6 @@ __metadata: languageName: node linkType: hard -"raw-body@npm:2.4.3": - version: 2.4.3 - resolution: "raw-body@npm:2.4.3" - dependencies: - bytes: 3.1.2 - http-errors: 1.8.1 - iconv-lite: 0.4.24 - unpipe: 1.0.0 - checksum: d2961fa3c71c9c22dc2c3fd60ff377bf36dfed7d7a748f2b25d585934a3e9df565bb9aa5bc2e3a716ea941f4bc2a6ddc795c8b0cf7219fb071029b59b1985394 - languageName: node - linkType: hard - "raw-body@npm:2.5.1": version: 2.5.1 resolution: "raw-body@npm:2.5.1" @@ -33236,7 +33081,7 @@ __metadata: languageName: node linkType: hard -"rc-scrollbars@npm:^1.1.5, rc-scrollbars@npm:^1.1.6": +"rc-scrollbars@npm:^1.1.6": version: 1.1.6 resolution: "rc-scrollbars@npm:1.1.6" dependencies: @@ -33455,9 +33300,9 @@ __metadata: languageName: node linkType: hard -"react-i18next@npm:~13.2.1": - version: 13.2.1 - resolution: "react-i18next@npm:13.2.1" +"react-i18next@npm:~13.2.2": + version: 13.2.2 + resolution: "react-i18next@npm:13.2.2" dependencies: "@babel/runtime": ^7.22.5 html-parse-stringify: ^3.0.1 @@ -33469,7 +33314,7 @@ __metadata: optional: true react-native: optional: true - checksum: aa3bd7b0f9f3d794e756a7fe087471c20c13dc2fbf5e53400403a356973d87a1b76f0204720081914bd06cb94d92bf987ebbf33c3de3c67a0cc9b32dde8972f1 + checksum: 2b85bfb347af1a00add1c02901025706f7d2037fade4e8aa08159287ddf012e8cf35626eb9f5c578b9d1c24c065c69f2ad4b5a3087fb5cdbea540f8bc18c0f59 languageName: node linkType: hard @@ -34124,18 +33969,7 @@ __metadata: languageName: node linkType: hard -"regexp.prototype.flags@npm:^1.4.3, regexp.prototype.flags@npm:^1.5.0": - version: 1.5.0 - resolution: "regexp.prototype.flags@npm:1.5.0" - dependencies: - call-bind: ^1.0.2 - define-properties: ^1.2.0 - functions-have-names: ^1.2.3 - checksum: c541687cdbdfff1b9a07f6e44879f82c66bbf07665f9a7544c5fd16acdb3ec8d1436caab01662d2fbcad403f3499d49ab0b77fbc7ef29ef961d98cc4bc9755b4 - languageName: node - linkType: hard - -"regexp.prototype.flags@npm:^1.5.1": +"regexp.prototype.flags@npm:^1.4.3, regexp.prototype.flags@npm:^1.5.0, regexp.prototype.flags@npm:^1.5.1": version: 1.5.1 resolution: "regexp.prototype.flags@npm:1.5.1" dependencies: @@ -34730,10 +34564,11 @@ __metadata: version: 0.0.0-use.local resolution: "rocket.chat@workspace:." dependencies: - "@changesets/cli": ^2.26.1 - "@types/chart.js": ^2.9.37 - "@types/js-yaml": ^4.0.5 + "@changesets/cli": ^2.26.2 + "@types/chart.js": ^2.9.39 + "@types/js-yaml": ^4.0.8 husky: ^7.0.4 + node-gyp: ^9.4.1 turbo: ~1.10.16 languageName: unknown linkType: soft @@ -34753,13 +34588,13 @@ __metadata: "@rocket.chat/rest-typings": "workspace:^" "@rocket.chat/string-helpers": next "@rocket.chat/ui-kit": ^0.32.1 - "@types/cookie": ^0.5.1 - "@types/cookie-parser": ^1.4.3 - "@types/ejson": ^2.2.0 - "@types/express": ^4.17.17 - "@types/fibers": ^3.1.1 - "@types/node": ^14.18.51 - "@types/ws": ^8.5.5 + "@types/cookie": ^0.5.3 + "@types/cookie-parser": ^1.4.5 + "@types/ejson": ^2.2.1 + "@types/express": ^4.17.20 + "@types/fibers": ^3.1.3 + "@types/node": ^14.18.63 + "@types/ws": ^8.5.8 ajv: ^8.11.0 bcrypt: ^5.0.1 body-parser: ^1.20.2 @@ -34772,7 +34607,7 @@ __metadata: fibers: ^5.0.3 jaeger-client: ^3.19.0 mem: ^8.1.1 - moleculer: ^0.14.29 + moleculer: ^0.14.31 mongodb: ^4.17.1 nats: ^2.6.1 npm-run-all: ^4.1.5 @@ -35237,14 +35072,14 @@ __metadata: languageName: node linkType: hard -"semver@npm:7.x, semver@npm:^7.2, semver@npm:^7.2.1, semver@npm:^7.3.2, semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.5.2, semver@npm:^7.5.3": - version: 7.5.3 - resolution: "semver@npm:7.5.3" +"semver@npm:7.x, semver@npm:^7.2, semver@npm:^7.2.1, semver@npm:^7.3.2, semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.5.2, semver@npm:^7.5.3, semver@npm:^7.5.4": + version: 7.5.4 + resolution: "semver@npm:7.5.4" dependencies: lru-cache: ^6.0.0 bin: semver: bin/semver.js - checksum: 9d58db16525e9f749ad0a696a1f27deabaa51f66e91d2fa2b0db3de3e9644e8677de3b7d7a03f4c15bc81521e0c3916d7369e0572dbde250d9bedf5194e2a8a7 + checksum: 12d8ad952fa353b0995bf180cdac205a4068b759a140e5d3c608317098b3575ac2f1e09182206bf2eb26120e1c0ed8fb92c48c592f6099680de56bb071423ca3 languageName: node linkType: hard @@ -35257,17 +35092,6 @@ __metadata: languageName: node linkType: hard -"semver@npm:^7.5.4": - version: 7.5.4 - resolution: "semver@npm:7.5.4" - dependencies: - lru-cache: ^6.0.0 - bin: - semver: bin/semver.js - checksum: 12d8ad952fa353b0995bf180cdac205a4068b759a140e5d3c608317098b3575ac2f1e09182206bf2eb26120e1c0ed8fb92c48c592f6099680de56bb071423ca3 - languageName: node - linkType: hard - "semver@npm:~5.3.0": version: 5.3.0 resolution: "semver@npm:5.3.0" @@ -35286,27 +35110,6 @@ __metadata: languageName: node linkType: hard -"send@npm:0.17.2": - version: 0.17.2 - resolution: "send@npm:0.17.2" - dependencies: - debug: 2.6.9 - depd: ~1.1.2 - destroy: ~1.0.4 - encodeurl: ~1.0.2 - escape-html: ~1.0.3 - etag: ~1.8.1 - fresh: 0.5.2 - http-errors: 1.8.1 - mime: 1.6.0 - ms: 2.1.3 - on-finished: ~2.3.0 - range-parser: ~1.2.1 - statuses: ~1.5.0 - checksum: c28f36deb4ccba9b8d6e6a1e472b8e7c40a1f51575bdf8f67303568cc9e71131faa3adc36fdb72611616ccad1584358bbe4c3ebf419e663ecc5de868ad3d3f03 - languageName: node - linkType: hard - "send@npm:0.18.0": version: 0.18.0 resolution: "send@npm:0.18.0" @@ -35419,18 +35222,6 @@ __metadata: languageName: node linkType: hard -"serve-static@npm:1.14.2": - version: 1.14.2 - resolution: "serve-static@npm:1.14.2" - dependencies: - encodeurl: ~1.0.2 - escape-html: ~1.0.3 - parseurl: ~1.3.3 - send: 0.17.2 - checksum: d97f3183b1dfcd8ce9c0e37e18e87fd31147ed6c8ee0b2c3a089d795e44ee851ca5061db01574f806d54f4e4b70bc694d9ca64578653514e04a28cbc97a1de05 - languageName: node - linkType: hard - "serve-static@npm:1.15.0": version: 1.15.0 resolution: "serve-static@npm:1.15.0" @@ -35541,20 +35332,20 @@ __metadata: languageName: node linkType: hard -"sharp@npm:^0.30.7": - version: 0.30.7 - resolution: "sharp@npm:0.30.7" +"sharp@npm:^0.32.6": + version: 0.32.6 + resolution: "sharp@npm:0.32.6" dependencies: color: ^4.2.3 - detect-libc: ^2.0.1 - node-addon-api: ^5.0.0 + detect-libc: ^2.0.2 + node-addon-api: ^6.1.0 node-gyp: latest prebuild-install: ^7.1.1 - semver: ^7.3.7 + semver: ^7.5.4 simple-get: ^4.0.1 - tar-fs: ^2.1.1 + tar-fs: ^3.0.4 tunnel-agent: ^0.6.0 - checksum: bbc63ca3c7ea8a5bff32cd77022cfea30e25a03f5bd031e935924bf6cf0e11e3388e8b0e22b3137bf8816aa73407f1e4fbeb190f3a35605c27ffca9f32b91601 + checksum: 0cca1d16b1920800c0e22d27bc6305f4c67c9ebe44f67daceb30bf645ae39e7fb7dfbd7f5d6cd9f9eebfddd87ac3f7e2695f4eb906d19b7a775286238e6a29fc languageName: node linkType: hard @@ -35692,14 +35483,14 @@ __metadata: languageName: node linkType: hard -"sirv@npm:^1.0.7": - version: 1.0.19 - resolution: "sirv@npm:1.0.19" +"sirv@npm:^2.0.3": + version: 2.0.3 + resolution: "sirv@npm:2.0.3" dependencies: "@polka/url": ^1.0.0-next.20 mrmime: ^1.0.0 - totalist: ^1.0.0 - checksum: c943cfc61baf85f05f125451796212ec35d4377af4da90ae8ec1fa23e6d7b0b4d9c74a8fbf65af83c94e669e88a09dc6451ba99154235eead4393c10dda5b07c + totalist: ^3.0.0 + checksum: e2dfd4c97735a6ad6d842d0eec2cd9e3919ff0e46f0d228248c5753ad4b70b832711e77e1259c031c439cdb08303cc54d923685c92b0e890145cc733af7c5568 languageName: node linkType: hard @@ -36306,7 +36097,7 @@ __metadata: languageName: node linkType: hard -"statuses@npm:1.5.0, statuses@npm:>= 1.4.0 < 2, statuses@npm:>= 1.5.0 < 2, statuses@npm:~1.5.0": +"statuses@npm:1.5.0, statuses@npm:>= 1.4.0 < 2, statuses@npm:~1.5.0": version: 1.5.0 resolution: "statuses@npm:1.5.0" checksum: c469b9519de16a4bb19600205cffb39ee471a5f17b82589757ca7bd40a8d92ebb6ed9f98b5a540c5d302ccbc78f15dc03cc0280dd6e00df1335568a5d5758a5c @@ -36479,6 +36270,16 @@ __metadata: languageName: node linkType: hard +"streamx@npm:^2.15.0": + version: 2.15.5 + resolution: "streamx@npm:2.15.5" + dependencies: + fast-fifo: ^1.1.0 + queue-tick: ^1.0.1 + checksum: 52e0ec94026d67c9e2e2e1090f05e5b138c2f2822462d9a8ef4a4805625a31d103e55ea5267fcd9bfe041374926424e42aec2dda28a85cb9de42c2a16d416d94 + languageName: node + linkType: hard + "strict-uri-encode@npm:^1.0.0": version: 1.1.0 resolution: "strict-uri-encode@npm:1.1.0" @@ -36669,17 +36470,6 @@ __metadata: languageName: node linkType: hard -"string.prototype.trimend@npm:^1.0.5": - version: 1.0.5 - resolution: "string.prototype.trimend@npm:1.0.5" - dependencies: - call-bind: ^1.0.2 - define-properties: ^1.1.4 - es-abstract: ^1.19.5 - checksum: d44f543833112f57224e79182debadc9f4f3bf9d48a0414d6f0cbd2a86f2b3e8c0ca1f95c3f8e5b32ae83e91554d79d932fc746b411895f03f93d89ed3dfb6bc - languageName: node - linkType: hard - "string.prototype.trimend@npm:^1.0.7": version: 1.0.7 resolution: "string.prototype.trimend@npm:1.0.7" @@ -36691,17 +36481,6 @@ __metadata: languageName: node linkType: hard -"string.prototype.trimstart@npm:^1.0.5": - version: 1.0.5 - resolution: "string.prototype.trimstart@npm:1.0.5" - dependencies: - call-bind: ^1.0.2 - define-properties: ^1.1.4 - es-abstract: ^1.19.5 - checksum: a4857c5399ad709d159a77371eeaa8f9cc284469a0b5e1bfe405de16f1fd4166a8ea6f4180e55032f348d1b679b1599fd4301fbc7a8b72bdb3e795e43f7b1048 - languageName: node - linkType: hard - "string.prototype.trimstart@npm:^1.0.7": version: 1.0.7 resolution: "string.prototype.trimstart@npm:1.0.7" @@ -37276,6 +37055,17 @@ __metadata: languageName: node linkType: hard +"tar-fs@npm:^3.0.4": + version: 3.0.4 + resolution: "tar-fs@npm:3.0.4" + dependencies: + mkdirp-classic: ^0.5.2 + pump: ^3.0.0 + tar-stream: ^3.1.5 + checksum: dcf4054f9e92ca0efe61c2b3f612914fb259a47900aa908a63106513a6d006c899b426ada53eb88d9dbbf089b5724c8e90b96a2c4ca6171845fa14203d734e30 + languageName: node + linkType: hard + "tar-stream@npm:^1.5.2, tar-stream@npm:^1.6.2": version: 1.6.2 resolution: "tar-stream@npm:1.6.2" @@ -37304,6 +37094,17 @@ __metadata: languageName: node linkType: hard +"tar-stream@npm:^3.1.5": + version: 3.1.6 + resolution: "tar-stream@npm:3.1.6" + dependencies: + b4a: ^1.6.4 + fast-fifo: ^1.2.0 + streamx: ^2.15.0 + checksum: f3627f918581976e954ff03cb8d370551053796b82564f8c7ca8fac84c48e4d042026d0854fc222171a34ff9c682b72fae91be9c9b0a112d4c54f9e4f443e9c5 + languageName: node + linkType: hard + "tar@npm:^4": version: 4.4.19 resolution: "tar@npm:4.4.19" @@ -37841,10 +37642,10 @@ __metadata: languageName: node linkType: hard -"totalist@npm:^1.0.0": - version: 1.1.0 - resolution: "totalist@npm:1.1.0" - checksum: dfab80c7104a1d170adc8c18782d6c04b7df08352dec452191208c66395f7ef2af7537ddfa2cf1decbdcfab1a47afbbf0dec6543ea191da98c1c6e1599f86adc +"totalist@npm:^3.0.0": + version: 3.0.1 + resolution: "totalist@npm:3.0.1" + checksum: 5132d562cf88ff93fd710770a92f31dbe67cc19b5c6ccae2efc0da327f0954d211bbfd9456389655d726c624f284b4a23112f56d1da931ca7cfabbe1f45e778a languageName: node linkType: hard @@ -38414,7 +38215,7 @@ __metadata: languageName: node linkType: hard -"type-detect@npm:4.0.8, type-detect@npm:^4.0.0, type-detect@npm:^4.0.5, type-detect@npm:^4.0.8": +"type-detect@npm:4.0.8, type-detect@npm:^4.0.0, type-detect@npm:^4.0.8": version: 4.0.8 resolution: "type-detect@npm:4.0.8" checksum: 62b5628bff67c0eb0b66afa371bd73e230399a8d2ad30d852716efcc4656a7516904570cd8631a49a3ce57c10225adf5d0cbdcb47f6b0255fe6557c453925a15 @@ -38597,10 +38398,10 @@ __metadata: languageName: node linkType: hard -"ua-parser-js@npm:^1.0.35": - version: 1.0.35 - resolution: "ua-parser-js@npm:1.0.35" - checksum: 02370d38a0c8b586f2503d1c3bbba5cbc0b97d407282f9023201a99e4c03eae4357a2800fdf50cf80d73ec25c0b0cc5bfbaa03975b0add4043d6e4c86712c9c1 +"ua-parser-js@npm:^1.0.37": + version: 1.0.37 + resolution: "ua-parser-js@npm:1.0.37" + checksum: 4d481c720d523366d7762dc8a46a1b58967d979aacf786f9ceceb1cd767de069f64a4bdffb63956294f1c0696eb465ddb950f28ba90571709e33521b4bd75e07 languageName: node linkType: hard @@ -39411,12 +39212,12 @@ __metadata: languageName: node linkType: hard -"uuid@npm:^9.0.0": - version: 9.0.0 - resolution: "uuid@npm:9.0.0" +"uuid@npm:^9.0.0, uuid@npm:^9.0.1": + version: 9.0.1 + resolution: "uuid@npm:9.0.1" bin: uuid: dist/bin/uuid - checksum: 8dd2c83c43ddc7e1c71e36b60aea40030a6505139af6bee0f382ebcd1a56f6cd3028f7f06ffb07f8cf6ced320b76aea275284b224b002b289f89fe89c389b028 + checksum: 39931f6da74e307f51c0fb463dc2462807531dc80760a9bff1e35af4316131b4fc3203d16da60ae33f07fdca5b56f3f1dd662da0c99fea9aaeab2004780cc5f4 languageName: node linkType: hard @@ -39765,14 +39566,14 @@ __metadata: languageName: node linkType: hard -"webdav@npm:^4.11.2": - version: 4.11.2 - resolution: "webdav@npm:4.11.2" +"webdav@npm:^4.11.3": + version: 4.11.3 + resolution: "webdav@npm:4.11.3" dependencies: axios: ^0.27.2 base-64: ^1.0.0 byte-length: ^1.0.2 - fast-xml-parser: ^3.19.0 + fast-xml-parser: ^4.2.4 he: ^1.2.0 hot-patcher: ^1.0.0 layerr: ^0.1.2 @@ -39782,7 +39583,7 @@ __metadata: path-posix: ^1.0.0 url-join: ^4.0.1 url-parse: ^1.5.10 - checksum: 6fe040b43e350cb15febf688d8eabe45dbe3c74922c94a3730d63911139def435de7f410439e4e1eac6b46d545b6a3631808cc773647b04e6e41731f8ad5f011 + checksum: e5bfc66149088cd857c23a3a549650d7483dd5615cf1c4b6251a5b290a4ad8fef4975bfd99fca2d5842a0eaadc056bc0044e37893e0ad5447e6ce2e2dbd81da5 languageName: node linkType: hard @@ -39821,23 +39622,30 @@ __metadata: languageName: node linkType: hard -"webpack-bundle-analyzer@npm:^4.9.0": - version: 4.9.0 - resolution: "webpack-bundle-analyzer@npm:4.9.0" +"webpack-bundle-analyzer@npm:^4.9.1": + version: 4.9.1 + resolution: "webpack-bundle-analyzer@npm:4.9.1" dependencies: "@discoveryjs/json-ext": 0.5.7 acorn: ^8.0.4 acorn-walk: ^8.0.0 - chalk: ^4.1.0 commander: ^7.2.0 + escape-string-regexp: ^4.0.0 gzip-size: ^6.0.0 - lodash: ^4.17.20 + is-plain-object: ^5.0.0 + lodash.debounce: ^4.0.8 + lodash.escape: ^4.0.1 + lodash.flatten: ^4.4.0 + lodash.invokemap: ^4.6.0 + lodash.pullall: ^4.2.0 + lodash.uniqby: ^4.7.0 opener: ^1.5.2 - sirv: ^1.0.7 + picocolors: ^1.0.0 + sirv: ^2.0.3 ws: ^7.3.1 bin: webpack-bundle-analyzer: lib/bin/analyzer.js - checksum: e439aea4e88e18bfdc16eb69782c1bb17b2e581905a5cfa8d34058dc6677f6e202f896189268e58b49fa14ae12f5ef4c25cdca9f98f3de7e6699ac62def2f0af + checksum: 7e891c28d5a903242893e55ecc714fa01d7ad6bedade143235c07091b235915349812fa048968462781d59187507962f38b6c61ed7d25fb836ba0ac0ee919a39 languageName: node linkType: hard @@ -40125,44 +39933,7 @@ __metadata: languageName: node linkType: hard -"webpack@npm:>=4.0.0 <6.0.0, webpack@npm:>=4.43.0 <6.0.0, webpack@npm:^5, webpack@npm:^5.9.0": - version: 5.88.2 - resolution: "webpack@npm:5.88.2" - dependencies: - "@types/eslint-scope": ^3.7.3 - "@types/estree": ^1.0.0 - "@webassemblyjs/ast": ^1.11.5 - "@webassemblyjs/wasm-edit": ^1.11.5 - "@webassemblyjs/wasm-parser": ^1.11.5 - acorn: ^8.7.1 - acorn-import-assertions: ^1.9.0 - browserslist: ^4.14.5 - chrome-trace-event: ^1.0.2 - enhanced-resolve: ^5.15.0 - es-module-lexer: ^1.2.1 - eslint-scope: 5.1.1 - events: ^3.2.0 - glob-to-regexp: ^0.4.1 - graceful-fs: ^4.2.9 - json-parse-even-better-errors: ^2.3.1 - loader-runner: ^4.2.0 - mime-types: ^2.1.27 - neo-async: ^2.6.2 - schema-utils: ^3.2.0 - tapable: ^2.1.1 - terser-webpack-plugin: ^5.3.7 - watchpack: ^2.4.0 - webpack-sources: ^3.2.3 - peerDependenciesMeta: - webpack-cli: - optional: true - bin: - webpack: bin/webpack.js - checksum: 79476a782da31a21f6dd38fbbd06b68da93baf6a62f0d08ca99222367f3b8668f5a1f2086b7bb78e23172e31fa6df6fa7ab09b25e827866c4fc4dc2b30443ce2 - languageName: node - linkType: hard - -"webpack@npm:^5.89.0": +"webpack@npm:>=4.0.0 <6.0.0, webpack@npm:>=4.43.0 <6.0.0, webpack@npm:^5, webpack@npm:^5.89.0, webpack@npm:^5.9.0": version: 5.89.0 resolution: "webpack@npm:5.89.0" dependencies: @@ -40235,10 +40006,10 @@ __metadata: languageName: node linkType: hard -"whatwg-fetch@npm:^3.6.2": - version: 3.6.2 - resolution: "whatwg-fetch@npm:3.6.2" - checksum: ee976b7249e7791edb0d0a62cd806b29006ad7ec3a3d89145921ad8c00a3a67e4be8f3fb3ec6bc7b58498724fd568d11aeeeea1f7827e7e1e5eae6c8a275afed +"whatwg-fetch@npm:^3.6.19": + version: 3.6.19 + resolution: "whatwg-fetch@npm:3.6.19" + checksum: 2896bc9ca867ea514392c73e2a272f65d5c4916248fe0837a9df5b1b92f247047bc76cf7c29c28a01ac6c5fb4314021d2718958c8a08292a96d56f72b2f56806 languageName: node linkType: hard