Files
hetznercloud/ts/classes.account.ts
T

65 lines
1.9 KiB
TypeScript

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<typeof HetznerServer.getServersByLabel>) {
return HetznerServer.getServersByLabel(this, labelObject);
}
public async createServer(optionsArg: plugins.tsclass.typeFestOwn.SecondArgument<typeof HetznerServer.create>) {
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;
}
}