@homeflare/alchemy 0.43.0 → 0.45.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 (612) hide show
  1. package/README.md +10 -1
  2. package/dist/caddy/index.js +35 -1
  3. package/dist/caddy/index.js.map +3 -3
  4. package/dist/launchd/index.js +35 -1
  5. package/dist/launchd/index.js.map +3 -3
  6. package/dist/linux/index.js +35 -1
  7. package/dist/linux/index.js.map +3 -3
  8. package/dist/litellm/access-group-form.d.ts +26 -0
  9. package/dist/litellm/access-group-form.d.ts.map +1 -0
  10. package/dist/litellm/access-group-operations.d.ts +37 -0
  11. package/dist/litellm/access-group-operations.d.ts.map +1 -0
  12. package/dist/litellm/access-group-types.d.ts +49 -0
  13. package/dist/litellm/access-group-types.d.ts.map +1 -0
  14. package/dist/litellm/access-group.d.ts +55 -0
  15. package/dist/litellm/access-group.d.ts.map +1 -0
  16. package/dist/litellm/credential-errors.d.ts +131 -0
  17. package/dist/litellm/credential-errors.d.ts.map +1 -0
  18. package/dist/litellm/credential-form.d.ts +79 -0
  19. package/dist/litellm/credential-form.d.ts.map +1 -0
  20. package/dist/litellm/credential-operations.d.ts +84 -0
  21. package/dist/litellm/credential-operations.d.ts.map +1 -0
  22. package/dist/litellm/credential-rewrite.d.ts +6 -0
  23. package/dist/litellm/credential-rewrite.d.ts.map +1 -0
  24. package/dist/litellm/credential-types.d.ts +87 -0
  25. package/dist/litellm/credential-types.d.ts.map +1 -0
  26. package/dist/litellm/credential-values.d.ts +53 -0
  27. package/dist/litellm/credential-values.d.ts.map +1 -0
  28. package/dist/litellm/credential.d.ts +83 -0
  29. package/dist/litellm/credential.d.ts.map +1 -0
  30. package/dist/litellm/fake-access-group-litellm.d.ts +34 -0
  31. package/dist/litellm/fake-access-group-litellm.d.ts.map +1 -0
  32. package/dist/litellm/fake-credential-litellm.d.ts +54 -0
  33. package/dist/litellm/fake-credential-litellm.d.ts.map +1 -0
  34. package/dist/litellm/fake-keys.d.ts +53 -0
  35. package/dist/litellm/fake-keys.d.ts.map +1 -0
  36. package/dist/litellm/fake-litellm.d.ts +4 -1
  37. package/dist/litellm/fake-litellm.d.ts.map +1 -1
  38. package/dist/litellm/fake-mcp-litellm.d.ts +67 -0
  39. package/dist/litellm/fake-mcp-litellm.d.ts.map +1 -0
  40. package/dist/litellm/fake-model-litellm-post-update.d.ts +49 -0
  41. package/dist/litellm/fake-model-litellm-post-update.d.ts.map +1 -0
  42. package/dist/litellm/fake-model-litellm.d.ts +48 -0
  43. package/dist/litellm/fake-model-litellm.d.ts.map +1 -0
  44. package/dist/litellm/fake-policy-attachment-litellm.d.ts +33 -0
  45. package/dist/litellm/fake-policy-attachment-litellm.d.ts.map +1 -0
  46. package/dist/litellm/fake-policy-litellm.d.ts +32 -0
  47. package/dist/litellm/fake-policy-litellm.d.ts.map +1 -0
  48. package/dist/litellm/fake-registry-base.d.ts +42 -0
  49. package/dist/litellm/fake-registry-base.d.ts.map +1 -0
  50. package/dist/litellm/fake-stack.d.ts +8 -1
  51. package/dist/litellm/fake-stack.d.ts.map +1 -1
  52. package/dist/litellm/fake-team-litellm.d.ts +47 -0
  53. package/dist/litellm/fake-team-litellm.d.ts.map +1 -0
  54. package/dist/litellm/fake-tool-litellm.d.ts +28 -0
  55. package/dist/litellm/fake-tool-litellm.d.ts.map +1 -0
  56. package/dist/litellm/fake-toolset-litellm.d.ts +29 -0
  57. package/dist/litellm/fake-toolset-litellm.d.ts.map +1 -0
  58. package/dist/litellm/index.d.ts +18 -0
  59. package/dist/litellm/index.d.ts.map +1 -1
  60. package/dist/litellm/index.js +3078 -2
  61. package/dist/litellm/index.js.map +65 -4
  62. package/dist/litellm/key-errors.d.ts +169 -0
  63. package/dist/litellm/key-errors.d.ts.map +1 -0
  64. package/dist/litellm/key-form.d.ts +119 -0
  65. package/dist/litellm/key-form.d.ts.map +1 -0
  66. package/dist/litellm/key-harness.d.ts +41 -0
  67. package/dist/litellm/key-harness.d.ts.map +1 -0
  68. package/dist/litellm/key-metadata-errors.d.ts +30 -0
  69. package/dist/litellm/key-metadata-errors.d.ts.map +1 -0
  70. package/dist/litellm/key-metadata.d.ts +22 -0
  71. package/dist/litellm/key-metadata.d.ts.map +1 -0
  72. package/dist/litellm/key-operations.d.ts +63 -0
  73. package/dist/litellm/key-operations.d.ts.map +1 -0
  74. package/dist/litellm/key-secret.d.ts +33 -0
  75. package/dist/litellm/key-secret.d.ts.map +1 -0
  76. package/dist/litellm/key.d.ts +78 -0
  77. package/dist/litellm/key.d.ts.map +1 -0
  78. package/dist/litellm/mcp-server-credential.d.ts +50 -0
  79. package/dist/litellm/mcp-server-credential.d.ts.map +1 -0
  80. package/dist/litellm/mcp-server-errors.d.ts +101 -0
  81. package/dist/litellm/mcp-server-errors.d.ts.map +1 -0
  82. package/dist/litellm/mcp-server-form.d.ts +56 -0
  83. package/dist/litellm/mcp-server-form.d.ts.map +1 -0
  84. package/dist/litellm/mcp-server-locate.d.ts +26 -0
  85. package/dist/litellm/mcp-server-locate.d.ts.map +1 -0
  86. package/dist/litellm/mcp-server-operations.d.ts +63 -0
  87. package/dist/litellm/mcp-server-operations.d.ts.map +1 -0
  88. package/dist/litellm/mcp-server-shadow.d.ts +24 -0
  89. package/dist/litellm/mcp-server-shadow.d.ts.map +1 -0
  90. package/dist/litellm/mcp-server-types.d.ts +118 -0
  91. package/dist/litellm/mcp-server-types.d.ts.map +1 -0
  92. package/dist/litellm/mcp-server-url.d.ts +11 -0
  93. package/dist/litellm/mcp-server-url.d.ts.map +1 -0
  94. package/dist/litellm/mcp-server.d.ts +95 -0
  95. package/dist/litellm/mcp-server.d.ts.map +1 -0
  96. package/dist/litellm/model-claim.d.ts +24 -0
  97. package/dist/litellm/model-claim.d.ts.map +1 -0
  98. package/dist/litellm/model-credential.d.ts +12 -0
  99. package/dist/litellm/model-credential.d.ts.map +1 -0
  100. package/dist/litellm/model-errors.d.ts +119 -0
  101. package/dist/litellm/model-errors.d.ts.map +1 -0
  102. package/dist/litellm/model-form.d.ts +78 -0
  103. package/dist/litellm/model-form.d.ts.map +1 -0
  104. package/dist/litellm/model-locate.d.ts +13 -0
  105. package/dist/litellm/model-locate.d.ts.map +1 -0
  106. package/dist/litellm/model-operations.d.ts +59 -0
  107. package/dist/litellm/model-operations.d.ts.map +1 -0
  108. package/dist/litellm/model-types.d.ts +91 -0
  109. package/dist/litellm/model-types.d.ts.map +1 -0
  110. package/dist/litellm/model.d.ts +88 -0
  111. package/dist/litellm/model.d.ts.map +1 -0
  112. package/dist/litellm/policy-attachment-form.d.ts +19 -0
  113. package/dist/litellm/policy-attachment-form.d.ts.map +1 -0
  114. package/dist/litellm/policy-attachment-operations.d.ts +31 -0
  115. package/dist/litellm/policy-attachment-operations.d.ts.map +1 -0
  116. package/dist/litellm/policy-attachment-types.d.ts +48 -0
  117. package/dist/litellm/policy-attachment-types.d.ts.map +1 -0
  118. package/dist/litellm/policy-attachment.d.ts +61 -0
  119. package/dist/litellm/policy-attachment.d.ts.map +1 -0
  120. package/dist/litellm/policy-form.d.ts +22 -0
  121. package/dist/litellm/policy-form.d.ts.map +1 -0
  122. package/dist/litellm/policy-operations.d.ts +42 -0
  123. package/dist/litellm/policy-operations.d.ts.map +1 -0
  124. package/dist/litellm/policy-types.d.ts +57 -0
  125. package/dist/litellm/policy-types.d.ts.map +1 -0
  126. package/dist/litellm/policy.d.ts +65 -0
  127. package/dist/litellm/policy.d.ts.map +1 -0
  128. package/dist/litellm/providers.d.ts +1 -1
  129. package/dist/litellm/providers.d.ts.map +1 -1
  130. package/dist/litellm/registry-errors.d.ts +62 -0
  131. package/dist/litellm/registry-errors.d.ts.map +1 -0
  132. package/dist/litellm/registry-support.d.ts +42 -0
  133. package/dist/litellm/registry-support.d.ts.map +1 -0
  134. package/dist/litellm/team-form.d.ts +26 -0
  135. package/dist/litellm/team-form.d.ts.map +1 -0
  136. package/dist/litellm/team-members.d.ts +10 -0
  137. package/dist/litellm/team-members.d.ts.map +1 -0
  138. package/dist/litellm/team-operations.d.ts +38 -0
  139. package/dist/litellm/team-operations.d.ts.map +1 -0
  140. package/dist/litellm/team-permission.d.ts +35 -0
  141. package/dist/litellm/team-permission.d.ts.map +1 -0
  142. package/dist/litellm/team-types.d.ts +101 -0
  143. package/dist/litellm/team-types.d.ts.map +1 -0
  144. package/dist/litellm/team.d.ts +67 -0
  145. package/dist/litellm/team.d.ts.map +1 -0
  146. package/dist/litellm/tool-policy-form.d.ts +21 -0
  147. package/dist/litellm/tool-policy-form.d.ts.map +1 -0
  148. package/dist/litellm/tool-policy-operations.d.ts +30 -0
  149. package/dist/litellm/tool-policy-operations.d.ts.map +1 -0
  150. package/dist/litellm/tool-policy-types.d.ts +46 -0
  151. package/dist/litellm/tool-policy-types.d.ts.map +1 -0
  152. package/dist/litellm/tool-policy.d.ts +62 -0
  153. package/dist/litellm/tool-policy.d.ts.map +1 -0
  154. package/dist/litellm/toolset-form.d.ts +20 -0
  155. package/dist/litellm/toolset-form.d.ts.map +1 -0
  156. package/dist/litellm/toolset-operations.d.ts +39 -0
  157. package/dist/litellm/toolset-operations.d.ts.map +1 -0
  158. package/dist/litellm/toolset-types.d.ts +46 -0
  159. package/dist/litellm/toolset-types.d.ts.map +1 -0
  160. package/dist/litellm/toolset.d.ts +55 -0
  161. package/dist/litellm/toolset.d.ts.map +1 -0
  162. package/dist/openbao/index.js +35 -1
  163. package/dist/openbao/index.js.map +3 -3
  164. package/dist/ownership/rows.d.ts +11 -0
  165. package/dist/ownership/rows.d.ts.map +1 -1
  166. package/dist/postgres/connection.d.ts +14 -2
  167. package/dist/postgres/connection.d.ts.map +1 -1
  168. package/dist/postgres/database-sql.d.ts +27 -8
  169. package/dist/postgres/database-sql.d.ts.map +1 -1
  170. package/dist/postgres/fake-grants-parse.d.ts +37 -0
  171. package/dist/postgres/fake-grants-parse.d.ts.map +1 -0
  172. package/dist/postgres/fake-grants-read.d.ts +61 -0
  173. package/dist/postgres/fake-grants-read.d.ts.map +1 -0
  174. package/dist/postgres/fake-grants-sql.d.ts +46 -0
  175. package/dist/postgres/fake-grants-sql.d.ts.map +1 -0
  176. package/dist/postgres/fake-grants-write.d.ts +29 -0
  177. package/dist/postgres/fake-grants-write.d.ts.map +1 -0
  178. package/dist/postgres/fake-role-sql.d.ts +41 -0
  179. package/dist/postgres/fake-role-sql.d.ts.map +1 -0
  180. package/dist/postgres/fake-schema-sql.d.ts +42 -0
  181. package/dist/postgres/fake-schema-sql.d.ts.map +1 -0
  182. package/dist/postgres/fake-sql-parse.d.ts +23 -0
  183. package/dist/postgres/fake-sql-parse.d.ts.map +1 -0
  184. package/dist/postgres/fake-sql-quote.d.ts +12 -0
  185. package/dist/postgres/fake-sql-quote.d.ts.map +1 -0
  186. package/dist/postgres/fake-sql.d.ts +42 -0
  187. package/dist/postgres/fake-sql.d.ts.map +1 -1
  188. package/dist/postgres/grants-attrs.d.ts +115 -0
  189. package/dist/postgres/grants-attrs.d.ts.map +1 -0
  190. package/dist/postgres/grants-declare.d.ts +88 -0
  191. package/dist/postgres/grants-declare.d.ts.map +1 -0
  192. package/dist/postgres/grants-diff.d.ts +25 -0
  193. package/dist/postgres/grants-diff.d.ts.map +1 -0
  194. package/dist/postgres/grants-errors.d.ts +137 -0
  195. package/dist/postgres/grants-errors.d.ts.map +1 -0
  196. package/dist/postgres/grants-existence.d.ts +14 -0
  197. package/dist/postgres/grants-existence.d.ts.map +1 -0
  198. package/dist/postgres/grants-ops.d.ts +65 -0
  199. package/dist/postgres/grants-ops.d.ts.map +1 -0
  200. package/dist/postgres/grants-ownership.d.ts +18 -0
  201. package/dist/postgres/grants-ownership.d.ts.map +1 -0
  202. package/dist/postgres/grants-plan-restore.d.ts +22 -0
  203. package/dist/postgres/grants-plan-restore.d.ts.map +1 -0
  204. package/dist/postgres/grants-plan.d.ts +65 -0
  205. package/dist/postgres/grants-plan.d.ts.map +1 -0
  206. package/dist/postgres/grants-read-defaults.d.ts +17 -0
  207. package/dist/postgres/grants-read-defaults.d.ts.map +1 -0
  208. package/dist/postgres/grants-read.d.ts +77 -0
  209. package/dist/postgres/grants-read.d.ts.map +1 -0
  210. package/dist/postgres/grants-refuse.d.ts +25 -0
  211. package/dist/postgres/grants-refuse.d.ts.map +1 -0
  212. package/dist/postgres/grants-sql.d.ts +42 -0
  213. package/dist/postgres/grants-sql.d.ts.map +1 -0
  214. package/dist/postgres/grants-words.d.ts +29 -0
  215. package/dist/postgres/grants-words.d.ts.map +1 -0
  216. package/dist/postgres/grants.d.ts +37 -0
  217. package/dist/postgres/grants.d.ts.map +1 -0
  218. package/dist/postgres/index.d.ts +31 -6
  219. package/dist/postgres/index.d.ts.map +1 -1
  220. package/dist/postgres/index.js +1998 -37
  221. package/dist/postgres/index.js.map +46 -7
  222. package/dist/postgres/installed-classifier.d.ts +13 -0
  223. package/dist/postgres/installed-classifier.d.ts.map +1 -0
  224. package/dist/postgres/providers.d.ts +16 -8
  225. package/dist/postgres/providers.d.ts.map +1 -1
  226. package/dist/postgres/psql-executor.d.ts +4 -0
  227. package/dist/postgres/psql-executor.d.ts.map +1 -1
  228. package/dist/postgres/role-attrs.d.ts +112 -0
  229. package/dist/postgres/role-attrs.d.ts.map +1 -0
  230. package/dist/postgres/role-diff.d.ts +22 -0
  231. package/dist/postgres/role-diff.d.ts.map +1 -0
  232. package/dist/postgres/role-errors.d.ts +132 -0
  233. package/dist/postgres/role-errors.d.ts.map +1 -0
  234. package/dist/postgres/role-membership-sql.d.ts +78 -0
  235. package/dist/postgres/role-membership-sql.d.ts.map +1 -0
  236. package/dist/postgres/role-provider.d.ts +11 -0
  237. package/dist/postgres/role-provider.d.ts.map +1 -0
  238. package/dist/postgres/role-scram.d.ts +8 -0
  239. package/dist/postgres/role-scram.d.ts.map +1 -0
  240. package/dist/postgres/role-secrets.d.ts +38 -0
  241. package/dist/postgres/role-secrets.d.ts.map +1 -0
  242. package/dist/postgres/role-sql.d.ts +68 -0
  243. package/dist/postgres/role-sql.d.ts.map +1 -0
  244. package/dist/postgres/role.d.ts +57 -0
  245. package/dist/postgres/role.d.ts.map +1 -0
  246. package/dist/postgres/schema-assert.d.ts +50 -0
  247. package/dist/postgres/schema-assert.d.ts.map +1 -0
  248. package/dist/postgres/schema-attrs.d.ts +51 -0
  249. package/dist/postgres/schema-attrs.d.ts.map +1 -0
  250. package/dist/postgres/schema-delete.d.ts +28 -0
  251. package/dist/postgres/schema-delete.d.ts.map +1 -0
  252. package/dist/postgres/schema-diff.d.ts +14 -0
  253. package/dist/postgres/schema-diff.d.ts.map +1 -0
  254. package/dist/postgres/schema-errors.d.ts +139 -0
  255. package/dist/postgres/schema-errors.d.ts.map +1 -0
  256. package/dist/postgres/schema-identity.d.ts +8 -0
  257. package/dist/postgres/schema-identity.d.ts.map +1 -0
  258. package/dist/postgres/schema-reconcile.d.ts +12 -0
  259. package/dist/postgres/schema-reconcile.d.ts.map +1 -0
  260. package/dist/postgres/schema-sql.d.ts +45 -0
  261. package/dist/postgres/schema-sql.d.ts.map +1 -0
  262. package/dist/postgres/schema-test-kit.d.ts +67 -0
  263. package/dist/postgres/schema-test-kit.d.ts.map +1 -0
  264. package/dist/postgres/schema.d.ts +54 -0
  265. package/dist/postgres/schema.d.ts.map +1 -0
  266. package/dist/proxmox/index.js +35 -1
  267. package/dist/proxmox/index.js.map +3 -3
  268. package/dist/release/fake-engine.d.ts +10 -0
  269. package/dist/release/fake-engine.d.ts.map +1 -1
  270. package/dist/release/index.js +35 -1
  271. package/dist/release/index.js.map +3 -3
  272. package/dist/valkey/acl-attrs.d.ts +94 -0
  273. package/dist/valkey/acl-attrs.d.ts.map +1 -0
  274. package/dist/valkey/acl-compare.d.ts +28 -0
  275. package/dist/valkey/acl-compare.d.ts.map +1 -0
  276. package/dist/valkey/acl-connection.d.ts +6 -0
  277. package/dist/valkey/acl-connection.d.ts.map +1 -0
  278. package/dist/valkey/acl-form.d.ts +62 -0
  279. package/dist/valkey/acl-form.d.ts.map +1 -0
  280. package/dist/valkey/acl-managed.d.ts +4 -0
  281. package/dist/valkey/acl-managed.d.ts.map +1 -0
  282. package/dist/valkey/acl-ops.d.ts +37 -0
  283. package/dist/valkey/acl-ops.d.ts.map +1 -0
  284. package/dist/valkey/acl-profiles.d.ts +53 -0
  285. package/dist/valkey/acl-profiles.d.ts.map +1 -0
  286. package/dist/valkey/acl-reconcile.d.ts +26 -0
  287. package/dist/valkey/acl-reconcile.d.ts.map +1 -0
  288. package/dist/valkey/acl.d.ts +24 -0
  289. package/dist/valkey/acl.d.ts.map +1 -0
  290. package/dist/valkey/connection-service.d.ts +22 -0
  291. package/dist/valkey/connection-service.d.ts.map +1 -0
  292. package/dist/valkey/connection.d.ts +59 -0
  293. package/dist/valkey/connection.d.ts.map +1 -0
  294. package/dist/valkey/errors.d.ts +165 -0
  295. package/dist/valkey/errors.d.ts.map +1 -0
  296. package/dist/valkey/fake-acl.d.ts +29 -0
  297. package/dist/valkey/fake-acl.d.ts.map +1 -0
  298. package/dist/valkey/fake-valkey.d.ts +35 -0
  299. package/dist/valkey/fake-valkey.d.ts.map +1 -0
  300. package/dist/valkey/handler-test-fixture.d.ts +20 -0
  301. package/dist/valkey/handler-test-fixture.d.ts.map +1 -0
  302. package/dist/valkey/index.d.ts +18 -0
  303. package/dist/valkey/index.d.ts.map +1 -0
  304. package/dist/valkey/index.js +964 -0
  305. package/dist/valkey/index.js.map +27 -0
  306. package/dist/valkey/instance-attrs.d.ts +46 -0
  307. package/dist/valkey/instance-attrs.d.ts.map +1 -0
  308. package/dist/valkey/instance-form.d.ts +22 -0
  309. package/dist/valkey/instance-form.d.ts.map +1 -0
  310. package/dist/valkey/instance.d.ts +48 -0
  311. package/dist/valkey/instance.d.ts.map +1 -0
  312. package/dist/valkey/provider-socket-fixture.d.ts +8 -0
  313. package/dist/valkey/provider-socket-fixture.d.ts.map +1 -0
  314. package/dist/valkey/providers.d.ts +16 -0
  315. package/dist/valkey/providers.d.ts.map +1 -0
  316. package/dist/valkey/resp.d.ts +38 -0
  317. package/dist/valkey/resp.d.ts.map +1 -0
  318. package/dist/valkey/transport-error.d.ts +36 -0
  319. package/dist/valkey/transport-error.d.ts.map +1 -0
  320. package/dist/valkey/transport.d.ts +50 -0
  321. package/dist/valkey/transport.d.ts.map +1 -0
  322. package/docs/litellm-access-group.md +105 -0
  323. package/docs/litellm-credential.md +60 -0
  324. package/docs/litellm-key-metadata.md +56 -0
  325. package/docs/litellm-key.md +194 -0
  326. package/docs/litellm-mcp.md +187 -0
  327. package/docs/litellm-model.md +111 -0
  328. package/docs/litellm-policy-attachment.md +86 -0
  329. package/docs/litellm-policy.md +103 -0
  330. package/docs/litellm-team.md +117 -0
  331. package/docs/litellm-tool-policy.md +90 -0
  332. package/docs/litellm-toolset.md +92 -0
  333. package/docs/litellm.md +16 -9
  334. package/docs/peers.md +15 -6
  335. package/docs/postgres-grants-example.md +55 -0
  336. package/docs/postgres-grants.md +157 -0
  337. package/docs/postgres-role.md +126 -0
  338. package/docs/postgres-schema.md +139 -0
  339. package/docs/postgres.md +20 -3
  340. package/docs/valkey-transport.md +29 -0
  341. package/docs/valkey.md +187 -0
  342. package/package.json +6 -2
  343. package/src/ceph/ceph-argv.test.ts +1 -1
  344. package/src/launchd/sudo-allowlist.test.ts +2 -2
  345. package/src/linux/sudo-allowlist.test.ts +3 -3
  346. package/src/linux/sudo-runner.test.ts +2 -2
  347. package/src/litellm/access-group-form.ts +105 -0
  348. package/src/litellm/access-group-operations.ts +92 -0
  349. package/src/litellm/access-group-types.ts +49 -0
  350. package/src/litellm/access-group.test.ts +197 -0
  351. package/src/litellm/access-group.ts +151 -0
  352. package/src/litellm/credential-errors.ts +183 -0
  353. package/src/litellm/credential-form.test.ts +151 -0
  354. package/src/litellm/credential-form.ts +211 -0
  355. package/src/litellm/credential-guards.test.ts +241 -0
  356. package/src/litellm/credential-operations.ts +208 -0
  357. package/src/litellm/credential-recovery.test.ts +93 -0
  358. package/src/litellm/credential-rewrite.test.ts +164 -0
  359. package/src/litellm/credential-rewrite.ts +50 -0
  360. package/src/litellm/credential-types.ts +117 -0
  361. package/src/litellm/credential-values.ts +94 -0
  362. package/src/litellm/credential.test.ts +218 -0
  363. package/src/litellm/credential.ts +227 -0
  364. package/src/litellm/fake-access-group-litellm.ts +127 -0
  365. package/src/litellm/fake-credential-litellm.ts +216 -0
  366. package/src/litellm/fake-keys.ts +190 -0
  367. package/src/litellm/fake-litellm.ts +19 -9
  368. package/src/litellm/fake-mcp-litellm.ts +214 -0
  369. package/src/litellm/fake-model-litellm-post-update.ts +103 -0
  370. package/src/litellm/fake-model-litellm.ts +233 -0
  371. package/src/litellm/fake-policy-attachment-litellm.ts +97 -0
  372. package/src/litellm/fake-policy-litellm.ts +186 -0
  373. package/src/litellm/fake-registry-base.ts +69 -0
  374. package/src/litellm/fake-stack.ts +17 -1
  375. package/src/litellm/fake-team-litellm.ts +229 -0
  376. package/src/litellm/fake-tool-litellm.ts +88 -0
  377. package/src/litellm/fake-toolset-litellm.ts +110 -0
  378. package/src/litellm/index.ts +140 -0
  379. package/src/litellm/key-delete.test.ts +212 -0
  380. package/src/litellm/key-errors.ts +241 -0
  381. package/src/litellm/key-form.ts +200 -0
  382. package/src/litellm/key-harness.ts +121 -0
  383. package/src/litellm/key-metadata-errors.ts +49 -0
  384. package/src/litellm/key-metadata.test.ts +156 -0
  385. package/src/litellm/key-metadata.ts +74 -0
  386. package/src/litellm/key-operations.ts +184 -0
  387. package/src/litellm/key-rotation.test.ts +110 -0
  388. package/src/litellm/key-scope.test.ts +135 -0
  389. package/src/litellm/key-secret.test.ts +248 -0
  390. package/src/litellm/key-secret.ts +137 -0
  391. package/src/litellm/key-transport.test.ts +166 -0
  392. package/src/litellm/key.test.ts +231 -0
  393. package/src/litellm/key.ts +213 -0
  394. package/src/litellm/mcp-server-adopt.test.ts +86 -0
  395. package/src/litellm/mcp-server-alias.test.ts +184 -0
  396. package/src/litellm/mcp-server-credential.ts +85 -0
  397. package/src/litellm/mcp-server-errors.ts +141 -0
  398. package/src/litellm/mcp-server-exports.test.ts +15 -0
  399. package/src/litellm/mcp-server-form.test.ts +241 -0
  400. package/src/litellm/mcp-server-form.ts +233 -0
  401. package/src/litellm/mcp-server-handlers.test.ts +150 -0
  402. package/src/litellm/mcp-server-locate.ts +66 -0
  403. package/src/litellm/mcp-server-operations.ts +111 -0
  404. package/src/litellm/mcp-server-registry.test.ts +146 -0
  405. package/src/litellm/mcp-server-retype.test.ts +114 -0
  406. package/src/litellm/mcp-server-shadow.test.ts +91 -0
  407. package/src/litellm/mcp-server-shadow.ts +45 -0
  408. package/src/litellm/mcp-server-tools.test.ts +85 -0
  409. package/src/litellm/mcp-server-types.ts +143 -0
  410. package/src/litellm/mcp-server-url.ts +66 -0
  411. package/src/litellm/mcp-server.test.ts +213 -0
  412. package/src/litellm/mcp-server.ts +225 -0
  413. package/src/litellm/model-claim.ts +69 -0
  414. package/src/litellm/model-credential.ts +45 -0
  415. package/src/litellm/model-errors.ts +168 -0
  416. package/src/litellm/model-foreign-row.test.ts +173 -0
  417. package/src/litellm/model-form.test.ts +228 -0
  418. package/src/litellm/model-form.ts +223 -0
  419. package/src/litellm/model-locate.test.ts +128 -0
  420. package/src/litellm/model-locate.ts +67 -0
  421. package/src/litellm/model-operations.test.ts +93 -0
  422. package/src/litellm/model-operations.ts +146 -0
  423. package/src/litellm/model-params-preserve.test.ts +119 -0
  424. package/src/litellm/model-recovery.test.ts +57 -0
  425. package/src/litellm/model-types.ts +112 -0
  426. package/src/litellm/model.test.ts +222 -0
  427. package/src/litellm/model.ts +237 -0
  428. package/src/litellm/policy-attachment-form.ts +103 -0
  429. package/src/litellm/policy-attachment-operations.ts +74 -0
  430. package/src/litellm/policy-attachment-types.ts +48 -0
  431. package/src/litellm/policy-attachment.test.ts +198 -0
  432. package/src/litellm/policy-attachment.ts +178 -0
  433. package/src/litellm/policy-form.ts +122 -0
  434. package/src/litellm/policy-operations.ts +112 -0
  435. package/src/litellm/policy-types.ts +58 -0
  436. package/src/litellm/policy.test.ts +214 -0
  437. package/src/litellm/policy.ts +146 -0
  438. package/src/litellm/providers.ts +24 -3
  439. package/src/litellm/registry-errors.ts +88 -0
  440. package/src/litellm/registry-exports.test.ts +66 -0
  441. package/src/litellm/registry-support.ts +109 -0
  442. package/src/litellm/team-form.ts +140 -0
  443. package/src/litellm/team-members.test.ts +150 -0
  444. package/src/litellm/team-members.ts +58 -0
  445. package/src/litellm/team-operations.ts +90 -0
  446. package/src/litellm/team-permission.ts +159 -0
  447. package/src/litellm/team-read.test.ts +89 -0
  448. package/src/litellm/team-types.ts +106 -0
  449. package/src/litellm/team.test.ts +206 -0
  450. package/src/litellm/team.ts +159 -0
  451. package/src/litellm/tool-policy-form.ts +94 -0
  452. package/src/litellm/tool-policy-operations.ts +58 -0
  453. package/src/litellm/tool-policy-types.ts +48 -0
  454. package/src/litellm/tool-policy.test.ts +172 -0
  455. package/src/litellm/tool-policy.ts +125 -0
  456. package/src/litellm/toolset-form.ts +104 -0
  457. package/src/litellm/toolset-operations.ts +90 -0
  458. package/src/litellm/toolset-types.ts +47 -0
  459. package/src/litellm/toolset.test.ts +198 -0
  460. package/src/litellm/toolset.ts +151 -0
  461. package/src/ownership/ownership.test.ts +33 -1
  462. package/src/ownership/rows.ts +53 -0
  463. package/src/postgres/connection.ts +42 -7
  464. package/src/postgres/database-bigint-serialization.test.ts +1 -0
  465. package/src/postgres/database-refusals.test.ts +2 -2
  466. package/src/postgres/database-sql.ts +36 -9
  467. package/src/postgres/fake-grants-parse.ts +189 -0
  468. package/src/postgres/fake-grants-read.ts +250 -0
  469. package/src/postgres/fake-grants-sql.ts +207 -0
  470. package/src/postgres/fake-grants-write.ts +90 -0
  471. package/src/postgres/fake-role-sql.ts +240 -0
  472. package/src/postgres/fake-schema-semantics.test.ts +36 -0
  473. package/src/postgres/fake-schema-sql.ts +146 -0
  474. package/src/postgres/fake-sql-parse.ts +86 -0
  475. package/src/postgres/fake-sql-quote.ts +36 -0
  476. package/src/postgres/fake-sql.ts +166 -46
  477. package/src/postgres/fixtures/pg-REL_18_6-acl.h.txt +147 -0
  478. package/src/postgres/fixtures/pg-REL_18_6-aclexplode-func.txt +31 -0
  479. package/src/postgres/fixtures/pg-REL_18_6-alter-default-privileges-synopsis.txt +82 -0
  480. package/src/postgres/fixtures/pg-REL_18_6-alter_role.sgml.txt +44 -0
  481. package/src/postgres/fixtures/pg-REL_18_6-create_role.sgml.txt +26 -0
  482. package/src/postgres/fixtures/pg-REL_18_6-grant-synopsis.txt +95 -0
  483. package/src/postgres/fixtures/pg-REL_18_6-pg_attribute.h.txt +24 -0
  484. package/src/postgres/fixtures/pg-REL_18_6-pg_auth_members.h.txt +62 -0
  485. package/src/postgres/fixtures/pg-REL_18_6-pg_authid.h.txt +70 -0
  486. package/src/postgres/fixtures/pg-REL_18_6-pg_class.h.txt +33 -0
  487. package/src/postgres/fixtures/pg-REL_18_6-pg_default_acl.h.txt +81 -0
  488. package/src/postgres/fixtures/pg-REL_18_6-pg_namespace.h.txt +28 -0
  489. package/src/postgres/fixtures/pg-REL_18_6-revoke-synopsis.txt +124 -0
  490. package/src/postgres/grants-acl.test.ts +61 -0
  491. package/src/postgres/grants-attrs.ts +185 -0
  492. package/src/postgres/grants-database.test.ts +158 -0
  493. package/src/postgres/grants-declare.ts +172 -0
  494. package/src/postgres/grants-delete-proof.test.ts +154 -0
  495. package/src/postgres/grants-diff.ts +101 -0
  496. package/src/postgres/grants-errors.ts +215 -0
  497. package/src/postgres/grants-existence-guards.test.ts +113 -0
  498. package/src/postgres/grants-existence.ts +101 -0
  499. package/src/postgres/grants-lifecycle-guards.test.ts +208 -0
  500. package/src/postgres/grants-lifecycle-repair.test.ts +208 -0
  501. package/src/postgres/grants-lifecycle.test.ts +181 -0
  502. package/src/postgres/grants-ops.ts +229 -0
  503. package/src/postgres/grants-owner-revoke.test.ts +121 -0
  504. package/src/postgres/grants-ownership.ts +49 -0
  505. package/src/postgres/grants-plan-collateral.test.ts +202 -0
  506. package/src/postgres/grants-plan-diff.test.ts +204 -0
  507. package/src/postgres/grants-plan-restore.ts +43 -0
  508. package/src/postgres/grants-plan-revocations.test.ts +69 -0
  509. package/src/postgres/grants-plan.test.ts +148 -0
  510. package/src/postgres/grants-plan.ts +245 -0
  511. package/src/postgres/grants-provenance.test.ts +134 -0
  512. package/src/postgres/grants-psql-lifecycle.test.ts +105 -0
  513. package/src/postgres/grants-read-absent.test.ts +91 -0
  514. package/src/postgres/grants-read-defaults.ts +51 -0
  515. package/src/postgres/grants-read.ts +250 -0
  516. package/src/postgres/grants-refusals.test.ts +136 -0
  517. package/src/postgres/grants-refuse.ts +119 -0
  518. package/src/postgres/grants-relkind-wire.test.ts +111 -0
  519. package/src/postgres/grants-repair-plan.test.ts +201 -0
  520. package/src/postgres/grants-sql.test.ts +128 -0
  521. package/src/postgres/grants-sql.ts +144 -0
  522. package/src/postgres/grants-words.ts +34 -0
  523. package/src/postgres/grants.ts +110 -0
  524. package/src/postgres/index.ts +129 -5
  525. package/src/postgres/installed-classifier.ts +36 -0
  526. package/src/postgres/providers.ts +33 -9
  527. package/src/postgres/psql-executor-escaping.test.ts +67 -0
  528. package/src/postgres/psql-executor.test.ts +63 -2
  529. package/src/postgres/psql-executor.ts +74 -34
  530. package/src/postgres/role-adopt.test.ts +98 -0
  531. package/src/postgres/role-attrs.ts +137 -0
  532. package/src/postgres/role-diff.ts +93 -0
  533. package/src/postgres/role-errors.ts +206 -0
  534. package/src/postgres/role-guard.test.ts +60 -0
  535. package/src/postgres/role-identity.test.ts +197 -0
  536. package/src/postgres/role-lifecycle.test.ts +228 -0
  537. package/src/postgres/role-membership-options.test.ts +73 -0
  538. package/src/postgres/role-membership-repair.test.ts +153 -0
  539. package/src/postgres/role-membership-sql.ts +223 -0
  540. package/src/postgres/role-password-ascii.test.ts +53 -0
  541. package/src/postgres/role-password-transports.test.ts +123 -0
  542. package/src/postgres/role-password.test.ts +158 -0
  543. package/src/postgres/role-privilege.test.ts +107 -0
  544. package/src/postgres/role-provenance.test.ts +200 -0
  545. package/src/postgres/role-provider.ts +105 -0
  546. package/src/postgres/role-refusals.test.ts +225 -0
  547. package/src/postgres/role-scram.test.ts +38 -0
  548. package/src/postgres/role-scram.ts +40 -0
  549. package/src/postgres/role-secrets.ts +61 -0
  550. package/src/postgres/role-sql.ts +213 -0
  551. package/src/postgres/role-valid-until.test.ts +68 -0
  552. package/src/postgres/role.ts +226 -0
  553. package/src/postgres/schema-assert.ts +139 -0
  554. package/src/postgres/schema-attrs.ts +71 -0
  555. package/src/postgres/schema-delete-proofs.test.ts +192 -0
  556. package/src/postgres/schema-delete.ts +96 -0
  557. package/src/postgres/schema-diff.ts +44 -0
  558. package/src/postgres/schema-drop-2bp01.test.ts +146 -0
  559. package/src/postgres/schema-errors.ts +209 -0
  560. package/src/postgres/schema-handlers.test.ts +193 -0
  561. package/src/postgres/schema-identity.ts +39 -0
  562. package/src/postgres/schema-lifecycle.test.ts +246 -0
  563. package/src/postgres/schema-race.test.ts +70 -0
  564. package/src/postgres/schema-reconcile.ts +100 -0
  565. package/src/postgres/schema-refusals.test.ts +144 -0
  566. package/src/postgres/schema-socket.test.ts +162 -0
  567. package/src/postgres/schema-sql.ts +130 -0
  568. package/src/postgres/schema-takeover.test.ts +149 -0
  569. package/src/postgres/schema-test-kit.ts +85 -0
  570. package/src/postgres/schema.ts +130 -0
  571. package/src/release/binary-alias.test.ts +3 -3
  572. package/src/release/binary-claims.test.ts +3 -3
  573. package/src/release/binary-directory-umask.test.ts +65 -0
  574. package/src/release/fake-engine.ts +15 -0
  575. package/src/valkey/acl-attrs.ts +98 -0
  576. package/src/valkey/acl-compare.ts +57 -0
  577. package/src/valkey/acl-connection.ts +13 -0
  578. package/src/valkey/acl-delete.test.ts +127 -0
  579. package/src/valkey/acl-form.ts +239 -0
  580. package/src/valkey/acl-managed.ts +13 -0
  581. package/src/valkey/acl-ops.ts +122 -0
  582. package/src/valkey/acl-ownership.test.ts +118 -0
  583. package/src/valkey/acl-prefix.test.ts +38 -0
  584. package/src/valkey/acl-profiles.ts +81 -0
  585. package/src/valkey/acl-reconcile.ts +180 -0
  586. package/src/valkey/acl-reserved.test.ts +69 -0
  587. package/src/valkey/acl-revocation.test.ts +94 -0
  588. package/src/valkey/acl-seat-prefix.test.ts +111 -0
  589. package/src/valkey/acl-validation.test.ts +54 -0
  590. package/src/valkey/acl.test.ts +215 -0
  591. package/src/valkey/acl.ts +169 -0
  592. package/src/valkey/connection-service.ts +46 -0
  593. package/src/valkey/connection.ts +180 -0
  594. package/src/valkey/errors.ts +239 -0
  595. package/src/valkey/fake-acl.ts +128 -0
  596. package/src/valkey/fake-valkey.ts +224 -0
  597. package/src/valkey/handler-test-fixture.ts +43 -0
  598. package/src/valkey/handlers.test.ts +205 -0
  599. package/src/valkey/index.ts +54 -0
  600. package/src/valkey/instance-attrs.ts +48 -0
  601. package/src/valkey/instance-form.ts +104 -0
  602. package/src/valkey/instance.test.ts +108 -0
  603. package/src/valkey/instance.ts +160 -0
  604. package/src/valkey/provider-socket-fixture.ts +71 -0
  605. package/src/valkey/providers.test.ts +129 -0
  606. package/src/valkey/providers.ts +21 -0
  607. package/src/valkey/resp.ts +212 -0
  608. package/src/valkey/transport-bounds.test.ts +150 -0
  609. package/src/valkey/transport-error.ts +37 -0
  610. package/src/valkey/transport.test.ts +158 -0
  611. package/src/valkey/transport.ts +109 -0
  612. package/src/valkey/upstream-bounds.test.ts +14 -0
@@ -0,0 +1,169 @@
1
+ /**
2
+ * The typed refusals `LiteLLM.Key` raises on top of `@distilled.cloud/litellm`'s own SDK errors.
3
+ *
4
+ * ⛔ NOT ONE OF THESE CARRIES A KEY VALUE. They name the alias, the environment VARIABLE and the
5
+ * rule broken, never what the variable held: an error is logged, retried and pasted into a PR.
6
+ * The SDK's own errors are the other half: `generateKey` (key-operations.ts) turns the one that
7
+ * holds the request, and so the value, into `LitellmKeyTransportError` below.
8
+ */
9
+ import type * as keys from '@distilled.cloud/litellm/key_management';
10
+ import type { HttpClientErrorReason } from 'effect/unstable/http/HttpClientError';
11
+ import type { LitellmKeyCallbackMetadataDeclaredError, LitellmKeyCallbackMetadataLiveError } from './key-metadata-errors.ts';
12
+ declare const LitellmKeyValueRequiredError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
13
+ readonly _tag: "LitellmKeyValueRequiredError";
14
+ } & Readonly<A>;
15
+ /** A create is needed and the declaration names no `key` — LiteLLM would mint a value nobody holds. */
16
+ export declare class LitellmKeyValueRequiredError extends LitellmKeyValueRequiredError_base<{
17
+ readonly keyAlias: string;
18
+ }> {
19
+ get message(): string;
20
+ }
21
+ declare const LitellmKeyDebugLoggingError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
22
+ readonly _tag: "LitellmKeyDebugLoggingError";
23
+ } & Readonly<A>;
24
+ /**
25
+ * distilled prints request and response BODIES to stderr while `DISTILLED_DEBUG_HTTP` is set, and
26
+ * `/key/generate` carries the key in both. Refused before any request, as `fetchMeshNodeToken` does.
27
+ */
28
+ export declare class LitellmKeyDebugLoggingError extends LitellmKeyDebugLoggingError_base<{
29
+ readonly keyAlias: string;
30
+ }> {
31
+ get message(): string;
32
+ }
33
+ declare const LitellmKeyTransportError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
34
+ readonly _tag: "LitellmKeyTransportError";
35
+ } & Readonly<A>;
36
+ /**
37
+ * `/key/generate` failed on the wire (or its answer could not be read), so nobody knows whether the
38
+ * key exists.
39
+ *
40
+ * ⛔ THIS IS WHAT STANDS IN FOR AN `HttpClientError`, WHICH CARRIES ITS REQUEST, AND THE REQUEST BODY
41
+ * OF `/key/generate` IS `{"key":"sk-…"}`. Measured 2026-09-29 with a synthetic value: on a dropped
42
+ * connection `JSON.stringify(error)`, `Bun.inspect(error, { depth: 10 })` and Effect's JSON logger
43
+ * all printed the key, and so did the failure of a deploy over it. A defect from reading a broken
44
+ * answer (`protocol-rest.ts` reads it with `Effect.orDie`) carries the same request. So `reason` is
45
+ * the `HttpClientError` reason's TAG (a string) and nothing else is kept: no request, no cause, no
46
+ * description (a cause is free text from `fetch`).
47
+ */
48
+ export declare class LitellmKeyTransportError extends LitellmKeyTransportError_base<{
49
+ readonly keyAlias: string;
50
+ readonly reason: HttpClientErrorReason['_tag'] | 'Defect';
51
+ }> {
52
+ get message(): string;
53
+ }
54
+ declare const LitellmKeyAliasEmptyError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
55
+ readonly _tag: "LitellmKeyAliasEmptyError";
56
+ } & Readonly<A>;
57
+ /** An empty alias: `/key/list` would read `key_alias=` as no filter, and nothing could find the key again. */
58
+ export declare class LitellmKeyAliasEmptyError extends LitellmKeyAliasEmptyError_base<{}> {
59
+ get message(): string;
60
+ }
61
+ declare const LitellmKeyValueMissingError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
62
+ readonly _tag: "LitellmKeyValueMissingError";
63
+ } & Readonly<A>;
64
+ /** `key: { fromEnv }` names a variable the deploying process does not have (or has empty). */
65
+ export declare class LitellmKeyValueMissingError extends LitellmKeyValueMissingError_base<{
66
+ readonly keyAlias: string;
67
+ readonly variable: string;
68
+ }> {
69
+ get message(): string;
70
+ }
71
+ declare const LitellmKeyValueMalformedError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
72
+ readonly _tag: "LitellmKeyValueMalformedError";
73
+ } & Readonly<A>;
74
+ /** The variable's value breaks the rule `/key/generate` states for a user-defined key. */
75
+ export declare class LitellmKeyValueMalformedError extends LitellmKeyValueMalformedError_base<{
76
+ readonly keyAlias: string;
77
+ readonly variable: string;
78
+ readonly rule: string;
79
+ }> {
80
+ get message(): string;
81
+ }
82
+ declare const LitellmKeyValueNotHonouredError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
83
+ readonly _tag: "LitellmKeyValueNotHonouredError";
84
+ } & Readonly<A>;
85
+ /**
86
+ * `/key/generate` answered with a different value than the one sent, so the row exists under a
87
+ * key nobody holds. `removed` says whether the row was deleted again on the way out.
88
+ */
89
+ export declare class LitellmKeyValueNotHonouredError extends LitellmKeyValueNotHonouredError_base<{
90
+ readonly keyAlias: string;
91
+ readonly removed: boolean;
92
+ }> {
93
+ get message(): string;
94
+ }
95
+ declare const LitellmKeyValueMismatchError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
96
+ readonly _tag: "LitellmKeyValueMismatchError";
97
+ } & Readonly<A>;
98
+ /**
99
+ * An ADOPTED key was declared with a `key` whose value is not the key the live row holds. The
100
+ * value is compared only as a sha256 in memory against the row's `token` (`hash_token`, the
101
+ * vendor's own store) — never in state, never in an error — and a mismatch is refused, because a
102
+ * seat that reads the same variable would hold a key that authenticates nothing while the plan
103
+ * reported success. `/key/update` cannot change a key's value (`prepare_key_update_data` pops
104
+ * `key`), so there is nothing to write: the operator must fix the variable or drop the `key`.
105
+ */
106
+ export declare class LitellmKeyValueMismatchError extends LitellmKeyValueMismatchError_base<{
107
+ readonly keyAlias: string;
108
+ readonly variable: string;
109
+ }> {
110
+ get message(): string;
111
+ }
112
+ declare const LitellmKeyAliasChangedError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
113
+ readonly _tag: "LitellmKeyAliasChangedError";
114
+ } & Readonly<A>;
115
+ /**
116
+ * The alias is the identity: `/key/update` and `/key/delete` find a key by it, and this resource
117
+ * never holds the value that could find it any other way. A different alias is a different key.
118
+ */
119
+ export declare class LitellmKeyAliasChangedError extends LitellmKeyAliasChangedError_base<{
120
+ readonly from: string;
121
+ readonly to: string;
122
+ }> {
123
+ get message(): string;
124
+ }
125
+ declare const LitellmKeyAmbiguousAliasError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
126
+ readonly _tag: "LitellmKeyAmbiguousAliasError";
127
+ } & Readonly<A>;
128
+ /** More than one live key carries the alias, so nothing can say which one is declared. */
129
+ export declare class LitellmKeyAmbiguousAliasError extends LitellmKeyAmbiguousAliasError_base<{
130
+ readonly keyAlias: string;
131
+ readonly count: number;
132
+ }> {
133
+ get message(): string;
134
+ }
135
+ declare const LitellmKeyUnreadableError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
136
+ readonly _tag: "LitellmKeyUnreadableError";
137
+ } & Readonly<A>;
138
+ /** `/key/list` answered something that is not a list of key rows. */
139
+ export declare class LitellmKeyUnreadableError extends LitellmKeyUnreadableError_base<{
140
+ readonly keyAlias: string;
141
+ }> {
142
+ get message(): string;
143
+ }
144
+ declare const LitellmKeyAbsentAfterWriteError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
145
+ readonly _tag: "LitellmKeyAbsentAfterWriteError";
146
+ } & Readonly<A>;
147
+ /** A write returned no error but the alias is not listed afterwards. */
148
+ export declare class LitellmKeyAbsentAfterWriteError extends LitellmKeyAbsentAfterWriteError_base<{
149
+ readonly keyAlias: string;
150
+ }> {
151
+ get message(): string;
152
+ }
153
+ declare const LitellmKeyFieldNotAppliedError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
154
+ readonly _tag: "LitellmKeyFieldNotAppliedError";
155
+ } & Readonly<A>;
156
+ /**
157
+ * The write returned no error but the row still differs from the declaration. `/key/update` is a
158
+ * merge patch (its docstring), so this is a proxy that did not apply a field — refused, never
159
+ * reported as done.
160
+ */
161
+ export declare class LitellmKeyFieldNotAppliedError extends LitellmKeyFieldNotAppliedError_base<{
162
+ readonly keyAlias: string;
163
+ readonly fields: readonly string[];
164
+ }> {
165
+ get message(): string;
166
+ }
167
+ export type KeyError = keys.ListKeysKeyListGetError | keys.GenerateKeyFnKeyGeneratePostError | keys.UpdateKeyFnKeyUpdatePostError | keys.DeleteKeyFnKeyDeletePostError | LitellmKeyDebugLoggingError | LitellmKeyTransportError | LitellmKeyAliasEmptyError | LitellmKeyValueRequiredError | LitellmKeyValueMissingError | LitellmKeyValueMalformedError | LitellmKeyValueNotHonouredError | LitellmKeyValueMismatchError | LitellmKeyAliasChangedError | LitellmKeyAmbiguousAliasError | LitellmKeyCallbackMetadataDeclaredError | LitellmKeyCallbackMetadataLiveError | LitellmKeyUnreadableError | LitellmKeyAbsentAfterWriteError | LitellmKeyFieldNotAppliedError;
168
+ export {};
169
+ //# sourceMappingURL=key-errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"key-errors.d.ts","sourceRoot":"","sources":["../../src/litellm/key-errors.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,KAAK,IAAI,MAAM,yCAAyC,CAAC;AAErE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAClF,OAAO,KAAK,EACV,uCAAuC,EACvC,mCAAmC,EACpC,MAAM,0BAA0B,CAAC;;;;AAElC,uGAAuG;AACvG,qBAAa,4BAA6B,SAAQ,kCAAiD;IACjG,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B,CAAC;IACA,IAAa,OAAO,IAAI,MAAM,CAK7B;CACF;;;;AAED;;;GAGG;AACH,qBAAa,2BAA4B,SAAQ,iCAAgD;IAC/F,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B,CAAC;IACA,IAAa,OAAO,IAAI,MAAM,CAK7B;CACF;;;;AAED;;;;;;;;;;;GAWG;AACH,qBAAa,wBAAyB,SAAQ,8BAA6C;IACzF,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,qBAAqB,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC;CAC3D,CAAC;IACA,IAAa,OAAO,IAAI,MAAM,CAO7B;CACF;;;;AAED,8GAA8G;AAC9G,qBAAa,yBAA0B,SAAQ,+BAA8C,EAAE,CAAC;IAC9F,IAAa,OAAO,IAAI,MAAM,CAE7B;CACF;;;;AAED,8FAA8F;AAC9F,qBAAa,2BAA4B,SAAQ,iCAAgD;IAC/F,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B,CAAC;IACA,IAAa,OAAO,IAAI,MAAM,CAK7B;CACF;;;;AAED,0FAA0F;AAC1F,qBAAa,6BAA8B,SAAQ,mCAEjD;IACA,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB,CAAC;IACA,IAAa,OAAO,IAAI,MAAM,CAK7B;CACF;;;;AAED;;;GAGG;AACH,qBAAa,+BAAgC,SAAQ,qCAEnD;IACA,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B,CAAC;IACA,IAAa,OAAO,IAAI,MAAM,CAQ7B;CACF;;;;AAED;;;;;;;GAOG;AACH,qBAAa,4BAA6B,SAAQ,kCAAiD;IACjG,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B,CAAC;IACA,IAAa,OAAO,IAAI,MAAM,CAM7B;CACF;;;;AAED;;;GAGG;AACH,qBAAa,2BAA4B,SAAQ,iCAAgD;IAC/F,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;CACrB,CAAC;IACA,IAAa,OAAO,IAAI,MAAM,CAM7B;CACF;;;;AAED,0FAA0F;AAC1F,qBAAa,6BAA8B,SAAQ,mCAEjD;IACA,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB,CAAC;IACA,IAAa,OAAO,IAAI,MAAM,CAK7B;CACF;;;;AAED,qEAAqE;AACrE,qBAAa,yBAA0B,SAAQ,+BAA8C;IAC3F,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B,CAAC;IACA,IAAa,OAAO,IAAI,MAAM,CAK7B;CACF;;;;AAED,wEAAwE;AACxE,qBAAa,+BAAgC,SAAQ,qCAEnD;IACA,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B,CAAC;IACA,IAAa,OAAO,IAAI,MAAM,CAE7B;CACF;;;;AAED;;;;GAIG;AACH,qBAAa,8BAA+B,SAAQ,oCAElD;IACA,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;CACpC,CAAC;IACA,IAAa,OAAO,IAAI,MAAM,CAK7B;CACF;AAED,MAAM,MAAM,QAAQ,GAChB,IAAI,CAAC,uBAAuB,GAC5B,IAAI,CAAC,iCAAiC,GACtC,IAAI,CAAC,6BAA6B,GAClC,IAAI,CAAC,6BAA6B,GAClC,2BAA2B,GAC3B,wBAAwB,GACxB,yBAAyB,GACzB,4BAA4B,GAC5B,2BAA2B,GAC3B,6BAA6B,GAC7B,+BAA+B,GAC/B,4BAA4B,GAC5B,2BAA2B,GAC3B,6BAA6B,GAC7B,uCAAuC,GACvC,mCAAmC,GACnC,yBAAyB,GACzB,+BAA+B,GAC/B,8BAA8B,CAAC"}
@@ -0,0 +1,119 @@
1
+ /**
2
+ * Props, attributes, wire bodies and comparison for `LiteLLM.Key`, testable without a server.
3
+ *
4
+ * ⛔ THERE IS NO SECRET IN THIS FILE'S OUTPUT. `KeyAttributes` has no `key`, no `token` and no hash:
5
+ * `/key/list` rows carry `token` (LiteLLM's hash of the key) and `toAttributes` drops it, because
6
+ * attributes are persisted unencrypted (key-secret.ts). The value is unwrapped in `createBody`, at
7
+ * the last moment before the wire, and compared with a live row only as a sha256 in memory
8
+ * (`verifyKeyValue`, key-secret.ts) against the raw row's `token` — the hash itself never reaches
9
+ * state. The callback slots of `metadata` are dropped too (key-metadata.ts).
10
+ * ★ THE ROW IS READ THROUGH `/key/list?key_alias=…&return_full_object=true`. Measured 2026-09-28
11
+ * (litellm-key-access): a bare list and `get_key` come back with `models: []` for keys whose real
12
+ * allowlist lives in the full object. The generated `UserAPIKeyAuth` row declares every column
13
+ * compared here (`budget_id`, `models`, `allowed_routes`, `team_id`, `metadata`, `expires`).
14
+ * ⛔ A DECLARATION MANAGES ONLY WHAT IT NAMES. An omitted `budgetId`, `models`, `allowedRoutes`,
15
+ * `teamId` or `duration` is neither compared nor sent, so a live value stays. Reading omission as
16
+ * "clear it" FAILS OPEN on a credential: `[]` is "all models" and "no route restriction" to
17
+ * LiteLLM, and no budget drops the tier's limits. On an adopted key (whose plan says `adopted`, never
18
+ * what the apply will write, and which `--adopt` given for another resource takes over too) that
19
+ * would widen a live key without the plan ever showing an `update`. Clearing is an explicit
20
+ * declaration: `models: []`, `allowedRoutes: []`, `budgetId: null`, `teamId: null`, `duration: null`.
21
+ * `/key/update` is a merge patch for the COLUMNS (its docstring), so an unsent one is left as it is.
22
+ * ⛔ `metadata` IS A MERGE, NOT A COLUMN OF THE DECLARER'S: LiteLLM keeps guardrails, per-model limits
23
+ * and more inside it, and `/key/update` replaces it wholesale. See key-metadata.ts.
24
+ * ⚠️ NOT MODELLED, so a declaration of them could never be diffed: `max_budget`, `soft_budget`,
25
+ * `object_permission`, `blocked`, `spend`, and the top-level rate limits. Bind a `LiteLLM.Budget`
26
+ * for limits. The ones that live in `metadata` (guardrails, tags, `model_rpm_limit`, …) are left
27
+ * alone by the merge, and can be declared as `metadata` keys.
28
+ */
29
+ import type * as keys from '@distilled.cloud/litellm/key_management';
30
+ import * as Redacted from 'effect/Redacted';
31
+ import type { FromEnv } from '../secrets/write-only.ts';
32
+ import { type Metadata } from './key-metadata.ts';
33
+ export interface KeyProps {
34
+ /** The alias LiteLLM knows the key by: its identity, unique per proxy. Declare an existing key's alias to adopt it. */
35
+ readonly keyAlias: string;
36
+ /**
37
+ * The key's VALUE, by the NAME of the environment variable holding it (`{ fromEnv: 'SEAT_KEY' }`).
38
+ * Write-only and create-only: required to create the key, never stored. On an EXISTING key a
39
+ * declared value is compared with the row in memory only (sha256 against the row's `token`), and a
40
+ * mismatch is refused — `/key/update` cannot change a key's value. Omit it to manage an existing
41
+ * key's settings without ever holding its value.
42
+ */
43
+ readonly key?: FromEnv;
44
+ /**
45
+ * The `LiteLLM.Budget` tier the key binds to (`budget.budgetId`, so the tier is created first).
46
+ * Omitted = not managed, a live binding stays. `null` = unbind, which drops the tier's limits.
47
+ */
48
+ readonly budgetId?: string | null;
49
+ /**
50
+ * Model names the key may call. Omitted = not managed, a live scope stays (a NEW key then starts
51
+ * with LiteLLM's default). `[]` = ALL models, LiteLLM's reading: declared on a scoped key it WIDENS it.
52
+ */
53
+ readonly models?: readonly string[];
54
+ /**
55
+ * Routes the key may call, exact or wildcard (`/chat/completions`, `/v1/*`). Omitted = not
56
+ * managed. `[]` = no route restriction: declared on a restricted key it WIDENS it.
57
+ */
58
+ readonly allowedRoutes?: readonly string[];
59
+ /** The team the key belongs to. Omitted = not managed. `null` = detach. */
60
+ readonly teamId?: string | null;
61
+ /**
62
+ * The `metadata` keys this declaration manages, a MERGE (key-metadata.ts): other live keys are
63
+ * carried, never removed, and a key is cleared by declaring it `null`. Stored in state, so no
64
+ * secrets. `logging`, `callback_settings` and `secret_manager_settings` are refused.
65
+ */
66
+ readonly metadata?: Metadata;
67
+ /**
68
+ * Validity from creation: `'30s'`, `'30m'`, `'30h'`, `'30d'`. Omitted = not managed (a live expiry
69
+ * stays; a new key never expires). `null` = never expires, which clears a live expiry.
70
+ */
71
+ readonly duration?: string | null;
72
+ }
73
+ export interface KeyAttributes {
74
+ readonly keyAlias: string;
75
+ readonly budgetId: string | null;
76
+ readonly models: readonly string[];
77
+ readonly allowedRoutes: readonly string[];
78
+ readonly teamId: string | null;
79
+ /** The row's `metadata` WITHOUT the callback slots (`withheld`): those carry secret keys and state is unencrypted. */
80
+ readonly metadata: Metadata;
81
+ /**
82
+ * The `duration` this provider last WROTE. The row carries only `expires`, an absolute time, so
83
+ * the declared duration cannot be read back; state remembers it. `null` for an adopted row.
84
+ */
85
+ readonly duration: string | null;
86
+ /** When the key stops authenticating, as the row says. Observed, never declared. */
87
+ readonly expires: string | null;
88
+ /**
89
+ * The NAMES of the `metadata` callback slots the row has and this resource never reads. A metadata
90
+ * write is refused while any is present: `/key/update` replaces the column and could not carry them.
91
+ */
92
+ readonly withheld: readonly string[];
93
+ }
94
+ /**
95
+ * Wire names of the fields the declaration NAMES where the live row disagrees. An omitted prop is
96
+ * never here (the header's "manages only what it names"), so nothing omitted is ever written.
97
+ */
98
+ export declare const differing: (live: KeyAttributes, props: KeyProps) => readonly string[];
99
+ /**
100
+ * Create body: only what is declared, plus the value.
101
+ * ⛔ `Redacted.value` IS CALLED HERE, TO SEND, AND IN key-secret.ts's `echoes`, TO COMPARE — nowhere else.
102
+ */
103
+ export declare const createBody: (props: KeyProps, secret: Redacted.Redacted<string>) => keys.GenerateKeyFnKeyGeneratePostRequest;
104
+ /**
105
+ * Update body: the alias (which finds the key, `key` omitted) and ONLY the declared fields that
106
+ * differ, each as the declaration wants it — a declared `null` on `budget_id`/`team_id`/`duration`
107
+ * as an explicit `null` (a key column, which "an explicit null clears"), a declared `[]` as `[]`.
108
+ * ★ `metadata` CARRIES EVERY LIVE KEY with the declared ones on top, because `/key/update` replaces
109
+ * the column (key-metadata.ts). The caller has refused a key with `withheld` slots by now.
110
+ * ⛔ NEVER CARRIES `key`: an update must not be able to change which value authenticates.
111
+ */
112
+ export declare const updateBody: (props: KeyProps, live: KeyAttributes) => keys.UpdateKeyFnKeyUpdatePostRequest;
113
+ /**
114
+ * One row of `/key/list?return_full_object=true`. The row's `token` (LiteLLM's hash of the key), the
115
+ * `metadata` callback slots (only their names stay, as `withheld`), and every other column not named
116
+ * in `KeyAttributes`, are dropped here on purpose.
117
+ */
118
+ export declare const toAttributes: (row: Record<string, unknown>) => KeyAttributes;
119
+ //# sourceMappingURL=key-form.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"key-form.d.ts","sourceRoot":"","sources":["../../src/litellm/key-form.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,OAAO,KAAK,KAAK,IAAI,MAAM,yCAAyC,CAAC;AACrE,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAC;AAC5C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,KAAK,QAAQ,EAAkD,MAAM,mBAAmB,CAAC;AAElG,MAAM,WAAW,QAAQ;IACvB,uHAAuH;IACvH,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B;;;;;;OAMG;IACH,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC;IACvB;;;OAGG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC;;;OAGG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC;;;OAGG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C,2EAA2E;IAC3E,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAC7B;;;OAGG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1C,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,sHAAsH;IACtH,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B;;;OAGG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,oFAAoF;IACpF,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC;;;OAGG;IACH,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;CACtC;AAmBD;;;GAGG;AACH,eAAO,MAAM,SAAS,SAAU,aAAa,SAAS,QAAQ,KAAG,SAAS,MAAM,EAW/E,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,UAAU,UACd,QAAQ,UACP,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,KAChC,IAAI,CAAC,mCAaP,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,UAAU,UACd,QAAQ,QACT,aAAa,KAClB,IAAI,CAAC,+BAWP,CAAC;AAOF;;;;GAIG;AACH,eAAO,MAAM,YAAY,QAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAG,aAa3D,CAAC"}
@@ -0,0 +1,41 @@
1
+ import * as Effect from 'effect/Effect';
2
+ import { startFakeLitellm } from './fake-litellm.ts';
3
+ import { type FakeStack } from './fake-stack.ts';
4
+ import { LiteLLMKey } from './key.ts';
5
+ import type { KeyProps } from './key-form.ts';
6
+ import type { LitellmOpContext } from './operations.ts';
7
+ export declare const MASTER_KEY = "sk-test-master";
8
+ /** A valid user-defined key (`sk-` and 16+ characters) that is obviously not a real one. */
9
+ export declare const FAKE_KEY = "sk-FAKE-seat-key-000000000001";
10
+ export declare const OTHER_FAKE_KEY = "sk-FAKE-seat-key-000000000002";
11
+ export declare const VAR = "FAKE_LITELLM_SEAT_KEY";
12
+ /** The row's `token` for a value, the same sha256 the fake and the vendor store (`hash_token`). */
13
+ export declare const tokenFor: (value: string) => string;
14
+ export type Fake = ReturnType<typeof startFakeLitellm>;
15
+ export declare const newFake: (options?: Parameters<typeof startFakeLitellm>[0]) => Fake;
16
+ export declare const keyStack: (fake: Fake, settings?: {
17
+ readonly noRetry?: boolean;
18
+ }) => FakeStack;
19
+ /** One declaration as a stack body. `name` is the resource's logical id. */
20
+ export declare const declare: (props: KeyProps, name?: string) => Effect.Effect<void, never, import("alchemy").Provider<LiteLLMKey>>;
21
+ /**
22
+ * Runs `body` with `values` in `process.env`, then puts the environment back exactly as it was.
23
+ * ⚠️ THE PROVIDER READS `process.env` AT CALL TIME (write-only.ts `resolveAll`), so the variable
24
+ * has to be there for the whole deploy and gone after it.
25
+ */
26
+ export declare const withEnv: <A>(values: Readonly<Record<string, string | undefined>>, body: () => Promise<A>) => Promise<A>;
27
+ /** The message a rejected deploy carries, or `''` when it did not reject. */
28
+ export declare const failureOf: (attempt: Promise<unknown>) => Promise<string>;
29
+ /**
30
+ * Runs one handler effect against the fake outside any stack (a handler-level test), with the SDK's
31
+ * retry OFF: a test of a failing call wants the failure, not the backoff before it.
32
+ */
33
+ export declare const runAgainst: <A, E>(fake: Fake, effect: Effect.Effect<A, E, LitellmOpContext>) => Promise<A>;
34
+ /** A seeded live row shaped like `UserAPIKeyAuth`, with a hash `token` a resource must never surface. */
35
+ export declare const liveRow: (fields?: Record<string, unknown>) => Record<string, unknown>;
36
+ /**
37
+ * Someone changing a live key outside the stack — the dashboard's `/key/update` — through the fake's
38
+ * own route, so it replaces `metadata` the way LiteLLM does. It shows in `fake.keys.writes()`.
39
+ */
40
+ export declare const dashboardEdit: (fake: Fake, keyAlias: string, patch: Record<string, unknown>) => Promise<void>;
41
+ //# sourceMappingURL=key-harness.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"key-harness.d.ts","sourceRoot":"","sources":["../../src/litellm/key-harness.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAGxC,OAAO,EAAa,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,EAAE,KAAK,SAAS,EAAa,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAExD,eAAO,MAAM,UAAU,mBAAmB,CAAC;AAC3C,4FAA4F;AAC5F,eAAO,MAAM,QAAQ,kCAAkC,CAAC;AACxD,eAAO,MAAM,cAAc,kCAAkC,CAAC;AAC9D,eAAO,MAAM,GAAG,0BAA0B,CAAC;AAE3C,mGAAmG;AACnG,eAAO,MAAM,QAAQ,UAAW,MAAM,KAAG,MACmB,CAAC;AAE7D,MAAM,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAEvD,eAAO,MAAM,OAAO,aAAc,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC,CAAC,CAAC,KAAG,IAClB,CAAC;AAE1D,eAAO,MAAM,QAAQ,SAAU,IAAI,aAAa;IAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,KAAG,SACQ,CAAC;AAE1F,4EAA4E;AAC5E,eAAO,MAAM,OAAO,UAAW,QAAQ,sFAGnC,CAAC;AAEL;;;;GAIG;AACH,eAAO,MAAM,OAAO,GAAU,CAAC,UACrB,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,QAC9C,MAAM,OAAO,CAAC,CAAC,CAAC,KACrB,OAAO,CAAC,CAAC,CAcX,CAAC;AAEF,6EAA6E;AAC7E,eAAO,MAAM,SAAS,YAAmB,OAAO,CAAC,OAAO,CAAC,KAAG,OAAO,CAAC,MAAM,CAIvE,CAAC;AAEJ;;;GAGG;AACH,eAAO,MAAM,UAAU,GAAI,CAAC,EAAE,CAAC,QACvB,IAAI,UACF,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,gBAAgB,CAAC,KAC5C,OAAO,CAAC,CAAC,CAQT,CAAC;AAEJ,yGAAyG;AACzG,eAAO,MAAM,OAAO,YAAY,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAYnF,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,aAAa,SAClB,IAAI,YACA,MAAM,SACT,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC7B,OAAO,CAAC,IAAI,CAOd,CAAC"}
@@ -0,0 +1,30 @@
1
+ declare const LitellmKeyCallbackMetadataDeclaredError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
2
+ readonly _tag: "LitellmKeyCallbackMetadataDeclaredError";
3
+ } & Readonly<A>;
4
+ /**
5
+ * The declaration names a callback slot. LiteLLM stores its `callback_vars` ENCRYPTED, so the row
6
+ * would never read back equal (every deploy would fail with `LitellmKeyFieldNotAppliedError`), and
7
+ * Alchemy state is unencrypted.
8
+ */
9
+ export declare class LitellmKeyCallbackMetadataDeclaredError extends LitellmKeyCallbackMetadataDeclaredError_base<{
10
+ readonly keyAlias: string;
11
+ readonly slots: readonly string[];
12
+ }> {
13
+ get message(): string;
14
+ }
15
+ declare const LitellmKeyCallbackMetadataLiveError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
16
+ readonly _tag: "LitellmKeyCallbackMetadataLiveError";
17
+ } & Readonly<A>;
18
+ /**
19
+ * The live key holds callback credentials in its `metadata` and the declaration wants a metadata
20
+ * key changed. `/key/update` REPLACES the column, and this resource never read those slots, so it
21
+ * could not send them back: writing would strip the key's logging. Refused before the write.
22
+ */
23
+ export declare class LitellmKeyCallbackMetadataLiveError extends LitellmKeyCallbackMetadataLiveError_base<{
24
+ readonly keyAlias: string;
25
+ readonly slots: readonly string[];
26
+ }> {
27
+ get message(): string;
28
+ }
29
+ export {};
30
+ //# sourceMappingURL=key-metadata-errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"key-metadata-errors.d.ts","sourceRoot":"","sources":["../../src/litellm/key-metadata-errors.ts"],"names":[],"mappings":";;;AASA;;;;GAIG;AACH,qBAAa,uCAAwC,SAAQ,6CAE3D;IACA,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC,CAAC;IACA,IAAa,OAAO,IAAI,MAAM,CAM7B;CACF;;;;AAED;;;;GAIG;AACH,qBAAa,mCAAoC,SAAQ,yCAEvD;IACA,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC,CAAC;IACA,IAAa,OAAO,IAAI,MAAM,CAO7B;CACF"}
@@ -0,0 +1,22 @@
1
+ export type Metadata = Readonly<Record<string, unknown>>;
2
+ /** The slots that carry callback credentials: never in attributes, never declared, never written. */
3
+ export declare const CALLBACK_SLOTS: readonly ['callback_settings', 'logging', 'secret_manager_settings'];
4
+ /** The callback slots `metadata` names, sorted (`CALLBACK_SLOTS` is). */
5
+ export declare const callbackSlotsIn: (metadata: Metadata | undefined) => readonly string[];
6
+ /**
7
+ * A row's `metadata` as attributes hold it: everything but the callback slots, whose NAMES are
8
+ * returned beside it (`withheld`) so a write knows it could not carry them.
9
+ */
10
+ export declare const splitMetadata: (raw: unknown) => {
11
+ readonly metadata: Record<string, unknown>;
12
+ readonly withheld: readonly string[];
13
+ };
14
+ /**
15
+ * Whether a key the declaration names differs from the live row. An absent live key differs from any
16
+ * declared value, `null` included (`deepEqual` tells `undefined` from `null`), so `{ seat: null }`
17
+ * writes a `null` once and is quiet after.
18
+ */
19
+ export declare const metadataDiffers: (live: Metadata, declared: Metadata | undefined) => boolean;
20
+ /** The body's `metadata`: every live key carried, the declared ones on top. */
21
+ export declare const mergedMetadata: (live: Metadata, declared: Metadata | undefined) => Metadata;
22
+ //# sourceMappingURL=key-metadata.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"key-metadata.d.ts","sourceRoot":"","sources":["../../src/litellm/key-metadata.ts"],"names":[],"mappings":"AAiCA,MAAM,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAEzD,qGAAqG;AACrG,eAAO,MAAM,cAAc,YAAI,mBAAmB,EAAE,SAAS,EAAE,yBAAyB,CAAU,CAAC;AAKnG,yEAAyE;AACzE,eAAO,MAAM,eAAe,aAAc,QAAQ,GAAG,SAAS,KAAG,SAAS,MAAM,EACc,CAAC;AAE/F;;;GAGG;AACH,eAAO,MAAM,aAAa,QACnB,OAAO,KACX;IAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAA;CAOpF,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,eAAe,SAAU,QAAQ,YAAY,QAAQ,GAAG,SAAS,KAAG,OAEA,CAAC;AAElF,+EAA+E;AAC/E,eAAO,MAAM,cAAc,SAAU,QAAQ,YAAY,QAAQ,GAAG,SAAS,KAAG,QAG9E,CAAC"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * The four LiteLLM `/key/*` calls `LiteLLM.Key` uses, through the SDK's typed operations.
3
+ *
4
+ * ★ EVERY OPERATION HERE EXISTS IN `@distilled.cloud/litellm/key_management` (generated at LiteLLM
5
+ * 1.103.0) AND IS CALLED WITH ITS OWN REQUEST TYPE — none is guessed, none is hand-rolled:
6
+ * `listKeysKeyListGet` GET /key/list read, by `key_alias`, `return_full_object`
7
+ * `generateKeyFnKeyGeneratePost` POST /key/generate create, with the user-defined `key`
8
+ * `updateKeyFnKeyUpdatePost` POST /key/update merge patch, found by `key_alias`
9
+ * `deleteKeyFnKeyDeletePost` POST /key/delete by `key_aliases`
10
+ * `/key/info` and `/v2/key/info` are NOT used: they take the key or its hash, and this resource
11
+ * holds neither for an adopted key. Listing by alias needs no value.
12
+ * ⚠️ NO SEMAPHORE, unlike pass-through endpoints: every key is its own DB row (budget-operations.ts).
13
+ * ⚠️ THE SDK'S DEFAULT RETRY APPLIES TO `/key/generate` TOO. A create whose response was lost and is
14
+ * then retried surfaces the proxy's duplicate-alias 400 rather than a second key; the next deploy
15
+ * reads the row. UNVERIFIED against a live proxy — the retry policy is core's, not this file's.
16
+ * ⚠️ DELETE IS IDEMPOTENT BY THIS FUNCTION, not by the vendor. MEASURED in the litellm 1.103.0 wheel
17
+ * (`key_management_endpoints.py`): `/key/delete` for an alias it does not hold answers 404 "No keys
18
+ * found" (`delete_verification_tokens`, :4915-4918), and 403 for a caller that may not delete the
19
+ * key (:4933-4936). The SDK types both as resource-specific tags, `KeyNotFound` and
20
+ * `KeyDeleteForbidden` (a distilled patch, `patches/key_management/delete_key_fn_key_delete_post.json`,
21
+ * each matched on the status AND a phrase of the vendor's message), so `catchTag` sees them: the
22
+ * MESSAGE MATCH LIVES IN THE SDK, never here (S21). An absent alias is settled by the LIST, which
23
+ * answers absence unambiguously, and a `KeyNotFound` (another caller won the race, or a retry of a
24
+ * delete whose answer was lost) re-lists and is swallowed only if the key has gone since. Every
25
+ * other failure, `KeyDeleteForbidden` included, propagates typed: a 404 that is not the vendor's
26
+ * is core's `NotFound`, not absence. operations.ts's `deletePassThroughEndpoint` and
27
+ * budget-operations.ts decide the same way, on their own tag.
28
+ */
29
+ import * as keys from '@distilled.cloud/litellm/key_management';
30
+ import * as Effect from 'effect/Effect';
31
+ import { LitellmKeyAliasEmptyError, LitellmKeyAmbiguousAliasError, LitellmKeyTransportError, LitellmKeyUnreadableError } from './key-errors.ts';
32
+ import { type KeyAttributes } from './key-form.ts';
33
+ import { type LitellmOpContext } from './operations.ts';
34
+ /**
35
+ * The one live key with this alias, or `undefined`. Two rows are an error, never a pick: the
36
+ * server filters by an EXACT alias by default, and this filters again so a proxy that matched a
37
+ * substring cannot hand back someone else's key.
38
+ */
39
+ export declare const findKey: (keyAlias: string) => Effect.Effect<KeyAttributes | undefined, keys.ListKeysKeyListGetError | LitellmKeyUnreadableError | LitellmKeyAmbiguousAliasError | LitellmKeyAliasEmptyError, LitellmOpContext>;
40
+ /**
41
+ * The row's `token` (the vendor's sha256 of the key), `null` when the row carries none, or
42
+ * `undefined` when the alias is absent. Absence must plan recreation, not a value mismatch.
43
+ * Read only for the in-memory mismatch check (`verifyKeyValue`); the hash is never persisted.
44
+ */
45
+ export declare const readKeyToken: (keyAlias: string) => Effect.Effect<string | null | undefined, keys.ListKeysKeyListGetError | LitellmKeyUnreadableError | LitellmKeyAmbiguousAliasError | LitellmKeyAliasEmptyError, LitellmOpContext>;
46
+ /**
47
+ * `/key/generate`. The response's `key` is `Redacted` (the SDK's `SensitiveValue`); never log the response.
48
+ * ⛔ THE REQUEST BODY IS `{"key":"sk-…"}`, AND A FAILED CALL CAN CARRY ITS REQUEST. Two ways, both
49
+ * measured 2026-09-29 with a synthetic key (key-transport.test.ts): a transport failure is an
50
+ * `HttpClientError` in the error channel, and a body that fails mid-read is the SAME error as a
51
+ * DEFECT (`Effect.orDie` in `@distilled.cloud/core`'s `protocol-rest.ts`). Either would put the
52
+ * plaintext in front of anything that serialises, inspects or logs the failure — while the SDK's
53
+ * own `HttpClientError` is not something this resource can leave typed as it is. Both become
54
+ * `LitellmKeyTransportError`, which keeps the alias and the reason's tag and nothing else.
55
+ * The SDK's status errors (`BadRequest`, `Forbidden`, …) carry only the proxy's message text and
56
+ * stay as they are, so a caller can still `catchTag` them.
57
+ */
58
+ export declare const generateKey: (body: keys.GenerateKeyFnKeyGeneratePostRequest) => Effect.Effect<keys.GenerateKeyResponse, keys.BadRequest | import("@distilled.cloud/caddy").ConfigError | keys.Forbidden | LitellmKeyTransportError | keys.UnprocessableEntity | import("@distilled.cloud/litellm/Errors").DefaultErrors, import("@distilled.cloud/litellm/Credentials").Credentials>;
59
+ /** `/key/update`, found by the body's `key_alias`. */
60
+ export declare const updateKey: (body: keys.UpdateKeyFnKeyUpdatePostRequest) => Effect.Effect<void, keys.UpdateKeyFnKeyUpdatePostError, import("@distilled.cloud/litellm/Credentials").Credentials>;
61
+ /** `/key/delete` by alias, when the list shows the key; a no-op when it does not. */
62
+ export declare const deleteKey: (keyAlias: string) => Effect.Effect<void, keys.DeleteKeyFnKeyDeletePostError | keys.ListKeysKeyListGetError | LitellmKeyUnreadableError | LitellmKeyAmbiguousAliasError | LitellmKeyAliasEmptyError, LitellmOpContext>;
63
+ //# sourceMappingURL=key-operations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"key-operations.d.ts","sourceRoot":"","sources":["../../src/litellm/key-operations.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,OAAO,KAAK,IAAI,MAAM,yCAAyC,CAAC;AAChE,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAGxC,OAAO,EACL,yBAAyB,EACzB,6BAA6B,EAC7B,wBAAwB,EACxB,yBAAyB,EAC1B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,KAAK,aAAa,EAAgB,MAAM,eAAe,CAAC;AACjE,OAAO,EAAE,KAAK,gBAAgB,EAAgB,MAAM,iBAAiB,CAAC;AAEtE;;;;GAIG;AACH,eAAO,MAAM,OAAO,aACR,MAAM,KACf,MAAM,CAAC,MAAM,CACd,aAAa,GAAG,SAAS,EACvB,IAAI,CAAC,uBAAuB,GAC5B,yBAAyB,GACzB,6BAA6B,GAC7B,yBAAyB,EAC3B,gBAAgB,CAEgF,CAAC;AAmCnG;;;;GAIG;AACH,eAAO,MAAM,YAAY,aACb,MAAM,KACf,MAAM,CAAC,MAAM,CACd,MAAM,GAAG,IAAI,GAAG,SAAS,EACvB,IAAI,CAAC,uBAAuB,GAC5B,yBAAyB,GACzB,6BAA6B,GAC7B,yBAAyB,EAC3B,gBAAgB,CAQX,CAAC;AASR;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,WAAW,SAAU,IAAI,CAAC,mCAAmC,ySAiBzE,CAAC;AAEF,sDAAsD;AACtD,eAAO,MAAM,SAAS,SAAU,IAAI,CAAC,+BAA+B,wHACG,CAAC;AAExE,qFAAqF;AACrF,eAAO,MAAM,SAAS,aACV,MAAM,KACf,MAAM,CAAC,MAAM,CACd,IAAI,EACF,IAAI,CAAC,6BAA6B,GAClC,IAAI,CAAC,uBAAuB,GAC5B,yBAAyB,GACzB,6BAA6B,GAC7B,yBAAyB,EAC3B,gBAAgB,CAiBf,CAAC"}
@@ -0,0 +1,33 @@
1
+ import * as Effect from 'effect/Effect';
2
+ import * as Redacted from 'effect/Redacted';
3
+ import { type FromEnv } from '../secrets/write-only.ts';
4
+ import { LitellmKeyDebugLoggingError, LitellmKeyValueMalformedError, LitellmKeyValueMismatchError, LitellmKeyValueMissingError, LitellmKeyValueRequiredError } from './key-errors.ts';
5
+ /**
6
+ * The declared value, `Redacted`, or a typed refusal naming the alias, the variable and the rule.
7
+ * Called only when a create is actually about to happen, never by `diff` or `read`, so a plan
8
+ * (which needs no secret) runs without the variable.
9
+ * ⚠️ AN EMPTY VARIABLE IS A MISSING ONE (`resolveAll`): a secret renderer that failed writes
10
+ * `NAME=` and sending `''` would create a key that authenticates with nothing.
11
+ */
12
+ export declare const resolveKeyValue: (keyAlias: string, ref: FromEnv | undefined) => Effect.Effect<Redacted.Redacted<string>, LitellmKeyValueRequiredError | LitellmKeyValueMissingError | LitellmKeyValueMalformedError>;
13
+ /** Whether `/key/generate` echoed the value it was sent (the SDK hands it back `Redacted`). */
14
+ export declare const echoes: (returned: string | Redacted.Redacted<string>, sent: Redacted.Redacted<string>) => boolean;
15
+ /**
16
+ * Whether an ADOPTED key's declared `key: { fromEnv }` value is the key the live row holds.
17
+ *
18
+ * ⚠️ COMPARED AS A SHA256 AGAINST THE ROW'S `token`, never value-against-value, and the hash is
19
+ * never written anywhere: a `Redacted` value unwrapped only long enough to digest it, then gone.
20
+ * The row's `token` (`hash_token`) is the vendor's own sha256 hex of the key.
21
+ */
22
+ export declare const verifyKeyValue: (keyAlias: string, ref: FromEnv | undefined, token: string | null) => Effect.Effect<void, LitellmKeyValueMismatchError>;
23
+ /**
24
+ * ⛔ THE SDK PRINTS BODIES WHILE `DISTILLED_DEBUG_HTTP` IS SET (`@distilled.cloud/core`
25
+ * `protocol-http.ts`: the first 400 characters of every request body; `protocol-rest.ts`: of every
26
+ * response), and `/key/generate` carries the key in both. Measured by reading the pinned source
27
+ * 2026-09-29; `mesh-node-token.ts` refuses for the same reason. Only a create needs it: no other
28
+ * call in this resource carries the value. Reads `process.env` because that is what distilled reads.
29
+ */
30
+ export declare const refuseDebugLogging: (keyAlias: string) => Effect.Effect<void, LitellmKeyDebugLoggingError>;
31
+ /** Whether verification can run; unset/empty variables skip the check, never a create. */
32
+ export declare const hasKeyValue: (ref: FromEnv | undefined) => boolean;
33
+ //# sourceMappingURL=key-secret.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"key-secret.d.ts","sourceRoot":"","sources":["../../src/litellm/key-secret.ts"],"names":[],"mappings":"AAqCA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,KAAK,OAAO,EAAc,MAAM,0BAA0B,CAAC;AACpE,OAAO,EACL,2BAA2B,EAC3B,6BAA6B,EAC7B,4BAA4B,EAC5B,2BAA2B,EAC3B,4BAA4B,EAC7B,MAAM,iBAAiB,CAAC;AAYzB;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,aAChB,MAAM,OACX,OAAO,GAAG,SAAS,KACvB,MAAM,CAAC,MAAM,CACd,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EACzB,4BAA4B,GAAG,2BAA2B,GAAG,6BAA6B,CAWxF,CAAC;AAEL,+FAA+F;AAC/F,eAAO,MAAM,MAAM,aACP,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,QACtC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,KAC9B,OAC6F,CAAC;AAUjG;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,aACf,MAAM,OACX,OAAO,GAAG,SAAS,SACjB,MAAM,GAAG,IAAI,KACnB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,4BAA4B,CAS/C,CAAC;AAEL;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,aACnB,MAAM,KACf,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,2BAA2B,CAGjC,CAAC;AAElB,0FAA0F;AAC1F,eAAO,MAAM,WAAW,QAAS,OAAO,GAAG,SAAS,KAAG,OACoB,CAAC"}
@@ -0,0 +1,78 @@
1
+ /**
2
+ * `LiteLLM.Key` — one virtual key of LiteLLM's `LiteLLM_VerificationToken` (`/key/*`), bound to a
3
+ * `LiteLLM.Budget` tier, with its value kept out of Alchemy state.
4
+ *
5
+ * ★ ADOPT BY ALIAS. `keyAlias` is the identity: `/key/update` and `/key/delete` find a key by it
6
+ * (their docstrings), and `/key/list` filters by it, so an existing key is taken over by declaring
7
+ * its alias, with no value in hand. A live key with no state is `Unowned` and needs `--adopt`; the
8
+ * apply re-checks it (`refuseTakeover`) for a create the planner could not probe — which is EVERY
9
+ * key declared with `budgetId: tier.budgetId`, an Output until the tier exists.
10
+ * ⛔ THE VALUE IS WRITE-ONLY (key-secret.ts): `key: { fromEnv }` names the variable, the value goes
11
+ * over the wire once in `/key/generate`, and no attribute, log line or error carries it. `diff`
12
+ * checks a set variable against the live token in memory; an unset variable skips the check.
13
+ * `read` never touches the environment, and no value or hash is added to state.
14
+ * ★ `defaultRemovalPolicy: 'retain'` — deleting a key breaks whatever holds it (a seat's every call
15
+ * 401s). Dropping the declaration leaves the key live; `.pipe(RemovalPolicy.destroy())` opts in.
16
+ * ⛔ A RENAME IS REFUSED, not replaced. The new key would need the same value, and `/key/generate`
17
+ * rejects a second key with a value it already holds; under `retain` the old row would still be
18
+ * there. Declare the new alias as a new resource and destroy the old one.
19
+ * ★ A DECLARATION MANAGES ONLY WHAT IT NAMES (key-form.ts): an omitted prop is never compared or sent,
20
+ * and `metadata` is a merge (key-metadata.ts), so an adopted key's scope, budget and guardrails are
21
+ * never cleared by leaving them out.
22
+ * ⛔ NO CREDENTIAL IS A PROP; `litellmProviders`' layer supplies `Credentials`.
23
+ */
24
+ import { Resource } from 'alchemy';
25
+ import type { Input } from 'alchemy/Input';
26
+ import * as Provider from 'alchemy/Provider';
27
+ import * as Effect from 'effect/Effect';
28
+ import { LitellmKeyAbsentAfterWriteError, LitellmKeyAliasChangedError, LitellmKeyFieldNotAppliedError, LitellmKeyValueNotHonouredError } from './key-errors.ts';
29
+ import { type KeyAttributes, type KeyProps } from './key-form.ts';
30
+ import { LitellmKeyCallbackMetadataDeclaredError, LitellmKeyCallbackMetadataLiveError } from './key-metadata-errors.ts';
31
+ export type { KeyAttributes, KeyProps };
32
+ export type { KeyError } from './key-errors.ts';
33
+ export interface LiteLLMKey extends Resource<'LiteLLM.Key', KeyProps, KeyAttributes> {
34
+ }
35
+ export declare const LiteLLMKey: import("alchemy").ResourceClass<LiteLLMKey>;
36
+ export declare const isLiteLLMKey: (value: unknown) => value is LiteLLMKey;
37
+ /** ⛔ TEST-ONLY EXPORT. Not on index.ts's barrel. */
38
+ export declare const keyHandlers: {
39
+ read: ({ olds, output }: {
40
+ olds: KeyProps;
41
+ output: KeyAttributes | undefined;
42
+ }) => Effect.Effect<KeyAttributes | undefined, import("./key-errors.ts").LitellmKeyAliasEmptyError | import("./key-errors.ts").LitellmKeyAmbiguousAliasError | import("./key-errors.ts").LitellmKeyUnreadableError | import("@distilled.cloud/litellm/key_management").ListKeysKeyListGetError, import("@distilled.cloud/litellm/Protocol").LitellmOpContext>;
43
+ diff: ({ news, output }: {
44
+ news: Input<KeyProps>;
45
+ output: KeyAttributes | undefined;
46
+ }) => Effect.Effect<{
47
+ readonly action: 'update';
48
+ } | {
49
+ readonly action: 'noop';
50
+ } | undefined, LitellmKeyAliasChangedError | import("./key-errors.ts").LitellmKeyAliasEmptyError | import("./key-errors.ts").LitellmKeyAmbiguousAliasError | LitellmKeyCallbackMetadataDeclaredError | LitellmKeyCallbackMetadataLiveError | import("./key-errors.ts").LitellmKeyUnreadableError | import("./key-errors.ts").LitellmKeyValueMismatchError | import("@distilled.cloud/litellm/key_management").ListKeysKeyListGetError, import("@distilled.cloud/litellm/Protocol").LitellmOpContext>;
51
+ reconcile: ({ fqn, instanceId, news, output, }: {
52
+ fqn: string;
53
+ instanceId: string;
54
+ news: KeyProps;
55
+ output: KeyAttributes | undefined;
56
+ }) => Effect.Effect<{
57
+ keyAlias: string;
58
+ budgetId: string | null;
59
+ models: readonly string[];
60
+ allowedRoutes: readonly string[];
61
+ teamId: string | null;
62
+ metadata: import("./key-metadata.ts").Metadata;
63
+ expires: string | null;
64
+ withheld: readonly string[];
65
+ duration: string | null;
66
+ }, import("@distilled.cloud/caddy").BadGateway | import("@distilled.cloud/litellm/key_management").BadRequest | import("@distilled.cloud/caddy").ConfigError | import("@distilled.cloud/litellm/key_management").Forbidden | import("@distilled.cloud/caddy").GatewayTimeout | import("effect/unstable/http/HttpClientError").HttpClientError | import("@distilled.cloud/caddy").InternalServerError | LitellmKeyAbsentAfterWriteError | import("./key-errors.ts").LitellmKeyAliasEmptyError | import("./key-errors.ts").LitellmKeyAmbiguousAliasError | LitellmKeyCallbackMetadataDeclaredError | LitellmKeyCallbackMetadataLiveError | import("./key-errors.ts").LitellmKeyDebugLoggingError | LitellmKeyFieldNotAppliedError | import("./key-errors.ts").LitellmKeyTransportError | import("./key-errors.ts").LitellmKeyUnreadableError | import("./key-errors.ts").LitellmKeyValueMalformedError | import("./key-errors.ts").LitellmKeyValueMismatchError | import("./key-errors.ts").LitellmKeyValueMissingError | LitellmKeyValueNotHonouredError | import("./key-errors.ts").LitellmKeyValueRequiredError | import("@distilled.cloud/litellm/Errors").LitellmParseError | import("@distilled.cloud/litellm/key_management").NotFound | import("@distilled.cloud/caddy").ServiceUnavailable | import("@distilled.cloud/caddy").TooManyRequests | import("@distilled.cloud/caddy").Unauthorized | import("@distilled.cloud/litellm/Errors").UnknownLitellmError | import("@distilled.cloud/litellm/key_management").UnprocessableEntity, import("@distilled.cloud/litellm/Protocol").LitellmOpContext>;
67
+ delete: ({ output }: {
68
+ output: KeyAttributes;
69
+ }) => Effect.Effect<void, import("@distilled.cloud/caddy").BadGateway | import("@distilled.cloud/litellm/key_management").BadRequest | import("@distilled.cloud/caddy").ConfigError | import("@distilled.cloud/caddy").GatewayTimeout | import("effect/unstable/http/HttpClientError").HttpClientError | import("@distilled.cloud/caddy").InternalServerError | import("@distilled.cloud/litellm/key_management").KeyDeleteForbidden | import("@distilled.cloud/litellm/key_management").KeyNotFound | import("./key-errors.ts").LitellmKeyAliasEmptyError | import("./key-errors.ts").LitellmKeyAmbiguousAliasError | import("./key-errors.ts").LitellmKeyUnreadableError | import("@distilled.cloud/litellm/Errors").LitellmParseError | import("@distilled.cloud/caddy").ServiceUnavailable | import("@distilled.cloud/caddy").TooManyRequests | import("@distilled.cloud/caddy").Unauthorized | import("@distilled.cloud/litellm/Errors").UnknownLitellmError | import("@distilled.cloud/litellm/key_management").UnprocessableEntity, import("@distilled.cloud/litellm/Protocol").LitellmOpContext>;
70
+ /**
71
+ * ⚠️ ENUMERATES NOTHING, ON PURPOSE. `nuke` walks `list` and deletes what it finds; a proxy's key
72
+ * table holds every live credential the estate's services authenticate with, plus dashboard
73
+ * session keys nobody declared — none of which this stack made.
74
+ */
75
+ list: () => Effect.Effect<never[], never, never>;
76
+ };
77
+ export declare const LiteLLMKeyProvider: () => import("effect/Layer").Layer<Provider.Provider<LiteLLMKey>, never, import("@distilled.cloud/litellm/Protocol").LitellmOpContext>;
78
+ //# sourceMappingURL=key.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"key.d.ts","sourceRoot":"","sources":["../../src/litellm/key.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAGnC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,KAAK,QAAQ,MAAM,kBAAkB,CAAC;AAC7C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAGxC,OAAO,EACL,+BAA+B,EAC/B,2BAA2B,EAC3B,8BAA8B,EAC9B,+BAA+B,EAChC,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,QAAQ,EAId,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,uCAAuC,EACvC,mCAAmC,EACpC,MAAM,0BAA0B,CAAC;AAUlC,YAAY,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC;AACxC,YAAY,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAEhD,MAAM,WAAW,UAAW,SAAQ,QAAQ,CAAC,aAAa,EAAE,QAAQ,EAAE,aAAa,CAAC;CAAG;AAEvF,eAAO,MAAM,UAAU,6CAA0E,CAAC;AAElG,eAAO,MAAM,YAAY,UAAW,OAAO,KAAG,KAAK,IAAI,UACe,CAAC;AA4DvE,oDAAoD;AACpD,eAAO,MAAM,WAAW;IACtB,IAAI,qBAAqB;QAAE,IAAI,EAAE,QAAQ,CAAC;QAAC,MAAM,EAAE,aAAa,GAAG,SAAS,CAAA;KAAE;IAO9E,IAAI,qBAAqB;QAAE,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;QAAC,MAAM,EAAE,aAAa,GAAG,SAAS,CAAA;KAAE;yBAarC,QAAQ;;yBAIrC,MAAM;;IAIzB,SAAS,uCAKN;QACD,GAAG,EAAE,MAAM,CAAC;QACZ,UAAU,EAAE,MAAM,CAAC;QACnB,IAAI,EAAE,QAAQ,CAAC;QACf,MAAM,EAAE,aAAa,GAAG,SAAS,CAAC;KACnC;;;;;;;;;;;IAmCD,MAAM,eAAe;QAAE,MAAM,EAAE,aAAa,CAAA;KAAE;IAE9C;;;;OAIG;IACH,IAAI;CACL,CAAC;AAEF,eAAO,MAAM,kBAAkB,wIACmD,CAAC"}