SDK TypeScript & JavaScript Modern untuk Pterodactyl Panel dengan fitur Auto-Deployment, WebSocket Auto-Reconnect, Ekspor Backup Otomatis ke Email, dan Fluent Schedule Builder.
Memulai koneksi ke Pterodactyl Panel menggunakan domain, Application API Key (PTLA) untuk tindakan admin, dan Client API Key (PTLC) untuk tindakan pengguna.
import { createPtero } from "@akaanakbaik/pterodactyl-gateway";
const ptero = createPtero({
domain: "panel.example.com",
ptla: "ptla_your_application_key",
ptlc: "ptlc_your_client_key",
debug: true
});const conn = await ptero.connect();
console.log(conn.ok, conn.mode, conn.latency);const report = await ptero.doctor();
console.log(report.ok, report.checks);Melakukan operasi CRUD penuh pada akun admin/pengguna panel.
const user = await ptero.smart.users.getOrCreate({
username: "customer_akadev",
email: "customer@akadev.me",
password: "auto",
administrator: false
});
console.log(user.id, user.username, user.email);const newUser = await ptero.application.users.create({
username: "user_baru",
email: "baru@akadev.me",
password: "PasswordRahasia123!",
root_admin: false,
first_name: "User",
last_name: "Baru"
});
console.log(newUser);const list = await ptero.application.users.list(1);
console.log(list.data);const userDetail = await ptero.application.users.get(1);
console.log(userDetail.attributes.username);const foundUser = await ptero.application.users.find("baru@akadev.me");
console.log(foundUser);const updated = await ptero.application.users.update(1, {
username: "user_diupdate",
email: "update@akadev.me",
first_name: "Nama",
last_name: "Baru"
});
console.log(updated);await ptero.application.users.delete(1);Melihat lokasi wilayah dan mengelola node/alokasi port server Pterodactyl.
const locations = await ptero.application.locations.list();
console.log(locations.data);
const location = await ptero.application.locations.get(1);
console.log(location);const nodes = await ptero.application.nodes.list();
console.log(nodes.data);
const node = await ptero.application.nodes.get(1);
console.log(node.attributes.name);
const nodeConfig = await ptero.application.nodes.config(1);
console.log(nodeConfig);const allocations = await ptero.application.nodes.allocations.list(1);
console.log(allocations.data);
await ptero.application.nodes.allocations.create(1, {
ip: "192.168.1.100",
ports: ["25565", "25566"]
});
await ptero.application.nodes.allocations.delete(1, 100);Membaca struktur Nest (kategori) dan Egg (konfigurasi startup server).
const nests = await ptero.application.nests.list();
console.log(nests.data);
const nest = await ptero.application.nests.get(5);
console.log(nest.attributes.name);
const nestByName = await ptero.application.nests.find("nodejs");
console.log(nestByName.id);const eggs = await ptero.application.nests.eggs.list(5);
console.log(eggs.data);
const egg = await ptero.application.nests.eggs.get(5, 15);
console.log(egg.attributes.name);
const eggByName = await ptero.application.nests.eggs.find(5, "Egg Bot Wa");
console.log(eggByName.id);Mendeploy server baru secara otomatis, mengubah spesifikasi, pemilik, dan nest/egg.
const preview = await ptero.smart.servers.preview({
name: "Server Uji Coba",
description: "Server test deploy",
email: "customer@akadev.me",
autoCreateUser: true,
nodeId: 1,
nestId: 5,
eggId: 15,
preset: "mini"
});
console.log(preview.payload, preview.allocation);const server = await ptero.smart.servers.create({
name: "Server Game Akadev",
description: "Dibuat otomatis oleh SDK",
email: "customer@akadev.me",
autoCreateUser: true,
nodeId: 1,
nestId: 5,
eggId: 15,
preset: "standard",
startOnCompletion: true
});
console.log(server.id, server.identifier);const details = await ptero.getServerDetails(18);
console.log(details.name, details.nodeName, details.userEmail);await ptero.smart.servers.updateSpecs(18, {
memory: "4GB",
disk: "10GB",
cpu: "200%",
databases: 2,
backups: 2,
allocations: 1
});await ptero.smart.servers.changeOwnership(18, {
userId: 2
});await ptero.smart.servers.changeNestEgg(18, {
nestId: 5,
eggId: 15,
dockerImage: "ghcr.io/parkervcp/yolks:nodejs_22",
startup: "npm start"
});await ptero.application.servers.suspend(18);
await ptero.application.servers.unsuspend(18);
await ptero.application.servers.reinstall(18);await ptero.application.servers.delete(18, true);await ptero.batchServerOperation([18, 19, 20], "suspend");
await ptero.batchServerOperation([18, 19, 20], "unsuspend");
await ptero.batchServerOperation([18, 19, 20], "delete", { force: true });Interaksi pengguna akhir dengan server (Client API).
const server = ptero.server("ca7b58fd");await server.power("start");
await server.power("stop");
await server.power("restart");
await server.power("kill");await server.command("say Halo Dunia!");const res = await server.resources();
console.log(res.attributes.state, res.attributes.resources.cpu_absolute);Mengelola file dan direktori di dalam kontainer server game/bot.
await server.files.write("/index.js", "console.log('Akadev Gateway');");
const data = await server.files.read("/index.js");
console.log(data);const list = await server.files.list("/");
console.log(list.data);await server.files.mkdir("/", "dist");await server.files.rename("/", [
{ from: "index.js", to: "main.js" }
]);await server.files.compress("/", ["main.js", "dist"]);
await server.files.decompress("/", "main.js.tar.gz");await server.files.delete("/", ["main.js", "dist", "main.js.tar.gz"]);await server.files.json.write("/config.json", { port: 3000, debug: false });
const config = await server.files.json.read("/config.json");
console.log(config);Mengelola alokasi alamat port pada server.
const net = await server.network.list();
console.log(net.data);await server.network.assign();await server.network.setNote(21, "Port untuk bot whatsapp");await server.network.setPrimary(21);await server.network.delete(21);Mengelola database MySQL server.
const dbs = await server.databases.list();
console.log(dbs.data);const db = await server.databases.create("game_db");
console.log(db.attributes.id, db.attributes.relationships.password);await server.databases.rotatePassword("db_id_xxx");await server.databases.delete("db_id_xxx");Membuat dan memulihkan file pencadangan.
const backups = await server.backups.list();
console.log(backups.data);const backup = await server.backups.create("backup_clean", "node_modules\nvendor\ntmp");
console.log(backup.attributes.uuid);const backupDetail = await server.backups.get("backup_uuid_xxx");
console.log(backupDetail.attributes.bytes);const downloadLink = await server.backups.download("backup_uuid_xxx");
console.log(downloadLink.attributes.url);await server.backups.delete("backup_uuid_xxx");Mendengarkan event status server, log konsol, dan penggunaan memori/CPU secara real-time. Dilengkapi mekanisme auto-reconnect dan auto token-refresh jika sambungan terputus.
const ws = server.websocket.create();
ws.onConsole((log) => {
console.log("Console:", log);
});
ws.onStats((stats) => {
console.log("RAM:", stats.memory_bytes, "CPU:", stats.cpu_absolute);
});
ws.onStatus((status) => {
console.log("Status:", status);
});
await ws.connect();Membuat jadwal tugas terjadwal (Cron Job) bawaan panel menggunakan struktur builder terantai.
const schedule = server.createScheduleBuilder()
.setName("Pembersihan Mingguan")
.setCron("0 0 * * 0")
.setOnlyWhenOnline(true)
.addTask("command", "say Server membersihkan data cache...", 0, true)
.addTask("command", "npm run clean", 10, false)
.addTask("backup", "", 30, false);
await schedule.save();Mengirim email pemberitahuan ke pelanggan dan melakukan pencadangan zip otomatis secara eksternal. Secara otomatis membaca konfigurasi SMTP Host, Port, Username, Password, dan Pengirim dari file /var/www/pterodactyl/.env di server panel Anda.
await ptero.email.sendToUser(1, {
subject: "Pengumuman Pembayaran Server",
html: "<h2>Halo</h2><p>Server Anda akan segera jatuh tempo dalam 3 hari.</p>",
attachments: [
{
filename: "invoice.pdf",
path: "/tmp/invoice.pdf"
}
]
});await ptero.email.broadcast({
subject: "Pemeliharaan Node Server Indonesia",
html: "<h3>Pemberitahuan Sistem</h3><p>Node ID 1 akan dimatikan sementara untuk pemeliharaan RAM.</p>"
});Secara otomatis membuat backup di panel dengan menyaring folder-folder berat (node_modules, vendor, cache, tmp, temp, .git), mengunduh file hasil backup, mengompres ulangnya ke ekstensi .zip, mengirimkannya langsung ke email pemilik server, dan menghapus sisa file backup di panel.
await ptero.exportAndEmailBackup(18);await ptero.backupAndEmailUserServers(1);- Simpan kredensial Anda di environment variables (
PTERO_DOMAIN,PTERO_PTLA,PTERO_PTLC). - Gunakan
PteroGateway.fromEnv()untuk pemanggilan otomatis dari konfigurasi environment variables. - SDK ini dipastikan bebas dari baris komentar di seluruh source kodenya.
Dibuat dengan ❤️ oleh akaanakbaik