@homeflare/distilled-proxmox 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/dist/delete-query-binding.test.d.ts +2 -0
  2. package/dist/delete-query-binding.test.d.ts.map +1 -0
  3. package/dist/delete-query-binding.test.js +49 -0
  4. package/dist/delete-query-binding.test.js.map +1 -0
  5. package/dist/errors.d.ts +12 -5
  6. package/dist/errors.d.ts.map +1 -1
  7. package/dist/errors.js +12 -5
  8. package/dist/errors.js.map +1 -1
  9. package/dist/index.d.ts +0 -1
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +0 -1
  12. package/dist/index.js.map +1 -1
  13. package/dist/not-found-errors.test.d.ts +2 -0
  14. package/dist/not-found-errors.test.d.ts.map +1 -0
  15. package/dist/not-found-errors.test.js +59 -0
  16. package/dist/not-found-errors.test.js.map +1 -0
  17. package/dist/protocol.d.ts.map +1 -1
  18. package/dist/protocol.js +9 -7
  19. package/dist/protocol.js.map +1 -1
  20. package/dist/services/access.d.ts +22 -2
  21. package/dist/services/access.d.ts.map +1 -1
  22. package/dist/services/access.js +17 -9
  23. package/dist/services/access.js.map +1 -1
  24. package/dist/services/cluster.d.ts.map +1 -1
  25. package/dist/services/cluster.js +30 -77
  26. package/dist/services/cluster.js.map +1 -1
  27. package/dist/services/nodes.d.ts +22 -2
  28. package/dist/services/nodes.d.ts.map +1 -1
  29. package/dist/services/nodes.js +60 -72
  30. package/dist/services/nodes.js.map +1 -1
  31. package/dist/services/pools.d.ts.map +1 -1
  32. package/dist/services/pools.js +2 -7
  33. package/dist/services/pools.js.map +1 -1
  34. package/dist/services/storage.d.ts +11 -1
  35. package/dist/services/storage.d.ts.map +1 -1
  36. package/dist/services/storage.js +8 -1
  37. package/dist/services/storage.js.map +1 -1
  38. package/package.json +1 -7
  39. package/src/delete-query-binding.test.ts +65 -0
  40. package/src/errors.ts +12 -5
  41. package/src/index.ts +0 -1
  42. package/src/not-found-errors.test.ts +112 -0
  43. package/src/protocol.ts +9 -7
  44. package/src/services/access.ts +25 -11
  45. package/src/services/cluster.ts +30 -79
  46. package/src/services/nodes.ts +71 -74
  47. package/src/services/pools.ts +2 -9
  48. package/src/services/storage.ts +12 -2
  49. package/dist/task.d.ts +0 -51
  50. package/dist/task.d.ts.map +0 -1
  51. package/dist/task.js +0 -60
  52. package/dist/task.js.map +0 -1
  53. package/src/task.ts +0 -87
@@ -5,6 +5,25 @@ import * as C from "@distilled.cloud/core/category";
5
5
  import * as T from "../traits.js";
6
6
  import { ProxmoxProtocol, } from "../protocol.js";
7
7
  import * as Retry from "../retry.js";
8
+ /** The Ceph filesystem does not exist. PVE's `destroyfs` dies synchronously with `no such cephfs '<name>'` when the named filesystem is already gone (an async task is never even queued, so this surfaces directly from the DELETE call, not from polling its UPID). This shape states the honest status (404) while matching the wire's real one — 500, the same class PVE answers for a missing user/group/storage/pool. Traced to source, not paraphrased (correcting an earlier draft of this patch, which carried forward the kit's own paraphrase, 'no such cephfs' with no filesystem name — the kit comments it cited, `ceph-fs-wire.ts:203-206` and `ceph-fs.ts:230-233`, never claimed to quote the wire text verbatim either): `pve-manager` (commit f6997e698c7933ea8e62319e2bf1bf7262daa56a, "bump version to 9.2.11") `PVE/API2/Ceph/FS.pm:327`, inside the `DELETE .../ceph/fs/{name}` handler's `code => sub`: `die "no such cephfs '$fs_name'\n" if !$fs;` — reached only when `$fs_name` (the `name` path label) is not found in `PVE::Ceph::Tools::ls_fs()`'s list. No live DELETE was run to confirm this byte-for-byte (per this pass's read-only-GET constraint); the regex is anchored on the verified-from-source prefix and object-kind qualifier only, deliberately not asserting the exact trailing punctuation/newline. */
9
+ export class CephFsNotFound extends /*@__PURE__*/ /*@__PURE__*/ T.applyErrorMatchers(
10
+ /*@__PURE__*/ S.TaggedError()("CephFsNotFound", {
11
+ message: S.String,
12
+ }).pipe(C.withBadRequestError), [{ status: 500, message: { matches: "^no such cephfs '[^']*'" } }]) {
13
+ }
14
+ /** The Ceph pool does not exist. PVE shells out to `ceph osd pool get` and reports its failure verbatim as HTTP 500 with `{"data":null,"message":"error with 'osd pool get': mon_cmd failed - unrecognized pool '<name>'\n"}` — a generic command failure, not a parsed field, but distinctively named ('unrecognized pool'), unlike ZfsPool's equivalent 'exit code 1' shape (deliberately left untyped — see zfs-pool-read-failure.test.ts: that message names no object kind at all, so typing it would risk folding an unrelated zpool-command failure into 'absent'). This shape states the honest status (404) while matching the wire's real one. Call site traced to source: `pve-manager` (git.proxmox.com/git/pve-manager.git, commit f6997e698c7933ea8e62319e2bf1bf7262daa56a, "bump version to 9.2.11" — the SDK's own pinned version, matching `pve-docs`'s own repoid for this snapshot) `PVE/API2/Ceph/Pool.pm` (~line 850), inside the `status` GET handler: `$rados->mon_command({ prefix => 'osd pool get', pool => "$pool", var => 'all' })`. `mon_cmd failed - unrecognized pool '<name>'` is Ceph's/librados's own wire text for a missing pool, not a PVE-authored string, so it was not independently re-derived from Perl source (there is none to read — it crosses into Ceph's own C++ `mon_command` implementation, out of scope for this pass). Measured: `taslabs-net/homeflare-kit`'s `packages/alchemy/src/proxmox/ceph-pool-write.test.ts:5-14`, live cluster TB4 `n2`, `GET /nodes/{node}/ceph/pool/{name}/status`, 2026-09-24, read-role, read-only probe. */
15
+ export class CephPoolNotFound extends /*@__PURE__*/ /*@__PURE__*/ T.applyErrorMatchers(
16
+ /*@__PURE__*/ S.TaggedError()("CephPoolNotFound", {
17
+ message: S.String,
18
+ }).pipe(C.withBadRequestError), [
19
+ {
20
+ status: 500,
21
+ message: {
22
+ matches: "^error with 'osd pool get': mon_cmd failed - unrecognized pool",
23
+ },
24
+ },
25
+ ]) {
26
+ }
8
27
  /** PVE forwarded this call to another cluster member and could not reach it (pveproxy/pvedaemon's own connection-failure status, not a standard HTTP code). Transient — the target node may be mid-reboot or between cluster-membership changes. */
9
28
  export class ClusterNodeUnreachable extends /*@__PURE__*/ /*@__PURE__*/ T.applyErrorMatchers(
10
29
  /*@__PURE__*/ S.TaggedError()("ClusterNodeUnreachable", {
@@ -1534,13 +1553,12 @@ export const CreateNodeWakeonlanResponse = /*@__PURE__*/ S.suspend(() => S.Strin
1534
1553
  export const DeleteNodeCephFsRequest = /*@__PURE__*/ S.suspend(() => S.Struct({
1535
1554
  node: S.String.pipe(T.Label()),
1536
1555
  name: S.String.pipe(T.Label()),
1537
- remove_pools: S.optional(S.String.pipe(T.Body("remove-pools"))),
1538
- remove_storages: S.optional(S.String.pipe(T.Body("remove-storages"))),
1556
+ remove_pools: S.optional(S.String.pipe(T.Query("remove-pools"))),
1557
+ remove_storages: S.optional(S.String.pipe(T.Query("remove-storages"))),
1539
1558
  }).pipe(T.Http({
1540
1559
  method: "DELETE",
1541
1560
  uri: "/nodes/{node}/ceph/fs/{name}",
1542
1561
  code: 200,
1543
- contentType: "form-urlencoded",
1544
1562
  }))).annotate({
1545
1563
  identifier: "DeleteNodeCephFsRequest",
1546
1564
  });
@@ -1585,12 +1603,11 @@ export const DeleteNodeCephMonResponse = /*@__PURE__*/ S.suspend(() => S.String.
1585
1603
  export const DeleteNodeCephOsdRequest = /*@__PURE__*/ S.suspend(() => S.Struct({
1586
1604
  node: S.String.pipe(T.Label()),
1587
1605
  osdid: S.String.pipe(T.Label()),
1588
- cleanup: S.optional(S.String),
1606
+ cleanup: S.optional(S.String.pipe(T.Query())),
1589
1607
  }).pipe(T.Http({
1590
1608
  method: "DELETE",
1591
1609
  uri: "/nodes/{node}/ceph/osd/{osdid}",
1592
1610
  code: 200,
1593
- contentType: "form-urlencoded",
1594
1611
  }))).annotate({
1595
1612
  identifier: "DeleteNodeCephOsdRequest",
1596
1613
  });
@@ -1600,14 +1617,13 @@ export const DeleteNodeCephOsdResponse = /*@__PURE__*/ S.suspend(() => S.String.
1600
1617
  export const DeleteNodeCephPoolRequest = /*@__PURE__*/ S.suspend(() => S.Struct({
1601
1618
  node: S.String.pipe(T.Label()),
1602
1619
  name: S.String.pipe(T.Label()),
1603
- force: S.optional(S.String),
1604
- remove_ecprofile: S.optional(S.String),
1605
- remove_storages: S.optional(S.String),
1620
+ force: S.optional(S.String.pipe(T.Query())),
1621
+ remove_ecprofile: S.optional(S.String.pipe(T.Query())),
1622
+ remove_storages: S.optional(S.String.pipe(T.Query())),
1606
1623
  }).pipe(T.Http({
1607
1624
  method: "DELETE",
1608
1625
  uri: "/nodes/{node}/ceph/pool/{name}",
1609
1626
  code: 200,
1610
- contentType: "form-urlencoded",
1611
1627
  }))).annotate({
1612
1628
  identifier: "DeleteNodeCephPoolRequest",
1613
1629
  });
@@ -1630,12 +1646,11 @@ export const DeleteNodeCertificateAcmeCertificateResponse =
1630
1646
  });
1631
1647
  export const DeleteNodeCertificateCustomRequest = /*@__PURE__*/ S.suspend(() => S.Struct({
1632
1648
  node: S.String.pipe(T.Label()),
1633
- restart: S.optional(S.String),
1649
+ restart: S.optional(S.String.pipe(T.Query())),
1634
1650
  }).pipe(T.Http({
1635
1651
  method: "DELETE",
1636
1652
  uri: "/nodes/{node}/certificates/custom",
1637
1653
  code: 200,
1638
- contentType: "form-urlencoded",
1639
1654
  }))).annotate({
1640
1655
  identifier: "DeleteNodeCertificateCustomRequest",
1641
1656
  });
@@ -1645,13 +1660,12 @@ export const DeleteNodeCertificateCustomResponse = /*@__PURE__*/ S.suspend(() =>
1645
1660
  export const DeleteNodeDiskDirectoryRequest = /*@__PURE__*/ S.suspend(() => S.Struct({
1646
1661
  node: S.String.pipe(T.Label()),
1647
1662
  name: S.String.pipe(T.Label()),
1648
- cleanup_config: S.optional(S.String.pipe(T.Body("cleanup-config"))),
1649
- cleanup_disks: S.optional(S.String.pipe(T.Body("cleanup-disks"))),
1663
+ cleanup_config: S.optional(S.String.pipe(T.Query("cleanup-config"))),
1664
+ cleanup_disks: S.optional(S.String.pipe(T.Query("cleanup-disks"))),
1650
1665
  }).pipe(T.Http({
1651
1666
  method: "DELETE",
1652
1667
  uri: "/nodes/{node}/disks/directory/{name}",
1653
1668
  code: 200,
1654
- contentType: "form-urlencoded",
1655
1669
  }))).annotate({
1656
1670
  identifier: "DeleteNodeDiskDirectoryRequest",
1657
1671
  });
@@ -1661,13 +1675,12 @@ export const DeleteNodeDiskDirectoryResponse = /*@__PURE__*/ S.suspend(() => S.S
1661
1675
  export const DeleteNodeDiskLvmRequest = /*@__PURE__*/ S.suspend(() => S.Struct({
1662
1676
  node: S.String.pipe(T.Label()),
1663
1677
  name: S.String.pipe(T.Label()),
1664
- cleanup_config: S.optional(S.String.pipe(T.Body("cleanup-config"))),
1665
- cleanup_disks: S.optional(S.String.pipe(T.Body("cleanup-disks"))),
1678
+ cleanup_config: S.optional(S.String.pipe(T.Query("cleanup-config"))),
1679
+ cleanup_disks: S.optional(S.String.pipe(T.Query("cleanup-disks"))),
1666
1680
  }).pipe(T.Http({
1667
1681
  method: "DELETE",
1668
1682
  uri: "/nodes/{node}/disks/lvm/{name}",
1669
1683
  code: 200,
1670
- contentType: "form-urlencoded",
1671
1684
  }))).annotate({
1672
1685
  identifier: "DeleteNodeDiskLvmRequest",
1673
1686
  });
@@ -1677,14 +1690,13 @@ export const DeleteNodeDiskLvmResponse = /*@__PURE__*/ S.suspend(() => S.String.
1677
1690
  export const DeleteNodeDiskLvmthinRequest = /*@__PURE__*/ S.suspend(() => S.Struct({
1678
1691
  node: S.String.pipe(T.Label()),
1679
1692
  name: S.String.pipe(T.Label()),
1680
- cleanup_config: S.optional(S.String.pipe(T.Body("cleanup-config"))),
1681
- cleanup_disks: S.optional(S.String.pipe(T.Body("cleanup-disks"))),
1682
- volume_group: S.String.pipe(T.Body("volume-group")),
1693
+ cleanup_config: S.optional(S.String.pipe(T.Query("cleanup-config"))),
1694
+ cleanup_disks: S.optional(S.String.pipe(T.Query("cleanup-disks"))),
1695
+ volume_group: S.String.pipe(T.Query("volume-group")),
1683
1696
  }).pipe(T.Http({
1684
1697
  method: "DELETE",
1685
1698
  uri: "/nodes/{node}/disks/lvmthin/{name}",
1686
1699
  code: 200,
1687
- contentType: "form-urlencoded",
1688
1700
  }))).annotate({
1689
1701
  identifier: "DeleteNodeDiskLvmthinRequest",
1690
1702
  });
@@ -1694,13 +1706,12 @@ export const DeleteNodeDiskLvmthinResponse = /*@__PURE__*/ S.suspend(() => S.Str
1694
1706
  export const DeleteNodeDiskZfsRequest = /*@__PURE__*/ S.suspend(() => S.Struct({
1695
1707
  node: S.String.pipe(T.Label()),
1696
1708
  name: S.String.pipe(T.Label()),
1697
- cleanup_config: S.optional(S.String.pipe(T.Body("cleanup-config"))),
1698
- cleanup_disks: S.optional(S.String.pipe(T.Body("cleanup-disks"))),
1709
+ cleanup_config: S.optional(S.String.pipe(T.Query("cleanup-config"))),
1710
+ cleanup_disks: S.optional(S.String.pipe(T.Query("cleanup-disks"))),
1699
1711
  }).pipe(T.Http({
1700
1712
  method: "DELETE",
1701
1713
  uri: "/nodes/{node}/disks/zfs/{name}",
1702
1714
  code: 200,
1703
- contentType: "form-urlencoded",
1704
1715
  }))).annotate({
1705
1716
  identifier: "DeleteNodeDiskZfsRequest",
1706
1717
  });
@@ -1710,12 +1721,11 @@ export const DeleteNodeDiskZfsResponse = /*@__PURE__*/ S.suspend(() => S.String.
1710
1721
  export const DeleteNodeFirewallRuleRequest = /*@__PURE__*/ S.suspend(() => S.Struct({
1711
1722
  node: S.String.pipe(T.Label()),
1712
1723
  pos: S.String.pipe(T.Label()),
1713
- digest: S.optional(S.String),
1724
+ digest: S.optional(S.String.pipe(T.Query())),
1714
1725
  }).pipe(T.Http({
1715
1726
  method: "DELETE",
1716
1727
  uri: "/nodes/{node}/firewall/rules/{pos}",
1717
1728
  code: 200,
1718
- contentType: "form-urlencoded",
1719
1729
  }))).annotate({
1720
1730
  identifier: "DeleteNodeFirewallRuleRequest",
1721
1731
  });
@@ -1725,15 +1735,10 @@ export const DeleteNodeFirewallRuleResponse = /*@__PURE__*/ S.suspend(() => S.St
1725
1735
  export const DeleteNodeLxcRequest = /*@__PURE__*/ S.suspend(() => S.Struct({
1726
1736
  node: S.String.pipe(T.Label()),
1727
1737
  vmid: S.String.pipe(T.Label()),
1728
- destroy_unreferenced_disks: S.optional(S.String.pipe(T.Body("destroy-unreferenced-disks"))),
1729
- force: S.optional(S.String),
1730
- purge: S.optional(S.String),
1731
- }).pipe(T.Http({
1732
- method: "DELETE",
1733
- uri: "/nodes/{node}/lxc/{vmid}",
1734
- code: 200,
1735
- contentType: "form-urlencoded",
1736
- }))).annotate({
1738
+ destroy_unreferenced_disks: S.optional(S.String.pipe(T.Query("destroy-unreferenced-disks"))),
1739
+ force: S.optional(S.String.pipe(T.Query())),
1740
+ purge: S.optional(S.String.pipe(T.Query())),
1741
+ }).pipe(T.Http({ method: "DELETE", uri: "/nodes/{node}/lxc/{vmid}", code: 200 }))).annotate({
1737
1742
  identifier: "DeleteNodeLxcRequest",
1738
1743
  });
1739
1744
  export const DeleteNodeLxcResponse = /*@__PURE__*/ S.suspend(() => S.String.pipe(T.RawResponseRoot())).annotate({
@@ -1743,12 +1748,11 @@ export const DeleteNodeLxcFirewallAliasRequest = /*@__PURE__*/ S.suspend(() => S
1743
1748
  node: S.String.pipe(T.Label()),
1744
1749
  vmid: S.String.pipe(T.Label()),
1745
1750
  name: S.String.pipe(T.Label()),
1746
- digest: S.optional(S.String),
1751
+ digest: S.optional(S.String.pipe(T.Query())),
1747
1752
  }).pipe(T.Http({
1748
1753
  method: "DELETE",
1749
1754
  uri: "/nodes/{node}/lxc/{vmid}/firewall/aliases/{name}",
1750
1755
  code: 200,
1751
- contentType: "form-urlencoded",
1752
1756
  }))).annotate({
1753
1757
  identifier: "DeleteNodeLxcFirewallAliasRequest",
1754
1758
  });
@@ -1759,12 +1763,11 @@ export const DeleteNodeLxcFirewallIpsetRequest = /*@__PURE__*/ S.suspend(() => S
1759
1763
  node: S.String.pipe(T.Label()),
1760
1764
  vmid: S.String.pipe(T.Label()),
1761
1765
  name: S.String.pipe(T.Label()),
1762
- force: S.optional(S.String),
1766
+ force: S.optional(S.String.pipe(T.Query())),
1763
1767
  }).pipe(T.Http({
1764
1768
  method: "DELETE",
1765
1769
  uri: "/nodes/{node}/lxc/{vmid}/firewall/ipset/{name}",
1766
1770
  code: 200,
1767
- contentType: "form-urlencoded",
1768
1771
  }))).annotate({
1769
1772
  identifier: "DeleteNodeLxcFirewallIpsetRequest",
1770
1773
  });
@@ -1776,12 +1779,11 @@ export const DeleteNodeLxcFirewallIpset2Request = /*@__PURE__*/ S.suspend(() =>
1776
1779
  vmid: S.String.pipe(T.Label()),
1777
1780
  name: S.String.pipe(T.Label()),
1778
1781
  cidr: S.String.pipe(T.Label()),
1779
- digest: S.optional(S.String),
1782
+ digest: S.optional(S.String.pipe(T.Query())),
1780
1783
  }).pipe(T.Http({
1781
1784
  method: "DELETE",
1782
1785
  uri: "/nodes/{node}/lxc/{vmid}/firewall/ipset/{name}/{cidr}",
1783
1786
  code: 200,
1784
- contentType: "form-urlencoded",
1785
1787
  }))).annotate({
1786
1788
  identifier: "DeleteNodeLxcFirewallIpset2Request",
1787
1789
  });
@@ -1792,12 +1794,11 @@ export const DeleteNodeLxcFirewallRuleRequest = /*@__PURE__*/ S.suspend(() => S.
1792
1794
  node: S.String.pipe(T.Label()),
1793
1795
  vmid: S.String.pipe(T.Label()),
1794
1796
  pos: S.String.pipe(T.Label()),
1795
- digest: S.optional(S.String),
1797
+ digest: S.optional(S.String.pipe(T.Query())),
1796
1798
  }).pipe(T.Http({
1797
1799
  method: "DELETE",
1798
1800
  uri: "/nodes/{node}/lxc/{vmid}/firewall/rules/{pos}",
1799
1801
  code: 200,
1800
- contentType: "form-urlencoded",
1801
1802
  }))).annotate({
1802
1803
  identifier: "DeleteNodeLxcFirewallRuleRequest",
1803
1804
  });
@@ -1808,12 +1809,11 @@ export const DeleteNodeLxcSnapshotRequest = /*@__PURE__*/ S.suspend(() => S.Stru
1808
1809
  node: S.String.pipe(T.Label()),
1809
1810
  vmid: S.String.pipe(T.Label()),
1810
1811
  snapname: S.String.pipe(T.Label()),
1811
- force: S.optional(S.String),
1812
+ force: S.optional(S.String.pipe(T.Query())),
1812
1813
  }).pipe(T.Http({
1813
1814
  method: "DELETE",
1814
1815
  uri: "/nodes/{node}/lxc/{vmid}/snapshot/{snapname}",
1815
1816
  code: 200,
1816
- contentType: "form-urlencoded",
1817
1817
  }))).annotate({
1818
1818
  identifier: "DeleteNodeLxcSnapshotRequest",
1819
1819
  });
@@ -1844,15 +1844,10 @@ export const DeleteNodeNetwork2Response = /*@__PURE__*/ S.suspend(() => S.Struct
1844
1844
  export const DeleteNodeQemuRequest = /*@__PURE__*/ S.suspend(() => S.Struct({
1845
1845
  node: S.String.pipe(T.Label()),
1846
1846
  vmid: S.String.pipe(T.Label()),
1847
- destroy_unreferenced_disks: S.optional(S.String.pipe(T.Body("destroy-unreferenced-disks"))),
1848
- purge: S.optional(S.String),
1849
- skiplock: S.optional(S.String),
1850
- }).pipe(T.Http({
1851
- method: "DELETE",
1852
- uri: "/nodes/{node}/qemu/{vmid}",
1853
- code: 200,
1854
- contentType: "form-urlencoded",
1855
- }))).annotate({
1847
+ destroy_unreferenced_disks: S.optional(S.String.pipe(T.Query("destroy-unreferenced-disks"))),
1848
+ purge: S.optional(S.String.pipe(T.Query())),
1849
+ skiplock: S.optional(S.String.pipe(T.Query())),
1850
+ }).pipe(T.Http({ method: "DELETE", uri: "/nodes/{node}/qemu/{vmid}", code: 200 }))).annotate({
1856
1851
  identifier: "DeleteNodeQemuRequest",
1857
1852
  });
1858
1853
  export const DeleteNodeQemuResponse = /*@__PURE__*/ S.suspend(() => S.String.pipe(T.RawResponseRoot())).annotate({
@@ -1862,12 +1857,11 @@ export const DeleteNodeQemuFirewallAliasRequest = /*@__PURE__*/ S.suspend(() =>
1862
1857
  node: S.String.pipe(T.Label()),
1863
1858
  vmid: S.String.pipe(T.Label()),
1864
1859
  name: S.String.pipe(T.Label()),
1865
- digest: S.optional(S.String),
1860
+ digest: S.optional(S.String.pipe(T.Query())),
1866
1861
  }).pipe(T.Http({
1867
1862
  method: "DELETE",
1868
1863
  uri: "/nodes/{node}/qemu/{vmid}/firewall/aliases/{name}",
1869
1864
  code: 200,
1870
- contentType: "form-urlencoded",
1871
1865
  }))).annotate({
1872
1866
  identifier: "DeleteNodeQemuFirewallAliasRequest",
1873
1867
  });
@@ -1878,12 +1872,11 @@ export const DeleteNodeQemuFirewallIpsetRequest = /*@__PURE__*/ S.suspend(() =>
1878
1872
  node: S.String.pipe(T.Label()),
1879
1873
  vmid: S.String.pipe(T.Label()),
1880
1874
  name: S.String.pipe(T.Label()),
1881
- force: S.optional(S.String),
1875
+ force: S.optional(S.String.pipe(T.Query())),
1882
1876
  }).pipe(T.Http({
1883
1877
  method: "DELETE",
1884
1878
  uri: "/nodes/{node}/qemu/{vmid}/firewall/ipset/{name}",
1885
1879
  code: 200,
1886
- contentType: "form-urlencoded",
1887
1880
  }))).annotate({
1888
1881
  identifier: "DeleteNodeQemuFirewallIpsetRequest",
1889
1882
  });
@@ -1895,12 +1888,11 @@ export const DeleteNodeQemuFirewallIpset2Request = /*@__PURE__*/ S.suspend(() =>
1895
1888
  vmid: S.String.pipe(T.Label()),
1896
1889
  name: S.String.pipe(T.Label()),
1897
1890
  cidr: S.String.pipe(T.Label()),
1898
- digest: S.optional(S.String),
1891
+ digest: S.optional(S.String.pipe(T.Query())),
1899
1892
  }).pipe(T.Http({
1900
1893
  method: "DELETE",
1901
1894
  uri: "/nodes/{node}/qemu/{vmid}/firewall/ipset/{name}/{cidr}",
1902
1895
  code: 200,
1903
- contentType: "form-urlencoded",
1904
1896
  }))).annotate({
1905
1897
  identifier: "DeleteNodeQemuFirewallIpset2Request",
1906
1898
  });
@@ -1911,12 +1903,11 @@ export const DeleteNodeQemuFirewallRuleRequest = /*@__PURE__*/ S.suspend(() => S
1911
1903
  node: S.String.pipe(T.Label()),
1912
1904
  vmid: S.String.pipe(T.Label()),
1913
1905
  pos: S.String.pipe(T.Label()),
1914
- digest: S.optional(S.String),
1906
+ digest: S.optional(S.String.pipe(T.Query())),
1915
1907
  }).pipe(T.Http({
1916
1908
  method: "DELETE",
1917
1909
  uri: "/nodes/{node}/qemu/{vmid}/firewall/rules/{pos}",
1918
1910
  code: 200,
1919
- contentType: "form-urlencoded",
1920
1911
  }))).annotate({
1921
1912
  identifier: "DeleteNodeQemuFirewallRuleRequest",
1922
1913
  });
@@ -1927,12 +1918,11 @@ export const DeleteNodeQemuSnapshotRequest = /*@__PURE__*/ S.suspend(() => S.Str
1927
1918
  node: S.String.pipe(T.Label()),
1928
1919
  vmid: S.String.pipe(T.Label()),
1929
1920
  snapname: S.String.pipe(T.Label()),
1930
- force: S.optional(S.String),
1921
+ force: S.optional(S.String.pipe(T.Query())),
1931
1922
  }).pipe(T.Http({
1932
1923
  method: "DELETE",
1933
1924
  uri: "/nodes/{node}/qemu/{vmid}/snapshot/{snapname}",
1934
1925
  code: 200,
1935
- contentType: "form-urlencoded",
1936
1926
  }))).annotate({
1937
1927
  identifier: "DeleteNodeQemuSnapshotRequest",
1938
1928
  });
@@ -1943,12 +1933,11 @@ export const DeleteNodeStorageContentRequest = /*@__PURE__*/ S.suspend(() => S.S
1943
1933
  node: S.String.pipe(T.Label()),
1944
1934
  storage: S.String.pipe(T.Label()),
1945
1935
  volume: S.String.pipe(T.Label()),
1946
- delay: S.optional(S.String),
1936
+ delay: S.optional(S.String.pipe(T.Query())),
1947
1937
  }).pipe(T.Http({
1948
1938
  method: "DELETE",
1949
1939
  uri: "/nodes/{node}/storage/{storage}/content/{volume}",
1950
1940
  code: 200,
1951
- contentType: "form-urlencoded",
1952
1941
  }))).annotate({
1953
1942
  identifier: "DeleteNodeStorageContentRequest",
1954
1943
  });
@@ -1959,14 +1948,13 @@ export const DeleteNodeStoragePrunebackupsRequestType = S.String;
1959
1948
  export const DeleteNodeStoragePrunebackupsRequest = /*@__PURE__*/ S.suspend(() => S.Struct({
1960
1949
  node: S.String.pipe(T.Label()),
1961
1950
  storage: S.String.pipe(T.Label()),
1962
- prune_backups: S.optional(S.String.pipe(T.Body("prune-backups"))),
1963
- type: S.optional(DeleteNodeStoragePrunebackupsRequestType),
1964
- vmid: S.optional(S.String),
1951
+ prune_backups: S.optional(S.String.pipe(T.Query("prune-backups"))),
1952
+ type: S.optional(DeleteNodeStoragePrunebackupsRequestType.pipe(T.Query())),
1953
+ vmid: S.optional(S.String.pipe(T.Query())),
1965
1954
  }).pipe(T.Http({
1966
1955
  method: "DELETE",
1967
1956
  uri: "/nodes/{node}/storage/{storage}/prunebackups",
1968
1957
  code: 200,
1969
- contentType: "form-urlencoded",
1970
1958
  }))).annotate({
1971
1959
  identifier: "DeleteNodeStoragePrunebackupsRequest",
1972
1960
  });
@@ -7947,7 +7935,7 @@ export const createNodeWakeonlan = /*@__PURE__*/ API.make(() => ({
7947
7935
  export const deleteNodeCephFs = /*@__PURE__*/ API.make(() => ({
7948
7936
  input: DeleteNodeCephFsRequest,
7949
7937
  output: DeleteNodeCephFsResponse,
7950
- errors: [],
7938
+ errors: [CephFsNotFound],
7951
7939
  protocol: ProxmoxProtocol,
7952
7940
  retry: Retry.Retry,
7953
7941
  }));
@@ -8323,7 +8311,7 @@ export const getNodeCephPool = /*@__PURE__*/ API.make(() => ({
8323
8311
  export const getNodeCephPoolStatus = /*@__PURE__*/ API.make(() => ({
8324
8312
  input: GetNodeCephPoolStatusRequest,
8325
8313
  output: GetNodeCephPoolStatusResponse,
8326
- errors: [],
8314
+ errors: [CephPoolNotFound],
8327
8315
  protocol: ProxmoxProtocol,
8328
8316
  retry: Retry.Retry,
8329
8317
  }));