@akaanakbaik/pterodactyl-gateway 0.3.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/index.js ADDED
@@ -0,0 +1,10 @@
1
+ export { PteroGateway } from "./gateway.js";
2
+ export { PteroError, explainError } from "./errors.js";
3
+ export { formatMiB, maskSecret, normalizeDomain, parseCpu, parseSizeToMiB } from "./utils.js";
4
+ export * from "./types.js";
5
+ import { PteroGateway } from "./gateway.js";
6
+ export const createPtero = Object.assign((config) => new PteroGateway(config), {
7
+ fromEnv: (env = process.env) => PteroGateway.fromEnv(env)
8
+ });
9
+ export const ptero = createPtero;
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,eAAe,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC9F,cAAc,YAAY,CAAC;AAE3B,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAQ5C,MAAM,CAAC,MAAM,WAAW,GAAgB,MAAM,CAAC,MAAM,CACnD,CAAC,MAAmB,EAAE,EAAE,CAAC,IAAI,YAAY,CAAC,MAAM,CAAC,EACjD;IACE,OAAO,EAAE,CAAC,MAAyB,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC;CAC7E,CACF,CAAC;AAEF,MAAM,CAAC,MAAM,KAAK,GAAG,WAAW,CAAC"}
@@ -0,0 +1,49 @@
1
+ import { AllocationInput, CreateSmartServerInput, CreateUserSmartInput, OperationOptions, ServerSpecsInput } from "./types.js";
2
+ export declare function buildUserPayload(input: CreateUserSmartInput): {
3
+ payload: Record<string, unknown>;
4
+ generatedPassword?: string;
5
+ };
6
+ export declare function normalizeUserResponse(raw: unknown, generatedPassword?: string): {
7
+ id: number;
8
+ username: string;
9
+ email: string;
10
+ firstName: string | undefined;
11
+ lastName: string | undefined;
12
+ administrator: boolean | undefined;
13
+ generatedPassword: string | undefined;
14
+ raw: unknown;
15
+ };
16
+ export declare function normalizeSpecs(specs: ServerSpecsInput): {
17
+ limits: {
18
+ memory: number;
19
+ swap: number;
20
+ disk: number;
21
+ io: number;
22
+ cpu: number;
23
+ threads: string | null;
24
+ };
25
+ featureLimits: {
26
+ databases: number;
27
+ allocations: number;
28
+ backups: number;
29
+ };
30
+ };
31
+ export declare function selectAllocations(raw: unknown, count: number, input: AllocationInput | undefined): {
32
+ default: number;
33
+ additional: number[];
34
+ };
35
+ export declare function buildEnvironment(rawEgg: unknown, input: CreateSmartServerInput): Record<string, string>;
36
+ export declare function resolveDockerImage(rawEgg: unknown, input?: string): string;
37
+ export declare function resolveStartup(rawEgg: unknown, input?: string): string;
38
+ export declare function buildServerPayload(input: CreateSmartServerInput, resolved: {
39
+ userId: number;
40
+ rawEgg: unknown;
41
+ allocation: {
42
+ default: number;
43
+ additional: number[];
44
+ };
45
+ specs: ReturnType<typeof normalizeSpecs>;
46
+ }): Record<string, unknown>;
47
+ export declare function validateCreateInput(input: CreateSmartServerInput, specs: ServerSpecsInput | undefined): ServerSpecsInput;
48
+ export declare function progress(options: OperationOptions | undefined, stage: string, percent: number, message: string): void;
49
+ //# sourceMappingURL=smart.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"smart.d.ts","sourceRoot":"","sources":["../src/smart.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,gBAAgB,EAAuB,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAGpJ,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,oBAAoB,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAAE,CAkB9H;AAED,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,OAAO,EAAE,iBAAiB,CAAC,EAAE,MAAM;;;;;;;;;EAa7E;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,gBAAgB;;;;;;;;;;;;;;EAwBrD;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,GAAG,SAAS,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAA;CAAE,CAgC5I;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,sBAAsB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CA4BvG;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAa1E;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAUtE;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,sBAAsB,EAAE,QAAQ,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAAC,KAAK,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,CAAA;CAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAsBzO;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,sBAAsB,EAAE,KAAK,EAAE,gBAAgB,GAAG,SAAS,GAAG,gBAAgB,CASxH;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,gBAAgB,GAAG,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAErH"}
package/dist/smart.js ADDED
@@ -0,0 +1,192 @@
1
+ import { noFreeAllocation, PteroError } from "./errors.js";
2
+ import { asObject, emitProgress, ensureNonEmptyString, ensureNonNegativeInteger, ensurePositiveInteger, generatePassword, getCollection, getDataAttributes, parseCpu, parseSizeToMiB, toBoolean } from "./utils.js";
3
+ export function buildUserPayload(input) {
4
+ const username = ensureNonEmptyString(input.username, "username");
5
+ const email = ensureNonEmptyString(input.email, "email");
6
+ const generatedPassword = input.password === "auto" ? generatePassword() : undefined;
7
+ const password = generatedPassword ?? ensureNonEmptyString(input.password, "password");
8
+ const administrator = toBoolean(input.administrator);
9
+ return {
10
+ payload: {
11
+ username,
12
+ email,
13
+ first_name: input.firstName?.trim() || username,
14
+ last_name: input.lastName?.trim() || username,
15
+ password,
16
+ root_admin: administrator,
17
+ language: input.language ?? "en"
18
+ },
19
+ generatedPassword
20
+ };
21
+ }
22
+ export function normalizeUserResponse(raw, generatedPassword) {
23
+ const attributes = getDataAttributes(raw);
24
+ const id = Number(attributes.id ?? asObject(raw).id ?? 0);
25
+ return {
26
+ id,
27
+ username: String(attributes.username ?? ""),
28
+ email: String(attributes.email ?? ""),
29
+ firstName: typeof attributes.first_name === "string" ? attributes.first_name : undefined,
30
+ lastName: typeof attributes.last_name === "string" ? attributes.last_name : undefined,
31
+ administrator: typeof attributes.root_admin === "boolean" ? attributes.root_admin : undefined,
32
+ generatedPassword,
33
+ raw
34
+ };
35
+ }
36
+ export function normalizeSpecs(specs) {
37
+ const memory = parseSizeToMiB(specs.memory);
38
+ const disk = parseSizeToMiB(specs.disk);
39
+ const cpu = parseCpu(specs.cpu);
40
+ const swap = specs.swap === undefined ? 0 : parseSizeToMiB(specs.swap);
41
+ const io = specs.io === undefined ? 500 : ensureNonNegativeInteger(specs.io, "io");
42
+ const databases = ensureNonNegativeInteger(specs.databases, "databases");
43
+ const allocations = ensureNonNegativeInteger(specs.allocations, "allocations");
44
+ const backups = ensureNonNegativeInteger(specs.backups, "backups");
45
+ return {
46
+ limits: {
47
+ memory,
48
+ swap,
49
+ disk,
50
+ io,
51
+ cpu,
52
+ threads: specs.cpuPinning?.trim() ? specs.cpuPinning.trim() : null
53
+ },
54
+ featureLimits: {
55
+ databases,
56
+ allocations,
57
+ backups
58
+ }
59
+ };
60
+ }
61
+ export function selectAllocations(raw, count, input) {
62
+ if (typeof input === "object" && typeof input.default === "number") {
63
+ return {
64
+ default: input.default,
65
+ additional: Array.isArray(input.additional) ? input.additional : []
66
+ };
67
+ }
68
+ const strategy = typeof input === "object" ? input.strategy ?? "top" : "top";
69
+ const portRange = typeof input === "object" ? input.portRange : undefined;
70
+ const free = getCollection(raw)
71
+ .map(item => {
72
+ const attributes = asObject(item.attributes ?? item);
73
+ return {
74
+ id: Number(attributes.id ?? 0),
75
+ port: Number(attributes.port ?? 0),
76
+ assigned: Boolean(attributes.assigned)
77
+ };
78
+ })
79
+ .filter(item => item.id > 0 && !item.assigned)
80
+ .filter(item => !portRange || (item.port >= portRange[0] && item.port <= portRange[1]));
81
+ if (strategy === "lowest-port" || strategy === "range")
82
+ free.sort((a, b) => a.port - b.port);
83
+ if (strategy === "highest-port")
84
+ free.sort((a, b) => b.port - a.port);
85
+ if (strategy === "random")
86
+ free.sort(() => Math.random() - 0.5);
87
+ const required = Math.max(1, count);
88
+ if (free.length < required)
89
+ throw noFreeAllocation(0);
90
+ return {
91
+ default: free[0].id,
92
+ additional: free.slice(1, required).map(item => item.id)
93
+ };
94
+ }
95
+ export function buildEnvironment(rawEgg, input) {
96
+ if (input.environment && input.environment !== "auto") {
97
+ return Object.fromEntries(Object.entries(input.environment).map(([key, value]) => [key, String(value)]));
98
+ }
99
+ const attributes = getDataAttributes(rawEgg);
100
+ const relationships = asObject(attributes.relationships);
101
+ const variables = getCollection(relationships.variables);
102
+ const output = {};
103
+ for (const variable of variables) {
104
+ const variableAttributes = asObject(variable.attributes ?? variable);
105
+ const env = String(variableAttributes.env_variable ?? "");
106
+ if (!env)
107
+ continue;
108
+ const defaultValue = variableAttributes.default_value;
109
+ const isRequired = Boolean(variableAttributes.rules && String(variableAttributes.rules).includes("required"));
110
+ if (defaultValue !== undefined && defaultValue !== null)
111
+ output[env] = String(defaultValue);
112
+ else if (isRequired) {
113
+ throw new PteroError({
114
+ code: "EGG_VARIABLE_REQUIRED",
115
+ message: `Variable ${env} wajib diisi tetapi tidak punya default value.`,
116
+ hint: `Tambahkan environment.${env} saat create server.`,
117
+ example: { environment: { [env]: "isi-di-sini" } }
118
+ });
119
+ }
120
+ else
121
+ output[env] = "";
122
+ }
123
+ return output;
124
+ }
125
+ export function resolveDockerImage(rawEgg, input) {
126
+ if (input && input !== "auto")
127
+ return input;
128
+ const attributes = getDataAttributes(rawEgg);
129
+ const dockerImages = asObject(attributes.docker_images);
130
+ const firstImage = Object.values(dockerImages).find(value => typeof value === "string");
131
+ const dockerImage = firstImage ?? attributes.docker_image;
132
+ if (typeof dockerImage === "string" && dockerImage.trim())
133
+ return dockerImage;
134
+ throw new PteroError({
135
+ code: "DOCKER_IMAGE_NOT_FOUND",
136
+ message: "Docker image default tidak ditemukan dari egg.",
137
+ hint: "Isi dockerImage manual atau atur Docker Images di egg.",
138
+ example: { dockerImage: "ghcr.io/parkervcp/yolks:nodejs_22" }
139
+ });
140
+ }
141
+ export function resolveStartup(rawEgg, input) {
142
+ if (input && input !== "auto")
143
+ return input;
144
+ const attributes = getDataAttributes(rawEgg);
145
+ if (typeof attributes.startup === "string" && attributes.startup.trim())
146
+ return attributes.startup;
147
+ throw new PteroError({
148
+ code: "STARTUP_NOT_FOUND",
149
+ message: "Startup command tidak ditemukan dari egg.",
150
+ hint: "Isi startup manual atau atur Startup Command pada egg.",
151
+ example: { startup: "npm start" }
152
+ });
153
+ }
154
+ export function buildServerPayload(input, resolved) {
155
+ const name = ensureNonEmptyString(input.name, "name");
156
+ const description = ensureNonEmptyString(input.description, "description");
157
+ ensurePositiveInteger(input.nodeId, "nodeId");
158
+ ensurePositiveInteger(input.nestId, "nestId");
159
+ ensurePositiveInteger(input.eggId, "eggId");
160
+ return {
161
+ name,
162
+ user: resolved.userId,
163
+ description,
164
+ egg: input.eggId,
165
+ docker_image: resolveDockerImage(resolved.rawEgg, input.dockerImage),
166
+ startup: resolveStartup(resolved.rawEgg, input.startup),
167
+ environment: buildEnvironment(resolved.rawEgg, input),
168
+ limits: {
169
+ ...resolved.specs.limits,
170
+ oom_disabled: input.oomDisabled ?? false
171
+ },
172
+ feature_limits: resolved.specs.featureLimits,
173
+ allocation: resolved.allocation,
174
+ start_on_completion: input.startOnCompletion ?? true
175
+ };
176
+ }
177
+ export function validateCreateInput(input, specs) {
178
+ ensureNonEmptyString(input.name, "name");
179
+ ensureNonEmptyString(input.description, "description");
180
+ ensurePositiveInteger(input.nodeId, "nodeId");
181
+ ensurePositiveInteger(input.nestId, "nestId");
182
+ ensurePositiveInteger(input.eggId, "eggId");
183
+ if (!input.userId && !input.email)
184
+ throw new PteroError({ code: "USER_REQUIRED", message: "email atau userId wajib diisi untuk create server." });
185
+ if (!specs)
186
+ throw new PteroError({ code: "SPECS_REQUIRED", message: "specs wajib diisi kecuali memakai preset yang tersedia." });
187
+ return specs;
188
+ }
189
+ export function progress(options, stage, percent, message) {
190
+ emitProgress(options?.onProgress, stage, percent, message);
191
+ }
192
+ //# sourceMappingURL=smart.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"smart.js","sourceRoot":"","sources":["../src/smart.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,162 @@
1
+ export type PteroMode = "full" | "admin" | "client" | "raw" | "invalid";
2
+ export type BooleanLike = boolean | "yes" | "no" | "true" | "false" | "1" | "0";
3
+ export type SizeInput = number | string;
4
+ export type CpuInput = number | string;
5
+ export type ServerPowerSignal = "start" | "stop" | "restart" | "kill";
6
+ export type PteroConfig = {
7
+ domain?: string;
8
+ panelUrl?: string;
9
+ ptla?: string;
10
+ ptlc?: string;
11
+ applicationKey?: string;
12
+ clientKey?: string;
13
+ timeout?: number;
14
+ userAgent?: string;
15
+ safeMode?: boolean;
16
+ debug?: boolean;
17
+ fetcher?: typeof fetch;
18
+ presets?: Record<string, ServerSpecsInput>;
19
+ };
20
+ export type ConnectResult = {
21
+ ok: boolean;
22
+ mode: PteroMode;
23
+ domain: string;
24
+ latency: number;
25
+ application: KeyCheckResult;
26
+ client: KeyCheckResult;
27
+ };
28
+ export type KeyCheckResult = {
29
+ provided: boolean;
30
+ valid: boolean;
31
+ message?: string;
32
+ };
33
+ export type DoctorCheck = {
34
+ name: string;
35
+ ok: boolean;
36
+ message?: string;
37
+ fix?: string;
38
+ };
39
+ export type DoctorReport = {
40
+ ok: boolean;
41
+ mode: PteroMode;
42
+ checks: DoctorCheck[];
43
+ };
44
+ export type ProgressStep = {
45
+ stage: string;
46
+ percent: number;
47
+ message: string;
48
+ };
49
+ export type OperationOptions = {
50
+ dryRun?: boolean;
51
+ raw?: boolean;
52
+ onProgress?: (step: ProgressStep) => void;
53
+ };
54
+ export type CreateUserSmartInput = {
55
+ username: string;
56
+ email: string;
57
+ password: string | "auto";
58
+ administrator: BooleanLike;
59
+ firstName?: string;
60
+ lastName?: string;
61
+ language?: string;
62
+ };
63
+ export type NormalizedUser = {
64
+ id: number;
65
+ username: string;
66
+ email: string;
67
+ firstName?: string;
68
+ lastName?: string;
69
+ administrator?: boolean;
70
+ generatedPassword?: string;
71
+ raw?: unknown;
72
+ };
73
+ export type ServerSpecsInput = {
74
+ memory: SizeInput;
75
+ disk: SizeInput;
76
+ cpu: CpuInput;
77
+ cpuPinning?: string;
78
+ swap?: SizeInput;
79
+ io?: number;
80
+ databases: number;
81
+ allocations: number;
82
+ backups: number;
83
+ };
84
+ export type AllocationStrategy = "top" | "lowest-port" | "highest-port" | "random" | "range";
85
+ export type AllocationInput = "auto" | {
86
+ default?: number | "auto";
87
+ additional?: number[] | "auto";
88
+ strategy?: AllocationStrategy;
89
+ portRange?: [number, number];
90
+ };
91
+ export type CreateSmartServerInput = {
92
+ name: string;
93
+ email?: string;
94
+ userId?: number;
95
+ username?: string;
96
+ password?: string | "auto";
97
+ administrator?: BooleanLike;
98
+ autoCreateUser?: boolean;
99
+ description: string;
100
+ nodeId: number;
101
+ nestId: number;
102
+ eggId: number;
103
+ specs?: ServerSpecsInput;
104
+ preset?: string;
105
+ startup?: string | "auto";
106
+ dockerImage?: string | "auto";
107
+ environment?: Record<string, string | number | boolean> | "auto";
108
+ autoFillEnvironment?: boolean;
109
+ allocation?: AllocationInput;
110
+ startOnCompletion?: boolean;
111
+ oomDisabled?: boolean;
112
+ };
113
+ export type PreviewCreateServer = {
114
+ ok: boolean;
115
+ user: {
116
+ id: number;
117
+ email?: string;
118
+ username?: string;
119
+ created?: boolean;
120
+ };
121
+ node: {
122
+ id: number;
123
+ name?: string;
124
+ raw?: unknown;
125
+ };
126
+ nest: {
127
+ id: number;
128
+ name?: string;
129
+ raw?: unknown;
130
+ };
131
+ egg: {
132
+ id: number;
133
+ name?: string;
134
+ raw?: unknown;
135
+ };
136
+ dockerImage: string;
137
+ startup: string;
138
+ environment: Record<string, string>;
139
+ allocation: {
140
+ default: number;
141
+ additional: number[];
142
+ };
143
+ limits: Record<string, unknown>;
144
+ featureLimits: Record<string, number>;
145
+ payload: Record<string, unknown>;
146
+ };
147
+ export type NormalizedServer = {
148
+ id?: number;
149
+ identifier?: string;
150
+ uuid?: string;
151
+ name?: string;
152
+ raw?: unknown;
153
+ };
154
+ export type PteroRequestOptions = {
155
+ api: "application" | "client";
156
+ method?: string;
157
+ path: string;
158
+ body?: unknown;
159
+ contentType?: "json" | "text";
160
+ responseType?: "json" | "text";
161
+ };
162
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,21 @@
1
+ import { BooleanLike, CpuInput, SizeInput } from "./types.js";
2
+ export declare function normalizeDomain(input: string): string;
3
+ export declare function maskSecret(value?: string): string;
4
+ export declare function toBoolean(value: BooleanLike): boolean;
5
+ export declare function parseSizeToMiB(value: SizeInput): number;
6
+ export declare function parseCpu(value: CpuInput): number;
7
+ export declare function formatMiB(value: number): string;
8
+ export declare function generatePassword(length?: number): string;
9
+ export declare function ensureNonEmptyString(value: unknown, field: string): string;
10
+ export declare function ensurePositiveInteger(value: unknown, field: string): number;
11
+ export declare function ensureNonNegativeInteger(value: unknown, field: string): number;
12
+ export declare function asObject(value: unknown): Record<string, unknown>;
13
+ export declare function getDataAttributes(value: unknown): Record<string, unknown>;
14
+ export declare function getCollection(value: unknown): Record<string, unknown>[];
15
+ export declare function trimNumber(value: number): string;
16
+ export declare function emitProgress(onProgress: ((step: {
17
+ stage: string;
18
+ percent: number;
19
+ message: string;
20
+ }) => void) | undefined, stage: string, percent: number, message: string): void;
21
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE9D,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIrD;AAED,wBAAgB,UAAU,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAIjD;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAIrD;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,CASvD;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM,CAMhD;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAG/C;AAED,wBAAgB,gBAAgB,CAAC,MAAM,SAAK,GAAG,MAAM,CAIpD;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAG1E;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAG3E;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAG9E;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEhE;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAMzE;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAIvE;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED,wBAAgB,YAAY,CAAC,UAAU,EAAE,CAAC,CAAC,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,KAAK,IAAI,CAAC,GAAG,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAEjL"}
package/dist/utils.js ADDED
@@ -0,0 +1,88 @@
1
+ import { randomBytes } from "node:crypto";
2
+ export function normalizeDomain(input) {
3
+ const trimmed = input.trim();
4
+ const withProtocol = /^https?:\/\//i.test(trimmed) ? trimmed : `https://${trimmed}`;
5
+ return withProtocol.replace(/\/+$/, "");
6
+ }
7
+ export function maskSecret(value) {
8
+ if (!value)
9
+ return "";
10
+ if (value.length <= 10)
11
+ return "********";
12
+ return `${value.slice(0, 5)}********${value.slice(-4)}`;
13
+ }
14
+ export function toBoolean(value) {
15
+ if (typeof value === "boolean")
16
+ return value;
17
+ const normalized = value.toLowerCase();
18
+ return normalized === "yes" || normalized === "true" || normalized === "1";
19
+ }
20
+ export function parseSizeToMiB(value) {
21
+ if (typeof value === "number")
22
+ return ensureNonNegativeInteger(value, "size");
23
+ const normalized = value.trim().toLowerCase();
24
+ const match = normalized.match(/^(\d+(?:\.\d+)?)(mib|mb|gib|gb)?$/);
25
+ if (!match)
26
+ throw new Error(`Ukuran tidak valid: ${value}`);
27
+ const amount = Number(match[1]);
28
+ const unit = match[2] ?? "mib";
29
+ const mib = unit === "gb" || unit === "gib" ? amount * 1024 : amount;
30
+ return ensureNonNegativeInteger(Math.round(mib), "size");
31
+ }
32
+ export function parseCpu(value) {
33
+ if (typeof value === "number")
34
+ return ensureNonNegativeInteger(value, "cpu");
35
+ const normalized = value.trim().replace(/%$/, "");
36
+ const parsed = Number(normalized);
37
+ if (!Number.isFinite(parsed))
38
+ throw new Error(`CPU tidak valid: ${value}`);
39
+ return ensureNonNegativeInteger(Math.round(parsed), "cpu");
40
+ }
41
+ export function formatMiB(value) {
42
+ if (value >= 1024)
43
+ return `${trimNumber(value / 1024)} GB`;
44
+ return `${trimNumber(value)} MB`;
45
+ }
46
+ export function generatePassword(length = 18) {
47
+ const chars = "ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz23456789!@$%";
48
+ const bytes = randomBytes(length);
49
+ return Array.from(bytes, byte => chars[byte % chars.length]).join("");
50
+ }
51
+ export function ensureNonEmptyString(value, field) {
52
+ if (typeof value !== "string" || value.trim() === "")
53
+ throw new Error(`${field} wajib diisi.`);
54
+ return value.trim();
55
+ }
56
+ export function ensurePositiveInteger(value, field) {
57
+ if (typeof value !== "number" || !Number.isInteger(value) || value <= 0)
58
+ throw new Error(`${field} wajib berupa angka lebih dari 0.`);
59
+ return value;
60
+ }
61
+ export function ensureNonNegativeInteger(value, field) {
62
+ if (typeof value !== "number" || !Number.isInteger(value) || value < 0)
63
+ throw new Error(`${field} wajib berupa angka minimal 0.`);
64
+ return value;
65
+ }
66
+ export function asObject(value) {
67
+ return typeof value === "object" && value !== null ? value : {};
68
+ }
69
+ export function getDataAttributes(value) {
70
+ const root = asObject(value);
71
+ const data = asObject(root.data);
72
+ const dataAttributes = asObject(data.attributes);
73
+ if (Object.keys(dataAttributes).length > 0)
74
+ return dataAttributes;
75
+ return asObject(root.attributes);
76
+ }
77
+ export function getCollection(value) {
78
+ const root = asObject(value);
79
+ const data = Array.isArray(root.data) ? root.data : [];
80
+ return data.map(item => asObject(item));
81
+ }
82
+ export function trimNumber(value) {
83
+ return Number.isInteger(value) ? String(value) : value.toFixed(2).replace(/\.00$/, "").replace(/0$/, "");
84
+ }
85
+ export function emitProgress(onProgress, stage, percent, message) {
86
+ onProgress?.({ stage, percent, message });
87
+ }
88
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,55 @@
1
+ {
2
+ "name": "@akaanakbaik/pterodactyl-gateway",
3
+ "version": "0.3.0",
4
+ "description": "SDK, CLI, dan smart gateway TypeScript untuk Pterodactyl Panel.",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "bin": {
9
+ "ptero-gateway": "dist/cli.js",
10
+ "ptg": "dist/cli.js"
11
+ },
12
+ "exports": {
13
+ ".": {
14
+ "types": "./dist/index.d.ts",
15
+ "import": "./dist/index.js"
16
+ }
17
+ },
18
+ "files": [
19
+ "dist",
20
+ "README.md",
21
+ "BLUEPRINT.md",
22
+ "add-promt.md",
23
+ "LICENSE"
24
+ ],
25
+ "scripts": {
26
+ "clean": "node -e \"require('fs').rmSync('dist',{recursive:true,force:true})\"",
27
+ "build": "npm run clean && tsc -p tsconfig.json && npm run chmod:bin",
28
+ "chmod:bin": "node -e \"require('fs').chmodSync('dist/cli.js', 0o755)\"",
29
+ "typecheck": "tsc -p tsconfig.json --noEmit",
30
+ "test": "npm run build && node --test test/*.test.js",
31
+ "test:cli": "npm run build && node dist/cli.js help && ./dist/cli.js help",
32
+ "test:pack": "npm run build && npm pack --dry-run",
33
+ "cli": "node dist/cli.js",
34
+ "verify": "npm run typecheck && npm test && npm run test:cli && npm run test:pack",
35
+ "prepublishOnly": "npm run verify"
36
+ },
37
+ "keywords": [
38
+ "pterodactyl",
39
+ "pterodactyl-panel",
40
+ "pterodactyl-api",
41
+ "pterodactyl-sdk",
42
+ "pterodactyl-gateway",
43
+ "server-control",
44
+ "typescript"
45
+ ],
46
+ "author": "akaanakbaik",
47
+ "license": "MIT",
48
+ "engines": {
49
+ "node": ">=18"
50
+ },
51
+ "devDependencies": {
52
+ "@types/node": "^20.11.30",
53
+ "typescript": "^5.4.5"
54
+ }
55
+ }