@remote-app/transmission-client 0.0.12 → 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 ADDED
@@ -0,0 +1,61 @@
1
+ # @remote-app/transmission-client
2
+
3
+ ![npm](https://img.shields.io/npm/v/@remote-app/transmission-client)
4
+
5
+ A lightweight Transmission RPC client.
6
+
7
+ ## Install
8
+
9
+ ```bash
10
+ $ npm install @remote-app/transmission-client
11
+ ```
12
+
13
+ ## Supported methods
14
+
15
+ ### Torrent methods
16
+ - Torrent actions
17
+ - [x] torrent-start
18
+ - [x] torrent-start-now
19
+ - [x] torrent-stop
20
+ - [x] torrent-verify
21
+ - [x] torrent-reannounce
22
+ - Torrent mutator
23
+ - [x] torrent-set
24
+ - Torrent accessor
25
+ - [x] torrent-get
26
+ - Torrent addition
27
+ - [x] torrent-add
28
+ - Torrent removal
29
+ - [x] torrent-remove
30
+ - Move torrent
31
+ - [x] torrent-set-location
32
+ - Renaming torrent
33
+ - [ ] torrent-rename-path
34
+
35
+ ### Session methods
36
+ - Session accessor
37
+ - [x] session-get
38
+ - Session mutator
39
+ - [x] session-set
40
+ - Session statistics
41
+ - [x] session-stats
42
+ - Session shutdown
43
+ - [ ] session-close
44
+
45
+ ### Blocklist
46
+ - Mutator
47
+ - [ ] blocklist-update
48
+
49
+ ### Port
50
+ - Check
51
+ - [ ] port-test
52
+
53
+ ### Space
54
+ - Check
55
+ - [x] free-space
56
+
57
+ ### Groups
58
+ - Group accessor
59
+ - [ ] group-get
60
+ - Group mutator
61
+ - [ ] group-set
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,17 +1,24 @@
1
1
  {
2
2
  "name": "@remote-app/transmission-client",
3
- "version": "0.0.12",
3
+ "version": "0.0.14",
4
4
  "description": "Transmission RPC client",
5
+ "keywords": [
6
+ "transmission",
7
+ "rpc",
8
+ "client"
9
+ ],
5
10
  "license": "MIT",
6
11
  "repository": {
7
12
  "type": "git",
8
- "url": "https://github.com/jgalat/remote-app",
13
+ "url": "git+https://github.com/jgalat/remote-app.git",
9
14
  "directory": "packages/transmission-client"
10
15
  },
11
16
  "main": "dist/index.js",
12
17
  "types": "dist/index.d.ts",
13
18
  "react-native": "src/index.ts",
14
- "files": ["dist"],
19
+ "files": [
20
+ "dist"
21
+ ],
15
22
  "scripts": {
16
23
  "build": "tsc --build"
17
24
  },