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

  1. Remove the hideGroup call: the operation is unsupported server-side; control section visibility in the app's own settings declaration instead.
  2. If the capability is required, track/file the upstream feature request against the apps-engine bridge.
  3. 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

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


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)