@akaanakbaik/pterodactyl-gateway 0.3.0 → 0.4.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 +239 -293
- package/add-promt.md +119 -52
- package/dist/cli-entry.d.ts +3 -0
- package/dist/cli-entry.d.ts.map +1 -0
- package/dist/cli-entry.js +179 -0
- package/dist/cli-entry.js.map +1 -0
- package/dist/cli.js +45 -10
- package/dist/cli.js.map +1 -1
- package/package.json +6 -6
package/README.md
CHANGED
|
@@ -1,97 +1,74 @@
|
|
|
1
1
|
# Akadev Pterodactyl Gateway
|
|
2
2
|
|
|
3
|
-
SDK TypeScript dan CLI
|
|
3
|
+
SDK TypeScript dan CLI untuk menghubungkan project Node.js ke Pterodactyl Panel dengan lebih mudah, aman, dan cepat.
|
|
4
4
|
|
|
5
|
-
Package ini
|
|
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
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.
|
|
12
|
-
|
|
13
|
-
|
|
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
|
|
11
|
+
Versi saat ini: `0.3.0`
|
|
12
|
+
|
|
13
|
+
Package npm publik:
|
|
78
14
|
|
|
79
15
|
```bash
|
|
80
|
-
npm
|
|
16
|
+
npm i @akaanakbaik/pterodactyl-gateway
|
|
81
17
|
```
|
|
82
18
|
|
|
83
|
-
|
|
19
|
+
Install global CLI:
|
|
84
20
|
|
|
85
21
|
```bash
|
|
86
|
-
|
|
87
|
-
cd pterodactyl-gateway
|
|
88
|
-
npm install
|
|
89
|
-
npm run verify
|
|
22
|
+
npm i -g @akaanakbaik/pterodactyl-gateway
|
|
90
23
|
```
|
|
91
24
|
|
|
25
|
+
CLI tersedia sebagai:
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
ptero-gateway help
|
|
29
|
+
ptg help
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Yang sudah terbukti di panel asli
|
|
33
|
+
|
|
34
|
+
Fitur berikut sudah dites langsung pada panel Pterodactyl asli:
|
|
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
|
+
|
|
92
69
|
## Env
|
|
93
70
|
|
|
94
|
-
|
|
71
|
+
Gunakan env berikut:
|
|
95
72
|
|
|
96
73
|
```env
|
|
97
74
|
PTERO_DOMAIN=https://panel.example.com
|
|
@@ -101,14 +78,16 @@ PTERO_PTLC=ptlc_xxxxxxxxxxxxxxxxx
|
|
|
101
78
|
|
|
102
79
|
Penjelasan:
|
|
103
80
|
|
|
104
|
-
- `PTERO_DOMAIN
|
|
105
|
-
- `PTERO_PTLA
|
|
106
|
-
- `PTERO_PTLC
|
|
81
|
+
- `PTERO_DOMAIN`: domain panel Pterodactyl.
|
|
82
|
+
- `PTERO_PTLA`: Application API Key untuk aksi admin seperti list user, create user, create server, update limits, suspend, unsuspend, dan reinstall.
|
|
83
|
+
- `PTERO_PTLC`: Client API Key untuk kontrol server seperti resources, file manager, startup variables, ports, backups, schedules, dan power action.
|
|
107
84
|
|
|
108
|
-
|
|
85
|
+
Jangan hardcode API key ke source code.
|
|
86
|
+
|
|
87
|
+
## Koneksi SDK
|
|
109
88
|
|
|
110
89
|
```ts
|
|
111
|
-
import { createPtero } from "@
|
|
90
|
+
import { createPtero } from "@akaanakbaik/pterodactyl-gateway";
|
|
112
91
|
|
|
113
92
|
const ptero = createPtero({
|
|
114
93
|
domain: "https://panel.example.com",
|
|
@@ -120,30 +99,158 @@ const result = await ptero.connect();
|
|
|
120
99
|
console.log(result);
|
|
121
100
|
```
|
|
122
101
|
|
|
123
|
-
Atau dari env:
|
|
102
|
+
Atau langsung dari env:
|
|
124
103
|
|
|
125
104
|
```ts
|
|
126
|
-
import { createPtero } from "@
|
|
105
|
+
import { createPtero } from "@akaanakbaik/pterodactyl-gateway";
|
|
127
106
|
|
|
128
107
|
const ptero = createPtero.fromEnv();
|
|
129
108
|
await ptero.connect();
|
|
130
109
|
```
|
|
131
110
|
|
|
132
|
-
##
|
|
111
|
+
## CLI cepat
|
|
112
|
+
|
|
113
|
+
Cek koneksi:
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
ptero-gateway doctor
|
|
117
|
+
ptero-gateway connect
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
Ambil ID node, nest, dan egg:
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
ptero-gateway ids
|
|
124
|
+
ptero-gateway ids --nest 5
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
List server client:
|
|
128
|
+
|
|
129
|
+
```bash
|
|
130
|
+
ptero-gateway servers
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
List admin:
|
|
134
|
+
|
|
135
|
+
```bash
|
|
136
|
+
ptero-gateway admin users
|
|
137
|
+
ptero-gateway admin servers
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
Create server dry-run:
|
|
141
|
+
|
|
142
|
+
```bash
|
|
143
|
+
ptero-gateway admin create-server \
|
|
144
|
+
--name "aka test" \
|
|
145
|
+
--email "user@example.com" \
|
|
146
|
+
--username "aka_test" \
|
|
147
|
+
--password "password aman" \
|
|
148
|
+
--node 1 \
|
|
149
|
+
--nest 5 \
|
|
150
|
+
--egg 18 \
|
|
151
|
+
--memory 1GB \
|
|
152
|
+
--disk 2GB \
|
|
153
|
+
--cpu 100% \
|
|
154
|
+
--databases 0 \
|
|
155
|
+
--allocations 1 \
|
|
156
|
+
--backups 0 \
|
|
157
|
+
--dry-run
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
Create server asli:
|
|
161
|
+
|
|
162
|
+
```bash
|
|
163
|
+
ptero-gateway admin create-server \
|
|
164
|
+
--name "aka test" \
|
|
165
|
+
--email "user@example.com" \
|
|
166
|
+
--username "aka_test" \
|
|
167
|
+
--password "password aman" \
|
|
168
|
+
--node 1 \
|
|
169
|
+
--nest 5 \
|
|
170
|
+
--egg 18 \
|
|
171
|
+
--memory 1GB \
|
|
172
|
+
--disk 2GB \
|
|
173
|
+
--cpu 100% \
|
|
174
|
+
--databases 0 \
|
|
175
|
+
--allocations 1 \
|
|
176
|
+
--backups 0 \
|
|
177
|
+
--yes
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
Detail dan limit server admin:
|
|
181
|
+
|
|
182
|
+
```bash
|
|
183
|
+
ptero-gateway admin server 5 detail
|
|
184
|
+
ptero-gateway admin server 5 limits
|
|
185
|
+
ptero-gateway admin server 5 update-limits --backups 1 --yes
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
Lifecycle admin:
|
|
133
189
|
|
|
134
|
-
|
|
190
|
+
```bash
|
|
191
|
+
ptero-gateway admin server 5 suspend --yes
|
|
192
|
+
ptero-gateway admin server 5 unsuspend --yes
|
|
193
|
+
ptero-gateway admin server 5 reinstall --yes
|
|
194
|
+
```
|
|
135
195
|
|
|
136
|
-
|
|
137
|
-
- `email`
|
|
138
|
-
- `password`
|
|
139
|
-
- `administrator`
|
|
196
|
+
Probe dan summary server client:
|
|
140
197
|
|
|
141
|
-
|
|
198
|
+
```bash
|
|
199
|
+
ptero-gateway probe 311d56b7
|
|
200
|
+
ptero-gateway server 311d56b7 summary
|
|
201
|
+
ptero-gateway server 311d56b7 resources
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
File manager:
|
|
205
|
+
|
|
206
|
+
```bash
|
|
207
|
+
ptero-gateway server 311d56b7 files /
|
|
208
|
+
ptero-gateway server 311d56b7 read /package.json
|
|
209
|
+
ptero-gateway server 311d56b7 write /tmp/test.txt "halo" --yes
|
|
210
|
+
ptero-gateway server 311d56b7 write /index.js "console.log('halo')" --yes --allow-any-path
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
Startup variables:
|
|
214
|
+
|
|
215
|
+
```bash
|
|
216
|
+
ptero-gateway server 311d56b7 env
|
|
217
|
+
ptero-gateway server 311d56b7 set-env CMD_RUN "node index.js" --yes
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
Template server Node yang tetap hidup:
|
|
221
|
+
|
|
222
|
+
```bash
|
|
223
|
+
ptero-gateway server 311d56b7 stop --yes
|
|
224
|
+
ptero-gateway server 311d56b7 init-node-alive --yes
|
|
225
|
+
ptero-gateway server 311d56b7 start --yes
|
|
226
|
+
ptero-gateway server 311d56b7 resources
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
Backup:
|
|
230
|
+
|
|
231
|
+
```bash
|
|
232
|
+
ptero-gateway server 311d56b7 backups
|
|
233
|
+
ptero-gateway server 311d56b7 create-backup --name "before-update" --yes
|
|
234
|
+
ptero-gateway server 311d56b7 backup <uuid>
|
|
235
|
+
ptero-gateway server 311d56b7 delete-backup <uuid> --yes
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
Power control:
|
|
239
|
+
|
|
240
|
+
```bash
|
|
241
|
+
ptero-gateway server 311d56b7 start --yes
|
|
242
|
+
ptero-gateway server 311d56b7 stop --yes
|
|
243
|
+
ptero-gateway server 311d56b7 restart --yes
|
|
244
|
+
ptero-gateway server 311d56b7 kill --yes
|
|
245
|
+
ptero-gateway server 311d56b7 command "npm start" --yes
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
## Create user SDK
|
|
142
249
|
|
|
143
250
|
```ts
|
|
144
251
|
const user = await ptero.users.createSmart({
|
|
145
|
-
username: "
|
|
146
|
-
email: "
|
|
252
|
+
username: "aka_test",
|
|
253
|
+
email: "user@example.com",
|
|
147
254
|
password: "auto",
|
|
148
255
|
administrator: "no"
|
|
149
256
|
});
|
|
@@ -153,164 +260,87 @@ console.log(user);
|
|
|
153
260
|
|
|
154
261
|
Jika `password: "auto"`, package membuat password aman dan mengembalikannya sekali pada response.
|
|
155
262
|
|
|
156
|
-
## Create server
|
|
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`
|
|
263
|
+
## Create server SDK
|
|
185
264
|
|
|
186
265
|
```ts
|
|
187
266
|
const server = await ptero.servers.createSmart({
|
|
188
267
|
name: "Bot WhatsApp Aka",
|
|
189
|
-
email: "
|
|
268
|
+
email: "user@example.com",
|
|
269
|
+
username: "aka_test",
|
|
270
|
+
password: "password aman",
|
|
271
|
+
autoCreateUser: true,
|
|
190
272
|
description: "Server bot WhatsApp untuk Aka",
|
|
191
273
|
nodeId: 1,
|
|
192
274
|
nestId: 5,
|
|
193
|
-
eggId:
|
|
275
|
+
eggId: 18,
|
|
194
276
|
specs: {
|
|
195
|
-
memory: "
|
|
196
|
-
disk: "
|
|
277
|
+
memory: "1GB",
|
|
278
|
+
disk: "2GB",
|
|
197
279
|
cpu: "100%",
|
|
198
|
-
databases:
|
|
280
|
+
databases: 0,
|
|
199
281
|
allocations: 1,
|
|
200
|
-
backups:
|
|
282
|
+
backups: 0
|
|
201
283
|
}
|
|
202
284
|
});
|
|
203
285
|
|
|
204
286
|
console.log(server);
|
|
205
287
|
```
|
|
206
288
|
|
|
207
|
-
## Preview
|
|
208
|
-
|
|
209
|
-
Gunakan ini untuk melihat hasil auto-sync sebelum server benar-benar dibuat.
|
|
289
|
+
## Preview dan dry-run SDK
|
|
210
290
|
|
|
211
291
|
```ts
|
|
212
|
-
const
|
|
213
|
-
|
|
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
|
-
}
|
|
292
|
+
const result = await ptero.servers.createSmart(input, {
|
|
293
|
+
dryRun: true
|
|
227
294
|
});
|
|
228
295
|
|
|
229
|
-
console.log(
|
|
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
|
|
296
|
+
console.log(result.payload);
|
|
245
297
|
```
|
|
246
298
|
|
|
247
|
-
## File manager
|
|
299
|
+
## File manager SDK
|
|
248
300
|
|
|
249
301
|
```ts
|
|
250
|
-
const server = ptero.server("
|
|
302
|
+
const server = ptero.server("311d56b7");
|
|
251
303
|
|
|
252
304
|
const files = await server.files.list("/");
|
|
253
305
|
const text = await server.files.read("/package.json");
|
|
254
|
-
await server.files.write("/index.js", "console.log('
|
|
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");
|
|
306
|
+
await server.files.write("/index.js", "console.log('running')");
|
|
260
307
|
|
|
261
308
|
const config = await server.files.json.read("/config.json");
|
|
262
309
|
await server.files.json.write("/config.json", { ok: true });
|
|
263
310
|
```
|
|
264
311
|
|
|
265
|
-
## Startup variables
|
|
312
|
+
## Startup variables SDK
|
|
266
313
|
|
|
267
314
|
```ts
|
|
268
315
|
const variables = await server.startup.variables();
|
|
269
|
-
await server.startup.set("
|
|
316
|
+
await server.startup.set("CMD_RUN", "node index.js");
|
|
270
317
|
await server.startup.setMany({
|
|
271
318
|
NODE_ENV: "production",
|
|
272
319
|
STARTUP_FILE: "index.js"
|
|
273
320
|
});
|
|
274
321
|
```
|
|
275
322
|
|
|
276
|
-
## Network
|
|
323
|
+
## Network, database, backup, schedule SDK
|
|
277
324
|
|
|
278
325
|
```ts
|
|
279
|
-
|
|
326
|
+
await server.network.list();
|
|
280
327
|
await server.network.assign();
|
|
281
328
|
await server.network.setNote(123, "API port");
|
|
282
329
|
await server.network.setPrimary(123);
|
|
283
330
|
await server.network.delete(123);
|
|
284
|
-
```
|
|
285
331
|
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
```ts
|
|
289
|
-
const databases = await server.databases.list();
|
|
332
|
+
await server.databases.list();
|
|
290
333
|
await server.databases.create({ database: "botdb" });
|
|
291
|
-
await server.databases.create({ database: "botdb", remote: "%" });
|
|
292
334
|
await server.databases.rotatePassword("database-id");
|
|
293
335
|
await server.databases.delete("database-id");
|
|
294
|
-
```
|
|
295
|
-
|
|
296
|
-
## Backup manager
|
|
297
336
|
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
await server.backups.create({
|
|
301
|
-
name: "before-update",
|
|
302
|
-
ignored: ["node_modules"],
|
|
303
|
-
isLocked: false
|
|
304
|
-
});
|
|
337
|
+
await server.backups.list();
|
|
338
|
+
await server.backups.create({ name: "before-update" });
|
|
305
339
|
await server.backups.details("backup-id");
|
|
306
340
|
await server.backups.download("backup-id");
|
|
307
341
|
await server.backups.delete("backup-id");
|
|
308
|
-
```
|
|
309
342
|
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
```ts
|
|
313
|
-
const schedules = await server.schedules.list();
|
|
343
|
+
await server.schedules.list();
|
|
314
344
|
await server.schedules.create({
|
|
315
345
|
name: "Daily restart",
|
|
316
346
|
minute: "0",
|
|
@@ -319,74 +349,6 @@ await server.schedules.create({
|
|
|
319
349
|
month: "*",
|
|
320
350
|
dayOfWeek: "*"
|
|
321
351
|
});
|
|
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
352
|
```
|
|
391
353
|
|
|
392
354
|
## Raw request
|
|
@@ -396,27 +358,12 @@ Raw mode disediakan agar fitur baru atau panel fork tetap bisa dipakai.
|
|
|
396
358
|
```ts
|
|
397
359
|
await ptero.raw.application.get("/users");
|
|
398
360
|
await ptero.raw.application.post("/servers", payload);
|
|
399
|
-
await ptero.raw.client.get("/servers/
|
|
400
|
-
await ptero.raw.client.post("/servers/
|
|
361
|
+
await ptero.raw.client.get("/servers/311d56b7/resources");
|
|
362
|
+
await ptero.raw.client.post("/servers/311d56b7/command", {
|
|
401
363
|
command: "npm start"
|
|
402
364
|
});
|
|
403
365
|
```
|
|
404
366
|
|
|
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
367
|
## Testing di VPS Ubuntu
|
|
421
368
|
|
|
422
369
|
```bash
|
|
@@ -437,33 +384,32 @@ npm run verify
|
|
|
437
384
|
- `npm run test:cli`
|
|
438
385
|
- `npm run test:pack`
|
|
439
386
|
|
|
440
|
-
|
|
387
|
+
## Catatan keamanan
|
|
441
388
|
|
|
442
|
-
|
|
389
|
+
- Jangan hardcode PTLA/PTLC di source code.
|
|
390
|
+
- Semua aksi tulis/ubah via CLI wajib `--yes`.
|
|
391
|
+
- Write file CLI default hanya boleh ke `/tmp`; untuk path lain wajib `--allow-any-path`.
|
|
392
|
+
- Command berbahaya seperti `rm -rf /` diblokir oleh guard command.
|
|
393
|
+
- Gunakan `--dry-run` sebelum create server asli.
|
|
394
|
+
- Untuk delete server/user permanen, fitur sengaja belum dibuka di v0.3.0 dan akan dibuat dengan guard tambahan.
|
|
443
395
|
|
|
444
|
-
|
|
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.
|
|
396
|
+
## Roadmap ringkas
|
|
451
397
|
|
|
452
|
-
### v0.3.
|
|
398
|
+
### v0.3.x
|
|
453
399
|
|
|
454
|
-
|
|
400
|
+
Perapihan docs, lifecycle aman, cleanup aman, validasi create server, dan command CLI yang lebih ramah pemula.
|
|
455
401
|
|
|
456
402
|
### v0.4.0
|
|
457
403
|
|
|
458
|
-
CLI
|
|
404
|
+
Wizard CLI interaktif untuk create user/server, allocation helper, dan template project siap jalan.
|
|
459
405
|
|
|
460
406
|
### v0.5.0
|
|
461
407
|
|
|
462
|
-
TUI
|
|
408
|
+
TUI/GUI CLI terminal: dashboard interaktif, preview, create server, kontrol server, dan console viewer.
|
|
463
409
|
|
|
464
410
|
### v0.6.0
|
|
465
411
|
|
|
466
|
-
Experimental nest/egg create/update/delete, import/export egg, compatibility adapter.
|
|
412
|
+
Experimental nest/egg create/update/delete, import/export egg, dan compatibility adapter.
|
|
467
413
|
|
|
468
414
|
## Lisensi
|
|
469
415
|
|