@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/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,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}