permdock 0.0.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (344) hide show
  1. package/README.md +327 -1
  2. package/dist/a2a/index.d.ts +169 -0
  3. package/dist/a2a/index.js +232 -0
  4. package/dist/adapter-context-mlWsVGGg.js +23 -0
  5. package/dist/ai-sdk/index.d.ts +95 -0
  6. package/dist/ai-sdk/index.js +154 -0
  7. package/dist/approval-required-TzNB9oQA.js +6 -0
  8. package/dist/approvals/index.d.ts +3 -0
  9. package/dist/approvals/index.js +5 -0
  10. package/dist/approvals-DbYAuNkG.js +224 -0
  11. package/dist/approvers-DT4AVyIg.js +52 -0
  12. package/dist/arazzo-BAgw9ap6.js +70 -0
  13. package/dist/arazzo-cmvX2jDe.js +54 -0
  14. package/dist/authzen/index.d.ts +39 -0
  15. package/dist/authzen/index.js +302 -0
  16. package/dist/better-auth/index.d.ts +109 -0
  17. package/dist/better-auth/index.js +344 -0
  18. package/dist/better-supabase/index.d.ts +206 -0
  19. package/dist/better-supabase/index.js +620 -0
  20. package/dist/bind-CVy3Espv.d.ts +25 -0
  21. package/dist/bind-VnYn2HKq.js +97 -0
  22. package/dist/boundary-BM8a_P6E.js +13 -0
  23. package/dist/boundary-BmHxVH1J.d.ts +15 -0
  24. package/dist/budget-JqcRqyhK.d.ts +11 -0
  25. package/dist/budget-NbEtbJC_.js +11 -0
  26. package/dist/canonical-json-DemiK4Vp.js +26 -0
  27. package/dist/capability-4qPdO9gk.js +173 -0
  28. package/dist/capability-Dq43tT1u.d.ts +99 -0
  29. package/dist/catalog/index.d.ts +12 -0
  30. package/dist/catalog/index.js +2 -0
  31. package/dist/catalog-BjZSovXQ.js +2 -0
  32. package/dist/catalog-doc-Dsc9y7sd.js +309 -0
  33. package/dist/catalog-h2tlKFkq.js +48 -0
  34. package/dist/catalog-path-CnI0XTFK.js +12 -0
  35. package/dist/catalog-z8q6bi_r.js +55 -0
  36. package/dist/claude-agent/index.d.ts +72 -0
  37. package/dist/claude-agent/index.js +77 -0
  38. package/dist/clerk/index.d.ts +65 -0
  39. package/dist/clerk/index.js +301 -0
  40. package/dist/cli/bin.d.ts +1 -0
  41. package/dist/cli/bin.js +20 -0
  42. package/dist/cli/index.d.ts +46 -0
  43. package/dist/cli/index.js +5 -0
  44. package/dist/clients-C7zLFuWT.d.ts +12 -0
  45. package/dist/clients-DjU5ABMy.js +23 -0
  46. package/dist/cloud/index.d.ts +90 -0
  47. package/dist/cloud/index.js +404 -0
  48. package/dist/cloud-BGhHS-lY.js +50 -0
  49. package/dist/cloud-Bo3e9Ak3.js +118 -0
  50. package/dist/collect-DDDv_ESs.js +502 -0
  51. package/dist/collect-DLlujdHC.js +83 -0
  52. package/dist/collect-rG2IQ3t0.js +2 -0
  53. package/dist/commands-DWOrSQic.js +97 -0
  54. package/dist/compact-y6vfu2_f.js +19 -0
  55. package/dist/compare-pfyVnBjE.js +12 -0
  56. package/dist/compile/index.d.ts +3 -0
  57. package/dist/compile/index.js +2 -0
  58. package/dist/compile-Ba4blROR.js +613 -0
  59. package/dist/compile-CNnl6uIt.d.ts +94 -0
  60. package/dist/config-BJiM-xAm.js +157 -0
  61. package/dist/config-Bn00Z3ks.js +36 -0
  62. package/dist/config-report-Dw_JcUqT.js +44 -0
  63. package/dist/connection-CU8MQxRi.js +194 -0
  64. package/dist/context-Ttp0ekMT.js +82 -0
  65. package/dist/convex/index.d.ts +45 -0
  66. package/dist/convex/index.js +65 -0
  67. package/dist/create-BWyx3jua.d.ts +245 -0
  68. package/dist/create-CPhDL6qx.js +253 -0
  69. package/dist/credential-8P81ff4u.js +306 -0
  70. package/dist/delegation-D8pUEuce.js +103 -0
  71. package/dist/describe-B_gVZEVi.js +94 -0
  72. package/dist/describe-PdoqESvg.d.ts +36 -0
  73. package/dist/diff-B8Tunc3o.js +451 -0
  74. package/dist/diff-CzqLxZ77.js +48 -0
  75. package/dist/digest-B3kc_PgQ.d.ts +19 -0
  76. package/dist/digest-BI-6aa6d.js +27 -0
  77. package/dist/doctor-WpvG6p4k.js +1194 -0
  78. package/dist/doctor-collect-ByfYlNv1.js +664 -0
  79. package/dist/doctor-rOr-4ZfS.js +53 -0
  80. package/dist/drizzle/index.d.ts +73 -0
  81. package/dist/drizzle/index.js +160 -0
  82. package/dist/duration-xK2jGFVc.js +25 -0
  83. package/dist/elysia/index.d.ts +49 -0
  84. package/dist/elysia/index.js +59 -0
  85. package/dist/errors-CWfoNg9N.js +47 -0
  86. package/dist/errors-Cz5zn0mW.js +123 -0
  87. package/dist/errors-DAqevpNk.d.ts +125 -0
  88. package/dist/errors-DRnGZHzF.js +30 -0
  89. package/dist/evaluation-items-CfCCejQd.js +40 -0
  90. package/dist/evaluations-tz6D9A2G.js +461 -0
  91. package/dist/eve/index.d.ts +86 -0
  92. package/dist/eve/index.js +176 -0
  93. package/dist/expiry-BoBJ8Tvc.js +7 -0
  94. package/dist/express/index.d.ts +23 -0
  95. package/dist/express/index.js +78 -0
  96. package/dist/fastify/index.d.ts +33 -0
  97. package/dist/fastify/index.js +92 -0
  98. package/dist/fields-BMl1RxoX.js +26 -0
  99. package/dist/files-DWUN9PzI.js +125 -0
  100. package/dist/fixtures-ht28Cplr.js +67 -0
  101. package/dist/freeze-CrU8nQeX.js +60 -0
  102. package/dist/from-snapshot-C3sHpZNS.js +569 -0
  103. package/dist/generate-CH7ThJ14.js +173 -0
  104. package/dist/grantee-Cv5Sogfv.js +602 -0
  105. package/dist/graph-sql-B-dsAT6j.d.ts +29 -0
  106. package/dist/headers-BZSDieNT.js +6 -0
  107. package/dist/headers-Cf-zWvsO.d.ts +6 -0
  108. package/dist/helpers-H_KARDVC.js +421 -0
  109. package/dist/hono/index.d.ts +48 -0
  110. package/dist/hono/index.js +99 -0
  111. package/dist/hosted-DJQw46hn.js +266 -0
  112. package/dist/http-BIhmLfCc.js +95 -0
  113. package/dist/http-DPuDaChb.d.ts +13 -0
  114. package/dist/http-SO7qGttf.js +44 -0
  115. package/dist/ids-DC4V4CFu.js +18 -0
  116. package/dist/index-A0YNL8jZ.d.ts +177 -0
  117. package/dist/index-CtE07CBF.d.ts +6 -0
  118. package/dist/index-D3vbkoSI.d.ts +483 -0
  119. package/dist/index-D6_cSa1z.d.ts +201 -0
  120. package/dist/index.d.ts +16 -0
  121. package/dist/index.js +26 -0
  122. package/dist/instance-options-BK_rNOSC.d.ts +11 -0
  123. package/dist/instance-options-Dhhcnm3y.js +22 -0
  124. package/dist/json-schema-BsAflUGW.js +106 -0
  125. package/dist/jwt/index.d.ts +91 -0
  126. package/dist/jwt/index.js +590 -0
  127. package/dist/kernel-GSQnMz3O.js +208 -0
  128. package/dist/kysely/index.d.ts +78 -0
  129. package/dist/kysely/index.js +129 -0
  130. package/dist/live-options-H2eG8dfJ.js +60 -0
  131. package/dist/load-DhWEB9P1.js +75 -0
  132. package/dist/load-DwJUafYN.js +2 -0
  133. package/dist/load-jose-BL6LH4bL.js +11 -0
  134. package/dist/lru-8q4WZjBV.js +28 -0
  135. package/dist/manifest-iaoBXHKc.js +783 -0
  136. package/dist/manifest-uDS9y5de.d.ts +206 -0
  137. package/dist/map-AcxK9o_D.js +147 -0
  138. package/dist/map-claims-Z4QZOiFF.js +369 -0
  139. package/dist/map-error-pgUWNNtG.js +23 -0
  140. package/dist/markers-B0hYLvMD.js +60 -0
  141. package/dist/may-use-DndQ5tQ-.js +77 -0
  142. package/dist/mcp/index.d.ts +159 -0
  143. package/dist/mcp/index.js +603 -0
  144. package/dist/nest/index.d.ts +75 -0
  145. package/dist/nest/index.js +261 -0
  146. package/dist/next/client.d.ts +23 -0
  147. package/dist/next/client.js +33 -0
  148. package/dist/next/index.d.ts +93 -0
  149. package/dist/next/index.js +180 -0
  150. package/dist/next/plugin.d.ts +14 -0
  151. package/dist/next/plugin.js +33 -0
  152. package/dist/node/index.d.ts +24 -0
  153. package/dist/node/index.js +34 -0
  154. package/dist/openai/index.d.ts +62 -0
  155. package/dist/openai/index.js +92 -0
  156. package/dist/openapi/index.d.ts +176 -0
  157. package/dist/openapi/index.js +3 -0
  158. package/dist/openapi-Bbg4wGVL.js +164 -0
  159. package/dist/openapi-BqRBvAng.js +538 -0
  160. package/dist/openapi-CqqEbHsL.js +250 -0
  161. package/dist/openapi-import-cmwetbzw.js +5959 -0
  162. package/dist/openapi-schema--ARjyfQr.js +6902 -0
  163. package/dist/orpc/index.d.ts +51 -0
  164. package/dist/orpc/index.js +145 -0
  165. package/dist/otel/index.d.ts +13 -0
  166. package/dist/otel/index.js +202 -0
  167. package/dist/package-root-zGkxO3oN.js +30 -0
  168. package/dist/parse-BuyjxhZV.js +53 -0
  169. package/dist/parse-local-manifest-BkGQNzAh.d.ts +10 -0
  170. package/dist/parse-local-manifest-BrMozJCo.js +36 -0
  171. package/dist/pdp/index.d.ts +22 -0
  172. package/dist/pdp/index.js +682 -0
  173. package/dist/peer-BOr_kJE1.js +31 -0
  174. package/dist/permdock-CzqXjCpU.js +3471 -0
  175. package/dist/permissions-CDgvKG5L.d.ts +52 -0
  176. package/dist/permissions-CpZrivYv.js +142 -0
  177. package/dist/permissions-DVoF6dMt.js +662 -0
  178. package/dist/permissions-DttnqqxC.d.ts +214 -0
  179. package/dist/pins-8ILTftC9.js +12 -0
  180. package/dist/policy-CFZAr_Al.d.ts +2252 -0
  181. package/dist/policy-D8UFyERw.d.ts +20 -0
  182. package/dist/policy-xyWg7QdR.js +1122 -0
  183. package/dist/powersync-A8x_Yyvh.js +2 -0
  184. package/dist/powersync-C7kLglqX.js +540 -0
  185. package/dist/powersync-yW1UUFzp.js +62 -0
  186. package/dist/prisma/index.d.ts +136 -0
  187. package/dist/prisma/index.js +455 -0
  188. package/dist/problem-B43ztKIm.js +191 -0
  189. package/dist/problem-details-CkL50EEf.d.ts +7 -0
  190. package/dist/problem-details-_AMOYz-w.js +144 -0
  191. package/dist/prompt-CXYhLfsS.js +32 -0
  192. package/dist/protected-CNsMzrVd.d.ts +27 -0
  193. package/dist/protected-Cs6kTaHo.js +100 -0
  194. package/dist/protected-bZs6rbT1.d.ts +40 -0
  195. package/dist/provider-Cjr62YMV.d.ts +6 -0
  196. package/dist/provider-DLzpb2Xz.js +52 -0
  197. package/dist/provider-store-DNyC1y48.js +43 -0
  198. package/dist/react/index.d.ts +8 -0
  199. package/dist/react/index.js +7 -0
  200. package/dist/react/provider-client.d.ts +2 -0
  201. package/dist/react/provider-client.js +3 -0
  202. package/dist/react-native/index.d.ts +198 -0
  203. package/dist/react-native/index.js +696 -0
  204. package/dist/refs-KYb4ntaz.js +91 -0
  205. package/dist/relations-cjOL01hZ.js +505 -0
  206. package/dist/replay-BsOyTrdV.js +28 -0
  207. package/dist/replay-sqBGMnNs.d.ts +5 -0
  208. package/dist/resource-ref-CaS9yVPi.js +20 -0
  209. package/dist/revocations-Bhr0aMIC.js +27 -0
  210. package/dist/revocations-Cy06JNx2.d.ts +21 -0
  211. package/dist/rls-BMNydpHk.js +2521 -0
  212. package/dist/rls-CEvs64Kj.js +238 -0
  213. package/dist/rls-fields-BMasREhR.js +3502 -0
  214. package/dist/rls-graph-pc9fuXYm.js +435 -0
  215. package/dist/rls-import-D8F7j35Q.js +943 -0
  216. package/dist/rls-migrate-7wikfrVI.js +367 -0
  217. package/dist/rls-ownership-B5Lkq62W.js +843 -0
  218. package/dist/rls-shared-aOQ4hGTO.js +493 -0
  219. package/dist/rls-verify-D8B7dOTh.js +745 -0
  220. package/dist/row-check-Dt35czLy.d.ts +40 -0
  221. package/dist/rpc-DOK54_CS.js +89 -0
  222. package/dist/run-YXCJDNYk.js +174 -0
  223. package/dist/runtime-CB8gQFvS.js +11 -0
  224. package/dist/saas-Bj_FFkjN.js +1203 -0
  225. package/dist/schema-D3MnDMxa.js +300 -0
  226. package/dist/scim/index.d.ts +2 -0
  227. package/dist/scim/index.js +2 -0
  228. package/dist/scim-BFGBBAqR.js +1445 -0
  229. package/dist/scopes-CVdPrWN-.js +239 -0
  230. package/dist/server/index.d.ts +134 -0
  231. package/dist/server/index.js +11 -0
  232. package/dist/server-DlZ28Oz5.js +268 -0
  233. package/dist/sha256-BO0swRXL.js +150 -0
  234. package/dist/shared-DRu8VFVM.js +123 -0
  235. package/dist/sink-Bd9PSyfq.js +141 -0
  236. package/dist/sink-Gs6TTVa-.d.ts +104 -0
  237. package/dist/skills-Biq5uup3.js +192 -0
  238. package/dist/skills-JaymNCdK.js +56 -0
  239. package/dist/snapshot-Enxd0n-s.js +975 -0
  240. package/dist/snapshot-cache-D6jLelln.js +44 -0
  241. package/dist/snapshot-cache-DwQH8ufx.d.ts +45 -0
  242. package/dist/solid/index.d.ts +93 -0
  243. package/dist/solid/index.js +188 -0
  244. package/dist/sources-B0UvrJ21.js +534 -0
  245. package/dist/sources-BcJgw0lt.d.ts +192 -0
  246. package/dist/sql-xdg5f4Fi.js +27 -0
  247. package/dist/src-CSbUiozF.js +568 -0
  248. package/dist/ssf/index.d.ts +4 -0
  249. package/dist/ssf/index.js +596 -0
  250. package/dist/store-DMAWwAJV.js +371 -0
  251. package/dist/store-D_pjn91-.d.ts +36 -0
  252. package/dist/store-options-yO0V6gRn.js +716 -0
  253. package/dist/stores-4_sqiOA1.js +87 -0
  254. package/dist/stores-DVR5NHLE.d.ts +52 -0
  255. package/dist/stream-DDpvynSB.js +66 -0
  256. package/dist/stream-DlvG2hs-.d.ts +12 -0
  257. package/dist/style-CTm1AXDT.js +22 -0
  258. package/dist/subject-C6dLxqHU.js +24 -0
  259. package/dist/subject-settings-BwBmCdTR.js +128 -0
  260. package/dist/supabase/index.d.ts +183 -0
  261. package/dist/supabase/index.js +5 -0
  262. package/dist/supabase/middleware.d.ts +82 -0
  263. package/dist/supabase/middleware.js +102 -0
  264. package/dist/supabase-CwafwxxF.js +83 -0
  265. package/dist/supabase-DTBaC20O.js +774 -0
  266. package/dist/supabase-config-Bs44dare.js +472 -0
  267. package/dist/supabase-hook-BuxLQLpU.js +1814 -0
  268. package/dist/supabase-hook-D5qVd_D8.js +2 -0
  269. package/dist/supautils-DYZnzRWV.js +91 -0
  270. package/dist/svelte/PermissionBoundary.svelte +37 -0
  271. package/dist/svelte/Protected.svelte +40 -0
  272. package/dist/svelte/index.d.ts +13 -0
  273. package/dist/svelte/index.js +107 -0
  274. package/dist/svelte/runtime.d.ts +7 -0
  275. package/dist/svelte/runtime.js +4 -0
  276. package/dist/svelte/source.d.ts +13 -0
  277. package/dist/svelte/source.js +11 -0
  278. package/dist/terminal/index.d.ts +163 -0
  279. package/dist/terminal/index.js +833 -0
  280. package/dist/testing/index.d.ts +745 -0
  281. package/dist/testing/index.js +3672 -0
  282. package/dist/testing/saas/index.d.ts +194 -0
  283. package/dist/testing/saas/index.js +3 -0
  284. package/dist/testing/saas/permissions.d.ts +2 -0
  285. package/dist/testing/saas/permissions.js +2 -0
  286. package/dist/text-diff-BdkkYSbi.js +15 -0
  287. package/dist/thenable-okc2xDsj.js +10 -0
  288. package/dist/timeout-D51niuQP.js +8 -0
  289. package/dist/token-CIWxJOCh.js +50 -0
  290. package/dist/trpc/index.d.ts +61 -0
  291. package/dist/trpc/index.js +122 -0
  292. package/dist/types-9AWO9EGt.d.ts +197 -0
  293. package/dist/types-BPxgszlT.d.ts +550 -0
  294. package/dist/types-BVyImy5I.d.ts +120 -0
  295. package/dist/types-Bvc4oWT6.d.ts +9 -0
  296. package/dist/types-C3s9xVJG.d.ts +48 -0
  297. package/dist/types-Dnemwd77.d.ts +183 -0
  298. package/dist/types-kxznc7cn.d.ts +52 -0
  299. package/dist/types-vKyAMtcX.d.ts +157 -0
  300. package/dist/types-vNSDF7Dq.d.ts +66 -0
  301. package/dist/types-yF5LmQVD.d.ts +306 -0
  302. package/dist/unplugin/index.d.ts +7 -0
  303. package/dist/unplugin/index.js +31 -0
  304. package/dist/usage-D07N9QJ3.js +42 -0
  305. package/dist/usage-D82l1CwK.js +2 -0
  306. package/dist/usage-DG1oeCca.js +693 -0
  307. package/dist/validation-error-CnjZ4t92.js +33 -0
  308. package/dist/validation-error-CtF23SrC.d.ts +26 -0
  309. package/dist/validity-uOp8UpYn.js +245 -0
  310. package/dist/verifier-BxBo6I44.js +466 -0
  311. package/dist/version-BvacVTZR.js +17 -0
  312. package/dist/views-Soe7bGSC.js +95 -0
  313. package/dist/vocabulary-DA8a8zif.d.ts +56 -0
  314. package/dist/vue/index.d.ts +79 -0
  315. package/dist/vue/index.js +196 -0
  316. package/dist/watch-Etoa_Mvr.js +2 -0
  317. package/dist/watch-UihESpsJ.js +128 -0
  318. package/dist/webmcp/index.d.ts +75 -0
  319. package/dist/webmcp/index.js +307 -0
  320. package/package.json +450 -5
  321. package/rulesets/permdock.yaml +29 -0
  322. package/schemas/approval-request-v1.json +175 -0
  323. package/schemas/catalog-v1.json +535 -0
  324. package/schemas/openapi/oas-3.1.json +1298 -0
  325. package/schemas/openapi/oas-3.2.json +1516 -0
  326. package/schemas/openapi/overlay-1.1.json +79 -0
  327. package/schemas/supabase-claims-v1.json +144 -0
  328. package/schemas/supabase-manifest-v1.json +361 -0
  329. package/skills/permdock/SKILL.md +66 -0
  330. package/skills/permdock-agents/SKILL.md +77 -0
  331. package/skills/permdock-agents/references/runtimes.md +213 -0
  332. package/skills/permdock-approvals/SKILL.md +80 -0
  333. package/skills/permdock-approvals/references/stores-and-resume.md +94 -0
  334. package/skills/permdock-audit/SKILL.md +67 -0
  335. package/skills/permdock-credentials/SKILL.md +55 -0
  336. package/skills/permdock-credentials/references/tokens-keys-links.md +132 -0
  337. package/skills/permdock-data/SKILL.md +57 -0
  338. package/skills/permdock-data/references/queries-and-rls.md +62 -0
  339. package/skills/permdock-data/references/relationships.md +67 -0
  340. package/skills/permdock-tenancy/SKILL.md +80 -0
  341. package/skills/permdock-tenancy/references/ownership-and-custom-roles.md +89 -0
  342. package/skills/permdock-wire/SKILL.md +116 -0
  343. package/skills/permdock-wire/references/adapters.md +492 -0
  344. package/skills/permdock-wire/references/policy-options.md +45 -0
@@ -0,0 +1,2 @@
1
+ import { i as runSupabase } from "./supabase-hook-BuxLQLpU.js";
2
+ export { runSupabase };
@@ -0,0 +1,91 @@
1
+ import { d as group, p as sqlStatements } from "./supabase-config-Bs44dare.js";
2
+ //#region src/cli/supautils.ts
3
+ /** `supautils.reserved_roles` of supabase/postgres 17.11.0.002 (supautils 3.4.4). */
4
+ const RESERVED_ROLES = /* @__PURE__ */ new Set([
5
+ "supabase_admin",
6
+ "supabase_auth_admin",
7
+ "supabase_storage_admin",
8
+ "supabase_read_only_user",
9
+ "supabase_realtime_admin",
10
+ "supabase_replication_admin",
11
+ "supabase_etl_admin",
12
+ "supabase_privileged_role",
13
+ "dashboard_user",
14
+ "pgbouncer",
15
+ "service_role",
16
+ "authenticator",
17
+ "authenticated",
18
+ "anon"
19
+ ]);
20
+ /** The `*` entries of `reserved_roles`: `postgres` may still `set` or `reset` their settings. */
21
+ const CONFIGURABLE_ROLES = /* @__PURE__ */ new Set([
22
+ "service_role",
23
+ "authenticator",
24
+ "authenticated",
25
+ "anon"
26
+ ]);
27
+ /** `supautils.reserved_memberships` of the same image. */
28
+ const RESERVED_MEMBERSHIPS = /* @__PURE__ */ new Set([
29
+ "pg_read_server_files",
30
+ "pg_write_server_files",
31
+ "pg_execute_server_program",
32
+ "supabase_admin",
33
+ "supabase_auth_admin",
34
+ "supabase_storage_admin",
35
+ "supabase_read_only_user",
36
+ "supabase_realtime_admin",
37
+ "supabase_replication_admin",
38
+ "supabase_etl_admin",
39
+ "dashboard_user",
40
+ "pgbouncer",
41
+ "authenticator"
42
+ ]);
43
+ const ROLE = String.raw`(?:"[^"]+"|\w+)`;
44
+ const ROLES = String.raw`${ROLE}(?:\s*,\s*${ROLE})*`;
45
+ const ALTER_ROLE = new RegExp(String.raw`^alter\s+(role|user|group)\s+(${ROLE})\s+([\s\S]*)$`, "iu");
46
+ const DROP_ROLE = new RegExp(String.raw`^drop\s+(?:role|user|group)\s+(?:if\s+exists\s+)?(${ROLES})\s*$`, "iu");
47
+ const GRANT_ROLE = /^grant\s+([\s\S]+?)\s+to\s/iu;
48
+ const CREATE_IN_ROLE = new RegExp(String.raw`^create\s+(?:role|user|group)\s+${ROLE}\b[\s\S]*?\bin\s+(?:role|group)\s+(${ROLES})`, "iu");
49
+ const CONFIG_CHANGE = /^(?:in\s+database\s+\S+\s+)?(?:set|reset)\s/iu;
50
+ function roleName(name) {
51
+ return name.replaceAll("\"", "").toLowerCase();
52
+ }
53
+ function roleList(list) {
54
+ return list.split(",").map((name) => roleName(name.trim()));
55
+ }
56
+ function rejection(text) {
57
+ const alter = ALTER_ROLE.exec(text);
58
+ if (alter !== null) {
59
+ const role = roleName(group(alter, 2));
60
+ const rest = group(alter, 3);
61
+ if (group(alter, 1).toLowerCase() === "group" && /^add\s/iu.test(rest)) return RESERVED_MEMBERSHIPS.has(role) ? `grants membership in the reserved role ${role}` : void 0;
62
+ if (!RESERVED_ROLES.has(role) || CONFIGURABLE_ROLES.has(role) && CONFIG_CHANGE.test(rest)) return;
63
+ return `changes the reserved role ${role}`;
64
+ }
65
+ const drop = DROP_ROLE.exec(text);
66
+ if (drop !== null) {
67
+ const role = roleList(group(drop, 1)).find((name) => RESERVED_ROLES.has(name));
68
+ return role === void 0 ? void 0 : `drops the reserved role ${role}`;
69
+ }
70
+ const grant = GRANT_ROLE.exec(text);
71
+ const granted = CREATE_IN_ROLE.exec(text)?.[1] ?? (grant === null || /\bon\b/iu.test(group(grant, 1)) ? void 0 : group(grant, 1));
72
+ if (granted === void 0) return;
73
+ const role = roleList(granted).find((name) => RESERVED_MEMBERSHIPS.has(name));
74
+ return role === void 0 ? void 0 : `grants membership in the reserved role ${role}`;
75
+ }
76
+ /**
77
+ * The statements of `sql` that supautils rejects for a non-superuser:
78
+ * changing or dropping a reserved role, other than `set` or `reset` on the
79
+ * four API roles, and granting a reserved membership.
80
+ */
81
+ function supautilsRejections(sql) {
82
+ return sqlStatements(sql).flatMap(({ line, text }) => {
83
+ const reason = rejection(text);
84
+ return reason === void 0 ? [] : [{
85
+ line,
86
+ reason
87
+ }];
88
+ });
89
+ }
90
+ //#endregion
91
+ export { supautilsRejections as t };
@@ -0,0 +1,37 @@
1
+ <script lang="ts">
2
+ import {
3
+ boundaryDigest,
4
+ boundaryFallback,
5
+ type PermissionBoundaryProps,
6
+ type PermissionBoundaryState,
7
+ } from './runtime.js';
8
+
9
+ let { children, denied, approval }: PermissionBoundaryProps = $props();
10
+
11
+ let refused = $state<PermissionBoundaryState | null>(null);
12
+
13
+ // A rethrown error reaches the next boundary up.
14
+ function onerror(error: unknown, reset: () => void): void {
15
+ const digest = boundaryDigest(error);
16
+ if (digest === null) {
17
+ throw error;
18
+ }
19
+ refused = {
20
+ ...digest,
21
+ retry: (): void => {
22
+ refused = null;
23
+ reset();
24
+ },
25
+ };
26
+ }
27
+ </script>
28
+
29
+ <svelte:boundary {onerror}>
30
+ {@render children?.()}
31
+ {#snippet failed()}
32
+ {#if refused !== null}
33
+ {@const fallback = boundaryFallback(refused, { denied, approval })}
34
+ {@render fallback?.(refused)}
35
+ {/if}
36
+ {/snippet}
37
+ </svelte:boundary>
@@ -0,0 +1,40 @@
1
+ <script lang="ts">
2
+ import { onDestroy } from 'svelte';
3
+
4
+ import {
5
+ getStore,
6
+ scopedFor,
7
+ viewFor,
8
+ type ProtectedProps,
9
+ } from './runtime.js';
10
+
11
+ let {
12
+ permission,
13
+ data,
14
+ tenant,
15
+ children,
16
+ pending,
17
+ fallback,
18
+ }: ProtectedProps = $props();
19
+
20
+ const store = getStore();
21
+ let tick = $state(0);
22
+ onDestroy(
23
+ store.subscribe(() => {
24
+ tick += 1;
25
+ }),
26
+ );
27
+ const scoped = $derived(scopedFor(store, tenant, tick));
28
+ const view = $derived.by(() => {
29
+ const generation = tick;
30
+ return viewFor(store, permission, data, scoped, generation);
31
+ });
32
+ </script>
33
+
34
+ {#if view.slot === 'pending'}
35
+ {@render pending?.()}
36
+ {:else if view.slot === 'fallback'}
37
+ {@render fallback?.(view.decision)}
38
+ {:else}
39
+ {@render children?.(view.decision)}
40
+ {/if}
@@ -0,0 +1,13 @@
1
+ import { n as requiredPlans } from "../problem-details-CkL50EEf.js";
2
+ import { i as describe } from "../describe-PdoqESvg.js";
3
+ import { t as PermissionBoundaryState } from "../boundary-BmHxVH1J.js";
4
+ import { t as approvalHeaders } from "../headers-Cf-zWvsO.js";
5
+ import { a as FilterResult, c as SubjectView, i as ClientStatus, l as TenantView, n as ApprovalState, o as PermissionSet, r as ClientPermDock, s as PermissionState, t as ApprovalHandle, u as UseRolesOptions } from "../types-kxznc7cn.js";
6
+ import { i as PermissionBoundaryProps, t as ProtectedProps } from "../protected-bZs6rbT1.js";
7
+ import { a as getPermDock, c as permissions, d as subject, f as tenant, i as filtered, l as roles, n as assignable, o as memberships, p as PermDockSvelteOptions, r as assignablePermissions, s as permission, t as approval, u as setPermDock } from "../stores-DVR5NHLE.js";
8
+ import { Component } from "svelte";
9
+ //#region src/svelte/index.d.ts
10
+ export declare const Protected: Component<ProtectedProps>;
11
+ export declare const PermissionBoundary: Component<PermissionBoundaryProps>;
12
+ //#endregion
13
+ export { type ApprovalHandle, type ApprovalState, type ClientPermDock, type ClientStatus, type FilterResult, type PermDockSvelteOptions, type PermissionBoundaryProps, type PermissionBoundaryState, type PermissionSet, type PermissionState, type ProtectedProps, type SubjectView, type TenantView, type UseRolesOptions, approval, approvalHeaders, assignable, assignablePermissions, describe, filtered, getPermDock, memberships, permission, permissions, requiredPlans, roles, setPermDock, subject, tenant };
@@ -0,0 +1,107 @@
1
+ import { r as requiredPlans } from "../problem-details-_AMOYz-w.js";
2
+ import { t as describe } from "../describe-B_gVZEVi.js";
3
+ import { t as approvalHeaders } from "../headers-BZSDieNT.js";
4
+ import { n as boundaryFallback, t as boundaryDigest } from "../boundary-BM8a_P6E.js";
5
+ import { t as getStore } from "../context-Ttp0ekMT.js";
6
+ import { n as viewFor, t as scopedFor } from "../runtime-CB8gQFvS.js";
7
+ import { a as getPermDock, c as permissions, d as subject, f as tenant, i as filtered, l as roles, n as assignable, o as memberships, r as assignablePermissions, s as permission, t as approval, u as setPermDock } from "../stores-4_sqiOA1.js";
8
+ import "svelte/internal/disclose-version";
9
+ import * as $ from "svelte/internal/client";
10
+ import { onDestroy } from "svelte";
11
+ //#region src/svelte/PermissionBoundary.svelte
12
+ function PermissionBoundary$1($$anchor, $$props) {
13
+ $.push($$props, true);
14
+ let refused = $.state(null);
15
+ function onerror(error, reset) {
16
+ const digest = boundaryDigest(error);
17
+ if (digest === null) throw error;
18
+ $.set(refused, {
19
+ ...digest,
20
+ retry: () => {
21
+ $.set(refused, null);
22
+ reset();
23
+ }
24
+ }, true);
25
+ }
26
+ var fragment = $.comment();
27
+ var node = $.first_child(fragment);
28
+ {
29
+ const failed = ($$anchor) => {
30
+ var fragment_1 = $.comment();
31
+ var node_1 = $.first_child(fragment_1);
32
+ var consequent = ($$anchor) => {
33
+ const fallback = $.derived(() => boundaryFallback($.get(refused), {
34
+ denied: $$props.denied,
35
+ approval: $$props.approval
36
+ }));
37
+ var fragment_2 = $.comment();
38
+ var node_2 = $.first_child(fragment_2);
39
+ $.snippet(node_2, () => $.get(fallback) ?? $.noop, () => $.get(refused));
40
+ $.append($$anchor, fragment_2);
41
+ };
42
+ $.if(node_1, ($$render) => {
43
+ if ($.get(refused) !== null) $$render(consequent);
44
+ });
45
+ $.append($$anchor, fragment_1);
46
+ };
47
+ $.boundary(node, {
48
+ onerror,
49
+ failed
50
+ }, ($$anchor) => {
51
+ var fragment_3 = $.comment();
52
+ var node_3 = $.first_child(fragment_3);
53
+ $.snippet(node_3, () => $$props.children ?? $.noop);
54
+ $.append($$anchor, fragment_3);
55
+ });
56
+ }
57
+ $.append($$anchor, fragment);
58
+ $.pop();
59
+ }
60
+ //#endregion
61
+ //#region src/svelte/Protected.svelte
62
+ function Protected$1($$anchor, $$props) {
63
+ $.push($$props, true);
64
+ const store = getStore();
65
+ let tick = $.state(0);
66
+ onDestroy(store.subscribe(() => {
67
+ $.set(tick, $.get(tick) + 1);
68
+ }));
69
+ const scoped = $.derived(() => scopedFor(store, $$props.tenant, $.get(tick)));
70
+ const view = $.derived(() => {
71
+ const generation = $.get(tick);
72
+ return viewFor(store, $$props.permission, $$props.data, $.get(scoped), generation);
73
+ });
74
+ var fragment = $.comment();
75
+ var node = $.first_child(fragment);
76
+ var consequent = ($$anchor) => {
77
+ var fragment_1 = $.comment();
78
+ var node_1 = $.first_child(fragment_1);
79
+ $.snippet(node_1, () => $$props.pending ?? $.noop);
80
+ $.append($$anchor, fragment_1);
81
+ };
82
+ var consequent_1 = ($$anchor) => {
83
+ var fragment_2 = $.comment();
84
+ var node_2 = $.first_child(fragment_2);
85
+ $.snippet(node_2, () => $$props.fallback ?? $.noop, () => $.get(view).decision);
86
+ $.append($$anchor, fragment_2);
87
+ };
88
+ var alternate = ($$anchor) => {
89
+ var fragment_3 = $.comment();
90
+ var node_3 = $.first_child(fragment_3);
91
+ $.snippet(node_3, () => $$props.children ?? $.noop, () => $.get(view).decision);
92
+ $.append($$anchor, fragment_3);
93
+ };
94
+ $.if(node, ($$render) => {
95
+ if ($.get(view).slot === "pending") $$render(consequent);
96
+ else if ($.get(view).slot === "fallback") $$render(consequent_1, 1);
97
+ else $$render(alternate, -1);
98
+ });
99
+ $.append($$anchor, fragment);
100
+ $.pop();
101
+ }
102
+ //#endregion
103
+ //#region src/svelte/index.ts
104
+ const Protected = Protected$1;
105
+ const PermissionBoundary = PermissionBoundary$1;
106
+ //#endregion
107
+ export { PermissionBoundary, Protected, approval, approvalHeaders, assignable, assignablePermissions, describe, filtered, getPermDock, memberships, permission, permissions, requiredPlans, roles, setPermDock, subject, tenant };
@@ -0,0 +1,7 @@
1
+ import { n as boundaryDigest, r as boundaryFallback, t as PermissionBoundaryState } from "../boundary-BmHxVH1J.js";
2
+ import { t as ClientStore } from "../store-D_pjn91-.js";
3
+ import { i as PermissionBoundaryProps, n as scopedFor, r as viewFor, t as ProtectedProps } from "../protected-bZs6rbT1.js";
4
+ //#region src/svelte/context.d.ts
5
+ export declare function getStore(): ClientStore;
6
+ //#endregion
7
+ export { type PermissionBoundaryProps, type PermissionBoundaryState, type ProtectedProps, boundaryDigest, boundaryFallback, scopedFor, viewFor };
@@ -0,0 +1,4 @@
1
+ import { n as boundaryFallback, t as boundaryDigest } from "../boundary-BM8a_P6E.js";
2
+ import { t as getStore } from "../context-Ttp0ekMT.js";
3
+ import { n as viewFor, t as scopedFor } from "../runtime-CB8gQFvS.js";
4
+ export { boundaryDigest, boundaryFallback, getStore, scopedFor, viewFor };
@@ -0,0 +1,13 @@
1
+ import { n as requiredPlans } from "../problem-details-CkL50EEf.js";
2
+ import { i as describe } from "../describe-PdoqESvg.js";
3
+ import { t as PermissionBoundaryState } from "../boundary-BmHxVH1J.js";
4
+ import { t as approvalHeaders } from "../headers-Cf-zWvsO.js";
5
+ import { a as FilterResult, c as SubjectView, i as ClientStatus, l as TenantView, n as ApprovalState, o as PermissionSet, r as ClientPermDock, s as PermissionState, t as ApprovalHandle, u as UseRolesOptions } from "../types-kxznc7cn.js";
6
+ import { i as PermissionBoundaryProps, t as ProtectedProps } from "../protected-bZs6rbT1.js";
7
+ import { a as getPermDock, c as permissions, d as subject, f as tenant, i as filtered, l as roles, n as assignable, o as memberships, p as PermDockSvelteOptions, r as assignablePermissions, s as permission, t as approval, u as setPermDock } from "../stores-DVR5NHLE.js";
8
+ import { Component } from "svelte";
9
+ //#region src/svelte/source.d.ts
10
+ export declare const Protected: Component<ProtectedProps>;
11
+ export declare const PermissionBoundary: Component<PermissionBoundaryProps>;
12
+ //#endregion
13
+ export { type ApprovalHandle, type ApprovalState, type ClientPermDock, type ClientStatus, type FilterResult, type PermDockSvelteOptions, type PermissionBoundaryProps, type PermissionBoundaryState, type PermissionSet, type PermissionState, type ProtectedProps, type SubjectView, type TenantView, type UseRolesOptions, approval, approvalHeaders, assignable, assignablePermissions, describe, filtered, getPermDock, memberships, permission, permissions, requiredPlans, roles, setPermDock, subject, tenant };
@@ -0,0 +1,11 @@
1
+ import { r as requiredPlans } from "../problem-details-_AMOYz-w.js";
2
+ import { t as describe } from "../describe-B_gVZEVi.js";
3
+ import { t as approvalHeaders } from "../headers-BZSDieNT.js";
4
+ import { a as getPermDock, c as permissions, d as subject, f as tenant, i as filtered, l as roles, n as assignable, o as memberships, r as assignablePermissions, s as permission, t as approval, u as setPermDock } from "../stores-4_sqiOA1.js";
5
+ import PermissionBoundaryComponent from "./PermissionBoundary.svelte";
6
+ import ProtectedComponent from "./Protected.svelte";
7
+ //#region src/svelte/source.ts
8
+ const Protected = ProtectedComponent;
9
+ const PermissionBoundary = PermissionBoundaryComponent;
10
+ //#endregion
11
+ export { PermissionBoundary, Protected, approval, approvalHeaders, assignable, assignablePermissions, describe, filtered, getPermDock, memberships, permission, permissions, requiredPlans, roles, setPermDock, subject, tenant };
@@ -0,0 +1,163 @@
1
+ import { C as Policy, D as PolicyVocabulary, Nr as Principal, Pr as Subject, Yn as Decision, ln as PermDock } from "../policy-CFZAr_Al.js";
2
+ import { f as Permission } from "../permissions-DttnqqxC.js";
3
+ import { f as ApprovalStore } from "../types-vKyAMtcX.js";
4
+ import { a as ProblemDetails, t as ApprovalHint } from "../errors-DAqevpNk.js";
5
+ import { t as InstanceOptions } from "../instance-options-BK_rNOSC.js";
6
+ //#region src/terminal/types.d.ts
7
+ type TokenSourceName = "device" | "keychain" | "env" | "ci-oidc";
8
+ type TokenSource = TokenSourceName | {
9
+ readonly env: string;
10
+ } | {
11
+ readonly source: TokenSourceName;
12
+ readonly env?: string;
13
+ /** `ci-oidc`: the audience requested from GitHub Actions (`aud`). */
14
+ readonly audience?: string;
15
+ };
16
+ type TokenHelper = (sources: readonly TokenSource[]) => Promise<string | null>;
17
+ type TokenContext = {
18
+ readonly token: TokenHelper;
19
+ readonly profile: string;
20
+ };
21
+ type DeviceFlowOptions = {
22
+ readonly issuer?: string;
23
+ readonly clientId: string;
24
+ readonly scope?: string;
25
+ readonly authorizationEndpoint?: string;
26
+ readonly tokenEndpoint?: string;
27
+ readonly revocationEndpoint?: string;
28
+ readonly open?: (url: string) => void;
29
+ readonly onPrompt?: (info: {
30
+ readonly user_code: string;
31
+ readonly verification_uri: string;
32
+ readonly verification_uri_complete?: string;
33
+ }) => void;
34
+ };
35
+ type InteractiveConfirm = (input: {
36
+ readonly permission: string;
37
+ readonly resource: {
38
+ readonly type: string;
39
+ readonly id?: string;
40
+ };
41
+ readonly reason: string;
42
+ readonly token: string;
43
+ }) => Promise<boolean>;
44
+ /** Asks the user to type `expected` before a destructive action; resolves with what they typed. */
45
+ type TypedConfirm = (input: {
46
+ readonly permission: string;
47
+ readonly resource: {
48
+ readonly type: string;
49
+ readonly id?: string;
50
+ };
51
+ readonly expected: string;
52
+ }) => Promise<string>;
53
+ type TerminalRuntime = {
54
+ readonly argv?: readonly string[];
55
+ readonly env?: Readonly<Record<string, string | undefined>>;
56
+ readonly stdoutIsTTY?: boolean;
57
+ readonly platform?: string;
58
+ readonly now?: () => number;
59
+ readonly write?: (text: string) => void;
60
+ readonly exit?: (code: number) => never;
61
+ readonly fetch?: typeof fetch;
62
+ readonly sleep?: (ms: number) => Promise<void>;
63
+ readonly homedir?: () => string;
64
+ readonly configDir?: string;
65
+ };
66
+ /** The shape of `Entry` from `@napi-rs/keyring`. */
67
+ type KeyringEntry = {
68
+ getPassword(): string | null | undefined;
69
+ setPassword(password: string): void;
70
+ deletePassword(): unknown;
71
+ };
72
+ type TerminalStorageOptions = {
73
+ readonly service: string;
74
+ readonly dir?: string;
75
+ /**
76
+ * `Entry` from `@napi-rs/keyring`: tokens go to the OS keychain under
77
+ * `service`, one entry per profile. Without it, or when the keychain
78
+ * throws, they go to the mode-0600 credentials file.
79
+ */
80
+ readonly keyring?: new (service: string, account: string) => KeyringEntry;
81
+ };
82
+ type TerminalPermDockOptions<TUser = unknown> = InstanceOptions & {
83
+ readonly subject: (context: TokenContext) => TUser | Promise<TUser>;
84
+ readonly actor?: (context: TokenContext) => unknown;
85
+ readonly tenant?: string;
86
+ readonly store?: ApprovalStore;
87
+ readonly storage?: TerminalStorageOptions;
88
+ readonly device?: DeviceFlowOptions;
89
+ readonly interactive?: boolean | {
90
+ readonly confirm?: InteractiveConfirm;
91
+ readonly typed?: TypedConfirm;
92
+ };
93
+ /** Runs a destructive action without the typed confirmation; defaults to `--yes` / `-y` in argv. */
94
+ readonly yes?: boolean;
95
+ /** Decides and prints the decision without running the action; defaults to `--dry-run` in argv. */
96
+ readonly dryRun?: boolean;
97
+ readonly output?: {
98
+ readonly json?: boolean;
99
+ };
100
+ readonly approval?: ApprovalHint;
101
+ readonly runtime?: TerminalRuntime;
102
+ };
103
+ type PermDockResolveOptions = {
104
+ readonly refresh?: boolean;
105
+ readonly source?: TokenSourceName;
106
+ readonly as?: string;
107
+ };
108
+ type CommandEntry = {
109
+ readonly name: string;
110
+ readonly permission: Permission;
111
+ readonly description: string;
112
+ };
113
+ type FilterCommandsOptions = {
114
+ readonly mode: "hide" | "annotate";
115
+ readonly permdock?: PermDock;
116
+ };
117
+ type FormatOptions = {
118
+ readonly json?: boolean;
119
+ readonly permission?: Permission;
120
+ readonly instance?: string;
121
+ readonly subject?: Subject;
122
+ readonly approval?: ApprovalHint;
123
+ };
124
+ type TerminalProblemDetails = ProblemDetails;
125
+ type ProtectContext<T = unknown, V extends PolicyVocabulary = PolicyVocabulary> = {
126
+ readonly permdock: PermDock<V>;
127
+ readonly data: T;
128
+ readonly decision: Extract<Decision, {
129
+ readonly outcome: "granted";
130
+ }>;
131
+ };
132
+ type TerminalPermDock<V extends PolicyVocabulary = PolicyVocabulary> = {
133
+ readonly permdock: (options?: PermDockResolveOptions) => Promise<PermDock<V>>;
134
+ readonly protect: <TArgs extends readonly unknown[], TData = unknown>(permission: Permission, load?: (...args: TArgs) => TData | Promise<TData>) => (action: (context: ProtectContext<TData, V>, ...args: TArgs) => unknown) => (...args: TArgs) => Promise<unknown>;
135
+ readonly filterCommands: (entries: readonly CommandEntry[], options?: FilterCommandsOptions) => readonly CommandEntry[];
136
+ readonly format: (decision: Decision, options?: FormatOptions) => string;
137
+ readonly exitCode: (decision: Decision) => number;
138
+ readonly logout: () => Promise<void>;
139
+ };
140
+ //#endregion
141
+ //#region src/terminal/create.d.ts
142
+ export declare function createPermDock<TUser, TPrincipal extends Principal = Principal, V extends PolicyVocabulary = PolicyVocabulary>(policy: Policy<TUser, TPrincipal, V>, options: TerminalPermDockOptions<TUser>): TerminalPermDock<V>;
143
+ //#endregion
144
+ //#region src/terminal/exit.d.ts
145
+ export declare const EX_OK = 0;
146
+ export declare const EX_USAGE = 64;
147
+ export declare const EX_TEMPFAIL = 75;
148
+ export declare const EX_NOPERM = 77;
149
+ export declare const EX_CONFIG = 78;
150
+ export declare class TerminalExit extends Error {
151
+ override readonly name: "TerminalExit";
152
+ readonly code: number;
153
+ constructor(code: number);
154
+ }
155
+ //#endregion
156
+ //#region src/terminal/format.d.ts
157
+ export declare function exitCode(decision: Decision): number;
158
+ export declare function formatDecision(decision: Decision, options?: FormatOptions): string;
159
+ //#endregion
160
+ //#region src/terminal/token.d.ts
161
+ export declare function looksLikeJwt(value: string): boolean;
162
+ //#endregion
163
+ export type { ApprovalHint, CommandEntry, DeviceFlowOptions, FilterCommandsOptions, FormatOptions, InteractiveConfirm, KeyringEntry, PermDockResolveOptions, ProtectContext, TerminalPermDock, TerminalPermDockOptions, TerminalProblemDetails, TerminalRuntime, TerminalStorageOptions, TokenContext, TokenHelper, TokenSource, TokenSourceName, TypedConfirm };