{"record":{"id":"5e385b4c4663b045","repo":"RocketChat/Rocket.Chat","slug":"error-essential-app-disabled","errorCode":"error-essential-app-disabled","errorMessage":"error-essential-app-disabled","messagePattern":"error-essential-app-disabled","errorType":"error_code","errorClass":"Meteor.Error","httpStatus":null,"severity":"error","filePath":"apps/meteor/ee/server/apps/orchestrator.ts","lineNumber":439,"sourceCode":"\tasync installedApps(filter: IGetAppsFilter = {}): Promise<ProxiedApp[] | undefined> {\n\t\tif (!this.isLoaded()) {\n\t\t\treturn;\n\t\t}\n\n\t\treturn this._manager.get(filter);\n\t}\n\n\tasync triggerEvent(event: AppEvents, ...payload: any[]): Promise<any> {\n\t\tif (!this.isLoaded()) {\n\t\t\treturn;\n\t\t}\n\n\t\treturn this._bridges\n\t\t\t.getListenerBridge()\n\t\t\t.handleEvent({ event, payload } as HandleEvent)\n\t\t\t.catch((error: unknown) => {\n\t\t\t\tif (error instanceof EssentialAppDisabledException) {\n\t\t\t\t\tthrow new Meteor.Error('error-essential-app-disabled');\n\t\t\t\t}\n\n\t\t\t\tthrow error;\n\t\t\t});\n\t}\n}\n\nexport const Apps = new AppServerOrchestrator();\nregisterOrchestrator(Apps);\n","sourceCodeStart":421,"sourceCodeEnd":449,"githubUrl":"https://github.com/RocketChat/Rocket.Chat/blob/f9d3ec372bb580fa8d036f94cf03925a478ef768/apps/meteor/ee/server/apps/orchestrator.ts#L421-L449","documentation":"Thrown by the App server orchestrator's `triggerEvent` when an app's event listener rejects with `EssentialAppDisabledException`. It re-wraps that exception as a `Meteor.Error('error-essential-app-disabled')` so the Meteor method/publish layer can surface a stable, translatable error code to the client. It indicates an app marked 'essential' has been disabled (typically by license invalidation or admin action) and therefore the event could not be processed.","triggerScenarios":"Any `Apps.triggerEvent(...)` call where a registered listener throws `EssentialAppDisabledException` — i.e. an essential app's bridge handler detected the app is disabled while processing a live event (e.g. message send, room create). The orchestrator must be loaded (`isLoaded()` true) for the handler to even run.","commonSituations":"An enterprise/essential app's license module was removed or invalidated mid-session; an admin disabled an app flagged essential; license downgrade removed a required module that the essential app depends on.","solutions":["Re-enable the essential app in Administration > Apps and confirm it is in a loaded/running state.","Check the license is valid and includes the module the essential app requires (`License.hasModule(...)`).","Restart the Apps subsystem after re-enabling so `isLoaded()` reflects the new state.","If intentional, communicate the disabled-app state to end users so they understand dependent features are unavailable."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":"import { Apps } from '../orchestrator';\n\nfunction essentialAppsReady(): boolean {\n\treturn Apps.isLoaded();\n}","typeGuard":"function isEssentialAppDisabledError(e: unknown): boolean {\n\treturn e instanceof Meteor.Error && (e as Meteor.Error).error === 'error-essential-app-disabled';\n}","tryCatchPattern":"try {\n\tawait Apps.triggerEvent(AppEvents.MESSAGE_SENT, message);\n} catch (e) {\n\tif (e instanceof Meteor.Error && e.error === 'error-essential-app-disabled') {\n\t\t// notify user the feature is unavailable; do not retry blindly\n\t}\n\tthrow e;\n}","preventionTips":["Ensure essential apps and their license modules are active before relying on their events.","Surface a clear user-facing message when an essential feature is unavailable.","Alert admins when an essential app transitions to disabled."],"tags":["apps-engine","license","ee","meteor-error"],"backgroundTag":null,"analyzedSha":"f9d3ec372bb580fa8d036f94cf03925a478ef768","analyzedAt":"2026-08-12T19:07:17.372Z","schemaVersion":2},"datasetVersion":"2026-08-12T23:17:12.415Z"}