Skip to content

Commit 160e62e

Browse files
authored
Merge pull request #5 from KurtThiemann/pools
Add support for credit pool API methods
2 parents 1c44027 + 7b18048 commit 160e62e

File tree

15 files changed

+378
-54
lines changed

15 files changed

+378
-54
lines changed

README.md

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -301,15 +301,15 @@ let file = server.getFile("server.properties");
301301
let config = file.getConfig();
302302
```
303303

304-
#### Get config file options
304+
##### Get config file options
305305
```js
306306
let options = await config.getOptions();
307307
for(let [key, option] of options) {
308308
console.log(key, option.getValue());
309309
}
310310
```
311311

312-
#### Update config file options
312+
##### Update config file options
313313
```js
314314
let options = await config.getOptions();
315315

@@ -325,6 +325,38 @@ let options = await config.getOptions();
325325
console.log(options.get("difficulty").getOptions());
326326
```
327327

328+
#### Credit pools
329+
Credit pools allow sharing the costs of a server between multiple users.
330+
331+
##### List credit pools
332+
```js
333+
let pools = await client.getPools();
334+
console.log(pools);
335+
```
336+
337+
##### Create a pool object by ID
338+
```js
339+
let server = client.pool(id);
340+
```
341+
342+
##### Get pool information
343+
```js
344+
await pool.get();
345+
console.log(pool.name + ": " + pool.credits);
346+
```
347+
348+
##### Get pool members
349+
```js
350+
let members = await pool.getMembers();
351+
console.log(members);
352+
```
353+
354+
##### Get pool servers
355+
```js
356+
let servers = await pool.getServers();
357+
console.log(servers);
358+
```
359+
328360
### Websocket API
329361
The websocket API allows a constant connection to our websocket service to receive
330362
events in real time without polling (e.g. trying to get the server status every few seconds).

index.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,7 @@ module.exports = {
55
ServerStatus: require('./src/Server/ServerStatus'),
66
Request: require('./src/Request/Request'),
77
Response: require('./src/Response/Response'),
8-
ConfigOptionType: require('./src/Server/Config/ConfigOptionType')
8+
ConfigOptionType: require('./src/Server/Config/ConfigOptionType'),
9+
Pool: require('./src/Billing/Pool/Pool'),
10+
PoolMember: require('./src/Billing/Pool/PoolMember')
911
}

src/Billing/Pool/Pool.js

Lines changed: 137 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,137 @@
1+
const GetPoolRequest = require("../../Request/Billing/Pool/GetPoolRequest.js");
2+
const GetPoolMembersRequest = require("../../Request/Billing/Pool/GetPoolMembersRequest.js");
3+
const GetPoolServersRequest = require("../../Request/Billing/Pool/GetPoolServersRequest.js");
4+
5+
class Pool {
6+
/**
7+
* @type {Client}
8+
* @private
9+
*/
10+
#client;
11+
12+
/**
13+
* Pool ID
14+
*
15+
* @type {string}
16+
*/
17+
id;
18+
19+
/**
20+
* Pool name
21+
*
22+
* @type {string}
23+
*/
24+
name;
25+
26+
/**
27+
* Pool credit balance
28+
*
29+
* @type {number}
30+
*/
31+
credits;
32+
33+
/**
34+
* Pool server count
35+
*
36+
* @type {number}
37+
*/
38+
servers;
39+
40+
/**
41+
* Pool owner ID
42+
*
43+
* @type {string}
44+
*/
45+
owner;
46+
47+
/**
48+
* Is pool owner
49+
*
50+
* @type {boolean}
51+
*/
52+
isOwner;
53+
54+
/**
55+
* Pool member count
56+
*
57+
* @type {number}
58+
*/
59+
members;
60+
61+
/**
62+
* Share of this pool owned by the current account
63+
*
64+
* @type {number}
65+
*/
66+
ownShare;
67+
68+
/**
69+
* Credits in this pool owned by the current account
70+
*
71+
* @type {number}
72+
*/
73+
ownCredits;
74+
75+
/**
76+
* Pool constructor
77+
*
78+
* @param {Client} client
79+
* @param {string} id
80+
*/
81+
constructor(client, id) {
82+
this.#client = client;
83+
this.id = id;
84+
}
85+
86+
/**
87+
* @param {{}} poolObject
88+
* @return {this}
89+
*/
90+
setFromObject(poolObject) {
91+
this.id = typeof poolObject.id !== "undefined" ? poolObject.id : null;
92+
this.name = typeof poolObject.name !== "undefined" ? poolObject.name : null;
93+
this.credits = typeof poolObject.credits !== "undefined" ? poolObject.credits : null;
94+
this.servers = typeof poolObject.servers !== "undefined" ? poolObject.servers : null;
95+
this.owner = typeof poolObject.owner !== "undefined" ? poolObject.owner : null;
96+
this.isOwner = typeof poolObject.isOwner !== "undefined" ? poolObject.isOwner : null;
97+
this.members = typeof poolObject.members !== "undefined" ? poolObject.members : null;
98+
this.ownShare = typeof poolObject.ownShare !== "undefined" ? poolObject.ownShare : null;
99+
this.ownCredits = typeof poolObject.ownCredits !== "undefined" ? poolObject.ownCredits : null;
100+
101+
return this;
102+
}
103+
104+
/**
105+
* Get credit pool info
106+
*
107+
* @return {this}
108+
* @throws {RequestError}
109+
*/
110+
async get() {
111+
let response = await this.#client.request(new GetPoolRequest(this.id));
112+
this.setFromObject(response.getData());
113+
return this;
114+
}
115+
116+
/**
117+
* Get pool members
118+
*
119+
* @return {Promise<PoolMember[]>}
120+
*/
121+
async getMembers() {
122+
let response = await this.#client.request(new GetPoolMembersRequest(this.id));
123+
return response.getData();
124+
}
125+
126+
/**
127+
* Get pool servers
128+
*
129+
* @return {Promise<Server[]>}
130+
*/
131+
async getServers() {
132+
let response = await this.#client.request(new GetPoolServersRequest(this.id));
133+
return response.getData();
134+
}
135+
}
136+
137+
module.exports = Pool;

src/Billing/Pool/PoolMember.js

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
2+
class PoolMember {
3+
/**
4+
* Pool member account ID
5+
*
6+
* @type {string}
7+
*/
8+
account;
9+
10+
/**
11+
* Pool member name
12+
*
13+
* @type {string}
14+
*/
15+
name;
16+
17+
/**
18+
* Pool member share
19+
*
20+
* @type {number}
21+
*/
22+
share;
23+
24+
/**
25+
* Pool member credits
26+
*
27+
* @type {number}
28+
*/
29+
credits;
30+
31+
/**
32+
* Is pool owner
33+
*
34+
* @type {boolean}
35+
*/
36+
isOwner;
37+
38+
/**
39+
* Pool member constructor
40+
*
41+
* @param {{}} poolMemberObject
42+
*/
43+
constructor(poolMemberObject) {
44+
this.account = typeof poolMemberObject.account !== "undefined" ? poolMemberObject.account : null;
45+
this.name = typeof poolMemberObject.name !== "undefined" ? poolMemberObject.name : null;
46+
this.share = typeof poolMemberObject.share !== "undefined" ? poolMemberObject.share : null;
47+
this.credits = typeof poolMemberObject.credits !== "undefined" ? poolMemberObject.credits : null;
48+
this.isOwner = typeof poolMemberObject.isOwner !== "undefined" ? poolMemberObject.isOwner : null;
49+
}
50+
}
51+
52+
module.exports = PoolMember;

src/Client.js

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,10 @@ const Account = require('./Account/Account');
66
const RequestStatusError = require('./Error/RequestStatusError');
77
const RequestBodyError = require('./Error/RequestBodyError');
88
const GetServersRequest = require('./Request/GetServersRequest');
9+
const GetPoolsRequest = require('./Request/Billing/Pool/GetPoolsRequest');
910

1011
const packageConfig = require('../package.json');
12+
const Pool = require("./Billing/Pool/Pool.js");
1113

1214
class Client {
1315
/**
@@ -175,6 +177,16 @@ class Client {
175177
return (await this.request(new GetServersRequest)).getData();
176178
}
177179

180+
/**
181+
* Get a list of all credit pools
182+
*
183+
* @return {Promise<Pool[]>}
184+
* @throws {RequestError}
185+
*/
186+
async getPools() {
187+
return (await this.request(new GetPoolsRequest)).getData();
188+
}
189+
178190
/**
179191
* Get account info for the current account
180192
*
@@ -194,6 +206,16 @@ class Client {
194206
server(id) {
195207
return new Server(this, id);
196208
}
209+
210+
/**
211+
* Initialize a new pool object
212+
*
213+
* @param {string} id
214+
* @return {Pool}
215+
*/
216+
pool(id) {
217+
return new Pool(this, id);
218+
}
197219
}
198220

199-
module.exports = Client;
221+
module.exports = Client;
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
const PoolRequest = require("./PoolRequest.js");
2+
const PoolMembersResponse = require("../../../Response/PoolMembersResponse.js");
3+
4+
class GetPoolMembersRequest extends PoolRequest {
5+
endpoint = "billing/pools/{id}/members";
6+
responseClass = PoolMembersResponse;
7+
}
8+
9+
module.exports = GetPoolMembersRequest;
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
const PoolRequest = require("./PoolRequest.js");
2+
3+
class GetPoolRequest extends PoolRequest {
4+
endpoint = "billing/pools/{id}";
5+
}
6+
7+
module.exports = GetPoolRequest;
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
const PoolRequest = require("./PoolRequest.js");
2+
const ServersResponse = require("../../../Response/ServersResponse.js");
3+
4+
class GetPoolServersRequest extends PoolRequest {
5+
endpoint = "billing/pools/{id}/servers";
6+
responseClass = ServersResponse;
7+
}
8+
9+
module.exports = GetPoolServersRequest;
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
const Request = require('../../Request');
2+
const PoolsResponse = require("../../../Response/PoolsResponse.js");
3+
4+
class GetPoolsRequest extends Request {
5+
endpoint = "billing/pools";
6+
responseClass = PoolsResponse;
7+
}
8+
9+
module.exports = GetPoolsRequest;
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
const Request = require('../../Request.js');
2+
3+
class PoolRequest extends Request {
4+
/**
5+
* Pool request constructor
6+
*
7+
* @param {string} id
8+
*/
9+
constructor(id) {
10+
super();
11+
this.setParameter("id", id);
12+
}
13+
}
14+
15+
module.exports = PoolRequest;

0 commit comments

Comments
 (0)