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 +1 @@
1
- export { t as addLine, n as packageManagerOf, r as peerHint, i as requirePeer } from "./peer-C8swJ2GH.js";
1
+ export { t as addLine, n as packageManagerOf, r as peerHint, i as requirePeer } from "./peer-12Q5I_RH.js";
@@ -1,20 +1,22 @@
1
- import { n as isReadonlyArray, t as compact } from "./compact-CAf557ZB.js";
1
+ import { n as isReadonlyArray, r as isRecord, t as compact } from "./compact-CAf557ZB.js";
2
2
  import { n as freezeDeep, t as freezeCopy } from "./freeze-CrU8nQeX.js";
3
3
  import { n as PermDockValidationError } from "./validation-error-ZfUHbKvf.js";
4
4
  import { a as deniedMessage, i as approvalMessage, n as PermDockDeniedError, t as PermDockApprovalRequiredError } from "./errors-BKy0EfhN.js";
5
5
  import { t as attachInternals } from "./internals-Dk8A8fX3.js";
6
- import { a as getResource, c as listPermissions, g as formerScopes } from "./permission-registry-Br4jSNVi.js";
6
+ import { _ as keyToScope, a as getResource, c as listPermissions, g as formerScopes } from "./permission-registry-DpPtSKNZ.js";
7
7
  import { n as isThenable } from "./thenable-yD7SabqG.js";
8
8
  import { i as readAppData } from "./app-data-MuyzVqX8.js";
9
- import { a as normalizeMemberships, d as scopeList, m as tenantOf } from "./scopes-CUPSjo9q.js";
9
+ import { f as scopeList, h as tenantOf, o as normalizeMemberships } from "./scopes-BHsc-wp-.js";
10
10
  import { o as pickVisible, s as sanitizeContext } from "./validity-CZ7-y0Cj.js";
11
- import { c as nowSeconds, d as resolveActiveTenant, m as tenantsOf, p as scopeField, t as heldRoleNamesIn, u as relatesTo } from "./tenancy-DN2QAx9z.js";
12
- import { l as policyX } from "./policy-DLZJ5gAp.js";
13
- import { A as isContact, C as emptyListeners, S as emitSafe, i as customRolesFor, k as contactMemberships, o as roleSourceFor, r as assignableNamesFor, s as sourceName, t as evaluate, u as customGrantsFor, w as finish } from "./evaluate-_R8QkWaf.js";
14
- import { a as whereGrant, c as applyRoleKinds, i as collectSnapshotGrants, l as audiencesOf, o as heldRoleNames, p as asMembershipSource, r as assignableIn, s as roleLeaf, t as snapshotOf } from "./instance-snapshot-Cxq4ygFc.js";
11
+ import { c as nowSeconds, d as resolveActiveTenant, m as tenantsOf, p as scopeField, t as heldRoleNamesIn, u as relatesTo } from "./tenancy-CmeBQ6Nv.js";
12
+ import { u as policyX } from "./policy-DaJy4nK4.js";
13
+ import { t as byCodePoint } from "./compare-pfyVnBjE.js";
14
+ import { D as emptyListeners, E as emitSafe, N as contactMemberships, O as finish, P as isContact, i as customRolesFor, o as roleSourceFor, r as assignableNamesFor, s as sourceName, t as evaluate, u as customGrantsFor, w as unknownLevelsFor } from "./evaluate-B_oqFbWC.js";
15
+ import { a as whereGrant, c as applyRoleKinds, i as collectSnapshotGrants, l as audiencesOf, o as heldRoleNames, p as asMembershipSource, r as assignableIn, s as roleLeaf, t as snapshotOf } from "./instance-snapshot-CjcwnEiV.js";
15
16
  import { r as relationReader, t as pendingRelations } from "./relations-BnCWnJGI.js";
16
- import { r as snapshotGrant } from "./snapshot-CXUWfsNy.js";
17
- import { i as decideForTarget, n as mayUse, o as signSnapshot, r as permittedIds, t as whereFromGrants } from "./where-scope-Dv-WTP-w.js";
17
+ import { r as snapshotGrant } from "./snapshot-CbGmYiJx.js";
18
+ import { a as decideForTarget, i as permittedIds, o as deniedFor, r as mayUse, s as signSnapshot, t as whereFromGrants } from "./where-scope-wq2coopv.js";
19
+ import { i as decideAllWith, n as canAllWith } from "./checks-BC_0mPIq.js";
18
20
  import { r as isSubject, t as anonymousSubject } from "./subject-BGoM5o8B.js";
19
21
  //#region src/core/app.ts
20
22
  const APP = Symbol.for("permdock.app");
@@ -145,6 +147,7 @@ function buildInstance(policy, subject, envBase, team) {
145
147
  const queuedAuth = [...envBase.queuedAuth];
146
148
  const queuedErrors = [...envBase.queuedErrors ?? []];
147
149
  const customGrants = customGrantsFor(policy, envBase.customRoles);
150
+ const unknownLevels = unknownLevelsFor(policy, envBase.customRoles);
148
151
  const relationCache = envBase.relationCache ?? /* @__PURE__ */ new Map();
149
152
  const relations = relationReader(envBase.relations, relationCache, policy.resources);
150
153
  const assignableAt = (tenant) => assignableIn(policy, subject, envBase.customRoles, customGrants, tenant, tenant === void 0 ? void 0 : envBase.assignable?.get(tenant));
@@ -165,11 +168,25 @@ function buildInstance(policy, subject, envBase, team) {
165
168
  });
166
169
  const decideImpl = (permission, data, options) => evaluate(policy, subject, permission, data, options ?? {}, envFor(options?.call !== "simulate", options?.call === "can"));
167
170
  const explainImpl = (permission, data, options) => {
168
- return decideImpl(permission, data, {
171
+ const explained = decideImpl(permission, data, {
169
172
  ...options,
170
173
  call: options?.call ?? "explain",
171
174
  explain: true
172
175
  });
176
+ const named = unknownLevels.filter((entry) => entry.permission === permission.key);
177
+ return named.length === 0 ? explained : {
178
+ ...explained,
179
+ trace: {
180
+ ...explained.trace,
181
+ skipped: [...explained.trace.skipped, ...named.map((entry) => ({
182
+ role: entry.role,
183
+ permission: entry.permission,
184
+ effect: "allow",
185
+ why: "unknown-level",
186
+ level: entry.level
187
+ }))]
188
+ }
189
+ };
173
190
  };
174
191
  const canImpl = (permission, data, options) => {
175
192
  try {
@@ -190,9 +207,44 @@ function buildInstance(policy, subject, envBase, team) {
190
207
  const instance = {
191
208
  can: canImpl,
192
209
  decide: decideImpl,
210
+ canAll: (checks, options) => canAllWith(canImpl, checks, options),
211
+ decideAll: (checks, options) => decideAllWith(decideImpl, checks, options),
193
212
  decideEach(permission, rows, options) {
194
213
  return Object.freeze(rows.map((row) => decideImpl(permission, row, options)));
195
214
  },
215
+ async decideIds(permission, ids, options) {
216
+ const { data, ...decide } = options;
217
+ const invalid = () => deniedFor(permission, "validation");
218
+ let loaded;
219
+ try {
220
+ loaded = await data(ids);
221
+ } catch {
222
+ return Object.freeze(ids.map(invalid));
223
+ }
224
+ const resource = getResource(policy.permissions, permission.resource);
225
+ const scopes = scopeList(policy.scopes);
226
+ const root = scopes[0]?.name;
227
+ const rowOf = (id) => {
228
+ if (loaded instanceof Map) return loaded.get(id);
229
+ return isReadonlyArray(loaded) ? loaded.find((row) => isRecord(row) && resource !== void 0 && row[resource.id] === id) : void 0;
230
+ };
231
+ const tenantField = root === void 0 ? void 0 : scopeField(resource, root, scopes);
232
+ const results = [];
233
+ for (const id of ids) {
234
+ const row = rowOf(id);
235
+ if (row === void 0 || row === null) {
236
+ results.push(invalid());
237
+ continue;
238
+ }
239
+ const tenant = tenantField !== void 0 && isRecord(row) ? row[tenantField] : void 0;
240
+ const target = typeof tenant === "string" && tenant !== "" ? instance.tenant(tenant) : instance;
241
+ results.push(target.decide(permission, row, {
242
+ ...decide,
243
+ trusted: true
244
+ }));
245
+ }
246
+ return Object.freeze(results);
247
+ },
196
248
  decideFor(principalId, permission, row) {
197
249
  return decideForTarget(subject, envBase.principals, envBase.targets, principalId, permission, row);
198
250
  },
@@ -356,11 +408,13 @@ function buildInstance(policy, subject, envBase, team) {
356
408
  ...envBase,
357
409
  relationCache
358
410
  }, team);
411
+ const activeTenant = resolveActiveTenant(subject.principal, id, scopeList(policy.scopes));
359
412
  return buildInstance(policy, freezeDeep(compact({
360
413
  ...subject,
361
414
  principal: compact({
362
415
  ...subject.principal,
363
- tenant: resolveActiveTenant(subject.principal, id, scopeList(policy.scopes))
416
+ tenant: activeTenant,
417
+ unheldTenant: activeTenant === void 0 ? id : void 0
364
418
  })
365
419
  })), {
366
420
  ...envBase,
@@ -448,6 +502,30 @@ function buildInstance(policy, subject, envBase, team) {
448
502
  //#endregion
449
503
  //#region src/core/oauth-scopes.ts
450
504
  /**
505
+ * Every OAuth scope a token may carry to the permission keys it reaches: each
506
+ * permission's own scope, the scopes of the keys it was renamed from, and each
507
+ * coarse `oauthScopes` scope. Scopes and keys are sorted by code point. A key
508
+ * outside `permissions` is dropped, so a stale `oauthScopes` entry grants
509
+ * nothing. better-supabase's `delegation.scopes` and the SQL helpers'
510
+ * `rls.tokenScopes` ceiling both read this map.
511
+ */
512
+ function delegatedScopeMap(permissions, oauthScopes = []) {
513
+ const delegated = /* @__PURE__ */ new Map();
514
+ const add = (scope, key) => {
515
+ const keys = delegated.get(scope) ?? /* @__PURE__ */ new Set();
516
+ keys.add(key);
517
+ delegated.set(scope, keys);
518
+ };
519
+ const known = /* @__PURE__ */ new Set();
520
+ for (const permission of permissions) {
521
+ known.add(permission.key);
522
+ add(permission.scope, permission.key);
523
+ for (const former of permission.renamedFrom ?? []) add(keyToScope(former), permission.key);
524
+ }
525
+ for (const entry of oauthScopes) for (const key of entry.permissions) if (known.has(key)) add(entry.scope, key);
526
+ return Object.fromEntries([...delegated.keys()].toSorted(byCodePoint).map((scope) => [scope, [...delegated.get(scope) ?? []].toSorted(byCodePoint)]));
527
+ }
528
+ /**
451
529
  * `delegation` with every coarse OAuth scope the policy declares in
452
530
  * `oauthScopes` followed by the scopes of the permissions it covers, so the
453
531
  * delegation checks downstream match them. The token's scopes stay first and
@@ -546,16 +624,22 @@ function assemblePrincipal(policy, user, options, auth) {
546
624
  }
547
625
  };
548
626
  let stale;
627
+ let roles;
549
628
  if (principal !== null && source !== void 0 && !fromClaims) {
550
629
  live = true;
551
630
  memberships = read(source, principal);
552
631
  } else if (principal?.memberships !== void 0 && fromClaims && source.onStale === "reread" && source.version !== void 0) {
553
- const reread = rereadStale(source, principal, principal.memberships, () => read(source, principal), auth);
632
+ const reread = rereadStale(source, principal, principal.memberships, () => read(source, principal), auth, source.globalRolesFor === void 0 ? void 0 : () => source.globalRolesFor?.(compact({
633
+ id: principal.id,
634
+ kind: principal.kind
635
+ })) ?? []);
554
636
  memberships = reread.memberships;
555
637
  stale = reread.stale;
638
+ roles = reread.roles;
556
639
  }
557
640
  return compact({
558
641
  principal,
642
+ roles,
559
643
  context: contextResult,
560
644
  actor,
561
645
  delegation: expandOAuthScopes(policy, delegation),
@@ -574,7 +658,7 @@ function versionQuery(principal) {
574
658
  memberships: principal.memberships
575
659
  });
576
660
  }
577
- function rereadStale(source, principal, claims, read, auth) {
661
+ function rereadStale(source, principal, claims, read, auth, readRoles) {
578
662
  const claimed = principal.authzVersion;
579
663
  const judge = (current) => typeof claimed === "number" && current !== void 0 && claimed >= current ? "fresh" : "reread";
580
664
  const unknown = () => {
@@ -592,14 +676,39 @@ function rereadStale(source, principal, claims, read, auth) {
592
676
  } catch {
593
677
  freshness = unknown();
594
678
  }
595
- if (isThenable(freshness)) return {
596
- memberships: freshness.then((found) => found === "reread" ? read() : claims),
597
- stale: freshness.then((found) => found === "unknown")
679
+ const failed = () => {
680
+ auth.push({
681
+ reason: "source-threw",
682
+ source: "memberships",
683
+ ...sourceName(source)
684
+ });
685
+ return [];
598
686
  };
599
- return {
600
- memberships: freshness === "reread" ? read() : claims,
601
- stale: freshness === "unknown"
687
+ const rolesOf = (found) => {
688
+ if (found !== "reread" || readRoles === void 0) return;
689
+ try {
690
+ const roles = readRoles();
691
+ return isThenable(roles) ? Promise.resolve(roles).catch(failed) : roles;
692
+ } catch {
693
+ return failed();
694
+ }
602
695
  };
696
+ if (isThenable(freshness)) {
697
+ const settled = freshness.then((found) => ({
698
+ found,
699
+ roles: rolesOf(found)
700
+ }));
701
+ return {
702
+ memberships: settled.then(({ found }) => found === "reread" ? read() : claims),
703
+ stale: settled.then(({ found }) => found === "unknown"),
704
+ roles: settled.then(({ roles }) => roles)
705
+ };
706
+ }
707
+ return compact({
708
+ memberships: freshness === "reread" ? read() : claims,
709
+ stale: freshness === "unknown",
710
+ roles: rolesOf(freshness)
711
+ });
603
712
  }
604
713
  function finishSubject(policy, assembled, context, input, options, extra) {
605
714
  if (assembled.principal === null) return freezeCopy(compact({
@@ -617,12 +726,14 @@ function finishSubject(policy, assembled, context, input, options, extra) {
617
726
  const roles = held === void 0 ? kinds.roles : [];
618
727
  const memberships = held === void 0 ? kinds.memberships : outsideHeld(held, options) ? [] : kinds.memberships.filter((membership) => tenantOf(membership, scopes) === held);
619
728
  const plans = contact ? [] : [.../* @__PURE__ */ new Set([...assembled.principal.plans ?? [], ...extra.plans])];
729
+ const activeTenant = contact ? void 0 : activeTenantOf(policy, assembled, memberships, options);
620
730
  const withMemberships = freezeCopy(compact({
621
731
  ...assembled.principal,
622
732
  roles,
623
733
  memberships,
624
734
  plans: plans.length > 0 ? plans : contact ? void 0 : assembled.principal.plans,
625
- tenant: contact ? void 0 : activeTenantOf(policy, assembled, memberships, options)
735
+ tenant: activeTenant,
736
+ unheldTenant: activeTenant === void 0 ? options.tenant : void 0
626
737
  }));
627
738
  return freezeCopy(compact({
628
739
  principal: withMemberships,
@@ -760,7 +871,17 @@ function withRequestContext(request, resolved) {
760
871
  };
761
872
  }
762
873
  function resolveSubject(policy, user, options, auth) {
763
- const assembled = assemblePrincipal(policy, user, options, auth);
874
+ const first = assemblePrincipal(policy, user, options, auth);
875
+ const apply = (roles) => resolveAssembled(policy, roles === void 0 || first.principal === null ? first : {
876
+ ...first,
877
+ principal: {
878
+ ...first.principal,
879
+ roles
880
+ }
881
+ }, options, auth);
882
+ return isThenable(first.roles) ? Promise.resolve(first.roles).then(apply) : apply(first.roles);
883
+ }
884
+ function resolveAssembled(policy, assembled, options, auth) {
764
885
  const memberships = settle(assembled.memberships, [], () => {
765
886
  auth.push({
766
887
  reason: "source-threw",
@@ -803,35 +924,42 @@ function instantiate(codePolicy, subject, options, auth) {
803
924
  const customRoles = customRolesFor(roleSource, tenants, auth, subject.principal === null ? void 0 : subject.principal.roles ?? [], (tenant) => heldRoleNamesIn(subject.principal, scopes, tenant));
804
925
  const assignable = assignableNamesFor(roleSource, tenants, auth);
805
926
  const approvals = options.approvalPolicies?.load(policy, tenants, auth);
806
- const build = (roles, names, approvalPolicies) => buildInstance(policy, subject, compact({
807
- customRoles: roles,
808
- sink: options.sink,
809
- limits: options.limits,
810
- limitCache: /* @__PURE__ */ new Map(),
811
- simulated: false,
812
- roleSource,
813
- assignable: names,
814
- queuedAuth: auth,
815
- queuedErrors: errors,
816
- relations: options.relations,
817
- approvalPolicies,
818
- memberships: options.memberships === void 0 ? void 0 : asMembershipSource(options.memberships),
819
- principals: options.principals,
820
- settings: options.settings,
821
- targets: (principal, tenant) => getPermDock(codePolicy, {
822
- principal,
823
- context: {}
824
- }, compact({
825
- tenant,
826
- memberships: options.memberships,
827
- customRoles: options.customRoles,
828
- entitlements: options.entitlements,
927
+ const build = (roles, names, approvalPolicies) => {
928
+ for (const entry of unknownLevelsFor(policy, roles)) auth.push({
929
+ reason: "schema",
930
+ source: "customRoles",
931
+ cause: `unknown-level: ${entry.role} grants ${entry.permission} at '${entry.level}', which its resource does not declare`
932
+ });
933
+ return buildInstance(policy, subject, compact({
934
+ customRoles: roles,
935
+ sink: options.sink,
829
936
  limits: options.limits,
830
- policies: options.policies,
937
+ limitCache: /* @__PURE__ */ new Map(),
938
+ simulated: false,
939
+ roleSource,
940
+ assignable: names,
941
+ queuedAuth: auth,
942
+ queuedErrors: errors,
831
943
  relations: options.relations,
832
- approvalPolicies: options.approvalPolicies
833
- }))
834
- }));
944
+ approvalPolicies,
945
+ memberships: options.memberships === void 0 ? void 0 : asMembershipSource(options.memberships),
946
+ principals: options.principals,
947
+ settings: options.settings,
948
+ targets: (principal, tenant) => getPermDock(codePolicy, {
949
+ principal,
950
+ context: {}
951
+ }, compact({
952
+ tenant,
953
+ memberships: options.memberships,
954
+ customRoles: options.customRoles,
955
+ entitlements: options.entitlements,
956
+ limits: options.limits,
957
+ policies: options.policies,
958
+ relations: options.relations,
959
+ approvalPolicies: options.approvalPolicies
960
+ }))
961
+ }));
962
+ };
835
963
  if (isThenable(customRoles) || isThenable(assignable) || isThenable(approvals)) return Promise.all([
836
964
  customRoles,
837
965
  assignable,
@@ -865,4 +993,4 @@ function getPermDock(policy, user, options = {}) {
865
993
  return Promise.resolve().then(() => create(policy, user, options));
866
994
  }
867
995
  //#endregion
868
- export { hasScope as a, withApp as c, challengeScope as i, getPermDockSync as n, scopesReaching as o, resolveSubject as r, APP as s, getPermDock as t };
996
+ export { delegatedScopeMap as a, APP as c, challengeScope as i, withApp as l, getPermDockSync as n, hasScope as o, resolveSubject as r, scopesReaching as s, getPermDock as t };
@@ -1,7 +1,8 @@
1
- import { $n as Delegation, Bn as LimitDetail, G as CustomRoleSourceFactory, Hn as Obligation, J as EntitlementSource, Nn as Decision, Q as LimitStore, Rn as ExplainedDecision, Rt as Instant, T as Policy, Un as Quota, Vt as Snapshot, W as CustomRoleSource, Xt as DecisionEvent, _ as GrantLimit, at as SettingsSource, cn as Scope, et as MembershipSource, h as Grant, i as ApprovalOption, ir as Subject, it as RelationSource, j as PolicyVocabulary, lr as Condition, nr as Membership, q as DecisionSink, qn as Actor, qt as AuthEvent, rr as Principal, sr as AdapterId, ut as TokenSigner } from "./policy-types-DzwivBgR.js";
2
- import { N as ResourceNode, V as AppData, a as RoleTree, n as PlanTree, r as Role, w as Permission } from "./vocabulary-D6lPdb4Z.js";
3
- import { i as OperationEffect, s as OperationMeta, t as Operation, u as OperationRisk } from "./operations-CxybZErY.js";
4
- import { i as HostedPolicies } from "./hosted-DBDX0M-P.js";
1
+ import { G as CustomRoleSourceFactory, Gt as Snapshot, Hn as ExplainedDecision, J as EntitlementSource, Kn as Obligation, Ln as Decision, Q as LimitStore, Rt as Instant, T as Policy, W as CustomRoleSource, Wn as LimitDetail, Zn as Actor, Zt as AuthEvent, _ as GrantLimit, at as SettingsSource, en as DecisionEvent, et as MembershipSource, fn as Scope, fr as AdapterId, h as Grant, i as ApprovalOption, it as RelationSource, j as PolicyVocabulary, lr as Subject, mr as Condition, or as Membership, q as DecisionSink, qn as Quota, rr as Delegation, sr as Principal, ut as TokenSigner } from "./policy-types-B-F-qAZk.js";
2
+ import { O as AppData, b as ResourceNode, u as Permission } from "./permission-types-DhNEmoRG.js";
3
+ import { a as RoleTree, n as PlanTree, r as Role } from "./vocabulary-Bg3eeT2H.js";
4
+ import { i as OperationEffect, s as OperationMeta, t as Operation, u as OperationRisk } from "./operations-BNLes61x.js";
5
+ import { a as HostedPolicies } from "./hosted-BmjzxQhp.js";
5
6
  //#region src/core/approval-policies.d.ts
6
7
  /**
7
8
  * One approval requirement kept as data, for a tenant or the whole platform.
@@ -122,6 +123,10 @@ declare function tightenApproval(code: Grant["approval"], entries: readonly Load
122
123
  readonly operation?: OperationMeta | undefined;
123
124
  }): Grant["approval"];
124
125
  //#endregion
126
+ //#region src/core/checks.d.ts
127
+ /** One check of `canAll` or `decideAll`: a permission alone, or with the row it is checked on. */
128
+ type PermissionCheck = Permission | readonly [permission: Permission, data?: unknown];
129
+ //#endregion
125
130
  //#region src/core/limits.d.ts
126
131
  declare function memoryLimitStore(): LimitStore & {
127
132
  /** Live counters, for tests and diagnostics. */
@@ -216,6 +221,12 @@ declare function memoryPrincipalSource<TPrincipal extends Principal>(input: {
216
221
  type Boundary = "http-body" | "mcp-args" | "tool-args" | "decision-endpoint" | "manual";
217
222
  //#endregion
218
223
  //#region src/core/permdock.d.ts
224
+ /** Rows the server loaded for `decideIds`: by id, or a list carrying the resource id field. */
225
+ type LoadedRows = ReadonlyMap<string, unknown> | readonly unknown[];
226
+ type DecideIdsOptions = Omit<DecideOptions, "trusted" | "boundary"> & {
227
+ /** Loads the rows for `ids`; ids it leaves out are denied with `validation`. */
228
+ readonly data: (ids: readonly string[]) => LoadedRows | Promise<LoadedRows>;
229
+ };
219
230
  type DecideOptions = {
220
231
  /** `true` skips schema validation for a row the server loaded itself. Otherwise `data` is validated against the resource schema first (`validate: 'boundary'`), and a failure denies with reason `validation`. */
221
232
  readonly trusted?: boolean;
@@ -316,12 +327,30 @@ type PermDock<V extends PolicyVocabulary = PolicyVocabulary> = {
316
327
  */
317
328
  (permission: Permission, data: unknown, options?: DecideOptions): Decision;
318
329
  };
330
+ /**
331
+ * `can` for every check, on one instance: `true` only when each is
332
+ * granted, and `false` for an empty list. A check is a permission, or a
333
+ * `[permission, row]` pair. It stops at the first check that is not granted.
334
+ */
335
+ readonly canAll: (checks: readonly PermissionCheck[], options?: DecideOptions) => boolean;
336
+ /** `decide` for every check, in check order; a check is a permission or a `[permission, row]` pair. */
337
+ readonly decideAll: (checks: readonly PermissionCheck[], options?: DecideOptions) => readonly Decision[];
319
338
  /**
320
339
  * `decide` for each row, in row order. Each row is its own call: a limit
321
340
  * is consumed once per granted row, so rows past the cap are denied with
322
341
  * `limit`, and each `approval-required` row carries its own token.
323
342
  */
324
343
  readonly decideEach: (permission: Permission, rows: readonly unknown[], options?: DecideOptions) => readonly Decision[];
344
+ /**
345
+ * `decide` for each id, in id order, on rows the server loads itself:
346
+ * `options.data(ids)` answers a map from id to row, or the rows with their
347
+ * resource id field. Each row is trusted (no schema check) and decided in
348
+ * the tenant its own root scope field names, as `permdock.tenant(<that
349
+ * value>)` would, so one call can span tenants. An id with no loaded row,
350
+ * a loader that throws and a row of another resource are denied with
351
+ * `validation`. A snapshot instance denies every id with `unsupported`.
352
+ */
353
+ readonly decideIds: (permission: Permission, ids: readonly string[], options: DecideIdsOptions) => Promise<readonly Decision[]>;
325
354
  /**
326
355
  * What `permission` on `row` decides for the principal `principalId`,
327
356
  * loaded from `principals` in this instance's active tenant with no actor
@@ -499,4 +528,4 @@ declare function getPermDockSync<TUser, TPrincipal extends Principal = Principal
499
528
  /** The instance for `user`: waits for every source, then builds it. `getPermDockSync` is the synchronous twin. */
500
529
  declare function getPermDock<TUser, TPrincipal extends Principal = Principal, V extends PolicyVocabulary = PolicyVocabulary>(policy: Policy<TUser, TPrincipal, V>, user: TUser | Subject | null, options?: PermDockOptions): Promise<PermDock<V>>;
501
530
  //#endregion
502
- export { ApprovalPolicyValidation as C, validateApprovalPolicy as E, ApprovalPolicySource as S, memoryApprovalPolicySource as T, limits as _, RowPair as a, ApprovalPolicy as b, WhereResult as c, PrincipalIdentity as d, PrincipalIdentityLink as f, Limits as g, PermittedIdsOptions as h, PermDockOptions as i, getPermDock as l, memoryPrincipalSource as m, DeriveOptions as n, SimulateOptions as o, PrincipalSource as p, PermDock as r, SnapshotOptions as s, DecideOptions as t, getPermDockSync as u, memoryLimitStore as v, approvalPolicies as w, ApprovalPolicyProblem as x, ApprovalPolicies as y };
531
+ export { ApprovalPolicy as C, approvalPolicies as D, ApprovalPolicyValidation as E, memoryApprovalPolicySource as O, ApprovalPolicies as S, ApprovalPolicySource as T, PermittedIdsOptions as _, PermDock as a, memoryLimitStore as b, SimulateOptions as c, getPermDock as d, getPermDockSync as f, memoryPrincipalSource as g, PrincipalSource as h, LoadedRows as i, validateApprovalPolicy as k, SnapshotOptions as l, PrincipalIdentityLink as m, DecideOptions as n, PermDockOptions as o, PrincipalIdentity as p, DeriveOptions as r, RowPair as s, DecideIdsOptions as t, WhereResult as u, Limits as v, ApprovalPolicyProblem as w, PermissionCheck as x, limits as y };
@@ -382,4 +382,4 @@ function renamedKeys(tree) {
382
382
  return map;
383
383
  }
384
384
  //#endregion
385
- export { resource as _, getResource as a, listPermissions as c, attachRegistry as d, resourceOfNode as f, formerScopes as g, formerKeys as h, getRegistry as i, mergePermissions as l, annotationsFor as m, findPermission as n, isPermission as o, walk as p, formerByKey as r, isRegistryTree as s, assertKeys as t, renamedKeys as u };
385
+ export { keyToScope as _, getResource as a, listPermissions as c, attachRegistry as d, resourceOfNode as f, formerScopes as g, formerKeys as h, getRegistry as i, mergePermissions as l, annotationsFor as m, findPermission as n, isPermission as o, walk as p, formerByKey as r, isRegistryTree as s, assertKeys as t, renamedKeys as u, resource as v };
@@ -238,68 +238,10 @@ type ActionNames<A extends ActionList | undefined> = A extends readonly string[]
238
238
  type LeavesFrom<Prefix extends string, Names extends string, T, Kind extends PermissionKind, X = never> = [Names] extends [never] ? object : { readonly [K in Names]: WithX<Permission<Prefix extends "" ? K : `${Prefix}.${K}`, T, Kind>, X>; };
239
239
  type InferResourceLeaves<R extends ResourceInit, Prefix extends string, X = never> = R extends ResourceInit<infer T, infer A, infer C> ? LeavesFrom<Prefix, ActionNames<A>, T, "instance", X> & LeavesFrom<Prefix, ActionNames<C>, T, "collection", X> : object;
240
240
  type InferPermissionTree<Input, Prefix extends string = "", X = never> = Input extends ResourceInit ? InferResourceLeaves<Input, Prefix, X> : Input extends Record<string, unknown> ? { readonly [K in keyof Input & string]: InferPermissionTree<Input[K], Prefix extends "" ? K : `${Prefix}.${K}`, X>; } : never;
241
- //#endregion
242
- //#region src/core/vocabulary.d.ts
243
- declare const ROLE_KIND: "role";
244
- declare const PLAN_KIND: "plan";
245
- /** `defineRoles` and `definePlans` options. */
246
- type VocabularyOptions<X = never> = {
247
- /**
248
- * A Standard Schema for every leaf's `meta.x`, validated synchronously at
249
- * definition time. On a role tree it also checks the `meta.x` of custom
250
- * roles a `CustomRoleSource` returns; an invalid one is dropped, not the role.
251
- */
252
- readonly x?: AppDataSchema<X>;
253
- };
254
241
  /**
255
- * A role's metadata. `audience` names the surface its holders use (`'staff'`,
256
- * `'portal'`, `'platform'`); `permdock.audiences()` lists the distinct
257
- * audiences of the roles held in the active scope.
242
+ * The tree `definePermissions(input, options)` returns, nameable for an
243
+ * explicit annotation under `isolatedDeclarations`.
258
244
  */
259
- type RoleMeta = ActionMeta & {
260
- readonly audience?: string;
261
- };
262
- type Role<K extends string = string> = {
263
- readonly key: K;
264
- /** A declared scope name, or the `tenant` / `team` alias. */
265
- readonly on?: string;
266
- readonly assignable: boolean;
267
- readonly meta: RoleMeta;
268
- readonly kind: typeof ROLE_KIND;
269
- };
270
- type Plan<K extends string = string> = {
271
- readonly key: K;
272
- readonly meta: ActionMeta;
273
- readonly kind: typeof PLAN_KIND;
274
- };
275
- type RoleInit = {
276
- /** A declared scope name, or the `tenant` / `team` alias. */
277
- readonly on?: string;
278
- readonly assignable?: boolean;
279
- readonly meta?: RoleMeta;
280
- };
281
- type PlanInit = {
282
- readonly meta?: ActionMeta;
283
- };
284
- type RoleTree = {
285
- readonly [key: string]: Role;
286
- };
287
- type PlanTree = {
288
- readonly [key: string]: Plan;
289
- };
290
- type Vocabulary = {
291
- readonly permissions?: unknown;
292
- readonly roles?: RoleTree;
293
- readonly plans?: PlanTree;
294
- };
295
- type InferRoleTree<Input, X = never> = { readonly [K in keyof Input & string]: WithX<Role<K>, X>; };
296
- type InferPlanTree<Input, X = never> = { readonly [K in keyof Input & string]: WithX<Plan<K>, X>; };
297
- declare function isRole(value: unknown): value is Role;
298
- declare function isPlan(value: unknown): value is Plan;
299
- declare function defineRoles<const Input extends Record<string, RoleInit>, X = never>(input: Input, options?: VocabularyOptions<X>): InferRoleTree<Input, X>;
300
- declare function definePlans<const Input extends Record<string, PlanInit>, X = never>(input: Input, options?: VocabularyOptions<X>): InferPlanTree<Input, X>;
301
- declare function listRoles(tree: RoleTree | undefined): readonly Role[];
302
- declare function listPlans(tree: PlanTree | undefined): readonly Plan[];
303
- declare function findRole(tree: RoleTree | undefined, key: string): Role | undefined;
245
+ type PermissionsOf<Input, PX = never, RX = never> = InferPermissionTree<Input, "", PX> & ResourceXTree<RX>;
304
246
  //#endregion
305
- export { ResourceLevel as A, RESOURCE_X as B, InferPermissionTree as C, PermissionsOptions as D, PermissionTree as E, ResourceParent as F, AppDataSchema as H, ResourceRelation as I, ResourceRelationInput as L, ResourceMeta as M, ResourceNode as N, PrincipalRelation as O, ResourceOptions as P, ResourceRestricted as R, FieldRelation as S, PermissionKind as T, MetaValue as U, AppData as V, ComputedRelation as _, RoleTree as a, EdgeMatch as b, definePlans as c, isPlan as d, isRole as f, ActionMeta as g, ActionList as h, RoleMeta as i, ResourceLink as j, ResourceInit as k, defineRoles as l, listRoles as m, PlanTree as n, Vocabulary as o, listPlans as p, Role as r, VocabularyOptions as s, Plan as t, findRole as u, EdgeGroup as v, Permission as w, EdgeRelation as x, EdgeGroups as y, ResourceXTree as z };
247
+ export { MetaValue as A, ResourceRelation as C, RESOURCE_X as D, ResourceXTree as E, AppData as O, ResourceParent as S, ResourceRestricted as T, ResourceLevel as _, EdgeGroups as a, ResourceNode as b, FieldRelation as c, PermissionKind as d, PermissionTree as f, ResourceInit as g, PrincipalRelation as h, EdgeGroup as i, WithX as j, AppDataSchema as k, InferPermissionTree as l, PermissionsOptions as m, ActionMeta as n, EdgeMatch as o, PermissionsOf as p, ComputedRelation as r, EdgeRelation as s, ActionList as t, Permission as u, ResourceLink as v, ResourceRelationInput as w, ResourceOptions as x, ResourceMeta as y };
@@ -1,4 +1,5 @@
1
- import { C as InferPermissionTree, k as ResourceInit, r as Role, t as Plan } from "./vocabulary-D6lPdb4Z.js";
1
+ import { g as ResourceInit, l as InferPermissionTree } from "./permission-types-DhNEmoRG.js";
2
+ import { r as Role, t as Plan } from "./vocabulary-Bg3eeT2H.js";
2
3
  import { StandardSchemaV1 } from "@standard-schema/spec";
3
4
  //#region src/testing/saas/permissions.d.ts
4
5
  declare const SaasProjectSchema: StandardSchemaV1<SaasProject>;
@@ -1,5 +1,5 @@
1
1
  import { n as freezeDeep } from "./freeze-CrU8nQeX.js";
2
- import { d as attachRegistry, p as walk, r as formerByKey, t as assertKeys } from "./permission-registry-Br4jSNVi.js";
2
+ import { d as attachRegistry, p as walk, r as formerByKey, t as assertKeys } from "./permission-registry-DpPtSKNZ.js";
3
3
  import { r as assertGraphTargets } from "./resource-relations-D_jw0BFx.js";
4
4
  //#region src/core/operation-risks.ts
5
5
  /** Every `meta.risk` level, lowest first. */
@@ -1,7 +1,7 @@
1
- import { i as crud } from "./src-DLfUWFAI.js";
2
- import { _ as resource } from "./permission-registry-Br4jSNVi.js";
3
- import { f as definePlans, p as defineRoles } from "./grantee-Cn1HyUsI.js";
4
- import { t as definePermissions } from "./permissions-B-wCP5ZC.js";
1
+ import { c as crud } from "./src-DLFrtrrC.js";
2
+ import { v as resource } from "./permission-registry-DpPtSKNZ.js";
3
+ import { f as definePlans, p as defineRoles } from "./grantee-BrRANrpT.js";
4
+ import { t as definePermissions } from "./permissions-CyH2MV_B.js";
5
5
  //#region src/testing/saas/schema.ts
6
6
  function accepts(kind, value) {
7
7
  switch (kind) {
@@ -0,0 +1,21 @@
1
+ //#region src/cloud/pkce.ts
2
+ function base64url(bytes) {
3
+ let binary = "";
4
+ for (const byte of bytes) binary += String.fromCodePoint(byte);
5
+ return btoa(binary).replaceAll("+", "-").replaceAll("/", "_").replace(/=+$/u, "");
6
+ }
7
+ /** `length` random bytes as base64url, from Web Crypto. */
8
+ function randomToken(length) {
9
+ return base64url(globalThis.crypto.getRandomValues(new Uint8Array(length)));
10
+ }
11
+ /** An RFC 7636 verifier of 43 characters and its `S256` challenge. */
12
+ async function pkce() {
13
+ const verifier = randomToken(32);
14
+ const digest = await globalThis.crypto.subtle.digest("SHA-256", new TextEncoder().encode(verifier));
15
+ return {
16
+ verifier,
17
+ challenge: base64url(new Uint8Array(digest))
18
+ };
19
+ }
20
+ //#endregion
21
+ export { randomToken as n, pkce as t };
@@ -1,7 +1,7 @@
1
1
  import { a as sole } from "./compact-CAf557ZB.js";
2
- import { i as configError, n as CliError } from "./errors-CWTY6uih.js";
3
- import { i as requirePeer } from "./peer-C8swJ2GH.js";
4
- import { M as qualified, _ as subjectClaimJsonSql } from "./shared-CD11nBbC.js";
2
+ import { i as configError, n as CliError } from "./errors-DpP_U6Bf.js";
3
+ import { i as requirePeer } from "./peer-12Q5I_RH.js";
4
+ import { D as qualified, _ as subjectClaimJsonSql } from "./shared-fMKOv8hP.js";
5
5
  //#region src/cli/pg.ts
6
6
  const CONNECT_TIMEOUT_MS = 1e4;
7
7
  const STATEMENT_TIMEOUT_MS = 6e4;
@@ -1,5 +1,5 @@
1
- import { T as Policy, ir as Subject, rr as Principal } from "./policy-types-DzwivBgR.js";
2
- import { c as saasPlans, l as saasRoles, s as saasPermissions } from "./permissions-oEWfl-kl.js";
1
+ import { T as Policy, lr as Subject, sr as Principal } from "./policy-types-B-F-qAZk.js";
2
+ import { c as saasPlans, l as saasRoles, s as saasPermissions } from "./permissions-CoqCOfJ3.js";
3
3
  //#region src/testing/saas/policy.d.ts
4
4
  /** Daily API-key quota per subject; the bucket should be per tenant too. */
5
5
  declare const SAAS_API_KEY_LIMIT = 5;
@@ -1,15 +1,15 @@
1
1
  import { t as compact } from "./compact-CAf557ZB.js";
2
2
  import { n as freezeDeep } from "./freeze-CrU8nQeX.js";
3
- import { c as withGrantSchema, d as assertApprovalVersions, i as completeGrant, o as flattenGrants, p as normalizeWhere, s as flattenPermissions, u as assertApprovalRelations } from "./role-builder-CXbis5-X.js";
4
- import { c as listPermissions, i as getRegistry, m as annotationsFor, n as findPermission, s as isRegistryTree } from "./permission-registry-Br4jSNVi.js";
3
+ import { c as withGrantSchema, d as assertApprovalVersions, i as completeGrant, o as flattenGrants, p as normalizeWhere, s as flattenPermissions, u as assertApprovalRelations } from "./role-builder-C1VJzvcr.js";
4
+ import { c as listPermissions, i as getRegistry, m as annotationsFor, n as findPermission, s as isRegistryTree } from "./permission-registry-DpPtSKNZ.js";
5
5
  import { d as isSelfParented, l as isFieldRelation } from "./resource-relations-D_jw0BFx.js";
6
- import { t as canonicalJson } from "./canonical-json-BC8_nMTw.js";
6
+ import { t as canonicalJson } from "./canonical-json-DwilZ1iB.js";
7
7
  import { r as sha256Digest } from "./sha256-D9ihqmvd.js";
8
- import { n as defineScopes, o as resolveScope } from "./scopes-CUPSjo9q.js";
9
- import { o as flattenGrantee, r as asGrantee, v as listRoles } from "./grantee-Cn1HyUsI.js";
8
+ import { n as defineScopes, s as resolveScope } from "./scopes-BHsc-wp-.js";
9
+ import { o as flattenGrantee, r as asGrantee, v as listRoles } from "./grantee-BrRANrpT.js";
10
10
  import { n as normalizeValidity } from "./validity-CZ7-y0Cj.js";
11
- import { a as relationStart, i as relationHops, n as isGraphRelation, t as inheritCondition } from "./grantee-conditions-CcXf8hMM.js";
12
- import { a as memberOfFields, p as scopeField, u as relatesTo } from "./tenancy-DN2QAx9z.js";
11
+ import { a as relationStart, i as relationHops, n as isGraphRelation, t as inheritCondition } from "./grantee-conditions-C6P1Tvol.js";
12
+ import { a as memberOfFields, p as scopeField, u as relatesTo } from "./tenancy-CmeBQ6Nv.js";
13
13
  import { t as byCodePoint } from "./compare-pfyVnBjE.js";
14
14
  //#region src/core/policy-assertions.ts
15
15
  function assertParentGraph(resources) {
@@ -374,6 +374,15 @@ function grantList(policy) {
374
374
  function declaredRoleNames(policy) {
375
375
  return policy.index.declaredRoles;
376
376
  }
377
+ /**
378
+ * Whether `value` names a role the policy declares, for a role read as a
379
+ * string from a database or a token. A name it rejects is an unknown role,
380
+ * which grants nothing (`unknown-role`). A tenant's custom roles are not
381
+ * declared; `CustomRoleSource` resolves them.
382
+ */
383
+ function isRoleName(policy, value) {
384
+ return typeof value === "string" && policy.index.declaredRoles.has(value);
385
+ }
377
386
  function separationConflicts(policy, memberships) {
378
387
  const exclusive = exclusivePairs(policy);
379
388
  const seen = /* @__PURE__ */ new Set();
@@ -396,4 +405,4 @@ function separationConflicts(policy, memberships) {
396
405
  return conflicts;
397
406
  }
398
407
  //#endregion
399
- export { levelCondition as a, separationConflicts as c, indexPolicy as i, policyX as l, definePolicy as n, levelNames as o, grantList as r, policyLevels as s, declaredRoleNames as t, normalizeDelegation as u };
408
+ export { isRoleName as a, policyLevels as c, normalizeDelegation as d, indexPolicy as i, separationConflicts as l, definePolicy as n, levelCondition as o, grantList as r, levelNames as s, declaredRoleNames as t, policyX as u };