@homeflare/alchemy 0.37.5 → 0.37.7

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 (126) hide show
  1. package/dist/openbao/auth-role-form.d.ts +0 -6
  2. package/dist/openbao/auth-role-form.d.ts.map +1 -1
  3. package/dist/openbao/auth-role-identity.d.ts +11 -0
  4. package/dist/openbao/auth-role-identity.d.ts.map +1 -0
  5. package/dist/openbao/auth-role-wire.d.ts +23 -0
  6. package/dist/openbao/auth-role-wire.d.ts.map +1 -0
  7. package/dist/openbao/auth-role.d.ts.map +1 -1
  8. package/dist/openbao/bao-http.d.ts +34 -13
  9. package/dist/openbao/bao-http.d.ts.map +1 -1
  10. package/dist/openbao/distilled.d.ts +25 -0
  11. package/dist/openbao/distilled.d.ts.map +1 -0
  12. package/dist/openbao/fake-engines-roles.d.ts +5 -1
  13. package/dist/openbao/fake-engines-roles.d.ts.map +1 -1
  14. package/dist/openbao/index.js +358 -305
  15. package/dist/openbao/index.js.map +13 -9
  16. package/dist/openbao/policy-identity.d.ts +12 -0
  17. package/dist/openbao/policy-identity.d.ts.map +1 -0
  18. package/dist/openbao/policy-wire.d.ts +9 -8
  19. package/dist/openbao/policy-wire.d.ts.map +1 -1
  20. package/dist/openbao/policy.d.ts.map +1 -1
  21. package/dist/openbao/rename.d.ts +5 -0
  22. package/dist/openbao/rename.d.ts.map +1 -1
  23. package/dist/proxmox/firewall-alias-config.d.ts +36 -0
  24. package/dist/proxmox/firewall-alias-config.d.ts.map +1 -0
  25. package/dist/proxmox/firewall-alias-form.d.ts +3 -1
  26. package/dist/proxmox/firewall-alias-form.d.ts.map +1 -1
  27. package/dist/proxmox/firewall-alias-lifecycle.d.ts +43 -0
  28. package/dist/proxmox/firewall-alias-lifecycle.d.ts.map +1 -0
  29. package/dist/proxmox/firewall-alias.d.ts +2 -8
  30. package/dist/proxmox/firewall-alias.d.ts.map +1 -1
  31. package/dist/proxmox/index.js +795 -526
  32. package/dist/proxmox/index.js.map +24 -11
  33. package/dist/proxmox/lxc-errors.d.ts +12 -0
  34. package/dist/proxmox/lxc-errors.d.ts.map +1 -0
  35. package/dist/proxmox/lxc-lifecycle.d.ts +9 -31
  36. package/dist/proxmox/lxc-lifecycle.d.ts.map +1 -1
  37. package/dist/proxmox/lxc-read.d.ts +4 -0
  38. package/dist/proxmox/lxc-read.d.ts.map +1 -0
  39. package/dist/proxmox/lxc-task.d.ts +15 -0
  40. package/dist/proxmox/lxc-task.d.ts.map +1 -0
  41. package/dist/proxmox/network-apply-read.d.ts +7 -14
  42. package/dist/proxmox/network-apply-read.d.ts.map +1 -1
  43. package/dist/proxmox/network-apply-run.d.ts +7 -0
  44. package/dist/proxmox/network-apply-run.d.ts.map +1 -0
  45. package/dist/proxmox/network-apply.d.ts +2 -3
  46. package/dist/proxmox/network-apply.d.ts.map +1 -1
  47. package/dist/proxmox/node-network-wire.d.ts +14 -10
  48. package/dist/proxmox/node-network-wire.d.ts.map +1 -1
  49. package/dist/proxmox/qemu-errors.d.ts +5 -0
  50. package/dist/proxmox/qemu-errors.d.ts.map +1 -0
  51. package/dist/proxmox/qemu-form.d.ts +22 -0
  52. package/dist/proxmox/qemu-form.d.ts.map +1 -0
  53. package/dist/proxmox/qemu-lifecycle.d.ts +26 -0
  54. package/dist/proxmox/qemu-lifecycle.d.ts.map +1 -0
  55. package/dist/proxmox/qemu-read.d.ts +5 -0
  56. package/dist/proxmox/qemu-read.d.ts.map +1 -0
  57. package/dist/proxmox/qemu-task.d.ts +9 -0
  58. package/dist/proxmox/qemu-task.d.ts.map +1 -0
  59. package/dist/proxmox/qemu.d.ts +9 -14
  60. package/dist/proxmox/qemu.d.ts.map +1 -1
  61. package/dist/proxmox/replication-firewall-fixtures.d.ts +30 -0
  62. package/dist/proxmox/replication-firewall-fixtures.d.ts.map +1 -0
  63. package/dist/proxmox/replication-job-config.d.ts +56 -0
  64. package/dist/proxmox/replication-job-config.d.ts.map +1 -0
  65. package/dist/proxmox/replication-job-lifecycle.d.ts +62 -0
  66. package/dist/proxmox/replication-job-lifecycle.d.ts.map +1 -0
  67. package/dist/proxmox/replication-job.d.ts +5 -6
  68. package/dist/proxmox/replication-job.d.ts.map +1 -1
  69. package/dist/release/archive.d.ts.map +1 -1
  70. package/dist/release/index.js +3 -2
  71. package/dist/release/index.js.map +3 -3
  72. package/docs/proxmox-lxc-distilled.md +56 -0
  73. package/docs/proxmox-replication-firewall-distilled.md +53 -0
  74. package/docs/proxmox-sdk-migration.md +23 -18
  75. package/docs/upstream-conformance.md +5 -3
  76. package/package.json +3 -2
  77. package/src/openbao/auth-role-form.test.ts +11 -9
  78. package/src/openbao/auth-role-form.ts +0 -19
  79. package/src/openbao/auth-role-identity.ts +24 -0
  80. package/src/openbao/auth-role-sdk.test.ts +155 -0
  81. package/src/openbao/auth-role-wire.test.ts +128 -0
  82. package/src/openbao/auth-role-wire.ts +89 -0
  83. package/src/openbao/auth-role.ts +9 -9
  84. package/src/openbao/bao-http.ts +9 -7
  85. package/src/openbao/distilled-retry.test.ts +164 -0
  86. package/src/openbao/distilled.test.ts +146 -0
  87. package/src/openbao/distilled.ts +88 -0
  88. package/src/openbao/fake-engines-roles.ts +9 -2
  89. package/src/openbao/policy-distilled.test.ts +98 -0
  90. package/src/openbao/policy-identity.ts +24 -0
  91. package/src/openbao/policy-rename.test.ts +2 -2
  92. package/src/openbao/policy-wire.test.ts +5 -5
  93. package/src/openbao/policy-wire.ts +31 -11
  94. package/src/openbao/policy.ts +10 -13
  95. package/src/openbao/rename.ts +17 -1
  96. package/src/proxmox/firewall-alias-config.ts +39 -0
  97. package/src/proxmox/firewall-alias-form.ts +1 -1
  98. package/src/proxmox/firewall-alias-lifecycle.ts +100 -0
  99. package/src/proxmox/firewall-alias.ts +4 -67
  100. package/src/proxmox/lxc-create.test.ts +4 -1
  101. package/src/proxmox/lxc-distilled.test.ts +239 -0
  102. package/src/proxmox/lxc-errors.ts +9 -0
  103. package/src/proxmox/lxc-lifecycle.ts +31 -113
  104. package/src/proxmox/lxc-read.test.ts +29 -6
  105. package/src/proxmox/lxc-read.ts +88 -0
  106. package/src/proxmox/lxc-task.ts +71 -0
  107. package/src/proxmox/network-apply-distilled.test.ts +76 -0
  108. package/src/proxmox/network-apply-read.ts +18 -39
  109. package/src/proxmox/network-apply-run.ts +97 -0
  110. package/src/proxmox/network-apply.ts +5 -94
  111. package/src/proxmox/node-network-read-failure.test.ts +24 -0
  112. package/src/proxmox/node-network-wire.ts +15 -17
  113. package/src/proxmox/qemu-errors.ts +7 -0
  114. package/src/proxmox/qemu-form.ts +15 -0
  115. package/src/proxmox/qemu-lifecycle.test.ts +171 -0
  116. package/src/proxmox/qemu-lifecycle.ts +134 -0
  117. package/src/proxmox/qemu-read.ts +73 -0
  118. package/src/proxmox/qemu-task.ts +64 -0
  119. package/src/proxmox/qemu.ts +11 -44
  120. package/src/proxmox/replication-firewall-fixtures.ts +71 -0
  121. package/src/proxmox/replication-firewall-lifecycle.test.ts +109 -0
  122. package/src/proxmox/replication-firewall-wire.test.ts +173 -0
  123. package/src/proxmox/replication-job-config.ts +79 -0
  124. package/src/proxmox/replication-job-lifecycle.ts +113 -0
  125. package/src/proxmox/replication-job.ts +7 -84
  126. package/src/release/archive.ts +4 -1
@@ -0,0 +1,12 @@
1
+ /** A policy is its name, keyed as OpenBao keys it (`policyKey`). */
2
+ export declare const policyIdentity: import("./rename-identity.ts").Identity<{
3
+ readonly name: string;
4
+ }>;
5
+ /** The occupied-name guard must use the same SDK and refusal semantics as every other read. */
6
+ export declare const judgePolicyRename: (olds: unknown, news: unknown, output: {
7
+ readonly name: string;
8
+ } | undefined) => import("effect/Effect").Effect<{
9
+ from: string;
10
+ to: string;
11
+ } | undefined, import("./bao-status.ts").BaoError | import("effect/Cause").TimeoutError | import("@distilled.cloud/openbao/Protocol").OpenBaoOpError, import("effect/unstable/http/HttpClient").HttpClient>;
12
+ //# sourceMappingURL=policy-identity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy-identity.d.ts","sourceRoot":"","sources":["../../src/openbao/policy-identity.ts"],"names":[],"mappings":"AAIA,oEAAoE;AACpE,eAAO,MAAM,cAAc;mBAAiC,MAAM;EAIjE,CAAC;AAEF,+FAA+F;AAC/F,eAAO,MAAM,iBAAiB,SACtB,OAAO,QACP,OAAO,UACL;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS;;;2MAQ5C,CAAC"}
@@ -1,13 +1,9 @@
1
- /**
2
- * The three OpenBao calls Bao.Policy makes — read, write and delete of `sys/policies/acl/<name>`.
3
- * Split from policy.ts so the trailing-newline round trip can be tested against a fake server.
4
- */
5
1
  import * as Effect from 'effect/Effect';
6
2
  import { BaoError } from './bao-status.ts';
7
3
  /** The endpoint the CLI's policy commands used — openbao v2.6.2 api/sys_policy.go:60, :100, :122. */
8
4
  export declare const policyPath: (name: string) => string;
9
5
  /**
10
- * The live policy text, or '' when the policy is genuinely absent. Anything else FAILS.
6
+ * The live policy text, or undefined only when the SDK reports PolicyNotFound. Other errors FAIL.
11
7
  *
12
8
  * 🔴 THE ABSENCE WORDING WAS THE POLICY COMMAND'S OWN, AND ASSUMING OTHERWISE MADE A NEW POLICY
13
9
  * UNCREATABLE. `No value found at` was measured for `bao read`; `bao policy read` never printed
@@ -29,13 +25,18 @@ export declare const policyPath: (name: string) => string;
29
25
  * ⚠️ `data.policy` IS THE TEXT, and a 200 without it is a failure, as it was in the CLI's client
30
26
  * ("no policy found in response", api/sys_policy.go:81-85).
31
27
  */
32
- export declare const readPolicy: (name: string) => Effect.Effect<string, BaoError, import("effect/unstable/http/HttpClient").HttpClient>;
28
+ export declare const readPolicy: (name: string) => Effect.Effect<string | undefined, BaoError | import("effect/Cause").TimeoutError | import("@distilled.cloud/openbao/Protocol").OpenBaoOpError, import("effect/unstable/http/HttpClient").HttpClient>;
29
+ /** Even a live empty policy occupies its name; rename guards must not overwrite it. */
30
+ export declare const policyExists: (name: string) => Effect.Effect<boolean, BaoError | import("effect/Cause").TimeoutError | import("@distilled.cloud/openbao/Protocol").OpenBaoOpError, import("effect/unstable/http/HttpClient").HttpClient>;
33
31
  /**
34
32
  * ★ THE HCL TRAVELS IN THE REQUEST BODY (`{"policy": …}`, api/sys_policy.go:96-101). The CLI path
35
33
  * needed a scoped temp file because passing HCL on argv would have put every grant in the process
36
34
  * list; a JSON body never reaches argv, so the temp file is gone with it.
35
+ * ★ A FULL-REPLACE WRITE: the whole policy text is sent every time, so it is safe to retry a
36
+ * transport failure through `runBaoWrite` — a replayed attempt converges on the same policy
37
+ * rather than compounding a partial one.
37
38
  */
38
- export declare const writePolicy: (name: string, hcl: string) => Effect.Effect<void, BaoError, import("effect/unstable/http/HttpClient").HttpClient>;
39
+ export declare const writePolicy: (name: string, hcl: string) => Effect.Effect<void, BaoError | import("effect/Cause").TimeoutError | import("@distilled.cloud/openbao/Protocol").OpenBaoOpError, import("effect/unstable/http/HttpClient").HttpClient>;
39
40
  /** Deleting a policy that is already gone answers success (handlePoliciesDelete returns nothing). */
40
- export declare const deletePolicy: (name: string) => Effect.Effect<void, BaoError, import("effect/unstable/http/HttpClient").HttpClient>;
41
+ export declare const deletePolicy: (name: string) => Effect.Effect<void, import("@distilled.cloud/caddy").BadGateway | import("@distilled.cloud/caddy").BadRequest | BaoError | import("@distilled.cloud/caddy").ConfigError | import("@distilled.cloud/caddy").Conflict | import("@distilled.cloud/caddy").Forbidden | import("@distilled.cloud/caddy").GatewayTimeout | import("effect/unstable/http/HttpClientError").HttpClientError | import("@distilled.cloud/caddy").InternalServerError | import("@distilled.cloud/caddy").Locked | import("@distilled.cloud/caddy").ServiceUnavailable | import("effect/Cause").TimeoutError | import("@distilled.cloud/caddy").TooManyRequests | import("@distilled.cloud/caddy").Unauthorized | import("@distilled.cloud/caddy").UnprocessableEntity | import("@distilled.cloud/openbao/Errors").ClientErrors, import("effect/unstable/http/HttpClient").HttpClient>;
41
42
  //# sourceMappingURL=policy-wire.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"policy-wire.d.ts","sourceRoot":"","sources":["../../src/openbao/policy-wire.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C,qGAAqG;AACrG,eAAO,MAAM,UAAU,SAAU,MAAM,WAA+B,CAAC;AAEvE;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,eAAO,MAAM,UAAU,SAAU,MAAM,0FAOnC,CAAC;AAEL;;;;GAIG;AACH,eAAO,MAAM,WAAW,SAAU,MAAM,OAAO,MAAM,wFACD,CAAC;AAErD,qGAAqG;AACrG,eAAO,MAAM,YAAY,SAAU,MAAM,wFAAgC,CAAC"}
1
+ {"version":3,"file":"policy-wire.d.ts","sourceRoot":"","sources":["../../src/openbao/policy-wire.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAG3C,qGAAqG;AACrG,eAAO,MAAM,UAAU,SAAU,MAAM,WAA+B,CAAC;AAEvE;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,eAAO,MAAM,UAAU,SAAU,MAAM,yMAWpC,CAAC;AAEJ,uFAAuF;AACvF,eAAO,MAAM,YAAY,SAAU,MAAM,8LACuB,CAAC;AAEjE;;;;;;;GAOG;AACH,eAAO,MAAM,WAAW,SAAU,MAAM,OAAO,MAAM,2LAC2B,CAAC;AAEjF,qGAAqG;AACrG,eAAO,MAAM,YAAY,SAAU,MAAM,+zBAItC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../../src/openbao/policy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEnC,OAAO,KAAK,QAAQ,MAAM,kBAAkB,CAAC;AAE7C,OAAO,KAAK,UAAU,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,IAAI,MAAM,aAAa,CAAC;AACpC,OAAO,KAAK,KAAK,UAAU,MAAM,iCAAiC,CAAC;AAUnE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,MAAM,WAAW,cAAc;IAC7B,0DAA0D;IAC1D,IAAI,EAAE,MAAM,CAAC;IACb;;;;;;OAMG;IACH,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,mBAAmB;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,yEAAyE;IACzE,MAAM,EAAE,MAAM,CAAC;IACf,qEAAqE;IACrE,MAAM,EAAE,MAAM,CAAC;IACf,2EAA2E;IAC3E,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,SAAU,SAAQ,QAAQ,CACzC,YAAY,EACZ,cAAc,EACd,mBAAmB,EACnB,KAAK,EACL,UAAU,CAAC,UAAU,GAAG,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAC1D;CAAG;AAEJ;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,eAAO,MAAM,SAAS,4CAEpB,CAAC;AAeH,eAAO,MAAM,iBAAiB,oIAiI3B,CAAC"}
1
+ {"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../../src/openbao/policy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEnC,OAAO,KAAK,QAAQ,MAAM,kBAAkB,CAAC;AAE7C,OAAO,KAAK,UAAU,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,IAAI,MAAM,aAAa,CAAC;AACpC,OAAO,KAAK,KAAK,UAAU,MAAM,iCAAiC,CAAC;AAUnE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,MAAM,WAAW,cAAc;IAC7B,0DAA0D;IAC1D,IAAI,EAAE,MAAM,CAAC;IACb;;;;;;OAMG;IACH,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,mBAAmB;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,yEAAyE;IACzE,MAAM,EAAE,MAAM,CAAC;IACf,qEAAqE;IACrE,MAAM,EAAE,MAAM,CAAC;IACf,2EAA2E;IAC3E,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,SAAU,SAAQ,QAAQ,CACzC,YAAY,EACZ,cAAc,EACd,mBAAmB,EACnB,KAAK,EACL,UAAU,CAAC,UAAU,GAAG,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAC1D;CAAG;AAEJ;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,eAAO,MAAM,SAAS,4CAEpB,CAAC;AAYH,eAAO,MAAM,iBAAiB,oIAiI3B,CAAC"}
@@ -91,6 +91,11 @@ export declare const judgeMove: (family: string, tried: string | undefined, decl
91
91
  from: string;
92
92
  to: string;
93
93
  } | undefined, import("./bao-status.ts").BaoError, import("effect/unstable/http/HttpClient").HttpClient>;
94
+ /** SDK families supply their own typed read so a rename cannot fall back to raw HTTP. */
95
+ export declare const judgeMoveWith: <E, R>(family: string, tried: string | undefined, declared: string | undefined, occupied: (identity: string) => Effect.Effect<boolean, E, R>, key?: (identity: string) => string) => Effect.Effect<{
96
+ from: string;
97
+ to: string;
98
+ } | undefined, E, R>;
94
99
  /**
95
100
  * Reconcile's guard: an `update` whose prior attributes name another object.
96
101
  *
@@ -1 +1 @@
1
- {"version":3,"file":"rename.d.ts","sourceRoot":"","sources":["../../src/openbao/rename.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAKxC;;;;;;;;GAQG;AACH,eAAO,MAAM,cAAc,SAAU,OAAO,OAAO,MAAM,KAAG,MAAM,GAAG,SAIpE,CAAC;AAEF,wGAAwG;AACxG,eAAO,MAAM,aAAa,SAAU,OAAO,OAAO,MAAM,KAAG,OAI1D,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,UAAU,SAAU,OAAO,OAAO,MAAM,YAAY,MAAM,KAAG,MAAM,GAAG,SACH,CAAC;AAEjF;;;GAGG;AACH,eAAO,MAAM,gBAAgB,SACrB,OAAO,YACH,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,MAAM,iBAClC,MAAM,KACpB,MAAM,GAAG,SAOX,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,SAAS,SAAU,MAAM,KAAG,MAAmC,CAAC;AAE7E;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,OAAO,WACV,MAAM,YACJ,MAAM,GAAG,SAAS,QACvB,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,KAChC,OAAO,GAAG,SAAiF,CAAC;AAE/F;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,SAAS,WACZ,MAAM,SACP,MAAM,GAAG,SAAS,YACf,MAAM,GAAG,SAAS,UACpB,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,QAC/B,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM;;;wGAgB/B,CAAC;AAEL;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,iBAAiB,WAAY,MAAM,QAAQ,MAAM,MAAM,MAAM,uCAOvE,CAAC"}
1
+ {"version":3,"file":"rename.d.ts","sourceRoot":"","sources":["../../src/openbao/rename.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAKxC;;;;;;;;GAQG;AACH,eAAO,MAAM,cAAc,SAAU,OAAO,OAAO,MAAM,KAAG,MAAM,GAAG,SAIpE,CAAC;AAEF,wGAAwG;AACxG,eAAO,MAAM,aAAa,SAAU,OAAO,OAAO,MAAM,KAAG,OAI1D,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,UAAU,SAAU,OAAO,OAAO,MAAM,YAAY,MAAM,KAAG,MAAM,GAAG,SACH,CAAC;AAEjF;;;GAGG;AACH,eAAO,MAAM,gBAAgB,SACrB,OAAO,YACH,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,MAAM,iBAClC,MAAM,KACpB,MAAM,GAAG,SAOX,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,SAAS,SAAU,MAAM,KAAG,MAAmC,CAAC;AAE7E;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,OAAO,WACV,MAAM,YACJ,MAAM,GAAG,SAAS,QACvB,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,KAChC,OAAO,GAAG,SAAiF,CAAC;AAE/F;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,SAAS,WACZ,MAAM,SACP,MAAM,GAAG,SAAS,YACf,MAAM,GAAG,SAAS,UACpB,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,QAC/B,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM;;;wGAQhC,CAAC;AAEJ,yFAAyF;AACzF,eAAO,MAAM,aAAa,GAAI,CAAC,EAAE,CAAC,UACxB,MAAM,SACP,MAAM,GAAG,SAAS,YACf,MAAM,GAAG,SAAS,YAClB,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,QACvD,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM;;;oBAgB/B,CAAC;AAEL;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,iBAAiB,WAAY,MAAM,QAAQ,MAAM,MAAM,MAAM,uCAOvE,CAAC"}
@@ -0,0 +1,36 @@
1
+ /** Existing alias normalization and forms, independent of the named SDK transport. */
2
+ import type { FirewallAliasAttributes, FirewallAliasProps } from './firewall-alias.ts';
3
+ import { body } from './firewall-alias-form.ts';
4
+ export declare const firewallAliasSpec: {
5
+ /** The SDK read refuses malformed successful payloads before applying these normalizers. */
6
+ attributes: (live: Record<string, unknown>, props: FirewallAliasProps) => {
7
+ cidr: string;
8
+ comment: string;
9
+ ipversion: number;
10
+ /** The read checks identity; the stored spelling is preserved for display. */
11
+ name: string;
12
+ };
13
+ collection: () => string;
14
+ createForm: (props: FirewallAliasProps) => {
15
+ cidr: string;
16
+ name: string;
17
+ };
18
+ /**
19
+ * ⚠️ EXACTLY THE TWO FIELDS A PUT CAN PUT BACK, both sides through the same normalisers. `name`
20
+ * is identity and case-only drift (see the header); `ipversion` is derived and unwritable.
21
+ * Comparing either would report an update that no update can settle.
22
+ */
23
+ /** The vendor rules these forms are checked against at plan time — resource-spec.ts. */
24
+ endpoint: {
25
+ create: string;
26
+ update: string;
27
+ };
28
+ matches: (attributes: FirewallAliasAttributes, props: FirewallAliasProps) => boolean;
29
+ /**
30
+ * ⚠️ UNESCAPED ON PURPOSE: `pve-fw-alias` admits only `[A-Za-z][A-Za-z0-9\-\_]+`, so there is no
31
+ * character here that a URL would need to encode, and PVE lowercases the segment on arrival.
32
+ */
33
+ path: (props: FirewallAliasProps) => string;
34
+ updateForm: typeof body;
35
+ };
36
+ //# sourceMappingURL=firewall-alias-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"firewall-alias-config.d.ts","sourceRoot":"","sources":["../../src/proxmox/firewall-alias-config.ts"],"names":[],"mappings":"AAAA,sFAAsF;AACtF,OAAO,KAAK,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEvF,OAAO,EAAE,IAAI,EAAiB,MAAM,0BAA0B,CAAC;AAG/D,eAAO,MAAM,iBAAiB;IAC5B,4FAA4F;;;;;QAOxF,8EAA8E;;;;;;;;IAMlF;;;;OAIG;IACH,wFAAwF;;QAEtF,MAAM;QACN,MAAM;;;IAIR;;;OAGG;;;CAG2D,CAAC"}
@@ -94,5 +94,7 @@ export declare const comment: (value: unknown) => string;
94
94
  * this form would be a second, invisible identity for the object, set from a field the resource
95
95
  * does not have.
96
96
  */
97
- export declare const body: (props: FirewallAliasProps) => Record<string, string>;
97
+ export declare const body: (props: FirewallAliasProps) => Record<string, string> & {
98
+ cidr: string;
99
+ };
98
100
  //# sourceMappingURL=firewall-alias-form.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"firewall-alias-form.d.ts","sourceRoot":"","sources":["../../src/proxmox/firewall-alias-form.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAG9D;;;;;;;;GAQG;AACH,eAAO,MAAM,IAAI,SAAU,MAAM,WAA8B,CAAC;AAEhE;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,eAAO,MAAM,IAAI,UAAW,OAAO,WAIlC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,OAAO,UAAW,OAAO,WAGrC,CAAC;AAEF;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,IAAI,UAAW,kBAAkB,KAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAGrE,CAAC"}
1
+ {"version":3,"file":"firewall-alias-form.d.ts","sourceRoot":"","sources":["../../src/proxmox/firewall-alias-form.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAG9D;;;;;;;;GAQG;AACH,eAAO,MAAM,IAAI,SAAU,MAAM,WAA8B,CAAC;AAEhE;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,eAAO,MAAM,IAAI,UAAW,OAAO,WAIlC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,OAAO,UAAW,OAAO,WAGrC,CAAC;AAEF;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,IAAI,UAAW,kBAAkB,KAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAGvF,CAAC"}
@@ -0,0 +1,43 @@
1
+ import type { Input } from 'alchemy/Input';
2
+ import * as cluster from '@distilled.cloud/proxmox/cluster';
3
+ import * as Effect from 'effect/Effect';
4
+ import type { FirewallAliasAttributes, FirewallAliasProps } from './firewall-alias.ts';
5
+ export declare const readFirewallAlias: (props: FirewallAliasProps) => Effect.Effect<{
6
+ cidr: string;
7
+ comment: string;
8
+ ipversion: number;
9
+ name: string;
10
+ } | undefined, Error | import("./distilled-pve.ts").PveClusterExhausted | import("./credential-errors.ts").PveCredentialDenied | import("effect/Cause").TimeoutError | cluster.ProxmoxOpError, import("effect/unstable/http/HttpClient").HttpClient>;
11
+ /** Vendor deletion silently removes a missing key. All actual SDK failures still propagate. */
12
+ export declare const deleteFirewallAlias: (props: FirewallAliasProps) => Effect.Effect<cluster.DeleteClusterFirewallAliasResponse, Error | import("./distilled-pve.ts").PveClusterExhausted | import("./credential-errors.ts").PveCredentialDenied | import("effect/Cause").TimeoutError | cluster.ProxmoxOpError, import("effect/unstable/http/HttpClient").HttpClient>;
13
+ export declare const firewallAliasHandlers: {
14
+ list: () => Effect.Effect<never[], never, never>;
15
+ read: ({ olds }: {
16
+ olds: FirewallAliasProps;
17
+ }) => Effect.Effect<{
18
+ cidr: string;
19
+ comment: string;
20
+ ipversion: number;
21
+ name: string;
22
+ } | undefined, Error | import("./distilled-pve.ts").PveClusterExhausted | import("./credential-errors.ts").PveCredentialDenied | import("effect/Cause").TimeoutError | cluster.ProxmoxOpError, import("effect/unstable/http/HttpClient").HttpClient>;
23
+ diff: (args_0: {
24
+ news: Input<FirewallAliasProps>;
25
+ output: FirewallAliasAttributes | undefined;
26
+ }) => Effect.Effect<{
27
+ readonly action: 'replace';
28
+ } | {
29
+ readonly action: "noop" | "update";
30
+ } | undefined, Error | import("effect/unstable/http/HttpClientError").HttpClientError | import("./credential-errors.ts").PveCredentialDenied, import("effect/unstable/http/HttpClient").HttpClient>;
31
+ reconcile: (args_0: {
32
+ news: FirewallAliasProps;
33
+ }) => Effect.Effect<{
34
+ cidr: string;
35
+ comment: string;
36
+ ipversion: number;
37
+ name: string;
38
+ }, Error | import("effect/unstable/http/HttpClientError").HttpClientError | import("./credential-errors.ts").PveCredentialDenied, import("effect/unstable/http/HttpClient").HttpClient>;
39
+ delete: ({ olds }: {
40
+ olds: FirewallAliasProps;
41
+ }) => Effect.Effect<cluster.DeleteClusterFirewallAliasResponse, Error | import("./distilled-pve.ts").PveClusterExhausted | import("./credential-errors.ts").PveCredentialDenied | import("effect/Cause").TimeoutError | cluster.ProxmoxOpError, import("effect/unstable/http/HttpClient").HttpClient>;
42
+ };
43
+ //# sourceMappingURL=firewall-alias-lifecycle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"firewall-alias-lifecycle.d.ts","sourceRoot":"","sources":["../../src/proxmox/firewall-alias-lifecycle.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,KAAK,OAAO,MAAM,kCAAkC,CAAC;AAE5D,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AASvF,eAAO,MAAM,iBAAiB,UAAW,kBAAkB;;;;;oPA0BxD,CAAC;AAEJ,+FAA+F;AAC/F,eAAO,MAAM,mBAAmB,UAAW,kBAAkB,oSACsC,CAAC;AAEpG,eAAO,MAAM,qBAAqB;IAChC,IAAI;IACJ,IAAI,aAAa;QAAE,IAAI,EAAE,kBAAkB,CAAA;KAAE;;;;;;IAC7C,IAAI;cAII,KAAK,CAAC,kBAAkB,CAAC;gBACvB,uBAAuB,GAAG,SAAS;;yBAOiB,SAAS;;;;IAQvE,SAAS;cAAyC,kBAAkB;;;;;;;IA4BpE,MAAM,aAAa;QAAE,IAAI,EAAE,kBAAkB,CAAA;KAAE;CAChD,CAAC"}
@@ -94,7 +94,7 @@
94
94
  */
95
95
  import { Resource } from 'alchemy';
96
96
  import * as Provider from 'alchemy/Provider';
97
- import { type PveRequirements, type WithTarget } from './resource.ts';
97
+ import type { PveRequirements, WithTarget } from './resource-spec.ts';
98
98
  export interface FirewallAliasProps extends WithTarget {
99
99
  /**
100
100
  * PVE's `pve-fw-alias`: a letter, then at least one more of letter/digit/`-`/`_`, to 64 chars.
@@ -130,12 +130,6 @@ export interface FirewallAliasAttributes {
130
130
  export interface ProxmoxFirewallAlias extends Resource<'Proxmox.FirewallAlias', FirewallAliasProps, FirewallAliasAttributes, never, PveRequirements> {
131
131
  }
132
132
  export declare const ProxmoxFirewallAlias: import("alchemy").ResourceClass<ProxmoxFirewallAlias>;
133
- /**
134
- * ⛔ ONE HANDLER IS OVERRIDDEN AND THE REST COME FROM THE FACTORY, for the reason `acl.ts` spells
135
- * out at length: the factory answers `replace` only for an object with no update path, and this
136
- * one has a PUT. Left to delegate, a changed `name` would read absent at the new path, plan as an
137
- * update, and quietly leave the old alias behind. Everything else — the empty `list`, the read,
138
- * the read-back-guarded reconcile, the delete — is the factory's, unchanged.
139
- */
133
+ /** Named distilled operations preserve create-first identity replacement and explicit adoption. */
140
134
  export declare const ProxmoxFirewallAliasProvider: () => import("effect/Layer").Layer<Provider.Provider<ProxmoxFirewallAlias>, never, import("effect/unstable/http/HttpClient").HttpClient>;
141
135
  //# sourceMappingURL=firewall-alias.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"firewall-alias.d.ts","sourceRoot":"","sources":["../../src/proxmox/firewall-alias.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6FG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEnC,OAAO,KAAK,QAAQ,MAAM,kBAAkB,CAAC;AAG7C,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,UAAU,EAAe,MAAM,eAAe,CAAC;AAGnF,MAAM,WAAW,kBAAmB,SAAQ,UAAU;IACpD;;;;OAIG;IACH,IAAI,EAAE,MAAM,CAAC;IACb;;;;OAIG;IACH,IAAI,EAAE,MAAM,CAAC;IACb;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,uBAAuB;IACtC,6FAA6F;IAC7F,IAAI,EAAE,MAAM,CAAC;IACb,oFAAoF;IACpF,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,oBAAqB,SAAQ,QAAQ,CACpD,uBAAuB,EACvB,kBAAkB,EAClB,uBAAuB,EACvB,KAAK,EACL,eAAe,CAChB;CAAG;AAEJ,eAAO,MAAM,oBAAoB,uDAA0D,CAAC;AA4C5F;;;;;;GAMG;AACH,eAAO,MAAM,4BAA4B,0IAiBtC,CAAC"}
1
+ {"version":3,"file":"firewall-alias.d.ts","sourceRoot":"","sources":["../../src/proxmox/firewall-alias.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6FG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,KAAK,QAAQ,MAAM,kBAAkB,CAAC;AAE7C,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGtE,MAAM,WAAW,kBAAmB,SAAQ,UAAU;IACpD;;;;OAIG;IACH,IAAI,EAAE,MAAM,CAAC;IACb;;;;OAIG;IACH,IAAI,EAAE,MAAM,CAAC;IACb;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,uBAAuB;IACtC,6FAA6F;IAC7F,IAAI,EAAE,MAAM,CAAC;IACb,oFAAoF;IACpF,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,oBAAqB,SAAQ,QAAQ,CACpD,uBAAuB,EACvB,kBAAkB,EAClB,uBAAuB,EACvB,KAAK,EACL,eAAe,CAChB;CAAG;AAEJ,eAAO,MAAM,oBAAoB,uDAA0D,CAAC;AAE5F,mGAAmG;AACnG,eAAO,MAAM,4BAA4B,0IAItC,CAAC"}