tsarr 2.9.0 → 2.10.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.
Files changed (49) hide show
  1. package/README.md +7 -5
  2. package/dist/cli/commands/bazarr.d.ts +2 -0
  3. package/dist/cli/commands/bazarr.d.ts.map +1 -1
  4. package/dist/cli/commands/config.d.ts.map +1 -1
  5. package/dist/cli/commands/lidarr.d.ts +2 -0
  6. package/dist/cli/commands/lidarr.d.ts.map +1 -1
  7. package/dist/cli/commands/radarr.d.ts.map +1 -1
  8. package/dist/cli/commands/readarr.d.ts +2 -0
  9. package/dist/cli/commands/readarr.d.ts.map +1 -1
  10. package/dist/cli/commands/sonarr.d.ts.map +1 -1
  11. package/dist/cli/index.js +2138 -2405
  12. package/dist/clients/base.d.ts +136 -0
  13. package/dist/clients/base.d.ts.map +1 -0
  14. package/dist/clients/bazarr.d.ts +1 -1
  15. package/dist/clients/bazarr.d.ts.map +1 -1
  16. package/dist/clients/bazarr.js +100 -3
  17. package/dist/clients/lidarr.d.ts +24 -681
  18. package/dist/clients/lidarr.d.ts.map +1 -1
  19. package/dist/clients/lidarr.js +323 -196
  20. package/dist/clients/prowlarr.d.ts +25 -638
  21. package/dist/clients/prowlarr.d.ts.map +1 -1
  22. package/dist/clients/prowlarr.js +331 -175
  23. package/dist/clients/qbittorrent.d.ts +1 -17
  24. package/dist/clients/qbittorrent.d.ts.map +1 -1
  25. package/dist/clients/qbittorrent.js +97 -2
  26. package/dist/clients/radarr.d.ts +4 -657
  27. package/dist/clients/radarr.d.ts.map +1 -1
  28. package/dist/clients/radarr.js +323 -164
  29. package/dist/clients/readarr.d.ts +4 -635
  30. package/dist/clients/readarr.d.ts.map +1 -1
  31. package/dist/clients/readarr.js +323 -164
  32. package/dist/clients/seerr.d.ts +1 -1
  33. package/dist/clients/seerr.d.ts.map +1 -1
  34. package/dist/clients/seerr.js +100 -3
  35. package/dist/clients/sonarr.d.ts +181 -772
  36. package/dist/clients/sonarr.d.ts.map +1 -1
  37. package/dist/clients/sonarr.js +346 -157
  38. package/dist/core/client.d.ts +3 -0
  39. package/dist/core/client.d.ts.map +1 -1
  40. package/dist/core/fetch.d.ts +23 -0
  41. package/dist/core/fetch.d.ts.map +1 -0
  42. package/dist/core/index.d.ts +1 -0
  43. package/dist/core/index.d.ts.map +1 -1
  44. package/dist/core/types.d.ts +7 -0
  45. package/dist/core/types.d.ts.map +1 -1
  46. package/dist/index.js +1 -1
  47. package/dist/tsarr-2.10.0.tgz +0 -0
  48. package/package.json +2 -4
  49. package/dist/tsarr-2.9.0.tgz +0 -0
@@ -1,13 +1,20 @@
1
+ import type { RetryOptions } from './fetch';
1
2
  export interface ServarrClientConfig {
2
3
  baseUrl: string;
3
4
  apiKey: string;
5
+ /** Request timeout in milliseconds (default: 30000) */
4
6
  timeout?: number;
7
+ /** Retry configuration for transient failures */
8
+ retry?: RetryOptions;
5
9
  headers?: Record<string, string>;
6
10
  }
7
11
  export interface QBittorrentClientConfig {
8
12
  baseUrl: string;
9
13
  username: string;
10
14
  password: string;
15
+ /** Request timeout in milliseconds (default: 30000) */
11
16
  timeout?: number;
17
+ /** Retry configuration for transient failures */
18
+ retry?: RetryOptions;
12
19
  }
13
20
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iDAAiD;IACjD,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iDAAiD;IACjD,KAAK,CAAC,EAAE,YAAY,CAAC;CACtB"}
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- class t extends Error{code;statusCode;details;constructor(r,e,s,p){super(r);this.code=e;this.statusCode=s;this.details=p;this.name="TsarrError"}}class n extends t{constructor(r="Invalid or missing API key"){super(r,"API_KEY_ERROR",401);this.name="ApiKeyError"}}class o extends t{constructor(r,e){super(r,"CONNECTION_ERROR",void 0,e);this.name="ConnectionError"}}class i extends t{constructor(r,e){super(r,"VALIDATION_ERROR",void 0,e);this.name="ValidationError"}}class a extends t{constructor(r){super(`Resource not found: ${r}`,"NOT_FOUND",404);this.name="NotFoundError"}}function c(r){if(!r.apiKey)throw new n;if(!r.baseUrl)throw new o("No base URL provided");let e={...r,baseUrl:r.baseUrl.replace(/\/$/,"")};return{config:e,getHeaders:()=>({"X-Api-Key":e.apiKey,"Content-Type":"application/json",...e.headers}),getBaseUrl:()=>e.baseUrl}}function f(r){if(!r||r.trim()==="")throw new n;return r.trim()}function m(r){if(!r||r.trim()==="")throw new o("No base URL provided");try{new URL(r)}catch{throw new o(`Failed to connect: Invalid URL: ${r}`)}return r.trim().replace(/\/$/,"")}export{m as validateBaseUrl,f as validateApiKey,c as createServarrClient,i as ValidationError,t as TsarrError,b as SonarrClient,z as Sonarr,S as SeerrClient,V as Seerr,I as ReadarrClient,$ as Readarr,A as RadarrClient,P as Radarr,y as QBittorrentClient,F as QBittorrent,h as ProwlarrClient,k as Prowlarr,a as NotFoundError,E as LidarrClient,_ as Lidarr,o as ConnectionError,R as BazarrClient,K as Bazarr,n as ApiKeyError};
1
+ class p extends Error{code;statusCode;details;constructor(r,o,e,n){super(r);this.code=o;this.statusCode=e;this.details=n;this.name="TsarrError"}}class h extends p{constructor(r="Invalid or missing API key"){super(r,"API_KEY_ERROR",401);this.name="ApiKeyError"}}class c extends p{constructor(r,o){super(r,"CONNECTION_ERROR",void 0,o);this.name="ConnectionError"}}class K extends p{constructor(r,o){super(r,"VALIDATION_ERROR",void 0,o);this.name="ValidationError"}}class U extends p{constructor(r){super(`Resource not found: ${r}`,"NOT_FOUND",404);this.name="NotFoundError"}}var k=30000,B=3,$=1000,v=1e4,F=new Set([408,429,502,503,504]);function b(r){if(r instanceof DOMException&&r.name==="AbortError")return!1;if(r instanceof TypeError)return!0;return!1}function g(r,o,e){let n=o*2**r,s=n*0.2*Math.random();return Math.min(n+s,e)}function R(r={}){let o=r.timeout??k,e=r.retry?r.retry.maxRetries??B:0,n=r.retry?.initialDelayMs??$,s=r.retry?.maxDelayMs??v;return Object.assign(async(O,m)=>{let u,P=H(O,m);for(let d=0;d<=e;d++){let w=new AbortController,C=setTimeout(()=>w.abort(),o),f=m?.signal;if(f?.aborted)throw clearTimeout(C),f.reason??new DOMException("The operation was aborted.","AbortError");let N=()=>w.abort(f.reason);f?.addEventListener("abort",N,{once:!0});try{let t=await globalThis.fetch(new Request(P.clone(),{signal:w.signal}));if(clearTimeout(C),f?.removeEventListener("abort",N),F.has(t.status)&&d<e){u=new c(`Request failed with status ${t.status}`);let x=g(d,n,s);await new Promise((i)=>setTimeout(i,x));continue}return t}catch(t){if(clearTimeout(C),f?.removeEventListener("abort",N),f?.aborted)throw f.reason??new DOMException("The operation was aborted.","AbortError");if(t instanceof DOMException&&t.name==="AbortError"){if(u=new c(`Request timed out after ${o}ms`),d<e){let x=g(d,n,s);await new Promise((i)=>setTimeout(i,x));continue}throw u}if(b(t)&&d<e){u=t;let x=g(d,n,s);await new Promise((i)=>setTimeout(i,x));continue}throw t}}throw u},{preconnect:globalThis.fetch.preconnect?.bind(globalThis.fetch)})}function H(r,o){let{signal:e,...n}=o??{};if(r instanceof Request)return o?new Request(r.clone(),n):r.clone();return new Request(r,n)}var L=30000;function Z(r){if(!r.apiKey)throw new h;if(!r.baseUrl)throw new c("No base URL provided");let o={...r,baseUrl:r.baseUrl.replace(/\/$/,"")},e=o.timeout??L,n=R({timeout:e,retry:o.retry});return{config:o,getHeaders:()=>({"X-Api-Key":o.apiKey,"Content-Type":"application/json",...o.headers}),getBaseUrl:()=>o.baseUrl,getTimeout:()=>e,getFetch:()=>n}}function I(r){if(!r||r.trim()==="")throw new h;return r.trim()}function X(r){if(!r||r.trim()==="")throw new c("No base URL provided");let o;try{o=new URL(r)}catch{throw new c(`Failed to connect: Invalid URL: ${r}`)}if(o.protocol==="http:"&&!V(o.hostname))console.warn(`Warning: Using unencrypted HTTP for remote URL "${o.host}". Consider using HTTPS to protect your API key in transit.`);return r.trim().replace(/\/$/,"")}function V(r){return r==="localhost"||r==="127.0.0.1"||r==="::1"||r==="0.0.0.0"||r.endsWith(".local")||/^(10\.|172\.(1[6-9]|2\d|3[01])\.|192\.168\.)/.test(r)}export{X as validateBaseUrl,I as validateApiKey,Z as createServarrClient,R as createResilientFetch,K as ValidationError,p as TsarrError,dr as SonarrClient,wr as Sonarr,er as SeerrClient,hr as Seerr,or as ReadarrClient,pr as Readarr,l as RadarrClient,ir as Radarr,M as QBittorrentClient,xr as QBittorrent,E as ProwlarrClient,ur as Prowlarr,U as NotFoundError,S as LidarrClient,sr as Lidarr,c as ConnectionError,q as BazarrClient,cr as Bazarr,h as ApiKeyError};
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tsarr",
3
- "version": "2.9.0",
3
+ "version": "2.10.0",
4
4
  "author": "Robbe Verhelst",
5
5
  "repository": {
6
6
  "type": "git",
@@ -87,7 +87,7 @@
87
87
  },
88
88
  "description": "Type-safe TypeScript SDK for Servarr APIs (Radarr, Sonarr, etc.)",
89
89
  "engines": {
90
- "node": ">=24.14.1"
90
+ "node": ">=24.15.0"
91
91
  },
92
92
  "files": [
93
93
  "dist",
@@ -132,8 +132,6 @@
132
132
  "generate": "bun run scripts/generate.ts",
133
133
  "refresh:specs": "bun run scripts/refresh-specs.ts",
134
134
  "generate:types": "bun run scripts/generate-type-exports.ts",
135
- "generate:radarr": "bun run scripts/generate-radarr.ts",
136
- "generate:sonarr": "bun run scripts/generate-sonarr.ts",
137
135
  "clean": "rm -rf src/generated && rm -rf dist",
138
136
  "docs": "typedoc",
139
137
  "docs:serve": "typedoc --serve",
Binary file