import type { HetznerAccount } from './classes.account.js'; import * as plugins from './hetznercloud.plugins.js'; import * as types from './types.js'; export class HetznerServer { // STATIC public static async create(hetznerAccountRefArg: HetznerAccount, optionsArg: { name: string, datacenter: 'nbg1-dc3', }) { const server = new HetznerServer(hetznerAccountRefArg); const createServerUrl = '/servers'; const createServerPayload: types.TServerCreateRequestBody = { name: optionsArg.name, datacenter: optionsArg.datacenter, image: '', server_type: '', start_after_create: true, user_data: '', }; const response = await server.hetznerAccountRef.request('POST', createServerUrl, createServerPayload); server.data = (response.body as types.TServerCreateResponseBody).server; return server; } public static async getServers(hetznerAccountRefArg: HetznerAccount) { const serversGetUrl = '/servers'; const response = await hetznerAccountRefArg.request('GET', serversGetUrl, {}); const serversDataArray = (response.body as types.TServersGetResponseBody).servers; const servers: HetznerServer[] = []; for (const serverData of serversDataArray) { const server = new HetznerServer(hetznerAccountRefArg); server.data = serverData; servers.push(server); } return servers; } // INSTANCE public hetznerAccountRef: HetznerAccount; public data: types.IServer; constructor(hetznerAccountRefArg: HetznerAccount) { this.hetznerAccountRef = hetznerAccountRefArg; } public async delete() { await this.hetznerAccountRef.request('DELETE', `/servers/${this.data.id}`, {}); } }