import { HetznerServer } from './classes.server.js'; import * as plugins from './hetznercloud.plugins.js'; export class HetznerAccount { public token: string; constructor(tokenArg: string) { this.token = tokenArg; } public async getServers() { return HetznerServer.getServers(this); } public async getServersByLabel(labelObject: plugins.tsclass.typeFestOwn.SecondArgument) { return HetznerServer.getServersByLabel(this, labelObject); } public async createServer(optionsArg: plugins.tsclass.typeFestOwn.SecondArgument) { return HetznerServer.create(this, optionsArg); } /** * request things from the hetzner API * @param methodArg * @param pathArg * @param payloadArg */ public request = async (methodArg: string, pathArg: string, payloadArg: any) => { const url = `https://api.hetzner.cloud/v1${pathArg}`; console.log(`Url: ${url}`); console.log(`Method: ${methodArg}`); console.log(`Payload: ${JSON.stringify(payloadArg, null, 2)}`); const request = plugins.smartrequest.SmartRequest.create() .url(url) .headers({ Authorization: `Bearer ${this.token}`, }) .options({ keepAlive: false, }); if (methodArg !== 'GET' && methodArg !== 'DELETE') { request.json(payloadArg); } const response = methodArg === 'POST' ? await request.post() : methodArg === 'PUT' ? await request.put() : methodArg === 'PATCH' ? await request.patch() : methodArg === 'DELETE' ? await request.delete() : await request.get(); const body = await response.json().catch(() => ({})); const responseObject = { statusCode: response.status, body, }; console.log(responseObject.statusCode); console.log(responseObject.body); return responseObject; } }