permdock 0.5.0 → 0.7.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 (399) hide show
  1. package/README.md +1 -0
  2. package/dist/{2020-C9VN-x8c.js → 2020-CJbO8Bvz.js} +1 -3
  3. package/dist/a2a/index.d.ts +5 -5
  4. package/dist/a2a/index.js +4 -4
  5. package/dist/{adoption-scan-B4R5fnMU.js → adoption-scan-D-feE7BE.js} +1 -1
  6. package/dist/agent/index.d.ts +3 -3
  7. package/dist/agent/index.js +1 -1
  8. package/dist/ai-sdk/index.d.ts +21 -6
  9. package/dist/ai-sdk/index.js +19 -9
  10. package/dist/{approval-prompt-Djo_PyZc.d.ts → approval-prompt-K0faOLFp.d.ts} +2 -2
  11. package/dist/approvals/index.d.ts +4 -4
  12. package/dist/approvals/index.js +4 -4
  13. package/dist/{approvals-DJ6Yd5z1.js → approvals-CMRfsbBh.js} +74 -48
  14. package/dist/{arazzo-B6lebmiQ.js → arazzo-ClrF3PVb.js} +2 -2
  15. package/dist/{arazzo-BWhNF-k0.js → arazzo-rdeJ8n1J.js} +4 -4
  16. package/dist/{args-IIolxxKA.js → args-CC3OwyHW.js} +112 -2
  17. package/dist/astro/index.d.ts +6 -6
  18. package/dist/astro/index.js +2 -2
  19. package/dist/{audience-Dg8XsRaO.js → audience-BrMs8c4o.js} +1 -1
  20. package/dist/{auth-DRLEizbL.js → auth-CscUX8Sy.js} +3 -4
  21. package/dist/authzen/index.d.ts +162 -22
  22. package/dist/authzen/index.js +315 -146
  23. package/dist/{automation-BMZPIVUM.d.ts → automation-DOtAFWdy.d.ts} +3 -3
  24. package/dist/{automation-DVjOckjV.js → automation-ySsxp_Yp.js} +1 -1
  25. package/dist/base-url-BQbddZO5.js +9 -0
  26. package/dist/better-auth/index.d.ts +2 -2
  27. package/dist/better-auth/index.js +2 -2
  28. package/dist/better-supabase/index.d.ts +50 -8
  29. package/dist/better-supabase/index.js +94 -32
  30. package/dist/{bind-CZzhx-Vj.js → bind-D1nO6fiC.js} +5 -5
  31. package/dist/{bind--9EFVYWF.d.ts → bind-JDuvxjuW.d.ts} +7 -7
  32. package/dist/{build-instance-BMnAudHn.js → build-instance-DxE7czo9.js} +1 -1
  33. package/dist/{canonical-json-BC8_nMTw.js → canonical-json-DwilZ1iB.js} +6 -3
  34. package/dist/{capability-BSslw1QV.d.ts → capability-D4UC9TTW.d.ts} +2 -2
  35. package/dist/{capability-N1K9IpqS.js → capability-L7NnfhiE.js} +1 -1
  36. package/dist/{casbin-Cr7RLtA3.js → casbin-BHijLuHY.js} +2 -2
  37. package/dist/{casbin-Dyu2gnUD.js → casbin-BW9pS47J.js} +1 -1
  38. package/dist/{casl-64gpT-8x.js → casl-CmJlgziS.js} +2 -2
  39. package/dist/{casl-DjEDhTCP.js → casl-UbI8v-Wq.js} +1 -1
  40. package/dist/catalog/index.d.ts +70 -10
  41. package/dist/catalog/index.js +112 -6
  42. package/dist/catalog-BCCjSAdH.js +1 -0
  43. package/dist/{catalog-R_A__RsH.js → catalog-BaMQfQ6Y.js} +3 -3
  44. package/dist/{catalog-BECMPrwc.js → catalog-D69WhFii.js} +43 -13
  45. package/dist/{catalog-doc-C9wjsfNY.js → catalog-doc-CV9s6B1S.js} +28 -5
  46. package/dist/{catalog-fingerprint-CCP0-yQS.js → catalog-fingerprint-C144oW4M.js} +1 -1
  47. package/dist/{create-BWRSXgOF.js → challenge-nGWma08S.js} +122 -25
  48. package/dist/chat/index.d.ts +1 -1
  49. package/dist/chat/index.js +2 -2
  50. package/dist/chat-sdk/index.d.ts +3 -3
  51. package/dist/checks-BC_0mPIq.js +37 -0
  52. package/dist/claude-agent/index.d.ts +3 -3
  53. package/dist/claude-agent/index.js +2 -2
  54. package/dist/clerk/index.d.ts +3 -3
  55. package/dist/clerk/index.js +1 -1
  56. package/dist/cli/bin.js +2 -2
  57. package/dist/cli/index.d.ts +3 -3
  58. package/dist/cli/index.js +3 -3
  59. package/dist/cloud/index.d.ts +127 -11
  60. package/dist/cloud/index.js +251 -3
  61. package/dist/{cloud-CIoHNevm.js → cloud-CO8pYtwr.js} +5 -5
  62. package/dist/{codemod-Cxvvc70T.js → codemod-BP6n8N9L.js} +3 -3
  63. package/dist/{codemod-Bmj9dWMH.js → codemod-i4N2BhDc.js} +3 -3
  64. package/dist/{collect-CrZJJnEF.js → collect-BaWeMjwV.js} +17 -8
  65. package/dist/{collect-DloHbDVa.js → collect-DNm3oKOk.js} +6 -5
  66. package/dist/collect-k_Dulxr5.js +1 -0
  67. package/dist/compile/index.d.ts +1 -1
  68. package/dist/compile/index.js +1 -1
  69. package/dist/{compile-CMqMx_IN.js → compile-BAEO5bOk.js} +2 -2
  70. package/dist/{compile-Ckm2HqBZ.d.ts → compile-COM2VKuN.d.ts} +3 -3
  71. package/dist/{completion-BqhRBJD8.js → completion-BNdVf7X2.js} +3 -3
  72. package/dist/{config-bs_kZeYq.js → config-CoQHDrDi.js} +7 -3
  73. package/dist/{config-B46rm9sc.js → config-DGZzMV1B.js} +2 -2
  74. package/dist/{config-report-DUgj62Ai.js → config-report-Cm7UITNA.js} +3 -3
  75. package/dist/connector-schema-_VCSsdtD.js +433 -0
  76. package/dist/{context-bbFHR-0D.js → context--uM9V3Ui.js} +2 -2
  77. package/dist/convex/index.d.ts +5 -5
  78. package/dist/convex/index.js +2 -2
  79. package/dist/core-B5-w6Kw9.js +335 -0
  80. package/dist/core-CQkE8Esr.d.ts +179 -0
  81. package/dist/{create-0VZ7Pdiu.d.ts → create-B2-CQqCI.d.ts} +5 -5
  82. package/dist/{create-C3b4B5eF.js → create-Cb86Z8Im.js} +9 -8
  83. package/dist/{create-DnrmLnLW.js → create-DJrlhEp9.js} +5 -5
  84. package/dist/{create-BFfm17UA.d.ts → create-QHuuPw3q.d.ts} +7 -7
  85. package/dist/{create-BDS7wc3y.d.ts → create-UTnUVETj.d.ts} +30 -10
  86. package/dist/{credential-DM2um3ha.js → credential-CIM7wHwA.js} +4 -4
  87. package/dist/{credentials-DPyHmYz5.js → credentials-BpuTwd7a.js} +1 -1
  88. package/dist/{deciding-columns-Sq12mEA6.js → deciding-columns-DRo2QM6E.js} +13 -2
  89. package/dist/{delegation-DaXVdDhM.js → delegation-C5rOdTp5.js} +5 -5
  90. package/dist/delivery/index.d.ts +5 -5
  91. package/dist/delivery/index.js +4 -3
  92. package/dist/{delivery-DCAgNyCn.js → delivery-rwOKLWRm.js} +51 -2
  93. package/dist/{denied-text-D8jDHgsl.d.ts → denied-text-D4qkEtFz.d.ts} +2 -2
  94. package/dist/{describe-BybMRY7A.js → describe-DZlnEtLy.js} +1 -0
  95. package/dist/{describe-BZUsixiL.d.ts → describe-O0SwYIK8.d.ts} +2 -2
  96. package/dist/{diff-CxZo9pTq.js → diff-Btr1c1Ow.js} +2 -2
  97. package/dist/{diff-DCePiN6M.js → diff-DzT-xD13.js} +10 -10
  98. package/dist/{doctor-DFjUxf2f.js → doctor-BU1szn63.js} +241 -49
  99. package/dist/{doctor-CxiwSfqH.js → doctor-BoK_y0KO.js} +4 -4
  100. package/dist/drizzle/index.d.ts +3 -3
  101. package/dist/drizzle/index.js +1 -1
  102. package/dist/elysia/index.d.ts +5 -5
  103. package/dist/elysia/index.js +3 -3
  104. package/dist/{errors-C2PXIv4c.d.ts → errors-B_Qg9D3e.d.ts} +2 -2
  105. package/dist/{errors-CWTY6uih.js → errors-DpP_U6Bf.js} +1 -0
  106. package/dist/{evaluate-_R8QkWaf.js → evaluate-B_oqFbWC.js} +130 -34
  107. package/dist/{evaluations-16UqqQ6W.d.ts → evaluations-BCddEOfO.d.ts} +4 -4
  108. package/dist/{evaluations-DZ2CbV5k.js → evaluations-DReoiVBw.js} +4 -4
  109. package/dist/eve/index.d.ts +5 -5
  110. package/dist/eve/index.js +3 -3
  111. package/dist/express/index.d.ts +5 -5
  112. package/dist/express/index.js +3 -3
  113. package/dist/fastify/index.d.ts +5 -5
  114. package/dist/fastify/index.js +3 -3
  115. package/dist/{fetch-adapter-qKJBuRqy.d.ts → fetch-adapter-CuhyYwC1.d.ts} +4 -4
  116. package/dist/{fetch-adapter-g0ypLkID.js → fetch-adapter-De-u6vhJ.js} +3 -3
  117. package/dist/{fields-D9tPVUUS.js → fields-ClcQLrVc.js} +48 -13
  118. package/dist/{files-C5ZI27eV.js → files-acUbNwWt.js} +15 -2
  119. package/dist/{fixtures-B7XrLeY7.js → fixtures-BTMW6zgU.js} +2 -2
  120. package/dist/{flags-C3DktBDY.js → flags-aaeRAdiD.js} +2 -2
  121. package/dist/{from-snapshot-D2lZt4Dd.js → from-snapshot-Bz469dIh.js} +17 -10
  122. package/dist/generate-3FNO5P5Q.js +159 -0
  123. package/dist/{grantee-Cn1HyUsI.js → grantee-BrRANrpT.js} +14 -4
  124. package/dist/{grantee-conditions-CcXf8hMM.js → grantee-conditions-C6P1Tvol.js} +1 -1
  125. package/dist/{grantee-match-DHArqY82.js → grantee-match-0RtHWQDx.js} +3 -3
  126. package/dist/h3/index.d.ts +4 -4
  127. package/dist/h3/index.js +3 -3
  128. package/dist/{helpers-DTcZOzhF.js → helpers-DY3vXuGs.js} +3 -3
  129. package/dist/hono/index.d.ts +5 -5
  130. package/dist/hono/index.js +3 -3
  131. package/dist/{hosted-DBDX0M-P.d.ts → hosted-BmjzxQhp.d.ts} +14 -2
  132. package/dist/{hosted-BZIAYvon.js → hosted-XBgU6RGT.js} +34 -12
  133. package/dist/{http-DXJ37RDA.js → http-Ca3Sr5x1.js} +1 -1
  134. package/dist/{import-DMmOG27O.js → import-Bz0GefWg.js} +5 -5
  135. package/dist/{import-CNV7I2Dw.js → import-DB2EG_iy.js} +3 -3
  136. package/dist/{index-CxGUswIC.d.ts → index-BE8y3moU.d.ts} +50 -8
  137. package/dist/{index-Chrs5fQ-.d.ts → index-BSfRl0hZ.d.ts} +6 -6
  138. package/dist/{index-DOVf7RJv.d.ts → index-BTkwrK7v.d.ts} +155 -17
  139. package/dist/index-CMiPH2Tv.d.ts +206 -0
  140. package/dist/{index-SGdIQyzc.d.ts → index-DH9DUDEM.d.ts} +18 -3
  141. package/dist/{index-BcHcPyIo.d.ts → index-DLwcuCN_.d.ts} +86 -7
  142. package/dist/index.d.ts +18 -17
  143. package/dist/index.js +27 -25
  144. package/dist/{init-GG6Jh8HD.js → init-5TXNji88.js} +5 -5
  145. package/dist/{init-DeMYsnYJ.js → init-B-4t1NzC.js} +4 -4
  146. package/dist/{instance-options-Omfd793B.d.ts → instance-options-CU0YQCLH.d.ts} +1 -1
  147. package/dist/{instance-snapshot-Cxq4ygFc.js → instance-snapshot-CjcwnEiV.js} +20 -14
  148. package/dist/jwt/index.d.ts +83 -5
  149. package/dist/jwt/index.js +143 -5
  150. package/dist/{kernel-5JatXyND.js → kernel-DVExUwkp.js} +138 -12
  151. package/dist/kysely/index.d.ts +3 -3
  152. package/dist/kysely/index.js +1 -1
  153. package/dist/load-DrMHXzgN.js +1 -0
  154. package/dist/{load-DFS_ry0W.js → load-DxroEzH1.js} +2 -2
  155. package/dist/{login-Dfe5RlYk.js → login-ClSJh5t5.js} +4 -4
  156. package/dist/{login-imhuwvn3.js → login-WC9HPJpU.js} +6 -10
  157. package/dist/{manifest-C8IzW3Do.js → manifest-B79YuF2T.js} +6 -2
  158. package/dist/{manifest-mx5ghSFM.d.ts → manifest-BVhExYhw.d.ts} +23 -2
  159. package/dist/{manifest-CtKR3GXL.js → manifest-Dv6q4i5s.js} +54 -35
  160. package/dist/{manifest-schema-C0kK_8V0.js → manifest-schema-Cv492Qev.js} +37 -7
  161. package/dist/{map-claims-D3oRmTk0.js → map-claims-etGIS_Dv.js} +14 -11
  162. package/dist/{map-error-TCAdw-eW.js → map-error-BQGyDm_M.js} +1 -1
  163. package/dist/mcp/index.d.ts +64 -10
  164. package/dist/mcp/index.js +151 -22
  165. package/dist/{migrate-BShP7Vf4.js → migrate-Dodel0IJ.js} +77 -24
  166. package/dist/nest/index.d.ts +5 -5
  167. package/dist/nest/index.js +3 -3
  168. package/dist/next/index.d.ts +9 -9
  169. package/dist/next/index.js +5 -5
  170. package/dist/next/plugin.d.ts +1 -1
  171. package/dist/next/plugin.js +2 -2
  172. package/dist/node/index.d.ts +5 -5
  173. package/dist/node/index.js +2 -2
  174. package/dist/openai/index.d.ts +5 -5
  175. package/dist/openai/index.js +3 -3
  176. package/dist/openapi/index.d.ts +14 -4
  177. package/dist/openapi/index.js +1 -1
  178. package/dist/{openapi-ahr8rHu3.js → openapi-DMocl1bh.js} +4 -4
  179. package/dist/{openapi-B7HZ0f-r.js → openapi-Ddb4628T.js} +2 -7
  180. package/dist/{openapi-DTaEmTSW.js → openapi-ztVaux6j.js} +8 -8
  181. package/dist/{operation-findings-DgATDpvh.js → operation-findings-kRcEp8lE.js} +1 -1
  182. package/dist/{operations-CxybZErY.d.ts → operations-BNLes61x.d.ts} +1 -1
  183. package/dist/orpc/index.d.ts +6 -6
  184. package/dist/orpc/index.js +4 -4
  185. package/dist/otel/index.d.ts +3 -3
  186. package/dist/otel/index.js +1 -1
  187. package/dist/{output-Dyw8fyPF.js → output-DgSDLrta.js} +7 -3
  188. package/dist/{output-files-DhRBBE4n.js → output-files-CCMdcFWb.js} +2 -2
  189. package/dist/output-files-DPAY7-GX.js +1 -0
  190. package/dist/{ownership-BatFgAA4.js → ownership-Z2LpxsGa.js} +1349 -883
  191. package/dist/parse-Ddhz2xf4.js +148 -0
  192. package/dist/{parse-local-manifest-CVSs6J9I.js → parse-local-manifest-T1Q8X3A2.js} +24 -1
  193. package/dist/{parse-local-manifest-DgqtruPn.d.ts → parse-local-manifest-e4mdwAKd.d.ts} +1 -1
  194. package/dist/pdp/index.d.ts +3 -3
  195. package/dist/pdp/index.js +7 -3
  196. package/dist/peer-12Q5I_RH.js +976 -0
  197. package/dist/{peer-CRvC7Hg1.js → peer-DOzzMfZL.js} +1 -1
  198. package/dist/{permdock-B9JxkBwC.js → permdock-BfWEeMqk.js} +177 -49
  199. package/dist/{permdock-D7eeLJER.d.ts → permdock-Dco6dyCK.d.ts} +34 -5
  200. package/dist/{permission-registry-Br4jSNVi.js → permission-registry-DpPtSKNZ.js} +1 -1
  201. package/dist/{vocabulary-D6lPdb4Z.d.ts → permission-types-DhNEmoRG.d.ts} +4 -62
  202. package/dist/{permissions-oEWfl-kl.d.ts → permissions-CoqCOfJ3.d.ts} +2 -1
  203. package/dist/{permissions-B-wCP5ZC.js → permissions-CyH2MV_B.js} +1 -1
  204. package/dist/{permissions-CZKiUfFM.js → permissions-DArULThq.js} +4 -4
  205. package/dist/pkce-5h8NgMQJ.js +21 -0
  206. package/dist/{policies-CO1oOymN.js → policies-B2lZIurj.js} +3 -3
  207. package/dist/{policy-Czo4n3Hs.d.ts → policy-B7dg_yzu.d.ts} +2 -2
  208. package/dist/{policy-DLZJ5gAp.js → policy-DaJy4nK4.js} +17 -8
  209. package/dist/{policy-from-catalog-DzhEc3Y9.js → policy-from-catalog-DFWYkNdu.js} +9 -9
  210. package/dist/{policy-types-DzwivBgR.d.ts → policy-types-B-F-qAZk.d.ts} +109 -5
  211. package/dist/postgres-store-BL9M_CA1.js +1001 -0
  212. package/dist/{postgrest-NUqZT-RB.d.ts → postgrest-CYacM_u7.d.ts} +12 -1
  213. package/dist/{postgrest-CW0IqC-U.js → postgrest-r5faDIzD.js} +47 -5
  214. package/dist/{powersync-BHfuehf3.js → powersync-13odBwiM.js} +3 -3
  215. package/dist/powersync-53ryOZip.js +1059 -0
  216. package/dist/powersync-CExtTLyA.js +1 -0
  217. package/dist/preset/index.js +1 -1
  218. package/dist/{preset-DZdU0tne.js → preset-CHTbd-DQ.js} +2 -2
  219. package/dist/prisma/index.d.ts +2 -2
  220. package/dist/prisma/index.js +1 -1
  221. package/dist/{problem-details-DXlt-vks.d.ts → problem-details-Tcfmj3bV.d.ts} +1 -1
  222. package/dist/prompt-DwtVemER.js +935 -0
  223. package/dist/{protected-DEPHc2xV.d.ts → protected-BwZYL1X_.d.ts} +6 -5
  224. package/dist/{protected-DfjY5mLA.js → protected-DXE3cQYg.js} +2 -2
  225. package/dist/{provider-CC-u3bYP.js → provider-BQsTYYy0.js} +2 -2
  226. package/dist/{provider-DMVt6yYn.d.ts → provider-Csk-THAn.d.ts} +1 -1
  227. package/dist/{provider-store-B5Yrkhzr.js → provider-store-IgqQipCO.js} +2 -2
  228. package/dist/{pull-BgIfno6w.js → pull-CN5OLxrF.js} +7 -7
  229. package/dist/pull-Cty6Ovyu.js +1 -0
  230. package/dist/{push-CmFVBOeI.js → push-tVdG8dUL.js} +54 -14
  231. package/dist/{pushed-policy-BImMTTIM.d.ts → pushed-policy-BbcY9r_4.d.ts} +1 -1
  232. package/dist/{pushed-policy-DobP7AHI.js → pushed-policy-CmYeSQqq.js} +1 -1
  233. package/dist/react/index.d.ts +6 -6
  234. package/dist/react/index.js +3 -3
  235. package/dist/react/provider-client.d.ts +1 -1
  236. package/dist/react/provider-client.js +1 -1
  237. package/dist/react-native/index.d.ts +25 -11
  238. package/dist/react-native/index.js +214 -24
  239. package/dist/{refs-K6eWUJ0H.js → refs-CNJBiTFo.js} +15 -1
  240. package/dist/{replay-D7iKcLFe.d.ts → replay-DCDD_ZfL.d.ts} +1 -1
  241. package/dist/{request-context-BTRTG7OT.js → request-context-BykKLmyE.js} +2 -2
  242. package/dist/resend/index.d.ts +4 -4
  243. package/dist/{retire-CALjIQ7e.js → retire-Wj6dkyDE.js} +2 -2
  244. package/dist/{rls-BA8an5Ap.js → rls-Ck_PocSp.js} +32 -8
  245. package/dist/{rls-j6t43t7n.js → rls-CxBZb4rZ.js} +478 -534
  246. package/dist/{role-builder-CXbis5-X.js → role-builder-C1VJzvcr.js} +3 -3
  247. package/dist/rolldown-runtime-C3I60J0A.js +4 -0
  248. package/dist/{rpc-aPyNi6tA.js → rpc-Bk1bE-ch.js} +1 -1
  249. package/dist/run-Bz7DXGEv.js +1 -0
  250. package/dist/{run-ticket-sxFI6LAk.js → run-ticket-B5d_63Ma.js} +22 -1
  251. package/dist/{run-ticket-BjhTOi6u.d.ts → run-ticket-BpNi7BCi.d.ts} +8 -3
  252. package/dist/{run-DOfMtc9V.js → run-uLD2aWuO.js} +7 -7
  253. package/dist/{runtime-D3VTAiCA.js → runtime-Vif3_-zf.js} +1 -1
  254. package/dist/{saas-FO-Q8oj0.js → saas-Az_Kz-4D.js} +7 -7
  255. package/dist/{scan-BOI5tJ-6.js → scan-DSljDE1Y.js} +1 -1
  256. package/dist/{schema-yLuBWWsh.js → schema-gIcCx7zM.js} +1 -1
  257. package/dist/scim/index.d.ts +3 -2
  258. package/dist/scim/index.js +3 -1
  259. package/dist/scim-C7JYhySg.js +44 -0
  260. package/dist/{scim-ClHtpyV3.js → scim-YNieBO1U.js} +3 -537
  261. package/dist/{scopes-CUPSjo9q.js → scopes-BHsc-wp-.js} +1 -1
  262. package/dist/server/index.d.ts +11 -11
  263. package/dist/server/index.js +7 -7
  264. package/dist/{server-DqCT4CgZ.js → server-Bnga6I50.js} +3 -3
  265. package/dist/{server-types-BLd4MnBX.d.ts → server-types-C4gZUEZy.d.ts} +9 -9
  266. package/dist/{shared-DvvFzYXe.js → shared-C8LjUdVU.js} +1 -1
  267. package/dist/{shared-CD11nBbC.js → shared-fMKOv8hP.js} +46 -39
  268. package/dist/{sink-Bj_lDUDq.d.ts → sink-Cp_Eot9W.d.ts} +4 -4
  269. package/dist/{skills-B6lVdD_W.js → skills-Dcjw9_1C.js} +5 -5
  270. package/dist/{skills-CTYwkl44.js → skills-g_3BS9NC.js} +3 -3
  271. package/dist/{snapshot-CXUWfsNy.js → snapshot-CbGmYiJx.js} +4 -4
  272. package/dist/{snapshot-cache-DZHQ0KF6.js → snapshot-cache-DT2Kx1F8.js} +1 -1
  273. package/dist/{snapshot-cache-DqK9eDmM.d.ts → snapshot-cache-Pahd3IYJ.d.ts} +1 -1
  274. package/dist/solid/index.d.ts +6 -5
  275. package/dist/solid/index.js +4 -4
  276. package/dist/solid-start/index.d.ts +6 -6
  277. package/dist/solid-start/index.js +3 -3
  278. package/dist/{sources-vs5dGOsS.js → sources-B-zYB4GS.js} +111 -25
  279. package/dist/{sources-BV9j0DeZ.d.ts → sources-DEEuGb8S.d.ts} +63 -14
  280. package/dist/sources-qoIJQrJv.js +11 -0
  281. package/dist/{sql-B5T1IL83.js → sql-B96movIM.js} +5 -1
  282. package/dist/sql-CDEPCA0g.d.ts +10 -0
  283. package/dist/{src-DLfUWFAI.js → src-DLFrtrrC.js} +154 -53
  284. package/dist/ssf/index.d.ts +4 -4
  285. package/dist/ssf/index.js +640 -211
  286. package/dist/{standard-webhooks-6lg8v_is.d.ts → standard-webhooks-B_qRg0ws.d.ts} +2 -2
  287. package/dist/{store-4u_hxjWa.js → store-DSP9oGvh.js} +15 -7
  288. package/dist/{store-options-BqEakYRa.js → store-options-B_poyYvg.js} +6 -6
  289. package/dist/{stores-ClZUgeoP.d.ts → stores-BAZwSYZA.d.ts} +6 -5
  290. package/dist/{stores-BbsD4fAR.js → stores-BqEuHC05.js} +2 -2
  291. package/dist/{stream-7-xmnf3U.d.ts → stream-2Vwhl7Er.d.ts} +2 -2
  292. package/dist/{style-Uao76wO7.js → style-Cqo7-73x.js} +1 -0
  293. package/dist/{style-DiKWnAvn.js → style-Ds1gNm77.js} +1 -1
  294. package/dist/supabase/index.d.ts +8 -7
  295. package/dist/supabase/index.js +5 -5
  296. package/dist/supabase/middleware.d.ts +6 -6
  297. package/dist/supabase/middleware.js +6 -6
  298. package/dist/{supabase-Dxlp8A94.js → supabase--0aJdLEd.js} +9 -7
  299. package/dist/{supabase-9pqI57pW.js → supabase-Bqp7iIY2.js} +3 -3
  300. package/dist/supabase-hook-DJxC4PoP.js +1 -0
  301. package/dist/{supabase-hook-DdDQhMlw.js → supabase-hook-Dg0SrQWR.js} +1069 -123
  302. package/dist/supautils-MESd81bF.js +689 -0
  303. package/dist/{support-session-C6xJQYut.js → support-session-Cna49-3f.js} +2 -2
  304. package/dist/svelte/index.d.ts +5 -5
  305. package/dist/svelte/index.js +5 -5
  306. package/dist/svelte/runtime.d.ts +3 -3
  307. package/dist/svelte/runtime.js +3 -3
  308. package/dist/svelte/source.d.ts +5 -5
  309. package/dist/svelte/source.js +2 -2
  310. package/dist/sveltekit/index.d.ts +6 -6
  311. package/dist/sveltekit/index.js +2 -2
  312. package/dist/tanstack-start/index.d.ts +6 -6
  313. package/dist/tanstack-start/index.js +2 -2
  314. package/dist/{tenancy-DN2QAx9z.js → tenancy-CmeBQ6Nv.js} +12 -3
  315. package/dist/terminal/index.d.ts +6 -6
  316. package/dist/terminal/index.js +3 -3
  317. package/dist/testing/core.d.ts +2 -0
  318. package/dist/testing/core.js +1 -0
  319. package/dist/testing/fixtures/index.d.ts +12 -0
  320. package/dist/testing/fixtures/index.js +770 -0
  321. package/dist/testing/index.d.ts +41 -174
  322. package/dist/testing/index.js +241 -731
  323. package/dist/testing/saas/index.d.ts +5 -5
  324. package/dist/testing/saas/index.js +2 -2
  325. package/dist/testing/saas/permissions.d.ts +1 -1
  326. package/dist/testing/saas/permissions.js +1 -1
  327. package/dist/text-diff-DhITNCnD.js +444 -0
  328. package/dist/{token-BLZcjQgt.js → token-2qYDvXz2.js} +1 -1
  329. package/dist/{tool-refusal-CMLN5xhn.js → tool-refusal-reAhIzdl.js} +1 -1
  330. package/dist/trpc/index.d.ts +6 -6
  331. package/dist/trpc/index.js +3 -3
  332. package/dist/{types-5Ut_pbKy.d.ts → types-BWZybqs9.d.ts} +112 -8
  333. package/dist/{types-CZTnPFzM.d.ts → types-BXMYB7BY.d.ts} +2 -2
  334. package/dist/{types-CdlxsYQh.d.ts → types-BfVmNJO5.d.ts} +14 -3
  335. package/dist/{types-BqAKcRNW.d.ts → types-CIeZcG8v.d.ts} +2 -2
  336. package/dist/{types-BNORmDM8.d.ts → types-CKV71kKh.d.ts} +4 -4
  337. package/dist/{types-tIgIeIKJ.d.ts → types-CQVEQawv.d.ts} +4 -4
  338. package/dist/{types-BjV-fqcA.d.ts → types-CeIscIKp.d.ts} +4 -4
  339. package/dist/{types-_sHy8BQf.d.ts → types-CfiKC5aN.d.ts} +1 -1
  340. package/dist/{types-ClZaWzfb.d.ts → types-D3A19w4A.d.ts} +8 -4
  341. package/dist/{types-C8-KNsFf.d.ts → types-DBHftjgS.d.ts} +15 -8
  342. package/dist/{types-CCpc2Dcv.d.ts → types-DC44-hqb.d.ts} +2 -2
  343. package/dist/{types-fbZ7JEXr.d.ts → types-DXmwu78Z.d.ts} +4 -4
  344. package/dist/{types-DiQjupG2.d.ts → types-cTos-H7p.d.ts} +2 -2
  345. package/dist/{types-DX0LaKTb.d.ts → types-g7Oy6Zg4.d.ts} +3 -3
  346. package/dist/unplugin/index.d.ts +1 -1
  347. package/dist/unplugin/index.js +2 -2
  348. package/dist/{usage-T5mXq98v.js → usage-Bybmck7f.js} +7 -7
  349. package/dist/{usage-DHtE8j4E.js → usage-CDaLXCfL.js} +2 -2
  350. package/dist/usage-y-kBNdqs.js +1 -0
  351. package/dist/{validation-error-Bg5Tpluk.d.ts → validation-error-CQpoquwj.d.ts} +1 -1
  352. package/dist/{verify-DbCL9bnB.js → verify-pe8rL_Qw.js} +350 -83
  353. package/dist/{views-DTIIO-oQ.js → views-BB8E9dTP.js} +1 -1
  354. package/dist/vocabulary-Bg3eeT2H.d.ts +67 -0
  355. package/dist/vue/index.d.ts +6 -5
  356. package/dist/vue/index.js +4 -4
  357. package/dist/{waiter-CKy4MQSY.d.ts → waiter-DwEyouan.d.ts} +2 -2
  358. package/dist/watch-Bd9mx3rd.js +1 -0
  359. package/dist/{watch-CszoTJMq.js → watch-C-4VmFlL.js} +3 -3
  360. package/dist/webmcp/index.d.ts +2 -2
  361. package/dist/webmcp/index.js +2 -2
  362. package/dist/{where-scope-Dv-WTP-w.js → where-scope-wq2coopv.js} +41 -21
  363. package/dist/{who-can-D0QoYbEb.js → who-can-BwNsI_Js.js} +6 -6
  364. package/dist/workflow/index.d.ts +3 -3
  365. package/dist/workflow/index.js +5 -5
  366. package/dist/workflow-sdk/index.d.ts +5 -5
  367. package/dist/{wrap-Bd1Tejur.d.ts → wrap-B6R0cMRL.d.ts} +2 -2
  368. package/dist/{wrap-gX61EtpB.js → wrap-CiSc_KCq.js} +8 -2
  369. package/package.json +22 -11
  370. package/schemas/cli-result-v1.json +1 -0
  371. package/schemas/cloud-api-v1.json +152 -7
  372. package/schemas/connector-v1.json +8 -0
  373. package/schemas/supabase-claims-v1.json +5 -0
  374. package/schemas/supabase-manifest-v1.json +276 -75
  375. package/skills/permdock/SKILL.md +1 -0
  376. package/skills/permdock-agents/references/runtimes.md +3 -1
  377. package/skills/permdock-approvals/references/stores-and-resume.md +2 -1
  378. package/skills/permdock-data/references/queries-and-rls.md +5 -2
  379. package/skills/permdock-tenancy/SKILL.md +1 -1
  380. package/skills/permdock-tenancy/references/ownership-and-custom-roles.md +2 -0
  381. package/skills/permdock-wire/references/adapters.md +14 -0
  382. package/skills/permdock-wire/references/policy-options.md +1 -0
  383. package/dist/catalog-DjhMYYCq.js +0 -1
  384. package/dist/collect-FlXJlhus.js +0 -1
  385. package/dist/index-D8EovfsP.d.ts +0 -91
  386. package/dist/load-BxEtwlBS.js +0 -1
  387. package/dist/output-files-B3IZJksC.js +0 -1
  388. package/dist/parse-Cxq0WxrA.js +0 -53
  389. package/dist/peer-C8swJ2GH.js +0 -50
  390. package/dist/powersync-CbzkqL_M.js +0 -1
  391. package/dist/powersync-bYUDLOAO.js +0 -538
  392. package/dist/prompt-DfZLJLIn.js +0 -32
  393. package/dist/pull-ByOks_Tg.js +0 -1
  394. package/dist/run-CNsApDpd.js +0 -1
  395. package/dist/supabase-hook-CXcGpHqq.js +0 -1
  396. package/dist/supautils-B6HYL9eL.js +0 -91
  397. package/dist/text-diff-BQcUapOb.js +0 -15
  398. package/dist/usage-CHOtwL19.js +0 -1
  399. package/dist/watch-Cb-NcaUw.js +0 -1
@@ -1,10 +1,11 @@
1
- import { Rt as Instant, St as ApiKeyPrincipal, T as Policy, U as CredentialVerifier, gt as SupportSession, ir as Subject, pn as ApproverInput, qt as AuthEvent, rr as Principal } from "../policy-types-DzwivBgR.js";
2
- import { E as PermissionTree, w as Permission } from "../vocabulary-D6lPdb4Z.js";
3
- import { d as PrincipalIdentity, i as PermDockOptions, p as PrincipalSource, r as PermDock } from "../permdock-D7eeLJER.js";
4
- import { c as AccessReviewStore } from "../types-_sHy8BQf.js";
5
- import { i as SupabaseRpcCaller } from "../postgrest-NUqZT-RB.js";
6
- import { g as SupabaseSubjectOptions, m as SupabaseSessionLike, u as SupabasePrincipal } from "../types-CdlxsYQh.js";
7
- import { c as LinkPolicy, o as CapabilityPrincipal, t as Capability } from "../capability-BSslw1QV.js";
1
+ import { Rt as Instant, St as ApiKeyPrincipal, T as Policy, U as CredentialVerifier, Zt as AuthEvent, _n as ApproverInput, gt as SupportSession, lr as Subject, sr as Principal } from "../policy-types-B-F-qAZk.js";
2
+ import { f as PermissionTree, u as Permission } from "../permission-types-DhNEmoRG.js";
3
+ import { a as PermDock, h as PrincipalSource, o as PermDockOptions, p as PrincipalIdentity } from "../permdock-Dco6dyCK.js";
4
+ import { c as AccessReviewStore } from "../types-CfiKC5aN.js";
5
+ import { i as SupabaseRpcCaller } from "../postgrest-CYacM_u7.js";
6
+ import { a as CatalogDocument } from "../types-BXMYB7BY.js";
7
+ import { _ as SupabaseSubjectOptions, d as SupabasePrincipal, h as SupabaseSessionLike } from "../types-BfVmNJO5.js";
8
+ import { c as LinkPolicy, o as CapabilityPrincipal, t as Capability } from "../capability-D4UC9TTW.js";
8
9
  import { AuthorizationProvider } from "better-supabase/config";
9
10
  import { AuthSession, AuthorizationHooks, Authorizer, SupportAuthorize, SupportAuthorizeInput } from "better-supabase/server";
10
11
  import { EntitlementClaimOptions } from "better-supabase/blocks/entitlements";
@@ -460,6 +461,32 @@ type ToolPolicy<C> = {
460
461
  */
461
462
  export declare function toolPolicy<C>(options: ToolPolicyOptions<C>): ToolPolicy<C>;
462
463
  //#endregion
464
+ //#region src/better-supabase/memberships.d.ts
465
+ /** A row of the better-supabase `memberships` table (organizations block), as `select user_id, organization_id, role, disabled_at` returns it. */
466
+ type BetterSupabaseMembershipRow = {
467
+ readonly user_id: string;
468
+ readonly organization_id: string;
469
+ readonly role: string;
470
+ readonly disabled_at?: string | null;
471
+ };
472
+ type PrincipalFromMembershipsOptions = {
473
+ /** The policy scope an `organization_id` is an instance of; defaults to `tenant`, the first declared scope. */
474
+ readonly scope?: string;
475
+ /**
476
+ * The organization the request acts in, the principal's active tenant. A
477
+ * scoped grant applies only there; without it, pick one per request with
478
+ * `permdock.tenant(id)`, or every scoped check denies with `no-tenant`.
479
+ */
480
+ readonly tenant?: string;
481
+ };
482
+ /**
483
+ * The principal `userId` is in the better-supabase organizations block: one
484
+ * membership per organization, keyed on `organization_id`, holding the role
485
+ * of each of the user's rows. Rows of another user, disabled rows and
486
+ * malformed rows are dropped, so a user with none holds no membership.
487
+ */
488
+ export declare function principalFromMemberships(userId: string, rows: readonly BetterSupabaseMembershipRow[], options?: PrincipalFromMembershipsOptions): Principal;
489
+ //#endregion
463
490
  //#region src/better-supabase/principals.d.ts
464
491
  /**
465
492
  * Where an identity link points: an app user, whose claims `principal`
@@ -497,6 +524,21 @@ type PrincipalSourceOptions = {
497
524
  */
498
525
  export declare function principalSource(options: PrincipalSourceOptions): PrincipalSource;
499
526
  //#endregion
527
+ //#region src/better-supabase/role-order.d.ts
528
+ type RoleOrderOptions = {
529
+ /** Keep only roles declared `on` this scope, such as the scope SSO assigns memberships in. */
530
+ readonly scope?: string;
531
+ /** The owner role, left out because better-supabase's `roleOrder` must not list it. */
532
+ readonly owner?: string;
533
+ };
534
+ /**
535
+ * The catalog's role keys highest first, for better-supabase's
536
+ * `blocks.sso.options.roleOrder`: a role that `assigns` another comes before
537
+ * it, and roles the `assigns` lists do not order keep catalog order. Roles that
538
+ * assign each other stay together in catalog order, at the first one's place.
539
+ */
540
+ export declare function roleOrderFromCatalog(catalog: CatalogDocument, options?: RoleOrderOptions): readonly string[];
541
+ //#endregion
500
542
  //#region src/better-supabase/share-links.d.ts
501
543
  /** The fields of better-supabase's `ResolvedShareLink` a link subject is built from. */
502
544
  type ShareLinkRow = {
@@ -572,4 +614,4 @@ export declare function hookCan(permdock: PermDock): NonNullable<AuthorizeHookOp
572
614
  */
573
615
  export declare function handlerCan(source: HandlerPermDockSource): ProtectWebHandlerOptions["can"];
574
616
  //#endregion
575
- export type { AccessPolicyOptions, AccessReviewApplierOptions, AccessReviewApplyFailure, AccessReviewApplyResult, ApiKeySession, ApiKeySessionOptions, ApiKeyVerifierOptions, AuthorizationHooksOptions, AuthorizationProviderOptions, AuthorizerOperation, AuthorizerOptions, BetterSupabaseIdentityLink, BetterSupabaseSubjectOptions, BucketAccess, CredentialGuardOptions, HandlerPermDockSource, McpToolDecision, McpToolRef, PendingSupportSession, PrincipalSourceOptions, ProviderApprovers, ServiceRoles, ShareLinkResolver, ShareLinkRow, ShareLinkSubjectOptions, ShareLinkTarget, SubscriberPolicyEvent, SubscriberPolicyOptions, SupabasePrincipal, SupportPolicyOptions, ToolPolicy, ToolPolicyOptions, TopicAccess };
617
+ export type { AccessPolicyOptions, AccessReviewApplierOptions, AccessReviewApplyFailure, AccessReviewApplyResult, ApiKeySession, ApiKeySessionOptions, ApiKeyVerifierOptions, AuthorizationHooksOptions, AuthorizationProviderOptions, AuthorizerOperation, AuthorizerOptions, BetterSupabaseIdentityLink, BetterSupabaseMembershipRow, BetterSupabaseSubjectOptions, BucketAccess, CredentialGuardOptions, HandlerPermDockSource, McpToolDecision, McpToolRef, PendingSupportSession, PrincipalFromMembershipsOptions, PrincipalSourceOptions, ProviderApprovers, RoleOrderOptions, ServiceRoles, ShareLinkResolver, ShareLinkRow, ShareLinkSubjectOptions, ShareLinkTarget, SubscriberPolicyEvent, SubscriberPolicyOptions, SupabasePrincipal, SupportPolicyOptions, ToolPolicy, ToolPolicyOptions, TopicAccess };
@@ -1,29 +1,28 @@
1
1
  import { r as isRecord, t as compact } from "../compact-CAf557ZB.js";
2
2
  import { n as freezeDeep } from "../freeze-CrU8nQeX.js";
3
- import { l as asApprover } from "../role-builder-CXbis5-X.js";
3
+ import { l as asApprover } from "../role-builder-C1VJzvcr.js";
4
4
  import { a as holder, i as flattenApprovers, r as approverLeaves } from "../approvers-CqPOLD-o.js";
5
5
  import { t as loadPrincipal } from "../principal-source-pHneukrx.js";
6
6
  import { a as isId, r as idList } from "../expiry-D4_YKRKD.js";
7
- import { c as listPermissions, n as findPermission, o as isPermission } from "../permission-registry-Br4jSNVi.js";
7
+ import { c as listPermissions, n as findPermission, o as isPermission } from "../permission-registry-DpPtSKNZ.js";
8
8
  import { i as dateAt, m as rfc3339, p as nowSeconds, u as isoAt } from "../time-DkWjdL98.js";
9
- import { t as canonicalJson } from "../canonical-json-BC8_nMTw.js";
9
+ import { t as canonicalJson } from "../canonical-json-DwilZ1iB.js";
10
10
  import { r as sha256Digest } from "../sha256-D9ihqmvd.js";
11
- import { t as decideSupportSession } from "../support-session-C6xJQYut.js";
12
- import { d as scopeList } from "../scopes-CUPSjo9q.js";
13
- import { o as flattenGrantee } from "../grantee-Cn1HyUsI.js";
14
- import { t as byCodePoint } from "../compare-pfyVnBjE.js";
15
- import { o as scopesReaching, t as getPermDock } from "../permdock-B9JxkBwC.js";
11
+ import { t as decideSupportSession } from "../support-session-Cna49-3f.js";
12
+ import { f as scopeList } from "../scopes-BHsc-wp-.js";
13
+ import { o as flattenGrantee } from "../grantee-BrRANrpT.js";
14
+ import { a as delegatedScopeMap, s as scopesReaching, t as getPermDock } from "../permdock-BfWEeMqk.js";
16
15
  import { t as anonymousSubject } from "../subject-BGoM5o8B.js";
17
- import { i as linkPolicyViolation, n as capabilityOf, r as capabilitySubject } from "../capability-N1K9IpqS.js";
18
- import { r as credentialSubject, s as parseCredential } from "../credential-DM2um3ha.js";
16
+ import { i as linkPolicyViolation, n as capabilityOf, r as capabilitySubject } from "../capability-L7NnfhiE.js";
17
+ import { r as credentialSubject, s as parseCredential } from "../credential-CIM7wHwA.js";
19
18
  import { t as AccessReviewError } from "../errors-BDUwg2qC.js";
20
19
  import { t as policyRowConditionKeys } from "../row-conditions-h2HythXQ.js";
21
- import { n as subscribersFor } from "../audience-Dg8XsRaO.js";
22
- import { l as sqlIdent, s as quoteSqlLiteral } from "../sql-B5T1IL83.js";
23
- import "../sources-vs5dGOsS.js";
24
- import { c as subjectFromSupabaseSession, t as callRpc } from "../postgrest-CW0IqC-U.js";
25
- import { t as parseSupabaseManifest } from "../manifest-C8IzW3Do.js";
26
- import { t as parseCatalog } from "../parse-Cxq0WxrA.js";
20
+ import { n as subscribersFor } from "../audience-BrMs8c4o.js";
21
+ import { l as sqlIdent, s as quoteSqlLiteral } from "../sql-B96movIM.js";
22
+ import "../sources-B-zYB4GS.js";
23
+ import { c as subjectFromSupabaseSession, t as callRpc } from "../postgrest-r5faDIzD.js";
24
+ import { n as parseSupabaseManifest, t as hasTokenHook } from "../manifest-B79YuF2T.js";
25
+ import { t as parseCatalog } from "../parse-Ddhz2xf4.js";
27
26
  import { AsyncResult, dbError } from "better-supabase";
28
27
  //#region src/better-supabase/access-reviews.ts
29
28
  const NOT_MEMBER = "ORGANIZATION_NOT_MEMBER";
@@ -907,21 +906,9 @@ function operationsOf(catalog) {
907
906
  }
908
907
  return operations;
909
908
  }
910
- /**
911
- * better-supabase's `delegation.scopes`: each permission's own scope, and
912
- * each coarse scope the catalog's `oauthScopes` lists, to the permission keys
913
- * it reaches, sorted by code point. A key the catalog does not list is
914
- * dropped, so a stale `oauthScopes` entry grants nothing.
915
- */
909
+ /** better-supabase's `delegation.scopes`, the same map `rls.tokenScopes` compiles. */
916
910
  function delegatedScopes(catalog) {
917
- const delegated = {};
918
- const known = /* @__PURE__ */ new Set();
919
- for (const permission of catalog?.permissions ?? []) {
920
- known.add(permission.key);
921
- (delegated[permission.scope] ??= /* @__PURE__ */ new Set()).add(permission.key);
922
- }
923
- for (const entry of catalog?.oauthScopes ?? []) for (const key of entry.permissions) if (known.has(key)) (delegated[entry.scope] ??= /* @__PURE__ */ new Set()).add(key);
924
- return Object.fromEntries(Object.keys(delegated).toSorted(byCodePoint).map((scope) => [scope, [...delegated[scope] ?? []].toSorted(byCodePoint)]));
911
+ return delegatedScopeMap(catalog?.permissions ?? [], catalog?.oauthScopes);
925
912
  }
926
913
  /**
927
914
  * better-supabase's `authorization` config value, built from PermDock's
@@ -1070,7 +1057,7 @@ function authorizationProvider(options) {
1070
1057
  ...Object.keys(operations).length > 0 ? { operations } : {},
1071
1058
  ...Object.keys(delegated).length > 0 ? { delegation: { scopes: delegated } } : {},
1072
1059
  decidingColumns: manifest.decidingColumns,
1073
- tokenHook: tokenHookOf(manifest),
1060
+ ...hasTokenHook(manifest) ? { tokenHook: tokenHookOf(manifest) } : {},
1074
1061
  ...problems.length > 0 ? { problems } : {}
1075
1062
  });
1076
1063
  }
@@ -1339,6 +1326,40 @@ function toolPolicy(options) {
1339
1326
  });
1340
1327
  }
1341
1328
  //#endregion
1329
+ //#region src/better-supabase/memberships.ts
1330
+ function isLiveRow(row, userId) {
1331
+ return isRecord(row) && row["user_id"] === userId && typeof row["organization_id"] === "string" && row["organization_id"] !== "" && typeof row["role"] === "string" && row["role"] !== "" && (row["disabled_at"] === void 0 || row["disabled_at"] === null);
1332
+ }
1333
+ /**
1334
+ * The principal `userId` is in the better-supabase organizations block: one
1335
+ * membership per organization, keyed on `organization_id`, holding the role
1336
+ * of each of the user's rows. Rows of another user, disabled rows and
1337
+ * malformed rows are dropped, so a user with none holds no membership.
1338
+ */
1339
+ function principalFromMemberships(userId, rows, options = {}) {
1340
+ const scope = options.scope ?? "tenant";
1341
+ const roles = /* @__PURE__ */ new Map();
1342
+ for (const row of rows) {
1343
+ if (!isLiveRow(row, userId)) continue;
1344
+ const held = roles.get(row.organization_id) ?? [];
1345
+ if (!held.includes(row.role)) held.push(row.role);
1346
+ roles.set(row.organization_id, held);
1347
+ }
1348
+ const memberships = [...roles].map(([id, names]) => ({
1349
+ scope,
1350
+ id,
1351
+ roles: names
1352
+ }));
1353
+ return freezeDeep(options.tenant === void 0 ? {
1354
+ id: userId,
1355
+ memberships
1356
+ } : {
1357
+ id: userId,
1358
+ memberships,
1359
+ tenant: options.tenant
1360
+ });
1361
+ }
1362
+ //#endregion
1342
1363
  //#region src/better-supabase/principals.ts
1343
1364
  /**
1344
1365
  * A `PrincipalSource` over better-supabase: `principal(id)` maps the claims
@@ -1369,6 +1390,47 @@ function principalSource(options) {
1369
1390
  });
1370
1391
  }
1371
1392
  //#endregion
1393
+ //#region src/better-supabase/role-order.ts
1394
+ /**
1395
+ * The catalog's role keys highest first, for better-supabase's
1396
+ * `blocks.sso.options.roleOrder`: a role that `assigns` another comes before
1397
+ * it, and roles the `assigns` lists do not order keep catalog order. Roles that
1398
+ * assign each other stay together in catalog order, at the first one's place.
1399
+ */
1400
+ function roleOrderFromCatalog(catalog, options = {}) {
1401
+ const roles = (catalog.roles ?? []).filter((role) => role.key !== options.owner && (options.scope === void 0 || role.on === options.scope));
1402
+ const keys = roles.map((role) => role.key);
1403
+ const assigns = new Map(roles.map((role) => [role.key, (role.assigns ?? []).filter((target) => target !== role.key && keys.includes(target))]));
1404
+ const reach = new Map(keys.map((key) => [key, reachable(key, assigns)]));
1405
+ const group = new Map(keys.map((key) => [key, keys.find((other) => other === key || reach.get(key)?.has(other) === true && reach.get(other)?.has(key) === true) ?? key]));
1406
+ const remaining = new Set(keys);
1407
+ const order = [];
1408
+ while (remaining.size > 0) {
1409
+ const ready = [...remaining].find((key) => {
1410
+ const own = group.get(key);
1411
+ return [...remaining].every((by) => group.get(by) === own || ![...remaining].some((target) => group.get(target) === own && (assigns.get(by) ?? []).includes(target)));
1412
+ });
1413
+ const own = group.get(ready ?? [...remaining][0] ?? "");
1414
+ for (const key of keys) if (remaining.has(key) && group.get(key) === own) {
1415
+ order.push(key);
1416
+ remaining.delete(key);
1417
+ }
1418
+ }
1419
+ return Object.freeze(order);
1420
+ }
1421
+ function reachable(from, assigns) {
1422
+ const seen = /* @__PURE__ */ new Set();
1423
+ const stack = [...assigns.get(from) ?? []];
1424
+ while (stack.length > 0) {
1425
+ const key = stack.pop();
1426
+ if (key !== void 0 && !seen.has(key)) {
1427
+ seen.add(key);
1428
+ stack.push(...assigns.get(key) ?? []);
1429
+ }
1430
+ }
1431
+ return seen;
1432
+ }
1433
+ //#endregion
1372
1434
  //#region src/better-supabase/share-links.ts
1373
1435
  const DEFAULT_TTL = 300;
1374
1436
  const MAX_TTL = 3600;
@@ -1488,4 +1550,4 @@ function handlerCan(source) {
1488
1550
  };
1489
1551
  }
1490
1552
  //#endregion
1491
- export { accessReviewApplier, apiKeyClaimOptions, apiKeyVerifier, authorizationHooks, authorizationProvider, authorizer, bucketPolicy, credentialGuard, handlerCan, hookCan, principalSource, subjectFromBetterSupabase, subjectFromShareLink, subscriberPolicy, supportPolicy, toolPolicy, topicPolicy };
1553
+ export { accessReviewApplier, apiKeyClaimOptions, apiKeyVerifier, authorizationHooks, authorizationProvider, authorizer, bucketPolicy, credentialGuard, handlerCan, hookCan, principalFromMemberships, principalSource, roleOrderFromCatalog, subjectFromBetterSupabase, subjectFromShareLink, subscriberPolicy, supportPolicy, toolPolicy, topicPolicy };
@@ -1,10 +1,10 @@
1
1
  import { t as compact } from "./compact-CAf557ZB.js";
2
- import { c as withApp } from "./permdock-B9JxkBwC.js";
3
- import { t as composeWraps } from "./wrap-gX61EtpB.js";
4
- import { r as instanceOptions } from "./build-instance-BMnAudHn.js";
5
- import { p as invalidSignatureResponse } from "./evaluations-DZ2CbV5k.js";
2
+ import { l as withApp } from "./permdock-BfWEeMqk.js";
3
+ import { t as composeWraps } from "./wrap-CiSc_KCq.js";
4
+ import { r as instanceOptions } from "./build-instance-DxE7czo9.js";
5
+ import { f as invalidSignatureResponse } from "./evaluations-DReoiVBw.js";
6
6
  import { n as tenantScope } from "./adapter-context-CRhqyzCk.js";
7
- import { t as createPermDock } from "./create-DnrmLnLW.js";
7
+ import { t as createPermDock } from "./create-DJrlhEp9.js";
8
8
  //#region src/server/bind.ts
9
9
  /** The server kernel with the subject and actor callbacks reading the context `contextOf` maps a `Request` to. */
10
10
  function adapterKernel(policy, options, adapter, contextOf) {
@@ -1,11 +1,11 @@
1
- import { ir as Subject } from "./policy-types-DzwivBgR.js";
2
- import { m as ApprovalStore } from "./types-CCpc2Dcv.js";
3
- import { t as InstanceOptions } from "./instance-options-Omfd793B.js";
1
+ import { lr as Subject } from "./policy-types-B-F-qAZk.js";
2
+ import { m as ApprovalStore } from "./types-DC44-hqb.js";
3
+ import { t as InstanceOptions } from "./instance-options-CU0YQCLH.js";
4
4
  import { t as RequestContext } from "./request-context-C2_1lchh.js";
5
- import { n as PermDockWrap } from "./wrap-Bd1Tejur.js";
6
- import { o as OtelWrap } from "./types-BqAKcRNW.js";
7
- import { r as PdpFactory } from "./types-ClZaWzfb.js";
8
- import { S as TenantOption, _ as WebBotAuthVerifier, t as DeniedResponse } from "./server-types-BLd4MnBX.js";
5
+ import { n as PermDockWrap } from "./wrap-B6R0cMRL.js";
6
+ import { o as OtelWrap } from "./types-CIeZcG8v.js";
7
+ import { r as PdpFactory } from "./types-D3A19w4A.js";
8
+ import { S as TenantOption, _ as WebBotAuthVerifier, t as DeniedResponse } from "./server-types-C4gZUEZy.js";
9
9
  //#region src/server/bind.d.ts
10
10
  /** The options of every framework adapter; `TContext` is what its callbacks receive. */
11
11
  type ServerAdapterOptions<TContext, TUser = unknown> = InstanceOptions & ServerAdapterServices & {
@@ -1,5 +1,5 @@
1
1
  import { t as compact } from "./compact-CAf557ZB.js";
2
- import { t as getPermDock } from "./permdock-B9JxkBwC.js";
2
+ import { t as getPermDock } from "./permdock-BfWEeMqk.js";
3
3
  //#region src/core/instance-options.ts
4
4
  const INSTANCE_KEYS = {
5
5
  memberships: true,
@@ -7,15 +7,18 @@ import { r as isRecord } from "./compact-CAf557ZB.js";
7
7
  * `"<n>n"`, and a repeated object on the current path `"[Circular]"`, so any
8
8
  * validated row serialises.
9
9
  */
10
- function canonicalJson(value, path = /* @__PURE__ */ new Set()) {
10
+ function canonicalJson(value) {
11
+ return canonicalJsonOnPath(value, /* @__PURE__ */ new Set());
12
+ }
13
+ function canonicalJsonOnPath(value, path) {
11
14
  if (typeof value === "bigint") return JSON.stringify(`${value}n`);
12
15
  if (value instanceof Date) return JSON.stringify(Number.isNaN(value.getTime()) ? null : value.toISOString());
13
16
  if (value !== null && typeof value === "object") {
14
17
  if (path.has(value)) return "\"[Circular]\"";
15
18
  path.add(value);
16
19
  try {
17
- if (Array.isArray(value)) return `[${value.map((item) => canonicalJson(item === void 0 ? null : item, path)).join(",")}]`;
18
- if (isRecord(value)) return `{${Object.keys(value).toSorted().filter((key) => value[key] !== void 0).map((key) => `${JSON.stringify(key)}:${canonicalJson(value[key], path)}`).join(",")}}`;
20
+ if (Array.isArray(value)) return `[${value.map((item) => canonicalJsonOnPath(item === void 0 ? null : item, path)).join(",")}]`;
21
+ if (isRecord(value)) return `{${Object.keys(value).toSorted().filter((key) => value[key] !== void 0).map((key) => `${JSON.stringify(key)}:${canonicalJsonOnPath(value[key], path)}`).join(",")}}`;
19
22
  } finally {
20
23
  path.delete(value);
21
24
  }
@@ -1,5 +1,5 @@
1
- import { Rt as Instant, rr as Principal, ut as TokenSigner } from "./policy-types-DzwivBgR.js";
2
- import { E as PermissionTree, w as Permission } from "./vocabulary-D6lPdb4Z.js";
1
+ import { Rt as Instant, sr as Principal, ut as TokenSigner } from "./policy-types-B-F-qAZk.js";
2
+ import { f as PermissionTree, u as Permission } from "./permission-types-DhNEmoRG.js";
3
3
  //#region src/core/capability.d.ts
4
4
  /**
5
5
  * Who may redeem a capability: anyone holding it, any signed-in principal,
@@ -2,7 +2,7 @@ import { t as compact } from "./compact-CAf557ZB.js";
2
2
  import { n as freezeDeep } from "./freeze-CrU8nQeX.js";
3
3
  import { a as ownRecord } from "./paths-DXSHAMIa.js";
4
4
  import { a as isId, o as sameId, r as idList, t as expiredAt } from "./expiry-D4_YKRKD.js";
5
- import { c as listPermissions } from "./permission-registry-Br4jSNVi.js";
5
+ import { c as listPermissions } from "./permission-registry-DpPtSKNZ.js";
6
6
  import { o as epochSeconds, p as nowSeconds } from "./time-DkWjdL98.js";
7
7
  import { t as anonymousSubject } from "./subject-BGoM5o8B.js";
8
8
  //#region src/core/capability.ts
@@ -1,5 +1,5 @@
1
1
  import { t as defineLeaf } from "./command-L8EstFNm.js";
2
- import { c as given, l as outFlag, o as fileOut } from "./flags-C3DktBDY.js";
2
+ import { c as given, l as outFlag, o as fileOut } from "./flags-aaeRAdiD.js";
3
3
  //#region src/cli/commands/casbin.ts
4
4
  const casbinImport = defineLeaf({
5
5
  flags: {
@@ -16,7 +16,7 @@ const casbinImport = defineLeaf({
16
16
  ...outFlag
17
17
  },
18
18
  async run(ctx, { flags }) {
19
- const { runCasbinImport } = await import("./casbin-Dyu2gnUD.js");
19
+ const { runCasbinImport } = await import("./casbin-BW9pS47J.js");
20
20
  return runCasbinImport({
21
21
  cwd: ctx.cwd,
22
22
  model: given(flags.model),
@@ -1,4 +1,4 @@
1
- import { t as applyFiles } from "./files-C5ZI27eV.js";
1
+ import { t as applyFiles } from "./files-acUbNwWt.js";
2
2
  import { n as isIdentifier, t as emitPolicyModule } from "./policy-module-CTlwMvLI.js";
3
3
  import { existsSync, readFileSync } from "node:fs";
4
4
  import { resolve } from "node:path";
@@ -1,5 +1,5 @@
1
1
  import { t as defineLeaf } from "./command-L8EstFNm.js";
2
- import { c as given, l as outFlag, o as fileOut } from "./flags-C3DktBDY.js";
2
+ import { c as given, l as outFlag, o as fileOut } from "./flags-aaeRAdiD.js";
3
3
  //#region src/cli/commands/casl.ts
4
4
  const caslImport = defineLeaf({
5
5
  flags: {
@@ -11,7 +11,7 @@ const caslImport = defineLeaf({
11
11
  ...outFlag
12
12
  },
13
13
  async run(ctx, { flags }) {
14
- const { runCaslImport } = await import("./casl-DjEDhTCP.js");
14
+ const { runCaslImport } = await import("./casl-UbI8v-Wq.js");
15
15
  return runCaslImport({
16
16
  cwd: ctx.cwd,
17
17
  rules: given(flags.rules),
@@ -1,5 +1,5 @@
1
1
  import { r as isRecord } from "./compact-CAf557ZB.js";
2
- import { t as applyFiles } from "./files-C5ZI27eV.js";
2
+ import { t as applyFiles } from "./files-acUbNwWt.js";
3
3
  import { n as isIdentifier, t as emitPolicyModule } from "./policy-module-CTlwMvLI.js";
4
4
  import { existsSync, readFileSync } from "node:fs";
5
5
  import { resolve } from "node:path";
@@ -1,8 +1,8 @@
1
- import { T as Policy, rr as Principal } from "../policy-types-DzwivBgR.js";
2
- import { a as PolicyDocument } from "../hosted-DBDX0M-P.js";
3
- import { a as CatalogDocument, c as CatalogOperation, d as CatalogRole, f as CatalogScope, h as CatalogValidity, i as CatalogDelegation, l as CatalogPermission, m as CatalogUsage, n as CatalogApproval, o as CatalogGrant, p as CatalogSupportAccess, r as CatalogBreakGlass, s as CatalogOAuthScope, t as CatalogActivation, u as CatalogResource } from "../types-CZTnPFzM.js";
4
- import { a as CatalogFinding, i as CatalogEventData } from "../sink-Bj_lDUDq.js";
5
- import { a as pushedPolicy, i as parsePushedPolicy, n as PushedGrant, r as PushedPolicy, t as PUSHED_POLICY_SCHEMA } from "../pushed-policy-BImMTTIM.js";
1
+ import { T as Policy, a as ApprovalRequirement, sr as Principal } from "../policy-types-B-F-qAZk.js";
2
+ import { c as checkHostedGrant, n as HostedGrantCheck, o as PolicyDocument } from "../hosted-BmjzxQhp.js";
3
+ import { a as CatalogDocument, c as CatalogOperation, d as CatalogRole, f as CatalogScope, h as CatalogValidity, i as CatalogDelegation, l as CatalogPermission, m as CatalogUsage, n as CatalogApproval, o as CatalogGrant, p as CatalogSupportAccess, r as CatalogBreakGlass, s as CatalogOAuthScope, t as CatalogActivation, u as CatalogResource } from "../types-BXMYB7BY.js";
4
+ import { a as CatalogFinding, i as CatalogEventData } from "../sink-Cp_Eot9W.js";
5
+ import { a as pushedPolicy, i as parsePushedPolicy, n as PushedGrant, r as PushedPolicy, t as PUSHED_POLICY_SCHEMA } from "../pushed-policy-BbcY9r_4.js";
6
6
  import { StandardSchemaV1 } from "@standard-schema/spec";
7
7
  //#region src/catalog/drift.d.ts
8
8
  /**
@@ -26,6 +26,55 @@ type CatalogDriftInput = {
26
26
  */
27
27
  export declare function catalogDrift(input: CatalogDriftInput): CatalogEventData;
28
28
  //#endregion
29
+ //#region src/catalog/hosted-options.d.ts
30
+ /** The declared roles held at one scope: a scope name as declared, `resource`, or `global` for a role with no `on`. */
31
+ type HostedGrantRoleOption = {
32
+ readonly scope: string;
33
+ readonly roles: readonly string[];
34
+ };
35
+ type HostedGrantRelationOption = {
36
+ readonly relation: string;
37
+ /** Present when the grant may walk the resource's own parent chain. */
38
+ readonly through?: "parent";
39
+ };
40
+ /** What a hosted grant on one hostable permission may say; any other value is dropped by `mergeHostedGrants`. */
41
+ type HostedGrantOption = {
42
+ readonly permission: string;
43
+ readonly resource: string;
44
+ readonly scope: string;
45
+ readonly effects: readonly ("allow" | "deny")[];
46
+ readonly grantees: {
47
+ readonly roles: readonly HostedGrantRoleOption[];
48
+ readonly plans: readonly string[];
49
+ readonly relations: readonly HostedGrantRelationOption[];
50
+ };
51
+ readonly approval: {
52
+ /** `true` when a code allow carries an approval: a hosted allow without one at least as strict is dropped (`weaker-approval`). */
53
+ readonly required: boolean;
54
+ /** The approvals code allows carry; a hosted allow must meet each. */
55
+ readonly meets: readonly ("human" | ApprovalRequirement)[];
56
+ /** `human` is `approval: 'human'`; `any` is the object form, any one approver per approval. `all` and `sequential` stages are never accepted. */
57
+ readonly modes: readonly ("human" | "any")[];
58
+ /** The object-form fields a hosted approval may set. */
59
+ readonly fields: readonly string[];
60
+ /** The grantee kinds `by` and `escalation.to` may name. */
61
+ readonly approvers: readonly ("role" | "plan" | "authenticated")[];
62
+ };
63
+ readonly conditions: {
64
+ /** `where` and `check` accept the portable condition subset only. */
65
+ readonly portable: true;
66
+ /** The resource's top-level fields, from its JSON Schema; `null` when the schema exposes none. */
67
+ readonly fields: readonly string[] | null;
68
+ };
69
+ };
70
+ /**
71
+ * What a hosted grant may say on each permission the policy marks
72
+ * `hostable`, in `hostable` order: the grantees, approval forms and
73
+ * conditions `mergeHostedGrants` accepts. For an authoring form; every
74
+ * grant it builds from these still goes through `checkHostedGrant`.
75
+ */
76
+ export declare function hostedGrantOptions(policy: Policy): readonly HostedGrantOption[];
77
+ //#endregion
29
78
  //#region src/catalog/json-schema-validator.d.ts
30
79
  /**
31
80
  * A Standard Schema that validates against a catalog resource's JSON Schema.
@@ -51,13 +100,24 @@ type OperationCatalog = {
51
100
  */
52
101
  export declare function operationFindings(previous: OperationCatalog, next: OperationCatalog): readonly CatalogFinding[];
53
102
  //#endregion
103
+ //#region src/catalog/references.d.ts
104
+ /** A permission `meta` field `parseCatalog` can require. */
105
+ type CatalogMetaField = "title" | "risk" | "effects";
106
+ //#endregion
54
107
  //#region src/catalog/parse.d.ts
108
+ type ParseCatalogOptions = {
109
+ /** Permission `meta` fields every permission must carry; none by default. */
110
+ readonly requireMeta?: readonly CatalogMetaField[];
111
+ };
55
112
  /**
56
- * Reads a `permissions.catalog.json` document (parsed, or the JSON text) and
57
- * validates it against `schemas/catalog-v1.json`. Returns a deep-frozen copy
58
- * built from own keys; throws `PermDockValidationError` with every issue.
113
+ * Reads a `permissions.catalog.json` document (parsed, or the JSON text),
114
+ * validates it against `schemas/catalog-v1.json`, then checks its references:
115
+ * role scopes, the permission keys operations, grants, delegations and OAuth
116
+ * scopes name, unique keys, and `requireMeta`. Returns a deep-frozen copy
117
+ * built from own keys; throws `PermDockValidationError` with every issue,
118
+ * each with its `path`.
59
119
  */
60
- export declare function parseCatalog(json: unknown): CatalogDocument;
120
+ export declare function parseCatalog(json: unknown, options?: ParseCatalogOptions): CatalogDocument;
61
121
  /** Keys of the permissions the catalog marks `rowConditions: true`: the SQL helpers alone cannot enforce them. */
62
122
  export declare function rowConditionKeys(catalog: CatalogDocument): ReadonlySet<string>;
63
123
  //#endregion
@@ -81,4 +141,4 @@ type PolicyFromCatalogOptions<TUser = unknown> = {
81
141
  */
82
142
  export declare function policyFromCatalog<TUser = unknown>(catalogInput: unknown, pushedInput: unknown, options?: PolicyFromCatalogOptions<TUser>): Policy<TUser>;
83
143
  //#endregion
84
- export { type CatalogActivation, type CatalogApproval, type CatalogBreakGlass, type CatalogDelegation, type CatalogDocument, type CatalogDriftInput, type CatalogGrant, type CatalogOAuthScope, type CatalogOperation, type CatalogPermission, type CatalogResource, type CatalogRole, type CatalogScope, type CatalogSupportAccess, type CatalogUsage, type CatalogValidity, PUSHED_POLICY_SCHEMA, type PolicyFromCatalogOptions, type PushedGrant, type PushedPolicy, parsePushedPolicy, pushedPolicy };
144
+ export { type CatalogActivation, type CatalogApproval, type CatalogBreakGlass, type CatalogDelegation, type CatalogDocument, type CatalogDriftInput, type CatalogGrant, type CatalogMetaField, type CatalogOAuthScope, type CatalogOperation, type CatalogPermission, type CatalogResource, type CatalogRole, type CatalogScope, type CatalogSupportAccess, type CatalogUsage, type CatalogValidity, type HostedGrantCheck, type HostedGrantOption, type HostedGrantRelationOption, type HostedGrantRoleOption, PUSHED_POLICY_SCHEMA, type ParseCatalogOptions, type PolicyFromCatalogOptions, type PushedGrant, type PushedPolicy, checkHostedGrant, parsePushedPolicy, pushedPolicy };
@@ -1,9 +1,14 @@
1
+ import { r as isRecord } from "../compact-CAf557ZB.js";
1
2
  import { n as freezeDeep } from "../freeze-CrU8nQeX.js";
2
- import { t as hostedGrantDrops } from "../hosted-BZIAYvon.js";
3
- import { n as rowConditionKeys, t as parseCatalog } from "../parse-Cxq0WxrA.js";
4
- import { t as operationFindings } from "../operation-findings-DgATDpvh.js";
5
- import { n as resourceSchemaFromJson, t as policyFromCatalog } from "../policy-from-catalog-DzhEc3Y9.js";
6
- import { n as parsePushedPolicy, r as pushedPolicy, t as PUSHED_POLICY_SCHEMA } from "../pushed-policy-DobP7AHI.js";
3
+ import { a as getResource, n as findPermission } from "../permission-registry-DpPtSKNZ.js";
4
+ import { d as isSelfParented } from "../resource-relations-D_jw0BFx.js";
5
+ import { _ as listPlans, m as findRole } from "../grantee-BrRANrpT.js";
6
+ import { t as declaredRoleNames } from "../policy-DaJy4nK4.js";
7
+ import { i as hostedGrantDrops, n as codeApprovals, r as declaredGrantee, t as checkHostedGrant } from "../hosted-XBgU6RGT.js";
8
+ import { n as rowConditionKeys, t as parseCatalog } from "../parse-Ddhz2xf4.js";
9
+ import { t as operationFindings } from "../operation-findings-kRcEp8lE.js";
10
+ import { n as resourceSchemaFromJson, t as policyFromCatalog } from "../policy-from-catalog-DFWYkNdu.js";
11
+ import { n as parsePushedPolicy, r as pushedPolicy, t as PUSHED_POLICY_SCHEMA } from "../pushed-policy-CmYeSQqq.js";
7
12
  //#region src/catalog/drift.ts
8
13
  /** The finding a drop reason becomes; `null` for a reason the catalog did not cause. */
9
14
  function findingCode(reason) {
@@ -48,4 +53,105 @@ function catalogDrift(input) {
48
53
  });
49
54
  }
50
55
  //#endregion
51
- export { PUSHED_POLICY_SCHEMA, catalogDrift, hostedGrantFindings, operationFindings, parseCatalog, parsePushedPolicy, policyFromCatalog, pushedPolicy, resourceSchemaFromJson, rowConditionKeys };
56
+ //#region src/catalog/hosted-options.ts
57
+ function roleScope(policy, name) {
58
+ const on = policy.rolesByName.get(name)?.on ?? findRole(policy.vocabulary.roles, name)?.on;
59
+ if (on === void 0) return "global";
60
+ return typeof on === "string" ? on : "resource";
61
+ }
62
+ function schemaFields(node) {
63
+ const output = (node?.schema)?.["~standard"]?.jsonSchema?.output;
64
+ if (typeof output !== "function") return null;
65
+ try {
66
+ const json = output({ target: "draft-2020-12" });
67
+ const properties = isRecord(json) ? json["properties"] : void 0;
68
+ return isRecord(properties) ? Object.keys(properties).toSorted() : null;
69
+ } catch {
70
+ return null;
71
+ }
72
+ }
73
+ function optionFor(policy, key) {
74
+ const leaf = findPermission(policy.permissions, key);
75
+ if (leaf === void 0) return null;
76
+ const accepts = (grantee) => declaredGrantee(policy, grantee, leaf.resource);
77
+ const byScope = /* @__PURE__ */ new Map();
78
+ for (const role of declaredRoleNames(policy)) {
79
+ const scope = roleScope(policy, role);
80
+ if (accepts({
81
+ kind: "role",
82
+ role,
83
+ scope
84
+ })) byScope.set(scope, [...byScope.get(scope) ?? [], role]);
85
+ }
86
+ const plans = listPlans(policy.vocabulary.plans).map((plan) => plan.key).filter((plan) => accepts({
87
+ kind: "plan",
88
+ plan
89
+ }));
90
+ const node = getResource(policy.permissions, leaf.resource);
91
+ const relations = Object.keys(node?.relations ?? {}).toSorted().flatMap((relation) => {
92
+ const direct = {
93
+ kind: "relation",
94
+ resource: leaf.resource,
95
+ relation
96
+ };
97
+ if (!accepts(direct)) return [];
98
+ return isSelfParented(node) && accepts({
99
+ ...direct,
100
+ through: "parent"
101
+ }) ? [{
102
+ relation,
103
+ through: "parent"
104
+ }] : [{ relation }];
105
+ });
106
+ const meets = codeApprovals(policy, key).filter((approval) => approval !== void 0);
107
+ return {
108
+ permission: key,
109
+ resource: leaf.resource,
110
+ scope: leaf.scope,
111
+ effects: ["allow", "deny"],
112
+ grantees: {
113
+ roles: [...byScope].map(([scope, roles]) => ({
114
+ scope,
115
+ roles
116
+ })),
117
+ plans,
118
+ relations
119
+ },
120
+ approval: {
121
+ required: meets.length > 0,
122
+ meets,
123
+ modes: ["human", "any"],
124
+ fields: [
125
+ "by",
126
+ "distinct",
127
+ "escalation",
128
+ "quorum",
129
+ ...node?.version === void 0 ? [] : ["staleOn"],
130
+ "ttl"
131
+ ],
132
+ approvers: [
133
+ ...byScope.size > 0 ? ["role"] : [],
134
+ ...plans.length > 0 ? ["plan"] : [],
135
+ "authenticated"
136
+ ]
137
+ },
138
+ conditions: {
139
+ portable: true,
140
+ fields: schemaFields(node)
141
+ }
142
+ };
143
+ }
144
+ /**
145
+ * What a hosted grant may say on each permission the policy marks
146
+ * `hostable`, in `hostable` order: the grantees, approval forms and
147
+ * conditions `mergeHostedGrants` accepts. For an authoring form; every
148
+ * grant it builds from these still goes through `checkHostedGrant`.
149
+ */
150
+ function hostedGrantOptions(policy) {
151
+ return freezeDeep(policy.hostable.flatMap((key) => {
152
+ const option = optionFor(policy, key);
153
+ return option === null ? [] : [option];
154
+ }));
155
+ }
156
+ //#endregion
157
+ export { PUSHED_POLICY_SCHEMA, catalogDrift, checkHostedGrant, hostedGrantFindings, hostedGrantOptions, operationFindings, parseCatalog, parsePushedPolicy, policyFromCatalog, pushedPolicy, resourceSchemaFromJson, rowConditionKeys };
@@ -0,0 +1 @@
1
+ export { t as catalogFile, n as runCatalog } from "./catalog-D69WhFii.js";