@akaanakbaik/pterodactyl-gateway 0.5.0 → 0.8.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/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
- "pastikan tidak ada spasi/kutip rusak pada env",
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
- "jalankan: ptero-gateway doctor"
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
- "jalankan: ptero-gateway doctor"
30
+ "atau simpan di profile: ptero-gateway config init --domain ... --ptlc ptlc_xxx"
31
31
  ]
32
32
  },
33
33
  DOCKER_IMAGE_NOT_FOUND: {
@@ -105,6 +105,14 @@ else if (command === "env-template") {
105
105
  ].join("\n");
106
106
  console.log(content);
107
107
  }
108
+ else if (command === "config") {
109
+ const { configCommand } = await import("./config.js");
110
+ await configCommand(rawArgs.slice(1));
111
+ }
112
+ else if (command === "templates") {
113
+ const { templatesCommand } = await import("./templates.js");
114
+ templatesCommand(rawArgs.slice(1));
115
+ }
108
116
  else if (command === "explain") {
109
117
  const code = (rawArgs[1] ?? "").toUpperCase();
110
118
  const result = EXPLAINS[code];
@@ -119,12 +127,22 @@ else if (command === "explain") {
119
127
  }
120
128
  }
121
129
  else {
130
+ const { applyConfigProfile } = await import("./config.js");
131
+ applyConfigProfile();
122
132
  await import("./cli.js");
123
133
  }
124
134
  function printHelp() {
125
135
  console.log(`Akadev Pterodactyl Gateway
126
136
 
127
137
  Perintah:
138
+ ptero-gateway config help
139
+ ptero-gateway config init --domain https://panel.example.com --ptla ptla_xxx --ptlc ptlc_xxx
140
+ ptero-gateway config list
141
+ ptero-gateway config use <profile>
142
+ ptero-gateway config doctor
143
+ ptero-gateway templates list
144
+ ptero-gateway templates show nodejs-bot
145
+ ptero-gateway templates command nodejs-bot --name "bot saya" --email user@example.com --node 1 --nest 5 --egg 18
128
146
  ptero-gateway presets [--json]
129
147
  ptero-gateway explain <ERROR_CODE> [--json]
130
148
  ptero-gateway env-template
@@ -1 +1 @@
1
- {"version":3,"file":"cli-entry.js","sourceRoot":"","sources":["../src/cli-entry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli-entry.js","sourceRoot":"","sources":["../src/cli-entry.ts"],"names":[],"mappings":"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"}
@@ -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,iBAmGjD;AAED,wBAAgB,kBAAkB,CAAC,WAAW,qBAA4B,WAWzE"}
package/dist/config.js ADDED
@@ -0,0 +1,212 @@
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 === "env") {
67
+ const config = readConfig();
68
+ const profileName = args[1] && !args[1].startsWith("--") ? args[1] : config.active;
69
+ if (!profileName)
70
+ throw new Error("Belum ada active profile.");
71
+ const profile = config.profiles[profileName];
72
+ if (!profile)
73
+ throw new Error(`Profile tidak ditemukan: ${profileName}`);
74
+ console.log(toEnv(profile));
75
+ return;
76
+ }
77
+ if (action === "doctor") {
78
+ const config = readConfig();
79
+ const profileName = args[1] && !args[1].startsWith("--") ? args[1] : config.active;
80
+ const profile = profileName ? config.profiles[profileName] : undefined;
81
+ const result = {
82
+ ok: Boolean(profile?.domain && (profile.ptla || profile.ptlc)),
83
+ path: CONFIG_FILE,
84
+ active: profileName ?? null,
85
+ profileExists: Boolean(profile),
86
+ hasDomain: Boolean(profile?.domain),
87
+ hasPtla: Boolean(profile?.ptla),
88
+ hasPtlc: Boolean(profile?.ptlc)
89
+ };
90
+ const pretty = [
91
+ `Config: ${result.ok ? "OK" : "PERLU DILENGKAPI"}`,
92
+ `Path: ${result.path}`,
93
+ `Active: ${result.active ?? "-"}`,
94
+ `${result.profileExists ? "✓" : "✗"} profile tersedia`,
95
+ `${result.hasDomain ? "✓" : "✗"} domain`,
96
+ `${result.hasPtla ? "✓" : "-"} PTLA`,
97
+ `${result.hasPtlc ? "✓" : "-"} PTLC`
98
+ ].join("\n");
99
+ printJsonOrText(jsonMode, result, pretty);
100
+ return;
101
+ }
102
+ throw new Error(`Config command tidak dikenal: ${action}`);
103
+ }
104
+ export function applyConfigProfile(profileName = process.env.PTERO_PROFILE) {
105
+ if (!existsSync(CONFIG_FILE))
106
+ return false;
107
+ const config = readConfig();
108
+ const active = profileName || config.active;
109
+ if (!active)
110
+ return false;
111
+ const profile = config.profiles[active];
112
+ if (!profile)
113
+ return false;
114
+ process.env.PTERO_DOMAIN ||= profile.domain;
115
+ if (profile.ptla)
116
+ process.env.PTERO_PTLA ||= profile.ptla;
117
+ if (profile.ptlc)
118
+ process.env.PTERO_PTLC ||= profile.ptlc;
119
+ return true;
120
+ }
121
+ function readConfig() {
122
+ if (!existsSync(CONFIG_FILE))
123
+ return { profiles: {} };
124
+ const raw = JSON.parse(readFileSync(CONFIG_FILE, "utf8"));
125
+ return { active: raw.active, profiles: raw.profiles ?? {} };
126
+ }
127
+ function writeConfig(config) {
128
+ mkdirSync(dirname(CONFIG_FILE), { recursive: true });
129
+ writeFileSync(CONFIG_FILE, `${JSON.stringify(config, null, 2)}\n`, "utf8");
130
+ try {
131
+ chmodSync(CONFIG_FILE, 0o600);
132
+ }
133
+ catch { }
134
+ }
135
+ function compactProfile(profile) {
136
+ return {
137
+ domain: profile.domain.replace(/\/$/, ""),
138
+ ...(profile.ptla ? { ptla: profile.ptla } : {}),
139
+ ...(profile.ptlc ? { ptlc: profile.ptlc } : {})
140
+ };
141
+ }
142
+ function getOption(args, name) {
143
+ const index = args.indexOf(name);
144
+ if (index < 0)
145
+ return undefined;
146
+ return args[index + 1];
147
+ }
148
+ function safeConfig(config) {
149
+ return {
150
+ active: config.active,
151
+ profiles: Object.fromEntries(Object.entries(config.profiles).map(([name, profile]) => [name, safeProfile(profile)]))
152
+ };
153
+ }
154
+ function safeProfile(profile) {
155
+ return {
156
+ domain: profile.domain,
157
+ ptla: profile.ptla ? maskSecret(profile.ptla) : undefined,
158
+ ptlc: profile.ptlc ? maskSecret(profile.ptlc) : undefined
159
+ };
160
+ }
161
+ function formatProfile(name, profile) {
162
+ return [
163
+ `Profile: ${name}`,
164
+ `Domain: ${profile.domain}`,
165
+ `PTLA: ${profile.ptla ? maskSecret(profile.ptla) : "-"}`,
166
+ `PTLC: ${profile.ptlc ? maskSecret(profile.ptlc) : "-"}`
167
+ ].join("\n");
168
+ }
169
+ function toEnv(profile) {
170
+ return [
171
+ `export PTERO_DOMAIN=${JSON.stringify(profile.domain)}`,
172
+ profile.ptla ? `export PTERO_PTLA=${JSON.stringify(profile.ptla)}` : "",
173
+ profile.ptlc ? `export PTERO_PTLC=${JSON.stringify(profile.ptlc)}` : ""
174
+ ].filter(Boolean).join("\n");
175
+ }
176
+ function maskSecret(value) {
177
+ if (value.length <= 10)
178
+ return "********";
179
+ return `${value.slice(0, 5)}********${value.slice(-4)}`;
180
+ }
181
+ function printJsonOrText(jsonMode, raw, text) {
182
+ if (jsonMode)
183
+ console.log(JSON.stringify(raw, null, 2));
184
+ else
185
+ console.log(text);
186
+ }
187
+ function table(rows, columns) {
188
+ const widths = columns.map(column => Math.max(column.length, ...rows.map(row => String(row[column] ?? "").length)));
189
+ return [
190
+ columns.map((column, index) => column.padEnd(widths[index] ?? column.length)).join(" "),
191
+ widths.map(width => "-".repeat(width)).join(" "),
192
+ ...rows.map(row => columns.map((column, index) => String(row[column] ?? "").padEnd(widths[index] ?? column.length)).join(" "))
193
+ ].join("\n");
194
+ }
195
+ function printConfigHelp() {
196
+ console.log(`Akadev Pterodactyl Gateway Config
197
+
198
+ Perintah:
199
+ ptero-gateway config path
200
+ ptero-gateway config init --domain https://panel.example.com --ptla ptla_xxx --ptlc ptlc_xxx
201
+ ptero-gateway config init --profile prod --domain https://panel.example.com --ptla ptla_xxx --ptlc ptlc_xxx
202
+ ptero-gateway config list
203
+ ptero-gateway config show [profile]
204
+ ptero-gateway config use <profile>
205
+ ptero-gateway config env [profile]
206
+ ptero-gateway config doctor
207
+
208
+ Catatan:
209
+ File config disimpan di ~/.pterodactyl-gateway/config.json dengan permission 600.
210
+ CLI otomatis memakai active profile jika env PTERO_DOMAIN/PTERO_PTLA/PTERO_PTLC belum di-set.`);
211
+ }
212
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function templatesCommand(args: string[]): void;
2
+ //# sourceMappingURL=templates.d.ts.map
@@ -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":"AAAA,MAAM,SAAS,GAAG;IAChB,YAAY,EAAE;QACZ,WAAW,EAAE,iEAAiE;QAC9E,MAAM,EAAE,OAAO;QACf,OAAO,EAAE,eAAe;QACxB,WAAW,EAAE,MAAM;QACnB,gBAAgB,EAAE,CAAC,cAAc,EAAE,UAAU,CAAC;KAC/C;IACD,YAAY,EAAE;QACZ,WAAW,EAAE,oDAAoD;QACjE,MAAM,EAAE,UAAU;QAClB,OAAO,EAAE,WAAW;QACpB,WAAW,EAAE,MAAM;QACnB,gBAAgB,EAAE,CAAC,cAAc,EAAE,cAAc,CAAC;KACnD;IACD,QAAQ,EAAE;QACR,WAAW,EAAE,8CAA8C;QAC3D,MAAM,EAAE,UAAU;QAClB,OAAO,EAAE,WAAW;QACpB,WAAW,EAAE,MAAM;QACnB,gBAAgB,EAAE,CAAC,cAAc,EAAE,UAAU,EAAE,WAAW,CAAC;KAC5D;IACD,YAAY,EAAE;QACZ,WAAW,EAAE,wCAAwC;QACrD,MAAM,EAAE,OAAO;QACf,OAAO,EAAE,iBAAiB;QAC1B,WAAW,EAAE,MAAM;QACnB,gBAAgB,EAAE,CAAC,kBAAkB,EAAE,SAAS,CAAC;KAClD;IACD,OAAO,EAAE;QACP,WAAW,EAAE,oCAAoC;QACjD,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,MAAM;QACf,WAAW,EAAE,MAAM;QACnB,gBAAgB,EAAE,EAAE;KACrB;CACF,CAAC;AAIF,MAAM,UAAU,gBAAgB,CAAC,IAAc;IAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC;IACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAEzC,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC9C,kBAAkB,EAAE,CAAC;QACrB,OAAO;IACT,CAAC;IAED,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACtB,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC;YAChE,IAAI;YACJ,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,OAAO,EAAE,QAAQ,CAAC,OAAO;YACzB,WAAW,EAAE,QAAQ,CAAC,WAAW;SAClC,CAAC,CAAC,CAAC;QACJ,eAAe,CAAC,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;QAChG,OAAO;IACT,CAAC;IAED,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACtB,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACrB,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;QACnC,eAAe,CAAC,QAAQ,EAAE,QAAQ,EAAE,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;QACpE,OAAO;IACT,CAAC;IAED,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACrB,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;QACnC,MAAM,UAAU,GAAG,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,WAAW,CAAC;QAC5D,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,kBAAkB,CAAC;QAC/D,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,GAAG,CAAC;QAC9C,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,GAAG,CAAC;QAC9C,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC;QAC7C,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;QAC/C,MAAM,MAAM,GAAG;YACb,mCAAmC;YACnC,UAAU,KAAK,CAAC,UAAU,CAAC,EAAE;YAC7B,WAAW,KAAK,CAAC,KAAK,CAAC,EAAE;YACzB,QAAQ,CAAC,CAAC,CAAC,cAAc,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;YAC/C,UAAU,KAAK,CAAC,IAAI,CAAC,EAAE;YACvB,UAAU,KAAK,CAAC,IAAI,CAAC,EAAE;YACvB,SAAS,KAAK,CAAC,GAAG,CAAC,EAAE;YACrB,YAAY,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;YACpC,aAAa,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;YACtC,WAAW;SACZ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9B,OAAO;IACT,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,mCAAmC,MAAM,EAAE,CAAC,CAAC;AAC/D,CAAC;AAED,SAAS,WAAW,CAAC,IAAwB;IAC3C,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;IAC3F,IAAI,CAAC,CAAC,IAAI,IAAI,SAAS,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,IAAI,EAAE,CAAC,CAAC;IAC7E,OAAO,SAAS,CAAC,IAAoB,CAAC,CAAC;AACzC,CAAC;AAED,SAAS,SAAS,CAAC,IAAc,EAAE,IAAY;IAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,IAAI,KAAK,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IAChC,OAAO,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;AACzB,CAAC;AAED,SAAS,KAAK,CAAC,KAAa;IAC1B,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAC/B,CAAC;AAED,SAAS,cAAc,CAAC,IAAwB,EAAE,QAA0C;IAC1F,OAAO;QACL,aAAa,IAAI,EAAE;QACnB,gBAAgB,QAAQ,CAAC,WAAW,EAAE;QACtC,WAAW,QAAQ,CAAC,MAAM,EAAE;QAC5B,YAAY,QAAQ,CAAC,OAAO,EAAE;QAC9B,WAAW,QAAQ,CAAC,WAAW,EAAE;QACjC,sBAAsB,QAAQ,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE;KACtG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,SAAS,eAAe,CAAC,QAAiB,EAAE,GAAY,EAAE,IAAY;IACpE,IAAI,QAAQ;QAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;;QACnD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACzB,CAAC;AAED,SAAS,KAAK,CAAC,IAAmC,EAAE,OAAiB;IACnE,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACpH,OAAO;QACL,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QACxF,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QACjD,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAChI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,SAAS,kBAAkB;IACzB,OAAO,CAAC,GAAG,CAAC;;;;;;;;;0FAS4E,CAAC,CAAC;AAC5F,CAAC"}
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-gateway wizard create-user
209
- ptero-gateway wizard create-user --dry-run
210
- ptero-gateway wizard create-server
211
- ptero-gateway wizard create-server --dry-run
212
- ptero-gateway wizard create-server --yes
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.5.0",
3
+ "version": "0.8.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 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": [