RocketChat/Rocket.Chat · error · Error
error-invalid-provider
error-invalid-provider
Error message
error-invalid-provider
What it means
getProviderMetadata(providerId) resolves the registration via OutboundMessageProvider.findOneByProviderId; when nothing is registered under that id it throws 'error-invalid-provider'. Providers are registered by apps, so uninstalling or disabling the owning app removes the registration and orphans stored ids.
Solutions
- Reinstall or re-enable the app that owns the provider so it re-registers
- List current providers with listOutboundProviders() and use a live providerId
- Drop stored references whenever app uninstall/disable events fire
Defensive patterns
Strategy: validation
Validate before calling
const provider = await outboundMessageProvider.outboundMessageProvider.findOneByProviderId(providerId);
if (!provider) {
throw new Error(`no outbound provider '${providerId}' - reinstall the owning app or pick a live id`);
}
await outboundMessageProvider.getProviderMetadata(providerId); Try / catch
try {
return await outboundMessageProvider.getProviderMetadata(providerId);
} catch (error) {
if (error instanceof Error && error.message === 'error-invalid-provider') {
const live = outboundMessageProvider.listOutboundProviders();
throw new NotFoundError(`provider '${providerId}' not registered; available: ${live.map((p) => p._id).join(', ')}`);
}
throw error;
} Prevention
- Resolve provider ids dynamically via listOutboundProviders, not from stale config
- Invalidate stored provider ids when apps are uninstalled or disabled
- After app reinstall, verify the provider re-registered before use
When it happens
Trigger: Metadata request for a providerId that is stale (owning app uninstalled/disabled), typo'd, or requested before the app finished registering its outbound provider.
Common situations: Persisted provider ids in integration config surviving an app uninstall; reinstalling an app without re-registering; ids copied between environments.
Understand the failure class
Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — this error's family across 20 libraries.
Related errors
- apps-engine-not-configured-correctly
- apps-engine-not-loaded
- error-no-license
- A video conference must exist to update.
- department-not-found
AI-assisted analysis of RocketChat/Rocket.Chat@b2c16d5842 (2026-08-18).
Data as JSON: /api/errors/e597d49391734bde.
Report an issue: GitHub.
Appendix: source
Thrown at apps/meteor/ee/server/api/v1/omnichannel/lib/outbound.ts:40
return this.provider;
}
private isProviderValid(type: any): type is ValidOutboundProvider {
return ValidOutboundProviderList.includes(type);
}
public listOutboundProviders(type?: string): IOutboundProvider[] {
if (type !== undefined && !this.isProviderValid(type)) {
throw new Error('Invalid type');
}
return this.provider.getOutboundMessageProviders(type);
}
public getProviderMetadata(providerId: string): Promise<IOutboundProviderMetadata> {
const provider = this.provider.findOneByProviderId(providerId);
if (!provider) {
throw new Error('error-invalid-provider');
}
return this.getProviderManager().getProviderMetadata(provider.appId, provider.type);
}
private getProviderManager() {
if (!Apps.self?.isLoaded()) {
throw new Error('apps-engine-not-loaded');
}
const manager = Apps.self?.getManager()?.getOutboundCommunicationProviderManager();
if (!manager) {
throw new Error('apps-engine-not-configured-correctly');
}
return manager;
}
View on GitHub (pinned to b2c16d5842)