From 3fa6a96cb8e915c1b97d4305c3db3beab5734606 Mon Sep 17 00:00:00 2001 From: Diego Sampaio Date: Wed, 20 Apr 2022 12:01:13 -0300 Subject: [PATCH 01/17] Move ddp-streamer to a repo --- .../server/services/ddp-streamer/service.ts | 6 -- .../services/ddp-streamer/streams/index.ts | 25 ----- apps/meteor/server/sdk/types/IVoipService.ts | 2 +- ee/apps/ddp-streamer/.eslintrc | 16 ++++ ee/apps/ddp-streamer/Dockerfile | 30 ++++++ .../externals/rocketchat-streamer.d.ts | 96 +++++++++++++++++++ .../definition/externals/ws.d.ts | 0 ee/apps/ddp-streamer/package.json | 48 ++++++++++ .../apps/ddp-streamer/src}/Client.ts | 0 .../apps/ddp-streamer/src}/DDPStreamer.ts | 10 +- .../apps/ddp-streamer/src}/Publication.ts | 0 .../apps/ddp-streamer/src}/Server.ts | 6 +- .../apps/ddp-streamer/src}/Streamer.ts | 4 +- .../apps/ddp-streamer/src}/configureServer.ts | 6 +- .../apps/ddp-streamer/src}/constants.ts | 0 .../apps/ddp-streamer/src}/lib/Autoupdate.ts | 8 +- .../apps/ddp-streamer/src}/lib/utils.ts | 0 ee/apps/ddp-streamer/src/service.ts | 6 ++ ee/apps/ddp-streamer/src/streams.ts | 23 +++++ .../apps/ddp-streamer/src}/types/IPacket.ts | 0 ee/apps/ddp-streamer/tsconfig.json | 29 ++++++ package.json | 2 + yarn.lock | 94 ++++++++++++++++-- 23 files changed, 357 insertions(+), 54 deletions(-) delete mode 100755 apps/meteor/ee/server/services/ddp-streamer/service.ts delete mode 100644 apps/meteor/ee/server/services/ddp-streamer/streams/index.ts create mode 100644 ee/apps/ddp-streamer/.eslintrc create mode 100644 ee/apps/ddp-streamer/Dockerfile create mode 100644 ee/apps/ddp-streamer/definition/externals/rocketchat-streamer.d.ts rename {apps/meteor/ee/server/services => ee/apps/ddp-streamer}/definition/externals/ws.d.ts (100%) create mode 100644 ee/apps/ddp-streamer/package.json rename {apps/meteor/ee/server/services/ddp-streamer => ee/apps/ddp-streamer/src}/Client.ts (100%) rename {apps/meteor/ee/server/services/ddp-streamer => ee/apps/ddp-streamer/src}/DDPStreamer.ts (90%) rename {apps/meteor/ee/server/services/ddp-streamer => ee/apps/ddp-streamer/src}/Publication.ts (100%) rename {apps/meteor/ee/server/services/ddp-streamer => ee/apps/ddp-streamer/src}/Server.ts (95%) rename {apps/meteor/ee/server/services/ddp-streamer => ee/apps/ddp-streamer/src}/Streamer.ts (93%) rename {apps/meteor/ee/server/services/ddp-streamer => ee/apps/ddp-streamer/src}/configureServer.ts (95%) rename {apps/meteor/ee/server/services/ddp-streamer => ee/apps/ddp-streamer/src}/constants.ts (100%) rename {apps/meteor/ee/server/services/ddp-streamer => ee/apps/ddp-streamer/src}/lib/Autoupdate.ts (65%) rename {apps/meteor/ee/server/services/ddp-streamer => ee/apps/ddp-streamer/src}/lib/utils.ts (100%) create mode 100755 ee/apps/ddp-streamer/src/service.ts create mode 100644 ee/apps/ddp-streamer/src/streams.ts rename {apps/meteor/ee/server/services/ddp-streamer => ee/apps/ddp-streamer/src}/types/IPacket.ts (100%) create mode 100644 ee/apps/ddp-streamer/tsconfig.json diff --git a/apps/meteor/ee/server/services/ddp-streamer/service.ts b/apps/meteor/ee/server/services/ddp-streamer/service.ts deleted file mode 100755 index 298b6e49ff30..000000000000 --- a/apps/meteor/ee/server/services/ddp-streamer/service.ts +++ /dev/null @@ -1,6 +0,0 @@ -import '../../startup/broker'; - -import { api } from '../../../../server/sdk/api'; -import { DDPStreamer } from './DDPStreamer'; - -api.registerService(new DDPStreamer()); diff --git a/apps/meteor/ee/server/services/ddp-streamer/streams/index.ts b/apps/meteor/ee/server/services/ddp-streamer/streams/index.ts deleted file mode 100644 index 6ce0c5001a95..000000000000 --- a/apps/meteor/ee/server/services/ddp-streamer/streams/index.ts +++ /dev/null @@ -1,25 +0,0 @@ -import type { ISubscription, IRoom, IUser, ISetting } from '@rocket.chat/core-typings'; - -import { NotificationsModule } from '../../../../../server/modules/notifications/notifications.module'; -import { Stream } from '../Streamer'; -import { Collections, getConnection } from '../../mongo'; -import { RoomsRaw } from '../../../../../app/models/server/raw/Rooms'; -import { SubscriptionsRaw } from '../../../../../app/models/server/raw/Subscriptions'; -import { UsersRaw } from '../../../../../app/models/server/raw/Users'; -import { SettingsRaw } from '../../../../../app/models/server/raw/Settings'; - -const notifications = new NotificationsModule(Stream); - -getConnection().then((db) => { - const Users = new UsersRaw(db.collection(Collections.User)); - notifications.configure({ - Rooms: new RoomsRaw(db.collection(Collections.Rooms)), - Subscriptions: new SubscriptionsRaw(db.collection(Collections.Subscriptions), { - Users, - }), - Users, - Settings: new SettingsRaw(db.collection(Collections.Settings)), - }); -}); - -export default notifications; diff --git a/apps/meteor/server/sdk/types/IVoipService.ts b/apps/meteor/server/sdk/types/IVoipService.ts index 1583a496e714..8f91a7c2a1e9 100644 --- a/apps/meteor/server/sdk/types/IVoipService.ts +++ b/apps/meteor/server/sdk/types/IVoipService.ts @@ -1,7 +1,7 @@ import { IVoipCallServerConfig, IVoipManagementServerConfig, ServerType, IRegistrationInfo } from '@rocket.chat/core-typings'; import type { IVoipConnectorResult, IManagementServerConnectionStatus } from '@rocket.chat/core-typings'; -import { CommandHandler } from '../../services/voip/connector/asterisk/CommandHandler'; +import type { CommandHandler } from '../../services/voip/connector/asterisk/CommandHandler'; export interface IVoipService { getServerConfigData(serverType: ServerType): IVoipCallServerConfig | IVoipManagementServerConfig; diff --git a/ee/apps/ddp-streamer/.eslintrc b/ee/apps/ddp-streamer/.eslintrc new file mode 100644 index 000000000000..00f586c5bdaf --- /dev/null +++ b/ee/apps/ddp-streamer/.eslintrc @@ -0,0 +1,16 @@ +{ + "extends": ["../../../.eslintrc"], + "overrides": [ + { + "files": ["**/*.spec.js", "**/*.spec.jsx"], + "env": { + "jest": true + } + } + ], + "ignorePatterns": ["**/dist"], + "plugins": ["jest"], + "env": { + "jest/globals": true + } +} diff --git a/ee/apps/ddp-streamer/Dockerfile b/ee/apps/ddp-streamer/Dockerfile new file mode 100644 index 000000000000..9035e3cd018b --- /dev/null +++ b/ee/apps/ddp-streamer/Dockerfile @@ -0,0 +1,30 @@ +FROM node:14-alpine + +ARG SERVICE + +WORKDIR /app + +COPY ./packages/core-typings/package.json packages/core-typings/package.json +COPY ./packages/core-typings/dist packages/core-typings/dist +COPY ./packages/rest-typings/package.json packages/rest-typings/package.json +COPY ./packages/rest-typings/dist packages/rest-typings/dist + +COPY ./ee/apps/${SERVICE}/dist . + +COPY ./package.json . +COPY ./yarn.lock . +COPY ./.yarnrc.yml . +COPY ./.yarn/plugins .yarn/plugins +COPY ./.yarn/releases .yarn/releases +COPY ./ee/apps/${SERVICE}/package.json ee/apps/${SERVICE}/package.json + +ENV NODE_ENV=production \ + PORT=3000 + +WORKDIR /app/ee/apps/${SERVICE} + +RUN yarn workspaces focus --production + +EXPOSE 3000 9458 + +CMD ["node", "src/service.js"] diff --git a/ee/apps/ddp-streamer/definition/externals/rocketchat-streamer.d.ts b/ee/apps/ddp-streamer/definition/externals/rocketchat-streamer.d.ts new file mode 100644 index 000000000000..38ced6feafa0 --- /dev/null +++ b/ee/apps/ddp-streamer/definition/externals/rocketchat-streamer.d.ts @@ -0,0 +1,96 @@ +declare module 'meteor/rocketchat:streamer' { + type Connection = any; + + type Client = { + meteorClient: boolean; + ws: any; + userId?: string; + send: Function; + }; + + interface IPublication { + onStop: Function; + stop: Function; + connection: Connection; + _session: { + sendAdded(publicationName: string, id: string, fields: Record): void; + userId?: string; + socket?: { + send: Function; + }; + }; + ready: Function; + userId: string | undefined; + client: Client; + } + + type Rule = (this: IPublication, eventName: string, ...args: any) => Promise; + + interface IRules { + [k: string]: Rule; + } + + type DDPSubscription = { + eventName: string; + subscription: IPublication; + }; + + type TransformMessage = ( + streamer: IStreamer, + subscription: DDPSubscription, + eventName: string, + args: any[], + allowed: boolean | object, + ) => string | false; + + interface IStreamer { + serverOnly: boolean; + + subscriptions: Set; + + subscriptionName: string; + + allowEmit(eventName: string | boolean | Rule, fn?: Rule | 'all' | 'none' | 'logged'): void; + + allowWrite(eventName: string | boolean | Rule, fn?: Rule | 'all' | 'none' | 'logged'): void; + + allowRead(eventName: string | boolean | Rule, fn?: Rule | 'all' | 'none' | 'logged'): void; + + emit(event: string, ...data: any[]): void; + + on(event: string, fn: (...data: any[]) => void): void; + + removeSubscription(subscription: DDPSubscription, eventName: string): void; + + removeListener(event: string, fn: (...data: any[]) => void): void; + + __emit(...data: any[]): void; + + _emit(eventName: string, args: any[], origin: Connection | undefined, broadcast: boolean, transform?: TransformMessage): boolean; + + emitWithoutBroadcast(event: string, ...data: any[]): void; + + changedPayload(collection: string, id: string, fields: Record): string | false; + + _publish(publication: IPublication, eventName: string, options: boolean | { useCollection?: boolean; args?: any }): Promise; + } + + interface IStreamerConstructor { + // eslint-disable-next-line @typescript-eslint/no-misused-new + new (name: string, options?: { retransmit?: boolean; retransmitToSelf?: boolean }): IStreamer; + } +} + +declare module 'meteor/meteor' { + import { IStreamerConstructor, IStreamer } from 'meteor/rocketchat:streamer'; + + namespace Meteor { + const Streamer: IStreamerConstructor & IStreamer; + + namespace StreamerCentral { + const instances: { + [name: string]: IStreamer; + }; + } + } +} diff --git a/apps/meteor/ee/server/services/definition/externals/ws.d.ts b/ee/apps/ddp-streamer/definition/externals/ws.d.ts similarity index 100% rename from apps/meteor/ee/server/services/definition/externals/ws.d.ts rename to ee/apps/ddp-streamer/definition/externals/ws.d.ts diff --git a/ee/apps/ddp-streamer/package.json b/ee/apps/ddp-streamer/package.json new file mode 100644 index 000000000000..b8c56756d0be --- /dev/null +++ b/ee/apps/ddp-streamer/package.json @@ -0,0 +1,48 @@ +{ + "name": "@rocket.chat/ddp-streamer", + "private": true, + "version": "0.0.1", + "description": "Rocket.Chat DDP-Streamer service", + "scripts": { + "build": "tsc -p tsconfig.json", + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [ + "rocketchat" + ], + "author": "Rocket.Chat", + "dependencies": { + "@rocket.chat/apps-engine": "^1.31.0", + "@rocket.chat/core-typings": "workspace:^", + "@rocket.chat/emitter": "~0.31.9", + "@rocket.chat/rest-typings": "workspace:^", + "@rocket.chat/string-helpers": "~0.31.9", + "colorette": "^1.3.0", + "ejson": "^2.2.2", + "eventemitter3": "^4.0.7", + "fibers": "^5.0.1", + "jaeger-client": "^3.19.0", + "moleculer": "^0.14.19", + "mongodb": "^3.6.10", + "nats": "^2.4.0", + "pino": "^7.9.2", + "sharp": "^0.30.4", + "uuid": "^7.0.3", + "ws": "^8.5.0" + }, + "devDependencies": { + "@types/ejson": "^2.1.3", + "@types/meteor": "1.4.81", + "@types/mongodb": "^3.6.20", + "@types/node": "^14.18.12", + "@types/sharp": "^0.30.2", + "@types/uuid": "^8.3.4", + "@types/ws": "^8.5.3", + "pino-pretty": "^7.6.0", + "typescript": "~4.3.5" + }, + "main": "./dist/service.js", + "files": [ + "/dist" + ] +} diff --git a/apps/meteor/ee/server/services/ddp-streamer/Client.ts b/ee/apps/ddp-streamer/src/Client.ts similarity index 100% rename from apps/meteor/ee/server/services/ddp-streamer/Client.ts rename to ee/apps/ddp-streamer/src/Client.ts diff --git a/apps/meteor/ee/server/services/ddp-streamer/DDPStreamer.ts b/ee/apps/ddp-streamer/src/DDPStreamer.ts similarity index 90% rename from apps/meteor/ee/server/services/ddp-streamer/DDPStreamer.ts rename to ee/apps/ddp-streamer/src/DDPStreamer.ts index acf49a2934fe..cec718f47722 100644 --- a/apps/meteor/ee/server/services/ddp-streamer/DDPStreamer.ts +++ b/ee/apps/ddp-streamer/src/DDPStreamer.ts @@ -3,15 +3,15 @@ import url from 'url'; import WebSocket from 'ws'; -import { ListenersModule } from '../../../../server/modules/listeners/listeners.module'; -import { StreamerCentral } from '../../../../server/modules/streamer/streamer.module'; -import { MeteorService } from '../../../../server/sdk'; -import { ServiceClass } from '../../../../server/sdk/types/ServiceClass'; +import { ListenersModule } from '../../../../apps/meteor/server/modules/listeners/listeners.module'; +import { StreamerCentral } from '../../../../apps/meteor/server/modules/streamer/streamer.module'; +import { MeteorService } from '../../../../apps/meteor/server/sdk'; +import { ServiceClass } from '../../../../apps/meteor/server/sdk/types/ServiceClass'; import { Client } from './Client'; import { events, server } from './configureServer'; import { DDP_EVENTS } from './constants'; import { Autoupdate } from './lib/Autoupdate'; -import notifications from './streams'; +import { notifications } from './streams'; const { PORT: port = 4000 } = process.env; diff --git a/apps/meteor/ee/server/services/ddp-streamer/Publication.ts b/ee/apps/ddp-streamer/src/Publication.ts similarity index 100% rename from apps/meteor/ee/server/services/ddp-streamer/Publication.ts rename to ee/apps/ddp-streamer/src/Publication.ts diff --git a/apps/meteor/ee/server/services/ddp-streamer/Server.ts b/ee/apps/ddp-streamer/src/Server.ts similarity index 95% rename from apps/meteor/ee/server/services/ddp-streamer/Server.ts rename to ee/apps/ddp-streamer/src/Server.ts index f55594abbc5d..c2c104f01fb1 100644 --- a/apps/meteor/ee/server/services/ddp-streamer/Server.ts +++ b/ee/apps/ddp-streamer/src/Server.ts @@ -8,9 +8,9 @@ import { DDP_EVENTS } from './constants'; import { Publication } from './Publication'; import { Client } from './Client'; import { IPacket } from './types/IPacket'; -import { MeteorService } from '../../../../server/sdk'; -import { isMeteorError, MeteorError } from '../../../../server/sdk/errors'; -import { Logger } from '../../../../server/lib/logger/Logger'; +import { MeteorService } from '../../../../apps/meteor/server/sdk'; +import { isMeteorError, MeteorError } from '../../../../apps/meteor/server/sdk/errors'; +import { Logger } from '../../../../apps/meteor/server/lib/logger/Logger'; const logger = new Logger('DDP-Streamer'); diff --git a/apps/meteor/ee/server/services/ddp-streamer/Streamer.ts b/ee/apps/ddp-streamer/src/Streamer.ts similarity index 93% rename from apps/meteor/ee/server/services/ddp-streamer/Streamer.ts rename to ee/apps/ddp-streamer/src/Streamer.ts index 9d7fd785716c..a4d15a8477f2 100644 --- a/apps/meteor/ee/server/services/ddp-streamer/Streamer.ts +++ b/ee/apps/ddp-streamer/src/Streamer.ts @@ -4,8 +4,8 @@ import type { DDPSubscription, Connection, TransformMessage } from 'meteor/rocke import { server } from './configureServer'; import { DDP_EVENTS } from './constants'; import { isEmpty } from './lib/utils'; -import { Streamer, StreamerCentral } from '../../../../server/modules/streamer/streamer.module'; -import { api } from '../../../../server/sdk/api'; +import { Streamer, StreamerCentral } from '../../../../apps/meteor/server/modules/streamer/streamer.module'; +import { api } from '../../../../apps/meteor/server/sdk/api'; StreamerCentral.on('broadcast', (name, eventName, args) => { api.broadcast('stream', [name, eventName, args]); diff --git a/apps/meteor/ee/server/services/ddp-streamer/configureServer.ts b/ee/apps/ddp-streamer/src/configureServer.ts similarity index 95% rename from apps/meteor/ee/server/services/ddp-streamer/configureServer.ts rename to ee/apps/ddp-streamer/src/configureServer.ts index b2d5b0ef961e..69afa7f4747b 100644 --- a/apps/meteor/ee/server/services/ddp-streamer/configureServer.ts +++ b/ee/apps/ddp-streamer/src/configureServer.ts @@ -3,10 +3,10 @@ import { EventEmitter } from 'events'; import { UserStatus } from '@rocket.chat/core-typings'; import { DDP_EVENTS, WS_ERRORS } from './constants'; -import { Account, Presence, MeteorService } from '../../../../server/sdk'; +import { Account, Presence, MeteorService } from '../../../../apps/meteor/server/sdk'; import { Server } from './Server'; -import { api } from '../../../../server/sdk/api'; -import { MeteorError } from '../../../../server/sdk/errors'; +import { api } from '../../../../apps/meteor/server/sdk/api'; +import { MeteorError } from '../../../../apps/meteor/server/sdk/errors'; import { Autoupdate } from './lib/Autoupdate'; export const server = new Server(); diff --git a/apps/meteor/ee/server/services/ddp-streamer/constants.ts b/ee/apps/ddp-streamer/src/constants.ts similarity index 100% rename from apps/meteor/ee/server/services/ddp-streamer/constants.ts rename to ee/apps/ddp-streamer/src/constants.ts diff --git a/apps/meteor/ee/server/services/ddp-streamer/lib/Autoupdate.ts b/ee/apps/ddp-streamer/src/lib/Autoupdate.ts similarity index 65% rename from apps/meteor/ee/server/services/ddp-streamer/lib/Autoupdate.ts rename to ee/apps/ddp-streamer/src/lib/Autoupdate.ts index a4e11e81eef6..da74752c6f8c 100644 --- a/apps/meteor/ee/server/services/ddp-streamer/lib/Autoupdate.ts +++ b/ee/apps/ddp-streamer/src/lib/Autoupdate.ts @@ -1,8 +1,8 @@ import { EventEmitter } from 'events'; -import { AutoUpdateRecord } from '../../../../../server/sdk/types/IMeteor'; +import { AutoUpdateRecord } from '../../../../../apps/meteor/server/sdk/types/IMeteor'; -export const Autoupdate = new (class Autoupdate extends EventEmitter { +class AutoupdateSingleton extends EventEmitter { private versions = new Map>(); public updateVersion(record: AutoUpdateRecord): void { @@ -15,4 +15,6 @@ export const Autoupdate = new (class Autoupdate extends EventEmitter { public getVersions(): Map> { return this.versions; } -})(); +} + +export const Autoupdate = new AutoupdateSingleton(); diff --git a/apps/meteor/ee/server/services/ddp-streamer/lib/utils.ts b/ee/apps/ddp-streamer/src/lib/utils.ts similarity index 100% rename from apps/meteor/ee/server/services/ddp-streamer/lib/utils.ts rename to ee/apps/ddp-streamer/src/lib/utils.ts diff --git a/ee/apps/ddp-streamer/src/service.ts b/ee/apps/ddp-streamer/src/service.ts new file mode 100755 index 000000000000..6f4fcfc0fdb3 --- /dev/null +++ b/ee/apps/ddp-streamer/src/service.ts @@ -0,0 +1,6 @@ +import '../../../../apps/meteor/ee/server/startup/broker'; + +import { api } from '../../../../apps/meteor/server/sdk/api'; +import { DDPStreamer } from './DDPStreamer'; + +api.registerService(new DDPStreamer()); diff --git a/ee/apps/ddp-streamer/src/streams.ts b/ee/apps/ddp-streamer/src/streams.ts new file mode 100644 index 000000000000..5d88188d9fcb --- /dev/null +++ b/ee/apps/ddp-streamer/src/streams.ts @@ -0,0 +1,23 @@ +import type { ISubscription, IRoom, IUser, ISetting } from '@rocket.chat/core-typings'; + +import { NotificationsModule } from '../../../../apps/meteor/server/modules/notifications/notifications.module'; +import { Stream } from './Streamer'; +import { Collections, getConnection } from '../../../../apps/meteor/ee/server/services/mongo'; +import { RoomsRaw } from '../../../../apps/meteor/app/models/server/raw/Rooms'; +import { SubscriptionsRaw } from '../../../../apps/meteor/app/models/server/raw/Subscriptions'; +import { UsersRaw } from '../../../../apps/meteor/app/models/server/raw/Users'; +import { SettingsRaw } from '../../../../apps/meteor/app/models/server/raw/Settings'; + +export const notifications = new NotificationsModule(Stream); + +getConnection().then((db) => { + const Users = new UsersRaw(db.collection(Collections.User)); + notifications.configure({ + Rooms: new RoomsRaw(db.collection(Collections.Rooms)), + Subscriptions: new SubscriptionsRaw(db.collection(Collections.Subscriptions), { + Users, + }), + Users, + Settings: new SettingsRaw(db.collection(Collections.Settings)), + }); +}); diff --git a/apps/meteor/ee/server/services/ddp-streamer/types/IPacket.ts b/ee/apps/ddp-streamer/src/types/IPacket.ts similarity index 100% rename from apps/meteor/ee/server/services/ddp-streamer/types/IPacket.ts rename to ee/apps/ddp-streamer/src/types/IPacket.ts diff --git a/ee/apps/ddp-streamer/tsconfig.json b/ee/apps/ddp-streamer/tsconfig.json new file mode 100644 index 000000000000..6fe58ce3eb80 --- /dev/null +++ b/ee/apps/ddp-streamer/tsconfig.json @@ -0,0 +1,29 @@ +{ + "extends": "../../../tsconfig.base.json", + "compilerOptions": { + "target": "es2018", + "lib": ["esnext", "dom"], + "allowJs": true, + "checkJs": false, + "incremental": true, + + /* Strict Type-Checking Options */ + "noImplicitAny": true, + "strictNullChecks": true, + "strictPropertyInitialization": false, + + /* Additional Checks */ + "noUnusedLocals": true, + "noUnusedParameters": true, + "noImplicitReturns": false, + "noFallthroughCasesInSwitch": false, + + /* Module Resolution Options */ + "outDir": "./dist", + "importsNotUsedAsValues": "preserve", + "declaration": false, + "declarationMap": false + }, + "include": ["./src/**/*", "../../../apps/meteor/definition", "./definition"], + "exclude": ["./dist", "./ecosystem.config.js"] +} diff --git a/package.json b/package.json index d92637e572da..6d1775190262 100644 --- a/package.json +++ b/package.json @@ -21,6 +21,8 @@ "workspaces": [ "apps/*", "packages/*", + "ee/apps/*", + "ee/packages/*", "apps/meteor/ee/server/services" ], "repository": { diff --git a/yarn.lock b/yarn.lock index 9ea1ee76f4a5..eb3fc46229e5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3436,6 +3436,39 @@ __metadata: languageName: node linkType: hard +"@rocket.chat/ddp-streamer@workspace:ee/apps/ddp-streamer": + version: 0.0.0-use.local + resolution: "@rocket.chat/ddp-streamer@workspace:ee/apps/ddp-streamer" + dependencies: + "@rocket.chat/apps-engine": ^1.31.0 + "@rocket.chat/core-typings": "workspace:^" + "@rocket.chat/emitter": ~0.31.9 + "@rocket.chat/rest-typings": "workspace:^" + "@rocket.chat/string-helpers": ~0.31.9 + "@types/ejson": ^2.1.3 + "@types/meteor": 1.4.81 + "@types/mongodb": ^3.6.20 + "@types/node": ^14.18.12 + "@types/sharp": ^0.30.2 + "@types/uuid": ^8.3.4 + "@types/ws": ^8.5.3 + colorette: ^1.3.0 + ejson: ^2.2.2 + eventemitter3: ^4.0.7 + fibers: ^5.0.1 + jaeger-client: ^3.19.0 + moleculer: ^0.14.19 + mongodb: ^3.6.10 + nats: ^2.4.0 + pino: ^7.9.2 + pino-pretty: ^7.6.0 + sharp: ^0.30.4 + typescript: ~4.3.5 + uuid: ^7.0.3 + ws: ^8.5.0 + languageName: unknown + linkType: soft + "@rocket.chat/emitter@npm:~0.31.9": version: 0.31.9 resolution: "@rocket.chat/emitter@npm:0.31.9" @@ -6348,6 +6381,15 @@ __metadata: languageName: node linkType: hard +"@types/sharp@npm:^0.30.2": + version: 0.30.2 + resolution: "@types/sharp@npm:0.30.2" + dependencies: + "@types/node": "*" + checksum: dc6b332c309e1eb62e98b62f92829c4b06c3adb474c1ee8b504eb95e6d43be8804b8d541874d0769160595fdf46f7a7a0fe544a3659482ad0a19ac700944f3a4 + languageName: node + linkType: hard + "@types/sinonjs__fake-timers@npm:^6.0.2": version: 6.0.4 resolution: "@types/sinonjs__fake-timers@npm:6.0.4" @@ -6496,7 +6538,7 @@ __metadata: languageName: node linkType: hard -"@types/uuid@npm:^8.3.1": +"@types/uuid@npm:^8.3.1, @types/uuid@npm:^8.3.4": version: 8.3.4 resolution: "@types/uuid@npm:8.3.4" checksum: 6f11f3ff70f30210edaa8071422d405e9c1d4e53abbe50fdce365150d3c698fe7bbff65c1e71ae080cbfb8fded860dbb5e174da96fdbbdfcaa3fb3daa474d20f @@ -10027,7 +10069,7 @@ __metadata: languageName: node linkType: hard -"color@npm:^4.0.1": +"color@npm:^4.0.1, color@npm:^4.2.3": version: 4.2.3 resolution: "color@npm:4.2.3" dependencies: @@ -11479,7 +11521,7 @@ __metadata: languageName: node linkType: hard -"detect-libc@npm:^2.0.0": +"detect-libc@npm:^2.0.0, detect-libc@npm:^2.0.1": version: 2.0.1 resolution: "detect-libc@npm:2.0.1" checksum: ccb05fcabbb555beb544d48080179c18523a343face9ee4e1a86605a8715b4169f94d663c21a03c310ac824592f2ba9a5270218819bb411ad7be578a527593d7 @@ -19951,7 +19993,7 @@ __metadata: languageName: node linkType: hard -"node-addon-api@npm:^4.2.0": +"node-addon-api@npm:^4.2.0, node-addon-api@npm:^4.3.0": version: 4.3.0 resolution: "node-addon-api@npm:4.3.0" dependencies: @@ -22018,6 +22060,29 @@ __metadata: languageName: node linkType: hard +"prebuild-install@npm:^7.0.1": + version: 7.1.0 + resolution: "prebuild-install@npm:7.1.0" + dependencies: + detect-libc: ^2.0.0 + expand-template: ^2.0.3 + github-from-package: 0.0.0 + minimist: ^1.2.3 + mkdirp-classic: ^0.5.3 + napi-build-utils: ^1.0.1 + node-abi: ^3.3.0 + npmlog: ^4.0.1 + pump: ^3.0.0 + rc: ^1.2.7 + simple-get: ^4.0.0 + tar-fs: ^2.0.0 + tunnel-agent: ^0.6.0 + bin: + prebuild-install: bin.js + checksum: 204f2d89c6d6179fa1039036514aa72f7d0b537e421ef72c40840286e318f41489f00f22c6acc725cce6e10d43825b69dcabeaadfc917db781c58cd56fc25f90 + languageName: node + linkType: hard + "precond@npm:0.2": version: 0.2.3 resolution: "precond@npm:0.2.3" @@ -24302,7 +24367,7 @@ __metadata: languageName: node linkType: hard -"semver@npm:7.x, semver@npm:^7.2": +"semver@npm:7.x, semver@npm:^7.2, semver@npm:^7.3.7": version: 7.3.7 resolution: "semver@npm:7.3.7" dependencies: @@ -24504,6 +24569,23 @@ __metadata: languageName: node linkType: hard +"sharp@npm:^0.30.4": + version: 0.30.4 + resolution: "sharp@npm:0.30.4" + dependencies: + color: ^4.2.3 + detect-libc: ^2.0.1 + node-addon-api: ^4.3.0 + node-gyp: latest + prebuild-install: ^7.0.1 + semver: ^7.3.7 + simple-get: ^4.0.1 + tar-fs: ^2.1.1 + tunnel-agent: ^0.6.0 + checksum: 80070d8cad5fe20e7bbb2a1cfddda3f7d421f6af8302c05af8307c0b3b1972e6ed2690563e90b2897b4b499b32967d28a15e37f5d196a1f8867d630609052211 + languageName: node + linkType: hard + "shebang-command@npm:^1.2.0": version: 1.2.0 resolution: "shebang-command@npm:1.2.0" @@ -24568,7 +24650,7 @@ __metadata: languageName: node linkType: hard -"simple-get@npm:^4.0.0": +"simple-get@npm:^4.0.0, simple-get@npm:^4.0.1": version: 4.0.1 resolution: "simple-get@npm:4.0.1" dependencies: From 69d8da1ffeb07693acef7b21f068fd88f420d6d0 Mon Sep 17 00:00:00 2001 From: Diego Sampaio Date: Wed, 20 Apr 2022 12:02:37 -0300 Subject: [PATCH 02/17] Add path to ee license --- LICENSE | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/LICENSE b/LICENSE index ded5c91ab199..8cce70381c66 100644 --- a/LICENSE +++ b/LICENSE @@ -2,8 +2,9 @@ Copyright (c) 2015-2022 Rocket.Chat Technologies Corp. Portions of this software are licensed as follows: -* All content that resides under the "apps/meteor/ee/" directory of this repository, if - that directory exists, is licensed under the license defined in "apps/meteor/ee/LICENSE". +* All content that resides under the "apps/meteor/ee/" and "ee/" directories + of this repository, if that directory exists, is licensed under the license + defined in "apps/meteor/ee/LICENSE". * All third-party components incorporated into the Rocket.Chat Software are licensed under the original license provided by the owner of the applicable component. From 4518f6761e0846c37f131f890559e15c376084b3 Mon Sep 17 00:00:00 2001 From: Diego Sampaio Date: Wed, 20 Apr 2022 14:23:10 -0300 Subject: [PATCH 03/17] Fix test path for ddp-streamer --- apps/meteor/.scripts/start.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/apps/meteor/.scripts/start.js b/apps/meteor/.scripts/start.js index b5001b8b7102..3e0d643359f9 100644 --- a/apps/meteor/.scripts/start.js +++ b/apps/meteor/.scripts/start.js @@ -132,13 +132,18 @@ async function startMicroservices() { return resolve(); } }; + const cwd = + name === 'ddp-streamer' + ? path.resolve(srcDir, '..', 'ee', 'apps', name, 'dist', 'ee', 'apps', 'services', name) + : path.resolve(srcDir, 'ee', 'server', 'services', 'dist', 'ee', 'server', 'services', name); + startProcess({ name: `${name} service`, command: 'node', - params: ['service.js'], + params: ['src/service.js'], onData: waitStart, options: { - cwd: path.resolve(srcDir, 'ee', 'server', 'services', 'dist', 'ee', 'server', 'services', name), + cwd, env: { ...appOptions.env, ...process.env, From 94067b921a2fe780cb9da9251d414875504b2231 Mon Sep 17 00:00:00 2001 From: Diego Sampaio Date: Wed, 20 Apr 2022 16:30:46 -0300 Subject: [PATCH 04/17] fix now? --- apps/meteor/.scripts/start.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/apps/meteor/.scripts/start.js b/apps/meteor/.scripts/start.js index 3e0d643359f9..94df55f91a88 100644 --- a/apps/meteor/.scripts/start.js +++ b/apps/meteor/.scripts/start.js @@ -134,9 +134,11 @@ async function startMicroservices() { }; const cwd = name === 'ddp-streamer' - ? path.resolve(srcDir, '..', 'ee', 'apps', name, 'dist', 'ee', 'apps', 'services', name) + ? path.resolve(srcDir, '..', '..', 'ee', 'apps', name, 'dist', 'ee', 'apps', 'services', name) : path.resolve(srcDir, 'ee', 'server', 'services', 'dist', 'ee', 'server', 'services', name); + console.log('cwd ->', name, cwd); + startProcess({ name: `${name} service`, command: 'node', From acb6cf8047f5a0abc1172c6da942562f4e2be000 Mon Sep 17 00:00:00 2001 From: Diego Sampaio Date: Mon, 25 Apr 2022 10:48:09 -0300 Subject: [PATCH 05/17] Fix path --- apps/meteor/.scripts/start.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/meteor/.scripts/start.js b/apps/meteor/.scripts/start.js index 94df55f91a88..35660319ebd9 100644 --- a/apps/meteor/.scripts/start.js +++ b/apps/meteor/.scripts/start.js @@ -134,7 +134,7 @@ async function startMicroservices() { }; const cwd = name === 'ddp-streamer' - ? path.resolve(srcDir, '..', '..', 'ee', 'apps', name, 'dist', 'ee', 'apps', 'services', name) + ? path.resolve(srcDir, '..', '..', 'ee', 'apps', name, 'dist', 'ee', 'apps', name) : path.resolve(srcDir, 'ee', 'server', 'services', 'dist', 'ee', 'server', 'services', name); console.log('cwd ->', name, cwd); From 074e2149b6f34b0d3cb0232df9ecd037e025d29a Mon Sep 17 00:00:00 2001 From: Diego Sampaio Date: Mon, 25 Apr 2022 10:56:53 -0300 Subject: [PATCH 06/17] Fix yarn.lock --- yarn.lock | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/yarn.lock b/yarn.lock index d5e6c4249038..ae6fd9eba664 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3448,13 +3448,6 @@ __metadata: languageName: node linkType: hard -"@rocket.chat/emitter@npm:~0.31.10": - version: 0.31.10 - resolution: "@rocket.chat/emitter@npm:0.31.10" - checksum: fb72e86b47e2e1b5add11717547aa11416efe228b54612a98e12fedf74875580a071e2f51edcb55b37ab95106aa7feaa7257b35d62abc517471433cf06e6f802 - languageName: node - linkType: hard - "@rocket.chat/ddp-streamer@workspace:ee/apps/ddp-streamer": version: 0.0.0-use.local resolution: "@rocket.chat/ddp-streamer@workspace:ee/apps/ddp-streamer" @@ -3488,6 +3481,13 @@ __metadata: languageName: unknown linkType: soft +"@rocket.chat/emitter@npm:~0.31.10": + version: 0.31.10 + resolution: "@rocket.chat/emitter@npm:0.31.10" + checksum: fb72e86b47e2e1b5add11717547aa11416efe228b54612a98e12fedf74875580a071e2f51edcb55b37ab95106aa7feaa7257b35d62abc517471433cf06e6f802 + languageName: node + linkType: hard + "@rocket.chat/emitter@npm:~0.31.9": version: 0.31.9 resolution: "@rocket.chat/emitter@npm:0.31.9" @@ -10066,6 +10066,16 @@ __metadata: languageName: node linkType: hard +"color@npm:^3.1.3": + version: 3.2.1 + resolution: "color@npm:3.2.1" + dependencies: + color-convert: ^1.9.3 + color-string: ^1.6.0 + checksum: f81220e8b774d35865c2561be921f5652117638dcda7ca4029262046e37fc2444ac7bbfdd110cf1fd9c074a4ee5eda8f85944ffbdda26186b602dd9bb05f6400 + languageName: node + linkType: hard + "color@npm:^4.0.1, color@npm:^4.2.3": version: 4.2.3 resolution: "color@npm:4.2.3" @@ -10076,7 +10086,7 @@ __metadata: languageName: node linkType: hard -"colorette@npm:^1.4.0": +"colorette@npm:^1.3.0, colorette@npm:^1.4.0": version: 1.4.0 resolution: "colorette@npm:1.4.0" checksum: 01c3c16058b182a4ab4c126a65a75faa4d38a20fa7c845090b25453acec6c371bb2c5dceb0a2338511f17902b9d1a9af0cadd8509c9403894b79311032c256c3 @@ -19731,7 +19741,7 @@ __metadata: languageName: node linkType: hard -"moleculer@npm:^0.14.20": +"moleculer@npm:^0.14.19, moleculer@npm:^0.14.20": version: 0.14.20 resolution: "moleculer@npm:0.14.20" dependencies: @@ -21717,7 +21727,7 @@ __metadata: languageName: node linkType: hard -"pino-pretty@npm:^7.6.1": +"pino-pretty@npm:^7.6.0, pino-pretty@npm:^7.6.1": version: 7.6.1 resolution: "pino-pretty@npm:7.6.1" dependencies: @@ -21747,7 +21757,7 @@ __metadata: languageName: node linkType: hard -"pino@npm:^7.10.0": +"pino@npm:^7.10.0, pino@npm:^7.9.2": version: 7.10.0 resolution: "pino@npm:7.10.0" dependencies: From f53ebfe55c8041efd230bda7eca7abb1b94c191f Mon Sep 17 00:00:00 2001 From: Diego Sampaio Date: Mon, 25 Apr 2022 13:10:30 -0300 Subject: [PATCH 07/17] just do it --- .github/workflows/build_and_test.yml | 6 ++++-- apps/meteor/.scripts/start.js | 17 ++++++++--------- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/.github/workflows/build_and_test.yml b/.github/workflows/build_and_test.yml index 1cdbeb91b48b..0789a7bf1299 100644 --- a/.github/workflows/build_and_test.yml +++ b/.github/workflows/build_and_test.yml @@ -368,7 +368,7 @@ jobs: run: yarn - name: Build micro services - run: yarn build:services + run: yarn build - name: E2E Test API env: @@ -840,10 +840,12 @@ jobs: # first install repo dependencies yarn - yarn build:services + yarn build echo "Building Docker image for service: ${{ matrix.service }}:${IMAGE_TAG}" + # TODO missing ddp-streamer + docker build \ --build-arg SERVICE=${{ matrix.service }} \ -t rocketchat/${{ matrix.service }}-service:${IMAGE_TAG} \ diff --git a/apps/meteor/.scripts/start.js b/apps/meteor/.scripts/start.js index 35660319ebd9..a29e7bb1dbf1 100644 --- a/apps/meteor/.scripts/start.js +++ b/apps/meteor/.scripts/start.js @@ -69,6 +69,7 @@ function killAllProcesses(mainExitCode) { } function startProcess(opts) { + console.log('Starting process', opts.name, opts.command, opts.params, opts.options.cwd); const proc = spawn(opts.command, opts.params, opts.options); processes.push(proc); @@ -125,25 +126,23 @@ function startRocketChat() { } async function startMicroservices() { + const waitStart = (resolve) => (message) => { + if (message.toString().match('NetworkBroker started successfully')) { + return resolve(); + } + }; const startService = (name) => { return new Promise((resolve) => { - const waitStart = (message) => { - if (message.toString().match('NetworkBroker started successfully')) { - return resolve(); - } - }; const cwd = name === 'ddp-streamer' ? path.resolve(srcDir, '..', '..', 'ee', 'apps', name, 'dist', 'ee', 'apps', name) : path.resolve(srcDir, 'ee', 'server', 'services', 'dist', 'ee', 'server', 'services', name); - console.log('cwd ->', name, cwd); - startProcess({ name: `${name} service`, command: 'node', - params: ['src/service.js'], - onData: waitStart, + params: [name === 'ddp-streamer' ? 'src/service.js' : 'service.js'], + onData: waitStart(resolve), options: { cwd, env: { From 4dfbee98899d828778565ae5d807ef4c44018511 Mon Sep 17 00:00:00 2001 From: Diego Sampaio Date: Mon, 25 Apr 2022 17:20:53 -0300 Subject: [PATCH 08/17] test should not be async --- .../tests/unit/client/views/notFound/NotFoundPage.spec.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/meteor/tests/unit/client/views/notFound/NotFoundPage.spec.tsx b/apps/meteor/tests/unit/client/views/notFound/NotFoundPage.spec.tsx index 4c44df335253..c9c8e6beff24 100644 --- a/apps/meteor/tests/unit/client/views/notFound/NotFoundPage.spec.tsx +++ b/apps/meteor/tests/unit/client/views/notFound/NotFoundPage.spec.tsx @@ -7,7 +7,7 @@ import RouterContextMock from '../../../../mocks/client/RouterContextMock'; import NotFoundPage from '../../../../../client/views/notFound/NotFoundPage'; describe('views/notFound/NotFoundPage', () => { - it('should look good', async () => { + it('should look good', () => { render(); expect(screen.getByRole('heading', { level: 1, name: 'Oops_page_not_found' })).to.exist; From 723f099bcca8cffa450da63cdb806690a7e76448 Mon Sep 17 00:00:00 2001 From: Diego Sampaio Date: Mon, 25 Apr 2022 18:45:59 -0300 Subject: [PATCH 09/17] which one is breaking --- .../client/views/notFound/NotFoundPage.spec.tsx | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/apps/meteor/tests/unit/client/views/notFound/NotFoundPage.spec.tsx b/apps/meteor/tests/unit/client/views/notFound/NotFoundPage.spec.tsx index c9c8e6beff24..4370b50d4ad5 100644 --- a/apps/meteor/tests/unit/client/views/notFound/NotFoundPage.spec.tsx +++ b/apps/meteor/tests/unit/client/views/notFound/NotFoundPage.spec.tsx @@ -7,16 +7,28 @@ import RouterContextMock from '../../../../mocks/client/RouterContextMock'; import NotFoundPage from '../../../../../client/views/notFound/NotFoundPage'; describe('views/notFound/NotFoundPage', () => { - it('should look good', () => { + it('should look good #1', () => { render(); expect(screen.getByRole('heading', { level: 1, name: 'Oops_page_not_found' })).to.exist; + }); + it('should look good #2', () => { + render(); + expect( screen.getByRole('status', { name: 'Sorry_page_you_requested_does_not_exist_or_was_deleted', }), ).to.exist; + }); + it('should look good #3', () => { + render(); + expect(screen.getByRole('button', { name: 'Return_to_previous_page' })).to.exist.and.to.not.match(':disabled'); + }); + it('should look good #4', () => { + render(); + expect(screen.getByRole('button', { name: 'Return_to_home' })).to.exist.and.to.not.match(':disabled'); }); From 777cf296172befee5adb79e3171f6261253a8577 Mon Sep 17 00:00:00 2001 From: Diego Sampaio Date: Tue, 3 May 2022 15:27:01 -0300 Subject: [PATCH 10/17] Revert test --- .../unit/client/views/notFound/NotFoundPage.spec.tsx | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/apps/meteor/tests/unit/client/views/notFound/NotFoundPage.spec.tsx b/apps/meteor/tests/unit/client/views/notFound/NotFoundPage.spec.tsx index 4370b50d4ad5..962e9cabd318 100644 --- a/apps/meteor/tests/unit/client/views/notFound/NotFoundPage.spec.tsx +++ b/apps/meteor/tests/unit/client/views/notFound/NotFoundPage.spec.tsx @@ -7,27 +7,18 @@ import RouterContextMock from '../../../../mocks/client/RouterContextMock'; import NotFoundPage from '../../../../../client/views/notFound/NotFoundPage'; describe('views/notFound/NotFoundPage', () => { - it('should look good #1', () => { + it('should look good', () => { render(); expect(screen.getByRole('heading', { level: 1, name: 'Oops_page_not_found' })).to.exist; - }); - it('should look good #2', () => { - render(); expect( screen.getByRole('status', { name: 'Sorry_page_you_requested_does_not_exist_or_was_deleted', }), ).to.exist; - }); - it('should look good #3', () => { - render(); expect(screen.getByRole('button', { name: 'Return_to_previous_page' })).to.exist.and.to.not.match(':disabled'); - }); - it('should look good #4', () => { - render(); expect(screen.getByRole('button', { name: 'Return_to_home' })).to.exist.and.to.not.match(':disabled'); }); From 69dd3261a5ac01b2b758f3d57a3663884fc3841c Mon Sep 17 00:00:00 2001 From: Diego Sampaio Date: Tue, 3 May 2022 17:24:48 -0300 Subject: [PATCH 11/17] should look good 4 times --- .../unit/client/views/notFound/NotFoundPage.spec.tsx | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/apps/meteor/tests/unit/client/views/notFound/NotFoundPage.spec.tsx b/apps/meteor/tests/unit/client/views/notFound/NotFoundPage.spec.tsx index 962e9cabd318..4370b50d4ad5 100644 --- a/apps/meteor/tests/unit/client/views/notFound/NotFoundPage.spec.tsx +++ b/apps/meteor/tests/unit/client/views/notFound/NotFoundPage.spec.tsx @@ -7,18 +7,27 @@ import RouterContextMock from '../../../../mocks/client/RouterContextMock'; import NotFoundPage from '../../../../../client/views/notFound/NotFoundPage'; describe('views/notFound/NotFoundPage', () => { - it('should look good', () => { + it('should look good #1', () => { render(); expect(screen.getByRole('heading', { level: 1, name: 'Oops_page_not_found' })).to.exist; + }); + it('should look good #2', () => { + render(); expect( screen.getByRole('status', { name: 'Sorry_page_you_requested_does_not_exist_or_was_deleted', }), ).to.exist; + }); + it('should look good #3', () => { + render(); expect(screen.getByRole('button', { name: 'Return_to_previous_page' })).to.exist.and.to.not.match(':disabled'); + }); + it('should look good #4', () => { + render(); expect(screen.getByRole('button', { name: 'Return_to_home' })).to.exist.and.to.not.match(':disabled'); }); From f144711515e7e059b7d935d041df838d1a27cbee Mon Sep 17 00:00:00 2001 From: Diego Sampaio Date: Wed, 4 May 2022 17:32:31 -0300 Subject: [PATCH 12/17] remove duplicated file --- .../externals/rocketchat-streamer.d.ts | 96 ------------------- 1 file changed, 96 deletions(-) delete mode 100644 ee/apps/ddp-streamer/definition/externals/rocketchat-streamer.d.ts diff --git a/ee/apps/ddp-streamer/definition/externals/rocketchat-streamer.d.ts b/ee/apps/ddp-streamer/definition/externals/rocketchat-streamer.d.ts deleted file mode 100644 index 38ced6feafa0..000000000000 --- a/ee/apps/ddp-streamer/definition/externals/rocketchat-streamer.d.ts +++ /dev/null @@ -1,96 +0,0 @@ -declare module 'meteor/rocketchat:streamer' { - type Connection = any; - - type Client = { - meteorClient: boolean; - ws: any; - userId?: string; - send: Function; - }; - - interface IPublication { - onStop: Function; - stop: Function; - connection: Connection; - _session: { - sendAdded(publicationName: string, id: string, fields: Record): void; - userId?: string; - socket?: { - send: Function; - }; - }; - ready: Function; - userId: string | undefined; - client: Client; - } - - type Rule = (this: IPublication, eventName: string, ...args: any) => Promise; - - interface IRules { - [k: string]: Rule; - } - - type DDPSubscription = { - eventName: string; - subscription: IPublication; - }; - - type TransformMessage = ( - streamer: IStreamer, - subscription: DDPSubscription, - eventName: string, - args: any[], - allowed: boolean | object, - ) => string | false; - - interface IStreamer { - serverOnly: boolean; - - subscriptions: Set; - - subscriptionName: string; - - allowEmit(eventName: string | boolean | Rule, fn?: Rule | 'all' | 'none' | 'logged'): void; - - allowWrite(eventName: string | boolean | Rule, fn?: Rule | 'all' | 'none' | 'logged'): void; - - allowRead(eventName: string | boolean | Rule, fn?: Rule | 'all' | 'none' | 'logged'): void; - - emit(event: string, ...data: any[]): void; - - on(event: string, fn: (...data: any[]) => void): void; - - removeSubscription(subscription: DDPSubscription, eventName: string): void; - - removeListener(event: string, fn: (...data: any[]) => void): void; - - __emit(...data: any[]): void; - - _emit(eventName: string, args: any[], origin: Connection | undefined, broadcast: boolean, transform?: TransformMessage): boolean; - - emitWithoutBroadcast(event: string, ...data: any[]): void; - - changedPayload(collection: string, id: string, fields: Record): string | false; - - _publish(publication: IPublication, eventName: string, options: boolean | { useCollection?: boolean; args?: any }): Promise; - } - - interface IStreamerConstructor { - // eslint-disable-next-line @typescript-eslint/no-misused-new - new (name: string, options?: { retransmit?: boolean; retransmitToSelf?: boolean }): IStreamer; - } -} - -declare module 'meteor/meteor' { - import { IStreamerConstructor, IStreamer } from 'meteor/rocketchat:streamer'; - - namespace Meteor { - const Streamer: IStreamerConstructor & IStreamer; - - namespace StreamerCentral { - const instances: { - [name: string]: IStreamer; - }; - } - } -} From 3b43cfb7adf23c60bee1864b4fdbb1ebec4fa566 Mon Sep 17 00:00:00 2001 From: Diego Sampaio Date: Wed, 4 May 2022 17:32:48 -0300 Subject: [PATCH 13/17] add eslint-config package --- ee/apps/ddp-streamer/.eslintrc | 2 +- ee/apps/ddp-streamer/package.json | 1 + yarn.lock | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/ee/apps/ddp-streamer/.eslintrc b/ee/apps/ddp-streamer/.eslintrc index 00f586c5bdaf..4d3f4a7d4d54 100644 --- a/ee/apps/ddp-streamer/.eslintrc +++ b/ee/apps/ddp-streamer/.eslintrc @@ -1,5 +1,5 @@ { - "extends": ["../../../.eslintrc"], + "extends": ["@rocket.chat/eslint-config"], "overrides": [ { "files": ["**/*.spec.js", "**/*.spec.jsx"], diff --git a/ee/apps/ddp-streamer/package.json b/ee/apps/ddp-streamer/package.json index b8c56756d0be..f12efba68426 100644 --- a/ee/apps/ddp-streamer/package.json +++ b/ee/apps/ddp-streamer/package.json @@ -31,6 +31,7 @@ "ws": "^8.5.0" }, "devDependencies": { + "@rocket.chat/eslint-config": "workspace:^", "@types/ejson": "^2.1.3", "@types/meteor": "1.4.81", "@types/mongodb": "^3.6.20", diff --git a/yarn.lock b/yarn.lock index d00709c4f0f1..8ed18acbc295 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3463,6 +3463,7 @@ __metadata: "@rocket.chat/apps-engine": ^1.31.0 "@rocket.chat/core-typings": "workspace:^" "@rocket.chat/emitter": ~0.31.9 + "@rocket.chat/eslint-config": "workspace:^" "@rocket.chat/rest-typings": "workspace:^" "@rocket.chat/string-helpers": ~0.31.9 "@types/ejson": ^2.1.3 From 16a1cef0f3e532f83fc77f24819a39030eb34f10 Mon Sep 17 00:00:00 2001 From: Diego Sampaio Date: Wed, 4 May 2022 17:32:55 -0300 Subject: [PATCH 14/17] fix CI and docker build --- .github/workflows/build_and_test.yml | 10 +++++++--- ee/apps/ddp-streamer/Dockerfile | 2 +- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build_and_test.yml b/.github/workflows/build_and_test.yml index 7979f0699664..68a5d15c7cb3 100644 --- a/.github/workflows/build_and_test.yml +++ b/.github/workflows/build_and_test.yml @@ -624,7 +624,7 @@ jobs: docker build \ --build-arg SERVICE=${{ matrix.service }} \ -t rocketchat/${{ matrix.service }}-service:${IMAGE_TAG} \ - -f ./apps/meteor/ee/server/services/Dockerfile \ + -f ./ee/apps/ddp-streamer/Dockerfile \ . release-versions: @@ -876,12 +876,16 @@ jobs: echo "Building Docker image for service: ${{ matrix.service }}:${IMAGE_TAG}" - # TODO missing ddp-streamer + if [[ "${{ matrix.service }}" == "ddp-streamer" ]]; then + DOCKERFILE_PATH="./ee/apps/ddp-streamer/Dockerfile" + else + DOCKERFILE_PATH="./apps/meteor/ee/server/services/Dockerfile" + fi docker build \ --build-arg SERVICE=${{ matrix.service }} \ -t rocketchat/${{ matrix.service }}-service:${IMAGE_TAG} \ - -f ./apps/meteor/ee/server/services/Dockerfile \ + -f ${DOCKERFILE_PATH} \ . docker push rocketchat/${{ matrix.service }}-service:${IMAGE_TAG} diff --git a/ee/apps/ddp-streamer/Dockerfile b/ee/apps/ddp-streamer/Dockerfile index 9035e3cd018b..b0e792389e1b 100644 --- a/ee/apps/ddp-streamer/Dockerfile +++ b/ee/apps/ddp-streamer/Dockerfile @@ -1,4 +1,4 @@ -FROM node:14-alpine +FROM node:14.18.3-alpine ARG SERVICE From e037ca2867af1590a742f308e932405cb2042bc5 Mon Sep 17 00:00:00 2001 From: Diego Sampaio Date: Thu, 5 May 2022 09:26:39 -0300 Subject: [PATCH 15/17] fix build --- .github/workflows/build_and_test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build_and_test.yml b/.github/workflows/build_and_test.yml index 68a5d15c7cb3..ac59246f76db 100644 --- a/.github/workflows/build_and_test.yml +++ b/.github/workflows/build_and_test.yml @@ -617,7 +617,7 @@ jobs: IMAGE_TAG: check run: | yarn - yarn build:services + yarn build echo "Building Docker image for service: ${{ matrix.service }}:${IMAGE_TAG}" From f712c69e09e09e3427067d5b26e6ab79d9c18e90 Mon Sep 17 00:00:00 2001 From: Diego Sampaio Date: Wed, 11 May 2022 16:21:03 -0300 Subject: [PATCH 16/17] add ui-contexts dep --- ee/apps/ddp-streamer/Dockerfile | 2 ++ ee/apps/ddp-streamer/package.json | 1 + yarn.lock | 1 + 3 files changed, 4 insertions(+) diff --git a/ee/apps/ddp-streamer/Dockerfile b/ee/apps/ddp-streamer/Dockerfile index b0e792389e1b..f7cfdddc934e 100644 --- a/ee/apps/ddp-streamer/Dockerfile +++ b/ee/apps/ddp-streamer/Dockerfile @@ -8,6 +8,8 @@ COPY ./packages/core-typings/package.json packages/core-typings/package.json COPY ./packages/core-typings/dist packages/core-typings/dist COPY ./packages/rest-typings/package.json packages/rest-typings/package.json COPY ./packages/rest-typings/dist packages/rest-typings/dist +# COPY ./packages/ui-contexts/package.json packages/ui-contexts/package.json +# COPY ./packages/ui-contexts/dist packages/ui-contexts/dist COPY ./ee/apps/${SERVICE}/dist . diff --git a/ee/apps/ddp-streamer/package.json b/ee/apps/ddp-streamer/package.json index f12efba68426..836070ceb888 100644 --- a/ee/apps/ddp-streamer/package.json +++ b/ee/apps/ddp-streamer/package.json @@ -17,6 +17,7 @@ "@rocket.chat/emitter": "~0.31.9", "@rocket.chat/rest-typings": "workspace:^", "@rocket.chat/string-helpers": "~0.31.9", + "@rocket.chat/ui-contexts": "workspace:^", "colorette": "^1.3.0", "ejson": "^2.2.2", "eventemitter3": "^4.0.7", diff --git a/yarn.lock b/yarn.lock index d3c96bde08b5..5276084b95bb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3648,6 +3648,7 @@ __metadata: "@rocket.chat/eslint-config": "workspace:^" "@rocket.chat/rest-typings": "workspace:^" "@rocket.chat/string-helpers": ~0.31.9 + "@rocket.chat/ui-contexts": "workspace:^" "@types/ejson": ^2.1.3 "@types/meteor": 1.4.81 "@types/mongodb": ^3.6.20 From 93e5e7b63b02227f9a40cc886ac8c13f41f8e477 Mon Sep 17 00:00:00 2001 From: Diego Sampaio Date: Wed, 11 May 2022 17:03:00 -0300 Subject: [PATCH 17/17] Fix Dockerfile --- ee/apps/ddp-streamer/Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ee/apps/ddp-streamer/Dockerfile b/ee/apps/ddp-streamer/Dockerfile index f7cfdddc934e..a81e2cbb7047 100644 --- a/ee/apps/ddp-streamer/Dockerfile +++ b/ee/apps/ddp-streamer/Dockerfile @@ -8,8 +8,8 @@ COPY ./packages/core-typings/package.json packages/core-typings/package.json COPY ./packages/core-typings/dist packages/core-typings/dist COPY ./packages/rest-typings/package.json packages/rest-typings/package.json COPY ./packages/rest-typings/dist packages/rest-typings/dist -# COPY ./packages/ui-contexts/package.json packages/ui-contexts/package.json -# COPY ./packages/ui-contexts/dist packages/ui-contexts/dist +COPY ./packages/ui-contexts/package.json packages/ui-contexts/package.json +COPY ./packages/ui-contexts/dist packages/ui-contexts/dist COPY ./ee/apps/${SERVICE}/dist .