Skip to content

Configuration

This page covers all configuration options available for the Oops Widget.

The createOopsWidget function accepts a configuration object with the following options:

OptionTypeDefaultDescription
statusUrlstringrequiredURL endpoint for polling system status
alertComponentCustomElementConstructorrequiredWeb Component class for rendering alerts
i18nProviderI18nProviderrequiredProvider for localized status messages
placement'top-left' | 'top-right' | 'bottom-left' | 'bottom-right''bottom-right'Screen placement of the alert
interceptorsInterceptor[][]Array of request interceptors
mobileobject{ enabled: false }Mobile-specific configuration
logLevelLogLevelLogLevel.NONELogging verbosity
alertClosureBehaviorobjectCustom timing for alert close and status check intervals
displayIncidentDetailsbooleanfalseWhether to display incident details in alerts
useSandboxedFetchbooleantrueUse sandboxed fetch to avoid interceptor conflicts
import { createOopsWidget, LogLevel } from '@upreport/oops-widget';
import { StatusAlert } from '@upreport/oops-widget/statusAlert';
import { createAutoDetectI18nProvider } from '@upreport/oops-widget/i18n';
const widget = createOopsWidget({
statusUrl: 'YOUR_STATUS_URL_FROM_CONSOLE',
alertComponent: StatusAlert,
i18nProvider: createAutoDetectI18nProvider(),
placement: 'bottom-right',
logLevel: LogLevel.DEBUG,
displayIncidentDetails: true,
});

Interceptors monitor HTTP requests and can trigger alerts for errors or slow responses. Two interceptors are available:

  • FetchInterceptor — Monitors fetch() API calls
  • XHRInterceptor — Monitors XMLHttpRequest calls
OptionTypeDefaultDescription
timeoutMsnumber30000Milliseconds before a request is considered slow
showSlowRequestAlertsbooleantrueShow alerts for slow requests
showErrorAlertsbooleantrueShow alerts for non-2xx HTTP responses
monitoredServicePatternsstring[][]URL patterns to monitor
monitoredServiceOptionsobject{}Options for pattern matching
OptionTypeDefaultDescription
requireExplicitPatternsbooleanfalseOnly monitor URLs matching explicit patterns
includeCurrentOriginbooleantrueInclude same-origin requests when no patterns specified
treatRelativeAsInternalbooleantrueTreat relative URLs as internal (same-origin)
import { FetchInterceptor } from '@upreport/oops-widget/fetchInterceptor';
import { XHRInterceptor } from '@upreport/oops-widget/xhrInterceptor';
const interceptorConfig = {
timeoutMs: 20000,
showSlowRequestAlerts: true,
showErrorAlerts: true,
monitoredServicePatterns: ['/api/*', 'api.example.com'],
monitoredServiceOptions: {
requireExplicitPatterns: true,
includeCurrentOrigin: true,
treatRelativeAsInternal: true,
},
};
const widget = createOopsWidget({
// ... other options
interceptors: [
new FetchInterceptor(interceptorConfig),
new XHRInterceptor(interceptorConfig),
],
});

The widget supports 18 languages out of the box. You can use automatic language detection or provide static translations.

Automatically detects the user’s browser language:

import { createAutoDetectI18nProvider } from '@upreport/oops-widget/i18n';
const widget = createOopsWidget({
// ... other options
i18nProvider: createAutoDetectI18nProvider(),
});

Arabic (ar), Czech (cs), German (de), English (en), Spanish (es), French (fr), Hindi (hi), Italian (it), Japanese (ja), Korean (ko), Norwegian Bokmål (nb), Dutch (nl), Polish (pl), Portuguese (pt), Swedish (sv), Turkish (tr), Ukrainian (uk), Chinese (zh)

Provide custom translations for specific locales:

import { createStaticI18nProvider } from '@upreport/oops-widget/i18n';
const widget = createOopsWidget({
// ... other options
i18nProvider: createStaticI18nProvider({
en: {
title: 'System Status',
message: 'We are experiencing issues.',
},
es: {
title: 'Estado del Sistema',
message: 'Estamos experimentando problemas.',
},
}),
});

Configure how the widget behaves on mobile devices:

OptionTypeDefaultDescription
enabledbooleanfalseEnable mobile-specific behavior
placement'top' | 'bottom'Alert placement on mobile
mediaQuerystringCustom media query for mobile detection
const widget = createOopsWidget({
// ... other options
placement: 'bottom-right', // Desktop placement
mobile: {
enabled: true,
placement: 'top', // Mobile placement
},
});

Customize how long alerts stay visible and how often status is rechecked after an alert is closed:

import { SystemStatus } from '@upreport/oops-widget';
const widget = createOopsWidget({
// ... other options
alertClosureBehavior: {
[SystemStatus.DegradedPerformance]: {
closeDurationMs: 40000, // Alert stays closed for 40 seconds
checkIntervalMs: 10000, // Recheck status every 10 seconds
},
[SystemStatus.MajorOutage]: {
closeDurationMs: 60000,
checkIntervalMs: 15000,
},
},
});

Control the verbosity of console logging:

import { LogLevel } from '@upreport/oops-widget';
const widget = createOopsWidget({
// ... other options
logLevel: LogLevel.DEBUG, // DEBUG | INFO | WARN | ERROR | NONE
});
LevelDescription
DEBUGAll messages including detailed debugging info
INFOInformational messages and above
WARNWarnings and errors only
ERRORErrors only
NONENo logging (default)