@homeflare/alchemy 0.1.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 (417) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +62 -0
  3. package/dist/cloudflare/client.d.ts +45 -0
  4. package/dist/cloudflare/client.d.ts.map +1 -0
  5. package/dist/cloudflare/index.d.ts +11 -0
  6. package/dist/cloudflare/index.d.ts.map +1 -0
  7. package/dist/cloudflare/index.js +129 -0
  8. package/dist/cloudflare/index.js.map +13 -0
  9. package/dist/cloudflare/lock-rules.d.ts +50 -0
  10. package/dist/cloudflare/lock-rules.d.ts.map +1 -0
  11. package/dist/cloudflare/providers.d.ts +19 -0
  12. package/dist/cloudflare/providers.d.ts.map +1 -0
  13. package/dist/cloudflare/r2-bucket-lock.d.ts +100 -0
  14. package/dist/cloudflare/r2-bucket-lock.d.ts.map +1 -0
  15. package/dist/forgejo/branch-protection-form.d.ts +19 -0
  16. package/dist/forgejo/branch-protection-form.d.ts.map +1 -0
  17. package/dist/forgejo/branch-protection.d.ts +47 -0
  18. package/dist/forgejo/branch-protection.d.ts.map +1 -0
  19. package/dist/forgejo/client.d.ts +37 -0
  20. package/dist/forgejo/client.d.ts.map +1 -0
  21. package/dist/forgejo/index.d.ts +18 -0
  22. package/dist/forgejo/index.d.ts.map +1 -0
  23. package/dist/forgejo/index.js +479 -0
  24. package/dist/forgejo/index.js.map +21 -0
  25. package/dist/forgejo/org-actions-secrets.d.ts +45 -0
  26. package/dist/forgejo/org-actions-secrets.d.ts.map +1 -0
  27. package/dist/forgejo/org-label.d.ts +46 -0
  28. package/dist/forgejo/org-label.d.ts.map +1 -0
  29. package/dist/forgejo/org-team.d.ts +42 -0
  30. package/dist/forgejo/org-team.d.ts.map +1 -0
  31. package/dist/forgejo/repo-webhook-form.d.ts +27 -0
  32. package/dist/forgejo/repo-webhook-form.d.ts.map +1 -0
  33. package/dist/forgejo/repo-webhook.d.ts +46 -0
  34. package/dist/forgejo/repo-webhook.d.ts.map +1 -0
  35. package/dist/forgejo/repository.d.ts +45 -0
  36. package/dist/forgejo/repository.d.ts.map +1 -0
  37. package/dist/forgejo/resource.d.ts +83 -0
  38. package/dist/forgejo/resource.d.ts.map +1 -0
  39. package/dist/forgejo/team-member.d.ts +39 -0
  40. package/dist/forgejo/team-member.d.ts.map +1 -0
  41. package/dist/forgejo/values.d.ts +24 -0
  42. package/dist/forgejo/values.d.ts.map +1 -0
  43. package/dist/index.d.ts +18 -0
  44. package/dist/index.d.ts.map +1 -0
  45. package/dist/index.js +3 -0
  46. package/dist/index.js.map +9 -0
  47. package/dist/openbao/auth-role-form.d.ts +38 -0
  48. package/dist/openbao/auth-role-form.d.ts.map +1 -0
  49. package/dist/openbao/auth-role.d.ts +20 -0
  50. package/dist/openbao/auth-role.d.ts.map +1 -0
  51. package/dist/openbao/bao-address.d.ts +72 -0
  52. package/dist/openbao/bao-address.d.ts.map +1 -0
  53. package/dist/openbao/bao-http.d.ts +71 -0
  54. package/dist/openbao/bao-http.d.ts.map +1 -0
  55. package/dist/openbao/bao-status.d.ts +74 -0
  56. package/dist/openbao/bao-status.d.ts.map +1 -0
  57. package/dist/openbao/cloudflare-group-scope.d.ts +73 -0
  58. package/dist/openbao/cloudflare-group-scope.d.ts.map +1 -0
  59. package/dist/openbao/cloudflare-parity-catalog.d.ts +28 -0
  60. package/dist/openbao/cloudflare-parity-catalog.d.ts.map +1 -0
  61. package/dist/openbao/cloudflare-parity-snapshot.d.ts +31 -0
  62. package/dist/openbao/cloudflare-parity-snapshot.d.ts.map +1 -0
  63. package/dist/openbao/cloudflare-parity.d.ts +14 -0
  64. package/dist/openbao/cloudflare-parity.d.ts.map +1 -0
  65. package/dist/openbao/cloudflare-permission-groups-solve.d.ts +85 -0
  66. package/dist/openbao/cloudflare-permission-groups-solve.d.ts.map +1 -0
  67. package/dist/openbao/cloudflare-permission-groups.d.ts +87 -0
  68. package/dist/openbao/cloudflare-permission-groups.d.ts.map +1 -0
  69. package/dist/openbao/cloudflare-policy.d.ts +65 -0
  70. package/dist/openbao/cloudflare-policy.d.ts.map +1 -0
  71. package/dist/openbao/cloudflare-role-form.d.ts +110 -0
  72. package/dist/openbao/cloudflare-role-form.d.ts.map +1 -0
  73. package/dist/openbao/cloudflare-role-wire.d.ts +27 -0
  74. package/dist/openbao/cloudflare-role-wire.d.ts.map +1 -0
  75. package/dist/openbao/cloudflare-role.d.ts +35 -0
  76. package/dist/openbao/cloudflare-role.d.ts.map +1 -0
  77. package/dist/openbao/cloudflare-roles-config.d.ts +67 -0
  78. package/dist/openbao/cloudflare-roles-config.d.ts.map +1 -0
  79. package/dist/openbao/cloudflare-roles-expand.d.ts +76 -0
  80. package/dist/openbao/cloudflare-roles-expand.d.ts.map +1 -0
  81. package/dist/openbao/digest.d.ts +24 -0
  82. package/dist/openbao/digest.d.ts.map +1 -0
  83. package/dist/openbao/fake-bao.d.ts +40 -0
  84. package/dist/openbao/fake-bao.d.ts.map +1 -0
  85. package/dist/openbao/forgejo-bootstrap-parse.d.ts +46 -0
  86. package/dist/openbao/forgejo-bootstrap-parse.d.ts.map +1 -0
  87. package/dist/openbao/forgejo-bootstrap.d.ts +29 -0
  88. package/dist/openbao/forgejo-bootstrap.d.ts.map +1 -0
  89. package/dist/openbao/index.d.ts +18 -0
  90. package/dist/openbao/index.d.ts.map +1 -0
  91. package/dist/openbao/index.js +1158 -0
  92. package/dist/openbao/index.js.map +33 -0
  93. package/dist/openbao/mount-form.d.ts +60 -0
  94. package/dist/openbao/mount-form.d.ts.map +1 -0
  95. package/dist/openbao/mount-wire.d.ts +24 -0
  96. package/dist/openbao/mount-wire.d.ts.map +1 -0
  97. package/dist/openbao/mount.d.ts +20 -0
  98. package/dist/openbao/mount.d.ts.map +1 -0
  99. package/dist/openbao/pki-role-form.d.ts +118 -0
  100. package/dist/openbao/pki-role-form.d.ts.map +1 -0
  101. package/dist/openbao/pki-role.d.ts +50 -0
  102. package/dist/openbao/pki-role.d.ts.map +1 -0
  103. package/dist/openbao/policy-assembly.d.ts +13 -0
  104. package/dist/openbao/policy-assembly.d.ts.map +1 -0
  105. package/dist/openbao/policy-wire.d.ts +41 -0
  106. package/dist/openbao/policy-wire.d.ts.map +1 -0
  107. package/dist/openbao/policy.d.ts +83 -0
  108. package/dist/openbao/policy.d.ts.map +1 -0
  109. package/dist/openbao/proxmox-role-form.d.ts +92 -0
  110. package/dist/openbao/proxmox-role-form.d.ts.map +1 -0
  111. package/dist/openbao/proxmox-role.d.ts +47 -0
  112. package/dist/openbao/proxmox-role.d.ts.map +1 -0
  113. package/dist/openbao/ssh-role-form.d.ts +99 -0
  114. package/dist/openbao/ssh-role-form.d.ts.map +1 -0
  115. package/dist/openbao/ssh-role.d.ts +43 -0
  116. package/dist/openbao/ssh-role.d.ts.map +1 -0
  117. package/dist/proxmox/acl.d.ts +72 -0
  118. package/dist/proxmox/acl.d.ts.map +1 -0
  119. package/dist/proxmox/api-token-form.d.ts +59 -0
  120. package/dist/proxmox/api-token-form.d.ts.map +1 -0
  121. package/dist/proxmox/api-token.d.ts +159 -0
  122. package/dist/proxmox/api-token.d.ts.map +1 -0
  123. package/dist/proxmox/backup-job.d.ts +112 -0
  124. package/dist/proxmox/backup-job.d.ts.map +1 -0
  125. package/dist/proxmox/ceph-daemon-form.d.ts +70 -0
  126. package/dist/proxmox/ceph-daemon-form.d.ts.map +1 -0
  127. package/dist/proxmox/ceph-daemon.d.ts +162 -0
  128. package/dist/proxmox/ceph-daemon.d.ts.map +1 -0
  129. package/dist/proxmox/ceph-flag.d.ts +131 -0
  130. package/dist/proxmox/ceph-flag.d.ts.map +1 -0
  131. package/dist/proxmox/ceph-fs-wire.d.ts +106 -0
  132. package/dist/proxmox/ceph-fs-wire.d.ts.map +1 -0
  133. package/dist/proxmox/ceph-fs.d.ts +124 -0
  134. package/dist/proxmox/ceph-fs.d.ts.map +1 -0
  135. package/dist/proxmox/ceph-osd-tree.d.ts +154 -0
  136. package/dist/proxmox/ceph-osd-tree.d.ts.map +1 -0
  137. package/dist/proxmox/ceph-osd-write.d.ts +36 -0
  138. package/dist/proxmox/ceph-osd-write.d.ts.map +1 -0
  139. package/dist/proxmox/ceph-osd.d.ts +102 -0
  140. package/dist/proxmox/ceph-osd.d.ts.map +1 -0
  141. package/dist/proxmox/ceph-pool-form.d.ts +217 -0
  142. package/dist/proxmox/ceph-pool-form.d.ts.map +1 -0
  143. package/dist/proxmox/ceph-pool-settle.d.ts +39 -0
  144. package/dist/proxmox/ceph-pool-settle.d.ts.map +1 -0
  145. package/dist/proxmox/ceph-pool.d.ts +48 -0
  146. package/dist/proxmox/ceph-pool.d.ts.map +1 -0
  147. package/dist/proxmox/client.d.ts +64 -0
  148. package/dist/proxmox/client.d.ts.map +1 -0
  149. package/dist/proxmox/credentials.d.ts +153 -0
  150. package/dist/proxmox/credentials.d.ts.map +1 -0
  151. package/dist/proxmox/firewall-alias-form.d.ts +98 -0
  152. package/dist/proxmox/firewall-alias-form.d.ts.map +1 -0
  153. package/dist/proxmox/firewall-alias.d.ts +141 -0
  154. package/dist/proxmox/firewall-alias.d.ts.map +1 -0
  155. package/dist/proxmox/generated/pbs.d.ts +388 -0
  156. package/dist/proxmox/generated/pbs.d.ts.map +1 -0
  157. package/dist/proxmox/generated/pve.d.ts +4713 -0
  158. package/dist/proxmox/generated/pve.d.ts.map +1 -0
  159. package/dist/proxmox/group.d.ts +104 -0
  160. package/dist/proxmox/group.d.ts.map +1 -0
  161. package/dist/proxmox/ha-resource.d.ts +104 -0
  162. package/dist/proxmox/ha-resource.d.ts.map +1 -0
  163. package/dist/proxmox/ha-rule-form.d.ts +103 -0
  164. package/dist/proxmox/ha-rule-form.d.ts.map +1 -0
  165. package/dist/proxmox/ha-rule.d.ts +156 -0
  166. package/dist/proxmox/ha-rule.d.ts.map +1 -0
  167. package/dist/proxmox/index.d.ts +43 -0
  168. package/dist/proxmox/index.d.ts.map +1 -0
  169. package/dist/proxmox/index.js +2322 -0
  170. package/dist/proxmox/index.js.map +70 -0
  171. package/dist/proxmox/lease-cache.d.ts +98 -0
  172. package/dist/proxmox/lease-cache.d.ts.map +1 -0
  173. package/dist/proxmox/lxc.d.ts +59 -0
  174. package/dist/proxmox/lxc.d.ts.map +1 -0
  175. package/dist/proxmox/members.d.ts +56 -0
  176. package/dist/proxmox/members.d.ts.map +1 -0
  177. package/dist/proxmox/metric-server-form.d.ts +53 -0
  178. package/dist/proxmox/metric-server-form.d.ts.map +1 -0
  179. package/dist/proxmox/metric-server-otel.d.ts +49 -0
  180. package/dist/proxmox/metric-server-otel.d.ts.map +1 -0
  181. package/dist/proxmox/metric-server.d.ts +123 -0
  182. package/dist/proxmox/metric-server.d.ts.map +1 -0
  183. package/dist/proxmox/network-apply-read.d.ts +93 -0
  184. package/dist/proxmox/network-apply-read.d.ts.map +1 -0
  185. package/dist/proxmox/network-apply.d.ts +102 -0
  186. package/dist/proxmox/network-apply.d.ts.map +1 -0
  187. package/dist/proxmox/node-network-form.d.ts +128 -0
  188. package/dist/proxmox/node-network-form.d.ts.map +1 -0
  189. package/dist/proxmox/node-network.d.ts +173 -0
  190. package/dist/proxmox/node-network.d.ts.map +1 -0
  191. package/dist/proxmox/notification-target-form.d.ts +44 -0
  192. package/dist/proxmox/notification-target-form.d.ts.map +1 -0
  193. package/dist/proxmox/notification-target.d.ts +146 -0
  194. package/dist/proxmox/notification-target.d.ts.map +1 -0
  195. package/dist/proxmox/pbs-datastore-form.d.ts +147 -0
  196. package/dist/proxmox/pbs-datastore-form.d.ts.map +1 -0
  197. package/dist/proxmox/pbs-datastore-guard.d.ts +55 -0
  198. package/dist/proxmox/pbs-datastore-guard.d.ts.map +1 -0
  199. package/dist/proxmox/pbs-datastore.d.ts +140 -0
  200. package/dist/proxmox/pbs-datastore.d.ts.map +1 -0
  201. package/dist/proxmox/pbs-prune-job-form.d.ts +97 -0
  202. package/dist/proxmox/pbs-prune-job-form.d.ts.map +1 -0
  203. package/dist/proxmox/pbs-prune-job.d.ts +168 -0
  204. package/dist/proxmox/pbs-prune-job.d.ts.map +1 -0
  205. package/dist/proxmox/pbs-sync-job-form.d.ts +83 -0
  206. package/dist/proxmox/pbs-sync-job-form.d.ts.map +1 -0
  207. package/dist/proxmox/pbs-sync-job.d.ts +246 -0
  208. package/dist/proxmox/pbs-sync-job.d.ts.map +1 -0
  209. package/dist/proxmox/pbs-verify-job-form.d.ts +114 -0
  210. package/dist/proxmox/pbs-verify-job-form.d.ts.map +1 -0
  211. package/dist/proxmox/pbs-verify-job.d.ts +145 -0
  212. package/dist/proxmox/pbs-verify-job.d.ts.map +1 -0
  213. package/dist/proxmox/pool.d.ts +42 -0
  214. package/dist/proxmox/pool.d.ts.map +1 -0
  215. package/dist/proxmox/qemu.d.ts +46 -0
  216. package/dist/proxmox/qemu.d.ts.map +1 -0
  217. package/dist/proxmox/replication-job-form.d.ts +71 -0
  218. package/dist/proxmox/replication-job-form.d.ts.map +1 -0
  219. package/dist/proxmox/replication-job.d.ts +162 -0
  220. package/dist/proxmox/replication-job.d.ts.map +1 -0
  221. package/dist/proxmox/resource.d.ts +157 -0
  222. package/dist/proxmox/resource.d.ts.map +1 -0
  223. package/dist/proxmox/role.d.ts +97 -0
  224. package/dist/proxmox/role.d.ts.map +1 -0
  225. package/dist/proxmox/sdn-apply-read.d.ts +80 -0
  226. package/dist/proxmox/sdn-apply-read.d.ts.map +1 -0
  227. package/dist/proxmox/sdn-apply.d.ts +63 -0
  228. package/dist/proxmox/sdn-apply.d.ts.map +1 -0
  229. package/dist/proxmox/sdn-subnet-form.d.ts +111 -0
  230. package/dist/proxmox/sdn-subnet-form.d.ts.map +1 -0
  231. package/dist/proxmox/sdn-subnet.d.ts +161 -0
  232. package/dist/proxmox/sdn-subnet.d.ts.map +1 -0
  233. package/dist/proxmox/sdn-vnet.d.ts +113 -0
  234. package/dist/proxmox/sdn-vnet.d.ts.map +1 -0
  235. package/dist/proxmox/sdn-zone.d.ts +126 -0
  236. package/dist/proxmox/sdn-zone.d.ts.map +1 -0
  237. package/dist/proxmox/storage.d.ts +120 -0
  238. package/dist/proxmox/storage.d.ts.map +1 -0
  239. package/dist/proxmox/user.d.ts +107 -0
  240. package/dist/proxmox/user.d.ts.map +1 -0
  241. package/dist/proxmox/values.d.ts +134 -0
  242. package/dist/proxmox/values.d.ts.map +1 -0
  243. package/dist/proxmox/zfs-pool-write.d.ts +76 -0
  244. package/dist/proxmox/zfs-pool-write.d.ts.map +1 -0
  245. package/dist/proxmox/zfs-pool.d.ts +146 -0
  246. package/dist/proxmox/zfs-pool.d.ts.map +1 -0
  247. package/dist/talos/credentials.d.ts +30 -0
  248. package/dist/talos/credentials.d.ts.map +1 -0
  249. package/dist/talos/index.d.ts +15 -0
  250. package/dist/talos/index.d.ts.map +1 -0
  251. package/dist/talos/index.js +392 -0
  252. package/dist/talos/index.js.map +16 -0
  253. package/dist/talos/kubeconfig.d.ts +53 -0
  254. package/dist/talos/kubeconfig.d.ts.map +1 -0
  255. package/dist/talos/resource.d.ts +32 -0
  256. package/dist/talos/resource.d.ts.map +1 -0
  257. package/dist/talos/talos-bootstrap.d.ts +27 -0
  258. package/dist/talos/talos-bootstrap.d.ts.map +1 -0
  259. package/dist/talos/talos-cluster-health.d.ts +36 -0
  260. package/dist/talos/talos-cluster-health.d.ts.map +1 -0
  261. package/dist/talos/talos-machine-config.d.ts +41 -0
  262. package/dist/talos/talos-machine-config.d.ts.map +1 -0
  263. package/dist/talos/talosctl.d.ts +29 -0
  264. package/dist/talos/talosctl.d.ts.map +1 -0
  265. package/dist/talos/values.d.ts +20 -0
  266. package/dist/talos/values.d.ts.map +1 -0
  267. package/package.json +57 -0
  268. package/src/cloudflare/client.ts +76 -0
  269. package/src/cloudflare/index.ts +10 -0
  270. package/src/cloudflare/lock-rules.ts +60 -0
  271. package/src/cloudflare/providers.ts +23 -0
  272. package/src/cloudflare/r2-bucket-lock.ts +220 -0
  273. package/src/forgejo/branch-protection-form.ts +29 -0
  274. package/src/forgejo/branch-protection.ts +101 -0
  275. package/src/forgejo/client.ts +136 -0
  276. package/src/forgejo/index.ts +17 -0
  277. package/src/forgejo/org-actions-secrets.ts +99 -0
  278. package/src/forgejo/org-label.ts +100 -0
  279. package/src/forgejo/org-team.ts +105 -0
  280. package/src/forgejo/repo-webhook-form.ts +47 -0
  281. package/src/forgejo/repo-webhook.ts +118 -0
  282. package/src/forgejo/repository.ts +126 -0
  283. package/src/forgejo/resource.ts +171 -0
  284. package/src/forgejo/team-member.ts +97 -0
  285. package/src/forgejo/values.test.ts +48 -0
  286. package/src/forgejo/values.ts +61 -0
  287. package/src/index.ts +18 -0
  288. package/src/openbao/auth-role-form.ts +112 -0
  289. package/src/openbao/auth-role.ts +101 -0
  290. package/src/openbao/bao-address.test.ts +89 -0
  291. package/src/openbao/bao-address.ts +97 -0
  292. package/src/openbao/bao-http-gate.test.ts +88 -0
  293. package/src/openbao/bao-http-unix.test.ts +70 -0
  294. package/src/openbao/bao-http.test.ts +161 -0
  295. package/src/openbao/bao-http.ts +185 -0
  296. package/src/openbao/bao-status.test.ts +114 -0
  297. package/src/openbao/bao-status.ts +137 -0
  298. package/src/openbao/cloudflare-group-scope.test.ts +103 -0
  299. package/src/openbao/cloudflare-group-scope.ts +83 -0
  300. package/src/openbao/cloudflare-parity-catalog.ts +104 -0
  301. package/src/openbao/cloudflare-parity-snapshot.ts +84 -0
  302. package/src/openbao/cloudflare-parity.ts +152 -0
  303. package/src/openbao/cloudflare-permission-groups-solve.test.ts +171 -0
  304. package/src/openbao/cloudflare-permission-groups-solve.ts +197 -0
  305. package/src/openbao/cloudflare-permission-groups.test.ts +369 -0
  306. package/src/openbao/cloudflare-permission-groups.ts +299 -0
  307. package/src/openbao/cloudflare-policy.ts +180 -0
  308. package/src/openbao/cloudflare-role-form.test.ts +177 -0
  309. package/src/openbao/cloudflare-role-form.ts +183 -0
  310. package/src/openbao/cloudflare-role-wire.test.ts +132 -0
  311. package/src/openbao/cloudflare-role-wire.ts +41 -0
  312. package/src/openbao/cloudflare-role.ts +189 -0
  313. package/src/openbao/cloudflare-roles-config.ts +230 -0
  314. package/src/openbao/cloudflare-roles-expand-bucket.test.ts +134 -0
  315. package/src/openbao/cloudflare-roles-expand.ts +231 -0
  316. package/src/openbao/digest.ts +26 -0
  317. package/src/openbao/fake-bao.ts +84 -0
  318. package/src/openbao/forgejo-bootstrap-parse.test.ts +76 -0
  319. package/src/openbao/forgejo-bootstrap-parse.ts +90 -0
  320. package/src/openbao/forgejo-bootstrap.ts +181 -0
  321. package/src/openbao/index.ts +17 -0
  322. package/src/openbao/mount-form.ts +147 -0
  323. package/src/openbao/mount-wire.test.ts +108 -0
  324. package/src/openbao/mount-wire.ts +79 -0
  325. package/src/openbao/mount.ts +132 -0
  326. package/src/openbao/pki-role-form.ts +248 -0
  327. package/src/openbao/pki-role.ts +202 -0
  328. package/src/openbao/policy-assembly.test.ts +28 -0
  329. package/src/openbao/policy-assembly.ts +13 -0
  330. package/src/openbao/policy-wire.test.ts +90 -0
  331. package/src/openbao/policy-wire.ts +53 -0
  332. package/src/openbao/policy.ts +212 -0
  333. package/src/openbao/proxmox-role-form.ts +174 -0
  334. package/src/openbao/proxmox-role.ts +214 -0
  335. package/src/openbao/ssh-role-form.ts +248 -0
  336. package/src/openbao/ssh-role.ts +240 -0
  337. package/src/proxmox/acl.ts +267 -0
  338. package/src/proxmox/api-token-form.ts +122 -0
  339. package/src/proxmox/api-token.ts +222 -0
  340. package/src/proxmox/backup-job.ts +213 -0
  341. package/src/proxmox/ceph-daemon-form.ts +84 -0
  342. package/src/proxmox/ceph-daemon.ts +243 -0
  343. package/src/proxmox/ceph-flag.ts +249 -0
  344. package/src/proxmox/ceph-fs-wire.ts +246 -0
  345. package/src/proxmox/ceph-fs.ts +249 -0
  346. package/src/proxmox/ceph-osd-tree.ts +193 -0
  347. package/src/proxmox/ceph-osd-write.ts +76 -0
  348. package/src/proxmox/ceph-osd.ts +244 -0
  349. package/src/proxmox/ceph-pool-form.ts +249 -0
  350. package/src/proxmox/ceph-pool-settle.ts +70 -0
  351. package/src/proxmox/ceph-pool.ts +212 -0
  352. package/src/proxmox/client.test.ts +185 -0
  353. package/src/proxmox/client.ts +240 -0
  354. package/src/proxmox/credentials.test.ts +144 -0
  355. package/src/proxmox/credentials.ts +254 -0
  356. package/src/proxmox/firewall-alias-form.ts +112 -0
  357. package/src/proxmox/firewall-alias.ts +208 -0
  358. package/src/proxmox/generated/pbs.ts +461 -0
  359. package/src/proxmox/generated/pve.ts +7344 -0
  360. package/src/proxmox/group.ts +199 -0
  361. package/src/proxmox/ha-resource.ts +169 -0
  362. package/src/proxmox/ha-rule-form.ts +185 -0
  363. package/src/proxmox/ha-rule.ts +240 -0
  364. package/src/proxmox/index.ts +42 -0
  365. package/src/proxmox/lease-cache.test.ts +163 -0
  366. package/src/proxmox/lease-cache.ts +131 -0
  367. package/src/proxmox/lxc.ts +117 -0
  368. package/src/proxmox/members.test.ts +54 -0
  369. package/src/proxmox/members.ts +174 -0
  370. package/src/proxmox/metric-server-form.ts +128 -0
  371. package/src/proxmox/metric-server-otel.ts +99 -0
  372. package/src/proxmox/metric-server.ts +214 -0
  373. package/src/proxmox/network-apply-read.ts +228 -0
  374. package/src/proxmox/network-apply.ts +244 -0
  375. package/src/proxmox/node-network-form.ts +213 -0
  376. package/src/proxmox/node-network.ts +243 -0
  377. package/src/proxmox/notification-target-form.ts +104 -0
  378. package/src/proxmox/notification-target.ts +222 -0
  379. package/src/proxmox/pbs-datastore-form.ts +248 -0
  380. package/src/proxmox/pbs-datastore-guard.ts +105 -0
  381. package/src/proxmox/pbs-datastore.ts +271 -0
  382. package/src/proxmox/pbs-prune-job-form.ts +208 -0
  383. package/src/proxmox/pbs-prune-job.ts +227 -0
  384. package/src/proxmox/pbs-sync-job-form.ts +234 -0
  385. package/src/proxmox/pbs-sync-job.ts +258 -0
  386. package/src/proxmox/pbs-verify-job-form.ts +131 -0
  387. package/src/proxmox/pbs-verify-job.ts +227 -0
  388. package/src/proxmox/pool.test.ts +42 -0
  389. package/src/proxmox/pool.ts +80 -0
  390. package/src/proxmox/qemu.ts +89 -0
  391. package/src/proxmox/replication-job-form.ts +89 -0
  392. package/src/proxmox/replication-job.ts +248 -0
  393. package/src/proxmox/resource.ts +257 -0
  394. package/src/proxmox/role.ts +161 -0
  395. package/src/proxmox/sdn-apply-read.test.ts +152 -0
  396. package/src/proxmox/sdn-apply-read.ts +189 -0
  397. package/src/proxmox/sdn-apply.ts +154 -0
  398. package/src/proxmox/sdn-subnet-form.ts +156 -0
  399. package/src/proxmox/sdn-subnet.ts +238 -0
  400. package/src/proxmox/sdn-vnet.ts +228 -0
  401. package/src/proxmox/sdn-zone.ts +246 -0
  402. package/src/proxmox/storage.ts +245 -0
  403. package/src/proxmox/user.ts +214 -0
  404. package/src/proxmox/values.test.ts +193 -0
  405. package/src/proxmox/values.ts +203 -0
  406. package/src/proxmox/zfs-pool-write.ts +130 -0
  407. package/src/proxmox/zfs-pool.ts +253 -0
  408. package/src/talos/credentials.ts +136 -0
  409. package/src/talos/index.ts +14 -0
  410. package/src/talos/kubeconfig.ts +170 -0
  411. package/src/talos/resource.ts +31 -0
  412. package/src/talos/talos-bootstrap.ts +109 -0
  413. package/src/talos/talos-cluster-health.ts +119 -0
  414. package/src/talos/talos-machine-config.ts +146 -0
  415. package/src/talos/talosctl.ts +94 -0
  416. package/src/talos/values.test.ts +80 -0
  417. package/src/talos/values.ts +70 -0
@@ -0,0 +1,208 @@
1
+ /**
2
+ * `Proxmox.FirewallAlias` — a named network the cluster firewall can be written in terms of.
3
+ *
4
+ * ★ WHY THIS FAMILY AND NOT FIREWALL RULES, WHICH IS THE ONE EVERYONE REACHES FOR FIRST. A rule is
5
+ * addressed BY POSITION — `/cluster/firewall/rules/{pos}` — so inserting a rule renumbers every
6
+ * rule below it. A position-keyed resource therefore RETARGETS ITSELF at somebody else's rule the
7
+ * moment anything is inserted above it, and it does so while the plan looks clean: the path still
8
+ * resolves, the read still succeeds, the diff is simply computed against the wrong object.
9
+ * Aliases, ipsets and security groups are the firewall objects with STABLE IDENTITY — a name, not
10
+ * an index — and they are the ones worth declaring. Rules belong in this package only once
11
+ * somebody models the whole ordered list as ONE resource, which is a different shape from
12
+ * `PveSpec` and should look different.
13
+ *
14
+ * ★ AND THE ALIAS IS THE PIECE THAT EARNS THE MOST BY BEING DECLARED. `10.1.0.0/16` spelled into
15
+ * nine rules is nine places to edit and one to forget; `HomeLan` spelled into nine rules is one
16
+ * place, resolved by PVE at compile time. The alias is the object that has to be right.
17
+ *
18
+ * ⛔ PVE REWRITES THE CIDR ON READ, AND THAT IS THE FOREVER-DIFF THIS RESOURCE IS SHAPED AROUND.
19
+ * A declared `10.1.1.5/32` reads back as `10.1.1.5`. `cidr()` in `firewall-alias-form.ts` applies
20
+ * exactly the cluster's own transformation to BOTH sides and carries the measurements; read that
21
+ * comment before touching either side of `matches` below.
22
+ *
23
+ * ⛔ `ipversion` IS RETURNED BY THE READ AND REFUSED BY EVERY WRITE. `parse_alias` derives it from
24
+ * the address and `read_alias` hands the parsed entry straight back, while POST and PUT declare
25
+ * `additionalProperties: 0` with no such parameter — sending it is a 400, not an ignored hint. It
26
+ * is REPORTED as an attribute so a plan can say whether an alias is v4 or v6, and kept OUT of
27
+ * `matches`, exactly like `pool.members` and `user.tokens`.
28
+ *
29
+ * ⚠️ `digest` NEVER REACHES THIS PROVIDER, which is a better answer than keeping it out of
30
+ * `matches`. The LIST read runs its entries through `copy_list_with_digest` and stamps one — and
31
+ * it changes whenever ANYTHING else in the firewall config changes, so a resource that stored it
32
+ * would diff on a rule somebody else edited. The SINGLE-OBJECT read this resource uses returns
33
+ * `$aliases->{$name}` raw, with no digest in it at all. None is sent on write either:
34
+ * `PVE::Tools::assert_if_modified` skips the comparison when either side is undef, and the API
35
+ * handler already holds `lock_clusterfw_conf(10, ...)` for the whole read-modify-write. So
36
+ * declining optimistic locking buys last-writer-wins between two concurrent editors, not a torn
37
+ * file — and the alternative, storing a cluster-wide digest per alias, buys a permanent diff.
38
+ *
39
+ * ⚠️ THE NAME IS CASE-FOLDED FOR IDENTITY AND PRESERVED FOR DISPLAY, which reads as a bug until you
40
+ * see both halves. The config is keyed `$aliases->{lc($data->{name})}` while the entry stores the
41
+ * name as written, and the item GET lowers its path segment too — so `homelan` and `HomeLan` are
42
+ * ONE alias, reachable by either spelling. `name` is therefore reported from the live config and
43
+ * kept OUT of `matches`: rewriting an alias to change its capitalisation is a cosmetic write to
44
+ * the file every node recompiles its firewall from.
45
+ * ⛔ AND TWO DECLARATIONS DIFFERING ONLY IN CASE ARE THE SAME OBJECT, which is the `acl.ts`
46
+ * hazard again. Alchemy sees two resource ids, the cluster sees one alias, and deleting either
47
+ * takes it away from both.
48
+ *
49
+ * ⚠️ A RENAME IS MODELLED AS A REPLACE, NOT AS AN UPDATE, AND THE REJECTED OPTION WAS REAL. PVE's
50
+ * PUT does take a `rename` parameter and Alchemy's `reconcile` does receive `olds`, so an
51
+ * in-place rename was available. It was rejected because using it means hand-writing `reconcile`
52
+ * as well as `diff` and branching on four states — old present or absent, new present or absent —
53
+ * each branch a fresh way to write the wrong object, and all of it to buy only the gap between
54
+ * the create and the delete. What a rename must NOT be is silent, which is what the factory alone
55
+ * would make it: the read at the NEW path answers absent, `diff` says update, reconcile POSTs a
56
+ * SECOND alias, and the old one stays in `cluster.fw` with its old CIDR — still resolving in
57
+ * every rule that names it, and invisible to every later plan. `diff` below says `replace`.
58
+ * ⚠️ CREATE-FIRST, as Alchemy defaults and as `acl.ts` argues: the new alias exists before the
59
+ * old one goes, so a rules change can be sequenced between the two generations.
60
+ *
61
+ * ⚠️ PRIVILEGES, AND FOR ONCE NOTHING NEEDS WIDENING. MEASURED 2026-09-13 from the cluster's own
62
+ * schema and its live ACL: the item GET checks `["perm","/",["Sys.Audit"]]`, POST/PUT/DELETE
63
+ * check `["perm","/",["Sys.Modify"]]`, `hf-read@pve` holds `PVEAuditor` at `/` with propagate and
64
+ * `hf-provision@pve` holds `LXCProvisioner` at `/` with propagate. Both privileges are already
65
+ * held, so `readRole` stays the default `read` lane — unlike storage/sdn-zone/sdn-vnet, whose
66
+ * ITEM reads are gated on an allocate privilege the auditor cannot have.
67
+ * ⚠️ `Sys.Modify` ON `/` IS STILL A BIG HAMMER — it is the same grant `metric-server.ts` warns
68
+ * about, and there is no `/firewall` object to scope a narrower role to.
69
+ *
70
+ * ⚠️ DELETION IS FULLY IMPLEMENTED AND THE DEFAULT POLICY IS DELIBERATELY NOT `retain`. The ★ in
71
+ * `resource.ts` reserves `retain` for objects whose CONTENTS cannot be rebuilt from a line of
72
+ * TypeScript; an alias is a name, a CIDR and a comment, all three of them in the declaration, so
73
+ * recreating one is exact and free. The real hazard is referential — PVE checks nothing before
74
+ * removing an alias, and a rule naming a removed one fails to compile — and `retain` would not
75
+ * fix that, it would only leave an undeclared alias on the cluster forever. Sequence the rules,
76
+ * or pipe `RemovalPolicy.retain()` at the declaration site where the reason is visible.
77
+ *
78
+ * ⚠️ `local_network` IS THE ONE ALIAS NAME WITH CLUSTER-WIDE MEANING. `compile_ipsets` reads
79
+ * `aliases->{local_network}` to decide what the `management` ipset covers, and SYNTHESISES one
80
+ * from the node's own subnet when it is missing — in memory, never written back to the file.
81
+ * Declaring it is stable, because PVE leaves a present one alone. DELETING it hands that decision
82
+ * silently back to autodetection, which is drift no plan will ever show.
83
+ *
84
+ * ⚠️ NO SECRET LIVES IN THIS FAMILY, so nothing here has to be typed `never` to keep it out of
85
+ * Alchemy's unencrypted state the way `metric-server.ts` does with its `token`. A name, a CIDR and
86
+ * a free-text comment are the whole object, and all three are the declaration's own values read
87
+ * back — not a credential held by the cluster.
88
+ *
89
+ * ⚠️ ACCEPTANCE, STATED HONESTLY: `GET /cluster/firewall/aliases` ANSWERS `[]` ON THIS CLUSTER and
90
+ * the cluster firewall is disabled, so there was no live alias to declare and NO create/plan/noop
91
+ * round trip was run. What is measured is the published schema, the API module's Perl, and the
92
+ * cluster's own `parse_alias` exercised on sample lines. Whoever declares the first alias should
93
+ * confirm the SECOND plan says noop before trusting this file.
94
+ */
95
+ import { Resource } from 'alchemy';
96
+ import { isResolved } from 'alchemy/Diff';
97
+ import * as Provider from 'alchemy/Provider';
98
+ import * as Effect from 'effect/Effect';
99
+ import { body, cidr, comment, fold } from './firewall-alias-form.ts';
100
+ import { type PveRequirements, type WithTarget, pveHandlers } from './resource.ts';
101
+ import { int, text } from './values.ts';
102
+
103
+ export interface FirewallAliasProps extends WithTarget {
104
+ /**
105
+ * PVE's `pve-fw-alias`: a letter, then at least one more of letter/digit/`-`/`_`, to 64 chars.
106
+ * ⚠️ IDENTITY, CASE-INSENSITIVELY — see the ⚠️ on folding in the header. A two-character minimum
107
+ * is real: a one-letter name is refused by the pattern, not silently accepted.
108
+ */
109
+ name: string;
110
+ /**
111
+ * An IP or a network, e.g. `10.1.0.0/16`, `10.1.1.5`, `2001:db8::/32`.
112
+ * ⚠️ A `/32` (or `/128`) SUFFIX IS DROPPED BY PVE AND BY `cidr()` ALIKE, so declaring one is
113
+ * harmless — it simply is not what comes back. Anything `parse_ip_or_cidr` refuses is a 400.
114
+ */
115
+ cidr: string;
116
+ /**
117
+ * Free text, stored as a trailing `#` comment on the alias's line in `cluster.fw`.
118
+ * ⚠️ TRIMMED, AND A LINE FEED IS REFUSED. A comment of exactly `0` cannot be stored at all — the
119
+ * ⛔ in `firewall-alias-form.ts` measures why, and why declaring one plans as noop.
120
+ */
121
+ comment?: string;
122
+ }
123
+
124
+ export interface FirewallAliasAttributes {
125
+ /** The spelling held in `cluster.fw`, which need not be the declared one. Never compared. */
126
+ name: string;
127
+ /** Normalised the way PVE normalises it, so it is comparable with a declaration. */
128
+ cidr: string;
129
+ comment: string;
130
+ /**
131
+ * 4 or 6, derived by PVE from the address. Reported so a plan can show which stack an alias
132
+ * covers; never compared, because no write accepts it.
133
+ */
134
+ ipversion: number;
135
+ }
136
+
137
+ export interface ProxmoxFirewallAlias extends Resource<
138
+ 'Proxmox.FirewallAlias',
139
+ FirewallAliasProps,
140
+ FirewallAliasAttributes,
141
+ never,
142
+ PveRequirements
143
+ > {}
144
+
145
+ export const ProxmoxFirewallAlias = Resource<ProxmoxFirewallAlias>('Proxmox.FirewallAlias');
146
+
147
+ const handlers = pveHandlers<FirewallAliasProps, FirewallAliasAttributes>({
148
+ /**
149
+ * ⚠️ AN ENTRY WITH NO CIDR IS NOT AN ALIAS. `read_alias` raises for a name it does not hold, so
150
+ * absence normally arrives as a failed call the factory folds into `undefined`; this guard
151
+ * covers the other shape — a 200 carrying something that is not an alias — rather than
152
+ * recording state for an object with an empty address. The next reconcile then POSTs and PVE
153
+ * answers "alias already exists", which is loud and points at the read.
154
+ */
155
+ attributes: (live, props) => {
156
+ const address = cidr(live['cidr']);
157
+ return address === ''
158
+ ? undefined
159
+ : {
160
+ cidr: address,
161
+ comment: comment(live['comment']),
162
+ ipversion: int(live['ipversion'], 0),
163
+ /** ⚠️ FROM THE CLUSTER, falling back to props: the stored spelling is the interesting one. */
164
+ name: text(live['name'], props.name),
165
+ };
166
+ },
167
+ collection: () => 'cluster/firewall/aliases',
168
+ createForm: (props) => ({ ...body(props), name: props.name }),
169
+ /**
170
+ * ⚠️ EXACTLY THE TWO FIELDS A PUT CAN PUT BACK, both sides through the same normalisers. `name`
171
+ * is identity and case-only drift (see the header); `ipversion` is derived and unwritable.
172
+ * Comparing either would report an update that no update can settle.
173
+ */
174
+ matches: (attributes, props) =>
175
+ attributes.cidr === cidr(props.cidr) && attributes.comment === comment(props.comment),
176
+ /**
177
+ * ⚠️ UNESCAPED ON PURPOSE: `pve-fw-alias` admits only `[A-Za-z][A-Za-z0-9\-\_]+`, so there is no
178
+ * character here that a URL would need to encode, and PVE lowercases the segment on arrival.
179
+ */
180
+ path: (props) => `cluster/firewall/aliases/${props.name}`,
181
+ updateForm: body,
182
+ });
183
+
184
+ /**
185
+ * ⛔ ONE HANDLER IS OVERRIDDEN AND THE REST COME FROM THE FACTORY, for the reason `acl.ts` spells
186
+ * out at length: the factory answers `replace` only for an object with no update path, and this
187
+ * one has a PUT. Left to delegate, a changed `name` would read absent at the new path, plan as an
188
+ * update, and quietly leave the old alias behind. Everything else — the empty `list`, the read,
189
+ * the read-back-guarded reconcile, the delete — is the factory's, unchanged.
190
+ */
191
+ export const ProxmoxFirewallAliasProvider = () =>
192
+ Provider.effect(
193
+ ProxmoxFirewallAlias,
194
+ Effect.succeed(
195
+ ProxmoxFirewallAlias.Provider.of({
196
+ ...handlers,
197
+ diff: Effect.fn(function* ({ news, output }) {
198
+ // ⚠️ `isResolved` FIRST: at plan time `news.name` can still be an unresolved Output, and
199
+ // folding a placeholder would report a replace nobody asked for — the worst possible
200
+ // false positive on this family, since a replace here DELETES an alias.
201
+ if (output !== undefined && isResolved(news) && fold(news.name) !== fold(output.name)) {
202
+ return { action: 'replace' } as const;
203
+ }
204
+ return yield* handlers.diff({ news, output });
205
+ }),
206
+ }),
207
+ ),
208
+ );
@@ -0,0 +1,461 @@
1
+ /**
2
+ * Generated PBS API types — DO NOT EDIT BY HAND.
3
+ *
4
+ * Run: bun codegen/generate.ts
5
+ * Source: house/proxmox/apidoc/ — see README there for provenance.
6
+ */
7
+
8
+ /** GET /config/datastore — `data` payload after client unwrap. */
9
+ export type ConfigDatastoreGetReturn = readonly {
10
+ backend?: string;
11
+ 'backing-device'?: string;
12
+ comment?: string;
13
+ 'counter-reset-schedule'?: string;
14
+ 'gc-on-unmount'?: boolean | 0 | 1;
15
+ 'gc-schedule'?: string;
16
+ 'keep-daily'?: number;
17
+ 'keep-hourly'?: number;
18
+ 'keep-last'?: number;
19
+ 'keep-monthly'?: number;
20
+ 'keep-weekly'?: number;
21
+ 'keep-yearly'?: number;
22
+ 'maintenance-mode'?: string;
23
+ name: string;
24
+ 'notification-mode'?: 'legacy-sendmail' | 'notification-system';
25
+ 'notification-thresholds'?: string;
26
+ notify?: string;
27
+ 'notify-user'?: string;
28
+ path: string;
29
+ 'prune-schedule'?: string;
30
+ tuning?: string;
31
+ 'verify-new'?: boolean | 0 | 1;
32
+ }[];
33
+
34
+ /** POST /config/datastore — form/query parameters (path segments omitted). */
35
+ export type ConfigDatastorePostParams = {
36
+ backend?: string;
37
+ 'backing-device'?: string;
38
+ comment?: string;
39
+ 'counter-reset-schedule'?: string;
40
+ 'gc-on-unmount'?: '0' | '1';
41
+ 'gc-schedule'?: string;
42
+ 'keep-daily'?: string;
43
+ 'keep-hourly'?: string;
44
+ 'keep-last'?: string;
45
+ 'keep-monthly'?: string;
46
+ 'keep-weekly'?: string;
47
+ 'keep-yearly'?: string;
48
+ 'maintenance-mode'?: string;
49
+ name: string;
50
+ 'notification-mode'?: 'legacy-sendmail' | 'notification-system';
51
+ 'notification-thresholds'?: string;
52
+ notify?: string;
53
+ 'notify-user'?: string;
54
+ 'overwrite-in-use'?: '0' | '1';
55
+ path: string;
56
+ 'prune-schedule'?: string;
57
+ 'reuse-datastore'?: '0' | '1';
58
+ tuning?: string;
59
+ 'verify-new'?: '0' | '1';
60
+ };
61
+ /** POST /config/datastore — `data` payload after client unwrap. */
62
+ export type ConfigDatastorePostReturn = null;
63
+
64
+ /** GET /config/datastore/{name} — `data` payload after client unwrap. */
65
+ export type ConfigDatastoreNameGetReturn = {
66
+ backend?: string;
67
+ 'backing-device'?: string;
68
+ comment?: string;
69
+ 'counter-reset-schedule'?: string;
70
+ 'gc-on-unmount'?: boolean | 0 | 1;
71
+ 'gc-schedule'?: string;
72
+ 'keep-daily'?: number;
73
+ 'keep-hourly'?: number;
74
+ 'keep-last'?: number;
75
+ 'keep-monthly'?: number;
76
+ 'keep-weekly'?: number;
77
+ 'keep-yearly'?: number;
78
+ 'maintenance-mode'?: string;
79
+ name: string;
80
+ 'notification-mode'?: 'legacy-sendmail' | 'notification-system';
81
+ 'notification-thresholds'?: string;
82
+ notify?: string;
83
+ 'notify-user'?: string;
84
+ path: string;
85
+ 'prune-schedule'?: string;
86
+ tuning?: string;
87
+ 'verify-new'?: boolean | 0 | 1;
88
+ };
89
+
90
+ /** PUT /config/datastore/{name} — form/query parameters (path segments omitted). */
91
+ export type ConfigDatastoreNamePutParams = {
92
+ comment?: string;
93
+ 'counter-reset-schedule'?: string;
94
+ delete?: readonly (
95
+ | 'comment'
96
+ | 'gc-schedule'
97
+ | 'gc-on-unmount'
98
+ | 'prune-schedule'
99
+ | 'keep-last'
100
+ | 'keep-hourly'
101
+ | 'keep-daily'
102
+ | 'keep-weekly'
103
+ | 'keep-monthly'
104
+ | 'keep-yearly'
105
+ | 'verify-new'
106
+ | 'notify-user'
107
+ | 'notify'
108
+ | 'notification-mode'
109
+ | 'tuning'
110
+ | 'maintenance-mode'
111
+ | 'notification-thresholds'
112
+ | 'counter-reset-schedule'
113
+ )[];
114
+ digest?: string;
115
+ 'gc-on-unmount'?: '0' | '1';
116
+ 'gc-schedule'?: string;
117
+ 'keep-daily'?: string;
118
+ 'keep-hourly'?: string;
119
+ 'keep-last'?: string;
120
+ 'keep-monthly'?: string;
121
+ 'keep-weekly'?: string;
122
+ 'keep-yearly'?: string;
123
+ 'maintenance-mode'?: string;
124
+ 'notification-mode'?: 'legacy-sendmail' | 'notification-system';
125
+ 'notification-thresholds'?: string;
126
+ notify?: string;
127
+ 'notify-user'?: string;
128
+ 'prune-schedule'?: string;
129
+ tuning?: string;
130
+ 'verify-new'?: '0' | '1';
131
+ };
132
+ /** PUT /config/datastore/{name} — `data` payload after client unwrap. */
133
+ export type ConfigDatastoreNamePutReturn = null;
134
+
135
+ /** DELETE /config/datastore/{name} — form/query parameters (path segments omitted). */
136
+ export type ConfigDatastoreNameDeleteParams = {
137
+ 'destroy-data'?: '0' | '1';
138
+ digest?: string;
139
+ 'keep-job-configs'?: '0' | '1';
140
+ };
141
+ /** DELETE /config/datastore/{name} — `data` payload after client unwrap. */
142
+ export type ConfigDatastoreNameDeleteReturn = string;
143
+
144
+ /** GET /config/prune — `data` payload after client unwrap. */
145
+ export type ConfigPruneGetReturn = readonly {
146
+ comment?: string;
147
+ disable?: boolean | 0 | 1;
148
+ id: string;
149
+ 'keep-daily'?: number;
150
+ 'keep-hourly'?: number;
151
+ 'keep-last'?: number;
152
+ 'keep-monthly'?: number;
153
+ 'keep-weekly'?: number;
154
+ 'keep-yearly'?: number;
155
+ 'max-depth'?: number;
156
+ ns?: string;
157
+ schedule: string;
158
+ store: string;
159
+ }[];
160
+
161
+ /** POST /config/prune — form/query parameters (path segments omitted). */
162
+ export type ConfigPrunePostParams = {
163
+ comment?: string;
164
+ disable?: '0' | '1';
165
+ id: string;
166
+ 'keep-daily'?: string;
167
+ 'keep-hourly'?: string;
168
+ 'keep-last'?: string;
169
+ 'keep-monthly'?: string;
170
+ 'keep-weekly'?: string;
171
+ 'keep-yearly'?: string;
172
+ 'max-depth'?: string;
173
+ ns?: string;
174
+ schedule: string;
175
+ store: string;
176
+ };
177
+ /** POST /config/prune — `data` payload after client unwrap. */
178
+ export type ConfigPrunePostReturn = null;
179
+
180
+ /** GET /config/prune/{id} — `data` payload after client unwrap. */
181
+ export type ConfigPruneIdGetReturn = {
182
+ comment?: string;
183
+ disable?: boolean | 0 | 1;
184
+ id: string;
185
+ 'keep-daily'?: number;
186
+ 'keep-hourly'?: number;
187
+ 'keep-last'?: number;
188
+ 'keep-monthly'?: number;
189
+ 'keep-weekly'?: number;
190
+ 'keep-yearly'?: number;
191
+ 'max-depth'?: number;
192
+ ns?: string;
193
+ schedule: string;
194
+ store: string;
195
+ };
196
+
197
+ /** PUT /config/prune/{id} — form/query parameters (path segments omitted). */
198
+ export type ConfigPruneIdPutParams = {
199
+ comment?: string;
200
+ delete?: readonly (
201
+ | 'comment'
202
+ | 'disable'
203
+ | 'ns'
204
+ | 'max-depth'
205
+ | 'keep-last'
206
+ | 'keep-hourly'
207
+ | 'keep-daily'
208
+ | 'keep-weekly'
209
+ | 'keep-monthly'
210
+ | 'keep-yearly'
211
+ )[];
212
+ digest?: string;
213
+ disable?: '0' | '1';
214
+ 'keep-daily'?: string;
215
+ 'keep-hourly'?: string;
216
+ 'keep-last'?: string;
217
+ 'keep-monthly'?: string;
218
+ 'keep-weekly'?: string;
219
+ 'keep-yearly'?: string;
220
+ 'max-depth'?: string;
221
+ ns?: string;
222
+ schedule?: string;
223
+ store?: string;
224
+ };
225
+ /** PUT /config/prune/{id} — `data` payload after client unwrap. */
226
+ export type ConfigPruneIdPutReturn = null;
227
+
228
+ /** DELETE /config/prune/{id} — form/query parameters (path segments omitted). */
229
+ export type ConfigPruneIdDeleteParams = { digest?: string };
230
+ /** DELETE /config/prune/{id} — `data` payload after client unwrap. */
231
+ export type ConfigPruneIdDeleteReturn = null;
232
+
233
+ /** GET /config/sync — form/query parameters (path segments omitted). */
234
+ export type ConfigSyncGetParams = { 'sync-direction'?: 'all' | 'push' | 'pull' };
235
+ /** GET /config/sync — `data` payload after client unwrap. */
236
+ export type ConfigSyncGetReturn = readonly {
237
+ 'active-encryption-key'?: string;
238
+ 'associated-key'?: readonly string[];
239
+ 'burst-in'?: string;
240
+ 'burst-out'?: string;
241
+ comment?: string;
242
+ 'encrypted-only'?: boolean | 0 | 1;
243
+ 'group-filter'?: readonly string[];
244
+ id: string;
245
+ 'max-depth'?: number;
246
+ ns?: string;
247
+ owner?: string;
248
+ 'rate-in'?: string;
249
+ 'rate-out'?: string;
250
+ remote?: string;
251
+ 'remote-ns'?: string;
252
+ 'remote-store': string;
253
+ 'remove-vanished'?: boolean | 0 | 1;
254
+ 'resync-corrupt'?: boolean | 0 | 1;
255
+ 'run-on-mount'?: boolean | 0 | 1;
256
+ schedule?: string;
257
+ store: string;
258
+ 'sync-direction'?: 'pull' | 'push';
259
+ 'transfer-last'?: number;
260
+ 'unmount-on-done'?: boolean | 0 | 1;
261
+ 'verified-only'?: boolean | 0 | 1;
262
+ 'worker-threads'?: number;
263
+ }[];
264
+
265
+ /** POST /config/sync — form/query parameters (path segments omitted). */
266
+ export type ConfigSyncPostParams = {
267
+ 'active-encryption-key'?: string;
268
+ 'associated-key'?: readonly string[];
269
+ 'burst-in'?: string;
270
+ 'burst-out'?: string;
271
+ comment?: string;
272
+ 'encrypted-only'?: '0' | '1';
273
+ 'group-filter'?: readonly string[];
274
+ id: string;
275
+ 'max-depth'?: string;
276
+ ns?: string;
277
+ owner?: string;
278
+ 'rate-in'?: string;
279
+ 'rate-out'?: string;
280
+ remote?: string;
281
+ 'remote-ns'?: string;
282
+ 'remote-store': string;
283
+ 'remove-vanished'?: '0' | '1';
284
+ 'resync-corrupt'?: '0' | '1';
285
+ 'run-on-mount'?: '0' | '1';
286
+ schedule?: string;
287
+ store: string;
288
+ 'sync-direction'?: 'pull' | 'push';
289
+ 'transfer-last'?: string;
290
+ 'unmount-on-done'?: '0' | '1';
291
+ 'verified-only'?: '0' | '1';
292
+ 'worker-threads'?: string;
293
+ };
294
+ /** POST /config/sync — `data` payload after client unwrap. */
295
+ export type ConfigSyncPostReturn = null;
296
+
297
+ /** GET /config/sync/{id} — `data` payload after client unwrap. */
298
+ export type ConfigSyncIdGetReturn = {
299
+ 'active-encryption-key'?: string;
300
+ 'associated-key'?: readonly string[];
301
+ 'burst-in'?: string;
302
+ 'burst-out'?: string;
303
+ comment?: string;
304
+ 'encrypted-only'?: boolean | 0 | 1;
305
+ 'group-filter'?: readonly string[];
306
+ id: string;
307
+ 'max-depth'?: number;
308
+ ns?: string;
309
+ owner?: string;
310
+ 'rate-in'?: string;
311
+ 'rate-out'?: string;
312
+ remote?: string;
313
+ 'remote-ns'?: string;
314
+ 'remote-store': string;
315
+ 'remove-vanished'?: boolean | 0 | 1;
316
+ 'resync-corrupt'?: boolean | 0 | 1;
317
+ 'run-on-mount'?: boolean | 0 | 1;
318
+ schedule?: string;
319
+ store: string;
320
+ 'sync-direction'?: 'pull' | 'push';
321
+ 'transfer-last'?: number;
322
+ 'unmount-on-done'?: boolean | 0 | 1;
323
+ 'verified-only'?: boolean | 0 | 1;
324
+ 'worker-threads'?: number;
325
+ };
326
+
327
+ /** PUT /config/sync/{id} — form/query parameters (path segments omitted). */
328
+ export type ConfigSyncIdPutParams = {
329
+ 'active-encryption-key'?: string;
330
+ 'associated-key'?: readonly string[];
331
+ 'burst-in'?: string;
332
+ 'burst-out'?: string;
333
+ comment?: string;
334
+ delete?: readonly (
335
+ | 'remote'
336
+ | 'owner'
337
+ | 'comment'
338
+ | 'schedule'
339
+ | 'remove-vanished'
340
+ | 'group-filter'
341
+ | 'rate-in'
342
+ | 'burst-in'
343
+ | 'rate-out'
344
+ | 'burst-out'
345
+ | 'ns'
346
+ | 'remote-ns'
347
+ | 'max-depth'
348
+ | 'transfer-last'
349
+ | 'encrypted-only'
350
+ | 'verified-only'
351
+ | 'run-on-mount'
352
+ | 'unmount-on-done'
353
+ | 'sync-direction'
354
+ | 'worker-threads'
355
+ | 'active-encryption-key'
356
+ | 'associated-key'
357
+ )[];
358
+ digest?: string;
359
+ 'encrypted-only'?: '0' | '1';
360
+ 'group-filter'?: readonly string[];
361
+ 'max-depth'?: string;
362
+ ns?: string;
363
+ owner?: string;
364
+ 'rate-in'?: string;
365
+ 'rate-out'?: string;
366
+ remote?: string;
367
+ 'remote-ns'?: string;
368
+ 'remote-store'?: string;
369
+ 'remove-vanished'?: '0' | '1';
370
+ 'resync-corrupt'?: '0' | '1';
371
+ 'run-on-mount'?: '0' | '1';
372
+ schedule?: string;
373
+ store?: string;
374
+ 'sync-direction'?: 'pull' | 'push';
375
+ 'transfer-last'?: string;
376
+ 'unmount-on-done'?: '0' | '1';
377
+ 'verified-only'?: '0' | '1';
378
+ 'worker-threads'?: string;
379
+ };
380
+ /** PUT /config/sync/{id} — `data` payload after client unwrap. */
381
+ export type ConfigSyncIdPutReturn = null;
382
+
383
+ /** DELETE /config/sync/{id} — form/query parameters (path segments omitted). */
384
+ export type ConfigSyncIdDeleteParams = { digest?: string };
385
+ /** DELETE /config/sync/{id} — `data` payload after client unwrap. */
386
+ export type ConfigSyncIdDeleteReturn = null;
387
+
388
+ /** GET /config/verify — `data` payload after client unwrap. */
389
+ export type ConfigVerifyGetReturn = readonly {
390
+ comment?: string;
391
+ id: string;
392
+ 'ignore-verified'?: boolean | 0 | 1;
393
+ 'max-depth'?: number;
394
+ ns?: string;
395
+ 'outdated-after'?: number;
396
+ 'read-threads'?: number;
397
+ schedule?: string;
398
+ store: string;
399
+ 'verify-threads'?: number;
400
+ }[];
401
+
402
+ /** POST /config/verify — form/query parameters (path segments omitted). */
403
+ export type ConfigVerifyPostParams = {
404
+ comment?: string;
405
+ id: string;
406
+ 'ignore-verified'?: '0' | '1';
407
+ 'max-depth'?: string;
408
+ ns?: string;
409
+ 'outdated-after'?: string;
410
+ 'read-threads'?: string;
411
+ schedule?: string;
412
+ store: string;
413
+ 'verify-threads'?: string;
414
+ };
415
+ /** POST /config/verify — `data` payload after client unwrap. */
416
+ export type ConfigVerifyPostReturn = null;
417
+
418
+ /** GET /config/verify/{id} — `data` payload after client unwrap. */
419
+ export type ConfigVerifyIdGetReturn = {
420
+ comment?: string;
421
+ id: string;
422
+ 'ignore-verified'?: boolean | 0 | 1;
423
+ 'max-depth'?: number;
424
+ ns?: string;
425
+ 'outdated-after'?: number;
426
+ 'read-threads'?: number;
427
+ schedule?: string;
428
+ store: string;
429
+ 'verify-threads'?: number;
430
+ };
431
+
432
+ /** PUT /config/verify/{id} — form/query parameters (path segments omitted). */
433
+ export type ConfigVerifyIdPutParams = {
434
+ comment?: string;
435
+ delete?: readonly (
436
+ | 'ignore-verified'
437
+ | 'comment'
438
+ | 'schedule'
439
+ | 'outdated-after'
440
+ | 'ns'
441
+ | 'max-depth'
442
+ | 'read-threads'
443
+ | 'verify-threads'
444
+ )[];
445
+ digest?: string;
446
+ 'ignore-verified'?: '0' | '1';
447
+ 'max-depth'?: string;
448
+ ns?: string;
449
+ 'outdated-after'?: string;
450
+ 'read-threads'?: string;
451
+ schedule?: string;
452
+ store?: string;
453
+ 'verify-threads'?: string;
454
+ };
455
+ /** PUT /config/verify/{id} — `data` payload after client unwrap. */
456
+ export type ConfigVerifyIdPutReturn = null;
457
+
458
+ /** DELETE /config/verify/{id} — form/query parameters (path segments omitted). */
459
+ export type ConfigVerifyIdDeleteParams = { digest?: string };
460
+ /** DELETE /config/verify/{id} — `data` payload after client unwrap. */
461
+ export type ConfigVerifyIdDeleteReturn = null;