diff --git a/.github/workflows/ci-code-check.yml b/.github/workflows/ci-code-check.yml index 75deb399d2f2a..e53ba20212a8e 100644 --- a/.github/workflows/ci-code-check.yml +++ b/.github/workflows/ci-code-check.yml @@ -12,7 +12,7 @@ env: jobs: code-check: - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 name: ${{ matrix.check == 'ts' && 'TypeScript' || 'Code Lint' }} diff --git a/.github/workflows/ci-test-e2e.yml b/.github/workflows/ci-test-e2e.yml index 3f75695b48771..413ba5f4ff00f 100644 --- a/.github/workflows/ci-test-e2e.yml +++ b/.github/workflows/ci-test-e2e.yml @@ -68,7 +68,7 @@ env: jobs: test: - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 env: RC_DOCKERFILE: ${{ matrix.mongodb-version == '6.0' && inputs.rc-dockerfile-alpine || inputs.rc-dockerfile }} RC_DOCKER_TAG: ${{ matrix.mongodb-version == '6.0' && inputs.rc-docker-tag-alpine || inputs.rc-docker-tag }} @@ -242,7 +242,7 @@ jobs: if: inputs.type == 'ui' && always() uses: actions/upload-artifact@v3 with: - name: playwright-test-trace${{ inputs.release }} + name: playwright-test-trace ${{ inputs.release }} MongoDB ${{ matrix.mongodb-version }} (${{ matrix.shard }} of ${{ inputs.total-shard }}) path: ./apps/meteor/tests/e2e/.playwright* - name: Show server logs if E2E test failed diff --git a/.github/workflows/ci-test-unit.yml b/.github/workflows/ci-test-unit.yml index 066cc2e3773ea..862d685a16269 100644 --- a/.github/workflows/ci-test-unit.yml +++ b/.github/workflows/ci-test-unit.yml @@ -16,7 +16,7 @@ env: jobs: test: - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 name: Unit Tests diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a8f8d29610bb3..c3fd7a64193a1 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -123,7 +123,7 @@ jobs: packages-build: name: 📦 Build Packages needs: [release-versions, notify-draft-services] - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 steps: - name: Github Info run: | @@ -165,7 +165,7 @@ jobs: build: name: 📦 Meteor Build - coverage needs: [release-versions, packages-build] - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 steps: - name: Github Info @@ -189,7 +189,7 @@ jobs: name: 📦 Meteor Build - official needs: [tests-done, release-versions, packages-build] if: (github.event_name == 'release' || github.ref == 'refs/heads/develop') - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 steps: - name: Github Info @@ -212,7 +212,7 @@ jobs: build-gh-docker-coverage: name: 🚢 Build Docker Images for Testing needs: [build, release-versions] - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 env: RC_DOCKERFILE: ${{ matrix.platform == 'alpine' && needs.release-versions.outputs.rc-dockerfile-alpine || needs.release-versions.outputs.rc-dockerfile }} @@ -241,7 +241,7 @@ jobs: build-gh-docker: name: 🚢 Build Docker Images for Production needs: [build-prod, release-versions] - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 env: RC_DOCKERFILE: ${{ matrix.platform == 'alpine' && needs.release-versions.outputs.rc-dockerfile-alpine || needs.release-versions.outputs.rc-dockerfile }} @@ -389,8 +389,8 @@ jobs: tests-done: name: ✅ Tests Done - runs-on: ubuntu-20.04 - needs: [checks, test-unit, test-api, test-ui, test-api-ee, test-ui-ee] + runs-on: ubuntu-22.04 + needs: [test-unit, test-api, test-ui, test-api-ee, test-ui-ee] steps: - name: Test finish aggregation @@ -399,7 +399,7 @@ jobs: deploy: name: 🚀 Publish build assets - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 if: github.event_name == 'release' || github.ref == 'refs/heads/develop' needs: [build-gh-docker, release-versions] @@ -451,7 +451,7 @@ jobs: build-docker-preview: name: 🚢 Build Docker Image (preview) - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 needs: [build, checks, release-versions] if: github.event_name == 'release' || github.ref == 'refs/heads/develop' steps: @@ -481,7 +481,7 @@ jobs: docker-image-publish: name: 🚀 Publish Docker Image (main) - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 needs: [deploy, build-docker-preview, release-versions] strategy: @@ -592,7 +592,7 @@ jobs: services-docker-image-publish: name: 🚀 Publish Docker Image (services) - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 needs: [deploy, release-versions] strategy: @@ -681,7 +681,7 @@ jobs: notify-services: name: 🚀 Notify external services - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 needs: - services-docker-image-publish - docker-image-publish diff --git a/.github/workflows/new-release.yml b/.github/workflows/new-release.yml index f10578d5879f2..72aee2b2940cd 100644 --- a/.github/workflows/new-release.yml +++ b/.github/workflows/new-release.yml @@ -34,7 +34,7 @@ jobs: - name: Setup NodeJS uses: ./.github/actions/setup-node with: - node-version: 14.21.3 + node-version: 20.9.0 cache-modules: true install: true diff --git a/.github/workflows/publish-release.yml b/.github/workflows/publish-release.yml index e133a3153722d..8b1c6d199ab67 100644 --- a/.github/workflows/publish-release.yml +++ b/.github/workflows/publish-release.yml @@ -24,7 +24,7 @@ jobs: - name: Setup NodeJS uses: ./.github/actions/setup-node with: - node-version: 14.21.3 + node-version: 20.9.0 cache-modules: true install: true diff --git a/RELEASE-3.0.md b/RELEASE-3.0.md new file mode 100644 index 0000000000000..59db0ebcef5a3 --- /dev/null +++ b/RELEASE-3.0.md @@ -0,0 +1,7 @@ +# Instructions to run the meteor development branch of 3.0 version + +1. Clone the meteor project locally following the instructions at https://github.com/meteor/meteor/blob/devel/DEVELOPMENT.md +2. Change to the branch `release-3.0` +3. Add a alias for the cloned meteor project named `md` (example `alias md=/Users/rocket.chat/Projects/meteor/meteor`). Instructions on link above as well. +4. Checkout the Rocket.Chat's branch named `meteor-3.0` +5. Run the project `NODE_OPTIONS="--trace-warnings --unhandled-rejections=warn" DISABLE_FIBERS=1 IGNORE_ASYNC_PLUGIN=1 md` diff --git a/_templates/service/new/package.json.ejs.t b/_templates/service/new/package.json.ejs.t index 2c74278d1ced1..1fb60d511e6d4 100644 --- a/_templates/service/new/package.json.ejs.t +++ b/_templates/service/new/package.json.ejs.t @@ -28,7 +28,6 @@ to: ee/apps/<%= name %>/package.json "@types/node": "^14.18.51", "ejson": "^2.2.3", "eventemitter3": "^4.0.7", - "fibers": "^5.0.3", "mem": "^8.1.1", "moleculer": "^0.14.29", "mongodb": "^4.12.1", diff --git a/apps/meteor/.docker-mongo/Dockerfile b/apps/meteor/.docker-mongo/Dockerfile index 037aadf4917fb..7f0531ca91373 100644 --- a/apps/meteor/.docker-mongo/Dockerfile +++ b/apps/meteor/.docker-mongo/Dockerfile @@ -1,4 +1,4 @@ -FROM node:14.21.3-bullseye-slim +FROM node:20.9.0-bookworm-slim LABEL maintainer="buildmaster@rocket.chat" @@ -30,7 +30,7 @@ ADD --chown=rocketchat:rocketchat . /app ADD --chown=rocketchat:rocketchat entrypoint.sh /app/bundle/ RUN aptMark="$(apt-mark showmanual)" \ - && apt-get install -y --no-install-recommends g++ make python ca-certificates \ + && apt-get install -y --no-install-recommends g++ make python3 ca-certificates \ && cd /app/bundle/programs/server \ && npm install \ && apt-mark auto '.*' > /dev/null \ diff --git a/apps/meteor/.docker/Dockerfile b/apps/meteor/.docker/Dockerfile index 456ed4becafd9..9b11f30911576 100644 --- a/apps/meteor/.docker/Dockerfile +++ b/apps/meteor/.docker/Dockerfile @@ -1,4 +1,4 @@ -FROM node:14.21.3-bullseye-slim +FROM node:20.9.0-bookworm-slim LABEL maintainer="buildmaster@rocket.chat" diff --git a/apps/meteor/.docker/Dockerfile.alpine b/apps/meteor/.docker/Dockerfile.alpine index 94baef8092174..b64e4a4440a03 100644 --- a/apps/meteor/.docker/Dockerfile.alpine +++ b/apps/meteor/.docker/Dockerfile.alpine @@ -1,4 +1,4 @@ -FROM node:14.21.3-alpine3.16 +FROM node:20.9.0-alpine3.18 RUN apk add --no-cache ttf-dejavu @@ -17,7 +17,7 @@ RUN set -x \ # End hack for sharp # Start hack for isolated-vm... && rm -rf npm/node_modules/isolated-vm \ - && npm install isolated-vm@4.4.2 \ + && npm install isolated-vm@4.6.0 \ && mv node_modules/isolated-vm npm/node_modules/isolated-vm \ # End hack for isolated-vm && cd npm \ diff --git a/apps/meteor/.eslintignore b/apps/meteor/.eslintignore index 2bbdbae00b89a..028c191482dd2 100644 --- a/apps/meteor/.eslintignore +++ b/apps/meteor/.eslintignore @@ -1,12 +1,26 @@ -/node_modules/ -#/tests/e2e/ -/tests/data/ -/packages/ -/app/emoji-emojione/generateEmojiIndex.js -/public/ -/private/moment-locales/ -/imports/ -/ee/server/services/dist/ +node_modules +data/ +tests/e2e/test-failures/ +packages/autoupdate/ +packages/meteor-streams/ +packages/flow-router/ +packages/meteor-run-as-user/ +packages/meteor-cookies/ +packages/meteor-inject-initial/ +packages/rocketchat-streamer/ +packages/meteor-user-presence/ +app/emoji-emojione/generateEmojiIndex.js +packages/rocketchat-livechat/assets/rocketchat-livechat.min.js +packages/rocketchat-livechat/assets/rocket-livechat.js +app/theme/client/vendor/ +public/packages/rocketchat_videobridge/client/public/external_api.js +packages/tap-i18n/lib/tap_i18next/tap_i18next-1.7.3.js +private/moment-locales/ +public/livechat/ +public/pdf.worker.min.js +public/workers/**/* +imports/client/**/* +ee/server/services/dist/** !/.mocharc.js !/.mocharc.*.js !/.scripts/ diff --git a/apps/meteor/.meteor/packages b/apps/meteor/.meteor/packages index e99aa0bdfb671..da4de21760c2f 100644 --- a/apps/meteor/.meteor/packages +++ b/apps/meteor/.meteor/packages @@ -8,43 +8,41 @@ rocketchat:ddp rocketchat:mongo-config -rocketchat:oauth2-server rocketchat:restivus rocketchat:livechat rocketchat:streamer rocketchat:version rocketchat:user-presence -accounts-base@2.2.8 -accounts-facebook@1.3.3 -accounts-github@1.5.0 -accounts-google@1.4.0 -accounts-meteor-developer@1.5.0 -accounts-oauth@1.4.2 -accounts-password@2.3.4 -accounts-twitter@1.5.0 +accounts-base@3.0.0-beta300.0 +accounts-facebook@1.3.4-beta300.0 +accounts-github@1.5.1-beta300.0 +accounts-google@1.4.1-beta300.0 +accounts-meteor-developer@1.5.1-beta300.0 +accounts-oauth@1.4.3-beta300.0 +accounts-password@3.0.0-beta300.0 +accounts-twitter@1.5.1-beta300.0 pauli:accounts-linkedin -google-oauth@1.4.4 -oauth@2.2.0 -oauth2@1.3.2 +google-oauth@1.4.5-beta300.0 +oauth@3.0.0-beta300.0 +oauth2@1.3.3-beta300.0 -check@1.3.2 -ddp-rate-limiter@1.2.0 -rate-limit@1.1.1 -email@2.2.5 -http@2.0.0 +check@1.3.3-beta300.0 +ddp-rate-limiter@1.2.1-beta300.0 +rate-limit@1.1.2-beta300.0 +email@3.0.0-beta300.0 -meteor-base@1.5.1 -ddp-common@1.4.0 -webapp@1.13.5 +meteor-base@1.5.2-beta300.0 +ddp-common@1.4.1-beta300.0 +webapp@2.0.0-beta300.0 -mongo@1.16.7 +mongo@2.0.0-beta300.0 -reload@1.3.1 -service-configuration@1.3.1 -session@1.2.1 -shell-server@0.5.0 +reload@1.3.2-beta300.0 +service-configuration@1.3.2-beta300.0 +session@1.2.2-beta300.0 +shell-server@0.6.0-beta300.0 dispatch:run-as-user ostrio:cookies @@ -53,22 +51,22 @@ kadira:flow-router meteorhacks:inject-initial -routepolicy@1.1.1 +routepolicy@1.1.2-beta300.0 -webapp-hashing@1.1.1 -facts-base@1.0.1 +webapp-hashing@1.1.2-beta300.0 +facts-base@1.0.2-beta300.0 -tracker@1.3.2 -reactive-dict@1.3.1 -reactive-var@1.0.12 +tracker@1.3.3-beta300.0 +reactive-dict@1.3.2-beta300.0 +reactive-var@1.0.13-beta300.0 -babel-compiler@7.10.4 -standard-minifier-css@1.9.2 -dynamic-import@0.7.3 -ecmascript@0.16.7 -typescript@4.9.4 +babel-compiler@7.11.0-beta300.0 +standard-minifier-css@1.9.3-beta300.0 +dynamic-import@0.7.4-beta300.0 +ecmascript@0.16.8-beta300.0 +typescript@4.9.5-beta300.0 -autoupdate@1.8.0 +autoupdate@2.0.0-beta300.0 # photoswipe diff --git a/apps/meteor/.meteor/release b/apps/meteor/.meteor/release index 6641d0478a104..39526212129ec 100644 --- a/apps/meteor/.meteor/release +++ b/apps/meteor/.meteor/release @@ -1 +1 @@ -METEOR@2.13.3 +METEOR@3.0-beta.0 diff --git a/apps/meteor/.meteor/versions b/apps/meteor/.meteor/versions index 6dab889e3e38e..beea45ca1a5e5 100644 --- a/apps/meteor/.meteor/versions +++ b/apps/meteor/.meteor/versions @@ -1,102 +1,99 @@ -accounts-base@2.2.8 -accounts-facebook@1.3.3 -accounts-github@1.5.0 -accounts-google@1.4.0 -accounts-meteor-developer@1.5.0 -accounts-oauth@1.4.2 -accounts-password@2.3.4 -accounts-twitter@1.5.0 -allow-deny@1.1.1 -autoupdate@1.8.0 -babel-compiler@7.10.4 -babel-runtime@1.5.1 -base64@1.0.12 -binary-heap@1.0.11 -boilerplate-generator@1.7.1 -caching-compiler@1.2.2 -callback-hook@1.5.1 -check@1.3.2 -coffeescript@2.7.0 -coffeescript-compiler@2.4.1 -ddp@1.4.1 -ddp-client@2.6.1 -ddp-common@1.4.0 -ddp-rate-limiter@1.2.0 -ddp-server@2.6.2 -diff-sequence@1.1.2 +accounts-base@3.0.0-beta300.0 +accounts-facebook@1.3.4-beta300.0 +accounts-github@1.5.1-beta300.0 +accounts-google@1.4.1-beta300.0 +accounts-meteor-developer@1.5.1-beta300.0 +accounts-oauth@1.4.3-beta300.0 +accounts-password@3.0.0-beta300.0 +accounts-twitter@1.5.1-beta300.0 +allow-deny@2.0.0-beta300.0 +autoupdate@2.0.0-beta300.0 +babel-compiler@7.11.0-beta300.0 +babel-runtime@1.5.2-beta300.0 +base64@1.0.13-beta300.0 +binary-heap@1.0.12-beta300.0 +boilerplate-generator@2.0.0-beta300.0 +callback-hook@1.6.0-beta300.0 +check@1.3.3-beta300.0 +core-runtime@1.0.0-beta300.0 +ddp@1.4.2-beta300.0 +ddp-client@3.0.0-beta300.0 +ddp-common@1.4.1-beta300.0 +ddp-rate-limiter@1.2.1-beta300.0 +ddp-server@3.0.0-beta300.0 +diff-sequence@1.1.3-beta300.0 dispatch:run-as-user@1.1.1 -dynamic-import@0.7.3 -ecmascript@0.16.7 -ecmascript-runtime@0.8.1 -ecmascript-runtime-client@0.12.1 -ecmascript-runtime-server@0.11.0 -ejson@1.1.3 -email@2.2.5 -es5-shim@4.8.0 -facebook-oauth@1.11.2 -facts-base@1.0.1 -fetch@0.1.3 -geojson-utils@1.0.11 -github-oauth@1.4.1 -google-oauth@1.4.4 -hot-code-push@1.0.4 -http@2.0.0 -id-map@1.1.1 -inter-process-messaging@0.1.1 +dynamic-import@0.7.4-beta300.0 +ecmascript@0.16.8-beta300.0 +ecmascript-runtime@0.8.2-beta300.0 +ecmascript-runtime-client@0.12.2-beta300.0 +ecmascript-runtime-server@0.11.1-beta300.0 +ejson@1.1.4-beta300.0 +email@3.0.0-beta300.0 +es5-shim@4.8.1-beta300.0 +facebook-oauth@1.11.3-beta300.0 +facts-base@1.0.2-beta300.0 +fetch@0.1.4-beta300.0 +geojson-utils@1.0.12-beta300.0 +github-oauth@1.4.2-beta300.0 +google-oauth@1.4.5-beta300.0 +hot-code-push@1.0.5-beta300.0 +http@1.4.4 +id-map@1.2.0-beta300.0 +inter-process-messaging@0.1.2-beta300.0 kadira:flow-router@2.12.1 -localstorage@1.2.0 -logging@1.3.2 -meteor@1.11.3 -meteor-base@1.5.1 -meteor-developer-oauth@1.3.2 +localstorage@1.2.1-beta300.0 +logging@1.3.3-beta300.0 +meteor@2.0.0-beta300.0 +meteor-base@1.5.2-beta300.0 +meteor-developer-oauth@1.3.3-beta300.0 meteorhacks:inject-initial@1.0.5 -minifier-css@1.6.4 -minimongo@1.9.3 -modern-browsers@0.1.9 -modules@0.19.0 -modules-runtime@0.13.1 -mongo@1.16.7 -mongo-decimal@0.1.3 -mongo-dev-server@1.1.0 -mongo-id@1.0.8 -npm-mongo@4.16.0 -oauth@2.2.0 -oauth1@1.5.1 -oauth2@1.3.2 -ordered-dict@1.1.0 +minifier-css@2.0.0-beta300.0 +minimongo@2.0.0-beta300.0 +modern-browsers@0.1.10-beta300.0 +modules@0.19.1-beta300.0 +modules-runtime@0.13.2-beta300.0 +mongo@2.0.0-beta300.0 +mongo-decimal@0.1.4-beta300.0 +mongo-dev-server@1.1.1-beta300.0 +mongo-id@1.0.9-beta300.0 +npm-mongo@4.16.1-beta300.0 +oauth@3.0.0-beta300.0 +oauth1@1.5.2-beta300.0 +oauth2@1.3.3-beta300.0 +ordered-dict@1.2.0-beta300.0 ostrio:cookies@2.7.2 pauli:accounts-linkedin@6.0.0 pauli:linkedin-oauth@6.0.0 -promise@0.12.2 -random@1.2.1 -rate-limit@1.1.1 -react-fast-refresh@0.2.7 -reactive-dict@1.3.1 -reactive-var@1.0.12 -reload@1.3.1 -retry@1.1.0 +promise@1.0.0-beta300.0 +random@1.2.2-beta300.0 +rate-limit@1.1.2-beta300.0 +react-fast-refresh@0.2.8-beta300.0 +reactive-dict@1.3.2-beta300.0 +reactive-var@1.0.13-beta300.0 +reload@1.3.2-beta300.0 +retry@1.1.1-beta300.0 rocketchat:ddp@0.0.1 rocketchat:livechat@0.0.1 rocketchat:mongo-config@0.0.1 -rocketchat:oauth2-server@3.0.0 rocketchat:restivus@1.1.0 rocketchat:streamer@1.1.0 rocketchat:user-presence@2.6.3 rocketchat:version@1.0.0 -routepolicy@1.1.1 -service-configuration@1.3.1 -session@1.2.1 -sha@1.0.9 -shell-server@0.5.0 -socket-stream-client@0.5.1 -standard-minifier-css@1.9.2 -tracker@1.3.2 -twitter-oauth@1.3.3 -typescript@4.9.4 -underscore@1.0.13 +routepolicy@1.1.2-beta300.0 +service-configuration@1.3.2-beta300.0 +session@1.2.2-beta300.0 +sha@1.0.10-beta300.0 +shell-server@0.6.0-beta300.0 +socket-stream-client@0.5.2-beta300.0 +standard-minifier-css@1.9.3-beta300.0 +tracker@1.3.3-beta300.0 +twitter-oauth@1.3.4-beta300.0 +typescript@4.9.5-beta300.0 +underscore@1.0.14-beta300.0 url@1.3.2 -webapp@1.13.5 -webapp-hashing@1.1.1 +webapp@2.0.0-beta300.0 +webapp-hashing@1.1.2-beta300.0 zodern:caching-minifier@0.5.0 -zodern:standard-minifier-js@5.1.2 -zodern:types@1.0.9 +zodern:standard-minifier-js@5.2.0 +zodern:types@1.0.10 diff --git a/apps/meteor/.mocharc.api.js b/apps/meteor/.mocharc.api.js index eca1284e62e5d..a656d4d181608 100644 --- a/apps/meteor/.mocharc.api.js +++ b/apps/meteor/.mocharc.api.js @@ -7,7 +7,7 @@ module.exports = { ...require('./.mocharc.base.json'), // see https://github.com/mochajs/mocha/issues/3916 timeout: 10000, - bail: true, + bail: false, file: 'tests/end-to-end/teardown.js', spec: ['tests/end-to-end/api/**/*', 'tests/end-to-end/apps/*'], }; diff --git a/apps/meteor/app/authentication/server/startup/index.js b/apps/meteor/app/authentication/server/startup/index.js index e3b97c1aae88a..a71d24a496b13 100644 --- a/apps/meteor/app/authentication/server/startup/index.js +++ b/apps/meteor/app/authentication/server/startup/index.js @@ -258,7 +258,7 @@ const onCreateUserAsync = async function (options, user = {}) { Accounts.onCreateUser(function (...args) { // Depends on meteor support for Async - return Promise.await(onCreateUserAsync.call(this, ...args)); + return onCreateUserAsync.call(this, ...args); }); const { insertUserDoc } = Accounts; @@ -298,7 +298,7 @@ const insertUserDocAsync = async function (options, user) { user.roles = []; } - const _id = insertUserDoc.call(Accounts, options, user); + const _id = await insertUserDoc.call(Accounts, options, user); user = await Users.findOne({ _id, @@ -360,7 +360,7 @@ const insertUserDocAsync = async function (options, user) { Accounts.insertUserDoc = function (...args) { // Depends on meteor support for Async - return Promise.await(insertUserDocAsync.call(this, ...args)); + return insertUserDocAsync.call(this, ...args); }; const validateLoginAttemptAsync = async function (login) { @@ -432,7 +432,7 @@ const validateLoginAttemptAsync = async function (login) { Accounts.validateLoginAttempt(function (...args) { // Depends on meteor support for Async - return Promise.await(validateLoginAttemptAsync.call(this, ...args)); + return validateLoginAttemptAsync.call(this, ...args); }); Accounts.validateNewUser((user) => { diff --git a/apps/meteor/app/cas/server/cas_server.js b/apps/meteor/app/cas/server/cas_server.js index 60880c77d4f40..137a7c3adb143 100644 --- a/apps/meteor/app/cas/server/cas_server.js +++ b/apps/meteor/app/cas/server/cas_server.js @@ -243,7 +243,7 @@ Accounts.registerLoginHandler('cas', async (options) => { // Create the user logger.debug(`User "${result.username}" does not exist yet, creating it`); - const userId = Accounts.insertUserDoc({}, newUser); + const userId = await Accounts.insertUserDoc({}, newUser); // Fetch and use it user = await Users.findOneById(userId); diff --git a/apps/meteor/app/e2e/client/rocketchat.e2e.ts b/apps/meteor/app/e2e/client/rocketchat.e2e.ts index 42e9a3a99553d..1884da7312a18 100644 --- a/apps/meteor/app/e2e/client/rocketchat.e2e.ts +++ b/apps/meteor/app/e2e/client/rocketchat.e2e.ts @@ -97,7 +97,7 @@ class E2E extends Emitter { } async getInstanceByRoomId(rid: IRoom['_id']): Promise { - const room = await waitUntilFind(() => ChatRoom.findOne({ _id: rid })); + const room = await waitUntilFind(() => ChatRoom.findOneAsync({ _id: rid })); if (room.t !== 'd' && room.t !== 'p') { return null; diff --git a/apps/meteor/app/file-upload/server/lib/proxy.ts b/apps/meteor/app/file-upload/server/lib/proxy.ts index 048424af4bd9a..dd9e692f0f98d 100644 --- a/apps/meteor/app/file-upload/server/lib/proxy.ts +++ b/apps/meteor/app/file-upload/server/lib/proxy.ts @@ -99,8 +99,15 @@ async function handle(req: createServer.IncomingMessage, res: http.ServerRespons }); } -WebApp.connectHandlers.stack.unshift({ - route: '', - // eslint-disable-next-line @typescript-eslint/no-misused-promises - handle, -}); +// @ts-expect-error - l +const dummyRouter = WebApp.connectHandlers._router; + +// Create a dummy route +dummyRouter.route('*'); +// fetch the newly created "layer" +const stackedRoute = dummyRouter.stack.pop(); +stackedRoute.handle = handle; + +// Move the layer to the top :) +// @ts-expect-error - l +WebApp.connectHandlers._router.stack.unshift(stackedRoute); diff --git a/apps/meteor/app/lib/server/methods/createToken.ts b/apps/meteor/app/lib/server/methods/createToken.ts index b16a61a7dacd5..06dc0dbe85539 100644 --- a/apps/meteor/app/lib/server/methods/createToken.ts +++ b/apps/meteor/app/lib/server/methods/createToken.ts @@ -23,7 +23,7 @@ Meteor.methods({ throw new Meteor.Error('error-not-authorized', 'Not authorized', { method: 'createToken' }); } const token = Accounts._generateStampedLoginToken(); - Accounts._insertLoginToken(userId, token); + await Accounts._insertLoginToken(userId, token); return { userId, authToken: token.token, diff --git a/apps/meteor/app/livechat/client/lib/stream/queueManager.ts b/apps/meteor/app/livechat/client/lib/stream/queueManager.ts index 5ba2cf0d97919..59d50946b8f3b 100644 --- a/apps/meteor/app/livechat/client/lib/stream/queueManager.ts +++ b/apps/meteor/app/livechat/client/lib/stream/queueManager.ts @@ -22,7 +22,7 @@ const events = { return removeInquiry(inquiry); } - LivechatInquiry.upsert({ _id: inquiry._id }, { ...inquiry, alert: true, _updatedAt: new Date(inquiry._updatedAt) }); + await LivechatInquiry.upsertAsync({ _id: inquiry._id }, { ...inquiry, alert: true, _updatedAt: new Date(inquiry._updatedAt) }); await invalidateRoomQueries(inquiry.rid); }, removed: (inquiry: ILivechatInquiryRecord) => removeInquiry(inquiry), @@ -67,7 +67,9 @@ const addListenerForeachDepartment = (departments: ILivechatDepartment['_id'][] }; const updateInquiries = async (inquiries: ILivechatInquiryRecord[] = []) => - inquiries.forEach((inquiry) => LivechatInquiry.upsert({ _id: inquiry._id }, { ...inquiry, _updatedAt: new Date(inquiry._updatedAt) })); + Promise.all( + inquiries.map((inquiry) => LivechatInquiry.upsertAsync({ _id: inquiry._id }, { ...inquiry, _updatedAt: new Date(inquiry._updatedAt) })), + ); const getAgentsDepartments = async (userId: IOmnichannelAgent['_id']) => { const { departments } = await sdk.rest.get(`/v1/livechat/agents/${userId}/departments`, { enabledDepartmentsOnly: 'true' }); diff --git a/apps/meteor/app/livechat/server/livechat.ts b/apps/meteor/app/livechat/server/livechat.ts index 4a3847fecd9d2..edb87115f1bfe 100644 --- a/apps/meteor/app/livechat/server/livechat.ts +++ b/apps/meteor/app/livechat/server/livechat.ts @@ -5,7 +5,7 @@ import { WebApp } from 'meteor/webapp'; import { settings } from '../../settings/server'; import { addServerUrlToIndex } from '../lib/Assets'; -const indexHtmlWithServerURL = addServerUrlToIndex((await Assets.getTextAsync('livechat/index.html')) || ''); +const indexHtmlWithServerURL = addServerUrlToIndex((await Assets.getText('livechat/index.html')) || ''); WebApp.connectHandlers.use('/livechat', (req, res, next) => { if (!req.url) { diff --git a/apps/meteor/app/meteor-accounts-saml/server/lib/SAML.ts b/apps/meteor/app/meteor-accounts-saml/server/lib/SAML.ts index f62ab71f23026..14ae26e38f32f 100644 --- a/apps/meteor/app/meteor-accounts-saml/server/lib/SAML.ts +++ b/apps/meteor/app/meteor-accounts-saml/server/lib/SAML.ts @@ -163,7 +163,7 @@ export class SAML { } } - const userId = Accounts.insertUserDoc({}, newUser); + const userId = await Accounts.insertUserDoc({}, newUser); user = await Users.findOneById(userId); if (user && userObject.channels && channelsAttributeUpdate !== true) { diff --git a/apps/meteor/app/models/client/models/Base.ts b/apps/meteor/app/models/client/models/Base.ts index 68f16d110d00c..e6917a026ad5c 100644 --- a/apps/meteor/app/models/client/models/Base.ts +++ b/apps/meteor/app/models/client/models/Base.ts @@ -31,8 +31,8 @@ export abstract class Base { return this.model.update(...args); } - upsert(...args: Parameters['upsert']>) { - return this.model.upsert(...args); + upsertAsync(...args: Parameters['upsert']>) { + return this.model.upsertAsync(...args); } remove(...args: Parameters['remove']>) { diff --git a/apps/meteor/app/notifications/client/lib/Presence.ts b/apps/meteor/app/notifications/client/lib/Presence.ts index 69c255aaf1f96..b469cbbb0a0f9 100644 --- a/apps/meteor/app/notifications/client/lib/Presence.ts +++ b/apps/meteor/app/notifications/client/lib/Presence.ts @@ -1,17 +1,20 @@ -import type { StreamerEvents } from '@rocket.chat/ui-contexts'; -import { Meteor } from 'meteor/meteor'; +// import type { StreamerEvents } from '@rocket.chat/ui-contexts'; +// import { Meteor } from 'meteor/meteor'; import { Presence, STATUS_MAP } from '../../../../client/lib/presence'; +import { sdk } from '../../../utils/client/lib/SDKClient'; // TODO implement API on Streamer to be able to listen to all streamed data // this is a hacky way to listen to all streamed data from user-presence Streamer -new Meteor.Streamer('user-presence'); - -(Meteor as any).StreamerCentral.on('stream-user-presence', (uid: string, ...args: StreamerEvents['user-presence'][number]['args']) => { - if (!Array.isArray(args)) { - throw new Error('Presence event must be an array'); - } - const [[username, status, statusText]] = args; - Presence.notify({ _id: uid, username, status: STATUS_MAP[status ?? 0], statusText }); +// new Meteor.Streamer('user-presence'); +// TODO: Not working +sdk.stream('user-presence', ['stream-user-presence'], async (args, ...a) => { + // (Meteor as any).StreamerCentral.on('stream-user-presence', (uid: string, ...args: StreamerEvents['user-presence'][number]['args']) => { + // if (!Array.isArray(args)) { + // throw new Error('Presence event must be an array'); + // } + console.log(args, a); + const [username, status, statusText] = args; + Presence.notify({ _id: 'uid', username, status: STATUS_MAP[status ?? 0], statusText }); }); diff --git a/apps/meteor/app/ui-cached-collection/client/models/CachedCollection.ts b/apps/meteor/app/ui-cached-collection/client/models/CachedCollection.ts index 9c970ccf697b2..53993c59d2eb7 100644 --- a/apps/meteor/app/ui-cached-collection/client/models/CachedCollection.ts +++ b/apps/meteor/app/ui-cached-collection/client/models/CachedCollection.ts @@ -173,20 +173,20 @@ export class CachedCollection extends Emitter< const data = await this.callLoad(); this.log(`${data.length} records loaded from server`); - data.forEach((record) => { + for await (const record of data) { const newRecord = this.handleLoadFromServer(record); if (!hasId(newRecord)) { return; } const { _id } = newRecord; - this.collection.upsert({ _id } as Mongo.Selector, newRecord); + await this.collection.upsertAsync({ _id } as Mongo.Selector, newRecord); this.emit('changed', newRecord as any); // TODO: investigate why this is needed if (hasUpdatedAt(newRecord) && newRecord._updatedAt > this.updatedAt) { this.updatedAt = newRecord._updatedAt; } - }); + } this.updatedAt = this.updatedAt === lastTime ? startTime : this.updatedAt; } @@ -241,13 +241,13 @@ export class CachedCollection extends Emitter< } if (action === 'removed') { - this.collection.remove(newRecord._id); + await this.collection.removeAsync(newRecord._id); } else { const { _id } = newRecord; if (!_id) { return; } - this.collection.upsert({ _id } as any, newRecord); + await this.collection.upsertAsync({ _id } as Mongo.Selector, newRecord); } await this.save(); }); @@ -289,9 +289,9 @@ export class CachedCollection extends Emitter< const actionTime = hasUpdatedAt(newRecord) ? newRecord._updatedAt : startTime; changes.push({ - action: () => { + action: async () => { const { _id } = newRecord; - this.collection.upsert({ _id } as Mongo.Selector, newRecord); + await this.collection.upsertAsync({ _id } as Mongo.Selector, newRecord); if (actionTime > this.updatedAt) { this.updatedAt = actionTime; } @@ -314,9 +314,9 @@ export class CachedCollection extends Emitter< const actionTime = newRecord._deletedAt; changes.push({ - action: () => { + action: async () => { const { _id } = newRecord; - this.collection.remove({ _id } as Mongo.Selector); + await this.collection.removeAsync({ _id } as Mongo.Selector); if (actionTime > this.updatedAt) { this.updatedAt = actionTime; } @@ -330,7 +330,7 @@ export class CachedCollection extends Emitter< changes .sort((a, b) => a.timestamp - b.timestamp) .forEach((c) => { - c.action(); + void c.action(); }); this.updatedAt = this.updatedAt === lastTime ? startTime : this.updatedAt; diff --git a/apps/meteor/app/ui-master/server/index.js b/apps/meteor/app/ui-master/server/index.js index 2d4f3cc7de56f..4f061940d32b7 100644 --- a/apps/meteor/app/ui-master/server/index.js +++ b/apps/meteor/app/ui-master/server/index.js @@ -135,14 +135,14 @@ const renderDynamicCssList = withDebouncing({ wait: 500 })(async () => { return `--${_id.replace('theme-color-', '')}: ${value};`; }) .join('\n'); - injectIntoBody('dynamic-variables', ``); + await injectIntoBody('dynamic-variables', ``); }); renderDynamicCssList(); settings.watchByRegex(/theme-color-rc/i, renderDynamicCssList); -injectIntoBody( +await injectIntoBody( 'react-root', `