Skip to content

Commit

Permalink
Merge pull request #5 from KurtThiemann/pools
Browse files Browse the repository at this point in the history
Add support for credit pool API methods
  • Loading branch information
matthi4s authored Dec 11, 2023
2 parents 1c44027 + 7b18048 commit 160e62e
Show file tree
Hide file tree
Showing 15 changed files with 378 additions and 54 deletions.
36 changes: 34 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -301,15 +301,15 @@ let file = server.getFile("server.properties");
let config = file.getConfig();
```

#### Get config file options
##### Get config file options
```js
let options = await config.getOptions();
for(let [key, option] of options) {
console.log(key, option.getValue());
}
```

#### Update config file options
##### Update config file options
```js
let options = await config.getOptions();

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

#### Credit pools
Credit pools allow sharing the costs of a server between multiple users.

##### List credit pools
```js
let pools = await client.getPools();
console.log(pools);
```

##### Create a pool object by ID
```js
let server = client.pool(id);
```

##### Get pool information
```js
await pool.get();
console.log(pool.name + ": " + pool.credits);
```

##### Get pool members
```js
let members = await pool.getMembers();
console.log(members);
```

##### Get pool servers
```js
let servers = await pool.getServers();
console.log(servers);
```

### Websocket API
The websocket API allows a constant connection to our websocket service to receive
events in real time without polling (e.g. trying to get the server status every few seconds).
Expand Down
4 changes: 3 additions & 1 deletion index.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,7 @@ module.exports = {
ServerStatus: require('./src/Server/ServerStatus'),
Request: require('./src/Request/Request'),
Response: require('./src/Response/Response'),
ConfigOptionType: require('./src/Server/Config/ConfigOptionType')
ConfigOptionType: require('./src/Server/Config/ConfigOptionType'),
Pool: require('./src/Billing/Pool/Pool'),
PoolMember: require('./src/Billing/Pool/PoolMember')
}
137 changes: 137 additions & 0 deletions src/Billing/Pool/Pool.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,137 @@
const GetPoolRequest = require("../../Request/Billing/Pool/GetPoolRequest.js");
const GetPoolMembersRequest = require("../../Request/Billing/Pool/GetPoolMembersRequest.js");
const GetPoolServersRequest = require("../../Request/Billing/Pool/GetPoolServersRequest.js");

class Pool {
/**
* @type {Client}
* @private
*/
#client;

/**
* Pool ID
*
* @type {string}
*/
id;

/**
* Pool name
*
* @type {string}
*/
name;

/**
* Pool credit balance
*
* @type {number}
*/
credits;

/**
* Pool server count
*
* @type {number}
*/
servers;

/**
* Pool owner ID
*
* @type {string}
*/
owner;

/**
* Is pool owner
*
* @type {boolean}
*/
isOwner;

/**
* Pool member count
*
* @type {number}
*/
members;

/**
* Share of this pool owned by the current account
*
* @type {number}
*/
ownShare;

/**
* Credits in this pool owned by the current account
*
* @type {number}
*/
ownCredits;

/**
* Pool constructor
*
* @param {Client} client
* @param {string} id
*/
constructor(client, id) {
this.#client = client;
this.id = id;
}

/**
* @param {{}} poolObject
* @return {this}
*/
setFromObject(poolObject) {
this.id = typeof poolObject.id !== "undefined" ? poolObject.id : null;
this.name = typeof poolObject.name !== "undefined" ? poolObject.name : null;
this.credits = typeof poolObject.credits !== "undefined" ? poolObject.credits : null;
this.servers = typeof poolObject.servers !== "undefined" ? poolObject.servers : null;
this.owner = typeof poolObject.owner !== "undefined" ? poolObject.owner : null;
this.isOwner = typeof poolObject.isOwner !== "undefined" ? poolObject.isOwner : null;
this.members = typeof poolObject.members !== "undefined" ? poolObject.members : null;
this.ownShare = typeof poolObject.ownShare !== "undefined" ? poolObject.ownShare : null;
this.ownCredits = typeof poolObject.ownCredits !== "undefined" ? poolObject.ownCredits : null;

return this;
}

/**
* Get credit pool info
*
* @return {this}
* @throws {RequestError}
*/
async get() {
let response = await this.#client.request(new GetPoolRequest(this.id));
this.setFromObject(response.getData());
return this;
}

/**
* Get pool members
*
* @return {Promise<PoolMember[]>}
*/
async getMembers() {
let response = await this.#client.request(new GetPoolMembersRequest(this.id));
return response.getData();
}

/**
* Get pool servers
*
* @return {Promise<Server[]>}
*/
async getServers() {
let response = await this.#client.request(new GetPoolServersRequest(this.id));
return response.getData();
}
}

module.exports = Pool;
52 changes: 52 additions & 0 deletions src/Billing/Pool/PoolMember.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@

class PoolMember {
/**
* Pool member account ID
*
* @type {string}
*/
account;

/**
* Pool member name
*
* @type {string}
*/
name;

/**
* Pool member share
*
* @type {number}
*/
share;

/**
* Pool member credits
*
* @type {number}
*/
credits;

/**
* Is pool owner
*
* @type {boolean}
*/
isOwner;

/**
* Pool member constructor
*
* @param {{}} poolMemberObject
*/
constructor(poolMemberObject) {
this.account = typeof poolMemberObject.account !== "undefined" ? poolMemberObject.account : null;
this.name = typeof poolMemberObject.name !== "undefined" ? poolMemberObject.name : null;
this.share = typeof poolMemberObject.share !== "undefined" ? poolMemberObject.share : null;
this.credits = typeof poolMemberObject.credits !== "undefined" ? poolMemberObject.credits : null;
this.isOwner = typeof poolMemberObject.isOwner !== "undefined" ? poolMemberObject.isOwner : null;
}
}

module.exports = PoolMember;
24 changes: 23 additions & 1 deletion src/Client.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,10 @@ const Account = require('./Account/Account');
const RequestStatusError = require('./Error/RequestStatusError');
const RequestBodyError = require('./Error/RequestBodyError');
const GetServersRequest = require('./Request/GetServersRequest');
const GetPoolsRequest = require('./Request/Billing/Pool/GetPoolsRequest');

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

class Client {
/**
Expand Down Expand Up @@ -175,6 +177,16 @@ class Client {
return (await this.request(new GetServersRequest)).getData();
}

/**
* Get a list of all credit pools
*
* @return {Promise<Pool[]>}
* @throws {RequestError}
*/
async getPools() {
return (await this.request(new GetPoolsRequest)).getData();
}

/**
* Get account info for the current account
*
Expand All @@ -194,6 +206,16 @@ class Client {
server(id) {
return new Server(this, id);
}

/**
* Initialize a new pool object
*
* @param {string} id
* @return {Pool}
*/
pool(id) {
return new Pool(this, id);
}
}

module.exports = Client;
module.exports = Client;
9 changes: 9 additions & 0 deletions src/Request/Billing/Pool/GetPoolMembersRequest.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
const PoolRequest = require("./PoolRequest.js");
const PoolMembersResponse = require("../../../Response/PoolMembersResponse.js");

class GetPoolMembersRequest extends PoolRequest {
endpoint = "billing/pools/{id}/members";
responseClass = PoolMembersResponse;
}

module.exports = GetPoolMembersRequest;
7 changes: 7 additions & 0 deletions src/Request/Billing/Pool/GetPoolRequest.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
const PoolRequest = require("./PoolRequest.js");

class GetPoolRequest extends PoolRequest {
endpoint = "billing/pools/{id}";
}

module.exports = GetPoolRequest;
9 changes: 9 additions & 0 deletions src/Request/Billing/Pool/GetPoolServersRequest.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
const PoolRequest = require("./PoolRequest.js");
const ServersResponse = require("../../../Response/ServersResponse.js");

class GetPoolServersRequest extends PoolRequest {
endpoint = "billing/pools/{id}/servers";
responseClass = ServersResponse;
}

module.exports = GetPoolServersRequest;
9 changes: 9 additions & 0 deletions src/Request/Billing/Pool/GetPoolsRequest.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
const Request = require('../../Request');
const PoolsResponse = require("../../../Response/PoolsResponse.js");

class GetPoolsRequest extends Request {
endpoint = "billing/pools";
responseClass = PoolsResponse;
}

module.exports = GetPoolsRequest;
15 changes: 15 additions & 0 deletions src/Request/Billing/Pool/PoolRequest.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
const Request = require('../../Request.js');

class PoolRequest extends Request {
/**
* Pool request constructor
*
* @param {string} id
*/
constructor(id) {
super();
this.setParameter("id", id);
}
}

module.exports = PoolRequest;
Loading

0 comments on commit 160e62e

Please sign in to comment.