tsarr 1.1.0 → 1.1.2

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.
Files changed (74) hide show
  1. package/dist/clients/lidarr.d.ts +373 -0
  2. package/dist/clients/lidarr.d.ts.map +1 -0
  3. package/dist/clients/lidarr.js +626 -0
  4. package/dist/clients/prowlarr.d.ts +143 -0
  5. package/dist/clients/prowlarr.d.ts.map +1 -0
  6. package/dist/clients/prowlarr.js +408 -0
  7. package/dist/clients/radarr.d.ts +1007 -0
  8. package/dist/clients/radarr.d.ts.map +1 -0
  9. package/dist/clients/radarr.js +1059 -0
  10. package/dist/clients/readarr.d.ts +173 -0
  11. package/dist/clients/readarr.d.ts.map +1 -0
  12. package/dist/clients/readarr.js +432 -0
  13. package/dist/clients/sonarr.d.ts +181 -0
  14. package/dist/clients/sonarr.d.ts.map +1 -0
  15. package/dist/clients/sonarr.js +432 -0
  16. package/dist/core/client.d.ts +17 -0
  17. package/dist/core/client.d.ts.map +1 -0
  18. package/dist/core/errors.d.ts +19 -0
  19. package/dist/core/errors.d.ts.map +1 -0
  20. package/dist/core/index.d.ts +5 -0
  21. package/dist/core/index.d.ts.map +1 -0
  22. package/dist/core/response.d.ts +13 -0
  23. package/dist/core/response.d.ts.map +1 -0
  24. package/dist/core/types.d.ts +12 -0
  25. package/dist/core/types.d.ts.map +1 -0
  26. package/dist/generated/lidarr/index.d.ts +4 -0
  27. package/dist/generated/lidarr/index.d.ts.map +1 -0
  28. package/dist/generated/lidarr/schemas.gen.d.ts +4584 -0
  29. package/dist/generated/lidarr/schemas.gen.d.ts.map +1 -0
  30. package/dist/generated/lidarr/services.gen.d.ts +242 -0
  31. package/dist/generated/lidarr/services.gen.d.ts.map +1 -0
  32. package/dist/generated/lidarr/types.gen.d.ts +2618 -0
  33. package/dist/generated/lidarr/types.gen.d.ts.map +1 -0
  34. package/dist/generated/prowlarr/index.d.ts +4 -0
  35. package/dist/generated/prowlarr/index.d.ts.map +1 -0
  36. package/dist/generated/prowlarr/schemas.gen.d.ts +2151 -0
  37. package/dist/generated/prowlarr/schemas.gen.d.ts.map +1 -0
  38. package/dist/generated/prowlarr/services.gen.d.ts +135 -0
  39. package/dist/generated/prowlarr/services.gen.d.ts.map +1 -0
  40. package/dist/generated/prowlarr/types.gen.d.ts +1339 -0
  41. package/dist/generated/prowlarr/types.gen.d.ts.map +1 -0
  42. package/dist/generated/radarr/index.d.ts +4 -0
  43. package/dist/generated/radarr/index.d.ts.map +1 -0
  44. package/dist/generated/radarr/schemas.gen.d.ts +4402 -0
  45. package/dist/generated/radarr/schemas.gen.d.ts.map +1 -0
  46. package/dist/generated/radarr/services.gen.d.ts +250 -0
  47. package/dist/generated/radarr/services.gen.d.ts.map +1 -0
  48. package/dist/generated/radarr/types.gen.d.ts +2547 -0
  49. package/dist/generated/radarr/types.gen.d.ts.map +1 -0
  50. package/dist/generated/readarr/index.d.ts +4 -0
  51. package/dist/generated/readarr/index.d.ts.map +1 -0
  52. package/dist/generated/readarr/schemas.gen.d.ts +5250 -0
  53. package/dist/generated/readarr/schemas.gen.d.ts.map +1 -0
  54. package/dist/generated/readarr/services.gen.d.ts +240 -0
  55. package/dist/generated/readarr/services.gen.d.ts.map +1 -0
  56. package/dist/generated/readarr/types.gen.d.ts +2770 -0
  57. package/dist/generated/readarr/types.gen.d.ts.map +1 -0
  58. package/dist/generated/sonarr/index.d.ts +4 -0
  59. package/dist/generated/sonarr/index.d.ts.map +1 -0
  60. package/dist/generated/sonarr/schemas.gen.d.ts +612 -0
  61. package/dist/generated/sonarr/schemas.gen.d.ts.map +1 -0
  62. package/dist/generated/sonarr/services.gen.d.ts +27 -0
  63. package/dist/generated/sonarr/services.gen.d.ts.map +1 -0
  64. package/dist/generated/sonarr/types.gen.d.ts +282 -0
  65. package/dist/generated/sonarr/types.gen.d.ts.map +1 -0
  66. package/dist/index.d.ts +13 -0
  67. package/dist/index.d.ts.map +1 -0
  68. package/dist/radarr/index.d.ts +2 -0
  69. package/dist/radarr/index.d.ts.map +1 -0
  70. package/dist/sonarr/index.d.ts +2 -0
  71. package/dist/sonarr/index.d.ts.map +1 -0
  72. package/dist/tsarr-1.1.2.tgz +0 -0
  73. package/package.json +5 -4
  74. package/dist/tsarr-1.1.0.tgz +0 -0
@@ -0,0 +1,181 @@
1
+ import type { ServarrClientConfig } from '../core/types.js';
2
+ import * as SonarrApi from '../generated/sonarr/index.js';
3
+ import type { SeriesResource, UpdateSettingsResource } from '../generated/sonarr/types.gen.js';
4
+ /**
5
+ * Sonarr API client for TV show management
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * const sonarr = new SonarrClient({
10
+ * baseUrl: 'http://localhost:8989',
11
+ * apiKey: 'your-api-key'
12
+ * });
13
+ *
14
+ * const series = await sonarr.getSeries();
15
+ * ```
16
+ */
17
+ export declare class SonarrClient {
18
+ private clientConfig;
19
+ constructor(config: ServarrClientConfig);
20
+ getApi(): Promise<({
21
+ data: undefined;
22
+ error: unknown;
23
+ } | {
24
+ data: unknown;
25
+ error: undefined;
26
+ }) & {
27
+ request: Request;
28
+ response: Response;
29
+ }>;
30
+ /**
31
+ * Get all TV series in the library
32
+ */
33
+ getSeries(): Promise<({
34
+ data: undefined;
35
+ error: unknown;
36
+ } | {
37
+ data: SonarrApi.GetApiV5SeriesResponse;
38
+ error: undefined;
39
+ }) & {
40
+ request: Request;
41
+ response: Response;
42
+ }>;
43
+ getSeriesById(id: number): Promise<({
44
+ data: undefined;
45
+ error: unknown;
46
+ } | {
47
+ data: SonarrApi.SeriesResource;
48
+ error: undefined;
49
+ }) & {
50
+ request: Request;
51
+ response: Response;
52
+ }>;
53
+ addSeries(series: SeriesResource): Promise<({
54
+ data: undefined;
55
+ error: unknown;
56
+ } | {
57
+ data: SonarrApi.SeriesResource;
58
+ error: undefined;
59
+ }) & {
60
+ request: Request;
61
+ response: Response;
62
+ }>;
63
+ updateSeries(id: number, series: SeriesResource): Promise<({
64
+ data: undefined;
65
+ error: unknown;
66
+ } | {
67
+ data: SonarrApi.SeriesResource;
68
+ error: undefined;
69
+ }) & {
70
+ request: Request;
71
+ response: Response;
72
+ }>;
73
+ deleteSeries(id: number): Promise<({
74
+ data: undefined;
75
+ error: unknown;
76
+ } | {
77
+ data: unknown;
78
+ error: undefined;
79
+ }) & {
80
+ request: Request;
81
+ response: Response;
82
+ }>;
83
+ /**
84
+ * Get series folder information
85
+ */
86
+ getSeriesFolder(id: number): Promise<({
87
+ data: undefined;
88
+ error: unknown;
89
+ } | {
90
+ data: unknown;
91
+ error: undefined;
92
+ }) & {
93
+ request: Request;
94
+ response: Response;
95
+ }>;
96
+ /**
97
+ * Search for TV series using TVDB database
98
+ */
99
+ searchSeries(term: string): Promise<({
100
+ data: undefined;
101
+ error: unknown;
102
+ } | {
103
+ data: SonarrApi.GetApiV5SeriesLookupResponse;
104
+ error: undefined;
105
+ }) & {
106
+ request: Request;
107
+ response: Response;
108
+ }>;
109
+ /**
110
+ * Get system logs with optional filtering
111
+ */
112
+ getLogs(page?: number, pageSize?: number, sortKey?: string, sortDirection?: string, level?: string): Promise<({
113
+ data: undefined;
114
+ error: unknown;
115
+ } | {
116
+ data: SonarrApi.LogResourcePagingResource;
117
+ error: undefined;
118
+ }) & {
119
+ request: Request;
120
+ response: Response;
121
+ }>;
122
+ /**
123
+ * Get available updates
124
+ */
125
+ getUpdates(): Promise<({
126
+ data: undefined;
127
+ error: unknown;
128
+ } | {
129
+ data: SonarrApi.GetApiV5UpdateResponse;
130
+ error: undefined;
131
+ }) & {
132
+ request: Request;
133
+ response: Response;
134
+ }>;
135
+ /**
136
+ * Get update settings
137
+ */
138
+ getUpdateSettings(): Promise<({
139
+ data: undefined;
140
+ error: unknown;
141
+ } | {
142
+ data: SonarrApi.UpdateSettingsResource;
143
+ error: undefined;
144
+ }) & {
145
+ request: Request;
146
+ response: Response;
147
+ }>;
148
+ /**
149
+ * Update system settings
150
+ */
151
+ updateSettings(settings: UpdateSettingsResource): Promise<({
152
+ data: undefined;
153
+ error: unknown;
154
+ } | {
155
+ data: SonarrApi.UpdateSettingsResource;
156
+ error: undefined;
157
+ }) & {
158
+ request: Request;
159
+ response: Response;
160
+ }>;
161
+ /**
162
+ * Get specific update setting by ID
163
+ */
164
+ getUpdateSetting(id: number): Promise<({
165
+ data: undefined;
166
+ error: unknown;
167
+ } | {
168
+ data: SonarrApi.UpdateSettingsResource;
169
+ error: undefined;
170
+ }) & {
171
+ request: Request;
172
+ response: Response;
173
+ }>;
174
+ updateConfig(newConfig: Partial<ServarrClientConfig>): {
175
+ baseUrl: string;
176
+ apiKey: string;
177
+ timeout?: number;
178
+ headers?: Record<string, string>;
179
+ };
180
+ }
181
+ //# sourceMappingURL=sonarr.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sonarr.d.ts","sourceRoot":"","sources":["../../src/clients/sonarr.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,KAAK,SAAS,MAAM,8BAA8B,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAE/F;;;;;;;;;;;;GAYG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,YAAY,CAAyC;gBAEjD,MAAM,EAAE,mBAAmB;IAWjC,MAAM;;;;;;;;;;IAMZ;;OAEG;IACG,SAAS;;;;;;;;;;IAIT,aAAa,CAAC,EAAE,EAAE,MAAM;;;;;;;;;;IAIxB,SAAS,CAAC,MAAM,EAAE,cAAc;;;;;;;;;;IAIhC,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc;;;;;;;;;;IAI/C,YAAY,CAAC,EAAE,EAAE,MAAM;;;;;;;;;;IAI7B;;OAEG;IACG,eAAe,CAAC,EAAE,EAAE,MAAM;;;;;;;;;;IAMhC;;OAEG;IACG,YAAY,CAAC,IAAI,EAAE,MAAM;;;;;;;;;;IAM/B;;OAEG;IACG,OAAO,CACX,IAAI,CAAC,EAAE,MAAM,EACb,QAAQ,CAAC,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,MAAM,EAChB,aAAa,CAAC,EAAE,MAAM,EACtB,KAAK,CAAC,EAAE,MAAM;;;;;;;;;;IAchB;;OAEG;IACG,UAAU;;;;;;;;;;IAIhB;;OAEG;IACG,iBAAiB;;;;;;;;;;IAIvB;;OAEG;IACG,cAAc,CAAC,QAAQ,EAAE,sBAAsB;;;;;;;;;;IAIrD;;OAEG;IACG,gBAAgB,CAAC,EAAE,EAAE,MAAM;;;;;;;;;;IAKjC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,mBAAmB,CAAC;;;;;;CAWrD"}
@@ -0,0 +1,432 @@
1
+ // src/core/errors.ts
2
+ class TsArrError extends Error {
3
+ code;
4
+ statusCode;
5
+ details;
6
+ constructor(message, code, statusCode, details) {
7
+ super(message);
8
+ this.code = code;
9
+ this.statusCode = statusCode;
10
+ this.details = details;
11
+ this.name = "TsArrError";
12
+ }
13
+ }
14
+
15
+ class ApiKeyError extends TsArrError {
16
+ constructor(message = "Invalid or missing API key") {
17
+ super(message, "API_KEY_ERROR", 401);
18
+ this.name = "ApiKeyError";
19
+ }
20
+ }
21
+
22
+ class ConnectionError extends TsArrError {
23
+ constructor(message, details) {
24
+ super(message, "CONNECTION_ERROR", undefined, details);
25
+ this.name = "ConnectionError";
26
+ }
27
+ }
28
+
29
+ // src/core/client.ts
30
+ function createServarrClient(config) {
31
+ if (!config.apiKey) {
32
+ throw new ApiKeyError;
33
+ }
34
+ if (!config.baseUrl) {
35
+ throw new ConnectionError("No base URL provided");
36
+ }
37
+ const validatedConfig = {
38
+ ...config,
39
+ baseUrl: config.baseUrl.replace(/\/$/, "")
40
+ };
41
+ return {
42
+ config: validatedConfig,
43
+ getHeaders: () => ({
44
+ "X-Api-Key": validatedConfig.apiKey,
45
+ "Content-Type": "application/json",
46
+ ...validatedConfig.headers
47
+ }),
48
+ getBaseUrl: () => validatedConfig.baseUrl
49
+ };
50
+ }
51
+
52
+ // node_modules/@hey-api/client-fetch/dist/index.js
53
+ var T = /\{[^{}]+\}/g;
54
+ var h = ({ allowReserved: i, name: n, value: e }) => {
55
+ if (e == null)
56
+ return "";
57
+ if (typeof e == "object")
58
+ throw new Error("Deeply-nested arrays/objects aren’t supported. Provide your own `querySerializer()` to handle these.");
59
+ return `${n}=${i ? e : encodeURIComponent(e)}`;
60
+ };
61
+ var U = (i) => {
62
+ switch (i) {
63
+ case "label":
64
+ return ".";
65
+ case "matrix":
66
+ return ";";
67
+ case "simple":
68
+ return ",";
69
+ default:
70
+ return "&";
71
+ }
72
+ };
73
+ var $ = (i) => {
74
+ switch (i) {
75
+ case "form":
76
+ return ",";
77
+ case "pipeDelimited":
78
+ return "|";
79
+ case "spaceDelimited":
80
+ return "%20";
81
+ default:
82
+ return ",";
83
+ }
84
+ };
85
+ var D = (i) => {
86
+ switch (i) {
87
+ case "label":
88
+ return ".";
89
+ case "matrix":
90
+ return ";";
91
+ case "simple":
92
+ return ",";
93
+ default:
94
+ return "&";
95
+ }
96
+ };
97
+ var j = ({ allowReserved: i, explode: n, name: e, style: a, value: o }) => {
98
+ if (!n) {
99
+ let r = (i ? o : o.map((c) => encodeURIComponent(c))).join($(a));
100
+ switch (a) {
101
+ case "label":
102
+ return `.${r}`;
103
+ case "matrix":
104
+ return `;${e}=${r}`;
105
+ case "simple":
106
+ return r;
107
+ default:
108
+ return `${e}=${r}`;
109
+ }
110
+ }
111
+ let s = U(a), t = o.map((r) => a === "label" || a === "simple" ? i ? r : encodeURIComponent(r) : h({ allowReserved: i, name: e, value: r })).join(s);
112
+ return a === "label" || a === "matrix" ? s + t : t;
113
+ };
114
+ var C = ({ allowReserved: i, explode: n, name: e, style: a, value: o }) => {
115
+ if (o instanceof Date)
116
+ return `${e}=${o.toISOString()}`;
117
+ if (a !== "deepObject" && !n) {
118
+ let r = [];
119
+ Object.entries(o).forEach(([u, l]) => {
120
+ r = [...r, u, i ? l : encodeURIComponent(l)];
121
+ });
122
+ let c = r.join(",");
123
+ switch (a) {
124
+ case "form":
125
+ return `${e}=${c}`;
126
+ case "label":
127
+ return `.${c}`;
128
+ case "matrix":
129
+ return `;${e}=${c}`;
130
+ default:
131
+ return c;
132
+ }
133
+ }
134
+ let s = D(a), t = Object.entries(o).map(([r, c]) => h({ allowReserved: i, name: a === "deepObject" ? `${e}[${r}]` : r, value: c })).join(s);
135
+ return a === "label" || a === "matrix" ? s + t : t;
136
+ };
137
+ var _ = ({ path: i, url: n }) => {
138
+ let e = n, a = n.match(T);
139
+ if (a)
140
+ for (let o of a) {
141
+ let s = false, t = o.substring(1, o.length - 1), r = "simple";
142
+ t.endsWith("*") && (s = true, t = t.substring(0, t.length - 1)), t.startsWith(".") ? (t = t.substring(1), r = "label") : t.startsWith(";") && (t = t.substring(1), r = "matrix");
143
+ let c = i[t];
144
+ if (c == null)
145
+ continue;
146
+ if (Array.isArray(c)) {
147
+ e = e.replace(o, j({ explode: s, name: t, style: r, value: c }));
148
+ continue;
149
+ }
150
+ if (typeof c == "object") {
151
+ e = e.replace(o, C({ explode: s, name: t, style: r, value: c }));
152
+ continue;
153
+ }
154
+ if (r === "matrix") {
155
+ e = e.replace(o, `;${h({ name: t, value: c })}`);
156
+ continue;
157
+ }
158
+ let u = encodeURIComponent(r === "label" ? `.${c}` : c);
159
+ e = e.replace(o, u);
160
+ }
161
+ return e;
162
+ };
163
+ var b = ({ allowReserved: i, array: n, object: e } = {}) => (o) => {
164
+ let s = [];
165
+ if (o && typeof o == "object")
166
+ for (let t in o) {
167
+ let r = o[t];
168
+ if (r != null) {
169
+ if (Array.isArray(r)) {
170
+ s = [...s, j({ allowReserved: i, explode: true, name: t, style: "form", value: r, ...n })];
171
+ continue;
172
+ }
173
+ if (typeof r == "object") {
174
+ s = [...s, C({ allowReserved: i, explode: true, name: t, style: "deepObject", value: r, ...e })];
175
+ continue;
176
+ }
177
+ s = [...s, h({ allowReserved: i, name: t, value: r })];
178
+ }
179
+ }
180
+ return s.join("&");
181
+ };
182
+ var A = (i) => {
183
+ if (!i)
184
+ return;
185
+ let n = i.split(";")[0].trim();
186
+ if (n.startsWith("application/json") || n.endsWith("+json"))
187
+ return "json";
188
+ if (n === "multipart/form-data")
189
+ return "formData";
190
+ if (["application/", "audio/", "image/", "video/"].some((e) => n.startsWith(e)))
191
+ return "blob";
192
+ if (n.startsWith("text/"))
193
+ return "text";
194
+ };
195
+ var w = ({ baseUrl: i, path: n, query: e, querySerializer: a, url: o }) => {
196
+ let s = o.startsWith("/") ? o : `/${o}`, t = i + s;
197
+ n && (t = _({ path: n, url: t }));
198
+ let r = e ? a(e) : "";
199
+ return r.startsWith("?") && (r = r.substring(1)), r && (t += `?${r}`), t;
200
+ };
201
+ var R = (i, n) => {
202
+ let e = { ...i, ...n };
203
+ return e.baseUrl?.endsWith("/") && (e.baseUrl = e.baseUrl.substring(0, e.baseUrl.length - 1)), e.headers = O(i.headers, n.headers), e;
204
+ };
205
+ var O = (...i) => {
206
+ let n = new Headers;
207
+ for (let e of i) {
208
+ if (!e || typeof e != "object")
209
+ continue;
210
+ let a = e instanceof Headers ? e.entries() : Object.entries(e);
211
+ for (let [o, s] of a)
212
+ if (s === null)
213
+ n.delete(o);
214
+ else if (Array.isArray(s))
215
+ for (let t of s)
216
+ n.append(o, t);
217
+ else
218
+ s !== undefined && n.set(o, typeof s == "object" ? JSON.stringify(s) : s);
219
+ }
220
+ return n;
221
+ };
222
+ var y = class {
223
+ _fns;
224
+ constructor() {
225
+ this._fns = [];
226
+ }
227
+ clear() {
228
+ this._fns = [];
229
+ }
230
+ exists(n) {
231
+ return this._fns.indexOf(n) !== -1;
232
+ }
233
+ eject(n) {
234
+ let e = this._fns.indexOf(n);
235
+ e !== -1 && (this._fns = [...this._fns.slice(0, e), ...this._fns.slice(e + 1)]);
236
+ }
237
+ use(n) {
238
+ this._fns = [...this._fns, n];
239
+ }
240
+ };
241
+ var P = () => ({ error: new y, request: new y, response: new y });
242
+ var E = { bodySerializer: (i) => JSON.stringify(i) };
243
+ var W = b({ allowReserved: false, array: { explode: true, style: "form" }, object: { explode: true, style: "deepObject" } });
244
+ var B = { "Content-Type": "application/json" };
245
+ var x = (i = {}) => ({ ...E, baseUrl: "", fetch: globalThis.fetch, headers: B, parseAs: "auto", querySerializer: W, ...i });
246
+ var J = (i = {}) => {
247
+ let n = R(x(), i), e = () => ({ ...n }), a = (t) => (n = R(n, t), e()), o = P(), s = async (t) => {
248
+ let r = { ...n, ...t, headers: O(n.headers, t.headers) };
249
+ r.body && r.bodySerializer && (r.body = r.bodySerializer(r.body)), r.body || r.headers.delete("Content-Type");
250
+ let c = w({ baseUrl: r.baseUrl ?? "", path: r.path, query: r.query, querySerializer: typeof r.querySerializer == "function" ? r.querySerializer : b(r.querySerializer), url: r.url }), u = { redirect: "follow", ...r }, l = new Request(c, u);
251
+ for (let f of o.request._fns)
252
+ l = await f(l, r);
253
+ let I = r.fetch, p = await I(l);
254
+ for (let f of o.response._fns)
255
+ p = await f(p, l, r);
256
+ let g = { request: l, response: p };
257
+ if (p.ok) {
258
+ if (p.status === 204 || p.headers.get("Content-Length") === "0")
259
+ return { data: {}, ...g };
260
+ if (r.parseAs === "stream")
261
+ return { data: p.body, ...g };
262
+ let f = (r.parseAs === "auto" ? A(p.headers.get("Content-Type")) : r.parseAs) ?? "json", S = await p[f]();
263
+ return f === "json" && r.responseTransformer && (S = await r.responseTransformer(S)), { data: S, ...g };
264
+ }
265
+ let m = await p.text();
266
+ try {
267
+ m = JSON.parse(m);
268
+ } catch {}
269
+ let d = m;
270
+ for (let f of o.error._fns)
271
+ d = await f(m, p, l, r);
272
+ if (d = d || {}, r.throwOnError)
273
+ throw d;
274
+ return { error: d, ...g };
275
+ };
276
+ return { connect: (t) => s({ ...t, method: "CONNECT" }), delete: (t) => s({ ...t, method: "DELETE" }), get: (t) => s({ ...t, method: "GET" }), getConfig: e, head: (t) => s({ ...t, method: "HEAD" }), interceptors: o, options: (t) => s({ ...t, method: "OPTIONS" }), patch: (t) => s({ ...t, method: "PATCH" }), post: (t) => s({ ...t, method: "POST" }), put: (t) => s({ ...t, method: "PUT" }), request: s, setConfig: a, trace: (t) => s({ ...t, method: "TRACE" }) };
277
+ };
278
+
279
+ // src/generated/sonarr/services.gen.ts
280
+ var client = J(x());
281
+ var getApi = (options) => {
282
+ return (options?.client ?? client).get({
283
+ ...options,
284
+ url: "/api"
285
+ });
286
+ };
287
+ var getApiV5Log = (options) => {
288
+ return (options?.client ?? client).get({
289
+ ...options,
290
+ url: "/api/v5/log"
291
+ });
292
+ };
293
+ var getApiV5Series = (options) => {
294
+ return (options?.client ?? client).get({
295
+ ...options,
296
+ url: "/api/v5/series"
297
+ });
298
+ };
299
+ var postApiV5Series = (options) => {
300
+ return (options?.client ?? client).post({
301
+ ...options,
302
+ url: "/api/v5/series"
303
+ });
304
+ };
305
+ var getApiV5SeriesById = (options) => {
306
+ return (options?.client ?? client).get({
307
+ ...options,
308
+ url: "/api/v5/series/{id}"
309
+ });
310
+ };
311
+ var putApiV5SeriesById = (options) => {
312
+ return (options?.client ?? client).put({
313
+ ...options,
314
+ url: "/api/v5/series/{id}"
315
+ });
316
+ };
317
+ var deleteApiV5SeriesById = (options) => {
318
+ return (options?.client ?? client).delete({
319
+ ...options,
320
+ url: "/api/v5/series/{id}"
321
+ });
322
+ };
323
+ var getApiV5SeriesByIdFolder = (options) => {
324
+ return (options?.client ?? client).get({
325
+ ...options,
326
+ url: "/api/v5/series/{id}/folder"
327
+ });
328
+ };
329
+ var getApiV5SeriesLookup = (options) => {
330
+ return (options?.client ?? client).get({
331
+ ...options,
332
+ url: "/api/v5/series/lookup"
333
+ });
334
+ };
335
+ var getApiV5Update = (options) => {
336
+ return (options?.client ?? client).get({
337
+ ...options,
338
+ url: "/api/v5/update"
339
+ });
340
+ };
341
+ var getApiV5SettingsUpdate = (options) => {
342
+ return (options?.client ?? client).get({
343
+ ...options,
344
+ url: "/api/v5/settings/update"
345
+ });
346
+ };
347
+ var putApiV5SettingsUpdate = (options) => {
348
+ return (options?.client ?? client).put({
349
+ ...options,
350
+ url: "/api/v5/settings/update"
351
+ });
352
+ };
353
+ var getApiV5SettingsUpdateById = (options) => {
354
+ return (options?.client ?? client).get({
355
+ ...options,
356
+ url: "/api/v5/settings/update/{id}"
357
+ });
358
+ };
359
+
360
+ // src/clients/sonarr.ts
361
+ class SonarrClient {
362
+ clientConfig;
363
+ constructor(config) {
364
+ this.clientConfig = createServarrClient(config);
365
+ client.setConfig({
366
+ baseUrl: this.clientConfig.getBaseUrl(),
367
+ headers: this.clientConfig.getHeaders()
368
+ });
369
+ }
370
+ async getApi() {
371
+ return getApi();
372
+ }
373
+ async getSeries() {
374
+ return getApiV5Series();
375
+ }
376
+ async getSeriesById(id) {
377
+ return getApiV5SeriesById({ path: { id } });
378
+ }
379
+ async addSeries(series) {
380
+ return postApiV5Series({ body: series });
381
+ }
382
+ async updateSeries(id, series) {
383
+ return putApiV5SeriesById({ path: { id: String(id) }, body: series });
384
+ }
385
+ async deleteSeries(id) {
386
+ return deleteApiV5SeriesById({ path: { id } });
387
+ }
388
+ async getSeriesFolder(id) {
389
+ return getApiV5SeriesByIdFolder({ path: { id } });
390
+ }
391
+ async searchSeries(term) {
392
+ return getApiV5SeriesLookup({ query: { term } });
393
+ }
394
+ async getLogs(page, pageSize, sortKey, sortDirection, level) {
395
+ const query = {};
396
+ if (page !== undefined)
397
+ query.page = page;
398
+ if (pageSize !== undefined)
399
+ query.pageSize = pageSize;
400
+ if (sortKey)
401
+ query.sortKey = sortKey;
402
+ if (sortDirection)
403
+ query.sortDirection = sortDirection;
404
+ if (level)
405
+ query.level = level;
406
+ return getApiV5Log(Object.keys(query).length > 0 ? { query } : {});
407
+ }
408
+ async getUpdates() {
409
+ return getApiV5Update();
410
+ }
411
+ async getUpdateSettings() {
412
+ return getApiV5SettingsUpdate();
413
+ }
414
+ async updateSettings(settings) {
415
+ return putApiV5SettingsUpdate({ body: settings });
416
+ }
417
+ async getUpdateSetting(id) {
418
+ return getApiV5SettingsUpdateById({ path: { id } });
419
+ }
420
+ updateConfig(newConfig) {
421
+ const updatedConfig = { ...this.clientConfig.config, ...newConfig };
422
+ this.clientConfig = createServarrClient(updatedConfig);
423
+ client.setConfig({
424
+ baseUrl: this.clientConfig.getBaseUrl(),
425
+ headers: this.clientConfig.getHeaders()
426
+ });
427
+ return this.clientConfig.config;
428
+ }
429
+ }
430
+ export {
431
+ SonarrClient
432
+ };
@@ -0,0 +1,17 @@
1
+ import type { ServarrClientConfig } from './types.js';
2
+ export declare function createServarrClient(config: ServarrClientConfig): {
3
+ config: {
4
+ baseUrl: string;
5
+ apiKey: string;
6
+ timeout?: number;
7
+ headers?: Record<string, string>;
8
+ };
9
+ getHeaders: () => {
10
+ 'X-Api-Key': string;
11
+ 'Content-Type': string;
12
+ };
13
+ getBaseUrl: () => string;
14
+ };
15
+ export declare function validateApiKey(apiKey: string | undefined): string;
16
+ export declare function validateBaseUrl(baseUrl: string | undefined): string;
17
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/core/client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEtD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,mBAAmB;;;;;;;;;;;;EAwB9D;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAKjE;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAanE"}
@@ -0,0 +1,19 @@
1
+ export declare class TsArrError extends Error {
2
+ code?: string | undefined;
3
+ statusCode?: number | undefined;
4
+ details?: unknown | undefined;
5
+ constructor(message: string, code?: string | undefined, statusCode?: number | undefined, details?: unknown | undefined);
6
+ }
7
+ export declare class ApiKeyError extends TsArrError {
8
+ constructor(message?: string);
9
+ }
10
+ export declare class ConnectionError extends TsArrError {
11
+ constructor(message: string, details?: unknown);
12
+ }
13
+ export declare class ValidationError extends TsArrError {
14
+ constructor(message: string, details?: unknown);
15
+ }
16
+ export declare class NotFoundError extends TsArrError {
17
+ constructor(resource: string);
18
+ }
19
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/core/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,UAAW,SAAQ,KAAK;IAG1B,IAAI,CAAC,EAAE,MAAM;IACb,UAAU,CAAC,EAAE,MAAM;IACnB,OAAO,CAAC,EAAE,OAAO;gBAHxB,OAAO,EAAE,MAAM,EACR,IAAI,CAAC,EAAE,MAAM,YAAA,EACb,UAAU,CAAC,EAAE,MAAM,YAAA,EACnB,OAAO,CAAC,EAAE,OAAO,YAAA;CAK3B;AAED,qBAAa,WAAY,SAAQ,UAAU;gBAC7B,OAAO,SAA+B;CAInD;AAED,qBAAa,eAAgB,SAAQ,UAAU;gBACjC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO;CAI/C;AAED,qBAAa,eAAgB,SAAQ,UAAU;gBACjC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO;CAI/C;AAED,qBAAa,aAAc,SAAQ,UAAU;gBAC/B,QAAQ,EAAE,MAAM;CAI7B"}
@@ -0,0 +1,5 @@
1
+ export * from './client.js';
2
+ export * from './errors.js';
3
+ export * from './response.js';
4
+ export * from './types.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { TsArrError } from './errors.js';
2
+ export interface ApiResponse<T> {
3
+ data?: T;
4
+ error?: TsArrError;
5
+ success: boolean;
6
+ }
7
+ export declare function handleApiResponse<T>(promise: Promise<{
8
+ data?: T;
9
+ error?: any;
10
+ response?: Response;
11
+ }>): Promise<ApiResponse<T>>;
12
+ export declare function validateResponse<T>(data: T, schema?: any): T;
13
+ //# sourceMappingURL=response.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response.d.ts","sourceRoot":"","sources":["../../src/core/response.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAmB,MAAM,aAAa,CAAC;AAE1D,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,wBAAsB,iBAAiB,CAAC,CAAC,EACvC,OAAO,EAAE,OAAO,CAAC;IAAE,IAAI,CAAC,EAAE,CAAC,CAAC;IAAC,KAAK,CAAC,EAAE,GAAG,CAAC;IAAC,QAAQ,CAAC,EAAE,QAAQ,CAAA;CAAE,CAAC,GAC/D,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAsBzB;AA4CD,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,CAAC,EAAE,GAAG,GAAG,CAAC,CAuB5D"}