// Hetzner Cloud Firewall Class import type { HetznerAccount } from './classes.account.js'; import * as plugins from './hetznercloud.plugins.js'; import * as types from './types.js'; export class HetznerFirewall { // STATIC public static create = async ( hetznerAccountRefArg: HetznerAccount, optionsArg: { name: string; labels?: {[key: string]: string}, rules: types.IFirewall['rules'], } ) => { const firewall = new HetznerFirewall(hetznerAccountRefArg); const createFirewallUrl = '/firewalls'; const createFirewallPayload: types.TFirewallCreateRequestBody = { name: optionsArg.name, labels: optionsArg.labels || {} as any, rules: optionsArg.rules }; const response = await firewall.hetznerAccountRef.request( 'POST', createFirewallUrl, createFirewallPayload ); firewall.data = (response.body as types.TFirewallCreateResponseBody).firewall; return firewall; } public static getFirewalls = async (hetznerAccountRefArg: HetznerAccount) => { const firewallsGetUrl = '/firewalls'; const response = await hetznerAccountRefArg.request('GET', firewallsGetUrl, {}); const firewallsDataArray = (response.body as types.TFirewallsGetResponseBody).firewalls; const firewalls: HetznerFirewall[] = []; for (const firewallData of firewallsDataArray) { const firewall = new HetznerFirewall(hetznerAccountRefArg); firewall.data = firewallData; firewalls.push(firewall); } return firewalls; } public static getFirewallsByLabel = async (hetznerAccountRefArg: HetznerAccount, labelObject: {[key: string]: string}) => { const firewalls = await HetznerFirewall.getFirewalls(hetznerAccountRefArg); const results: HetznerFirewall[] = []; for (const firewall of firewalls) { let isMatch = true; for (const key in labelObject) { if (firewall.data.labels[key] !== labelObject[key]) { isMatch = false; } } if (isMatch) { results.push(firewall); } } return results; } // INSTANCE public data: types.IFirewall; public hetznerAccountRef: HetznerAccount; constructor(hetznerAccountRefArg: HetznerAccount) { this.hetznerAccountRef = hetznerAccountRefArg; } public async delete() { await this.hetznerAccountRef.request('DELETE', `/firewalls/${this.data.id}`, {}); } }