Skip to content

Instantly share code, notes, and snippets.

@KevLehman
Created May 25, 2021 21:23
Show Gist options
  • Save KevLehman/e580b815de86d7bc328fc4c054e4122a to your computer and use it in GitHub Desktop.
Save KevLehman/e580b815de86d7bc328fc4c054e4122a to your computer and use it in GitHub Desktop.
RC Folder structure
Rocket.Chat folder structure
This is a non-extensive documentation about the current Rocket.Chat file structure (19/05). Alongside a brief description of the folder , there's one (or more) pair of , containing a high level categorization for the folder: - [Important] means something can be a service by itself - [Important][-servicename-] means that something can be part of a defined service - [Settings/Integrations/Types/Utils] means that the folder can be moved to the appropiate folder - [FrontEnd] means a folder's are only (or almost all related) to front end. The treatment for these folders should be done by the FE team.
.
├── app
The `app` folder contains "services" used by FE & BE. Each package is "isolated" from the others, and they store logic inside client/server folders (according to use)
A "service" can hold just FE/BE functionallity depending on the structure it has. This was the standard when starting to use meteor, but it's now deprecated.
Since a refactor to this folder can take a long time, an approach could be to migrate non-critical functionallity first (like, emojis) to the new folder/structure schema, and then migrate critical ones
│ ├── 2fa
[Important] The 2fa service is in charge of all TOTPs
│ │ ├── README.md
│ │ ├── client
The `client` folder is used to provide FE logic. FE can then import the package and the appropiate will be returned based on if it's a server call or not
│ │ │ └── lib
│ │ └── server
The `server` folder is the BE part of the service. It holdds methods & functions that will be used when the package is required from the server. There's no standard in how to structure this folders
This one, for example, has a `code` folder to store the source code, a `lib` to store common functionallity, a `methods` to define `meteor.methods` and a `startup` which calls `meteor.startup` to define logic
that will be executed on each server restart
│ │ ├── code
│ │ ├── functions
│ │ ├── lib
│ │ ├── methods
│ │ ├── startup
│ ├── api
[Important] This service is in charge of cotrolling the v1 API. It provides utility functions to define new and to parse query/body params. This service is `server-side` only
│ │ └── server
│ │ ├── api.
│ │ ├── default
│ │ ├── helpers
This folder provides utilities that can be used to parse the body of the or to add to the request context (the current user, pagination, room used, etc)
│ │ │ ├── README.md
│ │ ├── lib
This is similar to the previous folder, with the difference that you cannot `call` this by using the `API.v1.helpers` object. Functions defined here can be used by the to support specific
scenarios, or they are executed automatically when a request is received (eg: cleanQuery)
│ │ │ ├── custom-
│ │ │ ├── custom-user-
│ │ │ ├── emoji-
│ │ └── v1
This folder contains the route definitions divided by the "area" they are tied to (eg: rooms, chat, e2e, etc). The convention is to define routes only inside these folders (unless it's an ee service)
│ │ ├── custom-
│ │ ├── custom-user-
│ │ ├── email-
│ │ ├── emoji-
│ │ ├── video-
│ ├── apps
[Important] This is the main place for the apps engine. Client apps (like te game center) are defined here. This service also provides the app framework and the orchestrator
Most of this can be a service on its own
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── client
│ │ │ ├── communication
│ │ │ ├── gameCenter
│ │ ├── lib
│ │ │ └── misc
│ │ └── server
│ │ ├── bridges
│ │ ├── communication
│ │ ├── converters
│ │ ├── storage
│ │ │ ├── logs-
│ │ └──
│ │ ├── messages.
│ │ └── mocks
│ │ ├── data
│ │ │ └── messages.
│ │ ├── models
│ │ │ ├── BaseModel.
│ │ │ ├── Messages.
│ │ │ ├── Rooms.
│ │ │ ├── Users.
│ │ └── orchestrator.
│ ├── authentication
[Important] The authentication service manages login related validations, like the blockage of users after n failed and logging of the login activity in general
│ │ └── server
│ │ ├── hooks
│ │ ├── lib
│ │ └── startup
│ ├── authorization
[Important] The authorization service provides auth logic to the whole application. There's a service called auth (comm/ee). The comm service uses functionallity from this one.
It should be straightforward to move the logic from here to the new service. This also manages streamer permissions
│ │ ├── README.md
│ │ ├── client
│ │ │ ├── lib
│ │ ├── lib
│ │ └── server
│ │ ├── functions
│ │ ├── methods
│ │ └── streamer
│ │ └── permissions
│ ├── autolinker
[FrontEnd] The autolinker service is in charge of converting message's text to valid "< a >" tags
│ │ ├── client
│ │ └── server
│ ├── autotranslate
[Important] The autotranslate service is in charge of managing translation services (not UI translation, but message translation) using DeepL or Google's tech.
│ │ ├── README.md
│ │ ├── client
│ │ │ └── lib
│ │ └── server
│ │ ├── methods
│ ├── bigbluebutton
[Integrations][VideoCall] Used to manage contact with the BBB API
│ │ └── server
│ │ ├── bigbluebutton-
│ ├── blockstack
[Integrations] Manages integrations with the Blockstacks service
│ │ ├── client
│ │ └── server
│ ├── bot-helpers
[Important] Settings to control
│ │ ├── README.md
│ │ └── server
│ ├── callbacks
[Important] The "operation hooks" approach from RC. It allows you to run a set of specified callbacks before/after something happens. Callbacks can have priorities
│ │ ├── client
│ │ ├── lib
│ │ └── server
│ ├── cas
[Important][Auth] Manages authentication through CAS Exchange protocol
│ │ ├── client
│ │ └── server
│ ├── channel-settings
[Settings] In charge of managing room settings and additional validations (like readonly rooms, reactions, etc)
│ │ ├── client
│ │ │ ├── lib
│ │ └── server
│ │ ├── functions
│ │ ├── methods
│ ├── chatpal-search
[Integrations] Provides integration capabilities with ChatPal
│ │ ├── client
│ │ │ └── template
│ │ └── server
│ │ ├── asset
│ │ ├── provider
│ │ └── utils
│ ├── cloud
[Important][Cloud] Provides functionality for the server to communicate with the cloud services (push, etc)
Also, performns license validations
│ │ └── server
│ │ ├── functions
│ ├── colors
[FrontEnd] Color management
│ │ ├── client
│ │ └── server
│ ├── cors
[Important][Auth] CORS Management
│ │ ├── client
│ │ ├── lib
│ │ └── server
│ ├── crowd
[Integrations][Auth] Integraiont with Attlassian Crowd
│ │ ├── client
│ │ └── server
│ ├── custom
│ │ ├── client
│ │ └── server
│ ├── custom-oauth
[Important][Custom] Custom OAUTH Implementaiton for RC
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── client
│ │ └── server
│ │ └── transform_helpers.
│ ├── custom-sounds
[Settings] Custom sounds for userLoggedOut
│ │ ├── client
│ │ │ ├── lib
│ │ │ └── notifications
│ │ └── server
│ │ ├── methods
│ │ └── startup
│ │ ├── custom-
│ ├── discussion
[Important] Discussion management
│ │ ├── client
│ │ │ ├── lib
│ │ │ │ └── messageTypes
│ │ │ └── views
│ │ │ └── creationDialog
│ │ │ └──
│ │ ├── lib
│ │ └── server
│ │ ├── hooks
│ │ ├── methods
│ ├── dolphin
[Integrations][OAuth] Dolphin integration
│ │ ├── client
│ │ │ └── login-
│ │ ├── lib
│ │ └── server
│ ├── drupal
[Integrations][OAuth] Drupal integration
│ │ ├── README.md
│ │ ├── client
│ │ │ └── login-
│ │ ├── lib
│ │ └── server
│ ├── e2e
[Important] E2E encryption service (this should be a service by its own)
│ │ ├── client
│ │ │ ├── rocketchat.
│ │ │ ├── rocketchat.e2e.
│ │ │ ├──
│ │ └── server
│ │ ├── methods
│ ├── emoji
[FrontEnd] This is the emojipicker
│ │ ├── client
│ │ │ ├── function-
│ │ │ └── lib
│ │ ├── lib
│ │ └── server
│ ├── emoji-custom
[Settings][FrontEnd] Custom emoji module
│ │ ├── client
│ │ │ ├── admin
│ │ │ ├── lib
│ │ │ │ └── function-
│ │ │ └── notifications
│ │ └── server
│ │ ├── methods
│ │ └── startup
│ │ ├── emoji-
│ ├── emoji-emojione
[Integrations][Emoji] Fetch emojis from emojione
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── client
│ │ │ ├── activity-
│ │ │ ├── emojione-
│ │ │ ├── flags-
│ │ │ ├── food-
│ │ │ ├── modifier-
│ │ │ ├── nature-
│ │ │ ├── people-
│ │ │ ├── regional-
│ │ │ ├── symbols-
│ │ │ └── travel-
│ │ ├── lib
│ │ │ ├── emojione.tpl
│ │ │ ├── generateEmojiIndex.mjs
│ │ └── server
│ ├── error-handler
[Important][Utils] Error handler for RC
│ │ └── server
│ │ ├── lib
│ │ │ └── RocketChat.
│ │ └── startup
│ ├── favico
[FrontEnd] controls the favicon?
│ │ ├── client
│ ├── federation
[Important] Federation manages communication between servers and users on them. This should be a service by its own
│ │ ├── README.md
│ │ └── server
│ │ ├──
│ │ ├── functions
│ │ ├── handler
│ │ ├── hooks
│ │ ├── lib
│ │ ├── methods
│ │ ├── normalizers
│ │ └── startup
│ ├── file
[Important][FileHandling] Manages uploading/downloading
│ │ └── server
│ │ ├── file.
│ ├── file-upload
[Important][FileHandling] Manages userfiles uploading/downloading with selected provider (storage)
│ │ ├── client
│ │ │ └── lib
│ │ ├── lib
│ │ ├── server
│ │ │ ├── config
│ │ │ ├── lib
│ │ │ ├── methods
│ │ │ └── startup
│ │ └── ufs
│ │ ├── AmazonS3
│ │ ├── GoogleStorage
│ │ └── Webdav
│ ├── github-enterprise
[Integrations][OAuth] OAuth integration with GH enterprise
│ │ ├── client
│ │ │ ├── github-enterprise-login-
│ │ ├── lib
│ │ └── server
│ ├── gitlab
[Integrations][OAuth] OAuth integration with Gitlab
│ │ ├── client
│ │ │ ├── gitlab-login-
│ │ ├── lib
│ │ └── server
│ ├── google-vision
[Integrations] Integration with Google Vision API (For image filtering)
It would be so cool to use the vision api to generate alt text for images, but that would be a $$$$
│ │ ├── README.md
│ │ ├── client
│ │ └── server
│ ├── highlight-words
[FrontEnd] Word highlighter
│ │ ├── client
│ │ └──
│ │ └── helper.
│ ├── iframe-login
[Util] Login using an IFrame
│ │ ├── client
│ │ └── server
│ ├── importer
[Important] Importer service (from slack or similar)
│ │ ├── client
│ │ ├── lib
│ │ └── server
│ │ ├── classes
│ │ ├── definitions
│ │ ├── methods
│ │ ├── models
│ │ └── startup
│ ├── importer-csv
[Important][Importer] This should be merged with the [Importer] service
│ │ ├── client
│ │ ├── lib
│ │ └── server
│ ├── importer-hipchat-enterprise
[Important][Importer] This should be merged with the [Importer] service
│ │ ├── client
│ │ ├── lib
│ │ └── server
│ ├── importer-pending-avatars
[Important][Importer] This should be merged with the [Importer] service
│ │ └── server
│ ├── importer-pending-files
[Important][Importer] This should be merged with the [Importer] service
│ │ └── server
│ ├── importer-slack
[Important][Importer] This should be merged with the [Importer] service
│ │ ├── client
│ │ ├── lib
│ │ └── server
│ ├── importer-slack-users
[Important][Importer] This should be merged with the [Importer] service
│ │ ├── client
│ │ ├── lib
│ │ └── server
│ ├── integrations
[Integrations] An Iconming-webhook alike
│ │ ├── client
│ │ ├── lib
│ │ └── server
│ │ ├── api
│ │ ├── lib
│ │ ├── methods
│ │ │ ├── incoming
│ │ │ └── outgoing
│ ├── invites
[Important][Util?] Send invites to users
│ │ └── server
│ │ └── functions
│ ├── irc
[Integrations] Integration with IRC servers
│ │ ├── README.md
│ │ └── server
│ │ ├── irc-bridge
│ │ │ ├── localHandlers
│ │ │ └── peerHandlers
│ │ ├── irc-
│ │ ├── methods
│ │ └── servers
│ │ ├── RFC2813
│ ├── issuelinks
[FrontEnd] something related to links
│ │ ├── client
│ │ └── server
│ ├── katex
[FrontEnd] KaTeX support in messages
│ │ ├── client
│ │ └── server
│ ├── lazy-load
[FrontEnd] LazyLoad service
│ │ ├── client
│ ├── ldap
[Integrations][OAuth] LDAP Integration for authentication & user management
│ │ ├── client
│ │ └── server
│ ├── lib
[Utils] Utils for `app`s packages & methods not related to any specific package here. We may need to find an appropiate place for all files under `server/functions`
│ │ ├── README.md
│ │ ├── client
│ │ │ ├── lib
│ │ │ │ ├── startup
│ │ │ ├── methods
│ │ │ └── views
│ │ ├── lib
│ │ │ ├── roomTypes
│ │ │ └── startup
│ │ ├── server
│ │ │ ├── functions
│ │ │ │ ├── notifications
│ │ │ ├── lib
│ │ │ ├── methods
│ │ │ ├── oauth
│ │ │ └── startup
│ │ ├── startup
│ │ └──
│ │ ├── server.
│ │ └── server.
│ ├── livechat
[Important] Livechat service
│ │ ├── client
│ │ │ ├── collections
│ │ │ ├── externalFrame
│ │ │ ├── lib
│ │ │ │ └── stream
│ │ │ ├── startup
│ │ │ ├──
│ │ │ └── views
│ │ │ ├── app
│ │ │ │ ├── business-hours
│ │ │ │ ├── customTemplates
│ │ │ │ ├── dialog
│ │ │ │ └── tabbar
│ │ ├──
│ │ │ └── server
│ │ │ └── rest
│ │ ├── lib
│ │ │ └── stream
│ │ └── server
│ │ ├── api
│ │ │ ├── lib
│ │ │ └── v1
│ │ ├── business-hour
│ │ ├── externalFrame
│ │ ├── hooks
│ │ ├── lib
│ │ │ ├── analytics
│ │ │ ├── routing
│ │ │ └── stream
│ │ ├── methods
│ │ ├── roomAccessValidator.
│ │ ├── roomAccessValidator.
│ │ ├── statistics
│ ├── livestream
[Important] Livestream? Not sure about the usage of this one.
│ │ ├── .gitignore
│ │ ├── client
│ │ │ ├── styles
│ │ │ └── views
│ │ └── server
│ │ ├── functions
│ ├── logger
[Utils] Logger provider. we should use it more :(
│ │ ├── README.md
│ │ ├── client
│ │ └── server
│ ├── mail-messages
[Integrations] Integration with emails. It allows users to build conversations from RC => Email
│ │ ├── client
│ │ └── server
│ │ ├── functions
│ │ ├── lib
│ │ ├── methods
│ ├── mailer
[Utils] Mailer provider
│ │ ├── server
│ │ └──
│ │ └── api.
│ ├── mapview
│ │ └── server
│ ├── markdown
[FrontEnd] Markdown support for messages
│ │ ├── client
│ │ ├── lib
│ │ │ └── parser
│ │ │ ├── filtered
│ │ │ ├── marked
│ │ │ └── original
│ │ ├── server
│ │ └──
│ │ ├── client.
│ │ └── client.
│ ├── mentions
[Important] Mentions service
│ │ ├── client
│ │ ├── lib
│ │ ├── server
│ │ │ ├── methods
│ │ └──
│ │ ├── client.
│ │ └── server.
│ ├── mentions-flextab
[Utils][Mentions] Utils for mentions service
│ │ └── client
│ │ └── views
│ ├── message-
[FrontEnd] Support on messages
│ │ ├── client
│ ├── message-mark-as-unread
[Important] Allows marking message as unread
│ │ ├── client
│ │ └── server
│ ├── message-pin
[Important][Messages]
│ │ ├── client
│ │ │ └── views
│ │ │ └──
│ │ └── server
│ │ └── startup
│ ├── message-snippet
[Important][Messages]
│ │ ├── client
│ │ │ ├── lib
│ │ │ ├── page
│ │ │ │ └──
│ │ │ └── tabBar
│ │ │ └── views
│ │ └── server
│ │ ├── methods
│ │ └── startup
│ ├── message-star
[Important][Messages]
│ │ ├── client
│ │ │ └── views
│ │ │ └──
│ │ └── server
│ │ └── startup
│ ├── meteor--saml
[Integrations][OAuth] Integration with saml (not actually oauth, but, it's the category :p)
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── client
│ │ ├── server
│ │ │ ├── definition
│ │ │ ├── lib
│ │ │ │ ├── generators
│ │ │ │ ├── parsers
│ │ │ ├── methods
│ │ └──
│ │ └── server.
│ ├── meteor-autocomplete
[FrontEnd]
│ │ └── client
│ │ ├── autocomplete-
│ │ ├──
│ │ ├── .html
│ │ └──
│ ├── metrics
[Important] Metrics collector
│ │ └── server
│ │ └── lib
│ ├── migrations
[Important] This is the runner. We can move it next to the migrations
│ │ └── server
│ ├── models
[Important][Models] The models, serverside and ide models
│ │ ├── client
│ │ │ └── models
│ │ └── server
│ │ ├── models
│ │ │ ├── Sessions.
│ │ │ ├── Sessions.
│ │ │ ├── apps-logs-
│ │ │ ├── apps-
│ │ │ └── apps-persistence-
│ │ └── raw
│ ├── nextcloud
[Important][FileHandling] Webdav with nextcloud
│ │ ├── client
│ │ ├── lib
│ │ └── server
│ ├── notification-queue
[Important][Notifications] Queue to manage notifications
│ │ └── server
│ ├── notifications
[Important][Notifications] The actual notification service
│ │ ├── client
│ │ │ └── lib
│ │ └── server
│ │ └── lib
│ ├── nrr
[FrontEnd]
│ │ ├── README.md
│ │ ├── client
│ ├── oauth2-server-config
[Important] Use RC as an OAuth server
│ │ ├── .gitignore
│ │ ├── client
│ │ │ ├── admin
│ │ │ └── oauth
│ │ │ ├── oauth2-
│ │ │ ├── oauth2-
│ │ │ └──
│ │ └── server
│ │ ├── admin
│ │ │ ├── functions
│ │ │ └── methods
│ │ └── oauth
│ │ ├── default-
│ │ └── oauth2-
│ ├── oembed
[Utils] OEmbed
│ │ ├── client
│ │ └── server
│ ├── otr
[Important] OTR Service
│ │ ├── client
│ │ │ ├── rocketchat.
│ │ │ ├── rocketchat.otr.
│ │ │ ├──
│ │ └── server
│ │ ├── methods
│ ├── promises
[Important] The same as callbacks, but in promises
│ │ ├── client
│ │ ├── lib
│ │ └── server
│ ├── push
[Important][notifications] Push notifications service
│ │ └── server
│ ├── push-notifications
[Important][notifications] push notifications gateway
│ │ ├── client
│ │ └── server
│ │ ├── lib
│ │ └── methods
│ ├── reactions
[Important][Rooms] Reaction management
│ │ ├── README.md
│ │ ├── client
│ │ │ ├── methods
│ │ │ └──
│ │ └── server
│ ├── retention-policy
[Important][Rooms] Retention policy handler
│ │ ├── README.md
│ │ └── server
│ │ └── startup
│ ├── search
[Important] Search messages. Having this as its own service should allow us to scale it when needed (using an ee)
│ │ ├── README.md
│ │ ├── client
│ │ │ ├── provider
│ │ │ ├── search
│ │ │ └── style
│ │ └── server
│ │ ├──
│ │ ├── logger
│ │ ├── model
│ │ ├── provider
│ │ ├── search.
│ │ └── service
│ ├── settings
[Important][Settings] well, the settings server...
│ │ ├── client
│ │ │ └── lib
│ │ ├── lib
│ │ └── server
│ │ ├── functions
│ │ │ ├── settings.
│ │ │ ├── settings.
│ │ └── raw.
│ ├── slackbridge
[Integrations] Integration with slackbridge
│ │ ├── README.md
│ │ ├── client
│ │ │ └── slackbridge_import.
│ │ ├── server
│ │ │ └── slackbridge_import.
│ │ └──
│ │ └── manual-.txt
│ ├── slashcommand-
[Important][commands] ascii slashcommand
│ │ ├── client
│ │ ├── lib
│ │ └── server
│ ├── slashcommands-archiveroom
[important][commands]
│ │ ├── client
│ │ └── server
│ ├── slashcommands-create
[important][command]
│ │ ├── client
│ │ └── server
│ ├── slashcommands-help
[important][command]
│ │ └── server
│ ├── slashcommands-hide
[important][command]
│ │ ├── client
│ │ └── server
│ ├── slashcommands-invite
[important][command]
│ │ ├── client
│ │ └── server
│ ├── slashcommands-inviteall
[important][command]
│ │ ├── client
│ │ └── server
│ ├── slashcommands-join
[important][command]
│ │ ├── client
│ │ └── server
│ ├── slashcommands-kick
[important][command]
│ │ ├── client
│ │ └── server
│ ├── slashcommands-leave
[important][command]
│ │ └── server
│ ├── slashcommands-me
[important][command]
│ │ └── server
│ ├── slashcommands-msg
[important][command]
│ │ └── server
│ ├── slashcommands-mute
[important][command]
│ │ └── server
│ ├── slashcommands-open
[important][command]
│ │ ├── client
│ ├── slashcommands-status
[important][command]
│ │ ├── client
│ │ ├── lib
│ │ └── server
│ ├── slashcommands-topic
[important][command]
│ │ ├── client
│ │ ├── lib
│ │ └── server
│ ├── slashcommands-unarchiveroom
[important][command]
│ │ ├── client
│ │ └── server
│ ├── smarsh-connector
[important][command]
│ │ └── server
│ │ ├── functions
│ │ ├── lib
│ ├── sms
[Integrations] sms service using 3rd parties
│ │ ├── README.md
│ │ └── server
│ │ ├── services
│ ├── spotify
[integrations][oauth]
│ │ ├── lib
│ │ └── server
│ ├── statistics
[Important][metrics collector] service
│ │ └── server
│ │ ├── functions
│ │ ├── lib
│ │ │ ├── UAParserCustom.
│ │ │ ├── getMostImportantRole.
│ │ ├── methods
│ │ └── startup
│ ├── theme
[FrontEnd]
│ │ ├── client
│ │ │ ├──
│ │ │ │ ├──
│ │ │ │ │ ├── contextual-
│ │ │ │ │ ├── flex-
│ │ │ │ │ ├── main-
│ │ │ │ │ ├── message-
│ │ │ │ │ ├── modal
│ │ │ │ │ │ └── create-
│ │ │ │ │ ├── read-.css
│ │ │ │ │ ├── sidebar
│ │ │ │ │ │ ├── rooms-
│ │ │ │ │ │ ├── sidebar-
│ │ │ │ ├── forms
│ │ │ │ │ ├── popup-
│ │ │ │ │ ├── select-
│ │ │ │ └── general
│ │ │ │ ├── react-
│ │ │ ├── rocketchat.
│ │ │ └── vendor
│ │ │ ├── fontello
│ │ │ │ ├── on
│ │ │ │ └── css
│ │ │ │ └──
│ │ └── server
│ ├── threads
[important][rooms] threads service. should be part of rooms
│ │ ├── README.md
│ │ ├── client
│ │ │ ├──
│ │ │ ├── flextab
│ │ │ ├── lib
│ │ │ ├── messageAction
│ │ └── server
│ │ ├── hooks
│ │ ├── methods
│ ├── token-login
[important][authorization] login using a token. Auth service
│ │ ├── client
│ │ └── server
│ ├── tokenpass
[important][authorization] login using a token. Auth service
│ │ ├── README.md
│ │ ├── client
│ │ │ ├── login-
│ │ ├── lib
│ │ └── server
│ │ ├── functions
│ │ ├── methods
│ │ ├── roomAccessValidator.
│ │ ├── roomAccessValidator.
│ ├── ui
[FrontEnd]
│ │ ├── README.md
│ │ ├── client
│ │ │ ├──
│ │ │ │ ├── header
│ │ │ ├── lib
│ │ │ │ ├── codeMirror
│ │ │ │ ├──
│ │ │ │ ├── textarea-
│ │ │ └── views
│ │ │ ├── 404
│ │ │ ├── app
│ │ │ │ ├──
│ │ │ │ ├── lib
│ │ │ │ ├──
│ │ │ │ │ └── helpers.
│ │ │ │ └── videoCall
│ ├── ui-account
[FrontEnd]
│ │ ├── README.md
│ │ ├── client
│ │ │ ├── avatar
│ ├── ui-cached-collection
[FrontEnd]
│ │ ├── client
│ │ │ └── models
│ ├── ui-clean-history
[FrontEnd]
│ │ ├── README.md
│ │ ├── client
│ │ │ └── lib
│ ├── ui-login
[FrontEnd]
│ │ ├── README.md
│ │ ├── client
│ │ │ ├── login
│ │ │ └── username
│ ├── ui-master
[FrontEnd]
│ │ ├── README.md
│ │ ├── client
│ │ │ ├── loading
│ │ └── server
│ ├── ui-message
[FrontEnd]
│ │ ├── README.md
│ │ ├── client
│ │ │ ├── messageBox
│ │ │ └── popup
│ ├── ui-sidenav
[FrontEnd]
│ │ ├── README.md
│ │ ├── client
│ ├── ui-utils
[FrontEnd]
│ │ ├── client
│ │ │ └── lib
│ │ ├── lib
│ │ ├── server
│ │ └──
│ │ ├── server.
│ │ └── server.
│ ├── ui-vrecord
[FrontEnd]
│ │ ├── README.md
│ │ ├── client
│ │ └── server
│ ├── user-data-download
[utils][data exporter] service to allow users to download its own data
│ │ └── server
│ │ └── startup
│ ├── user-status
[utils] service to allow users to set its own status
│ │ ├── client
│ │ │ ├── admin
│ │ │ ├── lib
│ │ │ └── notifications
│ │ └── server
│ │ └── methods
│ ├── utils
[utils]
│ │ ├── client
│ │ │ └── lib
│ │ ├── lib
│ │ │ ├── date.
│ │ │ ├── getURL.
│ │ │ ├── slashCommand.
│ │ ├── rocketchat.info
│ │ ├── server
│ │ │ ├── functions
│ │ │ └── lib
│ │ │ ├── cron
│ │ └── stream
│ ├── version-check
[utils]
│ │ ├── client
│ │ └── server
│ │ ├── functions
│ │ ├── methods
│ ├── videobridge
[integrations] i integration
│ │ ├── client
│ │ │ └── views
│ │ ├── lib
│ │ └── server
│ │ ├── methods
│ ├── webdav
[important][file handling]
│ │ ├── README.md
│ │ ├── client
│ │ │ ├── startup
│ │ └── server
│ │ ├── lib
│ │ ├── methods
│ │ └── startup
│ ├── webrtc
[integrations]
│ │ ├── client
│ │ └── server
│ └── wordpress
[integrations][oauth]
│ ├── client
│ │ └── wordpress-login-
│ ├── lib
│ └── server
├── on
├── client
[FrontEnd]
│ ├── .prettierrc
│ ├── README.md
│ ├── UIKit
│ │ └── hooks
│ ├──
│ │ ├── Card
│ │ │ ├── Card.
│ │ ├── DotLeader.
│ │ ├── GenericModal.
│ │ ├── GenericTable
│ │ ├── GenericTable.
│ │ ├── Header
│ │ │ ├── Header.
│ │ ├── Logo.
│ │ ├── MarkdownText.
│ │ ├── Message
│ │ │ ├── Actions
│ │ │ ├──
│ │ │ │ ├── Attachment
│ │ │ │ ├── FieldsAttachment
│ │ │ │ ├── Files
│ │ │ │ ├──
│ │ │ │ │ ├── Image.
│ │ │ │ ├── context
│ │ │ │ ├── hooks
│ │ │ │ └── providers
│ │ │ ├── Body
│ │ │ │ ├── definitions
│ │ │ ├── Metrics
│ │ │ │ ├── Metrics.
│ │ │ ├── NotificationStatus
│ │ │ ├── helpers
│ │ │ └── hooks
│ │ ├── ModalSeparator
│ │ ├── NotAuthorizedPage.
│ │ ├── Omnichannel
│ │ │ └── modals
│ │ ├── Page
│ │ │ ├── Page.
│ │ ├── RoomAutoComplete
│ │ ├── Sidebar
│ │ ├── SortList
│ │ ├── UserAutoComplete
│ │ │ ├── UserAutoComplete.
│ │ ├── UserCard
│ │ │ ├── UserCard.
│ │ ├── UserStatus
│ │ │ ├── UserStatus.
│ │ ├── VerticalBar
│ │ ├── avatar
│ │ │ └── UserAvatarEditor
│ │ ├── burger
│ │ │ ├── BurgerBadge.
│ │ │ ├── BurgerIcon.
│ │ │ ├── BurgerMenuButton.
│ │ ├── connectionStatus
│ │ │ └── ConnectionStatusBar.
│ │ ├── data
│ │ │ ├── Counter.
│ │ │ ├── CounterSet.
│ │ │ ├── Growth.
│ │ │ ├── NegativeGrowthSymbol.
│ │ │ └── PositiveGrowthSymbol.
│ ├──
│ │ ├── ServerContext
│ │ │ ├──
│ │ │ │ ├── apps
│ │ │ │ └── v1
│ │ │ │ ├── channels
│ │ │ │ ├── chat
│ │ │ │ ├── cloud
│ │ │ │ ├── custom-user-status
│ │ │ │ ├── emoji-custom
│ │ │ │ ├── groups
│ │ │ │ ├── im
│ │ │ │ ├── livechat
│ │ │ │ ├── rooms
│ │ │ │ ├── teams
│ │ │ │ └── users
│ │ │ ├── methods
│ │ │ │ ├── mailer
│ ├── hooks
│ │ ├──
│ ├── lib
│ │ ├── asyncState
│ │ ├── download.
│ │ ├──
│ │ ├── minimongo
│ │ │ ├── bson.
│ │ │ ├── comparisons.
│ │ │ ├── lookups.
│ │ ├── portals
│ │ ├── settings
│ ├── methods
│ ├── polyfills
│ ├── providers
│ ├── sidebar
│ │ ├── Item
│ │ │ ├── Condensed.
│ │ │ ├── Extended.
│ │ │ ├── Medium.
│ │ │ └── skeletons
│ │ │ └── Skeleton.
│ │ ├── RoomList
│ │ ├── Sidebar.
│ │ ├── header
│ │ │ ├── actions
│ │ ├── hooks
│ │ ├── search
│ │ └── sections
│ ├── startup
│ │ ├── contextualBar
│ │ ├── notifications
│ │ ├── renderMessage
│ │ ├── renderNotification
│ │ ├── streamMessage
│ ├── templateHelpers
│ ├── types
│ │ ├── fuselage-tokens-colors.
│ │ ├── fuselage-ui-kit.
│ │ ├── global.
│ │ ├── kadira-flow-router.
│ │ ├── konecty-user-presence.
│ │ ├── less-browser.
│ │ ├── main.
│ │ ├── meteor-.
│ │ ├── meteor-mongo.
│ │ ├── meteor-tracker.
│ │ ├── meteor.
│ │ ├── mizzao-timesync.
│ │ └── window.
│ └── views
│ ├── InfoPanel
│ │ ├── InfoPanel.
│ ├── account
│ │ ├── preferences
│ │ ├── security
│ │ └── tokens
│ ├── admin
│ │ ├── apps
│ │ │ ├── hooks
│ │ │ ├── lib
│ │ ├── cloud
│ │ ├── customEmoji
│ │ ├── customSounds
│ │ ├── customUserStatus
│ │ ├── emailInbox
│ │ ├── federationDashboard
│ │ │ ├── FederationDashboardPage.
│ │ │ ├── OverviewSection.
│ │ │ └── ServersSection.
│ │ ├── import
│ │ │ ├── ImportHistoryPage.
│ │ │ ├── ImportOperationSummary.
│ │ │ ├── NewImportPage.
│ │ ├── info
│ │ │ ├── DescriptionList.
│ │ │ ├── OfflineLicenseModal.
│ │ ├── integrations
│ │ │ ├── edit
│ │ │ ├── helpers
│ │ │ └── new
│ │ ├── invites
│ │ ├── mailer
│ │ │ ├── Mailer.
│ │ ├── oauthApps
│ │ ├── permissions
│ │ ├── rooms
│ │ ├── settings
│ │ │ ├── GroupPage.
│ │ │ ├── GroupSelector.
│ │ │ ├── ettingButton.
│ │ │ ├── Section.
│ │ │ ├── Setting.
│ │ │ ├── groups
│ │ │ └──
│ │ │ ├── ActionSettingInput.
│ │ │ ├── ettingInput.
│ │ │ ├── BooleanSettingInput.
│ │ │ ├── CodeSettingInput.
│ │ │ ├── ColorSettingInput.
│ │ │ ├── ettingInput.
│ │ │ ├── GenericSettingInput.
│ │ │ ├── ettingInput.
│ │ │ ├── LanguageSettingInput.
│ │ │ ├── ettingInput.
│ │ │ ├── PasswordSettingInput.
│ │ │ ├── RelativeUrlSettingInput.
│ │ │ ├── ettingInput.
│ │ │ └── StringSettingInput.
│ │ ├── sidebar
│ │ ├── users
│ │ └── viewLogs
│ │ ├── ViewLogs.
│ ├── banners
│ ├── blocks
│ ├── directory
│ ├── hooks
│ ├── location
│ ├── login
│ │ └── ResetPassword
│ │ └── ResetPassword.
│ ├── mailer
│ ├── notFound
│ │ └── NotFoundPage.
│ ├── omnichannel
│ │ ├──
│ │ ├── analytics
│ │ │ ├── AnalyticsPage.
│ │ │ ├── DateRangePicker.
│ │ ├── appearance
│ │ │ ├── AppearanceForm.
│ │ ├── businessHours
│ │ │ ├── BusinessHoursForm.
│ │ ├──
│ │ ├──
│ │ ├── customFields
│ │ │ ├── CustomFieldsForm.
│ │ ├──
│ │ ├── directory
│ │ │ ├──
│ │ │ │ └── contextualBar
│ │ │ └──
│ │ │ └── contextualBar
│ │ ├── facebook
│ │ ├── installation
│ │ │ ├── Installation.
│ │ ├── managers
│ │ ├── realTimeMonitoring
│ │ │ ├──
│ │ │ ├── counter
│ │ │ │ └── CounterRow.
│ │ │ └── overviews
│ │ ├── sidebar
│ │ ├── triggers
│ │ │ ├── TriggersForm.
│ │ └── webhooks
│ ├── room
│ │ ├── Announcement
│ │ │ ├── Announcement.
│ │ ├── Header
│ │ │ ├── Omnichannel
│ │ │ │ └── QuickActions
│ │ │ ├── ToolBox
│ │ │ ├── icons
│ │ ├── Room
│ │ ├── Room.
│ │ ├── UserCard
│ │ ├──
│ │ │ ├── MessageTemplate
│ │ │ ├── RoomTemplate
│ │ │ │ └──
│ │ ├──
│ │ ├── contextualBar
│ │ │ ├── AutoTranslate
│ │ │ │ ├── AutoTranslate.
│ │ │ ├── Call
│ │ │ │ ├── BBB
│ │ │ │ └── i
│ │ │ │ ├── i.
│ │ │ │ ├──
│ │ │ │ └── lib
│ │ │ ├── Discussions
│ │ │ │ ├──
│ │ │ │ │ └── Message.
│ │ │ ├── ExportMessages
│ │ │ │ ├── ExportMessages.
│ │ │ ├── Info
│ │ │ │ ├── ChannelToTeamModal
│ │ │ │ ├── EditRoomInfo
│ │ │ │ ├── RoomInfo
│ │ │ │ │ ├── RoomInfo.
│ │ │ ├──
│ │ │ ├── NotificationPreferences
│ │ │ │ ├── NotificationPreferences.
│ │ │ │ ├──
│ │ │ ├── OTR
│ │ │ │ ├── OTR.
│ │ │ ├── PruneMessages
│ │ │ │ ├── PruneMessages.
│ │ │ ├── RoomFiles
│ │ │ │ ├── RoomFiles.
│ │ │ │ ├──
│ │ │ │ │ ├── FileItem.
│ │ │ │ │ ├── FileItemIcon.
│ │ │ │ ├── hooks
│ │ │ │ └── lib
│ │ │ ├── RoomMembers
│ │ │ │ ├── AddUsers
│ │ │ │ │ ├── AddUsers.
│ │ │ │ ├── EditInvite
│ │ │ │ │ ├── EditInvite.
│ │ │ │ ├── InviteUsers
│ │ │ │ │ ├── InviteUsers.
│ │ │ │ ├── List
│ │ │ │ │ └──
│ │ │ │ ├── RoomMembers.
│ │ │ ├── Threads
│ │ │ │ ├──
│ │ │ │ │ └── Message.
│ │ │ ├── UserInfo
│ │ │ │ ├── UserInfo.
│ │ │ │ ├── actions
│ │ │ └── hooks
│ │ ├── hooks
│ │ ├── lib
│ │ │ ├── QuickActions
│ │ │ └── Toolbox
│ │ └── providers
│ ├── root
│ ├── setupWizard
│ │ ├── Pager.
│ │ ├── SetupWizardPage.
│ │ ├── SideBar.
│ │ ├── StepHeader.
│ │ └── steps
│ │ ├── AdminUserInformationStep.
│ │ ├── FinalStep.
│ │ ├── RegisterServerStep.
│ │ └── SettingsBasedStep.
│ └── teams
│ ├── CreateTeamModal
│ ├── contextualBar
│ │ ├── TeamAutocomplete
│ │ ├── channels
│ │ │ ├── AddExistingModal
│ │ │ ├── ConfirmationModal
│ │ │ ├── hooks
│ │ ├── info
│ │ │ ├── Delete
│ │ │ │ ├── DeleteTeamModal.
│ │ │ ├── Leave
│ │ │ │ ├── LeaveTeamModal.
│ │ │ ├── TeamsInfo.
│ │ └── members
│ │ ├── RemoveUsersModal
│ │ │ ├── RemoveUsersModal.
├── coverage
│ ├── app
│ │ ├── apps
│ │ │ ├── lib
│ │ │ │ └── misc
│ │ │ │ └── .html
│ │ │ └── server
│ │ │ ├── converters
│ │ │ │ └── .html
│ │ │ └──
│ │ │ ├── messages..html
│ │ │ └── mocks
│ │ │ ├── data
│ │ │ │ └── messages..html
│ │ │ └── models
│ │ │ ├── BaseModel..html
│ │ │ ├── Messages..html
│ │ │ ├── Rooms..html
│ │ │ ├── Users..html
│ │ │ └── .html
│ │ ├── custom-oauth
│ │ │ └── server
│ │ │ ├── .html
│ │ │ └── transform_helpers..html
│ │ ├── emoji
│ │ │ └── .html
│ │ ├── highlight-words
│ │ │ ├── client
│ │ │ │ ├── .html
│ │ │ └──
│ │ │ ├── helper..html
│ │ ├── lib
│ │ │ ├── server
│ │ │ │ └── lib
│ │ │ └──
│ │ ├── mailer
│ │ │ ├── server
│ │ │ └──
│ │ ├── markdown
│ │ │ ├── client
│ │ │ ├── lib
│ │ │ │ └── parser
│ │ │ │ ├── filtered
│ │ │ │ ├── marked
│ │ │ │ └── original
│ │ │ └──
│ │ ├── mentions
│ │ │ ├── lib
│ │ │ ├── server
│ │ │ └──
│ │ ├── meteor--saml
│ │ │ ├── server
│ │ │ │ └── lib
│ │ │ │ ├── generators
│ │ │ │ └── parsers
│ │ │ └──
│ │ ├── settings
│ │ │ ├── lib
│ │ │ └── server
│ │ │ ├── functions
│ │ ├── statistics
│ │ │ └── server
│ │ │ └── lib
│ │ ├── ui
│ │ │ └── client
│ │ │ └── views
│ │ │ └── app
│ │ │ └──
│ │ ├── ui-utils
│ │ │ ├── lib
│ │ │ └──
│ │ └── utils
│ │ └── lib
│ ├── client
│ │ └── lib
│ │ └── minimongo
│ ├── favicon.png
│ ├── lib
│ ├── server
│ │ └── lib
│ ├── sort-arrow-sprite.png
├── definition
[types]
├── ee
[ee] well, ee services
│ ├── app
│ │ ├── api-enterprise
│ │ │ └── server
│ │ │ └── lib
│ │ ├── auditing
│ │ │ ├── client
│ │ │ │ ├── templates
│ │ │ │ │ ├── audit
│ │ │ └── server
│ │ ├── authorization
│ │ │ ├── client
│ │ │ ├── lib
│ │ │ └── server
│ │ ├── canned-responses
│ │ │ ├── client
│ │ │ │ ├── collections
│ │ │ │ ├── startup
│ │ │ │ ├──
│ │ │ │ └── views
│ │ │ │ ├── popup
│ │ │ │ └── tabbar
│ │ │ └── server
│ │ │ ├── hooks
│ │ │ ├── methods
│ │ ├── ecdh
│ │ │ ├── client
│ │ │ └── server
│ │ ├── engagement-dashboard
│ │ │ ├── client
│ │ │ │ ├──
│ │ │ │ │ ├── ChannelsTab
│ │ │ │ │ ├── MessagesTab
│ │ │ │ │ ├── UsersTab
│ │ │ │ │ └── data
│ │ │ └── server
│ │ │ ├── api
│ │ │ │ ├── helpers
│ │ │ ├── lib
│ │ │ └── listeners
│ │ ├── ldap-enterprise
│ │ │ ├── README.md
│ │ │ └── server
│ │ │ ├── hooks
│ │ ├── license
│ │ │ ├── client
│ │ │ └── server
│ │ ├── livechat
│ │ │ ├──
│ │ │ │ └── server
│ │ │ │ └── rest
│ │ ├── livechat-enterprise
│ │ │ ├── client
│ │ │ │ ├──
│ │ │ │ │ └── modals
│ │ │ │ └── views
│ │ │ │ ├── app
│ │ │ │ │ ├── customTemplates
│ │ │ │ ├── business-hours
│ │ │ ├── lib
│ │ │ │ ├── QuickActions
│ │ │ └── server
│ │ │ ├── api
│ │ │ │ ├── lib
│ │ │ ├── business-hour
│ │ │ │ └── lib
│ │ │ ├── hooks
│ │ │ ├── lib
│ │ │ │ ├── routing
│ │ │ ├── methods
│ │ ├── models
│ │ │ └── server
│ │ │ ├── models
│ │ │ └── raw
│ │ ├── settings
│ │ │ └── server
│ │ └── teams-mention
│ │ └── server
│ ├── client
│ │ ├── .prettierrc
│ │ ├── audit
│ │ │ ├── RoomAutoComplete
│ │ │ ├── Tabs
│ │ │ ├── UserAutoCompleteMultiple
│ │ ├── hooks
│ │ └── omnichannel
│ │ ├── additionalForms
│ │ ├── cannedResponses
│ │ ├── monitors
│ │ ├── priorities
│ │ ├── tags
│ │ └──
│ └── server
│ ├── api
│ └── services
│ ├── .config
│ │ ├── grafana
│ │ │ └── provisioning
│ │ │ ├── dashboards
│ │ │ │ ├── json-
│ │ │ │ └── provider
│ │ │ └── datasources
│ │ │ └── prometheus.yml
│ │ ├── prometheus
│ │ │ └── prometheus.yml
│ │ ├── services
│ │ │ └── service.env
│ │ └── traefik
│ │ └── servers
│ ├── account
│ │ ├── lib
│ ├── authorization
│ ├── ddp-streamer
│ │ ├── lib
│ │ ├──
│ │ ├── streams
│ │ └── types
│ ├── ecdh-proxy
│ │ ├── lib
│ │ └──
│ ├── presence
│ │ ├──
│ │ ├── actions
│ │ │ ├──
│ │ │ ├──
│ │ │ ├──
│ │ │ ├──
│ │ │ └──
│ │ ├── lib
│ │ └──
│ ├── stream-hub
│ │ ├──
│ │ └──
├── example-build-run.sh
├──
[Modules] These are symlinks to node modules with the specified
│ ├── client
│ │ ├── @rocket.chat
│ │ │ └── apps-engine -> ../../../node_modules/@rocket.chat/apps-engine
│ │ ├── hepburn -> ../../node_modules/hepburn
│ │ ├── limax -> ../../node_modules/limax
│ │ ├── map-age-cleaner -> ../../node_modules/map-age-cleaner
│ │ ├── mem -> ../../node_modules/mem
│ │ ├── mimic-fn
│ │ │ └── -> ../../../node_modules/mem/node_modules/mimic-fn/
│ │ ├── p-defer -> ../../node_modules/p-defer
│ │ ├── p-is-promise -> ../../node_modules/p-is-promise
│ │ ├── pinyin -> ../../node_modules/pinyin
│ │ ├── -> ../../node_modules/
│ │ ├── query-string -> ../../node_modules/query-string/
│ │ ├── scheduler -> ../../node_modules/scheduler/
│ │ ├── sodium-native -> ../../node_modules/sodium-native
│ │ ├── sodium-plus -> ../../node_modules/sodium-plus
│ │ ├── split-on-first -> ../../node_modules/split-on-first/
│ │ └── strict-uri-encode -> ../../node_modules/strict-uri-encode/
│ ├── message-read-receipt
│ │ └── server
│ │ ├── api
│ │ │ └── methods
│ │ ├── lib
│ ├── personal-access-tokens
│ │ └── server
│ │ ├── api
│ │ │ └── methods
│ ├── startup
│ │ └── server
│ └── users-presence
│ └── server
├── install.sh
├── private
[FrontEnd]
│ ├── avatars
│ │ ├── hubot.png
│ │ ├── hubot2.png
│ │ └── rocketcat.png
│ ├── client
│ │ └──
│ │ └── general
│ │ └── -> ../../../../app/theme/client//general/
│ ├── errors
│ ├── livechat
│ ├── moment-locales
│ ├──
│ │ └── unsubscribe_csv
│ └── server
│ └── asset
│ ├── chatpal-enter.svg
│ └── chatpal-logo-icon-darkblue.svg
├── publish_packages.sh
├── on
├── server
The main point of the server side application. Here relies almost all server code (the reest being on /app)
│ ├── configuration
[settings] account meld settings
│ ├── cron
[utils] cron job scheduler for RC
│ ├── database
[customizations] customizations to mongodb connection
│ ├── email
[utils] interceptor for IMAP
│ ├── features
[unknown]
│ │ └── EmailInbox
│ ├── lib
[utils]
│ ├── methods
[methods] all methods should be placed here
│ ├── modules
[important] this can be a `core` service by its own. It's weird to have packages, modules, services & deps all in one project
│ │ ├── core-apps
│ │ │ ├── nps
│ │ ├── listeners
│ │ ├── notifications
│ │ ├── streamer
│ │ └── watchers
│ ├── publications
[methods] meteor methods with distinct nomenclature
│ │ ├── room
│ │ ├── settings
│ │ └── subscription
│ ├── restapi
│ │ └── README.md
│ ├── routes
[api] routes for . why are these from the api? (apart from the base url change, it think these could live in the same folder)
│ │ └── avatar
│ │ ├── middlewares
│ ├── sdk
[types]
│ │ ├── lib
│ │ └── types
│ ├── services
[important] the services folder is the place where all the services should live. Currently, it has a few of the most critical services in the app
There's no standard as how these should be written, but the convention is to create a `service` file as the entry point, and have auxiliary files for functionality
The type definitions come from the sdk
│ │ ├── authorization
│ │ ├── banner
│ │ ├── image
│ │ ├── meteor
│ │ ├── nps
│ │ ├── room
│ │ ├── team
│ │ └── uikit-core-app
│ ├── startup
[startup] the place where all code that runs at server start should live (unless is provided dynamically by a service)
│ │ ├── migrations
[Migrations] This folder contains the migrations for the database. Each migration has a number as identification
│ └── stream
[utils] the streambroadcast functionality
├──
[Tests] test folder. are currently organized by:
1. FE / BE
2. end2end / unit
3. api/livechat/apps
4. a file with the name of the functionality tested on the
│ ├── .eslintrc
│ ├── cypress
│ │ ├── fixtures
│ │ ├── integration
│ │ ├──
│ │ ├── plugins
│ │ └── support
│ ├── data
│ │ ├── api-
│ │ ├── apps
│ │ ├── livechat
│ └── end-to-end
│ ├── api
│ │ └── livechat
│ ├── apps
├── on
└── typings.
1177 directories, 4440 files
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment