@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
@@ -1,19 +1,25 @@
1
1
  /**
2
2
  * A recording fake `PgExecutor` (S28: "Tests use `bun:test`… a test never trusts the deploy's
3
3
  * own report" — here read back from the fake's own catalog, not from the statement list) for
4
- * every lifecycle test in this family. No socket, no `@effect/sql-pg` client — it is small
5
- * enough to re-derive the one thing this provider ever asks of a real one: three statement
6
- * shapes, matched by text, against an in-memory `pg_roles` set and `pg_database` map.
4
+ * every lifecycle test in this family. No socket, no `@effect/sql-pg` client — it matches the
5
+ * statement shapes this family issues, by text, against an in-memory `pg_database` map. The
6
+ * role catalog is `fake-role-sql.ts`; the schema catalog is `fake-schema-sql.ts`.
7
7
  *
8
- * ⛔ IT PARSES ITS OWN OUTPUT, NOT SQL IN GENERAL. `parseCreate` below understands exactly the
9
- * text `buildCreateDatabaseSql` (`database-sql.ts`) produces — quoted with `quoteIdent` /
8
+ * ⛔ IT PARSES ITS OWN OUTPUT, NOT SQL IN GENERAL. `parseCreate` (`fake-sql-parse.ts`) understands
9
+ * exactly the text `buildCreateDatabaseSql` produces — quoted with `quoteIdent` /
10
10
  * `quoteStringLiteral` — because that is the only `CREATE DATABASE` this family ever issues. A
11
- * general SQL parser would hide a quoting bug instead of tripping over it.
11
+ * general SQL parser would hide a quoting bug instead of tripping over it. The role and schema
12
+ * halves live in their own files under the same rule.
12
13
  */
13
14
  import * as Effect from 'effect/Effect';
14
- import { SqlError, SqlSyntaxError } from 'effect/unstable/sql/SqlError';
15
+ import { SqlError, SqlSyntaxError, UnknownError } from 'effect/unstable/sql/SqlError';
15
16
  import type { PostgresDatabaseAttributes } from './database-attrs.ts';
16
17
  import type { PgExecutor } from './database-sql.ts';
18
+ import { parseCreate } from './fake-sql-parse.ts';
19
+ import { type FakeRoleState, applyRoleStatement } from './fake-role-sql.ts';
20
+ import { type FakeSchemaState, applySchemaStatement, seedSchemas } from './fake-schema-sql.ts';
21
+ import type { PostgresRoleAttributes } from './role-attrs.ts';
22
+ import type { PostgresSchemaAttributes } from './schema-attrs.ts';
17
23
 
18
24
  export interface RecordedStatement {
19
25
  readonly text: string;
@@ -25,57 +31,93 @@ export interface FakeSql extends PgExecutor {
25
31
  /** Mutable on purpose: a test seeds a row a "competing" statement would have produced (the
26
32
  * `42P04` race case) before the fake ever sees it. */
27
33
  readonly databases: Map<string, PostgresDatabaseAttributes>;
34
+ /** Mutable on purpose: a test seeds a live role (adoption, drift) or clears one (drop). */
35
+ readonly roleRows: Map<string, PostgresRoleAttributes>;
36
+ /** `member\0parent\0grantor` triples backing `pg_auth_members` (a plain `pg_auth_members`
37
+ * read, a grant, a revoke and a DROP ROLE cascade all go through `fake-role-sql.ts`);
38
+ * `GRANT`/`REVOKE` mutate it. An empty grantor segment is an inconsistent catalog/test row. */
39
+ readonly memberships: Set<string>;
40
+ /** Options on a membership the name alone hides, keyed `member\0parent\0grantor`. Absent
41
+ * means neither ADMIN, SET nor an explicit per-grant INHERIT. */
42
+ readonly membershipOptions: Map<
43
+ string,
44
+ { readonly admin: boolean; readonly set: boolean; readonly inherit?: boolean }
45
+ >;
46
+ /** Mutable on purpose: a test seeds a live schema (adoption, drift) or clears one (drop). */
47
+ readonly schemas: Map<string, PostgresSchemaAttributes>;
48
+ /** Mutable on purpose: names of schemas this fake pretends hold at least one relation, so a
49
+ * `cascade: false` drop refusal has something to refuse. */
50
+ readonly relationsIn: Set<string>;
28
51
  }
29
52
 
30
53
  export interface FakeSqlOptions {
54
+ readonly standardConformingStrings?: boolean;
31
55
  readonly roles?: ReadonlyArray<string>;
32
56
  readonly databases?: ReadonlyArray<PostgresDatabaseAttributes>;
57
+ readonly roleRows?: ReadonlyArray<PostgresRoleAttributes>;
33
58
  /** Fail the NEXT `CREATE DATABASE` with SQLSTATE `42P04` (duplicate_database), once, the way a
34
59
  * concurrent creator racing this reconcile would — classified exactly as
35
60
  * `@effect/sql-pg`'s own driver classifies it (`database-sql.ts`'s header). */
36
61
  readonly raceNextCreate?: boolean;
62
+ /** Fail the next statement whose text starts with this prefix, once, without applying it.
63
+ * A `transaction` that included earlier statements rolls them back. */
64
+ readonly failNext?: string;
65
+ readonly schemas?: ReadonlyArray<PostgresSchemaAttributes>;
66
+ /** Names of schemas the fake answers `schemaIsEmpty` with `false` for. */
67
+ readonly schemasWithRelations?: ReadonlyArray<string>;
68
+ /** Accept the NEXT `CREATE SCHEMA` (no error) but record nothing — the S10 case where the
69
+ * write's own report is a lie and the immediate re-read finds nothing. */
70
+ readonly swallowNextCreateSchema?: boolean;
71
+ /** What `current_database()` answers and every schema row is stamped with (a real server
72
+ * always reports the database its connection opened). Default `postgres`. */
73
+ readonly database?: string;
74
+ /** The NEXT `CREATE SCHEMA` races with a row owned by THIS role — a
75
+ * concurrent creator won between the first `SELECT` and the `IF NOT EXISTS`, which then
76
+ * does nothing; plain CREATE instead fails with 42P06. Consumed once. */
77
+ readonly raceNextCreateSchema?: string;
78
+ /** What `current_user` answers, and the owner a `CREATE SCHEMA` without `AUTHORIZATION`
79
+ * stores. Default `postgres`. A test that sets this pins the omitted-owner comparison
80
+ * against the session role, not a hardcoded name. */
81
+ readonly currentUser?: string;
37
82
  }
38
83
 
39
- const unquoteIdent = (raw: string): string => raw.replace(/""/g, '"');
40
- const unquoteLiteral = (raw: string): string => raw.replace(/''/g, "'");
41
-
42
- /** Pull every field back out of exactly the text `buildCreateDatabaseSql` writes. */
43
- const parseCreate = (text: string): PostgresDatabaseAttributes => {
44
- const name = /^CREATE DATABASE "((?:[^"]|"")*)" WITH /.exec(text);
45
- const owner = /OWNER "((?:[^"]|"")*)"/.exec(text);
46
- const encoding = /ENCODING '((?:[^']|'')*)'/.exec(text);
47
- const localeProvider = /LOCALE_PROVIDER '((?:[^']|'')*)'/.exec(text);
48
- const lcCollate = /LC_COLLATE '((?:[^']|'')*)'/.exec(text);
49
- const lcCtype = /LC_CTYPE '((?:[^']|'')*)'/.exec(text);
50
- const tablespace = /TABLESPACE "((?:[^"]|"")*)"/.exec(text);
51
- const allowConnections = /ALLOW_CONNECTIONS (true|false)/.exec(text);
52
- const connectionLimit = /CONNECTION LIMIT (-?\d+)/.exec(text);
53
- const isTemplate = /IS_TEMPLATE (true|false)/.exec(text);
54
- if (name === null || owner === null) {
55
- throw new Error(`fake-sql: could not parse a generated CREATE DATABASE statement: ${text}`);
56
- }
57
- return {
58
- name: unquoteIdent(name[1] as string),
59
- oid: 0,
60
- owner: unquoteIdent(owner[1] as string),
61
- encoding: encoding === null ? 'UTF8' : unquoteLiteral(encoding[1] as string),
62
- localeProvider:
63
- localeProvider === null ? 'libc' : (unquoteLiteral(localeProvider[1] as string) as 'libc'),
64
- collate: lcCollate === null ? 'C' : unquoteLiteral(lcCollate[1] as string),
65
- ctype: lcCtype === null ? 'C' : unquoteLiteral(lcCtype[1] as string),
66
- tablespace: tablespace === null ? 'pg_default' : unquoteIdent(tablespace[1] as string),
67
- allowConnections: allowConnections === null ? true : allowConnections[1] === 'true',
68
- connectionLimit: connectionLimit === null ? -1 : Number(connectionLimit[1]),
69
- isTemplate: isTemplate === null ? false : isTemplate[1] === 'true',
70
- };
71
- };
72
-
73
84
  export const makeFakeSql = (options: FakeSqlOptions = {}): FakeSql => {
74
85
  const statements: RecordedStatement[] = [];
75
- const roles = new Set(options.roles ?? []);
86
+ const roleNames = new Set(options.roles ?? []);
87
+ const roleRows = new Map(options.roleRows?.map((r) => [r.name, r] as const) ?? []);
76
88
  const databases = new Map(options.databases?.map((d) => [d.name, d] as const) ?? []);
89
+ const memberships = new Set<string>();
90
+ const membershipOptions = new Map<
91
+ string,
92
+ { readonly admin: boolean; readonly set: boolean; readonly inherit?: boolean }
93
+ >();
94
+ const schemas = seedSchemas(options.schemas, options.database ?? 'postgres');
95
+ const relationsIn = new Set(options.schemasWithRelations ?? []);
77
96
  let raceRemaining = options.raceNextCreate === true ? 1 : 0;
97
+ let failNext = options.failNext;
78
98
  let oidCounter = 20000;
99
+ const nextOid = (): number => {
100
+ const oid = oidCounter;
101
+ oidCounter += 1;
102
+ return oid;
103
+ };
104
+ const roleState: FakeRoleState = {
105
+ roleNames,
106
+ roleRows,
107
+ memberships,
108
+ membershipOptions,
109
+ nextOid,
110
+ };
111
+ const schemaState: FakeSchemaState = {
112
+ schemas,
113
+ relationsIn,
114
+ database: options.database ?? 'postgres',
115
+ standardConformingStrings: options.standardConformingStrings ?? true,
116
+ sessionRole: options.currentUser ?? 'postgres',
117
+ swallowRemaining: options.swallowNextCreateSchema === true ? 1 : 0,
118
+ raceOwner: options.raceNextCreateSchema,
119
+ nextOid,
120
+ };
79
121
 
80
122
  const unsafe = <A extends object>(
81
123
  text: string,
@@ -84,10 +126,35 @@ export const makeFakeSql = (options: FakeSqlOptions = {}): FakeSql => {
84
126
  Effect.suspend(() => {
85
127
  statements.push({ text, params });
86
128
 
129
+ if (failNext !== undefined && text.startsWith(failNext)) {
130
+ failNext = undefined;
131
+ return Effect.fail(
132
+ new SqlError({
133
+ reason: new UnknownError({
134
+ cause: new Error('injected statement failure'),
135
+ message: 'injected statement failure',
136
+ operation: text.slice(0, 40),
137
+ }),
138
+ }),
139
+ );
140
+ }
141
+
87
142
  if (text.startsWith('SELECT 1 AS present FROM pg_roles')) {
88
143
  const role = params[0] as string;
89
144
  return Effect.succeed(
90
- (roles.has(role) ? [{ present: 1 }] : []) as unknown as ReadonlyArray<A>,
145
+ (roleNames.has(role) || roleRows.has(role)
146
+ ? [{ present: 1 }]
147
+ : []) as unknown as ReadonlyArray<A>,
148
+ );
149
+ }
150
+
151
+ // ⚠️ startsWith, BEFORE the `FROM pg_database` branch: the full-row select also contains
152
+ // `FROM pg_database`, but starts with `SELECT d.oid` — only the existence probe starts
153
+ // with `SELECT 1 AS present`.
154
+ if (text.startsWith('SELECT 1 AS present FROM pg_database')) {
155
+ const name = params[0] as string;
156
+ return Effect.succeed(
157
+ (databases.has(name) ? [{ present: 1 }] : []) as unknown as ReadonlyArray<A>,
91
158
  );
92
159
  }
93
160
 
@@ -110,14 +177,67 @@ export const makeFakeSql = (options: FakeSqlOptions = {}): FakeSql => {
110
177
  }),
111
178
  );
112
179
  }
113
- const row = { ...parseCreate(text), oid: oidCounter };
114
- oidCounter += 1;
180
+ const row = { ...parseCreate(text), oid: nextOid() };
115
181
  databases.set(row.name, row);
116
182
  return Effect.succeed([] as unknown as ReadonlyArray<A>);
117
183
  }
118
184
 
185
+ const schemaStatement = applySchemaStatement<A>(schemaState, text, params);
186
+ if (schemaStatement !== undefined) return schemaStatement;
187
+
188
+ const roleStatement = applyRoleStatement<A>(roleState, text, params);
189
+ if (roleStatement !== undefined) return roleStatement;
190
+
119
191
  throw new Error(`fake-sql: unrecognised statement: ${text}`);
120
192
  });
121
193
 
122
- return { unsafe, statements, databases };
194
+ const snapshot = () => ({
195
+ roleRows: new Map(roleRows),
196
+ roleNames: new Set(roleNames),
197
+ memberships: new Set(memberships),
198
+ membershipOptions: new Map(membershipOptions),
199
+ databases: new Map(databases),
200
+ schemas: new Map(schemas),
201
+ relationsIn: new Set(relationsIn),
202
+ swallowRemaining: schemaState.swallowRemaining,
203
+ raceOwner: schemaState.raceOwner,
204
+ oid: oidCounter,
205
+ });
206
+ const restore = (snap: ReturnType<typeof snapshot>) => {
207
+ roleRows.clear();
208
+ for (const [key, value] of snap.roleRows) roleRows.set(key, value);
209
+ roleNames.clear();
210
+ for (const name of snap.roleNames) roleNames.add(name);
211
+ memberships.clear();
212
+ for (const key of snap.memberships) memberships.add(key);
213
+ membershipOptions.clear();
214
+ for (const [key, value] of snap.membershipOptions) membershipOptions.set(key, value);
215
+ databases.clear();
216
+ for (const [key, value] of snap.databases) databases.set(key, value);
217
+ schemas.clear();
218
+ for (const [key, value] of snap.schemas) schemas.set(key, value);
219
+ relationsIn.clear();
220
+ for (const name of snap.relationsIn) relationsIn.add(name);
221
+ schemaState.swallowRemaining = snap.swallowRemaining;
222
+ schemaState.raceOwner = snap.raceOwner;
223
+ oidCounter = snap.oid;
224
+ };
225
+ const transaction = (sqls: readonly string[]): Effect.Effect<void, SqlError> => {
226
+ const snap = snapshot();
227
+ return Effect.gen(function* () {
228
+ for (const sql of sqls) yield* unsafe(sql).pipe(Effect.asVoid);
229
+ }).pipe(Effect.onError(() => Effect.sync(() => restore(snap))));
230
+ };
231
+
232
+ return {
233
+ unsafe,
234
+ transaction,
235
+ statements,
236
+ databases,
237
+ roleRows,
238
+ memberships,
239
+ membershipOptions,
240
+ schemas,
241
+ relationsIn,
242
+ };
123
243
  };
@@ -0,0 +1,147 @@
1
+ # path: src/include/utils/acl.h
2
+ # blob: 13bb8128747139d9cae66777e4782359ead0a760
3
+ # tag: REL_18_6 (commit 724edf9bde9d356724ad384a2e196edc3c9f80f7)
4
+ # fetched: 2026-09-30 via gh api repos/postgres/postgres/contents/...?ref=724edf9bde9d356724ad384a2e196edc3c9f80f7
5
+ # excerpt: the AclItem struct, the grant-option layout, every ACL_*_CHR letter define and the ACL_ALL_RIGHTS_* sets (lines 40-180 of the full file)
6
+ #
7
+
8
+ /*
9
+ * typedef AclMode is declared in parsenodes.h, also the individual privilege
10
+ * bit meanings are defined there
11
+ */
12
+
13
+ #define ACL_ID_PUBLIC 0 /* placeholder for id in a PUBLIC acl item */
14
+
15
+ /*
16
+ * AclItem
17
+ *
18
+ * Note: must be same size on all platforms, because the size is hardcoded
19
+ * in the pg_type.h entry for aclitem.
20
+ */
21
+ typedef struct AclItem
22
+ {
23
+ Oid ai_grantee; /* ID that this item grants privs to */
24
+ Oid ai_grantor; /* grantor of privs */
25
+ AclMode ai_privs; /* privilege bits */
26
+ } AclItem;
27
+
28
+ /*
29
+ * The upper 32 bits of the ai_privs field of an AclItem are the grant option
30
+ * bits, and the lower 32 bits are the actual privileges. We use "rights"
31
+ * to mean the combined grant option and privilege bits fields.
32
+ */
33
+ #define ACLITEM_GET_PRIVS(item) ((item).ai_privs & 0xFFFFFFFF)
34
+ #define ACLITEM_GET_GOPTIONS(item) (((item).ai_privs >> 32) & 0xFFFFFFFF)
35
+ #define ACLITEM_GET_RIGHTS(item) ((item).ai_privs)
36
+
37
+ #define ACL_GRANT_OPTION_FOR(privs) (((AclMode) (privs) & 0xFFFFFFFF) << 32)
38
+ #define ACL_OPTION_TO_PRIVS(privs) (((AclMode) (privs) >> 32) & 0xFFFFFFFF)
39
+
40
+ #define ACLITEM_SET_PRIVS(item,privs) \
41
+ ((item).ai_privs = ((item).ai_privs & ~((AclMode) 0xFFFFFFFF)) | \
42
+ ((AclMode) (privs) & 0xFFFFFFFF))
43
+ #define ACLITEM_SET_GOPTIONS(item,goptions) \
44
+ ((item).ai_privs = ((item).ai_privs & ~(((AclMode) 0xFFFFFFFF) << 32)) | \
45
+ (((AclMode) (goptions) & 0xFFFFFFFF) << 32))
46
+ #define ACLITEM_SET_RIGHTS(item,rights) \
47
+ ((item).ai_privs = (AclMode) (rights))
48
+
49
+ #define ACLITEM_SET_PRIVS_GOPTIONS(item,privs,goptions) \
50
+ ((item).ai_privs = ((AclMode) (privs) & 0xFFFFFFFF) | \
51
+ (((AclMode) (goptions) & 0xFFFFFFFF) << 32))
52
+
53
+
54
+ #define ACLITEM_ALL_PRIV_BITS ((AclMode) 0xFFFFFFFF)
55
+ #define ACLITEM_ALL_GOPTION_BITS ((AclMode) 0xFFFFFFFF << 32)
56
+
57
+ /*
58
+ * Definitions for convenient access to Acl (array of AclItem).
59
+ * These are standard PostgreSQL arrays, but are restricted to have one
60
+ * dimension and no nulls. We also ignore the lower bound when reading,
61
+ * and set it to one when writing.
62
+ *
63
+ * CAUTION: as of PostgreSQL 7.1, these arrays are toastable (just like all
64
+ * other array types). Therefore, be careful to detoast them with the
65
+ * macros provided, unless you know for certain that a particular array
66
+ * can't have been toasted.
67
+ */
68
+
69
+
70
+ /*
71
+ * Acl a one-dimensional array of AclItem
72
+ */
73
+ typedef struct ArrayType Acl;
74
+
75
+ #define ACL_NUM(ACL) (ARR_DIMS(ACL)[0])
76
+ #define ACL_DAT(ACL) ((AclItem *) ARR_DATA_PTR(ACL))
77
+ #define ACL_N_SIZE(N) (ARR_OVERHEAD_NONULLS(1) + ((N) * sizeof(AclItem)))
78
+ #define ACL_SIZE(ACL) ARR_SIZE(ACL)
79
+
80
+ /*
81
+ * fmgr macros for these types
82
+ */
83
+ #define DatumGetAclItemP(X) ((AclItem *) DatumGetPointer(X))
84
+ #define PG_GETARG_ACLITEM_P(n) DatumGetAclItemP(PG_GETARG_DATUM(n))
85
+ #define PG_RETURN_ACLITEM_P(x) PG_RETURN_POINTER(x)
86
+
87
+ #define DatumGetAclP(X) ((Acl *) PG_DETOAST_DATUM(X))
88
+ #define DatumGetAclPCopy(X) ((Acl *) PG_DETOAST_DATUM_COPY(X))
89
+ #define PG_GETARG_ACL_P(n) DatumGetAclP(PG_GETARG_DATUM(n))
90
+ #define PG_GETARG_ACL_P_COPY(n) DatumGetAclPCopy(PG_GETARG_DATUM(n))
91
+ #define PG_RETURN_ACL_P(x) PG_RETURN_POINTER(x)
92
+
93
+ /*
94
+ * ACL modification opcodes for aclupdate
95
+ */
96
+ #define ACL_MODECHG_ADD 1
97
+ #define ACL_MODECHG_DEL 2
98
+ #define ACL_MODECHG_EQL 3
99
+
100
+ /*
101
+ * External representations of the privilege bits --- aclitemin/aclitemout
102
+ * represent each possible privilege bit with a distinct 1-character code
103
+ */
104
+ #define ACL_INSERT_CHR 'a' /* formerly known as "append" */
105
+ #define ACL_SELECT_CHR 'r' /* formerly known as "read" */
106
+ #define ACL_UPDATE_CHR 'w' /* formerly known as "write" */
107
+ #define ACL_DELETE_CHR 'd'
108
+ #define ACL_TRUNCATE_CHR 'D' /* super-delete, as it were */
109
+ #define ACL_REFERENCES_CHR 'x'
110
+ #define ACL_TRIGGER_CHR 't'
111
+ #define ACL_EXECUTE_CHR 'X'
112
+ #define ACL_USAGE_CHR 'U'
113
+ #define ACL_CREATE_CHR 'C'
114
+ #define ACL_CREATE_TEMP_CHR 'T'
115
+ #define ACL_CONNECT_CHR 'c'
116
+ #define ACL_SET_CHR 's'
117
+ #define ACL_ALTER_SYSTEM_CHR 'A'
118
+ #define ACL_MAINTAIN_CHR 'm'
119
+
120
+ /* string holding all privilege code chars, in order by bitmask position */
121
+ #define ACL_ALL_RIGHTS_STR "arwdDxtXUCTcsAm"
122
+
123
+ /*
124
+ * Bitmasks defining "all rights" for each supported object type
125
+ */
126
+ #define ACL_ALL_RIGHTS_COLUMN (ACL_INSERT|ACL_SELECT|ACL_UPDATE|ACL_REFERENCES)
127
+ #define ACL_ALL_RIGHTS_RELATION (ACL_INSERT|ACL_SELECT|ACL_UPDATE|ACL_DELETE|ACL_TRUNCATE|ACL_REFERENCES|ACL_TRIGGER|ACL_MAINTAIN)
128
+ #define ACL_ALL_RIGHTS_SEQUENCE (ACL_USAGE|ACL_SELECT|ACL_UPDATE)
129
+ #define ACL_ALL_RIGHTS_DATABASE (ACL_CREATE|ACL_CREATE_TEMP|ACL_CONNECT)
130
+ #define ACL_ALL_RIGHTS_FDW (ACL_USAGE)
131
+ #define ACL_ALL_RIGHTS_FOREIGN_SERVER (ACL_USAGE)
132
+ #define ACL_ALL_RIGHTS_FUNCTION (ACL_EXECUTE)
133
+ #define ACL_ALL_RIGHTS_LANGUAGE (ACL_USAGE)
134
+ #define ACL_ALL_RIGHTS_LARGEOBJECT (ACL_SELECT|ACL_UPDATE)
135
+ #define ACL_ALL_RIGHTS_PARAMETER_ACL (ACL_SET|ACL_ALTER_SYSTEM)
136
+ #define ACL_ALL_RIGHTS_SCHEMA (ACL_USAGE|ACL_CREATE)
137
+ #define ACL_ALL_RIGHTS_TABLESPACE (ACL_CREATE)
138
+ #define ACL_ALL_RIGHTS_TYPE (ACL_USAGE)
139
+
140
+ /* operation codes for pg_*_aclmask */
141
+ typedef enum
142
+ {
143
+ ACLMASK_ALL, /* normal case: compute all bits */
144
+ ACLMASK_ANY, /* return when result is known nonzero */
145
+ } AclMaskHow;
146
+
147
+ /* result codes for pg_*_aclcheck */
@@ -0,0 +1,31 @@
1
+ # path: doc/src/sgml/func.sgml
2
+ # blob: b57f161f53c8833c721dede3d48121490dc15f12
3
+ # tag: REL_18_6 (commit 724edf9bde9d356724ad384a2e196edc3c9f80f7)
4
+ # fetched: 2026-09-30 via gh api repos/postgres/postgres/contents/...?ref=724edf9bde9d356724ad384a2e196edc3c9f80f7
5
+ # excerpt: the aclexplode row of "Access Privilege Inquiry Functions" (lines 25843-25867 of the full file)
6
+ #
7
+ <entry role="func_table_entry"><para role="func_signature">
8
+ <indexterm>
9
+ <primary>aclexplode</primary>
10
+ </indexterm>
11
+ <function>aclexplode</function> ( <type>aclitem[]</type> )
12
+ <returnvalue>setof record</returnvalue>
13
+ ( <parameter>grantor</parameter> <type>oid</type>,
14
+ <parameter>grantee</parameter> <type>oid</type>,
15
+ <parameter>privilege_type</parameter> <type>text</type>,
16
+ <parameter>is_grantable</parameter> <type>boolean</type> )
17
+ </para>
18
+ <para>
19
+ Returns the <type>aclitem</type> array as a set of rows.
20
+ If the grantee is the pseudo-role PUBLIC, it is represented by zero in
21
+ the <parameter>grantee</parameter> column. Each granted privilege is
22
+ represented as <literal>SELECT</literal>, <literal>INSERT</literal>,
23
+ etc (see <xref linkend="privilege-abbrevs-table"/> for a full list).
24
+ Note that each privilege is broken out as a separate row, so
25
+ only one keyword appears in the <parameter>privilege_type</parameter>
26
+ column.
27
+ </para></entry>
28
+ </row>
29
+
30
+ <row>
31
+ <entry role="func_table_entry"><para role="func_signature">
@@ -0,0 +1,82 @@
1
+ # path: doc/src/sgml/ref/alter_default_privileges.sgml
2
+ # blob: 6acd0f1df914c6926e6d6f5bd28b0599d66d629c
3
+ # tag: REL_18_6 (commit 724edf9bde9d356724ad384a2e196edc3c9f80f7)
4
+ # fetched: 2026-09-30 via gh api repos/postgres/postgres/contents/...?ref=724edf9bde9d356724ad384a2e196edc3c9f80f7
5
+ # excerpt: the <synopsis> block only (lines 23-98 of the full file), cut per house doc-size convention
6
+ #
7
+ <synopsis>
8
+ ALTER DEFAULT PRIVILEGES
9
+ [ FOR { ROLE | USER } <replaceable>target_role</replaceable> [, ...] ]
10
+ [ IN SCHEMA <replaceable>schema_name</replaceable> [, ...] ]
11
+ <replaceable class="parameter">abbreviated_grant_or_revoke</replaceable>
12
+
13
+ <phrase>where <replaceable class="parameter">abbreviated_grant_or_revoke</replaceable> is one of:</phrase>
14
+
15
+ GRANT { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER | MAINTAIN }
16
+ [, ...] | ALL [ PRIVILEGES ] }
17
+ ON TABLES
18
+ TO { [ GROUP ] <replaceable class="parameter">role_name</replaceable> | PUBLIC } [, ...] [ WITH GRANT OPTION ]
19
+
20
+ GRANT { { USAGE | SELECT | UPDATE }
21
+ [, ...] | ALL [ PRIVILEGES ] }
22
+ ON SEQUENCES
23
+ TO { [ GROUP ] <replaceable class="parameter">role_name</replaceable> | PUBLIC } [, ...] [ WITH GRANT OPTION ]
24
+
25
+ GRANT { EXECUTE | ALL [ PRIVILEGES ] }
26
+ ON { FUNCTIONS | ROUTINES }
27
+ TO { [ GROUP ] <replaceable class="parameter">role_name</replaceable> | PUBLIC } [, ...] [ WITH GRANT OPTION ]
28
+
29
+ GRANT { USAGE | ALL [ PRIVILEGES ] }
30
+ ON TYPES
31
+ TO { [ GROUP ] <replaceable class="parameter">role_name</replaceable> | PUBLIC } [, ...] [ WITH GRANT OPTION ]
32
+
33
+ GRANT { { USAGE | CREATE }
34
+ [, ...] | ALL [ PRIVILEGES ] }
35
+ ON SCHEMAS
36
+ TO { [ GROUP ] <replaceable class="parameter">role_name</replaceable> | PUBLIC } [, ...] [ WITH GRANT OPTION ]
37
+
38
+ GRANT { { SELECT | UPDATE }
39
+ [, ...] | ALL [ PRIVILEGES ] }
40
+ ON LARGE OBJECTS
41
+ TO { [ GROUP ] <replaceable class="parameter">role_name</replaceable> | PUBLIC } [, ...] [ WITH GRANT OPTION ]
42
+
43
+ REVOKE [ GRANT OPTION FOR ]
44
+ { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER | MAINTAIN }
45
+ [, ...] | ALL [ PRIVILEGES ] }
46
+ ON TABLES
47
+ FROM { [ GROUP ] <replaceable class="parameter">role_name</replaceable> | PUBLIC } [, ...]
48
+ [ CASCADE | RESTRICT ]
49
+
50
+ REVOKE [ GRANT OPTION FOR ]
51
+ { { USAGE | SELECT | UPDATE }
52
+ [, ...] | ALL [ PRIVILEGES ] }
53
+ ON SEQUENCES
54
+ FROM { [ GROUP ] <replaceable class="parameter">role_name</replaceable> | PUBLIC } [, ...]
55
+ [ CASCADE | RESTRICT ]
56
+
57
+ REVOKE [ GRANT OPTION FOR ]
58
+ { EXECUTE | ALL [ PRIVILEGES ] }
59
+ ON { FUNCTIONS | ROUTINES }
60
+ FROM { [ GROUP ] <replaceable class="parameter">role_name</replaceable> | PUBLIC } [, ...]
61
+ [ CASCADE | RESTRICT ]
62
+
63
+ REVOKE [ GRANT OPTION FOR ]
64
+ { USAGE | ALL [ PRIVILEGES ] }
65
+ ON TYPES
66
+ FROM { [ GROUP ] <replaceable class="parameter">role_name</replaceable> | PUBLIC } [, ...]
67
+ [ CASCADE | RESTRICT ]
68
+
69
+ REVOKE [ GRANT OPTION FOR ]
70
+ { { USAGE | CREATE }
71
+ [, ...] | ALL [ PRIVILEGES ] }
72
+ ON SCHEMAS
73
+ FROM { [ GROUP ] <replaceable class="parameter">role_name</replaceable> | PUBLIC } [, ...]
74
+ [ CASCADE | RESTRICT ]
75
+
76
+ REVOKE [ GRANT OPTION FOR ]
77
+ { { SELECT | UPDATE }
78
+ [, ...] | ALL [ PRIVILEGES ] }
79
+ ON LARGE OBJECTS
80
+ FROM { [ GROUP ] <replaceable class="parameter">role_name</replaceable> | PUBLIC } [, ...]
81
+ [ CASCADE | RESTRICT ]
82
+ </synopsis>
@@ -0,0 +1,44 @@
1
+ # path: doc/src/sgml/ref/alter_role.sgml
2
+ # blob: 7b0a04bc4637c7c08246e597a9acf4466b467fa2
3
+ # tag: REL_18_6 (commit 724edf9bde9d356724ad384a2e196edc3c9f80f7)
4
+ # fetched: 2026-09-29 via gh api repos/postgres/postgres/contents/...?ref=724edf9bde9d356724ad384a2e196edc3c9f80f7
5
+ # excerpt: the <synopsis> block plus the memberships sentence the GRANT/REVOKE design leans on; blob SHA is the full upstream file
6
+ #
7
+ <synopsis>
8
+ ALTER ROLE <replaceable class="parameter">role_specification</replaceable> [ WITH ] <replaceable class="parameter">option</replaceable> [ ... ]
9
+
10
+ <phrase>where <replaceable class="parameter">option</replaceable> can be:</phrase>
11
+
12
+ SUPERUSER | NOSUPERUSER
13
+ | CREATEDB | NOCREATEDB
14
+ | CREATEROLE | NOCREATEROLE
15
+ | INHERIT | NOINHERIT
16
+ | LOGIN | NOLOGIN
17
+ | REPLICATION | NOREPLICATION
18
+ | BYPASSRLS | NOBYPASSRLS
19
+ | CONNECTION LIMIT <replaceable class="parameter">connlimit</replaceable>
20
+ | [ ENCRYPTED ] PASSWORD '<replaceable class="parameter">password</replaceable>' | PASSWORD NULL
21
+ | VALID UNTIL '<replaceable class="parameter">timestamp</replaceable>'
22
+
23
+ ALTER ROLE <replaceable class="parameter">name</replaceable> RENAME TO <replaceable>new_name</replaceable>
24
+
25
+ ALTER ROLE { <replaceable class="parameter">role_specification</replaceable> | ALL } [ IN DATABASE <replaceable class="parameter">database_name</replaceable> ] SET <replaceable>configuration_parameter</replaceable> { TO | = } { <replaceable>value</replaceable> | DEFAULT }
26
+ ALTER ROLE { <replaceable class="parameter">role_specification</replaceable> | ALL } [ IN DATABASE <replaceable class="parameter">database_name</replaceable> ] SET <replaceable>configuration_parameter</replaceable> FROM CURRENT
27
+ ALTER ROLE { <replaceable class="parameter">role_specification</replaceable> | ALL } [ IN DATABASE <replaceable class="parameter">database_name</replaceable> ] RESET <replaceable>configuration_parameter</replaceable>
28
+ ALTER ROLE { <replaceable class="parameter">role_specification</replaceable> | ALL } [ IN DATABASE <replaceable class="parameter">database_name</replaceable> ] RESET ALL
29
+
30
+ <phrase>where <replaceable class="parameter">role_specification</replaceable> can be:</phrase>
31
+
32
+ <replaceable class="parameter">role_name</replaceable>
33
+ | CURRENT_ROLE
34
+ | CURRENT_USER
35
+ | SESSION_USER
36
+ </synopsis>
37
+
38
+ The first variant of this command listed in the synopsis can change
39
+ many of the role attributes that can be specified in
40
+ <link linkend="sql-createrole"><command>CREATE ROLE</command></link>.
41
+ (All the possible attributes are covered,
42
+ except that there are no options for adding or removing memberships; use
43
+ <link linkend="sql-grant"><command>GRANT</command></link> and
44
+ <link linkend="sql-revoke"><command>REVOKE</command></link> for that.)
@@ -0,0 +1,26 @@
1
+ # path: doc/src/sgml/ref/create_role.sgml
2
+ # blob: cee23b1ea6b4dcf2d9d356d07a582e64808c2912
3
+ # tag: REL_18_6 (commit 724edf9bde9d356724ad384a2e196edc3c9f80f7)
4
+ # fetched: 2026-09-29 via gh api repos/postgres/postgres/contents/...?ref=724edf9bde9d356724ad384a2e196edc3c9f80f7
5
+ # excerpt: the <synopsis> block only (the provenance test reads the option list); blob SHA is the full upstream file
6
+ #
7
+ <synopsis>
8
+ CREATE ROLE <replaceable class="parameter">name</replaceable> [ [ WITH ] <replaceable class="parameter">option</replaceable> [ ... ] ]
9
+
10
+ <phrase>where <replaceable class="parameter">option</replaceable> can be:</phrase>
11
+
12
+ SUPERUSER | NOSUPERUSER
13
+ | CREATEDB | NOCREATEDB
14
+ | CREATEROLE | NOCREATEROLE
15
+ | INHERIT | NOINHERIT
16
+ | LOGIN | NOLOGIN
17
+ | REPLICATION | NOREPLICATION
18
+ | BYPASSRLS | NOBYPASSRLS
19
+ | CONNECTION LIMIT <replaceable class="parameter">connlimit</replaceable>
20
+ | [ ENCRYPTED ] PASSWORD '<replaceable class="parameter">password</replaceable>' | PASSWORD NULL
21
+ | VALID UNTIL '<replaceable class="parameter">timestamp</replaceable>'
22
+ | IN ROLE <replaceable class="parameter">role_name</replaceable> [, ...]
23
+ | ROLE <replaceable class="parameter">role_name</replaceable> [, ...]
24
+ | ADMIN <replaceable class="parameter">role_name</replaceable> [, ...]
25
+ | SYSID <replaceable class="parameter">uid</replaceable>
26
+ </synopsis>