RocketChat/Rocket.Chat · error
Method not implemented.
Error message
Method not implemented.
What it means
hideGroup on the AppSettingBridge is a stub: Rocket.Chat logs the call and unconditionally throws 'Method not implemented.'. The apps-engine API surface exposes the operation, but the server never implemented hiding a settings group on behalf of an app, so every call fails regardless of arguments.
Solutions
- Remove the hideGroup call: the operation is unsupported server-side; control section visibility in the app's own settings declaration instead.
- If the capability is required, track/file the upstream feature request against the apps-engine bridge.
- For 'hide my own settings after setup', store a configured flag in app storage and stop rendering the section in your UI logic instead of hiding it.
Defensive patterns
Strategy: try-catch
Try / catch
If the call sits on a shared path, catch 'Method not implemented.' and continue — it is deterministic and has no recoverable state.
Prevention
- Audit apps for hide-group calls before shipping; they always fail on Rocket.Chat.
- Watch apps-engine release notes for the bridge becoming implemented.
When it happens
Trigger: App calls the settings modification API to hide a settings group by name (hideGroup). Always throws; no argument makes it succeed.
Common situations: Apps copied from samples or older code that call hide APIs; apps wanting to hide their own settings group after initial setup.
Understand the failure class
Background: UnsupportedOperationException and "is not supported" errors: when a library deliberately refuses a call — this error's family across 30 libraries.
Related errors
- Creating normal users is currently not supported
- failed to notify about the setting change.
- Not implemented.
- The setting " " is not readable.
- The setting " " is not readable.
AI-assisted analysis of RocketChat/Rocket.Chat@b2c16d5842 (2026-08-18).
Data as JSON: /api/errors/05d88371d33abf2f.
Report an issue: GitHub.
Appendix: source
Thrown at apps/meteor/app/apps/server/bridges/settings.ts:36
const settings = await Settings.find({ secret: false }).toArray();
return settings.map((s) => this.orch.getConverters()?.get('settings').convertToApp(s));
}
protected async getOneById(id: string, appId: string): Promise<ISetting> {
this.orch.debugLog(`The App ${appId} is getting the setting by id ${id}.`);
const setting = await this.getReadableSettingById(id, appId);
if (!setting) {
throw new Error(`The setting "${id}" is not readable.`);
}
return setting;
}
protected async hideGroup(name: string, appId: string): Promise<void> {
this.orch.debugLog(`The App ${appId} is hidding the group ${name}.`);
throw new Error('Method not implemented.');
}
protected async hideSetting(id: string, appId: string): Promise<void> {
this.orch.debugLog(`The App ${appId} is hidding the setting ${id}.`);
if (!(await this.isReadableById(id, appId))) {
throw new Error(`The setting "${id}" is not readable.`);
}
throw new Error('Method not implemented.');
}
protected async isReadableById(id: string, appId: string): Promise<boolean> {
this.orch.debugLog(`The App ${appId} is checking if they can read the setting ${id}.`);
const setting = await Settings.findOneById(id);
return Boolean(setting && !setting.secret);
}
View on GitHub (pinned to b2c16d5842)