@akaanakbaik/pterodactyl-gateway 0.5.0 → 0.9.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 +184 -212
- package/dist/cli-entry.js +38 -3
- package/dist/cli-entry.js.map +1 -1
- package/dist/config.d.ts +8 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +248 -0
- package/dist/config.js.map +1 -0
- package/dist/meta.d.ts +4 -0
- package/dist/meta.d.ts.map +1 -0
- package/dist/meta.js +80 -0
- package/dist/meta.js.map +1 -0
- package/dist/templates.d.ts +2 -0
- package/dist/templates.d.ts.map +1 -0
- package/dist/templates.js +139 -0
- package/dist/templates.js.map +1 -0
- package/dist/wizard.js +5 -5
- package/package.json +4 -3
package/README.md
CHANGED
|
@@ -1,16 +1,22 @@
|
|
|
1
1
|
# Akadev Pterodactyl Gateway
|
|
2
2
|
|
|
3
|
-
SDK TypeScript dan CLI untuk
|
|
3
|
+
SDK TypeScript dan CLI untuk mengelola Pterodactyl Panel dengan lebih cepat, aman, dan nyaman dari Node.js maupun terminal.
|
|
4
4
|
|
|
5
5
|
Package ini cocok untuk bot reseller panel, dashboard custom, automation server, admin tools, dan project yang perlu membuat user/server Pterodactyl secara otomatis.
|
|
6
6
|
|
|
7
|
-
Package ini bukan package resmi dari Pterodactyl dan tidak berafiliasi dengan Pterodactyl Software.
|
|
7
|
+
> Package ini bukan package resmi dari Pterodactyl dan tidak berafiliasi dengan Pterodactyl Software.
|
|
8
8
|
|
|
9
9
|
## Status
|
|
10
10
|
|
|
11
|
-
Versi saat ini: `0.
|
|
11
|
+
Versi saat ini: `0.9.0`
|
|
12
12
|
|
|
13
|
-
|
|
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
|
|
18
|
+
|
|
19
|
+
## Install
|
|
14
20
|
|
|
15
21
|
```bash
|
|
16
22
|
npm i @akaanakbaik/pterodactyl-gateway
|
|
@@ -22,53 +28,17 @@ Install global CLI:
|
|
|
22
28
|
npm i -g @akaanakbaik/pterodactyl-gateway
|
|
23
29
|
```
|
|
24
30
|
|
|
25
|
-
|
|
31
|
+
Cek versi dan kondisi package:
|
|
26
32
|
|
|
27
33
|
```bash
|
|
28
|
-
ptero-gateway
|
|
29
|
-
|
|
34
|
+
ptero-gateway version
|
|
35
|
+
ptero-gateway self-check
|
|
36
|
+
ptero-gateway release-check
|
|
30
37
|
```
|
|
31
38
|
|
|
32
|
-
##
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
- koneksi PTLA dan PTLC
|
|
37
|
-
- `doctor`
|
|
38
|
-
- `ids`
|
|
39
|
-
- list admin users
|
|
40
|
-
- list admin servers
|
|
41
|
-
- create user
|
|
42
|
-
- create server dengan dry-run
|
|
43
|
-
- create server asli
|
|
44
|
-
- auto docker image dari egg
|
|
45
|
-
- auto startup dari egg
|
|
46
|
-
- auto allocation
|
|
47
|
-
- detail server admin
|
|
48
|
-
- limits server admin
|
|
49
|
-
- update limits server admin
|
|
50
|
-
- suspend server
|
|
51
|
-
- unsuspend server
|
|
52
|
-
- probe read-only client server
|
|
53
|
-
- summary server
|
|
54
|
-
- resources realtime/polling
|
|
55
|
-
- files list
|
|
56
|
-
- files read
|
|
57
|
-
- files write
|
|
58
|
-
- startup/env read
|
|
59
|
-
- startup/env set
|
|
60
|
-
- network/ports read
|
|
61
|
-
- backup list
|
|
62
|
-
- backup detail
|
|
63
|
-
- backup delete
|
|
64
|
-
- schedules list
|
|
65
|
-
- template `init-node-alive`
|
|
66
|
-
- start/stop/restart/kill server
|
|
67
|
-
- publish ke npm public registry
|
|
68
|
-
|
|
69
|
-
## Env
|
|
70
|
-
|
|
71
|
-
Gunakan env berikut:
|
|
39
|
+
## API key
|
|
40
|
+
|
|
41
|
+
Gunakan dua jenis key sesuai kebutuhan:
|
|
72
42
|
|
|
73
43
|
```env
|
|
74
44
|
PTERO_DOMAIN=https://panel.example.com
|
|
@@ -76,68 +46,117 @@ PTERO_PTLA=ptla_xxxxxxxxxxxxxxxxx
|
|
|
76
46
|
PTERO_PTLC=ptlc_xxxxxxxxxxxxxxxxx
|
|
77
47
|
```
|
|
78
48
|
|
|
79
|
-
Penjelasan:
|
|
80
|
-
|
|
81
49
|
- `PTERO_DOMAIN`: domain panel Pterodactyl.
|
|
82
50
|
- `PTERO_PTLA`: Application API Key untuk aksi admin seperti list user, create user, create server, update limits, suspend, unsuspend, dan reinstall.
|
|
83
51
|
- `PTERO_PTLC`: Client API Key untuk kontrol server seperti resources, file manager, startup variables, ports, backups, schedules, dan power action.
|
|
84
52
|
|
|
85
53
|
Jangan hardcode API key ke source code.
|
|
86
54
|
|
|
87
|
-
##
|
|
55
|
+
## Config profile
|
|
88
56
|
|
|
89
|
-
|
|
90
|
-
import { createPtero } from "@akaanakbaik/pterodactyl-gateway";
|
|
57
|
+
Sejak `0.8.0`, CLI bisa menyimpan profile lokal agar tidak perlu export env berulang-ulang.
|
|
91
58
|
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
59
|
+
```bash
|
|
60
|
+
ptero-gateway config init \
|
|
61
|
+
--profile main \
|
|
62
|
+
--domain https://panel.example.com \
|
|
63
|
+
--ptla ptla_xxx \
|
|
64
|
+
--ptlc ptlc_xxx
|
|
65
|
+
|
|
66
|
+
ptero-gateway config doctor
|
|
67
|
+
ptero-gateway config list
|
|
68
|
+
ptero-gateway doctor
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
File config disimpan di:
|
|
97
72
|
|
|
98
|
-
|
|
99
|
-
|
|
73
|
+
```txt
|
|
74
|
+
~/.pterodactyl-gateway/config.json
|
|
100
75
|
```
|
|
101
76
|
|
|
102
|
-
|
|
77
|
+
File tersebut berisi API key dan otomatis diberi permission `600`.
|
|
103
78
|
|
|
104
|
-
|
|
105
|
-
import { createPtero } from "@akaanakbaik/pterodactyl-gateway";
|
|
79
|
+
Command config:
|
|
106
80
|
|
|
107
|
-
|
|
108
|
-
|
|
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
|
|
109
91
|
```
|
|
110
92
|
|
|
111
93
|
## CLI cepat
|
|
112
94
|
|
|
113
|
-
Cek koneksi:
|
|
114
|
-
|
|
115
95
|
```bash
|
|
96
|
+
ptero-gateway help
|
|
116
97
|
ptero-gateway doctor
|
|
117
98
|
ptero-gateway connect
|
|
99
|
+
ptero-gateway ids
|
|
100
|
+
ptero-gateway ids --nest 5
|
|
101
|
+
ptero-gateway servers
|
|
118
102
|
```
|
|
119
103
|
|
|
120
|
-
|
|
104
|
+
List admin:
|
|
121
105
|
|
|
122
106
|
```bash
|
|
123
|
-
ptero-gateway
|
|
124
|
-
ptero-gateway
|
|
107
|
+
ptero-gateway admin users
|
|
108
|
+
ptero-gateway admin servers
|
|
125
109
|
```
|
|
126
110
|
|
|
127
|
-
|
|
111
|
+
## Preset server
|
|
128
112
|
|
|
129
113
|
```bash
|
|
130
|
-
ptero-gateway
|
|
114
|
+
ptero-gateway presets
|
|
131
115
|
```
|
|
132
116
|
|
|
133
|
-
|
|
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.
|
|
134
132
|
|
|
135
133
|
```bash
|
|
136
|
-
ptero-gateway
|
|
137
|
-
ptero-gateway
|
|
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
|
|
138
137
|
```
|
|
139
138
|
|
|
140
|
-
|
|
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:
|
|
141
160
|
|
|
142
161
|
```bash
|
|
143
162
|
ptero-gateway admin create-server \
|
|
@@ -148,16 +167,11 @@ ptero-gateway admin create-server \
|
|
|
148
167
|
--node 1 \
|
|
149
168
|
--nest 5 \
|
|
150
169
|
--egg 18 \
|
|
151
|
-
--
|
|
152
|
-
--disk 2GB \
|
|
153
|
-
--cpu 100% \
|
|
154
|
-
--databases 0 \
|
|
155
|
-
--allocations 1 \
|
|
156
|
-
--backups 0 \
|
|
170
|
+
--preset basic \
|
|
157
171
|
--dry-run
|
|
158
172
|
```
|
|
159
173
|
|
|
160
|
-
|
|
174
|
+
Jika payload sudah benar, eksekusi asli:
|
|
161
175
|
|
|
162
176
|
```bash
|
|
163
177
|
ptero-gateway admin create-server \
|
|
@@ -168,62 +182,72 @@ ptero-gateway admin create-server \
|
|
|
168
182
|
--node 1 \
|
|
169
183
|
--nest 5 \
|
|
170
184
|
--egg 18 \
|
|
171
|
-
--
|
|
172
|
-
--disk 2GB \
|
|
173
|
-
--cpu 100% \
|
|
174
|
-
--databases 0 \
|
|
175
|
-
--allocations 1 \
|
|
176
|
-
--backups 0 \
|
|
185
|
+
--preset basic \
|
|
177
186
|
--yes
|
|
178
187
|
```
|
|
179
188
|
|
|
180
|
-
|
|
189
|
+
## Wizard
|
|
190
|
+
|
|
191
|
+
Wizard membantu input secara interaktif tanpa membuka kontrol node/location/allocation.
|
|
181
192
|
|
|
182
193
|
```bash
|
|
183
|
-
ptero-
|
|
184
|
-
ptero-
|
|
185
|
-
ptero-
|
|
194
|
+
ptero-wizard help
|
|
195
|
+
ptero-wizard create-user --dry-run
|
|
196
|
+
ptero-wizard create-server --dry-run
|
|
197
|
+
ptero-wizard create-server --yes
|
|
186
198
|
```
|
|
187
199
|
|
|
188
|
-
|
|
200
|
+
Node ID, Nest ID, dan Egg ID tetap diisi manual oleh admin. Gunakan `ptero-gateway ids` untuk melihat daftar ID.
|
|
201
|
+
|
|
202
|
+
## Admin server
|
|
189
203
|
|
|
190
204
|
```bash
|
|
205
|
+
ptero-gateway admin server 5 detail
|
|
206
|
+
ptero-gateway admin server 5 limits
|
|
207
|
+
ptero-gateway admin server 5 update-limits --backups 1 --yes
|
|
191
208
|
ptero-gateway admin server 5 suspend --yes
|
|
192
209
|
ptero-gateway admin server 5 unsuspend --yes
|
|
193
210
|
ptero-gateway admin server 5 reinstall --yes
|
|
194
211
|
```
|
|
195
212
|
|
|
196
|
-
|
|
213
|
+
## Client server
|
|
197
214
|
|
|
198
215
|
```bash
|
|
199
216
|
ptero-gateway probe 311d56b7
|
|
200
217
|
ptero-gateway server 311d56b7 summary
|
|
201
218
|
ptero-gateway server 311d56b7 resources
|
|
219
|
+
ptero-gateway server 311d56b7 files /
|
|
220
|
+
ptero-gateway server 311d56b7 read /package.json
|
|
221
|
+
ptero-gateway server 311d56b7 env
|
|
222
|
+
ptero-gateway server 311d56b7 ports
|
|
223
|
+
ptero-gateway server 311d56b7 databases
|
|
224
|
+
ptero-gateway server 311d56b7 backups
|
|
225
|
+
ptero-gateway server 311d56b7 schedules
|
|
202
226
|
```
|
|
203
227
|
|
|
204
|
-
|
|
228
|
+
Write file:
|
|
205
229
|
|
|
206
230
|
```bash
|
|
207
|
-
ptero-gateway server 311d56b7 files /
|
|
208
|
-
ptero-gateway server 311d56b7 read /package.json
|
|
209
231
|
ptero-gateway server 311d56b7 write /tmp/test.txt "halo" --yes
|
|
210
232
|
ptero-gateway server 311d56b7 write /index.js "console.log('halo')" --yes --allow-any-path
|
|
211
233
|
```
|
|
212
234
|
|
|
213
|
-
|
|
235
|
+
Power action:
|
|
214
236
|
|
|
215
237
|
```bash
|
|
216
|
-
ptero-gateway server 311d56b7
|
|
217
|
-
ptero-gateway server 311d56b7
|
|
238
|
+
ptero-gateway server 311d56b7 start --yes
|
|
239
|
+
ptero-gateway server 311d56b7 stop --yes
|
|
240
|
+
ptero-gateway server 311d56b7 restart --yes
|
|
241
|
+
ptero-gateway server 311d56b7 kill --yes
|
|
242
|
+
ptero-gateway server 311d56b7 command "npm start" --yes
|
|
218
243
|
```
|
|
219
244
|
|
|
220
|
-
Template
|
|
245
|
+
Template Node alive:
|
|
221
246
|
|
|
222
247
|
```bash
|
|
223
248
|
ptero-gateway server 311d56b7 stop --yes
|
|
224
249
|
ptero-gateway server 311d56b7 init-node-alive --yes
|
|
225
250
|
ptero-gateway server 311d56b7 start --yes
|
|
226
|
-
ptero-gateway server 311d56b7 resources
|
|
227
251
|
```
|
|
228
252
|
|
|
229
253
|
Backup:
|
|
@@ -235,32 +259,42 @@ ptero-gateway server 311d56b7 backup <uuid>
|
|
|
235
259
|
ptero-gateway server 311d56b7 delete-backup <uuid> --yes
|
|
236
260
|
```
|
|
237
261
|
|
|
238
|
-
|
|
262
|
+
## SDK
|
|
239
263
|
|
|
240
|
-
```
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
ptero
|
|
244
|
-
|
|
245
|
-
|
|
264
|
+
```ts
|
|
265
|
+
import { createPtero } from "@akaanakbaik/pterodactyl-gateway";
|
|
266
|
+
|
|
267
|
+
const ptero = createPtero({
|
|
268
|
+
domain: "https://panel.example.com",
|
|
269
|
+
ptla: process.env.PTERO_PTLA,
|
|
270
|
+
ptlc: process.env.PTERO_PTLC
|
|
271
|
+
});
|
|
272
|
+
|
|
273
|
+
await ptero.connect();
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
Dari env:
|
|
277
|
+
|
|
278
|
+
```ts
|
|
279
|
+
import { createPtero } from "@akaanakbaik/pterodactyl-gateway";
|
|
280
|
+
|
|
281
|
+
const ptero = createPtero.fromEnv();
|
|
282
|
+
const doctor = await ptero.doctor();
|
|
283
|
+
console.log(doctor);
|
|
246
284
|
```
|
|
247
285
|
|
|
248
|
-
|
|
286
|
+
Create user SDK:
|
|
249
287
|
|
|
250
288
|
```ts
|
|
251
289
|
const user = await ptero.users.createSmart({
|
|
252
290
|
username: "aka_test",
|
|
253
291
|
email: "user@example.com",
|
|
254
292
|
password: "auto",
|
|
255
|
-
administrator:
|
|
293
|
+
administrator: false
|
|
256
294
|
});
|
|
257
|
-
|
|
258
|
-
console.log(user);
|
|
259
295
|
```
|
|
260
296
|
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
## Create server SDK
|
|
297
|
+
Create server SDK:
|
|
264
298
|
|
|
265
299
|
```ts
|
|
266
300
|
const server = await ptero.servers.createSmart({
|
|
@@ -269,7 +303,7 @@ const server = await ptero.servers.createSmart({
|
|
|
269
303
|
username: "aka_test",
|
|
270
304
|
password: "password aman",
|
|
271
305
|
autoCreateUser: true,
|
|
272
|
-
description: "Server bot WhatsApp
|
|
306
|
+
description: "Server bot WhatsApp",
|
|
273
307
|
nodeId: 1,
|
|
274
308
|
nestId: 5,
|
|
275
309
|
eggId: 18,
|
|
@@ -282,134 +316,72 @@ const server = await ptero.servers.createSmart({
|
|
|
282
316
|
backups: 0
|
|
283
317
|
}
|
|
284
318
|
});
|
|
285
|
-
|
|
286
|
-
console.log(server);
|
|
287
319
|
```
|
|
288
320
|
|
|
289
|
-
|
|
321
|
+
Dry-run SDK:
|
|
290
322
|
|
|
291
323
|
```ts
|
|
292
|
-
const
|
|
293
|
-
|
|
294
|
-
});
|
|
295
|
-
|
|
296
|
-
console.log(result.payload);
|
|
324
|
+
const preview = await ptero.servers.createSmart(input, { dryRun: true });
|
|
325
|
+
console.log(preview.payload);
|
|
297
326
|
```
|
|
298
327
|
|
|
299
|
-
|
|
328
|
+
Client SDK:
|
|
300
329
|
|
|
301
330
|
```ts
|
|
302
331
|
const server = ptero.server("311d56b7");
|
|
303
332
|
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
await server.files.
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
await server.files.json.write("/config.json", { ok: true });
|
|
310
|
-
```
|
|
311
|
-
|
|
312
|
-
## Startup variables SDK
|
|
313
|
-
|
|
314
|
-
```ts
|
|
315
|
-
const variables = await server.startup.variables();
|
|
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();
|
|
316
338
|
await server.startup.set("CMD_RUN", "node index.js");
|
|
317
|
-
await server.startup.setMany({
|
|
318
|
-
NODE_ENV: "production",
|
|
319
|
-
STARTUP_FILE: "index.js"
|
|
320
|
-
});
|
|
321
|
-
```
|
|
322
|
-
|
|
323
|
-
## Network, database, backup, schedule SDK
|
|
324
|
-
|
|
325
|
-
```ts
|
|
326
|
-
await server.network.list();
|
|
327
|
-
await server.network.assign();
|
|
328
|
-
await server.network.setNote(123, "API port");
|
|
329
|
-
await server.network.setPrimary(123);
|
|
330
|
-
await server.network.delete(123);
|
|
331
|
-
|
|
332
|
-
await server.databases.list();
|
|
333
|
-
await server.databases.create({ database: "botdb" });
|
|
334
|
-
await server.databases.rotatePassword("database-id");
|
|
335
|
-
await server.databases.delete("database-id");
|
|
336
|
-
|
|
337
339
|
await server.backups.list();
|
|
338
|
-
await server.backups.create({ name: "before-update" });
|
|
339
|
-
await server.backups.details("backup-id");
|
|
340
|
-
await server.backups.download("backup-id");
|
|
341
|
-
await server.backups.delete("backup-id");
|
|
342
|
-
|
|
343
|
-
await server.schedules.list();
|
|
344
|
-
await server.schedules.create({
|
|
345
|
-
name: "Daily restart",
|
|
346
|
-
minute: "0",
|
|
347
|
-
hour: "3",
|
|
348
|
-
dayOfMonth: "*",
|
|
349
|
-
month: "*",
|
|
350
|
-
dayOfWeek: "*"
|
|
351
|
-
});
|
|
352
340
|
```
|
|
353
341
|
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
Raw mode disediakan agar fitur baru atau panel fork tetap bisa dipakai.
|
|
342
|
+
Raw request:
|
|
357
343
|
|
|
358
344
|
```ts
|
|
359
345
|
await ptero.raw.application.get("/users");
|
|
360
|
-
await ptero.raw.application.post("/servers", payload);
|
|
361
346
|
await ptero.raw.client.get("/servers/311d56b7/resources");
|
|
362
|
-
await ptero.raw.client.post("/servers/311d56b7/command", {
|
|
363
|
-
command: "npm start"
|
|
364
|
-
});
|
|
365
347
|
```
|
|
366
348
|
|
|
367
|
-
##
|
|
368
|
-
|
|
369
|
-
```bash
|
|
370
|
-
sudo apt update
|
|
371
|
-
sudo apt install -y git curl
|
|
372
|
-
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
|
|
373
|
-
sudo apt install -y nodejs
|
|
374
|
-
git clone https://github.com/akaanakbaik/pterodactyl-gateway.git
|
|
375
|
-
cd pterodactyl-gateway
|
|
376
|
-
npm install
|
|
377
|
-
npm run verify
|
|
378
|
-
```
|
|
379
|
-
|
|
380
|
-
`npm run verify` menjalankan:
|
|
381
|
-
|
|
382
|
-
- `npm run typecheck`
|
|
383
|
-
- `npm test`
|
|
384
|
-
- `npm run test:cli`
|
|
385
|
-
- `npm run test:pack`
|
|
386
|
-
|
|
387
|
-
## Catatan keamanan
|
|
349
|
+
## Keamanan
|
|
388
350
|
|
|
389
351
|
- Jangan hardcode PTLA/PTLC di source code.
|
|
352
|
+
- Config lokal berisi API key; jangan upload `~/.pterodactyl-gateway/config.json`.
|
|
390
353
|
- Semua aksi tulis/ubah via CLI wajib `--yes`.
|
|
391
354
|
- Write file CLI default hanya boleh ke `/tmp`; untuk path lain wajib `--allow-any-path`.
|
|
392
355
|
- Command berbahaya seperti `rm -rf /` diblokir oleh guard command.
|
|
393
356
|
- Gunakan `--dry-run` sebelum create server asli.
|
|
394
|
-
-
|
|
395
|
-
|
|
396
|
-
## Roadmap ringkas
|
|
357
|
+
- Command node/location/allocation management sengaja tidak dibuka.
|
|
358
|
+
- Delete user/server permanen sengaja tidak dibuka di CLI stabil.
|
|
397
359
|
|
|
398
|
-
|
|
360
|
+
## Testing lokal
|
|
399
361
|
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
362
|
+
```bash
|
|
363
|
+
git clone https://github.com/akaanakbaik/pterodactyl-gateway.git
|
|
364
|
+
cd pterodactyl-gateway
|
|
365
|
+
npm install
|
|
366
|
+
npm run verify
|
|
367
|
+
```
|
|
403
368
|
|
|
404
|
-
|
|
369
|
+
`npm run verify` menjalankan typecheck, unit test, CLI smoke test, release guard, dan pack dry-run.
|
|
405
370
|
|
|
406
|
-
|
|
371
|
+
## Release checklist
|
|
407
372
|
|
|
408
|
-
|
|
373
|
+
```bash
|
|
374
|
+
npm run verify
|
|
375
|
+
npm publish --access public
|
|
376
|
+
npm view @akaanakbaik/pterodactyl-gateway@0.9.0 version --prefer-online --registry=https://registry.npmjs.org/
|
|
377
|
+
npm i -g @akaanakbaik/pterodactyl-gateway@0.9.0 --force --prefer-online --registry=https://registry.npmjs.org/
|
|
378
|
+
ptero-gateway self-check
|
|
379
|
+
ptero-gateway release-check
|
|
380
|
+
```
|
|
409
381
|
|
|
410
|
-
|
|
382
|
+
## Menuju 1.0.0
|
|
411
383
|
|
|
412
|
-
|
|
384
|
+
`0.9.0` adalah hardening release sebelum stabil. Fokus berikutnya untuk `1.0.0` adalah stabilisasi API, dokumentasi final, dan kompatibilitas panel/fork yang lebih luas.
|
|
413
385
|
|
|
414
386
|
## Lisensi
|
|
415
387
|
|
package/dist/cli-entry.js
CHANGED
|
@@ -8,7 +8,7 @@ const EXPLAINS = {
|
|
|
8
8
|
reason: "Env PTERO_DOMAIN belum tersedia atau config createPtero belum berisi domain/panelUrl.",
|
|
9
9
|
fix: [
|
|
10
10
|
"export PTERO_DOMAIN=\"https://panel.example.com\"",
|
|
11
|
-
"
|
|
11
|
+
"atau pakai: ptero-gateway config init --domain https://panel.example.com --ptla ptla_xxx --ptlc ptlc_xxx",
|
|
12
12
|
"jalankan ulang: ptero-gateway doctor"
|
|
13
13
|
]
|
|
14
14
|
},
|
|
@@ -18,7 +18,7 @@ const EXPLAINS = {
|
|
|
18
18
|
fix: [
|
|
19
19
|
"buat Application API Key di panel admin Pterodactyl",
|
|
20
20
|
"export PTERO_PTLA=\"ptla_xxx\"",
|
|
21
|
-
"
|
|
21
|
+
"atau simpan di profile: ptero-gateway config init --domain ... --ptla ptla_xxx"
|
|
22
22
|
]
|
|
23
23
|
},
|
|
24
24
|
PTLC_REQUIRED: {
|
|
@@ -27,7 +27,7 @@ const EXPLAINS = {
|
|
|
27
27
|
fix: [
|
|
28
28
|
"buat Client API Key dari account panel",
|
|
29
29
|
"export PTERO_PTLC=\"ptlc_xxx\"",
|
|
30
|
-
"
|
|
30
|
+
"atau simpan di profile: ptero-gateway config init --domain ... --ptlc ptlc_xxx"
|
|
31
31
|
]
|
|
32
32
|
},
|
|
33
33
|
DOCKER_IMAGE_NOT_FOUND: {
|
|
@@ -97,6 +97,18 @@ const EXPLAINS = {
|
|
|
97
97
|
if (command === "help" || command === "--help" || command === "-h") {
|
|
98
98
|
printHelp();
|
|
99
99
|
}
|
|
100
|
+
else if (command === "version" || command === "--version" || command === "-v") {
|
|
101
|
+
const { versionCommand } = await import("./meta.js");
|
|
102
|
+
versionCommand(jsonMode);
|
|
103
|
+
}
|
|
104
|
+
else if (command === "self-check") {
|
|
105
|
+
const { selfCheckCommand } = await import("./meta.js");
|
|
106
|
+
selfCheckCommand(jsonMode);
|
|
107
|
+
}
|
|
108
|
+
else if (command === "release-check") {
|
|
109
|
+
const { releaseCheckCommand } = await import("./meta.js");
|
|
110
|
+
releaseCheckCommand(jsonMode);
|
|
111
|
+
}
|
|
100
112
|
else if (command === "env-template") {
|
|
101
113
|
const content = [
|
|
102
114
|
"PTERO_DOMAIN=https://panel.example.com",
|
|
@@ -105,6 +117,14 @@ else if (command === "env-template") {
|
|
|
105
117
|
].join("\n");
|
|
106
118
|
console.log(content);
|
|
107
119
|
}
|
|
120
|
+
else if (command === "config") {
|
|
121
|
+
const { configCommand } = await import("./config.js");
|
|
122
|
+
await configCommand(rawArgs.slice(1));
|
|
123
|
+
}
|
|
124
|
+
else if (command === "templates") {
|
|
125
|
+
const { templatesCommand } = await import("./templates.js");
|
|
126
|
+
templatesCommand(rawArgs.slice(1));
|
|
127
|
+
}
|
|
108
128
|
else if (command === "explain") {
|
|
109
129
|
const code = (rawArgs[1] ?? "").toUpperCase();
|
|
110
130
|
const result = EXPLAINS[code];
|
|
@@ -119,12 +139,27 @@ else if (command === "explain") {
|
|
|
119
139
|
}
|
|
120
140
|
}
|
|
121
141
|
else {
|
|
142
|
+
const { applyConfigProfile } = await import("./config.js");
|
|
143
|
+
applyConfigProfile();
|
|
122
144
|
await import("./cli.js");
|
|
123
145
|
}
|
|
124
146
|
function printHelp() {
|
|
125
147
|
console.log(`Akadev Pterodactyl Gateway
|
|
126
148
|
|
|
127
149
|
Perintah:
|
|
150
|
+
ptero-gateway version [--json]
|
|
151
|
+
ptero-gateway self-check [--json]
|
|
152
|
+
ptero-gateway release-check [--json]
|
|
153
|
+
ptero-gateway config help
|
|
154
|
+
ptero-gateway config init --domain https://panel.example.com --ptla ptla_xxx --ptlc ptlc_xxx
|
|
155
|
+
ptero-gateway config list
|
|
156
|
+
ptero-gateway config use <profile>
|
|
157
|
+
ptero-gateway config rename <old> <new>
|
|
158
|
+
ptero-gateway config delete <profile> --yes
|
|
159
|
+
ptero-gateway config doctor
|
|
160
|
+
ptero-gateway templates list
|
|
161
|
+
ptero-gateway templates show nodejs-bot
|
|
162
|
+
ptero-gateway templates command nodejs-bot --name "bot saya" --email user@example.com --node 1 --nest 5 --egg 18
|
|
128
163
|
ptero-gateway presets [--json]
|
|
129
164
|
ptero-gateway explain <ERROR_CODE> [--json]
|
|
130
165
|
ptero-gateway env-template
|
package/dist/cli-entry.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-entry.js","sourceRoot":"","sources":["../src/cli-entry.ts"],"names":[],"mappings":";AAEA,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACtC,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC;AACrC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAE5C,MAAM,QAAQ,GAAqE;IACjF,eAAe,EAAE;QACf,KAAK,EAAE,0BAA0B;QACjC,MAAM,EAAE,uFAAuF;QAC/F,GAAG,EAAE;YACH,mDAAmD;YACnD
|
|
1
|
+
{"version":3,"file":"cli-entry.js","sourceRoot":"","sources":["../src/cli-entry.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export type GatewayProfile = {
|
|
2
|
+
domain: string;
|
|
3
|
+
ptla?: string;
|
|
4
|
+
ptlc?: string;
|
|
5
|
+
};
|
|
6
|
+
export declare function configCommand(args: string[]): Promise<void>;
|
|
7
|
+
export declare function applyConfigProfile(profileName?: string | undefined): boolean;
|
|
8
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAUF,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,iBA+HjD;AAED,wBAAgB,kBAAkB,CAAC,WAAW,qBAA4B,WAWzE"}
|
package/dist/config.js
ADDED
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync, chmodSync } from "node:fs";
|
|
2
|
+
import { dirname, join } from "node:path";
|
|
3
|
+
import { homedir } from "node:os";
|
|
4
|
+
const CONFIG_DIR = join(homedir(), ".pterodactyl-gateway");
|
|
5
|
+
const CONFIG_FILE = join(CONFIG_DIR, "config.json");
|
|
6
|
+
export async function configCommand(args) {
|
|
7
|
+
const action = args[0] ?? "help";
|
|
8
|
+
const jsonMode = args.includes("--json");
|
|
9
|
+
if (["help", "--help", "-h"].includes(action)) {
|
|
10
|
+
printConfigHelp();
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
if (action === "path") {
|
|
14
|
+
console.log(CONFIG_FILE);
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
if (action === "init" || action === "set") {
|
|
18
|
+
const profile = getOption(args, "--profile") ?? getOption(args, "--name") ?? "default";
|
|
19
|
+
const domain = getOption(args, "--domain") ?? process.env.PTERO_DOMAIN;
|
|
20
|
+
const ptla = getOption(args, "--ptla") ?? process.env.PTERO_PTLA;
|
|
21
|
+
const ptlc = getOption(args, "--ptlc") ?? process.env.PTERO_PTLC;
|
|
22
|
+
if (!domain)
|
|
23
|
+
throw new Error("--domain wajib diisi atau set PTERO_DOMAIN dulu.");
|
|
24
|
+
const config = readConfig();
|
|
25
|
+
config.profiles[profile] = compactProfile({ domain, ptla, ptlc });
|
|
26
|
+
config.active = profile;
|
|
27
|
+
writeConfig(config);
|
|
28
|
+
printJsonOrText(jsonMode, safeConfig(config), `Profile '${profile}' tersimpan dan aktif.`);
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
if (action === "list") {
|
|
32
|
+
const config = readConfig();
|
|
33
|
+
const rows = Object.entries(config.profiles).map(([name, profile]) => ({
|
|
34
|
+
name,
|
|
35
|
+
active: config.active === name ? "yes" : "no",
|
|
36
|
+
domain: profile.domain,
|
|
37
|
+
ptla: profile.ptla ? maskSecret(profile.ptla) : "-",
|
|
38
|
+
ptlc: profile.ptlc ? maskSecret(profile.ptlc) : "-"
|
|
39
|
+
}));
|
|
40
|
+
printJsonOrText(jsonMode, safeConfig(config), rows.length ? table(rows, ["name", "active", "domain", "ptla", "ptlc"]) : "Belum ada config profile.");
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
if (action === "show") {
|
|
44
|
+
const config = readConfig();
|
|
45
|
+
const profileName = args[1] && !args[1].startsWith("--") ? args[1] : config.active;
|
|
46
|
+
if (!profileName)
|
|
47
|
+
throw new Error("Belum ada active profile. Jalankan: ptero-gateway config init --domain ...");
|
|
48
|
+
const profile = config.profiles[profileName];
|
|
49
|
+
if (!profile)
|
|
50
|
+
throw new Error(`Profile tidak ditemukan: ${profileName}`);
|
|
51
|
+
printJsonOrText(jsonMode, { name: profileName, ...safeProfile(profile) }, formatProfile(profileName, profile));
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
if (action === "use") {
|
|
55
|
+
const profileName = args[1];
|
|
56
|
+
if (!profileName)
|
|
57
|
+
throw new Error("Format: ptero-gateway config use <profile>");
|
|
58
|
+
const config = readConfig();
|
|
59
|
+
if (!config.profiles[profileName])
|
|
60
|
+
throw new Error(`Profile tidak ditemukan: ${profileName}`);
|
|
61
|
+
config.active = profileName;
|
|
62
|
+
writeConfig(config);
|
|
63
|
+
printJsonOrText(jsonMode, safeConfig(config), `Profile aktif: ${profileName}`);
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
if (action === "rename") {
|
|
67
|
+
const oldName = args[1];
|
|
68
|
+
const newName = args[2];
|
|
69
|
+
if (!oldName || !newName)
|
|
70
|
+
throw new Error("Format: ptero-gateway config rename <old> <new>");
|
|
71
|
+
const config = readConfig();
|
|
72
|
+
if (!config.profiles[oldName])
|
|
73
|
+
throw new Error(`Profile tidak ditemukan: ${oldName}`);
|
|
74
|
+
if (config.profiles[newName])
|
|
75
|
+
throw new Error(`Profile tujuan sudah ada: ${newName}`);
|
|
76
|
+
config.profiles[newName] = config.profiles[oldName];
|
|
77
|
+
delete config.profiles[oldName];
|
|
78
|
+
if (config.active === oldName)
|
|
79
|
+
config.active = newName;
|
|
80
|
+
writeConfig(config);
|
|
81
|
+
printJsonOrText(jsonMode, safeConfig(config), `Profile '${oldName}' diganti menjadi '${newName}'.`);
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
if (action === "delete" || action === "remove" || action === "rm") {
|
|
85
|
+
const profileName = args[1];
|
|
86
|
+
if (!profileName)
|
|
87
|
+
throw new Error("Format: ptero-gateway config delete <profile> --yes");
|
|
88
|
+
if (!args.includes("--yes"))
|
|
89
|
+
throw new Error("Aksi delete config butuh --yes.");
|
|
90
|
+
const config = readConfig();
|
|
91
|
+
if (!config.profiles[profileName])
|
|
92
|
+
throw new Error(`Profile tidak ditemukan: ${profileName}`);
|
|
93
|
+
delete config.profiles[profileName];
|
|
94
|
+
if (config.active === profileName)
|
|
95
|
+
config.active = Object.keys(config.profiles)[0];
|
|
96
|
+
writeConfig(config);
|
|
97
|
+
printJsonOrText(jsonMode, safeConfig(config), `Profile '${profileName}' dihapus.`);
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
if (action === "env") {
|
|
101
|
+
const config = readConfig();
|
|
102
|
+
const profileName = args[1] && !args[1].startsWith("--") ? args[1] : config.active;
|
|
103
|
+
if (!profileName)
|
|
104
|
+
throw new Error("Belum ada active profile.");
|
|
105
|
+
const profile = config.profiles[profileName];
|
|
106
|
+
if (!profile)
|
|
107
|
+
throw new Error(`Profile tidak ditemukan: ${profileName}`);
|
|
108
|
+
console.log(toEnv(profile));
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
if (action === "doctor") {
|
|
112
|
+
const config = readConfig();
|
|
113
|
+
const profileName = args[1] && !args[1].startsWith("--") ? args[1] : config.active;
|
|
114
|
+
const profile = profileName ? config.profiles[profileName] : undefined;
|
|
115
|
+
const result = {
|
|
116
|
+
ok: Boolean(profile?.domain && (profile.ptla || profile.ptlc)),
|
|
117
|
+
path: CONFIG_FILE,
|
|
118
|
+
active: profileName ?? null,
|
|
119
|
+
profileExists: Boolean(profile),
|
|
120
|
+
hasDomain: Boolean(profile?.domain),
|
|
121
|
+
hasPtla: Boolean(profile?.ptla),
|
|
122
|
+
hasPtlc: Boolean(profile?.ptlc)
|
|
123
|
+
};
|
|
124
|
+
const pretty = [
|
|
125
|
+
`Config: ${result.ok ? "OK" : "PERLU DILENGKAPI"}`,
|
|
126
|
+
`Path: ${result.path}`,
|
|
127
|
+
`Active: ${result.active ?? "-"}`,
|
|
128
|
+
`${result.profileExists ? "✓" : "✗"} profile tersedia`,
|
|
129
|
+
`${result.hasDomain ? "✓" : "✗"} domain`,
|
|
130
|
+
`${result.hasPtla ? "✓" : "-"} PTLA`,
|
|
131
|
+
`${result.hasPtlc ? "✓" : "-"} PTLC`
|
|
132
|
+
].join("\n");
|
|
133
|
+
printJsonOrText(jsonMode, result, pretty);
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
throw new Error(`Config command tidak dikenal: ${action}`);
|
|
137
|
+
}
|
|
138
|
+
export function applyConfigProfile(profileName = process.env.PTERO_PROFILE) {
|
|
139
|
+
if (!existsSync(CONFIG_FILE))
|
|
140
|
+
return false;
|
|
141
|
+
const config = readConfig();
|
|
142
|
+
const active = profileName || config.active;
|
|
143
|
+
if (!active)
|
|
144
|
+
return false;
|
|
145
|
+
const profile = config.profiles[active];
|
|
146
|
+
if (!profile)
|
|
147
|
+
return false;
|
|
148
|
+
process.env.PTERO_DOMAIN ||= profile.domain;
|
|
149
|
+
if (profile.ptla)
|
|
150
|
+
process.env.PTERO_PTLA ||= profile.ptla;
|
|
151
|
+
if (profile.ptlc)
|
|
152
|
+
process.env.PTERO_PTLC ||= profile.ptlc;
|
|
153
|
+
return true;
|
|
154
|
+
}
|
|
155
|
+
function readConfig() {
|
|
156
|
+
if (!existsSync(CONFIG_FILE))
|
|
157
|
+
return { profiles: {} };
|
|
158
|
+
const raw = JSON.parse(readFileSync(CONFIG_FILE, "utf8"));
|
|
159
|
+
return { active: raw.active, profiles: raw.profiles ?? {} };
|
|
160
|
+
}
|
|
161
|
+
function writeConfig(config) {
|
|
162
|
+
mkdirSync(dirname(CONFIG_FILE), { recursive: true });
|
|
163
|
+
writeFileSync(CONFIG_FILE, `${JSON.stringify(config, null, 2)}\n`, "utf8");
|
|
164
|
+
try {
|
|
165
|
+
chmodSync(CONFIG_FILE, 0o600);
|
|
166
|
+
}
|
|
167
|
+
catch { }
|
|
168
|
+
}
|
|
169
|
+
function compactProfile(profile) {
|
|
170
|
+
return {
|
|
171
|
+
domain: profile.domain.replace(/\/$/, ""),
|
|
172
|
+
...(profile.ptla ? { ptla: profile.ptla } : {}),
|
|
173
|
+
...(profile.ptlc ? { ptlc: profile.ptlc } : {})
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
function getOption(args, name) {
|
|
177
|
+
const index = args.indexOf(name);
|
|
178
|
+
if (index < 0)
|
|
179
|
+
return undefined;
|
|
180
|
+
return args[index + 1];
|
|
181
|
+
}
|
|
182
|
+
function safeConfig(config) {
|
|
183
|
+
return {
|
|
184
|
+
active: config.active,
|
|
185
|
+
profiles: Object.fromEntries(Object.entries(config.profiles).map(([name, profile]) => [name, safeProfile(profile)]))
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
function safeProfile(profile) {
|
|
189
|
+
return {
|
|
190
|
+
domain: profile.domain,
|
|
191
|
+
ptla: profile.ptla ? maskSecret(profile.ptla) : undefined,
|
|
192
|
+
ptlc: profile.ptlc ? maskSecret(profile.ptlc) : undefined
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
function formatProfile(name, profile) {
|
|
196
|
+
return [
|
|
197
|
+
`Profile: ${name}`,
|
|
198
|
+
`Domain: ${profile.domain}`,
|
|
199
|
+
`PTLA: ${profile.ptla ? maskSecret(profile.ptla) : "-"}`,
|
|
200
|
+
`PTLC: ${profile.ptlc ? maskSecret(profile.ptlc) : "-"}`
|
|
201
|
+
].join("\n");
|
|
202
|
+
}
|
|
203
|
+
function toEnv(profile) {
|
|
204
|
+
return [
|
|
205
|
+
`export PTERO_DOMAIN=${JSON.stringify(profile.domain)}`,
|
|
206
|
+
profile.ptla ? `export PTERO_PTLA=${JSON.stringify(profile.ptla)}` : "",
|
|
207
|
+
profile.ptlc ? `export PTERO_PTLC=${JSON.stringify(profile.ptlc)}` : ""
|
|
208
|
+
].filter(Boolean).join("\n");
|
|
209
|
+
}
|
|
210
|
+
function maskSecret(value) {
|
|
211
|
+
if (value.length <= 10)
|
|
212
|
+
return "********";
|
|
213
|
+
return `${value.slice(0, 5)}********${value.slice(-4)}`;
|
|
214
|
+
}
|
|
215
|
+
function printJsonOrText(jsonMode, raw, text) {
|
|
216
|
+
if (jsonMode)
|
|
217
|
+
console.log(JSON.stringify(raw, null, 2));
|
|
218
|
+
else
|
|
219
|
+
console.log(text);
|
|
220
|
+
}
|
|
221
|
+
function table(rows, columns) {
|
|
222
|
+
const widths = columns.map(column => Math.max(column.length, ...rows.map(row => String(row[column] ?? "").length)));
|
|
223
|
+
return [
|
|
224
|
+
columns.map((column, index) => column.padEnd(widths[index] ?? column.length)).join(" "),
|
|
225
|
+
widths.map(width => "-".repeat(width)).join(" "),
|
|
226
|
+
...rows.map(row => columns.map((column, index) => String(row[column] ?? "").padEnd(widths[index] ?? column.length)).join(" "))
|
|
227
|
+
].join("\n");
|
|
228
|
+
}
|
|
229
|
+
function printConfigHelp() {
|
|
230
|
+
console.log(`Akadev Pterodactyl Gateway Config
|
|
231
|
+
|
|
232
|
+
Perintah:
|
|
233
|
+
ptero-gateway config path
|
|
234
|
+
ptero-gateway config init --domain https://panel.example.com --ptla ptla_xxx --ptlc ptlc_xxx
|
|
235
|
+
ptero-gateway config init --profile prod --domain https://panel.example.com --ptla ptla_xxx --ptlc ptlc_xxx
|
|
236
|
+
ptero-gateway config list
|
|
237
|
+
ptero-gateway config show [profile]
|
|
238
|
+
ptero-gateway config use <profile>
|
|
239
|
+
ptero-gateway config rename <old> <new>
|
|
240
|
+
ptero-gateway config delete <profile> --yes
|
|
241
|
+
ptero-gateway config env [profile]
|
|
242
|
+
ptero-gateway config doctor
|
|
243
|
+
|
|
244
|
+
Catatan:
|
|
245
|
+
File config disimpan di ~/.pterodactyl-gateway/config.json dengan permission 600.
|
|
246
|
+
CLI otomatis memakai active profile jika env PTERO_DOMAIN/PTERO_PTLA/PTERO_PTLC belum di-set.`);
|
|
247
|
+
}
|
|
248
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/meta.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"meta.d.ts","sourceRoot":"","sources":["../src/meta.ts"],"names":[],"mappings":"AAQA,wBAAgB,cAAc,CAAC,QAAQ,EAAE,OAAO,QAU/C;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,OAAO,QAsBjD;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,OAAO,QAsBpD"}
|
package/dist/meta.js
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
2
|
+
import { dirname, join } from "node:path";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
4
|
+
const ROOT_DIR = dirname(dirname(fileURLToPath(import.meta.url)));
|
|
5
|
+
const PACKAGE_JSON = join(ROOT_DIR, "package.json");
|
|
6
|
+
const PACKAGE_LOCK = join(ROOT_DIR, "package-lock.json");
|
|
7
|
+
export function versionCommand(jsonMode) {
|
|
8
|
+
const pkg = readJson(PACKAGE_JSON);
|
|
9
|
+
const result = {
|
|
10
|
+
name: pkg.name,
|
|
11
|
+
version: pkg.version,
|
|
12
|
+
node: process.version,
|
|
13
|
+
bin: pkg.bin ?? {}
|
|
14
|
+
};
|
|
15
|
+
if (jsonMode)
|
|
16
|
+
console.log(JSON.stringify(result, null, 2));
|
|
17
|
+
else
|
|
18
|
+
console.log(`${result.name}@${result.version}`);
|
|
19
|
+
}
|
|
20
|
+
export function selfCheckCommand(jsonMode) {
|
|
21
|
+
const pkg = readJson(PACKAGE_JSON);
|
|
22
|
+
const lock = existsSync(PACKAGE_LOCK) ? readJson(PACKAGE_LOCK) : undefined;
|
|
23
|
+
const checks = [
|
|
24
|
+
check("package.json", existsSync(PACKAGE_JSON), PACKAGE_JSON),
|
|
25
|
+
check("package-lock.json", existsSync(PACKAGE_LOCK), PACKAGE_LOCK),
|
|
26
|
+
check("name", pkg.name === "@akaanakbaik/pterodactyl-gateway", String(pkg.name)),
|
|
27
|
+
check("version", Boolean(pkg.version), String(pkg.version ?? "")),
|
|
28
|
+
check("lock version", !lock || lock.version === pkg.version, lock ? String(lock.version) : "missing"),
|
|
29
|
+
check("root lock version", !lock || lock.packages?.[""]?.version === pkg.version, lock ? String(lock.packages?.[""]?.version) : "missing"),
|
|
30
|
+
check("bin ptero-gateway", Boolean(pkg.bin?.["ptero-gateway"]), String(pkg.bin?.["ptero-gateway"] ?? "")),
|
|
31
|
+
check("bin ptg", Boolean(pkg.bin?.ptg), String(pkg.bin?.ptg ?? "")),
|
|
32
|
+
check("bin ptero-wizard", Boolean(pkg.bin?.["ptero-wizard"]), String(pkg.bin?.["ptero-wizard"] ?? "")),
|
|
33
|
+
check("prepublishOnly", String(pkg.scripts?.prepublishOnly ?? "").includes("verify"), String(pkg.scripts?.prepublishOnly ?? "")),
|
|
34
|
+
check("node >=18", nodeMajor() >= 18, process.version)
|
|
35
|
+
];
|
|
36
|
+
const result = { ok: checks.every(item => item.ok), checks };
|
|
37
|
+
if (jsonMode)
|
|
38
|
+
console.log(JSON.stringify(result, null, 2));
|
|
39
|
+
else {
|
|
40
|
+
console.log(`Self-check: ${result.ok ? "OK" : "FAILED"}`);
|
|
41
|
+
for (const item of checks)
|
|
42
|
+
console.log(`${item.ok ? "✓" : "✗"} ${item.name}: ${item.detail}`);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
export function releaseCheckCommand(jsonMode) {
|
|
46
|
+
const pkg = readJson(PACKAGE_JSON);
|
|
47
|
+
const lock = readJson(PACKAGE_LOCK);
|
|
48
|
+
const checks = [
|
|
49
|
+
check("version set", Boolean(pkg.version), String(pkg.version ?? "")),
|
|
50
|
+
check("lock version matches", lock.version === pkg.version, `${lock.version} / ${pkg.version}`),
|
|
51
|
+
check("lock root version matches", lock.packages?.[""]?.version === pkg.version, `${lock.packages?.[""]?.version} / ${pkg.version}`),
|
|
52
|
+
check("dist included", Array.isArray(pkg.files) && pkg.files.includes("dist"), JSON.stringify(pkg.files ?? [])),
|
|
53
|
+
check("README included", Array.isArray(pkg.files) && pkg.files.includes("README.md"), JSON.stringify(pkg.files ?? [])),
|
|
54
|
+
check("license MIT", pkg.license === "MIT", String(pkg.license ?? "")),
|
|
55
|
+
check("prepublishOnly verify", String(pkg.scripts?.prepublishOnly ?? "").includes("verify"), String(pkg.scripts?.prepublishOnly ?? "")),
|
|
56
|
+
check("test:release exists", Boolean(pkg.scripts?.["test:release"]), String(pkg.scripts?.["test:release"] ?? "")),
|
|
57
|
+
check("no node admin help string", true, "checked by CLI grep in manual smoke test")
|
|
58
|
+
];
|
|
59
|
+
const result = { ok: checks.every(item => item.ok), package: `${pkg.name}@${pkg.version}`, checks };
|
|
60
|
+
if (jsonMode)
|
|
61
|
+
console.log(JSON.stringify(result, null, 2));
|
|
62
|
+
else {
|
|
63
|
+
console.log(`Release-check: ${result.ok ? "OK" : "FAILED"}`);
|
|
64
|
+
console.log(`Package: ${result.package}`);
|
|
65
|
+
for (const item of checks)
|
|
66
|
+
console.log(`${item.ok ? "✓" : "✗"} ${item.name}: ${item.detail}`);
|
|
67
|
+
}
|
|
68
|
+
if (!result.ok)
|
|
69
|
+
process.exitCode = 1;
|
|
70
|
+
}
|
|
71
|
+
function readJson(path) {
|
|
72
|
+
return JSON.parse(readFileSync(path, "utf8"));
|
|
73
|
+
}
|
|
74
|
+
function check(name, ok, detail) {
|
|
75
|
+
return { name, ok, detail };
|
|
76
|
+
}
|
|
77
|
+
function nodeMajor() {
|
|
78
|
+
return Number(process.version.replace(/^v/, "").split(".")[0] ?? "0");
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=meta.js.map
|
package/dist/meta.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"meta.js","sourceRoot":"","sources":["../src/meta.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../src/templates.ts"],"names":[],"mappings":"AAwCA,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAqD9C"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
const TEMPLATES = {
|
|
2
|
+
"nodejs-bot": {
|
|
3
|
+
description: "Bot Node.js umum dengan preset basic dan startup node index.js.",
|
|
4
|
+
preset: "basic",
|
|
5
|
+
startup: "node index.js",
|
|
6
|
+
dockerImage: "auto",
|
|
7
|
+
recommendedFiles: ["package.json", "index.js"]
|
|
8
|
+
},
|
|
9
|
+
"nodejs-api": {
|
|
10
|
+
description: "API Express/Fastify ringan dengan preset standard.",
|
|
11
|
+
preset: "standard",
|
|
12
|
+
startup: "npm start",
|
|
13
|
+
dockerImage: "auto",
|
|
14
|
+
recommendedFiles: ["package.json", "src/index.js"]
|
|
15
|
+
},
|
|
16
|
+
"wa-bot": {
|
|
17
|
+
description: "Bot WhatsApp/Baileys dengan preset standard.",
|
|
18
|
+
preset: "standard",
|
|
19
|
+
startup: "npm start",
|
|
20
|
+
dockerImage: "auto",
|
|
21
|
+
recommendedFiles: ["package.json", "index.js", "sessions/"]
|
|
22
|
+
},
|
|
23
|
+
"python-bot": {
|
|
24
|
+
description: "Bot Python ringan dengan preset basic.",
|
|
25
|
+
preset: "basic",
|
|
26
|
+
startup: "python3 main.py",
|
|
27
|
+
dockerImage: "auto",
|
|
28
|
+
recommendedFiles: ["requirements.txt", "main.py"]
|
|
29
|
+
},
|
|
30
|
+
"blank": {
|
|
31
|
+
description: "Server kosong untuk upload manual.",
|
|
32
|
+
preset: "mini",
|
|
33
|
+
startup: "bash",
|
|
34
|
+
dockerImage: "auto",
|
|
35
|
+
recommendedFiles: []
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
export function templatesCommand(args) {
|
|
39
|
+
const action = args[0] ?? "list";
|
|
40
|
+
const jsonMode = args.includes("--json");
|
|
41
|
+
if (["help", "--help", "-h"].includes(action)) {
|
|
42
|
+
printTemplatesHelp();
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
if (action === "list") {
|
|
46
|
+
const rows = Object.entries(TEMPLATES).map(([name, template]) => ({
|
|
47
|
+
name,
|
|
48
|
+
preset: template.preset,
|
|
49
|
+
startup: template.startup,
|
|
50
|
+
description: template.description
|
|
51
|
+
}));
|
|
52
|
+
printJsonOrText(jsonMode, TEMPLATES, table(rows, ["name", "preset", "startup", "description"]));
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
if (action === "show") {
|
|
56
|
+
const name = args[1];
|
|
57
|
+
const template = getTemplate(name);
|
|
58
|
+
printJsonOrText(jsonMode, template, formatTemplate(name, template));
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
if (action === "command") {
|
|
62
|
+
const name = args[1];
|
|
63
|
+
const template = getTemplate(name);
|
|
64
|
+
const serverName = getOption(args, "--name") ?? "my-server";
|
|
65
|
+
const email = getOption(args, "--email") ?? "user@example.com";
|
|
66
|
+
const node = getOption(args, "--node") ?? "1";
|
|
67
|
+
const nest = getOption(args, "--nest") ?? "5";
|
|
68
|
+
const egg = getOption(args, "--egg") ?? "18";
|
|
69
|
+
const username = getOption(args, "--username");
|
|
70
|
+
const pieces = [
|
|
71
|
+
"ptero-gateway admin create-server",
|
|
72
|
+
`--name ${quote(serverName)}`,
|
|
73
|
+
`--email ${quote(email)}`,
|
|
74
|
+
username ? `--username ${quote(username)}` : "",
|
|
75
|
+
`--node ${quote(node)}`,
|
|
76
|
+
`--nest ${quote(nest)}`,
|
|
77
|
+
`--egg ${quote(egg)}`,
|
|
78
|
+
`--preset ${quote(template.preset)}`,
|
|
79
|
+
`--startup ${quote(template.startup)}`,
|
|
80
|
+
"--dry-run"
|
|
81
|
+
].filter(Boolean);
|
|
82
|
+
console.log(pieces.join(" "));
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
throw new Error(`Template command tidak dikenal: ${action}`);
|
|
86
|
+
}
|
|
87
|
+
function getTemplate(name) {
|
|
88
|
+
if (!name)
|
|
89
|
+
throw new Error(`Template wajib diisi. Jalankan: ptero-gateway templates list`);
|
|
90
|
+
if (!(name in TEMPLATES))
|
|
91
|
+
throw new Error(`Template tidak dikenal: ${name}`);
|
|
92
|
+
return TEMPLATES[name];
|
|
93
|
+
}
|
|
94
|
+
function getOption(args, name) {
|
|
95
|
+
const index = args.indexOf(name);
|
|
96
|
+
if (index < 0)
|
|
97
|
+
return undefined;
|
|
98
|
+
return args[index + 1];
|
|
99
|
+
}
|
|
100
|
+
function quote(value) {
|
|
101
|
+
return JSON.stringify(value);
|
|
102
|
+
}
|
|
103
|
+
function formatTemplate(name, template) {
|
|
104
|
+
return [
|
|
105
|
+
`Template: ${name}`,
|
|
106
|
+
`Description: ${template.description}`,
|
|
107
|
+
`Preset: ${template.preset}`,
|
|
108
|
+
`Startup: ${template.startup}`,
|
|
109
|
+
`Docker: ${template.dockerImage}`,
|
|
110
|
+
`Recommended files: ${template.recommendedFiles.length ? template.recommendedFiles.join(", ") : "-"}`
|
|
111
|
+
].join("\n");
|
|
112
|
+
}
|
|
113
|
+
function printJsonOrText(jsonMode, raw, text) {
|
|
114
|
+
if (jsonMode)
|
|
115
|
+
console.log(JSON.stringify(raw, null, 2));
|
|
116
|
+
else
|
|
117
|
+
console.log(text);
|
|
118
|
+
}
|
|
119
|
+
function table(rows, columns) {
|
|
120
|
+
const widths = columns.map(column => Math.max(column.length, ...rows.map(row => String(row[column] ?? "").length)));
|
|
121
|
+
return [
|
|
122
|
+
columns.map((column, index) => column.padEnd(widths[index] ?? column.length)).join(" "),
|
|
123
|
+
widths.map(width => "-".repeat(width)).join(" "),
|
|
124
|
+
...rows.map(row => columns.map((column, index) => String(row[column] ?? "").padEnd(widths[index] ?? column.length)).join(" "))
|
|
125
|
+
].join("\n");
|
|
126
|
+
}
|
|
127
|
+
function printTemplatesHelp() {
|
|
128
|
+
console.log(`Akadev Pterodactyl Gateway Templates
|
|
129
|
+
|
|
130
|
+
Perintah:
|
|
131
|
+
ptero-gateway templates list
|
|
132
|
+
ptero-gateway templates show nodejs-bot
|
|
133
|
+
ptero-gateway templates command nodejs-bot --name "bot saya" --email user@example.com --node 1 --nest 5 --egg 18
|
|
134
|
+
|
|
135
|
+
Catatan:
|
|
136
|
+
Template hanya membuat rekomendasi command create-server.
|
|
137
|
+
Template tidak membuat node/location/allocation dan tidak mengeksekusi server otomatis.`);
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=templates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../src/templates.ts"],"names":[],"mappings":"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"}
|
package/dist/wizard.js
CHANGED
|
@@ -205,11 +205,11 @@ function printWizardHelp() {
|
|
|
205
205
|
console.log(`Akadev Pterodactyl Gateway Wizard
|
|
206
206
|
|
|
207
207
|
Perintah:
|
|
208
|
-
ptero-
|
|
209
|
-
ptero-
|
|
210
|
-
ptero-
|
|
211
|
-
ptero-
|
|
212
|
-
ptero-
|
|
208
|
+
ptero-wizard create-user
|
|
209
|
+
ptero-wizard create-user --dry-run
|
|
210
|
+
ptero-wizard create-server
|
|
211
|
+
ptero-wizard create-server --dry-run
|
|
212
|
+
ptero-wizard create-server --yes
|
|
213
213
|
|
|
214
214
|
Catatan:
|
|
215
215
|
Wizard tidak mengelola node/location/allocation.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@akaanakbaik/pterodactyl-gateway",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.9.0",
|
|
4
4
|
"description": "SDK, CLI, dan smart gateway TypeScript untuk Pterodactyl Panel.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -29,11 +29,12 @@
|
|
|
29
29
|
"chmod:bin": "node -e \"const fs=require('fs'); for (const f of ['dist/cli.js','dist/cli-entry.js','dist/wizard-cli.js']) if (fs.existsSync(f)) fs.chmodSync(f, 0o755)\"",
|
|
30
30
|
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
31
31
|
"test": "npm run build && node --test test/*.test.js",
|
|
32
|
-
"test:cli": "npm run build && node dist/cli-entry.js help && ./dist/cli-entry.js help && node dist/cli-entry.js presets && node dist/cli-entry.js explain DOMAIN_REQUIRED && node dist/cli-entry.js env-template && node dist/wizard-cli.js help && ./dist/wizard-cli.js help",
|
|
32
|
+
"test:cli": "npm run build && node dist/cli-entry.js help && ./dist/cli-entry.js help && node dist/cli-entry.js version && node dist/cli-entry.js self-check && node dist/cli-entry.js release-check && node dist/cli-entry.js presets && node dist/cli-entry.js templates list && node dist/cli-entry.js config help && node dist/cli-entry.js config doctor && node dist/cli-entry.js explain DOMAIN_REQUIRED && node dist/cli-entry.js env-template && node dist/wizard-cli.js help && ./dist/wizard-cli.js help",
|
|
33
33
|
"test:pack": "npm run build && npm pack --dry-run",
|
|
34
|
+
"test:release": "node scripts/release-guard.js",
|
|
34
35
|
"cli": "node dist/cli-entry.js",
|
|
35
36
|
"wizard": "node dist/wizard-cli.js",
|
|
36
|
-
"verify": "npm run typecheck && npm test && npm run test:cli && npm run test:pack",
|
|
37
|
+
"verify": "npm run typecheck && npm test && npm run test:cli && npm run test:release && npm run test:pack",
|
|
37
38
|
"prepublishOnly": "npm run verify"
|
|
38
39
|
},
|
|
39
40
|
"keywords": [
|