{"version":3,"sources":["../src/index.ts","../src/base.ts","../src/billing/billing.ts","../src/firewalls/actions.ts","../src/firewalls/firewalls.ts","../src/floating-ips/actions.ts","../src/floating-ips/floating-ips.ts","../src/locations/locations.ts","../src/networks/actions.ts","../src/networks/networks.ts","../src/security/actions.ts","../src/security/certificates.ts","../src/security/security.ts","../src/volumes/actions.ts","../src/volumes/volumes.ts","../src/load-balancers/actions.ts","../src/load-balancers/load-balancers.ts","../src/actions/actions.ts","../src/servers/images/images.ts","../src/servers/primary-ip/primary-ip.ts","../src/servers/placement-groups/placement-group.ts","../src/servers/isos/isos.ts","../src/servers/server-types/server-types.ts","../src/servers/actions/actions.ts","../src/servers/servers.ts"],"sourcesContent":["import { BaseAPI } from \"./base\"\nimport { Billing } from \"./billing/billing\"\nimport { Firewalls } from \"./firewalls/firewalls\"\nimport { FloatingIPs } from \"./floating-ips/floating-ips\"\nimport { Datacenters, Locations } from \"./locations/locations\"\nimport { Networks } from \"./networks/networks\"\nimport { SSHKeys, Certificates } from \"./security/security\"\nimport { Volumes } from \"./volumes/volumes\"\nimport { LoadBalancers } from \"./load-balancers/load-balancers\"\nimport { Actions } from \"./actions/actions\"\nimport { Servers } from \"./servers/servers\"\nexport class HetznerAPI extends BaseAPI {\n  get actions() {\n    return new Actions(this.token)\n  }\n\n  get billing() {\n    return new Billing(this.token)\n  }\n\n  get certificates() {\n    return new Certificates(this.token)\n  }\n\n  get datacenters() {\n    return new Datacenters(this.token)\n  }\n\n  get firewalls() {\n    return new Firewalls(this.token)\n  }\n\n  get floatingIps() {\n    return new FloatingIPs(this.token)\n  }\n\n  get loadBalancers() {\n    return new LoadBalancers(this.token)\n  }\n\n  get locations() {\n    return new Locations(this.token)\n  }\n\n  get networks() {\n    return new Networks(this.token)\n  }\n\n  get servers() {\n    return new Servers(this.token)\n  }\n\n  get sshKeys() {\n    return new SSHKeys(this.token)\n  }\n\n  get volumes() {\n    return new Volumes(this.token)\n  }\n}\n","import type { APIError } from \"./types\"\n\nexport class BaseAPI {\n  protected token: string\n  protected baseUrl: string\n\n  constructor(token: string, baseUrl?: string) {\n    this.token = token\n    this.baseUrl = baseUrl || \"https://api.hetzner.cloud/v1\"\n  }\n\n  public async request<T>(\n    endpoint: string,\n    options: RequestInit = {},\n  ): Promise<{ success: true; response: T } | { success: false; response: APIError }> {\n    const res = await fetch(`${this.baseUrl}${endpoint}`, {\n      ...options,\n      headers: {\n        ...(options.headers || {}),\n        Authorization: `Bearer ${this.token}`,\n        \"Content-Type\": \"application/json\",\n      },\n    })\n    const response = res.status === 204 ? null : await res.json()\n    if (!res.ok) {\n      return {\n        success: false,\n        response: response as APIError,\n      }\n    }\n    return {\n      success: true,\n      response: response as T,\n    }\n  }\n}\n","import { BaseAPI } from \"../base\"\nimport type { APIError } from \"../types\"\nimport type { PricingResponse } from \"./types\"\n\n/**\n * Billing API\n *\n * Returns prices for resources.\n * https://docs.hetzner.cloud/#billing\n *\n */\nexport class Billing extends BaseAPI {\n  /**\n   * Get all prices for resources\n   * VAT and currency of the Project owner are used for calculations.\n   * Both net and gross prices are included in the response.\n   */\n  async get(): Promise<\n    { success: true; response: PricingResponse } | { success: false; response: APIError }\n  > {\n    return this.request<PricingResponse>(\"/pricing\")\n  }\n}\n","import { BaseAPI } from \"../base\"\nimport type { APIError } from \"../types\"\nimport type {\n  FirewallAction,\n  FirewallActionsResponse,\n  FirewallRule,\n  FirewallResource,\n  SortOption,\n  ActionStatus,\n} from \"./types\"\n\n/**\n * Firewall Actions API\n *\n * Returns all Actions for Firewalls.\n * https://docs.hetzner.cloud/#firewalls-actions\n *\n */\nexport class FirewallActions extends BaseAPI {\n  /**\n   * List all actions for firewalls\n   * @param params Optional parameters for filtering and pagination\n   */\n  async getAll(params?: {\n    id?: number\n    sort?: SortOption\n    status?: ActionStatus\n    page?: number\n    per_page?: number\n  }): Promise<\n    { success: true; response: FirewallActionsResponse } | { success: false; response: APIError }\n  > {\n    const queryParams = new URLSearchParams()\n    if (params) {\n      Object.entries(params).forEach(([key, value]) => {\n        if (value !== undefined) {\n          queryParams.append(key, value.toString())\n        }\n      })\n    }\n\n    const queryString = queryParams.toString()\n    return this.request<FirewallActionsResponse>(\n      `/firewalls/actions${queryString ? `?${queryString}` : \"\"}`,\n    )\n  }\n\n  /**\n   * Get a specific action for a firewall\n   */\n  async get(\n    firewallId: number,\n    actionId: number,\n  ): Promise<\n    { success: true; response: { action: FirewallAction } } | { success: false; response: APIError }\n  > {\n    return this.request<{ action: FirewallAction }>(`/firewalls/${firewallId}/actions/${actionId}`)\n  }\n\n  /**\n   * Apply firewall to resources\n   */\n  async applyToResources(\n    firewallId: number,\n    resources: FirewallResource[],\n  ): Promise<\n    { success: true; response: { action: FirewallAction } } | { success: false; response: APIError }\n  > {\n    return this.request<{ action: FirewallAction }>(\n      `/firewalls/${firewallId}/actions/apply_to_resources`,\n      {\n        method: \"POST\",\n        body: JSON.stringify({ apply_to: resources }),\n      },\n    )\n  }\n\n  /**\n   * Remove firewall from resources\n   */\n  async removeFromResources(\n    firewallId: number,\n    resources: FirewallResource[],\n  ): Promise<\n    { success: true; response: { action: FirewallAction } } | { success: false; response: APIError }\n  > {\n    return this.request<{ action: FirewallAction }>(\n      `/firewalls/${firewallId}/actions/remove_from_resources`,\n      {\n        method: \"POST\",\n        body: JSON.stringify({ remove_from: resources }),\n      },\n    )\n  }\n\n  /**\n   * Set firewall rules\n   */\n  async setRules(\n    firewallId: number,\n    rules: FirewallRule[] | [], // Pass an empty array to remove all rules\n  ): Promise<\n    { success: true; response: { action: FirewallAction } } | { success: false; response: APIError }\n  > {\n    return this.request<{ action: FirewallAction }>(`/firewalls/${firewallId}/actions/set_rules`, {\n      method: \"POST\",\n      body: JSON.stringify({ rules }),\n    })\n  }\n\n  /**\n   * Get all actions for a specific firewall\n   */\n  async getFirewallActions(\n    firewallId: number,\n    params?: {\n      sort?: SortOption\n      status?: ActionStatus\n      page?: number\n      per_page?: number\n    },\n  ): Promise<\n    { success: true; response: FirewallActionsResponse } | { success: false; response: APIError }\n  > {\n    const queryParams = new URLSearchParams()\n    if (params) {\n      Object.entries(params).forEach(([key, value]) => {\n        if (value !== undefined) {\n          queryParams.append(key, value.toString())\n        }\n      })\n    }\n\n    const queryString = queryParams.toString()\n    return this.request<FirewallActionsResponse>(\n      `/firewalls/${firewallId}/actions${queryString ? `?${queryString}` : \"\"}`,\n    )\n  }\n\n  /**\n   * Returns a specific Action for a Firewall.\n   */\n  async getFirewallAction(\n    firewallId: number,\n    actionId: number,\n  ): Promise<\n    { success: true; response: { action: FirewallAction } } | { success: false; response: APIError }\n  > {\n    return this.request<{ action: FirewallAction }>(`/firewalls/${firewallId}/actions/${actionId}`)\n  }\n}\n","import { BaseAPI } from \"../base\"\nimport type { APIError } from \"../types\"\nimport type {\n  Firewall,\n  FirewallsResponse,\n  FirewallRule,\n  FirewallResource,\n  FirewallCreateResponse,\n} from \"./types\"\nimport { FirewallActions } from \"./actions\"\n\nexport interface ListFirewallsParams {\n  name?: string\n  label_selector?: string\n  sort?:\n    | \"id\"\n    | \"id:asc\"\n    | \"id:desc\"\n    | \"name\"\n    | \"name:asc\"\n    | \"name:desc\"\n    | \"created\"\n    | \"created:asc\"\n    | \"created:desc\"\n  page?: number\n  per_page?: number\n}\n\nexport interface CreateFirewallParams {\n  name: string // max 128 chars\n  labels?: Record<string, string>\n  rules?: FirewallRule[]\n  apply_to?: FirewallResource[]\n}\n\nexport interface UpdateFirewallParams {\n  name?: string // max 128 chars\n  labels?: Record<string, string>\n}\n\n/**\n * Firewalls API\n *\n * Firewalls can limit the network access to or from your resources.\n * https://docs.hetzner.cloud/#firewalls\n *\n */\nexport class Firewalls extends BaseAPI {\n  private _actions: FirewallActions | null = null\n\n  /**\n   * Get the actions instance for managing firewall actions\n   */\n  get actions(): FirewallActions {\n    if (!this._actions) {\n      this._actions = new FirewallActions(this.token)\n    }\n    return this._actions\n  }\n\n  /**\n   * List all firewalls with optional filtering and pagination\n   * @param params Optional parameters for filtering and pagination\n   */\n  async getAll(\n    params?: ListFirewallsParams,\n  ): Promise<\n    { success: true; response: FirewallsResponse } | { success: false; response: APIError }\n  > {\n    const queryParams = new URLSearchParams()\n    if (params) {\n      Object.entries(params).forEach(([key, value]) => {\n        if (value !== undefined) {\n          queryParams.append(key, value.toString())\n        }\n      })\n    }\n\n    const queryString = queryParams.toString()\n    return this.request<FirewallsResponse>(`/firewalls${queryString ? `?${queryString}` : \"\"}`)\n  }\n\n  /**\n   * Create a new firewall\n   * @param params Parameters for creating the firewall\n   */\n  async create(\n    params: CreateFirewallParams,\n  ): Promise<\n    { success: true; response: FirewallCreateResponse } | { success: false; response: APIError }\n  > {\n    return this.request<FirewallCreateResponse>(\"/firewalls\", {\n      method: \"POST\",\n      body: JSON.stringify(params),\n    })\n  }\n\n  /**\n   * Get a specific firewall by ID\n   * @param id The firewall ID\n   */\n  async get(\n    id: number,\n  ): Promise<\n    { success: true; response: { firewall: Firewall } } | { success: false; response: APIError }\n  > {\n    return this.request<{ firewall: Firewall }>(`/firewalls/${id}`)\n  }\n\n  /**\n   * Update a firewall's properties\n   * @param id The firewall ID\n   * @param params Parameters to update\n   */\n  async update(\n    id: number,\n    params: UpdateFirewallParams,\n  ): Promise<\n    { success: true; response: { firewall: Firewall } } | { success: false; response: APIError }\n  > {\n    return this.request<{ firewall: Firewall }>(`/firewalls/${id}`, {\n      method: \"PUT\",\n      body: JSON.stringify(params),\n    })\n  }\n\n  /**\n   * Delete a firewall\n   * @param id The firewall ID\n   */\n  async delete(\n    id: number,\n  ): Promise<{ success: true; response: null } | { success: false; response: APIError }> {\n    return this.request<null>(`/firewalls/${id}`, {\n      method: \"DELETE\",\n    })\n  }\n}\n","import { BaseAPI } from \"../base\"\nimport type { APIError } from \"../types\"\nimport type {\n  AssignFloatingIPParams,\n  ChangeDNSPTRParams,\n  ChangeProtectionParams,\n  FloatingIPAction,\n  FloatingIPActionsResponse,\n  ListFloatingIPActionsParams,\n} from \"./types\"\n\nexport class FloatingIPActions extends BaseAPI {\n  /**\n   * List all actions for Floating IPs\n   * @param params Optional parameters for filtering and pagination\n   */\n  async getAll(\n    params?: ListFloatingIPActionsParams,\n  ): Promise<\n    { success: true; response: FloatingIPActionsResponse } | { success: false; response: APIError }\n  > {\n    const queryParams = new URLSearchParams()\n    if (params) {\n      Object.entries(params).forEach(([key, value]) => {\n        if (value !== undefined) {\n          queryParams.append(key, value.toString())\n        }\n      })\n    }\n    const queryString = queryParams.toString()\n    return this.request<FloatingIPActionsResponse>(\n      `/floating_ips/actions${queryString ? `?${queryString}` : \"\"}`,\n    )\n  }\n\n  /**\n   * Get a specific action for Floating IPs\n   * @param actionId The action ID\n   */\n  async get(\n    actionId: number,\n  ): Promise<\n    { success: true; response: FloatingIPAction } | { success: false; response: APIError }\n  > {\n    return this.request<FloatingIPAction>(`/floating_ips/actions/${actionId}`)\n  }\n\n  /**\n   * List actions for a specific Floating IP\n   * @param floatingIpId The Floating IP ID\n   * @param params Optional parameters for filtering and pagination\n   */\n  async listForFloatingIP(\n    floatingIpId: number,\n    params?: ListFloatingIPActionsParams, // Assuming similar params as listAll, adjust if different\n  ): Promise<\n    { success: true; response: FloatingIPActionsResponse } | { success: false; response: APIError }\n  > {\n    const queryParams = new URLSearchParams()\n    if (params) {\n      Object.entries(params).forEach(([key, value]) => {\n        if (value !== undefined) {\n          queryParams.append(key, value.toString())\n        }\n      })\n    }\n    const queryString = queryParams.toString()\n    return this.request<FloatingIPActionsResponse>(\n      `/floating_ips/${floatingIpId}/actions${queryString ? `?${queryString}` : \"\"}`,\n    )\n  }\n\n  /**\n   * Assign a Floating IP to a Server\n   * @param floatingIpId The Floating IP ID\n   * @param params Parameters for assigning the Floating IP\n   */\n  async assign(\n    floatingIpId: number,\n    params: AssignFloatingIPParams,\n  ): Promise<\n    { success: true; response: FloatingIPAction } | { success: false; response: APIError }\n  > {\n    return this.request<FloatingIPAction>(`/floating_ips/${floatingIpId}/actions/assign`, {\n      method: \"POST\",\n      body: JSON.stringify(params),\n    })\n  }\n\n  /**\n   * Unassign a Floating IP\n   * @param floatingIpId The Floating IP ID\n   */\n  async unassign(\n    floatingIpId: number,\n  ): Promise<\n    { success: true; response: FloatingIPAction } | { success: false; response: APIError }\n  > {\n    return this.request<FloatingIPAction>(`/floating_ips/${floatingIpId}/actions/unassign`, {\n      method: \"POST\",\n    })\n  }\n\n  /**\n   * Change Reverse DNS (PTR) for a Floating IP\n   * @param floatingIpId The Floating IP ID\n   * @param params Parameters for changing the DNS PTR record\n   */\n  async changeDNSPTR(\n    floatingIpId: number,\n    params: ChangeDNSPTRParams,\n  ): Promise<\n    { success: true; response: FloatingIPAction } | { success: false; response: APIError }\n  > {\n    return this.request<FloatingIPAction>(`/floating_ips/${floatingIpId}/actions/change_dns_ptr`, {\n      method: \"POST\",\n      body: JSON.stringify(params),\n    })\n  }\n\n  /**\n   * Change Floating IP Protection\n   * @param floatingIpId The Floating IP ID\n   * @param params Parameters for changing the protection status\n   */\n  async changeProtection(\n    floatingIpId: number,\n    params: ChangeProtectionParams,\n  ): Promise<\n    { success: true; response: FloatingIPAction } | { success: false; response: APIError }\n  > {\n    return this.request<FloatingIPAction>(\n      `/floating_ips/${floatingIpId}/actions/change_protection`,\n      {\n        method: \"POST\",\n        body: JSON.stringify(params),\n      },\n    )\n  }\n\n  /**\n   * Get a specific action for a specific Floating IP\n   * @param floatingIpId The Floating IP ID\n   * @param actionId The action ID\n   */\n  async getForFloatingIP(\n    floatingIpId: number,\n    actionId: number,\n  ): Promise<\n    { success: true; response: FloatingIPAction } | { success: false; response: APIError }\n  > {\n    return this.request<FloatingIPAction>(`/floating_ips/${floatingIpId}/actions/${actionId}`)\n  }\n}\n","import { BaseAPI } from \"../base\"\nimport type { APIError } from \"../types\"\nimport { FloatingIPActions } from \"./actions\"\nimport type {\n  CreateFloatingIPParams,\n  FloatingIP,\n  FloatingIPsResponse,\n  ListFloatingIPsParams,\n  UpdateFloatingIPParams,\n} from \"./types\"\n\nexport class FloatingIPs extends BaseAPI {\n  private _actions: FloatingIPActions | null = null\n\n  /**\n   * List all Floating IPs with optional filtering and pagination\n   * @param params Optional parameters for filtering and pagination\n   */\n  async getAll(\n    params?: ListFloatingIPsParams,\n  ): Promise<\n    { success: true; response: FloatingIPsResponse } | { success: false; response: APIError }\n  > {\n    const queryParams = new URLSearchParams()\n    if (params) {\n      Object.entries(params).forEach(([key, value]) => {\n        if (value !== undefined) {\n          queryParams.append(key, value.toString())\n        }\n      })\n    }\n\n    const queryString = queryParams.toString()\n    return this.request<FloatingIPsResponse>(`/floating_ips${queryString ? `?${queryString}` : \"\"}`)\n  }\n\n  /**\n   * Get a specific Floating IP by ID\n   * @param id The Floating IP ID\n   */\n  async get(\n    id: number,\n  ): Promise<{ success: true; response: FloatingIP } | { success: false; response: APIError }> {\n    return this.request<FloatingIP>(`/floating_ips/${id}`)\n  }\n\n  /**\n   * Create a new Floating IP\n   * @param params Parameters for creating the Floating IP\n   */\n  async create(\n    params: CreateFloatingIPParams,\n  ): Promise<\n    | { success: true; response: { floating_ip: FloatingIP } }\n    | { success: false; response: APIError }\n  > {\n    return this.request<{ floating_ip: FloatingIP }>(\"/floating_ips\", {\n      method: \"POST\",\n      body: JSON.stringify(params),\n    })\n  }\n\n  /**\n   * Update a Floating IP's properties\n   * @param id The Floating IP ID\n   * @param params Parameters to update\n   */\n  async update(\n    id: number,\n    params: UpdateFloatingIPParams,\n  ): Promise<\n    | { success: true; response: { floating_ip: FloatingIP } }\n    | { success: false; response: APIError }\n  > {\n    return this.request<{ floating_ip: FloatingIP }>(`/floating_ips/${id}`, {\n      method: \"PUT\",\n      body: JSON.stringify(params),\n    })\n  }\n\n  /**\n   * Delete a Floating IP\n   * @param id The Floating IP ID\n   */\n  async delete(\n    id: number,\n  ): Promise<{ success: true; response: null } | { success: false; response: APIError }> {\n    return this.request<null>(`/floating_ips/${id}`, {\n      method: \"DELETE\",\n    })\n  }\n\n  get actions(): FloatingIPActions {\n    if (!this._actions) {\n      this._actions = new FloatingIPActions(this.token)\n    }\n    return this._actions\n  }\n}\n","import { BaseAPI } from \"../base\"\nimport type { APIError } from \"../types\"\nimport type { Datacenter, DatacentersResponse, Location, LocationsResponse } from \"./types\"\n\ntype SortableLocationField = \"id\" | \"id:asc\" | \"id:desc\" | \"name\" | \"name:asc\" | \"name:desc\"\n\nexport interface ListLocationsParams {\n  name?: string\n  sort?: SortableLocationField\n  page?: number\n  per_page?: number\n}\n\n/**\n * Locations API\n *\n * Datacenters are organized by Locations. Datacenters in the same Location are connected with very low latency links.\n * https://docs.hetzner.cloud/#locations\n *\n */\nexport class Locations extends BaseAPI {\n  /**\n   * List all locations with optional filtering and pagination\n   * @param params Optional parameters for filtering and pagination\n   */\n  async getAll(\n    params?: ListLocationsParams,\n  ): Promise<\n    { success: true; response: LocationsResponse } | { success: false; response: APIError }\n  > {\n    const queryParams = new URLSearchParams()\n    if (params) {\n      Object.entries(params).forEach(([key, value]) => {\n        if (value !== undefined) {\n          queryParams.append(key, value.toString())\n        }\n      })\n    }\n\n    const queryString = queryParams.toString()\n    return this.request<LocationsResponse>(`/locations${queryString ? `?${queryString}` : \"\"}`)\n  }\n\n  /**\n   * Get a specific location by ID\n   * @param id The location ID\n   */\n  async get(\n    id: number,\n  ): Promise<{ success: true; response: Location } | { success: false; response: APIError }> {\n    return this.request<Location>(`/locations/${id}`)\n  }\n}\n\nexport class Datacenters extends BaseAPI {\n  /**\n   * List all datacenters with optional filtering and pagination\n   * @param params Optional parameters for filtering and pagination\n   */\n  async getAll(\n    params?: ListLocationsParams,\n  ): Promise<\n    { success: true; response: DatacentersResponse } | { success: false; response: APIError }\n  > {\n    const queryParams = new URLSearchParams()\n    if (params) {\n      Object.entries(params).forEach(([key, value]) => {\n        if (value !== undefined) {\n          queryParams.append(key, value.toString())\n        }\n      })\n    }\n\n    const queryString = queryParams.toString()\n    return this.request<DatacentersResponse>(`/datacenters${queryString ? `?${queryString}` : \"\"}`)\n  }\n\n  /**\n   * Get a specific datacenter by ID\n   * @param id The datacenter ID\n   */\n  async get(\n    id: number,\n  ): Promise<{ success: true; response: Datacenter } | { success: false; response: APIError }> {\n    return this.request<Datacenter>(`/datacenters/${id}`)\n  }\n}\n","import { BaseAPI } from \"../base\"\nimport type { APIError, BaseAction } from \"../types\"\nimport type {\n  AddRouteNetworkParams,\n  AddSubnetNetworkParams,\n  ChangeIPRangeNetworkParams,\n  ChangeProtectionNetworkParams,\n  DeleteRouteNetworkParams,\n  DeleteSubnetNetworkParams,\n  NetworkActionsResponse,\n  ListNetworkActionsParams,\n} from \"./types\"\n\n/**\n * Network Actions API\n *\n * Network actions are used to manage networks.\n * https://docs.hetzner.cloud/#networks-actions\n *\n */\nexport class NetworkActions extends BaseAPI {\n  /**\n   * List all actions for Networks\n   * @param params Optional parameters for filtering and pagination\n   */\n  async getAll(\n    params?: ListNetworkActionsParams,\n  ): Promise<\n    { success: true; response: NetworkActionsResponse } | { success: false; response: APIError }\n  > {\n    const queryParams = new URLSearchParams()\n    if (params) {\n      Object.entries(params).forEach(([key, value]) => {\n        if (value !== undefined) {\n          queryParams.append(key, value.toString())\n        }\n      })\n    }\n    const queryString = queryParams.toString()\n    return this.request<NetworkActionsResponse>(\n      `/networks/actions${queryString ? `?${queryString}` : \"\"}`,\n    )\n  }\n\n  /**\n   * Get a specific action for Networks\n   * @param actionId The action ID\n   */\n  async get(\n    actionId: number,\n  ): Promise<\n    { success: true; response: { actions: BaseAction } } | { success: false; response: APIError }\n  > {\n    return this.request<{ actions: BaseAction }>(`/networks/actions/${actionId}`)\n  }\n\n  /**\n   * List actions for a specific Network\n   * @param networkId The Network ID\n   * @param params Optional parameters for filtering and pagination\n   */\n  async listForNetwork(\n    networkId: number,\n    params?: ListNetworkActionsParams,\n  ): Promise<\n    { success: true; response: NetworkActionsResponse } | { success: false; response: APIError }\n  > {\n    const queryParams = new URLSearchParams()\n    if (params) {\n      Object.entries(params).forEach(([key, value]) => {\n        if (value !== undefined) {\n          queryParams.append(key, value.toString())\n        }\n      })\n    }\n    const queryString = queryParams.toString()\n    return this.request<NetworkActionsResponse>(\n      `/networks/${networkId}/actions${queryString ? `?${queryString}` : \"\"}`,\n    )\n  }\n\n  /**\n   * Get a specific action for a specific Network\n   * @param networkId The Network ID\n   * @param actionId The action ID\n   */\n  async getForNetwork(\n    networkId: number,\n    actionId: number,\n  ): Promise<\n    { success: true; response: { actions: BaseAction } } | { success: false; response: APIError }\n  > {\n    return this.request<{ actions: BaseAction }>(`/networks/${networkId}/actions/${actionId}`)\n  }\n\n  /**\n   * Add a route to a Network\n   * @param networkId The Network ID\n   * @param params Parameters for adding the route\n   */\n  async addRoute(\n    networkId: number,\n    params: AddRouteNetworkParams,\n  ): Promise<\n    { success: true; response: { actions: BaseAction } } | { success: false; response: APIError }\n  > {\n    return this.request<{ actions: BaseAction }>(`/networks/${networkId}/actions/add_route`, {\n      method: \"POST\",\n      body: JSON.stringify(params),\n    })\n  }\n\n  /**\n   * Delete a route from a Network\n   * @param networkId The Network ID\n   * @param params Parameters for deleting the route\n   */\n  async deleteRoute(\n    networkId: number,\n    params: DeleteRouteNetworkParams,\n  ): Promise<\n    { success: true; response: { actions: BaseAction } } | { success: false; response: APIError }\n  > {\n    return this.request<{ actions: BaseAction }>(`/networks/${networkId}/actions/delete_route`, {\n      method: \"POST\",\n      body: JSON.stringify(params),\n    })\n  }\n\n  /**\n   * Add a subnet to a Network\n   * @param networkId The Network ID\n   * @param params Parameters for adding the subnet\n   */\n  async addSubnet(\n    networkId: number,\n    params: AddSubnetNetworkParams,\n  ): Promise<\n    { success: true; response: { actions: BaseAction } } | { success: false; response: APIError }\n  > {\n    return this.request<{ actions: BaseAction }>(`/networks/${networkId}/actions/add_subnet`, {\n      method: \"POST\",\n      body: JSON.stringify(params),\n    })\n  }\n\n  /**\n   * Delete a subnet from a Network\n   * @param networkId The Network ID\n   * @param params Parameters for deleting the subnet\n   */\n  async deleteSubnet(\n    networkId: number,\n    params: DeleteSubnetNetworkParams,\n  ): Promise<\n    { success: true; response: { actions: BaseAction } } | { success: false; response: APIError }\n  > {\n    return this.request<{ actions: BaseAction }>(`/networks/${networkId}/actions/delete_subnet`, {\n      method: \"POST\",\n      body: JSON.stringify(params),\n    })\n  }\n\n  /**\n   * Change the IP range of a Network\n   * @param networkId The Network ID\n   * @param params Parameters for changing the IP range\n   */\n  async changeIPRange(\n    networkId: number,\n    params: ChangeIPRangeNetworkParams,\n  ): Promise<\n    { success: true; response: { actions: BaseAction } } | { success: false; response: APIError }\n  > {\n    return this.request<{ actions: BaseAction }>(`/networks/${networkId}/actions/change_ip_range`, {\n      method: \"POST\",\n      body: JSON.stringify(params),\n    })\n  }\n\n  /**\n   * Change the protection status of a Network\n   * @param networkId The Network ID\n   * @param params Parameters for changing the protection status\n   */\n  async changeProtection(\n    networkId: number,\n    params: ChangeProtectionNetworkParams,\n  ): Promise<\n    { success: true; response: { actions: BaseAction } } | { success: false; response: APIError }\n  > {\n    return this.request<{ actions: BaseAction }>(\n      `/networks/${networkId}/actions/change_protection`,\n      {\n        method: \"POST\",\n        body: JSON.stringify(params),\n      },\n    )\n  }\n}\n","import { BaseAPI } from \"../base\"\nimport type { APIError } from \"../types\"\nimport { NetworkActions } from \"./actions\"\nimport type {\n  CreateNetworkParams,\n  ListNetworksParams,\n  Network,\n  NetworksResponse,\n  UpdateNetworkParams,\n} from \"./types\"\n\n/**\n * Networks API\n *\n * Networks is a private networks feature. These Networks are optional and they coexist with the public network that every Server has by default.\n * https://docs.hetzner.cloud/#networks\n *\n */\nexport class Networks extends BaseAPI {\n  private _actions: NetworkActions | null = null\n\n  /**\n   * List all Networks with optional filtering and pagination\n   * @param params Optional parameters for filtering and pagination\n   */\n  async getAll(\n    params?: ListNetworksParams,\n  ): Promise<\n    { success: true; response: NetworksResponse } | { success: false; response: APIError }\n  > {\n    const queryParams = new URLSearchParams()\n    if (params) {\n      Object.entries(params).forEach(([key, value]) => {\n        if (value !== undefined) {\n          queryParams.append(key, value.toString())\n        }\n      })\n    }\n    const queryString = queryParams.toString()\n    return this.request<NetworksResponse>(`/networks${queryString ? `?${queryString}` : \"\"}`)\n  }\n\n  /**\n   * Create a new Network\n   * @param params Parameters for creating the Network\n   */\n  async create(\n    params: CreateNetworkParams,\n  ): Promise<\n    { success: true; response: { network: Network } } | { success: false; response: APIError }\n  > {\n    return this.request<{ network: Network }>(\"/networks\", {\n      method: \"POST\",\n      body: JSON.stringify(params),\n    })\n  }\n\n  /**\n   * Get a specific Network by ID\n   * @param id The Network ID\n   */\n  async get(\n    id: number,\n  ): Promise<\n    { success: true; response: { network: Network } } | { success: false; response: APIError }\n  > {\n    return this.request<{ network: Network }>(`/networks/${id}`)\n  }\n\n  /**\n   * Update a Network's properties\n   * @param id The Network ID\n   * @param params Parameters to update\n   */\n  async update(\n    id: number,\n    params: UpdateNetworkParams,\n  ): Promise<\n    { success: true; response: { network: Network } } | { success: false; response: APIError }\n  > {\n    return this.request<{ network: Network }>(`/networks/${id}`, {\n      method: \"PUT\",\n      body: JSON.stringify(params),\n    })\n  }\n\n  /**\n   * Delete a Network\n   * @param id The Network ID\n   */\n  async delete(\n    id: number,\n  ): Promise<{ success: true; response: null } | { success: false; response: APIError }> {\n    return this.request<null>(`/networks/${id}`, {\n      method: \"DELETE\",\n    })\n  }\n\n  get actions(): NetworkActions {\n    if (!this._actions) {\n      this._actions = new NetworkActions(this.token)\n    }\n    return this._actions\n  }\n}\n","import { BaseAPI } from \"../base\"\nimport type { APIError } from \"../types\"\nimport type { CertificateActionsResponse, CertificateActionResponse } from \"./types\"\n\nexport interface ListCertificateActionsParams {\n  id?: number[]\n  sort?: Array<\n    | \"id\"\n    | \"command\"\n    | \"status\"\n    | \"started\"\n    | \"finished\"\n    | \"id:asc\"\n    | \"id:desc\"\n    | \"command:asc\"\n    | \"command:desc\"\n    | \"status:asc\"\n    | \"status:desc\"\n    | \"started:asc\"\n    | \"started:desc\"\n    | \"finished:asc\"\n    | \"finished:desc\"\n  >\n  status?: Array<\"running\" | \"success\" | \"error\">\n  page?: number\n  per_page?: number\n}\n\n/**\n * Certificate Actions API\n *\n * Actions are the individual operations that can be performed on a certificate.\n * https://docs.hetzner.cloud/#certificate-actions\n *\n */\nexport class CertificateActions extends BaseAPI {\n  /**\n   * Get all actions for all certificates\n   * @param params Optional parameters for filtering and pagination\n   */\n  async getAll(\n    params?: ListCertificateActionsParams,\n  ): Promise<\n    { success: true; response: CertificateActionsResponse } | { success: false; response: APIError }\n  > {\n    const queryParams = new URLSearchParams()\n    if (params) {\n      Object.entries(params).forEach(([key, value]) => {\n        if (Array.isArray(value)) {\n          value.forEach((v) => queryParams.append(key, v.toString()))\n        } else if (value !== undefined) {\n          queryParams.append(key, value.toString())\n        }\n      })\n    }\n\n    const queryString = queryParams.toString()\n    return this.request<CertificateActionsResponse>(\n      `/certificates/actions${queryString ? `?${queryString}` : \"\"}`,\n    )\n  }\n\n  /**\n   * Get a specific action\n   * @param actionId The action ID\n   */\n  async get(\n    actionId: number,\n  ): Promise<\n    { success: true; response: CertificateActionResponse } | { success: false; response: APIError }\n  > {\n    return this.request<CertificateActionResponse>(`/certificates/actions/${actionId}`)\n  }\n\n  /**\n   * Get all actions for a specific certificate\n   * @param certificateId The certificate ID\n   * @param params Optional parameters for filtering and pagination\n   */\n  async listForCertificate(\n    certificateId: number,\n    params?: Omit<ListCertificateActionsParams, \"id\">,\n  ): Promise<\n    { success: true; response: CertificateActionsResponse } | { success: false; response: APIError }\n  > {\n    const queryParams = new URLSearchParams()\n    if (params) {\n      Object.entries(params).forEach(([key, value]) => {\n        if (Array.isArray(value)) {\n          value.forEach((v) => queryParams.append(key, v.toString()))\n        } else if (value !== undefined) {\n          queryParams.append(key, value.toString())\n        }\n      })\n    }\n\n    const queryString = queryParams.toString()\n    return this.request<CertificateActionsResponse>(\n      `/certificates/${certificateId}/actions${queryString ? `?${queryString}` : \"\"}`,\n    )\n  }\n\n  /**\n   * Get a specific action for a certificate\n   * @param certificateId The certificate ID\n   * @param actionId The action ID\n   */\n  async getForCertificate(\n    certificateId: number,\n    actionId: number,\n  ): Promise<\n    { success: true; response: CertificateActionResponse } | { success: false; response: APIError }\n  > {\n    return this.request<CertificateActionResponse>(\n      `/certificates/${certificateId}/actions/${actionId}`,\n    )\n  }\n\n  /**\n   * Retry issuance or renewal of a certificate\n   * @param certificateId The certificate ID\n   */\n  async retry(\n    certificateId: number,\n  ): Promise<\n    { success: true; response: CertificateActionResponse } | { success: false; response: APIError }\n  > {\n    return this.request<CertificateActionResponse>(`/certificates/${certificateId}/actions/retry`, {\n      method: \"POST\",\n    })\n  }\n}\n","import { BaseAPI } from \"../base\"\nimport type { APIError } from \"../types\"\nimport { CertificateActions } from \"./actions\"\nimport type {\n  Certificate,\n  CertificatesResponse,\n  CreateCertificateParams,\n  UpdateCertificateParams,\n} from \"./types\"\n\nexport interface ListCertificatesParams {\n  name?: string\n  label_selector?: string\n  sort?: \"id\" | \"id:asc\" | \"id:desc\" | \"name\" | \"name:asc\" | \"name:desc\"\n  page?: number\n  per_page?: number\n}\n\nexport class Certificates extends BaseAPI {\n  private _actions: CertificateActions | null = null\n\n  /**\n   * List all certificates with optional filtering and pagination\n   * @param params Optional parameters for filtering and pagination\n   */\n  async getAll(\n    params?: ListCertificatesParams,\n  ): Promise<\n    { success: true; response: CertificatesResponse } | { success: false; response: APIError }\n  > {\n    const queryParams = new URLSearchParams()\n    if (params) {\n      Object.entries(params).forEach(([key, value]) => {\n        if (value !== undefined) {\n          queryParams.append(key, value.toString())\n        }\n      })\n    }\n\n    const queryString = queryParams.toString()\n    return this.request<CertificatesResponse>(\n      `/certificates${queryString ? `?${queryString}` : \"\"}`,\n    )\n  }\n\n  /**\n   * Get a specific certificate by ID\n   * @param id The certificate ID\n   */\n  async get(\n    id: number,\n  ): Promise<{ success: true; response: Certificate } | { success: false; response: APIError }> {\n    return this.request<Certificate>(`/certificates/${id}`)\n  }\n\n  /**\n   * Create a new certificate\n   * @param params Parameters for creating the certificate\n   */\n  async create(\n    params: CreateCertificateParams,\n  ): Promise<{ success: true; response: Certificate } | { success: false; response: APIError }> {\n    return this.request<Certificate>(\"/certificates\", {\n      method: \"POST\",\n      body: JSON.stringify(params),\n    })\n  }\n\n  /**\n   * Update a certificate's properties\n   * @param id The certificate ID\n   * @param params Parameters to update\n   */\n  async update(\n    id: number,\n    params: UpdateCertificateParams,\n  ): Promise<{ success: true; response: Certificate } | { success: false; response: APIError }> {\n    return this.request<Certificate>(`/certificates/${id}`, {\n      method: \"PUT\",\n      body: JSON.stringify(params),\n    })\n  }\n\n  /**\n   * Delete a certificate\n   * @param id The certificate ID\n   */\n  async delete(\n    id: number,\n  ): Promise<{ success: true; response: null } | { success: false; response: APIError }> {\n    return this.request<null>(`/certificates/${id}`, {\n      method: \"DELETE\",\n    })\n  }\n\n  get actions(): CertificateActions {\n    if (!this._actions) {\n      this._actions = new CertificateActions(this.token)\n    }\n    return this._actions\n  }\n}\n","import { BaseAPI } from \"../base\"\nimport type { APIError } from \"../types\"\nimport type { SSHKey, SSHKeysResponse, CreateSSHKeyParams, UpdateSSHKeyParams } from \"./types\"\nexport * from \"./certificates\"\nexport * from \"./actions\"\n\nexport interface ListSSHKeysParams {\n  name?: string\n  fingerprint?: string\n  label_selector?: string\n  sort?: \"id\" | \"id:asc\" | \"id:desc\" | \"name\" | \"name:asc\" | \"name:desc\"\n  page?: number\n  per_page?: number\n}\n\n/**\n * SSH Keys API\n *\n * SSH keys are used to authenticate with the server.\n * https://docs.hetzner.cloud/#ssh-keys\n *\n */\nexport class SSHKeys extends BaseAPI {\n  /**\n   * List all SSH keys with optional filtering and pagination\n   * @param params Optional parameters for filtering and pagination\n   */\n  async getAll(\n    params?: ListSSHKeysParams,\n  ): Promise<\n    { success: true; response: SSHKeysResponse } | { success: false; response: APIError }\n  > {\n    const queryParams = new URLSearchParams()\n    if (params) {\n      Object.entries(params).forEach(([key, value]) => {\n        if (value !== undefined) {\n          queryParams.append(key, value.toString())\n        }\n      })\n    }\n\n    const queryString = queryParams.toString()\n    return this.request<SSHKeysResponse>(`/ssh_keys${queryString ? `?${queryString}` : \"\"}`)\n  }\n\n  /**\n   * Get a specific SSH key by ID\n   * @param id The SSH key ID\n   */\n  async get(\n    id: number,\n  ): Promise<{ success: true; response: { ssh_key: SSHKey } } | { success: false; response: APIError }> {\n    return this.request<{ ssh_key: SSHKey }>(`/ssh_keys/${id}`)\n  }\n\n  /**\n   * Create a new SSH key\n   * @param params Parameters for creating the SSH key\n   */\n  async create(\n    params: CreateSSHKeyParams,\n  ): Promise<{ success: true; response: { ssh_key: SSHKey } } | { success: false; response: APIError }> {\n    return this.request<{ ssh_key: SSHKey }>(\"/ssh_keys\", {\n      method: \"POST\",\n      body: JSON.stringify(params),\n    })\n  }\n\n  /**\n   * Update an SSH key's properties\n   * @param id The SSH key ID\n   * @param params Parameters to update\n   */\n  async update(\n    id: number,\n    params: UpdateSSHKeyParams,\n  ): Promise<{ success: true; response: { ssh_key: SSHKey } } | { success: false; response: APIError }> {\n    return this.request<{ ssh_key: SSHKey }>(`/ssh_keys/${id}`, {\n      method: \"PUT\",\n      body: JSON.stringify(params),\n    })\n  }\n\n  /**\n   * Delete an SSH key\n   * @param id The SSH key ID\n   */\n  async delete(\n    id: number,\n  ): Promise<{ success: true; response: null } | { success: false; response: APIError }> {\n    return this.request<null>(`/ssh_keys/${id}`, {\n      method: \"DELETE\",\n    })\n  }\n}\n","import { BaseAPI } from \"../base\"\nimport type { APIError, BaseAction } from \"../types\"\nimport type {\n  AttachVolumeParams,\n  ChangeVolumeProtectionParams,\n  ListVolumeActionsParams,\n  ResizeVolumeParams,\n  VolumeActionsResponse,\n} from \"./types\"\n\nexport class VolumeActions extends BaseAPI {\n  /**\n   * List all actions for Volumes (globally, not for a specific volume)\n   * @param params Optional parameters for filtering and pagination\n   */\n  async getAll(\n    params?: ListVolumeActionsParams,\n  ): Promise<\n    { success: true; response: VolumeActionsResponse } | { success: false; response: APIError }\n  > {\n    const queryParams = new URLSearchParams()\n    if (params) {\n      Object.entries(params).forEach(([key, value]) => {\n        if (value !== undefined) {\n          if (Array.isArray(value)) {\n            value.forEach((v) => queryParams.append(key, v.toString()))\n          } else {\n            queryParams.append(key, value.toString())\n          }\n        }\n      })\n    }\n    const queryString = queryParams.toString()\n    return this.request<VolumeActionsResponse>(\n      `/volumes/actions${queryString ? `?${queryString}` : \"\"}`,\n    )\n  }\n\n  /**\n   * Get a specific action for Volumes (globally)\n   * @param actionId The action ID\n   */\n  async getGlobalAction(\n    actionId: number,\n  ): Promise<\n    { success: true; response: { action: BaseAction } } | { success: false; response: APIError }\n  > {\n    // Assuming a /volumes/actions/{id} endpoint, adjust if different\n    return this.request<{ action: BaseAction }>(`/volumes/actions/${actionId}`)\n  }\n\n  /**\n   * List actions for a specific Volume\n   * @param volumeId The Volume ID\n   * @param params Optional parameters for filtering and pagination\n   */\n  async listForVolume(\n    volumeId: number,\n    params?: ListVolumeActionsParams,\n  ): Promise<\n    { success: true; response: VolumeActionsResponse } | { success: false; response: APIError }\n  > {\n    const queryParams = new URLSearchParams()\n    if (params) {\n      Object.entries(params).forEach(([key, value]) => {\n        if (value !== undefined) {\n          if (Array.isArray(value)) {\n            value.forEach((v) => queryParams.append(key, v.toString()))\n          } else {\n            queryParams.append(key, value.toString())\n          }\n        }\n      })\n    }\n    const queryString = queryParams.toString()\n    return this.request<VolumeActionsResponse>(\n      `/volumes/${volumeId}/actions${queryString ? `?${queryString}` : \"\"}`,\n    )\n  }\n\n  /**\n   * Get a specific action for a specific Volume\n   * @param volumeId The Volume ID\n   * @param actionId The action ID\n   */\n  async getAction(\n    volumeId: number,\n    actionId: number,\n  ): Promise<\n    { success: true; response: { action: BaseAction } } | { success: false; response: APIError }\n  > {\n    return this.request<{ action: BaseAction }>(`/volumes/${volumeId}/actions/${actionId}`)\n  }\n\n  /**\n   * Attach a Volume to a Server\n   * @param volumeId The Volume ID\n   * @param params Parameters for attaching the volume\n   */\n  async attach(\n    volumeId: number,\n    params: AttachVolumeParams,\n  ): Promise<\n    { success: true; response: { action: BaseAction } } | { success: false; response: APIError }\n  > {\n    return this.request<{ action: BaseAction }>(`/volumes/${volumeId}/actions/attach`, {\n      method: \"POST\",\n      body: JSON.stringify(params),\n    })\n  }\n\n  /**\n   * Detach a Volume from a Server\n   * @param volumeId The Volume ID\n   */\n  async detach(\n    volumeId: number,\n  ): Promise<\n    { success: true; response: { action: BaseAction } } | { success: false; response: APIError }\n  > {\n    return this.request<{ action: BaseAction }>(`/volumes/${volumeId}/actions/detach`, {\n      method: \"POST\",\n    })\n  }\n\n  /**\n   * Resize a Volume\n   * @param volumeId The Volume ID\n   * @param params Parameters for resizing the volume\n   */\n  async resize(\n    volumeId: number,\n    params: ResizeVolumeParams,\n  ): Promise<\n    { success: true; response: { action: BaseAction } } | { success: false; response: APIError }\n  > {\n    return this.request<{ action: BaseAction }>(`/volumes/${volumeId}/actions/resize`, {\n      method: \"POST\",\n      body: JSON.stringify(params),\n    })\n  }\n\n  /**\n   * Change Volume Protection\n   * @param volumeId The Volume ID\n   * @param params Parameters for changing the protection status\n   */\n  async changeProtection(\n    volumeId: number,\n    params: ChangeVolumeProtectionParams,\n  ): Promise<\n    { success: true; response: { action: BaseAction } } | { success: false; response: APIError }\n  > {\n    return this.request<{ action: BaseAction }>(`/volumes/${volumeId}/actions/change_protection`, {\n      method: \"POST\",\n      body: JSON.stringify(params),\n    })\n  }\n}\n","import { BaseAPI } from \"../base\"\nimport type { APIError, BaseAction } from \"../types\"\nimport { VolumeActions } from \"./actions\"\nimport type {\n  CreateVolumeParams,\n  ListVolumesParams,\n  UpdateVolumeParams,\n  Volume,\n  VolumesResponse,\n} from \"./types\"\n\n/**\n * Volumes API\n *\n * Volumes can be used to store data on a server.\n * https://docs.hetzner.cloud/#volumes\n *\n */\nexport class Volumes extends BaseAPI {\n  private _actions: VolumeActions | null = null\n\n  /**\n   * List all Volumes with optional filtering and pagination\n   * @param params Optional parameters for filtering and pagination\n   */\n  async getAll(\n    params?: ListVolumesParams,\n  ): Promise<\n    { success: true; response: VolumesResponse } | { success: false; response: APIError }\n  > {\n    const queryParams = new URLSearchParams()\n    if (params) {\n      Object.entries(params).forEach(([key, value]) => {\n        if (value !== undefined) {\n          if (Array.isArray(value)) {\n            value.forEach((v) => queryParams.append(key, v.toString()))\n          } else {\n            queryParams.append(key, value.toString())\n          }\n        }\n      })\n    }\n    const queryString = queryParams.toString()\n    return this.request<VolumesResponse>(`/volumes${queryString ? `?${queryString}` : \"\"}`)\n  }\n\n  /**\n   * Get a specific Volume by ID\n   * @param id The Volume ID\n   */\n  async get(\n    id: number,\n  ): Promise<\n    { success: true; response: { volume: Volume } } | { success: false; response: APIError }\n  > {\n    return this.request<{ volume: Volume }>(`/volumes/${id}`)\n  }\n\n  /**\n   * Create a new Volume\n   * @param params Parameters for creating the Volume\n   */\n  async create(\n    params: CreateVolumeParams,\n  ): Promise<\n    | { success: true; response: { volume: Volume; action?: BaseAction } }\n    | { success: false; response: APIError }\n  > {\n    // The API might return an action object along with the volume upon creation\n    return this.request<{ volume: Volume; action?: BaseAction }>(\"/volumes\", {\n      method: \"POST\",\n      body: JSON.stringify(params),\n    })\n  }\n\n  /**\n   * Update a Volume's properties\n   * @param id The Volume ID\n   * @param params Parameters to update\n   */\n  async update(\n    id: number,\n    params: UpdateVolumeParams,\n  ): Promise<\n    { success: true; response: { volume: Volume } } | { success: false; response: APIError }\n  > {\n    return this.request<{ volume: Volume }>(`/volumes/${id}`, {\n      method: \"PUT\",\n      body: JSON.stringify(params),\n    })\n  }\n\n  /**\n   * Delete a Volume\n   * @param id The Volume ID\n   */\n  async delete(\n    id: number,\n  ): Promise<{ success: true; response: null } | { success: false; response: APIError }> {\n    return this.request<null>(`/volumes/${id}`, {\n      method: \"DELETE\",\n    })\n  }\n\n  get actions(): VolumeActions {\n    if (!this._actions) {\n      this._actions = new VolumeActions(this.token)\n    }\n    return this._actions\n  }\n}\n","import { BaseAPI } from \"../base\"\nimport type { APIError } from \"../types\"\nimport type {\n  AddServiceLoadBalancerParams,\n  AddTargetLoadBalancerParams,\n  AttachToNetworkLoadBalancerParams,\n  ChangeAlgorithmLoadBalancerParams,\n  ChangeDNSPTRLoadBalancerParams,\n  ChangeProtectionLoadBalancerParams,\n  ChangeTypeLoadBalancerParams,\n  DeleteServiceLoadBalancerParams,\n  DetachFromNetworkLoadBalancerParams,\n  ListLoadBalancerActionsParams,\n  LoadBalancerActionResponse, // For single action responses\n  LoadBalancerActionsResponse, // For list action responses\n  RemoveTargetLoadBalancerParams,\n  UpdateServiceLoadBalancerParams,\n} from \"./types\"\n\n/**\n * Load Balancer Actions API\n *\n * Load balancer actions are used to manage load balancers.\n * https://docs.hetzner.cloud/#load-balancers-actions\n *\n */\nexport class LoadBalancerActions extends BaseAPI {\n  /**\n   * List all global actions for Load Balancers\n   * @param params Optional parameters for filtering and pagination\n   */\n  async getAllGlobal(\n    params?: ListLoadBalancerActionsParams,\n  ): Promise<\n    | { success: true; response: LoadBalancerActionsResponse }\n    | { success: false; response: APIError }\n  > {\n    const queryParams = new URLSearchParams()\n    if (params) {\n      Object.entries(params).forEach(([key, value]) => {\n        if (value !== undefined) {\n          if (Array.isArray(value)) {\n            value.forEach((v) => queryParams.append(key, v.toString()))\n          } else {\n            queryParams.append(key, value.toString())\n          }\n        }\n      })\n    }\n    const queryString = queryParams.toString()\n    return this.request<LoadBalancerActionsResponse>(\n      `/load_balancers/actions${queryString ? `?${queryString}` : \"\"}`,\n    )\n  }\n\n  /**\n   * Get a specific global action for Load Balancers\n   * @param actionId The action ID\n   */\n  async getGlobalAction(\n    actionId: number,\n  ): Promise<\n    { success: true; response: LoadBalancerActionResponse } | { success: false; response: APIError }\n  > {\n    return this.request<LoadBalancerActionResponse>(`/load_balancers/actions/${actionId}`)\n  }\n\n  /**\n   * List actions for a specific Load Balancer\n   * @param loadBalancerId The Load Balancer ID\n   * @param params Optional parameters for filtering and pagination\n   */\n  async listForLoadBalancer(\n    loadBalancerId: number,\n    params?: ListLoadBalancerActionsParams,\n  ): Promise<\n    | { success: true; response: LoadBalancerActionsResponse }\n    | { success: false; response: APIError }\n  > {\n    const queryParams = new URLSearchParams()\n    if (params) {\n      Object.entries(params).forEach(([key, value]) => {\n        if (value !== undefined) {\n          if (Array.isArray(value)) {\n            value.forEach((v) => queryParams.append(key, v.toString()))\n          } else {\n            queryParams.append(key, value.toString())\n          }\n        }\n      })\n    }\n    const queryString = queryParams.toString()\n    return this.request<LoadBalancerActionsResponse>(\n      `/load_balancers/${loadBalancerId}/actions${queryString ? `?${queryString}` : \"\"}`,\n    )\n  }\n\n  /**\n   * Get a specific action for a specific Load Balancer\n   * @param loadBalancerId The Load Balancer ID\n   * @param actionId The action ID\n   */\n  async getAction(\n    loadBalancerId: number,\n    actionId: number,\n  ): Promise<\n    { success: true; response: LoadBalancerActionResponse } | { success: false; response: APIError }\n  > {\n    return this.request<LoadBalancerActionResponse>(\n      `/load_balancers/${loadBalancerId}/actions/${actionId}`,\n    )\n  }\n\n  async addService(\n    loadBalancerId: number,\n    params: AddServiceLoadBalancerParams,\n  ): Promise<\n    { success: true; response: LoadBalancerActionResponse } | { success: false; response: APIError }\n  > {\n    return this.request<LoadBalancerActionResponse>(\n      `/load_balancers/${loadBalancerId}/actions/add_service`,\n      { method: \"POST\", body: JSON.stringify(params) },\n    )\n  }\n\n  async updateService(\n    loadBalancerId: number,\n    params: UpdateServiceLoadBalancerParams,\n  ): Promise<\n    { success: true; response: LoadBalancerActionResponse } | { success: false; response: APIError }\n  > {\n    return this.request<LoadBalancerActionResponse>(\n      `/load_balancers/${loadBalancerId}/actions/update_service`,\n      { method: \"POST\", body: JSON.stringify(params) },\n    )\n  }\n\n  async deleteService(\n    loadBalancerId: number,\n    params: DeleteServiceLoadBalancerParams,\n  ): Promise<\n    { success: true; response: LoadBalancerActionResponse } | { success: false; response: APIError }\n  > {\n    return this.request<LoadBalancerActionResponse>(\n      `/load_balancers/${loadBalancerId}/actions/delete_service`,\n      { method: \"POST\", body: JSON.stringify(params) },\n    )\n  }\n\n  async addTarget(\n    loadBalancerId: number,\n    params: AddTargetLoadBalancerParams,\n  ): Promise<\n    { success: true; response: LoadBalancerActionResponse } | { success: false; response: APIError }\n  > {\n    return this.request<LoadBalancerActionResponse>(\n      `/load_balancers/${loadBalancerId}/actions/add_target`,\n      { method: \"POST\", body: JSON.stringify(params) },\n    )\n  }\n\n  async removeTarget(\n    loadBalancerId: number,\n    params: RemoveTargetLoadBalancerParams,\n  ): Promise<\n    { success: true; response: LoadBalancerActionResponse } | { success: false; response: APIError }\n  > {\n    return this.request<LoadBalancerActionResponse>(\n      `/load_balancers/${loadBalancerId}/actions/remove_target`,\n      { method: \"POST\", body: JSON.stringify(params) },\n    )\n  }\n\n  async attachToNetwork(\n    loadBalancerId: number,\n    params: AttachToNetworkLoadBalancerParams,\n  ): Promise<\n    { success: true; response: LoadBalancerActionResponse } | { success: false; response: APIError }\n  > {\n    return this.request<LoadBalancerActionResponse>(\n      `/load_balancers/${loadBalancerId}/actions/attach_to_network`,\n      { method: \"POST\", body: JSON.stringify(params) },\n    )\n  }\n\n  async detachFromNetwork(\n    loadBalancerId: number,\n    params: DetachFromNetworkLoadBalancerParams,\n  ): Promise<\n    { success: true; response: LoadBalancerActionResponse } | { success: false; response: APIError }\n  > {\n    return this.request<LoadBalancerActionResponse>(\n      `/load_balancers/${loadBalancerId}/actions/detach_from_network`,\n      { method: \"POST\", body: JSON.stringify(params) },\n    )\n  }\n\n  async changeAlgorithm(\n    loadBalancerId: number,\n    params: ChangeAlgorithmLoadBalancerParams,\n  ): Promise<\n    { success: true; response: LoadBalancerActionResponse } | { success: false; response: APIError }\n  > {\n    return this.request<LoadBalancerActionResponse>(\n      `/load_balancers/${loadBalancerId}/actions/change_algorithm`,\n      { method: \"POST\", body: JSON.stringify(params) },\n    )\n  }\n\n  async changeDNSPTR(\n    loadBalancerId: number,\n    params: ChangeDNSPTRLoadBalancerParams,\n  ): Promise<\n    { success: true; response: LoadBalancerActionResponse } | { success: false; response: APIError }\n  > {\n    return this.request<LoadBalancerActionResponse>(\n      `/load_balancers/${loadBalancerId}/actions/change_dns_ptr`,\n      { method: \"POST\", body: JSON.stringify(params) },\n    )\n  }\n\n  async changeProtection(\n    loadBalancerId: number,\n    params: ChangeProtectionLoadBalancerParams,\n  ): Promise<\n    { success: true; response: LoadBalancerActionResponse } | { success: false; response: APIError }\n  > {\n    return this.request<LoadBalancerActionResponse>(\n      `/load_balancers/${loadBalancerId}/actions/change_protection`,\n      { method: \"POST\", body: JSON.stringify(params) },\n    )\n  }\n\n  async changeType(\n    loadBalancerId: number,\n    params: ChangeTypeLoadBalancerParams,\n  ): Promise<\n    { success: true; response: LoadBalancerActionResponse } | { success: false; response: APIError }\n  > {\n    return this.request<LoadBalancerActionResponse>(\n      `/load_balancers/${loadBalancerId}/actions/change_type`,\n      { method: \"POST\", body: JSON.stringify(params) },\n    )\n  }\n\n  async enablePublicInterface(\n    loadBalancerId: number,\n  ): Promise<\n    { success: true; response: LoadBalancerActionResponse } | { success: false; response: APIError }\n  > {\n    return this.request<LoadBalancerActionResponse>(\n      `/load_balancers/${loadBalancerId}/actions/enable_public_interface`,\n      { method: \"POST\" },\n    )\n  }\n\n  async disablePublicInterface(\n    loadBalancerId: number,\n  ): Promise<\n    { success: true; response: LoadBalancerActionResponse } | { success: false; response: APIError }\n  > {\n    return this.request<LoadBalancerActionResponse>(\n      `/load_balancers/${loadBalancerId}/actions/disable_public_interface`,\n      { method: \"POST\" },\n    )\n  }\n}\n","import { BaseAPI } from \"../base\"\nimport type { APIError } from \"../types\"\nimport { LoadBalancerActions } from \"./actions\"\nimport type {\n  CreateLoadBalancerParams,\n  CreateLoadBalancerResponse,\n  GetLoadBalancerMetricsParams,\n  ListLoadBalancerTypesParams,\n  ListLoadBalancersParams,\n  LoadBalancerActionResponse,\n  LoadBalancerMetricsResponse,\n  LoadBalancerResponse,\n  LoadBalancerTypesResponse,\n  LoadBalancersResponse,\n  UpdateLoadBalancerParams,\n} from \"./types\"\n\n/**\n * Load Balancers API\n *\n * Load Balancers can be used to load balance traffic between multiple servers.\n * https://docs.hetzner.cloud/#load-balancers\n *\n */\nexport class LoadBalancers extends BaseAPI {\n  private _actions: LoadBalancerActions | null = null\n\n  /**\n   * List all Load Balancers\n   */\n  async getAll(\n    params?: ListLoadBalancersParams,\n  ): Promise<\n    { success: true; response: LoadBalancersResponse } | { success: false; response: APIError }\n  > {\n    const queryParams = new URLSearchParams()\n    if (params) {\n      Object.entries(params).forEach(([key, value]) => {\n        if (value !== undefined) {\n          queryParams.append(key, value.toString())\n        }\n      })\n    }\n    const queryString = queryParams.toString()\n    return this.request<LoadBalancersResponse>(\n      `/load_balancers${queryString ? `?${queryString}` : \"\"}`,\n    )\n  }\n\n  /**\n   * Create a new Load Balancer\n   */\n  async create(\n    params: CreateLoadBalancerParams,\n  ): Promise<\n    { success: true; response: CreateLoadBalancerResponse } | { success: false; response: APIError }\n  > {\n    return this.request<CreateLoadBalancerResponse>(\"/load_balancers\", {\n      method: \"POST\",\n      body: JSON.stringify(params),\n    })\n  }\n\n  /**\n   * Get a specific Load Balancer by ID\n   */\n  async get(\n    id: number,\n  ): Promise<\n    { success: true; response: LoadBalancerResponse } | { success: false; response: APIError }\n  > {\n    return this.request<LoadBalancerResponse>(`/load_balancers/${id}`)\n  }\n\n  /**\n   * Update a Load Balancer\n   */\n  async update(\n    id: number,\n    params: UpdateLoadBalancerParams,\n  ): Promise<\n    { success: true; response: LoadBalancerResponse } | { success: false; response: APIError }\n  > {\n    return this.request<LoadBalancerResponse>(`/load_balancers/${id}`, {\n      method: \"PUT\",\n      body: JSON.stringify(params),\n    })\n  }\n\n  /**\n   * Delete a Load Balancer\n   */\n  async delete(id: number): Promise<\n    | { success: true; response: null | LoadBalancerActionResponse } // Can return an action or 204\n    | { success: false; response: APIError }\n  > {\n    return this.request<null | LoadBalancerActionResponse>(`/load_balancers/${id}`, {\n      method: \"DELETE\",\n    })\n  }\n\n  /**\n   * Get Metrics for a Load Balancer\n   */\n  async getMetrics(\n    id: number,\n    params: GetLoadBalancerMetricsParams,\n  ): Promise<\n    | { success: true; response: LoadBalancerMetricsResponse }\n    | { success: false; response: APIError }\n  > {\n    const queryParams = new URLSearchParams()\n    Object.entries(params).forEach(([key, value]) => {\n      if (value !== undefined) {\n        queryParams.append(key, value.toString())\n      }\n    })\n    return this.request<LoadBalancerMetricsResponse>(\n      `/load_balancers/${id}/metrics?${queryParams.toString()}`,\n    )\n  }\n\n  // --- Load Balancer Type Methods ---\n  /**\n   * List all Load Balancer Types\n   */\n  async listTypes(\n    params?: ListLoadBalancerTypesParams,\n  ): Promise<\n    { success: true; response: LoadBalancerTypesResponse } | { success: false; response: APIError }\n  > {\n    const queryParams = new URLSearchParams()\n    if (params) {\n      Object.entries(params).forEach(([key, value]) => {\n        if (value !== undefined) {\n          queryParams.append(key, value.toString())\n        }\n      })\n    }\n    const queryString = queryParams.toString()\n    return this.request<LoadBalancerTypesResponse>(\n      `/load_balancer_types${queryString ? `?${queryString}` : \"\"}`,\n    )\n  }\n\n  /**\n   * Get a specific Load Balancer Type by ID\n   */\n  async getType(\n    id: number,\n  ): Promise<\n    { success: true; response: LoadBalancerTypesResponse } | { success: false; response: APIError }\n  > {\n    return this.request<LoadBalancerTypesResponse>(`/load_balancer_types/${id}`)\n  }\n\n  get actions(): LoadBalancerActions {\n    if (!this._actions) {\n      this._actions = new LoadBalancerActions(this.token)\n    }\n    return this._actions\n  }\n}\n","import { BaseAPI } from \"../base\"\nimport type { APIError } from \"../types\"\nimport type { Action, ActionsResponse } from \"./types\"\n\n/**\n * Actions API\n *\n * Actions show the results and progress of asynchronous requests to the API.\n * https://docs.hetzner.cloud/#actions\n *\n */\nexport class Actions extends BaseAPI {\n  /**\n   * Returns a list of Action objects, filtered by the provided ID.\n   * The API may return an array, even if the ID matches a single action.\n   */\n  async getAll(\n    id: number,\n  ): Promise<\n    { success: true; response: ActionsResponse } | { success: false; response: APIError }\n  > {\n    return this.request<ActionsResponse>(`/actions?id=${id}`)\n  }\n\n  /**\n   * Returns a specific Action object.\n   */\n  async get(\n    id: number,\n  ): Promise<{ success: true; response: Action } | { success: false; response: APIError }> {\n    return this.request<Action>(`/actions/${id}`)\n  }\n}\n","import type { Action } from \"../../actions/types\"\nimport { BaseAPI } from \"../../base\"\nimport type { APIError } from \"../../types\"\nimport type { ListImagesResponse, Image } from \"./types\"\n\nexport interface ListImagesParams {\n  type?: \"system\" | \"app\" | \"snapshot\" | \"backup\"\n  status?: \"available\" | \"creating\" | \"unavailable\"\n  bound_to?: string\n  include_deprecated?: boolean\n  sort?: \"id\" | \"id:asc\" | \"id:desc\" | \"name\" | \"name:asc\" | \"name:desc\"\n  name?: string\n  label_selector?: string\n  architecture?: \"x86\" | \"arm64\"\n  page?: number\n  per_page?: number\n}\n\nexport interface UpdateImageParams {\n  description?: string\n  type?: \"snapshot\"\n  labels?: Record<string, string>\n}\n\n/**\n * Images API\n *\n * Images are used to create servers.\n * https://docs.hetzner.cloud/#images\n */\nexport class Images extends BaseAPI {\n  /**\n   * List all images with optional filtering and pagination\n   * @param params Optional parameters for filtering and pagination\n   */\n  async getAll(\n    params?: ListImagesParams,\n  ): Promise<\n    { success: true; response: ListImagesResponse } | { success: false; response: APIError }\n  > {\n    const queryParams = new URLSearchParams()\n    if (params) {\n      Object.entries(params).forEach(([key, value]) => {\n        if (value !== undefined && value !== null && value !== \"\") {\n          queryParams.append(key, value.toString())\n        }\n      })\n    }\n\n    return this.request<ListImagesResponse>(`/images${queryParams ? `?${queryParams}` : \"\"}`)\n  }\n\n  /**\n   * Get an image by id\n   * @param id The id of the image\n   */\n  async get(\n    id: number,\n  ): Promise<\n    { success: true; response: { image: Image } } | { success: false; response: APIError }\n  > {\n    return this.request<{ image: Image }>(`/images/${id}`)\n  }\n\n  /**\n   * Update an image\n   * @param id The id of the image\n   * @param params The parameters for updating the image\n   */\n  async update(\n    id: number,\n    params: UpdateImageParams,\n  ): Promise<\n    { success: true; response: { image: Image } } | { success: false; response: APIError }\n  > {\n    return this.request<{ image: Image }>(`/images/${id}`, {\n      method: \"PUT\",\n      body: JSON.stringify(params),\n    })\n  }\n\n  /**\n   * Delete an image\n   * @param id The id of the image\n   */\n  async delete(\n    id: number,\n  ): Promise<{ success: true; response: Action } | { success: false; response: APIError }> {\n    return this.request<Action>(`/images/${id}`, {\n      method: \"DELETE\",\n    })\n  }\n}\n","import type { Action } from \"../../actions/types\"\nimport { BaseAPI } from \"../../base\"\nimport type { APIError } from \"../../types\"\nimport type {\n  CreatePrimaryIPResponse,\n  ListPrimaryIPResponse,\n  PrimaryIP as PrimaryIPType,\n} from \"./types\"\n\nexport interface ListPrimaryIPsParams {\n  name?: string\n  fingerprint?: string\n  label_selector?: string\n  sort?: \"id\" | \"id:asc\" | \"id:desc\" | \"name\" | \"name:asc\" | \"name:desc\"\n  page?: number\n  per_page?: number\n}\n\nexport interface CreatePrimaryIPParams {\n  name: string\n  type: \"ipv4\" | \"ipv6\"\n  assignee_type: string\n  assignee_id?: number | null\n  auto_delete?: boolean\n  datacenter?: string\n  labels?: Record<string, string>\n}\n\nexport interface UpdatePrimaryIPParams {\n  name?: string\n  labels?: Record<string, string>\n  auto_delete?: boolean\n}\n/**\n * Primary Ips API\n *\n * Primary IPs help you to create more flexible networking setups.\n * https://docs.hetzner.cloud/#primary-ips\n *\n */\n\nexport class PrimaryIP extends BaseAPI {\n  /**\n   * List all primary ips with optional filtering and pagination\n   * @param params Optional parameters for filtering and pagination\n   */\n  async getAll(\n    params?: ListPrimaryIPsParams,\n  ): Promise<\n    { success: true; response: ListPrimaryIPResponse } | { success: false; response: APIError }\n  > {\n    const queryParams = new URLSearchParams()\n    if (params) {\n      Object.entries(params).forEach(([key, value]) => {\n        if (value !== undefined && value !== null && value !== \"\") {\n          queryParams.append(key, value.toString())\n        }\n      })\n    }\n\n    return this.request<ListPrimaryIPResponse>(\n      `/primary_ips${queryParams ? `?${queryParams}` : \"\"}`,\n    )\n  }\n\n  /**\n   * Get a primary ip by id\n   * @param id The id of the primary ip\n   */\n  async get(\n    id: number,\n  ): Promise<\n    | { success: true; response: { primary_ip: PrimaryIPType } }\n    | { success: false; response: APIError }\n  > {\n    return this.request<{ primary_ip: PrimaryIPType }>(`/primary_ips/${id}`)\n  }\n\n  /**\n   * Create a primary ip\n   * @param params The parameters for creating the primary ip\n   */\n  async create(\n    params: CreatePrimaryIPParams,\n  ): Promise<\n    { success: true; response: CreatePrimaryIPResponse } | { success: false; response: APIError }\n  > {\n    return this.request<CreatePrimaryIPResponse>(\"/primary_ips\", {\n      method: \"POST\",\n      body: JSON.stringify(params),\n    })\n  }\n\n  /**\n   * Update a primary ip\n   * @param id The id of the primary ip\n   * @param params The parameters for updating the primary ip\n   */\n  async update(\n    id: number,\n    params: UpdatePrimaryIPParams,\n  ): Promise<\n    | { success: true; response: { primary_ip: PrimaryIPType } }\n    | { success: false; response: APIError }\n  > {\n    return this.request<{ primary_ip: PrimaryIPType }>(`/primary_ips/${id}`, {\n      method: \"PUT\",\n      body: JSON.stringify(params),\n    })\n  }\n\n  /**\n   * Delete a primary ip\n   * @param id The id of the primary ip\n   */\n  async delete(\n    id: number,\n  ): Promise<{ success: true; response: Action } | { success: false; response: APIError }> {\n    return this.request<Action>(`/primary_ips/${id}`, {\n      method: \"DELETE\",\n    })\n  }\n}\n","import type { Action } from \"../../actions/types\"\nimport { BaseAPI } from \"../../base\"\nimport type { APIError } from \"../../types\"\nimport type { ListPlacementGroupsResponse, PlacementGroup as PlacementGroupType } from \"./types\"\n\nexport interface ListPlacementGroupsParams {\n  name?: string\n  label_selector?: string\n  sort?:\n    | \"id\"\n    | \"id:asc\"\n    | \"id:desc\"\n    | \"name\"\n    | \"name:asc\"\n    | \"name:desc\"\n    | \"created\"\n    | \"created:asc\"\n    | \"created:desc\"\n  type?: \"spread\"\n  page?: number\n  per_page?: number\n}\n\nexport interface CreatePlacementGroupParams {\n  name: string\n  type: \"spread\"\n  labels?: Record<string, string>\n}\n\nexport interface UpdatePlacementGroupParams {\n  name?: string\n  labels?: Record<string, string>\n}\n\n/**\n * Placement Groups API\n *\n * Placement groups help you to manage your servers in a specific datacenter.\n * https://docs.hetzner.cloud/#placement-groups\n */\nexport class PlacementGroup extends BaseAPI {\n  /**\n   * List all placement groups with optional filtering and pagination\n   * @param params Optional parameters for filtering and pagination\n   */\n  async getAll(\n    params?: ListPlacementGroupsParams,\n  ): Promise<\n    | { success: true; response: ListPlacementGroupsResponse }\n    | { success: false; response: APIError }\n  > {\n    const queryParams = new URLSearchParams()\n    if (params) {\n      Object.entries(params).forEach(([key, value]) => {\n        if (value !== undefined && value !== null && value !== \"\") {\n          queryParams.append(key, value.toString())\n        }\n      })\n    }\n\n    return this.request<ListPlacementGroupsResponse>(\n      `/placement_groups${queryParams ? `?${queryParams}` : \"\"}`,\n    )\n  }\n\n  /**\n   * Get a placement group by id\n   * @param id The id of the placement group\n   */\n  async get(\n    id: number,\n  ): Promise<\n    | { success: true; response: { placement_group: PlacementGroupType } }\n    | { success: false; response: APIError }\n  > {\n    return this.request<{ placement_group: PlacementGroupType }>(`/placement_groups/${id}`)\n  }\n\n  /**\n   * Create a placement group\n   * @param params The parameters for creating the placement group\n   */\n  async create(\n    params: CreatePlacementGroupParams,\n  ): Promise<\n    | { success: true; response: { placement_group: PlacementGroupType } }\n    | { success: false; response: APIError }\n  > {\n    return this.request<{ placement_group: PlacementGroupType }>(\"/placement_groups\", {\n      method: \"POST\",\n      body: JSON.stringify(params),\n    })\n  }\n\n  /**\n   * Update a placement group\n   * @param id The id of the placement group\n   * @param params The parameters for updating the placement group\n   */\n  async update(\n    id: number,\n    params: UpdatePlacementGroupParams,\n  ): Promise<\n    | { success: true; response: { placement_group: PlacementGroupType } }\n    | { success: false; response: APIError }\n  > {\n    return this.request<{ placement_group: PlacementGroupType }>(`/placement_groups/${id}`, {\n      method: \"PUT\",\n      body: JSON.stringify(params),\n    })\n  }\n\n  /**\n   * Delete a placement group\n   * @param id The id of the placement group\n   */\n  async delete(\n    id: number,\n  ): Promise<{ success: true; response: Action } | { success: false; response: APIError }> {\n    return this.request<Action>(`/placement_groups/${id}`, {\n      method: \"DELETE\",\n    })\n  }\n}\n","import { BaseAPI } from \"../../base\"\nimport type { APIError } from \"../../types\"\nimport type { ListIsosResponse } from \"./types\"\n\nexport interface ListIsosParams {\n  name?: string\n  include_architecture_wildcard?: boolean\n  architecture?: \"x86\" | \"arm64\"\n  page?: number\n  per_page?: number\n}\n\n/**\n * Isos API\n *\n * Isos are used to create servers.\n * https://docs.hetzner.cloud/#isos\n */\nexport class Isos extends BaseAPI {\n  /**\n   * List all isos with optional filtering and pagination\n   * @param params Optional parameters for filtering and pagination\n   */\n  async getAll(\n    params?: ListIsosParams,\n  ): Promise<\n    { success: true; response: ListIsosResponse } | { success: false; response: APIError }\n  > {\n    const queryParams = new URLSearchParams()\n    if (params) {\n      Object.entries(params).forEach(([key, value]) => {\n        if (value !== undefined && value !== null && value !== \"\") {\n          queryParams.append(key, value.toString())\n        }\n      })\n    }\n\n    return this.request<ListIsosResponse>(`/isos${queryParams ? `?${queryParams}` : \"\"}`)\n  }\n\n  /**\n   * Get an iso by id\n   * @param id The id of the iso\n   */\n  async get(\n    id: number,\n  ): Promise<{ success: true; response: { iso: Isos } } | { success: false; response: APIError }> {\n    return this.request<{ iso: Isos }>(`/isos/${id}`)\n  }\n}\n","import { BaseAPI } from \"../../base\"\nimport type { APIError } from \"../../types\"\nimport type { ServerTypesResponse, ServerType } from \"./types\"\n\nexport interface ListServerTypesParams {\n  name?: string\n  page?: number\n  per_page?: number\n}\n\nexport class ServerTypes extends BaseAPI {\n  /**\n   * List all servers with optional filtering and pagination\n   * @param params Optional parameters for filtering and pagination\n   */\n  async getAll(\n    params?: ListServerTypesParams,\n  ): Promise<\n    { success: true; response: ServerTypesResponse } | { success: false; response: APIError }\n  > {\n    const queryParams = new URLSearchParams()\n    if (params) {\n      Object.entries(params).forEach(([key, value]) => {\n        if (value !== undefined && value !== null && value !== \"\") {\n          queryParams.append(key, value.toString())\n        }\n      })\n    }\n\n    return this.request<ServerTypesResponse>(`/server_types${queryParams ? `?${queryParams}` : \"\"}`)\n  }\n\n  async get(\n    id: number,\n  ): Promise<\n    | { success: true; response: { server_type: ServerType } }\n    | { success: false; response: APIError }\n  > {\n    return this.request<{ server_type: ServerType }>(`/server_types/${id}`)\n  }\n}\n","import { BaseAPI } from \"../../base\"\nimport type { APIError, BaseAction } from \"../../types\"\nimport type { Image } from \"../images/types\"\nimport type { ListServerActionsParams, ServerActionsResponse } from \"./types\"\n\n/**\n * Server Actions API\n *\n * Actions are the individual operations that can be performed on a server.\n * https://docs.hetzner.cloud/#server-actions\n */\nexport class ServerActions extends BaseAPI {\n  /**\n   * List all actions for Server (globally, not for a specific volume)\n   * @param params Optional parameters for filtering and pagination\n   */\n  async getAll(\n    params?: ListServerActionsParams,\n  ): Promise<\n    { success: true; response: ServerActionsResponse } | { success: false; response: APIError }\n  > {\n    const queryParams = new URLSearchParams()\n    if (params) {\n      Object.entries(params).forEach(([key, value]) => {\n        if (value !== undefined) {\n          if (Array.isArray(value)) {\n            value.forEach((v) => queryParams.append(key, v.toString()))\n          } else {\n            queryParams.append(key, value.toString())\n          }\n        }\n      })\n    }\n    const queryString = queryParams.toString()\n    return this.request<ServerActionsResponse>(\n      `/servers/actions${queryString ? `?${queryString}` : \"\"}`,\n    )\n  }\n\n  /**\n   * Get a specific action by ID\n   * @param id The ID of the action to get\n   */\n  async get(\n    id: number,\n  ): Promise<\n    { success: true; response: { action: BaseAction } } | { success: false; response: APIError }\n  > {\n    return this.request<{ action: BaseAction }>(`/servers/actions/${id}`)\n  }\n\n  /**\n   * List all actions for a server\n   * @param serverId The ID of the server to list actions for\n   * @param params Optional parameters for filtering and pagination\n   */\n  async getAllByServer(\n    serverId: number,\n    params?: ListServerActionsParams,\n  ): Promise<\n    { success: true; response: ServerActionsResponse } | { success: false; response: APIError }\n  > {\n    const queryParams = new URLSearchParams()\n    if (params) {\n      Object.entries(params).forEach(([key, value]) => {\n        if (value !== undefined) {\n          queryParams.append(key, value.toString())\n        }\n      })\n    }\n    const queryString = queryParams.toString()\n    return this.request<ServerActionsResponse>(\n      `/servers/${serverId}/actions${queryString ? `?${queryString}` : \"\"}`,\n    )\n  }\n\n  /**\n   * Add a server to a placement group\n   * @param serverId The ID of the server to add to the placement group\n   * @param placementGroupId The ID of the placement group to add the server to\n   */\n  async addServerToPlacementGroup(\n    serverId: number,\n    placementGroupId: number,\n  ): Promise<\n    { success: true; response: { action: BaseAction } } | { success: false; response: APIError }\n  > {\n    return this.request<{ action: BaseAction }>(\n      `/servers/${serverId}/actions/add_to_placement_group`,\n      {\n        method: \"POST\",\n        body: JSON.stringify({\n          placement_group: placementGroupId,\n        }),\n      },\n    )\n  }\n\n  /**\n   * Attach an ISO to a server\n   * @param serverId The ID of the server to attach the ISO to\n   * @param iso The ID or name of ISO to attach to the Server\n   */\n  async attachIsoToServer(\n    serverId: number,\n    iso: string,\n  ): Promise<\n    { success: true; response: { action: BaseAction } } | { success: false; response: APIError }\n  > {\n    return this.request<{ action: BaseAction }>(`/servers/${serverId}/actions/attach_iso`, {\n      method: \"POST\",\n      body: JSON.stringify({\n        iso: iso,\n      }),\n    })\n  }\n\n  /**\n   * Attach a server to a network\n   * @param serverId The ID of the server to attach to the network\n   * @param networkId The ID of the network to attach the server to\n   * @param ip Optional IP to assign to the server\n   * @param aliasIps Optional array of alias IPs to assign to the server\n   */\n  async attachServerToNetwork(\n    serverId: number,\n    networkId: number,\n    ip?: string,\n    aliasIps?: string[],\n  ): Promise<\n    { success: true; response: { action: BaseAction } } | { success: false; response: APIError }\n  > {\n    return this.request<{ action: BaseAction }>(`/servers/${serverId}/actions/attach_to_network`, {\n      method: \"POST\",\n      body: JSON.stringify({\n        network: networkId,\n        ip: ip,\n        alias_ips: aliasIps,\n      }),\n    })\n  }\n\n  /**\n   * Change alias IP of network\n   * @param serverId The ID of the server to change the alias IP of\n   * @param networkId The ID of the network to change the alias IP of\n   * @param aliasIps The new alias IPs to assign to the server\n   */\n  async changeAliasIpOfNetwork(\n    serverId: number,\n    networkId: number,\n    aliasIps: string[],\n  ): Promise<\n    { success: true; response: { action: BaseAction } } | { success: false; response: APIError }\n  > {\n    return this.request<{ action: BaseAction }>(`/servers/${serverId}/actions/change_alias_ips`, {\n      method: \"POST\",\n      body: JSON.stringify({\n        network: networkId,\n        alias_ips: aliasIps,\n      }),\n    })\n  }\n\n  /**\n   * Change reverse DNS entry for this Server\n   * @param serverId The ID of the server to change the reverse DNS entry of\n   * @param ip The IP to change the reverse DNS entry of\n   * @param dnsPtr The new reverse DNS entry to assign to the server\n   */\n  async changeReverseDnsEntryForServer(\n    serverId: number,\n    ip: string,\n    dnsPtr: string | null,\n  ): Promise<\n    { success: true; response: { action: BaseAction } } | { success: false; response: APIError }\n  > {\n    return this.request<{ action: BaseAction }>(`/servers/${serverId}/actions/change_reverse_dns`, {\n      method: \"POST\",\n      body: JSON.stringify({\n        ip: ip,\n        dns_ptr: dnsPtr,\n      }),\n    })\n  }\n\n  /**\n   * Change Server Protection\n   * @param serverId The ID of the server to change the protection of\n   * @param protect Whether to protect the server or not\n   * @param deleteProtection Whether to delete the protection of the server or not\n   */\n  async changeServerProtection(\n    serverId: number,\n    protect?: boolean,\n    rebuild?: boolean,\n  ): Promise<\n    { success: true; response: { action: BaseAction } } | { success: false; response: APIError }\n  > {\n    return this.request<{ action: BaseAction }>(`/servers/${serverId}/actions/change_protection`, {\n      method: \"POST\",\n      body: JSON.stringify({\n        protect: protect,\n        rebuild: rebuild,\n      }),\n    })\n  }\n\n  /**\n   * Change the Type of a Server\n   * @param serverId The ID of the server to change the type of\n   * @param serverType The new server type to change to\n   * @param upgradeDisk Whether to upgrade the disk during type change\n   */\n  async changeServerType(\n    serverId: number,\n    serverType: string,\n    upgradeDisk: boolean,\n  ): Promise<\n    { success: true; response: { action: BaseAction } } | { success: false; response: APIError }\n  > {\n    return this.request<{ action: BaseAction }>(`/servers/${serverId}/actions/change_type`, {\n      method: \"POST\",\n      body: JSON.stringify({\n        type: serverType,\n        upgrade_disk: upgradeDisk,\n      }),\n    })\n  }\n\n  /**\n   * Create Image from Server\n   * @param serverId The ID of the server to create an image from\n   * @param name The name of the image to create\n   * @param description The description of the image to create\n   */\n  async createImageFromServer(\n    serverId: number,\n    type?: \"snapshot\" | \"backup\",\n    description?: string,\n    labels?: Record<string, string>,\n  ): Promise<\n    | { success: true; response: { action: BaseAction; image: Image } }\n    | { success: false; response: APIError }\n  > {\n    return this.request<{ action: BaseAction; image: Image }>(\n      `/servers/${serverId}/actions/create_image`,\n      {\n        method: \"POST\",\n        body: JSON.stringify({\n          type: type,\n          description: description,\n          labels: labels,\n        }),\n      },\n    )\n  }\n\n  /**\n   * Detach a server from a network\n   * @param serverId The ID of the server to detach from the network\n   * @param networkId The ID of the network to detach the server from\n   */\n  async detachServerFromNetwork(\n    serverId: number,\n    networkId: number,\n  ): Promise<\n    { success: true; response: { action: BaseAction } } | { success: false; response: APIError }\n  > {\n    return this.request<{ action: BaseAction }>(\n      `/servers/${serverId}/actions/detach_from_network`,\n      {\n        method: \"POST\",\n        body: JSON.stringify({\n          network: networkId,\n        }),\n      },\n    )\n  }\n\n  /**\n   * Detach an ISO from a Server\n   * @param serverId The ID of the server to detach the ISO from\n   * @param isoId The ID of the ISO to detach from the server\n   */\n  async detachIsoFromServer(\n    serverId: number,\n  ): Promise<\n    { success: true; response: { action: BaseAction } } | { success: false; response: APIError }\n  > {\n    return this.request<{ action: BaseAction }>(`/servers/${serverId}/actions/detach_iso`, {\n      method: \"POST\",\n    })\n  }\n\n  /**\n   * Disable Backups for a Server\n   * @param serverId The ID of the server to disable backups for\n   */\n  async disableBackupsForServer(\n    serverId: number,\n  ): Promise<\n    { success: true; response: { action: BaseAction } } | { success: false; response: APIError }\n  > {\n    return this.request<{ action: BaseAction }>(`/servers/${serverId}/actions/disable_backups`, {\n      method: \"POST\",\n    })\n  }\n  /**\n   * Disable Rescue Mode for a Server\n   * @param serverId The ID of the server to disable rescue mode for\n   */\n  async disableRescueModeForServer(\n    serverId: number,\n  ): Promise<\n    { success: true; response: { action: BaseAction } } | { success: false; response: APIError }\n  > {\n    return this.request<{ action: BaseAction }>(`/servers/${serverId}/actions/disable_rescue`, {\n      method: \"POST\",\n    })\n  }\n\n  /**\n   * Enables and configures the automatic daily backup option\n   * @param serverId The ID of the server to enable and configure backups for\n   */\n  async enableBackupsForServer(\n    serverId: number,\n  ): Promise<\n    { success: true; response: { action: BaseAction } } | { success: false; response: APIError }\n  > {\n    return this.request<{ action: BaseAction }>(`/servers/${serverId}/actions/enable_backups`, {\n      method: \"POST\",\n    })\n  }\n\n  /**\n   * Enable Rescue Mode for a Server\n   * @param serverId The ID of the server to enable rescue mode for\n   */\n  async enableRescueModeForServer(\n    serverId: number,\n    type?: \"linux64\",\n    sshKeys?: number[],\n  ): Promise<\n    { success: true; response: { action: BaseAction } } | { success: false; response: APIError }\n  > {\n    return this.request<{ action: BaseAction }>(`/servers/${serverId}/actions/enable_rescue`, {\n      method: \"POST\",\n    })\n  }\n\n  /**\n   * Power off a server\n   * @param serverId The ID of the server to power off\n   */\n  async powerOff(\n    serverId: number,\n  ): Promise<\n    { success: true; response: { action: BaseAction } } | { success: false; response: APIError }\n  > {\n    return this.request<{ action: BaseAction }>(`/servers/${serverId}/actions/poweroff`, {\n      method: \"POST\",\n    })\n  }\n\n  /**\n   * Power on a server\n   * @param serverId The ID of the server to power on\n   */\n  async powerOn(\n    serverId: number,\n  ): Promise<\n    { success: true; response: { action: BaseAction } } | { success: false; response: APIError }\n  > {\n    return this.request<{ action: BaseAction }>(`/servers/${serverId}/actions/poweron`, {\n      method: \"POST\",\n    })\n  }\n\n  /**\n   * Soft reboot a server\n   * @param serverId The ID of the server to soft reboot\n   */\n  async softReboot(\n    serverId: number,\n  ): Promise<\n    { success: true; response: { action: BaseAction } } | { success: false; response: APIError }\n  > {\n    return this.request<{ action: BaseAction }>(`/servers/${serverId}/actions/reboot`, {\n      method: \"POST\",\n    })\n  }\n\n  /**\n   * Rebuild a Server from an Image\n   * @param serverId The ID of the server to rebuild\n   * @param image The ID or name of the image to rebuild the server from\n   */\n  async rebuildFromImage(\n    serverId: number,\n    image: string,\n  ): Promise<\n    { success: true; response: { action: BaseAction } } | { success: false; response: APIError }\n  > {\n    return this.request<{ action: BaseAction }>(`/servers/${serverId}/actions/rebuild`, {\n      method: \"POST\",\n      body: JSON.stringify({\n        image: image,\n      }),\n    })\n  }\n\n  /**\n   * Remove from placement group\n   * @param serverId The ID of the server to remove from the placement group\n   */\n  async removeFromPlacementGroup(\n    serverId: number,\n  ): Promise<\n    { success: true; response: { action: BaseAction } } | { success: false; response: APIError }\n  > {\n    return this.request<{ action: BaseAction }>(\n      `/servers/${serverId}/actions/remove_from_placement_group`,\n      {\n        method: \"POST\",\n      },\n    )\n  }\n\n  /**\n   * Request Console for a Server\n   * @param serverId The ID of the server to request the console for\n   */\n  async requestConsoleForServer(\n    serverId: number,\n  ): Promise<\n    | { success: true; response: { action: BaseAction; wss_url: string; password: string } }\n    | { success: false; response: APIError }\n  > {\n    return this.request<{ action: BaseAction; wss_url: string; password: string }>(\n      `/servers/${serverId}/actions/request_console`,\n      {\n        method: \"POST\",\n      },\n    )\n  }\n\n  /**\n   * Reset a server\n   * @param serverId The ID of the server to reset\n   */\n  async resetServer(\n    serverId: number,\n  ): Promise<\n    { success: true; response: { action: BaseAction } } | { success: false; response: APIError }\n  > {\n    return this.request<{ action: BaseAction }>(`/servers/${serverId}/actions/reset`, {\n      method: \"POST\",\n    })\n  }\n\n  /**\n   * Reset Root Password\n   * @param serverId The ID of the server to reset the root password for\n   */\n  async resetServerPassword(\n    serverId: number,\n  ): Promise<\n    | { success: true; response: { action: BaseAction; root_password: string } }\n    | { success: false; response: APIError }\n  > {\n    return this.request<{ action: BaseAction; root_password: string }>(\n      `/servers/${serverId}/actions/reset_password`,\n      {\n        method: \"POST\",\n      },\n    )\n  }\n\n  /**\n   * Shutdown a server\n   * @param serverId The ID of the server to shutdown\n   */\n  async shutdownServer(\n    serverId: number,\n  ): Promise<\n    { success: true; response: { action: BaseAction } } | { success: false; response: APIError }\n  > {\n    return this.request<{ action: BaseAction }>(`/servers/${serverId}/actions/shutdown`, {\n      method: \"POST\",\n    })\n  }\n\n  /**\n   * Get an action for a server\n   * @param serverId The ID of the server to get the action for\n   * @param actionId The ID of the action to get\n   */\n  async getActionForServer(\n    serverId: number,\n    actionId: number,\n  ): Promise<\n    { success: true; response: { action: BaseAction } } | { success: false; response: APIError }\n  > {\n    return this.request<{ action: BaseAction }>(`/servers/${serverId}/actions/${actionId}`)\n  }\n}\n","import type { Action } from \"../actions/types\"\nimport { BaseAPI } from \"../base\"\nimport type { APIError } from \"../types\"\nimport { Images } from \"./images/images\"\nimport { PrimaryIP } from \"./primary-ip/primary-ip\"\nimport { PlacementGroup } from \"./placement-groups/placement-group\"\nimport { Isos } from \"./isos/isos\"\nimport type { ServersResponse, Server, Metrics, MetricTypes } from \"./types\"\nimport { ServerTypes } from \"./server-types/server-types\"\nimport { ServerActions } from \"./actions/actions\"\n\nexport interface ListServersParams {\n  name?: string\n  fingerprint?: string\n  label_selector?: string\n  sort?: \"id\" | \"id:asc\" | \"id:desc\" | \"name\" | \"name:asc\" | \"name:desc\"\n  page?: number\n  per_page?: number\n}\n\nexport interface CreateServerParams {\n  name: string\n  server_type: string\n  image: string\n  location?: string\n  datacenter?: string\n  start_after_create?: boolean\n  placement_group?: string\n  ssh_keys?: string[]\n  volumes?: number[]\n  networks?: number[]\n  firewall?: [{ id: number }]\n  user_data?: string\n  labels?: Record<string, string>\n  automount?: boolean\n  public_net?: {\n    enable_ipv4?: boolean\n    enable_ipv6?: boolean\n    ipv4?: string\n    ipv6?: string\n  }\n}\n\nexport class Servers extends BaseAPI {\n  private _primaryIP: PrimaryIP | null = null\n  private _images: Images | null = null\n  private _placementGroups: PlacementGroup | null = null\n  private _isos: Isos | null = null\n  private _serverTypes: ServerTypes | null = null\n  private _actions: ServerActions | null = null\n  /**\n   * List all servers with optional filtering and pagination\n   * @param params Optional parameters for filtering and pagination\n   */\n\n  get primaryIP(): PrimaryIP {\n    if (!this._primaryIP) {\n      this._primaryIP = new PrimaryIP(this.token)\n    }\n    return this._primaryIP\n  }\n\n  get images(): Images {\n    if (!this._images) {\n      this._images = new Images(this.token)\n    }\n    return this._images\n  }\n\n  get placementGroups(): PlacementGroup {\n    if (!this._placementGroups) {\n      this._placementGroups = new PlacementGroup(this.token)\n    }\n    return this._placementGroups\n  }\n\n  get isos(): Isos {\n    if (!this._isos) {\n      this._isos = new Isos(this.token)\n    }\n    return this._isos\n  }\n\n  get serverTypes(): ServerTypes {\n    if (!this._serverTypes) {\n      this._serverTypes = new ServerTypes(this.token)\n    }\n    return this._serverTypes\n  }\n\n  get actions(): ServerActions {\n    if (!this._actions) {\n      this._actions = new ServerActions(this.token)\n    }\n    return this._actions\n  }\n\n  async getAll(\n    params?: ListServersParams,\n  ): Promise<\n    { success: true; response: ServersResponse } | { success: false; response: APIError }\n  > {\n    const queryParams = new URLSearchParams()\n    if (params) {\n      Object.entries(params).forEach(([key, value]) => {\n        if (value !== undefined) {\n          queryParams.append(key, value.toString())\n        }\n      })\n    }\n\n    const queryString = queryParams.toString()\n    return this.request<ServersResponse>(`/servers${queryString ? `?${queryString}` : \"\"}`)\n  }\n\n  async get(\n    id: number,\n  ): Promise<\n    { success: true; response: { server: Server } } | { success: false; response: APIError }\n  > {\n    return this.request<{ server: Server }>(`/servers/${id}`)\n  }\n\n  async create(\n    params: CreateServerParams,\n  ): Promise<\n    | { success: true; response: { server: Server; action: Action } }\n    | { success: false; response: APIError }\n  > {\n    return this.request<{ server: Server; action: Action }>(\"/servers\", {\n      method: \"POST\",\n      body: JSON.stringify(params),\n    })\n  }\n\n  async delete(\n    id: number,\n  ): Promise<{ success: true; response: Action } | { success: false; response: APIError }> {\n    return this.request<Action>(`/servers/${id}`, {\n      method: \"DELETE\",\n    })\n  }\n\n  getMetrics(\n    id: number,\n    type: MetricTypes,\n    start: string,\n    end: string,\n    step?: number,\n  ): Promise<\n    { success: true; response: { metrics: Metrics } } | { success: false; response: APIError }\n  > {\n    return this.request<{ metrics: Metrics }>(\n      `/servers/${id}/metrics?type=${type}&start=${start}&end=${end}&step=${step}`,\n    )\n  }\n}\n"],"mappings":"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","names":["index_exports","__export","HetznerAPI","__toCommonJS","BaseAPI","token","baseUrl","endpoint","options","res","response","Billing","BaseAPI","FirewallActions","BaseAPI","params","queryParams","key","value","queryString","firewallId","actionId","resources","rules","Firewalls","BaseAPI","FirewallActions","params","queryParams","key","value","queryString","id","FloatingIPActions","BaseAPI","params","queryParams","key","value","queryString","actionId","floatingIpId","FloatingIPs","BaseAPI","params","queryParams","key","value","queryString","id","FloatingIPActions","Locations","BaseAPI","params","queryParams","key","value","queryString","id","Datacenters","NetworkActions","BaseAPI","params","queryParams","key","value","queryString","actionId","networkId","Networks","BaseAPI","params","queryParams","key","value","queryString","id","NetworkActions","CertificateActions","BaseAPI","params","queryParams","key","value","v","queryString","actionId","certificateId","Certificates","BaseAPI","params","queryParams","key","value","queryString","id","CertificateActions","SSHKeys","BaseAPI","params","queryParams","key","value","queryString","id","VolumeActions","BaseAPI","params","queryParams","key","value","v","queryString","actionId","volumeId","Volumes","BaseAPI","params","queryParams","key","value","v","queryString","id","VolumeActions","LoadBalancerActions","BaseAPI","params","queryParams","key","value","v","queryString","actionId","loadBalancerId","LoadBalancers","BaseAPI","params","queryParams","key","value","queryString","id","LoadBalancerActions","Actions","BaseAPI","id","Images","BaseAPI","params","queryParams","key","value","id","PrimaryIP","BaseAPI","params","queryParams","key","value","id","PlacementGroup","BaseAPI","params","queryParams","key","value","id","Isos","BaseAPI","params","queryParams","key","value","id","ServerTypes","BaseAPI","params","queryParams","key","value","id","ServerActions","BaseAPI","params","queryParams","key","value","v","queryString","id","serverId","placementGroupId","iso","networkId","ip","aliasIps","dnsPtr","protect","rebuild","serverType","upgradeDisk","type","description","labels","sshKeys","image","actionId","Servers","BaseAPI","PrimaryIP","Images","PlacementGroup","Isos","ServerTypes","ServerActions","params","queryParams","key","value","queryString","id","type","start","end","step","HetznerAPI","BaseAPI","Actions","Billing","Certificates","Datacenters","Firewalls","FloatingIPs","LoadBalancers","Locations","Networks","Servers","SSHKeys","Volumes"]}