tsarr 2.9.1 → 2.11.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 +120 -233
- package/dist/cli/commands/doctor.d.ts.map +1 -1
- package/dist/cli/commands/manual-import.d.ts +30 -0
- package/dist/cli/commands/manual-import.d.ts.map +1 -0
- package/dist/cli/commands/radarr.d.ts.map +1 -1
- package/dist/cli/commands/sonarr.d.ts.map +1 -1
- package/dist/cli/index.js +5230 -4783
- package/dist/cli/index.js.map +133 -0
- package/dist/clients/base.d.ts +8 -3
- package/dist/clients/base.d.ts.map +1 -1
- package/dist/clients/bazarr.d.ts +125 -124
- package/dist/clients/bazarr.d.ts.map +1 -1
- package/dist/clients/bazarr.js +183 -100
- package/dist/clients/bazarr.js.map +22 -0
- package/dist/clients/lidarr.d.ts +148 -147
- package/dist/clients/lidarr.d.ts.map +1 -1
- package/dist/clients/lidarr.js +190 -102
- package/dist/clients/lidarr.js.map +23 -0
- package/dist/clients/prowlarr.d.ts +30 -29
- package/dist/clients/prowlarr.d.ts.map +1 -1
- package/dist/clients/prowlarr.js +190 -102
- package/dist/clients/prowlarr.js.map +23 -0
- package/dist/clients/qbittorrent.d.ts +3 -1
- package/dist/clients/qbittorrent.d.ts.map +1 -1
- package/dist/clients/qbittorrent.js +213 -107
- package/dist/clients/qbittorrent.js.map +21 -0
- package/dist/clients/radarr.d.ts +195 -150
- package/dist/clients/radarr.d.ts.map +1 -1
- package/dist/clients/radarr.js +230 -102
- package/dist/clients/radarr.js.map +23 -0
- package/dist/clients/readarr.d.ts +150 -149
- package/dist/clients/readarr.d.ts.map +1 -1
- package/dist/clients/readarr.js +190 -102
- package/dist/clients/readarr.js.map +23 -0
- package/dist/clients/seerr-types.d.ts +1 -1
- package/dist/clients/seerr-types.d.ts.map +1 -1
- package/dist/clients/seerr.d.ts +17 -16
- package/dist/clients/seerr.d.ts.map +1 -1
- package/dist/clients/seerr.js +183 -100
- package/dist/clients/seerr.js.map +22 -0
- package/dist/clients/sonarr.d.ts +203 -168
- package/dist/clients/sonarr.d.ts.map +1 -1
- package/dist/clients/sonarr.js +206 -112
- package/dist/clients/sonarr.js.map +23 -0
- package/dist/core/client.d.ts +2 -0
- package/dist/core/client.d.ts.map +1 -1
- package/dist/core/fetch.d.ts +23 -0
- package/dist/core/fetch.d.ts.map +1 -0
- package/dist/core/index.d.ts +1 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/types.d.ts +7 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/generated/bazarr/client/client.gen.d.ts.map +1 -1
- package/dist/generated/bazarr/client/types.gen.d.ts +5 -2
- package/dist/generated/bazarr/client/types.gen.d.ts.map +1 -1
- package/dist/generated/bazarr/client/utils.gen.d.ts +5 -1
- package/dist/generated/bazarr/client/utils.gen.d.ts.map +1 -1
- package/dist/generated/lidarr/client/client.gen.d.ts.map +1 -1
- package/dist/generated/lidarr/client/types.gen.d.ts +5 -2
- package/dist/generated/lidarr/client/types.gen.d.ts.map +1 -1
- package/dist/generated/lidarr/client/utils.gen.d.ts +5 -1
- package/dist/generated/lidarr/client/utils.gen.d.ts.map +1 -1
- package/dist/generated/prowlarr/client/client.gen.d.ts.map +1 -1
- package/dist/generated/prowlarr/client/types.gen.d.ts +5 -2
- package/dist/generated/prowlarr/client/types.gen.d.ts.map +1 -1
- package/dist/generated/prowlarr/client/utils.gen.d.ts +5 -1
- package/dist/generated/prowlarr/client/utils.gen.d.ts.map +1 -1
- package/dist/generated/qbittorrent/client/client.gen.d.ts.map +1 -1
- package/dist/generated/qbittorrent/client/types.gen.d.ts +5 -2
- package/dist/generated/qbittorrent/client/types.gen.d.ts.map +1 -1
- package/dist/generated/qbittorrent/client/utils.gen.d.ts +5 -1
- package/dist/generated/qbittorrent/client/utils.gen.d.ts.map +1 -1
- package/dist/generated/radarr/client/client.gen.d.ts.map +1 -1
- package/dist/generated/radarr/client/types.gen.d.ts +5 -2
- package/dist/generated/radarr/client/types.gen.d.ts.map +1 -1
- package/dist/generated/radarr/client/utils.gen.d.ts +5 -1
- package/dist/generated/radarr/client/utils.gen.d.ts.map +1 -1
- package/dist/generated/readarr/client/client.gen.d.ts.map +1 -1
- package/dist/generated/readarr/client/types.gen.d.ts +5 -2
- package/dist/generated/readarr/client/types.gen.d.ts.map +1 -1
- package/dist/generated/readarr/client/utils.gen.d.ts +5 -1
- package/dist/generated/readarr/client/utils.gen.d.ts.map +1 -1
- package/dist/generated/seerr/client/client.gen.d.ts.map +1 -1
- package/dist/generated/seerr/client/types.gen.d.ts +5 -2
- package/dist/generated/seerr/client/types.gen.d.ts.map +1 -1
- package/dist/generated/seerr/client/utils.gen.d.ts +5 -1
- package/dist/generated/seerr/client/utils.gen.d.ts.map +1 -1
- package/dist/generated/seerr/index.d.ts +2 -2
- package/dist/generated/seerr/index.d.ts.map +1 -1
- package/dist/generated/seerr/sdk.gen.d.ts +13 -1
- package/dist/generated/seerr/sdk.gen.d.ts.map +1 -1
- package/dist/generated/seerr/types.gen.d.ts +78 -7
- package/dist/generated/seerr/types.gen.d.ts.map +1 -1
- package/dist/generated/sonarr/client/client.gen.d.ts.map +1 -1
- package/dist/generated/sonarr/client/types.gen.d.ts +5 -2
- package/dist/generated/sonarr/client/types.gen.d.ts.map +1 -1
- package/dist/generated/sonarr/client/utils.gen.d.ts +5 -1
- package/dist/generated/sonarr/client/utils.gen.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +12 -0
- package/dist/tsarr-2.11.0.tgz +0 -0
- package/package.json +18 -9
- package/dist/tsarr-2.9.1.tgz +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lidarr.d.ts","sourceRoot":"","sources":["../../src/clients/lidarr.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"lidarr.d.ts","sourceRoot":"","sources":["../../src/clients/lidarr.ts"],"names":[],"mappings":"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"}
|
package/dist/clients/lidarr.js
CHANGED
|
@@ -26,6 +26,93 @@ class ConnectionError extends TsarrError {
|
|
|
26
26
|
}
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
+
// src/core/fetch.ts
|
|
30
|
+
var DEFAULT_TIMEOUT = 30000;
|
|
31
|
+
var DEFAULT_MAX_RETRIES = 3;
|
|
32
|
+
var DEFAULT_INITIAL_DELAY = 1000;
|
|
33
|
+
var DEFAULT_MAX_DELAY = 1e4;
|
|
34
|
+
var RETRYABLE_STATUS_CODES = new Set([408, 429, 502, 503, 504]);
|
|
35
|
+
function isRetryable(error) {
|
|
36
|
+
if (error instanceof DOMException && error.name === "AbortError") {
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
if (error instanceof TypeError) {
|
|
40
|
+
return true;
|
|
41
|
+
}
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
function getRetryDelay(attempt, initialDelayMs, maxDelayMs) {
|
|
45
|
+
const delay = initialDelayMs * 2 ** attempt;
|
|
46
|
+
const jitter = delay * 0.2 * Math.random();
|
|
47
|
+
return Math.min(delay + jitter, maxDelayMs);
|
|
48
|
+
}
|
|
49
|
+
function createResilientFetch(options = {}) {
|
|
50
|
+
const timeout = options.timeout ?? DEFAULT_TIMEOUT;
|
|
51
|
+
const maxRetries = options.retry ? options.retry.maxRetries ?? DEFAULT_MAX_RETRIES : 0;
|
|
52
|
+
const initialDelayMs = options.retry?.initialDelayMs ?? DEFAULT_INITIAL_DELAY;
|
|
53
|
+
const maxDelayMs = options.retry?.maxDelayMs ?? DEFAULT_MAX_DELAY;
|
|
54
|
+
const resilientFetch = async (input, init) => {
|
|
55
|
+
let lastError;
|
|
56
|
+
const template = createRequestTemplate(input, init);
|
|
57
|
+
for (let attempt = 0;attempt <= maxRetries; attempt++) {
|
|
58
|
+
const controller = new AbortController;
|
|
59
|
+
const timeoutId = setTimeout(() => controller.abort(), timeout);
|
|
60
|
+
const callerSignal = init?.signal;
|
|
61
|
+
if (callerSignal?.aborted) {
|
|
62
|
+
clearTimeout(timeoutId);
|
|
63
|
+
throw callerSignal.reason ?? new DOMException("The operation was aborted.", "AbortError");
|
|
64
|
+
}
|
|
65
|
+
const onCallerAbort = () => controller.abort(callerSignal.reason);
|
|
66
|
+
callerSignal?.addEventListener("abort", onCallerAbort, { once: true });
|
|
67
|
+
try {
|
|
68
|
+
const response = await globalThis.fetch(new Request(template.clone(), { signal: controller.signal }));
|
|
69
|
+
clearTimeout(timeoutId);
|
|
70
|
+
callerSignal?.removeEventListener("abort", onCallerAbort);
|
|
71
|
+
if (RETRYABLE_STATUS_CODES.has(response.status) && attempt < maxRetries) {
|
|
72
|
+
lastError = new ConnectionError(`Request failed with status ${response.status}`);
|
|
73
|
+
const delay = getRetryDelay(attempt, initialDelayMs, maxDelayMs);
|
|
74
|
+
await new Promise((resolve) => setTimeout(resolve, delay));
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
return response;
|
|
78
|
+
} catch (error) {
|
|
79
|
+
clearTimeout(timeoutId);
|
|
80
|
+
callerSignal?.removeEventListener("abort", onCallerAbort);
|
|
81
|
+
if (callerSignal?.aborted) {
|
|
82
|
+
throw callerSignal.reason ?? new DOMException("The operation was aborted.", "AbortError");
|
|
83
|
+
}
|
|
84
|
+
if (error instanceof DOMException && error.name === "AbortError") {
|
|
85
|
+
lastError = new ConnectionError(`Request timed out after ${timeout}ms`);
|
|
86
|
+
if (attempt < maxRetries) {
|
|
87
|
+
const delay = getRetryDelay(attempt, initialDelayMs, maxDelayMs);
|
|
88
|
+
await new Promise((resolve) => setTimeout(resolve, delay));
|
|
89
|
+
continue;
|
|
90
|
+
}
|
|
91
|
+
throw lastError;
|
|
92
|
+
}
|
|
93
|
+
if (isRetryable(error) && attempt < maxRetries) {
|
|
94
|
+
lastError = error;
|
|
95
|
+
const delay = getRetryDelay(attempt, initialDelayMs, maxDelayMs);
|
|
96
|
+
await new Promise((resolve) => setTimeout(resolve, delay));
|
|
97
|
+
continue;
|
|
98
|
+
}
|
|
99
|
+
throw error;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
throw lastError;
|
|
103
|
+
};
|
|
104
|
+
return Object.assign(resilientFetch, {
|
|
105
|
+
preconnect: globalThis.fetch.preconnect?.bind(globalThis.fetch)
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
function createRequestTemplate(input, init) {
|
|
109
|
+
const { signal: _signal, ...requestInit } = init ?? {};
|
|
110
|
+
if (input instanceof Request) {
|
|
111
|
+
return init ? new Request(input.clone(), requestInit) : input.clone();
|
|
112
|
+
}
|
|
113
|
+
return new Request(input, requestInit);
|
|
114
|
+
}
|
|
115
|
+
|
|
29
116
|
// src/core/client.ts
|
|
30
117
|
var DEFAULT_TIMEOUT_MS = 30000;
|
|
31
118
|
function createServarrClient(config) {
|
|
@@ -40,6 +127,10 @@ function createServarrClient(config) {
|
|
|
40
127
|
baseUrl: config.baseUrl.replace(/\/$/, "")
|
|
41
128
|
};
|
|
42
129
|
const timeoutMs = validatedConfig.timeout ?? DEFAULT_TIMEOUT_MS;
|
|
130
|
+
const resilientFetch = createResilientFetch({
|
|
131
|
+
timeout: timeoutMs,
|
|
132
|
+
retry: validatedConfig.retry
|
|
133
|
+
});
|
|
43
134
|
return {
|
|
44
135
|
config: validatedConfig,
|
|
45
136
|
getHeaders: () => ({
|
|
@@ -48,22 +139,28 @@ function createServarrClient(config) {
|
|
|
48
139
|
...validatedConfig.headers
|
|
49
140
|
}),
|
|
50
141
|
getBaseUrl: () => validatedConfig.baseUrl,
|
|
51
|
-
getTimeout: () => timeoutMs
|
|
142
|
+
getTimeout: () => timeoutMs,
|
|
143
|
+
getFetch: () => resilientFetch
|
|
52
144
|
};
|
|
53
145
|
}
|
|
54
146
|
|
|
55
147
|
// src/clients/base.ts
|
|
56
148
|
class ServarrBaseClient {
|
|
57
149
|
clientConfig;
|
|
58
|
-
|
|
150
|
+
rawClient;
|
|
151
|
+
constructor(config, rawClient) {
|
|
152
|
+
this.rawClient = rawClient;
|
|
59
153
|
this.clientConfig = createServarrClient(config);
|
|
60
154
|
this.configureRawClient();
|
|
61
155
|
}
|
|
156
|
+
configureRawClient() {
|
|
157
|
+
this.rawClient.setConfig(this.getClientConfig());
|
|
158
|
+
}
|
|
62
159
|
getClientConfig() {
|
|
63
160
|
return {
|
|
64
161
|
baseUrl: this.clientConfig.getBaseUrl(),
|
|
65
162
|
headers: this.clientConfig.getHeaders(),
|
|
66
|
-
|
|
163
|
+
fetch: this.clientConfig.getFetch()
|
|
67
164
|
};
|
|
68
165
|
}
|
|
69
166
|
async getSystemStatus() {
|
|
@@ -838,126 +935,115 @@ var createClient = (config = {}) => {
|
|
|
838
935
|
return { opts: resolvedOpts, url };
|
|
839
936
|
};
|
|
840
937
|
const request = async (options) => {
|
|
841
|
-
const
|
|
842
|
-
const
|
|
843
|
-
|
|
844
|
-
...opts,
|
|
845
|
-
body: getValidRequestBody(opts)
|
|
846
|
-
};
|
|
847
|
-
let request2 = new Request(url, requestInit);
|
|
848
|
-
for (const fn of interceptors.request.fns) {
|
|
849
|
-
if (fn) {
|
|
850
|
-
request2 = await fn(request2, opts);
|
|
851
|
-
}
|
|
852
|
-
}
|
|
853
|
-
const _fetch = opts.fetch;
|
|
938
|
+
const throwOnError = options.throwOnError ?? _config.throwOnError;
|
|
939
|
+
const responseStyle = options.responseStyle ?? _config.responseStyle;
|
|
940
|
+
let request2;
|
|
854
941
|
let response;
|
|
855
942
|
try {
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
943
|
+
const { opts, url } = await beforeRequest(options);
|
|
944
|
+
const requestInit = {
|
|
945
|
+
redirect: "follow",
|
|
946
|
+
...opts,
|
|
947
|
+
body: getValidRequestBody(opts)
|
|
948
|
+
};
|
|
949
|
+
request2 = new Request(url, requestInit);
|
|
950
|
+
for (const fn of interceptors.request.fns) {
|
|
860
951
|
if (fn) {
|
|
861
|
-
|
|
952
|
+
request2 = await fn(request2, opts);
|
|
862
953
|
}
|
|
863
954
|
}
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
955
|
+
const _fetch = opts.fetch;
|
|
956
|
+
response = await _fetch(request2);
|
|
957
|
+
for (const fn of interceptors.response.fns) {
|
|
958
|
+
if (fn) {
|
|
959
|
+
response = await fn(response, request2, opts);
|
|
960
|
+
}
|
|
867
961
|
}
|
|
868
|
-
|
|
869
|
-
error: finalError2,
|
|
962
|
+
const result = {
|
|
870
963
|
request: request2,
|
|
871
|
-
response
|
|
964
|
+
response
|
|
872
965
|
};
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
966
|
+
if (response.ok) {
|
|
967
|
+
const parseAs = (opts.parseAs === "auto" ? getParseAs(response.headers.get("Content-Type")) : opts.parseAs) ?? "json";
|
|
968
|
+
if (response.status === 204 || response.headers.get("Content-Length") === "0") {
|
|
969
|
+
let emptyData;
|
|
970
|
+
switch (parseAs) {
|
|
971
|
+
case "arrayBuffer":
|
|
972
|
+
case "blob":
|
|
973
|
+
case "text":
|
|
974
|
+
emptyData = await response[parseAs]();
|
|
975
|
+
break;
|
|
976
|
+
case "formData":
|
|
977
|
+
emptyData = new FormData;
|
|
978
|
+
break;
|
|
979
|
+
case "stream":
|
|
980
|
+
emptyData = response.body;
|
|
981
|
+
break;
|
|
982
|
+
case "json":
|
|
983
|
+
default:
|
|
984
|
+
emptyData = {};
|
|
985
|
+
break;
|
|
986
|
+
}
|
|
987
|
+
return opts.responseStyle === "data" ? emptyData : {
|
|
988
|
+
data: emptyData,
|
|
989
|
+
...result
|
|
990
|
+
};
|
|
991
|
+
}
|
|
992
|
+
let data;
|
|
887
993
|
switch (parseAs) {
|
|
888
994
|
case "arrayBuffer":
|
|
889
995
|
case "blob":
|
|
996
|
+
case "formData":
|
|
890
997
|
case "text":
|
|
891
|
-
|
|
998
|
+
data = await response[parseAs]();
|
|
892
999
|
break;
|
|
893
|
-
case "
|
|
894
|
-
|
|
1000
|
+
case "json": {
|
|
1001
|
+
const text = await response.text();
|
|
1002
|
+
data = text ? JSON.parse(text) : {};
|
|
895
1003
|
break;
|
|
1004
|
+
}
|
|
896
1005
|
case "stream":
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
emptyData = {};
|
|
902
|
-
break;
|
|
1006
|
+
return opts.responseStyle === "data" ? response.body : {
|
|
1007
|
+
data: response.body,
|
|
1008
|
+
...result
|
|
1009
|
+
};
|
|
903
1010
|
}
|
|
904
|
-
|
|
905
|
-
|
|
1011
|
+
if (parseAs === "json") {
|
|
1012
|
+
if (opts.responseValidator) {
|
|
1013
|
+
await opts.responseValidator(data);
|
|
1014
|
+
}
|
|
1015
|
+
if (opts.responseTransformer) {
|
|
1016
|
+
data = await opts.responseTransformer(data);
|
|
1017
|
+
}
|
|
1018
|
+
}
|
|
1019
|
+
return opts.responseStyle === "data" ? data : {
|
|
1020
|
+
data,
|
|
906
1021
|
...result
|
|
907
1022
|
};
|
|
908
1023
|
}
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
break;
|
|
1024
|
+
const textError = await response.text();
|
|
1025
|
+
let jsonError;
|
|
1026
|
+
try {
|
|
1027
|
+
jsonError = JSON.parse(textError);
|
|
1028
|
+
} catch {}
|
|
1029
|
+
throw jsonError ?? textError;
|
|
1030
|
+
} catch (error) {
|
|
1031
|
+
let finalError = error;
|
|
1032
|
+
for (const fn of interceptors.error.fns) {
|
|
1033
|
+
if (fn) {
|
|
1034
|
+
finalError = await fn(finalError, response, request2, options);
|
|
921
1035
|
}
|
|
922
|
-
case "stream":
|
|
923
|
-
return opts.responseStyle === "data" ? response.body : {
|
|
924
|
-
data: response.body,
|
|
925
|
-
...result
|
|
926
|
-
};
|
|
927
1036
|
}
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
}
|
|
932
|
-
if (opts.responseTransformer) {
|
|
933
|
-
data = await opts.responseTransformer(data);
|
|
934
|
-
}
|
|
1037
|
+
finalError = finalError || {};
|
|
1038
|
+
if (throwOnError) {
|
|
1039
|
+
throw finalError;
|
|
935
1040
|
}
|
|
936
|
-
return
|
|
937
|
-
|
|
938
|
-
|
|
1041
|
+
return responseStyle === "data" ? undefined : {
|
|
1042
|
+
error: finalError,
|
|
1043
|
+
request: request2,
|
|
1044
|
+
response
|
|
939
1045
|
};
|
|
940
1046
|
}
|
|
941
|
-
const textError = await response.text();
|
|
942
|
-
let jsonError;
|
|
943
|
-
try {
|
|
944
|
-
jsonError = JSON.parse(textError);
|
|
945
|
-
} catch {}
|
|
946
|
-
const error = jsonError ?? textError;
|
|
947
|
-
let finalError = error;
|
|
948
|
-
for (const fn of interceptors.error.fns) {
|
|
949
|
-
if (fn) {
|
|
950
|
-
finalError = await fn(error, response, request2, opts);
|
|
951
|
-
}
|
|
952
|
-
}
|
|
953
|
-
finalError = finalError || {};
|
|
954
|
-
if (opts.throwOnError) {
|
|
955
|
-
throw finalError;
|
|
956
|
-
}
|
|
957
|
-
return opts.responseStyle === "data" ? undefined : {
|
|
958
|
-
error: finalError,
|
|
959
|
-
...result
|
|
960
|
-
};
|
|
961
1047
|
};
|
|
962
1048
|
const makeMethodFn = (method) => (options) => request({ ...options, method });
|
|
963
1049
|
const makeSseFn = (method) => async (options) => {
|
|
@@ -965,7 +1051,6 @@ var createClient = (config = {}) => {
|
|
|
965
1051
|
return createSseClient({
|
|
966
1052
|
...opts,
|
|
967
1053
|
body: opts.body,
|
|
968
|
-
headers: opts.headers,
|
|
969
1054
|
method,
|
|
970
1055
|
onRequest: async (url2, init) => {
|
|
971
1056
|
let request2 = new Request(url2, init);
|
|
@@ -2312,8 +2397,8 @@ class LidarrClient extends ServarrBaseClient {
|
|
|
2312
2397
|
getUiConfigById: getApiV1ConfigUiById,
|
|
2313
2398
|
updateUiConfig: putApiV1ConfigUiById
|
|
2314
2399
|
};
|
|
2315
|
-
|
|
2316
|
-
client
|
|
2400
|
+
constructor(config) {
|
|
2401
|
+
super(config, client);
|
|
2317
2402
|
}
|
|
2318
2403
|
async getArtists() {
|
|
2319
2404
|
return getApiV1Artist();
|
|
@@ -2646,3 +2731,6 @@ class LidarrClient extends ServarrBaseClient {
|
|
|
2646
2731
|
export {
|
|
2647
2732
|
LidarrClient
|
|
2648
2733
|
};
|
|
2734
|
+
|
|
2735
|
+
//# debugId=501132D0C1BE1CB564756E2164756E21
|
|
2736
|
+
//# sourceMappingURL=lidarr.js.map
|