mcp-arr-suite 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +198 -0
- package/dist/clients/arr-client.d.ts +681 -0
- package/dist/clients/arr-client.d.ts.map +1 -0
- package/dist/clients/arr-client.js +367 -0
- package/dist/clients/arr-client.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +93 -0
- package/dist/index.js.map +1 -0
- package/dist/registry.d.ts +16 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +32 -0
- package/dist/registry.js.map +1 -0
- package/dist/services/cross-service.d.ts +8 -0
- package/dist/services/cross-service.d.ts.map +1 -0
- package/dist/services/cross-service.js +113 -0
- package/dist/services/cross-service.js.map +1 -0
- package/dist/services/lidarr.d.ts +6 -0
- package/dist/services/lidarr.d.ts.map +1 -0
- package/dist/services/lidarr.js +263 -0
- package/dist/services/lidarr.js.map +1 -0
- package/dist/services/prowlarr.d.ts +10 -0
- package/dist/services/prowlarr.d.ts.map +1 -0
- package/dist/services/prowlarr.js +140 -0
- package/dist/services/prowlarr.js.map +1 -0
- package/dist/services/radarr.d.ts +9 -0
- package/dist/services/radarr.d.ts.map +1 -0
- package/dist/services/radarr.js +574 -0
- package/dist/services/radarr.js.map +1 -0
- package/dist/services/sonarr.d.ts +9 -0
- package/dist/services/sonarr.d.ts.map +1 -0
- package/dist/services/sonarr.js +696 -0
- package/dist/services/sonarr.js.map +1 -0
- package/dist/shared/config-tools.d.ts +15 -0
- package/dist/shared/config-tools.d.ts.map +1 -0
- package/dist/shared/config-tools.js +225 -0
- package/dist/shared/config-tools.js.map +1 -0
- package/dist/shared/formatting.d.ts +37 -0
- package/dist/shared/formatting.d.ts.map +1 -0
- package/dist/shared/formatting.js +57 -0
- package/dist/shared/formatting.js.map +1 -0
- package/dist/trash/client.d.ts +127 -0
- package/dist/trash/client.d.ts.map +1 -0
- package/dist/trash/client.js +289 -0
- package/dist/trash/client.js.map +1 -0
- package/dist/trash/tools.d.ts +13 -0
- package/dist/trash/tools.d.ts.map +1 -0
- package/dist/trash/tools.js +377 -0
- package/dist/trash/tools.js.map +1 -0
- package/dist/types.d.ts +33 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +15 -0
- package/dist/types.js.map +1 -0
- package/package.json +53 -0
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TRaSH Guides Client
|
|
3
|
+
*
|
|
4
|
+
* Fetches and caches quality profiles, custom formats, and naming conventions
|
|
5
|
+
* from the TRaSH Guides GitHub repository.
|
|
6
|
+
*
|
|
7
|
+
* Data source: https://github.com/TRaSH-Guides/Guides
|
|
8
|
+
*/
|
|
9
|
+
const TRASH_BASE_URL = 'https://raw.githubusercontent.com/TRaSH-Guides/Guides/master/docs/json';
|
|
10
|
+
const GITHUB_API_URL = 'https://api.github.com/repos/TRaSH-Guides/Guides/contents/docs/json';
|
|
11
|
+
const CACHE_TTL = 60 * 60 * 1000; // 1 hour
|
|
12
|
+
class TrashCache {
|
|
13
|
+
profiles = new Map();
|
|
14
|
+
profileLists = new Map();
|
|
15
|
+
customFormats = new Map();
|
|
16
|
+
cfLists = new Map();
|
|
17
|
+
cfGroups = new Map();
|
|
18
|
+
qualitySizes = new Map();
|
|
19
|
+
naming = new Map();
|
|
20
|
+
isValid(entry) {
|
|
21
|
+
return entry !== undefined && (Date.now() - entry.timestamp) < CACHE_TTL;
|
|
22
|
+
}
|
|
23
|
+
setProfile(key, data) {
|
|
24
|
+
this.profiles.set(key, { data, timestamp: Date.now() });
|
|
25
|
+
}
|
|
26
|
+
getProfile(key) {
|
|
27
|
+
const entry = this.profiles.get(key);
|
|
28
|
+
return this.isValid(entry) ? entry.data : null;
|
|
29
|
+
}
|
|
30
|
+
setProfileList(service, data) {
|
|
31
|
+
this.profileLists.set(service, { data, timestamp: Date.now() });
|
|
32
|
+
}
|
|
33
|
+
getProfileList(service) {
|
|
34
|
+
const entry = this.profileLists.get(service);
|
|
35
|
+
return this.isValid(entry) ? entry.data : null;
|
|
36
|
+
}
|
|
37
|
+
setCustomFormat(key, data) {
|
|
38
|
+
this.customFormats.set(key, { data, timestamp: Date.now() });
|
|
39
|
+
}
|
|
40
|
+
getCustomFormat(key) {
|
|
41
|
+
const entry = this.customFormats.get(key);
|
|
42
|
+
return this.isValid(entry) ? entry.data : null;
|
|
43
|
+
}
|
|
44
|
+
setCFList(service, data) {
|
|
45
|
+
this.cfLists.set(service, { data, timestamp: Date.now() });
|
|
46
|
+
}
|
|
47
|
+
getCFList(service) {
|
|
48
|
+
const entry = this.cfLists.get(service);
|
|
49
|
+
return this.isValid(entry) ? entry.data : null;
|
|
50
|
+
}
|
|
51
|
+
setCFGroup(key, data) {
|
|
52
|
+
this.cfGroups.set(key, { data, timestamp: Date.now() });
|
|
53
|
+
}
|
|
54
|
+
getCFGroup(key) {
|
|
55
|
+
const entry = this.cfGroups.get(key);
|
|
56
|
+
return this.isValid(entry) ? entry.data : null;
|
|
57
|
+
}
|
|
58
|
+
setQualitySize(key, data) {
|
|
59
|
+
this.qualitySizes.set(key, { data, timestamp: Date.now() });
|
|
60
|
+
}
|
|
61
|
+
getQualitySize(key) {
|
|
62
|
+
const entry = this.qualitySizes.get(key);
|
|
63
|
+
return this.isValid(entry) ? entry.data : null;
|
|
64
|
+
}
|
|
65
|
+
setNaming(key, data) {
|
|
66
|
+
this.naming.set(key, { data, timestamp: Date.now() });
|
|
67
|
+
}
|
|
68
|
+
getNaming(key) {
|
|
69
|
+
const entry = this.naming.get(key);
|
|
70
|
+
return this.isValid(entry) ? entry.data : null;
|
|
71
|
+
}
|
|
72
|
+
clear() {
|
|
73
|
+
this.profiles.clear();
|
|
74
|
+
this.profileLists.clear();
|
|
75
|
+
this.customFormats.clear();
|
|
76
|
+
this.cfLists.clear();
|
|
77
|
+
this.cfGroups.clear();
|
|
78
|
+
this.qualitySizes.clear();
|
|
79
|
+
this.naming.clear();
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
const cache = new TrashCache();
|
|
83
|
+
// Custom format categories
|
|
84
|
+
const CF_CATEGORIES = {
|
|
85
|
+
hdr: [/hdr/i, /dv/i, /dolby.*vision/i, /hdr10/i],
|
|
86
|
+
audio: [/atmos/i, /dts/i, /truehd/i, /audio/i, /surround/i, /sound/i, /stereo/i, /mono/i, /aac/i, /flac/i],
|
|
87
|
+
resolution: [/1080p/i, /2160p/i, /720p/i, /4k/i, /480p/i],
|
|
88
|
+
source: [/bluray/i, /web/i, /remux/i, /hdtv/i, /dvd/i, /cam/i, /telesync/i],
|
|
89
|
+
streaming: [/amzn/i, /nf\b/i, /netflix/i, /dsnp/i, /disney/i, /atvp/i, /apple/i, /hmax/i, /hbo/i, /hulu/i, /pcok/i, /peacock/i],
|
|
90
|
+
anime: [/anime/i],
|
|
91
|
+
unwanted: [/lq/i, /x265.*hdtv/i, /extras/i, /3d/i, /upscale/i, /bad.*dual/i],
|
|
92
|
+
release: [/repack/i, /proper/i, /scene/i, /p2p/i],
|
|
93
|
+
language: [/french/i, /german/i, /dutch/i, /multi/i, /language/i],
|
|
94
|
+
};
|
|
95
|
+
function categorizeCustomFormat(name) {
|
|
96
|
+
const categories = [];
|
|
97
|
+
for (const [category, patterns] of Object.entries(CF_CATEGORIES)) {
|
|
98
|
+
if (patterns.some(p => p.test(name))) {
|
|
99
|
+
categories.push(category);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
return categories.length > 0 ? categories : ['other'];
|
|
103
|
+
}
|
|
104
|
+
// API functions
|
|
105
|
+
async function fetchJSON(url) {
|
|
106
|
+
const response = await fetch(url);
|
|
107
|
+
if (!response.ok) {
|
|
108
|
+
throw new Error(`Failed to fetch ${url}: ${response.status} ${response.statusText}`);
|
|
109
|
+
}
|
|
110
|
+
return response.json();
|
|
111
|
+
}
|
|
112
|
+
async function listGitHubDir(path) {
|
|
113
|
+
const files = await fetchJSON(`${GITHUB_API_URL}/${path}`);
|
|
114
|
+
return files
|
|
115
|
+
.filter(f => f.type === 'file' && f.name.endsWith('.json'))
|
|
116
|
+
.map(f => f.name.replace('.json', ''));
|
|
117
|
+
}
|
|
118
|
+
// Public API
|
|
119
|
+
export class TrashClient {
|
|
120
|
+
/**
|
|
121
|
+
* List available quality profiles
|
|
122
|
+
*/
|
|
123
|
+
async listProfiles(service) {
|
|
124
|
+
// Check cache
|
|
125
|
+
const cached = cache.getProfileList(service);
|
|
126
|
+
if (cached) {
|
|
127
|
+
// Fetch details for each
|
|
128
|
+
const profiles = await Promise.all(cached.map(slug => this.getProfile(service, slug).then(p => p ? { slug, profile: p } : null)));
|
|
129
|
+
return profiles.filter((p) => p !== null).map(({ slug, profile }) => ({
|
|
130
|
+
slug,
|
|
131
|
+
name: profile.name,
|
|
132
|
+
description: profile.trash_description,
|
|
133
|
+
}));
|
|
134
|
+
}
|
|
135
|
+
// Fetch list from GitHub
|
|
136
|
+
const profileNames = await listGitHubDir(`${service}/quality-profiles`);
|
|
137
|
+
cache.setProfileList(service, profileNames);
|
|
138
|
+
// Fetch details
|
|
139
|
+
const profiles = await Promise.all(profileNames.map(slug => this.getProfile(service, slug).then(p => p ? { slug, profile: p } : null)));
|
|
140
|
+
return profiles.filter((p) => p !== null).map(({ slug, profile }) => ({
|
|
141
|
+
slug,
|
|
142
|
+
name: profile.name,
|
|
143
|
+
description: profile.trash_description,
|
|
144
|
+
}));
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Get a specific quality profile
|
|
148
|
+
*/
|
|
149
|
+
async getProfile(service, profileName) {
|
|
150
|
+
const key = `${service}/${profileName}`;
|
|
151
|
+
const cached = cache.getProfile(key);
|
|
152
|
+
if (cached)
|
|
153
|
+
return cached;
|
|
154
|
+
try {
|
|
155
|
+
const profile = await fetchJSON(`${TRASH_BASE_URL}/${service}/quality-profiles/${profileName}.json`);
|
|
156
|
+
cache.setProfile(key, profile);
|
|
157
|
+
return profile;
|
|
158
|
+
}
|
|
159
|
+
catch {
|
|
160
|
+
return null;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* List available custom formats
|
|
165
|
+
*/
|
|
166
|
+
async listCustomFormats(service, category) {
|
|
167
|
+
// Check cache
|
|
168
|
+
let cfNames = cache.getCFList(service);
|
|
169
|
+
if (!cfNames) {
|
|
170
|
+
cfNames = await listGitHubDir(`${service}/cf`);
|
|
171
|
+
cache.setCFList(service, cfNames);
|
|
172
|
+
}
|
|
173
|
+
// Fetch details for categorization
|
|
174
|
+
const formats = [];
|
|
175
|
+
// Batch fetch - limit to prevent rate limiting
|
|
176
|
+
const batchSize = 20;
|
|
177
|
+
for (let i = 0; i < cfNames.length; i += batchSize) {
|
|
178
|
+
const batch = cfNames.slice(i, i + batchSize);
|
|
179
|
+
const results = await Promise.all(batch.map(async (name) => {
|
|
180
|
+
const cf = await this.getCustomFormat(service, name);
|
|
181
|
+
if (!cf)
|
|
182
|
+
return null;
|
|
183
|
+
const cats = categorizeCustomFormat(cf.name);
|
|
184
|
+
return {
|
|
185
|
+
name: cf.name,
|
|
186
|
+
categories: cats,
|
|
187
|
+
defaultScore: cf.trash_scores?.default,
|
|
188
|
+
};
|
|
189
|
+
}));
|
|
190
|
+
formats.push(...results.filter((f) => f !== null));
|
|
191
|
+
}
|
|
192
|
+
// Filter by category if specified
|
|
193
|
+
if (category) {
|
|
194
|
+
return formats.filter(f => f.categories.includes(category.toLowerCase()));
|
|
195
|
+
}
|
|
196
|
+
return formats;
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Get a specific custom format
|
|
200
|
+
*/
|
|
201
|
+
async getCustomFormat(service, cfName) {
|
|
202
|
+
const key = `${service}/${cfName}`;
|
|
203
|
+
const cached = cache.getCustomFormat(key);
|
|
204
|
+
if (cached)
|
|
205
|
+
return cached;
|
|
206
|
+
try {
|
|
207
|
+
const cf = await fetchJSON(`${TRASH_BASE_URL}/${service}/cf/${cfName}.json`);
|
|
208
|
+
cache.setCustomFormat(key, cf);
|
|
209
|
+
return cf;
|
|
210
|
+
}
|
|
211
|
+
catch {
|
|
212
|
+
return null;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Get naming conventions
|
|
217
|
+
*/
|
|
218
|
+
async getNaming(service) {
|
|
219
|
+
const cached = cache.getNaming(service);
|
|
220
|
+
if (cached)
|
|
221
|
+
return cached;
|
|
222
|
+
try {
|
|
223
|
+
const naming = await fetchJSON(`${TRASH_BASE_URL}/${service}/naming/${service}-naming.json`);
|
|
224
|
+
cache.setNaming(service, naming);
|
|
225
|
+
return naming;
|
|
226
|
+
}
|
|
227
|
+
catch {
|
|
228
|
+
return null;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Get quality size recommendations
|
|
233
|
+
*/
|
|
234
|
+
async getQualitySizes(service, type) {
|
|
235
|
+
const sizeTypes = service === 'radarr'
|
|
236
|
+
? ['movie', 'anime']
|
|
237
|
+
: ['series', 'anime'];
|
|
238
|
+
const sizes = [];
|
|
239
|
+
for (const sizeType of sizeTypes) {
|
|
240
|
+
const key = `${service}/${sizeType}`;
|
|
241
|
+
let size = cache.getQualitySize(key);
|
|
242
|
+
if (!size) {
|
|
243
|
+
try {
|
|
244
|
+
size = await fetchJSON(`${TRASH_BASE_URL}/${service}/quality-size/${sizeType}.json`);
|
|
245
|
+
cache.setQualitySize(key, size);
|
|
246
|
+
}
|
|
247
|
+
catch {
|
|
248
|
+
continue;
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
if (!type || size.type === type) {
|
|
252
|
+
sizes.push(size);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
return sizes;
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Get custom format groups
|
|
259
|
+
*/
|
|
260
|
+
async listCFGroups(service) {
|
|
261
|
+
return listGitHubDir(`${service}/cf-groups`);
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Get a specific CF group
|
|
265
|
+
*/
|
|
266
|
+
async getCFGroup(service, groupName) {
|
|
267
|
+
const key = `${service}/${groupName}`;
|
|
268
|
+
const cached = cache.getCFGroup(key);
|
|
269
|
+
if (cached)
|
|
270
|
+
return cached;
|
|
271
|
+
try {
|
|
272
|
+
const group = await fetchJSON(`${TRASH_BASE_URL}/${service}/cf-groups/${groupName}.json`);
|
|
273
|
+
cache.setCFGroup(key, group);
|
|
274
|
+
return group;
|
|
275
|
+
}
|
|
276
|
+
catch {
|
|
277
|
+
return null;
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Clear the cache (force refresh)
|
|
282
|
+
*/
|
|
283
|
+
clearCache() {
|
|
284
|
+
cache.clear();
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
// Singleton instance
|
|
288
|
+
export const trashClient = new TrashClient();
|
|
289
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/trash/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TRaSH Guides ToolModule
|
|
3
|
+
*
|
|
4
|
+
* Tools for fetching and comparing quality profiles, custom formats,
|
|
5
|
+
* and naming conventions from https://trash-guides.info
|
|
6
|
+
*
|
|
7
|
+
* These tools are always available — no *arr service configuration required,
|
|
8
|
+
* except for trash_compare_profile and trash_compare_naming which need the
|
|
9
|
+
* corresponding service to be configured.
|
|
10
|
+
*/
|
|
11
|
+
import type { ToolModule } from '../types.js';
|
|
12
|
+
export declare const trashModule: ToolModule;
|
|
13
|
+
//# sourceMappingURL=tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/trash/tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAI9C,eAAO,MAAM,WAAW,EAAE,UA+YzB,CAAC"}
|