@homeflare/distilled-openbao 0.2.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 (313) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +78 -0
  3. package/dist/credentials.d.ts +32 -0
  4. package/dist/credentials.d.ts.map +1 -0
  5. package/dist/credentials.js +66 -0
  6. package/dist/credentials.js.map +1 -0
  7. package/dist/credentials.test.d.ts +2 -0
  8. package/dist/credentials.test.d.ts.map +1 -0
  9. package/dist/credentials.test.js +29 -0
  10. package/dist/credentials.test.js.map +1 -0
  11. package/dist/errors.d.ts +57 -0
  12. package/dist/errors.d.ts.map +1 -0
  13. package/dist/errors.js +37 -0
  14. package/dist/errors.js.map +1 -0
  15. package/dist/index.d.ts +30 -0
  16. package/dist/index.d.ts.map +1 -0
  17. package/dist/index.js +30 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/protocol.d.ts +18 -0
  20. package/dist/protocol.d.ts.map +1 -0
  21. package/dist/protocol.js +96 -0
  22. package/dist/protocol.js.map +1 -0
  23. package/dist/protocol.test.d.ts +2 -0
  24. package/dist/protocol.test.d.ts.map +1 -0
  25. package/dist/protocol.test.js +78 -0
  26. package/dist/protocol.test.js.map +1 -0
  27. package/dist/retry.d.ts +60 -0
  28. package/dist/retry.d.ts.map +1 -0
  29. package/dist/retry.js +53 -0
  30. package/dist/retry.js.map +1 -0
  31. package/dist/services/alias.d.ts +73 -0
  32. package/dist/services/alias.d.ts.map +1 -0
  33. package/dist/services/alias.js +91 -0
  34. package/dist/services/alias.js.map +1 -0
  35. package/dist/services/approle.d.ts +918 -0
  36. package/dist/services/approle.d.ts.map +1 -0
  37. package/dist/services/approle.js +1206 -0
  38. package/dist/services/approle.js.map +1 -0
  39. package/dist/services/auditing.d.ts +97 -0
  40. package/dist/services/auditing.d.ts.map +1 -0
  41. package/dist/services/auditing.js +158 -0
  42. package/dist/services/auditing.js.map +1 -0
  43. package/dist/services/auth.d.ts +160 -0
  44. package/dist/services/auth.d.ts.map +1 -0
  45. package/dist/services/auth.js +169 -0
  46. package/dist/services/auth.js.map +1 -0
  47. package/dist/services/collect.d.ts +35 -0
  48. package/dist/services/collect.d.ts.map +1 -0
  49. package/dist/services/collect.js +46 -0
  50. package/dist/services/collect.js.map +1 -0
  51. package/dist/services/configure.d.ts +35 -0
  52. package/dist/services/configure.d.ts.map +1 -0
  53. package/dist/services/configure.js +43 -0
  54. package/dist/services/configure.js.map +1 -0
  55. package/dist/services/cors.d.ts +54 -0
  56. package/dist/services/cors.d.ts.map +1 -0
  57. package/dist/services/cors.js +65 -0
  58. package/dist/services/cors.js.map +1 -0
  59. package/dist/services/cubbyhole.d.ts +40 -0
  60. package/dist/services/cubbyhole.d.ts.map +1 -0
  61. package/dist/services/cubbyhole.js +56 -0
  62. package/dist/services/cubbyhole.js.map +1 -0
  63. package/dist/services/database.d.ts +278 -0
  64. package/dist/services/database.d.ts.map +1 -0
  65. package/dist/services/database.js +384 -0
  66. package/dist/services/database.js.map +1 -0
  67. package/dist/services/decode.d.ts +18 -0
  68. package/dist/services/decode.d.ts.map +1 -0
  69. package/dist/services/decode.js +24 -0
  70. package/dist/services/decode.js.map +1 -0
  71. package/dist/services/entity.d.ts +257 -0
  72. package/dist/services/entity.d.ts.map +1 -0
  73. package/dist/services/entity.js +313 -0
  74. package/dist/services/entity.js.map +1 -0
  75. package/dist/services/generate.d.ts +136 -0
  76. package/dist/services/generate.d.ts.map +1 -0
  77. package/dist/services/generate.js +188 -0
  78. package/dist/services/generate.js.map +1 -0
  79. package/dist/services/group.d.ts +244 -0
  80. package/dist/services/group.d.ts.map +1 -0
  81. package/dist/services/group.js +277 -0
  82. package/dist/services/group.js.map +1 -0
  83. package/dist/services/ha.d.ts +17 -0
  84. package/dist/services/ha.d.ts.map +1 -0
  85. package/dist/services/ha.js +24 -0
  86. package/dist/services/ha.js.map +1 -0
  87. package/dist/services/index.d.ts +54 -0
  88. package/dist/services/index.d.ts.map +1 -0
  89. package/dist/services/index.js +55 -0
  90. package/dist/services/index.js.map +1 -0
  91. package/dist/services/initialize.d.ts +34 -0
  92. package/dist/services/initialize.d.ts.map +1 -0
  93. package/dist/services/initialize.js +31 -0
  94. package/dist/services/initialize.js.map +1 -0
  95. package/dist/services/internal.d.ts +131 -0
  96. package/dist/services/internal.d.ts.map +1 -0
  97. package/dist/services/internal.js +199 -0
  98. package/dist/services/internal.js.map +1 -0
  99. package/dist/services/jwt.d.ts +684 -0
  100. package/dist/services/jwt.d.ts.map +1 -0
  101. package/dist/services/jwt.js +801 -0
  102. package/dist/services/jwt.js.map +1 -0
  103. package/dist/services/kubernetes.d.ts +166 -0
  104. package/dist/services/kubernetes.d.ts.map +1 -0
  105. package/dist/services/kubernetes.js +187 -0
  106. package/dist/services/kubernetes.js.map +1 -0
  107. package/dist/services/kv.d.ts +519 -0
  108. package/dist/services/kv.d.ts.map +1 -0
  109. package/dist/services/kv.js +655 -0
  110. package/dist/services/kv.js.map +1 -0
  111. package/dist/services/leader.d.ts +21 -0
  112. package/dist/services/leader.d.ts.map +1 -0
  113. package/dist/services/leader.js +29 -0
  114. package/dist/services/leader.js.map +1 -0
  115. package/dist/services/leases.d.ts +185 -0
  116. package/dist/services/leases.d.ts.map +1 -0
  117. package/dist/services/leases.js +238 -0
  118. package/dist/services/leases.js.map +1 -0
  119. package/dist/services/locked.d.ts +27 -0
  120. package/dist/services/locked.d.ts.map +1 -0
  121. package/dist/services/locked.js +42 -0
  122. package/dist/services/locked.js.map +1 -0
  123. package/dist/services/loggers.d.ts +69 -0
  124. package/dist/services/loggers.d.ts.map +1 -0
  125. package/dist/services/loggers.js +100 -0
  126. package/dist/services/loggers.js.map +1 -0
  127. package/dist/services/mfa.d.ts +386 -0
  128. package/dist/services/mfa.d.ts.map +1 -0
  129. package/dist/services/mfa.js +553 -0
  130. package/dist/services/mfa.js.map +1 -0
  131. package/dist/services/misc.d.ts +103 -0
  132. package/dist/services/misc.d.ts.map +1 -0
  133. package/dist/services/misc.js +120 -0
  134. package/dist/services/misc.js.map +1 -0
  135. package/dist/services/mounts.d.ts +173 -0
  136. package/dist/services/mounts.d.ts.map +1 -0
  137. package/dist/services/mounts.js +168 -0
  138. package/dist/services/mounts.js.map +1 -0
  139. package/dist/services/namespaces.d.ts +257 -0
  140. package/dist/services/namespaces.d.ts.map +1 -0
  141. package/dist/services/namespaces.js +320 -0
  142. package/dist/services/namespaces.js.map +1 -0
  143. package/dist/services/oidc.d.ts +509 -0
  144. package/dist/services/oidc.d.ts.map +1 -0
  145. package/dist/services/oidc.js +718 -0
  146. package/dist/services/oidc.js.map +1 -0
  147. package/dist/services/persona.d.ts +73 -0
  148. package/dist/services/persona.d.ts.map +1 -0
  149. package/dist/services/persona.js +91 -0
  150. package/dist/services/persona.js.map +1 -0
  151. package/dist/services/pki.d.ts +5783 -0
  152. package/dist/services/pki.d.ts.map +1 -0
  153. package/dist/services/pki.js +4995 -0
  154. package/dist/services/pki.js.map +1 -0
  155. package/dist/services/plugins.d.ts +203 -0
  156. package/dist/services/plugins.d.ts.map +1 -0
  157. package/dist/services/plugins.js +237 -0
  158. package/dist/services/plugins.js.map +1 -0
  159. package/dist/services/policies.d.ts +250 -0
  160. package/dist/services/policies.d.ts.map +1 -0
  161. package/dist/services/policies.js +312 -0
  162. package/dist/services/policies.js.map +1 -0
  163. package/dist/services/pprof.d.ts +104 -0
  164. package/dist/services/pprof.d.ts.map +1 -0
  165. package/dist/services/pprof.js +161 -0
  166. package/dist/services/pprof.js.map +1 -0
  167. package/dist/services/query.d.ts +65 -0
  168. package/dist/services/query.d.ts.map +1 -0
  169. package/dist/services/query.js +66 -0
  170. package/dist/services/query.js.map +1 -0
  171. package/dist/services/rate.d.ts +102 -0
  172. package/dist/services/rate.d.ts.map +1 -0
  173. package/dist/services/rate.js +129 -0
  174. package/dist/services/rate.js.map +1 -0
  175. package/dist/services/raw.d.ts +85 -0
  176. package/dist/services/raw.d.ts.map +1 -0
  177. package/dist/services/raw.js +116 -0
  178. package/dist/services/raw.js.map +1 -0
  179. package/dist/services/read.d.ts +87 -0
  180. package/dist/services/read.d.ts.map +1 -0
  181. package/dist/services/read.js +123 -0
  182. package/dist/services/read.js.map +1 -0
  183. package/dist/services/rekey.d.ts +184 -0
  184. package/dist/services/rekey.d.ts.map +1 -0
  185. package/dist/services/rekey.js +243 -0
  186. package/dist/services/rekey.js.map +1 -0
  187. package/dist/services/reload.d.ts +15 -0
  188. package/dist/services/reload.d.ts.map +1 -0
  189. package/dist/services/reload.js +27 -0
  190. package/dist/services/reload.js.map +1 -0
  191. package/dist/services/remount.d.ts +18 -0
  192. package/dist/services/remount.d.ts.map +1 -0
  193. package/dist/services/remount.js +30 -0
  194. package/dist/services/remount.js.map +1 -0
  195. package/dist/services/root.d.ts +134 -0
  196. package/dist/services/root.d.ts.map +1 -0
  197. package/dist/services/root.js +180 -0
  198. package/dist/services/root.js.map +1 -0
  199. package/dist/services/rotate.d.ts +367 -0
  200. package/dist/services/rotate.d.ts.map +1 -0
  201. package/dist/services/rotate.js +473 -0
  202. package/dist/services/rotate.js.map +1 -0
  203. package/dist/services/seal.d.ts +29 -0
  204. package/dist/services/seal.d.ts.map +1 -0
  205. package/dist/services/seal.js +37 -0
  206. package/dist/services/seal.js.map +1 -0
  207. package/dist/services/ssh.d.ts +491 -0
  208. package/dist/services/ssh.d.ts.map +1 -0
  209. package/dist/services/ssh.js +582 -0
  210. package/dist/services/ssh.js.map +1 -0
  211. package/dist/services/status.d.ts +17 -0
  212. package/dist/services/status.d.ts.map +1 -0
  213. package/dist/services/status.js +25 -0
  214. package/dist/services/status.js.map +1 -0
  215. package/dist/services/step.d.ts +14 -0
  216. package/dist/services/step.d.ts.map +1 -0
  217. package/dist/services/step.js +21 -0
  218. package/dist/services/step.js.map +1 -0
  219. package/dist/services/system.d.ts +33 -0
  220. package/dist/services/system.d.ts.map +1 -0
  221. package/dist/services/system.js +47 -0
  222. package/dist/services/system.js.map +1 -0
  223. package/dist/services/token.d.ts +408 -0
  224. package/dist/services/token.d.ts.map +1 -0
  225. package/dist/services/token.js +415 -0
  226. package/dist/services/token.js.map +1 -0
  227. package/dist/services/ui.d.ts +70 -0
  228. package/dist/services/ui.d.ts.map +1 -0
  229. package/dist/services/ui.js +95 -0
  230. package/dist/services/ui.js.map +1 -0
  231. package/dist/services/update.d.ts +25 -0
  232. package/dist/services/update.d.ts.map +1 -0
  233. package/dist/services/update.js +36 -0
  234. package/dist/services/update.js.map +1 -0
  235. package/dist/services/userpass.d.ts +151 -0
  236. package/dist/services/userpass.d.ts.map +1 -0
  237. package/dist/services/userpass.js +177 -0
  238. package/dist/services/userpass.js.map +1 -0
  239. package/dist/services/version.d.ts +22 -0
  240. package/dist/services/version.d.ts.map +1 -0
  241. package/dist/services/version.js +28 -0
  242. package/dist/services/version.js.map +1 -0
  243. package/dist/services/workflows.d.ts +122 -0
  244. package/dist/services/workflows.d.ts.map +1 -0
  245. package/dist/services/workflows.js +149 -0
  246. package/dist/services/workflows.js.map +1 -0
  247. package/dist/traits.d.ts +11 -0
  248. package/dist/traits.d.ts.map +1 -0
  249. package/dist/traits.js +12 -0
  250. package/dist/traits.js.map +1 -0
  251. package/package.json +75 -0
  252. package/src/credentials.test.ts +36 -0
  253. package/src/credentials.ts +100 -0
  254. package/src/errors.ts +73 -0
  255. package/src/index.ts +33 -0
  256. package/src/protocol.test.ts +123 -0
  257. package/src/protocol.ts +120 -0
  258. package/src/retry.ts +84 -0
  259. package/src/services/alias.ts +208 -0
  260. package/src/services/approle.ts +2750 -0
  261. package/src/services/auditing.ts +318 -0
  262. package/src/services/auth.ts +416 -0
  263. package/src/services/collect.ts +103 -0
  264. package/src/services/configure.ts +94 -0
  265. package/src/services/cors.ts +155 -0
  266. package/src/services/cubbyhole.ts +117 -0
  267. package/src/services/database.ts +854 -0
  268. package/src/services/decode.ts +49 -0
  269. package/src/services/entity.ts +744 -0
  270. package/src/services/generate.ts +409 -0
  271. package/src/services/group.ts +677 -0
  272. package/src/services/ha.ts +52 -0
  273. package/src/services/index.ts +54 -0
  274. package/src/services/initialize.ts +76 -0
  275. package/src/services/internal.ts +425 -0
  276. package/src/services/jwt.ts +1838 -0
  277. package/src/services/kubernetes.ts +446 -0
  278. package/src/services/kv.ts +1480 -0
  279. package/src/services/leader.ts +57 -0
  280. package/src/services/leases.ts +532 -0
  281. package/src/services/locked.ts +86 -0
  282. package/src/services/loggers.ts +215 -0
  283. package/src/services/mfa.ts +1193 -0
  284. package/src/services/misc.ts +286 -0
  285. package/src/services/mounts.ts +428 -0
  286. package/src/services/namespaces.ts +707 -0
  287. package/src/services/oidc.ts +1613 -0
  288. package/src/services/persona.ts +210 -0
  289. package/src/services/pki.ts +13320 -0
  290. package/src/services/plugins.ts +549 -0
  291. package/src/services/policies.ts +689 -0
  292. package/src/services/pprof.ts +351 -0
  293. package/src/services/query.ts +170 -0
  294. package/src/services/rate.ts +303 -0
  295. package/src/services/raw.ts +244 -0
  296. package/src/services/read.ts +266 -0
  297. package/src/services/rekey.ts +540 -0
  298. package/src/services/reload.ts +51 -0
  299. package/src/services/remount.ts +58 -0
  300. package/src/services/root.ts +393 -0
  301. package/src/services/rotate.ts +1088 -0
  302. package/src/services/seal.ts +75 -0
  303. package/src/services/ssh.ts +1351 -0
  304. package/src/services/status.ts +51 -0
  305. package/src/services/step.ts +43 -0
  306. package/src/services/system.ts +98 -0
  307. package/src/services/token.ts +1046 -0
  308. package/src/services/ui.ts +207 -0
  309. package/src/services/update.ts +73 -0
  310. package/src/services/userpass.ts +410 -0
  311. package/src/services/version.ts +60 -0
  312. package/src/services/workflows.ts +327 -0
  313. package/src/traits.ts +45 -0
@@ -0,0 +1,96 @@
1
+ /**
2
+ * OpenBaoProtocol — the shared bearer-REST protocol instantiated for
3
+ * OpenBao.
4
+ *
5
+ * OpenBao wraps every "logical" response (the vast majority — reads,
6
+ * mount/auth/role CRUD) in an envelope: `{ request_id, lease_id,
7
+ * renewable, lease_duration, data: {...}, wrap_info, warnings, auth }`.
8
+ * The generated response schemas describe the INNER `data` shape only — the
9
+ * OpenAPI document OpenBao's own generator produces documents just that
10
+ * (measured against `.generated-specs/policies.json`'s
11
+ * `PoliciesReadAclPolicyResponse`, which has no `request_id`/`lease_id`/etc
12
+ * member at all) — so `transformResponse` below unwraps `data` before
13
+ * decoding, exactly the rule the kit's hand-rolled client already applies
14
+ * (`packages/alchemy/src/openbao/bao-http.ts`'s `baoRead`: take `data` when
15
+ * it is an object, the whole body otherwise). A handful of endpoints are
16
+ * NOT logical responses and have no `data` envelope at all — `sys/health`,
17
+ * `sys/seal-status`, `sys/leader` answer their fields at the top level — so
18
+ * the unwrap only fires when `data` is actually present and an object,
19
+ * which leaves those untouched.
20
+ *
21
+ * ⚠️ NOT YET HANDLED: auth/login responses (`auth/<mount>/login`, and every
22
+ * `*-login` operation) wrap their payload under `auth`, not `data` — this
23
+ * protocol does not unwrap that shape yet. No migrated family calls a login
24
+ * endpoint through this SDK today; add an `auth`-aware unwrap (or a
25
+ * dedicated response trait) before one does.
26
+ *
27
+ * Failures carry `{"errors": [...]}` — zero or more strings, and often
28
+ * literally empty (measured 2026-09-24: OpenBao 2.6.2 answers a missing ACL
29
+ * policy read with `404 {"errors":[]}`, no text). There is normally no
30
+ * machine-readable code, so typed errors beyond the status-derived ones
31
+ * match on status, or on message when OpenBao actually supplies one — see
32
+ * `patches/`.
33
+ *
34
+ * Authentication is a single header, `X-Vault-Token`, plus an optional
35
+ * `X-Vault-Namespace` when the credential carries one — the estate always
36
+ * does (`BAO_NAMESPACE=homeflare`). A namespace does not change a mounted
37
+ * backend's own path shape (see `stacks/distilled-submodules/spec-repos/
38
+ * openbao/fetch-specs.ts`'s module docs for how that was confirmed), so it
39
+ * is purely a request header here, never a path segment.
40
+ */
41
+ import * as Effect from "effect/Effect";
42
+ import * as Redacted from "effect/Redacted";
43
+ import { makeRestProtocol, } from "@distilled.cloud/core/protocol-rest";
44
+ import { Credentials } from "./credentials.js";
45
+ import { UnknownOpenBaoError } from "./errors.js";
46
+ /**
47
+ * OpenBao error bodies are `{"errors": [...]}`. Several strings are joined
48
+ * (`"; "`) rather than only the first kept, so a matcher's `includes` still
49
+ * sees text further down the list; an empty array (the common 404 shape)
50
+ * yields no `message`, and the protocol's own `HTTP <status>` fallback
51
+ * covers it. A response that arrives without that envelope (a proxy 502, an
52
+ * HTML error page) falls through to the same fallback.
53
+ */
54
+ const errorEnvelope = (body) => {
55
+ if (body === null || typeof body !== "object")
56
+ return undefined;
57
+ const b = body;
58
+ if (!Array.isArray(b.errors))
59
+ return undefined;
60
+ const messages = b.errors.filter((e) => typeof e === "string");
61
+ return { message: messages.length > 0 ? messages.join("; ") : undefined };
62
+ };
63
+ /** Unwrap the `data` envelope — see this file's module docs. */
64
+ const transformResponse = (body) => {
65
+ if (body === null || typeof body !== "object")
66
+ return body;
67
+ const data = body.data;
68
+ return typeof data === "object" && data !== null ? data : body;
69
+ };
70
+ export const OpenBaoProtocol = makeRestProtocol({
71
+ // Resolved on the CALLING fiber per request (the layer is memoized per
72
+ // process); the Credentials service holds an effect, so a token rotated
73
+ // between calls is picked up without rebuilding the layer.
74
+ credentials: Effect.gen(function* () {
75
+ const resolve = yield* Credentials;
76
+ return yield* resolve;
77
+ }),
78
+ baseUrl: (creds) => creds.apiBaseUrl,
79
+ headers: (creds) => ({
80
+ "X-Vault-Token": Redacted.value(creds.token),
81
+ ...(creds.namespace ? { "X-Vault-Namespace": creds.namespace } : {}),
82
+ Accept: "application/json",
83
+ }),
84
+ errorEnvelope,
85
+ transformResponse,
86
+ unknownError: ({ code, message, body }) => new UnknownOpenBaoError({
87
+ code: typeof code === "string"
88
+ ? code
89
+ : code !== undefined
90
+ ? String(code)
91
+ : undefined,
92
+ message,
93
+ body,
94
+ }),
95
+ });
96
+ //# sourceMappingURL=protocol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAC;AAK5C,OAAO,EACL,gBAAgB,GAEjB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAe,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAsB,MAAM,aAAa,CAAC;AAgBtE;;;;;;;GAOG;AACH,MAAM,aAAa,GAAG,CAAC,IAAa,EAAiC,EAAE;IACrE,IAAI,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAChE,MAAM,CAAC,GAAG,IAA+B,CAAC;IAC1C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;QAAE,OAAO,SAAS,CAAC;IAC/C,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC;IAC5E,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;AAC5E,CAAC,CAAC;AAEF,gEAAgE;AAChE,MAAM,iBAAiB,GAAG,CAAC,IAAa,EAAW,EAAE;IACnD,IAAI,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3D,MAAM,IAAI,GAAI,IAAgC,CAAC,IAAI,CAAC;IACpD,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AACjE,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAC1B,gBAAgB,CAAS;IACvB,uEAAuE;IACvE,wEAAwE;IACxE,2DAA2D;IAC3D,WAAW,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAC/B,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,WAAW,CAAC;QACnC,OAAO,KAAK,CAAC,CAAC,OAAO,CAAC;IACxB,CAAC,CAAC;IACF,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU;IACpC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACnB,eAAe,EAAE,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC;QAC5C,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,mBAAmB,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACpE,MAAM,EAAE,kBAAkB;KAC3B,CAAC;IACF,aAAa;IACb,iBAAiB;IACjB,YAAY,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,CACxC,IAAI,mBAAmB,CAAC;QACtB,IAAI,EACF,OAAO,IAAI,KAAK,QAAQ;YACtB,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,IAAI,KAAK,SAAS;gBAClB,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;gBACd,CAAC,CAAC,SAAS;QACjB,OAAO;QACP,IAAI;KACL,CAAC;CACL,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=protocol.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol.test.d.ts","sourceRoot":"","sources":["../src/protocol.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Proves the two measured, package-specific rules in `protocol.ts`: the
3
+ * `{"errors": [...]}` envelope (often empty — the common 404 shape) and the
4
+ * `data`-envelope unwrap on 2xx bodies. Same pattern as
5
+ * `@distilled.cloud/proxmox`'s `protocol.test.ts` (a fake `HttpClient`
6
+ * layer in front of a real generated operation), written after that file's
7
+ * own history: an adversarial review is what caught the proxmox bug this
8
+ * pattern exists to stop recurring, so OpenBao gets the same coverage from
9
+ * the start rather than after its own incident.
10
+ */
11
+ import { describe, expect, test } from "bun:test";
12
+ import * as Effect from "effect/Effect";
13
+ import * as Layer from "effect/Layer";
14
+ import * as HttpClient from "effect/unstable/http/HttpClient";
15
+ import * as HttpClientResponse from "effect/unstable/http/HttpClientResponse";
16
+ import { credentials } from "./credentials.js";
17
+ import { Forbidden, UnknownOpenBaoError } from "./errors.js";
18
+ import * as Retry from "./retry.js";
19
+ import { PolicyNotFound, policiesReadAclPolicy } from "./services/policies.js";
20
+ const testCredentials = credentials({
21
+ token: "test-token",
22
+ addr: "http://127.0.0.1:8299",
23
+ namespace: "homeflare",
24
+ });
25
+ const fakeOpenBao = (status, body) => Layer.succeed(HttpClient.HttpClient, HttpClient.make((request) => Effect.sync(() => HttpClientResponse.fromWeb(request, new Response(body === undefined ? undefined : JSON.stringify(body), {
26
+ status,
27
+ })))));
28
+ const readAbsent = (status, body) => Effect.runPromise(policiesReadAclPolicy({ name: "zz-probe-absent" }).pipe(Retry.none, Effect.provide(Layer.mergeAll(fakeOpenBao(status, body), testCredentials)), Effect.flip));
29
+ describe("protocol.ts error decoding", () => {
30
+ test("a 404 with an EMPTY errors array (the measured absent-policy shape) is PolicyNotFound", async () => {
31
+ // Measured on OpenBao 2.6.2, 2026-09-24: GET sys/policies/acl/<absent>
32
+ // answers exactly this — see patches/policies/_errors.json.
33
+ const error = await readAbsent(404, { errors: [] });
34
+ expect(error).toBeInstanceOf(PolicyNotFound);
35
+ });
36
+ test("a 403 with an errors array falls back to core's status map (Forbidden), joined", async () => {
37
+ const error = await readAbsent(403, {
38
+ errors: ["permission denied", "token expired"],
39
+ });
40
+ expect(error).toBeInstanceOf(Forbidden);
41
+ expect(error).toMatchObject({
42
+ message: "permission denied; token expired",
43
+ });
44
+ });
45
+ // 418 is neither in HTTP_STATUS_MAP nor >= 500 (the unmapped-5xx fallback
46
+ // in core's makeRestProtocol answers InternalServerError for those before
47
+ // unknownError is ever reached).
48
+ test("a genuinely unmapped, non-5xx status still falls back to UnknownOpenBaoError", async () => {
49
+ const error = await readAbsent(418, { errors: ["teapot"] });
50
+ expect(error).toBeInstanceOf(UnknownOpenBaoError);
51
+ });
52
+ test('the {"data": ...} envelope is unwrapped before decode', async () => {
53
+ const result = await Effect.runPromise(policiesReadAclPolicy({ name: "agent" }).pipe(Effect.provide(Layer.mergeAll(fakeOpenBao(200, {
54
+ request_id: "r-1",
55
+ lease_id: "",
56
+ renewable: false,
57
+ lease_duration: 0,
58
+ data: { name: "agent", policy: 'path "secret/*" {}', version: 1 },
59
+ wrap_info: null,
60
+ warnings: null,
61
+ auth: null,
62
+ }), testCredentials))));
63
+ expect(result).toMatchObject({
64
+ name: "agent",
65
+ policy: 'path "secret/*" {}',
66
+ });
67
+ });
68
+ test("sys/health-shaped bodies (no data envelope) pass through unchanged", async () => {
69
+ // Not every endpoint is a logical response — sys/health answers its
70
+ // fields at the top level, with no `data` wrapper. This operation never
71
+ // calls that endpoint; the test exercises transformResponse directly
72
+ // through a 2xx body that happens to have no `data` field, confirming
73
+ // the unwrap only fires when one is actually present.
74
+ const result = await Effect.runPromise(policiesReadAclPolicy({ name: "agent" }).pipe(Effect.provide(Layer.mergeAll(fakeOpenBao(200, { name: "agent", policy: "" }), testCredentials))));
75
+ expect(result).toMatchObject({ name: "agent", policy: "" });
76
+ });
77
+ });
78
+ //# sourceMappingURL=protocol.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol.test.js","sourceRoot":"","sources":["../src/protocol.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * OpenBao retry surface — a veneer over `@distilled.cloud/core/retry`.
3
+ *
4
+ * The `Retry` service tag is threaded into every generated operation via
5
+ * `API.make({ retry: Retry })`, so a caller-installed policy applies to all
6
+ * OpenBao calls below it and core's `makeDefault` is the fallback when none
7
+ * is provided.
8
+ *
9
+ * ⚠️ THIS IS NOT THE ESTATE'S CONCURRENCY GATE. The kit's own
10
+ * `packages/alchemy/src/openbao/bao-http.ts` caps in-flight OpenBao
11
+ * exchanges at 8 process-wide (`BaoGate`, a `Semaphore`) after a real
12
+ * outage: unbounded Alchemy fan-out took the dev listener's socket down
13
+ * (measured 2026-09-14). That cap is `HttpClient` middleware, not a retry
14
+ * policy, and stays exactly where it is — the kit's Effect runtime provides
15
+ * the gated `HttpClient.HttpClient` layer underneath whichever protocol
16
+ * (hand-rolled or this SDK) issues the request, so it keeps applying
17
+ * unchanged to every call this package makes.
18
+ *
19
+ * @example
20
+ * ```ts
21
+ * import * as OpenBao from "@distilled.cloud/openbao";
22
+ *
23
+ * myEffect.pipe(OpenBao.Retry.transient);
24
+ * ```
25
+ */
26
+ import * as Context from "effect/Context";
27
+ import * as Effect from "effect/Effect";
28
+ import * as Retries from "@distilled.cloud/core/retry";
29
+ export type Options = Retries.Options;
30
+ export type Factory = Retries.Factory;
31
+ export type Policy = Retries.Policy;
32
+ declare const Retry_base: Context.ServiceClass<Retry, "OpenBaoRetry", Retries.Policy>;
33
+ /** Context tag for configuring retry behavior of OpenBao API calls. */
34
+ export declare class Retry extends Retry_base {
35
+ }
36
+ /** Provides a custom retry policy to every OpenBao API call below it. */
37
+ export declare const policy: {
38
+ (options: Options): <A, E, R>(effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, Exclude<R, Retry>>;
39
+ (factory: Factory): <A, E, R>(effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, Exclude<R, Retry>>;
40
+ };
41
+ /** Disables all automatic retries. */
42
+ export declare const none: <A, E, R>(effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, Exclude<R, Retry>>;
43
+ /**
44
+ * The default retry policy (core's): transient/throttling/retryable errors,
45
+ * capped exponential backoff with jitter, server `retryAfter` hints honored
46
+ * with precedence.
47
+ */
48
+ export declare const makeDefault: Factory;
49
+ export declare const jittered: <Error, Env>(self: import("effect/Schedule").Schedule<unknown, unknown, Error, Env>) => import("effect/Schedule").Schedule<unknown, unknown, Error, Env>;
50
+ export declare const capped: (max: import("effect/Duration").Duration) => <Error, Env>(self: import("effect/Schedule").Schedule<unknown, unknown, Error, Env>) => import("effect/Schedule").Schedule<unknown, unknown, Error, Env>;
51
+ /** Retry options that retry all throttling errors indefinitely. */
52
+ export declare const throttlingOptions: Options;
53
+ /** Retries all throttling errors indefinitely (honoring server hints). */
54
+ export declare const throttling: <A, E, R>(effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, Exclude<R, Retry>>;
55
+ /** Retry options that retry all transient errors indefinitely. */
56
+ export declare const transientOptions: Options;
57
+ /** Retries all transient errors indefinitely (honoring server hints). */
58
+ export declare const transient: <A, E, R>(effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, Exclude<R, Retry>>;
59
+ export {};
60
+ //# sourceMappingURL=retry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../src/retry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,OAAO,KAAK,OAAO,MAAM,6BAA6B,CAAC;AAEvD,MAAM,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;AACtC,MAAM,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;AACtC,MAAM,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;;AAEpC,uEAAuE;AACvE,qBAAa,KAAM,SAAQ,UAAgD;CAAG;AAE9E,yEAAyE;AACzE,eAAO,MAAM,MAAM,EAAE;IACnB,CACE,OAAO,EAAE,OAAO,GACf,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EACT,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAC3B,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;IAC5C,CACE,OAAO,EAAE,OAAO,GACf,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EACT,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAC3B,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;CAEU,CAAC;AAEzD,sCAAsC;AACtC,eAAO,MAAM,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EACzB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAC3B,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,KAAK,CAAC,CAEzC,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,WAAW,EAAE,OAA6B,CAAC;AAExD,eAAO,MAAM,QAAQ,0JAAmB,CAAC;AACzC,eAAO,MAAM,MAAM,uMAAiB,CAAC;AAErC,mEAAmE;AACnE,eAAO,MAAM,iBAAiB,EAAE,OAAmC,CAAC;AAEpE,0EAA0E;AAC1E,eAAO,MAAM,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAC3B,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,KAAK,CAAC,CAAqC,CAAC;AAEhF,kEAAkE;AAClE,eAAO,MAAM,gBAAgB,EAAE,OAAkC,CAAC;AAElE,yEAAyE;AACzE,eAAO,MAAM,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAC9B,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAC3B,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,KAAK,CAAC,CAAoC,CAAC"}
package/dist/retry.js ADDED
@@ -0,0 +1,53 @@
1
+ /**
2
+ * OpenBao retry surface — a veneer over `@distilled.cloud/core/retry`.
3
+ *
4
+ * The `Retry` service tag is threaded into every generated operation via
5
+ * `API.make({ retry: Retry })`, so a caller-installed policy applies to all
6
+ * OpenBao calls below it and core's `makeDefault` is the fallback when none
7
+ * is provided.
8
+ *
9
+ * ⚠️ THIS IS NOT THE ESTATE'S CONCURRENCY GATE. The kit's own
10
+ * `packages/alchemy/src/openbao/bao-http.ts` caps in-flight OpenBao
11
+ * exchanges at 8 process-wide (`BaoGate`, a `Semaphore`) after a real
12
+ * outage: unbounded Alchemy fan-out took the dev listener's socket down
13
+ * (measured 2026-09-14). That cap is `HttpClient` middleware, not a retry
14
+ * policy, and stays exactly where it is — the kit's Effect runtime provides
15
+ * the gated `HttpClient.HttpClient` layer underneath whichever protocol
16
+ * (hand-rolled or this SDK) issues the request, so it keeps applying
17
+ * unchanged to every call this package makes.
18
+ *
19
+ * @example
20
+ * ```ts
21
+ * import * as OpenBao from "@distilled.cloud/openbao";
22
+ *
23
+ * myEffect.pipe(OpenBao.Retry.transient);
24
+ * ```
25
+ */
26
+ import * as Context from "effect/Context";
27
+ import * as Effect from "effect/Effect";
28
+ import * as Layer from "effect/Layer";
29
+ import * as Retries from "@distilled.cloud/core/retry";
30
+ /** Context tag for configuring retry behavior of OpenBao API calls. */
31
+ export class Retry extends Context.Service()("OpenBaoRetry") {
32
+ }
33
+ /** Provides a custom retry policy to every OpenBao API call below it. */
34
+ export const policy = (optionsOrFactory) => Effect.provide(Layer.succeed(Retry, optionsOrFactory));
35
+ /** Disables all automatic retries. */
36
+ export const none = Effect.provide(Layer.succeed(Retry, { while: () => false }));
37
+ /**
38
+ * The default retry policy (core's): transient/throttling/retryable errors,
39
+ * capped exponential backoff with jitter, server `retryAfter` hints honored
40
+ * with precedence.
41
+ */
42
+ export const makeDefault = Retries.makeDefault;
43
+ export const jittered = Retries.jittered;
44
+ export const capped = Retries.capped;
45
+ /** Retry options that retry all throttling errors indefinitely. */
46
+ export const throttlingOptions = Retries.throttlingOptions;
47
+ /** Retries all throttling errors indefinitely (honoring server hints). */
48
+ export const throttling = policy(Retries.throttlingFactory);
49
+ /** Retry options that retry all transient errors indefinitely. */
50
+ export const transientOptions = Retries.transientOptions;
51
+ /** Retries all transient errors indefinitely (honoring server hints). */
52
+ export const transient = policy(Retries.transientFactory);
53
+ //# sourceMappingURL=retry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry.js","sourceRoot":"","sources":["../src/retry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,OAAO,MAAM,6BAA6B,CAAC;AAMvD,uEAAuE;AACvE,MAAM,OAAO,KAAM,SAAQ,OAAO,CAAC,OAAO,EAAiB,CAAC,cAAc,CAAC;CAAG;AAE9E,yEAAyE;AACzE,MAAM,CAAC,MAAM,MAAM,GAWf,CAAC,gBAAmC,EAAE,EAAE,CAC1C,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC,CAAC;AAEzD,sCAAsC;AACtC,MAAM,CAAC,MAAM,IAAI,GAE6B,MAAM,CAAC,OAAO,CAC1D,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,CAC7C,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,WAAW,GAAY,OAAO,CAAC,WAAW,CAAC;AAExD,MAAM,CAAC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;AACzC,MAAM,CAAC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;AAErC,mEAAmE;AACnE,MAAM,CAAC,MAAM,iBAAiB,GAAY,OAAO,CAAC,iBAAiB,CAAC;AAEpE,0EAA0E;AAC1E,MAAM,CAAC,MAAM,UAAU,GAEuB,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAEhF,kEAAkE;AAClE,MAAM,CAAC,MAAM,gBAAgB,GAAY,OAAO,CAAC,gBAAgB,CAAC;AAElE,yEAAyE;AACzE,MAAM,CAAC,MAAM,SAAS,GAEwB,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC"}
@@ -0,0 +1,73 @@
1
+ import * as S from "@distilled.cloud/core/schema";
2
+ import * as API from "@distilled.cloud/core/api";
3
+ import { type OpenBaoOpError, type OpenBaoOpContext } from "../protocol.ts";
4
+ export type { OpenBaoOpError, OpenBaoOpContext };
5
+ export interface AliasDeleteByIdRequest {
6
+ /** ID of the alias */
7
+ id: string;
8
+ }
9
+ export declare const AliasDeleteByIdRequest: S.Schema<AliasDeleteByIdRequest>;
10
+ export interface AliasDeleteByIdResponse {
11
+ }
12
+ export declare const AliasDeleteByIdResponse: S.Schema<AliasDeleteByIdResponse>;
13
+ export type AliasListByIdRequestList = "true";
14
+ export declare const AliasListByIdRequestList: any;
15
+ export interface AliasListByIdRequest {
16
+ /** Must be set to `true` */
17
+ list: AliasListByIdRequestList | (string & {});
18
+ }
19
+ export declare const AliasListByIdRequest: S.Schema<AliasListByIdRequest>;
20
+ export interface AliasListByIdResponse {
21
+ }
22
+ export declare const AliasListByIdResponse: S.Schema<AliasListByIdResponse>;
23
+ export interface AliasReadByIdRequest {
24
+ /** ID of the alias */
25
+ id: string;
26
+ }
27
+ export declare const AliasReadByIdRequest: S.Schema<AliasReadByIdRequest>;
28
+ export interface AliasReadByIdResponse {
29
+ }
30
+ export declare const AliasReadByIdResponse: S.Schema<AliasReadByIdResponse>;
31
+ export interface AliasUpdateByIdRequest {
32
+ /** ID of the alias */
33
+ id: string;
34
+ /** Entity ID to which this alias should be tied to */
35
+ canonical_id?: string;
36
+ /** Entity ID to which this alias should be tied to. This field is deprecated in favor of 'canonical_id'. */
37
+ entity_id?: string;
38
+ /** Mount accessor to which this alias belongs to */
39
+ mount_accessor?: string;
40
+ /** Name of the alias */
41
+ name?: string;
42
+ }
43
+ export declare const AliasUpdateByIdRequest: S.Schema<AliasUpdateByIdRequest>;
44
+ export interface AliasUpdateByIdResponse {
45
+ }
46
+ export declare const AliasUpdateByIdResponse: S.Schema<AliasUpdateByIdResponse>;
47
+ export interface CreateAliasRequest {
48
+ /** Entity ID to which this alias belongs to */
49
+ canonical_id?: string;
50
+ /** Entity ID to which this alias belongs to. This field is deprecated in favor of 'canonical_id'. */
51
+ entity_id?: string;
52
+ /** ID of the alias */
53
+ id?: string;
54
+ /** Mount accessor to which this alias belongs to */
55
+ mount_accessor?: string;
56
+ /** Name of the alias */
57
+ name?: string;
58
+ }
59
+ export declare const CreateAliasRequest: S.Schema<CreateAliasRequest>;
60
+ export interface CreateAliasResponse {
61
+ }
62
+ export declare const CreateAliasResponse: S.Schema<CreateAliasResponse>;
63
+ export type AliasDeleteByIdError = OpenBaoOpError;
64
+ export declare const aliasDeleteById: API.OperationMethod<AliasDeleteByIdRequest, AliasDeleteByIdResponse, AliasDeleteByIdError, OpenBaoOpContext>;
65
+ export type AliasListByIdError = OpenBaoOpError;
66
+ export declare const aliasListById: API.OperationMethod<AliasListByIdRequest, AliasListByIdResponse, AliasListByIdError, OpenBaoOpContext>;
67
+ export type AliasReadByIdError = OpenBaoOpError;
68
+ export declare const aliasReadById: API.OperationMethod<AliasReadByIdRequest, AliasReadByIdResponse, AliasReadByIdError, OpenBaoOpContext>;
69
+ export type AliasUpdateByIdError = OpenBaoOpError;
70
+ export declare const aliasUpdateById: API.OperationMethod<AliasUpdateByIdRequest, AliasUpdateByIdResponse, AliasUpdateByIdError, OpenBaoOpContext>;
71
+ export type CreateAliasError = OpenBaoOpError;
72
+ export declare const createAlias: API.OperationMethod<CreateAliasRequest, CreateAliasResponse, CreateAliasError, OpenBaoOpContext>;
73
+ //# sourceMappingURL=alias.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alias.d.ts","sourceRoot":"","sources":["../../src/services/alias.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,91 @@
1
+ // AUTO-GENERATED by scripts/generate.ts from .generated-specs (specs/spec-mirror-openbao, generated — see fetch-specs.ts). Do not edit.
2
+ import * as S from "@distilled.cloud/core/schema";
3
+ import * as API from "@distilled.cloud/core/api";
4
+ import * as T from "../traits.js";
5
+ import { OpenBaoProtocol, } from "../protocol.js";
6
+ import * as Retry from "../retry.js";
7
+ export const AliasDeleteByIdRequest = /*@__PURE__*/ S.suspend(() => S.Struct({
8
+ id: S.String.pipe(T.Label()),
9
+ }).pipe(T.Http({ method: "DELETE", uri: "/identity/alias/id/{id}", code: 200 }))).annotate({
10
+ identifier: "AliasDeleteByIdRequest",
11
+ });
12
+ export const AliasDeleteByIdResponse = /*@__PURE__*/ S.suspend(() => S.Struct({})).annotate({
13
+ identifier: "AliasDeleteByIdResponse",
14
+ });
15
+ export const AliasListByIdRequestList = S.String;
16
+ export const AliasListByIdRequest = /*@__PURE__*/ S.suspend(() => S.Struct({
17
+ list: AliasListByIdRequestList.pipe(T.Query()),
18
+ }).pipe(T.Http({ method: "GET", uri: "/identity/alias/id", code: 200 }))).annotate({
19
+ identifier: "AliasListByIdRequest",
20
+ });
21
+ export const AliasListByIdResponse = /*@__PURE__*/ S.suspend(() => S.Struct({})).annotate({
22
+ identifier: "AliasListByIdResponse",
23
+ });
24
+ export const AliasReadByIdRequest = /*@__PURE__*/ S.suspend(() => S.Struct({
25
+ id: S.String.pipe(T.Label()),
26
+ }).pipe(T.Http({ method: "GET", uri: "/identity/alias/id/{id}", code: 200 }))).annotate({
27
+ identifier: "AliasReadByIdRequest",
28
+ });
29
+ export const AliasReadByIdResponse = /*@__PURE__*/ S.suspend(() => S.Struct({})).annotate({
30
+ identifier: "AliasReadByIdResponse",
31
+ });
32
+ export const AliasUpdateByIdRequest = /*@__PURE__*/ S.suspend(() => S.Struct({
33
+ id: S.String.pipe(T.Label()),
34
+ canonical_id: S.optional(S.String),
35
+ entity_id: S.optional(S.String),
36
+ mount_accessor: S.optional(S.String),
37
+ name: S.optional(S.String),
38
+ }).pipe(T.Http({ method: "POST", uri: "/identity/alias/id/{id}", code: 200 }))).annotate({
39
+ identifier: "AliasUpdateByIdRequest",
40
+ });
41
+ export const AliasUpdateByIdResponse = /*@__PURE__*/ S.suspend(() => S.Struct({})).annotate({
42
+ identifier: "AliasUpdateByIdResponse",
43
+ });
44
+ export const CreateAliasRequest = /*@__PURE__*/ S.suspend(() => S.Struct({
45
+ canonical_id: S.optional(S.String),
46
+ entity_id: S.optional(S.String),
47
+ id: S.optional(S.String),
48
+ mount_accessor: S.optional(S.String),
49
+ name: S.optional(S.String),
50
+ }).pipe(T.Http({ method: "POST", uri: "/identity/alias", code: 200 }))).annotate({
51
+ identifier: "CreateAliasRequest",
52
+ });
53
+ export const CreateAliasResponse = /*@__PURE__*/ S.suspend(() => S.Struct({})).annotate({
54
+ identifier: "CreateAliasResponse",
55
+ });
56
+ export const aliasDeleteById = /*@__PURE__*/ API.make(() => ({
57
+ input: AliasDeleteByIdRequest,
58
+ output: AliasDeleteByIdResponse,
59
+ errors: [],
60
+ protocol: OpenBaoProtocol,
61
+ retry: Retry.Retry,
62
+ }));
63
+ export const aliasListById = /*@__PURE__*/ API.make(() => ({
64
+ input: AliasListByIdRequest,
65
+ output: AliasListByIdResponse,
66
+ errors: [],
67
+ protocol: OpenBaoProtocol,
68
+ retry: Retry.Retry,
69
+ }));
70
+ export const aliasReadById = /*@__PURE__*/ API.make(() => ({
71
+ input: AliasReadByIdRequest,
72
+ output: AliasReadByIdResponse,
73
+ errors: [],
74
+ protocol: OpenBaoProtocol,
75
+ retry: Retry.Retry,
76
+ }));
77
+ export const aliasUpdateById = /*@__PURE__*/ API.make(() => ({
78
+ input: AliasUpdateByIdRequest,
79
+ output: AliasUpdateByIdResponse,
80
+ errors: [],
81
+ protocol: OpenBaoProtocol,
82
+ retry: Retry.Retry,
83
+ }));
84
+ export const createAlias = /*@__PURE__*/ API.make(() => ({
85
+ input: CreateAliasRequest,
86
+ output: CreateAliasResponse,
87
+ errors: [],
88
+ protocol: OpenBaoProtocol,
89
+ retry: Retry.Retry,
90
+ }));
91
+ //# sourceMappingURL=alias.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alias.js","sourceRoot":"","sources":["../../src/services/alias.ts"],"names":[],"mappings":"AAAA,wIAAwI;AACxI,OAAO,KAAK,CAAC,MAAM,8BAA8B,CAAC;AAClD,OAAO,KAAK,GAAG,MAAM,2BAA2B,CAAC;AACjD,OAAO,KAAK,CAAC,MAAM,cAAc,CAAC;AAClC,OAAO,EACL,eAAe,GAGhB,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,KAAK,MAAM,aAAa,CAAC;AAQrC,MAAM,CAAC,MAAM,sBAAsB,GAAG,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CACjE,CAAC,CAAC,MAAM,CAAC;IACP,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;CAC7B,CAAC,CAAC,IAAI,CACL,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,yBAAyB,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CACxE,CACF,CAAC,QAAQ,CAAC;IACT,UAAU,EAAE,wBAAwB;CACrC,CAA4C,CAAC;AAG9C,MAAM,CAAC,MAAM,uBAAuB,GAAG,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAClE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CACb,CAAC,QAAQ,CAAC;IACT,UAAU,EAAE,yBAAyB;CACtC,CAA6C,CAAC;AAG/C,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;AAMjD,MAAM,CAAC,MAAM,oBAAoB,GAAG,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAC/D,CAAC,CAAC,MAAM,CAAC;IACP,IAAI,EAAE,wBAAwB,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;CAC/C,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,oBAAoB,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CACzE,CAAC,QAAQ,CAAC;IACT,UAAU,EAAE,sBAAsB;CACnC,CAA0C,CAAC;AAG5C,MAAM,CAAC,MAAM,qBAAqB,GAAG,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAChE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CACb,CAAC,QAAQ,CAAC;IACT,UAAU,EAAE,uBAAuB;CACpC,CAA2C,CAAC;AAM7C,MAAM,CAAC,MAAM,oBAAoB,GAAG,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAC/D,CAAC,CAAC,MAAM,CAAC;IACP,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;CAC7B,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,yBAAyB,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAC9E,CAAC,QAAQ,CAAC;IACT,UAAU,EAAE,sBAAsB;CACnC,CAA0C,CAAC;AAG5C,MAAM,CAAC,MAAM,qBAAqB,GAAG,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAChE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CACb,CAAC,QAAQ,CAAC;IACT,UAAU,EAAE,uBAAuB;CACpC,CAA2C,CAAC;AAc7C,MAAM,CAAC,MAAM,sBAAsB,GAAG,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CACjE,CAAC,CAAC,MAAM,CAAC;IACP,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;IAC5B,YAAY,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;IAClC,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;IAC/B,cAAc,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;IACpC,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;CAC3B,CAAC,CAAC,IAAI,CACL,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,yBAAyB,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CACtE,CACF,CAAC,QAAQ,CAAC;IACT,UAAU,EAAE,wBAAwB;CACrC,CAA4C,CAAC;AAG9C,MAAM,CAAC,MAAM,uBAAuB,GAAG,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAClE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CACb,CAAC,QAAQ,CAAC;IACT,UAAU,EAAE,yBAAyB;CACtC,CAA6C,CAAC;AAc/C,MAAM,CAAC,MAAM,kBAAkB,GAAG,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAC7D,CAAC,CAAC,MAAM,CAAC;IACP,YAAY,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;IAClC,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;IAC/B,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;IACxB,cAAc,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;IACpC,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;CAC3B,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,iBAAiB,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CACvE,CAAC,QAAQ,CAAC;IACT,UAAU,EAAE,oBAAoB;CACjC,CAAwC,CAAC;AAG1C,MAAM,CAAC,MAAM,mBAAmB,GAAG,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAC9D,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CACb,CAAC,QAAQ,CAAC;IACT,UAAU,EAAE,qBAAqB;CAClC,CAAyC,CAAC;AAG3C,MAAM,CAAC,MAAM,eAAe,GAKxB,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAChC,KAAK,EAAE,sBAAsB;IAC7B,MAAM,EAAE,uBAAuB;IAC/B,MAAM,EAAE,EAAE;IACV,QAAQ,EAAE,eAAe;IACzB,KAAK,EAAE,KAAK,CAAC,KAAK;CACnB,CAAC,CAAC,CAAC;AAGJ,MAAM,CAAC,MAAM,aAAa,GAKtB,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAChC,KAAK,EAAE,oBAAoB;IAC3B,MAAM,EAAE,qBAAqB;IAC7B,MAAM,EAAE,EAAE;IACV,QAAQ,EAAE,eAAe;IACzB,KAAK,EAAE,KAAK,CAAC,KAAK;CACnB,CAAC,CAAC,CAAC;AAGJ,MAAM,CAAC,MAAM,aAAa,GAKtB,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAChC,KAAK,EAAE,oBAAoB;IAC3B,MAAM,EAAE,qBAAqB;IAC7B,MAAM,EAAE,EAAE;IACV,QAAQ,EAAE,eAAe;IACzB,KAAK,EAAE,KAAK,CAAC,KAAK;CACnB,CAAC,CAAC,CAAC;AAGJ,MAAM,CAAC,MAAM,eAAe,GAKxB,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAChC,KAAK,EAAE,sBAAsB;IAC7B,MAAM,EAAE,uBAAuB;IAC/B,MAAM,EAAE,EAAE;IACV,QAAQ,EAAE,eAAe;IACzB,KAAK,EAAE,KAAK,CAAC,KAAK;CACnB,CAAC,CAAC,CAAC;AAGJ,MAAM,CAAC,MAAM,WAAW,GAKpB,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAChC,KAAK,EAAE,kBAAkB;IACzB,MAAM,EAAE,mBAAmB;IAC3B,MAAM,EAAE,EAAE;IACV,QAAQ,EAAE,eAAe;IACzB,KAAK,EAAE,KAAK,CAAC,KAAK;CACnB,CAAC,CAAC,CAAC"}