@akaanakbaik/pterodactyl-gateway 1.0.0 → 1.0.2

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 CHANGED
@@ -1,23 +1,79 @@
1
1
  # Akadev Pterodactyl Gateway
2
2
 
3
- SDK TypeScript dan CLI untuk mengelola Pterodactyl Panel dengan lebih cepat, aman, dan nyaman dari Node.js maupun terminal.
3
+ <p align="center">
4
+ <b>SDK TypeScript + CLI modern untuk mengelola Pterodactyl Panel dari bot, dashboard, backend, website, dan terminal.</b>
5
+ </p>
4
6
 
5
- Package ini cocok untuk bot reseller panel, dashboard custom, automation server, admin tools, dan project yang perlu membuat user/server Pterodactyl secara otomatis.
7
+ <p align="center">
8
+ <code>@akaanakbaik/pterodactyl-gateway</code> · <code>v1.0.2</code> · <code>Node.js &gt;=18</code> · <code>MIT</code>
9
+ </p>
10
+
11
+ <p align="center">
12
+ <a href="https://web-docs-pterodacty-gateway.vercel.app"><b>Web Docs</b></a>
13
+ ·
14
+ <a href="https://www.npmjs.com/package/@akaanakbaik/pterodactyl-gateway"><b>npm</b></a>
15
+ ·
16
+ <a href="https://github.com/akaanakbaik/pterodactyl-gateway"><b>GitHub</b></a>
17
+ </p>
18
+
19
+ Akadev Pterodactyl Gateway membantu kamu menghubungkan aplikasi Node.js ke Pterodactyl Panel dengan flow yang lebih aman, cepat, dan mudah diuji: cek koneksi, membuat user, membuat server, dry-run payload, mengelola file, startup variables, backups, schedules, power action, sampai helper integrasi bot/website.
6
20
 
7
21
  > Package ini bukan package resmi dari Pterodactyl dan tidak berafiliasi dengan Pterodactyl Software.
8
22
 
9
- ## Status
23
+ ## Web Docs
10
24
 
11
- Versi saat ini: `1.0.0`
25
+ Dokumentasi lengkap versi web tersedia di:
12
26
 
13
- - npm package: `@akaanakbaik/pterodactyl-gateway`
14
- - CLI utama: `ptero-gateway` dan `ptg`
15
- - CLI wizard: `ptero-wizard`
16
- - Runtime: Node.js `>=18`
17
- - License: MIT
27
+ ```txt
28
+ https://web-docs-pterodacty-gateway.vercel.app
29
+ ```
30
+
31
+ Web docs berisi tutorial per halaman/path agar mudah dipahami pemula:
32
+
33
+ ```txt
34
+ /docs/overview
35
+ /docs/install
36
+ /docs/config
37
+ /docs/cli-create-server
38
+ /docs/sdk
39
+ /docs/integrations/telegram-bot
40
+ /docs/integrations/whatsapp-bot
41
+ /docs/integrations/discord-bot
42
+ /docs/integrations/website-api
43
+ /docs/security
44
+ /docs/troubleshooting
45
+ /privacy
46
+ /terms
47
+ ```
48
+
49
+ Fitur web docs:
50
+
51
+ - Search lokal cepat.
52
+ - Floating AI assistant untuk pertanyaan seputar gateway.
53
+ - Tutorial step-by-step.
54
+ - Simulasi animasi penggunaan.
55
+ - Contoh integrasi Telegram bot, WhatsApp bot, Discord bot, website/API, SDK, CLI, dan troubleshooting.
56
+ - Privacy Policy dan Terms.
57
+ - SEO lengkap: sitemap, robots, canonical, OpenGraph, Twitter card, JSON-LD, manifest, dan SVG icon.
58
+
59
+ ## Navigasi
60
+
61
+ - [Install](#install)
62
+ - [Quick start CLI](#quick-start-cli)
63
+ - [SDK usage](#sdk-usage)
64
+ - [Environment](#environment)
65
+ - [CLI reference](#cli-reference)
66
+ - [Preset dan template](#preset-dan-template)
67
+ - [Integration helpers](#integration-helpers)
68
+ - [Contoh integrasi](#contoh-integrasi)
69
+ - [Keamanan](#keamanan)
70
+ - [Troubleshooting](#troubleshooting)
71
+ - [Release dan testing](#release-dan-testing)
18
72
 
19
73
  ## Install
20
74
 
75
+ Install sebagai dependency project:
76
+
21
77
  ```bash
22
78
  npm i @akaanakbaik/pterodactyl-gateway
23
79
  ```
@@ -28,7 +84,7 @@ Install global CLI:
28
84
  npm i -g @akaanakbaik/pterodactyl-gateway
29
85
  ```
30
86
 
31
- Cek versi dan kondisi package:
87
+ Cek instalasi:
32
88
 
33
89
  ```bash
34
90
  ptero-gateway version
@@ -36,25 +92,7 @@ ptero-gateway self-check
36
92
  ptero-gateway release-check
37
93
  ```
38
94
 
39
- ## API key
40
-
41
- Gunakan dua jenis key sesuai kebutuhan:
42
-
43
- ```env
44
- PTERO_DOMAIN=https://panel.example.com
45
- PTERO_PTLA=ptla_xxxxxxxxxxxxxxxxx
46
- PTERO_PTLC=ptlc_xxxxxxxxxxxxxxxxx
47
- ```
48
-
49
- - `PTERO_DOMAIN`: domain panel Pterodactyl.
50
- - `PTERO_PTLA`: Application API Key untuk aksi admin seperti list user, create user, create server, update limits, suspend, unsuspend, dan reinstall.
51
- - `PTERO_PTLC`: Client API Key untuk kontrol server seperti resources, file manager, startup variables, ports, backups, schedules, dan power action.
52
-
53
- Jangan hardcode API key ke source code.
54
-
55
- ## Config profile
56
-
57
- Sejak `0.8.0`, CLI bisa menyimpan profile lokal agar tidak perlu export env berulang-ulang.
95
+ ## Quick start CLI
58
96
 
59
97
  ```bash
60
98
  ptero-gateway config init \
@@ -63,106 +101,20 @@ ptero-gateway config init \
63
101
  --ptla ptla_xxx \
64
102
  --ptlc ptlc_xxx
65
103
 
66
- ptero-gateway config doctor
67
- ptero-gateway config list
68
- ptero-gateway doctor
69
- ```
70
-
71
- File config disimpan di:
72
-
73
- ```txt
74
- ~/.pterodactyl-gateway/config.json
75
- ```
76
-
77
- File tersebut berisi API key dan otomatis diberi permission `600`.
78
-
79
- Command config:
80
-
81
- ```bash
82
- ptero-gateway config path
83
- ptero-gateway config init --profile main --domain https://panel.example.com --ptla ptla_xxx --ptlc ptlc_xxx
84
- ptero-gateway config list
85
- ptero-gateway config show main
86
- ptero-gateway config use main
87
- ptero-gateway config rename main production
88
- ptero-gateway config delete production --yes
89
- ptero-gateway config env main
90
- ptero-gateway config doctor
91
- ```
92
-
93
- ## CLI cepat
94
-
95
- ```bash
96
- ptero-gateway help
97
104
  ptero-gateway doctor
98
- ptero-gateway connect
99
- ptero-gateway ids
100
105
  ptero-gateway ids --nest 5
101
- ptero-gateway servers
102
- ```
103
-
104
- List admin:
105
-
106
- ```bash
107
106
  ptero-gateway admin users
108
107
  ptero-gateway admin servers
108
+ ptero-gateway servers
109
109
  ```
110
110
 
111
- ## Preset server
112
-
113
- ```bash
114
- ptero-gateway presets
115
- ```
116
-
117
- Preset bawaan:
118
-
119
- | Preset | Memory | Disk | CPU | Database | Allocation | Backup |
120
- |---|---:|---:|---:|---:|---:|---:|
121
- | mini | 512MB | 1GB | 50% | 0 | 1 | 0 |
122
- | basic | 1GB | 2GB | 100% | 0 | 1 | 0 |
123
- | standard | 2GB | 5GB | 200% | 1 | 1 | 1 |
124
- | premium | 4GB | 10GB | 300% | 2 | 2 | 2 |
125
- | unlimited | 0 | 0 | 0 | 5 | 3 | 3 |
126
-
127
- Nilai preset tetap bisa dioverride dengan `--memory`, `--disk`, `--cpu`, `--databases`, `--allocations`, dan `--backups`.
128
-
129
- ## Templates
130
-
131
- Template hanya membuat rekomendasi command create-server. Template tidak membuat node, location, atau allocation.
132
-
133
- ```bash
134
- ptero-gateway templates list
135
- ptero-gateway templates show nodejs-bot
136
- ptero-gateway templates command nodejs-bot --name "bot saya" --email user@example.com --node 1 --nest 5 --egg 18
137
- ```
138
-
139
- Template bawaan:
140
-
141
- - `nodejs-bot`
142
- - `nodejs-api`
143
- - `wa-bot`
144
- - `python-bot`
145
- - `blank`
146
-
147
- ## Create user
148
-
149
- ```bash
150
- ptero-gateway admin create-user \
151
- --username aka_test \
152
- --email user@example.com \
153
- --password "password aman" \
154
- --yes
155
- ```
156
-
157
- ## Create server
158
-
159
- Selalu mulai dengan dry-run:
111
+ Create server dengan dry-run:
160
112
 
161
113
  ```bash
162
114
  ptero-gateway admin create-server \
163
115
  --name "aka test" \
164
- --email "user@example.com" \
165
- --username "aka_test" \
116
+ --email user@example.com \
117
+ --username aka_test \
166
118
  --password "password aman" \
167
119
  --node 1 \
168
120
  --nest 5 \
@@ -171,13 +123,13 @@ ptero-gateway admin create-server \
171
123
  --dry-run
172
124
  ```
173
125
 
174
- Jika payload sudah benar, eksekusi asli:
126
+ Create server asli:
175
127
 
176
128
  ```bash
177
129
  ptero-gateway admin create-server \
178
130
  --name "aka test" \
179
- --email "user@example.com" \
180
- --username "aka_test" \
131
+ --email user@example.com \
132
+ --username aka_test \
181
133
  --password "password aman" \
182
134
  --node 1 \
183
135
  --nest 5 \
@@ -186,22 +138,95 @@ ptero-gateway admin create-server \
186
138
  --yes
187
139
  ```
188
140
 
189
- ## Wizard
141
+ ## SDK usage
190
142
 
191
- Wizard membantu input secara interaktif tanpa membuka kontrol node/location/allocation.
143
+ ```ts
144
+ import { createPtero } from "@akaanakbaik/pterodactyl-gateway";
192
145
 
193
- ```bash
194
- ptero-wizard help
195
- ptero-wizard create-user --dry-run
196
- ptero-wizard create-server --dry-run
197
- ptero-wizard create-server --yes
146
+ const ptero = createPtero.fromEnv();
147
+ const doctor = await ptero.doctor();
148
+ console.log(doctor);
149
+ ```
150
+
151
+ Create server dari SDK:
152
+
153
+ ```ts
154
+ const server = await ptero.servers.createSmart({
155
+ name: "Bot User",
156
+ email: "user@example.com",
157
+ username: "user_bot",
158
+ password: "auto",
159
+ autoCreateUser: true,
160
+ description: "Server bot user",
161
+ nodeId: 1,
162
+ nestId: 5,
163
+ eggId: 18,
164
+ specs: {
165
+ memory: "1GB",
166
+ disk: "2GB",
167
+ cpu: "100%",
168
+ databases: 0,
169
+ allocations: 1,
170
+ backups: 0
171
+ }
172
+ });
198
173
  ```
199
174
 
200
- Node ID, Nest ID, dan Egg ID tetap diisi manual oleh admin. Gunakan `ptero-gateway ids` untuk melihat daftar ID.
175
+ Client server handle:
176
+
177
+ ```ts
178
+ const serverHandle = ptero.server("311d56b7");
179
+
180
+ await serverHandle.resources();
181
+ await serverHandle.files.list("/");
182
+ await serverHandle.files.write("/tmp/hello.txt", "halo");
183
+ await serverHandle.startup.set("CMD_RUN", "node index.js");
184
+ await serverHandle.start();
185
+ ```
186
+
187
+ ## Environment
188
+
189
+ Gunakan environment variable untuk deployment:
190
+
191
+ ```env
192
+ PTERO_DOMAIN=https://panel.example.com
193
+ PTERO_PTLA=ptla_xxxxxxxxxxxxxxxxx
194
+ PTERO_PTLC=ptlc_xxxxxxxxxxxxxxxxx
195
+ ```
196
+
197
+ | Env | Fungsi |
198
+ |---|---|
199
+ | `PTERO_DOMAIN` | Domain panel Pterodactyl. |
200
+ | `PTERO_PTLA` | Application API Key untuk aksi admin seperti user, server, suspend, limits. |
201
+ | `PTERO_PTLC` | Client API Key untuk kontrol server, file manager, backups, schedules, resources. |
202
+
203
+ Tips:
204
+
205
+ - PTLA hanya untuk backend/admin service.
206
+ - PTLC hanya untuk fitur client server yang diperlukan.
207
+ - Jangan hardcode key ke source code, repo, frontend, pesan bot, atau log publik.
208
+ - Pisahkan key development dan production.
209
+
210
+ ## CLI reference
211
+
212
+ Health dan info:
213
+
214
+ ```bash
215
+ ptero-gateway help
216
+ ptero-gateway version
217
+ ptero-gateway self-check
218
+ ptero-gateway release-check
219
+ ptero-gateway doctor
220
+ ptero-gateway connect
221
+ ptero-gateway ids
222
+ ptero-gateway ids --nest 5
223
+ ```
201
224
 
202
- ## Admin server
225
+ Admin:
203
226
 
204
227
  ```bash
228
+ ptero-gateway admin users
229
+ ptero-gateway admin servers
205
230
  ptero-gateway admin server 5 detail
206
231
  ptero-gateway admin server 5 limits
207
232
  ptero-gateway admin server 5 update-limits --backups 1 --yes
@@ -210,7 +235,7 @@ ptero-gateway admin server 5 unsuspend --yes
210
235
  ptero-gateway admin server 5 reinstall --yes
211
236
  ```
212
237
 
213
- ## Client server
238
+ Client server:
214
239
 
215
240
  ```bash
216
241
  ptero-gateway probe 311d56b7
@@ -225,14 +250,7 @@ ptero-gateway server 311d56b7 backups
225
250
  ptero-gateway server 311d56b7 schedules
226
251
  ```
227
252
 
228
- Write file:
229
-
230
- ```bash
231
- ptero-gateway server 311d56b7 write /tmp/test.txt "halo" --yes
232
- ptero-gateway server 311d56b7 write /index.js "console.log('halo')" --yes --allow-any-path
233
- ```
234
-
235
- Power action:
253
+ Power dan command:
236
254
 
237
255
  ```bash
238
256
  ptero-gateway server 311d56b7 start --yes
@@ -242,122 +260,167 @@ ptero-gateway server 311d56b7 kill --yes
242
260
  ptero-gateway server 311d56b7 command "npm start" --yes
243
261
  ```
244
262
 
245
- Template Node alive:
263
+ ## Preset dan template
246
264
 
247
265
  ```bash
248
- ptero-gateway server 311d56b7 stop --yes
249
- ptero-gateway server 311d56b7 init-node-alive --yes
250
- ptero-gateway server 311d56b7 start --yes
266
+ ptero-gateway presets
267
+ ptero-gateway templates list
268
+ ptero-gateway templates show nodejs-bot
269
+ ptero-gateway templates command nodejs-bot --name "bot saya" --email user@example.com --node 1 --nest 5 --egg 18
251
270
  ```
252
271
 
253
- Backup:
272
+ Preset bawaan:
273
+
274
+ | Preset | Cocok untuk |
275
+ |---|---|
276
+ | `mini` | Testing dan bot kecil. |
277
+ | `basic` | Bot Telegram/Discord sederhana. |
278
+ | `standard` | Bot WhatsApp, API, website kecil. |
279
+ | `premium` | Project lebih aktif. |
280
+ | `unlimited` | Resource unlimited sesuai aturan panel. |
254
281
 
255
- ```bash
256
- ptero-gateway server 311d56b7 backups
257
- ptero-gateway server 311d56b7 create-backup --name "before-update" --yes
258
- ptero-gateway server 311d56b7 backup <uuid>
259
- ptero-gateway server 311d56b7 delete-backup <uuid> --yes
282
+ Template bawaan:
283
+
284
+ ```txt
285
+ nodejs-bot
286
+ nodejs-api
287
+ wa-bot
288
+ python-bot
289
+ blank
260
290
  ```
261
291
 
262
- ## SDK
292
+ ## Integration helpers
293
+
294
+ Helper integrasi membuat input server lebih konsisten untuk bot dan website.
263
295
 
264
296
  ```ts
265
- import { createPtero } from "@akaanakbaik/pterodactyl-gateway";
297
+ import { createIntegrationService } from "@akaanakbaik/pterodactyl-gateway";
266
298
 
267
- const ptero = createPtero({
268
- domain: "https://panel.example.com",
299
+ const service = createIntegrationService({
300
+ domain: process.env.PTERO_DOMAIN,
269
301
  ptla: process.env.PTERO_PTLA,
270
302
  ptlc: process.env.PTERO_PTLC
303
+ }, {
304
+ nodeId: 1,
305
+ nestId: 5,
306
+ eggId: 18,
307
+ preset: "standard",
308
+ autoCreateUser: true
271
309
  });
272
310
 
273
- await ptero.connect();
311
+ const dryRun = await service.dryRun({
312
+ kind: "telegram-bot",
313
+ name: "Telegram Bot User",
314
+ email: "user@example.com",
315
+ username: "user_tg",
316
+ password: "auto"
317
+ });
274
318
  ```
275
319
 
276
- Dari env:
320
+ Kind yang tersedia:
277
321
 
278
322
  ```ts
279
- import { createPtero } from "@akaanakbaik/pterodactyl-gateway";
280
-
281
- const ptero = createPtero.fromEnv();
282
- const doctor = await ptero.doctor();
283
- console.log(doctor);
323
+ "whatsapp-bot" | "telegram-bot" | "discord-bot" | "nodejs-api" | "website" | "python-bot" | "blank"
284
324
  ```
285
325
 
286
- Create user SDK:
326
+ ## Contoh integrasi
327
+
328
+ Telegram bot:
287
329
 
288
330
  ```ts
289
- const user = await ptero.users.createSmart({
290
- username: "aka_test",
291
- email: "user@example.com",
292
- password: "auto",
293
- administrator: false
331
+ const result = await service.create({
332
+ kind: "telegram-bot",
333
+ name: `tg-${ctx.from.id}`,
334
+ email: `${ctx.from.id}@telegram.local`,
335
+ username: `tg_${ctx.from.id}`,
336
+ password: "auto"
294
337
  });
295
338
  ```
296
339
 
297
- Create server SDK:
340
+ WhatsApp bot:
298
341
 
299
342
  ```ts
300
- const server = await ptero.servers.createSmart({
301
- name: "Bot WhatsApp Aka",
302
- email: "user@example.com",
303
- username: "aka_test",
304
- password: "password aman",
305
- autoCreateUser: true,
306
- description: "Server bot WhatsApp",
307
- nodeId: 1,
308
- nestId: 5,
309
- eggId: 18,
310
- specs: {
311
- memory: "1GB",
312
- disk: "2GB",
313
- cpu: "100%",
314
- databases: 0,
315
- allocations: 1,
316
- backups: 0
343
+ const result = await service.create({
344
+ kind: "whatsapp-bot",
345
+ name: `wa-${order.username}`,
346
+ email: order.email,
347
+ username: order.username,
348
+ password: "auto",
349
+ environment: {
350
+ OWNER_NUMBER: order.phone,
351
+ BOT_NAME: order.botName
317
352
  }
318
353
  });
319
354
  ```
320
355
 
321
- Dry-run SDK:
356
+ Website/API:
322
357
 
323
358
  ```ts
324
- const preview = await ptero.servers.createSmart(input, { dryRun: true });
325
- console.log(preview.payload);
359
+ app.post("/api/panel/create", async (req, res) => {
360
+ const paid = await checkPayment(req.body.orderId);
361
+ if (!paid) return res.status(403).json({ ok: false, error: "Belum dibayar" });
362
+
363
+ const result = await service.create({
364
+ kind: "website",
365
+ name: req.body.name,
366
+ email: req.body.email,
367
+ username: req.body.username,
368
+ password: "auto"
369
+ });
370
+
371
+ res.json({ ok: true, result });
372
+ });
326
373
  ```
327
374
 
328
- Client SDK:
375
+ Dokumentasi contoh lengkap ada di web docs:
329
376
 
330
- ```ts
331
- const server = ptero.server("311d56b7");
332
-
333
- await server.resources();
334
- await server.files.list("/");
335
- await server.files.read("/package.json");
336
- await server.files.write("/tmp/test.txt", "halo");
337
- await server.startup.variables();
338
- await server.startup.set("CMD_RUN", "node index.js");
339
- await server.backups.list();
377
+ ```txt
378
+ https://web-docs-pterodacty-gateway.vercel.app/docs/integrations/telegram-bot
379
+ https://web-docs-pterodacty-gateway.vercel.app/docs/integrations/whatsapp-bot
380
+ https://web-docs-pterodacty-gateway.vercel.app/docs/integrations/discord-bot
381
+ https://web-docs-pterodacty-gateway.vercel.app/docs/integrations/website-api
340
382
  ```
341
383
 
342
- Raw request:
384
+ ## Keamanan
343
385
 
344
- ```ts
345
- await ptero.raw.application.get("/users");
346
- await ptero.raw.client.get("/servers/311d56b7/resources");
386
+ - Jangan hardcode PTLA/PTLC.
387
+ - Jangan kirim API key atau config profile ke user.
388
+ - Jangan log password generated ke public log.
389
+ - Semua aksi tulis/ubah via CLI wajib `--yes`.
390
+ - Write file CLI default hanya boleh ke `/tmp`; path lain wajib `--allow-any-path`.
391
+ - Command berbahaya diblokir oleh guard command.
392
+ - Delete user/server permanen tidak dibuka di CLI stabil.
393
+ - Command node/location/allocation management tidak dibuka di CLI stabil.
394
+ - Frontend tidak boleh memegang API key panel. Gunakan backend untuk semua aksi create server.
395
+
396
+ ## Troubleshooting
397
+
398
+ ```bash
399
+ ptero-gateway explain DOMAIN_REQUIRED
400
+ ptero-gateway explain DOCKER_IMAGE_NOT_FOUND
401
+ ptero-gateway explain STARTUP_VARIABLE_NOT_FOUND
402
+ ptero-gateway explain EEXIST
347
403
  ```
348
404
 
349
- ## Keamanan
405
+ Masalah umum:
350
406
 
351
- - Jangan hardcode PTLA/PTLC di source code.
352
- - Config lokal berisi API key; jangan upload `~/.pterodactyl-gateway/config.json`.
353
- - Semua aksi tulis/ubah via CLI wajib `--yes`.
354
- - Write file CLI default hanya boleh ke `/tmp`; untuk path lain wajib `--allow-any-path`.
355
- - Command berbahaya seperti `rm -rf /` diblokir oleh guard command.
356
- - Gunakan `--dry-run` sebelum create server asli.
357
- - Command node/location/allocation management sengaja tidak dibuka.
358
- - Delete user/server permanen sengaja tidak dibuka di CLI stabil.
407
+ | Masalah | Solusi |
408
+ |---|---|
409
+ | `DOMAIN_REQUIRED` | Isi `PTERO_DOMAIN` atau jalankan `ptero-gateway config init`. |
410
+ | PTLA tidak valid | Buat ulang Application API Key dan pastikan permission cukup. |
411
+ | PTLC tidak valid | Buat ulang Client API Key dari account panel. |
412
+ | Docker image tidak ditemukan | Cek egg Docker Images atau isi `--docker-image`. |
413
+ | Tidak ada allocation kosong | Tambahkan allocation dari panel admin node. |
414
+ | Backup gagal limit 0 | Naikkan limit backup server dulu. |
415
+ | Binary global konflik | Hapus `/usr/bin/ptero-gateway`, `/usr/bin/ptg`, lalu install ulang. |
416
+
417
+ Tutorial lengkap troubleshooting:
418
+
419
+ ```txt
420
+ https://web-docs-pterodacty-gateway.vercel.app/docs/troubleshooting
421
+ ```
359
422
 
360
- ## Testing lokal
423
+ ## Release dan testing
361
424
 
362
425
  ```bash
363
426
  git clone https://github.com/akaanakbaik/pterodactyl-gateway.git
@@ -366,22 +429,27 @@ npm install
366
429
  npm run verify
367
430
  ```
368
431
 
369
- `npm run verify` menjalankan typecheck, unit test, CLI smoke test, release guard, dan pack dry-run.
370
-
371
- ## Release checklist
432
+ Checklist publish:
372
433
 
373
434
  ```bash
374
435
  npm run verify
375
436
  npm publish --access public
376
- npm view @akaanakbaik/pterodactyl-gateway@1.0.0 version --prefer-online --registry=https://registry.npmjs.org/
377
- npm i -g @akaanakbaik/pterodactyl-gateway@1.0.0 --force --prefer-online --registry=https://registry.npmjs.org/
437
+ npm view @akaanakbaik/pterodactyl-gateway@1.0.2 version --prefer-online --registry=https://registry.npmjs.org/
438
+ npm i -g @akaanakbaik/pterodactyl-gateway@1.0.2 --force --prefer-online --registry=https://registry.npmjs.org/
378
439
  ptero-gateway self-check
379
440
  ptero-gateway release-check
441
+ ptero-gateway doctor
380
442
  ```
381
443
 
382
- ## Menuju 1.0.0
444
+ ## Versi npm lama
445
+
446
+ Rilis utama yang direkomendasikan adalah `1.0.2` atau `latest`. Versi lama tidak dipromosikan lagi di dokumentasi.
383
447
 
384
- `0.9.1` adalah hardening patch release sebelum stabil. Fokus berikutnya untuk `1.0.0` adalah stabilisasi API, dokumentasi final, dan kompatibilitas panel/fork yang lebih luas.
448
+ Contoh deprecate versi lama:
449
+
450
+ ```bash
451
+ npm deprecate @akaanakbaik/pterodactyl-gateway@"<1.0.0" "Versi lama tidak direkomendasikan. Gunakan @akaanakbaik/pterodactyl-gateway@latest."
452
+ ```
385
453
 
386
454
  ## Lisensi
387
455