@homeflare/alchemy 0.37.5 → 0.37.6

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 (49) 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/index.js +2 -2
  24. package/dist/proxmox/index.js.map +3 -3
  25. package/dist/proxmox/node-network-wire.d.ts +14 -10
  26. package/dist/proxmox/node-network-wire.d.ts.map +1 -1
  27. package/docs/upstream-conformance.md +5 -3
  28. package/package.json +3 -2
  29. package/src/openbao/auth-role-form.test.ts +11 -9
  30. package/src/openbao/auth-role-form.ts +0 -19
  31. package/src/openbao/auth-role-identity.ts +24 -0
  32. package/src/openbao/auth-role-sdk.test.ts +155 -0
  33. package/src/openbao/auth-role-wire.test.ts +128 -0
  34. package/src/openbao/auth-role-wire.ts +89 -0
  35. package/src/openbao/auth-role.ts +9 -9
  36. package/src/openbao/bao-http.ts +9 -7
  37. package/src/openbao/distilled-retry.test.ts +164 -0
  38. package/src/openbao/distilled.test.ts +146 -0
  39. package/src/openbao/distilled.ts +88 -0
  40. package/src/openbao/fake-engines-roles.ts +9 -2
  41. package/src/openbao/policy-distilled.test.ts +98 -0
  42. package/src/openbao/policy-identity.ts +24 -0
  43. package/src/openbao/policy-rename.test.ts +2 -2
  44. package/src/openbao/policy-wire.test.ts +5 -5
  45. package/src/openbao/policy-wire.ts +31 -11
  46. package/src/openbao/policy.ts +10 -13
  47. package/src/openbao/rename.ts +17 -1
  48. package/src/proxmox/node-network-read-failure.test.ts +24 -0
  49. package/src/proxmox/node-network-wire.ts +15 -17
@@ -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"}
@@ -3725,7 +3725,7 @@ var attributesOf6 = (live, props) => {
3725
3725
  "vlan-raw-device": text(data["vlan-raw-device"])
3726
3726
  };
3727
3727
  };
3728
- var readInterfaceOrFail = (props) => readOrUnreadable(runPve(props.target, "read", false, nodes8.getNodeNetwork({ iface: props.iface, node: props.node })).pipe(Effect43.catchTag("ParameterVerificationFailed", (error) => error.errors["iface"] === "interface does not exist" ? Effect43.succeed(undefined) : Effect43.fail(error)))).pipe(Effect43.map((live) => {
3728
+ var readInterfaceOrFail = (props) => readOrUnreadable(runPve(props.target, "read", false, nodes8.getNodeNetwork({ iface: props.iface, node: props.node })).pipe(Effect43.catchTag("NetworkInterfaceNotFound", () => Effect43.succeed(undefined)))).pipe(Effect43.map((live) => {
3729
3729
  if (live === UNREADABLE)
3730
3730
  return UNREADABLE;
3731
3731
  return live === undefined ? undefined : attributesOf6(live, props);
@@ -6483,5 +6483,5 @@ export {
6483
6483
  violations
6484
6484
  };
6485
6485
 
6486
- //# debugId=ECA89AEF81AD3AD164756E2164756E21
6486
+ //# debugId=14E701EEC70A7BD764756E2164756E21
6487
6487
  //# sourceMappingURL=index.js.map