@remote-app/transmission-client 0.0.13 → 0.0.14

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/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # @remote-app/transmission-client
2
2
 
3
+ ![npm](https://img.shields.io/npm/v/@remote-app/transmission-client)
4
+
3
5
  A lightweight Transmission RPC client.
4
6
 
5
7
  ## Install
package/dist/client.d.ts CHANGED
@@ -1,10 +1,10 @@
1
1
  import type { TransmissionConfig } from "./config";
2
- import type { Methods, Mapping } from "./rpc-call";
2
+ import type { Methods, Calls } from "./rpc-call";
3
3
  export declare class TransmissionClient {
4
4
  private config;
5
5
  private session;
6
6
  constructor(config: TransmissionConfig);
7
- request<M extends Methods>(body: Mapping[M][0] & {
7
+ request<M extends Methods>(req: Parameters<Calls[M]>[0] & {
8
8
  method: M;
9
- }): Promise<Mapping[M][1]>;
9
+ }): Promise<ReturnType<Calls[M]>>;
10
10
  }
package/dist/client.js CHANGED
@@ -14,7 +14,7 @@ export class TransmissionClient {
14
14
  this.config = config;
15
15
  this.session = null;
16
16
  }
17
- request(body) {
17
+ request(req) {
18
18
  var _a, _b;
19
19
  return __awaiter(this, void 0, void 0, function* () {
20
20
  const headers = new Headers({
@@ -30,14 +30,14 @@ export class TransmissionClient {
30
30
  const request = new Request(this.config.url, {
31
31
  method: "POST",
32
32
  headers,
33
- body: JSON.stringify(body),
33
+ body: JSON.stringify(req),
34
34
  });
35
35
  const response = yield fetch(request);
36
36
  if (response.status === 409) {
37
37
  this.session = response.headers.get("x-transmission-session-id");
38
- return yield this.request(body);
38
+ return yield this.request(req);
39
39
  }
40
- if (response.status >= 400) {
40
+ if (!response.ok) {
41
41
  throw new HTTPError(response.status, response.statusText);
42
42
  }
43
43
  const json = (yield response.json());
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export type { SessionGetResponse, SessionSetRequest, SessionStatsResponse, FreeSpaceRequest, FreeSpaceResponse, TorrentStartRequest, TorrentStartNowRequest, TorrentStopRequest, TorrentVerifyRequest, TorrentReannounceRequest, TorrentSetRequest, TorrentGetRequest, TorrentGetResponse, TorrentAddRequest, TorrentAddResponse, TorrentRemoveRequest, TorrentSetLocationRequest, } from "./rpc-calls";
1
+ export type { SessionGetRequest, SessionGetResponse, SessionSetRequest, SessionStatsResponse, FreeSpaceRequest, FreeSpaceResponse, TorrentStartRequest, TorrentStartNowRequest, TorrentStopRequest, TorrentVerifyRequest, TorrentReannounceRequest, TorrentSetRequest, TorrentGetRequest, TorrentGetResponse, TorrentAddRequest, TorrentAddResponse, TorrentRemoveRequest, TorrentSetLocationRequest, } from "./rpc-calls";
2
2
  export { TorrentStatus } from "./rpc-calls/torrent-get";
3
3
  export type { Torrent } from "./rpc-calls/torrent-get";
4
4
  export type { Methods } from "./rpc-call";
@@ -1,32 +1,51 @@
1
- import type { SessionGetResponse, SessionSetRequest, SessionStatsResponse, FreeSpaceRequest, FreeSpaceResponse, TorrentStartRequest, TorrentStartNowRequest, TorrentStopRequest, TorrentVerifyRequest, TorrentReannounceRequest, TorrentSetRequest, TorrentGetRequest, TorrentGetResponse, TorrentAddRequest, TorrentAddResponse, TorrentRemoveRequest, TorrentSetLocationRequest } from "./rpc-calls";
1
+ import type { SessionGetRequest, SessionGetResponse, SessionSetRequest, SessionStatsResponse, FreeSpaceRequest, FreeSpaceResponse, TorrentStartRequest, TorrentStartNowRequest, TorrentStopRequest, TorrentVerifyRequest, TorrentReannounceRequest, TorrentSetRequest, TorrentGetRequest, TorrentGetResponse, TorrentAddRequest, TorrentAddResponse, TorrentRemoveRequest, TorrentSetLocationRequest } from "./rpc-calls";
2
2
  declare type SessionMethods = "session-get" | "session-set" | "session-stats" | "free-space";
3
3
  declare type TorrentMethods = "torrent-start" | "torrent-start-now" | "torrent-stop" | "torrent-verify" | "torrent-reannounce" | "torrent-set" | "torrent-get" | "torrent-add" | "torrent-remove" | "torrent-set-location";
4
4
  export declare type Methods = SessionMethods | TorrentMethods;
5
- export declare type RPCRequest<A> = {
6
- method: Methods;
7
- arguments?: A;
5
+ export declare type RPCRequest<M, T> = {
6
+ method: M;
7
+ arguments?: T;
8
8
  tag?: number;
9
9
  };
10
- export declare type RPCResponse<B> = {
11
- result: "success" | string;
12
- arguments?: B;
10
+ export declare type RPCResponse<A> = {
11
+ result: string;
12
+ arguments: A;
13
13
  tag?: number;
14
14
  };
15
- export declare type RPCCall<A, B = void> = B extends void ? [RPCRequest<A>, void] : [RPCRequest<A>, RPCResponse<B>];
16
- export declare type Mapping = {
17
- "session-get": RPCCall<never, SessionGetResponse>;
18
- "session-set": RPCCall<SessionSetRequest>;
19
- "session-stats": RPCCall<never, SessionStatsResponse>;
20
- "free-space": RPCCall<FreeSpaceRequest, FreeSpaceResponse>;
21
- "torrent-start": RPCCall<TorrentStartRequest>;
22
- "torrent-start-now": RPCCall<TorrentStartNowRequest>;
23
- "torrent-stop": RPCCall<TorrentStopRequest>;
24
- "torrent-verify": RPCCall<TorrentVerifyRequest>;
25
- "torrent-reannounce": RPCCall<TorrentReannounceRequest>;
26
- "torrent-remove": RPCCall<TorrentRemoveRequest>;
27
- "torrent-set-location": RPCCall<TorrentSetLocationRequest>;
28
- "torrent-get": RPCCall<TorrentGetRequest, TorrentGetResponse>;
29
- "torrent-add": RPCCall<TorrentAddRequest, TorrentAddResponse>;
30
- "torrent-set": RPCCall<TorrentSetRequest>;
15
+ declare type RPCCall<M extends Methods, TRequest, TResponse = never> = TResponse extends never ? (request: RPCRequest<M, TRequest>) => void : (request: RPCRequest<M, TRequest>) => RPCResponse<TResponse>;
16
+ export declare type MethodRequest = {
17
+ "session-get": SessionGetRequest;
18
+ "session-set": SessionSetRequest;
19
+ "session-stats": never;
20
+ "free-space": FreeSpaceRequest;
21
+ "torrent-start": TorrentStartRequest;
22
+ "torrent-start-now": TorrentStartNowRequest;
23
+ "torrent-stop": TorrentStopRequest;
24
+ "torrent-verify": TorrentVerifyRequest;
25
+ "torrent-reannounce": TorrentReannounceRequest;
26
+ "torrent-remove": TorrentRemoveRequest;
27
+ "torrent-set-location": TorrentSetLocationRequest;
28
+ "torrent-get": TorrentGetRequest;
29
+ "torrent-add": TorrentAddRequest;
30
+ "torrent-set": TorrentSetRequest;
31
+ };
32
+ export declare type MethodResponse = {
33
+ "session-get": SessionGetResponse;
34
+ "session-set": SessionSetRequest;
35
+ "session-stats": SessionStatsResponse;
36
+ "free-space": FreeSpaceResponse;
37
+ "torrent-start": TorrentStartRequest;
38
+ "torrent-start-now": TorrentStartNowRequest;
39
+ "torrent-stop": TorrentStopRequest;
40
+ "torrent-verify": TorrentVerifyRequest;
41
+ "torrent-reannounce": TorrentReannounceRequest;
42
+ "torrent-remove": TorrentRemoveRequest;
43
+ "torrent-set-location": TorrentSetLocationRequest;
44
+ "torrent-get": TorrentGetResponse;
45
+ "torrent-add": TorrentAddResponse;
46
+ "torrent-set": TorrentSetRequest;
47
+ };
48
+ export declare type Calls = {
49
+ [K in Methods]: RPCCall<K, MethodRequest[K], MethodResponse[K]>;
31
50
  };
32
51
  export {};
@@ -1,4 +1,4 @@
1
- export type { Response as SessionGetResponse } from "./session-get";
1
+ export type { Request as SessionGetRequest, Response as SessionGetResponse, } from "./session-get";
2
2
  export type { Request as SessionSetRequest } from "./session-set";
3
3
  export type { Response as SessionStatsResponse } from "./session-stats";
4
4
  export type { Request as FreeSpaceRequest, Response as FreeSpaceResponse, } from "./free-space";
@@ -1,3 +1,4 @@
1
+ import { Fields } from "./utils";
1
2
  declare type Units = {
2
3
  "speed-units": string[];
3
4
  "speed-bytes": number;
@@ -56,4 +57,5 @@ export declare type Response = {
56
57
  "utp-enabled": boolean;
57
58
  version: string;
58
59
  };
60
+ export declare type Request = Partial<Fields<keyof Response>>;
59
61
  export {};
@@ -1,4 +1,4 @@
1
- import { Identifiers } from "./utils";
1
+ import { Identifiers, Fields } from "./utils";
2
2
  declare type File = {
3
3
  bytesCompleted: number;
4
4
  length: number;
@@ -162,7 +162,5 @@ export declare type Torrent = {
162
162
  export declare type Response = {
163
163
  torrents: Torrent[];
164
164
  };
165
- export declare type Request = Identifiers & {
166
- fields: (keyof Torrent)[];
167
- };
165
+ export declare type Request = Identifiers & Fields<keyof Torrent>;
168
166
  export {};
@@ -1,3 +1,6 @@
1
1
  export declare type Identifiers = {
2
2
  ids?: number | (number | string)[] | "recently-active";
3
3
  };
4
+ export declare type Fields<T> = {
5
+ fields: T[];
6
+ };
package/package.json CHANGED
@@ -1,8 +1,12 @@
1
1
  {
2
2
  "name": "@remote-app/transmission-client",
3
- "version": "0.0.13",
3
+ "version": "0.0.14",
4
4
  "description": "Transmission RPC client",
5
- "keywords": ["transmission", "rpc", "client"],
5
+ "keywords": [
6
+ "transmission",
7
+ "rpc",
8
+ "client"
9
+ ],
6
10
  "license": "MIT",
7
11
  "repository": {
8
12
  "type": "git",
@@ -12,7 +16,9 @@
12
16
  "main": "dist/index.js",
13
17
  "types": "dist/index.d.ts",
14
18
  "react-native": "src/index.ts",
15
- "files": ["dist"],
19
+ "files": [
20
+ "dist"
21
+ ],
16
22
  "scripts": {
17
23
  "build": "tsc --build"
18
24
  },