Skip to content

Commit a11cfac

Browse files
committed
Implement pagination support.
1 parent 3f1c805 commit a11cfac

14 files changed

+530
-189
lines changed

README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -61,4 +61,4 @@ client.getClientServers()
6161

6262
## Examples
6363

64-
### [Linking System](https://github.com/RedstoneGamez/Pterodactyl.js/tree/master/examples#)
64+
### [Linking System](https://github.com/RedstoneGamez/Pterodactyl.js/blob/master/examples/link.js)

release/README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -61,4 +61,4 @@ client.getClientServers()
6161

6262
## Examples
6363

64-
### [Linking System](https://github.com/RedstoneGamez/Pterodactyl.js/tree/master/examples#)
64+
### [Linking System](https://github.com/RedstoneGamez/Pterodactyl.js/blob/master/examples/link.js)

release/types/index.d.ts

+54-14
Original file line numberDiff line numberDiff line change
@@ -79,11 +79,12 @@ declare module 'pterodactyl.js' {
7979
}
8080

8181
export class ClientServer extends ClientServerModel {
82-
constructor(api: UserClient, options: ClientServerOptionsRaw);
82+
constructor(api: UserClient, options: ClientServerOptionsRaw, paginationOptions?: PaginationOptionsRaw);
8383

8484
private api: UserClient;
85+
public pagination?: Pagination;
8586

86-
public static getAll(api: UserClient): Promise<ClientServer[]>;
87+
public static getAll(api: UserClient, page: number): Promise<ClientServer[]>;
8788

8889
public static getById(api: UserClient, id: string): Promise<ClientServer>;
8990

@@ -113,13 +114,14 @@ declare module 'pterodactyl.js' {
113114
}
114115

115116
export class User extends UserModel {
116-
constructor(api: AdminClient, data: UserOptionsRaw);
117+
constructor(api: AdminClient, data: UserOptionsRaw, paginationOptions?: PaginationOptionsRaw);
117118

118119
private api: AdminClient;
120+
public pagination?: Pagination;
119121

120122
public static create(api: AdminClient, options: NewUserOptions): Promise<User>;
121123

122-
public static getAll(api: AdminClient): Promise<User[]>;
124+
public static getAll(api: AdminClient, page: number): Promise<User[]>;
123125

124126
public static getById(api: AdminClient, id: number): Promise<User>;
125127

@@ -145,13 +147,14 @@ declare module 'pterodactyl.js' {
145147
}
146148

147149
export class Node extends NodeModel {
148-
constructor(api: AdminClient, data: NodeOptionsRaw);
150+
constructor(api: AdminClient, data: NodeOptionsRaw, paginationOptions?: PaginationOptionsRaw);
149151

150152
private api: AdminClient;
153+
public pagination?: Pagination;
151154

152155
public static create(api: AdminClient, options: NewNodeOptions): Promise<Node>;
153156

154-
public static getAll(api: AdminClient): Promise<Node[]>;
157+
public static getAll(api: AdminClient, page: number): Promise<Node[]>;
155158

156159
public static getById(api: AdminClient, id: number): Promise<Node>;
157160

@@ -193,13 +196,14 @@ declare module 'pterodactyl.js' {
193196
}
194197

195198
export class Location extends LocationModel {
196-
constructor(api: AdminClient, data: LocationOptionsRaw);
199+
constructor(api: AdminClient, data: LocationOptionsRaw, paginationOptions?: PaginationOptionsRaw);
197200

198201
private api: AdminClient;
202+
public pagination?: Pagination;
199203

200204
public static create(api: AdminClient, options: NewLocationOptions): Promise<Location>;
201205

202-
public static getAll(api: AdminClient): Promise<Location[]>;
206+
public static getAll(api: AdminClient, page: number): Promise<Location[]>;
203207

204208
public static getById(api: AdminClient, id: number): Promise<Location>;
205209

@@ -211,13 +215,14 @@ declare module 'pterodactyl.js' {
211215
}
212216

213217
export class Server extends ServerModel {
214-
constructor(api: AdminClient, data: ServerOptionsRaw);
218+
constructor(api: AdminClient, data: ServerOptionsRaw, paginationOptions?: PaginationOptionsRaw);
215219

216220
private api: AdminClient;
221+
public pagination?: Pagination;
217222

218223
public static create(api: AdminClient, options: NewServerOptions): Promise<Server>;
219224

220-
public static getAll(api: AdminClient): Promise<Server[]>;
225+
public static getAll(api: AdminClient, page: number): Promise<Server[]>;
221226

222227
public static getById(api: AdminClient, id: number): Promise<Server>;
223228

@@ -277,11 +282,12 @@ declare module 'pterodactyl.js' {
277282
}
278283

279284
export class Nest extends NestModel {
280-
constructor(api: AdminClient, data: NestOptionsRaw);
285+
constructor(api: AdminClient, data: NestOptionsRaw, paginationOptions?: PaginationOptionsRaw);
281286

282287
private api: AdminClient;
288+
public pagination?: Pagination;
283289

284-
public static getAll(api: AdminClient): Promise<Nest[]>;
290+
public static getAll(api: AdminClient, page: number): Promise<Nest[]>;
285291

286292
public static getById(api: AdminClient, id: number): Promise<Nest>;
287293

@@ -315,11 +321,12 @@ declare module 'pterodactyl.js' {
315321
}
316322

317323
export class NodeAllocation extends NodeAllocationModel {
318-
constructor(api: AdminClient, data: NodeAllocationOptions);
324+
constructor(api: AdminClient, node: number, data: NodeAllocationOptions, paginationOptions?: PaginationOptionsRaw);
319325

320326
private api: AdminClient;
327+
public pagination?: Pagination;
321328

322-
public static getAll(api: AdminClient, node: number): Promise<NodeAllocation[]>;
329+
public static getAll(api: AdminClient, node: number, page: number): Promise<NodeAllocation[]>;
323330
}
324331

325332
export class ClientServerModel implements ClientServerOptions {
@@ -384,6 +391,19 @@ declare module 'pterodactyl.js' {
384391
public toJSON(): any;
385392
}
386393

394+
export class Pagination implements PaginationOptions {
395+
constructor(data: PaginationOptionsRaw);
396+
397+
public total: number;
398+
public count: number;
399+
public pageSize: number;
400+
public currentPage: number;
401+
public totalPages: number;
402+
public links: any[];
403+
404+
public nextPage(): number;
405+
}
406+
387407
export class LocationModel implements LocationOptions {
388408
constructor(data: LocationOptionsRaw);
389409

@@ -799,6 +819,26 @@ declare module 'pterodactyl.js' {
799819
node: number;
800820
}
801821

822+
interface PaginationOptions {
823+
total: number;
824+
count: number;
825+
pageSize: number;
826+
currentPage: number;
827+
totalPages: number;
828+
links: any[];
829+
}
830+
831+
interface PaginationOptionsRaw {
832+
pagination: {
833+
total: number;
834+
count: number;
835+
per_page: number;
836+
current_page: number;
837+
total_pages: number;
838+
links: any[];
839+
};
840+
}
841+
802842
interface NewServerOptions {
803843
externalId?: string;
804844
name: string;

src/lib/AdminAPI.ts

+13-13
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import PterodactylJS from './index';
1+
import PterodactylAPI from './index';
22

33
import User from './client/User';
44
import Node from './client/Node';
@@ -12,7 +12,7 @@ import { NewUserOptions } from './models/User';
1212
import { NewLocationOptions } from './models/Location';
1313
import { NewNodeOptions } from './models/Node';
1414

15-
class AdminPterodactylAPI extends PterodactylJS {
15+
class AdminClient extends PterodactylAPI {
1616
constructor(url: string, apiKey: string) {
1717
super(url, apiKey);
1818
}
@@ -44,24 +44,24 @@ class AdminPterodactylAPI extends PterodactylJS {
4444
});
4545
}
4646

47-
public getUsers(): Promise<User[]> {
48-
return User.getAll(this);
47+
public getUsers(page?: number): Promise<User[]> {
48+
return User.getAll(this, page);
4949
}
5050

51-
public getNodes(): Promise<Node[]> {
52-
return Node.getAll(this);
51+
public getNodes(page?: number): Promise<Node[]> {
52+
return Node.getAll(this, page);
5353
}
5454

55-
public getLocations(): Promise<Location[]> {
56-
return Location.getAll(this);
55+
public getLocations(page?: number): Promise<Location[]> {
56+
return Location.getAll(this, page);
5757
}
5858

59-
public getServers(): Promise<Server[]> {
60-
return Server.getAll(this);
59+
public getServers(page?: number): Promise<Server[]> {
60+
return Server.getAll(this, page);
6161
}
6262

63-
public getNests(): Promise<Nest[]> {
64-
return Nest.getAll(this);
63+
public getNests(page?: number): Promise<Nest[]> {
64+
return Nest.getAll(this, page);
6565
}
6666

6767
public getUser(userId: number): Promise<User> {
@@ -105,4 +105,4 @@ class AdminPterodactylAPI extends PterodactylJS {
105105
}
106106
}
107107

108-
export default AdminPterodactylAPI;
108+
export default AdminClient;

src/lib/UserAPI.ts

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
import PterodactylJS from './index';
1+
import PterodactylAPI from './index';
22

33
import ClientServer from './client/ClientServer';
44

5-
class UserPterodactylAPI extends PterodactylJS {
5+
class UserClient extends PterodactylAPI {
66
constructor(url: string, apiKey: string) {
77
super(url, apiKey);
88
}
@@ -34,13 +34,13 @@ class UserPterodactylAPI extends PterodactylJS {
3434
});
3535
}
3636

37-
public getClientServers(): Promise<ClientServer[]> {
38-
return ClientServer.getAll(this);
37+
public getClientServers(page?: number): Promise<ClientServer[]> {
38+
return ClientServer.getAll(this, page);
3939
}
4040

4141
public getClientServer(serverId: string): Promise<ClientServer> {
4242
return ClientServer.getById(this, serverId);
4343
}
4444
}
4545

46-
export default UserPterodactylAPI;
46+
export default UserClient;

src/lib/client/ClientServer.ts

+8-5
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import PterodactylAPI from '../index';
22

33
import ClientServerModel, { ServerOptionsRaw, } from '../models/ClientServer';
4+
import Pagination, { PaginationOptionsRaw } from '../models/Pagination';
45

56
interface UtilizationData {
67
used: number;
@@ -9,17 +10,19 @@ interface UtilizationData {
910

1011
class ClientServer extends ClientServerModel {
1112
private api: PterodactylAPI;
13+
public pagination?: Pagination;
1214

13-
constructor(api: PterodactylAPI, options: ServerOptionsRaw) {
14-
super(options);
15+
constructor(api: PterodactylAPI, data: ServerOptionsRaw, paginationOptions?: PaginationOptionsRaw) {
16+
super(data);
1517
this.api = api;
18+
this.pagination = new Pagination(paginationOptions);
1619
}
1720

18-
public static getAll(api: PterodactylAPI): Promise<ClientServer[]> {
21+
public static getAll(api: PterodactylAPI, page: number = 1): Promise<ClientServer[]> {
1922
return new Promise(async (resolve, reject) => {
2023
try {
21-
let res = await api.call(`/client`);
22-
resolve(res.data.data.map((value: any) => new ClientServer(api, value.attributes)));
24+
let res = await api.call(`/client?page=${page}`);
25+
resolve(res.data.data.map((value: any) => new ClientServer(api, value.attributes, res.data.meta)));
2326
} catch (error) {
2427
reject(error);
2528
}

src/lib/client/Location.ts

+7-4
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
11
import AdminAPI from '../AdminAPI';
22

33
import LocationModel, { LocationOptionsRaw, NewLocationOptions } from '../models/Location';
4+
import Pagination, { PaginationOptionsRaw } from '../models/Pagination';
45

56
class Location extends LocationModel {
67
private api: AdminAPI;
8+
public pagination?: Pagination;
79

8-
constructor(api: AdminAPI, data: LocationOptionsRaw) {
10+
constructor(api: AdminAPI, data: LocationOptionsRaw, paginationOptions?: PaginationOptionsRaw) {
911
super(data);
1012
this.api = api;
13+
this.pagination = new Pagination(paginationOptions);
1114
}
1215

1316
public static create(api: AdminAPI, options: NewLocationOptions): Promise<Location> {
@@ -16,11 +19,11 @@ class Location extends LocationModel {
1619
});
1720
}
1821

19-
public static getAll(api: AdminAPI): Promise<Location[]> {
22+
public static getAll(api: AdminAPI, page: number = 1): Promise<Location[]> {
2023
return new Promise(async (resolve, reject) => {
2124
try {
22-
let res = await api.call(`/application/locations`);
23-
resolve(res.data.data.map((value: any) => new Location(api, value.attributes)));
25+
let res = await api.call(`/application/locations?page=${page}`);
26+
resolve(res.data.data.map((value: any) => new Location(api, value.attributes, res.data.meta)));
2427
} catch (error) {
2528
reject(error);
2629
}

src/lib/client/Nest.ts

+7-5
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,23 @@ import AdminAPI from '../AdminAPI';
33
import Egg from './Egg';
44

55
import NestModel, { NestOptionsRaw } from '../models/Nest';
6+
import Pagination, { PaginationOptionsRaw } from '../models/Pagination';
67

78
class Nest extends NestModel {
89
private api: AdminAPI;
9-
public eggs: Egg[];
10+
public pagination?: Pagination;
1011

11-
constructor(api: AdminAPI, data: NestOptionsRaw) {
12+
constructor(api: AdminAPI, data: NestOptionsRaw, paginationOptions?: PaginationOptionsRaw) {
1213
super(data);
1314
this.api = api;
15+
this.pagination = new Pagination(paginationOptions);
1416
}
1517

16-
public static getAll(api: AdminAPI): Promise<Nest[]> {
18+
public static getAll(api: AdminAPI, page: number = 1): Promise<Nest[]> {
1719
return new Promise(async (resolve, reject) => {
1820
try {
19-
let res = await api.call(`/application/nests`);
20-
resolve(res.data.data.map((value: any) => new Nest(api, value.attributes)));
21+
let res = await api.call(`/application/nests?page=${page}`);
22+
resolve(res.data.data.map((value: any) => new Nest(api, value.attributes, res.data.meta)));
2123
} catch (error) {
2224
reject(error);
2325
}

0 commit comments

Comments
 (0)