feat(servarr-api): make Servarr API request timeout configurable (#2556)

This commit is contained in:
fallenbagel
2026-02-23 04:32:31 +05:00
committed by GitHub
parent 5013d1d54d
commit 3bcb4da1e5
6 changed files with 50 additions and 23 deletions

View File

@@ -56,6 +56,10 @@ const messages = defineMessages('components.Settings.SettingsNetwork', {
'Do NOT enable this if you are experiencing issues with DNS lookups',
dnsCacheForceMinTtl: 'DNS Cache Minimum TTL',
dnsCacheForceMaxTtl: 'DNS Cache Maximum TTL',
apiRequestTimeout: 'API Request Timeout',
apiRequestTimeoutTip:
'Maximum time (in seconds) to wait for responses from external services like Radarr/Sonarr. Set to 0 for no timeout.',
validationApiRequestTimeout: 'You must provide a valid timeout value',
});
const SettingsNetwork = () => {
@@ -91,6 +95,10 @@ const SettingsNetwork = () => {
.max(65535, intl.formatMessage(messages.validationProxyPort))
.required(intl.formatMessage(messages.validationProxyPort)),
}),
apiRequestTimeout: Yup.number()
.typeError(intl.formatMessage(messages.validationApiRequestTimeout))
.required(intl.formatMessage(messages.validationApiRequestTimeout))
.min(0, intl.formatMessage(messages.validationApiRequestTimeout)),
});
if (!data && !error) {
@@ -130,6 +138,10 @@ const SettingsNetwork = () => {
proxyPassword: data?.proxy?.password,
proxyBypassFilter: data?.proxy?.bypassFilter,
proxyBypassLocalAddresses: data?.proxy?.bypassLocalAddresses,
apiRequestTimeout:
data?.apiRequestTimeout !== undefined
? data.apiRequestTimeout / 1000
: 10,
}}
enableReinitialize
validationSchema={NetworkSettingsSchema}
@@ -154,6 +166,7 @@ const SettingsNetwork = () => {
bypassFilter: values.proxyBypassFilter,
bypassLocalAddresses: values.proxyBypassLocalAddresses,
},
apiRequestTimeout: Number(values.apiRequestTimeout) * 1000,
});
mutate('/api/v1/settings/public');
mutate('/api/v1/status');
@@ -341,6 +354,31 @@ const SettingsNetwork = () => {
</div>
</>
)}
<div className="form-row">
<label htmlFor="apiRequestTimeout" className="text-label">
<span className="mr-2">
{intl.formatMessage(messages.apiRequestTimeout)}
</span>
<SettingsBadge badgeType="restartRequired" />
<span className="label-tip">
{intl.formatMessage(messages.apiRequestTimeoutTip)}
</span>
</label>
<div className="form-input-area">
<Field
id="apiRequestTimeout"
name="apiRequestTimeout"
type="text"
inputMode="numeric"
className="short"
/>
</div>
{errors.apiRequestTimeout &&
touched.apiRequestTimeout &&
typeof errors.apiRequestTimeout === 'string' && (
<div className="error">{errors.apiRequestTimeout}</div>
)}
</div>
<div className="form-row">
<label htmlFor="proxyEnabled" className="checkbox-label">
<span className="mr-2">

View File

@@ -997,6 +997,8 @@
"components.Settings.SettingsMain.validationUrlTrailingSlash": "URL must not end in a trailing slash",
"components.Settings.SettingsMain.youtubeUrl": "YouTube URL",
"components.Settings.SettingsMain.youtubeUrlTip": "Base URL for YouTube videos if a self-hosted YouTube instance is used.",
"components.Settings.SettingsNetwork.apiRequestTimeout": "API Request Timeout",
"components.Settings.SettingsNetwork.apiRequestTimeoutTip": "Maximum time (in seconds) to wait for responses from external services like Radarr/Sonarr. Set to 0 for no timeout.",
"components.Settings.SettingsNetwork.csrfProtection": "Enable CSRF Protection",
"components.Settings.SettingsNetwork.csrfProtectionHoverTip": "Do NOT enable this setting unless you understand what you are doing!",
"components.Settings.SettingsNetwork.csrfProtectionTip": "Set external API access to read-only (requires HTTPS)",
@@ -1026,6 +1028,7 @@
"components.Settings.SettingsNetwork.toastSettingsSuccess": "Settings saved successfully!",
"components.Settings.SettingsNetwork.trustProxy": "Enable Proxy Support",
"components.Settings.SettingsNetwork.trustProxyTip": "Allow Seerr to correctly register client IP addresses behind a proxy",
"components.Settings.SettingsNetwork.validationApiRequestTimeout": "You must provide a valid timeout value",
"components.Settings.SettingsNetwork.validationDnsCacheMaxTtl": "You must provide a valid maximum TTL",
"components.Settings.SettingsNetwork.validationDnsCacheMinTtl": "You must provide a valid minimum TTL",
"components.Settings.SettingsNetwork.validationProxyPort": "You must provide a valid port",