RocketChat/Rocket.Chat · error · Meteor.Error
error-invalid-user
error-invalid-user
Error message
Invalid user
What it means
Thrown by 'autoTranslate.getSupportedLanguages' when there is no authenticated user. The method resolves the caller's translation provider via getSupportedLanguages(userId, targetLanguage), so a session is required. Note the thrown error's details use method: 'getSupportedLanguages' (without the autoTranslate. prefix) — a metadata mismatch to be aware of when matching on details.method.
Source
Thrown at apps/meteor/server/meteor-methods/platform/getSupportedLanguages.ts:20
import type { ServerMethods } from '@rocket.chat/ddp-client';
import { DDPRateLimiter } from 'meteor/ddp-rate-limiter';
import { Meteor } from 'meteor/meteor';
import { getSupportedLanguages } from '../../lib/autotranslate/functions/getSupportedLanguages';
declare module '@rocket.chat/ddp-client' {
// eslint-disable-next-line @typescript-eslint/naming-convention
interface ServerMethods {
'autoTranslate.getSupportedLanguages'(targetLanguage: string): ISupportedLanguage[] | undefined;
}
}
Meteor.methods<ServerMethods>({
async 'autoTranslate.getSupportedLanguages'(targetLanguage) {
const userId = Meteor.userId();
if (!userId) {
throw new Meteor.Error('error-invalid-user', 'Invalid user', {
method: 'getSupportedLanguages',
});
}
return getSupportedLanguages(userId, targetLanguage);
},
});
DDPRateLimiter.addRule(
{
type: 'method',
name: 'autoTranslate.getSupportedLanguages',
userId(/* userId*/) {
return true;
},
},
5,
60000,View on GitHub (pinned to b2c16d5842)
Solutions
- Ensure a session exists before requesting supported languages
- Guard with Meteor.userId() and defer the call until login completes
- When inspecting error details, expect method 'getSupportedLanguages' rather than the full method name
- Prefer a REST equivalent for new integrations
Example fix
// before
const langs = await Meteor.callAsync('autoTranslate.getSupportedLanguages', targetLanguage);
// after
if (!Meteor.userId()) {
// language list depends on the user's translation provider; wait for login
return [];
}
const langs = await Meteor.callAsync('autoTranslate.getSupportedLanguages', targetLanguage); Defensive patterns
Strategy: validation
Validate before calling
// client: supported languages depend on the logged-in user's provider
if (!Meteor.userId()) {
// return a safe default instead of calling
} Type guard
import { Meteor } from 'meteor/meteor';
const isMeteorError = (err: unknown, code?: string): err is Meteor.Error =>
err instanceof Meteor.Error && (code === undefined || err.error === code); Try / catch
try {
const langs = await Meteor.callAsync('autoTranslate.getSupportedLanguages', targetLanguage);
} catch (err) {
if (isMeteorError(err, 'error-invalid-user')) {
// wait for login, then refetch
} else {
throw err;
}
} Prevention
- Defer language-list fetches until the session is established
- Do not match on details.method for this error — the payload says 'getSupportedLanguages', not the full method name
When it happens
Trigger: Requesting supported translation languages from a logged-out client; the translation settings UI loads before login resolves; session expiry while the language picker fetches options.
Common situations: Language pickers rendered pre-login; expired sessions in long-open tabs; consumers matching on the error payload's method field hitting the name mismatch.
Related errors
AI-assisted analysis of RocketChat/Rocket.Chat@b2c16d5842 (2026-08-18).
Data as JSON: /api/errors/71c2aa0a6509abb6.
Report an issue: GitHub.