virtualizorjs 2.1.1 → 2.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -21
- package/README.md +3 -0
- package/dist/index.d.mts +22 -9
- package/dist/index.d.ts +22 -9
- package/dist/index.js +28 -0
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +28 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +22 -22
package/LICENSE
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
MIT License
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2024 kkMihai
|
|
4
|
-
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
-
in the Software without restriction, including without limitation the rights
|
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
-
furnished to do so, subject to the following conditions:
|
|
11
|
-
|
|
12
|
-
The above copyright notice and this permission notice shall be included in all
|
|
13
|
-
copies or substantial portions of the Software.
|
|
14
|
-
|
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
-
SOFTWARE.
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2024 kkMihai
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -6,6 +6,9 @@
|
|
|
6
6
|
|
|
7
7
|
A **TypeScript-first** SDK for the [Virtualizor](https://www.virtualizor.com/) server management API. Manage VPS instances, users, and plans with a clean, namespaced interface and zero production dependencies.
|
|
8
8
|
|
|
9
|
+
> [!IMPORTANT]
|
|
10
|
+
> Since the Virtualizor API documentation is a mess (at least for me), I need help from YOU to report bugs, missing features or just to tell me that something is not clear. You can do that by opening an issue or a pull request.
|
|
11
|
+
|
|
9
12
|
## Installation
|
|
10
13
|
|
|
11
14
|
**npm:**
|
package/dist/index.d.mts
CHANGED
|
@@ -307,9 +307,7 @@ interface CreateVPSParams {
|
|
|
307
307
|
[key: string]: unknown;
|
|
308
308
|
}
|
|
309
309
|
interface RebuildVPSParams {
|
|
310
|
-
/** OS template ID to rebuild with */
|
|
311
310
|
osid: number;
|
|
312
|
-
/** New root password for the VPS */
|
|
313
311
|
newpass: string;
|
|
314
312
|
/** Must be set to 1 to confirm the rebuild */
|
|
315
313
|
conf: 1;
|
|
@@ -317,19 +315,13 @@ interface RebuildVPSParams {
|
|
|
317
315
|
format_primary?: 0 | 1;
|
|
318
316
|
/** Send rebuild notification email (0 = no, 1 = yes) */
|
|
319
317
|
eu_send_rebuild_email?: 0 | 1;
|
|
320
|
-
/** Recipe ID to apply post-rebuild */
|
|
321
318
|
recipe?: number;
|
|
322
|
-
/** SSH key to inject */
|
|
323
319
|
sshkey?: string;
|
|
324
320
|
}
|
|
325
321
|
interface CloneVPSParams {
|
|
326
|
-
/** Hostname for the new cloned VPS */
|
|
327
322
|
hostname: string;
|
|
328
|
-
/** Root password for the new cloned VPS */
|
|
329
323
|
rootpass: string;
|
|
330
|
-
/** Source server ID (server where the VPS lives) */
|
|
331
324
|
from_server: number;
|
|
332
|
-
/** Destination server ID (server to clone into) */
|
|
333
325
|
to_server: number;
|
|
334
326
|
}
|
|
335
327
|
interface MigrateVPSParams {
|
|
@@ -386,4 +378,25 @@ declare class VirtualizorClient {
|
|
|
386
378
|
}
|
|
387
379
|
declare function createVirtualizorClient(config: VirtualizorConfig): VirtualizorClient;
|
|
388
380
|
|
|
389
|
-
|
|
381
|
+
type IpsInput = string[] | Record<string, string> | string | undefined | null;
|
|
382
|
+
type FormatIpsOptions = {
|
|
383
|
+
/**
|
|
384
|
+
* Choose the return type. Defaults to 'array'.
|
|
385
|
+
* - 'array' returns string[]
|
|
386
|
+
* - 'string' returns a joined string using `separator`
|
|
387
|
+
*/
|
|
388
|
+
as?: 'array' | 'string';
|
|
389
|
+
/** Separator used when returning a string. Defaults to ', '. */
|
|
390
|
+
separator?: string;
|
|
391
|
+
};
|
|
392
|
+
/**
|
|
393
|
+
* formatIps
|
|
394
|
+
* - Default behavior: return an array of IP strings (string[])
|
|
395
|
+
* - If options.as === 'string' it returns a joined string using options.separator
|
|
396
|
+
*/
|
|
397
|
+
declare function formatIps(ips: IpsInput): string[];
|
|
398
|
+
declare function formatIps(ips: IpsInput, options: FormatIpsOptions & {
|
|
399
|
+
as: 'string';
|
|
400
|
+
}): string;
|
|
401
|
+
|
|
402
|
+
export { type AsyncTaskResult, type CloneVPSParams, type CreatePlanParams, type CreateUserParams, type CreateVPSParams, type IpsInput, type ListVPSParams, type MigrateVPSParams, type Plan, type RebuildVPSParams, type Task, type User, type VPS, type VirtType, VirtualizorApiError, VirtualizorClient, type VirtualizorConfig, createVirtualizorClient, formatIps };
|
package/dist/index.d.ts
CHANGED
|
@@ -307,9 +307,7 @@ interface CreateVPSParams {
|
|
|
307
307
|
[key: string]: unknown;
|
|
308
308
|
}
|
|
309
309
|
interface RebuildVPSParams {
|
|
310
|
-
/** OS template ID to rebuild with */
|
|
311
310
|
osid: number;
|
|
312
|
-
/** New root password for the VPS */
|
|
313
311
|
newpass: string;
|
|
314
312
|
/** Must be set to 1 to confirm the rebuild */
|
|
315
313
|
conf: 1;
|
|
@@ -317,19 +315,13 @@ interface RebuildVPSParams {
|
|
|
317
315
|
format_primary?: 0 | 1;
|
|
318
316
|
/** Send rebuild notification email (0 = no, 1 = yes) */
|
|
319
317
|
eu_send_rebuild_email?: 0 | 1;
|
|
320
|
-
/** Recipe ID to apply post-rebuild */
|
|
321
318
|
recipe?: number;
|
|
322
|
-
/** SSH key to inject */
|
|
323
319
|
sshkey?: string;
|
|
324
320
|
}
|
|
325
321
|
interface CloneVPSParams {
|
|
326
|
-
/** Hostname for the new cloned VPS */
|
|
327
322
|
hostname: string;
|
|
328
|
-
/** Root password for the new cloned VPS */
|
|
329
323
|
rootpass: string;
|
|
330
|
-
/** Source server ID (server where the VPS lives) */
|
|
331
324
|
from_server: number;
|
|
332
|
-
/** Destination server ID (server to clone into) */
|
|
333
325
|
to_server: number;
|
|
334
326
|
}
|
|
335
327
|
interface MigrateVPSParams {
|
|
@@ -386,4 +378,25 @@ declare class VirtualizorClient {
|
|
|
386
378
|
}
|
|
387
379
|
declare function createVirtualizorClient(config: VirtualizorConfig): VirtualizorClient;
|
|
388
380
|
|
|
389
|
-
|
|
381
|
+
type IpsInput = string[] | Record<string, string> | string | undefined | null;
|
|
382
|
+
type FormatIpsOptions = {
|
|
383
|
+
/**
|
|
384
|
+
* Choose the return type. Defaults to 'array'.
|
|
385
|
+
* - 'array' returns string[]
|
|
386
|
+
* - 'string' returns a joined string using `separator`
|
|
387
|
+
*/
|
|
388
|
+
as?: 'array' | 'string';
|
|
389
|
+
/** Separator used when returning a string. Defaults to ', '. */
|
|
390
|
+
separator?: string;
|
|
391
|
+
};
|
|
392
|
+
/**
|
|
393
|
+
* formatIps
|
|
394
|
+
* - Default behavior: return an array of IP strings (string[])
|
|
395
|
+
* - If options.as === 'string' it returns a joined string using options.separator
|
|
396
|
+
*/
|
|
397
|
+
declare function formatIps(ips: IpsInput): string[];
|
|
398
|
+
declare function formatIps(ips: IpsInput, options: FormatIpsOptions & {
|
|
399
|
+
as: 'string';
|
|
400
|
+
}): string;
|
|
401
|
+
|
|
402
|
+
export { type AsyncTaskResult, type CloneVPSParams, type CreatePlanParams, type CreateUserParams, type CreateVPSParams, type IpsInput, type ListVPSParams, type MigrateVPSParams, type Plan, type RebuildVPSParams, type Task, type User, type VPS, type VirtType, VirtualizorApiError, VirtualizorClient, type VirtualizorConfig, createVirtualizorClient, formatIps };
|
package/dist/index.js
CHANGED
|
@@ -311,8 +311,36 @@ function createVirtualizorClient(config) {
|
|
|
311
311
|
return new VirtualizorClient(config);
|
|
312
312
|
}
|
|
313
313
|
|
|
314
|
+
// src/utils/format-ips.ts
|
|
315
|
+
function formatIps(ips, options) {
|
|
316
|
+
const as = options?.as ?? "array";
|
|
317
|
+
const separator = options?.separator ?? ", ";
|
|
318
|
+
if (!ips) {
|
|
319
|
+
return as === "array" ? [] : "";
|
|
320
|
+
}
|
|
321
|
+
let result = [];
|
|
322
|
+
if (Array.isArray(ips)) {
|
|
323
|
+
result = ips.filter(Boolean);
|
|
324
|
+
} else if (typeof ips === "string") {
|
|
325
|
+
const str = ips.trim();
|
|
326
|
+
if (str === "") {
|
|
327
|
+
result = [];
|
|
328
|
+
} else if (str.includes(",")) {
|
|
329
|
+
result = str.split(",").map((s) => s.trim()).filter(Boolean);
|
|
330
|
+
} else if (/\s+/.test(str)) {
|
|
331
|
+
result = str.split(/\s+/).map((s) => s.trim()).filter(Boolean);
|
|
332
|
+
} else {
|
|
333
|
+
result = [str];
|
|
334
|
+
}
|
|
335
|
+
} else if (typeof ips === "object") {
|
|
336
|
+
result = Object.values(ips).filter(Boolean);
|
|
337
|
+
}
|
|
338
|
+
return as === "array" ? result : result.join(separator);
|
|
339
|
+
}
|
|
340
|
+
|
|
314
341
|
exports.VirtualizorApiError = VirtualizorApiError;
|
|
315
342
|
exports.VirtualizorClient = VirtualizorClient;
|
|
316
343
|
exports.createVirtualizorClient = createVirtualizorClient;
|
|
344
|
+
exports.formatIps = formatIps;
|
|
317
345
|
//# sourceMappingURL=index.js.map
|
|
318
346
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/config/defaults.ts","../src/auth.ts","../src/http.ts","../src/resources/plans.ts","../src/resources/tasks.ts","../src/resources/users.ts","../src/constants/vps.ts","../src/resources/vps.ts","../src/client.ts"],"names":["https","http"],"mappings":"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","file":"index.js","sourcesContent":["export const DEFAULT_CONFIG = {\n port: 4085,\n https: true,\n rejectUnauthorized: false,\n timeout: 30000,\n debug: false,\n} as const;\n\nexport const DEFAULT_TASK_POLLING = {\n pollIntervalMs: 2000,\n timeoutMs: 120000,\n} as const;\n","import type { ApiParams } from './types/common.js';\n\nexport function buildQueryString(params: ApiParams, apiKey: string, apiPass: string): string {\n const clean: ApiParams = {};\n for (const [key, value] of Object.entries(params)) {\n if (value !== undefined) {\n clean[key] = value;\n }\n }\n\n const urlParams = new URLSearchParams();\n urlParams.set('api', 'json');\n urlParams.set('adminapikey', apiKey);\n urlParams.set('adminapipass', apiPass);\n\n for (const [key, value] of Object.entries(clean)) {\n urlParams.set(key, String(value));\n }\n\n return `?${urlParams.toString()}`;\n}\n","import http from 'node:http';\nimport https from 'node:https';\nimport { buildQueryString } from './auth.js';\nimport type { ApiParams } from './types/common.js';\nimport type { VirtualizorResponse } from './types/common.js';\nimport type { ResolvedConfig } from './types/config.js';\n\nexport class VirtualizorApiError extends Error {\n readonly code: number;\n\n constructor(message: string, code: number) {\n super(message);\n this.name = 'VirtualizorApiError';\n this.code = code;\n }\n}\n\nexport class HttpClient {\n constructor(private readonly config: ResolvedConfig) {}\n\n parseResponse<T extends VirtualizorResponse>(data: T): T {\n if (data.error && data.error.length > 0) {\n const first = data.error[0];\n if (first) {\n throw new VirtualizorApiError(first.msg, first.code);\n }\n }\n return data;\n }\n\n async request<T extends VirtualizorResponse>(\n act: string,\n queryParams: ApiParams = {},\n bodyParams: ApiParams = {},\n ): Promise<T> {\n const allQueryParams: ApiParams = { act, ...queryParams };\n const qs = buildQueryString(allQueryParams, this.config.apiKey, this.config.apiPass);\n\n const path = `/index.php${qs}`;\n\n const bodyString = Object.entries(bodyParams as Record<string, unknown>)\n .filter(([, v]) => v !== undefined)\n .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(String(v))}`)\n .join('&');\n\n const data = await this.rawRequest(path, bodyString || undefined);\n return this.parseResponse(data as T);\n }\n\n private rawRequest(path: string, body?: string): Promise<VirtualizorResponse> {\n const transport = this.config.https ? https : http;\n const options: https.RequestOptions = {\n host: this.config.host,\n port: this.config.port,\n path,\n method: body ? 'POST' : 'GET',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n ...(body ? { 'Content-Length': Buffer.byteLength(body) } : {}),\n },\n ...(this.config.https\n ? { agent: new https.Agent({ rejectUnauthorized: this.config.rejectUnauthorized }) }\n : {}),\n };\n\n return new Promise((resolve, reject) => {\n const req = transport.request(options, (res) => {\n let raw = '';\n res.on('data', (chunk: Buffer) => {\n raw += chunk.toString();\n });\n res.on('end', () => {\n // Handle redirect (302) - usually means auth failed\n if (res.statusCode === 302 || res.statusCode === 301) {\n reject(\n new Error(\n `Redirect detected (status ${res.statusCode}). Authentication failed. ` +\n `Check your API credentials. Location: ${res.headers.location}`,\n ),\n );\n return;\n }\n\n try {\n resolve(JSON.parse(raw) as VirtualizorResponse);\n } catch (err) {\n if (this.config.debug)\n console.debug('[Virtualizor] Raw response (first 500 chars):', raw.slice(0, 500));\n reject(\n new Error(\n `Failed to parse response: ${raw.slice(0, 200)}. Parse error: ${err instanceof Error ? err.message : String(err)}`,\n ),\n );\n }\n });\n });\n\n req.setTimeout(this.config.timeout, () => {\n req.destroy(new Error(`Request timed out after ${this.config.timeout}ms`));\n });\n\n req.on('error', reject);\n\n if (body) {\n req.write(body);\n }\n\n req.end();\n });\n }\n}\n","import type { HttpClient } from '../http.js';\nimport type { ApiParams } from '../types/common.js';\nimport type { AsyncTaskResult, VirtualizorResponse } from '../types/common.js';\nimport type { CreatePlanParams, Plan } from '../types/plans.js';\n\ninterface ListPlansResponse extends VirtualizorResponse {\n plans: Record<string, Plan>;\n}\nexport class PlansResource {\n constructor(private readonly http: HttpClient) {}\n\n async list(): Promise<Record<string, Plan>> {\n const res = await this.http.request<ListPlansResponse>('plans', {}, {});\n return res.plans;\n }\n\n async create(params: CreatePlanParams): Promise<AsyncTaskResult> {\n return this.http.request<AsyncTaskResult>('addplan', {}, params);\n }\n\n async delete(planId: string): Promise<AsyncTaskResult> {\n return this.http.request<AsyncTaskResult>('plans', {}, { delete: planId });\n }\n}\n","import { DEFAULT_TASK_POLLING } from '../config/defaults.js';\nimport type { HttpClient } from '../http.js';\nimport type { VirtualizorResponse } from '../types/common.js';\nimport type { Task } from '../types/tasks.js';\n\ninterface TasksResponse extends VirtualizorResponse {\n tasks: Record<string, Task>;\n}\n\nexport class TasksResource {\n constructor(private readonly http: HttpClient) {}\n\n async get(taskId: string): Promise<Task | undefined> {\n const res = await this.http.request<TasksResponse>('tasks', { taskid: taskId }, {});\n return res.tasks[taskId];\n }\n\n async wait(\n taskId: string,\n options: { pollIntervalMs?: number; timeoutMs?: number } = {},\n ): Promise<Task> {\n const {\n pollIntervalMs = DEFAULT_TASK_POLLING.pollIntervalMs,\n timeoutMs = DEFAULT_TASK_POLLING.timeoutMs,\n } = options;\n const deadline = Date.now() + timeoutMs;\n\n while (Date.now() < deadline) {\n const task = await this.get(taskId);\n if (!task) throw new Error(`Task ${taskId} not found`);\n if (task.status === '1' || task.status === 'done') return task;\n if (task.status === 'error' || task.status === '-1') {\n throw new Error(`Task ${taskId} failed`);\n }\n await new Promise((r) => setTimeout(r, pollIntervalMs));\n }\n\n throw new Error(`Task ${taskId} timed out after ${timeoutMs}ms`);\n }\n}\n","import type { HttpClient } from '../http.js';\nimport type { ApiParams } from '../types/common.js';\nimport type { AsyncTaskResult, VirtualizorResponse } from '../types/common.js';\nimport type { CreateUserParams, User } from '../types/users.js';\n\ninterface ListUsersResponse extends VirtualizorResponse {\n users: Record<string, User>;\n}\n\nexport class UsersResource {\n constructor(private readonly http: HttpClient) {}\n\n async list(): Promise<Record<string, User>> {\n const res = await this.http.request<ListUsersResponse>('users', {}, {});\n return res.users;\n }\n\n async create(params: CreateUserParams): Promise<AsyncTaskResult> {\n return this.http.request<AsyncTaskResult>('adduser', {}, params);\n }\n\n async delete(uid: string): Promise<AsyncTaskResult> {\n return this.http.request<AsyncTaskResult>('users', {}, { delete: uid });\n }\n\n async suspend(uid: string): Promise<AsyncTaskResult> {\n return this.http.request<AsyncTaskResult>('users', {}, { suspend: uid });\n }\n\n async unsuspend(uid: string): Promise<AsyncTaskResult> {\n return this.http.request<AsyncTaskResult>('users', {}, { unsuspend: uid });\n }\n}\n","// VPS operation constants\nexport const VPS_CONSTANTS = {\n // Rebuild operation requires reos=1 flag\n REBUILD_REOS_FLAG: 1,\n // Migrate operation requires migrate=1 flag\n MIGRATE_FLAG: 1,\n // Migrate operation requires migrate_but=1 flag\n MIGRATE_BUT_FLAG: 1,\n} as const;\n","import { VPS_CONSTANTS } from '../constants/vps.js';\nimport type { HttpClient } from '../http.js';\nimport type { ApiParams } from '../types/common.js';\nimport type { AsyncTaskResult, VirtualizorResponse } from '../types/common.js';\nimport type {\n CloneVPSParams,\n CreateVPSParams,\n ListVPSParams,\n MigrateVPSParams,\n RebuildVPSParams,\n VNCInfo,\n VPS,\n VPSStatsResponse,\n} from '../types/vps.js';\n\ninterface ListVPSResponse extends VirtualizorResponse {\n vs: Record<string, VPS>;\n}\ninterface GetVPSResponse extends VirtualizorResponse {\n vs: Record<string, VPS>;\n}\n\nexport class VpsResource {\n constructor(private readonly http: HttpClient) {}\n\n async list(filters: ListVPSParams = {}): Promise<Record<string, VPS>> {\n const res = await this.http.request<ListVPSResponse>('vs', {}, filters);\n return res.vs ?? {};\n }\n\n async get(vpsId: string): Promise<VPS> {\n const res = await this.http.request<GetVPSResponse>('vs', { vpsid: vpsId }, {});\n const vps = res.vs[vpsId];\n if (!vps) throw new Error(`VPS ${vpsId} not found in response`);\n return vps;\n }\n\n async create(params: CreateVPSParams): Promise<AsyncTaskResult> {\n return this.http.request<AsyncTaskResult>('addvs', {}, params);\n }\n\n async delete(vpsId: string): Promise<AsyncTaskResult> {\n return this.http.request<AsyncTaskResult>('vs', { delete: vpsId }, {});\n }\n\n async start(vpsId: string): Promise<AsyncTaskResult> {\n return this.http.request<AsyncTaskResult>('vs', { vpsid: vpsId, action: 'start' }, {});\n }\n\n async stop(vpsId: string): Promise<AsyncTaskResult> {\n return this.http.request<AsyncTaskResult>('vs', { vpsid: vpsId, action: 'stop' }, {});\n }\n\n async restart(vpsId: string): Promise<AsyncTaskResult> {\n return this.http.request<AsyncTaskResult>('vs', { vpsid: vpsId, action: 'restart' }, {});\n }\n\n async poweroff(vpsId: string): Promise<AsyncTaskResult> {\n return this.http.request<AsyncTaskResult>('vs', { vpsid: vpsId, action: 'poweroff' }, {});\n }\n\n async suspend(vpsId: string): Promise<AsyncTaskResult> {\n return this.http.request<AsyncTaskResult>('vs', { suspend: vpsId }, {});\n }\n\n async unsuspend(vpsId: string): Promise<AsyncTaskResult> {\n return this.http.request<AsyncTaskResult>('vs', { unsuspend: vpsId }, {});\n }\n\n async rebuild(vpsId: string, params: RebuildVPSParams): Promise<AsyncTaskResult> {\n return this.http.request<AsyncTaskResult>(\n 'rebuild',\n {},\n {\n vpsid: vpsId,\n reos: VPS_CONSTANTS.REBUILD_REOS_FLAG,\n ...params,\n },\n );\n }\n\n async clone(vpsId: string, params: CloneVPSParams): Promise<AsyncTaskResult> {\n return this.http.request<AsyncTaskResult>(\n 'clone',\n {},\n {\n vpsid: vpsId,\n ...params,\n },\n );\n }\n\n async migrate(vpsId: string, params: MigrateVPSParams): Promise<AsyncTaskResult> {\n return this.http.request<AsyncTaskResult>(\n 'migrate',\n {},\n {\n vpsid: vpsId,\n migrate: VPS_CONSTANTS.MIGRATE_FLAG,\n migrate_but: VPS_CONSTANTS.MIGRATE_BUT_FLAG,\n ...params,\n },\n );\n }\n\n async status(vpsId: string): Promise<unknown> {\n return this.http.request('vstatus', { vpsid: vpsId }, {});\n }\n\n async vnc(vpsId: string): Promise<VNCInfo> {\n return this.http.request<VNCInfo>('vnc', { vpsid: vpsId }, {});\n }\n\n async stats(vpsId: string): Promise<VPSStatsResponse> {\n return this.http.request<VPSStatsResponse>('vps_stats', {}, { vpsid: vpsId });\n }\n}\n","import { DEFAULT_CONFIG } from './config/defaults.js';\nimport { HttpClient } from './http.js';\nimport { PlansResource } from './resources/plans.js';\nimport { TasksResource } from './resources/tasks.js';\nimport { UsersResource } from './resources/users.js';\nimport { VpsResource } from './resources/vps.js';\nimport type { ResolvedConfig, VirtualizorConfig } from './types/config.js';\n\nexport class VirtualizorClient {\n readonly vps: VpsResource;\n readonly users: UsersResource;\n readonly plans: PlansResource;\n readonly tasks: TasksResource;\n\n constructor(config: VirtualizorConfig) {\n const resolved: ResolvedConfig = {\n host: config.host,\n apiKey: config.apiKey,\n apiPass: config.apiPass ?? '',\n port: config.port ?? DEFAULT_CONFIG.port,\n https: config.https ?? DEFAULT_CONFIG.https,\n rejectUnauthorized: config.rejectUnauthorized ?? DEFAULT_CONFIG.rejectUnauthorized,\n timeout: config.timeout ?? DEFAULT_CONFIG.timeout,\n debug: config.debug ?? DEFAULT_CONFIG.debug,\n };\n const http = new HttpClient(resolved);\n this.vps = new VpsResource(http);\n this.users = new UsersResource(http);\n this.plans = new PlansResource(http);\n this.tasks = new TasksResource(http);\n }\n}\n\nexport function createVirtualizorClient(config: VirtualizorConfig): VirtualizorClient {\n return new VirtualizorClient(config);\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/config/defaults.ts","../src/auth.ts","../src/http.ts","../src/resources/plans.ts","../src/resources/tasks.ts","../src/resources/users.ts","../src/constants/vps.ts","../src/resources/vps.ts","../src/client.ts","../src/utils/format-ips.ts"],"names":["https","http"],"mappings":"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","file":"index.js","sourcesContent":["export const DEFAULT_CONFIG = {\n port: 4085,\n https: true,\n rejectUnauthorized: false,\n timeout: 30000,\n debug: false,\n} as const;\n\nexport const DEFAULT_TASK_POLLING = {\n pollIntervalMs: 2000,\n timeoutMs: 120000,\n} as const;\n","import type { ApiParams } from './types/common.js';\n\nexport function buildQueryString(params: ApiParams, apiKey: string, apiPass: string): string {\n const clean: ApiParams = {};\n for (const [key, value] of Object.entries(params)) {\n if (value !== undefined) {\n clean[key] = value;\n }\n }\n\n const urlParams = new URLSearchParams();\n urlParams.set('api', 'json');\n urlParams.set('adminapikey', apiKey);\n urlParams.set('adminapipass', apiPass);\n\n for (const [key, value] of Object.entries(clean)) {\n urlParams.set(key, String(value));\n }\n\n return `?${urlParams.toString()}`;\n}\n","import http from 'node:http';\nimport https from 'node:https';\nimport { buildQueryString } from './auth.js';\nimport type { ApiParams } from './types/common.js';\nimport type { VirtualizorResponse } from './types/common.js';\nimport type { ResolvedConfig } from './types/config.js';\n\nexport class VirtualizorApiError extends Error {\n readonly code: number;\n\n constructor(message: string, code: number) {\n super(message);\n this.name = 'VirtualizorApiError';\n this.code = code;\n }\n}\n\nexport class HttpClient {\n constructor(private readonly config: ResolvedConfig) {}\n\n parseResponse<T extends VirtualizorResponse>(data: T): T {\n if (data.error && data.error.length > 0) {\n const first = data.error[0];\n if (first) {\n throw new VirtualizorApiError(first.msg, first.code);\n }\n }\n return data;\n }\n\n async request<T extends VirtualizorResponse>(\n act: string,\n queryParams: ApiParams = {},\n bodyParams: ApiParams = {},\n ): Promise<T> {\n const allQueryParams: ApiParams = { act, ...queryParams };\n const qs = buildQueryString(allQueryParams, this.config.apiKey, this.config.apiPass);\n\n const path = `/index.php${qs}`;\n\n const bodyString = Object.entries(bodyParams as Record<string, unknown>)\n .filter(([, v]) => v !== undefined)\n .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(String(v))}`)\n .join('&');\n\n const data = await this.rawRequest(path, bodyString || undefined);\n return this.parseResponse(data as T);\n }\n\n private rawRequest(path: string, body?: string): Promise<VirtualizorResponse> {\n const transport = this.config.https ? https : http;\n const options: https.RequestOptions = {\n host: this.config.host,\n port: this.config.port,\n path,\n method: body ? 'POST' : 'GET',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n ...(body ? { 'Content-Length': Buffer.byteLength(body) } : {}),\n },\n ...(this.config.https\n ? { agent: new https.Agent({ rejectUnauthorized: this.config.rejectUnauthorized }) }\n : {}),\n };\n\n return new Promise((resolve, reject) => {\n const req = transport.request(options, (res) => {\n let raw = '';\n res.on('data', (chunk: Buffer) => {\n raw += chunk.toString();\n });\n res.on('end', () => {\n // Handle redirect (302) - usually means auth failed\n if (res.statusCode === 302 || res.statusCode === 301) {\n reject(\n new Error(\n `Redirect detected (status ${res.statusCode}). Authentication failed. ` +\n `Check your API credentials. Location: ${res.headers.location}`,\n ),\n );\n return;\n }\n\n try {\n resolve(JSON.parse(raw) as VirtualizorResponse);\n } catch (err) {\n if (this.config.debug)\n console.debug('[Virtualizor] Raw response (first 500 chars):', raw.slice(0, 500));\n reject(\n new Error(\n `Failed to parse response: ${raw.slice(0, 200)}. Parse error: ${err instanceof Error ? err.message : String(err)}`,\n ),\n );\n }\n });\n });\n\n req.setTimeout(this.config.timeout, () => {\n req.destroy(new Error(`Request timed out after ${this.config.timeout}ms`));\n });\n\n req.on('error', reject);\n\n if (body) {\n req.write(body);\n }\n\n req.end();\n });\n }\n}\n","import type { HttpClient } from '../http.js';\nimport type { ApiParams } from '../types/common.js';\nimport type { AsyncTaskResult, VirtualizorResponse } from '../types/common.js';\nimport type { CreatePlanParams, Plan } from '../types/plans.js';\n\ninterface ListPlansResponse extends VirtualizorResponse {\n plans: Record<string, Plan>;\n}\nexport class PlansResource {\n constructor(private readonly http: HttpClient) {}\n\n async list(): Promise<Record<string, Plan>> {\n const res = await this.http.request<ListPlansResponse>('plans', {}, {});\n return res.plans;\n }\n\n async create(params: CreatePlanParams): Promise<AsyncTaskResult> {\n return this.http.request<AsyncTaskResult>('addplan', {}, params);\n }\n\n async delete(planId: string): Promise<AsyncTaskResult> {\n return this.http.request<AsyncTaskResult>('plans', {}, { delete: planId });\n }\n}\n","import { DEFAULT_TASK_POLLING } from '../config/defaults.js';\nimport type { HttpClient } from '../http.js';\nimport type { VirtualizorResponse } from '../types/common.js';\nimport type { Task } from '../types/tasks.js';\n\ninterface TasksResponse extends VirtualizorResponse {\n tasks: Record<string, Task>;\n}\n\nexport class TasksResource {\n constructor(private readonly http: HttpClient) {}\n\n async get(taskId: string): Promise<Task | undefined> {\n const res = await this.http.request<TasksResponse>('tasks', { taskid: taskId }, {});\n return res.tasks[taskId];\n }\n\n async wait(\n taskId: string,\n options: { pollIntervalMs?: number; timeoutMs?: number } = {},\n ): Promise<Task> {\n const {\n pollIntervalMs = DEFAULT_TASK_POLLING.pollIntervalMs,\n timeoutMs = DEFAULT_TASK_POLLING.timeoutMs,\n } = options;\n const deadline = Date.now() + timeoutMs;\n\n while (Date.now() < deadline) {\n const task = await this.get(taskId);\n if (!task) throw new Error(`Task ${taskId} not found`);\n if (task.status === '1' || task.status === 'done') return task;\n if (task.status === 'error' || task.status === '-1') {\n throw new Error(`Task ${taskId} failed`);\n }\n await new Promise((r) => setTimeout(r, pollIntervalMs));\n }\n\n throw new Error(`Task ${taskId} timed out after ${timeoutMs}ms`);\n }\n}\n","import type { HttpClient } from '../http.js';\nimport type { ApiParams } from '../types/common.js';\nimport type { AsyncTaskResult, VirtualizorResponse } from '../types/common.js';\nimport type { CreateUserParams, User } from '../types/users.js';\n\ninterface ListUsersResponse extends VirtualizorResponse {\n users: Record<string, User>;\n}\n\nexport class UsersResource {\n constructor(private readonly http: HttpClient) {}\n\n async list(): Promise<Record<string, User>> {\n const res = await this.http.request<ListUsersResponse>('users', {}, {});\n return res.users;\n }\n\n async create(params: CreateUserParams): Promise<AsyncTaskResult> {\n return this.http.request<AsyncTaskResult>('adduser', {}, params);\n }\n\n async delete(uid: string): Promise<AsyncTaskResult> {\n return this.http.request<AsyncTaskResult>('users', {}, { delete: uid });\n }\n\n async suspend(uid: string): Promise<AsyncTaskResult> {\n return this.http.request<AsyncTaskResult>('users', {}, { suspend: uid });\n }\n\n async unsuspend(uid: string): Promise<AsyncTaskResult> {\n return this.http.request<AsyncTaskResult>('users', {}, { unsuspend: uid });\n }\n}\n","// VPS operation constants\nexport const VPS_CONSTANTS = {\n // Rebuild operation requires reos=1 flag\n REBUILD_REOS_FLAG: 1,\n // Migrate operation requires migrate=1 flag\n MIGRATE_FLAG: 1,\n // Migrate operation requires migrate_but=1 flag\n MIGRATE_BUT_FLAG: 1,\n} as const;\n","import { VPS_CONSTANTS } from '../constants/vps.js';\nimport type { HttpClient } from '../http.js';\nimport type { ApiParams } from '../types/common.js';\nimport type { AsyncTaskResult, VirtualizorResponse } from '../types/common.js';\nimport type {\n CloneVPSParams,\n CreateVPSParams,\n ListVPSParams,\n MigrateVPSParams,\n RebuildVPSParams,\n VNCInfo,\n VPS,\n VPSStatsResponse,\n} from '../types/vps.js';\n\ninterface ListVPSResponse extends VirtualizorResponse {\n vs: Record<string, VPS>;\n}\ninterface GetVPSResponse extends VirtualizorResponse {\n vs: Record<string, VPS>;\n}\n\nexport class VpsResource {\n constructor(private readonly http: HttpClient) {}\n\n async list(filters: ListVPSParams = {}): Promise<Record<string, VPS>> {\n const res = await this.http.request<ListVPSResponse>('vs', {}, filters);\n return res.vs ?? {};\n }\n\n async get(vpsId: string): Promise<VPS> {\n const res = await this.http.request<GetVPSResponse>('vs', { vpsid: vpsId }, {});\n const vps = res.vs[vpsId];\n if (!vps) throw new Error(`VPS ${vpsId} not found in response`);\n return vps;\n }\n\n async create(params: CreateVPSParams): Promise<AsyncTaskResult> {\n return this.http.request<AsyncTaskResult>('addvs', {}, params);\n }\n\n async delete(vpsId: string): Promise<AsyncTaskResult> {\n return this.http.request<AsyncTaskResult>('vs', { delete: vpsId }, {});\n }\n\n async start(vpsId: string): Promise<AsyncTaskResult> {\n return this.http.request<AsyncTaskResult>('vs', { vpsid: vpsId, action: 'start' }, {});\n }\n\n async stop(vpsId: string): Promise<AsyncTaskResult> {\n return this.http.request<AsyncTaskResult>('vs', { vpsid: vpsId, action: 'stop' }, {});\n }\n\n async restart(vpsId: string): Promise<AsyncTaskResult> {\n return this.http.request<AsyncTaskResult>('vs', { vpsid: vpsId, action: 'restart' }, {});\n }\n\n async poweroff(vpsId: string): Promise<AsyncTaskResult> {\n return this.http.request<AsyncTaskResult>('vs', { vpsid: vpsId, action: 'poweroff' }, {});\n }\n\n async suspend(vpsId: string): Promise<AsyncTaskResult> {\n return this.http.request<AsyncTaskResult>('vs', { suspend: vpsId }, {});\n }\n\n async unsuspend(vpsId: string): Promise<AsyncTaskResult> {\n return this.http.request<AsyncTaskResult>('vs', { unsuspend: vpsId }, {});\n }\n\n async rebuild(vpsId: string, params: RebuildVPSParams): Promise<AsyncTaskResult> {\n return this.http.request<AsyncTaskResult>(\n 'rebuild',\n {},\n {\n vpsid: vpsId,\n reos: VPS_CONSTANTS.REBUILD_REOS_FLAG,\n ...params,\n },\n );\n }\n\n async clone(vpsId: string, params: CloneVPSParams): Promise<AsyncTaskResult> {\n return this.http.request<AsyncTaskResult>(\n 'clone',\n {},\n {\n vpsid: vpsId,\n ...params,\n },\n );\n }\n\n async migrate(vpsId: string, params: MigrateVPSParams): Promise<AsyncTaskResult> {\n return this.http.request<AsyncTaskResult>(\n 'migrate',\n {},\n {\n vpsid: vpsId,\n migrate: VPS_CONSTANTS.MIGRATE_FLAG,\n migrate_but: VPS_CONSTANTS.MIGRATE_BUT_FLAG,\n ...params,\n },\n );\n }\n\n async status(vpsId: string): Promise<unknown> {\n return this.http.request('vstatus', { vpsid: vpsId }, {});\n }\n\n async vnc(vpsId: string): Promise<VNCInfo> {\n return this.http.request<VNCInfo>('vnc', { vpsid: vpsId }, {});\n }\n\n async stats(vpsId: string): Promise<VPSStatsResponse> {\n return this.http.request<VPSStatsResponse>('vps_stats', {}, { vpsid: vpsId });\n }\n}\n","import { DEFAULT_CONFIG } from './config/defaults.js';\nimport { HttpClient } from './http.js';\nimport { PlansResource } from './resources/plans.js';\nimport { TasksResource } from './resources/tasks.js';\nimport { UsersResource } from './resources/users.js';\nimport { VpsResource } from './resources/vps.js';\nimport type { ResolvedConfig, VirtualizorConfig } from './types/config.js';\n\nexport class VirtualizorClient {\n readonly vps: VpsResource;\n readonly users: UsersResource;\n readonly plans: PlansResource;\n readonly tasks: TasksResource;\n\n constructor(config: VirtualizorConfig) {\n const resolved: ResolvedConfig = {\n host: config.host,\n apiKey: config.apiKey,\n apiPass: config.apiPass ?? '',\n port: config.port ?? DEFAULT_CONFIG.port,\n https: config.https ?? DEFAULT_CONFIG.https,\n rejectUnauthorized: config.rejectUnauthorized ?? DEFAULT_CONFIG.rejectUnauthorized,\n timeout: config.timeout ?? DEFAULT_CONFIG.timeout,\n debug: config.debug ?? DEFAULT_CONFIG.debug,\n };\n const http = new HttpClient(resolved);\n this.vps = new VpsResource(http);\n this.users = new UsersResource(http);\n this.plans = new PlansResource(http);\n this.tasks = new TasksResource(http);\n }\n}\n\nexport function createVirtualizorClient(config: VirtualizorConfig): VirtualizorClient {\n return new VirtualizorClient(config);\n}\n","export type IpsInput = string[] | Record<string, string> | string | undefined | null;\n\nexport type FormatIpsOptions = {\n /**\n * Choose the return type. Defaults to 'array'.\n * - 'array' returns string[]\n * - 'string' returns a joined string using `separator`\n */\n as?: 'array' | 'string';\n /** Separator used when returning a string. Defaults to ', '. */\n separator?: string;\n};\n\n/**\n * formatIps\n * - Default behavior: return an array of IP strings (string[])\n * - If options.as === 'string' it returns a joined string using options.separator\n */\nexport function formatIps(ips: IpsInput): string[];\nexport function formatIps(ips: IpsInput, options: FormatIpsOptions & { as: 'string' }): string;\nexport function formatIps(ips: IpsInput, options?: FormatIpsOptions): string | string[] {\n const as = options?.as ?? 'array';\n const separator = options?.separator ?? ', ';\n\n if (!ips) {\n return as === 'array' ? [] : '';\n }\n\n let result: string[] = [];\n\n if (Array.isArray(ips)) {\n result = ips.filter(Boolean);\n } else if (typeof ips === 'string') {\n const str = ips.trim();\n if (str === '') {\n result = [];\n } else if (str.includes(',')) {\n result = str.split(',').map(s => s.trim()).filter(Boolean);\n } else if (/\\s+/.test(str)) {\n result = str.split(/\\s+/).map(s => s.trim()).filter(Boolean);\n } else {\n result = [str];\n }\n } else if (typeof ips === 'object') {\n result = Object.values(ips).filter(Boolean);\n }\n\n return as === 'array' ? result : result.join(separator);\n}\n"]}
|
package/dist/index.mjs
CHANGED
|
@@ -304,6 +304,33 @@ function createVirtualizorClient(config) {
|
|
|
304
304
|
return new VirtualizorClient(config);
|
|
305
305
|
}
|
|
306
306
|
|
|
307
|
-
|
|
307
|
+
// src/utils/format-ips.ts
|
|
308
|
+
function formatIps(ips, options) {
|
|
309
|
+
const as = options?.as ?? "array";
|
|
310
|
+
const separator = options?.separator ?? ", ";
|
|
311
|
+
if (!ips) {
|
|
312
|
+
return as === "array" ? [] : "";
|
|
313
|
+
}
|
|
314
|
+
let result = [];
|
|
315
|
+
if (Array.isArray(ips)) {
|
|
316
|
+
result = ips.filter(Boolean);
|
|
317
|
+
} else if (typeof ips === "string") {
|
|
318
|
+
const str = ips.trim();
|
|
319
|
+
if (str === "") {
|
|
320
|
+
result = [];
|
|
321
|
+
} else if (str.includes(",")) {
|
|
322
|
+
result = str.split(",").map((s) => s.trim()).filter(Boolean);
|
|
323
|
+
} else if (/\s+/.test(str)) {
|
|
324
|
+
result = str.split(/\s+/).map((s) => s.trim()).filter(Boolean);
|
|
325
|
+
} else {
|
|
326
|
+
result = [str];
|
|
327
|
+
}
|
|
328
|
+
} else if (typeof ips === "object") {
|
|
329
|
+
result = Object.values(ips).filter(Boolean);
|
|
330
|
+
}
|
|
331
|
+
return as === "array" ? result : result.join(separator);
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
export { VirtualizorApiError, VirtualizorClient, createVirtualizorClient, formatIps };
|
|
308
335
|
//# sourceMappingURL=index.mjs.map
|
|
309
336
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/config/defaults.ts","../src/auth.ts","../src/http.ts","../src/resources/plans.ts","../src/resources/tasks.ts","../src/resources/users.ts","../src/constants/vps.ts","../src/resources/vps.ts","../src/client.ts"],"names":["http"],"mappings":"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","file":"index.mjs","sourcesContent":["export const DEFAULT_CONFIG = {\n port: 4085,\n https: true,\n rejectUnauthorized: false,\n timeout: 30000,\n debug: false,\n} as const;\n\nexport const DEFAULT_TASK_POLLING = {\n pollIntervalMs: 2000,\n timeoutMs: 120000,\n} as const;\n","import type { ApiParams } from './types/common.js';\n\nexport function buildQueryString(params: ApiParams, apiKey: string, apiPass: string): string {\n const clean: ApiParams = {};\n for (const [key, value] of Object.entries(params)) {\n if (value !== undefined) {\n clean[key] = value;\n }\n }\n\n const urlParams = new URLSearchParams();\n urlParams.set('api', 'json');\n urlParams.set('adminapikey', apiKey);\n urlParams.set('adminapipass', apiPass);\n\n for (const [key, value] of Object.entries(clean)) {\n urlParams.set(key, String(value));\n }\n\n return `?${urlParams.toString()}`;\n}\n","import http from 'node:http';\nimport https from 'node:https';\nimport { buildQueryString } from './auth.js';\nimport type { ApiParams } from './types/common.js';\nimport type { VirtualizorResponse } from './types/common.js';\nimport type { ResolvedConfig } from './types/config.js';\n\nexport class VirtualizorApiError extends Error {\n readonly code: number;\n\n constructor(message: string, code: number) {\n super(message);\n this.name = 'VirtualizorApiError';\n this.code = code;\n }\n}\n\nexport class HttpClient {\n constructor(private readonly config: ResolvedConfig) {}\n\n parseResponse<T extends VirtualizorResponse>(data: T): T {\n if (data.error && data.error.length > 0) {\n const first = data.error[0];\n if (first) {\n throw new VirtualizorApiError(first.msg, first.code);\n }\n }\n return data;\n }\n\n async request<T extends VirtualizorResponse>(\n act: string,\n queryParams: ApiParams = {},\n bodyParams: ApiParams = {},\n ): Promise<T> {\n const allQueryParams: ApiParams = { act, ...queryParams };\n const qs = buildQueryString(allQueryParams, this.config.apiKey, this.config.apiPass);\n\n const path = `/index.php${qs}`;\n\n const bodyString = Object.entries(bodyParams as Record<string, unknown>)\n .filter(([, v]) => v !== undefined)\n .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(String(v))}`)\n .join('&');\n\n const data = await this.rawRequest(path, bodyString || undefined);\n return this.parseResponse(data as T);\n }\n\n private rawRequest(path: string, body?: string): Promise<VirtualizorResponse> {\n const transport = this.config.https ? https : http;\n const options: https.RequestOptions = {\n host: this.config.host,\n port: this.config.port,\n path,\n method: body ? 'POST' : 'GET',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n ...(body ? { 'Content-Length': Buffer.byteLength(body) } : {}),\n },\n ...(this.config.https\n ? { agent: new https.Agent({ rejectUnauthorized: this.config.rejectUnauthorized }) }\n : {}),\n };\n\n return new Promise((resolve, reject) => {\n const req = transport.request(options, (res) => {\n let raw = '';\n res.on('data', (chunk: Buffer) => {\n raw += chunk.toString();\n });\n res.on('end', () => {\n // Handle redirect (302) - usually means auth failed\n if (res.statusCode === 302 || res.statusCode === 301) {\n reject(\n new Error(\n `Redirect detected (status ${res.statusCode}). Authentication failed. ` +\n `Check your API credentials. Location: ${res.headers.location}`,\n ),\n );\n return;\n }\n\n try {\n resolve(JSON.parse(raw) as VirtualizorResponse);\n } catch (err) {\n if (this.config.debug)\n console.debug('[Virtualizor] Raw response (first 500 chars):', raw.slice(0, 500));\n reject(\n new Error(\n `Failed to parse response: ${raw.slice(0, 200)}. Parse error: ${err instanceof Error ? err.message : String(err)}`,\n ),\n );\n }\n });\n });\n\n req.setTimeout(this.config.timeout, () => {\n req.destroy(new Error(`Request timed out after ${this.config.timeout}ms`));\n });\n\n req.on('error', reject);\n\n if (body) {\n req.write(body);\n }\n\n req.end();\n });\n }\n}\n","import type { HttpClient } from '../http.js';\nimport type { ApiParams } from '../types/common.js';\nimport type { AsyncTaskResult, VirtualizorResponse } from '../types/common.js';\nimport type { CreatePlanParams, Plan } from '../types/plans.js';\n\ninterface ListPlansResponse extends VirtualizorResponse {\n plans: Record<string, Plan>;\n}\nexport class PlansResource {\n constructor(private readonly http: HttpClient) {}\n\n async list(): Promise<Record<string, Plan>> {\n const res = await this.http.request<ListPlansResponse>('plans', {}, {});\n return res.plans;\n }\n\n async create(params: CreatePlanParams): Promise<AsyncTaskResult> {\n return this.http.request<AsyncTaskResult>('addplan', {}, params);\n }\n\n async delete(planId: string): Promise<AsyncTaskResult> {\n return this.http.request<AsyncTaskResult>('plans', {}, { delete: planId });\n }\n}\n","import { DEFAULT_TASK_POLLING } from '../config/defaults.js';\nimport type { HttpClient } from '../http.js';\nimport type { VirtualizorResponse } from '../types/common.js';\nimport type { Task } from '../types/tasks.js';\n\ninterface TasksResponse extends VirtualizorResponse {\n tasks: Record<string, Task>;\n}\n\nexport class TasksResource {\n constructor(private readonly http: HttpClient) {}\n\n async get(taskId: string): Promise<Task | undefined> {\n const res = await this.http.request<TasksResponse>('tasks', { taskid: taskId }, {});\n return res.tasks[taskId];\n }\n\n async wait(\n taskId: string,\n options: { pollIntervalMs?: number; timeoutMs?: number } = {},\n ): Promise<Task> {\n const {\n pollIntervalMs = DEFAULT_TASK_POLLING.pollIntervalMs,\n timeoutMs = DEFAULT_TASK_POLLING.timeoutMs,\n } = options;\n const deadline = Date.now() + timeoutMs;\n\n while (Date.now() < deadline) {\n const task = await this.get(taskId);\n if (!task) throw new Error(`Task ${taskId} not found`);\n if (task.status === '1' || task.status === 'done') return task;\n if (task.status === 'error' || task.status === '-1') {\n throw new Error(`Task ${taskId} failed`);\n }\n await new Promise((r) => setTimeout(r, pollIntervalMs));\n }\n\n throw new Error(`Task ${taskId} timed out after ${timeoutMs}ms`);\n }\n}\n","import type { HttpClient } from '../http.js';\nimport type { ApiParams } from '../types/common.js';\nimport type { AsyncTaskResult, VirtualizorResponse } from '../types/common.js';\nimport type { CreateUserParams, User } from '../types/users.js';\n\ninterface ListUsersResponse extends VirtualizorResponse {\n users: Record<string, User>;\n}\n\nexport class UsersResource {\n constructor(private readonly http: HttpClient) {}\n\n async list(): Promise<Record<string, User>> {\n const res = await this.http.request<ListUsersResponse>('users', {}, {});\n return res.users;\n }\n\n async create(params: CreateUserParams): Promise<AsyncTaskResult> {\n return this.http.request<AsyncTaskResult>('adduser', {}, params);\n }\n\n async delete(uid: string): Promise<AsyncTaskResult> {\n return this.http.request<AsyncTaskResult>('users', {}, { delete: uid });\n }\n\n async suspend(uid: string): Promise<AsyncTaskResult> {\n return this.http.request<AsyncTaskResult>('users', {}, { suspend: uid });\n }\n\n async unsuspend(uid: string): Promise<AsyncTaskResult> {\n return this.http.request<AsyncTaskResult>('users', {}, { unsuspend: uid });\n }\n}\n","// VPS operation constants\nexport const VPS_CONSTANTS = {\n // Rebuild operation requires reos=1 flag\n REBUILD_REOS_FLAG: 1,\n // Migrate operation requires migrate=1 flag\n MIGRATE_FLAG: 1,\n // Migrate operation requires migrate_but=1 flag\n MIGRATE_BUT_FLAG: 1,\n} as const;\n","import { VPS_CONSTANTS } from '../constants/vps.js';\nimport type { HttpClient } from '../http.js';\nimport type { ApiParams } from '../types/common.js';\nimport type { AsyncTaskResult, VirtualizorResponse } from '../types/common.js';\nimport type {\n CloneVPSParams,\n CreateVPSParams,\n ListVPSParams,\n MigrateVPSParams,\n RebuildVPSParams,\n VNCInfo,\n VPS,\n VPSStatsResponse,\n} from '../types/vps.js';\n\ninterface ListVPSResponse extends VirtualizorResponse {\n vs: Record<string, VPS>;\n}\ninterface GetVPSResponse extends VirtualizorResponse {\n vs: Record<string, VPS>;\n}\n\nexport class VpsResource {\n constructor(private readonly http: HttpClient) {}\n\n async list(filters: ListVPSParams = {}): Promise<Record<string, VPS>> {\n const res = await this.http.request<ListVPSResponse>('vs', {}, filters);\n return res.vs ?? {};\n }\n\n async get(vpsId: string): Promise<VPS> {\n const res = await this.http.request<GetVPSResponse>('vs', { vpsid: vpsId }, {});\n const vps = res.vs[vpsId];\n if (!vps) throw new Error(`VPS ${vpsId} not found in response`);\n return vps;\n }\n\n async create(params: CreateVPSParams): Promise<AsyncTaskResult> {\n return this.http.request<AsyncTaskResult>('addvs', {}, params);\n }\n\n async delete(vpsId: string): Promise<AsyncTaskResult> {\n return this.http.request<AsyncTaskResult>('vs', { delete: vpsId }, {});\n }\n\n async start(vpsId: string): Promise<AsyncTaskResult> {\n return this.http.request<AsyncTaskResult>('vs', { vpsid: vpsId, action: 'start' }, {});\n }\n\n async stop(vpsId: string): Promise<AsyncTaskResult> {\n return this.http.request<AsyncTaskResult>('vs', { vpsid: vpsId, action: 'stop' }, {});\n }\n\n async restart(vpsId: string): Promise<AsyncTaskResult> {\n return this.http.request<AsyncTaskResult>('vs', { vpsid: vpsId, action: 'restart' }, {});\n }\n\n async poweroff(vpsId: string): Promise<AsyncTaskResult> {\n return this.http.request<AsyncTaskResult>('vs', { vpsid: vpsId, action: 'poweroff' }, {});\n }\n\n async suspend(vpsId: string): Promise<AsyncTaskResult> {\n return this.http.request<AsyncTaskResult>('vs', { suspend: vpsId }, {});\n }\n\n async unsuspend(vpsId: string): Promise<AsyncTaskResult> {\n return this.http.request<AsyncTaskResult>('vs', { unsuspend: vpsId }, {});\n }\n\n async rebuild(vpsId: string, params: RebuildVPSParams): Promise<AsyncTaskResult> {\n return this.http.request<AsyncTaskResult>(\n 'rebuild',\n {},\n {\n vpsid: vpsId,\n reos: VPS_CONSTANTS.REBUILD_REOS_FLAG,\n ...params,\n },\n );\n }\n\n async clone(vpsId: string, params: CloneVPSParams): Promise<AsyncTaskResult> {\n return this.http.request<AsyncTaskResult>(\n 'clone',\n {},\n {\n vpsid: vpsId,\n ...params,\n },\n );\n }\n\n async migrate(vpsId: string, params: MigrateVPSParams): Promise<AsyncTaskResult> {\n return this.http.request<AsyncTaskResult>(\n 'migrate',\n {},\n {\n vpsid: vpsId,\n migrate: VPS_CONSTANTS.MIGRATE_FLAG,\n migrate_but: VPS_CONSTANTS.MIGRATE_BUT_FLAG,\n ...params,\n },\n );\n }\n\n async status(vpsId: string): Promise<unknown> {\n return this.http.request('vstatus', { vpsid: vpsId }, {});\n }\n\n async vnc(vpsId: string): Promise<VNCInfo> {\n return this.http.request<VNCInfo>('vnc', { vpsid: vpsId }, {});\n }\n\n async stats(vpsId: string): Promise<VPSStatsResponse> {\n return this.http.request<VPSStatsResponse>('vps_stats', {}, { vpsid: vpsId });\n }\n}\n","import { DEFAULT_CONFIG } from './config/defaults.js';\nimport { HttpClient } from './http.js';\nimport { PlansResource } from './resources/plans.js';\nimport { TasksResource } from './resources/tasks.js';\nimport { UsersResource } from './resources/users.js';\nimport { VpsResource } from './resources/vps.js';\nimport type { ResolvedConfig, VirtualizorConfig } from './types/config.js';\n\nexport class VirtualizorClient {\n readonly vps: VpsResource;\n readonly users: UsersResource;\n readonly plans: PlansResource;\n readonly tasks: TasksResource;\n\n constructor(config: VirtualizorConfig) {\n const resolved: ResolvedConfig = {\n host: config.host,\n apiKey: config.apiKey,\n apiPass: config.apiPass ?? '',\n port: config.port ?? DEFAULT_CONFIG.port,\n https: config.https ?? DEFAULT_CONFIG.https,\n rejectUnauthorized: config.rejectUnauthorized ?? DEFAULT_CONFIG.rejectUnauthorized,\n timeout: config.timeout ?? DEFAULT_CONFIG.timeout,\n debug: config.debug ?? DEFAULT_CONFIG.debug,\n };\n const http = new HttpClient(resolved);\n this.vps = new VpsResource(http);\n this.users = new UsersResource(http);\n this.plans = new PlansResource(http);\n this.tasks = new TasksResource(http);\n }\n}\n\nexport function createVirtualizorClient(config: VirtualizorConfig): VirtualizorClient {\n return new VirtualizorClient(config);\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/config/defaults.ts","../src/auth.ts","../src/http.ts","../src/resources/plans.ts","../src/resources/tasks.ts","../src/resources/users.ts","../src/constants/vps.ts","../src/resources/vps.ts","../src/client.ts","../src/utils/format-ips.ts"],"names":["http"],"mappings":"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","file":"index.mjs","sourcesContent":["export const DEFAULT_CONFIG = {\n port: 4085,\n https: true,\n rejectUnauthorized: false,\n timeout: 30000,\n debug: false,\n} as const;\n\nexport const DEFAULT_TASK_POLLING = {\n pollIntervalMs: 2000,\n timeoutMs: 120000,\n} as const;\n","import type { ApiParams } from './types/common.js';\n\nexport function buildQueryString(params: ApiParams, apiKey: string, apiPass: string): string {\n const clean: ApiParams = {};\n for (const [key, value] of Object.entries(params)) {\n if (value !== undefined) {\n clean[key] = value;\n }\n }\n\n const urlParams = new URLSearchParams();\n urlParams.set('api', 'json');\n urlParams.set('adminapikey', apiKey);\n urlParams.set('adminapipass', apiPass);\n\n for (const [key, value] of Object.entries(clean)) {\n urlParams.set(key, String(value));\n }\n\n return `?${urlParams.toString()}`;\n}\n","import http from 'node:http';\nimport https from 'node:https';\nimport { buildQueryString } from './auth.js';\nimport type { ApiParams } from './types/common.js';\nimport type { VirtualizorResponse } from './types/common.js';\nimport type { ResolvedConfig } from './types/config.js';\n\nexport class VirtualizorApiError extends Error {\n readonly code: number;\n\n constructor(message: string, code: number) {\n super(message);\n this.name = 'VirtualizorApiError';\n this.code = code;\n }\n}\n\nexport class HttpClient {\n constructor(private readonly config: ResolvedConfig) {}\n\n parseResponse<T extends VirtualizorResponse>(data: T): T {\n if (data.error && data.error.length > 0) {\n const first = data.error[0];\n if (first) {\n throw new VirtualizorApiError(first.msg, first.code);\n }\n }\n return data;\n }\n\n async request<T extends VirtualizorResponse>(\n act: string,\n queryParams: ApiParams = {},\n bodyParams: ApiParams = {},\n ): Promise<T> {\n const allQueryParams: ApiParams = { act, ...queryParams };\n const qs = buildQueryString(allQueryParams, this.config.apiKey, this.config.apiPass);\n\n const path = `/index.php${qs}`;\n\n const bodyString = Object.entries(bodyParams as Record<string, unknown>)\n .filter(([, v]) => v !== undefined)\n .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(String(v))}`)\n .join('&');\n\n const data = await this.rawRequest(path, bodyString || undefined);\n return this.parseResponse(data as T);\n }\n\n private rawRequest(path: string, body?: string): Promise<VirtualizorResponse> {\n const transport = this.config.https ? https : http;\n const options: https.RequestOptions = {\n host: this.config.host,\n port: this.config.port,\n path,\n method: body ? 'POST' : 'GET',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n ...(body ? { 'Content-Length': Buffer.byteLength(body) } : {}),\n },\n ...(this.config.https\n ? { agent: new https.Agent({ rejectUnauthorized: this.config.rejectUnauthorized }) }\n : {}),\n };\n\n return new Promise((resolve, reject) => {\n const req = transport.request(options, (res) => {\n let raw = '';\n res.on('data', (chunk: Buffer) => {\n raw += chunk.toString();\n });\n res.on('end', () => {\n // Handle redirect (302) - usually means auth failed\n if (res.statusCode === 302 || res.statusCode === 301) {\n reject(\n new Error(\n `Redirect detected (status ${res.statusCode}). Authentication failed. ` +\n `Check your API credentials. Location: ${res.headers.location}`,\n ),\n );\n return;\n }\n\n try {\n resolve(JSON.parse(raw) as VirtualizorResponse);\n } catch (err) {\n if (this.config.debug)\n console.debug('[Virtualizor] Raw response (first 500 chars):', raw.slice(0, 500));\n reject(\n new Error(\n `Failed to parse response: ${raw.slice(0, 200)}. Parse error: ${err instanceof Error ? err.message : String(err)}`,\n ),\n );\n }\n });\n });\n\n req.setTimeout(this.config.timeout, () => {\n req.destroy(new Error(`Request timed out after ${this.config.timeout}ms`));\n });\n\n req.on('error', reject);\n\n if (body) {\n req.write(body);\n }\n\n req.end();\n });\n }\n}\n","import type { HttpClient } from '../http.js';\nimport type { ApiParams } from '../types/common.js';\nimport type { AsyncTaskResult, VirtualizorResponse } from '../types/common.js';\nimport type { CreatePlanParams, Plan } from '../types/plans.js';\n\ninterface ListPlansResponse extends VirtualizorResponse {\n plans: Record<string, Plan>;\n}\nexport class PlansResource {\n constructor(private readonly http: HttpClient) {}\n\n async list(): Promise<Record<string, Plan>> {\n const res = await this.http.request<ListPlansResponse>('plans', {}, {});\n return res.plans;\n }\n\n async create(params: CreatePlanParams): Promise<AsyncTaskResult> {\n return this.http.request<AsyncTaskResult>('addplan', {}, params);\n }\n\n async delete(planId: string): Promise<AsyncTaskResult> {\n return this.http.request<AsyncTaskResult>('plans', {}, { delete: planId });\n }\n}\n","import { DEFAULT_TASK_POLLING } from '../config/defaults.js';\nimport type { HttpClient } from '../http.js';\nimport type { VirtualizorResponse } from '../types/common.js';\nimport type { Task } from '../types/tasks.js';\n\ninterface TasksResponse extends VirtualizorResponse {\n tasks: Record<string, Task>;\n}\n\nexport class TasksResource {\n constructor(private readonly http: HttpClient) {}\n\n async get(taskId: string): Promise<Task | undefined> {\n const res = await this.http.request<TasksResponse>('tasks', { taskid: taskId }, {});\n return res.tasks[taskId];\n }\n\n async wait(\n taskId: string,\n options: { pollIntervalMs?: number; timeoutMs?: number } = {},\n ): Promise<Task> {\n const {\n pollIntervalMs = DEFAULT_TASK_POLLING.pollIntervalMs,\n timeoutMs = DEFAULT_TASK_POLLING.timeoutMs,\n } = options;\n const deadline = Date.now() + timeoutMs;\n\n while (Date.now() < deadline) {\n const task = await this.get(taskId);\n if (!task) throw new Error(`Task ${taskId} not found`);\n if (task.status === '1' || task.status === 'done') return task;\n if (task.status === 'error' || task.status === '-1') {\n throw new Error(`Task ${taskId} failed`);\n }\n await new Promise((r) => setTimeout(r, pollIntervalMs));\n }\n\n throw new Error(`Task ${taskId} timed out after ${timeoutMs}ms`);\n }\n}\n","import type { HttpClient } from '../http.js';\nimport type { ApiParams } from '../types/common.js';\nimport type { AsyncTaskResult, VirtualizorResponse } from '../types/common.js';\nimport type { CreateUserParams, User } from '../types/users.js';\n\ninterface ListUsersResponse extends VirtualizorResponse {\n users: Record<string, User>;\n}\n\nexport class UsersResource {\n constructor(private readonly http: HttpClient) {}\n\n async list(): Promise<Record<string, User>> {\n const res = await this.http.request<ListUsersResponse>('users', {}, {});\n return res.users;\n }\n\n async create(params: CreateUserParams): Promise<AsyncTaskResult> {\n return this.http.request<AsyncTaskResult>('adduser', {}, params);\n }\n\n async delete(uid: string): Promise<AsyncTaskResult> {\n return this.http.request<AsyncTaskResult>('users', {}, { delete: uid });\n }\n\n async suspend(uid: string): Promise<AsyncTaskResult> {\n return this.http.request<AsyncTaskResult>('users', {}, { suspend: uid });\n }\n\n async unsuspend(uid: string): Promise<AsyncTaskResult> {\n return this.http.request<AsyncTaskResult>('users', {}, { unsuspend: uid });\n }\n}\n","// VPS operation constants\nexport const VPS_CONSTANTS = {\n // Rebuild operation requires reos=1 flag\n REBUILD_REOS_FLAG: 1,\n // Migrate operation requires migrate=1 flag\n MIGRATE_FLAG: 1,\n // Migrate operation requires migrate_but=1 flag\n MIGRATE_BUT_FLAG: 1,\n} as const;\n","import { VPS_CONSTANTS } from '../constants/vps.js';\nimport type { HttpClient } from '../http.js';\nimport type { ApiParams } from '../types/common.js';\nimport type { AsyncTaskResult, VirtualizorResponse } from '../types/common.js';\nimport type {\n CloneVPSParams,\n CreateVPSParams,\n ListVPSParams,\n MigrateVPSParams,\n RebuildVPSParams,\n VNCInfo,\n VPS,\n VPSStatsResponse,\n} from '../types/vps.js';\n\ninterface ListVPSResponse extends VirtualizorResponse {\n vs: Record<string, VPS>;\n}\ninterface GetVPSResponse extends VirtualizorResponse {\n vs: Record<string, VPS>;\n}\n\nexport class VpsResource {\n constructor(private readonly http: HttpClient) {}\n\n async list(filters: ListVPSParams = {}): Promise<Record<string, VPS>> {\n const res = await this.http.request<ListVPSResponse>('vs', {}, filters);\n return res.vs ?? {};\n }\n\n async get(vpsId: string): Promise<VPS> {\n const res = await this.http.request<GetVPSResponse>('vs', { vpsid: vpsId }, {});\n const vps = res.vs[vpsId];\n if (!vps) throw new Error(`VPS ${vpsId} not found in response`);\n return vps;\n }\n\n async create(params: CreateVPSParams): Promise<AsyncTaskResult> {\n return this.http.request<AsyncTaskResult>('addvs', {}, params);\n }\n\n async delete(vpsId: string): Promise<AsyncTaskResult> {\n return this.http.request<AsyncTaskResult>('vs', { delete: vpsId }, {});\n }\n\n async start(vpsId: string): Promise<AsyncTaskResult> {\n return this.http.request<AsyncTaskResult>('vs', { vpsid: vpsId, action: 'start' }, {});\n }\n\n async stop(vpsId: string): Promise<AsyncTaskResult> {\n return this.http.request<AsyncTaskResult>('vs', { vpsid: vpsId, action: 'stop' }, {});\n }\n\n async restart(vpsId: string): Promise<AsyncTaskResult> {\n return this.http.request<AsyncTaskResult>('vs', { vpsid: vpsId, action: 'restart' }, {});\n }\n\n async poweroff(vpsId: string): Promise<AsyncTaskResult> {\n return this.http.request<AsyncTaskResult>('vs', { vpsid: vpsId, action: 'poweroff' }, {});\n }\n\n async suspend(vpsId: string): Promise<AsyncTaskResult> {\n return this.http.request<AsyncTaskResult>('vs', { suspend: vpsId }, {});\n }\n\n async unsuspend(vpsId: string): Promise<AsyncTaskResult> {\n return this.http.request<AsyncTaskResult>('vs', { unsuspend: vpsId }, {});\n }\n\n async rebuild(vpsId: string, params: RebuildVPSParams): Promise<AsyncTaskResult> {\n return this.http.request<AsyncTaskResult>(\n 'rebuild',\n {},\n {\n vpsid: vpsId,\n reos: VPS_CONSTANTS.REBUILD_REOS_FLAG,\n ...params,\n },\n );\n }\n\n async clone(vpsId: string, params: CloneVPSParams): Promise<AsyncTaskResult> {\n return this.http.request<AsyncTaskResult>(\n 'clone',\n {},\n {\n vpsid: vpsId,\n ...params,\n },\n );\n }\n\n async migrate(vpsId: string, params: MigrateVPSParams): Promise<AsyncTaskResult> {\n return this.http.request<AsyncTaskResult>(\n 'migrate',\n {},\n {\n vpsid: vpsId,\n migrate: VPS_CONSTANTS.MIGRATE_FLAG,\n migrate_but: VPS_CONSTANTS.MIGRATE_BUT_FLAG,\n ...params,\n },\n );\n }\n\n async status(vpsId: string): Promise<unknown> {\n return this.http.request('vstatus', { vpsid: vpsId }, {});\n }\n\n async vnc(vpsId: string): Promise<VNCInfo> {\n return this.http.request<VNCInfo>('vnc', { vpsid: vpsId }, {});\n }\n\n async stats(vpsId: string): Promise<VPSStatsResponse> {\n return this.http.request<VPSStatsResponse>('vps_stats', {}, { vpsid: vpsId });\n }\n}\n","import { DEFAULT_CONFIG } from './config/defaults.js';\nimport { HttpClient } from './http.js';\nimport { PlansResource } from './resources/plans.js';\nimport { TasksResource } from './resources/tasks.js';\nimport { UsersResource } from './resources/users.js';\nimport { VpsResource } from './resources/vps.js';\nimport type { ResolvedConfig, VirtualizorConfig } from './types/config.js';\n\nexport class VirtualizorClient {\n readonly vps: VpsResource;\n readonly users: UsersResource;\n readonly plans: PlansResource;\n readonly tasks: TasksResource;\n\n constructor(config: VirtualizorConfig) {\n const resolved: ResolvedConfig = {\n host: config.host,\n apiKey: config.apiKey,\n apiPass: config.apiPass ?? '',\n port: config.port ?? DEFAULT_CONFIG.port,\n https: config.https ?? DEFAULT_CONFIG.https,\n rejectUnauthorized: config.rejectUnauthorized ?? DEFAULT_CONFIG.rejectUnauthorized,\n timeout: config.timeout ?? DEFAULT_CONFIG.timeout,\n debug: config.debug ?? DEFAULT_CONFIG.debug,\n };\n const http = new HttpClient(resolved);\n this.vps = new VpsResource(http);\n this.users = new UsersResource(http);\n this.plans = new PlansResource(http);\n this.tasks = new TasksResource(http);\n }\n}\n\nexport function createVirtualizorClient(config: VirtualizorConfig): VirtualizorClient {\n return new VirtualizorClient(config);\n}\n","export type IpsInput = string[] | Record<string, string> | string | undefined | null;\n\nexport type FormatIpsOptions = {\n /**\n * Choose the return type. Defaults to 'array'.\n * - 'array' returns string[]\n * - 'string' returns a joined string using `separator`\n */\n as?: 'array' | 'string';\n /** Separator used when returning a string. Defaults to ', '. */\n separator?: string;\n};\n\n/**\n * formatIps\n * - Default behavior: return an array of IP strings (string[])\n * - If options.as === 'string' it returns a joined string using options.separator\n */\nexport function formatIps(ips: IpsInput): string[];\nexport function formatIps(ips: IpsInput, options: FormatIpsOptions & { as: 'string' }): string;\nexport function formatIps(ips: IpsInput, options?: FormatIpsOptions): string | string[] {\n const as = options?.as ?? 'array';\n const separator = options?.separator ?? ', ';\n\n if (!ips) {\n return as === 'array' ? [] : '';\n }\n\n let result: string[] = [];\n\n if (Array.isArray(ips)) {\n result = ips.filter(Boolean);\n } else if (typeof ips === 'string') {\n const str = ips.trim();\n if (str === '') {\n result = [];\n } else if (str.includes(',')) {\n result = str.split(',').map(s => s.trim()).filter(Boolean);\n } else if (/\\s+/.test(str)) {\n result = str.split(/\\s+/).map(s => s.trim()).filter(Boolean);\n } else {\n result = [str];\n }\n } else if (typeof ips === 'object') {\n result = Object.values(ips).filter(Boolean);\n }\n\n return as === 'array' ? result : result.join(separator);\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "virtualizorjs",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.2",
|
|
4
4
|
"description": "TypeScript SDK for the Virtualizor server management API. Create, start, stop, restart, rebuild, and manage VPS instances with a type-safe, developer-friendly client.",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"module": "./dist/index.mjs",
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
"lint": "biome check src tests",
|
|
28
28
|
"lint:fix": "biome check --write src tests",
|
|
29
29
|
"format": "biome format --write src tests",
|
|
30
|
-
"release": "bun run build && bumpp
|
|
30
|
+
"release": "bun run build && bumpp",
|
|
31
31
|
"prepublishOnly": "bun run build && bun run typecheck",
|
|
32
32
|
"check-exports": "attw --pack .",
|
|
33
33
|
"prepare": "husky"
|
|
@@ -41,24 +41,24 @@
|
|
|
41
41
|
"url": "git+https://github.com/kkMihai/virtualizorjs.git"
|
|
42
42
|
},
|
|
43
43
|
"bugs": {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
44
|
+
"url": "https://github.com/kkMihai/virtualizorjs/issues"
|
|
45
|
+
},
|
|
46
|
+
"homepage": "https://github.com/kkMihai/virtualizorjs#readme",
|
|
47
|
+
"engines": {
|
|
48
|
+
"bun": ">=1.3.0"
|
|
49
|
+
},
|
|
50
|
+
"devDependencies": {
|
|
51
|
+
"@arethetypeswrong/cli": "^0.17.0",
|
|
52
|
+
"@biomejs/biome": "^1.9.0",
|
|
53
|
+
"@commitlint/cli": "^19.0.0",
|
|
54
|
+
"@commitlint/config-conventional": "^19.0.0",
|
|
55
|
+
"@types/bun": "latest",
|
|
56
|
+
"bumpp": "^9.0.0",
|
|
57
|
+
"husky": "^9.0.0",
|
|
58
|
+
"tsup": "^8.0.0",
|
|
59
|
+
"typescript": "^5.5.0"
|
|
60
|
+
},
|
|
61
|
+
"trustedDependencies": [
|
|
62
|
+
"@biomejs/biome"
|
|
63
|
+
]
|
|
64
64
|
}
|