@akaanakbaik/pterodactyl-gateway 0.3.0
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/BLUEPRINT.md +254 -0
- package/LICENSE +21 -0
- package/README.md +470 -0
- package/add-promt.md +192 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +676 -0
- package/dist/cli.js.map +1 -0
- package/dist/errors.d.ts +23 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +85 -0
- package/dist/errors.js.map +1 -0
- package/dist/gateway.d.ts +230 -0
- package/dist/gateway.d.ts.map +1 -0
- package/dist/gateway.js +416 -0
- package/dist/gateway.js.map +1 -0
- package/dist/http.d.ts +15 -0
- package/dist/http.d.ts.map +1 -0
- package/dist/http.js +127 -0
- package/dist/http.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/smart.d.ts +49 -0
- package/dist/smart.d.ts.map +1 -0
- package/dist/smart.js +192 -0
- package/dist/smart.js.map +1 -0
- package/dist/types.d.ts +162 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/utils.d.ts +21 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +88 -0
- package/dist/utils.js.map +1 -0
- package/package.json +55 -0
package/README.md
ADDED
|
@@ -0,0 +1,470 @@
|
|
|
1
|
+
# Akadev Pterodactyl Gateway
|
|
2
|
+
|
|
3
|
+
SDK TypeScript dan CLI sederhana untuk membantu project Node.js terhubung ke Pterodactyl Panel dengan lebih mudah.
|
|
4
|
+
|
|
5
|
+
Package ini dibuat untuk kebutuhan bot reseller panel, dashboard custom, automation server, dan admin tools. Fokus v0.2.x adalah memperluas kontrol server dengan file manager, startup variables, network allocations, database manager, backup manager, schedules, dan probe read-only, sambil tetap menjaga smart create user/server, preview, dry run, error tutorial, raw request, test, dan pack check.
|
|
6
|
+
|
|
7
|
+
Package ini bukan package resmi dari Pterodactyl dan tidak berafiliasi dengan Pterodactyl Software.
|
|
8
|
+
|
|
9
|
+
## Status
|
|
10
|
+
|
|
11
|
+
Versi saat ini: `0.2.3`
|
|
12
|
+
|
|
13
|
+
Fitur utama:
|
|
14
|
+
|
|
15
|
+
- `createPtero()`
|
|
16
|
+
- `createPtero.fromEnv()`
|
|
17
|
+
- `connect()`
|
|
18
|
+
- `health()`
|
|
19
|
+
- `doctor()` dasar
|
|
20
|
+
- `compatibility()` dasar
|
|
21
|
+
- `raw.application` dan `raw.client`
|
|
22
|
+
- `users.createSmart()`
|
|
23
|
+
- `users.getOrCreate()`
|
|
24
|
+
- `servers.previewCreate()`
|
|
25
|
+
- `servers.createSmart()`
|
|
26
|
+
- `servers.createFromPreset()`
|
|
27
|
+
- `servers.createRaw()`
|
|
28
|
+
- `server(identifier).start()`
|
|
29
|
+
- `server(identifier).stop()`
|
|
30
|
+
- `server(identifier).restart()`
|
|
31
|
+
- `server(identifier).kill()`
|
|
32
|
+
- `server(identifier).command()`
|
|
33
|
+
- `server(identifier).resources()`
|
|
34
|
+
- `server(identifier).probe()`
|
|
35
|
+
- `server(identifier).files.list()`
|
|
36
|
+
- `server(identifier).files.read()`
|
|
37
|
+
- `server(identifier).files.write()`
|
|
38
|
+
- `server(identifier).files.delete()`
|
|
39
|
+
- `server(identifier).files.mkdir()`
|
|
40
|
+
- `server(identifier).files.rename()`
|
|
41
|
+
- `server(identifier).files.compress()`
|
|
42
|
+
- `server(identifier).files.decompress()`
|
|
43
|
+
- `server(identifier).files.json.read()`
|
|
44
|
+
- `server(identifier).files.json.write()`
|
|
45
|
+
- `server(identifier).startup.variables()`
|
|
46
|
+
- `server(identifier).startup.set()`
|
|
47
|
+
- `server(identifier).startup.setMany()`
|
|
48
|
+
- `server(identifier).network.list()`
|
|
49
|
+
- `server(identifier).network.assign()`
|
|
50
|
+
- `server(identifier).network.setNote()`
|
|
51
|
+
- `server(identifier).network.setPrimary()`
|
|
52
|
+
- `server(identifier).network.delete()`
|
|
53
|
+
- `server(identifier).databases.list()`
|
|
54
|
+
- `server(identifier).databases.create()`
|
|
55
|
+
- `server(identifier).databases.rotatePassword()`
|
|
56
|
+
- `server(identifier).databases.delete()`
|
|
57
|
+
- `server(identifier).backups.list()`
|
|
58
|
+
- `server(identifier).backups.create()`
|
|
59
|
+
- `server(identifier).backups.details()`
|
|
60
|
+
- `server(identifier).backups.download()`
|
|
61
|
+
- `server(identifier).backups.delete()`
|
|
62
|
+
- `server(identifier).schedules.list()`
|
|
63
|
+
- `server(identifier).schedules.create()`
|
|
64
|
+
- `server(identifier).schedules.details()`
|
|
65
|
+
- `server(identifier).schedules.update()`
|
|
66
|
+
- `server(identifier).schedules.run()`
|
|
67
|
+
- `server(identifier).schedules.delete()`
|
|
68
|
+
- `server(identifier).schedules.tasks.create()`
|
|
69
|
+
- `server(identifier).schedules.tasks.update()`
|
|
70
|
+
- `server(identifier).schedules.tasks.delete()`
|
|
71
|
+
- parser RAM, disk, CPU
|
|
72
|
+
- error tutorial
|
|
73
|
+
- CLI dasar `ptero-gateway`
|
|
74
|
+
- `npm run verify`
|
|
75
|
+
- `npm pack --dry-run`
|
|
76
|
+
|
|
77
|
+
## Install lokal
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
npm install @akadev/pterodactyl-gateway
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
Untuk development dari GitHub:
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
git clone https://github.com/akaanakbaik/pterodactyl-gateway.git
|
|
87
|
+
cd pterodactyl-gateway
|
|
88
|
+
npm install
|
|
89
|
+
npm run verify
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
## Env
|
|
93
|
+
|
|
94
|
+
Buat file `.env` di project kamu:
|
|
95
|
+
|
|
96
|
+
```env
|
|
97
|
+
PTERO_DOMAIN=https://panel.example.com
|
|
98
|
+
PTERO_PTLA=ptla_xxxxxxxxxxxxxxxxx
|
|
99
|
+
PTERO_PTLC=ptlc_xxxxxxxxxxxxxxxxx
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
Penjelasan:
|
|
103
|
+
|
|
104
|
+
- `PTERO_DOMAIN` adalah domain panel Pterodactyl.
|
|
105
|
+
- `PTERO_PTLA` adalah Application API Key untuk aksi admin seperti create user dan create server.
|
|
106
|
+
- `PTERO_PTLC` adalah Client API Key untuk kontrol server seperti start, stop, command, resources, file manager, startup variables, network allocations, database manager, backups, schedules, dan realtime pada versi berikutnya.
|
|
107
|
+
|
|
108
|
+
## Koneksi cepat
|
|
109
|
+
|
|
110
|
+
```ts
|
|
111
|
+
import { createPtero } from "@akadev/pterodactyl-gateway";
|
|
112
|
+
|
|
113
|
+
const ptero = createPtero({
|
|
114
|
+
domain: "https://panel.example.com",
|
|
115
|
+
ptla: process.env.PTERO_PTLA,
|
|
116
|
+
ptlc: process.env.PTERO_PTLC
|
|
117
|
+
});
|
|
118
|
+
|
|
119
|
+
const result = await ptero.connect();
|
|
120
|
+
console.log(result);
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
Atau dari env:
|
|
124
|
+
|
|
125
|
+
```ts
|
|
126
|
+
import { createPtero } from "@akadev/pterodactyl-gateway";
|
|
127
|
+
|
|
128
|
+
const ptero = createPtero.fromEnv();
|
|
129
|
+
await ptero.connect();
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
## Create user smart
|
|
133
|
+
|
|
134
|
+
Field wajib:
|
|
135
|
+
|
|
136
|
+
- `username`
|
|
137
|
+
- `email`
|
|
138
|
+
- `password`
|
|
139
|
+
- `administrator`
|
|
140
|
+
|
|
141
|
+
Jika `firstName` dan `lastName` kosong, nilainya otomatis memakai username.
|
|
142
|
+
|
|
143
|
+
```ts
|
|
144
|
+
const user = await ptero.users.createSmart({
|
|
145
|
+
username: "aka",
|
|
146
|
+
email: "aka@example.com",
|
|
147
|
+
password: "auto",
|
|
148
|
+
administrator: "no"
|
|
149
|
+
});
|
|
150
|
+
|
|
151
|
+
console.log(user);
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
Jika `password: "auto"`, package membuat password aman dan mengembalikannya sekali pada response.
|
|
155
|
+
|
|
156
|
+
## Create server smart
|
|
157
|
+
|
|
158
|
+
Field wajib:
|
|
159
|
+
|
|
160
|
+
- `name`
|
|
161
|
+
- `email` atau `userId`
|
|
162
|
+
- `description`
|
|
163
|
+
- `nodeId`
|
|
164
|
+
- `nestId`
|
|
165
|
+
- `eggId`
|
|
166
|
+
- `memory`
|
|
167
|
+
- `disk`
|
|
168
|
+
- `cpu`
|
|
169
|
+
- `databases`
|
|
170
|
+
- `allocations`
|
|
171
|
+
- `backups`
|
|
172
|
+
|
|
173
|
+
Yang otomatis:
|
|
174
|
+
|
|
175
|
+
- docker image dari egg
|
|
176
|
+
- startup command dari egg
|
|
177
|
+
- environment variables dari egg
|
|
178
|
+
- default allocation dari node
|
|
179
|
+
- additional allocations sesuai allocation limit
|
|
180
|
+
- swap default `0`
|
|
181
|
+
- block IO default `500`
|
|
182
|
+
- CPU pinning default kosong
|
|
183
|
+
- OOM disabled default `false`
|
|
184
|
+
- start on completion default `true`
|
|
185
|
+
|
|
186
|
+
```ts
|
|
187
|
+
const server = await ptero.servers.createSmart({
|
|
188
|
+
name: "Bot WhatsApp Aka",
|
|
189
|
+
email: "aka@example.com",
|
|
190
|
+
description: "Server bot WhatsApp untuk Aka",
|
|
191
|
+
nodeId: 1,
|
|
192
|
+
nestId: 5,
|
|
193
|
+
eggId: 15,
|
|
194
|
+
specs: {
|
|
195
|
+
memory: "2GB",
|
|
196
|
+
disk: "5GB",
|
|
197
|
+
cpu: "100%",
|
|
198
|
+
databases: 1,
|
|
199
|
+
allocations: 1,
|
|
200
|
+
backups: 1
|
|
201
|
+
}
|
|
202
|
+
});
|
|
203
|
+
|
|
204
|
+
console.log(server);
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
## Preview sebelum create
|
|
208
|
+
|
|
209
|
+
Gunakan ini untuk melihat hasil auto-sync sebelum server benar-benar dibuat.
|
|
210
|
+
|
|
211
|
+
```ts
|
|
212
|
+
const preview = await ptero.servers.previewCreate({
|
|
213
|
+
name: "Bot WhatsApp Aka",
|
|
214
|
+
email: "aka@example.com",
|
|
215
|
+
description: "Server bot WhatsApp untuk Aka",
|
|
216
|
+
nodeId: 1,
|
|
217
|
+
nestId: 5,
|
|
218
|
+
eggId: 15,
|
|
219
|
+
specs: {
|
|
220
|
+
memory: "2GB",
|
|
221
|
+
disk: "5GB",
|
|
222
|
+
cpu: "100%",
|
|
223
|
+
databases: 1,
|
|
224
|
+
allocations: 1,
|
|
225
|
+
backups: 1
|
|
226
|
+
}
|
|
227
|
+
});
|
|
228
|
+
|
|
229
|
+
console.log(preview.payload);
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
## Probe read-only
|
|
233
|
+
|
|
234
|
+
Probe dipakai untuk mengecek endpoint client server yang tersedia di panel tanpa membuat, mengedit, atau menghapus data.
|
|
235
|
+
|
|
236
|
+
```ts
|
|
237
|
+
const report = await ptero.server("abc12345").probe();
|
|
238
|
+
console.log(report);
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
CLI:
|
|
242
|
+
|
|
243
|
+
```bash
|
|
244
|
+
ptero-gateway probe abc12345
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
## File manager
|
|
248
|
+
|
|
249
|
+
```ts
|
|
250
|
+
const server = ptero.server("abc12345");
|
|
251
|
+
|
|
252
|
+
const files = await server.files.list("/");
|
|
253
|
+
const text = await server.files.read("/package.json");
|
|
254
|
+
await server.files.write("/index.js", "console.log('halo')");
|
|
255
|
+
await server.files.mkdir("/", "logs");
|
|
256
|
+
await server.files.rename("/", [{ from: "old.js", to: "new.js" }]);
|
|
257
|
+
await server.files.delete("/", ["old.js"]);
|
|
258
|
+
await server.files.compress("/", ["src", "package.json"]);
|
|
259
|
+
await server.files.decompress("/", "archive.tar.gz");
|
|
260
|
+
|
|
261
|
+
const config = await server.files.json.read("/config.json");
|
|
262
|
+
await server.files.json.write("/config.json", { ok: true });
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
## Startup variables
|
|
266
|
+
|
|
267
|
+
```ts
|
|
268
|
+
const variables = await server.startup.variables();
|
|
269
|
+
await server.startup.set("BOT_TOKEN", "token-baru");
|
|
270
|
+
await server.startup.setMany({
|
|
271
|
+
NODE_ENV: "production",
|
|
272
|
+
STARTUP_FILE: "index.js"
|
|
273
|
+
});
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
## Network allocations
|
|
277
|
+
|
|
278
|
+
```ts
|
|
279
|
+
const allocations = await server.network.list();
|
|
280
|
+
await server.network.assign();
|
|
281
|
+
await server.network.setNote(123, "API port");
|
|
282
|
+
await server.network.setPrimary(123);
|
|
283
|
+
await server.network.delete(123);
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
## Database manager
|
|
287
|
+
|
|
288
|
+
```ts
|
|
289
|
+
const databases = await server.databases.list();
|
|
290
|
+
await server.databases.create({ database: "botdb" });
|
|
291
|
+
await server.databases.create({ database: "botdb", remote: "%" });
|
|
292
|
+
await server.databases.rotatePassword("database-id");
|
|
293
|
+
await server.databases.delete("database-id");
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
## Backup manager
|
|
297
|
+
|
|
298
|
+
```ts
|
|
299
|
+
const backups = await server.backups.list();
|
|
300
|
+
await server.backups.create({
|
|
301
|
+
name: "before-update",
|
|
302
|
+
ignored: ["node_modules"],
|
|
303
|
+
isLocked: false
|
|
304
|
+
});
|
|
305
|
+
await server.backups.details("backup-id");
|
|
306
|
+
await server.backups.download("backup-id");
|
|
307
|
+
await server.backups.delete("backup-id");
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+
## Schedules
|
|
311
|
+
|
|
312
|
+
```ts
|
|
313
|
+
const schedules = await server.schedules.list();
|
|
314
|
+
await server.schedules.create({
|
|
315
|
+
name: "Daily restart",
|
|
316
|
+
minute: "0",
|
|
317
|
+
hour: "3",
|
|
318
|
+
dayOfMonth: "*",
|
|
319
|
+
month: "*",
|
|
320
|
+
dayOfWeek: "*"
|
|
321
|
+
});
|
|
322
|
+
await server.schedules.run(1);
|
|
323
|
+
await server.schedules.tasks.create(1, {
|
|
324
|
+
action: "power",
|
|
325
|
+
payload: "restart",
|
|
326
|
+
timeOffset: 0
|
|
327
|
+
});
|
|
328
|
+
```
|
|
329
|
+
|
|
330
|
+
## Dry run
|
|
331
|
+
|
|
332
|
+
`dryRun` membuat payload final tanpa mengirim request create server.
|
|
333
|
+
|
|
334
|
+
```ts
|
|
335
|
+
const result = await ptero.servers.createSmart(input, {
|
|
336
|
+
dryRun: true
|
|
337
|
+
});
|
|
338
|
+
|
|
339
|
+
console.log(result.payload);
|
|
340
|
+
```
|
|
341
|
+
|
|
342
|
+
## Preset paket
|
|
343
|
+
|
|
344
|
+
```ts
|
|
345
|
+
const ptero = createPtero({
|
|
346
|
+
domain: "https://panel.example.com",
|
|
347
|
+
ptla: process.env.PTERO_PTLA,
|
|
348
|
+
ptlc: process.env.PTERO_PTLC,
|
|
349
|
+
presets: {
|
|
350
|
+
basic: {
|
|
351
|
+
memory: "2GB",
|
|
352
|
+
disk: "5GB",
|
|
353
|
+
cpu: "100%",
|
|
354
|
+
databases: 1,
|
|
355
|
+
allocations: 1,
|
|
356
|
+
backups: 1
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
});
|
|
360
|
+
|
|
361
|
+
await ptero.servers.createFromPreset("basic", {
|
|
362
|
+
name: "Bot Aka",
|
|
363
|
+
email: "aka@example.com",
|
|
364
|
+
description: "Paket Basic",
|
|
365
|
+
nodeId: 1,
|
|
366
|
+
nestId: 5,
|
|
367
|
+
eggId: 15
|
|
368
|
+
});
|
|
369
|
+
```
|
|
370
|
+
|
|
371
|
+
## Kontrol server
|
|
372
|
+
|
|
373
|
+
```ts
|
|
374
|
+
const server = ptero.server("abc12345");
|
|
375
|
+
|
|
376
|
+
await server.start();
|
|
377
|
+
await server.stop();
|
|
378
|
+
await server.restart();
|
|
379
|
+
await server.kill();
|
|
380
|
+
await server.command("npm start");
|
|
381
|
+
const resources = await server.resources();
|
|
382
|
+
```
|
|
383
|
+
|
|
384
|
+
Command berbahaya seperti `rm -rf /` diblokir secara default.
|
|
385
|
+
|
|
386
|
+
```ts
|
|
387
|
+
await server.command("rm -rf /tmp/cache", {
|
|
388
|
+
allowDangerous: true
|
|
389
|
+
});
|
|
390
|
+
```
|
|
391
|
+
|
|
392
|
+
## Raw request
|
|
393
|
+
|
|
394
|
+
Raw mode disediakan agar fitur baru atau panel fork tetap bisa dipakai.
|
|
395
|
+
|
|
396
|
+
```ts
|
|
397
|
+
await ptero.raw.application.get("/users");
|
|
398
|
+
await ptero.raw.application.post("/servers", payload);
|
|
399
|
+
await ptero.raw.client.get("/servers/abc123/resources");
|
|
400
|
+
await ptero.raw.client.post("/servers/abc123/command", {
|
|
401
|
+
command: "npm start"
|
|
402
|
+
});
|
|
403
|
+
```
|
|
404
|
+
|
|
405
|
+
## CLI dasar
|
|
406
|
+
|
|
407
|
+
Setelah build atau install global:
|
|
408
|
+
|
|
409
|
+
```bash
|
|
410
|
+
ptero-gateway doctor
|
|
411
|
+
ptero-gateway connect
|
|
412
|
+
ptero-gateway ids
|
|
413
|
+
ptero-gateway ids --nest 5
|
|
414
|
+
ptero-gateway probe abc12345
|
|
415
|
+
ptero-gateway server abc123 resources
|
|
416
|
+
ptero-gateway server abc123 restart
|
|
417
|
+
ptero-gateway server abc123 command "npm start"
|
|
418
|
+
```
|
|
419
|
+
|
|
420
|
+
## Testing di VPS Ubuntu
|
|
421
|
+
|
|
422
|
+
```bash
|
|
423
|
+
sudo apt update
|
|
424
|
+
sudo apt install -y git curl
|
|
425
|
+
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
|
|
426
|
+
sudo apt install -y nodejs
|
|
427
|
+
git clone https://github.com/akaanakbaik/pterodactyl-gateway.git
|
|
428
|
+
cd pterodactyl-gateway
|
|
429
|
+
npm install
|
|
430
|
+
npm run verify
|
|
431
|
+
```
|
|
432
|
+
|
|
433
|
+
`npm run verify` menjalankan:
|
|
434
|
+
|
|
435
|
+
- `npm run typecheck`
|
|
436
|
+
- `npm test`
|
|
437
|
+
- `npm run test:cli`
|
|
438
|
+
- `npm run test:pack`
|
|
439
|
+
|
|
440
|
+
Jika semua berhasil, package siap dilanjutkan ke fitur versi berikutnya.
|
|
441
|
+
|
|
442
|
+
## Roadmap ringkas
|
|
443
|
+
|
|
444
|
+
### v0.1.x
|
|
445
|
+
|
|
446
|
+
Core SDK, smart create user, smart create server, preview, dryRun, doctor dasar, CLI dasar, raw request, test, CI, pack check.
|
|
447
|
+
|
|
448
|
+
### v0.2.x
|
|
449
|
+
|
|
450
|
+
File manager, startup variables, database manager, backup manager, network allocations, schedules, cache, pagination, preset lebih matang.
|
|
451
|
+
|
|
452
|
+
### v0.3.0
|
|
453
|
+
|
|
454
|
+
WebSocket console, stats realtime, polling fallback, audit event, event emitter.
|
|
455
|
+
|
|
456
|
+
### v0.4.0
|
|
457
|
+
|
|
458
|
+
CLI lebih lengkap: init, create-user wizard, create-server wizard, ids, server manager.
|
|
459
|
+
|
|
460
|
+
### v0.5.0
|
|
461
|
+
|
|
462
|
+
TUI atau GUI CLI terminal: dashboard interaktif, preview, create server, kontrol server, console viewer.
|
|
463
|
+
|
|
464
|
+
### v0.6.0
|
|
465
|
+
|
|
466
|
+
Experimental nest/egg create/update/delete, import/export egg, compatibility adapter.
|
|
467
|
+
|
|
468
|
+
## Lisensi
|
|
469
|
+
|
|
470
|
+
MIT
|
package/add-promt.md
ADDED
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
# Add Prompt Integrasi Akadev Pterodactyl Gateway
|
|
2
|
+
|
|
3
|
+
Gunakan dokumen ini sebagai prompt tambahan saat meminta AI mengintegrasikan package `@akadev/pterodactyl-gateway` ke project Node.js, bot, dashboard, atau backend API.
|
|
4
|
+
|
|
5
|
+
## Prompt siap pakai
|
|
6
|
+
|
|
7
|
+
Tolong integrasikan package `@akadev/pterodactyl-gateway` ke project saya dengan aman, rapi, dan mudah dipahami pemula.
|
|
8
|
+
|
|
9
|
+
Package ini adalah SDK TypeScript untuk Pterodactyl Panel. Gunakan untuk koneksi panel, membuat user, membuat server, preview create server, dry run, kontrol server, dan raw request.
|
|
10
|
+
|
|
11
|
+
Gunakan env berikut:
|
|
12
|
+
|
|
13
|
+
```env
|
|
14
|
+
PTERO_DOMAIN=https://panel.example.com
|
|
15
|
+
PTERO_PTLA=isi_application_api_key
|
|
16
|
+
PTERO_PTLC=isi_client_api_key
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Jangan hardcode API key atau password di source code.
|
|
20
|
+
|
|
21
|
+
## Cara koneksi
|
|
22
|
+
|
|
23
|
+
```ts
|
|
24
|
+
import { createPtero } from "@akadev/pterodactyl-gateway";
|
|
25
|
+
|
|
26
|
+
const ptero = createPtero.fromEnv();
|
|
27
|
+
await ptero.connect();
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Atau:
|
|
31
|
+
|
|
32
|
+
```ts
|
|
33
|
+
const ptero = createPtero({
|
|
34
|
+
domain: process.env.PTERO_DOMAIN,
|
|
35
|
+
ptla: process.env.PTERO_PTLA,
|
|
36
|
+
ptlc: process.env.PTERO_PTLC
|
|
37
|
+
});
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Fitur utama
|
|
41
|
+
|
|
42
|
+
- `ptero.connect()` untuk cek koneksi.
|
|
43
|
+
- `ptero.doctor()` untuk diagnosa konfigurasi.
|
|
44
|
+
- `ptero.users.createSmart()` untuk membuat user.
|
|
45
|
+
- `ptero.users.getOrCreate()` untuk mengambil user atau membuat jika belum ada.
|
|
46
|
+
- `ptero.servers.previewCreate()` untuk melihat payload final sebelum create server.
|
|
47
|
+
- `ptero.servers.createSmart()` untuk create server dengan auto docker image, startup, environment, default allocation, dan additional allocation.
|
|
48
|
+
- `ptero.servers.createFromPreset()` untuk create server dari preset spek.
|
|
49
|
+
- `ptero.server(identifier).start()` untuk start server.
|
|
50
|
+
- `ptero.server(identifier).stop()` untuk stop server.
|
|
51
|
+
- `ptero.server(identifier).restart()` untuk restart server.
|
|
52
|
+
- `ptero.server(identifier).kill()` untuk kill server.
|
|
53
|
+
- `ptero.server(identifier).command("npm start")` untuk kirim command.
|
|
54
|
+
- `ptero.server(identifier).resources()` untuk mengambil resource server.
|
|
55
|
+
- `ptero.raw.application` dan `ptero.raw.client` untuk endpoint yang belum tersedia wrapper.
|
|
56
|
+
|
|
57
|
+
## Create user
|
|
58
|
+
|
|
59
|
+
```ts
|
|
60
|
+
const user = await ptero.users.createSmart({
|
|
61
|
+
username: "aka",
|
|
62
|
+
email: "aka@example.com",
|
|
63
|
+
password: "auto",
|
|
64
|
+
administrator: "no"
|
|
65
|
+
});
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
Jika `password` diisi `auto`, package membuat password aman dan mengembalikannya sekali pada response.
|
|
69
|
+
|
|
70
|
+
## Create server minimal
|
|
71
|
+
|
|
72
|
+
```ts
|
|
73
|
+
const server = await ptero.servers.createSmart({
|
|
74
|
+
name: "Bot WhatsApp Aka",
|
|
75
|
+
email: "aka@example.com",
|
|
76
|
+
description: "Server bot WhatsApp untuk Aka",
|
|
77
|
+
nodeId: 1,
|
|
78
|
+
nestId: 5,
|
|
79
|
+
eggId: 15,
|
|
80
|
+
specs: {
|
|
81
|
+
memory: "2GB",
|
|
82
|
+
disk: "5GB",
|
|
83
|
+
cpu: "100%",
|
|
84
|
+
databases: 1,
|
|
85
|
+
allocations: 1,
|
|
86
|
+
backups: 1
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
## Field wajib create server
|
|
92
|
+
|
|
93
|
+
- `name`
|
|
94
|
+
- `email` atau `userId`
|
|
95
|
+
- `description`
|
|
96
|
+
- `nodeId`
|
|
97
|
+
- `nestId`
|
|
98
|
+
- `eggId`
|
|
99
|
+
- `specs.memory`
|
|
100
|
+
- `specs.disk`
|
|
101
|
+
- `specs.cpu`
|
|
102
|
+
- `specs.databases`
|
|
103
|
+
- `specs.allocations`
|
|
104
|
+
- `specs.backups`
|
|
105
|
+
|
|
106
|
+
## Field otomatis create server
|
|
107
|
+
|
|
108
|
+
- docker image dari egg
|
|
109
|
+
- startup command dari egg
|
|
110
|
+
- environment variables dari egg
|
|
111
|
+
- default allocation dari node
|
|
112
|
+
- additional allocations sesuai allocation limit
|
|
113
|
+
- swap default `0`
|
|
114
|
+
- block IO default `500`
|
|
115
|
+
- CPU pinning default kosong
|
|
116
|
+
- OOM disabled default `false`
|
|
117
|
+
- start on completion default `true`
|
|
118
|
+
|
|
119
|
+
## Preview dan dry run
|
|
120
|
+
|
|
121
|
+
```ts
|
|
122
|
+
const preview = await ptero.servers.previewCreate(input);
|
|
123
|
+
console.log(preview.payload);
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
```ts
|
|
127
|
+
const result = await ptero.servers.createSmart(input, { dryRun: true });
|
|
128
|
+
console.log(result.payload);
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
## Preset paket
|
|
132
|
+
|
|
133
|
+
```ts
|
|
134
|
+
const ptero = createPtero({
|
|
135
|
+
domain: process.env.PTERO_DOMAIN,
|
|
136
|
+
ptla: process.env.PTERO_PTLA,
|
|
137
|
+
ptlc: process.env.PTERO_PTLC,
|
|
138
|
+
presets: {
|
|
139
|
+
basic: {
|
|
140
|
+
memory: "2GB",
|
|
141
|
+
disk: "5GB",
|
|
142
|
+
cpu: "100%",
|
|
143
|
+
databases: 1,
|
|
144
|
+
allocations: 1,
|
|
145
|
+
backups: 1
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
});
|
|
149
|
+
|
|
150
|
+
await ptero.servers.createFromPreset("basic", {
|
|
151
|
+
name: "Bot Aka",
|
|
152
|
+
email: "aka@example.com",
|
|
153
|
+
description: "Paket Basic",
|
|
154
|
+
nodeId: 1,
|
|
155
|
+
nestId: 5,
|
|
156
|
+
eggId: 15
|
|
157
|
+
});
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
## Error handling
|
|
161
|
+
|
|
162
|
+
```ts
|
|
163
|
+
import { explainError } from "@akadev/pterodactyl-gateway";
|
|
164
|
+
|
|
165
|
+
try {
|
|
166
|
+
await ptero.servers.createSmart(input);
|
|
167
|
+
} catch (error) {
|
|
168
|
+
console.error(explainError(error));
|
|
169
|
+
}
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
## Raw request
|
|
173
|
+
|
|
174
|
+
```ts
|
|
175
|
+
await ptero.raw.application.get("/users");
|
|
176
|
+
await ptero.raw.application.post("/servers", payload);
|
|
177
|
+
await ptero.raw.client.get("/servers/abc123/resources");
|
|
178
|
+
await ptero.raw.client.post("/servers/abc123/command", {
|
|
179
|
+
command: "npm start"
|
|
180
|
+
});
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
## Aturan integrasi
|
|
184
|
+
|
|
185
|
+
- Simpan config rahasia di `.env`.
|
|
186
|
+
- Jangan log API key atau password.
|
|
187
|
+
- Gunakan `previewCreate()` atau `dryRun` sebelum create server final.
|
|
188
|
+
- Gunakan `explainError()` untuk pesan error yang mudah dipahami.
|
|
189
|
+
- Create server wajib memakai `nodeId`, `nestId`, dan `eggId` berupa angka.
|
|
190
|
+
- Jika ID node, nest, atau egg salah, arahkan user untuk cek di Admin Panel Pterodactyl.
|
|
191
|
+
- Jika allocation kosong, arahkan user menambah allocation di Admin Panel > Nodes > Allocations.
|
|
192
|
+
- Jangan jalankan command berisiko tanpa izin jelas dari user.
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
|