feat(ombi): Add Ombi PALDRA integration for request management
Docs Check / Markdown lint (push) Successful in 1m43s
Licence Check / Licence compatibility and copyright header verification (push) Successful in 2m1s
CI / Security audit (push) Successful in 2m48s
Docs Check / Mermaid diagram parse check (push) Successful in 3m8s
CI / Tests & coverage (push) Failing after 3m33s
CI / Swagger Validation & Coverage (push) Successful in 3m34s
Build and Push Docker Image / build (push) Successful in 4m36s
Docs Check / Markdown lint (push) Successful in 1m43s
Licence Check / Licence compatibility and copyright header verification (push) Successful in 2m1s
CI / Security audit (push) Successful in 2m48s
Docs Check / Mermaid diagram parse check (push) Successful in 3m8s
CI / Tests & coverage (push) Failing after 3m33s
CI / Swagger Validation & Coverage (push) Successful in 3m34s
Build and Push Docker Image / build (push) Successful in 4m36s
- Add OmbiRetriever extending ArrRetriever for PALDRA compliance - Add OmbiClient for low-level Ombi API communication - Add getOmbiInstances() to config.js following multi-instance pattern - Register Ombi in PALDRA registry with Ombi-specific methods - Add external ID matching (TMDB/TVDB/IMDB) to Ombi requests - Update DownloadMatcher to be async and enrich downloads with Ombi links - Add getOmbiLink/getOmbiSearchLink helpers to DownloadAssembler - Implement new service icon layout (Ombi + Sonarr/Radarr icons) - Add CSS styling for service icons - Update dashboard routes to include Ombi configuration - Extend OpenAPI with Ombi tag and NormalizedDownload properties - Update documentation (README, ARCHITECTURE, SECURITY, CHANGELOG) - Add Ombi configuration to .env.sample
This commit is contained in:
+18
-3
@@ -265,10 +265,15 @@ The rest of the application (poller, dashboard) receives data in the same format
|
||||
|
||||
#### Overview
|
||||
|
||||
`server/utils/arrRetrievers.js` exports `arrRetrieverRegistry`, a singleton that manages one `PollingSonarrRetriever` or `PollingRadarrRetriever` per configured instance. It provides a uniform interface for fetching queue, history, and tag data, keyed by service type.
|
||||
`server/utils/arrRetrievers.js` exports `arrRetrieverRegistry`, a singleton that manages one `PollingSonarrRetriever`, `PollingRadarrRetriever`, or `OmbiRetriever` per configured instance. It provides a uniform interface for fetching queue, history, and tag data, keyed by service type.
|
||||
|
||||
The registry is used by both the background poller and the webhook processor, guaranteeing consistent data shapes across both update paths.
|
||||
|
||||
**Supported Retrievers:**
|
||||
- **PollingSonarrRetriever**: TV series data from Sonarr instances
|
||||
- **PollingRadarrRetriever**: Movie data from Radarr instances
|
||||
- **OmbiRetriever**: Request management data from Ombi instances
|
||||
|
||||
#### Error handling
|
||||
|
||||
Retriever methods now throw on HTTP failure rather than swallowing errors silently. This ensures the poller logs upstream problems and skips the affected instance cleanly instead of caching stale empty data.
|
||||
@@ -280,12 +285,18 @@ arrRetrieverRegistry = {
|
||||
async initialize() // idempotent; reads config once
|
||||
getAllRetrievers(): ArrRetriever[]
|
||||
getRetriever(instanceId): ArrRetriever | null
|
||||
getRetrieversByType(type): ArrRetriever[] // 'sonarr' | 'radarr'
|
||||
getRetrieversByType(type): ArrRetriever[] // 'sonarr' | 'radarr' | 'ombi'
|
||||
|
||||
// Typed fetch methods — all return { sonarr: [...], radarr: [...] }
|
||||
async getQueuesByType(): Promise<{ sonarr, radarr }>
|
||||
async getHistoryByType(options?): Promise<{ sonarr, radarr }>
|
||||
async getTagsByType(): Promise<{ sonarr, radarr }>
|
||||
|
||||
// Ombi-specific methods
|
||||
getOmbiRetrievers(): OmbiRetriever[]
|
||||
async getOmbiRequests(): Promise<{ movie: [], tv: [] }>
|
||||
async getOmbiRequestsByType(): Promise<{ movie: [], tv: [] }>
|
||||
async findOmbiRequest(type, externalIds): Promise<Object | null>
|
||||
}
|
||||
```
|
||||
|
||||
@@ -910,7 +921,10 @@ sofarr/
|
||||
│ │ ├── TransmissionClient.js
|
||||
│ │ ├── RTorrentClient.js
|
||||
│ │ ├── PollingSonarrRetriever.js PALDRA — Sonarr retriever
|
||||
│ │ └── PollingRadarrRetriever.js PALDRA — Radarr retriever
|
||||
│ │ ├── PollingRadarrRetriever.js PALDRA — Radarr retriever
|
||||
│ │ ├── ArrRetriever.js PALDRA — Abstract base class for *arr retrievers
|
||||
│ │ ├── OmbiClient.js Low-level Ombi API client
|
||||
│ │ └── OmbiRetriever.js PALDRA — Ombi retriever with caching
|
||||
│ ├── routes/
|
||||
│ │ ├── auth.js POST /login, GET /me, GET /csrf, POST /logout
|
||||
│ │ ├── dashboard.js SSE /stream, /user-downloads, /blocklist-search
|
||||
@@ -1115,6 +1129,7 @@ Each instance receives an `id` derived from `name` (or index if unnamed), used a
|
||||
| Frontend | Vanilla JS + CSS | SPA; Vite bundles ES modules from `client/src/` into `public/app.js` |
|
||||
| Containerisation | Docker multi-stage (node:22-alpine) | Non-root `node` user; minimal image |
|
||||
| Logging | Custom logger + `console.*` redirection | File + stdout with configurable levels |
|
||||
| Request Management | Ombi (optional) | External ID matching and request linking |
|
||||
|
||||
### Security Middleware
|
||||
|
||||
|
||||
Reference in New Issue
Block a user